studiograph 1.3.48-next.2 → 1.3.48-next.201
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 +34 -0
- package/dist/agent/prompts/entity-types-section.js +76 -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 +664 -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 +140 -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 +2202 -315
- 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 +731 -1790
- package/dist/core/validation.js +442 -228
- 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 +1361 -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 +1529 -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 +207 -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.OmdYF47-.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/2oYV6q4R.js +2 -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/8Yh26Z9_2.js +1 -0
- package/dist/web/_app/immutable/chunks/Atl8xKOm.js +2 -0
- package/dist/web/_app/immutable/chunks/B-Z_xZy_.js +4 -0
- package/dist/web/_app/immutable/chunks/B0pk0Lyx.js +1 -0
- package/dist/web/_app/immutable/chunks/B1RnjnNt.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/B8yrQWxT2.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/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/BOSiTh-42.js +1 -0
- package/dist/web/_app/immutable/chunks/BPxcCdjn.js +1 -0
- package/dist/web/_app/immutable/chunks/BVPNAzAK.js +1 -0
- package/dist/web/_app/immutable/chunks/BcOvJgjM.js +1 -0
- package/dist/web/_app/immutable/chunks/BdYQewoD.js +1 -0
- package/dist/web/_app/immutable/chunks/BfCWIy8t.js +8 -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/BmM5VZ4W.js +1 -0
- package/dist/web/_app/immutable/chunks/BnIYzuS1.js +66 -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/BtMRrdc4.js +2 -0
- package/dist/web/_app/immutable/chunks/C-AnzvKr.js +7 -0
- package/dist/web/_app/immutable/chunks/C1Y3tUpz.js +1 -0
- package/dist/web/_app/immutable/chunks/C6VZhhwF.js +1 -0
- package/dist/web/_app/immutable/chunks/C8IMrD4G2.js +3 -0
- package/dist/web/_app/immutable/chunks/CAXXrbj52.js +1 -0
- package/dist/web/_app/immutable/chunks/CB-0u-Pc2.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/CM8uYli8.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/CbCfNNV_2.js +2692 -0
- package/dist/web/_app/immutable/chunks/CbuGIyDu2.js +22 -0
- package/dist/web/_app/immutable/chunks/CcRGXA-t.js +1 -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/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/D4xXlMEU.js +2 -0
- package/dist/web/_app/immutable/chunks/D5GipQqN2.js +1 -0
- package/dist/web/_app/immutable/chunks/D9TyJuu_.js +1 -0
- package/dist/web/_app/immutable/chunks/DBFijAmG.js +1 -0
- package/dist/web/_app/immutable/chunks/DHLjkH7T.js +1 -0
- package/dist/web/_app/immutable/chunks/DIfdPIt_2.js +1 -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/DQ3HSZMs.js +2 -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/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/DimS8dbZ2.js +1 -0
- package/dist/web/_app/immutable/chunks/DjuqhOjF.js +1 -0
- package/dist/web/_app/immutable/chunks/Dk6sAhpo.js +3 -0
- package/dist/web/_app/immutable/chunks/Dl6cnwyk.js +1 -0
- package/dist/web/_app/immutable/chunks/DnIQzIOz.js +1 -0
- package/dist/web/_app/immutable/chunks/DnXYAo60.js +1 -0
- package/dist/web/_app/immutable/chunks/DnrImJan.js +1 -0
- package/dist/web/_app/immutable/chunks/Dpuq25vu2.js +1 -0
- package/dist/web/_app/immutable/chunks/DrMZDWru.js +1 -0
- package/dist/web/_app/immutable/chunks/DsVOtl0N.js +1 -0
- package/dist/web/_app/immutable/chunks/DuTXsWdP.js +2 -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/DzcFeQZU2.js +2 -0
- package/dist/web/_app/immutable/chunks/DzrRTvug.js +1 -0
- package/dist/web/_app/immutable/chunks/G5oUVQa92.js +1 -0
- package/dist/web/_app/immutable/chunks/HyhOhoeq2.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/MtI6dyxu.js +1 -0
- package/dist/web/_app/immutable/chunks/N6vnY5Si2.js +1 -0
- package/dist/web/_app/immutable/chunks/PcEbaKam.js +2 -0
- package/dist/web/_app/immutable/chunks/VTYhCLh9.js +2 -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/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/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/rbhlO_t8.js +1 -0
- package/dist/web/_app/immutable/chunks/tJpAwaTl.js +1 -0
- package/dist/web/_app/immutable/chunks/tcegdii0.js +2 -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.DSf_XGp8.js +2 -0
- package/dist/web/_app/immutable/entry/start.B7ScfxPc.js +1 -0
- package/dist/web/_app/immutable/nodes/0.BMSOOETY.js +2 -0
- package/dist/web/_app/immutable/nodes/1.B0lBUpHt.js +1 -0
- package/dist/web/_app/immutable/nodes/10.DmDbUH1j.js +1 -0
- package/dist/web/_app/immutable/nodes/11.gwY7gZdR.js +1 -0
- package/dist/web/_app/immutable/nodes/12.BpGHSr2y.js +1 -0
- package/dist/web/_app/immutable/nodes/13.Bf178QF_.js +1 -0
- package/dist/web/_app/immutable/nodes/14.D_x8-nk9.js +1 -0
- package/dist/web/_app/immutable/nodes/15.DY4XeagL.js +1 -0
- package/dist/web/_app/immutable/nodes/16.DPqftx8x.js +77 -0
- package/dist/web/_app/immutable/nodes/2.OM2LGRpi.js +109 -0
- package/dist/web/_app/immutable/nodes/3.e8ZoPCmC.js +6 -0
- package/dist/web/_app/immutable/nodes/4.BdYR1hNQ.js +11 -0
- package/dist/web/_app/immutable/nodes/5.B8sOFna9.js +5 -0
- package/dist/web/_app/immutable/nodes/6.L1BbYsmo.js +1 -0
- package/dist/web/_app/immutable/nodes/7.B7zoemJD.js +1 -0
- package/dist/web/_app/immutable/nodes/8.B1VtnfMK.js +1 -0
- package/dist/web/_app/immutable/nodes/9.BE3VCQzk.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,32 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Entity validation schemas for Studiograph
|
|
3
3
|
*
|
|
4
|
-
*
|
|
5
|
-
* -
|
|
6
|
-
* -
|
|
7
|
-
* -
|
|
4
|
+
* 19 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 (4): note, reference, dataset, material
|
|
9
|
+
* - System (1): comment
|
|
8
10
|
*
|
|
9
|
-
*
|
|
10
|
-
*
|
|
11
|
+
* The `asset` entity type was retired (asset-as-embed / Phase F); its name is
|
|
12
|
+
* reserved (see RESERVED_ENTITY_TYPES) so it can never be re-created.
|
|
13
|
+
*
|
|
14
|
+
* "An object earns first-class entity status only if it earns its own view
|
|
15
|
+
* behavior across the six primary views (List, Gallery, Kanban, Calendar,
|
|
16
|
+
* Timeline, Graph). Objects that are mostly useful because they're attached
|
|
17
|
+
* to something else become categories, fields, or inline blocks — not types."
|
|
18
|
+
*
|
|
19
|
+
* Workspaces can define additional custom types via schema_extensions.
|
|
11
20
|
*/
|
|
12
21
|
import { z } from 'zod';
|
|
22
|
+
function dateField(role, label, description) {
|
|
23
|
+
return z
|
|
24
|
+
.string()
|
|
25
|
+
.date()
|
|
26
|
+
.optional()
|
|
27
|
+
.describe(description ?? label)
|
|
28
|
+
.meta({ dateRole: role, label });
|
|
29
|
+
}
|
|
13
30
|
/**
|
|
14
31
|
* Base entity schema - all entities have these fields
|
|
15
32
|
*/
|
|
@@ -22,356 +39,550 @@ export const EntityBaseSchema = z.object({
|
|
|
22
39
|
updated_at: z.string().datetime('Invalid datetime format'),
|
|
23
40
|
created_by: z.string().min(1, 'Created by is required'),
|
|
24
41
|
updated_by: z.string().min(1, 'Updated by is required'),
|
|
25
|
-
date:
|
|
42
|
+
date: dateField('primary', 'Date', "The entity's primary date (YYYY-MM-DD)"),
|
|
26
43
|
tags: z.array(z.string())
|
|
27
44
|
.optional()
|
|
28
45
|
.describe('Tags for categorization'),
|
|
29
46
|
}).passthrough(); // Allow custom fields beyond the base schema
|
|
30
47
|
// ══════════════════════════════════════════════════════════════════════════════
|
|
31
|
-
//
|
|
48
|
+
// CRM — people, organizations, positions, deals
|
|
32
49
|
// ══════════════════════════════════════════════════════════════════════════════
|
|
33
50
|
/**
|
|
34
|
-
* Person — team members, client contacts, any individual
|
|
51
|
+
* Person — team members, client contacts, any individual.
|
|
52
|
+
*
|
|
53
|
+
* `category` and `status` are split: category is the relationship type
|
|
54
|
+
* (employee/contractor/client/partner) and status is whether that
|
|
55
|
+
* relationship is current or historical. Mirrors organization.
|
|
35
56
|
*/
|
|
36
57
|
export const PersonSchema = EntityBaseSchema.extend({
|
|
37
58
|
entity_type: z.literal('person'),
|
|
38
59
|
name: z.string().min(1, 'Person name is required'),
|
|
39
|
-
role: z.string().optional().describe('
|
|
40
|
-
|
|
60
|
+
role: z.string().optional().describe('Free-text title (distinct from `position` entity)'),
|
|
61
|
+
category: z.enum(['employee', 'contractor', 'client', 'partner', 'other'])
|
|
41
62
|
.optional()
|
|
42
|
-
.describe('Relationship
|
|
63
|
+
.describe('Relationship category'),
|
|
64
|
+
status: z.enum(['current', 'former'])
|
|
65
|
+
.optional()
|
|
66
|
+
.describe('Whether the relationship is current or historical'),
|
|
43
67
|
email: z.string().optional().describe('Email address'),
|
|
44
68
|
location: z.string().optional().describe('Location'),
|
|
45
69
|
organization: z.string().optional().describe('Organization wikilink'),
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
70
|
+
// Bridge to the auth.db user account this person represents. Scalar handle
|
|
71
|
+
// string (not a wikilink): users are out-of-graph identities. Workspace-
|
|
72
|
+
// unique — write-path enforcement lives in user-person-bridge.ts. Optional
|
|
73
|
+
// because person entities can exist without a corresponding user
|
|
74
|
+
// (contractors, client contacts, anyone in the org chart who doesn't log
|
|
75
|
+
// in). Empty string is the "cleared" form — graph.create seeds optional
|
|
76
|
+
// string fields to "" on new entities, and unlink writes "" as well, so
|
|
77
|
+
// the regex must accept it explicitly.
|
|
78
|
+
user_handle: z.string()
|
|
79
|
+
// Empty (cleared) OR a kebab-case handle: leading alnum, alnum/hyphen
|
|
80
|
+
// body, alnum tail, no doubled hyphens. Mirrors what auth's
|
|
81
|
+
// slugifyHandle + allocateHandle can actually emit — accepting
|
|
82
|
+
// `foo-` or `foo--bar` here would let a hand-edit drift outside what
|
|
83
|
+
// findUserByHandle can match.
|
|
84
|
+
.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)')
|
|
85
|
+
.optional()
|
|
86
|
+
.describe('Auth handle of the user this person represents'),
|
|
50
87
|
});
|
|
51
88
|
/**
|
|
52
|
-
* Organization — clients, vendors, partners, prospects,
|
|
53
|
-
*
|
|
89
|
+
* Organization — clients, vendors, partners, prospects, professional
|
|
90
|
+
* associations.
|
|
54
91
|
*/
|
|
55
92
|
export const OrganizationSchema = EntityBaseSchema.extend({
|
|
56
93
|
entity_type: z.literal('organization'),
|
|
57
94
|
name: z.string().min(1, 'Organization name is required'),
|
|
58
|
-
category: z.enum(['client', 'vendor', 'partner', 'prospect', '
|
|
95
|
+
category: z.enum(['client', 'vendor', 'partner', 'prospect', 'professional-association', 'other'])
|
|
59
96
|
.optional()
|
|
60
97
|
.describe('Relationship category'),
|
|
61
|
-
status: z.enum(['active', '
|
|
98
|
+
status: z.enum(['active', 'dormant', 'former'])
|
|
62
99
|
.default('active')
|
|
63
|
-
.describe('Organization status'),
|
|
100
|
+
.describe('Organization status (`dormant` covers clients you have not worked with in a while but might again)'),
|
|
64
101
|
industry: z.string().optional().describe('Industry sector'),
|
|
65
102
|
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
103
|
});
|
|
74
104
|
/**
|
|
75
|
-
*
|
|
105
|
+
* Position — a position spec or open job. Renamed from `role` to avoid
|
|
106
|
+
* collision with `person.role` (the free-text title field). Reframes from
|
|
107
|
+
* "the person's seat" to "the spec for a position."
|
|
76
108
|
*/
|
|
77
|
-
export const
|
|
78
|
-
entity_type: z.literal('
|
|
79
|
-
name: z.string().min(1, '
|
|
109
|
+
export const PositionSchema = EntityBaseSchema.extend({
|
|
110
|
+
entity_type: z.literal('position'),
|
|
111
|
+
name: z.string().min(1, 'Position name is required'),
|
|
80
112
|
department: z.string().optional().describe('Department'),
|
|
81
|
-
level: z.number().optional().describe('Level 1–5 from leveling framework'),
|
|
82
113
|
category: z.enum(['staff', 'contractor', 'intern'])
|
|
83
114
|
.optional()
|
|
84
115
|
.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'),
|
|
116
|
+
status: z.enum(['draft', 'open', 'filled', 'closed'])
|
|
117
|
+
.default('open')
|
|
118
|
+
.describe('Position lifecycle'),
|
|
90
119
|
});
|
|
91
120
|
/**
|
|
92
|
-
*
|
|
121
|
+
* Deal — pre-project opportunity in the sales pipeline.
|
|
93
122
|
*/
|
|
94
|
-
export const
|
|
95
|
-
entity_type: z.literal('
|
|
96
|
-
name: z.string().min(1, '
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
123
|
+
export const DealSchema = EntityBaseSchema.extend({
|
|
124
|
+
entity_type: z.literal('deal'),
|
|
125
|
+
name: z.string().min(1, 'Deal name is required'),
|
|
126
|
+
client: z.string().optional().describe('Client organization wikilink'),
|
|
127
|
+
contact: z.string().optional().describe('Primary contact person wikilink'),
|
|
128
|
+
stage: z.enum(['qualification', 'scoping', 'proposal', 'negotiation', 'pending-signature', 'won', 'lost'])
|
|
129
|
+
.default('qualification')
|
|
130
|
+
.describe('Pipeline stage'),
|
|
131
|
+
deal_value: z.number().optional().describe('Estimated deal value'),
|
|
132
|
+
start_date: dateField('start', 'Start date', 'When work on the deal began (enables Timeline rendering of duration)'),
|
|
133
|
+
date: dateField('primary', 'Close date', 'Expected close date'),
|
|
101
134
|
});
|
|
102
135
|
// ══════════════════════════════════════════════════════════════════════════════
|
|
103
|
-
//
|
|
136
|
+
// PM — project, event, task, deliverable
|
|
104
137
|
// ══════════════════════════════════════════════════════════════════════════════
|
|
105
138
|
/**
|
|
106
|
-
* Project — a client engagement or internal initiative
|
|
139
|
+
* Project — a client engagement or internal initiative.
|
|
140
|
+
*
|
|
141
|
+
* `services` is a wikilink array to `service` entities the project includes
|
|
142
|
+
* (replaces the previous `practice_area` concept).
|
|
107
143
|
*/
|
|
108
144
|
export const ProjectSchema = EntityBaseSchema.extend({
|
|
109
145
|
entity_type: z.literal('project'),
|
|
110
146
|
name: z.string().min(1, 'Project name is required'),
|
|
111
|
-
category: z.
|
|
147
|
+
category: z.enum(['client', 'internal'])
|
|
148
|
+
.optional()
|
|
149
|
+
.describe('Project category'),
|
|
150
|
+
project_type: z.string().optional().describe('Kind of project (e.g., website, research, event, rebrand, prototype)'),
|
|
112
151
|
client: z.string().optional().describe('Client organization wikilink'),
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
status: z.enum(['planning', 'scoping', 'active', 'on-hold', 'completed', 'archived'])
|
|
152
|
+
services: z.array(z.string()).optional()
|
|
153
|
+
.describe('Service entities this project includes (wikilinks)'),
|
|
154
|
+
status: z.enum(['planning', 'in-progress', 'paused', 'complete', 'archived'])
|
|
117
155
|
.optional()
|
|
118
156
|
.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'),
|
|
157
|
+
start_date: dateField('start', 'Start date', 'Project start date'),
|
|
158
|
+
date: dateField('primary', 'End date', 'Project end date'),
|
|
124
159
|
});
|
|
125
160
|
/**
|
|
126
|
-
*
|
|
161
|
+
* Event — any scheduled gathering (meeting, call, workshop, review, etc.).
|
|
162
|
+
* `type` discriminates the kind of gathering for grouping/filtering. The
|
|
163
|
+
* default `meeting` preserves semantics for legacy meeting captures.
|
|
164
|
+
*
|
|
165
|
+
* Note: `deadline` is intentionally NOT a `type` value — deadlines are
|
|
166
|
+
* `task` entries with a `date` (the due date). Events are things you attend.
|
|
127
167
|
*/
|
|
128
|
-
export const
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
168
|
+
export const EVENT_TYPES = [
|
|
169
|
+
'meeting', 'call', 'review', 'workshop', 'presentation', 'conference', 'other',
|
|
170
|
+
];
|
|
171
|
+
export const EventSchema = EntityBaseSchema.extend({
|
|
172
|
+
entity_type: z.literal('event'),
|
|
173
|
+
name: z.string().min(1, 'Event name/subject is required'),
|
|
174
|
+
type: z.enum(EVENT_TYPES).default('meeting').describe('Kind of event'),
|
|
132
175
|
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
176
|
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)'),
|
|
177
|
+
start_date: dateField('start', 'Start date', 'When a multi-day event begins (omit for single-day events)'),
|
|
178
|
+
date: dateField('primary', 'Date', 'When the event takes place'),
|
|
156
179
|
});
|
|
157
180
|
/**
|
|
158
|
-
* Task — lightweight action items and to-dos
|
|
181
|
+
* Task — lightweight action items and to-dos.
|
|
182
|
+
*
|
|
183
|
+
* `phase` is intentionally free-text (not a separate entity type or workspace
|
|
184
|
+
* config list). Phases vary widely across project types; the Timeline view
|
|
185
|
+
* auto-discovers distinct values per-project for grouping.
|
|
159
186
|
*/
|
|
160
187
|
export const TaskSchema = EntityBaseSchema.extend({
|
|
161
188
|
entity_type: z.literal('task'),
|
|
162
189
|
name: z.string().min(1, 'Task name is required'),
|
|
163
|
-
status: z.enum(['
|
|
164
|
-
.default('
|
|
190
|
+
status: z.enum(['backlog', 'todo', 'in-progress', 'in-review', 'done', 'cancelled'])
|
|
191
|
+
.default('backlog')
|
|
165
192
|
.describe('Task status'),
|
|
166
193
|
priority: z.enum(['low', 'medium', 'high', 'urgent'])
|
|
167
194
|
.optional()
|
|
168
195
|
.describe('Priority level'),
|
|
169
|
-
assignee: z.string().optional().describe('
|
|
170
|
-
|
|
171
|
-
|
|
196
|
+
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')
|
|
197
|
+
// `refType` rides on the field via `.meta()` (same mechanism as the date
|
|
198
|
+
// vocabulary's `dateRole`/`label`). It marks `assignee` as a reference
|
|
199
|
+
// that must point at a `person` entity — surfaced through
|
|
200
|
+
// `describeZodObject` → `/api/schema` + `get_entity_schema` so pickers
|
|
201
|
+
// scope generically, and consumed by the write-path validator in
|
|
202
|
+
// entity-mutations.ts that actually rejects non-person targets. Zod
|
|
203
|
+
// itself can't resolve wikilinks, so this is a hint, not enforcement.
|
|
204
|
+
.meta({ refType: 'person' }),
|
|
205
|
+
phase: z.string().optional().describe('Project phase (free-text — Discover, Design, Prototype, Build, etc.)'),
|
|
206
|
+
start_date: dateField('start', 'Start date', 'Task start date (enables Timeline / Gantt rendering of duration)'),
|
|
207
|
+
date: dateField('primary', 'Due date', 'When the task is due'),
|
|
208
|
+
// Auto-stamped by graph.update when status transitions to/from `done` (see
|
|
209
|
+
// composeUpdatedFrontmatter). Lets surfaces show "completed today" without
|
|
210
|
+
// conflating it with the due date. ISO datetime; cleared when reopened.
|
|
211
|
+
completed_at: z.string().datetime('Invalid datetime format').optional()
|
|
212
|
+
.describe('When the task was marked done (ISO datetime, auto-managed)')
|
|
213
|
+
.meta({ label: 'Completed at' }),
|
|
172
214
|
});
|
|
173
215
|
/**
|
|
174
|
-
*
|
|
175
|
-
|
|
216
|
+
* Deliverable — a scoped output promised to a client.
|
|
217
|
+
*/
|
|
218
|
+
export const DeliverableSchema = EntityBaseSchema.extend({
|
|
219
|
+
entity_type: z.literal('deliverable'),
|
|
220
|
+
name: z.string().min(1, 'Deliverable name is required'),
|
|
221
|
+
project: z.string().optional().describe('Parent project wikilink'),
|
|
222
|
+
status: z.enum(['planned', 'in-progress', 'delivered', 'accepted', 'rejected'])
|
|
223
|
+
.default('planned')
|
|
224
|
+
.describe('Delivery status'),
|
|
225
|
+
phase: z.string().optional().describe('Project phase (free-text — same semantics as task.phase)'),
|
|
226
|
+
start_date: dateField('start', 'Start date', 'Deliverable start date (enables Timeline rendering of duration)'),
|
|
227
|
+
date: dateField('primary', 'Due date', 'When the deliverable is due'),
|
|
228
|
+
});
|
|
229
|
+
// ══════════════════════════════════════════════════════════════════════════════
|
|
230
|
+
// KM — authored (document, deck, publication, case-study, service, skill)
|
|
231
|
+
// ══════════════════════════════════════════════════════════════════════════════
|
|
232
|
+
/**
|
|
233
|
+
* Shared description for the `asset_ref` field — now `dataset`-ONLY.
|
|
234
|
+
*
|
|
235
|
+
* Body-embed model (2026-06-01): an import seeds the asset reference INTO THE
|
|
236
|
+
* BODY (an `` image embed for materials, a `[name](url)` source
|
|
237
|
+
* link for documents) — exactly as a user would. So material/document no longer
|
|
238
|
+
* carry `asset_ref`; the reference is in the markdown, not the frontmatter.
|
|
239
|
+
*
|
|
240
|
+
* `dataset` is the lone exception: a dataset body must stay valid CSV, so it
|
|
241
|
+
* can't hold a body link. `asset_ref` records the STORAGE UUID of the source
|
|
242
|
+
* xlsx (the `assets.db` `asset_id` / immutable-key id, never a URL, never an
|
|
243
|
+
* entity id) as INVISIBLE provenance — survives the entity moving repos and an
|
|
244
|
+
* asset-backend swap. It is one-to-one provenance, NOT an embed graph (the
|
|
245
|
+
* many-to-many image-embed mechanism is still markdown `` in a body).
|
|
246
|
+
*
|
|
247
|
+
* `.meta({ internal: true })` keeps it out of the field-metadata API, the
|
|
248
|
+
* property panel, and the agent's `get_entity_schema` (same treatment as
|
|
249
|
+
* `source_file`) — it is set by the import path, never hand-edited.
|
|
250
|
+
*/
|
|
251
|
+
const ASSET_REF_DESC = 'Storage UUID of the source xlsx this dataset was imported from';
|
|
252
|
+
/**
|
|
253
|
+
* Document — any authored document. The `guideline` category absorbs the
|
|
254
|
+
* former standalone `guideline` entity type.
|
|
176
255
|
*/
|
|
177
256
|
export const DocumentSchema = EntityBaseSchema.extend({
|
|
178
257
|
entity_type: z.literal('document'),
|
|
179
258
|
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'])
|
|
259
|
+
category: z.enum(['proposal', 'contract', 'brief', 'memo', 'report', 'template', 'guideline', 'other'])
|
|
260
|
+
.optional()
|
|
261
|
+
.describe('Document category'),
|
|
262
|
+
status: z.enum(['draft', 'review', 'final', 'archived'])
|
|
185
263
|
.default('draft')
|
|
186
264
|
.describe('Document status'),
|
|
187
|
-
|
|
265
|
+
// No asset_ref: under the body-embed model an imported document seeds the
|
|
266
|
+
// extracted text + a `[name](url)` source link directly into its body, so the
|
|
267
|
+
// source-file reference lives in the markdown, not the frontmatter.
|
|
188
268
|
});
|
|
189
269
|
/**
|
|
190
|
-
*
|
|
270
|
+
* Deck — a slide deck or presentation. Stays its own type alongside
|
|
271
|
+
* `document` because of the dedicated slides renderer + agent skills that
|
|
272
|
+
* pattern-match on `entity_type === 'deck'`.
|
|
191
273
|
*/
|
|
192
|
-
export const
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
274
|
+
export const DeckSchema = EntityBaseSchema.extend({
|
|
275
|
+
entity_type: z.literal('deck'),
|
|
276
|
+
name: z.string().min(1, 'Deck name is required'),
|
|
277
|
+
audience: z.enum(['client', 'team', 'board', 'external', 'other'])
|
|
278
|
+
.optional()
|
|
279
|
+
.describe('Intended audience'),
|
|
280
|
+
status: z.enum(['draft', 'review', 'final', 'archived'])
|
|
281
|
+
.default('draft')
|
|
282
|
+
.describe('Deck status'),
|
|
197
283
|
});
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
284
|
+
/**
|
|
285
|
+
* Publication — authored content published externally.
|
|
286
|
+
*/
|
|
287
|
+
export const PublicationSchema = EntityBaseSchema.extend({
|
|
288
|
+
entity_type: z.literal('publication'),
|
|
289
|
+
name: z.string().min(1, 'Publication name is required'),
|
|
290
|
+
platform: z.string().optional().describe('Where published (e.g., linkedin, medium, behance, conference)'),
|
|
291
|
+
status: z.enum(['draft', 'review', 'scheduled', 'published'])
|
|
292
|
+
.default('draft')
|
|
293
|
+
.describe('Publication status'),
|
|
294
|
+
url: z.string().optional().describe('URL of published content'),
|
|
202
295
|
});
|
|
203
296
|
/**
|
|
204
|
-
*
|
|
205
|
-
* Absorbs the former separate technique type.
|
|
297
|
+
* Case Study — portfolio narratives for completed projects.
|
|
206
298
|
*/
|
|
207
|
-
export const
|
|
208
|
-
entity_type: z.literal('
|
|
209
|
-
name: z.string().min(1, '
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
299
|
+
export const CaseStudySchema = EntityBaseSchema.extend({
|
|
300
|
+
entity_type: z.literal('case-study'),
|
|
301
|
+
name: z.string().min(1, 'Case study name is required'),
|
|
302
|
+
client: z.string().optional().describe('Client organization wikilink'),
|
|
303
|
+
services: z.array(z.string()).optional()
|
|
304
|
+
.describe('Service entities this case study highlights (wikilinks)'),
|
|
305
|
+
date_range: z.string().optional().describe('Project timeframe (e.g., 2025-09 / 2026-01)'),
|
|
306
|
+
status: z.enum(['draft', 'review', 'final', 'published'])
|
|
307
|
+
.default('draft')
|
|
308
|
+
.describe('Case study status'),
|
|
309
|
+
});
|
|
310
|
+
/**
|
|
311
|
+
* Service — the firm's offerings + methodologies. Replaces the old
|
|
312
|
+
* `process` type and absorbs `practice-area` (top-level services replace
|
|
313
|
+
* what practice-area was trying to be).
|
|
314
|
+
*
|
|
315
|
+
* `sprint` links a granular service to its parent service (top-level
|
|
316
|
+
* services have none). `depends_on` / `enables` form a directed graph
|
|
317
|
+
* across the service set — the Graph view's most valuable use case.
|
|
318
|
+
*/
|
|
319
|
+
export const ServiceSchema = EntityBaseSchema.extend({
|
|
320
|
+
entity_type: z.literal('service'),
|
|
321
|
+
name: z.string().min(1, 'Service name is required'),
|
|
322
|
+
service_id: z.string().optional()
|
|
323
|
+
.describe('Optional human-readable id (e.g. "1.4") for studios that number their services'),
|
|
324
|
+
sprint: z.string().optional()
|
|
325
|
+
.describe('Parent service wikilink for hierarchy (top-level services / sprints have none)'),
|
|
326
|
+
depends_on: z.array(z.string()).optional()
|
|
327
|
+
.describe('Services that must precede this one (wikilinks)'),
|
|
328
|
+
enables: z.array(z.string()).optional()
|
|
329
|
+
.describe('Services that this one unlocks (wikilinks)'),
|
|
330
|
+
deliverables: z.array(z.string()).optional()
|
|
331
|
+
.describe('Named outputs this service produces'),
|
|
332
|
+
status: z.enum(['offered', 'in-development', 'retired'])
|
|
333
|
+
.default('offered')
|
|
334
|
+
.describe('Service lifecycle'),
|
|
335
|
+
});
|
|
336
|
+
/**
|
|
337
|
+
* Skill — prompt-level instructions the agent can load to teach it how to
|
|
338
|
+
* do a specific job. The entity id is the skill name used by `load_skill`.
|
|
339
|
+
* The body markdown is the instruction content.
|
|
340
|
+
*
|
|
341
|
+
* `applies_to` lets the agent load deck-skills when working on a deck,
|
|
342
|
+
* proposal-skills when on a `document.category=proposal`, etc. Empty /
|
|
343
|
+
* unset = generally applicable.
|
|
344
|
+
*
|
|
345
|
+
* The previous `loading: eager | on-demand` field is gone for graph-authored
|
|
346
|
+
* skills. Filesystem skills (shipped with the product in `src/agent/skills/`)
|
|
347
|
+
* keep their own loading mechanism via skill-loader.ts and orchestrator.ts.
|
|
348
|
+
*
|
|
349
|
+
* `name` and `description` are optional at creation so the sidebar new-entry
|
|
350
|
+
* flow works — the user fills them in afterward via the property panel.
|
|
351
|
+
*/
|
|
352
|
+
export const SkillSchema = EntityBaseSchema.extend({
|
|
353
|
+
entity_type: z.literal('skill'),
|
|
354
|
+
name: z.string().optional().describe('Human-readable title (falls back to entity id)'),
|
|
355
|
+
description: z.string().optional().describe('Shown in the skill index so the agent knows when to load it'),
|
|
356
|
+
applies_to: z.array(z.string()).optional()
|
|
357
|
+
.describe('Entity types this skill applies to (e.g. ["deck"]). Empty = generally applicable.'),
|
|
216
358
|
});
|
|
359
|
+
// ══════════════════════════════════════════════════════════════════════════════
|
|
360
|
+
// CAPTURE — note, reference
|
|
361
|
+
// ══════════════════════════════════════════════════════════════════════════════
|
|
217
362
|
/**
|
|
218
|
-
* Note — freeform thinking, research,
|
|
219
|
-
*
|
|
363
|
+
* Note — freeform thinking, research, daily notes.
|
|
364
|
+
*
|
|
365
|
+
* Decisions migrated from the cut `decision` type land here as plain
|
|
366
|
+
* notes; operators may manually convert specific entries to `task` if they
|
|
367
|
+
* read better as work items.
|
|
220
368
|
*/
|
|
221
369
|
export const NoteSchema = EntityBaseSchema.extend({
|
|
222
370
|
entity_type: z.literal('note'),
|
|
223
371
|
name: z.string().min(1, 'Note name is required'),
|
|
224
|
-
|
|
372
|
+
// Entry-primary provenance (A2): when this note was derived from an
|
|
373
|
+
// uploaded asset (e.g. a converted .docx/.pdf), `source_file` holds the
|
|
374
|
+
// SOURCE ASSET'S ENTITY ID — never a URL — so the link survives an asset
|
|
375
|
+
// backend swap and joins the graph (the relationship is also surfaced as a
|
|
376
|
+
// wikilink in the body). Absent for notes created directly.
|
|
377
|
+
//
|
|
378
|
+
// `.meta({ internal: true })` marks it system-managed: the field-metadata
|
|
379
|
+
// API (describeZodObject) omits it, so it never appears in the property
|
|
380
|
+
// panel or the agent's get_entity_schema, and the create/changeType field
|
|
381
|
+
// seeders skip it (so a directly-created note has NO source_file rather
|
|
382
|
+
// than `''`). Set only by the import/convert path.
|
|
383
|
+
source_file: z.string().optional().describe('Entity id of the source asset this note was derived from').meta({ internal: true }),
|
|
225
384
|
});
|
|
226
385
|
/**
|
|
227
|
-
*
|
|
228
|
-
* Bridges the commercial side (proposal, contract) to execution (artifacts, tasks).
|
|
386
|
+
* Reference — external resources and inspiration.
|
|
229
387
|
*/
|
|
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'),
|
|
388
|
+
export const ReferenceSchema = EntityBaseSchema.extend({
|
|
389
|
+
entity_type: z.literal('reference'),
|
|
390
|
+
name: z.string().min(1, 'Reference name is required'),
|
|
391
|
+
source: z.string().optional().describe('Source or author'),
|
|
392
|
+
link: z.string().optional().describe('URL'),
|
|
240
393
|
});
|
|
241
394
|
/**
|
|
242
|
-
*
|
|
395
|
+
* Dataset — a CSV the workspace owns, edited in a grid.
|
|
396
|
+
*
|
|
397
|
+
* Conventional CSV: the markdown body IS the data, and the header row IS the
|
|
398
|
+
* column list — there's no separate typed column schema. The grid editor
|
|
399
|
+
* (web CsvEditor) and the agent's `query_dataset` / `append_rows` tools read
|
|
400
|
+
* the body through CSVService (src/services/csv-service.ts), deriving columns
|
|
401
|
+
* from the header. Distinct from an uploaded `asset` with
|
|
402
|
+
* `asset_kind: 'spreadsheet'`, which is an opaque binary — a dataset is
|
|
403
|
+
* in-graph, queryable, and row-appendable.
|
|
243
404
|
*/
|
|
244
|
-
export const
|
|
245
|
-
entity_type: z.literal('
|
|
246
|
-
name: z.string().min(1, '
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
405
|
+
export const DatasetSchema = EntityBaseSchema.extend({
|
|
406
|
+
entity_type: z.literal('dataset'),
|
|
407
|
+
name: z.string().min(1, 'Dataset name is required'),
|
|
408
|
+
// Entry-primary provenance (A2): set when this dataset was derived from an
|
|
409
|
+
// uploaded asset (e.g. one sheet of a converted .xlsx). Holds the SOURCE
|
|
410
|
+
// ASSET'S ENTITY ID, never a URL. See NoteSchema.source_file (incl. the
|
|
411
|
+
// `.meta({ internal: true })` rationale — same system-managed treatment).
|
|
412
|
+
source_file: z.string().optional().describe('Entity id of the source asset this dataset was derived from').meta({ internal: true }),
|
|
413
|
+
// When derived from one sheet of a converted .xlsx, the original worksheet
|
|
414
|
+
// name — the stable key that lets a re-convert (replace) match this dataset
|
|
415
|
+
// back to its sheet and update it IN PLACE, preserving the id + inbound
|
|
416
|
+
// links even if the first conversion's id was collision-suffixed. Internal
|
|
417
|
+
// (system-managed); never user-edited.
|
|
418
|
+
source_sheet: z.string().optional().describe('Original worksheet name this dataset was derived from').meta({ internal: true }),
|
|
419
|
+
// Asset-as-embed provenance: the storage UUID of the source asset (e.g. the
|
|
420
|
+
// .xlsx this sheet was imported from). Frontmatter only — the dataset body
|
|
421
|
+
// stays pure CSV, so the asset link is NEVER a body embed. See ASSET_REF_DESC.
|
|
422
|
+
asset_ref: z.string().optional().describe(ASSET_REF_DESC).meta({ internal: true }),
|
|
256
423
|
});
|
|
257
424
|
/**
|
|
258
|
-
*
|
|
425
|
+
* Material — a first-class graph entry that wraps a free-standing binary
|
|
426
|
+
* asset (image or opaque file: photo, logo, psd/ai/sketch/fig, video, audio,
|
|
427
|
+
* archive) when no better type fits. The asset-as-embed catch-all: import
|
|
428
|
+
* routes docx/pdf → `document`, xlsx → `dataset`, and everything else (image +
|
|
429
|
+
* opaque) → `material`.
|
|
430
|
+
*
|
|
431
|
+
* Distinct from `asset` (the stored bytes + `assets.db` row) and from
|
|
432
|
+
* `reference` (a pointer to an EXTERNAL source the workspace doesn't own).
|
|
433
|
+
* Under the body-embed model a material's body IS the asset: import seeds an
|
|
434
|
+
* inline `` image embed (images) or a `[name](url)` download link
|
|
435
|
+
* (opaque binaries). No `asset_ref` frontmatter — the reference lives in the
|
|
436
|
+
* markdown. A hand-created material (New Entry / agent) is a notes/catalog
|
|
437
|
+
* entry whose body the user writes themselves.
|
|
259
438
|
*/
|
|
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'])
|
|
439
|
+
export const MaterialSchema = EntityBaseSchema.extend({
|
|
440
|
+
entity_type: z.literal('material'),
|
|
441
|
+
name: z.string().min(1, 'Material name is required'),
|
|
442
|
+
// Purpose-oriented grouping axis (NOT a re-encoding of the asset's kind,
|
|
443
|
+
// which lives in assets.db). Optional. Values are intentionally minimal —
|
|
444
|
+
// enums are cheap to extend, expensive to remove.
|
|
445
|
+
category: z.enum(['design', 'brand', 'media', 'archive', 'other'])
|
|
272
446
|
.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'),
|
|
447
|
+
.describe('Purpose grouping (design source, brand asset, media, archive, other)'),
|
|
277
448
|
});
|
|
278
449
|
// ══════════════════════════════════════════════════════════════════════════════
|
|
279
|
-
//
|
|
450
|
+
// ASSET KINDS (store-facing — NOT an entity type)
|
|
280
451
|
// ══════════════════════════════════════════════════════════════════════════════
|
|
281
452
|
/**
|
|
282
|
-
*
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
owner: z.string().optional().describe('Person or team responsible (wikilink)'),
|
|
291
|
-
review_cycle: z.enum(['monthly', 'quarterly', 'annual', 'as-needed']).optional().describe('Review frequency'),
|
|
292
|
-
});
|
|
293
|
-
/**
|
|
294
|
-
* Standard — guidelines and best practices
|
|
453
|
+
* High-level kinds for stored binaries — assets.db media metadata + per-kind
|
|
454
|
+
* UI (icon/viewer/thumbnail). Drives `detectAssetKind` in
|
|
455
|
+
* src/services/assets/base.ts and the asset STORE, NOT any entity schema.
|
|
456
|
+
*
|
|
457
|
+
* The `asset` ENTITY type was retired (asset-as-embed §6 / Phase F): an
|
|
458
|
+
* imported binary now becomes a typed entry (material/document/dataset) that
|
|
459
|
+
* embeds a free-standing, folder-owned asset. The store (assets.db +
|
|
460
|
+
* immutable-key blobs + serving routes) stays.
|
|
295
461
|
*/
|
|
296
|
-
export const
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
examples: z.array(z.string()).optional().describe('Example wikilinks'),
|
|
303
|
-
});
|
|
462
|
+
export const ASSET_KINDS = [
|
|
463
|
+
'image', 'video', 'audio', 'pdf', 'spreadsheet', 'other',
|
|
464
|
+
];
|
|
465
|
+
// ══════════════════════════════════════════════════════════════════════════════
|
|
466
|
+
// SYSTEM — comment (virtual entity, SQLite-backed)
|
|
467
|
+
// ══════════════════════════════════════════════════════════════════════════════
|
|
304
468
|
/**
|
|
305
|
-
*
|
|
469
|
+
* Comment — a threaded comment anchored to another entry. Unlike every other
|
|
470
|
+
* entity type, comments are NOT stored as markdown files; they live in
|
|
471
|
+
* `comments.db` (see `src/services/comment-service.ts`) for throughput.
|
|
472
|
+
* Agents see them as first-class typed entities through the virtual-entity
|
|
473
|
+
* adapter (`src/mcp/comment-virtual-entity.ts`), which is why the schema
|
|
474
|
+
* lives here alongside the file-backed types.
|
|
475
|
+
*
|
|
476
|
+
* The shape documents what fields the MCP envelope exposes; runtime
|
|
477
|
+
* validation happens inside CommentService itself.
|
|
306
478
|
*/
|
|
307
|
-
export const
|
|
308
|
-
entity_type: z.literal('
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
479
|
+
export const CommentSchema = EntityBaseSchema.extend({
|
|
480
|
+
entity_type: z.literal('comment'),
|
|
481
|
+
repo: z.string().describe('Folder the anchored entry lives in'),
|
|
482
|
+
entry_type: z.string().describe('Entity type of the anchored entry'),
|
|
483
|
+
entry_id: z.string().describe('Entity id of the anchored entry'),
|
|
484
|
+
thread_id: z.string().describe('Head comment id; replies share the same thread_id'),
|
|
485
|
+
parent_id: z.string().nullable().optional().describe('Parent comment id for replies, null on the head'),
|
|
486
|
+
author_user_id: z.number().int().describe('users.id of the author'),
|
|
487
|
+
author_role: z.enum(['user', 'agent']).describe('Whether the author was a human or the agent'),
|
|
488
|
+
anchor_quote: z.string().nullable().optional()
|
|
489
|
+
.describe('Original highlighted text at creation time, ≤256 chars (used for orphan rendering)'),
|
|
490
|
+
resolved_at: z.string().nullable().optional(),
|
|
491
|
+
resolved_by_user_id: z.number().int().nullable().optional(),
|
|
492
|
+
edited: z.boolean().optional(),
|
|
493
|
+
mentions: z.array(z.string()).optional().describe('Handles of mentioned users'),
|
|
316
494
|
});
|
|
317
495
|
// ══════════════════════════════════════════════════════════════════════════════
|
|
318
|
-
// ══════════════════════════════════════════════════════════════════════════════
|
|
319
496
|
// SCHEMA REGISTRY
|
|
320
497
|
// ══════════════════════════════════════════════════════════════════════════════
|
|
321
498
|
/**
|
|
322
|
-
* Maps entity types to their Zod schemas.
|
|
323
|
-
*
|
|
499
|
+
* Maps entity types to their Zod schemas. 17 canonical built-in types
|
|
500
|
+
* (16 user-facing + 1 system). Workspaces can register additional custom
|
|
501
|
+
* types via SchemaRegistry (schema_extensions).
|
|
324
502
|
*/
|
|
325
503
|
export const ENTITY_SCHEMAS = {
|
|
326
|
-
//
|
|
504
|
+
// CRM (4)
|
|
327
505
|
person: PersonSchema,
|
|
328
506
|
organization: OrganizationSchema,
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
//
|
|
507
|
+
position: PositionSchema,
|
|
508
|
+
deal: DealSchema,
|
|
509
|
+
// PM (4)
|
|
332
510
|
project: ProjectSchema,
|
|
333
|
-
|
|
334
|
-
decision: DecisionSchema,
|
|
511
|
+
event: EventSchema,
|
|
335
512
|
task: TaskSchema,
|
|
336
|
-
document: DocumentSchema,
|
|
337
|
-
dataset: DatasetSchema,
|
|
338
|
-
reference: ReferenceSchema,
|
|
339
|
-
note: NoteSchema,
|
|
340
513
|
deliverable: DeliverableSchema,
|
|
514
|
+
// KM — authored (6)
|
|
515
|
+
document: DocumentSchema,
|
|
516
|
+
deck: DeckSchema,
|
|
341
517
|
publication: PublicationSchema,
|
|
342
|
-
deal: DealSchema,
|
|
343
|
-
// Knowledge (3)
|
|
344
|
-
process: ProcessSchema,
|
|
345
|
-
standard: StandardSchema,
|
|
346
518
|
'case-study': CaseStudySchema,
|
|
519
|
+
service: ServiceSchema,
|
|
520
|
+
skill: SkillSchema,
|
|
521
|
+
// Capture (4)
|
|
522
|
+
note: NoteSchema,
|
|
523
|
+
reference: ReferenceSchema,
|
|
524
|
+
dataset: DatasetSchema,
|
|
525
|
+
material: MaterialSchema,
|
|
526
|
+
// System (1)
|
|
527
|
+
comment: CommentSchema,
|
|
347
528
|
};
|
|
529
|
+
/**
|
|
530
|
+
* Retired entity-type names that must never be (re-)created, even if a legacy
|
|
531
|
+
* workspace still carries a `schema_extensions.<name>` for them. `asset` was
|
|
532
|
+
* retired in Phase F (asset-as-embed): binaries are now free-standing in
|
|
533
|
+
* assets.db and embedded by typed entries (material/document/dataset), so a
|
|
534
|
+
* file-backed `asset` entity would be an unvalidatable base-only stub. Enforced
|
|
535
|
+
* at the entity-creation entry points (graph.changeType, the web create route,
|
|
536
|
+
* and getAgentAllowedEntityTypes).
|
|
537
|
+
*/
|
|
538
|
+
export const RESERVED_ENTITY_TYPES = new Set(['asset']);
|
|
348
539
|
/**
|
|
349
540
|
* Plural subfolder name → singular entity_type mapping
|
|
350
541
|
*/
|
|
351
542
|
export const PLURAL_TO_SINGULAR = {
|
|
352
543
|
'people': 'person',
|
|
353
544
|
'organizations': 'organization',
|
|
354
|
-
'
|
|
355
|
-
'
|
|
545
|
+
'positions': 'position',
|
|
546
|
+
'deals': 'deal',
|
|
356
547
|
'projects': 'project',
|
|
357
|
-
'
|
|
358
|
-
'decisions': 'decision',
|
|
548
|
+
'events': 'event',
|
|
359
549
|
'tasks': 'task',
|
|
360
|
-
'documents': 'document',
|
|
361
|
-
'datasets': 'dataset',
|
|
362
|
-
'references': 'reference',
|
|
363
|
-
'notes': 'note',
|
|
364
550
|
'deliverables': 'deliverable',
|
|
551
|
+
'documents': 'document',
|
|
552
|
+
'decks': 'deck',
|
|
365
553
|
'publications': 'publication',
|
|
366
|
-
'deals': 'deal',
|
|
367
|
-
'processes': 'process',
|
|
368
|
-
'standards': 'standard',
|
|
369
554
|
'case-studies': 'case-study',
|
|
555
|
+
'services': 'service',
|
|
556
|
+
'skills': 'skill',
|
|
557
|
+
'notes': 'note',
|
|
558
|
+
'references': 'reference',
|
|
559
|
+
'datasets': 'dataset',
|
|
560
|
+
'materials': 'material',
|
|
561
|
+
'comments': 'comment',
|
|
370
562
|
};
|
|
371
563
|
/**
|
|
372
564
|
* Singular entity_type → plural subfolder name mapping
|
|
373
565
|
*/
|
|
374
566
|
export const SINGULAR_TO_PLURAL = Object.fromEntries(Object.entries(PLURAL_TO_SINGULAR).map(([plural, singular]) => [singular, plural]));
|
|
567
|
+
/**
|
|
568
|
+
* Cross-field task rule: a task's start date must not fall after its due date.
|
|
569
|
+
*
|
|
570
|
+
* This lives OUTSIDE the Zod schema on purpose. Expressing it as a
|
|
571
|
+
* `TaskSchema.refine(...)` would turn the ZodObject into a ZodEffects, which
|
|
572
|
+
* breaks shape introspection in schema-registry (`describeZodObject` and the
|
|
573
|
+
* schema_extensions `.extend()` path both rely on `instanceof z.ZodObject`) —
|
|
574
|
+
* and that powers the metadata field panel. So both validation entry points
|
|
575
|
+
* (this module's `validateEntity` and `graph.ts`'s private one) call this
|
|
576
|
+
* helper after a successful parse instead.
|
|
577
|
+
*
|
|
578
|
+
* `dateField` stores ISO 'YYYY-MM-DD' strings, so a lexicographic comparison
|
|
579
|
+
* is a correct date comparison.
|
|
580
|
+
*/
|
|
581
|
+
export function assertValidTaskDates(data) {
|
|
582
|
+
if (data.start_date && data.date && data.start_date > data.date) {
|
|
583
|
+
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})`);
|
|
584
|
+
}
|
|
585
|
+
}
|
|
375
586
|
/**
|
|
376
587
|
* Validation helper with helpful error messages
|
|
377
588
|
*/
|
|
@@ -381,11 +592,14 @@ export function validateEntity(entityType, data) {
|
|
|
381
592
|
throw new Error(`Unknown entity type: ${entityType}`);
|
|
382
593
|
}
|
|
383
594
|
try {
|
|
384
|
-
|
|
595
|
+
const parsed = schema.parse(data);
|
|
596
|
+
if (entityType === 'task')
|
|
597
|
+
assertValidTaskDates(parsed);
|
|
598
|
+
return parsed;
|
|
385
599
|
}
|
|
386
600
|
catch (error) {
|
|
387
601
|
if (error instanceof z.ZodError) {
|
|
388
|
-
const messages = error.
|
|
602
|
+
const messages = error.issues.map(e => {
|
|
389
603
|
const path = e.path.join('.');
|
|
390
604
|
return ` - ${path}: ${e.message}`;
|
|
391
605
|
});
|
|
@@ -403,7 +617,7 @@ export function validateCustomEntity(data) {
|
|
|
403
617
|
}
|
|
404
618
|
catch (error) {
|
|
405
619
|
if (error instanceof z.ZodError) {
|
|
406
|
-
const messages = error.
|
|
620
|
+
const messages = error.issues.map(e => {
|
|
407
621
|
const path = e.path.join('.');
|
|
408
622
|
return ` - ${path}: ${e.message}`;
|
|
409
623
|
});
|