@shepai/cli 1.91.2 → 1.92.0-pr276.26d34ae
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.
- package/dist/packages/core/src/application/ports/output/agents/agent-registry.interface.d.ts +1 -1
- package/dist/packages/core/src/application/ports/output/agents/agent-registry.interface.d.ts.map +1 -1
- package/dist/packages/core/src/application/use-cases/agents/run-agent.use-case.js +2 -2
- package/dist/packages/core/src/infrastructure/di/container.d.ts.map +1 -1
- package/dist/packages/core/src/infrastructure/di/container.js +24 -8
- package/dist/packages/core/src/infrastructure/services/agents/common/agent-registry.service.d.ts +3 -1
- package/dist/packages/core/src/infrastructure/services/agents/common/agent-registry.service.d.ts.map +1 -1
- package/dist/packages/core/src/infrastructure/services/agents/common/agent-registry.service.js +43 -11
- package/dist/packages/core/src/infrastructure/services/agents/common/agent-runner.service.d.ts +1 -3
- package/dist/packages/core/src/infrastructure/services/agents/common/agent-runner.service.d.ts.map +1 -1
- package/dist/packages/core/src/infrastructure/services/agents/common/agent-runner.service.js +19 -6
- package/dist/packages/core/src/infrastructure/services/version.service.d.ts.map +1 -1
- package/dist/packages/core/src/infrastructure/services/version.service.js +2 -0
- package/dist/src/presentation/cli/index.js +2 -1
- package/dist/src/presentation/web/app/actions/get-feature-phase-timings.d.ts +1 -0
- package/dist/src/presentation/web/app/actions/get-feature-phase-timings.d.ts.map +1 -1
- package/dist/src/presentation/web/app/actions/get-feature-phase-timings.js +1 -0
- package/dist/src/presentation/web/components/common/drawer-action-bar/drawer-action-bar.js +1 -1
- package/dist/src/presentation/web/components/common/feature-drawer-tabs/activity-tab.d.ts +29 -0
- package/dist/src/presentation/web/components/common/feature-drawer-tabs/activity-tab.d.ts.map +1 -1
- package/dist/src/presentation/web/components/common/feature-drawer-tabs/activity-tab.js +79 -37
- package/dist/src/presentation/web/components/common/feature-drawer-tabs/activity-tab.stories.d.ts +13 -0
- package/dist/src/presentation/web/components/common/feature-drawer-tabs/activity-tab.stories.d.ts.map +1 -1
- package/dist/src/presentation/web/components/common/feature-drawer-tabs/activity-tab.stories.js +213 -0
- package/dist/src/presentation/web/components/common/index.d.ts +1 -0
- package/dist/src/presentation/web/components/common/index.d.ts.map +1 -1
- package/dist/src/presentation/web/components/common/index.js +1 -0
- package/dist/src/presentation/web/components/common/reject-feedback-dialog/reject-feedback-dialog.d.ts.map +1 -1
- package/dist/src/presentation/web/components/common/reject-feedback-dialog/reject-feedback-dialog.js +1 -1
- package/dist/src/presentation/web/components/common/shep-logo/shep-logo.d.ts +2 -1
- package/dist/src/presentation/web/components/common/shep-logo/shep-logo.d.ts.map +1 -1
- package/dist/src/presentation/web/components/common/shep-logo/shep-logo.js +2 -2
- package/dist/src/presentation/web/components/common/shep-logo/shep-logo.stories.d.ts +1 -0
- package/dist/src/presentation/web/components/common/shep-logo/shep-logo.stories.d.ts.map +1 -1
- package/dist/src/presentation/web/components/common/shep-logo/shep-logo.stories.js +5 -0
- package/dist/src/presentation/web/components/common/version-badge/index.d.ts +3 -0
- package/dist/src/presentation/web/components/common/version-badge/index.d.ts.map +1 -0
- package/dist/src/presentation/web/components/common/version-badge/index.js +1 -0
- package/dist/src/presentation/web/components/common/version-badge/version-badge.d.ts +11 -0
- package/dist/src/presentation/web/components/common/version-badge/version-badge.d.ts.map +1 -0
- package/dist/src/presentation/web/components/common/version-badge/version-badge.js +17 -0
- package/dist/src/presentation/web/components/common/version-badge/version-badge.stories.d.ts +14 -0
- package/dist/src/presentation/web/components/common/version-badge/version-badge.stories.d.ts.map +1 -0
- package/dist/src/presentation/web/components/common/version-badge/version-badge.stories.js +48 -0
- package/dist/src/presentation/web/components/layouts/app-sidebar/app-sidebar.d.ts +3 -1
- package/dist/src/presentation/web/components/layouts/app-sidebar/app-sidebar.d.ts.map +1 -1
- package/dist/src/presentation/web/components/layouts/app-sidebar/app-sidebar.js +4 -3
- package/dist/src/presentation/web/components/layouts/app-sidebar/app-sidebar.stories.d.ts +1 -0
- package/dist/src/presentation/web/components/layouts/app-sidebar/app-sidebar.stories.d.ts.map +1 -1
- package/dist/src/presentation/web/components/layouts/app-sidebar/app-sidebar.stories.js +6 -0
- package/dist/src/presentation/web/lib/version.d.ts +2 -0
- package/dist/src/presentation/web/lib/version.d.ts.map +1 -1
- package/dist/src/presentation/web/lib/version.js +2 -0
- package/dist/src/presentation/web/next.config.d.ts.map +1 -1
- package/dist/src/presentation/web/next.config.js +13 -0
- package/dist/tsconfig.build.tsbuildinfo +1 -1
- package/package.json +1 -1
- package/web/.next/BUILD_ID +1 -1
- package/web/.next/build-manifest.json +2 -2
- package/web/.next/fallback-build-manifest.json +2 -2
- package/web/.next/prerender-manifest.json +3 -3
- package/web/.next/required-server-files.js +5 -2
- package/web/.next/required-server-files.json +5 -2
- package/web/.next/server/app/(dashboard)/@drawer/create/page/server-reference-manifest.json +18 -18
- package/web/.next/server/app/(dashboard)/@drawer/create/page.js.nft.json +1 -1
- package/web/.next/server/app/(dashboard)/@drawer/create/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/[tab]/page/server-reference-manifest.json +21 -21
- package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/[tab]/page.js.nft.json +1 -1
- package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/[tab]/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/page/server-reference-manifest.json +21 -21
- package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/page.js.nft.json +1 -1
- package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/page/server-reference-manifest.json +14 -14
- package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/page.js.nft.json +1 -1
- package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/(dashboard)/create/page/server-reference-manifest.json +18 -18
- package/web/.next/server/app/(dashboard)/create/page.js.nft.json +1 -1
- package/web/.next/server/app/(dashboard)/create/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/(dashboard)/feature/[featureId]/[tab]/page/server-reference-manifest.json +21 -21
- package/web/.next/server/app/(dashboard)/feature/[featureId]/[tab]/page.js.nft.json +1 -1
- package/web/.next/server/app/(dashboard)/feature/[featureId]/[tab]/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/(dashboard)/feature/[featureId]/page/server-reference-manifest.json +21 -21
- package/web/.next/server/app/(dashboard)/feature/[featureId]/page.js.nft.json +1 -1
- package/web/.next/server/app/(dashboard)/feature/[featureId]/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/(dashboard)/page/server-reference-manifest.json +14 -14
- package/web/.next/server/app/(dashboard)/page.js.nft.json +1 -1
- package/web/.next/server/app/(dashboard)/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/(dashboard)/repository/[repositoryId]/page/server-reference-manifest.json +14 -14
- package/web/.next/server/app/(dashboard)/repository/[repositoryId]/page.js.nft.json +1 -1
- package/web/.next/server/app/(dashboard)/repository/[repositoryId]/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/_global-error.html +2 -2
- package/web/.next/server/app/_global-error.rsc +1 -1
- package/web/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +1 -1
- package/web/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
- package/web/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
- package/web/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
- package/web/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
- package/web/.next/server/app/_not-found/page/server-reference-manifest.json +1 -1
- package/web/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/api/attachments/preview/route.js.nft.json +1 -1
- package/web/.next/server/app/settings/page/server-reference-manifest.json +5 -5
- package/web/.next/server/app/settings/page.js.nft.json +1 -1
- package/web/.next/server/app/settings/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/skills/page/server-reference-manifest.json +6 -6
- package/web/.next/server/app/skills/page.js.nft.json +1 -1
- package/web/.next/server/app/skills/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/tools/page/server-reference-manifest.json +6 -6
- package/web/.next/server/app/tools/page.js.nft.json +1 -1
- package/web/.next/server/app/tools/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/version/page/server-reference-manifest.json +1 -1
- package/web/.next/server/app/version/page_client-reference-manifest.js +1 -1
- package/web/.next/server/chunks/ssr/744ca_web_components_common_control-center-drawer_create-drawer-client_tsx_5e26fc0a._.js +1 -1
- package/web/.next/server/chunks/ssr/744ca_web_components_common_control-center-drawer_create-drawer-client_tsx_5e26fc0a._.js.map +1 -1
- package/web/.next/server/chunks/ssr/8ba4b_server_app_(dashboard)_@drawer_repository_[repositoryId]_page_actions_da7eef33.js +1 -1
- package/web/.next/server/chunks/ssr/8ba4b_server_app_(dashboard)_@drawer_repository_[repositoryId]_page_actions_da7eef33.js.map +1 -1
- package/web/.next/server/chunks/ssr/8ba4b_server_app_(dashboard)_repository_[repositoryId]_page_actions_0a9251aa.js +1 -1
- package/web/.next/server/chunks/ssr/8ba4b_server_app_(dashboard)_repository_[repositoryId]_page_actions_0a9251aa.js.map +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__11033878._.js +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__11033878._.js.map +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__17143953._.js +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__17143953._.js.map +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__357d99f9._.js +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__357d99f9._.js.map +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__45aad79d._.js +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__45aad79d._.js.map +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__4be9a9bb._.js +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__5cc4752a._.js +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__5cc4752a._.js.map +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__5d87af2e._.js +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__89e8a5cc._.js +2 -2
- package/web/.next/server/chunks/ssr/[root-of-the-server]__9de266fa._.js +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__9de266fa._.js.map +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__aad040c0._.js +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__aad040c0._.js.map +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__e630cc47._.js +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__e630cc47._.js.map +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__fdc75809._.js +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__fdc75809._.js.map +1 -1
- package/web/.next/server/chunks/ssr/_135edb9c._.js +1 -1
- package/web/.next/server/chunks/ssr/_135edb9c._.js.map +1 -1
- package/web/.next/server/chunks/ssr/_21c75883._.js +1 -1
- package/web/.next/server/chunks/ssr/_21c75883._.js.map +1 -1
- package/web/.next/server/chunks/ssr/_8dacd1e7._.js +1 -1
- package/web/.next/server/chunks/ssr/_8dacd1e7._.js.map +1 -1
- package/web/.next/server/chunks/ssr/{_c7cbaa5a._.js → _9c5ebc04._.js} +2 -2
- package/web/.next/server/chunks/ssr/{_c7cbaa5a._.js.map → _9c5ebc04._.js.map} +1 -1
- package/web/.next/server/chunks/ssr/_cc77a143._.js +1 -1
- package/web/.next/server/chunks/ssr/_cc77a143._.js.map +1 -1
- package/web/.next/server/chunks/ssr/b1a17_presentation_web_components_features_settings_settings-page-client_tsx_6ed9d5f8._.js +1 -1
- package/web/.next/server/chunks/ssr/b1a17_presentation_web_components_features_settings_settings-page-client_tsx_6ed9d5f8._.js.map +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_(dashboard)_page_actions_021a05f2.js +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_(dashboard)_page_actions_021a05f2.js.map +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_skills_page_actions_1fa8042e.js +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_skills_page_actions_1fa8042e.js.map +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_tools_page_actions_24684200.js +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_tools_page_actions_24684200.js.map +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web_c4348b8a._.js +2 -2
- package/web/.next/server/chunks/ssr/src_presentation_web_c4348b8a._.js.map +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web_components_bf50c527._.js +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web_components_bf50c527._.js.map +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web_components_de814675._.js +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web_components_de814675._.js.map +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web_components_e599bb8c._.js +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web_components_e599bb8c._.js.map +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web_components_features_control-center_7ac3562e._.js +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web_components_features_control-center_7ac3562e._.js.map +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web_e4510d10._.js +2 -2
- package/web/.next/server/chunks/ssr/src_presentation_web_e4510d10._.js.map +1 -1
- package/web/.next/server/pages/500.html +2 -2
- package/web/.next/server/server-reference-manifest.js +1 -1
- package/web/.next/server/server-reference-manifest.json +28 -28
- package/web/.next/static/chunks/06f1327306769665.js +1 -0
- package/web/.next/static/chunks/{d363ed7ca4c4c725.js → 098076d4683b6875.js} +1 -1
- package/web/.next/static/chunks/{49af1c74082ce7a2.js → 1691ecce2741783d.js} +1 -1
- package/web/.next/static/chunks/{28c4e60c725c5bb6.js → 27d329f179de474a.js} +1 -1
- package/web/.next/static/chunks/{21fe7847d6102a65.js → 481fb8eb71b73891.js} +1 -1
- package/web/.next/static/chunks/4f94860011f9fb20.css +2 -0
- package/web/.next/static/chunks/7611343847b49f36.js +1 -0
- package/web/.next/static/chunks/{b42c95e09eda7e6c.js → 78cf5fdf08dccd1a.js} +1 -1
- package/web/.next/static/chunks/{e3d4ce99231716c7.js → 7ff4cbf382acefdb.js} +1 -1
- package/web/.next/static/chunks/{2b9e733e68c3f0ba.js → 8758dc0e994e9dde.js} +1 -1
- package/web/.next/static/chunks/{dae134b822779271.js → a5338523b639e026.js} +1 -1
- package/web/.next/static/chunks/{0f3c293f02cc43ad.js → c242fb15636ad031.js} +1 -1
- package/web/.next/static/chunks/7acc79e599df9890.js +0 -1
- package/web/.next/static/chunks/84792270363aa69b.js +0 -1
- package/web/.next/static/chunks/c54c75d5aa78cdfb.css +0 -2
- /package/web/.next/static/{T5VYcM75qy8yhPRrfIQ8R → 2qtjmTQvEhYk6Nn69v63a}/_buildManifest.js +0 -0
- /package/web/.next/static/{T5VYcM75qy8yhPRrfIQ8R → 2qtjmTQvEhYk6Nn69v63a}/_clientMiddlewareManifest.json +0 -0
- /package/web/.next/static/{T5VYcM75qy8yhPRrfIQ8R → 2qtjmTQvEhYk6Nn69v63a}/_ssgManifest.js +0 -0
package/dist/packages/core/src/application/ports/output/agents/agent-registry.interface.d.ts
CHANGED
|
@@ -80,7 +80,7 @@ export interface IAgentRegistry {
|
|
|
80
80
|
* @param name - The unique agent name (e.g., 'analyze-repository')
|
|
81
81
|
* @returns The agent definition, or undefined if not registered
|
|
82
82
|
*/
|
|
83
|
-
get(name: string): AgentDefinitionWithFactory | undefined
|
|
83
|
+
get(name: string): Promise<AgentDefinitionWithFactory | undefined>;
|
|
84
84
|
/**
|
|
85
85
|
* List all registered agent definitions.
|
|
86
86
|
*
|
package/dist/packages/core/src/application/ports/output/agents/agent-registry.interface.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"agent-registry.interface.d.ts","sourceRoot":"","sources":["../../../../../../../../packages/core/src/application/ports/output/agents/agent-registry.interface.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,wCAAwC,CAAC;AAE9E;;;;;;;GAOG;AACH,MAAM,WAAW,0BAA2B,SAAQ,eAAe;IACjE,4EAA4E;IAE5E,YAAY,EAAE,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,GAAG,CAAC;CACvC;AAED;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,MAAM,WAAW,cAAc;IAC7B;;;;OAIG;IACH,QAAQ,CAAC,UAAU,EAAE,0BAA0B,GAAG,IAAI,CAAC;IAEvD;;;;;OAKG;IACH,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,0BAA0B,GAAG,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"agent-registry.interface.d.ts","sourceRoot":"","sources":["../../../../../../../../packages/core/src/application/ports/output/agents/agent-registry.interface.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,wCAAwC,CAAC;AAE9E;;;;;;;GAOG;AACH,MAAM,WAAW,0BAA2B,SAAQ,eAAe;IACjE,4EAA4E;IAE5E,YAAY,EAAE,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,GAAG,CAAC;CACvC;AAED;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,MAAM,WAAW,cAAc;IAC7B;;;;OAIG;IACH,QAAQ,CAAC,UAAU,EAAE,0BAA0B,GAAG,IAAI,CAAC;IAEvD;;;;;OAKG;IACH,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,0BAA0B,GAAG,SAAS,CAAC,CAAC;IAEnE;;;;OAIG;IACH,IAAI,IAAI,0BAA0B,EAAE,CAAC;CACtC"}
|
|
@@ -45,7 +45,7 @@ let RunAgentUseCase = class RunAgentUseCase {
|
|
|
45
45
|
* @throws Error if the agent name is not registered
|
|
46
46
|
*/
|
|
47
47
|
async execute(input) {
|
|
48
|
-
const definition = this.agentRegistry.get(input.agentName);
|
|
48
|
+
const definition = await this.agentRegistry.get(input.agentName);
|
|
49
49
|
if (!definition) {
|
|
50
50
|
const available = this.agentRegistry.list().map((a) => a.name);
|
|
51
51
|
throw new Error(`Unknown agent: "${input.agentName}". Available agents: ${available.join(', ') || 'none'}`);
|
|
@@ -60,7 +60,7 @@ let RunAgentUseCase = class RunAgentUseCase {
|
|
|
60
60
|
* @throws Error if the agent name is not registered
|
|
61
61
|
*/
|
|
62
62
|
async *executeStream(input) {
|
|
63
|
-
const definition = this.agentRegistry.get(input.agentName);
|
|
63
|
+
const definition = await this.agentRegistry.get(input.agentName);
|
|
64
64
|
if (!definition) {
|
|
65
65
|
const available = this.agentRegistry.list().map((a) => a.name);
|
|
66
66
|
throw new Error(`Unknown agent: "${input.agentName}". Available agents: ${available.join(', ') || 'none'}`);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"container.d.ts","sourceRoot":"","sources":["../../../../../../packages/core/src/infrastructure/di/container.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,kBAAkB,CAAC;AAC1B,OAAO,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;
|
|
1
|
+
{"version":3,"file":"container.d.ts","sourceRoot":"","sources":["../../../../../../packages/core/src/infrastructure/di/container.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,kBAAkB,CAAC;AAC1B,OAAO,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AAgHrC;;;;;;GAMG;AACH,wBAAsB,mBAAmB,IAAI,OAAO,CAAC,OAAO,SAAS,CAAC,CAsSrE;AAED;;;GAGG;AACH,wBAAgB,sBAAsB,IAAI,OAAO,CAEhD;AAED;;;GAGG;AACH,OAAO,EAAE,SAAS,EAAE,CAAC"}
|
|
@@ -19,7 +19,6 @@ import { AgentValidatorService } from '../services/agents/common/agent-validator
|
|
|
19
19
|
import { promisify } from 'node:util';
|
|
20
20
|
import { execFile } from 'node:child_process';
|
|
21
21
|
import { VersionService } from '../services/version.service.js';
|
|
22
|
-
import { WebServerService } from '../services/web-server.service.js';
|
|
23
22
|
import { WorktreeService } from '../services/git/worktree.service.js';
|
|
24
23
|
import { ToolInstallerServiceImpl } from '../services/tool-installer/tool-installer.service.js';
|
|
25
24
|
import { GitPrService } from '../services/git/git-pr.service.js';
|
|
@@ -40,7 +39,6 @@ import { SpecInitializerService } from '../services/spec/spec-initializer.servic
|
|
|
40
39
|
import { DesktopNotifier } from '../services/notifications/desktop-notifier.js';
|
|
41
40
|
import { NotificationService } from '../services/notifications/notification.service.js';
|
|
42
41
|
import { getNotificationBus } from '../services/notifications/notification-bus.js';
|
|
43
|
-
import { createCheckpointer } from '../services/agents/common/checkpointer.js';
|
|
44
42
|
import { spawn } from 'node:child_process';
|
|
45
43
|
// Use cases
|
|
46
44
|
import { InitializeSettingsUseCase } from '../../application/use-cases/settings/initialize-settings.use-case.js';
|
|
@@ -131,8 +129,28 @@ export async function initializeContainer() {
|
|
|
131
129
|
// Register services (singletons via @injectable + token)
|
|
132
130
|
container.registerSingleton('IAgentValidator', AgentValidatorService);
|
|
133
131
|
container.registerSingleton('IVersionService', VersionService);
|
|
132
|
+
// IWebServerService is registered as a lazy proxy to avoid importing `next`
|
|
133
|
+
// (~80ms) for non-web commands. The actual service is loaded on first method call.
|
|
134
134
|
container.register('IWebServerService', {
|
|
135
|
-
useFactory: () =>
|
|
135
|
+
useFactory: () => {
|
|
136
|
+
let instance = null;
|
|
137
|
+
const getInstance = async () => {
|
|
138
|
+
if (!instance) {
|
|
139
|
+
const { WebServerService } = await import('../services/web-server.service.js');
|
|
140
|
+
instance = new WebServerService();
|
|
141
|
+
}
|
|
142
|
+
return instance;
|
|
143
|
+
};
|
|
144
|
+
return new Proxy({}, {
|
|
145
|
+
get: (_target, prop) => {
|
|
146
|
+
return async (...args) => {
|
|
147
|
+
const svc = await getInstance();
|
|
148
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
149
|
+
return svc[prop](...args);
|
|
150
|
+
};
|
|
151
|
+
},
|
|
152
|
+
});
|
|
153
|
+
},
|
|
136
154
|
});
|
|
137
155
|
container.registerSingleton('IWorktreeService', WorktreeService);
|
|
138
156
|
container.registerSingleton('IToolInstallerService', ToolInstallerServiceImpl);
|
|
@@ -189,16 +207,14 @@ export async function initializeContainer() {
|
|
|
189
207
|
container.register('IAgentRegistry', {
|
|
190
208
|
useFactory: () => new AgentRegistryService(),
|
|
191
209
|
});
|
|
192
|
-
container.register('Checkpointer', {
|
|
193
|
-
useFactory: () => createCheckpointer(':memory:'),
|
|
194
|
-
});
|
|
195
210
|
container.register('IAgentRunner', {
|
|
196
211
|
useFactory: (c) => {
|
|
197
212
|
const registry = c.resolve('IAgentRegistry');
|
|
198
213
|
const executorProvider = c.resolve('IAgentExecutorProvider');
|
|
199
|
-
const checkpointer = c.resolve('Checkpointer');
|
|
200
214
|
const runRepository = c.resolve('IAgentRunRepository');
|
|
201
|
-
|
|
215
|
+
// Checkpointer is lazy-loaded to avoid ~240ms startup cost from
|
|
216
|
+
// @langchain/langgraph-checkpoint-sqlite on every CLI invocation.
|
|
217
|
+
return new AgentRunnerService(registry, executorProvider, runRepository);
|
|
202
218
|
},
|
|
203
219
|
});
|
|
204
220
|
container.register('IFeatureAgentProcessService', {
|
package/dist/packages/core/src/infrastructure/services/agents/common/agent-registry.service.d.ts
CHANGED
|
@@ -10,9 +10,11 @@
|
|
|
10
10
|
import type { IAgentRegistry, AgentDefinitionWithFactory } from '../../../../application/ports/output/agents/agent-registry.interface.js';
|
|
11
11
|
export declare class AgentRegistryService implements IAgentRegistry {
|
|
12
12
|
private readonly agents;
|
|
13
|
+
private readonly lazyAgents;
|
|
13
14
|
constructor();
|
|
15
|
+
private resolveLazy;
|
|
14
16
|
register(definition: AgentDefinitionWithFactory): void;
|
|
15
|
-
get(name: string): AgentDefinitionWithFactory | undefined
|
|
17
|
+
get(name: string): Promise<AgentDefinitionWithFactory | undefined>;
|
|
16
18
|
list(): AgentDefinitionWithFactory[];
|
|
17
19
|
}
|
|
18
20
|
//# sourceMappingURL=agent-registry.service.d.ts.map
|
package/dist/packages/core/src/infrastructure/services/agents/common/agent-registry.service.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"agent-registry.service.d.ts","sourceRoot":"","sources":["../../../../../../../../packages/core/src/infrastructure/services/agents/common/agent-registry.service.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EACV,cAAc,EACd,0BAA0B,EAC3B,MAAM,+DAA+D,CAAC;
|
|
1
|
+
{"version":3,"file":"agent-registry.service.d.ts","sourceRoot":"","sources":["../../../../../../../../packages/core/src/infrastructure/services/agents/common/agent-registry.service.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EACV,cAAc,EACd,0BAA0B,EAC3B,MAAM,+DAA+D,CAAC;AAevE,qBAAa,oBAAqB,YAAW,cAAc;IACzD,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAiD;IACxE,OAAO,CAAC,QAAQ,CAAC,UAAU,CAA6B;;YAqB1C,WAAW;IAczB,QAAQ,CAAC,UAAU,EAAE,0BAA0B,GAAG,IAAI;IAIhD,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,0BAA0B,GAAG,SAAS,CAAC;IAMxE,IAAI,IAAI,0BAA0B,EAAE;CAiBrC"}
|
package/dist/packages/core/src/infrastructure/services/agents/common/agent-registry.service.js
CHANGED
|
@@ -7,30 +7,62 @@
|
|
|
7
7
|
*
|
|
8
8
|
* Pre-registers built-in agents (analyze-repository) at construction time.
|
|
9
9
|
*/
|
|
10
|
-
import { createAnalyzeRepositoryGraph } from '../analyze-repo/analyze-repository-graph.js';
|
|
11
|
-
import { createFeatureAgentGraph } from '../feature-agent/feature-agent-graph.js';
|
|
12
10
|
export class AgentRegistryService {
|
|
13
11
|
agents = new Map();
|
|
12
|
+
lazyAgents = [];
|
|
14
13
|
constructor() {
|
|
15
|
-
// Register built-in agents
|
|
16
|
-
|
|
14
|
+
// Register built-in agents as lazy definitions to avoid importing
|
|
15
|
+
// @langchain/langgraph (~300ms) at CLI startup.
|
|
16
|
+
this.lazyAgents.push({
|
|
17
17
|
name: 'analyze-repository',
|
|
18
18
|
description: 'Analyze repository structure, dependencies, and architecture',
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
19
|
+
importFn: () => import('../analyze-repo/analyze-repository-graph.js'),
|
|
20
|
+
factoryExport: 'createAnalyzeRepositoryGraph',
|
|
21
|
+
}, {
|
|
22
22
|
name: 'feature-agent',
|
|
23
23
|
description: 'Autonomous SDLC agent: analyze → requirements → research → plan → implement',
|
|
24
|
-
|
|
24
|
+
importFn: () => import('../feature-agent/feature-agent-graph.js'),
|
|
25
|
+
factoryExport: 'createFeatureAgentGraph',
|
|
25
26
|
});
|
|
26
27
|
}
|
|
28
|
+
async resolveLazy(name) {
|
|
29
|
+
const lazy = this.lazyAgents.find((a) => a.name === name);
|
|
30
|
+
if (!lazy)
|
|
31
|
+
return undefined;
|
|
32
|
+
const mod = await lazy.importFn();
|
|
33
|
+
const definition = {
|
|
34
|
+
name: lazy.name,
|
|
35
|
+
description: lazy.description,
|
|
36
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
37
|
+
graphFactory: mod[lazy.factoryExport],
|
|
38
|
+
};
|
|
39
|
+
this.agents.set(name, definition);
|
|
40
|
+
return definition;
|
|
41
|
+
}
|
|
27
42
|
register(definition) {
|
|
28
43
|
this.agents.set(definition.name, definition);
|
|
29
44
|
}
|
|
30
|
-
get(name) {
|
|
31
|
-
|
|
45
|
+
async get(name) {
|
|
46
|
+
const eager = this.agents.get(name);
|
|
47
|
+
if (eager)
|
|
48
|
+
return eager;
|
|
49
|
+
return this.resolveLazy(name);
|
|
32
50
|
}
|
|
33
51
|
list() {
|
|
34
|
-
|
|
52
|
+
// Returns eagerly-registered + cached placeholder metadata for lazy agents.
|
|
53
|
+
const all = new Map(this.agents);
|
|
54
|
+
for (const lazy of this.lazyAgents) {
|
|
55
|
+
if (!all.has(lazy.name)) {
|
|
56
|
+
lazy.placeholder ??= {
|
|
57
|
+
name: lazy.name,
|
|
58
|
+
description: lazy.description,
|
|
59
|
+
graphFactory: () => {
|
|
60
|
+
throw new Error(`Agent '${lazy.name}' must be resolved via get() before use`);
|
|
61
|
+
},
|
|
62
|
+
};
|
|
63
|
+
all.set(lazy.name, lazy.placeholder);
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
return Array.from(all.values());
|
|
35
67
|
}
|
|
36
68
|
}
|
package/dist/packages/core/src/infrastructure/services/agents/common/agent-runner.service.d.ts
CHANGED
|
@@ -6,7 +6,6 @@
|
|
|
6
6
|
* creating executors, compiling LangGraph workflows, and tracking runs
|
|
7
7
|
* in the repository.
|
|
8
8
|
*/
|
|
9
|
-
import type { BaseCheckpointSaver } from '@langchain/langgraph';
|
|
10
9
|
import type { IAgentRunner, AgentRunOptions } from '../../../../application/ports/output/agents/agent-runner.interface.js';
|
|
11
10
|
import type { IAgentRegistry } from '../../../../application/ports/output/agents/agent-registry.interface.js';
|
|
12
11
|
import type { IAgentExecutorProvider } from '../../../../application/ports/output/agents/agent-executor-provider.interface.js';
|
|
@@ -15,9 +14,8 @@ import type { AgentRun, AgentRunEvent } from '../../../../domain/generated/outpu
|
|
|
15
14
|
export declare class AgentRunnerService implements IAgentRunner {
|
|
16
15
|
private readonly registry;
|
|
17
16
|
private readonly executorProvider;
|
|
18
|
-
private readonly checkpointer;
|
|
19
17
|
private readonly runRepository;
|
|
20
|
-
constructor(registry: IAgentRegistry, executorProvider: IAgentExecutorProvider,
|
|
18
|
+
constructor(registry: IAgentRegistry, executorProvider: IAgentExecutorProvider, runRepository: IAgentRunRepository);
|
|
21
19
|
runAgent(agentName: string, prompt: string, options?: AgentRunOptions): Promise<AgentRun>;
|
|
22
20
|
runAgentStream(agentName: string, prompt: string, options?: AgentRunOptions): AsyncIterable<AgentRunEvent>;
|
|
23
21
|
private setupRun;
|
package/dist/packages/core/src/infrastructure/services/agents/common/agent-runner.service.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"agent-runner.service.d.ts","sourceRoot":"","sources":["../../../../../../../../packages/core/src/infrastructure/services/agents/common/agent-runner.service.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;
|
|
1
|
+
{"version":3,"file":"agent-runner.service.d.ts","sourceRoot":"","sources":["../../../../../../../../packages/core/src/infrastructure/services/agents/common/agent-runner.service.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAIH,OAAO,KAAK,EACV,YAAY,EACZ,eAAe,EAChB,MAAM,6DAA6D,CAAC;AACrE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,+DAA+D,CAAC;AACpG,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,wEAAwE,CAAC;AACrH,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,qEAAqE,CAAC;AAE/G,OAAO,KAAK,EAAE,QAAQ,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAC;AAoB5E,qBAAa,kBAAmB,YAAW,YAAY;IAEnD,OAAO,CAAC,QAAQ,CAAC,QAAQ;IACzB,OAAO,CAAC,QAAQ,CAAC,gBAAgB;IACjC,OAAO,CAAC,QAAQ,CAAC,aAAa;gBAFb,QAAQ,EAAE,cAAc,EACxB,gBAAgB,EAAE,sBAAsB,EACxC,aAAa,EAAE,mBAAmB;IAG/C,QAAQ,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,eAAe,GAAG,OAAO,CAAC,QAAQ,CAAC;IAoBxF,cAAc,CACnB,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,MAAM,EACd,OAAO,CAAC,EAAE,eAAe,GACxB,aAAa,CAAC,aAAa,CAAC;YAyCjB,QAAQ;YAwCR,aAAa;YAUb,UAAU;CAQzB"}
|
package/dist/packages/core/src/infrastructure/services/agents/common/agent-runner.service.js
CHANGED
|
@@ -11,21 +11,33 @@ import { AgentRunStatus } from '../../../../domain/generated/output.js';
|
|
|
11
11
|
import { getSettings } from '../../../services/settings.service.js';
|
|
12
12
|
import { EventChannel } from '../streaming/event-channel.js';
|
|
13
13
|
import { StreamingExecutorProxy } from '../streaming/streaming-executor-proxy.js';
|
|
14
|
+
/**
|
|
15
|
+
* Lazy-loads the checkpointer to avoid ~240ms startup cost from
|
|
16
|
+
* @langchain/langgraph-checkpoint-sqlite on every CLI invocation.
|
|
17
|
+
* The import only happens when an agent is actually run.
|
|
18
|
+
*/
|
|
19
|
+
let _checkpointer = null;
|
|
20
|
+
async function getCheckpointer() {
|
|
21
|
+
if (!_checkpointer) {
|
|
22
|
+
const { createCheckpointer } = await import('./checkpointer.js');
|
|
23
|
+
_checkpointer = createCheckpointer(':memory:');
|
|
24
|
+
}
|
|
25
|
+
return _checkpointer;
|
|
26
|
+
}
|
|
14
27
|
export class AgentRunnerService {
|
|
15
28
|
registry;
|
|
16
29
|
executorProvider;
|
|
17
|
-
checkpointer;
|
|
18
30
|
runRepository;
|
|
19
|
-
constructor(registry, executorProvider,
|
|
31
|
+
constructor(registry, executorProvider, runRepository) {
|
|
20
32
|
this.registry = registry;
|
|
21
33
|
this.executorProvider = executorProvider;
|
|
22
|
-
this.checkpointer = checkpointer;
|
|
23
34
|
this.runRepository = runRepository;
|
|
24
35
|
}
|
|
25
36
|
async runAgent(agentName, prompt, options) {
|
|
26
37
|
const { definition, executor, runId, threadId } = await this.setupRun(agentName, prompt);
|
|
27
38
|
try {
|
|
28
|
-
const
|
|
39
|
+
const checkpointer = await getCheckpointer();
|
|
40
|
+
const compiledGraph = definition.graphFactory(executor, checkpointer);
|
|
29
41
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
30
42
|
const result = await compiledGraph.invoke({ repositoryPath: options?.repositoryPath ?? process.cwd() }, { configurable: { thread_id: threadId } });
|
|
31
43
|
await this.markCompleted(runId, result);
|
|
@@ -42,7 +54,8 @@ export class AgentRunnerService {
|
|
|
42
54
|
const channel = new EventChannel();
|
|
43
55
|
const proxy = new StreamingExecutorProxy(executor, channel);
|
|
44
56
|
// Compile graph with proxy (graph doesn't know about streaming)
|
|
45
|
-
const
|
|
57
|
+
const checkpointer = await getCheckpointer();
|
|
58
|
+
const compiledGraph = definition.graphFactory(proxy, checkpointer);
|
|
46
59
|
// Start graph invocation in background
|
|
47
60
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
48
61
|
const graphPromise = compiledGraph
|
|
@@ -67,7 +80,7 @@ export class AgentRunnerService {
|
|
|
67
80
|
await graphPromise;
|
|
68
81
|
}
|
|
69
82
|
async setupRun(agentName, prompt) {
|
|
70
|
-
const definition = this.registry.get(agentName);
|
|
83
|
+
const definition = await this.registry.get(agentName);
|
|
71
84
|
if (!definition) {
|
|
72
85
|
throw new Error(`Agent '${agentName}' not found. Available: ${this.registry
|
|
73
86
|
.list()
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"version.service.d.ts","sourceRoot":"","sources":["../../../../../../packages/core/src/infrastructure/services/version.service.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AASH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,4CAA4C,CAAC;AAG9E,YAAY,EAAE,WAAW,EAAE,MAAM,4CAA4C,CAAC;AAsC9E;;GAEG;AACH,qBACa,cAAc;IACzB,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAc;;IAM1C,OAAO,CAAC,eAAe;IAqCvB;;OAEG;IACH,UAAU,IAAI,WAAW;CAG1B;AAED;;;;GAIG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,WAAW,GAAG,IAAI,
|
|
1
|
+
{"version":3,"file":"version.service.d.ts","sourceRoot":"","sources":["../../../../../../packages/core/src/infrastructure/services/version.service.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AASH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,4CAA4C,CAAC;AAG9E,YAAY,EAAE,WAAW,EAAE,MAAM,4CAA4C,CAAC;AAsC9E;;GAEG;AACH,qBACa,cAAc;IACzB,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAc;;IAM1C,OAAO,CAAC,eAAe;IAqCvB;;OAEG;IACH,UAAU,IAAI,WAAW;CAG1B;AAED;;;;GAIG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,WAAW,GAAG,IAAI,CAMzD"}
|
|
@@ -111,4 +111,6 @@ export function setVersionEnvVars(info) {
|
|
|
111
111
|
process.env.NEXT_PUBLIC_SHEP_VERSION = info.version;
|
|
112
112
|
process.env.NEXT_PUBLIC_SHEP_PACKAGE_NAME = info.name;
|
|
113
113
|
process.env.NEXT_PUBLIC_SHEP_DESCRIPTION = info.description;
|
|
114
|
+
process.env.NEXT_PUBLIC_SHEP_INSTANCE_PATH = process.cwd();
|
|
115
|
+
// Branch is intentionally not set in production mode — only dev mode shows it
|
|
114
116
|
}
|
|
@@ -55,7 +55,6 @@ import { initializeContainer, container } from '../../../packages/core/src/infra
|
|
|
55
55
|
import { InitializeSettingsUseCase } from '../../../packages/core/src/application/use-cases/settings/initialize-settings.use-case.js';
|
|
56
56
|
import { initializeSettings } from '../../../packages/core/src/infrastructure/services/settings.service.js';
|
|
57
57
|
import { CheckOnboardingStatusUseCase } from '../../../packages/core/src/application/use-cases/settings/check-onboarding-status.use-case.js';
|
|
58
|
-
import { onboardingWizard } from '../tui/wizards/onboarding/onboarding.wizard.js';
|
|
59
58
|
/**
|
|
60
59
|
* Bootstrap function - initializes all dependencies before CLI starts.
|
|
61
60
|
* Performs async initialization (database, settings) before parsing commands.
|
|
@@ -90,6 +89,8 @@ async function bootstrap() {
|
|
|
90
89
|
const onboardingCheck = new CheckOnboardingStatusUseCase();
|
|
91
90
|
const { isComplete } = await onboardingCheck.execute();
|
|
92
91
|
if (!isComplete) {
|
|
92
|
+
// Lazy-import to avoid ~460ms startup cost when onboarding is already complete
|
|
93
|
+
const { onboardingWizard } = await import('../tui/wizards/onboarding/onboarding.wizard.js');
|
|
93
94
|
await onboardingWizard();
|
|
94
95
|
}
|
|
95
96
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"get-feature-phase-timings.d.ts","sourceRoot":"","sources":["../../../../../../src/presentation/web/app/actions/get-feature-phase-timings.ts"],"names":[],"mappings":"AAMA,MAAM,WAAW,eAAe;IAC9B,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAED,MAAM,WAAW,qBAAqB;IACpC,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;CACxB;AAED,KAAK,qBAAqB,GACtB;IAAE,OAAO,EAAE,eAAe,EAAE,CAAC;IAAC,iBAAiB,EAAE,qBAAqB,EAAE,CAAA;CAAE,GAC1E;IAAE,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC;AAEtB,wBAAsB,sBAAsB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,qBAAqB,CAAC,CA2B9F"}
|
|
1
|
+
{"version":3,"file":"get-feature-phase-timings.d.ts","sourceRoot":"","sources":["../../../../../../src/presentation/web/app/actions/get-feature-phase-timings.ts"],"names":[],"mappings":"AAMA,MAAM,WAAW,eAAe;IAC9B,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAED,MAAM,WAAW,qBAAqB;IACpC,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;CACxB;AAED,KAAK,qBAAqB,GACtB;IAAE,OAAO,EAAE,eAAe,EAAE,CAAC;IAAC,iBAAiB,EAAE,qBAAqB,EAAE,CAAA;CAAE,GAC1E;IAAE,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC;AAEtB,wBAAsB,sBAAsB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,qBAAqB,CAAC,CA2B9F"}
|
|
@@ -42,6 +42,7 @@ async function readRejectionFeedback(featureId) {
|
|
|
42
42
|
iteration: Number(entry.iteration ?? 1),
|
|
43
43
|
message: String(entry.message ?? ''),
|
|
44
44
|
phase: entry.phase ? String(entry.phase) : undefined,
|
|
45
|
+
timestamp: entry.timestamp ? String(entry.timestamp) : undefined,
|
|
45
46
|
attachments: Array.isArray(entry.attachments)
|
|
46
47
|
? entry.attachments.map(String)
|
|
47
48
|
: undefined,
|
|
@@ -269,7 +269,7 @@ export function DrawerActionBar({ onReject, onApprove, approveLabel, revisionPla
|
|
|
269
269
|
}
|
|
270
270
|
}, []);
|
|
271
271
|
const modKey = typeof navigator !== 'undefined' && /Mac/i.test(navigator.userAgent) ? '⌘' : 'Ctrl';
|
|
272
|
-
return (_jsxs("div", { className: "border-border shrink-0 border-t", children: [children, onReject ? (_jsx(TooltipProvider, { delayDuration: 400, children: _jsx("form", { ref: formRef, onSubmit: handleFormSubmit, className: "p-3", children: _jsx("div", { role: "region", "aria-label": "File drop zone", "data-drag-over": isDragOver ? 'true' : 'false', onDragEnter: handleDragEnter, onDragLeave: handleDragLeave, onDragOver: handleDragOver, onDrop: handleDrop, className: cn('rounded-md border-2 border-transparent transition-colors', isDragOver && 'border-primary/50 bg-primary/5'), children: _jsxs("div", { className: "border-input focus-within:ring-ring/50 focus-within:border-ring flex flex-col overflow-hidden rounded-md border shadow-xs transition-[color,box-shadow] focus-within:ring-[3px]", children: [_jsx(Textarea, { placeholder: revisionPlaceholder ?? 'Ask AI to revise...', "aria-label": revisionPlaceholder ?? 'Ask AI to revise...', disabled: disabled, value: chatInput, onChange: (e) => setChatInput(e.target.value), onKeyDown: handleKeyDown, onPaste: handlePaste, rows: 3, className: "min-h-0 flex-1 resize-none rounded-none border-0 shadow-none focus-visible:ring-0", "data-testid": "drawer-chat-input" }), attachments.length > 0 && (_jsx("div", { className: "flex flex-wrap items-center gap-1.5 px-3 py-2", children: attachments.map((file) => (_jsx(AttachmentChip, { name: file.name, size: file.size, mimeType: file.mimeType, path: file.path, onRemove: () => handleRemoveFile(file.id), disabled: disabled, loading: file.loading }, file.id))) })), uploadError ? (_jsx("p", { className: "text-destructive px-3 pb-2 text-xs", children: uploadError })) : null, _jsxs("div", { className: "border-input flex items-center gap-2 border-t px-3 py-1.5", children: [_jsxs("span", { className: "text-muted-foreground flex-1 truncate text-[11px]", children: [_jsxs("kbd", { className: "bg-muted rounded px-1 py-0.5 font-mono text-[10px]", children: [modKey, "+Enter"] }), ' ', "reject", _jsx("span", { className: "mx-1 opacity-40", children: "|" }), _jsxs("kbd", { className: "bg-muted rounded px-1 py-0.5 font-mono text-[10px]", children: [modKey, "+Shift+Enter"] }), ' ', "approve"] }), _jsxs(Tooltip, { children: [_jsx(TooltipTrigger, { asChild: true, children: _jsx("button", { type: "button", onClick: handleAddFiles, disabled: disabled, "aria-label": "Attach files", className: "text-muted-foreground hover:text-foreground cursor-pointer rounded p-1 transition-colors", children: _jsx(PaperclipIcon, { className: "h-4 w-4" }) }) }), _jsx(TooltipContent, { side: "top", children: "Attach files" })] }), _jsx("div", { onMouseLeave: () => setHoverExpanded(false), children: _jsxs(Tooltip, { children: [_jsx(TooltipTrigger, { asChild: true, children: _jsxs("button", { type: "submit", disabled: disabled, "data-testid": "drawer-action-submit", className: cn('relative flex h-8 min-w-[10rem] cursor-pointer items-center overflow-hidden rounded-md border pr-10 pl-4 text-sm font-medium whitespace-nowrap transition-colors', 'disabled:pointer-events-none disabled:cursor-not-allowed disabled:opacity-50', approveExpanded
|
|
272
|
+
return (_jsxs("div", { className: "border-border shrink-0 border-t", children: [children, onReject ? (_jsx(TooltipProvider, { delayDuration: 400, children: _jsx("form", { ref: formRef, onSubmit: handleFormSubmit, className: "p-3", children: _jsx("div", { role: "region", "aria-label": "File drop zone", "data-drag-over": isDragOver ? 'true' : 'false', onDragEnter: handleDragEnter, onDragLeave: handleDragLeave, onDragOver: handleDragOver, onDrop: handleDrop, className: cn('rounded-md border-2 border-transparent transition-colors', isDragOver && 'border-primary/50 bg-primary/5'), children: _jsxs("div", { className: "border-input focus-within:ring-ring/50 focus-within:border-ring flex flex-col overflow-hidden rounded-md border shadow-xs transition-[color,box-shadow] focus-within:ring-[3px]", children: [_jsx(Textarea, { placeholder: revisionPlaceholder ?? 'Ask AI to revise...', "aria-label": revisionPlaceholder ?? 'Ask AI to revise...', disabled: disabled, value: chatInput, onChange: (e) => setChatInput(e.target.value), onKeyDown: handleKeyDown, onPaste: handlePaste, rows: 3, className: "max-h-[35dvh] min-h-0 flex-1 resize-none overflow-y-auto rounded-none border-0 shadow-none focus-visible:ring-0", "data-testid": "drawer-chat-input" }), attachments.length > 0 && (_jsx("div", { className: "flex flex-wrap items-center gap-1.5 px-3 py-2", children: attachments.map((file) => (_jsx(AttachmentChip, { name: file.name, size: file.size, mimeType: file.mimeType, path: file.path, onRemove: () => handleRemoveFile(file.id), disabled: disabled, loading: file.loading }, file.id))) })), uploadError ? (_jsx("p", { className: "text-destructive px-3 pb-2 text-xs", children: uploadError })) : null, _jsxs("div", { className: "border-input flex items-center gap-2 border-t px-3 py-1.5", children: [_jsxs("span", { className: "text-muted-foreground flex-1 truncate text-[11px]", children: [_jsxs("kbd", { className: "bg-muted rounded px-1 py-0.5 font-mono text-[10px]", children: [modKey, "+Enter"] }), ' ', "reject", _jsx("span", { className: "mx-1 opacity-40", children: "|" }), _jsxs("kbd", { className: "bg-muted rounded px-1 py-0.5 font-mono text-[10px]", children: [modKey, "+Shift+Enter"] }), ' ', "approve"] }), _jsxs(Tooltip, { children: [_jsx(TooltipTrigger, { asChild: true, children: _jsx("button", { type: "button", onClick: handleAddFiles, disabled: disabled, "aria-label": "Attach files", className: "text-muted-foreground hover:text-foreground cursor-pointer rounded p-1 transition-colors", children: _jsx(PaperclipIcon, { className: "h-4 w-4" }) }) }), _jsx(TooltipContent, { side: "top", children: "Attach files" })] }), _jsx("div", { onMouseLeave: () => setHoverExpanded(false), children: _jsxs(Tooltip, { children: [_jsx(TooltipTrigger, { asChild: true, children: _jsxs("button", { type: "submit", disabled: disabled, "data-testid": "drawer-action-submit", className: cn('relative flex h-8 min-w-[10rem] cursor-pointer items-center overflow-hidden rounded-md border pr-10 pl-4 text-sm font-medium whitespace-nowrap transition-colors', 'disabled:pointer-events-none disabled:cursor-not-allowed disabled:opacity-50', approveExpanded
|
|
273
273
|
? 'border-blue-400/60 text-white'
|
|
274
274
|
: rejectHighlighted
|
|
275
275
|
? 'border-primary bg-muted ring-primary/30 shadow-sm ring-1'
|
|
@@ -5,5 +5,34 @@ export interface ActivityTabProps {
|
|
|
5
5
|
error: string | null;
|
|
6
6
|
rejectionFeedback?: RejectionFeedbackData[];
|
|
7
7
|
}
|
|
8
|
+
/**
|
|
9
|
+
* A single iteration in the lifecycle timeline.
|
|
10
|
+
*
|
|
11
|
+
* An iteration represents one cycle of work:
|
|
12
|
+
* started/resumed → phase work → rejected/completed/failed
|
|
13
|
+
*
|
|
14
|
+
* Each rejected iteration has associated rejection feedback.
|
|
15
|
+
*/
|
|
16
|
+
export interface TimelineIteration {
|
|
17
|
+
/** 1-based iteration number */
|
|
18
|
+
number: number;
|
|
19
|
+
/** The timing events in this iteration */
|
|
20
|
+
timings: PhaseTimingData[];
|
|
21
|
+
/** If this iteration ended with rejection, the feedback message */
|
|
22
|
+
rejectionMessage?: string;
|
|
23
|
+
/** If this iteration ended with rejection, any attachments */
|
|
24
|
+
rejectionAttachments?: string[];
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Build a lifecycle-aware timeline from flat timing events and rejection feedback.
|
|
28
|
+
*
|
|
29
|
+
* Splits the timing stream at run:rejected boundaries to produce iterations.
|
|
30
|
+
* Each rejection feedback entry is matched to its iteration by index.
|
|
31
|
+
*
|
|
32
|
+
* When there are more feedback entries than run:rejected events in the timings,
|
|
33
|
+
* synthetic run:rejected + run:resumed events are appended to ensure every
|
|
34
|
+
* feedback entry is represented.
|
|
35
|
+
*/
|
|
36
|
+
export declare function buildLifecycleTimeline(timings: PhaseTimingData[], feedback?: RejectionFeedbackData[]): TimelineIteration[];
|
|
8
37
|
export declare function ActivityTab({ timings, loading, error, rejectionFeedback }: ActivityTabProps): import("react/jsx-runtime").JSX.Element;
|
|
9
38
|
//# sourceMappingURL=activity-tab.d.ts.map
|
package/dist/src/presentation/web/components/common/feature-drawer-tabs/activity-tab.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"activity-tab.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/common/feature-drawer-tabs/activity-tab.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,EACV,eAAe,EACf,qBAAqB,EACtB,MAAM,yCAAyC,CAAC;AAGjD,MAAM,WAAW,gBAAgB;IAC/B,OAAO,EAAE,eAAe,EAAE,GAAG,IAAI,CAAC;IAClC,OAAO,EAAE,OAAO,CAAC;IACjB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,iBAAiB,CAAC,EAAE,qBAAqB,EAAE,CAAC;CAC7C;
|
|
1
|
+
{"version":3,"file":"activity-tab.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/common/feature-drawer-tabs/activity-tab.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,EACV,eAAe,EACf,qBAAqB,EACtB,MAAM,yCAAyC,CAAC;AAGjD,MAAM,WAAW,gBAAgB;IAC/B,OAAO,EAAE,eAAe,EAAE,GAAG,IAAI,CAAC;IAClC,OAAO,EAAE,OAAO,CAAC;IACjB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,iBAAiB,CAAC,EAAE,qBAAqB,EAAE,CAAC;CAC7C;AAiCD;;;;;;;GAOG;AACH,MAAM,WAAW,iBAAiB;IAChC,+BAA+B;IAC/B,MAAM,EAAE,MAAM,CAAC;IACf,0CAA0C;IAC1C,OAAO,EAAE,eAAe,EAAE,CAAC;IAC3B,mEAAmE;IACnE,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,8DAA8D;IAC9D,oBAAoB,CAAC,EAAE,MAAM,EAAE,CAAC;CACjC;AAED;;;;;;;;;GASG;AACH,wBAAgB,sBAAsB,CACpC,OAAO,EAAE,eAAe,EAAE,EAC1B,QAAQ,CAAC,EAAE,qBAAqB,EAAE,GACjC,iBAAiB,EAAE,CAgErB;AAMD,wBAAgB,WAAW,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,iBAAiB,EAAE,EAAE,gBAAgB,2CAyD3F"}
|
|
@@ -25,38 +25,76 @@ function isLifecycleEvent(phase) {
|
|
|
25
25
|
function formatDuration(ms) {
|
|
26
26
|
return `${(ms / 1000).toFixed(1)}s`;
|
|
27
27
|
}
|
|
28
|
-
function groupTimingsByRun(timings) {
|
|
29
|
-
const groups = [];
|
|
30
|
-
for (const t of timings) {
|
|
31
|
-
const last = groups[groups.length - 1];
|
|
32
|
-
if (last?.runId === t.agentRunId) {
|
|
33
|
-
last.timings.push(t);
|
|
34
|
-
}
|
|
35
|
-
else {
|
|
36
|
-
groups.push({ runId: t.agentRunId, timings: [t] });
|
|
37
|
-
}
|
|
38
|
-
}
|
|
39
|
-
return groups;
|
|
40
|
-
}
|
|
41
28
|
/**
|
|
42
|
-
*
|
|
43
|
-
*
|
|
29
|
+
* Build a lifecycle-aware timeline from flat timing events and rejection feedback.
|
|
30
|
+
*
|
|
31
|
+
* Splits the timing stream at run:rejected boundaries to produce iterations.
|
|
32
|
+
* Each rejection feedback entry is matched to its iteration by index.
|
|
33
|
+
*
|
|
34
|
+
* When there are more feedback entries than run:rejected events in the timings,
|
|
35
|
+
* synthetic run:rejected + run:resumed events are appended to ensure every
|
|
36
|
+
* feedback entry is represented.
|
|
44
37
|
*/
|
|
45
|
-
function
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
38
|
+
export function buildLifecycleTimeline(timings, feedback) {
|
|
39
|
+
if (!timings.length)
|
|
40
|
+
return [];
|
|
41
|
+
// Count existing run:rejected events
|
|
42
|
+
const existingRejectionCount = timings.filter((t) => t.phase === 'run:rejected').length;
|
|
43
|
+
const feedbackCount = feedback?.length ?? 0;
|
|
44
|
+
// Augment timings with synthetic rejection/resumed cycles for unmatched feedback
|
|
45
|
+
let augmented = timings;
|
|
46
|
+
if (feedbackCount > existingRejectionCount) {
|
|
47
|
+
augmented = [...timings];
|
|
48
|
+
// Use last timing's agentRunId as template
|
|
49
|
+
const templateRunId = timings[timings.length - 1].agentRunId;
|
|
50
|
+
for (let i = existingRejectionCount; i < feedbackCount; i++) {
|
|
51
|
+
const fb = feedback[i];
|
|
52
|
+
// Add run:resumed before work (except for the first synthetic, which continues from existing)
|
|
53
|
+
if (i > existingRejectionCount) {
|
|
54
|
+
augmented.push({
|
|
55
|
+
agentRunId: templateRunId,
|
|
56
|
+
phase: 'run:resumed',
|
|
57
|
+
startedAt: fb.timestamp ?? `synthetic-resumed-${i}`,
|
|
58
|
+
});
|
|
59
|
+
}
|
|
60
|
+
// Add run:rejected
|
|
61
|
+
augmented.push({
|
|
62
|
+
agentRunId: templateRunId,
|
|
63
|
+
phase: 'run:rejected',
|
|
64
|
+
startedAt: fb.timestamp ?? `synthetic-${i}`,
|
|
65
|
+
});
|
|
56
66
|
}
|
|
57
67
|
}
|
|
58
|
-
|
|
68
|
+
// Split into iterations at run:rejected boundaries
|
|
69
|
+
const iterations = [];
|
|
70
|
+
let currentEvents = [];
|
|
71
|
+
let rejectionIndex = 0;
|
|
72
|
+
for (const t of augmented) {
|
|
73
|
+
currentEvents.push(t);
|
|
74
|
+
if (t.phase === 'run:rejected') {
|
|
75
|
+
const fb = feedback?.[rejectionIndex];
|
|
76
|
+
iterations.push({
|
|
77
|
+
number: iterations.length + 1,
|
|
78
|
+
timings: currentEvents,
|
|
79
|
+
rejectionMessage: fb?.message,
|
|
80
|
+
rejectionAttachments: fb?.attachments,
|
|
81
|
+
});
|
|
82
|
+
currentEvents = [];
|
|
83
|
+
rejectionIndex++;
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
// Remaining events after last rejection (or all events if no rejections)
|
|
87
|
+
if (currentEvents.length > 0) {
|
|
88
|
+
iterations.push({
|
|
89
|
+
number: iterations.length + 1,
|
|
90
|
+
timings: currentEvents,
|
|
91
|
+
});
|
|
92
|
+
}
|
|
93
|
+
return iterations;
|
|
59
94
|
}
|
|
95
|
+
/* ---------------------------------------------------------------------------
|
|
96
|
+
* Component
|
|
97
|
+
* ------------------------------------------------------------------------- */
|
|
60
98
|
export function ActivityTab({ timings, loading, error, rejectionFeedback }) {
|
|
61
99
|
if (loading) {
|
|
62
100
|
return (_jsx("div", { "data-testid": "activity-tab-loading", className: "flex items-center justify-center p-8", children: _jsx(Loader2, { className: "text-muted-foreground h-6 w-6 animate-spin" }) }));
|
|
@@ -69,24 +107,28 @@ export function ActivityTab({ timings, loading, error, rejectionFeedback }) {
|
|
|
69
107
|
}
|
|
70
108
|
const nodeTimings = timings.filter((t) => !isLifecycleEvent(t.phase));
|
|
71
109
|
const maxDurationMs = Math.max(...nodeTimings.map((t) => t.durationMs ?? 0), ...nodeTimings.map((t) => t.approvalWaitMs ?? 0), 0);
|
|
72
|
-
|
|
73
|
-
const
|
|
74
|
-
const groups = groupTimingsByRun(timings);
|
|
75
|
-
const multiRun = groups.length > 1;
|
|
110
|
+
const iterations = buildLifecycleTimeline(timings, rejectionFeedback);
|
|
111
|
+
const hasMultipleIterations = iterations.length > 1;
|
|
76
112
|
const totalExecMs = nodeTimings.reduce((sum, t) => sum + (t.durationMs ?? 0), 0);
|
|
77
113
|
const totalWaitMs = nodeTimings.reduce((sum, t) => sum + (t.approvalWaitMs ?? 0), 0);
|
|
78
|
-
return (_jsxs("div", { className: "flex flex-col gap-4 p-4", children: [_jsx("div", { "data-testid": "activity-timings", className: "flex flex-col gap-3", children:
|
|
114
|
+
return (_jsxs("div", { className: "flex flex-col gap-4 p-4", children: [_jsx("div", { "data-testid": "activity-timings", className: "flex flex-col gap-3", children: iterations.map((iteration) => (_jsx(IterationGroup, { iteration: iteration, showHeader: hasMultipleIterations, maxDurationMs: maxDurationMs }, iteration.number))) }), totalExecMs > 0 ? (_jsx(SummaryTotals, { totalExecMs: totalExecMs, totalWaitMs: totalWaitMs })) : null] }));
|
|
79
115
|
}
|
|
80
|
-
|
|
81
|
-
|
|
116
|
+
/* ---------------------------------------------------------------------------
|
|
117
|
+
* Iteration group — one cycle of work
|
|
118
|
+
* ------------------------------------------------------------------------- */
|
|
119
|
+
function IterationGroup({ iteration, showHeader, maxDurationMs, }) {
|
|
120
|
+
return (_jsxs("div", { "data-testid": `iteration-${iteration.number}`, className: "flex flex-col gap-1.5", children: [showHeader ? (_jsxs("div", { className: "text-muted-foreground text-xs font-medium", children: ["Iteration ", iteration.number] })) : null, iteration.timings.map((t) => {
|
|
82
121
|
if (isLifecycleEvent(t.phase)) {
|
|
83
|
-
|
|
84
|
-
const
|
|
85
|
-
return (_jsx(LifecycleEventRow, { timing: t, message:
|
|
122
|
+
// For run:rejected, the message comes from the iteration, not a separate map
|
|
123
|
+
const isRejection = t.phase === 'run:rejected';
|
|
124
|
+
return (_jsx(LifecycleEventRow, { timing: t, message: isRejection ? iteration.rejectionMessage : undefined, attachments: isRejection ? iteration.rejectionAttachments : undefined }, `${t.agentRunId}-${t.phase}-${t.startedAt}`));
|
|
86
125
|
}
|
|
87
126
|
return (_jsx(NodeTimingRow, { timing: t, maxDurationMs: maxDurationMs }, `${t.agentRunId}-${t.phase}-${t.startedAt}`));
|
|
88
127
|
})] }));
|
|
89
128
|
}
|
|
129
|
+
/* ---------------------------------------------------------------------------
|
|
130
|
+
* Row components
|
|
131
|
+
* ------------------------------------------------------------------------- */
|
|
90
132
|
function LifecycleEventRow({ timing, message, attachments, }) {
|
|
91
133
|
const event = LIFECYCLE_EVENTS[timing.phase];
|
|
92
134
|
if (!event)
|
package/dist/src/presentation/web/components/common/feature-drawer-tabs/activity-tab.stories.d.ts
CHANGED
|
@@ -17,6 +17,19 @@ export declare const Empty: Story;
|
|
|
17
17
|
export declare const Error: Story;
|
|
18
18
|
/** Rejection — shows rejected lifecycle event with user feedback text. */
|
|
19
19
|
export declare const WithRejection: Story;
|
|
20
|
+
/**
|
|
21
|
+
* Multiple rejection/resume cycles — realistic lifecycle showing:
|
|
22
|
+
* Iteration 1: work → rejected("rebase on main")
|
|
23
|
+
* Iteration 2: resumed → work → rejected("rebase on main")
|
|
24
|
+
* Iteration 3: rejected("add support for evidence agent...") — synthetic
|
|
25
|
+
* Iteration 4: rejected("screenshots broken...") — synthetic
|
|
26
|
+
*/
|
|
27
|
+
export declare const MultipleRejections: Story;
|
|
20
28
|
/** Approval wait indicators — phases with approval wait sub-rows. */
|
|
21
29
|
export declare const WithApprovalWaits: Story;
|
|
30
|
+
/**
|
|
31
|
+
* Full lifecycle — realistic multi-iteration rejection/resume cycle.
|
|
32
|
+
* Shows the full pattern: start → work → rejected → resumed → work → rejected → resumed → completed
|
|
33
|
+
*/
|
|
34
|
+
export declare const FullLifecycle: Story;
|
|
22
35
|
//# sourceMappingURL=activity-tab.stories.d.ts.map
|
|
@@ -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,qEAAqE;AACrE,eAAO,MAAM,iBAAiB,EAAE,KAgC/B,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"}
|