@shepai/cli 1.94.0-pr285.71b2de1 → 1.94.0-pr286.b271ac9

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/src/presentation/web/components/common/feature-drawer-tabs/activity-tab.js +1 -1
  2. package/dist/src/presentation/web/components/common/feature-drawer-tabs/activity-tab.stories.d.ts +0 -2
  3. package/dist/src/presentation/web/components/common/feature-drawer-tabs/activity-tab.stories.d.ts.map +1 -1
  4. package/dist/src/presentation/web/components/common/feature-drawer-tabs/activity-tab.stories.js +0 -59
  5. package/dist/src/presentation/web/components/common/repository-node/repository-node-config.d.ts +2 -0
  6. package/dist/src/presentation/web/components/common/repository-node/repository-node-config.d.ts.map +1 -1
  7. package/dist/src/presentation/web/components/common/repository-node/repository-node.d.ts.map +1 -1
  8. package/dist/src/presentation/web/components/common/repository-node/repository-node.js +2 -1
  9. package/dist/src/presentation/web/components/common/repository-node/repository-node.stories.d.ts +1 -0
  10. package/dist/src/presentation/web/components/common/repository-node/repository-node.stories.d.ts.map +1 -1
  11. package/dist/src/presentation/web/components/common/repository-node/repository-node.stories.js +10 -0
  12. package/dist/src/presentation/web/components/features/control-center/control-center-inner.d.ts.map +1 -1
  13. package/dist/src/presentation/web/components/features/control-center/control-center-inner.js +12 -1
  14. package/dist/tsconfig.build.tsbuildinfo +1 -1
  15. package/package.json +1 -1
  16. package/web/.next/BUILD_ID +1 -1
  17. package/web/.next/build-manifest.json +2 -2
  18. package/web/.next/fallback-build-manifest.json +2 -2
  19. package/web/.next/prerender-manifest.json +3 -3
  20. package/web/.next/required-server-files.js +1 -1
  21. package/web/.next/required-server-files.json +1 -1
  22. package/web/.next/server/app/(dashboard)/@drawer/create/page/server-reference-manifest.json +18 -18
  23. package/web/.next/server/app/(dashboard)/@drawer/create/page.js.nft.json +1 -1
  24. package/web/.next/server/app/(dashboard)/@drawer/create/page_client-reference-manifest.js +1 -1
  25. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/[tab]/page/server-reference-manifest.json +21 -21
  26. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/[tab]/page.js.nft.json +1 -1
  27. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/[tab]/page_client-reference-manifest.js +1 -1
  28. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/page/server-reference-manifest.json +21 -21
  29. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/page.js.nft.json +1 -1
  30. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/page_client-reference-manifest.js +1 -1
  31. package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/page/server-reference-manifest.json +14 -14
  32. package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/page.js.nft.json +1 -1
  33. package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/page_client-reference-manifest.js +1 -1
  34. package/web/.next/server/app/(dashboard)/create/page/server-reference-manifest.json +18 -18
  35. package/web/.next/server/app/(dashboard)/create/page.js.nft.json +1 -1
  36. package/web/.next/server/app/(dashboard)/create/page_client-reference-manifest.js +1 -1
  37. package/web/.next/server/app/(dashboard)/feature/[featureId]/[tab]/page/server-reference-manifest.json +21 -21
  38. package/web/.next/server/app/(dashboard)/feature/[featureId]/[tab]/page.js.nft.json +1 -1
  39. package/web/.next/server/app/(dashboard)/feature/[featureId]/[tab]/page_client-reference-manifest.js +1 -1
  40. package/web/.next/server/app/(dashboard)/feature/[featureId]/page/server-reference-manifest.json +21 -21
  41. package/web/.next/server/app/(dashboard)/feature/[featureId]/page.js.nft.json +1 -1
  42. package/web/.next/server/app/(dashboard)/feature/[featureId]/page_client-reference-manifest.js +1 -1
  43. package/web/.next/server/app/(dashboard)/page/server-reference-manifest.json +14 -14
  44. package/web/.next/server/app/(dashboard)/page.js.nft.json +1 -1
  45. package/web/.next/server/app/(dashboard)/page_client-reference-manifest.js +1 -1
  46. package/web/.next/server/app/(dashboard)/repository/[repositoryId]/page/server-reference-manifest.json +14 -14
  47. package/web/.next/server/app/(dashboard)/repository/[repositoryId]/page.js.nft.json +1 -1
  48. package/web/.next/server/app/(dashboard)/repository/[repositoryId]/page_client-reference-manifest.js +1 -1
  49. package/web/.next/server/app/_global-error.html +2 -2
  50. package/web/.next/server/app/_global-error.rsc +1 -1
  51. package/web/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +1 -1
  52. package/web/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
  53. package/web/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
  54. package/web/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
  55. package/web/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  56. package/web/.next/server/app/_not-found/page/server-reference-manifest.json +1 -1
  57. package/web/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  58. package/web/.next/server/app/settings/page/server-reference-manifest.json +5 -5
  59. package/web/.next/server/app/settings/page_client-reference-manifest.js +1 -1
  60. package/web/.next/server/app/skills/page/server-reference-manifest.json +6 -6
  61. package/web/.next/server/app/skills/page_client-reference-manifest.js +1 -1
  62. package/web/.next/server/app/tools/page/server-reference-manifest.json +6 -6
  63. package/web/.next/server/app/tools/page_client-reference-manifest.js +1 -1
  64. package/web/.next/server/app/version/page/server-reference-manifest.json +1 -1
  65. package/web/.next/server/app/version/page_client-reference-manifest.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_da7eef33.js +1 -1
  69. package/web/.next/server/chunks/ssr/8ba4b_server_app_(dashboard)_@drawer_repository_[repositoryId]_page_actions_da7eef33.js.map +1 -1
  70. package/web/.next/server/chunks/ssr/8ba4b_server_app_(dashboard)_repository_[repositoryId]_page_actions_0a9251aa.js +1 -1
  71. package/web/.next/server/chunks/ssr/8ba4b_server_app_(dashboard)_repository_[repositoryId]_page_actions_0a9251aa.js.map +1 -1
  72. package/web/.next/server/chunks/ssr/[root-of-the-server]__11033878._.js +1 -1
  73. package/web/.next/server/chunks/ssr/[root-of-the-server]__11033878._.js.map +1 -1
  74. package/web/.next/server/chunks/ssr/[root-of-the-server]__17143953._.js +1 -1
  75. package/web/.next/server/chunks/ssr/[root-of-the-server]__17143953._.js.map +1 -1
  76. package/web/.next/server/chunks/ssr/[root-of-the-server]__357d99f9._.js +1 -1
  77. package/web/.next/server/chunks/ssr/[root-of-the-server]__45aad79d._.js +1 -1
  78. package/web/.next/server/chunks/ssr/[root-of-the-server]__45aad79d._.js.map +1 -1
  79. package/web/.next/server/chunks/ssr/[root-of-the-server]__4be9a9bb._.js +1 -1
  80. package/web/.next/server/chunks/ssr/[root-of-the-server]__5cc4752a._.js +1 -1
  81. package/web/.next/server/chunks/ssr/[root-of-the-server]__5cc4752a._.js.map +1 -1
  82. package/web/.next/server/chunks/ssr/[root-of-the-server]__5d87af2e._.js +1 -1
  83. package/web/.next/server/chunks/ssr/[root-of-the-server]__845a9d2a._.js +1 -1
  84. package/web/.next/server/chunks/ssr/[root-of-the-server]__845a9d2a._.js.map +1 -1
  85. package/web/.next/server/chunks/ssr/[root-of-the-server]__89e8a5cc._.js +2 -2
  86. package/web/.next/server/chunks/ssr/[root-of-the-server]__9de266fa._.js +1 -1
  87. package/web/.next/server/chunks/ssr/[root-of-the-server]__9de266fa._.js.map +1 -1
  88. package/web/.next/server/chunks/ssr/[root-of-the-server]__aad040c0._.js +1 -1
  89. package/web/.next/server/chunks/ssr/[root-of-the-server]__aad040c0._.js.map +1 -1
  90. package/web/.next/server/chunks/ssr/[root-of-the-server]__fdc75809._.js +1 -1
  91. package/web/.next/server/chunks/ssr/[root-of-the-server]__fdc75809._.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/_8dacd1e7._.js +1 -1
  95. package/web/.next/server/chunks/ssr/_8dacd1e7._.js.map +1 -1
  96. package/web/.next/server/chunks/ssr/_cc77a143._.js +1 -1
  97. package/web/.next/server/chunks/ssr/_cc77a143._.js.map +1 -1
  98. package/web/.next/server/chunks/ssr/{_2d99d729._.js → _d1f30f92._.js} +2 -2
  99. package/web/.next/server/chunks/ssr/{_2d99d729._.js.map → _d1f30f92._.js.map} +1 -1
  100. package/web/.next/server/chunks/ssr/_df15bd24._.js +1 -1
  101. package/web/.next/server/chunks/ssr/_df15bd24._.js.map +1 -1
  102. package/web/.next/server/chunks/ssr/b1a17_presentation_web_components_features_settings_settings-page-client_tsx_6ed9d5f8._.js +1 -1
  103. package/web/.next/server/chunks/ssr/b1a17_presentation_web_components_features_settings_settings-page-client_tsx_6ed9d5f8._.js.map +1 -1
  104. package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_(dashboard)_page_actions_021a05f2.js +1 -1
  105. package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_(dashboard)_page_actions_021a05f2.js.map +1 -1
  106. package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_skills_page_actions_1fa8042e.js +1 -1
  107. package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_skills_page_actions_1fa8042e.js.map +1 -1
  108. package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_tools_page_actions_24684200.js +1 -1
  109. package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_tools_page_actions_24684200.js.map +1 -1
  110. package/web/.next/server/chunks/ssr/src_presentation_web_c4348b8a._.js +2 -2
  111. package/web/.next/server/chunks/ssr/src_presentation_web_c4348b8a._.js.map +1 -1
  112. package/web/.next/server/chunks/ssr/src_presentation_web_components_bf50c527._.js +1 -1
  113. package/web/.next/server/chunks/ssr/src_presentation_web_components_bf50c527._.js.map +1 -1
  114. package/web/.next/server/chunks/ssr/src_presentation_web_components_de814675._.js +1 -1
  115. package/web/.next/server/chunks/ssr/src_presentation_web_components_de814675._.js.map +1 -1
  116. package/web/.next/server/chunks/ssr/src_presentation_web_components_e599bb8c._.js +1 -1
  117. package/web/.next/server/chunks/ssr/src_presentation_web_components_features_control-center_7ac3562e._.js +1 -1
  118. package/web/.next/server/chunks/ssr/src_presentation_web_components_features_control-center_7ac3562e._.js.map +1 -1
  119. package/web/.next/server/chunks/ssr/src_presentation_web_e4510d10._.js +2 -2
  120. package/web/.next/server/chunks/ssr/src_presentation_web_e4510d10._.js.map +1 -1
  121. package/web/.next/server/pages/500.html +2 -2
  122. package/web/.next/server/server-reference-manifest.js +1 -1
  123. package/web/.next/server/server-reference-manifest.json +28 -28
  124. package/web/.next/static/chunks/{ac678b32f2fb15ec.js → 088ae342d25a9f2f.js} +1 -1
  125. package/web/.next/static/chunks/13a2c308083db2ba.js +1 -0
  126. package/web/.next/static/chunks/{64ae8bc13d9d868a.js → 3d561bf4cd143f14.js} +1 -1
  127. package/web/.next/static/chunks/{0aced9b43d8a5183.js → 4cd38ae655dcea42.js} +2 -2
  128. package/web/.next/static/chunks/{afed1539f03a0f6c.js → 55b9843ce292c385.js} +1 -1
  129. package/web/.next/static/chunks/{798659b83f2c43da.js → 592c56411dcd5f39.js} +1 -1
  130. package/web/.next/static/chunks/61c4d617e4b83d4b.css +1 -0
  131. package/web/.next/static/chunks/{b03ecb3b9c231d32.js → 6c001e5fb847ea80.js} +1 -1
  132. package/web/.next/static/chunks/6eacba1161b05856.js +1 -0
  133. package/web/.next/static/chunks/8ec10587d1c608a2.css +1 -0
  134. package/web/.next/static/chunks/{a4b1fd7daaaaf1d3.js → 92a561ca6f4afc26.js} +1 -1
  135. package/web/.next/static/chunks/{81a329873a9c9771.js → ed4992b543409288.js} +1 -1
  136. package/web/.next/static/chunks/{1c455b0b02ec1950.js → efa77b5d4fa533de.js} +1 -1
  137. package/web/.next/static/chunks/34838846fbea6821.js +0 -1
  138. package/web/.next/static/chunks/82944b1392636c27.css +0 -2
  139. package/web/.next/static/chunks/85ee28a29e053c47.js +0 -1
  140. /package/web/.next/static/{sUAsNxFnF8yzqQ1KGSMAT → jrPq1ExBagcOShBo0AR91}/_buildManifest.js +0 -0
  141. /package/web/.next/static/{sUAsNxFnF8yzqQ1KGSMAT → jrPq1ExBagcOShBo0AR91}/_clientMiddlewareManifest.json +0 -0
  142. /package/web/.next/static/{sUAsNxFnF8yzqQ1KGSMAT → jrPq1ExBagcOShBo0AR91}/_ssgManifest.js +0 -0
