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,73 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Local-server discovery for the stdio MCP proxy (Increment 1 of the unified
|
|
3
|
+
* multi-peer editing model — see ~/.claude/plans/indexed-stirring-turtle.md).
|
|
4
|
+
*
|
|
5
|
+
* When `studiograph serve` is running it writes `.studiograph/server.json`
|
|
6
|
+
* describing how to reach it ({ url, pid, workspacePath, serverId }). The stdio
|
|
7
|
+
* proxy (`stdio-proxy.ts`) reads that file and decides, per tool call, whether
|
|
8
|
+
* to forward to the live HTTP server (so writes go through BodyWriteCoordinator
|
|
9
|
+
* and merge into any open editor) or to fall back to an in-process server (safe:
|
|
10
|
+
* no server ⇒ no live editor to clobber).
|
|
11
|
+
*
|
|
12
|
+
* SECURITY (Codex-hardened):
|
|
13
|
+
* - The Bearer token is only ever sent to a LOOPBACK url. A non-loopback url in
|
|
14
|
+
* server.json is treated as "no server" — never trusted, never sent a token.
|
|
15
|
+
* - A 401/403 from the probe means "server present, auth rejected" → FAIL LOUD.
|
|
16
|
+
* We must NOT fall back to a local in-process write in that case, because a
|
|
17
|
+
* live editor may be open; a silent local write is the exact data-loss path
|
|
18
|
+
* this increment removes.
|
|
19
|
+
* - Identity is the serverId echo + workspacePath match, NOT team_name.
|
|
20
|
+
*/
|
|
21
|
+
export interface ServerInfo {
|
|
22
|
+
/** Loopback HTTP base url, e.g. "http://127.0.0.1:3000" (no trailing slash). */
|
|
23
|
+
url: string;
|
|
24
|
+
/** PID of the serve process — primary staleness guard. */
|
|
25
|
+
pid: number;
|
|
26
|
+
/** Absolute workspace path the server is bound to. */
|
|
27
|
+
workspacePath: string;
|
|
28
|
+
/** Random per-boot id echoed by GET /api/server-info. */
|
|
29
|
+
serverId: string;
|
|
30
|
+
}
|
|
31
|
+
export type ProbeResult = {
|
|
32
|
+
mode: 'remote';
|
|
33
|
+
url: string;
|
|
34
|
+
serverId: string;
|
|
35
|
+
} | {
|
|
36
|
+
mode: 'local';
|
|
37
|
+
} | {
|
|
38
|
+
mode: 'fail';
|
|
39
|
+
reason: string;
|
|
40
|
+
};
|
|
41
|
+
/** Path to the discovery file for a workspace. */
|
|
42
|
+
export declare function serverInfoPath(workspacePath: string): string;
|
|
43
|
+
/**
|
|
44
|
+
* Atomically write the discovery file (tmp + rename, like SessionManager's
|
|
45
|
+
* pending-commits persistence) and make sure `server.json` is gitignored in
|
|
46
|
+
* `.studiograph/.gitignore` (covers workspaces created before this template
|
|
47
|
+
* change). Best-effort on the gitignore — a failure there never blocks serve.
|
|
48
|
+
*/
|
|
49
|
+
export declare function writeServerInfo(workspacePath: string, info: ServerInfo): void;
|
|
50
|
+
/** Best-effort removal of the discovery file (called after server.close()). */
|
|
51
|
+
export declare function deleteServerInfo(workspacePath: string): void;
|
|
52
|
+
/** Read + parse the discovery file. Returns null on missing or malformed JSON. */
|
|
53
|
+
export declare function readServerInfo(workspacePath: string): ServerInfo | null;
|
|
54
|
+
/** Append `entry` to a `.gitignore` file if not already present (one per line). */
|
|
55
|
+
export declare function ensureGitignoreEntry(gitignorePath: string, entry: string): void;
|
|
56
|
+
/** True only for loopback hosts. The Bearer token is never sent elsewhere. */
|
|
57
|
+
export declare function isLoopbackUrl(url: string): boolean;
|
|
58
|
+
/** True if a process with `pid` exists (signal 0 probe). */
|
|
59
|
+
export declare function isPidAlive(pid: number): boolean;
|
|
60
|
+
export interface ProbeDeps {
|
|
61
|
+
fetchFn?: typeof fetch;
|
|
62
|
+
isPidAliveFn?: (pid: number) => boolean;
|
|
63
|
+
readInfoFn?: (workspacePath: string) => ServerInfo | null;
|
|
64
|
+
}
|
|
65
|
+
/**
|
|
66
|
+
* Decide whether the stdio proxy should forward to the live local server.
|
|
67
|
+
*
|
|
68
|
+
* Returns `remote` only when every identity check passes; `fail` only when the
|
|
69
|
+
* server is reachable but rejects our token (401/403); `local` for every other
|
|
70
|
+
* case (no file, dead pid, non-loopback, wrong workspace, connection refused,
|
|
71
|
+
* or a different server answering on the port).
|
|
72
|
+
*/
|
|
73
|
+
export declare function probeServer(workspacePath: string, token: string, deps?: ProbeDeps): Promise<ProbeResult>;
|
|
@@ -0,0 +1,164 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Local-server discovery for the stdio MCP proxy (Increment 1 of the unified
|
|
3
|
+
* multi-peer editing model — see ~/.claude/plans/indexed-stirring-turtle.md).
|
|
4
|
+
*
|
|
5
|
+
* When `studiograph serve` is running it writes `.studiograph/server.json`
|
|
6
|
+
* describing how to reach it ({ url, pid, workspacePath, serverId }). The stdio
|
|
7
|
+
* proxy (`stdio-proxy.ts`) reads that file and decides, per tool call, whether
|
|
8
|
+
* to forward to the live HTTP server (so writes go through BodyWriteCoordinator
|
|
9
|
+
* and merge into any open editor) or to fall back to an in-process server (safe:
|
|
10
|
+
* no server ⇒ no live editor to clobber).
|
|
11
|
+
*
|
|
12
|
+
* SECURITY (Codex-hardened):
|
|
13
|
+
* - The Bearer token is only ever sent to a LOOPBACK url. A non-loopback url in
|
|
14
|
+
* server.json is treated as "no server" — never trusted, never sent a token.
|
|
15
|
+
* - A 401/403 from the probe means "server present, auth rejected" → FAIL LOUD.
|
|
16
|
+
* We must NOT fall back to a local in-process write in that case, because a
|
|
17
|
+
* live editor may be open; a silent local write is the exact data-loss path
|
|
18
|
+
* this increment removes.
|
|
19
|
+
* - Identity is the serverId echo + workspacePath match, NOT team_name.
|
|
20
|
+
*/
|
|
21
|
+
import { existsSync, readFileSync, renameSync, unlinkSync, writeFileSync } from 'fs';
|
|
22
|
+
import { join } from 'path';
|
|
23
|
+
/** Path to the discovery file for a workspace. */
|
|
24
|
+
export function serverInfoPath(workspacePath) {
|
|
25
|
+
return join(workspacePath, '.studiograph', 'server.json');
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Atomically write the discovery file (tmp + rename, like SessionManager's
|
|
29
|
+
* pending-commits persistence) and make sure `server.json` is gitignored in
|
|
30
|
+
* `.studiograph/.gitignore` (covers workspaces created before this template
|
|
31
|
+
* change). Best-effort on the gitignore — a failure there never blocks serve.
|
|
32
|
+
*/
|
|
33
|
+
export function writeServerInfo(workspacePath, info) {
|
|
34
|
+
const path = serverInfoPath(workspacePath);
|
|
35
|
+
const tmp = `${path}.tmp`;
|
|
36
|
+
writeFileSync(tmp, JSON.stringify(info, null, 2), 'utf-8');
|
|
37
|
+
renameSync(tmp, path);
|
|
38
|
+
try {
|
|
39
|
+
ensureGitignoreEntry(join(workspacePath, '.studiograph', '.gitignore'), 'server.json');
|
|
40
|
+
}
|
|
41
|
+
catch {
|
|
42
|
+
/* non-fatal — server.json is ephemeral; worst case it shows as untracked */
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
/** Best-effort removal of the discovery file (called after server.close()). */
|
|
46
|
+
export function deleteServerInfo(workspacePath) {
|
|
47
|
+
try {
|
|
48
|
+
unlinkSync(serverInfoPath(workspacePath));
|
|
49
|
+
}
|
|
50
|
+
catch {
|
|
51
|
+
/* already gone / never written */
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
/** Read + parse the discovery file. Returns null on missing or malformed JSON. */
|
|
55
|
+
export function readServerInfo(workspacePath) {
|
|
56
|
+
const path = serverInfoPath(workspacePath);
|
|
57
|
+
if (!existsSync(path))
|
|
58
|
+
return null;
|
|
59
|
+
try {
|
|
60
|
+
const raw = JSON.parse(readFileSync(path, 'utf-8'));
|
|
61
|
+
if (raw &&
|
|
62
|
+
typeof raw.url === 'string' &&
|
|
63
|
+
typeof raw.pid === 'number' &&
|
|
64
|
+
typeof raw.workspacePath === 'string' &&
|
|
65
|
+
typeof raw.serverId === 'string') {
|
|
66
|
+
return raw;
|
|
67
|
+
}
|
|
68
|
+
return null;
|
|
69
|
+
}
|
|
70
|
+
catch {
|
|
71
|
+
return null;
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
/** Append `entry` to a `.gitignore` file if not already present (one per line). */
|
|
75
|
+
export function ensureGitignoreEntry(gitignorePath, entry) {
|
|
76
|
+
if (existsSync(gitignorePath)) {
|
|
77
|
+
const content = readFileSync(gitignorePath, 'utf-8');
|
|
78
|
+
if (content.split('\n').some(line => line.trim() === entry))
|
|
79
|
+
return;
|
|
80
|
+
const sep = content.endsWith('\n') ? '' : '\n';
|
|
81
|
+
writeFileSync(gitignorePath, `${content}${sep}${entry}\n`);
|
|
82
|
+
}
|
|
83
|
+
else {
|
|
84
|
+
writeFileSync(gitignorePath, `${entry}\n`);
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
/** True only for loopback hosts. The Bearer token is never sent elsewhere. */
|
|
88
|
+
export function isLoopbackUrl(url) {
|
|
89
|
+
let host;
|
|
90
|
+
try {
|
|
91
|
+
host = new URL(url).hostname;
|
|
92
|
+
}
|
|
93
|
+
catch {
|
|
94
|
+
return false;
|
|
95
|
+
}
|
|
96
|
+
// Node keeps the brackets on IPv6 hostnames ("[::1]") — strip them.
|
|
97
|
+
if (host.startsWith('[') && host.endsWith(']'))
|
|
98
|
+
host = host.slice(1, -1);
|
|
99
|
+
return host === '127.0.0.1' || host === 'localhost' || host === '::1';
|
|
100
|
+
}
|
|
101
|
+
/** True if a process with `pid` exists (signal 0 probe). */
|
|
102
|
+
export function isPidAlive(pid) {
|
|
103
|
+
if (!Number.isInteger(pid) || pid <= 0)
|
|
104
|
+
return false;
|
|
105
|
+
try {
|
|
106
|
+
process.kill(pid, 0);
|
|
107
|
+
return true;
|
|
108
|
+
}
|
|
109
|
+
catch (err) {
|
|
110
|
+
// EPERM = process exists but we can't signal it → still alive.
|
|
111
|
+
return err?.code === 'EPERM';
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
/**
|
|
115
|
+
* Decide whether the stdio proxy should forward to the live local server.
|
|
116
|
+
*
|
|
117
|
+
* Returns `remote` only when every identity check passes; `fail` only when the
|
|
118
|
+
* server is reachable but rejects our token (401/403); `local` for every other
|
|
119
|
+
* case (no file, dead pid, non-loopback, wrong workspace, connection refused,
|
|
120
|
+
* or a different server answering on the port).
|
|
121
|
+
*/
|
|
122
|
+
export async function probeServer(workspacePath, token, deps = {}) {
|
|
123
|
+
const fetchFn = deps.fetchFn ?? fetch;
|
|
124
|
+
const pidAlive = deps.isPidAliveFn ?? isPidAlive;
|
|
125
|
+
const readInfo = deps.readInfoFn ?? readServerInfo;
|
|
126
|
+
const info = readInfo(workspacePath);
|
|
127
|
+
if (!info)
|
|
128
|
+
return { mode: 'local' };
|
|
129
|
+
if (!pidAlive(info.pid))
|
|
130
|
+
return { mode: 'local' };
|
|
131
|
+
if (!isLoopbackUrl(info.url))
|
|
132
|
+
return { mode: 'local' };
|
|
133
|
+
if (info.workspacePath !== workspacePath)
|
|
134
|
+
return { mode: 'local' };
|
|
135
|
+
let res;
|
|
136
|
+
try {
|
|
137
|
+
res = await fetchFn(`${info.url}/api/server-info`, {
|
|
138
|
+
headers: { Authorization: `Bearer ${token}` },
|
|
139
|
+
});
|
|
140
|
+
}
|
|
141
|
+
catch {
|
|
142
|
+
// ECONNREFUSED / DNS / abort → the pid is alive but isn't this server
|
|
143
|
+
// (pid reuse, or a server mid-shutdown). Treat as no server.
|
|
144
|
+
return { mode: 'local' };
|
|
145
|
+
}
|
|
146
|
+
if (res.status === 401 || res.status === 403) {
|
|
147
|
+
return { mode: 'fail', reason: `server rejected token (HTTP ${res.status})` };
|
|
148
|
+
}
|
|
149
|
+
if (!res.ok)
|
|
150
|
+
return { mode: 'local' };
|
|
151
|
+
let body;
|
|
152
|
+
try {
|
|
153
|
+
body = await res.json();
|
|
154
|
+
}
|
|
155
|
+
catch {
|
|
156
|
+
return { mode: 'local' };
|
|
157
|
+
}
|
|
158
|
+
if (body?.serverId !== info.serverId || body?.workspacePath !== workspacePath) {
|
|
159
|
+
// A different studiograph instance is answering on that port.
|
|
160
|
+
return { mode: 'local' };
|
|
161
|
+
}
|
|
162
|
+
return { mode: 'remote', url: info.url, serverId: info.serverId };
|
|
163
|
+
}
|
|
164
|
+
//# sourceMappingURL=server-discovery.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"server-discovery.js","sourceRoot":"","sources":["../../src/mcp/server-discovery.ts"],"names":[],"mappings":"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"}
|
package/dist/mcp/server.d.ts
CHANGED
|
@@ -1,11 +1,32 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Studiograph MCP server
|
|
2
|
+
* Studiograph MCP server (stdio transport)
|
|
3
3
|
*
|
|
4
4
|
* Creates a McpServer instance, registers all tools, and connects via stdio
|
|
5
5
|
* transport for integration with Claude Desktop and other MCP clients.
|
|
6
6
|
*
|
|
7
|
-
*
|
|
7
|
+
* Identity: requires STUDIOGRAPH_MCP_TOKEN to be set to a per-user API token
|
|
8
|
+
* (or a JWT). The token is resolved against the workspace's AuthService to
|
|
9
|
+
* produce the caller identity used by every tool's access control check.
|
|
10
|
+
* Fails closed — if the token is missing or invalid the process exits.
|
|
11
|
+
*
|
|
12
|
+
* NOTE: All logging uses log.error() — stdout is reserved for the
|
|
8
13
|
* JSON-RPC protocol messages and must not be written to directly.
|
|
14
|
+
* log.error writes to stderr (via console.error under the hood), which
|
|
15
|
+
* preserves the stdio-transport invariant.
|
|
9
16
|
*/
|
|
17
|
+
import { Client } from '@modelcontextprotocol/sdk/client/index.js';
|
|
10
18
|
import { WorkspaceManager } from '../core/workspace-manager.js';
|
|
11
|
-
|
|
19
|
+
import { AuthService, type AuthUser } from '../services/auth-service.js';
|
|
20
|
+
export declare function startMcpServer(workspaceManager: WorkspaceManager, authService: AuthService): Promise<void>;
|
|
21
|
+
export declare function resolveStdioUser(authService: AuthService): AuthUser | null;
|
|
22
|
+
/**
|
|
23
|
+
* Build an in-process MCP server (full tool surface, same as stdio/HTTP) and
|
|
24
|
+
* return a connected `Client` wired to it over an in-memory transport. Used by
|
|
25
|
+
* the stdio proxy as the LOCAL fallback when no live HTTP server is reachable —
|
|
26
|
+
* in that case there is no open editor, so a direct write is safe.
|
|
27
|
+
*
|
|
28
|
+
* Identity is the resolved per-user `STUDIOGRAPH_MCP_TOKEN`, threaded through
|
|
29
|
+
* `registerTools` exactly as the real stdio server does, so access control is
|
|
30
|
+
* identical on both upstreams.
|
|
31
|
+
*/
|
|
32
|
+
export declare function createInProcessMcpClient(workspaceManager: WorkspaceManager, authService: AuthService, user: AuthUser): Promise<Client>;
|
package/dist/mcp/server.js
CHANGED
|
@@ -1,28 +1,71 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Studiograph MCP server
|
|
2
|
+
* Studiograph MCP server (stdio transport)
|
|
3
3
|
*
|
|
4
4
|
* Creates a McpServer instance, registers all tools, and connects via stdio
|
|
5
5
|
* transport for integration with Claude Desktop and other MCP clients.
|
|
6
6
|
*
|
|
7
|
-
*
|
|
7
|
+
* Identity: requires STUDIOGRAPH_MCP_TOKEN to be set to a per-user API token
|
|
8
|
+
* (or a JWT). The token is resolved against the workspace's AuthService to
|
|
9
|
+
* produce the caller identity used by every tool's access control check.
|
|
10
|
+
* Fails closed — if the token is missing or invalid the process exits.
|
|
11
|
+
*
|
|
12
|
+
* NOTE: All logging uses log.error() — stdout is reserved for the
|
|
8
13
|
* JSON-RPC protocol messages and must not be written to directly.
|
|
14
|
+
* log.error writes to stderr (via console.error under the hood), which
|
|
15
|
+
* preserves the stdio-transport invariant.
|
|
9
16
|
*/
|
|
10
17
|
import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
|
|
11
18
|
import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js';
|
|
12
|
-
import {
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
+
import { Client } from '@modelcontextprotocol/sdk/client/index.js';
|
|
20
|
+
import { InMemoryTransport } from '@modelcontextprotocol/sdk/inMemory.js';
|
|
21
|
+
import { registerTools, MCP_SERVER_INFO, MCP_INSTRUCTIONS } from './tools.js';
|
|
22
|
+
import { log } from '../utils/log.js';
|
|
23
|
+
export async function startMcpServer(workspaceManager, authService) {
|
|
24
|
+
const user = resolveStdioUser(authService);
|
|
25
|
+
if (!user) {
|
|
26
|
+
process.stderr.write('Studiograph MCP: STUDIOGRAPH_MCP_TOKEN is required.\n' +
|
|
27
|
+
'Generate a token with:\n' +
|
|
28
|
+
' curl -X POST http://<host>/api/auth/tokens \\\n' +
|
|
29
|
+
' -H "Content-Type: application/json" \\\n' +
|
|
30
|
+
' -b __sg_token=<your-jwt> \\\n' +
|
|
31
|
+
' -d \'{"name":"claude-desktop"}\'\n' +
|
|
32
|
+
'Then set STUDIOGRAPH_MCP_TOKEN=<token> in your Claude Desktop MCP config env.\n');
|
|
33
|
+
process.exit(1);
|
|
34
|
+
}
|
|
35
|
+
const server = new McpServer(MCP_SERVER_INFO, { instructions: MCP_INSTRUCTIONS });
|
|
36
|
+
registerTools(server, workspaceManager, authService, { user });
|
|
19
37
|
const transport = new StdioServerTransport();
|
|
20
38
|
await server.connect(transport);
|
|
21
|
-
|
|
39
|
+
log.error(`Studiograph MCP server ready (user: ${user.email})`);
|
|
22
40
|
// Keep the process alive — the transport closes when the client disconnects
|
|
23
41
|
process.on('SIGINT', async () => {
|
|
24
42
|
await server.close();
|
|
25
43
|
process.exit(0);
|
|
26
44
|
});
|
|
27
45
|
}
|
|
46
|
+
export function resolveStdioUser(authService) {
|
|
47
|
+
const token = process.env.STUDIOGRAPH_MCP_TOKEN?.trim();
|
|
48
|
+
if (!token)
|
|
49
|
+
return null;
|
|
50
|
+
return authService.verifyApiToken(token) ?? authService.verifyToken(token);
|
|
51
|
+
}
|
|
52
|
+
/**
|
|
53
|
+
* Build an in-process MCP server (full tool surface, same as stdio/HTTP) and
|
|
54
|
+
* return a connected `Client` wired to it over an in-memory transport. Used by
|
|
55
|
+
* the stdio proxy as the LOCAL fallback when no live HTTP server is reachable —
|
|
56
|
+
* in that case there is no open editor, so a direct write is safe.
|
|
57
|
+
*
|
|
58
|
+
* Identity is the resolved per-user `STUDIOGRAPH_MCP_TOKEN`, threaded through
|
|
59
|
+
* `registerTools` exactly as the real stdio server does, so access control is
|
|
60
|
+
* identical on both upstreams.
|
|
61
|
+
*/
|
|
62
|
+
export async function createInProcessMcpClient(workspaceManager, authService, user) {
|
|
63
|
+
const server = new McpServer(MCP_SERVER_INFO, { instructions: MCP_INSTRUCTIONS });
|
|
64
|
+
registerTools(server, workspaceManager, authService, { user });
|
|
65
|
+
const [clientTransport, serverTransport] = InMemoryTransport.createLinkedPair();
|
|
66
|
+
await server.connect(serverTransport);
|
|
67
|
+
const client = new Client({ name: 'studiograph-stdio-proxy-local', version: '1.0.0' });
|
|
68
|
+
await client.connect(clientTransport);
|
|
69
|
+
return client;
|
|
70
|
+
}
|
|
28
71
|
//# sourceMappingURL=server.js.map
|
package/dist/mcp/server.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server.js","sourceRoot":"","sources":["../../src/mcp/server.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"server.js","sourceRoot":"","sources":["../../src/mcp/server.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACpE,OAAO,EAAE,oBAAoB,EAAE,MAAM,2CAA2C,CAAC;AACjF,OAAO,EAAE,MAAM,EAAE,MAAM,2CAA2C,CAAC;AACnE,OAAO,EAAE,iBAAiB,EAAE,MAAM,uCAAuC,CAAC;AAG1E,OAAO,EAAE,aAAa,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAC9E,OAAO,EAAE,GAAG,EAAE,MAAM,iBAAiB,CAAC;AAEtC,MAAM,CAAC,KAAK,UAAU,cAAc,CAClC,gBAAkC,EAClC,WAAwB;IAExB,MAAM,IAAI,GAAG,gBAAgB,CAAC,WAAW,CAAC,CAAC;IAC3C,IAAI,CAAC,IAAI,EAAE,CAAC;QACV,OAAO,CAAC,MAAM,CAAC,KAAK,CAClB,uDAAuD;YACvD,0BAA0B;YAC1B,mDAAmD;YACnD,iDAAiD;YACjD,sCAAsC;YACtC,2CAA2C;YAC3C,iFAAiF,CAClF,CAAC;QACF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,MAAM,MAAM,GAAG,IAAI,SAAS,CAAC,eAAe,EAAE,EAAE,YAAY,EAAE,gBAAgB,EAAE,CAAC,CAAC;IAElF,aAAa,CAAC,MAAM,EAAE,gBAAgB,EAAE,WAAW,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC;IAE/D,MAAM,SAAS,GAAG,IAAI,oBAAoB,EAAE,CAAC;IAC7C,MAAM,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;IAEhC,GAAG,CAAC,KAAK,CAAC,uCAAuC,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC;IAEhE,4EAA4E;IAC5E,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE,KAAK,IAAI,EAAE;QAC9B,MAAM,MAAM,CAAC,KAAK,EAAE,CAAC;QACrB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC,CAAC,CAAC;AACL,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,WAAwB;IACvD,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,qBAAqB,EAAE,IAAI,EAAE,CAAC;IACxD,IAAI,CAAC,KAAK;QAAE,OAAO,IAAI,CAAC;IACxB,OAAO,WAAW,CAAC,cAAc,CAAC,KAAK,CAAC,IAAI,WAAW,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;AAC7E,CAAC;AAED;;;;;;;;;GASG;AACH,MAAM,CAAC,KAAK,UAAU,wBAAwB,CAC5C,gBAAkC,EAClC,WAAwB,EACxB,IAAc;IAEd,MAAM,MAAM,GAAG,IAAI,SAAS,CAAC,eAAe,EAAE,EAAE,YAAY,EAAE,gBAAgB,EAAE,CAAC,CAAC;IAClF,aAAa,CAAC,MAAM,EAAE,gBAAgB,EAAE,WAAW,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC;IAE/D,MAAM,CAAC,eAAe,EAAE,eAAe,CAAC,GAAG,iBAAiB,CAAC,gBAAgB,EAAE,CAAC;IAChF,MAAM,MAAM,CAAC,OAAO,CAAC,eAAe,CAAC,CAAC;IAEtC,MAAM,MAAM,GAAG,IAAI,MAAM,CAAC,EAAE,IAAI,EAAE,+BAA+B,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,CAAC;IACvF,MAAM,MAAM,CAAC,OAAO,CAAC,eAAe,CAAC,CAAC;IACtC,OAAO,MAAM,CAAC;AAChB,CAAC"}
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* OAuth state signer
|
|
3
|
+
*
|
|
4
|
+
* Signs the `state` parameter on outbound OAuth flows so the server can prove,
|
|
5
|
+
* on callback/claim, that the userId + connector + origin it sees were minted
|
|
6
|
+
* by this instance — not forged by an attacker controlling a callback URL.
|
|
7
|
+
*
|
|
8
|
+
* Without integrity protection on `state`, an attacker who controls a
|
|
9
|
+
* `/api/oauth/callback/:name` or `/api/oauth/claim/:connector` URL can
|
|
10
|
+
* forge `{c, u, o}` to bind their own OAuth tokens against a victim's
|
|
11
|
+
* userId. This module closes that gap.
|
|
12
|
+
*
|
|
13
|
+
* Signing key is derived from the workspace master key via HKDF
|
|
14
|
+
* (info="studiograph-oauth-state-v1") so it's distinct from the AEAD key
|
|
15
|
+
* used for at-rest encryption — a leak of one doesn't compromise the other.
|
|
16
|
+
*
|
|
17
|
+
* The serialized state is a base64url-encoded JSON object:
|
|
18
|
+
* { c, u, o, t, s }
|
|
19
|
+
* where `s` is the base64url HMAC-SHA256 over the canonical message
|
|
20
|
+
* (a JSON array of [c, u, o, t]). The OAuth broker continues to decode
|
|
21
|
+
* `c`, `u`, `o` from this JSON unchanged — adding `t` and `s` is forward-
|
|
22
|
+
* compatible.
|
|
23
|
+
*/
|
|
24
|
+
export interface OAuthStateClaims {
|
|
25
|
+
connectorName: string;
|
|
26
|
+
userId: number;
|
|
27
|
+
origin: string;
|
|
28
|
+
}
|
|
29
|
+
export interface OAuthStateSigner {
|
|
30
|
+
sign(claims: OAuthStateClaims): string;
|
|
31
|
+
verify(state: string, opts?: {
|
|
32
|
+
maxAgeMs?: number;
|
|
33
|
+
}): OAuthStateClaims | null;
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Derive a 32-byte signing key from the workspace master key. The `info`
|
|
37
|
+
* binding ensures this key is domain-separated from the AEAD key used to
|
|
38
|
+
* encrypt secrets at rest.
|
|
39
|
+
*/
|
|
40
|
+
export declare function deriveStateSigningKey(masterKey: Uint8Array): Uint8Array;
|
|
41
|
+
export declare function createOAuthStateSigner(key: Uint8Array): OAuthStateSigner;
|
|
42
|
+
export interface PayloadSigner {
|
|
43
|
+
sign(payload: Record<string, unknown>): string;
|
|
44
|
+
verify(token: string, opts?: {
|
|
45
|
+
maxAgeMs?: number;
|
|
46
|
+
}): Record<string, unknown> | null;
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* Derive the consent signing key from the JWT secret via HKDF. Domain-separated
|
|
50
|
+
* from session JWTs (different mechanism entirely) and from the outbound state
|
|
51
|
+
* signer (different `info`). Keying off the JWT secret — rather than the master
|
|
52
|
+
* key — means the authorization server works on every boot, including
|
|
53
|
+
* non-encrypted/test boots where no master key is wired.
|
|
54
|
+
*/
|
|
55
|
+
export declare function deriveConsentSigningKey(jwtSecret: string): Uint8Array;
|
|
56
|
+
/**
|
|
57
|
+
* Generic HMAC payload signer: serializes `{ p: <payload>, t: <ts> }`, signs
|
|
58
|
+
* the canonical JSON with HMAC-SHA256, and base64url-encodes the blob. `verify`
|
|
59
|
+
* recomputes the HMAC with `timingSafeEqual`, enforces a max age, and rejects
|
|
60
|
+
* future-dated tokens. Returns the payload object on success, null otherwise.
|
|
61
|
+
*/
|
|
62
|
+
export declare function createConsentSigner(key: Uint8Array): PayloadSigner;
|
|
@@ -0,0 +1,205 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* OAuth state signer
|
|
3
|
+
*
|
|
4
|
+
* Signs the `state` parameter on outbound OAuth flows so the server can prove,
|
|
5
|
+
* on callback/claim, that the userId + connector + origin it sees were minted
|
|
6
|
+
* by this instance — not forged by an attacker controlling a callback URL.
|
|
7
|
+
*
|
|
8
|
+
* Without integrity protection on `state`, an attacker who controls a
|
|
9
|
+
* `/api/oauth/callback/:name` or `/api/oauth/claim/:connector` URL can
|
|
10
|
+
* forge `{c, u, o}` to bind their own OAuth tokens against a victim's
|
|
11
|
+
* userId. This module closes that gap.
|
|
12
|
+
*
|
|
13
|
+
* Signing key is derived from the workspace master key via HKDF
|
|
14
|
+
* (info="studiograph-oauth-state-v1") so it's distinct from the AEAD key
|
|
15
|
+
* used for at-rest encryption — a leak of one doesn't compromise the other.
|
|
16
|
+
*
|
|
17
|
+
* The serialized state is a base64url-encoded JSON object:
|
|
18
|
+
* { c, u, o, t, s }
|
|
19
|
+
* where `s` is the base64url HMAC-SHA256 over the canonical message
|
|
20
|
+
* (a JSON array of [c, u, o, t]). The OAuth broker continues to decode
|
|
21
|
+
* `c`, `u`, `o` from this JSON unchanged — adding `t` and `s` is forward-
|
|
22
|
+
* compatible.
|
|
23
|
+
*/
|
|
24
|
+
import { hkdfSync, createHmac, timingSafeEqual } from 'crypto';
|
|
25
|
+
const HKDF_INFO = 'studiograph-oauth-state-v1';
|
|
26
|
+
const HKDF_KEY_LENGTH = 32;
|
|
27
|
+
const DEFAULT_MAX_AGE_MS = 10 * 60 * 1000;
|
|
28
|
+
const FUTURE_SKEW_TOLERANCE_MS = 60_000;
|
|
29
|
+
/**
|
|
30
|
+
* Derive a 32-byte signing key from the workspace master key. The `info`
|
|
31
|
+
* binding ensures this key is domain-separated from the AEAD key used to
|
|
32
|
+
* encrypt secrets at rest.
|
|
33
|
+
*/
|
|
34
|
+
export function deriveStateSigningKey(masterKey) {
|
|
35
|
+
if (masterKey.length !== 32) {
|
|
36
|
+
throw new Error('state-signer: master key must be 32 bytes');
|
|
37
|
+
}
|
|
38
|
+
const ikm = Buffer.from(masterKey);
|
|
39
|
+
// hkdfSync returns ArrayBuffer; wrap in Uint8Array view.
|
|
40
|
+
const derived = hkdfSync('sha256', ikm, Buffer.alloc(0), HKDF_INFO, HKDF_KEY_LENGTH);
|
|
41
|
+
return new Uint8Array(derived);
|
|
42
|
+
}
|
|
43
|
+
export function createOAuthStateSigner(key) {
|
|
44
|
+
if (key.length !== HKDF_KEY_LENGTH) {
|
|
45
|
+
throw new Error(`state-signer: signing key must be ${HKDF_KEY_LENGTH} bytes`);
|
|
46
|
+
}
|
|
47
|
+
const keyBuf = Buffer.from(key);
|
|
48
|
+
return {
|
|
49
|
+
sign({ connectorName, userId, origin }) {
|
|
50
|
+
if (typeof connectorName !== 'string' || connectorName.length === 0) {
|
|
51
|
+
throw new Error('state-signer: connectorName is required');
|
|
52
|
+
}
|
|
53
|
+
if (!Number.isInteger(userId)) {
|
|
54
|
+
throw new Error('state-signer: userId must be an integer');
|
|
55
|
+
}
|
|
56
|
+
if (typeof origin !== 'string' || origin.length === 0) {
|
|
57
|
+
throw new Error('state-signer: origin is required');
|
|
58
|
+
}
|
|
59
|
+
const t = Date.now();
|
|
60
|
+
const message = canonicalMessage({ c: connectorName, u: userId, o: origin, t });
|
|
61
|
+
const sig = createHmac('sha256', keyBuf).update(message).digest();
|
|
62
|
+
const blob = {
|
|
63
|
+
c: connectorName,
|
|
64
|
+
u: userId,
|
|
65
|
+
o: origin,
|
|
66
|
+
t,
|
|
67
|
+
s: sig.toString('base64url'),
|
|
68
|
+
};
|
|
69
|
+
return Buffer.from(JSON.stringify(blob)).toString('base64url');
|
|
70
|
+
},
|
|
71
|
+
verify(state, opts) {
|
|
72
|
+
try {
|
|
73
|
+
const decoded = Buffer.from(state, 'base64url').toString('utf-8');
|
|
74
|
+
const parsed = JSON.parse(decoded);
|
|
75
|
+
if (!parsed ||
|
|
76
|
+
typeof parsed.c !== 'string' ||
|
|
77
|
+
typeof parsed.u !== 'number' ||
|
|
78
|
+
!Number.isInteger(parsed.u) ||
|
|
79
|
+
typeof parsed.o !== 'string' ||
|
|
80
|
+
typeof parsed.t !== 'number' ||
|
|
81
|
+
!Number.isFinite(parsed.t) ||
|
|
82
|
+
typeof parsed.s !== 'string') {
|
|
83
|
+
return null;
|
|
84
|
+
}
|
|
85
|
+
const expected = createHmac('sha256', keyBuf)
|
|
86
|
+
.update(canonicalMessage({ c: parsed.c, u: parsed.u, o: parsed.o, t: parsed.t }))
|
|
87
|
+
.digest();
|
|
88
|
+
let provided;
|
|
89
|
+
try {
|
|
90
|
+
provided = Buffer.from(parsed.s, 'base64url');
|
|
91
|
+
}
|
|
92
|
+
catch {
|
|
93
|
+
return null;
|
|
94
|
+
}
|
|
95
|
+
if (expected.length !== provided.length)
|
|
96
|
+
return null;
|
|
97
|
+
if (!timingSafeEqual(expected, provided))
|
|
98
|
+
return null;
|
|
99
|
+
const now = Date.now();
|
|
100
|
+
const maxAge = opts?.maxAgeMs ?? DEFAULT_MAX_AGE_MS;
|
|
101
|
+
if (now - parsed.t > maxAge)
|
|
102
|
+
return null;
|
|
103
|
+
if (parsed.t - now > FUTURE_SKEW_TOLERANCE_MS)
|
|
104
|
+
return null;
|
|
105
|
+
return {
|
|
106
|
+
connectorName: parsed.c,
|
|
107
|
+
userId: parsed.u,
|
|
108
|
+
origin: parsed.o,
|
|
109
|
+
};
|
|
110
|
+
}
|
|
111
|
+
catch {
|
|
112
|
+
return null;
|
|
113
|
+
}
|
|
114
|
+
},
|
|
115
|
+
};
|
|
116
|
+
}
|
|
117
|
+
function canonicalMessage(p) {
|
|
118
|
+
return JSON.stringify([p.c, p.u, p.o, p.t]);
|
|
119
|
+
}
|
|
120
|
+
// ── Consent-binding signer (OAuth authorization server) ──
|
|
121
|
+
//
|
|
122
|
+
// The authorization server's `/oauth/authorize` GET renders a consent screen
|
|
123
|
+
// whose hidden field carries the authorize parameters (client_id,
|
|
124
|
+
// redirect_uri, code_challenge, scope, resource, userId, state). The POST
|
|
125
|
+
// handler must trust those params came from a GET we rendered for *this*
|
|
126
|
+
// logged-in user — without a signature an attacker could forge the form and
|
|
127
|
+
// mint a code bound to a victim. We HMAC-sign an arbitrary JSON payload with a
|
|
128
|
+
// timestamp, distinct from the outbound state signer above (different HKDF
|
|
129
|
+
// `info`), and key it off the JWT secret so the whole AS depends only on a
|
|
130
|
+
// value that is always present (no master key required, unlike state signing).
|
|
131
|
+
const CONSENT_HKDF_INFO = 'studiograph-oauth-consent-v1';
|
|
132
|
+
const CONSENT_DEFAULT_MAX_AGE_MS = 10 * 60 * 1000;
|
|
133
|
+
/**
|
|
134
|
+
* Derive the consent signing key from the JWT secret via HKDF. Domain-separated
|
|
135
|
+
* from session JWTs (different mechanism entirely) and from the outbound state
|
|
136
|
+
* signer (different `info`). Keying off the JWT secret — rather than the master
|
|
137
|
+
* key — means the authorization server works on every boot, including
|
|
138
|
+
* non-encrypted/test boots where no master key is wired.
|
|
139
|
+
*/
|
|
140
|
+
export function deriveConsentSigningKey(jwtSecret) {
|
|
141
|
+
if (typeof jwtSecret !== 'string' || jwtSecret.length === 0) {
|
|
142
|
+
throw new Error('consent-signer: jwtSecret is required');
|
|
143
|
+
}
|
|
144
|
+
const derived = hkdfSync('sha256', Buffer.from(jwtSecret, 'utf-8'), Buffer.alloc(0), CONSENT_HKDF_INFO, HKDF_KEY_LENGTH);
|
|
145
|
+
return new Uint8Array(derived);
|
|
146
|
+
}
|
|
147
|
+
/**
|
|
148
|
+
* Generic HMAC payload signer: serializes `{ p: <payload>, t: <ts> }`, signs
|
|
149
|
+
* the canonical JSON with HMAC-SHA256, and base64url-encodes the blob. `verify`
|
|
150
|
+
* recomputes the HMAC with `timingSafeEqual`, enforces a max age, and rejects
|
|
151
|
+
* future-dated tokens. Returns the payload object on success, null otherwise.
|
|
152
|
+
*/
|
|
153
|
+
export function createConsentSigner(key) {
|
|
154
|
+
if (key.length !== HKDF_KEY_LENGTH) {
|
|
155
|
+
throw new Error(`consent-signer: signing key must be ${HKDF_KEY_LENGTH} bytes`);
|
|
156
|
+
}
|
|
157
|
+
const keyBuf = Buffer.from(key);
|
|
158
|
+
return {
|
|
159
|
+
sign(payload) {
|
|
160
|
+
const t = Date.now();
|
|
161
|
+
const message = JSON.stringify([payload, t]);
|
|
162
|
+
const sig = createHmac('sha256', keyBuf).update(message).digest();
|
|
163
|
+
const blob = { p: payload, t, s: sig.toString('base64url') };
|
|
164
|
+
return Buffer.from(JSON.stringify(blob)).toString('base64url');
|
|
165
|
+
},
|
|
166
|
+
verify(token, opts) {
|
|
167
|
+
try {
|
|
168
|
+
const parsed = JSON.parse(Buffer.from(token, 'base64url').toString('utf-8'));
|
|
169
|
+
if (!parsed ||
|
|
170
|
+
typeof parsed.p !== 'object' ||
|
|
171
|
+
parsed.p === null ||
|
|
172
|
+
typeof parsed.t !== 'number' ||
|
|
173
|
+
!Number.isFinite(parsed.t) ||
|
|
174
|
+
typeof parsed.s !== 'string') {
|
|
175
|
+
return null;
|
|
176
|
+
}
|
|
177
|
+
const expected = createHmac('sha256', keyBuf)
|
|
178
|
+
.update(JSON.stringify([parsed.p, parsed.t]))
|
|
179
|
+
.digest();
|
|
180
|
+
let provided;
|
|
181
|
+
try {
|
|
182
|
+
provided = Buffer.from(parsed.s, 'base64url');
|
|
183
|
+
}
|
|
184
|
+
catch {
|
|
185
|
+
return null;
|
|
186
|
+
}
|
|
187
|
+
if (expected.length !== provided.length)
|
|
188
|
+
return null;
|
|
189
|
+
if (!timingSafeEqual(expected, provided))
|
|
190
|
+
return null;
|
|
191
|
+
const now = Date.now();
|
|
192
|
+
const maxAge = opts?.maxAgeMs ?? CONSENT_DEFAULT_MAX_AGE_MS;
|
|
193
|
+
if (now - parsed.t > maxAge)
|
|
194
|
+
return null;
|
|
195
|
+
if (parsed.t - now > FUTURE_SKEW_TOLERANCE_MS)
|
|
196
|
+
return null;
|
|
197
|
+
return parsed.p;
|
|
198
|
+
}
|
|
199
|
+
catch {
|
|
200
|
+
return null;
|
|
201
|
+
}
|
|
202
|
+
},
|
|
203
|
+
};
|
|
204
|
+
}
|
|
205
|
+
//# sourceMappingURL=state-signer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"state-signer.js","sourceRoot":"","sources":["../../src/mcp/state-signer.ts"],"names":[],"mappings":"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"}
|