@xopcai/xopc 0.0.29 → 0.0.31
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/dist/extensions/telegram/src/adapters/config-surface.js +3 -1
- package/dist/extensions/telegram/src/adapters/config-surface.js.map +1 -1
- package/dist/extensions/telegram/src/adapters/onboard-cli.js +23 -21
- package/dist/extensions/telegram/src/adapters/onboard-cli.js.map +1 -1
- package/dist/extensions/telegram/src/adapters/setup-wizard.js +3 -4
- package/dist/extensions/telegram/src/adapters/setup-wizard.js.map +1 -1
- package/dist/extensions/telegram/src/config-schema.d.ts +0 -1
- package/dist/extensions/telegram/src/config-schema.js +17 -4
- package/dist/extensions/telegram/src/config-schema.js.map +1 -1
- package/dist/extensions/telegram/src/plugin.js +4 -17
- package/dist/extensions/telegram/src/plugin.js.map +1 -1
- package/dist/extensions/telegram/xopc.extension.json +1 -1
- package/dist/extensions/weixin/src/cdn/upload.js +1 -1
- package/dist/extensions/weixin/src/media/data-url.js +1 -1
- package/dist/extensions/weixin/src/messaging/process-message.js +1 -1
- package/dist/gateway/static/root/assets/agents-3u63Fw2Y.js +216 -0
- package/dist/gateway/static/root/assets/agents-3u63Fw2Y.js.map +1 -0
- package/dist/gateway/static/root/assets/{apps-page-Bmq19MS-.js → apps-page-CWegY6Kp.js} +2 -2
- package/dist/gateway/static/root/assets/{apps-page-Bmq19MS-.js.map → apps-page-CWegY6Kp.js.map} +1 -1
- package/dist/gateway/static/root/assets/channels-settings-CiyeXcTK.js +9 -0
- package/dist/gateway/static/root/assets/channels-settings-CiyeXcTK.js.map +1 -0
- package/dist/gateway/static/root/assets/cron-api-_j_79Zf5.js +3 -0
- package/dist/gateway/static/root/assets/cron-api-_j_79Zf5.js.map +1 -0
- package/dist/gateway/static/root/assets/cron-page-S86YNTtI.js +2 -0
- package/dist/gateway/static/root/assets/cron-page-S86YNTtI.js.map +1 -0
- package/dist/gateway/static/root/assets/dist-D0jxbvuz.js +2 -0
- package/dist/gateway/static/root/assets/{dist--p2HQ2QF.js.map → dist-D0jxbvuz.js.map} +1 -1
- package/dist/gateway/static/root/assets/{extension-debug-page-DwHCB_6T.js → extension-debug-page-DB630cW8.js} +2 -2
- package/dist/gateway/static/root/assets/{extension-debug-page-DwHCB_6T.js.map → extension-debug-page-DB630cW8.js.map} +1 -1
- package/dist/gateway/static/root/assets/{extension-page-BsYwQIex.js → extension-page-CnoPUBul.js} +2 -2
- package/dist/gateway/static/root/assets/{extension-page-BsYwQIex.js.map → extension-page-CnoPUBul.js.map} +1 -1
- package/dist/gateway/static/root/assets/{extension-settings-page-nsisEgjB.js → extension-settings-page-BsiOkvBe.js} +2 -2
- package/dist/gateway/static/root/assets/{extension-settings-page-nsisEgjB.js.map → extension-settings-page-BsiOkvBe.js.map} +1 -1
- package/dist/gateway/static/root/assets/{index-CR8zUHGR.js → index-DHLmAIQl.js} +63 -63
- package/dist/gateway/static/root/assets/{index-CR8zUHGR.js.map → index-DHLmAIQl.js.map} +1 -1
- package/dist/gateway/static/root/assets/index-DoPwy4aU.css +1 -0
- package/dist/gateway/static/root/assets/logs-page-Bndhenn2.js +2 -0
- package/dist/gateway/static/root/assets/logs-page-Bndhenn2.js.map +1 -0
- package/dist/gateway/static/root/assets/sessions-page-Q201-_lP.js +2 -0
- package/dist/gateway/static/root/assets/{sessions-page-Be5kIGl_.js.map → sessions-page-Q201-_lP.js.map} +1 -1
- package/dist/gateway/static/root/assets/settings-page-Cw75fpc6.js +2 -0
- package/dist/gateway/static/root/assets/settings-page-Cw75fpc6.js.map +1 -0
- package/dist/gateway/static/root/assets/skills-page-CVwEzD_J.js +3 -0
- package/dist/gateway/static/root/assets/skills-page-CVwEzD_J.js.map +1 -0
- package/dist/gateway/static/root/index.html +2 -2
- package/dist/package.js +1 -1
- package/dist/src/agent/agent-manager.d.ts +5 -7
- package/dist/src/agent/agent-manager.js +21 -19
- package/dist/src/agent/agent-manager.js.map +1 -1
- package/dist/src/agent/ipc/inbox.js +4 -2
- package/dist/src/agent/ipc/inbox.js.map +1 -1
- package/dist/src/agent/memory/dreaming/short-term-store.js +1 -1
- package/dist/src/agent/memory/dreaming/utils.js +1 -1
- package/dist/src/agent/orchestration/agent-orchestrator.js +1 -1
- package/dist/src/agent/prompt/service-prompt-builder.js +0 -2
- package/dist/src/agent/prompt/service-prompt-builder.js.map +1 -1
- package/dist/src/agent/prompt/system-prompt.d.ts +0 -2
- package/dist/src/agent/prompt/system-prompt.js +3 -17
- package/dist/src/agent/prompt/system-prompt.js.map +1 -1
- package/dist/src/agent/service/btw-query.d.ts +16 -0
- package/dist/src/agent/service/btw-query.js +88 -0
- package/dist/src/agent/service/btw-query.js.map +1 -0
- package/dist/src/agent/service/build-direct-message-content.d.ts +30 -0
- package/dist/src/agent/service/build-direct-message-content.js +75 -0
- package/dist/src/agent/service/build-direct-message-content.js.map +1 -0
- package/dist/src/agent/service/parse-outbound-session-key.d.ts +8 -0
- package/dist/src/agent/service/parse-outbound-session-key.js +41 -0
- package/dist/src/agent/service/parse-outbound-session-key.js.map +1 -0
- package/dist/src/agent/service/process-direct-one-shot.d.ts +34 -0
- package/dist/src/agent/service/process-direct-one-shot.js +67 -0
- package/dist/src/agent/service/process-direct-one-shot.js.map +1 -0
- package/dist/src/agent/service/process-direct-streaming.js +12 -1
- package/dist/src/agent/service/process-direct-streaming.js.map +1 -1
- package/dist/src/agent/service/reconcile-dreaming-cron.d.ts +6 -0
- package/dist/src/agent/service/reconcile-dreaming-cron.js +70 -0
- package/dist/src/agent/service/reconcile-dreaming-cron.js.map +1 -0
- package/dist/src/agent/service/session-context-report.d.ts +19 -0
- package/dist/src/agent/service/session-context-report.js +47 -0
- package/dist/src/agent/service/session-context-report.js.map +1 -0
- package/dist/src/agent/service/webchat-tts.d.ts +28 -0
- package/dist/src/agent/service/webchat-tts.js +73 -0
- package/dist/src/agent/service/webchat-tts.js.map +1 -0
- package/dist/src/agent/service.d.ts +8 -12
- package/dist/src/agent/service.js +74 -379
- package/dist/src/agent/service.js.map +1 -1
- package/dist/src/agent/skills/config.js +4 -3
- package/dist/src/agent/skills/config.js.map +1 -1
- package/dist/src/agent/skills/format-skills-prompt.d.ts +0 -2
- package/dist/src/agent/skills/format-skills-prompt.js +3 -24
- package/dist/src/agent/skills/format-skills-prompt.js.map +1 -1
- package/dist/src/agent/skills/hub-lock.js +4 -5
- package/dist/src/agent/skills/hub-lock.js.map +1 -1
- package/dist/src/agent/skills/index.js +9 -21
- package/dist/src/agent/skills/index.js.map +1 -1
- package/dist/src/agent/skills/marketplace/adapter.types.d.ts +17 -0
- package/dist/src/agent/skills/marketplace/adapter.types.js +1 -0
- package/dist/src/agent/skills/marketplace/adapters/skillhub/adapter.d.ts +2 -0
- package/dist/src/agent/skills/marketplace/adapters/skillhub/adapter.js +292 -0
- package/dist/src/agent/skills/marketplace/adapters/skillhub/adapter.js.map +1 -0
- package/dist/src/agent/skills/marketplace/adapters/skillhub/ecosystem-client.d.ts +73 -0
- package/dist/src/agent/skills/marketplace/adapters/skillhub/ecosystem-client.js +200 -0
- package/dist/src/agent/skills/marketplace/adapters/skillhub/ecosystem-client.js.map +1 -0
- package/dist/src/agent/skills/marketplace/adapters/skillhub/registry-client.d.ts +137 -0
- package/dist/src/agent/skills/marketplace/adapters/skillhub/registry-client.js +217 -0
- package/dist/src/agent/skills/marketplace/adapters/skillhub/registry-client.js.map +1 -0
- package/dist/src/agent/skills/marketplace/adapters/skillhub/skillhub-fetch-cache.d.ts +12 -0
- package/dist/src/agent/skills/marketplace/adapters/skillhub/skillhub-fetch-cache.js +90 -0
- package/dist/src/agent/skills/marketplace/adapters/skillhub/skillhub-fetch-cache.js.map +1 -0
- package/dist/src/agent/skills/marketplace/adapters/store/adapter.d.ts +2 -0
- package/dist/src/agent/skills/marketplace/adapters/store/adapter.js +35 -0
- package/dist/src/agent/skills/marketplace/adapters/store/adapter.js.map +1 -0
- package/dist/src/agent/skills/marketplace/adapters/store/store-api-client.d.ts +124 -0
- package/dist/src/agent/skills/{skills-store-client.js → marketplace/adapters/store/store-api-client.js} +4 -3
- package/dist/src/agent/skills/marketplace/adapters/store/store-api-client.js.map +1 -0
- package/dist/src/agent/skills/marketplace/resolve-adapter.d.ts +6 -0
- package/dist/src/agent/skills/marketplace/resolve-adapter.js +26 -0
- package/dist/src/agent/skills/marketplace/resolve-adapter.js.map +1 -0
- package/dist/src/agent/skills/parse-skill-metadata.d.ts +5 -0
- package/dist/src/agent/skills/parse-skill-metadata.js +27 -0
- package/dist/src/agent/skills/parse-skill-metadata.js.map +1 -0
- package/dist/src/agent/skills/skill-markdown-preview-from-raw.d.ts +6 -0
- package/dist/src/agent/skills/skill-markdown-preview-from-raw.js +64 -0
- package/dist/src/agent/skills/skill-markdown-preview-from-raw.js.map +1 -0
- package/dist/src/agent/skills/skill-view-path.d.ts +17 -1
- package/dist/src/agent/skills/skill-view-path.js +66 -3
- package/dist/src/agent/skills/skill-view-path.js.map +1 -1
- package/dist/src/agent/skills/skills-marketplace.d.ts +21 -0
- package/dist/src/agent/skills/skills-marketplace.js +18 -0
- package/dist/src/agent/skills/skills-marketplace.js.map +1 -0
- package/dist/src/agent/skills/test-framework.d.ts +0 -1
- package/dist/src/agent/skills/test-framework.js +2 -20
- package/dist/src/agent/skills/test-framework.js.map +1 -1
- package/dist/src/agent/skills/types.d.ts +12 -6
- package/dist/src/agent/tools/dreaming-tool.js +1 -1
- package/dist/src/agent/tools/image-generate-tool.js +2 -2
- package/dist/src/auth/credentials.js +8 -6
- package/dist/src/auth/credentials.js.map +1 -1
- package/dist/src/auth/profiles/store.js +5 -3
- package/dist/src/auth/profiles/store.js.map +1 -1
- package/dist/src/channels/manager.js +1 -1
- package/dist/src/channels/outbound/persist-store.js +4 -4
- package/dist/src/channels/outbound/persist-store.js.map +1 -1
- package/dist/src/cli/commands/config.js +8 -6
- package/dist/src/cli/commands/config.js.map +1 -1
- package/dist/src/cli/commands/doctor/checks/channel-config.js +3 -4
- package/dist/src/cli/commands/doctor/checks/channel-config.js.map +1 -1
- package/dist/src/cli/commands/init.js +4 -2
- package/dist/src/cli/commands/init.js.map +1 -1
- package/dist/src/config/loader.js +3 -1
- package/dist/src/config/loader.js.map +1 -1
- package/dist/src/config/models-json.js +4 -5
- package/dist/src/config/models-json.js.map +1 -1
- package/dist/src/config/schema.d.ts +12 -4
- package/dist/src/config/schema.js +31 -5
- package/dist/src/config/schema.js.map +1 -1
- package/dist/src/cron/persistence.d.ts +1 -3
- package/dist/src/cron/persistence.js +6 -17
- package/dist/src/cron/persistence.js.map +1 -1
- package/dist/src/cron/validation.js +1 -1
- package/dist/src/cron/validation.js.map +1 -1
- package/dist/src/extensions/activation-context.js +0 -1
- package/dist/src/extensions/activation-context.js.map +1 -1
- package/dist/src/extensions/lockfile.js +4 -2
- package/dist/src/extensions/lockfile.js.map +1 -1
- package/dist/src/gateway/auth.d.ts +0 -9
- package/dist/src/gateway/auth.js +1 -12
- package/dist/src/gateway/auth.js.map +1 -1
- package/dist/src/gateway/hono/lib/config-payload.d.ts +1 -1
- package/dist/src/gateway/hono/lib/extension-store.js +4 -4
- package/dist/src/gateway/hono/lib/extension-store.js.map +1 -1
- package/dist/src/gateway/hono/routes/channels.js +5 -3
- package/dist/src/gateway/hono/routes/channels.js.map +1 -1
- package/dist/src/gateway/hono/routes/commands-skills.js +28 -3
- package/dist/src/gateway/hono/routes/commands-skills.js.map +1 -1
- package/dist/src/gateway/hono/routes/config.js +23 -2
- package/dist/src/gateway/hono/routes/config.js.map +1 -1
- package/dist/src/gateway/hono/routes/sessions.js +124 -2
- package/dist/src/gateway/hono/routes/sessions.js.map +1 -1
- package/dist/src/gateway/hono/sse.js +9 -2
- package/dist/src/gateway/hono/sse.js.map +1 -1
- package/dist/src/gateway/index.js +2 -2
- package/dist/src/gateway/lock.js +1 -1
- package/dist/src/gateway/service/run-gateway-agent.d.ts +37 -0
- package/dist/src/gateway/service/run-gateway-agent.js +163 -0
- package/dist/src/gateway/service/run-gateway-agent.js.map +1 -0
- package/dist/src/gateway/service/save-webchat-user-message.d.ts +9 -0
- package/dist/src/gateway/service/save-webchat-user-message.js +34 -0
- package/dist/src/gateway/service/save-webchat-user-message.js.map +1 -0
- package/dist/src/gateway/service/session-chat-ids.d.ts +9 -0
- package/dist/src/gateway/service/session-chat-ids.js +33 -0
- package/dist/src/gateway/service/session-chat-ids.js.map +1 -0
- package/dist/src/gateway/service/sse-hub.d.ts +10 -0
- package/dist/src/gateway/service/sse-hub.js +55 -0
- package/dist/src/gateway/service/sse-hub.js.map +1 -0
- package/dist/src/gateway/service/types.d.ts +9 -0
- package/dist/src/gateway/service/types.js +1 -0
- package/dist/src/gateway/service.d.ts +42 -33
- package/dist/src/gateway/service.js +92 -246
- package/dist/src/gateway/service.js.map +1 -1
- package/dist/src/infra/update-lock.js +4 -2
- package/dist/src/infra/update-lock.js.map +1 -1
- package/dist/src/infra/update-startup.js +5 -14
- package/dist/src/infra/update-startup.js.map +1 -1
- package/dist/src/infra/write-file-atomic.d.ts +18 -0
- package/dist/src/infra/write-file-atomic.js +115 -0
- package/dist/src/infra/write-file-atomic.js.map +1 -0
- package/dist/src/session/abort-cutoff.d.ts +6 -0
- package/dist/src/session/abort-cutoff.js +10 -0
- package/dist/src/session/abort-cutoff.js.map +1 -0
- package/dist/src/session/compaction-checkpoints.d.ts +8 -0
- package/dist/src/session/compaction-checkpoints.js +21 -0
- package/dist/src/session/compaction-checkpoints.js.map +1 -0
- package/dist/src/session/config-store.js +4 -2
- package/dist/src/session/config-store.js.map +1 -1
- package/dist/src/session/index.d.ts +8 -1
- package/dist/src/session/index.js +7 -1
- package/dist/src/session/manager.d.ts +26 -1
- package/dist/src/session/manager.js +39 -2
- package/dist/src/session/manager.js.map +1 -1
- package/dist/src/session/patch-metadata.d.ts +12 -0
- package/dist/src/session/patch-metadata.js +23 -0
- package/dist/src/session/patch-metadata.js.map +1 -0
- package/dist/src/session/search-index.d.ts +2 -0
- package/dist/src/session/search-index.js +30 -2
- package/dist/src/session/search-index.js.map +1 -1
- package/dist/src/session/session-context-for-llm.d.ts +32 -0
- package/dist/src/session/session-context-for-llm.js +60 -0
- package/dist/src/session/session-context-for-llm.js.map +1 -0
- package/dist/src/session/store.d.ts +53 -2
- package/dist/src/session/store.js +427 -145
- package/dist/src/session/store.js.map +1 -1
- package/dist/src/session/strip-webchat-early-save.d.ts +5 -0
- package/dist/src/session/strip-webchat-early-save.js +17 -0
- package/dist/src/session/strip-webchat-early-save.js.map +1 -0
- package/dist/src/session/transcript-format.d.ts +46 -0
- package/dist/src/session/transcript-format.js +88 -0
- package/dist/src/session/transcript-format.js.map +1 -0
- package/dist/src/session/types.d.ts +37 -0
- package/dist/src/session/types.js.map +1 -1
- package/dist/src/utils/logger/log-store.js +4 -3
- package/dist/src/utils/logger/log-store.js.map +1 -1
- package/dist/src/voice/tts/merge-config.js +0 -1
- package/dist/src/voice/tts/merge-config.js.map +1 -1
- package/dist/src/voice/tts/service.js +1 -2
- package/dist/src/voice/tts/service.js.map +1 -1
- package/package.json +1 -1
- package/skills/business/company-values/SKILL-zh.md +80 -0
- package/skills/business/company-values/SKILL.md +80 -0
- package/skills/business/find-community/SKILL-zh.md +50 -0
- package/skills/business/find-community/SKILL.md +50 -0
- package/skills/business/first-customers/SKILL-zh.md +76 -0
- package/skills/business/first-customers/SKILL.md +76 -0
- package/skills/business/grow-sustainably/SKILL-zh.md +92 -0
- package/skills/business/grow-sustainably/SKILL.md +92 -0
- package/skills/business/marketing-plan/SKILL-zh.md +100 -0
- package/skills/business/marketing-plan/SKILL.md +100 -0
- package/skills/business/minimalist-review/SKILL-zh.md +82 -0
- package/skills/business/minimalist-review/SKILL.md +82 -0
- package/skills/business/mvp/SKILL-zh.md +81 -0
- package/skills/business/mvp/SKILL.md +81 -0
- package/skills/business/pricing/SKILL-zh.md +64 -0
- package/skills/business/pricing/SKILL.md +64 -0
- package/skills/business/processize/SKILL-zh.md +91 -0
- package/skills/business/processize/SKILL.md +91 -0
- package/skills/business/validate-idea/SKILL-zh.md +68 -0
- package/skills/business/validate-idea/SKILL.md +68 -0
- package/skills/{skill-creator → creative/algorithmic-art}/LICENSE.txt +1 -1
- package/skills/creative/algorithmic-art/SKILL-zh.md +405 -0
- package/skills/creative/algorithmic-art/SKILL.md +405 -0
- package/skills/creative/algorithmic-art/templates/generator_template.js +223 -0
- package/skills/creative/algorithmic-art/templates/viewer.html +599 -0
- package/skills/creative/canvas-design/LICENSE.txt +202 -0
- package/skills/creative/canvas-design/SKILL-zh.md +130 -0
- package/skills/creative/canvas-design/SKILL.md +130 -0
- package/skills/creative/canvas-design/canvas-fonts/ArsenalSC-OFL.txt +93 -0
- package/skills/creative/canvas-design/canvas-fonts/ArsenalSC-Regular.ttf +0 -0
- package/skills/creative/canvas-design/canvas-fonts/BigShoulders-Bold.ttf +0 -0
- package/skills/creative/canvas-design/canvas-fonts/BigShoulders-OFL.txt +93 -0
- package/skills/creative/canvas-design/canvas-fonts/BigShoulders-Regular.ttf +0 -0
- package/skills/creative/canvas-design/canvas-fonts/Boldonse-OFL.txt +93 -0
- package/skills/creative/canvas-design/canvas-fonts/Boldonse-Regular.ttf +0 -0
- package/skills/creative/canvas-design/canvas-fonts/BricolageGrotesque-Bold.ttf +0 -0
- package/skills/creative/canvas-design/canvas-fonts/BricolageGrotesque-OFL.txt +93 -0
- package/skills/creative/canvas-design/canvas-fonts/BricolageGrotesque-Regular.ttf +0 -0
- package/skills/creative/canvas-design/canvas-fonts/CrimsonPro-Bold.ttf +0 -0
- package/skills/creative/canvas-design/canvas-fonts/CrimsonPro-Italic.ttf +0 -0
- package/skills/creative/canvas-design/canvas-fonts/CrimsonPro-OFL.txt +93 -0
- package/skills/creative/canvas-design/canvas-fonts/CrimsonPro-Regular.ttf +0 -0
- package/skills/creative/canvas-design/canvas-fonts/DMMono-OFL.txt +93 -0
- package/skills/creative/canvas-design/canvas-fonts/DMMono-Regular.ttf +0 -0
- package/skills/creative/canvas-design/canvas-fonts/EricaOne-OFL.txt +94 -0
- package/skills/creative/canvas-design/canvas-fonts/EricaOne-Regular.ttf +0 -0
- package/skills/creative/canvas-design/canvas-fonts/GeistMono-Bold.ttf +0 -0
- package/skills/creative/canvas-design/canvas-fonts/GeistMono-OFL.txt +93 -0
- package/skills/creative/canvas-design/canvas-fonts/GeistMono-Regular.ttf +0 -0
- package/skills/creative/canvas-design/canvas-fonts/Gloock-OFL.txt +93 -0
- package/skills/creative/canvas-design/canvas-fonts/Gloock-Regular.ttf +0 -0
- package/skills/creative/canvas-design/canvas-fonts/IBMPlexMono-Bold.ttf +0 -0
- package/skills/creative/canvas-design/canvas-fonts/IBMPlexMono-OFL.txt +93 -0
- package/skills/creative/canvas-design/canvas-fonts/IBMPlexMono-Regular.ttf +0 -0
- package/skills/creative/canvas-design/canvas-fonts/IBMPlexSerif-Bold.ttf +0 -0
- package/skills/creative/canvas-design/canvas-fonts/IBMPlexSerif-BoldItalic.ttf +0 -0
- package/skills/creative/canvas-design/canvas-fonts/IBMPlexSerif-Italic.ttf +0 -0
- package/skills/creative/canvas-design/canvas-fonts/IBMPlexSerif-Regular.ttf +0 -0
- package/skills/creative/canvas-design/canvas-fonts/InstrumentSans-Bold.ttf +0 -0
- package/skills/creative/canvas-design/canvas-fonts/InstrumentSans-BoldItalic.ttf +0 -0
- package/skills/creative/canvas-design/canvas-fonts/InstrumentSans-Italic.ttf +0 -0
- package/skills/creative/canvas-design/canvas-fonts/InstrumentSans-OFL.txt +93 -0
- package/skills/creative/canvas-design/canvas-fonts/InstrumentSans-Regular.ttf +0 -0
- package/skills/creative/canvas-design/canvas-fonts/InstrumentSerif-Italic.ttf +0 -0
- package/skills/creative/canvas-design/canvas-fonts/InstrumentSerif-Regular.ttf +0 -0
- package/skills/creative/canvas-design/canvas-fonts/Italiana-OFL.txt +93 -0
- package/skills/creative/canvas-design/canvas-fonts/Italiana-Regular.ttf +0 -0
- package/skills/creative/canvas-design/canvas-fonts/JetBrainsMono-Bold.ttf +0 -0
- package/skills/creative/canvas-design/canvas-fonts/JetBrainsMono-OFL.txt +93 -0
- package/skills/creative/canvas-design/canvas-fonts/JetBrainsMono-Regular.ttf +0 -0
- package/skills/creative/canvas-design/canvas-fonts/Jura-Light.ttf +0 -0
- package/skills/creative/canvas-design/canvas-fonts/Jura-Medium.ttf +0 -0
- package/skills/creative/canvas-design/canvas-fonts/Jura-OFL.txt +93 -0
- package/skills/creative/canvas-design/canvas-fonts/LibreBaskerville-OFL.txt +93 -0
- package/skills/creative/canvas-design/canvas-fonts/LibreBaskerville-Regular.ttf +0 -0
- package/skills/creative/canvas-design/canvas-fonts/Lora-Bold.ttf +0 -0
- package/skills/creative/canvas-design/canvas-fonts/Lora-BoldItalic.ttf +0 -0
- package/skills/creative/canvas-design/canvas-fonts/Lora-Italic.ttf +0 -0
- package/skills/creative/canvas-design/canvas-fonts/Lora-OFL.txt +93 -0
- package/skills/creative/canvas-design/canvas-fonts/Lora-Regular.ttf +0 -0
- package/skills/creative/canvas-design/canvas-fonts/NationalPark-Bold.ttf +0 -0
- package/skills/creative/canvas-design/canvas-fonts/NationalPark-OFL.txt +93 -0
- package/skills/creative/canvas-design/canvas-fonts/NationalPark-Regular.ttf +0 -0
- package/skills/creative/canvas-design/canvas-fonts/NothingYouCouldDo-OFL.txt +93 -0
- package/skills/creative/canvas-design/canvas-fonts/NothingYouCouldDo-Regular.ttf +0 -0
- package/skills/creative/canvas-design/canvas-fonts/Outfit-Bold.ttf +0 -0
- package/skills/creative/canvas-design/canvas-fonts/Outfit-OFL.txt +93 -0
- package/skills/creative/canvas-design/canvas-fonts/Outfit-Regular.ttf +0 -0
- package/skills/creative/canvas-design/canvas-fonts/PixelifySans-Medium.ttf +0 -0
- package/skills/creative/canvas-design/canvas-fonts/PixelifySans-OFL.txt +93 -0
- package/skills/creative/canvas-design/canvas-fonts/PoiretOne-OFL.txt +93 -0
- package/skills/creative/canvas-design/canvas-fonts/PoiretOne-Regular.ttf +0 -0
- package/skills/creative/canvas-design/canvas-fonts/RedHatMono-Bold.ttf +0 -0
- package/skills/creative/canvas-design/canvas-fonts/RedHatMono-OFL.txt +93 -0
- package/skills/creative/canvas-design/canvas-fonts/RedHatMono-Regular.ttf +0 -0
- package/skills/creative/canvas-design/canvas-fonts/Silkscreen-OFL.txt +93 -0
- package/skills/creative/canvas-design/canvas-fonts/Silkscreen-Regular.ttf +0 -0
- package/skills/creative/canvas-design/canvas-fonts/SmoochSans-Medium.ttf +0 -0
- package/skills/creative/canvas-design/canvas-fonts/SmoochSans-OFL.txt +93 -0
- package/skills/creative/canvas-design/canvas-fonts/Tektur-Medium.ttf +0 -0
- package/skills/creative/canvas-design/canvas-fonts/Tektur-OFL.txt +93 -0
- package/skills/creative/canvas-design/canvas-fonts/Tektur-Regular.ttf +0 -0
- package/skills/creative/canvas-design/canvas-fonts/WorkSans-Bold.ttf +0 -0
- package/skills/creative/canvas-design/canvas-fonts/WorkSans-BoldItalic.ttf +0 -0
- package/skills/creative/canvas-design/canvas-fonts/WorkSans-Italic.ttf +0 -0
- package/skills/creative/canvas-design/canvas-fonts/WorkSans-OFL.txt +93 -0
- package/skills/creative/canvas-design/canvas-fonts/WorkSans-Regular.ttf +0 -0
- package/skills/creative/canvas-design/canvas-fonts/YoungSerif-OFL.txt +93 -0
- package/skills/creative/canvas-design/canvas-fonts/YoungSerif-Regular.ttf +0 -0
- package/skills/creative/frontend-design/LICENSE.txt +177 -0
- package/skills/creative/frontend-design/SKILL-zh.md +42 -0
- package/skills/creative/frontend-design/SKILL.md +42 -0
- package/skills/creative/theme-factory/LICENSE.txt +202 -0
- package/skills/creative/theme-factory/SKILL-zh.md +59 -0
- package/skills/creative/theme-factory/SKILL.md +59 -0
- package/skills/creative/theme-factory/theme-showcase.pdf +0 -0
- package/skills/creative/theme-factory/themes/arctic-frost.md +19 -0
- package/skills/creative/theme-factory/themes/botanical-garden.md +19 -0
- package/skills/creative/theme-factory/themes/desert-rose.md +19 -0
- package/skills/creative/theme-factory/themes/forest-canopy.md +19 -0
- package/skills/creative/theme-factory/themes/golden-hour.md +19 -0
- package/skills/creative/theme-factory/themes/midnight-galaxy.md +19 -0
- package/skills/creative/theme-factory/themes/modern-minimalist.md +19 -0
- package/skills/creative/theme-factory/themes/ocean-depths.md +19 -0
- package/skills/creative/theme-factory/themes/sunset-boulevard.md +19 -0
- package/skills/creative/theme-factory/themes/tech-innovation.md +19 -0
- package/skills/creative/web-artifacts-builder/LICENSE.txt +202 -0
- package/skills/creative/web-artifacts-builder/SKILL-zh.md +74 -0
- package/skills/creative/web-artifacts-builder/SKILL.md +74 -0
- package/skills/creative/web-artifacts-builder/scripts/bundle-artifact.sh +54 -0
- package/skills/creative/web-artifacts-builder/scripts/init-artifact.sh +322 -0
- package/skills/creative/web-artifacts-builder/scripts/shadcn-components.tar.gz +0 -0
- package/skills/documents/doc-coauthoring/SKILL-zh.md +375 -0
- package/skills/documents/doc-coauthoring/SKILL.md +375 -0
- package/skills/documents/docx/SKILL-zh.md +590 -0
- package/skills/{docx → documents/docx}/SKILL.md +11 -11
- package/skills/{docx → documents/docx}/scripts/comment.py +2 -2
- package/skills/{docx → documents/docx}/scripts/office/helpers/simplify_redlines.py +1 -1
- package/skills/{docx → documents/docx}/scripts/office/pack.py +2 -2
- package/skills/{xlsx → documents/docx}/scripts/office/validate.py +2 -2
- package/skills/{xlsx → documents/docx}/scripts/office/validators/redlining.py +1 -1
- package/skills/documents/pdf/SKILL-zh.md +314 -0
- package/skills/documents/pptx/SKILL-zh.md +232 -0
- package/skills/{pptx → documents/pptx}/editing.md +3 -3
- package/skills/{pptx → documents/pptx}/scripts/office/helpers/simplify_redlines.py +1 -1
- package/skills/{xlsx → documents/pptx}/scripts/office/pack.py +2 -2
- package/skills/{pptx → documents/pptx}/scripts/office/validate.py +2 -2
- package/skills/{docx → documents/pptx}/scripts/office/validators/redlining.py +1 -1
- package/skills/documents/xlsx/SKILL-zh.md +292 -0
- package/skills/{xlsx → documents/xlsx}/scripts/office/helpers/simplify_redlines.py +1 -1
- package/skills/{pptx → documents/xlsx}/scripts/office/pack.py +2 -2
- package/skills/{docx → documents/xlsx}/scripts/office/validate.py +2 -2
- package/skills/{pptx → documents/xlsx}/scripts/office/validators/redlining.py +1 -1
- package/skills/meta/skill-creator/LICENSE.txt +202 -0
- package/skills/meta/skill-creator/SKILL-zh.md +483 -0
- package/skills/{skill-creator → meta/skill-creator}/SKILL.md +0 -1
- package/skills/tools/find-skills/SKILL-zh.md +440 -0
- package/skills/tools/github/SKILL-zh.md +48 -0
- package/skills/tools/internal-comms/LICENSE.txt +202 -0
- package/skills/tools/internal-comms/SKILL-zh.md +32 -0
- package/skills/tools/internal-comms/SKILL.md +32 -0
- package/skills/tools/internal-comms/examples/3p-updates.md +47 -0
- package/skills/tools/internal-comms/examples/company-newsletter.md +65 -0
- package/skills/tools/internal-comms/examples/faq-answers.md +30 -0
- package/skills/tools/internal-comms/examples/general-comms.md +16 -0
- package/skills/tools/summarize/SKILL-zh.md +47 -0
- package/skills/tools/weather/SKILL-zh.md +46 -0
- package/skills/tools/webapp-testing/LICENSE.txt +202 -0
- package/skills/tools/webapp-testing/SKILL-zh.md +96 -0
- package/skills/tools/webapp-testing/SKILL.md +96 -0
- package/skills/tools/webapp-testing/examples/console_logging.py +35 -0
- package/skills/tools/webapp-testing/examples/element_discovery.py +40 -0
- package/skills/tools/webapp-testing/examples/static_html_automation.py +33 -0
- package/skills/tools/webapp-testing/scripts/with_server.py +106 -0
- package/dist/gateway/static/root/assets/agents-CkgFSiCY.js +0 -216
- package/dist/gateway/static/root/assets/agents-CkgFSiCY.js.map +0 -1
- package/dist/gateway/static/root/assets/channels-settings-CE7jrdkO.js +0 -9
- package/dist/gateway/static/root/assets/channels-settings-CE7jrdkO.js.map +0 -1
- package/dist/gateway/static/root/assets/cron-page-BpPPcykJ.js +0 -2
- package/dist/gateway/static/root/assets/cron-page-BpPPcykJ.js.map +0 -1
- package/dist/gateway/static/root/assets/cron-utils-N1PqD2DB.js +0 -3
- package/dist/gateway/static/root/assets/cron-utils-N1PqD2DB.js.map +0 -1
- package/dist/gateway/static/root/assets/dist--p2HQ2QF.js +0 -2
- package/dist/gateway/static/root/assets/index-Dnfha4O2.css +0 -1
- package/dist/gateway/static/root/assets/logs-page-CQwdV_Xw.js +0 -2
- package/dist/gateway/static/root/assets/logs-page-CQwdV_Xw.js.map +0 -1
- package/dist/gateway/static/root/assets/sessions-page-Be5kIGl_.js +0 -2
- package/dist/gateway/static/root/assets/settings-page-PodSlNwr.js +0 -2
- package/dist/gateway/static/root/assets/settings-page-PodSlNwr.js.map +0 -1
- package/dist/gateway/static/root/assets/skills-page-Clg8deH0.js +0 -3
- package/dist/gateway/static/root/assets/skills-page-Clg8deH0.js.map +0 -1
- package/dist/src/agent/skills/skills-store-client.d.ts +0 -66
- package/dist/src/agent/skills/skills-store-client.js.map +0 -1
- package/dist/src/stt/index.d.ts +0 -1
- package/dist/src/stt/index.js +0 -8
- /package/skills/{docx → documents/docx}/LICENSE.txt +0 -0
- /package/skills/{docx → documents/docx}/scripts/__init__.py +0 -0
- /package/skills/{docx → documents/docx}/scripts/accept_changes.py +0 -0
- /package/skills/{docx → documents/docx}/scripts/office/helpers/__init__.py +0 -0
- /package/skills/{docx → documents/docx}/scripts/office/helpers/merge_runs.py +0 -0
- /package/skills/{docx → documents/docx}/scripts/office/schemas/ISO-IEC29500-4_2016/dml-chart.xsd +0 -0
- /package/skills/{docx → documents/docx}/scripts/office/schemas/ISO-IEC29500-4_2016/dml-chartDrawing.xsd +0 -0
- /package/skills/{docx → documents/docx}/scripts/office/schemas/ISO-IEC29500-4_2016/dml-diagram.xsd +0 -0
- /package/skills/{docx → documents/docx}/scripts/office/schemas/ISO-IEC29500-4_2016/dml-lockedCanvas.xsd +0 -0
- /package/skills/{docx → documents/docx}/scripts/office/schemas/ISO-IEC29500-4_2016/dml-main.xsd +0 -0
- /package/skills/{docx → documents/docx}/scripts/office/schemas/ISO-IEC29500-4_2016/dml-picture.xsd +0 -0
- /package/skills/{docx → documents/docx}/scripts/office/schemas/ISO-IEC29500-4_2016/dml-spreadsheetDrawing.xsd +0 -0
- /package/skills/{docx → documents/docx}/scripts/office/schemas/ISO-IEC29500-4_2016/dml-wordprocessingDrawing.xsd +0 -0
- /package/skills/{docx → documents/docx}/scripts/office/schemas/ISO-IEC29500-4_2016/pml.xsd +0 -0
- /package/skills/{docx → documents/docx}/scripts/office/schemas/ISO-IEC29500-4_2016/shared-additionalCharacteristics.xsd +0 -0
- /package/skills/{docx → documents/docx}/scripts/office/schemas/ISO-IEC29500-4_2016/shared-bibliography.xsd +0 -0
- /package/skills/{docx → documents/docx}/scripts/office/schemas/ISO-IEC29500-4_2016/shared-commonSimpleTypes.xsd +0 -0
- /package/skills/{docx → documents/docx}/scripts/office/schemas/ISO-IEC29500-4_2016/shared-customXmlDataProperties.xsd +0 -0
- /package/skills/{docx → documents/docx}/scripts/office/schemas/ISO-IEC29500-4_2016/shared-customXmlSchemaProperties.xsd +0 -0
- /package/skills/{docx → documents/docx}/scripts/office/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesCustom.xsd +0 -0
- /package/skills/{docx → documents/docx}/scripts/office/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesExtended.xsd +0 -0
- /package/skills/{docx → documents/docx}/scripts/office/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesVariantTypes.xsd +0 -0
- /package/skills/{docx → documents/docx}/scripts/office/schemas/ISO-IEC29500-4_2016/shared-math.xsd +0 -0
- /package/skills/{docx → documents/docx}/scripts/office/schemas/ISO-IEC29500-4_2016/shared-relationshipReference.xsd +0 -0
- /package/skills/{docx → documents/docx}/scripts/office/schemas/ISO-IEC29500-4_2016/sml.xsd +0 -0
- /package/skills/{docx → documents/docx}/scripts/office/schemas/ISO-IEC29500-4_2016/vml-main.xsd +0 -0
- /package/skills/{docx → documents/docx}/scripts/office/schemas/ISO-IEC29500-4_2016/vml-officeDrawing.xsd +0 -0
- /package/skills/{docx → documents/docx}/scripts/office/schemas/ISO-IEC29500-4_2016/vml-presentationDrawing.xsd +0 -0
- /package/skills/{docx → documents/docx}/scripts/office/schemas/ISO-IEC29500-4_2016/vml-spreadsheetDrawing.xsd +0 -0
- /package/skills/{docx → documents/docx}/scripts/office/schemas/ISO-IEC29500-4_2016/vml-wordprocessingDrawing.xsd +0 -0
- /package/skills/{docx → documents/docx}/scripts/office/schemas/ISO-IEC29500-4_2016/wml.xsd +0 -0
- /package/skills/{docx → documents/docx}/scripts/office/schemas/ISO-IEC29500-4_2016/xml.xsd +0 -0
- /package/skills/{docx → documents/docx}/scripts/office/schemas/ecma/fouth-edition/opc-contentTypes.xsd +0 -0
- /package/skills/{docx → documents/docx}/scripts/office/schemas/ecma/fouth-edition/opc-coreProperties.xsd +0 -0
- /package/skills/{docx → documents/docx}/scripts/office/schemas/ecma/fouth-edition/opc-digSig.xsd +0 -0
- /package/skills/{docx → documents/docx}/scripts/office/schemas/ecma/fouth-edition/opc-relationships.xsd +0 -0
- /package/skills/{docx → documents/docx}/scripts/office/schemas/mce/mc.xsd +0 -0
- /package/skills/{docx → documents/docx}/scripts/office/schemas/microsoft/wml-2010.xsd +0 -0
- /package/skills/{docx → documents/docx}/scripts/office/schemas/microsoft/wml-2012.xsd +0 -0
- /package/skills/{docx → documents/docx}/scripts/office/schemas/microsoft/wml-2018.xsd +0 -0
- /package/skills/{docx → documents/docx}/scripts/office/schemas/microsoft/wml-cex-2018.xsd +0 -0
- /package/skills/{docx → documents/docx}/scripts/office/schemas/microsoft/wml-cid-2016.xsd +0 -0
- /package/skills/{docx → documents/docx}/scripts/office/schemas/microsoft/wml-sdtdatahash-2020.xsd +0 -0
- /package/skills/{docx → documents/docx}/scripts/office/schemas/microsoft/wml-symex-2015.xsd +0 -0
- /package/skills/{docx → documents/docx}/scripts/office/soffice.py +0 -0
- /package/skills/{docx → documents/docx}/scripts/office/unpack.py +0 -0
- /package/skills/{docx → documents/docx}/scripts/office/validators/__init__.py +0 -0
- /package/skills/{docx → documents/docx}/scripts/office/validators/base.py +0 -0
- /package/skills/{docx → documents/docx}/scripts/office/validators/docx.py +0 -0
- /package/skills/{docx → documents/docx}/scripts/office/validators/pptx.py +0 -0
- /package/skills/{docx → documents/docx}/scripts/templates/comments.xml +0 -0
- /package/skills/{docx → documents/docx}/scripts/templates/commentsExtended.xml +0 -0
- /package/skills/{docx → documents/docx}/scripts/templates/commentsExtensible.xml +0 -0
- /package/skills/{docx → documents/docx}/scripts/templates/commentsIds.xml +0 -0
- /package/skills/{docx → documents/docx}/scripts/templates/people.xml +0 -0
- /package/skills/{pdf → documents/pdf}/LICENSE.txt +0 -0
- /package/skills/{pdf → documents/pdf}/SKILL.md +0 -0
- /package/skills/{pdf → documents/pdf}/forms.md +0 -0
- /package/skills/{pdf → documents/pdf}/reference.md +0 -0
- /package/skills/{pdf → documents/pdf}/scripts/check_bounding_boxes.py +0 -0
- /package/skills/{pdf → documents/pdf}/scripts/check_fillable_fields.py +0 -0
- /package/skills/{pdf → documents/pdf}/scripts/convert_pdf_to_images.py +0 -0
- /package/skills/{pdf → documents/pdf}/scripts/create_validation_image.py +0 -0
- /package/skills/{pdf → documents/pdf}/scripts/extract_form_field_info.py +0 -0
- /package/skills/{pdf → documents/pdf}/scripts/extract_form_structure.py +0 -0
- /package/skills/{pdf → documents/pdf}/scripts/fill_fillable_fields.py +0 -0
- /package/skills/{pdf → documents/pdf}/scripts/fill_pdf_form_with_annotations.py +0 -0
- /package/skills/{pptx → documents/pptx}/LICENSE.txt +0 -0
- /package/skills/{pptx → documents/pptx}/SKILL.md +0 -0
- /package/skills/{pptx → documents/pptx}/pptxgenjs.md +0 -0
- /package/skills/{pptx → documents/pptx}/scripts/__init__.py +0 -0
- /package/skills/{pptx → documents/pptx}/scripts/add_slide.py +0 -0
- /package/skills/{pptx → documents/pptx}/scripts/clean.py +0 -0
- /package/skills/{pptx → documents/pptx}/scripts/office/helpers/__init__.py +0 -0
- /package/skills/{pptx → documents/pptx}/scripts/office/helpers/merge_runs.py +0 -0
- /package/skills/{pptx → documents/pptx}/scripts/office/schemas/ISO-IEC29500-4_2016/dml-chart.xsd +0 -0
- /package/skills/{pptx → documents/pptx}/scripts/office/schemas/ISO-IEC29500-4_2016/dml-chartDrawing.xsd +0 -0
- /package/skills/{pptx → documents/pptx}/scripts/office/schemas/ISO-IEC29500-4_2016/dml-diagram.xsd +0 -0
- /package/skills/{pptx → documents/pptx}/scripts/office/schemas/ISO-IEC29500-4_2016/dml-lockedCanvas.xsd +0 -0
- /package/skills/{pptx → documents/pptx}/scripts/office/schemas/ISO-IEC29500-4_2016/dml-main.xsd +0 -0
- /package/skills/{pptx → documents/pptx}/scripts/office/schemas/ISO-IEC29500-4_2016/dml-picture.xsd +0 -0
- /package/skills/{pptx → documents/pptx}/scripts/office/schemas/ISO-IEC29500-4_2016/dml-spreadsheetDrawing.xsd +0 -0
- /package/skills/{pptx → documents/pptx}/scripts/office/schemas/ISO-IEC29500-4_2016/dml-wordprocessingDrawing.xsd +0 -0
- /package/skills/{pptx → documents/pptx}/scripts/office/schemas/ISO-IEC29500-4_2016/pml.xsd +0 -0
- /package/skills/{pptx → documents/pptx}/scripts/office/schemas/ISO-IEC29500-4_2016/shared-additionalCharacteristics.xsd +0 -0
- /package/skills/{pptx → documents/pptx}/scripts/office/schemas/ISO-IEC29500-4_2016/shared-bibliography.xsd +0 -0
- /package/skills/{pptx → documents/pptx}/scripts/office/schemas/ISO-IEC29500-4_2016/shared-commonSimpleTypes.xsd +0 -0
- /package/skills/{pptx → documents/pptx}/scripts/office/schemas/ISO-IEC29500-4_2016/shared-customXmlDataProperties.xsd +0 -0
- /package/skills/{pptx → documents/pptx}/scripts/office/schemas/ISO-IEC29500-4_2016/shared-customXmlSchemaProperties.xsd +0 -0
- /package/skills/{pptx → documents/pptx}/scripts/office/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesCustom.xsd +0 -0
- /package/skills/{pptx → documents/pptx}/scripts/office/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesExtended.xsd +0 -0
- /package/skills/{pptx → documents/pptx}/scripts/office/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesVariantTypes.xsd +0 -0
- /package/skills/{pptx → documents/pptx}/scripts/office/schemas/ISO-IEC29500-4_2016/shared-math.xsd +0 -0
- /package/skills/{pptx → documents/pptx}/scripts/office/schemas/ISO-IEC29500-4_2016/shared-relationshipReference.xsd +0 -0
- /package/skills/{pptx → documents/pptx}/scripts/office/schemas/ISO-IEC29500-4_2016/sml.xsd +0 -0
- /package/skills/{pptx → documents/pptx}/scripts/office/schemas/ISO-IEC29500-4_2016/vml-main.xsd +0 -0
- /package/skills/{pptx → documents/pptx}/scripts/office/schemas/ISO-IEC29500-4_2016/vml-officeDrawing.xsd +0 -0
- /package/skills/{pptx → documents/pptx}/scripts/office/schemas/ISO-IEC29500-4_2016/vml-presentationDrawing.xsd +0 -0
- /package/skills/{pptx → documents/pptx}/scripts/office/schemas/ISO-IEC29500-4_2016/vml-spreadsheetDrawing.xsd +0 -0
- /package/skills/{pptx → documents/pptx}/scripts/office/schemas/ISO-IEC29500-4_2016/vml-wordprocessingDrawing.xsd +0 -0
- /package/skills/{pptx → documents/pptx}/scripts/office/schemas/ISO-IEC29500-4_2016/wml.xsd +0 -0
- /package/skills/{pptx → documents/pptx}/scripts/office/schemas/ISO-IEC29500-4_2016/xml.xsd +0 -0
- /package/skills/{pptx → documents/pptx}/scripts/office/schemas/ecma/fouth-edition/opc-contentTypes.xsd +0 -0
- /package/skills/{pptx → documents/pptx}/scripts/office/schemas/ecma/fouth-edition/opc-coreProperties.xsd +0 -0
- /package/skills/{pptx → documents/pptx}/scripts/office/schemas/ecma/fouth-edition/opc-digSig.xsd +0 -0
- /package/skills/{pptx → documents/pptx}/scripts/office/schemas/ecma/fouth-edition/opc-relationships.xsd +0 -0
- /package/skills/{pptx → documents/pptx}/scripts/office/schemas/mce/mc.xsd +0 -0
- /package/skills/{pptx → documents/pptx}/scripts/office/schemas/microsoft/wml-2010.xsd +0 -0
- /package/skills/{pptx → documents/pptx}/scripts/office/schemas/microsoft/wml-2012.xsd +0 -0
- /package/skills/{pptx → documents/pptx}/scripts/office/schemas/microsoft/wml-2018.xsd +0 -0
- /package/skills/{pptx → documents/pptx}/scripts/office/schemas/microsoft/wml-cex-2018.xsd +0 -0
- /package/skills/{pptx → documents/pptx}/scripts/office/schemas/microsoft/wml-cid-2016.xsd +0 -0
- /package/skills/{pptx → documents/pptx}/scripts/office/schemas/microsoft/wml-sdtdatahash-2020.xsd +0 -0
- /package/skills/{pptx → documents/pptx}/scripts/office/schemas/microsoft/wml-symex-2015.xsd +0 -0
- /package/skills/{pptx → documents/pptx}/scripts/office/soffice.py +0 -0
- /package/skills/{pptx → documents/pptx}/scripts/office/unpack.py +0 -0
- /package/skills/{pptx → documents/pptx}/scripts/office/validators/__init__.py +0 -0
- /package/skills/{pptx → documents/pptx}/scripts/office/validators/base.py +0 -0
- /package/skills/{pptx → documents/pptx}/scripts/office/validators/docx.py +0 -0
- /package/skills/{pptx → documents/pptx}/scripts/office/validators/pptx.py +0 -0
- /package/skills/{pptx → documents/pptx}/scripts/thumbnail.py +0 -0
- /package/skills/{xlsx → documents/xlsx}/LICENSE.txt +0 -0
- /package/skills/{xlsx → documents/xlsx}/SKILL.md +0 -0
- /package/skills/{skill-creator/scripts → documents/xlsx/scripts/office/helpers}/__init__.py +0 -0
- /package/skills/{xlsx → documents/xlsx}/scripts/office/helpers/merge_runs.py +0 -0
- /package/skills/{xlsx → documents/xlsx}/scripts/office/schemas/ISO-IEC29500-4_2016/dml-chart.xsd +0 -0
- /package/skills/{xlsx → documents/xlsx}/scripts/office/schemas/ISO-IEC29500-4_2016/dml-chartDrawing.xsd +0 -0
- /package/skills/{xlsx → documents/xlsx}/scripts/office/schemas/ISO-IEC29500-4_2016/dml-diagram.xsd +0 -0
- /package/skills/{xlsx → documents/xlsx}/scripts/office/schemas/ISO-IEC29500-4_2016/dml-lockedCanvas.xsd +0 -0
- /package/skills/{xlsx → documents/xlsx}/scripts/office/schemas/ISO-IEC29500-4_2016/dml-main.xsd +0 -0
- /package/skills/{xlsx → documents/xlsx}/scripts/office/schemas/ISO-IEC29500-4_2016/dml-picture.xsd +0 -0
- /package/skills/{xlsx → documents/xlsx}/scripts/office/schemas/ISO-IEC29500-4_2016/dml-spreadsheetDrawing.xsd +0 -0
- /package/skills/{xlsx → documents/xlsx}/scripts/office/schemas/ISO-IEC29500-4_2016/dml-wordprocessingDrawing.xsd +0 -0
- /package/skills/{xlsx → documents/xlsx}/scripts/office/schemas/ISO-IEC29500-4_2016/pml.xsd +0 -0
- /package/skills/{xlsx → documents/xlsx}/scripts/office/schemas/ISO-IEC29500-4_2016/shared-additionalCharacteristics.xsd +0 -0
- /package/skills/{xlsx → documents/xlsx}/scripts/office/schemas/ISO-IEC29500-4_2016/shared-bibliography.xsd +0 -0
- /package/skills/{xlsx → documents/xlsx}/scripts/office/schemas/ISO-IEC29500-4_2016/shared-commonSimpleTypes.xsd +0 -0
- /package/skills/{xlsx → documents/xlsx}/scripts/office/schemas/ISO-IEC29500-4_2016/shared-customXmlDataProperties.xsd +0 -0
- /package/skills/{xlsx → documents/xlsx}/scripts/office/schemas/ISO-IEC29500-4_2016/shared-customXmlSchemaProperties.xsd +0 -0
- /package/skills/{xlsx → documents/xlsx}/scripts/office/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesCustom.xsd +0 -0
- /package/skills/{xlsx → documents/xlsx}/scripts/office/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesExtended.xsd +0 -0
- /package/skills/{xlsx → documents/xlsx}/scripts/office/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesVariantTypes.xsd +0 -0
- /package/skills/{xlsx → documents/xlsx}/scripts/office/schemas/ISO-IEC29500-4_2016/shared-math.xsd +0 -0
- /package/skills/{xlsx → documents/xlsx}/scripts/office/schemas/ISO-IEC29500-4_2016/shared-relationshipReference.xsd +0 -0
- /package/skills/{xlsx → documents/xlsx}/scripts/office/schemas/ISO-IEC29500-4_2016/sml.xsd +0 -0
- /package/skills/{xlsx → documents/xlsx}/scripts/office/schemas/ISO-IEC29500-4_2016/vml-main.xsd +0 -0
- /package/skills/{xlsx → documents/xlsx}/scripts/office/schemas/ISO-IEC29500-4_2016/vml-officeDrawing.xsd +0 -0
- /package/skills/{xlsx → documents/xlsx}/scripts/office/schemas/ISO-IEC29500-4_2016/vml-presentationDrawing.xsd +0 -0
- /package/skills/{xlsx → documents/xlsx}/scripts/office/schemas/ISO-IEC29500-4_2016/vml-spreadsheetDrawing.xsd +0 -0
- /package/skills/{xlsx → documents/xlsx}/scripts/office/schemas/ISO-IEC29500-4_2016/vml-wordprocessingDrawing.xsd +0 -0
- /package/skills/{xlsx → documents/xlsx}/scripts/office/schemas/ISO-IEC29500-4_2016/wml.xsd +0 -0
- /package/skills/{xlsx → documents/xlsx}/scripts/office/schemas/ISO-IEC29500-4_2016/xml.xsd +0 -0
- /package/skills/{xlsx → documents/xlsx}/scripts/office/schemas/ecma/fouth-edition/opc-contentTypes.xsd +0 -0
- /package/skills/{xlsx → documents/xlsx}/scripts/office/schemas/ecma/fouth-edition/opc-coreProperties.xsd +0 -0
- /package/skills/{xlsx → documents/xlsx}/scripts/office/schemas/ecma/fouth-edition/opc-digSig.xsd +0 -0
- /package/skills/{xlsx → documents/xlsx}/scripts/office/schemas/ecma/fouth-edition/opc-relationships.xsd +0 -0
- /package/skills/{xlsx → documents/xlsx}/scripts/office/schemas/mce/mc.xsd +0 -0
- /package/skills/{xlsx → documents/xlsx}/scripts/office/schemas/microsoft/wml-2010.xsd +0 -0
- /package/skills/{xlsx → documents/xlsx}/scripts/office/schemas/microsoft/wml-2012.xsd +0 -0
- /package/skills/{xlsx → documents/xlsx}/scripts/office/schemas/microsoft/wml-2018.xsd +0 -0
- /package/skills/{xlsx → documents/xlsx}/scripts/office/schemas/microsoft/wml-cex-2018.xsd +0 -0
- /package/skills/{xlsx → documents/xlsx}/scripts/office/schemas/microsoft/wml-cid-2016.xsd +0 -0
- /package/skills/{xlsx → documents/xlsx}/scripts/office/schemas/microsoft/wml-sdtdatahash-2020.xsd +0 -0
- /package/skills/{xlsx → documents/xlsx}/scripts/office/schemas/microsoft/wml-symex-2015.xsd +0 -0
- /package/skills/{xlsx → documents/xlsx}/scripts/office/soffice.py +0 -0
- /package/skills/{xlsx → documents/xlsx}/scripts/office/unpack.py +0 -0
- /package/skills/{xlsx → documents/xlsx}/scripts/office/validators/__init__.py +0 -0
- /package/skills/{xlsx → documents/xlsx}/scripts/office/validators/base.py +0 -0
- /package/skills/{xlsx → documents/xlsx}/scripts/office/validators/docx.py +0 -0
- /package/skills/{xlsx → documents/xlsx}/scripts/office/validators/pptx.py +0 -0
- /package/skills/{xlsx → documents/xlsx}/scripts/recalc.py +0 -0
- /package/skills/{skill-creator → meta/skill-creator}/agents/analyzer.md +0 -0
- /package/skills/{skill-creator → meta/skill-creator}/agents/comparator.md +0 -0
- /package/skills/{skill-creator → meta/skill-creator}/agents/grader.md +0 -0
- /package/skills/{skill-creator → meta/skill-creator}/assets/eval_review.html +0 -0
- /package/skills/{skill-creator → meta/skill-creator}/eval-viewer/generate_review.py +0 -0
- /package/skills/{skill-creator → meta/skill-creator}/eval-viewer/viewer.html +0 -0
- /package/skills/{skill-creator → meta/skill-creator}/references/schemas.md +0 -0
- /package/skills/{xlsx/scripts/office/helpers → meta/skill-creator/scripts}/__init__.py +0 -0
- /package/skills/{skill-creator → meta/skill-creator}/scripts/aggregate_benchmark.py +0 -0
- /package/skills/{skill-creator → meta/skill-creator}/scripts/generate_report.py +0 -0
- /package/skills/{skill-creator → meta/skill-creator}/scripts/improve_description.py +0 -0
- /package/skills/{skill-creator → meta/skill-creator}/scripts/package_skill.py +0 -0
- /package/skills/{skill-creator → meta/skill-creator}/scripts/quick_validate.py +0 -0
- /package/skills/{skill-creator → meta/skill-creator}/scripts/run_eval.py +0 -0
- /package/skills/{skill-creator → meta/skill-creator}/scripts/run_loop.py +0 -0
- /package/skills/{skill-creator → meta/skill-creator}/scripts/utils.py +0 -0
- /package/skills/{find-skills → tools/find-skills}/SKILL.md +0 -0
- /package/skills/{github → tools/github}/SKILL.md +0 -0
- /package/skills/{summarize → tools/summarize}/SKILL.md +0 -0
- /package/skills/{weather → tools/weather}/SKILL.md +0 -0
|
@@ -3,16 +3,21 @@ import { init_session_key, parseSessionKey } from "../routing/session-key.js";
|
|
|
3
3
|
import { createLogger } from "../utils/logger/index.js";
|
|
4
4
|
import { init_logger } from "../utils/logger.js";
|
|
5
5
|
import { FILENAMES, init_paths, resolveSessionsDir } from "../config/paths.js";
|
|
6
|
+
import { init_write_file_atomic, writeTextAtomic } from "../infra/write-file-atomic.js";
|
|
7
|
+
import { buildSessionContextForLlm, isTranscriptContextEntry, mergeLlmMessagesPreservingContextRows } from "./session-context-for-llm.js";
|
|
8
|
+
import { buildTranscriptEnvelope, parseStoredTranscriptJson } from "./transcript-format.js";
|
|
6
9
|
import { invalidateSessionSearchIndexCache } from "./search-index-cache.js";
|
|
7
10
|
import { resolveSessionShardRelativePath } from "./shard-path.js";
|
|
8
11
|
import "./types.js";
|
|
9
12
|
import { SessionCompactor } from "../agent/memory/compaction.js";
|
|
10
13
|
import { SlidingWindow } from "../agent/memory/window.js";
|
|
11
|
-
import {
|
|
14
|
+
import { normalizeCompactionCheckpointId } from "./compaction-checkpoints.js";
|
|
12
15
|
import { basename, join } from "path";
|
|
13
16
|
import { existsSync } from "fs";
|
|
14
|
-
import { mkdir, readFile, readdir, stat, unlink
|
|
17
|
+
import { copyFile, mkdir, readFile, readdir, stat, unlink } from "fs/promises";
|
|
18
|
+
import { randomUUID } from "node:crypto";
|
|
15
19
|
//#region src/session/store.ts
|
|
20
|
+
init_write_file_atomic();
|
|
16
21
|
init_paths();
|
|
17
22
|
init_agent_scope();
|
|
18
23
|
init_session_key();
|
|
@@ -20,6 +25,8 @@ init_logger();
|
|
|
20
25
|
const log = createLogger("SessionStore");
|
|
21
26
|
const INDEX_VERSION = "1.0";
|
|
22
27
|
const DEFAULT_LIMIT = 50;
|
|
28
|
+
/** Pre-compaction transcript snapshots per session file (same directory as `{safeKey}.json`). */
|
|
29
|
+
const MAX_COMPACTION_CHECKPOINTS = 15;
|
|
23
30
|
var SessionStore = class {
|
|
24
31
|
sessionsDir;
|
|
25
32
|
archiveDir;
|
|
@@ -29,6 +36,9 @@ var SessionStore = class {
|
|
|
29
36
|
indexDirty = false;
|
|
30
37
|
window;
|
|
31
38
|
compactor;
|
|
39
|
+
/** Serialize index + transcript mutations (reentrant for nested store calls). */
|
|
40
|
+
storeMutationChain = Promise.resolve();
|
|
41
|
+
storeMutationDepth = 0;
|
|
32
42
|
constructor(options, windowConfig, compactionConfig) {
|
|
33
43
|
const agentId = options.agentId ?? resolveDefaultAgentId(options.config);
|
|
34
44
|
this.sessionsDir = options.sessionsDir ?? resolveSessionsDir(options.config, agentId);
|
|
@@ -58,6 +68,77 @@ var SessionStore = class {
|
|
|
58
68
|
metaPath: join(dir, `${safeKey}.meta.json`)
|
|
59
69
|
};
|
|
60
70
|
}
|
|
71
|
+
invalidateIndexCache() {
|
|
72
|
+
this.indexCache = null;
|
|
73
|
+
this.indexCacheTime = 0;
|
|
74
|
+
}
|
|
75
|
+
/**
|
|
76
|
+
* Serialize mutations that touch the sessions index or transcript paths.
|
|
77
|
+
* Reentrant: nested calls (e.g. applyCompaction → saveMessages) run inline without deadlocking.
|
|
78
|
+
*/
|
|
79
|
+
async runStoreMutation(fn) {
|
|
80
|
+
if (this.storeMutationDepth > 0) return fn();
|
|
81
|
+
const run = this.storeMutationChain.then(async () => {
|
|
82
|
+
this.storeMutationDepth++;
|
|
83
|
+
try {
|
|
84
|
+
return await fn();
|
|
85
|
+
} finally {
|
|
86
|
+
this.storeMutationDepth--;
|
|
87
|
+
}
|
|
88
|
+
});
|
|
89
|
+
this.storeMutationChain = run.then(() => void 0).catch(() => void 0);
|
|
90
|
+
return run;
|
|
91
|
+
}
|
|
92
|
+
checkpointBasenamePrefix(safeKey) {
|
|
93
|
+
return `${safeKey}.compaction-backup.`;
|
|
94
|
+
}
|
|
95
|
+
async pruneCompactionCheckpoints(dir, safeKey) {
|
|
96
|
+
const prefix = this.checkpointBasenamePrefix(safeKey);
|
|
97
|
+
let names;
|
|
98
|
+
try {
|
|
99
|
+
names = await readdir(dir);
|
|
100
|
+
} catch {
|
|
101
|
+
return;
|
|
102
|
+
}
|
|
103
|
+
const candidates = names.filter((n) => n.startsWith(prefix) && n.endsWith(".json"));
|
|
104
|
+
if (candidates.length <= MAX_COMPACTION_CHECKPOINTS) return;
|
|
105
|
+
const stats = await Promise.all(candidates.map(async (name) => {
|
|
106
|
+
const p = join(dir, name);
|
|
107
|
+
try {
|
|
108
|
+
return {
|
|
109
|
+
p,
|
|
110
|
+
mtimeMs: (await stat(p)).mtimeMs
|
|
111
|
+
};
|
|
112
|
+
} catch {
|
|
113
|
+
return {
|
|
114
|
+
p,
|
|
115
|
+
mtimeMs: 0
|
|
116
|
+
};
|
|
117
|
+
}
|
|
118
|
+
}));
|
|
119
|
+
stats.sort((a, b) => a.mtimeMs - b.mtimeMs);
|
|
120
|
+
const removeCount = stats.length - MAX_COMPACTION_CHECKPOINTS;
|
|
121
|
+
for (let i = 0; i < removeCount; i++) try {
|
|
122
|
+
await unlink(stats[i].p);
|
|
123
|
+
} catch {}
|
|
124
|
+
}
|
|
125
|
+
/** Best-effort copy of the current transcript before compaction replaces it. */
|
|
126
|
+
async captureCompactionCheckpointIfExists(key, jsonPath) {
|
|
127
|
+
if (!existsSync(jsonPath)) return;
|
|
128
|
+
const safeKey = this.sanitizeKey(key);
|
|
129
|
+
const dir = join(this.sessionsDir, resolveSessionShardRelativePath(key));
|
|
130
|
+
const backupPath = join(dir, `${this.checkpointBasenamePrefix(safeKey)}${randomUUID()}.json`);
|
|
131
|
+
try {
|
|
132
|
+
await copyFile(jsonPath, backupPath);
|
|
133
|
+
await this.pruneCompactionCheckpoints(dir, safeKey);
|
|
134
|
+
} catch (err) {
|
|
135
|
+
log.warn({
|
|
136
|
+
err,
|
|
137
|
+
key,
|
|
138
|
+
jsonPath
|
|
139
|
+
}, "Compaction checkpoint copy failed (continuing)");
|
|
140
|
+
}
|
|
141
|
+
}
|
|
61
142
|
/**
|
|
62
143
|
* Get sessions by agent ID
|
|
63
144
|
*/
|
|
@@ -110,7 +191,7 @@ var SessionStore = class {
|
|
|
110
191
|
async saveIndex() {
|
|
111
192
|
if (!this.indexCache) return;
|
|
112
193
|
this.indexCache.lastUpdated = (/* @__PURE__ */ new Date()).toISOString();
|
|
113
|
-
await
|
|
194
|
+
await writeTextAtomic(this.indexFile, JSON.stringify(this.indexCache, null, 2));
|
|
114
195
|
this.indexDirty = false;
|
|
115
196
|
try {
|
|
116
197
|
const stats = await stat(this.indexFile);
|
|
@@ -120,36 +201,39 @@ var SessionStore = class {
|
|
|
120
201
|
}
|
|
121
202
|
}
|
|
122
203
|
async rebuildIndex() {
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
const
|
|
128
|
-
|
|
204
|
+
return this.runStoreMutation(async () => {
|
|
205
|
+
log.info("Rebuilding session index...");
|
|
206
|
+
const sessions = [];
|
|
207
|
+
const files = await this.scanSessionFiles();
|
|
208
|
+
for (const file of files) if (file.endsWith(".json") && !file.endsWith(".meta.json")) {
|
|
209
|
+
const stem = basename(file, ".json");
|
|
210
|
+
if (stem.includes(".compaction-backup.")) continue;
|
|
211
|
+
const key = this.fileNameToKey(stem);
|
|
212
|
+
try {
|
|
213
|
+
const metadata = await this.scanSessionFile(key);
|
|
214
|
+
if (metadata) sessions.push(metadata);
|
|
215
|
+
} catch (err) {
|
|
216
|
+
log.warn({
|
|
217
|
+
key,
|
|
218
|
+
err
|
|
219
|
+
}, "Failed to scan session file");
|
|
220
|
+
}
|
|
221
|
+
}
|
|
222
|
+
this.indexCache = {
|
|
223
|
+
version: INDEX_VERSION,
|
|
224
|
+
lastUpdated: (/* @__PURE__ */ new Date()).toISOString(),
|
|
225
|
+
sessions
|
|
226
|
+
};
|
|
227
|
+
await this.saveIndex();
|
|
129
228
|
try {
|
|
130
|
-
const
|
|
131
|
-
|
|
132
|
-
} catch
|
|
133
|
-
|
|
134
|
-
key,
|
|
135
|
-
err
|
|
136
|
-
}, "Failed to scan session file");
|
|
229
|
+
const stats = await stat(this.indexFile);
|
|
230
|
+
this.indexCacheTime = stats.mtime.getTime();
|
|
231
|
+
} catch {
|
|
232
|
+
this.indexCacheTime = Date.now();
|
|
137
233
|
}
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
lastUpdated: (/* @__PURE__ */ new Date()).toISOString(),
|
|
142
|
-
sessions
|
|
143
|
-
};
|
|
144
|
-
await this.saveIndex();
|
|
145
|
-
try {
|
|
146
|
-
const stats = await stat(this.indexFile);
|
|
147
|
-
this.indexCacheTime = stats.mtime.getTime();
|
|
148
|
-
} catch {
|
|
149
|
-
this.indexCacheTime = Date.now();
|
|
150
|
-
}
|
|
151
|
-
log.info({ count: sessions.length }, "Session index rebuilt");
|
|
152
|
-
return this.indexCache;
|
|
234
|
+
log.info({ count: sessions.length }, "Session index rebuilt");
|
|
235
|
+
return this.indexCache;
|
|
236
|
+
});
|
|
153
237
|
}
|
|
154
238
|
async scanSessionFiles() {
|
|
155
239
|
const out = [];
|
|
@@ -166,17 +250,25 @@ var SessionStore = class {
|
|
|
166
250
|
if (ent.isDirectory()) {
|
|
167
251
|
if (ent.name === "archive") continue;
|
|
168
252
|
await walk(childRel);
|
|
169
|
-
} else if (ent.name.endsWith(".json") && ent.name !== FILENAMES.SESSIONS_INDEX && !ent.name.endsWith(".meta.json")) out.push(childRel);
|
|
253
|
+
} else if (ent.name.endsWith(".json") && ent.name !== FILENAMES.SESSIONS_INDEX && !ent.name.endsWith(".meta.json") && !ent.name.includes(".compaction-backup.")) out.push(childRel);
|
|
170
254
|
}
|
|
171
255
|
};
|
|
172
256
|
await walk("");
|
|
173
257
|
return out;
|
|
174
258
|
}
|
|
175
259
|
async scanSessionFile(key) {
|
|
176
|
-
const messages = await this.loadMessages(key);
|
|
177
|
-
if (messages.length === 0) return null;
|
|
178
260
|
const { jsonPath } = this.sessionPathsForKey(key);
|
|
261
|
+
let raw;
|
|
262
|
+
try {
|
|
263
|
+
raw = await readFile(jsonPath, "utf-8");
|
|
264
|
+
} catch {
|
|
265
|
+
return null;
|
|
266
|
+
}
|
|
267
|
+
const { messages, envelope } = parseStoredTranscriptJson(raw);
|
|
268
|
+
if (messages.length === 0) return null;
|
|
179
269
|
const stats = await stat(jsonPath);
|
|
270
|
+
const sessionStartedAt = envelope?.createdAt ?? stats.birthtime.toISOString();
|
|
271
|
+
const lastInteractionAt = envelope?.updatedAt ?? stats.mtime.toISOString();
|
|
180
272
|
const { channel, chatId } = this.parseSessionKey(key);
|
|
181
273
|
const routing = this.extractRoutingFromKey(key, channel);
|
|
182
274
|
const isCronSession = channel === "cron";
|
|
@@ -193,6 +285,9 @@ var SessionStore = class {
|
|
|
193
285
|
compactedCount: 0,
|
|
194
286
|
sourceChannel: channel,
|
|
195
287
|
sourceChatId: chatId,
|
|
288
|
+
...envelope?.id ? { transcriptId: envelope.id } : {},
|
|
289
|
+
sessionStartedAt,
|
|
290
|
+
lastInteractionAt,
|
|
196
291
|
routing,
|
|
197
292
|
...isCronSession ? {
|
|
198
293
|
sessionType: "cron",
|
|
@@ -270,66 +365,100 @@ var SessionStore = class {
|
|
|
270
365
|
hasMore: offset + limit < total
|
|
271
366
|
};
|
|
272
367
|
}
|
|
273
|
-
async get(key) {
|
|
368
|
+
async get(key, options) {
|
|
274
369
|
const metadata = await this.getMetadata(key);
|
|
275
370
|
if (!metadata) return null;
|
|
276
371
|
const messages = await this.loadMessages(key);
|
|
372
|
+
let transcriptSummary;
|
|
373
|
+
if (options?.includeTranscriptSummary) {
|
|
374
|
+
const env = await this.loadTranscriptDocument(key);
|
|
375
|
+
if (env) transcriptSummary = {
|
|
376
|
+
id: env.id,
|
|
377
|
+
version: env.version,
|
|
378
|
+
createdAt: env.createdAt,
|
|
379
|
+
updatedAt: env.updatedAt,
|
|
380
|
+
compactionCount: env.compactions?.length ?? 0
|
|
381
|
+
};
|
|
382
|
+
}
|
|
383
|
+
let transcriptRows;
|
|
384
|
+
if (options?.includeTranscriptRows) transcriptRows = await this.loadTranscriptRows(key);
|
|
277
385
|
return {
|
|
278
386
|
...metadata,
|
|
279
|
-
messages: this.convertMessages(messages)
|
|
387
|
+
messages: this.convertMessages(messages),
|
|
388
|
+
...transcriptSummary ? { transcriptSummary } : {},
|
|
389
|
+
...transcriptRows !== void 0 ? { transcriptRows } : {}
|
|
280
390
|
};
|
|
281
391
|
}
|
|
392
|
+
/** Full on-disk transcript rows (LLM messages + optional `kind: 'context'`). */
|
|
393
|
+
async loadTranscriptRows(key) {
|
|
394
|
+
const { jsonPath } = this.sessionPathsForKey(key);
|
|
395
|
+
try {
|
|
396
|
+
return parseStoredTranscriptJson(await readFile(jsonPath, "utf-8")).rows;
|
|
397
|
+
} catch {
|
|
398
|
+
return [];
|
|
399
|
+
}
|
|
400
|
+
}
|
|
282
401
|
async getMetadata(key) {
|
|
283
|
-
const
|
|
284
|
-
const metadata = index.sessions.find((s) => s.key === key);
|
|
402
|
+
const metadata = (await this.loadIndex()).sessions.find((s) => s.key === key);
|
|
285
403
|
if (!metadata) {
|
|
286
404
|
const scanned = await this.scanSessionFile(key);
|
|
287
|
-
if (scanned)
|
|
288
|
-
|
|
405
|
+
if (!scanned) return null;
|
|
406
|
+
await this.runStoreMutation(async () => {
|
|
407
|
+
this.invalidateIndexCache();
|
|
408
|
+
const fresh = await this.loadIndex();
|
|
409
|
+
if (fresh.sessions.some((s) => s.key === key)) return;
|
|
410
|
+
fresh.sessions.push(scanned);
|
|
289
411
|
this.indexDirty = true;
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
412
|
+
await this.saveIndex();
|
|
413
|
+
invalidateSessionSearchIndexCache();
|
|
414
|
+
});
|
|
415
|
+
return scanned;
|
|
293
416
|
}
|
|
294
417
|
return metadata;
|
|
295
418
|
}
|
|
296
419
|
async updateMetadata(key, updates) {
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
log.debug({
|
|
308
|
-
key,
|
|
309
|
-
updates
|
|
310
|
-
}, "Session metadata updated");
|
|
311
|
-
}
|
|
312
|
-
async delete(key) {
|
|
313
|
-
const index = await this.loadIndex();
|
|
314
|
-
const idx = index.sessions.findIndex((s) => s.key === key);
|
|
315
|
-
const primary = this.sessionPathsForKey(key);
|
|
316
|
-
for (const p of [primary.jsonPath]) try {
|
|
317
|
-
await unlink(p);
|
|
318
|
-
} catch (err) {
|
|
319
|
-
if (err.code !== "ENOENT") throw err;
|
|
320
|
-
}
|
|
321
|
-
for (const p of [primary.metaPath]) try {
|
|
322
|
-
await unlink(p);
|
|
323
|
-
} catch (err) {
|
|
324
|
-
if (err.code !== "ENOENT") throw err;
|
|
325
|
-
}
|
|
326
|
-
if (idx !== -1) {
|
|
327
|
-
index.sessions.splice(idx, 1);
|
|
420
|
+
return this.runStoreMutation(async () => {
|
|
421
|
+
this.invalidateIndexCache();
|
|
422
|
+
const index = await this.loadIndex();
|
|
423
|
+
const idx = index.sessions.findIndex((s) => s.key === key);
|
|
424
|
+
if (idx === -1) throw new Error(`Session not found: ${key}`);
|
|
425
|
+
index.sessions[idx] = {
|
|
426
|
+
...index.sessions[idx],
|
|
427
|
+
...updates,
|
|
428
|
+
updatedAt: (/* @__PURE__ */ new Date()).toISOString()
|
|
429
|
+
};
|
|
328
430
|
this.indexDirty = true;
|
|
329
431
|
await this.saveIndex();
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
|
|
432
|
+
log.debug({
|
|
433
|
+
key,
|
|
434
|
+
updates
|
|
435
|
+
}, "Session metadata updated");
|
|
436
|
+
});
|
|
437
|
+
}
|
|
438
|
+
async delete(key) {
|
|
439
|
+
return this.runStoreMutation(async () => {
|
|
440
|
+
this.invalidateIndexCache();
|
|
441
|
+
const index = await this.loadIndex();
|
|
442
|
+
const idx = index.sessions.findIndex((s) => s.key === key);
|
|
443
|
+
const primary = this.sessionPathsForKey(key);
|
|
444
|
+
for (const p of [primary.jsonPath]) try {
|
|
445
|
+
await unlink(p);
|
|
446
|
+
} catch (err) {
|
|
447
|
+
if (err.code !== "ENOENT") throw err;
|
|
448
|
+
}
|
|
449
|
+
for (const p of [primary.metaPath]) try {
|
|
450
|
+
await unlink(p);
|
|
451
|
+
} catch (err) {
|
|
452
|
+
if (err.code !== "ENOENT") throw err;
|
|
453
|
+
}
|
|
454
|
+
if (idx !== -1) {
|
|
455
|
+
index.sessions.splice(idx, 1);
|
|
456
|
+
this.indexDirty = true;
|
|
457
|
+
await this.saveIndex();
|
|
458
|
+
}
|
|
459
|
+
log.info({ key }, "Session deleted");
|
|
460
|
+
return true;
|
|
461
|
+
});
|
|
333
462
|
}
|
|
334
463
|
async deleteMany(keys) {
|
|
335
464
|
const success = [];
|
|
@@ -366,17 +495,7 @@ var SessionStore = class {
|
|
|
366
495
|
const primary = this.sessionPathsForKey(key);
|
|
367
496
|
const readAndNormalize = async (path) => {
|
|
368
497
|
try {
|
|
369
|
-
const
|
|
370
|
-
const messages = JSON.parse(data);
|
|
371
|
-
if (hasProblematicMessages(messages)) {
|
|
372
|
-
const cleaned = cleanTrailingErrors(messages);
|
|
373
|
-
if (cleaned.length !== messages.length) log.info({
|
|
374
|
-
key,
|
|
375
|
-
original: messages.length,
|
|
376
|
-
cleaned: cleaned.length
|
|
377
|
-
}, "Cleaned problematic messages on load");
|
|
378
|
-
return cleaned;
|
|
379
|
-
}
|
|
498
|
+
const { messages } = parseStoredTranscriptJson(await readFile(path, "utf-8"));
|
|
380
499
|
return messages;
|
|
381
500
|
} catch {
|
|
382
501
|
return null;
|
|
@@ -392,6 +511,17 @@ var SessionStore = class {
|
|
|
392
511
|
return [];
|
|
393
512
|
}
|
|
394
513
|
/**
|
|
514
|
+
* Load the versioned transcript document (stable id, compaction history), or null if missing/invalid.
|
|
515
|
+
*/
|
|
516
|
+
async loadTranscriptDocument(key) {
|
|
517
|
+
const { jsonPath } = this.sessionPathsForKey(key);
|
|
518
|
+
try {
|
|
519
|
+
return parseStoredTranscriptJson(await readFile(jsonPath, "utf-8")).envelope;
|
|
520
|
+
} catch {
|
|
521
|
+
return null;
|
|
522
|
+
}
|
|
523
|
+
}
|
|
524
|
+
/**
|
|
395
525
|
* Find the most recent archived session file for a given key.
|
|
396
526
|
* Archived files have format: {safeKey}.{timestamp}.json
|
|
397
527
|
*/
|
|
@@ -400,7 +530,7 @@ var SessionStore = class {
|
|
|
400
530
|
const shardDir = join(this.archiveDir, resolveSessionShardRelativePath(sessionKey));
|
|
401
531
|
const scanDir = async (dir) => {
|
|
402
532
|
try {
|
|
403
|
-
const matchingFiles = (await readdir(dir)).filter((f) => f.startsWith(`${safeKey}.`) && f.endsWith(".json") && !f.endsWith(".meta.json")).sort().reverse();
|
|
533
|
+
const matchingFiles = (await readdir(dir)).filter((f) => f.startsWith(`${safeKey}.`) && f.endsWith(".json") && !f.endsWith(".meta.json") && !f.includes(".compaction-backup.")).sort().reverse();
|
|
404
534
|
if (matchingFiles.length === 0) return null;
|
|
405
535
|
return join(dir, matchingFiles[0]);
|
|
406
536
|
} catch {
|
|
@@ -411,10 +541,24 @@ var SessionStore = class {
|
|
|
411
541
|
if (inShard) return inShard;
|
|
412
542
|
return await scanDir(this.archiveDir);
|
|
413
543
|
}
|
|
414
|
-
|
|
544
|
+
/**
|
|
545
|
+
* Persist transcript JSON + merge session row into the index. Caller must hold {@link runStoreMutation} (or be nested under it).
|
|
546
|
+
* Transcript is stored as a versioned document (pi-style header) with stable {@link XopcSessionTranscriptV1.id}.
|
|
547
|
+
*/
|
|
548
|
+
async writeSessionTranscriptFromStoredRows(key, storedRows, options) {
|
|
415
549
|
const { dir, jsonPath } = this.sessionPathsForKey(key);
|
|
416
550
|
await mkdir(dir, { recursive: true });
|
|
417
|
-
|
|
551
|
+
let previous = null;
|
|
552
|
+
try {
|
|
553
|
+
previous = parseStoredTranscriptJson(await readFile(jsonPath, "utf-8")).envelope;
|
|
554
|
+
} catch {}
|
|
555
|
+
const doc = buildTranscriptEnvelope({
|
|
556
|
+
storedRows,
|
|
557
|
+
previous,
|
|
558
|
+
appendCompaction: options?.appendCompaction
|
|
559
|
+
});
|
|
560
|
+
await writeTextAtomic(jsonPath, JSON.stringify(doc, null, 2));
|
|
561
|
+
const llmMessages = buildSessionContextForLlm(storedRows);
|
|
418
562
|
const index = await this.loadIndex();
|
|
419
563
|
const existingIdx = index.sessions.findIndex((s) => s.key === key);
|
|
420
564
|
const now = (/* @__PURE__ */ new Date()).toISOString();
|
|
@@ -428,10 +572,13 @@ var SessionStore = class {
|
|
|
428
572
|
...prev,
|
|
429
573
|
sourceChannel: channel,
|
|
430
574
|
sourceChatId: chatId,
|
|
431
|
-
messageCount:
|
|
432
|
-
estimatedTokens: this.estimateTokens(
|
|
575
|
+
messageCount: llmMessages.length,
|
|
576
|
+
estimatedTokens: this.estimateTokens(llmMessages),
|
|
433
577
|
updatedAt: now,
|
|
434
578
|
lastAccessedAt: now,
|
|
579
|
+
transcriptId: doc.id,
|
|
580
|
+
sessionStartedAt: prev.sessionStartedAt ?? doc.createdAt,
|
|
581
|
+
lastInteractionAt: now,
|
|
435
582
|
routing: routing || prev.routing,
|
|
436
583
|
...isCronSession ? {
|
|
437
584
|
sessionType: "cron",
|
|
@@ -449,8 +596,8 @@ var SessionStore = class {
|
|
|
449
596
|
} : {},
|
|
450
597
|
stats: {
|
|
451
598
|
...prev.stats,
|
|
452
|
-
messageCount:
|
|
453
|
-
tokenCount: this.estimateTokens(
|
|
599
|
+
messageCount: llmMessages.length,
|
|
600
|
+
tokenCount: this.estimateTokens(llmMessages),
|
|
454
601
|
lastTurnAt: Date.now()
|
|
455
602
|
}
|
|
456
603
|
};
|
|
@@ -461,8 +608,11 @@ var SessionStore = class {
|
|
|
461
608
|
createdAt: now,
|
|
462
609
|
updatedAt: now,
|
|
463
610
|
lastAccessedAt: now,
|
|
464
|
-
|
|
465
|
-
|
|
611
|
+
transcriptId: doc.id,
|
|
612
|
+
sessionStartedAt: doc.createdAt,
|
|
613
|
+
lastInteractionAt: now,
|
|
614
|
+
messageCount: llmMessages.length,
|
|
615
|
+
estimatedTokens: this.estimateTokens(llmMessages),
|
|
466
616
|
compactedCount: 0,
|
|
467
617
|
sourceChannel: channel,
|
|
468
618
|
sourceChatId: chatId,
|
|
@@ -476,8 +626,8 @@ var SessionStore = class {
|
|
|
476
626
|
customData: { heartbeatTarget: chatId }
|
|
477
627
|
} : {},
|
|
478
628
|
stats: {
|
|
479
|
-
messageCount:
|
|
480
|
-
tokenCount: this.estimateTokens(
|
|
629
|
+
messageCount: llmMessages.length,
|
|
630
|
+
tokenCount: this.estimateTokens(llmMessages),
|
|
481
631
|
lastTurnAt: Date.now()
|
|
482
632
|
}
|
|
483
633
|
});
|
|
@@ -485,6 +635,43 @@ var SessionStore = class {
|
|
|
485
635
|
await this.saveIndex();
|
|
486
636
|
invalidateSessionSearchIndexCache();
|
|
487
637
|
}
|
|
638
|
+
async writeSessionTranscriptAndUpdateIndex(key, messages, options) {
|
|
639
|
+
const { jsonPath } = this.sessionPathsForKey(key);
|
|
640
|
+
let storedRows = messages;
|
|
641
|
+
try {
|
|
642
|
+
const parsed = parseStoredTranscriptJson(await readFile(jsonPath, "utf-8"));
|
|
643
|
+
if (parsed.rows.some((r) => isTranscriptContextEntry(r))) storedRows = mergeLlmMessagesPreservingContextRows(parsed.rows, messages);
|
|
644
|
+
} catch {}
|
|
645
|
+
await this.writeSessionTranscriptFromStoredRows(key, storedRows, options);
|
|
646
|
+
}
|
|
647
|
+
/**
|
|
648
|
+
* Append a persisted-only transcript row (`kind: 'context'`), visible on disk and in session search
|
|
649
|
+
* after stripping, but never returned from {@link loadMessages}.
|
|
650
|
+
*/
|
|
651
|
+
async appendTranscriptContextEntry(key, entry) {
|
|
652
|
+
return this.runStoreMutation(async () => {
|
|
653
|
+
this.invalidateIndexCache();
|
|
654
|
+
const { jsonPath } = this.sessionPathsForKey(key);
|
|
655
|
+
let rows = [];
|
|
656
|
+
try {
|
|
657
|
+
rows = parseStoredTranscriptJson(await readFile(jsonPath, "utf-8")).rows;
|
|
658
|
+
} catch {}
|
|
659
|
+
const row = {
|
|
660
|
+
kind: "context",
|
|
661
|
+
id: typeof entry.id === "string" ? entry.id : void 0,
|
|
662
|
+
text: typeof entry.text === "string" ? entry.text : void 0,
|
|
663
|
+
data: entry.data,
|
|
664
|
+
createdAt: entry.createdAt ?? (/* @__PURE__ */ new Date()).toISOString()
|
|
665
|
+
};
|
|
666
|
+
await this.writeSessionTranscriptFromStoredRows(key, [...rows, row], {});
|
|
667
|
+
});
|
|
668
|
+
}
|
|
669
|
+
async saveMessages(key, messages) {
|
|
670
|
+
return this.runStoreMutation(async () => {
|
|
671
|
+
this.invalidateIndexCache();
|
|
672
|
+
await this.writeSessionTranscriptAndUpdateIndex(key, messages);
|
|
673
|
+
});
|
|
674
|
+
}
|
|
488
675
|
/**
|
|
489
676
|
* Get window stats for messages
|
|
490
677
|
*/
|
|
@@ -513,16 +700,27 @@ var SessionStore = class {
|
|
|
513
700
|
*/
|
|
514
701
|
async applyCompaction(key, messages, result) {
|
|
515
702
|
const compacted = this.compactor.applyCompaction(messages, result);
|
|
516
|
-
|
|
517
|
-
|
|
518
|
-
|
|
519
|
-
|
|
520
|
-
key,
|
|
521
|
-
|
|
522
|
-
|
|
523
|
-
|
|
524
|
-
|
|
525
|
-
|
|
703
|
+
return this.runStoreMutation(async () => {
|
|
704
|
+
this.invalidateIndexCache();
|
|
705
|
+
const { jsonPath } = this.sessionPathsForKey(key);
|
|
706
|
+
await this.captureCompactionCheckpointIfExists(key, jsonPath);
|
|
707
|
+
await this.writeSessionTranscriptAndUpdateIndex(key, compacted, { appendCompaction: {
|
|
708
|
+
at: (/* @__PURE__ */ new Date()).toISOString(),
|
|
709
|
+
summary: result.summary,
|
|
710
|
+
firstKeptIndex: result.firstKeptIndex,
|
|
711
|
+
tokensBefore: result.tokensBefore,
|
|
712
|
+
tokensAfter: result.tokensAfter
|
|
713
|
+
} });
|
|
714
|
+
const metadata = await this.getMetadata(key);
|
|
715
|
+
if (metadata) await this.updateMetadata(key, { compactedCount: metadata.compactedCount + 1 });
|
|
716
|
+
log.info({
|
|
717
|
+
key,
|
|
718
|
+
tokensBefore: result.tokensBefore,
|
|
719
|
+
tokensAfter: result.tokensAfter,
|
|
720
|
+
keptMessages: compacted.length
|
|
721
|
+
}, "Session compacted");
|
|
722
|
+
return compacted;
|
|
723
|
+
});
|
|
526
724
|
}
|
|
527
725
|
/**
|
|
528
726
|
* Compact session with LLM summary
|
|
@@ -545,6 +743,81 @@ var SessionStore = class {
|
|
|
545
743
|
lastCompactionAt: void 0
|
|
546
744
|
};
|
|
547
745
|
}
|
|
746
|
+
/**
|
|
747
|
+
* List pre-compaction transcript snapshots for a session (newest first).
|
|
748
|
+
*/
|
|
749
|
+
async listCompactionCheckpoints(key) {
|
|
750
|
+
const safeKey = this.sanitizeKey(key);
|
|
751
|
+
const dir = join(this.sessionsDir, resolveSessionShardRelativePath(key));
|
|
752
|
+
const prefix = this.checkpointBasenamePrefix(safeKey);
|
|
753
|
+
let names;
|
|
754
|
+
try {
|
|
755
|
+
names = await readdir(dir);
|
|
756
|
+
} catch {
|
|
757
|
+
return [];
|
|
758
|
+
}
|
|
759
|
+
const files = names.filter((n) => n.startsWith(prefix) && n.endsWith(".json"));
|
|
760
|
+
const valid = (await Promise.all(files.map(async (name) => {
|
|
761
|
+
const p = join(dir, name);
|
|
762
|
+
try {
|
|
763
|
+
const s = await stat(p);
|
|
764
|
+
const id = name.slice(prefix.length, -5);
|
|
765
|
+
if (!normalizeCompactionCheckpointId(id)) return null;
|
|
766
|
+
return {
|
|
767
|
+
id: normalizeCompactionCheckpointId(id),
|
|
768
|
+
sizeBytes: s.size,
|
|
769
|
+
modifiedAt: new Date(s.mtimeMs).toISOString()
|
|
770
|
+
};
|
|
771
|
+
} catch {
|
|
772
|
+
return null;
|
|
773
|
+
}
|
|
774
|
+
}))).filter((r) => r !== null);
|
|
775
|
+
valid.sort((a, b) => b.modifiedAt.localeCompare(a.modifiedAt));
|
|
776
|
+
return valid;
|
|
777
|
+
}
|
|
778
|
+
/**
|
|
779
|
+
* Metadata for a single compaction checkpoint file.
|
|
780
|
+
*/
|
|
781
|
+
async getCompactionCheckpointDetail(key, checkpointId) {
|
|
782
|
+
const id = normalizeCompactionCheckpointId(checkpointId);
|
|
783
|
+
if (!id) return null;
|
|
784
|
+
const safeKey = this.sanitizeKey(key);
|
|
785
|
+
const cpPath = join(join(this.sessionsDir, resolveSessionShardRelativePath(key)), `${this.checkpointBasenamePrefix(safeKey)}${id}.json`);
|
|
786
|
+
if (!existsSync(cpPath)) return null;
|
|
787
|
+
try {
|
|
788
|
+
const { messages } = parseStoredTranscriptJson(await readFile(cpPath, "utf-8"));
|
|
789
|
+
const s = await stat(cpPath);
|
|
790
|
+
return {
|
|
791
|
+
id,
|
|
792
|
+
sizeBytes: s.size,
|
|
793
|
+
modifiedAt: new Date(s.mtimeMs).toISOString(),
|
|
794
|
+
messageCount: messages.length
|
|
795
|
+
};
|
|
796
|
+
} catch {
|
|
797
|
+
return null;
|
|
798
|
+
}
|
|
799
|
+
}
|
|
800
|
+
/**
|
|
801
|
+
* Restore main transcript from a pre-compaction snapshot (then re-wrap + index sync).
|
|
802
|
+
* Does not delete the checkpoint file.
|
|
803
|
+
*/
|
|
804
|
+
async restoreCompactionCheckpoint(key, checkpointId) {
|
|
805
|
+
const id = normalizeCompactionCheckpointId(checkpointId);
|
|
806
|
+
if (!id) throw new Error("Invalid checkpoint id");
|
|
807
|
+
return this.runStoreMutation(async () => {
|
|
808
|
+
const safeKey = this.sanitizeKey(key);
|
|
809
|
+
const cpPath = join(join(this.sessionsDir, resolveSessionShardRelativePath(key)), `${this.checkpointBasenamePrefix(safeKey)}${id}.json`);
|
|
810
|
+
if (!existsSync(cpPath)) throw new Error(`Checkpoint not found: ${id}`);
|
|
811
|
+
const { jsonPath } = this.sessionPathsForKey(key);
|
|
812
|
+
await copyFile(cpPath, jsonPath);
|
|
813
|
+
const messages = await this.loadMessages(key);
|
|
814
|
+
await this.writeSessionTranscriptAndUpdateIndex(key, messages);
|
|
815
|
+
log.info({
|
|
816
|
+
key,
|
|
817
|
+
checkpointId: id
|
|
818
|
+
}, "Session transcript restored from compaction checkpoint");
|
|
819
|
+
});
|
|
820
|
+
}
|
|
548
821
|
/** Alias for delete */
|
|
549
822
|
async deleteSession(key) {
|
|
550
823
|
return this.delete(key);
|
|
@@ -568,15 +841,20 @@ var SessionStore = class {
|
|
|
568
841
|
return this.extractTextContent(m.content).toLowerCase().includes(keywordLower);
|
|
569
842
|
}));
|
|
570
843
|
}
|
|
844
|
+
/**
|
|
845
|
+
* JSON export includes API-shaped `messages` (LLM-only) plus `transcriptRows` (full on-disk order).
|
|
846
|
+
*/
|
|
571
847
|
async exportSession(key, format) {
|
|
572
848
|
const detail = await this.get(key);
|
|
573
849
|
if (!detail) throw new Error(`Session not found: ${key}`);
|
|
574
850
|
if (format === "json") {
|
|
851
|
+
const transcriptRows = await this.loadTranscriptRows(key);
|
|
575
852
|
const exportData = {
|
|
576
853
|
version: INDEX_VERSION,
|
|
577
854
|
exportedAt: (/* @__PURE__ */ new Date()).toISOString(),
|
|
578
855
|
metadata: detail,
|
|
579
|
-
messages: detail.messages
|
|
856
|
+
messages: detail.messages,
|
|
857
|
+
transcriptRows
|
|
580
858
|
};
|
|
581
859
|
return JSON.stringify(exportData, null, 2);
|
|
582
860
|
} else {
|
|
@@ -707,45 +985,49 @@ var SessionStore = class {
|
|
|
707
985
|
});
|
|
708
986
|
}
|
|
709
987
|
async moveToArchive(key) {
|
|
710
|
-
|
|
711
|
-
|
|
712
|
-
|
|
713
|
-
|
|
714
|
-
|
|
715
|
-
|
|
716
|
-
|
|
717
|
-
|
|
718
|
-
|
|
719
|
-
await writeFile(targetPath, await readFile(sourcePath, "utf-8"));
|
|
720
|
-
await unlink(sourcePath);
|
|
721
|
-
const metaSource = primary.metaPath;
|
|
722
|
-
const metaTarget = join(archiveShard, `${safeKey}.${timestamp}.meta.json`);
|
|
988
|
+
return this.runStoreMutation(async () => {
|
|
989
|
+
const safeKey = this.sanitizeKey(key);
|
|
990
|
+
const primary = this.sessionPathsForKey(key);
|
|
991
|
+
const sourcePath = existsSync(primary.jsonPath) ? primary.jsonPath : null;
|
|
992
|
+
if (!sourcePath) return;
|
|
993
|
+
const timestamp = (/* @__PURE__ */ new Date()).toISOString().replace(/[:.]/g, "-");
|
|
994
|
+
const archiveShard = join(this.archiveDir, resolveSessionShardRelativePath(key));
|
|
995
|
+
await mkdir(archiveShard, { recursive: true });
|
|
996
|
+
const targetPath = join(archiveShard, `${safeKey}.${timestamp}.json`);
|
|
723
997
|
try {
|
|
724
|
-
await
|
|
725
|
-
await unlink(
|
|
726
|
-
|
|
727
|
-
|
|
728
|
-
|
|
729
|
-
|
|
998
|
+
await writeTextAtomic(targetPath, await readFile(sourcePath, "utf-8"));
|
|
999
|
+
await unlink(sourcePath);
|
|
1000
|
+
const metaSource = primary.metaPath;
|
|
1001
|
+
const metaTarget = join(archiveShard, `${safeKey}.${timestamp}.meta.json`);
|
|
1002
|
+
try {
|
|
1003
|
+
await writeTextAtomic(metaTarget, await readFile(metaSource, "utf-8"));
|
|
1004
|
+
await unlink(metaSource);
|
|
1005
|
+
} catch {}
|
|
1006
|
+
} catch (err) {
|
|
1007
|
+
if (err.code !== "ENOENT") throw err;
|
|
1008
|
+
}
|
|
1009
|
+
});
|
|
730
1010
|
}
|
|
731
1011
|
async moveFromArchive(key) {
|
|
732
|
-
|
|
733
|
-
|
|
734
|
-
|
|
735
|
-
|
|
736
|
-
|
|
737
|
-
|
|
738
|
-
await writeFile(targetPath, await readFile(sourcePath, "utf-8"));
|
|
739
|
-
await unlink(sourcePath);
|
|
740
|
-
const metaSource = sourcePath.replace(".json", ".meta.json");
|
|
741
|
-
const metaTarget = primary.metaPath;
|
|
1012
|
+
return this.runStoreMutation(async () => {
|
|
1013
|
+
const sourcePath = await this.findMostRecentArchive(key);
|
|
1014
|
+
if (!sourcePath) return;
|
|
1015
|
+
const primary = this.sessionPathsForKey(key);
|
|
1016
|
+
await mkdir(primary.dir, { recursive: true });
|
|
1017
|
+
const targetPath = primary.jsonPath;
|
|
742
1018
|
try {
|
|
743
|
-
await
|
|
744
|
-
await unlink(
|
|
745
|
-
|
|
746
|
-
|
|
747
|
-
|
|
748
|
-
|
|
1019
|
+
await writeTextAtomic(targetPath, await readFile(sourcePath, "utf-8"));
|
|
1020
|
+
await unlink(sourcePath);
|
|
1021
|
+
const metaSource = sourcePath.replace(".json", ".meta.json");
|
|
1022
|
+
const metaTarget = primary.metaPath;
|
|
1023
|
+
try {
|
|
1024
|
+
await writeTextAtomic(metaTarget, await readFile(metaSource, "utf-8"));
|
|
1025
|
+
await unlink(metaSource);
|
|
1026
|
+
} catch {}
|
|
1027
|
+
} catch (err) {
|
|
1028
|
+
if (err.code !== "ENOENT") throw err;
|
|
1029
|
+
}
|
|
1030
|
+
});
|
|
749
1031
|
}
|
|
750
1032
|
};
|
|
751
1033
|
//#endregion
|