@@ -132,7 +132,7 @@ function LifecycleEventRow({ timing, message, attachments, }) {
132
132
  if (!event)
133
133
  return null;
134
134
  const hasAttachments = attachments && attachments.length > 0;
135
- return (_jsxs("div", { className: `text-xs ${event.colorClass}`, children: [_jsx("span", { children: event.label }), message || hasAttachments ? (_jsxs("div", { "data-testid": "rejection-feedback-container", className: "mt-1 ml-2 max-h-[120px] overflow-y-auto", children: [message ? (_jsxs("span", { "data-testid": "rejection-feedback-text", className: "text-muted-foreground font-normal italic", children: ["\u2014 ", message] })) : null, hasAttachments ? (_jsx("div", { "data-testid": "rejection-feedback-attachments", className: "mt-1.5", children: _jsx(InlineAttachments, { text: "", attachmentPaths: attachments }) })) : null] })) : null] }));
135
+ return (_jsxs("div", { className: `text-xs ${event.colorClass}`, children: [_jsx("span", { children: event.label }), message ? (_jsxs("span", { "data-testid": "rejection-feedback-text", className: "text-muted-foreground ml-2 font-normal italic", children: ["\u2014 ", message] })) : null, hasAttachments ? (_jsx("div", { "data-testid": "rejection-feedback-attachments", className: "mt-1.5 ml-2", children: _jsx(InlineAttachments, { text: "", attachmentPaths: attachments }) })) : null] }));
136
136
  }
