farming-code 2.2.7 → 2.2.11

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (102) hide show
  1. package/README.md +110 -199
  2. package/README.zh_cn.md +106 -237
  3. package/THIRD_PARTY_NOTICES.md +11 -2
  4. package/backend/acp-checkpoint-store.js +198 -0
  5. package/backend/acp-runtime.js +306 -83
  6. package/backend/acp-session-state.js +202 -6
  7. package/backend/acp-transcript.js +112 -0
  8. package/backend/agent-activity.js +6 -157
  9. package/backend/agent-manager.js +1496 -737
  10. package/backend/agent-provider-session.js +17 -242
  11. package/backend/agent-runtime-binding.js +219 -0
  12. package/backend/agent-session-history.js +66 -1
  13. package/backend/auth.js +79 -6
  14. package/backend/codex-models.js +81 -84
  15. package/backend/codex-session-archive.js +45 -0
  16. package/backend/codex-terminal-profile.js +500 -0
  17. package/backend/codex-transcript-sanitizer.js +12 -0
  18. package/backend/codex-transcript.js +230 -8
  19. package/backend/config-manager.js +30 -0
  20. package/backend/control-api.js +192 -17
  21. package/backend/farming-net-pass.js +285 -0
  22. package/backend/farming-net-registry.js +112 -0
  23. package/backend/farming-net-server.js +298 -0
  24. package/backend/farming-session-store.js +5 -13
  25. package/backend/git-worktree-info.js +181 -0
  26. package/backend/local-session-engine.js +411 -186
  27. package/backend/main-page-session.js +5 -2
  28. package/backend/native-pty-controller-generation.js +106 -0
  29. package/backend/native-pty-host-client.js +275 -7
  30. package/backend/native-pty-host-identity.js +86 -0
  31. package/backend/native-pty-host.js +813 -114
  32. package/backend/native-session-engine.js +100 -28
  33. package/backend/packaged-node-pty.js +22 -2
  34. package/backend/provider-adapters.js +253 -0
  35. package/backend/provider-session-service.js +241 -0
  36. package/backend/runtime-observation.js +81 -0
  37. package/backend/server.js +294 -86
  38. package/backend/session-engine-bridge.js +21 -2
  39. package/backend/session-engine-router.js +1 -1
  40. package/backend/session-engine.js +1 -1
  41. package/backend/session-stream-protocol.js +185 -0
  42. package/backend/storage-layout.js +55 -0
  43. package/backend/terminal-attach-checkpoint.js +74 -0
  44. package/backend/terminal-exit-quiescence.js +39 -0
  45. package/backend/terminal-reducer-flow-control.js +97 -0
  46. package/backend/terminal-screen-state.js +11 -2
  47. package/backend/terminal-screen-worker-pool.js +59 -6
  48. package/backend/terminal-screen-worker-thread.js +97 -57
  49. package/backend/terminal-screen-worker.js +133 -51
  50. package/backend/terminal-state-serialization.js +127 -0
  51. package/backend/terminal-status.js +23 -4
  52. package/backend/usage-monitor.js +81 -4
  53. package/backend/workspace-directory.js +152 -0
  54. package/backend/workspace-file-router.js +182 -76
  55. package/backend/workspace-file-service.js +319 -4
  56. package/backend/workspace-root-registry.js +164 -0
  57. package/dist/assets/App-CHYpgECZ.js +208 -0
  58. package/dist/assets/{FileEditorMarkdownPreview-elKWc8Im.js → FileEditorMarkdownPreview--Cri80nQ.js} +92 -92
  59. package/dist/assets/FileEditorPane-DGJlEKdf.js +2 -0
  60. package/dist/assets/IconGlyphs-Cc14sepw.js +1 -0
  61. package/dist/assets/ProjectFilesSection-Cz1wG4NT.js +12 -0
  62. package/dist/assets/{ReviewPage-BaXu1ZdX.js → ReviewPage-LonRc6Fz.js} +1 -1
  63. package/dist/assets/code-dark-B1pAtO_P.css +1 -0
  64. package/dist/assets/file-icons-Bw2qd5iT.js +1 -0
  65. package/dist/assets/{index-B8SHldPE.js → index-miO2r9IZ.js} +3 -3
  66. package/dist/assets/main-DNe0jPw-.css +1 -0
  67. package/dist/assets/workspace-editor-model-BQol4qbA.js +1 -0
  68. package/dist/assets/workspace-editor-monaco-5gFbeDPF.js +1 -0
  69. package/dist/assets/workspace-editor-monaco-xPv8JzHH.js +4 -0
  70. package/dist/assets/workspace-view-state-DvYG_9PH.js +7 -0
  71. package/dist/assets/workspace-working-copy-D8-s_Sgh.js +1 -0
  72. package/dist/index.html +1 -1
  73. package/frontend/farming-net/app.css +625 -0
  74. package/frontend/farming-net/app.js +268 -0
  75. package/frontend/farming-net/index.html +86 -0
  76. package/frontend/reading-anchor.js +198 -0
  77. package/frontend/session-bridge.js +12 -3
  78. package/frontend/session-modal-bridge.js +5 -12
  79. package/frontend/skins/crt/app.js +1976 -793
  80. package/frontend/skins/crt/index.html +313 -23
  81. package/frontend/skins/crt/styles/billing.css +294 -223
  82. package/frontend/skins/crt/styles/monochrome-green.css +7 -2
  83. package/frontend/terminal-replay.js +372 -0
  84. package/package.json +10 -3
  85. package/shared/browser-protocol.d.ts +5 -0
  86. package/shared/browser-protocol.js +130 -0
  87. package/dist/assets/App-iA2BU9P6.js +0 -124
  88. package/dist/assets/FileEditorPane-RWiFD2cq.js +0 -5
  89. package/dist/assets/IconGlyphs-DfL0EBnj.js +0 -1
  90. package/dist/assets/ProjectFilesSection-Q4PDsWmM.js +0 -12
  91. package/dist/assets/code-dark-CDkOQAtK.css +0 -1
  92. package/dist/assets/file-icons-EFUGSSwf.js +0 -1
  93. package/dist/assets/main-DpYuBonn.css +0 -1
  94. package/dist/assets/qoder-C9LmmOSf.svg +0 -1
  95. package/dist/assets/qoder-Cf9gl0Y5.svg +0 -1
  96. package/dist/assets/qoder-gHCinseV.svg +0 -1
  97. package/dist/assets/workspace-view-state-CTyDzk2D.js +0 -1
  98. package/dist/assets/zsh-CLpveKlF.svg +0 -1
  99. package/dist/assets/zsh-FxSpMPbz.svg +0 -1
  100. /package/dist/assets/{api-D1lyBYIQ.js → api-D8nyOEbz.js} +0 -0
  101. /package/dist/assets/{core-ZlAPicox.js → core-D0LFJkDt.js} +0 -0
  102. /package/dist/assets/{useWorkspaceMenuKeyboard-CneKAZUJ.js → useWorkspaceMenuKeyboard-Brws6Ar9.js} +0 -0
