@shepai/cli 1.119.0 → 1.120.0-pr375.33a59f9

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 (142) hide show
  1. package/dist/packages/core/src/application/use-cases/features/resume-feature.use-case.d.ts +3 -1
  2. package/dist/packages/core/src/application/use-cases/features/resume-feature.use-case.d.ts.map +1 -1
  3. package/dist/packages/core/src/application/use-cases/features/resume-feature.use-case.js +4 -2
  4. package/dist/packages/core/src/infrastructure/services/agents/feature-agent/nodes/fast-implement.node.d.ts.map +1 -1
  5. package/dist/packages/core/src/infrastructure/services/agents/feature-agent/nodes/fast-implement.node.js +13 -1
  6. package/dist/src/presentation/web/app/actions/approve-feature.d.ts.map +1 -1
  7. package/dist/src/presentation/web/app/actions/approve-feature.js +9 -0
  8. package/dist/src/presentation/web/app/actions/reject-feature.d.ts.map +1 -1
  9. package/dist/src/presentation/web/app/actions/reject-feature.js +9 -0
  10. package/dist/src/presentation/web/components/layouts/app-shell/app-shell.d.ts.map +1 -1
  11. package/dist/src/presentation/web/components/layouts/app-shell/app-shell.js +8 -3
  12. package/dist/tsconfig.build.tsbuildinfo +1 -1
  13. package/package.json +1 -1
  14. package/web/.next/BUILD_ID +1 -1
  15. package/web/.next/build-manifest.json +2 -2
  16. package/web/.next/fallback-build-manifest.json +2 -2
  17. package/web/.next/prerender-manifest.json +3 -3
  18. package/web/.next/required-server-files.js +3 -3
  19. package/web/.next/required-server-files.json +3 -3
  20. package/web/.next/server/app/(dashboard)/@drawer/create/page/server-reference-manifest.json +21 -21
  21. package/web/.next/server/app/(dashboard)/@drawer/create/page.js.nft.json +1 -1
  22. package/web/.next/server/app/(dashboard)/@drawer/create/page_client-reference-manifest.js +1 -1
  23. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/[tab]/page/server-reference-manifest.json +27 -27
  24. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/[tab]/page.js.nft.json +1 -1
  25. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/[tab]/page_client-reference-manifest.js +1 -1
  26. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/page/server-reference-manifest.json +27 -27
  27. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/page.js.nft.json +1 -1
  28. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/page_client-reference-manifest.js +1 -1
  29. package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/page/server-reference-manifest.json +19 -19
  30. package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/page.js.nft.json +1 -1
  31. package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/page_client-reference-manifest.js +1 -1
  32. package/web/.next/server/app/(dashboard)/create/page/server-reference-manifest.json +21 -21
  33. package/web/.next/server/app/(dashboard)/create/page.js.nft.json +1 -1
  34. package/web/.next/server/app/(dashboard)/create/page_client-reference-manifest.js +1 -1
  35. package/web/.next/server/app/(dashboard)/feature/[featureId]/[tab]/page/server-reference-manifest.json +27 -27
  36. package/web/.next/server/app/(dashboard)/feature/[featureId]/[tab]/page.js.nft.json +1 -1
  37. package/web/.next/server/app/(dashboard)/feature/[featureId]/[tab]/page_client-reference-manifest.js +1 -1
  38. package/web/.next/server/app/(dashboard)/feature/[featureId]/page/server-reference-manifest.json +27 -27
  39. package/web/.next/server/app/(dashboard)/feature/[featureId]/page.js.nft.json +1 -1
  40. package/web/.next/server/app/(dashboard)/feature/[featureId]/page_client-reference-manifest.js +1 -1
  41. package/web/.next/server/app/(dashboard)/page/server-reference-manifest.json +19 -19
  42. package/web/.next/server/app/(dashboard)/page.js.nft.json +1 -1
  43. package/web/.next/server/app/(dashboard)/page_client-reference-manifest.js +1 -1
  44. package/web/.next/server/app/(dashboard)/repository/[repositoryId]/page/server-reference-manifest.json +19 -19
  45. package/web/.next/server/app/(dashboard)/repository/[repositoryId]/page.js.nft.json +1 -1
  46. package/web/.next/server/app/(dashboard)/repository/[repositoryId]/page_client-reference-manifest.js +1 -1
  47. package/web/.next/server/app/_global-error.html +2 -2
  48. package/web/.next/server/app/_global-error.rsc +1 -1
  49. package/web/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +1 -1
  50. package/web/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
  51. package/web/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
  52. package/web/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
  53. package/web/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  54. package/web/.next/server/app/_not-found/page/server-reference-manifest.json +1 -1
  55. package/web/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  56. package/web/.next/server/app/settings/page/server-reference-manifest.json +6 -6
  57. package/web/.next/server/app/settings/page.js.nft.json +1 -1
  58. package/web/.next/server/app/settings/page_client-reference-manifest.js +1 -1
  59. package/web/.next/server/app/skills/page/server-reference-manifest.json +6 -6
  60. package/web/.next/server/app/skills/page_client-reference-manifest.js +1 -1
  61. package/web/.next/server/app/tools/page/server-reference-manifest.json +6 -6
  62. package/web/.next/server/app/tools/page_client-reference-manifest.js +1 -1
  63. package/web/.next/server/app/version/page/server-reference-manifest.json +1 -1
  64. package/web/.next/server/app/version/page_client-reference-manifest.js +1 -1
  65. package/web/.next/server/chunks/[root-of-the-server]__a402b567._.js +1 -1
  66. package/web/.next/server/chunks/ssr/744ca_web_components_common_control-center-drawer_create-drawer-client_tsx_5e26fc0a._.js +1 -1
  67. package/web/.next/server/chunks/ssr/744ca_web_components_common_control-center-drawer_create-drawer-client_tsx_5e26fc0a._.js.map +1 -1
  68. package/web/.next/server/chunks/ssr/8ba4b_server_app_(dashboard)_@drawer_repository_[repositoryId]_page_actions_ed372306.js +1 -1
  69. package/web/.next/server/chunks/ssr/8ba4b_server_app_(dashboard)_@drawer_repository_[repositoryId]_page_actions_ed372306.js.map +1 -1
  70. package/web/.next/server/chunks/ssr/8ba4b_server_app_(dashboard)_repository_[repositoryId]_page_actions_32e26434.js +1 -1
  71. package/web/.next/server/chunks/ssr/8ba4b_server_app_(dashboard)_repository_[repositoryId]_page_actions_32e26434.js.map +1 -1
  72. package/web/.next/server/chunks/ssr/[root-of-the-server]__06fef644._.js +1 -1
  73. package/web/.next/server/chunks/ssr/[root-of-the-server]__3b14e5a0._.js +1 -1
  74. package/web/.next/server/chunks/ssr/[root-of-the-server]__3b14e5a0._.js.map +1 -1
  75. package/web/.next/server/chunks/ssr/[root-of-the-server]__545792ab._.js +1 -1
  76. package/web/.next/server/chunks/ssr/[root-of-the-server]__545792ab._.js.map +1 -1
  77. package/web/.next/server/chunks/ssr/[root-of-the-server]__6b17a22d._.js +1 -1
  78. package/web/.next/server/chunks/ssr/[root-of-the-server]__6b17a22d._.js.map +1 -1
  79. package/web/.next/server/chunks/ssr/[root-of-the-server]__6bb00d90._.js +2 -2
  80. package/web/.next/server/chunks/ssr/[root-of-the-server]__6bb00d90._.js.map +1 -1
  81. package/web/.next/server/chunks/ssr/[root-of-the-server]__804c006d._.js +1 -1
  82. package/web/.next/server/chunks/ssr/[root-of-the-server]__804c006d._.js.map +1 -1
  83. package/web/.next/server/chunks/ssr/[root-of-the-server]__8b59c03e._.js +1 -1
  84. package/web/.next/server/chunks/ssr/[root-of-the-server]__8b59c03e._.js.map +1 -1
  85. package/web/.next/server/chunks/ssr/[root-of-the-server]__8c553503._.js +2 -2
  86. package/web/.next/server/chunks/ssr/[root-of-the-server]__994ad9fe._.js +1 -1
  87. package/web/.next/server/chunks/ssr/[root-of-the-server]__994ad9fe._.js.map +1 -1
  88. package/web/.next/server/chunks/ssr/[root-of-the-server]__a022445f._.js +2 -2
  89. package/web/.next/server/chunks/ssr/[root-of-the-server]__a7de2711._.js +2 -2
  90. package/web/.next/server/chunks/ssr/[root-of-the-server]__c9c1cfee._.js +1 -1
  91. package/web/.next/server/chunks/ssr/[root-of-the-server]__c9c1cfee._.js.map +1 -1
  92. package/web/.next/server/chunks/ssr/_135edb9c._.js +1 -1
  93. package/web/.next/server/chunks/ssr/_135edb9c._.js.map +1 -1
  94. package/web/.next/server/chunks/ssr/_2f6f48b8._.js +1 -1
  95. package/web/.next/server/chunks/ssr/_2f6f48b8._.js.map +1 -1
  96. package/web/.next/server/chunks/ssr/{_aeb74a70._.js → _336de097._.js} +2 -2
  97. package/web/.next/server/chunks/ssr/{_aeb74a70._.js.map → _336de097._.js.map} +1 -1
  98. package/web/.next/server/chunks/ssr/_ab069e13._.js +1 -1
  99. package/web/.next/server/chunks/ssr/_ab069e13._.js.map +1 -1
  100. package/web/.next/server/chunks/ssr/_cc77a143._.js +1 -1
  101. package/web/.next/server/chunks/ssr/_cc77a143._.js.map +1 -1
  102. package/web/.next/server/chunks/ssr/_d4434170._.js +3 -0
  103. package/web/.next/server/chunks/ssr/{_59ae996e._.js.map → _d4434170._.js.map} +1 -1
  104. package/web/.next/server/chunks/ssr/{_bed4bbb9._.js → _db02ed22._.js} +2 -2
  105. package/web/.next/server/chunks/ssr/{_bed4bbb9._.js.map → _db02ed22._.js.map} +1 -1
  106. package/web/.next/server/chunks/ssr/b1a17_presentation_web_components_features_settings_settings-page-client_tsx_6ed9d5f8._.js +1 -1
  107. package/web/.next/server/chunks/ssr/b1a17_presentation_web_components_features_settings_settings-page-client_tsx_6ed9d5f8._.js.map +1 -1
  108. package/web/.next/server/chunks/ssr/src_presentation_web_0835b28e._.js +2 -2
  109. package/web/.next/server/chunks/ssr/src_presentation_web_0835b28e._.js.map +1 -1
  110. package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_(dashboard)_page_actions_e99d78dd.js +1 -1
  111. package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_(dashboard)_page_actions_e99d78dd.js.map +1 -1
  112. package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_skills_page_actions_1fa8042e.js +1 -1
  113. package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_skills_page_actions_1fa8042e.js.map +1 -1
  114. package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_tools_page_actions_24684200.js +1 -1
  115. package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_tools_page_actions_24684200.js.map +1 -1
  116. package/web/.next/server/chunks/ssr/src_presentation_web_components_bf50c527._.js +1 -1
  117. package/web/.next/server/chunks/ssr/src_presentation_web_components_de814675._.js +1 -1
  118. package/web/.next/server/chunks/ssr/src_presentation_web_components_e599bb8c._.js +1 -1
  119. package/web/.next/server/chunks/ssr/src_presentation_web_components_e599bb8c._.js.map +1 -1
  120. package/web/.next/server/chunks/ssr/src_presentation_web_components_features_control-center_7ac3562e._.js +1 -1
  121. package/web/.next/server/chunks/ssr/src_presentation_web_components_features_control-center_7ac3562e._.js.map +1 -1
  122. package/web/.next/server/chunks/ssr/src_presentation_web_e8034a29._.js +2 -2
  123. package/web/.next/server/chunks/ssr/src_presentation_web_e8034a29._.js.map +1 -1
  124. package/web/.next/server/pages/500.html +2 -2
  125. package/web/.next/server/server-reference-manifest.js +1 -1
  126. package/web/.next/server/server-reference-manifest.json +33 -33
  127. package/web/.next/static/chunks/{7c57a9143e66868c.js → 300e8e9e5b895491.js} +1 -1
  128. package/web/.next/static/chunks/3d7dcc23fb3a0794.js +2 -0
  129. package/web/.next/static/chunks/{2b35632c1b784fae.js → 4ec0f46f478fc555.js} +1 -1
  130. package/web/.next/static/chunks/{1c5310cfde612b81.js → 578c4ec540731c6c.js} +1 -1
  131. package/web/.next/static/chunks/{69c6d3ba1606e98d.js → 5a152f713b67a1f9.js} +1 -1
  132. package/web/.next/static/chunks/{f3c4a7bb76c69b01.js → 5e05da73246f2332.js} +1 -1
  133. package/web/.next/static/chunks/{619af41a8d3232e5.js → 71161130b2462279.js} +1 -1
  134. package/web/.next/static/chunks/{30097f88cdf8fad8.js → 87dc022b2f29dde6.js} +1 -1
  135. package/web/.next/static/chunks/{c4477c532d2081e8.js → 91c3dcfa4edac343.js} +1 -1
  136. package/web/.next/static/chunks/{c1a6934d2281c088.js → ac91403380104d17.js} +1 -1
  137. package/web/.next/static/chunks/{ed113fb744f2e4d8.js → ed470010824ea6b3.js} +1 -1
  138. package/web/.next/server/chunks/ssr/_59ae996e._.js +0 -3
  139. package/web/.next/static/chunks/3678617c34576e18.js +0 -2
  140. /package/web/.next/static/{qmHUdyRBvaVksgjcL6w-m → AibFEAgKinepn_JE-WVCd}/_buildManifest.js +0 -0
  141. /package/web/.next/static/{qmHUdyRBvaVksgjcL6w-m → AibFEAgKinepn_JE-WVCd}/_clientMiddlewareManifest.json +0 -0
  142. /package/web/.next/static/{qmHUdyRBvaVksgjcL6w-m → AibFEAgKinepn_JE-WVCd}/_ssgManifest.js +0 -0