137
137
  function NodeTimingRow({ timing, maxDurationMs, }) {
138
138
  const label = timing.phase.includes(':')
@@ -25,8 +25,6 @@ export declare const WithRejection: Story;
25
25
  * Iteration 4: rejected("screenshots broken...") — synthetic
26
26
  */
27
27
  export declare const MultipleRejections: Story;
28
- /** Long rejection text — demonstrates scrollbar for lengthy feedback. */
29
- export declare const LongRejectionText: Story;
30
28
  /** Approval wait indicators — phases with approval wait sub-rows. */
31
29
  export declare const WithApprovalWaits: Story;
32
30
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"activity-tab.stories.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/common/feature-drawer-tabs/activity-tab.stories.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AACvD,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAG7C,QAAA,MAAM,IAAI,EAAE,IAAI,CAAC,OAAO,WAAW,CAclC,CAAC;AAEF,eAAe,IAAI,CAAC;AACpB,KAAK,KAAK,GAAG,QAAQ,CAAC,OAAO,WAAW,CAAC,CAAC;AAmK1C,2EAA2E;AAC3E,eAAO,MAAM,OAAO,EAAE,KAMrB,CAAC;AAEF,uDAAuD;AACvD,eAAO,MAAM,YAAY,EAAE,KAM1B,CAAC;AAEF,kEAAkE;AAClE,eAAO,MAAM,YAAY,EAAE,KAM1B,CAAC;AAEF,qEAAqE;AACrE,eAAO,MAAM,OAAO,EAAE,KAMrB,CAAC;AAEF,8CAA8C;AAC9C,eAAO,MAAM,KAAK,EAAE,KAMnB,CAAC;AAEF,0CAA0C;AAC1C,eAAO,MAAM,KAAK,EAAE,KAMnB,CAAC;AAEF,0EAA0E;AAC1E,eAAO,MAAM,aAAa,EAAE,KAsE3B,CAAC;AAEF;;;;;;GAMG;AACH,eAAO,MAAM,kBAAkB,EAAE,KAwEhC,CAAC;AAEF,yEAAyE;AACzE,eAAO,MAAM,iBAAiB,EAAE,KA0D/B,CAAC;AAEF,qEAAqE;AACrE,eAAO,MAAM,iBAAiB,EAAE,KAgC/B,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,aAAa,EAAE,KAiI3B,CAAC"}
1
+ {"version":3,"file":"activity-tab.stories.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/common/feature-drawer-tabs/activity-tab.stories.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AACvD,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAG7C,QAAA,MAAM,IAAI,EAAE,IAAI,CAAC,OAAO,WAAW,CAclC,CAAC;AAEF,eAAe,IAAI,CAAC;AACpB,KAAK,KAAK,GAAG,QAAQ,CAAC,OAAO,WAAW,CAAC,CAAC;AAmK1C,2EAA2E;AAC3E,eAAO,MAAM,OAAO,EAAE,KAMrB,CAAC;AAEF,uDAAuD;AACvD,eAAO,MAAM,YAAY,EAAE,KAM1B,CAAC;AAEF,kEAAkE;AAClE,eAAO,MAAM,YAAY,EAAE,KAM1B,CAAC;AAEF,qEAAqE;AACrE,eAAO,MAAM,OAAO,EAAE,KAMrB,CAAC;AAEF,8CAA8C;AAC9C,eAAO,MAAM,KAAK,EAAE,KAMnB,CAAC;AAEF,0CAA0C;AAC1C,eAAO,MAAM,KAAK,EAAE,KAMnB,CAAC;AAEF,0EAA0E;AAC1E,eAAO,MAAM,aAAa,EAAE,KAsE3B,CAAC;AAEF;;;;;;GAMG;AACH,eAAO,MAAM,kBAAkB,EAAE,KAwEhC,CAAC;AAEF,qEAAqE;AACrE,eAAO,MAAM,iBAAiB,EAAE,KAgC/B,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,aAAa,EAAE,KAiI3B,CAAC"}
@@ -367,65 +367,6 @@ export const MultipleRejections = {
367
367
  error: null,
368
368
  },
