@shepai/cli 1.112.1 → 1.113.0-pr309.76f9cf0
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/agents/approve-agent-run.use-case.d.ts.map +1 -1
- package/dist/packages/core/src/application/use-cases/agents/approve-agent-run.use-case.js +1 -0
- package/dist/packages/core/src/application/use-cases/agents/reject-agent-run.use-case.d.ts.map +1 -1
- package/dist/packages/core/src/application/use-cases/agents/reject-agent-run.use-case.js +1 -0
- package/dist/packages/core/src/infrastructure/services/agents/feature-agent/feature-agent-worker.d.ts.map +1 -1
- package/dist/packages/core/src/infrastructure/services/agents/feature-agent/feature-agent-worker.js +5 -0
- package/dist/packages/core/src/infrastructure/services/agents/feature-agent/nodes/merge/merge.node.d.ts.map +1 -1
- package/dist/packages/core/src/infrastructure/services/agents/feature-agent/nodes/merge/merge.node.js +1 -0
- package/dist/packages/core/src/infrastructure/services/agents/feature-agent/nodes/prompts/fast-implement.prompt.d.ts.map +1 -1
- package/dist/packages/core/src/infrastructure/services/agents/feature-agent/nodes/prompts/fast-implement.prompt.js +42 -2
- package/dist/src/presentation/web/app/(dashboard)/@drawer/create/page.d.ts.map +1 -1
- package/dist/src/presentation/web/app/(dashboard)/@drawer/create/page.js +9 -2
- package/dist/src/presentation/web/components/common/control-center-drawer/create-drawer-client.d.ts +3 -1
- package/dist/src/presentation/web/components/common/control-center-drawer/create-drawer-client.d.ts.map +1 -1
- package/dist/src/presentation/web/components/common/control-center-drawer/create-drawer-client.js +2 -2
- package/dist/src/presentation/web/components/common/feature-create-drawer/feature-create-drawer.d.ts +17 -1
- package/dist/src/presentation/web/components/common/feature-create-drawer/feature-create-drawer.d.ts.map +1 -1
- package/dist/src/presentation/web/components/common/feature-create-drawer/feature-create-drawer.js +96 -5
- package/dist/src/presentation/web/components/common/feature-create-drawer/feature-create-drawer.stories.d.ts +11 -0
- package/dist/src/presentation/web/components/common/feature-create-drawer/feature-create-drawer.stories.d.ts.map +1 -1
- package/dist/src/presentation/web/components/common/feature-create-drawer/feature-create-drawer.stories.js +51 -0
- package/dist/src/presentation/web/components/common/feature-create-drawer/index.d.ts +1 -1
- package/dist/src/presentation/web/components/common/feature-create-drawer/index.d.ts.map +1 -1
- package/dist/src/presentation/web/components/common/feature-create-drawer/index.js +1 -1
- package/dist/src/presentation/web/components/common/feature-create-drawer/repository-combobox.stories.d.ts +14 -0
- package/dist/src/presentation/web/components/common/feature-create-drawer/repository-combobox.stories.d.ts.map +1 -0
- package/dist/src/presentation/web/components/common/feature-create-drawer/repository-combobox.stories.js +42 -0
- package/dist/src/presentation/web/components/common/feature-drawer-tabs/event-log-viewer.d.ts +5 -0
- package/dist/src/presentation/web/components/common/feature-drawer-tabs/event-log-viewer.d.ts.map +1 -0
- package/dist/src/presentation/web/components/common/feature-drawer-tabs/event-log-viewer.js +115 -0
- package/dist/src/presentation/web/components/common/feature-drawer-tabs/event-log-viewer.stories.d.ts +18 -0
- package/dist/src/presentation/web/components/common/feature-drawer-tabs/event-log-viewer.stories.d.ts.map +1 -0
- package/dist/src/presentation/web/components/common/feature-drawer-tabs/event-log-viewer.stories.js +88 -0
- package/dist/src/presentation/web/components/common/feature-drawer-tabs/log-tab.d.ts.map +1 -1
- package/dist/src/presentation/web/components/common/feature-drawer-tabs/log-tab.js +10 -2
- package/dist/src/presentation/web/components/common/feature-drawer-tabs/log-tab.stories.d.ts +5 -3
- package/dist/src/presentation/web/components/common/feature-drawer-tabs/log-tab.stories.d.ts.map +1 -1
- package/dist/src/presentation/web/components/common/feature-drawer-tabs/log-tab.stories.js +92 -9
- package/dist/src/presentation/web/components/common/floating-action-button/floating-action-button.d.ts +22 -0
- package/dist/src/presentation/web/components/common/floating-action-button/floating-action-button.d.ts.map +1 -0
- package/dist/src/presentation/web/components/common/floating-action-button/floating-action-button.js +43 -0
- package/dist/src/presentation/web/components/common/floating-action-button/floating-action-button.stories.d.ts +10 -0
- package/dist/src/presentation/web/components/common/floating-action-button/floating-action-button.stories.d.ts.map +1 -0
- package/dist/src/presentation/web/components/common/floating-action-button/floating-action-button.stories.js +63 -0
- package/dist/src/presentation/web/components/common/floating-action-button/index.d.ts +3 -0
- package/dist/src/presentation/web/components/common/floating-action-button/index.d.ts.map +1 -0
- package/dist/src/presentation/web/components/common/floating-action-button/index.js +1 -0
- package/dist/src/presentation/web/components/common/index.d.ts +1 -0
- package/dist/src/presentation/web/components/common/index.d.ts.map +1 -1
- package/dist/src/presentation/web/components/common/index.js +1 -0
- package/dist/src/presentation/web/components/features/control-center/control-center-inner.d.ts.map +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 +35 -6
- package/dist/src/presentation/web/components/layouts/app-sidebar/app-sidebar.d.ts +1 -4
- package/dist/src/presentation/web/components/layouts/app-sidebar/app-sidebar.d.ts.map +1 -1
- package/dist/src/presentation/web/components/layouts/app-sidebar/app-sidebar.js +4 -4
- package/dist/src/presentation/web/components/layouts/app-sidebar/app-sidebar.stories.d.ts.map +1 -1
- package/dist/src/presentation/web/components/layouts/app-sidebar/app-sidebar.stories.js +0 -1
- package/dist/src/presentation/web/lib/parse-log-line.d.ts +49 -0
- package/dist/src/presentation/web/lib/parse-log-line.d.ts.map +1 -0
- package/dist/src/presentation/web/lib/parse-log-line.js +126 -0
- package/dist/tsconfig.build.tsbuildinfo +1 -1
- package/package.json +1 -1
- package/web/.next/BUILD_ID +1 -1
- package/web/.next/build-manifest.json +2 -2
- package/web/.next/fallback-build-manifest.json +2 -2
- package/web/.next/prerender-manifest.json +3 -3
- package/web/.next/required-server-files.js +3 -3
- package/web/.next/required-server-files.json +3 -3
- package/web/.next/server/app/(dashboard)/@drawer/create/page/server-reference-manifest.json +20 -20
- 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 +26 -26
- 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 +26 -26
- package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/page.js.nft.json +1 -1
- package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/page/server-reference-manifest.json +18 -18
- package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/page.js.nft.json +1 -1
- package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/(dashboard)/create/page/server-reference-manifest.json +20 -20
- 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 +26 -26
- 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 +26 -26
- 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 +18 -18
- package/web/.next/server/app/(dashboard)/page.js.nft.json +1 -1
- package/web/.next/server/app/(dashboard)/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/(dashboard)/repository/[repositoryId]/page/server-reference-manifest.json +18 -18
- package/web/.next/server/app/(dashboard)/repository/[repositoryId]/page.js.nft.json +1 -1
- package/web/.next/server/app/(dashboard)/repository/[repositoryId]/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/_global-error.html +2 -2
- package/web/.next/server/app/_global-error.rsc +1 -1
- package/web/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +1 -1
- package/web/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
- package/web/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
- package/web/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
- package/web/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
- package/web/.next/server/app/_not-found/page/server-reference-manifest.json +1 -1
- package/web/.next/server/app/_not-found/page.js.nft.json +1 -1
- package/web/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/api/attachments/preview/route.js.nft.json +1 -1
- package/web/.next/server/app/api/cli-upgrade/route.js +2 -2
- package/web/.next/server/app/api/evidence/route.js.nft.json +1 -1
- package/web/.next/server/app/settings/page/server-reference-manifest.json +5 -5
- package/web/.next/server/app/settings/page.js.nft.json +1 -1
- package/web/.next/server/app/settings/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/skills/page/server-reference-manifest.json +6 -6
- package/web/.next/server/app/skills/page.js.nft.json +1 -1
- package/web/.next/server/app/skills/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/tools/page/server-reference-manifest.json +6 -6
- package/web/.next/server/app/tools/page.js.nft.json +1 -1
- package/web/.next/server/app/tools/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/version/page/server-reference-manifest.json +1 -1
- package/web/.next/server/app/version/page.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]__d2c18946._.js +2 -2
- package/web/.next/server/chunks/ssr/744ca_web_components_common_control-center-drawer_create-drawer-client_tsx_5e26fc0a._.js +1 -1
- package/web/.next/server/chunks/ssr/744ca_web_components_common_control-center-drawer_create-drawer-client_tsx_5e26fc0a._.js.map +1 -1
- package/web/.next/server/chunks/ssr/8ba4b_server_app_(dashboard)_@drawer_repository_[repositoryId]_page_actions_a1104008.js +1 -1
- package/web/.next/server/chunks/ssr/8ba4b_server_app_(dashboard)_@drawer_repository_[repositoryId]_page_actions_a1104008.js.map +1 -1
- package/web/.next/server/chunks/ssr/8ba4b_server_app_(dashboard)_repository_[repositoryId]_page_actions_92642200.js +1 -1
- package/web/.next/server/chunks/ssr/8ba4b_server_app_(dashboard)_repository_[repositoryId]_page_actions_92642200.js.map +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__039967e3._.js +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__039967e3._.js.map +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__07a39ff2._.js +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__11033878._.js +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__11033878._.js.map +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__24dd0927._.js +2 -2
- package/web/.next/server/chunks/ssr/[root-of-the-server]__2773312c._.js +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__2773312c._.js.map +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__5d87af2e._.js +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__5edfc56b._.js +1 -1
- package/web/.next/server/chunks/ssr/{[root-of-the-server]__845a9d2a._.js → [root-of-the-server]__6367aea0._.js} +2 -2
- package/web/.next/server/chunks/ssr/[root-of-the-server]__6367aea0._.js.map +1 -0
- package/web/.next/server/chunks/ssr/[root-of-the-server]__89e8a5cc._.js +2 -2
- package/web/.next/server/chunks/ssr/[root-of-the-server]__aad040c0._.js +2 -2
- package/web/.next/server/chunks/ssr/[root-of-the-server]__aad040c0._.js.map +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__b1e68e34._.js +3 -0
- package/web/.next/server/chunks/ssr/{[root-of-the-server]__d91fdd51._.js.map → [root-of-the-server]__b1e68e34._.js.map} +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__c9777776._.js +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__c9777776._.js.map +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__cbd8062c._.js +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__cbd8062c._.js.map +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__e70c5627._.js +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__e70c5627._.js.map +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__fdc75809._.js +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__fdc75809._.js.map +1 -1
- package/web/.next/server/chunks/ssr/_0e506641._.js +7 -0
- package/web/.next/server/chunks/ssr/{_e6f2da4f._.js.map → _0e506641._.js.map} +1 -1
- package/web/.next/server/chunks/ssr/_135edb9c._.js +1 -1
- package/web/.next/server/chunks/ssr/_135edb9c._.js.map +1 -1
- package/web/.next/server/chunks/ssr/{_07178808._.js → _39570a51._.js} +2 -2
- package/web/.next/server/chunks/ssr/_39570a51._.js.map +1 -0
- package/web/.next/server/chunks/ssr/{_573c7402._.js → _897c57ac._.js} +2 -2
- package/web/.next/server/chunks/ssr/{_573c7402._.js.map → _897c57ac._.js.map} +1 -1
- package/web/.next/server/chunks/ssr/_8dacd1e7._.js +1 -1
- package/web/.next/server/chunks/ssr/_8dacd1e7._.js.map +1 -1
- package/web/.next/server/chunks/ssr/{_6b105fbc._.js → _a7ff3878._.js} +2 -2
- package/web/.next/server/chunks/ssr/{_6b105fbc._.js.map → _a7ff3878._.js.map} +1 -1
- package/web/.next/server/chunks/ssr/_cc77a143._.js +1 -1
- package/web/.next/server/chunks/ssr/_cc77a143._.js.map +1 -1
- package/web/.next/server/chunks/ssr/b1a17_presentation_web_components_features_settings_settings-page-client_tsx_6ed9d5f8._.js +1 -1
- package/web/.next/server/chunks/ssr/b1a17_presentation_web_components_features_settings_settings-page-client_tsx_6ed9d5f8._.js.map +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_(dashboard)_page_actions_888633e1.js +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_(dashboard)_page_actions_888633e1.js.map +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_skills_page_actions_1fa8042e.js +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_skills_page_actions_1fa8042e.js.map +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_tools_page_actions_24684200.js +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_tools_page_actions_24684200.js.map +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web_ce7cbc3c._.js +2 -2
- package/web/.next/server/chunks/ssr/src_presentation_web_ce7cbc3c._.js.map +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web_components_bf50c527._.js +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web_components_de814675._.js +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web_components_e599bb8c._.js +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web_components_e599bb8c._.js.map +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web_components_features_control-center_7ac3562e._.js +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web_components_features_control-center_7ac3562e._.js.map +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web_e2604413._.js +2 -2
- package/web/.next/server/chunks/ssr/src_presentation_web_e2604413._.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 +31 -31
- package/web/.next/static/chunks/33b919cdde4468b2.js +11 -0
- package/web/.next/static/chunks/{ea5af66e7cd1d64c.js → 4e5c35d0e3aed631.js} +1 -1
- package/web/.next/static/chunks/57b45edf86522369.css +1 -0
- package/web/.next/static/chunks/5a546eda32b1b530.js +1 -0
- package/web/.next/static/chunks/619af41a8d3232e5.js +1 -0
- package/web/.next/static/chunks/{9de58b31821657a7.js → 65454cdc30efb7f7.js} +1 -1
- package/web/.next/static/chunks/{49edfaea86bca4d4.js → 83f10a2e368d785d.js} +1 -1
- package/web/.next/static/chunks/8bfc1f72ce3f19b2.js +1 -0
- package/web/.next/static/chunks/af35a042a950cfd6.js +1 -0
- package/web/.next/static/chunks/b1f3c0e8e9872ef8.js +1 -0
- package/web/.next/static/chunks/dc5a2644d7805efa.js +2 -0
- package/web/.next/static/chunks/fb4a0a3574465a2e.js +1 -0
- package/web/.next/static/chunks/fe1bb1a0468200b6.js +1 -0
- package/web/.next/server/chunks/ssr/[root-of-the-server]__845a9d2a._.js.map +0 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__d91fdd51._.js +0 -3
- package/web/.next/server/chunks/ssr/_07178808._.js.map +0 -1
- package/web/.next/server/chunks/ssr/_e6f2da4f._.js +0 -7
- package/web/.next/static/chunks/07b853e29af1e5f2.js +0 -1
- package/web/.next/static/chunks/3a785cd8a96b8402.js +0 -1
- package/web/.next/static/chunks/5025b973997eb889.js +0 -1
- package/web/.next/static/chunks/5543614d36607aef.js +0 -1
- package/web/.next/static/chunks/5558a658fa82a01f.css +0 -1
- package/web/.next/static/chunks/a9357597e52bd4bc.js +0 -1
- package/web/.next/static/chunks/ac1fcc4b433cdbbf.js +0 -1
- package/web/.next/static/chunks/e04a5e18ea5fd053.js +0 -1
- package/web/.next/static/chunks/f02fe16cf143e186.js +0 -11
- package/web/.next/static/chunks/fc7dda19227ec43d.js +0 -2
- /package/web/.next/static/{h5YMwar8bSq9VnHhJNqVt → 9jG0SOdIZ8g5fjjAGQhze}/_buildManifest.js +0 -0
- /package/web/.next/static/{h5YMwar8bSq9VnHhJNqVt → 9jG0SOdIZ8g5fjjAGQhze}/_clientMiddlewareManifest.json +0 -0
- /package/web/.next/static/{h5YMwar8bSq9VnHhJNqVt → 9jG0SOdIZ8g5fjjAGQhze}/_ssgManifest.js +0 -0
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { Plus, FolderPlus } from 'lucide-react';
|
|
3
|
+
import { FloatingActionButton } from './floating-action-button.js';
|
|
4
|
+
const defaultActions = [
|
|
5
|
+
{
|
|
6
|
+
id: 'new-feature',
|
|
7
|
+
label: 'Feature',
|
|
8
|
+
icon: _jsx(Plus, { className: "h-5 w-5" }),
|
|
9
|
+
onClick: () => undefined,
|
|
10
|
+
},
|
|
11
|
+
{
|
|
12
|
+
id: 'add-repository',
|
|
13
|
+
label: 'Repository',
|
|
14
|
+
icon: _jsx(FolderPlus, { className: "h-5 w-5" }),
|
|
15
|
+
onClick: () => undefined,
|
|
16
|
+
},
|
|
17
|
+
];
|
|
18
|
+
const meta = {
|
|
19
|
+
title: 'Composed/FloatingActionButton',
|
|
20
|
+
component: FloatingActionButton,
|
|
21
|
+
parameters: {
|
|
22
|
+
layout: 'fullscreen',
|
|
23
|
+
},
|
|
24
|
+
tags: ['autodocs'],
|
|
25
|
+
decorators: [
|
|
26
|
+
(Story) => (_jsxs("div", { style: { height: '500px', position: 'relative', background: 'var(--background)' }, children: [_jsx("div", { style: { padding: '2rem', opacity: 0.5 }, children: _jsx("p", { children: "Canvas content behind the FAB. Click the + button to see the expanding menu." }) }), _jsx(Story, {})] })),
|
|
27
|
+
],
|
|
28
|
+
};
|
|
29
|
+
export default meta;
|
|
30
|
+
export const Default = {
|
|
31
|
+
args: {
|
|
32
|
+
actions: defaultActions,
|
|
33
|
+
},
|
|
34
|
+
};
|
|
35
|
+
export const WithLoadingAction = {
|
|
36
|
+
args: {
|
|
37
|
+
actions: [
|
|
38
|
+
defaultActions[0],
|
|
39
|
+
{
|
|
40
|
+
...defaultActions[1],
|
|
41
|
+
loading: true,
|
|
42
|
+
},
|
|
43
|
+
],
|
|
44
|
+
},
|
|
45
|
+
};
|
|
46
|
+
export const SingleAction = {
|
|
47
|
+
args: {
|
|
48
|
+
actions: [defaultActions[0]],
|
|
49
|
+
},
|
|
50
|
+
};
|
|
51
|
+
export const ThreeActions = {
|
|
52
|
+
args: {
|
|
53
|
+
actions: [
|
|
54
|
+
...defaultActions,
|
|
55
|
+
{
|
|
56
|
+
id: 'import',
|
|
57
|
+
label: 'Import Project',
|
|
58
|
+
icon: _jsx(Plus, { className: "h-5 w-5" }),
|
|
59
|
+
onClick: () => undefined,
|
|
60
|
+
},
|
|
61
|
+
],
|
|
62
|
+
},
|
|
63
|
+
};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/common/floating-action-button/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,MAAM,0BAA0B,CAAC;AAChE,YAAY,EACV,yBAAyB,EACzB,0BAA0B,GAC3B,MAAM,0BAA0B,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { FloatingActionButton } from './floating-action-button.js';
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
export { computeDrawerView, type DrawerView } from './control-center-drawer/index.js';
|
|
2
2
|
export { AddRepositoryButton } from './add-repository-button/index.js';
|
|
3
|
+
export { FloatingActionButton, type FloatingActionButtonProps, type FloatingActionButtonAction, } from './floating-action-button/index.js';
|
|
3
4
|
export { ElapsedTime, formatElapsed } from './elapsed-time/index.js';
|
|
4
5
|
export { EmptyState, type EmptyStateProps } from './empty-state/index.js';
|
|
5
6
|
export { FeatureCreateDrawer, type FeatureCreateDrawerProps, type FeatureCreatePayload, } from './feature-create-drawer/index.js';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../../src/presentation/web/components/common/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,KAAK,UAAU,EAAE,MAAM,yBAAyB,CAAC;AAC7E,OAAO,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;AAC9D,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAC5D,OAAO,EAAE,UAAU,EAAE,KAAK,eAAe,EAAE,MAAM,eAAe,CAAC;AACjE,OAAO,EACL,mBAAmB,EACnB,KAAK,wBAAwB,EAC7B,KAAK,oBAAoB,GAC1B,MAAM,yBAAyB,CAAC;AACjC,OAAO,EACL,iBAAiB,EACjB,KAAK,mBAAmB,EACxB,KAAK,mBAAmB,GACzB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,eAAe,EAAE,KAAK,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AACjF,OAAO,EACL,WAAW,EACX,sBAAsB,EACtB,KAAK,gBAAgB,EACrB,KAAK,qBAAqB,EAC1B,KAAK,eAAe,EACpB,KAAK,eAAe,EACpB,KAAK,sBAAsB,GAC5B,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAE,mBAAmB,EAAE,KAAK,wBAAwB,EAAE,MAAM,yBAAyB,CAAC;AAC7F,OAAO,EAAE,kBAAkB,EAAE,KAAK,uBAAuB,EAAE,MAAM,wBAAwB,CAAC;AAC1F,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AACrD,OAAO,EACL,cAAc,EACd,KAAK,kBAAkB,EACvB,KAAK,kBAAkB,GACxB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAC3C,OAAO,EACL,gBAAgB,EAChB,KAAK,qBAAqB,EAC1B,KAAK,WAAW,EAChB,KAAK,cAAc,EACnB,KAAK,SAAS,EACd,KAAK,oBAAoB,GAC1B,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,QAAQ,EAAE,KAAK,aAAa,EAAE,MAAM,aAAa,CAAC;AAC3D,OAAO,EACL,mBAAmB,EACnB,KAAK,wBAAwB,EAC7B,KAAK,uBAAuB,GAC7B,MAAM,yBAAyB,CAAC;AACjC,OAAO,EAAE,qBAAqB,EAAE,KAAK,0BAA0B,EAAE,MAAM,2BAA2B,CAAC;AACnG,OAAO,EAAE,cAAc,EAAE,KAAK,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AAC9E,OAAO,EAAE,oBAAoB,EAAE,KAAK,yBAAyB,EAAE,MAAM,0BAA0B,CAAC;AAChG,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAC7C,OAAO,EAAE,YAAY,EAAE,KAAK,iBAAiB,EAAE,MAAM,iBAAiB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../../src/presentation/web/components/common/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,KAAK,UAAU,EAAE,MAAM,yBAAyB,CAAC;AAC7E,OAAO,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;AAC9D,OAAO,EACL,oBAAoB,EACpB,KAAK,yBAAyB,EAC9B,KAAK,0BAA0B,GAChC,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAC5D,OAAO,EAAE,UAAU,EAAE,KAAK,eAAe,EAAE,MAAM,eAAe,CAAC;AACjE,OAAO,EACL,mBAAmB,EACnB,KAAK,wBAAwB,EAC7B,KAAK,oBAAoB,GAC1B,MAAM,yBAAyB,CAAC;AACjC,OAAO,EACL,iBAAiB,EACjB,KAAK,mBAAmB,EACxB,KAAK,mBAAmB,GACzB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,eAAe,EAAE,KAAK,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AACjF,OAAO,EACL,WAAW,EACX,sBAAsB,EACtB,KAAK,gBAAgB,EACrB,KAAK,qBAAqB,EAC1B,KAAK,eAAe,EACpB,KAAK,eAAe,EACpB,KAAK,sBAAsB,GAC5B,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAE,mBAAmB,EAAE,KAAK,wBAAwB,EAAE,MAAM,yBAAyB,CAAC;AAC7F,OAAO,EAAE,kBAAkB,EAAE,KAAK,uBAAuB,EAAE,MAAM,wBAAwB,CAAC;AAC1F,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AACrD,OAAO,EACL,cAAc,EACd,KAAK,kBAAkB,EACvB,KAAK,kBAAkB,GACxB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAC3C,OAAO,EACL,gBAAgB,EAChB,KAAK,qBAAqB,EAC1B,KAAK,WAAW,EAChB,KAAK,cAAc,EACnB,KAAK,SAAS,EACd,KAAK,oBAAoB,GAC1B,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,QAAQ,EAAE,KAAK,aAAa,EAAE,MAAM,aAAa,CAAC;AAC3D,OAAO,EACL,mBAAmB,EACnB,KAAK,wBAAwB,EAC7B,KAAK,uBAAuB,GAC7B,MAAM,yBAAyB,CAAC;AACjC,OAAO,EAAE,qBAAqB,EAAE,KAAK,0BAA0B,EAAE,MAAM,2BAA2B,CAAC;AACnG,OAAO,EAAE,cAAc,EAAE,KAAK,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AAC9E,OAAO,EAAE,oBAAoB,EAAE,KAAK,yBAAyB,EAAE,MAAM,0BAA0B,CAAC;AAChG,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAC7C,OAAO,EAAE,YAAY,EAAE,KAAK,iBAAiB,EAAE,MAAM,iBAAiB,CAAC"}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
export { computeDrawerView } from './control-center-drawer/index.js';
|
|
2
2
|
export { AddRepositoryButton } from './add-repository-button/index.js';
|
|
3
|
+
export { FloatingActionButton, } from './floating-action-button/index.js';
|
|
3
4
|
export { ElapsedTime, formatElapsed } from './elapsed-time/index.js';
|
|
4
5
|
export { EmptyState } from './empty-state/index.js';
|
|
5
6
|
export { FeatureCreateDrawer, } from './feature-create-drawer/index.js';
|
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":"AAIA,OAAO,KAAK,EAAE,IAAI,EAAY,MAAM,eAAe,CAAC;AAGpD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,uCAAuC,CAAC;
|
|
1
|
+
{"version":3,"file":"control-center-inner.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/features/control-center/control-center-inner.tsx"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,IAAI,EAAY,MAAM,eAAe,CAAC;AAGpD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,uCAAuC,CAAC;AAuB5E,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,2CAqUzF"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"app-shell.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/layouts/app-shell/app-shell.tsx"],"names":[],"mappings":"AAEA,OAAO,
|
|
1
|
+
{"version":3,"file":"app-shell.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/layouts/app-shell/app-shell.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAkC,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAsBvE,UAAU,aAAa;IACrB,QAAQ,EAAE,SAAS,CAAC;CACrB;AAiFD,wBAAgB,QAAQ,CAAC,EAAE,QAAQ,EAAE,EAAE,aAAa,2CAUnD"}
|
|
@@ -1,12 +1,14 @@
|
|
|
1
1
|
'use client';
|
|
2
2
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
3
|
-
import { useCallback } from 'react';
|
|
3
|
+
import { useCallback, useMemo, useState } from 'react';
|
|
4
4
|
import { useRouter } from 'next/navigation';
|
|
5
|
+
import { Plus, FolderPlus } from 'lucide-react';
|
|
5
6
|
import { SidebarProvider, SidebarInset } from '../../ui/sidebar.js';
|
|
6
7
|
import { AppSidebar } from '../../layouts/app-sidebar/index.js';
|
|
7
|
-
import {
|
|
8
|
+
import { FloatingActionButton, } from '../../common/floating-action-button/index.js';
|
|
8
9
|
import { ThemeToggle } from '../../common/theme-toggle/index.js';
|
|
9
10
|
import { SoundToggle } from '../../common/sound-toggle/index.js';
|
|
11
|
+
import { pickFolder } from '../../common/add-repository-button/pick-folder.js';
|
|
10
12
|
import { AgentEventsProvider } from '../../../hooks/agent-events-provider.js';
|
|
11
13
|
import { DrawerCloseGuardProvider, useDrawerCloseGuard } from '../../../hooks/drawer-close-guard.js';
|
|
12
14
|
import { SidebarFeaturesProvider, useSidebarFeaturesContext, } from '../../../hooks/sidebar-features-context.js';
|
|
@@ -26,10 +28,37 @@ function AppShellInner({ children }) {
|
|
|
26
28
|
const handleFeatureClick = useCallback((featureId) => {
|
|
27
29
|
guardedNavigate(() => router.push(`/feature/${featureId}`));
|
|
28
30
|
}, [router, guardedNavigate]);
|
|
29
|
-
const
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
31
|
+
const [addingRepo, setAddingRepo] = useState(false);
|
|
32
|
+
const handleAddRepository = useCallback(async () => {
|
|
33
|
+
if (addingRepo)
|
|
34
|
+
return;
|
|
35
|
+
setAddingRepo(true);
|
|
36
|
+
try {
|
|
37
|
+
const path = await pickFolder();
|
|
38
|
+
if (path) {
|
|
39
|
+
window.dispatchEvent(new CustomEvent('shep:add-repository', { detail: { path } }));
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
finally {
|
|
43
|
+
setAddingRepo(false);
|
|
44
|
+
}
|
|
45
|
+
}, [addingRepo]);
|
|
46
|
+
const fabActions = useMemo(() => [
|
|
47
|
+
{
|
|
48
|
+
id: 'new-feature',
|
|
49
|
+
label: 'New Feature',
|
|
50
|
+
icon: _jsx(Plus, { className: "h-4 w-4" }),
|
|
51
|
+
onClick: handleNewFeature,
|
|
52
|
+
},
|
|
53
|
+
{
|
|
54
|
+
id: 'add-repository',
|
|
55
|
+
label: 'Add Repository',
|
|
56
|
+
icon: _jsx(FolderPlus, { className: "h-4 w-4" }),
|
|
57
|
+
onClick: handleAddRepository,
|
|
58
|
+
loading: addingRepo,
|
|
59
|
+
},
|
|
60
|
+
], [handleNewFeature, handleAddRepository, addingRepo]);
|
|
61
|
+
return (_jsxs(SidebarProvider, { defaultOpen: false, children: [_jsx(AppSidebar, { features: features, featureFlags: featureFlags, onFeatureClick: handleFeatureClick }), _jsx(SidebarInset, { children: _jsxs("div", { className: "relative h-full", children: [_jsxs("div", { className: "absolute top-3 right-3 z-50 flex gap-1", "data-test-id": "canvas-actions-toolbar", children: [_jsx(SoundToggle, {}), _jsx(ThemeToggle, {})] }), _jsx("main", { className: "h-full", children: children }), _jsx(FloatingActionButton, { actions: fabActions })] }) })] }));
|
|
33
62
|
}
|
|
34
63
|
export function AppShell({ children }) {
|
|
35
64
|
return (_jsx(AgentEventsProvider, { children: _jsx(DrawerCloseGuardProvider, { children: _jsx(SidebarFeaturesProvider, { children: _jsx(AppShellInner, { children: children }) }) }) }));
|
|
@@ -12,10 +12,7 @@ export interface FeatureItem {
|
|
|
12
12
|
export interface AppSidebarProps {
|
|
13
13
|
features: FeatureItem[];
|
|
14
14
|
featureFlags: FeatureFlagsState;
|
|
15
|
-
/** Whether to show the "New feature" button in the sidebar footer. Defaults to `false`. */
|
|
16
|
-
showNewFeature?: boolean;
|
|
17
|
-
onNewFeature?: () => void;
|
|
18
15
|
onFeatureClick?: (featureId: string) => void;
|
|
19
16
|
}
|
|
20
|
-
export declare function AppSidebar({ features, featureFlags,
|
|
17
|
+
export declare function AppSidebar({ features, featureFlags, onFeatureClick, }: AppSidebarProps): import("react/jsx-runtime").JSX.Element;
|
|
21
18
|
//# sourceMappingURL=app-sidebar.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"app-sidebar.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/layouts/app-sidebar/app-sidebar.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"app-sidebar.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/layouts/app-sidebar/app-sidebar.tsx"],"names":[],"mappings":"AAuBA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,2CAA2C,CAAC;AAG/E,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAE7D,MAAM,WAAW,WAAW;IAC1B,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,aAAa,CAAC;IACtB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,eAAe;IAC9B,QAAQ,EAAE,WAAW,EAAE,CAAC;IACxB,YAAY,EAAE,iBAAiB,CAAC;IAEhC,cAAc,CAAC,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,IAAI,CAAC;CAC9C;AAED,wBAAgB,UAAU,CAAC,EACzB,QAAQ,EACR,YAAY,EAEZ,cAAc,GACf,EAAE,eAAe,2CAgHjB"}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
'use client';
|
|
2
2
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
3
3
|
import { usePathname } from 'next/navigation';
|
|
4
|
-
import { Home, Wrench, Puzzle,
|
|
5
|
-
import { Sidebar, SidebarHeader, SidebarContent,
|
|
4
|
+
import { Home, Wrench, Puzzle, Settings } from 'lucide-react';
|
|
5
|
+
import { Sidebar, SidebarHeader, SidebarContent, SidebarMenu, SidebarMenuItem, SidebarRail, useSidebar, } from '../../ui/sidebar.js';
|
|
6
6
|
import { ScrollArea } from '../../ui/scroll-area.js';
|
|
7
7
|
import { SidebarNavItem } from '../../common/sidebar-nav-item/index.js';
|
|
8
8
|
import { SidebarCollapseToggle } from '../../common/sidebar-collapse-toggle/index.js';
|
|
@@ -14,7 +14,7 @@ import { SidebarSectionHeader } from '../../common/sidebar-section-header/index.
|
|
|
14
14
|
import { featureStatusConfig, featureStatusOrder } from '../../common/feature-status-config.js';
|
|
15
15
|
import { useDeferredMount } from '../../../hooks/use-deferred-mount.js';
|
|
16
16
|
import { useVersion } from '../../../hooks/use-version.js';
|
|
17
|
-
export function AppSidebar({ features, featureFlags,
|
|
17
|
+
export function AppSidebar({ features, featureFlags, onFeatureClick, }) {
|
|
18
18
|
const pathname = usePathname();
|
|
19
19
|
const { state } = useSidebar();
|
|
20
20
|
const collapsed = state === 'collapsed';
|
|
@@ -33,5 +33,5 @@ export function AppSidebar({ features, featureFlags, showNewFeature = false, onN
|
|
|
33
33
|
'min-w-0 overflow-hidden transition-opacity duration-200 ease-out',
|
|
34
34
|
'[&_[data-sidebar=group-label]]:!mt-0 [&_[data-sidebar=group-label]]:!opacity-100 [&_[data-sidebar=group-label]]:!transition-none',
|
|
35
35
|
expandedVisible ? 'opacity-100' : 'opacity-0',
|
|
36
|
-
].join(' '), children: [_jsx(SidebarSectionHeader, { label: "Features" }), _jsx(ScrollArea, { children: grouped.map(({ key, label, items }) => items.length > 0 ? (_jsx(FeatureStatusGroup, { label: label, count: items.length, children: items.map((feature) => (_jsx(FeatureListItem, { name: feature.name, status: feature.status, startedAt: feature.startedAt, duration: feature.duration, agentType: feature.agentType, modelId: feature.modelId, onClick: onFeatureClick ? () => onFeatureClick(feature.featureId) : undefined }, feature.featureId))) }, key)) : null) })] })) : null }),
|
|
36
|
+
].join(' '), children: [_jsx(SidebarSectionHeader, { label: "Features" }), _jsx(ScrollArea, { children: grouped.map(({ key, label, items }) => items.length > 0 ? (_jsx(FeatureStatusGroup, { label: label, count: items.length, children: items.map((feature) => (_jsx(FeatureListItem, { name: feature.name, status: feature.status, startedAt: feature.startedAt, duration: feature.duration, agentType: feature.agentType, modelId: feature.modelId, onClick: onFeatureClick ? () => onFeatureClick(feature.featureId) : undefined }, feature.featureId))) }, key)) : null) })] })) : null }), _jsx(SidebarRail, {})] }));
|
|
37
37
|
}
|
package/dist/src/presentation/web/components/layouts/app-sidebar/app-sidebar.stories.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"app-sidebar.stories.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/layouts/app-sidebar/app-sidebar.stories.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAEvD,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAQ3C,QAAA,MAAM,IAAI,EAAE,IAAI,CAAC,OAAO,UAAU,CAyBjC,CAAC;AAEF,eAAe,IAAI,CAAC;AACpB,KAAK,KAAK,GAAG,QAAQ,CAAC,OAAO,IAAI,CAAC,CAAC;AAmDnC,eAAO,MAAM,OAAO,EAAE,KAIrB,CAAC;AAEF,eAAO,MAAM,oBAAoB,EAAE,
|
|
1
|
+
{"version":3,"file":"app-sidebar.stories.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/layouts/app-sidebar/app-sidebar.stories.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAEvD,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAQ3C,QAAA,MAAM,IAAI,EAAE,IAAI,CAAC,OAAO,UAAU,CAyBjC,CAAC;AAEF,eAAe,IAAI,CAAC;AACpB,KAAK,KAAK,GAAG,QAAQ,CAAC,OAAO,IAAI,CAAC,CAAC;AAmDnC,eAAO,MAAM,OAAO,EAAE,KAIrB,CAAC;AAEF,eAAO,MAAM,oBAAoB,EAAE,KAIlC,CAAC;AAEF,eAAO,MAAM,SAAS,EAAE,KAOvB,CAAC;AAEF,eAAO,MAAM,KAAK,EAAE,KAInB,CAAC;AAEF,eAAO,MAAM,aAAa,EAAE,KAiB3B,CAAC;AAEF,eAAO,MAAM,OAAO,EAAE,KAQrB,CAAC"}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Parses structured log lines from the feature agent worker process.
|
|
3
|
+
*
|
|
4
|
+
* Log format: [timestamp] [phase] [agent|model] [tag] message
|
|
5
|
+
* Worker format: [timestamp] [agent|model] [WORKER] message
|
|
6
|
+
* Fallback: raw string lines
|
|
7
|
+
*/
|
|
8
|
+
export type LogEventTag = 'tool' | 'text' | 'result' | 'tokens' | 'raw' | 'worker' | 'info';
|
|
9
|
+
export interface ParsedLogLine {
|
|
10
|
+
/** ISO timestamp */
|
|
11
|
+
timestamp: string | null;
|
|
12
|
+
/** Phase name (e.g. "requirements", "implement") */
|
|
13
|
+
phase: string | null;
|
|
14
|
+
/** Agent type (e.g. "claude-code") */
|
|
15
|
+
agent: string | null;
|
|
16
|
+
/** Model name (e.g. "claude-haiku-4-5") */
|
|
17
|
+
model: string | null;
|
|
18
|
+
/** Event tag */
|
|
19
|
+
tag: LogEventTag;
|
|
20
|
+
/** The message content after tags */
|
|
21
|
+
message: string;
|
|
22
|
+
/** Original raw line */
|
|
23
|
+
raw: string;
|
|
24
|
+
}
|
|
25
|
+
export declare function parseLogLine(raw: string): ParsedLogLine;
|
|
26
|
+
/** Tool call info extracted from [tool] messages */
|
|
27
|
+
export interface ToolCallInfo {
|
|
28
|
+
toolName: string;
|
|
29
|
+
args: string;
|
|
30
|
+
}
|
|
31
|
+
/** Parse a [tool] message into tool name and args */
|
|
32
|
+
export declare function parseToolCall(message: string): ToolCallInfo;
|
|
33
|
+
/** Result info extracted from [result] messages */
|
|
34
|
+
export interface ResultInfo {
|
|
35
|
+
chars: number;
|
|
36
|
+
sessionId: string | null;
|
|
37
|
+
}
|
|
38
|
+
/** Parse a [result] message */
|
|
39
|
+
export declare function parseResultMessage(message: string): ResultInfo;
|
|
40
|
+
/** Token info extracted from [tokens] messages */
|
|
41
|
+
export interface TokenInfo {
|
|
42
|
+
inputTokens: number;
|
|
43
|
+
outputTokens: number;
|
|
44
|
+
}
|
|
45
|
+
/** Parse a [tokens] message */
|
|
46
|
+
export declare function parseTokensMessage(message: string): TokenInfo;
|
|
47
|
+
/** Parse all lines from raw content string */
|
|
48
|
+
export declare function parseLogContent(content: string): ParsedLogLine[];
|
|
49
|
+
//# sourceMappingURL=parse-log-line.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"parse-log-line.d.ts","sourceRoot":"","sources":["../../../../../src/presentation/web/lib/parse-log-line.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,MAAM,MAAM,WAAW,GAAG,MAAM,GAAG,MAAM,GAAG,QAAQ,GAAG,QAAQ,GAAG,KAAK,GAAG,QAAQ,GAAG,MAAM,CAAC;AAE5F,MAAM,WAAW,aAAa;IAC5B,oBAAoB;IACpB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,oDAAoD;IACpD,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,sCAAsC;IACtC,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,2CAA2C;IAC3C,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,gBAAgB;IAChB,GAAG,EAAE,WAAW,CAAC;IACjB,qCAAqC;IACrC,OAAO,EAAE,MAAM,CAAC;IAChB,wBAAwB;IACxB,GAAG,EAAE,MAAM,CAAC;CACb;AAgBD,wBAAgB,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,aAAa,CAwEvD;AAED,oDAAoD;AACpD,MAAM,WAAW,YAAY;IAC3B,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;CACd;AAED,qDAAqD;AACrD,wBAAgB,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG,YAAY,CAS3D;AAED,mDAAmD;AACnD,MAAM,WAAW,UAAU;IACzB,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;CAC1B;AAED,+BAA+B;AAC/B,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,MAAM,GAAG,UAAU,CAO9D;AAED,kDAAkD;AAClD,MAAM,WAAW,SAAS;IACxB,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;CACtB;AAED,+BAA+B;AAC/B,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,MAAM,GAAG,SAAS,CAO7D;AAED,8CAA8C;AAC9C,wBAAgB,eAAe,CAAC,OAAO,EAAE,MAAM,GAAG,aAAa,EAAE,CAMhE"}
|
|
@@ -0,0 +1,126 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Parses structured log lines from the feature agent worker process.
|
|
3
|
+
*
|
|
4
|
+
* Log format: [timestamp] [phase] [agent|model] [tag] message
|
|
5
|
+
* Worker format: [timestamp] [agent|model] [WORKER] message
|
|
6
|
+
* Fallback: raw string lines
|
|
7
|
+
*/
|
|
8
|
+
/**
|
|
9
|
+
* Regex to match structured log lines.
|
|
10
|
+
* Captures: timestamp, optional phase, optional agent|model, rest of message
|
|
11
|
+
*
|
|
12
|
+
* Examples:
|
|
13
|
+
* [2026-03-08T10:00:01.123Z] [requirements] [claude-code|claude-haiku-4-5] [tool] Read {"path":"f.ts"}
|
|
14
|
+
* [2026-03-08T10:00:01.123Z] [claude-code|claude-haiku-4-5] [WORKER] Starting worker
|
|
15
|
+
* [2026-03-08T10:00:01.123Z] [requirements] [claude-code|claude-haiku-4-5] Starting...
|
|
16
|
+
*/
|
|
17
|
+
const LOG_LINE_REGEX = /^\[(\d{4}-\d{2}-\d{2}T[\d:.]+Z?)\]\s+(?:\[([^\]]+)\]\s+)?(?:\[([^\]|]+)(?:\|([^\]]+))?\]\s+)?(.*)$/;
|
|
18
|
+
const TAG_REGEX = /^\[(tool|text|result|tokens|raw|WORKER)\]\s*(.*)/;
|
|
19
|
+
export function parseLogLine(raw) {
|
|
20
|
+
const match = raw.match(LOG_LINE_REGEX);
|
|
21
|
+
if (!match) {
|
|
22
|
+
return {
|
|
23
|
+
timestamp: null,
|
|
24
|
+
phase: null,
|
|
25
|
+
agent: null,
|
|
26
|
+
model: null,
|
|
27
|
+
tag: 'raw',
|
|
28
|
+
message: raw,
|
|
29
|
+
raw,
|
|
30
|
+
};
|
|
31
|
+
}
|
|
32
|
+
const [, timestamp, group1, group2, group3, rest] = match;
|
|
33
|
+
// Determine phase, agent, model from the captured groups.
|
|
34
|
+
// The log format can be:
|
|
35
|
+
// [ts] [phase] [agent|model] message → group1=phase, group2=agent, group3=model
|
|
36
|
+
// [ts] [agent|model] [WORKER] message → group1="agent|model", group2=WORKER
|
|
37
|
+
// [ts] [phase] [agent] message → group1=phase, group2=agent
|
|
38
|
+
// [ts] [phase] message → group1=phase only
|
|
39
|
+
let phase = null;
|
|
40
|
+
let agent = null;
|
|
41
|
+
let model = null;
|
|
42
|
+
let message = rest ?? '';
|
|
43
|
+
if (group2 != null && group1 != null) {
|
|
44
|
+
// Two bracket groups captured
|
|
45
|
+
if (group1.includes('|')) {
|
|
46
|
+
// group1 is [agent|model], group2 is next tag (e.g. WORKER)
|
|
47
|
+
const [agentPart, modelPart] = group1.split('|');
|
|
48
|
+
agent = agentPart;
|
|
49
|
+
model = modelPart ?? null;
|
|
50
|
+
// group2 becomes part of the message to be parsed as a tag
|
|
51
|
+
message = `[${group2}] ${rest ?? ''}`;
|
|
52
|
+
}
|
|
53
|
+
else {
|
|
54
|
+
// group1 is [phase], group2|group3 is [agent|model]
|
|
55
|
+
phase = group1;
|
|
56
|
+
agent = group2;
|
|
57
|
+
model = group3 ?? null;
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
else if (group1 != null) {
|
|
61
|
+
// Only one bracket group
|
|
62
|
+
if (group1.includes('|')) {
|
|
63
|
+
const [agentPart, modelPart] = group1.split('|');
|
|
64
|
+
agent = agentPart;
|
|
65
|
+
model = modelPart ?? null;
|
|
66
|
+
}
|
|
67
|
+
else {
|
|
68
|
+
phase = group1;
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
// Parse tag from message
|
|
72
|
+
const tagMatch = message.match(TAG_REGEX);
|
|
73
|
+
let tag = 'info';
|
|
74
|
+
if (tagMatch) {
|
|
75
|
+
tag = tagMatch[1].toLowerCase();
|
|
76
|
+
message = tagMatch[2];
|
|
77
|
+
}
|
|
78
|
+
return {
|
|
79
|
+
timestamp: timestamp ?? null,
|
|
80
|
+
phase,
|
|
81
|
+
agent,
|
|
82
|
+
model,
|
|
83
|
+
tag,
|
|
84
|
+
message: message.trim(),
|
|
85
|
+
raw,
|
|
86
|
+
};
|
|
87
|
+
}
|
|
88
|
+
/** Parse a [tool] message into tool name and args */
|
|
89
|
+
export function parseToolCall(message) {
|
|
90
|
+
const spaceIdx = message.indexOf(' ');
|
|
91
|
+
if (spaceIdx === -1) {
|
|
92
|
+
return { toolName: message, args: '' };
|
|
93
|
+
}
|
|
94
|
+
return {
|
|
95
|
+
toolName: message.slice(0, spaceIdx),
|
|
96
|
+
args: message.slice(spaceIdx + 1),
|
|
97
|
+
};
|
|
98
|
+
}
|
|
99
|
+
/** Parse a [result] message */
|
|
100
|
+
export function parseResultMessage(message) {
|
|
101
|
+
const charsMatch = message.match(/^(\d+)\s+chars/);
|
|
102
|
+
const sessionMatch = message.match(/session=(\S+)/);
|
|
103
|
+
return {
|
|
104
|
+
chars: charsMatch ? parseInt(charsMatch[1], 10) : 0,
|
|
105
|
+
sessionId: sessionMatch ? sessionMatch[1] : null,
|
|
106
|
+
};
|
|
107
|
+
}
|
|
108
|
+
/** Parse a [tokens] message */
|
|
109
|
+
export function parseTokensMessage(message) {
|
|
110
|
+
const match = message.match(/^(\d+)\s+in\s*\/\s*(\d+)\s+out/);
|
|
111
|
+
if (!match)
|
|
112
|
+
return { inputTokens: 0, outputTokens: 0 };
|
|
113
|
+
return {
|
|
114
|
+
inputTokens: parseInt(match[1], 10),
|
|
115
|
+
outputTokens: parseInt(match[2], 10),
|
|
116
|
+
};
|
|
117
|
+
}
|
|
118
|
+
/** Parse all lines from raw content string */
|
|
119
|
+
export function parseLogContent(content) {
|
|
120
|
+
if (!content)
|
|
121
|
+
return [];
|
|
122
|
+
return content
|
|
123
|
+
.split('\n')
|
|
124
|
+
.filter((line) => line.trim().length > 0)
|
|
125
|
+
.map(parseLogLine);
|
|
126
|
+
}
|