strikethroo 3.10.0 → 3.12.0

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.
Files changed (112) hide show
  1. package/dist/harnesses/agent-adapter.d.ts +20 -0
  2. package/dist/harnesses/agent-adapter.d.ts.map +1 -0
  3. package/dist/harnesses/agent-adapter.js +119 -0
  4. package/dist/harnesses/agent-adapter.js.map +1 -0
  5. package/dist/harnesses/index.d.ts +13 -0
  6. package/dist/harnesses/index.d.ts.map +1 -0
  7. package/dist/harnesses/index.js +18 -0
  8. package/dist/harnesses/index.js.map +1 -0
  9. package/dist/harnesses/registry.d.ts +35 -0
  10. package/dist/harnesses/registry.d.ts.map +1 -0
  11. package/dist/harnesses/registry.js +24 -0
  12. package/dist/harnesses/registry.js.map +1 -0
  13. package/dist/index.d.ts.map +1 -1
  14. package/dist/index.js +7 -28
  15. package/dist/index.js.map +1 -1
  16. package/dist/metadata.d.ts +1 -1
  17. package/dist/metadata.js +1 -1
  18. package/dist/serve/config-write.d.ts +15 -12
  19. package/dist/serve/config-write.d.ts.map +1 -1
  20. package/dist/serve/config-write.js +40 -26
  21. package/dist/serve/config-write.js.map +1 -1
  22. package/dist/serve/workspace-model.d.ts +4 -2
  23. package/dist/serve/workspace-model.d.ts.map +1 -1
  24. package/dist/serve/workspace-model.js +14 -1
  25. package/dist/serve/workspace-model.js.map +1 -1
  26. package/dist/skill-scripts/shared/root.js +1 -1
  27. package/dist-web/assets/{arc-Du83CoGP.js → arc-BVtIjHfG.js} +1 -1
  28. package/dist-web/assets/{architectureDiagram-3BPJPVTR-BA6BUfUW.js → architectureDiagram-3BPJPVTR-6n6Kx_Nw.js} +1 -1
  29. package/dist-web/assets/{blockDiagram-GPEHLZMM-kmZD9Z3J.js → blockDiagram-GPEHLZMM-DVQrCUNW.js} +1 -1
  30. package/dist-web/assets/{c4Diagram-AAUBKEIU-C-zr0OVA.js → c4Diagram-AAUBKEIU-BmsJKunV.js} +1 -1
  31. package/dist-web/assets/channel-C1JVeaAF.js +1 -0
  32. package/dist-web/assets/{chunk-2J33WTMH-DGyZyeF8.js → chunk-2J33WTMH-CLmshK_w.js} +1 -1
  33. package/dist-web/assets/{chunk-4BX2VUAB-Ig1yILPK.js → chunk-4BX2VUAB-DFWJI57N.js} +1 -1
  34. package/dist-web/assets/{chunk-55IACEB6-CcNftkuC.js → chunk-55IACEB6-Cw5bYv7_.js} +1 -1
  35. package/dist-web/assets/{chunk-727SXJPM-CiRgiu44.js → chunk-727SXJPM-cGYMQHSz.js} +1 -1
  36. package/dist-web/assets/{chunk-AQP2D5EJ-Bwjvwe11.js → chunk-AQP2D5EJ-CQjDykhJ.js} +1 -1
  37. package/dist-web/assets/{chunk-FMBD7UC4-CWdvFsJu.js → chunk-FMBD7UC4-x3hzV0ms.js} +1 -1
  38. package/dist-web/assets/{chunk-ND2GUHAM-8GmIk-IZ.js → chunk-ND2GUHAM-B2mXRbNo.js} +1 -1
  39. package/dist-web/assets/{chunk-QZHKN3VN-CaL4wYlA.js → chunk-QZHKN3VN-CvnkhP9r.js} +1 -1
  40. package/dist-web/assets/classDiagram-4FO5ZUOK-D1UIhNJl.js +1 -0
  41. package/dist-web/assets/classDiagram-v2-Q7XG4LA2-D1UIhNJl.js +1 -0
  42. package/dist-web/assets/{cose-bilkent-S5V4N54A-RFm7vIyb.js → cose-bilkent-S5V4N54A-BZpF-dzH.js} +1 -1
  43. package/dist-web/assets/{dagre-BM42HDAG-ByE50cqc.js → dagre-BM42HDAG-DFMuZyrG.js} +1 -1
  44. package/dist-web/assets/{diagram-2AECGRRQ-B1Gv7VcB.js → diagram-2AECGRRQ-BvprRz2I.js} +1 -1
  45. package/dist-web/assets/{diagram-5GNKFQAL-DGJd_bsM.js → diagram-5GNKFQAL-DbHN8zOP.js} +1 -1
  46. package/dist-web/assets/{diagram-KO2AKTUF-YOmj2j9x.js → diagram-KO2AKTUF-2xhIBvDF.js} +1 -1
  47. package/dist-web/assets/{diagram-LMA3HP47-CVUXcS-1.js → diagram-LMA3HP47-BZSMb8wm.js} +1 -1
  48. package/dist-web/assets/{diagram-OG6HWLK6-DtmRK7uL.js → diagram-OG6HWLK6-DZxBiAwf.js} +1 -1
  49. package/dist-web/assets/{erDiagram-TEJ5UH35-DOUgdDj3.js → erDiagram-TEJ5UH35-DOc66mWB.js} +1 -1
  50. package/dist-web/assets/{flowDiagram-I6XJVG4X-DbuqdHpO.js → flowDiagram-I6XJVG4X-rEwEgwKf.js} +1 -1
  51. package/dist-web/assets/{ganttDiagram-6RSMTGT7-B7ZZ2LbX.js → ganttDiagram-6RSMTGT7-BAStzA-L.js} +1 -1
  52. package/dist-web/assets/{gitGraphDiagram-PVQCEYII-L-d2snvu.js → gitGraphDiagram-PVQCEYII-C0gTHRDa.js} +1 -1
  53. package/dist-web/assets/index-CGjoHidG.js +169 -0
  54. package/dist-web/assets/{index-IfoU0lmL.js → index-CNj2Qj_m.js} +1 -1
  55. package/dist-web/assets/{index-BU3TMxqs.js → index-DBUy3IfQ.js} +1 -1
  56. package/dist-web/assets/index-DROsk748.css +1 -0
  57. package/dist-web/assets/{infoDiagram-5YYISTIA-DJImDLu-.js → infoDiagram-5YYISTIA-Dh2D2DOL.js} +1 -1
  58. package/dist-web/assets/{ishikawaDiagram-YF4QCWOH-BHk3O3EA.js → ishikawaDiagram-YF4QCWOH-4Fb9ugBL.js} +1 -1
  59. package/dist-web/assets/{journeyDiagram-JHISSGLW-BuU4sInb.js → journeyDiagram-JHISSGLW-BBjMcjNc.js} +1 -1
  60. package/dist-web/assets/{kanban-definition-UN3LZRKU-CtzGaGIa.js → kanban-definition-UN3LZRKU-eyj4aSf_.js} +1 -1
  61. package/dist-web/assets/{linear-BdRfGnlQ.js → linear-KJUWAP7h.js} +1 -1
  62. package/dist-web/assets/{mermaid.core-DFkZP_6I.js → mermaid.core-B9tzk4XH.js} +4 -4
  63. package/dist-web/assets/{mindmap-definition-RKZ34NQL-07Y54l5p.js → mindmap-definition-RKZ34NQL-pTCX9_8k.js} +1 -1
  64. package/dist-web/assets/{pieDiagram-4H26LBE5-CqxqIeCc.js → pieDiagram-4H26LBE5-CV1GWPlT.js} +1 -1
  65. package/dist-web/assets/{quadrantDiagram-W4KKPZXB-DW_GPUMX.js → quadrantDiagram-W4KKPZXB-C60DVKh9.js} +1 -1
  66. package/dist-web/assets/{requirementDiagram-4Y6WPE33-Btmdymfp.js → requirementDiagram-4Y6WPE33-D5GCyDny.js} +1 -1
  67. package/dist-web/assets/{sankeyDiagram-5OEKKPKP-DmHixIVQ.js → sankeyDiagram-5OEKKPKP-L_jgOwN_.js} +1 -1
  68. package/dist-web/assets/{sequenceDiagram-3UESZ5HK-G4uNNg00.js → sequenceDiagram-3UESZ5HK-ek4VA0bX.js} +1 -1
  69. package/dist-web/assets/{stateDiagram-AJRCARHV-DQpHeYYT.js → stateDiagram-AJRCARHV-DaTz-gXI.js} +1 -1
  70. package/dist-web/assets/stateDiagram-v2-BHNVJYJU-CgQxtWKp.js +1 -0
  71. package/dist-web/assets/{timeline-definition-PNZ67QCA-Dj8GHpUR.js → timeline-definition-PNZ67QCA-BSZIQpRw.js} +1 -1
  72. package/dist-web/assets/{vennDiagram-CIIHVFJN-BfDQlVRY.js → vennDiagram-CIIHVFJN-0qDOzqt8.js} +1 -1
  73. package/dist-web/assets/{wardley-L42UT6IY-CNXhMfST.js → wardley-L42UT6IY-BOcRObI0.js} +1 -1
  74. package/dist-web/assets/{wardleyDiagram-YWT4CUSO-CfsAcXpz.js → wardleyDiagram-YWT4CUSO-KyyBf4a6.js} +1 -1
  75. package/dist-web/assets/{xychartDiagram-2RQKCTM6-CPA5hSTp.js → xychartDiagram-2RQKCTM6-SCVN95Cn.js} +1 -1
  76. package/dist-web/index.html +2 -2
  77. package/package.json +3 -1
  78. package/templates/harness/skills/st-create-plan/scripts/find-strikethroo-root.cjs +1 -1
  79. package/templates/harness/skills/st-create-plan/scripts/get-next-plan-id.cjs +1 -1
  80. package/templates/harness/skills/st-execute-blueprint/scripts/check-phase-readiness.cjs +1 -1
  81. package/templates/harness/skills/st-execute-blueprint/scripts/create-feature-branch.cjs +1 -1
  82. package/templates/harness/skills/st-execute-blueprint/scripts/dispatch-task-execution.cjs +66 -61
  83. package/templates/harness/skills/st-execute-blueprint/scripts/find-strikethroo-root.cjs +1 -1
  84. package/templates/harness/skills/st-execute-blueprint/scripts/validate-plan-blueprint.cjs +1 -1
  85. package/templates/harness/skills/st-execute-task/scripts/check-task-dependencies.cjs +1 -1
  86. package/templates/harness/skills/st-execute-task/scripts/dispatch-task-execution.cjs +66 -61
  87. package/templates/harness/skills/st-execute-task/scripts/find-strikethroo-root.cjs +1 -1
  88. package/templates/harness/skills/st-execute-task/scripts/validate-plan-blueprint.cjs +1 -1
  89. package/templates/harness/skills/st-full-workflow/SKILL.md +41 -4
  90. package/templates/harness/skills/st-full-workflow/scripts/check-phase-readiness.cjs +1 -1
  91. package/templates/harness/skills/st-full-workflow/scripts/create-feature-branch.cjs +1 -1
  92. package/templates/harness/skills/st-full-workflow/scripts/dispatch-task-execution.cjs +66 -61
  93. package/templates/harness/skills/st-full-workflow/scripts/find-strikethroo-root.cjs +1 -1
  94. package/templates/harness/skills/st-full-workflow/scripts/get-next-plan-id.cjs +1 -1
  95. package/templates/harness/skills/st-full-workflow/scripts/get-next-task-id.cjs +1 -1
  96. package/templates/harness/skills/st-full-workflow/scripts/route-task-execution.cjs +6575 -0
  97. package/templates/harness/skills/st-full-workflow/scripts/validate-plan-blueprint.cjs +1 -1
  98. package/templates/harness/skills/st-generate-tasks/SKILL.md +44 -3
  99. package/templates/harness/skills/st-generate-tasks/scripts/find-strikethroo-root.cjs +1 -1
  100. package/templates/harness/skills/st-generate-tasks/scripts/get-next-task-id.cjs +1 -1
  101. package/templates/harness/skills/st-generate-tasks/scripts/route-task-execution.cjs +6575 -0
  102. package/templates/harness/skills/st-generate-tasks/scripts/validate-plan-blueprint.cjs +1 -1
  103. package/templates/harness/skills/st-refine-plan/scripts/find-strikethroo-root.cjs +1 -1
  104. package/templates/harness/skills/st-refine-plan/scripts/validate-plan-blueprint.cjs +1 -1
  105. package/templates/strikethroo/config/config.yaml +23 -0
  106. package/templates/strikethroo/config/hooks/TASK_EXECUTION_ROUTING.md +29 -0
  107. package/dist-web/assets/channel-BOHLeYWs.js +0 -1
  108. package/dist-web/assets/classDiagram-4FO5ZUOK-DnCGOL-L.js +0 -1
  109. package/dist-web/assets/classDiagram-v2-Q7XG4LA2-DnCGOL-L.js +0 -1
  110. package/dist-web/assets/index-BJUf2P-C.css +0 -1
  111. package/dist-web/assets/index-DQQ5O8Wf.js +0 -125
  112. package/dist-web/assets/stateDiagram-v2-BHNVJYJU-DHbVjicl.js +0 -1