369
369
  };
370
- /** Long rejection text — demonstrates scrollbar for lengthy feedback. */
371
- export const LongRejectionText = {
372
- args: {
373
- timings: [
374
- {
375
- agentRunId: 'run-1',
376
- phase: 'run:started',
377
- startedAt: '2025-01-15T10:00:00Z',
378
- durationMs: 0,
379
- },
380
- {
381
- agentRunId: 'run-1',
382
- phase: 'implement',
383
- startedAt: '2025-01-15T10:00:01Z',
384
- completedAt: '2025-01-15T10:10:00Z',
385
- durationMs: 600000,
386
- },
387
- {
388
- agentRunId: 'run-1',
389
- phase: 'run:rejected',
390
- startedAt: '2025-01-15T10:10:00Z',
391
- durationMs: 0,
392
- },
393
- {
394
- agentRunId: 'run-1',
395
- phase: 'run:resumed',
396
- startedAt: '2025-01-15T10:15:00Z',
397
- durationMs: 0,
398
- },
399
- {
400
- agentRunId: 'run-1',
401
- phase: 'implement',
402
- startedAt: '2025-01-15T10:15:01Z',
403
- completedAt: '2025-01-15T10:25:00Z',
404
- durationMs: 599000,
405
- },
406
- {
407
- agentRunId: 'run-1',
408
- phase: 'run:completed',
409
- startedAt: '2025-01-15T10:25:00Z',
410
- durationMs: 0,
411
- },
412
- ],
413
- rejectionFeedback: [
414
- {
415
- iteration: 1,
416
- message: 'The implementation has several issues that need to be addressed before we can proceed:\n\n' +
417
- '1. The authentication middleware is not properly validating JWT tokens — it accepts expired tokens without checking the exp claim.\n\n' +
418
- '2. The database migration script is missing a rollback strategy. If the migration fails halfway through, we need to be able to revert to the previous schema state.\n\n' +
419
- '3. The error handling in the API endpoints is inconsistent — some endpoints return structured error objects while others return plain text messages.\n\n' +
420
- '4. The test coverage for the new user service is below 80%. We need tests for the edge cases: duplicate email registration, password reset with expired tokens, and concurrent session handling.\n\n' +
421
- '5. The CI pipeline configuration needs to include the new integration test suite. Currently only unit tests are running in the PR checks.',
422
- phase: 'implement',
423
- },
424
- ],
425
- loading: false,
426
- error: null,
427
- },
428
- };
429
370
  /** Approval wait indicators — phases with approval wait sub-rows. */
