@chiralkit/cli 0.1.0-alpha.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 (198) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +97 -0
  3. package/dist/add.d.ts +4 -0
  4. package/dist/add.js +118 -0
  5. package/dist/add.js.map +1 -0
  6. package/dist/agents/subprocess.d.ts +10 -0
  7. package/dist/agents/subprocess.js +43 -0
  8. package/dist/agents/subprocess.js.map +1 -0
  9. package/dist/automation/index.d.ts +14 -0
  10. package/dist/automation/index.js +129 -0
  11. package/dist/automation/index.js.map +1 -0
  12. package/dist/automation/install.d.ts +19 -0
  13. package/dist/automation/install.js +116 -0
  14. package/dist/automation/install.js.map +1 -0
  15. package/dist/automation/parsers/audit-report.d.ts +2 -0
  16. package/dist/automation/parsers/audit-report.js +42 -0
  17. package/dist/automation/parsers/audit-report.js.map +1 -0
  18. package/dist/automation/parsers/exit-code.d.ts +2 -0
  19. package/dist/automation/parsers/exit-code.js +6 -0
  20. package/dist/automation/parsers/exit-code.js.map +1 -0
  21. package/dist/automation/parsers/index.d.ts +10 -0
  22. package/dist/automation/parsers/index.js +13 -0
  23. package/dist/automation/parsers/index.js.map +1 -0
  24. package/dist/automation/parsers/observer-snapshot.d.ts +2 -0
  25. package/dist/automation/parsers/observer-snapshot.js +30 -0
  26. package/dist/automation/parsers/observer-snapshot.js.map +1 -0
  27. package/dist/automation/parsers/plan-report.d.ts +2 -0
  28. package/dist/automation/parsers/plan-report.js +53 -0
  29. package/dist/automation/parsers/plan-report.js.map +1 -0
  30. package/dist/automation/parsers/refinement-report.d.ts +2 -0
  31. package/dist/automation/parsers/refinement-report.js +149 -0
  32. package/dist/automation/parsers/refinement-report.js.map +1 -0
  33. package/dist/automation/parsers/types.d.ts +7 -0
  34. package/dist/automation/parsers/types.js +2 -0
  35. package/dist/automation/parsers/types.js.map +1 -0
  36. package/dist/automation/run.d.ts +25 -0
  37. package/dist/automation/run.js +68 -0
  38. package/dist/automation/run.js.map +1 -0
  39. package/dist/automation/schema.d.ts +130 -0
  40. package/dist/automation/schema.js +46 -0
  41. package/dist/automation/schema.js.map +1 -0
  42. package/dist/automation/status.d.ts +16 -0
  43. package/dist/automation/status.js +56 -0
  44. package/dist/automation/status.js.map +1 -0
  45. package/dist/automation/verifiers/index.d.ts +7 -0
  46. package/dist/automation/verifiers/index.js +5 -0
  47. package/dist/automation/verifiers/index.js.map +1 -0
  48. package/dist/automation/verifiers/shell.d.ts +5 -0
  49. package/dist/automation/verifiers/shell.js +17 -0
  50. package/dist/automation/verifiers/shell.js.map +1 -0
  51. package/dist/automation/verifiers/types.d.ts +12 -0
  52. package/dist/automation/verifiers/types.js +2 -0
  53. package/dist/automation/verifiers/types.js.map +1 -0
  54. package/dist/backlog/add.d.ts +10 -0
  55. package/dist/backlog/add.js +30 -0
  56. package/dist/backlog/add.js.map +1 -0
  57. package/dist/backlog/index.d.ts +1 -0
  58. package/dist/backlog/index.js +53 -0
  59. package/dist/backlog/index.js.map +1 -0
  60. package/dist/config.d.ts +26 -0
  61. package/dist/config.js +110 -0
  62. package/dist/config.js.map +1 -0
  63. package/dist/detect.d.ts +2 -0
  64. package/dist/detect.js +26 -0
  65. package/dist/detect.js.map +1 -0
  66. package/dist/doctor-invariants.d.ts +6 -0
  67. package/dist/doctor-invariants.js +50 -0
  68. package/dist/doctor-invariants.js.map +1 -0
  69. package/dist/doctor.d.ts +13 -0
  70. package/dist/doctor.js +281 -0
  71. package/dist/doctor.js.map +1 -0
  72. package/dist/generate.d.ts +1 -0
  73. package/dist/generate.js +275 -0
  74. package/dist/generate.js.map +1 -0
  75. package/dist/generator/agent.d.ts +8 -0
  76. package/dist/generator/agent.js +66 -0
  77. package/dist/generator/agent.js.map +1 -0
  78. package/dist/generator/api.d.ts +7 -0
  79. package/dist/generator/api.js +42 -0
  80. package/dist/generator/api.js.map +1 -0
  81. package/dist/generator/config.d.ts +23 -0
  82. package/dist/generator/config.js +121 -0
  83. package/dist/generator/config.js.map +1 -0
  84. package/dist/generator/parse-response.d.ts +5 -0
  85. package/dist/generator/parse-response.js +58 -0
  86. package/dist/generator/parse-response.js.map +1 -0
  87. package/dist/generator/prompt.d.ts +9 -0
  88. package/dist/generator/prompt.js +166 -0
  89. package/dist/generator/prompt.js.map +1 -0
  90. package/dist/generator/request.d.ts +17 -0
  91. package/dist/generator/request.js +15 -0
  92. package/dist/generator/request.js.map +1 -0
  93. package/dist/generators/prompts/stencil.md +45 -0
  94. package/dist/generators/prompts/vue.md +54 -0
  95. package/dist/index.d.ts +2 -0
  96. package/dist/index.js +102 -0
  97. package/dist/index.js.map +1 -0
  98. package/dist/init.d.ts +1 -0
  99. package/dist/init.js +89 -0
  100. package/dist/init.js.map +1 -0
  101. package/dist/installers/context.d.ts +4 -0
  102. package/dist/installers/context.js +120 -0
  103. package/dist/installers/context.js.map +1 -0
  104. package/dist/installers/index.d.ts +7 -0
  105. package/dist/installers/index.js +22 -0
  106. package/dist/installers/index.js.map +1 -0
  107. package/dist/installers/installer.d.ts +12 -0
  108. package/dist/installers/installer.js +30 -0
  109. package/dist/installers/installer.js.map +1 -0
  110. package/dist/installers/stencil/django-template/installer.d.ts +10 -0
  111. package/dist/installers/stencil/django-template/installer.js +77 -0
  112. package/dist/installers/stencil/django-template/installer.js.map +1 -0
  113. package/dist/installers/stencil/react/installer.d.ts +9 -0
  114. package/dist/installers/stencil/react/installer.js +22 -0
  115. package/dist/installers/stencil/react/installer.js.map +1 -0
  116. package/dist/installers/stencil/react/manifest.json +17 -0
  117. package/dist/installers/types.d.ts +24 -0
  118. package/dist/installers/types.js +2 -0
  119. package/dist/installers/types.js.map +1 -0
  120. package/dist/lock.d.ts +25 -0
  121. package/dist/lock.js +86 -0
  122. package/dist/lock.js.map +1 -0
  123. package/dist/manifest.d.ts +1 -0
  124. package/dist/manifest.js +93 -0
  125. package/dist/manifest.js.map +1 -0
  126. package/dist/pm/audit.d.ts +36 -0
  127. package/dist/pm/audit.js +147 -0
  128. package/dist/pm/audit.js.map +1 -0
  129. package/dist/pm/backlog.d.ts +3 -0
  130. package/dist/pm/backlog.js +123 -0
  131. package/dist/pm/backlog.js.map +1 -0
  132. package/dist/pm/brief.d.ts +4 -0
  133. package/dist/pm/brief.js +18 -0
  134. package/dist/pm/brief.js.map +1 -0
  135. package/dist/pm/git.d.ts +3 -0
  136. package/dist/pm/git.js +43 -0
  137. package/dist/pm/git.js.map +1 -0
  138. package/dist/pm/grid.d.ts +8 -0
  139. package/dist/pm/grid.js +16 -0
  140. package/dist/pm/grid.js.map +1 -0
  141. package/dist/pm/index.d.ts +25 -0
  142. package/dist/pm/index.js +199 -0
  143. package/dist/pm/index.js.map +1 -0
  144. package/dist/pm/observe.d.ts +55 -0
  145. package/dist/pm/observe.js +177 -0
  146. package/dist/pm/observe.js.map +1 -0
  147. package/dist/pm/plan.d.ts +54 -0
  148. package/dist/pm/plan.js +151 -0
  149. package/dist/pm/plan.js.map +1 -0
  150. package/dist/pm/refinement-worktree.d.ts +31 -0
  151. package/dist/pm/refinement-worktree.js +160 -0
  152. package/dist/pm/refinement-worktree.js.map +1 -0
  153. package/dist/pm/refinement.d.ts +79 -0
  154. package/dist/pm/refinement.js +326 -0
  155. package/dist/pm/refinement.js.map +1 -0
  156. package/dist/pm/render.d.ts +2 -0
  157. package/dist/pm/render.js +39 -0
  158. package/dist/pm/render.js.map +1 -0
  159. package/dist/pm/roadmap-rings.d.ts +7 -0
  160. package/dist/pm/roadmap-rings.js +31 -0
  161. package/dist/pm/roadmap-rings.js.map +1 -0
  162. package/dist/pm/roadmap.d.ts +2 -0
  163. package/dist/pm/roadmap.js +118 -0
  164. package/dist/pm/roadmap.js.map +1 -0
  165. package/dist/pm/snapshot.d.ts +10 -0
  166. package/dist/pm/snapshot.js +129 -0
  167. package/dist/pm/snapshot.js.map +1 -0
  168. package/dist/pm/types.d.ts +99 -0
  169. package/dist/pm/types.js +29 -0
  170. package/dist/pm/types.js.map +1 -0
  171. package/dist/registry-layout.d.ts +18 -0
  172. package/dist/registry-layout.js +122 -0
  173. package/dist/registry-layout.js.map +1 -0
  174. package/dist/scaffold-registry.d.ts +10 -0
  175. package/dist/scaffold-registry.js +283 -0
  176. package/dist/scaffold-registry.js.map +1 -0
  177. package/dist/scaffold.d.ts +1 -0
  178. package/dist/scaffold.js +32 -0
  179. package/dist/scaffold.js.map +1 -0
  180. package/dist/spec-from-react.d.ts +11 -0
  181. package/dist/spec-from-react.js +522 -0
  182. package/dist/spec-from-react.js.map +1 -0
  183. package/dist/spec-from-stencil.d.ts +7 -0
  184. package/dist/spec-from-stencil.js +275 -0
  185. package/dist/spec-from-stencil.js.map +1 -0
  186. package/dist/spec.d.ts +1 -0
  187. package/dist/spec.js +60 -0
  188. package/dist/spec.js.map +1 -0
  189. package/dist/tokens-map.d.ts +11 -0
  190. package/dist/tokens-map.js +43 -0
  191. package/dist/tokens-map.js.map +1 -0
  192. package/dist/update.d.ts +39 -0
  193. package/dist/update.js +490 -0
  194. package/dist/update.js.map +1 -0
  195. package/dist/workspace-init.d.ts +9 -0
  196. package/dist/workspace-init.js +119 -0
  197. package/dist/workspace-init.js.map +1 -0
  198. package/package.json +53 -0
