@shepai/cli 1.18.0 → 1.20.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 (174) hide show
  1. package/dist/eslint.config.mjs +3 -0
  2. package/dist/src/application/ports/output/agents/feature-agent-process.interface.d.ts +2 -1
  3. package/dist/src/application/ports/output/agents/feature-agent-process.interface.d.ts.map +1 -1
  4. package/dist/src/application/ports/output/agents/index.d.ts +1 -0
  5. package/dist/src/application/ports/output/agents/index.d.ts.map +1 -1
  6. package/dist/src/application/ports/output/agents/phase-timing-repository.interface.d.ts +44 -0
  7. package/dist/src/application/ports/output/agents/phase-timing-repository.interface.d.ts.map +1 -0
  8. package/dist/src/application/ports/output/agents/phase-timing-repository.interface.js +11 -0
  9. package/dist/src/application/use-cases/agents/approve-agent-run.use-case.d.ts.map +1 -1
  10. package/dist/src/application/use-cases/agents/approve-agent-run.use-case.js +6 -2
  11. package/dist/src/application/use-cases/agents/reject-agent-run.use-case.d.ts.map +1 -1
  12. package/dist/src/application/use-cases/agents/reject-agent-run.use-case.js +0 -1
  13. package/dist/src/application/use-cases/features/create-feature.use-case.d.ts +12 -2
  14. package/dist/src/application/use-cases/features/create-feature.use-case.d.ts.map +1 -1
  15. package/dist/src/application/use-cases/features/create-feature.use-case.js +45 -10
  16. package/dist/src/application/use-cases/features/resume-feature.use-case.js +2 -2
  17. package/dist/src/domain/factories/settings-defaults.factory.js +2 -2
  18. package/dist/src/domain/generated/output.d.ts +48 -7
  19. package/dist/src/domain/generated/output.d.ts.map +1 -1
  20. package/dist/src/domain/generated/output.js +8 -0
  21. package/dist/src/infrastructure/di/container.d.ts.map +1 -1
  22. package/dist/src/infrastructure/di/container.js +7 -0
  23. package/dist/src/infrastructure/persistence/sqlite/mappers/agent-run.mapper.d.ts +1 -2
  24. package/dist/src/infrastructure/persistence/sqlite/mappers/agent-run.mapper.d.ts.map +1 -1
  25. package/dist/src/infrastructure/persistence/sqlite/mappers/agent-run.mapper.js +4 -4
  26. package/dist/src/infrastructure/persistence/sqlite/mappers/settings.mapper.d.ts.map +1 -1
  27. package/dist/src/infrastructure/persistence/sqlite/migrations.d.ts.map +1 -1
  28. package/dist/src/infrastructure/persistence/sqlite/migrations.js +31 -0
  29. package/dist/src/infrastructure/repositories/agent-run.repository.d.ts.map +1 -1
  30. package/dist/src/infrastructure/repositories/agent-run.repository.js +5 -9
  31. package/dist/src/infrastructure/repositories/sqlite-phase-timing.repository.d.ts +21 -0
  32. package/dist/src/infrastructure/repositories/sqlite-phase-timing.repository.d.ts.map +1 -0
  33. package/dist/src/infrastructure/repositories/sqlite-phase-timing.repository.js +100 -0
  34. package/dist/src/infrastructure/services/agents/feature-agent/feature-agent-graph.d.ts +305 -13
  35. package/dist/src/infrastructure/services/agents/feature-agent/feature-agent-graph.d.ts.map +1 -1
  36. package/dist/src/infrastructure/services/agents/feature-agent/feature-agent-graph.js +124 -7
  37. package/dist/src/infrastructure/services/agents/feature-agent/feature-agent-process.service.d.ts +2 -1
  38. package/dist/src/infrastructure/services/agents/feature-agent/feature-agent-process.service.d.ts.map +1 -1
  39. package/dist/src/infrastructure/services/agents/feature-agent/feature-agent-process.service.js +2 -2
  40. package/dist/src/infrastructure/services/agents/feature-agent/feature-agent-worker.d.ts +2 -1
  41. package/dist/src/infrastructure/services/agents/feature-agent/feature-agent-worker.d.ts.map +1 -1
  42. package/dist/src/infrastructure/services/agents/feature-agent/feature-agent-worker.js +19 -7
  43. package/dist/src/infrastructure/services/agents/feature-agent/nodes/implement.node.js +1 -1
  44. package/dist/src/infrastructure/services/agents/feature-agent/nodes/node-helpers.d.ts +11 -2
  45. package/dist/src/infrastructure/services/agents/feature-agent/nodes/node-helpers.d.ts.map +1 -1
  46. package/dist/src/infrastructure/services/agents/feature-agent/nodes/node-helpers.js +46 -15
  47. package/dist/src/infrastructure/services/agents/feature-agent/nodes/repair.node.d.ts +23 -0
  48. package/dist/src/infrastructure/services/agents/feature-agent/nodes/repair.node.d.ts.map +1 -0
  49. package/dist/src/infrastructure/services/agents/feature-agent/nodes/repair.node.js +77 -0
  50. package/dist/src/infrastructure/services/agents/feature-agent/nodes/schemas/plan.schema.d.ts +4 -0
  51. package/dist/src/infrastructure/services/agents/feature-agent/nodes/schemas/plan.schema.d.ts.map +1 -0
  52. package/dist/src/infrastructure/services/agents/feature-agent/nodes/schemas/plan.schema.js +54 -0
  53. package/dist/src/infrastructure/services/agents/feature-agent/nodes/schemas/research.schema.d.ts +3 -0
  54. package/dist/src/infrastructure/services/agents/feature-agent/nodes/schemas/research.schema.d.ts.map +1 -0
  55. package/dist/src/infrastructure/services/agents/feature-agent/nodes/schemas/research.schema.js +24 -0
  56. package/dist/src/infrastructure/services/agents/feature-agent/nodes/schemas/spec.schema.d.ts +4 -0
  57. package/dist/src/infrastructure/services/agents/feature-agent/nodes/schemas/spec.schema.d.ts.map +1 -0
  58. package/dist/src/infrastructure/services/agents/feature-agent/nodes/schemas/spec.schema.js +50 -0
  59. package/dist/src/infrastructure/services/agents/feature-agent/nodes/schemas/validation.d.ts +8 -0
  60. package/dist/src/infrastructure/services/agents/feature-agent/nodes/schemas/validation.d.ts.map +1 -0
  61. package/dist/src/infrastructure/services/agents/feature-agent/nodes/schemas/validation.js +36 -0
  62. package/dist/src/infrastructure/services/agents/feature-agent/nodes/validate.node.d.ts +12 -0
  63. package/dist/src/infrastructure/services/agents/feature-agent/nodes/validate.node.d.ts.map +1 -0
  64. package/dist/src/infrastructure/services/agents/feature-agent/nodes/validate.node.js +58 -0
  65. package/dist/src/infrastructure/services/agents/feature-agent/phase-timing-context.d.ts +30 -0
  66. package/dist/src/infrastructure/services/agents/feature-agent/phase-timing-context.d.ts.map +1 -0
  67. package/dist/src/infrastructure/services/agents/feature-agent/phase-timing-context.js +68 -0
  68. package/dist/src/infrastructure/services/agents/feature-agent/state.d.ts +5 -1
  69. package/dist/src/infrastructure/services/agents/feature-agent/state.d.ts.map +1 -1
  70. package/dist/src/infrastructure/services/agents/feature-agent/state.js +14 -1
  71. package/dist/src/infrastructure/services/ide-launchers/antigravity.launcher.d.ts +10 -0
  72. package/dist/src/infrastructure/services/ide-launchers/antigravity.launcher.d.ts.map +1 -0
  73. package/dist/src/infrastructure/services/ide-launchers/antigravity.launcher.js +21 -0
  74. package/dist/src/infrastructure/services/ide-launchers/cursor.launcher.d.ts +10 -0
  75. package/dist/src/infrastructure/services/ide-launchers/cursor.launcher.d.ts.map +1 -0
  76. package/dist/src/infrastructure/services/ide-launchers/cursor.launcher.js +21 -0
  77. package/dist/src/infrastructure/services/ide-launchers/ide-launcher.interface.d.ts +31 -0
  78. package/dist/src/infrastructure/services/ide-launchers/ide-launcher.interface.d.ts.map +1 -0
  79. package/dist/src/infrastructure/services/ide-launchers/ide-launcher.interface.js +8 -0
  80. package/dist/src/infrastructure/services/ide-launchers/ide-launcher.registry.d.ts +9 -0
  81. package/dist/src/infrastructure/services/ide-launchers/ide-launcher.registry.d.ts.map +1 -0
  82. package/dist/src/infrastructure/services/ide-launchers/ide-launcher.registry.js +24 -0
  83. package/dist/src/infrastructure/services/ide-launchers/vscode.launcher.d.ts +10 -0
  84. package/dist/src/infrastructure/services/ide-launchers/vscode.launcher.d.ts.map +1 -0
  85. package/dist/src/infrastructure/services/ide-launchers/vscode.launcher.js +21 -0
  86. package/dist/src/infrastructure/services/ide-launchers/windsurf.launcher.d.ts +10 -0
  87. package/dist/src/infrastructure/services/ide-launchers/windsurf.launcher.d.ts.map +1 -0
  88. package/dist/src/infrastructure/services/ide-launchers/windsurf.launcher.js +21 -0
  89. package/dist/src/infrastructure/services/ide-launchers/zed.launcher.d.ts +10 -0
  90. package/dist/src/infrastructure/services/ide-launchers/zed.launcher.d.ts.map +1 -0
  91. package/dist/src/infrastructure/services/ide-launchers/zed.launcher.js +21 -0
  92. package/dist/src/presentation/cli/commands/feat/approve.command.d.ts +12 -0
  93. package/dist/src/presentation/cli/commands/feat/approve.command.d.ts.map +1 -0
  94. package/dist/src/presentation/cli/commands/feat/approve.command.js +48 -0
  95. package/dist/src/presentation/cli/commands/feat/index.d.ts.map +1 -1
  96. package/dist/src/presentation/cli/commands/feat/index.js +7 -1
  97. package/dist/src/presentation/cli/commands/feat/ls.command.d.ts.map +1 -1
  98. package/dist/src/presentation/cli/commands/feat/ls.command.js +13 -5
  99. package/dist/src/presentation/cli/commands/feat/new.command.d.ts.map +1 -1
  100. package/dist/src/presentation/cli/commands/feat/new.command.js +34 -15
  101. package/dist/src/presentation/cli/commands/feat/reject.command.d.ts +12 -0
  102. package/dist/src/presentation/cli/commands/feat/reject.command.d.ts.map +1 -0
  103. package/dist/src/presentation/cli/commands/feat/reject.command.js +50 -0
  104. package/dist/src/presentation/cli/commands/feat/resolve-waiting-feature.d.ts +30 -0
  105. package/dist/src/presentation/cli/commands/feat/resolve-waiting-feature.d.ts.map +1 -0
  106. package/dist/src/presentation/cli/commands/feat/resolve-waiting-feature.js +57 -0
  107. package/dist/src/presentation/cli/commands/feat/review.command.d.ts +12 -0
  108. package/dist/src/presentation/cli/commands/feat/review.command.d.ts.map +1 -0
  109. package/dist/src/presentation/cli/commands/feat/review.command.js +49 -0
  110. package/dist/src/presentation/cli/commands/feat/show.command.d.ts.map +1 -1
  111. package/dist/src/presentation/cli/commands/feat/show.command.js +51 -6
  112. package/dist/src/presentation/cli/commands/ide-open.command.d.ts +10 -0
  113. package/dist/src/presentation/cli/commands/ide-open.command.d.ts.map +1 -0
  114. package/dist/src/presentation/cli/commands/ide-open.command.js +77 -0
  115. package/dist/src/presentation/cli/commands/settings/ide.command.d.ts +15 -0
  116. package/dist/src/presentation/cli/commands/settings/ide.command.d.ts.map +1 -0
  117. package/dist/src/presentation/cli/commands/settings/ide.command.js +76 -0
  118. package/dist/src/presentation/cli/commands/settings/index.d.ts.map +1 -1
  119. package/dist/src/presentation/cli/commands/settings/index.js +3 -1
  120. package/dist/src/presentation/cli/index.js +2 -0
  121. package/dist/src/presentation/tui/prompts/ide-select.prompt.d.ts +45 -0
  122. package/dist/src/presentation/tui/prompts/ide-select.prompt.d.ts.map +1 -0
  123. package/dist/src/presentation/tui/prompts/ide-select.prompt.js +44 -0
  124. package/dist/tsconfig.build.tsbuildinfo +1 -1
  125. package/package.json +1 -1
  126. package/web/.next/BUILD_ID +1 -1
  127. package/web/.next/build-manifest.json +2 -2
  128. package/web/.next/cache/.previewinfo +1 -1
  129. package/web/.next/cache/.rscinfo +1 -1
  130. package/web/.next/cache/config.json +3 -3
  131. package/web/.next/fallback-build-manifest.json +2 -2
  132. package/web/.next/prerender-manifest.json +3 -3
  133. package/web/.next/required-server-files.js +1 -1
  134. package/web/.next/required-server-files.json +1 -1
  135. package/web/.next/server/app/_global-error.html +2 -2
  136. package/web/.next/server/app/_global-error.rsc +1 -1
  137. package/web/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +1 -1
  138. package/web/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
  139. package/web/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
  140. package/web/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
  141. package/web/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  142. package/web/.next/server/app/_not-found.html +2 -2
  143. package/web/.next/server/app/_not-found.rsc +1 -1
  144. package/web/.next/server/app/_not-found.segments/_full.segment.rsc +1 -1
  145. package/web/.next/server/app/_not-found.segments/_head.segment.rsc +1 -1
  146. package/web/.next/server/app/_not-found.segments/_index.segment.rsc +1 -1
  147. package/web/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +1 -1
  148. package/web/.next/server/app/_not-found.segments/_not-found.segment.rsc +1 -1
  149. package/web/.next/server/app/_not-found.segments/_tree.segment.rsc +1 -1
  150. package/web/.next/server/app/index.html +2 -2
  151. package/web/.next/server/app/index.rsc +1 -1
  152. package/web/.next/server/app/index.segments/__PAGE__.segment.rsc +1 -1
  153. package/web/.next/server/app/index.segments/_full.segment.rsc +1 -1
  154. package/web/.next/server/app/index.segments/_head.segment.rsc +1 -1
  155. package/web/.next/server/app/index.segments/_index.segment.rsc +1 -1
  156. package/web/.next/server/app/index.segments/_tree.segment.rsc +1 -1
  157. package/web/.next/server/app/version.html +2 -2
  158. package/web/.next/server/app/version.rsc +1 -1
  159. package/web/.next/server/app/version.segments/_full.segment.rsc +1 -1
  160. package/web/.next/server/app/version.segments/_head.segment.rsc +1 -1
  161. package/web/.next/server/app/version.segments/_index.segment.rsc +1 -1
  162. package/web/.next/server/app/version.segments/_tree.segment.rsc +1 -1
  163. package/web/.next/server/app/version.segments/version/__PAGE__.segment.rsc +1 -1
  164. package/web/.next/server/app/version.segments/version.segment.rsc +1 -1
  165. package/web/.next/server/chunks/ssr/_19be0743._.js +1 -1
  166. package/web/.next/server/pages/404.html +2 -2
  167. package/web/.next/server/pages/500.html +2 -2
  168. package/web/.next/server/server-reference-manifest.js +1 -1
  169. package/web/.next/server/server-reference-manifest.json +1 -1
  170. package/web/.next/trace +1 -1
  171. package/web/.next/trace-build +1 -1
  172. /package/web/.next/static/{iV3kEDpfUq_ttVqv3E57o → u-tyZUMnsIne6K_0rPmPO}/_buildManifest.js +0 -0
  173. /package/web/.next/static/{iV3kEDpfUq_ttVqv3E57o → u-tyZUMnsIne6K_0rPmPO}/_clientMiddlewareManifest.json +0 -0
  174. /package/web/.next/static/{iV3kEDpfUq_ttVqv3E57o → u-tyZUMnsIne6K_0rPmPO}/_ssgManifest.js +0 -0
