@aitne/daemon 0.1.3 → 0.1.6
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/adapters/notification-manager.d.ts +12 -0
- package/dist/adapters/notification-manager.d.ts.map +1 -1
- package/dist/adapters/notification-manager.js +39 -1
- package/dist/adapters/notification-manager.js.map +1 -1
- package/dist/adapters/whatsapp-adapter.d.ts.map +1 -1
- package/dist/adapters/whatsapp-adapter.js +0 -1
- package/dist/adapters/whatsapp-adapter.js.map +1 -1
- package/dist/api/integration-route-gate.d.ts +15 -11
- package/dist/api/integration-route-gate.d.ts.map +1 -1
- package/dist/api/integration-route-gate.js +60 -23
- package/dist/api/integration-route-gate.js.map +1 -1
- package/dist/api/json-body.d.ts +22 -7
- package/dist/api/json-body.d.ts.map +1 -1
- package/dist/api/json-body.js +27 -8
- package/dist/api/json-body.js.map +1 -1
- package/dist/api/routes/agent.d.ts.map +1 -1
- package/dist/api/routes/agent.js +25 -0
- package/dist/api/routes/agent.js.map +1 -1
- package/dist/api/routes/backends.d.ts.map +1 -1
- package/dist/api/routes/backends.js +96 -1
- package/dist/api/routes/backends.js.map +1 -1
- package/dist/api/routes/books.js +1 -1
- package/dist/api/routes/books.js.map +1 -1
- package/dist/api/routes/commands.d.ts.map +1 -1
- package/dist/api/routes/commands.js +16 -13
- package/dist/api/routes/commands.js.map +1 -1
- package/dist/api/routes/context.d.ts.map +1 -1
- package/dist/api/routes/context.js +26 -3
- package/dist/api/routes/context.js.map +1 -1
- package/dist/api/routes/dashboard.d.ts.map +1 -1
- package/dist/api/routes/dashboard.js +103 -5
- package/dist/api/routes/dashboard.js.map +1 -1
- package/dist/api/routes/fs.d.ts +23 -0
- package/dist/api/routes/fs.d.ts.map +1 -0
- package/dist/api/routes/fs.js +156 -0
- package/dist/api/routes/fs.js.map +1 -0
- package/dist/api/routes/fs.logic.d.ts +62 -0
- package/dist/api/routes/fs.logic.d.ts.map +1 -0
- package/dist/api/routes/fs.logic.js +137 -0
- package/dist/api/routes/fs.logic.js.map +1 -0
- package/dist/api/routes/github.d.ts.map +1 -1
- package/dist/api/routes/github.js +38 -5
- package/dist/api/routes/github.js.map +1 -1
- package/dist/api/routes/health.d.ts.map +1 -1
- package/dist/api/routes/health.js +4 -2
- package/dist/api/routes/health.js.map +1 -1
- package/dist/api/routes/integrations.d.ts +35 -6
- package/dist/api/routes/integrations.d.ts.map +1 -1
- package/dist/api/routes/integrations.js +192 -15
- package/dist/api/routes/integrations.js.map +1 -1
- package/dist/api/routes/mail.d.ts.map +1 -1
- package/dist/api/routes/mail.js +112 -46
- package/dist/api/routes/mail.js.map +1 -1
- package/dist/api/routes/metrics.d.ts +1 -0
- package/dist/api/routes/metrics.d.ts.map +1 -1
- package/dist/api/routes/metrics.js +24 -0
- package/dist/api/routes/metrics.js.map +1 -1
- package/dist/api/routes/observations.d.ts.map +1 -1
- package/dist/api/routes/observations.js +696 -30
- package/dist/api/routes/observations.js.map +1 -1
- package/dist/api/routes/setup-migrate.d.ts +9 -1
- package/dist/api/routes/setup-migrate.d.ts.map +1 -1
- package/dist/api/routes/setup-migrate.js +4 -2
- package/dist/api/routes/setup-migrate.js.map +1 -1
- package/dist/api/routes/skills.d.ts +9 -1
- package/dist/api/routes/skills.d.ts.map +1 -1
- package/dist/api/routes/skills.js +77 -17
- package/dist/api/routes/skills.js.map +1 -1
- package/dist/api/routes/voice.d.ts.map +1 -1
- package/dist/api/routes/voice.js +62 -4
- package/dist/api/routes/voice.js.map +1 -1
- package/dist/api/routes/wiki.d.ts +4 -0
- package/dist/api/routes/wiki.d.ts.map +1 -0
- package/dist/api/routes/wiki.js +1075 -0
- package/dist/api/routes/wiki.js.map +1 -0
- package/dist/api/server.d.ts +13 -0
- package/dist/api/server.d.ts.map +1 -1
- package/dist/api/server.js +27 -1
- package/dist/api/server.js.map +1 -1
- package/dist/bootstrap/adapters.d.ts +109 -0
- package/dist/bootstrap/adapters.d.ts.map +1 -0
- package/dist/bootstrap/adapters.js +237 -0
- package/dist/bootstrap/adapters.js.map +1 -0
- package/dist/bootstrap/catchup.d.ts +23 -0
- package/dist/bootstrap/catchup.d.ts.map +1 -0
- package/dist/bootstrap/catchup.js +124 -0
- package/dist/bootstrap/catchup.js.map +1 -0
- package/dist/bootstrap/schedule-helpers.d.ts +18 -0
- package/dist/bootstrap/schedule-helpers.d.ts.map +1 -0
- package/dist/bootstrap/schedule-helpers.js +96 -0
- package/dist/bootstrap/schedule-helpers.js.map +1 -0
- package/dist/bootstrap/services.d.ts +60 -0
- package/dist/bootstrap/services.d.ts.map +1 -0
- package/dist/bootstrap/services.js +209 -0
- package/dist/bootstrap/services.js.map +1 -0
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +26 -0
- package/dist/config.js.map +1 -1
- package/dist/core/agent-core.d.ts +25 -0
- package/dist/core/agent-core.d.ts.map +1 -1
- package/dist/core/agent-core.js.map +1 -1
- package/dist/core/backends/backend-router.d.ts +28 -1
- package/dist/core/backends/backend-router.d.ts.map +1 -1
- package/dist/core/backends/backend-router.js +58 -4
- package/dist/core/backends/backend-router.js.map +1 -1
- package/dist/core/backends/claude-auth.d.ts +70 -0
- package/dist/core/backends/claude-auth.d.ts.map +1 -0
- package/dist/core/backends/claude-auth.js +198 -0
- package/dist/core/backends/claude-auth.js.map +1 -0
- package/dist/core/backends/claude-code-core.d.ts +47 -119
- package/dist/core/backends/claude-code-core.d.ts.map +1 -1
- package/dist/core/backends/claude-code-core.js +166 -1561
- package/dist/core/backends/claude-code-core.js.map +1 -1
- package/dist/core/backends/claude-delegated.d.ts +86 -0
- package/dist/core/backends/claude-delegated.d.ts.map +1 -0
- package/dist/core/backends/claude-delegated.js +801 -0
- package/dist/core/backends/claude-delegated.js.map +1 -0
- package/dist/core/backends/claude-errors.d.ts +39 -0
- package/dist/core/backends/claude-errors.d.ts.map +1 -0
- package/dist/core/backends/claude-errors.js +71 -0
- package/dist/core/backends/claude-errors.js.map +1 -0
- package/dist/core/backends/claude-probe.d.ts +103 -0
- package/dist/core/backends/claude-probe.d.ts.map +1 -0
- package/dist/core/backends/claude-probe.js +336 -0
- package/dist/core/backends/claude-probe.js.map +1 -0
- package/dist/core/backends/claude-tool-collection.d.ts +135 -0
- package/dist/core/backends/claude-tool-collection.d.ts.map +1 -0
- package/dist/core/backends/claude-tool-collection.js +1093 -0
- package/dist/core/backends/claude-tool-collection.js.map +1 -0
- package/dist/core/backends/codex-core.d.ts.map +1 -1
- package/dist/core/backends/codex-core.js +36 -0
- package/dist/core/backends/codex-core.js.map +1 -1
- package/dist/core/backends/gemini-cli-core.d.ts +45 -5
- package/dist/core/backends/gemini-cli-core.d.ts.map +1 -1
- package/dist/core/backends/gemini-cli-core.js +146 -36
- package/dist/core/backends/gemini-cli-core.js.map +1 -1
- package/dist/core/backends/plan-presets.d.ts +3 -1
- package/dist/core/backends/plan-presets.d.ts.map +1 -1
- package/dist/core/backends/plan-presets.js +42 -2
- package/dist/core/backends/plan-presets.js.map +1 -1
- package/dist/core/backends/prompt-utils.d.ts +1 -0
- package/dist/core/backends/prompt-utils.d.ts.map +1 -1
- package/dist/core/backends/prompt-utils.js +60 -3
- package/dist/core/backends/prompt-utils.js.map +1 -1
- package/dist/core/bang-commands/commands-help.d.ts +5 -0
- package/dist/core/bang-commands/commands-help.d.ts.map +1 -0
- package/dist/core/bang-commands/commands-help.js +69 -0
- package/dist/core/bang-commands/commands-help.js.map +1 -0
- package/dist/core/bang-commands/commands-wiki.d.ts +75 -0
- package/dist/core/bang-commands/commands-wiki.d.ts.map +1 -0
- package/dist/core/bang-commands/commands-wiki.js +574 -0
- package/dist/core/bang-commands/commands-wiki.js.map +1 -0
- package/dist/core/bang-commands/index.d.ts +4 -2
- package/dist/core/bang-commands/index.d.ts.map +1 -1
- package/dist/core/bang-commands/index.js +15 -1
- package/dist/core/bang-commands/index.js.map +1 -1
- package/dist/core/bang-commands/registry.d.ts +47 -4
- package/dist/core/bang-commands/registry.d.ts.map +1 -1
- package/dist/core/bang-commands/registry.js +85 -15
- package/dist/core/bang-commands/registry.js.map +1 -1
- package/dist/core/context-builder.d.ts +53 -12
- package/dist/core/context-builder.d.ts.map +1 -1
- package/dist/core/context-builder.js +240 -92
- package/dist/core/context-builder.js.map +1 -1
- package/dist/core/daemon-api-cli.d.ts.map +1 -1
- package/dist/core/daemon-api-cli.js +50 -2
- package/dist/core/daemon-api-cli.js.map +1 -1
- package/dist/core/dispatcher-date-utils.d.ts +49 -0
- package/dist/core/dispatcher-date-utils.d.ts.map +1 -0
- package/dist/core/dispatcher-date-utils.js +132 -0
- package/dist/core/dispatcher-date-utils.js.map +1 -0
- package/dist/core/dispatcher-error-handling.d.ts +159 -0
- package/dist/core/dispatcher-error-handling.d.ts.map +1 -0
- package/dist/core/dispatcher-error-handling.js +393 -0
- package/dist/core/dispatcher-error-handling.js.map +1 -0
- package/dist/core/dispatcher-hourly-check.d.ts +150 -0
- package/dist/core/dispatcher-hourly-check.d.ts.map +1 -0
- package/dist/core/dispatcher-hourly-check.js +665 -0
- package/dist/core/dispatcher-hourly-check.js.map +1 -0
- package/dist/core/dispatcher-message-handler.d.ts +170 -0
- package/dist/core/dispatcher-message-handler.d.ts.map +1 -0
- package/dist/core/dispatcher-message-handler.js +1064 -0
- package/dist/core/dispatcher-message-handler.js.map +1 -0
- package/dist/core/dispatcher-morning-routine.d.ts +169 -0
- package/dist/core/dispatcher-morning-routine.d.ts.map +1 -0
- package/dist/core/dispatcher-morning-routine.js +449 -0
- package/dist/core/dispatcher-morning-routine.js.map +1 -0
- package/dist/core/dispatcher-prompt.d.ts +107 -0
- package/dist/core/dispatcher-prompt.d.ts.map +1 -0
- package/dist/core/dispatcher-prompt.js +227 -0
- package/dist/core/dispatcher-prompt.js.map +1 -0
- package/dist/core/dispatcher-repository-helpers.d.ts +39 -0
- package/dist/core/dispatcher-repository-helpers.d.ts.map +1 -0
- package/dist/core/dispatcher-repository-helpers.js +86 -0
- package/dist/core/dispatcher-repository-helpers.js.map +1 -0
- package/dist/core/dispatcher-result-processor.d.ts +168 -0
- package/dist/core/dispatcher-result-processor.d.ts.map +1 -0
- package/dist/core/dispatcher-result-processor.js +533 -0
- package/dist/core/dispatcher-result-processor.js.map +1 -0
- package/dist/core/dispatcher-scheduled-tasks.d.ts +406 -0
- package/dist/core/dispatcher-scheduled-tasks.d.ts.map +1 -0
- package/dist/core/dispatcher-scheduled-tasks.js +1032 -0
- package/dist/core/dispatcher-scheduled-tasks.js.map +1 -0
- package/dist/core/dispatcher-types.d.ts +411 -0
- package/dist/core/dispatcher-types.d.ts.map +1 -0
- package/dist/core/dispatcher-types.js +106 -0
- package/dist/core/dispatcher-types.js.map +1 -0
- package/dist/core/dispatcher.d.ts +122 -610
- package/dist/core/dispatcher.d.ts.map +1 -1
- package/dist/core/dispatcher.js +365 -3521
- package/dist/core/dispatcher.js.map +1 -1
- package/dist/core/integration-health.d.ts +18 -10
- package/dist/core/integration-health.d.ts.map +1 -1
- package/dist/core/integration-health.js +31 -1
- package/dist/core/integration-health.js.map +1 -1
- package/dist/core/integration-lifecycle.d.ts +65 -0
- package/dist/core/integration-lifecycle.d.ts.map +1 -1
- package/dist/core/integration-lifecycle.js +163 -14
- package/dist/core/integration-lifecycle.js.map +1 -1
- package/dist/core/integration-main-backend.d.ts +40 -0
- package/dist/core/integration-main-backend.d.ts.map +1 -1
- package/dist/core/integration-main-backend.js +89 -2
- package/dist/core/integration-main-backend.js.map +1 -1
- package/dist/core/management-md.d.ts +51 -17
- package/dist/core/management-md.d.ts.map +1 -1
- package/dist/core/management-md.js +233 -56
- package/dist/core/management-md.js.map +1 -1
- package/dist/core/metrics.d.ts +127 -0
- package/dist/core/metrics.d.ts.map +1 -1
- package/dist/core/metrics.js +256 -1
- package/dist/core/metrics.js.map +1 -1
- package/dist/core/output-language-policy.d.ts +74 -0
- package/dist/core/output-language-policy.d.ts.map +1 -0
- package/dist/core/output-language-policy.js +194 -0
- package/dist/core/output-language-policy.js.map +1 -0
- package/dist/core/prompts.d.ts +3 -1
- package/dist/core/prompts.d.ts.map +1 -1
- package/dist/core/prompts.js +161 -3
- package/dist/core/prompts.js.map +1 -1
- package/dist/core/repository-management-docs.d.ts +24 -0
- package/dist/core/repository-management-docs.d.ts.map +1 -1
- package/dist/core/repository-management-docs.js +210 -26
- package/dist/core/repository-management-docs.js.map +1 -1
- package/dist/core/roadmap-validate.js +13 -1
- package/dist/core/roadmap-validate.js.map +1 -1
- package/dist/core/routine-acquisition-plan.d.ts +182 -0
- package/dist/core/routine-acquisition-plan.d.ts.map +1 -0
- package/dist/core/routine-acquisition-plan.js +367 -0
- package/dist/core/routine-acquisition-plan.js.map +1 -0
- package/dist/core/routine-fetch-window-retry.d.ts +109 -0
- package/dist/core/routine-fetch-window-retry.d.ts.map +1 -0
- package/dist/core/routine-fetch-window-retry.js +210 -0
- package/dist/core/routine-fetch-window-retry.js.map +1 -0
- package/dist/core/routine-fetch-window-runner.d.ts +427 -0
- package/dist/core/routine-fetch-window-runner.d.ts.map +1 -0
- package/dist/core/routine-fetch-window-runner.js +1591 -0
- package/dist/core/routine-fetch-window-runner.js.map +1 -0
- package/dist/core/routine-windows.d.ts +171 -0
- package/dist/core/routine-windows.d.ts.map +1 -0
- package/dist/core/routine-windows.js +377 -0
- package/dist/core/routine-windows.js.map +1 -0
- package/dist/core/scheduler.d.ts +50 -2
- package/dist/core/scheduler.d.ts.map +1 -1
- package/dist/core/scheduler.js +88 -7
- package/dist/core/scheduler.js.map +1 -1
- package/dist/core/skill-curation/declarations.d.ts.map +1 -1
- package/dist/core/skill-curation/declarations.js +11 -12
- package/dist/core/skill-curation/declarations.js.map +1 -1
- package/dist/core/skill-source-paths.d.ts +14 -0
- package/dist/core/skill-source-paths.d.ts.map +1 -0
- package/dist/core/skill-source-paths.js +82 -0
- package/dist/core/skill-source-paths.js.map +1 -0
- package/dist/core/skills-compiler.d.ts +29 -0
- package/dist/core/skills-compiler.d.ts.map +1 -1
- package/dist/core/skills-compiler.js +166 -30
- package/dist/core/skills-compiler.js.map +1 -1
- package/dist/core/skills-manifest.d.ts.map +1 -1
- package/dist/core/skills-manifest.js +72 -0
- package/dist/core/skills-manifest.js.map +1 -1
- package/dist/core/system-reset.d.ts +25 -0
- package/dist/core/system-reset.d.ts.map +1 -1
- package/dist/core/system-reset.js +72 -2
- package/dist/core/system-reset.js.map +1 -1
- package/dist/core/wiki/approval-queue.d.ts +31 -0
- package/dist/core/wiki/approval-queue.d.ts.map +1 -0
- package/dist/core/wiki/approval-queue.js +44 -0
- package/dist/core/wiki/approval-queue.js.map +1 -0
- package/dist/core/wiki/bridge.d.ts +74 -0
- package/dist/core/wiki/bridge.d.ts.map +1 -0
- package/dist/core/wiki/bridge.js +405 -0
- package/dist/core/wiki/bridge.js.map +1 -0
- package/dist/core/wiki/compile-lock.d.ts +42 -0
- package/dist/core/wiki/compile-lock.d.ts.map +1 -0
- package/dist/core/wiki/compile-lock.js +55 -0
- package/dist/core/wiki/compile-lock.js.map +1 -0
- package/dist/core/wiki/compile-preview.d.ts +8 -0
- package/dist/core/wiki/compile-preview.d.ts.map +1 -0
- package/dist/core/wiki/compile-preview.js +200 -0
- package/dist/core/wiki/compile-preview.js.map +1 -0
- package/dist/core/wiki/cost-estimate.d.ts +30 -0
- package/dist/core/wiki/cost-estimate.d.ts.map +1 -0
- package/dist/core/wiki/cost-estimate.js +243 -0
- package/dist/core/wiki/cost-estimate.js.map +1 -0
- package/dist/core/wiki/dispatcher.d.ts +48 -0
- package/dist/core/wiki/dispatcher.d.ts.map +1 -0
- package/dist/core/wiki/dispatcher.js +92 -0
- package/dist/core/wiki/dispatcher.js.map +1 -0
- package/dist/core/wiki/git-precompile.d.ts +86 -0
- package/dist/core/wiki/git-precompile.d.ts.map +1 -0
- package/dist/core/wiki/git-precompile.js +96 -0
- package/dist/core/wiki/git-precompile.js.map +1 -0
- package/dist/core/wiki/import-migrate.d.ts +38 -0
- package/dist/core/wiki/import-migrate.d.ts.map +1 -0
- package/dist/core/wiki/import-migrate.js +310 -0
- package/dist/core/wiki/import-migrate.js.map +1 -0
- package/dist/core/wiki/import-probe.d.ts +76 -0
- package/dist/core/wiki/import-probe.d.ts.map +1 -0
- package/dist/core/wiki/import-probe.js +245 -0
- package/dist/core/wiki/import-probe.js.map +1 -0
- package/dist/core/wiki/index-cache.d.ts +39 -0
- package/dist/core/wiki/index-cache.d.ts.map +1 -0
- package/dist/core/wiki/index-cache.js +152 -0
- package/dist/core/wiki/index-cache.js.map +1 -0
- package/dist/core/wiki/multi-url-dispatch.d.ts +52 -0
- package/dist/core/wiki/multi-url-dispatch.d.ts.map +1 -0
- package/dist/core/wiki/multi-url-dispatch.js +72 -0
- package/dist/core/wiki/multi-url-dispatch.js.map +1 -0
- package/dist/core/wiki/wiki-fts.d.ts +75 -0
- package/dist/core/wiki/wiki-fts.d.ts.map +1 -0
- package/dist/core/wiki/wiki-fts.js +265 -0
- package/dist/core/wiki/wiki-fts.js.map +1 -0
- package/dist/core/wiki/workspaces.d.ts +101 -0
- package/dist/core/wiki/workspaces.d.ts.map +1 -0
- package/dist/core/wiki/workspaces.js +352 -0
- package/dist/core/wiki/workspaces.js.map +1 -0
- package/dist/core/wiki/write-strategy.d.ts +70 -0
- package/dist/core/wiki/write-strategy.d.ts.map +1 -0
- package/dist/core/wiki/write-strategy.js +112 -0
- package/dist/core/wiki/write-strategy.js.map +1 -0
- package/dist/core/workdir.d.ts +8 -1
- package/dist/core/workdir.d.ts.map +1 -1
- package/dist/core/workdir.js +4 -1
- package/dist/core/workdir.js.map +1 -1
- package/dist/db/observations.d.ts +45 -2
- package/dist/db/observations.d.ts.map +1 -1
- package/dist/db/observations.js +112 -14
- package/dist/db/observations.js.map +1 -1
- package/dist/db/schema.d.ts.map +1 -1
- package/dist/db/schema.js +135 -25
- package/dist/db/schema.js.map +1 -1
- package/dist/db/wiki-store.d.ts +3 -0
- package/dist/db/wiki-store.d.ts.map +1 -0
- package/dist/db/wiki-store.js +7 -0
- package/dist/db/wiki-store.js.map +1 -0
- package/dist/index.js +159 -610
- package/dist/index.js.map +1 -1
- package/dist/messaging/url-extract.d.ts +8 -0
- package/dist/messaging/url-extract.d.ts.map +1 -0
- package/dist/messaging/url-extract.js +41 -0
- package/dist/messaging/url-extract.js.map +1 -0
- package/dist/observers/delegated-sync-worker.d.ts +52 -1
- package/dist/observers/delegated-sync-worker.d.ts.map +1 -1
- package/dist/observers/delegated-sync-worker.js +75 -18
- package/dist/observers/delegated-sync-worker.js.map +1 -1
- package/dist/observers/imminent-event-scheduler.d.ts +20 -7
- package/dist/observers/imminent-event-scheduler.d.ts.map +1 -1
- package/dist/observers/imminent-event-scheduler.js +134 -29
- package/dist/observers/imminent-event-scheduler.js.map +1 -1
- package/dist/observers/mail-poller.d.ts +12 -5
- package/dist/observers/mail-poller.d.ts.map +1 -1
- package/dist/observers/mail-poller.js +36 -14
- package/dist/observers/mail-poller.js.map +1 -1
- package/dist/observers/manager.d.ts +37 -5
- package/dist/observers/manager.d.ts.map +1 -1
- package/dist/observers/manager.js +28 -10
- package/dist/observers/manager.js.map +1 -1
- package/dist/safety/always-disallowed.d.ts +65 -0
- package/dist/safety/always-disallowed.d.ts.map +1 -1
- package/dist/safety/always-disallowed.js +106 -10
- package/dist/safety/always-disallowed.js.map +1 -1
- package/dist/safety/audit.d.ts +46 -1
- package/dist/safety/audit.d.ts.map +1 -1
- package/dist/safety/audit.js +79 -16
- package/dist/safety/audit.js.map +1 -1
- package/dist/safety/risk-classifier.d.ts.map +1 -1
- package/dist/safety/risk-classifier.js +29 -0
- package/dist/safety/risk-classifier.js.map +1 -1
- package/dist/services/delegated-backend-invoker.d.ts +1 -51
- package/dist/services/delegated-backend-invoker.d.ts.map +1 -1
- package/dist/services/delegated-backend-invoker.js +41 -480
- package/dist/services/delegated-backend-invoker.js.map +1 -1
- package/dist/services/delegated-invoker-audit.d.ts +94 -0
- package/dist/services/delegated-invoker-audit.d.ts.map +1 -0
- package/dist/services/delegated-invoker-audit.js +238 -0
- package/dist/services/delegated-invoker-audit.js.map +1 -0
- package/dist/services/delegated-invoker-cache-hits.d.ts +34 -0
- package/dist/services/delegated-invoker-cache-hits.d.ts.map +1 -0
- package/dist/services/delegated-invoker-cache-hits.js +104 -0
- package/dist/services/delegated-invoker-cache-hits.js.map +1 -0
- package/dist/services/delegated-invoker-janitors.d.ts +28 -0
- package/dist/services/delegated-invoker-janitors.d.ts.map +1 -0
- package/dist/services/delegated-invoker-janitors.js +104 -0
- package/dist/services/delegated-invoker-janitors.js.map +1 -0
- package/dist/services/delegated-invoker-utils.d.ts +42 -0
- package/dist/services/delegated-invoker-utils.d.ts.map +1 -0
- package/dist/services/delegated-invoker-utils.js +100 -0
- package/dist/services/delegated-invoker-utils.js.map +1 -0
- package/dist/services/delegated-task-runtime.d.ts +1 -1
- package/dist/services/delegated-task-runtime.js +1 -1
- package/dist/services/integrations/snapshot-partitions.d.ts +5 -0
- package/dist/services/integrations/snapshot-partitions.d.ts.map +1 -1
- package/dist/services/integrations/snapshot-partitions.js +12 -0
- package/dist/services/integrations/snapshot-partitions.js.map +1 -1
- package/dist/services/voice/transcriber-impl.d.ts.map +1 -1
- package/dist/services/voice/transcriber-impl.js +7 -8
- package/dist/services/voice/transcriber-impl.js.map +1 -1
- package/dist/settings/runtime-settings.d.ts +12 -1
- package/dist/settings/runtime-settings.d.ts.map +1 -1
- package/dist/settings/runtime-settings.js +59 -1
- package/dist/settings/runtime-settings.js.map +1 -1
- package/package.json +2 -2
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"output-language-policy.js","sourceRoot":"","sources":["../../src/core/output-language-policy.ts"],"names":[],"mappings":"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"}
|
package/dist/core/prompts.d.ts
CHANGED
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
* Flows are injected as part of the user message by the dispatcher.
|
|
8
8
|
* The {context} placeholder is replaced with the ContextBuilder output.
|
|
9
9
|
*/
|
|
10
|
-
import { type IntegrationKey, type IntegrationState } from "@aitne/shared";
|
|
10
|
+
import { type BackendId, type IntegrationKey, type IntegrationState } from "@aitne/shared";
|
|
11
11
|
/**
|
|
12
12
|
* Initialize the task-flow loader.
|
|
13
13
|
*
|
|
@@ -37,6 +37,8 @@ export declare function resetTaskFlowsForTest(): void;
|
|
|
37
37
|
* treats null as "no override layer present".
|
|
38
38
|
*/
|
|
39
39
|
export declare function getUserTaskFlowsDir(): string | null;
|
|
40
|
+
export declare function expandPartialIncludes(content: string): string;
|
|
41
|
+
export declare function renderPartialForFanOut(filename: string, integrations: Partial<Record<IntegrationKey, IntegrationState>>, backendId: BackendId): string;
|
|
40
42
|
/**
|
|
41
43
|
* Get the task flow template for a given event type.
|
|
42
44
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"prompts.d.ts","sourceRoot":"","sources":["../../src/core/prompts.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAKH,OAAO,
|
|
1
|
+
{"version":3,"file":"prompts.d.ts","sourceRoot":"","sources":["../../src/core/prompts.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAKH,OAAO,EAKL,KAAK,SAAS,EACd,KAAK,cAAc,EACnB,KAAK,gBAAgB,EACtB,MAAM,eAAe,CAAC;AAcvB;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,aAAa,CAAC,YAAY,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAI1E;AAED;;;GAGG;AACH,wBAAgB,qBAAqB,IAAI,IAAI,CAI5C;AAgBD;;;;GAIG;AACH,wBAAgB,mBAAmB,IAAI,MAAM,GAAG,IAAI,CAEnD;AA+JD,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAU7D;AAkCD,wBAAgB,sBAAsB,CACpC,QAAQ,EAAE,MAAM,EAChB,YAAY,EAAE,OAAO,CAAC,MAAM,CAAC,cAAc,EAAE,gBAAgB,CAAC,CAAC,EAC/D,SAAS,EAAE,SAAS,GACnB,MAAM,CAMR;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,WAAW,CACzB,SAAS,EAAE,MAAM,EACjB,SAAS,CAAC,EAAE,MAAM,EAClB,YAAY,CAAC,EAAE,OAAO,CAAC,MAAM,CAAC,cAAc,EAAE,gBAAgB,CAAC,CAAC,GAC/D,MAAM,CA2BR;AAuBD;;;;;;;;GAQG;AACH,wBAAgB,cAAc,CAC5B,SAAS,EAAE,MAAM,EACjB,IAAI,GAAE;IACJ,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAChC,kBAAkB,CAAC,EAAE;QACnB,iBAAiB,EAAE,OAAO,CAAC;QAC3B,eAAe,EAAE,OAAO,CAAC;KAC1B,CAAC;IACF,YAAY,CAAC,EAAE,OAAO,CAAC,MAAM,CAAC,cAAc,EAAE,gBAAgB,CAAC,CAAC,CAAC;CAC7D,GACL,MAAM,CAoBR;AAED;;;;;;;;;;;;;;;GAeG;AACH,MAAM,WAAW,iBAAiB;IAChC,GAAG,EAAE,MAAM,CAAC;IACZ,UAAU,EAAE,OAAO,CAAC;IACpB,WAAW,EAAE,OAAO,CAAC;CACtB;AAED,wBAAgB,aAAa,IAAI,iBAAiB,EAAE,CAWnD;AAED;;;;;GAKG;AACH,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,MAAM,GAAG;IAChD,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;CACzB,CAcA"}
|
package/dist/core/prompts.js
CHANGED
|
@@ -13,6 +13,7 @@ import { fileURLToPath } from "node:url";
|
|
|
13
13
|
import { applyIntegrationModeFilter, isCustomRoutineKey, selectTaskFlowVariantSuffix, substituteBrandTokens, } from "@aitne/shared";
|
|
14
14
|
import { appendPolicyBlocks, createPromptInjectionBudget, } from "./policy-files.js";
|
|
15
15
|
import { appendReviewContextBlocks } from "./review-context.js";
|
|
16
|
+
import { substituteIntegrationRoutingTables } from "./management-md.js";
|
|
16
17
|
const __dirname = dirname(fileURLToPath(import.meta.url));
|
|
17
18
|
let taskFlowsDir = null;
|
|
18
19
|
let userTaskFlowsDir = null;
|
|
@@ -124,11 +125,152 @@ function loadFlowVariant(eventType, backendId, integrations) {
|
|
|
124
125
|
if (suffix !== "direct") {
|
|
125
126
|
const variant = readFlowFile(`${eventType}.${suffix}.md`);
|
|
126
127
|
if (variant !== null)
|
|
127
|
-
return variant;
|
|
128
|
+
return expandTaskFlowPartials(variant, eventType);
|
|
128
129
|
}
|
|
129
130
|
// Fall back to the canonical file (covers direct mode and missing variants)
|
|
130
131
|
return loadFlow(eventType);
|
|
131
132
|
}
|
|
133
|
+
/**
|
|
134
|
+
* INTEGRATION_NATIVE_MODE_DESIGN.md §8.2 — a task-flow variant may
|
|
135
|
+
* include the canonical base flow via the `{{> base }}` directive,
|
|
136
|
+
* mirroring `renderPartialIncludes` for skills (skills-compiler.ts:1296).
|
|
137
|
+
* The directive is replaced with the body of `<eventType>.md` with the
|
|
138
|
+
* leading `{context}\n\n` block stripped — the variant carries its own
|
|
139
|
+
* `{context}` at the top, and duplicating the token would double the
|
|
140
|
+
* context-builder output once `resolveTemplate` fills both occurrences.
|
|
141
|
+
*
|
|
142
|
+
* Missing / empty base flow → directive collapses to the empty string
|
|
143
|
+
* (mirrors `renderPartialIncludes`'s missing-base behaviour). Pure
|
|
144
|
+
* function on the file content; no caching beyond the loader's existing
|
|
145
|
+
* `flowCache`.
|
|
146
|
+
*/
|
|
147
|
+
function expandTaskFlowPartials(content, eventType) {
|
|
148
|
+
if (!content.includes("{{> base }}"))
|
|
149
|
+
return content;
|
|
150
|
+
// Resolve against the BUNDLED base file only — the user-override
|
|
151
|
+
// resolution layer is one-way (variants may override; partial includes
|
|
152
|
+
// pin to canonical assets so a malformed override doesn't cascade into
|
|
153
|
+
// every variant that includes it). This matches the skill partial
|
|
154
|
+
// resolver's "read from src verbatim" stance (skills-compiler.ts:612).
|
|
155
|
+
const dir = resolveTaskFlowsDir();
|
|
156
|
+
const basePath = join(dir, `${eventType}.md`);
|
|
157
|
+
if (!existsSync(basePath))
|
|
158
|
+
return content.replaceAll("{{> base }}", "");
|
|
159
|
+
const baseRaw = substituteBrandTokens(readFileSync(basePath, "utf-8"));
|
|
160
|
+
// Strip the leading `{context}\n\n` (or `{context}\n` for unix-style
|
|
161
|
+
// files that omit the second newline) so the merged body has exactly
|
|
162
|
+
// one context block at the very top — the one the variant author put
|
|
163
|
+
// there. Anchored at start with `^` so a `{context}` token appearing
|
|
164
|
+
// mid-flow (none today, but defensive) is preserved.
|
|
165
|
+
const baseStripped = baseRaw.replace(/^\{context\}\n\n?/, "");
|
|
166
|
+
return content.replaceAll("{{> base }}", baseStripped);
|
|
167
|
+
}
|
|
168
|
+
/**
|
|
169
|
+
* ROUTINE_DATA_ACQUISITION_DESIGN.md Phase 1 / F0 — resolve
|
|
170
|
+
* `{include:_partials/<name>.md}` directives in a task-flow body by
|
|
171
|
+
* inlining the verbatim contents of `agent-assets/task-flows/_partials/
|
|
172
|
+
* <name>.md`. Runs BEFORE `applyIntegrationModeFilter` so any
|
|
173
|
+
* `<!-- mode:...:... -->` blocks the partial carries are filtered
|
|
174
|
+
* normally for the current integration state.
|
|
175
|
+
*
|
|
176
|
+
* Behaviour:
|
|
177
|
+
* - Partials live at `agent-assets/task-flows/_partials/`. The
|
|
178
|
+
* user-override layer (`<dataDir>/task-flows/_partials/`) wins per
|
|
179
|
+
* file, matching `readFlowFile`'s contract.
|
|
180
|
+
* - The leading YAML frontmatter block (`---\n…\n---\n`) is stripped
|
|
181
|
+
* so authors may carry editorial metadata in partials without it
|
|
182
|
+
* leaking into the prompt body.
|
|
183
|
+
* - **Depth cap = 1.** Includes inside an included partial are NOT
|
|
184
|
+
* expanded — the include directive there is left visible so a
|
|
185
|
+
* runaway recursion shows up as a verbatim `{include:...}` token in
|
|
186
|
+
* the rendered prompt rather than silently looping. Tests / authors
|
|
187
|
+
* can grep for the directive to detect cycles.
|
|
188
|
+
* - Missing partials collapse to the empty string, matching
|
|
189
|
+
* `{{> base }}`'s missing-base behaviour. The lint pass (R2/F8)
|
|
190
|
+
* catches references to non-existent partials at test time.
|
|
191
|
+
* - Filename safety: `<name>` is constrained to
|
|
192
|
+
* `[A-Za-z0-9][A-Za-z0-9._-]*` — no slashes, no `..` — so an attacker
|
|
193
|
+
* or buggy authoring tool cannot path-traverse out of `_partials/`.
|
|
194
|
+
* Directives with invalid names are left verbatim, which means the
|
|
195
|
+
* raw token shows up in the prompt (visible failure) rather than
|
|
196
|
+
* silently disappearing.
|
|
197
|
+
*/
|
|
198
|
+
const PARTIAL_INCLUDE_RE = /\{include:_partials\/([A-Za-z0-9][A-Za-z0-9._-]*\.md)\}/g;
|
|
199
|
+
const FRONTMATTER_STRIP_RE = /^---\r?\n[\s\S]*?\r?\n---\r?\n?/;
|
|
200
|
+
function readPartialFile(name) {
|
|
201
|
+
// User-override layer first (mirrors readFlowFile). The file lives at
|
|
202
|
+
// `<dataDir>/task-flows/_partials/<name>` — same nesting as the
|
|
203
|
+
// bundled layout so an author can override one partial without
|
|
204
|
+
// disturbing the rest.
|
|
205
|
+
if (userTaskFlowsDir) {
|
|
206
|
+
const userPath = join(userTaskFlowsDir, "_partials", name);
|
|
207
|
+
if (existsSync(userPath)) {
|
|
208
|
+
try {
|
|
209
|
+
return substituteBrandTokens(readFileSync(userPath, "utf-8"));
|
|
210
|
+
}
|
|
211
|
+
catch {
|
|
212
|
+
// Corrupt override falls through to the bundled file.
|
|
213
|
+
}
|
|
214
|
+
}
|
|
215
|
+
}
|
|
216
|
+
const bundledPath = join(resolveTaskFlowsDir(), "_partials", name);
|
|
217
|
+
if (!existsSync(bundledPath))
|
|
218
|
+
return null;
|
|
219
|
+
return substituteBrandTokens(readFileSync(bundledPath, "utf-8"));
|
|
220
|
+
}
|
|
221
|
+
export function expandPartialIncludes(content) {
|
|
222
|
+
if (!content.includes("{include:_partials/"))
|
|
223
|
+
return content;
|
|
224
|
+
return content.replace(PARTIAL_INCLUDE_RE, (_match, filename) => {
|
|
225
|
+
const raw = readPartialFile(filename);
|
|
226
|
+
if (raw === null)
|
|
227
|
+
return "";
|
|
228
|
+
// Strip leading frontmatter block, then trim a single trailing
|
|
229
|
+
// newline so the substitution doesn't accumulate blank-line drift
|
|
230
|
+
// across multiple sibling includes.
|
|
231
|
+
return raw.replace(FRONTMATTER_STRIP_RE, "").replace(/\n+$/, "\n");
|
|
232
|
+
});
|
|
233
|
+
}
|
|
234
|
+
/**
|
|
235
|
+
* PRE_PASS_FAN_OUT_DESIGN.md §4.2 Path (a) — load a single
|
|
236
|
+
* `_partials/<name>.md` body for runner-side substitution into the
|
|
237
|
+
* `{integration_partial}` placeholder of `routine.fetch_window.md`.
|
|
238
|
+
* Reuses the same lookup as `expandPartialIncludes` (user-override →
|
|
239
|
+
* bundled, brand-token substitution, frontmatter strip, single-newline
|
|
240
|
+
* tail) so authoring conventions stay consistent across the two
|
|
241
|
+
* consumers.
|
|
242
|
+
*
|
|
243
|
+
* The runner passes a per-integration slice of the integrations
|
|
244
|
+
* snapshot so the partial's `<!-- mode:...:... -->` blocks collapse to
|
|
245
|
+
* the single branch that applies to this sub-session's
|
|
246
|
+
* `(integration, mode)` cell. Filtering happens here, not after
|
|
247
|
+
* substitution, because the surrounding `routine.fetch_window.md` body
|
|
248
|
+
* has already been through `applyIntegrationModeFilter` via the
|
|
249
|
+
* standard `getTaskFlow` path — running the filter again on the merged
|
|
250
|
+
* string would be a no-op for the host body but could mis-fire if a
|
|
251
|
+
* partial used `<!-- mode:... -->` markers for an integration other
|
|
252
|
+
* than its own (the partials lint forbids that, but the defence keeps
|
|
253
|
+
* the runner robust to future authoring drift).
|
|
254
|
+
*
|
|
255
|
+
* Missing partials collapse to the empty string (mirroring
|
|
256
|
+
* `expandPartialIncludes`'s missing-partial behaviour); the
|
|
257
|
+
* `routine-partials.test.ts` lint catches references to non-existent
|
|
258
|
+
* partials at test time so this never fires in a healthy build.
|
|
259
|
+
*
|
|
260
|
+
* Filename safety: same `[A-Za-z0-9][A-Za-z0-9._-]*` constraint as the
|
|
261
|
+
* include directive — a malformed name returns the empty string
|
|
262
|
+
* instead of path-traversing out of `_partials/`.
|
|
263
|
+
*/
|
|
264
|
+
const PARTIAL_FILENAME_RE = /^[A-Za-z0-9][A-Za-z0-9._-]*\.md$/;
|
|
265
|
+
export function renderPartialForFanOut(filename, integrations, backendId) {
|
|
266
|
+
if (!PARTIAL_FILENAME_RE.test(filename))
|
|
267
|
+
return "";
|
|
268
|
+
const raw = readPartialFile(filename);
|
|
269
|
+
if (raw === null)
|
|
270
|
+
return "";
|
|
271
|
+
const stripped = raw.replace(FRONTMATTER_STRIP_RE, "").replace(/\n+$/, "\n");
|
|
272
|
+
return applyIntegrationModeFilter(stripped, integrations, backendId);
|
|
273
|
+
}
|
|
132
274
|
/**
|
|
133
275
|
* Get the task flow template for a given event type.
|
|
134
276
|
*
|
|
@@ -151,14 +293,30 @@ export function getTaskFlow(eventType, backendId, integrations) {
|
|
|
151
293
|
const raw = resolveTaskFlowSource(eventType, backendId, integrations);
|
|
152
294
|
if (!raw)
|
|
153
295
|
return raw;
|
|
296
|
+
// ROUTINE_DATA_ACQUISITION_DESIGN.md F0 — expand
|
|
297
|
+
// `{include:_partials/<name>.md}` directives BEFORE mode filtering so
|
|
298
|
+
// the partial's `<!-- mode:... -->` blocks participate in the same
|
|
299
|
+
// filter pass as the host body. Depth cap = 1; nested includes inside
|
|
300
|
+
// a partial are left verbatim (visible failure on cycles).
|
|
301
|
+
let rendered = expandPartialIncludes(raw);
|
|
154
302
|
// Mode-conditional sections are stripped only when we know the session
|
|
155
303
|
// backend (from `backendId`). Tooling that doesn't carry one (legacy
|
|
156
304
|
// tests, prompt previews) keeps the markers visible — better than
|
|
157
305
|
// collapsing them with a placeholder backend that may misroute prose.
|
|
158
306
|
if (backendId && integrations) {
|
|
159
|
-
|
|
307
|
+
rendered = applyIntegrationModeFilter(rendered, integrations, backendId);
|
|
308
|
+
}
|
|
309
|
+
// INTEGRATION_NATIVE_MODE_DESIGN.md §6.5.2 / §7.3 — substitute the
|
|
310
|
+
// `<integration-routing-table>` and `<integration-routing-table-actionable>`
|
|
311
|
+
// placeholders the native variants and (Phase C onwards) the direct/
|
|
312
|
+
// delegated variants embed. Runs AFTER mode-conditional filtering so
|
|
313
|
+
// a placeholder inside a struck branch is dropped before substitution.
|
|
314
|
+
// Pure no-op when neither placeholder is present, so legacy task-flow
|
|
315
|
+
// files that pre-date the placeholder syntax are unaffected.
|
|
316
|
+
if (integrations) {
|
|
317
|
+
rendered = substituteIntegrationRoutingTables(rendered, integrations);
|
|
160
318
|
}
|
|
161
|
-
return
|
|
319
|
+
return rendered;
|
|
162
320
|
}
|
|
163
321
|
function resolveTaskFlowSource(eventType, backendId, integrations) {
|
|
164
322
|
if (backendId && integrations) {
|
package/dist/core/prompts.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"prompts.js","sourceRoot":"","sources":["../../src/core/prompts.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAC1E,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EACL,0BAA0B,EAC1B,kBAAkB,EAClB,2BAA2B,EAC3B,qBAAqB,GAItB,MAAM,eAAe,CAAC;AACvB,OAAO,EACL,kBAAkB,EAClB,2BAA2B,GAC5B,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,yBAAyB,EAAE,MAAM,qBAAqB,CAAC;
|
|
1
|
+
{"version":3,"file":"prompts.js","sourceRoot":"","sources":["../../src/core/prompts.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAC1E,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EACL,0BAA0B,EAC1B,kBAAkB,EAClB,2BAA2B,EAC3B,qBAAqB,GAItB,MAAM,eAAe,CAAC;AACvB,OAAO,EACL,kBAAkB,EAClB,2BAA2B,GAC5B,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,yBAAyB,EAAE,MAAM,qBAAqB,CAAC;AAChE,OAAO,EAAE,kCAAkC,EAAE,MAAM,oBAAoB,CAAC;AAExE,MAAM,SAAS,GAAG,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;AAE1D,IAAI,YAAY,GAAkB,IAAI,CAAC;AACvC,IAAI,gBAAgB,GAAkB,IAAI,CAAC;AAC3C,MAAM,SAAS,GAAG,IAAI,GAAG,EAAkB,CAAC;AAE5C;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,UAAU,aAAa,CAAC,YAAoB,EAAE,OAAgB;IAClE,YAAY,GAAG,IAAI,CAAC,YAAY,EAAE,cAAc,EAAE,YAAY,CAAC,CAAC;IAChE,gBAAgB,GAAG,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,EAAE,YAAY,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IAChE,SAAS,CAAC,KAAK,EAAE,CAAC;AACpB,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,qBAAqB;IACnC,YAAY,GAAG,IAAI,CAAC;IACpB,gBAAgB,GAAG,IAAI,CAAC;IACxB,SAAS,CAAC,KAAK,EAAE,CAAC;AACpB,CAAC;AAED,SAAS,mBAAmB;IAC1B,IAAI,YAAY;QAAE,OAAO,YAAY,CAAC;IACtC,2FAA2F;IAC3F,mEAAmE;IACnE,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,cAAc,EAAE,YAAY,CAAC,CAAC;IACvF,IAAI,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;QACzB,YAAY,GAAG,QAAQ,CAAC;QACxB,OAAO,QAAQ,CAAC;IAClB,CAAC;IACD,MAAM,IAAI,KAAK,CACb,8EAA8E,CAC/E,CAAC;AACJ,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,mBAAmB;IACjC,OAAO,gBAAgB,CAAC;AAC1B,CAAC;AAED;;;;;;;;;;;;GAYG;AACH,SAAS,YAAY,CAAC,QAAgB;IACpC,MAAM,QAAQ,GAAG,YAAY,QAAQ,EAAE,CAAC;IACxC,IAAI,gBAAgB,EAAE,CAAC;QACrB,MAAM,QAAQ,GAAG,IAAI,CAAC,gBAAgB,EAAE,QAAQ,CAAC,CAAC;QAClD,IAAI,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;YACzB,IAAI,CAAC;gBACH,OAAO,qBAAqB,CAAC,YAAY,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC,CAAC;YAChE,CAAC;YAAC,MAAM,CAAC;gBACP,6DAA6D;gBAC7D,8DAA8D;gBAC9D,8DAA8D;YAChE,CAAC;QACH,CAAC;IACH,CAAC;IAED,MAAM,MAAM,GAAG,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;IACvC,IAAI,MAAM,KAAK,SAAS;QAAE,OAAO,MAAM,CAAC;IAExC,MAAM,GAAG,GAAG,mBAAmB,EAAE,CAAC;IAClC,MAAM,WAAW,GAAG,IAAI,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;IACxC,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC;QAAE,OAAO,IAAI,CAAC;IAE1C,MAAM,OAAO,GAAG,qBAAqB,CAAC,YAAY,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC,CAAC;IAC1E,SAAS,CAAC,GAAG,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;IACjC,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,SAAS,QAAQ,CAAC,SAAiB;IACjC,OAAO,YAAY,CAAC,GAAG,SAAS,KAAK,CAAC,CAAC;AACzC,CAAC;AAED;;;;;;;;GAQG;AACH,SAAS,eAAe,CACtB,SAAiB,EACjB,SAAoB,EACpB,YAA+D;IAE/D,MAAM,MAAM,GAAG,2BAA2B,CAAC,SAAS,EAAE,SAAS,EAAE,YAAY,CAAC,CAAC;IAE/E,IAAI,MAAM,KAAK,QAAQ,EAAE,CAAC;QACxB,MAAM,OAAO,GAAG,YAAY,CAAC,GAAG,SAAS,IAAI,MAAM,KAAK,CAAC,CAAC;QAC1D,IAAI,OAAO,KAAK,IAAI;YAAE,OAAO,sBAAsB,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;IAC1E,CAAC;IAED,4EAA4E;IAC5E,OAAO,QAAQ,CAAC,SAAS,CAAC,CAAC;AAC7B,CAAC;AAED;;;;;;;;;;;;;GAaG;AACH,SAAS,sBAAsB,CAAC,OAAe,EAAE,SAAiB;IAChE,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAC;QAAE,OAAO,OAAO,CAAC;IACrD,iEAAiE;IACjE,uEAAuE;IACvE,uEAAuE;IACvE,kEAAkE;IAClE,uEAAuE;IACvE,MAAM,GAAG,GAAG,mBAAmB,EAAE,CAAC;IAClC,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,KAAK,CAAC,CAAC;IAC9C,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC;QAAE,OAAO,OAAO,CAAC,UAAU,CAAC,aAAa,EAAE,EAAE,CAAC,CAAC;IACxE,MAAM,OAAO,GAAG,qBAAqB,CAAC,YAAY,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC,CAAC;IACvE,qEAAqE;IACrE,qEAAqE;IACrE,qEAAqE;IACrE,qEAAqE;IACrE,qDAAqD;IACrD,MAAM,YAAY,GAAG,OAAO,CAAC,OAAO,CAAC,mBAAmB,EAAE,EAAE,CAAC,CAAC;IAC9D,OAAO,OAAO,CAAC,UAAU,CAAC,aAAa,EAAE,YAAY,CAAC,CAAC;AACzD,CAAC;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AACH,MAAM,kBAAkB,GACtB,0DAA0D,CAAC;AAC7D,MAAM,oBAAoB,GAAG,iCAAiC,CAAC;AAE/D,SAAS,eAAe,CAAC,IAAY;IACnC,sEAAsE;IACtE,gEAAgE;IAChE,+DAA+D;IAC/D,uBAAuB;IACvB,IAAI,gBAAgB,EAAE,CAAC;QACrB,MAAM,QAAQ,GAAG,IAAI,CAAC,gBAAgB,EAAE,WAAW,EAAE,IAAI,CAAC,CAAC;QAC3D,IAAI,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;YACzB,IAAI,CAAC;gBACH,OAAO,qBAAqB,CAAC,YAAY,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC,CAAC;YAChE,CAAC;YAAC,MAAM,CAAC;gBACP,sDAAsD;YACxD,CAAC;QACH,CAAC;IACH,CAAC;IACD,MAAM,WAAW,GAAG,IAAI,CAAC,mBAAmB,EAAE,EAAE,WAAW,EAAE,IAAI,CAAC,CAAC;IACnE,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC;QAAE,OAAO,IAAI,CAAC;IAC1C,OAAO,qBAAqB,CAAC,YAAY,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC,CAAC;AACnE,CAAC;AAED,MAAM,UAAU,qBAAqB,CAAC,OAAe;IACnD,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,qBAAqB,CAAC;QAAE,OAAO,OAAO,CAAC;IAC7D,OAAO,OAAO,CAAC,OAAO,CAAC,kBAAkB,EAAE,CAAC,MAAM,EAAE,QAAgB,EAAE,EAAE;QACtE,MAAM,GAAG,GAAG,eAAe,CAAC,QAAQ,CAAC,CAAC;QACtC,IAAI,GAAG,KAAK,IAAI;YAAE,OAAO,EAAE,CAAC;QAC5B,+DAA+D;QAC/D,kEAAkE;QAClE,oCAAoC;QACpC,OAAO,GAAG,CAAC,OAAO,CAAC,oBAAoB,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;IACrE,CAAC,CAAC,CAAC;AACL,CAAC;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AACH,MAAM,mBAAmB,GAAG,kCAAkC,CAAC;AAE/D,MAAM,UAAU,sBAAsB,CACpC,QAAgB,EAChB,YAA+D,EAC/D,SAAoB;IAEpB,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,QAAQ,CAAC;QAAE,OAAO,EAAE,CAAC;IACnD,MAAM,GAAG,GAAG,eAAe,CAAC,QAAQ,CAAC,CAAC;IACtC,IAAI,GAAG,KAAK,IAAI;QAAE,OAAO,EAAE,CAAC;IAC5B,MAAM,QAAQ,GAAG,GAAG,CAAC,OAAO,CAAC,oBAAoB,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;IAC7E,OAAO,0BAA0B,CAAC,QAAQ,EAAE,YAAY,EAAE,SAAS,CAAC,CAAC;AACvE,CAAC;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,MAAM,UAAU,WAAW,CACzB,SAAiB,EACjB,SAAkB,EAClB,YAAgE;IAEhE,MAAM,GAAG,GAAG,qBAAqB,CAAC,SAAS,EAAE,SAAS,EAAE,YAAY,CAAC,CAAC;IACtE,IAAI,CAAC,GAAG;QAAE,OAAO,GAAG,CAAC;IACrB,iDAAiD;IACjD,sEAAsE;IACtE,mEAAmE;IACnE,sEAAsE;IACtE,2DAA2D;IAC3D,IAAI,QAAQ,GAAG,qBAAqB,CAAC,GAAG,CAAC,CAAC;IAC1C,uEAAuE;IACvE,qEAAqE;IACrE,kEAAkE;IAClE,sEAAsE;IACtE,IAAI,SAAS,IAAI,YAAY,EAAE,CAAC;QAC9B,QAAQ,GAAG,0BAA0B,CAAC,QAAQ,EAAE,YAAY,EAAE,SAAsB,CAAC,CAAC;IACxF,CAAC;IACD,mEAAmE;IACnE,6EAA6E;IAC7E,qEAAqE;IACrE,qEAAqE;IACrE,uEAAuE;IACvE,sEAAsE;IACtE,6DAA6D;IAC7D,IAAI,YAAY,EAAE,CAAC;QACjB,QAAQ,GAAG,kCAAkC,CAAC,QAAQ,EAAE,YAAY,CAAC,CAAC;IACxE,CAAC;IACD,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,SAAS,qBAAqB,CAC5B,SAAiB,EACjB,SAA6B,EAC7B,YAEa;IAEb,IAAI,SAAS,IAAI,YAAY,EAAE,CAAC;QAC9B,MAAM,OAAO,GAAG,eAAe,CAAC,SAAS,EAAE,SAAsB,EAAE,YAAY,CAAC,CAAC;QACjF,IAAI,OAAO,KAAK,IAAI;YAAE,OAAO,OAAO,CAAC;IACvC,CAAC;IAED,MAAM,MAAM,GAAG,QAAQ,CAAC,SAAS,CAAC,CAAC;IACnC,IAAI,MAAM,KAAK,IAAI;QAAE,OAAO,MAAM,CAAC;IACnC,IAAI,kBAAkB,CAAC,SAAS,CAAC,EAAE,CAAC;QAClC,MAAM,MAAM,GAAG,QAAQ,CAAC,gBAAgB,CAAC,CAAC;QAC1C,IAAI,MAAM,KAAK,IAAI;YAAE,OAAO,MAAM,CAAC;IACrC,CAAC;IACD,OAAO,QAAQ,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC;AACnC,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,UAAU,cAAc,CAC5B,SAAiB,EACjB,OAUI,EAAE;IAEN,MAAM,IAAI,GAAG,WAAW,CAAC,SAAS,EAAE,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,YAAY,CAAC,CAAC;IACvE,IAAI,CAAC,IAAI,CAAC,UAAU;QAAE,OAAO,IAAI,CAAC;IAClC,MAAM,MAAM,GAAG,2BAA2B,EAAE,CAAC;IAC7C,MAAM,YAAY,GAAG,kBAAkB,CAAC,IAAI,EAAE;QAC5C,UAAU,EAAE,IAAI,CAAC,UAAU;QAC3B,UAAU,EAAE,IAAI,CAAC,UAAU,IAAI,SAAS;QACxC,KAAK,EAAE,IAAI,CAAC,KAAK;QACjB,MAAM;KACP,CAAC,CAAC;IACH,MAAM,WAAW,GAAG,IAAI,CAAC,kBAAkB,IAAI;QAC7C,iBAAiB,EAAE,KAAK;QACxB,eAAe,EAAE,KAAK;KACvB,CAAC;IACF,OAAO,yBAAyB,CAAC,YAAY,EAAE;QAC7C,UAAU,EAAE,IAAI,CAAC,UAAU;QAC3B,UAAU,EAAE,IAAI,CAAC,UAAU,IAAI,SAAS;QACxC,KAAK,EAAE,WAAW;QAClB,MAAM;KACP,CAAC,CAAC;AACL,CAAC;AAwBD,MAAM,UAAU,aAAa;IAC3B,MAAM,OAAO,GAAG,gBAAgB,CAAC,mBAAmB,EAAE,CAAC,CAAC;IACxD,MAAM,SAAS,GAAG,gBAAgB,CAAC,CAAC,CAAC,gBAAgB,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC,IAAI,GAAG,EAAU,CAAC;IAC5F,MAAM,OAAO,GAAG,IAAI,GAAG,CAAC,CAAC,GAAG,OAAO,EAAE,GAAG,SAAS,CAAC,CAAC,CAAC;IACpD,OAAO,CAAC,GAAG,OAAO,CAAC;SAChB,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC;SAClC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;QACb,GAAG;QACH,UAAU,EAAE,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC;QAC5B,WAAW,EAAE,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC;KAChC,CAAC,CAAC,CAAC;AACR,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,mBAAmB,CAAC,GAAW;IAI7C,MAAM,OAAO,GAAG,CAAC,GAAG,EAAE;QACpB,MAAM,GAAG,GAAG,mBAAmB,EAAE,CAAC;QAClC,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,GAAG,KAAK,CAAC,CAAC;QACpC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC;YAAE,OAAO,IAAI,CAAC;QACnC,OAAO,YAAY,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;IACrC,CAAC,CAAC,EAAE,CAAC;IACL,MAAM,QAAQ,GAAG,CAAC,GAAG,EAAE;QACrB,IAAI,CAAC,gBAAgB;YAAE,OAAO,IAAI,CAAC;QACnC,MAAM,IAAI,GAAG,IAAI,CAAC,gBAAgB,EAAE,GAAG,GAAG,KAAK,CAAC,CAAC;QACjD,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC;YAAE,OAAO,IAAI,CAAC;QACnC,OAAO,YAAY,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;IACrC,CAAC,CAAC,EAAE,CAAC;IACL,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC;AAC/B,CAAC;AAED,SAAS,gBAAgB,CAAC,GAAW;IACnC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC;QAAE,OAAO,IAAI,GAAG,EAAE,CAAC;IACvC,IAAI,CAAC;QACH,OAAO,IAAI,GAAG,CACZ,WAAW,CAAC,GAAG,CAAC;aACb,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;aACtC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE;YACf,kEAAkE;YAClE,IAAI,CAAC;gBACH,OAAO,QAAQ,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;YAC5C,CAAC;YAAC,MAAM,CAAC;gBACP,OAAO,KAAK,CAAC;YACf,CAAC;QACH,CAAC,CAAC;aACD,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CACpC,CAAC;IACJ,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,GAAG,EAAE,CAAC;IACnB,CAAC;AACH,CAAC"}
|
|
@@ -189,6 +189,30 @@ export declare function runRepositoryManagementScan(deps: RepositoryManagementDo
|
|
|
189
189
|
* without writing.
|
|
190
190
|
*/
|
|
191
191
|
export declare function runRepositoryArchitectureSectionReplace(deps: RepositoryManagementDocDeps, markdown: string): Promise<ArchitectureSectionReplaceResult>;
|
|
192
|
+
/**
|
|
193
|
+
* Replace the marker-bracketed Architecture block in an overview file with
|
|
194
|
+
* a freshly composed body. Exported solely so the unit suite can pin edge
|
|
195
|
+
* cases (code-fence collisions, CRLF, orphan markers) without having to
|
|
196
|
+
* stand up a full SQLite + filesystem fixture for every shape.
|
|
197
|
+
*
|
|
198
|
+
* Contract:
|
|
199
|
+
* - Marker matches inside fenced code blocks (``` or ~~~) are ignored —
|
|
200
|
+
* the daemon's own README, an Architecture body that includes example
|
|
201
|
+
* fences, or a paste from a chat could otherwise mis-anchor the merge
|
|
202
|
+
* and overwrite Summary / Notable Changes / Daily Activity Log.
|
|
203
|
+
* - CRLF input is preserved (LF input stays LF).
|
|
204
|
+
* - Orphan markers (only `:start` or only `:end` present) are stripped
|
|
205
|
+
* and a clean block is re-injected under `## Architecture` — never
|
|
206
|
+
* left to drift in the file where the next refresh might mis-bind to
|
|
207
|
+
* them.
|
|
208
|
+
* - `## Architecture` / `## Notable Changes` headings are matched with
|
|
209
|
+
* a line-anchored regex that tolerates trailing whitespace and either
|
|
210
|
+
* line ending. The previous literal-`indexOf` match silently fell
|
|
211
|
+
* through on `## Architecture \n` (trailing space) or `## Architecture\r\n`.
|
|
212
|
+
* - Final fallback is append-before-Notable-Changes-or-EOF, identical
|
|
213
|
+
* to the original contract.
|
|
214
|
+
*/
|
|
215
|
+
export declare function mergeArchitectureSection(current: string, markdown: string): string;
|
|
192
216
|
/**
|
|
193
217
|
* Re-copy the repository's README.* into `git/<slug>/README.md`,
|
|
194
218
|
* snapshotting the previous mirror to `md_file_snapshots`. Used by both
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"repository-management-docs.d.ts","sourceRoot":"","sources":["../../src/core/repository-management-docs.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"repository-management-docs.d.ts","sourceRoot":"","sources":["../../src/core/repository-management-docs.ts"],"names":[],"mappings":"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"}
|
|
@@ -743,41 +743,225 @@ export async function runRepositoryArchitectureSectionReplace(deps, markdown) {
|
|
|
743
743
|
return { status: "written", overviewPath, absolutePath, refreshedAt };
|
|
744
744
|
});
|
|
745
745
|
}
|
|
746
|
-
|
|
747
|
-
|
|
748
|
-
|
|
746
|
+
/**
|
|
747
|
+
* Replace the marker-bracketed Architecture block in an overview file with
|
|
748
|
+
* a freshly composed body. Exported solely so the unit suite can pin edge
|
|
749
|
+
* cases (code-fence collisions, CRLF, orphan markers) without having to
|
|
750
|
+
* stand up a full SQLite + filesystem fixture for every shape.
|
|
751
|
+
*
|
|
752
|
+
* Contract:
|
|
753
|
+
* - Marker matches inside fenced code blocks (``` or ~~~) are ignored —
|
|
754
|
+
* the daemon's own README, an Architecture body that includes example
|
|
755
|
+
* fences, or a paste from a chat could otherwise mis-anchor the merge
|
|
756
|
+
* and overwrite Summary / Notable Changes / Daily Activity Log.
|
|
757
|
+
* - CRLF input is preserved (LF input stays LF).
|
|
758
|
+
* - Orphan markers (only `:start` or only `:end` present) are stripped
|
|
759
|
+
* and a clean block is re-injected under `## Architecture` — never
|
|
760
|
+
* left to drift in the file where the next refresh might mis-bind to
|
|
761
|
+
* them.
|
|
762
|
+
* - `## Architecture` / `## Notable Changes` headings are matched with
|
|
763
|
+
* a line-anchored regex that tolerates trailing whitespace and either
|
|
764
|
+
* line ending. The previous literal-`indexOf` match silently fell
|
|
765
|
+
* through on `## Architecture \n` (trailing space) or `## Architecture\r\n`.
|
|
766
|
+
* - Final fallback is append-before-Notable-Changes-or-EOF, identical
|
|
767
|
+
* to the original contract.
|
|
768
|
+
*/
|
|
769
|
+
export function mergeArchitectureSection(current, markdown) {
|
|
770
|
+
// Normalize line endings for internal processing; remember the original
|
|
771
|
+
// shape so we can hand it back unchanged. Treating CRLF and LF the
|
|
772
|
+
// same throughout simplifies every offset calculation below.
|
|
773
|
+
const wasCrlf = /\r\n/.test(current);
|
|
774
|
+
const normalized = wasCrlf ? current.replace(/\r\n/g, "\n") : current;
|
|
775
|
+
const merged = mergeArchitectureSectionLf(normalized, markdown);
|
|
776
|
+
return wasCrlf ? merged.replace(/\n/g, "\r\n") : merged;
|
|
777
|
+
}
|
|
778
|
+
function mergeArchitectureSectionLf(content, markdown) {
|
|
749
779
|
const body = markdown.trim();
|
|
750
780
|
const block = `${ARCHITECTURE_BEGIN_MARKER}\n\n${body}\n\n${ARCHITECTURE_END_MARKER}`;
|
|
781
|
+
const fences = computeFenceRanges(content);
|
|
782
|
+
const beginIdx = indexOfOutsideFences(content, ARCHITECTURE_BEGIN_MARKER, fences);
|
|
783
|
+
const endIdx = indexOfOutsideFences(content, ARCHITECTURE_END_MARKER, fences);
|
|
784
|
+
// Happy path — both markers present and in the right order, outside
|
|
785
|
+
// any fence. Replace between them.
|
|
751
786
|
if (beginIdx >= 0 && endIdx > beginIdx) {
|
|
752
|
-
return (
|
|
787
|
+
return (content.slice(0, beginIdx)
|
|
753
788
|
+ block
|
|
754
|
-
+
|
|
755
|
-
}
|
|
756
|
-
//
|
|
757
|
-
//
|
|
758
|
-
//
|
|
759
|
-
// without
|
|
760
|
-
|
|
761
|
-
if (
|
|
762
|
-
|
|
763
|
-
|
|
764
|
-
|
|
765
|
-
|
|
789
|
+
+ content.slice(endIdx + ARCHITECTURE_END_MARKER.length));
|
|
790
|
+
}
|
|
791
|
+
// Orphan-marker repair. An end marker without a begin (or vice versa)
|
|
792
|
+
// is left over from a partial edit or an earlier bug. Strip the orphan
|
|
793
|
+
// line entirely so the re-injection below can plant a clean block
|
|
794
|
+
// without two `:end` markers staring at each other on the next refresh.
|
|
795
|
+
let cleaned = content;
|
|
796
|
+
if (beginIdx >= 0 && endIdx < 0) {
|
|
797
|
+
cleaned = stripLineContaining(cleaned, ARCHITECTURE_BEGIN_MARKER, fences);
|
|
798
|
+
}
|
|
799
|
+
else if (endIdx >= 0 && beginIdx < 0) {
|
|
800
|
+
cleaned = stripLineContaining(cleaned, ARCHITECTURE_END_MARKER, fences);
|
|
801
|
+
}
|
|
802
|
+
else if (beginIdx >= 0 && endIdx >= 0 && endIdx <= beginIdx) {
|
|
803
|
+
// Markers are out of order (end before begin) — treat both as orphans.
|
|
804
|
+
cleaned = stripLineContaining(cleaned, ARCHITECTURE_BEGIN_MARKER, fences);
|
|
805
|
+
cleaned = stripLineContaining(cleaned, ARCHITECTURE_END_MARKER, computeFenceRanges(cleaned));
|
|
806
|
+
}
|
|
807
|
+
// Re-inject under `## Architecture` if the heading still exists outside
|
|
808
|
+
// a fence, otherwise plant a fresh section before `## Notable Changes`
|
|
809
|
+
// or at EOF.
|
|
810
|
+
return injectArchitectureBlock(cleaned, block);
|
|
811
|
+
}
|
|
812
|
+
function injectArchitectureBlock(content, block) {
|
|
813
|
+
const fences = computeFenceRanges(content);
|
|
814
|
+
const architectureHeading = findHeadingLine(content, "Architecture", fences);
|
|
815
|
+
if (architectureHeading) {
|
|
816
|
+
const afterHeading = architectureHeading.lineEndOffset; // offset of '\n' just after heading
|
|
817
|
+
const tail = content.slice(afterHeading + 1); // skip the newline
|
|
818
|
+
const fencesTail = shiftFenceRanges(fences, -(afterHeading + 1));
|
|
819
|
+
const nextSectionRel = findNextSectionOffsetOutsideFences(tail, fencesTail);
|
|
820
|
+
const sliceEnd = nextSectionRel >= 0
|
|
821
|
+
? afterHeading + 1 + nextSectionRel
|
|
822
|
+
: content.length;
|
|
823
|
+
return (content.slice(0, afterHeading + 1)
|
|
766
824
|
+ `\n${block}\n\n`
|
|
767
|
-
+
|
|
825
|
+
+ content.slice(sliceEnd));
|
|
768
826
|
}
|
|
769
|
-
|
|
770
|
-
const insertAt = current.indexOf("\n## Notable Changes\n");
|
|
827
|
+
const notableHeading = findHeadingLine(content, "Notable Changes", fences);
|
|
771
828
|
const newSection = `\n## Architecture\n\n${block}\n`;
|
|
772
|
-
if (
|
|
773
|
-
return
|
|
829
|
+
if (notableHeading) {
|
|
830
|
+
return (content.slice(0, notableHeading.lineStartOffset)
|
|
831
|
+
+ newSection
|
|
832
|
+
+ "\n"
|
|
833
|
+
+ content.slice(notableHeading.lineStartOffset));
|
|
834
|
+
}
|
|
835
|
+
return content.trimEnd() + "\n" + newSection;
|
|
836
|
+
}
|
|
837
|
+
/**
|
|
838
|
+
* Compute byte ranges (inclusive of opening fence line through closing
|
|
839
|
+
* fence line) that are part of fenced code blocks. Matching inside one
|
|
840
|
+
* of these ranges is ignored. The fence delimiters themselves are also
|
|
841
|
+
* considered fenced so an ``` ```text\n<!-- architecture:start --> ``` ``` example doesn't slip through on the
|
|
842
|
+
* opening line's info-string position.
|
|
843
|
+
*
|
|
844
|
+
* An unclosed fence at EOF is treated as fenced through EOF — the
|
|
845
|
+
* conservative choice (we'd rather refuse to touch ambiguous content
|
|
846
|
+
* than risk corrupting it). For a well-formed daemon-generated overview
|
|
847
|
+
* file this branch is unreachable.
|
|
848
|
+
*/
|
|
849
|
+
function computeFenceRanges(content) {
|
|
850
|
+
const ranges = [];
|
|
851
|
+
let inFence = false;
|
|
852
|
+
let fenceStart = 0;
|
|
853
|
+
let fenceMarker = "```";
|
|
854
|
+
let offset = 0;
|
|
855
|
+
const lines = content.split("\n");
|
|
856
|
+
for (const text of lines) {
|
|
857
|
+
const trimmed = text.replace(/^\s*/, "");
|
|
858
|
+
const opensTriple = /^```/.test(trimmed);
|
|
859
|
+
const opensTilde = /^~~~/.test(trimmed);
|
|
860
|
+
if (!inFence && (opensTriple || opensTilde)) {
|
|
861
|
+
inFence = true;
|
|
862
|
+
fenceStart = offset;
|
|
863
|
+
fenceMarker = opensTriple ? "```" : "~~~";
|
|
864
|
+
}
|
|
865
|
+
else if (inFence
|
|
866
|
+
&& ((fenceMarker === "```" && opensTriple)
|
|
867
|
+
|| (fenceMarker === "~~~" && opensTilde))) {
|
|
868
|
+
ranges.push([fenceStart, offset + text.length]);
|
|
869
|
+
inFence = false;
|
|
870
|
+
}
|
|
871
|
+
offset += text.length + 1; // +1 for \n
|
|
872
|
+
}
|
|
873
|
+
if (inFence) {
|
|
874
|
+
ranges.push([fenceStart, content.length]);
|
|
875
|
+
}
|
|
876
|
+
return ranges;
|
|
877
|
+
}
|
|
878
|
+
function shiftFenceRanges(ranges, delta) {
|
|
879
|
+
const out = [];
|
|
880
|
+
for (const [s, e] of ranges) {
|
|
881
|
+
const ns = s + delta;
|
|
882
|
+
const ne = e + delta;
|
|
883
|
+
if (ne <= 0)
|
|
884
|
+
continue;
|
|
885
|
+
out.push([Math.max(0, ns), ne]);
|
|
886
|
+
}
|
|
887
|
+
return out;
|
|
888
|
+
}
|
|
889
|
+
function isInsideFence(offset, ranges) {
|
|
890
|
+
for (const [s, e] of ranges) {
|
|
891
|
+
if (offset >= s && offset < e)
|
|
892
|
+
return true;
|
|
893
|
+
}
|
|
894
|
+
return false;
|
|
895
|
+
}
|
|
896
|
+
function indexOfOutsideFences(content, needle, ranges) {
|
|
897
|
+
let from = 0;
|
|
898
|
+
while (from <= content.length) {
|
|
899
|
+
const idx = content.indexOf(needle, from);
|
|
900
|
+
if (idx < 0)
|
|
901
|
+
return -1;
|
|
902
|
+
if (!isInsideFence(idx, ranges))
|
|
903
|
+
return idx;
|
|
904
|
+
from = idx + 1;
|
|
905
|
+
}
|
|
906
|
+
return -1;
|
|
907
|
+
}
|
|
908
|
+
function findHeadingLine(content, headingText, ranges) {
|
|
909
|
+
// Match a line that IS `## <heading>` with optional trailing whitespace.
|
|
910
|
+
// `^` is enforced by tracking the start-of-line offset; trailing `\s*`
|
|
911
|
+
// accommodates the `## Architecture ` (trailing space) form that the
|
|
912
|
+
// previous literal `\n## Architecture\n` indexOf silently dropped.
|
|
913
|
+
const pattern = new RegExp(`^[ \\t]*##[ \\t]+${escapeRegex(headingText)}[ \\t]*$`);
|
|
914
|
+
let offset = 0;
|
|
915
|
+
for (const text of content.split("\n")) {
|
|
916
|
+
if (!isInsideFence(offset, ranges) && pattern.test(text)) {
|
|
917
|
+
return { lineStartOffset: offset, lineEndOffset: offset + text.length };
|
|
918
|
+
}
|
|
919
|
+
offset += text.length + 1;
|
|
920
|
+
}
|
|
921
|
+
return null;
|
|
922
|
+
}
|
|
923
|
+
function findNextSectionOffsetOutsideFences(s, ranges) {
|
|
924
|
+
// Find the line-start offset of the next top-level `## ` heading. Same
|
|
925
|
+
// line-aware walk as `findHeadingLine` but unconstrained on the heading
|
|
926
|
+
// text. Matches at offset 0 too — the caller slices the tail starting
|
|
927
|
+
// *after* the Architecture heading's newline, so a `## Foo` at offset
|
|
928
|
+
// 0 is genuinely "the very next section" (pathological back-to-back
|
|
929
|
+
// headings collapse to a clean replace).
|
|
930
|
+
let offset = 0;
|
|
931
|
+
for (const text of s.split("\n")) {
|
|
932
|
+
if (!isInsideFence(offset, ranges) && /^[ \t]*##[ \t]+/.test(text)) {
|
|
933
|
+
return offset;
|
|
934
|
+
}
|
|
935
|
+
offset += text.length + 1;
|
|
936
|
+
}
|
|
937
|
+
return -1;
|
|
938
|
+
}
|
|
939
|
+
function stripLineContaining(content, needle, ranges) {
|
|
940
|
+
// Remove the entire line that contains `needle` (outside fences), plus
|
|
941
|
+
// any single trailing blank line so we don't accumulate ghost blank
|
|
942
|
+
// lines on repeated orphan repairs.
|
|
943
|
+
const out = [];
|
|
944
|
+
let offset = 0;
|
|
945
|
+
const lines = content.split("\n");
|
|
946
|
+
for (let i = 0; i < lines.length; i++) {
|
|
947
|
+
const text = lines[i];
|
|
948
|
+
const skipThis = !isInsideFence(offset, ranges) && text.includes(needle);
|
|
949
|
+
if (!skipThis) {
|
|
950
|
+
out.push(text);
|
|
951
|
+
}
|
|
952
|
+
else if (i + 1 < lines.length
|
|
953
|
+
&& lines[i + 1].trim() === ""
|
|
954
|
+
&& out.length > 0
|
|
955
|
+
&& out[out.length - 1].trim() === "") {
|
|
956
|
+
// Drop the trailing blank too to avoid `\n\n\n` accumulation.
|
|
957
|
+
i++;
|
|
958
|
+
}
|
|
959
|
+
offset += text.length + 1;
|
|
774
960
|
}
|
|
775
|
-
return
|
|
961
|
+
return out.join("\n");
|
|
776
962
|
}
|
|
777
|
-
function
|
|
778
|
-
|
|
779
|
-
const match = /\n## /.exec(s);
|
|
780
|
-
return match ? match.index : -1;
|
|
963
|
+
function escapeRegex(s) {
|
|
964
|
+
return s.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
|
|
781
965
|
}
|
|
782
966
|
function updateArchitectureFrontmatter(content, params) {
|
|
783
967
|
const setField = (text, key, value) => {
|