studiograph 1.3.48-next.2 → 1.3.48-next.200
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 +26 -16
- package/dist/agent/agent-pool.d.ts +117 -0
- package/dist/agent/agent-pool.js +287 -0
- package/dist/agent/agent-pool.js.map +1 -0
- package/dist/agent/followups.d.ts +34 -0
- package/dist/agent/followups.js +52 -0
- package/dist/agent/followups.js.map +1 -0
- package/dist/agent/orchestrator.d.ts +113 -22
- package/dist/agent/orchestrator.js +574 -181
- package/dist/agent/orchestrator.js.map +1 -1
- package/dist/agent/prompts/entity-types-section.d.ts +42 -0
- package/dist/agent/prompts/entity-types-section.js +96 -0
- package/dist/agent/prompts/entity-types-section.js.map +1 -0
- package/dist/agent/prompts/system.md +147 -69
- package/dist/agent/skill-loader.d.ts +30 -17
- package/dist/agent/skill-loader.js +63 -30
- package/dist/agent/skill-loader.js.map +1 -1
- package/dist/agent/skills/entity-schema.md +77 -433
- package/dist/agent/skills/interview/entity-templates.md +193 -0
- package/dist/agent/skills/interview/question-domains.md +391 -0
- package/dist/agent/skills/interview/skill.md +204 -0
- package/dist/agent/skills/schema-rules.md +54 -0
- package/dist/agent/tools/capture-tools.d.ts +31 -0
- package/dist/agent/tools/capture-tools.js +40 -0
- package/dist/agent/tools/capture-tools.js.map +1 -0
- package/dist/agent/tools/folder-tools.d.ts +47 -0
- package/dist/agent/tools/folder-tools.js +249 -0
- package/dist/agent/tools/folder-tools.js.map +1 -0
- package/dist/agent/tools/fs-tools.d.ts +7 -6
- package/dist/agent/tools/fs-tools.js +5 -4
- package/dist/agent/tools/fs-tools.js.map +1 -1
- package/dist/agent/tools/graph-tools.d.ts +21 -58
- package/dist/agent/tools/graph-tools.js +673 -333
- package/dist/agent/tools/graph-tools.js.map +1 -1
- package/dist/agent/tools/history-tools.d.ts +95 -0
- package/dist/agent/tools/history-tools.js +461 -0
- package/dist/agent/tools/history-tools.js.map +1 -0
- package/dist/agent/tools/load-skill.d.ts +6 -5
- package/dist/agent/tools/load-skill.js +3 -3
- package/dist/agent/tools/load-skill.js.map +1 -1
- package/dist/agent/tools/ops-tools.d.ts +5 -4
- package/dist/agent/tools/ops-tools.js +130 -236
- package/dist/agent/tools/ops-tools.js.map +1 -1
- package/dist/agent/tools/permission-tools.d.ts +87 -17
- package/dist/agent/tools/permission-tools.js +233 -38
- package/dist/agent/tools/permission-tools.js.map +1 -1
- package/dist/agent/tools/tool-loader.js +5 -4
- package/dist/agent/tools/tool-loader.js.map +1 -1
- package/dist/agent/tools/web-tools.js +58 -9
- package/dist/agent/tools/web-tools.js.map +1 -1
- package/dist/cli/commands/about.d.ts +1 -0
- package/dist/cli/commands/about.js +55 -3
- package/dist/cli/commands/about.js.map +1 -1
- package/dist/cli/commands/admin/audit-workspace.d.ts +23 -0
- package/dist/cli/commands/admin/audit-workspace.js +133 -0
- package/dist/cli/commands/admin/audit-workspace.js.map +1 -0
- package/dist/cli/commands/admin/audit.d.ts +21 -0
- package/dist/cli/commands/admin/audit.js +174 -0
- package/dist/cli/commands/admin/audit.js.map +1 -0
- package/dist/cli/commands/admin/backup.d.ts +54 -0
- package/dist/cli/commands/admin/backup.js +207 -0
- package/dist/cli/commands/admin/backup.js.map +1 -0
- package/dist/cli/commands/admin/folder.d.ts +11 -0
- package/dist/cli/commands/admin/folder.js +186 -0
- package/dist/cli/commands/admin/folder.js.map +1 -0
- package/dist/cli/commands/admin/index.d.ts +16 -0
- package/dist/cli/commands/admin/index.js +46 -0
- package/dist/cli/commands/admin/index.js.map +1 -0
- package/dist/cli/commands/admin/migrate-assets.d.ts +53 -0
- package/dist/cli/commands/admin/migrate-assets.js +184 -0
- package/dist/cli/commands/admin/migrate-assets.js.map +1 -0
- package/dist/cli/commands/admin/migrate.d.ts +56 -0
- package/dist/cli/commands/admin/migrate.js +263 -0
- package/dist/cli/commands/admin/migrate.js.map +1 -0
- package/dist/cli/commands/admin/restore.d.ts +24 -0
- package/dist/cli/commands/admin/restore.js +228 -0
- package/dist/cli/commands/admin/restore.js.map +1 -0
- package/dist/cli/commands/admin/secrets.d.ts +23 -0
- package/dist/cli/commands/admin/secrets.js +256 -0
- package/dist/cli/commands/admin/secrets.js.map +1 -0
- package/dist/cli/commands/admin/settings.d.ts +28 -0
- package/dist/cli/commands/admin/settings.js +284 -0
- package/dist/cli/commands/admin/settings.js.map +1 -0
- package/dist/cli/commands/admin/token.d.ts +42 -0
- package/dist/cli/commands/admin/token.js +126 -0
- package/dist/cli/commands/admin/token.js.map +1 -0
- package/dist/cli/commands/admin/transfer-ownership.d.ts +15 -0
- package/dist/cli/commands/admin/transfer-ownership.js +106 -0
- package/dist/cli/commands/admin/transfer-ownership.js.map +1 -0
- package/dist/cli/commands/admin/user.d.ts +11 -0
- package/dist/cli/commands/admin/user.js +187 -0
- package/dist/cli/commands/admin/user.js.map +1 -0
- package/dist/cli/commands/clone.d.ts +25 -3
- package/dist/cli/commands/clone.js +142 -36
- package/dist/cli/commands/clone.js.map +1 -1
- package/dist/cli/commands/commit.d.ts +1 -1
- package/dist/cli/commands/commit.js +24 -11
- package/dist/cli/commands/commit.js.map +1 -1
- package/dist/cli/commands/config.d.ts +23 -107
- package/dist/cli/commands/config.js +52 -260
- package/dist/cli/commands/config.js.map +1 -1
- package/dist/cli/commands/connector.d.ts +10 -13
- package/dist/cli/commands/connector.js +16 -58
- package/dist/cli/commands/connector.js.map +1 -1
- package/dist/cli/commands/deploy.js +215 -68
- package/dist/cli/commands/deploy.js.map +1 -1
- package/dist/cli/commands/index.js +2 -2
- package/dist/cli/commands/index.js.map +1 -1
- package/dist/cli/commands/init.js +10 -30
- package/dist/cli/commands/init.js.map +1 -1
- package/dist/cli/commands/mcp.js +12 -4
- package/dist/cli/commands/mcp.js.map +1 -1
- package/dist/cli/commands/orphans.js +14 -30
- package/dist/cli/commands/orphans.js.map +1 -1
- package/dist/cli/commands/r2.d.ts +3 -0
- package/dist/cli/commands/r2.js +223 -204
- package/dist/cli/commands/r2.js.map +1 -1
- package/dist/cli/commands/redeploy.js +65 -12
- package/dist/cli/commands/redeploy.js.map +1 -1
- package/dist/cli/commands/reset.d.ts +22 -6
- package/dist/cli/commands/reset.js +142 -63
- package/dist/cli/commands/reset.js.map +1 -1
- package/dist/cli/commands/serve.js +218 -24
- package/dist/cli/commands/serve.js.map +1 -1
- package/dist/cli/commands/sync.d.ts +1 -1
- package/dist/cli/commands/sync.js +372 -202
- package/dist/cli/commands/sync.js.map +1 -1
- package/dist/cli/crypto-bundle.d.ts +39 -0
- package/dist/cli/crypto-bundle.js +94 -0
- package/dist/cli/crypto-bundle.js.map +1 -0
- package/dist/cli/index.js +24 -35
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/railway-pin.d.ts +68 -0
- package/dist/cli/railway-pin.js +96 -0
- package/dist/cli/railway-pin.js.map +1 -0
- package/dist/cli/railway-provisioning.d.ts +53 -0
- package/dist/cli/railway-provisioning.js +85 -0
- package/dist/cli/railway-provisioning.js.map +1 -0
- package/dist/cli/setup-wizard.d.ts +33 -52
- package/dist/cli/setup-wizard.js +43 -68
- package/dist/cli/setup-wizard.js.map +1 -1
- package/dist/core/accent-palette.d.ts +22 -0
- package/dist/core/accent-palette.js +47 -0
- package/dist/core/accent-palette.js.map +1 -0
- package/dist/core/cell-anchor.d.ts +29 -0
- package/dist/core/cell-anchor.js +53 -0
- package/dist/core/cell-anchor.js.map +1 -0
- package/dist/core/comment-anchor.d.ts +41 -0
- package/dist/core/comment-anchor.js +147 -0
- package/dist/core/comment-anchor.js.map +1 -0
- package/dist/core/commit-messages.d.ts +57 -0
- package/dist/core/commit-messages.js +85 -0
- package/dist/core/commit-messages.js.map +1 -0
- package/dist/core/embeds.d.ts +77 -0
- package/dist/core/embeds.js +147 -0
- package/dist/core/embeds.js.map +1 -0
- package/dist/core/entity-body-templates.d.ts +21 -0
- package/dist/core/entity-body-templates.js +53 -0
- package/dist/core/entity-body-templates.js.map +1 -0
- package/dist/core/entity-types-catalog.d.ts +65 -0
- package/dist/core/entity-types-catalog.js +142 -0
- package/dist/core/entity-types-catalog.js.map +1 -0
- package/dist/core/folder-paths.d.ts +41 -0
- package/dist/core/folder-paths.js +95 -0
- package/dist/core/folder-paths.js.map +1 -0
- package/dist/core/folder-sidecar.d.ts +36 -0
- package/dist/core/folder-sidecar.js +91 -0
- package/dist/core/folder-sidecar.js.map +1 -0
- package/dist/core/format-registry.d.ts +170 -0
- package/dist/core/format-registry.js +404 -0
- package/dist/core/format-registry.js.map +1 -0
- package/dist/core/graph.d.ts +731 -14
- package/dist/core/graph.js +2238 -313
- package/dist/core/graph.js.map +1 -1
- package/dist/core/history-diff.d.ts +35 -0
- package/dist/core/history-diff.js +114 -0
- package/dist/core/history-diff.js.map +1 -0
- package/dist/core/refs.d.ts +41 -0
- package/dist/core/refs.js +80 -0
- package/dist/core/refs.js.map +1 -0
- package/dist/core/schema-registry.d.ts +82 -0
- package/dist/core/schema-registry.js +238 -0
- package/dist/core/schema-registry.js.map +1 -1
- package/dist/core/schemas/connector.d.ts +67 -0
- package/dist/core/schemas/connector.js +100 -0
- package/dist/core/schemas/connector.js.map +1 -0
- package/dist/core/schemas/workspace.d.ts +122 -0
- package/dist/core/schemas/workspace.js +211 -0
- package/dist/core/schemas/workspace.js.map +1 -0
- package/dist/core/secrets/SecretStore.d.ts +77 -0
- package/dist/core/secrets/SecretStore.js +13 -0
- package/dist/core/secrets/SecretStore.js.map +1 -0
- package/dist/core/secrets/SettingsResolver.d.ts +54 -0
- package/dist/core/secrets/SettingsResolver.js +80 -0
- package/dist/core/secrets/SettingsResolver.js.map +1 -0
- package/dist/core/secrets/SettingsStore.d.ts +30 -0
- package/dist/core/secrets/SettingsStore.js +9 -0
- package/dist/core/secrets/SettingsStore.js.map +1 -0
- package/dist/core/secrets/SqliteEncryptedStore.d.ts +90 -0
- package/dist/core/secrets/SqliteEncryptedStore.js +598 -0
- package/dist/core/secrets/SqliteEncryptedStore.js.map +1 -0
- package/dist/core/secrets/audit.d.ts +36 -0
- package/dist/core/secrets/audit.js +60 -0
- package/dist/core/secrets/audit.js.map +1 -0
- package/dist/core/secrets/auth-db-migration.d.ts +129 -0
- package/dist/core/secrets/auth-db-migration.js +653 -0
- package/dist/core/secrets/auth-db-migration.js.map +1 -0
- package/dist/core/secrets/bundle.d.ts +141 -0
- package/dist/core/secrets/bundle.js +435 -0
- package/dist/core/secrets/bundle.js.map +1 -0
- package/dist/core/secrets/dual-write.d.ts +81 -0
- package/dist/core/secrets/dual-write.js +247 -0
- package/dist/core/secrets/dual-write.js.map +1 -0
- package/dist/core/secrets/encryption.d.ts +44 -0
- package/dist/core/secrets/encryption.js +97 -0
- package/dist/core/secrets/encryption.js.map +1 -0
- package/dist/core/secrets/index.d.ts +49 -0
- package/dist/core/secrets/index.js +74 -0
- package/dist/core/secrets/index.js.map +1 -0
- package/dist/core/secrets/master-key.d.ts +38 -0
- package/dist/core/secrets/master-key.js +122 -0
- package/dist/core/secrets/master-key.js.map +1 -0
- package/dist/core/secrets/probes/anthropic.d.ts +98 -0
- package/dist/core/secrets/probes/anthropic.js +300 -0
- package/dist/core/secrets/probes/anthropic.js.map +1 -0
- package/dist/core/secrets/probes/brave.d.ts +9 -0
- package/dist/core/secrets/probes/brave.js +15 -0
- package/dist/core/secrets/probes/brave.js.map +1 -0
- package/dist/core/secrets/probes/r2.d.ts +15 -0
- package/dist/core/secrets/probes/r2.js +14 -0
- package/dist/core/secrets/probes/r2.js.map +1 -0
- package/dist/core/secrets/probes/tavily.d.ts +18 -0
- package/dist/core/secrets/probes/tavily.js +58 -0
- package/dist/core/secrets/probes/tavily.js.map +1 -0
- package/dist/core/secrets/probes/voyage.d.ts +13 -0
- package/dist/core/secrets/probes/voyage.js +52 -0
- package/dist/core/secrets/probes/voyage.js.map +1 -0
- package/dist/core/secrets/r2-structural-migration.d.ts +39 -0
- package/dist/core/secrets/r2-structural-migration.js +109 -0
- package/dist/core/secrets/r2-structural-migration.js.map +1 -0
- package/dist/core/secrets/read-flip.d.ts +59 -0
- package/dist/core/secrets/read-flip.js +87 -0
- package/dist/core/secrets/read-flip.js.map +1 -0
- package/dist/core/secrets/registry.d.ts +188 -0
- package/dist/core/secrets/registry.js +616 -0
- package/dist/core/secrets/registry.js.map +1 -0
- package/dist/core/types.d.ts +80 -475
- package/dist/core/types.js +27 -3
- package/dist/core/types.js.map +1 -1
- package/dist/core/user-config.d.ts +75 -7
- package/dist/core/user-config.js +155 -7
- package/dist/core/user-config.js.map +1 -1
- package/dist/core/validation.d.ts +767 -1777
- package/dist/core/validation.js +463 -227
- package/dist/core/validation.js.map +1 -1
- package/dist/core/workspace-manager.d.ts +89 -12
- package/dist/core/workspace-manager.js +225 -73
- package/dist/core/workspace-manager.js.map +1 -1
- package/dist/core/workspace.d.ts +19 -5
- package/dist/core/workspace.js +69 -35
- package/dist/core/workspace.js.map +1 -1
- package/dist/mcp/comment-virtual-entity.d.ts +36 -0
- package/dist/mcp/comment-virtual-entity.js +71 -0
- package/dist/mcp/comment-virtual-entity.js.map +1 -0
- package/dist/mcp/connector-manager.d.ts +94 -13
- package/dist/mcp/connector-manager.js +283 -62
- package/dist/mcp/connector-manager.js.map +1 -1
- package/dist/mcp/oauth-provider.d.ts +27 -33
- package/dist/mcp/oauth-provider.js +65 -134
- package/dist/mcp/oauth-provider.js.map +1 -1
- package/dist/mcp/oauth-registry.d.ts +62 -0
- package/dist/mcp/oauth-registry.js +85 -0
- package/dist/mcp/oauth-registry.js.map +1 -0
- package/dist/mcp/server.d.ts +11 -3
- package/dist/mcp/server.js +30 -5
- package/dist/mcp/server.js.map +1 -1
- package/dist/mcp/state-signer.d.ts +62 -0
- package/dist/mcp/state-signer.js +205 -0
- package/dist/mcp/state-signer.js.map +1 -0
- package/dist/mcp/tools.d.ts +35 -2
- package/dist/mcp/tools.js +1366 -112
- package/dist/mcp/tools.js.map +1 -1
- package/dist/server/__tests__/helpers/graph-api.d.ts +16 -0
- package/dist/server/__tests__/helpers/graph-api.js +16 -0
- package/dist/server/__tests__/helpers/graph-api.js.map +1 -0
- package/dist/server/asset-index-queue.d.ts +96 -0
- package/dist/server/asset-index-queue.js +191 -0
- package/dist/server/asset-index-queue.js.map +1 -0
- package/dist/server/body-write-coordinator.d.ts +151 -0
- package/dist/server/body-write-coordinator.js +161 -0
- package/dist/server/body-write-coordinator.js.map +1 -0
- package/dist/server/cloud-billing-flow.d.ts +32 -0
- package/dist/server/cloud-billing-flow.js +75 -0
- package/dist/server/cloud-billing-flow.js.map +1 -0
- package/dist/server/commit-audit.d.ts +26 -0
- package/dist/server/commit-audit.js +30 -0
- package/dist/server/commit-audit.js.map +1 -0
- package/dist/server/index.d.ts +22 -3
- package/dist/server/index.js +622 -198
- package/dist/server/index.js.map +1 -1
- package/dist/server/middleware/sanitize.d.ts +46 -0
- package/dist/server/middleware/sanitize.js +171 -0
- package/dist/server/middleware/sanitize.js.map +1 -0
- package/dist/server/routes/asset-api.d.ts +31 -0
- package/dist/server/routes/asset-api.js +593 -0
- package/dist/server/routes/asset-api.js.map +1 -0
- package/dist/server/routes/audit-api.d.ts +24 -0
- package/dist/server/routes/audit-api.js +117 -0
- package/dist/server/routes/audit-api.js.map +1 -0
- package/dist/server/routes/auth-api.d.ts +3 -2
- package/dist/server/routes/auth-api.js +573 -39
- package/dist/server/routes/auth-api.js.map +1 -1
- package/dist/server/routes/capture-api.d.ts +18 -0
- package/dist/server/routes/capture-api.js +257 -0
- package/dist/server/routes/capture-api.js.map +1 -0
- package/dist/server/routes/chat-sessions-api.d.ts +9 -0
- package/dist/server/routes/chat-sessions-api.js +121 -0
- package/dist/server/routes/chat-sessions-api.js.map +1 -0
- package/dist/server/routes/chat.d.ts +12 -1
- package/dist/server/routes/chat.js +318 -88
- package/dist/server/routes/chat.js.map +1 -1
- package/dist/server/routes/comments-api.d.ts +15 -0
- package/dist/server/routes/comments-api.js +444 -0
- package/dist/server/routes/comments-api.js.map +1 -0
- package/dist/server/routes/config-api.d.ts +21 -0
- package/dist/server/routes/config-api.js +256 -0
- package/dist/server/routes/config-api.js.map +1 -0
- package/dist/server/routes/connectors-api.d.ts +17 -0
- package/dist/server/routes/connectors-api.js +410 -0
- package/dist/server/routes/connectors-api.js.map +1 -0
- package/dist/server/routes/event-ingest-api.d.ts +15 -0
- package/dist/server/routes/event-ingest-api.js +125 -0
- package/dist/server/routes/event-ingest-api.js.map +1 -0
- package/dist/server/routes/git-http.d.ts +3 -3
- package/dist/server/routes/git-http.js +86 -38
- package/dist/server/routes/git-http.js.map +1 -1
- package/dist/server/routes/graph-api-access.d.ts +57 -0
- package/dist/server/routes/graph-api-access.js +112 -0
- package/dist/server/routes/graph-api-access.js.map +1 -0
- package/dist/server/routes/graph-api.d.ts +1 -1
- package/dist/server/routes/graph-api.js +1519 -263
- package/dist/server/routes/graph-api.js.map +1 -1
- package/dist/server/routes/health.d.ts +18 -0
- package/dist/server/routes/health.js +74 -0
- package/dist/server/routes/health.js.map +1 -0
- package/dist/server/routes/import-batch.d.ts +24 -0
- package/dist/server/routes/import-batch.js +33 -0
- package/dist/server/routes/import-batch.js.map +1 -0
- package/dist/server/routes/insights-api.d.ts +9 -2
- package/dist/server/routes/insights-api.js +384 -38
- package/dist/server/routes/insights-api.js.map +1 -1
- package/dist/server/routes/mcp.d.ts +7 -3
- package/dist/server/routes/mcp.js +22 -6
- package/dist/server/routes/mcp.js.map +1 -1
- package/dist/server/routes/oauth-api.d.ts +67 -0
- package/dist/server/routes/oauth-api.js +421 -0
- package/dist/server/routes/oauth-api.js.map +1 -0
- package/dist/server/routes/permissions-api.d.ts +9 -2
- package/dist/server/routes/permissions-api.js +87 -30
- package/dist/server/routes/permissions-api.js.map +1 -1
- package/dist/server/routes/r2-api.d.ts +25 -0
- package/dist/server/routes/r2-api.js +276 -0
- package/dist/server/routes/r2-api.js.map +1 -0
- package/dist/server/routes/secrets-api.d.ts +36 -0
- package/dist/server/routes/secrets-api.js +308 -0
- package/dist/server/routes/secrets-api.js.map +1 -0
- package/dist/server/routes/settings-api.d.ts +29 -0
- package/dist/server/routes/settings-api.js +180 -0
- package/dist/server/routes/settings-api.js.map +1 -0
- package/dist/server/routes/share-api.d.ts +32 -0
- package/dist/server/routes/share-api.js +234 -0
- package/dist/server/routes/share-api.js.map +1 -0
- package/dist/server/routes/url-api.d.ts +7 -0
- package/dist/server/routes/url-api.js +74 -0
- package/dist/server/routes/url-api.js.map +1 -0
- package/dist/server/routes/views-api.js +75 -7
- package/dist/server/routes/views-api.js.map +1 -1
- package/dist/server/routes/workspace-api.d.ts +2 -1
- package/dist/server/routes/workspace-api.js +129 -35
- package/dist/server/routes/workspace-api.js.map +1 -1
- package/dist/server/routes/ws.d.ts +2 -1
- package/dist/server/routes/ws.js +68 -16
- package/dist/server/routes/ws.js.map +1 -1
- package/dist/server/session-manager.d.ts +48 -5
- package/dist/server/session-manager.js +182 -15
- package/dist/server/session-manager.js.map +1 -1
- package/dist/server/ws-hub.d.ts +138 -14
- package/dist/server/ws-hub.js +0 -0
- package/dist/server/ws-hub.js.map +1 -1
- package/dist/server/yjs-manager.d.ts +285 -7
- package/dist/server/yjs-manager.js +907 -36
- package/dist/server/yjs-manager.js.map +1 -1
- package/dist/server/yjs-persistence.d.ts +165 -0
- package/dist/server/yjs-persistence.js +557 -0
- package/dist/server/yjs-persistence.js.map +1 -0
- package/dist/server/yjs-text-diff.d.ts +32 -0
- package/dist/server/yjs-text-diff.js +61 -0
- package/dist/server/yjs-text-diff.js.map +1 -0
- package/dist/services/access-control.d.ts +73 -0
- package/dist/services/access-control.js +165 -0
- package/dist/services/access-control.js.map +1 -0
- package/dist/services/asset-caption-service.d.ts +102 -0
- package/dist/services/asset-caption-service.js +184 -0
- package/dist/services/asset-caption-service.js.map +1 -0
- package/dist/services/asset-delete-authz.d.ts +31 -0
- package/dist/services/asset-delete-authz.js +61 -0
- package/dist/services/asset-delete-authz.js.map +1 -0
- package/dist/services/asset-finalize-service.d.ts +58 -0
- package/dist/services/asset-finalize-service.js +205 -0
- package/dist/services/asset-finalize-service.js.map +1 -0
- package/dist/services/asset-import-service.d.ts +111 -0
- package/dist/services/asset-import-service.js +394 -0
- package/dist/services/asset-import-service.js.map +1 -0
- package/dist/services/asset-index-sweep.d.ts +92 -0
- package/dist/services/asset-index-sweep.js +258 -0
- package/dist/services/asset-index-sweep.js.map +1 -0
- package/dist/services/asset-lifecycle-check.d.ts +22 -0
- package/dist/services/asset-lifecycle-check.js +80 -0
- package/dist/services/asset-lifecycle-check.js.map +1 -0
- package/dist/services/asset-listing.d.ts +72 -0
- package/dist/services/asset-listing.js +321 -0
- package/dist/services/asset-listing.js.map +1 -0
- package/dist/services/asset-presign-service.d.ts +68 -0
- package/dist/services/asset-presign-service.js +124 -0
- package/dist/services/asset-presign-service.js.map +1 -0
- package/dist/services/asset-sidecar-service.d.ts +30 -0
- package/dist/services/asset-sidecar-service.js +96 -0
- package/dist/services/asset-sidecar-service.js.map +1 -0
- package/dist/services/asset-upload-errors.d.ts +41 -0
- package/dist/services/asset-upload-errors.js +45 -0
- package/dist/services/asset-upload-errors.js.map +1 -0
- package/dist/services/asset-upload-service.d.ts +74 -0
- package/dist/services/asset-upload-service.js +244 -0
- package/dist/services/asset-upload-service.js.map +1 -0
- package/dist/services/asset-upload-token.d.ts +58 -0
- package/dist/services/asset-upload-token.js +75 -0
- package/dist/services/asset-upload-token.js.map +1 -0
- package/dist/services/assets/asset-index-service.d.ts +127 -0
- package/dist/services/assets/asset-index-service.js +227 -0
- package/dist/services/assets/asset-index-service.js.map +1 -0
- package/dist/services/assets/base.d.ts +118 -1
- package/dist/services/assets/base.js +77 -1
- package/dist/services/assets/base.js.map +1 -1
- package/dist/services/assets/index.d.ts +103 -1
- package/dist/services/assets/index.js +192 -0
- package/dist/services/assets/index.js.map +1 -1
- package/dist/services/assets/local.d.ts +16 -1
- package/dist/services/assets/local.js +110 -1
- package/dist/services/assets/local.js.map +1 -1
- package/dist/services/assets/r2-sync.d.ts +88 -0
- package/dist/services/assets/r2-sync.js +412 -0
- package/dist/services/assets/r2-sync.js.map +1 -0
- package/dist/services/assets/r2.d.ts +87 -1
- package/dist/services/assets/r2.js +203 -1
- package/dist/services/assets/r2.js.map +1 -1
- package/dist/services/auth-service.d.ts +350 -36
- package/dist/services/auth-service.js +1179 -140
- package/dist/services/auth-service.js.map +1 -1
- package/dist/services/bookmark-import-service.d.ts +49 -0
- package/dist/services/bookmark-import-service.js +250 -0
- package/dist/services/bookmark-import-service.js.map +1 -0
- package/dist/services/chat-session-service.d.ts +96 -0
- package/dist/services/chat-session-service.js +316 -0
- package/dist/services/chat-session-service.js.map +1 -0
- package/dist/services/cloud-inference-billing.d.ts +64 -0
- package/dist/services/cloud-inference-billing.js +313 -0
- package/dist/services/cloud-inference-billing.js.map +1 -0
- package/dist/services/comment-service.d.ts +97 -0
- package/dist/services/comment-service.js +341 -0
- package/dist/services/comment-service.js.map +1 -0
- package/dist/services/convert-service.d.ts +64 -0
- package/dist/services/convert-service.js +68 -0
- package/dist/services/convert-service.js.map +1 -0
- package/dist/services/csv-service.d.ts +22 -17
- package/dist/services/csv-service.js +55 -92
- package/dist/services/csv-service.js.map +1 -1
- package/dist/services/entity-mutations.d.ts +210 -0
- package/dist/services/entity-mutations.js +377 -0
- package/dist/services/entity-mutations.js.map +1 -0
- package/dist/services/event-processor.d.ts +104 -0
- package/dist/services/event-processor.js +441 -0
- package/dist/services/event-processor.js.map +1 -0
- package/dist/services/extract/docx.d.ts +1 -0
- package/dist/services/extract/docx.js +233 -0
- package/dist/services/extract/docx.js.map +1 -0
- package/dist/services/extract/index.d.ts +9 -0
- package/dist/services/extract/index.js +10 -0
- package/dist/services/extract/index.js.map +1 -0
- package/dist/services/extract/pdf.d.ts +13 -0
- package/dist/services/extract/pdf.js +69 -0
- package/dist/services/extract/pdf.js.map +1 -0
- package/dist/services/folder-creation.d.ts +33 -0
- package/dist/services/folder-creation.js +103 -0
- package/dist/services/folder-creation.js.map +1 -0
- package/dist/services/git.d.ts +54 -0
- package/dist/services/git.js +188 -54
- package/dist/services/git.js.map +1 -1
- package/dist/services/graph-maintenance.d.ts +42 -0
- package/dist/services/graph-maintenance.js +143 -0
- package/dist/services/graph-maintenance.js.map +1 -0
- package/dist/services/import-service.d.ts +58 -3
- package/dist/services/import-service.js +316 -100
- package/dist/services/import-service.js.map +1 -1
- package/dist/services/lint-service.js +10 -17
- package/dist/services/lint-service.js.map +1 -1
- package/dist/services/markdown.d.ts +12 -1
- package/dist/services/markdown.js +77 -9
- package/dist/services/markdown.js.map +1 -1
- package/dist/services/memory-service.d.ts +22 -14
- package/dist/services/memory-service.js +53 -35
- package/dist/services/memory-service.js.map +1 -1
- package/dist/services/mention-detector.d.ts +23 -0
- package/dist/services/mention-detector.js +47 -0
- package/dist/services/mention-detector.js.map +1 -0
- package/dist/services/model-capabilities.d.ts +41 -0
- package/dist/services/model-capabilities.js +107 -0
- package/dist/services/model-capabilities.js.map +1 -0
- package/dist/services/notification-broadcast.d.ts +32 -0
- package/dist/services/notification-broadcast.js +38 -0
- package/dist/services/notification-broadcast.js.map +1 -0
- package/dist/services/notification-service.d.ts +41 -0
- package/dist/services/notification-service.js +100 -0
- package/dist/services/notification-service.js.map +1 -0
- package/dist/services/oauth-server-store.d.ts +147 -0
- package/dist/services/oauth-server-store.js +319 -0
- package/dist/services/oauth-server-store.js.map +1 -0
- package/dist/services/orphan-service.js +2 -2
- package/dist/services/orphan-service.js.map +1 -1
- package/dist/services/personal-folder.d.ts +40 -0
- package/dist/services/personal-folder.js +101 -0
- package/dist/services/personal-folder.js.map +1 -0
- package/dist/services/share-link-service.d.ts +57 -0
- package/dist/services/share-link-service.js +142 -0
- package/dist/services/share-link-service.js.map +1 -0
- package/dist/services/user-person-bridge.d.ts +136 -0
- package/dist/services/user-person-bridge.js +340 -0
- package/dist/services/user-person-bridge.js.map +1 -0
- package/dist/services/vector-service.d.ts +260 -6
- package/dist/services/vector-service.js +574 -31
- package/dist/services/vector-service.js.map +1 -1
- package/dist/services/workspace-access.d.ts +108 -0
- package/dist/services/workspace-access.js +149 -0
- package/dist/services/workspace-access.js.map +1 -0
- package/dist/services/workspace-assets-folder.d.ts +46 -0
- package/dist/services/workspace-assets-folder.js +75 -0
- package/dist/services/workspace-assets-folder.js.map +1 -0
- package/dist/utils/git.d.ts +17 -2
- package/dist/utils/git.js +23 -7
- package/dist/utils/git.js.map +1 -1
- package/dist/utils/log.d.ts +42 -0
- package/dist/utils/log.js +137 -0
- package/dist/utils/log.js.map +1 -0
- package/dist/utils/preflight.js +2 -2
- package/dist/utils/preflight.js.map +1 -1
- package/dist/utils/version-checker.d.ts +12 -19
- package/dist/utils/version-checker.js +14 -104
- package/dist/utils/version-checker.js.map +1 -1
- package/dist/web/_app/immutable/assets/0.BZHoBJEc.css +2 -0
- package/dist/web/_app/immutable/assets/12.DlIf1mKh.css +1 -0
- package/dist/web/_app/immutable/assets/13.7d-Q37wc.css +1 -0
- package/dist/web/_app/immutable/assets/14.BwBFdc1D.css +1 -0
- package/dist/web/_app/immutable/assets/15.CmLrbzZp.css +1 -0
- package/dist/web/_app/immutable/assets/16.B0GwXar3.css +1 -0
- package/dist/web/_app/immutable/assets/2.C9Vt4JHy.css +1 -0
- package/dist/web/_app/immutable/assets/3.BFvgCYSk.css +1 -0
- package/dist/web/_app/immutable/assets/4.B5mExQRc.css +1 -0
- package/dist/web/_app/immutable/assets/5.C6MySjPq.css +1 -0
- package/dist/web/_app/immutable/assets/BulkActionsBar.Bx7nxMjH.css +1 -0
- package/dist/web/_app/immutable/assets/CalendarView.lBCvS3X5.css +1 -0
- package/dist/web/_app/immutable/assets/CodeMirrorEditor.D6hf2pNJ.css +1 -0
- package/dist/web/_app/immutable/assets/CopyField.DVGZtw4U.css +1 -0
- package/dist/web/_app/immutable/assets/FolderMembersPanel.DX1oBeF_.css +1 -0
- package/dist/web/_app/immutable/assets/FolderMutationDialogs.D2B7KrRn.css +1 -0
- package/dist/web/_app/immutable/assets/FolderPicker.B5KdvRYl.css +1 -0
- package/dist/web/_app/immutable/assets/GalleryView.CF48FWYQ.css +1 -0
- package/dist/web/_app/immutable/assets/GraphView.BJtGL9py.css +1 -0
- package/dist/web/_app/immutable/assets/KanbanView.BOaI5KFL.css +1 -0
- package/dist/web/_app/immutable/assets/Link.vV0ne105.css +1 -0
- package/dist/web/_app/immutable/assets/Markdown.BqgpZCv5.css +1 -0
- package/dist/web/_app/immutable/assets/Rail.f8lsriOT.css +1 -0
- package/dist/web/_app/immutable/assets/SettingsDialog.DwMus2u2.css +1 -0
- package/dist/web/_app/immutable/assets/Spinner.UBfl0pab.css +1 -0
- package/dist/web/_app/immutable/assets/StopFilledAlt.fNlDN65D.css +1 -0
- package/dist/web/_app/immutable/assets/TimelineView.DriOGAKB.css +1 -0
- package/dist/web/_app/immutable/assets/WorkspaceView.u5VdwRR6.css +1 -0
- package/dist/web/_app/immutable/assets/button.BlLm4Dg1.css +1 -0
- package/dist/web/_app/immutable/assets/checkbox.DK0MgYgb.css +1 -0
- package/dist/web/_app/immutable/assets/dist.DDCWxn3B.css +1 -0
- package/dist/web/_app/immutable/assets/ibm-plex-mono-latin-400-normal.CvHOgSBP.woff +0 -0
- package/dist/web/_app/immutable/assets/ibm-plex-mono-latin-400-normal.DMJ8VG8y.woff2 +0 -0
- package/dist/web/_app/immutable/assets/ibm-plex-mono-latin-500-normal.CB9ihrfo.woff +0 -0
- package/dist/web/_app/immutable/assets/ibm-plex-mono-latin-500-normal.DSY6xOcd.woff2 +0 -0
- package/dist/web/_app/immutable/assets/ibm-plex-sans-latin-400-italic.CZTNEAuW.woff2 +0 -0
- package/dist/web/_app/immutable/assets/ibm-plex-sans-latin-400-italic.CsGl1sm0.woff +0 -0
- package/dist/web/_app/immutable/assets/ibm-plex-sans-latin-400-normal.CDDApCn2.woff2 +0 -0
- package/dist/web/_app/immutable/assets/ibm-plex-sans-latin-400-normal.CYLoc0-x.woff +0 -0
- package/dist/web/_app/immutable/assets/ibm-plex-sans-latin-500-italic.BNK2_mGO.woff2 +0 -0
- package/dist/web/_app/immutable/assets/ibm-plex-sans-latin-500-italic.DpEwFAQM.woff +0 -0
- package/dist/web/_app/immutable/assets/ibm-plex-sans-latin-500-normal.6ng42L7E.woff2 +0 -0
- package/dist/web/_app/immutable/assets/ibm-plex-sans-latin-500-normal.BgVn5rGT.woff +0 -0
- package/dist/web/_app/immutable/assets/ibm-plex-sans-latin-600-normal.Cu4Hd6ag.woff +0 -0
- package/dist/web/_app/immutable/assets/ibm-plex-sans-latin-600-normal.CuJfVYMP.woff2 +0 -0
- package/dist/web/_app/immutable/assets/inline-list.cqga56xT.css +1 -0
- package/dist/web/_app/immutable/assets/list-columns.DiLB0G5L.css +1 -0
- package/dist/web/_app/immutable/assets/select.BFL238eD.css +1 -0
- package/dist/web/_app/immutable/assets/sheet.4rY4hpfJ.css +1 -0
- package/dist/web/_app/immutable/chunks/-XvFB-zz2.js +2 -0
- package/dist/web/_app/immutable/chunks/-oRd_ir9.js +1 -0
- package/dist/web/_app/immutable/chunks/4XSri7g0.js +1 -0
- package/dist/web/_app/immutable/chunks/4iaT0dG72.js +1 -0
- package/dist/web/_app/immutable/chunks/5_TKU9QS2.js +1 -0
- package/dist/web/_app/immutable/chunks/6-29uWv0.js +1 -0
- package/dist/web/_app/immutable/chunks/8Yh26Z9_2.js +1 -0
- package/dist/web/_app/immutable/chunks/8q1f96y1.js +1 -0
- package/dist/web/_app/immutable/chunks/B-Z_xZy_.js +4 -0
- package/dist/web/_app/immutable/chunks/B1RnjnNt.js +1 -0
- package/dist/web/_app/immutable/chunks/B21rwvCB.js +1 -0
- package/dist/web/_app/immutable/chunks/B2n86UNJ.js +1 -0
- package/dist/web/_app/immutable/chunks/B318GEUB2.js +1 -0
- package/dist/web/_app/immutable/chunks/B6Lt-qaJ.js +1 -0
- package/dist/web/_app/immutable/chunks/BADt8daH.js +2 -0
- package/dist/web/_app/immutable/chunks/BBGt-XQo.js +3 -0
- package/dist/web/_app/immutable/chunks/BCCSYbMx.js +2 -0
- package/dist/web/_app/immutable/chunks/BDIUHcEz.js +1 -0
- package/dist/web/_app/immutable/chunks/BDSuq3KH.js +1 -0
- package/dist/web/_app/immutable/chunks/BGiLU5VN.js +1 -0
- package/dist/web/_app/immutable/chunks/BJgOZTHR.js +1 -0
- package/dist/web/_app/immutable/chunks/BN8IRueA2.js +1 -0
- package/dist/web/_app/immutable/chunks/BRRoo378.js +2 -0
- package/dist/web/_app/immutable/chunks/BVPNAzAK.js +1 -0
- package/dist/web/_app/immutable/chunks/BZ7qh0of.js +1 -0
- package/dist/web/_app/immutable/chunks/BaMo5OWI.js +1 -0
- package/dist/web/_app/immutable/chunks/BdYQewoD.js +1 -0
- package/dist/web/_app/immutable/chunks/BgRT-K6w.js +5 -0
- package/dist/web/_app/immutable/chunks/BibveGGd.js +1 -0
- package/dist/web/_app/immutable/chunks/BoDmwOTJ.js +1 -0
- package/dist/web/_app/immutable/chunks/BoglwbZW.js +1 -0
- package/dist/web/_app/immutable/chunks/Bqm_YrIg2.js +23 -0
- package/dist/web/_app/immutable/chunks/Bw3ftRwD2.js +1 -0
- package/dist/web/_app/immutable/chunks/C7-8fYBp.js +2 -0
- package/dist/web/_app/immutable/chunks/C84_yofr.js +1 -0
- package/dist/web/_app/immutable/chunks/CAXXrbj52.js +1 -0
- package/dist/web/_app/immutable/chunks/CEniyZ1Z2.js +6 -0
- package/dist/web/_app/immutable/chunks/CJhElIkU2.js +1 -0
- package/dist/web/_app/immutable/chunks/CK8tIaYT.js +1 -0
- package/dist/web/_app/immutable/chunks/CO2DvORW.js +2 -0
- package/dist/web/_app/immutable/chunks/CQDB9Yvp.js +1 -0
- package/dist/web/_app/immutable/chunks/CTzjJm_m2.js +1 -0
- package/dist/web/_app/immutable/chunks/CUXqa1nn2.js +1 -0
- package/dist/web/_app/immutable/chunks/CY0iY_WO.js +1 -0
- package/dist/web/_app/immutable/chunks/CYY3Iy2G.js +1 -0
- package/dist/web/_app/immutable/chunks/CbCfNNV_2.js +2692 -0
- package/dist/web/_app/immutable/chunks/CbuGIyDu2.js +22 -0
- package/dist/web/_app/immutable/chunks/CcXmQaYs2.js +1 -0
- package/dist/web/_app/immutable/chunks/CcaQuaSt2.js +1 -0
- package/dist/web/_app/immutable/chunks/CoHaBDpN2.js +2 -0
- package/dist/web/_app/immutable/chunks/Cvbd3myc2.js +14 -0
- package/dist/web/_app/immutable/chunks/CwgiPHda.js +2 -0
- package/dist/web/_app/immutable/chunks/Cwt5tUMq.js +1 -0
- package/dist/web/_app/immutable/chunks/CyGDzYpQ2.js +3 -0
- package/dist/web/_app/immutable/chunks/D-HVAF_w.js +2 -0
- package/dist/web/_app/immutable/chunks/D20C1thX2.js +1 -0
- package/dist/web/_app/immutable/chunks/D3JoMtWC.js +7 -0
- package/dist/web/_app/immutable/chunks/D3ch71s_.js +1 -0
- package/dist/web/_app/immutable/chunks/DBFijAmG.js +1 -0
- package/dist/web/_app/immutable/chunks/DJAStLNu.js +1 -0
- package/dist/web/_app/immutable/chunks/DMZS8I6d.js +7 -0
- package/dist/web/_app/immutable/chunks/DO_sw49q2.js +1 -0
- package/dist/web/_app/immutable/chunks/DP69PpIj.js +1 -0
- package/dist/web/_app/immutable/chunks/DQMWa2t7.js +1 -0
- package/dist/web/_app/immutable/chunks/DT0wzK622.js +1 -0
- package/dist/web/_app/immutable/chunks/DTnEJArL.js +1 -0
- package/dist/web/_app/immutable/chunks/DToS-G202.js +1 -0
- package/dist/web/_app/immutable/chunks/DV0hSm5g.js +2 -0
- package/dist/web/_app/immutable/chunks/DZcU6mGe2.js +1 -0
- package/dist/web/_app/immutable/chunks/DbslMybD.js +1 -0
- package/dist/web/_app/immutable/chunks/DcGThsSF.js +1 -0
- package/dist/web/_app/immutable/chunks/DcPrzUMJ.js +1 -0
- package/dist/web/_app/immutable/chunks/De0g5qop2.js +1 -0
- package/dist/web/_app/immutable/chunks/DeGcz9JU.js +1 -0
- package/dist/web/_app/immutable/chunks/DimS8dbZ2.js +1 -0
- package/dist/web/_app/immutable/chunks/DjuqhOjF.js +1 -0
- package/dist/web/_app/immutable/chunks/DnIQzIOz.js +1 -0
- package/dist/web/_app/immutable/chunks/DnfCmXUt.js +1 -0
- package/dist/web/_app/immutable/chunks/DnrImJan.js +1 -0
- package/dist/web/_app/immutable/chunks/Do09oEro2.js +2 -0
- package/dist/web/_app/immutable/chunks/Dpuq25vu2.js +1 -0
- package/dist/web/_app/immutable/chunks/DrSaepAD2.js +1 -0
- package/dist/web/_app/immutable/chunks/Dw-frCfE.js +1 -0
- package/dist/web/_app/immutable/chunks/Dz34u8Ie2.js +185 -0
- package/dist/web/_app/immutable/chunks/DzrRTvug.js +1 -0
- package/dist/web/_app/immutable/chunks/E5LDmXgv.js +1 -0
- package/dist/web/_app/immutable/chunks/FCTxXqoV.js +1 -0
- package/dist/web/_app/immutable/chunks/FLoGUKj7.js +2 -0
- package/dist/web/_app/immutable/chunks/F_crThMu2.js +1 -0
- package/dist/web/_app/immutable/chunks/GRN8IpJ0.js +2 -0
- package/dist/web/_app/immutable/chunks/J5nb9xxj.js +1 -0
- package/dist/web/_app/immutable/chunks/JCjEwqH9.js +1 -0
- package/dist/web/_app/immutable/chunks/JN_nsXUm2.js +1 -0
- package/dist/web/_app/immutable/chunks/JS2_GaB1.js +1 -0
- package/dist/web/_app/immutable/chunks/N6vnY5Si2.js +1 -0
- package/dist/web/_app/immutable/chunks/PKzH7OBb2.js +1 -0
- package/dist/web/_app/immutable/chunks/Wowi_89k.js +5 -0
- package/dist/web/_app/immutable/chunks/Y_asqJqs2.js +83 -0
- package/dist/web/_app/immutable/chunks/Yhg5Q4MT.js +1 -0
- package/dist/web/_app/immutable/chunks/cHSFvkPC.js +3 -0
- package/dist/web/_app/immutable/chunks/f_eYccPf2.js +1 -0
- package/dist/web/_app/immutable/chunks/hm_8RsuL.js +1 -0
- package/dist/web/_app/immutable/chunks/iPCkjliu.js +3 -0
- package/dist/web/_app/immutable/chunks/j2AvgZGz.js +1 -0
- package/dist/web/_app/immutable/chunks/kNaey6uv.js +1 -0
- package/dist/web/_app/immutable/chunks/kWdKf0Ej.js +8 -0
- package/dist/web/_app/immutable/chunks/l1761xxj.js +1 -0
- package/dist/web/_app/immutable/chunks/liGRFQqV2.js +184 -0
- package/dist/web/_app/immutable/chunks/lq1kR86d.js +1 -0
- package/dist/web/_app/immutable/chunks/mIykYR4F2.js +1 -0
- package/dist/web/_app/immutable/chunks/piVEn8CZ.js +66 -0
- package/dist/web/_app/immutable/chunks/rbhlO_t8.js +1 -0
- package/dist/web/_app/immutable/chunks/rgZlSXXV.js +1 -0
- package/dist/web/_app/immutable/chunks/rx_WUKwk2.js +1 -0
- package/dist/web/_app/immutable/chunks/u8G2EUvz2.js +224 -0
- package/dist/web/_app/immutable/chunks/vgsM0KTm2.js +1 -0
- package/dist/web/_app/immutable/chunks/xcGI4fuV.js +1 -0
- package/dist/web/_app/immutable/chunks/xihTtKlq.js +1 -0
- package/dist/web/_app/immutable/chunks/yEYlhV9G2.js +1 -0
- package/dist/web/_app/immutable/entry/app.CusiWZov.js +2 -0
- package/dist/web/_app/immutable/entry/start.DrLcQ4Lx.js +1 -0
- package/dist/web/_app/immutable/nodes/0.CXwev3zA.js +2 -0
- package/dist/web/_app/immutable/nodes/1.D93E26FU.js +1 -0
- package/dist/web/_app/immutable/nodes/10.BSkeTxej.js +1 -0
- package/dist/web/_app/immutable/nodes/11.CRoiFE32.js +1 -0
- package/dist/web/_app/immutable/nodes/12.Bcwm3-AY.js +1 -0
- package/dist/web/_app/immutable/nodes/13.BVWnarZm.js +1 -0
- package/dist/web/_app/immutable/nodes/14.D_x8-nk9.js +1 -0
- package/dist/web/_app/immutable/nodes/15.B_ReGv9R.js +1 -0
- package/dist/web/_app/immutable/nodes/16.DiOHgg-l.js +77 -0
- package/dist/web/_app/immutable/nodes/2.bwyeAMyx.js +109 -0
- package/dist/web/_app/immutable/nodes/3.CyIpLMSo.js +6 -0
- package/dist/web/_app/immutable/nodes/4.CBxNEgp_.js +11 -0
- package/dist/web/_app/immutable/nodes/5.BV-6fNbn.js +5 -0
- package/dist/web/_app/immutable/nodes/6.BanV644Z.js +1 -0
- package/dist/web/_app/immutable/nodes/7.B7rO4HSm.js +1 -0
- package/dist/web/_app/immutable/nodes/8.BdssFp4B.js +1 -0
- package/dist/web/_app/immutable/nodes/9.B_TACjMT.js +1 -0
- package/dist/web/_app/version.json +1 -1
- package/dist/web/favicon-16.png +0 -0
- package/dist/web/favicon-180.png +0 -0
- package/dist/web/favicon-32.png +0 -0
- package/dist/web/favicon-48.png +0 -0
- package/dist/web/favicon-512.png +0 -0
- package/dist/web/favicon.ico +0 -0
- package/dist/web/favicon.svg +8 -0
- package/dist/web/index.html +58 -19
- package/dist/web/studiograph-logomark.svg +29 -0
- package/package.json +38 -14
- package/dist/agent/skills/enrich-entities.md +0 -136
- package/dist/agent/skills/obsidian-source-setup.md +0 -246
- package/dist/agent/skills/skill-loader.d.ts +0 -48
- package/dist/agent/skills/skill-loader.js +0 -166
- package/dist/agent/skills/skill-loader.js.map +0 -1
- package/dist/agent/skills/sync-configuration.md +0 -119
- package/dist/agent/skills/sync-setup.md +0 -82
- package/dist/agent/tools/sync-tools.d.ts +0 -35
- package/dist/agent/tools/sync-tools.js +0 -992
- package/dist/agent/tools/sync-tools.js.map +0 -1
- package/dist/auth/github.d.ts +0 -56
- package/dist/auth/github.js +0 -169
- package/dist/auth/github.js.map +0 -1
- package/dist/cli/commands/access.d.ts +0 -11
- package/dist/cli/commands/access.js +0 -156
- package/dist/cli/commands/access.js.map +0 -1
- package/dist/cli/commands/app.d.ts +0 -7
- package/dist/cli/commands/app.js +0 -268
- package/dist/cli/commands/app.js.map +0 -1
- package/dist/cli/commands/auth.d.ts +0 -10
- package/dist/cli/commands/auth.js +0 -79
- package/dist/cli/commands/auth.js.map +0 -1
- package/dist/cli/commands/clear.d.ts +0 -5
- package/dist/cli/commands/clear.js +0 -36
- package/dist/cli/commands/clear.js.map +0 -1
- package/dist/cli/commands/collection.d.ts +0 -10
- package/dist/cli/commands/collection.js +0 -187
- package/dist/cli/commands/collection.js.map +0 -1
- package/dist/cli/commands/enrich.d.ts +0 -11
- package/dist/cli/commands/enrich.js +0 -135
- package/dist/cli/commands/enrich.js.map +0 -1
- package/dist/cli/commands/graphrag.d.ts +0 -12
- package/dist/cli/commands/graphrag.js +0 -122
- package/dist/cli/commands/graphrag.js.map +0 -1
- package/dist/cli/commands/join.d.ts +0 -9
- package/dist/cli/commands/join.js +0 -255
- package/dist/cli/commands/join.js.map +0 -1
- package/dist/cli/commands/members.d.ts +0 -11
- package/dist/cli/commands/members.js +0 -230
- package/dist/cli/commands/members.js.map +0 -1
- package/dist/cli/commands/org.d.ts +0 -10
- package/dist/cli/commands/org.js +0 -132
- package/dist/cli/commands/org.js.map +0 -1
- package/dist/cli/commands/provision.d.ts +0 -8
- package/dist/cli/commands/provision.js +0 -116
- package/dist/cli/commands/provision.js.map +0 -1
- package/dist/cli/commands/resolve.d.ts +0 -8
- package/dist/cli/commands/resolve.js +0 -85
- package/dist/cli/commands/resolve.js.map +0 -1
- package/dist/cli/commands/review.d.ts +0 -19
- package/dist/cli/commands/review.js +0 -128
- package/dist/cli/commands/review.js.map +0 -1
- package/dist/cli/commands/source.d.ts +0 -16
- package/dist/cli/commands/source.js +0 -159
- package/dist/cli/commands/source.js.map +0 -1
- package/dist/cli/commands/start.d.ts +0 -7
- package/dist/cli/commands/start.js +0 -589
- package/dist/cli/commands/start.js.map +0 -1
- package/dist/cli/commands/sync-collection.d.ts +0 -14
- package/dist/cli/commands/sync-collection.js +0 -355
- package/dist/cli/commands/sync-collection.js.map +0 -1
- package/dist/cli/commands/sync-entities.d.ts +0 -13
- package/dist/cli/commands/sync-entities.js +0 -242
- package/dist/cli/commands/sync-entities.js.map +0 -1
- package/dist/cli/commands/team.d.ts +0 -12
- package/dist/cli/commands/team.js +0 -185
- package/dist/cli/commands/team.js.map +0 -1
- package/dist/cli/commands/update.d.ts +0 -8
- package/dist/cli/commands/update.js +0 -155
- package/dist/cli/commands/update.js.map +0 -1
- package/dist/cli/commands/user.d.ts +0 -7
- package/dist/cli/commands/user.js +0 -153
- package/dist/cli/commands/user.js.map +0 -1
- package/dist/cli/scaffolding.d.ts +0 -12
- package/dist/cli/scaffolding.js +0 -397
- package/dist/cli/scaffolding.js.map +0 -1
- package/dist/cli/sync-review-interactive.d.ts +0 -31
- package/dist/cli/sync-review-interactive.js +0 -393
- package/dist/cli/sync-review-interactive.js.map +0 -1
- package/dist/core/migration-runner.d.ts +0 -42
- package/dist/core/migration-runner.js +0 -232
- package/dist/core/migration-runner.js.map +0 -1
- package/dist/core/migration-types.d.ts +0 -101
- package/dist/core/migration-types.js +0 -21
- package/dist/core/migration-types.js.map +0 -1
- package/dist/core/migrations/20260219-formalize-memory-location.d.ts +0 -2
- package/dist/core/migrations/20260219-formalize-memory-location.js +0 -35
- package/dist/core/migrations/20260219-formalize-memory-location.js.map +0 -1
- package/dist/core/migrations/20260220-add-workspace-metadata.d.ts +0 -12
- package/dist/core/migrations/20260220-add-workspace-metadata.js +0 -65
- package/dist/core/migrations/20260220-add-workspace-metadata.js.map +0 -1
- package/dist/core/migrations/20260220-add-workspace-readme.d.ts +0 -11
- package/dist/core/migrations/20260220-add-workspace-readme.js +0 -82
- package/dist/core/migrations/20260220-add-workspace-readme.js.map +0 -1
- package/dist/core/migrations/20260220-migrate-yaml-to-json.d.ts +0 -9
- package/dist/core/migrations/20260220-migrate-yaml-to-json.js +0 -64
- package/dist/core/migrations/20260220-migrate-yaml-to-json.js.map +0 -1
- package/dist/core/migrations/index.d.ts +0 -11
- package/dist/core/migrations/index.js +0 -23
- package/dist/core/migrations/index.js.map +0 -1
- package/dist/integrations/asana.d.ts +0 -26
- package/dist/integrations/asana.js +0 -78
- package/dist/integrations/asana.js.map +0 -1
- package/dist/integrations/figma-local.d.ts +0 -16
- package/dist/integrations/figma-local.js +0 -10
- package/dist/integrations/figma-local.js.map +0 -1
- package/dist/integrations/figma.d.ts +0 -17
- package/dist/integrations/figma.js +0 -17
- package/dist/integrations/figma.js.map +0 -1
- package/dist/integrations/granola.d.ts +0 -24
- package/dist/integrations/granola.js +0 -60
- package/dist/integrations/granola.js.map +0 -1
- package/dist/integrations/linear.d.ts +0 -14
- package/dist/integrations/linear.js +0 -80
- package/dist/integrations/linear.js.map +0 -1
- package/dist/integrations/paper-local.d.ts +0 -14
- package/dist/integrations/paper-local.js +0 -10
- package/dist/integrations/paper-local.js.map +0 -1
- package/dist/integrations/paper.d.ts +0 -2
- package/dist/integrations/paper.js +0 -10
- package/dist/integrations/paper.js.map +0 -1
- package/dist/integrations/pipedrive.d.ts +0 -26
- package/dist/integrations/pipedrive.js +0 -97
- package/dist/integrations/pipedrive.js.map +0 -1
- package/dist/integrations/registry.d.ts +0 -15
- package/dist/integrations/registry.js +0 -27
- package/dist/integrations/registry.js.map +0 -1
- package/dist/integrations/types.d.ts +0 -38
- package/dist/integrations/types.js +0 -9
- package/dist/integrations/types.js.map +0 -1
- package/dist/lib/lib/utils.d.ts +0 -2
- package/dist/lib/lib/utils.js +0 -6
- package/dist/lib/lib/utils.js.map +0 -1
- package/dist/mcp/connectors/asana.d.ts +0 -2
- package/dist/mcp/connectors/asana.js +0 -20
- package/dist/mcp/connectors/asana.js.map +0 -1
- package/dist/mcp/connectors/definitions.d.ts +0 -45
- package/dist/mcp/connectors/definitions.js +0 -32
- package/dist/mcp/connectors/definitions.js.map +0 -1
- package/dist/mcp/connectors/figma.d.ts +0 -5
- package/dist/mcp/connectors/figma.js +0 -21
- package/dist/mcp/connectors/figma.js.map +0 -1
- package/dist/mcp/connectors/gdrive.d.ts +0 -2
- package/dist/mcp/connectors/gdrive.js +0 -20
- package/dist/mcp/connectors/gdrive.js.map +0 -1
- package/dist/mcp/connectors/granola.d.ts +0 -2
- package/dist/mcp/connectors/granola.js +0 -12
- package/dist/mcp/connectors/granola.js.map +0 -1
- package/dist/mcp/connectors/linear.d.ts +0 -2
- package/dist/mcp/connectors/linear.js +0 -19
- package/dist/mcp/connectors/linear.js.map +0 -1
- package/dist/mcp/connectors/obsidian.d.ts +0 -2
- package/dist/mcp/connectors/obsidian.js +0 -19
- package/dist/mcp/connectors/obsidian.js.map +0 -1
- package/dist/mcp/connectors/pipedrive.d.ts +0 -2
- package/dist/mcp/connectors/pipedrive.js +0 -20
- package/dist/mcp/connectors/pipedrive.js.map +0 -1
- package/dist/mcp/connectors/slack.d.ts +0 -2
- package/dist/mcp/connectors/slack.js +0 -21
- package/dist/mcp/connectors/slack.js.map +0 -1
- package/dist/mcp/server-oauth-provider.d.ts +0 -56
- package/dist/mcp/server-oauth-provider.js +0 -142
- package/dist/mcp/server-oauth-provider.js.map +0 -1
- package/dist/server/chrome/chrome.css +0 -691
- package/dist/server/chrome/chrome.js +0 -374
- package/dist/server/collab-authority.d.ts +0 -70
- package/dist/server/collab-authority.js +0 -218
- package/dist/server/collab-authority.js.map +0 -1
- package/dist/server/collab.d.ts +0 -29
- package/dist/server/collab.js +0 -195
- package/dist/server/collab.js.map +0 -1
- package/dist/server/commit-scheduler.d.ts +0 -39
- package/dist/server/commit-scheduler.js +0 -113
- package/dist/server/commit-scheduler.js.map +0 -1
- package/dist/server/plugin-loader.d.ts +0 -53
- package/dist/server/plugin-loader.js +0 -155
- package/dist/server/plugin-loader.js.map +0 -1
- package/dist/server/routes/collab.d.ts +0 -6
- package/dist/server/routes/collab.js +0 -10
- package/dist/server/routes/collab.js.map +0 -1
- package/dist/server/routes/git-api.d.ts +0 -9
- package/dist/server/routes/git-api.js +0 -82
- package/dist/server/routes/git-api.js.map +0 -1
- package/dist/server/routes/meeting-ingest-api.d.ts +0 -15
- package/dist/server/routes/meeting-ingest-api.js +0 -323
- package/dist/server/routes/meeting-ingest-api.js.map +0 -1
- package/dist/server/routes/sync-api.d.ts +0 -26
- package/dist/server/routes/sync-api.js +0 -814
- package/dist/server/routes/sync-api.js.map +0 -1
- package/dist/server/routes/webhook.d.ts +0 -14
- package/dist/server/routes/webhook.js +0 -102
- package/dist/server/routes/webhook.js.map +0 -1
- package/dist/services/github-provisioner.d.ts +0 -36
- package/dist/services/github-provisioner.js +0 -126
- package/dist/services/github-provisioner.js.map +0 -1
- package/dist/services/github-service.d.ts +0 -99
- package/dist/services/github-service.js +0 -310
- package/dist/services/github-service.js.map +0 -1
- package/dist/services/insights.d.ts +0 -38
- package/dist/services/insights.js +0 -246
- package/dist/services/insights.js.map +0 -1
- package/dist/services/sync/collection-sync.d.ts +0 -60
- package/dist/services/sync/collection-sync.js +0 -509
- package/dist/services/sync/collection-sync.js.map +0 -1
- package/dist/services/sync/commit.d.ts +0 -60
- package/dist/services/sync/commit.js +0 -354
- package/dist/services/sync/commit.js.map +0 -1
- package/dist/services/sync/context-index.d.ts +0 -69
- package/dist/services/sync/context-index.js +0 -280
- package/dist/services/sync/context-index.js.map +0 -1
- package/dist/services/sync/data-fetcher.d.ts +0 -31
- package/dist/services/sync/data-fetcher.js +0 -12
- package/dist/services/sync/data-fetcher.js.map +0 -1
- package/dist/services/sync/derive.d.ts +0 -34
- package/dist/services/sync/derive.js +0 -164
- package/dist/services/sync/derive.js.map +0 -1
- package/dist/services/sync/enrichment-state.d.ts +0 -31
- package/dist/services/sync/enrichment-state.js +0 -63
- package/dist/services/sync/enrichment-state.js.map +0 -1
- package/dist/services/sync/enrichment.d.ts +0 -25
- package/dist/services/sync/enrichment.js +0 -121
- package/dist/services/sync/enrichment.js.map +0 -1
- package/dist/services/sync/entity-refresh.d.ts +0 -30
- package/dist/services/sync/entity-refresh.js +0 -275
- package/dist/services/sync/entity-refresh.js.map +0 -1
- package/dist/services/sync/frontmatter-extractor.d.ts +0 -40
- package/dist/services/sync/frontmatter-extractor.js +0 -279
- package/dist/services/sync/frontmatter-extractor.js.map +0 -1
- package/dist/services/sync/graph-match-state.d.ts +0 -33
- package/dist/services/sync/graph-match-state.js +0 -61
- package/dist/services/sync/graph-match-state.js.map +0 -1
- package/dist/services/sync/graph-match.d.ts +0 -53
- package/dist/services/sync/graph-match.js +0 -316
- package/dist/services/sync/graph-match.js.map +0 -1
- package/dist/services/sync/graphrag-client.d.ts +0 -43
- package/dist/services/sync/graphrag-client.js +0 -94
- package/dist/services/sync/graphrag-client.js.map +0 -1
- package/dist/services/sync/graphrag-config.d.ts +0 -16
- package/dist/services/sync/graphrag-config.js +0 -39
- package/dist/services/sync/graphrag-config.js.map +0 -1
- package/dist/services/sync/graphrag-context.d.ts +0 -14
- package/dist/services/sync/graphrag-context.js +0 -109
- package/dist/services/sync/graphrag-context.js.map +0 -1
- package/dist/services/sync/graphrag-indexer.d.ts +0 -30
- package/dist/services/sync/graphrag-indexer.js +0 -358
- package/dist/services/sync/graphrag-indexer.js.map +0 -1
- package/dist/services/sync/llm.d.ts +0 -32
- package/dist/services/sync/llm.js +0 -115
- package/dist/services/sync/llm.js.map +0 -1
- package/dist/services/sync/mcp-client.d.ts +0 -71
- package/dist/services/sync/mcp-client.js +0 -299
- package/dist/services/sync/mcp-client.js.map +0 -1
- package/dist/services/sync/model-factory.d.ts +0 -13
- package/dist/services/sync/model-factory.js +0 -38
- package/dist/services/sync/model-factory.js.map +0 -1
- package/dist/services/sync/name-quality.d.ts +0 -31
- package/dist/services/sync/name-quality.js +0 -60
- package/dist/services/sync/name-quality.js.map +0 -1
- package/dist/services/sync/output-schemas.d.ts +0 -92
- package/dist/services/sync/output-schemas.js +0 -43
- package/dist/services/sync/output-schemas.js.map +0 -1
- package/dist/services/sync/prompts.d.ts +0 -19
- package/dist/services/sync/prompts.js +0 -128
- package/dist/services/sync/prompts.js.map +0 -1
- package/dist/services/sync/reconciler.d.ts +0 -48
- package/dist/services/sync/reconciler.js +0 -294
- package/dist/services/sync/reconciler.js.map +0 -1
- package/dist/services/sync/rest-client.d.ts +0 -40
- package/dist/services/sync/rest-client.js +0 -100
- package/dist/services/sync/rest-client.js.map +0 -1
- package/dist/services/sync/source-config.d.ts +0 -67
- package/dist/services/sync/source-config.js +0 -304
- package/dist/services/sync/source-config.js.map +0 -1
- package/dist/services/sync/source-definitions/asana.d.ts +0 -14
- package/dist/services/sync/source-definitions/asana.js +0 -42
- package/dist/services/sync/source-definitions/asana.js.map +0 -1
- package/dist/services/sync/source-definitions/definitions.d.ts +0 -8
- package/dist/services/sync/source-definitions/definitions.js +0 -8
- package/dist/services/sync/source-definitions/definitions.js.map +0 -1
- package/dist/services/sync/source-definitions/gdrive.d.ts +0 -16
- package/dist/services/sync/source-definitions/gdrive.js +0 -68
- package/dist/services/sync/source-definitions/gdrive.js.map +0 -1
- package/dist/services/sync/source-definitions/granola.d.ts +0 -2
- package/dist/services/sync/source-definitions/granola.js +0 -21
- package/dist/services/sync/source-definitions/granola.js.map +0 -1
- package/dist/services/sync/source-definitions/linear.d.ts +0 -2
- package/dist/services/sync/source-definitions/linear.js +0 -62
- package/dist/services/sync/source-definitions/linear.js.map +0 -1
- package/dist/services/sync/source-definitions/obsidian.d.ts +0 -2
- package/dist/services/sync/source-definitions/obsidian.js +0 -55
- package/dist/services/sync/source-definitions/obsidian.js.map +0 -1
- package/dist/services/sync/source-definitions/pipedrive.d.ts +0 -2
- package/dist/services/sync/source-definitions/pipedrive.js +0 -43
- package/dist/services/sync/source-definitions/pipedrive.js.map +0 -1
- package/dist/services/sync/staging.d.ts +0 -53
- package/dist/services/sync/staging.js +0 -130
- package/dist/services/sync/staging.js.map +0 -1
- package/dist/services/sync/structured-extractor.d.ts +0 -57
- package/dist/services/sync/structured-extractor.js +0 -584
- package/dist/services/sync/structured-extractor.js.map +0 -1
- package/dist/services/sync/sync-runner.d.ts +0 -32
- package/dist/services/sync/sync-runner.js +0 -195
- package/dist/services/sync/sync-runner.js.map +0 -1
- package/dist/services/sync/sync-state.d.ts +0 -43
- package/dist/services/sync/sync-state.js +0 -154
- package/dist/services/sync/sync-state.js.map +0 -1
- package/dist/services/sync/types.d.ts +0 -381
- package/dist/services/sync/types.js +0 -8
- package/dist/services/sync/types.js.map +0 -1
- package/dist/services/sync/unstructured-extractor.d.ts +0 -27
- package/dist/services/sync/unstructured-extractor.js +0 -185
- package/dist/services/sync/unstructured-extractor.js.map +0 -1
- package/dist/utils/merge-resolver.d.ts +0 -59
- package/dist/utils/merge-resolver.js +0 -303
- package/dist/utils/merge-resolver.js.map +0 -1
- package/dist/utils/workspace-config.d.ts +0 -8
- package/dist/utils/workspace-config.js +0 -22
- package/dist/utils/workspace-config.js.map +0 -1
- package/dist/web/_app/immutable/assets/0.DdizXOKi.css +0 -1
- package/dist/web/_app/immutable/assets/10.BUrHkYry.css +0 -1
- package/dist/web/_app/immutable/assets/2.n7-yW_Fs.css +0 -1
- package/dist/web/_app/immutable/assets/3.BtaZagnv.css +0 -1
- package/dist/web/_app/immutable/assets/4.DT7X0x5S.css +0 -1
- package/dist/web/_app/immutable/assets/5.DFeGxLYf.css +0 -1
- package/dist/web/_app/immutable/assets/6.CquhUpOu.css +0 -1
- package/dist/web/_app/immutable/assets/7.CjbDRbuG.css +0 -1
- package/dist/web/_app/immutable/assets/8.S1QdUGNM.css +0 -1
- package/dist/web/_app/immutable/assets/9.CT4xL4K3.css +0 -1
- package/dist/web/_app/immutable/assets/Copy.FS8bdfxr.css +0 -1
- package/dist/web/_app/immutable/assets/Toaster.rN8r_Hzv.css +0 -1
- package/dist/web/_app/immutable/assets/ViewToolbar.D-QW2oKe.css +0 -1
- package/dist/web/_app/immutable/assets/index.D6tMDJWk.css +0 -1
- package/dist/web/_app/immutable/chunks/-iaeBIWN.js +0 -1
- package/dist/web/_app/immutable/chunks/37NdyH6G.js +0 -32
- package/dist/web/_app/immutable/chunks/4Hhzb6pv.js +0 -1
- package/dist/web/_app/immutable/chunks/72bZS3G9.js +0 -1
- package/dist/web/_app/immutable/chunks/7S2LGqoP.js +0 -2
- package/dist/web/_app/immutable/chunks/B340SUKR.js +0 -1
- package/dist/web/_app/immutable/chunks/B3Z4_Sps.js +0 -1
- package/dist/web/_app/immutable/chunks/BB_5th5W.js +0 -3383
- package/dist/web/_app/immutable/chunks/BPWYOQXG.js +0 -1
- package/dist/web/_app/immutable/chunks/BR77jbfR.js +0 -1
- package/dist/web/_app/immutable/chunks/BS2rFAVq.js +0 -1
- package/dist/web/_app/immutable/chunks/BSsDC_p4.js +0 -1
- package/dist/web/_app/immutable/chunks/BTX2Jr8_.js +0 -1
- package/dist/web/_app/immutable/chunks/Bq_KShUL.js +0 -4
- package/dist/web/_app/immutable/chunks/Bsacq2UX.js +0 -1
- package/dist/web/_app/immutable/chunks/ByunV8un.js +0 -1
- package/dist/web/_app/immutable/chunks/BzPu-Eht.js +0 -1
- package/dist/web/_app/immutable/chunks/C7VoTosa.js +0 -2
- package/dist/web/_app/immutable/chunks/CDV5Q7RN.js +0 -1
- package/dist/web/_app/immutable/chunks/CGc1sIb_.js +0 -1
- package/dist/web/_app/immutable/chunks/CJ8__CWt.js +0 -1
- package/dist/web/_app/immutable/chunks/CJUKmosC.js +0 -5
- package/dist/web/_app/immutable/chunks/CSVbGg_b.js +0 -5
- package/dist/web/_app/immutable/chunks/CT6oIU-C.js +0 -1
- package/dist/web/_app/immutable/chunks/CTRxNfZk.js +0 -1
- package/dist/web/_app/immutable/chunks/CWQRQXxy.js +0 -1
- package/dist/web/_app/immutable/chunks/CX87mIM8.js +0 -1
- package/dist/web/_app/immutable/chunks/CXH6iFbA.js +0 -1
- package/dist/web/_app/immutable/chunks/CX_61fY8.js +0 -5
- package/dist/web/_app/immutable/chunks/CYrVHOHA.js +0 -1
- package/dist/web/_app/immutable/chunks/CdeYcEuU.js +0 -1
- package/dist/web/_app/immutable/chunks/CmCtpZ1Y.js +0 -1
- package/dist/web/_app/immutable/chunks/Cpsr8-Xy.js +0 -1
- package/dist/web/_app/immutable/chunks/CqkleIqs.js +0 -1
- package/dist/web/_app/immutable/chunks/CrdV0ttd.js +0 -1
- package/dist/web/_app/immutable/chunks/CscoF-YL.js +0 -18
- package/dist/web/_app/immutable/chunks/Cx4YdFMk.js +0 -1
- package/dist/web/_app/immutable/chunks/D7ZqAKi9.js +0 -3
- package/dist/web/_app/immutable/chunks/DGbA7IXh.js +0 -2
- package/dist/web/_app/immutable/chunks/DTZE-yoq.js +0 -2
- package/dist/web/_app/immutable/chunks/DbbB6Up5.js +0 -1
- package/dist/web/_app/immutable/chunks/DnL9f0lc.js +0 -7
- package/dist/web/_app/immutable/chunks/DtM5cEDu.js +0 -1
- package/dist/web/_app/immutable/chunks/Eqahi7_S.js +0 -2
- package/dist/web/_app/immutable/chunks/O9Eb9k00.js +0 -1
- package/dist/web/_app/immutable/chunks/PPVm8Dsz.js +0 -1
- package/dist/web/_app/immutable/chunks/QF8MAmnc.js +0 -1
- package/dist/web/_app/immutable/chunks/UjzxCpxn.js +0 -1
- package/dist/web/_app/immutable/chunks/WSUKABI_.js +0 -1
- package/dist/web/_app/immutable/chunks/Y90OgS-9.js +0 -1
- package/dist/web/_app/immutable/chunks/cLyZlkXv.js +0 -1
- package/dist/web/_app/immutable/chunks/iDtAARVW.js +0 -2
- package/dist/web/_app/immutable/chunks/oC_W7W7p.js +0 -1
- package/dist/web/_app/immutable/chunks/rJdWIgh-.js +0 -1
- package/dist/web/_app/immutable/chunks/tvOsokaa.js +0 -1
- package/dist/web/_app/immutable/chunks/uLEXaPwE.js +0 -1
- package/dist/web/_app/immutable/chunks/vSaooFHB.js +0 -1
- package/dist/web/_app/immutable/entry/app.BeUKh4sD.js +0 -2
- package/dist/web/_app/immutable/entry/start.CZJnFuQn.js +0 -1
- package/dist/web/_app/immutable/nodes/0.DyF_RsLg.js +0 -2
- package/dist/web/_app/immutable/nodes/1.7iDQmMPh.js +0 -1
- package/dist/web/_app/immutable/nodes/10.Btl8d8HT.js +0 -1
- package/dist/web/_app/immutable/nodes/2.LDRE62jN.js +0 -168
- package/dist/web/_app/immutable/nodes/3.BaW1XB1x.js +0 -1
- package/dist/web/_app/immutable/nodes/4.D0Q8kpkI.js +0 -12
- package/dist/web/_app/immutable/nodes/5.n7j2UG9h.js +0 -4
- package/dist/web/_app/immutable/nodes/6.DQYxR0iy.js +0 -2
- package/dist/web/_app/immutable/nodes/7.BsURvFAp.js +0 -2
- package/dist/web/_app/immutable/nodes/8.CsiErG0p.js +0 -1
- package/dist/web/_app/immutable/nodes/9.CnN6OZgC.js +0 -1
package/dist/core/validation.js
CHANGED
|
@@ -1,15 +1,29 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Entity validation schemas for Studiograph
|
|
3
3
|
*
|
|
4
|
-
* 17
|
|
5
|
-
* -
|
|
6
|
-
* -
|
|
7
|
-
* -
|
|
4
|
+
* 17 canonical entity types post-redesign:
|
|
5
|
+
* - CRM (4): person, organization, position, deal
|
|
6
|
+
* - PM (4): project, event, task, deliverable
|
|
7
|
+
* - KM authored (6): document, deck, publication, case-study, service, skill
|
|
8
|
+
* - Capture (3): note, reference, dataset
|
|
9
|
+
* - System (1): asset
|
|
8
10
|
*
|
|
9
|
-
*
|
|
10
|
-
*
|
|
11
|
+
* "An object earns first-class entity status only if it earns its own view
|
|
12
|
+
* behavior across the six primary views (List, Gallery, Kanban, Calendar,
|
|
13
|
+
* Timeline, Graph). Objects that are mostly useful because they're attached
|
|
14
|
+
* to something else become categories, fields, or inline blocks — not types."
|
|
15
|
+
*
|
|
16
|
+
* Workspaces can define additional custom types via schema_extensions.
|
|
11
17
|
*/
|
|
12
18
|
import { z } from 'zod';
|
|
19
|
+
function dateField(role, label, description) {
|
|
20
|
+
return z
|
|
21
|
+
.string()
|
|
22
|
+
.date()
|
|
23
|
+
.optional()
|
|
24
|
+
.describe(description ?? label)
|
|
25
|
+
.meta({ dateRole: role, label });
|
|
26
|
+
}
|
|
13
27
|
/**
|
|
14
28
|
* Base entity schema - all entities have these fields
|
|
15
29
|
*/
|
|
@@ -22,328 +36,526 @@ export const EntityBaseSchema = z.object({
|
|
|
22
36
|
updated_at: z.string().datetime('Invalid datetime format'),
|
|
23
37
|
created_by: z.string().min(1, 'Created by is required'),
|
|
24
38
|
updated_by: z.string().min(1, 'Updated by is required'),
|
|
25
|
-
date:
|
|
39
|
+
date: dateField('primary', 'Date', "The entity's primary date (YYYY-MM-DD)"),
|
|
26
40
|
tags: z.array(z.string())
|
|
27
41
|
.optional()
|
|
28
42
|
.describe('Tags for categorization'),
|
|
29
43
|
}).passthrough(); // Allow custom fields beyond the base schema
|
|
30
44
|
// ══════════════════════════════════════════════════════════════════════════════
|
|
31
|
-
//
|
|
45
|
+
// CRM — people, organizations, positions, deals
|
|
32
46
|
// ══════════════════════════════════════════════════════════════════════════════
|
|
33
47
|
/**
|
|
34
|
-
* Person — team members, client contacts, any individual
|
|
48
|
+
* Person — team members, client contacts, any individual.
|
|
49
|
+
*
|
|
50
|
+
* `category` and `status` are split: category is the relationship type
|
|
51
|
+
* (employee/contractor/client/partner) and status is whether that
|
|
52
|
+
* relationship is current or historical. Mirrors organization.
|
|
35
53
|
*/
|
|
36
54
|
export const PersonSchema = EntityBaseSchema.extend({
|
|
37
55
|
entity_type: z.literal('person'),
|
|
38
56
|
name: z.string().min(1, 'Person name is required'),
|
|
39
|
-
role: z.string().optional().describe('
|
|
40
|
-
|
|
57
|
+
role: z.string().optional().describe('Free-text title (distinct from `position` entity)'),
|
|
58
|
+
category: z.enum(['employee', 'contractor', 'client', 'partner', 'other'])
|
|
59
|
+
.optional()
|
|
60
|
+
.describe('Relationship category'),
|
|
61
|
+
status: z.enum(['current', 'former'])
|
|
41
62
|
.optional()
|
|
42
|
-
.describe('
|
|
63
|
+
.describe('Whether the relationship is current or historical'),
|
|
43
64
|
email: z.string().optional().describe('Email address'),
|
|
44
65
|
location: z.string().optional().describe('Location'),
|
|
45
66
|
organization: z.string().optional().describe('Organization wikilink'),
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
67
|
+
// Bridge to the auth.db user account this person represents. Scalar handle
|
|
68
|
+
// string (not a wikilink): users are out-of-graph identities. Workspace-
|
|
69
|
+
// unique — write-path enforcement lives in user-person-bridge.ts. Optional
|
|
70
|
+
// because person entities can exist without a corresponding user
|
|
71
|
+
// (contractors, client contacts, anyone in the org chart who doesn't log
|
|
72
|
+
// in). Empty string is the "cleared" form — graph.create seeds optional
|
|
73
|
+
// string fields to "" on new entities, and unlink writes "" as well, so
|
|
74
|
+
// the regex must accept it explicitly.
|
|
75
|
+
user_handle: z.string()
|
|
76
|
+
// Empty (cleared) OR a kebab-case handle: leading alnum, alnum/hyphen
|
|
77
|
+
// body, alnum tail, no doubled hyphens. Mirrors what auth's
|
|
78
|
+
// slugifyHandle + allocateHandle can actually emit — accepting
|
|
79
|
+
// `foo-` or `foo--bar` here would let a hand-edit drift outside what
|
|
80
|
+
// findUserByHandle can match.
|
|
81
|
+
.regex(/^(|[a-z0-9](?:[a-z0-9]|-(?=[a-z0-9]))*)$/, 'user_handle must match the auth handle format (lowercase, single hyphens between alnums, alnum endpoints)')
|
|
82
|
+
.optional()
|
|
83
|
+
.describe('Auth handle of the user this person represents'),
|
|
50
84
|
});
|
|
51
85
|
/**
|
|
52
|
-
* Organization — clients, vendors, partners, prospects,
|
|
53
|
-
*
|
|
86
|
+
* Organization — clients, vendors, partners, prospects, professional
|
|
87
|
+
* associations.
|
|
54
88
|
*/
|
|
55
89
|
export const OrganizationSchema = EntityBaseSchema.extend({
|
|
56
90
|
entity_type: z.literal('organization'),
|
|
57
91
|
name: z.string().min(1, 'Organization name is required'),
|
|
58
|
-
category: z.enum(['client', 'vendor', 'partner', 'prospect', '
|
|
92
|
+
category: z.enum(['client', 'vendor', 'partner', 'prospect', 'professional-association', 'other'])
|
|
59
93
|
.optional()
|
|
60
94
|
.describe('Relationship category'),
|
|
61
|
-
status: z.enum(['active', '
|
|
95
|
+
status: z.enum(['active', 'dormant', 'former'])
|
|
62
96
|
.default('active')
|
|
63
|
-
.describe('Organization status'),
|
|
97
|
+
.describe('Organization status (`dormant` covers clients you have not worked with in a while but might again)'),
|
|
64
98
|
industry: z.string().optional().describe('Industry sector'),
|
|
65
99
|
website: z.string().url().optional().describe('Website URL'),
|
|
66
|
-
location: z.string().optional().describe('Primary location'),
|
|
67
|
-
size: z.enum(['small', 'medium', 'large', 'enterprise'])
|
|
68
|
-
.optional()
|
|
69
|
-
.describe('Organization size'),
|
|
70
|
-
contacts: z.array(z.string()).optional().describe('Contact person wikilinks'),
|
|
71
|
-
projects: z.array(z.string()).optional().describe('Related project wikilinks'),
|
|
72
|
-
relationship_start: z.string().optional().describe('When the relationship started'),
|
|
73
100
|
});
|
|
74
101
|
/**
|
|
75
|
-
*
|
|
102
|
+
* Position — a position spec or open job. Renamed from `role` to avoid
|
|
103
|
+
* collision with `person.role` (the free-text title field). Reframes from
|
|
104
|
+
* "the person's seat" to "the spec for a position."
|
|
76
105
|
*/
|
|
77
|
-
export const
|
|
78
|
-
entity_type: z.literal('
|
|
79
|
-
name: z.string().min(1, '
|
|
106
|
+
export const PositionSchema = EntityBaseSchema.extend({
|
|
107
|
+
entity_type: z.literal('position'),
|
|
108
|
+
name: z.string().min(1, 'Position name is required'),
|
|
80
109
|
department: z.string().optional().describe('Department'),
|
|
81
|
-
level: z.number().optional().describe('Level 1–5 from leveling framework'),
|
|
82
110
|
category: z.enum(['staff', 'contractor', 'intern'])
|
|
83
111
|
.optional()
|
|
84
112
|
.describe('Employment category'),
|
|
85
|
-
status: z.enum(['
|
|
86
|
-
.default('
|
|
87
|
-
.describe('
|
|
88
|
-
location: z.string().optional().describe('Location'),
|
|
89
|
-
reports_to: z.string().optional().describe('Parent role or person wikilink'),
|
|
113
|
+
status: z.enum(['draft', 'open', 'filled', 'closed'])
|
|
114
|
+
.default('open')
|
|
115
|
+
.describe('Position lifecycle'),
|
|
90
116
|
});
|
|
91
117
|
/**
|
|
92
|
-
*
|
|
118
|
+
* Deal — pre-project opportunity in the sales pipeline.
|
|
93
119
|
*/
|
|
94
|
-
export const
|
|
95
|
-
entity_type: z.literal('
|
|
96
|
-
name: z.string().min(1, '
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
120
|
+
export const DealSchema = EntityBaseSchema.extend({
|
|
121
|
+
entity_type: z.literal('deal'),
|
|
122
|
+
name: z.string().min(1, 'Deal name is required'),
|
|
123
|
+
client: z.string().optional().describe('Client organization wikilink'),
|
|
124
|
+
contact: z.string().optional().describe('Primary contact person wikilink'),
|
|
125
|
+
stage: z.enum(['qualification', 'scoping', 'proposal', 'negotiation', 'pending-signature', 'won', 'lost'])
|
|
126
|
+
.default('qualification')
|
|
127
|
+
.describe('Pipeline stage'),
|
|
128
|
+
deal_value: z.number().optional().describe('Estimated deal value'),
|
|
129
|
+
start_date: dateField('start', 'Start date', 'When work on the deal began (enables Timeline rendering of duration)'),
|
|
130
|
+
date: dateField('primary', 'Close date', 'Expected close date'),
|
|
101
131
|
});
|
|
102
132
|
// ══════════════════════════════════════════════════════════════════════════════
|
|
103
|
-
//
|
|
133
|
+
// PM — project, event, task, deliverable
|
|
104
134
|
// ══════════════════════════════════════════════════════════════════════════════
|
|
105
135
|
/**
|
|
106
|
-
* Project — a client engagement or internal initiative
|
|
136
|
+
* Project — a client engagement or internal initiative.
|
|
137
|
+
*
|
|
138
|
+
* `services` is a wikilink array to `service` entities the project includes
|
|
139
|
+
* (replaces the previous `practice_area` concept).
|
|
107
140
|
*/
|
|
108
141
|
export const ProjectSchema = EntityBaseSchema.extend({
|
|
109
142
|
entity_type: z.literal('project'),
|
|
110
143
|
name: z.string().min(1, 'Project name is required'),
|
|
111
|
-
category: z.
|
|
144
|
+
category: z.enum(['client', 'internal'])
|
|
145
|
+
.optional()
|
|
146
|
+
.describe('Project category'),
|
|
147
|
+
project_type: z.string().optional().describe('Kind of project (e.g., website, research, event, rebrand, prototype)'),
|
|
112
148
|
client: z.string().optional().describe('Client organization wikilink'),
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
status: z.enum(['planning', 'scoping', 'active', 'on-hold', 'completed', 'archived'])
|
|
149
|
+
services: z.array(z.string()).optional()
|
|
150
|
+
.describe('Service entities this project includes (wikilinks)'),
|
|
151
|
+
status: z.enum(['planning', 'in-progress', 'paused', 'complete', 'archived'])
|
|
117
152
|
.optional()
|
|
118
153
|
.describe('Current project status'),
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
team: z.array(z.string()).optional().describe('Team member wikilinks'),
|
|
122
|
-
deliverables: z.array(z.string()).optional().describe('Deliverable wikilinks'),
|
|
123
|
-
deal: z.string().optional().describe('Originating deal wikilink'),
|
|
154
|
+
start_date: dateField('start', 'Start date', 'Project start date'),
|
|
155
|
+
date: dateField('primary', 'End date', 'Project end date'),
|
|
124
156
|
});
|
|
125
157
|
/**
|
|
126
|
-
*
|
|
158
|
+
* Event — any scheduled gathering (meeting, call, workshop, review, etc.).
|
|
159
|
+
* `type` discriminates the kind of gathering for grouping/filtering. The
|
|
160
|
+
* default `meeting` preserves semantics for legacy meeting captures.
|
|
161
|
+
*
|
|
162
|
+
* Note: `deadline` is intentionally NOT a `type` value — deadlines are
|
|
163
|
+
* `task` entries with a `date` (the due date). Events are things you attend.
|
|
127
164
|
*/
|
|
128
|
-
export const
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
165
|
+
export const EVENT_TYPES = [
|
|
166
|
+
'meeting', 'call', 'review', 'workshop', 'presentation', 'conference', 'other',
|
|
167
|
+
];
|
|
168
|
+
export const EventSchema = EntityBaseSchema.extend({
|
|
169
|
+
entity_type: z.literal('event'),
|
|
170
|
+
name: z.string().min(1, 'Event name/subject is required'),
|
|
171
|
+
type: z.enum(EVENT_TYPES).default('meeting').describe('Kind of event'),
|
|
132
172
|
attendees: z.array(z.string()).optional().describe('Attendee wikilinks'),
|
|
133
|
-
related_projects: z.array(z.string()).optional().describe('Related project wikilinks'),
|
|
134
|
-
related_organizations: z.array(z.string()).optional().describe('Related organization wikilinks'),
|
|
135
173
|
location: z.string().optional().describe('Location or meeting link'),
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
/**
|
|
139
|
-
* Decision — structured decision records (ADR-style)
|
|
140
|
-
*/
|
|
141
|
-
export const DecisionSchema = EntityBaseSchema.extend({
|
|
142
|
-
entity_type: z.literal('decision'),
|
|
143
|
-
name: z.string().min(1, 'Decision name is required'),
|
|
144
|
-
status: z.enum(['proposed', 'accepted', 'rejected', 'deprecated', 'superseded'])
|
|
145
|
-
.default('proposed')
|
|
146
|
-
.describe('Current status'),
|
|
147
|
-
decision_makers: z.array(z.string()).optional().describe('People who made the decision'),
|
|
148
|
-
stakeholders: z.array(z.string()).optional().describe('People affected'),
|
|
149
|
-
context: z.string().optional().describe('Background and why this decision was needed'),
|
|
150
|
-
alternatives: z.string().optional().describe('Alternatives considered (markdown)'),
|
|
151
|
-
decision: z.string().optional().describe('The actual decision made'),
|
|
152
|
-
rationale: z.string().optional().describe('Why this decision was chosen'),
|
|
153
|
-
consequences: z.string().optional().describe('Outcomes and risks'),
|
|
154
|
-
supersedes: z.string().optional().describe('Decision this one replaces (wikilink)'),
|
|
155
|
-
superseded_by: z.string().optional().describe('Decision that replaces this one (wikilink)'),
|
|
174
|
+
start_date: dateField('start', 'Start date', 'When a multi-day event begins (omit for single-day events)'),
|
|
175
|
+
date: dateField('primary', 'Date', 'When the event takes place'),
|
|
156
176
|
});
|
|
157
177
|
/**
|
|
158
|
-
* Task — lightweight action items and to-dos
|
|
178
|
+
* Task — lightweight action items and to-dos.
|
|
179
|
+
*
|
|
180
|
+
* `phase` is intentionally free-text (not a separate entity type or workspace
|
|
181
|
+
* config list). Phases vary widely across project types; the Timeline view
|
|
182
|
+
* auto-discovers distinct values per-project for grouping.
|
|
159
183
|
*/
|
|
160
184
|
export const TaskSchema = EntityBaseSchema.extend({
|
|
161
185
|
entity_type: z.literal('task'),
|
|
162
186
|
name: z.string().min(1, 'Task name is required'),
|
|
163
|
-
status: z.enum(['
|
|
164
|
-
.default('
|
|
187
|
+
status: z.enum(['backlog', 'todo', 'in-progress', 'in-review', 'done', 'cancelled'])
|
|
188
|
+
.default('backlog')
|
|
165
189
|
.describe('Task status'),
|
|
166
190
|
priority: z.enum(['low', 'medium', 'high', 'urgent'])
|
|
167
191
|
.optional()
|
|
168
192
|
.describe('Priority level'),
|
|
169
|
-
assignee: z.string().optional().describe('
|
|
170
|
-
|
|
171
|
-
|
|
193
|
+
assignee: z.string().optional().describe('Who the task is assigned to: a workspace account as `[[user:<id>|@handle]]` (preferred — this is what powers "My Tasks"), or a person-entity wikilink `[[person-id]]` for someone without an account')
|
|
194
|
+
// `refType` rides on the field via `.meta()` (same mechanism as the date
|
|
195
|
+
// vocabulary's `dateRole`/`label`). It marks `assignee` as a reference
|
|
196
|
+
// that must point at a `person` entity — surfaced through
|
|
197
|
+
// `describeZodObject` → `/api/schema` + `get_entity_schema` so pickers
|
|
198
|
+
// scope generically, and consumed by the write-path validator in
|
|
199
|
+
// entity-mutations.ts that actually rejects non-person targets. Zod
|
|
200
|
+
// itself can't resolve wikilinks, so this is a hint, not enforcement.
|
|
201
|
+
.meta({ refType: 'person' }),
|
|
202
|
+
phase: z.string().optional().describe('Project phase (free-text — Discover, Design, Prototype, Build, etc.)'),
|
|
203
|
+
start_date: dateField('start', 'Start date', 'Task start date (enables Timeline / Gantt rendering of duration)'),
|
|
204
|
+
date: dateField('primary', 'Due date', 'When the task is due'),
|
|
205
|
+
// Auto-stamped by graph.update when status transitions to/from `done` (see
|
|
206
|
+
// composeUpdatedFrontmatter). Lets surfaces show "completed today" without
|
|
207
|
+
// conflating it with the due date. ISO datetime; cleared when reopened.
|
|
208
|
+
completed_at: z.string().datetime('Invalid datetime format').optional()
|
|
209
|
+
.describe('When the task was marked done (ISO datetime, auto-managed)')
|
|
210
|
+
.meta({ label: 'Completed at' }),
|
|
211
|
+
});
|
|
212
|
+
/**
|
|
213
|
+
* Deliverable — a scoped output promised to a client.
|
|
214
|
+
*/
|
|
215
|
+
export const DeliverableSchema = EntityBaseSchema.extend({
|
|
216
|
+
entity_type: z.literal('deliverable'),
|
|
217
|
+
name: z.string().min(1, 'Deliverable name is required'),
|
|
218
|
+
project: z.string().optional().describe('Parent project wikilink'),
|
|
219
|
+
status: z.enum(['planned', 'in-progress', 'delivered', 'accepted', 'rejected'])
|
|
220
|
+
.default('planned')
|
|
221
|
+
.describe('Delivery status'),
|
|
222
|
+
phase: z.string().optional().describe('Project phase (free-text — same semantics as task.phase)'),
|
|
223
|
+
start_date: dateField('start', 'Start date', 'Deliverable start date (enables Timeline rendering of duration)'),
|
|
224
|
+
date: dateField('primary', 'Due date', 'When the deliverable is due'),
|
|
172
225
|
});
|
|
226
|
+
// ══════════════════════════════════════════════════════════════════════════════
|
|
227
|
+
// KM — authored (document, deck, publication, case-study, service, skill)
|
|
228
|
+
// ══════════════════════════════════════════════════════════════════════════════
|
|
173
229
|
/**
|
|
174
|
-
*
|
|
175
|
-
*
|
|
230
|
+
* Shared description for the `asset_ref` field — now `dataset`-ONLY.
|
|
231
|
+
*
|
|
232
|
+
* Body-embed model (2026-06-01): an import seeds the asset reference INTO THE
|
|
233
|
+
* BODY (an `` image embed for materials, a `[name](url)` source
|
|
234
|
+
* link for documents) — exactly as a user would. So material/document no longer
|
|
235
|
+
* carry `asset_ref`; the reference is in the markdown, not the frontmatter.
|
|
236
|
+
*
|
|
237
|
+
* `dataset` is the lone exception: a dataset body must stay valid CSV, so it
|
|
238
|
+
* can't hold a body link. `asset_ref` records the STORAGE UUID of the source
|
|
239
|
+
* xlsx (the `assets.db` `asset_id` / immutable-key id, never a URL, never an
|
|
240
|
+
* entity id) as INVISIBLE provenance — survives the entity moving repos and an
|
|
241
|
+
* asset-backend swap. It is one-to-one provenance, NOT an embed graph (the
|
|
242
|
+
* many-to-many image-embed mechanism is still markdown `` in a body).
|
|
243
|
+
*
|
|
244
|
+
* `.meta({ internal: true })` keeps it out of the field-metadata API, the
|
|
245
|
+
* property panel, and the agent's `get_entity_schema` (same treatment as
|
|
246
|
+
* `source_file`) — it is set by the import path, never hand-edited.
|
|
247
|
+
*/
|
|
248
|
+
const ASSET_REF_DESC = 'Storage UUID of the source xlsx this dataset was imported from';
|
|
249
|
+
/**
|
|
250
|
+
* Document — any authored document. The `guideline` category absorbs the
|
|
251
|
+
* former standalone `guideline` entity type.
|
|
176
252
|
*/
|
|
177
253
|
export const DocumentSchema = EntityBaseSchema.extend({
|
|
178
254
|
entity_type: z.literal('document'),
|
|
179
255
|
name: z.string().min(1, 'Document name is required'),
|
|
180
|
-
category: z.
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
status: z.enum(['draft', 'sent', 'accepted', 'rejected', 'negotiating', 'signed', 'completed', 'terminated'])
|
|
256
|
+
category: z.enum(['proposal', 'contract', 'brief', 'memo', 'report', 'template', 'guideline', 'other'])
|
|
257
|
+
.optional()
|
|
258
|
+
.describe('Document category'),
|
|
259
|
+
status: z.enum(['draft', 'review', 'final', 'archived'])
|
|
185
260
|
.default('draft')
|
|
186
261
|
.describe('Document status'),
|
|
187
|
-
|
|
262
|
+
// No asset_ref: under the body-embed model an imported document seeds the
|
|
263
|
+
// extracted text + a `[name](url)` source link directly into its body, so the
|
|
264
|
+
// source-file reference lives in the markdown, not the frontmatter.
|
|
188
265
|
});
|
|
189
266
|
/**
|
|
190
|
-
*
|
|
267
|
+
* Deck — a slide deck or presentation. Stays its own type alongside
|
|
268
|
+
* `document` because of the dedicated slides renderer + agent skills that
|
|
269
|
+
* pattern-match on `entity_type === 'deck'`.
|
|
191
270
|
*/
|
|
192
|
-
export const
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
271
|
+
export const DeckSchema = EntityBaseSchema.extend({
|
|
272
|
+
entity_type: z.literal('deck'),
|
|
273
|
+
name: z.string().min(1, 'Deck name is required'),
|
|
274
|
+
audience: z.enum(['client', 'team', 'board', 'external', 'other'])
|
|
275
|
+
.optional()
|
|
276
|
+
.describe('Intended audience'),
|
|
277
|
+
status: z.enum(['draft', 'review', 'final', 'archived'])
|
|
278
|
+
.default('draft')
|
|
279
|
+
.describe('Deck status'),
|
|
197
280
|
});
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
281
|
+
/**
|
|
282
|
+
* Publication — authored content published externally.
|
|
283
|
+
*/
|
|
284
|
+
export const PublicationSchema = EntityBaseSchema.extend({
|
|
285
|
+
entity_type: z.literal('publication'),
|
|
286
|
+
name: z.string().min(1, 'Publication name is required'),
|
|
287
|
+
platform: z.string().optional().describe('Where published (e.g., linkedin, medium, behance, conference)'),
|
|
288
|
+
status: z.enum(['draft', 'review', 'scheduled', 'published'])
|
|
289
|
+
.default('draft')
|
|
290
|
+
.describe('Publication status'),
|
|
291
|
+
url: z.string().optional().describe('URL of published content'),
|
|
202
292
|
});
|
|
203
293
|
/**
|
|
204
|
-
*
|
|
205
|
-
* Absorbs the former separate technique type.
|
|
294
|
+
* Case Study — portfolio narratives for completed projects.
|
|
206
295
|
*/
|
|
207
|
-
export const
|
|
208
|
-
entity_type: z.literal('
|
|
209
|
-
name: z.string().min(1, '
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
296
|
+
export const CaseStudySchema = EntityBaseSchema.extend({
|
|
297
|
+
entity_type: z.literal('case-study'),
|
|
298
|
+
name: z.string().min(1, 'Case study name is required'),
|
|
299
|
+
client: z.string().optional().describe('Client organization wikilink'),
|
|
300
|
+
services: z.array(z.string()).optional()
|
|
301
|
+
.describe('Service entities this case study highlights (wikilinks)'),
|
|
302
|
+
date_range: z.string().optional().describe('Project timeframe (e.g., 2025-09 / 2026-01)'),
|
|
303
|
+
status: z.enum(['draft', 'review', 'final', 'published'])
|
|
304
|
+
.default('draft')
|
|
305
|
+
.describe('Case study status'),
|
|
216
306
|
});
|
|
217
307
|
/**
|
|
218
|
-
*
|
|
219
|
-
*
|
|
308
|
+
* Service — the firm's offerings + methodologies. Replaces the old
|
|
309
|
+
* `process` type and absorbs `practice-area` (top-level services replace
|
|
310
|
+
* what practice-area was trying to be).
|
|
311
|
+
*
|
|
312
|
+
* `sprint` links a granular service to its parent service (top-level
|
|
313
|
+
* services have none). `depends_on` / `enables` form a directed graph
|
|
314
|
+
* across the service set — the Graph view's most valuable use case.
|
|
315
|
+
*/
|
|
316
|
+
export const ServiceSchema = EntityBaseSchema.extend({
|
|
317
|
+
entity_type: z.literal('service'),
|
|
318
|
+
name: z.string().min(1, 'Service name is required'),
|
|
319
|
+
service_id: z.string().optional()
|
|
320
|
+
.describe('Optional human-readable id (e.g. "1.4") for studios that number their services'),
|
|
321
|
+
sprint: z.string().optional()
|
|
322
|
+
.describe('Parent service wikilink for hierarchy (top-level services / sprints have none)'),
|
|
323
|
+
depends_on: z.array(z.string()).optional()
|
|
324
|
+
.describe('Services that must precede this one (wikilinks)'),
|
|
325
|
+
enables: z.array(z.string()).optional()
|
|
326
|
+
.describe('Services that this one unlocks (wikilinks)'),
|
|
327
|
+
deliverables: z.array(z.string()).optional()
|
|
328
|
+
.describe('Named outputs this service produces'),
|
|
329
|
+
status: z.enum(['offered', 'in-development', 'retired'])
|
|
330
|
+
.default('offered')
|
|
331
|
+
.describe('Service lifecycle'),
|
|
332
|
+
});
|
|
333
|
+
/**
|
|
334
|
+
* Skill — prompt-level instructions the agent can load to teach it how to
|
|
335
|
+
* do a specific job. The entity id is the skill name used by `load_skill`.
|
|
336
|
+
* The body markdown is the instruction content.
|
|
337
|
+
*
|
|
338
|
+
* `applies_to` lets the agent load deck-skills when working on a deck,
|
|
339
|
+
* proposal-skills when on a `document.category=proposal`, etc. Empty /
|
|
340
|
+
* unset = generally applicable.
|
|
341
|
+
*
|
|
342
|
+
* The previous `loading: eager | on-demand` field is gone for graph-authored
|
|
343
|
+
* skills. Filesystem skills (shipped with the product in `src/agent/skills/`)
|
|
344
|
+
* keep their own loading mechanism via skill-loader.ts and orchestrator.ts.
|
|
345
|
+
*
|
|
346
|
+
* `name` and `description` are optional at creation so the sidebar new-entry
|
|
347
|
+
* flow works — the user fills them in afterward via the property panel.
|
|
348
|
+
*/
|
|
349
|
+
export const SkillSchema = EntityBaseSchema.extend({
|
|
350
|
+
entity_type: z.literal('skill'),
|
|
351
|
+
name: z.string().optional().describe('Human-readable title (falls back to entity id)'),
|
|
352
|
+
description: z.string().optional().describe('Shown in the skill index so the agent knows when to load it'),
|
|
353
|
+
applies_to: z.array(z.string()).optional()
|
|
354
|
+
.describe('Entity types this skill applies to (e.g. ["deck"]). Empty = generally applicable.'),
|
|
355
|
+
});
|
|
356
|
+
// ══════════════════════════════════════════════════════════════════════════════
|
|
357
|
+
// CAPTURE — note, reference
|
|
358
|
+
// ══════════════════════════════════════════════════════════════════════════════
|
|
359
|
+
/**
|
|
360
|
+
* Note — freeform thinking, research, daily notes.
|
|
361
|
+
*
|
|
362
|
+
* Decisions migrated from the cut `decision` type land here as plain
|
|
363
|
+
* notes; operators may manually convert specific entries to `task` if they
|
|
364
|
+
* read better as work items.
|
|
220
365
|
*/
|
|
221
366
|
export const NoteSchema = EntityBaseSchema.extend({
|
|
222
367
|
entity_type: z.literal('note'),
|
|
223
368
|
name: z.string().min(1, 'Note name is required'),
|
|
224
|
-
|
|
369
|
+
// Entry-primary provenance (A2): when this note was derived from an
|
|
370
|
+
// uploaded asset (e.g. a converted .docx/.pdf), `source_file` holds the
|
|
371
|
+
// SOURCE ASSET'S ENTITY ID — never a URL — so the link survives an asset
|
|
372
|
+
// backend swap and joins the graph (the relationship is also surfaced as a
|
|
373
|
+
// wikilink in the body). Absent for notes created directly.
|
|
374
|
+
//
|
|
375
|
+
// `.meta({ internal: true })` marks it system-managed: the field-metadata
|
|
376
|
+
// API (describeZodObject) omits it, so it never appears in the property
|
|
377
|
+
// panel or the agent's get_entity_schema, and the create/changeType field
|
|
378
|
+
// seeders skip it (so a directly-created note has NO source_file rather
|
|
379
|
+
// than `''`). Set only by the import/convert path.
|
|
380
|
+
source_file: z.string().optional().describe('Entity id of the source asset this note was derived from').meta({ internal: true }),
|
|
225
381
|
});
|
|
226
382
|
/**
|
|
227
|
-
*
|
|
228
|
-
* Bridges the commercial side (proposal, contract) to execution (artifacts, tasks).
|
|
383
|
+
* Reference — external resources and inspiration.
|
|
229
384
|
*/
|
|
230
|
-
export const
|
|
231
|
-
entity_type: z.literal('
|
|
232
|
-
name: z.string().min(1, '
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
.default('planned')
|
|
236
|
-
.describe('Delivery status'),
|
|
237
|
-
due_date: z.string().optional().describe('Due date'),
|
|
238
|
-
delivered_date: z.string().optional().describe('Actual delivery date'),
|
|
239
|
-
description: z.string().optional().describe('What this deliverable comprises'),
|
|
385
|
+
export const ReferenceSchema = EntityBaseSchema.extend({
|
|
386
|
+
entity_type: z.literal('reference'),
|
|
387
|
+
name: z.string().min(1, 'Reference name is required'),
|
|
388
|
+
source: z.string().optional().describe('Source or author'),
|
|
389
|
+
link: z.string().optional().describe('URL'),
|
|
240
390
|
});
|
|
241
391
|
/**
|
|
242
|
-
*
|
|
392
|
+
* Dataset — a CSV the workspace owns, edited in a grid.
|
|
393
|
+
*
|
|
394
|
+
* Conventional CSV: the markdown body IS the data, and the header row IS the
|
|
395
|
+
* column list — there's no separate typed column schema. The grid editor
|
|
396
|
+
* (web CsvEditor) and the agent's `query_dataset` / `append_rows` tools read
|
|
397
|
+
* the body through CSVService (src/services/csv-service.ts), deriving columns
|
|
398
|
+
* from the header. Distinct from an uploaded `asset` with
|
|
399
|
+
* `asset_kind: 'spreadsheet'`, which is an opaque binary — a dataset is
|
|
400
|
+
* in-graph, queryable, and row-appendable.
|
|
243
401
|
*/
|
|
244
|
-
export const
|
|
245
|
-
entity_type: z.literal('
|
|
246
|
-
name: z.string().min(1, '
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
402
|
+
export const DatasetSchema = EntityBaseSchema.extend({
|
|
403
|
+
entity_type: z.literal('dataset'),
|
|
404
|
+
name: z.string().min(1, 'Dataset name is required'),
|
|
405
|
+
// Entry-primary provenance (A2): set when this dataset was derived from an
|
|
406
|
+
// uploaded asset (e.g. one sheet of a converted .xlsx). Holds the SOURCE
|
|
407
|
+
// ASSET'S ENTITY ID, never a URL. See NoteSchema.source_file (incl. the
|
|
408
|
+
// `.meta({ internal: true })` rationale — same system-managed treatment).
|
|
409
|
+
source_file: z.string().optional().describe('Entity id of the source asset this dataset was derived from').meta({ internal: true }),
|
|
410
|
+
// When derived from one sheet of a converted .xlsx, the original worksheet
|
|
411
|
+
// name — the stable key that lets a re-convert (replace) match this dataset
|
|
412
|
+
// back to its sheet and update it IN PLACE, preserving the id + inbound
|
|
413
|
+
// links even if the first conversion's id was collision-suffixed. Internal
|
|
414
|
+
// (system-managed); never user-edited.
|
|
415
|
+
source_sheet: z.string().optional().describe('Original worksheet name this dataset was derived from').meta({ internal: true }),
|
|
416
|
+
// Asset-as-embed provenance: the storage UUID of the source asset (e.g. the
|
|
417
|
+
// .xlsx this sheet was imported from). Frontmatter only — the dataset body
|
|
418
|
+
// stays pure CSV, so the asset link is NEVER a body embed. See ASSET_REF_DESC.
|
|
419
|
+
asset_ref: z.string().optional().describe(ASSET_REF_DESC).meta({ internal: true }),
|
|
256
420
|
});
|
|
257
421
|
/**
|
|
258
|
-
*
|
|
422
|
+
* Material — a first-class graph entry that wraps a free-standing binary
|
|
423
|
+
* asset (image or opaque file: photo, logo, psd/ai/sketch/fig, video, audio,
|
|
424
|
+
* archive) when no better type fits. The asset-as-embed catch-all: import
|
|
425
|
+
* routes docx/pdf → `document`, xlsx → `dataset`, and everything else (image +
|
|
426
|
+
* opaque) → `material`.
|
|
427
|
+
*
|
|
428
|
+
* Distinct from `asset` (the stored bytes + `assets.db` row) and from
|
|
429
|
+
* `reference` (a pointer to an EXTERNAL source the workspace doesn't own).
|
|
430
|
+
* Under the body-embed model a material's body IS the asset: import seeds an
|
|
431
|
+
* inline `` image embed (images) or a `[name](url)` download link
|
|
432
|
+
* (opaque binaries). No `asset_ref` frontmatter — the reference lives in the
|
|
433
|
+
* markdown. A hand-created material (New Entry / agent) is a notes/catalog
|
|
434
|
+
* entry whose body the user writes themselves.
|
|
259
435
|
*/
|
|
260
|
-
export const
|
|
261
|
-
entity_type: z.literal('
|
|
262
|
-
name: z.string().min(1, '
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
.describe('Pipeline stage'),
|
|
268
|
-
deal_value: z.number().optional().describe('Estimated deal value'),
|
|
269
|
-
probability: z.number().min(0).max(100).optional().describe('Win probability 0–100'),
|
|
270
|
-
expected_close: z.string().optional().describe('Expected close date'),
|
|
271
|
-
source: z.enum(['referral', 'inbound', 'outbound', 'repeat', 'partner', 'other'])
|
|
436
|
+
export const MaterialSchema = EntityBaseSchema.extend({
|
|
437
|
+
entity_type: z.literal('material'),
|
|
438
|
+
name: z.string().min(1, 'Material name is required'),
|
|
439
|
+
// Purpose-oriented grouping axis (NOT a re-encoding of the asset's kind,
|
|
440
|
+
// which lives in assets.db). Optional. Values are intentionally minimal —
|
|
441
|
+
// enums are cheap to extend, expensive to remove.
|
|
442
|
+
category: z.enum(['design', 'brand', 'media', 'archive', 'other'])
|
|
272
443
|
.optional()
|
|
273
|
-
.describe('
|
|
274
|
-
proposals: z.array(z.string()).optional().describe('Related proposal document wikilinks'),
|
|
275
|
-
project: z.string().optional().describe('Resulting project wikilink (once won)'),
|
|
276
|
-
lost_reason: z.string().optional().describe('Why the deal was lost'),
|
|
444
|
+
.describe('Purpose grouping (design source, brand asset, media, archive, other)'),
|
|
277
445
|
});
|
|
278
446
|
// ══════════════════════════════════════════════════════════════════════════════
|
|
279
|
-
//
|
|
447
|
+
// SYSTEM — asset
|
|
280
448
|
// ══════════════════════════════════════════════════════════════════════════════
|
|
281
449
|
/**
|
|
282
|
-
*
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
/**
|
|
294
|
-
* Standard — guidelines and best practices
|
|
450
|
+
* Asset — a hosted binary the workspace owns. The frontmatter is the
|
|
451
|
+
* entity; the body is optional user notes. The binary itself lives in
|
|
452
|
+
* the asset backend (R2 or local volume) at `asset/{entity_id}/{file}`.
|
|
453
|
+
*
|
|
454
|
+
* Distinct from `reference`, which points at an external URL the
|
|
455
|
+
* workspace doesn't own. Per-kind UI (icon, viewer, thumbnail) is
|
|
456
|
+
* driven by `asset_kind`; see `detectAssetKind` in
|
|
457
|
+
* src/services/assets/base.ts.
|
|
458
|
+
*
|
|
459
|
+
* Asset is graph-visible (search, history, wikilinks) but hidden from the
|
|
460
|
+
* New Entry picker — it's created via the upload/drag-drop flow.
|
|
295
461
|
*/
|
|
296
|
-
export const
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
462
|
+
export const ASSET_KINDS = [
|
|
463
|
+
'image', 'video', 'audio', 'pdf', 'spreadsheet', 'other',
|
|
464
|
+
];
|
|
465
|
+
export const AssetSchema = EntityBaseSchema.extend({
|
|
466
|
+
entity_type: z.literal('asset'),
|
|
467
|
+
name: z.string().min(1, 'Asset name is required'),
|
|
468
|
+
asset_url: z.string().min(1, 'asset_url is required').describe('Public URL or /api/assets/... path'),
|
|
469
|
+
asset_kind: z.enum(ASSET_KINDS).describe('High-level kind that drives icon and viewer'),
|
|
470
|
+
asset_extension: z.string().min(1).describe('Original file extension including the dot, e.g. ".csv"'),
|
|
471
|
+
asset_size: z.number().int().nonnegative().describe('Size in bytes'),
|
|
472
|
+
asset_mime: z.string().optional().describe('Detected MIME type'),
|
|
473
|
+
pages: z.number().int().positive().optional().describe('Page count (PDF only)'),
|
|
474
|
+
width: z.number().int().positive().optional().describe('Pixel width (image/video)'),
|
|
475
|
+
height: z.number().int().positive().optional().describe('Pixel height (image/video)'),
|
|
476
|
+
duration: z.number().nonnegative().optional().describe('Length in seconds (audio/video)'),
|
|
477
|
+
checksum: z.string().optional().describe('Content hash, e.g. sha256:...'),
|
|
478
|
+
// Index-state split (A1): `indexable` is the IMMUTABLE half — set once at
|
|
479
|
+
// import from the format registry (`indexAs !== 'none'`) and committed to
|
|
480
|
+
// frontmatter. The MUTABLE run state (index_status / indexed_at /
|
|
481
|
+
// index_version) lives in LanceDB ONLY and is deliberately NOT a schema
|
|
482
|
+
// field — stamping it here would fire an async git commit per asset and
|
|
483
|
+
// defeat the batched-commit path.
|
|
484
|
+
//
|
|
485
|
+
// Migration: legacy assets predate this field, so `indexable === undefined`
|
|
486
|
+
// means "unknown / treat as already-indexed" — the badge falls back to a
|
|
487
|
+
// live status lookup and the P3 boot sweep must NOT mass re-derive them off
|
|
488
|
+
// a missing `indexable` (it keys re-derivation on indexed_at/index_version).
|
|
489
|
+
//
|
|
490
|
+
// `.meta({ internal: true })` keeps this immutable flag out of the
|
|
491
|
+
// field-metadata API, the property panel, and the agent's get_entity_schema
|
|
492
|
+
// so neither a user nor the agent can hand-edit it (see NoteSchema.source_file).
|
|
493
|
+
indexable: z.boolean().optional().describe('Whether this asset is set up for content indexing (immutable; set at import)').meta({ internal: true }),
|
|
303
494
|
});
|
|
495
|
+
// ══════════════════════════════════════════════════════════════════════════════
|
|
496
|
+
// SYSTEM — comment (virtual entity, SQLite-backed)
|
|
497
|
+
// ══════════════════════════════════════════════════════════════════════════════
|
|
304
498
|
/**
|
|
305
|
-
*
|
|
499
|
+
* Comment — a threaded comment anchored to another entry. Unlike every other
|
|
500
|
+
* entity type, comments are NOT stored as markdown files; they live in
|
|
501
|
+
* `comments.db` (see `src/services/comment-service.ts`) for throughput.
|
|
502
|
+
* Agents see them as first-class typed entities through the virtual-entity
|
|
503
|
+
* adapter (`src/mcp/comment-virtual-entity.ts`), which is why the schema
|
|
504
|
+
* lives here alongside the file-backed types.
|
|
505
|
+
*
|
|
506
|
+
* The shape documents what fields the MCP envelope exposes; runtime
|
|
507
|
+
* validation happens inside CommentService itself.
|
|
306
508
|
*/
|
|
307
|
-
export const
|
|
308
|
-
entity_type: z.literal('
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
509
|
+
export const CommentSchema = EntityBaseSchema.extend({
|
|
510
|
+
entity_type: z.literal('comment'),
|
|
511
|
+
repo: z.string().describe('Folder the anchored entry lives in'),
|
|
512
|
+
entry_type: z.string().describe('Entity type of the anchored entry'),
|
|
513
|
+
entry_id: z.string().describe('Entity id of the anchored entry'),
|
|
514
|
+
thread_id: z.string().describe('Head comment id; replies share the same thread_id'),
|
|
515
|
+
parent_id: z.string().nullable().optional().describe('Parent comment id for replies, null on the head'),
|
|
516
|
+
author_user_id: z.number().int().describe('users.id of the author'),
|
|
517
|
+
author_role: z.enum(['user', 'agent']).describe('Whether the author was a human or the agent'),
|
|
518
|
+
anchor_quote: z.string().nullable().optional()
|
|
519
|
+
.describe('Original highlighted text at creation time, ≤256 chars (used for orphan rendering)'),
|
|
520
|
+
resolved_at: z.string().nullable().optional(),
|
|
521
|
+
resolved_by_user_id: z.number().int().nullable().optional(),
|
|
522
|
+
edited: z.boolean().optional(),
|
|
523
|
+
mentions: z.array(z.string()).optional().describe('Handles of mentioned users'),
|
|
316
524
|
});
|
|
317
525
|
// ══════════════════════════════════════════════════════════════════════════════
|
|
318
|
-
// ══════════════════════════════════════════════════════════════════════════════
|
|
319
526
|
// SCHEMA REGISTRY
|
|
320
527
|
// ══════════════════════════════════════════════════════════════════════════════
|
|
321
528
|
/**
|
|
322
|
-
* Maps entity types to their Zod schemas.
|
|
323
|
-
*
|
|
529
|
+
* Maps entity types to their Zod schemas. 17 canonical built-in types
|
|
530
|
+
* (16 user-facing + 1 system). Workspaces can register additional custom
|
|
531
|
+
* types via SchemaRegistry (schema_extensions).
|
|
324
532
|
*/
|
|
325
533
|
export const ENTITY_SCHEMAS = {
|
|
326
|
-
//
|
|
534
|
+
// CRM (4)
|
|
327
535
|
person: PersonSchema,
|
|
328
536
|
organization: OrganizationSchema,
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
//
|
|
537
|
+
position: PositionSchema,
|
|
538
|
+
deal: DealSchema,
|
|
539
|
+
// PM (4)
|
|
332
540
|
project: ProjectSchema,
|
|
333
|
-
|
|
334
|
-
decision: DecisionSchema,
|
|
541
|
+
event: EventSchema,
|
|
335
542
|
task: TaskSchema,
|
|
336
|
-
document: DocumentSchema,
|
|
337
|
-
dataset: DatasetSchema,
|
|
338
|
-
reference: ReferenceSchema,
|
|
339
|
-
note: NoteSchema,
|
|
340
543
|
deliverable: DeliverableSchema,
|
|
544
|
+
// KM — authored (6)
|
|
545
|
+
document: DocumentSchema,
|
|
546
|
+
deck: DeckSchema,
|
|
341
547
|
publication: PublicationSchema,
|
|
342
|
-
deal: DealSchema,
|
|
343
|
-
// Knowledge (3)
|
|
344
|
-
process: ProcessSchema,
|
|
345
|
-
standard: StandardSchema,
|
|
346
548
|
'case-study': CaseStudySchema,
|
|
549
|
+
service: ServiceSchema,
|
|
550
|
+
skill: SkillSchema,
|
|
551
|
+
// Capture (4)
|
|
552
|
+
note: NoteSchema,
|
|
553
|
+
reference: ReferenceSchema,
|
|
554
|
+
dataset: DatasetSchema,
|
|
555
|
+
material: MaterialSchema,
|
|
556
|
+
// System (2)
|
|
557
|
+
asset: AssetSchema,
|
|
558
|
+
comment: CommentSchema,
|
|
347
559
|
};
|
|
348
560
|
/**
|
|
349
561
|
* Plural subfolder name → singular entity_type mapping
|
|
@@ -351,27 +563,48 @@ export const ENTITY_SCHEMAS = {
|
|
|
351
563
|
export const PLURAL_TO_SINGULAR = {
|
|
352
564
|
'people': 'person',
|
|
353
565
|
'organizations': 'organization',
|
|
354
|
-
'
|
|
355
|
-
'
|
|
566
|
+
'positions': 'position',
|
|
567
|
+
'deals': 'deal',
|
|
356
568
|
'projects': 'project',
|
|
357
|
-
'
|
|
358
|
-
'decisions': 'decision',
|
|
569
|
+
'events': 'event',
|
|
359
570
|
'tasks': 'task',
|
|
360
|
-
'documents': 'document',
|
|
361
|
-
'datasets': 'dataset',
|
|
362
|
-
'references': 'reference',
|
|
363
|
-
'notes': 'note',
|
|
364
571
|
'deliverables': 'deliverable',
|
|
572
|
+
'documents': 'document',
|
|
573
|
+
'decks': 'deck',
|
|
365
574
|
'publications': 'publication',
|
|
366
|
-
'deals': 'deal',
|
|
367
|
-
'processes': 'process',
|
|
368
|
-
'standards': 'standard',
|
|
369
575
|
'case-studies': 'case-study',
|
|
576
|
+
'services': 'service',
|
|
577
|
+
'skills': 'skill',
|
|
578
|
+
'notes': 'note',
|
|
579
|
+
'references': 'reference',
|
|
580
|
+
'datasets': 'dataset',
|
|
581
|
+
'materials': 'material',
|
|
582
|
+
'assets': 'asset',
|
|
583
|
+
'comments': 'comment',
|
|
370
584
|
};
|
|
371
585
|
/**
|
|
372
586
|
* Singular entity_type → plural subfolder name mapping
|
|
373
587
|
*/
|
|
374
588
|
export const SINGULAR_TO_PLURAL = Object.fromEntries(Object.entries(PLURAL_TO_SINGULAR).map(([plural, singular]) => [singular, plural]));
|
|
589
|
+
/**
|
|
590
|
+
* Cross-field task rule: a task's start date must not fall after its due date.
|
|
591
|
+
*
|
|
592
|
+
* This lives OUTSIDE the Zod schema on purpose. Expressing it as a
|
|
593
|
+
* `TaskSchema.refine(...)` would turn the ZodObject into a ZodEffects, which
|
|
594
|
+
* breaks shape introspection in schema-registry (`describeZodObject` and the
|
|
595
|
+
* schema_extensions `.extend()` path both rely on `instanceof z.ZodObject`) —
|
|
596
|
+
* and that powers the metadata field panel. So both validation entry points
|
|
597
|
+
* (this module's `validateEntity` and `graph.ts`'s private one) call this
|
|
598
|
+
* helper after a successful parse instead.
|
|
599
|
+
*
|
|
600
|
+
* `dateField` stores ISO 'YYYY-MM-DD' strings, so a lexicographic comparison
|
|
601
|
+
* is a correct date comparison.
|
|
602
|
+
*/
|
|
603
|
+
export function assertValidTaskDates(data) {
|
|
604
|
+
if (data.start_date && data.date && data.start_date > data.date) {
|
|
605
|
+
throw new Error(`Validation failed for task:\n - start_date: Start date (${data.start_date}) must be on or before the due date (${data.date})`);
|
|
606
|
+
}
|
|
607
|
+
}
|
|
375
608
|
/**
|
|
376
609
|
* Validation helper with helpful error messages
|
|
377
610
|
*/
|
|
@@ -381,11 +614,14 @@ export function validateEntity(entityType, data) {
|
|
|
381
614
|
throw new Error(`Unknown entity type: ${entityType}`);
|
|
382
615
|
}
|
|
383
616
|
try {
|
|
384
|
-
|
|
617
|
+
const parsed = schema.parse(data);
|
|
618
|
+
if (entityType === 'task')
|
|
619
|
+
assertValidTaskDates(parsed);
|
|
620
|
+
return parsed;
|
|
385
621
|
}
|
|
386
622
|
catch (error) {
|
|
387
623
|
if (error instanceof z.ZodError) {
|
|
388
|
-
const messages = error.
|
|
624
|
+
const messages = error.issues.map(e => {
|
|
389
625
|
const path = e.path.join('.');
|
|
390
626
|
return ` - ${path}: ${e.message}`;
|
|
391
627
|
});
|
|
@@ -403,7 +639,7 @@ export function validateCustomEntity(data) {
|
|
|
403
639
|
}
|
|
404
640
|
catch (error) {
|
|
405
641
|
if (error instanceof z.ZodError) {
|
|
406
|
-
const messages = error.
|
|
642
|
+
const messages = error.issues.map(e => {
|
|
407
643
|
const path = e.path.join('.');
|
|
408
644
|
return ` - ${path}: ${e.message}`;
|
|
409
645
|
});
|