copperhead 0.6.0 → 0.8.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 (118) hide show
  1. package/README.md +36 -4
  2. package/dist/agent/animate.js +76 -0
  3. package/dist/agent/animate.js.map +1 -0
  4. package/dist/agent/box.js +89 -0
  5. package/dist/agent/box.js.map +1 -0
  6. package/dist/agent/dock-renderer.js +173 -0
  7. package/dist/agent/dock-renderer.js.map +1 -0
  8. package/dist/agent/logo.js +21 -0
  9. package/dist/agent/logo.js.map +1 -0
  10. package/dist/agent/loop.js +130 -18
  11. package/dist/agent/loop.js.map +1 -1
  12. package/dist/agent/prompts.js +2 -1
  13. package/dist/agent/prompts.js.map +1 -1
  14. package/dist/agent/providers/claude-code.js +85 -116
  15. package/dist/agent/providers/claude-code.js.map +1 -1
  16. package/dist/agent/providers/cursor.js +317 -0
  17. package/dist/agent/providers/cursor.js.map +1 -0
  18. package/dist/agent/providers/tool-protocol.js +205 -0
  19. package/dist/agent/providers/tool-protocol.js.map +1 -0
  20. package/dist/agent/recovery.js +148 -0
  21. package/dist/agent/recovery.js.map +1 -0
  22. package/dist/agent/render.js +44 -12
  23. package/dist/agent/render.js.map +1 -1
  24. package/dist/agent/response-cache.js +81 -0
  25. package/dist/agent/response-cache.js.map +1 -0
  26. package/dist/agent/runmeta.js +4 -5
  27. package/dist/agent/runmeta.js.map +1 -1
  28. package/dist/agent/theme.js +84 -0
  29. package/dist/agent/theme.js.map +1 -0
  30. package/dist/agent/tools.js +61 -4
  31. package/dist/agent/tools.js.map +1 -1
  32. package/dist/agent/transcript.js.map +1 -1
  33. package/dist/cli.js +134 -13
  34. package/dist/cli.js.map +1 -1
  35. package/dist/commands/create.js +482 -38
  36. package/dist/commands/create.js.map +1 -1
  37. package/dist/commands/demo.js +146 -0
  38. package/dist/commands/demo.js.map +1 -0
  39. package/dist/commands/doctor.js +240 -0
  40. package/dist/commands/doctor.js.map +1 -0
  41. package/dist/commands/repl-inspect.js +342 -0
  42. package/dist/commands/repl-inspect.js.map +1 -0
  43. package/dist/commands/repl.js +618 -0
  44. package/dist/commands/repl.js.map +1 -0
  45. package/dist/config.js +24 -2
  46. package/dist/config.js.map +1 -1
  47. package/dist/kicad/bootstrap.js +166 -0
  48. package/dist/kicad/bootstrap.js.map +1 -0
  49. package/dist/kicad/cli.js +126 -6
  50. package/dist/kicad/cli.js.map +1 -1
  51. package/dist/kicad/spice.js +306 -0
  52. package/dist/kicad/spice.js.map +1 -0
  53. package/dist/kicad/symlib.js +228 -0
  54. package/dist/kicad/symlib.js.map +1 -0
  55. package/dist/memory/bom-table.js +193 -22
  56. package/dist/memory/bom-table.js.map +1 -1
  57. package/dist/memory/drift.js +33 -11
  58. package/dist/memory/drift.js.map +1 -1
  59. package/dist/util/cli-args.js +35 -0
  60. package/dist/util/cli-args.js.map +1 -0
  61. package/dist/util/dock.js +155 -0
  62. package/dist/util/dock.js.map +1 -0
  63. package/dist/util/git.js +165 -4
  64. package/dist/util/git.js.map +1 -1
  65. package/dist/util/live-prompt.js +542 -0
  66. package/dist/util/live-prompt.js.map +1 -0
  67. package/dist/util/paths.js +9 -0
  68. package/dist/util/paths.js.map +1 -1
  69. package/dist/util/preflight.js +37 -0
  70. package/dist/util/preflight.js.map +1 -1
  71. package/dist/util/retry.js +23 -0
  72. package/dist/util/retry.js.map +1 -1
  73. package/dist/util/select.js +172 -0
  74. package/dist/util/select.js.map +1 -0
  75. package/dist/util/tmp.js +119 -0
  76. package/dist/util/tmp.js.map +1 -0
  77. package/package.json +3 -2
  78. package/src/agent/animate.ts +90 -0
  79. package/src/agent/box.ts +99 -0
  80. package/src/agent/dock-renderer.ts +181 -0
  81. package/src/agent/logo.ts +23 -0
  82. package/src/agent/loop.ts +148 -18
  83. package/src/agent/prompts.ts +2 -1
  84. package/src/agent/providers/claude-code.ts +91 -122
  85. package/src/agent/providers/cursor.ts +364 -0
  86. package/src/agent/providers/tool-protocol.ts +212 -0
  87. package/src/agent/recovery.ts +162 -0
  88. package/src/agent/render.ts +56 -12
  89. package/src/agent/response-cache.ts +80 -0
  90. package/src/agent/runmeta.ts +6 -7
  91. package/src/agent/theme.ts +91 -0
  92. package/src/agent/tools.ts +62 -4
  93. package/src/agent/transcript.ts +1 -0
  94. package/src/agent/types.ts +17 -0
  95. package/src/cli.ts +139 -15
  96. package/src/commands/create.ts +581 -40
  97. package/src/commands/demo.ts +184 -0
  98. package/src/commands/doctor.ts +289 -0
  99. package/src/commands/repl-inspect.ts +353 -0
  100. package/src/commands/repl.ts +685 -0
  101. package/src/config.ts +40 -3
  102. package/src/kicad/bootstrap.ts +181 -0
  103. package/src/kicad/cli.ts +132 -7
  104. package/src/kicad/spice.ts +399 -0
  105. package/src/kicad/symlib.ts +248 -0
  106. package/src/layout/claude-ui-layout.md +72 -0
  107. package/src/layout/repl-ui-layout.md +139 -0
  108. package/src/memory/bom-table.ts +191 -20
  109. package/src/memory/drift.ts +42 -11
  110. package/src/util/cli-args.ts +42 -0
  111. package/src/util/dock.ts +161 -0
  112. package/src/util/git.ts +176 -4
  113. package/src/util/live-prompt.ts +595 -0
  114. package/src/util/paths.ts +10 -0
  115. package/src/util/preflight.ts +44 -0
  116. package/src/util/retry.ts +29 -0
  117. package/src/util/select.ts +192 -0
  118. package/src/util/tmp.ts +113 -0
