studiograph 1.3.46 → 1.3.48-beta.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +26 -16
- package/dist/agent/agent-pool.d.ts +117 -0
- package/dist/agent/agent-pool.js +287 -0
- package/dist/agent/agent-pool.js.map +1 -0
- package/dist/agent/followups.d.ts +34 -0
- package/dist/agent/followups.js +52 -0
- package/dist/agent/followups.js.map +1 -0
- package/dist/agent/orchestrator.d.ts +113 -22
- package/dist/agent/orchestrator.js +573 -181
- package/dist/agent/orchestrator.js.map +1 -1
- package/dist/agent/prompts/entity-types-section.d.ts +36 -0
- package/dist/agent/prompts/entity-types-section.js +90 -0
- package/dist/agent/prompts/entity-types-section.js.map +1 -0
- package/dist/agent/prompts/system.md +148 -69
- package/dist/agent/skill-loader.d.ts +30 -17
- package/dist/agent/skill-loader.js +63 -30
- package/dist/agent/skill-loader.js.map +1 -1
- package/dist/agent/skills/entity-schema.md +77 -433
- package/dist/agent/skills/interview/entity-templates.md +193 -0
- package/dist/agent/skills/interview/question-domains.md +391 -0
- package/dist/agent/skills/interview/skill.md +204 -0
- package/dist/agent/skills/schema-rules.md +54 -0
- package/dist/agent/tools/capture-tools.d.ts +31 -0
- package/dist/agent/tools/capture-tools.js +40 -0
- package/dist/agent/tools/capture-tools.js.map +1 -0
- package/dist/agent/tools/folder-tools.d.ts +47 -0
- package/dist/agent/tools/folder-tools.js +249 -0
- package/dist/agent/tools/folder-tools.js.map +1 -0
- package/dist/agent/tools/fs-tools.d.ts +7 -6
- package/dist/agent/tools/fs-tools.js +5 -4
- package/dist/agent/tools/fs-tools.js.map +1 -1
- package/dist/agent/tools/graph-tools.d.ts +21 -58
- package/dist/agent/tools/graph-tools.js +635 -332
- package/dist/agent/tools/graph-tools.js.map +1 -1
- package/dist/agent/tools/history-tools.d.ts +95 -0
- package/dist/agent/tools/history-tools.js +461 -0
- package/dist/agent/tools/history-tools.js.map +1 -0
- package/dist/agent/tools/load-skill.d.ts +6 -5
- package/dist/agent/tools/load-skill.js +3 -3
- package/dist/agent/tools/load-skill.js.map +1 -1
- package/dist/agent/tools/ops-tools.d.ts +5 -4
- package/dist/agent/tools/ops-tools.js +130 -236
- package/dist/agent/tools/ops-tools.js.map +1 -1
- package/dist/agent/tools/permission-tools.d.ts +87 -17
- package/dist/agent/tools/permission-tools.js +233 -38
- package/dist/agent/tools/permission-tools.js.map +1 -1
- package/dist/agent/tools/tool-loader.js +5 -4
- package/dist/agent/tools/tool-loader.js.map +1 -1
- package/dist/agent/tools/web-tools.d.ts +18 -0
- package/dist/agent/tools/web-tools.js +283 -0
- package/dist/agent/tools/web-tools.js.map +1 -0
- package/dist/cli/commands/about.d.ts +1 -0
- package/dist/cli/commands/about.js +55 -3
- package/dist/cli/commands/about.js.map +1 -1
- package/dist/cli/commands/admin/audit-workspace.d.ts +23 -0
- package/dist/cli/commands/admin/audit-workspace.js +133 -0
- package/dist/cli/commands/admin/audit-workspace.js.map +1 -0
- package/dist/cli/commands/admin/audit.d.ts +21 -0
- package/dist/cli/commands/admin/audit.js +174 -0
- package/dist/cli/commands/admin/audit.js.map +1 -0
- package/dist/cli/commands/admin/backup.d.ts +54 -0
- package/dist/cli/commands/admin/backup.js +207 -0
- package/dist/cli/commands/admin/backup.js.map +1 -0
- package/dist/cli/commands/admin/folder.d.ts +11 -0
- package/dist/cli/commands/admin/folder.js +186 -0
- package/dist/cli/commands/admin/folder.js.map +1 -0
- package/dist/cli/commands/admin/index.d.ts +16 -0
- package/dist/cli/commands/admin/index.js +46 -0
- package/dist/cli/commands/admin/index.js.map +1 -0
- package/dist/cli/commands/admin/migrate-assets.d.ts +53 -0
- package/dist/cli/commands/admin/migrate-assets.js +184 -0
- package/dist/cli/commands/admin/migrate-assets.js.map +1 -0
- package/dist/cli/commands/admin/migrate.d.ts +56 -0
- package/dist/cli/commands/admin/migrate.js +263 -0
- package/dist/cli/commands/admin/migrate.js.map +1 -0
- package/dist/cli/commands/admin/restore.d.ts +24 -0
- package/dist/cli/commands/admin/restore.js +228 -0
- package/dist/cli/commands/admin/restore.js.map +1 -0
- package/dist/cli/commands/admin/secrets.d.ts +23 -0
- package/dist/cli/commands/admin/secrets.js +256 -0
- package/dist/cli/commands/admin/secrets.js.map +1 -0
- package/dist/cli/commands/admin/settings.d.ts +28 -0
- package/dist/cli/commands/admin/settings.js +284 -0
- package/dist/cli/commands/admin/settings.js.map +1 -0
- package/dist/cli/commands/admin/token.d.ts +42 -0
- package/dist/cli/commands/admin/token.js +126 -0
- package/dist/cli/commands/admin/token.js.map +1 -0
- package/dist/cli/commands/admin/transfer-ownership.d.ts +15 -0
- package/dist/cli/commands/admin/transfer-ownership.js +106 -0
- package/dist/cli/commands/admin/transfer-ownership.js.map +1 -0
- package/dist/cli/commands/admin/user.d.ts +11 -0
- package/dist/cli/commands/admin/user.js +187 -0
- package/dist/cli/commands/admin/user.js.map +1 -0
- package/dist/cli/commands/clone.d.ts +25 -3
- package/dist/cli/commands/clone.js +142 -36
- package/dist/cli/commands/clone.js.map +1 -1
- package/dist/cli/commands/commit.d.ts +1 -1
- package/dist/cli/commands/commit.js +24 -11
- package/dist/cli/commands/commit.js.map +1 -1
- package/dist/cli/commands/config.d.ts +23 -107
- package/dist/cli/commands/config.js +52 -260
- package/dist/cli/commands/config.js.map +1 -1
- package/dist/cli/commands/connector.d.ts +10 -13
- package/dist/cli/commands/connector.js +16 -58
- package/dist/cli/commands/connector.js.map +1 -1
- package/dist/cli/commands/deploy.js +215 -68
- package/dist/cli/commands/deploy.js.map +1 -1
- package/dist/cli/commands/index.js +2 -2
- package/dist/cli/commands/index.js.map +1 -1
- package/dist/cli/commands/init.js +10 -30
- package/dist/cli/commands/init.js.map +1 -1
- package/dist/cli/commands/mcp.js +12 -4
- package/dist/cli/commands/mcp.js.map +1 -1
- package/dist/cli/commands/orphans.js +14 -30
- package/dist/cli/commands/orphans.js.map +1 -1
- package/dist/cli/commands/r2.d.ts +3 -0
- package/dist/cli/commands/r2.js +223 -204
- package/dist/cli/commands/r2.js.map +1 -1
- package/dist/cli/commands/redeploy.js +65 -12
- package/dist/cli/commands/redeploy.js.map +1 -1
- package/dist/cli/commands/reset.d.ts +22 -6
- package/dist/cli/commands/reset.js +142 -63
- package/dist/cli/commands/reset.js.map +1 -1
- package/dist/cli/commands/serve.js +209 -24
- package/dist/cli/commands/serve.js.map +1 -1
- package/dist/cli/commands/sync.d.ts +1 -1
- package/dist/cli/commands/sync.js +372 -202
- package/dist/cli/commands/sync.js.map +1 -1
- package/dist/cli/crypto-bundle.d.ts +39 -0
- package/dist/cli/crypto-bundle.js +94 -0
- package/dist/cli/crypto-bundle.js.map +1 -0
- package/dist/cli/index.js +24 -35
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/railway-pin.d.ts +68 -0
- package/dist/cli/railway-pin.js +96 -0
- package/dist/cli/railway-pin.js.map +1 -0
- package/dist/cli/railway-provisioning.d.ts +53 -0
- package/dist/cli/railway-provisioning.js +85 -0
- package/dist/cli/railway-provisioning.js.map +1 -0
- package/dist/cli/setup-wizard.d.ts +33 -52
- package/dist/cli/setup-wizard.js +43 -68
- package/dist/cli/setup-wizard.js.map +1 -1
- package/dist/core/accent-palette.d.ts +22 -0
- package/dist/core/accent-palette.js +47 -0
- package/dist/core/accent-palette.js.map +1 -0
- package/dist/core/cell-anchor.d.ts +29 -0
- package/dist/core/cell-anchor.js +53 -0
- package/dist/core/cell-anchor.js.map +1 -0
- package/dist/core/comment-anchor.d.ts +41 -0
- package/dist/core/comment-anchor.js +147 -0
- package/dist/core/comment-anchor.js.map +1 -0
- package/dist/core/commit-messages.d.ts +57 -0
- package/dist/core/commit-messages.js +85 -0
- package/dist/core/commit-messages.js.map +1 -0
- package/dist/core/embeds.d.ts +56 -0
- package/dist/core/embeds.js +103 -0
- package/dist/core/embeds.js.map +1 -0
- package/dist/core/entity-body-templates.d.ts +21 -0
- package/dist/core/entity-body-templates.js +53 -0
- package/dist/core/entity-body-templates.js.map +1 -0
- package/dist/core/entity-types-catalog.d.ts +65 -0
- package/dist/core/entity-types-catalog.js +140 -0
- package/dist/core/entity-types-catalog.js.map +1 -0
- package/dist/core/folder-paths.d.ts +41 -0
- package/dist/core/folder-paths.js +95 -0
- package/dist/core/folder-paths.js.map +1 -0
- package/dist/core/folder-sidecar.d.ts +36 -0
- package/dist/core/folder-sidecar.js +91 -0
- package/dist/core/folder-sidecar.js.map +1 -0
- package/dist/core/graph.d.ts +675 -14
- package/dist/core/graph.js +2118 -314
- 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/schema-registry.d.ts +59 -0
- package/dist/core/schema-registry.js +198 -0
- package/dist/core/schema-registry.js.map +1 -1
- package/dist/core/schemas/connector.d.ts +67 -0
- package/dist/core/schemas/connector.js +100 -0
- package/dist/core/schemas/connector.js.map +1 -0
- package/dist/core/schemas/workspace.d.ts +122 -0
- package/dist/core/schemas/workspace.js +211 -0
- package/dist/core/schemas/workspace.js.map +1 -0
- package/dist/core/secrets/SecretStore.d.ts +77 -0
- package/dist/core/secrets/SecretStore.js +13 -0
- package/dist/core/secrets/SecretStore.js.map +1 -0
- package/dist/core/secrets/SettingsResolver.d.ts +54 -0
- package/dist/core/secrets/SettingsResolver.js +80 -0
- package/dist/core/secrets/SettingsResolver.js.map +1 -0
- package/dist/core/secrets/SettingsStore.d.ts +30 -0
- package/dist/core/secrets/SettingsStore.js +9 -0
- package/dist/core/secrets/SettingsStore.js.map +1 -0
- package/dist/core/secrets/SqliteEncryptedStore.d.ts +90 -0
- package/dist/core/secrets/SqliteEncryptedStore.js +598 -0
- package/dist/core/secrets/SqliteEncryptedStore.js.map +1 -0
- package/dist/core/secrets/audit.d.ts +36 -0
- package/dist/core/secrets/audit.js +60 -0
- package/dist/core/secrets/audit.js.map +1 -0
- package/dist/core/secrets/auth-db-migration.d.ts +129 -0
- package/dist/core/secrets/auth-db-migration.js +653 -0
- package/dist/core/secrets/auth-db-migration.js.map +1 -0
- package/dist/core/secrets/bundle.d.ts +141 -0
- package/dist/core/secrets/bundle.js +435 -0
- package/dist/core/secrets/bundle.js.map +1 -0
- package/dist/core/secrets/dual-write.d.ts +81 -0
- package/dist/core/secrets/dual-write.js +247 -0
- package/dist/core/secrets/dual-write.js.map +1 -0
- package/dist/core/secrets/encryption.d.ts +44 -0
- package/dist/core/secrets/encryption.js +97 -0
- package/dist/core/secrets/encryption.js.map +1 -0
- package/dist/core/secrets/index.d.ts +49 -0
- package/dist/core/secrets/index.js +74 -0
- package/dist/core/secrets/index.js.map +1 -0
- package/dist/core/secrets/master-key.d.ts +38 -0
- package/dist/core/secrets/master-key.js +122 -0
- package/dist/core/secrets/master-key.js.map +1 -0
- package/dist/core/secrets/probes/anthropic.d.ts +98 -0
- package/dist/core/secrets/probes/anthropic.js +300 -0
- package/dist/core/secrets/probes/anthropic.js.map +1 -0
- package/dist/core/secrets/probes/brave.d.ts +9 -0
- package/dist/core/secrets/probes/brave.js +15 -0
- package/dist/core/secrets/probes/brave.js.map +1 -0
- package/dist/core/secrets/probes/r2.d.ts +15 -0
- package/dist/core/secrets/probes/r2.js +14 -0
- package/dist/core/secrets/probes/r2.js.map +1 -0
- package/dist/core/secrets/probes/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 +598 -0
- package/dist/core/secrets/registry.js.map +1 -0
- package/dist/core/types.d.ts +77 -455
- package/dist/core/types.js +17 -3
- package/dist/core/types.js.map +1 -1
- package/dist/core/user-config.d.ts +75 -7
- package/dist/core/user-config.js +155 -7
- package/dist/core/user-config.js.map +1 -1
- package/dist/core/validation.d.ts +717 -1791
- package/dist/core/validation.js +357 -228
- package/dist/core/validation.js.map +1 -1
- package/dist/core/workspace-manager.d.ts +79 -12
- package/dist/core/workspace-manager.js +213 -73
- package/dist/core/workspace-manager.js.map +1 -1
- package/dist/core/workspace.d.ts +19 -5
- package/dist/core/workspace.js +69 -35
- package/dist/core/workspace.js.map +1 -1
- package/dist/mcp/comment-virtual-entity.d.ts +36 -0
- package/dist/mcp/comment-virtual-entity.js +71 -0
- package/dist/mcp/comment-virtual-entity.js.map +1 -0
- package/dist/mcp/connector-manager.d.ts +94 -13
- package/dist/mcp/connector-manager.js +283 -62
- package/dist/mcp/connector-manager.js.map +1 -1
- package/dist/mcp/oauth-provider.d.ts +27 -33
- package/dist/mcp/oauth-provider.js +65 -134
- package/dist/mcp/oauth-provider.js.map +1 -1
- package/dist/mcp/oauth-registry.d.ts +62 -0
- package/dist/mcp/oauth-registry.js +85 -0
- package/dist/mcp/oauth-registry.js.map +1 -0
- package/dist/mcp/server.d.ts +11 -3
- package/dist/mcp/server.js +30 -5
- package/dist/mcp/server.js.map +1 -1
- package/dist/mcp/state-signer.d.ts +41 -0
- package/dist/mcp/state-signer.js +120 -0
- package/dist/mcp/state-signer.js.map +1 -0
- package/dist/mcp/tools.d.ts +35 -2
- package/dist/mcp/tools.js +1051 -117
- package/dist/mcp/tools.js.map +1 -1
- package/dist/server/__tests__/helpers/graph-api.d.ts +18 -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/body-write-coordinator.d.ts +151 -0
- package/dist/server/body-write-coordinator.js +161 -0
- package/dist/server/body-write-coordinator.js.map +1 -0
- package/dist/server/cloud-billing-flow.d.ts +32 -0
- package/dist/server/cloud-billing-flow.js +75 -0
- package/dist/server/cloud-billing-flow.js.map +1 -0
- package/dist/server/commit-audit.d.ts +26 -0
- package/dist/server/commit-audit.js +30 -0
- package/dist/server/commit-audit.js.map +1 -0
- package/dist/server/index.d.ts +14 -3
- package/dist/server/index.js +451 -193
- package/dist/server/index.js.map +1 -1
- package/dist/server/middleware/sanitize.d.ts +46 -0
- package/dist/server/middleware/sanitize.js +171 -0
- package/dist/server/middleware/sanitize.js.map +1 -0
- package/dist/server/routes/asset-api.d.ts +10 -0
- package/dist/server/routes/asset-api.js +294 -0
- package/dist/server/routes/asset-api.js.map +1 -0
- package/dist/server/routes/audit-api.d.ts +24 -0
- package/dist/server/routes/audit-api.js +117 -0
- package/dist/server/routes/audit-api.js.map +1 -0
- package/dist/server/routes/auth-api.d.ts +3 -2
- package/dist/server/routes/auth-api.js +519 -38
- package/dist/server/routes/auth-api.js.map +1 -1
- package/dist/server/routes/capture-api.d.ts +18 -0
- package/dist/server/routes/capture-api.js +257 -0
- package/dist/server/routes/capture-api.js.map +1 -0
- package/dist/server/routes/chat.d.ts +4 -1
- package/dist/server/routes/chat.js +298 -88
- package/dist/server/routes/chat.js.map +1 -1
- package/dist/server/routes/comments-api.d.ts +15 -0
- package/dist/server/routes/comments-api.js +444 -0
- package/dist/server/routes/comments-api.js.map +1 -0
- package/dist/server/routes/config-api.d.ts +21 -0
- package/dist/server/routes/config-api.js +256 -0
- package/dist/server/routes/config-api.js.map +1 -0
- package/dist/server/routes/connectors-api.d.ts +17 -0
- package/dist/server/routes/connectors-api.js +410 -0
- package/dist/server/routes/connectors-api.js.map +1 -0
- package/dist/server/routes/event-ingest-api.d.ts +15 -0
- package/dist/server/routes/event-ingest-api.js +125 -0
- package/dist/server/routes/event-ingest-api.js.map +1 -0
- package/dist/server/routes/git-http.d.ts +3 -3
- package/dist/server/routes/git-http.js +86 -38
- package/dist/server/routes/git-http.js.map +1 -1
- package/dist/server/routes/graph-api-access.d.ts +35 -0
- package/dist/server/routes/graph-api-access.js +105 -0
- package/dist/server/routes/graph-api-access.js.map +1 -0
- package/dist/server/routes/graph-api.d.ts +3 -2
- package/dist/server/routes/graph-api.js +1321 -263
- package/dist/server/routes/graph-api.js.map +1 -1
- package/dist/server/routes/health.d.ts +18 -0
- package/dist/server/routes/health.js +74 -0
- package/dist/server/routes/health.js.map +1 -0
- package/dist/server/routes/insights-api.d.ts +1 -2
- package/dist/server/routes/insights-api.js +149 -41
- package/dist/server/routes/insights-api.js.map +1 -1
- package/dist/server/routes/mcp.d.ts +7 -3
- package/dist/server/routes/mcp.js +22 -6
- package/dist/server/routes/mcp.js.map +1 -1
- package/dist/server/routes/permissions-api.d.ts +9 -2
- package/dist/server/routes/permissions-api.js +87 -30
- package/dist/server/routes/permissions-api.js.map +1 -1
- package/dist/server/routes/r2-api.d.ts +25 -0
- package/dist/server/routes/r2-api.js +276 -0
- package/dist/server/routes/r2-api.js.map +1 -0
- package/dist/server/routes/secrets-api.d.ts +36 -0
- package/dist/server/routes/secrets-api.js +308 -0
- package/dist/server/routes/secrets-api.js.map +1 -0
- package/dist/server/routes/settings-api.d.ts +29 -0
- package/dist/server/routes/settings-api.js +180 -0
- package/dist/server/routes/settings-api.js.map +1 -0
- package/dist/server/routes/url-api.d.ts +7 -0
- package/dist/server/routes/url-api.js +74 -0
- package/dist/server/routes/url-api.js.map +1 -0
- package/dist/server/routes/views-api.js +81 -7
- package/dist/server/routes/views-api.js.map +1 -1
- package/dist/server/routes/workspace-api.d.ts +2 -1
- package/dist/server/routes/workspace-api.js +124 -35
- package/dist/server/routes/workspace-api.js.map +1 -1
- package/dist/server/routes/ws.d.ts +2 -1
- package/dist/server/routes/ws.js +64 -16
- package/dist/server/routes/ws.js.map +1 -1
- package/dist/server/session-manager.d.ts +48 -5
- package/dist/server/session-manager.js +182 -15
- package/dist/server/session-manager.js.map +1 -1
- package/dist/server/ws-hub.d.ts +138 -14
- package/dist/server/ws-hub.js +0 -0
- package/dist/server/ws-hub.js.map +1 -1
- package/dist/server/yjs-manager.d.ts +285 -7
- package/dist/server/yjs-manager.js +907 -36
- package/dist/server/yjs-manager.js.map +1 -1
- package/dist/server/yjs-persistence.d.ts +165 -0
- package/dist/server/yjs-persistence.js +557 -0
- package/dist/server/yjs-persistence.js.map +1 -0
- package/dist/server/yjs-text-diff.d.ts +32 -0
- package/dist/server/yjs-text-diff.js +61 -0
- package/dist/server/yjs-text-diff.js.map +1 -0
- package/dist/services/access-control.d.ts +73 -0
- package/dist/services/access-control.js +146 -0
- package/dist/services/access-control.js.map +1 -0
- package/dist/services/asset-listing.d.ts +39 -0
- package/dist/services/asset-listing.js +125 -0
- package/dist/services/asset-listing.js.map +1 -0
- package/dist/services/asset-upload-service.d.ts +53 -0
- package/dist/services/asset-upload-service.js +201 -0
- package/dist/services/asset-upload-service.js.map +1 -0
- package/dist/services/assets/asset-index-service.d.ts +82 -0
- package/dist/services/assets/asset-index-service.js +167 -0
- package/dist/services/assets/asset-index-service.js.map +1 -0
- package/dist/services/assets/base.d.ts +44 -0
- package/dist/services/assets/base.js +55 -0
- package/dist/services/assets/base.js.map +1 -1
- package/dist/services/assets/index.d.ts +69 -1
- package/dist/services/assets/index.js +125 -0
- package/dist/services/assets/index.js.map +1 -1
- package/dist/services/assets/local.d.ts +12 -1
- package/dist/services/assets/local.js +100 -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 +34 -1
- package/dist/services/assets/r2.js +93 -1
- package/dist/services/assets/r2.js.map +1 -1
- package/dist/services/auth-service.d.ts +314 -36
- package/dist/services/auth-service.js +1126 -139
- package/dist/services/auth-service.js.map +1 -1
- package/dist/services/bookmark-import-service.d.ts +49 -0
- package/dist/services/bookmark-import-service.js +250 -0
- package/dist/services/bookmark-import-service.js.map +1 -0
- package/dist/services/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/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 +161 -0
- package/dist/services/entity-mutations.js +296 -0
- package/dist/services/entity-mutations.js.map +1 -0
- package/dist/services/event-processor.d.ts +104 -0
- package/dist/services/event-processor.js +441 -0
- package/dist/services/event-processor.js.map +1 -0
- package/dist/services/folder-creation.d.ts +33 -0
- package/dist/services/folder-creation.js +103 -0
- package/dist/services/folder-creation.js.map +1 -0
- package/dist/services/git.d.ts +54 -0
- package/dist/services/git.js +188 -54
- package/dist/services/git.js.map +1 -1
- package/dist/services/graph-maintenance.d.ts +42 -0
- package/dist/services/graph-maintenance.js +143 -0
- package/dist/services/graph-maintenance.js.map +1 -0
- package/dist/services/import-service.d.ts +45 -2
- package/dist/services/import-service.js +304 -100
- package/dist/services/import-service.js.map +1 -1
- package/dist/services/lint-service.js +9 -16
- package/dist/services/lint-service.js.map +1 -1
- package/dist/services/markdown.d.ts +12 -1
- package/dist/services/markdown.js +71 -6
- package/dist/services/markdown.js.map +1 -1
- package/dist/services/memory-service.d.ts +22 -14
- package/dist/services/memory-service.js +53 -35
- package/dist/services/memory-service.js.map +1 -1
- package/dist/services/mention-detector.d.ts +23 -0
- package/dist/services/mention-detector.js +47 -0
- package/dist/services/mention-detector.js.map +1 -0
- package/dist/services/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/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/user-person-bridge.d.ts +118 -0
- package/dist/services/user-person-bridge.js +306 -0
- package/dist/services/user-person-bridge.js.map +1 -0
- package/dist/services/vector-service.d.ts +146 -6
- package/dist/services/vector-service.js +276 -13
- package/dist/services/vector-service.js.map +1 -1
- package/dist/services/workspace-access.d.ts +106 -0
- package/dist/services/workspace-access.js +149 -0
- package/dist/services/workspace-access.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.DDqq11xY.css +2 -0
- package/dist/web/_app/immutable/assets/12.DlIf1mKh.css +1 -0
- package/dist/web/_app/immutable/assets/13.7d-Q37wc.css +1 -0
- package/dist/web/_app/immutable/assets/14.CmLrbzZp.css +1 -0
- package/dist/web/_app/immutable/assets/2.CGK2ky-K.css +1 -0
- package/dist/web/_app/immutable/assets/3.CV0abekd.css +1 -0
- package/dist/web/_app/immutable/assets/4.fGsEpo95.css +1 -0
- package/dist/web/_app/immutable/assets/AgentOverlay.DqzjAOm4.css +1 -0
- package/dist/web/_app/immutable/assets/AssetManagerModal.BKJfPAPk.css +1 -0
- package/dist/web/_app/immutable/assets/CalendarView.bNewSxkH.css +1 -0
- package/dist/web/_app/immutable/assets/FolderMembersPanel.DX1oBeF_.css +1 -0
- package/dist/web/_app/immutable/assets/FolderMutationDialogs.BMRF6Z3z.css +1 -0
- package/dist/web/_app/immutable/assets/FolderPicker.B5KdvRYl.css +1 -0
- package/dist/web/_app/immutable/assets/GalleryView.DgvSjS0I.css +1 -0
- package/dist/web/_app/immutable/assets/GraphView.BJtGL9py.css +1 -0
- package/dist/web/_app/immutable/assets/KanbanView.D0QbZFd6.css +1 -0
- package/dist/web/_app/immutable/assets/Markdown.B4lW7Llh.css +1 -0
- package/dist/web/_app/immutable/assets/SettingsDialog.DYWYMFSO.css +1 -0
- package/dist/web/_app/immutable/assets/Spinner.UBfl0pab.css +1 -0
- package/dist/web/_app/immutable/assets/StopFilledAlt.clodJdp5.css +1 -0
- package/dist/web/_app/immutable/assets/TimelineView.DA-H6dvv.css +1 -0
- package/dist/web/_app/immutable/assets/WorkspaceView.BS1ildu7.css +1 -0
- package/dist/web/_app/immutable/assets/button.BlLm4Dg1.css +1 -0
- package/dist/web/_app/immutable/assets/formatting.B912lpdG.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.DCMVmy_Q.css +1 -0
- package/dist/web/_app/immutable/assets/realtime.DDCWxn3B.css +1 -0
- package/dist/web/_app/immutable/assets/sheet.DJPuqnTg.css +1 -0
- package/dist/web/_app/immutable/assets/speech-dictation.C5CYFhS1.css +1 -0
- package/dist/web/_app/immutable/chunks/0iDDDyaZ.js +1 -0
- package/dist/web/_app/immutable/chunks/2LgrBrpS2.js +2 -0
- package/dist/web/_app/immutable/chunks/3EfPAYzi2.js +1 -0
- package/dist/web/_app/immutable/chunks/7Bu427my2.js +184 -0
- package/dist/web/_app/immutable/chunks/96h3ktuk.js +1 -0
- package/dist/web/_app/immutable/chunks/A6FJA1AF.js +1 -0
- package/dist/web/_app/immutable/chunks/B-FAwCqe2.js +1 -0
- package/dist/web/_app/immutable/chunks/B-V5eMSw2.js +1 -0
- package/dist/web/_app/immutable/chunks/B-i9_YVM.js +1 -0
- package/dist/web/_app/immutable/chunks/B15-kvCe2.js +1 -0
- package/dist/web/_app/immutable/chunks/B1KZ7zY32.js +2 -0
- package/dist/web/_app/immutable/chunks/B4gpzeQ2.js +1 -0
- package/dist/web/_app/immutable/chunks/B6Lt-qaJ2.js +1 -0
- package/dist/web/_app/immutable/chunks/B7tbGyiU2.js +1 -0
- package/dist/web/_app/immutable/chunks/BBxt8lpa.js +1 -0
- package/dist/web/_app/immutable/chunks/BCaRi2AF.js +1 -0
- package/dist/web/_app/immutable/chunks/BJ6Z7eAM.js +2 -0
- package/dist/web/_app/immutable/chunks/BM_vIwVC.js +83 -0
- package/dist/web/_app/immutable/chunks/BQULA6er.js +4 -0
- package/dist/web/_app/immutable/chunks/BQW-EDgP2.js +224 -0
- package/dist/web/_app/immutable/chunks/BR6jMpLB.js +1 -0
- package/dist/web/_app/immutable/chunks/BVnuLlVg.js +1 -0
- package/dist/web/_app/immutable/chunks/BddNmQ8j.js +1 -0
- package/dist/web/_app/immutable/chunks/BeuunHPO.js +1 -0
- package/dist/web/_app/immutable/chunks/BhTmSo4n2.js +1 -0
- package/dist/web/_app/immutable/chunks/BikW7mty2.js +1 -0
- package/dist/web/_app/immutable/chunks/BkyFvJvz.js +1 -0
- package/dist/web/_app/immutable/chunks/BlyFGPFV.js +22 -0
- package/dist/web/_app/immutable/chunks/Bo5dghSu.js +3 -0
- package/dist/web/_app/immutable/chunks/BpPyho8Y.js +3 -0
- package/dist/web/_app/immutable/chunks/BsuvyNDN2.js +2 -0
- package/dist/web/_app/immutable/chunks/BuKi0vpu2.js +7 -0
- package/dist/web/_app/immutable/chunks/BuuYnIjE.js +1 -0
- package/dist/web/_app/immutable/chunks/By4lVKNC.js +2 -0
- package/dist/web/_app/immutable/chunks/ByQGCIwO.js +5 -0
- package/dist/web/_app/immutable/chunks/ByidpUhu.js +1 -0
- package/dist/web/_app/immutable/chunks/C35TIzaB.js +1 -0
- package/dist/web/_app/immutable/chunks/C5dM5op-.js +1 -0
- package/dist/web/_app/immutable/chunks/C6Nx0jpM.js +1 -0
- package/dist/web/_app/immutable/chunks/C6pVyOEl2.js +1 -0
- package/dist/web/_app/immutable/chunks/C80GKPZ9.js +1 -0
- package/dist/web/_app/immutable/chunks/C94TJqPI.js +1 -0
- package/dist/web/_app/immutable/chunks/C9PETsiT.js +1 -0
- package/dist/web/_app/immutable/chunks/CAuAQ81a2.js +1 -0
- package/dist/web/_app/immutable/chunks/CBnzSITi2.js +1 -0
- package/dist/web/_app/immutable/chunks/CC9p2p6w.js +1 -0
- package/dist/web/_app/immutable/chunks/CCLR-AJL2.js +185 -0
- package/dist/web/_app/immutable/chunks/CD0X7XPW.js +6 -0
- package/dist/web/_app/immutable/chunks/CDTjuBSm.js +1 -0
- package/dist/web/_app/immutable/chunks/CH-KYFIm.js +64 -0
- package/dist/web/_app/immutable/chunks/CHj8fObQ2.js +9 -0
- package/dist/web/_app/immutable/chunks/CK-UnH-n2.js +1 -0
- package/dist/web/_app/immutable/chunks/CKH5BEAh.js +1 -0
- package/dist/web/_app/immutable/chunks/CPSupDJp2.js +2 -0
- package/dist/web/_app/immutable/chunks/CSUrYOis.js +1 -0
- package/dist/web/_app/immutable/chunks/CYTTTma0.js +3 -0
- package/dist/web/_app/immutable/chunks/Cbaut_us2.js +1 -0
- package/dist/web/_app/immutable/chunks/CiIpSx5n2.js +1 -0
- package/dist/web/_app/immutable/chunks/CkLfUXwy.js +1 -0
- package/dist/web/_app/immutable/chunks/CokE4L8B2.js +1 -0
- package/dist/web/_app/immutable/chunks/CpLdnbh3.js +1 -0
- package/dist/web/_app/immutable/chunks/CvDrXJk9.js +1 -0
- package/dist/web/_app/immutable/chunks/D00MFB9_2.js +1 -0
- package/dist/web/_app/immutable/chunks/D41CbXmM.js +1 -0
- package/dist/web/_app/immutable/chunks/D5Hj-MPO2.js +1 -0
- package/dist/web/_app/immutable/chunks/D6nLEmZy2.js +1 -0
- package/dist/web/_app/immutable/chunks/D71ZlQBM2.js +2 -0
- package/dist/web/_app/immutable/chunks/D9ql9vXU.js +1 -0
- package/dist/web/_app/immutable/chunks/DAXW5iLp.js +1 -0
- package/dist/web/_app/immutable/chunks/DBzQ8LyQ2.js +2 -0
- package/dist/web/_app/immutable/chunks/DIb5rAPU2.js +1 -0
- package/dist/web/_app/immutable/chunks/DOmH4G9o.js +14 -0
- package/dist/web/_app/immutable/chunks/DQMWa2t72.js +1 -0
- package/dist/web/_app/immutable/chunks/DRsswX8S.js +1 -0
- package/dist/web/_app/immutable/chunks/DTCHhxD5.js +1 -0
- package/dist/web/_app/immutable/chunks/DUwgGBxa.js +1 -0
- package/dist/web/_app/immutable/chunks/DVcy5Pp82.js +1 -0
- package/dist/web/_app/immutable/chunks/DWygwzcO.js +1 -0
- package/dist/web/_app/immutable/chunks/DYXDRmoo.js +1 -0
- package/dist/web/_app/immutable/chunks/DZ-YyRVM.js +1 -0
- package/dist/web/_app/immutable/chunks/D_HVOuHV.js +1 -0
- package/dist/web/_app/immutable/chunks/DaoOQFPb.js +1 -0
- package/dist/web/_app/immutable/chunks/DdLkNvPf.js +23 -0
- package/dist/web/_app/immutable/chunks/DiMQob8p.js +1 -0
- package/dist/web/_app/immutable/chunks/DiQJ9DLy.js +1 -0
- package/dist/web/_app/immutable/chunks/DlORZqfE.js +1 -0
- package/dist/web/_app/immutable/chunks/DmeYl7eL.js +2 -0
- package/dist/web/_app/immutable/chunks/Dng3OcRd2.js +1 -0
- package/dist/web/_app/immutable/chunks/DoKMFfJd.js +1 -0
- package/dist/web/_app/immutable/chunks/DpzG2mVI2.js +1 -0
- package/dist/web/_app/immutable/chunks/DvJSCDuZ2.js +1 -0
- package/dist/web/_app/immutable/chunks/DvPuaTCl2.js +5 -0
- package/dist/web/_app/immutable/chunks/ItgU4ei5.js +1 -0
- package/dist/web/_app/immutable/chunks/JJDMrjj62.js +1 -0
- package/dist/web/_app/immutable/chunks/OTTMDMTW.js +1 -0
- package/dist/web/_app/immutable/chunks/RmiWpCin2.js +1 -0
- package/dist/web/_app/immutable/chunks/ZTiqmKJy2.js +1 -0
- package/dist/web/_app/immutable/chunks/ahC5WoXX2.js +1 -0
- package/dist/web/_app/immutable/chunks/e3SY5t2O2.js +2692 -0
- package/dist/web/_app/immutable/chunks/g09ZrevW.js +1 -0
- package/dist/web/_app/immutable/chunks/go8N1nWD2.js +3 -0
- package/dist/web/_app/immutable/chunks/nTAmRNKw2.js +1 -0
- package/dist/web/_app/immutable/chunks/oBQOivfH2.js +1 -0
- package/dist/web/_app/immutable/chunks/oUTRxd0f.js +1 -0
- package/dist/web/_app/immutable/chunks/s_7BJJYy.js +2 -0
- package/dist/web/_app/immutable/chunks/uuFM-ygL.js +1 -0
- package/dist/web/_app/immutable/chunks/v7me-ydg.js +2 -0
- package/dist/web/_app/immutable/chunks/xihTtKlq.js +1 -0
- package/dist/web/_app/immutable/chunks/zl16E4yc2.js +1 -0
- package/dist/web/_app/immutable/entry/app.CbuUtkoM.js +2 -0
- package/dist/web/_app/immutable/entry/start.DeZyKwOT.js +1 -0
- package/dist/web/_app/immutable/nodes/0.C4PMtdx9.js +2 -0
- package/dist/web/_app/immutable/nodes/1.BwVfPLMn.js +1 -0
- package/dist/web/_app/immutable/nodes/10.DPr_SYan.js +1 -0
- package/dist/web/_app/immutable/nodes/11.CJAmEchE.js +1 -0
- package/dist/web/_app/immutable/nodes/12.ChMWXPMk.js +1 -0
- package/dist/web/_app/immutable/nodes/13.8vOKq8ue.js +1 -0
- package/dist/web/_app/immutable/nodes/14.BOSNmj9h.js +1 -0
- package/dist/web/_app/immutable/nodes/2.7N4BLwhX.js +109 -0
- package/dist/web/_app/immutable/nodes/3.Cd-tx8Ej.js +2 -0
- package/dist/web/_app/immutable/nodes/4.DtuT-syy.js +14 -0
- package/dist/web/_app/immutable/nodes/5.YwNHOrkt.js +1 -0
- package/dist/web/_app/immutable/nodes/6.BSPlYQuq.js +1 -0
- package/dist/web/_app/immutable/nodes/7.DPXzwW0H.js +1 -0
- package/dist/web/_app/immutable/nodes/8.Dhpk7w3X.js +1 -0
- package/dist/web/_app/immutable/nodes/9.Dd4iAQN5.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 +54 -19
- package/dist/web/studiograph-logomark.svg +29 -0
- package/package.json +34 -14
- package/dist/agent/skills/enrich-entities.md +0 -136
- package/dist/agent/skills/obsidian-source-setup.md +0 -246
- package/dist/agent/skills/skill-loader.d.ts +0 -48
- package/dist/agent/skills/skill-loader.js +0 -166
- package/dist/agent/skills/skill-loader.js.map +0 -1
- package/dist/agent/skills/sync-configuration.md +0 -119
- package/dist/agent/skills/sync-setup.md +0 -82
- package/dist/agent/tools/sync-tools.d.ts +0 -35
- package/dist/agent/tools/sync-tools.js +0 -992
- package/dist/agent/tools/sync-tools.js.map +0 -1
- package/dist/auth/github.d.ts +0 -56
- package/dist/auth/github.js +0 -169
- package/dist/auth/github.js.map +0 -1
- package/dist/cli/commands/access.d.ts +0 -11
- package/dist/cli/commands/access.js +0 -156
- package/dist/cli/commands/access.js.map +0 -1
- package/dist/cli/commands/app.d.ts +0 -7
- package/dist/cli/commands/app.js +0 -268
- package/dist/cli/commands/app.js.map +0 -1
- package/dist/cli/commands/auth.d.ts +0 -10
- package/dist/cli/commands/auth.js +0 -79
- package/dist/cli/commands/auth.js.map +0 -1
- package/dist/cli/commands/clear.d.ts +0 -5
- package/dist/cli/commands/clear.js +0 -36
- package/dist/cli/commands/clear.js.map +0 -1
- package/dist/cli/commands/collection.d.ts +0 -10
- package/dist/cli/commands/collection.js +0 -187
- package/dist/cli/commands/collection.js.map +0 -1
- package/dist/cli/commands/enrich.d.ts +0 -11
- package/dist/cli/commands/enrich.js +0 -135
- package/dist/cli/commands/enrich.js.map +0 -1
- package/dist/cli/commands/graphrag.d.ts +0 -12
- package/dist/cli/commands/graphrag.js +0 -122
- package/dist/cli/commands/graphrag.js.map +0 -1
- package/dist/cli/commands/join.d.ts +0 -9
- package/dist/cli/commands/join.js +0 -255
- package/dist/cli/commands/join.js.map +0 -1
- package/dist/cli/commands/members.d.ts +0 -11
- package/dist/cli/commands/members.js +0 -230
- package/dist/cli/commands/members.js.map +0 -1
- package/dist/cli/commands/org.d.ts +0 -10
- package/dist/cli/commands/org.js +0 -132
- package/dist/cli/commands/org.js.map +0 -1
- package/dist/cli/commands/provision.d.ts +0 -8
- package/dist/cli/commands/provision.js +0 -116
- package/dist/cli/commands/provision.js.map +0 -1
- package/dist/cli/commands/resolve.d.ts +0 -8
- package/dist/cli/commands/resolve.js +0 -85
- package/dist/cli/commands/resolve.js.map +0 -1
- package/dist/cli/commands/review.d.ts +0 -19
- package/dist/cli/commands/review.js +0 -128
- package/dist/cli/commands/review.js.map +0 -1
- package/dist/cli/commands/source.d.ts +0 -16
- package/dist/cli/commands/source.js +0 -159
- package/dist/cli/commands/source.js.map +0 -1
- package/dist/cli/commands/start.d.ts +0 -7
- package/dist/cli/commands/start.js +0 -589
- package/dist/cli/commands/start.js.map +0 -1
- package/dist/cli/commands/sync-collection.d.ts +0 -14
- package/dist/cli/commands/sync-collection.js +0 -355
- package/dist/cli/commands/sync-collection.js.map +0 -1
- package/dist/cli/commands/sync-entities.d.ts +0 -13
- package/dist/cli/commands/sync-entities.js +0 -242
- package/dist/cli/commands/sync-entities.js.map +0 -1
- package/dist/cli/commands/team.d.ts +0 -12
- package/dist/cli/commands/team.js +0 -185
- package/dist/cli/commands/team.js.map +0 -1
- package/dist/cli/commands/update.d.ts +0 -8
- package/dist/cli/commands/update.js +0 -155
- package/dist/cli/commands/update.js.map +0 -1
- package/dist/cli/commands/user.d.ts +0 -7
- package/dist/cli/commands/user.js +0 -153
- package/dist/cli/commands/user.js.map +0 -1
- package/dist/cli/scaffolding.d.ts +0 -12
- package/dist/cli/scaffolding.js +0 -397
- package/dist/cli/scaffolding.js.map +0 -1
- package/dist/cli/sync-review-interactive.d.ts +0 -31
- package/dist/cli/sync-review-interactive.js +0 -393
- package/dist/cli/sync-review-interactive.js.map +0 -1
- package/dist/core/migration-runner.d.ts +0 -42
- package/dist/core/migration-runner.js +0 -232
- package/dist/core/migration-runner.js.map +0 -1
- package/dist/core/migration-types.d.ts +0 -101
- package/dist/core/migration-types.js +0 -21
- package/dist/core/migration-types.js.map +0 -1
- package/dist/core/migrations/20260219-formalize-memory-location.d.ts +0 -2
- package/dist/core/migrations/20260219-formalize-memory-location.js +0 -35
- package/dist/core/migrations/20260219-formalize-memory-location.js.map +0 -1
- package/dist/core/migrations/20260220-add-workspace-metadata.d.ts +0 -12
- package/dist/core/migrations/20260220-add-workspace-metadata.js +0 -65
- package/dist/core/migrations/20260220-add-workspace-metadata.js.map +0 -1
- package/dist/core/migrations/20260220-add-workspace-readme.d.ts +0 -11
- package/dist/core/migrations/20260220-add-workspace-readme.js +0 -82
- package/dist/core/migrations/20260220-add-workspace-readme.js.map +0 -1
- package/dist/core/migrations/20260220-migrate-yaml-to-json.d.ts +0 -9
- package/dist/core/migrations/20260220-migrate-yaml-to-json.js +0 -64
- package/dist/core/migrations/20260220-migrate-yaml-to-json.js.map +0 -1
- package/dist/core/migrations/index.d.ts +0 -11
- package/dist/core/migrations/index.js +0 -23
- package/dist/core/migrations/index.js.map +0 -1
- package/dist/integrations/asana.d.ts +0 -26
- package/dist/integrations/asana.js +0 -78
- package/dist/integrations/asana.js.map +0 -1
- package/dist/integrations/figma-local.d.ts +0 -16
- package/dist/integrations/figma-local.js +0 -10
- package/dist/integrations/figma-local.js.map +0 -1
- package/dist/integrations/figma.d.ts +0 -17
- package/dist/integrations/figma.js +0 -17
- package/dist/integrations/figma.js.map +0 -1
- package/dist/integrations/granola.d.ts +0 -24
- package/dist/integrations/granola.js +0 -60
- package/dist/integrations/granola.js.map +0 -1
- package/dist/integrations/linear.d.ts +0 -14
- package/dist/integrations/linear.js +0 -80
- package/dist/integrations/linear.js.map +0 -1
- package/dist/integrations/paper-local.d.ts +0 -14
- package/dist/integrations/paper-local.js +0 -10
- package/dist/integrations/paper-local.js.map +0 -1
- package/dist/integrations/paper.d.ts +0 -2
- package/dist/integrations/paper.js +0 -10
- package/dist/integrations/paper.js.map +0 -1
- package/dist/integrations/pipedrive.d.ts +0 -26
- package/dist/integrations/pipedrive.js +0 -97
- package/dist/integrations/pipedrive.js.map +0 -1
- package/dist/integrations/registry.d.ts +0 -15
- package/dist/integrations/registry.js +0 -27
- package/dist/integrations/registry.js.map +0 -1
- package/dist/integrations/types.d.ts +0 -38
- package/dist/integrations/types.js +0 -9
- package/dist/integrations/types.js.map +0 -1
- package/dist/lib/lib/utils.d.ts +0 -2
- package/dist/lib/lib/utils.js +0 -6
- package/dist/lib/lib/utils.js.map +0 -1
- package/dist/mcp/connectors/asana.d.ts +0 -2
- package/dist/mcp/connectors/asana.js +0 -20
- package/dist/mcp/connectors/asana.js.map +0 -1
- package/dist/mcp/connectors/definitions.d.ts +0 -45
- package/dist/mcp/connectors/definitions.js +0 -32
- package/dist/mcp/connectors/definitions.js.map +0 -1
- package/dist/mcp/connectors/figma.d.ts +0 -5
- package/dist/mcp/connectors/figma.js +0 -21
- package/dist/mcp/connectors/figma.js.map +0 -1
- package/dist/mcp/connectors/gdrive.d.ts +0 -2
- package/dist/mcp/connectors/gdrive.js +0 -20
- package/dist/mcp/connectors/gdrive.js.map +0 -1
- package/dist/mcp/connectors/granola.d.ts +0 -2
- package/dist/mcp/connectors/granola.js +0 -12
- package/dist/mcp/connectors/granola.js.map +0 -1
- package/dist/mcp/connectors/linear.d.ts +0 -2
- package/dist/mcp/connectors/linear.js +0 -19
- package/dist/mcp/connectors/linear.js.map +0 -1
- package/dist/mcp/connectors/obsidian.d.ts +0 -2
- package/dist/mcp/connectors/obsidian.js +0 -19
- package/dist/mcp/connectors/obsidian.js.map +0 -1
- package/dist/mcp/connectors/pipedrive.d.ts +0 -2
- package/dist/mcp/connectors/pipedrive.js +0 -20
- package/dist/mcp/connectors/pipedrive.js.map +0 -1
- package/dist/mcp/connectors/slack.d.ts +0 -2
- package/dist/mcp/connectors/slack.js +0 -21
- package/dist/mcp/connectors/slack.js.map +0 -1
- package/dist/mcp/server-oauth-provider.d.ts +0 -56
- package/dist/mcp/server-oauth-provider.js +0 -142
- package/dist/mcp/server-oauth-provider.js.map +0 -1
- package/dist/server/chrome/chrome.css +0 -691
- package/dist/server/chrome/chrome.js +0 -374
- package/dist/server/collab-authority.d.ts +0 -70
- package/dist/server/collab-authority.js +0 -218
- package/dist/server/collab-authority.js.map +0 -1
- package/dist/server/collab.d.ts +0 -29
- package/dist/server/collab.js +0 -195
- package/dist/server/collab.js.map +0 -1
- package/dist/server/commit-scheduler.d.ts +0 -39
- package/dist/server/commit-scheduler.js +0 -113
- package/dist/server/commit-scheduler.js.map +0 -1
- package/dist/server/plugin-loader.d.ts +0 -53
- package/dist/server/plugin-loader.js +0 -155
- package/dist/server/plugin-loader.js.map +0 -1
- package/dist/server/routes/collab.d.ts +0 -6
- package/dist/server/routes/collab.js +0 -10
- package/dist/server/routes/collab.js.map +0 -1
- package/dist/server/routes/git-api.d.ts +0 -9
- package/dist/server/routes/git-api.js +0 -82
- package/dist/server/routes/git-api.js.map +0 -1
- package/dist/server/routes/meeting-ingest-api.d.ts +0 -15
- package/dist/server/routes/meeting-ingest-api.js +0 -321
- package/dist/server/routes/meeting-ingest-api.js.map +0 -1
- package/dist/server/routes/sync-api.d.ts +0 -26
- package/dist/server/routes/sync-api.js +0 -814
- package/dist/server/routes/sync-api.js.map +0 -1
- package/dist/server/routes/webhook.d.ts +0 -14
- package/dist/server/routes/webhook.js +0 -102
- package/dist/server/routes/webhook.js.map +0 -1
- package/dist/services/github-provisioner.d.ts +0 -36
- package/dist/services/github-provisioner.js +0 -126
- package/dist/services/github-provisioner.js.map +0 -1
- package/dist/services/github-service.d.ts +0 -99
- package/dist/services/github-service.js +0 -310
- package/dist/services/github-service.js.map +0 -1
- package/dist/services/insights.d.ts +0 -38
- package/dist/services/insights.js +0 -246
- package/dist/services/insights.js.map +0 -1
- package/dist/services/sync/collection-sync.d.ts +0 -60
- package/dist/services/sync/collection-sync.js +0 -509
- package/dist/services/sync/collection-sync.js.map +0 -1
- package/dist/services/sync/commit.d.ts +0 -60
- package/dist/services/sync/commit.js +0 -354
- package/dist/services/sync/commit.js.map +0 -1
- package/dist/services/sync/context-index.d.ts +0 -69
- package/dist/services/sync/context-index.js +0 -280
- package/dist/services/sync/context-index.js.map +0 -1
- package/dist/services/sync/data-fetcher.d.ts +0 -31
- package/dist/services/sync/data-fetcher.js +0 -12
- package/dist/services/sync/data-fetcher.js.map +0 -1
- package/dist/services/sync/derive.d.ts +0 -34
- package/dist/services/sync/derive.js +0 -164
- package/dist/services/sync/derive.js.map +0 -1
- package/dist/services/sync/enrichment-state.d.ts +0 -31
- package/dist/services/sync/enrichment-state.js +0 -63
- package/dist/services/sync/enrichment-state.js.map +0 -1
- package/dist/services/sync/enrichment.d.ts +0 -25
- package/dist/services/sync/enrichment.js +0 -121
- package/dist/services/sync/enrichment.js.map +0 -1
- package/dist/services/sync/entity-refresh.d.ts +0 -30
- package/dist/services/sync/entity-refresh.js +0 -275
- package/dist/services/sync/entity-refresh.js.map +0 -1
- package/dist/services/sync/frontmatter-extractor.d.ts +0 -40
- package/dist/services/sync/frontmatter-extractor.js +0 -279
- package/dist/services/sync/frontmatter-extractor.js.map +0 -1
- package/dist/services/sync/graph-match-state.d.ts +0 -33
- package/dist/services/sync/graph-match-state.js +0 -61
- package/dist/services/sync/graph-match-state.js.map +0 -1
- package/dist/services/sync/graph-match.d.ts +0 -53
- package/dist/services/sync/graph-match.js +0 -316
- package/dist/services/sync/graph-match.js.map +0 -1
- package/dist/services/sync/graphrag-client.d.ts +0 -43
- package/dist/services/sync/graphrag-client.js +0 -94
- package/dist/services/sync/graphrag-client.js.map +0 -1
- package/dist/services/sync/graphrag-config.d.ts +0 -16
- package/dist/services/sync/graphrag-config.js +0 -39
- package/dist/services/sync/graphrag-config.js.map +0 -1
- package/dist/services/sync/graphrag-context.d.ts +0 -14
- package/dist/services/sync/graphrag-context.js +0 -109
- package/dist/services/sync/graphrag-context.js.map +0 -1
- package/dist/services/sync/graphrag-indexer.d.ts +0 -30
- package/dist/services/sync/graphrag-indexer.js +0 -358
- package/dist/services/sync/graphrag-indexer.js.map +0 -1
- package/dist/services/sync/llm.d.ts +0 -32
- package/dist/services/sync/llm.js +0 -115
- package/dist/services/sync/llm.js.map +0 -1
- package/dist/services/sync/mcp-client.d.ts +0 -71
- package/dist/services/sync/mcp-client.js +0 -299
- package/dist/services/sync/mcp-client.js.map +0 -1
- package/dist/services/sync/model-factory.d.ts +0 -13
- package/dist/services/sync/model-factory.js +0 -38
- package/dist/services/sync/model-factory.js.map +0 -1
- package/dist/services/sync/name-quality.d.ts +0 -31
- package/dist/services/sync/name-quality.js +0 -60
- package/dist/services/sync/name-quality.js.map +0 -1
- package/dist/services/sync/output-schemas.d.ts +0 -92
- package/dist/services/sync/output-schemas.js +0 -43
- package/dist/services/sync/output-schemas.js.map +0 -1
- package/dist/services/sync/prompts.d.ts +0 -19
- package/dist/services/sync/prompts.js +0 -128
- package/dist/services/sync/prompts.js.map +0 -1
- package/dist/services/sync/reconciler.d.ts +0 -48
- package/dist/services/sync/reconciler.js +0 -294
- package/dist/services/sync/reconciler.js.map +0 -1
- package/dist/services/sync/rest-client.d.ts +0 -40
- package/dist/services/sync/rest-client.js +0 -100
- package/dist/services/sync/rest-client.js.map +0 -1
- package/dist/services/sync/source-config.d.ts +0 -67
- package/dist/services/sync/source-config.js +0 -304
- package/dist/services/sync/source-config.js.map +0 -1
- package/dist/services/sync/source-definitions/asana.d.ts +0 -14
- package/dist/services/sync/source-definitions/asana.js +0 -42
- package/dist/services/sync/source-definitions/asana.js.map +0 -1
- package/dist/services/sync/source-definitions/definitions.d.ts +0 -8
- package/dist/services/sync/source-definitions/definitions.js +0 -8
- package/dist/services/sync/source-definitions/definitions.js.map +0 -1
- package/dist/services/sync/source-definitions/gdrive.d.ts +0 -16
- package/dist/services/sync/source-definitions/gdrive.js +0 -68
- package/dist/services/sync/source-definitions/gdrive.js.map +0 -1
- package/dist/services/sync/source-definitions/granola.d.ts +0 -2
- package/dist/services/sync/source-definitions/granola.js +0 -21
- package/dist/services/sync/source-definitions/granola.js.map +0 -1
- package/dist/services/sync/source-definitions/linear.d.ts +0 -2
- package/dist/services/sync/source-definitions/linear.js +0 -62
- package/dist/services/sync/source-definitions/linear.js.map +0 -1
- package/dist/services/sync/source-definitions/obsidian.d.ts +0 -2
- package/dist/services/sync/source-definitions/obsidian.js +0 -55
- package/dist/services/sync/source-definitions/obsidian.js.map +0 -1
- package/dist/services/sync/source-definitions/pipedrive.d.ts +0 -2
- package/dist/services/sync/source-definitions/pipedrive.js +0 -43
- package/dist/services/sync/source-definitions/pipedrive.js.map +0 -1
- package/dist/services/sync/staging.d.ts +0 -53
- package/dist/services/sync/staging.js +0 -130
- package/dist/services/sync/staging.js.map +0 -1
- package/dist/services/sync/structured-extractor.d.ts +0 -57
- package/dist/services/sync/structured-extractor.js +0 -584
- package/dist/services/sync/structured-extractor.js.map +0 -1
- package/dist/services/sync/sync-runner.d.ts +0 -32
- package/dist/services/sync/sync-runner.js +0 -195
- package/dist/services/sync/sync-runner.js.map +0 -1
- package/dist/services/sync/sync-state.d.ts +0 -43
- package/dist/services/sync/sync-state.js +0 -154
- package/dist/services/sync/sync-state.js.map +0 -1
- package/dist/services/sync/types.d.ts +0 -381
- package/dist/services/sync/types.js +0 -8
- package/dist/services/sync/types.js.map +0 -1
- package/dist/services/sync/unstructured-extractor.d.ts +0 -27
- package/dist/services/sync/unstructured-extractor.js +0 -185
- package/dist/services/sync/unstructured-extractor.js.map +0 -1
- package/dist/utils/merge-resolver.d.ts +0 -59
- package/dist/utils/merge-resolver.js +0 -303
- package/dist/utils/merge-resolver.js.map +0 -1
- package/dist/utils/workspace-config.d.ts +0 -8
- package/dist/utils/workspace-config.js +0 -22
- package/dist/utils/workspace-config.js.map +0 -1
- package/dist/web/_app/immutable/assets/0.DdizXOKi.css +0 -1
- package/dist/web/_app/immutable/assets/10.BUrHkYry.css +0 -1
- package/dist/web/_app/immutable/assets/2.n7-yW_Fs.css +0 -1
- package/dist/web/_app/immutable/assets/3.BtaZagnv.css +0 -1
- package/dist/web/_app/immutable/assets/4.DSiqtN6T.css +0 -1
- package/dist/web/_app/immutable/assets/5.DFeGxLYf.css +0 -1
- package/dist/web/_app/immutable/assets/6.CquhUpOu.css +0 -1
- package/dist/web/_app/immutable/assets/7.CjbDRbuG.css +0 -1
- package/dist/web/_app/immutable/assets/8.S1QdUGNM.css +0 -1
- package/dist/web/_app/immutable/assets/9.CT4xL4K3.css +0 -1
- package/dist/web/_app/immutable/assets/Copy.FS8bdfxr.css +0 -1
- package/dist/web/_app/immutable/assets/Toaster.rN8r_Hzv.css +0 -1
- package/dist/web/_app/immutable/assets/ViewToolbar.D-QW2oKe.css +0 -1
- package/dist/web/_app/immutable/assets/index.D6tMDJWk.css +0 -1
- package/dist/web/_app/immutable/chunks/37NdyH6G.js +0 -32
- package/dist/web/_app/immutable/chunks/4Hhzb6pv.js +0 -1
- package/dist/web/_app/immutable/chunks/72bZS3G9.js +0 -1
- package/dist/web/_app/immutable/chunks/7S2LGqoP.js +0 -2
- package/dist/web/_app/immutable/chunks/B340SUKR.js +0 -1
- package/dist/web/_app/immutable/chunks/BB_5th5W.js +0 -3383
- package/dist/web/_app/immutable/chunks/BI8HVuKu.js +0 -1
- package/dist/web/_app/immutable/chunks/BO9dsUba.js +0 -1
- package/dist/web/_app/immutable/chunks/BS2rFAVq.js +0 -1
- package/dist/web/_app/immutable/chunks/BSsDC_p4.js +0 -1
- package/dist/web/_app/immutable/chunks/BTX2Jr8_.js +0 -1
- package/dist/web/_app/immutable/chunks/Bsacq2UX.js +0 -1
- package/dist/web/_app/immutable/chunks/ByunV8un.js +0 -1
- package/dist/web/_app/immutable/chunks/C7VoTosa.js +0 -2
- package/dist/web/_app/immutable/chunks/CDV5Q7RN.js +0 -1
- package/dist/web/_app/immutable/chunks/CJ8__CWt.js +0 -1
- package/dist/web/_app/immutable/chunks/CJUKmosC.js +0 -5
- package/dist/web/_app/immutable/chunks/CSVbGg_b.js +0 -5
- package/dist/web/_app/immutable/chunks/CT6oIU-C.js +0 -1
- package/dist/web/_app/immutable/chunks/CTRxNfZk.js +0 -1
- package/dist/web/_app/immutable/chunks/CWQRQXxy.js +0 -1
- package/dist/web/_app/immutable/chunks/CXAIHzUX.js +0 -1
- package/dist/web/_app/immutable/chunks/CXH6iFbA.js +0 -1
- package/dist/web/_app/immutable/chunks/CX_61fY8.js +0 -5
- package/dist/web/_app/immutable/chunks/CYrVHOHA.js +0 -1
- package/dist/web/_app/immutable/chunks/CaQ0MRCC.js +0 -1
- package/dist/web/_app/immutable/chunks/CdeYcEuU.js +0 -1
- package/dist/web/_app/immutable/chunks/CmCtpZ1Y.js +0 -1
- package/dist/web/_app/immutable/chunks/CqkleIqs.js +0 -1
- package/dist/web/_app/immutable/chunks/CrdV0ttd.js +0 -1
- package/dist/web/_app/immutable/chunks/CscoF-YL.js +0 -18
- package/dist/web/_app/immutable/chunks/Cx4YdFMk.js +0 -1
- package/dist/web/_app/immutable/chunks/D7ZqAKi9.js +0 -3
- package/dist/web/_app/immutable/chunks/DF6CqIgb.js +0 -1
- package/dist/web/_app/immutable/chunks/DGbA7IXh.js +0 -2
- package/dist/web/_app/immutable/chunks/DUScXtWD.js +0 -2
- package/dist/web/_app/immutable/chunks/DYsIuENi.js +0 -1
- package/dist/web/_app/immutable/chunks/DbbB6Up5.js +0 -1
- package/dist/web/_app/immutable/chunks/DnL9f0lc.js +0 -7
- package/dist/web/_app/immutable/chunks/Dnnz2_is.js +0 -1
- package/dist/web/_app/immutable/chunks/DtM5cEDu.js +0 -1
- package/dist/web/_app/immutable/chunks/DviMV1EY.js +0 -4
- package/dist/web/_app/immutable/chunks/Eqahi7_S.js +0 -2
- package/dist/web/_app/immutable/chunks/FdYTYKiQ.js +0 -1
- package/dist/web/_app/immutable/chunks/O9Eb9k00.js +0 -1
- package/dist/web/_app/immutable/chunks/PPVm8Dsz.js +0 -1
- package/dist/web/_app/immutable/chunks/QF8MAmnc.js +0 -1
- package/dist/web/_app/immutable/chunks/UjzxCpxn.js +0 -1
- package/dist/web/_app/immutable/chunks/WSUKABI_.js +0 -1
- package/dist/web/_app/immutable/chunks/Y90OgS-9.js +0 -1
- package/dist/web/_app/immutable/chunks/cLyZlkXv.js +0 -1
- package/dist/web/_app/immutable/chunks/iDtAARVW.js +0 -2
- package/dist/web/_app/immutable/chunks/oC_W7W7p.js +0 -1
- package/dist/web/_app/immutable/chunks/rJdWIgh-.js +0 -1
- package/dist/web/_app/immutable/chunks/tvOsokaa.js +0 -1
- package/dist/web/_app/immutable/chunks/uLEXaPwE.js +0 -1
- package/dist/web/_app/immutable/chunks/vSaooFHB.js +0 -1
- package/dist/web/_app/immutable/entry/app.CaogB_bT.js +0 -2
- package/dist/web/_app/immutable/entry/start.wZ7yhkXM.js +0 -1
- package/dist/web/_app/immutable/nodes/0.Cq712UJU.js +0 -2
- package/dist/web/_app/immutable/nodes/1.Cf_Sxi8f.js +0 -1
- package/dist/web/_app/immutable/nodes/10.EhMTpB-W.js +0 -1
- package/dist/web/_app/immutable/nodes/2.pdWVc6Tw.js +0 -168
- package/dist/web/_app/immutable/nodes/3.DP7cSzLO.js +0 -1
- package/dist/web/_app/immutable/nodes/4.BASs7ojR.js +0 -12
- package/dist/web/_app/immutable/nodes/5.ZimC-3ag.js +0 -4
- package/dist/web/_app/immutable/nodes/6.CnZ2TeIl.js +0 -2
- package/dist/web/_app/immutable/nodes/7.hxwrWQeK.js +0 -2
- package/dist/web/_app/immutable/nodes/8.DEJ5W3rM.js +0 -1
- package/dist/web/_app/immutable/nodes/9.CIrEHtYu.js +0 -1
|
@@ -0,0 +1,149 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Workspace access service — the single architectural boundary through which
|
|
3
|
+
* routes resolve a graph (or read an entity) for an identified user.
|
|
4
|
+
*
|
|
5
|
+
* Why this exists as a service, not a helper:
|
|
6
|
+
* The helpers in `access-control.ts` are correct but opt-in — a route that
|
|
7
|
+
* forgets to call `hasRepoAccess()` before `workspaceManager.getGraph()`
|
|
8
|
+
* silently bypasses access control. After a security audit flagged this as
|
|
9
|
+
* an architectural risk, we moved the "give me a graph for repo X as user U"
|
|
10
|
+
* resolution behind this service so the act of getting a graph IS the
|
|
11
|
+
* access check. There is no method on this surface that returns a graph
|
|
12
|
+
* without first running the check; bypassing it requires reaching past
|
|
13
|
+
* the service to `WorkspaceManager.getGraph()` directly, which is what
|
|
14
|
+
* review now looks for.
|
|
15
|
+
*
|
|
16
|
+
* Routes should call `graphForRead`/`graphForWrite`/`graphForAdmin` instead
|
|
17
|
+
* of `workspaceManager.getGraph(repo)`. The few internal callers that still
|
|
18
|
+
* need raw graph access (SessionManager, YjsManager, vector indexer, etc.)
|
|
19
|
+
* are not user-facing transports and operate with the workspace's own
|
|
20
|
+
* identity, not a request user — they are explicitly out of scope for this
|
|
21
|
+
* boundary.
|
|
22
|
+
*/
|
|
23
|
+
import { canWriteRepo, filterWikilinks, getAccessibleEntityIds, getAccessibleRepos, hasRepoAccess, isFolderAdminOrOwner, } from './access-control.js';
|
|
24
|
+
/**
|
|
25
|
+
* Thrown when an identified user attempts to resolve a graph or read an
|
|
26
|
+
* entity in a folder they cannot access. The route layer maps `kind` to an
|
|
27
|
+
* HTTP status: `not_found` → 404 (don't leak existence to non-members),
|
|
28
|
+
* `forbidden` → 403 (caller can see the folder but lacks the requested role).
|
|
29
|
+
*/
|
|
30
|
+
export class AccessDeniedError extends Error {
|
|
31
|
+
kind;
|
|
32
|
+
repoName;
|
|
33
|
+
code = 'ACCESS_DENIED';
|
|
34
|
+
constructor(kind, repoName, message) {
|
|
35
|
+
super(message);
|
|
36
|
+
this.kind = kind;
|
|
37
|
+
this.repoName = repoName;
|
|
38
|
+
this.name = 'AccessDeniedError';
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
export class WorkspaceAccessService {
|
|
42
|
+
workspaceManager;
|
|
43
|
+
authService;
|
|
44
|
+
constructor(workspaceManager, authService) {
|
|
45
|
+
this.workspaceManager = workspaceManager;
|
|
46
|
+
this.authService = authService;
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* Resolve a graph for read. Identified users without read access get a
|
|
50
|
+
* not_found denial — we deliberately mirror the "folder doesn't exist"
|
|
51
|
+
* 404 path so non-members can't probe folder existence by status code.
|
|
52
|
+
* Unidentified callers (API key / open mode) skip the check, matching
|
|
53
|
+
* legacy web behavior.
|
|
54
|
+
*/
|
|
55
|
+
graphForRead(user, repoName) {
|
|
56
|
+
// ENFORCEMENT POINT: every read of repo content goes through here.
|
|
57
|
+
// Removing this check would let any authenticated user fetch entries
|
|
58
|
+
// from any folder, including personal/private folders.
|
|
59
|
+
if (!hasRepoAccess(user, repoName, this.workspaceManager, this.authService)) {
|
|
60
|
+
throw new AccessDeniedError('not_found', repoName, `Folder "${repoName}" not found`);
|
|
61
|
+
}
|
|
62
|
+
return this.workspaceManager.getGraph(repoName);
|
|
63
|
+
}
|
|
64
|
+
/**
|
|
65
|
+
* Resolve a graph for write (create / update / delete entities, move
|
|
66
|
+
* folders, etc.). A caller who can read but not write gets a forbidden
|
|
67
|
+
* denial so the UI can render an actionable role-required message.
|
|
68
|
+
*/
|
|
69
|
+
graphForWrite(user, repoName) {
|
|
70
|
+
// ENFORCEMENT POINT: write must be checked separately from read because
|
|
71
|
+
// editor and admin both read but only members with editor/admin role
|
|
72
|
+
// can write. A future refactor that collapses this into graphForRead
|
|
73
|
+
// would silently grant write to read-only collaborators.
|
|
74
|
+
if (!hasRepoAccess(user, repoName, this.workspaceManager, this.authService)) {
|
|
75
|
+
throw new AccessDeniedError('not_found', repoName, `Folder "${repoName}" not found`);
|
|
76
|
+
}
|
|
77
|
+
if (!canWriteRepo(user, repoName, this.workspaceManager, this.authService)) {
|
|
78
|
+
throw new AccessDeniedError('forbidden', repoName, `You need editor or admin role to modify entries in "${repoName}".`);
|
|
79
|
+
}
|
|
80
|
+
return this.workspaceManager.getGraph(repoName);
|
|
81
|
+
}
|
|
82
|
+
/**
|
|
83
|
+
* Resolve a graph for folder-admin operations (delete folder, rename
|
|
84
|
+
* folder, manage members). Workspace owners are admins on shared folders
|
|
85
|
+
* but NOT on private/solo folders — see `isFolderAdminOrOwner` for the
|
|
86
|
+
* full rule. This is enforced separately because some operations (renaming
|
|
87
|
+
* a folder) are catastrophic if a regular editor can perform them.
|
|
88
|
+
*/
|
|
89
|
+
graphForAdmin(user, repoName) {
|
|
90
|
+
// ENFORCEMENT POINT: admin-only operations must clear the folder-admin
|
|
91
|
+
// bar in addition to read access. Editors must NOT be able to rename or
|
|
92
|
+
// delete the folder out from under their fellow members.
|
|
93
|
+
if (!hasRepoAccess(user, repoName, this.workspaceManager, this.authService)) {
|
|
94
|
+
throw new AccessDeniedError('not_found', repoName, `Folder "${repoName}" not found`);
|
|
95
|
+
}
|
|
96
|
+
if (!isFolderAdminOrOwner(user, repoName, this.workspaceManager, this.authService)) {
|
|
97
|
+
throw new AccessDeniedError('forbidden', repoName, `Folder admin access required for "${repoName}".`);
|
|
98
|
+
}
|
|
99
|
+
return this.workspaceManager.getGraph(repoName);
|
|
100
|
+
}
|
|
101
|
+
/**
|
|
102
|
+
* Read a single entity through the access boundary. Provided as a
|
|
103
|
+
* convenience so routes that just need an entity body don't have to
|
|
104
|
+
* resolve the graph and call `.get()` themselves — every such call site
|
|
105
|
+
* was a place a future refactor could accidentally bypass enforcement.
|
|
106
|
+
*/
|
|
107
|
+
readEntity(user, repoName, entityType, entityId) {
|
|
108
|
+
// ENFORCEMENT POINT: even single-entity reads must go through the read
|
|
109
|
+
// gate. Without this, a caller that has the (repo, type, id) tuple from
|
|
110
|
+
// any source (search results, agent output, log line) could fetch its
|
|
111
|
+
// body bypassing folder access.
|
|
112
|
+
const graph = this.graphForRead(user, repoName);
|
|
113
|
+
return graph.get(entityType, entityId);
|
|
114
|
+
}
|
|
115
|
+
/** List repos the user may read. Wraps the helper for symmetry. */
|
|
116
|
+
listReadableRepos(user) {
|
|
117
|
+
return getAccessibleRepos(user, this.workspaceManager, this.authService);
|
|
118
|
+
}
|
|
119
|
+
/** Set of entity IDs visible to the user across their accessible folders. */
|
|
120
|
+
listAccessibleEntityIds(user) {
|
|
121
|
+
return getAccessibleEntityIds(user, this.workspaceManager, this.authService);
|
|
122
|
+
}
|
|
123
|
+
/** Filter a wikilink list to only entities the caller can access. */
|
|
124
|
+
filterWikilinks(wikilinks, accessibleIds) {
|
|
125
|
+
return filterWikilinks(wikilinks, accessibleIds);
|
|
126
|
+
}
|
|
127
|
+
/** Boolean check — for routes that need a 404/200 branch without a graph. */
|
|
128
|
+
canRead(user, repoName) {
|
|
129
|
+
return hasRepoAccess(user, repoName, this.workspaceManager, this.authService);
|
|
130
|
+
}
|
|
131
|
+
/** Boolean check — for routes that need a 403/200 branch without a graph. */
|
|
132
|
+
canWrite(user, repoName) {
|
|
133
|
+
return canWriteRepo(user, repoName, this.workspaceManager, this.authService);
|
|
134
|
+
}
|
|
135
|
+
/** Boolean check — for routes that need a 403/200 branch without a graph. */
|
|
136
|
+
canAdmin(user, repoName) {
|
|
137
|
+
return isFolderAdminOrOwner(user, repoName, this.workspaceManager, this.authService);
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
/**
|
|
141
|
+
* Map an AccessDeniedError to an HTTP reply. Routes catch the error at the
|
|
142
|
+
* top of each handler and call this — keeps the per-route boilerplate to
|
|
143
|
+
* a single try/catch instead of two checks per access kind.
|
|
144
|
+
*/
|
|
145
|
+
export function sendAccessDenied(reply, err) {
|
|
146
|
+
const status = err.kind === 'not_found' ? 404 : 403;
|
|
147
|
+
return reply.status(status).send({ error: err.message });
|
|
148
|
+
}
|
|
149
|
+
//# sourceMappingURL=workspace-access.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"workspace-access.js","sourceRoot":"","sources":["../../src/services/workspace-access.ts"],"names":[],"mappings":"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"}
|
package/dist/utils/git.d.ts
CHANGED
|
@@ -3,13 +3,17 @@
|
|
|
3
3
|
* Extracted so tests can mock them without mocking the built-in child_process.
|
|
4
4
|
*/
|
|
5
5
|
export type PullResult = 'updated' | 'up-to-date' | 'diverged';
|
|
6
|
-
export type PushResult = 'pushed' | 'nothing-to-push' | 'rejected';
|
|
6
|
+
export type PushResult = 'pushed' | 'nothing-to-push' | 'rejected' | 'not-found';
|
|
7
7
|
export interface GitPullOptions {
|
|
8
8
|
/** Basic Auth credentials for the embedded git server (injected via GIT_ASKPASS). */
|
|
9
9
|
credentials?: {
|
|
10
10
|
username: string;
|
|
11
11
|
password: string;
|
|
12
12
|
};
|
|
13
|
+
/** Extra HTTP headers (e.g. `X-Studiograph-Include-Private: 1`). Each
|
|
14
|
+
* is passed via `git -c http.extraHeader=...`. Used for owner-gated
|
|
15
|
+
* admin escalation when pulling private folders. */
|
|
16
|
+
extraHeaders?: string[];
|
|
13
17
|
}
|
|
14
18
|
/**
|
|
15
19
|
* Pull the latest changes in a local git repo using fetch + fast-forward merge.
|
|
@@ -43,6 +47,13 @@ export declare function gitHasRemote(repoPath: string): boolean;
|
|
|
43
47
|
* Set or update the 'origin' remote URL on a local git repo.
|
|
44
48
|
*/
|
|
45
49
|
export declare function gitSetRemote(repoPath: string, url: string): void;
|
|
50
|
+
export interface GitPushOptions {
|
|
51
|
+
/** Extra HTTP headers to send with the git request, e.g.
|
|
52
|
+
* `['X-Studiograph-Include-Private: 1']`. Each is passed via
|
|
53
|
+
* `git -c http.extraHeader=...`. Used for owner-gated admin
|
|
54
|
+
* escalation when pushing to private folders. */
|
|
55
|
+
extraHeaders?: string[];
|
|
56
|
+
}
|
|
46
57
|
/**
|
|
47
58
|
* Push local commits to origin with Basic Auth credentials via GIT_ASKPASS.
|
|
48
59
|
* Used for pushing to the embedded git server.
|
|
@@ -50,7 +61,7 @@ export declare function gitSetRemote(repoPath: string, url: string): void;
|
|
|
50
61
|
export declare function gitPushWithCredentials(repoPath: string, credentials: {
|
|
51
62
|
username: string;
|
|
52
63
|
password: string;
|
|
53
|
-
}): PushResult;
|
|
64
|
+
}, opts?: GitPushOptions): PushResult;
|
|
54
65
|
export interface GitCloneOptions {
|
|
55
66
|
/** When true, suppress all output and disable interactive prompts (for server use). */
|
|
56
67
|
silent?: boolean;
|
|
@@ -59,6 +70,10 @@ export interface GitCloneOptions {
|
|
|
59
70
|
username: string;
|
|
60
71
|
password: string;
|
|
61
72
|
};
|
|
73
|
+
/** Extra HTTP headers (e.g. `X-Studiograph-Include-Private: 1`). Each
|
|
74
|
+
* is passed via `git -c http.extraHeader=...`. Used for owner-gated
|
|
75
|
+
* admin escalation when cloning private folders. */
|
|
76
|
+
extraHeaders?: string[];
|
|
62
77
|
}
|
|
63
78
|
/**
|
|
64
79
|
* Clone a remote repository to a local path.
|
package/dist/utils/git.js
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
* Thin wrappers around git shell operations.
|
|
3
3
|
* Extracted so tests can mock them without mocking the built-in child_process.
|
|
4
4
|
*/
|
|
5
|
-
import {
|
|
5
|
+
import { execFileSync, spawnSync } from 'child_process';
|
|
6
6
|
import { writeFileSync, chmodSync, unlinkSync } from 'fs';
|
|
7
7
|
import { join } from 'path';
|
|
8
8
|
import { tmpdir } from 'os';
|
|
@@ -33,9 +33,10 @@ export function gitPull(repoPath, opts) {
|
|
|
33
33
|
}
|
|
34
34
|
// Fetch — clear credential.helper only when injecting our own credentials so that
|
|
35
35
|
// macOS Keychain / stored tokens continue to work for GitHub remotes.
|
|
36
|
+
const headerArgs = (opts?.extraHeaders ?? []).flatMap(h => ['-c', `http.extraHeader=${h}`]);
|
|
36
37
|
const fetchArgs = creds
|
|
37
|
-
? ['-c', 'credential.helper=', 'fetch', '--prune']
|
|
38
|
-
: ['fetch', '--prune'];
|
|
38
|
+
? ['-c', 'credential.helper=', ...headerArgs, 'fetch', '--prune']
|
|
39
|
+
: [...headerArgs, 'fetch', '--prune'];
|
|
39
40
|
const fetch = spawnSync('git', fetchArgs, { cwd: repoPath, encoding: 'utf-8', stdio: 'pipe', env });
|
|
40
41
|
if (askpassPath) {
|
|
41
42
|
try {
|
|
@@ -72,6 +73,10 @@ export function gitPush(repoPath) {
|
|
|
72
73
|
if (combined.includes('non-fast-forward') || combined.includes('fetch first') || combined.includes('rejected')) {
|
|
73
74
|
return 'rejected';
|
|
74
75
|
}
|
|
76
|
+
// See gitPushWithCredentials for the rationale on the soft `not-found` state.
|
|
77
|
+
if (combined.includes('Repository not found') || combined.includes('not found') || combined.includes('404')) {
|
|
78
|
+
return 'not-found';
|
|
79
|
+
}
|
|
75
80
|
throw new Error((combined || `git push failed with exit ${result.status}`).trim());
|
|
76
81
|
}
|
|
77
82
|
/**
|
|
@@ -112,7 +117,7 @@ export function gitSetRemote(repoPath, url) {
|
|
|
112
117
|
* Push local commits to origin with Basic Auth credentials via GIT_ASKPASS.
|
|
113
118
|
* Used for pushing to the embedded git server.
|
|
114
119
|
*/
|
|
115
|
-
export function gitPushWithCredentials(repoPath, credentials) {
|
|
120
|
+
export function gitPushWithCredentials(repoPath, credentials, opts = {}) {
|
|
116
121
|
const askpassPath = join(tmpdir(), `.studiograph-askpass-${process.pid}`);
|
|
117
122
|
writeFileSync(askpassPath, [
|
|
118
123
|
'#!/bin/sh',
|
|
@@ -127,8 +132,9 @@ export function gitPushWithCredentials(repoPath, credentials) {
|
|
|
127
132
|
GIT_ASKPASS: askpassPath,
|
|
128
133
|
GIT_TERMINAL_PROMPT: '0',
|
|
129
134
|
};
|
|
135
|
+
const headerArgs = (opts.extraHeaders ?? []).flatMap(h => ['-c', `http.extraHeader=${h}`]);
|
|
130
136
|
try {
|
|
131
|
-
const result = spawnSync('git', ['-c', 'credential.helper=', 'push', '-u', 'origin', 'main'], {
|
|
137
|
+
const result = spawnSync('git', ['-c', 'credential.helper=', ...headerArgs, 'push', '-u', 'origin', 'main'], {
|
|
132
138
|
cwd: repoPath, encoding: 'utf-8', env,
|
|
133
139
|
});
|
|
134
140
|
if (result.status === 0) {
|
|
@@ -139,6 +145,15 @@ export function gitPushWithCredentials(repoPath, credentials) {
|
|
|
139
145
|
if (combined.includes('non-fast-forward') || combined.includes('fetch first') || combined.includes('rejected')) {
|
|
140
146
|
return 'rejected';
|
|
141
147
|
}
|
|
148
|
+
// `not-found` covers the case where the local clone carries a folder
|
|
149
|
+
// that doesn't exist on the server for the current user — a stale
|
|
150
|
+
// clone that pre-dates an access tightening, or a personal folder
|
|
151
|
+
// owned by another team member that workspace.json still references.
|
|
152
|
+
// Surface it as a soft state so callers can skip + suggest cleanup
|
|
153
|
+
// instead of failing the whole push run.
|
|
154
|
+
if (combined.includes('Repository not found') || combined.includes('not found') || combined.includes('404')) {
|
|
155
|
+
return 'not-found';
|
|
156
|
+
}
|
|
142
157
|
throw new Error((combined || `git push failed with exit ${result.status}`).trim());
|
|
143
158
|
}
|
|
144
159
|
finally {
|
|
@@ -185,8 +200,9 @@ export function gitClone(remoteUrl, localPath, opts) {
|
|
|
185
200
|
}
|
|
186
201
|
// If !silent and no credentials/token, leave stdio inherited so Git can prompt the user
|
|
187
202
|
const stdio = (hasCredentials || silent) ? 'pipe' : 'inherit';
|
|
203
|
+
const headerArgs = (opts?.extraHeaders ?? []).flatMap(h => ['-c', `http.extraHeader=${h}`]);
|
|
188
204
|
try {
|
|
189
|
-
|
|
205
|
+
execFileSync('git', ['-c', 'credential.helper=', ...headerArgs, 'clone', remoteUrl, localPath], { stdio, env, timeout: 120_000 });
|
|
190
206
|
}
|
|
191
207
|
finally {
|
|
192
208
|
// Clean up askpass script
|
|
@@ -204,7 +220,7 @@ export function gitClone(remoteUrl, localPath, opts) {
|
|
|
204
220
|
*/
|
|
205
221
|
export function getGitConfig(key) {
|
|
206
222
|
try {
|
|
207
|
-
return
|
|
223
|
+
return execFileSync('git', ['config', key], { stdio: 'pipe' }).toString().trim() || undefined;
|
|
208
224
|
}
|
|
209
225
|
catch {
|
|
210
226
|
return undefined;
|
package/dist/utils/git.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"git.js","sourceRoot":"","sources":["../../src/utils/git.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"git.js","sourceRoot":"","sources":["../../src/utils/git.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Phase 11 — centralized logger.
|
|
3
|
+
*
|
|
4
|
+
* Single import surface for every log call site:
|
|
5
|
+
*
|
|
6
|
+
* import { log } from '../../utils/log.js';
|
|
7
|
+
* log.info('starting up');
|
|
8
|
+
* log.warn('something looks off:', err);
|
|
9
|
+
*
|
|
10
|
+
* All output flows through `sanitize()` from the server middleware so
|
|
11
|
+
* registry-listed secrets, prefix-shaped tokens, URL credentials, and
|
|
12
|
+
* JSON-quoted secret fields are redacted before reaching stdout/stderr.
|
|
13
|
+
*
|
|
14
|
+
* Modes:
|
|
15
|
+
* - Production (`NODE_ENV === 'production'` or `RAILWAY_ENVIRONMENT` set):
|
|
16
|
+
* sanitize() is always applied.
|
|
17
|
+
* - Development (anything else): raw passthrough — easier to debug
|
|
18
|
+
* with real values visible in your own terminal.
|
|
19
|
+
* - Escape hatch (`STUDIOGRAPH_LOG_RAW=1`): force raw mode regardless of
|
|
20
|
+
* environment. Useful when troubleshooting redaction itself.
|
|
21
|
+
*
|
|
22
|
+
* Why expose `log.*` instead of patching console.* directly here? Two
|
|
23
|
+
* reasons. First, the console patch (in serve.ts) is only safe to apply
|
|
24
|
+
* in production — local dev needs real console for debugging. Second,
|
|
25
|
+
* the explicit `log.*` import surface is what the `no-raw-console` lint
|
|
26
|
+
* rule keys off of: any direct `console.*` call outside this file is a
|
|
27
|
+
* lint warning telling the author to migrate.
|
|
28
|
+
*/
|
|
29
|
+
/**
|
|
30
|
+
* The exported logger. Mirrors console's API one-to-one so migration is
|
|
31
|
+
* a search-and-replace: `console.X(...) → log.X(...)`.
|
|
32
|
+
*
|
|
33
|
+
* `log.debug` exists for symmetry; it's silenced in production unless
|
|
34
|
+
* `STUDIOGRAPH_VERBOSE=1`.
|
|
35
|
+
*/
|
|
36
|
+
export declare const log: {
|
|
37
|
+
info: (...args: unknown[]) => void;
|
|
38
|
+
warn: (...args: unknown[]) => void;
|
|
39
|
+
error: (...args: unknown[]) => void;
|
|
40
|
+
debug: (...args: unknown[]) => void;
|
|
41
|
+
};
|
|
42
|
+
export declare function installConsolePatch(): void;
|
|
@@ -0,0 +1,137 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Phase 11 — centralized logger.
|
|
3
|
+
*
|
|
4
|
+
* Single import surface for every log call site:
|
|
5
|
+
*
|
|
6
|
+
* import { log } from '../../utils/log.js';
|
|
7
|
+
* log.info('starting up');
|
|
8
|
+
* log.warn('something looks off:', err);
|
|
9
|
+
*
|
|
10
|
+
* All output flows through `sanitize()` from the server middleware so
|
|
11
|
+
* registry-listed secrets, prefix-shaped tokens, URL credentials, and
|
|
12
|
+
* JSON-quoted secret fields are redacted before reaching stdout/stderr.
|
|
13
|
+
*
|
|
14
|
+
* Modes:
|
|
15
|
+
* - Production (`NODE_ENV === 'production'` or `RAILWAY_ENVIRONMENT` set):
|
|
16
|
+
* sanitize() is always applied.
|
|
17
|
+
* - Development (anything else): raw passthrough — easier to debug
|
|
18
|
+
* with real values visible in your own terminal.
|
|
19
|
+
* - Escape hatch (`STUDIOGRAPH_LOG_RAW=1`): force raw mode regardless of
|
|
20
|
+
* environment. Useful when troubleshooting redaction itself.
|
|
21
|
+
*
|
|
22
|
+
* Why expose `log.*` instead of patching console.* directly here? Two
|
|
23
|
+
* reasons. First, the console patch (in serve.ts) is only safe to apply
|
|
24
|
+
* in production — local dev needs real console for debugging. Second,
|
|
25
|
+
* the explicit `log.*` import surface is what the `no-raw-console` lint
|
|
26
|
+
* rule keys off of: any direct `console.*` call outside this file is a
|
|
27
|
+
* lint warning telling the author to migrate.
|
|
28
|
+
*/
|
|
29
|
+
import { sanitize } from '../server/middleware/sanitize.js';
|
|
30
|
+
/**
|
|
31
|
+
* Decide whether the current process should redact log output. Resolved
|
|
32
|
+
* dynamically on every call so tests can flip env vars between cases.
|
|
33
|
+
*/
|
|
34
|
+
function shouldRedact() {
|
|
35
|
+
if (process.env.STUDIOGRAPH_LOG_RAW === '1')
|
|
36
|
+
return false;
|
|
37
|
+
return (process.env.NODE_ENV === 'production' ||
|
|
38
|
+
!!process.env.RAILWAY_ENVIRONMENT);
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* Sanitize a console-style arg list. Strings flow through sanitize();
|
|
42
|
+
* objects are JSON.stringified, sanitized, and JSON.parsed back into a
|
|
43
|
+
* lightly-modified shape so downstream consumers (Fastify logger, error
|
|
44
|
+
* serializers) can still walk them. Non-serializable args fall back to
|
|
45
|
+
* String() coercion.
|
|
46
|
+
*/
|
|
47
|
+
function maybeSanitizeArgs(args) {
|
|
48
|
+
if (!shouldRedact())
|
|
49
|
+
return args;
|
|
50
|
+
return args.map((a) => {
|
|
51
|
+
if (typeof a === 'string')
|
|
52
|
+
return sanitize(a);
|
|
53
|
+
if (a instanceof Error) {
|
|
54
|
+
// Construct a new Error with sanitized message + stack so the
|
|
55
|
+
// shape survives downstream `instanceof Error` checks. Note: we
|
|
56
|
+
// can't mutate the original because Error.message is read-only
|
|
57
|
+
// on some V8 builds.
|
|
58
|
+
const e = new Error(sanitize(a.message));
|
|
59
|
+
if (a.stack)
|
|
60
|
+
e.stack = sanitize(a.stack);
|
|
61
|
+
// Preserve any additional properties (e.g. `code`).
|
|
62
|
+
Object.assign(e, { ...a });
|
|
63
|
+
return e;
|
|
64
|
+
}
|
|
65
|
+
if (a && typeof a === 'object') {
|
|
66
|
+
try {
|
|
67
|
+
return JSON.parse(sanitize(JSON.stringify(a)));
|
|
68
|
+
}
|
|
69
|
+
catch {
|
|
70
|
+
return sanitize(String(a));
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
return a;
|
|
74
|
+
});
|
|
75
|
+
}
|
|
76
|
+
/**
|
|
77
|
+
* The exported logger. Mirrors console's API one-to-one so migration is
|
|
78
|
+
* a search-and-replace: `console.X(...) → log.X(...)`.
|
|
79
|
+
*
|
|
80
|
+
* `log.debug` exists for symmetry; it's silenced in production unless
|
|
81
|
+
* `STUDIOGRAPH_VERBOSE=1`.
|
|
82
|
+
*/
|
|
83
|
+
export const log = {
|
|
84
|
+
info: (...args) => {
|
|
85
|
+
// eslint-disable-next-line no-console
|
|
86
|
+
console.log(...maybeSanitizeArgs(args));
|
|
87
|
+
},
|
|
88
|
+
warn: (...args) => {
|
|
89
|
+
// eslint-disable-next-line no-console
|
|
90
|
+
console.warn(...maybeSanitizeArgs(args));
|
|
91
|
+
},
|
|
92
|
+
error: (...args) => {
|
|
93
|
+
// eslint-disable-next-line no-console
|
|
94
|
+
console.error(...maybeSanitizeArgs(args));
|
|
95
|
+
},
|
|
96
|
+
debug: (...args) => {
|
|
97
|
+
if (shouldRedact() && process.env.STUDIOGRAPH_VERBOSE !== '1')
|
|
98
|
+
return;
|
|
99
|
+
// eslint-disable-next-line no-console
|
|
100
|
+
console.debug(...maybeSanitizeArgs(args));
|
|
101
|
+
},
|
|
102
|
+
};
|
|
103
|
+
/**
|
|
104
|
+
* Idempotent installer for the production console patch. Wraps the four
|
|
105
|
+
* console methods so any third-party (or yet-to-migrate) callsite that
|
|
106
|
+
* still hits `console.*` directly also runs through sanitize() in prod.
|
|
107
|
+
*
|
|
108
|
+
* Called once at boot from `serve.ts` after the master key is loaded
|
|
109
|
+
* (waiting until after master-key load avoids redacting the master-key
|
|
110
|
+
* info line during normal boot). Safe to call multiple times — second
|
|
111
|
+
* call no-ops because the patch records itself on a process-level
|
|
112
|
+
* Symbol.
|
|
113
|
+
*/
|
|
114
|
+
const CONSOLE_PATCHED = Symbol.for('studiograph.console.patched');
|
|
115
|
+
export function installConsolePatch() {
|
|
116
|
+
if (!shouldRedact())
|
|
117
|
+
return;
|
|
118
|
+
const g = globalThis;
|
|
119
|
+
if (g[CONSOLE_PATCHED])
|
|
120
|
+
return;
|
|
121
|
+
g[CONSOLE_PATCHED] = true;
|
|
122
|
+
// Capture the originals so the patch can hand the sanitized args back
|
|
123
|
+
// to the underlying writer.
|
|
124
|
+
const orig = {
|
|
125
|
+
log: console.log.bind(console),
|
|
126
|
+
info: console.info.bind(console),
|
|
127
|
+
warn: console.warn.bind(console),
|
|
128
|
+
error: console.error.bind(console),
|
|
129
|
+
debug: console.debug.bind(console),
|
|
130
|
+
};
|
|
131
|
+
console.log = (...args) => orig.log(...maybeSanitizeArgs(args));
|
|
132
|
+
console.info = (...args) => orig.info(...maybeSanitizeArgs(args));
|
|
133
|
+
console.warn = (...args) => orig.warn(...maybeSanitizeArgs(args));
|
|
134
|
+
console.error = (...args) => orig.error(...maybeSanitizeArgs(args));
|
|
135
|
+
console.debug = (...args) => orig.debug(...maybeSanitizeArgs(args));
|
|
136
|
+
}
|
|
137
|
+
//# sourceMappingURL=log.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"log.js","sourceRoot":"","sources":["../../src/utils/log.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AAEH,OAAO,EAAE,QAAQ,EAAE,MAAM,kCAAkC,CAAC;AAE5D;;;GAGG;AACH,SAAS,YAAY;IACnB,IAAI,OAAO,CAAC,GAAG,CAAC,mBAAmB,KAAK,GAAG;QAAE,OAAO,KAAK,CAAC;IAC1D,OAAO,CACL,OAAO,CAAC,GAAG,CAAC,QAAQ,KAAK,YAAY;QACrC,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,mBAAmB,CAClC,CAAC;AACJ,CAAC;AAED;;;;;;GAMG;AACH,SAAS,iBAAiB,CAAC,IAAe;IACxC,IAAI,CAAC,YAAY,EAAE;QAAE,OAAO,IAAI,CAAC;IACjC,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE;QACpB,IAAI,OAAO,CAAC,KAAK,QAAQ;YAAE,OAAO,QAAQ,CAAC,CAAC,CAAC,CAAC;QAC9C,IAAI,CAAC,YAAY,KAAK,EAAE,CAAC;YACvB,8DAA8D;YAC9D,gEAAgE;YAChE,+DAA+D;YAC/D,qBAAqB;YACrB,MAAM,CAAC,GAAG,IAAI,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC;YACzC,IAAI,CAAC,CAAC,KAAK;gBAAG,CAAgC,CAAC,KAAK,GAAG,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;YACzE,oDAAoD;YACpD,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC;YAC3B,OAAO,CAAC,CAAC;QACX,CAAC;QACD,IAAI,CAAC,IAAI,OAAO,CAAC,KAAK,QAAQ,EAAE,CAAC;YAC/B,IAAI,CAAC;gBACH,OAAO,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YACjD,CAAC;YAAC,MAAM,CAAC;gBACP,OAAO,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;YAC7B,CAAC;QACH,CAAC;QACD,OAAO,CAAC,CAAC;IACX,CAAC,CAAC,CAAC;AACL,CAAC;AAED;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,GAAG,GAAG;IACjB,IAAI,EAAE,CAAC,GAAG,IAAe,EAAQ,EAAE;QACjC,sCAAsC;QACtC,OAAO,CAAC,GAAG,CAAC,GAAG,iBAAiB,CAAC,IAAI,CAAC,CAAC,CAAC;IAC1C,CAAC;IACD,IAAI,EAAE,CAAC,GAAG,IAAe,EAAQ,EAAE;QACjC,sCAAsC;QACtC,OAAO,CAAC,IAAI,CAAC,GAAG,iBAAiB,CAAC,IAAI,CAAC,CAAC,CAAC;IAC3C,CAAC;IACD,KAAK,EAAE,CAAC,GAAG,IAAe,EAAQ,EAAE;QAClC,sCAAsC;QACtC,OAAO,CAAC,KAAK,CAAC,GAAG,iBAAiB,CAAC,IAAI,CAAC,CAAC,CAAC;IAC5C,CAAC;IACD,KAAK,EAAE,CAAC,GAAG,IAAe,EAAQ,EAAE;QAClC,IAAI,YAAY,EAAE,IAAI,OAAO,CAAC,GAAG,CAAC,mBAAmB,KAAK,GAAG;YAAE,OAAO;QACtE,sCAAsC;QACtC,OAAO,CAAC,KAAK,CAAC,GAAG,iBAAiB,CAAC,IAAI,CAAC,CAAC,CAAC;IAC5C,CAAC;CACF,CAAC;AAEF;;;;;;;;;;GAUG;AACH,MAAM,eAAe,GAAG,MAAM,CAAC,GAAG,CAAC,6BAA6B,CAAC,CAAC;AAElE,MAAM,UAAU,mBAAmB;IACjC,IAAI,CAAC,YAAY,EAAE;QAAE,OAAO;IAC5B,MAAM,CAAC,GAAG,UAAgD,CAAC;IAC3D,IAAI,CAAC,CAAC,eAAe,CAAC;QAAE,OAAO;IAC/B,CAAC,CAAC,eAAe,CAAC,GAAG,IAAI,CAAC;IAE1B,sEAAsE;IACtE,4BAA4B;IAC5B,MAAM,IAAI,GAAG;QACX,GAAG,EAAE,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC;QAC9B,IAAI,EAAE,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC;QAChC,IAAI,EAAE,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC;QAChC,KAAK,EAAE,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC;QAClC,KAAK,EAAE,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC;KACnC,CAAC;IAEF,OAAO,CAAC,GAAG,GAAG,CAAC,GAAG,IAAe,EAAQ,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,iBAAiB,CAAC,IAAI,CAAC,CAAC,CAAC;IACjF,OAAO,CAAC,IAAI,GAAG,CAAC,GAAG,IAAe,EAAQ,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,iBAAiB,CAAC,IAAI,CAAC,CAAC,CAAC;IACnF,OAAO,CAAC,IAAI,GAAG,CAAC,GAAG,IAAe,EAAQ,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,iBAAiB,CAAC,IAAI,CAAC,CAAC,CAAC;IACnF,OAAO,CAAC,KAAK,GAAG,CAAC,GAAG,IAAe,EAAQ,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,iBAAiB,CAAC,IAAI,CAAC,CAAC,CAAC;IACrF,OAAO,CAAC,KAAK,GAAG,CAAC,GAAG,IAAe,EAAQ,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,iBAAiB,CAAC,IAAI,CAAC,CAAC,CAAC;AACvF,CAAC"}
|
package/dist/utils/preflight.js
CHANGED
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
* Run at the start of init, start, and join to surface missing dependencies
|
|
5
5
|
* as clear, actionable messages before any command logic executes.
|
|
6
6
|
*/
|
|
7
|
-
import {
|
|
7
|
+
import { execFileSync } from 'child_process';
|
|
8
8
|
import { log } from '@clack/prompts';
|
|
9
9
|
/** Minimum supported Node.js major version */
|
|
10
10
|
export const MIN_NODE_MAJOR = 20;
|
|
@@ -13,7 +13,7 @@ export const MIN_NODE_MAJOR = 20;
|
|
|
13
13
|
*/
|
|
14
14
|
export function checkGit() {
|
|
15
15
|
try {
|
|
16
|
-
const output =
|
|
16
|
+
const output = execFileSync('git', ['--version'], { stdio: 'pipe' }).toString().trim();
|
|
17
17
|
const match = output.match(/git version (\S+)/);
|
|
18
18
|
const version = match ? match[1] : output;
|
|
19
19
|
return { passed: true, message: `git ${version} found` };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"preflight.js","sourceRoot":"","sources":["../../src/utils/preflight.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"preflight.js","sourceRoot":"","sources":["../../src/utils/preflight.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAC7C,OAAO,EAAE,GAAG,EAAE,MAAM,gBAAgB,CAAC;AAErC,8CAA8C;AAC9C,MAAM,CAAC,MAAM,cAAc,GAAG,EAAE,CAAC;AAQjC;;GAEG;AACH,MAAM,UAAU,QAAQ;IACtB,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,YAAY,CAAC,KAAK,EAAE,CAAC,WAAW,CAAC,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC,IAAI,EAAE,CAAC;QACvF,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,mBAAmB,CAAC,CAAC;QAChD,MAAM,OAAO,GAAG,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;QAC1C,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,OAAO,QAAQ,EAAE,CAAC;IAC3D,CAAC;IAAC,MAAM,CAAC;QACP,OAAO;YACL,MAAM,EAAE,KAAK;YACb,OAAO,EAAE,eAAe;YACxB,IAAI,EAAE,sCAAsC;SAC7C,CAAC;IACJ,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,SAAS;IACvB,MAAM,OAAO,GAAG,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC;IACtC,MAAM,KAAK,GAAG,QAAQ,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IAClD,IAAI,KAAK,IAAI,cAAc,EAAE,CAAC;QAC5B,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,YAAY,OAAO,QAAQ,EAAE,CAAC;IAChE,CAAC;IACD,OAAO;QACL,MAAM,EAAE,KAAK;QACb,OAAO,EAAE,YAAY,OAAO,0BAA0B,cAAc,IAAI;QACxE,IAAI,EAAE,oBAAoB,cAAc,2BAA2B;KACpE,CAAC;AACJ,CAAC;AAMD;;;;;;GAMG;AACH,MAAM,UAAU,YAAY,CAAC,WAA6B,EAAE;IAC1D,MAAM,SAAS,GAAG,QAAQ,EAAE,CAAC;IAC7B,MAAM,UAAU,GAAG,SAAS,EAAE,CAAC;IAE/B,IAAI,SAAS,CAAC,MAAM,EAAE,CAAC;QACrB,GAAG,CAAC,OAAO,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;IACjC,CAAC;SAAM,CAAC;QACN,GAAG,CAAC,KAAK,CAAC,GAAG,SAAS,CAAC,OAAO,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,SAAS,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IACnF,CAAC;IAED,IAAI,UAAU,CAAC,MAAM,EAAE,CAAC;QACtB,GAAG,CAAC,OAAO,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;IAClC,CAAC;SAAM,CAAC;QACN,GAAG,CAAC,KAAK,CAAC,GAAG,UAAU,CAAC,OAAO,GAAG,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,UAAU,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IACtF,CAAC;IAED,OAAO,SAAS,CAAC,MAAM,IAAI,UAAU,CAAC,MAAM,CAAC;AAC/C,CAAC"}
|
|
@@ -1,23 +1,16 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
2
|
+
* CLI version helper.
|
|
3
3
|
*
|
|
4
|
-
*
|
|
5
|
-
*
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
*
|
|
4
|
+
* Pre-C4 this module also contained `checkForUpdate` + `notifyUpdateAvailable`
|
|
5
|
+
* which printed an "update available" banner pointing at `studiograph update`.
|
|
6
|
+
* Both the banner and the `update` command were removed in cli-owner-audit
|
|
7
|
+
* Phase C4 once we standardized on `npx -y studiograph@<exact-version>` as
|
|
8
|
+
* the canonical invocation — there's no global install to upgrade.
|
|
9
|
+
*
|
|
10
|
+
* Only `getCurrentVersion` survives: `serve` reads it on boot for the
|
|
11
|
+
* WebSocket hub's version-stamp, and `redeploy` has its own copy in
|
|
12
|
+
* src/cli/railway-pin.ts. Keep this file small enough that it's obviously
|
|
13
|
+
* a leftover-by-design rather than a place to grow new logic.
|
|
9
14
|
*/
|
|
15
|
+
/** Current CLI version, read from the bundled package.json. */
|
|
10
16
|
export declare function getCurrentVersion(): string;
|
|
11
|
-
/**
|
|
12
|
-
* Check if an update is available (non-blocking, cached)
|
|
13
|
-
* Returns update info or null if up-to-date or check failed
|
|
14
|
-
*/
|
|
15
|
-
export declare function checkForUpdate(): Promise<{
|
|
16
|
-
current: string;
|
|
17
|
-
latest: string;
|
|
18
|
-
} | null>;
|
|
19
|
-
/**
|
|
20
|
-
* Print update notification to console (if update available)
|
|
21
|
-
* Call this in commands to notify users about updates
|
|
22
|
-
*/
|
|
23
|
-
export declare function notifyUpdateAvailable(): Promise<void>;
|