@@ -68,6 +68,12 @@
68
68
  z-index: 1;
69
69
  }
70
70
 
71
+ .map-area.empty {
72
+ display: flex;
73
+ align-items: center;
74
+ justify-content: center;
75
+ }
76
+
71
77
  .map-area.hidden {
72
78
  display: none;
73
79
  }
@@ -157,10 +163,150 @@
157
163
  white-space: pre;
158
164
  }
159
165
 
160
- .agent-block.working .agent-output {
166
+ .agent-output.structured-preview {
167
+ color: inherit;
168
+ }
169
+
170
+ .agent-chat-preview {
171
+ position: absolute;
172
+ inset: 3px 0 0;
173
+ display: flex;
174
+ flex-direction: column;
175
+ justify-content: flex-end;
176
+ gap: 5px;
177
+ min-height: 0;
178
+ padding: 0 4px 2px 12px;
179
+ overflow: hidden;
180
+ }
181
+
182
+ .agent-chat-preview::before {
183
+ content: '';
184
+ position: absolute;
185
+ top: 18px;
186
+ bottom: 5px;
187
+ left: 4px;
188
+ width: 1px;
189
+ background: linear-gradient(to bottom, transparent, currentColor 18%, currentColor 82%, transparent);
190
+ opacity: 0.32;
191
+ }
192
+
193
+ .agent-chat-preview-meta {
194
+ display: flex;
195
+ align-items: center;
196
+ justify-content: space-between;
197
+ gap: 8px;
198
+ min-height: 11px;
199
+ font-size: 9px;
200
+ line-height: 1;
201
+ letter-spacing: 0.12em;
202
+ opacity: 0.62;
203
+ white-space: nowrap;
204
+ }
205
+
206
+ .agent-chat-preview-trail {
207
+ display: flex;
208
+ flex: 0 1 auto;
209
+ flex-direction: column;
210
+ justify-content: flex-end;
211
+ gap: 5px;
212
+ min-height: 0;
213
+ overflow: hidden;
214
+ }
215
+
216
+ .agent-chat-preview-state {
217
+ display: inline-flex;
218
+ align-items: center;
219
+ gap: 5px;
220
+ min-width: 0;
221
+ }
222
+
223
+ .agent-chat-preview-state i {
224
+ display: block;
225
+ width: 5px;
226
+ height: 5px;
227
+ flex: 0 0 auto;
228
+ border: 1px solid currentColor;
229
+ border-radius: 50%;
230
+ }
231
+
232
+ .agent-chat-preview.active .agent-chat-preview-state i {
233
+ background: currentColor;
234
+ box-shadow: 0 0 5px currentColor;
235
+ animation: crt-chat-signal 1.6s ease-in-out infinite;
236
+ }
237
+
238
+ .agent-chat-preview-line {
239
+ position: relative;
240
+ display: grid;
241
+ grid-template-columns: 40px minmax(0, 1fr);
242
+ gap: 6px;
243
+ flex: 0 0 auto;
244
+ min-width: 0;
245
+ font-size: 11px;
246
+ line-height: 1.28;
247
+ }
248
+
249
+ .agent-chat-preview-line::before {
250
+ content: '';
251
+ position: absolute;
252
+ top: 0.45em;
253
+ left: -10px;
254
+ width: 4px;
255
+ height: 4px;
256
+ border: 1px solid currentColor;
257
+ border-radius: 50%;
258
+ background: #0a0a0a;
259
+ box-shadow: 0 0 4px currentColor;
260
+ }
261
+
262
+ .agent-chat-preview-role {
263
+ padding-top: 1px;
264
+ font-size: 9px;
265
+ letter-spacing: 0.08em;
266
+ opacity: 0.56;
267
+ }
268
+
269
+ .agent-chat-preview-text {
270
+ min-width: 0;
271
+ overflow: hidden;
272
+ overflow-wrap: anywhere;
273
+ }
274
+
275
+ .agent-chat-preview-line.user .agent-chat-preview-text {
276
+ opacity: 0.74;
277
+ }
278
+
279
+ .agent-chat-preview-line.assistant .agent-chat-preview-text {
280
+ text-shadow: 0 0 6px currentColor;
281
+ }
282
+
283
+ .agent-chat-preview-line.activity {
284
+ opacity: 0.72;
285
+ }
286
+
287
+ .agent-chat-preview-line.activity .agent-chat-preview-text {
288
+ display: -webkit-box;
289
+ -webkit-box-orient: vertical;
290
+ -webkit-line-clamp: 1;
291
+ font-style: italic;
292
+ }
293
+
294
+ .agent-chat-preview-empty {
295
+ padding: 7px 0 3px;
296
+ font-size: 10px;
297
+ letter-spacing: 0.08em;
298
+ opacity: 0.58;
299
+ }
300
+
301
+ .agent-block.working .agent-output:not(.structured-preview) {
161
302
  animation: blink 0.5s infinite;
162
303
  }
163
304
 
305
+ @keyframes crt-chat-signal {
306
+ 0%, 100% { opacity: 0.45; transform: scale(0.82); }
307
+ 50% { opacity: 1; transform: scale(1); }
308
+ }
309
+
164
310
  @keyframes blink {
165
311
  0%, 100% { opacity: 1; }
166
312
  50% { opacity: 0.8; }
@@ -825,6 +971,24 @@
825
971
  margin-bottom: 20px;
826
972
  }
827
973
 
974
+ .empty-state p {
975
+ margin-bottom: 16px;
976
+ }
977
+
978
+ .empty-start-agent {
979
+ padding: 8px 20px;
980
+ border: 1px solid #00ff00;
981
+ background: #1a1a1a;
982
+ color: #00ff00;
983
+ cursor: pointer;
984
+ font: inherit;
985
+ }
986
+
987
+ .empty-start-agent:hover,
988
+ .empty-start-agent:focus-visible {
989
+ background: #3a3a3a;
990
+ }
991
+
828
992
  .modal.active {
829
993
  z-index: 10001;
830
994
  }
@@ -1104,6 +1268,105 @@
1104
1268
  font-family: 'Courier New', monospace;
1105
1269
  }