@@ -0,0 +1,342 @@
1
+ /**
2
+ * Read-only inspect helpers for REPL slash commands (/sync, /config, /runs…).
3
+ * All deterministic, no LLM.
4
+ */
5
+ import path from 'node:path';
6
+ import { existsSync } from 'node:fs';
7
+ import { readdir, readFile } from 'node:fs/promises';
8
+ import { execa } from 'execa';
9
+ import { loadConfig } from '../config.js';
10
+ import { checkDrift } from '../memory/drift.js';
11
+ import { loadConstraints } from '../memory/constraints.js';
12
+ import { parseBomTable } from '../memory/bom-table.js';
13
+ import { syncVerify, formatSyncReport } from './sync.js';
14
+ import { listSymbols, listNets, pinNets } from '../kicad/sexp.js';
15
+ import { openspecValidate } from '../openspec/cli.js';
16
+ import { copper, dim, ok, warn, err } from '../agent/theme.js';
17
+ import { traceRule } from '../agent/animate.js';
18
+ import { shortPath } from '../util/paths.js';
19
+ import { branchName, headCommit, isDirty, isGitRepo, uncommittedCount } from '../util/git.js';
20
+ function meta(label, value) {
21
+ return ` ${dim(label.padEnd(12))} ${value}`;
22
+ }
23
+ async function sortedRunIds(repoRoot) {
24
+ const runsDir = path.join(repoRoot, '.copperhead', 'runs');
25
+ if (!existsSync(runsDir))
26
+ return [];
27
+ return (await readdir(runsDir, { withFileTypes: true }))
28
+ .filter((d) => d.isDirectory())
29
+ .map((d) => d.name)
30
+ .sort()
31
+ .reverse();
32
+ }
33
+ async function resolveSchematic(repoRoot) {
34
+ const config = await loadConfig(repoRoot);
35
+ if (!config.schematic) {
36
+ return { message: 'no schematic configured (run copperhead init)' };
37
+ }
38
+ const schPath = path.join(repoRoot, config.schematic);
39
+ if (!existsSync(schPath)) {
40
+ return { message: `schematic missing: ${config.schematic}` };
41
+ }
42
+ return { schPath };
43
+ }
44
+ /** `/sync` — verify-only inconsistency report (never auto-resolves). */
45
+ export async function formatSyncInspect(repoRoot) {
46
+ const report = await syncVerify(repoRoot);
47
+ const body = formatSyncReport(report);
48
+ const headline = !report.resolvable.length && !report.violations.length
49
+ ? ok(' sync: clean')
50
+ : report.violations.length
51
+ ? err(` sync: ${report.violations.length} requirement violation(s), ${report.resolvable.length} resolvable`)
52
+ : warn(` sync: ${report.resolvable.length} resolvable inconsistency(ies)`);
53
+ return ['', copper(' Sync'), traceRule(12), '', headline, '', ...body.split('\n').map((l) => ` ${l}`), ''].join('\n');
54
+ }
55
+ /** `/config` — full resolved config view. */
56
+ export async function formatConfigInspect(repoRoot) {
57
+ const c = await loadConfig(repoRoot);
58
+ const lines = [
59
+ '',
60
+ copper(' Config'),
61
+ traceRule(14),
62
+ '',
63
+ meta('schematic', c.schematic ?? dim('null')),
64
+ meta('board', c.board ?? dim('null')),
65
+ meta('docs', c.docs),
66
+ meta('model', c.model ?? dim('null (use --model / env)')),
67
+ meta('maxTurns', String(c.maxTurns)),
68
+ meta('repair', String(c.maxRepairCycles)),
69
+ meta('origin', c.origin ?? dim('unset')),
70
+ meta('llmCache', c.llmCache ? 'on' : 'off'),
71
+ meta('budgets', Object.keys(c.budgets).length ? JSON.stringify(c.budgets) : dim('{}')),
72
+ ];
73
+ if (c.stageMaxTurns && Object.keys(c.stageMaxTurns).length) {
74
+ lines.push(meta('stageTurns', JSON.stringify(c.stageMaxTurns)));
75
+ }
76
+ lines.push('');
77
+ lines.push(dim(` file ${shortPath(path.join(repoRoot, '.copperhead/config.json'))}`));
78
+ lines.push('');
79
+ return lines.join('\n');
80
+ }
81
+ /** `/git` — porcelain status + branch tip. */
82
+ export async function formatGitInspect(repoRoot) {
83
+ if (!(await isGitRepo(repoRoot))) {
84
+ return ['', warn(' git: not a repository'), ''].join('\n');
85
+ }
86
+ const [branch, commit, dirty, n, porcelain] = await Promise.all([
87
+ branchName(repoRoot).catch(() => 'unknown'),
88
+ headCommit(repoRoot).catch(() => 'unknown'),
89
+ isDirty(repoRoot).catch(() => null),
90
+ uncommittedCount(repoRoot).catch(() => null),
91
+ execa('git', ['status', '--porcelain'], { cwd: repoRoot }).then((r) => r.stdout ? r.stdout.split('\n').filter(Boolean) : []),
92
+ ]);
93
+ const state = dirty === null ? 'unknown' : dirty ? warn(`dirty (${n ?? '?'} file(s))`) : ok('clean');
94
+ const lines = [
95
+ '',
96
+ copper(' Git'),
97
+ traceRule(10),
98
+ '',
99
+ meta('branch', `${branch}@${commit.slice(0, 7)}`),
100
+ meta('state', state),
101
+ '',
102
+ ];
103
+ if (porcelain.length) {
104
+ lines.push(dim(' changes:'));
105
+ for (const row of porcelain.slice(0, 40))
106
+ lines.push(` ${row}`);
107
+ if (porcelain.length > 40)
108
+ lines.push(dim(` … and ${porcelain.length - 40} more`));
109
+ lines.push('');
110
+ }
111
+ return lines.join('\n');
112
+ }
113
+ /** `/drift` — doc↔schematic only (no ERC/DRC). */
114
+ export async function formatDriftInspect(repoRoot) {
115
+ const config = await loadConfig(repoRoot);
116
+ if (!config.schematic) {
117
+ return ['', warn(' drift: no schematic configured (run copperhead init)'), ''].join('\n');
118
+ }
119
+ const mismatches = await checkDrift(repoRoot, config.docs, config.schematic);
120
+ if (!mismatches.length) {
121
+ return ['', ok(' drift: docs match schematic'), ''].join('\n');
122
+ }
123
+ const lines = [
124
+ '',
125
+ copper(' Drift'),
126
+ traceRule(12),
127
+ '',
128
+ warn(` ${mismatches.length} mismatch(es):`),
129
+ '',
130
+ ];
131
+ for (const m of mismatches.slice(0, 30)) {
132
+ lines.push(` ${copper('▸')} ${m.doc}`);
133
+ lines.push(dim(` claim ${m.claim}`));
134
+ lines.push(dim(` actual ${m.actual}`));
135
+ }
136
+ if (mismatches.length > 30)
137
+ lines.push(dim(` … and ${mismatches.length - 30} more`));
138
+ lines.push('');
139
+ return lines.join('\n');
140
+ }
141
+ /** `/constraints` — registry summary. */
142
+ export async function formatConstraintsInspect(repoRoot) {
143
+ const registry = await loadConstraints(repoRoot);
144
+ const keys = Object.keys(registry).sort();
145
+ if (!keys.length) {
146
+ return ['', dim(' constraints: none recorded yet'), ''].join('\n');
147
+ }
148
+ const lines = [
149
+ '',
150
+ copper(' Constraints'),
151
+ traceRule(20),
152
+ '',
153
+ dim(` ${keys.length} open constraint(s)`),
154
+ '',
155
+ ];
156
+ for (const key of keys.slice(0, 40)) {
157
+ const c = registry[key];
158
+ const bound = c.value !== undefined
159
+ ? String(c.value)
160
+ : [c.min !== undefined ? `min ${c.min}` : '', c.max !== undefined ? `max ${c.max}` : '']
161
+ .filter(Boolean)
162
+ .join(', ') || (c.forbidden?.length ? `forbidden ${c.forbidden.join(',')}` : '—');
163
+ lines.push(` ${copper(key)} ${bound}`);
164
+ lines.push(dim(` source ${c.source} · affects ${c.affects.join(', ') || '—'}`));
165
+ }
166
+ if (keys.length > 40)
167
+ lines.push(dim(` … and ${keys.length - 40} more`));
168
+ lines.push('');
169
+ return lines.join('\n');
170
+ }
171
+ /** `/runs` — recent `.copperhead/runs/` summaries. */
172
+ export async function formatRunsInspect(repoRoot) {
173
+ const runsDir = path.join(repoRoot, '.copperhead', 'runs');
174
+ const entries = await sortedRunIds(repoRoot);
175
+ if (!entries.length) {
176
+ return ['', dim(' runs: none yet'), ''].join('\n');
177
+ }
178
+ const lines = ['', copper(' Recent runs'), traceRule(18), ''];
179
+ for (const id of entries.slice(0, 12)) {
180
+ const summaryPath = path.join(runsDir, id, 'summary.md');
181
+ const reportPath = path.join(runsDir, id, 'REPORT.md');
182
+ let outcome = dim('unknown');
183
+ if (existsSync(summaryPath)) {
184
+ const text = await readFile(summaryPath, 'utf8');
185
+ const m = text.match(/exitPath[:\s*`]+([a-z-]+)/i) ||
186
+ text.match(/\*\*Exit(?:\s*path)?:\*\*\s*`?([a-z-]+)/i) ||
187
+ text.match(/## Run stats[\s\S]*?`([a-z-]+)`/);
188
+ if (m?.[1]) {
189
+ const pathName = m[1];
190
+ outcome =
191
+ pathName === 'done' ? ok(pathName) : /fail|error|refus|exhaust|stall/i.test(pathName) ? err(pathName) : warn(pathName);
192
+ }
193
+ else if (/## Run stats/i.test(text)) {
194
+ outcome = dim('recorded');
195
+ }
196
+ }
197
+ const extras = existsSync(reportPath) ? dim(' · report') : '';
198
+ lines.push(` ${copper(id)} ${outcome}${extras}`);
199
+ }
200
+ if (entries.length > 12)
201
+ lines.push(dim(` … and ${entries.length - 12} older`));
202
+ lines.push('');
203
+ lines.push(dim(` dir ${shortPath(runsDir)}`));
204
+ lines.push('');
205
+ return lines.join('\n');
206
+ }
207
+ /** `/parts` — schematic symbol table (refdes / value / footprint). */
208
+ export async function formatPartsInspect(repoRoot) {
209
+ const resolved = await resolveSchematic(repoRoot);
210
+ if ('message' in resolved) {
211
+ return ['', warn(` parts: ${resolved.message}`), ''].join('\n');
212
+ }
213
+ const syms = await listSymbols(resolved.schPath);
214
+ if (!syms.length) {
215
+ return ['', dim(' parts: schematic has no components'), ''].join('\n');
216
+ }
217
+ const refW = Math.max(4, ...syms.map((s) => s.ref.length));
218
+ const valW = Math.min(24, Math.max(5, ...syms.map((s) => s.value.length)));
219
+ const lines = [
220
+ '',
221
+ copper(' Parts'),
222
+ traceRule(12),
223
+ '',
224
+ dim(` ${'ref'.padEnd(refW)} ${'value'.padEnd(valW)} footprint`),
225
+ '',
226
+ ];
227
+ for (const s of syms.slice(0, 60)) {
228
+ const val = s.value.length > valW ? s.value.slice(0, valW - 1) + '…' : s.value;
229
+ lines.push(` ${copper(s.ref.padEnd(refW))} ${val.padEnd(valW)} ${dim(s.footprint || '—')}`);
230
+ }
231
+ if (syms.length > 60)
232
+ lines.push(dim(` … and ${syms.length - 60} more`));
233
+ lines.push('');
234
+ return lines.join('\n');
235
+ }
236
+ /** `/nets` — net names and pin attachments from the schematic. */
237
+ export async function formatNetsInspect(repoRoot) {
238
+ const resolved = await resolveSchematic(repoRoot);
239
+ if ('message' in resolved) {
240
+ return ['', warn(` nets: ${resolved.message}`), ''].join('\n');
241
+ }
242
+ const [names, pins] = await Promise.all([listNets(resolved.schPath), pinNets(resolved.schPath)]);
243
+ const byNet = new Map();
244
+ for (const p of pins) {
245
+ const net = p.net ?? '(unconnected)';
246
+ const tag = p.pinName ? `${p.ref}.${p.pinName}` : `${p.ref}:${p.pinNumber}`;
247
+ const list = byNet.get(net) ?? [];
248
+ list.push(tag);
249
+ byNet.set(net, list);
250
+ }
251
+ const ordered = [...new Set([...names, ...byNet.keys()])].sort((a, b) => {
252
+ if (a === '(unconnected)')
253
+ return 1;
254
+ if (b === '(unconnected)')
255
+ return -1;
256
+ return a.localeCompare(b);
257
+ });
258
+ const lines = ['', copper(' Nets'), traceRule(10), '', dim(` ${ordered.length} net(s)`), ''];
259
+ for (const net of ordered.slice(0, 40)) {
260
+ const attached = (byNet.get(net) ?? []).sort();
261
+ const preview = attached.slice(0, 8).join(', ');
262
+ const extra = attached.length > 8 ? dim(` +${attached.length - 8}`) : '';
263
+ lines.push(` ${copper(net)} ${dim(preview)}${extra}`);
264
+ }
265
+ if (ordered.length > 40)
266
+ lines.push(dim(` … and ${ordered.length - 40} more`));
267
+ lines.push('');
268
+ return lines.join('\n');
269
+ }
270
+ /** `/bom` — parsed docs/BOM.md (inspect only; no export). */
271
+ export async function formatBomInspect(repoRoot) {
272
+ const config = await loadConfig(repoRoot);
273
+ const bomPath = path.join(repoRoot, config.docs, 'BOM.md');
274
+ if (!existsSync(bomPath)) {
275
+ return ['', warn(' bom: docs/BOM.md not found'), ''].join('\n');
276
+ }
277
+ const rows = parseBomTable(await readFile(bomPath, 'utf8'));
278
+ if (!rows.length) {
279
+ return ['', dim(' bom: no parseable rows in BOM.md'), ''].join('\n');
280
+ }
281
+ const refW = Math.max(5, ...rows.map((r) => r.refdes.length));
282
+ const lines = ['', copper(' BOM'), traceRule(8), '', dim(` ${rows.length} row(s) from ${shortPath(bomPath)}`), ''];
283
+ for (const r of rows.slice(0, 50)) {
284
+ const flags = r.flags.length ? dim(` [${r.flags.join(',')}]`) : '';
285
+ lines.push(` ${copper(r.refdes.padEnd(refW))} ${r.value ?? '—'} ${dim(r.footprint ?? '')}${flags}`);
286
+ if (r.mpn)
287
+ lines.push(dim(` mpn ${r.mpn}`));
288
+ }
289
+ if (rows.length > 50)
290
+ lines.push(dim(` … and ${rows.length - 50} more`));
291
+ lines.push('');
292
+ return lines.join('\n');
293
+ }
294
+ /** `/openspec` — `openspec validate` summary (same gate as check). */
295
+ export async function formatOpenSpecInspect(repoRoot) {
296
+ const cfgPath = path.join(repoRoot, 'openspec', 'config.yaml');
297
+ if (!existsSync(cfgPath)) {
298
+ return ['', dim(' openspec: no openspec/config.yaml in this repo'), ''].join('\n');
299
+ }
300
+ const res = await openspecValidate(repoRoot);
301
+ const headline = res.ok ? ok(' openspec: valid') : err(' openspec: validation failed');
302
+ const body = res.output
303
+ .trim()
304
+ .split('\n')
305
+ .slice(0, 30)
306
+ .map((l) => ` ${l}`)
307
+ .join('\n');
308
+ const lines = ['', copper(' OpenSpec'), traceRule(16), '', headline, ''];
309
+ if (body)
310
+ lines.push(body, '');
311
+ return lines.join('\n');
312
+ }
313
+ /** `/last` — preview the newest run summary.md. */
314
+ export async function formatLastInspect(repoRoot) {
315
+ const entries = await sortedRunIds(repoRoot);
316
+ if (!entries.length) {
317
+ return ['', dim(' last: no runs yet'), ''].join('\n');
318
+ }
319
+ const id = entries[0];
320
+ const runsDir = path.join(repoRoot, '.copperhead', 'runs');
321
+ const summaryPath = path.join(runsDir, id, 'summary.md');
322
+ const transcriptPath = path.join(runsDir, id, 'transcript.jsonl');
323
+ const lines = ['', copper(' Last run'), traceRule(14), '', meta('id', id), ''];
324
+ if (!existsSync(summaryPath)) {
325
+ lines.push(dim(' summary.md missing'), '');
326
+ return lines.join('\n');
327
+ }
328
+ const text = await readFile(summaryPath, 'utf8');
329
+ const preview = text.split('\n').slice(0, 40);
330
+ lines.push(dim(` ${shortPath(summaryPath)}`));
331
+ if (existsSync(transcriptPath)) {
332
+ lines.push(dim(` ${shortPath(transcriptPath)}`));
333
+ }
334
+ lines.push('');
335
+ for (const line of preview)
336
+ lines.push(` ${line}`);
337
+ if (text.split('\n').length > 40)
338
+ lines.push(dim(' … truncated'));
339
+ lines.push('');
340
+ return lines.join('\n');
341
+ }
342
+ //# sourceMappingURL=repl-inspect.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"repl-inspect.js","sourceRoot":"","sources":["../../src/commands/repl-inspect.ts"],"names":[],"mappings":"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"}