kennel 0.2.1 → 0.2.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +18 -5
- package/dist/cli/dispatch.js +9 -0
- package/dist/cli/src/automations/notifications.d.ts +40 -0
- package/dist/cli/src/automations/notifications.js +220 -0
- package/dist/cli/src/cli/dispatch.d.ts +1 -0
- package/dist/cli/src/cli/dispatch.js +125 -0
- package/dist/cli/src/cli/usage.d.ts +1 -0
- package/dist/cli/src/cli/usage.js +25 -0
- package/dist/cli/src/core/api-client.d.ts +13 -0
- package/dist/cli/src/core/api-client.js +1 -0
- package/dist/cli/src/core/command.d.ts +1 -0
- package/dist/cli/src/core/command.js +69 -0
- package/dist/cli/src/core/core-folders.d.ts +1 -0
- package/dist/cli/src/core/core-folders.js +42 -0
- package/dist/cli/src/core/init.d.ts +1 -0
- package/dist/cli/src/core/init.js +141 -0
- package/dist/cli/src/core/runtime.d.ts +14 -0
- package/dist/cli/src/core/runtime.js +1 -0
- package/dist/cli/src/deploy/cloudflare.d.ts +6 -0
- package/dist/cli/src/deploy/cloudflare.js +100 -0
- package/dist/cli/src/deploy/environment.d.ts +2 -0
- package/dist/cli/src/deploy/environment.js +47 -0
- package/dist/cli/src/deploy/smoke-tests.d.ts +4 -0
- package/dist/cli/src/deploy/smoke-tests.js +92 -0
- package/dist/cli/src/deploy/trigger-dev.d.ts +2 -0
- package/dist/cli/src/deploy/trigger-dev.js +255 -0
- package/dist/cli/src/deploy/vercel.d.ts +3 -0
- package/dist/cli/src/deploy/vercel.js +67 -0
- package/dist/cli/src/main.d.ts +1 -0
- package/dist/cli/src/main.js +9 -0
- package/dist/cli/src/mcp/agent-tools.d.ts +8 -0
- package/dist/cli/src/mcp/agent-tools.js +247 -0
- package/dist/cli/src/mcp/config.d.ts +25 -0
- package/dist/cli/src/mcp/config.js +185 -0
- package/dist/cli/src/mcp/function-source.d.ts +7 -0
- package/dist/cli/src/mcp/function-source.js +42 -0
- package/dist/cli/src/mcp/generate.d.ts +1 -0
- package/dist/cli/src/mcp/generate.js +47 -0
- package/dist/cli/src/mcp/install-page.d.ts +12 -0
- package/dist/cli/src/mcp/install-page.js +5 -0
- package/dist/cli/src/notifications/email-worker.d.ts +8 -0
- package/dist/cli/src/notifications/email-worker.js +137 -0
- package/dist/cli/src/package/mcp-data.d.ts +1 -0
- package/dist/cli/src/package/mcp-data.js +1 -0
- package/dist/cli/src/package/mcp-email-worker.d.ts +1 -0
- package/dist/cli/src/package/mcp-email-worker.js +1 -0
- package/dist/cli/src/package/mcp-http.d.ts +1 -0
- package/dist/cli/src/package/mcp-http.js +1 -0
- package/dist/cli/src/package/mcp-stdio.d.ts +1 -0
- package/dist/cli/src/package/mcp-stdio.js +1 -0
- package/dist/cli/src/package/mcp.d.ts +1 -0
- package/dist/cli/src/package/mcp.js +1 -0
- package/dist/cli/src/package/preview.d.ts +9 -0
- package/dist/cli/src/package/preview.js +1 -0
- package/dist/cli/src/plugins/external.d.ts +36 -0
- package/dist/cli/src/plugins/external.js +503 -0
- package/dist/cli/src/publish/cloudflare-init.d.ts +12 -0
- package/dist/cli/src/publish/cloudflare-init.js +101 -0
- package/dist/cli/src/publish/config.d.ts +28 -0
- package/dist/cli/src/publish/config.js +178 -0
- package/dist/cli/src/publish/options.d.ts +13 -0
- package/dist/cli/src/publish/options.js +78 -0
- package/dist/cli/src/publish/vercel-init.d.ts +9 -0
- package/dist/cli/src/publish/vercel-init.js +52 -0
- package/dist/cli/src/shared/json.d.ts +4 -0
- package/dist/cli/src/shared/json.js +56 -0
- package/dist/cli/src/shared/object.d.ts +2 -0
- package/dist/cli/src/shared/object.js +3 -0
- package/dist/cli/src/shared/package-manager.d.ts +11 -0
- package/dist/cli/src/shared/package-manager.js +39 -0
- package/dist/cli/src/shared/path.d.ts +4 -0
- package/dist/cli/src/shared/path.js +40 -0
- package/dist/cli/src/shared/process.d.ts +7 -0
- package/dist/cli/src/shared/process.js +12 -0
- package/dist/cli/src/shared/project-config.d.ts +2 -0
- package/dist/cli/src/shared/project-config.js +26 -0
- package/dist/cli/src/site/dev.d.ts +10 -0
- package/dist/cli/src/site/dev.js +126 -0
- package/dist/cli/src/site/extension.d.ts +8 -0
- package/dist/cli/src/site/extension.js +113 -0
- package/dist/cli/src/site/folder-icons.d.ts +46 -0
- package/dist/cli/src/site/folder-icons.js +86 -0
- package/dist/cli/src/site/hot-viewer.d.ts +2 -0
- package/dist/cli/src/site/hot-viewer.js +231 -0
- package/dist/cli/src/site/kinds.d.ts +1 -0
- package/dist/cli/src/site/kinds.js +1 -0
- package/dist/cli/src/site/mail.d.ts +1 -0
- package/dist/cli/src/site/mail.js +10 -0
- package/dist/cli/src/site/renderers.d.ts +61 -0
- package/dist/cli/src/site/renderers.js +219 -0
- package/dist/cli/src/site/server-plugins.d.ts +54 -0
- package/dist/cli/src/site/server-plugins.js +1 -0
- package/dist/cli/src/site/viewer.d.ts +36 -0
- package/dist/cli/src/site/viewer.js +352 -0
- package/dist/cli/src/site/vitepress.d.ts +1 -0
- package/dist/cli/src/site/vitepress.js +1 -0
- package/dist/cli/usage.js +1 -0
- package/dist/core/api-client.js +75 -44
- package/dist/core/command.js +6 -3
- package/dist/core/core-folders.js +38280 -33
- package/dist/core/init.js +59 -4
- package/dist/core/runtime.js +57163 -41853
- package/dist/package/preview.js +40589 -17894
- package/dist/plugins/external.d.ts +36 -0
- package/dist/plugins/external.js +503 -0
- package/dist/site/server-plugins.js +394 -59
- package/dist/site/viewer.js +18 -5
- package/kernel/apps/web/.env.example +11 -0
- package/kernel/apps/web/components.json +20 -0
- package/kernel/apps/web/eslint.config.mjs +60 -0
- package/kernel/apps/web/index.html +17 -0
- package/kernel/apps/web/package.json +79 -0
- package/kernel/apps/web/public/favicon.svg +6 -0
- package/kernel/apps/web/public/providers/claude.svg +1 -0
- package/kernel/apps/web/public/providers/codex.svg +1 -0
- package/kernel/apps/web/public/providers/cursor.svg +1 -0
- package/kernel/apps/web/public/providers/opencode.svg +1 -0
- package/kernel/apps/web/public/providers/pi.svg +1 -0
- package/kernel/apps/web/server/acp/index.ts +1 -0
- package/kernel/apps/web/server/acp/live-agent-connection.ts +1 -0
- package/kernel/apps/web/server/acp/process-manager.ts +1 -0
- package/kernel/apps/web/server/acp/registry.ts +1 -0
- package/kernel/apps/web/server/acp/sdk.ts +1 -0
- package/kernel/apps/web/server/acp/transport.ts +1 -0
- package/kernel/apps/web/server/acp/types.ts +1 -0
- package/kernel/apps/web/server/acp-live-plugin.ts +30 -0
- package/kernel/apps/web/server/api/document-edit.ts +1 -0
- package/kernel/apps/web/server/api/open-path.ts +1 -0
- package/kernel/apps/web/server/core-plugin.ts +49 -0
- package/kernel/apps/web/server/folder-favicon.ts +1 -0
- package/kernel/apps/web/server/folder-icons.ts +1 -0
- package/kernel/apps/web/server/folder-metadata-plugin.ts +31 -0
- package/kernel/apps/web/server/plugins.ts +1 -0
- package/kernel/apps/web/server/preview-kinds.ts +1 -0
- package/kernel/apps/web/src/ai-input.tsx +62 -0
- package/kernel/apps/web/src/annotations.tsx +430 -0
- package/kernel/apps/web/src/api/client.ts +3 -0
- package/kernel/apps/web/src/api/errors.ts +1 -0
- package/kernel/apps/web/src/api/events.ts +42 -0
- package/kernel/apps/web/src/app.css +332 -0
- package/kernel/apps/web/src/app.tsx +667 -0
- package/kernel/apps/web/src/ask-draft.ts +164 -0
- package/kernel/apps/web/src/ask-tray.tsx +256 -0
- package/kernel/apps/web/src/comment-editor.tsx +93 -0
- package/kernel/apps/web/src/comment-form.tsx +162 -0
- package/kernel/apps/web/src/copy-path.ts +18 -0
- package/kernel/apps/web/src/deferred-ask-tray.tsx +20 -0
- package/kernel/apps/web/src/document-url.ts +46 -0
- package/kernel/apps/web/src/documents-url.ts +23 -0
- package/kernel/apps/web/src/dropped-folder.ts +64 -0
- package/kernel/apps/web/src/external-plugins.ts +3 -0
- package/kernel/apps/web/src/file-viewer.tsx +171 -0
- package/kernel/apps/web/src/folder-filter-icons.tsx +39 -0
- package/kernel/apps/web/src/folder-metadata.ts +76 -0
- package/kernel/apps/web/src/folder-plugin-view.tsx +87 -0
- package/kernel/apps/web/src/folder-query-cache.ts +66 -0
- package/kernel/apps/web/src/host-adapters.ts +209 -0
- package/kernel/apps/web/src/host-bridge.ts +214 -0
- package/kernel/apps/web/src/lib/entity-folder.ts +2 -0
- package/kernel/apps/web/src/linked-session-header.tsx +43 -0
- package/kernel/apps/web/src/live-session-controls.tsx +326 -0
- package/kernel/apps/web/src/local-source.ts +32 -0
- package/kernel/apps/web/src/main.tsx +24 -0
- package/kernel/apps/web/src/markdown-page.tsx +444 -0
- package/kernel/apps/web/src/notes-page.tsx +103 -0
- package/kernel/apps/web/src/plugins.ts +53 -0
- package/kernel/apps/web/src/project-search-dialog.tsx +257 -0
- package/kernel/apps/web/src/project-search.ts +18 -0
- package/kernel/apps/web/src/query-client.ts +4 -0
- package/kernel/apps/web/src/rehype-source-lines.ts +22 -0
- package/kernel/apps/web/src/routes/document.tsx +1 -0
- package/kernel/apps/web/src/routes/entities.tsx +277 -0
- package/kernel/apps/web/src/routes/search.tsx +60 -0
- package/kernel/apps/web/src/selection-context.ts +68 -0
- package/kernel/apps/web/src/selection-input.tsx +58 -0
- package/kernel/apps/web/src/selection-popup.tsx +155 -0
- package/kernel/apps/web/src/session-transcript-page.tsx +152 -0
- package/kernel/apps/web/src/use-annotations.ts +162 -0
- package/kernel/apps/web/src/use-ask-ai.ts +26 -0
- package/kernel/apps/web/src/use-ask-draft.ts +27 -0
- package/kernel/apps/web/src/use-document.ts +37 -0
- package/kernel/apps/web/src/use-folder-notes.ts +49 -0
- package/kernel/apps/web/src/use-linked-session.ts +33 -0
- package/kernel/apps/web/src/view-context.tsx +69 -0
- package/kernel/apps/web/src/view-header.tsx +66 -0
- package/kernel/apps/web/src/viewer-capabilities.ts +33 -0
- package/kernel/apps/web/src/viewer-route.ts +1 -0
- package/kernel/apps/web/src/viewport-height.ts +33 -0
- package/kernel/apps/web/tsconfig.json +24 -0
- package/kernel/apps/web/vite.config.ts +252 -0
- package/kernel/packages/agents/eslint.config.js +10 -0
- package/kernel/packages/agents/package.json +75 -0
- package/kernel/packages/agents/src/agent-card.tsx +334 -0
- package/kernel/packages/agents/src/client.tsx +13 -0
- package/kernel/packages/agents/src/index.ts +18 -0
- package/kernel/packages/agents/src/manifest.ts +7 -0
- package/kernel/packages/agents/src/node.ts +447 -0
- package/kernel/packages/agents/src/profiles.ts +137 -0
- package/kernel/packages/agents/src/resolve.ts +69 -0
- package/kernel/packages/agents/src/server.ts +60 -0
- package/kernel/packages/agents/src/types.ts +82 -0
- package/kernel/packages/agents/src/viewer.tsx +370 -0
- package/kernel/packages/agents/test/profiles.test.mjs +88 -0
- package/kernel/packages/agents/test/resolve.test.mjs +729 -0
- package/kernel/packages/agents/tsconfig.json +17 -0
- package/kernel/packages/api/README.md +73 -0
- package/kernel/packages/api/openapi.json +3368 -0
- package/kernel/packages/api/package.json +41 -0
- package/kernel/packages/api/src/client/errors.ts +1 -0
- package/kernel/packages/api/src/client/index.ts +2 -0
- package/kernel/packages/api/src/contracts/schemas.ts +277 -0
- package/kernel/packages/api/src/contracts.ts +20 -0
- package/kernel/packages/api/src/index.ts +34 -0
- package/kernel/packages/api/src/server/acp/index.ts +35 -0
- package/kernel/packages/api/src/server/acp/live-agent-connection.ts +44 -0
- package/kernel/packages/api/src/server/acp/process-manager.ts +291 -0
- package/kernel/packages/api/src/server/acp/registry.ts +140 -0
- package/kernel/packages/api/src/server/acp/sdk.ts +15 -0
- package/kernel/packages/api/src/server/acp/transport.ts +115 -0
- package/kernel/packages/api/src/server/acp/types.ts +89 -0
- package/kernel/packages/api/src/server/acp-live-plugin.ts +423 -0
- package/kernel/packages/api/src/server/api/create-agent-file.ts +46 -0
- package/kernel/packages/api/src/server/api/document-edit.ts +125 -0
- package/kernel/packages/api/src/server/api/open-path.ts +40 -0
- package/kernel/packages/api/src/server/contracts.ts +85 -0
- package/kernel/packages/api/src/server/entity-folder.ts +353 -0
- package/kernel/packages/api/src/server/folder-favicon.ts +17 -0
- package/kernel/packages/api/src/server/folder-icons.ts +113 -0
- package/kernel/packages/api/src/server/folder-metadata-plugin.ts +1758 -0
- package/kernel/packages/api/src/server/host.ts +21 -0
- package/kernel/packages/api/src/server/index.ts +197 -0
- package/kernel/packages/api/src/server/linked-folder-discovery.ts +158 -0
- package/kernel/packages/api/src/server/plugins.ts +205 -0
- package/kernel/packages/api/src/server/project-discovery.ts +69 -0
- package/kernel/packages/api/src/server/watcher.ts +46 -0
- package/kernel/packages/api/src/shared/selection.ts +16 -0
- package/kernel/packages/api/src/shared/viewer-route.ts +200 -0
- package/kernel/packages/api/test/agents-loading.test.ts +94 -0
- package/kernel/packages/api/test/core.test.ts +364 -0
- package/kernel/packages/api/test/entity-folder.test.ts +131 -0
- package/kernel/packages/api/test/linked-folder-discovery.test.ts +78 -0
- package/kernel/packages/api/test/media-endpoint.test.ts +83 -0
- package/kernel/packages/api/test/partial-loading.test.ts +43 -0
- package/kernel/packages/api/test/project-discovery.test.ts +44 -0
- package/kernel/packages/api/tsconfig.json +11 -0
- package/kernel/packages/api-client/README.md +72 -0
- package/kernel/packages/api-client/package.json +26 -0
- package/kernel/packages/api-client/scripts/generate.ts +68 -0
- package/kernel/packages/api-client/src/errors.ts +59 -0
- package/kernel/packages/api-client/src/generated.d.ts +1248 -0
- package/kernel/packages/api-client/src/index.ts +206 -0
- package/kernel/packages/api-client/src/responses.ts +19 -0
- package/kernel/packages/api-client/test/client.test.ts +143 -0
- package/kernel/packages/api-client/tsconfig.json +12 -0
- package/kernel/packages/folder-plugin/eslint.config.js +10 -0
- package/kernel/packages/folder-plugin/package.json +50 -0
- package/kernel/packages/folder-plugin/src/client.ts +73 -0
- package/kernel/packages/folder-plugin/src/endpoint.ts +273 -0
- package/kernel/packages/folder-plugin/src/index.ts +15 -0
- package/kernel/packages/folder-plugin/src/server.ts +78 -0
- package/kernel/packages/folder-plugin/src/subpath.ts +34 -0
- package/kernel/packages/folder-plugin/src/types.ts +86 -0
- package/kernel/packages/folder-plugin/src/validation.ts +56 -0
- package/kernel/packages/folder-plugin/test/contract.test.mjs +133 -0
- package/kernel/packages/folder-plugin/tsconfig.json +17 -0
- package/kernel/packages/kinds/package.json +24 -0
- package/kernel/packages/kinds/src/kinds.ts +172 -0
- package/kernel/packages/markdown/README.md +40 -0
- package/kernel/packages/markdown/explorer.css +1 -0
- package/kernel/packages/markdown/package.json +30 -0
- package/kernel/packages/markdown/src/documents.ts +1 -0
- package/kernel/packages/markdown/src/explorer.ts +1 -0
- package/kernel/packages/markdown/src/index.ts +2 -0
- package/kernel/packages/markdown/src/metadata.ts +63 -0
- package/kernel/packages/markdown/src/node.ts +1 -0
- package/kernel/packages/markdown/styles.css +1 -0
- package/kernel/packages/notes/SKILL.md +19 -0
- package/kernel/packages/notes/eslint.config.js +10 -0
- package/kernel/packages/notes/package.json +72 -0
- package/kernel/packages/notes/src/client.tsx +12 -0
- package/kernel/packages/notes/src/data/ai-input.ts +58 -0
- package/kernel/packages/notes/src/data/api.ts +40 -0
- package/kernel/packages/notes/src/data/parse.ts +15 -0
- package/kernel/packages/notes/src/data/routing.ts +33 -0
- package/kernel/packages/notes/src/data/use-folder-notes.ts +49 -0
- package/kernel/packages/notes/src/index.ts +2 -0
- package/kernel/packages/notes/src/manifest.ts +6 -0
- package/kernel/packages/notes/src/pages/notes-page.tsx +79 -0
- package/kernel/packages/notes/src/pages/single-note-page.tsx +57 -0
- package/kernel/packages/notes/src/server.ts +88 -0
- package/kernel/packages/notes/src/ui/ai-composer-controls.tsx +70 -0
- package/kernel/packages/notes/src/ui/folder-notes-list.tsx +140 -0
- package/kernel/packages/notes/tsconfig.json +16 -0
- package/kernel/packages/schemas/ICON-POLICY.md +43 -0
- package/kernel/packages/schemas/SKILL.md +185 -0
- package/kernel/packages/schemas/eslint.config.js +10 -0
- package/kernel/packages/schemas/package.json +81 -0
- package/kernel/packages/schemas/src/client.tsx +137 -0
- package/kernel/packages/schemas/src/data/config-file.ts +37 -0
- package/kernel/packages/schemas/src/data/contract.ts +174 -0
- package/kernel/packages/schemas/src/data/favicon.ts +218 -0
- package/kernel/packages/schemas/src/data/fields.ts +96 -0
- package/kernel/packages/schemas/src/data/icon-image.ts +53 -0
- package/kernel/packages/schemas/src/data/icon.ts +97 -0
- package/kernel/packages/schemas/src/data/load.ts +161 -0
- package/kernel/packages/schemas/src/data/params.ts +103 -0
- package/kernel/packages/schemas/src/data/query.ts +33 -0
- package/kernel/packages/schemas/src/data/sort.ts +50 -0
- package/kernel/packages/schemas/src/data/workspace.ts +101 -0
- package/kernel/packages/schemas/src/index.ts +22 -0
- package/kernel/packages/schemas/src/manifest.ts +4 -0
- package/kernel/packages/schemas/src/node.ts +384 -0
- package/kernel/packages/schemas/src/pages/collection.tsx +252 -0
- package/kernel/packages/schemas/src/server.ts +208 -0
- package/kernel/packages/schemas/src/ui/schema-entity-list.tsx +124 -0
- package/kernel/packages/schemas/src/ui/schema-filters.tsx +186 -0
- package/kernel/packages/schemas/src/ui/schema-search.tsx +35 -0
- package/kernel/packages/schemas/src/ui/use-query-param-filter-setting.tsx +15 -0
- package/kernel/packages/schemas/test/contract.test.mjs +26 -0
- package/kernel/packages/schemas/test/fields.test.mjs +187 -0
- package/kernel/packages/schemas/test/load.test.mjs +12 -0
- package/kernel/packages/schemas/test/node.test.mjs +412 -0
- package/kernel/packages/schemas/test/query.test.mjs +134 -0
- package/kernel/packages/schemas/test/workspace.test.mjs +86 -0
- package/kernel/packages/schemas/tsconfig.json +17 -0
- package/kernel/packages/session-finding/package.json +33 -0
- package/kernel/packages/session-finding/src/index.ts +120 -0
- package/kernel/packages/session-finding/test/list-sessions.test.mjs +139 -0
- package/kernel/packages/session-finding/tsconfig.json +12 -0
- package/kernel/packages/ui/LICENSE +21 -0
- package/kernel/packages/ui/components.json +20 -0
- package/kernel/packages/ui/eslint.config.js +8 -0
- package/kernel/packages/ui/package.json +106 -0
- package/kernel/packages/ui/src/chat/file-link.ts +178 -0
- package/kernel/packages/ui/src/chat/index.ts +18 -0
- package/kernel/packages/ui/src/chat/transcript.tsx +348 -0
- package/kernel/packages/ui/src/chat/turns.ts +76 -0
- package/kernel/packages/ui/src/chat/types.ts +23 -0
- package/kernel/packages/ui/src/chat/use-overflowing.ts +56 -0
- package/kernel/packages/ui/src/components/accordion.tsx +74 -0
- package/kernel/packages/ui/src/components/alert-dialog.tsx +164 -0
- package/kernel/packages/ui/src/components/alert.tsx +68 -0
- package/kernel/packages/ui/src/components/app-breadcrumbs.tsx +170 -0
- package/kernel/packages/ui/src/components/app-header.tsx +125 -0
- package/kernel/packages/ui/src/components/app-options.tsx +87 -0
- package/kernel/packages/ui/src/components/app-view-header.tsx +34 -0
- package/kernel/packages/ui/src/components/aspect-ratio.tsx +11 -0
- package/kernel/packages/ui/src/components/avatar.tsx +53 -0
- package/kernel/packages/ui/src/components/badge.tsx +47 -0
- package/kernel/packages/ui/src/components/base-dialog.tsx +3 -0
- package/kernel/packages/ui/src/components/base-tabs.tsx +63 -0
- package/kernel/packages/ui/src/components/breadcrumb.tsx +110 -0
- package/kernel/packages/ui/src/components/button-group.tsx +86 -0
- package/kernel/packages/ui/src/components/button.tsx +65 -0
- package/kernel/packages/ui/src/components/calendar.tsx +240 -0
- package/kernel/packages/ui/src/components/card.tsx +95 -0
- package/kernel/packages/ui/src/components/carousel.tsx +240 -0
- package/kernel/packages/ui/src/components/chart.tsx +375 -0
- package/kernel/packages/ui/src/components/checkbox.tsx +39 -0
- package/kernel/packages/ui/src/components/collapsible.tsx +33 -0
- package/kernel/packages/ui/src/components/collection-icon.tsx +28 -0
- package/kernel/packages/ui/src/components/command.tsx +205 -0
- package/kernel/packages/ui/src/components/content-issues.tsx +63 -0
- package/kernel/packages/ui/src/components/context-menu.tsx +298 -0
- package/kernel/packages/ui/src/components/copy-context.tsx +134 -0
- package/kernel/packages/ui/src/components/dialog.tsx +157 -0
- package/kernel/packages/ui/src/components/drawer.tsx +162 -0
- package/kernel/packages/ui/src/components/dropdown-menu.tsx +303 -0
- package/kernel/packages/ui/src/components/empty.tsx +108 -0
- package/kernel/packages/ui/src/components/field.tsx +260 -0
- package/kernel/packages/ui/src/components/file-preview.tsx +152 -0
- package/kernel/packages/ui/src/components/file-renderer.tsx +466 -0
- package/kernel/packages/ui/src/components/filter-chip-panel.tsx +157 -0
- package/kernel/packages/ui/src/components/filter-select.tsx +127 -0
- package/kernel/packages/ui/src/components/folder-activity.tsx +646 -0
- package/kernel/packages/ui/src/components/folder-file-list.tsx +58 -0
- package/kernel/packages/ui/src/components/folder-filter-bar.tsx +191 -0
- package/kernel/packages/ui/src/components/folder-image.tsx +18 -0
- package/kernel/packages/ui/src/components/folder-landing.tsx +70 -0
- package/kernel/packages/ui/src/components/folder-list.tsx +140 -0
- package/kernel/packages/ui/src/components/folder-metadata.tsx +107 -0
- package/kernel/packages/ui/src/components/folder-mobile-bar.tsx +60 -0
- package/kernel/packages/ui/src/components/folder-project-list.tsx +133 -0
- package/kernel/packages/ui/src/components/folder-session-list.tsx +113 -0
- package/kernel/packages/ui/src/components/folder-session-page.tsx +126 -0
- package/kernel/packages/ui/src/components/folder-sidebar.tsx +52 -0
- package/kernel/packages/ui/src/components/folder-skill-list.tsx +62 -0
- package/kernel/packages/ui/src/components/folder-tabs.tsx +156 -0
- package/kernel/packages/ui/src/components/form.tsx +167 -0
- package/kernel/packages/ui/src/components/hover-card.tsx +52 -0
- package/kernel/packages/ui/src/components/icons.tsx +34 -0
- package/kernel/packages/ui/src/components/input-group.tsx +184 -0
- package/kernel/packages/ui/src/components/input-otp.tsx +90 -0
- package/kernel/packages/ui/src/components/input.tsx +29 -0
- package/kernel/packages/ui/src/components/item.tsx +195 -0
- package/kernel/packages/ui/src/components/kbd.tsx +32 -0
- package/kernel/packages/ui/src/components/label.tsx +27 -0
- package/kernel/packages/ui/src/components/link.tsx +45 -0
- package/kernel/packages/ui/src/components/live-tool-call.tsx +193 -0
- package/kernel/packages/ui/src/components/menubar.tsx +323 -0
- package/kernel/packages/ui/src/components/navigation-menu.tsx +210 -0
- package/kernel/packages/ui/src/components/note-card.tsx +149 -0
- package/kernel/packages/ui/src/components/pagination.tsx +128 -0
- package/kernel/packages/ui/src/components/popover.tsx +56 -0
- package/kernel/packages/ui/src/components/progress.tsx +31 -0
- package/kernel/packages/ui/src/components/radio-group.tsx +54 -0
- package/kernel/packages/ui/src/components/scroll-area.tsx +61 -0
- package/kernel/packages/ui/src/components/select.tsx +219 -0
- package/kernel/packages/ui/src/components/separator.tsx +30 -0
- package/kernel/packages/ui/src/components/session-icon.tsx +124 -0
- package/kernel/packages/ui/src/components/sheet.tsx +157 -0
- package/kernel/packages/ui/src/components/sidebar.tsx +789 -0
- package/kernel/packages/ui/src/components/skeleton.tsx +13 -0
- package/kernel/packages/ui/src/components/slider.tsx +73 -0
- package/kernel/packages/ui/src/components/sonner.tsx +41 -0
- package/kernel/packages/ui/src/components/spinner.tsx +16 -0
- package/kernel/packages/ui/src/components/switch.tsx +40 -0
- package/kernel/packages/ui/src/components/table.tsx +120 -0
- package/kernel/packages/ui/src/components/tabs.tsx +78 -0
- package/kernel/packages/ui/src/components/textarea.tsx +25 -0
- package/kernel/packages/ui/src/components/toggle-group.tsx +87 -0
- package/kernel/packages/ui/src/components/toggle.tsx +48 -0
- package/kernel/packages/ui/src/components/tooltip.tsx +71 -0
- package/kernel/packages/ui/src/components/viewer-options.tsx +166 -0
- package/kernel/packages/ui/src/hooks/use-folder-filter.ts +103 -0
- package/kernel/packages/ui/src/hooks/use-mobile.ts +19 -0
- package/kernel/packages/ui/src/index.ts +13 -0
- package/kernel/packages/ui/src/lib/document-extensions.ts +83 -0
- package/kernel/packages/ui/src/lib/folder-activity.ts +143 -0
- package/kernel/packages/ui/src/lib/folder-filter.ts +284 -0
- package/kernel/packages/ui/src/lib/live-tool-call.tsx +109 -0
- package/kernel/packages/ui/src/lib/media-urls.ts +176 -0
- package/kernel/packages/ui/src/lib/obsidian-links.ts +120 -0
- package/kernel/packages/ui/src/lib/source-components.tsx +65 -0
- package/kernel/packages/ui/src/lib/utils.tsx +7 -0
- package/kernel/packages/ui/src/pages/entity-detail-page.tsx +82 -0
- package/kernel/packages/ui/src/pages/entity-list-page.tsx +50 -0
- package/kernel/packages/ui/src/pages/entity-page.tsx +69 -0
- package/kernel/packages/ui/src/styles/folder-activity.css +2151 -0
- package/kernel/packages/ui/test/copy-context.test.mjs +48 -0
- package/kernel/packages/ui/test/folder-filter.test.mjs +484 -0
- package/kernel/packages/ui/tsconfig.json +15 -0
- package/kernel/plugins/calendar/SKILL.md +173 -0
- package/kernel/plugins/calendar/eslint.config.js +10 -0
- package/kernel/plugins/calendar/package.json +73 -0
- package/kernel/plugins/calendar/schema.json +137 -0
- package/kernel/plugins/calendar/src/calendar.tsx +328 -0
- package/kernel/plugins/calendar/src/client.tsx +139 -0
- package/kernel/plugins/calendar/src/context.ts +48 -0
- package/kernel/plugins/calendar/src/copy-button.tsx +66 -0
- package/kernel/plugins/calendar/src/event-dialog.tsx +270 -0
- package/kernel/plugins/calendar/src/index.ts +4 -0
- package/kernel/plugins/calendar/src/manifest.ts +7 -0
- package/kernel/plugins/calendar/src/parse.ts +610 -0
- package/kernel/plugins/calendar/src/server.ts +160 -0
- package/kernel/plugins/calendar/src/utils.ts +80 -0
- package/kernel/plugins/calendar/src/views.tsx +418 -0
- package/kernel/plugins/calendar/test/context.test.mjs +60 -0
- package/kernel/plugins/calendar/test/package.test.mjs +43 -0
- package/kernel/plugins/calendar/test/parse.test.mjs +392 -0
- package/kernel/plugins/calendar/test/server.test.mjs +126 -0
- package/kernel/plugins/calendar/tsconfig.json +17 -0
- package/kernel/plugins/mail/SKILL.md +97 -0
- package/kernel/plugins/mail/eslint.config.js +10 -0
- package/kernel/plugins/mail/package.json +79 -0
- package/kernel/plugins/mail/src/api.ts +359 -0
- package/kernel/plugins/mail/src/bun-ffi.d.ts +14 -0
- package/kernel/plugins/mail/src/client.tsx +14 -0
- package/kernel/plugins/mail/src/flock.ts +137 -0
- package/kernel/plugins/mail/src/folders.ts +37 -0
- package/kernel/plugins/mail/src/history.ts +485 -0
- package/kernel/plugins/mail/src/index.ts +3 -0
- package/kernel/plugins/mail/src/mail-card.tsx +123 -0
- package/kernel/plugins/mail/src/mail-conversation.tsx +153 -0
- package/kernel/plugins/mail/src/mail-detail-page.tsx +467 -0
- package/kernel/plugins/mail/src/mail-hooks.ts +252 -0
- package/kernel/plugins/mail/src/mail-page.tsx +109 -0
- package/kernel/plugins/mail/src/mail-request.ts +78 -0
- package/kernel/plugins/mail/src/mail-send-box.tsx +175 -0
- package/kernel/plugins/mail/src/mailos.ts +723 -0
- package/kernel/plugins/mail/src/manifest.ts +7 -0
- package/kernel/plugins/mail/src/node.ts +171 -0
- package/kernel/plugins/mail/src/parse.ts +139 -0
- package/kernel/plugins/mail/src/server.ts +125 -0
- package/kernel/plugins/mail/src/types.ts +10 -0
- package/kernel/plugins/mail/src/viewer.tsx +147 -0
- package/kernel/plugins/mail/test/flock.test.mjs +156 -0
- package/kernel/plugins/mail/test/folders.test.mjs +138 -0
- package/kernel/plugins/mail/test/history.test.mjs +460 -0
- package/kernel/plugins/mail/test/mailos.test.mjs +752 -0
- package/kernel/plugins/mail/test/node.test.mjs +207 -0
- package/kernel/plugins/mail/test/package.test.mjs +54 -0
- package/kernel/plugins/mail/test/parse.test.mjs +32 -0
- package/kernel/plugins/mail/test/server.test.mjs +116 -0
- package/kernel/plugins/mail/test/viewer.test.mjs +192 -0
- package/kernel/plugins/mail/tsconfig.json +17 -0
- package/kernel/plugins/projects/SKILL.md +73 -0
- package/kernel/plugins/projects/eslint.config.js +10 -0
- package/kernel/plugins/projects/package.json +70 -0
- package/kernel/plugins/projects/src/client.tsx +17 -0
- package/kernel/plugins/projects/src/data/model.ts +129 -0
- package/kernel/plugins/projects/src/index.ts +17 -0
- package/kernel/plugins/projects/src/manifest.ts +7 -0
- package/kernel/plugins/projects/src/project-context.ts +41 -0
- package/kernel/plugins/projects/src/server.ts +276 -0
- package/kernel/plugins/projects/src/ui/project-card.tsx +61 -0
- package/kernel/plugins/projects/src/ui/projects-page.tsx +102 -0
- package/kernel/plugins/projects/test/package.test.mjs +51 -0
- package/kernel/plugins/projects/tsconfig.json +17 -0
- package/kernel/plugins/tasks/SKILL.md +341 -0
- package/kernel/plugins/tasks/eslint.config.js +10 -0
- package/kernel/plugins/tasks/package.json +74 -0
- package/kernel/plugins/tasks/schema.json +939 -0
- package/kernel/plugins/tasks/src/api.ts +212 -0
- package/kernel/plugins/tasks/src/client.tsx +23 -0
- package/kernel/plugins/tasks/src/data/parse.ts +544 -0
- package/kernel/plugins/tasks/src/data/task-id.ts +56 -0
- package/kernel/plugins/tasks/src/data/todo-model.ts +795 -0
- package/kernel/plugins/tasks/src/index.ts +34 -0
- package/kernel/plugins/tasks/src/manifest.ts +7 -0
- package/kernel/plugins/tasks/src/pages/task-detail.tsx +48 -0
- package/kernel/plugins/tasks/src/pages/task-list.tsx +88 -0
- package/kernel/plugins/tasks/src/server.ts +447 -0
- package/kernel/plugins/tasks/src/styles.css +9 -0
- package/kernel/plugins/tasks/src/ui/compact-todo-list.tsx +372 -0
- package/kernel/plugins/tasks/src/ui/error-details.tsx +78 -0
- package/kernel/plugins/tasks/src/ui/task-page.tsx +392 -0
- package/kernel/plugins/tasks/src/ui/todo-agent-filter.tsx +36 -0
- package/kernel/plugins/tasks/src/ui/todo-filter-bar.tsx +66 -0
- package/kernel/plugins/tasks/src/ui/todo-item.tsx +494 -0
- package/kernel/plugins/tasks/src/ui/todo-status-filter.tsx +60 -0
- package/kernel/plugins/tasks/src/ui/todo-tag-filter.tsx +48 -0
- package/kernel/plugins/tasks/src/ui/todo-warnings.tsx +106 -0
- package/kernel/plugins/tasks/test/api.test.mjs +99 -0
- package/kernel/plugins/tasks/test/folder-sources.test.mjs +46 -0
- package/kernel/plugins/tasks/test/package.test.mjs +54 -0
- package/kernel/plugins/tasks/test/parse.test.mjs +225 -0
- package/kernel/plugins/tasks/test/server.test.mjs +386 -0
- package/kernel/plugins/tasks/tsconfig.json +17 -0
- package/node_modules/@agentclientprotocol/sdk/LICENSE +191 -0
- package/node_modules/@agentclientprotocol/sdk/README.md +70 -0
- package/node_modules/@agentclientprotocol/sdk/dist/acp.d.ts +1835 -0
- package/node_modules/@agentclientprotocol/sdk/dist/acp.js +1885 -0
- package/node_modules/@agentclientprotocol/sdk/dist/acp.js.map +1 -0
- package/node_modules/@agentclientprotocol/sdk/dist/acp.test.d.ts +1 -0
- package/node_modules/@agentclientprotocol/sdk/dist/acp.test.js +5036 -0
- package/node_modules/@agentclientprotocol/sdk/dist/acp.test.js.map +1 -0
- package/node_modules/@agentclientprotocol/sdk/dist/connection.d.ts +82 -0
- package/node_modules/@agentclientprotocol/sdk/dist/connection.js +428 -0
- package/node_modules/@agentclientprotocol/sdk/dist/connection.js.map +1 -0
- package/node_modules/@agentclientprotocol/sdk/dist/connection.test.d.ts +1 -0
- package/node_modules/@agentclientprotocol/sdk/dist/connection.test.js +470 -0
- package/node_modules/@agentclientprotocol/sdk/dist/connection.test.js.map +1 -0
- package/node_modules/@agentclientprotocol/sdk/dist/cookie-store.d.ts +26 -0
- package/node_modules/@agentclientprotocol/sdk/dist/cookie-store.js +96 -0
- package/node_modules/@agentclientprotocol/sdk/dist/cookie-store.js.map +1 -0
- package/node_modules/@agentclientprotocol/sdk/dist/cookie-store.test.d.ts +1 -0
- package/node_modules/@agentclientprotocol/sdk/dist/cookie-store.test.js +77 -0
- package/node_modules/@agentclientprotocol/sdk/dist/cookie-store.test.js.map +1 -0
- package/node_modules/@agentclientprotocol/sdk/dist/examples/agent.d.ts +2 -0
- package/node_modules/@agentclientprotocol/sdk/dist/examples/agent.js +232 -0
- package/node_modules/@agentclientprotocol/sdk/dist/examples/agent.js.map +1 -0
- package/node_modules/@agentclientprotocol/sdk/dist/examples/client.d.ts +2 -0
- package/node_modules/@agentclientprotocol/sdk/dist/examples/client.js +132 -0
- package/node_modules/@agentclientprotocol/sdk/dist/examples/client.js.map +1 -0
- package/node_modules/@agentclientprotocol/sdk/dist/examples/dual-version-agent.d.ts +9 -0
- package/node_modules/@agentclientprotocol/sdk/dist/examples/dual-version-agent.js +221 -0
- package/node_modules/@agentclientprotocol/sdk/dist/examples/dual-version-agent.js.map +1 -0
- package/node_modules/@agentclientprotocol/sdk/dist/examples/http-client.d.ts +2 -0
- package/node_modules/@agentclientprotocol/sdk/dist/examples/http-client.js +86 -0
- package/node_modules/@agentclientprotocol/sdk/dist/examples/http-client.js.map +1 -0
- package/node_modules/@agentclientprotocol/sdk/dist/examples/http-server.d.ts +2 -0
- package/node_modules/@agentclientprotocol/sdk/dist/examples/http-server.js +112 -0
- package/node_modules/@agentclientprotocol/sdk/dist/examples/http-server.js.map +1 -0
- package/node_modules/@agentclientprotocol/sdk/dist/examples/ws-client.d.ts +2 -0
- package/node_modules/@agentclientprotocol/sdk/dist/examples/ws-client.js +88 -0
- package/node_modules/@agentclientprotocol/sdk/dist/examples/ws-client.js.map +1 -0
- package/node_modules/@agentclientprotocol/sdk/dist/http-stream.d.ts +33 -0
- package/node_modules/@agentclientprotocol/sdk/dist/http-stream.js +435 -0
- package/node_modules/@agentclientprotocol/sdk/dist/http-stream.js.map +1 -0
- package/node_modules/@agentclientprotocol/sdk/dist/http-stream.test.d.ts +1 -0
- package/node_modules/@agentclientprotocol/sdk/dist/http-stream.test.js +1380 -0
- package/node_modules/@agentclientprotocol/sdk/dist/http-stream.test.js.map +1 -0
- package/node_modules/@agentclientprotocol/sdk/dist/jsonrpc.d.ts +603 -0
- package/node_modules/@agentclientprotocol/sdk/dist/jsonrpc.js +1064 -0
- package/node_modules/@agentclientprotocol/sdk/dist/jsonrpc.js.map +1 -0
- package/node_modules/@agentclientprotocol/sdk/dist/jsonrpc.test.d.ts +1 -0
- package/node_modules/@agentclientprotocol/sdk/dist/jsonrpc.test.js +851 -0
- package/node_modules/@agentclientprotocol/sdk/dist/jsonrpc.test.js.map +1 -0
- package/node_modules/@agentclientprotocol/sdk/dist/line-buffer.d.ts +22 -0
- package/node_modules/@agentclientprotocol/sdk/dist/line-buffer.js +64 -0
- package/node_modules/@agentclientprotocol/sdk/dist/line-buffer.js.map +1 -0
- package/node_modules/@agentclientprotocol/sdk/dist/line-buffer.test.d.ts +1 -0
- package/node_modules/@agentclientprotocol/sdk/dist/line-buffer.test.js +45 -0
- package/node_modules/@agentclientprotocol/sdk/dist/line-buffer.test.js.map +1 -0
- package/node_modules/@agentclientprotocol/sdk/dist/node-adapter.d.ts +17 -0
- package/node_modules/@agentclientprotocol/sdk/dist/node-adapter.js +426 -0
- package/node_modules/@agentclientprotocol/sdk/dist/node-adapter.js.map +1 -0
- package/node_modules/@agentclientprotocol/sdk/dist/node-adapter.test.d.ts +1 -0
- package/node_modules/@agentclientprotocol/sdk/dist/node-adapter.test.js +499 -0
- package/node_modules/@agentclientprotocol/sdk/dist/node-adapter.test.js.map +1 -0
- package/node_modules/@agentclientprotocol/sdk/dist/protocol-router.d.ts +37 -0
- package/node_modules/@agentclientprotocol/sdk/dist/protocol-router.js +474 -0
- package/node_modules/@agentclientprotocol/sdk/dist/protocol-router.js.map +1 -0
- package/node_modules/@agentclientprotocol/sdk/dist/protocol-router.test.d.ts +1 -0
- package/node_modules/@agentclientprotocol/sdk/dist/protocol-router.test.js +535 -0
- package/node_modules/@agentclientprotocol/sdk/dist/protocol-router.test.js.map +1 -0
- package/node_modules/@agentclientprotocol/sdk/dist/protocol.d.ts +11 -0
- package/node_modules/@agentclientprotocol/sdk/dist/protocol.js +57 -0
- package/node_modules/@agentclientprotocol/sdk/dist/protocol.js.map +1 -0
- package/node_modules/@agentclientprotocol/sdk/dist/protocol.test.d.ts +1 -0
- package/node_modules/@agentclientprotocol/sdk/dist/protocol.test.js +73 -0
- package/node_modules/@agentclientprotocol/sdk/dist/protocol.test.js.map +1 -0
- package/node_modules/@agentclientprotocol/sdk/dist/schema/guards.gen.d.ts +199 -0
- package/node_modules/@agentclientprotocol/sdk/dist/schema/guards.gen.js +211 -0
- package/node_modules/@agentclientprotocol/sdk/dist/schema/guards.gen.js.map +1 -0
- package/node_modules/@agentclientprotocol/sdk/dist/schema/index.d.ts +51 -0
- package/node_modules/@agentclientprotocol/sdk/dist/schema/index.js +52 -0
- package/node_modules/@agentclientprotocol/sdk/dist/schema/index.js.map +1 -0
- package/node_modules/@agentclientprotocol/sdk/dist/schema/types.gen.d.ts +6118 -0
- package/node_modules/@agentclientprotocol/sdk/dist/schema/types.gen.js +3 -0
- package/node_modules/@agentclientprotocol/sdk/dist/schema/types.gen.js.map +1 -0
- package/node_modules/@agentclientprotocol/sdk/dist/schema/zod.gen.d.ts +14160 -0
- package/node_modules/@agentclientprotocol/sdk/dist/schema/zod.gen.js +3066 -0
- package/node_modules/@agentclientprotocol/sdk/dist/schema/zod.gen.js.map +1 -0
- package/node_modules/@agentclientprotocol/sdk/dist/schema-deserialize.d.ts +30 -0
- package/node_modules/@agentclientprotocol/sdk/dist/schema-deserialize.js +98 -0
- package/node_modules/@agentclientprotocol/sdk/dist/schema-deserialize.js.map +1 -0
- package/node_modules/@agentclientprotocol/sdk/dist/schema-deserialize.test.d.ts +1 -0
- package/node_modules/@agentclientprotocol/sdk/dist/schema-deserialize.test.js +93 -0
- package/node_modules/@agentclientprotocol/sdk/dist/schema-deserialize.test.js.map +1 -0
- package/node_modules/@agentclientprotocol/sdk/dist/server-permission.test.d.ts +1 -0
- package/node_modules/@agentclientprotocol/sdk/dist/server-permission.test.js +261 -0
- package/node_modules/@agentclientprotocol/sdk/dist/server-permission.test.js.map +1 -0
- package/node_modules/@agentclientprotocol/sdk/dist/server-session-sse.test.d.ts +1 -0
- package/node_modules/@agentclientprotocol/sdk/dist/server-session-sse.test.js +490 -0
- package/node_modules/@agentclientprotocol/sdk/dist/server-session-sse.test.js.map +1 -0
- package/node_modules/@agentclientprotocol/sdk/dist/server-sse.d.ts +2 -0
- package/node_modules/@agentclientprotocol/sdk/dist/server-sse.js +104 -0
- package/node_modules/@agentclientprotocol/sdk/dist/server-sse.js.map +1 -0
- package/node_modules/@agentclientprotocol/sdk/dist/server-sse.test.d.ts +1 -0
- package/node_modules/@agentclientprotocol/sdk/dist/server-sse.test.js +52 -0
- package/node_modules/@agentclientprotocol/sdk/dist/server-sse.test.js.map +1 -0
- package/node_modules/@agentclientprotocol/sdk/dist/server-websocket-upgrade.test.d.ts +1 -0
- package/node_modules/@agentclientprotocol/sdk/dist/server-websocket-upgrade.test.js +946 -0
- package/node_modules/@agentclientprotocol/sdk/dist/server-websocket-upgrade.test.js.map +1 -0
- package/node_modules/@agentclientprotocol/sdk/dist/server.d.ts +81 -0
- package/node_modules/@agentclientprotocol/sdk/dist/server.js +380 -0
- package/node_modules/@agentclientprotocol/sdk/dist/server.js.map +1 -0
- package/node_modules/@agentclientprotocol/sdk/dist/server.test.d.ts +1 -0
- package/node_modules/@agentclientprotocol/sdk/dist/server.test.js +1082 -0
- package/node_modules/@agentclientprotocol/sdk/dist/server.test.js.map +1 -0
- package/node_modules/@agentclientprotocol/sdk/dist/sse.d.ts +4 -0
- package/node_modules/@agentclientprotocol/sdk/dist/sse.js +91 -0
- package/node_modules/@agentclientprotocol/sdk/dist/sse.js.map +1 -0
- package/node_modules/@agentclientprotocol/sdk/dist/sse.test.d.ts +1 -0
- package/node_modules/@agentclientprotocol/sdk/dist/sse.test.js +126 -0
- package/node_modules/@agentclientprotocol/sdk/dist/sse.test.js.map +1 -0
- package/node_modules/@agentclientprotocol/sdk/dist/stream.d.ts +35 -0
- package/node_modules/@agentclientprotocol/sdk/dist/stream.js +106 -0
- package/node_modules/@agentclientprotocol/sdk/dist/stream.js.map +1 -0
- package/node_modules/@agentclientprotocol/sdk/dist/stream.test.d.ts +1 -0
- package/node_modules/@agentclientprotocol/sdk/dist/stream.test.js +206 -0
- package/node_modules/@agentclientprotocol/sdk/dist/stream.test.js.map +1 -0
- package/node_modules/@agentclientprotocol/sdk/dist/test-support/streams.d.ts +8 -0
- package/node_modules/@agentclientprotocol/sdk/dist/test-support/streams.js +51 -0
- package/node_modules/@agentclientprotocol/sdk/dist/test-support/streams.js.map +1 -0
- package/node_modules/@agentclientprotocol/sdk/dist/test-support/test-agent.d.ts +24 -0
- package/node_modules/@agentclientprotocol/sdk/dist/test-support/test-agent.js +163 -0
- package/node_modules/@agentclientprotocol/sdk/dist/test-support/test-agent.js.map +1 -0
- package/node_modules/@agentclientprotocol/sdk/dist/test-support/test-http-server.d.ts +9 -0
- package/node_modules/@agentclientprotocol/sdk/dist/test-support/test-http-server.js +74 -0
- package/node_modules/@agentclientprotocol/sdk/dist/test-support/test-http-server.js.map +1 -0
- package/node_modules/@agentclientprotocol/sdk/dist/v2/acp.d.ts +806 -0
- package/node_modules/@agentclientprotocol/sdk/dist/v2/acp.js +1183 -0
- package/node_modules/@agentclientprotocol/sdk/dist/v2/acp.js.map +1 -0
- package/node_modules/@agentclientprotocol/sdk/dist/v2/acp.test.d.ts +1 -0
- package/node_modules/@agentclientprotocol/sdk/dist/v2/acp.test.js +512 -0
- package/node_modules/@agentclientprotocol/sdk/dist/v2/acp.test.js.map +1 -0
- package/node_modules/@agentclientprotocol/sdk/dist/v2/schema/guards.gen.d.ts +954 -0
- package/node_modules/@agentclientprotocol/sdk/dist/v2/schema/guards.gen.js +1035 -0
- package/node_modules/@agentclientprotocol/sdk/dist/v2/schema/guards.gen.js.map +1 -0
- package/node_modules/@agentclientprotocol/sdk/dist/v2/schema/index.d.ts +42 -0
- package/node_modules/@agentclientprotocol/sdk/dist/v2/schema/index.js +43 -0
- package/node_modules/@agentclientprotocol/sdk/dist/v2/schema/index.js.map +1 -0
- package/node_modules/@agentclientprotocol/sdk/dist/v2/schema/types.gen.d.ts +6146 -0
- package/node_modules/@agentclientprotocol/sdk/dist/v2/schema/types.gen.js +3 -0
- package/node_modules/@agentclientprotocol/sdk/dist/v2/schema/types.gen.js.map +1 -0
- package/node_modules/@agentclientprotocol/sdk/dist/v2/schema/zod.gen.d.ts +30552 -0
- package/node_modules/@agentclientprotocol/sdk/dist/v2/schema/zod.gen.js +3204 -0
- package/node_modules/@agentclientprotocol/sdk/dist/v2/schema/zod.gen.js.map +1 -0
- package/node_modules/@agentclientprotocol/sdk/dist/ws-server.d.ts +14 -0
- package/node_modules/@agentclientprotocol/sdk/dist/ws-server.js +358 -0
- package/node_modules/@agentclientprotocol/sdk/dist/ws-server.js.map +1 -0
- package/node_modules/@agentclientprotocol/sdk/dist/ws-stream.d.ts +54 -0
- package/node_modules/@agentclientprotocol/sdk/dist/ws-stream.js +246 -0
- package/node_modules/@agentclientprotocol/sdk/dist/ws-stream.js.map +1 -0
- package/node_modules/@agentclientprotocol/sdk/dist/ws-stream.test.d.ts +1 -0
- package/node_modules/@agentclientprotocol/sdk/dist/ws-stream.test.js +833 -0
- package/node_modules/@agentclientprotocol/sdk/dist/ws-stream.test.js.map +1 -0
- package/node_modules/@agentclientprotocol/sdk/dist/ws-utils.d.ts +13 -0
- package/node_modules/@agentclientprotocol/sdk/dist/ws-utils.js +78 -0
- package/node_modules/@agentclientprotocol/sdk/dist/ws-utils.js.map +1 -0
- package/node_modules/@agentclientprotocol/sdk/dist/ws-utils.test.d.ts +1 -0
- package/node_modules/@agentclientprotocol/sdk/dist/ws-utils.test.js +42 -0
- package/node_modules/@agentclientprotocol/sdk/dist/ws-utils.test.js.map +1 -0
- package/node_modules/@agentclientprotocol/sdk/package.json +105 -0
- package/node_modules/@agentclientprotocol/sdk/schema/schema.json +8819 -0
- package/node_modules/@agentclientprotocol/sdk/schema/v2/schema.unstable.json +10098 -0
- package/package.json +52 -6
- package/web/assets/{abnfDiagram-VRR7QNED-Nfq-O04D.js → abnfDiagram-VRR7QNED-Bgfb1nEB.js} +1 -1
- package/web/assets/app-DoGr2Zi7.js +2 -0
- package/web/assets/app-options-D-RJiQ-X.js +25 -0
- package/web/assets/app-view-header-BLvLq02T.js +1 -0
- package/web/assets/arc-Dk_KI36B.js +1 -0
- package/web/assets/{architectureDiagram-ZJ3FMSHR-qhRwPNcQ.js → architectureDiagram-ZJ3FMSHR-NR_KhRCf.js} +1 -1
- package/web/assets/ask-tray-TzeTcO6-.js +14 -0
- package/web/assets/{blockDiagram-677ZJIJ3-C56P3bGu.js → blockDiagram-677ZJIJ3-CkLkwx9C.js} +1 -1
- package/web/assets/button-C6arH7zt.js +1 -0
- package/web/assets/{c4Diagram-LMCZKHZV-Ey1M72zD.js → c4Diagram-LMCZKHZV-CFCUH8e_.js} +1 -1
- package/web/assets/channel-uMEjV8qc.js +1 -0
- package/web/assets/{chunk-2Q5K7J3B-a6isk9VU.js → chunk-2Q5K7J3B-B_BPLWsW.js} +1 -1
- package/web/assets/{chunk-32BRIVSS-uy4kdSLL.js → chunk-32BRIVSS-B1VB1hOy.js} +1 -1
- package/web/assets/{chunk-5VM5RSS4-oj2sBFd7.js → chunk-5VM5RSS4-KFcYr8Co.js} +1 -1
- package/web/assets/{chunk-EX3LRPZG-Bzl1ukAi.js → chunk-EX3LRPZG-CpBX3kuK.js} +3 -3
- package/web/assets/{chunk-JWPE2WC7-sUph7I_t.js → chunk-JWPE2WC7-BPSl40wG.js} +1 -1
- package/web/assets/{chunk-MOJQB5TN-C0ERSuVK.js → chunk-MOJQB5TN-D2RcYmoU.js} +1 -1
- package/web/assets/{chunk-RYQCIY6F-Dyw1Hfwp.js → chunk-RYQCIY6F-m7Gyn-t3.js} +1 -1
- package/web/assets/{chunk-V7JOEXUC-DnSz22rb.js → chunk-V7JOEXUC-TDvdopxS.js} +1 -1
- package/web/assets/{chunk-VR4S4FIN-Bp2SNel7.js → chunk-VR4S4FIN-DZTsG51a.js} +1 -1
- package/web/assets/{chunk-XXDRQBXY-Dqtar746.js → chunk-XXDRQBXY-Dp0--RE2.js} +1 -1
- package/web/assets/classDiagram-OUVF2IWQ-fbZocVor.js +1 -0
- package/web/assets/classDiagram-v2-EOCWNBFH-fbZocVor.js +1 -0
- package/web/assets/client-C6Nxdfif.js +2 -0
- package/web/assets/client-CXYfBko5.js +17 -0
- package/web/assets/client-CoKtOq-X.js +7 -0
- package/web/assets/client-DyRQz5RU.js +53 -0
- package/web/assets/client-OY6HUzuD.js +98 -0
- package/web/assets/client-YOYWZIFi.js +34 -0
- package/web/assets/client-j2kQmxsO.js +22 -0
- package/web/assets/command-BugZBGXE.js +38 -0
- package/web/assets/copy-context-C0Uqsp-3.js +1 -0
- package/web/assets/{cose-bilkent-JH36ORCC-Dx1VqMjj.js → cose-bilkent-JH36ORCC-CPu3PI8h.js} +1 -1
- package/web/assets/{cynefin-VYW2F7L2-SjhCWmIV.js → cynefin-VYW2F7L2-DWxftYAm.js} +1 -1
- package/web/assets/{cynefinDiagram-TSTJHNR4-Dvqz2594.js → cynefinDiagram-TSTJHNR4-DsmN2V-p.js} +1 -1
- package/web/assets/{dagre-VKFMJZFB-Ju2m2qXt.js → dagre-VKFMJZFB-COEbApyY.js} +1 -1
- package/web/assets/{diagram-FQU43EPY-DsHKTt0k.js → diagram-FQU43EPY-0O9WGWKB.js} +1 -1
- package/web/assets/{diagram-G47NLZAW-DWHAcLkJ.js → diagram-G47NLZAW-CutEdMVh.js} +1 -1
- package/web/assets/{diagram-NH7WQ7WH-uUMz46ZD.js → diagram-NH7WQ7WH-C9KZc3B2.js} +1 -1
- package/web/assets/{diagram-OA4YK3LP-BRjVzjdp.js → diagram-OA4YK3LP-D8kkPXbY.js} +1 -1
- package/web/assets/{diagram-WEI45ONY-Cb-FhBpQ.js → diagram-WEI45ONY-_YqiTaGP.js} +1 -1
- package/web/assets/document-Dgt5eZFj.js +19 -0
- package/web/assets/{ebnfDiagram-CCIWWBDH-IhhxX3IB.js → ebnfDiagram-CCIWWBDH-JO-zQh6g.js} +1 -1
- package/web/assets/{entities-DUnx74kH.js → entities-C3wz7FCx.js} +12 -12
- package/web/assets/{erDiagram-Q63AITRT-D1frgeWf.js → erDiagram-Q63AITRT-9UjQwJ4P.js} +1 -1
- package/web/assets/file-viewer-DZJ8nYnl.js +1 -0
- package/web/assets/{flowDiagram-23GEKE2U-BiPPM-FY.js → flowDiagram-23GEKE2U-Ca08tnYM.js} +5 -5
- package/web/assets/folder-image-BfGgxo7i.js +1 -0
- package/web/assets/folder-landing-qUKBCnG-.js +54 -0
- package/web/assets/folder-list-BfFjv7rR.js +1 -0
- package/web/assets/folder-metadata-DCw8xzHk.js +2 -0
- package/web/assets/folder-mobile-bar-Ubz4babf.js +1 -0
- package/web/assets/folder-plugin-view-DsWR1zmQ.js +6 -0
- package/web/assets/{ganttDiagram-NO4QXBWP-CmEOlHD7.js → ganttDiagram-NO4QXBWP-KnHzX5W3.js} +1 -1
- package/web/assets/{gitGraphDiagram-IHSO6WYX-tTjcpZpU.js → gitGraphDiagram-IHSO6WYX-Cm8woNtK.js} +1 -1
- package/web/assets/index-BaRnbYRw.js +1 -0
- package/web/assets/index-BexmLxIP.css +1 -0
- package/web/assets/index-Bp9DidgD.js +1 -0
- package/web/assets/{index-eL1k96k8.js → index-CCXE8zc9.js} +1 -1
- package/web/assets/index-CNyy98F8.js +2 -0
- package/web/assets/{index-DmrKjrlM.js → index-CXhBn-ar.js} +1 -1
- package/web/assets/index-DDirZMgx.js +1 -0
- package/web/assets/{infoDiagram-FWYZ7A6U-Ok2sdbc1.js → infoDiagram-FWYZ7A6U-yyqmUtIb.js} +1 -1
- package/web/assets/{ishikawaDiagram-FXEZZL3T-kPnM5psX.js → ishikawaDiagram-FXEZZL3T-BfvR_Zy4.js} +4 -4
- package/web/assets/{journeyDiagram-5HDEW3XC-BkoT0-45.js → journeyDiagram-5HDEW3XC-BKuw06HM.js} +1 -1
- package/web/assets/{kanban-definition-HUTT4EX6-xnm_eFoU.js → kanban-definition-HUTT4EX6-n0010rmQ.js} +8 -8
- package/web/assets/{linear-CLZpgLH-.js → linear-C0d0lT8O.js} +1 -1
- package/web/assets/linked-session-header-BkEweU0Z.js +3 -0
- package/web/assets/{markdown-njUwQKsR.js → markdown-Bw9RgUGR.js} +9 -9
- package/web/assets/{mermaid.core-Bvxj3RoN.js → mermaid.core-BDVbShyO.js} +6 -6
- package/web/assets/metadata-KV0dpp4G.js +1 -0
- package/web/assets/{mindmap-definition-LN4V7U3C-42Uoox79.js → mindmap-definition-LN4V7U3C--_0ks3GF.js} +1 -1
- package/web/assets/note-card-DBfX6gW1.js +6 -0
- package/web/assets/{pegDiagram-2B236MQR-B-GZCw3w.js → pegDiagram-2B236MQR-CBoNIpKR.js} +1 -1
- package/web/assets/{pieDiagram-ENE6RG2P-DRmmssIB.js → pieDiagram-ENE6RG2P-MA5tkYh5.js} +3 -3
- package/web/assets/popover-DBD7FF-W.js +9 -0
- package/web/assets/{project-search-dialog-B730oZ1S.js → project-search-dialog-DM1IkSZu.js} +6 -6
- package/web/assets/{quadrantDiagram-ABIIQ3AL-BfhVQ7V9.js → quadrantDiagram-ABIIQ3AL-CWT1ryqF.js} +1 -1
- package/web/assets/{railroadDiagram-RFXS5EU6-DxKx7XRp.js → railroadDiagram-RFXS5EU6-ZiLB5FGi.js} +1 -1
- package/web/assets/{react-DZzLHL-l.js → react-B9jn2M18.js} +2 -2
- package/web/assets/{requirementDiagram-TGXJPOKE-NUzj9fw1.js → requirementDiagram-TGXJPOKE-CQq9uneq.js} +1 -1
- package/web/assets/{sankeyDiagram-HTMAVEWB-Cy9OMnl-.js → sankeyDiagram-HTMAVEWB-qDG-0JqI.js} +1 -1
- package/web/assets/search-DNrQA5fF.js +2 -0
- package/web/assets/select-D8cqNgcp.js +30 -0
- package/web/assets/selection-popup-DmtTeRs2.js +7 -0
- package/web/assets/{sequenceDiagram-DBY2YBRQ-CBNE9mzn.js → sequenceDiagram-DBY2YBRQ-CiApurLO.js} +1 -1
- package/web/assets/{sizeCapture-X5ZJPWSS-S4HhfX0n.js → sizeCapture-X5ZJPWSS-DZSR5QXm.js} +1 -1
- package/web/assets/stateDiagram-2N3HPSRC-CjJJR9_z.js +1 -0
- package/web/assets/stateDiagram-v2-6OUMAXLB-BpeGSCu9.js +1 -0
- package/web/assets/{swimlanes-5IMT3BWC-DJ2aLWal.js → swimlanes-5IMT3BWC-CKmo1sg6.js} +2 -2
- package/web/assets/swimlanesDiagram-G3AALYLV-D9RjLKb9.js +8 -0
- package/web/assets/tanstack-YzX_Mi37.js +3 -0
- package/web/assets/{timeline-definition-FHXFAJF6-vFDUVPCX.js → timeline-definition-FHXFAJF6-D-NMwS3y.js} +1 -1
- package/web/assets/{use-folder-filter-BbTUlXgG.js → use-folder-filter-LQyXns5Q.js} +1 -1
- package/web/assets/{utils-CwHGE3BB.js → utils-DCaHk0Gm.js} +1 -1
- package/web/assets/{vennDiagram-L72KCM5P-AsnhK2zW.js → vennDiagram-L72KCM5P-CfL6LBWw.js} +1 -1
- package/web/assets/view-context-gyDl_p2V.js +229 -0
- package/web/assets/viewer-capabilities-Bpp8Uvcg.js +1 -0
- package/web/assets/{wardleyDiagram-EHGQE667-Cj1wFbNV.js → wardleyDiagram-EHGQE667-DgldMxaj.js} +1 -1
- package/web/assets/{xychartDiagram-FW5EYKEG-Bbvnutsm.js → xychartDiagram-FW5EYKEG-CIoAIFX8.js} +1 -1
- package/web/favicon.svg +6 -0
- package/web/index.html +5 -4
- package/web/assets/app-CPSmsokP.js +0 -2
- package/web/assets/app-options-XEWvevsz.js +0 -25
- package/web/assets/app-view-header-BKZ90ToF.js +0 -1
- package/web/assets/arc-DbpbZvCt.js +0 -1
- package/web/assets/arrow-left-CFeHb-Z1.js +0 -1
- package/web/assets/ask-tray-D2YHtbPj.js +0 -14
- package/web/assets/button-BJ7z-ZA7.js +0 -1
- package/web/assets/calendar-days-DWh2XMO2.js +0 -1
- package/web/assets/channel-dSRp_qTo.js +0 -1
- package/web/assets/chevron-down-C5oRtqbX.js +0 -1
- package/web/assets/chevron-right-CsPtvh8C.js +0 -1
- package/web/assets/chevron-up-DjpU6Pyv.js +0 -1
- package/web/assets/classDiagram-OUVF2IWQ-B7B2zLzM.js +0 -1
- package/web/assets/classDiagram-v2-EOCWNBFH-B7B2zLzM.js +0 -1
- package/web/assets/client-CAudjYV9.js +0 -34
- package/web/assets/client-Dn9-_Gm_.js +0 -14
- package/web/assets/client-Dxrf2tyq.js +0 -102
- package/web/assets/client-aFI2M4pE.js +0 -53
- package/web/assets/collection-icon-TbOVyORG.js +0 -1
- package/web/assets/collection-page-Du6FKkuU.js +0 -10
- package/web/assets/command-C_g5E1Wx.js +0 -38
- package/web/assets/copy-Ikmr6Iq2.js +0 -1
- package/web/assets/copy-context-Cl1TE2PJ.js +0 -1
- package/web/assets/document-DcjNSJCk.js +0 -2
- package/web/assets/external-link-BXmSXqqF.js +0 -1
- package/web/assets/file-renderer-BRZTrYx8.js +0 -19
- package/web/assets/file-text-CiiSsCDq.js +0 -1
- package/web/assets/file-viewer-C1wAeVDK.js +0 -1
- package/web/assets/folder-image-AXBrHUcU.js +0 -1
- package/web/assets/folder-landing-BhRg7hwn.js +0 -54
- package/web/assets/folder-list-rIdszVde.js +0 -1
- package/web/assets/folder-metadata-puTC5QqJ.js +0 -2
- package/web/assets/folder-mobile-bar-DjjRQo3T.js +0 -1
- package/web/assets/folder-plugin-view-BU_kzR8j.js +0 -6
- package/web/assets/index-DS2Wmd9I.css +0 -1
- package/web/assets/index-DgqzSeIR.js +0 -1
- package/web/assets/index-DnlTDqaa.js +0 -1
- package/web/assets/index-DztTMDFz.js +0 -2
- package/web/assets/index-kY75qc96.js +0 -1
- package/web/assets/index-p38i_yyY.js +0 -1
- package/web/assets/link-2-BWKA6t--.js +0 -1
- package/web/assets/link-DC_1Z6Yy.js +0 -11
- package/web/assets/linked-session-header-DJYWZ_-q.js +0 -3
- package/web/assets/mail-2rCdIFul.js +0 -1
- package/web/assets/markdown-title-dncAYYiP.js +0 -131
- package/web/assets/notes-page-DIW6rgJp.js +0 -10
- package/web/assets/pencil-8cobiSSq.js +0 -1
- package/web/assets/plus-BHV2wJr7.js +0 -1
- package/web/assets/popover-Cmmgj-MJ.js +0 -9
- package/web/assets/search-CvlYUkN6.js +0 -2
- package/web/assets/select-1SvaKQsS.js +0 -30
- package/web/assets/selection-popup-ntjycEVh.js +0 -7
- package/web/assets/sparkles-CBhGREdc.js +0 -1
- package/web/assets/stateDiagram-2N3HPSRC-BEw1Mheu.js +0 -1
- package/web/assets/stateDiagram-v2-6OUMAXLB-BHtjl1iD.js +0 -1
- package/web/assets/swimlanesDiagram-G3AALYLV-Z362aroZ.js +0 -8
- package/web/assets/tanstack-CD46mJkU.js +0 -1
- package/web/assets/view-context-D-fh9AbH.js +0 -81
- package/web/assets/viewer-capabilities-CROIaoqh.js +0 -1
- package/web/assets/x-BUeE--I4.js +0 -1
|
@@ -6960,8 +6960,10 @@ var require_public_api = __commonJS((exports) => {
|
|
|
6960
6960
|
});
|
|
6961
6961
|
|
|
6962
6962
|
// packages/api/src/server/plugins.ts
|
|
6963
|
-
import {
|
|
6964
|
-
import {
|
|
6963
|
+
import { pathToFileURL } from "node:url";
|
|
6964
|
+
import { existsSync as existsSync2 } from "node:fs";
|
|
6965
|
+
import { mkdir as mkdir3, stat as stat4, writeFile as writeFile2 } from "node:fs/promises";
|
|
6966
|
+
import { dirname as dirname7, resolve as resolve8, sep as sep7 } from "node:path";
|
|
6965
6967
|
|
|
6966
6968
|
// packages/agents/src/manifest.ts
|
|
6967
6969
|
var agentsManifest = {
|
|
@@ -8760,9 +8762,284 @@ function createMailPlugin({
|
|
|
8760
8762
|
};
|
|
8761
8763
|
}
|
|
8762
8764
|
|
|
8765
|
+
// packages/notes/src/server.ts
|
|
8766
|
+
import { readdir as readdir3, stat as stat2 } from "node:fs/promises";
|
|
8767
|
+
import { basename as basename3, extname, relative as relative3, resolve as resolve4, sep as sep4 } from "node:path";
|
|
8768
|
+
|
|
8769
|
+
// packages/notes/src/manifest.ts
|
|
8770
|
+
var notesManifest = {
|
|
8771
|
+
id: "notes",
|
|
8772
|
+
label: "Notes"
|
|
8773
|
+
};
|
|
8774
|
+
|
|
8775
|
+
// packages/notes/src/server.ts
|
|
8776
|
+
var markdownExtensions = new Set([".md", ".markdown"]);
|
|
8777
|
+
async function listMarkdownFiles(folder) {
|
|
8778
|
+
const files = [];
|
|
8779
|
+
const visit2 = async (current) => {
|
|
8780
|
+
const entries = await readdir3(current, { withFileTypes: true }).catch(() => []);
|
|
8781
|
+
for (const entry of entries) {
|
|
8782
|
+
if (entry.name === "node_modules" || entry.name.startsWith("."))
|
|
8783
|
+
continue;
|
|
8784
|
+
const path = resolve4(current, entry.name);
|
|
8785
|
+
if (entry.isDirectory()) {
|
|
8786
|
+
await visit2(path);
|
|
8787
|
+
continue;
|
|
8788
|
+
}
|
|
8789
|
+
if (!entry.isFile() || !markdownExtensions.has(extname(entry.name))) {
|
|
8790
|
+
continue;
|
|
8791
|
+
}
|
|
8792
|
+
const details = await stat2(path).catch(() => {
|
|
8793
|
+
return;
|
|
8794
|
+
});
|
|
8795
|
+
files.push({
|
|
8796
|
+
activityAt: details?.mtimeMs ?? 0,
|
|
8797
|
+
name: basename3(entry.name, extname(entry.name)),
|
|
8798
|
+
relativePath: relative3(folder, path).split(sep4).join("/")
|
|
8799
|
+
});
|
|
8800
|
+
}
|
|
8801
|
+
};
|
|
8802
|
+
await visit2(folder);
|
|
8803
|
+
return files.sort((left, right) => right.activityAt - left.activityAt);
|
|
8804
|
+
}
|
|
8805
|
+
async function loadNotes(folder, linkedFolders = []) {
|
|
8806
|
+
const localFiles = await listMarkdownFiles(folder);
|
|
8807
|
+
const linked = await Promise.all(linkedFolders.map(async (linkedFolder) => ({
|
|
8808
|
+
files: await listMarkdownFiles(linkedFolder),
|
|
8809
|
+
folder: linkedFolder
|
|
8810
|
+
})));
|
|
8811
|
+
return {
|
|
8812
|
+
files: {
|
|
8813
|
+
items: [
|
|
8814
|
+
...localFiles,
|
|
8815
|
+
...linked.flatMap((group) => group.files.map((file) => ({ ...file, folder: group.folder })))
|
|
8816
|
+
]
|
|
8817
|
+
},
|
|
8818
|
+
folder,
|
|
8819
|
+
status: "available"
|
|
8820
|
+
};
|
|
8821
|
+
}
|
|
8822
|
+
function createNotesPlugin() {
|
|
8823
|
+
return {
|
|
8824
|
+
...notesManifest,
|
|
8825
|
+
async detect({
|
|
8826
|
+
folder
|
|
8827
|
+
}) {
|
|
8828
|
+
const files = await listMarkdownFiles(folder);
|
|
8829
|
+
return files.length > 0 ? { count: files.length, status: "available" } : { status: "available" };
|
|
8830
|
+
},
|
|
8831
|
+
async handle({
|
|
8832
|
+
folder,
|
|
8833
|
+
linkedFolders
|
|
8834
|
+
}) {
|
|
8835
|
+
return { data: await loadNotes(folder, linkedFolders), kind: "available" };
|
|
8836
|
+
}
|
|
8837
|
+
};
|
|
8838
|
+
}
|
|
8839
|
+
|
|
8840
|
+
// plugins/projects/src/server.ts
|
|
8841
|
+
import { execFile } from "node:child_process";
|
|
8842
|
+
import { existsSync } from "node:fs";
|
|
8843
|
+
import { createRequire as createRequire2 } from "node:module";
|
|
8844
|
+
import { dirname as dirname3, join } from "node:path";
|
|
8845
|
+
import { fileURLToPath } from "node:url";
|
|
8846
|
+
|
|
8847
|
+
// plugins/projects/src/manifest.ts
|
|
8848
|
+
var projectsManifest = {
|
|
8849
|
+
id: "projects",
|
|
8850
|
+
label: "Projects"
|
|
8851
|
+
};
|
|
8852
|
+
|
|
8853
|
+
// plugins/projects/src/server.ts
|
|
8854
|
+
var scoutScript = `
|
|
8855
|
+
const local = require(process.argv[1]);
|
|
8856
|
+
(async () => {
|
|
8857
|
+
const folder = process.argv[2];
|
|
8858
|
+
const connected = await local.listConnectedProjects(folder, {
|
|
8859
|
+
depth: 1,
|
|
8860
|
+
focused: true,
|
|
8861
|
+
});
|
|
8862
|
+
process.stdout.write(JSON.stringify(local.connectedProjectsList(folder, connected)));
|
|
8863
|
+
})().catch(error => { console.error(error); process.exitCode = 1; });
|
|
8864
|
+
`;
|
|
8865
|
+
function resolveScoutModule() {
|
|
8866
|
+
const require2 = createRequire2(import.meta.url);
|
|
8867
|
+
const candidates = [];
|
|
8868
|
+
try {
|
|
8869
|
+
candidates.push(require2.resolve("@raggle-ai/local"));
|
|
8870
|
+
} catch {}
|
|
8871
|
+
let directory = dirname3(fileURLToPath(import.meta.url));
|
|
8872
|
+
while (dirname3(directory) !== directory) {
|
|
8873
|
+
if (existsSync(join(directory, "raggle.json"))) {
|
|
8874
|
+
candidates.push(join(dirname3(directory), "raggle-ai-scout", "packages", "local"));
|
|
8875
|
+
break;
|
|
8876
|
+
}
|
|
8877
|
+
directory = dirname3(directory);
|
|
8878
|
+
}
|
|
8879
|
+
for (const candidate of candidates) {
|
|
8880
|
+
try {
|
|
8881
|
+
const mod = require2(candidate);
|
|
8882
|
+
if (typeof mod.listConnectedProjects === "function" && typeof mod.connectedProjectsList === "function") {
|
|
8883
|
+
return candidate;
|
|
8884
|
+
}
|
|
8885
|
+
} catch {}
|
|
8886
|
+
}
|
|
8887
|
+
return;
|
|
8888
|
+
}
|
|
8889
|
+
function normalizeRepositories(raw) {
|
|
8890
|
+
const repositories = [];
|
|
8891
|
+
if (!Array.isArray(raw.repositories))
|
|
8892
|
+
return repositories;
|
|
8893
|
+
for (const value of raw.repositories) {
|
|
8894
|
+
const row = value;
|
|
8895
|
+
if (!row || typeof row !== "object" || typeof row.worktree !== "string")
|
|
8896
|
+
continue;
|
|
8897
|
+
const type = row.type;
|
|
8898
|
+
const direction = row.direction;
|
|
8899
|
+
if (type !== "dependency" && type !== "implementation" && type !== "notes" && type !== "related" || direction !== "incoming" && direction !== "outgoing" || typeof row.depth !== "number" || typeof row.repository !== "string" || row.worktree.length === 0)
|
|
8900
|
+
continue;
|
|
8901
|
+
repositories.push({
|
|
8902
|
+
depth: row.depth,
|
|
8903
|
+
direction,
|
|
8904
|
+
repository: row.repository,
|
|
8905
|
+
type,
|
|
8906
|
+
worktree: row.worktree
|
|
8907
|
+
});
|
|
8908
|
+
}
|
|
8909
|
+
return repositories;
|
|
8910
|
+
}
|
|
8911
|
+
function discoverProjects(scoutModule, folder) {
|
|
8912
|
+
return new Promise((resolve5) => {
|
|
8913
|
+
execFile(process.execPath, ["-e", scoutScript, scoutModule, folder], {
|
|
8914
|
+
timeout: 60000,
|
|
8915
|
+
maxBuffer: 8 * 1024 * 1024,
|
|
8916
|
+
env: { ...process.env, NODE_OPTIONS: "" }
|
|
8917
|
+
}, (error, stdout) => {
|
|
8918
|
+
if (error) {
|
|
8919
|
+
resolve5({
|
|
8920
|
+
message: "Raggle Scout discovery timed out or failed. Retry the view to try again.",
|
|
8921
|
+
projects: [],
|
|
8922
|
+
status: "error"
|
|
8923
|
+
});
|
|
8924
|
+
return;
|
|
8925
|
+
}
|
|
8926
|
+
try {
|
|
8927
|
+
const list = JSON.parse(stdout);
|
|
8928
|
+
resolve5({
|
|
8929
|
+
projects: normalizeRepositories(list),
|
|
8930
|
+
status: "available"
|
|
8931
|
+
});
|
|
8932
|
+
} catch (parseError) {
|
|
8933
|
+
resolve5({
|
|
8934
|
+
message: `Could not parse the Scout response: ${parseError instanceof Error ? parseError.message : String(parseError)}`,
|
|
8935
|
+
projects: [],
|
|
8936
|
+
status: "error"
|
|
8937
|
+
});
|
|
8938
|
+
}
|
|
8939
|
+
});
|
|
8940
|
+
});
|
|
8941
|
+
}
|
|
8942
|
+
var TTL = 60000;
|
|
8943
|
+
var cache = new Map;
|
|
8944
|
+
var stamps = new Map;
|
|
8945
|
+
var inflight = new Map;
|
|
8946
|
+
var queue = Promise.resolve();
|
|
8947
|
+
function requestProjects(scoutModule, folder) {
|
|
8948
|
+
const existing = inflight.get(folder);
|
|
8949
|
+
if (existing)
|
|
8950
|
+
return existing;
|
|
8951
|
+
const run = queue.then(() => discoverProjects(scoutModule, folder), () => discoverProjects(scoutModule, folder));
|
|
8952
|
+
queue = run.then(() => {
|
|
8953
|
+
return;
|
|
8954
|
+
}, () => {
|
|
8955
|
+
return;
|
|
8956
|
+
});
|
|
8957
|
+
inflight.set(folder, run);
|
|
8958
|
+
return run.finally(() => {
|
|
8959
|
+
inflight.delete(folder);
|
|
8960
|
+
});
|
|
8961
|
+
}
|
|
8962
|
+
async function loadProjects(context) {
|
|
8963
|
+
const folder = context.folder;
|
|
8964
|
+
const cached = cache.get(folder);
|
|
8965
|
+
const stamp = stamps.get(folder) ?? 0;
|
|
8966
|
+
if (cached && Date.now() - stamp < TTL)
|
|
8967
|
+
return cached;
|
|
8968
|
+
const scoutModule = resolveScoutModule();
|
|
8969
|
+
if (cached && !scoutModule)
|
|
8970
|
+
return cached;
|
|
8971
|
+
if (scoutModule) {
|
|
8972
|
+
const promise = requestProjects(scoutModule, folder);
|
|
8973
|
+
if (cached) {
|
|
8974
|
+
promise.then((load2) => {
|
|
8975
|
+
if (load2.status === "available") {
|
|
8976
|
+
cache.set(folder, load2);
|
|
8977
|
+
stamps.set(folder, Date.now());
|
|
8978
|
+
}
|
|
8979
|
+
});
|
|
8980
|
+
return cached;
|
|
8981
|
+
}
|
|
8982
|
+
const load = await promise;
|
|
8983
|
+
if (load.status === "available") {
|
|
8984
|
+
cache.set(folder, load);
|
|
8985
|
+
stamps.set(folder, Date.now());
|
|
8986
|
+
}
|
|
8987
|
+
return load;
|
|
8988
|
+
}
|
|
8989
|
+
return {
|
|
8990
|
+
message: "Raggle Scout module (@raggle-ai/local with connected-project discovery) could not be resolved.",
|
|
8991
|
+
projects: [],
|
|
8992
|
+
status: "error"
|
|
8993
|
+
};
|
|
8994
|
+
}
|
|
8995
|
+
function createProjectsPlugin() {
|
|
8996
|
+
return {
|
|
8997
|
+
...projectsManifest,
|
|
8998
|
+
async detect(_context) {
|
|
8999
|
+
return { status: "available" };
|
|
9000
|
+
},
|
|
9001
|
+
async handle(context, _subpath) {
|
|
9002
|
+
const load = await loadProjects(context);
|
|
9003
|
+
if (load.status === "error") {
|
|
9004
|
+
return {
|
|
9005
|
+
kind: "available",
|
|
9006
|
+
data: {
|
|
9007
|
+
folder: context.folder,
|
|
9008
|
+
message: load.message,
|
|
9009
|
+
projects: [],
|
|
9010
|
+
status: "error"
|
|
9011
|
+
}
|
|
9012
|
+
};
|
|
9013
|
+
}
|
|
9014
|
+
return {
|
|
9015
|
+
kind: "available",
|
|
9016
|
+
data: {
|
|
9017
|
+
folder: context.folder,
|
|
9018
|
+
projects: load.projects,
|
|
9019
|
+
status: "available"
|
|
9020
|
+
}
|
|
9021
|
+
};
|
|
9022
|
+
}
|
|
9023
|
+
};
|
|
9024
|
+
}
|
|
9025
|
+
|
|
8763
9026
|
// plugins/tasks/src/server.ts
|
|
8764
|
-
import { readdir as
|
|
8765
|
-
import { basename as
|
|
9027
|
+
import { readdir as readdir4, readFile as readFile4, stat as stat3 } from "node:fs/promises";
|
|
9028
|
+
import { basename as basename4, dirname as dirname4, relative as relative4, resolve as resolve5, sep as sep5 } from "node:path";
|
|
9029
|
+
|
|
9030
|
+
// packages/folder-plugin/src/subpath.ts
|
|
9031
|
+
function matchSubpath(sources, subpath, itemsOf, matches) {
|
|
9032
|
+
const id = subpath.trim();
|
|
9033
|
+
if (!id)
|
|
9034
|
+
return;
|
|
9035
|
+
for (const source of sources) {
|
|
9036
|
+
for (const item of itemsOf(source)) {
|
|
9037
|
+
if (matches(item, id))
|
|
9038
|
+
return { item, source };
|
|
9039
|
+
}
|
|
9040
|
+
}
|
|
9041
|
+
return;
|
|
9042
|
+
}
|
|
8766
9043
|
|
|
8767
9044
|
// plugins/tasks/src/data/parse.ts
|
|
8768
9045
|
var TASK_TYPES = [
|
|
@@ -9188,26 +9465,26 @@ var tasksManifest = {
|
|
|
9188
9465
|
// plugins/tasks/src/server.ts
|
|
9189
9466
|
async function loadTaskSources(viewRoot, scanRoot = viewRoot) {
|
|
9190
9467
|
const visit2 = async (current) => {
|
|
9191
|
-
const entries = await
|
|
9468
|
+
const entries = await readdir4(current, { withFileTypes: true }).catch(() => []);
|
|
9192
9469
|
const paths2 = [];
|
|
9193
9470
|
for (const entry of entries) {
|
|
9194
9471
|
if (entry.isFile() && entry.name === "todo.json") {
|
|
9195
|
-
paths2.push(
|
|
9472
|
+
paths2.push(resolve5(current, entry.name));
|
|
9196
9473
|
continue;
|
|
9197
9474
|
}
|
|
9198
9475
|
if (!entry.isDirectory() || entry.name.startsWith(".") || entry.name === "node_modules")
|
|
9199
9476
|
continue;
|
|
9200
|
-
paths2.push(...await visit2(
|
|
9477
|
+
paths2.push(...await visit2(resolve5(current, entry.name)));
|
|
9201
9478
|
}
|
|
9202
9479
|
return paths2;
|
|
9203
9480
|
};
|
|
9204
|
-
const paths = (await visit2(scanRoot)).sort((left, right) =>
|
|
9481
|
+
const paths = (await visit2(scanRoot)).sort((left, right) => relative4(scanRoot, left).localeCompare(relative4(scanRoot, right)));
|
|
9205
9482
|
const issues = [];
|
|
9206
9483
|
const warnings = [];
|
|
9207
9484
|
const sources = [];
|
|
9208
9485
|
await Promise.all(paths.map(async (path) => {
|
|
9209
9486
|
const sourceText = await readFile4(path, "utf8");
|
|
9210
|
-
const file =
|
|
9487
|
+
const file = relative4(viewRoot, path).split(sep5).join("/");
|
|
9211
9488
|
const parsed = parseTodoSource(sourceText);
|
|
9212
9489
|
if (!parsed.ok) {
|
|
9213
9490
|
issues.push({ file, problems: parsed.issues });
|
|
@@ -9217,12 +9494,12 @@ async function loadTaskSources(viewRoot, scanRoot = viewRoot) {
|
|
|
9217
9494
|
file,
|
|
9218
9495
|
problems: [
|
|
9219
9496
|
...todoFileWarnings(parsed.document),
|
|
9220
|
-
...await missingNoteIssues(parsed.document,
|
|
9497
|
+
...await missingNoteIssues(parsed.document, dirname4(path))
|
|
9221
9498
|
]
|
|
9222
9499
|
});
|
|
9223
9500
|
sources.push({
|
|
9224
9501
|
document: parsed.document,
|
|
9225
|
-
folder:
|
|
9502
|
+
folder: dirname4(path),
|
|
9226
9503
|
path: file
|
|
9227
9504
|
});
|
|
9228
9505
|
}));
|
|
@@ -9262,7 +9539,7 @@ async function missingNoteIssues(document, folder) {
|
|
|
9262
9539
|
const target = (note.split("#", 1)[0] ?? "").trim();
|
|
9263
9540
|
if (!target)
|
|
9264
9541
|
continue;
|
|
9265
|
-
const exists = await
|
|
9542
|
+
const exists = await stat3(resolve5(folder, target)).then((entry) => entry.isFile()).catch(() => false);
|
|
9266
9543
|
if (!exists) {
|
|
9267
9544
|
missing.push({
|
|
9268
9545
|
message: `references a missing note file: ${target}`,
|
|
@@ -9281,7 +9558,7 @@ function tasksOf(source) {
|
|
|
9281
9558
|
return Array.isArray(source.document.tasks) ? source.document.tasks : [];
|
|
9282
9559
|
}
|
|
9283
9560
|
function sourceTitle(folder) {
|
|
9284
|
-
return `${
|
|
9561
|
+
return `${basename4(folder)} tasks`;
|
|
9285
9562
|
}
|
|
9286
9563
|
function mergedDataset(folder, sources) {
|
|
9287
9564
|
const root = sources.find((source) => source.path === "todo.json");
|
|
@@ -9444,19 +9721,17 @@ function createTasksPlugin() {
|
|
|
9444
9721
|
};
|
|
9445
9722
|
}
|
|
9446
9723
|
}
|
|
9447
|
-
|
|
9448
|
-
|
|
9449
|
-
|
|
9450
|
-
|
|
9451
|
-
|
|
9452
|
-
|
|
9453
|
-
|
|
9454
|
-
|
|
9455
|
-
|
|
9456
|
-
|
|
9457
|
-
|
|
9458
|
-
};
|
|
9459
|
-
}
|
|
9724
|
+
const bare = matchSubpath(sources, id, tasksOf, (item, target) => item.id === target || item.key === target);
|
|
9725
|
+
if (bare) {
|
|
9726
|
+
return {
|
|
9727
|
+
kind: "available",
|
|
9728
|
+
data: {
|
|
9729
|
+
dataset: singleTaskDataset(context.folder, bare.source, bare.item),
|
|
9730
|
+
folder: context.folder,
|
|
9731
|
+
status: "available",
|
|
9732
|
+
warnings
|
|
9733
|
+
}
|
|
9734
|
+
};
|
|
9460
9735
|
}
|
|
9461
9736
|
return {
|
|
9462
9737
|
kind: "available",
|
|
@@ -9652,19 +9927,19 @@ import {
|
|
|
9652
9927
|
unlink,
|
|
9653
9928
|
writeFile
|
|
9654
9929
|
} from "node:fs/promises";
|
|
9655
|
-
import { dirname as
|
|
9930
|
+
import { dirname as dirname6, isAbsolute as isAbsolute3, relative as relative5, resolve as resolve7, sep as sep6 } from "node:path";
|
|
9656
9931
|
|
|
9657
9932
|
// plugins/mail/src/flock.ts
|
|
9658
9933
|
import { closeSync, constants as constants2, openSync } from "node:fs";
|
|
9659
9934
|
import { mkdir } from "node:fs/promises";
|
|
9660
|
-
import { dirname as
|
|
9935
|
+
import { dirname as dirname5, resolve as resolve6 } from "node:path";
|
|
9661
9936
|
|
|
9662
9937
|
class FlockTimeoutError extends Error {
|
|
9663
9938
|
lockPath;
|
|
9664
9939
|
constructor(lockPath, timeoutMs) {
|
|
9665
|
-
super(`Timed out after ${timeoutMs}ms waiting for the draft lock ${
|
|
9940
|
+
super(`Timed out after ${timeoutMs}ms waiting for the draft lock ${resolve6(lockPath)}`);
|
|
9666
9941
|
this.name = "FlockTimeoutError";
|
|
9667
|
-
this.lockPath =
|
|
9942
|
+
this.lockPath = resolve6(lockPath);
|
|
9668
9943
|
}
|
|
9669
9944
|
}
|
|
9670
9945
|
var LOCK_EX = 2;
|
|
@@ -9703,8 +9978,8 @@ function sleep(ms) {
|
|
|
9703
9978
|
});
|
|
9704
9979
|
}
|
|
9705
9980
|
async function withFlock(lockPath, timeoutMs, action) {
|
|
9706
|
-
const resolved =
|
|
9707
|
-
await mkdir(
|
|
9981
|
+
const resolved = resolve6(lockPath);
|
|
9982
|
+
await mkdir(dirname5(resolved), { mode: 448, recursive: true }).catch(() => {
|
|
9708
9983
|
return;
|
|
9709
9984
|
});
|
|
9710
9985
|
const { flock, errno } = await loadBackend();
|
|
@@ -9752,15 +10027,15 @@ function draftRevision2(content) {
|
|
|
9752
10027
|
return createHash2("sha256").update(content).digest("hex");
|
|
9753
10028
|
}
|
|
9754
10029
|
async function ensureRealDirChain(anchor, childPath) {
|
|
9755
|
-
const rel =
|
|
9756
|
-
if (!rel || rel === ".." || rel.startsWith(`..${
|
|
10030
|
+
const rel = relative5(anchor, childPath);
|
|
10031
|
+
if (!rel || rel === ".." || rel.startsWith(`..${sep6}`) || isAbsolute3(rel)) {
|
|
9757
10032
|
throw new MailDeleteError("invalid", "Lock/history path escapes the mail folder");
|
|
9758
10033
|
}
|
|
9759
10034
|
let current = anchor;
|
|
9760
|
-
for (const segment of rel.split(
|
|
10035
|
+
for (const segment of rel.split(sep6)) {
|
|
9761
10036
|
if (!segment)
|
|
9762
10037
|
continue;
|
|
9763
|
-
current =
|
|
10038
|
+
current = resolve7(current, segment);
|
|
9764
10039
|
let info = await lstat2(current).catch(() => {
|
|
9765
10040
|
return;
|
|
9766
10041
|
});
|
|
@@ -9785,13 +10060,13 @@ async function deleteLocalDraftVerified(mail, mailDir) {
|
|
|
9785
10060
|
if (!validDraftId(mail.id)) {
|
|
9786
10061
|
throw new MailDeleteError("invalid", "Invalid mail id");
|
|
9787
10062
|
}
|
|
9788
|
-
const mailDirReal = await realpath3(
|
|
9789
|
-
const target =
|
|
9790
|
-
const targetDir = await realpath3(
|
|
10063
|
+
const mailDirReal = await realpath3(resolve7(mailDir));
|
|
10064
|
+
const target = resolve7(mail.filePath);
|
|
10065
|
+
const targetDir = await realpath3(dirname6(target)).catch(() => null);
|
|
9791
10066
|
if (targetDir !== mailDirReal) {
|
|
9792
10067
|
throw new MailDeleteError("invalid", "Draft path is outside the mail folder");
|
|
9793
10068
|
}
|
|
9794
|
-
const expected =
|
|
10069
|
+
const expected = resolve7(mailDirReal, `${mail.id.trim()}.md`);
|
|
9795
10070
|
const targetReal = await realpath3(target).catch(() => null);
|
|
9796
10071
|
if (targetReal === null) {
|
|
9797
10072
|
throw new MailDeleteError("missing", "Draft no longer exists");
|
|
@@ -9802,9 +10077,9 @@ async function deleteLocalDraftVerified(mail, mailDir) {
|
|
|
9802
10077
|
if (!/^[a-f0-9]{64}$/i.test(mail.revision)) {
|
|
9803
10078
|
throw new MailDeleteError("invalid", "Invalid draft revision");
|
|
9804
10079
|
}
|
|
9805
|
-
const locksDir =
|
|
10080
|
+
const locksDir = resolve7(mailDirReal, ".locks");
|
|
9806
10081
|
await ensureRealDirChain(mailDirReal, locksDir);
|
|
9807
|
-
const lockPath =
|
|
10082
|
+
const lockPath = resolve7(locksDir, `${mail.id.trim()}.md.lock`);
|
|
9808
10083
|
try {
|
|
9809
10084
|
return await withFlock(lockPath, deleteLockTimeoutMs, async () => {
|
|
9810
10085
|
const content = await readFile5(target, "utf8").catch(() => null);
|
|
@@ -9814,9 +10089,9 @@ async function deleteLocalDraftVerified(mail, mailDir) {
|
|
|
9814
10089
|
if (draftRevision2(content) !== mail.revision.toLowerCase()) {
|
|
9815
10090
|
throw new MailDeleteError("changed", "Draft changed since it was loaded; refusing to delete newer work");
|
|
9816
10091
|
}
|
|
9817
|
-
const historyDir =
|
|
10092
|
+
const historyDir = resolve7(mailDirReal, "history", mail.id);
|
|
9818
10093
|
await ensureRealDirChain(mailDirReal, historyDir);
|
|
9819
|
-
const historyPath =
|
|
10094
|
+
const historyPath = resolve7(historyDir, `${mail.revision}.md`);
|
|
9820
10095
|
const existingLstat = await lstat2(historyPath).catch(() => {
|
|
9821
10096
|
return;
|
|
9822
10097
|
});
|
|
@@ -9832,7 +10107,7 @@ async function deleteLocalDraftVerified(mail, mailDir) {
|
|
|
9832
10107
|
} else if (existing) {
|
|
9833
10108
|
throw new MailDeleteError("invalid", "History snapshot path is not a regular file");
|
|
9834
10109
|
} else {
|
|
9835
|
-
const tempPath =
|
|
10110
|
+
const tempPath = resolve7(historyDir, `${mail.revision}.md.tmp`);
|
|
9836
10111
|
for (let attempt = 0;; attempt += 1) {
|
|
9837
10112
|
try {
|
|
9838
10113
|
await writeFile(tempPath, content, { flag: "wx", mode: 384 });
|
|
@@ -9913,13 +10188,13 @@ async function removeDraftAttachmentVerified(mail, mailDir, attachment) {
|
|
|
9913
10188
|
if (!validDraftId(mail.id)) {
|
|
9914
10189
|
throw new MailAttachmentError("invalid", "Invalid mail id");
|
|
9915
10190
|
}
|
|
9916
|
-
const mailDirReal = await realpath3(
|
|
9917
|
-
const target =
|
|
9918
|
-
const targetDir = await realpath3(
|
|
10191
|
+
const mailDirReal = await realpath3(resolve7(mailDir));
|
|
10192
|
+
const target = resolve7(mail.filePath);
|
|
10193
|
+
const targetDir = await realpath3(dirname6(target)).catch(() => null);
|
|
9919
10194
|
if (targetDir !== mailDirReal) {
|
|
9920
10195
|
throw new MailAttachmentError("invalid", "Draft path is outside the mail folder");
|
|
9921
10196
|
}
|
|
9922
|
-
const expected =
|
|
10197
|
+
const expected = resolve7(mailDirReal, `${mail.id.trim()}.md`);
|
|
9923
10198
|
const targetReal = await realpath3(target).catch(() => null);
|
|
9924
10199
|
if (targetReal === null) {
|
|
9925
10200
|
throw new MailAttachmentError("missing", "Draft no longer exists");
|
|
@@ -9930,9 +10205,9 @@ async function removeDraftAttachmentVerified(mail, mailDir, attachment) {
|
|
|
9930
10205
|
if (!/^[a-f0-9]{64}$/i.test(mail.revision)) {
|
|
9931
10206
|
throw new MailAttachmentError("invalid", "Invalid draft revision");
|
|
9932
10207
|
}
|
|
9933
|
-
const locksDir =
|
|
10208
|
+
const locksDir = resolve7(mailDirReal, ".locks");
|
|
9934
10209
|
await ensureRealDirChain(mailDirReal, locksDir);
|
|
9935
|
-
const lockPath =
|
|
10210
|
+
const lockPath = resolve7(locksDir, `${mail.id.trim()}.md.lock`);
|
|
9936
10211
|
try {
|
|
9937
10212
|
return await withFlock(lockPath, deleteLockTimeoutMs, async () => {
|
|
9938
10213
|
const revision = mail.revision.toLowerCase();
|
|
@@ -9969,7 +10244,7 @@ ${newFrontmatter}
|
|
|
9969
10244
|
${content.slice(end + `
|
|
9970
10245
|
---
|
|
9971
10246
|
`.length)}`;
|
|
9972
|
-
const tempPath =
|
|
10247
|
+
const tempPath = resolve7(mailDirReal, `${mail.id.trim()}.md.tmp`);
|
|
9973
10248
|
for (let attempt = 0;; attempt += 1) {
|
|
9974
10249
|
try {
|
|
9975
10250
|
await writeFile(tempPath, newContent, { flag: "wx", mode: 384 });
|
|
@@ -10242,6 +10517,15 @@ async function handleMailApiRoutes(request, response, context) {
|
|
|
10242
10517
|
return true;
|
|
10243
10518
|
}
|
|
10244
10519
|
// packages/api/src/server/plugins.ts
|
|
10520
|
+
function configuredFolderServerRegistry(registry, resolvedConfig) {
|
|
10521
|
+
const disabled = new Set(resolvedConfig.plugins.disable);
|
|
10522
|
+
const orderedIds = resolvedConfig.plugins.order.filter((id) => registry.has(id) && !disabled.has(id));
|
|
10523
|
+
const ids = [
|
|
10524
|
+
...orderedIds,
|
|
10525
|
+
...[...registry.keys()].filter((id) => !disabled.has(id) && !orderedIds.includes(id))
|
|
10526
|
+
];
|
|
10527
|
+
return new Map(ids.map((id) => [id, registry.get(id)]));
|
|
10528
|
+
}
|
|
10245
10529
|
function createFolderServerPlugins(options = {}) {
|
|
10246
10530
|
return [
|
|
10247
10531
|
createCalendarPlugin(),
|
|
@@ -10249,14 +10533,63 @@ function createFolderServerPlugins(options = {}) {
|
|
|
10249
10533
|
createAgentsPlugin({
|
|
10250
10534
|
homeDir: options.agentsHomeDir
|
|
10251
10535
|
}),
|
|
10252
|
-
|
|
10536
|
+
createNotesPlugin(),
|
|
10537
|
+
createTasksPlugin(),
|
|
10538
|
+
createProjectsPlugin()
|
|
10253
10539
|
];
|
|
10254
10540
|
}
|
|
10255
10541
|
function folderServerRegistry(options = {}) {
|
|
10256
10542
|
return new Map(createFolderServerPlugins(options).map((plugin) => [plugin.id, plugin]));
|
|
10257
10543
|
}
|
|
10544
|
+
function externalServerEntries() {
|
|
10545
|
+
const source = process.env.KENNEL_EXTERNAL_SERVER_ENTRIES;
|
|
10546
|
+
if (!source)
|
|
10547
|
+
return [];
|
|
10548
|
+
const value = JSON.parse(source);
|
|
10549
|
+
if (!Array.isArray(value))
|
|
10550
|
+
throw new Error("Invalid external plugin server config");
|
|
10551
|
+
return value.map((entry) => {
|
|
10552
|
+
if (!entry || typeof entry !== "object" || Array.isArray(entry))
|
|
10553
|
+
throw new Error("Invalid external plugin server config");
|
|
10554
|
+
const item = entry;
|
|
10555
|
+
if (typeof item.id !== "string" || typeof item.module !== "string" || typeof item.symbol !== "string")
|
|
10556
|
+
throw new Error("Invalid external plugin server config");
|
|
10557
|
+
if (item.trigger !== undefined && typeof item.trigger !== "string")
|
|
10558
|
+
throw new Error("Invalid external plugin server config");
|
|
10559
|
+
return { id: item.id, module: item.module, symbol: item.symbol, trigger: item.trigger };
|
|
10560
|
+
});
|
|
10561
|
+
}
|
|
10562
|
+
async function folderServerRegistryAsync(options = {}) {
|
|
10563
|
+
const registry = folderServerRegistry(options);
|
|
10564
|
+
for (const entry of externalServerEntries()) {
|
|
10565
|
+
if (registry.has(entry.id))
|
|
10566
|
+
throw new Error(`External plugin id collides with core plugin: ${entry.id}`);
|
|
10567
|
+
const imported = await import(pathToFileURL(entry.module).href);
|
|
10568
|
+
const value = imported[entry.symbol];
|
|
10569
|
+
const plugin = typeof value === "function" ? value(options) : value;
|
|
10570
|
+
if (!plugin || typeof plugin !== "object")
|
|
10571
|
+
throw new Error(`External plugin ${entry.id} did not export ${entry.symbol}`);
|
|
10572
|
+
const server = plugin;
|
|
10573
|
+
if (server.id !== entry.id)
|
|
10574
|
+
throw new Error(`External plugin id mismatch: expected ${entry.id}, got ${server.id}`);
|
|
10575
|
+
if (registry.has(server.id))
|
|
10576
|
+
throw new Error(`Duplicate external plugin id: ${server.id}`);
|
|
10577
|
+
const withTrigger = entry.trigger ? {
|
|
10578
|
+
...server,
|
|
10579
|
+
async detect(context) {
|
|
10580
|
+
const detection = await server.detect(context);
|
|
10581
|
+
if (detection.status === "unavailable" && existsSync2(resolve8(context.folder, entry.trigger))) {
|
|
10582
|
+
return { status: "available" };
|
|
10583
|
+
}
|
|
10584
|
+
return detection;
|
|
10585
|
+
}
|
|
10586
|
+
} : server;
|
|
10587
|
+
registry.set(server.id, withTrigger);
|
|
10588
|
+
}
|
|
10589
|
+
return registry;
|
|
10590
|
+
}
|
|
10258
10591
|
async function scaffoldFolderPlugins(folder, options = {}) {
|
|
10259
|
-
const root =
|
|
10592
|
+
const root = resolve8(folder);
|
|
10260
10593
|
const registry = folderServerRegistry(options);
|
|
10261
10594
|
const created = [];
|
|
10262
10595
|
const skipped = [];
|
|
@@ -10267,8 +10600,8 @@ async function scaffoldFolderPlugins(folder, options = {}) {
|
|
|
10267
10600
|
const context = { folder: root };
|
|
10268
10601
|
const result = await plugin.init(context);
|
|
10269
10602
|
const files = result.files.filter((file) => {
|
|
10270
|
-
const target =
|
|
10271
|
-
const contained = target === root || target.startsWith(root +
|
|
10603
|
+
const target = resolve8(root, file.path);
|
|
10604
|
+
const contained = target === root || target.startsWith(root + sep7);
|
|
10272
10605
|
return contained && file.path !== ".";
|
|
10273
10606
|
});
|
|
10274
10607
|
supported.push({
|
|
@@ -10276,15 +10609,15 @@ async function scaffoldFolderPlugins(folder, options = {}) {
|
|
|
10276
10609
|
files: files.map((file) => file.path)
|
|
10277
10610
|
});
|
|
10278
10611
|
for (const file of files) {
|
|
10279
|
-
const target =
|
|
10280
|
-
const exists = await
|
|
10612
|
+
const target = resolve8(root, file.path);
|
|
10613
|
+
const exists = await stat4(target).then(() => true).catch(() => false);
|
|
10281
10614
|
if (exists && !options.force) {
|
|
10282
10615
|
skipped.push({ path: file.path, plugin: plugin.id });
|
|
10283
10616
|
continue;
|
|
10284
10617
|
}
|
|
10285
10618
|
if (options.write === false)
|
|
10286
10619
|
continue;
|
|
10287
|
-
await mkdir3(
|
|
10620
|
+
await mkdir3(dirname7(target), { recursive: true });
|
|
10288
10621
|
await writeFile2(target, file.content);
|
|
10289
10622
|
created.push({ path: file.path, plugin: plugin.id });
|
|
10290
10623
|
}
|
|
@@ -10294,7 +10627,9 @@ async function scaffoldFolderPlugins(folder, options = {}) {
|
|
|
10294
10627
|
export {
|
|
10295
10628
|
scaffoldFolderPlugins,
|
|
10296
10629
|
handleMailApiRoutes,
|
|
10630
|
+
folderServerRegistryAsync,
|
|
10297
10631
|
folderServerRegistry,
|
|
10298
10632
|
createFolderServerPlugins,
|
|
10633
|
+
configuredFolderServerRegistry,
|
|
10299
10634
|
FolderPluginFailure
|
|
10300
10635
|
};
|