@@ -0,0 +1,20 @@
1
+ /**
2
+ * Shared Agent Harness Adapter
3
+ *
4
+ * Every harness Strikethroo currently supports installs the same way: copy the
5
+ * agent templates from `templates/harness/agents/`, converting to Codex's TOML
6
+ * format where required. Rather than hand-write six near-identical adapters, a
7
+ * single factory produces one per harness, parameterized by the existing
8
+ * `getAgentFormat` descriptor.
9
+ *
10
+ * Importing this module has the side effect of registering an adapter for every
11
+ * entry in `SUPPORTED_HARNESSES`.
12
+ */
13
+ import { Harness } from '../types';
14
+ import { HarnessAdapter } from './registry';
15
+ /**
16
+ * Build a {@link HarnessAdapter} for a harness whose install mechanism is the
17
+ * shared agent-file copy.
18
+ */
19
+ export declare function createAgentAdapter(id: Harness): HarnessAdapter;
20
+ //# sourceMappingURL=agent-adapter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agent-adapter.d.ts","sourceRoot":"","sources":["../../src/harnesses/agent-adapter.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAIH,OAAO,EAAE,OAAO,EAAuB,MAAM,UAAU,CAAC;AAExD,OAAO,EAAE,cAAc,EAA0B,MAAM,YAAY,CAAC;AAoDpE;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,EAAE,EAAE,OAAO,GAAG,cAAc,CAa9D"}
@@ -0,0 +1,119 @@
1
+ "use strict";
2
+ /**
3
+ * Shared Agent Harness Adapter
4
+ *
5
+ * Every harness Strikethroo currently supports installs the same way: copy the
6
+ * agent templates from `templates/harness/agents/`, converting to Codex's TOML
7
+ * format where required. Rather than hand-write six near-identical adapters, a
8
+ * single factory produces one per harness, parameterized by the existing
9
+ * `getAgentFormat` descriptor.
10
+ *
11
+ * Importing this module has the side effect of registering an adapter for every
12
+ * entry in `SUPPORTED_HARNESSES`.
13
+ */
14
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
15
+ if (k2 === undefined) k2 = k;
16
+ var desc = Object.getOwnPropertyDescriptor(m, k);
17
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
18
+ desc = { enumerable: true, get: function() { return m[k]; } };
19
+ }
20
+ Object.defineProperty(o, k2, desc);
21
+ }) : (function(o, m, k, k2) {
22
+ if (k2 === undefined) k2 = k;
23
+ o[k2] = m[k];
24
+ }));
25
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
26
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
27
+ }) : function(o, v) {
28
+ o["default"] = v;
29
+ });
30
+ var __importStar = (this && this.__importStar) || (function () {
31
+ var ownKeys = function(o) {
32
+ ownKeys = Object.getOwnPropertyNames || function (o) {
33
+ var ar = [];
34
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
35
+ return ar;
36
+ };
37
+ return ownKeys(o);
38
+ };
39
+ return function (mod) {
40
+ if (mod && mod.__esModule) return mod;
41
+ var result = {};
42
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
43
+ __setModuleDefault(result, mod);
44
+ return result;
45
+ };
46
+ })();
47
+ Object.defineProperty(exports, "__esModule", { value: true });
48
+ exports.createAgentAdapter = createAgentAdapter;
49
+ const fs = __importStar(require("fs-extra"));
50
+ const path = __importStar(require("path"));
51
+ const types_1 = require("../types");
52
+ const utils_1 = require("../utils");
53
+ const registry_1 = require("./registry");
54
+ /**
55
+ * Absolute path to the shared agent templates directory.
56
+ *
57
+ * Resolved relative to this compiled module: `dist/harnesses/agent-adapter.js`
58
+ * sits two levels below the package root that holds `templates/`.
59
+ */
60
+ function getAgentsTemplateDir() {
61
+ return path.join(__dirname, '..', '..', 'templates', 'harness', 'agents');
62
+ }
63
+ /** Resolve the target agent directory for a harness under a project root. */
64
+ function agentDirFor(harness, projectRoot) {
65
+ return path.resolve(projectRoot || '.', (0, utils_1.getAgentFormat)(harness).directory);
66
+ }
67
+ /**
68
+ * Write the agent files for a harness under `projectRoot`, overwriting any
69
+ * existing files. Returns the absolute paths written. Shared by `install` and
70
+ * `update` — the operation is idempotent.
71
+ */
72
+ async function writeAgentFiles(harness, projectRoot) {
73
+ const sourceAgentsDir = getAgentsTemplateDir();
74
+ if (!(await fs.pathExists(sourceAgentsDir))) {
75
+ return [];
76
+ }
77
+ const agentFiles = (await fs.readdir(sourceAgentsDir)).filter(f => f.endsWith('.md'));
78
+ const formatInfo = (0, utils_1.getAgentFormat)(harness);
79
+ const targetDir = agentDirFor(harness, projectRoot);
80
+ await fs.ensureDir(targetDir);
81
+ const writtenFiles = [];
82
+ for (const agentFile of agentFiles) {
83
+ const sourcePath = path.join(sourceAgentsDir, agentFile);
84
+ const content = await fs.readFile(sourcePath, 'utf-8');
85
+ const baseName = path.basename(agentFile, '.md');
86
+ const targetPath = path.join(targetDir, baseName + formatInfo.extension);
87
+ if (formatInfo.format === 'toml') {
88
+ await fs.writeFile(targetPath, (0, utils_1.convertAgentMdToToml)(content), 'utf-8');
89
+ }
90
+ else {
91
+ await fs.writeFile(targetPath, content, 'utf-8');
92
+ }
93
+ writtenFiles.push(targetPath);
94
+ }
95
+ return writtenFiles;
96
+ }
97
+ /**
98
+ * Build a {@link HarnessAdapter} for a harness whose install mechanism is the
99
+ * shared agent-file copy.
100
+ */
101
+ function createAgentAdapter(id) {
102
+ return {
103
+ id,
104
+ async detect(projectRoot) {
105
+ return fs.pathExists(agentDirFor(id, projectRoot));
106
+ },
107
+ async install(projectRoot) {
108
+ return writeAgentFiles(id, projectRoot);
109
+ },
110
+ async update(projectRoot) {
111
+ return writeAgentFiles(id, projectRoot);
112
+ },
113
+ };
114
+ }
115
+ // Register an adapter for every supported harness.
116
+ for (const harness of types_1.SUPPORTED_HARNESSES) {
117
+ (0, registry_1.registerHarnessAdapter)(createAgentAdapter(harness));
118
+ }
119
+ //# sourceMappingURL=agent-adapter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agent-adapter.js","sourceRoot":"","sources":["../../src/harnesses/agent-adapter.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ /**
2
+ * Harness Registry Barrel
3
+ *
4
+ * Importing this module guarantees the registry is populated: it pulls in the
5
+ * agent adapter module for its registration side effect, then re-exports the
6
+ * registry surface. Consumers should import from here, not from the individual
7
+ * modules, so the adapters are always registered before use.
8
+ */
9
+ import './agent-adapter';
10
+ export { HarnessRegistry, registerHarnessAdapter } from './registry';
11
+ export type { HarnessAdapter } from './registry';
12
+ export { createAgentAdapter } from './agent-adapter';
13
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/harnesses/index.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,iBAAiB,CAAC;AAEzB,OAAO,EAAE,eAAe,EAAE,sBAAsB,EAAE,MAAM,YAAY,CAAC;AACrE,YAAY,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AACjD,OAAO,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC"}
@@ -0,0 +1,18 @@
1
+ "use strict";
2
+ /**
3
+ * Harness Registry Barrel
4
+ *
5
+ * Importing this module guarantees the registry is populated: it pulls in the
6
+ * agent adapter module for its registration side effect, then re-exports the
7
+ * registry surface. Consumers should import from here, not from the individual
8
+ * modules, so the adapters are always registered before use.
9
+ */
10
+ Object.defineProperty(exports, "__esModule", { value: true });
11
+ exports.createAgentAdapter = exports.registerHarnessAdapter = exports.HarnessRegistry = void 0;
12
+ require("./agent-adapter");
13
+ var registry_1 = require("./registry");
14
+ Object.defineProperty(exports, "HarnessRegistry", { enumerable: true, get: function () { return registry_1.HarnessRegistry; } });
15
+ Object.defineProperty(exports, "registerHarnessAdapter", { enumerable: true, get: function () { return registry_1.registerHarnessAdapter; } });
16
+ var agent_adapter_1 = require("./agent-adapter");
17
+ Object.defineProperty(exports, "createAgentAdapter", { enumerable: true, get: function () { return agent_adapter_1.createAgentAdapter; } });
18
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/harnesses/index.ts"],"names":[],"mappings":";AAAA;;;;;;;GAOG;;;AAEH,2BAAyB;AAEzB,uCAAqE;AAA5D,2GAAA,eAAe,OAAA;AAAE,kHAAA,sBAAsB,OAAA;AAEhD,iDAAqD;AAA5C,mHAAA,kBAAkB,OAAA"}
@@ -0,0 +1,35 @@
1
+ /**
2
+ * Harness Adapter Registry
3
+ *
4
+ * A minimal, single extension point describing how each supported harness is
5
+ * detected, installed, and updated. `init` iterates the registry instead of
6
+ * branching over harnesses.
7
+ *
8
+ * Deliberately small: no profiles, no delivery-strategy abstraction, and no
9
+ * per-tool config schema — just "one place to register a harness".
10
+ */
11
+ import { Harness } from '../types';
12
+ /**
13
+ * Describes the lifecycle of a single harness.
14
+ *
15
+ * All paths are resolved against `projectRoot`. `install` and `update` return
16
+ * the absolute paths of the files they wrote.
17
+ */
18
+ export interface HarnessAdapter {
19
+ /** The harness this adapter manages. */
20
+ id: Harness;
21
+ /** Resolve to `true` when the harness is already present under `projectRoot`. */
22
+ detect(projectRoot: string): Promise<boolean>;
23
+ /** Create the harness's files under `projectRoot`; resolve to the paths written. */
24
+ install(projectRoot: string): Promise<string[]>;
25
+ /** Re-apply the harness's files (idempotent); resolve to the paths written. */
26
+ update(projectRoot: string): Promise<string[]>;
27
+ }
28
+ /** The single registry of harness adapters, keyed by harness id. */
29
+ export declare const HarnessRegistry: Map<"claude" | "codex" | "cursor" | "gemini" | "copilot" | "opencode", HarnessAdapter>;
30
+ /**
31
+ * Register an adapter, keyed by its `id`. Later registrations for the same id
32
+ * replace earlier ones.
33
+ */
34
+ export declare function registerHarnessAdapter(adapter: HarnessAdapter): void;
35
+ //# sourceMappingURL=registry.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../src/harnesses/registry.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,UAAU,CAAC;AAEnC;;;;;GAKG;AACH,MAAM,WAAW,cAAc;IAC7B,wCAAwC;IACxC,EAAE,EAAE,OAAO,CAAC;IACZ,iFAAiF;IACjF,MAAM,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IAC9C,oFAAoF;IACpF,OAAO,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;IAChD,+EAA+E;IAC/E,MAAM,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;CAChD;AAED,oEAAoE;AACpE,eAAO,MAAM,eAAe,wFAAqC,CAAC;AAElE;;;GAGG;AACH,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,cAAc,GAAG,IAAI,CAEpE"}
@@ -0,0 +1,24 @@
1
+ "use strict";
2
+ /**
3
+ * Harness Adapter Registry
4
+ *
5
+ * A minimal, single extension point describing how each supported harness is
6
+ * detected, installed, and updated. `init` iterates the registry instead of
7
+ * branching over harnesses.
8
+ *
9
+ * Deliberately small: no profiles, no delivery-strategy abstraction, and no
10
+ * per-tool config schema — just "one place to register a harness".
11
+ */
12
+ Object.defineProperty(exports, "__esModule", { value: true });
13
+ exports.HarnessRegistry = void 0;
14
+ exports.registerHarnessAdapter = registerHarnessAdapter;
15
+ /** The single registry of harness adapters, keyed by harness id. */
16
+ exports.HarnessRegistry = new Map();
17
+ /**
18
+ * Register an adapter, keyed by its `id`. Later registrations for the same id
19
+ * replace earlier ones.
20
+ */
21
+ function registerHarnessAdapter(adapter) {
22
+ exports.HarnessRegistry.set(adapter.id, adapter);
23
+ }
24
+ //# sourceMappingURL=registry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"registry.js","sourceRoot":"","sources":["../../src/harnesses/registry.ts"],"names":[],"mappings":";AAAA;;;;;;;;;GASG;;;AA4BH,wDAEC;AATD,oEAAoE;AACvD,QAAA,eAAe,GAAG,IAAI,GAAG,EAA2B,CAAC;AAElE;;;GAGG;AACH,SAAgB,sBAAsB,CAAC,OAAuB;IAC5D,uBAAe,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC;AAC3C,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAKH,OAAO,EAAE,WAAW,EAAW,aAAa,EAAoC,MAAM,SAAS,CAAC;AA4EhG;;;;;;;;GAQG;AACH,wBAAsB,IAAI,CAAC,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,aAAa,CAAC,CA0FvE;AAuKD;;GAEG;AACH,wBAAsB,aAAa,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAGtE"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAKH,OAAO,EAAE,WAAW,EAAE,aAAa,EAAoC,MAAM,SAAS,CAAC;AA6EvF;;;;;;;;GAQG;AACH,wBAAsB,IAAI,CAAC,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,aAAa,CAAC,CA8FvE;AAuID;;GAEG;AACH,wBAAsB,aAAa,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAGtE"}
package/dist/index.js CHANGED
@@ -51,6 +51,7 @@ const utils_1 = require("./utils");
51
51
  const metadata_1 = require("./metadata");
