@slowcook-ai/cli 0.19.0-alpha.8 → 0.19.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 (194) hide show
  1. package/AGENTS.md +240 -0
  2. package/REPORTING.md +193 -0
  3. package/dist/cli.js +78 -0
  4. package/dist/cli.js.map +1 -1
  5. package/dist/commands/brand/index.d.ts +26 -0
  6. package/dist/commands/brand/index.d.ts.map +1 -0
  7. package/dist/commands/brand/index.js +257 -0
  8. package/dist/commands/brand/index.js.map +1 -0
  9. package/dist/commands/brew/agent.d.ts +7 -2
  10. package/dist/commands/brew/agent.d.ts.map +1 -1
  11. package/dist/commands/brew/agent.js +9 -0
  12. package/dist/commands/brew/agent.js.map +1 -1
  13. package/dist/commands/brew/halt.d.ts +26 -0
  14. package/dist/commands/brew/halt.d.ts.map +1 -1
  15. package/dist/commands/brew/halt.js.map +1 -1
  16. package/dist/commands/brew/index.d.ts.map +1 -1
  17. package/dist/commands/brew/index.js +142 -18
  18. package/dist/commands/brew/index.js.map +1 -1
  19. package/dist/commands/brew/pair-navigator.d.ts +119 -0
  20. package/dist/commands/brew/pair-navigator.d.ts.map +1 -0
  21. package/dist/commands/brew/pair-navigator.js +187 -0
  22. package/dist/commands/brew/pair-navigator.js.map +1 -0
  23. package/dist/commands/budget/index.d.ts +2 -0
  24. package/dist/commands/budget/index.d.ts.map +1 -0
  25. package/dist/commands/budget/index.js +252 -0
  26. package/dist/commands/budget/index.js.map +1 -0
  27. package/dist/commands/chef/drift-fix.d.ts +33 -4
  28. package/dist/commands/chef/drift-fix.d.ts.map +1 -1
  29. package/dist/commands/chef/drift-fix.js +417 -29
  30. package/dist/commands/chef/drift-fix.js.map +1 -1
  31. package/dist/commands/chef/index.js +13 -3
  32. package/dist/commands/chef/index.js.map +1 -1
  33. package/dist/commands/chef/orchestrate.d.ts +1 -1
  34. package/dist/commands/chef/orchestrate.d.ts.map +1 -1
  35. package/dist/commands/chef/orchestrate.js +32 -9
  36. package/dist/commands/chef/orchestrate.js.map +1 -1
  37. package/dist/commands/dev-env/config.d.ts +57 -0
  38. package/dist/commands/dev-env/config.d.ts.map +1 -0
  39. package/dist/commands/dev-env/config.js +96 -0
  40. package/dist/commands/dev-env/config.js.map +1 -0
  41. package/dist/commands/dev-env/index.d.ts +27 -0
  42. package/dist/commands/dev-env/index.d.ts.map +1 -0
  43. package/dist/commands/dev-env/index.js +226 -0
  44. package/dist/commands/dev-env/index.js.map +1 -0
  45. package/dist/commands/dev-env/init.d.ts +28 -0
  46. package/dist/commands/dev-env/init.d.ts.map +1 -0
  47. package/dist/commands/dev-env/init.js +135 -0
  48. package/dist/commands/dev-env/init.js.map +1 -0
  49. package/dist/commands/docs/index.d.ts +16 -0
  50. package/dist/commands/docs/index.d.ts.map +1 -0
  51. package/dist/commands/docs/index.js +127 -0
  52. package/dist/commands/docs/index.js.map +1 -0
  53. package/dist/commands/eval/index.d.ts +54 -0
  54. package/dist/commands/eval/index.d.ts.map +1 -0
  55. package/dist/commands/eval/index.js +294 -0
  56. package/dist/commands/eval/index.js.map +1 -0
  57. package/dist/commands/extract/index.d.ts.map +1 -1
  58. package/dist/commands/extract/index.js +23 -1
  59. package/dist/commands/extract/index.js.map +1 -1
  60. package/dist/commands/garnish/index.d.ts +56 -0
  61. package/dist/commands/garnish/index.d.ts.map +1 -0
  62. package/dist/commands/garnish/index.js +281 -0
  63. package/dist/commands/garnish/index.js.map +1 -0
  64. package/dist/commands/garnish/trailer.d.ts +79 -0
  65. package/dist/commands/garnish/trailer.d.ts.map +1 -0
  66. package/dist/commands/garnish/trailer.js +118 -0
  67. package/dist/commands/garnish/trailer.js.map +1 -0
  68. package/dist/commands/init/index.d.ts.map +1 -1
  69. package/dist/commands/init/index.js +33 -0
  70. package/dist/commands/init/index.js.map +1 -1
  71. package/dist/commands/init/mock-vite.d.ts +54 -0
  72. package/dist/commands/init/mock-vite.d.ts.map +1 -0
  73. package/dist/commands/init/mock-vite.js +613 -0
  74. package/dist/commands/init/mock-vite.js.map +1 -0
  75. package/dist/commands/init/mock.d.ts +6 -0
  76. package/dist/commands/init/mock.d.ts.map +1 -1
  77. package/dist/commands/init/mock.js +20 -4
  78. package/dist/commands/init/mock.js.map +1 -1
  79. package/dist/commands/init/plan.d.ts +26 -1
  80. package/dist/commands/init/plan.d.ts.map +1 -1
  81. package/dist/commands/init/plan.js +41 -3
  82. package/dist/commands/init/plan.js.map +1 -1
  83. package/dist/commands/init/templates.d.ts.map +1 -1
  84. package/dist/commands/init/templates.js +12 -4
  85. package/dist/commands/init/templates.js.map +1 -1
  86. package/dist/commands/knowledge-add.d.ts +52 -0
  87. package/dist/commands/knowledge-add.d.ts.map +1 -0
  88. package/dist/commands/knowledge-add.js +232 -0
  89. package/dist/commands/knowledge-add.js.map +1 -0
  90. package/dist/commands/map/emit-typeorm.d.ts +117 -0
  91. package/dist/commands/map/emit-typeorm.d.ts.map +1 -0
  92. package/dist/commands/map/emit-typeorm.js +341 -0
  93. package/dist/commands/map/emit-typeorm.js.map +1 -0
  94. package/dist/commands/map/index.d.ts +18 -0
  95. package/dist/commands/map/index.d.ts.map +1 -1
  96. package/dist/commands/map/index.js +28 -0
  97. package/dist/commands/map/index.js.map +1 -1
  98. package/dist/commands/plate/agent.d.ts +7 -0
  99. package/dist/commands/plate/agent.d.ts.map +1 -1
  100. package/dist/commands/plate/agent.js +1 -1
  101. package/dist/commands/plate/agent.js.map +1 -1
  102. package/dist/commands/plate/index.d.ts.map +1 -1
  103. package/dist/commands/plate/index.js +6 -0
  104. package/dist/commands/plate/index.js.map +1 -1
  105. package/dist/commands/recon/index.d.ts +16 -3
  106. package/dist/commands/recon/index.d.ts.map +1 -1
  107. package/dist/commands/recon/index.js +267 -16
  108. package/dist/commands/recon/index.js.map +1 -1
  109. package/dist/commands/recon/migration-gate.d.ts +59 -0
  110. package/dist/commands/recon/migration-gate.d.ts.map +1 -0
  111. package/dist/commands/recon/migration-gate.js +131 -0
  112. package/dist/commands/recon/migration-gate.js.map +1 -0
  113. package/dist/commands/recon/reuse.d.ts +32 -0
  114. package/dist/commands/recon/reuse.d.ts.map +1 -1
  115. package/dist/commands/recon/reuse.js +66 -0
  116. package/dist/commands/recon/reuse.js.map +1 -1
  117. package/dist/commands/recon/stale-stubs.d.ts +65 -0
  118. package/dist/commands/recon/stale-stubs.d.ts.map +1 -0
  119. package/dist/commands/recon/stale-stubs.js +84 -0
  120. package/dist/commands/recon/stale-stubs.js.map +1 -0
  121. package/dist/commands/refine/agent.d.ts +23 -0
  122. package/dist/commands/refine/agent.d.ts.map +1 -1
  123. package/dist/commands/refine/agent.js +245 -15
  124. package/dist/commands/refine/agent.js.map +1 -1
  125. package/dist/commands/refine/brownfield-answer.d.ts +81 -0
  126. package/dist/commands/refine/brownfield-answer.d.ts.map +1 -0
  127. package/dist/commands/refine/brownfield-answer.js +231 -0
  128. package/dist/commands/refine/brownfield-answer.js.map +1 -0
  129. package/dist/commands/refine/context.d.ts +27 -1
  130. package/dist/commands/refine/context.d.ts.map +1 -1
  131. package/dist/commands/refine/context.js +438 -6
  132. package/dist/commands/refine/context.js.map +1 -1
  133. package/dist/commands/refine/git-attention.d.ts +123 -0
  134. package/dist/commands/refine/git-attention.d.ts.map +1 -0
  135. package/dist/commands/refine/git-attention.js +378 -0
  136. package/dist/commands/refine/git-attention.js.map +1 -0
  137. package/dist/commands/refine/history-index.d.ts +66 -0
  138. package/dist/commands/refine/history-index.d.ts.map +1 -1
  139. package/dist/commands/refine/history-index.js +195 -8
  140. package/dist/commands/refine/history-index.js.map +1 -1
  141. package/dist/commands/refine/index.d.ts.map +1 -1
  142. package/dist/commands/refine/index.js +105 -18
  143. package/dist/commands/refine/index.js.map +1 -1
  144. package/dist/commands/refine/multifurcate.d.ts +129 -0
  145. package/dist/commands/refine/multifurcate.d.ts.map +1 -0
  146. package/dist/commands/refine/multifurcate.js +247 -0
  147. package/dist/commands/refine/multifurcate.js.map +1 -0
  148. package/dist/commands/refine/proposals-synth.d.ts +50 -1
  149. package/dist/commands/refine/proposals-synth.d.ts.map +1 -1
  150. package/dist/commands/refine/proposals-synth.js +199 -35
  151. package/dist/commands/refine/proposals-synth.js.map +1 -1
  152. package/dist/commands/refine/spec-yaml.d.ts +214 -1210
  153. package/dist/commands/refine/spec-yaml.d.ts.map +1 -1
  154. package/dist/commands/refine/spec-yaml.js +10 -0
  155. package/dist/commands/refine/spec-yaml.js.map +1 -1
  156. package/dist/commands/refresh-knowledge.d.ts +126 -0
  157. package/dist/commands/refresh-knowledge.d.ts.map +1 -0
  158. package/dist/commands/refresh-knowledge.js +1010 -0
  159. package/dist/commands/refresh-knowledge.js.map +1 -0
  160. package/dist/commands/run-mock/index.d.ts.map +1 -1
  161. package/dist/commands/run-mock/index.js +135 -22
  162. package/dist/commands/run-mock/index.js.map +1 -1
  163. package/dist/commands/testgen/agent.d.ts +13 -0
  164. package/dist/commands/testgen/agent.d.ts.map +1 -1
  165. package/dist/commands/testgen/agent.js +137 -11
  166. package/dist/commands/testgen/agent.js.map +1 -1
  167. package/dist/commands/upsert-agent-docs.d.ts +48 -0
  168. package/dist/commands/upsert-agent-docs.d.ts.map +1 -0
  169. package/dist/commands/upsert-agent-docs.js +298 -0
  170. package/dist/commands/upsert-agent-docs.js.map +1 -0
  171. package/dist/commands/vibe/agent.d.ts +7 -0
  172. package/dist/commands/vibe/agent.d.ts.map +1 -1
  173. package/dist/commands/vibe/agent.js +2 -2
  174. package/dist/commands/vibe/agent.js.map +1 -1
  175. package/dist/commands/vibe/index.d.ts.map +1 -1
  176. package/dist/commands/vibe/index.js +7 -1
  177. package/dist/commands/vibe/index.js.map +1 -1
  178. package/dist/cost-store.d.ts +52 -0
  179. package/dist/cost-store.d.ts.map +1 -0
  180. package/dist/cost-store.js +108 -0
  181. package/dist/cost-store.js.map +1 -0
  182. package/dist/lib/budget.d.ts +73 -0
  183. package/dist/lib/budget.d.ts.map +1 -0
  184. package/dist/lib/budget.js +225 -0
  185. package/dist/lib/budget.js.map +1 -0
  186. package/dist/lib/mock-shape.d.ts +29 -0
  187. package/dist/lib/mock-shape.d.ts.map +1 -0
  188. package/dist/lib/mock-shape.js +77 -0
  189. package/dist/lib/mock-shape.js.map +1 -0
  190. package/dist/lib/read-only.d.ts +22 -0
  191. package/dist/lib/read-only.d.ts.map +1 -0
  192. package/dist/lib/read-only.js +34 -0
  193. package/dist/lib/read-only.js.map +1 -0
  194. package/package.json +17 -12