@@ -19,6 +19,8 @@ export declare class ResumeFeatureUseCase {
19
19
  private readonly processService;
20
20
  private readonly worktreeService;
21
21
  constructor(featureRepo: IFeatureRepository, runRepo: IAgentRunRepository, processService: IFeatureAgentProcessService, worktreeService: IWorktreeService);
22
- execute(featureId: string): Promise<ResumeFeatureResult>;
22
+ execute(featureId: string, options?: {
23
+ promptPrefix?: string;
24
+ }): Promise<ResumeFeatureResult>;
23
25
  }
24
26
  //# sourceMappingURL=resume-feature.use-case.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"resume-feature.use-case.d.ts","sourceRoot":"","sources":["../../../../../../../packages/core/src/application/use-cases/features/resume-feature.use-case.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,OAAO,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,qCAAqC,CAAC;AAE7E,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,iEAAiE,CAAC;AAC1G,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,6DAA6D,CAAC;AACvG,OAAO,KAAK,EAAE,2BAA2B,EAAE,MAAM,8DAA8D,CAAC;AAChH,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,2DAA2D,CAAC;AAQlG,MAAM,WAAW,mBAAmB;IAClC,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,EAAE,QAAQ,CAAC;CAClB;AAED,qBACa,oBAAoB;IAG7B,OAAO,CAAC,QAAQ,CAAC,WAAW;IAE5B,OAAO,CAAC,QAAQ,CAAC,OAAO;IAExB,OAAO,CAAC,QAAQ,CAAC,cAAc;IAE/B,OAAO,CAAC,QAAQ,CAAC,eAAe;gBANf,WAAW,EAAE,kBAAkB,EAE/B,OAAO,EAAE,mBAAmB,EAE5B,cAAc,EAAE,2BAA2B,EAE3C,eAAe,EAAE,gBAAgB;IAG9C,OAAO,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,mBAAmB,CAAC;CAqG/D"}
