studiograph 1.3.48-next.21 → 1.3.48-next.211
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 +87 -3
- package/dist/agent/agent-pool.js +188 -15
- package/dist/agent/agent-pool.js.map +1 -1
- 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 +101 -4
- package/dist/agent/orchestrator.js +464 -66
- 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 +112 -54
- 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/artifact-canvas/skill.md +152 -0
- package/dist/agent/skills/entity-schema.md +75 -431
- package/dist/agent/skills/interview/entity-templates.md +38 -37
- package/dist/agent/skills/interview/question-domains.md +54 -49
- package/dist/agent/skills/interview/skill.md +84 -16
- package/dist/agent/skills/schema-rules.md +28 -28
- package/dist/agent/tools/artifact-tools.d.ts +124 -0
- package/dist/agent/tools/artifact-tools.js +207 -0
- package/dist/agent/tools/artifact-tools.js.map +1 -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 +6 -5
- package/dist/agent/tools/fs-tools.js +5 -5
- package/dist/agent/tools/fs-tools.js.map +1 -1
- package/dist/agent/tools/graph-tools.d.ts +48 -72
- package/dist/agent/tools/graph-tools.js +852 -329
- 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 -43
- 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/{collection.js → admin/folder.js} +33 -32
- 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/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 +5 -1
- 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 +54 -6
- package/dist/cli/commands/mcp.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 +132 -34
- package/dist/cli/commands/reset.js.map +1 -1
- package/dist/cli/commands/serve.js +231 -26
- package/dist/cli/commands/serve.js.map +1 -1
- package/dist/cli/commands/sync.d.ts +1 -1
- package/dist/cli/commands/sync.js +237 -227
- 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 -26
- 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 +30 -49
- package/dist/cli/setup-wizard.js +39 -40
- 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/artifact-asset-urls.d.ts +51 -0
- package/dist/core/artifact-asset-urls.js +79 -0
- package/dist/core/artifact-asset-urls.js.map +1 -0
- package/dist/core/artifact-bundle.d.ts +69 -0
- package/dist/core/artifact-bundle.js +305 -0
- package/dist/core/artifact-bundle.js.map +1 -0
- package/dist/core/artifact-escape.d.ts +5 -0
- package/dist/core/artifact-escape.js +26 -0
- package/dist/core/artifact-escape.js.map +1 -0
- package/dist/core/artifact-export.d.ts +17 -0
- package/dist/core/artifact-export.js +529 -0
- package/dist/core/artifact-export.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 +96 -0
- package/dist/core/embeds.js +196 -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 +67 -0
- package/dist/core/entity-body-templates.js.map +1 -0
- package/dist/core/entity-types-catalog.d.ts +65 -0
- package/dist/core/entity-types-catalog.js +142 -0
- package/dist/core/entity-types-catalog.js.map +1 -0
- package/dist/core/field-library.d.ts +62 -0
- package/dist/core/field-library.js +129 -0
- package/dist/core/field-library.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 +412 -0
- package/dist/core/format-registry.js.map +1 -0
- package/dist/core/graph.d.ts +773 -14
- package/dist/core/graph.js +2269 -308
- 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 +66 -0
- package/dist/core/schema-registry.js +198 -37
- 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 +77 -483
- package/dist/core/types.js +25 -3
- package/dist/core/types.js.map +1 -1
- package/dist/core/user-config.d.ts +75 -12
- package/dist/core/user-config.js +155 -14
- package/dist/core/user-config.js.map +1 -1
- package/dist/core/validation.d.ts +786 -1373
- package/dist/core/validation.js +458 -147
- package/dist/core/validation.js.map +1 -1
- package/dist/core/workspace-manager.d.ts +87 -14
- package/dist/core/workspace-manager.js +222 -94
- package/dist/core/workspace-manager.js.map +1 -1
- package/dist/core/workspace.d.ts +19 -5
- package/dist/core/workspace.js +67 -39
- 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 +72 -2
- package/dist/mcp/connector-manager.js +211 -32
- package/dist/mcp/connector-manager.js.map +1 -1
- package/dist/mcp/oauth-provider.d.ts +0 -5
- package/dist/mcp/oauth-provider.js +10 -22
- package/dist/mcp/oauth-provider.js.map +1 -1
- package/dist/mcp/oauth-registry.d.ts +46 -8
- package/dist/mcp/oauth-registry.js +52 -13
- package/dist/mcp/oauth-registry.js.map +1 -1
- package/dist/mcp/server-discovery.d.ts +73 -0
- package/dist/mcp/server-discovery.js +164 -0
- package/dist/mcp/server-discovery.js.map +1 -0
- package/dist/mcp/server.d.ts +24 -3
- package/dist/mcp/server.js +53 -10
- 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/stdio-proxy.d.ts +67 -0
- package/dist/mcp/stdio-proxy.js +149 -0
- package/dist/mcp/stdio-proxy.js.map +1 -0
- package/dist/mcp/tools.d.ts +65 -2
- package/dist/mcp/tools.js +1772 -124
- 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/artifact-asset-mint.d.ts +41 -0
- package/dist/server/artifact-asset-mint.js +59 -0
- package/dist/server/artifact-asset-mint.js.map +1 -0
- package/dist/server/asset-index-queue.d.ts +98 -0
- package/dist/server/asset-index-queue.js +193 -0
- package/dist/server/asset-index-queue.js.map +1 -0
- package/dist/server/body-write-coordinator.d.ts +161 -0
- package/dist/server/body-write-coordinator.js +182 -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 +29 -3
- package/dist/server/index.js +657 -269
- package/dist/server/index.js.map +1 -1
- package/dist/server/middleware/sanitize.d.ts +46 -0
- package/dist/server/middleware/sanitize.js +182 -0
- package/dist/server/middleware/sanitize.js.map +1 -0
- package/dist/server/routes/artifact-export-api.d.ts +11 -0
- package/dist/server/routes/artifact-export-api.js +159 -0
- package/dist/server/routes/artifact-export-api.js.map +1 -0
- package/dist/server/routes/asset-api.d.ts +76 -1
- package/dist/server/routes/asset-api.js +761 -61
- package/dist/server/routes/asset-api.js.map +1 -1
- 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.js +532 -63
- package/dist/server/routes/auth-api.js.map +1 -1
- package/dist/server/routes/capture-api.d.ts +10 -3
- package/dist/server/routes/capture-api.js +213 -25
- package/dist/server/routes/capture-api.js.map +1 -1
- package/dist/server/routes/chat-sessions-api.d.ts +13 -0
- package/dist/server/routes/chat-sessions-api.js +455 -0
- package/dist/server/routes/chat-sessions-api.js.map +1 -0
- package/dist/server/routes/chat.d.ts +35 -1
- package/dist/server/routes/chat.js +699 -54
- 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 +3 -2
- package/dist/server/routes/config-api.js +179 -49
- package/dist/server/routes/config-api.js.map +1 -1
- package/dist/server/routes/connectors-api.js +177 -42
- package/dist/server/routes/connectors-api.js.map +1 -1
- package/dist/server/routes/event-ingest-api.d.ts +15 -0
- package/dist/server/routes/{meeting-ingest-api.js → event-ingest-api.js} +35 -20
- package/dist/server/routes/event-ingest-api.js.map +1 -0
- package/dist/server/routes/field-library-api.d.ts +28 -0
- package/dist/server/routes/field-library-api.js +126 -0
- package/dist/server/routes/field-library-api.js.map +1 -0
- package/dist/server/routes/git-http.d.ts +2 -2
- package/dist/server/routes/git-http.js +86 -39
- 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 +1455 -325
- 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 +355 -61
- 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 +24 -8
- 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 -31
- 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/views-api.js +51 -0
- 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 +142 -23
- package/dist/server/routes/workspace-api.js.map +1 -1
- package/dist/server/routes/ws.d.ts +3 -2
- package/dist/server/routes/ws.js +68 -17
- 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 -14
- package/dist/server/session-manager.js.map +1 -1
- package/dist/server/ws-hub.d.ts +124 -37
- package/dist/server/ws-hub.js +0 -0
- package/dist/server/ws-hub.js.map +1 -1
- package/dist/server/yjs-manager.d.ts +278 -7
- package/dist/server/yjs-manager.js +830 -38
- 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/artifact-asset-token.d.ts +69 -0
- package/dist/services/artifact-asset-token.js +94 -0
- package/dist/services/artifact-asset-token.js.map +1 -0
- package/dist/services/artifact-library-sources.d.ts +3 -0
- package/dist/services/artifact-library-sources.js +44 -0
- package/dist/services/artifact-library-sources.js.map +1 -0
- package/dist/services/artifact-render-export.d.ts +97 -0
- package/dist/services/artifact-render-export.js +467 -0
- package/dist/services/artifact-render-export.js.map +1 -0
- package/dist/services/asset-caption-service.d.ts +103 -0
- package/dist/services/asset-caption-service.js +186 -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 +216 -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 +95 -0
- package/dist/services/asset-index-sweep.js +249 -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 +28 -0
- package/dist/services/asset-sidecar-service.js +79 -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 +56 -0
- package/dist/services/asset-upload-service.js +200 -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 +128 -2
- package/dist/services/assets/base.js +98 -1
- package/dist/services/assets/base.js.map +1 -1
- package/dist/services/assets/index.d.ts +114 -1
- package/dist/services/assets/index.js +221 -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 +312 -45
- package/dist/services/auth-service.js +1011 -195
- package/dist/services/auth-service.js.map +1 -1
- package/dist/services/chat-session-service.d.ts +188 -0
- package/dist/services/chat-session-service.js +512 -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/comment-virtual-entity.d.ts +36 -0
- package/dist/services/comment-virtual-entity.js +71 -0
- package/dist/services/comment-virtual-entity.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 +213 -0
- package/dist/services/entity-mutations.js +380 -0
- package/dist/services/entity-mutations.js.map +1 -0
- package/dist/services/{meeting-processor.d.ts → event-processor.d.ts} +15 -8
- package/dist/services/{meeting-processor.js → event-processor.js} +124 -65
- 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 +58 -0
- package/dist/services/git.js +194 -55
- package/dist/services/git.js.map +1 -1
- package/dist/services/graph-maintenance.js +4 -4
- package/dist/services/graph-maintenance.js.map +1 -1
- package/dist/services/import-service.d.ts +51 -2
- package/dist/services/import-service.js +254 -107
- 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/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/scratch-asset-promote.d.ts +57 -0
- package/dist/services/scratch-asset-promote.js +95 -0
- package/dist/services/scratch-asset-promote.js.map +1 -0
- package/dist/services/scratch-attachment-service.d.ts +196 -0
- package/dist/services/scratch-attachment-service.js +347 -0
- package/dist/services/scratch-attachment-service.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 +282 -5
- package/dist/services/vector-service.js +585 -29
- 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.Bs_z3Z86.css +2 -0
- package/dist/web/_app/immutable/assets/12.DlIf1mKh.css +1 -0
- package/dist/web/_app/immutable/assets/14.7d-Q37wc.css +1 -0
- package/dist/web/_app/immutable/assets/15.BwBFdc1D.css +1 -0
- package/dist/web/_app/immutable/assets/16.CmLrbzZp.css +1 -0
- package/dist/web/_app/immutable/assets/17.DcuK5ZVm.css +1 -0
- package/dist/web/_app/immutable/assets/2.DATnR31c.css +1 -0
- package/dist/web/_app/immutable/assets/3.Cz4H8n_O.css +1 -0
- package/dist/web/_app/immutable/assets/4.aDHteTDy.css +1 -0
- package/dist/web/_app/immutable/assets/6.CF1i5Bon.css +1 -0
- package/dist/web/_app/immutable/assets/ArtifactEntityView.C4ooklFD.css +1 -0
- package/dist/web/_app/immutable/assets/AssetLibraryPicker.BOFW0MvF.css +1 -0
- package/dist/web/_app/immutable/assets/BulkActionsBar.cmKvHzRK.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.kiYnDFHu.css +1 -0
- package/dist/web/_app/immutable/assets/FolderMutationDialogs.BMRF6Z3z.css +1 -0
- package/dist/web/_app/immutable/assets/FolderPicker.Cp46GHe2.css +1 -0
- package/dist/web/_app/immutable/assets/GalleryView.WBGxxUQc.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.BZnsSOSf.css +1 -0
- package/dist/web/_app/immutable/assets/Rail.ilusFgD4.css +1 -0
- package/dist/web/_app/immutable/assets/SettingsDialog.D7-BO6S_.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.xAZBJhHw.css +1 -0
- package/dist/web/_app/immutable/assets/WorkspaceView.C8ErUJAY.css +1 -0
- package/dist/web/_app/immutable/assets/button.BlLm4Dg1.css +1 -0
- package/dist/web/_app/immutable/assets/history-summary.LpmHXasl.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.BgnafZ4K.css +1 -0
- package/dist/web/_app/immutable/assets/realtime.DDCWxn3B.css +1 -0
- package/dist/web/_app/immutable/assets/select.B90KUqR4.css +1 -0
- package/dist/web/_app/immutable/assets/sheet.RF9RBmml.css +1 -0
- package/dist/web/_app/immutable/chunks/22qYtvr82.js +1 -0
- package/dist/web/_app/immutable/chunks/2f1VclTm.js +1 -0
- package/dist/web/_app/immutable/chunks/4xgUPoGj2.js +2 -0
- package/dist/web/_app/immutable/chunks/5CYQk4xR.js +1 -0
- package/dist/web/_app/immutable/chunks/6S9WOky52.js +1 -0
- package/dist/web/_app/immutable/chunks/9K8VREGP.js +1 -0
- package/dist/web/_app/immutable/chunks/B-n5q6ku.js +1 -0
- package/dist/web/_app/immutable/chunks/B0p2fSEV2.js +1 -0
- package/dist/web/_app/immutable/chunks/B2oi87jG.js +2 -0
- package/dist/web/_app/immutable/chunks/B5Rb52QU.js +1 -0
- package/dist/web/_app/immutable/chunks/B6Lt-qaJ.js +1 -0
- package/dist/web/_app/immutable/chunks/B6O-q2CN.js +1 -0
- package/dist/web/_app/immutable/chunks/B6qeIQZz.js +2 -0
- package/dist/web/_app/immutable/chunks/B9KfEsQw2.js +1 -0
- package/dist/web/_app/immutable/chunks/BB-RSeXQ.js +1 -0
- package/dist/web/_app/immutable/chunks/BCQQzpbj.js +1 -0
- package/dist/web/_app/immutable/chunks/BGdzd-Tc.js +1 -0
- package/dist/web/_app/immutable/chunks/BLs1h0Rh2.js +1 -0
- package/dist/web/_app/immutable/chunks/BPzV_xOS2.js +1 -0
- package/dist/web/_app/immutable/chunks/BT2C6q8n.js +1 -0
- package/dist/web/_app/immutable/chunks/BUesbLq2.js +1 -0
- package/dist/web/_app/immutable/chunks/BUrnwOw4.js +2 -0
- package/dist/web/_app/immutable/chunks/BV-iCKqa.js +1 -0
- package/dist/web/_app/immutable/chunks/BVCJtXyc.js +1 -0
- package/dist/web/_app/immutable/chunks/BY9a3GSt.js +6 -0
- package/dist/web/_app/immutable/chunks/BZi3uKF4.js +1 -0
- package/dist/web/_app/immutable/chunks/BbfHGU9n2.js +1 -0
- package/dist/web/_app/immutable/chunks/Bbqu2-5G2.js +1 -0
- package/dist/web/_app/immutable/chunks/BbsX1Slr.js +3 -0
- package/dist/web/_app/immutable/chunks/BcwjqHaZ2.js +1 -0
- package/dist/web/_app/immutable/chunks/BizeEpTx.js +2 -0
- package/dist/web/_app/immutable/chunks/BlgjVmFM2.js +14 -0
- package/dist/web/_app/immutable/chunks/BocSRgv12.js +1 -0
- package/dist/web/_app/immutable/chunks/BojBYqc3.js +1 -0
- package/dist/web/_app/immutable/chunks/BpCG9m962.js +1 -0
- package/dist/web/_app/immutable/chunks/BqvnBg_y.js +1 -0
- package/dist/web/_app/immutable/chunks/BsT0J1QD.js +1 -0
- package/dist/web/_app/immutable/chunks/BsW72fyR2.js +1 -0
- package/dist/web/_app/immutable/chunks/Bti_XKwx.js +2692 -0
- package/dist/web/_app/immutable/chunks/Bua97Had2.js +2 -0
- package/dist/web/_app/immutable/chunks/BuhW5Fr0.js +689 -0
- package/dist/web/_app/immutable/chunks/Bx74EEyn2.js +1 -0
- package/dist/web/_app/immutable/chunks/BxPN0T61.js +1 -0
- package/dist/web/_app/immutable/chunks/Bz9lrgGs.js +1 -0
- package/dist/web/_app/immutable/chunks/BzaxZ6j12.js +1 -0
- package/dist/web/_app/immutable/chunks/C1B4xDs0.js +1 -0
- package/dist/web/_app/immutable/chunks/C1trcC8M.js +7 -0
- package/dist/web/_app/immutable/chunks/C9tvkk7Y2.js +22 -0
- package/dist/web/_app/immutable/chunks/CBQjdDZf.js +1 -0
- package/dist/web/_app/immutable/chunks/CDeazMFW2.js +2 -0
- package/dist/web/_app/immutable/chunks/CEahbtnP.js +1 -0
- package/dist/web/_app/immutable/chunks/CGjVCd0e.js +8 -0
- package/dist/web/_app/immutable/chunks/CICK9maP.js +1 -0
- package/dist/web/_app/immutable/chunks/CIoNEHQ82.js +184 -0
- package/dist/web/_app/immutable/chunks/CP8_U450.js +1 -0
- package/dist/web/_app/immutable/chunks/CQ1eQ93t2.js +6 -0
- package/dist/web/_app/immutable/chunks/CUFQMEBn2.js +1 -0
- package/dist/web/_app/immutable/chunks/CYEYDNwO2.js +1 -0
- package/dist/web/_app/immutable/chunks/CYyIP7kP2.js +66 -0
- package/dist/web/_app/immutable/chunks/CZgFaimi2.js +83 -0
- package/dist/web/_app/immutable/chunks/CZqvCTCv.js +1 -0
- package/dist/web/_app/immutable/chunks/CcI9jYBV.js +1 -0
- package/dist/web/_app/immutable/chunks/CcWaWbrI2.js +1 -0
- package/dist/web/_app/immutable/chunks/CdtzRVZK.js +1 -0
- package/dist/web/_app/immutable/chunks/CfYG72Hc.js +1 -0
- package/dist/web/_app/immutable/chunks/Ch1kmm3J2.js +1 -0
- package/dist/web/_app/immutable/chunks/CmSSN61R2.js +1 -0
- package/dist/web/_app/immutable/chunks/Cqm5wAin.js +1 -0
- package/dist/web/_app/immutable/chunks/CuYPXpWU.js +1 -0
- package/dist/web/_app/immutable/chunks/CvSEodTA.js +1 -0
- package/dist/web/_app/immutable/chunks/CvqqrTrj.js +1 -0
- package/dist/web/_app/immutable/chunks/CwAmWt6h.js +1 -0
- package/dist/web/_app/immutable/chunks/CwP3Oa7F.js +1 -0
- package/dist/web/_app/immutable/chunks/CyTluew1.js +2 -0
- package/dist/web/_app/immutable/chunks/CzXdOgVl2.js +7 -0
- package/dist/web/_app/immutable/chunks/D0IAituJ.js +1 -0
- package/dist/web/_app/immutable/chunks/D0W7c6Sg.js +185 -0
- package/dist/web/_app/immutable/chunks/D0rBhnqB2.js +1 -0
- package/dist/web/_app/immutable/chunks/D1-GZSN1.js +1 -0
- package/dist/web/_app/immutable/chunks/D1yvtriI.js +1 -0
- package/dist/web/_app/immutable/chunks/D25NMRpl.js +1 -0
- package/dist/web/_app/immutable/chunks/D8wZ2xul.js +4 -0
- package/dist/web/_app/immutable/chunks/DA3HEX3X.js +1 -0
- package/dist/web/_app/immutable/chunks/DD9wj4ca2.js +1 -0
- package/dist/web/_app/immutable/chunks/DJ1YeiJL2.js +1 -0
- package/dist/web/_app/immutable/chunks/DKFZnpVC.js +5 -0
- package/dist/web/_app/immutable/chunks/DKJl40hl.js +1 -0
- package/dist/web/_app/immutable/chunks/DPUVu0T0.js +1 -0
- package/dist/web/_app/immutable/chunks/DQMWa2t7.js +1 -0
- package/dist/web/_app/immutable/chunks/DXsFrDer2.js +1 -0
- package/dist/web/_app/immutable/chunks/DYc5KW3F.js +1 -0
- package/dist/web/_app/immutable/chunks/DZcTwXBW.js +1 -0
- package/dist/web/_app/immutable/chunks/DcPrzUMJ.js +1 -0
- package/dist/web/_app/immutable/chunks/DdPO8kRu2.js +2 -0
- package/dist/web/_app/immutable/chunks/DeOXyJZw2.js +1 -0
- package/dist/web/_app/immutable/chunks/DfufUFR1.js +2 -0
- package/dist/web/_app/immutable/chunks/DiQg3ing.js +1 -0
- package/dist/web/_app/immutable/chunks/DjIqa1_y.js +2 -0
- package/dist/web/_app/immutable/chunks/DkJ1dkxV2.js +1 -0
- package/dist/web/_app/immutable/chunks/Dl63IUnH2.js +224 -0
- package/dist/web/_app/immutable/chunks/DmFdD6zT.js +1 -0
- package/dist/web/_app/immutable/chunks/Dn3R8S-U.js +1 -0
- package/dist/web/_app/immutable/chunks/DpNr1GQ2.js +1 -0
- package/dist/web/_app/immutable/chunks/DpVNDHXz.js +2 -0
- package/dist/web/_app/immutable/chunks/DuxziNnw.js +1 -0
- package/dist/web/_app/immutable/chunks/Dv3A3Wcj.js +1 -0
- package/dist/web/_app/immutable/chunks/FuiJnZG0.js +1 -0
- package/dist/web/_app/immutable/chunks/Izkulod7.js +1 -0
- package/dist/web/_app/immutable/chunks/KZY6ongq2.js +2 -0
- package/dist/web/_app/immutable/chunks/LYL8znYR2.js +23 -0
- package/dist/web/_app/immutable/chunks/PhN6tXuJ2.js +1 -0
- package/dist/web/_app/immutable/chunks/PyLyCpuL.js +1 -0
- package/dist/web/_app/immutable/chunks/RK4gCWN0.js +2 -0
- package/dist/web/_app/immutable/chunks/VsBngTf4.js +2 -0
- package/dist/web/_app/immutable/chunks/XcWejFm_.js +5 -0
- package/dist/web/_app/immutable/chunks/al_nidE9.js +1 -0
- package/dist/web/_app/immutable/chunks/e50-izZO2.js +1 -0
- package/dist/web/_app/immutable/chunks/hG-QCarB.js +1 -0
- package/dist/web/_app/immutable/chunks/hStvCHkX.js +1 -0
- package/dist/web/_app/immutable/chunks/iJVY9p0y.js +3 -0
- package/dist/web/_app/immutable/chunks/kNaey6uv.js +1 -0
- package/dist/web/_app/immutable/chunks/pIXNe0C1.js +1 -0
- package/dist/web/_app/immutable/chunks/pNSRq_1B.js +2 -0
- package/dist/web/_app/immutable/chunks/qwr5boV8.js +1 -0
- package/dist/web/_app/immutable/chunks/rjjyuGhb.js +1 -0
- package/dist/web/_app/immutable/chunks/sg-T-FoN.js +1 -0
- package/dist/web/_app/immutable/chunks/uBgoVlsx.js +3 -0
- package/dist/web/_app/immutable/chunks/ulshNz6x.js +2 -0
- package/dist/web/_app/immutable/chunks/xY0c-UfG.js +3 -0
- package/dist/web/_app/immutable/chunks/xeNvx4Bl2.js +1 -0
- package/dist/web/_app/immutable/chunks/xihTtKlq.js +1 -0
- package/dist/web/_app/immutable/entry/app.pNUW-q4U.js +2 -0
- package/dist/web/_app/immutable/entry/start.DxGtIGG_.js +1 -0
- package/dist/web/_app/immutable/nodes/0.D6ZCY_R6.js +2 -0
- package/dist/web/_app/immutable/nodes/1.BryH3TNr.js +1 -0
- package/dist/web/_app/immutable/nodes/10.CMZMvR17.js +1 -0
- package/dist/web/_app/immutable/nodes/11.QHx_JShx.js +1 -0
- package/dist/web/_app/immutable/nodes/12.CiRWbb4X.js +1 -0
- package/dist/web/_app/immutable/nodes/13.CYrHXCA8.js +1 -0
- package/dist/web/_app/immutable/nodes/14.K18eIE5Z.js +1 -0
- package/dist/web/_app/immutable/nodes/15.DxgnZ61h.js +1 -0
- package/dist/web/_app/immutable/nodes/16.Dn6iuWIo.js +1 -0
- package/dist/web/_app/immutable/nodes/17.viwS7vTR.js +77 -0
- package/dist/web/_app/immutable/nodes/2.BQkQ_uUM.js +122 -0
- package/dist/web/_app/immutable/nodes/3.B4pqXsqq.js +6 -0
- package/dist/web/_app/immutable/nodes/4.CKXEgIAP.js +11 -0
- package/dist/web/_app/immutable/nodes/5.A2TASl4Q.js +1 -0
- package/dist/web/_app/immutable/nodes/6.DaIRO3SI.js +6 -0
- package/dist/web/_app/immutable/nodes/7.ga2UvFm-.js +1 -0
- package/dist/web/_app/immutable/nodes/8.BTEWT81u.js +1 -0
- package/dist/web/_app/immutable/nodes/9.BVxo0E0c.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 +56 -21
- package/dist/web/studiograph-logomark.svg +29 -0
- package/package.json +35 -14
- package/dist/agent/skills/enrich-entities.md +0 -136
- package/dist/agent/skills/sync-configuration.md +0 -119
- package/dist/agent/skills/sync-setup.md +0 -82
- package/dist/agent/tools/message-tools.d.ts +0 -42
- package/dist/agent/tools/message-tools.js +0 -106
- package/dist/agent/tools/message-tools.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/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.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/start.d.ts +0 -7
- package/dist/cli/commands/start.js +0 -584
- package/dist/cli/commands/start.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 -175
- 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/integrations/registry.d.ts +0 -8
- package/dist/integrations/registry.js +0 -7
- package/dist/integrations/registry.js.map +0 -1
- package/dist/integrations/types.d.ts +0 -43
- package/dist/integrations/types.js +0 -5
- 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/server/chrome/chrome.css +0 -691
- package/dist/server/chrome/chrome.js +0 -374
- 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/meeting-ingest-api.d.ts +0 -14
- package/dist/server/routes/meeting-ingest-api.js.map +0 -1
- package/dist/server/routes/messages-api.d.ts +0 -15
- package/dist/server/routes/messages-api.js +0 -385
- package/dist/server/routes/messages-api.js.map +0 -1
- package/dist/services/batch-processor.d.ts +0 -49
- package/dist/services/batch-processor.js +0 -166
- package/dist/services/batch-processor.js.map +0 -1
- package/dist/services/briefing.d.ts +0 -26
- package/dist/services/briefing.js +0 -230
- package/dist/services/briefing.js.map +0 -1
- package/dist/services/heartbeat.d.ts +0 -28
- package/dist/services/heartbeat.js +0 -183
- package/dist/services/heartbeat.js.map +0 -1
- package/dist/services/image-import-service.d.ts +0 -24
- package/dist/services/image-import-service.js +0 -108
- package/dist/services/image-import-service.js.map +0 -1
- package/dist/services/insights.d.ts +0 -38
- package/dist/services/insights.js +0 -269
- package/dist/services/insights.js.map +0 -1
- package/dist/services/meeting-processor.js.map +0 -1
- package/dist/services/message-service.d.ts +0 -68
- package/dist/services/message-service.js +0 -220
- package/dist/services/message-service.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.uPSqtsC5.css +0 -1
- package/dist/web/_app/immutable/assets/11.2jzI3cZY.css +0 -1
- package/dist/web/_app/immutable/assets/12.CT4xL4K3.css +0 -1
- package/dist/web/_app/immutable/assets/13.BUrHkYry.css +0 -1
- package/dist/web/_app/immutable/assets/2.DpQWr6q6.css +0 -1
- package/dist/web/_app/immutable/assets/3.BxdqT7zi.css +0 -1
- package/dist/web/_app/immutable/assets/4.DdNqjd0T.css +0 -1
- package/dist/web/_app/immutable/assets/5.DFeGxLYf.css +0 -1
- package/dist/web/_app/immutable/assets/6.DXZr_rI_.css +0 -1
- package/dist/web/_app/immutable/assets/GraphView.D9ePpZez.css +0 -1
- package/dist/web/_app/immutable/assets/Toaster.rN8r_Hzv.css +0 -1
- package/dist/web/_app/immutable/assets/ViewToolbar.BWE03S64.css +0 -1
- package/dist/web/_app/immutable/assets/WorkspaceView.CgGDi_Zb.css +0 -1
- package/dist/web/_app/immutable/assets/wikilinks.CzMBkUMB.css +0 -1
- package/dist/web/_app/immutable/chunks/-jG4Obyh.js +0 -4
- package/dist/web/_app/immutable/chunks/2nrc8f_O.js +0 -1
- package/dist/web/_app/immutable/chunks/7S2LGqoP.js +0 -2
- package/dist/web/_app/immutable/chunks/8Q3ZJIYu.js +0 -1
- package/dist/web/_app/immutable/chunks/B8ydT5xX.js +0 -2
- package/dist/web/_app/immutable/chunks/BB_5th5W.js +0 -3383
- package/dist/web/_app/immutable/chunks/BEn6N5c2.js +0 -1
- package/dist/web/_app/immutable/chunks/BFNNbCAM.js +0 -1
- package/dist/web/_app/immutable/chunks/BFZZEUd5.js +0 -1
- package/dist/web/_app/immutable/chunks/BGk8kfOE.js +0 -2
- package/dist/web/_app/immutable/chunks/BIBCr278.js +0 -1
- package/dist/web/_app/immutable/chunks/BPCkkwqe.js +0 -1
- package/dist/web/_app/immutable/chunks/BhlvzGQx.js +0 -1
- package/dist/web/_app/immutable/chunks/BlMknQeF.js +0 -1
- package/dist/web/_app/immutable/chunks/BpjqrlCg.js +0 -1
- package/dist/web/_app/immutable/chunks/BrebtJNG.js +0 -18
- package/dist/web/_app/immutable/chunks/ByBZ7JIT.js +0 -1
- package/dist/web/_app/immutable/chunks/Bz0ZjVQE.js +0 -2
- package/dist/web/_app/immutable/chunks/BzJTZOK2.js +0 -1
- package/dist/web/_app/immutable/chunks/C0LVZhvn.js +0 -1
- package/dist/web/_app/immutable/chunks/C3uBrOS5.js +0 -1
- package/dist/web/_app/immutable/chunks/C8R1sDpW.js +0 -1
- package/dist/web/_app/immutable/chunks/CDRHrs0g.js +0 -1
- package/dist/web/_app/immutable/chunks/CN5_py1I.js +0 -1
- package/dist/web/_app/immutable/chunks/CPne482a.js +0 -1
- package/dist/web/_app/immutable/chunks/CSVbGg_b.js +0 -5
- package/dist/web/_app/immutable/chunks/CWyU-seV.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/ChsiIm-E.js +0 -1
- package/dist/web/_app/immutable/chunks/CojKppbh.js +0 -1
- package/dist/web/_app/immutable/chunks/CqkleIqs.js +0 -1
- package/dist/web/_app/immutable/chunks/CtYLtD7K.js +0 -1
- package/dist/web/_app/immutable/chunks/D-HDy5qS.js +0 -1
- package/dist/web/_app/immutable/chunks/D5aIYSkd.js +0 -1
- package/dist/web/_app/immutable/chunks/DBBXARVf.js +0 -1
- package/dist/web/_app/immutable/chunks/DFYOFE3o.js +0 -1
- package/dist/web/_app/immutable/chunks/DKaafS50.js +0 -1
- package/dist/web/_app/immutable/chunks/DUMOo1Pn.js +0 -1
- package/dist/web/_app/immutable/chunks/DWX9f6AF.js +0 -1
- package/dist/web/_app/immutable/chunks/DY8-EONP.js +0 -1
- package/dist/web/_app/immutable/chunks/DkoHPElM.js +0 -1
- package/dist/web/_app/immutable/chunks/DnL9f0lc.js +0 -7
- package/dist/web/_app/immutable/chunks/DsnmJJEf.js +0 -1
- package/dist/web/_app/immutable/chunks/DujahU3W.js +0 -1
- package/dist/web/_app/immutable/chunks/FBn-ES5k.js +0 -1
- package/dist/web/_app/immutable/chunks/HQpwSOb3.js +0 -1
- package/dist/web/_app/immutable/chunks/KyjzlWRN.js +0 -2
- package/dist/web/_app/immutable/chunks/PPVm8Dsz.js +0 -1
- package/dist/web/_app/immutable/chunks/UwYfmrPx.js +0 -2
- package/dist/web/_app/immutable/chunks/W25ZVI8L.js +0 -2
- package/dist/web/_app/immutable/chunks/WSUKABI_.js +0 -1
- package/dist/web/_app/immutable/chunks/XjsuEnNE.js +0 -5
- package/dist/web/_app/immutable/chunks/ZD6ARAtb.js +0 -1
- package/dist/web/_app/immutable/chunks/pBTf4stg.js +0 -2
- package/dist/web/_app/immutable/chunks/rGIarcnp.js +0 -1
- package/dist/web/_app/immutable/chunks/vxEtkL8z.js +0 -1
- package/dist/web/_app/immutable/chunks/wDIGUaoU.js +0 -3
- package/dist/web/_app/immutable/entry/app.ZHiTM8WS.js +0 -2
- package/dist/web/_app/immutable/entry/start.C9-FfAVc.js +0 -1
- package/dist/web/_app/immutable/nodes/0.D92Orz8k.js +0 -2
- package/dist/web/_app/immutable/nodes/1.BMdyglM_.js +0 -1
- package/dist/web/_app/immutable/nodes/10.BilVDHSL.js +0 -1
- package/dist/web/_app/immutable/nodes/11.CS9E0Hic.js +0 -1
- package/dist/web/_app/immutable/nodes/12.D3BOxYzG.js +0 -1
- package/dist/web/_app/immutable/nodes/13.CClMKYtN.js +0 -1
- package/dist/web/_app/immutable/nodes/2.C8KKElPL.js +0 -267
- package/dist/web/_app/immutable/nodes/3.C5n5uiWU.js +0 -5
- package/dist/web/_app/immutable/nodes/4.DcGVvgiL.js +0 -11
- package/dist/web/_app/immutable/nodes/5.DxIjnFQO.js +0 -4
- package/dist/web/_app/immutable/nodes/6.lkh6kKLj.js +0 -1
- package/dist/web/_app/immutable/nodes/7.Bg7SbfhA.js +0 -1
- package/dist/web/_app/immutable/nodes/8.DcXWCNBE.js +0 -1
- package/dist/web/_app/immutable/nodes/9.Cefi8Jfm.js +0 -1
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Test-connection probe for the Tavily Search API.
|
|
3
|
+
*
|
|
4
|
+
* Makes a small real search call against
|
|
5
|
+
* POST https://api.tavily.com/search
|
|
6
|
+
* with the configured key and a fixed probe query. Returns `ok: true`
|
|
7
|
+
* on HTTP 200, `ok: false` on auth / network / other errors. This is the
|
|
8
|
+
* same endpoint + request shape the runtime search tool uses
|
|
9
|
+
* (see agent/tools/web-tools.ts), so a green probe means search will work.
|
|
10
|
+
*
|
|
11
|
+
* The probe never echoes the upstream error body — only a generic canned
|
|
12
|
+
* phrase and the HTTP status code (no headers, no payload).
|
|
13
|
+
*
|
|
14
|
+
* `fetchImpl` is injectable so unit tests can exercise the status mapping
|
|
15
|
+
* without contacting the real upstream (mirrors the Anthropic probe).
|
|
16
|
+
*/
|
|
17
|
+
const TAVILY_URL = 'https://api.tavily.com/search';
|
|
18
|
+
const PROBE_QUERY = 'studiograph probe';
|
|
19
|
+
export async function probeTavily(apiKey, _ctx, fetchImpl = fetch) {
|
|
20
|
+
const started = Date.now();
|
|
21
|
+
if (!apiKey || typeof apiKey !== 'string' || apiKey.length === 0) {
|
|
22
|
+
return { ok: false, message: 'No API key provided', durationMs: Date.now() - started };
|
|
23
|
+
}
|
|
24
|
+
try {
|
|
25
|
+
const res = await fetchImpl(TAVILY_URL, {
|
|
26
|
+
method: 'POST',
|
|
27
|
+
headers: { 'Content-Type': 'application/json' },
|
|
28
|
+
body: JSON.stringify({
|
|
29
|
+
api_key: apiKey,
|
|
30
|
+
query: PROBE_QUERY,
|
|
31
|
+
max_results: 1,
|
|
32
|
+
search_depth: 'basic',
|
|
33
|
+
}),
|
|
34
|
+
});
|
|
35
|
+
const durationMs = Date.now() - started;
|
|
36
|
+
if (res.ok) {
|
|
37
|
+
return { ok: true, durationMs };
|
|
38
|
+
}
|
|
39
|
+
if (res.status === 401 || res.status === 403) {
|
|
40
|
+
return { ok: false, message: 'API key rejected', durationMs };
|
|
41
|
+
}
|
|
42
|
+
if (res.status === 429) {
|
|
43
|
+
return { ok: false, message: 'Rate limited (try again shortly)', durationMs };
|
|
44
|
+
}
|
|
45
|
+
if (res.status >= 500) {
|
|
46
|
+
return { ok: false, message: `Upstream ${res.status}`, durationMs };
|
|
47
|
+
}
|
|
48
|
+
return { ok: false, message: `HTTP ${res.status}`, durationMs };
|
|
49
|
+
}
|
|
50
|
+
catch (err) {
|
|
51
|
+
return {
|
|
52
|
+
ok: false,
|
|
53
|
+
message: err instanceof Error && err.message ? err.message.slice(0, 100) : 'Network error',
|
|
54
|
+
durationMs: Date.now() - started,
|
|
55
|
+
};
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
//# sourceMappingURL=tavily.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tavily.js","sourceRoot":"","sources":["../../../../src/core/secrets/probes/tavily.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAIH,MAAM,UAAU,GAAG,+BAA+B,CAAC;AACnD,MAAM,WAAW,GAAG,mBAAmB,CAAC;AAExC,MAAM,CAAC,KAAK,UAAU,WAAW,CAC/B,MAAc,EACd,IAAc,EACd,YAA0B,KAAK;IAE/B,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IAC3B,IAAI,CAAC,MAAM,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACjE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,qBAAqB,EAAE,UAAU,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,OAAO,EAAE,CAAC;IACzF,CAAC;IAED,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,MAAM,SAAS,CAAC,UAAU,EAAE;YACtC,MAAM,EAAE,MAAM;YACd,OAAO,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE;YAC/C,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC;gBACnB,OAAO,EAAE,MAAM;gBACf,KAAK,EAAE,WAAW;gBAClB,WAAW,EAAE,CAAC;gBACd,YAAY,EAAE,OAAO;aACtB,CAAC;SACH,CAAC,CAAC;QACH,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,OAAO,CAAC;QACxC,IAAI,GAAG,CAAC,EAAE,EAAE,CAAC;YACX,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE,CAAC;QAClC,CAAC;QACD,IAAI,GAAG,CAAC,MAAM,KAAK,GAAG,IAAI,GAAG,CAAC,MAAM,KAAK,GAAG,EAAE,CAAC;YAC7C,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,kBAAkB,EAAE,UAAU,EAAE,CAAC;QAChE,CAAC;QACD,IAAI,GAAG,CAAC,MAAM,KAAK,GAAG,EAAE,CAAC;YACvB,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,kCAAkC,EAAE,UAAU,EAAE,CAAC;QAChF,CAAC;QACD,IAAI,GAAG,CAAC,MAAM,IAAI,GAAG,EAAE,CAAC;YACtB,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,YAAY,GAAG,CAAC,MAAM,EAAE,EAAE,UAAU,EAAE,CAAC;QACtE,CAAC;QACD,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,QAAQ,GAAG,CAAC,MAAM,EAAE,EAAE,UAAU,EAAE,CAAC;IAClE,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO;YACL,EAAE,EAAE,KAAK;YACT,OAAO,EAAE,GAAG,YAAY,KAAK,IAAI,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,eAAe;YAC1F,UAAU,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,OAAO;SACjC,CAAC;IACJ,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Test-connection probe for Voyage AI embeddings API.
|
|
3
|
+
*
|
|
4
|
+
* Makes a small real embedding call against
|
|
5
|
+
* POST https://api.voyageai.com/v1/embeddings
|
|
6
|
+
* with the configured model (voyage-3) and a fixed test input. Returns
|
|
7
|
+
* `ok: true` on HTTP 200, `ok: false` on auth / network / other errors.
|
|
8
|
+
*
|
|
9
|
+
* The probe never echoes the upstream error body — only a generic
|
|
10
|
+
* canned phrase and the HTTP status code (no headers, no payload).
|
|
11
|
+
*/
|
|
12
|
+
import type { TestResult } from './anthropic.js';
|
|
13
|
+
export declare function probeVoyage(apiKey: string): Promise<TestResult>;
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Test-connection probe for Voyage AI embeddings API.
|
|
3
|
+
*
|
|
4
|
+
* Makes a small real embedding call against
|
|
5
|
+
* POST https://api.voyageai.com/v1/embeddings
|
|
6
|
+
* with the configured model (voyage-3) and a fixed test input. Returns
|
|
7
|
+
* `ok: true` on HTTP 200, `ok: false` on auth / network / other errors.
|
|
8
|
+
*
|
|
9
|
+
* The probe never echoes the upstream error body — only a generic
|
|
10
|
+
* canned phrase and the HTTP status code (no headers, no payload).
|
|
11
|
+
*/
|
|
12
|
+
const VOYAGE_URL = 'https://api.voyageai.com/v1/embeddings';
|
|
13
|
+
const VOYAGE_MODEL = 'voyage-3';
|
|
14
|
+
const PROBE_INPUT = 'studiograph probe';
|
|
15
|
+
export async function probeVoyage(apiKey) {
|
|
16
|
+
const started = Date.now();
|
|
17
|
+
if (!apiKey || typeof apiKey !== 'string' || apiKey.length === 0) {
|
|
18
|
+
return { ok: false, message: 'No API key provided', durationMs: Date.now() - started };
|
|
19
|
+
}
|
|
20
|
+
try {
|
|
21
|
+
const res = await fetch(VOYAGE_URL, {
|
|
22
|
+
method: 'POST',
|
|
23
|
+
headers: {
|
|
24
|
+
'Authorization': `Bearer ${apiKey}`,
|
|
25
|
+
'Content-Type': 'application/json',
|
|
26
|
+
},
|
|
27
|
+
body: JSON.stringify({ input: PROBE_INPUT, model: VOYAGE_MODEL }),
|
|
28
|
+
});
|
|
29
|
+
const durationMs = Date.now() - started;
|
|
30
|
+
if (res.ok) {
|
|
31
|
+
return { ok: true, durationMs };
|
|
32
|
+
}
|
|
33
|
+
if (res.status === 401 || res.status === 403) {
|
|
34
|
+
return { ok: false, message: 'API key rejected', durationMs };
|
|
35
|
+
}
|
|
36
|
+
if (res.status === 429) {
|
|
37
|
+
return { ok: false, message: 'Rate limited (try again shortly)', durationMs };
|
|
38
|
+
}
|
|
39
|
+
if (res.status >= 500) {
|
|
40
|
+
return { ok: false, message: `Upstream ${res.status}`, durationMs };
|
|
41
|
+
}
|
|
42
|
+
return { ok: false, message: `HTTP ${res.status}`, durationMs };
|
|
43
|
+
}
|
|
44
|
+
catch (err) {
|
|
45
|
+
return {
|
|
46
|
+
ok: false,
|
|
47
|
+
message: err instanceof Error && err.message ? err.message.slice(0, 100) : 'Network error',
|
|
48
|
+
durationMs: Date.now() - started,
|
|
49
|
+
};
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
//# sourceMappingURL=voyage.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"voyage.js","sourceRoot":"","sources":["../../../../src/core/secrets/probes/voyage.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAIH,MAAM,UAAU,GAAG,wCAAwC,CAAC;AAC5D,MAAM,YAAY,GAAG,UAAU,CAAC;AAChC,MAAM,WAAW,GAAG,mBAAmB,CAAC;AAExC,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,MAAc;IAC9C,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IAC3B,IAAI,CAAC,MAAM,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACjE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,qBAAqB,EAAE,UAAU,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,OAAO,EAAE,CAAC;IACzF,CAAC;IAED,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,UAAU,EAAE;YAClC,MAAM,EAAE,MAAM;YACd,OAAO,EAAE;gBACP,eAAe,EAAE,UAAU,MAAM,EAAE;gBACnC,cAAc,EAAE,kBAAkB;aACnC;YACD,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,WAAW,EAAE,KAAK,EAAE,YAAY,EAAE,CAAC;SAClE,CAAC,CAAC;QACH,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,OAAO,CAAC;QACxC,IAAI,GAAG,CAAC,EAAE,EAAE,CAAC;YACX,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE,CAAC;QAClC,CAAC;QACD,IAAI,GAAG,CAAC,MAAM,KAAK,GAAG,IAAI,GAAG,CAAC,MAAM,KAAK,GAAG,EAAE,CAAC;YAC7C,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,kBAAkB,EAAE,UAAU,EAAE,CAAC;QAChE,CAAC;QACD,IAAI,GAAG,CAAC,MAAM,KAAK,GAAG,EAAE,CAAC;YACvB,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,kCAAkC,EAAE,UAAU,EAAE,CAAC;QAChF,CAAC;QACD,IAAI,GAAG,CAAC,MAAM,IAAI,GAAG,EAAE,CAAC;YACtB,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,YAAY,GAAG,CAAC,MAAM,EAAE,EAAE,UAAU,EAAE,CAAC;QACtE,CAAC;QACD,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,QAAQ,GAAG,CAAC,MAAM,EAAE,EAAE,UAAU,EAAE,CAAC;IAClE,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO;YACL,EAAE,EAAE,KAAK;YACT,OAAO,EAAE,GAAG,YAAY,KAAK,IAAI,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,eAAe;YAC1F,UAAU,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,OAAO;SACjC,CAAC;IACJ,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* R2 structural-fields migration (2026-05-12).
|
|
3
|
+
*
|
|
4
|
+
* Backstory: when the encrypted store landed, the R2 credentials
|
|
5
|
+
* (`r2.access_key_id`, `r2.secret_access_key`) moved into the registry
|
|
6
|
+
* but the three structural fields — `account_id`, `bucket`, and
|
|
7
|
+
* `public_url` — kept living in `workspace.json:r2_config.*`. That left
|
|
8
|
+
* the Settings UI broken: users could enter credentials, hit save, and
|
|
9
|
+
* AssetService still picked `local` because workspace-manager gates on
|
|
10
|
+
* the structural fields from workspace.json. Until those fields were
|
|
11
|
+
* also reachable via the store, the UI couldn't fully configure R2.
|
|
12
|
+
*
|
|
13
|
+
* Phase 12 (2026-05-12) already removed the first-run importer that
|
|
14
|
+
* would have piggybacked the structural-field migration onto the
|
|
15
|
+
* existing migrationSource pipeline. So this standalone one-shot fills
|
|
16
|
+
* the gap: it runs at boot, copies pre-existing values from
|
|
17
|
+
* `workspace.json:r2_config.*` into the store on first encounter, and
|
|
18
|
+
* marks a meta flag so it never repeats.
|
|
19
|
+
*
|
|
20
|
+
* Operators who configured R2 via `studiograph r2 setup` before this
|
|
21
|
+
* change see zero behavior difference. Operators who set R2 via the UI
|
|
22
|
+
* post-change write directly to the store and never touch this code.
|
|
23
|
+
*
|
|
24
|
+
* Idempotent. Non-fatal on any single error — we'd rather boot with the
|
|
25
|
+
* legacy fallback path than refuse to start because workspace.json went
|
|
26
|
+
* sideways.
|
|
27
|
+
*/
|
|
28
|
+
import type { SqliteEncryptedStore } from './SqliteEncryptedStore.js';
|
|
29
|
+
interface MigrationOptions {
|
|
30
|
+
workspaceJsonPath: string;
|
|
31
|
+
store: SqliteEncryptedStore;
|
|
32
|
+
}
|
|
33
|
+
export interface MigrationResult {
|
|
34
|
+
skipped: boolean;
|
|
35
|
+
/** Keys actually written to the store (skipping ones already present). */
|
|
36
|
+
written: string[];
|
|
37
|
+
}
|
|
38
|
+
export declare function migrateR2Structural(opts: MigrationOptions): Promise<MigrationResult>;
|
|
39
|
+
export {};
|
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* R2 structural-fields migration (2026-05-12).
|
|
3
|
+
*
|
|
4
|
+
* Backstory: when the encrypted store landed, the R2 credentials
|
|
5
|
+
* (`r2.access_key_id`, `r2.secret_access_key`) moved into the registry
|
|
6
|
+
* but the three structural fields — `account_id`, `bucket`, and
|
|
7
|
+
* `public_url` — kept living in `workspace.json:r2_config.*`. That left
|
|
8
|
+
* the Settings UI broken: users could enter credentials, hit save, and
|
|
9
|
+
* AssetService still picked `local` because workspace-manager gates on
|
|
10
|
+
* the structural fields from workspace.json. Until those fields were
|
|
11
|
+
* also reachable via the store, the UI couldn't fully configure R2.
|
|
12
|
+
*
|
|
13
|
+
* Phase 12 (2026-05-12) already removed the first-run importer that
|
|
14
|
+
* would have piggybacked the structural-field migration onto the
|
|
15
|
+
* existing migrationSource pipeline. So this standalone one-shot fills
|
|
16
|
+
* the gap: it runs at boot, copies pre-existing values from
|
|
17
|
+
* `workspace.json:r2_config.*` into the store on first encounter, and
|
|
18
|
+
* marks a meta flag so it never repeats.
|
|
19
|
+
*
|
|
20
|
+
* Operators who configured R2 via `studiograph r2 setup` before this
|
|
21
|
+
* change see zero behavior difference. Operators who set R2 via the UI
|
|
22
|
+
* post-change write directly to the store and never touch this code.
|
|
23
|
+
*
|
|
24
|
+
* Idempotent. Non-fatal on any single error — we'd rather boot with the
|
|
25
|
+
* legacy fallback path than refuse to start because workspace.json went
|
|
26
|
+
* sideways.
|
|
27
|
+
*/
|
|
28
|
+
import { existsSync, readFileSync } from 'fs';
|
|
29
|
+
const META_KEY = 'r2_structural_migrated_at';
|
|
30
|
+
/**
|
|
31
|
+
* Map of registry key → dot-path inside workspace.json's r2_config block.
|
|
32
|
+
* Mirrors the same shape the legacy `migrationSource` annotations encoded
|
|
33
|
+
* for other fields before Phase 12b dropped them.
|
|
34
|
+
*/
|
|
35
|
+
const FIELD_MAP = [
|
|
36
|
+
{ key: 'r2.account_id', path: 'account_id' },
|
|
37
|
+
{ key: 'r2.bucket', path: 'bucket' },
|
|
38
|
+
{ key: 'r2.public_url', path: 'public_url' },
|
|
39
|
+
];
|
|
40
|
+
/**
|
|
41
|
+
* Pull a nested string out of an object — same shape as dual-write's
|
|
42
|
+
* readPath. Returns undefined for any missing intermediate or non-string
|
|
43
|
+
* leaf. We intentionally only accept strings because the registry's
|
|
44
|
+
* validators all expect string values for the R2 structural fields.
|
|
45
|
+
*/
|
|
46
|
+
function readString(obj, path) {
|
|
47
|
+
if (!obj || typeof obj !== 'object')
|
|
48
|
+
return undefined;
|
|
49
|
+
const parts = path.split('.');
|
|
50
|
+
let cur = obj;
|
|
51
|
+
for (const p of parts) {
|
|
52
|
+
if (cur == null || typeof cur !== 'object')
|
|
53
|
+
return undefined;
|
|
54
|
+
cur = cur[p];
|
|
55
|
+
}
|
|
56
|
+
return typeof cur === 'string' && cur.length > 0 ? cur : undefined;
|
|
57
|
+
}
|
|
58
|
+
export async function migrateR2Structural(opts) {
|
|
59
|
+
if (opts.store.getMeta(META_KEY)) {
|
|
60
|
+
return { skipped: true, written: [] };
|
|
61
|
+
}
|
|
62
|
+
// Stamp the marker even on the no-source path so we don't re-scan
|
|
63
|
+
// workspace.json on every boot. This is the same shape scope-collapse
|
|
64
|
+
// uses for fresh DBs.
|
|
65
|
+
if (!existsSync(opts.workspaceJsonPath)) {
|
|
66
|
+
opts.store.setMeta(META_KEY, String(Date.now()));
|
|
67
|
+
return { skipped: false, written: [] };
|
|
68
|
+
}
|
|
69
|
+
let raw;
|
|
70
|
+
try {
|
|
71
|
+
raw = JSON.parse(readFileSync(opts.workspaceJsonPath, 'utf-8'));
|
|
72
|
+
}
|
|
73
|
+
catch {
|
|
74
|
+
// Unparseable workspace.json — mark migrated anyway and let the
|
|
75
|
+
// boot path surface the file error elsewhere. Trying to recover
|
|
76
|
+
// from a corrupt config from inside a secrets migration would
|
|
77
|
+
// mask the real problem.
|
|
78
|
+
opts.store.setMeta(META_KEY, String(Date.now()));
|
|
79
|
+
return { skipped: false, written: [] };
|
|
80
|
+
}
|
|
81
|
+
const r2Config = raw?.r2_config;
|
|
82
|
+
const written = [];
|
|
83
|
+
// Best-effort writes. Each field is independent — a bad URL on one
|
|
84
|
+
// field shouldn't stop the others from migrating. The store's
|
|
85
|
+
// workspace-setting writer doesn't run the registry validator at
|
|
86
|
+
// write time, so a malformed URL would survive the write; the
|
|
87
|
+
// Settings UI surfaces validation on subsequent edits.
|
|
88
|
+
const actor = { type: 'system', systemId: 'r2-structural-migration' };
|
|
89
|
+
for (const { key, path } of FIELD_MAP) {
|
|
90
|
+
const value = readString(r2Config, path);
|
|
91
|
+
if (!value)
|
|
92
|
+
continue;
|
|
93
|
+
// Don't clobber a value that's already in the store — the UI may
|
|
94
|
+
// have written one before the importer ran on a freshly-redeployed
|
|
95
|
+
// workspace where workspace.json got re-synced from a backup.
|
|
96
|
+
if (opts.store.get(key) !== undefined)
|
|
97
|
+
continue;
|
|
98
|
+
try {
|
|
99
|
+
await opts.store.set({ key, value }, actor);
|
|
100
|
+
written.push(key);
|
|
101
|
+
}
|
|
102
|
+
catch {
|
|
103
|
+
// Skip and continue — see module comment on non-fatal stance.
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
opts.store.setMeta(META_KEY, String(Date.now()));
|
|
107
|
+
return { skipped: false, written };
|
|
108
|
+
}
|
|
109
|
+
//# sourceMappingURL=r2-structural-migration.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"r2-structural-migration.js","sourceRoot":"","sources":["../../../src/core/secrets/r2-structural-migration.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AAEH,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,IAAI,CAAC;AAG9C,MAAM,QAAQ,GAAG,2BAA2B,CAAC;AAa7C;;;;GAIG;AACH,MAAM,SAAS,GAAiD;IAC9D,EAAE,GAAG,EAAE,eAAe,EAAE,IAAI,EAAE,YAAY,EAAE;IAC5C,EAAE,GAAG,EAAE,WAAW,EAAM,IAAI,EAAE,QAAQ,EAAE;IACxC,EAAE,GAAG,EAAE,eAAe,EAAE,IAAI,EAAE,YAAY,EAAE;CAC7C,CAAC;AAEF;;;;;GAKG;AACH,SAAS,UAAU,CAAC,GAAY,EAAE,IAAY;IAC5C,IAAI,CAAC,GAAG,IAAI,OAAO,GAAG,KAAK,QAAQ;QAAE,OAAO,SAAS,CAAC;IACtD,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAC9B,IAAI,GAAG,GAAQ,GAAG,CAAC;IACnB,KAAK,MAAM,CAAC,IAAI,KAAK,EAAE,CAAC;QACtB,IAAI,GAAG,IAAI,IAAI,IAAI,OAAO,GAAG,KAAK,QAAQ;YAAE,OAAO,SAAS,CAAC;QAC7D,GAAG,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC;IACf,CAAC;IACD,OAAO,OAAO,GAAG,KAAK,QAAQ,IAAI,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,SAAS,CAAC;AACrE,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,mBAAmB,CAAC,IAAsB;IAC9D,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC;QACjC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC;IACxC,CAAC;IAED,kEAAkE;IAClE,sEAAsE;IACtE,sBAAsB;IACtB,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,iBAAiB,CAAC,EAAE,CAAC;QACxC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,QAAQ,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;QACjD,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC;IACzC,CAAC;IAED,IAAI,GAAY,CAAC;IACjB,IAAI,CAAC;QACH,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,CAAC,iBAAiB,EAAE,OAAO,CAAC,CAAC,CAAC;IAClE,CAAC;IAAC,MAAM,CAAC;QACP,gEAAgE;QAChE,gEAAgE;QAChE,8DAA8D;QAC9D,yBAAyB;QACzB,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,QAAQ,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;QACjD,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC;IACzC,CAAC;IAED,MAAM,QAAQ,GAAI,GAA+B,EAAE,SAAS,CAAC;IAC7D,MAAM,OAAO,GAAa,EAAE,CAAC;IAE7B,mEAAmE;IACnE,8DAA8D;IAC9D,iEAAiE;IACjE,8DAA8D;IAC9D,uDAAuD;IACvD,MAAM,KAAK,GAAG,EAAE,IAAI,EAAE,QAAiB,EAAE,QAAQ,EAAE,yBAAyB,EAAE,CAAC;IAC/E,KAAK,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,SAAS,EAAE,CAAC;QACtC,MAAM,KAAK,GAAG,UAAU,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;QACzC,IAAI,CAAC,KAAK;YAAE,SAAS;QACrB,iEAAiE;QACjE,mEAAmE;QACnE,8DAA8D;QAC9D,IAAI,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,SAAS;YAAE,SAAS;QAChD,IAAI,CAAC;YACH,MAAM,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,GAAG,EAAE,KAAK,EAAE,EAAE,KAAK,CAAC,CAAC;YAC5C,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACpB,CAAC;QAAC,MAAM,CAAC;YACP,8DAA8D;QAChE,CAAC;IACH,CAAC;IAED,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,QAAQ,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;IACjD,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC;AACrC,CAAC"}
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Read-flip helpers — Phase 6 of the secrets refactor.
|
|
3
|
+
*
|
|
4
|
+
* Call sites that historically read directly from `~/.studiograph/user.json`
|
|
5
|
+
* / `workspace.json` / `process.env.*` route through this module so the
|
|
6
|
+
* flip is uniform across the codebase.
|
|
7
|
+
*
|
|
8
|
+
* Contract: every helper here returns `undefined` when the resolver
|
|
9
|
+
* returns `unset` (or when the store hasn't been initialized yet —
|
|
10
|
+
* very early boot or test harness without a store). Callers MUST fall
|
|
11
|
+
* back to their pre-existing legacy read in that case. This is the
|
|
12
|
+
* transitional safety net documented in the plan: if the importer
|
|
13
|
+
* hasn't run yet (boot race, mis-provisioned redeploy), the resolver
|
|
14
|
+
* sees empty slots and we don't want to regress to "no value at all".
|
|
15
|
+
*
|
|
16
|
+
* When the resolver returns a value, callers MUST use it and skip the
|
|
17
|
+
* legacy read. The store is the source of truth in production.
|
|
18
|
+
*
|
|
19
|
+
* Why a thin wrapper rather than inlining `getSettingsResolver()?.resolve()`
|
|
20
|
+
* at every call site:
|
|
21
|
+
* 1. Single place to handle the "store not yet initialized" guard.
|
|
22
|
+
* 2. Single place to flip the implementation again in Phase 9 (when
|
|
23
|
+
* legacy fallbacks are removed).
|
|
24
|
+
* 3. Concise call sites: `tryResolve('model.anthropic.api_key')` is
|
|
25
|
+
* shorter than the resolver dance.
|
|
26
|
+
*
|
|
27
|
+
* Historical note: the `STUDIOGRAPH_NEW_STORE` env flag previously
|
|
28
|
+
* gated these helpers (returned undefined when off). The flag was
|
|
29
|
+
* removed once Phase 6 was proven stable in production — the store is
|
|
30
|
+
* now unconditional. The env var can still be set on Railway services
|
|
31
|
+
* for backwards-compat; it is silently ignored.
|
|
32
|
+
*/
|
|
33
|
+
import type { ResolverContext } from './SettingsResolver.js';
|
|
34
|
+
/**
|
|
35
|
+
* Try to resolve a value through the new store. Returns `undefined`
|
|
36
|
+
* when the flag is off OR the resolver returns unset. Callers handle
|
|
37
|
+
* `undefined` by falling back to their legacy reader.
|
|
38
|
+
*
|
|
39
|
+
* For non-secret values, this hits the `settings` table directly via
|
|
40
|
+
* the resolver's read path. The value type is whatever was JSON-stored,
|
|
41
|
+
* cast to T at the boundary.
|
|
42
|
+
*
|
|
43
|
+
* For secret values, this calls `unsafeGetForResolver` through the
|
|
44
|
+
* resolver — same access pattern as the legacy reader, except the
|
|
45
|
+
* value lands from an encrypted SQLite row rather than a 0o600 JSON
|
|
46
|
+
* file. The "unsafe" prefix on the underlying call is a marker for
|
|
47
|
+
* "value crosses the resolver boundary" — UI/API callers must use
|
|
48
|
+
* `describe()` instead and never touch this helper.
|
|
49
|
+
*/
|
|
50
|
+
export declare function tryResolve<T = string>(key: string, ctx?: ResolverContext): T | undefined;
|
|
51
|
+
/**
|
|
52
|
+
* Same shape but also returns the resolution source. Useful for
|
|
53
|
+
* surfaces that want to show a "shadowed by environment" banner in
|
|
54
|
+
* the UI without re-doing the lookup.
|
|
55
|
+
*/
|
|
56
|
+
export declare function tryResolveWithSource<T = string>(key: string, ctx?: ResolverContext): {
|
|
57
|
+
value: T | undefined;
|
|
58
|
+
source: 'env' | 'store' | 'default' | 'unset';
|
|
59
|
+
} | undefined;
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Read-flip helpers — Phase 6 of the secrets refactor.
|
|
3
|
+
*
|
|
4
|
+
* Call sites that historically read directly from `~/.studiograph/user.json`
|
|
5
|
+
* / `workspace.json` / `process.env.*` route through this module so the
|
|
6
|
+
* flip is uniform across the codebase.
|
|
7
|
+
*
|
|
8
|
+
* Contract: every helper here returns `undefined` when the resolver
|
|
9
|
+
* returns `unset` (or when the store hasn't been initialized yet —
|
|
10
|
+
* very early boot or test harness without a store). Callers MUST fall
|
|
11
|
+
* back to their pre-existing legacy read in that case. This is the
|
|
12
|
+
* transitional safety net documented in the plan: if the importer
|
|
13
|
+
* hasn't run yet (boot race, mis-provisioned redeploy), the resolver
|
|
14
|
+
* sees empty slots and we don't want to regress to "no value at all".
|
|
15
|
+
*
|
|
16
|
+
* When the resolver returns a value, callers MUST use it and skip the
|
|
17
|
+
* legacy read. The store is the source of truth in production.
|
|
18
|
+
*
|
|
19
|
+
* Why a thin wrapper rather than inlining `getSettingsResolver()?.resolve()`
|
|
20
|
+
* at every call site:
|
|
21
|
+
* 1. Single place to handle the "store not yet initialized" guard.
|
|
22
|
+
* 2. Single place to flip the implementation again in Phase 9 (when
|
|
23
|
+
* legacy fallbacks are removed).
|
|
24
|
+
* 3. Concise call sites: `tryResolve('model.anthropic.api_key')` is
|
|
25
|
+
* shorter than the resolver dance.
|
|
26
|
+
*
|
|
27
|
+
* Historical note: the `STUDIOGRAPH_NEW_STORE` env flag previously
|
|
28
|
+
* gated these helpers (returned undefined when off). The flag was
|
|
29
|
+
* removed once Phase 6 was proven stable in production — the store is
|
|
30
|
+
* now unconditional. The env var can still be set on Railway services
|
|
31
|
+
* for backwards-compat; it is silently ignored.
|
|
32
|
+
*/
|
|
33
|
+
import { getSettingsResolver, hasSecretStore } from './index.js';
|
|
34
|
+
/**
|
|
35
|
+
* Try to resolve a value through the new store. Returns `undefined`
|
|
36
|
+
* when the flag is off OR the resolver returns unset. Callers handle
|
|
37
|
+
* `undefined` by falling back to their legacy reader.
|
|
38
|
+
*
|
|
39
|
+
* For non-secret values, this hits the `settings` table directly via
|
|
40
|
+
* the resolver's read path. The value type is whatever was JSON-stored,
|
|
41
|
+
* cast to T at the boundary.
|
|
42
|
+
*
|
|
43
|
+
* For secret values, this calls `unsafeGetForResolver` through the
|
|
44
|
+
* resolver — same access pattern as the legacy reader, except the
|
|
45
|
+
* value lands from an encrypted SQLite row rather than a 0o600 JSON
|
|
46
|
+
* file. The "unsafe" prefix on the underlying call is a marker for
|
|
47
|
+
* "value crosses the resolver boundary" — UI/API callers must use
|
|
48
|
+
* `describe()` instead and never touch this helper.
|
|
49
|
+
*/
|
|
50
|
+
export function tryResolve(key, ctx = {}) {
|
|
51
|
+
if (!hasSecretStore())
|
|
52
|
+
return undefined;
|
|
53
|
+
const resolver = getSettingsResolver();
|
|
54
|
+
if (!resolver)
|
|
55
|
+
return undefined;
|
|
56
|
+
try {
|
|
57
|
+
return resolver.resolve(key, ctx);
|
|
58
|
+
}
|
|
59
|
+
catch {
|
|
60
|
+
// Unknown key — registry didn't include it. Treat as "no value"
|
|
61
|
+
// and let the caller fall through. The resolver only throws when
|
|
62
|
+
// the registry lookup fails; that means the call site is passing
|
|
63
|
+
// a key name that isn't registered, which is a programmer error
|
|
64
|
+
// worth surfacing — but not by crashing a runtime read path.
|
|
65
|
+
return undefined;
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
/**
|
|
69
|
+
* Same shape but also returns the resolution source. Useful for
|
|
70
|
+
* surfaces that want to show a "shadowed by environment" banner in
|
|
71
|
+
* the UI without re-doing the lookup.
|
|
72
|
+
*/
|
|
73
|
+
export function tryResolveWithSource(key, ctx = {}) {
|
|
74
|
+
if (!hasSecretStore())
|
|
75
|
+
return undefined;
|
|
76
|
+
const resolver = getSettingsResolver();
|
|
77
|
+
if (!resolver)
|
|
78
|
+
return undefined;
|
|
79
|
+
try {
|
|
80
|
+
const r = resolver.resolveWithSource(key, ctx);
|
|
81
|
+
return { value: r.value, source: r.source };
|
|
82
|
+
}
|
|
83
|
+
catch {
|
|
84
|
+
return undefined;
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
//# sourceMappingURL=read-flip.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"read-flip.js","sourceRoot":"","sources":["../../../src/core/secrets/read-flip.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG;AAEH,OAAO,EAAE,mBAAmB,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAGjE;;;;;;;;;;;;;;;GAeG;AACH,MAAM,UAAU,UAAU,CACxB,GAAW,EACX,MAAuB,EAAE;IAEzB,IAAI,CAAC,cAAc,EAAE;QAAE,OAAO,SAAS,CAAC;IACxC,MAAM,QAAQ,GAAG,mBAAmB,EAAE,CAAC;IACvC,IAAI,CAAC,QAAQ;QAAE,OAAO,SAAS,CAAC;IAChC,IAAI,CAAC;QACH,OAAO,QAAQ,CAAC,OAAO,CAAI,GAAG,EAAE,GAAG,CAAC,CAAC;IACvC,CAAC;IAAC,MAAM,CAAC;QACP,gEAAgE;QAChE,iEAAiE;QACjE,iEAAiE;QACjE,gEAAgE;QAChE,6DAA6D;QAC7D,OAAO,SAAS,CAAC;IACnB,CAAC;AACH,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,oBAAoB,CAClC,GAAW,EACX,MAAuB,EAAE;IAEzB,IAAI,CAAC,cAAc,EAAE;QAAE,OAAO,SAAS,CAAC;IACxC,MAAM,QAAQ,GAAG,mBAAmB,EAAE,CAAC;IACvC,IAAI,CAAC,QAAQ;QAAE,OAAO,SAAS,CAAC;IAChC,IAAI,CAAC;QACH,MAAM,CAAC,GAAG,QAAQ,CAAC,iBAAiB,CAAI,GAAG,EAAE,GAAG,CAAC,CAAC;QAClD,OAAO,EAAE,KAAK,EAAE,CAAC,CAAC,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC;IAC9C,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,SAAS,CAAC;IACnB,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,188 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Key Registry — single source of truth for every configurable key.
|
|
3
|
+
*
|
|
4
|
+
* Every consumer (resolver, importer, validator, redactor, audit logger,
|
|
5
|
+
* exporter, test suite) reads from this module. If a `process.env.<KEY>`
|
|
6
|
+
* appears in `src/`, it MUST be either listed under some entry's
|
|
7
|
+
* `envAliases` or covered by `SYSTEM_ALLOWLIST` / `OPERATIONAL_ALLOWLIST`.
|
|
8
|
+
* The registry-completeness test enforces this — orphans fail CI with
|
|
9
|
+
* their names printed.
|
|
10
|
+
*
|
|
11
|
+
* Adding a new env var? Two-step: pick the right classification, add the
|
|
12
|
+
* KeyDef here. The completeness test will keep you honest.
|
|
13
|
+
*/
|
|
14
|
+
import { type ZodType } from 'zod';
|
|
15
|
+
import { type TestResult } from './probes/anthropic.js';
|
|
16
|
+
export type Classification = 'bootstrap' | 'workspace-secret' | 'workspace-setting' | 'user-secret' | 'user-setting';
|
|
17
|
+
export type RedactionMode = 'never' | 'value-only' | 'always';
|
|
18
|
+
export interface KeyDef<T = unknown> {
|
|
19
|
+
/** Canonical name, e.g. `anthropic.api_key`. Lowercase, dot-separated. */
|
|
20
|
+
name: string;
|
|
21
|
+
classification: Classification;
|
|
22
|
+
/** All env-var spellings that should resolve to this key. UPPER_SNAKE_CASE. */
|
|
23
|
+
envAliases: string[];
|
|
24
|
+
default?: T;
|
|
25
|
+
/** zod validator for the parsed value. */
|
|
26
|
+
validate: ZodType<T>;
|
|
27
|
+
redact: RedactionMode;
|
|
28
|
+
/** Included in /api/config/bundle and pushSeed? */
|
|
29
|
+
exportable: boolean;
|
|
30
|
+
testConnection?: (value: T) => Promise<TestResult>;
|
|
31
|
+
rotationHint?: string;
|
|
32
|
+
/**
|
|
33
|
+
* Optional URL where users obtain this credential — e.g. a provider's
|
|
34
|
+
* API-keys page. Surfaced in the UI as a "Get an API key →" link below
|
|
35
|
+
* the field. Only set on credential-bearing keys; plain settings leave
|
|
36
|
+
* this undefined.
|
|
37
|
+
*/
|
|
38
|
+
consoleUrl?: string;
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* System-level env vars provided by the OS or container runtime. Not
|
|
42
|
+
* registry-managed — they do not represent product configuration; we just
|
|
43
|
+
* read them when they happen to be set.
|
|
44
|
+
*/
|
|
45
|
+
export declare const SYSTEM_ALLOWLIST: ReadonlySet<string>;
|
|
46
|
+
/**
|
|
47
|
+
* Operational env vars that toggle runtime behaviour but aren't
|
|
48
|
+
* configurable settings (no UI surface, no persistence, no precedence
|
|
49
|
+
* chain). Not registry-managed.
|
|
50
|
+
*/
|
|
51
|
+
export declare const OPERATIONAL_ALLOWLIST: ReadonlySet<string>;
|
|
52
|
+
/**
|
|
53
|
+
* The canonical registry. Order is informative (matches plan §2 grouping)
|
|
54
|
+
* but every consumer should look up by name.
|
|
55
|
+
*/
|
|
56
|
+
export declare const REGISTRY: ReadonlyArray<KeyDef>;
|
|
57
|
+
/**
|
|
58
|
+
* Look up a registry entry by canonical name.
|
|
59
|
+
*
|
|
60
|
+
* Handles two cases:
|
|
61
|
+
* 1. Exact match on `name` — the common path.
|
|
62
|
+
* 2. Connector pattern match — concrete keys like
|
|
63
|
+
* `connector.linear.auth` resolve to the template entry
|
|
64
|
+
* `connector.<name>.auth`. The template's classification + redaction
|
|
65
|
+
* flags apply to the concrete key.
|
|
66
|
+
*
|
|
67
|
+
* Returns undefined for genuinely unknown keys; callers (importer, store
|
|
68
|
+
* setters) treat this as "not in the registry, reject the write."
|
|
69
|
+
*/
|
|
70
|
+
export declare function getKeyDef(name: string): KeyDef | undefined;
|
|
71
|
+
/**
|
|
72
|
+
* Match a concrete connector key (`connector.<name>.<slot>`) against the
|
|
73
|
+
* template entries in the registry. Returns a synthetic KeyDef carrying
|
|
74
|
+
* the template's classification/redaction/exportable flags but with the
|
|
75
|
+
* concrete `name` so audit and store rows record the actual slot, not
|
|
76
|
+
* the placeholder.
|
|
77
|
+
*/
|
|
78
|
+
export declare function resolveConnectorKeyDef(name: string): KeyDef | undefined;
|
|
79
|
+
/**
|
|
80
|
+
* Reverse lookup: given an env-var spelling, return the registry entry that
|
|
81
|
+
* claims it as an alias. Returns `undefined` for unregistered names — the
|
|
82
|
+
* caller should fall back to the allowlists.
|
|
83
|
+
*/
|
|
84
|
+
export declare function getKeyDefByEnvAlias(envName: string): KeyDef | undefined;
|
|
85
|
+
/**
|
|
86
|
+
* Set of every env-var spelling claimed by the registry. Used by tests and
|
|
87
|
+
* by the resolver to decide whether an env-var is "ours" vs ambient.
|
|
88
|
+
*/
|
|
89
|
+
export declare function allRegisteredEnvAliases(): ReadonlySet<string>;
|
|
90
|
+
/**
|
|
91
|
+
* Per-provider recommended model IDs.
|
|
92
|
+
*
|
|
93
|
+
* Surfaced via the `/api/settings/schema` response on the `model.id`
|
|
94
|
+
* entry so the ProvidersPanel combobox can render a non-blocking
|
|
95
|
+
* "Recommended" group. The list is intentionally short (3–4 per
|
|
96
|
+
* provider) — power users can always type a preview-tagged value
|
|
97
|
+
* directly; the combobox never blocks freeform input.
|
|
98
|
+
*
|
|
99
|
+
* Provider keys must align 1:1 with the `model.provider` enum values
|
|
100
|
+
* — there's a registry-completeness test that guards this. Seed
|
|
101
|
+
* values below are best-effort and SHOULD BE USER-VERIFIED; the IDs
|
|
102
|
+
* shift fast and stale entries here just degrade the dropdown UX
|
|
103
|
+
* without breaking anything (free typing still works).
|
|
104
|
+
*/
|
|
105
|
+
export declare const RECOMMENDED_MODELS: Record<string, readonly string[]>;
|
|
106
|
+
/**
|
|
107
|
+
* UI-renderable shape describing what kind of value a key accepts. Drives
|
|
108
|
+
* dropdowns, toggles, and text inputs in the settings panels — single
|
|
109
|
+
* source of truth, no hardcoded option lists in Svelte components.
|
|
110
|
+
*
|
|
111
|
+
* `enum` exposes the discrete set of allowed values (e.g. model.provider).
|
|
112
|
+
* `boolean` flags toggle inputs. Anything else (plain string, URL, regex)
|
|
113
|
+
* returns `undefined`; the UI defaults to a freeform text input.
|
|
114
|
+
*/
|
|
115
|
+
export type KeyConstraint = {
|
|
116
|
+
type: 'enum';
|
|
117
|
+
values: readonly string[];
|
|
118
|
+
} | {
|
|
119
|
+
type: 'boolean';
|
|
120
|
+
};
|
|
121
|
+
/**
|
|
122
|
+
* Introspect a registered key's zod validator to recover what kind of
|
|
123
|
+
* value it accepts. Walks ZodOptional/ZodNullable/ZodDefault wrappers to
|
|
124
|
+
* the inner type. Returns `undefined` for unknown keys and for plain
|
|
125
|
+
* string-ish schemas — the UI treats absence-of-constraint as "render a
|
|
126
|
+
* text input."
|
|
127
|
+
*
|
|
128
|
+
* Implementation note: zod doesn't expose a stable type-introspection
|
|
129
|
+
* API across versions. We peek into `_def` and check `typeName` /
|
|
130
|
+
* `entries`. Wrap in try/catch and degrade to undefined if the shape
|
|
131
|
+
* changes upstream — losing a dropdown is preferable to crashing the
|
|
132
|
+
* settings panel.
|
|
133
|
+
*/
|
|
134
|
+
export declare function getKeyConstraint(name: string): KeyConstraint | undefined;
|
|
135
|
+
/**
|
|
136
|
+
* Metadata describing a registered workspace-setting key for UI
|
|
137
|
+
* consumption. Mirrors the shape the settings panel needs: classification
|
|
138
|
+
* (so the UI knows whether to render a SecretInput vs a plain Input),
|
|
139
|
+
* env aliases (for the "shadowed by env" banner), default value, and
|
|
140
|
+
* a UI-renderable constraint.
|
|
141
|
+
*
|
|
142
|
+
* `value` is intentionally NOT included here — that's a runtime lookup
|
|
143
|
+
* against the resolver. Schema is the static shape; value comes from
|
|
144
|
+
* `GET /api/settings`.
|
|
145
|
+
*/
|
|
146
|
+
/**
|
|
147
|
+
* Optional per-provider recommendations on a setting entry. Currently
|
|
148
|
+
* only `model.id` carries this — the ProvidersPanel reads it off the
|
|
149
|
+
* schema to populate the combobox's "Recommended" group, keyed by the
|
|
150
|
+
* currently-selected provider. Other entries omit the field entirely.
|
|
151
|
+
*/
|
|
152
|
+
export interface SettingRecommendations {
|
|
153
|
+
/** Map of provider name → ordered list of recommended values. */
|
|
154
|
+
byProvider: Record<string, readonly string[]>;
|
|
155
|
+
}
|
|
156
|
+
export interface SettingSchemaEntry {
|
|
157
|
+
key: string;
|
|
158
|
+
classification: Classification;
|
|
159
|
+
redact: RedactionMode;
|
|
160
|
+
env_aliases: readonly string[];
|
|
161
|
+
default?: unknown;
|
|
162
|
+
constraint?: KeyConstraint;
|
|
163
|
+
/**
|
|
164
|
+
* Optional recommendations payload. Only present on `model.id` today
|
|
165
|
+
* — entries without it render as plain text inputs.
|
|
166
|
+
*/
|
|
167
|
+
recommendations?: SettingRecommendations;
|
|
168
|
+
}
|
|
169
|
+
/**
|
|
170
|
+
* Enumerate every registered workspace-setting (non-secret) entry for
|
|
171
|
+
* the settings panels. Workspace-secrets are excluded — they go through
|
|
172
|
+
* `GET /api/secrets`, which never returns plaintext values.
|
|
173
|
+
*
|
|
174
|
+
* Connector template entries (`connector.<name>.*`) are excluded too —
|
|
175
|
+
* they're matched dynamically at resolution time, not enumerated in the
|
|
176
|
+
* UI as fixed slots.
|
|
177
|
+
*/
|
|
178
|
+
export declare function listWorkspaceSettingsSchema(): SettingSchemaEntry[];
|
|
179
|
+
/**
|
|
180
|
+
* Flat map of canonical key → console URL for every registered key that
|
|
181
|
+
* carries one. The settings UI uses this to render a "Get an API key →"
|
|
182
|
+
* link below credential fields. The map covers BOTH workspace-secret
|
|
183
|
+
* entries (API keys, R2 credentials) and any workspace-setting that
|
|
184
|
+
* happens to grow a consoleUrl later — same lookup, single roundtrip.
|
|
185
|
+
*
|
|
186
|
+
* Keys without a registered consoleUrl are simply absent from the map.
|
|
187
|
+
*/
|
|
188
|
+
export declare function getAllConsoleUrls(): Record<string, string>;
|