@@ -0,0 +1,59 @@
1
+ /**
2
+ * 0.19.0-α.18 (closes #109 — migration gate in recon).
3
+ *
4
+ * Pre-brew structural gate. Reads the story's spec, extracts the
5
+ * `proposals.schema.sql` block (if any), and checks that every table /
6
+ * column the spec proposes is covered by at least one migration file
7
+ * on disk.
8
+ *
9
+ * Why this gate matters: the rewo story-005 / story-006 incident class
10
+ * — brew ships green tests against mocked DBs while the consumer's
11
+ * `supabase/migrations/` (or `packages/postgres/src/migrations/`)
12
+ * never gets the matching DDL. Test-time green; production-time broken.
13
+ *
14
+ * Pure structural check. No LLM. Sees both Supabase SQL (`*.sql`) and
15
+ * TypeORM TS (`*.ts`) migrations via `scanMigrations`'s auto-discovery.
16
+ *
17
+ * Wiring: `recon` calls `checkMigrationGate` after the per-test
18
+ * structural checks; emitted gaps share the `missing_migration` kind so
19
+ * they roll up into the same `escalate` exit path that already exists.
20
+ */
21
+ import { type MigrationEntry } from "../refine/history-index.js";
22
+ export interface MigrationGap {
23
+ /** Source location pointer (which spec section flagged this). */
24
+ source: string;
25
+ /** Table the spec proposes. */
26
+ table: string;
27
+ /** Columns the spec proposes that are not covered by any migration. */
28
+ missing_columns: string[];
29
+ /** Whether the table itself is uncovered (no migration creates it at all). */
30
+ table_missing: boolean;
31
+ }
32
+ export interface MigrationGateResult {
33
+ /** True if the spec touches schema at all (proposals.schema.sql present + non-empty). */
34
+ spec_proposes_schema: boolean;
35
+ /** Total migration files scanned (across all auto-discovered dirs). */
36
+ migrations_scanned: number;
37
+ /** Per-table gaps. Empty array → gate is clean. */
38
+ gaps: MigrationGap[];
39
+ /** Diagnostic notes (e.g., "spec not found", "no schema proposal"). */
40
+ notes: string[];
41
+ }
42
+ /**
43
+ * Run the gate. `migrationsOverride` is for tests / explicit-dir callers;
44
+ * normal callers pass undefined and let the scanner auto-discover.
45
+ *
46
+ * Returns a structured result even when there are no gaps so callers can
47
+ * log how much was scanned. `gaps.length === 0` is the clean signal.
48
+ */
49
+ export declare function checkMigrationGate(repoRoot: string, storyId: string, migrationsOverride?: MigrationEntry[]): MigrationGateResult;
50
+ /**
51
+ * Render a single migration gap into recon's `detail` + `recommendation`
52
+ * shape. Pulled out as its own helper so the recon entry point and tests
53
+ * can both consume it.
54
+ */
55
+ export declare function formatMigrationGap(g: MigrationGap): {
56
+ detail: string;
57
+ recommendation: string;
58
+ };
59
+ //# sourceMappingURL=migration-gate.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"migration-gate.d.ts","sourceRoot":"","sources":["../../../src/commands/recon/migration-gate.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAEH,OAAO,EAIL,KAAK,cAAc,EACpB,MAAM,4BAA4B,CAAC;AAGpC,MAAM,WAAW,YAAY;IAC3B,iEAAiE;IACjE,MAAM,EAAE,MAAM,CAAC;IACf,+BAA+B;IAC/B,KAAK,EAAE,MAAM,CAAC;IACd,uEAAuE;IACvE,eAAe,EAAE,MAAM,EAAE,CAAC;IAC1B,8EAA8E;IAC9E,aAAa,EAAE,OAAO,CAAC;CACxB;AAED,MAAM,WAAW,mBAAmB;IAClC,yFAAyF;IACzF,oBAAoB,EAAE,OAAO,CAAC;IAC9B,uEAAuE;IACvE,kBAAkB,EAAE,MAAM,CAAC;IAC3B,mDAAmD;IACnD,IAAI,EAAE,YAAY,EAAE,CAAC;IACrB,uEAAuE;IACvE,KAAK,EAAE,MAAM,EAAE,CAAC;CACjB;AAED;;;;;;GAMG;AACH,wBAAgB,kBAAkB,CAChC,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,MAAM,EACf,kBAAkB,CAAC,EAAE,cAAc,EAAE,GACpC,mBAAmB,CA8FrB;AAED;;;;GAIG;AACH,wBAAgB,kBAAkB,CAAC,CAAC,EAAE,YAAY,GAAG;IACnD,MAAM,EAAE,MAAM,CAAC;IACf,cAAc,EAAE,MAAM,CAAC;CACxB,CAWA"}
@@ -0,0 +1,131 @@
1
+ /**
2
+ * 0.19.0-α.18 (closes #109 — migration gate in recon).
3
+ *
4
+ * Pre-brew structural gate. Reads the story's spec, extracts the
5
+ * `proposals.schema.sql` block (if any), and checks that every table /
6
+ * column the spec proposes is covered by at least one migration file
7
+ * on disk.
8
+ *
9
+ * Why this gate matters: the rewo story-005 / story-006 incident class
10
+ * — brew ships green tests against mocked DBs while the consumer's
11
+ * `supabase/migrations/` (or `packages/postgres/src/migrations/`)
12
+ * never gets the matching DDL. Test-time green; production-time broken.
13
+ *
14
+ * Pure structural check. No LLM. Sees both Supabase SQL (`*.sql`) and
15
+ * TypeORM TS (`*.ts`) migrations via `scanMigrations`'s auto-discovery.
16
+ *
17
+ * Wiring: `recon` calls `checkMigrationGate` after the per-test
18
+ * structural checks; emitted gaps share the `missing_migration` kind so
19
+ * they roll up into the same `escalate` exit path that already exists.
20
+ */
21
+ import { scanMigrations, extractCreateTables, extractColumnsAdded, } from "../refine/history-index.js";
22
+ import { readSpec } from "../refine/spec-yaml.js";
23
+ /**
24
+ * Run the gate. `migrationsOverride` is for tests / explicit-dir callers;
25
+ * normal callers pass undefined and let the scanner auto-discover.
26
+ *
27
+ * Returns a structured result even when there are no gaps so callers can
28
+ * log how much was scanned. `gaps.length === 0` is the clean signal.
29
+ */
30
+ export function checkMigrationGate(repoRoot, storyId, migrationsOverride) {
31
+ const result = {
32
+ spec_proposes_schema: false,
33
+ migrations_scanned: 0,
34
+ gaps: [],
35
+ notes: [],
36
+ };
37
+ // 1. Try to read the spec. Specs may not exist for non-slowcook-driven
38
+ // stories (e.g., manual bug fixes). In that case the gate is a no-op:
39
+ // we have no PM-authored schema contract to check against.
40
+ let proposalSql = "";
41
+ try {
42
+ const spec = readSpec(repoRoot, storyId);
43
+ proposalSql = spec.proposals?.schema?.sql ?? "";
44
+ }
45
+ catch (e) {
46
+ result.notes.push(`Spec not found or invalid for story-${storyId}: ${e.message.slice(0, 200)}`);
47
+ return result;
48
+ }
49
+ if (!proposalSql.trim()) {
50
+ result.notes.push(`Spec story-${storyId} has no proposals.schema.sql block — migration gate is a no-op for this story.`);
51
+ return result;
52
+ }
53
+ result.spec_proposes_schema = true;
54
+ // 2. Parse the proposal SQL for tables + columns.
55
+ const proposedTables = extractCreateTables(proposalSql);
56
+ const proposedColumns = extractColumnsAdded(proposalSql);
57
+ // 3. Load migration coverage. The scanner auto-discovers Supabase vs
58
+ // TypeORM dirs; pass the conventional default and let it fall back.
59
+ const migrations = migrationsOverride ?? scanMigrations(repoRoot, "supabase/migrations");
60
+ result.migrations_scanned = migrations.length;
61
+ // 4. Build coverage indices.
62
+ const coveredTables = new Set(migrations.flatMap((m) => m.tables_created));
63
+ const coveredColumnsByTable = {};
64
+ for (const m of migrations) {
65
+ for (const [t, cols] of Object.entries(m.columns_added)) {
66
+ if (!coveredColumnsByTable[t]) {
67
+ coveredColumnsByTable[t] = new Set();
68
+ }
69
+ for (const c of cols)
70
+ coveredColumnsByTable[t].add(c);
71
+ }
72
+ }
73
+ // 5. Walk proposed tables. Two-tier check:
74
+ // (a) Is the table itself present in some migration? If not → gap with
75
+ // table_missing=true and the FULL list of proposed columns flagged.
76
+ // (b) If the table exists, are all proposed columns covered? Missing
77
+ // columns produce a gap with table_missing=false.
78
+ //
79
+ // Tables that appear in proposedColumns but NOT in proposedTables (e.g.,
80
+ // a pure ALTER TABLE proposal) are also walked — that path is the
81
+ // "spec proposes new columns on an existing brownfield table" case,
82
+ // which is exactly the rewo story-005 incident shape.
83
+ const allProposedTables = new Set([
84
+ ...proposedTables,
85
+ ...Object.keys(proposedColumns),
86
+ ]);
87
+ for (const t of allProposedTables) {
88
+ const proposedCols = proposedColumns[t] ?? [];
89
+ if (!coveredTables.has(t)) {
90
+ // Table missing entirely. If the spec ONLY proposes ALTERs (not a CREATE)
91
+ // and the table is brownfield-only, it shows up here too — that's the
92
+ // ALTER-on-uncreated-table case (rare but worth flagging the same way).
93
+ result.gaps.push({
94
+ source: `specs/story-${storyId}.yaml#proposals.schema.sql`,
95
+ table: t,
96
+ missing_columns: proposedCols,
97
+ table_missing: true,
98
+ });
99
+ continue;
100
+ }
101
+ const coveredCols = coveredColumnsByTable[t] ?? new Set();
102
+ const missing = proposedCols.filter((c) => !coveredCols.has(c));
103
+ if (missing.length > 0) {
104
+ result.gaps.push({
105
+ source: `specs/story-${storyId}.yaml#proposals.schema.sql`,
106
+ table: t,
107
+ missing_columns: missing,
108
+ table_missing: false,
109
+ });
110
+ }
111
+ }
112
+ return result;
113
+ }
114
+ /**
115
+ * Render a single migration gap into recon's `detail` + `recommendation`
116
+ * shape. Pulled out as its own helper so the recon entry point and tests
117
+ * can both consume it.
118
+ */
119
+ export function formatMigrationGap(g) {
120
+ if (g.table_missing) {
121
+ return {
122
+ detail: `Spec proposes table "${g.table}" (cols: ${g.missing_columns.join(", ") || "—"}) but no migration creates it.`,
123
+ recommendation: `Author a migration that creates the table BEFORE dispatching brew. For TypeORM consumers: \`packages/postgres/src/migrations/<ts>-create-${g.table}.ts\` with a \`DatabaseCreateTable\` or raw \`CREATE TABLE\`. For Supabase: \`supabase/migrations/<ts>_create_${g.table}.sql\`.`,
124
+ };
125
+ }
126
+ return {
127
+ detail: `Spec proposes columns ${g.missing_columns.map((c) => `"${c}"`).join(", ")} on table "${g.table}" but no migration adds them.`,
128
+ recommendation: `Add an \`ALTER TABLE ${g.table} ADD COLUMN <col> <type>\` migration covering: ${g.missing_columns.join(", ")}. Land it BEFORE dispatching brew.`,
129
+ };
130
+ }
131
+ //# sourceMappingURL=migration-gate.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"migration-gate.js","sourceRoot":"","sources":["../../../src/commands/recon/migration-gate.ts"],"names":[],"mappings":"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"}
@@ -54,6 +54,38 @@ export declare function extractStructuralSignature(path: string, source: string)
54
54
  * 0 if one is empty + the other isn't.
