@schlenkr/ragents 0.1.6 → 0.1.7

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 (145) hide show
  1. package/apps/server/src/chat-handler.ts +2 -0
  2. package/apps/server/src/config.ts +6 -0
  3. package/apps/server/src/host-api.json +1 -0
  4. package/apps/server/src/layout.ts +0 -15
  5. package/apps/server/src/plugin-support/agent-tool.ts +2 -3
  6. package/apps/server/src/provider.ts +34 -11
  7. package/apps/server/src/ragents/actor-chat-history.ts +1 -0
  8. package/apps/server/src/ragents/engine.ts +5 -13
  9. package/apps/server/src/ragents/journal-chat-events.ts +2 -0
  10. package/apps/server/src/ragents/run-owner.ts +3 -2
  11. package/apps/server/src/ragents/session.ts +3 -3
  12. package/apps/server/src/run-preparation.ts +14 -18
  13. package/apps/server/src/run-transfer.ts +65 -4
  14. package/apps/server/src/settings.ts +2 -4
  15. package/apps/web/dist/assets/{highlighted-body-KPVGNVTW-B9qYBARS.js → highlighted-body-KPVGNVTW-CFhTJEmH.js} +1 -1
  16. package/apps/web/dist/assets/{main-BCjvD2Hh.js → main-DlzW4t4c.js} +1 -1
  17. package/apps/web/dist/assets/{mermaid-HWGCJPDP-CvYYFK_n.js → mermaid-HWGCJPDP-kxkB991i.js} +69 -69
  18. package/apps/web/dist/assets/{runPanel-CG7kRMJh.js → runPanel-BJEFQ__w.js} +1 -1
  19. package/apps/web/dist/help/guide-clients.html +13 -4
  20. package/apps/web/dist/help/guide-clients.md +14 -4
  21. package/apps/web/dist/help/guide-distributed.html +8 -3
  22. package/apps/web/dist/help/guide-distributed.md +8 -3
  23. package/apps/web/dist/help/guide-runtime.html +18 -12
  24. package/apps/web/dist/help/guide-runtime.md +19 -12
  25. package/apps/web/dist/help/mini-app.css +23 -3
  26. package/apps/web/dist/host-web.json +3 -3
  27. package/apps/web/dist/index.html +2 -2
  28. package/apps/web/dist/run-panel.html +2 -2
  29. package/apps/web/src/SessionList.tsx +16 -8
  30. package/apps/web/src/api.ts +2 -0
  31. package/apps/web/src/panel/PanelPage.tsx +1 -1
  32. package/apps/web/src/panel/RunLine.tsx +4 -2
  33. package/apps/web/src/panel/contract.ts +2 -0
  34. package/bundles/ragents.activity/ragents-bundle.json +1 -1
  35. package/bundles/ragents.actor-programs/ragents-bundle.json +1 -1
  36. package/bundles/ragents.ask/ragents-bundle.json +1 -1
  37. package/bundles/ragents.browser/ragents-bundle.json +1 -1
  38. package/bundles/ragents.documents/ragents-bundle.json +1 -1
  39. package/bundles/ragents.lsp-fsharp/ragents-bundle.json +1 -1
  40. package/bundles/ragents.lsp-roslyn/ragents-bundle.json +1 -1
  41. package/bundles/ragents.lsp-typescript/ragents-bundle.json +1 -1
  42. package/bundles/ragents.model-relay/ragents-bundle.json +1 -1
  43. package/bundles/ragents.orchestration/ragents-bundle.json +1 -1
  44. package/bundles/ragents.overseer/ragents-bundle.json +1 -1
  45. package/bundles/ragents.processes/ragents-bundle.json +1 -1
  46. package/bundles/ragents.product/ragents-bundle.json +1 -1
  47. package/bundles/ragents.profile-distribution/ragents-bundle.json +1 -1
  48. package/bundles/ragents.reference/ragents-bundle.json +2 -2
  49. package/bundles/ragents.reference/run-scripts/learning-afternoon/tests/program.test.ts +1 -1
  50. package/bundles/ragents.reference/run-scripts/word-game/tests/program.test.ts +3 -3
  51. package/bundles/ragents.todo/ragents-bundle.json +1 -1
  52. package/bundles/ragents.transcript/ragents-bundle.json +1 -1
  53. package/bundles/ragents.watch/ragents-bundle.json +1 -1
  54. package/bundles/ragents.workspace/ragents-bundle.json +1 -1
  55. package/package.json +2 -2
  56. package/packages/agent/dist/core/agent-settings.d.ts +2 -2
  57. package/packages/agent/dist/core/compaction/compaction.d.ts +16 -50
  58. package/packages/agent/dist/core/context-log.d.ts +25 -0
  59. package/packages/agent/dist/core/messages.d.ts +3 -10
  60. package/packages/agent/dist/core/tool-definition.d.ts +17 -0
  61. package/packages/agent/dist/core/tools/bash.d.ts +2 -7
  62. package/packages/agent/dist/core/tools/edit.d.ts +1 -1
  63. package/packages/agent/dist/core/tools/read.d.ts +1 -1
  64. package/packages/agent/dist/core/tools/write.d.ts +1 -1
  65. package/packages/agent/dist/index.d.ts +7 -8
  66. package/packages/agent/dist/loop/agent.d.ts +2 -6
  67. package/packages/agent/package.json +1 -1
  68. package/packages/agent/src/core/agent-settings.ts +2 -2
  69. package/packages/agent/src/core/compaction/compaction.ts +49 -175
  70. package/packages/agent/src/core/context-log.ts +49 -0
  71. package/packages/agent/src/core/messages.ts +5 -11
  72. package/packages/agent/src/core/tool-definition.ts +29 -0
  73. package/packages/agent/src/core/tools/bash.ts +2 -9
  74. package/packages/agent/src/core/tools/edit.ts +2 -11
  75. package/packages/agent/src/core/tools/read.ts +3 -18
  76. package/packages/agent/src/core/tools/write.ts +1 -5
  77. package/packages/agent/src/index.ts +28 -14
  78. package/packages/agent/src/loop/agent-loop.ts +1 -2
  79. package/packages/agent/src/loop/agent.ts +8 -2
  80. package/packages/ai/dist/api/ai-sdk.d.ts +2 -0
  81. package/packages/ai/dist/types.d.ts +2 -0
  82. package/packages/ai/src/api/ai-sdk-messages.ts +15 -10
  83. package/packages/ai/src/api/ai-sdk.ts +11 -0
  84. package/packages/ai/src/api/transform-messages.ts +1 -1
  85. package/packages/ai/src/types.ts +2 -0
  86. package/packages/ai/src/utils/retry.ts +14 -0
  87. package/packages/ragents/src/agents/actor-input.ts +15 -0
  88. package/packages/ragents/src/agents/model-context.ts +360 -0
  89. package/packages/ragents/src/agents/scheduler.ts +3 -7
  90. package/packages/ragents/src/agents/tools.ts +2 -2
  91. package/packages/ragents/src/agents/toolset.ts +47 -20
  92. package/packages/ragents/src/agents/workspaces.ts +0 -6
  93. package/packages/ragents/src/domain/event-semantics.ts +51 -0
  94. package/packages/ragents/src/domain/event-validation.ts +166 -0
  95. package/packages/ragents/src/domain/events.ts +72 -0
  96. package/packages/ragents/src/domain/model.ts +4 -2
  97. package/packages/ragents/src/domain/projection.ts +9 -0
  98. package/packages/ragents/src/domain/tool-result-text.ts +9 -0
  99. package/packages/ragents/src/drivers/agent-hooks.ts +25 -38
  100. package/packages/ragents/src/drivers/agent-runtime.ts +118 -933
  101. package/packages/ragents/src/drivers/agent-turn.ts +735 -0
  102. package/packages/ragents/src/drivers/agent.ts +9 -7
  103. package/packages/ragents/src/drivers/skill-preload.ts +53 -63
  104. package/packages/ragents/src/drivers/types.ts +21 -5
  105. package/packages/ragents/src/index.ts +7 -6
  106. package/packages/ragents/src/plugin-host.ts +3 -4
  107. package/packages/ragents/src/runtime/decisions/actors.ts +10 -0
  108. package/packages/ragents/src/runtime/decisions/turns.ts +66 -7
  109. package/packages/ragents/src/runtime/journal-storage.ts +7 -4
  110. package/packages/ragents/src/runtime/journal.ts +35 -0
  111. package/packages/ragents/src/runtime/orchestration.ts +140 -9
  112. package/packages/workspace-executor/src/sandbox-tools.ts +10 -11
  113. package/plugins/ragents.reference/run-scripts/learning-afternoon/tests/program.test.ts +1 -1
  114. package/plugins/ragents.reference/run-scripts/word-game/tests/program.test.ts +3 -3
  115. package/scripts/agent/journal.ts +5 -3
  116. package/packages/agent/dist/core/agent-session-runtime.d.ts +0 -33
  117. package/packages/agent/dist/core/agent-session-services.d.ts +0 -35
  118. package/packages/agent/dist/core/agent-session.d.ts +0 -234
  119. package/packages/agent/dist/core/auth-guidance.d.ts +0 -4
  120. package/packages/agent/dist/core/defaults.d.ts +0 -3
  121. package/packages/agent/dist/core/extensions/index.d.ts +0 -11
  122. package/packages/agent/dist/core/extensions/loader.d.ts +0 -12
  123. package/packages/agent/dist/core/extensions/runner.d.ts +0 -39
  124. package/packages/agent/dist/core/extensions/types.d.ts +0 -156
  125. package/packages/agent/dist/core/extensions/wrapper.d.ts +0 -12
  126. package/packages/agent/dist/core/resource-loader.d.ts +0 -39
  127. package/packages/agent/dist/core/sdk.d.ts +0 -38
  128. package/packages/agent/dist/core/session-manager.d.ts +0 -189
  129. package/packages/agent/dist/core/source-info.d.ts +0 -16
  130. package/packages/agent/dist/core/system-prompt.d.ts +0 -21
  131. package/packages/agent/src/core/agent-session-runtime.ts +0 -94
  132. package/packages/agent/src/core/agent-session-services.ts +0 -74
  133. package/packages/agent/src/core/agent-session.ts +0 -1108
  134. package/packages/agent/src/core/auth-guidance.ts +0 -14
  135. package/packages/agent/src/core/defaults.ts +0 -3
  136. package/packages/agent/src/core/extensions/index.ts +0 -38
  137. package/packages/agent/src/core/extensions/loader.ts +0 -125
  138. package/packages/agent/src/core/extensions/runner.ts +0 -211
  139. package/packages/agent/src/core/extensions/types.ts +0 -197
  140. package/packages/agent/src/core/extensions/wrapper.ts +0 -24
  141. package/packages/agent/src/core/resource-loader.ts +0 -142
  142. package/packages/agent/src/core/sdk.ts +0 -123
  143. package/packages/agent/src/core/session-manager.ts +0 -743
  144. package/packages/agent/src/core/source-info.ts +0 -28
  145. package/packages/agent/src/core/system-prompt.ts +0 -108
