@shepai/cli 1.152.0 → 1.153.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/packages/core/src/application/ports/output/repositories/interactive-session-repository.interface.d.ts +5 -0
- package/dist/packages/core/src/application/ports/output/repositories/interactive-session-repository.interface.d.ts.map +1 -1
- package/dist/packages/core/src/application/ports/output/services/interactive-session-service.interface.d.ts +5 -0
- package/dist/packages/core/src/application/ports/output/services/interactive-session-service.interface.d.ts.map +1 -1
- package/dist/packages/core/src/infrastructure/repositories/sqlite-interactive-session.repository.d.ts +1 -0
- package/dist/packages/core/src/infrastructure/repositories/sqlite-interactive-session.repository.d.ts.map +1 -1
- package/dist/packages/core/src/infrastructure/repositories/sqlite-interactive-session.repository.js +15 -0
- package/dist/packages/core/src/infrastructure/services/agents/common/executors/claude-code-interactive-executor.service.d.ts.map +1 -1
- package/dist/packages/core/src/infrastructure/services/agents/common/executors/claude-code-interactive-executor.service.js +8 -0
- package/dist/packages/core/src/infrastructure/services/interactive/interactive-session.service.d.ts +1 -0
- package/dist/packages/core/src/infrastructure/services/interactive/interactive-session.service.d.ts.map +1 -1
- package/dist/packages/core/src/infrastructure/services/interactive/interactive-session.service.js +51 -5
- package/dist/src/presentation/web/app/api/interactive/chat/turn-statuses/route.d.ts +4 -5
- package/dist/src/presentation/web/app/api/interactive/chat/turn-statuses/route.d.ts.map +1 -1
- package/dist/src/presentation/web/app/api/interactive/chat/turn-statuses/route.js +5 -13
- package/dist/src/presentation/web/components/common/floating-action-button/floating-action-button.d.ts +8 -2
- package/dist/src/presentation/web/components/common/floating-action-button/floating-action-button.d.ts.map +1 -1
- package/dist/src/presentation/web/components/common/floating-action-button/floating-action-button.js +10 -7
- package/dist/src/presentation/web/components/common/repository-node/repository-node.d.ts.map +1 -1
- package/dist/src/presentation/web/components/common/repository-node/repository-node.js +2 -3
- package/dist/src/presentation/web/components/features/chat/ChatSheet.d.ts.map +1 -1
- package/dist/src/presentation/web/components/features/chat/ChatSheet.js +43 -30
- package/dist/src/presentation/web/components/features/control-center/control-center-inner.d.ts.map +1 -1
- package/dist/src/presentation/web/components/features/control-center/control-center-inner.js +66 -3
- package/dist/src/presentation/web/components/features/features-canvas/canvas-toolbar.d.ts +1 -6
- package/dist/src/presentation/web/components/features/features-canvas/canvas-toolbar.d.ts.map +1 -1
- package/dist/src/presentation/web/components/features/features-canvas/canvas-toolbar.js +5 -6
- package/dist/src/presentation/web/components/features/features-canvas/features-canvas.js +1 -1
- package/dist/src/presentation/web/components/layouts/app-shell/app-shell.d.ts.map +1 -1
- package/dist/src/presentation/web/components/layouts/app-shell/app-shell.js +9 -5
- package/dist/src/presentation/web/hooks/turn-statuses-provider.d.ts +4 -8
- package/dist/src/presentation/web/hooks/turn-statuses-provider.d.ts.map +1 -1
- package/dist/src/presentation/web/hooks/turn-statuses-provider.js +4 -4
- package/dist/src/presentation/web/hooks/use-turn-statuses.d.ts +4 -5
- package/dist/src/presentation/web/hooks/use-turn-statuses.d.ts.map +1 -1
- package/dist/src/presentation/web/hooks/use-turn-statuses.js +7 -12
- 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 +2 -2
- package/web/.next/required-server-files.json +2 -2
- package/web/.next/server/app/(dashboard)/@drawer/adopt/page/server-reference-manifest.json +28 -28
- package/web/.next/server/app/(dashboard)/@drawer/adopt/page.js.nft.json +1 -1
- package/web/.next/server/app/(dashboard)/@drawer/adopt/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/(dashboard)/@drawer/chat/page/server-reference-manifest.json +26 -26
- package/web/.next/server/app/(dashboard)/@drawer/chat/page.js.nft.json +1 -1
- package/web/.next/server/app/(dashboard)/@drawer/chat/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/(dashboard)/@drawer/create/page/server-reference-manifest.json +29 -29
- 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 +36 -36
- 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 +36 -36
- 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]/[tab]/page/server-reference-manifest.json +26 -26
- package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/[tab]/page.js.nft.json +1 -1
- package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/[tab]/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/page/server-reference-manifest.json +26 -26
- 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)/chat/page/server-reference-manifest.json +26 -26
- package/web/.next/server/app/(dashboard)/chat/page.js.nft.json +1 -1
- package/web/.next/server/app/(dashboard)/chat/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/(dashboard)/create/page/server-reference-manifest.json +29 -29
- 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 +36 -36
- 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 +36 -36
- 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 +26 -26
- 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]/[tab]/page/server-reference-manifest.json +26 -26
- package/web/.next/server/app/(dashboard)/repository/[repositoryId]/[tab]/page.js.nft.json +1 -1
- package/web/.next/server/app/(dashboard)/repository/[repositoryId]/[tab]/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/(dashboard)/repository/[repositoryId]/page/server-reference-manifest.json +26 -26
- 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 +5 -5
- package/web/.next/server/app/_not-found/page.js.nft.json +1 -1
- package/web/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/settings/page/server-reference-manifest.json +8 -8
- 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 +10 -10
- 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 +10 -10
- 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 +5 -5
- package/web/.next/server/app/version/page.js.nft.json +1 -1
- package/web/.next/server/app/version/page_client-reference-manifest.js +1 -1
- package/web/.next/server/chunks/[root-of-the-server]__a402b567._.js +1 -1
- package/web/.next/server/chunks/[root-of-the-server]__ab4951b1._.js +1 -1
- package/web/.next/server/chunks/[root-of-the-server]__ab4951b1._.js.map +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/744ca_web_components_common_control-center-drawer_feature-drawer-client_tsx_e9755fc8._.js +2 -2
- package/web/.next/server/chunks/ssr/744ca_web_components_common_control-center-drawer_feature-drawer-client_tsx_e9755fc8._.js.map +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__17ed7ed1._.js +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__17ed7ed1._.js.map +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__28d0d265._.js +2 -2
- package/web/.next/server/chunks/ssr/[root-of-the-server]__357d99f9._.js +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__42bf1807._.js +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__42bf1807._.js.map +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__56b70465._.js +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__56b70465._.js.map +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__88f7e8e6._.js +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__88f7e8e6._.js.map +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__8b0aac03._.js +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__c30f1f82._.js +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__c30f1f82._.js.map +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__f80bfc75._.js +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__f80bfc75._.js.map +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__f8dd4422._.js +3 -0
- package/web/.next/server/chunks/ssr/[root-of-the-server]__f8dd4422._.js.map +1 -0
- package/web/.next/server/chunks/ssr/_05c23ad9._.js +1 -1
- package/web/.next/server/chunks/ssr/_05c23ad9._.js.map +1 -1
- package/web/.next/server/chunks/ssr/_16eb4fec._.js +1 -1
- package/web/.next/server/chunks/ssr/_16eb4fec._.js.map +1 -1
- package/web/.next/server/chunks/ssr/_3a0b989f._.js +2 -2
- package/web/.next/server/chunks/ssr/_3a0b989f._.js.map +1 -1
- package/web/.next/server/chunks/ssr/_56b9d60f._.js +1 -1
- package/web/.next/server/chunks/ssr/_56b9d60f._.js.map +1 -1
- package/web/.next/server/chunks/ssr/_5f69c13f._.js +1 -1
- package/web/.next/server/chunks/ssr/_5f69c13f._.js.map +1 -1
- package/web/.next/server/chunks/ssr/{_cf1c5b73._.js → _65e76c9a._.js} +2 -2
- package/web/.next/server/chunks/ssr/{_cf1c5b73._.js.map → _65e76c9a._.js.map} +1 -1
- package/web/.next/server/chunks/ssr/{_5fce01a7._.js → _75a563a9._.js} +2 -2
- package/web/.next/server/chunks/ssr/{_5fce01a7._.js.map → _75a563a9._.js.map} +1 -1
- package/web/.next/server/chunks/ssr/_7c5b97c6._.js +1 -1
- package/web/.next/server/chunks/ssr/_7c5b97c6._.js.map +1 -1
- package/web/.next/server/chunks/ssr/_82c57f10._.js +1 -1
- package/web/.next/server/chunks/ssr/_82c57f10._.js.map +1 -1
- package/web/.next/server/chunks/ssr/_9495d50b._.js +1 -1
- package/web/.next/server/chunks/ssr/_9495d50b._.js.map +1 -1
- package/web/.next/server/chunks/ssr/_a0e3f7e4._.js +1 -1
- package/web/.next/server/chunks/ssr/_a0e3f7e4._.js.map +1 -1
- package/web/.next/server/chunks/ssr/_ac4a3873._.js +1 -1
- package/web/.next/server/chunks/ssr/_ca0aa7f0._.js +1 -1
- package/web/.next/server/chunks/ssr/_ca0aa7f0._.js.map +1 -1
- package/web/.next/server/chunks/ssr/_cb5a021e._.js +1 -1
- package/web/.next/server/chunks/ssr/_cb5a021e._.js.map +1 -1
- package/web/.next/server/chunks/ssr/_d86175ae._.js +1 -1
- package/web/.next/server/chunks/ssr/_d86175ae._.js.map +1 -1
- package/web/.next/server/chunks/ssr/_d8bedf13._.js +1 -1
- package/web/.next/server/chunks/ssr/_d8bedf13._.js.map +1 -1
- package/web/.next/server/chunks/ssr/_d9337063._.js +3 -0
- package/web/.next/server/chunks/ssr/{_f78b4b9d._.js.map → _d9337063._.js.map} +1 -1
- package/web/.next/server/chunks/ssr/_e9a73a63._.js +1 -1
- package/web/.next/server/chunks/ssr/_e9a73a63._.js.map +1 -1
- package/web/.next/server/chunks/ssr/_fa7efce3._.js +2 -2
- package/web/.next/server/chunks/ssr/_fa7efce3._.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_324a47da._.js +3 -0
- package/web/.next/server/chunks/ssr/src_presentation_web_324a47da._.js.map +1 -0
- package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_skills_page_actions_cdc632e3.js +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_skills_page_actions_cdc632e3.js.map +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_tools_page_actions_39ca0924.js +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_tools_page_actions_39ca0924.js.map +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web_app_actions_open-ide_ts_baaca5d5._.js +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web_components_357e3eb0._.js +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web_components_357e3eb0._.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/pages/500.html +2 -2
- package/web/.next/server/server-reference-manifest.js +1 -1
- package/web/.next/server/server-reference-manifest.json +45 -45
- package/web/.next/static/chunks/{a2257ffb1349f838.js → 11074feeacea0319.js} +1 -1
- package/web/.next/static/chunks/18abd4f8b9c216a3.js +1 -0
- package/web/.next/static/chunks/2a54cf0384becb8f.js +7 -0
- package/web/.next/static/chunks/34417fd25d41b914.js +1 -0
- package/web/.next/static/chunks/{f33efe6a12242a8a.js → 51df7b00bbb7d365.js} +1 -1
- package/web/.next/static/chunks/{1b4429259bbf3064.js → 58adaad3bab50e74.js} +2 -2
- package/web/.next/static/chunks/{277a7f64d4ec189d.js → 634f6f485b81464a.js} +1 -1
- package/web/.next/static/chunks/8bbc916241b4c141.js +1 -0
- package/web/.next/static/chunks/{f9a80d3854a8d453.js → 9c45b599460d0f60.js} +1 -1
- package/web/.next/static/chunks/{80c4c8b3a5c8e0b6.js → a0101660264c178b.js} +2 -2
- package/web/.next/static/chunks/{ef1c9f43aafff65f.js → b70bc188ac05a8be.js} +2 -2
- package/web/.next/static/chunks/c86594475dcb03d5.css +1 -0
- package/web/.next/static/chunks/{6bf775818e4ad42e.js → ebdef1415f61f021.js} +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__563f2f7a._.js +0 -3
- package/web/.next/server/chunks/ssr/[root-of-the-server]__563f2f7a._.js.map +0 -1
- package/web/.next/server/chunks/ssr/_f78b4b9d._.js +0 -3
- package/web/.next/static/chunks/4908997348bd55f8.js +0 -1
- package/web/.next/static/chunks/76858a51f2fbe99a.js +0 -7
- package/web/.next/static/chunks/a919a9df4ab12a5c.css +0 -1
- package/web/.next/static/chunks/bdd340ad42a34b41.js +0 -1
- package/web/.next/static/chunks/ee20803fb301d59e.js +0 -1
- /package/web/.next/static/{lPbWG8a1RwBDDcvRngp58 → zY7W9Btxu_CXSFrwelXeS}/_buildManifest.js +0 -0
- /package/web/.next/static/{lPbWG8a1RwBDDcvRngp58 → zY7W9Btxu_CXSFrwelXeS}/_clientMiddlewareManifest.json +0 -0
- /package/web/.next/static/{lPbWG8a1RwBDDcvRngp58 → zY7W9Btxu_CXSFrwelXeS}/_ssgManifest.js +0 -0
|
@@ -69,5 +69,10 @@ export interface IInteractiveSessionRepository {
|
|
|
69
69
|
* Returns a map of featureId → turnStatus for features that have an active session.
|
|
70
70
|
*/
|
|
71
71
|
getTurnStatuses(featureIds: string[]): Promise<Map<string, string>>;
|
|
72
|
+
/**
|
|
73
|
+
* Get ALL non-idle turn statuses across all active sessions.
|
|
74
|
+
* Returns a map of featureId → turnStatus (only 'processing' | 'unread' entries).
|
|
75
|
+
*/
|
|
76
|
+
getAllActiveTurnStatuses(): Promise<Map<string, string>>;
|
|
72
77
|
}
|
|
73
78
|
//# sourceMappingURL=interactive-session-repository.interface.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"interactive-session-repository.interface.d.ts","sourceRoot":"","sources":["../../../../../../../../packages/core/src/application/ports/output/repositories/interactive-session-repository.interface.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EACV,kBAAkB,EAClB,wBAAwB,EACzB,MAAM,wCAAwC,CAAC;AAEhD;;GAEG;AACH,MAAM,WAAW,6BAA6B;IAC5C;;OAEG;IACH,MAAM,CAAC,OAAO,EAAE,kBAAkB,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAEnD;;OAEG;IACH,QAAQ,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,kBAAkB,GAAG,IAAI,CAAC,CAAC;IAEzD;;;;;OAKG;IACH,eAAe,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,kBAAkB,GAAG,IAAI,CAAC,CAAC;IAEvE;;;OAGG;IACH,aAAa,IAAI,OAAO,CAAC,kBAAkB,EAAE,CAAC,CAAC;IAE/C;;OAEG;IACH,YAAY,CAAC,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,wBAAwB,EAAE,SAAS,CAAC,EAAE,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAE5F;;OAEG;IACH,kBAAkB,CAAC,EAAE,EAAE,MAAM,EAAE,cAAc,EAAE,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAEpE;;;OAGG;IACH,oBAAoB,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IAEtC;;;OAGG;IACH,mBAAmB,IAAI,OAAO,CAAC,MAAM,CAAC,CAAC;IAEvC;;;OAGG;IACH,oBAAoB,CAAC,EAAE,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAExE;;OAEG;IACH,iBAAiB,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;IAEtD;;;OAGG;IACH,gBAAgB,CAAC,EAAE,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAEhE;;;OAGG;IACH,eAAe,CAAC,UAAU,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"interactive-session-repository.interface.d.ts","sourceRoot":"","sources":["../../../../../../../../packages/core/src/application/ports/output/repositories/interactive-session-repository.interface.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EACV,kBAAkB,EAClB,wBAAwB,EACzB,MAAM,wCAAwC,CAAC;AAEhD;;GAEG;AACH,MAAM,WAAW,6BAA6B;IAC5C;;OAEG;IACH,MAAM,CAAC,OAAO,EAAE,kBAAkB,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAEnD;;OAEG;IACH,QAAQ,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,kBAAkB,GAAG,IAAI,CAAC,CAAC;IAEzD;;;;;OAKG;IACH,eAAe,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,kBAAkB,GAAG,IAAI,CAAC,CAAC;IAEvE;;;OAGG;IACH,aAAa,IAAI,OAAO,CAAC,kBAAkB,EAAE,CAAC,CAAC;IAE/C;;OAEG;IACH,YAAY,CAAC,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,wBAAwB,EAAE,SAAS,CAAC,EAAE,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAE5F;;OAEG;IACH,kBAAkB,CAAC,EAAE,EAAE,MAAM,EAAE,cAAc,EAAE,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAEpE;;;OAGG;IACH,oBAAoB,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IAEtC;;;OAGG;IACH,mBAAmB,IAAI,OAAO,CAAC,MAAM,CAAC,CAAC;IAEvC;;;OAGG;IACH,oBAAoB,CAAC,EAAE,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAExE;;OAEG;IACH,iBAAiB,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;IAEtD;;;OAGG;IACH,gBAAgB,CAAC,EAAE,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAEhE;;;OAGG;IACH,eAAe,CAAC,UAAU,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;IAEpE;;;OAGG;IACH,wBAAwB,IAAI,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;CAC1D"}
|
|
@@ -178,5 +178,10 @@ export interface IInteractiveSessionService {
|
|
|
178
178
|
* Used by UI to show dot indicators on all chat buttons.
|
|
179
179
|
*/
|
|
180
180
|
getTurnStatuses(featureIds: string[]): Promise<Map<string, string>>;
|
|
181
|
+
/**
|
|
182
|
+
* Get ALL non-idle turn statuses. No IDs needed — returns every
|
|
183
|
+
* active session's status ('processing' | 'unread').
|
|
184
|
+
*/
|
|
185
|
+
getAllActiveTurnStatuses(): Promise<Map<string, string>>;
|
|
181
186
|
}
|
|
182
187
|
//# sourceMappingURL=interactive-session-service.interface.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"interactive-session-service.interface.d.ts","sourceRoot":"","sources":["../../../../../../../../packages/core/src/application/ports/output/services/interactive-session-service.interface.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"interactive-session-service.interface.d.ts","sourceRoot":"","sources":["../../../../../../../../packages/core/src/application/ports/output/services/interactive-session-service.interface.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,KAAK,EACV,kBAAkB,EAClB,kBAAkB,EACnB,MAAM,wCAAwC,CAAC;AAEhD;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,6CAA6C;IAC7C,KAAK,EAAE,MAAM,CAAC;IACd,0DAA0D;IAC1D,IAAI,EAAE,OAAO,CAAC;IACd,oFAAoF;IACpF,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,iEAAiE;IACjE,QAAQ,CAAC,EAAE,cAAc,CAAC;CAC3B;AAED;;;GAGG;AACH,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,UAAU,GAAG,aAAa,GAAG,UAAU,GAAG,QAAQ,CAAC;IACzD,sCAAsC;IACtC,KAAK,EAAE,MAAM,CAAC;IACd,gEAAgE;IAChE,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED;;GAEG;AACH,MAAM,MAAM,aAAa,GAAG,MAAM,IAAI,CAAC;AAEvC;;GAEG;AACH,MAAM,WAAW,SAAS;IACxB,wEAAwE;IACxE,QAAQ,EAAE,kBAAkB,EAAE,CAAC;IAC/B,+DAA+D;IAC/D,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,iEAAiE;IACjE,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,+DAA+D;IAC/D,WAAW,EAAE,WAAW,GAAG,IAAI,CAAC;IAChC,kFAAkF;IAClF,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,sDAAsD;AACtD,MAAM,WAAW,WAAW;IAC1B,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;IACnB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,SAAS,EAAE,MAAM,CAAC;IAClB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,cAAc,EAAE,MAAM,CAAC;CACxB;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,MAAM,WAAW,0BAA0B;IACzC;;;;;;;;;;OAUG;IACH,YAAY,CACV,SAAS,EAAE,MAAM,EACjB,YAAY,EAAE,MAAM,EACpB,KAAK,CAAC,EAAE,MAAM,EACd,SAAS,CAAC,EAAE,MAAM,GACjB,OAAO,CAAC,kBAAkB,CAAC,CAAC;IAE/B;;;;;;OAMG;IACH,WAAW,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAE9C;;;;;;;;OAQG;IACH,WAAW,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,kBAAkB,CAAC,CAAC;IAE7E;;;;;;OAMG;IACH,WAAW,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,kBAAkB,EAAE,CAAC,CAAC;IAE9E;;;;OAIG;IACH,UAAU,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,kBAAkB,GAAG,IAAI,CAAC,CAAC;IAElE;;;;OAIG;IACH,aAAa,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAEhD;;;;;;;;OAQG;IACH,SAAS,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,KAAK,EAAE,WAAW,KAAK,IAAI,GAAG,aAAa,CAAC;IAInF;;;;;;;;OAQG;IACH,eAAe,CACb,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,MAAM,EACf,YAAY,EAAE,MAAM,GACnB,OAAO,CAAC,kBAAkB,CAAC,CAAC;IAE/B;;;OAGG;IACH,YAAY,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,CAAC,CAAC;IAEpD;;;OAGG;IACH,kBAAkB,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,KAAK,EAAE,WAAW,KAAK,IAAI,GAAG,aAAa,CAAC;IAE5F;;;OAGG;IACH,aAAa,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAEhD;;;OAGG;IACH,QAAQ,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAE3C;;;;OAIG;IACH,eAAe,CAAC,UAAU,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;IAEpE;;;OAGG;IACH,wBAAwB,IAAI,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;CAC1D"}
|
|
@@ -23,5 +23,6 @@ export declare class SQLiteInteractiveSessionRepository implements IInteractiveS
|
|
|
23
23
|
getAgentSessionId(id: string): Promise<string | null>;
|
|
24
24
|
updateTurnStatus(id: string, turnStatus: string): Promise<void>;
|
|
25
25
|
getTurnStatuses(featureIds: string[]): Promise<Map<string, string>>;
|
|
26
|
+
getAllActiveTurnStatuses(): Promise<Map<string, string>>;
|
|
26
27
|
}
|
|
27
28
|
//# sourceMappingURL=sqlite-interactive-session.repository.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sqlite-interactive-session.repository.d.ts","sourceRoot":"","sources":["../../../../../../packages/core/src/infrastructure/repositories/sqlite-interactive-session.repository.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,QAAQ,MAAM,gBAAgB,CAAC;AAE3C,OAAO,KAAK,EAAE,6BAA6B,EAAE,MAAM,yFAAyF,CAAC;AAC7I,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,kCAAkC,CAAC;AAC3E,OAAO,EAAE,wBAAwB,EAAE,MAAM,kCAAkC,CAAC;AAO5E,qBACa,kCAAmC,YAAW,6BAA6B;IAC1E,OAAO,CAAC,QAAQ,CAAC,EAAE;gBAAF,EAAE,EAAE,QAAQ,CAAC,QAAQ;IAE5C,MAAM,CAAC,OAAO,EAAE,kBAAkB,GAAG,OAAO,CAAC,IAAI,CAAC;IAYlD,QAAQ,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,kBAAkB,GAAG,IAAI,CAAC;IAOxD,eAAe,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,kBAAkB,GAAG,IAAI,CAAC;IAStE,aAAa,IAAI,OAAO,CAAC,kBAAkB,EAAE,CAAC;IAO9C,YAAY,CAChB,EAAE,EAAE,MAAM,EACV,MAAM,EAAE,wBAAwB,EAChC,SAAS,CAAC,EAAE,IAAI,GACf,OAAO,CAAC,IAAI,CAAC;IAeV,kBAAkB,CAAC,EAAE,EAAE,MAAM,EAAE,cAAc,EAAE,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;IAUnE,oBAAoB,IAAI,OAAO,CAAC,IAAI,CAAC;IAUrC,mBAAmB,IAAI,OAAO,CAAC,MAAM,CAAC;IAStC,oBAAoB,CAAC,EAAE,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAQvE,iBAAiB,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;IAOrD,gBAAgB,CAAC,EAAE,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAQ/D,eAAe,CAAC,UAAU,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"sqlite-interactive-session.repository.d.ts","sourceRoot":"","sources":["../../../../../../packages/core/src/infrastructure/repositories/sqlite-interactive-session.repository.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,QAAQ,MAAM,gBAAgB,CAAC;AAE3C,OAAO,KAAK,EAAE,6BAA6B,EAAE,MAAM,yFAAyF,CAAC;AAC7I,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,kCAAkC,CAAC;AAC3E,OAAO,EAAE,wBAAwB,EAAE,MAAM,kCAAkC,CAAC;AAO5E,qBACa,kCAAmC,YAAW,6BAA6B;IAC1E,OAAO,CAAC,QAAQ,CAAC,EAAE;gBAAF,EAAE,EAAE,QAAQ,CAAC,QAAQ;IAE5C,MAAM,CAAC,OAAO,EAAE,kBAAkB,GAAG,OAAO,CAAC,IAAI,CAAC;IAYlD,QAAQ,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,kBAAkB,GAAG,IAAI,CAAC;IAOxD,eAAe,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,kBAAkB,GAAG,IAAI,CAAC;IAStE,aAAa,IAAI,OAAO,CAAC,kBAAkB,EAAE,CAAC;IAO9C,YAAY,CAChB,EAAE,EAAE,MAAM,EACV,MAAM,EAAE,wBAAwB,EAChC,SAAS,CAAC,EAAE,IAAI,GACf,OAAO,CAAC,IAAI,CAAC;IAeV,kBAAkB,CAAC,EAAE,EAAE,MAAM,EAAE,cAAc,EAAE,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;IAUnE,oBAAoB,IAAI,OAAO,CAAC,IAAI,CAAC;IAUrC,mBAAmB,IAAI,OAAO,CAAC,MAAM,CAAC;IAStC,oBAAoB,CAAC,EAAE,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAQvE,iBAAiB,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;IAOrD,gBAAgB,CAAC,EAAE,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAQ/D,eAAe,CAAC,UAAU,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAyBnE,wBAAwB,IAAI,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAkB/D"}
|
package/dist/packages/core/src/infrastructure/repositories/sqlite-interactive-session.repository.js
CHANGED
|
@@ -114,6 +114,21 @@ let SQLiteInteractiveSessionRepository = class SQLiteInteractiveSessionRepositor
|
|
|
114
114
|
}
|
|
115
115
|
return result;
|
|
116
116
|
}
|
|
117
|
+
async getAllActiveTurnStatuses() {
|
|
118
|
+
const result = new Map();
|
|
119
|
+
const rows = this.db
|
|
120
|
+
.prepare(`SELECT feature_id, turn_status FROM interactive_sessions
|
|
121
|
+
WHERE status IN ('booting','ready')
|
|
122
|
+
AND turn_status != 'idle'
|
|
123
|
+
ORDER BY created_at DESC`)
|
|
124
|
+
.all();
|
|
125
|
+
for (const row of rows) {
|
|
126
|
+
if (!result.has(row.feature_id)) {
|
|
127
|
+
result.set(row.feature_id, row.turn_status);
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
return result;
|
|
131
|
+
}
|
|
117
132
|
};
|
|
118
133
|
SQLiteInteractiveSessionRepository = __decorate([
|
|
119
134
|
injectable(),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"claude-code-interactive-executor.service.d.ts","sourceRoot":"","sources":["../../../../../../../../../packages/core/src/infrastructure/services/agents/common/executors/claude-code-interactive-executor.service.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAOH,OAAO,KAAK,EACV,yBAAyB,EACzB,uBAAuB,EACvB,6BAA6B,EAE9B,MAAM,wFAAwF,CAAC;AAKhG,qBAAa,6BAA8B,YAAW,yBAAyB;IACvE,aAAa,CAAC,OAAO,EAAE,uBAAuB,GAAG,OAAO,CAAC,6BAA6B,CAAC;IAOvF,aAAa,CACjB,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,uBAAuB,GAC/B,OAAO,CAAC,6BAA6B,CAAC;IAOzC;;;;;OAKG;IACH,OAAO,CAAC,OAAO;IAUf,OAAO,CAAC,eAAe;
|
|
1
|
+
{"version":3,"file":"claude-code-interactive-executor.service.d.ts","sourceRoot":"","sources":["../../../../../../../../../packages/core/src/infrastructure/services/agents/common/executors/claude-code-interactive-executor.service.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAOH,OAAO,KAAK,EACV,yBAAyB,EACzB,uBAAuB,EACvB,6BAA6B,EAE9B,MAAM,wFAAwF,CAAC;AAKhG,qBAAa,6BAA8B,YAAW,yBAAyB;IACvE,aAAa,CAAC,OAAO,EAAE,uBAAuB,GAAG,OAAO,CAAC,6BAA6B,CAAC;IAOvF,aAAa,CACjB,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,uBAAuB,GAC/B,OAAO,CAAC,6BAA6B,CAAC;IAOzC;;;;;OAKG;IACH,OAAO,CAAC,OAAO;IAUf,OAAO,CAAC,eAAe;IAkBvB,OAAO,CAAC,WAAW;YAiBJ,SAAS;IASxB;;;;;;;;;;;;OAYG;IACH,OAAO,CAAC,aAAa;CA0MtB"}
|
|
@@ -46,6 +46,14 @@ export class ClaudeCodeInteractiveExecutor {
|
|
|
46
46
|
model: options.model ?? DEFAULT_MODEL,
|
|
47
47
|
permissionMode: 'bypassPermissions',
|
|
48
48
|
env: cleanEnv,
|
|
49
|
+
// Forward system prompt using preset+append pattern
|
|
50
|
+
...(options.systemPrompt && {
|
|
51
|
+
systemPrompt: {
|
|
52
|
+
type: 'preset',
|
|
53
|
+
preset: 'claude_code',
|
|
54
|
+
append: options.systemPrompt,
|
|
55
|
+
},
|
|
56
|
+
}),
|
|
49
57
|
};
|
|
50
58
|
}
|
|
51
59
|
wrapSession(sdkSession) {
|
package/dist/packages/core/src/infrastructure/services/interactive/interactive-session.service.d.ts
CHANGED
|
@@ -66,6 +66,7 @@ export declare class InteractiveSessionService implements IInteractiveSessionSer
|
|
|
66
66
|
stopByFeature(featureId: string): Promise<void>;
|
|
67
67
|
markRead(featureId: string): Promise<void>;
|
|
68
68
|
getTurnStatuses(featureIds: string[]): Promise<Map<string, string>>;
|
|
69
|
+
getAllActiveTurnStatuses(): Promise<Map<string, string>>;
|
|
69
70
|
/** Find the in-memory state for an active session for a feature. */
|
|
70
71
|
private findActiveStateForFeature;
|
|
71
72
|
/** Resolve the agent type from an explicit override or settings. */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"interactive-session.service.d.ts","sourceRoot":"","sources":["../../../../../../../packages/core/src/infrastructure/services/interactive/interactive-session.service.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAGH,OAAO,KAAK,EACV,0BAA0B,EAC1B,WAAW,EACX,aAAa,EACb,SAAS,EACV,MAAM,qFAAqF,CAAC;AAC7F,OAAO,KAAK,EAAE,6BAA6B,EAAE,MAAM,4FAA4F,CAAC;AAChJ,OAAO,KAAK,EAAE,6BAA6B,EAAE,MAAM,4FAA4F,CAAC;AAChJ,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,8EAA8E,CAAC;AAE1H,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,gFAAgF,CAAC;AACzH,OAAO,KAAK,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,MAAM,qCAAqC,CAAC;AASlG,OAAO,EAAE,KAAK,qBAAqB,EAAE,MAAM,8BAA8B,CAAC;
|
|
1
|
+
{"version":3,"file":"interactive-session.service.d.ts","sourceRoot":"","sources":["../../../../../../../packages/core/src/infrastructure/services/interactive/interactive-session.service.ts"],"names":[],"mappings":"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"}
|
package/dist/packages/core/src/infrastructure/services/interactive/interactive-session.service.js
CHANGED
|
@@ -103,6 +103,8 @@ export class InteractiveSessionService {
|
|
|
103
103
|
currentAssistantBuffer: '',
|
|
104
104
|
toolEventsLog: [],
|
|
105
105
|
subscribers: new Set(),
|
|
106
|
+
turnInProgress: false,
|
|
107
|
+
turnQueue: [],
|
|
106
108
|
};
|
|
107
109
|
this.sessions.set(session.id, state);
|
|
108
110
|
// Fire-and-forget the async boot sequence. The API returns the session
|
|
@@ -343,11 +345,13 @@ export class InteractiveSessionService {
|
|
|
343
345
|
}
|
|
344
346
|
// eslint-disable-next-line no-console
|
|
345
347
|
console.log(`[InteractiveSession] stopSession called for ${sessionId} (feature: ${state.featureId})`, new Error().stack?.split('\n').slice(1, 4).join(' <- '));
|
|
346
|
-
// Abort any active stream iteration
|
|
348
|
+
// Abort any active stream iteration and clear pending turns
|
|
347
349
|
if (state.streamAbort) {
|
|
348
350
|
state.streamAbort.abort();
|
|
349
351
|
state.streamAbort = undefined;
|
|
350
352
|
}
|
|
353
|
+
state.turnQueue.length = 0;
|
|
354
|
+
state.turnInProgress = false;
|
|
351
355
|
this.clearTimer(state);
|
|
352
356
|
// Cache agentSessionId so resumption works when session restarts
|
|
353
357
|
if (state.agentSessionId) {
|
|
@@ -391,8 +395,14 @@ export class InteractiveSessionService {
|
|
|
391
395
|
// Reset idle timer on user activity
|
|
392
396
|
this.resetTimer(state);
|
|
393
397
|
await this.sessionRepo.updateLastActivity(sessionId, now);
|
|
394
|
-
//
|
|
395
|
-
|
|
398
|
+
// Guard: only one turn at a time per session (SDK stream is not concurrent-safe)
|
|
399
|
+
if (state.turnInProgress) {
|
|
400
|
+
state.turnQueue.push(content);
|
|
401
|
+
}
|
|
402
|
+
else {
|
|
403
|
+
state.turnInProgress = true;
|
|
404
|
+
void this.executeAndPersistTurn(state, content);
|
|
405
|
+
}
|
|
396
406
|
return message;
|
|
397
407
|
}
|
|
398
408
|
/**
|
|
@@ -555,6 +565,24 @@ export class InteractiveSessionService {
|
|
|
555
565
|
state.toolEventsLog = [];
|
|
556
566
|
state.subscribers.forEach((sub) => sub({ delta: '', done: true }));
|
|
557
567
|
}
|
|
568
|
+
else if (!responseText) {
|
|
569
|
+
// Stream ended without any response — SDK session likely died.
|
|
570
|
+
// Mark as error so the next message triggers a fresh session.
|
|
571
|
+
// eslint-disable-next-line no-console
|
|
572
|
+
console.error(`[InteractiveSession] stream ended without response for session ${state.sessionId} — session may have died`);
|
|
573
|
+
state.subscribers.forEach((sub) => sub({ delta: '', done: true, log: 'Session disconnected — will restart on next message' }));
|
|
574
|
+
if (state.agentSessionId) {
|
|
575
|
+
this.stoppedAgentSessionIds.set(state.featureId, state.agentSessionId);
|
|
576
|
+
}
|
|
577
|
+
this.sessions.delete(state.sessionId);
|
|
578
|
+
try {
|
|
579
|
+
await this.sessionRepo.updateStatus(state.sessionId, InteractiveSessionStatus.error);
|
|
580
|
+
}
|
|
581
|
+
catch {
|
|
582
|
+
// Best-effort DB update
|
|
583
|
+
}
|
|
584
|
+
return; // Skip queue drain — session is dead
|
|
585
|
+
}
|
|
558
586
|
}
|
|
559
587
|
catch (err) {
|
|
560
588
|
// If session was already stopped, ignore
|
|
@@ -563,6 +591,15 @@ export class InteractiveSessionService {
|
|
|
563
591
|
// eslint-disable-next-line no-console
|
|
564
592
|
console.error(`[InteractiveSession] turn failed for session ${state.sessionId}:`, err);
|
|
565
593
|
}
|
|
594
|
+
finally {
|
|
595
|
+
// Release the turn lock and drain the queue
|
|
596
|
+
state.turnInProgress = false;
|
|
597
|
+
if (this.sessions.has(state.sessionId) && state.turnQueue.length > 0) {
|
|
598
|
+
const nextContent = state.turnQueue.shift();
|
|
599
|
+
state.turnInProgress = true;
|
|
600
|
+
void this.executeAndPersistTurn(state, nextContent);
|
|
601
|
+
}
|
|
602
|
+
}
|
|
566
603
|
}
|
|
567
604
|
async getMessages(featureId, limit) {
|
|
568
605
|
return this.messageRepo.findByFeatureId(featureId, limit);
|
|
@@ -609,10 +646,16 @@ export class InteractiveSessionService {
|
|
|
609
646
|
if (state) {
|
|
610
647
|
const dbSession = await this.sessionRepo.findById(state.sessionId);
|
|
611
648
|
if (dbSession?.status === InteractiveSessionStatus.ready) {
|
|
612
|
-
// Session ready — send to agent
|
|
649
|
+
// Session ready — send to agent (guarded: one turn at a time)
|
|
613
650
|
this.resetTimer(state);
|
|
614
651
|
await this.sessionRepo.updateLastActivity(state.sessionId, now);
|
|
615
|
-
|
|
652
|
+
if (state.turnInProgress) {
|
|
653
|
+
state.turnQueue.push(content);
|
|
654
|
+
}
|
|
655
|
+
else {
|
|
656
|
+
state.turnInProgress = true;
|
|
657
|
+
void this.executeAndPersistTurn(state, content);
|
|
658
|
+
}
|
|
616
659
|
}
|
|
617
660
|
else if (dbSession?.status === InteractiveSessionStatus.booting) {
|
|
618
661
|
// Session booting — queue the message
|
|
@@ -750,6 +793,9 @@ export class InteractiveSessionService {
|
|
|
750
793
|
async getTurnStatuses(featureIds) {
|
|
751
794
|
return this.sessionRepo.getTurnStatuses(featureIds);
|
|
752
795
|
}
|
|
796
|
+
async getAllActiveTurnStatuses() {
|
|
797
|
+
return this.sessionRepo.getAllActiveTurnStatuses();
|
|
798
|
+
}
|
|
753
799
|
/** Find the in-memory state for an active session for a feature. */
|
|
754
800
|
findActiveStateForFeature(featureId) {
|
|
755
801
|
for (const state of this.sessions.values()) {
|
|
@@ -1,13 +1,12 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Bulk turn-status API.
|
|
3
3
|
*
|
|
4
|
-
* GET /api/interactive/chat/turn-statuses
|
|
4
|
+
* GET /api/interactive/chat/turn-statuses
|
|
5
5
|
*
|
|
6
|
-
* Returns
|
|
7
|
-
*
|
|
6
|
+
* Returns ALL non-idle turn statuses as { featureId: turnStatus }.
|
|
7
|
+
* No parameters needed — the backend knows which sessions are active.
|
|
8
8
|
*/
|
|
9
|
-
import type { NextRequest } from 'next/server';
|
|
10
9
|
import { NextResponse } from 'next/server';
|
|
11
10
|
export declare const dynamic = "force-dynamic";
|
|
12
|
-
export declare function GET(
|
|
11
|
+
export declare function GET(): Promise<NextResponse>;
|
|
13
12
|
//# sourceMappingURL=route.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"route.d.ts","sourceRoot":"","sources":["../../../../../../../../../src/presentation/web/app/api/interactive/chat/turn-statuses/route.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,
|
|
1
|
+
{"version":3,"file":"route.d.ts","sourceRoot":"","sources":["../../../../../../../../../src/presentation/web/app/api/interactive/chat/turn-statuses/route.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAI3C,eAAO,MAAM,OAAO,kBAAkB,CAAC;AAEvC,wBAAsB,GAAG,IAAI,OAAO,CAAC,YAAY,CAAC,CAoBjD"}
|
|
@@ -1,26 +1,18 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Bulk turn-status API.
|
|
3
3
|
*
|
|
4
|
-
* GET /api/interactive/chat/turn-statuses
|
|
4
|
+
* GET /api/interactive/chat/turn-statuses
|
|
5
5
|
*
|
|
6
|
-
* Returns
|
|
7
|
-
*
|
|
6
|
+
* Returns ALL non-idle turn statuses as { featureId: turnStatus }.
|
|
7
|
+
* No parameters needed — the backend knows which sessions are active.
|
|
8
8
|
*/
|
|
9
9
|
import { NextResponse } from 'next/server';
|
|
10
10
|
import { resolve } from '../../../../../lib/server-container.js';
|
|
11
11
|
export const dynamic = 'force-dynamic';
|
|
12
|
-
export async function GET(
|
|
12
|
+
export async function GET() {
|
|
13
13
|
try {
|
|
14
|
-
const featureIdsParam = request.nextUrl.searchParams.get('featureIds');
|
|
15
|
-
if (!featureIdsParam) {
|
|
16
|
-
return NextResponse.json({});
|
|
17
|
-
}
|
|
18
|
-
const featureIds = featureIdsParam.split(',').filter(Boolean);
|
|
19
|
-
if (featureIds.length === 0) {
|
|
20
|
-
return NextResponse.json({});
|
|
21
|
-
}
|
|
22
14
|
const service = resolve('IInteractiveSessionService');
|
|
23
|
-
const statuses = await service.
|
|
15
|
+
const statuses = await service.getAllActiveTurnStatuses();
|
|
24
16
|
// Convert Map to plain object for JSON serialization
|
|
25
17
|
const result = {};
|
|
26
18
|
for (const [id, status] of statuses) {
|
|
@@ -16,8 +16,14 @@ export interface FloatingActionButtonAction {
|
|
|
16
16
|
export interface FloatingActionButtonProps {
|
|
17
17
|
/** Action items shown when the FAB is expanded. */
|
|
18
18
|
actions: FloatingActionButtonAction[];
|
|
19
|
-
/** Additional CSS classes for the
|
|
19
|
+
/** Additional CSS classes for the wrapper. */
|
|
20
20
|
className?: string;
|
|
21
|
+
/** Inline styles for the wrapper (e.g. dynamic positioning). */
|
|
22
|
+
style?: React.CSSProperties;
|
|
21
23
|
}
|
|
22
|
-
|
|
24
|
+
/**
|
|
25
|
+
* (+) FAB with expandable action menu.
|
|
26
|
+
* Renders inline — parent controls positioning.
|
|
27
|
+
*/
|
|
28
|
+
export declare function FloatingActionButton({ actions, className, style }: FloatingActionButtonProps): import("react/jsx-runtime").JSX.Element;
|
|
23
29
|
//# sourceMappingURL=floating-action-button.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"floating-action-button.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/common/floating-action-button/floating-action-button.tsx"],"names":[],"mappings":"AAEA,OAAO,KAA8B,MAAM,OAAO,CAAC;AAKnD,MAAM,WAAW,0BAA0B;IACzC,iCAAiC;IACjC,EAAE,EAAE,MAAM,CAAC;IACX,+CAA+C;IAC/C,KAAK,EAAE,MAAM,CAAC;IACd,6BAA6B;IAC7B,IAAI,EAAE,KAAK,CAAC,SAAS,CAAC;IACtB,yCAAyC;IACzC,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,+CAA+C;IAC/C,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,sCAAsC;IACtC,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED,MAAM,WAAW,yBAAyB;IACxC,mDAAmD;IACnD,OAAO,EAAE,0BAA0B,EAAE,CAAC;IACtC,
|
|
1
|
+
{"version":3,"file":"floating-action-button.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/common/floating-action-button/floating-action-button.tsx"],"names":[],"mappings":"AAEA,OAAO,KAA8B,MAAM,OAAO,CAAC;AAKnD,MAAM,WAAW,0BAA0B;IACzC,iCAAiC;IACjC,EAAE,EAAE,MAAM,CAAC;IACX,+CAA+C;IAC/C,KAAK,EAAE,MAAM,CAAC;IACd,6BAA6B;IAC7B,IAAI,EAAE,KAAK,CAAC,SAAS,CAAC;IACtB,yCAAyC;IACzC,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,+CAA+C;IAC/C,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,sCAAsC;IACtC,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED,MAAM,WAAW,yBAAyB;IACxC,mDAAmD;IACnD,OAAO,EAAE,0BAA0B,EAAE,CAAC;IACtC,8CAA8C;IAC9C,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,gEAAgE;IAChE,KAAK,CAAC,EAAE,KAAK,CAAC,aAAa,CAAC;CAC7B;AAQD;;;GAGG;AACH,wBAAgB,oBAAoB,CAAC,EAAE,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,EAAE,yBAAyB,2CAyG5F"}
|
package/dist/src/presentation/web/components/common/floating-action-button/floating-action-button.js
CHANGED
|
@@ -8,7 +8,11 @@ import { Button } from '../../ui/button.js';
|
|
|
8
8
|
const STAGGER_MS = 50;
|
|
9
9
|
/** Total animation duration in ms. */
|
|
10
10
|
const DURATION_MS = 250;
|
|
11
|
-
|
|
11
|
+
/**
|
|
12
|
+
* (+) FAB with expandable action menu.
|
|
13
|
+
* Renders inline — parent controls positioning.
|
|
14
|
+
*/
|
|
15
|
+
export function FloatingActionButton({ actions, className, style }) {
|
|
12
16
|
const [open, setOpen] = useState(false);
|
|
13
17
|
// Close on Escape key
|
|
14
18
|
useEffect(() => {
|
|
@@ -22,14 +26,13 @@ export function FloatingActionButton({ actions, className }) {
|
|
|
22
26
|
document.addEventListener('keydown', handleKeyDown);
|
|
23
27
|
return () => document.removeEventListener('keydown', handleKeyDown);
|
|
24
28
|
}, [open]);
|
|
25
|
-
return (_jsxs(_Fragment, { children: [open ? (_jsx("div", { "data-testid": "fab-overlay", className: "fixed inset-0 z-40", onClick: () => setOpen(false), "aria-hidden": "true" })) : null, _jsxs("div", { "data-testid": "floating-action-button", className: cn('
|
|
29
|
+
return (_jsxs(_Fragment, { children: [open ? (_jsx("div", { "data-testid": "fab-overlay", className: "fixed inset-0 z-40", onClick: () => setOpen(false), "aria-hidden": "true" })) : null, _jsxs("div", { "data-testid": "floating-action-button", className: cn('relative z-50', className), style: style, children: [_jsx("div", { className: cn('absolute bottom-[calc(100%+24px)] left-0 flex flex-col items-start gap-2', !open && 'pointer-events-none'), "data-testid": "fab-actions", children: actions.map((action, i) => {
|
|
26
30
|
const openDelay = (actions.length - 1 - i) * STAGGER_MS;
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
transition: `opacity ${open ? DURATION_MS : 150}ms ease-out ${open ? openDelay : closeDelay}ms`,
|
|
31
|
+
return (_jsxs("button", { "data-testid": `fab-action-${action.id}`, "aria-label": action.label, disabled: action.disabled ?? action.loading, className: cn('flex h-10 items-center gap-2.5 rounded-full px-4', 'bg-background text-foreground shadow-md', 'border-border border', 'hover:bg-accent hover:text-accent-foreground', 'disabled:pointer-events-none disabled:opacity-50', 'text-sm font-medium whitespace-nowrap', open ? 'translate-y-0 opacity-100' : 'pointer-events-none translate-y-0 opacity-0'), style: {
|
|
32
|
+
transition: `opacity ${open ? DURATION_MS : 120}ms ease-out ${open ? openDelay : 0}ms, transform ${open ? DURATION_MS : 120}ms ease-out ${open ? openDelay : 0}ms`,
|
|
30
33
|
}, onClick: () => {
|
|
31
34
|
action.onClick();
|
|
32
35
|
setOpen(false);
|
|
33
|
-
}, children: [_jsx("span", { className: "flex h-5 w-5 shrink-0 items-center justify-center", children: action.loading ? _jsx(Loader2, { className: "h-
|
|
34
|
-
}) }),
|
|
36
|
+
}, children: [_jsx("span", { className: "flex h-5 w-5 shrink-0 items-center justify-center", children: action.loading ? _jsx(Loader2, { className: "h-4 w-4 animate-spin" }) : action.icon }), _jsx("span", { children: action.label })] }, action.id));
|
|
37
|
+
}) }), _jsxs(Button, { size: "icon", "data-testid": "fab-trigger", "aria-label": open ? 'Close actions' : 'Create new', className: cn('relative h-14 w-14 rounded-full shadow-lg', 'bg-indigo-500 text-white hover:bg-indigo-400 dark:bg-indigo-500 dark:hover:bg-indigo-400', 'transition-all duration-200 hover:scale-105 hover:shadow-xl active:scale-95'), onClick: () => setOpen((prev) => !prev), children: [_jsx(Plus, { className: cn('absolute h-7 w-7 stroke-[2.5] transition-all', open ? 'scale-0 rotate-90 opacity-0' : 'scale-100 rotate-0 opacity-100'), style: { transitionDuration: `${DURATION_MS}ms` } }), _jsx(X, { className: cn('absolute h-6 w-6 stroke-[2.5] transition-all', open ? 'scale-100 rotate-0 opacity-100' : 'scale-0 -rotate-90 opacity-0'), style: { transitionDuration: `${DURATION_MS}ms` } })] })] })] }));
|
|
35
38
|
}
|
package/dist/src/presentation/web/components/common/repository-node/repository-node.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"repository-node.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/common/repository-node/repository-node.tsx"],"names":[],"mappings":"AAoCA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AASnE,wBAAgB,cAAc,CAAC,EAC7B,IAAI,EACJ,QAAQ,GACT,EAAE;IACD,IAAI,EAAE,kBAAkB,CAAC;IACzB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB,
|
|
1
|
+
{"version":3,"file":"repository-node.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/common/repository-node/repository-node.tsx"],"names":[],"mappings":"AAoCA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AASnE,wBAAgB,cAAc,CAAC,EAC7B,IAAI,EACJ,QAAQ,GACT,EAAE;IACD,IAAI,EAAE,kBAAkB,CAAC;IACzB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB,2CAgcA"}
|
|
@@ -13,15 +13,14 @@ import { useDeployAction } from '../../../hooks/use-deploy-action.js';
|
|
|
13
13
|
import { useFeatureFlags } from '../../../hooks/feature-flags-context.js';
|
|
14
14
|
import { useRepositoryActions } from './use-repository-actions.js';
|
|
15
15
|
import { ChatDotIndicator } from '../../features/chat/ChatDotIndicator.js';
|
|
16
|
-
import {
|
|
16
|
+
import { useTurnStatus } from '../../../hooks/turn-statuses-provider.js';
|
|
17
17
|
import { FeatureSessionsDropdown, } from '../../common/feature-node/feature-sessions-dropdown.js';
|
|
18
18
|
export function RepositoryNode({ data, selected, }) {
|
|
19
19
|
const router = useRouter();
|
|
20
20
|
const featureFlags = useFeatureFlags();
|
|
21
21
|
const [confirmOpen, setConfirmOpen] = useState(false);
|
|
22
22
|
const repoScopeId = data.id ? `repo-${data.id}` : `repo-${data.name}`;
|
|
23
|
-
const
|
|
24
|
-
const chatTurnStatus = turnStatuses[repoScopeId] ?? 'idle';
|
|
23
|
+
const chatTurnStatus = useTurnStatus(repoScopeId);
|
|
25
24
|
const actions = useRepositoryActions(data.repositoryPath ? { repositoryId: data.id, repositoryPath: data.repositoryPath } : null);
|
|
26
25
|
const deployAction = useDeployAction(data.repositoryPath
|
|
27
26
|
? {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ChatSheet.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/features/chat/ChatSheet.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"ChatSheet.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/features/chat/ChatSheet.tsx"],"names":[],"mappings":"AAwDA,wBAAgB,eAAe,4CA+X9B"}
|
|
@@ -19,9 +19,14 @@ function loadPersistedState() {
|
|
|
19
19
|
if (!raw)
|
|
20
20
|
return { pos: null, size: null };
|
|
21
21
|
const parsed = JSON.parse(raw);
|
|
22
|
+
let size = parsed.size ?? null;
|
|
23
|
+
// Clamp persisted size to minimums — prevents invisible panel from bad state
|
|
24
|
+
if (size && (size.w < MIN_W || size.h < MIN_H)) {
|
|
25
|
+
size = { w: Math.max(MIN_W, size.w), h: Math.max(MIN_H, size.h) };
|
|
26
|
+
}
|
|
22
27
|
return {
|
|
23
28
|
pos: parsed.pos ?? null,
|
|
24
|
-
size
|
|
29
|
+
size,
|
|
25
30
|
};
|
|
26
31
|
}
|
|
27
32
|
catch {
|
|
@@ -119,13 +124,24 @@ export function GlobalChatPopup() {
|
|
|
119
124
|
const timer = setTimeout(() => persistState(pos, size), 300);
|
|
120
125
|
return () => clearTimeout(timer);
|
|
121
126
|
}, [pos, size]);
|
|
127
|
+
/** Clamp position so the header (top 48px) stays within viewport. */
|
|
128
|
+
const clampPos = useCallback((x, y, w) => {
|
|
129
|
+
const vw = window.innerWidth;
|
|
130
|
+
const vh = window.innerHeight;
|
|
131
|
+
const HEADER_H = 48;
|
|
132
|
+
return {
|
|
133
|
+
// Keep at least 100px of width visible horizontally
|
|
134
|
+
x: Math.max(-w + 100, Math.min(x, vw - 100)),
|
|
135
|
+
// Keep header on screen: top >= 0, top <= viewport - header height
|
|
136
|
+
y: Math.max(0, Math.min(y, vh - HEADER_H)),
|
|
137
|
+
};
|
|
138
|
+
}, []);
|
|
122
139
|
// ── Drag handling ──────────────────────────────────────────────────────
|
|
123
140
|
const onDragStart = useCallback((e) => {
|
|
124
141
|
e.preventDefault();
|
|
125
142
|
const panel = panelRef.current;
|
|
126
143
|
if (!panel)
|
|
127
144
|
return;
|
|
128
|
-
// If no custom position yet, compute from current DOM position
|
|
129
145
|
const rect = panel.getBoundingClientRect();
|
|
130
146
|
const currentX = pos?.x ?? rect.left;
|
|
131
147
|
const currentY = pos?.y ?? rect.top;
|
|
@@ -135,15 +151,13 @@ export function GlobalChatPopup() {
|
|
|
135
151
|
startPosX: currentX,
|
|
136
152
|
startPosY: currentY,
|
|
137
153
|
};
|
|
154
|
+
const panelW = size?.w ?? rect.width;
|
|
138
155
|
const onMove = (ev) => {
|
|
139
156
|
if (!dragRef.current)
|
|
140
157
|
return;
|
|
141
158
|
const dx = ev.clientX - dragRef.current.startX;
|
|
142
159
|
const dy = ev.clientY - dragRef.current.startY;
|
|
143
|
-
setPos(
|
|
144
|
-
x: dragRef.current.startPosX + dx,
|
|
145
|
-
y: dragRef.current.startPosY + dy,
|
|
146
|
-
});
|
|
160
|
+
setPos(clampPos(dragRef.current.startPosX + dx, dragRef.current.startPosY + dy, panelW));
|
|
147
161
|
};
|
|
148
162
|
const onUp = () => {
|
|
149
163
|
dragRef.current = null;
|
|
@@ -152,7 +166,7 @@ export function GlobalChatPopup() {
|
|
|
152
166
|
};
|
|
153
167
|
document.addEventListener('mousemove', onMove);
|
|
154
168
|
document.addEventListener('mouseup', onUp);
|
|
155
|
-
}, [pos, setPos]);
|
|
169
|
+
}, [pos, size, setPos, clampPos]);
|
|
156
170
|
// ── Resize handling (from top-right corner) ────────────────────────────
|
|
157
171
|
const onResizeStart = useCallback((e) => {
|
|
158
172
|
e.preventDefault();
|
|
@@ -161,29 +175,27 @@ export function GlobalChatPopup() {
|
|
|
161
175
|
if (!panel)
|
|
162
176
|
return;
|
|
163
177
|
const rect = panel.getBoundingClientRect();
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
};
|
|
170
|
-
//
|
|
178
|
+
const startW = size?.w ?? rect.width;
|
|
179
|
+
const startH = size?.h ?? rect.height;
|
|
180
|
+
const startX = e.clientX;
|
|
181
|
+
const startY = e.clientY;
|
|
182
|
+
const startPosY = pos?.y ?? rect.top;
|
|
183
|
+
resizeRef.current = { startX, startY, startW, startH };
|
|
184
|
+
// Capture position if not set yet
|
|
171
185
|
if (!pos) {
|
|
172
186
|
setPos({ x: rect.left, y: rect.top });
|
|
173
187
|
}
|
|
174
188
|
const onMove = (ev) => {
|
|
175
189
|
if (!resizeRef.current)
|
|
176
190
|
return;
|
|
177
|
-
const dx = ev.clientX -
|
|
178
|
-
const dy = ev.clientY -
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
setPos((prev) => (prev ? { ...prev, y: (prev.y ?? 0) + dy } : prev));
|
|
186
|
-
}
|
|
191
|
+
const dx = ev.clientX - startX;
|
|
192
|
+
const dy = ev.clientY - startY;
|
|
193
|
+
const newW = Math.max(MIN_W, startW + dx);
|
|
194
|
+
const newH = Math.max(MIN_H, startH - dy);
|
|
195
|
+
// Top edge moves with height change, clamped to viewport
|
|
196
|
+
const newY = Math.max(0, startPosY + dy);
|
|
197
|
+
setSize({ w: newW, h: newH });
|
|
198
|
+
setPos((prev) => clampPos(prev?.x ?? rect.left, newY, newW));
|
|
187
199
|
};
|
|
188
200
|
const onUp = () => {
|
|
189
201
|
resizeRef.current = null;
|
|
@@ -192,7 +204,7 @@ export function GlobalChatPopup() {
|
|
|
192
204
|
};
|
|
193
205
|
document.addEventListener('mousemove', onMove);
|
|
194
206
|
document.addEventListener('mouseup', onUp);
|
|
195
|
-
}, [size, pos, setPos, setSize]);
|
|
207
|
+
}, [size, pos, setPos, setSize, clampPos]);
|
|
196
208
|
// Reset position/size on close for clean reopen
|
|
197
209
|
const handleClose = useCallback(() => {
|
|
198
210
|
setIsOpen(false);
|
|
@@ -214,8 +226,8 @@ export function GlobalChatPopup() {
|
|
|
214
226
|
height: size?.h ?? `${DEFAULT_H_VH}vh`,
|
|
215
227
|
};
|
|
216
228
|
return (_jsxs(_Fragment, { children: [hasOpened ? (_jsxs("div", { ref: panelRef, className: cn(isMaximized
|
|
217
|
-
? 'bg-background
|
|
218
|
-
: cn(!pos && '
|
|
229
|
+
? 'bg-background fixed inset-0 z-[60] flex flex-col overflow-hidden dark:bg-neutral-900'
|
|
230
|
+
: cn(!pos && 'fixed right-8 bottom-24', 'z-[60] flex flex-col overflow-hidden rounded-lg', 'border-border/60 border dark:border-white/10', 'bg-background dark:bg-neutral-900', 'shadow-[0_8px_40px_-8px_rgba(0,0,0,0.2)] dark:shadow-[0_8px_40px_-8px_rgba(0,0,0,0.6)]'), 'transition-opacity duration-300 ease-out', isOpen ? 'pointer-events-auto opacity-100' : 'pointer-events-none opacity-0'), style: panelStyle, children: [!isMaximized ? (_jsx("div", { className: "h-[2px] shrink-0 bg-gradient-to-r from-transparent via-violet-500/50 to-transparent" })) : null, !isMaximized ? (_jsx("div", { onMouseDown: onResizeStart, className: "absolute top-0 right-0 z-10 h-4 w-4 cursor-ne-resize" })) : null, _jsxs("div", { onMouseDown: isMaximized ? undefined : onDragStart, className: cn('relative flex h-11 shrink-0 items-center gap-2.5 border-b border-black/[0.06] px-3.5 dark:border-white/[0.06]', !isMaximized && 'cursor-grab active:cursor-grabbing'), children: [_jsx("div", { className: "from-foreground/[0.02] to-foreground/[0.02] pointer-events-none absolute inset-0 bg-gradient-to-r via-transparent" }), !isMaximized ? (_jsx(GripVertical, { className: "text-foreground/15 relative h-3.5 w-3.5 shrink-0" })) : null, _jsx("div", { className: "relative flex h-5 w-5 items-center justify-center", children: _jsx(Bot, { className: "text-foreground/50 h-4 w-4" }) }), _jsxs("div", { className: "relative flex items-baseline gap-2", children: [_jsx("span", { className: "text-foreground/90 text-base font-bold tracking-tight", children: "Shep" }), _jsx("span", { className: "text-foreground/30 text-xs font-medium tracking-widest uppercase", children: "global" })] }), _jsxs("div", { className: "relative ml-auto flex items-center gap-0.5", children: [_jsx("button", { type: "button", onClick: toggleMaximize, className: "text-foreground/30 hover:text-foreground/60 rounded-md p-1 transition-colors", title: isMaximized ? 'Restore (⌘⇧M)' : 'Maximize (⌘⇧M)', children: isMaximized ? (_jsx(Minimize2, { className: "h-3.5 w-3.5" })) : (_jsx(Maximize2, { className: "h-3.5 w-3.5" })) }), _jsx("button", { type: "button", onClick: handleClose, className: "text-foreground/30 hover:text-foreground/60 rounded-md p-1 transition-colors", title: "Close (\u2318\u21E7K)", children: _jsx(X, { className: "h-3.5 w-3.5" }) })] })] }), _jsx("div", { className: "flex min-h-0 flex-1 flex-col overflow-hidden", children: _jsx(ChatTab, { featureId: "global" }) }), !isMaximized ? (_jsx("div", { onMouseDown: (e) => {
|
|
219
231
|
e.preventDefault();
|
|
220
232
|
e.stopPropagation();
|
|
221
233
|
const panel = panelRef.current;
|
|
@@ -229,9 +241,10 @@ export function GlobalChatPopup() {
|
|
|
229
241
|
if (!pos)
|
|
230
242
|
setPos({ x: rect.left, y: rect.top });
|
|
231
243
|
const onMove = (ev) => {
|
|
244
|
+
const maxH = window.innerHeight - (pos?.y ?? rect.top);
|
|
232
245
|
setSize({
|
|
233
246
|
w: Math.max(MIN_W, startW + (ev.clientX - startX)),
|
|
234
|
-
h: Math.max(MIN_H, startH + (ev.clientY - startY)),
|
|
247
|
+
h: Math.max(MIN_H, Math.min(startH + (ev.clientY - startY), maxH)),
|
|
235
248
|
});
|
|
236
249
|
};
|
|
237
250
|
const onUp = () => {
|
|
@@ -240,7 +253,7 @@ export function GlobalChatPopup() {
|
|
|
240
253
|
};
|
|
241
254
|
document.addEventListener('mousemove', onMove);
|
|
242
255
|
document.addEventListener('mouseup', onUp);
|
|
243
|
-
}, className: "absolute right-0 bottom-0 z-10 h-4 w-4 cursor-se-resize" })) : null] })) : null, _jsxs("div", { className: cn('group/fab
|
|
256
|
+
}, className: "absolute right-0 bottom-0 z-10 h-4 w-4 cursor-se-resize" })) : null] })) : null, _jsxs("div", { className: cn('group/fab fixed right-8 bottom-6 z-30', isMaximized && 'hidden'), children: [_jsxs(Button, { size: "icon", onClick: toggle, className: cn('relative h-14 w-14 rounded-full shadow-lg', 'transition-all duration-200 hover:scale-105 hover:shadow-xl active:scale-95', isOpen
|
|
244
257
|
? 'bg-violet-600 text-white hover:bg-violet-500'
|
|
245
|
-
: 'bg-violet-500 text-white hover:bg-violet-400 dark:bg-violet-500 dark:hover:bg-violet-400'), children: [_jsx(MessageSquare, { className: cn('absolute h-7 w-7 stroke-[2.5] transition-all duration-200', isOpen ? 'scale-0 rotate-90 opacity-0' : 'scale-100 rotate-0 opacity-100') }), _jsx(X, { className: cn('absolute h-6 w-6 stroke-[2.5] transition-all duration-200', isOpen ? 'scale-100 rotate-0 opacity-100' : 'scale-0 -rotate-90 opacity-0') }), !isOpen && _jsx(ChatDotIndicator, { status: globalChatTurnStatus, className: "top-0 right-0" })] }), _jsx("div", { className: "pointer-events-none
|
|
258
|
+
: 'bg-violet-500 text-white hover:bg-violet-400 dark:bg-violet-500 dark:hover:bg-violet-400'), children: [_jsx(MessageSquare, { className: cn('absolute h-7 w-7 stroke-[2.5] transition-all duration-200', isOpen ? 'scale-0 rotate-90 opacity-0' : 'scale-100 rotate-0 opacity-100') }), _jsx(X, { className: cn('absolute h-6 w-6 stroke-[2.5] transition-all duration-200', isOpen ? 'scale-100 rotate-0 opacity-100' : 'scale-0 -rotate-90 opacity-0') }), !isOpen && _jsx(ChatDotIndicator, { status: globalChatTurnStatus, className: "top-0 right-0" })] }), _jsx("div", { className: "pointer-events-none absolute bottom-[calc(100%+8px)] left-1/2 -translate-x-1/2 translate-y-1 opacity-0 transition-all duration-200 group-hover/fab:translate-y-0 group-hover/fab:opacity-100", children: _jsxs("div", { className: "bg-foreground rounded-lg px-3 py-1.5 text-center shadow-lg", children: [_jsx("p", { className: "text-background text-xs font-medium whitespace-nowrap", children: "Shep Chat" }), _jsxs("p", { className: "text-background/50 mt-0.5 flex items-center justify-center gap-1 text-[10px]", children: [_jsx("kbd", { className: "bg-background/15 rounded px-1 py-px font-mono", children: "\u2318" }), _jsx("kbd", { className: "bg-background/15 rounded px-1 py-px font-mono", children: "\u21E7" }), _jsx("kbd", { className: "bg-background/15 rounded px-1 py-px font-mono", children: "K" })] })] }) })] })] }));
|
|
246
259
|
}
|
package/dist/src/presentation/web/components/features/control-center/control-center-inner.d.ts.map
CHANGED
|
@@ -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":"
|
|
1
|
+
{"version":3,"file":"control-center-inner.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/features/control-center/control-center-inner.tsx"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,IAAI,EAAY,MAAM,eAAe,CAAC;AAIpD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,uCAAuC,CAAC;AA8B5E,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,2CAwczF"}
|