55
55
  */
56
56
  export declare function jaccard(a: string[], b: string[]): number;
57
+ /**
58
+ * 0.19.0-α.10 (#85) — detect "this file is auto-generated, exclude
59
+ * from refactor-candidate scanning." Pure: takes file content, returns
60
+ * true if any of these markers appears in the first 400 characters:
61
+ *
62
+ * `@slowcook-template` — explicit "slowcook generated me" marker
63
+ * `@slowcook-stub` — placeholder waiting for brew to overwrite
64
+ * `@generated` — common convention (Facebook/Meta tooling)
65
+ * `AUTO-GENERATED` — case-insensitive plain English
66
+ * `auto-generated by` — common phrasing in tool output
67
+ * `Do not edit by hand` — common phrasing in templated files
68
+ *
69
+ * 400 chars is enough to capture a typical file header without scanning
70
+ * the whole body. Markers later in the file are deliberately ignored
71
+ * (e.g., a comment in the middle of a file mentioning "auto-generated"
72
+ * shouldn't kill the file's signal).
73
+ */
74
+ export declare function isAutoTemplateFile(content: string): boolean;
75
+ /**
76
+ * 0.19.0-α.10 (#85) — match a single file path against a glob-ish
77
+ * exclusion pattern. Same shape as the refactor command's matchesScope
78
+ * (kept inline rather than cross-package-imported to avoid coupling
79
+ * recon to the refactor module).
80
+ *
81
+ * Supported:
82
+ * - exact match: "src/foo.ts"
83
+ * - directory prefix: "src/lib/entities/" (matches anything under)
84
+ * - star at end: "src/lib/data/*" (one segment after)
85
+ * - double-star: "src/lib/entities/**" (any depth)
86
+ * - filename glob: "*.mock.ts" (matches any path ending with)
87
+ */
88
+ export declare function matchesExcludePattern(filePath: string, pattern: string): boolean;
57
89
  /**
58
90
  * Compute similarity between two structural signatures. Auto-
59
91
  * categorizes by JSX presence:
@@ -1 +1 @@
1
- {"version":3,"file":"reuse.d.ts","sourceRoot":"","sources":["../../../src/commands/recon/reuse.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAEH,MAAM,WAAW,aAAa;IAC5B,0BAA0B;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,4DAA4D;IAC5D,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,2DAA2D;IAC3D,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,kFAAkF;IAClF,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB;0CACsC;IACtC,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB;;oDAEgD;IAChD,SAAS,EAAE,MAAM,EAAE,CAAC;CACrB;AAED;;;;;;;;;GASG;AACH,wBAAgB,0BAA0B,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,aAAa,CA4GtF;AAED;;;;;GAKG;AACH,wBAAgB,OAAO,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE,CAAC,EAAE,MAAM,EAAE,GAAG,MAAM,CASxD;AAED;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,mBAAmB,CAAC,CAAC,EAAE,aAAa,EAAE,CAAC,EAAE,aAAa,GAAG,MAAM,CAiB9E;AAED,MAAM,WAAW,aAAa;IAC5B,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;IACV,UAAU,EAAE,MAAM,CAAC;IACnB,gEAAgE;IAChE,QAAQ,EAAE,WAAW,GAAG,aAAa,CAAC;IACtC,2CAA2C;IAC3C,IAAI,EAAE;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC;CACtE;AAED;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAC/B,UAAU,EAAE,aAAa,EAAE,EAC3B,SAAS,SAAM,GACd,aAAa,EAAE,CA2BjB;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,aAAa,GAAG;IAC3D,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;IAClB,aAAa,EAAE,MAAM,EAAE,CAAC;IACxB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,mBAAmB,EAAE,MAAM,CAAC;IAC5B,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC,CAAC;CAC3C,CAyBA"}
1
+ {"version":3,"file":"reuse.d.ts","sourceRoot":"","sources":["../../../src/commands/recon/reuse.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAEH,MAAM,WAAW,aAAa;IAC5B,0BAA0B;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,4DAA4D;IAC5D,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,2DAA2D;IAC3D,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,kFAAkF;IAClF,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB;0CACsC;IACtC,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB;;oDAEgD;IAChD,SAAS,EAAE,MAAM,EAAE,CAAC;CACrB;AAED;;;;;;;;;GASG;AACH,wBAAgB,0BAA0B,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,aAAa,CA4GtF;AAED;;;;;GAKG;AACH,wBAAgB,OAAO,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE,CAAC,EAAE,MAAM,EAAE,GAAG,MAAM,CASxD;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAQ3D;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,qBAAqB,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAmBhF;AAED;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,mBAAmB,CAAC,CAAC,EAAE,aAAa,EAAE,CAAC,EAAE,aAAa,GAAG,MAAM,CAiB9E;AAED,MAAM,WAAW,aAAa;IAC5B,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;IACV,UAAU,EAAE,MAAM,CAAC;IACnB,gEAAgE;IAChE,QAAQ,EAAE,WAAW,GAAG,aAAa,CAAC;IACtC,2CAA2C;IAC3C,IAAI,EAAE;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC;CACtE;AAED;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAC/B,UAAU,EAAE,aAAa,EAAE,EAC3B,SAAS,SAAM,GACd,aAAa,EAAE,CA2BjB;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,aAAa,GAAG;IAC3D,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;IAClB,aAAa,EAAE,MAAM,EAAE,CAAC;IACxB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,mBAAmB,EAAE,MAAM,CAAC;IAC5B,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC,CAAC;CAC3C,CAyBA"}
@@ -162,6 +162,72 @@ export function jaccard(a, b) {
162
162
  const union = sa.size + sb.size - inter;
163
163
  return inter / union;
164
164
  }
165
+ /**
166
+ * 0.19.0-α.10 (#85) — detect "this file is auto-generated, exclude
167
+ * from refactor-candidate scanning." Pure: takes file content, returns
168
+ * true if any of these markers appears in the first 400 characters:
169
+ *
170
+ * `@slowcook-template` — explicit "slowcook generated me" marker
171
+ * `@slowcook-stub` — placeholder waiting for brew to overwrite
172
+ * `@generated` — common convention (Facebook/Meta tooling)
173
+ * `AUTO-GENERATED` — case-insensitive plain English
174
+ * `auto-generated by` — common phrasing in tool output
175
+ * `Do not edit by hand` — common phrasing in templated files
176
+ *
177
+ * 400 chars is enough to capture a typical file header without scanning
178
+ * the whole body. Markers later in the file are deliberately ignored
179
+ * (e.g., a comment in the middle of a file mentioning "auto-generated"
180
+ * shouldn't kill the file's signal).
181
+ */
182
+ export function isAutoTemplateFile(content) {
183
+ const head = content.slice(0, 400);
184
+ if (head.includes("@slowcook-template"))
185
+ return true;
186
+ if (head.includes("@slowcook-stub"))
187
+ return true;
188
+ if (head.includes("@generated"))
189
+ return true;
190
+ if (/auto-generated/i.test(head))
191
+ return true;
192
+ if (/do not edit by hand/i.test(head))
193
+ return true;
194
+ return false;
195
+ }
196
+ /**
197
+ * 0.19.0-α.10 (#85) — match a single file path against a glob-ish
198
+ * exclusion pattern. Same shape as the refactor command's matchesScope
199
+ * (kept inline rather than cross-package-imported to avoid coupling
200
+ * recon to the refactor module).
201
+ *
202
+ * Supported:
203
+ * - exact match: "src/foo.ts"
204
+ * - directory prefix: "src/lib/entities/" (matches anything under)
205
+ * - star at end: "src/lib/data/*" (one segment after)
206
+ * - double-star: "src/lib/entities/**" (any depth)
207
+ * - filename glob: "*.mock.ts" (matches any path ending with)
208
+ */
209
+ export function matchesExcludePattern(filePath, pattern) {
210
+ if (pattern === filePath)
211
+ return true;
212
+ if (pattern.endsWith("/")) {
213
+ return filePath.startsWith(pattern);
214
+ }
215
+ if (pattern.endsWith("/**")) {
216
+ return filePath.startsWith(pattern.slice(0, -3) + "/") || filePath === pattern.slice(0, -3);
217
+ }
218
+ if (pattern.endsWith("/*")) {
219
+ const dir = pattern.slice(0, -2);
220
+ if (!filePath.startsWith(dir + "/"))
221
+ return false;
222
+ const rest = filePath.slice(dir.length + 1);
223
+ return !rest.includes("/");
224
+ }
225
+ if (pattern.startsWith("*.")) {
226
+ const ext = pattern.slice(1); // ".mock.ts"
227
+ return filePath.endsWith(ext);
228
+ }
229
+ return false;
230
+ }
165
231
  /**
166
232
  * Compute similarity between two structural signatures. Auto-
167
233
  * categorizes by JSX presence:
@@ -1 +1 @@
1
- {"version":3,"file":"reuse.js","sourceRoot":"","sources":["../../../src/commands/recon/reuse.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"reuse.js","sourceRoot":"","sources":["../../../src/commands/recon/reuse.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,65 @@
1
+ /**
2
+ * 0.19.0-α.11 (#84) — stale-stub detector.
3
+ *
4
+ * Empirical finding from rewo reuse-scan 2026-05-07: 6 @slowcook-stub
5
+ * files survived from incomplete story-016/018 brews. They're not
6
+ * refactor candidates (reuse-scan misclassified them at 100% similar
7
+ * because they're literally the same template body); they're
8
+ * INCOMPLETE WORK markers that should escalate to PM after a grace
9
+ * period.
10
+ *
11
+ * This module: walk src/, find @slowcook-stub markers, age each via
12
+ * `git log --diff-filter=A` (first-add date), report stale ones
13
+ * + (optionally) escalate to PM via gh comment on the source issue.
14
+ *
15
+ * Pure helpers below; cli wiring in recon's --stub-scan flag.
16
+ */
17
+ export interface StubFile {
18
+ /** Repo-relative path. */
19
+ path: string;
20
+ /** Story id extracted from the stub marker (e.g., "016", "018"). */
21
+ storyId: string | null;
22
+ /** ISO timestamp of the file's first-add commit. Null if git log
23
+ * couldn't resolve (file isn't tracked, repo isn't a git repo,
24
+ * etc.). */
25
+ firstAddedAt: string | null;
26
+ /** Age in days, computed against `now`. Null when firstAddedAt
27
+ * is null. */
28
+ ageDays: number | null;
29
+ /** Classification: fresh < gracePeriod, stale ≥ gracePeriod. */
30
+ classification: "fresh" | "stale" | "unknown";
31
+ }
32
+ /**
33
+ * Detect a `@slowcook-stub` marker in file content + extract the
34
+ * story id when one is named alongside it. Pure: no IO.
35
+ *
36
+ * Patterns recognized:
37
+ * `// @slowcook-stub story-016` — explicit story id
38
+ * `// @slowcook-stub` — bare; storyId = null
39
+ * `/* @slowcook-stub story-018 *\/` — block comment form
40
+ */
41
+ export declare function detectStubMarker(content: string): {
42
+ isStub: boolean;
43
+ storyId: string | null;
44
+ };
45
+ /**
46
+ * Compute days between two ISO timestamps. Pure: no clock IO. Returns
47
+ * a non-negative number rounded to 1 decimal.
48
+ */
49
+ export declare function daysBetween(earlierIso: string, laterIso: string): number;
50
+ /**
51
+ * Classify a stub by age against a grace period. Pure.
52
+ * ageDays === null → "unknown"
53
+ * ageDays < graceDays → "fresh"
54
+ * ageDays >= graceDays → "stale"
55
+ */
56
+ export declare function classifyStubAge(ageDays: number | null, graceDays: number): "fresh" | "stale" | "unknown";
57
+ /**
58
+ * Synthesize a PM-actionable comment body for an overdue stub.
59
+ * Pure: no IO. Caller posts via gh.
60
+ *
61
+ * 0.19.0-α.12 — appends slowcook:cost HTML marker so the comment is
62
+ * grep-able by downstream cost / activity aggregation tools.
63
+ */
64
+ export declare function buildStaleStubComment(stub: StubFile, graceDays: number, cliVersion?: string): string;
65
+ //# sourceMappingURL=stale-stubs.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stale-stubs.d.ts","sourceRoot":"","sources":["../../../src/commands/recon/stale-stubs.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,MAAM,WAAW,QAAQ;IACvB,0BAA0B;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,oEAAoE;IACpE,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB;;iBAEa;IACb,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B;mBACe;IACf,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,gEAAgE;IAChE,cAAc,EAAE,OAAO,GAAG,OAAO,GAAG,SAAS,CAAC;CAC/C;AAED;;;;;;;;GAQG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,MAAM,GAAG;IAAE,MAAM,EAAE,OAAO,CAAC;IAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAA;CAAE,CAK7F;AAED;;;GAGG;AACH,wBAAgB,WAAW,CAAC,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CAMxE;AAED;;;;;GAKG;AACH,wBAAgB,eAAe,CAC7B,OAAO,EAAE,MAAM,GAAG,IAAI,EACtB,SAAS,EAAE,MAAM,GAChB,OAAO,GAAG,OAAO,GAAG,SAAS,CAI/B;AAED;;;;;;GAMG;AACH,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,EAAE,UAAU,SAAW,GAAG,MAAM,CAoBtG"}
@@ -0,0 +1,84 @@
1
+ /**
2
+ * 0.19.0-α.11 (#84) — stale-stub detector.
3
+ *
4
+ * Empirical finding from rewo reuse-scan 2026-05-07: 6 @slowcook-stub
5
+ * files survived from incomplete story-016/018 brews. They're not
6
+ * refactor candidates (reuse-scan misclassified them at 100% similar
7
+ * because they're literally the same template body); they're
8
+ * INCOMPLETE WORK markers that should escalate to PM after a grace
9
+ * period.
10
+ *
11
+ * This module: walk src/, find @slowcook-stub markers, age each via
12
+ * `git log --diff-filter=A` (first-add date), report stale ones
13
+ * + (optionally) escalate to PM via gh comment on the source issue.
14
+ *
15
+ * Pure helpers below; cli wiring in recon's --stub-scan flag.
16
+ */
17
+ /**
18
+ * Detect a `@slowcook-stub` marker in file content + extract the
19
+ * story id when one is named alongside it. Pure: no IO.
20
+ *
21
+ * Patterns recognized:
22
+ * `// @slowcook-stub story-016` — explicit story id
23
+ * `// @slowcook-stub` — bare; storyId = null
24
+ * `/* @slowcook-stub story-018 *\/` — block comment form
25
+ */
26
+ export function detectStubMarker(content) {
27
+ const head = content.slice(0, 500);
28
+ if (!head.includes("@slowcook-stub"))
29
+ return { isStub: false, storyId: null };
30
+ const m = head.match(/@slowcook-stub\s+story-(\d+)/);
31
+ return { isStub: true, storyId: m ? m[1] : null };
32
+ }
33
+ /**
34
+ * Compute days between two ISO timestamps. Pure: no clock IO. Returns
35
+ * a non-negative number rounded to 1 decimal.
36
+ */
37
+ export function daysBetween(earlierIso, laterIso) {
38
+ const a = new Date(earlierIso).getTime();
39
+ const b = new Date(laterIso).getTime();
40
+ if (Number.isNaN(a) || Number.isNaN(b))
41
+ return 0;
42
+ const ms = Math.max(0, b - a);
43
+ return Math.round((ms / (1000 * 60 * 60 * 24)) * 10) / 10;
44
+ }
45
+ /**
46
+ * Classify a stub by age against a grace period. Pure.
47
+ * ageDays === null → "unknown"
48
+ * ageDays < graceDays → "fresh"
49
+ * ageDays >= graceDays → "stale"
50
+ */
51
+ export function classifyStubAge(ageDays, graceDays) {
52
+ if (ageDays === null)
53
+ return "unknown";
54
+ if (ageDays < graceDays)
55
+ return "fresh";
56
+ return "stale";
57
+ }
58
+ /**
59
+ * Synthesize a PM-actionable comment body for an overdue stub.
60
+ * Pure: no IO. Caller posts via gh.
61
+ *
62
+ * 0.19.0-α.12 — appends slowcook:cost HTML marker so the comment is
63
+ * grep-able by downstream cost / activity aggregation tools.
64
+ */
65
+ export function buildStaleStubComment(stub, graceDays, cliVersion = "0.19.0") {
66
+ const lines = [];
67
+ lines.push(`### slowcook · stub still incomplete after ${graceDays} days`);
68
+ lines.push("");
69
+ lines.push(`A \`@slowcook-stub\` marker still exists at \`${stub.path}\`${stub.firstAddedAt ? ` (added ${stub.ageDays} day(s) ago — ${stub.firstAddedAt.slice(0, 10)})` : ""}.`);
70
+ lines.push("");
71
+ lines.push("This means a brew never converged on this file — it's a placeholder that throws at runtime / returns a 501 stub response. The story it belongs to is incomplete.");
72
+ lines.push("");
73
+ lines.push("**PM action**: choose one:");
74
+ lines.push("");
75
+ lines.push("1. **Re-dispatch brew** for the story. The stub will be replaced.");
76
+ lines.push("2. **Hand-write the implementation** if brew can't converge after multiple attempts.");
77
+ lines.push("3. **Withdraw the story** if the feature is no longer wanted — close the issue + delete the stub file.");
78
+ lines.push("");
79
+ lines.push(`<sub>Posted by \`slowcook recon --stub-scan\`. Re-running this scan will re-post if the stub is still here in another ${graceDays} days.</sub>`);
80
+ lines.push("");
81
+ lines.push(`<!-- slowcook:cost agent=recon usd=0.0000 kind=stub-escalate path=${stub.path} story=${stub.storyId ?? "unknown"} age_days=${stub.ageDays ?? "unknown"} cli=${cliVersion} -->`);
82
+ return lines.join("\n");
83
+ }
84
+ //# sourceMappingURL=stale-stubs.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stale-stubs.js","sourceRoot":"","sources":["../../../src/commands/recon/stale-stubs.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,13 @@
1
1
  import type { LlmClient } from "./llm.js";