430
371
  export const WithApprovalWaits = {
431
372
  args: {
@@ -11,6 +11,8 @@ export interface RepositoryNodeData {
11
11
  onAdd?: () => void;
12
12
  onDelete?: (repositoryId: string) => void;
13
13
  showHandles?: boolean;
14
+ /** When true, the "+" add-feature button shows a pulse attention animation. */
15
+ pulseAdd?: boolean;
14
16
  }
15
17
  export type RepositoryNodeType = Node<RepositoryNodeData, 'repositoryNode'>;
16
18
  //# sourceMappingURL=repository-node-config.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"repository-node-config.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/common/repository-node/repository-node-config.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,eAAe,CAAC;AAE1C,MAAM,WAAW,kBAAkB;IACjC,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;IACvB,qEAAqE;IACrE,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,0CAA0C;IAC1C,IAAI,EAAE,MAAM,CAAC;IACb,uEAAuE;IACvE,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IACrB,KAAK,CAAC,EAAE,MAAM,IAAI,CAAC;IACnB,QAAQ,CAAC,EAAE,CAAC,YAAY,EAAE,MAAM,KAAK,IAAI,CAAC;IAC1C,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB;AAED,MAAM,MAAM,kBAAkB,GAAG,IAAI,CAAC,kBAAkB,EAAE,gBAAgB,CAAC,CAAC"}
1
+ {"version":3,"file":"repository-node-config.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/common/repository-node/repository-node-config.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,eAAe,CAAC;AAE1C,MAAM,WAAW,kBAAkB;IACjC,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;IACvB,qEAAqE;IACrE,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,0CAA0C;IAC1C,IAAI,EAAE,MAAM,CAAC;IACb,uEAAuE;IACvE,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IACrB,KAAK,CAAC,EAAE,MAAM,IAAI,CAAC;IACnB,QAAQ,CAAC,EAAE,CAAC,YAAY,EAAE,MAAM,KAAK,IAAI,CAAC;IAC1C,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,+EAA+E;IAC/E,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED,MAAM,MAAM,kBAAkB,GAAG,IAAI,CAAC,kBAAkB,EAAE,gBAAgB,CAAC,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"repository-node.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/common/repository-node/repository-node.tsx"],"names":[],"mappings":"AAqBA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AAGnE,wBAAgB,cAAc,CAAC,EAAE,IAAI,EAAE,EAAE;IAAE,IAAI,EAAE,kBAAkB,CAAC;IAAC,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAA;CAAE,2CA8O5F"}
1
+ {"version":3,"file":"repository-node.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/common/repository-node/repository-node.tsx"],"names":[],"mappings":"AAqBA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AAGnE,wBAAgB,cAAc,CAAC,EAAE,IAAI,EAAE,EAAE;IAAE,IAAI,EAAE,kBAAkB,CAAC;IAAC,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAA;CAAE,2CAkP5F"}
@@ -42,5 +42,6 @@ export function RepositoryNode({ data }) {
42
42
  }, className: "nodrag bg-card flex min-w-[18rem] cursor-pointer items-center gap-3 rounded-full border px-4 py-3 shadow-sm", children: [_jsx(Github, { className: "text-muted-foreground h-5 w-5 shrink-0" }), _jsx("span", { "data-testid": "repository-node-name", className: "min-w-0 truncate text-sm font-medium", children: data.name }), _jsxs("div", { className: cn('flex shrink-0 items-center gap-2', (data.repositoryPath ?? data.onAdd) && 'ml-auto'), onClick: (e) => e.stopPropagation(), children: [data.repositoryPath ? (_jsxs(_Fragment, { children: [_jsx(TooltipProvider, { children: _jsxs(Tooltip, { children: [_jsx(TooltipTrigger, { asChild: true, children: _jsx("span", { className: "flex items-center", children: _jsx(ActionButton, { label: "Open in IDE", onClick: actions.openInIde, loading: actions.ideLoading, error: !!actions.ideError, icon: Code2, iconOnly: true, variant: "ghost", size: "icon-xs" }) }) }), _jsx(TooltipContent, { children: "Open in IDE" })] }) }), _jsx(TooltipProvider, { children: _jsxs(Tooltip, { children: [_jsx(TooltipTrigger, { asChild: true, children: _jsx("span", { className: "flex items-center", children: _jsx(ActionButton, { label: "Open in Shell", onClick: actions.openInShell, loading: actions.shellLoading, error: !!actions.shellError, icon: Terminal, iconOnly: true, variant: "ghost", size: "icon-xs" }) }) }), _jsx(TooltipContent, { children: "Open in Shell" })] }) }), _jsx(TooltipProvider, { children: _jsxs(Tooltip, { children: [_jsx(TooltipTrigger, { asChild: true, children: _jsx("span", { className: "flex items-center", children: _jsx(ActionButton, { label: "Open Folder", onClick: actions.openFolder, loading: actions.folderLoading, error: !!actions.folderError, icon: FolderOpen, iconOnly: true, variant: "ghost", size: "icon-xs" }) }) }), _jsx(TooltipContent, { children: "Open Folder" })] }) }), featureFlags.envDeploy ? (_jsxs(_Fragment, { children: [_jsx(TooltipProvider, { children: _jsxs(Tooltip, { children: [_jsx(TooltipTrigger, { asChild: true, children: _jsx("span", { className: "flex items-center", children: _jsx(ActionButton, { label: isDeploymentActive ? 'Stop Dev Server' : 'Start Dev Server', onClick: isDeploymentActive ? deployAction.stop : deployAction.deploy, loading: deployAction.deployLoading || deployAction.stopLoading, error: !!deployAction.deployError, icon: isDeploymentActive ? Square : Play, iconOnly: true, variant: "ghost", size: "icon-xs" }) }) }), _jsx(TooltipContent, { children: isDeploymentActive ? 'Stop Dev Server' : 'Start Dev Server' })] }) }), isDeploymentActive ? (_jsx(DeploymentStatusBadge, { status: deployAction.status, url: deployAction.url, targetId: data.repositoryPath })) : null] })) : null] })) : null, data.onAdd ? (_jsx(TooltipProvider, { children: _jsxs(Tooltip, { children: [_jsx(TooltipTrigger, { asChild: true, children: _jsx("button", { "aria-label": "Add feature", "data-testid": "repository-node-add-button", onClick: (e) => {
43
43
  e.stopPropagation();
44
44
  data.onAdd?.();
45
- }, className: "text-muted-foreground hover:bg-accent dark:hover:bg-accent/50 flex h-6 w-6 shrink-0 cursor-pointer items-center justify-center rounded-full transition-colors hover:text-blue-500", children: _jsx(Plus, { className: "h-3.5 w-3.5" }) }) }), _jsx(TooltipContent, { children: "Add feature" })] }) })) : null] })] }), data.onAdd || data.showHandles ? (_jsx(Handle, { type: "source", position: Position.Right, isConnectable: !data.showHandles, className: "opacity-0!" })) : null] }));
45
+ }, className: cn('text-muted-foreground hover:bg-accent dark:hover:bg-accent/50 flex h-6 w-6 shrink-0 cursor-pointer items-center justify-center rounded-full transition-colors hover:text-blue-500', data.pulseAdd &&
46
+ 'animate-pulse-cta bg-blue-100 text-blue-500 dark:bg-blue-900/40'), children: _jsx(Plus, { className: "h-3.5 w-3.5" }) }) }), _jsx(TooltipContent, { children: "Add feature" })] }) })) : null] })] }), data.onAdd || data.showHandles ? (_jsx(Handle, { type: "source", position: Position.Right, isConnectable: !data.showHandles, className: "opacity-0!" })) : null] }));
46
47
  }
