studiograph 1.3.48-next.26 → 1.3.48-next.261
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 +27 -17
- package/dist/agent/agent-pool.d.ts +120 -4
- package/dist/agent/agent-pool.js +358 -18
- package/dist/agent/agent-pool.js.map +1 -1
- package/dist/agent/context-window.d.ts +113 -0
- package/dist/agent/context-window.js +459 -0
- package/dist/agent/context-window.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 +110 -11
- package/dist/agent/orchestrator.js +547 -75
- package/dist/agent/orchestrator.js.map +1 -1
- package/dist/agent/prompts/entity-types-section.d.ts +18 -9
- package/dist/agent/prompts/entity-types-section.js +42 -18
- package/dist/agent/prompts/entity-types-section.js.map +1 -1
- package/dist/agent/prompts/system.md +107 -19
- package/dist/agent/skill-loader.js +3 -9
- package/dist/agent/skill-loader.js.map +1 -1
- package/dist/agent/skills/artifact-canvas/skill.md +257 -0
- package/dist/agent/skills/create-skill.md +39 -0
- package/dist/agent/skills/entity-schema.md +67 -150
- package/dist/agent/skills/interview/skill.md +44 -29
- package/dist/agent/skills/paged-documents/skill.md +147 -0
- package/dist/agent/skills/schema-rules.md +28 -28
- package/dist/agent/tools/artifact-tools.d.ts +237 -0
- package/dist/agent/tools/artifact-tools.js +407 -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 +50 -0
- package/dist/agent/tools/folder-tools.js +340 -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 +1 -1
- package/dist/agent/tools/fs-tools.js.map +1 -1
- package/dist/agent/tools/graph-tools.d.ts +45 -73
- package/dist/agent/tools/graph-tools.js +765 -239
- 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 +465 -0
- package/dist/agent/tools/history-tools.js.map +1 -0
- package/dist/agent/tools/load-skill.d.ts +4 -3
- package/dist/agent/tools/load-skill.js +1 -1
- package/dist/agent/tools/load-skill.js.map +1 -1
- package/dist/agent/tools/ops-tools.d.ts +2 -1
- package/dist/agent/tools/ops-tools.js +125 -25
- package/dist/agent/tools/ops-tools.js.map +1 -1
- package/dist/agent/tools/permission-tools.d.ts +69 -21
- package/dist/agent/tools/permission-tools.js +183 -18
- package/dist/agent/tools/permission-tools.js.map +1 -1
- package/dist/agent/tools/tool-loader.js +5 -4
- package/dist/agent/tools/tool-loader.js.map +1 -1
- package/dist/agent/tools/web-tools.js +58 -9
- package/dist/agent/tools/web-tools.js.map +1 -1
- package/dist/cli/commands/about.d.ts +1 -0
- package/dist/cli/commands/about.js +55 -3
- package/dist/cli/commands/about.js.map +1 -1
- package/dist/cli/commands/admin/audit-workspace.d.ts +23 -0
- package/dist/cli/commands/admin/audit-workspace.js +133 -0
- package/dist/cli/commands/admin/audit-workspace.js.map +1 -0
- package/dist/cli/commands/admin/audit.d.ts +21 -0
- package/dist/cli/commands/admin/audit.js +174 -0
- package/dist/cli/commands/admin/audit.js.map +1 -0
- package/dist/cli/commands/admin/backup.d.ts +54 -0
- package/dist/cli/commands/admin/backup.js +207 -0
- package/dist/cli/commands/admin/backup.js.map +1 -0
- package/dist/cli/commands/admin/folder.d.ts +11 -0
- package/dist/cli/commands/admin/folder.js +187 -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 +48 -0
- package/dist/cli/commands/admin/index.js.map +1 -0
- package/dist/cli/commands/admin/migrate-asset-owners.d.ts +56 -0
- package/dist/cli/commands/admin/migrate-asset-owners.js +86 -0
- package/dist/cli/commands/admin/migrate-asset-owners.js.map +1 -0
- package/dist/cli/commands/admin/migrate-assets.d.ts +62 -0
- package/dist/cli/commands/admin/migrate-assets.js +237 -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 +23 -3
- package/dist/cli/commands/clone.js +140 -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 +7 -4
- 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 +242 -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 +230 -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 -23
- 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/cli/theme.d.ts +1 -1
- package/dist/core/accent-palette.d.ts +7 -18
- package/dist/core/accent-palette.js +27 -38
- package/dist/core/accent-palette.js.map +1 -1
- package/dist/core/artifact-asset-resolution.d.ts +90 -0
- package/dist/core/artifact-asset-resolution.js +138 -0
- package/dist/core/artifact-asset-resolution.js.map +1 -0
- package/dist/core/artifact-asset-urls.d.ts +111 -0
- package/dist/core/artifact-asset-urls.js +174 -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 +83 -0
- package/dist/core/artifact-export.js +1567 -0
- package/dist/core/artifact-export.js.map +1 -0
- package/dist/core/artifact-frame-document.d.ts +105 -0
- package/dist/core/artifact-frame-document.js +1427 -0
- package/dist/core/artifact-frame-document.js.map +1 -0
- package/dist/core/artifact-frame-layout.d.ts +79 -0
- package/dist/core/artifact-frame-layout.js +94 -0
- package/dist/core/artifact-frame-layout.js.map +1 -0
- package/dist/core/artifact-frame-model.d.ts +198 -0
- package/dist/core/artifact-frame-model.js +603 -0
- package/dist/core/artifact-frame-model.js.map +1 -0
- package/dist/core/artifact-frame-selectors.d.ts +42 -0
- package/dist/core/artifact-frame-selectors.js +65 -0
- package/dist/core/artifact-frame-selectors.js.map +1 -0
- package/dist/core/artifact-libraries.d.ts +23 -0
- package/dist/core/artifact-libraries.js +229 -0
- package/dist/core/artifact-libraries.js.map +1 -0
- package/dist/core/artifact-manifest.d.ts +64 -0
- package/dist/core/artifact-manifest.js +88 -0
- package/dist/core/artifact-manifest.js.map +1 -0
- package/dist/core/artifact-paged-css.d.ts +64 -0
- package/dist/core/artifact-paged-css.js +253 -0
- package/dist/core/artifact-paged-css.js.map +1 -0
- package/dist/core/artifact-patch.d.ts +58 -0
- package/dist/core/artifact-patch.js +309 -0
- package/dist/core/artifact-patch.js.map +1 -0
- package/dist/core/artifact-warnings.d.ts +51 -0
- package/dist/core/artifact-warnings.js +165 -0
- package/dist/core/artifact-warnings.js.map +1 -0
- package/dist/core/breakpoints.d.ts +27 -0
- package/dist/core/breakpoints.js +28 -0
- package/dist/core/breakpoints.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 +108 -0
- package/dist/core/embeds.js +226 -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 +66 -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/font-family.d.ts +62 -0
- package/dist/core/font-family.js +84 -0
- package/dist/core/font-family.js.map +1 -0
- package/dist/core/format-registry.d.ts +187 -0
- package/dist/core/format-registry.js +411 -0
- package/dist/core/format-registry.js.map +1 -0
- package/dist/core/graph.d.ts +770 -30
- package/dist/core/graph.js +2282 -386
- 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/markdown-strip.d.ts +22 -0
- package/dist/core/markdown-strip.js +51 -0
- package/dist/core/markdown-strip.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 +237 -0
- package/dist/core/secrets/registry.js +710 -0
- package/dist/core/secrets/registry.js.map +1 -0
- package/dist/core/seed-folder.d.ts +59 -0
- package/dist/core/seed-folder.js +76 -0
- package/dist/core/seed-folder.js.map +1 -0
- package/dist/core/types.d.ts +88 -480
- package/dist/core/types.js +53 -6
- package/dist/core/types.js.map +1 -1
- package/dist/core/user-config.d.ts +81 -14
- package/dist/core/user-config.js +147 -17
- package/dist/core/user-config.js.map +1 -1
- package/dist/core/validation.d.ts +828 -1472
- package/dist/core/validation.js +475 -163
- package/dist/core/validation.js.map +1 -1
- package/dist/core/view-scope.d.ts +88 -0
- package/dist/core/view-scope.js +71 -0
- package/dist/core/view-scope.js.map +1 -0
- package/dist/core/workspace-manager.d.ts +156 -11
- package/dist/core/workspace-manager.js +364 -92
- package/dist/core/workspace-manager.js.map +1 -1
- package/dist/core/workspace.d.ts +19 -5
- package/dist/core/workspace.js +72 -56
- 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 +31 -25
- 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 +73 -2
- package/dist/mcp/tools.js +2289 -115
- package/dist/mcp/tools.js.map +1 -1
- package/dist/server/__tests__/helpers/graph-api.d.ts +17 -0
- package/dist/server/__tests__/helpers/graph-api.js +17 -0
- package/dist/server/__tests__/helpers/graph-api.js.map +1 -0
- package/dist/server/__tests__/helpers/multipart.d.ts +9 -0
- package/dist/server/__tests__/helpers/multipart.js +14 -0
- package/dist/server/__tests__/helpers/multipart.js.map +1 -0
- package/dist/server/artifact-asset-mint.d.ts +59 -0
- package/dist/server/artifact-asset-mint.js +127 -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 +50 -1
- package/dist/server/index.js +811 -229
- package/dist/server/index.js.map +1 -1
- package/dist/server/middleware/sanitize.d.ts +46 -0
- package/dist/server/middleware/sanitize.js +195 -0
- package/dist/server/middleware/sanitize.js.map +1 -0
- package/dist/server/process-guards.d.ts +37 -0
- package/dist/server/process-guards.js +44 -0
- package/dist/server/process-guards.js.map +1 -0
- package/dist/server/routes/ai-usage-api.d.ts +24 -0
- package/dist/server/routes/ai-usage-api.js +68 -0
- package/dist/server/routes/ai-usage-api.js.map +1 -0
- package/dist/server/routes/artifact-export-api.d.ts +11 -0
- package/dist/server/routes/artifact-export-api.js +180 -0
- package/dist/server/routes/artifact-export-api.js.map +1 -0
- package/dist/server/routes/artifact-patch-api.d.ts +19 -0
- package/dist/server/routes/artifact-patch-api.js +114 -0
- package/dist/server/routes/artifact-patch-api.js.map +1 -0
- package/dist/server/routes/artifact-selection-api.d.ts +15 -0
- package/dist/server/routes/artifact-selection-api.js +90 -0
- package/dist/server/routes/artifact-selection-api.js.map +1 -0
- package/dist/server/routes/asset-api.d.ts +88 -2
- package/dist/server/routes/asset-api.js +858 -112
- 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 +113 -0
- package/dist/server/routes/audit-api.js.map +1 -0
- package/dist/server/routes/auth-api.js +536 -44
- package/dist/server/routes/auth-api.js.map +1 -1
- package/dist/server/routes/capture-api.js +81 -9
- 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 +462 -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 +858 -68
- 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 +183 -57
- package/dist/server/routes/config-api.js.map +1 -1
- package/dist/server/routes/connectors-api.js +178 -45
- 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/event-ingest-api.js +125 -0
- 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 +3 -3
- package/dist/server/routes/git-http.js +90 -30
- package/dist/server/routes/git-http.js.map +1 -1
- package/dist/server/routes/graph-api-access.d.ts +63 -0
- package/dist/server/routes/graph-api-access.js +115 -0
- package/dist/server/routes/graph-api-access.js.map +1 -0
- package/dist/server/routes/graph-api.d.ts +2 -3
- package/dist/server/routes/graph-api.js +1341 -423
- 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 +116 -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 +352 -66
- package/dist/server/routes/insights-api.js.map +1 -1
- package/dist/server/routes/mcp.d.ts +8 -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 +8 -3
- package/dist/server/routes/permissions-api.js +43 -12
- 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 +273 -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 +305 -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 +177 -0
- package/dist/server/routes/settings-api.js.map +1 -0
- package/dist/server/routes/share-api.d.ts +30 -6
- package/dist/server/routes/share-api.js +240 -31
- package/dist/server/routes/share-api.js.map +1 -1
- package/dist/server/routes/views-api.d.ts +11 -2
- package/dist/server/routes/views-api.js +123 -22
- 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 +150 -23
- 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 +73 -20
- 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 +135 -56
- package/dist/server/ws-hub.js +0 -0
- package/dist/server/ws-hub.js.map +1 -1
- package/dist/server/yjs-manager.d.ts +275 -18
- package/dist/server/yjs-manager.js +819 -70
- 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 +121 -0
- package/dist/services/access-control.js +194 -0
- package/dist/services/access-control.js.map +1 -0
- package/dist/services/ai-usage-ledger.d.ts +75 -0
- package/dist/services/ai-usage-ledger.js +250 -0
- package/dist/services/ai-usage-ledger.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-inspect-metadata.d.ts +21 -0
- package/dist/services/artifact-inspect-metadata.js +66 -0
- package/dist/services/artifact-inspect-metadata.js.map +1 -0
- package/dist/services/artifact-library-sources.d.ts +33 -0
- package/dist/services/artifact-library-sources.js +91 -0
- package/dist/services/artifact-library-sources.js.map +1 -0
- package/dist/services/artifact-patch-runner.d.ts +52 -0
- package/dist/services/artifact-patch-runner.js +74 -0
- package/dist/services/artifact-patch-runner.js.map +1 -0
- package/dist/services/artifact-render-export.d.ts +230 -0
- package/dist/services/artifact-render-export.js +1003 -0
- package/dist/services/artifact-render-export.js.map +1 -0
- package/dist/services/artifact-selection-store.d.ts +68 -0
- package/dist/services/artifact-selection-store.js +90 -0
- package/dist/services/artifact-selection-store.js.map +1 -0
- package/dist/services/artifact-store.d.ts +118 -0
- package/dist/services/artifact-store.js +234 -0
- package/dist/services/artifact-store.js.map +1 -0
- package/dist/services/asset-caption-service.d.ts +103 -0
- package/dist/services/asset-caption-service.js +200 -0
- package/dist/services/asset-caption-service.js.map +1 -0
- package/dist/services/asset-delete-authz.d.ts +32 -0
- package/dist/services/asset-delete-authz.js +62 -0
- package/dist/services/asset-delete-authz.js.map +1 -0
- package/dist/services/asset-delete-impact.d.ts +63 -0
- package/dist/services/asset-delete-impact.js +96 -0
- package/dist/services/asset-delete-impact.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 +116 -0
- package/dist/services/asset-import-service.js +436 -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 +271 -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 +63 -0
- package/dist/services/asset-listing.js +124 -0
- package/dist/services/asset-listing.js.map +1 -0
- package/dist/services/asset-move-impact.d.ts +49 -0
- package/dist/services/asset-move-impact.js +62 -0
- package/dist/services/asset-move-impact.js.map +1 -0
- package/dist/services/asset-presign-service.d.ts +62 -0
- package/dist/services/asset-presign-service.js +126 -0
- package/dist/services/asset-presign-service.js.map +1 -0
- package/dist/services/asset-reference-index.d.ts +39 -0
- package/dist/services/asset-reference-index.js +33 -0
- package/dist/services/asset-reference-index.js.map +1 -0
- package/dist/services/asset-reference-scan.d.ts +57 -0
- package/dist/services/asset-reference-scan.js +150 -0
- package/dist/services/asset-reference-scan.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 +158 -0
- package/dist/services/assets/asset-index-service.js +293 -0
- package/dist/services/assets/asset-index-service.js.map +1 -0
- package/dist/services/assets/base.d.ts +119 -4
- package/dist/services/assets/base.js +148 -3
- package/dist/services/assets/base.js.map +1 -1
- package/dist/services/assets/index.d.ts +90 -0
- package/dist/services/assets/index.js +202 -0
- package/dist/services/assets/index.js.map +1 -1
- package/dist/services/assets/local.d.ts +9 -0
- package/dist/services/assets/local.js +30 -4
- 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 +80 -0
- package/dist/services/assets/r2.js +159 -4
- package/dist/services/assets/r2.js.map +1 -1
- package/dist/services/auth-service.d.ts +278 -51
- package/dist/services/auth-service.js +995 -272
- package/dist/services/auth-service.js.map +1 -1
- package/dist/services/chat-session-service.d.ts +189 -0
- package/dist/services/chat-session-service.js +544 -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 +321 -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 +313 -0
- package/dist/services/entity-mutations.js +531 -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 +451 -0
- package/dist/services/event-processor.js.map +1 -0
- package/dist/services/extract/docx.d.ts +1 -0
- package/dist/services/extract/docx.js +233 -0
- package/dist/services/extract/docx.js.map +1 -0
- package/dist/services/extract/index.d.ts +9 -0
- package/dist/services/extract/index.js +10 -0
- package/dist/services/extract/index.js.map +1 -0
- package/dist/services/extract/pdf.d.ts +13 -0
- package/dist/services/extract/pdf.js +69 -0
- package/dist/services/extract/pdf.js.map +1 -0
- package/dist/services/folder-creation.d.ts +33 -0
- package/dist/services/folder-creation.js +103 -0
- package/dist/services/folder-creation.js.map +1 -0
- package/dist/services/fonts/font-metadata.d.ts +42 -0
- package/dist/services/fonts/font-metadata.js +126 -0
- package/dist/services/fonts/font-metadata.js.map +1 -0
- package/dist/services/fonts/font-skill-service.d.ts +66 -0
- package/dist/services/fonts/font-skill-service.js +137 -0
- package/dist/services/fonts/font-skill-service.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 +49 -0
- package/dist/services/personal-folder.js +122 -0
- package/dist/services/personal-folder.js.map +1 -0
- package/dist/services/playwright-bootstrap.d.ts +78 -0
- package/dist/services/playwright-bootstrap.js +219 -0
- package/dist/services/playwright-bootstrap.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 +201 -0
- package/dist/services/scratch-attachment-service.js +354 -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 +341 -0
- package/dist/services/user-person-bridge.js.map +1 -0
- package/dist/services/utility-model-resolver.d.ts +37 -0
- package/dist/services/utility-model-resolver.js +67 -0
- package/dist/services/utility-model-resolver.js.map +1 -0
- package/dist/services/vector-service.d.ts +282 -5
- package/dist/services/vector-service.js +594 -39
- package/dist/services/vector-service.js.map +1 -1
- package/dist/services/workspace-access.d.ts +115 -0
- package/dist/services/workspace-access.js +154 -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.B8rPC4xg.css +2 -0
- package/dist/web/_app/immutable/assets/12.DlIf1mKh.css +1 -0
- package/dist/web/_app/immutable/assets/13.WUaKJbVc.css +1 -0
- package/dist/web/_app/immutable/assets/15.CItnu3nw.css +1 -0
- package/dist/web/_app/immutable/assets/16.C3czeWWx.css +1 -0
- package/dist/web/_app/immutable/assets/17.CHiwoAMO.css +1 -0
- package/dist/web/_app/immutable/assets/18.fUGuXQ0K.css +1 -0
- package/dist/web/_app/immutable/assets/19.DcuK5ZVm.css +1 -0
- package/dist/web/_app/immutable/assets/2.bJqlVFXX.css +1 -0
- package/dist/web/_app/immutable/assets/3.DDfEAhbB.css +1 -0
- package/dist/web/_app/immutable/assets/4.Dtodt1Fe.css +1 -0
- package/dist/web/_app/immutable/assets/6.JPVpkzLZ.css +1 -0
- package/dist/web/_app/immutable/assets/AssetLibraryPicker.BWH260L8.css +1 -0
- package/dist/web/_app/immutable/assets/BulkActionsBar.CXSM7tO7.css +1 -0
- package/dist/web/_app/immutable/assets/CalendarView.Cch9MMQW.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.BvV1lBCg.css +1 -0
- package/dist/web/_app/immutable/assets/FolderMutationDialogs.De2NQ55E.css +1 -0
- package/dist/web/_app/immutable/assets/FolderPicker.Cq1tMnu_.css +1 -0
- package/dist/web/_app/immutable/assets/FolderTreeField.DTSzn15s.css +1 -0
- package/dist/web/_app/immutable/assets/FrameCanvas.Clh5Xdr7.css +1 -0
- package/dist/web/_app/immutable/assets/GalleryView.Cqu3-wtr.css +1 -0
- package/dist/web/_app/immutable/assets/GraphView.BJtGL9py.css +1 -0
- package/dist/web/_app/immutable/assets/GridCell.czY6eDb_.css +1 -0
- package/dist/web/_app/immutable/assets/KanbanView.C5X8TbQk.css +1 -0
- package/dist/web/_app/immutable/assets/Link.vV0ne105.css +1 -0
- package/dist/web/_app/immutable/assets/Markdown.CSYKSAm0.css +1 -0
- package/dist/web/_app/immutable/assets/Rail.Dyxy_E0O.css +1 -0
- package/dist/web/_app/immutable/assets/RepoCheckList.BLeJ79Eg.css +1 -0
- package/dist/web/_app/immutable/assets/SaveViewDialog.Bb9E81xd.css +1 -0
- package/dist/web/_app/immutable/assets/SearchInput.DTB6W35f.css +1 -0
- package/dist/web/_app/immutable/assets/SettingsDialog.CHzfQoo_.css +1 -0
- package/dist/web/_app/immutable/assets/Spinner.UBfl0pab.css +1 -0
- package/dist/web/_app/immutable/assets/StopFilledAlt.CjuwgVxu.css +1 -0
- package/dist/web/_app/immutable/assets/TimelineView.u4YqiztR.css +1 -0
- package/dist/web/_app/immutable/assets/Version.BQq1Fihu.css +1 -0
- package/dist/web/_app/immutable/assets/ViewBanner.DWswnFdi.css +1 -0
- package/dist/web/_app/immutable/assets/WorkspaceView.Cd6TS6oo.css +1 -0
- package/dist/web/_app/immutable/assets/button.DOg1smbV.css +1 -0
- package/dist/web/_app/immutable/assets/checkbox.CAcHq8G6.css +1 -0
- package/dist/web/_app/immutable/assets/download-with-progress.BZlFTn09.css +1 -0
- package/dist/web/_app/immutable/assets/filters.RgfXKVpA.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/list-columns.BgnafZ4K.css +1 -0
- package/dist/web/_app/immutable/chunks/-MYqXlc3.js +185 -0
- package/dist/web/_app/immutable/chunks/-Tbr-96c2.js +1 -0
- package/dist/web/_app/immutable/chunks/1QRy7-wo.js +1 -0
- package/dist/web/_app/immutable/chunks/1_BWKAKA2.js +23 -0
- package/dist/web/_app/immutable/chunks/2z2ekE6D2.js +2 -0
- package/dist/web/_app/immutable/chunks/6guf_P8c.js +1 -0
- package/dist/web/_app/immutable/chunks/7l950wkn.js +1 -0
- package/dist/web/_app/immutable/chunks/9Sn2PwSn2.js +1025 -0
- package/dist/web/_app/immutable/chunks/AFZSy-Vk.js +2 -0
- package/dist/web/_app/immutable/chunks/B06uE1qJ.js +1 -0
- package/dist/web/_app/immutable/chunks/B2cjR0rG.js +83 -0
- package/dist/web/_app/immutable/chunks/B3u4QMoU.js +1 -0
- package/dist/web/_app/immutable/chunks/B4PrlkmE.js +1 -0
- package/dist/web/_app/immutable/chunks/B5UH1FNe.js +3 -0
- package/dist/web/_app/immutable/chunks/B5sxjq1L2.js +1 -0
- package/dist/web/_app/immutable/chunks/B6Lt-qaJ.js +1 -0
- package/dist/web/_app/immutable/chunks/B6wo7Stk2.js +1 -0
- package/dist/web/_app/immutable/chunks/B9KfEsQw2.js +1 -0
- package/dist/web/_app/immutable/chunks/B9MY422N.js +1 -0
- package/dist/web/_app/immutable/chunks/B9VQbssY.js +3 -0
- package/dist/web/_app/immutable/chunks/BBrP9GiZ.js +1 -0
- package/dist/web/_app/immutable/chunks/BEGTD2EL2.js +1 -0
- package/dist/web/_app/immutable/chunks/BEyPhM3C.js +1 -0
- package/dist/web/_app/immutable/chunks/BIeOkmiV.js +1 -0
- package/dist/web/_app/immutable/chunks/BIwe25Lk.js +1 -0
- package/dist/web/_app/immutable/chunks/BO6-nRV9.js +1 -0
- package/dist/web/_app/immutable/chunks/BPILs-6H.js +1 -0
- package/dist/web/_app/immutable/chunks/BPRQzMGs.js +1 -0
- package/dist/web/_app/immutable/chunks/BQE7bWgF.js +1 -0
- package/dist/web/_app/immutable/chunks/BU5TCj7m.js +12 -0
- package/dist/web/_app/immutable/chunks/BZDKT2Qw2.js +2 -0
- package/dist/web/_app/immutable/chunks/B_y9A6Kg.js +4 -0
- package/dist/web/_app/immutable/chunks/BdR7t2GN.js +3 -0
- package/dist/web/_app/immutable/chunks/BnYohOts2.js +1 -0
- package/dist/web/_app/immutable/chunks/Bpmx7Umc.js +1 -0
- package/dist/web/_app/immutable/chunks/BqButnP4.js +1 -0
- package/dist/web/_app/immutable/chunks/BtDSRU36.js +1 -0
- package/dist/web/_app/immutable/chunks/Bvr6nSm92.js +1 -0
- package/dist/web/_app/immutable/chunks/BvyVm7-j.js +184 -0
- package/dist/web/_app/immutable/chunks/Bx6T8G5n2.js +1 -0
- package/dist/web/_app/immutable/chunks/BxeOdaUQ.js +1 -0
- package/dist/web/_app/immutable/chunks/C1B4xDs0.js +1 -0
- package/dist/web/_app/immutable/chunks/C2yz630b.js +2 -0
- package/dist/web/_app/immutable/chunks/C5YoDj-e.js +1 -0
- package/dist/web/_app/immutable/chunks/C6d9nn3k.js +1 -0
- package/dist/web/_app/immutable/chunks/C85NG5lS.js +1 -0
- package/dist/web/_app/immutable/chunks/C8ZiSqQm.js +1 -0
- package/dist/web/_app/immutable/chunks/CB-t1Bv-.js +1 -0
- package/dist/web/_app/immutable/chunks/CG8YKaqc.js +5 -0
- package/dist/web/_app/immutable/chunks/CJbr-v9X.js +1 -0
- package/dist/web/_app/immutable/chunks/CKGHeJzq.js +1 -0
- package/dist/web/_app/immutable/chunks/CKwV6HKc.js +1 -0
- package/dist/web/_app/immutable/chunks/CLninaDG2.js +2 -0
- package/dist/web/_app/immutable/chunks/CM400nLL.js +7 -0
- package/dist/web/_app/immutable/chunks/CPvxN2G62.js +1 -0
- package/dist/web/_app/immutable/chunks/CQW66fYJ.js +1 -0
- package/dist/web/_app/immutable/chunks/CQl_RUVN2.js +1 -0
- package/dist/web/_app/immutable/chunks/CR1JY_cb.js +6 -0
- package/dist/web/_app/immutable/chunks/CT35tdLp.js +1 -0
- package/dist/web/_app/immutable/chunks/CVKrGJ6C.js +1 -0
- package/dist/web/_app/immutable/chunks/CWIHttTH.js +1 -0
- package/dist/web/_app/immutable/chunks/CWZSexLW.js +1 -0
- package/dist/web/_app/immutable/chunks/CXPMb3zd.js +1 -0
- package/dist/web/_app/immutable/chunks/CZBW5wi82.js +1 -0
- package/dist/web/_app/immutable/chunks/CaimSvvF.js +5 -0
- package/dist/web/_app/immutable/chunks/CcWaWbrI2.js +1 -0
- package/dist/web/_app/immutable/chunks/CcgYvk_3.js +1 -0
- package/dist/web/_app/immutable/chunks/Cg7m1gqN.js +1 -0
- package/dist/web/_app/immutable/chunks/CgCz4Fj6.js +1 -0
- package/dist/web/_app/immutable/chunks/CgOgBK5j.js +1 -0
- package/dist/web/_app/immutable/chunks/ChS3kWO-.js +2 -0
- package/dist/web/_app/immutable/chunks/CkivrILi.js +1 -0
- package/dist/web/_app/immutable/chunks/CmWflMFc.js +1 -0
- package/dist/web/_app/immutable/chunks/Cm_yhEon2.js +1 -0
- package/dist/web/_app/immutable/chunks/CnoUnj6-2.js +1 -0
- package/dist/web/_app/immutable/chunks/CqyFdLMa.js +1 -0
- package/dist/web/_app/immutable/chunks/CsIWxmio2.js +22 -0
- package/dist/web/_app/immutable/chunks/CtgdtZ0G2.js +1 -0
- package/dist/web/_app/immutable/chunks/CuYL65Bn.js +2 -0
- package/dist/web/_app/immutable/chunks/CuatNdzp.js +2 -0
- package/dist/web/_app/immutable/chunks/Cx5IiiDO2.js +2 -0
- package/dist/web/_app/immutable/chunks/Cxdio_Al.js +2692 -0
- package/dist/web/_app/immutable/chunks/CyTgggiM2.js +1 -0
- package/dist/web/_app/immutable/chunks/D-vvXTU3.js +2 -0
- package/dist/web/_app/immutable/chunks/D0_Iu3Uj.js +2 -0
- package/dist/web/_app/immutable/chunks/D4vfNy_f.js +1 -0
- package/dist/web/_app/immutable/chunks/D6toh9Mr.js +1 -0
- package/dist/web/_app/immutable/chunks/DAsarOLg2.js +1 -0
- package/dist/web/_app/immutable/chunks/DBGaXAP8.js +1 -0
- package/dist/web/_app/immutable/chunks/DCgKWtld.js +1 -0
- package/dist/web/_app/immutable/chunks/DG7uGoZb2.js +58 -0
- package/dist/web/_app/immutable/chunks/DIsSxB_C.js +1 -0
- package/dist/web/_app/immutable/chunks/DJTvBXur.js +2 -0
- package/dist/web/_app/immutable/chunks/DLuIHCPq.js +1 -0
- package/dist/web/_app/immutable/chunks/DMFH9Cnt2.js +1 -0
- package/dist/web/_app/immutable/chunks/DNLoQniz.js +1 -0
- package/dist/web/_app/immutable/chunks/DPLkAijI2.js +1 -0
- package/dist/web/_app/immutable/chunks/DQMWa2t7.js +1 -0
- package/dist/web/_app/immutable/chunks/DTOO9nUj.js +1 -0
- package/dist/web/_app/immutable/chunks/DaB0hU8_.js +1 -0
- package/dist/web/_app/immutable/chunks/Dav8Lgyy2.js +5 -0
- package/dist/web/_app/immutable/chunks/Ddgu2Sjp.js +1 -0
- package/dist/web/_app/immutable/chunks/DfUXQOZ92.js +1 -0
- package/dist/web/_app/immutable/chunks/DgP0Pxes.js +224 -0
- package/dist/web/_app/immutable/chunks/DhD1HF7R.js +1 -0
- package/dist/web/_app/immutable/chunks/Dhmw5GUH.js +1 -0
- package/dist/web/_app/immutable/chunks/DiBVOY752.js +1 -0
- package/dist/web/_app/immutable/chunks/DiMsLIh3.js +1 -0
- package/dist/web/_app/immutable/chunks/DiiXREv7.js +1 -0
- package/dist/web/_app/immutable/chunks/DjXtgWTP.js +1 -0
- package/dist/web/_app/immutable/chunks/Dk2-JtmU2.js +1 -0
- package/dist/web/_app/immutable/chunks/Dl0bYyV_.js +1 -0
- package/dist/web/_app/immutable/chunks/DqKYbIld2.js +1 -0
- package/dist/web/_app/immutable/chunks/DtXJCaQc2.js +1 -0
- package/dist/web/_app/immutable/chunks/DwuBUEvU.js +1 -0
- package/dist/web/_app/immutable/chunks/F5xZdLlB.js +2 -0
- package/dist/web/_app/immutable/chunks/F92HmKX8.js +1 -0
- package/dist/web/_app/immutable/chunks/FISIvbqq.js +3 -0
- package/dist/web/_app/immutable/chunks/GC5Izn9E2.js +1 -0
- package/dist/web/_app/immutable/chunks/IMJutqSu2.js +1 -0
- package/dist/web/_app/immutable/chunks/K5YHt1WL2.js +1 -0
- package/dist/web/_app/immutable/chunks/MAYbL-xn2.js +6 -0
- package/dist/web/_app/immutable/chunks/MMtHlrry.js +1 -0
- package/dist/web/_app/immutable/chunks/MtN4vJa02.js +1 -0
- package/dist/web/_app/immutable/chunks/Oglnp7sm.js +14 -0
- package/dist/web/_app/immutable/chunks/PwUOTfSv.js +2 -0
- package/dist/web/_app/immutable/chunks/QsO256-z.js +1 -0
- package/dist/web/_app/immutable/chunks/RA-JwTzo.js +1 -0
- package/dist/web/_app/immutable/chunks/atFSAfcd2.js +2 -0
- package/dist/web/_app/immutable/chunks/j_uHTBnD.js +1 -0
- package/dist/web/_app/immutable/chunks/joKsoiFC.js +1 -0
- package/dist/web/_app/immutable/chunks/kNaey6uv.js +1 -0
- package/dist/web/_app/immutable/chunks/nqo2e2Yv.js +1 -0
- package/dist/web/_app/immutable/chunks/oIZupUnz.js +1 -0
- package/dist/web/_app/immutable/chunks/pPsy4008.js +1 -0
- package/dist/web/_app/immutable/chunks/qevfNcid.js +1 -0
- package/dist/web/_app/immutable/chunks/rjjyuGhb.js +1 -0
- package/dist/web/_app/immutable/chunks/sUAtda6y2.js +2 -0
- package/dist/web/_app/immutable/chunks/snCOoD78.js +1 -0
- package/dist/web/_app/immutable/chunks/uHaS74te.js +1 -0
- package/dist/web/_app/immutable/chunks/w5tsuIav.js +5 -0
- package/dist/web/_app/immutable/chunks/xihTtKlq.js +1 -0
- package/dist/web/_app/immutable/entry/app.1tcNTKI-.js +2 -0
- package/dist/web/_app/immutable/entry/start.BJMsySI1.js +1 -0
- package/dist/web/_app/immutable/nodes/0.v0W5DL7W.js +2 -0
- package/dist/web/_app/immutable/nodes/1.81Rb3Ith.js +1 -0
- package/dist/web/_app/immutable/nodes/10.CAlZNFOq.js +1 -0
- package/dist/web/_app/immutable/nodes/11.CCfUginI.js +1 -0
- package/dist/web/_app/immutable/nodes/12.BJLboAyk.js +1 -0
- package/dist/web/_app/immutable/nodes/13.Cz4UTl2G.js +1 -0
- package/dist/web/_app/immutable/nodes/14.DJwakC0o.js +1 -0
- package/dist/web/_app/immutable/nodes/15.D2mNE6C-.js +1 -0
- package/dist/web/_app/immutable/nodes/16.BjohAUt9.js +1 -0
- package/dist/web/_app/immutable/nodes/17.BI2F37bS.js +1 -0
- package/dist/web/_app/immutable/nodes/18.DsOT0tDo.js +1 -0
- package/dist/web/_app/immutable/nodes/19.BiJWLOUT.js +77 -0
- package/dist/web/_app/immutable/nodes/2.Cd72nG2V.js +124 -0
- package/dist/web/_app/immutable/nodes/3.BIT9mm9r.js +6 -0
- package/dist/web/_app/immutable/nodes/4.Cn7r0Poe.js +16 -0
- package/dist/web/_app/immutable/nodes/5.CkJNdCZG.js +1 -0
- package/dist/web/_app/immutable/nodes/6.1rbIRQgQ.js +6 -0
- package/dist/web/_app/immutable/nodes/7.w17Zl36i.js +1 -0
- package/dist/web/_app/immutable/nodes/8.DqTsYuU-.js +1 -0
- package/dist/web/_app/immutable/nodes/9.BJhYZPfc.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 +59 -20
- package/dist/web/studiograph-logomark.svg +29 -0
- package/package.json +44 -15
- package/dist/agent/role-loader.d.ts +0 -24
- package/dist/agent/role-loader.js +0 -67
- package/dist/agent/role-loader.js.map +0 -1
- package/dist/agent/skills/create-deck/content-guide.md +0 -238
- package/dist/agent/skills/create-deck/deck-cadence.md +0 -105
- package/dist/agent/skills/create-deck/diagrams.md +0 -431
- package/dist/agent/skills/create-deck/skill.md +0 -89
- package/dist/agent/skills/create-deck/slide-selection.md +0 -115
- package/dist/agent/skills/create-deck/slide-types.md +0 -638
- package/dist/agent/skills/create-document/skill.md +0 -229
- 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/message-tools.d.ts +0 -42
- package/dist/agent/tools/message-tools.js +0 -96
- package/dist/agent/tools/message-tools.js.map +0 -1
- 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 -185
- 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 -576
- 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 -169
- 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/feature-flags.d.ts +0 -17
- package/dist/core/feature-flags.js +0 -15
- package/dist/core/feature-flags.js.map +0 -1
- package/dist/core/features.d.ts +0 -16
- package/dist/core/features.js +0 -48
- package/dist/core/features.js.map +0 -1
- package/dist/core/launch-entity-types.d.ts +0 -23
- package/dist/core/launch-entity-types.js +0 -48
- package/dist/core/launch-entity-types.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 -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/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/renderers/documents/branding.d.ts +0 -2
- package/dist/renderers/documents/branding.js +0 -42
- package/dist/renderers/documents/branding.js.map +0 -1
- package/dist/renderers/documents/entity-types.json +0 -14
- package/dist/renderers/documents/parser/frontmatter.d.ts +0 -5
- package/dist/renderers/documents/parser/frontmatter.js +0 -90
- package/dist/renderers/documents/parser/frontmatter.js.map +0 -1
- package/dist/renderers/documents/parser/index.d.ts +0 -5
- package/dist/renderers/documents/parser/index.js +0 -142
- package/dist/renderers/documents/parser/index.js.map +0 -1
- package/dist/renderers/documents/parser/sections.d.ts +0 -18
- package/dist/renderers/documents/parser/sections.js +0 -131
- package/dist/renderers/documents/parser/sections.js.map +0 -1
- package/dist/renderers/documents/pdf/generator.d.ts +0 -13
- package/dist/renderers/documents/pdf/generator.js +0 -79
- package/dist/renderers/documents/pdf/generator.js.map +0 -1
- package/dist/renderers/documents/plugin.d.ts +0 -2
- package/dist/renderers/documents/plugin.js +0 -63
- package/dist/renderers/documents/plugin.js.map +0 -1
- package/dist/renderers/documents/public/branding/logo.svg +0 -3
- package/dist/renderers/documents/public/editor/chrome.css +0 -461
- package/dist/renderers/documents/public/editor/chrome.js +0 -524
- package/dist/renderers/documents/public/editor/editor.css +0 -751
- package/dist/renderers/documents/public/editor/editor.html +0 -140
- package/dist/renderers/documents/public/editor/editor.js +0 -953
- package/dist/renderers/documents/public/fonts/fonts.css +0 -145
- package/dist/renderers/documents/public/viewer/viewer.css +0 -1
- package/dist/renderers/documents/public/viewer/viewer.js +0 -4
- package/dist/renderers/documents/renderer/back.d.ts +0 -8
- package/dist/renderers/documents/renderer/back.js +0 -28
- package/dist/renderers/documents/renderer/back.js.map +0 -1
- package/dist/renderers/documents/renderer/content.d.ts +0 -7
- package/dist/renderers/documents/renderer/content.js +0 -25
- package/dist/renderers/documents/renderer/content.js.map +0 -1
- package/dist/renderers/documents/renderer/cover.d.ts +0 -15
- package/dist/renderers/documents/renderer/cover.js +0 -43
- package/dist/renderers/documents/renderer/cover.js.map +0 -1
- package/dist/renderers/documents/renderer/helpers.d.ts +0 -1
- package/dist/renderers/documents/renderer/helpers.js +0 -11
- package/dist/renderers/documents/renderer/helpers.js.map +0 -1
- package/dist/renderers/documents/renderer/index.d.ts +0 -32
- package/dist/renderers/documents/renderer/index.js +0 -80
- package/dist/renderers/documents/renderer/index.js.map +0 -1
- package/dist/renderers/documents/renderer/styles.d.ts +0 -16
- package/dist/renderers/documents/renderer/styles.js +0 -546
- package/dist/renderers/documents/renderer/styles.js.map +0 -1
- package/dist/renderers/documents/routes/api.d.ts +0 -2
- package/dist/renderers/documents/routes/api.js +0 -587
- package/dist/renderers/documents/routes/api.js.map +0 -1
- package/dist/renderers/documents/routes/editor.d.ts +0 -2
- package/dist/renderers/documents/routes/editor.js +0 -31
- package/dist/renderers/documents/routes/editor.js.map +0 -1
- package/dist/renderers/documents/routes/viewer.d.ts +0 -2
- package/dist/renderers/documents/routes/viewer.js +0 -67
- package/dist/renderers/documents/routes/viewer.js.map +0 -1
- package/dist/renderers/documents/types.d.ts +0 -61
- package/dist/renderers/documents/types.js +0 -2
- package/dist/renderers/documents/types.js.map +0 -1
- package/dist/renderers/index.d.ts +0 -24
- package/dist/renderers/index.js +0 -66
- package/dist/renderers/index.js.map +0 -1
- package/dist/renderers/slides/design-system/tokens.d.ts +0 -108
- package/dist/renderers/slides/design-system/tokens.js +0 -44
- package/dist/renderers/slides/design-system/tokens.js.map +0 -1
- package/dist/renderers/slides/entity-types.json +0 -14
- package/dist/renderers/slides/parser/comment-parser.d.ts +0 -10
- package/dist/renderers/slides/parser/comment-parser.js +0 -89
- package/dist/renderers/slides/parser/comment-parser.js.map +0 -1
- package/dist/renderers/slides/parser/frontmatter.d.ts +0 -10
- package/dist/renderers/slides/parser/frontmatter.js +0 -93
- package/dist/renderers/slides/parser/frontmatter.js.map +0 -1
- package/dist/renderers/slides/parser/index.d.ts +0 -7
- package/dist/renderers/slides/parser/index.js +0 -569
- package/dist/renderers/slides/parser/index.js.map +0 -1
- package/dist/renderers/slides/parser/slide-splitter.d.ts +0 -6
- package/dist/renderers/slides/parser/slide-splitter.js +0 -54
- package/dist/renderers/slides/parser/slide-splitter.js.map +0 -1
- package/dist/renderers/slides/parser/type-detector.d.ts +0 -6
- package/dist/renderers/slides/parser/type-detector.js +0 -70
- package/dist/renderers/slides/parser/type-detector.js.map +0 -1
- package/dist/renderers/slides/pdf/generator.d.ts +0 -11
- package/dist/renderers/slides/pdf/generator.js +0 -105
- package/dist/renderers/slides/pdf/generator.js.map +0 -1
- package/dist/renderers/slides/plugin.d.ts +0 -2
- package/dist/renderers/slides/plugin.js +0 -70
- package/dist/renderers/slides/plugin.js.map +0 -1
- package/dist/renderers/slides/public/editor/.gitkeep +0 -0
- package/dist/renderers/slides/public/editor/chrome.css +0 -461
- package/dist/renderers/slides/public/editor/chrome.js +0 -519
- package/dist/renderers/slides/public/editor/editor.css +0 -896
- package/dist/renderers/slides/public/editor/editor.html +0 -131
- package/dist/renderers/slides/public/editor/editor.js +0 -1038
- package/dist/renderers/slides/public/fonts/fonts.css +0 -145
- package/dist/renderers/slides/public/viewer/.gitkeep +0 -0
- package/dist/renderers/slides/public/viewer/chrome.css +0 -62
- package/dist/renderers/slides/public/viewer/transitions.css +0 -1
- package/dist/renderers/slides/public/viewer/viewer.css +0 -2145
- package/dist/renderers/slides/public/viewer/viewer.js +0 -303
- package/dist/renderers/slides/renderer/chrome/browser-frame.d.ts +0 -5
- package/dist/renderers/slides/renderer/chrome/browser-frame.js +0 -22
- package/dist/renderers/slides/renderer/chrome/browser-frame.js.map +0 -1
- package/dist/renderers/slides/renderer/chrome/mobile-frame.d.ts +0 -6
- package/dist/renderers/slides/renderer/chrome/mobile-frame.js +0 -18
- package/dist/renderers/slides/renderer/chrome/mobile-frame.js.map +0 -1
- package/dist/renderers/slides/renderer/helpers.d.ts +0 -13
- package/dist/renderers/slides/renderer/helpers.js +0 -33
- package/dist/renderers/slides/renderer/helpers.js.map +0 -1
- package/dist/renderers/slides/renderer/index.d.ts +0 -16
- package/dist/renderers/slides/renderer/index.js +0 -160
- package/dist/renderers/slides/renderer/index.js.map +0 -1
- package/dist/renderers/slides/renderer/layouts/agenda.d.ts +0 -2
- package/dist/renderers/slides/renderer/layouts/agenda.js +0 -18
- package/dist/renderers/slides/renderer/layouts/agenda.js.map +0 -1
- package/dist/renderers/slides/renderer/layouts/blank.d.ts +0 -2
- package/dist/renderers/slides/renderer/layouts/blank.js +0 -4
- package/dist/renderers/slides/renderer/layouts/blank.js.map +0 -1
- package/dist/renderers/slides/renderer/layouts/columns.d.ts +0 -2
- package/dist/renderers/slides/renderer/layouts/columns.js +0 -32
- package/dist/renderers/slides/renderer/layouts/columns.js.map +0 -1
- package/dist/renderers/slides/renderer/layouts/cover.d.ts +0 -2
- package/dist/renderers/slides/renderer/layouts/cover.js +0 -18
- package/dist/renderers/slides/renderer/layouts/cover.js.map +0 -1
- package/dist/renderers/slides/renderer/layouts/diagram-concentric.d.ts +0 -2
- package/dist/renderers/slides/renderer/layouts/diagram-concentric.js +0 -120
- package/dist/renderers/slides/renderer/layouts/diagram-concentric.js.map +0 -1
- package/dist/renderers/slides/renderer/layouts/diagram-matrix.d.ts +0 -2
- package/dist/renderers/slides/renderer/layouts/diagram-matrix.js +0 -158
- package/dist/renderers/slides/renderer/layouts/diagram-matrix.js.map +0 -1
- package/dist/renderers/slides/renderer/layouts/diagram-pyramid.d.ts +0 -2
- package/dist/renderers/slides/renderer/layouts/diagram-pyramid.js +0 -86
- package/dist/renderers/slides/renderer/layouts/diagram-pyramid.js.map +0 -1
- package/dist/renderers/slides/renderer/layouts/diagram-sitemap.d.ts +0 -2
- package/dist/renderers/slides/renderer/layouts/diagram-sitemap.js +0 -146
- package/dist/renderers/slides/renderer/layouts/diagram-sitemap.js.map +0 -1
- package/dist/renderers/slides/renderer/layouts/diagram-venn.d.ts +0 -2
- package/dist/renderers/slides/renderer/layouts/diagram-venn.js +0 -100
- package/dist/renderers/slides/renderer/layouts/diagram-venn.js.map +0 -1
- package/dist/renderers/slides/renderer/layouts/diagram.d.ts +0 -2
- package/dist/renderers/slides/renderer/layouts/diagram.js +0 -21
- package/dist/renderers/slides/renderer/layouts/diagram.js.map +0 -1
- package/dist/renderers/slides/renderer/layouts/divider.d.ts +0 -2
- package/dist/renderers/slides/renderer/layouts/divider.js +0 -4
- package/dist/renderers/slides/renderer/layouts/divider.js.map +0 -1
- package/dist/renderers/slides/renderer/layouts/end.d.ts +0 -2
- package/dist/renderers/slides/renderer/layouts/end.js +0 -8
- package/dist/renderers/slides/renderer/layouts/end.js.map +0 -1
- package/dist/renderers/slides/renderer/layouts/framework.d.ts +0 -2
- package/dist/renderers/slides/renderer/layouts/framework.js +0 -47
- package/dist/renderers/slides/renderer/layouts/framework.js.map +0 -1
- package/dist/renderers/slides/renderer/layouts/image-browser-2up.d.ts +0 -2
- package/dist/renderers/slides/renderer/layouts/image-browser-2up.js +0 -38
- package/dist/renderers/slides/renderer/layouts/image-browser-2up.js.map +0 -1
- package/dist/renderers/slides/renderer/layouts/image-browser-6up.d.ts +0 -2
- package/dist/renderers/slides/renderer/layouts/image-browser-6up.js +0 -30
- package/dist/renderers/slides/renderer/layouts/image-browser-6up.js.map +0 -1
- package/dist/renderers/slides/renderer/layouts/image-browser.d.ts +0 -2
- package/dist/renderers/slides/renderer/layouts/image-browser.js +0 -18
- package/dist/renderers/slides/renderer/layouts/image-browser.js.map +0 -1
- package/dist/renderers/slides/renderer/layouts/image-bullets.d.ts +0 -2
- package/dist/renderers/slides/renderer/layouts/image-bullets.js +0 -26
- package/dist/renderers/slides/renderer/layouts/image-bullets.js.map +0 -1
- package/dist/renderers/slides/renderer/layouts/image-device-pair.d.ts +0 -2
- package/dist/renderers/slides/renderer/layouts/image-device-pair.js +0 -34
- package/dist/renderers/slides/renderer/layouts/image-device-pair.js.map +0 -1
- package/dist/renderers/slides/renderer/layouts/image-full.d.ts +0 -2
- package/dist/renderers/slides/renderer/layouts/image-full.js +0 -36
- package/dist/renderers/slides/renderer/layouts/image-full.js.map +0 -1
- package/dist/renderers/slides/renderer/layouts/image-grid-2x2.d.ts +0 -2
- package/dist/renderers/slides/renderer/layouts/image-grid-2x2.js +0 -23
- package/dist/renderers/slides/renderer/layouts/image-grid-2x2.js.map +0 -1
- package/dist/renderers/slides/renderer/layouts/image-keywords.d.ts +0 -2
- package/dist/renderers/slides/renderer/layouts/image-keywords.js +0 -31
- package/dist/renderers/slides/renderer/layouts/image-keywords.js.map +0 -1
- package/dist/renderers/slides/renderer/layouts/image-mobile-3up.d.ts +0 -2
- package/dist/renderers/slides/renderer/layouts/image-mobile-3up.js +0 -22
- package/dist/renderers/slides/renderer/layouts/image-mobile-3up.js.map +0 -1
- package/dist/renderers/slides/renderer/layouts/image-mobile.d.ts +0 -2
- package/dist/renderers/slides/renderer/layouts/image-mobile.js +0 -17
- package/dist/renderers/slides/renderer/layouts/image-mobile.js.map +0 -1
- package/dist/renderers/slides/renderer/layouts/image-split-right.d.ts +0 -2
- package/dist/renderers/slides/renderer/layouts/image-split-right.js +0 -19
- package/dist/renderers/slides/renderer/layouts/image-split-right.js.map +0 -1
- package/dist/renderers/slides/renderer/layouts/image-split.d.ts +0 -2
- package/dist/renderers/slides/renderer/layouts/image-split.js +0 -19
- package/dist/renderers/slides/renderer/layouts/image-split.js.map +0 -1
- package/dist/renderers/slides/renderer/layouts/introductions.d.ts +0 -2
- package/dist/renderers/slides/renderer/layouts/introductions.js +0 -41
- package/dist/renderers/slides/renderer/layouts/introductions.js.map +0 -1
- package/dist/renderers/slides/renderer/layouts/moodboard.d.ts +0 -15
- package/dist/renderers/slides/renderer/layouts/moodboard.js +0 -63
- package/dist/renderers/slides/renderer/layouts/moodboard.js.map +0 -1
- package/dist/renderers/slides/renderer/layouts/next-steps.d.ts +0 -2
- package/dist/renderers/slides/renderer/layouts/next-steps.js +0 -13
- package/dist/renderers/slides/renderer/layouts/next-steps.js.map +0 -1
- package/dist/renderers/slides/renderer/layouts/pullquote.d.ts +0 -2
- package/dist/renderers/slides/renderer/layouts/pullquote.js +0 -17
- package/dist/renderers/slides/renderer/layouts/pullquote.js.map +0 -1
- package/dist/renderers/slides/renderer/layouts/schedule.d.ts +0 -2
- package/dist/renderers/slides/renderer/layouts/schedule.js +0 -58
- package/dist/renderers/slides/renderer/layouts/schedule.js.map +0 -1
- package/dist/renderers/slides/renderer/layouts/section.d.ts +0 -2
- package/dist/renderers/slides/renderer/layouts/section.js +0 -18
- package/dist/renderers/slides/renderer/layouts/section.js.map +0 -1
- package/dist/renderers/slides/renderer/layouts/statement.d.ts +0 -2
- package/dist/renderers/slides/renderer/layouts/statement.js +0 -13
- package/dist/renderers/slides/renderer/layouts/statement.js.map +0 -1
- package/dist/renderers/slides/renderer/layouts/stats.d.ts +0 -2
- package/dist/renderers/slides/renderer/layouts/stats.js +0 -26
- package/dist/renderers/slides/renderer/layouts/stats.js.map +0 -1
- package/dist/renderers/slides/renderer/layouts/table.d.ts +0 -2
- package/dist/renderers/slides/renderer/layouts/table.js +0 -23
- package/dist/renderers/slides/renderer/layouts/table.js.map +0 -1
- package/dist/renderers/slides/renderer/layouts/text-body.d.ts +0 -2
- package/dist/renderers/slides/renderer/layouts/text-body.js +0 -14
- package/dist/renderers/slides/renderer/layouts/text-body.js.map +0 -1
- package/dist/renderers/slides/renderer/placeholder.d.ts +0 -5
- package/dist/renderers/slides/renderer/placeholder.js +0 -12
- package/dist/renderers/slides/renderer/placeholder.js.map +0 -1
- package/dist/renderers/slides/routes/api.d.ts +0 -2
- package/dist/renderers/slides/routes/api.js +0 -568
- package/dist/renderers/slides/routes/api.js.map +0 -1
- package/dist/renderers/slides/routes/editor.d.ts +0 -2
- package/dist/renderers/slides/routes/editor.js +0 -32
- package/dist/renderers/slides/routes/editor.js.map +0 -1
- package/dist/renderers/slides/routes/viewer.d.ts +0 -2
- package/dist/renderers/slides/routes/viewer.js +0 -67
- package/dist/renderers/slides/routes/viewer.js.map +0 -1
- package/dist/renderers/slides/types.d.ts +0 -111
- package/dist/renderers/slides/types.js +0 -2
- package/dist/renderers/slides/types.js.map +0 -1
- package/dist/server/agents/agent-loader.d.ts +0 -16
- package/dist/server/agents/agent-loader.js +0 -175
- package/dist/server/agents/agent-loader.js.map +0 -1
- package/dist/server/agents/agent-runner.d.ts +0 -33
- package/dist/server/agents/agent-runner.js +0 -187
- package/dist/server/agents/agent-runner.js.map +0 -1
- package/dist/server/agents/agent-runtime.d.ts +0 -39
- package/dist/server/agents/agent-runtime.js +0 -214
- package/dist/server/agents/agent-runtime.js.map +0 -1
- package/dist/server/agents/base-agent.d.ts +0 -30
- package/dist/server/agents/base-agent.js +0 -88
- package/dist/server/agents/base-agent.js.map +0 -1
- package/dist/server/agents/executive-digest.d.ts +0 -16
- package/dist/server/agents/executive-digest.js +0 -115
- package/dist/server/agents/executive-digest.js.map +0 -1
- package/dist/server/agents/graph-steward.d.ts +0 -16
- package/dist/server/agents/graph-steward.js +0 -59
- package/dist/server/agents/graph-steward.js.map +0 -1
- package/dist/server/agents/meeting-followup.d.ts +0 -16
- package/dist/server/agents/meeting-followup.js +0 -88
- package/dist/server/agents/meeting-followup.js.map +0 -1
- package/dist/server/agents/pipeline-monitor.d.ts +0 -15
- package/dist/server/agents/pipeline-monitor.js +0 -86
- package/dist/server/agents/pipeline-monitor.js.map +0 -1
- package/dist/server/agents/types.d.ts +0 -81
- package/dist/server/agents/types.js +0 -41
- package/dist/server/agents/types.js.map +0 -1
- package/dist/server/chrome/chrome.css +0 -701
- 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/agents-api.d.ts +0 -10
- package/dist/server/routes/agents-api.js +0 -25
- package/dist/server/routes/agents-api.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/features-api.d.ts +0 -10
- package/dist/server/routes/features-api.js +0 -15
- package/dist/server/routes/features-api.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 -14
- package/dist/server/routes/meeting-ingest-api.js +0 -117
- 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 -569
- package/dist/server/routes/messages-api.js.map +0 -1
- package/dist/server/routes/sync-api.d.ts +0 -26
- package/dist/server/routes/sync-api.js +0 -848
- package/dist/server/routes/sync-api.js.map +0 -1
- package/dist/server/routes/view-public.d.ts +0 -10
- package/dist/server/routes/view-public.js +0 -107
- package/dist/server/routes/view-public.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/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 -206
- package/dist/services/briefing.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/heartbeat.d.ts +0 -35
- package/dist/services/heartbeat.js +0 -236
- 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.d.ts +0 -97
- package/dist/services/meeting-processor.js +0 -382
- package/dist/services/meeting-processor.js.map +0 -1
- package/dist/services/message-service.d.ts +0 -117
- package/dist/services/message-service.js +0 -414
- package/dist/services/message-service.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.B3eM5J6m.css +0 -1
- package/dist/web/_app/immutable/assets/10.2jzI3cZY.css +0 -1
- package/dist/web/_app/immutable/assets/11.BbBNo8jg.css +0 -1
- package/dist/web/_app/immutable/assets/12.vV-8Nqud.css +0 -1
- package/dist/web/_app/immutable/assets/2.CDsrnCq3.css +0 -1
- package/dist/web/_app/immutable/assets/3.Ih7su2rl.css +0 -1
- package/dist/web/_app/immutable/assets/4.CwXIQz3p.css +0 -1
- package/dist/web/_app/immutable/assets/ChevronLeft.BwM9mwS4.css +0 -1
- package/dist/web/_app/immutable/assets/GraphView.CRV5cekT.css +0 -1
- package/dist/web/_app/immutable/assets/Toaster.rN8r_Hzv.css +0 -1
- package/dist/web/_app/immutable/assets/ViewToolbar.CsWTe0yn.css +0 -1
- package/dist/web/_app/immutable/assets/WorkspaceView.iWtzksrr.css +0 -1
- package/dist/web/_app/immutable/chunks/0kuZ2gtb.js +0 -1
- package/dist/web/_app/immutable/chunks/1Ea1UXwM.js +0 -2
- package/dist/web/_app/immutable/chunks/284Zhbif.js +0 -1
- package/dist/web/_app/immutable/chunks/7S2LGqoP.js +0 -2
- package/dist/web/_app/immutable/chunks/7WZENMwt.js +0 -1
- package/dist/web/_app/immutable/chunks/B0qHb2ee.js +0 -1
- package/dist/web/_app/immutable/chunks/B45od9dM.js +0 -2
- package/dist/web/_app/immutable/chunks/B4hXkypI.js +0 -1
- package/dist/web/_app/immutable/chunks/BB_5th5W.js +0 -3383
- package/dist/web/_app/immutable/chunks/BDvg8O5k.js +0 -5
- package/dist/web/_app/immutable/chunks/BGiCmAMQ.js +0 -4
- package/dist/web/_app/immutable/chunks/BHgT2Ede.js +0 -1
- package/dist/web/_app/immutable/chunks/BQ1nK9ru.js +0 -1
- package/dist/web/_app/immutable/chunks/BS0-13V2.js +0 -1
- package/dist/web/_app/immutable/chunks/BSiC7hSS.js +0 -1
- package/dist/web/_app/immutable/chunks/BkxW0BJZ.js +0 -1
- package/dist/web/_app/immutable/chunks/Bp7FKkGt.js +0 -1
- package/dist/web/_app/immutable/chunks/BrebtJNG.js +0 -18
- package/dist/web/_app/immutable/chunks/Bz0ZjVQE.js +0 -2
- package/dist/web/_app/immutable/chunks/C0LVZhvn.js +0 -1
- package/dist/web/_app/immutable/chunks/C0Zx4tMe.js +0 -1
- package/dist/web/_app/immutable/chunks/CHJcPZZK.js +0 -2
- package/dist/web/_app/immutable/chunks/CRpK3grw.js +0 -2
- package/dist/web/_app/immutable/chunks/CSVbGg_b.js +0 -5
- 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/CdIKiXW6.js +0 -1
- package/dist/web/_app/immutable/chunks/CqkleIqs.js +0 -1
- package/dist/web/_app/immutable/chunks/D14M5KlG.js +0 -1
- package/dist/web/_app/immutable/chunks/D71c9o7J.js +0 -2
- package/dist/web/_app/immutable/chunks/DFYOFE3o.js +0 -1
- package/dist/web/_app/immutable/chunks/DHJAqtPb.js +0 -1
- package/dist/web/_app/immutable/chunks/DOqcDZIJ.js +0 -1
- package/dist/web/_app/immutable/chunks/DQNtFKv6.js +0 -1
- package/dist/web/_app/immutable/chunks/DZHWps9n.js +0 -1
- package/dist/web/_app/immutable/chunks/DjLrjK2H.js +0 -1
- package/dist/web/_app/immutable/chunks/DjvJRtva.js +0 -1
- package/dist/web/_app/immutable/chunks/DnL9f0lc.js +0 -7
- package/dist/web/_app/immutable/chunks/Dqq8gyOz.js +0 -1
- package/dist/web/_app/immutable/chunks/DsnmJJEf.js +0 -1
- package/dist/web/_app/immutable/chunks/DtG1tx2A.js +0 -1
- package/dist/web/_app/immutable/chunks/Dxmmz-Kc.js +0 -1
- package/dist/web/_app/immutable/chunks/DzVOENkg.js +0 -1
- package/dist/web/_app/immutable/chunks/Ee5s0qSS.js +0 -5
- package/dist/web/_app/immutable/chunks/KlRV1tKP.js +0 -1
- package/dist/web/_app/immutable/chunks/L7dfS1-w.js +0 -1
- package/dist/web/_app/immutable/chunks/MaQouOBH.js +0 -2
- package/dist/web/_app/immutable/chunks/PPVm8Dsz.js +0 -1
- package/dist/web/_app/immutable/chunks/WSUKABI_.js +0 -1
- package/dist/web/_app/immutable/chunks/_7ZfIgbM.js +0 -1
- package/dist/web/_app/immutable/chunks/pNJmbo_B.js +0 -1
- package/dist/web/_app/immutable/chunks/q4I7EnCp.js +0 -1
- package/dist/web/_app/immutable/chunks/qE6Hm01v.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/chunks/wZWzupWT.js +0 -1
- package/dist/web/_app/immutable/entry/app.Dc6h105F.js +0 -2
- package/dist/web/_app/immutable/entry/start.D4codAU1.js +0 -1
- package/dist/web/_app/immutable/nodes/0.BM3j5xaK.js +0 -2
- package/dist/web/_app/immutable/nodes/1.CZ2dT63B.js +0 -1
- package/dist/web/_app/immutable/nodes/10.AJJtsnPU.js +0 -1
- package/dist/web/_app/immutable/nodes/11.B7SEgGLF.js +0 -1
- package/dist/web/_app/immutable/nodes/12.BcJKl4UQ.js +0 -1
- package/dist/web/_app/immutable/nodes/2.jp27tyTq.js +0 -269
- package/dist/web/_app/immutable/nodes/3.I7SH_06w.js +0 -5
- package/dist/web/_app/immutable/nodes/4.Bdphc-UJ.js +0 -11
- package/dist/web/_app/immutable/nodes/5.CXpOErnP.js +0 -1
- package/dist/web/_app/immutable/nodes/6.1wcSxmEA.js +0 -1
- package/dist/web/_app/immutable/nodes/7.D0b7WYTp.js +0 -1
- package/dist/web/_app/immutable/nodes/8.D0Gxvy3F.js +0 -1
- package/dist/web/_app/immutable/nodes/9.B5Nr92OR.js +0 -1
|
@@ -18,15 +18,343 @@ import * as syncProtocol from 'y-protocols/sync.js';
|
|
|
18
18
|
import * as awarenessProtocol from 'y-protocols/awareness.js';
|
|
19
19
|
import * as encoding from 'lib0/encoding';
|
|
20
20
|
import * as decoding from 'lib0/decoding';
|
|
21
|
+
import { createHash } from 'node:crypto';
|
|
22
|
+
import { applyTextDiff } from './yjs-text-diff.js';
|
|
23
|
+
function sha256(s) {
|
|
24
|
+
return createHash('sha256').update(s, 'utf-8').digest('hex');
|
|
25
|
+
}
|
|
21
26
|
const MSG_SYNC = 0;
|
|
22
27
|
const MSG_AWARENESS = 1;
|
|
23
|
-
/**
|
|
24
|
-
|
|
28
|
+
/**
|
|
29
|
+
* MSG_CHUNK wraps a fragment of a larger logical message. Chunked frames
|
|
30
|
+
* have layout: [4B msgId][2B seq][2B total][1B origMsgType][chunkPayload].
|
|
31
|
+
* Used to keep individual WS frames under Safari/WebKit's binary-frame
|
|
32
|
+
* threshold (~4KB after deflate), where larger frames get truncated and
|
|
33
|
+
* blow up Yjs's varint decoder with `RangeError: Length out of range of
|
|
34
|
+
* buffer`. The client reassembles chunks and dispatches as if the
|
|
35
|
+
* original `origMsgType` frame had arrived intact.
|
|
36
|
+
*/
|
|
37
|
+
const MSG_CHUNK = 2;
|
|
38
|
+
/** Threshold above which an outbound payload is split into MSG_CHUNK
|
|
39
|
+
* frames. 4KB stays well under the smallest reported Safari WebSocket
|
|
40
|
+
* binary-frame failure size, while keeping the common keystroke/awareness
|
|
41
|
+
* traffic on the single-frame fast path. */
|
|
42
|
+
const MAX_CHUNK_PAYLOAD = 4096;
|
|
43
|
+
/**
|
|
44
|
+
* Grace period before destroying an idle Y.Doc (ms).
|
|
45
|
+
* Keep long enough that async server-side processing (LLM meeting summary,
|
|
46
|
+
* agent mutations, etc.) can push updates into the Y.Doc via
|
|
47
|
+
* applyAgentContent while the client is transiently disconnected.
|
|
48
|
+
*/
|
|
49
|
+
const DOC_IDLE_TIMEOUT = 120_000;
|
|
50
|
+
/**
|
|
51
|
+
* After a client connects to a fresh (server-restart or first-open) Y.Doc,
|
|
52
|
+
* wait this long for the client's sync-step-2 to arrive before seeding
|
|
53
|
+
* from disk. If the client has state (reconnect after server restart),
|
|
54
|
+
* their sync populates the Y.Doc and we skip the disk seed — preventing
|
|
55
|
+
* the CRDT merge that would otherwise produce duplicated content when
|
|
56
|
+
* two origins insert the same bytes.
|
|
57
|
+
*/
|
|
58
|
+
const SEED_WAIT_MS = 500;
|
|
59
|
+
/**
|
|
60
|
+
* Origins for which server-initiated `ydoc.transact` updates are relayed
|
|
61
|
+
* to all connected clients. The broadcast observer registered in `doLoad`
|
|
62
|
+
* filters by this set; updates from other origins (including `ws-client`,
|
|
63
|
+
* which `handleMessage` already relays peer-to-peer) are skipped to avoid
|
|
64
|
+
* double-sends and infinite-loop hazards.
|
|
65
|
+
*/
|
|
66
|
+
const BROADCAST_ORIGINS = new Set([
|
|
67
|
+
'server-sync-disk-merge', // reconcileFromDisk (boot / git-pull / dev-tools)
|
|
68
|
+
'server-agent-write', // applyAgentContent post-commit broadcast
|
|
69
|
+
]);
|
|
70
|
+
/**
|
|
71
|
+
* Thrown by `assertWritable` when broadcast is disabled AND a doc has
|
|
72
|
+
* active clients AND the operator has not explicitly opted into the
|
|
73
|
+
* degraded mode via `STUDIOGRAPH_ALLOW_DEGRADED_WRITES`. Surfaces a hard
|
|
74
|
+
* error to the caller (MCP / agent / event processor) instead of silently
|
|
75
|
+
* mutating the server's Y.Doc out of sync with connected editors.
|
|
76
|
+
*/
|
|
77
|
+
export class BroadcastDisabledLiveClientsError extends Error {
|
|
78
|
+
docName;
|
|
79
|
+
code = 'BROADCAST_DISABLED_LIVE_CLIENTS';
|
|
80
|
+
constructor(docName) {
|
|
81
|
+
super(`Refusing body write to ${docName}: YJS broadcast is disabled (STUDIOGRAPH_YJS_BROADCAST=0) ` +
|
|
82
|
+
`but ${docName} has active editors. Server-side writes would diverge from connected clients. ` +
|
|
83
|
+
`Set STUDIOGRAPH_ALLOW_DEGRADED_WRITES=1 to override at the cost of editor data loss.`);
|
|
84
|
+
this.docName = docName;
|
|
85
|
+
this.name = 'BroadcastDisabledLiveClientsError';
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
/**
|
|
89
|
+
* Live-merge note: there used to be a `LiveEditorPendingError` thrown by
|
|
90
|
+
* `assertWritable` when a connected editor had unsaved typing, refusing the
|
|
91
|
+
* server-write outright. It was retired when server-writes switched to
|
|
92
|
+
* CRDT-merging into the live Y.Doc via `applyAgentContent` (the user watches
|
|
93
|
+
* the change land, with a "Agent edited this note" marker). The accepted
|
|
94
|
+
* residual — a whole-body target reverting the user's un-autosaved edits in
|
|
95
|
+
* rewritten regions — is removed later by the edit-region tool.
|
|
96
|
+
*/
|
|
25
97
|
export class YjsManager {
|
|
26
98
|
workspaceManager;
|
|
99
|
+
persistence;
|
|
27
100
|
docs = new Map();
|
|
28
|
-
|
|
101
|
+
/**
|
|
102
|
+
* In-flight `getOrCreate` promises, keyed by docName. Concurrent calls for
|
|
103
|
+
* the same docName await the same promise instead of building two Y.Docs
|
|
104
|
+
* (which would race on the persistence file and split client traffic).
|
|
105
|
+
*/
|
|
106
|
+
loadingPromises = new Map();
|
|
107
|
+
/**
|
|
108
|
+
* Whether the update-broadcast observer is registered. Read once at
|
|
109
|
+
* construction from `STUDIOGRAPH_YJS_BROADCAST` (default ON). Flipping the
|
|
110
|
+
* env var requires a restart to take effect — dynamic re-check would let
|
|
111
|
+
* connected editors silently diverge when the flag is toggled mid-session.
|
|
112
|
+
*/
|
|
113
|
+
broadcastEnabled;
|
|
114
|
+
/**
|
|
115
|
+
* Operator opt-in to accept degraded-mode data loss (broadcast off +
|
|
116
|
+
* server-side writes while clients are connected). Off by default —
|
|
117
|
+
* forcing operators to make the data-loss trade-off explicit.
|
|
118
|
+
*/
|
|
119
|
+
allowDegradedWrites;
|
|
120
|
+
/**
|
|
121
|
+
* Per-doc lock chain (Phase 2). Each `withDocLock(docName, fn)` appends
|
|
122
|
+
* to this chain so server-side writes for the same doc serialize. Client
|
|
123
|
+
* `handleMessage` updates do NOT acquire the lock — instead they queue
|
|
124
|
+
* into {@link msgSyncQueue} while the lock is held and apply on release.
|
|
125
|
+
*/
|
|
126
|
+
docLocks = new Map();
|
|
127
|
+
/**
|
|
128
|
+
* Per-doc MSG_SYNC buffer. While `withDocLock` is held for a doc, inbound
|
|
129
|
+
* client sync frames for that doc are pushed here instead of applied
|
|
130
|
+
* directly. On lock release, frames are drained in arrival order via the
|
|
131
|
+
* normal `handleMessage` path with origin `'ws-client'`.
|
|
132
|
+
*
|
|
133
|
+
* This is the Codex pass-3 #1 fix: without queueing, a client insert
|
|
134
|
+
* arriving mid-lock would land in `entry.ydoc` BEFORE `applyAgentContent`
|
|
135
|
+
* runs, and the agent's full-body diff would delete that just-typed char.
|
|
136
|
+
* With queueing, the client's insert lands on the post-agent ytext as a
|
|
137
|
+
* fresh CRDT op at its original anchor.
|
|
138
|
+
*/
|
|
139
|
+
msgSyncQueue = new Map();
|
|
140
|
+
constructor(workspaceManager, persistence) {
|
|
29
141
|
this.workspaceManager = workspaceManager;
|
|
142
|
+
this.persistence = persistence;
|
|
143
|
+
this.broadcastEnabled = process.env.STUDIOGRAPH_YJS_BROADCAST !== '0';
|
|
144
|
+
this.allowDegradedWrites = process.env.STUDIOGRAPH_ALLOW_DEGRADED_WRITES === '1';
|
|
145
|
+
}
|
|
146
|
+
/** Whether the update-broadcast observer is active. Exposed for diagnostics. */
|
|
147
|
+
isBroadcastEnabled() {
|
|
148
|
+
return this.broadcastEnabled;
|
|
149
|
+
}
|
|
150
|
+
/**
|
|
151
|
+
* Pre-write guard for server-write body paths. Throws when broadcast is
|
|
152
|
+
* disabled, the doc has active clients, and the operator hasn't opted into
|
|
153
|
+
* degraded-mode writes — server-side writes would silently diverge from
|
|
154
|
+
* connected editors (→ `BroadcastDisabledLiveClientsError`).
|
|
155
|
+
*
|
|
156
|
+
* It used to ALSO refuse a server-write when a connected editor had unsaved
|
|
157
|
+
* typing (`LiveEditorPendingError`). That refusal was retired with the
|
|
158
|
+
* live-merge model: server-writes now CRDT-merge into the live Y.Doc via
|
|
159
|
+
* `applyAgentContent` instead of being blocked. The residual — a whole-body
|
|
160
|
+
* target reverting the user's un-autosaved edits in regions the agent
|
|
161
|
+
* rewrote — is accepted (the future edit-region tool removes it). The user
|
|
162
|
+
* sees the merge land live plus a "Agent edited this note" marker.
|
|
163
|
+
*
|
|
164
|
+
* Called from `writeBody` via the `assertWritable` hook, gated to
|
|
165
|
+
* `source === 'server-write'`. Autosave is the client's own write and is
|
|
166
|
+
* never refused.
|
|
167
|
+
*/
|
|
168
|
+
assertWritable(docName) {
|
|
169
|
+
const entry = this.docs.get(docName);
|
|
170
|
+
// Broadcast-off + live clients guard: with the broadcast observer
|
|
171
|
+
// unregistered, a server-side merge can't reach connected editors, so they
|
|
172
|
+
// would diverge. Refuse unless the operator explicitly accepts that.
|
|
173
|
+
if (!this.broadcastEnabled && !this.allowDegradedWrites) {
|
|
174
|
+
if (entry && entry.clients.size > 0) {
|
|
175
|
+
throw new BroadcastDisabledLiveClientsError(docName);
|
|
176
|
+
}
|
|
177
|
+
}
|
|
178
|
+
}
|
|
179
|
+
/**
|
|
180
|
+
* Acquire a per-doc lock and run `fn` to completion. While the lock is
|
|
181
|
+
* held, inbound client MSG_SYNC frames for the same docName are queued
|
|
182
|
+
* (see {@link msgSyncQueue}) and applied after the lock releases.
|
|
183
|
+
*
|
|
184
|
+
* Contract: server-side writes serialize against other server-side
|
|
185
|
+
* writes for the same doc. Client typing does NOT block — frames are
|
|
186
|
+
* buffered and applied in arrival order on release. The Codex pass-3 #1
|
|
187
|
+
* trace proved this is necessary: without queueing, a client keystroke
|
|
188
|
+
* arriving mid-lock would be deleted by the agent's subsequent full-body
|
|
189
|
+
* diff (the keystroke lives in ytext but not in the agent's target).
|
|
190
|
+
*
|
|
191
|
+
* Per-doc only — other docs' handleMessage traffic is unaffected.
|
|
192
|
+
*
|
|
193
|
+
* Failures inside `fn` propagate to the caller; the lock releases either
|
|
194
|
+
* way so the queued sync drain still runs.
|
|
195
|
+
*/
|
|
196
|
+
async withDocLock(docName, fn) {
|
|
197
|
+
const prev = this.docLocks.get(docName) ?? Promise.resolve();
|
|
198
|
+
let resolveSelf;
|
|
199
|
+
const self = new Promise(resolve => { resolveSelf = resolve; });
|
|
200
|
+
this.docLocks.set(docName, self);
|
|
201
|
+
try {
|
|
202
|
+
await prev.catch(() => { });
|
|
203
|
+
try {
|
|
204
|
+
return await fn();
|
|
205
|
+
}
|
|
206
|
+
finally {
|
|
207
|
+
// Drain queued MSG_SYNC frames in arrival order BEFORE releasing
|
|
208
|
+
// the lock. This guarantees no other server-write holder sees a
|
|
209
|
+
// half-drained queue.
|
|
210
|
+
this.drainMsgSyncQueue(docName);
|
|
211
|
+
}
|
|
212
|
+
}
|
|
213
|
+
finally {
|
|
214
|
+
resolveSelf(undefined);
|
|
215
|
+
// Only clear if we're still the tail — a later lock-acquirer may
|
|
216
|
+
// have appended after us.
|
|
217
|
+
if (this.docLocks.get(docName) === self) {
|
|
218
|
+
this.docLocks.delete(docName);
|
|
219
|
+
}
|
|
220
|
+
}
|
|
221
|
+
}
|
|
222
|
+
/** Whether a server-write lock is currently held for the doc. */
|
|
223
|
+
isLocked(docName) {
|
|
224
|
+
return this.docLocks.has(docName);
|
|
225
|
+
}
|
|
226
|
+
/**
|
|
227
|
+
* Buffer an inbound MSG_SYNC frame for later application. Called from
|
|
228
|
+
* `handleMessage` when the doc is locked.
|
|
229
|
+
*/
|
|
230
|
+
enqueueMsgSync(docName, sender, payload) {
|
|
231
|
+
let q = this.msgSyncQueue.get(docName);
|
|
232
|
+
if (!q) {
|
|
233
|
+
q = [];
|
|
234
|
+
this.msgSyncQueue.set(docName, q);
|
|
235
|
+
}
|
|
236
|
+
q.push({ sender, payload });
|
|
237
|
+
}
|
|
238
|
+
/**
|
|
239
|
+
* Drain any queued MSG_SYNC frames for `docName`, applying them via the
|
|
240
|
+
* normal handleMessage path. Called from `withDocLock` on release.
|
|
241
|
+
*/
|
|
242
|
+
drainMsgSyncQueue(docName) {
|
|
243
|
+
const q = this.msgSyncQueue.get(docName);
|
|
244
|
+
if (!q || q.length === 0)
|
|
245
|
+
return;
|
|
246
|
+
this.msgSyncQueue.delete(docName);
|
|
247
|
+
for (const { sender, payload } of q) {
|
|
248
|
+
// Re-enter handleMessage. Since the lock is being released by the
|
|
249
|
+
// caller above (resolveSelf runs after this drain), the lock check
|
|
250
|
+
// inside handleMessage MUST NOT see this doc as locked. We use a
|
|
251
|
+
// direct call to the apply-sync logic instead of handleMessage to
|
|
252
|
+
// avoid the re-entrant lock check.
|
|
253
|
+
try {
|
|
254
|
+
this.applyClientSync(docName, sender, payload);
|
|
255
|
+
}
|
|
256
|
+
catch (err) {
|
|
257
|
+
console.warn(`[yjs] queued MSG_SYNC drain for ${docName} failed`, err);
|
|
258
|
+
}
|
|
259
|
+
}
|
|
260
|
+
}
|
|
261
|
+
/**
|
|
262
|
+
* Apply a client sync message directly, bypassing the lock check. Used
|
|
263
|
+
* by `drainMsgSyncQueue`. Mirrors the MSG_SYNC branch of
|
|
264
|
+
* {@link handleMessage} — keep in sync if that branch changes.
|
|
265
|
+
*/
|
|
266
|
+
applyClientSync(docName, sender, payload) {
|
|
267
|
+
const entry = this.docs.get(docName);
|
|
268
|
+
if (!entry)
|
|
269
|
+
return;
|
|
270
|
+
const decoder = decoding.createDecoder(payload);
|
|
271
|
+
const encoder = encoding.createEncoder();
|
|
272
|
+
syncProtocol.readSyncMessage(decoder, encoder, entry.ydoc, 'ws-client');
|
|
273
|
+
if (!entry.seeded && entry.ydoc.getText('content').length > 0) {
|
|
274
|
+
entry.seeded = true;
|
|
275
|
+
if (entry.seedTimer) {
|
|
276
|
+
clearTimeout(entry.seedTimer);
|
|
277
|
+
entry.seedTimer = undefined;
|
|
278
|
+
}
|
|
279
|
+
const parsed = this.parseDocName(docName);
|
|
280
|
+
if (parsed)
|
|
281
|
+
entry.mdRevisionHash = sha256(this.readDiskContent(parsed));
|
|
282
|
+
this.broadcastDocReady(docName);
|
|
283
|
+
}
|
|
284
|
+
if (encoding.length(encoder) > 0) {
|
|
285
|
+
this.sendToClient(sender, docName, MSG_SYNC, encoding.toUint8Array(encoder));
|
|
286
|
+
}
|
|
287
|
+
for (const client of entry.clients) {
|
|
288
|
+
if (client === sender || client.readyState !== 1)
|
|
289
|
+
continue;
|
|
290
|
+
this.sendToClient(client, docName, MSG_SYNC, payload);
|
|
291
|
+
}
|
|
292
|
+
}
|
|
293
|
+
/**
|
|
294
|
+
* Apply a server-write target body to the live Y.Doc.
|
|
295
|
+
*
|
|
296
|
+
* Called from `graph.update`'s server-write branch AFTER disk + commit
|
|
297
|
+
* have succeeded. The disk-first ordering is deliberate: clients only see
|
|
298
|
+
* server-initiated changes that are durable. If applying here fails,
|
|
299
|
+
* disk and commit are unaffected — but live clients are out of sync.
|
|
300
|
+
*
|
|
301
|
+
* Returns `{ applied: 'no-doc' | 'unseeded' | 'ok' }`. For the first two,
|
|
302
|
+
* the caller already wrote disk; no live editor needs the broadcast.
|
|
303
|
+
*
|
|
304
|
+
* On `'ok'`: sets `entry.mdRevisionHash = sha256(target)` BEFORE the
|
|
305
|
+
* transact wraps, applies the diff with origin `'server-agent-write'`
|
|
306
|
+
* (broadcast-allowlisted), returns success.
|
|
307
|
+
*
|
|
308
|
+
* On failure (rare — applyTextDiff is just delete/insert ops), sends a
|
|
309
|
+
* `doc_conflict` JSON frame to all clients and rethrows. Conflict UI
|
|
310
|
+
* is the user's signal that disk and Y.Doc diverged.
|
|
311
|
+
*/
|
|
312
|
+
applyAgentContent(docName, target) {
|
|
313
|
+
const entry = this.docs.get(docName);
|
|
314
|
+
if (!entry)
|
|
315
|
+
return { applied: 'no-doc' };
|
|
316
|
+
if (!entry.seeded)
|
|
317
|
+
return { applied: 'unseeded' };
|
|
318
|
+
try {
|
|
319
|
+
const ytext = entry.ydoc.getText('content');
|
|
320
|
+
// Set the hash BEFORE the transact. applyTextDiff makes ytext === target
|
|
321
|
+
// after the transact, so sha256(target) is the post-state hash. The
|
|
322
|
+
// persistence observer fires during the transact and reads the live
|
|
323
|
+
// hash via the resolver — it will see the new hash either way (Phase
|
|
324
|
+
// 1c flush-time resolver), but pinning it before is defense in depth.
|
|
325
|
+
entry.mdRevisionHash = sha256(target);
|
|
326
|
+
applyTextDiff(entry.ydoc, ytext, target, 'server-agent-write');
|
|
327
|
+
return { applied: 'ok' };
|
|
328
|
+
}
|
|
329
|
+
catch (err) {
|
|
330
|
+
// applyTextDiff itself doesn't throw for valid strings, but if Yjs
|
|
331
|
+
// somehow rejects the transact we surface conflict UI to clients so
|
|
332
|
+
// they don't keep typing into a divergent Y.Doc and back-stomp disk.
|
|
333
|
+
this.sendDocConflict(docName, 'apply-agent-content-failed');
|
|
334
|
+
throw err;
|
|
335
|
+
}
|
|
336
|
+
}
|
|
337
|
+
/**
|
|
338
|
+
* Send a `doc_conflict` JSON frame to every connected client of a doc.
|
|
339
|
+
* Editor handles by entering readonly conflict UI: "another writer made
|
|
340
|
+
* a change we couldn't sync to your editor; reload to continue."
|
|
341
|
+
*
|
|
342
|
+
* Used by `applyAgentContent` failure path. Distinct from `doc_ready`
|
|
343
|
+
* (the heartbeat) — conflict implies user must take action.
|
|
344
|
+
*/
|
|
345
|
+
sendDocConflict(docName, reason) {
|
|
346
|
+
const entry = this.docs.get(docName);
|
|
347
|
+
if (!entry)
|
|
348
|
+
return;
|
|
349
|
+
const msg = JSON.stringify({ type: 'doc_conflict', docName, reason });
|
|
350
|
+
for (const client of entry.clients) {
|
|
351
|
+
if (client.readyState !== 1)
|
|
352
|
+
continue;
|
|
353
|
+
try {
|
|
354
|
+
client.send(msg);
|
|
355
|
+
}
|
|
356
|
+
catch { /* non-fatal */ }
|
|
357
|
+
}
|
|
30
358
|
}
|
|
31
359
|
/**
|
|
32
360
|
* Parse a docName ("repo/entityType/entityId") into its components.
|
|
@@ -38,70 +366,322 @@ export class YjsManager {
|
|
|
38
366
|
return { repo: parts[0], entityType: parts[1], entityId: parts.slice(2).join('/') };
|
|
39
367
|
}
|
|
40
368
|
/**
|
|
41
|
-
* Get or create a Y.Doc for an entity.
|
|
369
|
+
* Get or create a Y.Doc for an entity.
|
|
370
|
+
*
|
|
371
|
+
* Async because persistence loads from disk. Concurrent calls for the same
|
|
372
|
+
* docName await the same in-flight promise so we don't build two Y.Docs.
|
|
373
|
+
*
|
|
374
|
+
* If a persisted snapshot exists, applies it to the fresh Y.Doc and marks
|
|
375
|
+
* `seeded = true` immediately — reconnecting clients then see a server
|
|
376
|
+
* state vector that already includes their pre-restart ops, so sync-step-2
|
|
377
|
+
* is a no-op and the duplication race is closed.
|
|
378
|
+
*
|
|
379
|
+
* If no snapshot exists (first-ever open of this entity, or persistence
|
|
380
|
+
* disabled), leaves `seeded = false`. The existing deferred-seed path in
|
|
381
|
+
* addClient + handleMessage will populate the Y.Doc from the .md file.
|
|
42
382
|
*/
|
|
43
|
-
getOrCreate(docName) {
|
|
383
|
+
async getOrCreate(docName) {
|
|
44
384
|
const existing = this.docs.get(docName);
|
|
45
385
|
if (existing)
|
|
46
386
|
return existing;
|
|
47
|
-
|
|
387
|
+
const inFlight = this.loadingPromises.get(docName);
|
|
388
|
+
if (inFlight)
|
|
389
|
+
return inFlight;
|
|
390
|
+
const promise = this.doLoad(docName);
|
|
391
|
+
this.loadingPromises.set(docName, promise);
|
|
392
|
+
try {
|
|
393
|
+
return await promise;
|
|
394
|
+
}
|
|
395
|
+
finally {
|
|
396
|
+
this.loadingPromises.delete(docName);
|
|
397
|
+
}
|
|
398
|
+
}
|
|
399
|
+
async doLoad(docName) {
|
|
48
400
|
const parsed = this.parseDocName(docName);
|
|
49
401
|
if (!parsed)
|
|
50
402
|
return null;
|
|
51
|
-
|
|
52
|
-
if (!
|
|
403
|
+
// Repo must exist before we allocate anything.
|
|
404
|
+
if (!this.workspaceManager.getGraph(parsed.repo))
|
|
53
405
|
return null;
|
|
54
|
-
let diskContent = '';
|
|
55
|
-
try {
|
|
56
|
-
const entity = graph.get(parsed.entityType, parsed.entityId);
|
|
57
|
-
diskContent = entity?.document?.content ?? '';
|
|
58
|
-
}
|
|
59
|
-
catch {
|
|
60
|
-
// Entity not found — start with empty doc
|
|
61
|
-
}
|
|
62
406
|
const ydoc = new Y.Doc();
|
|
63
|
-
const ytext = ydoc.getText('content');
|
|
64
407
|
const awareness = new awarenessProtocol.Awareness(ydoc);
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
408
|
+
let seeded = false;
|
|
409
|
+
let mdRevisionHash = '';
|
|
410
|
+
if (this.persistence) {
|
|
411
|
+
try {
|
|
412
|
+
const loaded = await this.persistence.load(docName);
|
|
413
|
+
if (loaded) {
|
|
414
|
+
// Tag the load with a known origin so the persistence-write observer
|
|
415
|
+
// (registered below) doesn't re-encode and re-write what we just read.
|
|
416
|
+
Y.applyUpdate(ydoc, loaded.state, 'persistence-load');
|
|
417
|
+
seeded = true;
|
|
418
|
+
mdRevisionHash = loaded.meta.mdRevisionHash;
|
|
419
|
+
// Reconcile snapshot vs current .md. If the .md was rewritten while
|
|
420
|
+
// the server was down (agent script, git pull, manual edit), the
|
|
421
|
+
// snapshot is stale relative to disk — smart-merge brings the Y.Doc
|
|
422
|
+
// forward, preserving op continuity in unchanged regions.
|
|
423
|
+
const diskContent = this.readDiskContent(parsed);
|
|
424
|
+
const diskHash = sha256(diskContent);
|
|
425
|
+
if (diskHash !== mdRevisionHash) {
|
|
426
|
+
applyTextDiff(ydoc, ydoc.getText('content'), diskContent, 'startup-reconcile');
|
|
427
|
+
mdRevisionHash = diskHash;
|
|
428
|
+
}
|
|
429
|
+
}
|
|
430
|
+
}
|
|
431
|
+
catch (err) {
|
|
432
|
+
console.warn(`[yjs] persistence.load(${docName}) failed; falling back to .md seed`, err);
|
|
433
|
+
}
|
|
434
|
+
}
|
|
435
|
+
const entry = {
|
|
436
|
+
ydoc,
|
|
437
|
+
awareness,
|
|
438
|
+
clients: new Set(),
|
|
439
|
+
wsClientIds: new Map(),
|
|
440
|
+
seeded,
|
|
441
|
+
mdRevisionHash,
|
|
442
|
+
};
|
|
443
|
+
// Snapshot writer: any non-load update schedules a debounced flush.
|
|
444
|
+
// The hash resolver is invoked at FLUSH time, not schedule time — a
|
|
445
|
+
// server-side transact fires this listener before the calling code
|
|
446
|
+
// resumes to bump `entry.mdRevisionHash`, so capturing the hash at
|
|
447
|
+
// schedule time would persist the pre-mutation value. Resolver pattern
|
|
448
|
+
// (see HashResolver in yjs-persistence) reads the post-state at flush.
|
|
449
|
+
if (this.persistence) {
|
|
450
|
+
const persistence = this.persistence;
|
|
451
|
+
ydoc.on('update', (_update, origin) => {
|
|
452
|
+
if (origin === 'persistence-load')
|
|
453
|
+
return;
|
|
454
|
+
const e = this.docs.get(docName);
|
|
455
|
+
if (!e)
|
|
456
|
+
return;
|
|
457
|
+
persistence.scheduleWrite(docName, ydoc, () => {
|
|
458
|
+
const live = this.docs.get(docName);
|
|
459
|
+
return live ? live.mdRevisionHash : '';
|
|
460
|
+
});
|
|
461
|
+
});
|
|
462
|
+
}
|
|
463
|
+
// Update-broadcast observer (Phase 1a). Relays server-initiated transacts
|
|
464
|
+
// to every connected client. MUST be registered AFTER the persistence
|
|
465
|
+
// observer above so persistence's snapshot scheduling fires first — the
|
|
466
|
+
// flush-time hash resolver makes order non-load-bearing for correctness
|
|
467
|
+
// but pinning it documents intent.
|
|
468
|
+
//
|
|
469
|
+
// Origin filter: only `server-sync-disk-merge` (existing path) and
|
|
470
|
+
// `server-agent-write` (Phase 2 path) broadcast. `ws-client` updates are
|
|
471
|
+
// already relayed peer-to-peer by `handleMessage`; broadcasting them
|
|
472
|
+
// here would double-send. `persistence-load`, `server-seed`, and
|
|
473
|
+
// `startup-reconcile` either have no connected clients yet or are
|
|
474
|
+
// already broadcast manually.
|
|
475
|
+
//
|
|
476
|
+
// Encoding: use the listener's `update` bytes directly via
|
|
477
|
+
// `syncProtocol.writeUpdate`. Do NOT call `Y.encodeStateAsUpdate(ydoc, _)`
|
|
478
|
+
// — full-state re-encode would be wasteful and the second arg is a
|
|
479
|
+
// state vector, not an update.
|
|
480
|
+
//
|
|
481
|
+
// Gated by `STUDIOGRAPH_YJS_BROADCAST` (default on). When off, the
|
|
482
|
+
// observer is not registered; server-side writes refuse to mutate live
|
|
483
|
+
// docs via `assertWritable` instead (fail-closed).
|
|
484
|
+
if (this.broadcastEnabled) {
|
|
485
|
+
ydoc.on('update', (update, origin) => {
|
|
486
|
+
if (!BROADCAST_ORIGINS.has(origin))
|
|
487
|
+
return;
|
|
488
|
+
const e = this.docs.get(docName);
|
|
489
|
+
if (!e)
|
|
490
|
+
return;
|
|
491
|
+
const encoder = encoding.createEncoder();
|
|
492
|
+
syncProtocol.writeUpdate(encoder, update);
|
|
493
|
+
const payload = encoding.toUint8Array(encoder);
|
|
494
|
+
for (const client of e.clients) {
|
|
495
|
+
if (client.readyState !== 1)
|
|
496
|
+
continue;
|
|
497
|
+
try {
|
|
498
|
+
this.sendToClient(client, docName, MSG_SYNC, payload);
|
|
499
|
+
}
|
|
500
|
+
catch { /* per-client send failures must not break the relay loop */ }
|
|
501
|
+
}
|
|
502
|
+
});
|
|
70
503
|
}
|
|
71
|
-
const entry = { ydoc, awareness, clients: new Set(), wsClientIds: new Map() };
|
|
72
504
|
this.docs.set(docName, entry);
|
|
73
505
|
return entry;
|
|
74
506
|
}
|
|
507
|
+
readDiskContent(parsed) {
|
|
508
|
+
try {
|
|
509
|
+
const graph = this.workspaceManager.getGraph(parsed.repo);
|
|
510
|
+
if (!graph)
|
|
511
|
+
return '';
|
|
512
|
+
const entity = graph.get(parsed.entityType, parsed.entityId);
|
|
513
|
+
return entity?.document?.content ?? '';
|
|
514
|
+
}
|
|
515
|
+
catch {
|
|
516
|
+
return '';
|
|
517
|
+
}
|
|
518
|
+
}
|
|
75
519
|
/**
|
|
76
|
-
*
|
|
520
|
+
* Send a JSON `doc_ready` notice to every connected client of `docName`,
|
|
521
|
+
* carrying the authoritative ytext length the client should match before
|
|
522
|
+
* unlocking its editor. This is the seed-success heartbeat the client
|
|
523
|
+
* uses to confirm its local apply actually landed — without it, a frame
|
|
524
|
+
* that arrived but failed to decode (e.g. Safari/WebKit fragmentation
|
|
525
|
+
* issue) would silently leave the editor unlocked on an empty Y.Doc and
|
|
526
|
+
* the next keystroke + autosave would overwrite the disk file.
|
|
77
527
|
*/
|
|
78
|
-
|
|
79
|
-
const entry = this.
|
|
528
|
+
broadcastDocReady(docName) {
|
|
529
|
+
const entry = this.docs.get(docName);
|
|
80
530
|
if (!entry)
|
|
81
531
|
return;
|
|
82
|
-
|
|
532
|
+
const expectedLength = entry.ydoc.getText('content').length;
|
|
533
|
+
const msg = JSON.stringify({ type: 'doc_ready', docName, expectedLength });
|
|
534
|
+
for (const client of entry.clients) {
|
|
535
|
+
if (client.readyState !== 1)
|
|
536
|
+
continue;
|
|
537
|
+
try {
|
|
538
|
+
client.send(msg);
|
|
539
|
+
}
|
|
540
|
+
catch { /* non-fatal */ }
|
|
541
|
+
}
|
|
542
|
+
}
|
|
543
|
+
/**
|
|
544
|
+
* Send `doc_ready` to a single client. Used in addClient when the entry
|
|
545
|
+
* is already seeded — the new joiner needs the heartbeat to unlock its
|
|
546
|
+
* editor without waiting for the next state transition.
|
|
547
|
+
*/
|
|
548
|
+
sendDocReadyToClient(docName, ws) {
|
|
549
|
+
const entry = this.docs.get(docName);
|
|
550
|
+
if (!entry || ws.readyState !== 1)
|
|
551
|
+
return;
|
|
552
|
+
const expectedLength = entry.ydoc.getText('content').length;
|
|
553
|
+
try {
|
|
554
|
+
ws.send(JSON.stringify({ type: 'doc_ready', docName, expectedLength }));
|
|
555
|
+
}
|
|
556
|
+
catch { /* non-fatal */ }
|
|
557
|
+
}
|
|
558
|
+
/**
|
|
559
|
+
* If the Y.Doc is still empty (no client sync has populated it), load
|
|
560
|
+
* content from disk and mark the entry as seeded. Broadcast the seeded
|
|
561
|
+
* state to all connected clients as a sync-step-2 so they see it.
|
|
562
|
+
*
|
|
563
|
+
* Runs ~SEED_WAIT_MS after a client connects. Short-circuits if any
|
|
564
|
+
* earlier sync already flipped the `seeded` flag.
|
|
565
|
+
*/
|
|
566
|
+
maybeSeedFromDisk(docName) {
|
|
567
|
+
const entry = this.docs.get(docName);
|
|
568
|
+
if (!entry || entry.seeded)
|
|
569
|
+
return;
|
|
570
|
+
const ytext = entry.ydoc.getText('content');
|
|
571
|
+
if (ytext.length > 0) {
|
|
572
|
+
// A client sync populated the doc during the wait — nothing to do.
|
|
573
|
+
entry.seeded = true;
|
|
574
|
+
this.broadcastDocReady(docName);
|
|
575
|
+
return;
|
|
576
|
+
}
|
|
577
|
+
const parsed = this.parseDocName(docName);
|
|
578
|
+
if (!parsed)
|
|
579
|
+
return;
|
|
580
|
+
const diskContent = this.readDiskContent(parsed);
|
|
581
|
+
if (diskContent.length === 0) {
|
|
582
|
+
entry.seeded = true;
|
|
583
|
+
entry.mdRevisionHash = sha256('');
|
|
584
|
+
this.broadcastDocReady(docName);
|
|
585
|
+
return;
|
|
586
|
+
}
|
|
587
|
+
entry.ydoc.transact(() => {
|
|
588
|
+
ytext.insert(0, diskContent);
|
|
589
|
+
}, 'server-seed');
|
|
590
|
+
entry.seeded = true;
|
|
591
|
+
entry.mdRevisionHash = sha256(diskContent);
|
|
592
|
+
// Broadcast the newly-seeded state to every connected client so they
|
|
593
|
+
// see the content. Writing sync-step-2 from the now-populated Y.Doc
|
|
594
|
+
// sends the delta (the characters we just inserted).
|
|
595
|
+
const encoder = encoding.createEncoder();
|
|
596
|
+
syncProtocol.writeSyncStep2(encoder, entry.ydoc);
|
|
597
|
+
const payload = encoding.toUint8Array(encoder);
|
|
598
|
+
for (const client of entry.clients) {
|
|
599
|
+
if (client.readyState !== 1)
|
|
600
|
+
continue;
|
|
601
|
+
this.sendToClient(client, docName, MSG_SYNC, payload);
|
|
602
|
+
}
|
|
603
|
+
// Heartbeat: tell clients the authoritative length so they only unlock
|
|
604
|
+
// their editor if their local apply matches. Without this, a client that
|
|
605
|
+
// received the broadcast but failed to decode it (Safari fragmentation
|
|
606
|
+
// bug) would unlock on an empty Y.Doc and overwrite disk on next save.
|
|
607
|
+
this.broadcastDocReady(docName);
|
|
608
|
+
}
|
|
609
|
+
/**
|
|
610
|
+
* Add a client to a document. Async because `getOrCreate` may need to load a
|
|
611
|
+
* persisted snapshot from disk.
|
|
612
|
+
*
|
|
613
|
+
* Protocol (ordered carefully to make first paint resilient):
|
|
614
|
+
* 1. Server: load doc (snapshot or fresh) — `getOrCreate`.
|
|
615
|
+
* 2. Server: send sync-step-1 + sync-step-2 (full state) + awareness
|
|
616
|
+
* FIRST. The client's editor populates and unlocks the moment the
|
|
617
|
+
* sync-step-2 lands; it doesn't need to wait for the ack to render.
|
|
618
|
+
* 3. Server: send `collab:joined` ack JSON LAST. This tells the client
|
|
619
|
+
* it's safe to send its own sync-step-1 + awareness, the load-race
|
|
620
|
+
* protection codex flagged. Sending content before the ack means a
|
|
621
|
+
* delayed/dropped ack still leaves the editor populated — only the
|
|
622
|
+
* client's outbound state vector is gated.
|
|
623
|
+
* 4. Client: receives sync-step-2 → editor renders. Then `collab:joined`
|
|
624
|
+
* → client sends its own sync-step-1 + awareness.
|
|
625
|
+
* 5. Server: applies client sync, relays to peers.
|
|
626
|
+
*/
|
|
627
|
+
async addClient(docName, ws) {
|
|
628
|
+
const entry = await this.getOrCreate(docName);
|
|
629
|
+
if (!entry) {
|
|
630
|
+
// Couldn't find or create the doc (unknown repo, etc). Don't ack —
|
|
631
|
+
// client will time out waiting and remain in its readonly seed-gate state.
|
|
632
|
+
return;
|
|
633
|
+
}
|
|
634
|
+
// Cancel idle destruction timer — a client is joining.
|
|
83
635
|
if (entry.idleTimer) {
|
|
84
636
|
clearTimeout(entry.idleTimer);
|
|
85
637
|
entry.idleTimer = undefined;
|
|
86
638
|
}
|
|
87
639
|
entry.clients.add(ws);
|
|
88
|
-
// Send sync-step-1
|
|
89
|
-
//
|
|
640
|
+
// Send sync-step-1 (our state vector) so the client can reply with what
|
|
641
|
+
// we're missing.
|
|
90
642
|
const encoder = encoding.createEncoder();
|
|
91
643
|
syncProtocol.writeSyncStep1(encoder, entry.ydoc);
|
|
92
644
|
this.sendToClient(ws, docName, MSG_SYNC, encoding.toUint8Array(encoder));
|
|
93
|
-
//
|
|
94
|
-
//
|
|
645
|
+
// Send sync-step-2 (our full state) so the client gets our content
|
|
646
|
+
// without a round trip — this is what unlocks the editor on the client.
|
|
95
647
|
const encoder2 = encoding.createEncoder();
|
|
96
648
|
syncProtocol.writeSyncStep2(encoder2, entry.ydoc);
|
|
97
649
|
this.sendToClient(ws, docName, MSG_SYNC, encoding.toUint8Array(encoder2));
|
|
98
|
-
//
|
|
650
|
+
// Existing peer cursors.
|
|
99
651
|
const awarenessStates = entry.awareness.getStates();
|
|
100
652
|
if (awarenessStates.size > 0) {
|
|
101
653
|
const clients = Array.from(awarenessStates.keys());
|
|
102
654
|
const update = awarenessProtocol.encodeAwarenessUpdate(entry.awareness, clients);
|
|
103
655
|
this.sendToClient(ws, docName, MSG_AWARENESS, update);
|
|
104
656
|
}
|
|
657
|
+
// If we're joining an already-seeded doc (a peer is already editing),
|
|
658
|
+
// the new client needs the doc_ready heartbeat right away so it can
|
|
659
|
+
// unlock once the sync-step-2 we just sent lands locally. Without this,
|
|
660
|
+
// a late joiner would stay readonly forever waiting for a transition
|
|
661
|
+
// that already happened.
|
|
662
|
+
if (entry.seeded) {
|
|
663
|
+
this.sendDocReadyToClient(docName, ws);
|
|
664
|
+
}
|
|
665
|
+
// Ack the join AFTER content + heartbeat. The ack is what tells the
|
|
666
|
+
// client it's safe to send its own sync-step-1 + awareness. Sending
|
|
667
|
+
// content before the ack means editor first-paint can survive a
|
|
668
|
+
// delayed or lost ack. (doc_ready above unlocks the editor; this ack
|
|
669
|
+
// unlocks outbound traffic.)
|
|
670
|
+
try {
|
|
671
|
+
ws.send(JSON.stringify({ type: 'collab:joined', docName }));
|
|
672
|
+
}
|
|
673
|
+
catch { /* WS might have closed mid-load — non-fatal */ }
|
|
674
|
+
// Deferred disk seed. If the client has its own state (reconnect after
|
|
675
|
+
// server restart but before persistence existed, or persistence disabled),
|
|
676
|
+
// their sync-step-2 will populate the Y.Doc before this timer fires and
|
|
677
|
+
// maybeSeedFromDisk becomes a no-op. If they don't (first-ever open),
|
|
678
|
+
// we seed and broadcast.
|
|
679
|
+
if (!entry.seeded && !entry.seedTimer) {
|
|
680
|
+
entry.seedTimer = setTimeout(() => {
|
|
681
|
+
entry.seedTimer = undefined;
|
|
682
|
+
this.maybeSeedFromDisk(docName);
|
|
683
|
+
}, SEED_WAIT_MS);
|
|
684
|
+
}
|
|
105
685
|
}
|
|
106
686
|
/**
|
|
107
687
|
* Remove a client from a document. Destroys Y.Doc when last client leaves.
|
|
@@ -137,9 +717,26 @@ export class YjsManager {
|
|
|
137
717
|
entry.idleTimer = setTimeout(() => {
|
|
138
718
|
// Only destroy if still idle (no new clients joined)
|
|
139
719
|
if (entry.clients.size === 0) {
|
|
140
|
-
entry.
|
|
141
|
-
|
|
720
|
+
if (entry.seedTimer) {
|
|
721
|
+
clearTimeout(entry.seedTimer);
|
|
722
|
+
entry.seedTimer = undefined;
|
|
723
|
+
}
|
|
142
724
|
this.docs.delete(docName);
|
|
725
|
+
// Drain pending persistence writes BEFORE destroying the Y.Doc — a
|
|
726
|
+
// debounced flush could still be holding a reference and we want
|
|
727
|
+
// its bytes to land on disk. Destroy is async, but we don't await
|
|
728
|
+
// here (the timer callback is fire-and-forget); the persistence
|
|
729
|
+
// layer's per-doc chain serializes writes anyway.
|
|
730
|
+
if (this.persistence) {
|
|
731
|
+
this.persistence.drain(docName).finally(() => {
|
|
732
|
+
entry.awareness.destroy();
|
|
733
|
+
entry.ydoc.destroy();
|
|
734
|
+
});
|
|
735
|
+
}
|
|
736
|
+
else {
|
|
737
|
+
entry.awareness.destroy();
|
|
738
|
+
entry.ydoc.destroy();
|
|
739
|
+
}
|
|
143
740
|
}
|
|
144
741
|
}, DOC_IDLE_TIMEOUT);
|
|
145
742
|
}
|
|
@@ -164,10 +761,44 @@ export class YjsManager {
|
|
|
164
761
|
if (!entry)
|
|
165
762
|
return;
|
|
166
763
|
if (msgType === MSG_SYNC) {
|
|
167
|
-
//
|
|
764
|
+
// Phase 2: if a server-side write holds the per-doc lock, queue the
|
|
765
|
+
// client sync frame instead of applying it. The Codex pass-3 #1 trace
|
|
766
|
+
// showed that applying a client insert mid-lock leaves the just-typed
|
|
767
|
+
// chars in ytext, and the subsequent applyAgentContent diff against
|
|
768
|
+
// the agent's target deletes them. Queueing defers application until
|
|
769
|
+
// AFTER applyAgentContent — the insert then lands as a fresh CRDT op
|
|
770
|
+
// at its original anchor on top of the new agent content, producing
|
|
771
|
+
// "AAA → client X → agent BBB → final BBBX" instead of "BBB".
|
|
772
|
+
if (this.isLocked(docName)) {
|
|
773
|
+
this.enqueueMsgSync(docName, sender, payload);
|
|
774
|
+
return;
|
|
775
|
+
}
|
|
776
|
+
// Apply sync message to server Y.Doc. The client is gated readonly
|
|
777
|
+
// until it receives our doc_ready (with expectedLength matching the
|
|
778
|
+
// seeded ytext.length), so a keystroke can't race the deferred-seed
|
|
779
|
+
// window into the server. Reconnect clients with retained state push
|
|
780
|
+
// it via sync-step-2 here, which marks `seeded = true` below and the
|
|
781
|
+
// deferred-seed timer becomes a no-op.
|
|
168
782
|
const decoder = decoding.createDecoder(payload);
|
|
169
783
|
const encoder = encoding.createEncoder();
|
|
170
784
|
syncProtocol.readSyncMessage(decoder, encoder, entry.ydoc, 'ws-client');
|
|
785
|
+
// If a client's sync populated the Y.Doc, suppress the deferred
|
|
786
|
+
// disk seed — otherwise we'd double-insert the same content via
|
|
787
|
+
// the CRDT. Record the current disk hash so the persistence snapshot
|
|
788
|
+
// has a baseline for future divergence detection.
|
|
789
|
+
if (!entry.seeded && entry.ydoc.getText('content').length > 0) {
|
|
790
|
+
entry.seeded = true;
|
|
791
|
+
if (entry.seedTimer) {
|
|
792
|
+
clearTimeout(entry.seedTimer);
|
|
793
|
+
entry.seedTimer = undefined;
|
|
794
|
+
}
|
|
795
|
+
const parsed = this.parseDocName(docName);
|
|
796
|
+
if (parsed)
|
|
797
|
+
entry.mdRevisionHash = sha256(this.readDiskContent(parsed));
|
|
798
|
+
// Tell every client (including the sender) the new authoritative
|
|
799
|
+
// length so their editors can unlock on a verified seed.
|
|
800
|
+
this.broadcastDocReady(docName);
|
|
801
|
+
}
|
|
171
802
|
// If the sync produced a response, send it back to the sender
|
|
172
803
|
if (encoding.length(encoder) > 0) {
|
|
173
804
|
this.sendToClient(sender, docName, MSG_SYNC, encoding.toUint8Array(encoder));
|
|
@@ -212,9 +843,18 @@ export class YjsManager {
|
|
|
212
843
|
}
|
|
213
844
|
}
|
|
214
845
|
/**
|
|
215
|
-
* Encode and send a framed binary message to a client.
|
|
846
|
+
* Encode and send a framed binary message to a client. Payloads above
|
|
847
|
+
* `MAX_CHUNK_PAYLOAD` are split into MSG_CHUNK frames; smaller ones go
|
|
848
|
+
* through the single-frame fast path unchanged.
|
|
216
849
|
*/
|
|
217
850
|
sendToClient(ws, docName, msgType, payload) {
|
|
851
|
+
if (payload.length <= MAX_CHUNK_PAYLOAD) {
|
|
852
|
+
this.sendSingleFrame(ws, docName, msgType, payload);
|
|
853
|
+
return;
|
|
854
|
+
}
|
|
855
|
+
this.sendChunkedFrames(ws, docName, msgType, payload);
|
|
856
|
+
}
|
|
857
|
+
sendSingleFrame(ws, docName, msgType, payload) {
|
|
218
858
|
const nameBytes = Buffer.from(docName, 'utf8');
|
|
219
859
|
const frame = Buffer.alloc(2 + nameBytes.length + 1 + payload.length);
|
|
220
860
|
frame.writeUInt16BE(nameBytes.length, 0);
|
|
@@ -226,6 +866,66 @@ export class YjsManager {
|
|
|
226
866
|
}
|
|
227
867
|
catch { /* non-fatal */ }
|
|
228
868
|
}
|
|
869
|
+
sendChunkedFrames(ws, docName, msgType, payload) {
|
|
870
|
+
const total = Math.ceil(payload.length / MAX_CHUNK_PAYLOAD);
|
|
871
|
+
if (total > 0xFFFF) {
|
|
872
|
+
// Logical message larger than 65535 chunks (~256MB at 4KB chunks).
|
|
873
|
+
// Falling back to a single frame is no worse than the pre-chunking
|
|
874
|
+
// behavior, and we'd rather not silently truncate.
|
|
875
|
+
console.warn(`[yjs] payload too large to chunk (${payload.length} bytes, ${total} chunks); sending single frame`);
|
|
876
|
+
this.sendSingleFrame(ws, docName, msgType, payload);
|
|
877
|
+
return;
|
|
878
|
+
}
|
|
879
|
+
// 4-byte random message ID — collision risk is negligible within the
|
|
880
|
+
// ~30s reassembly window the client tolerates.
|
|
881
|
+
const msgId = Buffer.from([
|
|
882
|
+
Math.floor(Math.random() * 256),
|
|
883
|
+
Math.floor(Math.random() * 256),
|
|
884
|
+
Math.floor(Math.random() * 256),
|
|
885
|
+
Math.floor(Math.random() * 256),
|
|
886
|
+
]);
|
|
887
|
+
const nameBytes = Buffer.from(docName, 'utf8');
|
|
888
|
+
for (let seq = 0; seq < total; seq++) {
|
|
889
|
+
const start = seq * MAX_CHUNK_PAYLOAD;
|
|
890
|
+
const end = Math.min(start + MAX_CHUNK_PAYLOAD, payload.length);
|
|
891
|
+
const chunk = payload.subarray(start, end);
|
|
892
|
+
// Frame: [2B nameLen][docName][1B MSG_CHUNK][4B msgId][2B seq][2B total][1B origMsgType][chunk]
|
|
893
|
+
const headerLen = 2 + nameBytes.length + 1 + 4 + 2 + 2 + 1;
|
|
894
|
+
const frame = Buffer.alloc(headerLen + chunk.length);
|
|
895
|
+
let off = 0;
|
|
896
|
+
frame.writeUInt16BE(nameBytes.length, off);
|
|
897
|
+
off += 2;
|
|
898
|
+
nameBytes.copy(frame, off);
|
|
899
|
+
off += nameBytes.length;
|
|
900
|
+
frame[off] = MSG_CHUNK;
|
|
901
|
+
off += 1;
|
|
902
|
+
msgId.copy(frame, off);
|
|
903
|
+
off += 4;
|
|
904
|
+
frame.writeUInt16BE(seq, off);
|
|
905
|
+
off += 2;
|
|
906
|
+
frame.writeUInt16BE(total, off);
|
|
907
|
+
off += 2;
|
|
908
|
+
frame[off] = msgType;
|
|
909
|
+
off += 1;
|
|
910
|
+
Buffer.from(chunk).copy(frame, off);
|
|
911
|
+
try {
|
|
912
|
+
ws.send(frame);
|
|
913
|
+
}
|
|
914
|
+
catch { /* non-fatal */ }
|
|
915
|
+
}
|
|
916
|
+
}
|
|
917
|
+
/**
|
|
918
|
+
* The docNames of every Y.Doc currently loaded (a client has it open, or
|
|
919
|
+
* it's within the post-disconnect idle grace period). Cheap in-memory map
|
|
920
|
+
* read — no disk I/O. Used by `graph.pullAndReconcile` to gate the
|
|
921
|
+
* post-pull reconcile loop to only the entities a user actually has open,
|
|
922
|
+
* so a repo-wide pull doesn't parse every changed file when nobody's
|
|
923
|
+
* editing. Includes unseeded docs (the caller still matches them by
|
|
924
|
+
* docName; `reconcileFromDisk` no-ops harmlessly on those).
|
|
925
|
+
*/
|
|
926
|
+
getActiveDocNames() {
|
|
927
|
+
return [...this.docs.keys()];
|
|
928
|
+
}
|
|
229
929
|
/**
|
|
230
930
|
* Get current Y.Doc text content for a document (for debugging/autosave).
|
|
231
931
|
*/
|
|
@@ -236,53 +936,102 @@ export class YjsManager {
|
|
|
236
936
|
return entry.ydoc.getText('content').toString();
|
|
237
937
|
}
|
|
238
938
|
/**
|
|
239
|
-
*
|
|
240
|
-
*
|
|
241
|
-
*
|
|
242
|
-
*
|
|
243
|
-
*
|
|
244
|
-
* in `getOrCreate`.
|
|
939
|
+
* Authoritative live body for a document, or null when there's nothing
|
|
940
|
+
* trustworthy to read. Unlike {@link getText}, this returns null unless the
|
|
941
|
+
* entry exists AND is seeded — an unseeded Y.Doc carries Y.Text='' before
|
|
942
|
+
* its first client sync, and reporting that as the body would masquerade an
|
|
943
|
+
* empty doc as a real (empty) entry.
|
|
245
944
|
*
|
|
246
|
-
*
|
|
247
|
-
*
|
|
248
|
-
*
|
|
249
|
-
*
|
|
945
|
+
* This is the read side of the live-vs-disk gap: a user's freshly-placed
|
|
946
|
+
* image/asset embed lives in the Y.Doc and only reaches disk after the
|
|
947
|
+
* autosave debounce + commit. `graph.get` reads disk, so callers that need
|
|
948
|
+
* to see what the user is actually looking at (get_entity, the asset-drop
|
|
949
|
+
* guard) consult this first and fall back to disk when it returns null.
|
|
250
950
|
*/
|
|
251
|
-
|
|
951
|
+
peekLiveBody(docName) {
|
|
252
952
|
const entry = this.docs.get(docName);
|
|
253
|
-
if (!entry)
|
|
953
|
+
if (!entry || !entry.seeded)
|
|
954
|
+
return null;
|
|
955
|
+
return entry.ydoc.getText('content').toString();
|
|
956
|
+
}
|
|
957
|
+
/**
|
|
958
|
+
* Reconcile an active Y.Doc with the latest .md file on disk. EXPLICIT
|
|
959
|
+
* external-disk-change primitive — call this from named sites only:
|
|
960
|
+
* startup boot, git-pull event handlers, dev-tools "reload from disk".
|
|
961
|
+
*
|
|
962
|
+
* NOT called from the normal write path. Server-side body writes (MCP,
|
|
963
|
+
* agent, event processor) route through {@link applyAgentContent}, which
|
|
964
|
+
* applies the target body under the per-doc lock AFTER disk + commit
|
|
965
|
+
* land. Reconcile here is for changes the server didn't originate.
|
|
966
|
+
*
|
|
967
|
+
* Uses Yjs-aware text diffing (see {@link applyTextDiff}). Chars in
|
|
968
|
+
* UNCHANGED regions retain their original `(clientID, clock)`. Cursor
|
|
969
|
+
* anchors via `Y.createRelativePositionFromTypeIndex` in unchanged regions
|
|
970
|
+
* stay valid. Y.UndoManager stacks referencing those chars stay coherent.
|
|
971
|
+
*
|
|
972
|
+
* KNOWN LIMIT: chars in CHANGED regions are still discarded. If a user has
|
|
973
|
+
* typed `world ` into a "Hello " doc but autosave hasn't fired yet, the
|
|
974
|
+
* Y.Doc has "Hello world " while disk still has "Hello ". When an external
|
|
975
|
+
* write lands "Hi " on disk and we reconcile, the diff becomes
|
|
976
|
+
* `[delete "Hello "][insert "Hi "][equal "world "]`. The user's "world "
|
|
977
|
+
* survives because it's an unchanged region; their typing in the head is
|
|
978
|
+
* gone because that's the changed region. This is the irreducible residue
|
|
979
|
+
* of "make ytext match disk" semantics for external sources.
|
|
980
|
+
*
|
|
981
|
+
* No-ops when no Y.Doc is currently active for docName — clients that open
|
|
982
|
+
* later will pick up the .md content via fresh seeding in `getOrCreate`.
|
|
983
|
+
*/
|
|
984
|
+
reconcileFromDisk(docName) {
|
|
985
|
+
const entry = this.docs.get(docName);
|
|
986
|
+
if (!entry) {
|
|
987
|
+
console.log(`[yjs] reconcileFromDisk: no active doc for ${docName} — client will seed from disk on next visit`);
|
|
254
988
|
return;
|
|
989
|
+
}
|
|
255
990
|
const parsed = this.parseDocName(docName);
|
|
256
991
|
if (!parsed)
|
|
257
992
|
return;
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
diskContent = entity?.document?.content ?? '';
|
|
265
|
-
}
|
|
266
|
-
catch {
|
|
267
|
-
// Entity missing on disk — leave Y.Doc alone rather than blanking it.
|
|
993
|
+
const diskContent = this.readDiskContent(parsed);
|
|
994
|
+
const ytext = entry.ydoc.getText('content');
|
|
995
|
+
if (ytext.toString() === diskContent) {
|
|
996
|
+
// Still want to keep mdRevisionHash in sync even on a no-op so the
|
|
997
|
+
// persistence layer's divergence-detection logic doesn't false-fire.
|
|
998
|
+
entry.mdRevisionHash = sha256(diskContent);
|
|
268
999
|
return;
|
|
269
1000
|
}
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
1001
|
+
console.log(`[yjs] reconcileFromDisk: smart-merging ${docName} (${diskContent.length} chars, ${entry.clients.size} clients)`);
|
|
1002
|
+
applyTextDiff(entry.ydoc, ytext, diskContent, 'server-sync-disk-merge');
|
|
1003
|
+
entry.mdRevisionHash = sha256(diskContent);
|
|
1004
|
+
// Refresh clients' expected-length heartbeat so editors that were locked
|
|
1005
|
+
// due to a previous failed seed can unlock on the broadcast update.
|
|
1006
|
+
this.broadcastDocReady(docName);
|
|
1007
|
+
}
|
|
1008
|
+
/**
|
|
1009
|
+
* Record that the .md body for an entity was just written to disk. Called
|
|
1010
|
+
* from `graph.update`'s `onBodyWritten` callback.
|
|
1011
|
+
*
|
|
1012
|
+
* Updates `entry.mdRevisionHash` if the doc is currently loaded so the
|
|
1013
|
+
* next persistence snapshot captures the post-write state. No-op when
|
|
1014
|
+
* the doc isn't loaded — the next `doLoad` will compute the hash from
|
|
1015
|
+
* the disk content on demand.
|
|
1016
|
+
*/
|
|
1017
|
+
recordDiskBody(docName, body) {
|
|
1018
|
+
const entry = this.docs.get(docName);
|
|
1019
|
+
if (!entry)
|
|
1020
|
+
return;
|
|
1021
|
+
entry.mdRevisionHash = sha256(body);
|
|
280
1022
|
}
|
|
281
1023
|
/**
|
|
282
|
-
* Destroy all Y.Docs (server shutdown).
|
|
1024
|
+
* Destroy all Y.Docs (server shutdown). Drains pending persistence writes
|
|
1025
|
+
* before tearing down so a debounced snapshot can't be lost on shutdown.
|
|
283
1026
|
*/
|
|
284
|
-
destroy() {
|
|
1027
|
+
async destroy() {
|
|
1028
|
+
if (this.persistence)
|
|
1029
|
+
await this.persistence.destroy();
|
|
285
1030
|
for (const [, entry] of this.docs) {
|
|
1031
|
+
if (entry.idleTimer)
|
|
1032
|
+
clearTimeout(entry.idleTimer);
|
|
1033
|
+
if (entry.seedTimer)
|
|
1034
|
+
clearTimeout(entry.seedTimer);
|
|
286
1035
|
entry.awareness.destroy();
|
|
287
1036
|
entry.ydoc.destroy();
|
|
288
1037
|
}
|