@@ -1,4 +1,4 @@
1
- import{a as M,I as H,u as Z,r as i,j as e,B as y,J as De,K as Ae,w as ze,l as Fe,m as Te,v as _e,k as Me,P as He,H as ce,L as Ue,q as K,s as de,i as Be,N as ue,O as re,T as Ve,V as $e,A as ie,Y as qe,Z as Ke,_ as Ze,$ as Ge,t as Je,a0 as We,e as Qe,a1 as Ye,a2 as Xe,y as et,z as tt,a3 as nt,a4 as st,a5 as rt,F as it,Q as ot,a6 as at,a7 as lt,G as ct}from"./mermaid-HWGCJPDP-CvYYFK_n.js";/**
1
+ import{a as M,I as H,u as Z,r as i,j as e,B as y,J as De,K as Ae,w as ze,l as Fe,m as Te,v as _e,k as Me,P as He,H as ce,L as Ue,q as K,s as de,i as Be,N as ue,O as re,T as Ve,V as $e,A as ie,Y as qe,Z as Ke,_ as Ze,$ as Ge,t as Je,a0 as We,e as Qe,a1 as Ye,a2 as Xe,y as et,z as tt,a3 as nt,a4 as st,a5 as rt,F as it,Q as ot,a6 as at,a7 as lt,G as ct}from"./mermaid-HWGCJPDP-kxkB991i.js";/**
2
2
  * @license lucide-react v1.46.0 - ISC
3
3
  *
4
4
  * This source code is licensed under the ISC license.
@@ -205,10 +205,10 @@ The status bar shows the number of connected servers and opens the start page wh
205
205
  the root <code>README.md</code> for details.</p>
206
206
  <p>Install the extension from the Marketplace as <code>purestate.ragents-vscode</code> using &quot;Extensions:
207
207
  Install Extension&quot; or <code>code --install-extension purestate.ragents-vscode</code>. To install a locally
208
- packaged file, run <code>pnpm package:vscode</code> (task <code>vscode: package</code>), which builds
208
+ packaged file, run <code>pnpm package:vscode</code>, which builds
209
209
  <code>dist/ragents-vscode-&lt;version&gt;.vsix</code>, then use &quot;Extensions: Install from VSIX&quot; or
210
- <code>code --install-extension dist/ragents-vscode-&lt;version&gt;.vsix --force</code>. The <code>vscode: install</code>
211
- task (<code>scripts/vscode/install-local.sh</code>) performs both steps, rebuilds the built-in plugins, and
210
+ <code>code --install-extension dist/ragents-vscode-&lt;version&gt;.vsix --force</code>. <code>scripts/vscode/install-local.sh</code>
211
+ performs both steps, rebuilds the built-in plugins, and
212
212
  rebuilds the web interface if it no longer matches its sources, so that hosts from this checkout
213
213
  start again. The script then restarts manually launched
214
214
  servers (<code>scripts/start.sh</code>, identified by <code>RAGENTS_LAUNCH=start.sh</code> in their environment, with logs under
@@ -258,7 +258,9 @@ explains why and offers &quot;Zur Start-Seite&quot; (back to Start). For a new r
258
258
  soon as it becomes writable. Opening an existing run does not move focus there automatically.</p>
259
259
  <p><strong>Runs</strong> shows the complete list in the same grid, with search, &quot;Beendete ausblenden&quot; (hide finished), a server
260
260
  filter carried over from Start, and a selection mode that deletes several runs after a dialog
261
- confirmation. Checkboxes occupy an additional first column without shifting the others.</p>
261
+ confirmation. Checkboxes occupy an additional first column without shifting the others. A run the
262
+ server has locked, for example because its journal uses an older format, shows a warning icon whose
263
+ tooltip names the cause; it does not open, but the selection mode deletes it.</p>
262
264
  <p><strong>Server</strong> is the configuration page. You can add, edit, sign in, sign out, connect,
263
265
  disconnect, and remove servers with confirmation, then open <code>settings.json</code> from the link
264
266
  at the bottom.</p>
@@ -294,6 +296,13 @@ to nested hosted mini-app frames. Text entry, selection, undo, and clipboard act
294
296
  the input field. Dictation tools that paste their result, such as HEX, use the same input path.
295
297
  Keys already handled by the chat or mini-app are not also executed as VS Code commands.
296
298
  In a regular browser, native keyboard and clipboard behavior remains in use.</p>
299
+ <p>To make RAgents smaller or larger independently of VS Code&#39;s window zoom, set <code>ragents.zoom</code>
300
+ in VS Code Settings. The value is a percentage from 50 to 200, with 100 as the default;
301
+ for example, <code>&quot;ragents.zoom&quot;: 90</code> makes the whole interface 10% smaller. It applies to Start,
302
+ Runs, Server, the run panel, and mini-app editor tabs, including nested mini-apps. Changes take
303
+ effect immediately without reloading the page or losing input drafts. Regular browser pages
304
+ are unaffected. This scales text, controls, and spacing together; it is independent of
305
+ <code>editor.fontSize</code> and the built-in chat font settings.</p>
297
306
  <p>If a server profile requires users, both the lock on Start and the Server row open the
298
307
  same sign-in dialog. For a profile with <code>ACCESS_TOKEN</code>, the dialog requests that token. User name
299
308
  and password are stored per server address in VS Code SecretStorage and reused silently next
@@ -85,10 +85,10 @@ the root `README.md` for details.
85
85
 
86
86
  Install the extension from the Marketplace as `purestate.ragents-vscode` using "Extensions:
87
87
  Install Extension" or `code --install-extension purestate.ragents-vscode`. To install a locally
88
- packaged file, run `pnpm package:vscode` (task `vscode: package`), which builds
88
+ packaged file, run `pnpm package:vscode`, which builds
89
89
  `dist/ragents-vscode-<version>.vsix`, then use "Extensions: Install from VSIX" or
90
- `code --install-extension dist/ragents-vscode-<version>.vsix --force`. The `vscode: install`
91
- task (`scripts/vscode/install-local.sh`) performs both steps, rebuilds the built-in plugins, and
90
+ `code --install-extension dist/ragents-vscode-<version>.vsix --force`. `scripts/vscode/install-local.sh`
91
+ performs both steps, rebuilds the built-in plugins, and
92
92
  rebuilds the web interface if it no longer matches its sources, so that hosts from this checkout
93
93
  start again. The script then restarts manually launched
94
94
  servers (`scripts/start.sh`, identified by `RAGENTS_LAUNCH=start.sh` in their environment, with logs under
@@ -144,7 +144,9 @@ soon as it becomes writable. Opening an existing run does not move focus there a
144
144
 
145
145
  **Runs** shows the complete list in the same grid, with search, "Beendete ausblenden" (hide finished), a server
146
146
  filter carried over from Start, and a selection mode that deletes several runs after a dialog
147
- confirmation. Checkboxes occupy an additional first column without shifting the others.
147
+ confirmation. Checkboxes occupy an additional first column without shifting the others. A run the
148
+ server has locked, for example because its journal uses an older format, shows a warning icon whose
149
+ tooltip names the cause; it does not open, but the selection mode deletes it.
148
150
 
149
151
  **Server** is the configuration page. You can add, edit, sign in, sign out, connect,
150
152
  disconnect, and remove servers with confirmation, then open `settings.json` from the link
@@ -186,6 +188,14 @@ the input field. Dictation tools that paste their result, such as HEX, use the s
186
188
  Keys already handled by the chat or mini-app are not also executed as VS Code commands.
187
189
  In a regular browser, native keyboard and clipboard behavior remains in use.
188
190
 
191
+ To make RAgents smaller or larger independently of VS Code's window zoom, set `ragents.zoom`
192
+ in VS Code Settings. The value is a percentage from 50 to 200, with 100 as the default;
193
+ for example, `"ragents.zoom": 90` makes the whole interface 10% smaller. It applies to Start,
194
+ Runs, Server, the run panel, and mini-app editor tabs, including nested mini-apps. Changes take
195
+ effect immediately without reloading the page or losing input drafts. Regular browser pages
196
+ are unaffected. This scales text, controls, and spacing together; it is independent of
197
+ `editor.fontSize` and the built-in chat font settings.
198
+
189
199
  If a server profile requires users, both the lock on Start and the Server row open the
190
200
  same sign-in dialog. For a profile with `ACCESS_TOKEN`, the dialog requests that token. User name
191
201
  and password are stored per server address in VS Code SecretStorage and reused silently next
@@ -254,9 +254,10 @@ RAGENTS_TOKEN=&lt;token&gt; pnpm run-transfer &lt;source&gt; &lt;target&gt; &lt;
254
254
  </code></pre>
255
255
  <p>The script exports the run from the source with <code>ragents.runs.export</code> and imports it on the target
256
256
  with <code>ragents.runs.import</code>. If each side uses a different token, set <code>RAGENTS_SOURCE_TOKEN</code> and
257
- <code>RAGENTS_TARGET_TOKEN</code>. The transfer includes the journal and payloads, model contexts under
258
- <code>chat/</code>, actor programs, and all plugin storage for the run, including <code>ragents.documents</code> files
259
- and the new folder of a run that works on the server. A folder on a workstation stays there, and the
257
+ <code>RAGENTS_TARGET_TOKEN</code>. The transfer includes the journal and payloads, which also hold the model
258
+ contexts of the run&#39;s agents, the stored contents the run refers to (attachments and the media of
259
+ the model contexts), actor programs, and all plugin storage for the run, including
260
+ <code>ragents.documents</code> files and the new folder of a run that works on the server. A folder on a workstation stays there, and the
260
261
  run keeps its binding to that workstation. Running processes, language servers, and
261
262
  browsers are not transferred; they are recreated on the target when next used.</p>
262
263
  <p>The transfer enforces these prerequisites:</p>
@@ -269,6 +270,10 @@ target folder, given as an absolute path on the target server. A workspace bindi
269
270
  the same ID and as the run owner, or anonymously for an ownerless run.</li>
270
271
  <li>The archive must stay below 16 MiB because it travels as Base64 through the message layer.
271
272
  A workspace containing <code>node_modules</code> will exceed this; an existing folder on the server usually will not.</li>
273
+ <li>Symbolic links travel only when they are relative and stay inside the run&#39;s storage. Links under
274
+ <code>node_modules</code> that point elsewhere, such as a package manager&#39;s absolute links, are left out
275
+ and come back with the next install in the workspace. Any other link pointing outside stops the
276
+ export with <code>run-transfer-link</code> and names the links; replace them with files or relative links.</li>
272
277
  </ul>
273
278
  <p>Export copies the run. It remains on the source and must be deleted there explicitly after a
274
279
  real move, otherwise two journals with the same ID diverge. On the target, the run appears
@@ -155,9 +155,10 @@ RAGENTS_TOKEN=<token> pnpm run-transfer <source> <target> <runId> --workspace /p
155
155
 
156
156
  The script exports the run from the source with `ragents.runs.export` and imports it on the target
157
157
  with `ragents.runs.import`. If each side uses a different token, set `RAGENTS_SOURCE_TOKEN` and
158
- `RAGENTS_TARGET_TOKEN`. The transfer includes the journal and payloads, model contexts under
159
- `chat/`, actor programs, and all plugin storage for the run, including `ragents.documents` files
160
- and the new folder of a run that works on the server. A folder on a workstation stays there, and the
158
+ `RAGENTS_TARGET_TOKEN`. The transfer includes the journal and payloads, which also hold the model
159
+ contexts of the run's agents, the stored contents the run refers to (attachments and the media of
160
+ the model contexts), actor programs, and all plugin storage for the run, including
161
+ `ragents.documents` files and the new folder of a run that works on the server. A folder on a workstation stays there, and the
161
162
  run keeps its binding to that workstation. Running processes, language servers, and
162
163
  browsers are not transferred; they are recreated on the target when next used.
163
164
 
@@ -171,6 +172,10 @@ The transfer enforces these prerequisites:
171
172
  the same ID and as the run owner, or anonymously for an ownerless run.
172
173
  - The archive must stay below 16 MiB because it travels as Base64 through the message layer.
173
174
  A workspace containing `node_modules` will exceed this; an existing folder on the server usually will not.
175
+ - Symbolic links travel only when they are relative and stay inside the run's storage. Links under
176
+ `node_modules` that point elsewhere, such as a package manager's absolute links, are left out
177
+ and come back with the next install in the workspace. Any other link pointing outside stops the
178
+ export with `run-transfer-link` and names the links; replace them with files or relative links.
174
179
 
175
180
  Export copies the run. It remains on the source and must be deleted there explicitly after a
176
181
  real move, otherwise two journals with the same ID diverge. On the target, the run appears
@@ -184,10 +184,13 @@ earliest after the snippet, as steering or in a later turn. The programming lang
184
184
  additional decision point for this.</p>
185
185
  <h2 id="model-context-across-turns">Model context across turns</h2>
186
186
  <p>Each LLM actor has its own conversation context, which persists across turns. A new input adds
187
- to that conversation. In server operation, the context is stored separately and reloaded after
188
- a restart. A new actor starts with its own context or, when spawned with <code>forkOf</code>, with a copy
189
- of another LLM actor&#39;s context from the same run. Updating the system prompt does not replace
190
- the existing conversation history.</p>
187
+ to that conversation. The context is part of the run&#39;s journal: every input as the model received
188
+ it, every completed model step, every tool result as the model saw it, and every compaction are
189
+ recorded there, and the context is read back from those records before each model request. After
190
+ a restart the actor therefore continues with exactly the same context. A new actor starts with its
191
+ own context or, when spawned with <code>forkOf</code>, with an unchanged copy of the context another LLM actor
192
+ of the same run had at the end of its last finished turn before the spawn. Updating the system
193
+ prompt does not replace the existing conversation history.</p>
191
194
  <p>Programmed actor state stores explicitly assigned data for functions and mini-apps. Before a
192
195
  replacement state is diffed and journaled, it is converted to JSON form: keys whose value is
193
196
  <code>undefined</code> are treated as absent both in memory and on disk, while a <code>set</code> state change without
@@ -195,6 +198,9 @@ a value remains invalid. The journal records the run&#39;s shared events and der
195
198
  from them. These three forms of state serve different purposes: the visible chat is not a full
196
199
  copy of the current model context, and a new turn does not mean the model starts without its
197
200
  conversation memory.</p>
201
+ <p>When the context grows too large, the agent compacts it: older parts are replaced by a summary
202
+ written by the model, and recent parts are kept. A compaction is recorded in the journal as well,
203
+ and the chat shows a short system note.</p>
198
204
  <h2 id="interrupting-a-turn-stopping-an-actor-stopping-a-run-and-shutting-down-the-server">Interrupting a turn, stopping an actor, stopping a run, and shutting down the server</h2>
199
205
  <p>All stop paths follow the same principle: block new work first, then cancel, wait for running
200
206
  work, and only then release resources. The exact boundary differs:</p>
@@ -313,12 +319,12 @@ before its first turn, and the stop reason names the unknown tools. The selectio
313
319
  inherited, although delegable engine capabilities still are. <code>withoutCapabilities</code> removes
314
320
  named technical permissions. Availability and grants also apply when the value is <code>null</code>.
315
321
  <code>forkOf</code> (a handle or ID) makes the new agent a fork of an LLM agent in the same run:
316
- <code>agent.spawned</code> records the source, and on the new agent&#39;s first turn the agent driver copies
317
- the source&#39;s stored context branch into its own context file. The copy ends before the source&#39;s
318
- first unanswered function call and contains no reasoning blocks; the new agent supplies its own
319
- system prompt, functions, and model. Later turns from the source are not copied. Both source and
320
- fork require the agent driver; a source without stored context is a hard error on the fork&#39;s
321
- first turn. A plain LLM receives no function overview. Its driver must explicitly support this
322
+ <code>agent.spawned</code> records the source, and the new agent&#39;s context begins with an unchanged copy of
323
+ the source&#39;s context up to the end of the source&#39;s last finished turn, reasoning blocks included.
324
+ Nothing from the turn the source is running at the spawn is copied, and no text is inserted; the
325
+ new agent supplies its own system prompt, functions, and model. Later turns from the source do not
326
+ reach the fork. Both source and fork require the agent driver; a source without a finished turn that
327
+ reached the model, and not itself a fork, is rejected with <code>fork-without-turn</code>. A plain LLM receives no function overview. Its driver must explicitly support this
322
328
  isolation or the turn is rejected.</p>
323
329
  <p>Equipped LLMs receive <code>typescript_api</code> and <code>typescript_eval</code>, plus an automatically generated
324
330
  overview of their available TypeScript functions with names and short descriptions. The
@@ -333,6 +339,6 @@ suggested as an agent&#39;s model choice.</p>
333
339
  <h2 id="journal-and-projection">Journal and projection</h2>
334
340
  <p>The journal is the shared history of a run. Visible state is produced by replaying its events;
335
341
  models and functions are not called again in the process. Recorded responses, function calls,
336
- state changes, and interruptions therefore remain traceable after a restart. Working files and
337
- private model context are stored separately outside the journal.</p>
342
+ state changes, and interruptions therefore remain traceable after a restart. The model context of
343
+ every LLM agent is part of the journal as well; working files are stored separately.</p>
338
344
  <p class="guide-source">Source: <a href="https://github.com/SchlenkR/RAgents/blob/main/docs/spec/core.md">docs/spec/core.md</a>. <a href="guide-runtime.md">This chapter as Markdown</a>.</p><p><a href="guide-getting-started.html">Get started</a></p><nav class="guide-next" aria-label="Continue reading"><a href="guide-ideas.html">Previous: Core ideas</a><a href="guide-getting-started.html">Next: Get started</a></nav></article></div></main><footer class="shell"><p>Generated from public documentation. Rebuild with <code>pnpm generate:homepage</code>. Verify with <code>pnpm check:homepage</code>.</p><nav aria-label="More pages"><a href="index.html">Homepage</a><a href="guide.html">Guide</a></nav></footer></body></html>
@@ -66,10 +66,13 @@ additional decision point for this.
66
66
  ## Model context across turns
67
67
 
68
68
  Each LLM actor has its own conversation context, which persists across turns. A new input adds
69
- to that conversation. In server operation, the context is stored separately and reloaded after
70
- a restart. A new actor starts with its own context or, when spawned with `forkOf`, with a copy
71
- of another LLM actor's context from the same run. Updating the system prompt does not replace
72
- the existing conversation history.
69
+ to that conversation. The context is part of the run's journal: every input as the model received
70
+ it, every completed model step, every tool result as the model saw it, and every compaction are
71
+ recorded there, and the context is read back from those records before each model request. After
72
+ a restart the actor therefore continues with exactly the same context. A new actor starts with its
73
+ own context or, when spawned with `forkOf`, with an unchanged copy of the context another LLM actor
74
+ of the same run had at the end of its last finished turn before the spawn. Updating the system
75
+ prompt does not replace the existing conversation history.
73
76
 
74
77
  Programmed actor state stores explicitly assigned data for functions and mini-apps. Before a
75
78
  replacement state is diffed and journaled, it is converted to JSON form: keys whose value is
@@ -79,6 +82,10 @@ from them. These three forms of state serve different purposes: the visible chat
79
82
  copy of the current model context, and a new turn does not mean the model starts without its
80
83
  conversation memory.
81
84
 
85
+ When the context grows too large, the agent compacts it: older parts are replaced by a summary
86
+ written by the model, and recent parts are kept. A compaction is recorded in the journal as well,
87
+ and the chat shows a short system note.
88
+
82
89
  ## Interrupting a turn, stopping an actor, stopping a run, and shutting down the server
83
90
 
84
91
  All stop paths follow the same principle: block new work first, then cancel, wait for running
@@ -198,12 +205,12 @@ before its first turn, and the stop reason names the unknown tools. The selectio
198
205
  inherited, although delegable engine capabilities still are. `withoutCapabilities` removes
199
206
  named technical permissions. Availability and grants also apply when the value is `null`.
200
207
  `forkOf` (a handle or ID) makes the new agent a fork of an LLM agent in the same run:
201
- `agent.spawned` records the source, and on the new agent's first turn the agent driver copies
202
- the source's stored context branch into its own context file. The copy ends before the source's
203
- first unanswered function call and contains no reasoning blocks; the new agent supplies its own
204
- system prompt, functions, and model. Later turns from the source are not copied. Both source and
205
- fork require the agent driver; a source without stored context is a hard error on the fork's
206
- first turn. A plain LLM receives no function overview. Its driver must explicitly support this
208
+ `agent.spawned` records the source, and the new agent's context begins with an unchanged copy of
209
+ the source's context up to the end of the source's last finished turn, reasoning blocks included.
210
+ Nothing from the turn the source is running at the spawn is copied, and no text is inserted; the
211
+ new agent supplies its own system prompt, functions, and model. Later turns from the source do not
212
+ reach the fork. Both source and fork require the agent driver; a source without a finished turn that
213
+ reached the model, and not itself a fork, is rejected with `fork-without-turn`. A plain LLM receives no function overview. Its driver must explicitly support this
207
214
  isolation or the turn is rejected.
208
215
 
209
216
  Equipped LLMs receive `typescript_api` and `typescript_eval`, plus an automatically generated
@@ -221,5 +228,5 @@ suggested as an agent's model choice.
221
228
 
222
229
  The journal is the shared history of a run. Visible state is produced by replaying its events;
223
230
  models and functions are not called again in the process. Recorded responses, function calls,
224
- state changes, and interruptions therefore remain traceable after a restart. Working files and
225
- private model context are stored separately outside the journal.
231
+ state changes, and interruptions therefore remain traceable after a restart. The model context of
232
+ every LLM agent is part of the journal as well; working files are stored separately.
@@ -711,9 +711,6 @@
711
711
  .h-auto {
712
712
  height: auto;
713
713
  }
714
- .h-dvh {
715
- height: 100dvh;
716
- }
717
714
  .h-full {
718
715
  height: 100%;
719
716
  }
@@ -1461,6 +1458,12 @@
1461
1458
  --tw-border-style: dashed;
1462
1459
  border-style: dashed;
1463
1460
  }
1461
+ .border-\[color-mix\(in_srgb\,var\(--destructive\)_55\%\,var\(--border\)\)\] {
1462
+ border-color: var(--destructive);
1463
+ @supports (color: color-mix(in lab, red, red)) {
1464
+ border-color: color-mix(in srgb,var(--destructive) 55%,var(--border));
1465
+ }
1466
+ }
1464
1467
  .border-\[color-mix\(in_srgb\,var\(--flow-status\)_60\%\,var\(--border\)\)\] {
1465
1468
  border-color: var(--flow-status);
1466
1469
  @supports (color: color-mix(in lab, red, red)) {
@@ -1512,6 +1515,9 @@
1512
1515
  .border-transparent {
1513
1516
  border-color: transparent;
1514
1517
  }
1518
+ .border-t-destructive {
1519
+ border-top-color: var(--destructive);
1520
+ }
1515
1521
  .border-t-info {
1516
1522
  border-top-color: var(--info);
1517
1523
  }
@@ -1620,6 +1626,12 @@
1620
1626
  background-color: color-mix(in oklab, currentcolor 11%, transparent);
1621
1627
  }
1622
1628
  }
1629
+ .bg-destructive\/8 {
1630
+ background-color: var(--destructive);
1631
+ @supports (color: color-mix(in lab, red, red)) {
1632
+ background-color: color-mix(in oklab, var(--destructive) 8%, transparent);
1633
+ }
1634
+ }
1623
1635
  .bg-destructive\/10 {
1624
1636
  background-color: var(--destructive);
1625
1637
  @supports (color: color-mix(in lab, red, red)) {
@@ -3372,9 +3384,17 @@
3372
3384
  .aria-disabled\:pointer-events-none[aria-disabled="true"] {
3373
3385
  pointer-events: none;
3374
3386
  }
3387
+ .aria-disabled\:cursor-default[aria-disabled="true"] {
3388
+ cursor: default;
3389
+ }
3375
3390
  .aria-disabled\:opacity-50[aria-disabled="true"] {
3376
3391
  opacity: 50%;
3377
3392
  }
3393
+ @media (hover: hover) {
3394
+ .aria-disabled\:hover\:bg-transparent[aria-disabled="true"]:hover {
3395
+ background-color: transparent;
3396
+ }
3397
+ }
3378
3398
  .aria-expanded\:bg-accent[aria-expanded="true"] {
3379
3399
  background-color: var(--accent);
3380
3400
  }
@@ -15,7 +15,7 @@
15
15
  "apps/web/src/access-token.ts": "ec06d109a8cc17ccee59804d7e52b3cc253b8496c58df7a7ff0c11c76307bc17",
16
16
  "apps/web/src/AccessContext.tsx": "d6b681ba3e5adae4c533076d500304115518212afac9453cfd4ca8a79aafaa73",
17
17
  "apps/web/src/actor-conversation.ts": "7e965f618ebad5e5b33f5c17588584b108cff4370ce3f17295138caba5c51bf0",
18
- "apps/web/src/api.ts": "c45e9f5f481ed58dcf81384dae90840fd6b42b15abc891b4d563cc7d514b2afa",
18
+ "apps/web/src/api.ts": "fd9ba5c67d1e98d3502bcfc46b33bf4a0d833e3bb8f3109e9d64608de6a6d931",
19
19
  "apps/web/src/App.tsx": "aeac2f4ea6c17d776936f4a22f2087d3d08e95bd291ee15a8914613186e03387",
20
20
  "apps/web/src/chat-view-settings.tsx": "31a89f3a23bde7386febc0603d76aba8cff799166040d74bbcb155754d3bcf03",
21
21
  "apps/web/src/chat/chat-target.ts": "4896dde68fc418ba5fb087385516e78b4d12f2655782afc147bb060a317cd76a",
@@ -76,7 +76,7 @@
76
76
  "apps/web/src/run-view.ts": "26e907cca10e943c328d161fbf3ef49ea2b2c7e61d436c9e5c310cee841d690f",
77
77
  "apps/web/src/RunPreparationChat.tsx": "36ea72e36bc320b11d672f1922cff151550842ef579c17be178b455a3d361e97",
78
78
  "apps/web/src/RunStore.ts": "a5d27040c25574671d451bdb4edf8b9163a1fb358ad15d6ce8d7fb25b48bbbd3",
79
- "apps/web/src/SessionList.tsx": "c7d3e41c1399bb803c3d6f50c78b983d6f0d656a897e712195cd8930c312e2de",
79
+ "apps/web/src/SessionList.tsx": "81ed15b12097a52150cce141b1491a39c30878faf4e5ed06eaac93bfae95cf27",
80
80
  "apps/web/src/settings-contributions.ts": "487aa01859d137212800b72a0b04ea75ecc93474b4df2559bbc83719f4562065",
81
81
  "apps/web/src/SettingsModal.tsx": "f9c65a50e9ea6ae0f4ef0cc5a3248a5ec357dd60408278e53c14f8f597fafb0c",
82
82
  "apps/web/src/SourceCode.tsx": "bc80927cba80ac589dd89c8e0f9d1108dcf48d88a78e650051b084b9364c5001",
@@ -132,7 +132,7 @@
132
132
  "apps/web/vite.config.ts": "08ad5bbe43fc990ba2763e1e170970d88b3ce9c78e54c14d197d8157ad6730fa",
133
133
  "packages/ragents/src/access.ts": "59845358f669c00d42ccc78bbb21bf7a348158228ae1b4a58a76f5de5158d398",
134
134
  "packages/ragents/src/domain/actor-reference.ts": "657f18122b55dfa9ceda91f4457a8cb95b51ff301c9e79387e1fd304a22d2da2",
135
- "packages/ragents/src/domain/events.ts": "8513fdfa2752dfdd85f8cb404498cff5a3f4174b973d6cfc68e43603f90e6cd0",
135
+ "packages/ragents/src/domain/events.ts": "9d1a2a96a10e4069191de893ea5e0c689829b43ff64107474a15d0153ee48aff",
136
136
  "packages/ragents/src/http/contracts.ts": "0f85568de2d470dc2815497abd2ae5eef88e5f282cdeaad40dd67990e0fb0cdf",
137
137
  "packages/ragents/src/rpc/contract.ts": "83edcfb3492dc78239a9344cbaa822dee1d9c13b5f83fe8303c27790c83594e7",
138
138
  "packages/ragents/src/rpc/peer.ts": "9c4ace7084f93194e12bacc2865ec3430c10a9236630d84d723d3bab58672c84",
@@ -5,8 +5,8 @@
5
5
  <meta name="viewport" content="width=device-width, initial-scale=1.0" />
6
6
  <link rel="stylesheet" href="/ragents.css" />
7
7
  <title>RAgents</title>
8
- <script type="module" crossorigin src="/assets/main-BCjvD2Hh.js"></script>
9
- <link rel="modulepreload" crossorigin href="/assets/mermaid-HWGCJPDP-CvYYFK_n.js">
8
+ <script type="module" crossorigin src="/assets/main-DlzW4t4c.js"></script>
9
+ <link rel="modulepreload" crossorigin href="/assets/mermaid-HWGCJPDP-kxkB991i.js">
10
10
  <link rel="stylesheet" crossorigin href="/assets/mermaid-HWGCJPDP-BPn4aV2r.css">
11
11
  </head>
12
12
  <body>
@@ -5,8 +5,8 @@
5
5
  <meta name="viewport" content="width=device-width, initial-scale=1.0" />
6
6
  <link rel="stylesheet" href="/ragents.css" />
7
7
  <title>RAgents Panel</title>
8
- <script type="module" crossorigin src="/assets/runPanel-CG7kRMJh.js"></script>
9
- <link rel="modulepreload" crossorigin href="/assets/mermaid-HWGCJPDP-CvYYFK_n.js">
8
+ <script type="module" crossorigin src="/assets/runPanel-BJEFQ__w.js"></script>
9
+ <link rel="modulepreload" crossorigin href="/assets/mermaid-HWGCJPDP-kxkB991i.js">
10
10
  <link rel="stylesheet" crossorigin href="/assets/mermaid-HWGCJPDP-BPn4aV2r.css">
11
11
  </head>
12
12
  <body>
@@ -32,8 +32,13 @@ const formatTimestamp = (time: number): string => {
32
32
  : date.toLocaleDateString("de-DE", { day: "2-digit", month: "2-digit" });
33
33
  };
34
34
 
35
- /** Running, unread and resting runs differ only in their accent colour; the card layout stays the same. */
35
+ /** Running, unread, locked and resting runs differ only in their accent colour; the card layout stays the same. */
36
36
  const tones = {
37
+ locked: {
38
+ card: "border-[color-mix(in_srgb,var(--destructive)_55%,var(--border))]",
39
+ head: "border-t-destructive bg-destructive/8",
40
+ text: "text-destructive",
41
+ },
37
42
  running: {
38
43
  card: "border-[color-mix(in_srgb,var(--info)_55%,var(--border))]",
39
44
  head: "border-t-info bg-info/8",
@@ -80,8 +85,8 @@ export function SessionList({
80
85
  <ul className={gridClass}>
81
86
  {index === 0 && createCard}
82
87
  {group.sessions.map((session) => {
83
- const notice = runActivityNotice(session, seenRevisions[session.id]);
84
- const tone = tones[session.running ? "running" : notice ? "unread" : "idle"];
88
+ const notice = session.locked === undefined ? runActivityNotice(session, seenRevisions[session.id]) : undefined;
89
+ const tone = tones[session.locked !== undefined ? "locked" : session.running ? "running" : notice ? "unread" : "idle"];
85
90
  const picked = session.id === activeId || (selectMode && selectedIds.has(session.id));
86
91
  return (
87
92
  <li
@@ -106,9 +111,10 @@ export function SessionList({
106
111
  aria-current={session.id === activeId ? "true" : undefined}
107
112
  aria-pressed={selectMode ? selectedIds.has(session.id) : undefined}
108
113
  className={cn(
109
- "flex min-h-[148px] min-w-0 flex-1 cursor-pointer flex-col items-stretch gap-2.5 rounded-[11px] px-4 pb-4 text-left focus-visible:outline-2 focus-visible:outline-primary focus-visible:outline-offset-2",
114
+ "flex min-h-[148px] min-w-0 flex-1 cursor-pointer flex-col items-stretch gap-2.5 rounded-[11px] px-4 pb-4 text-left focus-visible:outline-2 focus-visible:outline-primary focus-visible:outline-offset-2 disabled:cursor-default",
110
115
  selectMode && "pl-9",
111
116
  )}
117
+ disabled={session.locked !== undefined && !selectMode}
112
118
  onClick={() => (selectMode ? onToggleSelected(session.id) : onSelect(session.id))}
113
119
  type="button"
114
120
  >
@@ -117,16 +123,18 @@ export function SessionList({
117
123
  <span className="flex min-h-[18px] flex-wrap items-center gap-x-3.5 gap-y-1.5">
118
124
  <span className={cn("flex items-center gap-[7px] text-[0.75rem]", tone.text)}>
119
125
  {session.running ? <Spinner aria-hidden className="size-3" /> : <span aria-hidden className="size-[7px] flex-none rounded-full bg-current" />}
120
- {session.running ? "Läuft" : session.id === activeId ? "Geöffnet" : "Ruhend"}
126
+ {session.locked !== undefined ? "Locked" : session.running ? "Läuft" : session.id === activeId ? "Geöffnet" : "Ruhend"}
121
127
  </span>
122
128
  {notice && <span className="inline-flex items-center gap-1.5 text-[0.7rem] font-semibold text-primary" title={notice === "updated" ? "Neue Journal-Aktivität seit Deinem letzten Ansehen dieses Runs" : "In diesem Browser noch nicht angesehen"}>
123
129
  <span aria-hidden className="size-[7px] flex-none rounded-full bg-current" />{notice === "updated" ? "Neue Aktivität" : "Nicht angesehen"}
124
130
  </span>}
125
131
  </span>
126
132
  </span>
127
- {registry.sessionMetadata.map(({ id, Metadata }) => (
128
- <Metadata key={id} placement="list" session={session} />
129
- ))}
133
+ {session.locked !== undefined
134
+ ? <span className="text-[0.75rem] leading-[1.45] text-destructive [overflow-wrap:anywhere]">{session.locked}</span>
135
+ : registry.sessionMetadata.map(({ id, Metadata }) => (
136
+ <Metadata key={id} placement="list" session={session} />
137
+ ))}
130
138
  <span className="mt-auto grid gap-0.5 text-muted-foreground">
131
139
  {session.createdAt !== undefined && <span className="text-[0.7rem] tabular-nums">Erstellt <time dateTime={new Date(session.createdAt).toISOString()}>
132
140
  {new Date(session.createdAt).toLocaleString("de-DE", { day: "2-digit", month: "2-digit", year: "numeric", hour: "2-digit", minute: "2-digit" })}
@@ -46,6 +46,8 @@ export interface SessionInfo {
46
46
  metadata?: Readonly<Record<string, unknown>>;
47
47
  /** Warum ein Metadaten-Beitrag keinen Wert hat: gescheitert oder nicht rechtzeitig geantwortet. */
48
48
  metadataUnavailable?: Readonly<Record<string, string>>;
49
+ /** Warum der Server den Run gesperrt hat; ein gesperrter Run lässt sich nur noch löschen. */
50
+ locked?: string;
49
51
  }
50
52
 
51
53
  export const listSessions = (client: RpcClient = rpc): Promise<SessionInfo[]> =>
@@ -6,7 +6,7 @@ import { StartPage } from "./StartPage";
6
6
  /** Das Panel ohne geöffneten Run: Start, Runs oder Server; der Run selbst liegt im Run-Panel. */
7
7
  export function PanelPage(props: PanelPageProps) {
8
8
  const page = props.state.page;
9
- return <main className="h-dvh overflow-y-auto p-3">
9
+ return <main className="h-full overflow-y-auto p-3">
10
10
  {page === "connections" ? <ConnectionsPage {...props} /> : page === "runs" ? <RunsPage key={props.state.runsConnection ?? ""} {...props} /> : <StartPage {...props} />}
11
11
  </main>;
12
12
  }
@@ -33,13 +33,15 @@ export function RunLine({ connection, run, showConnection, selecting, selected,
33
33
  onToggle?: () => void;
34
34
  }) {
35
35
  const time = shortTime(run.updatedAt);
36
+ const problem = run.locked !== undefined ? `Locked: ${run.locked}` : run.problem;
36
37
  return <li className="col-span-full grid grid-cols-subgrid items-center">
37
38
  {selecting && <Checkbox aria-label={`${run.title} auswählen`} checked={selected === true} className="ml-1" onCheckedChange={() => onToggle?.()} />}
38
- <button className={cn(lineClass, selecting ? "col-[2/-1]" : "col-span-full")} onClick={() => (selecting ? onToggle?.() : onOpen())} title={showConnection ? `${run.title} (${connection.name})` : run.title} type="button">
39
+ <button aria-disabled={run.locked !== undefined && !selecting} className={cn(lineClass, selecting ? "col-[2/-1]" : "col-span-full", "aria-disabled:cursor-default aria-disabled:hover:bg-transparent")}
40
+ onClick={() => (selecting ? onToggle?.() : run.locked === undefined && onOpen())} title={showConnection ? `${run.title} (${connection.name})` : run.title} type="button">
39
41
  <RunStateIcon open={run.pendingActions} state={run.state} />
40
42
  <span className="flex min-w-0 items-center gap-1.5">
41
43
  <span className="min-w-0 truncate text-[0.8rem] font-medium">{run.title}</span>
42
- {run.problem !== undefined && <span className="flex flex-none text-destructive" title={run.problem}><CircleAlertIcon aria-hidden className="size-3.5" /><span className="sr-only">{run.problem}</span></span>}
44
+ {problem !== undefined && <span className="flex flex-none text-destructive" title={problem}><CircleAlertIcon aria-hidden className="size-3.5" /><span className="sr-only">{problem}</span></span>}
43
45
  </span>
44
46
  <span className="w-[42px] text-right font-mono text-[0.62rem] text-muted-foreground" data-cell="time" title={longTime(run.updatedAt)}>{time}</span>
45
47
  {showConnection && <span className="max-w-[92px] truncate text-[0.64rem] font-semibold text-muted-foreground" data-cell="connection" title={connection.name}>{connection.name}</span>}
@@ -29,6 +29,8 @@ export interface ConnectionRun {
29
29
  readonly updatedAt: number;
30
30
  /** Die Erweiterung konnte die Run-Ansicht nicht lesen; die Zeile nennt den Grund. */
31
31
  readonly problem?: string;
32
+ /** Warum der Server den Run gesperrt hat; die Zeile öffnet ihn nicht, löschen bleibt möglich. */
33
+ readonly locked?: string;
32
34
  }
33
35
 
34
36
  export interface ConnectionEntry {
@@ -23,7 +23,7 @@
23
23
  }
24
24
  },
25
25
  "stand": "76950227a2595ee5aa386c266cfe5a251b86943efffeda64a971b986ae33faec",
26
- "sourceStand": "e3dc79816db69f2ad287ace656902211eee89f9005e79cd517cbc1d851688011",
26
+ "sourceStand": "9f49ba186c2e5bc78cdee4402a8e004b6181e518fd968a3439f095380a8aaba5",
27
27
  "server": "server/index.js",
28
28
  "web": {
29
29
  "entry": "web/index.js",
@@ -193,7 +193,7 @@
193
193
  }
194
194
  },
195
195
  "stand": "7519e19c958a5f4821bff72f212fc3c8d5b7f7e8ac00195d57c5525beb4bab04",
196
- "sourceStand": "c7e196801def45b77f4ab814365f2a33e066bbd1959b6e5d71f125a0e1a3d06d",
196
+ "sourceStand": "51b005bf98c8009758fe4b4c07d0ddbeba5f3b9fb29298993d3840cb168ecf54",
197
197
  "server": "server/index.js",
198
198
  "web": {
199
199
  "entry": "web/index.js",
@@ -74,7 +74,7 @@
74
74
  }
75
75
  },
76
76
  "stand": "bfcbef3ac8061d0414592043532059dfb3087e9f1e4fc2bbc8f12b66060a96ce",
77
- "sourceStand": "0e89af59fc8357814749f8812fd8bd6b3664e701479441e176d73a596cf8448e",
77
+ "sourceStand": "f8a0da2327b506d345b997f75a849fc1b3adb7db2c774222370f5692a27b0e1c",
78
78
  "server": "server/index.js",
79
79
  "web": {
80
80
  "entry": "web/index.js",
@@ -36,7 +36,7 @@
36
36
  "web": {}
37
37
  },
38
38
  "stand": "d0c11bff127c8ef2beda57eee9baee70c28425e7bf76471034f57905f897e4e0",
39
- "sourceStand": "9c2400a6d1f39b00228478ec4d914b9c9334eb8bd5f72f298a78f5690a5d9744",
39
+ "sourceStand": "3029e6a53c84be5678c03791e39563dce94aae4383518b48983e894c2b83df53",
40
40
  "server": "server/index.js",
41
41
  "exports": {
42
42
  "server": {
@@ -101,7 +101,7 @@
101
101
  }
102
102
  },
103
103
  "stand": "54b40df2365ff3facc92feab74c674d0dc8a14e091227de1df650cb8b28cdd46",
104
- "sourceStand": "d3e6381d4616e2904537d44c9d3c04c8a86704161469e5c32b7b9c9dcb46957a",
104
+ "sourceStand": "76cd03df2dc3dcf4300f9582fbf60f57b37974fc0a21912e59272c44a35d095b",
105
105
  "server": "server/index.js",
106
106
  "web": {
107
107
  "entry": "web/index.js",
@@ -34,7 +34,7 @@
34
34
  }
35
35
  },
36
36
  "stand": "2f29e5802d451480af3b5cbf208524672e2ba21dd85825d62e837e1b5cc8d93b",
37
- "sourceStand": "9997ff5cf29e6340d85e2879fdda7f0a530e35f2388559f97e10238c2d8f2d16",
37
+ "sourceStand": "9cdd3af4d76f822ed975e0d476331283a9023a95f3b4d937516f58f358d809a1",
38
38
  "server": "server/index.js",
39
39
  "web": {
40
40
  "entry": "web/index.js",
@@ -44,7 +44,7 @@
44
44
  }
45
45
  },
46
46
  "stand": "458216a7329fdae84736358edbb025e59bd5e8e41b9b1319da768a84005e5967",
47
- "sourceStand": "d1f25b2837ed04e60db489b0eb923d0af395654fee33782eaba93ffcbcaa723a",
47
+ "sourceStand": "034f85bb66604898129eb6cf48462648d4724b6a14fcc79f25f2428f3ea0e5c1",
48
48
  "server": "server/index.js",
49
49
  "web": {
50
50
  "entry": "web/index.js",
@@ -21,7 +21,7 @@
21
21
  }
22
22
  },
23
23
  "stand": "b808c9dcfbf9f8a766b8704e6ff5284057a5f36d44726eb2a365fc0a9fff0448",
24
- "sourceStand": "13dc48c6cb6e42487d03f0cd916a893071b9b48702777a3e4fda8fbb8cf76f2e",
24
+ "sourceStand": "2563d53fb388d1fdb8e33889dc3ddccaf878afaa960bb5c3ca9bc095533c8b19",
25
25
  "server": "server/index.js",
26
26
  "web": {
27
27
  "entry": "web/index.js",
@@ -22,7 +22,7 @@
22
22
  "web": {}
23
23
  },
24
24
  "stand": "b490de948673e6cf227a3ec4fbff5d4abe86b44c4eb26effa552dfbad803ae9a",
25
- "sourceStand": "26a30dcdedbbf1e4c7e5f8a083fe15cfb7fd4fe486adfc20c0193ffd2bd83810",
25
+ "sourceStand": "a05d84e6bba175ae94059fd6734e2fc00af2cae9391a8a1b0fded6690f76046a",
26
26
  "server": "server/index.js",
27
27
  "exports": {
28
28
  "server": {},
@@ -172,7 +172,7 @@
172
172
  }
173
173
  },
174
174
  "stand": "04d3cd3b2394dc698c36386e4e24a5f551d75207db44ceb6295e6b0aa688656d",
175
- "sourceStand": "5a6693e08ee33318be87be978178ea0676191bc1ff8a60e0a26ff951ebc1ff11",
175
+ "sourceStand": "00d1dfef1200d3b1c4f51a12dbf126c9f0ae06da62a6ed691638c92a22d0c12d",
176
176
  "server": "server/index.js",
177
177
  "web": {
178
178
  "entry": "web/index.js",
@@ -129,7 +129,7 @@
129
129
  }
130
130
  },
131
131
  "stand": "09df34aa3b7215537058517cd34d9b0065706507daa918b9122eb50dadbfa897",
132
- "sourceStand": "ede033b21ba5ec27edbbc1fc94417d640e6ad81c6594a85532cc40a2c8b1fb54",
132
+ "sourceStand": "a9f28ead727f065d2241e1fc0b49f31c1e9a6f8e4bdad26393c2f1d7c080dbc4",
133
133
  "server": "server/index.js",
134
134
  "web": {
135
135
  "entry": "web/index.js",