1106
1270
 
1271
+ .workspace-input:disabled {
1272
+ color: #7eaa7e;
1273
+ border-color: #316831;
1274
+ cursor: not-allowed;
1275
+ }
1276
+
1277
+ .workspace-directory-prompt {
1278
+ display: grid;
1279
+ grid-template-columns: 36px minmax(0, 1fr);
1280
+ gap: 10px 12px;
1281
+ margin-top: 12px;
1282
+ padding: 14px;
1283
+ border: 1px solid #2fdc2f;
1284
+ background: rgba(8, 16, 8, 0.96);
1285
+ box-shadow: inset 0 0 14px rgba(0, 255, 0, 0.04);
1286
+ }
1287
+
1288
+ .workspace-directory-prompt[hidden] {
1289
+ display: none;
1290
+ }
1291
+
1292
+ .workspace-directory-prompt.error {
1293
+ border-color: #ff4d4d;
1294
+ background: rgba(35, 8, 8, 0.96);
1295
+ box-shadow: inset 0 0 14px rgba(255, 77, 77, 0.05);
1296
+ }
1297
+
1298
+ .workspace-directory-prompt-icon {
1299
+ color: #00ffff;
1300
+ font-size: 13px;
1301
+ font-weight: bold;
1302
+ line-height: 1.4;
1303
+ }
1304
+
1305
+ .workspace-directory-prompt.error .workspace-directory-prompt-icon {
1306
+ color: #ff6b6b;
1307
+ }
1308
+
1309
+ .workspace-directory-prompt-copy {
1310
+ min-width: 0;
1311
+ }
1312
+
1313
+ .workspace-directory-prompt h4 {
1314
+ margin: 0 0 6px;
1315
+ color: #9dff97;
1316
+ font-size: 14px;
1317
+ }
1318
+
1319
+ .workspace-directory-prompt.error h4 {
1320
+ color: #ff8585;
1321
+ }
1322
+
1323
+ .workspace-directory-prompt p {
1324
+ margin: 0 0 10px;
1325
+ color: #9aaa9a;
1326
+ font-size: 12px;
1327
+ line-height: 1.45;
1328
+ }
1329
+
1330
+ .workspace-directory-prompt code {
1331
+ display: block;
1332
+ overflow: hidden;
1333
+ padding: 7px 9px;
1334
+ border: 1px solid #184d18;
1335
+ background: #050905;
1336
+ color: #87ff87;
1337
+ font-family: 'Courier New', monospace;
1338
+ font-size: 12px;
1339
+ text-overflow: ellipsis;
1340
+ white-space: nowrap;
1341
+ }
1342
+
1343
+ .workspace-directory-prompt.error code {
1344
+ border-color: #673232;
1345
+ color: #ffaaaa;
1346
+ }
1347
+
1348
+ .workspace-directory-prompt-actions {
1349
+ grid-column: 2;
1350
+ display: flex;
1351
+ gap: 8px;
1352
+ }
1353
+
1354
+ .input-dialog-content .workspace-directory-prompt-actions button {
1355
+ margin-right: 0;
1356
+ padding: 8px 12px;
1357
+ font-size: 12px;
1358
+ }
1359
+
1360
+ .input-dialog-content .workspace-directory-prompt-actions button.secondary {
1361
+ border: 1px solid #2d6b2d;
1362
+ background: transparent;
1363
+ color: #87ff87;
1364
+ }
1365
+
1366
+ .input-dialog-content .workspace-directory-prompt-actions button.secondary:hover {
1367
+ background: rgba(0, 255, 0, 0.08);
1368
+ }
1369
+
1107
1370
  .workspace-history {
1108
1371
  margin-top: 12px;
1109
1372
  border: 1px solid #184d18;
@@ -1227,6 +1490,14 @@
1227
1490
  <div class="empty-state" id="empty-state">
1228
1491
  <h2>No Agents Running</h2>
1229
1492
  <p>Press <strong>N</strong> to start a new agent</p>
1493
+ <button
1494
+ type="button"
1495
+ class="empty-start-agent"
1496
+ data-crt-nav-key="empty:new-agent"
1497
+ data-crt-nav-default="true"
1498
+ tabindex="-1"
1499
+ onclick="showInputDialog()"
1500
+ >[N] New Agent</button>
1230
1501
  </div>
1231
1502
  </div>
1232
1503
 
@@ -1299,31 +1570,27 @@
1299
1570
 
1300
1571
  <section class="billing-panel billing-daily-chart-panel" aria-label="Daily processed token history">
1301
1572
  <div class="billing-panel-heading">
1302
- <h3>DAILY PROCESSED TOKENS // 120 DAYS // LOG SCALE</h3>
1573
+ <h3>TOKEN ACTIVITY // 52 WEEKS</h3>
1303
1574
  <span id="billing-peak-day">PEAK --</span>
1304
1575
  </div>
1305
1576
  <div class="billing-daily-legend" aria-hidden="true">
1306
- <span><i class="is-cache"></i>CACHE</span>
1307
- <span><i class="is-direct"></i>INPUT / OUTPUT / OTHER</span>
1308
- <span><i class="is-billion"></i>1B+ DAY</span>
1309
- </div>
1310
- <div class="billing-axis-meta" aria-hidden="true">
1311
- <span>Y: TOKENS / DAY [LOG10]</span>
1312
- <span>X: LOCAL DATE</span>
1577
+ <span>RELATIVE</span>
1578
+ <span class="billing-heat-scale"><i data-level="0"></i><i data-level="1"></i><i data-level="2"></i><i data-level="3"></i><i data-level="4"></i><i data-level="5"></i></span>
1579
+ <span>HOT</span>
1580
+ <span>OVERRANGE</span>
1581
+ <span class="billing-overrange-scale"><i data-overrange="1"></i><em>1B</em><i data-overrange="2"></i><em>2B</em><i data-overrange="3"></i><em>4B</em><i data-overrange="4"></i><em>8B+</em></span>
1313
1582
  </div>
1314
- <div class="billing-daily-chart-frame">
1315
- <div class="billing-y-axis" id="billing-y-axis" aria-hidden="true"></div>
1583
+ <div class="billing-calendar-frame">
1584
+ <div class="billing-calendar-weekdays" aria-hidden="true">
1585
+ <span>MON</span><span></span><span>WED</span><span></span><span>FRI</span><span></span><span>SUN</span>
1586
+ </div>
1316
1587
  <div class="billing-daily-scroll" id="billing-daily-scroll">
1317
- <div class="billing-daily-plot">
1318
- <div class="billing-log-guides" id="billing-log-guides" aria-hidden="true"></div>
1319
- <div class="billing-daily-bars" id="billing-daily-bars" role="grid" aria-label="Daily token totals for the last 120 days on a logarithmic scale"></div>
1320
- </div>
1321
- <div class="billing-daily-x-axis" id="billing-daily-x-axis" aria-hidden="true"></div>
1588
+ <div class="billing-calendar-months" id="billing-calendar-months" aria-hidden="true"></div>
1589
+ <div class="billing-calendar-grid" id="billing-calendar-grid" role="grid" aria-label="Daily token activity for the last 52 weeks"></div>
1322
1590
  </div>
1323
1591
  </div>
1324
- <div class="billing-activity-row">
1325
- <span>52W ACTIVITY</span>
1326
- <div class="billing-activity-strip" id="billing-activity-strip" role="img" aria-label="52-week daily activity continuity"></div>
1592
+ <div class="billing-calendar-footer">
1593
+ <span>[ARROWS] SELECT DAY</span>
1327
1594
  <span id="billing-daily-range">LOCAL TIME</span>
1328
1595
  </div>
1329
1596
  </section>
@@ -1334,7 +1601,13 @@
1334
1601
  <span id="billing-day-state">LOCAL HISTORY</span>
1335
1602
  </div>
1336
1603
  <div class="billing-day-details">
1337
- <div class="billing-day-total"><small>TOTAL</small><strong id="billing-day-total">--</strong><span><span class="billing-day-total-compact" id="billing-day-total-compact">--</span> TOKENS</span></div>
1604
+ <div class="billing-day-total" id="billing-day-total-meter">
1605
+ <small>TOTAL</small>
1606
+ <div class="billing-day-total-values">
1607
+ <strong id="billing-day-total">--</strong>
1608
+ <span class="billing-day-total-compact-wrap"><span class="billing-day-total-compact" id="billing-day-total-compact">--</span><em>TOKENS</em></span>
1609
+ </div>
1610
+ </div>
1338
1611
  <div class="billing-day-breakdown"><small>INPUT</small><strong id="billing-day-input">--</strong></div>
1339
1612
  <div class="billing-day-breakdown"><small>OUTPUT</small><strong id="billing-day-output">--</strong></div>
1340
1613
  <div class="billing-day-breakdown"><small>CACHE READ</small><strong id="billing-day-cache-read">--</strong></div>
@@ -1368,9 +1641,11 @@
1368
1641
  <path id="billing-day-total-path" class="billing-day-curve-total"></path>
1369
1642
  </svg>
1370
1643
  </div>
1371
- <div class="billing-day-curve-x-axis" aria-hidden="true">
1372
- <span>00</span><span>06</span><span>12</span><span>18</span><span>23</span>
1644
+ <div class="billing-day-hour-strip" id="billing-day-hour-strip" role="grid" aria-label="Selected day token usage by local hour"></div>
1645
+ <div class="billing-day-hour-axis" aria-hidden="true">
1646
+ <span>00:00</span><span>03:00</span><span>06:00</span><span>09:00</span><span>12:00</span><span>15:00</span><span>18:00</span><span>21:00</span><span>24:00</span>
1373
1647
  </div>
1648
+ <div class="billing-day-hour-readout" id="billing-day-hour-readout">SELECT AN HOUR</div>
1374
1649
  <div class="billing-day-curve-footer">
1375
1650
  <span id="billing-day-insight-state">SELECTED DAY DETAIL</span>
1376
1651
  <span class="billing-day-curve-legend"><i class="is-total"></i>TOTAL <i class="is-cache"></i>CACHE</span>
@@ -1575,6 +1850,19 @@
1575
1850
  aria-autocomplete="none"
1576
1851
  data-form-type="other"
1577
1852
  >
1853
+ <div class="workspace-directory-prompt" id="workspace-directory-prompt" role="alertdialog" aria-labelledby="workspace-directory-prompt-title" aria-describedby="workspace-directory-prompt-description" hidden>
1854
+ <div class="workspace-directory-prompt-icon" id="workspace-directory-prompt-icon" aria-hidden="true">[+]</div>
1855
+ <div class="workspace-directory-prompt-copy">
1856
+ <h4 id="workspace-directory-prompt-title">Create this workspace?</h4>
1857
+ <p id="workspace-directory-prompt-description">This directory does not exist yet. Farming can create it and start the Agent there.</p>
1858
+ <code id="workspace-directory-prompt-path"></code>
1859
+ </div>
1860
+ <div class="workspace-directory-prompt-actions">
1861
+ <button id="workspace-directory-create" data-crt-nav-key="new-agent:workspace-create" onclick="createCrtWorkspaceAndStart()">Create &amp; Start [Enter]</button>
1862
+ <button class="secondary" id="workspace-directory-cancel" data-crt-nav-key="new-agent:workspace-cancel" onclick="hideWorkspaceDirectoryPrompt()">Back [Esc]</button>
1863
+ <button id="workspace-directory-error-back" data-crt-nav-key="new-agent:workspace-error-back" onclick="hideWorkspaceDirectoryPrompt()" hidden>Change Path [Enter]</button>
1864
+ </div>
1865
+ </div>
1578
1866
  <div class="workspace-history" id="workspace-history" style="display: none;">
1579
1867
  <div class="workspace-history-header">
1580
1868
  <span>recent workspaces</span>
@@ -1582,7 +1870,7 @@
1582
1870
  </div>
1583
1871
  <div class="workspace-history-list" id="workspace-history-list"></div>
1584
1872
  </div>
1585
- <div style="margin-top: 10px;">
1873
+ <div id="workspace-start-actions" style="margin-top: 10px;">
1586
1874
  <button data-crt-nav-key="new-agent:start" onclick="confirmStartAgent()">Start [Enter]</button>
1587
1875
  <button data-crt-nav-key="new-agent:back" onclick="backToAgentList()">Back [Esc]</button>
1588
1876
  </div>
@@ -1698,6 +1986,8 @@
1698
1986
  </div>
1699
1987
 
1700
1988
  <script src="shared/runtime-paths.js"></script>
1989
+ <script src="shared/reading-anchor.js"></script>
1990
+ <script src="shared/terminal-replay.js"></script>
1701
1991
  <script src="../vendor/xterm/xterm.js"></script>
1702
1992
  <script src="../vendor/xterm/addon-fit.js"></script>
1703
1993
  <script src="../vendor/xterm/addon-webgl.js"></script>