@tangle-network/starter-foundry 0.5.3 → 0.5.4

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 (121) hide show
  1. package/README.md +49 -0
  2. package/corpus/ideasai-prompts.json +119 -58
  3. package/dist/cli.js +28 -2
  4. package/dist/cli.js.map +1 -1
  5. package/dist/lib/agent-context.js +34 -22
  6. package/dist/lib/agent-context.js.map +1 -1
  7. package/dist/lib/build-plan.d.ts +18 -0
  8. package/dist/lib/build-plan.js +72 -0
  9. package/dist/lib/build-plan.js.map +1 -1
  10. package/dist/lib/buildout-traces.d.ts +113 -0
  11. package/dist/lib/buildout-traces.js +83 -0
  12. package/dist/lib/buildout-traces.js.map +1 -0
  13. package/dist/lib/capability-inferrer.d.ts +40 -0
  14. package/dist/lib/capability-inferrer.js +82 -0
  15. package/dist/lib/capability-inferrer.js.map +1 -0
  16. package/dist/lib/context-pack.d.ts +6 -1
  17. package/dist/lib/context-pack.js +9 -3
  18. package/dist/lib/context-pack.js.map +1 -1
  19. package/dist/lib/keywords.js +71 -18
  20. package/dist/lib/keywords.js.map +1 -1
  21. package/dist/lib/llm.d.ts +9 -0
  22. package/dist/lib/llm.js +70 -0
  23. package/dist/lib/llm.js.map +1 -0
  24. package/dist/lib/planner/contracts.d.ts +11 -0
  25. package/dist/lib/planner/contracts.js +119 -0
  26. package/dist/lib/planner/contracts.js.map +1 -0
  27. package/dist/lib/planner/detectors.d.ts +14 -0
  28. package/dist/lib/planner/detectors.js +195 -0
  29. package/dist/lib/planner/detectors.js.map +1 -0
  30. package/dist/lib/planner/helpers.d.ts +2 -0
  31. package/dist/lib/planner/helpers.js +135 -0
  32. package/dist/lib/planner/helpers.js.map +1 -0
  33. package/dist/lib/planner/implicit-caps.d.ts +1 -0
  34. package/dist/lib/planner/implicit-caps.js +91 -0
  35. package/dist/lib/planner/implicit-caps.js.map +1 -0
  36. package/dist/lib/planner/projects.d.ts +13 -0
  37. package/dist/lib/planner/projects.js +181 -0
  38. package/dist/lib/planner/projects.js.map +1 -0
  39. package/dist/lib/planner/signals.d.ts +17 -0
  40. package/dist/lib/planner/signals.js +324 -0
  41. package/dist/lib/planner/signals.js.map +1 -0
  42. package/dist/lib/product-brief.d.ts +25 -0
  43. package/dist/lib/product-brief.js +129 -0
  44. package/dist/lib/product-brief.js.map +1 -0
  45. package/dist/lib/prompt-planner.d.ts +5 -1
  46. package/dist/lib/prompt-planner.js +59 -622
  47. package/dist/lib/prompt-planner.js.map +1 -1
  48. package/dist/lib/prompt-rewriter.d.ts +21 -0
  49. package/dist/lib/prompt-rewriter.js +118 -0
  50. package/dist/lib/prompt-rewriter.js.map +1 -0
  51. package/dist/lib/selection.js +170 -36
  52. package/dist/lib/selection.js.map +1 -1
  53. package/dist/lib/telemetry.d.ts +0 -11
  54. package/dist/lib/telemetry.js +3 -3
  55. package/dist/lib/telemetry.js.map +1 -1
  56. package/dist/lib/vb-outcomes.d.ts +61 -0
  57. package/dist/lib/vb-outcomes.js +88 -0
  58. package/dist/lib/vb-outcomes.js.map +1 -0
  59. package/dist/training/variant_b/brief-loader.d.ts +5 -0
  60. package/dist/training/variant_b/brief-loader.js +263 -0
  61. package/dist/training/variant_b/brief-loader.js.map +1 -0
  62. package/dist/training/variant_b/flow.d.ts +56 -0
  63. package/dist/training/variant_b/flow.js +80 -0
  64. package/dist/training/variant_b/flow.js.map +1 -0
  65. package/dist/training/variant_b/generate.d.ts +7 -0
  66. package/dist/training/variant_b/generate.js +70 -0
  67. package/dist/training/variant_b/generate.js.map +1 -0
  68. package/dist/training/variant_b/judge.d.ts +8 -0
  69. package/dist/training/variant_b/judge.js +24 -0
  70. package/dist/training/variant_b/judge.js.map +1 -0
  71. package/dist/training/variant_b/nodes/collect.d.ts +31 -0
  72. package/dist/training/variant_b/nodes/collect.js +122 -0
  73. package/dist/training/variant_b/nodes/collect.js.map +1 -0
  74. package/dist/training/variant_b/nodes/generate.d.ts +22 -0
  75. package/dist/training/variant_b/nodes/generate.js +171 -0
  76. package/dist/training/variant_b/nodes/generate.js.map +1 -0
  77. package/dist/training/variant_b/nodes/judge.d.ts +26 -0
  78. package/dist/training/variant_b/nodes/judge.js +64 -0
  79. package/dist/training/variant_b/nodes/judge.js.map +1 -0
  80. package/dist/training/variant_b/nodes/promote.d.ts +15 -0
  81. package/dist/training/variant_b/nodes/promote.js +64 -0
  82. package/dist/training/variant_b/nodes/promote.js.map +1 -0
  83. package/dist/training/variant_b/nodes/rank.d.ts +12 -0
  84. package/dist/training/variant_b/nodes/rank.js +46 -0
  85. package/dist/training/variant_b/nodes/rank.js.map +1 -0
  86. package/dist/training/variant_b/nodes/train.d.ts +34 -0
  87. package/dist/training/variant_b/nodes/train.js +209 -0
  88. package/dist/training/variant_b/nodes/train.js.map +1 -0
  89. package/dist/training/variant_b/run-flow.d.ts +11 -0
  90. package/dist/training/variant_b/run-flow.js +21 -0
  91. package/dist/training/variant_b/run-flow.js.map +1 -0
  92. package/dist/training/variant_b/train.d.ts +15 -0
  93. package/dist/training/variant_b/train.js +37 -0
  94. package/dist/training/variant_b/train.js.map +1 -0
  95. package/dist/types.d.ts +16 -0
  96. package/package.json +6 -2
  97. package/registry/families/browser-extension-ts/files/package.json +4 -1
  98. package/registry/families/cli-ts/files/package.json +5 -0
  99. package/registry/families/electron-desktop-ts/files/package.json +3 -1
  100. package/registry/families/expo-react-native-ts/files/package.json +4 -0
  101. package/registry/families/fhenix-contracts/files/package.json +1 -1
  102. package/registry/families/fhevm-contracts/files/package.json +1 -1
  103. package/registry/families/fullstack-ts/files/package.json +3 -1
  104. package/registry/families/hardhat-contracts/files/package.json +3 -1
  105. package/registry/families/nextjs-ts/files/package.json +3 -1
  106. package/registry/families/react-vite-ts/files/package.json +11 -1
  107. package/registry/families/react-vite-ts/files/src/components/ui/badge.tsx +9 -0
  108. package/registry/families/react-vite-ts/files/src/components/ui/button.tsx +18 -0
  109. package/registry/families/react-vite-ts/files/src/components/ui/card.tsx +22 -0
  110. package/registry/families/react-vite-ts/manifest.json +14 -2
  111. package/registry/families/remix-ts/files/package.json +9 -1
  112. package/registry/families/sveltekit-ts/files/package.json +9 -1
  113. package/registry/families/tauri-desktop/files/package.json +3 -1
  114. package/registry/families/vue-ts/files/package.json +9 -1
  115. package/registry/layers/framework/expo-react-native-ts/files/tsconfig.json +2 -1
  116. package/registry/layers/framework/forge-foundation/files/foundry.toml +22 -1
  117. package/registry/layers/framework/fullstack-node-ts/files/personalize.json +5 -5
  118. package/registry/layers/framework/tangle-blueprint/files/TOOLCHAIN.md +16 -0
  119. package/registry/layers/framework/tangle-blueprint/files/rust-toolchain.toml +1 -1
  120. package/registry/layers/framework/tangle-blueprint/manifest.json +4 -0
  121. package/registry/package-to-capability.json +57 -0