@@ -9,6 +9,7 @@ export declare const WithHandles: Story;
9
9
  export declare const LongName: Story;
10
10
  export declare const Multiple: Story;
11
11
  export declare const MultipleWithButton: Story;
12
+ export declare const WithPulseAdd: Story;
12
13
  export declare const WithActions: Story;
13
14
  export declare const WithActionsAndAddButton: Story;
14
15
  export declare const WithDeleteButton: Story;
@@ -1 +1 @@
1
- {"version":3,"file":"repository-node.stories.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/common/repository-node/repository-node.stories.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAGvD,OAAO,KAAK,EAAE,kBAAkB,EAAsB,MAAM,0BAA0B,CAAC;AAgCvF,QAAA,MAAM,IAAI,EAAE,IAAI,CAAC,kBAAkB,CASlC,CAAC;AAEF,eAAe,IAAI,CAAC;AACpB,KAAK,KAAK,GAAG,QAAQ,CAAC,kBAAkB,CAAC,CAAC;AAE1C,eAAO,MAAM,OAAO,EAAE,KAErB,CAAC;AAEF,eAAO,MAAM,aAAa,EAAE,KAK3B,CAAC;AAEF,eAAO,MAAM,WAAW,EAAE,KAKzB,CAAC;AAEF,eAAO,MAAM,QAAQ,EAAE,KAKtB,CAAC;AAWF,eAAO,MAAM,QAAQ,EAAE,KAwBtB,CAAC;AASF,eAAO,MAAM,kBAAkB,EAAE,KAwBhC,CAAC;AAEF,eAAO,MAAM,WAAW,EAAE,KAKzB,CAAC;AAEF,eAAO,MAAM,uBAAuB,EAAE,KAQrC,CAAC;AAIF,eAAO,MAAM,gBAAgB,EAAE,KAS9B,CAAC;AA2BF,eAAO,MAAM,mBAAmB,EAAE,KAwBjC,CAAC"}
1
+ {"version":3,"file":"repository-node.stories.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/common/repository-node/repository-node.stories.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAGvD,OAAO,KAAK,EAAE,kBAAkB,EAAsB,MAAM,0BAA0B,CAAC;AAgCvF,QAAA,MAAM,IAAI,EAAE,IAAI,CAAC,kBAAkB,CASlC,CAAC;AAEF,eAAe,IAAI,CAAC;AACpB,KAAK,KAAK,GAAG,QAAQ,CAAC,kBAAkB,CAAC,CAAC;AAE1C,eAAO,MAAM,OAAO,EAAE,KAErB,CAAC;AAEF,eAAO,MAAM,aAAa,EAAE,KAK3B,CAAC;AAEF,eAAO,MAAM,WAAW,EAAE,KAKzB,CAAC;AAEF,eAAO,MAAM,QAAQ,EAAE,KAKtB,CAAC;AAWF,eAAO,MAAM,QAAQ,EAAE,KAwBtB,CAAC;AASF,eAAO,MAAM,kBAAkB,EAAE,KAwBhC,CAAC;AAEF,eAAO,MAAM,YAAY,EAAE,KAS1B,CAAC;AAEF,eAAO,MAAM,WAAW,EAAE,KAKzB,CAAC;AAEF,eAAO,MAAM,uBAAuB,EAAE,KAQrC,CAAC;AAIF,eAAO,MAAM,gBAAgB,EAAE,KAS9B,CAAC;AA2BF,eAAO,MAAM,mBAAmB,EAAE,KAwBjC,CAAC"}
@@ -74,6 +74,16 @@ export const MultipleWithButton = {
74
74
  return (_jsx("div", { style: { width: 500, height: 500 }, children: _jsx(ReactFlowProvider, { children: _jsx(ReactFlow, { nodes: nodes, nodeTypes: nodeTypes, nodesDraggable: false, nodesConnectable: false, proOptions: { hideAttribution: true }, fitView: true }) }) }));
75
75
  },