package/dist/doctor.js ADDED
@@ -0,0 +1,281 @@
1
+ import { readdir, readFile, realpath } from "node:fs/promises";
2
+ import { join, relative, resolve, sep } from "node:path";
3
+ import { z } from "zod";
4
+ import { parseComponentContract, parseAgentCapabilities, parseAgentSpec, parseModule, } from "@chiralkit/registry-schema";
5
+ import { resolveKitsRoot } from "@chiralkit/kits";
6
+ import { MODULE_ENVELOPE_FILENAME, walkAllKitRegistries, } from "./registry-layout.js";
7
+ import { runInvariants } from "./doctor-invariants.js";
8
+ function ok(r, msg) {
9
+ r.oks.push(msg);
10
+ }
11
+ function warn(r, msg) {
12
+ r.warnings.push(msg);
13
+ }
14
+ function err(r, msg) {
15
+ r.errors.push(msg);
16
+ }
17
+ const uiLayoutContractSchema = z.object({
18
+ version: z.string().min(1),
19
+ implementation: z.object({
20
+ files: z.array(z.string().min(1)).min(1),
21
+ }).passthrough(),
22
+ }).passthrough();
23
+ async function validateUiLayoutFiles(repoRoot, files) {
24
+ const problems = [];
25
+ const resolvedRepoRoot = resolve(repoRoot);
26
+ for (const declared of files) {
27
+ const target = resolve(resolvedRepoRoot, declared);
28
+ const relativeTarget = relative(resolvedRepoRoot, target);
29
+ if (relativeTarget === "" || relativeTarget === ".." || relativeTarget.startsWith(`..${sep}`)) {
30
+ problems.push(`${declared} escapes repository boundary`);
31
+ continue;
32
+ }
33
+ try {
34
+ const [realRepoRoot, realTarget] = await Promise.all([
35
+ realpath(resolvedRepoRoot),
36
+ realpath(target),
37
+ ]);
38
+ const realRelativeTarget = relative(realRepoRoot, realTarget);
39
+ if (realRelativeTarget === "" ||
40
+ realRelativeTarget === ".." ||
41
+ realRelativeTarget.startsWith(`..${sep}`)) {
42
+ problems.push(`${declared} escapes repository boundary`);
43
+ continue;
44
+ }
45
+ await readFile(realTarget, "utf8");
46
+ }
47
+ catch {
48
+ problems.push(`${declared} is not readable`);
49
+ }
50
+ }
51
+ return problems;
52
+ }
53
+ async function checkEnvelope(label, moduleDir, r) {
54
+ const path = join(moduleDir, MODULE_ENVELOPE_FILENAME);
55
+ try {
56
+ const raw = await readFile(path, "utf8");
57
+ const parsed = parseModule(JSON.parse(raw));
58
+ ok(r, `envelope: ${label} — level=${parsed.metadata.level}, type=${parsed.type}`);
59
+ return parsed;
60
+ }
61
+ catch (e) {
62
+ err(r, `envelope: ${label} — ${e.message}`);
63
+ return null;
64
+ }
65
+ }
66
+ async function checkSpec(label, moduleDir, envelope, repoRoot, r) {
67
+ if (envelope?.type === "agent") {
68
+ let spec;
69
+ try {
70
+ spec = parseAgentSpec(envelope.spec);
71
+ }
72
+ catch (e) {
73
+ err(r, `agent: ${label} — ${e.message}`);
74
+ return null;
75
+ }
76
+ const result = await validateAgentFiles(moduleDir, spec);
77
+ for (const problem of result.problems)
78
+ err(r, `agent: ${label} — ${problem}`);
79
+ for (const warning of result.warnings)
80
+ warn(r, `agent: ${label} — ${warning}`);
81
+ if (result.problems.length === 0)
82
+ ok(r, `agent: ${label} — contract and declared agent files readable`);
83
+ return null;
84
+ }
85
+ const path = join(moduleDir, "spec.json");
86
+ let raw;
87
+ try {
88
+ raw = await readFile(path, "utf8");
89
+ }
90
+ catch {
91
+ warn(r, `spec.json: ${label} — file not found (module has no contract yet)`);
92
+ return null;
93
+ }
94
+ if (envelope?.type === "ui-layout") {
95
+ let contract;
96
+ try {
97
+ contract = uiLayoutContractSchema.parse(JSON.parse(raw));
98
+ }
99
+ catch (e) {
100
+ err(r, `ui-layout: ${label} — ${e.message}`);
101
+ return null;
102
+ }
103
+ const problems = await validateUiLayoutFiles(repoRoot, contract.implementation.files);
104
+ for (const problem of problems)
105
+ err(r, `ui-layout: ${label} — ${problem}`);
106
+ if (problems.length === 0) {
107
+ ok(r, `ui-layout: ${label} — contract and implementation files readable`);
108
+ }
109
+ return null;
110
+ }
111
+ let parsed;
112
+ try {
113
+ parsed = parseComponentContract(JSON.parse(raw));
114
+ }
115
+ catch (e) {
116
+ err(r, `spec.json: ${label} — ${e.message}`);
117
+ return null;
118
+ }
119
+ ok(r, `spec.json: ${label} v${parsed.version}`);
120
+ // Level conformance: only meaningful for ui-component today. L1 (primitive)
121
+ // shouldn't declare a state_machine; L2 (pattern) should. Other levels
122
+ // have no conformance rule at this layer.
123
+ if (envelope?.type === "ui-component") {
124
+ const hasStateMachine = parsed.state_machine !== undefined;
125
+ if (envelope.metadata.level === 1 && hasStateMachine) {
126
+ warn(r, `level conformance: ${label} — L1 (primitive) with state_machine (usually a pattern in disguise; check?)`);
127
+ }
128
+ if (envelope.metadata.level === 2 && !hasStateMachine) {
129
+ warn(r, `level conformance: ${label} — L2 (pattern) without state_machine (usually pattern behavior deserves explicit modeling)`);
130
+ }
131
+ }
132
+ return parsed;
133
+ }
134
+ async function readDeclaredAgentFile(moduleDir, declared) {
135
+ if (!declared)
136
+ return { problem: "agent file path is missing" };
137
+ const target = resolve(moduleDir, declared);
138
+ const rel = relative(resolve(moduleDir), target);
139
+ if (rel.startsWith("..") || rel === "") {
140
+ return { problem: `${declared} escapes module directory` };
141
+ }
142
+ try {
143
+ const [realModuleDir, realTarget] = await Promise.all([
144
+ realpath(moduleDir),
145
+ realpath(target),
146
+ ]);
147
+ const realRel = relative(realModuleDir, realTarget);
148
+ if (realRel.startsWith("..") || realRel === "") {
149
+ return { problem: `${declared} escapes module directory` };
150
+ }
151
+ return { content: await readFile(realTarget, "utf8") };
152
+ }
153
+ catch {
154
+ return { problem: `${declared} is not readable` };
155
+ }
156
+ }
157
+ export async function validateAgentFiles(moduleDir, spec) {
158
+ const problems = [];
159
+ const warnings = [];
160
+ if ("runtime_targets" in spec) {
161
+ const declaredPaths = [
162
+ spec.contract,
163
+ ...spec.runtime_targets.map((runtime) => spec.implementations[runtime]?.entry ?? ""),
164
+ ];
165
+ for (const declared of declaredPaths) {
166
+ const file = await readDeclaredAgentFile(moduleDir, declared);
167
+ if (file.problem)
168
+ problems.push(file.problem);
169
+ }
170
+ warnings.push("legacy runtime-target agent locator is deprecated; migrate to entry + capabilities");
171
+ return { problems, warnings };
172
+ }
173
+ for (const declared of [
174
+ spec.entry,
175
+ spec.contract,
176
+ ...Object.values(spec.adapters ?? {}).map((adapter) => adapter.entry),
177
+ ]) {
178
+ const file = await readDeclaredAgentFile(moduleDir, declared);
179
+ if (file.problem)
180
+ problems.push(file.problem);
181
+ }
182
+ const capabilitiesFile = await readDeclaredAgentFile(moduleDir, spec.capabilities);
183
+ if (capabilitiesFile.problem) {
184
+ problems.push(capabilitiesFile.problem);
185
+ }
186
+ else {
187
+ try {
188
+ parseAgentCapabilities(JSON.parse(capabilitiesFile.content ?? ""));
189
+ }
190
+ catch (e) {
191
+ problems.push(`${spec.capabilities} is invalid: ${e.message}`);
192
+ }
193
+ }
194
+ return { problems, warnings };
195
+ }
196
+ async function checkImplementations(label, moduleDir, spec, r) {
197
+ const implRoot = join(moduleDir, "implementations");
198
+ let stacks;
199
+ try {
200
+ stacks = (await readdir(implRoot, { withFileTypes: true }))
201
+ .filter((e) => e.isDirectory())
202
+ .map((e) => e.name)
203
+ .sort();
204
+ }
205
+ catch {
206
+ warn(r, `implementations: ${label} — no implementations/ directory`);
207
+ return;
208
+ }
209
+ if (stacks.length === 0) {
210
+ warn(r, `implementations: ${label} — implementations/ directory is empty`);
211
+ return;
212
+ }
213
+ for (const stack of stacks) {
214
+ const genPath = join(implRoot, stack, "generation.json");
215
+ let gen;
216
+ try {
217
+ gen = JSON.parse(await readFile(genPath, "utf8"));
218
+ }
219
+ catch {
220
+ warn(r, `implementations: ${label}/${stack} — no generation.json (implementation not tracked)`);
221
+ continue;
222
+ }
223
+ if (spec &&
224
+ gen.generated_from_spec_version !== null &&
225
+ gen.generated_from_spec_version !== spec.version) {
226
+ warn(r, `version drift: ${label}/${stack} — generated from spec v${gen.generated_from_spec_version}, current spec is v${spec.version}${gen.manually_edited ? " (manually_edited: true, will not regenerate without --force)" : ""}`);
227
+ }
228
+ else {
229
+ ok(r, `implementation: ${label}/${stack}${gen.manually_edited ? " (hand-authored)" : ` (from spec v${gen.generated_from_spec_version})`}`);
230
+ }
231
+ }
232
+ }
233
+ function printReport(r) {
234
+ for (const line of r.oks)
235
+ console.log(`[OK] ${line}`);
236
+ for (const line of r.warnings)
237
+ console.log(`[WARN] ${line}`);
238
+ for (const line of r.errors)
239
+ console.error(`[ERR] ${line}`);
240
+ console.log("");
241
+ console.log(`${r.errors.length} error(s), ${r.warnings.length} warning(s), ${r.oks.length} ok`);
242
+ }
243
+ // Builds the doctor report for a given registry root, with no printing or
244
+ // process exit — the I/O layer that both `runDoctor` (CLI entry) and tests
245
+ // (staging a tmp registry) drive. Walks each module, checks its envelope +
246
+ // spec (plus declared implementation files for ui-layout, and implementation
247
+ // metadata for ui-component), then runs the pure
248
+ // cross-module chirality invariants over the collected envelopes.
249
+ export async function collectDoctorReport(root) {
250
+ const r = { errors: [], warnings: [], oks: [] };
251
+ const modules = await walkAllKitRegistries(root);
252
+ if (modules.length === 0) {
253
+ warn(r, `registry: no modules found at ${root}`);
254
+ return r;
255
+ }
256
+ ok(r, `registry: ${modules.length} module(s) found at ${root}`);
257
+ const repoRoot = resolve(root, "..");
258
+ const envelopes = [];
259
+ for (const m of modules) {
260
+ const label = `${m.family}/${m.name}`;
261
+ const envelope = await checkEnvelope(label, m.moduleDir, r);
262
+ const spec = await checkSpec(label, m.moduleDir, envelope, repoRoot, r);
263
+ if (envelope?.type === "ui-component") {
264
+ await checkImplementations(label, m.moduleDir, spec, r);
265
+ }
266
+ if (envelope)
267
+ envelopes.push(envelope);
268
+ }
269
+ const invariants = runInvariants(envelopes);
270
+ for (const line of invariants.oks)
271
+ ok(r, line);
272
+ for (const line of invariants.errors)
273
+ err(r, line);
274
+ return r;
275
+ }
276
+ export async function runDoctor() {
277
+ const r = await collectDoctorReport(resolveKitsRoot());
278
+ printReport(r);
279
+ process.exit(r.errors.length > 0 ? 1 : 0);
280
+ }
281
+ //# sourceMappingURL=doctor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"doctor.js","sourceRoot":"","sources":["../src/doctor.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ export declare function runGenerate(argv: string[]): Promise<void>;
@@ -0,0 +1,275 @@
1
+ import { readdir, readFile, stat, writeFile } from "node:fs/promises";
2
+ import { join } from "node:path";
3
+ import { parseComponentContract, } from "@chiralkit/registry-schema";
4
+ import { resolveKitsRoot } from "@chiralkit/kits";
5
+ import { isAgentConfig, loadGeneratorConfig, resolveModel, } from "./generator/config.js";
6
+ import { composeRequest } from "./generator/prompt.js";
7
+ import { runApi, serializeForApi } from "./generator/api.js";
8
+ import { runAgent, serializeForAgent } from "./generator/agent.js";
9
+ import { parseResponse } from "./generator/parse-response.js";
10
+ import { TYPE_TO_FAMILY, parseTypeFlag, walkAllKitRegistries } from "./registry-layout.js";
11
+ const kitsRoot = resolveKitsRoot();
12
+ // Resolves a module name to its registry/<family>/<name>/ directory across
13
+ // every kit registry, family- and kit-agnostically — same lookup shape as
14
+ // add.ts's resolveModuleRef. `type` narrows the search up front once a name
15
+ // collides across families.
16
+ async function resolveComponentDir(component, type) {
17
+ const modules = await walkAllKitRegistries(kitsRoot);
18
+ const matches = modules.filter((m) => m.name === component && (type === undefined || m.family === TYPE_TO_FAMILY[type]));
19
+ if (matches.length === 0) {
20
+ throw new Error(`generate: no such module '${component}' under ${kitsRoot}.`);
21
+ }
22
+ if (matches.length > 1) {
23
+ const families = matches.map((m) => m.family).join(", ");
24
+ throw new Error(`generate: '${component}' exists in multiple families (${families}). Pass --type <t> to disambiguate.`);
25
+ }
26
+ return matches[0].moduleDir;
27
+ }
28
+ export async function runGenerate(argv) {
29
+ const opts = parseArgs(argv);
30
+ const componentDir = await resolveComponentDir(opts.component, opts.type);
31
+ const spec = await loadSpec(componentDir, opts.component);
32
+ const implRoot = join(componentDir, "implementations");
33
+ const stacks = await resolveStacks(implRoot, opts.stack);
34
+ if (stacks.length === 0) {
35
+ console.error(`generate: no implementations to generate for '${opts.component}'.` +
36
+ ` Pass --stack <name> to create a new stack.`);
37
+ process.exit(1);
38
+ }
39
+ const config = await loadGeneratorConfig();
40
+ const modelId = isAgentConfig(config)
41
+ ? config.generator.agent
42
+ : config.generator.model;
43
+ let hardFailures = 0;
44
+ for (const stack of stacks) {
45
+ try {
46
+ await generateForStack({
47
+ component: opts.component,
48
+ componentDir,
49
+ spec,
50
+ stack,
51
+ config,
52
+ modelId,
53
+ dryRun: opts.dryRun,
54
+ debugPrompt: opts.debugPrompt,
55
+ force: opts.force,
56
+ });
57
+ }
58
+ catch (e) {
59
+ hardFailures++;
60
+ console.error(`[FAIL] ${opts.component}/${stack}: ${e.message}`);
61
+ }
62
+ }
63
+ process.exit(hardFailures > 0 ? 1 : 0);
64
+ }
65
+ function parseArgs(argv) {
66
+ const positional = [];
67
+ const opts = {
68
+ dryRun: false,
69
+ debugPrompt: false,
70
+ force: false,
71
+ };
72
+ for (let i = 0; i < argv.length; i++) {
73
+ const a = argv[i];
74
+ if (a === "--dry-run")
75
+ opts.dryRun = true;
76
+ else if (a === "--debug-prompt")
77
+ opts.debugPrompt = true;
78
+ else if (a === "--force")
79
+ opts.force = true;
80
+ else if (a === "--stack") {
81
+ const next = argv[++i];
82
+ if (!next) {
83
+ console.error("generate: --stack requires a value");
84
+ process.exit(1);
85
+ }
86
+ opts.stack = next;
87
+ }
88
+ else if (a === "--type") {
89
+ i++; // consume the value here; parseTypeFlag below re-scans argv for validation.
90
+ }
91
+ else if (a.startsWith("--")) {
92
+ console.error(`generate: unknown flag '${a}'`);
93
+ process.exit(1);
94
+ }
95
+ else {
96
+ positional.push(a);
97
+ }
98
+ }
99
+ const component = positional[0];
100
+ if (!component) {
101
+ console.error("generate: missing component name");
102
+ console.error("Usage: chiralkit generate <component> [--stack <name>] [--type <t>] [--dry-run] [--debug-prompt] [--force]");
103
+ process.exit(1);
104
+ }
105
+ const type = parseTypeFlag(argv, (msg) => {
106
+ console.error(`generate: ${msg}`);
107
+ process.exit(1);
108
+ });
109
+ return {
110
+ component,
111
+ stack: opts.stack,
112
+ type,
113
+ dryRun: opts.dryRun ?? false,
114
+ debugPrompt: opts.debugPrompt ?? false,
115
+ force: opts.force ?? false,
116
+ };
117
+ }
118
+ async function loadSpec(componentDir, name) {
119
+ const path = join(componentDir, "spec.json");
120
+ let raw;
121
+ try {
122
+ raw = await readFile(path, "utf8");
123
+ }
124
+ catch {
125
+ throw new Error(`generate: no spec.json for '${name}' at ${path}. Run 'chiralkit spec from-stencil ${name}' or author one by hand.`);
126
+ }
127
+ try {
128
+ return parseComponentContract(JSON.parse(raw));
129
+ }
130
+ catch (e) {
131
+ throw new Error(`generate: spec.json for '${name}' failed validation: ${e.message}`);
132
+ }
133
+ }
134
+ async function resolveStacks(implRoot, explicit) {
135
+ if (explicit)
136
+ return [explicit];
137
+ try {
138
+ const entries = await readdir(implRoot, { withFileTypes: true });
139
+ return entries
140
+ .filter((e) => e.isDirectory())
141
+ .map((e) => e.name)
142
+ .sort();
143
+ }
144
+ catch {
145
+ return [];
146
+ }
147
+ }
148
+ // Two-level walk across every registry/<family>/<name>/ module (siblings
149
+ // across families are fair game as few-shots, not just siblings within the
150
+ // same family — a design-system component and a hand-authored recipe
151
+ // implementation for the same stack are equally useful examples).
152
+ async function pickFewShots(component, stack) {
153
+ const modules = await walkAllKitRegistries(kitsRoot);
154
+ const candidates = [];
155
+ for (const m of modules) {
156
+ if (m.name === component)
157
+ continue;
158
+ const stackDir = join(m.moduleDir, "implementations", stack);
159
+ try {
160
+ const files = await readdir(stackDir);
161
+ const pick = files.find((f) => f !== "generation.json" && !f.endsWith(".md"));
162
+ if (pick)
163
+ candidates.push(join(stackDir, pick));
164
+ }
165
+ catch {
166
+ // no implementations/<stack>/ for this sibling — skip
167
+ }
168
+ if (candidates.length >= 2)
169
+ break;
170
+ }
171
+ return candidates;
172
+ }
173
+ async function generateForStack(input) {
174
+ const stackDir = join(input.componentDir, "implementations", input.stack);
175
+ const genPath = join(stackDir, "generation.json");
176
+ const existingGen = await readGeneration(genPath);
177
+ if (existingGen &&
178
+ existingGen.manually_edited &&
179
+ !input.force &&
180
+ !input.debugPrompt) {
181
+ console.warn(`[SKIP] ${input.component}/${input.stack}: manually_edited=true (pass --force to overwrite)`);
182
+ return;
183
+ }
184
+ const fewShotPaths = await pickFewShots(input.component, input.stack);
185
+ const request = await composeRequest({
186
+ spec: input.spec,
187
+ stack: input.stack,
188
+ targetComponent: input.component,
189
+ fewShotPaths,
190
+ });
191
+ if (input.debugPrompt) {
192
+ dumpDebugPrompt(input.config, request, input.component, input.stack);
193
+ return;
194
+ }
195
+ console.log(`[GEN] ${input.component}/${input.stack}: dispatching to ${input.modelId}...`);
196
+ const text = await callProvider(input.config, request);
197
+ if (input.dryRun) {
198
+ console.log(`--- response (${input.component}/${input.stack}) ---`);
199
+ console.log(text);
200
+ console.log(`--- end response ---`);
201
+ console.log(`[DRY] ${input.component}/${input.stack}: no files written`);
202
+ return;
203
+ }
204
+ const files = parseResponse(text);
205
+ await ensureDir(stackDir);
206
+ for (const file of files) {
207
+ await writeParsedFile(stackDir, file, input.stack);
208
+ }
209
+ const gen = {
210
+ generated_from_spec_version: input.spec.version,
211
+ generated_at: new Date().toISOString(),
212
+ generator_model: input.modelId,
213
+ manually_edited: false,
214
+ };
215
+ await writeFile(genPath, JSON.stringify(gen, null, 2) + "\n", "utf8");
216
+ console.log(`[OK] ${input.component}/${input.stack}: wrote ${files.length} file(s) + generation.json`);
217
+ }
218
+ async function callProvider(config, request) {
219
+ if (isAgentConfig(config)) {
220
+ return runAgent(config.generator.agent, request);
221
+ }
222
+ const model = await resolveModel(config);
223
+ return runApi(model, request);
224
+ }
225
+ function dumpDebugPrompt(config, request, component, stack) {
226
+ console.log(`--- debug-prompt (${component}/${stack}) ---`);
227
+ if (isAgentConfig(config)) {
228
+ console.log(`mode: agent (${config.generator.agent})`);
229
+ console.log(`--- stdin that would be piped to the subprocess ---`);
230
+ console.log(serializeForAgent(request));
231
+ }
232
+ else {
233
+ console.log(`mode: api (${config.generator.model})`);
234
+ console.log(`--- messages that would be sent to generateText ---`);
235
+ console.log(JSON.stringify(serializeForApi(request), null, 2));
236
+ }
237
+ console.log(`--- end debug-prompt ---`);
238
+ }
239
+ async function readGeneration(path) {
240
+ try {
241
+ const raw = await readFile(path, "utf8");
242
+ return JSON.parse(raw);
243
+ }
244
+ catch {
245
+ return null;
246
+ }
247
+ }
248
+ async function ensureDir(path) {
249
+ try {
250
+ await stat(path);
251
+ }
252
+ catch {
253
+ const { mkdir } = await import("node:fs/promises");
254
+ await mkdir(path, { recursive: true });
255
+ }
256
+ }
257
+ async function writeParsedFile(stackDir, file, stack) {
258
+ const full = join(stackDir, file.path);
259
+ if (stack === "stencil") {
260
+ try {
261
+ await stat(full);
262
+ }
263
+ catch {
264
+ console.warn(`[WARN] stencil: '${file.path}' did not exist before generation. ` +
265
+ `A real file is being created at ${full}, but Stencil's srcDir is ` +
266
+ `packages/design-system/src/components/. Move it there and add a ` +
267
+ `symlink under implementations/stencil/ to make Stencil compile it.`);
268
+ }
269
+ }
270
+ const normalized = file.content.endsWith("\n")
271
+ ? file.content
272
+ : file.content + "\n";
273
+ await writeFile(full, normalized, "utf8");
274
+ }
275
+ //# sourceMappingURL=generate.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generate.js","sourceRoot":"","sources":["../src/generate.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ import type { GenerationRequest } from "./request.js";
2
+ export type AgentName = "claude-code";
3
+ export interface RunAgentOptions {
4
+ timeoutMs?: number;
5
+ onStderr?: (chunk: string) => void;
6
+ }
7
+ export declare function serializeForAgent(req: GenerationRequest): string;
8
+ export declare function runAgent(agent: AgentName, req: GenerationRequest, opts?: RunAgentOptions): Promise<string>;
@@ -0,0 +1,66 @@
1
+ import { runLocalAgent } from "../agents/subprocess.js";
2
+ import { renderFewShotsBlock } from "./request.js";
3
+ const DEFAULT_TIMEOUT_MS = 5 * 60 * 1000;
4
+ export function serializeForAgent(req) {
5
+ return [
6
+ "--- PREAMBLE ---",
7
+ req.preamble,
8
+ "",
9
+ "--- SPEC ---",
10
+ req.spec,
11
+ "",
12
+ "--- REQUIREMENTS ---",
13
+ req.derivedRequirements,
14
+ "",
15
+ "--- EXAMPLES ---",
16
+ renderFewShotsBlock(req.fewShots),
17
+ "",
18
+ "--- OUTPUT FORMAT ---",
19
+ req.outputFormat,
20
+ "",
21
+ `Generate the ${req.targetStack} implementation of ${req.targetComponent}.`,
22
+ ].join("\n");
23
+ }
24
+ // Dispatch table for supported agents. Adding another agent = one entry.
25
+ function resolveAgent(agent) {
26
+ // Environment overrides exist for tests + power users; production callers
27
+ // pass the plain agent name and get the canonical invocation.
28
+ const envBin = process.env["CHIRALKIT_CLAUDE_BIN"];
29
+ const envArgsRaw = process.env["CHIRALKIT_CLAUDE_ARGS"];
30
+ if (envBin) {
31
+ const args = envArgsRaw ? JSON.parse(envArgsRaw) : [];
32
+ return { bin: envBin, args };
33
+ }
34
+ switch (agent) {
35
+ case "claude-code":
36
+ // `claude -p` runs headless print mode, reading the prompt from stdin.
37
+ return { bin: "claude", args: ["-p"] };
38
+ default: {
39
+ const _exhaustive = agent;
40
+ throw new Error(`generator: unknown agent '${_exhaustive}'`);
41
+ }
42
+ }
43
+ }
44
+ export async function runAgent(agent, req, opts = {}) {
45
+ const { bin, args } = resolveAgent(agent);
46
+ const timeoutMs = opts.timeoutMs ?? DEFAULT_TIMEOUT_MS;
47
+ const onStderr = opts.onStderr ??
48
+ ((chunk) => process.stderr.write(prefixStderr(chunk)));
49
+ try {
50
+ return await runLocalAgent({ bin, args, label: `generator: agent '${agent}'` }, serializeForAgent(req), { timeoutMs, onStderr });
51
+ }
52
+ catch (error) {
53
+ const message = error.message;
54
+ if (message.includes("not found")) {
55
+ throw new Error(`generator: agent '${agent}' is not installed (binary '${bin}' not found on PATH).\nInstall Claude Code: https://docs.claude.com/claude-code/quickstart\nOr switch to API mode by setting generator.model in registry/generator.config.json.`);
56
+ }
57
+ throw error;
58
+ }
59
+ }
60
+ function prefixStderr(chunk) {
61
+ return chunk
62
+ .split(/(\r?\n)/)
63
+ .map((part) => (/\r?\n/.test(part) || part === "" ? part : `[agent] ${part}`))
64
+ .join("");
65
+ }
66
+ //# sourceMappingURL=agent.js.map