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
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Markdown to plain text for the `.txt` export.
|
|
3
|
+
*
|
|
4
|
+
* Markers (`#`, `**`, backticks, table pipes) are dropped. The words stay, in
|
|
5
|
+
* reading order, so the file is something a person can open without a renderer.
|
|
6
|
+
*/
|
|
7
|
+
import { parseMarkdown, } from "../ui/shared/markdown.js";
|
|
8
|
+
export function markdownToPlainText(source) {
|
|
9
|
+
const normalized = source.replaceAll("\r\n", "\n").replaceAll("\r", "\n");
|
|
10
|
+
const blocks = parseMarkdown(normalized);
|
|
11
|
+
if (blocks.length === 0)
|
|
12
|
+
return normalized.trim();
|
|
13
|
+
return blocks.map((block) => blockToPlain(block).trimEnd()).filter((part) => part !== "").join("\n\n");
|
|
14
|
+
}
|
|
15
|
+
function blockToPlain(block) {
|
|
16
|
+
switch (block.kind) {
|
|
17
|
+
case "paragraph":
|
|
18
|
+
return inlineToPlain(block.inline);
|
|
19
|
+
case "heading":
|
|
20
|
+
return inlineToPlain(block.inline);
|
|
21
|
+
case "code":
|
|
22
|
+
return block.value;
|
|
23
|
+
case "quote":
|
|
24
|
+
return block.blocks.map((child) => blockToPlain(child)).filter(Boolean).join("\n");
|
|
25
|
+
case "list":
|
|
26
|
+
return block.items.map((item, index) => listItemToPlain(item.blocks, block.ordered, block.start + index, item.checked)).join("\n");
|
|
27
|
+
case "rule":
|
|
28
|
+
return "";
|
|
29
|
+
case "table": {
|
|
30
|
+
const rows = [block.head, ...block.rows];
|
|
31
|
+
return rows.map((row) => row.map((cell) => inlineToPlain(cell).replaceAll("\t", " ")).join("\t")).join("\n");
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
/** Two spaces per level, so a nested list reads as nested without any markers. */
|
|
36
|
+
const LIST_INDENT = " ";
|
|
37
|
+
function listItemToPlain(blocks, ordered, number, checked) {
|
|
38
|
+
const head = blocks[0];
|
|
39
|
+
const lead = head?.kind === "paragraph" ? inlineToPlain(head.inline) : "";
|
|
40
|
+
const rest = blocks.slice(head?.kind === "paragraph" ? 1 : 0)
|
|
41
|
+
.map((block) => blockToPlain(block))
|
|
42
|
+
.filter(Boolean)
|
|
43
|
+
.map((text) => text.split("\n").map((line) => `${LIST_INDENT}${line}`).join("\n"))
|
|
44
|
+
.join("\n");
|
|
45
|
+
const mark = checked === undefined ? "" : checked ? "已完成 " : "未完成 ";
|
|
46
|
+
const prefix = ordered ? `${number}. ` : "• ";
|
|
47
|
+
return rest ? `${prefix}${mark}${lead}\n${rest}` : `${prefix}${mark}${lead}`;
|
|
48
|
+
}
|
|
49
|
+
function inlineToPlain(inline) {
|
|
50
|
+
return inline.map((part) => inlinePart(part)).join("");
|
|
51
|
+
}
|
|
52
|
+
function inlinePart(part) {
|
|
53
|
+
switch (part.kind) {
|
|
54
|
+
case "text":
|
|
55
|
+
case "code":
|
|
56
|
+
return part.value;
|
|
57
|
+
case "strong":
|
|
58
|
+
case "emphasis":
|
|
59
|
+
case "strike":
|
|
60
|
+
return inlineToPlain(part.children);
|
|
61
|
+
case "link": {
|
|
62
|
+
const label = inlineToPlain(part.children);
|
|
63
|
+
return label === part.href || label === "" ? part.href : `${label} (${part.href})`;
|
|
64
|
+
}
|
|
65
|
+
case "break":
|
|
66
|
+
return "\n";
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
//# sourceMappingURL=plain.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"plain.js","sourceRoot":"","sources":["../../src/articles/plain.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* In-memory draft of an article the model is still streaming into a tool call.
|
|
3
|
+
*
|
|
4
|
+
* The arguments are not a file yet — the tool has not run — but the panel
|
|
5
|
+
* should already be rendering them. Only metadata is published; the text stays
|
|
6
|
+
* here and is read back in slices, the same way an oversized message is.
|
|
7
|
+
*/
|
|
8
|
+
export interface ArticleDraftEdit {
|
|
9
|
+
find: string;
|
|
10
|
+
replace: string;
|
|
11
|
+
}
|
|
12
|
+
export interface ArticleDraft {
|
|
13
|
+
toolCallId: string;
|
|
14
|
+
sessionId: string;
|
|
15
|
+
action: "create" | "update";
|
|
16
|
+
title?: string;
|
|
17
|
+
articleId?: string;
|
|
18
|
+
/** A full draft of the document, written from the top. */
|
|
19
|
+
content?: string;
|
|
20
|
+
/** Local changes to the saved version, each with its `find` written in full. */
|
|
21
|
+
edits?: readonly ArticleDraftEdit[];
|
|
22
|
+
/** The last edit's replacement is still arriving. */
|
|
23
|
+
editOpen?: boolean;
|
|
24
|
+
}
|
|
25
|
+
export declare const ARTICLE_PREVIEW_INTERVAL_MS = 120;
|
|
26
|
+
export declare class ArticlePreviewBus {
|
|
27
|
+
#private;
|
|
28
|
+
private readonly publish;
|
|
29
|
+
private readonly clock;
|
|
30
|
+
constructor(publish?: (draft: ArticleDraft) => void, clock?: () => number);
|
|
31
|
+
/**
|
|
32
|
+
* Records the latest draft. Returns true when a preview is published now:
|
|
33
|
+
* the first time this call is seen, and at most once per interval after that.
|
|
34
|
+
* Identical repeats stay quiet so a token that did not extend the draft does
|
|
35
|
+
* not wake the panel. A suppressed change is published at the trailing edge,
|
|
36
|
+
* even when the provider pauses without sending another token.
|
|
37
|
+
*/
|
|
38
|
+
note(draft: ArticleDraft, now: number): boolean;
|
|
39
|
+
get(toolCallId: string): ArticleDraft | undefined;
|
|
40
|
+
clear(toolCallId: string): void;
|
|
41
|
+
clearSession(sessionId: string): void;
|
|
42
|
+
}
|
|
43
|
+
//# sourceMappingURL=preview.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"preview.d.ts","sourceRoot":"","sources":["../../src/articles/preview.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,YAAY;IAC3B,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,QAAQ,GAAG,QAAQ,CAAC;IAC5B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,0DAA0D;IAC1D,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,gFAAgF;IAChF,KAAK,CAAC,EAAE,SAAS,gBAAgB,EAAE,CAAC;IACpC,qDAAqD;IACrD,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED,eAAO,MAAM,2BAA2B,MAAM,CAAC;AAE/C,qBAAa,iBAAiB;;IAM1B,OAAO,CAAC,QAAQ,CAAC,OAAO;IACxB,OAAO,CAAC,QAAQ,CAAC,KAAK;gBADL,OAAO,GAAE,CAAC,KAAK,EAAE,YAAY,KAAK,IAAe,EACjD,KAAK,GAAE,MAAM,MAAiB;IAGjD;;;;;;OAMG;IACH,IAAI,CAAC,KAAK,EAAE,YAAY,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO;IA8B/C,GAAG,CAAC,UAAU,EAAE,MAAM,GAAG,YAAY,GAAG,SAAS;IAKjD,KAAK,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI;IAO/B,YAAY,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI;CAKtC"}
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* In-memory draft of an article the model is still streaming into a tool call.
|
|
3
|
+
*
|
|
4
|
+
* The arguments are not a file yet — the tool has not run — but the panel
|
|
5
|
+
* should already be rendering them. Only metadata is published; the text stays
|
|
6
|
+
* here and is read back in slices, the same way an oversized message is.
|
|
7
|
+
*/
|
|
8
|
+
export const ARTICLE_PREVIEW_INTERVAL_MS = 120;
|
|
9
|
+
export class ArticlePreviewBus {
|
|
10
|
+
publish;
|
|
11
|
+
clock;
|
|
12
|
+
#drafts = new Map();
|
|
13
|
+
#emittedAt = new Map();
|
|
14
|
+
#pending = new Map();
|
|
15
|
+
constructor(publish = () => { }, clock = Date.now) {
|
|
16
|
+
this.publish = publish;
|
|
17
|
+
this.clock = clock;
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* Records the latest draft. Returns true when a preview is published now:
|
|
21
|
+
* the first time this call is seen, and at most once per interval after that.
|
|
22
|
+
* Identical repeats stay quiet so a token that did not extend the draft does
|
|
23
|
+
* not wake the panel. A suppressed change is published at the trailing edge,
|
|
24
|
+
* even when the provider pauses without sending another token.
|
|
25
|
+
*/
|
|
26
|
+
note(draft, now) {
|
|
27
|
+
const previous = this.#drafts.get(draft.toolCallId);
|
|
28
|
+
this.#drafts.set(draft.toolCallId, draft);
|
|
29
|
+
if (previous && sameDraft(previous, draft))
|
|
30
|
+
return false;
|
|
31
|
+
const last = this.#emittedAt.get(draft.toolCallId);
|
|
32
|
+
if (last !== undefined && now - last < ARTICLE_PREVIEW_INTERVAL_MS) {
|
|
33
|
+
// A gateway can deliver a burst and then go quiet. Flush its last draft
|
|
34
|
+
// without requiring another token to arrive and wake the panel.
|
|
35
|
+
if (!this.#pending.has(draft.toolCallId)) {
|
|
36
|
+
const timer = setTimeout(() => {
|
|
37
|
+
this.#pending.delete(draft.toolCallId);
|
|
38
|
+
const latest = this.#drafts.get(draft.toolCallId);
|
|
39
|
+
if (latest)
|
|
40
|
+
this.#publish(latest, this.clock());
|
|
41
|
+
}, ARTICLE_PREVIEW_INTERVAL_MS - (now - last));
|
|
42
|
+
timer.unref();
|
|
43
|
+
this.#pending.set(draft.toolCallId, timer);
|
|
44
|
+
}
|
|
45
|
+
return false;
|
|
46
|
+
}
|
|
47
|
+
this.#publish(draft, now);
|
|
48
|
+
return true;
|
|
49
|
+
}
|
|
50
|
+
#publish(draft, now) {
|
|
51
|
+
clearTimeout(this.#pending.get(draft.toolCallId));
|
|
52
|
+
this.#pending.delete(draft.toolCallId);
|
|
53
|
+
this.#emittedAt.set(draft.toolCallId, now);
|
|
54
|
+
this.publish(draft);
|
|
55
|
+
}
|
|
56
|
+
get(toolCallId) {
|
|
57
|
+
const draft = this.#drafts.get(toolCallId);
|
|
58
|
+
return draft ? { ...draft } : undefined;
|
|
59
|
+
}
|
|
60
|
+
clear(toolCallId) {
|
|
61
|
+
clearTimeout(this.#pending.get(toolCallId));
|
|
62
|
+
this.#pending.delete(toolCallId);
|
|
63
|
+
this.#drafts.delete(toolCallId);
|
|
64
|
+
this.#emittedAt.delete(toolCallId);
|
|
65
|
+
}
|
|
66
|
+
clearSession(sessionId) {
|
|
67
|
+
for (const draft of this.#drafts.values()) {
|
|
68
|
+
if (draft.sessionId === sessionId)
|
|
69
|
+
this.clear(draft.toolCallId);
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
/**
|
|
74
|
+
* Arguments only ever grow while they stream, so an edit that kept its lengths
|
|
75
|
+
* kept its text; comparing lengths spares re-reading every quoted passage on
|
|
76
|
+
* every token.
|
|
77
|
+
*/
|
|
78
|
+
function sameDraft(before, after) {
|
|
79
|
+
return before.action === after.action
|
|
80
|
+
&& before.title === after.title
|
|
81
|
+
&& before.articleId === after.articleId
|
|
82
|
+
&& before.content === after.content
|
|
83
|
+
&& before.editOpen === after.editOpen
|
|
84
|
+
&& (before.edits?.length ?? -1) === (after.edits?.length ?? -1)
|
|
85
|
+
&& (before.edits ?? []).every((edit, index) => {
|
|
86
|
+
const next = after.edits?.[index];
|
|
87
|
+
return next !== undefined && next.find.length === edit.find.length && next.replace.length === edit.replace.length;
|
|
88
|
+
});
|
|
89
|
+
}
|
|
90
|
+
//# sourceMappingURL=preview.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"preview.js","sourceRoot":"","sources":["../../src/articles/preview.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* What an `article` tool call is allowed to put on the protocol.
|
|
3
|
+
*
|
|
4
|
+
* The arguments and a `read` result carry the whole document. Publishing that
|
|
5
|
+
* would drop it into the activity card and, past 64 KiB, into the truncation
|
|
6
|
+
* path that exists for ordinary messages. The panel reads the file itself.
|
|
7
|
+
* The model still receives the untouched tool result from Pi.
|
|
8
|
+
*/
|
|
9
|
+
export declare function publishedArticleValue(toolName: string, value: unknown): unknown;
|
|
10
|
+
//# sourceMappingURL=publish.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"publish.d.ts","sourceRoot":"","sources":["../../src/articles/publish.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAIH,wBAAgB,qBAAqB,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,GAAG,OAAO,CAI/E"}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* What an `article` tool call is allowed to put on the protocol.
|
|
3
|
+
*
|
|
4
|
+
* The arguments and a `read` result carry the whole document. Publishing that
|
|
5
|
+
* would drop it into the activity card and, past 64 KiB, into the truncation
|
|
6
|
+
* path that exists for ordinary messages. The panel reads the file itself.
|
|
7
|
+
* The model still receives the untouched tool result from Pi.
|
|
8
|
+
*/
|
|
9
|
+
const ARTICLE_HEAD_LINES = 4;
|
|
10
|
+
export function publishedArticleValue(toolName, value) {
|
|
11
|
+
if (toolName !== "article" || !isRecord(value))
|
|
12
|
+
return value;
|
|
13
|
+
if (Array.isArray(value["content"]))
|
|
14
|
+
return publishedResult(value);
|
|
15
|
+
return publishedInput(value);
|
|
16
|
+
}
|
|
17
|
+
function publishedInput(value) {
|
|
18
|
+
const next = { ...value };
|
|
19
|
+
if (typeof next["instruction"] === "string") {
|
|
20
|
+
next["instructionChars"] = next["instruction"].length;
|
|
21
|
+
delete next["instruction"];
|
|
22
|
+
}
|
|
23
|
+
if (typeof next["content"] === "string") {
|
|
24
|
+
next["contentChars"] = next["content"].length;
|
|
25
|
+
delete next["content"];
|
|
26
|
+
}
|
|
27
|
+
if (Array.isArray(next["edits"])) {
|
|
28
|
+
next["editCount"] = next["edits"].length;
|
|
29
|
+
delete next["edits"];
|
|
30
|
+
}
|
|
31
|
+
return next;
|
|
32
|
+
}
|
|
33
|
+
function publishedResult(value) {
|
|
34
|
+
const content = value["content"];
|
|
35
|
+
if (!Array.isArray(content))
|
|
36
|
+
return value;
|
|
37
|
+
const details = isRecord(value["details"]) ? { ...value["details"] } : undefined;
|
|
38
|
+
if (details)
|
|
39
|
+
delete details["articleDraft"];
|
|
40
|
+
return {
|
|
41
|
+
...value,
|
|
42
|
+
...(details ? { details } : {}),
|
|
43
|
+
content: content.map((block) => {
|
|
44
|
+
if (!isRecord(block) || typeof block["text"] !== "string")
|
|
45
|
+
return block;
|
|
46
|
+
const head = block["text"].split("\n").slice(0, ARTICLE_HEAD_LINES).join("\n");
|
|
47
|
+
return head === block["text"] ? block : { ...block, text: head };
|
|
48
|
+
}),
|
|
49
|
+
};
|
|
50
|
+
}
|
|
51
|
+
function isRecord(value) {
|
|
52
|
+
return typeof value === "object" && value !== null && !Array.isArray(value);
|
|
53
|
+
}
|
|
54
|
+
//# sourceMappingURL=publish.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"publish.js","sourceRoot":"","sources":["../../src/articles/publish.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,MAAM,kBAAkB,GAAG,CAAC,CAAC;AAE7B,MAAM,UAAU,qBAAqB,CAAC,QAAgB,EAAE,KAAc;IACpE,IAAI,QAAQ,KAAK,SAAS,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC;QAAE,OAAO,KAAK,CAAC;IAC7D,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;QAAE,OAAO,eAAe,CAAC,KAAK,CAAC,CAAC;IACnE,OAAO,cAAc,CAAC,KAAK,CAAC,CAAC;AAC/B,CAAC;AAED,SAAS,cAAc,CAAC,KAA8B;IACpD,MAAM,IAAI,GAA4B,EAAE,GAAG,KAAK,EAAE,CAAC;IACnD,IAAI,OAAO,IAAI,CAAC,aAAa,CAAC,KAAK,QAAQ,EAAE,CAAC;QAC5C,IAAI,CAAC,kBAAkB,CAAC,GAAG,IAAI,CAAC,aAAa,CAAC,CAAC,MAAM,CAAC;QACtD,OAAO,IAAI,CAAC,aAAa,CAAC,CAAC;IAC7B,CAAC;IACD,IAAI,OAAO,IAAI,CAAC,SAAS,CAAC,KAAK,QAAQ,EAAE,CAAC;QACxC,IAAI,CAAC,cAAc,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,MAAM,CAAC;QAC9C,OAAO,IAAI,CAAC,SAAS,CAAC,CAAC;IACzB,CAAC;IACD,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC;QACjC,IAAI,CAAC,WAAW,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC;QACzC,OAAO,IAAI,CAAC,OAAO,CAAC,CAAC;IACvB,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,SAAS,eAAe,CAAC,KAA8B;IACrD,MAAM,OAAO,GAAG,KAAK,CAAC,SAAS,CAAC,CAAC;IACjC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC;QAAE,OAAO,KAAK,CAAC;IAC1C,MAAM,OAAO,GAAG,QAAQ,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,KAAK,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;IACjF,IAAI,OAAO;QAAE,OAAO,OAAO,CAAC,cAAc,CAAC,CAAC;IAC5C,OAAO;QACL,GAAG,KAAK;QACR,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC/B,OAAO,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC,KAAc,EAAE,EAAE;YACtC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,OAAO,KAAK,CAAC,MAAM,CAAC,KAAK,QAAQ;gBAAE,OAAO,KAAK,CAAC;YACxE,MAAM,IAAI,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,kBAAkB,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAC/E,OAAO,IAAI,KAAK,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,GAAG,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;QACnE,CAAC,CAAC;KACH,CAAC;AACJ,CAAC;AAED,SAAS,QAAQ,CAAC,KAAc;IAC9B,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;AAC9E,CAAC"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
/** First line of every `article` tool result. The panel and the chat card both key off it. */
|
|
2
|
+
export declare const ARTICLE_RECEIPT: RegExp;
|
|
3
|
+
export interface ArticleReceipt {
|
|
4
|
+
id: string;
|
|
5
|
+
version: number;
|
|
6
|
+
title?: string;
|
|
7
|
+
}
|
|
8
|
+
export interface ArticleOpenReceipt {
|
|
9
|
+
title: string;
|
|
10
|
+
id?: string;
|
|
11
|
+
version?: number;
|
|
12
|
+
}
|
|
13
|
+
/** A preparation call opens the surface without pretending a version was saved. */
|
|
14
|
+
export declare function parseArticleOpenReceipt(text: string): ArticleOpenReceipt | undefined;
|
|
15
|
+
export declare function parseArticleReceipt(text: string): ArticleReceipt | undefined;
|
|
16
|
+
//# sourceMappingURL=receipt.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"receipt.d.ts","sourceRoot":"","sources":["../../src/articles/receipt.ts"],"names":[],"mappings":"AAAA,8FAA8F;AAC9F,eAAO,MAAM,eAAe,QAA+C,CAAC;AAE5E,MAAM,WAAW,cAAc;IAC7B,EAAE,EAAE,MAAM,CAAC;IACX,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,kBAAkB;IACjC,KAAK,EAAE,MAAM,CAAC;IACd,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,mFAAmF;AACnF,wBAAgB,uBAAuB,CAAC,IAAI,EAAE,MAAM,GAAG,kBAAkB,GAAG,SAAS,CAMpF;AAED,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,MAAM,GAAG,cAAc,GAAG,SAAS,CAY5E"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
/** First line of every `article` tool result. The panel and the chat card both key off it. */
|
|
2
|
+
export const ARTICLE_RECEIPT = /^article (art_[a-f0-9]{12}) version (\d+)$/;
|
|
3
|
+
/** A preparation call opens the surface without pretending a version was saved. */
|
|
4
|
+
export function parseArticleOpenReceipt(text) {
|
|
5
|
+
const [head, titleLine] = text.split("\n");
|
|
6
|
+
const match = /^article open(?: (art_[a-f0-9]{12}) version ([1-9]\d*))?$/.exec(head?.trim() ?? "");
|
|
7
|
+
const title = titleLine?.startsWith("标题:") ? titleLine.slice("标题:".length).trim() : undefined;
|
|
8
|
+
if (!match || !title)
|
|
9
|
+
return undefined;
|
|
10
|
+
return { title, ...(match[1] ? { id: match[1], version: Number(match[2]) } : {}) };
|
|
11
|
+
}
|
|
12
|
+
export function parseArticleReceipt(text) {
|
|
13
|
+
const [head, titleLine] = text.split("\n");
|
|
14
|
+
const match = ARTICLE_RECEIPT.exec(head?.trim() ?? "");
|
|
15
|
+
if (!match)
|
|
16
|
+
return undefined;
|
|
17
|
+
const version = Number(match[2]);
|
|
18
|
+
if (!Number.isInteger(version) || version < 1)
|
|
19
|
+
return undefined;
|
|
20
|
+
const title = titleLine?.startsWith("标题:") ? titleLine.slice("标题:".length).trim() : undefined;
|
|
21
|
+
return {
|
|
22
|
+
id: match[1] ?? "",
|
|
23
|
+
version,
|
|
24
|
+
...(title ? { title } : {}),
|
|
25
|
+
};
|
|
26
|
+
}
|
|
27
|
+
//# sourceMappingURL=receipt.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"receipt.js","sourceRoot":"","sources":["../../src/articles/receipt.ts"],"names":[],"mappings":"AAAA,8FAA8F;AAC9F,MAAM,CAAC,MAAM,eAAe,GAAG,4CAA4C,CAAC;AAc5E,mFAAmF;AACnF,MAAM,UAAU,uBAAuB,CAAC,IAAY;IAClD,MAAM,CAAC,IAAI,EAAE,SAAS,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAC3C,MAAM,KAAK,GAAG,2DAA2D,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;IACnG,MAAM,KAAK,GAAG,SAAS,EAAE,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;IAC9F,IAAI,CAAC,KAAK,IAAI,CAAC,KAAK;QAAE,OAAO,SAAS,CAAC;IACvC,OAAO,EAAE,KAAK,EAAE,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC;AACrF,CAAC;AAED,MAAM,UAAU,mBAAmB,CAAC,IAAY;IAC9C,MAAM,CAAC,IAAI,EAAE,SAAS,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAC3C,MAAM,KAAK,GAAG,eAAe,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;IACvD,IAAI,CAAC,KAAK;QAAE,OAAO,SAAS,CAAC;IAC7B,MAAM,OAAO,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;IACjC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,OAAO,CAAC,IAAI,OAAO,GAAG,CAAC;QAAE,OAAO,SAAS,CAAC;IAChE,MAAM,KAAK,GAAG,SAAS,EAAE,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;IAC9F,OAAO;QACL,EAAE,EAAE,KAAK,CAAC,CAAC,CAAC,IAAI,EAAE;QAClB,OAAO;QACP,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KAC5B,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
import { type ArticleEdit } from "./edits.js";
|
|
2
|
+
export type { ArticleEdit } from "./edits.js";
|
|
3
|
+
/** `art_` plus 12 hex characters. Short enough to say, long enough not to guess. */
|
|
4
|
+
export declare const ARTICLE_ID_PATTERN: RegExp;
|
|
5
|
+
/** A long article, not a book. Past this the tool asks for a tighter draft. */
|
|
6
|
+
export declare const MAX_ARTICLE_CHARS = 400000;
|
|
7
|
+
/** Versions kept for one article. Each one is a full snapshot so any of them can be reopened. */
|
|
8
|
+
export declare const MAX_ARTICLE_VERSIONS = 100;
|
|
9
|
+
export interface ArticleVersionInfo {
|
|
10
|
+
version: number;
|
|
11
|
+
createdAt: string;
|
|
12
|
+
chars: number;
|
|
13
|
+
sha256: string;
|
|
14
|
+
}
|
|
15
|
+
export interface ArticleSummary {
|
|
16
|
+
id: string;
|
|
17
|
+
title: string;
|
|
18
|
+
sessionId: string;
|
|
19
|
+
version: number;
|
|
20
|
+
chars: number;
|
|
21
|
+
updatedAt: string;
|
|
22
|
+
}
|
|
23
|
+
export interface ArticleCommit {
|
|
24
|
+
id: string;
|
|
25
|
+
title: string;
|
|
26
|
+
version: number;
|
|
27
|
+
chars: number;
|
|
28
|
+
added: number;
|
|
29
|
+
removed: number;
|
|
30
|
+
/** Unchanged content reuses the current version instead of appending an empty one. */
|
|
31
|
+
unchanged: boolean;
|
|
32
|
+
path: string;
|
|
33
|
+
}
|
|
34
|
+
export interface ArticleDocument {
|
|
35
|
+
id: string;
|
|
36
|
+
title: string;
|
|
37
|
+
sessionId: string;
|
|
38
|
+
version: number;
|
|
39
|
+
versions: readonly ArticleVersionInfo[];
|
|
40
|
+
offset: number;
|
|
41
|
+
length: number;
|
|
42
|
+
text: string;
|
|
43
|
+
}
|
|
44
|
+
export declare class ArticleStore {
|
|
45
|
+
#private;
|
|
46
|
+
constructor(root: string, clock?: () => Date, idFactory?: () => string);
|
|
47
|
+
get root(): string;
|
|
48
|
+
ready(): Promise<void>;
|
|
49
|
+
create(input: {
|
|
50
|
+
sessionId: string;
|
|
51
|
+
title: string;
|
|
52
|
+
content: string;
|
|
53
|
+
}): Promise<ArticleCommit>;
|
|
54
|
+
update(input: {
|
|
55
|
+
sessionId: string;
|
|
56
|
+
id: string;
|
|
57
|
+
title?: string;
|
|
58
|
+
content?: string;
|
|
59
|
+
edits?: readonly ArticleEdit[];
|
|
60
|
+
}): Promise<ArticleCommit>;
|
|
61
|
+
read(input: {
|
|
62
|
+
sessionId: string;
|
|
63
|
+
id: string;
|
|
64
|
+
version?: number;
|
|
65
|
+
offset?: number;
|
|
66
|
+
limit: number;
|
|
67
|
+
}): Promise<ArticleDocument | undefined>;
|
|
68
|
+
/** Absolute path of one immutable version file, after it has been checked to stay inside the store. */
|
|
69
|
+
versionPath(id: string, version: number): Promise<string>;
|
|
70
|
+
readVersion(id: string, version?: number): Promise<{
|
|
71
|
+
title: string;
|
|
72
|
+
version: number;
|
|
73
|
+
content: string;
|
|
74
|
+
} | undefined>;
|
|
75
|
+
list(sessionId: string): Promise<ArticleSummary[]>;
|
|
76
|
+
}
|
|
77
|
+
export declare function cleanTitle(title: string): string;
|
|
78
|
+
//# sourceMappingURL=store.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"store.d.ts","sourceRoot":"","sources":["../../src/articles/store.ts"],"names":[],"mappings":"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"}
|