package/README.md CHANGED
@@ -138,3 +138,52 @@ if (plan.kind === 'starter') {
138
138
  const result = await composeStarter({ spec: plan.spec, outDir })
139
139
  }
140
140
  ```
141
+
142
+ **Integrating into a downstream agent runtime?** See **[docs/INTEGRATION.md](./docs/INTEGRATION.md)** — programmatic API, multi-family workspaces, the 4 telemetry events to emit, scrubbing rules, and how to consume the pipeline's rankings.
143
+
144
+ ## Buildout pipeline (agent-behavior → registry signal)
145
+
146
+ The `scripts/*-buildout*.mjs` pipeline mines Claude Code session transcripts of real agent buildouts on top of starter-foundry scaffolds and produces two ranked reports: **missing capabilities** (packages agents install because our router didn't attach the right layer) and **bad templates** (files agents rewrite within the first few turns).
147
+
148
+ ### Run it
149
+
150
+ ```bash
151
+ pnpm build
152
+ node scripts/run-buildout-pipeline.mjs # mine → join → analyze
153
+ ```
154
+
155
+ Outputs:
156
+ - `.evolve/buildout-analysis.json` — per-scenario pass rate, top-added packages, top-rewritten files (committed evidence)
157
+ - `.evolve/capability-gaps.json` — ranked (scenario, capability) router misses
158
+ - `.evolve/traces/buildouts.jsonl` — append-only corpus (gitignored, regenerable)
159
+
160
+ ### Stages
161
+
162
+ | Script | Input | Output |
163
+ |---|---|---|
164
+ | `mine-buildout-sessions.mjs` | `~/.claude/projects/**/factory-local-phase2-*/*.jsonl` | `.evolve/traces/buildouts.jsonl` |
165
+ | `join-buildout-outcomes.mjs` | VB execution traces + buildouts | buildouts.jsonl annotated with outcomes |
166
+ | `analyze-buildouts.mjs` | joined buildouts | `.evolve/buildout-analysis.json` |
167
+ | `infer-capability-gaps.mjs` | joined buildouts + `registry/package-to-capability.json` | `.evolve/capability-gaps.json` |
168
+
169
+ ### Fault tolerance
170
+
171
+ - **Resumable**: per-session mtime stored in `.evolve/traces/.buildouts-miner-state.json`. Unchanged sessions skip; next run is ~0ms.
172
+ - **Concurrent-safe**: O_EXCL lock file prevents simultaneous miner entry. Stale locks (PID not alive) auto-steal.
173
+ - **Corruption-tolerant**: a malformed state file is logged and reseeded instead of crashing.
174
+ - **Schema-versioned**: bumping `BUILDOUT_SCHEMA_VERSION` auto-rebuilds from source.
175
+ - **Append-only output**: JSONL with per-row schema version; malformed lines are skipped by every consumer.
176
+
177
+ ### Adding a new source (GLM, GPT, etc.)
178
+
179
+ Write a new miner script (e.g., `mine-glm-sessions.mjs`) that emits rows conforming to `BuildoutEvent` in `src/lib/buildout-traces.ts` — same append-only JSONL, same schema version, different `sourceModel` value. The join + analyze stages consume it unchanged.
180
+
181
+ ### Extending `registry/package-to-capability.json`
182
+
183
+ When an agent installs package X, we want our router to pre-attach the capability X maps to. Add an entry:
184
+
185
+ ```json
186
+ "package-name": { "capability": "capability:foo", "confidence": 0.9 }
187
+ ```
188
+
189
+ `tests/package-to-capability.test.ts` validates every capability ID against the live registry at build time.
@@ -7,6 +7,7 @@
7
7
  "expectedCapabilities": [
8
8
  "capability:ai-chat-ui",
9
9
  "capability:layout-chat",
10
+ "capability:shadcn",
10
11
  "capability:tailwind"
11
12
  ],
12
13
  "category": "ai-saas",
@@ -20,6 +21,7 @@
20
21
  "expectedCapabilities": [
21
22
  "capability:ai-chat-ui",
22
23
  "capability:layout-chat",
24
+ "capability:shadcn",
23
25
  "capability:tailwind"
24
26
  ],
25
27
  "category": "ai-saas",
@@ -35,6 +37,7 @@
35
37
  "expectedCapabilities": [
36
38
  "capability:ai-chat-ui",
37
39
  "capability:layout-dashboard",
40
+ "capability:shadcn",
38
41
  "capability:tailwind"
39
42
  ],
40
43
  "category": "ai-saas",
@@ -47,7 +50,9 @@
47
50
  "expectedFamily": "nextjs-ts",
48
51
  "expectedCapabilities": [
49
52
  "capability:ai-chat-ui",
50
- "capability:layout-dashboard"
53
+ "capability:layout-dashboard",
54
+ "capability:shadcn",
55
+ "capability:tailwind"
51
56
  ],
52
57
  "category": "ai-saas",
53
58
  "actualLayers": []
@@ -73,6 +78,7 @@
73
78
  "expectedCapabilities": [
74
79
  "capability:ai-chat-ui",
75
80
  "capability:layout-chat",
81
+ "capability:shadcn",
76
82
  "capability:tailwind"
77
83
  ],
78
84
  "category": "ai-saas",
@@ -86,6 +92,7 @@
86
92
  "expectedCapabilities": [
87
93
  "capability:ai-chat-ui",
88
94
  "capability:layout-dashboard",
95
+ "capability:shadcn",
89
96
  "capability:tailwind"
90
97
  ],
91
98
  "category": "ai-saas",
@@ -97,9 +104,10 @@
97
104
  "votes": 142,
98
105
  "expectedFamily": "fullstack-ts",
99
106
  "expectedCapabilities": [
100
- "capability:layout-dashboard",
101
107
  "capability:chart-widget",
102
- "capability:shadcn"
108
+ "capability:layout-dashboard",
109
+ "capability:shadcn",
110
+ "capability:tailwind"
103
111
  ],
104
112
  "category": "ai-saas",
105
113
  "actualLayers": []
@@ -126,6 +134,7 @@
126
134
  "expectedCapabilities": [
127
135
  "capability:ai-chat-ui",
128
136
  "capability:layout-chat",
137
+ "capability:shadcn",
129
138
  "capability:tailwind"
130
139
  ],
131
140
  "category": "ai-saas",
@@ -141,6 +150,7 @@
141
150
  "expectedCapabilities": [
142
151
  "capability:ai-chat-ui",
143
152
  "capability:layout-dashboard",
153
+ "capability:shadcn",
144
154
  "capability:tailwind"
145
155
  ],
146
156
  "category": "ai-saas",
@@ -154,7 +164,8 @@
154
164
  "expectedCapabilities": [
155
165
  "capability:ai-chat-ui",
156
166
  "capability:layout-dashboard",
157
- "capability:shadcn"
167
+ "capability:shadcn",
168
+ "capability:tailwind"
158
169
  ],
159
170
  "category": "ai-saas",
160
171
  "actualLayers": []
@@ -166,8 +177,10 @@
166
177
  "expectedFamily": "fullstack-ts",
167
178
  "expectedCapabilities": [
168
179
  "capability:ai-chat-ui",
180
+ "capability:chart-widget",
169
181
  "capability:layout-dashboard",
170
- "capability:chart-widget"
182
+ "capability:shadcn",
183
+ "capability:tailwind"
171
184
  ],
172
185
  "category": "ai-saas",
173
186
  "actualLayers": []
@@ -179,8 +192,10 @@
179
192
  "expectedFamily": "fullstack-ts",
180
193
  "expectedCapabilities": [
181
194
  "capability:ai-chat-ui",
195
+ "capability:chart-widget",
182
196
  "capability:layout-dashboard",
183
- "capability:chart-widget"
197
+ "capability:shadcn",
198
+ "capability:tailwind"
184
199
  ],
185
200
  "category": "ai-saas",
186
201
  "actualLayers": []
@@ -192,9 +207,10 @@
192
207
  "expectedFamily": "fullstack-ts",
193
208
  "expectedCapabilities": [
194
209
  "capability:ai-chat-ui",
195
- "capability:layout-dashboard",
196
210
  "capability:chart-widget",
197
- "capability:shadcn"
211
+ "capability:layout-dashboard",
212
+ "capability:shadcn",
213
+ "capability:tailwind"
198
214
  ],
199
215
  "category": "ai-saas",
200
216
  "actualLayers": []
@@ -207,7 +223,8 @@
207
223
  "expectedCapabilities": [
208
224
  "capability:ai-chat-ui",
209
225
  "capability:layout-dashboard",
210
- "capability:shadcn"
226
+ "capability:shadcn",
227
+ "capability:tailwind"
211
228
  ],
212
229
  "category": "ai-saas",
213
230
  "actualLayers": []
@@ -220,6 +237,7 @@
220
237
  "expectedCapabilities": [
221
238
  "capability:ai-chat-ui",
222
239
  "capability:layout-dashboard",
240
+ "capability:shadcn",
223
241
  "capability:tailwind"
224
242
  ],
225
243
  "category": "ai-saas",
@@ -233,6 +251,7 @@
233
251
  "expectedCapabilities": [
234
252
  "capability:ai-chat-ui",
235
253
  "capability:layout-chat",
254
+ "capability:shadcn",
236
255
  "capability:tailwind"
237
256
  ],
238
257
  "category": "ai-saas",
@@ -246,6 +265,7 @@
246
265
  "expectedCapabilities": [
247
266
  "capability:ai-chat-ui",
248
267
  "capability:layout-chat",
268
+ "capability:shadcn",
249
269
  "capability:tailwind"
250
270
  ],
251
271
  "category": "ai-saas",
@@ -259,6 +279,7 @@
259
279
  "expectedCapabilities": [
260
280
  "capability:ai-chat-ui",
261
281
  "capability:layout-dashboard",
282
+ "capability:shadcn",
262
283
  "capability:tailwind"
263
284
  ],
264
285
  "category": "ai-saas",
@@ -271,7 +292,9 @@
271
292
  "expectedFamily": "fullstack-ts",
272
293
  "expectedCapabilities": [
273
294
  "capability:ai-chat-ui",
274
- "capability:layout-dashboard"
295
+ "capability:layout-dashboard",
296
+ "capability:shadcn",
297
+ "capability:tailwind"
275
298
  ],
276
299
  "category": "ai-saas",
277
300
  "actualLayers": []
@@ -284,7 +307,8 @@
284
307
  "expectedCapabilities": [
285
308
  "capability:ai-chat-ui",
286
309
  "capability:layout-dashboard",
287
- "capability:shadcn"
310
+ "capability:shadcn",
311
+ "capability:tailwind"
288
312
  ],
289
313
  "category": "ai-saas",
290
314
  "actualLayers": []
@@ -297,7 +321,8 @@
297
321
  "expectedCapabilities": [
298
322
  "capability:ai-chat-ui",
299
323
  "capability:layout-dashboard",
300
- "capability:shadcn"
324
+ "capability:shadcn",
325
+ "capability:tailwind"
301
326
  ],
302
327
  "category": "ai-saas",
303
328
  "actualLayers": []
@@ -323,6 +348,7 @@
323
348
  "expectedCapabilities": [
324
349
  "capability:ai-chat-ui",
325
350
  "capability:layout-chat",
351
+ "capability:shadcn",
326
352
  "capability:tailwind"
327
353
  ],
328
354
  "category": "ai-saas",
@@ -334,9 +360,10 @@
334
360
  "votes": 178,
335
361
  "expectedFamily": "nextjs-ts",
336
362
  "expectedCapabilities": [
337
- "capability:marketplace",
338
363
  "capability:layout-dashboard",
339
- "capability:shadcn"
364
+ "capability:marketplace",
365
+ "capability:shadcn",
366
+ "capability:tailwind"
340
367
  ],
341
368
  "category": "marketplace",
342
369
  "actualLayers": [
@@ -349,8 +376,9 @@
349
376
  "votes": 234,
350
377
  "expectedFamily": "fullstack-ts",
351
378
  "expectedCapabilities": [
352
- "capability:marketplace",
353
379
  "capability:layout-dashboard",
380
+ "capability:marketplace",
381
+ "capability:shadcn",
354
382
  "capability:tailwind"
355
383
  ],
356
384
  "category": "marketplace",
@@ -362,9 +390,10 @@
362
390
  "votes": 312,
363
391
  "expectedFamily": "nextjs-ts",
364
392
  "expectedCapabilities": [
365
- "capability:marketplace",
366
393
  "capability:layout-dashboard",
367
- "capability:shadcn"
394
+ "capability:marketplace",
395
+ "capability:shadcn",
396
+ "capability:tailwind"
368
397
  ],
369
398
  "category": "marketplace",
370
399
  "actualLayers": [
@@ -377,9 +406,10 @@
377
406
  "votes": 189,
378
407
  "expectedFamily": "fullstack-ts",
379
408
  "expectedCapabilities": [
380
- "capability:marketplace",
381
409
  "capability:layout-dashboard",
382
- "capability:shadcn"
410
+ "capability:marketplace",
411
+ "capability:shadcn",
412
+ "capability:tailwind"
383
413
  ],
384
414
  "category": "marketplace",
385
415
  "actualLayers": [
@@ -392,8 +422,9 @@
392
422
  "votes": 267,
393
423
  "expectedFamily": "nextjs-ts",
394
424
  "expectedCapabilities": [
395
- "capability:marketplace",
396
425
  "capability:layout-dashboard",
426
+ "capability:marketplace",
427
+ "capability:shadcn",
397
428
  "capability:tailwind"
398
429
  ],
399
430
  "category": "marketplace",
@@ -407,9 +438,10 @@
407
438
  "votes": 345,
408
439
  "expectedFamily": "nextjs-ts",
409
440
  "expectedCapabilities": [
410
- "capability:marketplace",
411
441
  "capability:layout-dashboard",
412
- "capability:shadcn"
442
+ "capability:marketplace",
443
+ "capability:shadcn",
444
+ "capability:tailwind"
413
445
  ],
414
446
  "category": "marketplace",
415
447
  "actualLayers": [
@@ -422,8 +454,9 @@
422
454
  "votes": 198,
423
455
  "expectedFamily": "nextjs-ts",
424
456
  "expectedCapabilities": [
425
- "capability:marketplace",
426
457
  "capability:layout-dashboard",
458
+ "capability:marketplace",
459
+ "capability:shadcn",
427
460
  "capability:tailwind"
428
461
  ],
429
462
  "category": "marketplace",
@@ -437,8 +470,9 @@
437
470
  "votes": 223,
438
471
  "expectedFamily": "nextjs-ts",
439
472
  "expectedCapabilities": [
440
- "capability:marketplace",
441
473
  "capability:layout-dashboard",
474
+ "capability:marketplace",
475
+ "capability:shadcn",
442
476
  "capability:tailwind"
443
477
  ],
444
478
  "category": "marketplace",
@@ -452,9 +486,10 @@
452
486
  "votes": 289,
453
487
  "expectedFamily": "nextjs-ts",
454
488
  "expectedCapabilities": [
455
- "capability:marketplace",
456
489
  "capability:layout-dashboard",
457
- "capability:shadcn"
490
+ "capability:marketplace",
491
+ "capability:shadcn",
492
+ "capability:tailwind"
458
493
  ],
459
494
  "category": "marketplace",
460
495
  "actualLayers": [
@@ -467,8 +502,9 @@
467
502
  "votes": 356,
468
503
  "expectedFamily": "nextjs-ts",
469
504
  "expectedCapabilities": [
470
- "capability:marketplace",
471
505
  "capability:layout-dashboard",
506
+ "capability:marketplace",
507
+ "capability:shadcn",
472
508
  "capability:tailwind"
473
509
  ],
474
510
  "category": "marketplace",
@@ -482,9 +518,10 @@
482
518
  "votes": 156,
483
519
  "expectedFamily": "fullstack-ts",
484
520
  "expectedCapabilities": [
485
- "capability:layout-dashboard",
486
521
  "capability:layout-admin",
487
- "capability:shadcn"
522
+ "capability:layout-dashboard",
523
+ "capability:shadcn",
524
+ "capability:tailwind"
488
525
  ],
489
526
  "category": "saas-tools",
490
527
  "actualLayers": [
@@ -497,9 +534,10 @@
497
534
  "votes": 234,
498
535
  "expectedFamily": "fullstack-ts",
499
536
  "expectedCapabilities": [
500
- "capability:layout-dashboard",
501
537
  "capability:chart-widget",
502
- "capability:shadcn"
538
+ "capability:layout-dashboard",
539
+ "capability:shadcn",
540
+ "capability:tailwind"
503
541
  ],
504
542
  "category": "saas-tools",
505
543
  "actualLayers": [
@@ -525,9 +563,10 @@
525
563
  "votes": 167,
526
564
  "expectedFamily": "fullstack-ts",
527
565
  "expectedCapabilities": [
528
- "capability:layout-dashboard",
529
566
  "capability:chart-widget",
530
- "capability:shadcn"
567
+ "capability:layout-dashboard",
568
+ "capability:shadcn",
569
+ "capability:tailwind"
531
570
  ],
532
571
  "category": "saas-tools",
533
572
  "actualLayers": [
@@ -540,9 +579,10 @@
540
579
  "votes": 145,
541
580
  "expectedFamily": "fullstack-ts",
542
581
  "expectedCapabilities": [
543
- "capability:layout-dashboard",
544
582
  "capability:layout-auth",
545
- "capability:shadcn"
583
+ "capability:layout-dashboard",
584
+ "capability:shadcn",
585
+ "capability:tailwind"
546
586
  ],
547
587
  "category": "saas-tools",
548
588
  "actualLayers": []
@@ -553,9 +593,10 @@
553
593
  "votes": 178,
554
594
  "expectedFamily": "fullstack-ts",
555
595
  "expectedCapabilities": [
556
- "capability:layout-dashboard",
557
596
  "capability:chart-widget",
558
- "capability:shadcn"
597
+ "capability:layout-dashboard",
598
+ "capability:shadcn",
599
+ "capability:tailwind"
559
600
  ],
560
601
  "category": "saas-tools",
561
602
  "actualLayers": [
@@ -569,9 +610,10 @@
569
610
  "votes": 201,
570
611
  "expectedFamily": "fullstack-ts",
571
612
  "expectedCapabilities": [
572
- "capability:layout-dashboard",
573
613
  "capability:layout-admin",
574
- "capability:shadcn"
614
+ "capability:layout-dashboard",
615
+ "capability:shadcn",
616
+ "capability:tailwind"
575
617
  ],
576
618
  "category": "saas-tools",
577
619
  "actualLayers": []
@@ -610,9 +652,10 @@
610
652
  "votes": 334,
611
653
  "expectedFamily": "fullstack-ts",
612
654
  "expectedCapabilities": [
613
- "capability:layout-dashboard",
614
655
  "capability:chart-widget",
615
- "capability:shadcn"
656
+ "capability:layout-dashboard",
657
+ "capability:shadcn",
658
+ "capability:tailwind"
616
659
  ],
617
660
  "category": "saas-tools",
618
661
  "actualLayers": []
@@ -623,9 +666,10 @@
623
666
  "votes": 245,
624
667
  "expectedFamily": "react-vite-ts",
625
668
  "expectedCapabilities": [
626
- "capability:webrtc",
627
669
  "capability:layout-dashboard",
628
- "capability:tailwind"
670
+ "capability:shadcn",
671
+ "capability:tailwind",
672
+ "capability:webrtc"
629
673
  ],
630
674
  "category": "webrtc",
631
675
  "actualLayers": [
@@ -638,9 +682,11 @@
638
682
  "votes": 389,
639
683
  "expectedFamily": "fullstack-ts",
640
684
  "expectedCapabilities": [
641
- "capability:webrtc",
685
+ "capability:layout-auth",
642
686
  "capability:layout-dashboard",
643
- "capability:layout-auth"
687
+ "capability:shadcn",
688
+ "capability:tailwind",
689
+ "capability:webrtc"
644
690
  ],
645
691
  "category": "webrtc",
646
692
  "actualLayers": []
@@ -651,9 +697,10 @@
651
697
  "votes": 312,
652
698
  "expectedFamily": "fullstack-ts",
653
699
  "expectedCapabilities": [
654
- "capability:webrtc",
655
700
  "capability:layout-dashboard",
656
- "capability:tailwind"
701
+ "capability:shadcn",
702
+ "capability:tailwind",
703
+ "capability:webrtc"
657
704
  ],
658
705
  "category": "webrtc",
659
706
  "actualLayers": [
@@ -666,9 +713,10 @@
666
713
  "votes": 198,
667
714
  "expectedFamily": "fullstack-ts",
668
715
  "expectedCapabilities": [
669
- "capability:webrtc",
670
716
  "capability:layout-dashboard",
671
- "capability:tailwind"
717
+ "capability:shadcn",
718
+ "capability:tailwind",
719
+ "capability:webrtc"
672
720
  ],
673
721
  "category": "webrtc",
674
722
  "actualLayers": []
@@ -679,9 +727,10 @@
679
727
  "votes": 223,
680
728
  "expectedFamily": "nextjs-ts",
681
729
  "expectedCapabilities": [
682
- "capability:webrtc",
683
730
  "capability:layout-dashboard",
684
- "capability:shadcn"
731
+ "capability:shadcn",
732
+ "capability:tailwind",
733
+ "capability:webrtc"
685
734
  ],
686
735
  "category": "webrtc",
687
736
  "actualLayers": []
@@ -693,8 +742,10 @@
693
742
  "expectedFamily": "fullstack-ts",
694
743
  "expectedCapabilities": [
695
744
  "capability:agent-intel",
745
+ "capability:chart-widget",
696
746
  "capability:layout-dashboard",
697
- "capability:chart-widget"
747
+ "capability:shadcn",
748
+ "capability:tailwind"
698
749
  ],
699
750
  "category": "data-intel",
700
751
  "actualLayers": [
@@ -710,8 +761,10 @@
710
761
  "expectedFamily": "nextjs-ts",
711
762
  "expectedCapabilities": [
712
763
  "capability:agent-intel",
764
+ "capability:chart-widget",
713
765
  "capability:layout-dashboard",
714
- "capability:chart-widget"
766
+ "capability:shadcn",
767
+ "capability:tailwind"
715
768
  ],
716
769
  "category": "data-intel",
717
770
  "actualLayers": [
@@ -738,8 +791,10 @@
738
791
  "expectedFamily": "fullstack-ts",
739
792
  "expectedCapabilities": [
740
793
  "capability:agent-intel",
794
+ "capability:chart-widget",
741
795
  "capability:layout-dashboard",
742
- "capability:chart-widget"
796
+ "capability:shadcn",
797
+ "capability:tailwind"
743
798
  ],
744
799
  "category": "data-intel",
745
800
  "actualLayers": []
@@ -751,7 +806,9 @@
751
806
  "expectedFamily": "fullstack-ts",
752
807
  "expectedCapabilities": [
753
808
  "capability:agent-intel",
754
- "capability:layout-dashboard"
809
+ "capability:layout-dashboard",
810
+ "capability:shadcn",
811
+ "capability:tailwind"
755
812
  ],
756
813
  "category": "data-intel",
757
814
  "actualLayers": [
@@ -764,8 +821,9 @@
764
821
  "votes": 189,
765
822
  "expectedFamily": "react-vite-ts",
766
823
  "expectedCapabilities": [
767
- "capability:layout-dashboard",
768
824
  "capability:chart-widget",
825
+ "capability:layout-dashboard",
826
+ "capability:shadcn",
769
827
  "capability:tailwind"
770
828
  ],
771
829
  "category": "crypto",
@@ -789,7 +847,8 @@
789
847
  "expectedFamily": "fullstack-ts",
790
848
  "expectedCapabilities": [
791
849
  "capability:layout-dashboard",
792
- "capability:shadcn"
850
+ "capability:shadcn",
851
+ "capability:tailwind"
793
852
  ],
794
853
  "category": "crypto",
795
854
  "actualLayers": []
@@ -800,8 +859,10 @@
800
859
  "votes": 278,
801
860
  "expectedFamily": "fullstack-ts",
802
861
  "expectedCapabilities": [
862
+ "capability:chart-widget",
803
863
  "capability:layout-dashboard",
804
- "capability:chart-widget"
864
+ "capability:shadcn",
865
+ "capability:tailwind"
805
866
  ],
806
867
  "category": "crypto",
807
868
  "actualLayers": []
package/dist/cli.js CHANGED
@@ -56,11 +56,12 @@ function usage() {
56
56
  'Commands:',
57
57
  ' list',
58
58
  ' catalog',
59
- ' plan --prompt <text> [--partner <id>]',
59
+ ' plan --prompt <text> [--partner <id>] [--brief] [--rewriter]',
60
60
  ' select --prompt <text> [--partner <id>]',
61
61
  ' compose --spec <path> --out <dir>',
62
62
  ' validate --spec <path> [--out <dir>]',
63
- ' context --spec <path> [--out <dir>]',
63
+ ' context --spec <path> [--out <dir>] [--llm-build-plan]',
64
+ ' mine [--corpus <path>] [--out <path>] [--provider <groq|anthropic|openai>]',
64
65
  ' bench --spec <path> [--runs <n>] [--out <dir>]',
65
66
  ' workspace-compose --spec <path> --out <dir>',
66
67
  ' workspace-context --spec <path> [--out <dir>]',
@@ -97,6 +98,8 @@ async function main() {
97
98
  const result = await planPrompt({
98
99
  prompt: String(options['prompt']),
99
100
  partner: options['partner'] ? String(options['partner']) : null,
101
+ rewriter: Boolean(options['rewriter']),
102
+ brief: Boolean(options['brief']),
100
103
  });
101
104
  print(result, true);
102
105
  break;
@@ -166,6 +169,7 @@ async function main() {
166
169
  const result = await createContextPack({
167
170
  spec,
168
171
  outDir: options['out'] ? String(options['out']) : null,
172
+ llmBuildPlan: Boolean(options['llm-build-plan']),
169
173
  });
170
174
  print(result, jsonMode);
171
175
  break;
@@ -301,6 +305,28 @@ async function main() {
301
305
  print(result, true);
302
306
  break;
303
307
  }
308
+ case 'mine': {
309
+ const { spawn } = await import('node:child_process');
310
+ const scriptPath = new URL('../scripts/mine-archetypes.mjs', import.meta.url).pathname;
311
+ const argv = [];
312
+ if (options['corpus'])
313
+ argv.push('--corpus', String(options['corpus']));
314
+ if (options['out'])
315
+ argv.push('--out', String(options['out']));
316
+ if (options['provider'])
317
+ argv.push('--provider', String(options['provider']));
318
+ await new Promise((resolveFn, rejectFn) => {
319
+ const child = spawn(process.execPath, [scriptPath, ...argv], { stdio: 'inherit' });
320
+ child.on('exit', (code) => {
321
+ if (code === 0)
322
+ resolveFn();
323
+ else
324
+ rejectFn(new Error(`mine exited with code ${code}`));
325
+ });
326
+ child.on('error', rejectFn);
327
+ });
328
+ break;
329
+ }
304
330
  case 'fatten': {
305
331
  if (!options['spec'] || !options['out'])
306
332
  throw new Error('fatten requires --spec and --out');