@shepai/cli 1.164.0 → 1.164.1-pr516.5c85bb4
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/apis/json-schema/StageTimeouts.yaml +7 -2
- package/dist/packages/core/src/application/ports/output/agents/interactive-agent-executor.interface.d.ts +3 -1
- package/dist/packages/core/src/application/ports/output/agents/interactive-agent-executor.interface.d.ts.map +1 -1
- package/dist/packages/core/src/application/ports/output/repositories/interactive-session-repository.interface.d.ts +19 -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 +7 -1
- package/dist/packages/core/src/application/ports/output/services/interactive-session-service.interface.d.ts.map +1 -1
- package/dist/packages/core/src/application/use-cases/interactive/send-interactive-message.use-case.d.ts +2 -0
- package/dist/packages/core/src/application/use-cases/interactive/send-interactive-message.use-case.d.ts.map +1 -1
- package/dist/packages/core/src/application/use-cases/interactive/send-interactive-message.use-case.js +1 -1
- package/dist/packages/core/src/domain/generated/output.d.ts +6 -2
- package/dist/packages/core/src/domain/generated/output.d.ts.map +1 -1
- package/dist/packages/core/src/infrastructure/persistence/sqlite/mappers/settings.mapper.d.ts +1 -0
- package/dist/packages/core/src/infrastructure/persistence/sqlite/mappers/settings.mapper.d.ts.map +1 -1
- package/dist/packages/core/src/infrastructure/persistence/sqlite/mappers/settings.mapper.js +3 -0
- package/dist/packages/core/src/infrastructure/persistence/sqlite/migrations/051-add-session-usage-tracking.d.ts +18 -0
- package/dist/packages/core/src/infrastructure/persistence/sqlite/migrations/051-add-session-usage-tracking.d.ts.map +1 -0
- package/dist/packages/core/src/infrastructure/persistence/sqlite/migrations/051-add-session-usage-tracking.js +32 -0
- package/dist/packages/core/src/infrastructure/persistence/sqlite/migrations/052-add-stage-timeout-fast-implement-ms.d.ts +15 -0
- package/dist/packages/core/src/infrastructure/persistence/sqlite/migrations/052-add-stage-timeout-fast-implement-ms.d.ts.map +1 -0
- package/dist/packages/core/src/infrastructure/persistence/sqlite/migrations/052-add-stage-timeout-fast-implement-ms.js +22 -0
- package/dist/packages/core/src/infrastructure/repositories/sqlite-interactive-session.repository.d.ts +12 -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 +31 -0
- package/dist/packages/core/src/infrastructure/services/agents/common/executors/claude-code-interactive-executor.service.d.ts +38 -7
- 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 +152 -45
- package/dist/packages/core/src/infrastructure/services/agents/feature-agent/nodes/node-helpers.js +2 -2
- package/dist/packages/core/src/infrastructure/services/interactive/interactive-session.service.d.ts +17 -1
- 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 +131 -47
- package/dist/src/presentation/web/app/api/interactive/chat/[featureId]/messages/route.d.ts.map +1 -1
- package/dist/src/presentation/web/app/api/interactive/chat/[featureId]/messages/route.js +3 -1
- package/dist/src/presentation/web/components/assistant-ui/thread.js +8 -1
- package/dist/src/presentation/web/components/features/chat/ChatTab.d.ts.map +1 -1
- package/dist/src/presentation/web/components/features/chat/ChatTab.js +13 -7
- package/dist/src/presentation/web/components/features/chat/useChatRuntime.d.ts +16 -0
- package/dist/src/presentation/web/components/features/chat/useChatRuntime.d.ts.map +1 -1
- package/dist/src/presentation/web/components/features/chat/useChatRuntime.js +98 -7
- package/dist/src/presentation/web/components/features/settings/AgentModelPicker/index.d.ts.map +1 -1
- package/dist/src/presentation/web/components/features/settings/AgentModelPicker/index.js +1 -1
- package/dist/src/presentation/web/components/features/settings/settings-page-client.d.ts.map +1 -1
- package/dist/src/presentation/web/components/features/settings/settings-page-client.js +8 -0
- package/dist/src/presentation/web/components/features/settings/settings-page-client.stories.d.ts.map +1 -1
- package/dist/src/presentation/web/components/features/settings/settings-page-client.stories.js +1 -0
- package/dist/src/presentation/web/components/features/settings/workflow-settings-section.d.ts.map +1 -1
- package/dist/src/presentation/web/components/features/settings/workflow-settings-section.js +11 -0
- package/dist/src/presentation/web/components/features/settings/workflow-settings-section.stories.d.ts.map +1 -1
- package/dist/src/presentation/web/components/features/settings/workflow-settings-section.stories.js +2 -0
- package/dist/translations/ar/web.json +2 -0
- package/dist/translations/de/web.json +2 -0
- package/dist/translations/en/web.json +2 -0
- package/dist/translations/es/web.json +2 -0
- package/dist/translations/fr/web.json +2 -0
- package/dist/translations/he/web.json +2 -0
- package/dist/translations/pt/web.json +2 -0
- package/dist/translations/ru/web.json +2 -0
- package/dist/tsconfig.build.tsbuildinfo +1 -1
- package/package.json +2 -2
- 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 +3 -3
- package/web/.next/required-server-files.json +3 -3
- package/web/.next/server/app/(dashboard)/@drawer/adopt/page/server-reference-manifest.json +29 -29
- 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 +27 -27
- 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 +30 -30
- 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 +37 -37
- 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 +37 -37
- 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 +28 -28
- 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 +28 -28
- 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 +27 -27
- 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 +30 -30
- 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 +37 -37
- 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 +37 -37
- 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 +27 -27
- 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 +28 -28
- 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 +28 -28
- 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 +6 -6
- 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 +9 -9
- 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 +11 -11
- 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 +11 -11
- 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 +6 -6
- 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]__2b71641f._.js +1 -1
- package/web/.next/server/chunks/[root-of-the-server]__2b71641f._.js.map +1 -1
- package/web/.next/server/chunks/[root-of-the-server]__a402b567._.js +1 -1
- package/web/.next/server/chunks/[root-of-the-server]__c78383b1._.js.map +1 -1
- package/web/.next/server/chunks/[root-of-the-server]__cd67a84c._.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]__1abe77bb._.js +2 -2
- package/web/.next/server/chunks/ssr/[root-of-the-server]__1abe77bb._.js.map +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__1f389e5d._.js +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__1f389e5d._.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]__563e4faf._.js +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__563e4faf._.js.map +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__7562afc6._.js +2 -2
- package/web/.next/server/chunks/ssr/[root-of-the-server]__7562afc6._.js.map +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__821a11c1._.js +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__821a11c1._.js.map +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__86ff0bc5._.js +2 -2
- package/web/.next/server/chunks/ssr/[root-of-the-server]__86ff0bc5._.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]__98740ee4._.js +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__98740ee4._.js.map +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__b7b96453._.js +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__b7b96453._.js.map +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__ba9f9e11._.js +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__ba9f9e11._.js.map +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__e0be67c7._.js +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__e0be67c7._.js.map +1 -1
- package/web/.next/server/chunks/ssr/{_8b57edb8._.js → _0020fddd._.js} +2 -2
- package/web/.next/server/chunks/ssr/_0020fddd._.js.map +1 -0
- package/web/.next/server/chunks/ssr/_02e01240._.js +1 -1
- package/web/.next/server/chunks/ssr/_02e01240._.js.map +1 -1
- 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/_0727935d._.js +1 -1
- package/web/.next/server/chunks/ssr/_0727935d._.js.map +1 -1
- package/web/.next/server/chunks/ssr/_0dc06d07._.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/{_c9f903f2._.js → _17b886d9._.js} +2 -2
- package/web/.next/server/chunks/ssr/{_c9f903f2._.js.map → _17b886d9._.js.map} +1 -1
- package/web/.next/server/chunks/ssr/_18886033._.js +1 -1
- package/web/.next/server/chunks/ssr/_18886033._.js.map +1 -1
- package/web/.next/server/chunks/ssr/_22e00a14._.js +1 -1
- package/web/.next/server/chunks/ssr/_22e00a14._.js.map +1 -1
- package/web/.next/server/chunks/ssr/_5119a3df._.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/{_52403a07._.js → _841e9be8._.js} +2 -2
- package/web/.next/server/chunks/ssr/{_52403a07._.js.map → _841e9be8._.js.map} +1 -1
- package/web/.next/server/chunks/ssr/_9215e9ec._.js +1 -1
- package/web/.next/server/chunks/ssr/_9215e9ec._.js.map +1 -1
- package/web/.next/server/chunks/ssr/_a5a5901d._.js +1 -1
- package/web/.next/server/chunks/ssr/_a5a5901d._.js.map +1 -1
- package/web/.next/server/chunks/ssr/_ad09f271._.js +1 -1
- package/web/.next/server/chunks/ssr/_ad09f271._.js.map +1 -1
- package/web/.next/server/chunks/ssr/_baff78d8._.js +3 -0
- package/web/.next/server/chunks/ssr/{_2f8f89fb._.js.map → _baff78d8._.js.map} +1 -1
- package/web/.next/server/chunks/ssr/_c3f595c6._.js +1 -1
- package/web/.next/server/chunks/ssr/_c3f595c6._.js.map +1 -1
- package/web/.next/server/chunks/ssr/_ea9e1556._.js +1 -1
- package/web/.next/server/chunks/ssr/_ea9e1556._.js.map +1 -1
- package/web/.next/server/chunks/ssr/_f1ba9be6._.js +2 -2
- package/web/.next/server/chunks/ssr/_f1ba9be6._.js.map +1 -1
- package/web/.next/server/chunks/ssr/_f33cd07e._.js +2 -2
- package/web/.next/server/chunks/ssr/_f33cd07e._.js.map +1 -1
- package/web/.next/server/chunks/ssr/_f8b45233._.js +1 -1
- package/web/.next/server/chunks/ssr/_f8b45233._.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/f3a1f_components_common_control-center-drawer_repository-drawer-client_tsx_39a00c03._.js +1 -1
- package/web/.next/server/chunks/ssr/f3a1f_components_common_control-center-drawer_repository-drawer-client_tsx_39a00c03._.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_895e5bfa._.js +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web_components_895e5bfa._.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/translations_23dd5e7e._.js +1 -1
- package/web/.next/server/chunks/ssr/translations_23dd5e7e._.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 +47 -47
- package/web/.next/static/chunks/{dc21cf85bfa262a7.js → 09f442ecfccd5e0d.js} +2 -2
- package/web/.next/static/chunks/{29f0d874b1fde3d6.js → 16eea21868510afd.js} +2 -2
- package/web/.next/static/chunks/{cf75fade434602c6.js → 213188d0bd7e41ea.js} +2 -2
- package/web/.next/static/chunks/32a9e594b4ec7c60.js +1 -0
- package/web/.next/static/chunks/4989e6b776fe69a4.js +1 -0
- package/web/.next/static/chunks/{cf000ba1a3f11439.js → 638b1a351176914f.js} +1 -1
- package/web/.next/static/chunks/{498e45f8e05a5491.js → 70a6aa0e6eb56f2d.js} +1 -1
- package/web/.next/static/chunks/{d9e4d90ef254da84.js → 76f5ca4fa9ec1883.js} +1 -1
- package/web/.next/static/chunks/{ce0316338f7e01e6.js → 97bda8f4052ed0b1.js} +1 -1
- package/web/.next/static/chunks/9dc9295e81ddd7f9.js +1 -0
- package/web/.next/static/chunks/{25e894a1de46b5fb.js → 9ed313bf5401f956.js} +1 -1
- package/web/.next/static/chunks/{ce87ded6cc38b4de.js → a0220f989d9eb10f.js} +1 -1
- package/web/.next/static/chunks/c0e13e7d1601bc5d.js +1 -0
- package/web/.next/static/chunks/{56955fa252a9f3ed.js → d2ee0c7987eb906e.js} +2 -2
- package/web/.next/static/chunks/{a8243f8d06bdcef0.js → dedf6ca63c5468fa.js} +2 -2
- package/web/.next/static/chunks/eeadf13c0ea6cbe0.css +1 -0
- package/web/.next/static/chunks/{2609c8fc6f14cb26.js → ffc2783191dfcea4.js} +1 -1
- package/web/.next/server/chunks/ssr/_2f8f89fb._.js +0 -3
- package/web/.next/server/chunks/ssr/_8b57edb8._.js.map +0 -1
- package/web/.next/static/chunks/28ae5046faef6cec.js +0 -1
- package/web/.next/static/chunks/400e93efac983a76.css +0 -1
- package/web/.next/static/chunks/7f491899a2fe2fd7.js +0 -1
- package/web/.next/static/chunks/e6398f94cffe9bc2.js +0 -1
- package/web/.next/static/chunks/ecfd93d61bf4d933.js +0 -1
- /package/web/.next/static/{rav6zzO3q2NtCKwg9XZXP → 5SA0DJ6o7rNc22_hO-cTT}/_buildManifest.js +0 -0
- /package/web/.next/static/{rav6zzO3q2NtCKwg9XZXP → 5SA0DJ6o7rNc22_hO-cTT}/_clientMiddlewareManifest.json +0 -0
- /package/web/.next/static/{rav6zzO3q2NtCKwg9XZXP → 5SA0DJ6o7rNc22_hO-cTT}/_ssgManifest.js +0 -0
|
@@ -13,11 +13,11 @@ async function fetchChatState(featureId) {
|
|
|
13
13
|
}
|
|
14
14
|
return res.json();
|
|
15
15
|
}
|
|
16
|
-
async function postMessage(featureId, content, worktreePath) {
|
|
16
|
+
async function postMessage(featureId, content, worktreePath, model, agentType) {
|
|
17
17
|
const res = await fetch(`/api/interactive/chat/${featureId}/messages`, {
|
|
18
18
|
method: 'POST',
|
|
19
19
|
headers: { 'Content-Type': 'application/json' },
|
|
20
|
-
body: JSON.stringify({ content, worktreePath }),
|
|
20
|
+
body: JSON.stringify({ content, worktreePath, model, agentType }),
|
|
21
21
|
});
|
|
22
22
|
if (!res.ok)
|
|
23
23
|
throw new Error(`Failed to send message: ${res.status}`);
|
|
@@ -43,6 +43,24 @@ function chatQueryKey(featureId) {
|
|
|
43
43
|
*/
|
|
44
44
|
export function useChatRuntime(featureId, worktreePath, options) {
|
|
45
45
|
const queryClient = useQueryClient();
|
|
46
|
+
// Keep a ref to the latest model/agent so the mutation closure always
|
|
47
|
+
// reads the current value without depending on stale captures.
|
|
48
|
+
const modelRef = useRef(options?.model);
|
|
49
|
+
const agentTypeRef = useRef(options?.agentType);
|
|
50
|
+
modelRef.current = options?.model;
|
|
51
|
+
agentTypeRef.current = options?.agentType;
|
|
52
|
+
// ── Debug events (dev mode only) ────────────────────────────────────────
|
|
53
|
+
const debugModeRef = useRef(options?.debugMode ?? false);
|
|
54
|
+
debugModeRef.current = options?.debugMode ?? false;
|
|
55
|
+
const [debugEvents, setDebugEvents] = useState([]);
|
|
56
|
+
const pushDebug = useCallback((label, detail) => {
|
|
57
|
+
if (!debugModeRef.current)
|
|
58
|
+
return;
|
|
59
|
+
setDebugEvents((prev) => [
|
|
60
|
+
...prev,
|
|
61
|
+
{ id: `dbg-${Date.now()}-${Math.random()}`, timestamp: new Date(), label, detail },
|
|
62
|
+
]);
|
|
63
|
+
}, []);
|
|
46
64
|
// ── TanStack Query: fetch messages from backend ─────────────────────────
|
|
47
65
|
const { data: chatState, isLoading: isChatLoading } = useQuery({
|
|
48
66
|
queryKey: chatQueryKey(featureId),
|
|
@@ -57,6 +75,18 @@ export function useChatRuntime(featureId, worktreePath, options) {
|
|
|
57
75
|
}, [chatState?.turnStatus, featureId]);
|
|
58
76
|
const messages = useMemo(() => chatState?.messages ?? [], [chatState?.messages]);
|
|
59
77
|
const sessionStatus = chatState?.sessionStatus ?? null;
|
|
78
|
+
// Track session status changes for debug
|
|
79
|
+
const prevSessionStatusRef = useRef(null);
|
|
80
|
+
useEffect(() => {
|
|
81
|
+
if (sessionStatus && sessionStatus !== prevSessionStatusRef.current) {
|
|
82
|
+
const info = chatState?.sessionInfo;
|
|
83
|
+
const detail = info
|
|
84
|
+
? `model=${info.model ?? '?'}, sid=${info.sessionId?.slice(0, 8) ?? '?'}`
|
|
85
|
+
: undefined;
|
|
86
|
+
pushDebug(`session_${sessionStatus}`, detail);
|
|
87
|
+
}
|
|
88
|
+
prevSessionStatusRef.current = sessionStatus;
|
|
89
|
+
}, [sessionStatus, chatState?.sessionInfo, pushDebug]);
|
|
60
90
|
const backendStreamingText = chatState?.streamingText ?? null;
|
|
61
91
|
// Cache last known sessionInfo so PID stays visible after process exits
|
|
62
92
|
const lastSessionInfoRef = useRef(null);
|
|
@@ -106,8 +136,17 @@ export function useChatRuntime(featureId, worktreePath, options) {
|
|
|
106
136
|
// Ignore
|
|
107
137
|
}
|
|
108
138
|
});
|
|
109
|
-
es.addEventListener('activity', () => {
|
|
139
|
+
es.addEventListener('activity', (event) => {
|
|
110
140
|
cancelAwaiting();
|
|
141
|
+
try {
|
|
142
|
+
const data = JSON.parse(event.data);
|
|
143
|
+
if (data.activity) {
|
|
144
|
+
pushDebug(`[${data.activity.kind}] ${data.activity.label}`, data.activity.detail);
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
catch {
|
|
148
|
+
// Ignore
|
|
149
|
+
}
|
|
111
150
|
// Tool events are already persisted to DB — just refetch to show them
|
|
112
151
|
void queryClient.invalidateQueries({ queryKey: chatQueryKey(featureId) });
|
|
113
152
|
});
|
|
@@ -117,6 +156,7 @@ export function useChatRuntime(featureId, worktreePath, options) {
|
|
|
117
156
|
if (data.log) {
|
|
118
157
|
cancelAwaiting();
|
|
119
158
|
setStatusLog(data.log);
|
|
159
|
+
pushDebug('log', data.log);
|
|
120
160
|
}
|
|
121
161
|
}
|
|
122
162
|
catch {
|
|
@@ -126,6 +166,7 @@ export function useChatRuntime(featureId, worktreePath, options) {
|
|
|
126
166
|
es.addEventListener('done', () => {
|
|
127
167
|
setStatusLog(null);
|
|
128
168
|
cancelAwaiting();
|
|
169
|
+
pushDebug('turn_done');
|
|
129
170
|
// Refetch first, THEN clear local streaming state so there's no gap
|
|
130
171
|
void queryClient.invalidateQueries({ queryKey: chatQueryKey(featureId) }).then(() => {
|
|
131
172
|
setStreamingText('');
|
|
@@ -138,11 +179,12 @@ export function useChatRuntime(featureId, worktreePath, options) {
|
|
|
138
179
|
es.close();
|
|
139
180
|
eventSourceRef.current = null;
|
|
140
181
|
};
|
|
141
|
-
}, [featureId, queryClient, cancelAwaiting]);
|
|
182
|
+
}, [featureId, queryClient, cancelAwaiting, pushDebug]);
|
|
142
183
|
// ── Mutation: send user message ─────────────────────────────────────────
|
|
143
184
|
const sendMutation = useMutation({
|
|
144
|
-
mutationFn: (content) => postMessage(featureId, content, worktreePath ?? ''),
|
|
185
|
+
mutationFn: (content) => postMessage(featureId, content, worktreePath ?? '', modelRef.current, agentTypeRef.current),
|
|
145
186
|
onMutate: async (content) => {
|
|
187
|
+
pushDebug('send_message', `model=${modelRef.current ?? 'default'}, agent=${agentTypeRef.current ?? 'default'}, len=${content.length}`);
|
|
146
188
|
startAwaiting();
|
|
147
189
|
// Cancel in-flight refetches so our optimistic update isn't overwritten
|
|
148
190
|
await queryClient.cancelQueries({ queryKey: chatQueryKey(featureId) });
|
|
@@ -184,7 +226,47 @@ export function useChatRuntime(featureId, worktreePath, options) {
|
|
|
184
226
|
// ── Build thread messages for assistant-ui ─────────────────────────────
|
|
185
227
|
const activeStreamText = streamingText ?? backendStreamingText ?? '';
|
|
186
228
|
const threadMessages = useMemo(() => {
|
|
187
|
-
const
|
|
229
|
+
const chatMessages = messages.map(toThreadMessage);
|
|
230
|
+
// Merge debug bubbles into the timeline by timestamp
|
|
231
|
+
let result;
|
|
232
|
+
if (options?.debugMode && debugEvents.length > 0) {
|
|
233
|
+
const debugMessages = debugEvents.map((evt) => ({
|
|
234
|
+
id: evt.id,
|
|
235
|
+
role: 'assistant',
|
|
236
|
+
content: [
|
|
237
|
+
{
|
|
238
|
+
type: 'text',
|
|
239
|
+
text: evt.detail ? `🔧 **${evt.label}** — ${evt.detail}` : `🔧 **${evt.label}**`,
|
|
240
|
+
},
|
|
241
|
+
],
|
|
242
|
+
createdAt: evt.timestamp,
|
|
243
|
+
}));
|
|
244
|
+
// Merge both arrays (both already sorted by time) into one sorted list
|
|
245
|
+
result = [];
|
|
246
|
+
let ci = 0;
|
|
247
|
+
let di = 0;
|
|
248
|
+
while (ci < chatMessages.length && di < debugMessages.length) {
|
|
249
|
+
const chatTime = chatMessages[ci].createdAt
|
|
250
|
+
? new Date(chatMessages[ci].createdAt).getTime()
|
|
251
|
+
: 0;
|
|
252
|
+
const dbgTime = debugMessages[di].createdAt
|
|
253
|
+
? new Date(debugMessages[di].createdAt).getTime()
|
|
254
|
+
: 0;
|
|
255
|
+
if (chatTime <= dbgTime) {
|
|
256
|
+
result.push(chatMessages[ci++]);
|
|
257
|
+
}
|
|
258
|
+
else {
|
|
259
|
+
result.push(debugMessages[di++]);
|
|
260
|
+
}
|
|
261
|
+
}
|
|
262
|
+
while (ci < chatMessages.length)
|
|
263
|
+
result.push(chatMessages[ci++]);
|
|
264
|
+
while (di < debugMessages.length)
|
|
265
|
+
result.push(debugMessages[di++]);
|
|
266
|
+
}
|
|
267
|
+
else {
|
|
268
|
+
result = chatMessages;
|
|
269
|
+
}
|
|
188
270
|
// Streaming text as the last message — may include a live activity suffix
|
|
189
271
|
if (activeStreamText.trim()) {
|
|
190
272
|
const parts = [{ type: 'text', text: activeStreamText }];
|
|
@@ -217,7 +299,15 @@ export function useChatRuntime(featureId, worktreePath, options) {
|
|
|
217
299
|
});
|
|
218
300
|
}
|
|
219
301
|
return result;
|
|
220
|
-
}, [
|
|
302
|
+
}, [
|
|
303
|
+
messages,
|
|
304
|
+
activeStreamText,
|
|
305
|
+
awaitingResponse,
|
|
306
|
+
sessionStatus,
|
|
307
|
+
statusLog,
|
|
308
|
+
options?.debugMode,
|
|
309
|
+
debugEvents,
|
|
310
|
+
]);
|
|
221
311
|
// ── Status info for typing indicator ──────────────────────────────────
|
|
222
312
|
const status = useMemo(() => {
|
|
223
313
|
if (!isRunning)
|
|
@@ -242,6 +332,7 @@ export function useChatRuntime(featureId, worktreePath, options) {
|
|
|
242
332
|
if (!res.ok)
|
|
243
333
|
throw new Error(`Failed to clear chat: ${res.status}`);
|
|
244
334
|
setStreamingText('');
|
|
335
|
+
setDebugEvents([]);
|
|
245
336
|
setStatusLog(null);
|
|
246
337
|
cancelAwaiting();
|
|
247
338
|
void queryClient.invalidateQueries({ queryKey: chatQueryKey(featureId) });
|
package/dist/src/presentation/web/components/features/settings/AgentModelPicker/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../../../../src/presentation/web/components/features/settings/AgentModelPicker/index.tsx"],"names":[],"mappings":"AAaA,MAAM,WAAW,qBAAqB;IACpC,gBAAgB,EAAE,MAAM,CAAC;IACzB,YAAY,EAAE,MAAM,CAAC;IACrB,kBAAkB,CAAC,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAChE,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,0EAA0E;IAC1E,IAAI,EAAE,UAAU,GAAG,UAAU,CAAC;CAC/B;AAED,wBAAgB,gBAAgB,CAAC,EAC/B,gBAAgB,EAChB,YAAY,EACZ,kBAAkB,EAClB,QAAQ,EACR,SAAS,EACT,IAAI,GACL,EAAE,qBAAqB,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../../../../src/presentation/web/components/features/settings/AgentModelPicker/index.tsx"],"names":[],"mappings":"AAaA,MAAM,WAAW,qBAAqB;IACpC,gBAAgB,EAAE,MAAM,CAAC;IACzB,YAAY,EAAE,MAAM,CAAC;IACrB,kBAAkB,CAAC,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAChE,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,0EAA0E;IAC1E,IAAI,EAAE,UAAU,GAAG,UAAU,CAAC;CAC/B;AAED,wBAAgB,gBAAgB,CAAC,EAC/B,gBAAgB,EAChB,YAAY,EACZ,kBAAkB,EAClB,QAAQ,EACR,SAAS,EACT,IAAI,GACL,EAAE,qBAAqB,2CAqNvB"}
|
|
@@ -84,7 +84,7 @@ export function AgentModelPicker({ initialAgentType, initialModel, onAgentModelC
|
|
|
84
84
|
const agentLabel = groups.find((g) => g.agentType === agentType)?.label ?? agentType;
|
|
85
85
|
const modelName = model ? getModelMeta(model).displayName || model : null;
|
|
86
86
|
const activeGroup = drillAgent ? groups.find((g) => g.agentType === drillAgent) : null;
|
|
87
|
-
return (_jsxs("div", { className: cn('flex flex-col gap-1', className), children: [_jsxs(Popover, { open: open, onOpenChange: setOpen, children: [_jsx(PopoverTrigger, { asChild: true, children: _jsx(Button, { variant: "outline", role: "combobox", "aria-expanded": open, disabled: isDisabled, className: "w-auto cursor-pointer justify-start font-normal hover:border-violet-300 hover:bg-violet-50/50 dark:hover:border-violet-700 dark:hover:bg-violet-950/30", children: _jsxs("span", { className: "flex items-center gap-2 truncate", children: [_jsx(AgentIcon, { className: "h-4 w-4 shrink-0" }), loading ? ('Loading…') : (_jsxs("span", { className: "flex items-center gap-1", children: [_jsx("span", { className: "text-muted-foreground text-xs", children: agentLabel }), modelName ? (_jsxs(_Fragment, { children: [_jsx("span", { className: "text-muted-foreground/50 text-xs", children: "\u00B7" }), _jsx("span", { className: "text-xs font-medium", children: modelName })] })) : null] }))] }) }) }), _jsx(PopoverContent, { className: "w-(--radix-popover-trigger-width) overflow-hidden p-0", align: "start", children: _jsxs("div", { className: "flex transition-transform duration-200 ease-in-out", style: { transform: `translateX(${level === 1 ? '-50%' : '0%'})`, width: '200%' }, children: [_jsxs("div", { className: "w-1/2 shrink-0", children: [_jsx("div", { className: "text-muted-foreground border-b px-3 py-2 text-xs font-medium", children: "Select agent" }), groups.map((group) => {
|
|
87
|
+
return (_jsxs("div", { className: cn('flex flex-col gap-1', className), children: [_jsxs(Popover, { open: open, onOpenChange: setOpen, children: [_jsx(PopoverTrigger, { asChild: true, children: _jsx(Button, { type: "button", variant: "outline", role: "combobox", "aria-expanded": open, disabled: isDisabled, className: "w-auto cursor-pointer justify-start font-normal hover:border-violet-300 hover:bg-violet-50/50 dark:hover:border-violet-700 dark:hover:bg-violet-950/30", children: _jsxs("span", { className: "flex items-center gap-2 truncate", children: [_jsx(AgentIcon, { className: "h-4 w-4 shrink-0" }), loading ? ('Loading…') : (_jsxs("span", { className: "flex items-center gap-1", children: [_jsx("span", { className: "text-muted-foreground text-xs", children: agentLabel }), modelName ? (_jsxs(_Fragment, { children: [_jsx("span", { className: "text-muted-foreground/50 text-xs", children: "\u00B7" }), _jsx("span", { className: "text-xs font-medium", children: modelName })] })) : null] }))] }) }) }), _jsx(PopoverContent, { className: "z-[70] w-(--radix-popover-trigger-width) overflow-hidden p-0", align: "start", children: _jsxs("div", { className: "flex transition-transform duration-200 ease-in-out", style: { transform: `translateX(${level === 1 ? '-50%' : '0%'})`, width: '200%' }, children: [_jsxs("div", { className: "w-1/2 shrink-0", children: [_jsx("div", { className: "text-muted-foreground border-b px-3 py-2 text-xs font-medium", children: "Select agent" }), groups.map((group) => {
|
|
88
88
|
const GroupIcon = getAgentTypeIcon(group.agentType);
|
|
89
89
|
const isActive = agentType === group.agentType;
|
|
90
90
|
const hasModels = group.models.length > 0;
|
package/dist/src/presentation/web/components/features/settings/settings-page-client.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"settings-page-client.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/features/settings/settings-page-client.tsx"],"names":[],"mappings":"AA4CA,OAAO,KAAK,EACV,QAAQ,EAKT,MAAM,sCAAsC,CAAC;AAC9C,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,uCAAuC,CAAC;AA8B/E,MAAM,WAAW,uBAAuB;IACtC,QAAQ,EAAE,QAAQ,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,kBAAkB,CAAC,EAAE,iBAAiB,EAAE,CAAC;CAC1C;AA+QD,wBAAgB,kBAAkB,CAAC,EACjC,QAAQ,EACR,QAAQ,EACR,UAAU,EACV,kBAAkB,GACnB,EAAE,uBAAuB,
|
|
1
|
+
{"version":3,"file":"settings-page-client.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/features/settings/settings-page-client.tsx"],"names":[],"mappings":"AA4CA,OAAO,KAAK,EACV,QAAQ,EAKT,MAAM,sCAAsC,CAAC;AAC9C,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,uCAAuC,CAAC;AA8B/E,MAAM,WAAW,uBAAuB;IACtC,QAAQ,EAAE,QAAQ,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,kBAAkB,CAAC,EAAE,iBAAiB,EAAE,CAAC;CAC1C;AA+QD,wBAAgB,kBAAkB,CAAC,EACjC,QAAQ,EACR,QAAQ,EACR,UAAU,EACV,kBAAkB,GACnB,EAAE,uBAAuB,2CA24CzB"}
|
|
@@ -178,6 +178,7 @@ export function SettingsPageClient({ settings, shepHome, dbFileSize, availableTe
|
|
|
178
178
|
const [researchTimeout, setResearchTimeout] = useState(String(Math.round((stageTimeoutsConfig?.researchMs ?? 1_800_000) / 1000)));
|
|
179
179
|
const [planTimeout, setPlanTimeout] = useState(String(Math.round((stageTimeoutsConfig?.planMs ?? 1_800_000) / 1000)));
|
|
180
180
|
const [implementTimeout, setImplementTimeout] = useState(String(Math.round((stageTimeoutsConfig?.implementMs ?? 1_800_000) / 1000)));
|
|
181
|
+
const [fastImplementTimeout, setFastImplementTimeout] = useState(String(Math.round((stageTimeoutsConfig?.fastImplementMs ?? 1_800_000) / 1000)));
|
|
181
182
|
const [mergeTimeout, setMergeTimeout] = useState(String(Math.round((stageTimeoutsConfig?.mergeMs ?? 1_800_000) / 1000)));
|
|
182
183
|
// Analyze-repo agent timeout state
|
|
183
184
|
const analyzeRepoConfig = settings.workflow.analyzeRepoTimeouts;
|
|
@@ -223,6 +224,9 @@ export function SettingsPageClient({ settings, shepHome, dbFileSize, availableTe
|
|
|
223
224
|
const originalImplementTimeout = stageTimeoutsConfig?.implementMs != null
|
|
224
225
|
? String(Math.round(stageTimeoutsConfig.implementMs / 1000))
|
|
225
226
|
: '';
|
|
227
|
+
const originalFastImplementTimeout = stageTimeoutsConfig?.fastImplementMs != null
|
|
228
|
+
? String(Math.round(stageTimeoutsConfig.fastImplementMs / 1000))
|
|
229
|
+
: '';
|
|
226
230
|
const originalMergeTimeout = stageTimeoutsConfig?.mergeMs != null
|
|
227
231
|
? String(Math.round(stageTimeoutsConfig.mergeMs / 1000))
|
|
228
232
|
: '';
|
|
@@ -275,6 +279,7 @@ export function SettingsPageClient({ settings, shepHome, dbFileSize, availableTe
|
|
|
275
279
|
researchMs: secondsToMs(overrides.researchTimeout ?? researchTimeout),
|
|
276
280
|
planMs: secondsToMs(overrides.planTimeout ?? planTimeout),
|
|
277
281
|
implementMs: secondsToMs(overrides.implementTimeout ?? implementTimeout),
|
|
282
|
+
fastImplementMs: secondsToMs(overrides.fastImplementTimeout ?? fastImplementTimeout),
|
|
278
283
|
mergeMs: secondsToMs(overrides.mergeTimeout ?? mergeTimeout),
|
|
279
284
|
},
|
|
280
285
|
analyzeRepoTimeouts: {
|
|
@@ -473,6 +478,9 @@ export function SettingsPageClient({ settings, shepHome, dbFileSize, availableTe
|
|
|
473
478
|
}, defaultSeconds: 1800 }) }), _jsx(SettingsRow, { label: t('settings.stageTimeouts.implement'), description: t('settings.stageTimeouts.implementDescription'), htmlFor: "timeout-implement", children: _jsx(TimeoutSlider, { id: "timeout-implement", testId: "timeout-implement-input", value: implementTimeout, onChange: setImplementTimeout, onBlur: () => {
|
|
474
479
|
if (implementTimeout !== originalImplementTimeout)
|
|
475
480
|
save(buildWorkflowPayload({ implementTimeout }));
|
|
481
|
+
}, defaultSeconds: 1800 }) }), _jsx(SettingsRow, { label: t('settings.stageTimeouts.fastImplement'), description: t('settings.stageTimeouts.fastImplementDescription'), htmlFor: "timeout-fast-implement", children: _jsx(TimeoutSlider, { id: "timeout-fast-implement", testId: "timeout-fast-implement-input", value: fastImplementTimeout, onChange: setFastImplementTimeout, onBlur: () => {
|
|
482
|
+
if (fastImplementTimeout !== originalFastImplementTimeout)
|
|
483
|
+
save(buildWorkflowPayload({ fastImplementTimeout }));
|
|
476
484
|
}, defaultSeconds: 1800 }) }), _jsx(SettingsRow, { label: t('settings.stageTimeouts.merge'), description: t('settings.stageTimeouts.mergeDescription'), htmlFor: "timeout-merge", children: _jsx(TimeoutSlider, { id: "timeout-merge", testId: "timeout-merge-input", value: mergeTimeout, onChange: setMergeTimeout, onBlur: () => {
|
|
477
485
|
if (mergeTimeout !== originalMergeTimeout)
|
|
478
486
|
save(buildWorkflowPayload({ mergeTimeout }));
|
package/dist/src/presentation/web/components/features/settings/settings-page-client.stories.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"settings-page-client.stories.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/features/settings/settings-page-client.stories.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAQ,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AACvD,OAAO,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AAM5D,QAAA,MAAM,IAAI;;;;;;;CAOiC,CAAC;AAE5C,eAAe,IAAI,CAAC;AACpB,KAAK,KAAK,GAAG,QAAQ,CAAC,OAAO,IAAI,CAAC,CAAC;AAEnC,eAAO,MAAM,OAAO,EAAE,KAMrB,CAAC;AAEF,eAAO,MAAM,WAAW,EAAE,KAqBzB,CAAC;AAEF,eAAO,MAAM,eAAe,EAAE,KAa7B,CAAC;AAEF,eAAO,MAAM,cAAc,EAAE,
|
|
1
|
+
{"version":3,"file":"settings-page-client.stories.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/features/settings/settings-page-client.stories.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAQ,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AACvD,OAAO,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AAM5D,QAAA,MAAM,IAAI;;;;;;;CAOiC,CAAC;AAE5C,eAAe,IAAI,CAAC;AACpB,KAAK,KAAK,GAAG,QAAQ,CAAC,OAAO,IAAI,CAAC,CAAC;AAEnC,eAAO,MAAM,OAAO,EAAE,KAMrB,CAAC;AAEF,eAAO,MAAM,WAAW,EAAE,KAqBzB,CAAC;AAEF,eAAO,MAAM,eAAe,EAAE,KAa7B,CAAC;AAEF,eAAO,MAAM,cAAc,EAAE,KAuB5B,CAAC"}
|
package/dist/src/presentation/web/components/features/settings/workflow-settings-section.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"workflow-settings-section.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/features/settings/workflow-settings-section.tsx"],"names":[],"mappings":"AAYA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sCAAsC,CAAC;AAE3E,MAAM,WAAW,4BAA4B;IAC3C,QAAQ,EAAE,cAAc,CAAC;CAC1B;AAED,wBAAgB,uBAAuB,CAAC,EAAE,QAAQ,EAAE,EAAE,4BAA4B,2CA+
|
|
1
|
+
{"version":3,"file":"workflow-settings-section.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/features/settings/workflow-settings-section.tsx"],"names":[],"mappings":"AAYA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sCAAsC,CAAC;AAE3E,MAAM,WAAW,4BAA4B;IAC3C,QAAQ,EAAE,cAAc,CAAC;CAC1B;AAED,wBAAgB,uBAAuB,CAAC,EAAE,QAAQ,EAAE,EAAE,4BAA4B,2CA+fjF"}
|
|
@@ -30,6 +30,7 @@ export function WorkflowSettingsSection({ workflow }) {
|
|
|
30
30
|
const [researchTimeout, setResearchTimeout] = useState(String(Math.round((st?.researchMs ?? 1_800_000) / 1000)));
|
|
31
31
|
const [planTimeout, setPlanTimeout] = useState(String(Math.round((st?.planMs ?? 1_800_000) / 1000)));
|
|
32
32
|
const [implementTimeout, setImplementTimeout] = useState(String(Math.round((st?.implementMs ?? 1_800_000) / 1000)));
|
|
33
|
+
const [fastImplementTimeout, setFastImplementTimeout] = useState(String(Math.round((st?.fastImplementMs ?? 1_800_000) / 1000)));
|
|
33
34
|
const [mergeTimeout, setMergeTimeout] = useState(String(Math.round((st?.mergeMs ?? 1_800_000) / 1000)));
|
|
34
35
|
// Analyze-repo agent timeout state
|
|
35
36
|
const art = workflow.analyzeRepoTimeouts;
|
|
@@ -78,6 +79,7 @@ export function WorkflowSettingsSection({ workflow }) {
|
|
|
78
79
|
researchMs: secondsToMs(overrides.researchTimeout ?? researchTimeout),
|
|
79
80
|
planMs: secondsToMs(overrides.planTimeout ?? planTimeout),
|
|
80
81
|
implementMs: secondsToMs(overrides.implementTimeout ?? implementTimeout),
|
|
82
|
+
fastImplementMs: secondsToMs(overrides.fastImplementTimeout ?? fastImplementTimeout),
|
|
81
83
|
mergeMs: secondsToMs(overrides.mergeTimeout ?? mergeTimeout),
|
|
82
84
|
},
|
|
83
85
|
analyzeRepoTimeouts: {
|
|
@@ -112,6 +114,7 @@ export function WorkflowSettingsSection({ workflow }) {
|
|
|
112
114
|
const originalResearchTimeout = st?.researchMs != null ? String(Math.round(st.researchMs / 1000)) : '';
|
|
113
115
|
const originalPlanTimeout = st?.planMs != null ? String(Math.round(st.planMs / 1000)) : '';
|
|
114
116
|
const originalImplementTimeout = st?.implementMs != null ? String(Math.round(st.implementMs / 1000)) : '';
|
|
117
|
+
const originalFastImplementTimeout = st?.fastImplementMs != null ? String(Math.round(st.fastImplementMs / 1000)) : '';
|
|
115
118
|
const originalMergeTimeout = st?.mergeMs != null ? String(Math.round(st.mergeMs / 1000)) : '';
|
|
116
119
|
const originalAnalyzeRepoTimeout = art?.analyzeMs != null ? String(Math.round(art.analyzeMs / 1000)) : '';
|
|
117
120
|
const FEATURE_AGENT_FIELDS = [
|
|
@@ -155,6 +158,14 @@ export function WorkflowSettingsSection({ workflow }) {
|
|
|
155
158
|
setter: setImplementTimeout,
|
|
156
159
|
original: originalImplementTimeout,
|
|
157
160
|
},
|
|
161
|
+
{
|
|
162
|
+
key: 'fastImplementTimeout',
|
|
163
|
+
label: 'Fast Implement',
|
|
164
|
+
defaultSeconds: 1800,
|
|
165
|
+
state: fastImplementTimeout,
|
|
166
|
+
setter: setFastImplementTimeout,
|
|
167
|
+
original: originalFastImplementTimeout,
|
|
168
|
+
},
|
|
158
169
|
{
|
|
159
170
|
key: 'mergeTimeout',
|
|
160
171
|
label: 'Merge',
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"workflow-settings-section.stories.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/features/settings/workflow-settings-section.stories.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAQ,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AACvD,OAAO,EAAE,uBAAuB,EAAE,MAAM,6BAA6B,CAAC;AAEtE,QAAA,MAAM,IAAI;;;;;;;CAOsC,CAAC;AAEjD,eAAe,IAAI,CAAC;AACpB,KAAK,KAAK,GAAG,QAAQ,CAAC,OAAO,IAAI,CAAC,CAAC;AAEnC,eAAO,MAAM,OAAO,EAAE,KAgBrB,CAAC;AAEF,eAAO,MAAM,UAAU,EAAE,
|
|
1
|
+
{"version":3,"file":"workflow-settings-section.stories.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/features/settings/workflow-settings-section.stories.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAQ,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AACvD,OAAO,EAAE,uBAAuB,EAAE,MAAM,6BAA6B,CAAC;AAEtE,QAAA,MAAM,IAAI;;;;;;;CAOsC,CAAC;AAEjD,eAAe,IAAI,CAAC;AACpB,KAAK,KAAK,GAAG,QAAQ,CAAC,OAAO,IAAI,CAAC,CAAC;AAEnC,eAAO,MAAM,OAAO,EAAE,KAgBrB,CAAC;AAEF,eAAO,MAAM,UAAU,EAAE,KA+BxB,CAAC;AAEF,eAAO,MAAM,cAAc,EAAE,KA+B5B,CAAC"}
|
package/dist/src/presentation/web/components/features/settings/workflow-settings-section.stories.js
CHANGED
|
@@ -44,6 +44,7 @@ export const AllEnabled = {
|
|
|
44
44
|
researchMs: 600000,
|
|
45
45
|
planMs: 600000,
|
|
46
46
|
implementMs: 600000,
|
|
47
|
+
fastImplementMs: 600000,
|
|
47
48
|
mergeMs: 600000,
|
|
48
49
|
},
|
|
49
50
|
analyzeRepoTimeouts: {
|
|
@@ -75,6 +76,7 @@ export const WithCiSettings = {
|
|
|
75
76
|
researchMs: 1200000,
|
|
76
77
|
planMs: 1200000,
|
|
77
78
|
implementMs: 1200000,
|
|
79
|
+
fastImplementMs: 1200000,
|
|
78
80
|
mergeMs: 1200000,
|
|
79
81
|
},
|
|
80
82
|
analyzeRepoTimeouts: {
|
|
@@ -146,6 +146,8 @@
|
|
|
146
146
|
"planDescription": "مهلة تخطيط التنفيذ",
|
|
147
147
|
"implement": "التنفيذ",
|
|
148
148
|
"implementDescription": "مهلة تنفيذ الكود",
|
|
149
|
+
"fastImplement": "التنفيذ السريع",
|
|
150
|
+
"fastImplementDescription": "مهلة التنفيذ في الوضع السريع",
|
|
149
151
|
"merge": "الدمج",
|
|
150
152
|
"mergeDescription": "مهلة إنشاء PR والدمج",
|
|
151
153
|
"hint": "لكل وكيل مهل زمنية مستقلة وقابلة للتكوين لكل مرحلة. عند تجاوز مرحلة لمهلتها الزمنية، يتم إنهاء الوكيل. المهل الأطول مفيدة للتنفيذات المعقدة. المهلة الافتراضية لوكيل الميزات 30 دقيقة لكل مرحلة. المهلة الافتراضية لوكيل تحليل المستودع 10 دقائق."
|
|
@@ -134,6 +134,8 @@
|
|
|
134
134
|
"planDescription": "Zeitlimit für Implementierungsplanung",
|
|
135
135
|
"implement": "Implementierung",
|
|
136
136
|
"implementDescription": "Zeitlimit für Code-Implementierung",
|
|
137
|
+
"fastImplement": "Schnelle Implementierung",
|
|
138
|
+
"fastImplementDescription": "Zeitlimit für Schnellmodus-Implementierung",
|
|
137
139
|
"merge": "Merge",
|
|
138
140
|
"mergeDescription": "Zeitlimit für PR-Erstellung und Merge",
|
|
139
141
|
"hint": "Jeder Agent hat unabhängig konfigurierbare Phasen-Zeitlimits. Wenn eine Phase ihr Zeitlimit überschreitet, wird der Agent beendet. Längere Zeitlimits sind nützlich für komplexe Implementierungen. Feature-Agent hat standardmäßig 30 Minuten pro Phase. Repository-Analyse-Agent hat standardmäßig 10 Minuten."
|
|
@@ -146,6 +146,8 @@
|
|
|
146
146
|
"planDescription": "Implementation planning timeout",
|
|
147
147
|
"implement": "Implement",
|
|
148
148
|
"implementDescription": "Code implementation timeout",
|
|
149
|
+
"fastImplement": "Fast Implement",
|
|
150
|
+
"fastImplementDescription": "Fast mode implementation timeout",
|
|
149
151
|
"merge": "Merge",
|
|
150
152
|
"mergeDescription": "PR creation and merge timeout",
|
|
151
153
|
"hint": "Each agent has independently configurable stage timeouts. When a stage exceeds its timeout, the agent is terminated. Longer timeouts are useful for complex implementations. Feature agent defaults to 30 minutes per stage. Analyze repository agent defaults to 10 minutes."
|
|
@@ -146,6 +146,8 @@
|
|
|
146
146
|
"planDescription": "Tiempo límite de planificación de implementación",
|
|
147
147
|
"implement": "Implementar",
|
|
148
148
|
"implementDescription": "Tiempo límite de implementación de código",
|
|
149
|
+
"fastImplement": "Implementación Rápida",
|
|
150
|
+
"fastImplementDescription": "Tiempo límite de implementación en modo rápido",
|
|
149
151
|
"merge": "Fusión",
|
|
150
152
|
"mergeDescription": "Tiempo límite de creación y fusión de PR",
|
|
151
153
|
"hint": "Cada agente tiene tiempos límite de etapa configurables independientemente. Cuando una etapa excede su tiempo límite, el agente es terminado. Tiempos límite más largos son útiles para implementaciones complejas. El agente de funcionalidad tiene un valor predeterminado de 30 minutos por etapa. El agente de análisis de repositorio tiene un valor predeterminado de 10 minutos."
|
|
@@ -146,6 +146,8 @@
|
|
|
146
146
|
"planDescription": "Délai de planification de l'implémentation",
|
|
147
147
|
"implement": "Implémenter",
|
|
148
148
|
"implementDescription": "Délai d'implémentation du code",
|
|
149
|
+
"fastImplement": "Implémentation Rapide",
|
|
150
|
+
"fastImplementDescription": "Délai d'implémentation en mode rapide",
|
|
149
151
|
"merge": "Fusion",
|
|
150
152
|
"mergeDescription": "Délai de création et fusion de PR",
|
|
151
153
|
"hint": "Chaque agent a des délais par étape configurables indépendamment. Lorsqu'une étape dépasse son délai, l'agent est terminé. Des délais plus longs sont utiles pour les implémentations complexes. L'agent de fonctionnalité a un délai par défaut de 30 minutes par étape. L'agent d'analyse de dépôt a un délai par défaut de 10 minutes."
|
|
@@ -146,6 +146,8 @@
|
|
|
146
146
|
"planDescription": "תפוגת זמן תכנון מימוש",
|
|
147
147
|
"implement": "מימוש",
|
|
148
148
|
"implementDescription": "תפוגת זמן מימוש קוד",
|
|
149
|
+
"fastImplement": "מימוש מהיר",
|
|
150
|
+
"fastImplementDescription": "תפוגת זמן מימוש במצב מהיר",
|
|
149
151
|
"merge": "מיזוג",
|
|
150
152
|
"mergeDescription": "תפוגת זמן יצירת PR ומיזוג",
|
|
151
153
|
"hint": "לכל סוכן תפוגות זמן שלבים מוגדרות באופן עצמאי. כאשר שלב חורג מתפוגת הזמן שלו, הסוכן מופסק. תפוגות זמן ארוכות יותר שימושיות למימושים מורכבים. ברירת המחדל של סוכן פיצ'ר היא 30 דקות לשלב. ברירת המחדל של סוכן ניתוח מאגר היא 10 דקות."
|
|
@@ -146,6 +146,8 @@
|
|
|
146
146
|
"planDescription": "Tempo limite para planejamento de implementação",
|
|
147
147
|
"implement": "Implementar",
|
|
148
148
|
"implementDescription": "Tempo limite para implementação de código",
|
|
149
|
+
"fastImplement": "Implementação Rápida",
|
|
150
|
+
"fastImplementDescription": "Tempo limite para implementação em modo rápido",
|
|
149
151
|
"merge": "Merge",
|
|
150
152
|
"mergeDescription": "Tempo limite para criação e merge de PR",
|
|
151
153
|
"hint": "Cada agente tem tempos limite de estágio configuráveis independentemente. Quando um estágio excede seu tempo limite, o agente é encerrado. Tempos limite maiores são úteis para implementações complexas. O agente de recurso tem padrão de 30 minutos por estágio. O agente de análise de repositório tem padrão de 10 minutos."
|
|
@@ -146,6 +146,8 @@
|
|
|
146
146
|
"planDescription": "Таймаут планирования реализации",
|
|
147
147
|
"implement": "Реализация",
|
|
148
148
|
"implementDescription": "Таймаут реализации кода",
|
|
149
|
+
"fastImplement": "Быстрая Реализация",
|
|
150
|
+
"fastImplementDescription": "Таймаут реализации в быстром режиме",
|
|
149
151
|
"merge": "Слияние",
|
|
150
152
|
"mergeDescription": "Таймаут создания PR и слияния",
|
|
151
153
|
"hint": "Каждый агент имеет независимо настраиваемые таймауты этапов. При превышении таймаута агент завершается. Более длительные таймауты полезны для сложных реализаций. Агент функции по умолчанию использует 30 минут на этап. Агент анализа репозитория по умолчанию использует 10 минут."
|