From 29ccaf1e92cafd8f3432e3df5b5eb8e291ca1be7 Mon Sep 17 00:00:00 2001 From: oss-sync Date: Tue, 23 Jun 2026 06:38:48 +0000 Subject: [PATCH] sync: update from private repo (dfadcd5f) --- .gitignore | 6 + DESIGN.md | 177 ++ config.yaml.example | 44 +- .../workspace-apps/file-note/app.json | 5 + .../workspace-apps/file-note/index.html | 172 ++ docs/getting-started.ja.md | 13 + docs/getting-started.md | 15 + docs/maintenance-checklist.md | 63 +- docs/tools/bash.md | 2 +- docs/tools/browseweb.md | 10 + docs/tools/calendar.md | 45 + docs/tools/downloadfile.md | 14 +- docs/tools/notes.md | 97 - docs/tools/readimage.md | 4 - docs/tools/requesttool.md | 35 + docs/tools/searchknowledge.md | 103 - docs/tools/skills.md | 38 + docs/tools/updatedashboardwidget.md | 43 - docs/tools/webfetch.md | 35 +- docs/tools/workspace-apps.md | 45 + docs/workspace-apps-bridge.md | 141 ++ package-lock.json | 263 ++- package.json | 8 + pieces/SCHEMA.md | 31 + pieces/brainstorming.yaml | 5 - pieces/chat.yaml | 8 +- pieces/data-process.yaml | 2 +- pieces/general.yaml | 6 +- pieces/office-process.yaml | 2 +- pieces/piece-builder.yaml | 10 +- pieces/research-sub.yaml | 6 +- pieces/research.yaml | 8 +- pieces/slide.yaml | 3 - pieces/sns-research.yaml | 4 +- pieces/workspace-app.yaml | 70 + pieces/x-ai-digest.yaml | 5 - scripts/help-changelog-reminder.sh | 73 + .../config-migration/v1-mcp-and-ssh.yaml | 9 +- src/bridge/admin-api.local.test.ts | 2 +- src/bridge/auth.local.test.ts | 20 + src/bridge/auth.test.ts | 106 +- src/bridge/auth.ts | 88 +- src/bridge/browser-api.ts | 4 +- src/bridge/browser-session-api.test.ts | 133 ++ src/bridge/browser-session-api.ts | 165 +- src/bridge/cross-calendar-api.test.ts | 89 + src/bridge/cross-calendar-api.ts | 42 + src/bridge/dashboard-api.test.ts | 133 +- src/bridge/dashboard-api.ts | 155 +- src/bridge/gateway-mount.test.ts | 22 + src/bridge/gateway-mount.ts | 6 +- src/bridge/local-api-helpers.test.ts | 89 +- src/bridge/local-api-helpers.ts | 85 +- src/bridge/local-files-api.test.ts | 329 ++- src/bridge/local-files-api.ts | 291 ++- ...local-tasks-api.comment-write-gate.test.ts | 180 ++ src/bridge/local-tasks-api.space-view.test.ts | 100 + src/bridge/local-tasks-api.spaces.test.ts | 322 +++ src/bridge/local-tasks-api.test.ts | 265 +++ src/bridge/local-tasks-api.ts | 208 +- src/bridge/mcp-api.test.ts | 198 ++ src/bridge/mcp-api.ts | 162 +- src/bridge/memory-api.test.ts | 110 + src/bridge/memory-api.ts | 89 +- src/bridge/notes-api.test.ts | 203 -- src/bridge/notes-api.ts | 168 -- src/bridge/pieces-api.test.ts | 50 + src/bridge/pieces-api.ts | 120 +- src/bridge/reflection-api.test.ts | 115 +- src/bridge/reflection-api.ts | 115 +- src/bridge/scheduled-tasks-api.test.ts | 356 +++ src/bridge/scheduled-tasks-api.ts | 180 +- src/bridge/security-headers.test.ts | 50 +- src/bridge/security-headers.ts | 40 +- src/bridge/server.ts | 188 +- src/bridge/skills-api.test.ts | 107 + src/bridge/skills-api.ts | 136 +- src/bridge/space-api.calendar.test.ts | 236 ++ src/bridge/space-api.invite.test.ts | 207 ++ src/bridge/space-api.members.test.ts | 420 ++++ src/bridge/space-api.test.ts | 411 ++++ src/bridge/space-api.ts | 898 +++++++ src/bridge/space-api.write-endpoint.test.ts | 215 ++ src/bridge/space-api.write-gates.test.ts | 188 ++ src/bridge/ssh-api.test.ts | 114 +- src/bridge/ssh-api.ts | 91 +- src/bridge/subtask-activity-api.ts | 6 +- src/bridge/subtask-files-api.ts | 6 +- src/bridge/tools-api.ts | 3 - src/bridge/usage-api.test.ts | 48 + src/bridge/usage-api.ts | 29 +- src/bridge/user-folder-api.agents-md.test.ts | 117 +- src/bridge/user-folder-api.test.ts | 44 +- src/bridge/user-folder-api.ts | 196 +- src/bridge/users-api.ts | 38 + src/bridge/validation.ts | 18 + src/bridge/visibility.test.ts | 118 +- src/bridge/visibility.ts | 110 +- src/config-manager.ts | 21 - src/config-normalize.test.ts | 7 +- src/config.test.ts | 24 + src/config.ts | 75 +- src/crypto/profile-dek.test.ts | 80 + src/crypto/profile-dek.ts | 93 + src/db/browser-session-migration.test.ts | 117 + src/db/browser-session-repo.test.ts | 49 + src/db/browser-session-repo.ts | 63 +- src/db/dashboard-widgets-repository.test.ts | 86 - src/db/migrate.mcp-space.test.ts | 89 + src/db/migrate.notes.test.ts | 59 - src/db/migrate.privatize-space-rows.test.ts | 81 + ...igrate.rename-personal-space-title.test.ts | 52 + src/db/migrate.space-id.test.ts | 136 ++ src/db/migrate.ssh-space.test.ts | 119 + src/db/migrate.ts | 656 +++++- src/db/repository.calendar.test.ts | 244 ++ src/db/repository.cross-calendar.test.ts | 160 ++ ...pository.personal-space-visibility.test.ts | 125 + src/db/repository.shared-space.test.ts | 323 +++ src/db/repository.space-invites.test.ts | 74 + ...pository.spaces-resource-isolation.test.ts | 100 + src/db/repository.spaces-task-ops.test.ts | 457 ++++ src/db/repository.tool-requests.test.ts | 88 + src/db/repository.ts | 1462 ++++++++++-- src/db/runtime-dir.test.ts | 50 + src/db/schema.sql | 252 +- src/db/spaces-repository.test.ts | 165 ++ src/db/spaces-resolution.test.ts | 119 + src/engine/agent-loop-console.test.ts | 31 +- src/engine/agent-loop.notes-inject.test.ts | 133 -- src/engine/agent-loop.test.ts | 86 +- src/engine/agent-loop.ts | 154 +- src/engine/notes-inject.test.ts | 94 - src/engine/notes-inject.ts | 82 - src/engine/piece-catalog.test.ts | 54 +- src/engine/piece-catalog.ts | 43 +- src/engine/piece-classifier.test.ts | 17 + src/engine/piece-classifier.ts | 6 +- src/engine/piece-runner.test.ts | 176 +- src/engine/piece-runner.ts | 265 ++- .../reflection/reflection-runner.test.ts | 35 + src/engine/reflection/reflection-runner.ts | 43 +- src/engine/reflection/retention.test.ts | 26 + src/engine/reflection/retention.ts | 28 +- src/engine/skills.ts | 63 +- src/engine/tools/app-docs.test.ts | 46 +- src/engine/tools/app-docs.ts | 22 +- src/engine/tools/browser.test.ts | 75 +- src/engine/tools/browser.ts | 34 +- src/engine/tools/calendar.test.ts | 129 + src/engine/tools/calendar.ts | 173 ++ src/engine/tools/checklist.test.ts | 6 +- src/engine/tools/checklist.ts | 16 +- src/engine/tools/conflict-guard.test.ts | 98 + src/engine/tools/conflict-guard.ts | 121 + src/engine/tools/core.test.ts | 126 +- src/engine/tools/core.ts | 215 +- src/engine/tools/dashboard.test.ts | 114 - src/engine/tools/dashboard.ts | 115 - src/engine/tools/docs.ts | 25 +- src/engine/tools/index.ts | 132 +- src/engine/tools/knowledge.test.ts | 175 -- src/engine/tools/knowledge.ts | 477 ---- src/engine/tools/notes.test.ts | 79 - src/engine/tools/notes.ts | 190 -- src/engine/tools/pieces.test.ts | 19 + src/engine/tools/pieces.ts | 12 + src/engine/tools/raw-save.test.ts | 6 +- src/engine/tools/raw-save.ts | 14 +- src/engine/tools/shared/readability.test.ts | 121 + src/engine/tools/shared/readability.ts | 165 ++ src/engine/tools/skills.test.ts | 145 +- src/engine/tools/skills.ts | 49 +- src/engine/tools/source-library.test.ts | 182 ++ src/engine/tools/source-library.ts | 170 ++ src/engine/tools/ssh-console.ts | 4 +- src/engine/tools/ssh.test.ts | 55 + src/engine/tools/ssh.ts | 33 +- src/engine/tools/structured-blocks.test.ts | 8 +- src/engine/tools/structured-blocks.ts | 4 +- src/engine/tools/tool-request.test.ts | 85 + src/engine/tools/tool-request.ts | 104 + src/engine/tools/user-folder.test.ts | 109 + src/engine/tools/user-folder.ts | 63 +- src/engine/tools/web.test.ts | 187 ++ src/engine/tools/web.ts | 90 +- src/gateway/config.test.ts | 8 + src/gateway/config.ts | 12 + src/gateway/shared-dependencies.test.ts | 46 + src/gateway/shared-dependencies.ts | 32 + src/gateway/stream-proxy.ts | 16 + .../stream-proxy.usage-extraction.test.ts | 24 + src/llm/openai-compat.test.ts | 76 + src/llm/openai-compat.ts | 52 +- src/mcp/aggregator.test.ts | 62 + src/mcp/aggregator.ts | 39 +- src/mcp/registry.test.ts | 38 + src/mcp/registry.ts | 43 +- src/mcp/types.ts | 1 + src/metrics/tool-name-allowlist.ts | 7 - src/net/http-redirect.test.ts | 7 +- src/net/http-redirect.ts | 6 +- src/notes/fm.test.ts | 92 - src/notes/fm.ts | 106 - src/notes/notes-repository.test.ts | 216 -- src/notes/notes-repository.ts | 190 -- src/notes/notes-service.test.ts | 366 --- src/notes/notes-service.ts | 401 ---- src/progress/event-log.ts | 10 +- src/progress/local-reporter.test.ts | 39 + src/progress/local-reporter.ts | 7 +- src/scheduler.test.ts | 59 + src/scheduler.ts | 69 +- src/server/config.test.ts | 7 + src/server/config.ts | 13 + src/spaces/folder-resolver.test.ts | 25 + src/spaces/folder-resolver.ts | 33 + src/spaces/paths.test.ts | 17 + src/spaces/paths.ts | 30 + src/spaces/runtime-paths.test.ts | 70 + src/spaces/runtime-paths.ts | 48 + src/spaces/scaffold.test.ts | 45 + src/spaces/scaffold.ts | 75 + src/spaces/space-color.ts | 41 + src/spaces/workspace-resolver.test.ts | 32 + src/spaces/workspace-resolver.ts | 28 + src/ssh/access.test.ts | 129 +- src/ssh/access.ts | 87 +- src/ssh/connection-repo.test.ts | 31 + src/ssh/connection-repo.ts | 28 +- src/ssh/crypto.test.ts | 87 + src/ssh/crypto.ts | 72 +- src/types/turndown-plugin-gfm.d.ts | 12 + src/user-folder/delete-folder.test.ts | 2 +- src/user-folder/paths.notes.test.ts | 20 - src/user-folder/paths.test.ts | 2 +- src/user-folder/paths.ts | 4 +- src/user-folder/recording-flush.test.ts | 29 + src/user-folder/recording-flush.ts | 26 +- src/user-folder/session-loader.ts | 38 +- src/worker-bootstrap.ts | 4 +- src/worker.job-guard.test.ts | 94 + src/worker.reflection-enqueue.test.ts | 28 + src/worker.test.ts | 181 +- src/worker.ts | 445 +++- ui/e2e-auth/config.e2e-auth.yaml | 53 + ui/e2e-auth/shared-space.auth.spec.ts | 333 +++ ui/e2e-auth/sharing-scope.auth.spec.ts | 359 +++ ui/e2e-auth/space-invite.auth.spec.ts | 281 +++ ui/e2e/calendar.spec.ts | 139 ++ ui/e2e/spaces.spec.ts | 2079 +++++++++++++++++ ui/e2e/tasks.spec.ts | 88 + ui/playwright.auth.config.ts | 95 + ui/playwright.config.ts | 76 + ui/src/App.tsx | 125 +- ui/src/api.ts | 719 +++++- .../browser/SaveRecordingButton.tsx | 10 +- ui/src/components/create/CreateTaskDialog.tsx | 74 +- .../components/dashboard/AddWidgetDialog.tsx | 117 - .../components/dashboard/MarkdownWidget.tsx | 82 - ui/src/components/dashboard/SideInfoPanel.tsx | 55 +- ui/src/components/dashboard/WidgetTabBar.tsx | 68 +- .../dashboard/WorkerStatusWidget.tsx | 6 +- ui/src/components/detail/DetailHeader.tsx | 13 +- ui/src/components/detail/DetailPanel.tsx | 47 +- ui/src/components/detail/detailTabs.test.ts | 15 + ui/src/components/detail/detailTabs.ts | 12 + ui/src/components/detail/tabs/FilesTab.tsx | 3 +- ui/src/components/detail/tabs/ProgressTab.tsx | 2 +- ui/src/components/files/FileBreadcrumb.tsx | 51 + ui/src/components/files/FileBrowser.tsx | 201 +- ui/src/components/files/FileTileGrid.tsx | 158 ++ ui/src/components/files/FileToolbar.tsx | 210 ++ ui/src/components/layout/NavDrawer.tsx | 21 +- ui/src/components/layout/TopBar.tsx | 4 +- ui/src/components/list/TaskListPanel.tsx | 39 +- ui/src/components/settings/ConfigForm.tsx | 41 +- .../settings/KnowledgeNamespacesForm.tsx | 71 - .../components/settings/NamespaceEditor.tsx | 109 - ui/src/components/settings/NotesForm.tsx | 50 - .../PetsPanel.tsx => settings/PetsForm.tsx} | 15 +- ui/src/components/settings/PieceEditor.tsx | 28 +- ui/src/components/settings/ServerTlsForm.tsx | 14 + .../components/settings/SettingsSidebar.tsx | 12 +- ui/src/components/settings/SkillsForm.tsx | 74 +- ui/src/components/settings/ToolsForm.tsx | 51 +- .../settings/settingsSidebar.test.ts | 34 + ui/src/components/spaces/AppRunner.tsx | 289 +++ .../components/spaces/ChatDetailSplit.test.ts | 60 + ui/src/components/spaces/ChatDetailSplit.tsx | 190 ++ .../components/spaces/CreateSpaceDialog.tsx | 149 ++ .../components/spaces/CrossSpaceCalendar.tsx | 315 +++ ui/src/components/spaces/JoinSpace.tsx | 144 ++ ui/src/components/spaces/SpaceApps.tsx | 184 ++ .../components/spaces/SpaceBrowserPanel.tsx | 290 +++ ui/src/components/spaces/SpaceCalendar.tsx | 688 ++++++ ui/src/components/spaces/SpaceDetail.tsx | 1194 ++++++++++ .../components/spaces/SpaceMembersPanel.tsx | 504 ++++ ui/src/components/spaces/SpaceRail.tsx | 110 + ui/src/components/spaces/SpaceSettings.tsx | 212 ++ ui/src/components/spaces/SpacesPage.tsx | 220 ++ ui/src/components/spaces/app-bridge.test.ts | 259 ++ ui/src/components/spaces/app-bridge.ts | Bin 0 -> 9845 bytes .../spaces/spaceDetailKeying.test.ts | 34 + ui/src/components/usage/UsagePage.tsx | 41 +- .../userfolder/AddBrowserSessionDialog.tsx | 8 +- .../components/userfolder/AgentsMdPanel.tsx | 37 +- .../userfolder/BrowserSessionsPanel.tsx | 99 - ui/src/components/userfolder/FileTree.tsx | 156 -- ui/src/components/userfolder/McpPanel.tsx | 47 +- ui/src/components/userfolder/MemoryPanel.tsx | 41 +- .../userfolder/MonacoFileEditor.tsx | 10 +- ui/src/components/userfolder/NewFileForm.tsx | 108 - ui/src/components/userfolder/NotesPanel.tsx | 345 --- .../userfolder/SaveAsScriptDialog.tsx | 331 --- .../userfolder/ScriptDiffReview.tsx | 163 -- ui/src/components/userfolder/SkillsPanel.tsx | 4 +- .../userfolder/SshConnectionsPanel.tsx | 45 +- .../userfolder/SubscriptionsPanel.tsx | 541 ----- .../components/userfolder/UserFolderTab.tsx | 460 ---- ui/src/content/help/00-changelog.md | 85 + ui/src/content/help/01-intro.md | 17 + ui/src/content/help/02-tasks.md | 49 +- ui/src/content/help/03-running.md | 6 +- ui/src/content/help/04-results.md | 19 +- ui/src/content/help/05-pieces.md | 5 +- ui/src/content/help/06-schedules.md | 10 +- ui/src/content/help/08-troubleshooting.md | 2 +- ui/src/content/help/09-userfolder.md | 116 +- ui/src/content/help/11-skills.md | 21 +- ui/src/content/help/12-memory.md | 6 +- ui/src/content/help/13-mcp.md | 6 +- ui/src/content/help/14-ssh.md | 2 +- ui/src/content/help/15-llm-gateway.md | 12 +- ui/src/content/help/16-tools.md | 2 - ui/src/content/help/17-settings.md | 26 +- ui/src/content/help/18-reflection.md | 2 +- ui/src/content/help/20-workspace-apps.md | 29 + ui/src/content/help/21-workspaces.md | 61 + ui/src/content/help/22-calendar.md | 44 + ui/src/hooks/useDashboardWidgets.ts | 56 - ui/src/hooks/useFileBrowser.ts | 113 +- ui/src/hooks/useIsMobile.ts | 30 + ui/src/hooks/usePieces.ts | 15 +- ui/src/hooks/useSpaceBranding.ts | 63 + ui/src/hooks/useSpaces.ts | 55 + ui/src/hooks/useTaskOperations.ts | 11 +- ui/src/i18n/layout-workspace.test.ts | 36 + ui/src/i18n/locales/en/browser.json | 2 +- ui/src/i18n/locales/en/dashboard.json | 33 +- ui/src/i18n/locales/en/detail.json | 3 +- ui/src/i18n/locales/en/layout.json | 3 +- ui/src/i18n/locales/en/settings.json | 29 +- ui/src/i18n/locales/en/usage.json | 6 +- ui/src/i18n/locales/en/userfolder.json | 77 +- ui/src/i18n/locales/ja/browser.json | 2 +- ui/src/i18n/locales/ja/dashboard.json | 33 +- ui/src/i18n/locales/ja/detail.json | 3 +- ui/src/i18n/locales/ja/layout.json | 3 +- ui/src/i18n/locales/ja/settings.json | 29 +- ui/src/i18n/locales/ja/usage.json | 6 +- ui/src/i18n/locales/ja/userfolder.json | 77 +- ui/src/index.css | 31 + ui/src/lib/fileBase64.ts | 18 + ui/src/lib/localDate.ts | 24 + ui/src/lib/spaceBranding.test.ts | 59 + ui/src/lib/spaceBranding.ts | 81 + ui/src/lib/spaceColor.ts | 36 + ui/src/lib/spaceSort.test.ts | 47 + ui/src/lib/spaceSort.ts | 17 + ui/src/lib/spaceTasks.test.ts | 51 + ui/src/lib/spaceTasks.ts | 19 + ui/src/lib/taskFilter.test.ts | 56 + ui/src/lib/taskFilter.ts | 67 + ui/src/lib/urlState.test.ts | 13 +- ui/src/lib/urlState.ts | 27 +- ui/src/pages/SchedulesPage.tsx | 43 +- 377 files changed, 31028 insertions(+), 8994 deletions(-) create mode 100644 DESIGN.md create mode 100644 docs/examples/workspace-apps/file-note/app.json create mode 100644 docs/examples/workspace-apps/file-note/index.html create mode 100644 docs/tools/calendar.md delete mode 100644 docs/tools/notes.md create mode 100644 docs/tools/requesttool.md delete mode 100644 docs/tools/searchknowledge.md create mode 100644 docs/tools/skills.md delete mode 100644 docs/tools/updatedashboardwidget.md create mode 100644 docs/tools/workspace-apps.md create mode 100644 docs/workspace-apps-bridge.md create mode 100644 pieces/workspace-app.yaml create mode 100755 scripts/help-changelog-reminder.sh create mode 100644 src/bridge/cross-calendar-api.test.ts create mode 100644 src/bridge/cross-calendar-api.ts create mode 100644 src/bridge/local-tasks-api.comment-write-gate.test.ts create mode 100644 src/bridge/local-tasks-api.space-view.test.ts create mode 100644 src/bridge/local-tasks-api.spaces.test.ts delete mode 100644 src/bridge/notes-api.test.ts delete mode 100644 src/bridge/notes-api.ts create mode 100644 src/bridge/space-api.calendar.test.ts create mode 100644 src/bridge/space-api.invite.test.ts create mode 100644 src/bridge/space-api.members.test.ts create mode 100644 src/bridge/space-api.test.ts create mode 100644 src/bridge/space-api.ts create mode 100644 src/bridge/space-api.write-endpoint.test.ts create mode 100644 src/bridge/space-api.write-gates.test.ts create mode 100644 src/crypto/profile-dek.test.ts create mode 100644 src/crypto/profile-dek.ts delete mode 100644 src/db/dashboard-widgets-repository.test.ts create mode 100644 src/db/migrate.mcp-space.test.ts delete mode 100644 src/db/migrate.notes.test.ts create mode 100644 src/db/migrate.privatize-space-rows.test.ts create mode 100644 src/db/migrate.rename-personal-space-title.test.ts create mode 100644 src/db/migrate.space-id.test.ts create mode 100644 src/db/migrate.ssh-space.test.ts create mode 100644 src/db/repository.calendar.test.ts create mode 100644 src/db/repository.cross-calendar.test.ts create mode 100644 src/db/repository.personal-space-visibility.test.ts create mode 100644 src/db/repository.shared-space.test.ts create mode 100644 src/db/repository.space-invites.test.ts create mode 100644 src/db/repository.spaces-resource-isolation.test.ts create mode 100644 src/db/repository.spaces-task-ops.test.ts create mode 100644 src/db/repository.tool-requests.test.ts create mode 100644 src/db/runtime-dir.test.ts create mode 100644 src/db/spaces-repository.test.ts create mode 100644 src/db/spaces-resolution.test.ts delete mode 100644 src/engine/agent-loop.notes-inject.test.ts delete mode 100644 src/engine/notes-inject.test.ts delete mode 100644 src/engine/notes-inject.ts create mode 100644 src/engine/tools/calendar.test.ts create mode 100644 src/engine/tools/calendar.ts create mode 100644 src/engine/tools/conflict-guard.test.ts create mode 100644 src/engine/tools/conflict-guard.ts delete mode 100644 src/engine/tools/dashboard.test.ts delete mode 100644 src/engine/tools/dashboard.ts delete mode 100644 src/engine/tools/knowledge.test.ts delete mode 100644 src/engine/tools/knowledge.ts delete mode 100644 src/engine/tools/notes.test.ts delete mode 100644 src/engine/tools/notes.ts create mode 100644 src/engine/tools/shared/readability.test.ts create mode 100644 src/engine/tools/shared/readability.ts create mode 100644 src/engine/tools/source-library.test.ts create mode 100644 src/engine/tools/source-library.ts create mode 100644 src/engine/tools/tool-request.test.ts create mode 100644 src/engine/tools/tool-request.ts delete mode 100644 src/notes/fm.test.ts delete mode 100644 src/notes/fm.ts delete mode 100644 src/notes/notes-repository.test.ts delete mode 100644 src/notes/notes-repository.ts delete mode 100644 src/notes/notes-service.test.ts delete mode 100644 src/notes/notes-service.ts create mode 100644 src/spaces/folder-resolver.test.ts create mode 100644 src/spaces/folder-resolver.ts create mode 100644 src/spaces/paths.test.ts create mode 100644 src/spaces/paths.ts create mode 100644 src/spaces/runtime-paths.test.ts create mode 100644 src/spaces/runtime-paths.ts create mode 100644 src/spaces/scaffold.test.ts create mode 100644 src/spaces/scaffold.ts create mode 100644 src/spaces/space-color.ts create mode 100644 src/spaces/workspace-resolver.test.ts create mode 100644 src/spaces/workspace-resolver.ts create mode 100644 src/types/turndown-plugin-gfm.d.ts delete mode 100644 src/user-folder/paths.notes.test.ts create mode 100644 src/worker.job-guard.test.ts create mode 100644 ui/e2e-auth/config.e2e-auth.yaml create mode 100644 ui/e2e-auth/shared-space.auth.spec.ts create mode 100644 ui/e2e-auth/sharing-scope.auth.spec.ts create mode 100644 ui/e2e-auth/space-invite.auth.spec.ts create mode 100644 ui/e2e/calendar.spec.ts create mode 100644 ui/e2e/spaces.spec.ts create mode 100644 ui/e2e/tasks.spec.ts create mode 100644 ui/playwright.auth.config.ts create mode 100644 ui/playwright.config.ts delete mode 100644 ui/src/components/dashboard/AddWidgetDialog.tsx delete mode 100644 ui/src/components/dashboard/MarkdownWidget.tsx create mode 100644 ui/src/components/detail/detailTabs.test.ts create mode 100644 ui/src/components/files/FileBreadcrumb.tsx create mode 100644 ui/src/components/files/FileTileGrid.tsx create mode 100644 ui/src/components/files/FileToolbar.tsx delete mode 100644 ui/src/components/settings/KnowledgeNamespacesForm.tsx delete mode 100644 ui/src/components/settings/NamespaceEditor.tsx delete mode 100644 ui/src/components/settings/NotesForm.tsx rename ui/src/components/{userfolder/PetsPanel.tsx => settings/PetsForm.tsx} (96%) create mode 100644 ui/src/components/settings/settingsSidebar.test.ts create mode 100644 ui/src/components/spaces/AppRunner.tsx create mode 100644 ui/src/components/spaces/ChatDetailSplit.test.ts create mode 100644 ui/src/components/spaces/ChatDetailSplit.tsx create mode 100644 ui/src/components/spaces/CreateSpaceDialog.tsx create mode 100644 ui/src/components/spaces/CrossSpaceCalendar.tsx create mode 100644 ui/src/components/spaces/JoinSpace.tsx create mode 100644 ui/src/components/spaces/SpaceApps.tsx create mode 100644 ui/src/components/spaces/SpaceBrowserPanel.tsx create mode 100644 ui/src/components/spaces/SpaceCalendar.tsx create mode 100644 ui/src/components/spaces/SpaceDetail.tsx create mode 100644 ui/src/components/spaces/SpaceMembersPanel.tsx create mode 100644 ui/src/components/spaces/SpaceRail.tsx create mode 100644 ui/src/components/spaces/SpaceSettings.tsx create mode 100644 ui/src/components/spaces/SpacesPage.tsx create mode 100644 ui/src/components/spaces/app-bridge.test.ts create mode 100644 ui/src/components/spaces/app-bridge.ts create mode 100644 ui/src/components/spaces/spaceDetailKeying.test.ts delete mode 100644 ui/src/components/userfolder/BrowserSessionsPanel.tsx delete mode 100644 ui/src/components/userfolder/FileTree.tsx delete mode 100644 ui/src/components/userfolder/NewFileForm.tsx delete mode 100644 ui/src/components/userfolder/NotesPanel.tsx delete mode 100644 ui/src/components/userfolder/SaveAsScriptDialog.tsx delete mode 100644 ui/src/components/userfolder/ScriptDiffReview.tsx delete mode 100644 ui/src/components/userfolder/SubscriptionsPanel.tsx delete mode 100644 ui/src/components/userfolder/UserFolderTab.tsx create mode 100644 ui/src/content/help/00-changelog.md create mode 100644 ui/src/content/help/20-workspace-apps.md create mode 100644 ui/src/content/help/21-workspaces.md create mode 100644 ui/src/content/help/22-calendar.md delete mode 100644 ui/src/hooks/useDashboardWidgets.ts create mode 100644 ui/src/hooks/useIsMobile.ts create mode 100644 ui/src/hooks/useSpaceBranding.ts create mode 100644 ui/src/hooks/useSpaces.ts create mode 100644 ui/src/i18n/layout-workspace.test.ts create mode 100644 ui/src/lib/fileBase64.ts create mode 100644 ui/src/lib/localDate.ts create mode 100644 ui/src/lib/spaceBranding.test.ts create mode 100644 ui/src/lib/spaceBranding.ts create mode 100644 ui/src/lib/spaceColor.ts create mode 100644 ui/src/lib/spaceSort.test.ts create mode 100644 ui/src/lib/spaceSort.ts create mode 100644 ui/src/lib/spaceTasks.test.ts create mode 100644 ui/src/lib/spaceTasks.ts create mode 100644 ui/src/lib/taskFilter.test.ts create mode 100644 ui/src/lib/taskFilter.ts diff --git a/.gitignore b/.gitignore index a9b3a1d..d419636 100644 --- a/.gitignore +++ b/.gitignore @@ -17,6 +17,12 @@ logs/ .worktrees/ .claude/ .playwright-mcp/ +# Playwright E2E artifacts +test-results/ +playwright-report/ +blob-report/ +ui/test-results/ +ui/playwright-report/ # Agent skill installs (modern-web-guidance etc. via `skills add`) — local tooling, # not project source. .agents/ diff --git a/DESIGN.md b/DESIGN.md new file mode 100644 index 0000000..3364ff3 --- /dev/null +++ b/DESIGN.md @@ -0,0 +1,177 @@ +# DESIGN.md — MAESTRO + +> AI エージェントが一貫した日本語 UI を生成するためのデザイン仕様書。 +> `AGENTS.md`(作り方)の隣に置く「見た目と雰囲気」の source of truth。 +> セクションヘッダーは英語、値の説明は日本語([awesome-design-md-jp](https://github.com/kzhrknt/awesome-design-md-jp) の Stitch 拡張フォーマットに準拠)。 +> +> **この文書が視覚判断の正準**。`docs/design/README.md` は改名前・ライトモード前提の旧版で、ここで上書きする。 +> 値はすべて**ライブのコード**(`ui/tailwind.config.js` / `ui/src/index.css`)から採取。色は CSS 変数でライト/ダークを切り替える。 + +--- + +## 1. Visual Theme & Atmosphere + +- **デザイン方針**: Refero 系の「ミニマル+高密度」。装飾を削り、ハイライン(極細罫)で構造を作る。影に頼らない +- **密度**: 情報密度の高い業務 UI。本文 13px の詰まったレイアウト +- **キーワード**: 静か、無彩色、機能的、罫線主導、操作対象に語りかける(人称を出さない) +- **特徴**: ニアブラック(#18181b)を唯一のブランド差し色にしたほぼ無彩色。ライト/ダーク両対応で、ダークは pitch-black を避けやや持ち上げた zinc 調 +- **トーン**: オペレーター向け。感嘆符なし、UI クロムに絵文字を置かない(絵文字はエージェント生成コンテンツ内の限定箇所のみ) + +--- + +## 2. Color Palette & Roles + +色は CSS 変数経由。`*-slate-*` クラス(1454 箇所)がそのままライト/ダークで反転する。**ブランド色はランタイム branding(`/api/branding`)で差し替え可能** — ハードコードしない。 + +### Brand(既定。branding 未設定時のフォールバック) + +| Role | Var | 既定値 | +|---|---|---| +| Primary | `--brand-primary` | `#18181b`(ニアブラック) | +| Primary deep(hover) | `--brand-primary-deep` | `#09090b` | +| Primary soft(選択/active tint・light) | `--brand-primary-soft` | `#f4f4f5` | +| Primary soft(dark) | `--brand-primary-soft` | `#2c2c34` | +| Primary ring(focus) | `--brand-primary-ring` | `rgba(24,24,27,0.25)` | +| Primary fg(差し色上の文字) | `--brand-primary-fg` | `#ffffff` | + +> 旧版の `#2563eb`(blue-600)はモダン化で**廃止**。新規 UI で青を主役にしない。 + +**ブランド色の解決順**: `スペース個別の色(spaces.brand_color)` → `組織/全体 branding(config.yaml / data/branding)` → `既定 #18181b`。スペース(案件)が自分の色を持てる(クライアント別など)。`--brand-primary-fg`(コントラスト文字色)/ `-deep`(hover)/ `-soft`(tint)/ `-ring`(focus)は選択色から導出する。**ハードコードせず必ず `--brand-primary*` 変数を使う**。Space rail のアバター・アクティブ tint も同じ変数で色付く。 + +### Semantic surfaces + +| Role | Var | Light | Dark | +|---|---|---|---| +| Canvas(最背面) | `--canvas` | `#ffffff` | `#18181c` | +| Surface(パネル) | `--surface` | `#fafafa` | `#202024` | +| Surface-2(入れ子) | `--surface-2` | `#f4f4f5` | `#2a2a30` | +| Hairline(罫線) | `--hairline` | `#e4e4e7` | `#3a3a42` | +| Hairline-soft | `--hairline-soft` | `#f4f4f5` | `#2a2a30` | +| Ink(本文) | `--ink` | `#0f172a` | `#e7e7ea` | +| Muted(補助) | `--muted` | `#64748b` | `#a1a1aa` | + +### Neutral ramp(`--slate-50…950`) + +Light = Tailwind 既定 slate(`#f8fafc`→`#020617`)。Dark = 反転 zinc 調(`--slate-50 #18181c` → `--slate-950 #fafafa`)。`50/100` = サーフェス、`700/900` = テキスト、という意味付けで使う。 + +### Status(状態色は Tailwind 既定スケール維持) + +`statusTone()`(`ui/src/lib/utils.ts`)が一元定義。running/success=emerald、waiting/retry=amber、subtasks=indigo、failed=red、queued/cancelled=slate。pastel bg + deep fg のピル。 + +--- + +## 3. Typography Rules + +### 3.1 和文フォント +`IBM Plex Sans JP`(主)→ `Hiragino Sans`(フォールバック)。Google Fonts から読込済み。 + +### 3.2 欧文・等幅フォント +等幅は `JetBrains Mono`(主)→ `IBM Plex Mono`。識別子・ログ・バージョン・cron 式・SMALL-CAPS マイクロラベルに使う。 + +### 3.3 font-family 指定(フォールバック込み) +```css +--font-sans: 'IBM Plex Sans JP', 'Hiragino Sans', system-ui, sans-serif; +--font-mono: 'JetBrains Mono', 'IBM Plex Mono', ui-monospace, SFMono-Regular, Menlo, monospace; +``` + +### 3.4 文字サイズ・ウェイト階層 +- 本文 **13px**(`0.8125rem`)— 高密度の基準。タイトル 18px(詳細)/ 20px(ダイアログ)、チャット 14px、マイクロラベル 11px(`2xs`)/ 10px +- ウェイトは重め。700(bold) が主役(ボタン・ピル・チップ・微小ラベル)、800(extrabold) はタイトルと主 CTA、本文のみ 400/500 +- モバイル入力は `font-size: 16px !important`(iOS 自動ズーム防止) + +### 3.5 行間・字間 +- 本文 `line-height: 1.55`、見出し/詰めたい所 `1.3`、汎用 `1.5` +- **CJK 長文は 1.6–1.8 を推奨**(和文は欧文より行間を広く) +- マイクロ大文字ラベルは `letter-spacing: 0.04em`。和文本文に欧文的なベタ詰めをしない + +### 3.6 禁則処理・改行ルール +- 禁則はブラウザ既定(CJK 句読点・閉じ括弧の行頭禁則)を尊重 +- 長い識別子・URL は `overflow-wrap: anywhere` で折る。和文本文は `word-break: normal`(無理な分割をしない) +- 数字+単位は分離させない: `N 件` / `N分前`(相対時刻は和文 `たった今 / N分前 / N時間前 / N日前`) + +### 3.7 OpenType 機能 +- 和文プロポーショナル詰めが要る見出しに `font-feature-settings: "palt" 1`、カーニング `"kern" 1` +- 等幅(JetBrains Mono)は `font-feature-settings: 'cv11','ss01','ss03'`(コード可読性向けの既存設定) + +### 3.8 縦書き +非対応(業務 UI のため横書き固定)。 + +--- + +## 4. Component Stylings + +実体は `ui/src/components/**`。新規コンポーネントは下記レシピを踏襲する。 + +- **Card / Panel**: `bg-canvas`(入れ子は `bg-surface`)、`border border-hairline`、`rounded-md`(6px)、`shadow-sm`。padding `p-3`〜`p-4` +- **Primary button**: ブランド差し色塗り(`bg-accent text-accent-fg`)、hover で deep。padding `8px 16px`、`rounded-md`、700 +- **Ghost / secondary**: 透明 → hover `bg-surface-2`。罫線つきは `border-hairline` +- **Input**: `bg-canvas border-hairline rounded-md`。focus は `ring-2` + `--brand-primary-ring` +- **Tabs(TopBar)**: 下線タブ。active は下線+ ink、非 active は muted(`components/layout/TopBar.tsx`) +- **Pill / Chip / StatusBadge**: `rounded-full`、pastel bg + deep fg、700。`statusTone()` 準拠 +- **List item**: 入れ子ミニカード。active = `--brand-primary-soft` tint + 罫線昇格 +- **Chat bubble**: user = 差し色塗り `rounded-2xl rounded-br-md`、agent result = emerald 系、ASK = amber 系(`ChatMessage`) +- **Dialog**: 中央、`max-width: min(860px, 92vw)`、`max-height: 88dvh`、内部スクロール、`shadow-md`、overlay は straight alpha(blur 無し) + +### 4.1 Space & Workspace surfaces(本スペックの新面) + +- **Space rail / list**: 左に縦並び。**個人スペースを先頭固定**、案件スペースが続く。各行は list-item レシピ。active = soft tint。可視性(private/org/public)を小さなマイクロラベルで示す +- **Space detail**: 4レーン(資料 / 議事録 / 予定 / チャット)の俯瞰。タブピル or セクションで切替。土台で実体があるのは「チャット」「ファイル」。未実装レーンは**ダミーを出さず**、機能完成時に追加(個人の永続ワークスペースは土台から表示) +- **File 窓**: ツリー(`FileBrowser.tsx`)+ プレビュー/編集(`FilePreview.tsx`)。`border-hairline` で 2 ペイン分割、ヘッダは `sticky bg-surface`。HTML アプリ実行は `