1
+ {"version":3,"file":"resume-feature.use-case.d.ts","sourceRoot":"","sources":["../../../../../../../packages/core/src/application/use-cases/features/resume-feature.use-case.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,OAAO,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,qCAAqC,CAAC;AAE7E,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,iEAAiE,CAAC;AAC1G,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,6DAA6D,CAAC;AACvG,OAAO,KAAK,EAAE,2BAA2B,EAAE,MAAM,8DAA8D,CAAC;AAChH,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,2DAA2D,CAAC;AAQlG,MAAM,WAAW,mBAAmB;IAClC,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,EAAE,QAAQ,CAAC;CAClB;AAED,qBACa,oBAAoB;IAG7B,OAAO,CAAC,QAAQ,CAAC,WAAW;IAE5B,OAAO,CAAC,QAAQ,CAAC,OAAO;IAExB,OAAO,CAAC,QAAQ,CAAC,cAAc;IAE/B,OAAO,CAAC,QAAQ,CAAC,eAAe;gBANf,WAAW,EAAE,kBAAkB,EAE/B,OAAO,EAAE,mBAAmB,EAE5B,cAAc,EAAE,2BAA2B,EAE3C,eAAe,EAAE,gBAAgB;IAG9C,OAAO,CACX,SAAS,EAAE,MAAM,EACjB,OAAO,CAAC,EAAE;QAAE,YAAY,CAAC,EAAE,MAAM,CAAA;KAAE,GAClC,OAAO,CAAC,mBAAmB,CAAC;CAuGhC"}
@@ -35,7 +35,7 @@ let ResumeFeatureUseCase = class ResumeFeatureUseCase {
35
35
  this.processService = processService;
36
36
  this.worktreeService = worktreeService;
37
37
  }
38
- async execute(featureId) {
38
+ async execute(featureId, options) {
39
39
  // Resolve feature by exact ID or prefix
40
40
  const feature = (await this.featureRepo.findById(featureId)) ??
41
41
  (await this.featureRepo.findByIdPrefix(featureId));
@@ -79,7 +79,9 @@ let ResumeFeatureUseCase = class ResumeFeatureUseCase {
79
79
  agentType: lastRun.agentType,
80
80
  agentName: lastRun.agentName,
81
81
  status: AgentRunStatus.pending,
82
- prompt: lastRun.prompt,
82
+ prompt: options?.promptPrefix
83
+ ? `${options.promptPrefix}\n\n${lastRun.prompt}`
84
+ : lastRun.prompt,
83
85
  threadId: lastRun.threadId, // Same thread for checkpoint continuity
84
86
  featureId: feature.id,
85
87
  repositoryPath: feature.repositoryPath,
@@ -1 +1 @@
1
- {"version":3,"file":"fast-implement.node.d.ts","sourceRoot":"","sources":["../../../../../../../../../packages/core/src/infrastructure/services/agents/feature-agent/nodes/fast-implement.node.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAKH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,+DAA+D,CAAC;AAEpG,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAUrD;;;;;GAKG;AACH,wBAAgB,uBAAuB,CAAC,QAAQ,EAAE,cAAc,IAGhD,OAAO,iBAAiB,KAAG,OAAO,CAAC,OAAO,CAAC,iBAAiB,CAAC,CAAC,CAoD7E"}
1
+ {"version":3,"file":"fast-implement.node.d.ts","sourceRoot":"","sources":["../../../../../../../../../packages/core/src/infrastructure/services/agents/feature-agent/nodes/fast-implement.node.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAKH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,+DAA+D,CAAC;AAEpG,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAgBrD;;;;;GAKG;AACH,wBAAgB,uBAAuB,CAAC,QAAQ,EAAE,cAAc,IAGhD,OAAO,iBAAiB,KAAG,OAAO,CAAC,OAAO,CAAC,iBAAiB,CAAC,CAAC,CAkE7E"}
@@ -12,7 +12,7 @@
12
12
  import { mkdirSync, writeFileSync } from 'node:fs';
13
13
  import { join, dirname } from 'node:path';
14
14
  import { isGraphBubbleUp } from '@langchain/langgraph';
15
- import { createNodeLogger, buildExecutorOptions, retryExecute } from './node-helpers.js';
15
+ import { createNodeLogger, buildExecutorOptions, retryExecute, getCompletedPhases, markPhaseComplete, } from './node-helpers.js';
16
16
  import { reportNodeStart } from '../heartbeat.js';
17
17
  import { recordPhaseStart, recordPhaseEnd } from '../phase-timing-context.js';
18
18
  import { updateNodeLifecycle } from '../lifecycle-context.js';
@@ -33,6 +33,16 @@ export function createFastImplementNode(executor) {
33
33
  log.info('Starting fast implementation');
34
34
  reportNodeStart('fast-implement');
35
35
  await updateNodeLifecycle('fast-implement');
36
+ // Skip if already completed (resume from error path)
37
+ const completedPhases = getCompletedPhases(state.specDir);
38
+ if (completedPhases.includes('fast-implement')) {
39
+ log.info('Phase already completed, skipping execution');
40
+ return {
41
+ currentNode: 'fast-implement',
42
+ messages: ['[fast-implement] already completed — skipping'],
43
+ _needsReexecution: false,
44
+ };
45
+ }
36
46
  const startTime = Date.now();
37
47
  const timingId = await recordPhaseStart('fast-implement');
38
48
  try {
@@ -51,6 +61,8 @@ export function createFastImplementNode(executor) {
51
61
  log.info('Evidence collection disabled via settings — skipping');
52
62
  }
53
63
  await recordPhaseEnd(timingId, durationMs);
64
+ // Mark phase complete so resume from error skips re-execution
65
+ markPhaseComplete(state.specDir, 'fast-implement', log);
54
66
  return {
55
67
  currentNode: 'fast-implement',
56
68
  evidence,
@@ -1 +1 @@
1
- {"version":3,"file":"approve-feature.d.ts","sourceRoot":"","sources":["../../../../../../src/presentation/web/app/actions/approve-feature.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,sCAAsC,CAAC;AAE/E,wBAAsB,cAAc,CAClC,SAAS,EAAE,MAAM,EACjB,OAAO,CAAC,EAAE,kBAAkB,GAC3B,OAAO,CAAC;IAAE,QAAQ,EAAE,OAAO,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,CA6BhD"}
1
+ {"version":3,"file":"approve-feature.d.ts","sourceRoot":"","sources":["../../../../../../src/presentation/web/app/actions/approve-feature.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,sCAAsC,CAAC;AAK/E,wBAAsB,cAAc,CAClC,SAAS,EAAE,MAAM,EACjB,OAAO,CAAC,EAAE,kBAAkB,GAC3B,OAAO,CAAC;IAAE,QAAQ,EAAE,OAAO,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,CAsChD"}
@@ -1,5 +1,7 @@
1
1
  'use server';
2
2
  import { resolve } from '../../lib/server-container.js';
3
+ import { AgentRunStatus } from '../../../../../packages/core/src/domain/generated/output.js';
4
+ const ERROR_STATUSES = new Set([AgentRunStatus.failed, AgentRunStatus.interrupted]);
3
5
  export async function approveFeature(featureId, payload) {
4
6
  if (!featureId.trim()) {
5
7
  return { approved: false, error: 'Feature id is required' };
@@ -13,6 +15,13 @@ export async function approveFeature(featureId, payload) {
13
15
  if (!feature.agentRunId) {
14
16
  return { approved: false, error: 'Feature has no agent run' };
15
17
  }
18
+ const runRepo = resolve('IAgentRunRepository');
19
+ const run = await runRepo.findById(feature.agentRunId);
20
+ if (run && ERROR_STATUSES.has(run.status)) {
21
+ const resumeUseCase = resolve('ResumeFeatureUseCase');
22
+ await resumeUseCase.execute(featureId, { promptPrefix: 'User approved. Please continue.' });
23
+ return { approved: true };
24
+ }
16
25
  const approveUseCase = resolve('ApproveAgentRunUseCase');
17
26
  const result = await approveUseCase.execute(feature.agentRunId, payload);
18
27
  if (!result.approved) {
@@ -1 +1 @@
1
- {"version":3,"file":"reject-feature.d.ts","sourceRoot":"","sources":["../../../../../../src/presentation/web/app/actions/reject-feature.ts"],"names":[],"mappings":"AAMA,wBAAsB,aAAa,CACjC,SAAS,EAAE,MAAM,EACjB,QAAQ,EAAE,MAAM,EAChB,WAAW,CAAC,EAAE,MAAM,EAAE,GACrB,OAAO,CAAC;IACT,QAAQ,EAAE,OAAO,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,CAAC,CAqCD"}
1
+ {"version":3,"file":"reject-feature.d.ts","sourceRoot":"","sources":["../../../../../../src/presentation/web/app/actions/reject-feature.ts"],"names":[],"mappings":"AAWA,wBAAsB,aAAa,CACjC,SAAS,EAAE,MAAM,EACjB,QAAQ,EAAE,MAAM,EAChB,WAAW,CAAC,EAAE,MAAM,EAAE,GACrB,OAAO,CAAC;IACT,QAAQ,EAAE,OAAO,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,CAAC,CA8CD"}
@@ -1,5 +1,7 @@
1
1
  'use server';
2
2
  import { resolve } from '../../lib/server-container.js';
3
+ import { AgentRunStatus } from '../../../../../packages/core/src/domain/generated/output.js';
4
+ const ERROR_STATUSES = new Set([AgentRunStatus.failed, AgentRunStatus.interrupted]);
3
5
  export async function rejectFeature(featureId, feedback, attachments) {
4
6
  if (!featureId.trim()) {
5
7
  return { rejected: false, error: 'Feature id is required' };
@@ -16,6 +18,13 @@ export async function rejectFeature(featureId, feedback, attachments) {
16
18
  if (!feature.agentRunId) {
17
19
  return { rejected: false, error: 'Feature has no agent run' };
18
20
  }
21
+ const runRepo = resolve('IAgentRunRepository');
22
+ const run = await runRepo.findById(feature.agentRunId);
23
+ if (run && ERROR_STATUSES.has(run.status)) {
24
+ const resumeUseCase = resolve('ResumeFeatureUseCase');
25
+ await resumeUseCase.execute(featureId, { promptPrefix: feedback });
26
+ return { rejected: true, iteration: 1 };
27
+ }
19
28
  const rejectUseCase = resolve('RejectAgentRunUseCase');
20
29
  const result = await rejectUseCase.execute(feature.agentRunId, feedback, attachments);
21
30
  if (!result.rejected) {
@@ -1 +1 @@
1
- {"version":3,"file":"app-shell.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/layouts/app-shell/app-shell.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAkC,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAsBvE,UAAU,aAAa;IACrB,QAAQ,EAAE,SAAS,CAAC;CACrB;AAiFD,wBAAgB,QAAQ,CAAC,EAAE,QAAQ,EAAE,EAAE,aAAa,2CAUnD"}
1
+ {"version":3,"file":"app-shell.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/layouts/app-shell/app-shell.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAkC,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAsBvE,UAAU,aAAa;IACrB,QAAQ,EAAE,SAAS,CAAC;CACrB;AA0FD,wBAAgB,QAAQ,CAAC,EAAE,QAAQ,EAAE,EAAE,aAAa,2CAUnD"}
@@ -1,7 +1,7 @@
1
1
  'use client';
2
2
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
3
  import { useCallback, useMemo, useState } from 'react';
4
- import { useRouter } from 'next/navigation';
4
+ import { useRouter, usePathname } from 'next/navigation';
5
5
  import { Plus, FolderPlus } from 'lucide-react';
6
6
  import { SidebarProvider, SidebarInset } from '../../ui/sidebar.js';
7
7
  import { AppSidebar } from '../../layouts/app-sidebar/index.js';
@@ -14,9 +14,14 @@ import { DrawerCloseGuardProvider, useDrawerCloseGuard } from '../../../hooks/dr
14
14
  import { SidebarFeaturesProvider, useSidebarFeaturesContext, } from '../../../hooks/sidebar-features-context.js';
15
15
  import { useNotifications } from '../../../hooks/use-notifications.js';
16
16
  import { useFeatureFlags } from '../../../hooks/feature-flags-context.js';
17
- /** Inner shell that consumes the agent-events context for notifications. */
17
+ /** Control center route prefixes where the FAB should be visible. */
18
+ const CONTROL_CENTER_PREFIXES = ['/', '/create', '/feature', '/repository'];
19
+ function isControlCenterRoute(pathname) {
20
+ return CONTROL_CENTER_PREFIXES.some((prefix) => pathname === prefix || (prefix !== '/' && pathname.startsWith(`${prefix}/`)));
21
+ }
18
22
  function AppShellInner({ children }) {
19
23
  const router = useRouter();
24
+ const pathname = usePathname();
20
25
  const { guardedNavigate } = useDrawerCloseGuard();
21
26
  const featureFlags = useFeatureFlags();
22
27
  // Subscribe to agent lifecycle events and dispatch toast/browser notifications
@@ -58,7 +63,7 @@ function AppShellInner({ children }) {
58
63
  loading: addingRepo,
59
64
  },
60
65
  ], [handleNewFeature, handleAddRepository, addingRepo]);
61
- return (_jsxs(SidebarProvider, { defaultOpen: false, children: [_jsx(AppSidebar, { features: features, featureFlags: featureFlags, onFeatureClick: handleFeatureClick }), _jsx(SidebarInset, { children: _jsxs("div", { className: "relative h-full", children: [_jsxs("div", { className: "absolute top-3 right-3 z-50 flex gap-1", "data-test-id": "canvas-actions-toolbar", children: [_jsx(SoundToggle, {}), _jsx(ThemeToggle, {})] }), _jsx("main", { className: "h-full", children: children }), _jsx(FloatingActionButton, { actions: fabActions })] }) })] }));
66
+ return (_jsxs(SidebarProvider, { defaultOpen: false, children: [_jsx(AppSidebar, { features: features, featureFlags: featureFlags, onFeatureClick: handleFeatureClick }), _jsx(SidebarInset, { children: _jsxs("div", { className: "relative h-full", children: [_jsxs("div", { className: "absolute top-3 right-3 z-50 flex gap-1", "data-test-id": "canvas-actions-toolbar", children: [_jsx(SoundToggle, {}), _jsx(ThemeToggle, {})] }), _jsx("main", { className: "h-full", children: children }), isControlCenterRoute(pathname) && _jsx(FloatingActionButton, { actions: fabActions })] }) })] }));
62
67
  }
63
68
  export function AppShell({ children }) {
64
69
  return (_jsx(AgentEventsProvider, { children: _jsx(DrawerCloseGuardProvider, { children: _jsx(SidebarFeaturesProvider, { children: _jsx(AppShellInner, { children: children }) }) }) }));