@shepai/cli 1.30.0 → 1.32.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 (154) hide show
  1. package/dist/packages/core/src/application/ports/output/agents/feature-agent-process.interface.d.ts +4 -0
  2. package/dist/packages/core/src/application/ports/output/agents/feature-agent-process.interface.d.ts.map +1 -1
  3. package/dist/packages/core/src/application/ports/output/services/git-pr-service.interface.d.ts +165 -0
  4. package/dist/packages/core/src/application/ports/output/services/git-pr-service.interface.d.ts.map +1 -0
  5. package/dist/packages/core/src/application/ports/output/services/git-pr-service.interface.js +34 -0
  6. package/dist/packages/core/src/application/ports/output/services/index.d.ts +2 -0
  7. package/dist/packages/core/src/application/ports/output/services/index.d.ts.map +1 -1
  8. package/dist/packages/core/src/application/ports/output/services/index.js +1 -0
  9. package/dist/packages/core/src/application/use-cases/features/create/create-feature.use-case.d.ts.map +1 -1
  10. package/dist/packages/core/src/application/use-cases/features/create/create-feature.use-case.js +5 -0
  11. package/dist/packages/core/src/application/use-cases/features/create/types.d.ts +2 -0
  12. package/dist/packages/core/src/application/use-cases/features/create/types.d.ts.map +1 -1
  13. package/dist/packages/core/src/application/use-cases/features/resume-feature.use-case.d.ts.map +1 -1
  14. package/dist/packages/core/src/application/use-cases/features/resume-feature.use-case.js +3 -0
  15. package/dist/packages/core/src/domain/factories/settings-defaults.factory.d.ts.map +1 -1
  16. package/dist/packages/core/src/domain/factories/settings-defaults.factory.js +5 -0
  17. package/dist/packages/core/src/domain/generated/output.d.ts +70 -1
  18. package/dist/packages/core/src/domain/generated/output.d.ts.map +1 -1
  19. package/dist/packages/core/src/domain/generated/output.js +15 -1
  20. package/dist/packages/core/src/infrastructure/di/container.d.ts.map +1 -1
  21. package/dist/packages/core/src/infrastructure/di/container.js +2 -0
  22. package/dist/packages/core/src/infrastructure/persistence/sqlite/mappers/feature.mapper.d.ts +10 -0
  23. package/dist/packages/core/src/infrastructure/persistence/sqlite/mappers/feature.mapper.d.ts.map +1 -1
  24. package/dist/packages/core/src/infrastructure/persistence/sqlite/mappers/feature.mapper.js +24 -0
  25. package/dist/packages/core/src/infrastructure/persistence/sqlite/mappers/settings.mapper.d.ts +2 -0
  26. package/dist/packages/core/src/infrastructure/persistence/sqlite/mappers/settings.mapper.d.ts.map +1 -1
  27. package/dist/packages/core/src/infrastructure/persistence/sqlite/mappers/settings.mapper.js +10 -0
  28. package/dist/packages/core/src/infrastructure/persistence/sqlite/migrations.d.ts.map +1 -1
  29. package/dist/packages/core/src/infrastructure/persistence/sqlite/migrations.js +27 -0
  30. package/dist/packages/core/src/infrastructure/repositories/sqlite-feature.repository.d.ts.map +1 -1
  31. package/dist/packages/core/src/infrastructure/repositories/sqlite-feature.repository.js +18 -2
  32. package/dist/packages/core/src/infrastructure/repositories/sqlite-settings.repository.d.ts.map +1 -1
  33. package/dist/packages/core/src/infrastructure/repositories/sqlite-settings.repository.js +7 -3
  34. package/dist/packages/core/src/infrastructure/services/agents/common/executors/claude-code-executor.service.d.ts.map +1 -1
  35. package/dist/packages/core/src/infrastructure/services/agents/common/executors/claude-code-executor.service.js +5 -0
  36. package/dist/packages/core/src/infrastructure/services/agents/common/executors/cursor-executor.service.d.ts.map +1 -1
  37. package/dist/packages/core/src/infrastructure/services/agents/common/executors/cursor-executor.service.js +4 -0
  38. package/dist/packages/core/src/infrastructure/services/agents/feature-agent/feature-agent-graph.d.ts +148 -3
  39. package/dist/packages/core/src/infrastructure/services/agents/feature-agent/feature-agent-graph.d.ts.map +1 -1
  40. package/dist/packages/core/src/infrastructure/services/agents/feature-agent/feature-agent-graph.js +20 -5
  41. package/dist/packages/core/src/infrastructure/services/agents/feature-agent/feature-agent-process.service.d.ts +4 -0
  42. package/dist/packages/core/src/infrastructure/services/agents/feature-agent/feature-agent-process.service.d.ts.map +1 -1
  43. package/dist/packages/core/src/infrastructure/services/agents/feature-agent/feature-agent-process.service.js +12 -0
  44. package/dist/packages/core/src/infrastructure/services/agents/feature-agent/feature-agent-worker.d.ts +4 -0
  45. package/dist/packages/core/src/infrastructure/services/agents/feature-agent/feature-agent-worker.d.ts.map +1 -1
  46. package/dist/packages/core/src/infrastructure/services/agents/feature-agent/feature-agent-worker.js +29 -1
  47. package/dist/packages/core/src/infrastructure/services/agents/feature-agent/nodes/merge.node.d.ts +27 -0
  48. package/dist/packages/core/src/infrastructure/services/agents/feature-agent/nodes/merge.node.d.ts.map +1 -0
  49. package/dist/packages/core/src/infrastructure/services/agents/feature-agent/nodes/merge.node.js +146 -0
  50. package/dist/packages/core/src/infrastructure/services/agents/feature-agent/nodes/node-helpers.d.ts +5 -2
  51. package/dist/packages/core/src/infrastructure/services/agents/feature-agent/nodes/node-helpers.d.ts.map +1 -1
  52. package/dist/packages/core/src/infrastructure/services/agents/feature-agent/nodes/node-helpers.js +9 -3
  53. package/dist/packages/core/src/infrastructure/services/agents/feature-agent/nodes/pr-yaml-generator.d.ts +17 -0
  54. package/dist/packages/core/src/infrastructure/services/agents/feature-agent/nodes/pr-yaml-generator.d.ts.map +1 -0
  55. package/dist/packages/core/src/infrastructure/services/agents/feature-agent/nodes/pr-yaml-generator.js +43 -0
  56. package/dist/packages/core/src/infrastructure/services/agents/feature-agent/nodes/prompts/merge.prompt.d.ts +17 -0
  57. package/dist/packages/core/src/infrastructure/services/agents/feature-agent/nodes/prompts/merge.prompt.d.ts.map +1 -0
  58. package/dist/packages/core/src/infrastructure/services/agents/feature-agent/nodes/prompts/merge.prompt.js +42 -0
  59. package/dist/packages/core/src/infrastructure/services/agents/feature-agent/state.d.ts +8 -0
  60. package/dist/packages/core/src/infrastructure/services/agents/feature-agent/state.d.ts.map +1 -1
  61. package/dist/packages/core/src/infrastructure/services/agents/feature-agent/state.js +33 -0
  62. package/dist/packages/core/src/infrastructure/services/git/git-pr.service.d.ts +28 -0
  63. package/dist/packages/core/src/infrastructure/services/git/git-pr.service.d.ts.map +1 -0
  64. package/dist/packages/core/src/infrastructure/services/git/git-pr.service.js +182 -0
  65. package/dist/src/presentation/cli/commands/feat/new.command.d.ts.map +1 -1
  66. package/dist/src/presentation/cli/commands/feat/new.command.js +33 -2
  67. package/dist/src/presentation/web/components/common/feature-create-drawer/feature-create-drawer.d.ts +13 -2
  68. package/dist/src/presentation/web/components/common/feature-create-drawer/feature-create-drawer.d.ts.map +1 -1
  69. package/dist/src/presentation/web/components/common/feature-create-drawer/feature-create-drawer.js +4 -13
  70. package/dist/src/presentation/web/components/common/feature-create-drawer/feature-create-drawer.stories.d.ts +4 -10
  71. package/dist/src/presentation/web/components/common/feature-create-drawer/feature-create-drawer.stories.d.ts.map +1 -1
  72. package/dist/src/presentation/web/components/common/feature-create-drawer/feature-create-drawer.stories.js +7 -19
  73. package/dist/src/presentation/web/components/common/feature-create-drawer/index.d.ts +1 -1
  74. package/dist/src/presentation/web/components/common/feature-create-drawer/index.d.ts.map +1 -1
  75. package/dist/src/presentation/web/components/common/feature-drawer/feature-drawer.stories.d.ts.map +1 -1
  76. package/dist/src/presentation/web/components/common/feature-drawer/feature-drawer.stories.js +11 -0
  77. package/dist/src/presentation/web/components/common/feature-node/feature-node-state-config.d.ts +1 -1
  78. package/dist/src/presentation/web/components/common/feature-node/feature-node-state-config.d.ts.map +1 -1
  79. package/dist/src/presentation/web/components/common/feature-node/feature-node-state-config.js +10 -0
  80. package/dist/src/presentation/web/components/common/feature-node/feature-node.d.ts.map +1 -1
  81. package/dist/src/presentation/web/components/common/feature-node/feature-node.js +4 -2
  82. package/dist/src/presentation/web/components/common/feature-node/feature-node.stories.d.ts +1 -0
  83. package/dist/src/presentation/web/components/common/feature-node/feature-node.stories.d.ts.map +1 -1
  84. package/dist/src/presentation/web/components/common/feature-node/feature-node.stories.js +21 -0
  85. package/dist/src/presentation/web/components/common/index.d.ts +1 -1
  86. package/dist/src/presentation/web/components/common/index.d.ts.map +1 -1
  87. package/dist/src/presentation/web/components/common/index.js +1 -1
  88. package/dist/src/presentation/web/components/features/control-center/control-center-inner.d.ts.map +1 -1
  89. package/dist/src/presentation/web/components/features/control-center/control-center-inner.js +2 -2
  90. package/dist/src/presentation/web/components/features/control-center/use-control-center-state.d.ts +3 -3
  91. package/dist/src/presentation/web/components/features/control-center/use-control-center-state.d.ts.map +1 -1
  92. package/dist/src/presentation/web/components/features/control-center/use-control-center-state.js +76 -23
  93. package/dist/src/presentation/web/components/features/features-canvas/features-canvas.d.ts.map +1 -1
  94. package/dist/src/presentation/web/components/features/features-canvas/features-canvas.js +2 -1
  95. package/dist/tsconfig.build.tsbuildinfo +1 -1
  96. package/package.json +5 -3
  97. package/web/.next/BUILD_ID +1 -1
  98. package/web/.next/build-manifest.json +2 -2
  99. package/web/.next/cache/.previewinfo +1 -1
  100. package/web/.next/cache/.rscinfo +1 -1
  101. package/web/.next/cache/.tsbuildinfo +1 -1
  102. package/web/.next/cache/config.json +3 -3
  103. package/web/.next/fallback-build-manifest.json +2 -2
  104. package/web/.next/prerender-manifest.json +3 -3
  105. package/web/.next/required-server-files.js +1 -1
  106. package/web/.next/required-server-files.json +1 -1
  107. package/web/.next/server/app/_global-error.html +2 -2
  108. package/web/.next/server/app/_global-error.rsc +1 -1
  109. package/web/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +1 -1
  110. package/web/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
  111. package/web/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
  112. package/web/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
  113. package/web/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  114. package/web/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  115. package/web/.next/server/app/_not-found.html +2 -2
  116. package/web/.next/server/app/_not-found.rsc +10 -10
  117. package/web/.next/server/app/_not-found.segments/_full.segment.rsc +10 -10
  118. package/web/.next/server/app/_not-found.segments/_head.segment.rsc +3 -3
  119. package/web/.next/server/app/_not-found.segments/_index.segment.rsc +6 -6
  120. package/web/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +2 -2
  121. package/web/.next/server/app/_not-found.segments/_not-found.segment.rsc +3 -3
  122. package/web/.next/server/app/_not-found.segments/_tree.segment.rsc +2 -2
  123. package/web/.next/server/app/page_client-reference-manifest.js +1 -1
  124. package/web/.next/server/app/version/page_client-reference-manifest.js +1 -1
  125. package/web/.next/server/app/version.html +2 -2
  126. package/web/.next/server/app/version.rsc +5 -5
  127. package/web/.next/server/app/version.segments/_full.segment.rsc +5 -5
  128. package/web/.next/server/app/version.segments/_head.segment.rsc +1 -1
  129. package/web/.next/server/app/version.segments/_index.segment.rsc +4 -4
  130. package/web/.next/server/app/version.segments/_tree.segment.rsc +2 -2
  131. package/web/.next/server/app/version.segments/version/__PAGE__.segment.rsc +2 -2
  132. package/web/.next/server/app/version.segments/version.segment.rsc +1 -1
  133. package/web/.next/server/chunks/403f9_next_dist_esm_build_templates_app-route_12059e3e.js +1 -1
  134. package/web/.next/server/chunks/403f9_next_dist_esm_build_templates_app-route_12059e3e.js.map +1 -1
  135. package/web/.next/server/chunks/ssr/[root-of-the-server]__f12b60be._.js +1 -1
  136. package/web/.next/server/chunks/ssr/_09afa42a._.js +2 -7
  137. package/web/.next/server/chunks/ssr/_09afa42a._.js.map +1 -1
  138. package/web/.next/server/chunks/ssr/src_presentation_web_components_e599bb8c._.js +1 -1
  139. package/web/.next/server/chunks/ssr/src_presentation_web_components_e599bb8c._.js.map +1 -1
  140. package/web/.next/server/chunks/ssr/src_presentation_web_ed0934e5._.js +1 -1
  141. package/web/.next/server/chunks/ssr/src_presentation_web_ed0934e5._.js.map +1 -1
  142. package/web/.next/server/pages/404.html +2 -2
  143. package/web/.next/server/pages/500.html +2 -2
  144. package/web/.next/server/server-reference-manifest.js +1 -1
  145. package/web/.next/server/server-reference-manifest.json +1 -1
  146. package/web/.next/static/chunks/{daacb9d30e4fc428.js → 48b2cea957bfe6ab.js} +2 -7
  147. package/web/.next/static/chunks/9993505b2a26c454.js +1 -0
  148. package/web/.next/static/chunks/{fd816afd85fd9a19.css → b98242e5ef2a1bd3.css} +1 -1
  149. package/web/.next/trace +1 -1
  150. package/web/.next/trace-build +1 -1
  151. package/web/.next/static/chunks/b32b17f102226f32.js +0 -1
  152. /package/web/.next/static/{C_QsuOPQWDrYc18EOtMAm → 9kF5HqLN2Pcx3uc1dCFjr}/_buildManifest.js +0 -0
  153. /package/web/.next/static/{C_QsuOPQWDrYc18EOtMAm → 9kF5HqLN2Pcx3uc1dCFjr}/_clientMiddlewareManifest.json +0 -0
  154. /package/web/.next/static/{C_QsuOPQWDrYc18EOtMAm → 9kF5HqLN2Pcx3uc1dCFjr}/_ssgManifest.js +0 -0