@@ -45,14 +45,14 @@ let SQLiteAgentRunRepository = class SQLiteAgentRunRepository {
45
45
  started_at, completed_at, error,
46
46
  feature_id, repository_path,
47
47
  created_at, updated_at,
48
- approval_mode, approval_status
48
+ approval_gates
49
49
  ) VALUES (
50
50
  @id, @agent_type, @agent_name, @status, @prompt, @result,
51
51
  @session_id, @thread_id, @pid, @last_heartbeat,
52
52
  @started_at, @completed_at, @error,
53
53
  @feature_id, @repository_path,
54
54
  @created_at, @updated_at,
55
- @approval_mode, @approval_status
55
+ @approval_gates
56
56
  )
57
57
  `);
58
58
  stmt.run(row);
@@ -108,13 +108,9 @@ let SQLiteAgentRunRepository = class SQLiteAgentRunRepository {
108
108
  setClauses.push('error = @error');
109
109
  params.error = updates.error;
110
110
  }
111
- if (updates?.approvalMode !== undefined) {
112
- setClauses.push('approval_mode = @approval_mode');
113
- params.approval_mode = updates.approvalMode;
114
- }
115
- if (updates?.approvalStatus !== undefined) {
116
- setClauses.push('approval_status = @approval_status');
117
- params.approval_status = updates.approvalStatus;
111
+ if (updates?.approvalGates !== undefined) {
112
+ setClauses.push('approval_gates = @approval_gates');
113
+ params.approval_gates = JSON.stringify(updates.approvalGates);
118
114
  }
119
115
  const stmt = this.db.prepare(`UPDATE agent_runs SET ${setClauses.join(', ')} WHERE id = @id`);
120
116
  stmt.run(params);
@@ -0,0 +1,21 @@
1
+ /**
2
+ * SQLite Phase Timing Repository Implementation
3
+ *
4
+ * Implements IPhaseTimingRepository using SQLite database.
5
+ * Uses prepared statements to prevent SQL injection.
6
+ */
7
+ import type Database from 'better-sqlite3';
8
+ import type { IPhaseTimingRepository } from '../../application/ports/output/agents/phase-timing-repository.interface.js';
9
+ import type { PhaseTiming } from '../../domain/generated/output.js';
10
+ /**
11
+ * SQLite implementation of IPhaseTimingRepository.
12
+ */
13
+ export declare class SQLitePhaseTimingRepository implements IPhaseTimingRepository {
14
+ private readonly db;
15
+ constructor(db: Database.Database);
16
+ save(phaseTiming: PhaseTiming): Promise<void>;
17
+ update(id: string, updates: Partial<Pick<PhaseTiming, 'completedAt' | 'durationMs'>>): Promise<void>;
18
+ findByRunId(agentRunId: string): Promise<PhaseTiming[]>;
19
+ findByFeatureId(featureId: string): Promise<PhaseTiming[]>;
20
+ }
21
+ //# sourceMappingURL=sqlite-phase-timing.repository.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sqlite-phase-timing.repository.d.ts","sourceRoot":"","sources":["../../../../src/infrastructure/repositories/sqlite-phase-timing.repository.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,QAAQ,MAAM,gBAAgB,CAAC;AAE3C,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,4EAA4E,CAAC;AACzH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,kCAAkC,CAAC;AA0CpE;;GAEG;AACH,qBACa,2BAA4B,YAAW,sBAAsB;IAC5D,OAAO,CAAC,QAAQ,CAAC,EAAE;gBAAF,EAAE,EAAE,QAAQ,CAAC,QAAQ;IAE5C,IAAI,CAAC,WAAW,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC;IAgB7C,MAAM,CACV,EAAE,EAAE,MAAM,EACV,OAAO,EAAE,OAAO,CAAC,IAAI,CAAC,WAAW,EAAE,aAAa,GAAG,YAAY,CAAC,CAAC,GAChE,OAAO,CAAC,IAAI,CAAC;IAyBV,WAAW,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC;IASvD,eAAe,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC;CAWjE"}
@@ -0,0 +1,100 @@
1
+ /**
2
+ * SQLite Phase Timing Repository Implementation
3
+ *
4
+ * Implements IPhaseTimingRepository using SQLite database.
5
+ * Uses prepared statements to prevent SQL injection.
6
+ */
7
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
8
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
9
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
10
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
11
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
12
+ };
13
+ var __metadata = (this && this.__metadata) || function (k, v) {
14
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
15
+ };
16
+ import { injectable } from 'tsyringe';
17
+ function toDatabase(timing) {
18
+ return {
19
+ id: timing.id,
20
+ agent_run_id: timing.agentRunId,
21
+ phase: timing.phase,
22
+ started_at: timing.startedAt instanceof Date ? timing.startedAt.getTime() : timing.startedAt,
23
+ completed_at: timing.completedAt instanceof Date ? timing.completedAt.getTime() : null,
24
+ duration_ms: timing.durationMs != null ? Number(timing.durationMs) : null,
25
+ created_at: timing.createdAt instanceof Date ? timing.createdAt.getTime() : timing.createdAt,
26
+ updated_at: timing.updatedAt instanceof Date ? timing.updatedAt.getTime() : timing.updatedAt,
27
+ };
28
+ }
29
+ function fromDatabase(row) {
30
+ return {
31
+ id: row.id,
32
+ agentRunId: row.agent_run_id,
33
+ phase: row.phase,
34
+ startedAt: new Date(row.started_at),
35
+ createdAt: new Date(row.created_at),
36
+ updatedAt: new Date(row.updated_at),
37
+ ...(row.completed_at !== null && { completedAt: new Date(row.completed_at) }),
38
+ ...(row.duration_ms !== null && { durationMs: BigInt(row.duration_ms) }),
39
+ };
40
+ }
41
+ /**
42
+ * SQLite implementation of IPhaseTimingRepository.
43
+ */
44
+ let SQLitePhaseTimingRepository = class SQLitePhaseTimingRepository {
45
+ db;
46
+ constructor(db) {
47
+ this.db = db;
48
+ }
49
+ async save(phaseTiming) {
50
+ const row = toDatabase(phaseTiming);
51
+ const stmt = this.db.prepare(`
52
+ INSERT INTO phase_timings (
53
+ id, agent_run_id, phase, started_at, completed_at, duration_ms,
54
+ created_at, updated_at
55
+ ) VALUES (
56
+ @id, @agent_run_id, @phase, @started_at, @completed_at, @duration_ms,
57
+ @created_at, @updated_at
58
+ )
59
+ `);
60
+ stmt.run(row);
61
+ }
62
+ async update(id, updates) {
63
+ const setClauses = ['updated_at = @updated_at'];
64
+ const params = {
65
+ id,
66
+ updated_at: Date.now(),
67
+ };
68
+ if (updates.completedAt !== undefined) {
69
+ setClauses.push('completed_at = @completed_at');
70
+ params.completed_at =
71
+ updates.completedAt instanceof Date ? updates.completedAt.getTime() : updates.completedAt;
72
+ }
73
+ if (updates.durationMs !== undefined) {
74
+ setClauses.push('duration_ms = @duration_ms');
75
+ params.duration_ms = updates.durationMs;
76
+ }
77
+ const stmt = this.db.prepare(`UPDATE phase_timings SET ${setClauses.join(', ')} WHERE id = @id`);
78
+ stmt.run(params);
79
+ }
80
+ async findByRunId(agentRunId) {
81
+ const stmt = this.db.prepare('SELECT * FROM phase_timings WHERE agent_run_id = ? ORDER BY created_at');
82
+ const rows = stmt.all(agentRunId);
83
+ return rows.map(fromDatabase);
84
+ }
85
+ async findByFeatureId(featureId) {
86
+ const stmt = this.db.prepare(`
87
+ SELECT pt.* FROM phase_timings pt
88
+ INNER JOIN agent_runs ar ON pt.agent_run_id = ar.id
89
+ WHERE ar.feature_id = ?
90
+ ORDER BY pt.created_at
91
+ `);
92
+ const rows = stmt.all(featureId);
93
+ return rows.map(fromDatabase);
94
+ }
95
+ };
96
+ SQLitePhaseTimingRepository = __decorate([
97
+ injectable(),
98
+ __metadata("design:paramtypes", [Object])
99
+ ], SQLitePhaseTimingRepository);
100
+ export { SQLitePhaseTimingRepository };
@@ -4,10 +4,11 @@ export { FeatureAgentAnnotation, type FeatureAgentState } from './state.js';
4
4
  /**
5
5
  * Factory function that creates and compiles the feature-agent LangGraph.
6
6
  *
7
- * The graph defines a linear SDLC workflow:
8
- * analyze → requirements → research → plan → implement
7
+ * The graph defines a linear SDLC workflow with validation gates:
8
+ * analyze → validate → requirements → validate → research → validate → plan → validate → implement
9
9
  *
10
- * Each node delegates work to the injected IAgentExecutor (e.g. Claude Code).
10
+ * Each YAML-producing node is followed by a validate/repair loop that ensures
11
+ * the output YAML conforms to its schema before proceeding.
11
12
  *
12
13
  * @param executor - The agent executor to delegate prompt execution to
13
14
  * @param checkpointer - Optional checkpoint saver for state persistence
@@ -20,8 +21,11 @@ export declare function createFeatureAgentGraph(executor: IAgentExecutor, checkp
20
21
  worktreePath: string;
21
22
  currentNode: string;
22
23
  error: string | null;
23
- approvalMode: string | undefined;
24
+ approvalGates: import("../../../../domain/generated/output.js").ApprovalGates | undefined;
24
25
  messages: string[];
26
+ validationRetries: number;
27
+ lastValidationTarget: string;
28
+ lastValidationErrors: string[];
25
29
  }, {
26
30
  featureId?: string | undefined;
27
31
  repositoryPath?: string | undefined;
@@ -29,9 +33,12 @@ export declare function createFeatureAgentGraph(executor: IAgentExecutor, checkp
29
33
  worktreePath?: string | undefined;
30
34
  currentNode?: string | undefined;
31
35
  error?: string | null | undefined;
32
- approvalMode?: string | undefined;
36
+ approvalGates?: import("../../../../domain/generated/output.js").ApprovalGates | undefined;
33
37
  messages?: string[] | undefined;
34
- }, "__start__" | "analyze" | "requirements" | "research" | "plan" | "implement", {
38
+ validationRetries?: number | undefined;
39
+ lastValidationTarget?: string | undefined;
40
+ lastValidationErrors?: string[] | undefined;
41
+ }, "__start__" | "analyze" | "requirements" | "plan" | "implement" | "research" | "validate_spec_analyze" | "validate_spec_requirements" | "validate_research" | "validate_plan_tasks" | "repair_spec_analyze" | "repair_spec_requirements" | "repair_research" | "repair_plan_tasks", {
35
42
  featureId: {
36
43
  (): import("@langchain/langgraph").LastValue<string>;
37
44
  (annotation: import("@langchain/langgraph").SingleReducer<string, string>): import("@langchain/langgraph").BinaryOperatorAggregate<string, string>;
@@ -58,8 +65,11 @@ export declare function createFeatureAgentGraph(executor: IAgentExecutor, checkp
58
65
  Root: <S extends import("@langchain/langgraph").StateDefinition>(sd: S) => import("@langchain/langgraph").AnnotationRoot<S>;
59
66
  };
60
67
  error: import("@langchain/langgraph").BinaryOperatorAggregate<string | null, string | null>;
61
- approvalMode: import("@langchain/langgraph").BinaryOperatorAggregate<string | undefined, string | undefined>;
68
+ approvalGates: import("@langchain/langgraph").BinaryOperatorAggregate<import("../../../../domain/generated/output.js").ApprovalGates | undefined, import("../../../../domain/generated/output.js").ApprovalGates | undefined>;
62
69
  messages: import("@langchain/langgraph").BinaryOperatorAggregate<string[], string[]>;
70
+ validationRetries: import("@langchain/langgraph").BinaryOperatorAggregate<number, number>;
71
+ lastValidationTarget: import("@langchain/langgraph").BinaryOperatorAggregate<string, string>;
72
+ lastValidationErrors: import("@langchain/langgraph").BinaryOperatorAggregate<string[], string[]>;
63
73
  }, {
64
74
  featureId: {
65
75
  (): import("@langchain/langgraph").LastValue<string>;
@@ -87,8 +97,11 @@ export declare function createFeatureAgentGraph(executor: IAgentExecutor, checkp
87
97
  Root: <S extends import("@langchain/langgraph").StateDefinition>(sd: S) => import("@langchain/langgraph").AnnotationRoot<S>;
88
98
  };
89
99
  error: import("@langchain/langgraph").BinaryOperatorAggregate<string | null, string | null>;
90
- approvalMode: import("@langchain/langgraph").BinaryOperatorAggregate<string | undefined, string | undefined>;
100
+ approvalGates: import("@langchain/langgraph").BinaryOperatorAggregate<import("../../../../domain/generated/output.js").ApprovalGates | undefined, import("../../../../domain/generated/output.js").ApprovalGates | undefined>;
91
101
  messages: import("@langchain/langgraph").BinaryOperatorAggregate<string[], string[]>;
102
+ validationRetries: import("@langchain/langgraph").BinaryOperatorAggregate<number, number>;
103
+ lastValidationTarget: import("@langchain/langgraph").BinaryOperatorAggregate<string, string>;
104
+ lastValidationErrors: import("@langchain/langgraph").BinaryOperatorAggregate<string[], string[]>;
92
105
  }, import("@langchain/langgraph").StateDefinition, {
93
106
  analyze: Partial<import("@langchain/langgraph").StateType<{
94
107
  featureId: {
@@ -117,8 +130,11 @@ export declare function createFeatureAgentGraph(executor: IAgentExecutor, checkp
117
130
  Root: <S extends import("@langchain/langgraph").StateDefinition>(sd: S) => import("@langchain/langgraph").AnnotationRoot<S>;
118
131
  };
119
132
  error: import("@langchain/langgraph").BinaryOperatorAggregate<string | null, string | null>;
120
- approvalMode: import("@langchain/langgraph").BinaryOperatorAggregate<string | undefined, string | undefined>;
133
+ approvalGates: import("@langchain/langgraph").BinaryOperatorAggregate<import("../../../../domain/generated/output.js").ApprovalGates | undefined, import("../../../../domain/generated/output.js").ApprovalGates | undefined>;
121
134
  messages: import("@langchain/langgraph").BinaryOperatorAggregate<string[], string[]>;
135
+ validationRetries: import("@langchain/langgraph").BinaryOperatorAggregate<number, number>;
136
+ lastValidationTarget: import("@langchain/langgraph").BinaryOperatorAggregate<string, string>;
137
+ lastValidationErrors: import("@langchain/langgraph").BinaryOperatorAggregate<string[], string[]>;
122
138
  }>>;
123
139
  requirements: Partial<import("@langchain/langgraph").StateType<{
124
140
  featureId: {
@@ -147,8 +163,11 @@ export declare function createFeatureAgentGraph(executor: IAgentExecutor, checkp
147
163
  Root: <S extends import("@langchain/langgraph").StateDefinition>(sd: S) => import("@langchain/langgraph").AnnotationRoot<S>;
148
164
  };
149
165
  error: import("@langchain/langgraph").BinaryOperatorAggregate<string | null, string | null>;
150
- approvalMode: import("@langchain/langgraph").BinaryOperatorAggregate<string | undefined, string | undefined>;
166
+ approvalGates: import("@langchain/langgraph").BinaryOperatorAggregate<import("../../../../domain/generated/output.js").ApprovalGates | undefined, import("../../../../domain/generated/output.js").ApprovalGates | undefined>;
151
167
  messages: import("@langchain/langgraph").BinaryOperatorAggregate<string[], string[]>;
168
+ validationRetries: import("@langchain/langgraph").BinaryOperatorAggregate<number, number>;
169
+ lastValidationTarget: import("@langchain/langgraph").BinaryOperatorAggregate<string, string>;
170
+ lastValidationErrors: import("@langchain/langgraph").BinaryOperatorAggregate<string[], string[]>;
152
171
  }>>;
153
172
  research: Partial<import("@langchain/langgraph").StateType<{
154
173
  featureId: {
@@ -177,8 +196,11 @@ export declare function createFeatureAgentGraph(executor: IAgentExecutor, checkp
177
196
  Root: <S extends import("@langchain/langgraph").StateDefinition>(sd: S) => import("@langchain/langgraph").AnnotationRoot<S>;
178
197
  };
179
198
  error: import("@langchain/langgraph").BinaryOperatorAggregate<string | null, string | null>;
180
- approvalMode: import("@langchain/langgraph").BinaryOperatorAggregate<string | undefined, string | undefined>;
199
+ approvalGates: import("@langchain/langgraph").BinaryOperatorAggregate<import("../../../../domain/generated/output.js").ApprovalGates | undefined, import("../../../../domain/generated/output.js").ApprovalGates | undefined>;
181
200
  messages: import("@langchain/langgraph").BinaryOperatorAggregate<string[], string[]>;
201
+ validationRetries: import("@langchain/langgraph").BinaryOperatorAggregate<number, number>;
202
+ lastValidationTarget: import("@langchain/langgraph").BinaryOperatorAggregate<string, string>;
203
+ lastValidationErrors: import("@langchain/langgraph").BinaryOperatorAggregate<string[], string[]>;
182
204
  }>>;
183
205
  plan: Partial<import("@langchain/langgraph").StateType<{
184
206
  featureId: {
@@ -207,8 +229,11 @@ export declare function createFeatureAgentGraph(executor: IAgentExecutor, checkp
207
229
  Root: <S extends import("@langchain/langgraph").StateDefinition>(sd: S) => import("@langchain/langgraph").AnnotationRoot<S>;
208
230
  };
209
231
  error: import("@langchain/langgraph").BinaryOperatorAggregate<string | null, string | null>;
210
- approvalMode: import("@langchain/langgraph").BinaryOperatorAggregate<string | undefined, string | undefined>;
232
+ approvalGates: import("@langchain/langgraph").BinaryOperatorAggregate<import("../../../../domain/generated/output.js").ApprovalGates | undefined, import("../../../../domain/generated/output.js").ApprovalGates | undefined>;
211
233
  messages: import("@langchain/langgraph").BinaryOperatorAggregate<string[], string[]>;
234
+ validationRetries: import("@langchain/langgraph").BinaryOperatorAggregate<number, number>;
235
+ lastValidationTarget: import("@langchain/langgraph").BinaryOperatorAggregate<string, string>;
236
+ lastValidationErrors: import("@langchain/langgraph").BinaryOperatorAggregate<string[], string[]>;
212
237
  }>>;
213
238
  implement: Partial<import("@langchain/langgraph").StateType<{
214
239
  featureId: {
@@ -237,8 +262,275 @@ export declare function createFeatureAgentGraph(executor: IAgentExecutor, checkp
237
262
  Root: <S extends import("@langchain/langgraph").StateDefinition>(sd: S) => import("@langchain/langgraph").AnnotationRoot<S>;
238
263
  };
239
264
  error: import("@langchain/langgraph").BinaryOperatorAggregate<string | null, string | null>;
240
- approvalMode: import("@langchain/langgraph").BinaryOperatorAggregate<string | undefined, string | undefined>;
265
+ approvalGates: import("@langchain/langgraph").BinaryOperatorAggregate<import("../../../../domain/generated/output.js").ApprovalGates | undefined, import("../../../../domain/generated/output.js").ApprovalGates | undefined>;
241
266
  messages: import("@langchain/langgraph").BinaryOperatorAggregate<string[], string[]>;
267
+ validationRetries: import("@langchain/langgraph").BinaryOperatorAggregate<number, number>;
268
+ lastValidationTarget: import("@langchain/langgraph").BinaryOperatorAggregate<string, string>;
269
+ lastValidationErrors: import("@langchain/langgraph").BinaryOperatorAggregate<string[], string[]>;
270
+ }>>;
271
+ validate_spec_analyze: Partial<import("@langchain/langgraph").StateType<{
272
+ featureId: {
273
+ (): import("@langchain/langgraph").LastValue<string>;
274
+ (annotation: import("@langchain/langgraph").SingleReducer<string, string>): import("@langchain/langgraph").BinaryOperatorAggregate<string, string>;
275
+ Root: <S extends import("@langchain/langgraph").StateDefinition>(sd: S) => import("@langchain/langgraph").AnnotationRoot<S>;
276
+ };
277
+ repositoryPath: {
278
+ (): import("@langchain/langgraph").LastValue<string>;
279
+ (annotation: import("@langchain/langgraph").SingleReducer<string, string>): import("@langchain/langgraph").BinaryOperatorAggregate<string, string>;
280
+ Root: <S extends import("@langchain/langgraph").StateDefinition>(sd: S) => import("@langchain/langgraph").AnnotationRoot<S>;
281
+ };
282
+ specDir: {
283
+ (): import("@langchain/langgraph").LastValue<string>;
284
+ (annotation: import("@langchain/langgraph").SingleReducer<string, string>): import("@langchain/langgraph").BinaryOperatorAggregate<string, string>;
285
+ Root: <S extends import("@langchain/langgraph").StateDefinition>(sd: S) => import("@langchain/langgraph").AnnotationRoot<S>;
286
+ };
287
+ worktreePath: {
288
+ (): import("@langchain/langgraph").LastValue<string>;
289
+ (annotation: import("@langchain/langgraph").SingleReducer<string, string>): import("@langchain/langgraph").BinaryOperatorAggregate<string, string>;
290
+ Root: <S extends import("@langchain/langgraph").StateDefinition>(sd: S) => import("@langchain/langgraph").AnnotationRoot<S>;
291
+ };
292
+ currentNode: {
293
+ (): import("@langchain/langgraph").LastValue<string>;
294
+ (annotation: import("@langchain/langgraph").SingleReducer<string, string>): import("@langchain/langgraph").BinaryOperatorAggregate<string, string>;
295
+ Root: <S extends import("@langchain/langgraph").StateDefinition>(sd: S) => import("@langchain/langgraph").AnnotationRoot<S>;
296
+ };
297
+ error: import("@langchain/langgraph").BinaryOperatorAggregate<string | null, string | null>;
298
+ approvalGates: import("@langchain/langgraph").BinaryOperatorAggregate<import("../../../../domain/generated/output.js").ApprovalGates | undefined, import("../../../../domain/generated/output.js").ApprovalGates | undefined>;
299
+ messages: import("@langchain/langgraph").BinaryOperatorAggregate<string[], string[]>;
300
+ validationRetries: import("@langchain/langgraph").BinaryOperatorAggregate<number, number>;
301
+ lastValidationTarget: import("@langchain/langgraph").BinaryOperatorAggregate<string, string>;
302
+ lastValidationErrors: import("@langchain/langgraph").BinaryOperatorAggregate<string[], string[]>;
303
+ }>>;
304
+ validate_spec_requirements: Partial<import("@langchain/langgraph").StateType<{
305
+ featureId: {
306
+ (): import("@langchain/langgraph").LastValue<string>;
307
+ (annotation: import("@langchain/langgraph").SingleReducer<string, string>): import("@langchain/langgraph").BinaryOperatorAggregate<string, string>;
308
+ Root: <S extends import("@langchain/langgraph").StateDefinition>(sd: S) => import("@langchain/langgraph").AnnotationRoot<S>;
309
+ };
310
+ repositoryPath: {
311
+ (): import("@langchain/langgraph").LastValue<string>;
312
+ (annotation: import("@langchain/langgraph").SingleReducer<string, string>): import("@langchain/langgraph").BinaryOperatorAggregate<string, string>;
313
+ Root: <S extends import("@langchain/langgraph").StateDefinition>(sd: S) => import("@langchain/langgraph").AnnotationRoot<S>;
314
+ };
315
+ specDir: {
316
+ (): import("@langchain/langgraph").LastValue<string>;
317
+ (annotation: import("@langchain/langgraph").SingleReducer<string, string>): import("@langchain/langgraph").BinaryOperatorAggregate<string, string>;
318
+ Root: <S extends import("@langchain/langgraph").StateDefinition>(sd: S) => import("@langchain/langgraph").AnnotationRoot<S>;
319
+ };
320
+ worktreePath: {
321
+ (): import("@langchain/langgraph").LastValue<string>;
322
+ (annotation: import("@langchain/langgraph").SingleReducer<string, string>): import("@langchain/langgraph").BinaryOperatorAggregate<string, string>;
323
+ Root: <S extends import("@langchain/langgraph").StateDefinition>(sd: S) => import("@langchain/langgraph").AnnotationRoot<S>;
324
+ };
325
+ currentNode: {
326
+ (): import("@langchain/langgraph").LastValue<string>;
327
+ (annotation: import("@langchain/langgraph").SingleReducer<string, string>): import("@langchain/langgraph").BinaryOperatorAggregate<string, string>;
328
+ Root: <S extends import("@langchain/langgraph").StateDefinition>(sd: S) => import("@langchain/langgraph").AnnotationRoot<S>;
329
+ };
330
+ error: import("@langchain/langgraph").BinaryOperatorAggregate<string | null, string | null>;
331
+ approvalGates: import("@langchain/langgraph").BinaryOperatorAggregate<import("../../../../domain/generated/output.js").ApprovalGates | undefined, import("../../../../domain/generated/output.js").ApprovalGates | undefined>;
332
+ messages: import("@langchain/langgraph").BinaryOperatorAggregate<string[], string[]>;
333
+ validationRetries: import("@langchain/langgraph").BinaryOperatorAggregate<number, number>;
334
+ lastValidationTarget: import("@langchain/langgraph").BinaryOperatorAggregate<string, string>;
335
+ lastValidationErrors: import("@langchain/langgraph").BinaryOperatorAggregate<string[], string[]>;
336
+ }>>;
337
+ validate_research: Partial<import("@langchain/langgraph").StateType<{
338
+ featureId: {
339
+ (): import("@langchain/langgraph").LastValue<string>;
340
+ (annotation: import("@langchain/langgraph").SingleReducer<string, string>): import("@langchain/langgraph").BinaryOperatorAggregate<string, string>;
341
+ Root: <S extends import("@langchain/langgraph").StateDefinition>(sd: S) => import("@langchain/langgraph").AnnotationRoot<S>;
342
+ };
343
+ repositoryPath: {
344
+ (): import("@langchain/langgraph").LastValue<string>;
345
+ (annotation: import("@langchain/langgraph").SingleReducer<string, string>): import("@langchain/langgraph").BinaryOperatorAggregate<string, string>;
346
+ Root: <S extends import("@langchain/langgraph").StateDefinition>(sd: S) => import("@langchain/langgraph").AnnotationRoot<S>;
347
+ };
348
+ specDir: {
349
+ (): import("@langchain/langgraph").LastValue<string>;
350
+ (annotation: import("@langchain/langgraph").SingleReducer<string, string>): import("@langchain/langgraph").BinaryOperatorAggregate<string, string>;
351
+ Root: <S extends import("@langchain/langgraph").StateDefinition>(sd: S) => import("@langchain/langgraph").AnnotationRoot<S>;
352
+ };
353
+ worktreePath: {
354
+ (): import("@langchain/langgraph").LastValue<string>;
355
+ (annotation: import("@langchain/langgraph").SingleReducer<string, string>): import("@langchain/langgraph").BinaryOperatorAggregate<string, string>;
356
+ Root: <S extends import("@langchain/langgraph").StateDefinition>(sd: S) => import("@langchain/langgraph").AnnotationRoot<S>;
357
+ };
358
+ currentNode: {
359
+ (): import("@langchain/langgraph").LastValue<string>;
360
+ (annotation: import("@langchain/langgraph").SingleReducer<string, string>): import("@langchain/langgraph").BinaryOperatorAggregate<string, string>;
361
+ Root: <S extends import("@langchain/langgraph").StateDefinition>(sd: S) => import("@langchain/langgraph").AnnotationRoot<S>;
362
+ };
363
+ error: import("@langchain/langgraph").BinaryOperatorAggregate<string | null, string | null>;
364
+ approvalGates: import("@langchain/langgraph").BinaryOperatorAggregate<import("../../../../domain/generated/output.js").ApprovalGates | undefined, import("../../../../domain/generated/output.js").ApprovalGates | undefined>;
365
+ messages: import("@langchain/langgraph").BinaryOperatorAggregate<string[], string[]>;
366
+ validationRetries: import("@langchain/langgraph").BinaryOperatorAggregate<number, number>;
367
+ lastValidationTarget: import("@langchain/langgraph").BinaryOperatorAggregate<string, string>;
368
+ lastValidationErrors: import("@langchain/langgraph").BinaryOperatorAggregate<string[], string[]>;
369
+ }>>;
370
+ validate_plan_tasks: Partial<import("@langchain/langgraph").StateType<{
371
+ featureId: {
372
+ (): import("@langchain/langgraph").LastValue<string>;
373
+ (annotation: import("@langchain/langgraph").SingleReducer<string, string>): import("@langchain/langgraph").BinaryOperatorAggregate<string, string>;
374
+ Root: <S extends import("@langchain/langgraph").StateDefinition>(sd: S) => import("@langchain/langgraph").AnnotationRoot<S>;
375
+ };
376
+ repositoryPath: {
377
+ (): import("@langchain/langgraph").LastValue<string>;
378
+ (annotation: import("@langchain/langgraph").SingleReducer<string, string>): import("@langchain/langgraph").BinaryOperatorAggregate<string, string>;
379
+ Root: <S extends import("@langchain/langgraph").StateDefinition>(sd: S) => import("@langchain/langgraph").AnnotationRoot<S>;
380
+ };
381
+ specDir: {
382
+ (): import("@langchain/langgraph").LastValue<string>;
383
+ (annotation: import("@langchain/langgraph").SingleReducer<string, string>): import("@langchain/langgraph").BinaryOperatorAggregate<string, string>;
384
+ Root: <S extends import("@langchain/langgraph").StateDefinition>(sd: S) => import("@langchain/langgraph").AnnotationRoot<S>;
385
+ };
386
+ worktreePath: {
387
+ (): import("@langchain/langgraph").LastValue<string>;
388
+ (annotation: import("@langchain/langgraph").SingleReducer<string, string>): import("@langchain/langgraph").BinaryOperatorAggregate<string, string>;
389
+ Root: <S extends import("@langchain/langgraph").StateDefinition>(sd: S) => import("@langchain/langgraph").AnnotationRoot<S>;
390
+ };
391
+ currentNode: {
392
+ (): import("@langchain/langgraph").LastValue<string>;
393
+ (annotation: import("@langchain/langgraph").SingleReducer<string, string>): import("@langchain/langgraph").BinaryOperatorAggregate<string, string>;
394
+ Root: <S extends import("@langchain/langgraph").StateDefinition>(sd: S) => import("@langchain/langgraph").AnnotationRoot<S>;
395
+ };
396
+ error: import("@langchain/langgraph").BinaryOperatorAggregate<string | null, string | null>;
397
+ approvalGates: import("@langchain/langgraph").BinaryOperatorAggregate<import("../../../../domain/generated/output.js").ApprovalGates | undefined, import("../../../../domain/generated/output.js").ApprovalGates | undefined>;
398
+ messages: import("@langchain/langgraph").BinaryOperatorAggregate<string[], string[]>;
399
+ validationRetries: import("@langchain/langgraph").BinaryOperatorAggregate<number, number>;
400
+ lastValidationTarget: import("@langchain/langgraph").BinaryOperatorAggregate<string, string>;
401
+ lastValidationErrors: import("@langchain/langgraph").BinaryOperatorAggregate<string[], string[]>;
402
+ }>>;
403
+ repair_spec_analyze: Partial<import("@langchain/langgraph").StateType<{
404
+ featureId: {
405
+ (): import("@langchain/langgraph").LastValue<string>;
406
+ (annotation: import("@langchain/langgraph").SingleReducer<string, string>): import("@langchain/langgraph").BinaryOperatorAggregate<string, string>;
407
+ Root: <S extends import("@langchain/langgraph").StateDefinition>(sd: S) => import("@langchain/langgraph").AnnotationRoot<S>;
408
+ };
409
+ repositoryPath: {
410
+ (): import("@langchain/langgraph").LastValue<string>;
411
+ (annotation: import("@langchain/langgraph").SingleReducer<string, string>): import("@langchain/langgraph").BinaryOperatorAggregate<string, string>;
412
+ Root: <S extends import("@langchain/langgraph").StateDefinition>(sd: S) => import("@langchain/langgraph").AnnotationRoot<S>;
413
+ };
414
+ specDir: {
415
+ (): import("@langchain/langgraph").LastValue<string>;
416
+ (annotation: import("@langchain/langgraph").SingleReducer<string, string>): import("@langchain/langgraph").BinaryOperatorAggregate<string, string>;
417
+ Root: <S extends import("@langchain/langgraph").StateDefinition>(sd: S) => import("@langchain/langgraph").AnnotationRoot<S>;
418
+ };
419
+ worktreePath: {
420
+ (): import("@langchain/langgraph").LastValue<string>;
421
+ (annotation: import("@langchain/langgraph").SingleReducer<string, string>): import("@langchain/langgraph").BinaryOperatorAggregate<string, string>;
422
+ Root: <S extends import("@langchain/langgraph").StateDefinition>(sd: S) => import("@langchain/langgraph").AnnotationRoot<S>;
423
+ };
424
+ currentNode: {
425
+ (): import("@langchain/langgraph").LastValue<string>;
426
+ (annotation: import("@langchain/langgraph").SingleReducer<string, string>): import("@langchain/langgraph").BinaryOperatorAggregate<string, string>;
427
+ Root: <S extends import("@langchain/langgraph").StateDefinition>(sd: S) => import("@langchain/langgraph").AnnotationRoot<S>;
428
+ };
429
+ error: import("@langchain/langgraph").BinaryOperatorAggregate<string | null, string | null>;
430
+ approvalGates: import("@langchain/langgraph").BinaryOperatorAggregate<import("../../../../domain/generated/output.js").ApprovalGates | undefined, import("../../../../domain/generated/output.js").ApprovalGates | undefined>;
431
+ messages: import("@langchain/langgraph").BinaryOperatorAggregate<string[], string[]>;
432
+ validationRetries: import("@langchain/langgraph").BinaryOperatorAggregate<number, number>;
433
+ lastValidationTarget: import("@langchain/langgraph").BinaryOperatorAggregate<string, string>;
434
+ lastValidationErrors: import("@langchain/langgraph").BinaryOperatorAggregate<string[], string[]>;
435
+ }>>;
436
+ repair_spec_requirements: Partial<import("@langchain/langgraph").StateType<{
437
+ featureId: {
438
+ (): import("@langchain/langgraph").LastValue<string>;
439
+ (annotation: import("@langchain/langgraph").SingleReducer<string, string>): import("@langchain/langgraph").BinaryOperatorAggregate<string, string>;
440
+ Root: <S extends import("@langchain/langgraph").StateDefinition>(sd: S) => import("@langchain/langgraph").AnnotationRoot<S>;
441
+ };
442
+ repositoryPath: {
443
+ (): import("@langchain/langgraph").LastValue<string>;
444
+ (annotation: import("@langchain/langgraph").SingleReducer<string, string>): import("@langchain/langgraph").BinaryOperatorAggregate<string, string>;
445
+ Root: <S extends import("@langchain/langgraph").StateDefinition>(sd: S) => import("@langchain/langgraph").AnnotationRoot<S>;
446
+ };
447
+ specDir: {
448
+ (): import("@langchain/langgraph").LastValue<string>;
449
+ (annotation: import("@langchain/langgraph").SingleReducer<string, string>): import("@langchain/langgraph").BinaryOperatorAggregate<string, string>;
450
+ Root: <S extends import("@langchain/langgraph").StateDefinition>(sd: S) => import("@langchain/langgraph").AnnotationRoot<S>;
451
+ };
452
+ worktreePath: {
453
+ (): import("@langchain/langgraph").LastValue<string>;
454
+ (annotation: import("@langchain/langgraph").SingleReducer<string, string>): import("@langchain/langgraph").BinaryOperatorAggregate<string, string>;
455
+ Root: <S extends import("@langchain/langgraph").StateDefinition>(sd: S) => import("@langchain/langgraph").AnnotationRoot<S>;
456
+ };
457
+ currentNode: {
458
+ (): import("@langchain/langgraph").LastValue<string>;
459
+ (annotation: import("@langchain/langgraph").SingleReducer<string, string>): import("@langchain/langgraph").BinaryOperatorAggregate<string, string>;
460
+ Root: <S extends import("@langchain/langgraph").StateDefinition>(sd: S) => import("@langchain/langgraph").AnnotationRoot<S>;
461
+ };
462
+ error: import("@langchain/langgraph").BinaryOperatorAggregate<string | null, string | null>;
463
+ approvalGates: import("@langchain/langgraph").BinaryOperatorAggregate<import("../../../../domain/generated/output.js").ApprovalGates | undefined, import("../../../../domain/generated/output.js").ApprovalGates | undefined>;
464
+ messages: import("@langchain/langgraph").BinaryOperatorAggregate<string[], string[]>;
465
+ validationRetries: import("@langchain/langgraph").BinaryOperatorAggregate<number, number>;
466
+ lastValidationTarget: import("@langchain/langgraph").BinaryOperatorAggregate<string, string>;
467
+ lastValidationErrors: import("@langchain/langgraph").BinaryOperatorAggregate<string[], string[]>;
468
+ }>>;
469
+ repair_research: Partial<import("@langchain/langgraph").StateType<{
470
+ featureId: {
471
+ (): import("@langchain/langgraph").LastValue<string>;
472
+ (annotation: import("@langchain/langgraph").SingleReducer<string, string>): import("@langchain/langgraph").BinaryOperatorAggregate<string, string>;
473
+ Root: <S extends import("@langchain/langgraph").StateDefinition>(sd: S) => import("@langchain/langgraph").AnnotationRoot<S>;
474
+ };
475
+ repositoryPath: {
476
+ (): import("@langchain/langgraph").LastValue<string>;
477
+ (annotation: import("@langchain/langgraph").SingleReducer<string, string>): import("@langchain/langgraph").BinaryOperatorAggregate<string, string>;
478
+ Root: <S extends import("@langchain/langgraph").StateDefinition>(sd: S) => import("@langchain/langgraph").AnnotationRoot<S>;
479
+ };
480
+ specDir: {
481
+ (): import("@langchain/langgraph").LastValue<string>;
482
+ (annotation: import("@langchain/langgraph").SingleReducer<string, string>): import("@langchain/langgraph").BinaryOperatorAggregate<string, string>;
483
+ Root: <S extends import("@langchain/langgraph").StateDefinition>(sd: S) => import("@langchain/langgraph").AnnotationRoot<S>;
484
+ };
485
+ worktreePath: {
486
+ (): import("@langchain/langgraph").LastValue<string>;
487
+ (annotation: import("@langchain/langgraph").SingleReducer<string, string>): import("@langchain/langgraph").BinaryOperatorAggregate<string, string>;
488
+ Root: <S extends import("@langchain/langgraph").StateDefinition>(sd: S) => import("@langchain/langgraph").AnnotationRoot<S>;
489
+ };
490
+ currentNode: {
491
+ (): import("@langchain/langgraph").LastValue<string>;
492
+ (annotation: import("@langchain/langgraph").SingleReducer<string, string>): import("@langchain/langgraph").BinaryOperatorAggregate<string, string>;
493
+ Root: <S extends import("@langchain/langgraph").StateDefinition>(sd: S) => import("@langchain/langgraph").AnnotationRoot<S>;
494
+ };
495
+ error: import("@langchain/langgraph").BinaryOperatorAggregate<string | null, string | null>;
496
+ approvalGates: import("@langchain/langgraph").BinaryOperatorAggregate<import("../../../../domain/generated/output.js").ApprovalGates | undefined, import("../../../../domain/generated/output.js").ApprovalGates | undefined>;
497
+ messages: import("@langchain/langgraph").BinaryOperatorAggregate<string[], string[]>;
498
+ validationRetries: import("@langchain/langgraph").BinaryOperatorAggregate<number, number>;
499
+ lastValidationTarget: import("@langchain/langgraph").BinaryOperatorAggregate<string, string>;
500
+ lastValidationErrors: import("@langchain/langgraph").BinaryOperatorAggregate<string[], string[]>;
501
+ }>>;
502
+ repair_plan_tasks: Partial<import("@langchain/langgraph").StateType<{
503
+ featureId: {
504
+ (): import("@langchain/langgraph").LastValue<string>;
505
+ (annotation: import("@langchain/langgraph").SingleReducer<string, string>): import("@langchain/langgraph").BinaryOperatorAggregate<string, string>;
506
+ Root: <S extends import("@langchain/langgraph").StateDefinition>(sd: S) => import("@langchain/langgraph").AnnotationRoot<S>;
507
+ };
508
+ repositoryPath: {
509
+ (): import("@langchain/langgraph").LastValue<string>;
510
+ (annotation: import("@langchain/langgraph").SingleReducer<string, string>): import("@langchain/langgraph").BinaryOperatorAggregate<string, string>;
511
+ Root: <S extends import("@langchain/langgraph").StateDefinition>(sd: S) => import("@langchain/langgraph").AnnotationRoot<S>;
512
+ };
513
+ specDir: {
514
+ (): import("@langchain/langgraph").LastValue<string>;
515
+ (annotation: import("@langchain/langgraph").SingleReducer<string, string>): import("@langchain/langgraph").BinaryOperatorAggregate<string, string>;
516
+ Root: <S extends import("@langchain/langgraph").StateDefinition>(sd: S) => import("@langchain/langgraph").AnnotationRoot<S>;
517
+ };
518
+ worktreePath: {
519
+ (): import("@langchain/langgraph").LastValue<string>;
520
+ (annotation: import("@langchain/langgraph").SingleReducer<string, string>): import("@langchain/langgraph").BinaryOperatorAggregate<string, string>;
521
+ Root: <S extends import("@langchain/langgraph").StateDefinition>(sd: S) => import("@langchain/langgraph").AnnotationRoot<S>;
522
+ };
523
+ currentNode: {
524
+ (): import("@langchain/langgraph").LastValue<string>;
525
+ (annotation: import("@langchain/langgraph").SingleReducer<string, string>): import("@langchain/langgraph").BinaryOperatorAggregate<string, string>;
526
+ Root: <S extends import("@langchain/langgraph").StateDefinition>(sd: S) => import("@langchain/langgraph").AnnotationRoot<S>;
527
+ };
528
+ error: import("@langchain/langgraph").BinaryOperatorAggregate<string | null, string | null>;
529
+ approvalGates: import("@langchain/langgraph").BinaryOperatorAggregate<import("../../../../domain/generated/output.js").ApprovalGates | undefined, import("../../../../domain/generated/output.js").ApprovalGates | undefined>;
530
+ messages: import("@langchain/langgraph").BinaryOperatorAggregate<string[], string[]>;
531
+ validationRetries: import("@langchain/langgraph").BinaryOperatorAggregate<number, number>;
532
+ lastValidationTarget: import("@langchain/langgraph").BinaryOperatorAggregate<string, string>;
533
+ lastValidationErrors: import("@langchain/langgraph").BinaryOperatorAggregate<string[], string[]>;
242
534
  }>>;
243
535
  }, unknown, unknown>;
244
536
  //# sourceMappingURL=feature-agent-graph.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"feature-agent-graph.d.ts","sourceRoot":"","sources":["../../../../../../src/infrastructure/services/agents/feature-agent/feature-agent-graph.ts"],"names":[],"mappings":"AAAA,OAAO,EAA0B,KAAK,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AACxF,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,+DAA+D,CAAC;AASpG,OAAO,EAAE,sBAAsB,EAAE,KAAK,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAE5E;;;;;;;;;;;GAWG;AACH,wBAAgB,uBAAuB,CACrC,QAAQ,EAAE,cAAc,EACxB,YAAY,CAAC,EAAE,mBAAmB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;qBAgBnC"}
1
+ {"version":3,"file":"feature-agent-graph.d.ts","sourceRoot":"","sources":["../../../../../../src/infrastructure/services/agents/feature-agent/feature-agent-graph.ts"],"names":[],"mappings":"AAAA,OAAO,EAA0B,KAAK,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AACxF,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,+DAA+D,CAAC;AAepG,OAAO,EAAE,sBAAsB,EAAE,KAAK,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAuG5E;;;;;;;;;;;;GAYG;AACH,wBAAgB,uBAAuB,CACrC,QAAQ,EAAE,cAAc,EACxB,YAAY,CAAC,EAAE,mBAAmB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;qBAoDnC"}