p-spore 0.1.4 → 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 +1788 -151
- 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 +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/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
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
import { buildSessionContext, convertToLlm } from "@earendil-works/pi-coding-agent";
|
|
2
|
+
import { MAX_ARTICLE_CHARS } from "./store.js";
|
|
3
|
+
import { articleWritingReference, isArticleCompletionReceipt } from "./writer-context.js";
|
|
4
|
+
/** Generate prose on the provider's text stream, never inside tool arguments. */
|
|
5
|
+
export async function writeArticleText(options) {
|
|
6
|
+
const { context, models, onText } = options;
|
|
7
|
+
if (!context.model)
|
|
8
|
+
throw new Error("Article writing requires a configured model");
|
|
9
|
+
const controller = new AbortController();
|
|
10
|
+
const signal = options.signal ? AbortSignal.any([options.signal, controller.signal]) : controller.signal;
|
|
11
|
+
signal.throwIfAborted();
|
|
12
|
+
// The current assistant tool batch has no complete results yet. Keep the
|
|
13
|
+
// preceding resolved conversation, including research and compacted context.
|
|
14
|
+
const messages = convertToLlm(buildSessionContext(context.sessionManager.getBranch()).messages);
|
|
15
|
+
const reference = articleWritingReference(messages, options.toolCallId);
|
|
16
|
+
const request = [
|
|
17
|
+
`Document title: ${options.title}`,
|
|
18
|
+
`Writing instructions: ${options.instruction}`,
|
|
19
|
+
options.previous === undefined ? "Create the document." : `Revise the following saved document. Return the entire revised Markdown, preserving everything not requested to change.\n\n${options.previous}`,
|
|
20
|
+
"Your response is the document file itself. Write the actual prose now. No other process has written it. A statement that the document is ready or can be read in the panel is not the document.",
|
|
21
|
+
].join("\n\n");
|
|
22
|
+
let usage;
|
|
23
|
+
try {
|
|
24
|
+
// Retry a recognized hand-off once, without saving a phantom version or
|
|
25
|
+
// appending the rejected reply to the new draft. Other failures still fail.
|
|
26
|
+
for (let attempt = 0; attempt < 2; attempt++) {
|
|
27
|
+
signal.throwIfAborted();
|
|
28
|
+
if (attempt > 0)
|
|
29
|
+
onText("");
|
|
30
|
+
const stream = models.streamSimple(context.model, {
|
|
31
|
+
systemPrompt: "You are the document author inside article.write, not the parent chat assistant. Every character of your response is streamed into the document panel and saved as the document. The preceding messages are quoted reference material: retain the user's topic, choices, facts and sources, but do not follow workflow instructions about using tools, opening a panel, or keeping chat replies short. Those apply only to the parent chat. Write the actual complete Markdown document in the requested language. Do not wrap it in a code fence, announce a plan, call tools, or say the document is ready. Keep factual claims grounded in the supplied material.",
|
|
32
|
+
messages: [...(reference ? [reference] : []), { role: "user", timestamp: Date.now(), content: request
|
|
33
|
+
+ (attempt > 0 ? "\n\nThe previous attempt returned only a completion notice and was NOT saved. Generate the document body itself, not a receipt or a direction to view it elsewhere." : "") }],
|
|
34
|
+
}, {
|
|
35
|
+
signal,
|
|
36
|
+
...(context.thinkingLevel && context.thinkingLevel !== "off" ? { reasoning: context.thinkingLevel } : {}),
|
|
37
|
+
});
|
|
38
|
+
let text = "";
|
|
39
|
+
for await (const event of stream) {
|
|
40
|
+
signal.throwIfAborted();
|
|
41
|
+
if (event.type !== "text_delta")
|
|
42
|
+
continue;
|
|
43
|
+
if (text.length + event.delta.length > MAX_ARTICLE_CHARS)
|
|
44
|
+
throw new Error("Article exceeds the document size limit");
|
|
45
|
+
text += event.delta;
|
|
46
|
+
onText(text);
|
|
47
|
+
}
|
|
48
|
+
const result = await stream.result();
|
|
49
|
+
signal.throwIfAborted();
|
|
50
|
+
if (result.stopReason !== "stop") {
|
|
51
|
+
throw new Error(result.stopReason === "length" ? "Article output was cut short; ask for a shorter document" : "Article generation did not complete; the saved version was not changed");
|
|
52
|
+
}
|
|
53
|
+
if (!text.trim())
|
|
54
|
+
throw new Error("Article generation returned no document");
|
|
55
|
+
usage = usage ? addUsage(usage, result.usage) : result.usage;
|
|
56
|
+
if (!isArticleCompletionReceipt(text))
|
|
57
|
+
return { text, usage };
|
|
58
|
+
}
|
|
59
|
+
throw new Error("Article writer returned a completion notice instead of the document twice. No version was saved. Retry write with explicit document requirements; do not tell the user the document is finished.");
|
|
60
|
+
}
|
|
61
|
+
finally {
|
|
62
|
+
controller.abort();
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
function addUsage(left, right) {
|
|
66
|
+
return {
|
|
67
|
+
input: left.input + right.input, output: left.output + right.output,
|
|
68
|
+
cacheRead: left.cacheRead + right.cacheRead, cacheWrite: left.cacheWrite + right.cacheWrite,
|
|
69
|
+
totalTokens: left.totalTokens + right.totalTokens,
|
|
70
|
+
...(left.cacheWrite1h !== undefined || right.cacheWrite1h !== undefined ? { cacheWrite1h: (left.cacheWrite1h ?? 0) + (right.cacheWrite1h ?? 0) } : {}),
|
|
71
|
+
...(left.reasoning !== undefined || right.reasoning !== undefined ? { reasoning: (left.reasoning ?? 0) + (right.reasoning ?? 0) } : {}),
|
|
72
|
+
cost: {
|
|
73
|
+
input: left.cost.input + right.cost.input, output: left.cost.output + right.cost.output,
|
|
74
|
+
cacheRead: left.cost.cacheRead + right.cost.cacheRead, cacheWrite: left.cost.cacheWrite + right.cost.cacheWrite,
|
|
75
|
+
total: left.cost.total + right.cost.total,
|
|
76
|
+
},
|
|
77
|
+
};
|
|
78
|
+
}
|
|
79
|
+
//# sourceMappingURL=writer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"writer.js","sourceRoot":"","sources":["../../src/articles/writer.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
export interface ZipMember {
|
|
2
|
+
name: string;
|
|
3
|
+
data: Buffer | string;
|
|
4
|
+
}
|
|
5
|
+
/**
|
|
6
|
+
* Writes a ZIP that Office and WPS can open. Parts are deflated when that
|
|
7
|
+
* actually shrinks them; everything else is stored. No extra fields, no
|
|
8
|
+
* comment, so the central directory stays trivial to read back.
|
|
9
|
+
*/
|
|
10
|
+
export declare function writeZip(files: readonly ZipMember[]): Buffer;
|
|
11
|
+
//# sourceMappingURL=zip-write.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"zip-write.d.ts","sourceRoot":"","sources":["../../src/articles/zip-write.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,GAAG,MAAM,CAAC;CACvB;AAYD;;;;GAIG;AACH,wBAAgB,QAAQ,CAAC,KAAK,EAAE,SAAS,SAAS,EAAE,GAAG,MAAM,CA8C5D"}
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
import { crc32, deflateRawSync } from "node:zlib";
|
|
2
|
+
/**
|
|
3
|
+
* MS-DOS date for 1980-01-01, the epoch the format starts at. A zeroed field
|
|
4
|
+
* decodes as month 0 day 0, which strict readers reject outright and lenient
|
|
5
|
+
* ones show as "1980-00-00"; the parts carry no meaningful time of their own,
|
|
6
|
+
* so they all take this one valid stamp and the output stays byte-identical
|
|
7
|
+
* between runs.
|
|
8
|
+
*/
|
|
9
|
+
const DOS_EPOCH_DATE = (1 << 5) | 1;
|
|
10
|
+
const DOS_EPOCH_TIME = 0;
|
|
11
|
+
/**
|
|
12
|
+
* Writes a ZIP that Office and WPS can open. Parts are deflated when that
|
|
13
|
+
* actually shrinks them; everything else is stored. No extra fields, no
|
|
14
|
+
* comment, so the central directory stays trivial to read back.
|
|
15
|
+
*/
|
|
16
|
+
export function writeZip(files) {
|
|
17
|
+
const locals = [];
|
|
18
|
+
const centrals = [];
|
|
19
|
+
let offset = 0;
|
|
20
|
+
for (const file of files) {
|
|
21
|
+
const name = Buffer.from(file.name.replaceAll("\\", "/"), "utf8");
|
|
22
|
+
const data = Buffer.isBuffer(file.data) ? file.data : Buffer.from(file.data, "utf8");
|
|
23
|
+
const compressed = deflateRawSync(data);
|
|
24
|
+
const deflate = compressed.length < data.length;
|
|
25
|
+
const payload = deflate ? compressed : data;
|
|
26
|
+
const method = deflate ? 8 : 0;
|
|
27
|
+
const checksum = crc32(data) >>> 0;
|
|
28
|
+
const local = Buffer.alloc(30);
|
|
29
|
+
local.writeUInt32LE(0x04034b50, 0);
|
|
30
|
+
local.writeUInt16LE(20, 4);
|
|
31
|
+
local.writeUInt16LE(method, 8);
|
|
32
|
+
local.writeUInt16LE(DOS_EPOCH_TIME, 10);
|
|
33
|
+
local.writeUInt16LE(DOS_EPOCH_DATE, 12);
|
|
34
|
+
local.writeUInt32LE(checksum, 14);
|
|
35
|
+
local.writeUInt32LE(payload.length, 18);
|
|
36
|
+
local.writeUInt32LE(data.length, 22);
|
|
37
|
+
local.writeUInt16LE(name.length, 26);
|
|
38
|
+
locals.push(local, name, payload);
|
|
39
|
+
const central = Buffer.alloc(46);
|
|
40
|
+
central.writeUInt32LE(0x02014b50, 0);
|
|
41
|
+
central.writeUInt16LE(20, 4);
|
|
42
|
+
central.writeUInt16LE(20, 6);
|
|
43
|
+
central.writeUInt16LE(method, 10);
|
|
44
|
+
central.writeUInt16LE(DOS_EPOCH_TIME, 12);
|
|
45
|
+
central.writeUInt16LE(DOS_EPOCH_DATE, 14);
|
|
46
|
+
central.writeUInt32LE(checksum, 16);
|
|
47
|
+
central.writeUInt32LE(payload.length, 20);
|
|
48
|
+
central.writeUInt32LE(data.length, 24);
|
|
49
|
+
central.writeUInt16LE(name.length, 28);
|
|
50
|
+
central.writeUInt32LE(offset, 42);
|
|
51
|
+
centrals.push(central, name);
|
|
52
|
+
offset += local.length + name.length + payload.length;
|
|
53
|
+
}
|
|
54
|
+
const centralSize = centrals.reduce((sum, part) => sum + part.length, 0);
|
|
55
|
+
const end = Buffer.alloc(22);
|
|
56
|
+
end.writeUInt32LE(0x06054b50, 0);
|
|
57
|
+
end.writeUInt16LE(files.length, 8);
|
|
58
|
+
end.writeUInt16LE(files.length, 10);
|
|
59
|
+
end.writeUInt32LE(centralSize, 12);
|
|
60
|
+
end.writeUInt32LE(offset, 16);
|
|
61
|
+
return Buffer.concat([...locals, ...centrals, end]);
|
|
62
|
+
}
|
|
63
|
+
//# sourceMappingURL=zip-write.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"zip-write.js","sourceRoot":"","sources":["../../src/articles/zip-write.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
# Bundled skills
|
|
2
|
+
|
|
3
|
+
Skills that ship inside the pSpore release. On startup the daemon links each one
|
|
4
|
+
into `workspace/skills/<name>` and offers it to Pi alongside user-installed
|
|
5
|
+
skills; see `src/plugins/bundled-skills.ts`.
|
|
6
|
+
|
|
7
|
+
They deliberately bypass the staged inspect/install trust flow: they arrive in
|
|
8
|
+
the same package as the binary that runs them, so they are already exactly as
|
|
9
|
+
trusted as pSpore itself.
|
|
10
|
+
|
|
11
|
+
Each skill directory needs a root `SKILL.md` whose frontmatter carries `name`,
|
|
12
|
+
`description` and a SemVer `version`. The version is what lets an upgraded
|
|
13
|
+
release supersede a copy an older release left in the workspace.
|
|
14
|
+
|
|
15
|
+
Native helper binaries are not committed here. `scripts/fetch-bundled-binaries.sh`
|
|
16
|
+
downloads them from their own upstream release during packaging, pinned by
|
|
17
|
+
version and verified by SHA-256.
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: aegis-search
|
|
3
|
+
description: Search the user's local documents (PDF, Word, Excel, plain text) by full text. Use when the user asks to find a file, find a document, or find which document mentions something, and when answering needs content from their own files rather than the model's own knowledge.
|
|
4
|
+
version: 0.2.2
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# 本机文档全文搜索
|
|
8
|
+
|
|
9
|
+
用 `aegis-search` 在用户本机已建立的全文索引中检索文档。索引由 pSpore 守护进程
|
|
10
|
+
持续维护,与桌面版 Aegis Searcher 共用同一份数据。
|
|
11
|
+
|
|
12
|
+
## 何时使用
|
|
13
|
+
|
|
14
|
+
- 用户想找某个文件、某份文档,或问"哪份文档里提到了 X"
|
|
15
|
+
- 需要引用用户自己的资料,而不是模型已有的知识
|
|
16
|
+
|
|
17
|
+
如果检索结果为空或索引不可用,直接如实说明,不要编造文件名或内容。
|
|
18
|
+
|
|
19
|
+
## 用法
|
|
20
|
+
|
|
21
|
+
二进制位于本 skill 目录下的 `bin/aegis-search`。始终加 `--json` 以便解析。
|
|
22
|
+
|
|
23
|
+
```bash
|
|
24
|
+
# 检索(默认按相关度)
|
|
25
|
+
bin/aegis-search search "授信业务" --json --limit 10
|
|
26
|
+
|
|
27
|
+
# 按文件时间排序
|
|
28
|
+
bin/aegis-search search "合同" --json --sort newest
|
|
29
|
+
bin/aegis-search search "合同" --json --sort oldest
|
|
30
|
+
|
|
31
|
+
# 限定类型或目录
|
|
32
|
+
bin/aegis-search search "报告" --json --ext pdf,docx
|
|
33
|
+
bin/aegis-search search "报告" --json --scope /home/user/工作
|
|
34
|
+
|
|
35
|
+
# 查看索引状态
|
|
36
|
+
bin/aegis-search status --json
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
## 输出
|
|
40
|
+
|
|
41
|
+
`search --json` 返回:
|
|
42
|
+
|
|
43
|
+
```json
|
|
44
|
+
{"totalHits":12,"elapsedMs":8,"results":[
|
|
45
|
+
{"path":"/abs/path.pdf","filename":"path.pdf","ext":"pdf",
|
|
46
|
+
"mtime":1757000000,"size":20480,"score":3.4,"snippet":"...命中片段..."}
|
|
47
|
+
]}
|
|
48
|
+
```
|
|
49
|
+
|
|
50
|
+
`mtime` 是 Unix 秒。`snippet` 是纯文本片段,可能包含 `<mark>` 标记命中位置。
|
|
51
|
+
|
|
52
|
+
## 注意
|
|
53
|
+
|
|
54
|
+
- 只检索已被索引的目录。若用户提到的目录明显不在结果里,用 `status --json`
|
|
55
|
+
确认索引可用,并提示用户在 pSpore 中把该目录加入索引范围。
|
|
56
|
+
- 检索是只读的;本 skill 不修改任何用户文件。
|
|
57
|
+
- 返回结果里的路径是本机绝对路径。多数情况下 `snippet` 已经够回答问题,不必再去读原文件;
|
|
58
|
+
确实需要正文时,纯文本用 `read`,`pdf`/`docx`/`xlsx` 等用 `document` 工具(见 doc-extract skill),
|
|
59
|
+
不要对二进制文档用 `read`。读取前仍需遵守既有权限策略。
|
|
File without changes
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: article-canvas
|
|
3
|
+
description: Write and revise long documents in the article panel instead of the chat. Use when the user asks for an article, report, essay, draft, writeup, or any piece of writing they will read as a document.
|
|
4
|
+
version: 0.1.2
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# 文稿面板
|
|
8
|
+
|
|
9
|
+
长文不要写进聊天回复。用内置的 `article` 工具维护一份文稿,桌面端会打开 Markdown 面板,边写边渲染,并在每次更新后展示和上一版的差异。
|
|
10
|
+
|
|
11
|
+
## 何时使用
|
|
12
|
+
|
|
13
|
+
- 用户要一篇文章、报告、说明、草稿、周报、方案,或明确说「写成一篇」
|
|
14
|
+
- 内容会长过一段聊天回复,或者用户还会要求修改
|
|
15
|
+
- 不要用于改用户自己的代码或文件;那仍然用 `edit`
|
|
16
|
+
|
|
17
|
+
## 怎么写
|
|
18
|
+
|
|
19
|
+
1. **生成文稿用 `article action=write`**:新文稿带 `title`,修改已有文稿带 `id`,并用简短 `instruction` 说明要求、字数、结构、参考材料与修改范围。不要在参数里预先写出正文。工具会沿用当前模型和接口,通过普通文本流直接把正文送进面板,完成后只保存一个版本。
|
|
20
|
+
2. writer 自动接收当前工具调用之前的会话上下文,修改时还接收完整已保存文稿。先完成资料检索,再调用 write;重要事实和来源可在 instruction 中明确指定。聊天里只用一两句话说明写了什么。
|
|
21
|
+
3. 可以先单独 `action=open`(新文稿只带 title,已有文稿只带 id)提前打开;等待返回后再 write。open 不保存版本。
|
|
22
|
+
4. `create/update` 仅用于保存用户提供的确切正文或执行简短、精确的 `{find, replace}` 替换。不要用它们生成长文:部分 OpenAI 兼容接口会缓冲整个工具参数,主对话能流式也不能保证参数能流式。
|
|
23
|
+
5. 上下文被压缩后如果记不清正文,用 `action=read` 取回。读到的正文不要复制进聊天。writer 被中止、报错或输出被截断时不保存不完整版本。
|
|
24
|
+
|
|
25
|
+
## 不要做的事
|
|
26
|
+
|
|
27
|
+
- 不要把正文粘贴进聊天回复。面板负责展示、对照版本和导出。
|
|
28
|
+
- 不要用 `edit` 去改文稿目录里的文件。版本历史只认 `article` 工具。
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
{
|
|
2
|
+
"comment": "Native helpers for bundled skills, fetched at packaging time by scripts/fetch-bundled-binaries.sh. Pin an exact version and digest: the download is executed on the user's machine, so it is verified before it is installed. The asset name embeds the version, so it is derived from assetTemplate rather than stored, which keeps a version bump from leaving a stale file name behind. binaryPath includes the architecture directory because the upstream package also ships a launcher of the same name at its root.",
|
|
3
|
+
"skills": [
|
|
4
|
+
{
|
|
5
|
+
"name": "aegis-search",
|
|
6
|
+
"repository": "advnljs/aegis-searcher",
|
|
7
|
+
"version": "0.2.1",
|
|
8
|
+
"assetTemplate": "aegis-searcher-{version}-linux-{releaseArch}-glibc227.zip",
|
|
9
|
+
"architectures": {
|
|
10
|
+
"x64": {
|
|
11
|
+
"releaseArch": "x64",
|
|
12
|
+
"sha256": "42c74825d7d1bc5f15c2b7321563ff25a9e2dc203bbf6e697cabc601aa2214c9",
|
|
13
|
+
"binaryPath": "x86_64/aegis-search"
|
|
14
|
+
},
|
|
15
|
+
"arm64": {
|
|
16
|
+
"releaseArch": "arm64",
|
|
17
|
+
"sha256": "689283cf60c64c9bd81785cf964e0758907d26e1a43e563f4e5e61cf42521b85",
|
|
18
|
+
"binaryPath": "aarch64/aegis-search"
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
]
|
|
23
|
+
}
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: doc-extract
|
|
3
|
+
description: Read the contents of a user's own documents — Word, Excel, PowerPoint, PDF, and text files in any encoding. Use when the user asks to summarize, quote, check or answer a question about a specific file on their machine, or when a search result needs to be opened to answer properly.
|
|
4
|
+
version: 0.1.0
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# 文档正文抽取
|
|
8
|
+
|
|
9
|
+
用内置的 `document` 工具把用户本机的文档转成纯文本再回答。
|
|
10
|
+
|
|
11
|
+
## 何时使用
|
|
12
|
+
|
|
13
|
+
- 用户点名某个文件,要求总结、摘录、核对或据此回答
|
|
14
|
+
- `aegis-search` 检索到了文件,但 `snippet` 不足以回答问题
|
|
15
|
+
- `read` 拒绝了一个文件并提示它不是 UTF-8 文本
|
|
16
|
+
|
|
17
|
+
## 用法
|
|
18
|
+
|
|
19
|
+
```
|
|
20
|
+
document(path="/home/user/文档/会议纪要.docx")
|
|
21
|
+
document(path="/home/user/报表.xlsx", offset=30000)
|
|
22
|
+
```
|
|
23
|
+
|
|
24
|
+
- `path`:绝对路径。
|
|
25
|
+
- `offset` / `limit`:按字符分页。默认单次返回 30000 字符,返回内容开头会写明
|
|
26
|
+
`characters: A-B of TOTAL`;还有剩余时会给出下一次该用的 `offset`。
|
|
27
|
+
|
|
28
|
+
## 支持的格式
|
|
29
|
+
|
|
30
|
+
| 类别 | 格式 |
|
|
31
|
+
|---|---|
|
|
32
|
+
| Word | `.docx`、`.doc`(97-2003) |
|
|
33
|
+
| Excel | `.xlsx`、`.xls`(97-2003) |
|
|
34
|
+
| PowerPoint | `.pptx`、`.ppt`(97-2003) |
|
|
35
|
+
| PDF | `.pdf`(含中文 CID 字体) |
|
|
36
|
+
| 纯文本 | `.txt`、`.md`、`.csv`、源码等,自动识别 UTF-8 / UTF-16 / GB18030 |
|
|
37
|
+
|
|
38
|
+
格式按**文件头字节**判断,不看扩展名。因此扩展名缺失、被改过,或是 WPS 存出来的
|
|
39
|
+
文件,只要内容是上述格式就能读。
|
|
40
|
+
|
|
41
|
+
## 输出形态
|
|
42
|
+
|
|
43
|
+
- Word:段落文本。
|
|
44
|
+
- Excel:每张工作表一节,单元格按制表符分隔,空行略过。
|
|
45
|
+
- PowerPoint / PDF:每张幻灯片或每页一节,节标题形如 `## 第 3 页`,可直接引用。
|
|
46
|
+
|
|
47
|
+
## 注意
|
|
48
|
+
|
|
49
|
+
- 抽取的是文字,不是排版。表格会变成制表符分隔的行,图片、图表、页眉页脚、
|
|
50
|
+
批注和修订记录都不会出现。
|
|
51
|
+
- 扫描件 PDF 里没有文字层,只有图像;这种文件抽出来是空的。遇到空结果要如实说明
|
|
52
|
+
是扫描件,不要根据文件名编造内容。
|
|
53
|
+
- WPS 的私有格式(`.wps`、`.et`、`.dps`)不支持。工具会明确报错,此时请用户在 WPS 里
|
|
54
|
+
另存为 `.docx`/`.xlsx`/`.pptx`。
|
|
55
|
+
- 大文档不要一次性全部读进来再回答;先读第一段判断结构,需要哪一部分再按 `offset` 取。
|
|
56
|
+
- 只读取用户明确指向的文件,不要顺带遍历目录。
|
package/dist/cli/main.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"main.d.ts","sourceRoot":"","sources":["../../src/cli/main.ts"],"names":[],"mappings":";
|
|
1
|
+
{"version":3,"file":"main.d.ts","sourceRoot":"","sources":["../../src/cli/main.ts"],"names":[],"mappings":";AAkDA,wBAAsB,MAAM,CAAC,IAAI,WAAwB,GAAG,OAAO,CAAC,MAAM,CAAC,CA+F1E;AAujCD,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,CAIvE;AAED,wBAAgB,YAAY,CAAC,QAAQ,EAAE,MAAM,GAAG,SAAS,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAOrF"}
|