@@ -51,6 +51,11 @@ export function toDatabase(settings) {
51
51
  notif_evt_waiting_approval: settings.notifications.events.waitingApproval ? 1 : 0,
52
52
  notif_evt_agent_completed: settings.notifications.events.agentCompleted ? 1 : 0,
53
53
  notif_evt_agent_failed: settings.notifications.events.agentFailed ? 1 : 0,
54
+ // WorkflowConfig (boolean → INTEGER)
55
+ workflow_open_pr_on_impl_complete: settings.workflow.openPrOnImplementationComplete ? 1 : 0,
56
+ workflow_auto_merge_on_impl_complete: settings.workflow.autoMergeOnImplementationComplete
57
+ ? 1
58
+ : 0,
54
59
  };
55
60
  }
56
61
  /**
@@ -108,5 +113,10 @@ export function fromDatabase(row) {
108
113
  agentFailed: row.notif_evt_agent_failed === 1,
109
114
  },
110
115
  },
116
+ // WorkflowConfig (INTEGER → boolean)
117
+ workflow: {
118
+ openPrOnImplementationComplete: row.workflow_open_pr_on_impl_complete === 1,
119
+ autoMergeOnImplementationComplete: row.workflow_auto_merge_on_impl_complete === 1,
120
+ },
111
121
  };
112
122
  }
@@ -1 +1 @@
1
- {"version":3,"file":"migrations.d.ts","sourceRoot":"","sources":["../../../../../../../packages/core/src/infrastructure/persistence/sqlite/migrations.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,QAAQ,MAAM,gBAAgB,CAAC;AA0K3C;;;;;;;GAOG;AACH,wBAAsB,mBAAmB,CAAC,EAAE,EAAE,QAAQ,CAAC,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC,CAuB9E"}
1
+ {"version":3,"file":"migrations.d.ts","sourceRoot":"","sources":["../../../../../../../packages/core/src/infrastructure/persistence/sqlite/migrations.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,QAAQ,MAAM,gBAAgB,CAAC;AAqM3C;;;;;;;GAOG;AACH,wBAAsB,mBAAmB,CAAC,EAAE,EAAE,QAAQ,CAAC,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC,CAuB9E"}
@@ -163,6 +163,33 @@ ALTER TABLE settings ADD COLUMN notif_evt_phase_completed INTEGER NOT NULL DEFAU
163
163
  ALTER TABLE settings ADD COLUMN notif_evt_waiting_approval INTEGER NOT NULL DEFAULT 1;
164
164
  ALTER TABLE settings ADD COLUMN notif_evt_agent_completed INTEGER NOT NULL DEFAULT 1;
165
165
  ALTER TABLE settings ADD COLUMN notif_evt_agent_failed INTEGER NOT NULL DEFAULT 1;
166
+ `,
167
+ },
168
+ {
169
+ version: 10,
170
+ sql: `
171
+ -- Migration 010: Add workflow flags, PR tracking to features; workflow config to settings; lifecycle migration
172
+
173
+ -- Workflow configuration flags on features
174
+ ALTER TABLE features ADD COLUMN open_pr INTEGER NOT NULL DEFAULT 0;
175
+ ALTER TABLE features ADD COLUMN auto_merge INTEGER NOT NULL DEFAULT 0;
176
+ ALTER TABLE features ADD COLUMN allow_prd INTEGER NOT NULL DEFAULT 0;
177
+ ALTER TABLE features ADD COLUMN allow_plan INTEGER NOT NULL DEFAULT 0;
178
+ ALTER TABLE features ADD COLUMN allow_merge INTEGER NOT NULL DEFAULT 0;
179
+
180
+ -- PR tracking state on features
181
+ ALTER TABLE features ADD COLUMN pr_url TEXT;
182
+ ALTER TABLE features ADD COLUMN pr_number INTEGER;
183
+ ALTER TABLE features ADD COLUMN pr_status TEXT;
184
+ ALTER TABLE features ADD COLUMN commit_hash TEXT;
185
+ ALTER TABLE features ADD COLUMN ci_status TEXT;
186
+
187
+ -- Workflow defaults on settings
188
+ ALTER TABLE settings ADD COLUMN workflow_open_pr_on_impl_complete INTEGER NOT NULL DEFAULT 0;
189
+ ALTER TABLE settings ADD COLUMN workflow_auto_merge_on_impl_complete INTEGER NOT NULL DEFAULT 0;
190
+
191
+ -- Migrate existing features with DeployAndQA lifecycle to Maintain
192
+ UPDATE features SET lifecycle = 'Maintain' WHERE lifecycle = 'Deploy & QA';
166
193
  `,
167
194
  },
168
195
  ];
@@ -1 +1 @@
1
- {"version":3,"file":"sqlite-feature.repository.d.ts","sourceRoot":"","sources":["../../../../../../packages/core/src/infrastructure/repositories/sqlite-feature.repository.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,QAAQ,MAAM,gBAAgB,CAAC;AAE3C,OAAO,KAAK,EACV,kBAAkB,EAClB,kBAAkB,EACnB,MAAM,6EAA6E,CAAC;AACrF,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,kCAAkC,CAAC;AAOhE;;;GAGG;AACH,qBACa,uBAAwB,YAAW,kBAAkB;IACpD,OAAO,CAAC,QAAQ,CAAC,EAAE;gBAAF,EAAE,EAAE,QAAQ,CAAC,QAAQ;IAE5C,MAAM,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC;IAkBvC,QAAQ,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC;IAW7C,cAAc,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC;IAcvD,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC;IAWzE,IAAI,CAAC,OAAO,CAAC,EAAE,kBAAkB,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC;IAqBtD,MAAM,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC;IAuBvC,MAAM,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;CAIxC"}
1
+ {"version":3,"file":"sqlite-feature.repository.d.ts","sourceRoot":"","sources":["../../../../../../packages/core/src/infrastructure/repositories/sqlite-feature.repository.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,QAAQ,MAAM,gBAAgB,CAAC;AAE3C,OAAO,KAAK,EACV,kBAAkB,EAClB,kBAAkB,EACnB,MAAM,6EAA6E,CAAC;AACrF,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,kCAAkC,CAAC;AAOhE;;;GAGG;AACH,qBACa,uBAAwB,YAAW,kBAAkB;IACpD,OAAO,CAAC,QAAQ,CAAC,EAAE;gBAAF,EAAE,EAAE,QAAQ,CAAC,QAAQ;IAE5C,MAAM,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC;IAwBvC,QAAQ,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC;IAW7C,cAAc,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC;IAcvD,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC;IAWzE,IAAI,CAAC,OAAO,CAAC,EAAE,kBAAkB,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC;IAqBtD,MAAM,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC;IAiCvC,MAAM,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;CAIxC"}
@@ -30,11 +30,17 @@ let SQLiteFeatureRepository = class SQLiteFeatureRepository {
30
30
  INSERT INTO features (
31
31
  id, name, slug, description, repository_path, branch,
32
32
  lifecycle, messages, plan, related_artifacts,
33
- agent_run_id, spec_path, created_at, updated_at
33
+ agent_run_id, spec_path,
34
+ open_pr, auto_merge, allow_prd, allow_plan, allow_merge,
35
+ pr_url, pr_number, pr_status, commit_hash, ci_status,
36
+ created_at, updated_at
34
37
  ) VALUES (
35
38
  @id, @name, @slug, @description, @repository_path, @branch,
36
39
  @lifecycle, @messages, @plan, @related_artifacts,
37
- @agent_run_id, @spec_path, @created_at, @updated_at
40
+ @agent_run_id, @spec_path,
41
+ @open_pr, @auto_merge, @allow_prd, @allow_plan, @allow_merge,
42
+ @pr_url, @pr_number, @pr_status, @commit_hash, @ci_status,
43
+ @created_at, @updated_at
38
44
  )
39
45
  `);
40
46
  stmt.run(row);
@@ -96,6 +102,16 @@ let SQLiteFeatureRepository = class SQLiteFeatureRepository {
96
102
  related_artifacts = @related_artifacts,
97
103
  agent_run_id = @agent_run_id,
98
104
  spec_path = @spec_path,
105
+ open_pr = @open_pr,
106
+ auto_merge = @auto_merge,
107
+ allow_prd = @allow_prd,
108
+ allow_plan = @allow_plan,
109
+ allow_merge = @allow_merge,
110
+ pr_url = @pr_url,
111
+ pr_number = @pr_number,
112
+ pr_status = @pr_status,
113
+ commit_hash = @commit_hash,
114
+ ci_status = @ci_status,
99
115
  updated_at = @updated_at
100
116
  WHERE id = @id
101
117
  `);
@@ -1 +1 @@
1
- {"version":3,"file":"sqlite-settings.repository.d.ts","sourceRoot":"","sources":["../../../../../../packages/core/src/infrastructure/repositories/sqlite-settings.repository.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,QAAQ,MAAM,gBAAgB,CAAC;AAE3C,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,8EAA8E,CAAC;AACxH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,kCAAkC,CAAC;AAOjE;;;GAGG;AACH,qBACa,wBAAyB,YAAW,mBAAmB;IACtD,OAAO,CAAC,QAAQ,CAAC,EAAE;gBAAF,EAAE,EAAE,QAAQ,CAAC,QAAQ;IAElD;;;;;;OAMG;IACG,UAAU,CAAC,QAAQ,EAAE,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC;IAuCnD;;;;OAIG;IACG,IAAI,IAAI,OAAO,CAAC,QAAQ,GAAG,IAAI,CAAC;IAgBtC;;;;;OAKG;IACG,MAAM,CAAC,QAAQ,EAAE,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC;CAgDhD"}
1
+ {"version":3,"file":"sqlite-settings.repository.d.ts","sourceRoot":"","sources":["../../../../../../packages/core/src/infrastructure/repositories/sqlite-settings.repository.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,QAAQ,MAAM,gBAAgB,CAAC;AAE3C,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,8EAA8E,CAAC;AACxH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,kCAAkC,CAAC;AAOjE;;;GAGG;AACH,qBACa,wBAAyB,YAAW,mBAAmB;IACtD,OAAO,CAAC,QAAQ,CAAC,EAAE;gBAAF,EAAE,EAAE,QAAQ,CAAC,QAAQ;IAElD;;;;;;OAMG;IACG,UAAU,CAAC,QAAQ,EAAE,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC;IAyCnD;;;;OAIG;IACG,IAAI,IAAI,OAAO,CAAC,QAAQ,GAAG,IAAI,CAAC;IAgBtC;;;;;OAKG;IACG,MAAM,CAAC,QAAQ,EAAE,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC;CAkDhD"}
@@ -51,7 +51,8 @@ let SQLiteSettingsRepository = class SQLiteSettingsRepository {
51
51
  agent_type, agent_auth_method, agent_token,
52
52
  notif_in_app_enabled, notif_browser_enabled, notif_desktop_enabled,
53
53
  notif_evt_agent_started, notif_evt_phase_completed, notif_evt_waiting_approval,
54
- notif_evt_agent_completed, notif_evt_agent_failed
54
+ notif_evt_agent_completed, notif_evt_agent_failed,
55
+ workflow_open_pr_on_impl_complete, workflow_auto_merge_on_impl_complete
55
56
  ) VALUES (
56
57
  @id, @created_at, @updated_at,
57
58
  @model_analyze, @model_requirements, @model_plan, @model_implement,
@@ -61,7 +62,8 @@ let SQLiteSettingsRepository = class SQLiteSettingsRepository {
61
62
  @agent_type, @agent_auth_method, @agent_token,
62
63
  @notif_in_app_enabled, @notif_browser_enabled, @notif_desktop_enabled,
63
64
  @notif_evt_agent_started, @notif_evt_phase_completed, @notif_evt_waiting_approval,
64
- @notif_evt_agent_completed, @notif_evt_agent_failed
65
+ @notif_evt_agent_completed, @notif_evt_agent_failed,
66
+ @workflow_open_pr_on_impl_complete, @workflow_auto_merge_on_impl_complete
65
67
  )
66
68
  `);
67
69
  // Execute with named parameters (safe from SQL injection)
@@ -124,7 +126,9 @@ let SQLiteSettingsRepository = class SQLiteSettingsRepository {
124
126
  notif_evt_phase_completed = @notif_evt_phase_completed,
125
127
  notif_evt_waiting_approval = @notif_evt_waiting_approval,
126
128
  notif_evt_agent_completed = @notif_evt_agent_completed,
127
- notif_evt_agent_failed = @notif_evt_agent_failed
129
+ notif_evt_agent_failed = @notif_evt_agent_failed,
130
+ workflow_open_pr_on_impl_complete = @workflow_open_pr_on_impl_complete,
131
+ workflow_auto_merge_on_impl_complete = @workflow_auto_merge_on_impl_complete
128
132
  WHERE id = @id
129
133
  `);
130
134
  // Execute with named parameters (safe from SQL injection)
@@ -1 +1 @@
1
- {"version":3,"file":"claude-code-executor.service.d.ts","sourceRoot":"","sources":["../../../../../../../../../packages/core/src/infrastructure/services/agents/common/executors/claude-code-executor.service.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,2CAA2C,CAAC;AACzF,OAAO,KAAK,EACV,cAAc,EACd,qBAAqB,EACrB,oBAAoB,EACpB,yBAAyB,EAC1B,MAAM,4EAA4E,CAAC;AACpF,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAUjD;;;GAGG;AACH,qBAAa,yBAA0B,YAAW,cAAc;IAMlD,OAAO,CAAC,QAAQ,CAAC,KAAK;IALlC,QAAQ,CAAC,SAAS,EAAE,SAAS,CAA8B;IAE3D,4EAA4E;IAC5E,OAAO,CAAC,MAAM,CAAS;gBAEM,KAAK,EAAE,aAAa;IAEjD,4EAA4E;IAC5E,OAAO,CAAC,GAAG;IAML,OAAO,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,qBAAqB,GAAG,OAAO,CAAC,oBAAoB,CAAC;IAmHtF,aAAa,CAClB,MAAM,EAAE,MAAM,EACd,OAAO,CAAC,EAAE,qBAAqB,GAC9B,aAAa,CAAC,yBAAyB,CAAC;IA+F3C;;;OAGG;IACH,OAAO,CAAC,cAAc;IAmCtB,eAAe,CAAC,OAAO,EAAE,YAAY,GAAG,OAAO;IAI/C,OAAO,CAAC,SAAS;IAajB,OAAO,CAAC,eAAe;IAUvB,OAAO,CAAC,iBAAiB;IAMzB,OAAO,CAAC,eAAe;IAiCvB,OAAO,CAAC,eAAe;CAkExB"}
1
+ {"version":3,"file":"claude-code-executor.service.d.ts","sourceRoot":"","sources":["../../../../../../../../../packages/core/src/infrastructure/services/agents/common/executors/claude-code-executor.service.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,2CAA2C,CAAC;AACzF,OAAO,KAAK,EACV,cAAc,EACd,qBAAqB,EACrB,oBAAoB,EACpB,yBAAyB,EAC1B,MAAM,4EAA4E,CAAC;AACpF,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAUjD;;;GAGG;AACH,qBAAa,yBAA0B,YAAW,cAAc;IAMlD,OAAO,CAAC,QAAQ,CAAC,KAAK;IALlC,QAAQ,CAAC,SAAS,EAAE,SAAS,CAA8B;IAE3D,4EAA4E;IAC5E,OAAO,CAAC,MAAM,CAAS;gBAEM,KAAK,EAAE,aAAa;IAEjD,4EAA4E;IAC5E,OAAO,CAAC,GAAG;IAML,OAAO,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,qBAAqB,GAAG,OAAO,CAAC,oBAAoB,CAAC;IAmHtF,aAAa,CAClB,MAAM,EAAE,MAAM,EACd,OAAO,CAAC,EAAE,qBAAqB,GAC9B,aAAa,CAAC,yBAAyB,CAAC;IA+F3C;;;OAGG;IACH,OAAO,CAAC,cAAc;IAmCtB,eAAe,CAAC,OAAO,EAAE,YAAY,GAAG,OAAO;IAI/C,OAAO,CAAC,SAAS;IAajB,OAAO,CAAC,eAAe;IAUvB,OAAO,CAAC,iBAAiB;IAczB,OAAO,CAAC,eAAe;IAiCvB,OAAO,CAAC,eAAe;CAkExB"}
@@ -289,6 +289,11 @@ export class ClaudeCodeExecutorService {
289
289
  const spawnOpts = {};
290
290
  if (options?.cwd)
291
291
  spawnOpts.cwd = options.cwd;
292
+ // Strip CLAUDECODE env var to prevent "nested session" error when shep
293
+ // is invoked from within a Claude Code session. The claude CLI checks for
294
+ // this variable and refuses to start if it's set.
295
+ const { CLAUDECODE: _, ...cleanEnv } = process.env;
296
+ spawnOpts.env = cleanEnv;
292
297
  return spawnOpts;
293
298
  }
294
299
  parseJsonResult(stdout) {
@@ -1 +1 @@
1
- {"version":3,"file":"cursor-executor.service.d.ts","sourceRoot":"","sources":["../../../../../../../../../packages/core/src/infrastructure/services/agents/common/executors/cursor-executor.service.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,2CAA2C,CAAC;AACzF,OAAO,KAAK,EACV,cAAc,EACd,qBAAqB,EACrB,oBAAoB,EACpB,yBAAyB,EAC1B,MAAM,4EAA4E,CAAC;AACpF,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAKjD;;;GAGG;AACH,qBAAa,qBAAsB,YAAW,cAAc;IAM9C,OAAO,CAAC,QAAQ,CAAC,KAAK;IALlC,QAAQ,CAAC,SAAS,EAAE,SAAS,CAAyB;IAEtD,4EAA4E;IAC5E,OAAO,CAAC,MAAM,CAAS;gBAEM,KAAK,EAAE,aAAa;IAEjD,4EAA4E;IAC5E,OAAO,CAAC,GAAG;IAMX,eAAe,CAAC,OAAO,EAAE,YAAY,GAAG,OAAO;IAIzC,OAAO,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,qBAAqB,GAAG,OAAO,CAAC,oBAAoB,CAAC;IAkGtF,aAAa,CAClB,MAAM,EAAE,MAAM,EACd,OAAO,CAAC,EAAE,qBAAqB,GAC9B,aAAa,CAAC,yBAAyB,CAAC;IA8E3C;;OAEG;IACH,OAAO,CAAC,cAAc;IAkCtB,OAAO,CAAC,SAAS;IASjB,OAAO,CAAC,eAAe;IAOvB,OAAO,CAAC,iBAAiB;IAMzB,OAAO,CAAC,eAAe;CAgDxB"}
1
+ {"version":3,"file":"cursor-executor.service.d.ts","sourceRoot":"","sources":["../../../../../../../../../packages/core/src/infrastructure/services/agents/common/executors/cursor-executor.service.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,2CAA2C,CAAC;AACzF,OAAO,KAAK,EACV,cAAc,EACd,qBAAqB,EACrB,oBAAoB,EACpB,yBAAyB,EAC1B,MAAM,4EAA4E,CAAC;AACpF,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAKjD;;;GAGG;AACH,qBAAa,qBAAsB,YAAW,cAAc;IAM9C,OAAO,CAAC,QAAQ,CAAC,KAAK;IALlC,QAAQ,CAAC,SAAS,EAAE,SAAS,CAAyB;IAEtD,4EAA4E;IAC5E,OAAO,CAAC,MAAM,CAAS;gBAEM,KAAK,EAAE,aAAa;IAEjD,4EAA4E;IAC5E,OAAO,CAAC,GAAG;IAMX,eAAe,CAAC,OAAO,EAAE,YAAY,GAAG,OAAO;IAIzC,OAAO,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,qBAAqB,GAAG,OAAO,CAAC,oBAAoB,CAAC;IAkGtF,aAAa,CAClB,MAAM,EAAE,MAAM,EACd,OAAO,CAAC,EAAE,qBAAqB,GAC9B,aAAa,CAAC,yBAAyB,CAAC;IA8E3C;;OAEG;IACH,OAAO,CAAC,cAAc;IAkCtB,OAAO,CAAC,SAAS;IASjB,OAAO,CAAC,eAAe;IAOvB,OAAO,CAAC,iBAAiB;IAazB,OAAO,CAAC,eAAe;CAgDxB"}
@@ -249,6 +249,10 @@ export class CursorExecutorService {
249
249
  const spawnOpts = {};
250
250
  if (options?.cwd)
251
251
  spawnOpts.cwd = options.cwd;
252
+ // Strip CLAUDECODE env var to prevent "nested session" error when shep
253
+ // is invoked from within a Claude Code session.
254
+ const { CLAUDECODE: _, ...cleanEnv } = process.env;
255
+ spawnOpts.env = cleanEnv;
252
256
  return spawnOpts;
253
257
  }
254
258
  parseStreamLine(line) {
@@ -1,20 +1,29 @@
1
1
  import { type BaseCheckpointSaver } from '@langchain/langgraph';
2
2
  import type { IAgentExecutor } from '../../../../application/ports/output/agents/agent-executor.interface.js';
3
+ import { type MergeNodeDeps } from './nodes/merge.node.js';
3
4
  export { FeatureAgentAnnotation, type FeatureAgentState } from './state.js';
5
+ /**
6
+ * Dependencies needed to build the feature agent graph.
7
+ * Injected by the worker so the graph factory stays testable.
8
+ */
9
+ export interface FeatureAgentGraphDeps {
10
+ executor: IAgentExecutor;
11
+ mergeNodeDeps: MergeNodeDeps;
12
+ }
4
13
  /**
5
14
  * Factory function that creates and compiles the feature-agent LangGraph.
6
15
  *
7
16
  * The graph defines a linear SDLC workflow with validation gates:
8
- * analyze → validate → requirements → validate → research → validate → plan → validate → implement
17
+ * analyze → validate → requirements → validate → research → validate → plan → validate → implement → merge
9
18
  *
10
19
  * Each YAML-producing node is followed by a validate/repair loop that ensures
11
20
  * the output YAML conforms to its schema before proceeding.
12
21
  *
13
- * @param executor - The agent executor to delegate prompt execution to
22
+ * @param depsOrExecutor - Graph dependencies or a legacy executor
14
23
  * @param checkpointer - Optional checkpoint saver for state persistence
15
24
  * @returns A compiled LangGraph ready to be invoked
16
25
  */