52
52
  const conflict_detector_1 = require("./conflict-detector");
53
53
  const prompts_1 = require("./prompts");
54
+ const harnesses_1 = require("./harnesses");
54
55
  // Visual formatting constants
55
56
  const TERM_WIDTH = 80;
56
57
  const DIVIDER = '─'.repeat(TERM_WIDTH);
@@ -142,11 +143,15 @@ async function init(options) {
142
143
  // Copy common templates to .ai/strikethroo with conflict detection
143
144
  console.log(` ${chalk_1.default.green('✓')} Copying common template files`);
144
145
  await copyCommonTemplates(baseDir, options.force || false);
145
- // Create harness-specific directories and copy templates
146
+ // Create harness-specific directories and copy templates via the registry
146
147
  const allCreatedAgentFiles = new Map();
147
148
  for (const harness of harnesses) {
148
149
  console.log(` ${chalk_1.default.green('✓')} Setting up ${harness} harness configuration`);
149
- const created = await createHarnessStructure(harness, baseDir);
150
+ const adapter = harnesses_1.HarnessRegistry.get(harness);
151
+ if (!adapter) {
152
+ throw new Error(`No registered harness adapter for: ${harness}`);
153
+ }
154
+ const created = await adapter.install(baseDir);
150
155
  if (created.length > 0) {
151
156
  allCreatedAgentFiles.set(harness, created);
152
157
  }
@@ -291,32 +296,6 @@ async function applyResolutions(sourceDir, destDir, resolutions) {
291
296
  // If 'keep', do nothing - keep user's file
292
297
  }
293
298
  }
294
- async function createHarnessStructure(harness, baseDir) {
295
- const sourceAgentsDir = getTemplatePath(path.join('harness', 'agents'));
296
- const createdFiles = [];
297
- if (!(await exists(sourceAgentsDir))) {
298
- return createdFiles;
299
- }
300
- const agentFiles = (await fs.readdir(sourceAgentsDir)).filter(f => f.endsWith('.md'));
301
- const formatInfo = (0, utils_1.getAgentFormat)(harness);
302
- const targetDir = resolvePath(baseDir, formatInfo.directory);
303
- await fs.ensureDir(targetDir);
304
- for (const agentFile of agentFiles) {
305
- const sourcePath = path.join(sourceAgentsDir, agentFile);
306
- const content = await fs.readFile(sourcePath, 'utf-8');
307
- const baseName = path.basename(agentFile, '.md');
308
- const targetName = baseName + formatInfo.extension;
309
- const targetPath = path.join(targetDir, targetName);
310
- if (formatInfo.format === 'toml') {
311
- await fs.writeFile(targetPath, (0, utils_1.convertAgentMdToToml)(content), 'utf-8');
312
- }
313
- else {
314
- await fs.writeFile(targetPath, content, 'utf-8');
315
- }
316
- createdFiles.push(targetPath);
317
- }
318
- return createdFiles;
319
- }
320
299
  /**
321
300
  * Check if a directory already has Strikethroo initialized
322
301
  */
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
@@ -13,7 +13,7 @@ import { InitMetadata } from './types';
13
13
  * Skill bundles read this constant at build time to enforce a runtime
14
14
  * schema-mismatch check against the workspace they're invoked against.
15
15
  */
16
- export declare const CURRENT_WORKSPACE_SCHEMA_VERSION = 3;
16
+ export declare const CURRENT_WORKSPACE_SCHEMA_VERSION = 4;
17
17
  /**
18
18
  * Calculate SHA-256 hash of a file
19
19
  * @param filePath - Absolute path to the file
package/dist/metadata.js CHANGED
@@ -55,7 +55,7 @@ const path = __importStar(require("path"));
55
55
  * Skill bundles read this constant at build time to enforce a runtime
56
56
  * schema-mismatch check against the workspace they're invoked against.
57
57
  */
58
- exports.CURRENT_WORKSPACE_SCHEMA_VERSION = 3;
58
+ exports.CURRENT_WORKSPACE_SCHEMA_VERSION = 4;
59
59
  /**
60
60
  * Calculate SHA-256 hash of a file
61
61
  * @param filePath - Absolute path to the file
@@ -7,14 +7,16 @@
7
7
  * module is that mutation's authoritative guard: a single, HTTP-free function
8
8
  * the route handler and the tests both call.
9
9
  *
10
- * It enforces a strict allowlist: the `kind` must be `hooks` or `templates`;
11
- * the `id` must resolve to a single flat filename `config/<kind>/<id>.md` that
12
- * stays inside the intended directory (no path separators, no `..`, no
13
- * traversal); and the target file must ALREADY exist (this never creates a new
14
- * file). When the guards pass it overwrites the file content verbatim. It never
15
- * deletes or renames. Expected guard failures are returned as a typed result,
16
- * not thrown; only an unexpected filesystem error surfaces as `fs-error`.
17
- * Node built-ins only.
10
+ * It enforces a strict allowlist: the `kind` must be `hooks` or `templates`
11
+ * (resolving to a single flat filename `config/<kind>/<id>.md` that stays
12
+ * inside the intended directory no path separators, no `..`, no traversal),
13
+ * or the special `workspace` kind whose only valid `id` is `config`, mapping
14
+ * to the workspace's structured configuration file `config/config.yaml` (the
15
+ * file behind the Customize section's Config form). In every case the target
16
+ * file must ALREADY exist (this never creates a new file). When the guards
17
+ * pass it overwrites the file content verbatim. It never deletes or renames.
18
+ * Expected guard failures are returned as a typed result, not thrown; only an
19
+ * unexpected filesystem error surfaces as `fs-error`. Node built-ins only.
18
20
  */
19
21
  /**
20
22
  * Outcome of a {@link writeConfigFile} call. A discriminated union mirroring the
@@ -29,10 +31,11 @@ export type ConfigWriteResult = {
29
31
  message: string;
30
32
  };
31
33
  /**
32
- * Overwrites the existing config file `config/<kind>/<id>.md` under `root` (the
33
- * absolute `.ai/strikethroo` directory) with `content`, after validating the
34
- * strict allowlist. Returns a typed result; performs zero filesystem changes on
35
- * any guard failure.
34
+ * Overwrites an existing config file under `root` (the absolute
35
+ * `.ai/strikethroo` directory) with `content`, after validating the strict
36
+ * allowlist: `config/<kind>/<id>.md` for the `hooks`/`templates` kinds, or
37
+ * `config/config.yaml` for `workspace`/`config`. Returns a typed result;
38
+ * performs zero filesystem changes on any guard failure.
36
39
  */
37
40
  export declare const writeConfigFile: (root: string, kind: string, id: string, content: string) => Promise<ConfigWriteResult>;
38
41
  //# sourceMappingURL=config-write.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"config-write.d.ts","sourceRoot":"","sources":["../../src/serve/config-write.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAKH;;;;GAIG;AACH,MAAM,MAAM,iBAAiB,GACzB;IAAE,EAAE,EAAE,IAAI,CAAA;CAAE,GACZ;IACE,EAAE,EAAE,KAAK,CAAC;IACV,MAAM,EAAE,cAAc,GAAG,YAAY,GAAG,WAAW,GAAG,UAAU,CAAC;IACjE,OAAO,EAAE,MAAM,CAAC;CACjB,CAAC;AAKN;;;;;GAKG;AACH,eAAO,MAAM,eAAe,GAC1B,MAAM,MAAM,EACZ,MAAM,MAAM,EACZ,IAAI,MAAM,EACV,SAAS,MAAM,KACd,OAAO,CAAC,iBAAiB,CAmC3B,CAAC"}
1
+ {"version":3,"file":"config-write.d.ts","sourceRoot":"","sources":["../../src/serve/config-write.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAKH;;;;GAIG;AACH,MAAM,MAAM,iBAAiB,GACzB;IAAE,EAAE,EAAE,IAAI,CAAA;CAAE,GACZ;IACE,EAAE,EAAE,KAAK,CAAC;IACV,MAAM,EAAE,cAAc,GAAG,YAAY,GAAG,WAAW,GAAG,UAAU,CAAC;IACjE,OAAO,EAAE,MAAM,CAAC;CACjB,CAAC;AAKN;;;;;;GAMG;AACH,eAAO,MAAM,eAAe,GAC1B,MAAM,MAAM,EACZ,MAAM,MAAM,EACZ,IAAI,MAAM,EACV,SAAS,MAAM,KACd,OAAO,CAAC,iBAAiB,CA6C3B,CAAC"}
@@ -8,14 +8,16 @@
8
8
  * module is that mutation's authoritative guard: a single, HTTP-free function
9
9
  * the route handler and the tests both call.
10
10
  *
11
- * It enforces a strict allowlist: the `kind` must be `hooks` or `templates`;
12
- * the `id` must resolve to a single flat filename `config/<kind>/<id>.md` that
13
- * stays inside the intended directory (no path separators, no `..`, no
14
- * traversal); and the target file must ALREADY exist (this never creates a new
15
- * file). When the guards pass it overwrites the file content verbatim. It never
16
- * deletes or renames. Expected guard failures are returned as a typed result,
17
- * not thrown; only an unexpected filesystem error surfaces as `fs-error`.
18
- * Node built-ins only.
11
+ * It enforces a strict allowlist: the `kind` must be `hooks` or `templates`
12
+ * (resolving to a single flat filename `config/<kind>/<id>.md` that stays
13
+ * inside the intended directory no path separators, no `..`, no traversal),
14
+ * or the special `workspace` kind whose only valid `id` is `config`, mapping
15
+ * to the workspace's structured configuration file `config/config.yaml` (the
16
+ * file behind the Customize section's Config form). In every case the target
17
+ * file must ALREADY exist (this never creates a new file). When the guards
18
+ * pass it overwrites the file content verbatim. It never deletes or renames.
19
+ * Expected guard failures are returned as a typed result, not thrown; only an
20
+ * unexpected filesystem error surfaces as `fs-error`. Node built-ins only.
19
21
  */
20
22
  var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
21
23
  if (k2 === undefined) k2 = k;
@@ -54,29 +56,41 @@ Object.defineProperty(exports, "__esModule", { value: true });
54
56
  exports.writeConfigFile = void 0;
55
57
  const fs = __importStar(require("fs"));
56
58
  const path = __importStar(require("path"));
57
- /** The only config kinds that may be written. */
59
+ /** The directory-backed config kinds that may be written. */
58
60
  const KINDS = new Set(['hooks', 'templates']);
59
61
  /**
60
- * Overwrites the existing config file `config/<kind>/<id>.md` under `root` (the
61
- * absolute `.ai/strikethroo` directory) with `content`, after validating the
62
- * strict allowlist. Returns a typed result; performs zero filesystem changes on
63
- * any guard failure.
62
+ * Overwrites an existing config file under `root` (the absolute
63
+ * `.ai/strikethroo` directory) with `content`, after validating the strict
64
+ * allowlist: `config/<kind>/<id>.md` for the `hooks`/`templates` kinds, or
65
+ * `config/config.yaml` for `workspace`/`config`. Returns a typed result;
66
+ * performs zero filesystem changes on any guard failure.
64
67
  */
65
68
  const writeConfigFile = async (root, kind, id, content) => {
66
- if (!KINDS.has(kind)) {
67
- return { ok: false, reason: 'invalid-kind', message: `Unknown config kind: ${kind}.` };
68
- }
69
- // Reject obvious traversal/nesting attempts early before any resolution.
70
- if (id === '' || id.includes('/') || id.includes('\\') || id.includes('..')) {
71
- return { ok: false, reason: 'invalid-id', message: 'Invalid config file id.' };
69
+ let target;
70
+ if (kind === 'workspace') {
71
+ // The workspace's single structured config file. No id namespace exists
72
+ // here `config` is the only valid id, fixed to config/config.yaml.
73
+ if (id !== 'config') {
74
+ return { ok: false, reason: 'invalid-id', message: 'Invalid config file id.' };
75
+ }
76
+ target = path.resolve(root, 'config', 'config.yaml');
72
77
  }
73
- const dir = path.resolve(root, 'config', kind);
74
- const target = path.resolve(dir, `${id}.md`);
75
- // Containment: the resolved target must be a direct, flat child of `dir`.
76
- const withinDir = target.startsWith(dir + path.sep);
77
- const isFlatChild = path.dirname(target) === dir;
78
- if (!withinDir || !isFlatChild) {
79
- return { ok: false, reason: 'invalid-id', message: 'Invalid config file id.' };
78
+ else {
79
+ if (!KINDS.has(kind)) {
80
+ return { ok: false, reason: 'invalid-kind', message: `Unknown config kind: ${kind}.` };
81
+ }
82
+ // Reject obvious traversal/nesting attempts early before any resolution.
83
+ if (id === '' || id.includes('/') || id.includes('\\') || id.includes('..')) {
84
+ return { ok: false, reason: 'invalid-id', message: 'Invalid config file id.' };
85
+ }
86
+ const dir = path.resolve(root, 'config', kind);
87
+ target = path.resolve(dir, `${id}.md`);
88
+ // Containment: the resolved target must be a direct, flat child of `dir`.
89
+ const withinDir = target.startsWith(dir + path.sep);
90
+ const isFlatChild = path.dirname(target) === dir;
91
+ if (!withinDir || !isFlatChild) {
92
+ return { ok: false, reason: 'invalid-id', message: 'Invalid config file id.' };
93
+ }
80
94
  }
81
95
  try {
82
96
  const stat = await fs.promises.stat(target);
@@ -1 +1 @@
1
- {"version":3,"file":"config-write.js","sourceRoot":"","sources":["../../src/serve/config-write.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;;;GAiBG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAEH,uCAAyB;AACzB,2CAA6B;AAe7B,iDAAiD;AACjD,MAAM,KAAK,GAAG,IAAI,GAAG,CAAC,CAAC,OAAO,EAAE,WAAW,CAAC,CAAC,CAAC;AAE9C;;;;;GAKG;AACI,MAAM,eAAe,GAAG,KAAK,EAClC,IAAY,EACZ,IAAY,EACZ,EAAU,EACV,OAAe,EACa,EAAE;IAC9B,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;QACrB,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,cAAc,EAAE,OAAO,EAAE,wBAAwB,IAAI,GAAG,EAAE,CAAC;IACzF,CAAC;IAED,yEAAyE;IACzE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;QAC5E,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,YAAY,EAAE,OAAO,EAAE,yBAAyB,EAAE,CAAC;IACjF,CAAC;IAED,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,QAAQ,EAAE,IAAI,CAAC,CAAC;IAC/C,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,GAAG,EAAE,KAAK,CAAC,CAAC;IAE7C,0EAA0E;IAC1E,MAAM,SAAS,GAAG,MAAM,CAAC,UAAU,CAAC,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC;IACpD,MAAM,WAAW,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,GAAG,CAAC;IACjD,IAAI,CAAC,SAAS,IAAI,CAAC,WAAW,EAAE,CAAC;QAC/B,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,YAAY,EAAE,OAAO,EAAE,yBAAyB,EAAE,CAAC;IACjF,CAAC;IAED,IAAI,CAAC;QACH,MAAM,IAAI,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAC5C,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,CAAC;YACnB,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,WAAW,EAAE,OAAO,EAAE,wBAAwB,EAAE,CAAC;QAC/E,CAAC;IACH,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,WAAW,EAAE,OAAO,EAAE,wBAAwB,EAAE,CAAC;IAC/E,CAAC;IAED,IAAI,CAAC;QACH,MAAM,EAAE,CAAC,QAAQ,CAAC,SAAS,CAAC,MAAM,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC;QACrD,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC;IACtB,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,UAAU,EAAE,OAAO,EAAE,8BAA8B,EAAE,CAAC;IACpF,CAAC;AACH,CAAC,CAAC;AAxCW,QAAA,eAAe,mBAwC1B"}
1
+ {"version":3,"file":"config-write.js","sourceRoot":"","sources":["../../src/serve/config-write.ts"],"names":[],"mappings":"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"}
@@ -60,17 +60,19 @@ export interface ConfigFile {
60
60
  /** File content. */
61
61
  content: string;
62
62
  }
63
- /** The customizable config slice (hooks + templates). */
63
+ /** The customizable config slice (hooks + templates + workspace config.yaml). */
64
64
  export interface WorkspaceConfig {
65
65
  hooks: ConfigFile[];
66
66
  templates: ConfigFile[];
67
+ /** The structured workspace configuration `config/config.yaml`, if present. */
68
+ workspace: ConfigFile | null;
67
69
  }
68
70
  /** The complete workspace model. */
69
71
  export interface WorkspaceModel {
70
72
  plans: PlanSummary[];
71
73
  config: WorkspaceConfig;
72
74
  }
73
- /** Returns the config slice: hooks and templates under `config/`. */
75
+ /** Returns the config slice: hooks, templates, and config.yaml under `config/`. */
74
76
  export declare const getConfig: (root?: string) => WorkspaceConfig;
75
77
  /**
76
78
  * Returns the full detail for a single plan by its composite directory `name`
@@ -1 +1 @@
1
- {"version":3,"file":"workspace-model.d.ts","sourceRoot":"","sources":["../../src/serve/workspace-model.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAMH,OAAO,EAKL,eAAe,EAChB,MAAM,YAAY,CAAC;AACpB,OAAO,EAAyC,IAAI,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAE7F,YAAY,EAAE,IAAI,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAC3D,YAAY,EAAE,eAAe,EAAE,YAAY,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAEnF,iDAAiD;AACjD,MAAM,WAAW,iBAAiB;IAChC,MAAM,EAAE,MAAM,CAAC;IACf,uBAAuB,EAAE,OAAO,CAAC;CAClC;AAED,iDAAiD;AACjD,MAAM,WAAW,WAAW;IAC1B,EAAE,EAAE,MAAM,CAAC;IACX,uDAAuD;IACvD,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,SAAS,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,OAAO,CAAC;CACnB;AAED,0CAA0C;AAC1C,MAAM,WAAW,UAAW,SAAQ,WAAW;IAC7C,+CAA+C;IAC/C,IAAI,EAAE,MAAM,CAAC;IACb,2CAA2C;IAC3C,GAAG,EAAE,MAAM,CAAC;IACZ,oDAAoD;IACpD,OAAO,EAAE,MAAM,CAAC;IAChB,mCAAmC;IACnC,QAAQ,EAAE,eAAe,EAAE,CAAC;IAC5B,+EAA+E;IAC/E,OAAO,EAAE,iBAAiB,EAAE,CAAC;IAC7B,KAAK,EAAE,IAAI,EAAE,CAAC;IACd,MAAM,EAAE,KAAK,EAAE,CAAC;CACjB;AAED,qDAAqD;AACrD,MAAM,WAAW,UAAU;IACzB,gDAAgD;IAChD,EAAE,EAAE,MAAM,CAAC;IACX,iCAAiC;IACjC,IAAI,EAAE,MAAM,CAAC;IACb,6EAA6E;IAC7E,OAAO,EAAE,MAAM,CAAC;IAChB,oBAAoB;IACpB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,yDAAyD;AACzD,MAAM,WAAW,eAAe;IAC9B,KAAK,EAAE,UAAU,EAAE,CAAC;IACpB,SAAS,EAAE,UAAU,EAAE,CAAC;CACzB;AAED,oCAAoC;AACpC,MAAM,WAAW,cAAc;IAC7B,KAAK,EAAE,WAAW,EAAE,CAAC;IACrB,MAAM,EAAE,eAAe,CAAC;CACzB;AAoGD,qEAAqE;AACrE,eAAO,MAAM,SAAS,GAAI,OAAO,MAAM,KAAG,eAMzC,CAAC;AAEF;;;;;;GAMG;AACH,eAAO,MAAM,aAAa,GAAI,MAAM,MAAM,GAAG,SAAS,EAAE,MAAM,MAAM,KAAG,UAAU,GAAG,SAKnF,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,iBAAiB,GAAI,OAAO,MAAM,KAAG,cAOjD,CAAC"}
1
+ {"version":3,"file":"workspace-model.d.ts","sourceRoot":"","sources":["../../src/serve/workspace-model.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAMH,OAAO,EAKL,eAAe,EAChB,MAAM,YAAY,CAAC;AACpB,OAAO,EAAyC,IAAI,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAE7F,YAAY,EAAE,IAAI,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAC3D,YAAY,EAAE,eAAe,EAAE,YAAY,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAEnF,iDAAiD;AACjD,MAAM,WAAW,iBAAiB;IAChC,MAAM,EAAE,MAAM,CAAC;IACf,uBAAuB,EAAE,OAAO,CAAC;CAClC;AAED,iDAAiD;AACjD,MAAM,WAAW,WAAW;IAC1B,EAAE,EAAE,MAAM,CAAC;IACX,uDAAuD;IACvD,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,SAAS,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,OAAO,CAAC;CACnB;AAED,0CAA0C;AAC1C,MAAM,WAAW,UAAW,SAAQ,WAAW;IAC7C,+CAA+C;IAC/C,IAAI,EAAE,MAAM,CAAC;IACb,2CAA2C;IAC3C,GAAG,EAAE,MAAM,CAAC;IACZ,oDAAoD;IACpD,OAAO,EAAE,MAAM,CAAC;IAChB,mCAAmC;IACnC,QAAQ,EAAE,eAAe,EAAE,CAAC;IAC5B,+EAA+E;IAC/E,OAAO,EAAE,iBAAiB,EAAE,CAAC;IAC7B,KAAK,EAAE,IAAI,EAAE,CAAC;IACd,MAAM,EAAE,KAAK,EAAE,CAAC;CACjB;AAED,qDAAqD;AACrD,MAAM,WAAW,UAAU;IACzB,gDAAgD;IAChD,EAAE,EAAE,MAAM,CAAC;IACX,iCAAiC;IACjC,IAAI,EAAE,MAAM,CAAC;IACb,6EAA6E;IAC7E,OAAO,EAAE,MAAM,CAAC;IAChB,oBAAoB;IACpB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,iFAAiF;AACjF,MAAM,WAAW,eAAe;IAC9B,KAAK,EAAE,UAAU,EAAE,CAAC;IACpB,SAAS,EAAE,UAAU,EAAE,CAAC;IACxB,+EAA+E;IAC/E,SAAS,EAAE,UAAU,GAAG,IAAI,CAAC;CAC9B;AAED,oCAAoC;AACpC,MAAM,WAAW,cAAc;IAC7B,KAAK,EAAE,WAAW,EAAE,CAAC;IACrB,MAAM,EAAE,eAAe,CAAC;CACzB;AAgHD,mFAAmF;AACnF,eAAO,MAAM,SAAS,GAAI,OAAO,MAAM,KAAG,eAOzC,CAAC;AAEF;;;;;;GAMG;AACH,eAAO,MAAM,aAAa,GAAI,MAAM,MAAM,GAAG,SAAS,EAAE,MAAM,MAAM,KAAG,UAAU,GAAG,SAKnF,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,iBAAiB,GAAI,OAAO,MAAM,KAAG,cAOjD,CAAC"}
@@ -147,12 +147,25 @@ const enumerateConfigDir = (root, dir) => {
147
147
  };
148
148
  });
149
149
  };
150
- /** Returns the config slice: hooks and templates under `config/`. */
150
+ /** Reads `config/config.yaml` into a ConfigFile, or null when absent. */
151
+ const readWorkspaceConfigFile = (root) => {
152
+ const file = path.join(root, 'config', 'config.yaml');
153
+ let content;
154
+ try {
155
+ content = fs.readFileSync(file, 'utf8');
156
+ }
157
+ catch {
158
+ return null;
159
+ }
160
+ return { id: 'config', file, relPath: path.relative(root, file), content };
161
+ };
162
+ /** Returns the config slice: hooks, templates, and config.yaml under `config/`. */
151
163
  const getConfig = (root) => {
152
164
  const resolved = resolveRoot(root);
153
165
  return {
154
166
  hooks: enumerateConfigDir(resolved, path.join(resolved, 'config', 'hooks')),
155
167
  templates: enumerateConfigDir(resolved, path.join(resolved, 'config', 'templates')),
168
+ workspace: readWorkspaceConfigFile(resolved),
156
169
  };
157
170
  };
158
171
  exports.getConfig = getConfig;