@inharness-ai/claude4spec 1.0.21 → 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 +120 -53
- package/CHANGELOG.md +13 -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-Coa9fbDO.js → arc-C9oTB3b1.js} +1 -1
- package/dist/client/assets/{architectureDiagram-3BPJPVTR-VJZcRMEN.js → architectureDiagram-3BPJPVTR-Bno5ViqK.js} +1 -1
- package/dist/client/assets/{blockDiagram-GPEHLZMM-C7dU2lW1.js → blockDiagram-GPEHLZMM-CJYBoeWQ.js} +1 -1
- package/dist/client/assets/{c4Diagram-AAUBKEIU-CG_BBm_5.js → c4Diagram-AAUBKEIU-DaaqWE6s.js} +1 -1
- package/dist/client/assets/channel-Cei_E79M.js +1 -0
- package/dist/client/assets/{chunk-2J33WTMH-BnS95YpK.js → chunk-2J33WTMH-P_I0OPMy.js} +1 -1
- package/dist/client/assets/{chunk-4BX2VUAB-COr8w3X3.js → chunk-4BX2VUAB-CCySMlh5.js} +1 -1
- package/dist/client/assets/{chunk-55IACEB6-CxrIbZhB.js → chunk-55IACEB6-CEUyqKGF.js} +1 -1
- package/dist/client/assets/{chunk-727SXJPM-DRchPPRe.js → chunk-727SXJPM-CoTSYOVz.js} +1 -1
- package/dist/client/assets/{chunk-AQP2D5EJ-_SfN7mED.js → chunk-AQP2D5EJ-DB0nMxPr.js} +1 -1
- package/dist/client/assets/{chunk-FMBD7UC4-p2tIiP1D.js → chunk-FMBD7UC4-PG3m6-_a.js} +1 -1
- package/dist/client/assets/{chunk-ND2GUHAM-B1mbl2hP.js → chunk-ND2GUHAM-CBNk6IaV.js} +1 -1
- package/dist/client/assets/{chunk-QZHKN3VN-DBUpeqvS.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-BBsY5aKD.js → cose-bilkent-S5V4N54A-BDwDDxHN.js} +1 -1
- package/dist/client/assets/{dagre-BM42HDAG-b-vu4RC9.js → dagre-BM42HDAG-DR-1e8N5.js} +1 -1
- package/dist/client/assets/{diagram-2AECGRRQ-j-DW9qSf.js → diagram-2AECGRRQ-C-tHgBWt.js} +1 -1
- package/dist/client/assets/{diagram-5GNKFQAL-DHX_WYWQ.js → diagram-5GNKFQAL-uLmoKaJL.js} +1 -1
- package/dist/client/assets/{diagram-KO2AKTUF-DxdQok_M.js → diagram-KO2AKTUF-8Fd-xuOy.js} +1 -1
- package/dist/client/assets/{diagram-LMA3HP47-BbTIX5c1.js → diagram-LMA3HP47-C1gniWsn.js} +1 -1
- package/dist/client/assets/{diagram-OG6HWLK6-BQ9ODAlH.js → diagram-OG6HWLK6-BMWjZbeC.js} +1 -1
- package/dist/client/assets/{erDiagram-TEJ5UH35-6lwAL1y9.js → erDiagram-TEJ5UH35-CIUO8hrR.js} +1 -1
- package/dist/client/assets/{flowDiagram-I6XJVG4X-ioSHb5-t.js → flowDiagram-I6XJVG4X-Ccw5YEf3.js} +1 -1
- package/dist/client/assets/{ganttDiagram-6RSMTGT7-CXFQp9Nj.js → ganttDiagram-6RSMTGT7-BAvlf8cY.js} +1 -1
- package/dist/client/assets/{gitGraphDiagram-PVQCEYII-C1pVD_NQ.js → gitGraphDiagram-PVQCEYII-ChCkdYar.js} +1 -1
- package/dist/client/assets/{index-JaAxQJXh.js → index-BotCWOKC.js} +1 -1
- package/dist/client/assets/index-CtdzGyqj.js +805 -0
- package/dist/client/assets/{index-hz5T_W2e.js → index-DtpKHGD1.js} +1 -1
- package/dist/client/assets/{infoDiagram-5YYISTIA-C2Guev-g.js → infoDiagram-5YYISTIA-CZMGwNyB.js} +1 -1
- package/dist/client/assets/{ishikawaDiagram-YF4QCWOH-D3v8VBb2.js → ishikawaDiagram-YF4QCWOH-CubjZGk6.js} +1 -1
- package/dist/client/assets/{journeyDiagram-JHISSGLW-DX1AW_Ap.js → journeyDiagram-JHISSGLW-DzwOyVzB.js} +1 -1
- package/dist/client/assets/{kanban-definition-UN3LZRKU-CzXThvq2.js → kanban-definition-UN3LZRKU-CXznoTY9.js} +1 -1
- package/dist/client/assets/{linear-CVw4gl5i.js → linear-EDwTFRrU.js} +1 -1
- package/dist/client/assets/{mermaid.core-C29eoXRj.js → mermaid.core-Lae2097R.js} +4 -4
- package/dist/client/assets/{mindmap-definition-RKZ34NQL-DEEGVQVA.js → mindmap-definition-RKZ34NQL-DFjIW41g.js} +1 -1
- package/dist/client/assets/{pieDiagram-4H26LBE5-Dme-VM6m.js → pieDiagram-4H26LBE5-CZDLR1jd.js} +1 -1
- package/dist/client/assets/{quadrantDiagram-W4KKPZXB-CURFNo24.js → quadrantDiagram-W4KKPZXB-CTGDzbqp.js} +1 -1
- package/dist/client/assets/{requirementDiagram-4Y6WPE33-DxMZWXME.js → requirementDiagram-4Y6WPE33-CeH0NbMv.js} +1 -1
- package/dist/client/assets/{sankeyDiagram-5OEKKPKP-BW64D4_P.js → sankeyDiagram-5OEKKPKP-B6ZTjurV.js} +1 -1
- package/dist/client/assets/{sequenceDiagram-3UESZ5HK-BATRPm8Q.js → sequenceDiagram-3UESZ5HK-DcTRztVx.js} +1 -1
- package/dist/client/assets/{stateDiagram-AJRCARHV-pgHVMnO3.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-qBxJZPWd.js → timeline-definition-PNZ67QCA-CXm5n4rV.js} +1 -1
- package/dist/client/assets/{vennDiagram-CIIHVFJN-BZJK9hqJ.js → vennDiagram-CIIHVFJN-EmNJBYNd.js} +1 -1
- package/dist/client/assets/{wardley-L42UT6IY-BobtgEXg.js → wardley-L42UT6IY-MLrlp8H-.js} +1 -1
- package/dist/client/assets/{wardleyDiagram-YWT4CUSO-DuWfX_-P.js → wardleyDiagram-YWT4CUSO-5QoES25n.js} +1 -1
- package/dist/client/assets/{xychartDiagram-2RQKCTM6-DCw1iURo.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/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/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 +82 -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/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 +8 -1
- package/dist/server/routes/agent-turn.js +67 -39
- package/dist/server/routes/agent-turn.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/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 +21 -3
- 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/chat-context.d.ts +34 -0
- package/dist/server/services/chat-context.js +58 -15
- package/dist/server/services/chat-context.js.map +1 -1
- package/dist/server/services/chat.d.ts +6 -0
- package/dist/server/services/chat.js +18 -2
- package/dist/server/services/chat.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/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/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 +106 -4
- 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 +4 -1
- 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-D5gzBvo7.js +0 -1
- package/dist/client/assets/classDiagram-4FO5ZUOK-CT-amIxa.js +0 -1
- package/dist/client/assets/classDiagram-v2-Q7XG4LA2-CT-amIxa.js +0 -1
- package/dist/client/assets/index-DyAnw7YN.js +0 -798
- package/dist/client/assets/stateDiagram-v2-BHNVJYJU-szm_LIuD.js +0 -1
|
@@ -10,6 +10,7 @@ import type { Database } from 'better-sqlite3';
|
|
|
10
10
|
import type { Router } from 'express';
|
|
11
11
|
import type { McpServerInstance } from '@inharness-ai/agent-adapters';
|
|
12
12
|
import type { EntityModuleManifest, PluginActivationState, SystemPromptContribution } from '../../../shared/plugin-host/types.js';
|
|
13
|
+
import type { PluginCommandContribution, PluginManifest, PluginSettingsSection, WritingStyleContribution } from '../../../shared/plugin-host/manifest.js';
|
|
13
14
|
import type { EntityDiff, EntitySerializer, RestoreContext, RestoreResult, SerializeContext, SnapshotData } from '../../serialization/types.js';
|
|
14
15
|
import type { TagsService } from '../../services/tags.js';
|
|
15
16
|
import type { VersionService } from '../../services/versions.js';
|
|
@@ -89,6 +90,49 @@ export interface BackendModule extends EntityModuleManifest {
|
|
|
89
90
|
mount?: PluginMountFn;
|
|
90
91
|
};
|
|
91
92
|
}
|
|
93
|
+
/**
|
|
94
|
+
* M33: per-`ProjectContext` overlay of project-local plugins loaded
|
|
95
|
+
* from `<cwd>/.claude4spec/plugins/` (behind the `trustProjectPlugins` gate).
|
|
96
|
+
* The overlay is relative to the project — two projects in one process carry
|
|
97
|
+
* different overlays. `listLocal()` returns already-validated, trust-gated
|
|
98
|
+
* modules; `origin(type)` maps a type back to its source path under
|
|
99
|
+
* `.claude4spec/plugins/` for diagnostics (shadow report).
|
|
100
|
+
*/
|
|
101
|
+
export interface ProjectPluginOverlay {
|
|
102
|
+
/** Project-local modules of THIS project (post validation + trust gate). */
|
|
103
|
+
listLocal(): BackendModule[];
|
|
104
|
+
/** Source path under `<cwd>/.claude4spec/plugins/` for the given type. */
|
|
105
|
+
origin(type: string): string;
|
|
106
|
+
/**
|
|
107
|
+
* M33 — Settings sections contributed by trusted project-local
|
|
108
|
+
* plugins (one per plugin with `contributes.settings`). Trust is implicit:
|
|
109
|
+
* the overlay is built only on the trusted path.
|
|
110
|
+
*/
|
|
111
|
+
listSettings(): PluginSettingsSection[];
|
|
112
|
+
/** M33 — declarative editor commands from trusted project-local plugins. */
|
|
113
|
+
listCommands(): PluginCommandContribution[];
|
|
114
|
+
}
|
|
115
|
+
/**
|
|
116
|
+
* M33 — a registered base-layer plugin, retained by the registry so the
|
|
117
|
+
* host can surface its non-entity capabilities (settings/commands) and the
|
|
118
|
+
* hot-reload pipeline can tear it down via `onUnregister` before re-registering.
|
|
119
|
+
*/
|
|
120
|
+
export interface RegisteredPluginRecord {
|
|
121
|
+
name: string;
|
|
122
|
+
version: string;
|
|
123
|
+
/** Entity types this plugin contributed (for unregister + diagnostics). */
|
|
124
|
+
contributedTypes: string[];
|
|
125
|
+
settings: PluginSettingsSection['fields'];
|
|
126
|
+
commands: PluginCommandContribution[];
|
|
127
|
+
/** Required teardown hook (idempotent, non-throwing by contract). */
|
|
128
|
+
onUnregister: () => void;
|
|
129
|
+
}
|
|
130
|
+
/** One overlay type that shadows a same-named base type (cross-layer collision). */
|
|
131
|
+
export interface ShadowedType {
|
|
132
|
+
type: string;
|
|
133
|
+
/** Source path of the overlay module that won. */
|
|
134
|
+
overlayOrigin: string;
|
|
135
|
+
}
|
|
92
136
|
/**
|
|
93
137
|
* M31 split: process-immutable plugin catalog. Populated once at process
|
|
94
138
|
* start via `registerAllPlugins(registry)`; `consolidate` is a PURE factory —
|
|
@@ -97,15 +141,52 @@ export interface BackendModule extends EntityModuleManifest {
|
|
|
97
141
|
export interface PluginRegistry {
|
|
98
142
|
/** Register a plugin manifest. Idempotent on `module.type`. */
|
|
99
143
|
registerEntityModule(module: BackendModule): void;
|
|
144
|
+
/**
|
|
145
|
+
* M33: register a runtime plugin manifest. Validates the manifest shape and
|
|
146
|
+
* fans `contributes.entities[]` out to `registerEntityModule(...)` (each
|
|
147
|
+
* lowered from its authoring shape). Throws `PluginManifestError` on a
|
|
148
|
+
* structurally invalid manifest — the loader catches this per-package. Does
|
|
149
|
+
* NOT gate on hostApiVersion/engines (that is the loader's job).
|
|
150
|
+
*/
|
|
151
|
+
registerPlugin(manifest: PluginManifest): void;
|
|
152
|
+
/**
|
|
153
|
+
* M33 — validate a manifest's shape + lower all its contributions
|
|
154
|
+
* WITHOUT mutating the registry; throws on a structural problem. The reload
|
|
155
|
+
* pipeline calls this before `unregisterPlugin` so a structurally-broken new
|
|
156
|
+
* version never leaves the pool missing a type (atomic "old stays").
|
|
157
|
+
*/
|
|
158
|
+
validatePlugin(manifest: PluginManifest): void;
|
|
159
|
+
/**
|
|
160
|
+
* M33 — tear down a previously-registered base plugin by name: call
|
|
161
|
+
* its `onUnregister` (idempotent, non-throwing) and drop its entity modules +
|
|
162
|
+
* retained capability record. The hot-reload pipeline calls this on the OLD
|
|
163
|
+
* version before re-`registerPlugin`-ing the fresh module. No-op for an
|
|
164
|
+
* unknown name.
|
|
165
|
+
*/
|
|
166
|
+
unregisterPlugin(name: string): void;
|
|
167
|
+
/** M33 — retained base-layer plugin records (for capabilities + reload). */
|
|
168
|
+
listPluginRecords(): RegisteredPluginRecord[];
|
|
100
169
|
/** All registered modules, regardless of activation. */
|
|
101
170
|
listAvailable(): BackendModule[];
|
|
102
171
|
/** Lookup including inactive — used for broken-chip categorisation. */
|
|
103
172
|
getAvailable(type: string): BackendModule | null;
|
|
104
173
|
/**
|
|
105
|
-
*
|
|
106
|
-
*
|
|
174
|
+
* M15: writing styles contributed by base-layer (workspace/npm)
|
|
175
|
+
* plugins, collected during `registerPlugin`. Pushed into each project's
|
|
176
|
+
* SkillRegistry as `source: "plugin"` at context build (project-local overlay
|
|
177
|
+
* styles are pushed separately, behind the trust gate).
|
|
178
|
+
*/
|
|
179
|
+
listWritingStyles(): WritingStyleContribution[];
|
|
180
|
+
/**
|
|
181
|
+
* Derive a per-project host. The effective pool is `base ∪ overlay`
|
|
182
|
+
* (base ∪ overlay); the `config.entities` whitelist is applied to that merged
|
|
183
|
+
* pool, not to the base alone. `config.entities === undefined` ⇒ all available
|
|
184
|
+
* active (v1 backward compat). `overlay === undefined` ⇒ effective pool =
|
|
185
|
+
* base (parity with the base-only case). No side effects.
|
|
107
186
|
*/
|
|
108
|
-
consolidate(
|
|
187
|
+
consolidate(config: {
|
|
188
|
+
entities?: string[];
|
|
189
|
+
} | null | undefined, overlay?: ProjectPluginOverlay): ProjectPluginHost;
|
|
109
190
|
}
|
|
110
191
|
/** Plugin self-registration hook — exported by each entities/*\/plugin.ts. */
|
|
111
192
|
export type PluginOnRegister = (registry: PluginRegistry) => void;
|
|
@@ -114,6 +195,21 @@ export interface ProjectPluginHost {
|
|
|
114
195
|
listAvailable(): BackendModule[];
|
|
115
196
|
/** Active modules only (filtered by the consolidated whitelist). */
|
|
116
197
|
listEntities(): BackendModule[];
|
|
198
|
+
/**
|
|
199
|
+
* M33 — Settings sections of ALL loaded + trusted plugins in the
|
|
200
|
+
* effective pool (base ∪ trusted overlay), one per plugin with
|
|
201
|
+
* `contributes.settings`. Deliberately does NOT filter by `config.entities`
|
|
202
|
+
* (contrast with `listEntities()`): a plugin's settings survive deactivation
|
|
203
|
+
* of its entity types — the user needs the panel to re-enable them. This is
|
|
204
|
+
* axis B (pool + trust), not axis A (entity whitelist).
|
|
205
|
+
*/
|
|
206
|
+
listSettings(): PluginSettingsSection[];
|
|
207
|
+
/**
|
|
208
|
+
* M33 — declarative editor slash-commands of ALL loaded + trusted
|
|
209
|
+
* plugins, independent of `config.entities` (same two-axis rationale as
|
|
210
|
+
* `listSettings()`). Routed into the editor via `registerEditorExtension`.
|
|
211
|
+
*/
|
|
212
|
+
listCommands(): PluginCommandContribution[];
|
|
117
213
|
/** Lookup by type — returns null for inactive or unknown. */
|
|
118
214
|
getEntity(type: string): BackendModule | null;
|
|
119
215
|
/** Lookup including inactive — used for broken-chip categorisation. */
|
|
@@ -121,6 +217,12 @@ export interface ProjectPluginHost {
|
|
|
121
217
|
isActive(type: string): boolean;
|
|
122
218
|
/** Activation snapshot — input for GET /_meta/entities. (Rename of `state()`.) */
|
|
123
219
|
partition(): PluginActivationState;
|
|
220
|
+
/**
|
|
221
|
+
* M33: overlay types that shadow a same-named base type. Empty when
|
|
222
|
+
* there is no overlay or no cross-layer collision. Feeds the per-project
|
|
223
|
+
* `/_meta/plugins` shadow report and the M19 consistency check.
|
|
224
|
+
*/
|
|
225
|
+
shadowReport(): ShadowedType[];
|
|
124
226
|
/**
|
|
125
227
|
* Mount every active backend module into the supplied Express app + the
|
|
126
228
|
* host-internal MCP registry. Iterates `listEntities()` and invokes each
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
-- M05/0.1.79 'ask' context_type — older published versions rebuilt chat_thread
|
|
2
|
+
-- in migration 029 WITH `CHECK (context_type IN ('chat','brief','patch'))`.
|
|
3
|
+
-- SQLite cannot ALTER/DROP a CHECK and 029 is already recorded as applied, so
|
|
4
|
+
-- DBs created by those versions still reject 'ask'. Rebuild the table once more
|
|
5
|
+
-- with NO context_type CHECK (validation lives in CONTEXT_TYPE_REGISTRY,
|
|
6
|
+
-- chat-context.ts). Idempotent: a rebuild is harmless for DBs already lacking
|
|
7
|
+
-- the constraint. FK-safe — migrate.ts disables foreign_keys around the batch,
|
|
8
|
+
-- so the DROP does not cascade-delete chat_message / chat_subagent_task /
|
|
9
|
+
-- chat_queued_message rows, and the self-FK parent_thread_id re-resolves once
|
|
10
|
+
-- the new table is renamed in.
|
|
11
|
+
-- Full column set as of migrations 005/009/010/011/013/021/024/022/029/033/041.
|
|
12
|
+
|
|
13
|
+
CREATE TABLE chat_thread_new (
|
|
14
|
+
id TEXT PRIMARY KEY NOT NULL,
|
|
15
|
+
title TEXT,
|
|
16
|
+
last_session_id TEXT,
|
|
17
|
+
created_at TEXT NOT NULL DEFAULT (datetime('now')),
|
|
18
|
+
updated_at TEXT NOT NULL DEFAULT (datetime('now')),
|
|
19
|
+
current_todo_items TEXT,
|
|
20
|
+
plan_mode INTEGER NOT NULL DEFAULT 0,
|
|
21
|
+
initial_system_prompt TEXT,
|
|
22
|
+
last_usage_json TEXT,
|
|
23
|
+
plan_id INTEGER REFERENCES plan(id) ON DELETE SET NULL,
|
|
24
|
+
last_seen_plan_version INTEGER,
|
|
25
|
+
last_context_size INTEGER,
|
|
26
|
+
context_type TEXT NOT NULL DEFAULT 'chat',
|
|
27
|
+
brief_path TEXT,
|
|
28
|
+
patch_path TEXT,
|
|
29
|
+
initial_architecture_config_json TEXT,
|
|
30
|
+
parent_thread_id TEXT REFERENCES chat_thread(id) ON DELETE CASCADE,
|
|
31
|
+
spawned_by_tool_use_id TEXT
|
|
32
|
+
);
|
|
33
|
+
|
|
34
|
+
INSERT INTO chat_thread_new (
|
|
35
|
+
id, title, last_session_id, created_at, updated_at, current_todo_items,
|
|
36
|
+
plan_mode, initial_system_prompt, last_usage_json, plan_id,
|
|
37
|
+
last_seen_plan_version, last_context_size, context_type, brief_path,
|
|
38
|
+
patch_path, initial_architecture_config_json, parent_thread_id,
|
|
39
|
+
spawned_by_tool_use_id
|
|
40
|
+
)
|
|
41
|
+
SELECT
|
|
42
|
+
id, title, last_session_id, created_at, updated_at, current_todo_items,
|
|
43
|
+
plan_mode, initial_system_prompt, last_usage_json, plan_id,
|
|
44
|
+
last_seen_plan_version, last_context_size, context_type, brief_path,
|
|
45
|
+
patch_path, initial_architecture_config_json, parent_thread_id,
|
|
46
|
+
spawned_by_tool_use_id
|
|
47
|
+
FROM chat_thread;
|
|
48
|
+
|
|
49
|
+
DROP TABLE chat_thread;
|
|
50
|
+
|
|
51
|
+
ALTER TABLE chat_thread_new RENAME TO chat_thread;
|
|
52
|
+
|
|
53
|
+
CREATE INDEX idx_chat_thread_plan ON chat_thread(plan_id);
|
|
54
|
+
|
|
55
|
+
CREATE INDEX IF NOT EXISTS idx_chat_thread_brief_path
|
|
56
|
+
ON chat_thread(brief_path) WHERE brief_path IS NOT NULL;
|
|
57
|
+
|
|
58
|
+
CREATE INDEX IF NOT EXISTS idx_chat_thread_patch_path
|
|
59
|
+
ON chat_thread(patch_path) WHERE patch_path IS NOT NULL;
|
|
60
|
+
|
|
61
|
+
CREATE INDEX idx_chat_thread_parent_thread_id ON chat_thread(parent_thread_id);
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
export declare const BRIEF_IMPLEMENTER_FRONTMATTER = "---\nname: c4s-brief-implementer\ndescription: Implement features described in claude4spec briefs (markdown files in .claude4spec/briefs/). Briefs are self-contained \u2014 they include all context needed for implementation (entity snapshots, section diffs, narrative). After implementation, if you discover drift between the brief and reality (missing details, incorrect assumptions, edge cases not covered), generate a patch file in .claude4spec/patches/ as feedback for the specification author. Use when implementing changes in a code repository that has a .claude4spec/briefs/ directory.\n---\n";
|
|
2
|
-
export declare const BRIEF_IMPLEMENTER_BODY = "# c4s-brief-implementer\n\nThis skill describes how to implement a release brief in **your code repository**\n(not the spec repo). A brief is a self-contained markdown file under\n`.claude4spec/briefs/` that captures everything you need to ship the change:\nentity snapshots, section diffs, narrative, acceptance criteria.\n\n**This skill does NOT assume the `c4s` CLI is installed.** Briefs are designed\nto be self-contained \u2014 you do not need to read the main specification or query\nthe entity database. If the brief references something you cannot find in its\nbody, treat that as drift and file a patch (step 4 below).\n\n## Workflow\n\n### 1. Discover\n\n```sh\nls .claude4spec/briefs/ # list available briefs\ncat .claude4spec/briefs/<slug>.md\n```\n\nIf `.claude4spec/` is not in your current directory, walk up the directory tree\nuntil you find it (similar to how git finds `.git/`).\n\n### 2. Read the brief as self-contained input\n\nEvery brief has YAML frontmatter:\n\n```yaml\n---\ntype: brief\nfrom_release: v0.1.16\nto_release: v0.1.17\ngenerator_version: brief-author@0.1\nimplemented: false\n---\n```\n\nThe body contains everything you need \u2014 entity snapshots, section diffs, the\nnarrative of what changes, and acceptance criteria. **Do not read the main\nspecification.**\n\nIf the brief is unclear \u2014 a missing detail, an ambiguous wording, a decision\nyou'd otherwise have to guess \u2014 you have two paths:\n\n**Synchronous (preferred when available).** Ask the specification agent in the\nsame terminal and continue once you have an answer:\n\n```bash\nc4s ask \"Brief nie precyzuje X \u2014 czy chodzi o A czy B?\" --ct brief --brief <brief-slug>.md\n```\n\nContinue the same thread with `c4s ask \"...\" --thread <threadId>` (the\n`threadId` is printed with the answer). This path requires `c4s` installed\n*and* a running `npx @inharness-ai/claude4spec` server. When either is unavailable, skip it.\n\nIf `c4s ask` returns `PROJECT_NOT_FOUND` despite a running server, your cwd is\nprobably reached through a **symlink** (common for `.claude/skills/<name>`\nprojects): `c4s` resolves `process.cwd()` to the real path, which is NOT the one\nregistered in `~/.claude4spec/workspaces.json`. Pass the registered (symlink) path\nexplicitly \u2014 `--project` is run through `path.resolve`, which does NOT canonicalize\nsymlinks, so it matches the registry:\n\n```bash\nc4s ask \"Brief nie precyzuje X \u2014 ...\" --ct brief --brief <brief-slug>.md --project /abs/path/to/registered/skill-dir\n```\n\n**Asynchronous (always available).** If you cannot ask synchronously, proceed\nwith your best judgement and file a patch afterwards (step 4) so the\nspec-author can fold the clarification into the next brief.\n\n### 3. Implement\n\nStandard code flow in your target repository: read existing code, plan, edit,\ntest. Stay focused on what the brief specifies.\n\n### 4. Feedback loop (patches)\n\nWhen you discover that the brief diverges from reality \u2014 a missing detail, an\nincorrect assumption, an edge case not covered, or anything else the\nspec-author should know \u2014 write a patch file:\n\n```sh\nmkdir -p .claude4spec/patches\n```\n\nCreate `.claude4spec/patches/<brief-slug>-<short-desc>.md` with this format:\n\n```markdown\n---\ntype: patch\nbrief: v0-1-16-to-v0-1-17.md # path relative to briefs/\npatch_kind: drift # drift | missing | incorrect | clarification\ncreated_at: 2026-05-11T17:32:00Z\ncreated_by: claude-code # or \"cursor\", \"aider\", ...\n---\n\n# Patch \u2014 short title\n\n## What I found\n\n\u2026description of the drift / missing detail / incorrect assumption\u2026\n\n## Suggestion\n\n\u2026what the spec-author should consider in a follow-up brief or entity edits\u2026\n```\n\nPatch-kind values:\n\n- `drift` \u2014 the brief described behavior X, but the codebase already does Y.\n- `missing` \u2014 the brief is silent on a detail you had to decide yourself.\n- `incorrect` \u2014 the brief is factually wrong about existing code.\n- `clarification` \u2014 the brief is ambiguous; you guessed but it should be made\n explicit for next time.\n\nThe `.claude4spec/patches/` directory is created **lazily** \u2014 only when you\nfile your first patch. The claude4spec server does NOT create it.\n\n### 5. Mark brief as implemented\n\nWhen the implementation is genuinely finished \u2014 code committed, tests green,\nmerged to main / accepted by the user \u2014 flip the brief's frontmatter to\n`implemented: true`:\n\n```bash\n# Option A \u2014 Edit tool: change the line `implemented: false` \u2192 `implemented: true`.\n# Option B \u2014 yq (idempotent; adds the field to legacy briefs that never had it):\nyq -i '.implemented = true' .claude4spec/briefs/<brief-slug>.md\n```\n\n`implemented: true` is a **declaration**, not a computed fact derived from git.\nA revert on main does NOT roll the flag back. Set it ONLY when implementation\nis realistically done \u2014 never proactively or \"just in case\".\n\n### 6. Hand-off\n\nThe spec-author reads patches manually (`ls .claude4spec/patches/`, `cat`)\nand folds them into the next brief or entity edits. There is no UI listing in\nthis release \u2014 patches are raw markdown.\n\n## Notes\n\nThis
|
|
2
|
+
export declare const BRIEF_IMPLEMENTER_BODY = "# c4s-brief-implementer\n\nThis skill describes how to implement a release brief in **your code repository**\n(not the spec repo). A brief is a self-contained markdown file under\n`.claude4spec/briefs/` that captures everything you need to ship the change:\nentity snapshots, section diffs, narrative, acceptance criteria.\n\n**This skill does NOT assume the `c4s` CLI is installed.** Briefs are designed\nto be self-contained \u2014 you do not need to read the main specification or query\nthe entity database. If the brief references something you cannot find in its\nbody, treat that as drift and file a patch (step 4 below).\n\n## Workflow\n\n### 1. Discover\n\n```sh\nls .claude4spec/briefs/ # list available briefs\ncat .claude4spec/briefs/<slug>.md\n```\n\nIf `.claude4spec/` is not in your current directory, walk up the directory tree\nuntil you find it (similar to how git finds `.git/`).\n\n### 2. Read the brief as self-contained input\n\nEvery brief has YAML frontmatter:\n\n```yaml\n---\ntype: brief\nfrom_release: v0.1.16\nto_release: v0.1.17\ngenerator_version: brief-author@0.1\nimplemented: false\n---\n```\n\nThe body contains everything you need \u2014 entity snapshots, section diffs, the\nnarrative of what changes, and acceptance criteria. **Do not read the main\nspecification.**\n\nIf the brief is unclear \u2014 a missing detail, an ambiguous wording, a decision\nyou'd otherwise have to guess \u2014 you have two paths:\n\n**Synchronous (preferred when available).** Ask the specification agent in the\nsame terminal and continue once you have an answer:\n\n```bash\nc4s ask \"Brief nie precyzuje X \u2014 czy chodzi o A czy B?\" --ct brief --brief <brief-slug>.md\n```\n\nContinue the same thread with `c4s ask \"...\" --thread <threadId>` (the\n`threadId` is printed with the answer). This path requires `c4s` installed\n*and* a running `npx @inharness-ai/claude4spec` server. When either is unavailable, skip it.\n\nIf `c4s ask` returns `PROJECT_NOT_FOUND` despite a running server, your cwd is\nprobably reached through a **symlink** (common for `.claude/skills/<name>`\nprojects): `c4s` resolves `process.cwd()` to the real path, which is NOT the one\nregistered in `~/.claude4spec/workspaces.json`. Pass the registered (symlink) path\nexplicitly \u2014 `--project` is run through `path.resolve`, which does NOT canonicalize\nsymlinks, so it matches the registry:\n\n```bash\nc4s ask \"Brief nie precyzuje X \u2014 ...\" --ct brief --brief <brief-slug>.md --project /abs/path/to/registered/skill-dir\n```\n\n**Asynchronous (always available).** If you cannot ask synchronously, proceed\nwith your best judgement and file a patch afterwards (step 4) so the\nspec-author can fold the clarification into the next brief.\n\n### 3. Implement\n\nStandard code flow in your target repository: read existing code, plan, edit,\ntest. Stay focused on what the brief specifies.\n\n### 4. Feedback loop (patches)\n\nWhen you discover that the brief diverges from reality \u2014 a missing detail, an\nincorrect assumption, an edge case not covered, or anything else the\nspec-author should know \u2014 write a patch file:\n\n```sh\nmkdir -p .claude4spec/patches\n```\n\nCreate `.claude4spec/patches/<brief-slug>-<short-desc>.md` with this format:\n\n```markdown\n---\ntype: patch\nbrief: v0-1-16-to-v0-1-17.md # path relative to briefs/\npatch_kind: drift # drift | missing | incorrect | clarification\ncreated_at: 2026-05-11T17:32:00Z\ncreated_by: claude-code # or \"cursor\", \"aider\", ...\n---\n\n# Patch \u2014 short title\n\n## What I found\n\n\u2026description of the drift / missing detail / incorrect assumption\u2026\n\n## Suggestion\n\n\u2026what the spec-author should consider in a follow-up brief or entity edits\u2026\n```\n\nPatch-kind values:\n\n- `drift` \u2014 the brief described behavior X, but the codebase already does Y.\n- `missing` \u2014 the brief is silent on a detail you had to decide yourself.\n- `incorrect` \u2014 the brief is factually wrong about existing code.\n- `clarification` \u2014 the brief is ambiguous; you guessed but it should be made\n explicit for next time.\n\nThe `.claude4spec/patches/` directory is created **lazily** \u2014 only when you\nfile your first patch. The claude4spec server does NOT create it.\n\n### 5. Mark brief as implemented\n\nWhen the implementation is genuinely finished \u2014 code committed, tests green,\nmerged to main / accepted by the user \u2014 flip the brief's frontmatter to\n`implemented: true`:\n\n```bash\n# Option A \u2014 Edit tool: change the line `implemented: false` \u2192 `implemented: true`.\n# Option B \u2014 yq (idempotent; adds the field to legacy briefs that never had it):\nyq -i '.implemented = true' .claude4spec/briefs/<brief-slug>.md\n```\n\n`implemented: true` is a **declaration**, not a computed fact derived from git.\nA revert on main does NOT roll the flag back. Set it ONLY when implementation\nis realistically done \u2014 never proactively or \"just in case\".\n\n### 6. Hand-off\n\nThe spec-author reads patches manually (`ls .claude4spec/patches/`, `cat`)\nand folds them into the next brief or entity edits. There is no UI listing in\nthis release \u2014 patches are raw markdown.\n\n## Notes\n\nThis is a **base skill** generated by claude4spec. It already covers what you\nneed to read briefs and ask the c4s agent questions. Feel free to **adapt it to\nyour own workflow** (e.g. add a git/PR flow) or use it as-is \u2014 this base copy\nunder `.claude4spec/skills/` is refreshed on server start, so copy it into your\nproject's `.claude/skills/` if you want edits that stick.\n";
|
|
@@ -146,7 +146,10 @@ this release — patches are raw markdown.
|
|
|
146
146
|
|
|
147
147
|
## Notes
|
|
148
148
|
|
|
149
|
-
This
|
|
150
|
-
|
|
149
|
+
This is a **base skill** generated by claude4spec. It already covers what you
|
|
150
|
+
need to read briefs and ask the c4s agent questions. Feel free to **adapt it to
|
|
151
|
+
your own workflow** (e.g. add a git/PR flow) or use it as-is — this base copy
|
|
152
|
+
under \`.claude4spec/skills/\` is refreshed on server start, so copy it into your
|
|
153
|
+
project's \`.claude/skills/\` if you want edits that stick.
|
|
151
154
|
`;
|
|
152
155
|
//# sourceMappingURL=brief-implementer-template.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"brief-implementer-template.js","sourceRoot":"","sources":["../../../src/server/external-skills/brief-implementer-template.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,6BAA6B,GAAG;;;;CAI5C,CAAC;AAEF,MAAM,CAAC,MAAM,sBAAsB,GAAG
|
|
1
|
+
{"version":3,"file":"brief-implementer-template.js","sourceRoot":"","sources":["../../../src/server/external-skills/brief-implementer-template.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,6BAA6B,GAAG;;;;CAI5C,CAAC;AAEF,MAAM,CAAC,MAAM,sBAAsB,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAoJrC,CAAC"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
export declare const SPEC_READER_FRONTMATTER = "---\nname: c4s-spec-reader\ndescription: Read claude4spec specification entities (endpoints, DTOs, tables, AC, UI views) referenced from markdown pages through XML tags like <inline_mention/>, <single_element/>, <tagged_list/>. Use when working in a repository whose pages/ contain these tags or whose .claude4spec/ directory exists. Resolves entity slugs to full data via c4s CLI or c4s-reader MCP server.\n---\n";
|
|
2
|
-
export declare const SPEC_READER_BODY = "# c4s-spec-reader\n\nThis repository contains a claude4spec specification. Pages (`*.md`) reference\nentities stored in `.claude4spec/db.sqlite` through XML tags. This skill teaches\nyou how to resolve them.\n\nAll commands below walk up from the agent's cwd to the nearest `.claude4spec/` \u2014\nno absolute paths are required.\n\n## Resolving a tag\n\nInstall `claude4spec` (Node 20+) and use the `c4s` CLI. Subcommand names match\nXML tag names 1:1.\n\n| XML tag | CLI equivalent |\n|---------|----------------|\n| `<inline_mention type=\"endpoint\" slug=\"X\"/>` | `c4s inline_mention --type endpoint --slug X` |\n| `<single_element type=\"dto\" slug=\"X\"/>` | `c4s single_element --type dto --slug X` |\n| `<element_list type=\"endpoint\" slugs=\"a,b,c\"/>` | `c4s element_list --type endpoint --slugs a,b,c` |\n| `<tagged_list type=\"dto\" tags=\"auth\" filter=\"and\"/>` | `c4s tagged_list --type dto --tags auth --filter and` |\n| `<tagged_list_mixed tags=\"public\"/>` | `c4s tagged_list_mixed --tags public` |\n\n## Expanding a whole page\n\n```sh\nc4s resolve some-page.md # writes markdown with tags expanded inline\nc4s resolve some-page.md --format json # writes { content, resolved: [...] }\n```\n\n## Discovery\n\n- `c4s catalog` \u2014 active entity types with counts + version + description + roleNoun + mcpToolsLine per type (smoke test).\n- `c4s describe --type <t> [--view <v>]` \u2014 JSON Schema per view for one type (on-demand).\n- `c4s list-tags` \u2014 all tags with per-type counts.\n- `c4s list-slugs --type endpoint` \u2014 all slugs for a given type.\n\nAll output is JSON (pretty) by default. Use `--compact` for pipelines and\n`--format text` for terminal-friendly output. Errors go to stderr as JSON with\nan exit code > 0.\n\nThe database is opened **read-only** \u2014 `c4s` never mutates the project.\n\n## Asking the spec agent\n\nWhen a question goes beyond resolving entities or pages, `c4s ask` runs a\nsynchronous agent turn against the specification:\n\n```sh\nc4s ask \"<question>\" --ct chat\n```\n\nUnlike the read-only commands above, `c4s ask` requires a running\n`npx @inharness-ai/claude4spec` server (it delegates the turn to the server's agent).\n\n### `PROJECT_NOT_FOUND` when the project dir is a symlink\n\nIf `c4s ask` (or any `c4s` command) returns `PROJECT_NOT_FOUND` even though a\nserver is running, your cwd is most likely reached through a **symlink** (common\nfor `.claude/skills/<name>` that points elsewhere). `c4s` resolves `process.cwd()`\nthrough the symlink to the real path, which is NOT the path registered in\n`~/.claude4spec/workspaces.json`. Pass the registered (symlink) path explicitly \u2014\n`--project` is run through `path.resolve`, which does NOT canonicalize symlinks, so\nit matches the registry exactly:\n\n```sh\nc4s ask \"<question>\" --ct chat --project /abs/path/to/registered/project-dir\n```\n";
|
|
2
|
+
export declare const SPEC_READER_BODY = "# c4s-spec-reader\n\nThis repository contains a claude4spec specification. Pages (`*.md`) reference\nentities stored in `.claude4spec/db.sqlite` through XML tags. This skill teaches\nyou how to resolve them.\n\nAll commands below walk up from the agent's cwd to the nearest `.claude4spec/` \u2014\nno absolute paths are required.\n\n## Resolving a tag\n\nInstall `claude4spec` (Node 20+) and use the `c4s` CLI. Subcommand names match\nXML tag names 1:1.\n\n| XML tag | CLI equivalent |\n|---------|----------------|\n| `<inline_mention type=\"endpoint\" slug=\"X\"/>` | `c4s inline_mention --type endpoint --slug X` |\n| `<single_element type=\"dto\" slug=\"X\"/>` | `c4s single_element --type dto --slug X` |\n| `<element_list type=\"endpoint\" slugs=\"a,b,c\"/>` | `c4s element_list --type endpoint --slugs a,b,c` |\n| `<tagged_list type=\"dto\" tags=\"auth\" filter=\"and\"/>` | `c4s tagged_list --type dto --tags auth --filter and` |\n| `<tagged_list_mixed tags=\"public\"/>` | `c4s tagged_list_mixed --tags public` |\n\n## Expanding a whole page\n\n```sh\nc4s resolve some-page.md # writes markdown with tags expanded inline\nc4s resolve some-page.md --format json # writes { content, resolved: [...] }\n```\n\n## Discovery\n\n- `c4s catalog` \u2014 active entity types with counts + version + description + roleNoun + mcpToolsLine per type (smoke test).\n- `c4s describe --type <t> [--view <v>]` \u2014 JSON Schema per view for one type (on-demand).\n- `c4s list-tags` \u2014 all tags with per-type counts.\n- `c4s list-slugs --type endpoint` \u2014 all slugs for a given type.\n\nAll output is JSON (pretty) by default. Use `--compact` for pipelines and\n`--format text` for terminal-friendly output. Errors go to stderr as JSON with\nan exit code > 0.\n\nThe database is opened **read-only** \u2014 `c4s` never mutates the project.\n\n## Asking the spec agent\n\nWhen a question goes beyond resolving entities or pages, `c4s ask` runs a\nsynchronous agent turn against the specification:\n\n```sh\nc4s ask \"<question>\" --ct chat\n```\n\nUnlike the read-only commands above, `c4s ask` requires a running\n`npx @inharness-ai/claude4spec` server (it delegates the turn to the server's agent).\n\n### `PROJECT_NOT_FOUND` when the project dir is a symlink\n\nIf `c4s ask` (or any `c4s` command) returns `PROJECT_NOT_FOUND` even though a\nserver is running, your cwd is most likely reached through a **symlink** (common\nfor `.claude/skills/<name>` that points elsewhere). `c4s` resolves `process.cwd()`\nthrough the symlink to the real path, which is NOT the path registered in\n`~/.claude4spec/workspaces.json`. Pass the registered (symlink) path explicitly \u2014\n`--project` is run through `path.resolve`, which does NOT canonicalize symlinks, so\nit matches the registry exactly:\n\n```sh\nc4s ask \"<question>\" --ct chat --project /abs/path/to/registered/project-dir\n```\n\n### `SERVER_NOT_RECOGNIZED` / `PROJECT_BUILD_FAILED` \u2014 the project failed to build\n\nIf `c4s ask` reports the server is \"not a claude4spec server\", or\n`GET /api/projects/<id>/config` returns `PROJECT_BUILD_FAILED`, the server IS\nrunning but **that project failed to build**. A common cause is the configured\n`writingStyle` skill failing to load: a skill under `.claude/skills/` whose\nfrontmatter `version` exceeds the supported version is skipped at scan time, so\nthe style is \"not a selectable writing-style skill\".\n\n`c4s ask` surfaces the real `PROJECT_BUILD_FAILED` message, which names the cause\n(e.g. `writingStyle \"X\" was found on disk but skipped: version 2 > supported 1`).\nFix the skill's frontmatter (`version` is a format-compat gate \u2014 keep it `1`, don't\nuse it as a content counter) and restart the server.\n";
|
|
@@ -70,5 +70,19 @@ it matches the registry exactly:
|
|
|
70
70
|
\`\`\`sh
|
|
71
71
|
c4s ask "<question>" --ct chat --project /abs/path/to/registered/project-dir
|
|
72
72
|
\`\`\`
|
|
73
|
+
|
|
74
|
+
### \`SERVER_NOT_RECOGNIZED\` / \`PROJECT_BUILD_FAILED\` — the project failed to build
|
|
75
|
+
|
|
76
|
+
If \`c4s ask\` reports the server is "not a claude4spec server", or
|
|
77
|
+
\`GET /api/projects/<id>/config\` returns \`PROJECT_BUILD_FAILED\`, the server IS
|
|
78
|
+
running but **that project failed to build**. A common cause is the configured
|
|
79
|
+
\`writingStyle\` skill failing to load: a skill under \`.claude/skills/\` whose
|
|
80
|
+
frontmatter \`version\` exceeds the supported version is skipped at scan time, so
|
|
81
|
+
the style is "not a selectable writing-style skill".
|
|
82
|
+
|
|
83
|
+
\`c4s ask\` surfaces the real \`PROJECT_BUILD_FAILED\` message, which names the cause
|
|
84
|
+
(e.g. \`writingStyle "X" was found on disk but skipped: version 2 > supported 1\`).
|
|
85
|
+
Fix the skill's frontmatter (\`version\` is a format-compat gate — keep it \`1\`, don't
|
|
86
|
+
use it as a content counter) and restart the server.
|
|
73
87
|
`;
|
|
74
88
|
//# sourceMappingURL=spec-reader-template.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"spec-reader-template.js","sourceRoot":"","sources":["../../../src/server/external-skills/spec-reader-template.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,uBAAuB,GAAG;;;;CAItC,CAAC;AAEF,MAAM,CAAC,MAAM,gBAAgB,GAAG
|
|
1
|
+
{"version":3,"file":"spec-reader-template.js","sourceRoot":"","sources":["../../../src/server/external-skills/spec-reader-template.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,uBAAuB,GAAG;;;;CAItC,CAAC;AAEF,MAAM,CAAC,MAAM,gBAAgB,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAiF/B,CAAC"}
|
package/dist/server/index.js
CHANGED
|
@@ -14,6 +14,12 @@ import { projectDispatchMiddleware } from './workspace/middleware.js';
|
|
|
14
14
|
import { workspaceRouter } from './workspace/routes.js';
|
|
15
15
|
import { PluginRegistryImpl } from './core/plugin-host/registry.js';
|
|
16
16
|
import { registerAllPlugins } from './serialization/registerAll.js';
|
|
17
|
+
import { loadWorkspacePlugins, reloadPlugin } from './core/plugin-host/loader.js';
|
|
18
|
+
import { PluginWatcher } from './core/plugin-host/plugin-watcher.js';
|
|
19
|
+
import { createRequire } from 'node:module';
|
|
20
|
+
import { resolvePluginPackages } from './workspace/registry.js';
|
|
21
|
+
import { pluginsRouter } from './routes/plugins.js';
|
|
22
|
+
import { buildImportMap } from './core/plugin-host/runtime-shims.js';
|
|
17
23
|
const __dirname = path.dirname(fileURLToPath(import.meta.url));
|
|
18
24
|
const DEFAULT_PORT = 3000;
|
|
19
25
|
// M01: deterministyczny port. Przy zajetym porcie serwer NIE wskakuje juz na
|
|
@@ -54,6 +60,15 @@ function injectProjectGlobal(html, cwd, name) {
|
|
|
54
60
|
const payload = JSON.stringify({ id, name }).replace(/</g, '\\u003c');
|
|
55
61
|
return html.replace('<head>', `<head><script>window.__C4S_PROJECT__=${payload};</script>`);
|
|
56
62
|
}
|
|
63
|
+
// M33 "Option B": inject the plugin import map into <head> statically (before any
|
|
64
|
+
// module script resolves), so a runtime plugin's bare imports (`react`, …) resolve
|
|
65
|
+
// to the host's singleton shims. Applied to every SPA page (welcome + project).
|
|
66
|
+
const IMPORT_MAP_SCRIPT = `<script type="importmap">${JSON.stringify({
|
|
67
|
+
imports: buildImportMap(),
|
|
68
|
+
}).replace(/</g, '\\u003c')}</script>`;
|
|
69
|
+
function injectImportMap(html) {
|
|
70
|
+
return html.replace('<head>', `<head>${IMPORT_MAP_SCRIPT}`);
|
|
71
|
+
}
|
|
57
72
|
const PROJECT_ROUTE_RE = /^\/p\/([0-9a-f]{12})(\/|$)/;
|
|
58
73
|
/**
|
|
59
74
|
* M31 route scheme `/p/<project-id>/…` (assets stay at root — no Vite
|
|
@@ -102,6 +117,7 @@ async function mountDevVite(app, deps) {
|
|
|
102
117
|
const htmlPath = path.join(repoRoot, 'src/client/index.html');
|
|
103
118
|
let html = await fs.promises.readFile(htmlPath, 'utf-8');
|
|
104
119
|
html = await vite.transformIndexHtml(req.originalUrl, html);
|
|
120
|
+
html = injectImportMap(html);
|
|
105
121
|
// `/welcome` runs the SPA project-less: no `window.__C4S_PROJECT__`, so the
|
|
106
122
|
// client computes PROJECT_ID='' → API_BASE='/api' → router basepath '/'.
|
|
107
123
|
if (resolution.kind === 'welcome') {
|
|
@@ -132,7 +148,7 @@ function mountProd(app, deps) {
|
|
|
132
148
|
const resolution = resolveSpaRoute(deps.registry, deps.workspace, urlPath);
|
|
133
149
|
if (resolution.kind === 'redirect')
|
|
134
150
|
return res.redirect(302, resolution.to);
|
|
135
|
-
const raw = fs.readFileSync(path.join(clientDist, 'index.html'), 'utf-8');
|
|
151
|
+
const raw = injectImportMap(fs.readFileSync(path.join(clientDist, 'index.html'), 'utf-8'));
|
|
136
152
|
// `/welcome` runs the SPA project-less (no `window.__C4S_PROJECT__`).
|
|
137
153
|
if (resolution.kind === 'welcome') {
|
|
138
154
|
return res.status(200).set({ 'Content-Type': 'text/html' }).end(raw);
|
|
@@ -194,6 +210,10 @@ export async function startServer(opts) {
|
|
|
194
210
|
// M31: process-immutable plugin catalog, populated exactly once.
|
|
195
211
|
const pluginRegistry = new PluginRegistryImpl();
|
|
196
212
|
registerAllPlugins(pluginRegistry);
|
|
213
|
+
// M33: load workspace-declared npm plugin packages onto the same catalog,
|
|
214
|
+
// before any ProjectContext consolidates against it. Per-package failures are
|
|
215
|
+
// isolated (skipped/failed records) — one bad plugin never crashes bootstrap.
|
|
216
|
+
const pluginLoad = await loadWorkspacePlugins(pluginRegistry, resolvePluginPackages(workspace));
|
|
197
217
|
const httpServer = createHttpServer(app);
|
|
198
218
|
const gateway = new WsGateway(httpServer);
|
|
199
219
|
// M27 clone runs only on the FIRST build of the CLI-started project —
|
|
@@ -217,6 +237,7 @@ export async function startServer(opts) {
|
|
|
217
237
|
return buildProjectContext({
|
|
218
238
|
registry,
|
|
219
239
|
pluginRegistry,
|
|
240
|
+
pluginRecords: pluginLoad.records,
|
|
220
241
|
workspace,
|
|
221
242
|
cwd: project.cwd,
|
|
222
243
|
gateway,
|
|
@@ -228,12 +249,71 @@ export async function startServer(opts) {
|
|
|
228
249
|
onContextConfigChanged: () => cache.invalidate(project.id),
|
|
229
250
|
});
|
|
230
251
|
});
|
|
252
|
+
// M33 phase 3: process-global base (workspace/npm) plugin hot-reload watcher.
|
|
253
|
+
// The base catalog is shared across projects, so a reload mutates the shared
|
|
254
|
+
// `pluginRegistry` (unregister old → register new) and invalidates ALL cached
|
|
255
|
+
// contexts; each live project room is told to remount. Resolves each package
|
|
256
|
+
// to its install dir; an unresolvable package is simply not watched.
|
|
257
|
+
const baseDirByPkg = new Map();
|
|
258
|
+
for (const pkg of resolvePluginPackages(workspace)) {
|
|
259
|
+
try {
|
|
260
|
+
baseDirByPkg.set(pkg, path.dirname(createRequire(import.meta.url).resolve(pkg)));
|
|
261
|
+
}
|
|
262
|
+
catch {
|
|
263
|
+
/* unresolvable (not installed) — nothing to watch */
|
|
264
|
+
}
|
|
265
|
+
}
|
|
266
|
+
// Serialize reload runs so overlapping watcher flushes never interleave
|
|
267
|
+
// unregister/register on the shared registry.
|
|
268
|
+
let baseReloadChain = Promise.resolve();
|
|
269
|
+
const basePluginWatcher = new PluginWatcher([...baseDirByPkg.values()], (changedPaths) => {
|
|
270
|
+
const affected = [...baseDirByPkg.entries()]
|
|
271
|
+
.filter(([, dir]) => changedPaths.some((p) => p === dir || p.startsWith(dir + path.sep)))
|
|
272
|
+
.map(([pkg]) => pkg);
|
|
273
|
+
if (affected.length === 0)
|
|
274
|
+
return;
|
|
275
|
+
baseReloadChain = baseReloadChain
|
|
276
|
+
.then(async () => {
|
|
277
|
+
const reloaded = [];
|
|
278
|
+
for (const pkg of affected) {
|
|
279
|
+
const rec = await reloadPlugin(pluginRegistry, pkg);
|
|
280
|
+
reloaded.push({ name: rec.manifestName ?? pkg, version: rec.manifestVersion ?? '' });
|
|
281
|
+
}
|
|
282
|
+
// Snapshot the rooms BEFORE invalidating: invalidateAll() empties the
|
|
283
|
+
// cache, after which liveProjectIds() would return [] and no client
|
|
284
|
+
// would ever be told to remount. Then invalidate once (not per-package).
|
|
285
|
+
const rooms = cache.liveProjectIds();
|
|
286
|
+
cache.invalidateAll();
|
|
287
|
+
for (const id of rooms) {
|
|
288
|
+
for (const r of reloaded) {
|
|
289
|
+
gateway.broadcast(id, { kind: 'plugin:reloaded', name: r.name, version: r.version, tier: 'base' });
|
|
290
|
+
}
|
|
291
|
+
}
|
|
292
|
+
})
|
|
293
|
+
.catch((err) => console.warn('[plugin-loader] base reload failed:', err));
|
|
294
|
+
});
|
|
295
|
+
basePluginWatcher.start();
|
|
231
296
|
// Per-project activation — POST /api/workspace/projects runs the SAME full
|
|
232
297
|
// bootstrap as a CLI start (M01/M12/M22 hooks + registration + db migration).
|
|
233
298
|
const activateProject = async (projectCwd) => {
|
|
234
299
|
return bootstrapProject(registry, workspace, projectCwd).project;
|
|
235
300
|
};
|
|
236
301
|
app.use('/api', workspaceRouter({ registry, workspace, cache, mode, activateProject }));
|
|
302
|
+
// M33: process-level plugin endpoints (frontend manifest, runtime shims,
|
|
303
|
+
// loader diagnostics) — before the project dispatch so they stay prefix-free.
|
|
304
|
+
// Phase 2: project-local frontend serving binds to the process's primary
|
|
305
|
+
// project (the `--cwd`); `isTrusted` is read live so a trust flip applies
|
|
306
|
+
// without a restart. Workspace-only starts register nothing ⇒ serving disabled.
|
|
307
|
+
app.use('/api', pluginsRouter({
|
|
308
|
+
pluginRegistry,
|
|
309
|
+
pluginRecords: pluginLoad.records,
|
|
310
|
+
frontendServing: initialProject
|
|
311
|
+
? { cwd, isTrusted: () => registry.getProjectTrust(workspace, initialProject.id) === true }
|
|
312
|
+
: undefined,
|
|
313
|
+
// M33 phase 3: workspace/npm plugin frontends are served ungated for every
|
|
314
|
+
// project — the same resolved package list `loadWorkspacePlugins` consumed.
|
|
315
|
+
workspacePackages: resolvePluginPackages(workspace),
|
|
316
|
+
}));
|
|
237
317
|
app.use('/api/projects/:id', projectDispatchMiddleware(registry, workspace, cache));
|
|
238
318
|
// Eager warm of the CLI-started project: clone executes before listen and a
|
|
239
319
|
// broken initial config still fails the boot fast (parity with pre-M31). A
|
|
@@ -251,6 +331,7 @@ export async function startServer(opts) {
|
|
|
251
331
|
port,
|
|
252
332
|
writingStyle: initialCtx?.writingStyle ?? null,
|
|
253
333
|
shutdown: async () => {
|
|
334
|
+
await basePluginWatcher.close();
|
|
254
335
|
await cache.disposeAll();
|
|
255
336
|
await gateway.close();
|
|
256
337
|
await closeAssets();
|
package/dist/server/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/server/index.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/server/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { type McpServerInstance } from '@inharness-ai/agent-adapters';
|
|
2
2
|
/**
|
|
3
|
-
* `c4s-tools` — cross-cutting in-process MCP server expozujacy
|
|
3
|
+
* `c4s-tools` — cross-cutting in-process MCP server expozujacy peer-consult
|
|
4
4
|
* jako narzedzie MCP. Jeden tool `ask`, mountowany per request (jak `plan-tools`).
|
|
5
5
|
*
|
|
6
6
|
* Motywacja: w `plan_mode=true` agent ma `disallowedTools = MUTATING_BUILTINS`
|
|
@@ -11,5 +11,10 @@ import { type McpServerInstance } from '@inharness-ai/agent-adapters';
|
|
|
11
11
|
* Stateless — w odroznieniu od `plan-tools` (gdzie `threadId` jest ambient
|
|
12
12
|
* z closure), `c4s-tools.ask` celuje w **innego** peera, wszystkie parametry
|
|
13
13
|
* przychodza jako input. Brak `ctx` w fabryce.
|
|
14
|
+
*
|
|
15
|
+
* 0.1.79: tool zablokowany do READ-ONLY. `contextType='ask'` jest zahardkodowany
|
|
16
|
+
* wewnatrz (caller nie moze wybrac mutujacego kontekstu), a `output: 'final'`
|
|
17
|
+
* zwraca terse `{ threadId, answer }`. Parametry `contextType` i `brief` usuniete
|
|
18
|
+
* z wejscia.
|
|
14
19
|
*/
|
|
15
20
|
export declare function buildC4sToolsServer(): McpServerInstance;
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { createMcpServer, mcpTool } from '@inharness-ai/agent-adapters';
|
|
2
2
|
import { z } from 'zod';
|
|
3
|
-
import {
|
|
3
|
+
import { runAgent, AgentError } from '../../core/agent/run-agent.js';
|
|
4
4
|
/**
|
|
5
|
-
* `c4s-tools` — cross-cutting in-process MCP server expozujacy
|
|
5
|
+
* `c4s-tools` — cross-cutting in-process MCP server expozujacy peer-consult
|
|
6
6
|
* jako narzedzie MCP. Jeden tool `ask`, mountowany per request (jak `plan-tools`).
|
|
7
7
|
*
|
|
8
8
|
* Motywacja: w `plan_mode=true` agent ma `disallowedTools = MUTATING_BUILTINS`
|
|
@@ -13,43 +13,48 @@ import { runAsk, AskError } from '../../core/ask/run-ask.js';
|
|
|
13
13
|
* Stateless — w odroznieniu od `plan-tools` (gdzie `threadId` jest ambient
|
|
14
14
|
* z closure), `c4s-tools.ask` celuje w **innego** peera, wszystkie parametry
|
|
15
15
|
* przychodza jako input. Brak `ctx` w fabryce.
|
|
16
|
+
*
|
|
17
|
+
* 0.1.79: tool zablokowany do READ-ONLY. `contextType='ask'` jest zahardkodowany
|
|
18
|
+
* wewnatrz (caller nie moze wybrac mutujacego kontekstu), a `output: 'final'`
|
|
19
|
+
* zwraca terse `{ threadId, answer }`. Parametry `contextType` i `brief` usuniete
|
|
20
|
+
* z wejscia.
|
|
16
21
|
*/
|
|
17
22
|
export function buildC4sToolsServer() {
|
|
18
23
|
const ask = mcpTool('ask', [
|
|
19
24
|
'Consult another claude4spec specification synchronously. Returns { threadId, answer }.',
|
|
25
|
+
'The peer is READ-ONLY: it does not mutate its spec (Write/Edit/Bash banned; entity/page edits soft-blocked at prompt level).',
|
|
20
26
|
'Use `project` (local path to peer .claude4spec/) OR `server` (URL override); if both, `server` wins.',
|
|
21
|
-
'Continue an existing peer thread by passing its `threadId
|
|
27
|
+
'Continue an existing peer thread by passing its `threadId`.',
|
|
22
28
|
'Works in plan_mode — MCP is not filtered by READONLY_BUILTINS, so this works where Bash-shelled `c4s ask` does not.',
|
|
23
|
-
'Same contract as the `c4s` CLI: same discovery, same errors.',
|
|
29
|
+
'Same contract as the `c4s ask` CLI shorthand: same discovery, same errors.',
|
|
24
30
|
].join('\n'), {
|
|
25
31
|
message: z.string(),
|
|
26
32
|
project: z.string().optional(),
|
|
27
33
|
workspace: z.string().optional(),
|
|
28
34
|
server: z.string().optional(),
|
|
29
|
-
contextType: z.enum(['chat', 'brief', 'patch']).optional(),
|
|
30
35
|
threadId: z.string().optional(),
|
|
31
|
-
|
|
36
|
+
model: z.string().optional(),
|
|
32
37
|
}, async (input) => {
|
|
33
38
|
try {
|
|
34
|
-
const result = await
|
|
39
|
+
const result = await runAgent({
|
|
35
40
|
message: String(input.message ?? ''),
|
|
36
41
|
project: typeof input.project === 'string' ? input.project : undefined,
|
|
37
42
|
workspace: typeof input.workspace === 'string' ? input.workspace : undefined,
|
|
38
43
|
server: typeof input.server === 'string' ? input.server : undefined,
|
|
39
|
-
contextType: typeof input.contextType === 'string'
|
|
40
|
-
? input.contextType
|
|
41
|
-
: undefined,
|
|
42
44
|
threadId: typeof input.threadId === 'string' ? input.threadId : undefined,
|
|
43
|
-
|
|
45
|
+
model: typeof input.model === 'string' ? input.model : undefined,
|
|
46
|
+
// Locked: a consulted peer always runs read-only, terse output.
|
|
47
|
+
contextType: 'ask',
|
|
48
|
+
output: 'final',
|
|
44
49
|
});
|
|
45
50
|
return {
|
|
46
51
|
content: [{ type: 'text', text: JSON.stringify(result) }],
|
|
47
52
|
};
|
|
48
53
|
}
|
|
49
54
|
catch (err) {
|
|
50
|
-
const code = err instanceof
|
|
55
|
+
const code = err instanceof AgentError ? err.code : 'AGENT_ERROR';
|
|
51
56
|
const message = err instanceof Error ? err.message : String(err);
|
|
52
|
-
const hint = err instanceof
|
|
57
|
+
const hint = err instanceof AgentError ? err.hint : undefined;
|
|
53
58
|
return {
|
|
54
59
|
content: [
|
|
55
60
|
{
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"c4s-tools.js","sourceRoot":"","sources":["../../../src/server/mcp/c4s-tools.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,OAAO,EAA0B,MAAM,8BAA8B,CAAC;AAChG,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"c4s-tools.js","sourceRoot":"","sources":["../../../src/server/mcp/c4s-tools.ts"],"names":[],"mappings":"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"}
|