diff --git a/packages/app-bundle/manifest.json b/packages/app-bundle/manifest.json index dac0885a..9a3bec51 100644 --- a/packages/app-bundle/manifest.json +++ b/packages/app-bundle/manifest.json @@ -2,19 +2,19 @@ "schema": 4, "slices": "b (complete app-graph delta)", "scope": "complete fork-vs-base delta of packages/{app,ui,session-ui,schema,core,sdk}", - "fork_tag": "v1.18.10-amicode.16", - "fork_sha": "77bb1c8b76631f878fc5c963d4796219bc99ff4a", + "fork_tag": "v1.18.10-amicode.18", + "fork_sha": "3779ab82186831ab24b3797dc4a6790caf28b48a", "upstream_base": "v1.18.12", "upstream_base_sha": "0dd6950d1b06958fbcdcadf0ad56258257ab7fdb", - "extracted_at": "2026-08-23T15:32:52.432Z", + "extracted_at": "2026-08-29T12:57:55.266Z", "per_package": { "packages/app": { - "A": 102, - "M": 134, + "A": 113, + "M": 143, "D": 1 }, "packages/core": { - "A": 4, + "A": 5, "M": 30, "D": 0 }, @@ -29,20 +29,20 @@ "D": 0 }, "packages/session-ui": { - "A": 8, - "M": 26, + "A": 13, + "M": 28, "D": 0 }, "packages/ui": { - "A": 146, - "M": 45, + "A": 150, + "M": 62, "D": 6 } }, "counts": { - "overlay_total": 505, + "overlay_total": 554, "deletions": 7, - "server_coupled": 44 + "server_coupled": 45 }, "server_coupled_port_inventory": [ "packages/core/schema.json", @@ -51,6 +51,7 @@ "packages/core/src/database/migration.gen.ts", "packages/core/src/database/migration/20260813162312_shocking_karnak.ts", "packages/core/src/database/migration/20260820000001_add_session_directories.ts", + "packages/core/src/database/migration/20260828201050_normal_stryfe.ts", "packages/core/src/database/schema.gen.ts", "packages/core/src/flag/flag.ts", "packages/core/src/location-mutation.ts", @@ -126,8 +127,10 @@ "packages/app/src/components/session/session-new-view.tsx", "packages/app/src/components/session/session-sortable-terminal-tab-v2.tsx", "packages/app/src/components/settings-dialog.tsx", + "packages/app/src/components/settings-providers.tsx", "packages/app/src/components/settings-v2/dialog-settings-v2.tsx", "packages/app/src/components/settings-v2/general.tsx", + "packages/app/src/components/settings-v2/providers.tsx", "packages/app/src/components/settings-v2/settings-v2.css", "packages/app/src/components/status-popover-body.tsx", "packages/app/src/components/status-popover-indicator.test.ts", @@ -151,6 +154,7 @@ "packages/app/src/context/global-sync/session-cache.ts", "packages/app/src/context/global-sync/types.ts", "packages/app/src/context/language.tsx", + "packages/app/src/context/layout-tabs.test.ts", "packages/app/src/context/layout-tabs.ts", "packages/app/src/context/layout.tsx", "packages/app/src/context/local-agent.test.ts", @@ -216,8 +220,14 @@ "packages/app/src/pages/session/session-side-panel.tsx", "packages/app/src/pages/session/terminal-panel-v2.tsx", "packages/app/src/pages/session/timeline/message-timeline.tsx", + "packages/app/src/pages/session/timeline/projection.test.ts", + "packages/app/src/pages/session/timeline/projection.ts", + "packages/app/src/pages/session/timeline/rows-current.test.ts", + "packages/app/src/pages/session/timeline/rows.ts", + "packages/app/src/pages/session/timeline/timeline-row.ts", "packages/app/src/pages/session/use-session-commands.tsx", "packages/app/src/pages/session/v2/review-panel-v2-state.ts", + "packages/app/src/pages/session/v2/review-panel-v2.tsx", "packages/app/src/theme-preload.test.ts", "packages/app/src/utils/server-compat.ts", "packages/app/src/wsl/dialog-add-server.tsx", @@ -234,7 +244,9 @@ "packages/session-ui/src/components/markdown-stream.ts", "packages/session-ui/src/components/markdown.css", "packages/session-ui/src/components/markdown.tsx", + "packages/session-ui/src/components/message-part-text.ts", "packages/session-ui/src/components/message-part.css", + "packages/session-ui/src/components/message-part.test.ts", "packages/session-ui/src/components/message-part.tsx", "packages/session-ui/src/components/session-retry.tsx", "packages/session-ui/src/components/session-review.css", @@ -277,7 +289,24 @@ "packages/ui/src/components/tooltip.css", "packages/ui/src/context/dialog.tsx", "packages/ui/src/context/marked.tsx", + "packages/ui/src/i18n/ar.ts", + "packages/ui/src/i18n/br.ts", + "packages/ui/src/i18n/bs.ts", + "packages/ui/src/i18n/da.ts", + "packages/ui/src/i18n/de.ts", "packages/ui/src/i18n/en.ts", + "packages/ui/src/i18n/es.ts", + "packages/ui/src/i18n/fr.ts", + "packages/ui/src/i18n/ja.ts", + "packages/ui/src/i18n/ko.ts", + "packages/ui/src/i18n/no.ts", + "packages/ui/src/i18n/pl.ts", + "packages/ui/src/i18n/ru.ts", + "packages/ui/src/i18n/th.ts", + "packages/ui/src/i18n/tr.ts", + "packages/ui/src/i18n/uk.ts", + "packages/ui/src/i18n/zh.ts", + "packages/ui/src/i18n/zht.ts", "packages/ui/src/styles/index.css", "packages/ui/src/styles/theme.css", "packages/ui/src/theme/context.tsx", @@ -320,6 +349,7 @@ "packages/app/e2e/regression/review-line-comment.spec.ts": "M", "packages/app/e2e/regression/session-timeline-lifecycle-state.spec.ts": "M", "packages/app/e2e/regression/session-timeline-tool-projection.spec.ts": "M", + "packages/app/e2e/regression/tab-dblclick-close.spec.ts": "A", "packages/app/e2e/regression/tab-navigate-mousedown.spec.ts": "M", "packages/app/e2e/regression/workbench-drops.spec.ts": "A", "packages/app/e2e/regression/workbench-panes.spec.ts": "A", @@ -355,6 +385,7 @@ "packages/app/src/components/dialog-select-file.tsx": "M", "packages/app/src/components/help-button.tsx": "M", "packages/app/src/components/pane-bridge.tsx": "A", + "packages/app/src/components/profile-popover.tsx": "A", "packages/app/src/components/prompt-input-clipboard-structure.test.ts": "A", "packages/app/src/components/prompt-input-v2.tsx": "M", "packages/app/src/components/prompt-input.tsx": "M", @@ -381,6 +412,7 @@ "packages/app/src/components/session/session-sortable-terminal-tab-v2.tsx": "M", "packages/app/src/components/session/use-context-warning.ts": "A", "packages/app/src/components/settings-dialog.tsx": "M", + "packages/app/src/components/settings-providers.tsx": "M", "packages/app/src/components/settings-v2/data-storage-controller.ts": "A", "packages/app/src/components/settings-v2/data-storage.tsx": "A", "packages/app/src/components/settings-v2/developer-tools-controller.ts": "A", @@ -388,7 +420,10 @@ "packages/app/src/components/settings-v2/dialog-settings-v2.tsx": "M", "packages/app/src/components/settings-v2/general.tsx": "M", "packages/app/src/components/settings-v2/permissions.tsx": "A", + "packages/app/src/components/settings-v2/providers.tsx": "M", "packages/app/src/components/settings-v2/settings-v2.css": "M", + "packages/app/src/components/settings-v2/skills-controller.ts": "A", + "packages/app/src/components/settings-v2/skills.tsx": "A", "packages/app/src/components/solver-switch-banner.tsx": "A", "packages/app/src/components/split-frame.tsx": "A", "packages/app/src/components/status-popover-body.tsx": "M", @@ -422,6 +457,7 @@ "packages/app/src/context/global-sync/session-cache.ts": "M", "packages/app/src/context/global-sync/types.ts": "M", "packages/app/src/context/language.tsx": "M", + "packages/app/src/context/layout-tabs.test.ts": "M", "packages/app/src/context/layout-tabs.ts": "M", "packages/app/src/context/layout.tsx": "M", "packages/app/src/context/local-agent.test.ts": "M", @@ -477,6 +513,8 @@ "packages/app/src/pages/layout/session-tab-status.tsx": "A", "packages/app/src/pages/layout/sidebar-items.tsx": "M", "packages/app/src/pages/layout/sidebar-workspace.tsx": "M", + "packages/app/src/pages/new-session-landing.test.ts": "A", + "packages/app/src/pages/new-session-landing.ts": "A", "packages/app/src/pages/new-session.tsx": "M", "packages/app/src/pages/new-session/new-session-draft-controller.ts": "M", "packages/app/src/pages/new-session/new-session-view.test.ts": "A", @@ -498,6 +536,8 @@ "packages/app/src/pages/session/composer/session-question-dock.tsx": "M", "packages/app/src/pages/session/composer/session-revert-dock.stories.tsx": "M", "packages/app/src/pages/session/composer/session-revert-dock.tsx": "M", + "packages/app/src/pages/session/composer/session-tour.test.ts": "A", + "packages/app/src/pages/session/composer/session-tour.tsx": "A", "packages/app/src/pages/session/composer/todo-panel-motion.stories.tsx": "M", "packages/app/src/pages/session/helpers.test.ts": "M", "packages/app/src/pages/session/helpers.ts": "M", @@ -508,6 +548,14 @@ "packages/app/src/pages/session/terminal-panel-v2.tsx": "M", "packages/app/src/pages/session/timeline/last-prompt-bubble.test.ts": "A", "packages/app/src/pages/session/timeline/message-timeline.tsx": "M", + "packages/app/src/pages/session/timeline/projection.test.ts": "M", + "packages/app/src/pages/session/timeline/projection.ts": "M", + "packages/app/src/pages/session/timeline/rows-current.test.ts": "M", + "packages/app/src/pages/session/timeline/rows.ts": "M", + "packages/app/src/pages/session/timeline/thought-rail.test.ts": "A", + "packages/app/src/pages/session/timeline/thought-rail.tsx": "A", + "packages/app/src/pages/session/timeline/timeline-row.ts": "M", + "packages/app/src/pages/session/timeline/travelling-dot.test.ts": "A", "packages/app/src/pages/session/use-amicode-commands.test.ts": "A", "packages/app/src/pages/session/use-amicode-commands.tsx": "A", "packages/app/src/pages/session/use-session-commands.tsx": "M", @@ -515,10 +563,12 @@ "packages/app/src/pages/session/v2/accumulate-diffs.ts": "A", "packages/app/src/pages/session/v2/review-panel-v2-state.test.ts": "A", "packages/app/src/pages/session/v2/review-panel-v2-state.ts": "M", + "packages/app/src/pages/session/v2/review-panel-v2.tsx": "M", "packages/app/src/theme-preload.test.ts": "M", "packages/app/src/utils/amicode-bridge.ts": "A", "packages/app/src/utils/amicode-bug-report.test.ts": "A", "packages/app/src/utils/amicode-bug-report.ts": "A", + "packages/app/src/utils/amicode-developer.ts": "A", "packages/app/src/utils/amicode-fetch.ts": "A", "packages/app/src/utils/amicode-hidden-project.test.ts": "A", "packages/app/src/utils/amicode-hidden-project.ts": "A", @@ -528,6 +578,8 @@ "packages/app/src/utils/global-clipboard.test.ts": "A", "packages/app/src/utils/global-clipboard.ts": "A", "packages/app/src/utils/pane-bridge.ts": "A", + "packages/app/src/utils/provider-disconnect.test.ts": "A", + "packages/app/src/utils/provider-disconnect.ts": "A", "packages/app/src/utils/serialize-session.test.ts": "A", "packages/app/src/utils/serialize-session.ts": "A", "packages/app/src/utils/server-compat.ts": "M", @@ -546,6 +598,7 @@ "packages/core/src/database/migration.gen.ts": "M", "packages/core/src/database/migration/20260813162312_shocking_karnak.ts": "A", "packages/core/src/database/migration/20260820000001_add_session_directories.ts": "A", + "packages/core/src/database/migration/20260828201050_normal_stryfe.ts": "A", "packages/core/src/database/schema.gen.ts": "M", "packages/core/src/flag/flag.ts": "M", "packages/core/src/location-mutation.ts": "M", @@ -584,10 +637,14 @@ "packages/schema/test/question.test.ts": "A", "packages/sdk/js/src/v2/gen/sdk.gen.ts": "M", "packages/sdk/js/src/v2/gen/types.gen.ts": "M", + "packages/session-ui/bunfig.toml": "A", + "packages/session-ui/happydom.ts": "A", "packages/session-ui/package.json": "M", "packages/session-ui/src/components/basic-tool.css": "M", "packages/session-ui/src/components/basic-tool.stories.tsx": "M", "packages/session-ui/src/components/basic-tool.tsx": "M", + "packages/session-ui/src/components/build-trace.test.ts": "A", + "packages/session-ui/src/components/build-trace.ts": "A", "packages/session-ui/src/components/group-parts.test.ts": "A", "packages/session-ui/src/components/line-comment-styles.ts": "M", "packages/session-ui/src/components/markdown-file-refs.test.ts": "A", @@ -600,7 +657,9 @@ "packages/session-ui/src/components/message-part-groups.ts": "A", "packages/session-ui/src/components/message-part-skill.test.ts": "A", "packages/session-ui/src/components/message-part-skill.ts": "A", + "packages/session-ui/src/components/message-part-text.ts": "M", "packages/session-ui/src/components/message-part.css": "M", + "packages/session-ui/src/components/message-part.test.ts": "M", "packages/session-ui/src/components/message-part.tsx": "M", "packages/session-ui/src/components/session-retry.tsx": "M", "packages/session-ui/src/components/session-review.css": "M", @@ -612,6 +671,7 @@ "packages/session-ui/src/v2/components/attachment-card-v2.css": "M", "packages/session-ui/src/v2/components/basic-tool-v2.css": "M", "packages/session-ui/src/v2/components/basic-tool-v2.tsx": "M", + "packages/session-ui/src/v2/components/file-name-picker.test.tsx": "A", "packages/session-ui/src/v2/components/prompt-input/attachments.ts": "M", "packages/session-ui/src/v2/components/prompt-input/index.tsx": "M", "packages/session-ui/src/v2/components/session-review-file-preview-v2.tsx": "M", @@ -668,6 +728,9 @@ "packages/ui/src/amicode/frontier.test.ts": "A", "packages/ui/src/amicode/frontier.ts": "A", "packages/ui/src/amicode/getting-started.tsx": "A", + "packages/ui/src/amicode/harmonic-dot.tsx": "A", + "packages/ui/src/amicode/harmonic-geometry.test.ts": "A", + "packages/ui/src/amicode/harmonic-geometry.ts": "A", "packages/ui/src/amicode/home-cards.tsx": "A", "packages/ui/src/amicode/institution-lookup.ts": "A", "packages/ui/src/amicode/onboarding-wizard.test.ts": "A", @@ -741,6 +804,7 @@ "packages/ui/src/components/amicode-entity-view.tsx": "A", "packages/ui/src/components/amicode-footer.tsx": "A", "packages/ui/src/components/amicode-getting-started.tsx": "A", + "packages/ui/src/components/amicode-harmonic-dot.tsx": "A", "packages/ui/src/components/amicode-home-cards.tsx": "A", "packages/ui/src/components/amicode-onboarding-wizard.tsx": "A", "packages/ui/src/components/amicode-problem-switcher.tsx": "A", @@ -787,7 +851,24 @@ "packages/ui/src/context/dialog.tsx": "M", "packages/ui/src/context/marked-math.test.ts": "A", "packages/ui/src/context/marked.tsx": "M", + "packages/ui/src/i18n/ar.ts": "M", + "packages/ui/src/i18n/br.ts": "M", + "packages/ui/src/i18n/bs.ts": "M", + "packages/ui/src/i18n/da.ts": "M", + "packages/ui/src/i18n/de.ts": "M", "packages/ui/src/i18n/en.ts": "M", + "packages/ui/src/i18n/es.ts": "M", + "packages/ui/src/i18n/fr.ts": "M", + "packages/ui/src/i18n/ja.ts": "M", + "packages/ui/src/i18n/ko.ts": "M", + "packages/ui/src/i18n/no.ts": "M", + "packages/ui/src/i18n/pl.ts": "M", + "packages/ui/src/i18n/ru.ts": "M", + "packages/ui/src/i18n/th.ts": "M", + "packages/ui/src/i18n/tr.ts": "M", + "packages/ui/src/i18n/uk.ts": "M", + "packages/ui/src/i18n/zh.ts": "M", + "packages/ui/src/i18n/zht.ts": "M", "packages/ui/src/solid-dnd.d.ts": "A", "packages/ui/src/styles/index.css": "M", "packages/ui/src/styles/theme.css": "M", @@ -808,8 +889,7 @@ "packages/ui/src/v2/components/toast-v2.css": "M", "packages/ui/src/v2/components/tooltip-v2.css": "M", "packages/ui/src/v2/components/wordmark-v2.tsx": "M", - "packages/ui/src/v2/styles/theme.css": "M", - "packages/app/src/pages/session/v2/review-panel-v2.tsx": "A" + "packages/ui/src/v2/styles/theme.css": "M" }, "files": { "packages/app/CONTEXT.md": "87b15a82a89ea1c82e0d647c169a259a1ef5193893854f2cfed54526762898ca", @@ -829,7 +909,7 @@ "packages/app/e2e/regression/tab-navigate-mousedown.spec.ts": "8521d43183f0df624449edbba8ee4dc646f0ecb84a9c5a04d275613f9da875ae", "packages/app/e2e/regression/workbench-drops.spec.ts": "0188f4f1ff07a40945a4900bfa85e21a4f578be9f18257a803200a18ce41ac05", "packages/app/e2e/regression/workbench-panes.spec.ts": "e0dfb84bd1b8be00a89cf48387aeaab5ec75845e8efbc8e4fa8252204fb27e8f", - "packages/app/e2e/smoke/session-timeline.spec.ts": "7dc5b08126af46fa11727bd0ff2f3b25a04e430afbf84c8bafb4b73f4609dd2d", + "packages/app/e2e/smoke/session-timeline.spec.ts": "4006274a5001e36502e16b11ef7b9caee5dfdad2280766380470c72118b7fd90", "packages/app/e2e/utils/waits.ts": "53959eeae1e6562a2e6c578b261140c74fe9fc30e1e4c46295d3252b6d274a74", "packages/app/index.html": "fa38026be3b7e7ec38958a558d7b4d059140b2aff998c3ac862601543702584d", "packages/app/playwright.config.ts": "b7dae0b39248b4ddf7cba829af96ac7fe3cc919add9711ecb5292d9bd52e1805", @@ -838,12 +918,12 @@ "packages/app/public/assets/DMSans-Variable.woff2": "aa530716b0d351866af7dbfa3eee4120fb36f2d071baff8c234185141865c7ff", "packages/app/public/assets/JuliaMono-Regular.woff2": "43f5dfca02a03035f89799da5af150f28d5c4aff729753076094c687fc61b063", "packages/app/public/assets/RacingSansOne-Regular.woff2": "2ff92c8abe7a35962922c54da215d68690f8502463698b1b595bed597b63e3ff", - "packages/app/public/oc-theme-preload.js": "aad72db4d57b84d3a3533ea97a80e4a127f824ec729d4bf0b657fb911d1d149a", + "packages/app/public/oc-theme-preload.js": "27227e802b3494e7c545da903e679efdb30ccc754cd4eb5cdf08005a40d560b6", "packages/app/src/amicode/inspector/device-inspector.tsx": "5ab63709e88176bb4dad1072ffe28fd59ad67d414c9d844ee6c55353df50df79", "packages/app/src/amicode/inspector/inspector-bridge.ts": "460dbf4509b4e56a8eacd6cac7adcb3a63c6cd3e417d851df5f3e3b259095d3e", "packages/app/src/amicode/inspector/inspector-context.tsx": "ac81b9e0e2a4035f85b6af68b7f0cefcb9f256a175b244ba13136f3a307c0c77", "packages/app/src/amicode/inspector/run-inspector.tsx": "63a6351fad12a8377550eb87f7602a712bae586fe482ff46cd847c8544fc6e8a", - "packages/app/src/app.tsx": "de9d50560c1405dad9db47331aca59bc42ef15a780eba962b5b78ba46b26fa4e", + "packages/app/src/app.tsx": "b3a213dc820b8e627013bc14d901809c54fcd41577406544787ea9b92294b440", "packages/app/src/components/amicode-default-model-value.ts": "416bb4a7cf051c678bdfc5246ddc5796a9a6efe48d1e5c2e933756800cfdae8d", "packages/app/src/components/amicode-default-model.test.ts": "941750d074706bd5f4e433c9737b19ebc0ac0f9ba9cd1faaa599a24b22126e05", "packages/app/src/components/amicode-default-model.tsx": "16a2de1feb12e07416fe5fbb25879391f912ee0909b553c868c1b531f2ed1f2d", @@ -861,12 +941,13 @@ "packages/app/src/components/dialog-select-file.tsx": "e6278ee35dd27d203e00ad73f70c709c44a6c06f81ffbd931edfaa0c986b9e03", "packages/app/src/components/help-button.tsx": "780d533f776a784660cfed072a131198bc6fcc8e8fe332e8e1a220d516c9684e", "packages/app/src/components/pane-bridge.tsx": "756b3306b51c963fac6778716f6c6c4626f0f3bf75c93b7cb4cab58ea0bf3d4e", - "packages/app/src/components/prompt-input-clipboard-structure.test.ts": "8c15844499378d6ae1d84d7c6f5b99bf37cd9baf5b35a45dc1535246f3d324c6", - "packages/app/src/components/prompt-input-v2.tsx": "e0fe11b399cc0fd8091a046faff3189e2bb5a42c90d11909e1a87810956883b3", - "packages/app/src/components/prompt-input.tsx": "641c5db9bd27a90887935c9b6fae45ee250504f17b25891eb51f292e4273d320", + "packages/app/src/components/profile-popover.tsx": "eff742e90544455f13234a9351bb1b82189663cba2cd3172bdcea1a8a37284e8", + "packages/app/src/components/prompt-input-clipboard-structure.test.ts": "946b718c2164da394602f26e4d9919d752da0d0b9bee714f345ba16c274542da", + "packages/app/src/components/prompt-input-v2.tsx": "9ec794b2b9dbcfbfeb9d880df0038087fe6b8df219c5c96b1971f7fc766b67d2", + "packages/app/src/components/prompt-input.tsx": "1bc71d585a5ada2caf6d190d702dcabbfb56642e740a08ad6aedf078809b60e5", "packages/app/src/components/prompt-input/attachments.ts": "c3c28df0d2f18378d39e17147a4c64e8ea01d63b97c39e1874ed9445ca671bb1", - "packages/app/src/components/prompt-input/clipboard-bridge.test.ts": "cbc50495466c169d4f558cdb0aea5fc9215baf5257ddbde0414491826e4087d9", - "packages/app/src/components/prompt-input/clipboard-bridge.ts": "556f79e96388bee80fa1c38b5e916f7efd1d87227c1e9eded8ddc59de47b961c", + "packages/app/src/components/prompt-input/clipboard-bridge.test.ts": "15f76dca1a25d024128718e4099220b79ca029263410aab55502cf9caf9b2914", + "packages/app/src/components/prompt-input/clipboard-bridge.ts": "4b5a1edf59d4c85268d6ff72aa9f9d66f82d4fdb887121fb978c09caf4c5be65", "packages/app/src/components/prompt-input/context-items.tsx": "027b02e394ccd14849052bf3fcacdae1e090c71d164fa8955addfe3f7abf1758", "packages/app/src/components/prompt-input/image-attachments.tsx": "30cdea4285884b4c257670b57ade4266f5861e8a303d3355a591f302ed4bf965", "packages/app/src/components/prompt-input/placeholder.ts": "f085dc0cae6c2267f1a4a0e819dc9061d97ebdabb3baeae44f91376fbf1a4837", @@ -874,29 +955,31 @@ "packages/app/src/components/prompt-project-selector.tsx": "1d0970b4d067261d3b88af089537be8200369e490d2e02553043a140d9a8e961", "packages/app/src/components/report-bug-button.css": "909809b6241d53c386aa4c8ea34539ba162a8998fff755834c783025bc53a5fd", "packages/app/src/components/report-bug-button.stories.tsx": "82aed22bd3fcca448841205dee759ca0f0de92562a99d07c696eee5bd29e807b", - "packages/app/src/components/report-bug-button.tsx": "be2f106e0e5b318f15c8e5fec71f912e359c1ea71c759f271f878e3514de67f1", - "packages/app/src/components/session-context-usage.tsx": "f5b07800bbe571067a8625d6175a29ec1626c365fc336e96db92f6506a84aaa3", + "packages/app/src/components/report-bug-button.tsx": "a1beb8c94b4faaa4c7db3ab68de349f8a8a03cb3a058ce447f552aed35848d43", + "packages/app/src/components/session-context-usage.tsx": "cd25a9af91c73d0cb53000261e066dc16385e1a3ea13e92392fd3a5ca7b33032", "packages/app/src/components/session/context-warning-banner.tsx": "f5fab4d7a9536238b70d64488fc30d44f6a4948fdcffd910a9666f4b6c296019", "packages/app/src/components/session/index.ts": "21473290d4a1a3d0670fd878372ddf21ff22d4a0b30d1aef6c81ea906c1488b4", - "packages/app/src/components/session/panel-menu.tsx": "e3846ff425d7e6bcbd21930bf8beecad669549fbd54b2467c32584b1ed56534a", + "packages/app/src/components/session/panel-menu.tsx": "42f323046b7375ae158023a51506038eb15f2e1545c407f45acd47446a8ef3e0", "packages/app/src/components/session/session-chats-dropdown.test.ts": "2003d2a15781337ea6bff2c68e730cc5b6df38697f15d927ab26913936444db7", - "packages/app/src/components/session/session-context-tab.tsx": "bb7570e1f8ef796224c159d988fab09d665110e89d73f0f902c79bb2178255e0", - "packages/app/src/components/session/session-header.tsx": "af94ac489912e7be7ca3249c6c6bffa5110e0c392a853f67e9e2a7189acfe9ea", + "packages/app/src/components/session/session-context-tab.tsx": "227243b178b517f067d9ae0ae0eec3c559beeb6681828158b0600a17e98e7f81", + "packages/app/src/components/session/session-header.tsx": "1d6bcaededf364ba62bf2e3a3041662db0ee12cfc18eb181132a2cefb77b101e", "packages/app/src/components/session/session-new-view.tsx": "9510a4f550a3f0d4791e98e8025666f09d70a60fb66f193e48ee61feddae5a57", "packages/app/src/components/session/session-preview-tab.tsx": "b6b4b8fe6f751499e0d3005e1f12224351df4f28f221bba10fc2f91c0f09e777", "packages/app/src/components/session/session-sortable-terminal-tab-v2.tsx": "08db0e378c3e07d243121f40c77e153bafe897e5e2ececd48a3e00786793032b", "packages/app/src/components/session/use-context-warning.ts": "af7a6d0159a5541aa02ad4d08fd694af1cc4853fc1c0a70763bc264a634d1c53", "packages/app/src/components/settings-dialog.tsx": "da3bc01dad4ece4214c14083ae4e7dea87ef64ef9829b315b867fdafccdb6916", + "packages/app/src/components/settings-providers.tsx": "c86c9bf4a6f6e198dc7b0995a69d5b76e851144987bbe601802b1b0120ee4ac4", "packages/app/src/components/settings-v2/data-storage-controller.ts": "fa5d143cc101f3a3b9d5ad445edddc981e0d02783021d52dbfed6c8d8bf62498", "packages/app/src/components/settings-v2/data-storage.tsx": "a56b423b32c952c4379688d88d13a9f43b163a4169b9393f8c35b18a763a1180", - "packages/app/src/components/settings-v2/developer-tools-controller.ts": "dca45b8ca7fa5f7790ebd67dd1502d729e15887deeda5a86fd9df0f959464f98", - "packages/app/src/components/settings-v2/developer-tools.tsx": "96ccc0e2ba8ee40eeeaea4933ad176a4029a1b972364e070f0cb027d8fb0a1db", + "packages/app/src/components/settings-v2/developer-tools-controller.ts": "90bc8b93cf0ec10b052fccf9fca56f3a1b1b832420f2485812ed181738a69169", + "packages/app/src/components/settings-v2/developer-tools.tsx": "41456cb822f526cb39a6ca1b2984be410a9a87c0298dd524f81403a40afb4117", "packages/app/src/components/settings-v2/dialog-settings-v2.tsx": "f7f77f6a97aba28b2619a2281a57375ada3a879d1cb62a2f5c0d83bca92c4f11", "packages/app/src/components/settings-v2/general.tsx": "7efddf68e7b7332f396934b76c35267763223a351e91121e6eeaa9f5390df76d", "packages/app/src/components/settings-v2/permissions.tsx": "c91efb2cd0b6fbc01cc28d540475b9b4ff19370d47f8291a22f7a0a2545bc51a", + "packages/app/src/components/settings-v2/providers.tsx": "e15f23a40058abb4299ad7444df2845e3c24b5da3ca58a731e0cbafe58de2a76", "packages/app/src/components/settings-v2/settings-v2.css": "3a7fe0e2d0b463ae9127b420910fab2f726b4ea6fcc110ed8aba63510f8e0bc1", "packages/app/src/components/settings-v2/skills-controller.ts": "2c7344d144da0eec1c25083ead45f5afb2a8c6fd759541ad719cae9a09fcd19b", - "packages/app/src/components/settings-v2/skills.tsx": "653695b40c4a6e4a15a7e4ed02e11871bbc26498440658ffd531d66d9b3c8a33", + "packages/app/src/components/settings-v2/skills.tsx": "42deb0c11fcba158abad857b9644ffb551aed5ba9e00dbfd1584a7ffaaba5aa0", "packages/app/src/components/solver-switch-banner.tsx": "ec7edeec6dc05a4a06b39241b4f3a8e7534da97722dd8ec6f26ff782025802e9", "packages/app/src/components/split-frame.tsx": "44c53737f72027b461097c03df48a4f411d04a82d02b1fce4901813c73dfcc72", "packages/app/src/components/status-popover-body.tsx": "a78d557256283fd05657d999b2a6babc0bcb5ae3dcfa2cb07f770ebb602a94a1", @@ -905,18 +988,18 @@ "packages/app/src/components/status-popover-model.test.ts": "10634035bab0f31de24564e0d6c8413a0f7434fb2c08ac3ef722981a69dd08e7", "packages/app/src/components/status-popover-model.ts": "ec5a5a3caf9344fe617c7bc668af81d96ad4290378c34186cd4cd959821f1c85", "packages/app/src/components/status-popover.tsx": "663b3ab44218780b3415120c42d89a2a410ba0054231e8fdd0887a97a1b75b23", - "packages/app/src/components/terminal.tsx": "747938975e4bdddd00d9ad2485aae885ee9af9222011c1dfc286f1f757c9b605", - "packages/app/src/components/titlebar-channel.test.ts": "fe4dbe37e8b599878e16f2e56a62814fa787a94f2e523b3ca3f2d5310cf940cb", - "packages/app/src/components/titlebar-channel.ts": "2e01bb619f36799a684952538bc47844bac96a2c5eaaed240c6317d2b07b8efa", + "packages/app/src/components/terminal.tsx": "2ce242034ae129c1f475c7a24fdec3facdd9bb1f49ba8c6b503643b07ae241e5", + "packages/app/src/components/titlebar-channel.test.ts": "184238871c46f586dcc21081f710e37a77914c983fccf250665c7317212e41d8", + "packages/app/src/components/titlebar-channel.ts": "385ace91d3c69c92f5b442bf15d2040e35df855f1d4ece47312c1ff8e1b01780", "packages/app/src/components/titlebar-tab-nav.css": "90930c2f9476fb0eace8692424a029b3510781c88d1ee61f7f2edba559526832", - "packages/app/src/components/titlebar-tab-nav.tsx": "ef94567ec6365126082838e01d0b8c3f8f0b03b2b7528ebd8d152ecdc699a111", + "packages/app/src/components/titlebar-tab-nav.tsx": "2304e936af56c24f27f1549f4f8751a600ed274123d7a3973ecfa6a5bb28102c", "packages/app/src/components/titlebar-tab-popover.css": "d731db2d7d49838004089a3d82ff68c22214b0ca636bf3b8e02498c14dadbf8d", - "packages/app/src/components/titlebar-tab-strip.tsx": "182a21a367b36dca30a570ea98015f434cec49db671edca6e921778a3abeb6e8", - "packages/app/src/components/titlebar.tsx": "359d41238a3503900621877d8094e50517cb53870428e4c0fb316858c3381a40", + "packages/app/src/components/titlebar-tab-strip.tsx": "932a2d01e6673d283a48d704b580f7a7b88ba000061d11f6df5efe994dbd4ee3", + "packages/app/src/components/titlebar.tsx": "609ae6fa360f4bba67e2ceabd3cd7f3ff473257e20f69e42da9514de7c4b12ed", "packages/app/src/components/ui/drawer.tsx": "76574ca4c6997209f37a766a61000d707332a9a857f6ea8100a3cee1be58d65c", - "packages/app/src/components/vault-browser-model.test.ts": "1fa12ca9743e1055e6a17d26e6047812ba02d7b23c4fbf00b6df53d7b2927f09", - "packages/app/src/components/vault-browser-model.ts": "0387ee56647e809fc65382c256e10c0f7fa296c40eac471c7db77487855d568c", - "packages/app/src/components/vault-browser.tsx": "d44fef1401de52e1963ad496ada0889f7ebc5695adf0e61fec7ffeba45300a16", + "packages/app/src/components/vault-browser-model.test.ts": "7ca11eae3574033d58081bc4126b1ec772a5b496573c70159f05497a1365f4cd", + "packages/app/src/components/vault-browser-model.ts": "d9ef6ff588a96ae79b13c3ae0c2a442a42b59021dd501b3a17bd810dda6f7b20", + "packages/app/src/components/vault-browser.tsx": "509efa874d69bcd07ef2495a025bc8de2b2fa582736003ff709b4ca76096274b", "packages/app/src/components/vault-panel.tsx": "1d9f06f42b94ffb94a28bfd6d2693a36c75ceb969bcd434081b4cd2fbf99665c", "packages/app/src/components/windows-app-menu.tsx": "460669a129e9be61ab2d5f51fe6ecad73579a395295d5f724f235b988cdc667e", "packages/app/src/components/workbench-panel.tsx": "d16f477044098842a214a2e16f9be719e7688a04bcb575889ca544988f23c690", @@ -930,10 +1013,11 @@ "packages/app/src/context/global-sync/session-cache.ts": "1849408caba0f114809f37153e7d531bf2776572433880a96c5ebd31d7b30aa3", "packages/app/src/context/global-sync/types.ts": "901c9bd1fda63dab676d33dc1a8582a29f8ee00aa20458e843aed5f93414fa84", "packages/app/src/context/language.tsx": "cb545e04c128bf981b2b72ac407f9220cf9e80337fe8c87482ffe85407e0cf9a", + "packages/app/src/context/layout-tabs.test.ts": "4d9fdbe963306f164b2f48eac3b6a28c5a703c1758bf14b2cc4796720d8fa72c", "packages/app/src/context/layout-tabs.ts": "741506ce165f68cdb0b8f2931a2dad3e26c05880f9286c3daf04ec979bac21c5", "packages/app/src/context/layout.tsx": "54dbe82c704c92109eb392b512fe2d828a5ff00a14315173ad8923bf0621d788", - "packages/app/src/context/local-agent.test.ts": "3b6ae305a44511a64488ce75b7b8f09d4e222ae88f6fe8d59a7133877d8f4b46", - "packages/app/src/context/local-agent.ts": "ddcee2643591df1eaf89de8b2d94919cfe80822d5ea57dba30c73865053d2ff9", + "packages/app/src/context/local-agent.test.ts": "a5a9d60bb4401d409218cc247c1cc06ede8b7878ddf01dc6080328f54eb9cade", + "packages/app/src/context/local-agent.ts": "0aab67e695dc3bb45a733ac0df80a0a5e14cfe29b2375b6dc3cd07fbccea33e2", "packages/app/src/context/local.tsx": "3ab8b9fc2db082df4ba485373679f00a95d0ffe3c691a0afee1dc53db7eabd9e", "packages/app/src/context/models.tsx": "8904525767b36ed5ba93e85a0fddb9bf737a8d066dfff084380ce1a67182f535", "packages/app/src/context/platform.tsx": "d4ee3f33e485f5fd6d6d449edcc7da0bbbed733e139f9f293fd011e78153c6c5", @@ -941,81 +1025,93 @@ "packages/app/src/context/server-sdk.tsx": "b3450d9bdafde6ed1a95d7dc970fc9f33bef81531b05245c36b789878d09d186", "packages/app/src/context/server-session.ts": "009fcdb6cd374c0f2cac53d37952afaa611f65371b43ff84f3654cffa8c56b18", "packages/app/src/context/server.tsx": "08e978e4b4b3094221a2a0b92e069f39cbedb6d6cf95935881e21cde52265ee2", - "packages/app/src/context/settings.tsx": "1187bcab92b8e6f622f7522aaed185e144d1b174b91487935ad542703cbed3e5", + "packages/app/src/context/settings.tsx": "a2806d54412bf03f0a35467f21fa5ffa45cd569d69bd4722209a116ef965f921", "packages/app/src/context/split.tsx": "891aeb290b369b327a63ce548dcaab1daca08e41fab430648787be7f84e53ec0", "packages/app/src/context/tabs.tsx": "6ca4ae0d85d5456cdda6f9aaec7e6aab0ca8aef0296b61f8bae7ee51da150a0a", "packages/app/src/context/vault-panel.ts": "f91cb5fb49a9f0d46bd2a1b131f9a218b30147e2ad3617d2a2dc4f1e14599a53", "packages/app/src/context/workbench.tsx": "69a44da2b69989bd2c67ebffdb49941841f3f4718d6a70d659c828b57928d9eb", "packages/app/src/context/zoom-keybind.test.ts": "a1385c93639687a7dac7d21f8f02841d82a55e42465ce3836b97b16c82b52469", - "packages/app/src/design-polish.css": "ac3721d894b22876afe34984f6272c0add22fb3f2194f1ed3b0accb3cfe54bb0", + "packages/app/src/design-polish.css": "98b7a080cde883dbc5fe3c2e629a87ae626cc7d0f54ffa08612274d819a1c24a", "packages/app/src/desktop-menu.ts": "55481604f4fd5dcb74b0678347076c42fda7f928590d90bc2c3d1633bea8bc36", - "packages/app/src/entry.tsx": "da720fb72421c8e247a925fc627b24096e9d228dcff078cec81cc68f9bd37f2f", - "packages/app/src/i18n/ar.ts": "2b5e0c7f5a8c4ebc0305c956a8d9944c3cc86b1169bfe995d1b72a5bc9b5067d", - "packages/app/src/i18n/br.ts": "04f77c8d95bf83eead10db5166f5348cd9fb20940124fe117606c48ddeded9c5", - "packages/app/src/i18n/bs.ts": "798e3aa47f037f22cb0f0c54f96d1fd7ea257f303f87273dc09408b98b4aa314", - "packages/app/src/i18n/da.ts": "d2be9c55970e859d16751bd10fb61c15a5a5357550a13b3ede93736700cdce73", - "packages/app/src/i18n/de.ts": "84b0c448418236c529f65ec061d829c6de81a7c475df063f69a4163d00a205bf", - "packages/app/src/i18n/en.ts": "39ece5502ffb96313c654e52e357ec805edc2ec42daa66eb289594e013a51c7a", - "packages/app/src/i18n/es.ts": "5dae047cff6fa6020c4e3ec0423fe210f02b7a2577039184bdbfbff3cd2a3c49", - "packages/app/src/i18n/fr.ts": "0e1bf25a4b3be9e7aa98df2a40c0b4a819cdecfb968d3724a2db7aa9b17a7b60", - "packages/app/src/i18n/ja.ts": "5cc5332076182e3f7da433d9677c8b9c1330874b0a2010ddf61a6e87b435e06c", - "packages/app/src/i18n/ko.ts": "bac03c8dc86207b10d26a137f0bf848d9c4da996fb39dd092f8f2fca140c803c", - "packages/app/src/i18n/no.ts": "655b405e831778237e2f56c5ab91e5b70fb28726a33374c173a7a54d8dea5572", - "packages/app/src/i18n/pl.ts": "0ba6615a07bd247958329692944a2492770407f9f34acdb12ab3083acddcead2", - "packages/app/src/i18n/ru.ts": "2c9d4cc273ff6259146e8031baf7fa501bfcba9895235982e21aaa9e726afec3", - "packages/app/src/i18n/th.ts": "55c4c7ef43be1832df368de69f626b714e4fe11e6e791b18b2c31c022bdc0037", - "packages/app/src/i18n/tr.ts": "01b9fe2566442d1c67019b440174cfe25424a0e9f082ea6566ed12d7d8ec065a", - "packages/app/src/i18n/uk.ts": "98c397aaaba1e66bd3e9fc6041b2a5ea0913077b203839dd16b8714db90d9a04", - "packages/app/src/i18n/zh.ts": "20c0ce167ed34d6fecf26d7f2c79839d9d7cbbf23286679ff019afd98f7a8d46", - "packages/app/src/i18n/zht.ts": "1a40c07bc44d2494a09990f2eb9cdb972ded8c74d053e4b9fd49fe4fb4c5df8a", - "packages/app/src/index.css": "a08619fc66175810dc12514cacee7afc3cf592df91b888e1e92ffb553a00840d", + "packages/app/src/entry.tsx": "f35e1017f4c9d478d254b2a38043e5750064b6bef25169c3e07ae9f72ff1049c", + "packages/app/src/i18n/ar.ts": "28cd812279cf0435d59b90912cb94044d95b9476b9f125de219e856928230681", + "packages/app/src/i18n/br.ts": "4dbccb7c1b618de7adb8182a26fd8033b42937613d9a8c31dbb329e0dce5e64f", + "packages/app/src/i18n/bs.ts": "09f6e5fed81e06a1dcabe2cf011b4cdbbc04ce7dce3b62792cca33867eeeb009", + "packages/app/src/i18n/da.ts": "3b9aa81a934df108e3201a771452a0df1d1e3410516ef8b5e78d1fdc89e05b8c", + "packages/app/src/i18n/de.ts": "3e7c56e1b38c6c8555fe9c944097b87de563c43990ac62d0d341b820fa292724", + "packages/app/src/i18n/en.ts": "fbd61c5068fd8bceb262ac8d6c4103e6f6795f672db8b6fc6ab4d3e4f06c9293", + "packages/app/src/i18n/es.ts": "4da12deea30d5a59a1951b117b796ae200f9e276a253bbf12f38ce493bcabf61", + "packages/app/src/i18n/fr.ts": "b4e44f910b6329384d6b829f5062a73b7ae63c8d9095b04aaf80c1335603674d", + "packages/app/src/i18n/ja.ts": "659865ed067c1dde1444c8561de26eac95e54dcb2407267f14b9f45994c5ac4f", + "packages/app/src/i18n/ko.ts": "df31dc838120bcc0b31d7837ad87bde0c573b519e37080e6bce5cbf9dcfe08cf", + "packages/app/src/i18n/no.ts": "25e8ef730b71829e71c232a58797b7130f17461fb6b707bc9ec04c22ac4e389c", + "packages/app/src/i18n/pl.ts": "26ac13d31f7b0c835e4b5c3c6a5d118b610098487ec3132ab6e2cdf2f28ce02a", + "packages/app/src/i18n/ru.ts": "22c7053a3323ac70607e4c298ed8e39cd93188712a3b521760ffd18c20e3b206", + "packages/app/src/i18n/th.ts": "4fb6bc8ad159c1dc6968e04ecb7d9b13502518ccc011e0b8cf31457f9696e7f4", + "packages/app/src/i18n/tr.ts": "a1323a199ed765e3a85e2f231213d4f0732c7eedbc57fb497d34fca0775b2a11", + "packages/app/src/i18n/uk.ts": "1e19646ad7c00359633c31afccd26ad2e818b4daeb13dbeefe1f6645f110c157", + "packages/app/src/i18n/zh.ts": "f029176c561e5ae2c05311a0f03f77308ac97982c90b6ddca2a350f5f34079a5", + "packages/app/src/i18n/zht.ts": "0eca67807223cafee656cf1b06e92721bf9d51608c03e1dc0a1c9204fc675a97", + "packages/app/src/index.css": "1dd15e0417aec6090f0a3e83f7c33a05b0bad133e110a54f91cacf312e0bc67e", "packages/app/src/pages/error.tsx": "db9ba0847cfb205100ad6133cce30c6ea2ce983802af44947e6d2b746c2a6ec5", "packages/app/src/pages/home-projects.test.ts": "a90155c37210a0e5b7a095bbfc3ba2d40681f02927d9726148a706bed5ba7891", "packages/app/src/pages/home-projects.ts": "d55124578dc839b98e2084b488d818e30e4a1abf1ae264499b83e403c2aabca7", "packages/app/src/pages/home-session-archive.test.ts": "e8f1126287a3e9daa455efcc378e5d72aebdd092158bf8526f7779669b72e850", "packages/app/src/pages/home-session-archive.ts": "1b56c173f37f4a4dfd54088ef5fdb0dbcd3d9b62aeb08de4bfa0ed34f07d7ad5", - "packages/app/src/pages/home.tsx": "428659a2495af2e36f5d6c8ec0e489d0eab1d0b889ba34457b34843b0c0607c7", + "packages/app/src/pages/home.tsx": "bec06ca3ee4a26d8bc3b1ecff6e7cd1f1de1d251d94888c149e1449837fcf16b", "packages/app/src/pages/home/home-projects-view.tsx": "074f1cdd7926db9574164824666cd63f1f5bd0f8e8dfb65453f6fe8f2dca0ec8", "packages/app/src/pages/home/home-sessions-view.tsx": "5b73b18e4349a628a15e09a3810ecf2319bde222e18fe8de5d08373ac91fb37c", "packages/app/src/pages/layout-new.tsx": "86e910dcf29536232562ea2652062edcc63be48e7507db85d50d1fd7b0b6ea1d", "packages/app/src/pages/layout.tsx": "a6e6574054f6d85c0d91c1236c9db99674b8d51876643896b0c34f77a28bc85a", "packages/app/src/pages/layout/project-avatar-state.ts": "7aadb235d27dc45799411c724f0fd1282af82d091cbcefb0344deb7c5d0659d4", "packages/app/src/pages/layout/session-tab-avatar.tsx": "89e83e239d513f91b31f16473be531eaf82768cefe637ea5f10d752cea4ef887", - "packages/app/src/pages/layout/session-tab-status.test.ts": "5d635ddc3b62ff5c1f73bb0b207ac7b3351f19d6ea695fecd03f78732be193f3", - "packages/app/src/pages/layout/session-tab-status.tsx": "2127478855fa5451cd822d1062114ef1798c1a956718a8768966a964a0ad929a", + "packages/app/src/pages/layout/session-tab-status.test.ts": "d6e62365948450c0acda628bc5d03233e5e6ead69649c2d2fb7e20c906007e74", + "packages/app/src/pages/layout/session-tab-status.tsx": "0960d24e581e5cdd38d1bea5e745039542e5ab5268f5540cf8fa87d84717922b", "packages/app/src/pages/layout/sidebar-items.tsx": "daf940fc66f34e5f83410a8580f7bb1790bedc599ab4d64fcda2301537b24865", "packages/app/src/pages/layout/sidebar-workspace.tsx": "a0f8e3fbd16d09e783db2a7a09c686d3aa993436d882425d3436a59ec4adf94b", + "packages/app/src/pages/new-session-landing.test.ts": "c0f47e4096e6a20fa59dac2b10f7285d3ef45e9289bf6f0ad75c1d9e4dd1117f", + "packages/app/src/pages/new-session-landing.ts": "528d27cd5d441b521674328fb7812fb2acf77233e9e436d081c98ce611e8b268", "packages/app/src/pages/new-session.tsx": "8cfa0d719590e29fc185811c57306e80c54faf62a7d6049138d15c02e7c844a1", "packages/app/src/pages/new-session/new-session-draft-controller.ts": "3607771a22b6855afd0b0d666de662c9070a2dcd56ae96ba51d89c9e11018e81", "packages/app/src/pages/new-session/new-session-view.test.ts": "b27a1cc858897b6d146eecf3c50db4a17b2efc15421685efdca837dce91b4db8", - "packages/app/src/pages/new-session/new-session-view.tsx": "50c53e16688441b5f22243e38d20686ed1179d1a6954d58c6216b5f9a0f221fb", + "packages/app/src/pages/new-session/new-session-view.tsx": "9b2688cb95aed672cbe5ddb0f7377a389b66abde7f5e84c5b9aa2f74b408eff7", "packages/app/src/pages/session.tsx": "e85df7c6f3672de127421617c40e74be32b8bfd967291fcdd4583154e34d1c1c", "packages/app/src/pages/session/composer/bug-dock-controller.test.ts": "fe3d68f2f2bb41b04ee5567cd95a9c01671a98fd21585788be9d4cbb01a4bc22", "packages/app/src/pages/session/composer/bug-dock-controller.ts": "ab2c72a761e1992f300b6a0cecc9d0351b00a56e4be08567bcb22d3fcece78f7", "packages/app/src/pages/session/composer/bug-dock.ts": "11eb1a1c911df8764162d47f07e5f135d94fcb622f8a2ad9b41a23233131ba58", - "packages/app/src/pages/session/composer/report-bug.test.ts": "cc512d2423a780129884f9c390c3b059d7f8ac05d32641ba42147ae9603a857d", - "packages/app/src/pages/session/composer/report-bug.ts": "b89631d78b3692bb444d895d7b761fb6fa9a126cc8e422b3dc708cf822fc4330", + "packages/app/src/pages/session/composer/report-bug.test.ts": "d4dc012309c2171298852501a14a077c6fe8cdf5d25538dc84ddd1f8195d3a8c", + "packages/app/src/pages/session/composer/report-bug.ts": "bdc3b3dec38b11c7bfa5b867a246db2717e60e1d50692d6bddb3983c9e95e02b", "packages/app/src/pages/session/composer/session-bug-dock.stories.tsx": "a5730bb3699751d63629134924ce8dea021b264722c40f5f6bb98236dc15eda7", - "packages/app/src/pages/session/composer/session-bug-dock.tsx": "4b56c464270ee1218eb40ddce1930f03845540c9e3cae8a89f98d73645de8e2d", + "packages/app/src/pages/session/composer/session-bug-dock.tsx": "e7fed3c5ab80527d69a106440833f795bbbafc5deeba3883902ede9fba612605", "packages/app/src/pages/session/composer/session-composer-controls.ts": "b6942cd192eef5fb67343d54be35c986b735ca1e2185a20b29e226dd67f70e05", - "packages/app/src/pages/session/composer/session-composer-region-controller.ts": "3209b9a8981cbaa7f0cd7bd09412b681c1dde108ba917ab54555f9144b6a443f", - "packages/app/src/pages/session/composer/session-composer-region.tsx": "93adca76d576fd0af6281f872067339106f591aa0827252ac76b8c1baa7ed7e6", + "packages/app/src/pages/session/composer/session-composer-region-controller.ts": "979d2e28d9734581f88e7cb3e0a51c8a8c204f81e644f7a3b5766f60ddf88938", + "packages/app/src/pages/session/composer/session-composer-region.tsx": "415cd5c3a77b625a3142b828b6458687e1a35b382d3a208d90ff1555cc7098b1", "packages/app/src/pages/session/composer/session-composer-state.ts": "fcffa11d801309cf58f42a174143bf6eb3ea2b14f860ad91a8ffa4e097df5c16", "packages/app/src/pages/session/composer/session-question-dock.helpers.test.ts": "a1fe31fe4dfdf2914bc184030a0427bcbdfae0f3e7b146e1d6ee29ce31d85b64", "packages/app/src/pages/session/composer/session-question-dock.helpers.ts": "b16282d0cf5d39152bd76f4ef8bac32f964f68143a3067765ae0827a5f90deed", - "packages/app/src/pages/session/composer/session-question-dock.tsx": "c030421f085482688f49466f2539eee493c9ad8a23d5bb76347ad36ee442ee00", + "packages/app/src/pages/session/composer/session-question-dock.tsx": "44c0814284ef4a5273c8034b8d1f5cd45306406d04e2f4f6646000facae47d7e", "packages/app/src/pages/session/composer/session-revert-dock.stories.tsx": "0310ce448c1f8feaf4732e66429654fe3602d470f3121835cf6435084c455c36", "packages/app/src/pages/session/composer/session-revert-dock.tsx": "3f2d030126a4c673731bac65406fd48797464ddc515444b891e39b0eb538e002", + "packages/app/src/pages/session/composer/session-tour.test.ts": "147473505d54466417b6b34fa672d280b71e1b9577e8bd41fbf9870035d1083e", + "packages/app/src/pages/session/composer/session-tour.tsx": "da5d807c7efe7aed1140d65d7eddd7982a8c17348d928f5d0a887d1b2a8d3a50", "packages/app/src/pages/session/composer/todo-panel-motion.stories.tsx": "70a8267c725af320d78d266b85fd0ff005d067c4d09a21bef824126602e831e7", - "packages/app/src/pages/session/helpers.test.ts": "d9e2ba5625a2cdee7610d2f70b31da4972fd77e989db824d3f76b474691d9beb", - "packages/app/src/pages/session/helpers.ts": "9af337e12c669a590dc31db782d2d809b61d9035412e5c9b2b4790c719969dba", + "packages/app/src/pages/session/helpers.test.ts": "a473d86117e3fddd25ba28a189d90fa35bcb80da7f2a152d3188e139f375e45d", + "packages/app/src/pages/session/helpers.ts": "8d0106a5ec3f01a666bd840e20b6bfb28d0e88b8c8c51fc1fdd7eaa33e9daafc", "packages/app/src/pages/session/session-panel-width.test.ts": "2b9daf379be0b54142dd791bed6bae6d215b2574176b3b3e4b1273db3baf433c", "packages/app/src/pages/session/session-panel-width.ts": "8723cb2f980972ea9bf182240fdf154d131bf40e22fe563fd538a7005cff9192", "packages/app/src/pages/session/session-side-panel-structure.test.ts": "c138fe905498c8326f459dccba61b146af6dfb12b78480303723b5a85046931a", - "packages/app/src/pages/session/session-side-panel.tsx": "31ab5f03a2a07347492b5b3a50ca71be8a7f2324d2a7140f4cc4c994384a6743", + "packages/app/src/pages/session/session-side-panel.tsx": "e2346a1f9d81c4f8436051ebf92dcd747be28f1e6b610d98792569067f28a4c0", "packages/app/src/pages/session/terminal-panel-v2.tsx": "68dad9307f1d2abf3ff9248e451bd08005acf01ddc46b30a6d01b58f4a90dce0", "packages/app/src/pages/session/timeline/last-prompt-bubble.test.ts": "83753b3ec7227570523c2e0b9e82401fae7a20f3a23980bb40deaeb13304327b", - "packages/app/src/pages/session/timeline/message-timeline.tsx": "ac44f4903e4a8c4fdf7a11d8a4eb7c5c13d2b082dd878fdb64ec9f25b07ecb19", + "packages/app/src/pages/session/timeline/message-timeline.tsx": "7db5ccaf96ad37fbc0fa078f65966f3b34a6102ce92e31e4c912ef89e5ecd0ea", + "packages/app/src/pages/session/timeline/projection.test.ts": "68655f29c382640fc281780166aa528ea26d28d953f3376e1e062be7a0e13749", + "packages/app/src/pages/session/timeline/projection.ts": "36ab006523de7b695b33d26a0a03b59db9e148b7e979c36f63970cbcb8bcaca2", + "packages/app/src/pages/session/timeline/rows-current.test.ts": "59a29debcd7c322d4b4bb50fd9ba99e136e3e51faf730075fa7939e917bc1756", + "packages/app/src/pages/session/timeline/rows.ts": "fd5029a616f3777b5c703ad059cddd69c637fda92f112464f9967bde3818e548", + "packages/app/src/pages/session/timeline/thought-rail.test.ts": "f58f078bc6f4e7371fca114cec468f2059689570e104cea422ad8ca7e4fae36a", + "packages/app/src/pages/session/timeline/thought-rail.tsx": "ed9f416d620c167483c321127a0b5cce1e1f5a5f6ce4b4d0e3cf59671987788a", + "packages/app/src/pages/session/timeline/timeline-row.ts": "91576b8ba89a2882881bf4e8a0019431cb118a487e1160810e0c51bf23cbccf7", + "packages/app/src/pages/session/timeline/travelling-dot.test.ts": "f02d16c2aee6f6e346025fee60f6b7dde9d0747caa6180d21228fe433ae018b2", "packages/app/src/pages/session/use-amicode-commands.test.ts": "65671d054c404edd2b799b0f6591a9c055e6ecb454a674fa0bd9a7fa6f68e111", "packages/app/src/pages/session/use-amicode-commands.tsx": "88bfdad9ae6dfd920b8e6a14ffebd2cf9e52b8f67bb9284cb358ad940643ca67", "packages/app/src/pages/session/use-session-commands.tsx": "7af9a112ae60415572ab7c9b5d4e73b2f8ed9115858c695be675ffdf07c3df2b", @@ -1023,39 +1119,43 @@ "packages/app/src/pages/session/v2/accumulate-diffs.ts": "f10a1e097a86f746f3fc2b861454f3b8f509e6895c54b7e3bd0317dbf3d14acf", "packages/app/src/pages/session/v2/review-panel-v2-state.test.ts": "ac0cf1939c164948d9a0c54cc15076b30413612d872237e0fbd0912804c1ced0", "packages/app/src/pages/session/v2/review-panel-v2-state.ts": "e27c3aa236d2862e3cbd87128c4e03e6d810974faaaadb12a7e04cdd3b531e1c", - "packages/app/src/pages/session/v2/review-panel-v2.tsx": "4a1418bbc2a6c04a9addf3758015dee9b16554b6f1d2d65c230444e60a514814", + "packages/app/src/pages/session/v2/review-panel-v2.tsx": "618a68fcb9316bb87d306c69d1ae0bed8926c1273904fdc2425f28e06c52384a", "packages/app/src/theme-preload.test.ts": "d9e4e96dd39a3491493637682611bedf6ddf4b6e4dbdddcb60bf006211b137a1", "packages/app/src/utils/amicode-bridge.ts": "5104a04c7822f80dc0c564619e7dd2d850ba50035dbc86ea875604ecd97df05f", "packages/app/src/utils/amicode-bug-report.test.ts": "b1bbf49230ff3aa6d1a43ffa9165ba5a84ca4ee18a6d49f52ee5cd887c3e6444", "packages/app/src/utils/amicode-bug-report.ts": "d55d9cecfe17719c0d4a0ca498345c7eff6fca1de6b645e4bc3fecb40f2f4645", + "packages/app/src/utils/amicode-developer.ts": "be97c990454d98e1c968d88cc1a7bdf1da604ebd17055aa2273bd46259484ea4", "packages/app/src/utils/amicode-fetch.ts": "ec62b502e6b8688cef0a2aa249715e847032265fd0e150d73ab3021a63db0e33", "packages/app/src/utils/amicode-hidden-project.test.ts": "333ce7e13a2940268448db06fcfc8bf1733110b5311932820ade1dc9ab573180", "packages/app/src/utils/amicode-hidden-project.ts": "d845a80ecad2d497528a5071f55cffab72e7b451f16d106cdb594f5bbd62c0ee", "packages/app/src/utils/amicode-pane.ts": "46c18a2dc47c5db154f70272d25031e6834539ad03f6ab25613f082426f7c642", "packages/app/src/utils/amicode-route-info.ts": "a0268a223e8de09fae9d4de8bee6a7774c14c87c6254cb4ed1d921db18587f44", "packages/app/src/utils/chrome-dropdown.ts": "f8b878c5df4e1afd96b0751c73daaad0a8127411030724cb8f9a5089ebb29eac", - "packages/app/src/utils/global-clipboard.test.ts": "86f737c91542b8bd79b7872bc551ffd4a334c5d5a8bedfb2ae95052697dfc27f", - "packages/app/src/utils/global-clipboard.ts": "0b0125150e5c521ab5913699ced86b7395a1cbfb54549003b4558b9b4f421c13", + "packages/app/src/utils/global-clipboard.test.ts": "40a8ab52722f50fdc1db4188aad0f1b7be7f02f35d2fdecb899617e778a0134f", + "packages/app/src/utils/global-clipboard.ts": "6a8532b161b8a1548199e7393348551f9f0f56f22a5a012bd32359b281e3e927", "packages/app/src/utils/pane-bridge.ts": "a8a8a40dc60a367086f3c4e4c561a289fb85d8b2086a8d62c2b66102de652ce4", + "packages/app/src/utils/provider-disconnect.test.ts": "809971964ed28564d379dce2e590bd4727f45eb597e46234c28d25dd2485df26", + "packages/app/src/utils/provider-disconnect.ts": "209c9b44970cfa3cd150cc20bf7bff34b773b148739e3d6beb314969b6bb1bbc", "packages/app/src/utils/serialize-session.test.ts": "f8fe318f195dca251eae3f4899f4a5881c3523522f59e02fef208588391f4048", "packages/app/src/utils/serialize-session.ts": "c303c678500cdb64c7aa6928a0bd984c441a36705fe8152368a0e575cbcb459f", "packages/app/src/utils/server-compat.ts": "01413e13b87485770eb3dbec0b882aec4c8247dafc4dc74b7b4669fa5b20cf1a", "packages/app/src/utils/start-prompt.ts": "809d8ad0ab6de76a97503f8368ade25f771431be3f92eb8f039a2c65244ab20f", "packages/app/src/utils/web-zoom.test.ts": "f373618138add504faa44dd6d2c9e3489b6e8dd0093ac6bb4f00f55307864e3d", - "packages/app/src/utils/web-zoom.ts": "014f99ce01219cac2bf22f30f20936d271aef17870e710250f6b1aa459317e44", + "packages/app/src/utils/web-zoom.ts": "d5119a07e9fc61880b7294fadd23801933d99a9d3dbd0fadcafed1f786bd7d7a", "packages/app/src/utils/webview-context-menu.ts": "876b532fc9c00156f722d6424c28476f34b2db1bd0bc3cff3c9866152600e7c3", "packages/app/src/wsl/dialog-add-server.tsx": "a80a19cfc3590539026a11846d56e0d3cf7eb4ed7360dedab71412da58827247", "packages/app/src/wsl/dialog-add-wsl-server.css": "a9c2f13e8823fe51989bec945ed1e36274eb0ad363f55cd91714fc91ca4d91de", "packages/app/src/wsl/settings-model.test.ts": "3304797c2779ca573f44eb25b758b67d66b2d7897432252375606680021390c3", "packages/app/src/wsl/settings-model.ts": "35481fe3029714becf30b07024e0f849438c99c369a41b437b5208e48095cbf4", "packages/app/src/wsl/settings.tsx": "1d6bb448f5f7e574ddd2efb2fdb0b6cdafb7a2ca4af9bdd210f2f58da9d9b984", - "packages/core/schema.json": "cf1dc9d2ffd2383d473d96e7054258df0f719bb3a727f025cebf14b4d2c1e431", + "packages/core/schema.json": "79ef4e2f0dd8103ac7a4b6ff3ddb0fd10764655f1dc678c1c401dfc43be9a1aa", "packages/core/src/config.ts": "b71c5920982666df2668de8aa04df85b245ddf95532c0c3df8fb6fb985402704", "packages/core/src/database/database.ts": "9406173aa6cac6acd1c3ec306ae71942e12c8e2d68b7cd3d58a9a094539bc32f", - "packages/core/src/database/migration.gen.ts": "ad7544dcd87b40e9caef76095d2e8f67df86f4379d92c10fc90cfdf67244bcf4", + "packages/core/src/database/migration.gen.ts": "689da2c4e571629ba207420c8f31f604c653059ef1b3846683c46d02f1c02c12", "packages/core/src/database/migration/20260813162312_shocking_karnak.ts": "f4e901f79e3f660b3809e336599a5ba7da7794ff595e6accf6218739c046ab68", "packages/core/src/database/migration/20260820000001_add_session_directories.ts": "cb4b6359b26774e741c30da9d40f403d57d2a59572e4989673c262c653d6a5c0", - "packages/core/src/database/schema.gen.ts": "723e8c027dc573e86cf8a27795672de865befe0b00ee4165cb526e84b962873d", + "packages/core/src/database/migration/20260828201050_normal_stryfe.ts": "60870a91d406cddd9c2ee8d352f3f027c810b076d5931b3cb1c2968ab19262f3", + "packages/core/src/database/schema.gen.ts": "784fadc53281588f15edebef7a6362d025ed3fa15f7b86b6451f1cf27292f0f0", "packages/core/src/flag/flag.ts": "55ffe731e35f8e045934463529e63bcd1e5f81df9fd69ebe585af85635ca72b0", "packages/core/src/location-mutation.ts": "5fa852c48e98cec513346f848b422c2d5d6d4b753b39da851c73be073a03511a", "packages/core/src/location.ts": "16325cfecf6c83bd4e653a0f1313d78172a31fb93cd28672f180053ae4719aef", @@ -1093,10 +1193,14 @@ "packages/schema/test/question.test.ts": "511f4fabf2841ed89e1fed9594f2e3a1be8eea5bcb50b680d762c49d6ef572d9", "packages/sdk/js/src/v2/gen/sdk.gen.ts": "57597d710845cc0004ba778522c9bdf088fe9f7c23d7d9a3d947038a1fdc2674", "packages/sdk/js/src/v2/gen/types.gen.ts": "40460004bb971a4f8dcc5dcd9f9643cc839f5d75b6820a103ecf7cc21235d9b6", - "packages/session-ui/package.json": "d0cd55d4641253e9715551a6e6f493ce692f641c51f6adeb19c8c896c336f2b8", + "packages/session-ui/bunfig.toml": "82585987c8258caf58d07c6aaf4e49b7338e4da16f97c785af398aace9e6e722", + "packages/session-ui/happydom.ts": "d81d6b14e988f058fa502c841df34b55307c57fc94a26fb4f8a5deb6aa0d4834", + "packages/session-ui/package.json": "87c1d5b1070f94338747912985a2ce03542de9857534b8411365223436f44a90", "packages/session-ui/src/components/basic-tool.css": "0bcf0592ce8af0d902bd69da26ecad2f00f5a7890275392abbffe6f4d80c7853", "packages/session-ui/src/components/basic-tool.stories.tsx": "059c4bdce6a9ddc93c69949f5baf7323631ef0d5e69f04030fde0f2771a9fc09", "packages/session-ui/src/components/basic-tool.tsx": "ff2678cc17510e1b39657469f6dd1a0311843664cfd5161d385256e617b4e759", + "packages/session-ui/src/components/build-trace.test.ts": "2b531b3d523109db76fc8493bf8a3114c0413c0573fd3c2214a68a07760dcd64", + "packages/session-ui/src/components/build-trace.ts": "e725c74e4c1304617ee783afe8a2683bb3408cfab7c39832632536f4d04f3176", "packages/session-ui/src/components/group-parts.test.ts": "a31ce19009e1d62e75e83b682190a4613da0eed334420409ed73a9e21834ae84", "packages/session-ui/src/components/line-comment-styles.ts": "2077836c13bd3c3f1c39c67722119e448a2dfa123377f94bfd3676634e955d00", "packages/session-ui/src/components/markdown-file-refs.test.ts": "e2b1bed33629d3ab53c521f33266814088ea4122b6e64d6ab294eacc4cf15070", @@ -1109,8 +1213,10 @@ "packages/session-ui/src/components/message-part-groups.ts": "37be069bf46e926fcde83d3744ee706911ff002e6b532e279290d841aeee96da", "packages/session-ui/src/components/message-part-skill.test.ts": "453bdcb25e4df91ad1004635b8766070a60421355adf18ee53f43cd2fa7d0486", "packages/session-ui/src/components/message-part-skill.ts": "d65a15dc39b8c0dece13aebe5e308426ae2dd758b07740251525ba9257654cf7", - "packages/session-ui/src/components/message-part.css": "a5b289e6fe3f08870095676489a84133c48c35a55955fb6c0dbd0806cc2d2be8", - "packages/session-ui/src/components/message-part.tsx": "bd8105bcca5a5c936ad5a178911b248724fd13fe0d9467295457506c355709b6", + "packages/session-ui/src/components/message-part-text.ts": "0d400f28f416a6d745d38d2d9f9bebcf74eeef35d1398901180ca724d7c24231", + "packages/session-ui/src/components/message-part.css": "28e8b407c54264184272f9ba288b84f94e41c8c586286d91db7b83a3f69a54e8", + "packages/session-ui/src/components/message-part.test.ts": "ae6f1a8e0e0d20d247fb4c0c6dc4bf01a463c2efe2f8b9e77bd1ca70c23571ea", + "packages/session-ui/src/components/message-part.tsx": "317041f9ad16c5ac71cceb24d6ade2fd105be87d82afc6472ce1690b60a4daa1", "packages/session-ui/src/components/session-retry.tsx": "2cb1513d73275a269894f601e8c1d29bc790b14927134fe36177f2b371888721", "packages/session-ui/src/components/session-review.css": "ec8c5b359dd4b7ff80d7fad8906359678adade9ce62c9d74aedc000b646db341", "packages/session-ui/src/components/session-turn.css": "792915f3373134eadf3cd51e1d4bfa88ec347e6b037b6caf60b639ec5e74fbd8", @@ -1121,8 +1227,9 @@ "packages/session-ui/src/v2/components/attachment-card-v2.css": "3b4b9c23d69e76b35488bc3a65fb51211038c3e8aac015df3f531b4e97e96359", "packages/session-ui/src/v2/components/basic-tool-v2.css": "55d3aa179704deddda7149342a951229ff5561127f786dd551e5df9aea8a7835", "packages/session-ui/src/v2/components/basic-tool-v2.tsx": "ece46d761f7d51a7a0925b3df00a5c289d891e9a514ee721016eb723d87fb406", + "packages/session-ui/src/v2/components/file-name-picker.test.tsx": "9fb252f376227adb076c188baaafb4d8b563b7fec20eb5944679f665b510dbee", "packages/session-ui/src/v2/components/prompt-input/attachments.ts": "ff66078f2edc9a67a4df0d7dfd76a49be5eab27ac332b303f3412721ef7268ea", - "packages/session-ui/src/v2/components/prompt-input/index.tsx": "1f2f52954c53bb764408ae477969328a7c826d0fedd4913ba05e040912296b77", + "packages/session-ui/src/v2/components/prompt-input/index.tsx": "6cbd3a1e3a4fd789284526e5981c6fd2d4952f3926c5a1be0609bb6832453997", "packages/session-ui/src/v2/components/session-review-file-preview-v2.tsx": "2f4c68264d48b6cd8cf7223b044ca4e319ecac6c3fdc37d82038469abd9204f9", "packages/session-ui/src/v2/components/session-review-v2.css": "42a531def38524d00bc45daab9b30dfdf81762009224c327adbe2d2b41983f4e", "packages/session-ui/src/v2/components/session-review-v2.tsx": "a683eb509c3ee927a7ed04ceffef3fd65129f812ac55f5b04c7e628bf0611831", @@ -1134,24 +1241,24 @@ "packages/ui/src/amicode/amico-presence.ts": "b4708117445d3fa5cf9be8c9b2f51bfb1f6b01a76e2fac114cde93107a075e26", "packages/ui/src/amicode/amico-wave.stories.tsx": "fed064c5202bd772308e2c6165c9d63182661fe6ce590c75cac1fd0e9deadf94", "packages/ui/src/amicode/amico-wave.tsx": "478cd8b19a87679016d9dbb0aa494ba7d1f1ef67b3da1d09fb35d28e33de9017", - "packages/ui/src/amicode/amicode.css": "92e902d7221464fa178644ad0eff67beab6f1c7c6cccd5b802d9a0ffbf92b729", + "packages/ui/src/amicode/amicode.css": "fc1b8ca237d33c3d18d92c087802727309e1e99592c963e95e1bc5f01cbd75a1", "packages/ui/src/amicode/approval-bridge.test.ts": "5b5e5a41c827b7a3cdaf455dbf488cfa7b8d339f46e64f5a35a0ba9226eb0ebf", "packages/ui/src/amicode/approval-bridge.ts": "ceaa6024916794ece1bc80a004b79c36406d2bc512f82e003c25d919c9050e48", - "packages/ui/src/amicode/approval-card.tsx": "e537eb262843aaa80e7c53be63a3aece4f83e367907cd22a26f0ff6c7674dbec", + "packages/ui/src/amicode/approval-card.tsx": "f55bd13bfded569020ad0ce0d385da3018aee8e833ec573cb45447114658a11b", "packages/ui/src/amicode/approval.test.ts": "d1a9eb383112234d750d07229e347a464bcccc1d633d90ebf653937ae0653773", "packages/ui/src/amicode/approval.ts": "ebee2a1302c27e1f74d2892b3d84158dbaf672e13d4300ffc01ad8ce9a1ed644", "packages/ui/src/amicode/ask-bridge.ts": "8ab7f64eefe55ae0968b9b960718a1f4ceaf6813102bbda42349a06a3638610f", - "packages/ui/src/amicode/ask-card.tsx": "599d249ecd528713cb57ba908ade45ae56cf4244690627a8a9eaa9dde8886adc", + "packages/ui/src/amicode/ask-card.tsx": "0e2fe53c747cc9aa7f65536b73cceaac30f6bdb864424c87997dcb13325e7584", "packages/ui/src/amicode/ask.test.ts": "1daa4ccf6cc41f17039c5ffb0a09243ba364b5af6e174ecd1040787afb7907e2", "packages/ui/src/amicode/ask.ts": "5081435a8b09b2eba12240a9914bbe222303460bd21044bbf8482bc190ff2efe", - "packages/ui/src/amicode/brain-data.ts": "0b19aad7ece9726d97981ccc72095e5e7607ca71e5f031d9efcb32c766636535", + "packages/ui/src/amicode/brain-data.ts": "f23483cda811e148748d4f47435c6d01c03d52e9a65ad74cae2c0ea30ce0b8dc", "packages/ui/src/amicode/brain-engine.test.ts": "3b244fbe15ac87529655acd688da9181af53a1dfeb3f9f87e5f77000db3aada6", "packages/ui/src/amicode/brain-engine.ts": "500b03cd43d4cdbd76a575f4517a4aaac788167e1d41a396d6dc6bce3cdfb8dc", "packages/ui/src/amicode/brain-ref.ts": "9d8aaa8b24fb0b74acc0c4cdafc265c1808c28c95d4ac9b815fd2e54ea89f46d", "packages/ui/src/amicode/bridge.ts": "e7b93a15060a0cb1ab0be2b367f73e926d74b990a8af917a9966b451ee303b5b", "packages/ui/src/amicode/calibration-view.tsx": "bc4193104fea43ac3e5476df0f9a91a55465b48ffffc80e4170047872a141812", "packages/ui/src/amicode/card.stories.tsx": "b1591abb4af426b0eb08588ea1585336a392d755b5d308cb31f17cb65acf5a3e", - "packages/ui/src/amicode/card.tsx": "4d236acc454a051f7fed1cd6cac0e98dfa8df9994376d381672b27e75c6feb6f", + "packages/ui/src/amicode/card.tsx": "e5198e40923a77c3ed6a7aa235401bdeb20db6fbdb81f1ffeb847962dd1122e1", "packages/ui/src/amicode/connection-icon.tsx": "2b36c05209a3b5091c6407d59add58fb51ec34724ae6411af85c3dcc797a9987", "packages/ui/src/amicode/connection-picker.tsx": "12cc6f142ee109580442a278286f06118a2a35239cabeaef6d60c0dac1a7ed3f", "packages/ui/src/amicode/connections-paths.test.ts": "07c86e8e04700cdbd55bff8db342a8400d85114d76bc73fee8205e9162953f2a", @@ -1159,14 +1266,14 @@ "packages/ui/src/amicode/connections.stories.tsx": "fda54a41c4b46f5cab5278278f92c01d1fea70610f7b8641fa5855be6bd9d486", "packages/ui/src/amicode/connections.test.ts": "a718b1b698178087fdac5294c1661ca2eb200491e2a076465a09ab52c70b8910", "packages/ui/src/amicode/connections.ts": "c44875ae2a95aae3f62a95fcf59517178039d09d51ca84e816ea725ba965e408", - "packages/ui/src/amicode/context-tree-data.test.ts": "225fef3a6afe5de648f9f1734f4eff9b5eae4023ca551015b15391ccbf42d8dd", - "packages/ui/src/amicode/context-tree-data.ts": "94e013e21985756ca97afa8320524a4fbcae713ac562b2a2271834b103c7f796", + "packages/ui/src/amicode/context-tree-data.test.ts": "bd51dc84d6c14c64f38c8f467ef29d9d8f45dcb77cc83ec92bffc8aaa983b463", + "packages/ui/src/amicode/context-tree-data.ts": "d623578b957b9a49d6f7b930a2264b7bf0ea71fabf1a485d9666706c7b77485d", "packages/ui/src/amicode/context-tree-engine.test.ts": "afa3199c18c7ca05a19fdf0663a5b4d6e1fd2303e038cf25641c29e254e610f4", "packages/ui/src/amicode/context-tree-engine.ts": "2177d01855d58c5ee7c164c2ed1dac6f4a8a5cc04daea67566f195b02ed1ca06", "packages/ui/src/amicode/device-view.tsx": "1842053e9e25cd5c8076598449e44abf06008940a8f3f39403cbf435b1b8aa8d", "packages/ui/src/amicode/edit-row.test.ts": "7c68fcf083d3854bfb70768b648110e001843a290dcfdc25869c1a4681445b94", "packages/ui/src/amicode/edit-row.ts": "28d5f39470376968e7eabc3f50807a779177e9c9f2081302e4b5eb15306aef1b", - "packages/ui/src/amicode/entity-rail.tsx": "9a10ccf1c0f56669bed6aed075320b3127181683052ad1617b3e74cbb55ecb76", + "packages/ui/src/amicode/entity-rail.tsx": "fee936650d0f05ab00e46ebb70333b2c92a57ab0da1e7fcee942d7e6b64004b7", "packages/ui/src/amicode/entity-view.tsx": "e181575c8bd66a7cbdf89411d0cc1d12173a74a3bac9122163f2e27331e3becc", "packages/ui/src/amicode/facets.test.ts": "e89bd4e49276f52ac0af4990b202919331a48302b4b34c1ec1d8406fa4fccabf", "packages/ui/src/amicode/facets.ts": "074f7843a105961da3b4b89c67ea20de106968b4524f9094a5f57d1ecb0acee0", @@ -1177,7 +1284,10 @@ "packages/ui/src/amicode/frontier.test.ts": "229eb8e3f187113fcfc73f0a30f2690bab4266cb12c1c6c3802522dd7eb4af9c", "packages/ui/src/amicode/frontier.ts": "78cd89deb26a2c6c4b8a18230012455b7aecd5f23eb007dbd0cd440b6b6ec36c", "packages/ui/src/amicode/getting-started.tsx": "9cdb8df438521d33cf7732fd0ba64e21b4ba9d63de0c823e59d0dcd21ea90a7f", - "packages/ui/src/amicode/home-cards.tsx": "00fc800810ee3843069524064ce1606255b09219b0b44ac26067dff6a94451d9", + "packages/ui/src/amicode/harmonic-dot.tsx": "69b5a438019c2113046a6c0f430de8af8ec203268be2d4a0a93c8b190fa1fe94", + "packages/ui/src/amicode/harmonic-geometry.test.ts": "f1e54ea702749269748102bf7265909797bb0487ccf350683f8a5989170090af", + "packages/ui/src/amicode/harmonic-geometry.ts": "0aa4d263d9d2aba0afab7030e3ab3621769fad1715d07418c431af548fb90067", + "packages/ui/src/amicode/home-cards.tsx": "019069f82e0a29baa392b7609ce0825d0c036ce31112bbd1efd375ce1b077a9c", "packages/ui/src/amicode/institution-lookup.ts": "3edf90b0778ea50b048975cc317a18a1aa82290cd4f5241cf9df74fd17866fe9", "packages/ui/src/amicode/onboarding-wizard.test.ts": "268df538ea99280c5297f9b1dc06a236da2fb82830c2d49a107feca3f610279f", "packages/ui/src/amicode/onboarding-wizard.tsx": "75db623f8f50fd875f1bde8942841fbb5167c77a34fe3c6dbfa80732841b53e8", @@ -1199,7 +1309,7 @@ "packages/ui/src/amicode/run-series.test.ts": "2e7aec7cdf7eb056efbe52d180ff316482e3010e2442611daaf4bda444c82705", "packages/ui/src/amicode/run-series.ts": "c94496068ae05f4600b9dd9fab4247b678dae7aaba31ef48e4389b0e7fefc52c", "packages/ui/src/amicode/run-view.tsx": "5098ef006cec0f354dde8589df1a730b5663c05300c1cf298569e62eb633f1be", - "packages/ui/src/amicode/run-window.tsx": "748fee9b14152f0f173238acacf9883aefab7f36038b897efe6b007307916e17", + "packages/ui/src/amicode/run-window.tsx": "411abb6064ca76a1866b91914be1788f78173844f5e963562733348f92d982b4", "packages/ui/src/amicode/shell-row.test.ts": "48ec6f0786edf81f163e350904bc2a93b1a55375b8115e688237ce8c2f1a7e64", "packages/ui/src/amicode/shell-row.ts": "b39dc05d2b77ba6d44456248782b31f6219c891d56700203186a65ccb48319ad", "packages/ui/src/amicode/solver-switch.test.ts": "c9cc10d657d7adf0c388e56cb6058affed5a255bdeb9b8f2fea5c02f4daff1fe", @@ -1215,7 +1325,7 @@ "packages/ui/src/amicode/system-view.tsx": "42d5232e69dbf446b9039fe966e53eb579253915f22c5b161595e938b83bfea1", "packages/ui/src/amicode/tagline.tsx": "251fe67f072f6590049f58e4174c1da90e1fc1ef8814e5d3c06ce246035d868f", "packages/ui/src/amicode/thinking-line.stories.tsx": "3bf821de97d2b58487466c44e17bf6e46c0309ce4b563cc8e4a725f1757190d2", - "packages/ui/src/amicode/thinking-line.tsx": "18d121b6d6b25775a9b85c172224b0e9e3f1fd7df8da07d8768a4bf441a857f6", + "packages/ui/src/amicode/thinking-line.tsx": "d08e8525a3caf9a5c5bd954374f9219ac3b1fc5c2aae4f25412663fe7036e81f", "packages/ui/src/amicode/thinking.test.ts": "ee926e4971e1af78d4317e90f28550b7d0be57cb7363f7b3c0d6869f10fb2167", "packages/ui/src/amicode/thinking.ts": "ce2529285621620df168eaaa845cd2957b4fe5e61729fdfa736a8702ccf059b7", "packages/ui/src/amicode/ui-bridge.ts": "5ed07b8e595e9650a27a32fbc72e7a076b885614ef07cf955d340578342943e2", @@ -1250,6 +1360,7 @@ "packages/ui/src/components/amicode-entity-view.tsx": "1ff46b6abdca65992606755e0d5e516483bbd8f3f8cef54b81cb6faa08d895dc", "packages/ui/src/components/amicode-footer.tsx": "d7d7344613c7acbf2d4b0dd3f33c89f67fae6ac065bcea047e7dc26d13bca5a0", "packages/ui/src/components/amicode-getting-started.tsx": "219524d12d3b7e35a3e6ac4a112c64b8a54ce1b695bb61dc4a0bcc64a7f37e2e", + "packages/ui/src/components/amicode-harmonic-dot.tsx": "4ebf20ba79d07b69b1da1a214c1a1bb47cca37f27a409821a3c61b54facb6116", "packages/ui/src/components/amicode-home-cards.tsx": "1551d6832131782c26e0ff0fe89d3a56777958ba764df9ff754821c412471e4a", "packages/ui/src/components/amicode-onboarding-wizard.tsx": "9e93fc0a1ff1e4c7ce02444c27924f0073b675d07752032c37f52a4c45f94536", "packages/ui/src/components/amicode-problem-switcher.tsx": "1dcf478871344108eb25e194f6c1a95e9977944d7f170627d46108ba3a07f1f3", @@ -1263,7 +1374,7 @@ "packages/ui/src/components/amicode-solver-switch.tsx": "ea1e5d187fcbd505046af8c2bdcddeb7b30dd98a7d2ee9a4775e25be2c581270", "packages/ui/src/components/amicode-solver-toggle.tsx": "b09c870bab880bfdf2557fb870fb6af13a065f90353f59d609f37a6054db858d", "packages/ui/src/components/amicode-splash.tsx": "0f69ebdd0e4e6595f38b1492c31a28bd1320706c7f1e26411ec4d25d1ab2921f", - "packages/ui/src/components/amicode-thinking.tsx": "85ef2a86f8ebbaa79596ee3783cf5796adcb8160d4680b557db99001428ebd48", + "packages/ui/src/components/amicode-thinking.tsx": "2734da9851aaf49f9c31929ee0092ffb19d40a945ff760fe0635c06812b04357", "packages/ui/src/components/amicode-vaults-tab.tsx": "9ad6262db994e2ecc7d7068c95f4a31c6fbb178c531364b0dc3c8fec427a9a0c", "packages/ui/src/components/amicode-widget-grid.tsx": "df589de093bca703e9fdbbffc6a13020e96ee0ef43e545718f91277ec0b7cd24", "packages/ui/src/components/brain-engine.tsx": "955723ad42c6abfb785313f62277143142f1248987c45da30eadaf28d5137072", @@ -1277,7 +1388,7 @@ "packages/ui/src/components/dropdown-menu.css": "35d1e136a03fb3b59fd5801645de2870c20ecae6810488f69f01595b6abf5a3c", "packages/ui/src/components/favicon.tsx": "809fd1d2621b0e28e69f8ac8092405b89a11fb7a6dbad2938121f7c0f2f5938d", "packages/ui/src/components/hover-card.css": "b6cf61d45ba88cc4252923fb6fb4643659410596eaf3f7456ee5a856dd22dc8f", - "packages/ui/src/components/icon.tsx": "0b78b15fcb531e989ac9d4e20bd36c0e14500bfb21358da85974343f26edd281", + "packages/ui/src/components/icon.tsx": "1d25faf5031ce28f12d3bdc4067b51377b5dc538e1b2495cc5d1983097615a04", "packages/ui/src/components/image-preview.css": "fdb49ad0314cc89d95be7d905d9d1d50628e25cd07d536104c8b3d0ef5132beb", "packages/ui/src/components/list.stories.tsx": "ba1302be7924b850a1ba2e8e7f3247fb10fa9a5e5f433164e56cbd1a457ab938", "packages/ui/src/components/logo.css": "f788db461b78bbe33ca2df8d8ff92104fe5c569c7feae124b43c24a5e7e9ab86", @@ -1296,19 +1407,36 @@ "packages/ui/src/context/dialog.tsx": "876f8a5dc26ebb98f1f5e9e528e7d0bd7aa79c0a107b62027dd9fe78ed2cc620", "packages/ui/src/context/marked-math.test.ts": "0fe460c09956335a469b382ff631809381875465cbcaf7e7c599f86240b0227c", "packages/ui/src/context/marked.tsx": "b4f693cba3f8020596f860a00293e43855ec75d0bd214e379e36250d02e2be4c", - "packages/ui/src/i18n/en.ts": "42bf7f6816f016d4c201475a41edf1e448bf500aa6f50cb50824ae70cdf8d0e8", + "packages/ui/src/i18n/ar.ts": "8113d320fe4a5300f1bd70150ae1695d68cb783e1c6e2be43b8a429b7dbdb711", + "packages/ui/src/i18n/br.ts": "cbde2da43ef820fe2664cb96cb973fd722156a6c8a3c5e16d18638bf014e5196", + "packages/ui/src/i18n/bs.ts": "23ea0ae34a4edaa4599b13f63f481be861e28da3b0d898987e291c7e91a9f11e", + "packages/ui/src/i18n/da.ts": "e8083f8a7ab01f73990a1eabcba817afdc663858d524e56e652ea69238cefc47", + "packages/ui/src/i18n/de.ts": "eb854fdd43f16fc2346ec43d7d1629d2714709991b3e5f7ac5ee99011324aa43", + "packages/ui/src/i18n/en.ts": "1b412a1cd0ea8f7d0ce6069d3bd94dc40778cc38c23c60191cd90071d4187ac8", + "packages/ui/src/i18n/es.ts": "a34d132adc2ad68ae3da98b6afd5070be48a0cd6cb15c4866cc7ea99deefc4ab", + "packages/ui/src/i18n/fr.ts": "4a8296dec41894e6ecb209e44564ac79c04cae73035b5447eb233cd984ef4bae", + "packages/ui/src/i18n/ja.ts": "6c13f118491c8badfac33baf449bee55779f6058792b6a54973bfe975e4c25c3", + "packages/ui/src/i18n/ko.ts": "b97f70d80c9ab7561c05ab91d461e9323c4c846d6a27bed0a41ad5fbcdf0c1db", + "packages/ui/src/i18n/no.ts": "120e5d11f5aebde00822def6fda9ae12db47cd020bdd04114cdb098d5ba67449", + "packages/ui/src/i18n/pl.ts": "8133cedc013364bf84a3902399b431f4029d6c1d57acf23f12a739127d4583e9", + "packages/ui/src/i18n/ru.ts": "11d79d60f2f678597ee2b33b51fa666f38f1e78b7ed051a686229ae0dd8aac72", + "packages/ui/src/i18n/th.ts": "afa5a46ff445461db8f069338aae760cb9cac09b370c47ced5542549c92c9235", + "packages/ui/src/i18n/tr.ts": "fac27e4bec327ff83976d9cdd8f54c2a241cb26b44c644a93c591e99f09290ed", + "packages/ui/src/i18n/uk.ts": "3531fcf92efaec359381fcc2f0cdbb644d52936a20037067451b057ef327ea1c", + "packages/ui/src/i18n/zh.ts": "6aac9e8c8973fb538effee075740035ce58a631615d39c0c8fb49375d45a56e5", + "packages/ui/src/i18n/zht.ts": "d50b7119139f53180eac64a6317341f54efc87ff76d56961a3e86ef74e3ad29b", "packages/ui/src/solid-dnd.d.ts": "f1faf22b0773252852ff0865f68a00fa479777f5d0b4602ea4d1660c366793ff", "packages/ui/src/styles/index.css": "2eae4e3d82e992c3d99f4a91ff25b3d6e9e514b38e9bebd232e6c41009cdc1fd", "packages/ui/src/styles/theme.css": "0dc88bf675df5cdf08cfe0cc53c11eaf030a1bc0cf8b36cbeb3977367c2b362b", "packages/ui/src/theme/context.tsx": "93b0b3f8a258bc8a33d4b6a4cda7016e91f6d999bd32c60a43aaaf45eadd1227", "packages/ui/src/theme/default-themes.ts": "878f3e9cb45803dfa740890ea2240e246b05833f2d7f1345c67909c1000d8761", - "packages/ui/src/theme/themes/harmoniqs.json": "36c3570b07ea7f05fe9f6a550bac4779ae9f1d66cdbba7954fc1cf6dd81b9af1", + "packages/ui/src/theme/themes/harmoniqs.json": "a20f6bb71df08a150a096bdd13f3aa347177f51858dba9bc9af6e25c2dcd848e", "packages/ui/src/theme/themes/oc-2.json": "539a59886cbee9f2e54362075486d47ac69884ef8a9282f767f7cfd3f1f598a8", "packages/ui/src/util/clipboard.ts": "218d321e1b0567b76514057ef22cfd23cb843fefc36bed7aab91f072e3233ad0", "packages/ui/src/v2/components/badge-v2.css": "32135a9df5bad856a10138e00a2cb3ede7a6fc0cc2398797ad6bed9335d1f845", "packages/ui/src/v2/components/dialog-v2.css": "ae6f7b1de755929ba529b9dbb0e837c80f620f00a77188b9d2c59f10b0f28bbd", "packages/ui/src/v2/components/icon-button-v2.tsx": "966e535e3efe503f054045be4476fc20d2fad36092410b52f75e4cf8de6fce6f", - "packages/ui/src/v2/components/icon.tsx": "2a5105e6f5502f511658fa3abd83b1c7ef5047ac67d5520fbf4836ccc47bad19", + "packages/ui/src/v2/components/icon.tsx": "cbc5debecdd7c6ee9424b746771be58316b333276c2b99c7cc3c8bf0cada3263", "packages/ui/src/v2/components/menu-v2.css": "2f262a6c456a8e3cb9027f0b8b3bb3c4327794bd80cadd3cf8c16d08e6125d4d", "packages/ui/src/v2/components/menu-v2.stories.tsx": "4ed1498d7e4cd51ce9c7459061f3540efdfae71751ff618901c78ee413951559", "packages/ui/src/v2/components/radio-v2.css": "bf6eb3457a7fc13e48356f5a7dcf3cbf462382580250a3144a745402ff88e2e6", diff --git a/packages/app-bundle/overlay/packages/app/e2e/smoke/session-timeline.spec.ts b/packages/app-bundle/overlay/packages/app/e2e/smoke/session-timeline.spec.ts index e2d4bdc1..13fc43cd 100644 --- a/packages/app-bundle/overlay/packages/app/e2e/smoke/session-timeline.spec.ts +++ b/packages/app-bundle/overlay/packages/app/e2e/smoke/session-timeline.spec.ts @@ -109,7 +109,7 @@ test.describe("smoke: session timeline", () => { const spacer = scroller.locator('[data-timeline-row="bottom-spacer"]') await expect(spacer).toBeVisible() - expect(await spacer.evaluate((element) => element.getBoundingClientRect().height)).toBe(64) + expect(await spacer.evaluate((element) => element.getBoundingClientRect().height)).toBe(24) await expect .poll(() => scroller.evaluate((element) => element.scrollHeight - element.clientHeight - element.scrollTop)) .toBeLessThanOrEqual(1) diff --git a/packages/app-bundle/overlay/packages/app/public/oc-theme-preload.js b/packages/app-bundle/overlay/packages/app/public/oc-theme-preload.js index 0fe9a1b6..a1e6b527 100644 --- a/packages/app-bundle/overlay/packages/app/public/oc-theme-preload.js +++ b/packages/app-bundle/overlay/packages/app/public/oc-theme-preload.js @@ -37,14 +37,15 @@ document.documentElement.dataset.theme = themeId document.documentElement.dataset.colorScheme = mode - // Brand ground, tracking harmoniqs.json palette.neutral (dark #000, light #fff). - // This paints before any stylesheet, so a stock literal here shows through as - // the old brand for the first frame. - document.documentElement.style.backgroundColor = isDark ? "#0F0F0D" : "#ffffff" + // Pre-paint ground, tracking harmoniqs.json's deepest ground per scheme: + // dark keeps the stock neutral #080808 (the brand cream-black read as warm + // against VS Code's chrome), light is the brand white. This paints before any + // stylesheet, so a wrong literal here shows through for the first frame. + document.documentElement.style.backgroundColor = isDark ? "#080808" : "#ffffff" // Update theme-color meta tag to match app color scheme var metas = document.querySelectorAll("meta[name='theme-color']") - if (metas.length > 0) metas[0].setAttribute("content", isDark ? "#0F0F0D" : "#ffffff") + if (metas.length > 0) metas[0].setAttribute("content", isDark ? "#080808" : "#ffffff") if (themeId === "oc-2") return // stock theme needs no cached CSS diff --git a/packages/app-bundle/overlay/packages/app/src/app.tsx b/packages/app-bundle/overlay/packages/app/src/app.tsx index 72568c49..4a9d2928 100644 --- a/packages/app-bundle/overlay/packages/app/src/app.tsx +++ b/packages/app-bundle/overlay/packages/app/src/app.tsx @@ -59,8 +59,9 @@ import { setPendingAutoSend } from "@/pages/new-session/new-session-draft-contro import { PromptProvider } from "@/context/prompt" import { ServerConnection, ServerProvider, serverName, useServer } from "@/context/server" import { SettingsProvider, useSettings } from "@/context/settings" -import { TabsProvider, useTabs, type DraftTab } from "@/context/tabs" +import { TabsProvider, tabHref, useTabs, type DraftTab } from "@/context/tabs" import { SDKProvider, useSDK } from "@/context/sdk" +import { resolveLandingDirectory } from "@/pages/new-session-landing" import { WslServersProvider } from "@/wsl/context" import DirectoryLayout, { DirectoryDataProvider } from "@/pages/directory-layout" import LegacyLayout from "@/pages/layout" @@ -74,7 +75,6 @@ import { bugDockController } from "@/pages/session/composer/bug-dock-controller" import { postBugReportPoke } from "@/utils/amicode-bug-report" import { SessionPage, SessionRouteErrorBoundary, TargetSessionRouteContent } from "@/pages/session" -import { NewHome } from "@/pages/home" import { LegacyHome } from "@/pages/home/legacy-home" import { AmicodeFileRefBridge } from "@/components/amicode-file-ref-bridge" import { DevToolsReopenBridge } from "@/components/settings-dialog" @@ -741,7 +741,7 @@ function Routes(props: { serverScoped?: JSX.Element }) { - + @@ -750,6 +750,45 @@ function Routes(props: { serverScoped?: JSX.Element }) { ) } +/** Landing route when the Home/Dashboard page is removed: creates a new draft + * session tab on mount and navigates to it. If a session tab already exists, + * navigates to the most recent one instead of creating a duplicate. */ +function NewSessionLanding() { + const tabs = useTabs() + const global = useGlobal() + const navigate = useNavigate() + + const land = () => { + // If there's already a session or draft tab, navigate to it + const existing = tabs.store.find((tab) => tab.type === "session" || tab.type === "draft") + if (existing) { + navigate(tabHref(existing), { replace: true }) + return + } + + // Otherwise create a new draft — find a server + directory to use + const connections = global.servers.list() + const conn = connections[0] + if (!conn) return // no server connected yet — will re-render when one connects + + // projects.list() is the client-side store of OPENED projects, which is empty + // on a fresh profile and for servers running outside any registered project + // (the amicode chat server spawns in an internal scaffold dir). Falling back + // to a server-known worktree keeps this route from rendering nothing at all. + const ctx = global.ensureServerCtx(conn) + const directory = resolveLandingDirectory(ctx.projects.list(), ctx.sync.data.project[0]?.worktree) + if (!directory) return // nothing to land on yet — re-renders when sync arrives + + tabs.newDraft({ server: ServerConnection.key(conn), directory }, "") + } + + return ( + + {(() => { land(); return null })()} + + ) +} + function NewLayoutLegacySessionRedirect() { const server = useServer() const tabs = useTabs() diff --git a/packages/app-bundle/overlay/packages/app/src/components/profile-popover.tsx b/packages/app-bundle/overlay/packages/app/src/components/profile-popover.tsx new file mode 100644 index 00000000..9901cc46 --- /dev/null +++ b/packages/app-bundle/overlay/packages/app/src/components/profile-popover.tsx @@ -0,0 +1,603 @@ +import { batch, createEffect, createSignal, Show, type ComponentProps, type JSX } from "solid-js" +import { Popover } from "@opencode-ai/ui/popover" +import { Icon as IconV2 } from "@opencode-ai/ui/v2/icon" +import { announceChromeDropdown, chromeDropdownOpenId, clearChromeDropdown } from "@/utils/chrome-dropdown" +import { useServer } from "@/context/server" +import { usePlatform } from "@/context/platform" +import { amicodeGet, amicodePost } from "@/utils/amicode-fetch" + +interface ProfileData { + name: string + role: string | null + affiliation: string | null + affiliation_logo: string | null + focus: string | null + description: string | null + avatar: string | null + github: string | null + scholar: string | null + custom_link: { url: string; label: string } | null +} + +export function ProfilePopoverTrigger() { + const [shown, setShownRaw] = createSignal(false) + const [profile, setProfile] = createSignal(null) + const [editing, setEditing] = createSignal(false) + const [draft, setDraft] = createSignal({ + name: "", + role: "", + affiliation: "", + focus: "", + description: "", + scholar: "", + github: "", + custom_link_url: "", + custom_link_label: "", + }) + const server = useServer() + const platform = usePlatform() + + const setShown = (next: boolean) => { + batch(() => { + if (next) announceChromeDropdown("profile") + else clearChromeDropdown("profile") + setShownRaw(next) + }) + } + + createEffect(() => { + if (chromeDropdownOpenId() !== "profile" && shown()) setShownRaw(false) + }) + + const fetchProfile = async () => { + try { + const data = await amicodeGet(server.current, "/amicode/profile") as any + if (data.ok && data.you) setProfile(data.you) + } catch { + /* silent */ + } + } + + createEffect(() => { + if (shown()) void fetchProfile() + }) + + const beginEdit = () => { + const p = profile() + setDraft({ + name: p?.name ?? "", + role: p?.role ?? "", + affiliation: p?.affiliation ?? "", + focus: p?.focus ?? "", + description: p?.description ?? "", + scholar: p?.scholar ?? "", + github: p?.github ?? "", + custom_link_url: p?.custom_link?.url ?? "", + custom_link_label: p?.custom_link?.label ?? "", + }) + setEditing(true) + } + + const save = async () => { + const d = draft() + const params = new URLSearchParams() + for (const [k, v] of Object.entries(d)) params.set(k, v) + try { + const data = await amicodePost(server.current, `/amicode/profile?${params.toString()}`) as any + if (data.ok && data.you) setProfile(data.you) + setEditing(false) + } catch { + /* silent */ + } + } + + const initials = () => { + const p = profile() + if (!p?.name) return "" + const parts = p.name.trim().split(/\s+/) + if (parts.length >= 2) return (parts[0][0] + parts[parts.length - 1][0]).toUpperCase() + return parts[0][0]?.toUpperCase() ?? "" + } + + const isEmpty = () => { + const p = profile() + if (!p) return true + // Show edit mode only when there's truly nothing set (no name beyond default, no role, no affiliation) + return (!p.name || p.name === "Practitioner") && !p.role && !p.affiliation && !p.focus + } + + const openExternal = (url: string) => { + platform.openExternal(url) + } + + const saveAvatar = async (dataUrl: string) => { + // Resize to 96x96 to keep profile.json small + const resized = await resizeImage(dataUrl, 96) + try { + const data = await amicodePost(server.current, "/amicode/profile", { avatar: resized }) as any + if (data.ok && data.you) setProfile(data.you) + } catch { + /* silent */ + } + } + + const removeAvatar = async () => { + try { + const data = await amicodePost(server.current, "/amicode/profile", { avatar: "" }) as any + if (data.ok && data.you) setProfile(data.you) + } catch { + /* silent */ + } + } + + return ( + + } + trigger={} + class="[&_[data-slot=popover-body]]:p-0 w-[320px] max-w-[calc(100vw-40px)] bg-transparent border-0 shadow-none rounded-lg" + gutter={8} + placement="bottom-start" + > + +
+ setEditing(false)} onAvatarChange={saveAvatar} onAvatarRemove={removeAvatar} currentAvatar={profile()?.avatar ?? null} isEmpty={isEmpty()} />} + > + + +
+
+
+ ) +} + +function ReadView(props: { + profile: ProfileData + initials: string + onEdit: () => void + onOpenExternal: (url: string) => void +}) { + const [logoBroken, setLogoBroken] = createSignal(false) + const [bioExpanded, setBioExpanded] = createSignal(false) + + return ( +
+ {/* Header: avatar + name/role/affiliation */} +
+ {/* Avatar */} +
+ }> + {props.initials} + + }> + Profile + +
+ {/* Name + Role + Affiliation */} +
+
+
+ {props.profile.name} +
+ +
+ +
+ {props.profile.role && props.profile.affiliation + ? `${props.profile.role} @ ${props.profile.affiliation}` + : props.profile.role || props.profile.affiliation} +
+
+
+
+ + {/* Focus + Description */} + +
+ +
+ {props.profile.focus} +
+
+ +
setBioExpanded(!bioExpanded())} + style={{ + "font-size": "12px", + color: "var(--v2-text-text-muted)", + "margin-top": "4px", + cursor: "pointer", + }} + > +
+ {props.profile.description} +
+
+
+
+
+ + {/* Link pills */} +
+ } + url={props.profile.scholar} + tooltip="Google Scholar" + onOpen={props.onOpenExternal} + /> + } + url={props.profile.github} + tooltip="GitHub" + onOpen={props.onOpenExternal} + /> + } + url={props.profile.custom_link?.url ?? null} + tooltip={props.profile.custom_link?.label || "Custom link"} + onOpen={props.onOpenExternal} + /> +
+
+ ) +} + +function LinkPill(props: { icon: JSX.Element; url: string | null; tooltip: string; onOpen: (url: string) => void }) { + const filled = () => !!props.url + return ( + + ) +} + +function EditForm(props: { + draft: () => Record + setDraft: (d: Record) => void + onSave: () => void + onCancel: () => void + onAvatarChange: (dataUrl: string) => void + onAvatarRemove: () => void + currentAvatar: string | null + isEmpty: boolean +}) { + const update = (key: string, value: string) => props.setDraft({ ...props.draft(), [key]: value }) + let fileInput: HTMLInputElement | undefined + + const handleFileSelect = (e: Event) => { + const input = e.currentTarget as HTMLInputElement + const file = input.files?.[0] + if (!file) return + if (!file.type.startsWith("image/")) return + const reader = new FileReader() + reader.onload = () => { + props.onAvatarChange(reader.result as string) + } + reader.readAsDataURL(file) + input.value = "" + } + + const avatarInitials = () => { + const name = props.draft().name + if (!name) return "" + const parts = name.trim().split(/\s+/) + if (parts.length >= 2) return (parts[0][0] + parts[parts.length - 1][0]).toUpperCase() + return parts[0][0]?.toUpperCase() ?? "" + } + + return ( +
+ {/* Hidden file input */} + + {/* Clickable avatar tile */} +
+
fileInput?.click()} + title="Click to change photo" + style={{ + width: "48px", + height: "48px", + "border-radius": "10px", + display: "flex", + "align-items": "center", + "justify-content": "center", + overflow: "hidden", + background: props.currentAvatar ? "transparent" : "var(--accent, #fff676)", + color: "var(--accent-ink, #111214)", + "font-size": "16px", + "font-weight": "700", + cursor: "pointer", + border: "1px dashed var(--v2-border-border-base)", + }} + > + }> + {avatarInitials()} + + }> + Profile + +
+ + + +
+ update("name", e.currentTarget.value)} + autofocus={props.isEmpty} + style={{ "font-size": "14px", "font-weight": "600" }} + /> + update("role", e.currentTarget.value)} + /> + update("affiliation", e.currentTarget.value)} + /> + update("focus", e.currentTarget.value)} + /> +