@inharness-ai/claude4spec 1.0.20 → 1.0.22
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/.claude/skills/c4s-brief-implementer/SKILL.md +117 -57
- package/CHANGELOG.md +26 -0
- package/dist/bin/c4s/commands/agent.d.ts +18 -0
- package/dist/bin/c4s/commands/agent.js +102 -0
- package/dist/bin/c4s/commands/agent.js.map +1 -0
- package/dist/bin/c4s/commands/ask.d.ts +9 -8
- package/dist/bin/c4s/commands/ask.js +23 -31
- package/dist/bin/c4s/commands/ask.js.map +1 -1
- package/dist/bin/c4s/commands/catalog.d.ts +1 -1
- package/dist/bin/c4s/commands/catalog.js +2 -2
- package/dist/bin/c4s/commands/catalog.js.map +1 -1
- package/dist/bin/c4s/commands/describe.d.ts +1 -1
- package/dist/bin/c4s/commands/describe.js +2 -2
- package/dist/bin/c4s/commands/describe.js.map +1 -1
- package/dist/bin/c4s/commands/detail.d.ts +1 -1
- package/dist/bin/c4s/commands/detail.js +2 -2
- package/dist/bin/c4s/commands/detail.js.map +1 -1
- package/dist/bin/c4s/commands/element-list.d.ts +1 -1
- package/dist/bin/c4s/commands/element-list.js +2 -2
- package/dist/bin/c4s/commands/element-list.js.map +1 -1
- package/dist/bin/c4s/commands/find-references.js +1 -1
- package/dist/bin/c4s/commands/find-references.js.map +1 -1
- package/dist/bin/c4s/commands/inline-mention.d.ts +1 -1
- package/dist/bin/c4s/commands/inline-mention.js +2 -2
- package/dist/bin/c4s/commands/inline-mention.js.map +1 -1
- package/dist/bin/c4s/commands/list-slugs.d.ts +1 -1
- package/dist/bin/c4s/commands/list-slugs.js +2 -2
- package/dist/bin/c4s/commands/list-slugs.js.map +1 -1
- package/dist/bin/c4s/commands/list-tags.d.ts +1 -1
- package/dist/bin/c4s/commands/list-tags.js +2 -2
- package/dist/bin/c4s/commands/list-tags.js.map +1 -1
- package/dist/bin/c4s/commands/plugins.d.ts +9 -0
- package/dist/bin/c4s/commands/plugins.js +81 -0
- package/dist/bin/c4s/commands/plugins.js.map +1 -0
- package/dist/bin/c4s/commands/resolve.d.ts +1 -1
- package/dist/bin/c4s/commands/resolve.js +2 -2
- package/dist/bin/c4s/commands/resolve.js.map +1 -1
- package/dist/bin/c4s/commands/single-element.d.ts +1 -1
- package/dist/bin/c4s/commands/single-element.js +2 -2
- package/dist/bin/c4s/commands/single-element.js.map +1 -1
- package/dist/bin/c4s/commands/tagged-list-mixed.d.ts +1 -1
- package/dist/bin/c4s/commands/tagged-list-mixed.js +2 -2
- package/dist/bin/c4s/commands/tagged-list-mixed.js.map +1 -1
- package/dist/bin/c4s/commands/tagged-list.d.ts +1 -1
- package/dist/bin/c4s/commands/tagged-list.js +2 -2
- package/dist/bin/c4s/commands/tagged-list.js.map +1 -1
- package/dist/bin/c4s/context.d.ts +3 -3
- package/dist/bin/c4s/context.js +7 -4
- package/dist/bin/c4s/context.js.map +1 -1
- package/dist/bin/c4s/errors.d.ts +1 -1
- package/dist/bin/c4s/errors.js.map +1 -1
- package/dist/bin/c4s-mcp.js +6 -2
- package/dist/bin/c4s-mcp.js.map +1 -1
- package/dist/bin/c4s.js +19 -4
- package/dist/bin/c4s.js.map +1 -1
- package/dist/bin/gitignore.js +7 -11
- package/dist/bin/gitignore.js.map +1 -1
- package/dist/client/assets/{arc-qrIe4IVl.js → arc-C9oTB3b1.js} +1 -1
- package/dist/client/assets/{architectureDiagram-3BPJPVTR-CF6sgG8n.js → architectureDiagram-3BPJPVTR-Bno5ViqK.js} +1 -1
- package/dist/client/assets/{blockDiagram-GPEHLZMM-Cf8Tx0VN.js → blockDiagram-GPEHLZMM-CJYBoeWQ.js} +1 -1
- package/dist/client/assets/{c4Diagram-AAUBKEIU-BDkuMEyf.js → c4Diagram-AAUBKEIU-DaaqWE6s.js} +1 -1
- package/dist/client/assets/channel-Cei_E79M.js +1 -0
- package/dist/client/assets/{chunk-2J33WTMH-ChycTonk.js → chunk-2J33WTMH-P_I0OPMy.js} +1 -1
- package/dist/client/assets/{chunk-4BX2VUAB-BpUgWjxx.js → chunk-4BX2VUAB-CCySMlh5.js} +1 -1
- package/dist/client/assets/{chunk-55IACEB6-CeHg_yjT.js → chunk-55IACEB6-CEUyqKGF.js} +1 -1
- package/dist/client/assets/{chunk-727SXJPM-BpxYq7ab.js → chunk-727SXJPM-CoTSYOVz.js} +1 -1
- package/dist/client/assets/{chunk-AQP2D5EJ-bghkOtr6.js → chunk-AQP2D5EJ-DB0nMxPr.js} +1 -1
- package/dist/client/assets/{chunk-FMBD7UC4-4sXokGgd.js → chunk-FMBD7UC4-PG3m6-_a.js} +1 -1
- package/dist/client/assets/{chunk-ND2GUHAM-DYQOCE5T.js → chunk-ND2GUHAM-CBNk6IaV.js} +1 -1
- package/dist/client/assets/{chunk-QZHKN3VN-NkVuDlFD.js → chunk-QZHKN3VN-CLFa0WvN.js} +1 -1
- package/dist/client/assets/classDiagram-4FO5ZUOK-DUe_fAto.js +1 -0
- package/dist/client/assets/classDiagram-v2-Q7XG4LA2-DUe_fAto.js +1 -0
- package/dist/client/assets/{cose-bilkent-S5V4N54A-1l4P4WRI.js → cose-bilkent-S5V4N54A-BDwDDxHN.js} +1 -1
- package/dist/client/assets/{dagre-BM42HDAG-CSQie-gR.js → dagre-BM42HDAG-DR-1e8N5.js} +1 -1
- package/dist/client/assets/{diagram-2AECGRRQ-DME9ULoN.js → diagram-2AECGRRQ-C-tHgBWt.js} +1 -1
- package/dist/client/assets/{diagram-5GNKFQAL-Dn1Rw5k5.js → diagram-5GNKFQAL-uLmoKaJL.js} +1 -1
- package/dist/client/assets/{diagram-KO2AKTUF-Duh_PNWR.js → diagram-KO2AKTUF-8Fd-xuOy.js} +1 -1
- package/dist/client/assets/{diagram-LMA3HP47-B7Q5pV60.js → diagram-LMA3HP47-C1gniWsn.js} +1 -1
- package/dist/client/assets/{diagram-OG6HWLK6-C0KL_RDd.js → diagram-OG6HWLK6-BMWjZbeC.js} +1 -1
- package/dist/client/assets/{erDiagram-TEJ5UH35-D5elfwSC.js → erDiagram-TEJ5UH35-CIUO8hrR.js} +1 -1
- package/dist/client/assets/{flowDiagram-I6XJVG4X-BHmjX-WI.js → flowDiagram-I6XJVG4X-Ccw5YEf3.js} +1 -1
- package/dist/client/assets/{ganttDiagram-6RSMTGT7-KvoGFbS2.js → ganttDiagram-6RSMTGT7-BAvlf8cY.js} +1 -1
- package/dist/client/assets/{gitGraphDiagram-PVQCEYII-DsZL8BfK.js → gitGraphDiagram-PVQCEYII-ChCkdYar.js} +1 -1
- package/dist/client/assets/{index-zzILqHQN.js → index-BotCWOKC.js} +1 -1
- package/dist/client/assets/index-CtdzGyqj.js +805 -0
- package/dist/client/assets/{index-ClaVbrEF.js → index-DtpKHGD1.js} +1 -1
- package/dist/client/assets/{infoDiagram-5YYISTIA-DoQ6iSpJ.js → infoDiagram-5YYISTIA-CZMGwNyB.js} +1 -1
- package/dist/client/assets/{ishikawaDiagram-YF4QCWOH-akftyN0J.js → ishikawaDiagram-YF4QCWOH-CubjZGk6.js} +1 -1
- package/dist/client/assets/{journeyDiagram-JHISSGLW-PPex4PiV.js → journeyDiagram-JHISSGLW-DzwOyVzB.js} +1 -1
- package/dist/client/assets/{kanban-definition-UN3LZRKU-D114i3s1.js → kanban-definition-UN3LZRKU-CXznoTY9.js} +1 -1
- package/dist/client/assets/{linear-BuwQPJom.js → linear-EDwTFRrU.js} +1 -1
- package/dist/client/assets/{mermaid.core-CMX3GAvM.js → mermaid.core-Lae2097R.js} +4 -4
- package/dist/client/assets/{mindmap-definition-RKZ34NQL-ClBxWJju.js → mindmap-definition-RKZ34NQL-DFjIW41g.js} +1 -1
- package/dist/client/assets/{pieDiagram-4H26LBE5-hj5zVPj5.js → pieDiagram-4H26LBE5-CZDLR1jd.js} +1 -1
- package/dist/client/assets/{quadrantDiagram-W4KKPZXB-CRbR0G7M.js → quadrantDiagram-W4KKPZXB-CTGDzbqp.js} +1 -1
- package/dist/client/assets/{requirementDiagram-4Y6WPE33-Dto4B70I.js → requirementDiagram-4Y6WPE33-CeH0NbMv.js} +1 -1
- package/dist/client/assets/{sankeyDiagram-5OEKKPKP-DyYP8rwY.js → sankeyDiagram-5OEKKPKP-B6ZTjurV.js} +1 -1
- package/dist/client/assets/{sequenceDiagram-3UESZ5HK-C-mrSLrJ.js → sequenceDiagram-3UESZ5HK-DcTRztVx.js} +1 -1
- package/dist/client/assets/{stateDiagram-AJRCARHV-IoDlhAe6.js → stateDiagram-AJRCARHV-nUgRVZSA.js} +1 -1
- package/dist/client/assets/stateDiagram-v2-BHNVJYJU-D9pJuQbI.js +1 -0
- package/dist/client/assets/{timeline-definition-PNZ67QCA-DEXg3TEw.js → timeline-definition-PNZ67QCA-CXm5n4rV.js} +1 -1
- package/dist/client/assets/{vennDiagram-CIIHVFJN-CNu7LaT1.js → vennDiagram-CIIHVFJN-EmNJBYNd.js} +1 -1
- package/dist/client/assets/{wardley-L42UT6IY-0hGvREmD.js → wardley-L42UT6IY-MLrlp8H-.js} +1 -1
- package/dist/client/assets/{wardleyDiagram-YWT4CUSO-CVLz-xFz.js → wardleyDiagram-YWT4CUSO-5QoES25n.js} +1 -1
- package/dist/client/assets/{xychartDiagram-2RQKCTM6-CFymKAcX.js → xychartDiagram-2RQKCTM6-CbDEQbY0.js} +1 -1
- package/dist/client/index.html +1 -1
- package/dist/core/agent/run-agent.d.ts +61 -0
- package/dist/core/agent/run-agent.js +212 -0
- package/dist/core/agent/run-agent.js.map +1 -0
- package/dist/core/ask/run-ask.d.ts +1 -1
- package/dist/core/ask/run-ask.js +14 -5
- package/dist/core/ask/run-ask.js.map +1 -1
- package/dist/core/workspace/resolve.d.ts +2 -0
- package/dist/core/workspace/resolve.js +2 -1
- package/dist/core/workspace/resolve.js.map +1 -1
- package/dist/plugin-types/ambient.d.ts +30 -0
- package/dist/plugin-types/plugin-runtime.d.ts +172 -0
- package/dist/plugin-types/ui.d.ts +154 -0
- package/dist/server/config.d.ts +12 -0
- package/dist/server/config.js +26 -0
- package/dist/server/config.js.map +1 -1
- package/dist/server/core/plugin-host/__fixtures__/plugins.d.ts +14 -0
- package/dist/server/core/plugin-host/__fixtures__/plugins.js +56 -0
- package/dist/server/core/plugin-host/__fixtures__/plugins.js.map +1 -0
- package/dist/server/core/plugin-host/base-packages.d.ts +14 -0
- package/dist/server/core/plugin-host/base-packages.js +26 -0
- package/dist/server/core/plugin-host/base-packages.js.map +1 -0
- package/dist/server/core/plugin-host/cache-bust.d.ts +10 -0
- package/dist/server/core/plugin-host/cache-bust.js +21 -0
- package/dist/server/core/plugin-host/cache-bust.js.map +1 -0
- package/dist/server/core/plugin-host/cli-engine.d.ts +7 -2
- package/dist/server/core/plugin-host/cli-engine.js +11 -3
- package/dist/server/core/plugin-host/cli-engine.js.map +1 -1
- package/dist/server/core/plugin-host/cli-plugins.d.ts +23 -0
- package/dist/server/core/plugin-host/cli-plugins.js +49 -0
- package/dist/server/core/plugin-host/cli-plugins.js.map +1 -0
- package/dist/server/core/plugin-host/cross-cutting.d.ts +41 -4
- package/dist/server/core/plugin-host/cross-cutting.js +52 -4
- package/dist/server/core/plugin-host/cross-cutting.js.map +1 -1
- package/dist/server/core/plugin-host/entities-router.d.ts +2 -1
- package/dist/server/core/plugin-host/entities-router.js +16 -1
- package/dist/server/core/plugin-host/entities-router.js.map +1 -1
- package/dist/server/core/plugin-host/frontend-assets.d.ts +100 -0
- package/dist/server/core/plugin-host/frontend-assets.js +262 -0
- package/dist/server/core/plugin-host/frontend-assets.js.map +1 -0
- package/dist/server/core/plugin-host/frontend-manifest.d.ts +33 -0
- package/dist/server/core/plugin-host/frontend-manifest.js +52 -0
- package/dist/server/core/plugin-host/frontend-manifest.js.map +1 -0
- package/dist/server/core/plugin-host/loader.d.ts +107 -0
- package/dist/server/core/plugin-host/loader.js +196 -0
- package/dist/server/core/plugin-host/loader.js.map +1 -0
- package/dist/server/core/plugin-host/manifest-adapter.d.ts +30 -0
- package/dist/server/core/plugin-host/manifest-adapter.js +119 -0
- package/dist/server/core/plugin-host/manifest-adapter.js.map +1 -0
- package/dist/server/core/plugin-host/overlay-loader.d.ts +60 -0
- package/dist/server/core/plugin-host/overlay-loader.js +243 -0
- package/dist/server/core/plugin-host/overlay-loader.js.map +1 -0
- package/dist/server/core/plugin-host/plugin-watcher.d.ts +41 -0
- package/dist/server/core/plugin-host/plugin-watcher.js +95 -0
- package/dist/server/core/plugin-host/plugin-watcher.js.map +1 -0
- package/dist/server/core/plugin-host/project-host.d.ts +8 -2
- package/dist/server/core/plugin-host/project-host.js +56 -6
- package/dist/server/core/plugin-host/project-host.js.map +1 -1
- package/dist/server/core/plugin-host/registry.d.ts +26 -2
- package/dist/server/core/plugin-host/registry.js +107 -2
- package/dist/server/core/plugin-host/registry.js.map +1 -1
- package/dist/server/core/plugin-host/runtime-shims.d.ts +26 -0
- package/dist/server/core/plugin-host/runtime-shims.js +96 -0
- package/dist/server/core/plugin-host/runtime-shims.js.map +1 -0
- package/dist/server/core/plugin-host/types.d.ts +105 -3
- package/dist/server/db/migrations/041_chat_thread_transagent.sql +22 -0
- package/dist/server/db/migrations/042_chat_thread_drop_context_type_check.sql +61 -0
- package/dist/server/external-skills/brief-implementer-template.d.ts +1 -1
- package/dist/server/external-skills/brief-implementer-template.js +5 -2
- package/dist/server/external-skills/brief-implementer-template.js.map +1 -1
- package/dist/server/external-skills/spec-reader-template.d.ts +1 -1
- package/dist/server/external-skills/spec-reader-template.js +14 -0
- package/dist/server/external-skills/spec-reader-template.js.map +1 -1
- package/dist/server/index.js +98 -1
- package/dist/server/index.js.map +1 -1
- package/dist/server/mcp/c4s-tools.d.ts +6 -1
- package/dist/server/mcp/c4s-tools.js +18 -13
- package/dist/server/mcp/c4s-tools.js.map +1 -1
- package/dist/server/mcp/release-tools/index.d.ts +11 -0
- package/dist/server/mcp/release-tools/index.js +68 -5
- package/dist/server/mcp/release-tools/index.js.map +1 -1
- package/dist/server/mcp/release-tools/projection.d.ts +11 -2
- package/dist/server/mcp/release-tools/projection.js +36 -7
- package/dist/server/mcp/release-tools/projection.js.map +1 -1
- package/dist/server/mcp/release-tools/types.d.ts +39 -2
- package/dist/server/mcp/transagent-tools.d.ts +26 -0
- package/dist/server/mcp/transagent-tools.js +75 -0
- package/dist/server/mcp/transagent-tools.js.map +1 -0
- package/dist/server/plugin-runtime/index.d.ts +17 -0
- package/dist/server/plugin-runtime/index.js +16 -0
- package/dist/server/plugin-runtime/index.js.map +1 -0
- package/dist/server/plugin-runtime/ui.d.ts +15 -0
- package/dist/server/plugin-runtime/ui.js +15 -0
- package/dist/server/plugin-runtime/ui.js.map +1 -0
- package/dist/server/routes/agent-turn.d.ts +17 -1
- package/dist/server/routes/agent-turn.js +121 -36
- package/dist/server/routes/agent-turn.js.map +1 -1
- package/dist/server/routes/briefs.js +12 -4
- package/dist/server/routes/briefs.js.map +1 -1
- package/dist/server/routes/chat.js +18 -0
- package/dist/server/routes/chat.js.map +1 -1
- package/dist/server/routes/config.d.ts +8 -0
- package/dist/server/routes/config.js +41 -3
- package/dist/server/routes/config.js.map +1 -1
- package/dist/server/routes/plans.js +13 -0
- package/dist/server/routes/plans.js.map +1 -1
- package/dist/server/routes/plugins.d.ts +43 -0
- package/dist/server/routes/plugins.js +93 -0
- package/dist/server/routes/plugins.js.map +1 -0
- package/dist/server/routes/threads.js +30 -5
- package/dist/server/routes/threads.js.map +1 -1
- package/dist/server/serialization/registerAll.d.ts +4 -0
- package/dist/server/serialization/registerAll.js +4 -2
- package/dist/server/serialization/registerAll.js.map +1 -1
- package/dist/server/services/brief.d.ts +30 -8
- package/dist/server/services/brief.js +58 -28
- package/dist/server/services/brief.js.map +1 -1
- package/dist/server/services/chat-context.d.ts +34 -0
- package/dist/server/services/chat-context.js +68 -21
- package/dist/server/services/chat-context.js.map +1 -1
- package/dist/server/services/chat.d.ts +18 -1
- package/dist/server/services/chat.js +74 -23
- package/dist/server/services/chat.js.map +1 -1
- package/dist/server/services/entity-indexer.js +21 -14
- package/dist/server/services/entity-indexer.js.map +1 -1
- package/dist/server/services/entity-writer.d.ts +2 -3
- package/dist/server/services/entity-writer.js.map +1 -1
- package/dist/server/services/plan.d.ts +7 -1
- package/dist/server/services/plan.js +17 -4
- package/dist/server/services/plan.js.map +1 -1
- package/dist/server/services/skill-registry.d.ts +31 -2
- package/dist/server/services/skill-registry.js +73 -1
- package/dist/server/services/skill-registry.js.map +1 -1
- package/dist/server/services/transagent-dispatcher.d.ts +60 -0
- package/dist/server/services/transagent-dispatcher.js +147 -0
- package/dist/server/services/transagent-dispatcher.js.map +1 -0
- package/dist/server/skills/brief-author/SKILL.md +26 -17
- package/dist/server/workspace/context-cache.d.ts +9 -0
- package/dist/server/workspace/context-cache.js +14 -0
- package/dist/server/workspace/context-cache.js.map +1 -1
- package/dist/server/workspace/project-context.d.ts +3 -0
- package/dist/server/workspace/project-context.js +108 -5
- package/dist/server/workspace/project-context.js.map +1 -1
- package/dist/server/workspace/registry.d.ts +28 -1
- package/dist/server/workspace/registry.js +57 -1
- package/dist/server/workspace/registry.js.map +1 -1
- package/dist/server/workspace/types.d.ts +15 -0
- package/dist/shared/entities.d.ts +50 -4
- package/dist/shared/entities.js +1 -0
- package/dist/shared/entities.js.map +1 -1
- package/dist/shared/plugin-host/frontend-manifest.d.ts +56 -0
- package/dist/shared/plugin-host/frontend-manifest.js +89 -0
- package/dist/shared/plugin-host/frontend-manifest.js.map +1 -0
- package/dist/shared/plugin-host/host-api.d.ts +60 -0
- package/dist/shared/plugin-host/host-api.js +67 -0
- package/dist/shared/plugin-host/host-api.js.map +1 -0
- package/dist/shared/plugin-host/manifest.d.ts +194 -0
- package/dist/shared/plugin-host/manifest.js +52 -0
- package/dist/shared/plugin-host/manifest.js.map +1 -0
- package/dist/shared/plugin-host/ui-kit-surface.d.ts +22 -0
- package/dist/shared/plugin-host/ui-kit-surface.js +25 -0
- package/dist/shared/plugin-host/ui-kit-surface.js.map +1 -0
- package/dist/shared/types.d.ts +5 -0
- package/package.json +18 -3
- package/dist/client/assets/channel-CTF_J4I4.js +0 -1
- package/dist/client/assets/classDiagram-4FO5ZUOK-Dt9RLC8r.js +0 -1
- package/dist/client/assets/classDiagram-v2-Q7XG4LA2-Dt9RLC8r.js +0 -1
- package/dist/client/assets/index-DnLELaLA.js +0 -798
- package/dist/client/assets/stateDiagram-v2-BHNVJYJU-BblFLijq.js +0 -1
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* M33 process-level plugin routes. Mounted at `/api` (before the
|
|
3
|
+
* `/api/projects/:id` dispatch) — the plugin catalog is process-global, so
|
|
4
|
+
* these are reachable with a plain `fetch` (no project prefix):
|
|
5
|
+
*
|
|
6
|
+
* GET /api/plugins/frontend-manifest → import map + active plugins ("Option B")
|
|
7
|
+
* GET /api/plugins/runtime/<peer>.js → shared-singleton ESM shim
|
|
8
|
+
* GET /api/plugins/<name>/frontend.js → plugin frontend (overlay: trust-gated, workspace: ungated)
|
|
9
|
+
* GET /api/plugins/<name>/frontend.css → plugin styles (overlay: trust-gated, workspace: ungated)
|
|
10
|
+
* GET /api/_meta/plugins → loader diagnostics (per-package state)
|
|
11
|
+
*/
|
|
12
|
+
import fs from 'node:fs';
|
|
13
|
+
import { Router } from 'express';
|
|
14
|
+
import { HOST_API_VERSION } from '../../shared/plugin-host/manifest.js';
|
|
15
|
+
import { buildFrontendManifest } from '../core/plugin-host/frontend-manifest.js';
|
|
16
|
+
import { assetContentType, resolveOverlayAsset, resolveWorkspaceAsset, } from '../core/plugin-host/frontend-assets.js';
|
|
17
|
+
import { getRuntimeShim } from '../core/plugin-host/runtime-shims.js';
|
|
18
|
+
// M33 phase 3: base-package assembly lives in a shared, express-free module so
|
|
19
|
+
// the `c4s plugins` CLI reuses the SAME logic (no divergence). Re-exported here
|
|
20
|
+
// for the existing `../routes/plugins.js` import sites (e.g. project-context).
|
|
21
|
+
import { buildBasePluginPackages } from '../core/plugin-host/base-packages.js';
|
|
22
|
+
export { buildBasePluginPackages } from '../core/plugin-host/base-packages.js';
|
|
23
|
+
export function pluginsRouter(deps) {
|
|
24
|
+
const { pluginRegistry, pluginRecords, frontendServing, workspacePackages = [] } = deps;
|
|
25
|
+
const router = Router();
|
|
26
|
+
router.get('/plugins/frontend-manifest', (_req, res) => {
|
|
27
|
+
const serving = frontendServing
|
|
28
|
+
? { cwd: frontendServing.cwd, trusted: frontendServing.isTrusted() }
|
|
29
|
+
: undefined;
|
|
30
|
+
res.json(buildFrontendManifest(pluginRegistry, serving, workspacePackages));
|
|
31
|
+
});
|
|
32
|
+
router.get('/plugins/runtime/:file', async (req, res, next) => {
|
|
33
|
+
try {
|
|
34
|
+
const slug = req.params.file.replace(/\.js$/, '');
|
|
35
|
+
const source = await getRuntimeShim(slug);
|
|
36
|
+
if (source == null) {
|
|
37
|
+
return res.status(404).json({
|
|
38
|
+
error: { code: 'PLUGIN_RUNTIME_NOT_FOUND', message: `unknown runtime peer "${slug}"` },
|
|
39
|
+
});
|
|
40
|
+
}
|
|
41
|
+
res.type('text/javascript').send(source);
|
|
42
|
+
}
|
|
43
|
+
catch (err) {
|
|
44
|
+
next(err);
|
|
45
|
+
}
|
|
46
|
+
});
|
|
47
|
+
// M33: stream any asset from a plugin's precompiled bundle dir (`dist/`). The
|
|
48
|
+
// entry `frontend.js` is native ESM (m33l5fe0 — the host does NOT re-bundle),
|
|
49
|
+
// so its relative imports (e.g. a code-split `./dto-*.js` chunk, source maps)
|
|
50
|
+
// resolve to siblings under `/api/plugins/<name>/<asset>`. Two tiers, tried in
|
|
51
|
+
// order, each strictly contained in the bundle dir + extension-allowlisted:
|
|
52
|
+
// 1. overlay (phase 2) — the trusted primary project's
|
|
53
|
+
// `.claude4spec/plugins/<name>/dist/<asset>` (trust-gated); then
|
|
54
|
+
// 2. workspace (phase 3) — a workspace/npm plugin's `dist/<asset>`, UNGATED,
|
|
55
|
+
// bounded to `workspacePackages` (which also guards traversal).
|
|
56
|
+
// The gate, the unknown-package/disallowed-extension guard, and the
|
|
57
|
+
// missing-file case all collapse to the same `404 PLUGIN_FRONTEND_NOT_FOUND`.
|
|
58
|
+
router.get('/plugins/:name/:asset', (req, res) => {
|
|
59
|
+
const name = req.params.name;
|
|
60
|
+
const asset = req.params.asset;
|
|
61
|
+
const contentType = assetContentType(asset);
|
|
62
|
+
const abs = contentType &&
|
|
63
|
+
((frontendServing &&
|
|
64
|
+
resolveOverlayAsset(frontendServing.cwd, frontendServing.isTrusted(), name, asset)) ||
|
|
65
|
+
resolveWorkspaceAsset(name, asset, workspacePackages));
|
|
66
|
+
if (!abs || !contentType) {
|
|
67
|
+
return res.status(404).json({
|
|
68
|
+
error: {
|
|
69
|
+
code: 'PLUGIN_FRONTEND_NOT_FOUND',
|
|
70
|
+
message: `no ${asset} for plugin "${name}"`,
|
|
71
|
+
},
|
|
72
|
+
});
|
|
73
|
+
}
|
|
74
|
+
// `nosniff` so a mistyped bundle can't be reinterpreted (mirrors routes/static).
|
|
75
|
+
res.setHeader('X-Content-Type-Options', 'nosniff');
|
|
76
|
+
res.type(contentType);
|
|
77
|
+
fs.createReadStream(abs)
|
|
78
|
+
.on('error', () => {
|
|
79
|
+
if (!res.headersSent)
|
|
80
|
+
res.status(404).end();
|
|
81
|
+
})
|
|
82
|
+
.pipe(res);
|
|
83
|
+
});
|
|
84
|
+
router.get('/_meta/plugins', (_req, res) => {
|
|
85
|
+
const response = {
|
|
86
|
+
hostApiVersion: HOST_API_VERSION,
|
|
87
|
+
packages: buildBasePluginPackages(pluginRegistry, pluginRecords),
|
|
88
|
+
};
|
|
89
|
+
res.json(response);
|
|
90
|
+
});
|
|
91
|
+
return router;
|
|
92
|
+
}
|
|
93
|
+
//# sourceMappingURL=plugins.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"plugins.js","sourceRoot":"","sources":["../../../src/server/routes/plugins.ts"],"names":[],"mappings":"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"}
|
|
@@ -8,9 +8,16 @@ export function threadsRouter(deps) {
|
|
|
8
8
|
const chat = deps.chatService;
|
|
9
9
|
// M31: per-project adapter registry via agentDeps.
|
|
10
10
|
const { activeAdapters } = deps;
|
|
11
|
-
router.get('/', (
|
|
11
|
+
router.get('/', (req, res, next) => {
|
|
12
12
|
try {
|
|
13
|
-
|
|
13
|
+
// P2: default-limited list (last 20, updated_at DESC). The client paginates
|
|
14
|
+
// via offset and infers "more" from `data.length === limit`. Default limit
|
|
15
|
+
// applies even when the param is omitted, so the endpoint never dumps all rows.
|
|
16
|
+
const limitRaw = Number(req.query.limit);
|
|
17
|
+
const offsetRaw = Number(req.query.offset);
|
|
18
|
+
const limit = Number.isFinite(limitRaw) && limitRaw > 0 ? Math.floor(limitRaw) : 20;
|
|
19
|
+
const offset = Number.isFinite(offsetRaw) && offsetRaw > 0 ? Math.floor(offsetRaw) : 0;
|
|
20
|
+
res.json({ data: chat.listThreads(limit, offset) });
|
|
14
21
|
}
|
|
15
22
|
catch (err) {
|
|
16
23
|
next(err);
|
|
@@ -19,7 +26,23 @@ export function threadsRouter(deps) {
|
|
|
19
26
|
router.post('/', (req, res, next) => {
|
|
20
27
|
try {
|
|
21
28
|
const title = typeof req.body?.title === 'string' ? req.body.title : null;
|
|
22
|
-
|
|
29
|
+
// 0.1.79: optional context_type. Only 'chat' (default) and 'ask' are
|
|
30
|
+
// accepted on THIS generic path; 'brief'/'patch' have dedicated
|
|
31
|
+
// create-thread endpoints (POST /briefs/:path/threads, /patches/...).
|
|
32
|
+
const rawCt = req.body?.context_type;
|
|
33
|
+
let contextType = 'chat';
|
|
34
|
+
if (rawCt !== undefined) {
|
|
35
|
+
if (rawCt !== 'chat' && rawCt !== 'ask') {
|
|
36
|
+
return res.status(400).json({
|
|
37
|
+
error: {
|
|
38
|
+
code: 'VALIDATION',
|
|
39
|
+
message: `context_type '${rawCt}' requires a dedicated create-thread endpoint`,
|
|
40
|
+
},
|
|
41
|
+
});
|
|
42
|
+
}
|
|
43
|
+
contextType = rawCt;
|
|
44
|
+
}
|
|
45
|
+
res.status(201).json({ data: chat.createThread(title, { contextType }) });
|
|
23
46
|
}
|
|
24
47
|
catch (err) {
|
|
25
48
|
next(err);
|
|
@@ -65,8 +88,10 @@ export function threadsRouter(deps) {
|
|
|
65
88
|
});
|
|
66
89
|
// M05 `m05ask`: headless synchroniczna tura agenta. W odroznieniu od
|
|
67
90
|
// `POST /api/chat` (SSE) blokuje zadanie do konca tury i zwraca skolapsowany
|
|
68
|
-
// kontrakt `{ threadId, answer }
|
|
69
|
-
//
|
|
91
|
+
// kontrakt `{ threadId, answer, messages }` (0.1.79: `messages` to wszystkie
|
|
92
|
+
// wiadomosci tury w jednym batchu — `runAgent({ output: 'full' })` je czyta,
|
|
93
|
+
// `'final'` ignoruje). Generyczny po `context_type` — runtime budowany tym
|
|
94
|
+
// samym `runAgentTurn`, ktory zasila `POST /api/chat`.
|
|
70
95
|
router.post('/:id/ask', async (req, res, next) => {
|
|
71
96
|
try {
|
|
72
97
|
const message = typeof req.body?.message === 'string' ? req.body.message : '';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"threads.js","sourceRoot":"","sources":["../../../src/server/routes/threads.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AACjC,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAChC,OAAO,EAAE,oBAAoB,EAAE,MAAM,8BAA8B,CAAC;AACpE,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1C,OAAO,EACL,YAAY,EACZ,cAAc,EACd,cAAc,GAGf,MAAM,iBAAiB,CAAC;AAEzB,MAAM,UAAU,aAAa,CAAC,IAAmB;IAC/C,MAAM,MAAM,GAAG,MAAM,EAAE,CAAC;IACxB,MAAM,IAAI,GAAG,IAAI,CAAC,WAAW,CAAC;IAC9B,mDAAmD;IACnD,MAAM,EAAE,cAAc,EAAE,GAAG,IAAI,CAAC;IAEhC,MAAM,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,
|
|
1
|
+
{"version":3,"file":"threads.js","sourceRoot":"","sources":["../../../src/server/routes/threads.ts"],"names":[],"mappings":"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"}
|
|
@@ -3,5 +3,9 @@ import type { PluginRegistry } from '../core/plugin-host/types.js';
|
|
|
3
3
|
* M31: replaces the side-effect import chain that populated the `pluginHost`
|
|
4
4
|
* singleton. Called ONCE at process start (startServer / CLI binaries) on a
|
|
5
5
|
* fresh PluginRegistry; the registry is immutable afterwards.
|
|
6
|
+
*
|
|
7
|
+
* Registers the SIX core entity types. `database-table` is no longer here — it
|
|
8
|
+
* ships as the preinstalled `c4s-plugin-simple-database-tables` plugin, loaded
|
|
9
|
+
* through the M33 loader (`PREDEFINED_PLUGINS`) right after this call.
|
|
6
10
|
*/
|
|
7
11
|
export declare function registerAllPlugins(registry: PluginRegistry): void;
|
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
import { onRegister as registerEndpoint } from '../entities/endpoint/plugin.js';
|
|
2
2
|
import { onRegister as registerDto } from '../entities/dto/plugin.js';
|
|
3
|
-
import { onRegister as registerDatabaseTable } from '../entities/database-table/plugin.js';
|
|
4
3
|
import { onRegister as registerUiView } from '../entities/ui-view/plugin.js';
|
|
5
4
|
import { onRegister as registerAc } from '../entities/ac/plugin.js';
|
|
6
5
|
import { onRegister as registerDesignSystem } from '../entities/design-system/plugin.js';
|
|
@@ -9,11 +8,14 @@ import { onRegister as registerDiagram } from '../entities/diagram/plugin.js';
|
|
|
9
8
|
* M31: replaces the side-effect import chain that populated the `pluginHost`
|
|
10
9
|
* singleton. Called ONCE at process start (startServer / CLI binaries) on a
|
|
11
10
|
* fresh PluginRegistry; the registry is immutable afterwards.
|
|
11
|
+
*
|
|
12
|
+
* Registers the SIX core entity types. `database-table` is no longer here — it
|
|
13
|
+
* ships as the preinstalled `c4s-plugin-simple-database-tables` plugin, loaded
|
|
14
|
+
* through the M33 loader (`PREDEFINED_PLUGINS`) right after this call.
|
|
12
15
|
*/
|
|
13
16
|
export function registerAllPlugins(registry) {
|
|
14
17
|
registerEndpoint(registry);
|
|
15
18
|
registerDto(registry);
|
|
16
|
-
registerDatabaseTable(registry);
|
|
17
19
|
registerUiView(registry);
|
|
18
20
|
registerAc(registry);
|
|
19
21
|
registerDesignSystem(registry);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"registerAll.js","sourceRoot":"","sources":["../../../src/server/serialization/registerAll.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,IAAI,gBAAgB,EAAE,MAAM,gCAAgC,CAAC;AAChF,OAAO,EAAE,UAAU,IAAI,WAAW,EAAE,MAAM,2BAA2B,CAAC;AACtE,OAAO,EAAE,UAAU,IAAI,
|
|
1
|
+
{"version":3,"file":"registerAll.js","sourceRoot":"","sources":["../../../src/server/serialization/registerAll.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,IAAI,gBAAgB,EAAE,MAAM,gCAAgC,CAAC;AAChF,OAAO,EAAE,UAAU,IAAI,WAAW,EAAE,MAAM,2BAA2B,CAAC;AACtE,OAAO,EAAE,UAAU,IAAI,cAAc,EAAE,MAAM,+BAA+B,CAAC;AAC7E,OAAO,EAAE,UAAU,IAAI,UAAU,EAAE,MAAM,0BAA0B,CAAC;AACpE,OAAO,EAAE,UAAU,IAAI,oBAAoB,EAAE,MAAM,qCAAqC,CAAC;AACzF,OAAO,EAAE,UAAU,IAAI,eAAe,EAAE,MAAM,+BAA+B,CAAC;AAE9E;;;;;;;;GAQG;AACH,MAAM,UAAU,kBAAkB,CAAC,QAAwB;IACzD,gBAAgB,CAAC,QAAQ,CAAC,CAAC;IAC3B,WAAW,CAAC,QAAQ,CAAC,CAAC;IACtB,cAAc,CAAC,QAAQ,CAAC,CAAC;IACzB,UAAU,CAAC,QAAQ,CAAC,CAAC;IACrB,oBAAoB,CAAC,QAAQ,CAAC,CAAC;IAC/B,eAAe,CAAC,QAAQ,CAAC,CAAC;AAC5B,CAAC"}
|
|
@@ -13,7 +13,7 @@
|
|
|
13
13
|
* - **Immutable frontmatter** keys protected: type/from_release/to_release/
|
|
14
14
|
* generated_at/generator_version. Mutation attempt → DomainError.
|
|
15
15
|
*/
|
|
16
|
-
import type { Brief, BriefChangedBy, BriefListItem, BriefThreadSummary } from '../../shared/entities.js';
|
|
16
|
+
import type { Brief, BriefChangedBy, BriefListItem, BriefSource, BriefThreadSummary } from '../../shared/entities.js';
|
|
17
17
|
import type { PagesService } from './pages.js';
|
|
18
18
|
import type { PagesWatcher } from '../fs/watcher.js';
|
|
19
19
|
import type { WsEmitter } from '../ws/project-emitter.js';
|
|
@@ -33,17 +33,27 @@ export interface BriefServiceDeps {
|
|
|
33
33
|
ws: WsEmitter;
|
|
34
34
|
}
|
|
35
35
|
export interface BriefCreateOpts {
|
|
36
|
+
/** 0.1.69: brief provenance. Defaults to 'release-diff' when absent. */
|
|
37
|
+
source?: BriefSource;
|
|
36
38
|
/** `null` = initial brief — pomijamy walidacje `fromRelease` i frontmatter trzyma `from_release: null`. */
|
|
37
39
|
fromReleaseName: string | null;
|
|
38
|
-
|
|
40
|
+
/** `null` = analysis brief (state relative to HEAD; no target release). */
|
|
41
|
+
toReleaseName: string | null;
|
|
39
42
|
/**
|
|
40
|
-
*
|
|
41
|
-
*
|
|
42
|
-
* pierwszej user-message w initial-thread po redirect.
|
|
43
|
+
* 0.1.69: pre-synthesized brief body (analysis briefs synthesize it from the
|
|
44
|
+
* parent thread's `message`). Absent ⇒ the generated stub body is used.
|
|
43
45
|
*/
|
|
44
|
-
|
|
46
|
+
content?: string;
|
|
45
47
|
suffix?: string;
|
|
46
48
|
}
|
|
49
|
+
/** 0.1.69: extended createThreadForBrief signature — supports child banki. */
|
|
50
|
+
export interface BriefThreadForBriefOpts {
|
|
51
|
+
path: string;
|
|
52
|
+
name?: string | null;
|
|
53
|
+
/** 0.1.69 Transagents: mark the created thread as a hidden child banka. */
|
|
54
|
+
parentThreadId?: string | null;
|
|
55
|
+
spawnedByToolUseId?: string | null;
|
|
56
|
+
}
|
|
47
57
|
export interface BriefUpdateContentOpts {
|
|
48
58
|
path: string;
|
|
49
59
|
content: string;
|
|
@@ -67,15 +77,27 @@ export declare class BriefService {
|
|
|
67
77
|
getBrief(path: string): Promise<Brief>;
|
|
68
78
|
listBriefs(opts?: BriefListOpts): BriefListItem[];
|
|
69
79
|
listThreadsForBrief(path: string): BriefThreadSummary[];
|
|
80
|
+
/**
|
|
81
|
+
* 0.1.69: file-only brief creation (writes file + page_version + index, NO
|
|
82
|
+
* thread). Callers pair this with {@link createThreadForBrief}. `content`
|
|
83
|
+
* carries a pre-synthesized body for analysis briefs; else a generated stub.
|
|
84
|
+
*
|
|
85
|
+
* Validation matrix (from, to):
|
|
86
|
+
* - (null, set) → initial brief
|
|
87
|
+
* - (set, set) → release-diff brief
|
|
88
|
+
* - (set, null) → analysis brief (state relative to HEAD)
|
|
89
|
+
* - (null, null) → 400 VALIDATION
|
|
90
|
+
* When `to=null` (analysis) the BRIEF_SAME_RELEASE guard and the
|
|
91
|
+
* `getRelease(toName)` existence check are skipped.
|
|
92
|
+
*/
|
|
70
93
|
createBrief(opts: BriefCreateOpts): Promise<{
|
|
71
94
|
briefPath: string;
|
|
72
|
-
initialThreadId: string;
|
|
73
95
|
}>;
|
|
74
96
|
updateContent(opts: BriefUpdateContentOpts): Promise<{
|
|
75
97
|
newHash: string;
|
|
76
98
|
}>;
|
|
77
99
|
updateFrontmatter(opts: BriefUpdateFrontmatterOpts): Promise<Brief>;
|
|
78
|
-
createThreadForBrief(
|
|
100
|
+
createThreadForBrief(opts: BriefThreadForBriefOpts): {
|
|
79
101
|
threadId: string;
|
|
80
102
|
};
|
|
81
103
|
private absPath;
|
|
@@ -37,6 +37,10 @@ export class BriefService {
|
|
|
37
37
|
if (frontmatter.type !== 'brief') {
|
|
38
38
|
throw new DomainError('BRIEF_INVALID_FRONTMATTER', `file '${path}' is not a brief (frontmatter.type=${JSON.stringify(frontmatter.type)})`);
|
|
39
39
|
}
|
|
40
|
+
// 0.1.69: legacy briefs predate `source` — default to 'release-diff' at parse
|
|
41
|
+
// time so the field is always present downstream (DTO, immutability diffing).
|
|
42
|
+
if (frontmatter.source !== 'analysis')
|
|
43
|
+
frontmatter.source = 'release-diff';
|
|
40
44
|
return {
|
|
41
45
|
path,
|
|
42
46
|
frontmatter,
|
|
@@ -57,11 +61,15 @@ export class BriefService {
|
|
|
57
61
|
out.push({
|
|
58
62
|
path: rec.path,
|
|
59
63
|
title: typeof fm.title === 'string' ? fm.title : null,
|
|
64
|
+
// 0.1.69: legacy briefs predate `source` — default to 'release-diff'.
|
|
65
|
+
source: fm.source === 'analysis' ? 'analysis' : 'release-diff',
|
|
60
66
|
fromRelease: typeof fm.from_release === 'string' ? fm.from_release : null,
|
|
61
|
-
|
|
67
|
+
// 0.1.69: analysis briefs carry `to_release: null` → toRelease stays null.
|
|
68
|
+
toRelease: typeof fm.to_release === 'string' ? fm.to_release : null,
|
|
62
69
|
implemented,
|
|
63
70
|
generatedAt: String(fm.generated_at ?? ''),
|
|
64
71
|
lastModifiedAt: lastVersion?.createdAt ?? null,
|
|
72
|
+
threadCount: this.deps.chatService.threadCountForBrief(rec.path),
|
|
65
73
|
});
|
|
66
74
|
}
|
|
67
75
|
return out;
|
|
@@ -75,37 +83,60 @@ export class BriefService {
|
|
|
75
83
|
}));
|
|
76
84
|
}
|
|
77
85
|
// ─── Mutations ──────────────────────────────────────────────────────────
|
|
86
|
+
/**
|
|
87
|
+
* 0.1.69: file-only brief creation (writes file + page_version + index, NO
|
|
88
|
+
* thread). Callers pair this with {@link createThreadForBrief}. `content`
|
|
89
|
+
* carries a pre-synthesized body for analysis briefs; else a generated stub.
|
|
90
|
+
*
|
|
91
|
+
* Validation matrix (from, to):
|
|
92
|
+
* - (null, set) → initial brief
|
|
93
|
+
* - (set, set) → release-diff brief
|
|
94
|
+
* - (set, null) → analysis brief (state relative to HEAD)
|
|
95
|
+
* - (null, null) → 400 VALIDATION
|
|
96
|
+
* When `to=null` (analysis) the BRIEF_SAME_RELEASE guard and the
|
|
97
|
+
* `getRelease(toName)` existence check are skipped.
|
|
98
|
+
*/
|
|
78
99
|
async createBrief(opts) {
|
|
100
|
+
const source = opts.source ?? 'release-diff';
|
|
79
101
|
const fromName = opts.fromReleaseName === null ? null : opts.fromReleaseName.trim();
|
|
80
|
-
const toName = opts.toReleaseName.trim();
|
|
81
|
-
if (
|
|
82
|
-
throw new DomainError('VALIDATION', 'toReleaseName is required');
|
|
102
|
+
const toName = opts.toReleaseName === null ? null : opts.toReleaseName.trim();
|
|
103
|
+
if (fromName === null && toName === null) {
|
|
104
|
+
throw new DomainError('VALIDATION', 'at least one of fromReleaseName / toReleaseName is required');
|
|
83
105
|
}
|
|
84
106
|
if (fromName !== null && fromName.length === 0) {
|
|
85
107
|
throw new DomainError('VALIDATION', 'fromReleaseName must be non-empty (or null for initial brief)');
|
|
86
108
|
}
|
|
87
|
-
if (
|
|
88
|
-
throw new DomainError('
|
|
109
|
+
if (toName !== null && toName.length === 0) {
|
|
110
|
+
throw new DomainError('VALIDATION', 'toReleaseName must be non-empty (or null for analysis brief)');
|
|
89
111
|
}
|
|
90
|
-
//
|
|
91
|
-
//
|
|
112
|
+
// 0.1.69: analysis briefs (to=null) compare against HEAD — skip same-release
|
|
113
|
+
// guard and the target-release existence check.
|
|
114
|
+
if (toName !== null) {
|
|
115
|
+
if (fromName !== null && fromName === toName) {
|
|
116
|
+
throw new DomainError('BRIEF_SAME_RELEASE', 'from_release must differ from to_release');
|
|
117
|
+
}
|
|
118
|
+
this.deps.releaseService.getRelease(toName);
|
|
119
|
+
}
|
|
120
|
+
// Validate the source release exists (throws NOT_FOUND if missing). `fromName
|
|
121
|
+
// === null` ⇒ initial brief, no fromRelease to validate.
|
|
92
122
|
if (fromName !== null)
|
|
93
123
|
this.deps.releaseService.getRelease(fromName);
|
|
94
|
-
this.deps.releaseService.getRelease(toName);
|
|
95
124
|
const briefPath = await this.allocatePath(fromName, toName, opts.suffix);
|
|
96
|
-
// opts.additionalPrompt is intentionally not persisted — klient dokleja go
|
|
97
|
-
// do pierwszej user-message w initial-thread po redirect.
|
|
98
125
|
const frontmatter = {
|
|
99
126
|
type: 'brief',
|
|
127
|
+
source,
|
|
100
128
|
from_release: fromName,
|
|
101
129
|
to_release: toName,
|
|
102
130
|
generated_at: new Date().toISOString(),
|
|
103
131
|
generator_version: GENERATOR_VERSION,
|
|
104
132
|
implemented: false,
|
|
105
133
|
};
|
|
106
|
-
const body =
|
|
107
|
-
|
|
108
|
-
|
|
134
|
+
const body = opts.content ??
|
|
135
|
+
(toName === null
|
|
136
|
+
? `# Analysis brief: ${fromName} → (next)\n`
|
|
137
|
+
: fromName === null
|
|
138
|
+
? `# Initial brief: ${toName}\n`
|
|
139
|
+
: `# Brief: ${fromName} → ${toName}\n`);
|
|
109
140
|
const fullContent = matter.stringify(body, frontmatter);
|
|
110
141
|
const abs = this.absPath(briefPath);
|
|
111
142
|
await fs.mkdir(path.dirname(abs), { recursive: true });
|
|
@@ -115,14 +146,7 @@ export class BriefService {
|
|
|
115
146
|
// Re-sync indexer immediately (faster than waiting for watcher debounce —
|
|
116
147
|
// the new brief should appear in `/briefs` list right after POST returns).
|
|
117
148
|
await this.deps.frontmatterIndexer.indexPage('briefs', briefPath);
|
|
118
|
-
|
|
119
|
-
? `Initial brief: ${toName}`
|
|
120
|
-
: `Brief: ${fromName} → ${toName}`;
|
|
121
|
-
const initialThread = this.deps.chatService.createThread(threadTitle, {
|
|
122
|
-
contextType: 'brief',
|
|
123
|
-
briefPath,
|
|
124
|
-
});
|
|
125
|
-
return { briefPath, initialThreadId: initialThread.id };
|
|
149
|
+
return { briefPath };
|
|
126
150
|
}
|
|
127
151
|
async updateContent(opts) {
|
|
128
152
|
const current = await this.getBrief(opts.path);
|
|
@@ -176,10 +200,12 @@ export class BriefService {
|
|
|
176
200
|
await this.deps.frontmatterIndexer.indexPage('briefs', opts.path);
|
|
177
201
|
return this.getBrief(opts.path);
|
|
178
202
|
}
|
|
179
|
-
createThreadForBrief(
|
|
180
|
-
const thread = this.deps.chatService.createThread(name ?? `Brief edit: ${
|
|
203
|
+
createThreadForBrief(opts) {
|
|
204
|
+
const thread = this.deps.chatService.createThread(opts.name ?? `Brief edit: ${opts.path}`, {
|
|
181
205
|
contextType: 'brief',
|
|
182
|
-
briefPath,
|
|
206
|
+
briefPath: opts.path,
|
|
207
|
+
parentThreadId: opts.parentThreadId ?? null,
|
|
208
|
+
spawnedByToolUseId: opts.spawnedByToolUseId ?? null,
|
|
183
209
|
});
|
|
184
210
|
return { threadId: thread.id };
|
|
185
211
|
}
|
|
@@ -188,9 +214,13 @@ export class BriefService {
|
|
|
188
214
|
return path.join(this.deps.briefsPages.root, relPath);
|
|
189
215
|
}
|
|
190
216
|
async allocatePath(fromName, toName, suffix) {
|
|
191
|
-
const
|
|
192
|
-
|
|
193
|
-
|
|
217
|
+
const suf = suffix ? `-${slugify(suffix)}` : '';
|
|
218
|
+
// 0.1.69: analysis brief (to=null) — `{from-slug}-to-next[-{suffix}].md`.
|
|
219
|
+
const base = toName === null
|
|
220
|
+
? `${slugify(fromName ?? 'head')}-to-next${suf}`
|
|
221
|
+
: fromName === null
|
|
222
|
+
? `initial-${slugify(toName)}${suf}`
|
|
223
|
+
: `${slugify(fromName)}-to-${slugify(toName)}${suf}`;
|
|
194
224
|
let candidate = `${base}.md`;
|
|
195
225
|
let n = 2;
|
|
196
226
|
while (await this.deps.briefsPages.exists(candidate)) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"brief.js","sourceRoot":"","sources":["../../../src/server/services/brief.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,MAAM,MAAM,aAAa,CAAC;AACjC,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAClC,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,MAAM,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"brief.js","sourceRoot":"","sources":["../../../src/server/services/brief.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,MAAM,MAAM,aAAa,CAAC;AACjC,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAClC,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,MAAM,MAAM,aAAa,CAAC;AASjC,OAAO,EAAE,gCAAgC,EAAE,MAAM,0BAA0B,CAAC;AAS5E,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AAExC,MAAM,iBAAiB,GAAG,kBAAkB,CAAC;AAuD7C,MAAM,OAAO,YAAY;IACH;IAApB,YAAoB,IAAsB;QAAtB,SAAI,GAAJ,IAAI,CAAkB;IAAG,CAAC;IAE9C,4EAA4E;IAE5E,KAAK,CAAC,QAAQ,CAAC,IAAY;QACzB,IAAI,CAAC,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC;YAChD,MAAM,IAAI,WAAW,CAAC,WAAW,EAAE,UAAU,IAAI,aAAa,CAAC,CAAC;QAClE,CAAC;QACD,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QAC/B,MAAM,OAAO,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;QAChD,MAAM,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC,CAAC;QAC/B,MAAM,WAAW,GAAG,CAAC,MAAM,CAAC,IAAI,IAAI,EAAE,CAAqB,CAAC;QAC5D,IAAI,WAAW,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;YACjC,MAAM,IAAI,WAAW,CACnB,2BAA2B,EAC3B,SAAS,IAAI,sCAAsC,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,IAAI,CAAC,GAAG,CACvF,CAAC;QACJ,CAAC;QACD,8EAA8E;QAC9E,8EAA8E;QAC9E,IAAI,WAAW,CAAC,MAAM,KAAK,UAAU;YAAE,WAAW,CAAC,MAAM,GAAG,cAAc,CAAC;QAC3E,OAAO;YACL,IAAI;YACJ,WAAW;YACX,IAAI,EAAE,MAAM,CAAC,OAAO;YACpB,OAAO;YACP,IAAI,EAAE,WAAW,CAAC,OAAO,CAAC;SAC3B,CAAC;IACJ,CAAC;IAED,UAAU,CAAC,OAAsB,EAAE;QACjC,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,kBAAkB,CAAC,qBAAqB,CAAC,OAAO,EAAE,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC,CAAC;QACnG,MAAM,GAAG,GAAoB,EAAE,CAAC;QAChC,KAAK,MAAM,GAAG,IAAI,OAAO,EAAE,CAAC;YAC1B,MAAM,EAAE,GAAG,GAAG,CAAC,WAA+B,CAAC;YAC/C,MAAM,WAAW,GAAG,EAAE,CAAC,WAAW,KAAK,IAAI,CAAC;YAC5C,IAAI,IAAI,CAAC,WAAW,KAAK,SAAS,IAAI,IAAI,CAAC,WAAW,KAAK,WAAW;gBAAE,SAAS;YACjF,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,gBAAgB,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;YACtE,GAAG,CAAC,IAAI,CAAC;gBACP,IAAI,EAAE,GAAG,CAAC,IAAI;gBACd,KAAK,EAAE,OAAO,EAAE,CAAC,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAE,EAAE,CAAC,KAAgB,CAAC,CAAC,CAAC,IAAI;gBACjE,sEAAsE;gBACtE,MAAM,EAAE,EAAE,CAAC,MAAM,KAAK,UAAU,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,cAAc;gBAC9D,WAAW,EAAE,OAAO,EAAE,CAAC,YAAY,KAAK,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,YAAY,CAAC,CAAC,CAAC,IAAI;gBACzE,2EAA2E;gBAC3E,SAAS,EAAE,OAAO,EAAE,CAAC,UAAU,KAAK,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI;gBACnE,WAAW;gBACX,WAAW,EAAE,MAAM,CAAC,EAAE,CAAC,YAAY,IAAI,EAAE,CAAC;gBAC1C,cAAc,EAAE,WAAW,EAAE,SAAS,IAAI,IAAI;gBAC9C,WAAW,EAAE,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,mBAAmB,CAAC,GAAG,CAAC,IAAI,CAAC;aACjE,CAAC,CAAC;QACL,CAAC;QACD,OAAO,GAAG,CAAC;IACb,CAAC;IAED,mBAAmB,CAAC,IAAY;QAC9B,OAAO,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,mBAAmB,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YACjE,EAAE,EAAE,CAAC,CAAC,EAAE;YACR,KAAK,EAAE,CAAC,CAAC,KAAK;YACd,SAAS,EAAE,CAAC,CAAC,SAAS;YACtB,YAAY,EAAE,CAAC,CAAC,YAAY;SAC7B,CAAC,CAAC,CAAC;IACN,CAAC;IAED,2EAA2E;IAE3E;;;;;;;;;;;;OAYG;IACH,KAAK,CAAC,WAAW,CAAC,IAAqB;QACrC,MAAM,MAAM,GAAgB,IAAI,CAAC,MAAM,IAAI,cAAc,CAAC;QAC1D,MAAM,QAAQ,GAAG,IAAI,CAAC,eAAe,KAAK,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,eAAe,CAAC,IAAI,EAAE,CAAC;QACpF,MAAM,MAAM,GAAG,IAAI,CAAC,aAAa,KAAK,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,IAAI,EAAE,CAAC;QAC9E,IAAI,QAAQ,KAAK,IAAI,IAAI,MAAM,KAAK,IAAI,EAAE,CAAC;YACzC,MAAM,IAAI,WAAW,CAAC,YAAY,EAAE,6DAA6D,CAAC,CAAC;QACrG,CAAC;QACD,IAAI,QAAQ,KAAK,IAAI,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC/C,MAAM,IAAI,WAAW,CAAC,YAAY,EAAE,+DAA+D,CAAC,CAAC;QACvG,CAAC;QACD,IAAI,MAAM,KAAK,IAAI,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC3C,MAAM,IAAI,WAAW,CAAC,YAAY,EAAE,8DAA8D,CAAC,CAAC;QACtG,CAAC;QACD,6EAA6E;QAC7E,gDAAgD;QAChD,IAAI,MAAM,KAAK,IAAI,EAAE,CAAC;YACpB,IAAI,QAAQ,KAAK,IAAI,IAAI,QAAQ,KAAK,MAAM,EAAE,CAAC;gBAC7C,MAAM,IAAI,WAAW,CAAC,oBAAoB,EAAE,0CAA0C,CAAC,CAAC;YAC1F,CAAC;YACD,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;QAC9C,CAAC;QACD,8EAA8E;QAC9E,yDAAyD;QACzD,IAAI,QAAQ,KAAK,IAAI;YAAE,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;QAErE,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,YAAY,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;QACzE,MAAM,WAAW,GAAqB;YACpC,IAAI,EAAE,OAAO;YACb,MAAM;YACN,YAAY,EAAE,QAAQ;YACtB,UAAU,EAAE,MAAM;YAClB,YAAY,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;YACtC,iBAAiB,EAAE,iBAAiB;YACpC,WAAW,EAAE,KAAK;SACnB,CAAC;QACF,MAAM,IAAI,GACR,IAAI,CAAC,OAAO;YACZ,CAAC,MAAM,KAAK,IAAI;gBACd,CAAC,CAAC,qBAAqB,QAAQ,aAAa;gBAC5C,CAAC,CAAC,QAAQ,KAAK,IAAI;oBACjB,CAAC,CAAC,oBAAoB,MAAM,IAAI;oBAChC,CAAC,CAAC,YAAY,QAAQ,MAAM,MAAM,IAAI,CAAC,CAAC;QAC9C,MAAM,WAAW,GAAG,MAAM,CAAC,SAAS,CAAC,IAAI,EAAE,WAAsC,CAAC,CAAC;QAEnF,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;QACpC,MAAM,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QACvD,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;QAC5C,MAAM,EAAE,CAAC,SAAS,CAAC,GAAG,EAAE,WAAW,EAAE,OAAO,CAAC,CAAC;QAC9C,MAAM,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,aAAa,CACxC,SAAS,EACT,QAAQ,EACR,MAAM,EACN,SAAS,EACT,IAAI,CAAC,IAAI,CAAC,gBAAgB,EAC1B,OAAO,CACR,CAAC;QACF,0EAA0E;QAC1E,2EAA2E;QAC3E,MAAM,IAAI,CAAC,IAAI,CAAC,kBAAkB,CAAC,SAAS,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC;QAElE,OAAO,EAAE,SAAS,EAAE,CAAC;IACvB,CAAC;IAED,KAAK,CAAC,aAAa,CAAC,IAA4B;QAC9C,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC/C,IAAI,OAAO,IAAI,CAAC,YAAY,KAAK,QAAQ,IAAI,IAAI,CAAC,YAAY,KAAK,OAAO,CAAC,IAAI,EAAE,CAAC;YAChF,MAAM,IAAI,aAAa,CAAC,gBAAgB,EAAE,+BAA+B,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC;QAC3F,CAAC;QACD,2EAA2E;QAC3E,MAAM,QAAQ,GAAG,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACtC,MAAM,UAAU,GAAG,CAAC,QAAQ,CAAC,IAAI,IAAI,EAAE,CAAqB,CAAC;QAC7D,MAAM,QAAQ,GAAa,gCAAgC,CAAC,MAAM,CAChE,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAChF,CAAC;QACF,2EAA2E;QAC3E,4EAA4E;QAC5E,iDAAiD;QACjD,IACE,IAAI,CAAC,SAAS,KAAK,OAAO;YAC1B,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,WAAW,CAAC,KAAK,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,WAAW,CAAC,WAAW,CAAC,EAC1F,CAAC;YACD,QAAQ,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;QAC/B,CAAC;QACD,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACxB,MAAM,IAAI,WAAW,CACnB,6BAA6B,EAC7B,6CAA6C,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CACnE,CAAC;QACJ,CAAC;QACD,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACpC,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC5C,MAAM,EAAE,CAAC,SAAS,CAAC,GAAG,EAAE,IAAI,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;QAC/C,MAAM,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,aAAa,CACxC,IAAI,CAAC,IAAI,EACT,QAAQ,EACR,IAAI,CAAC,SAAS,EACd,SAAS,EACT,IAAI,CAAC,IAAI,CAAC,gBAAgB,EAC1B,OAAO,EACP,IAAI,CAAC,aAAa,CACnB,CAAC;QACF,MAAM,IAAI,CAAC,IAAI,CAAC,kBAAkB,CAAC,SAAS,CAAC,QAAQ,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;QAClE,6EAA6E;QAC7E,+EAA+E;QAC/E,0EAA0E;QAC1E,8EAA8E;QAC9E,+EAA+E;QAC/E,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,SAAS,CAAC;YACrB,IAAI,EAAE,gBAAgB;YACtB,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,MAAM,EAAE,IAAI,CAAC,SAAS,KAAK,OAAO,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,QAAQ;SAC3D,CAAC,CAAC;QACH,OAAO,EAAE,OAAO,EAAE,WAAW,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;IAChD,CAAC;IAED,KAAK,CAAC,iBAAiB,CAAC,IAAgC;QACtD,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC/C,MAAM,IAAI,GAAqB,EAAE,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC;QAC1D,MAAM,SAAS,GAAa,EAAE,CAAC;QAC/B,IAAI,IAAI,CAAC,KAAK,CAAC,WAAW,KAAK,SAAS,IAAI,IAAI,CAAC,KAAK,CAAC,WAAW,KAAK,OAAO,CAAC,WAAW,CAAC,WAAW,EAAE,CAAC;YACvG,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC;YAC1C,SAAS,CAAC,IAAI,CAAC,mBAAmB,IAAI,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC,CAAC;QAC9D,CAAC;QACD,MAAM,UAAU,GAAG,MAAM,CAAC,SAAS,CAAC,OAAO,CAAC,IAAI,EAAE,IAA+B,CAAC,CAAC;QACnF,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACpC,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC5C,MAAM,EAAE,CAAC,SAAS,CAAC,GAAG,EAAE,UAAU,EAAE,OAAO,CAAC,CAAC;QAC7C,MAAM,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,aAAa,CACxC,IAAI,CAAC,IAAI,EACT,QAAQ,EACR,IAAI,CAAC,SAAS,EACd,SAAS,EACT,IAAI,CAAC,IAAI,CAAC,gBAAgB,EAC1B,OAAO,EACP,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CACnD,CAAC;QACF,MAAM,IAAI,CAAC,IAAI,CAAC,kBAAkB,CAAC,SAAS,CAAC,QAAQ,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;QAClE,OAAO,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAClC,CAAC;IAED,oBAAoB,CAAC,IAA6B;QAChD,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,IAAI,eAAe,IAAI,CAAC,IAAI,EAAE,EAAE;YACzF,WAAW,EAAE,OAAO;YACpB,SAAS,EAAE,IAAI,CAAC,IAAI;YACpB,cAAc,EAAE,IAAI,CAAC,cAAc,IAAI,IAAI;YAC3C,kBAAkB,EAAE,IAAI,CAAC,kBAAkB,IAAI,IAAI;SACpD,CAAC,CAAC;QACH,OAAO,EAAE,QAAQ,EAAE,MAAM,CAAC,EAAE,EAAE,CAAC;IACjC,CAAC;IAED,2EAA2E;IAEnE,OAAO,CAAC,OAAe;QAC7B,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;IACxD,CAAC;IAEO,KAAK,CAAC,YAAY,CAAC,QAAuB,EAAE,MAAqB,EAAE,MAAe;QACxF,MAAM,GAAG,GAAG,MAAM,CAAC,CAAC,CAAC,IAAI,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAChD,0EAA0E;QAC1E,MAAM,IAAI,GAAG,MAAM,KAAK,IAAI;YAC1B,CAAC,CAAC,GAAG,OAAO,CAAC,QAAQ,IAAI,MAAM,CAAC,WAAW,GAAG,EAAE;YAChD,CAAC,CAAC,QAAQ,KAAK,IAAI;gBACjB,CAAC,CAAC,WAAW,OAAO,CAAC,MAAM,CAAC,GAAG,GAAG,EAAE;gBACpC,CAAC,CAAC,GAAG,OAAO,CAAC,QAAQ,CAAC,OAAO,OAAO,CAAC,MAAM,CAAC,GAAG,GAAG,EAAE,CAAC;QACzD,IAAI,SAAS,GAAG,GAAG,IAAI,KAAK,CAAC;QAC7B,IAAI,CAAC,GAAG,CAAC,CAAC;QACV,OAAO,MAAM,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,SAAS,CAAC,EAAE,CAAC;YACrD,SAAS,GAAG,GAAG,IAAI,IAAI,CAAC,KAAK,CAAC;YAC9B,CAAC,EAAE,CAAC;YACJ,IAAI,CAAC,GAAG,IAAI;gBAAE,MAAM,IAAI,WAAW,CAAC,YAAY,EAAE,mCAAmC,CAAC,CAAC;QACzF,CAAC;QACD,OAAO,SAAS,CAAC;IACnB,CAAC;CACF;AAED,MAAM,OAAO,aAAc,SAAQ,KAAK;IAC7B,IAAI,CAAS;IACb,WAAW,CAAS;IAC7B,YAAY,IAAY,EAAE,OAAe,EAAE,WAAmB;QAC5D,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,eAAe,CAAC;QAC5B,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,WAAW,GAAG,WAAW,CAAC;IACjC,CAAC;CACF;AAED,SAAS,OAAO,CAAC,KAAa;IAC5B,OAAO,KAAK;SACT,WAAW,EAAE;SACb,SAAS,CAAC,MAAM,CAAC;SACjB,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC;SACrB,OAAO,CAAC,aAAa,EAAE,GAAG,CAAC;SAC3B,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC;SACvB,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,OAAO,CAAC;AAC7B,CAAC;AAED,SAAS,WAAW,CAAC,OAAe;IAClC,OAAO,MAAM,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AAC5E,CAAC"}
|
|
@@ -1,6 +1,40 @@
|
|
|
1
1
|
import type { Annotation, Brief, ChatContextType, PatchResponse, Plan } from '../../shared/entities.js';
|
|
2
2
|
import type { ProjectPluginHost } from '../core/plugin-host/types.js';
|
|
3
3
|
import type { SubagentDefinition } from '@inharness-ai/agent-adapters';
|
|
4
|
+
/** Which built-in MCP servers a context_type mounts. The dispatcher resolves this descriptor to
|
|
5
|
+
* the real server set; `transagentTools` stays AND-gated by the recursion-depth guard
|
|
6
|
+
* (`!isChildBanka`) at the call site. */
|
|
7
|
+
export interface McpServerSet {
|
|
8
|
+
/** `'all'` = full entity-plugin servers + tag/reference; `'release-only'` = whitelist
|
|
9
|
+
* (`BRIEF_ALLOWED_PLUGIN_MCP`, i.e. read-only release-tools) for the narrow brief toolset. */
|
|
10
|
+
pluginServers: 'all' | 'release-only';
|
|
11
|
+
planTools: boolean;
|
|
12
|
+
briefTools: boolean;
|
|
13
|
+
c4sTools: boolean;
|
|
14
|
+
transagentTools: boolean;
|
|
15
|
+
}
|
|
16
|
+
/** One registry row — the five dimensions spec `m05ctxreg` dispatches per thread. */
|
|
17
|
+
export interface ContextTypeEntry {
|
|
18
|
+
/** Dim 1 — bundled skill (M15) added to `inlineSkills` on top of `config.writingStyle`.
|
|
19
|
+
* `'brief-author'` for brief; `null` for chat/patch/ask (writing-style only). */
|
|
20
|
+
bundledSkill: 'brief-author' | null;
|
|
21
|
+
/** Dim 2 — which MCP servers mount in `adapter.execute({ mcpServers })`. */
|
|
22
|
+
mcp: McpServerSet;
|
|
23
|
+
/** Dim 3 — chat-overlay chrome. Declarative marker only: the frontend `ChatOverlay.tsx`
|
|
24
|
+
* switches on `contextType` directly; this records the dimension, no backend consumer. */
|
|
25
|
+
uiChrome: 'overlay' | 'brief-detail';
|
|
26
|
+
/** Dim 4 — read-only `SubagentDefinition` injected into `adapter.execute({ subagents })`. */
|
|
27
|
+
subagent: 'spec-explore' | 'diff-explore';
|
|
28
|
+
/** Dim 5 — builtin posture. `'force-plan'` pins `planMode=true` regardless of the thread's
|
|
29
|
+
* `plan_mode` flag (read-only peer); `'follow-thread'` tracks the flag. */
|
|
30
|
+
builtinPosture: 'follow-thread' | 'force-plan';
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* The registry. Rows reproduce the spec `m05ctxreg` table 1:1; this refactor is
|
|
34
|
+
* behavior-preserving, so each row dispatches exactly what the prior scattered
|
|
35
|
+
* `isBrief`/`isPatch`/`isAsk` conditionals did.
|
|
36
|
+
*/
|
|
37
|
+
export declare const CONTEXT_TYPE_REGISTRY: Record<ChatContextType, ContextTypeEntry>;
|
|
4
38
|
/**
|
|
5
39
|
* 0.1.58: a workspace peer the agent may consult via `c4s-tools.ask`. `path` is
|
|
6
40
|
* the peer's `cwd` from the workspace registry — passed 1:1 as the `project`
|