p-spore 0.1.4 → 0.1.43
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/LICENSE +21 -0
- package/README.md +242 -67
- 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 +107 -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 +1799 -152
- 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 +33 -0
- package/dist/desktop/renderer/store.d.ts.map +1 -1
- package/dist/desktop/renderer/store.js +92 -19
- package/dist/desktop/renderer/store.js.map +1 -1
- package/dist/desktop/renderer/styles.css +928 -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/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 +22 -3
- 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 +2 -0
- package/dist/ui/shared/activity.d.ts.map +1 -1
- package/dist/ui/shared/activity.js +18 -4
- package/dist/ui/shared/activity.js.map +1 -1
- 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 +8 -3
- package/dist/ui/tui/commands.js.map +1 -1
- package/dist/ui/tui/store.d.ts +22 -1
- package/dist/ui/tui/store.d.ts.map +1 -1
- package/dist/ui/tui/store.js +50 -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 +231 -31
- package/dist/ui/tui/tui-app.js.map +1 -1
- package/dist/ui/tui/view.d.ts +7 -0
- package/dist/ui/tui/view.d.ts.map +1 -1
- package/dist/ui/tui/view.js +161 -57
- 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
|
@@ -2,7 +2,25 @@ import { randomUUID } from "node:crypto";
|
|
|
2
2
|
import { chmod, lstat, unlink } from "node:fs/promises";
|
|
3
3
|
import { createServer } from "node:net";
|
|
4
4
|
import { CommandError } from "../protocol/errors.js";
|
|
5
|
+
import { boundPublishedValue, measurePublishedValue } from "../protocol/limits.js";
|
|
6
|
+
import { DEFAULT_MAX_SERVER_MESSAGE_BYTES, encodeServerFrame, SERVER_FRAME_CHUNKS_CAPABILITY, } from "../protocol/server-frame-codec.js";
|
|
5
7
|
import { decodeClientFrame, DEFAULT_MAX_FRAME_BYTES, encodeFrame, PROTOCOL_VERSION, ProtocolError, toEventEnvelope, } from "../protocol/schema.js";
|
|
8
|
+
/**
|
|
9
|
+
* Long agent runs push far more through a connection than an idle session does,
|
|
10
|
+
* and a client that is busy rendering can legitimately fall a few megabytes
|
|
11
|
+
* behind. Dropping it at that point is what surfaced as "lost connection" in
|
|
12
|
+
* the middle of a task, so the ceiling is generous enough that only a client
|
|
13
|
+
* which has genuinely stopped reading reaches it.
|
|
14
|
+
*/
|
|
15
|
+
const DEFAULT_MAX_OUTGOING_BYTES = 64 * 1_048_576;
|
|
16
|
+
/**
|
|
17
|
+
* Durable events carry session snapshots, so a replay window counted only in
|
|
18
|
+
* events retains one transcript copy per entry — hundreds of megabytes over a
|
|
19
|
+
* long run. A reconnecting client whose cursor falls outside the window simply
|
|
20
|
+
* takes the authoritative snapshot from the handshake instead, so trading
|
|
21
|
+
* replay depth for bounded memory costs nothing but a little extra traffic.
|
|
22
|
+
*/
|
|
23
|
+
const DEFAULT_MAX_REPLAY_BYTES = 16 * 1_048_576;
|
|
6
24
|
export class LocalGateway {
|
|
7
25
|
#socketPath;
|
|
8
26
|
#instanceId;
|
|
@@ -13,9 +31,14 @@ export class LocalGateway {
|
|
|
13
31
|
#commandCacheCapacity;
|
|
14
32
|
#maxFrameBytes;
|
|
15
33
|
#maxPendingBytes;
|
|
34
|
+
#maxOutgoingBytes;
|
|
35
|
+
#maxServerMessageBytes;
|
|
36
|
+
#maxReplayBytes;
|
|
16
37
|
#idFactory;
|
|
38
|
+
#onWarning;
|
|
17
39
|
#connections = new Set();
|
|
18
40
|
#replay = [];
|
|
41
|
+
#replayBytes = 0;
|
|
19
42
|
#commandCache = new Map();
|
|
20
43
|
#server;
|
|
21
44
|
#seq = 0;
|
|
@@ -29,7 +52,11 @@ export class LocalGateway {
|
|
|
29
52
|
this.#commandCacheCapacity = options.commandCacheCapacity ?? 2_048;
|
|
30
53
|
this.#maxFrameBytes = options.maxFrameBytes ?? DEFAULT_MAX_FRAME_BYTES;
|
|
31
54
|
this.#maxPendingBytes = options.maxPendingBytes ?? this.#maxFrameBytes * 2;
|
|
55
|
+
this.#maxOutgoingBytes = options.maxOutgoingBytes ?? DEFAULT_MAX_OUTGOING_BYTES;
|
|
56
|
+
this.#maxServerMessageBytes = options.maxServerMessageBytes ?? DEFAULT_MAX_SERVER_MESSAGE_BYTES;
|
|
57
|
+
this.#maxReplayBytes = options.maxReplayBytes ?? DEFAULT_MAX_REPLAY_BYTES;
|
|
32
58
|
this.#idFactory = options.idFactory ?? randomUUID;
|
|
59
|
+
this.#onWarning = options.onWarning ?? (() => undefined);
|
|
33
60
|
}
|
|
34
61
|
get latestSeq() {
|
|
35
62
|
return this.#seq;
|
|
@@ -63,17 +90,19 @@ export class LocalGateway {
|
|
|
63
90
|
}
|
|
64
91
|
}
|
|
65
92
|
publish(event) {
|
|
66
|
-
const
|
|
93
|
+
const bounded = measurePublishedValue(event.payload);
|
|
94
|
+
const envelope = toEventEnvelope({ ...event, payload: bounded.value }, this.#streamId, ++this.#seq);
|
|
67
95
|
if (event.durable) {
|
|
68
|
-
this.#replay.push(envelope);
|
|
69
|
-
|
|
70
|
-
|
|
96
|
+
this.#replay.push({ envelope, cost: bounded.cost });
|
|
97
|
+
this.#replayBytes += bounded.cost;
|
|
98
|
+
while (this.#replay.length > this.#replayCapacity
|
|
99
|
+
|| (this.#replayBytes > this.#maxReplayBytes && this.#replay.length > 1)) {
|
|
100
|
+
this.#replayBytes -= this.#replay.shift()?.cost ?? 0;
|
|
101
|
+
}
|
|
71
102
|
}
|
|
72
103
|
for (const connection of this.#connections) {
|
|
73
104
|
if (!connection.authenticated)
|
|
74
105
|
continue;
|
|
75
|
-
if (!event.durable && connection.socket.writableNeedDrain)
|
|
76
|
-
continue;
|
|
77
106
|
this.#write(connection, envelope);
|
|
78
107
|
}
|
|
79
108
|
return envelope;
|
|
@@ -103,8 +132,11 @@ export class LocalGateway {
|
|
|
103
132
|
authenticated: false,
|
|
104
133
|
clientId: undefined,
|
|
105
134
|
pending: Buffer.alloc(0),
|
|
135
|
+
scanned: 0,
|
|
106
136
|
processing: Promise.resolve(),
|
|
137
|
+
supportsServerFrameChunks: false,
|
|
107
138
|
failed: false,
|
|
139
|
+
skippedEvents: 0,
|
|
108
140
|
};
|
|
109
141
|
this.#connections.add(connection);
|
|
110
142
|
socket.on("data", (chunk) => this.#receive(connection, chunk));
|
|
@@ -115,20 +147,26 @@ export class LocalGateway {
|
|
|
115
147
|
if (connection.failed)
|
|
116
148
|
return;
|
|
117
149
|
connection.pending = Buffer.concat([connection.pending, chunk]);
|
|
118
|
-
if (connection.pending.byteLength > this.#maxPendingBytes) {
|
|
119
|
-
this.#protocolFailure(connection, new ProtocolError("pending_bytes_exceeded", "Connection input buffer exceeded"));
|
|
120
|
-
return;
|
|
121
|
-
}
|
|
122
150
|
for (;;) {
|
|
123
|
-
|
|
124
|
-
|
|
151
|
+
// Rescanning from byte zero on every read makes a large frame that
|
|
152
|
+
// arrives in many small reads quadratic, which is exactly the shape of a
|
|
153
|
+
// long run's traffic. Only the bytes that just arrived need scanning.
|
|
154
|
+
const delimiter = connection.pending.indexOf(0x0a, connection.scanned);
|
|
155
|
+
if (delimiter < 0) {
|
|
156
|
+
connection.scanned = connection.pending.byteLength;
|
|
125
157
|
break;
|
|
158
|
+
}
|
|
126
159
|
const line = connection.pending.subarray(0, delimiter);
|
|
127
160
|
connection.pending = connection.pending.subarray(delimiter + 1);
|
|
161
|
+
connection.scanned = 0;
|
|
128
162
|
connection.processing = connection.processing
|
|
129
163
|
.then(async () => this.#handleFrame(connection, line))
|
|
130
164
|
.catch((error) => this.#protocolFailure(connection, normalizeProtocolError(error)));
|
|
131
165
|
}
|
|
166
|
+
if (connection.pending.byteLength > this.#maxPendingBytes) {
|
|
167
|
+
this.#protocolFailure(connection, new ProtocolError("pending_bytes_exceeded", "Connection input buffer exceeded"));
|
|
168
|
+
return;
|
|
169
|
+
}
|
|
132
170
|
if (connection.pending.byteLength > this.#maxFrameBytes) {
|
|
133
171
|
this.#protocolFailure(connection, new ProtocolError("frame_too_large", "Protocol frame exceeded limit"));
|
|
134
172
|
}
|
|
@@ -153,8 +191,9 @@ export class LocalGateway {
|
|
|
153
191
|
#hello(connection, hello) {
|
|
154
192
|
connection.authenticated = true;
|
|
155
193
|
connection.clientId = hello.clientId;
|
|
194
|
+
connection.supportsServerFrameChunks = hello.capabilities.includes(SERVER_FRAME_CHUNKS_CAPABILITY);
|
|
156
195
|
const cursor = hello.cursors[this.#streamId] ?? 0;
|
|
157
|
-
const oldest = this.#replay[0]?.seq ?? this.#seq + 1;
|
|
196
|
+
const oldest = this.#replay[0]?.envelope.seq ?? this.#seq + 1;
|
|
158
197
|
const acknowledgement = {
|
|
159
198
|
v: PROTOCOL_VERSION,
|
|
160
199
|
kind: "hello_ack",
|
|
@@ -164,13 +203,16 @@ export class LocalGateway {
|
|
|
164
203
|
streamId: this.#streamId,
|
|
165
204
|
latestSeq: this.#seq,
|
|
166
205
|
replayFromSeq: oldest,
|
|
167
|
-
snapshot:
|
|
206
|
+
// An unbounded snapshot is the one frame a client can never skip: it
|
|
207
|
+
// rides on every reconnect, so a client that rejects it once rejects it
|
|
208
|
+
// forever. Bounding it here keeps a huge session recoverable.
|
|
209
|
+
snapshot: boundPublishedValue(this.#snapshot()),
|
|
168
210
|
};
|
|
169
211
|
this.#write(connection, acknowledgement);
|
|
170
212
|
if (cursor >= oldest - 1) {
|
|
171
|
-
for (const
|
|
172
|
-
if (
|
|
173
|
-
this.#write(connection,
|
|
213
|
+
for (const entry of this.#replay) {
|
|
214
|
+
if (entry.envelope.seq > cursor)
|
|
215
|
+
this.#write(connection, entry.envelope);
|
|
174
216
|
}
|
|
175
217
|
}
|
|
176
218
|
}
|
|
@@ -195,7 +237,7 @@ export class LocalGateway {
|
|
|
195
237
|
id: this.#idFactory(),
|
|
196
238
|
commandId: command.id,
|
|
197
239
|
ok: true,
|
|
198
|
-
payload,
|
|
240
|
+
payload: boundPublishedValue(payload),
|
|
199
241
|
};
|
|
200
242
|
}
|
|
201
243
|
catch (error) {
|
|
@@ -227,11 +269,53 @@ export class LocalGateway {
|
|
|
227
269
|
#write(connection, frame) {
|
|
228
270
|
if (connection.socket.destroyed)
|
|
229
271
|
return;
|
|
230
|
-
|
|
231
|
-
|
|
272
|
+
const transient = frame.kind === "event" && !frame.durable;
|
|
273
|
+
// Transient frames are droppable by design; a client that cannot keep up sheds
|
|
274
|
+
// them rather than being torn down, which is what used to make long runs
|
|
275
|
+
// flap between connected and reconnecting.
|
|
276
|
+
if (transient && connection.socket.writableNeedDrain) {
|
|
277
|
+
connection.skippedEvents += 1;
|
|
278
|
+
return;
|
|
279
|
+
}
|
|
280
|
+
if (connection.socket.writableLength > this.#maxOutgoingBytes) {
|
|
281
|
+
if (transient) {
|
|
282
|
+
connection.skippedEvents += 1;
|
|
283
|
+
return;
|
|
284
|
+
}
|
|
285
|
+
this.#drop(connection, `client ${connection.clientId ?? "unknown"} stopped reading with `
|
|
286
|
+
+ `${connection.socket.writableLength} bytes queued`);
|
|
287
|
+
return;
|
|
288
|
+
}
|
|
289
|
+
// Only an event can carry the pending skip count forward, so hello and
|
|
290
|
+
// response frames must leave it untouched: clearing it there would strand
|
|
291
|
+
// the client behind the sequence with nothing to explain the jump.
|
|
292
|
+
const carriesSkip = frame.kind === "event" && connection.skippedEvents > 0;
|
|
293
|
+
const outgoing = carriesSkip ? { ...frame, skipped: connection.skippedEvents } : frame;
|
|
294
|
+
let encoded;
|
|
295
|
+
try {
|
|
296
|
+
encoded = connection.supportsServerFrameChunks
|
|
297
|
+
? encodeServerFrame(outgoing, {
|
|
298
|
+
maxFrameBytes: this.#maxFrameBytes,
|
|
299
|
+
maxMessageBytes: this.#maxServerMessageBytes,
|
|
300
|
+
idFactory: this.#idFactory,
|
|
301
|
+
})
|
|
302
|
+
: [encodeFrame(outgoing)];
|
|
303
|
+
}
|
|
304
|
+
catch (error) {
|
|
305
|
+
// Encoding is per connection, but a failure here means this frame can
|
|
306
|
+
// never reach this client. Dropping only the connection keeps the rest of
|
|
307
|
+
// the broadcast — and the daemon — intact.
|
|
308
|
+
this.#drop(connection, `frame ${frame.kind} could not be encoded: ${toError(error).message}`);
|
|
232
309
|
return;
|
|
233
310
|
}
|
|
234
|
-
|
|
311
|
+
for (const chunk of encoded)
|
|
312
|
+
connection.socket.write(chunk);
|
|
313
|
+
if (frame.kind === "event")
|
|
314
|
+
connection.skippedEvents = 0;
|
|
315
|
+
}
|
|
316
|
+
#drop(connection, reason) {
|
|
317
|
+
this.#onWarning(`Dropped protocol connection: ${reason}`);
|
|
318
|
+
connection.socket.destroy(new Error(reason));
|
|
235
319
|
}
|
|
236
320
|
#protocolFailure(connection, error) {
|
|
237
321
|
if (connection.failed || connection.socket.destroyed)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"local-gateway.js","sourceRoot":"","sources":["../../src/gateway/local-gateway.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"local-gateway.js","sourceRoot":"","sources":["../../src/gateway/local-gateway.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
import type { ChildProcess } from "node:child_process";
|
|
2
|
+
import type { Readable } from "node:stream";
|
|
3
|
+
import { type IndexingStatus } from "../domain/indexing.js";
|
|
4
|
+
export { initialIndexingStatus } from "../domain/indexing.js";
|
|
5
|
+
export type { IndexingPassSummary, IndexingPhase, IndexingStatus } from "../domain/indexing.js";
|
|
6
|
+
/**
|
|
7
|
+
* Drives the bundled `aegis-search` CLI so the local full-text index stays
|
|
8
|
+
* current while the daemon runs. The CLI writes the same index directory the
|
|
9
|
+
* Aegis Searcher desktop application uses, so an interactive search sees
|
|
10
|
+
* everything the daemon has indexed and vice versa.
|
|
11
|
+
*
|
|
12
|
+
* Indexing is incremental: the CLI skips files whose mtime and size are
|
|
13
|
+
* unchanged, so a pass over an already-indexed tree is cheap.
|
|
14
|
+
*
|
|
15
|
+
* This module reaches for the filesystem and spawns a process, so nothing the
|
|
16
|
+
* sandboxed renderer imports may import it; the status shape it publishes lives
|
|
17
|
+
* in `domain/indexing.ts` for exactly that reason.
|
|
18
|
+
*/
|
|
19
|
+
/** The subset of a spawned indexer this service actually reads. */
|
|
20
|
+
export interface IndexerProcess extends ChildProcess {
|
|
21
|
+
stdout: Readable;
|
|
22
|
+
stderr: Readable;
|
|
23
|
+
}
|
|
24
|
+
export interface IndexServiceOptions {
|
|
25
|
+
/** Absolute path of the `aegis-search` binary, usually inside the bundled skill. */
|
|
26
|
+
binaryPath: string;
|
|
27
|
+
directories: readonly string[];
|
|
28
|
+
extensions: readonly string[];
|
|
29
|
+
intervalMs: number;
|
|
30
|
+
enabled: boolean;
|
|
31
|
+
onStatus: (status: IndexingStatus) => void;
|
|
32
|
+
clock?: () => Date;
|
|
33
|
+
/** Injected for tests so a pass can be driven without a real binary. */
|
|
34
|
+
spawnProcess?: (command: string, args: readonly string[]) => IndexerProcess;
|
|
35
|
+
}
|
|
36
|
+
export declare class IndexService {
|
|
37
|
+
#private;
|
|
38
|
+
constructor(options: IndexServiceOptions);
|
|
39
|
+
status(): IndexingStatus;
|
|
40
|
+
/**
|
|
41
|
+
* Begins periodic indexing. Returns once the service knows whether it can run;
|
|
42
|
+
* the first pass proceeds in the background so daemon startup is never blocked
|
|
43
|
+
* behind a filesystem walk.
|
|
44
|
+
*/
|
|
45
|
+
start(): Promise<void>;
|
|
46
|
+
/**
|
|
47
|
+
* Runs a pass now and resolves when it ends. Going through the timer would
|
|
48
|
+
* return before the pass had even been created, so the pass is started here
|
|
49
|
+
* directly; a pass already in flight is awaited rather than duplicated.
|
|
50
|
+
*/
|
|
51
|
+
runNow(): Promise<void>;
|
|
52
|
+
stop(): Promise<void>;
|
|
53
|
+
}
|
|
54
|
+
/** Path of the indexing binary shipped inside a bundled skill directory. */
|
|
55
|
+
export declare function bundledIndexerPath(skillPath: string): string;
|
|
56
|
+
//# sourceMappingURL=index-service.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index-service.d.ts","sourceRoot":"","sources":["../../src/indexing/index-service.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AACvD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAI5C,OAAO,EAAyB,KAAK,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAEnF,OAAO,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAC;AAC9D,YAAY,EAAE,mBAAmB,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAEhG;;;;;;;;;;;;GAYG;AACH,mEAAmE;AACnE,MAAM,WAAW,cAAe,SAAQ,YAAY;IAClD,MAAM,EAAE,QAAQ,CAAC;IACjB,MAAM,EAAE,QAAQ,CAAC;CAClB;AAED,MAAM,WAAW,mBAAmB;IAClC,oFAAoF;IACpF,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,SAAS,MAAM,EAAE,CAAC;IAC/B,UAAU,EAAE,SAAS,MAAM,EAAE,CAAC;IAC9B,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,OAAO,CAAC;IACjB,QAAQ,EAAE,CAAC,MAAM,EAAE,cAAc,KAAK,IAAI,CAAC;IAC3C,KAAK,CAAC,EAAE,MAAM,IAAI,CAAC;IACnB,wEAAwE;IACxE,YAAY,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,SAAS,MAAM,EAAE,KAAK,cAAc,CAAC;CAC7E;AAED,qBAAa,YAAY;;gBAWX,OAAO,EAAE,mBAAmB;IAOxC,MAAM,IAAI,cAAc;IAIxB;;;;OAIG;IACG,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAsC5B;;;;OAIG;IACG,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC;IAavB,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;CA2K5B;AAED,4EAA4E;AAC5E,wBAAgB,kBAAkB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAE5D"}
|
|
@@ -0,0 +1,262 @@
|
|
|
1
|
+
import { spawn } from "node:child_process";
|
|
2
|
+
import { access, constants } from "node:fs/promises";
|
|
3
|
+
import { join } from "node:path";
|
|
4
|
+
import { initialIndexingStatus } from "../domain/indexing.js";
|
|
5
|
+
export { initialIndexingStatus } from "../domain/indexing.js";
|
|
6
|
+
export class IndexService {
|
|
7
|
+
#options;
|
|
8
|
+
#clock;
|
|
9
|
+
#spawn;
|
|
10
|
+
#status = initialIndexingStatus();
|
|
11
|
+
#timer;
|
|
12
|
+
#child;
|
|
13
|
+
#running = false;
|
|
14
|
+
#stopped = false;
|
|
15
|
+
#pass = Promise.resolve();
|
|
16
|
+
constructor(options) {
|
|
17
|
+
this.#options = options;
|
|
18
|
+
this.#clock = options.clock ?? (() => new Date());
|
|
19
|
+
this.#spawn = options.spawnProcess
|
|
20
|
+
?? ((command, args) => spawn(command, [...args], { stdio: ["ignore", "pipe", "pipe"] }));
|
|
21
|
+
}
|
|
22
|
+
status() {
|
|
23
|
+
return structuredClone(this.#status);
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* Begins periodic indexing. Returns once the service knows whether it can run;
|
|
27
|
+
* the first pass proceeds in the background so daemon startup is never blocked
|
|
28
|
+
* behind a filesystem walk.
|
|
29
|
+
*/
|
|
30
|
+
async start() {
|
|
31
|
+
if (!this.#options.enabled) {
|
|
32
|
+
this.#emit({ ...initialIndexingStatus(), phase: "disabled", directories: [...this.#options.directories] });
|
|
33
|
+
return;
|
|
34
|
+
}
|
|
35
|
+
// Every path below is reached with indexing switched on, so `enabled` stays
|
|
36
|
+
// true and the phase says why a switched-on indexer is not making progress.
|
|
37
|
+
// Reporting all three as `disabled` made the settings panel and the status
|
|
38
|
+
// panel contradict each other.
|
|
39
|
+
if (this.#options.directories.length === 0) {
|
|
40
|
+
this.#emit({
|
|
41
|
+
...initialIndexingStatus(),
|
|
42
|
+
enabled: true,
|
|
43
|
+
phase: "unconfigured",
|
|
44
|
+
message: "本机索引已启用,但还没有选择要索引的目录",
|
|
45
|
+
});
|
|
46
|
+
return;
|
|
47
|
+
}
|
|
48
|
+
if (!(await this.#binaryAvailable())) {
|
|
49
|
+
this.#emit({
|
|
50
|
+
...initialIndexingStatus(),
|
|
51
|
+
enabled: true,
|
|
52
|
+
phase: "unavailable",
|
|
53
|
+
directories: [...this.#options.directories],
|
|
54
|
+
message: `未找到索引程序: ${this.#options.binaryPath}`,
|
|
55
|
+
});
|
|
56
|
+
return;
|
|
57
|
+
}
|
|
58
|
+
this.#emit({
|
|
59
|
+
...initialIndexingStatus(),
|
|
60
|
+
enabled: true,
|
|
61
|
+
phase: "idle",
|
|
62
|
+
directories: [...this.#options.directories],
|
|
63
|
+
});
|
|
64
|
+
this.#schedule(0);
|
|
65
|
+
}
|
|
66
|
+
/**
|
|
67
|
+
* Runs a pass now and resolves when it ends. Going through the timer would
|
|
68
|
+
* return before the pass had even been created, so the pass is started here
|
|
69
|
+
* directly; a pass already in flight is awaited rather than duplicated.
|
|
70
|
+
*/
|
|
71
|
+
async runNow() {
|
|
72
|
+
if (this.#running) {
|
|
73
|
+
await this.#pass.catch(() => undefined);
|
|
74
|
+
return;
|
|
75
|
+
}
|
|
76
|
+
if (this.#timer) {
|
|
77
|
+
clearTimeout(this.#timer);
|
|
78
|
+
this.#timer = undefined;
|
|
79
|
+
}
|
|
80
|
+
this.#pass = this.#runPass();
|
|
81
|
+
await this.#pass.catch(() => undefined);
|
|
82
|
+
}
|
|
83
|
+
async stop() {
|
|
84
|
+
this.#stopped = true;
|
|
85
|
+
if (this.#timer) {
|
|
86
|
+
clearTimeout(this.#timer);
|
|
87
|
+
this.#timer = undefined;
|
|
88
|
+
}
|
|
89
|
+
this.#child?.kill("SIGTERM");
|
|
90
|
+
await this.#pass.catch(() => undefined);
|
|
91
|
+
}
|
|
92
|
+
async #binaryAvailable() {
|
|
93
|
+
try {
|
|
94
|
+
await access(this.#options.binaryPath, constants.X_OK);
|
|
95
|
+
return true;
|
|
96
|
+
}
|
|
97
|
+
catch {
|
|
98
|
+
return false;
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
#schedule(delayMs) {
|
|
102
|
+
if (this.#stopped || this.#timer)
|
|
103
|
+
return;
|
|
104
|
+
this.#timer = setTimeout(() => {
|
|
105
|
+
this.#timer = undefined;
|
|
106
|
+
this.#pass = this.#runPass().catch(() => undefined);
|
|
107
|
+
}, delayMs);
|
|
108
|
+
this.#timer.unref();
|
|
109
|
+
}
|
|
110
|
+
async #runPass() {
|
|
111
|
+
if (this.#stopped || this.#running)
|
|
112
|
+
return;
|
|
113
|
+
this.#running = true;
|
|
114
|
+
const startedAt = this.#clock().toISOString();
|
|
115
|
+
const fresh = {
|
|
116
|
+
...this.#status,
|
|
117
|
+
phase: "scanning",
|
|
118
|
+
total: 0,
|
|
119
|
+
processed: 0,
|
|
120
|
+
failed: 0,
|
|
121
|
+
skipped: 0,
|
|
122
|
+
startedAt,
|
|
123
|
+
};
|
|
124
|
+
// A new pass starts with no current file rather than the previous one's;
|
|
125
|
+
// `lastPass` stays, so the index remains visibly usable while it rescans.
|
|
126
|
+
delete fresh.currentFile;
|
|
127
|
+
delete fresh.message;
|
|
128
|
+
delete fresh.finishedAt;
|
|
129
|
+
this.#emit(fresh);
|
|
130
|
+
try {
|
|
131
|
+
await this.#spawnPass();
|
|
132
|
+
}
|
|
133
|
+
catch (error) {
|
|
134
|
+
this.#emit({
|
|
135
|
+
...this.#status,
|
|
136
|
+
phase: "failed",
|
|
137
|
+
finishedAt: this.#clock().toISOString(),
|
|
138
|
+
message: error instanceof Error ? error.message : String(error),
|
|
139
|
+
});
|
|
140
|
+
}
|
|
141
|
+
finally {
|
|
142
|
+
this.#running = false;
|
|
143
|
+
this.#child = undefined;
|
|
144
|
+
if (!this.#stopped) {
|
|
145
|
+
const nextRunAt = new Date(this.#clock().getTime() + this.#options.intervalMs).toISOString();
|
|
146
|
+
this.#emit({ ...this.#status, nextRunAt });
|
|
147
|
+
this.#schedule(this.#options.intervalMs);
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
#spawnPass() {
|
|
152
|
+
const args = [
|
|
153
|
+
"index",
|
|
154
|
+
...this.#options.directories,
|
|
155
|
+
"--json",
|
|
156
|
+
...(this.#options.extensions.length > 0 ? ["--ext", this.#options.extensions.join(",")] : []),
|
|
157
|
+
];
|
|
158
|
+
const child = this.#spawn(this.#options.binaryPath, args);
|
|
159
|
+
this.#child = child;
|
|
160
|
+
return new Promise((resolve, reject) => {
|
|
161
|
+
let stdout = "";
|
|
162
|
+
let stderr = "";
|
|
163
|
+
child.stdout.setEncoding("utf8");
|
|
164
|
+
child.stderr.setEncoding("utf8");
|
|
165
|
+
child.stdout.on("data", (chunk) => {
|
|
166
|
+
stdout += chunk;
|
|
167
|
+
// The CLI emits one JSON object per line; partial trailing lines wait.
|
|
168
|
+
let newline = stdout.indexOf("\n");
|
|
169
|
+
while (newline >= 0) {
|
|
170
|
+
this.#consume(stdout.slice(0, newline));
|
|
171
|
+
stdout = stdout.slice(newline + 1);
|
|
172
|
+
newline = stdout.indexOf("\n");
|
|
173
|
+
}
|
|
174
|
+
});
|
|
175
|
+
child.stderr.on("data", (chunk) => {
|
|
176
|
+
// Keep only the tail: a failing pass should not buffer unbounded output.
|
|
177
|
+
stderr = `${stderr}${chunk}`.slice(-4_096);
|
|
178
|
+
});
|
|
179
|
+
child.on("error", reject);
|
|
180
|
+
child.on("close", (code, signal) => {
|
|
181
|
+
if (signal || this.#stopped) {
|
|
182
|
+
resolve();
|
|
183
|
+
return;
|
|
184
|
+
}
|
|
185
|
+
if (code === 0) {
|
|
186
|
+
// Normally the `done` record has already ended the pass; a CLI that
|
|
187
|
+
// exits cleanly without one still gets its pass recorded.
|
|
188
|
+
const alreadyCompleted = this.#status.phase === "idle" && this.#status.finishedAt !== undefined;
|
|
189
|
+
if (!alreadyCompleted)
|
|
190
|
+
this.#emit(this.#completed(this.#status));
|
|
191
|
+
resolve();
|
|
192
|
+
return;
|
|
193
|
+
}
|
|
194
|
+
reject(new Error(stderr.trim() || `索引进程退出码 ${String(code)}`));
|
|
195
|
+
});
|
|
196
|
+
});
|
|
197
|
+
}
|
|
198
|
+
#consume(line) {
|
|
199
|
+
const trimmed = line.trim();
|
|
200
|
+
if (!trimmed.startsWith("{"))
|
|
201
|
+
return;
|
|
202
|
+
let parsed;
|
|
203
|
+
try {
|
|
204
|
+
parsed = JSON.parse(trimmed);
|
|
205
|
+
}
|
|
206
|
+
catch {
|
|
207
|
+
return;
|
|
208
|
+
}
|
|
209
|
+
if (typeof parsed !== "object" || parsed === null)
|
|
210
|
+
return;
|
|
211
|
+
const record = parsed;
|
|
212
|
+
const type = record["type"];
|
|
213
|
+
if (type !== "progress" && type !== "done")
|
|
214
|
+
return;
|
|
215
|
+
const status = record["status"];
|
|
216
|
+
const next = {
|
|
217
|
+
...this.#status,
|
|
218
|
+
// The CLI's own `progress`/`done` status arrives just before the `done`
|
|
219
|
+
// record; it is still part of the pass, so it must not end it early.
|
|
220
|
+
phase: status === "scanning" ? "scanning" : status === "comparing" ? "comparing" : "indexing",
|
|
221
|
+
total: numeric(record["total"], this.#status.total),
|
|
222
|
+
processed: numeric(record["processed"], this.#status.processed),
|
|
223
|
+
failed: numeric(record["failed"], this.#status.failed),
|
|
224
|
+
skipped: numeric(record["skipped"], this.#status.skipped),
|
|
225
|
+
...(typeof record["currentFile"] === "string" && record["currentFile"]
|
|
226
|
+
? { currentFile: record["currentFile"] }
|
|
227
|
+
: {}),
|
|
228
|
+
};
|
|
229
|
+
this.#emit(type === "done" ? this.#completed(next) : next);
|
|
230
|
+
}
|
|
231
|
+
/** Ends a pass as idle and keeps its result for the passes that follow. */
|
|
232
|
+
#completed(status) {
|
|
233
|
+
const finishedAt = this.#clock().toISOString();
|
|
234
|
+
const started = status.startedAt ? Date.parse(status.startedAt) : Number.NaN;
|
|
235
|
+
const next = {
|
|
236
|
+
...status,
|
|
237
|
+
phase: "idle",
|
|
238
|
+
finishedAt,
|
|
239
|
+
lastPass: {
|
|
240
|
+
finishedAt,
|
|
241
|
+
durationMs: Number.isFinite(started) ? Math.max(0, Date.parse(finishedAt) - started) : 0,
|
|
242
|
+
processed: status.processed,
|
|
243
|
+
skipped: status.skipped,
|
|
244
|
+
failed: status.failed,
|
|
245
|
+
},
|
|
246
|
+
};
|
|
247
|
+
delete next.currentFile;
|
|
248
|
+
return next;
|
|
249
|
+
}
|
|
250
|
+
#emit(status) {
|
|
251
|
+
this.#status = status;
|
|
252
|
+
this.#options.onStatus(structuredClone(status));
|
|
253
|
+
}
|
|
254
|
+
}
|
|
255
|
+
/** Path of the indexing binary shipped inside a bundled skill directory. */
|
|
256
|
+
export function bundledIndexerPath(skillPath) {
|
|
257
|
+
return join(skillPath, "bin", "aegis-search");
|
|
258
|
+
}
|
|
259
|
+
function numeric(value, fallback) {
|
|
260
|
+
return typeof value === "number" && Number.isFinite(value) ? value : fallback;
|
|
261
|
+
}
|
|
262
|
+
//# sourceMappingURL=index-service.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index-service.js","sourceRoot":"","sources":["../../src/indexing/index-service.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAG3C,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AACrD,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAEjC,OAAO,EAAE,qBAAqB,EAAuB,MAAM,uBAAuB,CAAC;AAEnF,OAAO,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAC;AAmC9D,MAAM,OAAO,YAAY;IACd,QAAQ,CAAsB;IAC9B,MAAM,CAAa;IACnB,MAAM,CAAmD;IAClE,OAAO,GAAmB,qBAAqB,EAAE,CAAC;IAClD,MAAM,CAA6B;IACnC,MAAM,CAA6B;IACnC,QAAQ,GAAG,KAAK,CAAC;IACjB,QAAQ,GAAG,KAAK,CAAC;IACjB,KAAK,GAAkB,OAAO,CAAC,OAAO,EAAE,CAAC;IAEzC,YAAY,OAA4B;QACtC,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC;QACxB,IAAI,CAAC,MAAM,GAAG,OAAO,CAAC,KAAK,IAAI,CAAC,GAAG,EAAE,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC;QAClD,IAAI,CAAC,MAAM,GAAG,OAAO,CAAC,YAAY;eAC7B,CAAC,CAAC,OAAO,EAAE,IAAI,EAAE,EAAE,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC,GAAG,IAAI,CAAC,EAAE,EAAE,KAAK,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,CAAmB,CAAC,CAAC;IAC/G,CAAC;IAED,MAAM;QACJ,OAAO,eAAe,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IACvC,CAAC;IAED;;;;OAIG;IACH,KAAK,CAAC,KAAK;QACT,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,CAAC;YAC3B,IAAI,CAAC,KAAK,CAAC,EAAE,GAAG,qBAAqB,EAAE,EAAE,KAAK,EAAE,UAAU,EAAE,WAAW,EAAE,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC;YAC3G,OAAO;QACT,CAAC;QACD,4EAA4E;QAC5E,4EAA4E;QAC5E,2EAA2E;QAC3E,+BAA+B;QAC/B,IAAI,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC3C,IAAI,CAAC,KAAK,CAAC;gBACT,GAAG,qBAAqB,EAAE;gBAC1B,OAAO,EAAE,IAAI;gBACb,KAAK,EAAE,cAAc;gBACrB,OAAO,EAAE,sBAAsB;aAChC,CAAC,CAAC;YACH,OAAO;QACT,CAAC;QACD,IAAI,CAAC,CAAC,MAAM,IAAI,CAAC,gBAAgB,EAAE,CAAC,EAAE,CAAC;YACrC,IAAI,CAAC,KAAK,CAAC;gBACT,GAAG,qBAAqB,EAAE;gBAC1B,OAAO,EAAE,IAAI;gBACb,KAAK,EAAE,aAAa;gBACpB,WAAW,EAAE,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC;gBAC3C,OAAO,EAAE,YAAY,IAAI,CAAC,QAAQ,CAAC,UAAU,EAAE;aAChD,CAAC,CAAC;YACH,OAAO;QACT,CAAC;QAED,IAAI,CAAC,KAAK,CAAC;YACT,GAAG,qBAAqB,EAAE;YAC1B,OAAO,EAAE,IAAI;YACb,KAAK,EAAE,MAAM;YACb,WAAW,EAAE,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC;SAC5C,CAAC,CAAC;QACH,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;IACpB,CAAC;IAED;;;;OAIG;IACH,KAAK,CAAC,MAAM;QACV,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;YAClB,MAAM,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC;YACxC,OAAO;QACT,CAAC;QACD,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;YAChB,YAAY,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YAC1B,IAAI,CAAC,MAAM,GAAG,SAAS,CAAC;QAC1B,CAAC;QACD,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC;QAC7B,MAAM,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC;IAC1C,CAAC;IAED,KAAK,CAAC,IAAI;QACR,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;QACrB,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;YAChB,YAAY,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YAC1B,IAAI,CAAC,MAAM,GAAG,SAAS,CAAC;QAC1B,CAAC;QACD,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC;QAC7B,MAAM,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC;IAC1C,CAAC;IAED,KAAK,CAAC,gBAAgB;QACpB,IAAI,CAAC;YACH,MAAM,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,UAAU,EAAE,SAAS,CAAC,IAAI,CAAC,CAAC;YACvD,OAAO,IAAI,CAAC;QACd,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,KAAK,CAAC;QACf,CAAC;IACH,CAAC;IAED,SAAS,CAAC,OAAe;QACvB,IAAI,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,MAAM;YAAE,OAAO;QACzC,IAAI,CAAC,MAAM,GAAG,UAAU,CAAC,GAAG,EAAE;YAC5B,IAAI,CAAC,MAAM,GAAG,SAAS,CAAC;YACxB,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC;QACtD,CAAC,EAAE,OAAO,CAAC,CAAC;QACZ,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;IACtB,CAAC;IAED,KAAK,CAAC,QAAQ;QACZ,IAAI,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,QAAQ;YAAE,OAAO;QAC3C,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;QACrB,MAAM,SAAS,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,WAAW,EAAE,CAAC;QAC9C,MAAM,KAAK,GAAmB;YAC5B,GAAG,IAAI,CAAC,OAAO;YACf,KAAK,EAAE,UAAU;YACjB,KAAK,EAAE,CAAC;YACR,SAAS,EAAE,CAAC;YACZ,MAAM,EAAE,CAAC;YACT,OAAO,EAAE,CAAC;YACV,SAAS;SACV,CAAC;QACF,yEAAyE;QACzE,0EAA0E;QAC1E,OAAO,KAAK,CAAC,WAAW,CAAC;QACzB,OAAO,KAAK,CAAC,OAAO,CAAC;QACrB,OAAO,KAAK,CAAC,UAAU,CAAC;QACxB,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QAElB,IAAI,CAAC;YACH,MAAM,IAAI,CAAC,UAAU,EAAE,CAAC;QAC1B,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,CAAC,KAAK,CAAC;gBACT,GAAG,IAAI,CAAC,OAAO;gBACf,KAAK,EAAE,QAAQ;gBACf,UAAU,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC,WAAW,EAAE;gBACvC,OAAO,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC;aAChE,CAAC,CAAC;QACL,CAAC;gBAAS,CAAC;YACT,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAC;YACtB,IAAI,CAAC,MAAM,GAAG,SAAS,CAAC;YACxB,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC;gBACnB,MAAM,SAAS,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC,WAAW,EAAE,CAAC;gBAC7F,IAAI,CAAC,KAAK,CAAC,EAAE,GAAG,IAAI,CAAC,OAAO,EAAE,SAAS,EAAE,CAAC,CAAC;gBAC3C,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;YAC3C,CAAC;QACH,CAAC;IACH,CAAC;IAED,UAAU;QACR,MAAM,IAAI,GAAG;YACX,OAAO;YACP,GAAG,IAAI,CAAC,QAAQ,CAAC,WAAW;YAC5B,QAAQ;YACR,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,EAAE,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;SAC9F,CAAC;QACF,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC;QAC1D,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC;QAEpB,OAAO,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YAC3C,IAAI,MAAM,GAAG,EAAE,CAAC;YAChB,IAAI,MAAM,GAAG,EAAE,CAAC;YAChB,KAAK,CAAC,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;YACjC,KAAK,CAAC,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;YACjC,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,KAAa,EAAE,EAAE;gBACxC,MAAM,IAAI,KAAK,CAAC;gBAChB,uEAAuE;gBACvE,IAAI,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;gBACnC,OAAO,OAAO,IAAI,CAAC,EAAE,CAAC;oBACpB,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC;oBACxC,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,OAAO,GAAG,CAAC,CAAC,CAAC;oBACnC,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;gBACjC,CAAC;YACH,CAAC,CAAC,CAAC;YACH,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,KAAa,EAAE,EAAE;gBACxC,yEAAyE;gBACzE,MAAM,GAAG,GAAG,MAAM,GAAG,KAAK,EAAE,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC;YAC7C,CAAC,CAAC,CAAC;YACH,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;YAC1B,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE;gBACjC,IAAI,MAAM,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;oBAC5B,OAAO,EAAE,CAAC;oBACV,OAAO;gBACT,CAAC;gBACD,IAAI,IAAI,KAAK,CAAC,EAAE,CAAC;oBACf,oEAAoE;oBACpE,0DAA0D;oBAC1D,MAAM,gBAAgB,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,KAAK,MAAM,IAAI,IAAI,CAAC,OAAO,CAAC,UAAU,KAAK,SAAS,CAAC;oBAChG,IAAI,CAAC,gBAAgB;wBAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC;oBACjE,OAAO,EAAE,CAAC;oBACV,OAAO;gBACT,CAAC;gBACD,MAAM,CAAC,IAAI,KAAK,CAAC,MAAM,CAAC,IAAI,EAAE,IAAI,WAAW,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;YAChE,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;IACL,CAAC;IAED,QAAQ,CAAC,IAAY;QACnB,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;QAC5B,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC;YAAE,OAAO;QACrC,IAAI,MAAe,CAAC;QACpB,IAAI,CAAC;YACH,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QAC/B,CAAC;QAAC,MAAM,CAAC;YACP,OAAO;QACT,CAAC;QACD,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,MAAM,KAAK,IAAI;YAAE,OAAO;QAC1D,MAAM,MAAM,GAAG,MAAiC,CAAC;QACjD,MAAM,IAAI,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC;QAC5B,IAAI,IAAI,KAAK,UAAU,IAAI,IAAI,KAAK,MAAM;YAAE,OAAO;QAEnD,MAAM,MAAM,GAAG,MAAM,CAAC,QAAQ,CAAC,CAAC;QAChC,MAAM,IAAI,GAAmB;YAC3B,GAAG,IAAI,CAAC,OAAO;YACf,wEAAwE;YACxE,qEAAqE;YACrE,KAAK,EAAE,MAAM,KAAK,UAAU,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,MAAM,KAAK,WAAW,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,UAAU;YAC7F,KAAK,EAAE,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC;YACnD,SAAS,EAAE,OAAO,CAAC,MAAM,CAAC,WAAW,CAAC,EAAE,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC;YAC/D,MAAM,EAAE,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC;YACtD,OAAO,EAAE,OAAO,CAAC,MAAM,CAAC,SAAS,CAAC,EAAE,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC;YACzD,GAAG,CAAC,OAAO,MAAM,CAAC,aAAa,CAAC,KAAK,QAAQ,IAAI,MAAM,CAAC,aAAa,CAAC;gBACpE,CAAC,CAAC,EAAE,WAAW,EAAE,MAAM,CAAC,aAAa,CAAC,EAAE;gBACxC,CAAC,CAAC,EAAE,CAAC;SACR,CAAC;QACF,IAAI,CAAC,KAAK,CAAC,IAAI,KAAK,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;IAC7D,CAAC;IAED,2EAA2E;IAC3E,UAAU,CAAC,MAAsB;QAC/B,MAAM,UAAU,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,WAAW,EAAE,CAAC;QAC/C,MAAM,OAAO,GAAG,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC;QAC7E,MAAM,IAAI,GAAmB;YAC3B,GAAG,MAAM;YACT,KAAK,EAAE,MAAM;YACb,UAAU;YACV,QAAQ,EAAE;gBACR,UAAU;gBACV,UAAU,EAAE,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;gBACxF,SAAS,EAAE,MAAM,CAAC,SAAS;gBAC3B,OAAO,EAAE,MAAM,CAAC,OAAO;gBACvB,MAAM,EAAE,MAAM,CAAC,MAAM;aACtB;SACF,CAAC;QACF,OAAO,IAAI,CAAC,WAAW,CAAC;QACxB,OAAO,IAAI,CAAC;IACd,CAAC;IAED,KAAK,CAAC,MAAsB;QAC1B,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC;QACtB,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC,CAAC;IAClD,CAAC;CACF;AAED,4EAA4E;AAC5E,MAAM,UAAU,kBAAkB,CAAC,SAAiB;IAClD,OAAO,IAAI,CAAC,SAAS,EAAE,KAAK,EAAE,cAAc,CAAC,CAAC;AAChD,CAAC;AAED,SAAS,OAAO,CAAC,KAAc,EAAE,QAAgB;IAC/C,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC;AAChF,CAAC"}
|
package/dist/kernel/loop.d.ts
CHANGED
|
@@ -1,9 +1,19 @@
|
|
|
1
1
|
import { type KernelEffect, type KernelEvent, type KernelState } from "./state.js";
|
|
2
|
+
/**
|
|
3
|
+
* Receives the state that produced `effect`. Kernel state is immutable by
|
|
4
|
+
* construction — every reducer branch rebuilds the parts it changes — so the
|
|
5
|
+
* value is shared rather than copied and must never be mutated. Copying it per
|
|
6
|
+
* event meant deep-cloning every session transcript for every streamed token.
|
|
7
|
+
*/
|
|
2
8
|
export type KernelEffectRunner = (effect: KernelEffect, state: KernelState) => void | Promise<void>;
|
|
3
9
|
export declare class KernelLoop {
|
|
4
10
|
#private;
|
|
5
11
|
constructor(effectRunner: KernelEffectRunner, state?: KernelState);
|
|
6
12
|
snapshot(): KernelState;
|
|
13
|
+
/**
|
|
14
|
+
* Commits `event` and resolves with the resulting state. Like the effect
|
|
15
|
+
* runner's argument, that state is shared and must be treated as read-only.
|
|
16
|
+
*/
|
|
7
17
|
dispatch(event: KernelEvent): Promise<KernelState>;
|
|
8
18
|
idle(): Promise<void>;
|
|
9
19
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"loop.d.ts","sourceRoot":"","sources":["../../src/kernel/loop.ts"],"names":[],"mappings":"AACA,OAAO,EAAsB,KAAK,YAAY,EAAE,KAAK,WAAW,EAAE,KAAK,WAAW,EAAE,MAAM,YAAY,CAAC;AAEvG,MAAM,MAAM,kBAAkB,GAAG,CAAC,MAAM,EAAE,YAAY,EAAE,KAAK,EAAE,WAAW,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;AAEpG,qBAAa,UAAU;;gBAMT,YAAY,EAAE,kBAAkB,EAAE,KAAK,cAAuB;IAK1E,QAAQ,IAAI,WAAW;IAIvB,QAAQ,CAAC,KAAK,EAAE,WAAW,GAAG,OAAO,CAAC,WAAW,CAAC;IAc5C,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;CAe5B"}
|
|
1
|
+
{"version":3,"file":"loop.d.ts","sourceRoot":"","sources":["../../src/kernel/loop.ts"],"names":[],"mappings":"AACA,OAAO,EAAsB,KAAK,YAAY,EAAE,KAAK,WAAW,EAAE,KAAK,WAAW,EAAE,MAAM,YAAY,CAAC;AAEvG;;;;;GAKG;AACH,MAAM,MAAM,kBAAkB,GAAG,CAAC,MAAM,EAAE,YAAY,EAAE,KAAK,EAAE,WAAW,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;AAEpG,qBAAa,UAAU;;gBAMT,YAAY,EAAE,kBAAkB,EAAE,KAAK,cAAuB;IAK1E,QAAQ,IAAI,WAAW;IAIvB;;;OAGG;IACH,QAAQ,CAAC,KAAK,EAAE,WAAW,GAAG,OAAO,CAAC,WAAW,CAAC;IAc5C,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;CAe5B"}
|