17
- export declare function createFeatureAgentGraph(executor: IAgentExecutor, checkpointer?: BaseCheckpointSaver): import("@langchain/langgraph").CompiledStateGraph<{
26
+ export declare function createFeatureAgentGraph(depsOrExecutor: FeatureAgentGraphDeps | IAgentExecutor, checkpointer?: BaseCheckpointSaver): import("@langchain/langgraph").CompiledStateGraph<{
18
27
  featureId: string;
19
28
  repositoryPath: string;
20
29
  specDir: string;
@@ -26,6 +35,14 @@ export declare function createFeatureAgentGraph(executor: IAgentExecutor, checkp
26
35
  validationRetries: number;
27
36
  lastValidationTarget: string;
28
37
  lastValidationErrors: string[];
38
+ prUrl: string | null;
39
+ prNumber: number | null;
40
+ commitHash: string | null;
41
+ ciStatus: string | null;
42
+ push: boolean;
43
+ openPr: boolean;
44
+ autoMerge: boolean;
45
+ allowMerge: boolean;
29
46
  }, {
30
47
  featureId?: string | undefined;
31
48
  repositoryPath?: string | undefined;
@@ -38,6 +55,14 @@ export declare function createFeatureAgentGraph(executor: IAgentExecutor, checkp
38
55
  validationRetries?: number | undefined;
39
56
  lastValidationTarget?: string | undefined;
40
57
  lastValidationErrors?: string[] | undefined;
58
+ prUrl?: string | null | undefined;
59
+ prNumber?: number | null | undefined;
60
+ commitHash?: string | null | undefined;
61
+ ciStatus?: string | null | undefined;
62
+ push?: boolean | undefined;
63
+ openPr?: boolean | undefined;
64
+ autoMerge?: boolean | undefined;
65
+ allowMerge?: boolean | undefined;
41
66
  }, "__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", {
42
67
  featureId: {
43
68
  (): import("@langchain/langgraph").LastValue<string>;
@@ -70,6 +95,14 @@ export declare function createFeatureAgentGraph(executor: IAgentExecutor, checkp
70
95
  validationRetries: import("@langchain/langgraph").BinaryOperatorAggregate<number, number>;
71
96
  lastValidationTarget: import("@langchain/langgraph").BinaryOperatorAggregate<string, string>;
72
97
  lastValidationErrors: import("@langchain/langgraph").BinaryOperatorAggregate<string[], string[]>;
98
+ prUrl: import("@langchain/langgraph").BinaryOperatorAggregate<string | null, string | null>;
99
+ prNumber: import("@langchain/langgraph").BinaryOperatorAggregate<number | null, number | null>;
100
+ commitHash: import("@langchain/langgraph").BinaryOperatorAggregate<string | null, string | null>;
101
+ ciStatus: import("@langchain/langgraph").BinaryOperatorAggregate<string | null, string | null>;
102
+ push: import("@langchain/langgraph").BinaryOperatorAggregate<boolean, boolean>;
103
+ openPr: import("@langchain/langgraph").BinaryOperatorAggregate<boolean, boolean>;
104
+ autoMerge: import("@langchain/langgraph").BinaryOperatorAggregate<boolean, boolean>;
105
+ allowMerge: import("@langchain/langgraph").BinaryOperatorAggregate<boolean, boolean>;
73
106
  }, {
74
107
  featureId: {
75
108
  (): import("@langchain/langgraph").LastValue<string>;
@@ -102,6 +135,14 @@ export declare function createFeatureAgentGraph(executor: IAgentExecutor, checkp
102
135
  validationRetries: import("@langchain/langgraph").BinaryOperatorAggregate<number, number>;
103
136
  lastValidationTarget: import("@langchain/langgraph").BinaryOperatorAggregate<string, string>;
104
137
  lastValidationErrors: import("@langchain/langgraph").BinaryOperatorAggregate<string[], string[]>;
138
+ prUrl: import("@langchain/langgraph").BinaryOperatorAggregate<string | null, string | null>;
139
+ prNumber: import("@langchain/langgraph").BinaryOperatorAggregate<number | null, number | null>;
140
+ commitHash: import("@langchain/langgraph").BinaryOperatorAggregate<string | null, string | null>;
141
+ ciStatus: import("@langchain/langgraph").BinaryOperatorAggregate<string | null, string | null>;
142
+ push: import("@langchain/langgraph").BinaryOperatorAggregate<boolean, boolean>;
143
+ openPr: import("@langchain/langgraph").BinaryOperatorAggregate<boolean, boolean>;
144
+ autoMerge: import("@langchain/langgraph").BinaryOperatorAggregate<boolean, boolean>;
145
+ allowMerge: import("@langchain/langgraph").BinaryOperatorAggregate<boolean, boolean>;
105
146
  }, import("@langchain/langgraph").StateDefinition, {
106
147
  analyze: Partial<import("@langchain/langgraph").StateType<{
107
148
  featureId: {
@@ -135,6 +176,14 @@ export declare function createFeatureAgentGraph(executor: IAgentExecutor, checkp
135
176
  validationRetries: import("@langchain/langgraph").BinaryOperatorAggregate<number, number>;
136
177
  lastValidationTarget: import("@langchain/langgraph").BinaryOperatorAggregate<string, string>;
137
178
  lastValidationErrors: import("@langchain/langgraph").BinaryOperatorAggregate<string[], string[]>;
179
+ prUrl: import("@langchain/langgraph").BinaryOperatorAggregate<string | null, string | null>;
180
+ prNumber: import("@langchain/langgraph").BinaryOperatorAggregate<number | null, number | null>;
181
+ commitHash: import("@langchain/langgraph").BinaryOperatorAggregate<string | null, string | null>;
182
+ ciStatus: import("@langchain/langgraph").BinaryOperatorAggregate<string | null, string | null>;
183
+ push: import("@langchain/langgraph").BinaryOperatorAggregate<boolean, boolean>;
184
+ openPr: import("@langchain/langgraph").BinaryOperatorAggregate<boolean, boolean>;
185
+ autoMerge: import("@langchain/langgraph").BinaryOperatorAggregate<boolean, boolean>;
186
+ allowMerge: import("@langchain/langgraph").BinaryOperatorAggregate<boolean, boolean>;
138
187
  }>>;
139
188
  requirements: Partial<import("@langchain/langgraph").StateType<{
140
189
  featureId: {
@@ -168,6 +217,14 @@ export declare function createFeatureAgentGraph(executor: IAgentExecutor, checkp
168
217
  validationRetries: import("@langchain/langgraph").BinaryOperatorAggregate<number, number>;
169
218
  lastValidationTarget: import("@langchain/langgraph").BinaryOperatorAggregate<string, string>;
170
219
  lastValidationErrors: import("@langchain/langgraph").BinaryOperatorAggregate<string[], string[]>;
220
+ prUrl: import("@langchain/langgraph").BinaryOperatorAggregate<string | null, string | null>;
221
+ prNumber: import("@langchain/langgraph").BinaryOperatorAggregate<number | null, number | null>;
222
+ commitHash: import("@langchain/langgraph").BinaryOperatorAggregate<string | null, string | null>;
223
+ ciStatus: import("@langchain/langgraph").BinaryOperatorAggregate<string | null, string | null>;
224
+ push: import("@langchain/langgraph").BinaryOperatorAggregate<boolean, boolean>;
225
+ openPr: import("@langchain/langgraph").BinaryOperatorAggregate<boolean, boolean>;
226
+ autoMerge: import("@langchain/langgraph").BinaryOperatorAggregate<boolean, boolean>;
227
+ allowMerge: import("@langchain/langgraph").BinaryOperatorAggregate<boolean, boolean>;
171
228
  }>>;
172
229
  research: Partial<import("@langchain/langgraph").StateType<{
173
230
  featureId: {
@@ -201,6 +258,14 @@ export declare function createFeatureAgentGraph(executor: IAgentExecutor, checkp
201
258
  validationRetries: import("@langchain/langgraph").BinaryOperatorAggregate<number, number>;
202
259
  lastValidationTarget: import("@langchain/langgraph").BinaryOperatorAggregate<string, string>;
203
260
  lastValidationErrors: import("@langchain/langgraph").BinaryOperatorAggregate<string[], string[]>;
261
+ prUrl: import("@langchain/langgraph").BinaryOperatorAggregate<string | null, string | null>;
262
+ prNumber: import("@langchain/langgraph").BinaryOperatorAggregate<number | null, number | null>;
263
+ commitHash: import("@langchain/langgraph").BinaryOperatorAggregate<string | null, string | null>;
264
+ ciStatus: import("@langchain/langgraph").BinaryOperatorAggregate<string | null, string | null>;
265
+ push: import("@langchain/langgraph").BinaryOperatorAggregate<boolean, boolean>;
266
+ openPr: import("@langchain/langgraph").BinaryOperatorAggregate<boolean, boolean>;
267
+ autoMerge: import("@langchain/langgraph").BinaryOperatorAggregate<boolean, boolean>;
268
+ allowMerge: import("@langchain/langgraph").BinaryOperatorAggregate<boolean, boolean>;
204
269
  }>>;
205
270
  plan: Partial<import("@langchain/langgraph").StateType<{
206
271
  featureId: {
@@ -234,6 +299,14 @@ export declare function createFeatureAgentGraph(executor: IAgentExecutor, checkp
234
299
  validationRetries: import("@langchain/langgraph").BinaryOperatorAggregate<number, number>;
235
300
  lastValidationTarget: import("@langchain/langgraph").BinaryOperatorAggregate<string, string>;
236
301
  lastValidationErrors: import("@langchain/langgraph").BinaryOperatorAggregate<string[], string[]>;
302
+ prUrl: import("@langchain/langgraph").BinaryOperatorAggregate<string | null, string | null>;
303
+ prNumber: import("@langchain/langgraph").BinaryOperatorAggregate<number | null, number | null>;
304
+ commitHash: import("@langchain/langgraph").BinaryOperatorAggregate<string | null, string | null>;
305
+ ciStatus: import("@langchain/langgraph").BinaryOperatorAggregate<string | null, string | null>;
306
+ push: import("@langchain/langgraph").BinaryOperatorAggregate<boolean, boolean>;
307
+ openPr: import("@langchain/langgraph").BinaryOperatorAggregate<boolean, boolean>;
308
+ autoMerge: import("@langchain/langgraph").BinaryOperatorAggregate<boolean, boolean>;
309
+ allowMerge: import("@langchain/langgraph").BinaryOperatorAggregate<boolean, boolean>;
237
310
  }>>;
238
311
  implement: Partial<import("@langchain/langgraph").StateType<{
239
312
  featureId: {
@@ -267,6 +340,14 @@ export declare function createFeatureAgentGraph(executor: IAgentExecutor, checkp
267
340
  validationRetries: import("@langchain/langgraph").BinaryOperatorAggregate<number, number>;
268
341
  lastValidationTarget: import("@langchain/langgraph").BinaryOperatorAggregate<string, string>;
269
342
  lastValidationErrors: import("@langchain/langgraph").BinaryOperatorAggregate<string[], string[]>;
343
+ prUrl: import("@langchain/langgraph").BinaryOperatorAggregate<string | null, string | null>;
344
+ prNumber: import("@langchain/langgraph").BinaryOperatorAggregate<number | null, number | null>;
345
+ commitHash: import("@langchain/langgraph").BinaryOperatorAggregate<string | null, string | null>;
346
+ ciStatus: import("@langchain/langgraph").BinaryOperatorAggregate<string | null, string | null>;
347
+ push: import("@langchain/langgraph").BinaryOperatorAggregate<boolean, boolean>;
348
+ openPr: import("@langchain/langgraph").BinaryOperatorAggregate<boolean, boolean>;
349
+ autoMerge: import("@langchain/langgraph").BinaryOperatorAggregate<boolean, boolean>;
350
+ allowMerge: import("@langchain/langgraph").BinaryOperatorAggregate<boolean, boolean>;
270
351
  }>>;
271
352
  validate_spec_analyze: Partial<import("@langchain/langgraph").StateType<{
272
353
  featureId: {
@@ -300,6 +381,14 @@ export declare function createFeatureAgentGraph(executor: IAgentExecutor, checkp
300
381
  validationRetries: import("@langchain/langgraph").BinaryOperatorAggregate<number, number>;
301
382
  lastValidationTarget: import("@langchain/langgraph").BinaryOperatorAggregate<string, string>;
302
383
  lastValidationErrors: import("@langchain/langgraph").BinaryOperatorAggregate<string[], string[]>;
384
+ prUrl: import("@langchain/langgraph").BinaryOperatorAggregate<string | null, string | null>;
385
+ prNumber: import("@langchain/langgraph").BinaryOperatorAggregate<number | null, number | null>;
386
+ commitHash: import("@langchain/langgraph").BinaryOperatorAggregate<string | null, string | null>;
387
+ ciStatus: import("@langchain/langgraph").BinaryOperatorAggregate<string | null, string | null>;
388
+ push: import("@langchain/langgraph").BinaryOperatorAggregate<boolean, boolean>;
389
+ openPr: import("@langchain/langgraph").BinaryOperatorAggregate<boolean, boolean>;
390
+ autoMerge: import("@langchain/langgraph").BinaryOperatorAggregate<boolean, boolean>;
391
+ allowMerge: import("@langchain/langgraph").BinaryOperatorAggregate<boolean, boolean>;
303
392
  }>>;
304
393
  validate_spec_requirements: Partial<import("@langchain/langgraph").StateType<{
305
394
  featureId: {
@@ -333,6 +422,14 @@ export declare function createFeatureAgentGraph(executor: IAgentExecutor, checkp
333
422
  validationRetries: import("@langchain/langgraph").BinaryOperatorAggregate<number, number>;
334
423
  lastValidationTarget: import("@langchain/langgraph").BinaryOperatorAggregate<string, string>;
335
424
  lastValidationErrors: import("@langchain/langgraph").BinaryOperatorAggregate<string[], string[]>;
425
+ prUrl: import("@langchain/langgraph").BinaryOperatorAggregate<string | null, string | null>;
426
+ prNumber: import("@langchain/langgraph").BinaryOperatorAggregate<number | null, number | null>;
427
+ commitHash: import("@langchain/langgraph").BinaryOperatorAggregate<string | null, string | null>;
428
+ ciStatus: import("@langchain/langgraph").BinaryOperatorAggregate<string | null, string | null>;
429
+ push: import("@langchain/langgraph").BinaryOperatorAggregate<boolean, boolean>;
430
+ openPr: import("@langchain/langgraph").BinaryOperatorAggregate<boolean, boolean>;
431
+ autoMerge: import("@langchain/langgraph").BinaryOperatorAggregate<boolean, boolean>;
432
+ allowMerge: import("@langchain/langgraph").BinaryOperatorAggregate<boolean, boolean>;
336
433
  }>>;
337
434
  validate_research: Partial<import("@langchain/langgraph").StateType<{
338
435
  featureId: {
@@ -366,6 +463,14 @@ export declare function createFeatureAgentGraph(executor: IAgentExecutor, checkp
366
463
  validationRetries: import("@langchain/langgraph").BinaryOperatorAggregate<number, number>;
367
464
  lastValidationTarget: import("@langchain/langgraph").BinaryOperatorAggregate<string, string>;
368
465
  lastValidationErrors: import("@langchain/langgraph").BinaryOperatorAggregate<string[], string[]>;
466
+ prUrl: import("@langchain/langgraph").BinaryOperatorAggregate<string | null, string | null>;
467
+ prNumber: import("@langchain/langgraph").BinaryOperatorAggregate<number | null, number | null>;
468
+ commitHash: import("@langchain/langgraph").BinaryOperatorAggregate<string | null, string | null>;
469
+ ciStatus: import("@langchain/langgraph").BinaryOperatorAggregate<string | null, string | null>;
470
+ push: import("@langchain/langgraph").BinaryOperatorAggregate<boolean, boolean>;
471
+ openPr: import("@langchain/langgraph").BinaryOperatorAggregate<boolean, boolean>;
472
+ autoMerge: import("@langchain/langgraph").BinaryOperatorAggregate<boolean, boolean>;
473
+ allowMerge: import("@langchain/langgraph").BinaryOperatorAggregate<boolean, boolean>;
369
474
  }>>;
370
475
  validate_plan_tasks: Partial<import("@langchain/langgraph").StateType<{
371
476
  featureId: {
@@ -399,6 +504,14 @@ export declare function createFeatureAgentGraph(executor: IAgentExecutor, checkp
399
504
  validationRetries: import("@langchain/langgraph").BinaryOperatorAggregate<number, number>;
400
505
  lastValidationTarget: import("@langchain/langgraph").BinaryOperatorAggregate<string, string>;
401
506
  lastValidationErrors: import("@langchain/langgraph").BinaryOperatorAggregate<string[], string[]>;
507
+ prUrl: import("@langchain/langgraph").BinaryOperatorAggregate<string | null, string | null>;
508
+ prNumber: import("@langchain/langgraph").BinaryOperatorAggregate<number | null, number | null>;
509
+ commitHash: import("@langchain/langgraph").BinaryOperatorAggregate<string | null, string | null>;
510
+ ciStatus: import("@langchain/langgraph").BinaryOperatorAggregate<string | null, string | null>;
511
+ push: import("@langchain/langgraph").BinaryOperatorAggregate<boolean, boolean>;
512
+ openPr: import("@langchain/langgraph").BinaryOperatorAggregate<boolean, boolean>;
513
+ autoMerge: import("@langchain/langgraph").BinaryOperatorAggregate<boolean, boolean>;
514
+ allowMerge: import("@langchain/langgraph").BinaryOperatorAggregate<boolean, boolean>;
402
515
  }>>;
403
516
  repair_spec_analyze: Partial<import("@langchain/langgraph").StateType<{
404
517
  featureId: {
@@ -432,6 +545,14 @@ export declare function createFeatureAgentGraph(executor: IAgentExecutor, checkp
432
545
  validationRetries: import("@langchain/langgraph").BinaryOperatorAggregate<number, number>;
433
546
  lastValidationTarget: import("@langchain/langgraph").BinaryOperatorAggregate<string, string>;
434
547
  lastValidationErrors: import("@langchain/langgraph").BinaryOperatorAggregate<string[], string[]>;
548
+ prUrl: import("@langchain/langgraph").BinaryOperatorAggregate<string | null, string | null>;
549
+ prNumber: import("@langchain/langgraph").BinaryOperatorAggregate<number | null, number | null>;
550
+ commitHash: import("@langchain/langgraph").BinaryOperatorAggregate<string | null, string | null>;
551
+ ciStatus: import("@langchain/langgraph").BinaryOperatorAggregate<string | null, string | null>;
552
+ push: import("@langchain/langgraph").BinaryOperatorAggregate<boolean, boolean>;
553
+ openPr: import("@langchain/langgraph").BinaryOperatorAggregate<boolean, boolean>;
554
+ autoMerge: import("@langchain/langgraph").BinaryOperatorAggregate<boolean, boolean>;
555
+ allowMerge: import("@langchain/langgraph").BinaryOperatorAggregate<boolean, boolean>;
435
556
  }>>;
436
557
  repair_spec_requirements: Partial<import("@langchain/langgraph").StateType<{
437
558
  featureId: {
@@ -465,6 +586,14 @@ export declare function createFeatureAgentGraph(executor: IAgentExecutor, checkp
465
586
  validationRetries: import("@langchain/langgraph").BinaryOperatorAggregate<number, number>;
466
587
  lastValidationTarget: import("@langchain/langgraph").BinaryOperatorAggregate<string, string>;
467
588
  lastValidationErrors: import("@langchain/langgraph").BinaryOperatorAggregate<string[], string[]>;
589
+ prUrl: import("@langchain/langgraph").BinaryOperatorAggregate<string | null, string | null>;
590
+ prNumber: import("@langchain/langgraph").BinaryOperatorAggregate<number | null, number | null>;
591
+ commitHash: import("@langchain/langgraph").BinaryOperatorAggregate<string | null, string | null>;
592
+ ciStatus: import("@langchain/langgraph").BinaryOperatorAggregate<string | null, string | null>;
593
+ push: import("@langchain/langgraph").BinaryOperatorAggregate<boolean, boolean>;
594
+ openPr: import("@langchain/langgraph").BinaryOperatorAggregate<boolean, boolean>;
595
+ autoMerge: import("@langchain/langgraph").BinaryOperatorAggregate<boolean, boolean>;
596
+ allowMerge: import("@langchain/langgraph").BinaryOperatorAggregate<boolean, boolean>;
468
597
  }>>;
469
598
  repair_research: Partial<import("@langchain/langgraph").StateType<{
470
599
  featureId: {
@@ -498,6 +627,14 @@ export declare function createFeatureAgentGraph(executor: IAgentExecutor, checkp
498
627
  validationRetries: import("@langchain/langgraph").BinaryOperatorAggregate<number, number>;
499
628
  lastValidationTarget: import("@langchain/langgraph").BinaryOperatorAggregate<string, string>;
500
629
  lastValidationErrors: import("@langchain/langgraph").BinaryOperatorAggregate<string[], string[]>;
630
+ prUrl: import("@langchain/langgraph").BinaryOperatorAggregate<string | null, string | null>;
631
+ prNumber: import("@langchain/langgraph").BinaryOperatorAggregate<number | null, number | null>;
632
+ commitHash: import("@langchain/langgraph").BinaryOperatorAggregate<string | null, string | null>;
633
+ ciStatus: import("@langchain/langgraph").BinaryOperatorAggregate<string | null, string | null>;
634
+ push: import("@langchain/langgraph").BinaryOperatorAggregate<boolean, boolean>;
635
+ openPr: import("@langchain/langgraph").BinaryOperatorAggregate<boolean, boolean>;
636
+ autoMerge: import("@langchain/langgraph").BinaryOperatorAggregate<boolean, boolean>;
637
+ allowMerge: import("@langchain/langgraph").BinaryOperatorAggregate<boolean, boolean>;
501
638
  }>>;
502
639
  repair_plan_tasks: Partial<import("@langchain/langgraph").StateType<{
503
640
  featureId: {
@@ -531,6 +668,14 @@ export declare function createFeatureAgentGraph(executor: IAgentExecutor, checkp
531
668
  validationRetries: import("@langchain/langgraph").BinaryOperatorAggregate<number, number>;
532
669
  lastValidationTarget: import("@langchain/langgraph").BinaryOperatorAggregate<string, string>;
533
670
  lastValidationErrors: import("@langchain/langgraph").BinaryOperatorAggregate<string[], string[]>;
671
+ prUrl: import("@langchain/langgraph").BinaryOperatorAggregate<string | null, string | null>;
672
+ prNumber: import("@langchain/langgraph").BinaryOperatorAggregate<number | null, number | null>;
673
+ commitHash: import("@langchain/langgraph").BinaryOperatorAggregate<string | null, string | null>;
674
+ ciStatus: import("@langchain/langgraph").BinaryOperatorAggregate<string | null, string | null>;
675
+ push: import("@langchain/langgraph").BinaryOperatorAggregate<boolean, boolean>;
676
+ openPr: import("@langchain/langgraph").BinaryOperatorAggregate<boolean, boolean>;
677
+ autoMerge: import("@langchain/langgraph").BinaryOperatorAggregate<boolean, boolean>;
678
+ allowMerge: import("@langchain/langgraph").BinaryOperatorAggregate<boolean, boolean>;
534
679
  }>>;
535
680
  }, unknown, unknown>;
536
681
  //# sourceMappingURL=feature-agent-graph.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"feature-agent-graph.d.ts","sourceRoot":"","sources":["../../../../../../../../packages/core/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"}
1
+ {"version":3,"file":"feature-agent-graph.d.ts","sourceRoot":"","sources":["../../../../../../../../packages/core/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;AAOpG,OAAO,EAAmB,KAAK,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAS5E,OAAO,EAAE,sBAAsB,EAAE,KAAK,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAE5E;;;GAGG;AACH,MAAM,WAAW,qBAAqB;IACpC,QAAQ,EAAE,cAAc,CAAC;IACzB,aAAa,EAAE,aAAa,CAAC;CAC9B;AAuGD;;;;;;;;;;;;GAYG;AACH,wBAAgB,uBAAuB,CACrC,cAAc,EAAE,qBAAqB,GAAG,cAAc,EACtD,YAAY,CAAC,EAAE,mBAAmB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;qBAmEnC"}
@@ -5,6 +5,7 @@ import { createRequirementsNode } from './nodes/requirements.node.js';
5
5
  import { createResearchNode } from './nodes/research.node.js';
6
6
  import { createPlanNode } from './nodes/plan.node.js';
7
7
  import { createImplementNode } from './nodes/implement.node.js';
8
+ import { createMergeNode } from './nodes/merge.node.js';
8
9
  import { createValidateNode } from './nodes/validate.node.js';
9
10
  import { createRepairNode } from './nodes/repair.node.js';
10
11
  import { validateSpecAnalyze, validateSpecRequirements } from './nodes/schemas/spec.schema.js';
@@ -107,16 +108,21 @@ function createPlanTasksValidator() {
107
108
  * Factory function that creates and compiles the feature-agent LangGraph.
108
109
  *
109
110
  * The graph defines a linear SDLC workflow with validation gates:
110
- * analyze → validate → requirements → validate → research → validate → plan → validate → implement
111
+ * analyze → validate → requirements → validate → research → validate → plan → validate → implement → merge
111
112
  *
112
113
  * Each YAML-producing node is followed by a validate/repair loop that ensures
113
114
  * the output YAML conforms to its schema before proceeding.
114
115
  *
115
- * @param executor - The agent executor to delegate prompt execution to
116
+ * @param depsOrExecutor - Graph dependencies or a legacy executor
116
117
  * @param checkpointer - Optional checkpoint saver for state persistence
117
118
  * @returns A compiled LangGraph ready to be invoked
118
119
  */
119
- export function createFeatureAgentGraph(executor, checkpointer) {
120
+ export function createFeatureAgentGraph(depsOrExecutor, checkpointer) {
121
+ // Support legacy signature: createFeatureAgentGraph(executor, checkpointer)
122
+ const deps = 'execute' in depsOrExecutor
123
+ ? { executor: depsOrExecutor, mergeNodeDeps: undefined }
124
+ : depsOrExecutor;
125
+ const { executor } = deps;
120
126
  const graph = new StateGraph(FeatureAgentAnnotation)
121
127
  // --- Producer nodes ---
122
128
  .addNode('analyze', createAnalyzeNode(executor))
@@ -147,7 +153,16 @@ export function createFeatureAgentGraph(executor, checkpointer) {
147
153
  .addEdge('repair_research', 'validate_research')
148
154
  .addEdge('plan', 'validate_plan_tasks')
149
155
  .addConditionalEdges('validate_plan_tasks', routeValidation('implement', 'repair_plan_tasks'))
150
- .addEdge('repair_plan_tasks', 'validate_plan_tasks')
151
- .addEdge('implement', END);
156
+ .addEdge('repair_plan_tasks', 'validate_plan_tasks');
157
+ // --- Merge node: wired when deps are provided ---
158
+ if (deps.mergeNodeDeps) {
159
+ graph
160
+ .addNode('merge', createMergeNode(deps.mergeNodeDeps))
161
+ .addEdge('implement', 'merge')
162
+ .addEdge('merge', END);
163
+ }
164
+ else {
165
+ graph.addEdge('implement', END);
166
+ }
152
167
  return graph.compile({ checkpointer });
153
168
  }
@@ -16,6 +16,10 @@ export declare class FeatureAgentProcessService implements IFeatureAgentProcessS
16
16
  resume?: boolean;
17
17
  threadId?: string;
18
18
  resumeFromInterrupt?: boolean;
19
+ push?: boolean;
20
+ openPr?: boolean;
21
+ autoMerge?: boolean;
22
+ allowMerge?: boolean;
19
23
  }): number;
20
24
  isAlive(pid: number): boolean;
21
25
  checkAndMarkCrashed(runId: string): Promise<void>;
@@ -1 +1 @@
1
- {"version":3,"file":"feature-agent-process.service.d.ts","sourceRoot":"","sources":["../../../../../../../../packages/core/src/infrastructure/services/agents/feature-agent/feature-agent-process.service.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AASH,OAAO,KAAK,EAAE,2BAA2B,EAAE,MAAM,sEAAsE,CAAC;AACxH,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,qEAAqE,CAAC;AAC/G,OAAO,EAAkB,KAAK,aAAa,EAAE,MAAM,8BAA8B,CAAC;AAYlF,qBAAa,0BAA2B,YAAW,2BAA2B;IAChE,OAAO,CAAC,QAAQ,CAAC,aAAa;gBAAb,aAAa,EAAE,mBAAmB;IAE/D,KAAK,CACH,SAAS,EAAE,MAAM,EACjB,KAAK,EAAE,MAAM,EACb,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,MAAM,EACf,YAAY,CAAC,EAAE,MAAM,EACrB,OAAO,CAAC,EAAE;QACR,aAAa,CAAC,EAAE,aAAa,CAAC;QAC9B,MAAM,CAAC,EAAE,OAAO,CAAC;QACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,mBAAmB,CAAC,EAAE,OAAO,CAAC;KAC/B,GACA,MAAM;IAkDT,OAAO,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO;IASvB,mBAAmB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;CAexD"}
1
+ {"version":3,"file":"feature-agent-process.service.d.ts","sourceRoot":"","sources":["../../../../../../../../packages/core/src/infrastructure/services/agents/feature-agent/feature-agent-process.service.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AASH,OAAO,KAAK,EAAE,2BAA2B,EAAE,MAAM,sEAAsE,CAAC;AACxH,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,qEAAqE,CAAC;AAC/G,OAAO,EAAkB,KAAK,aAAa,EAAE,MAAM,8BAA8B,CAAC;AAYlF,qBAAa,0BAA2B,YAAW,2BAA2B;IAChE,OAAO,CAAC,QAAQ,CAAC,aAAa;gBAAb,aAAa,EAAE,mBAAmB;IAE/D,KAAK,CACH,SAAS,EAAE,MAAM,EACjB,KAAK,EAAE,MAAM,EACb,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,MAAM,EACf,YAAY,CAAC,EAAE,MAAM,EACrB,OAAO,CAAC,EAAE;QACR,aAAa,CAAC,EAAE,aAAa,CAAC;QAC9B,MAAM,CAAC,EAAE,OAAO,CAAC;QACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,mBAAmB,CAAC,EAAE,OAAO,CAAC;QAC9B,IAAI,CAAC,EAAE,OAAO,CAAC;QACf,MAAM,CAAC,EAAE,OAAO,CAAC;QACjB,SAAS,CAAC,EAAE,OAAO,CAAC;QACpB,UAAU,CAAC,EAAE,OAAO,CAAC;KACtB,GACA,MAAM;IA8DT,OAAO,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO;IASvB,mBAAmB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;CAexD"}
@@ -53,6 +53,18 @@ export class FeatureAgentProcessService {
53
53
  if (options?.resumeFromInterrupt) {
54
54
  args.push('--resume-from-interrupt');
55
55
  }
56
+ if (options?.push) {
57
+ args.push('--push');
58
+ }
59
+ if (options?.openPr) {
60
+ args.push('--open-pr');
61
+ }
62
+ if (options?.autoMerge) {
63
+ args.push('--auto-merge');
64
+ }
65
+ if (options?.allowMerge) {
66
+ args.push('--allow-merge');
67
+ }
56
68
  // Create log file for worker output (for debugging)
57
69
  const logsDir = join(homedir(), '.shep', 'logs');
58
70
  mkdirSync(logsDir, { recursive: true });
@@ -20,6 +20,10 @@ export interface WorkerArgs {
20
20
  resume?: boolean;
21
21
  threadId?: string;
22
22
  resumeFromInterrupt?: boolean;
23
+ push?: boolean;
24
+ openPr?: boolean;
25
+ autoMerge?: boolean;
26
+ allowMerge?: boolean;
23
27
  }
24
28
  /**
25
29
  * Parse CLI arguments into a WorkerArgs object.
@@ -1 +1 @@
1
- {"version":3,"file":"feature-agent-worker.d.ts","sourceRoot":"","sources":["../../../../../../../../packages/core/src/infrastructure/services/agents/feature-agent/feature-agent-worker.ts"],"names":[],"mappings":";AACA;;;;;;;;GAQG;AAEH,OAAO,kBAAkB,CAAC;AAgB1B,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAC;AAElE,MAAM,WAAW,UAAU;IACzB,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,aAAa,CAAC,EAAE,aAAa,CAAC;IAC9B,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,mBAAmB,CAAC,EAAE,OAAO,CAAC;CAC/B;AAED;;;GAGG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,UAAU,CA0C1D;AAgCD;;;GAGG;AACH,wBAAsB,SAAS,CAAC,IAAI,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,CAsI/D"}
1
+ {"version":3,"file":"feature-agent-worker.d.ts","sourceRoot":"","sources":["../../../../../../../../packages/core/src/infrastructure/services/agents/feature-agent/feature-agent-worker.ts"],"names":[],"mappings":";AACA;;;;;;;;GAQG;AAEH,OAAO,kBAAkB,CAAC;AAoB1B,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAC;AAElE,MAAM,WAAW,UAAU;IACzB,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,aAAa,CAAC,EAAE,aAAa,CAAC;IAC9B,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAC9B,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,UAAU,CAAC,EAAE,OAAO,CAAC;CACtB;AAED;;;GAGG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,UAAU,CAkD1D;AAgCD;;;GAGG;AACH,wBAAsB,SAAS,CAAC,IAAI,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,CA2J/D"}