2
+ /**
3
+ * Strip the brand header, cost footer, and HTML cost marker out of a
4
+ * model-emitted markdown body. The calling code adds those around the
5
+ * output; if the model copies them from prior-turn context, we'd
6
+ * post duplicates. Cheap regex; safe to no-op when patterns absent.
7
+ *
8
+ * Visible for tests.
9
+ */
10
+ export declare function stripModelEmittedDuplicates(body: string): string;
2
11
  import type { ForgeAdapter, Spec } from "@slowcook-ai/core";
3
12
  export declare const LABEL_CHANGE_OF_MIND = "change-of-mind";
4
13
  export declare const LABEL_BLOCKED_CONTRADICTION = "blocked-contradiction";
@@ -6,6 +15,13 @@ export declare const LABEL_BLOCKED_OVERLAP = "blocked-overlap";
6
15
  export declare const LABEL_SPEC_SUBMITTED = "spec-submitted";
7
16
  export declare const LABEL_SPEC_READY = "spec-ready";
8
17
  export declare const LABEL_NEEDS_REFINEMENT = "needs-refinement";
18
+ /**
19
+ * cli α.44 — applied to an issue when refine has posted a multifurcation
20
+ * proposal. While present, future refine runs skip the multifurcation
21
+ * step (the PM is still deciding whether to file the split). PM removes
22
+ * the label after acting on the proposal.
23
+ */
24
+ export declare const LABEL_MULTIFURCATION_PROPOSED = "slowcook-multifurcation-proposed";
9
25
  /**
10
26
  * Branded header prepended to every clarifying-question comment so reviewers
11
27
  * can tell at a glance that the comment is agent-authored, even though GitHub
@@ -51,6 +67,10 @@ export type RefineOutcome = {
51
67
  } | {
52
68
  kind: "change-of-mind-accepted";
53
69
  supersedes: string[];
70
+ } | {
71
+ kind: "multifurcation-proposed";
72
+ commentId: number;
73
+ subIssueCount: number;
54
74
  } | {
55
75
  kind: "noop";
56
76
  reason: string;
@@ -62,6 +82,9 @@ interface ParseContext {
62
82
  createdAt: string;
63
83
  cliVersion: string;
64
84
  supersedes: string[];
85
+ /** 0.19.0-α.29 — passed through so synthesizeProposalsFromSpec can detect
86
+ * multi-app vs single-app shape and emit correct route file paths. */
87
+ repoRoot?: string;
65
88
  }
66
89
  export type AgentOutput = {
67
90
  kind: "questions";
@@ -1 +1 @@
1
- {"version":3,"file":"agent.d.ts","sourceRoot":"","sources":["../../../src/commands/refine/agent.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"agent.d.ts","sourceRoot":"","sources":["../../../src/commands/refine/agent.ts"],"names":[],"mappings":"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"}