JacobLinCool Codex commited on
Commit
c4383f3
·
verified ·
1 Parent(s): 8c014b8

feat: reset session without reload

Browse files

Co-authored-by: Codex <noreply@openai.com>

Files changed (1) hide show
  1. static/app.js +38 -7
static/app.js CHANGED
@@ -36,6 +36,7 @@ let targetProfileById = new Map();
36
  let profileFields = [];
37
  let turnWatchdog = null;
38
  let sawTurnToken = false;
 
39
 
40
  bootstrap();
41
 
@@ -66,8 +67,7 @@ exportNotesButton.addEventListener("click", () => exportNotes());
66
  exportChapterButton.addEventListener("click", () => exportChapter());
67
 
68
  resetButton.addEventListener("click", () => {
69
- clearSavedSession();
70
- window.location.reload();
71
  });
72
 
73
  targetsEl.addEventListener("change", (event) => {
@@ -142,17 +142,14 @@ async function runTurn(message) {
142
  async function bootstrap() {
143
  const response = await fetch("/api/bootstrap");
144
  const data = await response.json();
 
145
  const rawProfiles = Array.isArray(data.target_profiles) ? data.target_profiles : [];
146
  const rawOptions = Array.isArray(data.target_options) ? data.target_options : [];
147
  targetProfiles = normalizeTargetProfiles(rawProfiles, rawOptions);
148
  targetOptions = targetProfiles.map((target) => target.id);
149
  targetProfileById = new Map(targetProfiles.map((target) => [target.id, target]));
150
  profileFields = data.profile_fields || [];
151
- session = {
152
- profile: {},
153
- targets: data.default_targets || targetOptions.slice(0, 3),
154
- };
155
- session = normalizeSession(readSavedSession(), session);
156
  renderProvenance(data);
157
  renderTargets(session.targets);
158
  renderProfile(session.profile);
@@ -160,6 +157,40 @@ async function bootstrap() {
160
  renderWhitespace(data.whitespace || []);
161
  }
162
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
163
  async function loadDemoSession() {
164
  submit.disabled = true;
165
  setCommandDisabled(true);
 
36
  let profileFields = [];
37
  let turnWatchdog = null;
38
  let sawTurnToken = false;
39
+ let bootstrapData = null;
40
 
41
  bootstrap();
42
 
 
67
  exportChapterButton.addEventListener("click", () => exportChapter());
68
 
69
  resetButton.addEventListener("click", () => {
70
+ resetSession();
 
71
  });
72
 
73
  targetsEl.addEventListener("change", (event) => {
 
142
  async function bootstrap() {
143
  const response = await fetch("/api/bootstrap");
144
  const data = await response.json();
145
+ bootstrapData = data;
146
  const rawProfiles = Array.isArray(data.target_profiles) ? data.target_profiles : [];
147
  const rawOptions = Array.isArray(data.target_options) ? data.target_options : [];
148
  targetProfiles = normalizeTargetProfiles(rawProfiles, rawOptions);
149
  targetOptions = targetProfiles.map((target) => target.id);
150
  targetProfileById = new Map(targetProfiles.map((target) => [target.id, target]));
151
  profileFields = data.profile_fields || [];
152
+ session = normalizeSession(readSavedSession(), defaultSession(data));
 
 
 
 
153
  renderProvenance(data);
154
  renderTargets(session.targets);
155
  renderProfile(session.profile);
 
157
  renderWhitespace(data.whitespace || []);
158
  }
159
 
160
+ function defaultSession(data = bootstrapData) {
161
+ return {
162
+ profile: {},
163
+ targets: data?.default_targets || targetOptions.slice(0, 3),
164
+ };
165
+ }
166
+
167
+ function resetSession() {
168
+ if (!bootstrapData) return;
169
+ clearTurnWatchdog();
170
+ clearSavedSession();
171
+ session = defaultSession(bootstrapData);
172
+ currentArtifact = null;
173
+ input.value = "";
174
+ ink.textContent = "The book is open. The next page waits for its first line.";
175
+ ink.classList.remove("thinking", "bleed", "gold");
176
+ corrections.textContent = "Session reset.";
177
+ renderTargets(session.targets);
178
+ renderProfile(session.profile);
179
+ renderScore(null);
180
+ verdictEl.textContent = "UNWRITTEN";
181
+ overallEl.textContent = "0.0";
182
+ renderWoodMap(null);
183
+ renderIdeas([]);
184
+ renderPlan([]);
185
+ renderProjects(bootstrapData.top_projects || []);
186
+ renderWhitespace(bootstrapData.whitespace || []);
187
+ exportButton.disabled = true;
188
+ setButtonDisabled(exportNotesButton, true);
189
+ setButtonDisabled(exportChapterButton, true);
190
+ saveSession();
191
+ input.focus();
192
+ }
193
+
194
  async function loadDemoSession() {
195
  submit.disabled = true;
196
  setCommandDisabled(true);