p-spore 0.1.3 → 0.1.42
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.
- package/README.md +110 -15
- package/dist/agents/agent-manager.d.ts +3 -3
- package/dist/agents/agent-manager.d.ts.map +1 -1
- package/dist/agents/agent-manager.js +3 -2
- package/dist/agents/agent-manager.js.map +1 -1
- package/dist/application/agent-application.d.ts +29 -5
- package/dist/application/agent-application.d.ts.map +1 -1
- package/dist/application/agent-application.js +444 -14
- package/dist/application/agent-application.js.map +1 -1
- package/dist/articles/diff.d.ts +70 -0
- package/dist/articles/diff.d.ts.map +1 -0
- package/dist/articles/diff.js +330 -0
- package/dist/articles/diff.js.map +1 -0
- package/dist/articles/docx.d.ts +10 -0
- package/dist/articles/docx.d.ts.map +1 -0
- package/dist/articles/docx.js +219 -0
- package/dist/articles/docx.js.map +1 -0
- package/dist/articles/draft.d.ts +18 -0
- package/dist/articles/draft.d.ts.map +1 -0
- package/dist/articles/draft.js +88 -0
- package/dist/articles/draft.js.map +1 -0
- package/dist/articles/edits.d.ts +24 -0
- package/dist/articles/edits.d.ts.map +1 -0
- package/dist/articles/edits.js +54 -0
- package/dist/articles/edits.js.map +1 -0
- package/dist/articles/html.d.ts +10 -0
- package/dist/articles/html.d.ts.map +1 -0
- package/dist/articles/html.js +122 -0
- package/dist/articles/html.js.map +1 -0
- package/dist/articles/plain.d.ts +8 -0
- package/dist/articles/plain.d.ts.map +1 -0
- package/dist/articles/plain.js +69 -0
- package/dist/articles/plain.js.map +1 -0
- package/dist/articles/preview.d.ts +43 -0
- package/dist/articles/preview.d.ts.map +1 -0
- package/dist/articles/preview.js +90 -0
- package/dist/articles/preview.js.map +1 -0
- package/dist/articles/publish.d.ts +10 -0
- package/dist/articles/publish.d.ts.map +1 -0
- package/dist/articles/publish.js +54 -0
- package/dist/articles/publish.js.map +1 -0
- package/dist/articles/receipt.d.ts +16 -0
- package/dist/articles/receipt.d.ts.map +1 -0
- package/dist/articles/receipt.js +27 -0
- package/dist/articles/receipt.js.map +1 -0
- package/dist/articles/store.d.ts +78 -0
- package/dist/articles/store.d.ts.map +1 -0
- package/dist/articles/store.js +308 -0
- package/dist/articles/store.js.map +1 -0
- package/dist/articles/tool.d.ts +14 -0
- package/dist/articles/tool.d.ts.map +1 -0
- package/dist/articles/tool.js +175 -0
- package/dist/articles/tool.js.map +1 -0
- package/dist/articles/writer-context.d.ts +5 -0
- package/dist/articles/writer-context.d.ts.map +1 -0
- package/dist/articles/writer-context.js +56 -0
- package/dist/articles/writer-context.js.map +1 -0
- package/dist/articles/writer.d.ts +18 -0
- package/dist/articles/writer.d.ts.map +1 -0
- package/dist/articles/writer.js +79 -0
- package/dist/articles/writer.js.map +1 -0
- package/dist/articles/zip-write.d.ts +11 -0
- package/dist/articles/zip-write.d.ts.map +1 -0
- package/dist/articles/zip-write.js +63 -0
- package/dist/articles/zip-write.js.map +1 -0
- package/dist/bundled-skills/README.md +17 -0
- package/dist/bundled-skills/aegis-search/SKILL.md +59 -0
- package/dist/bundled-skills/aegis-search/bin/.gitkeep +0 -0
- package/dist/bundled-skills/article-canvas/SKILL.md +28 -0
- package/dist/bundled-skills/binaries.json +23 -0
- package/dist/bundled-skills/doc-extract/SKILL.md +56 -0
- package/dist/cli/main.d.ts.map +1 -1
- package/dist/cli/main.js +407 -54
- package/dist/cli/main.js.map +1 -1
- package/dist/config/config.d.ts +43 -0
- package/dist/config/config.d.ts.map +1 -1
- package/dist/config/config.js +150 -6
- package/dist/config/config.js.map +1 -1
- package/dist/daemon/daemon.d.ts.map +1 -1
- package/dist/daemon/daemon.js +80 -11
- package/dist/daemon/daemon.js.map +1 -1
- package/dist/desktop/application.d.ts +4 -0
- package/dist/desktop/application.d.ts.map +1 -0
- package/dist/desktop/application.js +1688 -0
- package/dist/desktop/application.js.map +1 -0
- package/dist/desktop/article-export.d.ts +12 -0
- package/dist/desktop/article-export.d.ts.map +1 -0
- package/dist/desktop/article-export.js +87 -0
- package/dist/desktop/article-export.js.map +1 -0
- package/dist/desktop/assets/pspore.png +0 -0
- package/dist/desktop/assets/pspore.svg +24 -0
- package/dist/desktop/conversation-smoke.d.ts +5 -0
- package/dist/desktop/conversation-smoke.d.ts.map +1 -0
- package/dist/desktop/conversation-smoke.js +93 -0
- package/dist/desktop/conversation-smoke.js.map +1 -0
- package/dist/desktop/daemon-bridge.d.ts.map +1 -1
- package/dist/desktop/daemon-bridge.js +62 -17
- package/dist/desktop/daemon-bridge.js.map +1 -1
- package/dist/desktop/ipc-contract.d.ts +124 -0
- package/dist/desktop/ipc-contract.d.ts.map +1 -1
- package/dist/desktop/ipc-contract.js +191 -12
- package/dist/desktop/ipc-contract.js.map +1 -1
- package/dist/desktop/local-path.d.ts +15 -0
- package/dist/desktop/local-path.d.ts.map +1 -0
- package/dist/desktop/local-path.js +59 -0
- package/dist/desktop/local-path.js.map +1 -0
- package/dist/desktop/main.d.ts +10 -1
- package/dist/desktop/main.d.ts.map +1 -1
- package/dist/desktop/main.js +122 -530
- package/dist/desktop/main.js.map +1 -1
- package/dist/desktop/native-startup.d.ts +4 -0
- package/dist/desktop/native-startup.d.ts.map +1 -0
- package/dist/desktop/native-startup.js +57 -0
- package/dist/desktop/native-startup.js.map +1 -0
- package/dist/desktop/preload.cjs +28 -1
- package/dist/desktop/renderer/article-panel.d.ts +45 -0
- package/dist/desktop/renderer/article-panel.d.ts.map +1 -0
- package/dist/desktop/renderer/article-panel.js +1126 -0
- package/dist/desktop/renderer/article-panel.js.map +1 -0
- package/dist/desktop/renderer/article-split.d.ts +32 -0
- package/dist/desktop/renderer/article-split.d.ts.map +1 -0
- package/dist/desktop/renderer/article-split.js +48 -0
- package/dist/desktop/renderer/article-split.js.map +1 -0
- package/dist/desktop/renderer/composer-file-references.d.ts +23 -0
- package/dist/desktop/renderer/composer-file-references.d.ts.map +1 -0
- package/dist/desktop/renderer/composer-file-references.js +51 -0
- package/dist/desktop/renderer/composer-file-references.js.map +1 -0
- package/dist/desktop/renderer/conversation.d.ts +23 -0
- package/dist/desktop/renderer/conversation.d.ts.map +1 -0
- package/dist/desktop/renderer/conversation.js +66 -0
- package/dist/desktop/renderer/conversation.js.map +1 -0
- package/dist/desktop/renderer/dom-reconcile.d.ts +15 -0
- package/dist/desktop/renderer/dom-reconcile.d.ts.map +1 -0
- package/dist/desktop/renderer/dom-reconcile.js +33 -0
- package/dist/desktop/renderer/dom-reconcile.js.map +1 -0
- package/dist/desktop/renderer/index.html +211 -34
- package/dist/desktop/renderer/indexing-view.d.ts +22 -0
- package/dist/desktop/renderer/indexing-view.d.ts.map +1 -0
- package/dist/desktop/renderer/indexing-view.js +115 -0
- package/dist/desktop/renderer/indexing-view.js.map +1 -0
- package/dist/desktop/renderer/markdown-view.d.ts +23 -0
- package/dist/desktop/renderer/markdown-view.d.ts.map +1 -0
- package/dist/desktop/renderer/markdown-view.js +436 -0
- package/dist/desktop/renderer/markdown-view.js.map +1 -0
- package/dist/desktop/renderer/motion.d.ts +67 -0
- package/dist/desktop/renderer/motion.d.ts.map +1 -0
- package/dist/desktop/renderer/motion.js +296 -0
- package/dist/desktop/renderer/motion.js.map +1 -0
- package/dist/desktop/renderer/renderer.js +1793 -155
- package/dist/desktop/renderer/renderer.js.map +1 -1
- package/dist/desktop/renderer/session-find.d.ts +18 -0
- package/dist/desktop/renderer/session-find.d.ts.map +1 -0
- package/dist/desktop/renderer/session-find.js +29 -0
- package/dist/desktop/renderer/session-find.js.map +1 -0
- package/dist/desktop/renderer/session-search.d.ts +30 -0
- package/dist/desktop/renderer/session-search.d.ts.map +1 -0
- package/dist/desktop/renderer/session-search.js +296 -0
- package/dist/desktop/renderer/session-search.js.map +1 -0
- package/dist/desktop/renderer/store.d.ts +35 -8
- package/dist/desktop/renderer/store.d.ts.map +1 -1
- package/dist/desktop/renderer/store.js +95 -78
- package/dist/desktop/renderer/store.js.map +1 -1
- package/dist/desktop/renderer/styles.css +910 -268
- package/dist/desktop/renderer/vendor/gsap.min.js +11 -0
- package/dist/desktop/renderer-diagnostics.d.ts +5 -0
- package/dist/desktop/renderer-diagnostics.d.ts.map +1 -0
- package/dist/desktop/renderer-diagnostics.js +47 -0
- package/dist/desktop/renderer-diagnostics.js.map +1 -0
- package/dist/desktop/security.d.ts +26 -1
- package/dist/desktop/security.d.ts.map +1 -1
- package/dist/desktop/security.js +26 -6
- package/dist/desktop/security.js.map +1 -1
- package/dist/desktop/smoke-fixture.d.ts.map +1 -1
- package/dist/desktop/smoke-fixture.js +77 -3
- package/dist/desktop/smoke-fixture.js.map +1 -1
- package/dist/desktop/splash/index.html +25 -0
- package/dist/desktop/splash/splash.d.ts +2 -0
- package/dist/desktop/splash/splash.d.ts.map +1 -0
- package/dist/desktop/splash/splash.js +8 -0
- package/dist/desktop/splash/splash.js.map +1 -0
- package/dist/desktop/splash/styles.css +24 -0
- package/dist/desktop/system-open.d.ts +16 -0
- package/dist/desktop/system-open.d.ts.map +1 -0
- package/dist/desktop/system-open.js +90 -0
- package/dist/desktop/system-open.js.map +1 -0
- package/dist/desktop/validation.d.ts.map +1 -1
- package/dist/desktop/validation.js +99 -21
- package/dist/desktop/validation.js.map +1 -1
- package/dist/desktop/window-security.d.ts +4 -0
- package/dist/desktop/window-security.d.ts.map +1 -0
- package/dist/desktop/window-security.js +26 -0
- package/dist/desktop/window-security.js.map +1 -0
- package/dist/documents/errors.d.ts +12 -0
- package/dist/documents/errors.d.ts.map +1 -0
- package/dist/documents/errors.js +12 -0
- package/dist/documents/errors.js.map +1 -0
- package/dist/documents/extract.d.ts +37 -0
- package/dist/documents/extract.d.ts.map +1 -0
- package/dist/documents/extract.js +90 -0
- package/dist/documents/extract.js.map +1 -0
- package/dist/documents/legacy-office.d.ts +23 -0
- package/dist/documents/legacy-office.d.ts.map +1 -0
- package/dist/documents/legacy-office.js +439 -0
- package/dist/documents/legacy-office.js.map +1 -0
- package/dist/documents/ole.d.ts +20 -0
- package/dist/documents/ole.d.ts.map +1 -0
- package/dist/documents/ole.js +189 -0
- package/dist/documents/ole.js.map +1 -0
- package/dist/documents/ooxml.d.ts +23 -0
- package/dist/documents/ooxml.d.ts.map +1 -0
- package/dist/documents/ooxml.js +197 -0
- package/dist/documents/ooxml.js.map +1 -0
- package/dist/documents/pdf.d.ts +20 -0
- package/dist/documents/pdf.d.ts.map +1 -0
- package/dist/documents/pdf.js +95 -0
- package/dist/documents/pdf.js.map +1 -0
- package/dist/documents/plain-text.d.ts +22 -0
- package/dist/documents/plain-text.d.ts.map +1 -0
- package/dist/documents/plain-text.js +57 -0
- package/dist/documents/plain-text.js.map +1 -0
- package/dist/documents/zip.d.ts +15 -0
- package/dist/documents/zip.d.ts.map +1 -0
- package/dist/documents/zip.js +137 -0
- package/dist/documents/zip.js.map +1 -0
- package/dist/domain/indexing.d.ts +60 -0
- package/dist/domain/indexing.d.ts.map +1 -0
- package/dist/domain/indexing.js +13 -0
- package/dist/domain/indexing.js.map +1 -0
- package/dist/domain/runtime.d.ts +133 -5
- package/dist/domain/runtime.d.ts.map +1 -1
- package/dist/gateway/local-gateway.d.ts +8 -0
- package/dist/gateway/local-gateway.d.ts.map +1 -1
- package/dist/gateway/local-gateway.js +105 -21
- package/dist/gateway/local-gateway.js.map +1 -1
- package/dist/indexing/index-service.d.ts +56 -0
- package/dist/indexing/index-service.d.ts.map +1 -0
- package/dist/indexing/index-service.js +262 -0
- package/dist/indexing/index-service.js.map +1 -0
- package/dist/kernel/loop.d.ts +10 -0
- package/dist/kernel/loop.d.ts.map +1 -1
- package/dist/kernel/loop.js +6 -2
- package/dist/kernel/loop.js.map +1 -1
- package/dist/kernel/reducer.d.ts.map +1 -1
- package/dist/kernel/reducer.js +17 -1
- package/dist/kernel/reducer.js.map +1 -1
- package/dist/kernel/state.d.ts +17 -4
- package/dist/kernel/state.d.ts.map +1 -1
- package/dist/kernel/state.js +2 -0
- package/dist/kernel/state.js.map +1 -1
- package/dist/memory/memory-tools.d.ts.map +1 -1
- package/dist/memory/memory-tools.js +25 -5
- package/dist/memory/memory-tools.js.map +1 -1
- package/dist/pi/context-budget.d.ts +8 -0
- package/dist/pi/context-budget.d.ts.map +1 -0
- package/dist/pi/context-budget.js +62 -0
- package/dist/pi/context-budget.js.map +1 -0
- package/dist/pi/pi-runtime-adapter.d.ts +38 -3
- package/dist/pi/pi-runtime-adapter.d.ts.map +1 -1
- package/dist/pi/pi-runtime-adapter.js +551 -56
- package/dist/pi/pi-runtime-adapter.js.map +1 -1
- package/dist/plugins/bundled-skills.d.ts +56 -0
- package/dist/plugins/bundled-skills.d.ts.map +1 -0
- package/dist/plugins/bundled-skills.js +243 -0
- package/dist/plugins/bundled-skills.js.map +1 -0
- package/dist/plugins/extension-manager.d.ts +23 -1
- package/dist/plugins/extension-manager.d.ts.map +1 -1
- package/dist/plugins/extension-manager.js +117 -0
- package/dist/plugins/extension-manager.js.map +1 -1
- package/dist/plugins/types.d.ts +29 -0
- package/dist/plugins/types.d.ts.map +1 -1
- package/dist/plugins/workspace-skills.d.ts +36 -0
- package/dist/plugins/workspace-skills.d.ts.map +1 -0
- package/dist/plugins/workspace-skills.js +309 -0
- package/dist/plugins/workspace-skills.js.map +1 -0
- package/dist/policy/policy.d.ts.map +1 -1
- package/dist/policy/policy.js +26 -4
- package/dist/policy/policy.js.map +1 -1
- package/dist/protocol/client.d.ts +1 -0
- package/dist/protocol/client.d.ts.map +1 -1
- package/dist/protocol/client.js +49 -24
- package/dist/protocol/client.js.map +1 -1
- package/dist/protocol/limits.d.ts +69 -0
- package/dist/protocol/limits.d.ts.map +1 -0
- package/dist/protocol/limits.js +166 -0
- package/dist/protocol/limits.js.map +1 -0
- package/dist/protocol/schema.d.ts +6 -0
- package/dist/protocol/schema.d.ts.map +1 -1
- package/dist/protocol/schema.js.map +1 -1
- package/dist/protocol/server-frame-codec.d.ts +18 -0
- package/dist/protocol/server-frame-codec.d.ts.map +1 -0
- package/dist/protocol/server-frame-codec.js +211 -0
- package/dist/protocol/server-frame-codec.js.map +1 -0
- package/dist/service/legacy-daemon.d.ts +6 -0
- package/dist/service/legacy-daemon.d.ts.map +1 -0
- package/dist/service/legacy-daemon.js +42 -0
- package/dist/service/legacy-daemon.js.map +1 -0
- package/dist/service/service-launch.d.ts +10 -0
- package/dist/service/service-launch.d.ts.map +1 -0
- package/dist/service/service-launch.js +56 -0
- package/dist/service/service-launch.js.map +1 -0
- package/dist/service/system-service.d.ts +57 -0
- package/dist/service/system-service.d.ts.map +1 -0
- package/dist/service/system-service.js +263 -0
- package/dist/service/system-service.js.map +1 -0
- package/dist/sessions/session-catalog.d.ts +45 -0
- package/dist/sessions/session-catalog.d.ts.map +1 -0
- package/dist/sessions/session-catalog.js +270 -0
- package/dist/sessions/session-catalog.js.map +1 -0
- package/dist/sessions/session-file.d.ts +12 -0
- package/dist/sessions/session-file.d.ts.map +1 -0
- package/dist/sessions/session-file.js +47 -0
- package/dist/sessions/session-file.js.map +1 -0
- package/dist/settings/compaction-settings.d.ts +10 -0
- package/dist/settings/compaction-settings.d.ts.map +1 -0
- package/dist/settings/compaction-settings.js +8 -0
- package/dist/settings/compaction-settings.js.map +1 -0
- package/dist/settings/indexing-settings-service.d.ts +16 -0
- package/dist/settings/indexing-settings-service.d.ts.map +1 -0
- package/dist/settings/indexing-settings-service.js +57 -0
- package/dist/settings/indexing-settings-service.js.map +1 -0
- package/dist/settings/indexing-settings.d.ts +30 -0
- package/dist/settings/indexing-settings.d.ts.map +1 -0
- package/dist/settings/indexing-settings.js +58 -0
- package/dist/settings/indexing-settings.js.map +1 -0
- package/dist/settings/llm-settings-service.d.ts +6 -0
- package/dist/settings/llm-settings-service.d.ts.map +1 -1
- package/dist/settings/llm-settings-service.js +137 -12
- package/dist/settings/llm-settings-service.js.map +1 -1
- package/dist/settings/llm-settings.d.ts +68 -2
- package/dist/settings/llm-settings.d.ts.map +1 -1
- package/dist/settings/llm-settings.js +119 -17
- package/dist/settings/llm-settings.js.map +1 -1
- package/dist/settings/model-api.d.ts +10 -0
- package/dist/settings/model-api.d.ts.map +1 -0
- package/dist/settings/model-api.js +10 -0
- package/dist/settings/model-api.js.map +1 -0
- package/dist/storage/home.d.ts +1 -0
- package/dist/storage/home.d.ts.map +1 -1
- package/dist/storage/home.js +37 -2
- package/dist/storage/home.js.map +1 -1
- package/dist/tools/core-tools.d.ts +2 -0
- package/dist/tools/core-tools.d.ts.map +1 -1
- package/dist/tools/core-tools.js +91 -1
- package/dist/tools/core-tools.js.map +1 -1
- package/dist/ui/shared/activity.d.ts +27 -0
- package/dist/ui/shared/activity.d.ts.map +1 -0
- package/dist/ui/shared/activity.js +384 -0
- package/dist/ui/shared/activity.js.map +1 -0
- package/dist/ui/shared/full-message.d.ts +22 -0
- package/dist/ui/shared/full-message.d.ts.map +1 -0
- package/dist/ui/shared/full-message.js +40 -0
- package/dist/ui/shared/full-message.js.map +1 -0
- package/dist/ui/shared/local-links.d.ts +7 -0
- package/dist/ui/shared/local-links.d.ts.map +1 -0
- package/dist/ui/shared/local-links.js +24 -0
- package/dist/ui/shared/local-links.js.map +1 -0
- package/dist/ui/shared/markdown-stream.d.ts +25 -0
- package/dist/ui/shared/markdown-stream.d.ts.map +1 -0
- package/dist/ui/shared/markdown-stream.js +35 -0
- package/dist/ui/shared/markdown-stream.js.map +1 -0
- package/dist/ui/shared/markdown.d.ts +70 -0
- package/dist/ui/shared/markdown.d.ts.map +1 -0
- package/dist/ui/shared/markdown.js +434 -0
- package/dist/ui/shared/markdown.js.map +1 -0
- package/dist/ui/shared/presentation.d.ts +10 -2
- package/dist/ui/shared/presentation.d.ts.map +1 -1
- package/dist/ui/shared/presentation.js +83 -22
- package/dist/ui/shared/presentation.js.map +1 -1
- package/dist/ui/shared/protocol-state.d.ts +19 -0
- package/dist/ui/shared/protocol-state.d.ts.map +1 -1
- package/dist/ui/shared/protocol-state.js +188 -26
- package/dist/ui/shared/protocol-state.js.map +1 -1
- package/dist/ui/shared/virtual-list.d.ts +34 -0
- package/dist/ui/shared/virtual-list.d.ts.map +1 -0
- package/dist/ui/shared/virtual-list.js +143 -0
- package/dist/ui/shared/virtual-list.js.map +1 -0
- package/dist/ui/tui/commands.d.ts +1 -1
- package/dist/ui/tui/commands.d.ts.map +1 -1
- package/dist/ui/tui/commands.js +9 -3
- package/dist/ui/tui/commands.js.map +1 -1
- package/dist/ui/tui/store.d.ts +26 -0
- package/dist/ui/tui/store.d.ts.map +1 -1
- package/dist/ui/tui/store.js +67 -3
- package/dist/ui/tui/store.js.map +1 -1
- package/dist/ui/tui/tui-app.d.ts.map +1 -1
- package/dist/ui/tui/tui-app.js +316 -38
- package/dist/ui/tui/tui-app.js.map +1 -1
- package/dist/ui/tui/view.d.ts +10 -0
- package/dist/ui/tui/view.d.ts.map +1 -1
- package/dist/ui/tui/view.js +253 -49
- package/dist/ui/tui/view.js.map +1 -1
- package/dist/version.d.ts +1 -1
- package/dist/version.d.ts.map +1 -1
- package/dist/version.js +1 -1
- package/dist/version.js.map +1 -1
- package/package.json +13 -2
|
@@ -0,0 +1,384 @@
|
|
|
1
|
+
export function applyCoworkActivityEvent(current, event, maximum = 100) {
|
|
2
|
+
if (event.type !== "tool.started" && event.type !== "tool.updated" && event.type !== "tool.completed") {
|
|
3
|
+
const generic = genericActivity(current, event);
|
|
4
|
+
if (!generic)
|
|
5
|
+
return current;
|
|
6
|
+
const existing = current.findIndex((activity) => activity.id === generic.id);
|
|
7
|
+
const activities = existing >= 0
|
|
8
|
+
? current.map((activity, index) => index === existing ? generic : activity)
|
|
9
|
+
: [...current, generic];
|
|
10
|
+
return activities.slice(-Math.max(1, maximum));
|
|
11
|
+
}
|
|
12
|
+
const payload = asRecord(event.payload);
|
|
13
|
+
const toolCallId = stringValue(payload["toolCallId"]) ?? event.id;
|
|
14
|
+
const toolName = stringValue(payload["toolName"]) ?? "tool";
|
|
15
|
+
const sessionId = stringValue(payload["sessionId"]);
|
|
16
|
+
const index = current.findIndex((activity) => activity.id === toolCallId);
|
|
17
|
+
const previous = index >= 0 ? current[index] : undefined;
|
|
18
|
+
let next;
|
|
19
|
+
if (event.type === "tool.started") {
|
|
20
|
+
const detail = activityDetail(payload["input"], undefined);
|
|
21
|
+
next = {
|
|
22
|
+
id: toolCallId,
|
|
23
|
+
type: event.type,
|
|
24
|
+
...(sessionId ? { sessionId } : {}),
|
|
25
|
+
toolName,
|
|
26
|
+
status: "running",
|
|
27
|
+
label: toolLabel(toolName, "running"),
|
|
28
|
+
summary: toolTarget(toolName, asRecord(payload["input"])),
|
|
29
|
+
ts: event.ts,
|
|
30
|
+
...(detail ? { detail } : {}),
|
|
31
|
+
};
|
|
32
|
+
}
|
|
33
|
+
else if (event.type === "tool.updated") {
|
|
34
|
+
if (!previous)
|
|
35
|
+
return current;
|
|
36
|
+
const detail = activityDetail(payload["partialResult"], previous.detail);
|
|
37
|
+
next = {
|
|
38
|
+
...previous,
|
|
39
|
+
type: event.type,
|
|
40
|
+
...(detail ? { detail } : {}),
|
|
41
|
+
};
|
|
42
|
+
}
|
|
43
|
+
else {
|
|
44
|
+
const failed = payload["isError"] === true;
|
|
45
|
+
const startedAt = previous?.ts ?? event.ts;
|
|
46
|
+
const detail = activityDetail(payload["result"], previous?.detail);
|
|
47
|
+
next = {
|
|
48
|
+
...(previous ?? {
|
|
49
|
+
id: toolCallId,
|
|
50
|
+
...(sessionId ? { sessionId } : {}),
|
|
51
|
+
toolName,
|
|
52
|
+
summary: toolTarget(toolName, {}),
|
|
53
|
+
ts: startedAt,
|
|
54
|
+
}),
|
|
55
|
+
type: event.type,
|
|
56
|
+
status: failed ? "failed" : "succeeded",
|
|
57
|
+
label: toolLabel(toolName, failed ? "failed" : "succeeded"),
|
|
58
|
+
completedAt: event.ts,
|
|
59
|
+
durationMs: elapsedMs(startedAt, event.ts),
|
|
60
|
+
resultSummary: toolResultSummary(toolName, payload["result"], failed),
|
|
61
|
+
...(detail ? { detail } : {}),
|
|
62
|
+
};
|
|
63
|
+
}
|
|
64
|
+
const activities = index >= 0
|
|
65
|
+
? current.map((activity, activityIndex) => activityIndex === index ? next : activity)
|
|
66
|
+
: [...current, next];
|
|
67
|
+
return activities.slice(-Math.max(1, maximum));
|
|
68
|
+
}
|
|
69
|
+
function genericActivity(current, event) {
|
|
70
|
+
const visible = new Set([
|
|
71
|
+
"run.started",
|
|
72
|
+
"run.settled",
|
|
73
|
+
"compaction.started",
|
|
74
|
+
"compaction.completed",
|
|
75
|
+
"retry.started",
|
|
76
|
+
"retry.completed",
|
|
77
|
+
"runtime.error",
|
|
78
|
+
"automation.run",
|
|
79
|
+
"agent.updated",
|
|
80
|
+
"agent.message",
|
|
81
|
+
"mcp.health",
|
|
82
|
+
"resource.health",
|
|
83
|
+
]);
|
|
84
|
+
if (!visible.has(event.type))
|
|
85
|
+
return undefined;
|
|
86
|
+
const payload = asRecord(event.payload);
|
|
87
|
+
const sessionId = stringValue(payload["sessionId"]);
|
|
88
|
+
const pair = pairedEvent(event.type);
|
|
89
|
+
const previous = pair?.phase === "completed"
|
|
90
|
+
? [...current].reverse().find((activity) => (activity.toolName === pair.key
|
|
91
|
+
&& activity.status === "running"
|
|
92
|
+
&& activity.sessionId === sessionId))
|
|
93
|
+
: undefined;
|
|
94
|
+
const presentation = genericPresentation(event.type, payload);
|
|
95
|
+
const status = presentation.status;
|
|
96
|
+
const detail = activityDetail(payload, previous?.detail);
|
|
97
|
+
const startedAt = previous?.ts ?? event.ts;
|
|
98
|
+
return {
|
|
99
|
+
id: previous?.id ?? event.id,
|
|
100
|
+
type: event.type,
|
|
101
|
+
...(sessionId ? { sessionId } : {}),
|
|
102
|
+
toolName: pair?.key ?? presentation.kind,
|
|
103
|
+
status,
|
|
104
|
+
label: presentation.label,
|
|
105
|
+
summary: presentation.summary,
|
|
106
|
+
ts: startedAt,
|
|
107
|
+
...(status === "running" ? {} : {
|
|
108
|
+
completedAt: event.ts,
|
|
109
|
+
durationMs: elapsedMs(startedAt, event.ts),
|
|
110
|
+
}),
|
|
111
|
+
...(presentation.result ? { resultSummary: presentation.result } : {}),
|
|
112
|
+
...(detail ? { detail } : {}),
|
|
113
|
+
};
|
|
114
|
+
}
|
|
115
|
+
function pairedEvent(type) {
|
|
116
|
+
if (type === "run.started")
|
|
117
|
+
return { key: "run", phase: "started" };
|
|
118
|
+
if (type === "run.settled")
|
|
119
|
+
return { key: "run", phase: "completed" };
|
|
120
|
+
if (type === "compaction.started")
|
|
121
|
+
return { key: "compaction", phase: "started" };
|
|
122
|
+
if (type === "compaction.completed")
|
|
123
|
+
return { key: "compaction", phase: "completed" };
|
|
124
|
+
if (type === "retry.started")
|
|
125
|
+
return { key: "retry", phase: "started" };
|
|
126
|
+
if (type === "retry.completed")
|
|
127
|
+
return { key: "retry", phase: "completed" };
|
|
128
|
+
return undefined;
|
|
129
|
+
}
|
|
130
|
+
function genericPresentation(type, payload) {
|
|
131
|
+
if (type === "run.started")
|
|
132
|
+
return { kind: "run", status: "running", label: "Working on request", summary: "cowork session" };
|
|
133
|
+
if (type === "run.settled")
|
|
134
|
+
return { kind: "run", status: "succeeded", label: "Request finished", summary: "cowork session" };
|
|
135
|
+
if (type === "compaction.started") {
|
|
136
|
+
return { kind: "compaction", status: "running", label: "Compacting context", summary: compactionReason(payload) };
|
|
137
|
+
}
|
|
138
|
+
if (type === "compaction.completed") {
|
|
139
|
+
const aborted = payload["aborted"] === true || typeof payload["errorMessage"] === "string";
|
|
140
|
+
return {
|
|
141
|
+
kind: "compaction",
|
|
142
|
+
status: aborted ? "failed" : "succeeded",
|
|
143
|
+
label: aborted ? "Context compaction stopped" : "Context compacted",
|
|
144
|
+
summary: typeof payload["errorMessage"] === "string" ? compactText(redactText(payload["errorMessage"]), 140) : compactionReason(payload),
|
|
145
|
+
};
|
|
146
|
+
}
|
|
147
|
+
if (type === "retry.started") {
|
|
148
|
+
const attempt = numberValue(payload["attempt"]);
|
|
149
|
+
const maximum = numberValue(payload["maxAttempts"]);
|
|
150
|
+
return {
|
|
151
|
+
kind: "retry",
|
|
152
|
+
status: "running",
|
|
153
|
+
label: "Retrying model request",
|
|
154
|
+
summary: attempt === undefined ? "automatic retry" : `attempt ${attempt}${maximum === undefined ? "" : ` of ${maximum}`}`,
|
|
155
|
+
};
|
|
156
|
+
}
|
|
157
|
+
if (type === "retry.completed") {
|
|
158
|
+
const succeeded = payload["success"] === true;
|
|
159
|
+
return {
|
|
160
|
+
kind: "retry",
|
|
161
|
+
status: succeeded ? "succeeded" : "failed",
|
|
162
|
+
label: succeeded ? "Model retry succeeded" : "Model retry failed",
|
|
163
|
+
summary: numberValue(payload["attempt"]) === undefined ? "automatic retry" : `attempt ${numberValue(payload["attempt"])}`,
|
|
164
|
+
};
|
|
165
|
+
}
|
|
166
|
+
if (type === "runtime.error") {
|
|
167
|
+
const error = stringValue(payload["message"]) ?? stringValue(payload["error"]) ?? "runtime reported an error";
|
|
168
|
+
return { kind: "runtime", status: "failed", label: "Cowork task failed", summary: compactText(redactText(error), 140) };
|
|
169
|
+
}
|
|
170
|
+
const rootKey = type === "automation.run" ? "run"
|
|
171
|
+
: type === "agent.updated" ? "agent"
|
|
172
|
+
: type === "agent.message" ? "message"
|
|
173
|
+
: "health";
|
|
174
|
+
const record = asRecord(payload[rootKey]);
|
|
175
|
+
const rawStatus = stringValue(record["status"]);
|
|
176
|
+
const failed = rawStatus === "failed" || rawStatus === "degraded" || rawStatus === "blocked";
|
|
177
|
+
const running = rawStatus === "running" || rawStatus === "active" || rawStatus === "starting" || rawStatus === "connecting";
|
|
178
|
+
const status = failed ? "failed" : running ? "running" : "succeeded";
|
|
179
|
+
const labels = {
|
|
180
|
+
"automation.run": "Automation updated",
|
|
181
|
+
"agent.updated": "Coworker updated",
|
|
182
|
+
"agent.message": "Coworker message",
|
|
183
|
+
"mcp.health": "Integration health changed",
|
|
184
|
+
"resource.health": "Resource health changed",
|
|
185
|
+
};
|
|
186
|
+
const summary = stringValue(record["title"])
|
|
187
|
+
?? stringValue(record["name"])
|
|
188
|
+
?? stringValue(record["serverId"])
|
|
189
|
+
?? stringValue(record["key"])
|
|
190
|
+
?? stringValue(record["id"])
|
|
191
|
+
?? type.replaceAll(".", " ");
|
|
192
|
+
return {
|
|
193
|
+
kind: type,
|
|
194
|
+
status,
|
|
195
|
+
label: labels[type] ?? humanize(type),
|
|
196
|
+
summary: compactText(summary, 120),
|
|
197
|
+
...(rawStatus ? { result: rawStatus } : {}),
|
|
198
|
+
};
|
|
199
|
+
}
|
|
200
|
+
function compactionReason(payload) {
|
|
201
|
+
const reason = stringValue(payload["reason"]);
|
|
202
|
+
return reason === "token_threshold"
|
|
203
|
+
? "configured token threshold"
|
|
204
|
+
: compactText(reason ?? "conversation context", 100);
|
|
205
|
+
}
|
|
206
|
+
export function toolLabel(toolName, status) {
|
|
207
|
+
const labels = {
|
|
208
|
+
read: ["Reading file", "Read file"],
|
|
209
|
+
document: ["Reading document", "Read document"],
|
|
210
|
+
article: ["Writing article", "Wrote article"],
|
|
211
|
+
edit: ["Updating file", "Updated file"],
|
|
212
|
+
search: ["Searching workspace", "Searched workspace"],
|
|
213
|
+
shell: ["Running command", "Ran command"],
|
|
214
|
+
memory_append: ["Saving daily memory", "Saved daily memory"],
|
|
215
|
+
memory_curate: ["Curating long-term memory", "Curated long-term memory"],
|
|
216
|
+
notify: ["Sending notification", "Sent notification"],
|
|
217
|
+
schedule: ["Updating automation", "Updated automation"],
|
|
218
|
+
agent_spawn: ["Starting coworker", "Started coworker"],
|
|
219
|
+
agent_send: ["Messaging coworker", "Messaged coworker"],
|
|
220
|
+
agent_join: ["Waiting for coworker", "Coworker finished"],
|
|
221
|
+
mcp_call: ["Calling integration", "Called integration"],
|
|
222
|
+
mcp_discover: ["Connecting integration", "Connected integration"],
|
|
223
|
+
};
|
|
224
|
+
const pair = labels[toolName];
|
|
225
|
+
const completed = pair?.[1] ?? humanize(toolName);
|
|
226
|
+
if (status === "failed")
|
|
227
|
+
return `${completed} failed`;
|
|
228
|
+
return status === "running" ? (pair?.[0] ?? `Using ${humanize(toolName)}`) : completed;
|
|
229
|
+
}
|
|
230
|
+
export function activityDetailLines(activity) {
|
|
231
|
+
return [
|
|
232
|
+
`Status ${activity.status}`,
|
|
233
|
+
`Step ${activity.label}`,
|
|
234
|
+
`Target ${activity.summary}`,
|
|
235
|
+
`Tool ${activity.toolName ?? "n/a"}`,
|
|
236
|
+
`Started ${activity.ts}`,
|
|
237
|
+
...(activity.completedAt ? [`Completed ${activity.completedAt}`] : []),
|
|
238
|
+
...(activity.durationMs === undefined ? [] : [`Duration ${formatDuration(activity.durationMs)}`]),
|
|
239
|
+
...(activity.resultSummary ? [`Result ${activity.resultSummary}`] : []),
|
|
240
|
+
...(activity.detail ? ["", "Technical details (redacted and size-limited)", activity.detail] : []),
|
|
241
|
+
];
|
|
242
|
+
}
|
|
243
|
+
export function formatDuration(durationMs) {
|
|
244
|
+
if (durationMs < 1_000)
|
|
245
|
+
return `${durationMs} ms`;
|
|
246
|
+
if (durationMs < 60_000)
|
|
247
|
+
return `${(durationMs / 1_000).toFixed(durationMs < 10_000 ? 1 : 0)} s`;
|
|
248
|
+
const minutes = Math.floor(durationMs / 60_000);
|
|
249
|
+
const seconds = Math.floor((durationMs % 60_000) / 1_000);
|
|
250
|
+
return `${minutes}m ${seconds}s`;
|
|
251
|
+
}
|
|
252
|
+
function toolTarget(toolName, input) {
|
|
253
|
+
if (toolName === "article")
|
|
254
|
+
return stringValue(input["title"]) ?? stringValue(input["id"]) ?? "article";
|
|
255
|
+
if (toolName === "read" || toolName === "document" || toolName === "edit") {
|
|
256
|
+
return compactPath(stringValue(input["path"]) ?? "file");
|
|
257
|
+
}
|
|
258
|
+
if (toolName === "search") {
|
|
259
|
+
const query = stringValue(input["query"]);
|
|
260
|
+
const path = stringValue(input["path"]);
|
|
261
|
+
return [query ? `“${compactText(query, 72)}”` : "workspace", path ? `in ${compactPath(path)}` : ""].filter(Boolean).join(" ");
|
|
262
|
+
}
|
|
263
|
+
if (toolName === "shell")
|
|
264
|
+
return compactText(redactText(stringValue(input["command"]) ?? "command"), 110);
|
|
265
|
+
if (toolName === "memory_append")
|
|
266
|
+
return "durable daily note";
|
|
267
|
+
if (toolName === "memory_curate") {
|
|
268
|
+
const entries = Array.isArray(input["entries"]) ? input["entries"].length : undefined;
|
|
269
|
+
return entries === undefined ? "MEMORY.md" : `${entries} long-term ${entries === 1 ? "fact" : "facts"}`;
|
|
270
|
+
}
|
|
271
|
+
if (toolName === "agent_spawn")
|
|
272
|
+
return compactText(stringValue(input["objective"]) ?? "bounded task", 90);
|
|
273
|
+
if (toolName === "agent_send" || toolName === "agent_join")
|
|
274
|
+
return stringValue(input["agentId"]) ?? "coworker";
|
|
275
|
+
if (toolName === "mcp_call") {
|
|
276
|
+
return [stringValue(input["serverId"]), stringValue(input["toolName"])].filter(Boolean).join(" / ") || "integration";
|
|
277
|
+
}
|
|
278
|
+
return "work step";
|
|
279
|
+
}
|
|
280
|
+
function toolResultSummary(toolName, result, failed) {
|
|
281
|
+
const root = asRecord(result);
|
|
282
|
+
const details = asRecord(root["details"]);
|
|
283
|
+
if (failed)
|
|
284
|
+
return compactText(redactText(firstText(root) ?? "Tool reported an error"), 140);
|
|
285
|
+
const bytes = numberValue(details["bytes"]);
|
|
286
|
+
const returnedLines = numberValue(details["returnedLines"]);
|
|
287
|
+
const added = numberValue(details["added"]);
|
|
288
|
+
const capturedBytes = numberValue(details["capturedBytes"]);
|
|
289
|
+
if (toolName === "edit" && bytes !== undefined)
|
|
290
|
+
return `${formatBytes(bytes)} written`;
|
|
291
|
+
if (toolName === "read" && returnedLines !== undefined)
|
|
292
|
+
return `${returnedLines} lines read`;
|
|
293
|
+
if (toolName === "memory_curate" && added !== undefined)
|
|
294
|
+
return `${added} ${added === 1 ? "fact" : "facts"} added`;
|
|
295
|
+
if (toolName === "shell" && capturedBytes !== undefined)
|
|
296
|
+
return `${formatBytes(capturedBytes)} output captured`;
|
|
297
|
+
const text = firstText(root);
|
|
298
|
+
return text ? compactText(redactText(text), 120) : "Completed";
|
|
299
|
+
}
|
|
300
|
+
function activityDetail(value, previous) {
|
|
301
|
+
if (value === undefined)
|
|
302
|
+
return previous;
|
|
303
|
+
try {
|
|
304
|
+
const text = JSON.stringify(redactValue(value, 0), null, 2);
|
|
305
|
+
const limited = text.length > 8_000 ? `${text.slice(0, 8_000)}\n… details folded at 8 KB` : text;
|
|
306
|
+
return previous && previous !== limited ? `${previous}\n\nLatest update\n${limited}` : limited;
|
|
307
|
+
}
|
|
308
|
+
catch {
|
|
309
|
+
return previous;
|
|
310
|
+
}
|
|
311
|
+
}
|
|
312
|
+
/** Tool inputs shown in the transcript use the activity panel's redaction policy. */
|
|
313
|
+
export function toolInputText(value) {
|
|
314
|
+
return JSON.stringify(redactValue(value, 0), null, 2) ?? "{}";
|
|
315
|
+
}
|
|
316
|
+
function redactValue(value, depth) {
|
|
317
|
+
if (depth > 8)
|
|
318
|
+
return "[depth limited]";
|
|
319
|
+
if (typeof value === "string")
|
|
320
|
+
return redactText(value.length > 4_000 ? `${value.slice(0, 4_000)}…` : value);
|
|
321
|
+
if (Array.isArray(value))
|
|
322
|
+
return value.slice(0, 50).map((item) => redactValue(item, depth + 1));
|
|
323
|
+
if (!isRecord(value))
|
|
324
|
+
return value;
|
|
325
|
+
const result = {};
|
|
326
|
+
for (const [key, child] of Object.entries(value).slice(0, 100)) {
|
|
327
|
+
result[key] = /api.?key|token|password|secret|authorization|cookie/i.test(key)
|
|
328
|
+
? "[redacted]"
|
|
329
|
+
: redactValue(child, depth + 1);
|
|
330
|
+
}
|
|
331
|
+
return result;
|
|
332
|
+
}
|
|
333
|
+
function redactText(value) {
|
|
334
|
+
return value
|
|
335
|
+
.replace(/((?:api[_-]?key|token|password|secret)\s*[:=]\s*)\S+/gi, "$1[redacted]")
|
|
336
|
+
.replace(/\b(?:sk|ds)-[A-Za-z0-9_-]{12,}\b/g, "[redacted credential]");
|
|
337
|
+
}
|
|
338
|
+
function firstText(result) {
|
|
339
|
+
const content = result["content"];
|
|
340
|
+
if (!Array.isArray(content))
|
|
341
|
+
return undefined;
|
|
342
|
+
for (const block of content) {
|
|
343
|
+
const record = asRecord(block);
|
|
344
|
+
if (typeof record["text"] === "string")
|
|
345
|
+
return record["text"];
|
|
346
|
+
}
|
|
347
|
+
return undefined;
|
|
348
|
+
}
|
|
349
|
+
function elapsedMs(start, end) {
|
|
350
|
+
const duration = new Date(end).getTime() - new Date(start).getTime();
|
|
351
|
+
return Number.isFinite(duration) ? Math.max(0, duration) : 0;
|
|
352
|
+
}
|
|
353
|
+
function compactPath(value) {
|
|
354
|
+
const normalized = value.replaceAll("\\", "/");
|
|
355
|
+
const parts = normalized.split("/").filter(Boolean);
|
|
356
|
+
return parts.length <= 3 ? normalized : `…/${parts.slice(-3).join("/")}`;
|
|
357
|
+
}
|
|
358
|
+
function compactText(value, maximum) {
|
|
359
|
+
const normalized = value.replace(/\s+/g, " ").trim();
|
|
360
|
+
return normalized.length <= maximum ? normalized : `${normalized.slice(0, Math.max(1, maximum - 1))}…`;
|
|
361
|
+
}
|
|
362
|
+
function formatBytes(value) {
|
|
363
|
+
if (value < 1_024)
|
|
364
|
+
return `${value} B`;
|
|
365
|
+
if (value < 1_048_576)
|
|
366
|
+
return `${(value / 1_024).toFixed(1)} KB`;
|
|
367
|
+
return `${(value / 1_048_576).toFixed(1)} MB`;
|
|
368
|
+
}
|
|
369
|
+
function humanize(value) {
|
|
370
|
+
return value.replaceAll("__", " / ").replaceAll("_", " ").replaceAll(".", " ");
|
|
371
|
+
}
|
|
372
|
+
function stringValue(value) {
|
|
373
|
+
return typeof value === "string" && value.trim() ? value.trim() : undefined;
|
|
374
|
+
}
|
|
375
|
+
function numberValue(value) {
|
|
376
|
+
return typeof value === "number" && Number.isFinite(value) ? value : undefined;
|
|
377
|
+
}
|
|
378
|
+
function asRecord(value) {
|
|
379
|
+
return isRecord(value) ? value : {};
|
|
380
|
+
}
|
|
381
|
+
function isRecord(value) {
|
|
382
|
+
return typeof value === "object" && value !== null && !Array.isArray(value);
|
|
383
|
+
}
|
|
384
|
+
//# sourceMappingURL=activity.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"activity.js","sourceRoot":"","sources":["../../../src/ui/shared/activity.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
/** One `session.message` response: a window onto a single message's text. */
|
|
2
|
+
export interface MessageSlice {
|
|
3
|
+
offset: number;
|
|
4
|
+
length: number;
|
|
5
|
+
text: string;
|
|
6
|
+
}
|
|
7
|
+
/**
|
|
8
|
+
* Characters one slice asks for. It matches the daemon's per-string publishing
|
|
9
|
+
* ceiling, so a slice is never cut a second time on its way back.
|
|
10
|
+
*/
|
|
11
|
+
export declare const FULL_MESSAGE_SLICE_CHARS = 65536;
|
|
12
|
+
/**
|
|
13
|
+
* Reassembles one message from slices, so a client can read text the publishing
|
|
14
|
+
* ceiling had to cut without raising that ceiling for every message.
|
|
15
|
+
*
|
|
16
|
+
* Returns `undefined` when the slices do not line up — a message edited or
|
|
17
|
+
* renumbered mid-read would otherwise be spliced together from two different
|
|
18
|
+
* versions of itself. The caller decides what to tell the reader.
|
|
19
|
+
*/
|
|
20
|
+
export declare function readFullMessage(fetchSlice: (offset: number, limit: number) => Promise<unknown>): Promise<string | undefined>;
|
|
21
|
+
export declare function isMessageSlice(value: unknown): value is MessageSlice;
|
|
22
|
+
//# sourceMappingURL=full-message.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"full-message.d.ts","sourceRoot":"","sources":["../../../src/ui/shared/full-message.ts"],"names":[],"mappings":"AAEA,6EAA6E;AAC7E,MAAM,WAAW,YAAY;IAC3B,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;CACd;AAED;;;GAGG;AACH,eAAO,MAAM,wBAAwB,QAA6B,CAAC;AAKnE;;;;;;;GAOG;AACH,wBAAsB,eAAe,CACnC,UAAU,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,KAAK,OAAO,CAAC,OAAO,CAAC,GAC9D,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAW7B;AAED,wBAAgB,cAAc,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,YAAY,CAMpE"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import { MAX_PUBLISHED_STRING_CHARS } from "../../protocol/limits.js";
|
|
2
|
+
/**
|
|
3
|
+
* Characters one slice asks for. It matches the daemon's per-string publishing
|
|
4
|
+
* ceiling, so a slice is never cut a second time on its way back.
|
|
5
|
+
*/
|
|
6
|
+
export const FULL_MESSAGE_SLICE_CHARS = MAX_PUBLISHED_STRING_CHARS;
|
|
7
|
+
/** Guards against paging forever if a peer keeps returning empty slices. */
|
|
8
|
+
const MAX_SLICE_REQUESTS = 64;
|
|
9
|
+
/**
|
|
10
|
+
* Reassembles one message from slices, so a client can read text the publishing
|
|
11
|
+
* ceiling had to cut without raising that ceiling for every message.
|
|
12
|
+
*
|
|
13
|
+
* Returns `undefined` when the slices do not line up — a message edited or
|
|
14
|
+
* renumbered mid-read would otherwise be spliced together from two different
|
|
15
|
+
* versions of itself. The caller decides what to tell the reader.
|
|
16
|
+
*/
|
|
17
|
+
export async function readFullMessage(fetchSlice) {
|
|
18
|
+
let restored = "";
|
|
19
|
+
for (let request = 0; request < MAX_SLICE_REQUESTS; request += 1) {
|
|
20
|
+
const slice = await fetchSlice(restored.length, FULL_MESSAGE_SLICE_CHARS);
|
|
21
|
+
if (!isMessageSlice(slice) || slice.offset !== restored.length)
|
|
22
|
+
return undefined;
|
|
23
|
+
restored += slice.text;
|
|
24
|
+
if (restored.length >= slice.length)
|
|
25
|
+
return restored;
|
|
26
|
+
// No progress and still short of the total: the rest is unreachable.
|
|
27
|
+
if (slice.text.length === 0)
|
|
28
|
+
return undefined;
|
|
29
|
+
}
|
|
30
|
+
return undefined;
|
|
31
|
+
}
|
|
32
|
+
export function isMessageSlice(value) {
|
|
33
|
+
if (typeof value !== "object" || value === null)
|
|
34
|
+
return false;
|
|
35
|
+
const slice = value;
|
|
36
|
+
return typeof slice["offset"] === "number"
|
|
37
|
+
&& typeof slice["length"] === "number"
|
|
38
|
+
&& typeof slice["text"] === "string";
|
|
39
|
+
}
|
|
40
|
+
//# sourceMappingURL=full-message.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"full-message.js","sourceRoot":"","sources":["../../../src/ui/shared/full-message.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,0BAA0B,EAAE,MAAM,0BAA0B,CAAC;AAStE;;;GAGG;AACH,MAAM,CAAC,MAAM,wBAAwB,GAAG,0BAA0B,CAAC;AAEnE,4EAA4E;AAC5E,MAAM,kBAAkB,GAAG,EAAE,CAAC;AAE9B;;;;;;;GAOG;AACH,MAAM,CAAC,KAAK,UAAU,eAAe,CACnC,UAA+D;IAE/D,IAAI,QAAQ,GAAG,EAAE,CAAC;IAClB,KAAK,IAAI,OAAO,GAAG,CAAC,EAAE,OAAO,GAAG,kBAAkB,EAAE,OAAO,IAAI,CAAC,EAAE,CAAC;QACjE,MAAM,KAAK,GAAG,MAAM,UAAU,CAAC,QAAQ,CAAC,MAAM,EAAE,wBAAwB,CAAC,CAAC;QAC1E,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,MAAM,KAAK,QAAQ,CAAC,MAAM;YAAE,OAAO,SAAS,CAAC;QACjF,QAAQ,IAAI,KAAK,CAAC,IAAI,CAAC;QACvB,IAAI,QAAQ,CAAC,MAAM,IAAI,KAAK,CAAC,MAAM;YAAE,OAAO,QAAQ,CAAC;QACrD,qEAAqE;QACrE,IAAI,KAAK,CAAC,IAAI,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,SAAS,CAAC;IAChD,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,KAAc;IAC3C,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI;QAAE,OAAO,KAAK,CAAC;IAC9D,MAAM,KAAK,GAAG,KAAgC,CAAC;IAC/C,OAAO,OAAO,KAAK,CAAC,QAAQ,CAAC,KAAK,QAAQ;WACrC,OAAO,KAAK,CAAC,QAAQ,CAAC,KAAK,QAAQ;WACnC,OAAO,KAAK,CAAC,MAAM,CAAC,KAAK,QAAQ,CAAC;AACzC,CAAC"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
/** Find local paths in ordinary assistant prose, outside Markdown code spans. */
|
|
2
|
+
export type LocalTextPart = {
|
|
3
|
+
text: string;
|
|
4
|
+
href?: string;
|
|
5
|
+
};
|
|
6
|
+
export declare function localTextParts(value: string): LocalTextPart[];
|
|
7
|
+
//# sourceMappingURL=local-links.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"local-links.d.ts","sourceRoot":"","sources":["../../../src/ui/shared/local-links.ts"],"names":[],"mappings":"AAAA,iFAAiF;AACjF,MAAM,MAAM,aAAa,GAAG;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC;AAK5D,wBAAgB,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,aAAa,EAAE,CAgB7D"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
const LOCAL_TARGET = /(?:file:\/\/\/|\/)[^\s<>"'`,。;:!?]+/g;
|
|
2
|
+
const END_PUNCTUATION = /[.,;:!?,。;:!?)\]})]+$/;
|
|
3
|
+
export function localTextParts(value) {
|
|
4
|
+
const parts = [];
|
|
5
|
+
let cursor = 0;
|
|
6
|
+
for (const match of value.matchAll(LOCAL_TARGET)) {
|
|
7
|
+
const start = match.index;
|
|
8
|
+
const previous = value[start - 1];
|
|
9
|
+
if (previous && !/[\s([{(]/.test(previous))
|
|
10
|
+
continue;
|
|
11
|
+
const candidate = match[0];
|
|
12
|
+
const href = candidate.replace(END_PUNCTUATION, "");
|
|
13
|
+
if (href.length < 2 || href === "file:///")
|
|
14
|
+
continue;
|
|
15
|
+
if (start > cursor)
|
|
16
|
+
parts.push({ text: value.slice(cursor, start) });
|
|
17
|
+
parts.push({ text: href, href });
|
|
18
|
+
cursor = start + href.length;
|
|
19
|
+
}
|
|
20
|
+
if (cursor < value.length)
|
|
21
|
+
parts.push({ text: value.slice(cursor) });
|
|
22
|
+
return parts;
|
|
23
|
+
}
|
|
24
|
+
//# sourceMappingURL=local-links.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"local-links.js","sourceRoot":"","sources":["../../../src/ui/shared/local-links.ts"],"names":[],"mappings":"AAGA,MAAM,YAAY,GAAG,sCAAsC,CAAC;AAC5D,MAAM,eAAe,GAAG,uBAAuB,CAAC;AAEhD,MAAM,UAAU,cAAc,CAAC,KAAa;IAC1C,MAAM,KAAK,GAAoB,EAAE,CAAC;IAClC,IAAI,MAAM,GAAG,CAAC,CAAC;IACf,KAAK,MAAM,KAAK,IAAI,KAAK,CAAC,QAAQ,CAAC,YAAY,CAAC,EAAE,CAAC;QACjD,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC;QAC1B,MAAM,QAAQ,GAAG,KAAK,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC;QAClC,IAAI,QAAQ,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,QAAQ,CAAC;YAAE,SAAS;QACrD,MAAM,SAAS,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;QAC3B,MAAM,IAAI,GAAG,SAAS,CAAC,OAAO,CAAC,eAAe,EAAE,EAAE,CAAC,CAAC;QACpD,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,IAAI,IAAI,KAAK,UAAU;YAAE,SAAS;QACrD,IAAI,KAAK,GAAG,MAAM;YAAE,KAAK,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,KAAK,CAAC,KAAK,CAAC,MAAM,EAAE,KAAK,CAAC,EAAE,CAAC,CAAC;QACrE,KAAK,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;QACjC,MAAM,GAAG,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC;IAC/B,CAAC;IACD,IAAI,MAAM,GAAG,KAAK,CAAC,MAAM;QAAE,KAAK,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;IACrE,OAAO,KAAK,CAAC;AACf,CAAC"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* What a streaming markdown message can keep between two renders.
|
|
3
|
+
*
|
|
4
|
+
* A reply is re-parsed from scratch on every token, and rebuilding the whole
|
|
5
|
+
* body each time throws away the DOM the reader may be selecting inside. Almost
|
|
6
|
+
* every token only extends the last block, so this reduces "what changed" to a
|
|
7
|
+
* block count: everything before it is identical markup and can stay on screen.
|
|
8
|
+
*
|
|
9
|
+
* No DOM here, so both the comparison and its reasoning are testable.
|
|
10
|
+
*/
|
|
11
|
+
import { type MarkdownBlock } from "./markdown.js";
|
|
12
|
+
/**
|
|
13
|
+
* A stable identity for each block, in document order.
|
|
14
|
+
*
|
|
15
|
+
* Two blocks with the same key render to the same markup. The key comes from
|
|
16
|
+
* the parsed block rather than the raw text, so a change that does not survive
|
|
17
|
+
* parsing — trailing spaces, a half-typed emphasis marker still being read as
|
|
18
|
+
* literal text — does not needlessly invalidate a block.
|
|
19
|
+
*/
|
|
20
|
+
export declare function blockKeysOf(blocks: readonly MarkdownBlock[]): string[];
|
|
21
|
+
/** Parses `source` and returns its block keys. For callers that do not need the blocks. */
|
|
22
|
+
export declare function markdownBlockKeys(source: string): string[];
|
|
23
|
+
/** How many leading blocks two renders share, and therefore how many can be left alone. */
|
|
24
|
+
export declare function commonBlockPrefix(previous: readonly string[], next: readonly string[]): number;
|
|
25
|
+
//# sourceMappingURL=markdown-stream.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"markdown-stream.d.ts","sourceRoot":"","sources":["../../../src/ui/shared/markdown-stream.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,EAAiB,KAAK,aAAa,EAAE,MAAM,eAAe,CAAC;AAElE;;;;;;;GAOG;AACH,wBAAgB,WAAW,CAAC,MAAM,EAAE,SAAS,aAAa,EAAE,GAAG,MAAM,EAAE,CAEtE;AAED,2FAA2F;AAC3F,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE,CAE1D;AAED,2FAA2F;AAC3F,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,SAAS,MAAM,EAAE,EAAE,IAAI,EAAE,SAAS,MAAM,EAAE,GAAG,MAAM,CAK9F"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* What a streaming markdown message can keep between two renders.
|
|
3
|
+
*
|
|
4
|
+
* A reply is re-parsed from scratch on every token, and rebuilding the whole
|
|
5
|
+
* body each time throws away the DOM the reader may be selecting inside. Almost
|
|
6
|
+
* every token only extends the last block, so this reduces "what changed" to a
|
|
7
|
+
* block count: everything before it is identical markup and can stay on screen.
|
|
8
|
+
*
|
|
9
|
+
* No DOM here, so both the comparison and its reasoning are testable.
|
|
10
|
+
*/
|
|
11
|
+
import { parseMarkdown } from "./markdown.js";
|
|
12
|
+
/**
|
|
13
|
+
* A stable identity for each block, in document order.
|
|
14
|
+
*
|
|
15
|
+
* Two blocks with the same key render to the same markup. The key comes from
|
|
16
|
+
* the parsed block rather than the raw text, so a change that does not survive
|
|
17
|
+
* parsing — trailing spaces, a half-typed emphasis marker still being read as
|
|
18
|
+
* literal text — does not needlessly invalidate a block.
|
|
19
|
+
*/
|
|
20
|
+
export function blockKeysOf(blocks) {
|
|
21
|
+
return blocks.map((block) => JSON.stringify(block));
|
|
22
|
+
}
|
|
23
|
+
/** Parses `source` and returns its block keys. For callers that do not need the blocks. */
|
|
24
|
+
export function markdownBlockKeys(source) {
|
|
25
|
+
return blockKeysOf(parseMarkdown(source));
|
|
26
|
+
}
|
|
27
|
+
/** How many leading blocks two renders share, and therefore how many can be left alone. */
|
|
28
|
+
export function commonBlockPrefix(previous, next) {
|
|
29
|
+
const limit = Math.min(previous.length, next.length);
|
|
30
|
+
let shared = 0;
|
|
31
|
+
while (shared < limit && previous[shared] === next[shared])
|
|
32
|
+
shared += 1;
|
|
33
|
+
return shared;
|
|
34
|
+
}
|
|
35
|
+
//# sourceMappingURL=markdown-stream.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"markdown-stream.js","sourceRoot":"","sources":["../../../src/ui/shared/markdown-stream.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,EAAE,aAAa,EAAsB,MAAM,eAAe,CAAC;AAElE;;;;;;;GAOG;AACH,MAAM,UAAU,WAAW,CAAC,MAAgC;IAC1D,OAAO,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC;AACtD,CAAC;AAED,2FAA2F;AAC3F,MAAM,UAAU,iBAAiB,CAAC,MAAc;IAC9C,OAAO,WAAW,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC,CAAC;AAC5C,CAAC;AAED,2FAA2F;AAC3F,MAAM,UAAU,iBAAiB,CAAC,QAA2B,EAAE,IAAuB;IACpF,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;IACrD,IAAI,MAAM,GAAG,CAAC,CAAC;IACf,OAAO,MAAM,GAAG,KAAK,IAAI,QAAQ,CAAC,MAAM,CAAC,KAAK,IAAI,CAAC,MAAM,CAAC;QAAE,MAAM,IAAI,CAAC,CAAC;IACxE,OAAO,MAAM,CAAC;AAChB,CAAC"}
|