@shepai/cli 1.179.1-pr536.c975f4d → 1.180.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/use-cases/applications/create-application.use-case.d.ts.map +1 -1
- package/dist/packages/core/src/application/use-cases/applications/create-application.use-case.js +7 -4
- package/dist/packages/core/src/application/workflows/application-creation.workflow.d.ts +8 -2
- package/dist/packages/core/src/application/workflows/application-creation.workflow.d.ts.map +1 -1
- package/dist/packages/core/src/application/workflows/application-creation.workflow.js +14 -24
- package/dist/packages/core/src/infrastructure/services/filesystem/node-application-file-system.service.d.ts.map +1 -1
- package/dist/packages/core/src/infrastructure/services/filesystem/node-application-file-system.service.js +7 -1
- package/dist/src/presentation/web/app/actions/update-application.d.ts +5 -0
- package/dist/src/presentation/web/app/actions/update-application.d.ts.map +1 -0
- package/dist/src/presentation/web/app/actions/update-application.js +21 -0
- package/dist/src/presentation/web/components/assistant-ui/thread.js +4 -4
- package/dist/src/presentation/web/components/features/application-page/application-page.d.ts.map +1 -1
- package/dist/src/presentation/web/components/features/application-page/application-page.js +11 -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 +2 -2
- package/dist/src/presentation/web/components/features/chat/StepTracker.d.ts +15 -2
- package/dist/src/presentation/web/components/features/chat/StepTracker.d.ts.map +1 -1
- package/dist/src/presentation/web/components/features/chat/StepTracker.js +78 -8
- package/dist/src/presentation/web/components/features/chat/useChatRuntime.d.ts +8 -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 +108 -17
- package/dist/src/presentation/web/components/features/chat/workflow-placeholder.d.ts +1 -1
- package/dist/src/presentation/web/components/features/chat/workflow-placeholder.d.ts.map +1 -1
- package/dist/src/presentation/web/components/features/chat/workflow-placeholder.js +4 -6
- 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 +32 -32
- 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 +30 -30
- 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 +33 -33
- 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 +41 -41
- 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 +41 -41
- 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 +31 -31
- 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 +31 -31
- 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 +30 -30
- 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 +33 -33
- 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 +41 -41
- 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 +41 -41
- 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 +30 -30
- 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 +31 -31
- 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 +31 -31
- 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 +7 -7
- package/web/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/api/attachments/preview/route.js.nft.json +1 -1
- package/web/.next/server/app/api/evidence/route.js.nft.json +1 -1
- package/web/.next/server/app/api/graph-data/route.js.nft.json +1 -1
- package/web/.next/server/app/api/interactive/chat/[featureId]/messages/route.js.nft.json +1 -1
- package/web/.next/server/app/application/[id]/page/server-reference-manifest.json +15 -15
- package/web/.next/server/app/application/[id]/page.js.nft.json +1 -1
- package/web/.next/server/app/application/[id]/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/features/page/server-reference-manifest.json +7 -7
- package/web/.next/server/app/features/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/settings/page/server-reference-manifest.json +10 -10
- 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 +15 -15
- 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 +13 -13
- package/web/.next/server/app/tools/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/version/page/server-reference-manifest.json +7 -7
- 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/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]__013a0318._.js +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__013a0318._.js.map +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__17dadd08._.js +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__17dadd08._.js.map +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__1925bef0._.js +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__1a9687c4._.js +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__1a9687c4._.js.map +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__24756fa9._.js +2 -2
- package/web/.next/server/chunks/ssr/[root-of-the-server]__24756fa9._.js.map +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__4ee8be85._.js +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__70986695._.js +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__70986695._.js.map +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__87bc4dac._.js +2 -2
- package/web/.next/server/chunks/ssr/[root-of-the-server]__87bc4dac._.js.map +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__a5ea76a6._.js +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__a5ea76a6._.js.map +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__bb391c45._.js +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__bb391c45._.js.map +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__dd3e834e._.js +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__dd3e834e._.js.map +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__e265da61._.js +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__f3ca7bea._.js +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__f3ca7bea._.js.map +1 -1
- package/web/.next/server/chunks/ssr/_0277d3b5._.js +2 -2
- package/web/.next/server/chunks/ssr/_0277d3b5._.js.map +1 -1
- package/web/.next/server/chunks/ssr/{_936eb52f._.js → _36489f2b._.js} +2 -2
- package/web/.next/server/chunks/ssr/{_936eb52f._.js.map → _36489f2b._.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/{_a3f47267._.js → _63fc4647._.js} +2 -2
- package/web/.next/server/chunks/ssr/{_a3f47267._.js.map → _63fc4647._.js.map} +1 -1
- package/web/.next/server/chunks/ssr/{_cd03c60d._.js → _8caadb9a._.js} +2 -2
- package/web/.next/server/chunks/ssr/{_cd03c60d._.js.map → _8caadb9a._.js.map} +1 -1
- package/web/.next/server/chunks/ssr/_946a7fc6._.js +1 -1
- package/web/.next/server/chunks/ssr/_946a7fc6._.js.map +1 -1
- package/web/.next/server/chunks/ssr/{_f97bd21d._.js → _b8e8b690._.js} +2 -2
- package/web/.next/server/chunks/ssr/{_f97bd21d._.js.map → _b8e8b690._.js.map} +1 -1
- package/web/.next/server/chunks/ssr/{_854ae39b._.js → _d44d091a._.js} +2 -2
- package/web/.next/server/chunks/ssr/{_854ae39b._.js.map → _d44d091a._.js.map} +1 -1
- package/web/.next/server/chunks/ssr/_eff1b518._.js +1 -1
- package/web/.next/server/chunks/ssr/_eff1b518._.js.map +1 -1
- package/web/.next/server/chunks/ssr/_f227429a._.js +1 -1
- package/web/.next/server/chunks/ssr/_f227429a._.js.map +1 -1
- package/web/.next/server/chunks/ssr/_f86fc1bf._.js +1 -1
- package/web/.next/server/chunks/ssr/_f86fc1bf._.js.map +1 -1
- package/web/.next/server/chunks/ssr/_f8c55130._.js +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_36f2bc45._.js +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web_36f2bc45._.js.map +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web_486908de._.js +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web_486908de._.js.map +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web_5c3596bc._.js +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web_5c3596bc._.js.map +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web_6159fef8._.js +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web_6159fef8._.js.map +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web_6326f81e._.js +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web_6326f81e._.js.map +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web_6b2fdcd8._.js +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web_6b2fdcd8._.js.map +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web_74703c9f._.js +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web_74703c9f._.js.map +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web_a8056dac._.js +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web_a8056dac._.js.map +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web_ad42cc73._.js +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web_ad42cc73._.js.map +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web_app_actions_open-ide_ts_baaca5d5._.js +3 -3
- package/web/.next/server/chunks/ssr/src_presentation_web_b00bfb08._.js +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web_b00bfb08._.js.map +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_common_base-drawer_base-drawer_tsx_97dfbbc8._.js +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web_components_common_base-drawer_base-drawer_tsx_97dfbbc8._.js.map +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web_components_features_control-center_7ac3562e._.js +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web_components_features_control-center_7ac3562e._.js.map +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web_components_features_skills_8a174cac._.js +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web_components_features_skills_8a174cac._.js.map +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web_db9fa0c2._.js +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web_f1edcf5e._.js +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web_f1edcf5e._.js.map +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web_f9436804._.js +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web_f9436804._.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 +54 -54
- package/web/.next/static/chunks/06b9d6dbf635c370.css +1 -0
- package/web/.next/static/chunks/1bc12075020723ed.js +1 -0
- package/web/.next/static/chunks/1fa1574b87bd2eb1.js +1 -0
- package/web/.next/static/chunks/{d763375b20e7a0d8.js → 26e2ca76ab6c38b4.js} +1 -1
- package/web/.next/static/chunks/{5caab310bd5ce5dc.js → 2fe20598e1b4793a.js} +3 -3
- package/web/.next/static/chunks/{2e1f0b1d26bd7f04.js → 490667b2a9bb58e2.js} +1 -1
- package/web/.next/static/chunks/{bb60b5e4b5e4bc39.js → 7849c6797be7c6ca.js} +2 -2
- package/web/.next/static/chunks/{f3a549aa7a4dc6d7.js → 7bc7028587490fff.js} +1 -1
- package/web/.next/static/chunks/{2374b4d7e456e10f.js → 8746807722de67a8.js} +1 -1
- package/web/.next/static/chunks/{71896d6be547a34c.js → 893a2a76546c66a7.js} +1 -1
- package/web/.next/static/chunks/{a59a4dbe37fde0a8.js → a1098522326428d1.js} +1 -1
- package/web/.next/static/chunks/{fc40fada6a6ed6f8.js → be89c20c257247ad.js} +1 -1
- package/web/.next/static/chunks/{b73ad92c421b72b9.js → c0bd3ffcf94d1845.js} +1 -1
- package/web/.next/static/chunks/{8e8a2db2aa138419.js → dfdcccf73de56960.js} +1 -1
- package/web/.next/static/chunks/{efd03eb92d09c9a1.js → e2f9e224d1fa1faa.js} +1 -1
- package/web/.next/static/chunks/{00aac0dd4073b6e8.js → e7da54dde18e7fb2.js} +2 -2
- package/web/.next/static/chunks/{f679709942c35216.js → f28aef9cf5107c4b.js} +1 -1
- package/web/.next/static/chunks/{40b69c5164b1c108.js → f6d47ff35d612852.js} +3 -3
- package/web/.next/static/chunks/7f7a032daa42a969.js +0 -1
- package/web/.next/static/chunks/c4ccddb6d9fabbd0.css +0 -1
- package/web/.next/static/chunks/c962f6d7c6928b67.js +0 -1
- /package/web/.next/static/{muO23uSysJM1bwu3hwEw- → GQFJf3UCD4D5C4NCn8eXl}/_buildManifest.js +0 -0
- /package/web/.next/static/{muO23uSysJM1bwu3hwEw- → GQFJf3UCD4D5C4NCn8eXl}/_clientMiddlewareManifest.json +0 -0
- /package/web/.next/static/{muO23uSysJM1bwu3hwEw- → GQFJf3UCD4D5C4NCn8eXl}/_ssgManifest.js +0 -0
|
@@ -366,8 +366,17 @@ export function useChatRuntime(featureId, worktreePath, options) {
|
|
|
366
366
|
// Cancel in-flight refetches so our optimistic update isn't overwritten
|
|
367
367
|
await queryClient.cancelQueries({ queryKey: chatQueryKey(featureId) });
|
|
368
368
|
const previous = queryClient.getQueryData(chatQueryKey(featureId));
|
|
369
|
-
// Optimistically add user message
|
|
369
|
+
// Optimistically add user message. CRITICAL: spread `old` first
|
|
370
|
+
// and only override `messages` (and clear `streamingText`). The
|
|
371
|
+
// earlier version rebuilt the object field-by-field and silently
|
|
372
|
+
// dropped `workflow` + `turnStatus`, which made `hasPlan` flip
|
|
373
|
+
// to false for one render, briefly expanding the workflow step
|
|
374
|
+
// tracker (it lost its `collapsedSummary` flag when allDone
|
|
375
|
+
// turned undefined) before the next refetch reinstated it. The
|
|
376
|
+
// user saw a flicker of the full step list every time they typed
|
|
377
|
+
// a follow-up message after the workflow finished.
|
|
370
378
|
queryClient.setQueryData(chatQueryKey(featureId), (old) => ({
|
|
379
|
+
...(old ?? { sessionStatus: 'booting', sessionInfo: null }),
|
|
371
380
|
messages: [
|
|
372
381
|
...(old?.messages ?? []),
|
|
373
382
|
{
|
|
@@ -379,9 +388,7 @@ export function useChatRuntime(featureId, worktreePath, options) {
|
|
|
379
388
|
updatedAt: new Date(),
|
|
380
389
|
},
|
|
381
390
|
],
|
|
382
|
-
sessionStatus: old?.sessionStatus ?? 'booting',
|
|
383
391
|
streamingText: null,
|
|
384
|
-
sessionInfo: old?.sessionInfo ?? null,
|
|
385
392
|
}));
|
|
386
393
|
return { previous };
|
|
387
394
|
},
|
|
@@ -423,14 +430,28 @@ export function useChatRuntime(featureId, worktreePath, options) {
|
|
|
423
430
|
const stepProgress = useMemo(() => {
|
|
424
431
|
const workflow = chatState?.workflow ?? null;
|
|
425
432
|
if (!workflow || workflow.steps.length === 0) {
|
|
426
|
-
return {
|
|
433
|
+
return {
|
|
434
|
+
hasPlan: false,
|
|
435
|
+
steps: [],
|
|
436
|
+
activeStepId: null,
|
|
437
|
+
allDone: false,
|
|
438
|
+
liveStatus: null,
|
|
439
|
+
};
|
|
427
440
|
}
|
|
428
|
-
// Group messages by their persisted stepId.
|
|
441
|
+
// Group messages by their persisted stepId. Only assistant messages
|
|
442
|
+
// are surfaced in the tracker — the orchestrator persists each step's
|
|
443
|
+
// prompt as a `user`-role row with the step's id (RunWorkflowUseCase
|
|
444
|
+
// step 2+) and that row is an internal orchestration detail, not
|
|
445
|
+
// something the user typed or the agent produced. Including it would
|
|
446
|
+
// inflate every step's badge count by 1 and dump the raw prompt into
|
|
447
|
+
// the expanded body.
|
|
429
448
|
const byStep = new Map();
|
|
430
449
|
for (const m of messages) {
|
|
431
450
|
const sid = m.stepId;
|
|
432
451
|
if (!sid)
|
|
433
452
|
continue;
|
|
453
|
+
if (m.role !== InteractiveMessageRole.assistant)
|
|
454
|
+
continue;
|
|
434
455
|
const list = byStep.get(sid) ?? [];
|
|
435
456
|
list.push(m);
|
|
436
457
|
byStep.set(sid, list);
|
|
@@ -447,13 +468,47 @@ export function useChatRuntime(featureId, worktreePath, options) {
|
|
|
447
468
|
toolMessages: byStep.get(s.id) ?? [],
|
|
448
469
|
}));
|
|
449
470
|
const allDone = steps.length > 0 && steps.every((s) => s.status === 'done');
|
|
471
|
+
// Live status string for the running step card. Order of fallback
|
|
472
|
+
// mirrors the old flat-thread streaming bubble: tool / status log
|
|
473
|
+
// first (most informative — "Reading file X"), then a short prefix
|
|
474
|
+
// of the streaming reply text, then the generic "Thinking…" while
|
|
475
|
+
// we wait for the first chunk. Truncated to one line so it fits
|
|
476
|
+
// inline next to the spinner.
|
|
477
|
+
const trimmedStream = backendStreamingText?.trim() ?? '';
|
|
478
|
+
const trimmedLocal = streamingText?.trim() ?? '';
|
|
479
|
+
const streamPreview = (trimmedLocal || trimmedStream).split('\n')[0]?.slice(0, 80) ?? '';
|
|
480
|
+
let liveStatus = null;
|
|
481
|
+
if (allDone) {
|
|
482
|
+
liveStatus = null;
|
|
483
|
+
}
|
|
484
|
+
else if (statusLog) {
|
|
485
|
+
liveStatus = statusLog;
|
|
486
|
+
}
|
|
487
|
+
else if (streamPreview) {
|
|
488
|
+
liveStatus = streamPreview;
|
|
489
|
+
}
|
|
490
|
+
else if (backendTurnStatus === 'processing' ||
|
|
491
|
+
awaitingResponse ||
|
|
492
|
+
sessionStatus === 'booting') {
|
|
493
|
+
liveStatus = sessionStatus === 'booting' ? 'Waking up…' : 'Thinking…';
|
|
494
|
+
}
|
|
450
495
|
return {
|
|
451
496
|
hasPlan: true,
|
|
452
497
|
steps,
|
|
453
498
|
activeStepId: workflow.currentStepId,
|
|
454
499
|
allDone,
|
|
500
|
+
liveStatus,
|
|
455
501
|
};
|
|
456
|
-
}, [
|
|
502
|
+
}, [
|
|
503
|
+
chatState?.workflow,
|
|
504
|
+
messages,
|
|
505
|
+
statusLog,
|
|
506
|
+
streamingText,
|
|
507
|
+
backendStreamingText,
|
|
508
|
+
backendTurnStatus,
|
|
509
|
+
awaitingResponse,
|
|
510
|
+
sessionStatus,
|
|
511
|
+
]);
|
|
457
512
|
// ── Initial request — the VERY first stepless user message.
|
|
458
513
|
// The application-creation flow persists it via the
|
|
459
514
|
// orchestrator's first `sendMessage.execute` BEFORE
|
|
@@ -470,18 +525,40 @@ export function useChatRuntime(featureId, worktreePath, options) {
|
|
|
470
525
|
}, [stepProgress.hasPlan, messages]);
|
|
471
526
|
const threadMessages = useMemo(() => {
|
|
472
527
|
const hasPlan = stepProgress.hasPlan;
|
|
473
|
-
// When
|
|
474
|
-
//
|
|
475
|
-
//
|
|
476
|
-
//
|
|
477
|
-
//
|
|
478
|
-
//
|
|
528
|
+
// When a workflow is active and STILL RUNNING: hide stepless
|
|
529
|
+
// assistant messages from the flat thread. These exist because of
|
|
530
|
+
// a small race window in the orchestrator — the agent can start
|
|
531
|
+
// streaming and persist a chunk before `setActiveStep` is called,
|
|
532
|
+
// leaving an assistant row with no stepId that would otherwise
|
|
533
|
+
// render as a stray bubble below the tracker. While the workflow
|
|
534
|
+
// is running, the running step's own card is the only legal
|
|
535
|
+
// surface for in-progress agent output.
|
|
479
536
|
//
|
|
480
|
-
//
|
|
481
|
-
//
|
|
482
|
-
//
|
|
537
|
+
// Once the workflow is DONE (`allDone`), the orchestrator has
|
|
538
|
+
// called its final `clearActiveStep`. From this point on, every
|
|
539
|
+
// new assistant message is a legitimate follow-up reply to a
|
|
540
|
+
// user-typed prompt, and MUST be visible in the flat thread —
|
|
541
|
+
// otherwise the chat appears to ignore the user. The previous
|
|
542
|
+
// version of this filter dropped them too and that's what looked
|
|
543
|
+
// like "agent is ignoring me" after the build completed.
|
|
544
|
+
//
|
|
545
|
+
// The user's very first message (`initialRequestMessage`) is
|
|
546
|
+
// always filtered out — the host page pins it above the tracker
|
|
547
|
+
// via `<InitialRequestBubble>` so leaving it in the flat thread
|
|
548
|
+
// would duplicate it.
|
|
549
|
+
const workflowRunning = hasPlan && !stepProgress.allDone;
|
|
483
550
|
const sourceMessages = hasPlan
|
|
484
|
-
? messages.filter((m) =>
|
|
551
|
+
? messages.filter((m) => {
|
|
552
|
+
if (m.id === initialRequestMessage?.id)
|
|
553
|
+
return false;
|
|
554
|
+
if (m.stepId)
|
|
555
|
+
return false; // step-tagged messages live inside their card
|
|
556
|
+
if (workflowRunning && m.role === InteractiveMessageRole.assistant) {
|
|
557
|
+
// Race-window leftover — see comment above.
|
|
558
|
+
return false;
|
|
559
|
+
}
|
|
560
|
+
return true;
|
|
561
|
+
})
|
|
485
562
|
: messages;
|
|
486
563
|
const chatMessages = sourceMessages.map(toThreadMessage);
|
|
487
564
|
// Merge debug bubbles into the timeline by timestamp
|
|
@@ -573,6 +650,7 @@ export function useChatRuntime(featureId, worktreePath, options) {
|
|
|
573
650
|
options?.debugMode,
|
|
574
651
|
debugEvents,
|
|
575
652
|
stepProgress.hasPlan,
|
|
653
|
+
stepProgress.allDone,
|
|
576
654
|
]);
|
|
577
655
|
// ── Status info for typing indicator ──────────────────────────────────
|
|
578
656
|
const status = useMemo(() => {
|
|
@@ -639,10 +717,23 @@ export function useChatRuntime(featureId, worktreePath, options) {
|
|
|
639
717
|
void queryClient.invalidateQueries({ queryKey: chatQueryKey(featureId) });
|
|
640
718
|
}, [featureId, queryClient]);
|
|
641
719
|
// ── Build assistant-ui runtime ──────────────────────────────────────────
|
|
720
|
+
// While a workflow is RUNNING, assistant-ui's `isRunning=true` would
|
|
721
|
+
// auto-inject an empty assistant placeholder bubble at the bottom of
|
|
722
|
+
// the thread (its built-in "thinking" indicator). The step tracker
|
|
723
|
+
// already conveys progress via the running step's spinner + live
|
|
724
|
+
// status, so that placeholder would just float as a hollow bubble.
|
|
725
|
+
// Force `isRunning=false` for the duration of the workflow so
|
|
726
|
+
// assistant-ui keeps its hands off the viewport.
|
|
727
|
+
//
|
|
728
|
+
// Once the workflow is DONE, hand control back to assistant-ui so
|
|
729
|
+
// its thinking indicator works normally for follow-up replies the
|
|
730
|
+
// user types into the composer after the build is finished.
|
|
731
|
+
const workflowInFlight = stepProgress.hasPlan && !stepProgress.allDone;
|
|
732
|
+
const runtimeIsRunning = workflowInFlight ? false : isRunning;
|
|
642
733
|
const runtime = useExternalStoreRuntime({
|
|
643
734
|
messages: threadMessages,
|
|
644
735
|
convertMessage: useCallback((msg) => msg, []),
|
|
645
|
-
isRunning,
|
|
736
|
+
isRunning: runtimeIsRunning,
|
|
646
737
|
onNew,
|
|
647
738
|
onCancel: useCallback(async () => {
|
|
648
739
|
setStreamingText('');
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
* Client-side mirror of the application-creation workflow's
|
|
3
3
|
* user-facing step titles + descriptions. Used to render a
|
|
4
4
|
* placeholder tracker BEFORE the backend orchestrator has written
|
|
5
|
-
* the real `workflow_steps` rows — the user sees all
|
|
5
|
+
* the real `workflow_steps` rows — the user sees all 8 pending
|
|
6
6
|
* cards the instant they land on the application page, instead
|
|
7
7
|
* of a blank area that suddenly pops into existence a few
|
|
8
8
|
* hundred milliseconds later.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"workflow-placeholder.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/features/chat/workflow-placeholder.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,eAAO,MAAM,sCAAsC,EAAE,eAAe,
|
|
1
|
+
{"version":3,"file":"workflow-placeholder.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/features/chat/workflow-placeholder.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,eAAO,MAAM,sCAAsC,EAAE,eAAe,EAyBnE,CAAC"}
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
* Client-side mirror of the application-creation workflow's
|
|
3
3
|
* user-facing step titles + descriptions. Used to render a
|
|
4
4
|
* placeholder tracker BEFORE the backend orchestrator has written
|
|
5
|
-
* the real `workflow_steps` rows — the user sees all
|
|
5
|
+
* the real `workflow_steps` rows — the user sees all 8 pending
|
|
6
6
|
* cards the instant they land on the application page, instead
|
|
7
7
|
* of a blank area that suddenly pops into existence a few
|
|
8
8
|
* hundred milliseconds later.
|
|
@@ -23,12 +23,10 @@ export const APPLICATION_CREATION_PLACEHOLDER_STEPS = [
|
|
|
23
23
|
title: 'Installing design tools',
|
|
24
24
|
description: 'Adding Tailwind and essentials',
|
|
25
25
|
},
|
|
26
|
-
{ stepKey: 'plan', title: 'Sketching the app', description: 'Planning screens and data' },
|
|
27
|
-
{ stepKey: 'components', title: 'Building the pieces', description: 'Creating reusable parts' },
|
|
28
26
|
{
|
|
29
|
-
stepKey: '
|
|
30
|
-
title: '
|
|
31
|
-
description: '
|
|
27
|
+
stepKey: 'components',
|
|
28
|
+
title: 'Building the pieces',
|
|
29
|
+
description: 'Designing and creating reusable parts',
|
|
32
30
|
},
|
|
33
31
|
{ stepKey: 'wire', title: 'Connecting everything', description: 'Wiring navigation and forms' },
|
|
34
32
|
{
|