76
76
  };
77
+ export const WithPulseAdd = {
78
+ args: {
79
+ repositoryPath: '/home/user/shep-ai/cli',
80
+ pulseAdd: true,
81
+ },
82
+ argTypes: {
83
+ onAdd: { action: 'onAdd' },
84
+ },
85
+ render: (args) => _jsx(RepositoryNodeCanvas, { data: args }),
86
+ };
77
87
  export const WithActions = {
78
88
  args: {
79
89
  repositoryPath: '/home/user/shep-ai/cli',
@@ -1 +1 @@
1
- {"version":3,"file":"control-center-inner.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/features/control-center/control-center-inner.tsx"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,IAAI,EAAY,MAAM,eAAe,CAAC;AAGpD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,uCAAuC,CAAC;AAsB5E,UAAU,uBAAuB;IAC/B,YAAY,EAAE,cAAc,EAAE,CAAC;IAC/B,YAAY,EAAE,IAAI,EAAE,CAAC;CACtB;AAED,wBAAgB,kBAAkB,CAAC,EAAE,YAAY,EAAE,YAAY,EAAE,EAAE,uBAAuB,2CA2QzF"}
1
+ {"version":3,"file":"control-center-inner.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/features/control-center/control-center-inner.tsx"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,IAAI,EAAY,MAAM,eAAe,CAAC;AAGpD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,uCAAuC,CAAC;AAsB5E,UAAU,uBAAuB;IAC/B,YAAY,EAAE,cAAc,EAAE,CAAC;IAC/B,YAAY,EAAE,IAAI,EAAE,CAAC;CACtB;AAED,wBAAgB,kBAAkB,CAAC,EAAE,YAAY,EAAE,YAAY,EAAE,EAAE,uBAAuB,2CA0RzF"}
@@ -190,8 +190,19 @@ export function ControlCenterInner({ initialNodes, initialEdges }) {
190
190
  handleViewportChange(viewport);
191
191
  }, [handleViewportChange]);
192
192
  const hasRepositories = nodes.some((n) => n.type === 'repositoryNode');
193
+ // Pulse the "+" button when there's a single repo with no features and the
194
+ // create-feature drawer is not open — draws attention to the next action.
195
+ const isCreateDrawerOpen = pathname.startsWith('/create');
196
+ const displayNodes = useMemo(() => {
197
+ const repoNodes = nodes.filter((n) => n.type === 'repositoryNode');
198
+ const hasFeatures = nodes.some((n) => n.type === 'featureNode');
199
+ const shouldPulse = repoNodes.length === 1 && !hasFeatures && !isCreateDrawerOpen;
200
+ if (!shouldPulse)
201
+ return nodes;
202
+ return nodes.map((n) => n.type === 'repositoryNode' ? { ...n, data: { ...n.data, pulseAdd: true } } : n);
203
+ }, [nodes, isCreateDrawerOpen]);
193
204
  if (!hasRepositories) {
194
205
  return _jsx(ControlCenterEmptyState, { onRepositorySelect: handleAddRepository });
195
206
  }
196
- return (_jsx(FeaturesCanvas, { nodes: nodes, edges: edges, selectedFeatureId: selectedFeatureId, defaultViewport: defaultViewport, onNodesChange: onNodesChange, onConnect: handleConnect, onAddFeature: handleAddFeature, onNodeClick: handleNodeClick, onPaneClick: handleClearDrawers, onMoveEnd: handleMoveEnd, onResetViewport: resetViewport, emptyState: _jsx(ControlCenterEmptyState, { onRepositorySelect: handleAddRepository }) }));
207
+ return (_jsx(FeaturesCanvas, { nodes: displayNodes, edges: edges, selectedFeatureId: selectedFeatureId, defaultViewport: defaultViewport, onNodesChange: onNodesChange, onConnect: handleConnect, onAddFeature: handleAddFeature, onNodeClick: handleNodeClick, onPaneClick: handleClearDrawers, onMoveEnd: handleMoveEnd, onResetViewport: resetViewport, emptyState: _jsx(ControlCenterEmptyState, { onRepositorySelect: handleAddRepository }) }));
197
208
  }