studiograph 1.3.48-next.21 → 1.3.48-next.210
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +26 -16
- package/dist/agent/agent-pool.d.ts +87 -3
- package/dist/agent/agent-pool.js +188 -15
- package/dist/agent/agent-pool.js.map +1 -1
- package/dist/agent/followups.d.ts +34 -0
- package/dist/agent/followups.js +52 -0
- package/dist/agent/followups.js.map +1 -0
- package/dist/agent/orchestrator.d.ts +101 -4
- package/dist/agent/orchestrator.js +464 -66
- package/dist/agent/orchestrator.js.map +1 -1
- package/dist/agent/prompts/entity-types-section.d.ts +34 -0
- package/dist/agent/prompts/entity-types-section.js +76 -0
- package/dist/agent/prompts/entity-types-section.js.map +1 -0
- package/dist/agent/prompts/system.md +112 -54
- package/dist/agent/skill-loader.d.ts +30 -17
- package/dist/agent/skill-loader.js +63 -30
- package/dist/agent/skill-loader.js.map +1 -1
- package/dist/agent/skills/artifact-canvas/skill.md +152 -0
- package/dist/agent/skills/entity-schema.md +75 -431
- package/dist/agent/skills/interview/entity-templates.md +38 -37
- package/dist/agent/skills/interview/question-domains.md +54 -49
- package/dist/agent/skills/interview/skill.md +84 -16
- package/dist/agent/skills/schema-rules.md +28 -28
- package/dist/agent/tools/artifact-tools.d.ts +124 -0
- package/dist/agent/tools/artifact-tools.js +207 -0
- package/dist/agent/tools/artifact-tools.js.map +1 -0
- package/dist/agent/tools/capture-tools.d.ts +31 -0
- package/dist/agent/tools/capture-tools.js +40 -0
- package/dist/agent/tools/capture-tools.js.map +1 -0
- package/dist/agent/tools/folder-tools.d.ts +47 -0
- package/dist/agent/tools/folder-tools.js +249 -0
- package/dist/agent/tools/folder-tools.js.map +1 -0
- package/dist/agent/tools/fs-tools.d.ts +6 -5
- package/dist/agent/tools/fs-tools.js +5 -5
- package/dist/agent/tools/fs-tools.js.map +1 -1
- package/dist/agent/tools/graph-tools.d.ts +48 -72
- package/dist/agent/tools/graph-tools.js +852 -329
- package/dist/agent/tools/graph-tools.js.map +1 -1
- package/dist/agent/tools/history-tools.d.ts +95 -0
- package/dist/agent/tools/history-tools.js +461 -0
- package/dist/agent/tools/history-tools.js.map +1 -0
- package/dist/agent/tools/load-skill.d.ts +6 -5
- package/dist/agent/tools/load-skill.js +3 -3
- package/dist/agent/tools/load-skill.js.map +1 -1
- package/dist/agent/tools/ops-tools.d.ts +5 -4
- package/dist/agent/tools/ops-tools.js +130 -236
- package/dist/agent/tools/ops-tools.js.map +1 -1
- package/dist/agent/tools/permission-tools.d.ts +87 -17
- package/dist/agent/tools/permission-tools.js +233 -43
- package/dist/agent/tools/permission-tools.js.map +1 -1
- package/dist/agent/tools/tool-loader.js +5 -4
- package/dist/agent/tools/tool-loader.js.map +1 -1
- package/dist/agent/tools/web-tools.js +58 -9
- package/dist/agent/tools/web-tools.js.map +1 -1
- package/dist/cli/commands/about.d.ts +1 -0
- package/dist/cli/commands/about.js +55 -3
- package/dist/cli/commands/about.js.map +1 -1
- package/dist/cli/commands/admin/audit-workspace.d.ts +23 -0
- package/dist/cli/commands/admin/audit-workspace.js +133 -0
- package/dist/cli/commands/admin/audit-workspace.js.map +1 -0
- package/dist/cli/commands/admin/audit.d.ts +21 -0
- package/dist/cli/commands/admin/audit.js +174 -0
- package/dist/cli/commands/admin/audit.js.map +1 -0
- package/dist/cli/commands/admin/backup.d.ts +54 -0
- package/dist/cli/commands/admin/backup.js +207 -0
- package/dist/cli/commands/admin/backup.js.map +1 -0
- package/dist/cli/commands/admin/folder.d.ts +11 -0
- package/dist/cli/commands/{collection.js → admin/folder.js} +33 -32
- package/dist/cli/commands/admin/folder.js.map +1 -0
- package/dist/cli/commands/admin/index.d.ts +16 -0
- package/dist/cli/commands/admin/index.js +46 -0
- package/dist/cli/commands/admin/index.js.map +1 -0
- package/dist/cli/commands/admin/migrate-assets.d.ts +53 -0
- package/dist/cli/commands/admin/migrate-assets.js +184 -0
- package/dist/cli/commands/admin/migrate-assets.js.map +1 -0
- package/dist/cli/commands/admin/migrate.d.ts +56 -0
- package/dist/cli/commands/admin/migrate.js +263 -0
- package/dist/cli/commands/admin/migrate.js.map +1 -0
- package/dist/cli/commands/admin/restore.d.ts +24 -0
- package/dist/cli/commands/admin/restore.js +228 -0
- package/dist/cli/commands/admin/restore.js.map +1 -0
- package/dist/cli/commands/admin/secrets.d.ts +23 -0
- package/dist/cli/commands/admin/secrets.js +256 -0
- package/dist/cli/commands/admin/secrets.js.map +1 -0
- package/dist/cli/commands/admin/settings.d.ts +28 -0
- package/dist/cli/commands/admin/settings.js +284 -0
- package/dist/cli/commands/admin/settings.js.map +1 -0
- package/dist/cli/commands/admin/token.d.ts +42 -0
- package/dist/cli/commands/admin/token.js +126 -0
- package/dist/cli/commands/admin/token.js.map +1 -0
- package/dist/cli/commands/admin/transfer-ownership.d.ts +15 -0
- package/dist/cli/commands/admin/transfer-ownership.js +106 -0
- package/dist/cli/commands/admin/transfer-ownership.js.map +1 -0
- package/dist/cli/commands/admin/user.d.ts +11 -0
- package/dist/cli/commands/admin/user.js +187 -0
- package/dist/cli/commands/admin/user.js.map +1 -0
- package/dist/cli/commands/clone.d.ts +25 -3
- package/dist/cli/commands/clone.js +142 -36
- package/dist/cli/commands/clone.js.map +1 -1
- package/dist/cli/commands/config.d.ts +23 -107
- package/dist/cli/commands/config.js +52 -260
- package/dist/cli/commands/config.js.map +1 -1
- package/dist/cli/commands/connector.d.ts +10 -13
- package/dist/cli/commands/connector.js +16 -58
- package/dist/cli/commands/connector.js.map +1 -1
- package/dist/cli/commands/deploy.js +215 -68
- package/dist/cli/commands/deploy.js.map +1 -1
- package/dist/cli/commands/index.js +5 -1
- package/dist/cli/commands/index.js.map +1 -1
- package/dist/cli/commands/init.js +10 -30
- package/dist/cli/commands/init.js.map +1 -1
- package/dist/cli/commands/mcp.js +54 -6
- package/dist/cli/commands/mcp.js.map +1 -1
- package/dist/cli/commands/r2.d.ts +3 -0
- package/dist/cli/commands/r2.js +223 -204
- package/dist/cli/commands/r2.js.map +1 -1
- package/dist/cli/commands/redeploy.js +65 -12
- package/dist/cli/commands/redeploy.js.map +1 -1
- package/dist/cli/commands/reset.d.ts +22 -6
- package/dist/cli/commands/reset.js +132 -34
- package/dist/cli/commands/reset.js.map +1 -1
- package/dist/cli/commands/serve.js +231 -26
- package/dist/cli/commands/serve.js.map +1 -1
- package/dist/cli/commands/sync.d.ts +1 -1
- package/dist/cli/commands/sync.js +237 -227
- package/dist/cli/commands/sync.js.map +1 -1
- package/dist/cli/crypto-bundle.d.ts +39 -0
- package/dist/cli/crypto-bundle.js +94 -0
- package/dist/cli/crypto-bundle.js.map +1 -0
- package/dist/cli/index.js +24 -26
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/railway-pin.d.ts +68 -0
- package/dist/cli/railway-pin.js +96 -0
- package/dist/cli/railway-pin.js.map +1 -0
- package/dist/cli/railway-provisioning.d.ts +53 -0
- package/dist/cli/railway-provisioning.js +85 -0
- package/dist/cli/railway-provisioning.js.map +1 -0
- package/dist/cli/setup-wizard.d.ts +30 -49
- package/dist/cli/setup-wizard.js +39 -40
- package/dist/cli/setup-wizard.js.map +1 -1
- package/dist/core/accent-palette.d.ts +22 -0
- package/dist/core/accent-palette.js +47 -0
- package/dist/core/accent-palette.js.map +1 -0
- package/dist/core/artifact-asset-urls.d.ts +51 -0
- package/dist/core/artifact-asset-urls.js +79 -0
- package/dist/core/artifact-asset-urls.js.map +1 -0
- package/dist/core/artifact-bundle.d.ts +69 -0
- package/dist/core/artifact-bundle.js +305 -0
- package/dist/core/artifact-bundle.js.map +1 -0
- package/dist/core/artifact-escape.d.ts +5 -0
- package/dist/core/artifact-escape.js +26 -0
- package/dist/core/artifact-escape.js.map +1 -0
- package/dist/core/artifact-export.d.ts +17 -0
- package/dist/core/artifact-export.js +529 -0
- package/dist/core/artifact-export.js.map +1 -0
- package/dist/core/cell-anchor.d.ts +29 -0
- package/dist/core/cell-anchor.js +53 -0
- package/dist/core/cell-anchor.js.map +1 -0
- package/dist/core/comment-anchor.d.ts +41 -0
- package/dist/core/comment-anchor.js +147 -0
- package/dist/core/comment-anchor.js.map +1 -0
- package/dist/core/commit-messages.d.ts +57 -0
- package/dist/core/commit-messages.js +85 -0
- package/dist/core/commit-messages.js.map +1 -0
- package/dist/core/embeds.d.ts +96 -0
- package/dist/core/embeds.js +187 -0
- package/dist/core/embeds.js.map +1 -0
- package/dist/core/entity-body-templates.d.ts +21 -0
- package/dist/core/entity-body-templates.js +67 -0
- package/dist/core/entity-body-templates.js.map +1 -0
- package/dist/core/entity-types-catalog.d.ts +65 -0
- package/dist/core/entity-types-catalog.js +142 -0
- package/dist/core/entity-types-catalog.js.map +1 -0
- package/dist/core/field-library.d.ts +62 -0
- package/dist/core/field-library.js +129 -0
- package/dist/core/field-library.js.map +1 -0
- package/dist/core/folder-paths.d.ts +41 -0
- package/dist/core/folder-paths.js +95 -0
- package/dist/core/folder-paths.js.map +1 -0
- package/dist/core/folder-sidecar.d.ts +36 -0
- package/dist/core/folder-sidecar.js +91 -0
- package/dist/core/folder-sidecar.js.map +1 -0
- package/dist/core/format-registry.d.ts +170 -0
- package/dist/core/format-registry.js +412 -0
- package/dist/core/format-registry.js.map +1 -0
- package/dist/core/graph.d.ts +773 -14
- package/dist/core/graph.js +2269 -308
- package/dist/core/graph.js.map +1 -1
- package/dist/core/history-diff.d.ts +35 -0
- package/dist/core/history-diff.js +114 -0
- package/dist/core/history-diff.js.map +1 -0
- package/dist/core/refs.d.ts +41 -0
- package/dist/core/refs.js +80 -0
- package/dist/core/refs.js.map +1 -0
- package/dist/core/schema-registry.d.ts +66 -0
- package/dist/core/schema-registry.js +198 -37
- package/dist/core/schema-registry.js.map +1 -1
- package/dist/core/schemas/connector.d.ts +67 -0
- package/dist/core/schemas/connector.js +100 -0
- package/dist/core/schemas/connector.js.map +1 -0
- package/dist/core/schemas/workspace.d.ts +122 -0
- package/dist/core/schemas/workspace.js +211 -0
- package/dist/core/schemas/workspace.js.map +1 -0
- package/dist/core/secrets/SecretStore.d.ts +77 -0
- package/dist/core/secrets/SecretStore.js +13 -0
- package/dist/core/secrets/SecretStore.js.map +1 -0
- package/dist/core/secrets/SettingsResolver.d.ts +54 -0
- package/dist/core/secrets/SettingsResolver.js +80 -0
- package/dist/core/secrets/SettingsResolver.js.map +1 -0
- package/dist/core/secrets/SettingsStore.d.ts +30 -0
- package/dist/core/secrets/SettingsStore.js +9 -0
- package/dist/core/secrets/SettingsStore.js.map +1 -0
- package/dist/core/secrets/SqliteEncryptedStore.d.ts +90 -0
- package/dist/core/secrets/SqliteEncryptedStore.js +598 -0
- package/dist/core/secrets/SqliteEncryptedStore.js.map +1 -0
- package/dist/core/secrets/audit.d.ts +36 -0
- package/dist/core/secrets/audit.js +60 -0
- package/dist/core/secrets/audit.js.map +1 -0
- package/dist/core/secrets/auth-db-migration.d.ts +129 -0
- package/dist/core/secrets/auth-db-migration.js +653 -0
- package/dist/core/secrets/auth-db-migration.js.map +1 -0
- package/dist/core/secrets/bundle.d.ts +141 -0
- package/dist/core/secrets/bundle.js +435 -0
- package/dist/core/secrets/bundle.js.map +1 -0
- package/dist/core/secrets/dual-write.d.ts +81 -0
- package/dist/core/secrets/dual-write.js +247 -0
- package/dist/core/secrets/dual-write.js.map +1 -0
- package/dist/core/secrets/encryption.d.ts +44 -0
- package/dist/core/secrets/encryption.js +97 -0
- package/dist/core/secrets/encryption.js.map +1 -0
- package/dist/core/secrets/index.d.ts +49 -0
- package/dist/core/secrets/index.js +74 -0
- package/dist/core/secrets/index.js.map +1 -0
- package/dist/core/secrets/master-key.d.ts +38 -0
- package/dist/core/secrets/master-key.js +122 -0
- package/dist/core/secrets/master-key.js.map +1 -0
- package/dist/core/secrets/probes/anthropic.d.ts +98 -0
- package/dist/core/secrets/probes/anthropic.js +300 -0
- package/dist/core/secrets/probes/anthropic.js.map +1 -0
- package/dist/core/secrets/probes/brave.d.ts +9 -0
- package/dist/core/secrets/probes/brave.js +15 -0
- package/dist/core/secrets/probes/brave.js.map +1 -0
- package/dist/core/secrets/probes/r2.d.ts +15 -0
- package/dist/core/secrets/probes/r2.js +14 -0
- package/dist/core/secrets/probes/r2.js.map +1 -0
- package/dist/core/secrets/probes/tavily.d.ts +18 -0
- package/dist/core/secrets/probes/tavily.js +58 -0
- package/dist/core/secrets/probes/tavily.js.map +1 -0
- package/dist/core/secrets/probes/voyage.d.ts +13 -0
- package/dist/core/secrets/probes/voyage.js +52 -0
- package/dist/core/secrets/probes/voyage.js.map +1 -0
- package/dist/core/secrets/r2-structural-migration.d.ts +39 -0
- package/dist/core/secrets/r2-structural-migration.js +109 -0
- package/dist/core/secrets/r2-structural-migration.js.map +1 -0
- package/dist/core/secrets/read-flip.d.ts +59 -0
- package/dist/core/secrets/read-flip.js +87 -0
- package/dist/core/secrets/read-flip.js.map +1 -0
- package/dist/core/secrets/registry.d.ts +188 -0
- package/dist/core/secrets/registry.js +616 -0
- package/dist/core/secrets/registry.js.map +1 -0
- package/dist/core/types.d.ts +77 -483
- package/dist/core/types.js +25 -3
- package/dist/core/types.js.map +1 -1
- package/dist/core/user-config.d.ts +75 -12
- package/dist/core/user-config.js +155 -14
- package/dist/core/user-config.js.map +1 -1
- package/dist/core/validation.d.ts +786 -1373
- package/dist/core/validation.js +458 -147
- package/dist/core/validation.js.map +1 -1
- package/dist/core/workspace-manager.d.ts +87 -14
- package/dist/core/workspace-manager.js +222 -94
- package/dist/core/workspace-manager.js.map +1 -1
- package/dist/core/workspace.d.ts +19 -5
- package/dist/core/workspace.js +67 -39
- package/dist/core/workspace.js.map +1 -1
- package/dist/mcp/comment-virtual-entity.d.ts +36 -0
- package/dist/mcp/comment-virtual-entity.js +71 -0
- package/dist/mcp/comment-virtual-entity.js.map +1 -0
- package/dist/mcp/connector-manager.d.ts +72 -2
- package/dist/mcp/connector-manager.js +211 -32
- package/dist/mcp/connector-manager.js.map +1 -1
- package/dist/mcp/oauth-provider.d.ts +0 -5
- package/dist/mcp/oauth-provider.js +10 -22
- package/dist/mcp/oauth-provider.js.map +1 -1
- package/dist/mcp/oauth-registry.d.ts +46 -8
- package/dist/mcp/oauth-registry.js +52 -13
- package/dist/mcp/oauth-registry.js.map +1 -1
- package/dist/mcp/server-discovery.d.ts +73 -0
- package/dist/mcp/server-discovery.js +164 -0
- package/dist/mcp/server-discovery.js.map +1 -0
- package/dist/mcp/server.d.ts +24 -3
- package/dist/mcp/server.js +53 -10
- package/dist/mcp/server.js.map +1 -1
- package/dist/mcp/state-signer.d.ts +62 -0
- package/dist/mcp/state-signer.js +205 -0
- package/dist/mcp/state-signer.js.map +1 -0
- package/dist/mcp/stdio-proxy.d.ts +67 -0
- package/dist/mcp/stdio-proxy.js +149 -0
- package/dist/mcp/stdio-proxy.js.map +1 -0
- package/dist/mcp/tools.d.ts +65 -2
- package/dist/mcp/tools.js +1772 -124
- package/dist/mcp/tools.js.map +1 -1
- package/dist/server/__tests__/helpers/graph-api.d.ts +16 -0
- package/dist/server/__tests__/helpers/graph-api.js +16 -0
- package/dist/server/__tests__/helpers/graph-api.js.map +1 -0
- package/dist/server/artifact-asset-mint.d.ts +41 -0
- package/dist/server/artifact-asset-mint.js +59 -0
- package/dist/server/artifact-asset-mint.js.map +1 -0
- package/dist/server/asset-index-queue.d.ts +98 -0
- package/dist/server/asset-index-queue.js +193 -0
- package/dist/server/asset-index-queue.js.map +1 -0
- package/dist/server/body-write-coordinator.d.ts +161 -0
- package/dist/server/body-write-coordinator.js +182 -0
- package/dist/server/body-write-coordinator.js.map +1 -0
- package/dist/server/cloud-billing-flow.d.ts +32 -0
- package/dist/server/cloud-billing-flow.js +75 -0
- package/dist/server/cloud-billing-flow.js.map +1 -0
- package/dist/server/commit-audit.d.ts +26 -0
- package/dist/server/commit-audit.js +30 -0
- package/dist/server/commit-audit.js.map +1 -0
- package/dist/server/index.d.ts +29 -3
- package/dist/server/index.js +657 -269
- package/dist/server/index.js.map +1 -1
- package/dist/server/middleware/sanitize.d.ts +46 -0
- package/dist/server/middleware/sanitize.js +182 -0
- package/dist/server/middleware/sanitize.js.map +1 -0
- package/dist/server/routes/artifact-export-api.d.ts +11 -0
- package/dist/server/routes/artifact-export-api.js +159 -0
- package/dist/server/routes/artifact-export-api.js.map +1 -0
- package/dist/server/routes/asset-api.d.ts +76 -1
- package/dist/server/routes/asset-api.js +761 -61
- package/dist/server/routes/asset-api.js.map +1 -1
- package/dist/server/routes/audit-api.d.ts +24 -0
- package/dist/server/routes/audit-api.js +117 -0
- package/dist/server/routes/audit-api.js.map +1 -0
- package/dist/server/routes/auth-api.js +532 -63
- package/dist/server/routes/auth-api.js.map +1 -1
- package/dist/server/routes/capture-api.d.ts +10 -3
- package/dist/server/routes/capture-api.js +213 -25
- package/dist/server/routes/capture-api.js.map +1 -1
- package/dist/server/routes/chat-sessions-api.d.ts +13 -0
- package/dist/server/routes/chat-sessions-api.js +455 -0
- package/dist/server/routes/chat-sessions-api.js.map +1 -0
- package/dist/server/routes/chat.d.ts +35 -1
- package/dist/server/routes/chat.js +699 -54
- package/dist/server/routes/chat.js.map +1 -1
- package/dist/server/routes/comments-api.d.ts +15 -0
- package/dist/server/routes/comments-api.js +444 -0
- package/dist/server/routes/comments-api.js.map +1 -0
- package/dist/server/routes/config-api.d.ts +3 -2
- package/dist/server/routes/config-api.js +179 -49
- package/dist/server/routes/config-api.js.map +1 -1
- package/dist/server/routes/connectors-api.js +177 -42
- package/dist/server/routes/connectors-api.js.map +1 -1
- package/dist/server/routes/event-ingest-api.d.ts +15 -0
- package/dist/server/routes/{meeting-ingest-api.js → event-ingest-api.js} +35 -20
- package/dist/server/routes/event-ingest-api.js.map +1 -0
- package/dist/server/routes/field-library-api.d.ts +28 -0
- package/dist/server/routes/field-library-api.js +126 -0
- package/dist/server/routes/field-library-api.js.map +1 -0
- package/dist/server/routes/git-http.d.ts +2 -2
- package/dist/server/routes/git-http.js +86 -39
- package/dist/server/routes/git-http.js.map +1 -1
- package/dist/server/routes/graph-api-access.d.ts +57 -0
- package/dist/server/routes/graph-api-access.js +112 -0
- package/dist/server/routes/graph-api-access.js.map +1 -0
- package/dist/server/routes/graph-api.d.ts +1 -1
- package/dist/server/routes/graph-api.js +1455 -325
- package/dist/server/routes/graph-api.js.map +1 -1
- package/dist/server/routes/health.d.ts +18 -0
- package/dist/server/routes/health.js +74 -0
- package/dist/server/routes/health.js.map +1 -0
- package/dist/server/routes/import-batch.d.ts +24 -0
- package/dist/server/routes/import-batch.js +33 -0
- package/dist/server/routes/import-batch.js.map +1 -0
- package/dist/server/routes/insights-api.d.ts +9 -2
- package/dist/server/routes/insights-api.js +355 -61
- package/dist/server/routes/insights-api.js.map +1 -1
- package/dist/server/routes/mcp.d.ts +7 -3
- package/dist/server/routes/mcp.js +24 -8
- package/dist/server/routes/mcp.js.map +1 -1
- package/dist/server/routes/oauth-api.d.ts +67 -0
- package/dist/server/routes/oauth-api.js +421 -0
- package/dist/server/routes/oauth-api.js.map +1 -0
- package/dist/server/routes/permissions-api.d.ts +9 -2
- package/dist/server/routes/permissions-api.js +87 -31
- package/dist/server/routes/permissions-api.js.map +1 -1
- package/dist/server/routes/r2-api.d.ts +25 -0
- package/dist/server/routes/r2-api.js +276 -0
- package/dist/server/routes/r2-api.js.map +1 -0
- package/dist/server/routes/secrets-api.d.ts +36 -0
- package/dist/server/routes/secrets-api.js +308 -0
- package/dist/server/routes/secrets-api.js.map +1 -0
- package/dist/server/routes/settings-api.d.ts +29 -0
- package/dist/server/routes/settings-api.js +180 -0
- package/dist/server/routes/settings-api.js.map +1 -0
- package/dist/server/routes/share-api.d.ts +32 -0
- package/dist/server/routes/share-api.js +234 -0
- package/dist/server/routes/share-api.js.map +1 -0
- package/dist/server/routes/views-api.js +51 -0
- package/dist/server/routes/views-api.js.map +1 -1
- package/dist/server/routes/workspace-api.d.ts +2 -1
- package/dist/server/routes/workspace-api.js +142 -23
- package/dist/server/routes/workspace-api.js.map +1 -1
- package/dist/server/routes/ws.d.ts +3 -2
- package/dist/server/routes/ws.js +68 -17
- package/dist/server/routes/ws.js.map +1 -1
- package/dist/server/session-manager.d.ts +48 -5
- package/dist/server/session-manager.js +182 -14
- package/dist/server/session-manager.js.map +1 -1
- package/dist/server/ws-hub.d.ts +124 -37
- package/dist/server/ws-hub.js +0 -0
- package/dist/server/ws-hub.js.map +1 -1
- package/dist/server/yjs-manager.d.ts +278 -7
- package/dist/server/yjs-manager.js +830 -38
- package/dist/server/yjs-manager.js.map +1 -1
- package/dist/server/yjs-persistence.d.ts +165 -0
- package/dist/server/yjs-persistence.js +557 -0
- package/dist/server/yjs-persistence.js.map +1 -0
- package/dist/server/yjs-text-diff.d.ts +32 -0
- package/dist/server/yjs-text-diff.js +61 -0
- package/dist/server/yjs-text-diff.js.map +1 -0
- package/dist/services/access-control.d.ts +73 -0
- package/dist/services/access-control.js +165 -0
- package/dist/services/access-control.js.map +1 -0
- package/dist/services/artifact-asset-token.d.ts +69 -0
- package/dist/services/artifact-asset-token.js +94 -0
- package/dist/services/artifact-asset-token.js.map +1 -0
- package/dist/services/artifact-library-sources.d.ts +3 -0
- package/dist/services/artifact-library-sources.js +44 -0
- package/dist/services/artifact-library-sources.js.map +1 -0
- package/dist/services/artifact-render-export.d.ts +97 -0
- package/dist/services/artifact-render-export.js +467 -0
- package/dist/services/artifact-render-export.js.map +1 -0
- package/dist/services/asset-caption-service.d.ts +103 -0
- package/dist/services/asset-caption-service.js +186 -0
- package/dist/services/asset-caption-service.js.map +1 -0
- package/dist/services/asset-delete-authz.d.ts +31 -0
- package/dist/services/asset-delete-authz.js +61 -0
- package/dist/services/asset-delete-authz.js.map +1 -0
- package/dist/services/asset-finalize-service.d.ts +58 -0
- package/dist/services/asset-finalize-service.js +216 -0
- package/dist/services/asset-finalize-service.js.map +1 -0
- package/dist/services/asset-import-service.d.ts +111 -0
- package/dist/services/asset-import-service.js +394 -0
- package/dist/services/asset-import-service.js.map +1 -0
- package/dist/services/asset-index-sweep.d.ts +95 -0
- package/dist/services/asset-index-sweep.js +249 -0
- package/dist/services/asset-index-sweep.js.map +1 -0
- package/dist/services/asset-lifecycle-check.d.ts +22 -0
- package/dist/services/asset-lifecycle-check.js +80 -0
- package/dist/services/asset-lifecycle-check.js.map +1 -0
- package/dist/services/asset-listing.d.ts +72 -0
- package/dist/services/asset-listing.js +321 -0
- package/dist/services/asset-listing.js.map +1 -0
- package/dist/services/asset-presign-service.d.ts +68 -0
- package/dist/services/asset-presign-service.js +124 -0
- package/dist/services/asset-presign-service.js.map +1 -0
- package/dist/services/asset-sidecar-service.d.ts +28 -0
- package/dist/services/asset-sidecar-service.js +79 -0
- package/dist/services/asset-sidecar-service.js.map +1 -0
- package/dist/services/asset-upload-errors.d.ts +41 -0
- package/dist/services/asset-upload-errors.js +45 -0
- package/dist/services/asset-upload-errors.js.map +1 -0
- package/dist/services/asset-upload-service.d.ts +56 -0
- package/dist/services/asset-upload-service.js +200 -0
- package/dist/services/asset-upload-service.js.map +1 -0
- package/dist/services/asset-upload-token.d.ts +58 -0
- package/dist/services/asset-upload-token.js +75 -0
- package/dist/services/asset-upload-token.js.map +1 -0
- package/dist/services/assets/asset-index-service.d.ts +127 -0
- package/dist/services/assets/asset-index-service.js +227 -0
- package/dist/services/assets/asset-index-service.js.map +1 -0
- package/dist/services/assets/base.d.ts +128 -2
- package/dist/services/assets/base.js +98 -1
- package/dist/services/assets/base.js.map +1 -1
- package/dist/services/assets/index.d.ts +114 -1
- package/dist/services/assets/index.js +221 -0
- package/dist/services/assets/index.js.map +1 -1
- package/dist/services/assets/local.d.ts +16 -1
- package/dist/services/assets/local.js +110 -1
- package/dist/services/assets/local.js.map +1 -1
- package/dist/services/assets/r2-sync.d.ts +88 -0
- package/dist/services/assets/r2-sync.js +412 -0
- package/dist/services/assets/r2-sync.js.map +1 -0
- package/dist/services/assets/r2.d.ts +87 -1
- package/dist/services/assets/r2.js +203 -1
- package/dist/services/assets/r2.js.map +1 -1
- package/dist/services/auth-service.d.ts +312 -45
- package/dist/services/auth-service.js +1011 -195
- package/dist/services/auth-service.js.map +1 -1
- package/dist/services/chat-session-service.d.ts +188 -0
- package/dist/services/chat-session-service.js +512 -0
- package/dist/services/chat-session-service.js.map +1 -0
- package/dist/services/cloud-inference-billing.d.ts +64 -0
- package/dist/services/cloud-inference-billing.js +313 -0
- package/dist/services/cloud-inference-billing.js.map +1 -0
- package/dist/services/comment-service.d.ts +97 -0
- package/dist/services/comment-service.js +341 -0
- package/dist/services/comment-service.js.map +1 -0
- package/dist/services/comment-virtual-entity.d.ts +36 -0
- package/dist/services/comment-virtual-entity.js +71 -0
- package/dist/services/comment-virtual-entity.js.map +1 -0
- package/dist/services/convert-service.d.ts +64 -0
- package/dist/services/convert-service.js +68 -0
- package/dist/services/convert-service.js.map +1 -0
- package/dist/services/csv-service.d.ts +22 -17
- package/dist/services/csv-service.js +55 -92
- package/dist/services/csv-service.js.map +1 -1
- package/dist/services/entity-mutations.d.ts +213 -0
- package/dist/services/entity-mutations.js +380 -0
- package/dist/services/entity-mutations.js.map +1 -0
- package/dist/services/{meeting-processor.d.ts → event-processor.d.ts} +15 -8
- package/dist/services/{meeting-processor.js → event-processor.js} +124 -65
- package/dist/services/event-processor.js.map +1 -0
- package/dist/services/extract/docx.d.ts +1 -0
- package/dist/services/extract/docx.js +233 -0
- package/dist/services/extract/docx.js.map +1 -0
- package/dist/services/extract/index.d.ts +9 -0
- package/dist/services/extract/index.js +10 -0
- package/dist/services/extract/index.js.map +1 -0
- package/dist/services/extract/pdf.d.ts +13 -0
- package/dist/services/extract/pdf.js +69 -0
- package/dist/services/extract/pdf.js.map +1 -0
- package/dist/services/folder-creation.d.ts +33 -0
- package/dist/services/folder-creation.js +103 -0
- package/dist/services/folder-creation.js.map +1 -0
- package/dist/services/git.d.ts +58 -0
- package/dist/services/git.js +194 -55
- package/dist/services/git.js.map +1 -1
- package/dist/services/graph-maintenance.js +4 -4
- package/dist/services/graph-maintenance.js.map +1 -1
- package/dist/services/import-service.d.ts +51 -2
- package/dist/services/import-service.js +254 -107
- package/dist/services/import-service.js.map +1 -1
- package/dist/services/lint-service.js +10 -17
- package/dist/services/lint-service.js.map +1 -1
- package/dist/services/markdown.d.ts +12 -1
- package/dist/services/markdown.js +77 -9
- package/dist/services/markdown.js.map +1 -1
- package/dist/services/mention-detector.d.ts +23 -0
- package/dist/services/mention-detector.js +47 -0
- package/dist/services/mention-detector.js.map +1 -0
- package/dist/services/model-capabilities.d.ts +41 -0
- package/dist/services/model-capabilities.js +107 -0
- package/dist/services/model-capabilities.js.map +1 -0
- package/dist/services/notification-broadcast.d.ts +32 -0
- package/dist/services/notification-broadcast.js +38 -0
- package/dist/services/notification-broadcast.js.map +1 -0
- package/dist/services/notification-service.d.ts +41 -0
- package/dist/services/notification-service.js +100 -0
- package/dist/services/notification-service.js.map +1 -0
- package/dist/services/oauth-server-store.d.ts +147 -0
- package/dist/services/oauth-server-store.js +319 -0
- package/dist/services/oauth-server-store.js.map +1 -0
- package/dist/services/orphan-service.js +2 -2
- package/dist/services/orphan-service.js.map +1 -1
- package/dist/services/personal-folder.d.ts +40 -0
- package/dist/services/personal-folder.js +101 -0
- package/dist/services/personal-folder.js.map +1 -0
- package/dist/services/scratch-asset-promote.d.ts +57 -0
- package/dist/services/scratch-asset-promote.js +95 -0
- package/dist/services/scratch-asset-promote.js.map +1 -0
- package/dist/services/scratch-attachment-service.d.ts +196 -0
- package/dist/services/scratch-attachment-service.js +347 -0
- package/dist/services/scratch-attachment-service.js.map +1 -0
- package/dist/services/share-link-service.d.ts +57 -0
- package/dist/services/share-link-service.js +142 -0
- package/dist/services/share-link-service.js.map +1 -0
- package/dist/services/user-person-bridge.d.ts +136 -0
- package/dist/services/user-person-bridge.js +340 -0
- package/dist/services/user-person-bridge.js.map +1 -0
- package/dist/services/vector-service.d.ts +282 -5
- package/dist/services/vector-service.js +585 -29
- package/dist/services/vector-service.js.map +1 -1
- package/dist/services/workspace-access.d.ts +108 -0
- package/dist/services/workspace-access.js +149 -0
- package/dist/services/workspace-access.js.map +1 -0
- package/dist/services/workspace-assets-folder.d.ts +46 -0
- package/dist/services/workspace-assets-folder.js +75 -0
- package/dist/services/workspace-assets-folder.js.map +1 -0
- package/dist/utils/git.d.ts +17 -2
- package/dist/utils/git.js +23 -7
- package/dist/utils/git.js.map +1 -1
- package/dist/utils/log.d.ts +42 -0
- package/dist/utils/log.js +137 -0
- package/dist/utils/log.js.map +1 -0
- package/dist/utils/preflight.js +2 -2
- package/dist/utils/preflight.js.map +1 -1
- package/dist/utils/version-checker.d.ts +12 -19
- package/dist/utils/version-checker.js +14 -104
- package/dist/utils/version-checker.js.map +1 -1
- package/dist/web/_app/immutable/assets/0.Bs_z3Z86.css +2 -0
- package/dist/web/_app/immutable/assets/12.DlIf1mKh.css +1 -0
- package/dist/web/_app/immutable/assets/14.7d-Q37wc.css +1 -0
- package/dist/web/_app/immutable/assets/15.BwBFdc1D.css +1 -0
- package/dist/web/_app/immutable/assets/16.CmLrbzZp.css +1 -0
- package/dist/web/_app/immutable/assets/17.DcuK5ZVm.css +1 -0
- package/dist/web/_app/immutable/assets/2.DATnR31c.css +1 -0
- package/dist/web/_app/immutable/assets/3.Cz4H8n_O.css +1 -0
- package/dist/web/_app/immutable/assets/4.aDHteTDy.css +1 -0
- package/dist/web/_app/immutable/assets/6.CF1i5Bon.css +1 -0
- package/dist/web/_app/immutable/assets/ArtifactEntityView.C4ooklFD.css +1 -0
- package/dist/web/_app/immutable/assets/AssetLibraryPicker.BOFW0MvF.css +1 -0
- package/dist/web/_app/immutable/assets/BulkActionsBar.cmKvHzRK.css +1 -0
- package/dist/web/_app/immutable/assets/CalendarView.lBCvS3X5.css +1 -0
- package/dist/web/_app/immutable/assets/CodeMirrorEditor.D6hf2pNJ.css +1 -0
- package/dist/web/_app/immutable/assets/CopyField.DVGZtw4U.css +1 -0
- package/dist/web/_app/immutable/assets/FolderMembersPanel.kiYnDFHu.css +1 -0
- package/dist/web/_app/immutable/assets/FolderMutationDialogs.BMRF6Z3z.css +1 -0
- package/dist/web/_app/immutable/assets/FolderPicker.Cp46GHe2.css +1 -0
- package/dist/web/_app/immutable/assets/GalleryView.WBGxxUQc.css +1 -0
- package/dist/web/_app/immutable/assets/GraphView.BJtGL9py.css +1 -0
- package/dist/web/_app/immutable/assets/KanbanView.BOaI5KFL.css +1 -0
- package/dist/web/_app/immutable/assets/Link.vV0ne105.css +1 -0
- package/dist/web/_app/immutable/assets/Markdown.BZnsSOSf.css +1 -0
- package/dist/web/_app/immutable/assets/Rail.ilusFgD4.css +1 -0
- package/dist/web/_app/immutable/assets/SettingsDialog.D7-BO6S_.css +1 -0
- package/dist/web/_app/immutable/assets/Spinner.UBfl0pab.css +1 -0
- package/dist/web/_app/immutable/assets/StopFilledAlt.fNlDN65D.css +1 -0
- package/dist/web/_app/immutable/assets/TimelineView.xAZBJhHw.css +1 -0
- package/dist/web/_app/immutable/assets/WorkspaceView.C8ErUJAY.css +1 -0
- package/dist/web/_app/immutable/assets/button.BlLm4Dg1.css +1 -0
- package/dist/web/_app/immutable/assets/history-summary.LpmHXasl.css +1 -0
- package/dist/web/_app/immutable/assets/ibm-plex-mono-latin-400-normal.CvHOgSBP.woff +0 -0
- package/dist/web/_app/immutable/assets/ibm-plex-mono-latin-400-normal.DMJ8VG8y.woff2 +0 -0
- package/dist/web/_app/immutable/assets/ibm-plex-mono-latin-500-normal.CB9ihrfo.woff +0 -0
- package/dist/web/_app/immutable/assets/ibm-plex-mono-latin-500-normal.DSY6xOcd.woff2 +0 -0
- package/dist/web/_app/immutable/assets/ibm-plex-sans-latin-400-italic.CZTNEAuW.woff2 +0 -0
- package/dist/web/_app/immutable/assets/ibm-plex-sans-latin-400-italic.CsGl1sm0.woff +0 -0
- package/dist/web/_app/immutable/assets/ibm-plex-sans-latin-400-normal.CDDApCn2.woff2 +0 -0
- package/dist/web/_app/immutable/assets/ibm-plex-sans-latin-400-normal.CYLoc0-x.woff +0 -0
- package/dist/web/_app/immutable/assets/ibm-plex-sans-latin-500-italic.BNK2_mGO.woff2 +0 -0
- package/dist/web/_app/immutable/assets/ibm-plex-sans-latin-500-italic.DpEwFAQM.woff +0 -0
- package/dist/web/_app/immutable/assets/ibm-plex-sans-latin-500-normal.6ng42L7E.woff2 +0 -0
- package/dist/web/_app/immutable/assets/ibm-plex-sans-latin-500-normal.BgVn5rGT.woff +0 -0
- package/dist/web/_app/immutable/assets/ibm-plex-sans-latin-600-normal.Cu4Hd6ag.woff +0 -0
- package/dist/web/_app/immutable/assets/ibm-plex-sans-latin-600-normal.CuJfVYMP.woff2 +0 -0
- package/dist/web/_app/immutable/assets/inline-list.cqga56xT.css +1 -0
- package/dist/web/_app/immutable/assets/list-columns.BgnafZ4K.css +1 -0
- package/dist/web/_app/immutable/assets/realtime.DDCWxn3B.css +1 -0
- package/dist/web/_app/immutable/assets/select.B90KUqR4.css +1 -0
- package/dist/web/_app/immutable/assets/sheet.RF9RBmml.css +1 -0
- package/dist/web/_app/immutable/chunks/22qYtvr82.js +1 -0
- package/dist/web/_app/immutable/chunks/3anKjXOb.js +1 -0
- package/dist/web/_app/immutable/chunks/6S9WOky52.js +1 -0
- package/dist/web/_app/immutable/chunks/7xJ91z7d.js +2 -0
- package/dist/web/_app/immutable/chunks/9K8VREGP.js +1 -0
- package/dist/web/_app/immutable/chunks/B-TGZnCt2.js +1 -0
- package/dist/web/_app/immutable/chunks/B-n5q6ku.js +1 -0
- package/dist/web/_app/immutable/chunks/B0p2fSEV2.js +1 -0
- package/dist/web/_app/immutable/chunks/B2oi87jG.js +2 -0
- package/dist/web/_app/immutable/chunks/B4DG5QOL.js +1 -0
- package/dist/web/_app/immutable/chunks/B6Lt-qaJ.js +1 -0
- package/dist/web/_app/immutable/chunks/B6qeIQZz.js +2 -0
- package/dist/web/_app/immutable/chunks/B9KfEsQw2.js +1 -0
- package/dist/web/_app/immutable/chunks/B9VRF5aH2.js +1 -0
- package/dist/web/_app/immutable/chunks/BCQQzpbj.js +1 -0
- package/dist/web/_app/immutable/chunks/BF0vIqH9.js +1 -0
- package/dist/web/_app/immutable/chunks/BFp1K70l.js +8 -0
- package/dist/web/_app/immutable/chunks/BFr7Funh.js +1 -0
- package/dist/web/_app/immutable/chunks/BFx32D20.js +2 -0
- package/dist/web/_app/immutable/chunks/BLs1h0Rh2.js +1 -0
- package/dist/web/_app/immutable/chunks/BPzV_xOS2.js +1 -0
- package/dist/web/_app/immutable/chunks/BRvMjAzW.js +2 -0
- package/dist/web/_app/immutable/chunks/BV-iCKqa.js +1 -0
- package/dist/web/_app/immutable/chunks/BZi3uKF4.js +1 -0
- package/dist/web/_app/immutable/chunks/B_PyL87x.js +2 -0
- package/dist/web/_app/immutable/chunks/BbfHGU9n2.js +1 -0
- package/dist/web/_app/immutable/chunks/Bbqu2-5G2.js +1 -0
- package/dist/web/_app/immutable/chunks/BdWZJpmv.js +2 -0
- package/dist/web/_app/immutable/chunks/BfnFtsiY.js +1 -0
- package/dist/web/_app/immutable/chunks/BlgjVmFM2.js +14 -0
- package/dist/web/_app/immutable/chunks/BmgXvmIG.js +5 -0
- package/dist/web/_app/immutable/chunks/BpCG9m962.js +1 -0
- package/dist/web/_app/immutable/chunks/BrveeylZ.js +1 -0
- package/dist/web/_app/immutable/chunks/BsW72fyR2.js +1 -0
- package/dist/web/_app/immutable/chunks/Bti_XKwx.js +2692 -0
- package/dist/web/_app/immutable/chunks/BuhW5Fr0.js +689 -0
- package/dist/web/_app/immutable/chunks/Bx74EEyn2.js +1 -0
- package/dist/web/_app/immutable/chunks/BxPN0T61.js +1 -0
- package/dist/web/_app/immutable/chunks/Bxk27YWG.js +1 -0
- package/dist/web/_app/immutable/chunks/Bz9lrgGs.js +1 -0
- package/dist/web/_app/immutable/chunks/BzaxZ6j12.js +1 -0
- package/dist/web/_app/immutable/chunks/C1B4xDs0.js +1 -0
- package/dist/web/_app/immutable/chunks/C1trcC8M.js +7 -0
- package/dist/web/_app/immutable/chunks/C3F_NMTk.js +3 -0
- package/dist/web/_app/immutable/chunks/C4PZmGUQ.js +2 -0
- package/dist/web/_app/immutable/chunks/C6wYiSz8.js +1 -0
- package/dist/web/_app/immutable/chunks/C70saxIl.js +1 -0
- package/dist/web/_app/immutable/chunks/C9tvkk7Y2.js +22 -0
- package/dist/web/_app/immutable/chunks/CE1XZ5DE.js +1 -0
- package/dist/web/_app/immutable/chunks/CEahbtnP.js +1 -0
- package/dist/web/_app/immutable/chunks/CGkd0a-c2.js +2 -0
- package/dist/web/_app/immutable/chunks/CIoNEHQ82.js +184 -0
- package/dist/web/_app/immutable/chunks/CK4z74w5.js +1 -0
- package/dist/web/_app/immutable/chunks/COo3HgCZ.js +1 -0
- package/dist/web/_app/immutable/chunks/CP8_U450.js +1 -0
- package/dist/web/_app/immutable/chunks/CQ1eQ93t2.js +6 -0
- package/dist/web/_app/immutable/chunks/CQyBDccA.js +1 -0
- package/dist/web/_app/immutable/chunks/CUFQMEBn2.js +1 -0
- package/dist/web/_app/immutable/chunks/CV5OSCJc.js +1 -0
- package/dist/web/_app/immutable/chunks/CYEYDNwO2.js +1 -0
- package/dist/web/_app/immutable/chunks/CZgFaimi2.js +83 -0
- package/dist/web/_app/immutable/chunks/CZqvCTCv.js +1 -0
- package/dist/web/_app/immutable/chunks/CcWaWbrI2.js +1 -0
- package/dist/web/_app/immutable/chunks/CdtzRVZK.js +1 -0
- package/dist/web/_app/immutable/chunks/CfYG72Hc.js +1 -0
- package/dist/web/_app/immutable/chunks/Cg-ND0cl.js +1 -0
- package/dist/web/_app/immutable/chunks/Ch1kmm3J2.js +1 -0
- package/dist/web/_app/immutable/chunks/CjiMLTwX2.js +1 -0
- package/dist/web/_app/immutable/chunks/CkoeSJ8K.js +6 -0
- package/dist/web/_app/immutable/chunks/Cp87MaaW.js +1 -0
- package/dist/web/_app/immutable/chunks/Cqm5wAin.js +1 -0
- package/dist/web/_app/immutable/chunks/Ct1uesdW.js +2 -0
- package/dist/web/_app/immutable/chunks/CuYPXpWU.js +1 -0
- package/dist/web/_app/immutable/chunks/Cuq8J2Td.js +1 -0
- package/dist/web/_app/immutable/chunks/CvSEodTA.js +1 -0
- package/dist/web/_app/immutable/chunks/CvqqrTrj.js +1 -0
- package/dist/web/_app/immutable/chunks/CzXdOgVl2.js +7 -0
- package/dist/web/_app/immutable/chunks/D0W7c6Sg.js +185 -0
- package/dist/web/_app/immutable/chunks/D0rBhnqB2.js +1 -0
- package/dist/web/_app/immutable/chunks/D1-GZSN1.js +1 -0
- package/dist/web/_app/immutable/chunks/D1BLcNJ7.js +1 -0
- package/dist/web/_app/immutable/chunks/D1yvtriI.js +1 -0
- package/dist/web/_app/immutable/chunks/D25NMRpl.js +1 -0
- package/dist/web/_app/immutable/chunks/D3F675fu2.js +2 -0
- package/dist/web/_app/immutable/chunks/D4UrtGC1.js +1 -0
- package/dist/web/_app/immutable/chunks/D8wZ2xul.js +4 -0
- package/dist/web/_app/immutable/chunks/DA3HEX3X.js +1 -0
- package/dist/web/_app/immutable/chunks/DE2TCESD2.js +1 -0
- package/dist/web/_app/immutable/chunks/DN-gIRdd2.js +1 -0
- package/dist/web/_app/immutable/chunks/DPUVu0T0.js +1 -0
- package/dist/web/_app/immutable/chunks/DPcejqKZ.js +1 -0
- package/dist/web/_app/immutable/chunks/DQMWa2t7.js +1 -0
- package/dist/web/_app/immutable/chunks/DRPMJ-3M.js +2 -0
- package/dist/web/_app/immutable/chunks/DRPnwQAm.js +1 -0
- package/dist/web/_app/immutable/chunks/DXmfl4Hq2.js +1 -0
- package/dist/web/_app/immutable/chunks/DXsFrDer2.js +1 -0
- package/dist/web/_app/immutable/chunks/DYc5KW3F.js +1 -0
- package/dist/web/_app/immutable/chunks/DcPrzUMJ.js +1 -0
- package/dist/web/_app/immutable/chunks/DdQVGKgM.js +1 -0
- package/dist/web/_app/immutable/chunks/DiFfW--R2.js +2 -0
- package/dist/web/_app/immutable/chunks/DjIqa1_y.js +2 -0
- package/dist/web/_app/immutable/chunks/Dl63IUnH2.js +224 -0
- package/dist/web/_app/immutable/chunks/DmFdD6zT.js +1 -0
- package/dist/web/_app/immutable/chunks/Dn3R8S-U.js +1 -0
- package/dist/web/_app/immutable/chunks/DpNr1GQ2.js +1 -0
- package/dist/web/_app/immutable/chunks/DsFEd8vL2.js +1 -0
- package/dist/web/_app/immutable/chunks/DuxziNnw.js +1 -0
- package/dist/web/_app/immutable/chunks/FuiJnZG0.js +1 -0
- package/dist/web/_app/immutable/chunks/Izkulod7.js +1 -0
- package/dist/web/_app/immutable/chunks/LYL8znYR2.js +23 -0
- package/dist/web/_app/immutable/chunks/ON7Gta0d.js +1 -0
- package/dist/web/_app/immutable/chunks/PhN6tXuJ2.js +1 -0
- package/dist/web/_app/immutable/chunks/PyLyCpuL.js +1 -0
- package/dist/web/_app/immutable/chunks/RG7IUVLn2.js +2 -0
- package/dist/web/_app/immutable/chunks/RK4gCWN0.js +2 -0
- package/dist/web/_app/immutable/chunks/SnzlL4ZV.js +1 -0
- package/dist/web/_app/immutable/chunks/XcWejFm_.js +5 -0
- package/dist/web/_app/immutable/chunks/Xkp5hSA1.js +1 -0
- package/dist/web/_app/immutable/chunks/al_nidE9.js +1 -0
- package/dist/web/_app/immutable/chunks/e50-izZO2.js +1 -0
- package/dist/web/_app/immutable/chunks/golz20La2.js +2 -0
- package/dist/web/_app/immutable/chunks/hG-QCarB.js +1 -0
- package/dist/web/_app/immutable/chunks/kNaey6uv.js +1 -0
- package/dist/web/_app/immutable/chunks/nXReuy-5.js +3 -0
- package/dist/web/_app/immutable/chunks/o61aZZFZ2.js +66 -0
- package/dist/web/_app/immutable/chunks/qwr5boV8.js +1 -0
- package/dist/web/_app/immutable/chunks/rjjyuGhb.js +1 -0
- package/dist/web/_app/immutable/chunks/uBgoVlsx.js +3 -0
- package/dist/web/_app/immutable/chunks/xY0c-UfG.js +3 -0
- package/dist/web/_app/immutable/chunks/xeNvx4Bl2.js +1 -0
- package/dist/web/_app/immutable/chunks/xihTtKlq.js +1 -0
- package/dist/web/_app/immutable/entry/app.dqA31fjy.js +2 -0
- package/dist/web/_app/immutable/entry/start.BB1XrAea.js +1 -0
- package/dist/web/_app/immutable/nodes/0.dALEQAnu.js +2 -0
- package/dist/web/_app/immutable/nodes/1.aFU32Ukj.js +1 -0
- package/dist/web/_app/immutable/nodes/10.C2wB-OnW.js +1 -0
- package/dist/web/_app/immutable/nodes/11.CI3a8Rj5.js +1 -0
- package/dist/web/_app/immutable/nodes/12.CsTvsKzB.js +1 -0
- package/dist/web/_app/immutable/nodes/13.CYrHXCA8.js +1 -0
- package/dist/web/_app/immutable/nodes/14.B31HrQ26.js +1 -0
- package/dist/web/_app/immutable/nodes/15.DxgnZ61h.js +1 -0
- package/dist/web/_app/immutable/nodes/16.DAP8cwVb.js +1 -0
- package/dist/web/_app/immutable/nodes/17.CmwXtCDY.js +77 -0
- package/dist/web/_app/immutable/nodes/2.BuGXEIlN.js +122 -0
- package/dist/web/_app/immutable/nodes/3.CmhZJWHE.js +6 -0
- package/dist/web/_app/immutable/nodes/4.BRfoPTm-.js +11 -0
- package/dist/web/_app/immutable/nodes/5.C7gPuZM_.js +1 -0
- package/dist/web/_app/immutable/nodes/6.qKODVbya.js +6 -0
- package/dist/web/_app/immutable/nodes/7.BZO37zAJ.js +1 -0
- package/dist/web/_app/immutable/nodes/8.xF_Dd1BO.js +1 -0
- package/dist/web/_app/immutable/nodes/9.Bow4UyKV.js +1 -0
- package/dist/web/_app/version.json +1 -1
- package/dist/web/favicon-16.png +0 -0
- package/dist/web/favicon-180.png +0 -0
- package/dist/web/favicon-32.png +0 -0
- package/dist/web/favicon-48.png +0 -0
- package/dist/web/favicon-512.png +0 -0
- package/dist/web/favicon.ico +0 -0
- package/dist/web/favicon.svg +8 -0
- package/dist/web/index.html +56 -21
- package/dist/web/studiograph-logomark.svg +29 -0
- package/package.json +35 -14
- package/dist/agent/skills/enrich-entities.md +0 -136
- package/dist/agent/skills/sync-configuration.md +0 -119
- package/dist/agent/skills/sync-setup.md +0 -82
- package/dist/agent/tools/message-tools.d.ts +0 -42
- package/dist/agent/tools/message-tools.js +0 -106
- package/dist/agent/tools/message-tools.js.map +0 -1
- package/dist/cli/commands/app.d.ts +0 -7
- package/dist/cli/commands/app.js +0 -268
- package/dist/cli/commands/app.js.map +0 -1
- package/dist/cli/commands/clear.d.ts +0 -5
- package/dist/cli/commands/clear.js +0 -36
- package/dist/cli/commands/clear.js.map +0 -1
- package/dist/cli/commands/collection.d.ts +0 -10
- package/dist/cli/commands/collection.js.map +0 -1
- package/dist/cli/commands/join.d.ts +0 -9
- package/dist/cli/commands/join.js +0 -255
- package/dist/cli/commands/join.js.map +0 -1
- package/dist/cli/commands/start.d.ts +0 -7
- package/dist/cli/commands/start.js +0 -584
- package/dist/cli/commands/start.js.map +0 -1
- package/dist/cli/commands/update.d.ts +0 -8
- package/dist/cli/commands/update.js +0 -155
- package/dist/cli/commands/update.js.map +0 -1
- package/dist/cli/commands/user.d.ts +0 -7
- package/dist/cli/commands/user.js +0 -175
- package/dist/cli/commands/user.js.map +0 -1
- package/dist/cli/scaffolding.d.ts +0 -12
- package/dist/cli/scaffolding.js +0 -397
- package/dist/cli/scaffolding.js.map +0 -1
- package/dist/integrations/registry.d.ts +0 -8
- package/dist/integrations/registry.js +0 -7
- package/dist/integrations/registry.js.map +0 -1
- package/dist/integrations/types.d.ts +0 -43
- package/dist/integrations/types.js +0 -5
- package/dist/integrations/types.js.map +0 -1
- package/dist/lib/lib/utils.d.ts +0 -2
- package/dist/lib/lib/utils.js +0 -6
- package/dist/lib/lib/utils.js.map +0 -1
- package/dist/server/chrome/chrome.css +0 -691
- package/dist/server/chrome/chrome.js +0 -374
- package/dist/server/commit-scheduler.d.ts +0 -39
- package/dist/server/commit-scheduler.js +0 -113
- package/dist/server/commit-scheduler.js.map +0 -1
- package/dist/server/plugin-loader.d.ts +0 -53
- package/dist/server/plugin-loader.js +0 -155
- package/dist/server/plugin-loader.js.map +0 -1
- package/dist/server/routes/meeting-ingest-api.d.ts +0 -14
- package/dist/server/routes/meeting-ingest-api.js.map +0 -1
- package/dist/server/routes/messages-api.d.ts +0 -15
- package/dist/server/routes/messages-api.js +0 -385
- package/dist/server/routes/messages-api.js.map +0 -1
- package/dist/services/batch-processor.d.ts +0 -49
- package/dist/services/batch-processor.js +0 -166
- package/dist/services/batch-processor.js.map +0 -1
- package/dist/services/briefing.d.ts +0 -26
- package/dist/services/briefing.js +0 -230
- package/dist/services/briefing.js.map +0 -1
- package/dist/services/heartbeat.d.ts +0 -28
- package/dist/services/heartbeat.js +0 -183
- package/dist/services/heartbeat.js.map +0 -1
- package/dist/services/image-import-service.d.ts +0 -24
- package/dist/services/image-import-service.js +0 -108
- package/dist/services/image-import-service.js.map +0 -1
- package/dist/services/insights.d.ts +0 -38
- package/dist/services/insights.js +0 -269
- package/dist/services/insights.js.map +0 -1
- package/dist/services/meeting-processor.js.map +0 -1
- package/dist/services/message-service.d.ts +0 -68
- package/dist/services/message-service.js +0 -220
- package/dist/services/message-service.js.map +0 -1
- package/dist/utils/workspace-config.d.ts +0 -8
- package/dist/utils/workspace-config.js +0 -22
- package/dist/utils/workspace-config.js.map +0 -1
- package/dist/web/_app/immutable/assets/0.uPSqtsC5.css +0 -1
- package/dist/web/_app/immutable/assets/11.2jzI3cZY.css +0 -1
- package/dist/web/_app/immutable/assets/12.CT4xL4K3.css +0 -1
- package/dist/web/_app/immutable/assets/13.BUrHkYry.css +0 -1
- package/dist/web/_app/immutable/assets/2.DpQWr6q6.css +0 -1
- package/dist/web/_app/immutable/assets/3.BxdqT7zi.css +0 -1
- package/dist/web/_app/immutable/assets/4.DdNqjd0T.css +0 -1
- package/dist/web/_app/immutable/assets/5.DFeGxLYf.css +0 -1
- package/dist/web/_app/immutable/assets/6.DXZr_rI_.css +0 -1
- package/dist/web/_app/immutable/assets/GraphView.D9ePpZez.css +0 -1
- package/dist/web/_app/immutable/assets/Toaster.rN8r_Hzv.css +0 -1
- package/dist/web/_app/immutable/assets/ViewToolbar.BWE03S64.css +0 -1
- package/dist/web/_app/immutable/assets/WorkspaceView.CgGDi_Zb.css +0 -1
- package/dist/web/_app/immutable/assets/wikilinks.CzMBkUMB.css +0 -1
- package/dist/web/_app/immutable/chunks/-jG4Obyh.js +0 -4
- package/dist/web/_app/immutable/chunks/2nrc8f_O.js +0 -1
- package/dist/web/_app/immutable/chunks/7S2LGqoP.js +0 -2
- package/dist/web/_app/immutable/chunks/8Q3ZJIYu.js +0 -1
- package/dist/web/_app/immutable/chunks/B8ydT5xX.js +0 -2
- package/dist/web/_app/immutable/chunks/BB_5th5W.js +0 -3383
- package/dist/web/_app/immutable/chunks/BEn6N5c2.js +0 -1
- package/dist/web/_app/immutable/chunks/BFNNbCAM.js +0 -1
- package/dist/web/_app/immutable/chunks/BFZZEUd5.js +0 -1
- package/dist/web/_app/immutable/chunks/BGk8kfOE.js +0 -2
- package/dist/web/_app/immutable/chunks/BIBCr278.js +0 -1
- package/dist/web/_app/immutable/chunks/BPCkkwqe.js +0 -1
- package/dist/web/_app/immutable/chunks/BhlvzGQx.js +0 -1
- package/dist/web/_app/immutable/chunks/BlMknQeF.js +0 -1
- package/dist/web/_app/immutable/chunks/BpjqrlCg.js +0 -1
- package/dist/web/_app/immutable/chunks/BrebtJNG.js +0 -18
- package/dist/web/_app/immutable/chunks/ByBZ7JIT.js +0 -1
- package/dist/web/_app/immutable/chunks/Bz0ZjVQE.js +0 -2
- package/dist/web/_app/immutable/chunks/BzJTZOK2.js +0 -1
- package/dist/web/_app/immutable/chunks/C0LVZhvn.js +0 -1
- package/dist/web/_app/immutable/chunks/C3uBrOS5.js +0 -1
- package/dist/web/_app/immutable/chunks/C8R1sDpW.js +0 -1
- package/dist/web/_app/immutable/chunks/CDRHrs0g.js +0 -1
- package/dist/web/_app/immutable/chunks/CN5_py1I.js +0 -1
- package/dist/web/_app/immutable/chunks/CPne482a.js +0 -1
- package/dist/web/_app/immutable/chunks/CSVbGg_b.js +0 -5
- package/dist/web/_app/immutable/chunks/CWyU-seV.js +0 -1
- package/dist/web/_app/immutable/chunks/CX_61fY8.js +0 -5
- package/dist/web/_app/immutable/chunks/CYrVHOHA.js +0 -1
- package/dist/web/_app/immutable/chunks/ChsiIm-E.js +0 -1
- package/dist/web/_app/immutable/chunks/CojKppbh.js +0 -1
- package/dist/web/_app/immutable/chunks/CqkleIqs.js +0 -1
- package/dist/web/_app/immutable/chunks/CtYLtD7K.js +0 -1
- package/dist/web/_app/immutable/chunks/D-HDy5qS.js +0 -1
- package/dist/web/_app/immutable/chunks/D5aIYSkd.js +0 -1
- package/dist/web/_app/immutable/chunks/DBBXARVf.js +0 -1
- package/dist/web/_app/immutable/chunks/DFYOFE3o.js +0 -1
- package/dist/web/_app/immutable/chunks/DKaafS50.js +0 -1
- package/dist/web/_app/immutable/chunks/DUMOo1Pn.js +0 -1
- package/dist/web/_app/immutable/chunks/DWX9f6AF.js +0 -1
- package/dist/web/_app/immutable/chunks/DY8-EONP.js +0 -1
- package/dist/web/_app/immutable/chunks/DkoHPElM.js +0 -1
- package/dist/web/_app/immutable/chunks/DnL9f0lc.js +0 -7
- package/dist/web/_app/immutable/chunks/DsnmJJEf.js +0 -1
- package/dist/web/_app/immutable/chunks/DujahU3W.js +0 -1
- package/dist/web/_app/immutable/chunks/FBn-ES5k.js +0 -1
- package/dist/web/_app/immutable/chunks/HQpwSOb3.js +0 -1
- package/dist/web/_app/immutable/chunks/KyjzlWRN.js +0 -2
- package/dist/web/_app/immutable/chunks/PPVm8Dsz.js +0 -1
- package/dist/web/_app/immutable/chunks/UwYfmrPx.js +0 -2
- package/dist/web/_app/immutable/chunks/W25ZVI8L.js +0 -2
- package/dist/web/_app/immutable/chunks/WSUKABI_.js +0 -1
- package/dist/web/_app/immutable/chunks/XjsuEnNE.js +0 -5
- package/dist/web/_app/immutable/chunks/ZD6ARAtb.js +0 -1
- package/dist/web/_app/immutable/chunks/pBTf4stg.js +0 -2
- package/dist/web/_app/immutable/chunks/rGIarcnp.js +0 -1
- package/dist/web/_app/immutable/chunks/vxEtkL8z.js +0 -1
- package/dist/web/_app/immutable/chunks/wDIGUaoU.js +0 -3
- package/dist/web/_app/immutable/entry/app.ZHiTM8WS.js +0 -2
- package/dist/web/_app/immutable/entry/start.C9-FfAVc.js +0 -1
- package/dist/web/_app/immutable/nodes/0.D92Orz8k.js +0 -2
- package/dist/web/_app/immutable/nodes/1.BMdyglM_.js +0 -1
- package/dist/web/_app/immutable/nodes/10.BilVDHSL.js +0 -1
- package/dist/web/_app/immutable/nodes/11.CS9E0Hic.js +0 -1
- package/dist/web/_app/immutable/nodes/12.D3BOxYzG.js +0 -1
- package/dist/web/_app/immutable/nodes/13.CClMKYtN.js +0 -1
- package/dist/web/_app/immutable/nodes/2.C8KKElPL.js +0 -267
- package/dist/web/_app/immutable/nodes/3.C5n5uiWU.js +0 -5
- package/dist/web/_app/immutable/nodes/4.DcGVvgiL.js +0 -11
- package/dist/web/_app/immutable/nodes/5.DxIjnFQO.js +0 -4
- package/dist/web/_app/immutable/nodes/6.lkh6kKLj.js +0 -1
- package/dist/web/_app/immutable/nodes/7.Bg7SbfhA.js +0 -1
- package/dist/web/_app/immutable/nodes/8.DcXWCNBE.js +0 -1
- package/dist/web/_app/immutable/nodes/9.Cefi8Jfm.js +0 -1
|
@@ -1,24 +1,32 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
2
|
+
* Event Processor — source-agnostic event capture processing
|
|
3
3
|
*
|
|
4
|
-
* Accepts a common MeetingPayload from any source (
|
|
5
|
-
*
|
|
4
|
+
* Accepts a common MeetingPayload from any capture source (desktop client,
|
|
5
|
+
* external integrations, calendar, manual) and writes an `event` entity
|
|
6
|
+
* with `type: meeting` (the default). Handles:
|
|
6
7
|
* 1. Entity creation with proper frontmatter
|
|
7
8
|
* 2. Participant resolution to existing person entities
|
|
8
9
|
* 3. LLM-powered summary generation from transcript
|
|
9
10
|
* 4. Structured extraction (action items, decisions)
|
|
10
11
|
* 5. Task entity creation from action items
|
|
11
12
|
* 6. Body template population
|
|
13
|
+
*
|
|
14
|
+
* Today the only event capture surface is meeting recording, so the
|
|
15
|
+
* payload type is still MeetingPayload — generalizing the payload shape
|
|
16
|
+
* is a follow-up when/if other event sources land.
|
|
12
17
|
*/
|
|
13
|
-
import
|
|
14
|
-
import { loadUserConfig, resolveModelId, resolveApiKey } from '../core/user-config.js';
|
|
18
|
+
import { completeSimple, getModel } from '@mariozechner/pi-ai';
|
|
19
|
+
import { loadUserConfig, resolveModelId, resolveApiKey, resolveProvider } from '../core/user-config.js';
|
|
20
|
+
import { log } from '../utils/log.js';
|
|
15
21
|
// ── Processor ─────────────────────────────────────────────────────────
|
|
16
|
-
export class
|
|
22
|
+
export class EventProcessor {
|
|
17
23
|
workspaceManager;
|
|
18
24
|
wsHub;
|
|
19
|
-
|
|
25
|
+
yjsManager;
|
|
26
|
+
constructor(workspaceManager, wsHub, yjsManager) {
|
|
20
27
|
this.workspaceManager = workspaceManager;
|
|
21
28
|
this.wsHub = wsHub;
|
|
29
|
+
this.yjsManager = yjsManager;
|
|
22
30
|
}
|
|
23
31
|
/**
|
|
24
32
|
* Process a meeting payload: create entity, resolve participants,
|
|
@@ -32,8 +40,9 @@ export class MeetingProcessor {
|
|
|
32
40
|
// Build frontmatter
|
|
33
41
|
const now = new Date().toISOString();
|
|
34
42
|
const data = {
|
|
35
|
-
entity_type: '
|
|
43
|
+
entity_type: 'event',
|
|
36
44
|
entity_id: entityId,
|
|
45
|
+
type: 'meeting',
|
|
37
46
|
name: payload.title || `Meeting ${payload.startedAt.slice(0, 10)}`,
|
|
38
47
|
date: payload.startedAt.slice(0, 10),
|
|
39
48
|
attendees: attendeeLinks,
|
|
@@ -59,22 +68,22 @@ export class MeetingProcessor {
|
|
|
59
68
|
}
|
|
60
69
|
// Create the entity immediately
|
|
61
70
|
await graph.create({
|
|
62
|
-
entityType: '
|
|
71
|
+
entityType: 'event',
|
|
63
72
|
entityId,
|
|
64
73
|
data,
|
|
65
74
|
content,
|
|
66
|
-
commitMessage: `Add
|
|
75
|
+
commitMessage: `Add event: ${data.name} (via ${payload.source})`,
|
|
67
76
|
user,
|
|
68
77
|
});
|
|
69
78
|
this.broadcast('created', repo, entityId, user);
|
|
70
79
|
// Generate summary asynchronously
|
|
71
80
|
this.processAsync(payload, repo, entityId, attendeeLinks, user).catch(err => {
|
|
72
|
-
|
|
81
|
+
log.warn(`[event-processor] Background processing failed for ${entityId}:`, err.message);
|
|
73
82
|
});
|
|
74
83
|
return {
|
|
75
84
|
entityId,
|
|
76
85
|
repo,
|
|
77
|
-
url: `/${repo}/
|
|
86
|
+
url: `/${repo}/event/${entityId}`,
|
|
78
87
|
attendeeLinks,
|
|
79
88
|
extractionPending: true,
|
|
80
89
|
tasksCreated: [],
|
|
@@ -89,10 +98,10 @@ export class MeetingProcessor {
|
|
|
89
98
|
const graph = this.workspaceManager.getGraph(repo);
|
|
90
99
|
// Verify entity exists
|
|
91
100
|
try {
|
|
92
|
-
graph.get('
|
|
101
|
+
graph.get('event', existingEntityId);
|
|
93
102
|
}
|
|
94
103
|
catch {
|
|
95
|
-
throw new Error(`
|
|
104
|
+
throw new Error(`Event entity not found: ${existingEntityId}`);
|
|
96
105
|
}
|
|
97
106
|
// Resolve participants
|
|
98
107
|
const attendeeLinks = await this.resolveParticipants(payload.participants, repo);
|
|
@@ -110,22 +119,35 @@ export class MeetingProcessor {
|
|
|
110
119
|
if (payload.platform)
|
|
111
120
|
updateData.tags = ['auto-transcribed', payload.platform];
|
|
112
121
|
await graph.update({
|
|
113
|
-
entityType: '
|
|
122
|
+
entityType: 'event',
|
|
114
123
|
entityId: existingEntityId,
|
|
115
124
|
data: updateData,
|
|
116
125
|
content: undefined, // Don't overwrite content — keep user's notes until summary is ready
|
|
117
|
-
commitMessage: `Start processing
|
|
126
|
+
commitMessage: `Start processing event: ${existingEntityId}`,
|
|
118
127
|
user,
|
|
119
128
|
});
|
|
120
129
|
this.broadcast('updated', repo, existingEntityId, user);
|
|
121
|
-
// Generate summary asynchronously (same pipeline as new
|
|
122
|
-
this.processAsync(payload, repo, existingEntityId, attendeeLinks, user).catch(err => {
|
|
123
|
-
|
|
130
|
+
// Generate summary asynchronously (same pipeline as new events)
|
|
131
|
+
this.processAsync(payload, repo, existingEntityId, attendeeLinks, user).catch(async (err) => {
|
|
132
|
+
log.warn(`[event-processor] Background processing failed for ${existingEntityId}:`, err.message);
|
|
133
|
+
// Always clear the processing flag so the entity doesn't stay stuck
|
|
134
|
+
try {
|
|
135
|
+
const g = this.workspaceManager.getGraph(repo);
|
|
136
|
+
await g.update({
|
|
137
|
+
entityType: 'event',
|
|
138
|
+
entityId: existingEntityId,
|
|
139
|
+
data: { processing: false },
|
|
140
|
+
commitMessage: `Clear processing flag after error: ${existingEntityId}`,
|
|
141
|
+
user,
|
|
142
|
+
});
|
|
143
|
+
this.broadcast('updated', repo, existingEntityId, user);
|
|
144
|
+
}
|
|
145
|
+
catch { /* non-fatal */ }
|
|
124
146
|
});
|
|
125
147
|
return {
|
|
126
148
|
entityId: existingEntityId,
|
|
127
149
|
repo,
|
|
128
|
-
url: `/${repo}/
|
|
150
|
+
url: `/${repo}/event/${existingEntityId}`,
|
|
129
151
|
attendeeLinks,
|
|
130
152
|
extractionPending: true,
|
|
131
153
|
tasksCreated: [],
|
|
@@ -139,21 +161,47 @@ export class MeetingProcessor {
|
|
|
139
161
|
// Format transcript
|
|
140
162
|
const transcript = payload.transcriptText
|
|
141
163
|
?? (payload.transcript ? this.formatTranscript(payload.transcript) : '');
|
|
142
|
-
// Use existing summary from source, or generate via LLM
|
|
164
|
+
// Use existing summary from source, or generate via LLM. Pass natural
|
|
165
|
+
// names instead of wikilinks so the model can attribute statements to
|
|
166
|
+
// specific attendees from contextual cues — the transcript only carries
|
|
167
|
+
// channel-level "Me / Them" labels, but the LLM can recover names from
|
|
168
|
+
// in-dialog mentions ("Sarah, what do you think?"), self-introductions,
|
|
169
|
+
// and the calendar attendee list.
|
|
170
|
+
const selfName = payload.participants.find(p => p.isSelf)?.name || 'Me';
|
|
171
|
+
const remoteNames = payload.participants
|
|
172
|
+
.filter(p => !p.isSelf)
|
|
173
|
+
.map(p => p.name);
|
|
143
174
|
let summary = payload.existingSummary ?? null;
|
|
175
|
+
let summaryError;
|
|
144
176
|
if (!summary && transcript) {
|
|
145
|
-
|
|
177
|
+
const result = await this.generateSummary(transcript, payload.title || '', payload.memo || '', selfName, remoteNames);
|
|
178
|
+
summary = result.summary;
|
|
179
|
+
summaryError = result.error;
|
|
146
180
|
}
|
|
147
181
|
if (!summary) {
|
|
148
|
-
// Fallback: raw transcript
|
|
182
|
+
// Fallback: raw transcript (or just memo if no transcript). Surface
|
|
183
|
+
// the LLM error inline so the user sees *why* they got a raw transcript
|
|
184
|
+
// instead of a generated summary — otherwise this fallback looks like
|
|
185
|
+
// success and the actual failure is buried in server logs.
|
|
186
|
+
const errorBanner = summaryError
|
|
187
|
+
? `> [!warning] AI summary failed\n> ${summaryError.replace(/\n/g, '\n> ')}`
|
|
188
|
+
: null;
|
|
189
|
+
const fallbackContent = [
|
|
190
|
+
errorBanner,
|
|
191
|
+
transcript || null,
|
|
192
|
+
payload.memo ? `## Notes\n\n${payload.memo}` : null,
|
|
193
|
+
].filter(Boolean).join('\n\n---\n\n');
|
|
149
194
|
await graph.update({
|
|
150
|
-
entityType: '
|
|
195
|
+
entityType: 'event',
|
|
151
196
|
entityId,
|
|
152
197
|
data: { processing: false },
|
|
153
|
-
|
|
154
|
-
|
|
198
|
+
// Only overwrite content if we have something to write
|
|
199
|
+
content: fallbackContent || undefined,
|
|
200
|
+
commitMessage: `Add transcript for event: ${payload.title}`,
|
|
155
201
|
user,
|
|
202
|
+
source: fallbackContent ? 'server-write' : undefined,
|
|
156
203
|
});
|
|
204
|
+
this.broadcast('updated', repo, entityId, { id: 'ai-summary', name: 'AI Summary', email: 'ai@studiograph.local' });
|
|
157
205
|
return;
|
|
158
206
|
}
|
|
159
207
|
// Extract structured data
|
|
@@ -186,19 +234,20 @@ export class MeetingProcessor {
|
|
|
186
234
|
finalContent += `\n\n---\n\n## Transcript\n\n${transcript}`;
|
|
187
235
|
}
|
|
188
236
|
await graph.update({
|
|
189
|
-
entityType: '
|
|
237
|
+
entityType: 'event',
|
|
190
238
|
entityId,
|
|
191
239
|
data: updateData,
|
|
192
240
|
content: finalContent,
|
|
193
|
-
commitMessage: `Generate
|
|
241
|
+
commitMessage: `Generate event notes: ${payload.title}`,
|
|
194
242
|
user,
|
|
243
|
+
source: 'server-write',
|
|
195
244
|
});
|
|
196
245
|
this.broadcast('updated', repo, entityId, { id: 'ai-summary', name: 'AI Summary', email: 'ai@studiograph.local' });
|
|
197
246
|
}
|
|
198
247
|
/**
|
|
199
|
-
* Create a task entity from an action item string, linked to the
|
|
248
|
+
* Create a task entity from an action item string, linked to the event.
|
|
200
249
|
*/
|
|
201
|
-
async createTask(actionItem,
|
|
250
|
+
async createTask(actionItem, eventEntityId, repo, user) {
|
|
202
251
|
const graph = this.workspaceManager.getGraph(repo);
|
|
203
252
|
const slug = this.slugify(actionItem.slice(0, 60));
|
|
204
253
|
const taskId = `task-${slug}-${Date.now()}`;
|
|
@@ -214,12 +263,12 @@ export class MeetingProcessor {
|
|
|
214
263
|
date: now.slice(0, 10),
|
|
215
264
|
created_at: now,
|
|
216
265
|
updated_at: now,
|
|
217
|
-
created_by: user?.id ?? '
|
|
218
|
-
updated_by: user?.id ?? '
|
|
219
|
-
tags: ['from-
|
|
266
|
+
created_by: user?.id ?? 'event-processor',
|
|
267
|
+
updated_by: user?.id ?? 'event-processor',
|
|
268
|
+
tags: ['from-event'],
|
|
220
269
|
},
|
|
221
|
-
content: `## Description\n\n${actionItem}\n\n## Source\n\n-
|
|
222
|
-
commitMessage: `Create task from
|
|
270
|
+
content: `## Description\n\n${actionItem}\n\n## Source\n\n- Event: [[${eventEntityId}]]\n`,
|
|
271
|
+
commitMessage: `Create task from event: ${actionItem.slice(0, 50)}`,
|
|
223
272
|
user,
|
|
224
273
|
});
|
|
225
274
|
return taskId;
|
|
@@ -227,7 +276,7 @@ export class MeetingProcessor {
|
|
|
227
276
|
// ── Helpers ──────────────────────────────────────────────────────────
|
|
228
277
|
generateEntityId(payload) {
|
|
229
278
|
const date = payload.startedAt.slice(0, 10);
|
|
230
|
-
const title = payload.title || '
|
|
279
|
+
const title = payload.title || 'event';
|
|
231
280
|
return `${date}-${this.slugify(title)}`;
|
|
232
281
|
}
|
|
233
282
|
async resolveParticipants(participants, repo) {
|
|
@@ -282,26 +331,33 @@ export class MeetingProcessor {
|
|
|
282
331
|
}
|
|
283
332
|
return blocks.join('\n\n');
|
|
284
333
|
}
|
|
285
|
-
async generateSummary(transcript, title, memo,
|
|
286
|
-
const { modelId, apiKey } = this.getModelConfig();
|
|
287
|
-
if (!apiKey)
|
|
288
|
-
return null;
|
|
334
|
+
async generateSummary(transcript, title, memo, selfName, remoteNames) {
|
|
335
|
+
const { provider, modelId, apiKey } = this.getModelConfig();
|
|
336
|
+
if (!apiKey) {
|
|
337
|
+
return { summary: null, error: `No API key configured (provider=${provider}, model=${modelId})` };
|
|
338
|
+
}
|
|
289
339
|
try {
|
|
290
|
-
const
|
|
340
|
+
const model = getModel(provider, modelId);
|
|
341
|
+
const remoteNameList = remoteNames.length > 0 ? remoteNames.join(', ') : '(none on calendar)';
|
|
291
342
|
const prompt = `You are a meeting notes assistant. Generate structured meeting notes from this transcript.
|
|
292
343
|
|
|
293
344
|
Meeting: ${title}
|
|
294
|
-
|
|
295
|
-
|
|
345
|
+
Note-taker (the "Me" channel): ${selfName}
|
|
346
|
+
Other attendees from calendar: ${remoteNameList}
|
|
347
|
+
${memo ? `Note-taker's typed notes: ${memo}` : ''}
|
|
296
348
|
|
|
297
349
|
Transcript:
|
|
298
350
|
${transcript.slice(0, 30000)}
|
|
299
351
|
|
|
352
|
+
The transcript labels are channel-based: "**Me:**" is ${selfName}; "**Them:**" is whichever remote attendee was speaking (multiple remote attendees share the same label, since they all came through the same audio channel).
|
|
353
|
+
|
|
354
|
+
Use contextual cues to attribute statements to specific people by name when you're reasonably confident — names mentioned in dialog ("Sarah, what do you think?"), self-introductions ("Hi, I'm Marcus"), domain expertise references, and the calendar attendee list above. When you genuinely can't tell which attendee said something, write generically ("an attendee asked…", "the team discussed…") rather than guess. Never fabricate attribution.
|
|
355
|
+
|
|
300
356
|
Write structured meeting notes in Markdown:
|
|
301
|
-
1. Brief 2
|
|
357
|
+
1. Brief 2–3 sentence overview
|
|
302
358
|
2. ### section headers for each major topic
|
|
303
|
-
3. Bullet points for key points, decisions, context
|
|
304
|
-
4. End with ### Next Steps listing concrete action items (include assignee if
|
|
359
|
+
3. Bullet points for key points, decisions, context — attribute to attendees by name where context permits
|
|
360
|
+
4. End with ### Next Steps listing concrete action items (include assignee name if identifiable)
|
|
305
361
|
|
|
306
362
|
Guidelines:
|
|
307
363
|
- Third person, past tense
|
|
@@ -311,28 +367,28 @@ Guidelines:
|
|
|
311
367
|
- State decisions clearly
|
|
312
368
|
|
|
313
369
|
Return ONLY the Markdown notes.`;
|
|
314
|
-
const response = await
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
|
|
370
|
+
const response = await completeSimple(model, { messages: [{ role: 'user', content: prompt, timestamp: Date.now() }] }, { apiKey, maxTokens: 4096 });
|
|
371
|
+
const textContent = response.content.find(c => c.type === 'text');
|
|
372
|
+
const text = textContent?.type === 'text' ? textContent.text : '';
|
|
373
|
+
const trimmed = text.trim();
|
|
374
|
+
if (!trimmed) {
|
|
375
|
+
return { summary: null, error: `LLM returned empty response (provider=${provider}, model=${modelId})` };
|
|
376
|
+
}
|
|
377
|
+
return { summary: trimmed };
|
|
321
378
|
}
|
|
322
379
|
catch (err) {
|
|
323
|
-
|
|
324
|
-
|
|
380
|
+
const message = err.message || String(err);
|
|
381
|
+
log.warn('[event-processor] LLM summary failed:', message);
|
|
382
|
+
return { summary: null, error: `LLM call failed (provider=${provider}, model=${modelId}): ${message}` };
|
|
325
383
|
}
|
|
326
384
|
}
|
|
327
385
|
async extractStructuredData(summary) {
|
|
328
|
-
const { modelId, apiKey } = this.getModelConfig();
|
|
386
|
+
const { provider, modelId, apiKey } = this.getModelConfig();
|
|
329
387
|
if (!apiKey)
|
|
330
388
|
return { actionItems: [], decisions: [] };
|
|
331
389
|
try {
|
|
332
|
-
const
|
|
333
|
-
const response = await
|
|
334
|
-
model: modelId,
|
|
335
|
-
max_tokens: 1024,
|
|
390
|
+
const model = getModel(provider, modelId);
|
|
391
|
+
const response = await completeSimple(model, {
|
|
336
392
|
messages: [{
|
|
337
393
|
role: 'user',
|
|
338
394
|
content: `Extract action items and decisions from these meeting notes. Return JSON only:
|
|
@@ -340,9 +396,11 @@ Return ONLY the Markdown notes.`;
|
|
|
340
396
|
|
|
341
397
|
Notes:
|
|
342
398
|
${summary.slice(0, 8000)}`,
|
|
399
|
+
timestamp: Date.now(),
|
|
343
400
|
}],
|
|
344
|
-
});
|
|
345
|
-
const
|
|
401
|
+
}, { apiKey, maxTokens: 1024 });
|
|
402
|
+
const textContent = response.content.find(c => c.type === 'text');
|
|
403
|
+
const text = textContent?.type === 'text' ? textContent.text : '';
|
|
346
404
|
const parsed = JSON.parse(text);
|
|
347
405
|
return {
|
|
348
406
|
actionItems: Array.isArray(parsed.actionItems) ? parsed.actionItems : [],
|
|
@@ -355,16 +413,17 @@ ${summary.slice(0, 8000)}`,
|
|
|
355
413
|
}
|
|
356
414
|
getModelConfig() {
|
|
357
415
|
const userConfig = loadUserConfig();
|
|
416
|
+
const provider = resolveProvider(userConfig);
|
|
358
417
|
const modelId = resolveModelId(userConfig);
|
|
359
418
|
const apiKey = resolveApiKey(userConfig);
|
|
360
|
-
return { modelId, apiKey };
|
|
419
|
+
return { provider, modelId, apiKey };
|
|
361
420
|
}
|
|
362
421
|
broadcast(action, repo, entityId, user) {
|
|
363
422
|
this.wsHub?.broadcast({
|
|
364
423
|
type: 'entity_change',
|
|
365
424
|
action,
|
|
366
425
|
repo,
|
|
367
|
-
entityType: '
|
|
426
|
+
entityType: 'event',
|
|
368
427
|
entityId,
|
|
369
428
|
actor: user?.name ?? 'system',
|
|
370
429
|
source: 'api',
|
|
@@ -379,4 +438,4 @@ ${summary.slice(0, 8000)}`,
|
|
|
379
438
|
.slice(0, 80);
|
|
380
439
|
}
|
|
381
440
|
}
|
|
382
|
-
//# sourceMappingURL=
|
|
441
|
+
//# sourceMappingURL=event-processor.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"event-processor.js","sourceRoot":"","sources":["../../src/services/event-processor.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare function convertDocxToMarkdown(buffer: Buffer): Promise<string>;
|
|
@@ -0,0 +1,233 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Word (.docx) → Markdown — the docx extraction heuristics, isolated from the
|
|
3
|
+
* authoritative convert pipeline (../convert-service.ts).
|
|
4
|
+
*
|
|
5
|
+
* Best-effort, frequently-tuned "make the extracted text readable" code with NO
|
|
6
|
+
* graph/storage side effects: buffer in → markdown out, deterministic, no LLM.
|
|
7
|
+
* mammoth extracts semantic HTML; turndown renders it; the rules below handle
|
|
8
|
+
* the structures Word leans on that plain turndown / GFM otherwise mangle:
|
|
9
|
+
*
|
|
10
|
+
* - Images are DROPPED (mammoth would otherwise inline multi-hundred-KB base64
|
|
11
|
+
* `data:` URIs straight into the body).
|
|
12
|
+
* - Tables: Word emits `<td>` for EVERY cell (never `<th>`) and uses tables for
|
|
13
|
+
* LAYOUT as much as for data, so neither plain turndown nor turndown-plugin-
|
|
14
|
+
* gfm handles them (gfm only fires on `<th>` heading rows; everything else it
|
|
15
|
+
* keeps as raw HTML). We classify each table by SHAPE and render accordingly:
|
|
16
|
+
* • clean rectangular grid (no merged cells), every cell single-line → a
|
|
17
|
+
* real GFM markdown table (row 1 as the header) — e.g. a Fees/Schedule.
|
|
18
|
+
* • 2-column that reads as section layout (short left LABEL + substantial
|
|
19
|
+
* right BODY in most rows) → left cell becomes a `##` heading, right its
|
|
20
|
+
* body — e.g. "Assignment | …".
|
|
21
|
+
* • 2-column that reads as data (short values both sides) → `label: value`
|
|
22
|
+
* pairs, so the row relationship survives (not a wall of paragraphs).
|
|
23
|
+
* • anything else → flatten: each cell its own block.
|
|
24
|
+
* A cell's inner table is converted independently (nested tables recurse, up
|
|
25
|
+
* to a depth cap); `colspan`/`rowspan` force the flatten path since they
|
|
26
|
+
* break the clean-grid assumption GFM + the heading layout rely on.
|
|
27
|
+
* - Word wraps ordered lists as `<ul><li><ol>…</ol></li></ul>` (a bullet whose
|
|
28
|
+
* only child is a list); that LI is unwrapped so it doesn't render as a
|
|
29
|
+
* spurious "* 1." double marker.
|
|
30
|
+
* - Turndown's backslash escaping of `[ ] _` is relaxed for reading text
|
|
31
|
+
* (placeholders, signature underscore runs), but ONLY outside code spans /
|
|
32
|
+
* fenced blocks so literal code is never rewritten.
|
|
33
|
+
*/
|
|
34
|
+
import TurndownService from 'turndown';
|
|
35
|
+
/** Left-cell text longer than this isn't treated as a section label (so the
|
|
36
|
+
* side-by-side signature block, whose cells are long, flattens instead). */
|
|
37
|
+
const MAX_LABEL_LEN = 60;
|
|
38
|
+
/** Nested-table recursion cap — past this, a table is emitted as plain text
|
|
39
|
+
* rather than recursing further (guards pathological deeply-nested docs). */
|
|
40
|
+
const MAX_TABLE_DEPTH = 8;
|
|
41
|
+
export async function convertDocxToMarkdown(buffer) {
|
|
42
|
+
const mammoth = await import('mammoth');
|
|
43
|
+
const { value: html } = await mammoth.convertToHtml({ buffer },
|
|
44
|
+
// Drop embedded images entirely (no base64 src reaches turndown).
|
|
45
|
+
{ convertImage: mammoth.images.imgElement(() => Promise.resolve({ src: '' })) });
|
|
46
|
+
const md = buildTurndown().turndown(html ?? '');
|
|
47
|
+
return cleanup(md);
|
|
48
|
+
}
|
|
49
|
+
function buildTurndown() {
|
|
50
|
+
const turndown = new TurndownService({ headingStyle: 'atx', codeBlockStyle: 'fenced' });
|
|
51
|
+
// Emit nothing for any <img> (convertImage already stripped the base64 src;
|
|
52
|
+
// this drops the element so no empty `![]()` litters the body).
|
|
53
|
+
turndown.addRule('dropImages', { filter: 'img', replacement: () => '' });
|
|
54
|
+
// Word wraps ordered lists as <ul><li><ol>…</ol></li></ul>. Unwrap a list item
|
|
55
|
+
// whose ONLY child is a nested list so it emits just the inner list (no leading
|
|
56
|
+
// "* " bullet stacked on the "1." marker).
|
|
57
|
+
turndown.addRule('unwrapNestedListItem', {
|
|
58
|
+
filter: (node) => node.nodeName === 'LI' && onlyChildIsList(node),
|
|
59
|
+
replacement: (content) => content,
|
|
60
|
+
});
|
|
61
|
+
// Tables: walk the DOM directly and convert each cell with a nested turndown
|
|
62
|
+
// pass, so one rule can choose a GFM grid, a heading/label layout, or a block
|
|
63
|
+
// flatten per table (see module doc). Returning the whole table from here also
|
|
64
|
+
// short-circuits turndown's per-cell processing, so no `<table>` HTML leaks.
|
|
65
|
+
// `depth` bounds the nested-turndown recursion: each table-rule entry is one
|
|
66
|
+
// level, so a table-in-a-cell-in-a-table can't recurse without bound.
|
|
67
|
+
let depth = 0;
|
|
68
|
+
turndown.addRule('table', {
|
|
69
|
+
filter: 'table',
|
|
70
|
+
replacement: (_content, node) => {
|
|
71
|
+
const table = node;
|
|
72
|
+
if (depth >= MAX_TABLE_DEPTH) {
|
|
73
|
+
return `\n\n${(table.textContent ?? '').trim()}\n\n`;
|
|
74
|
+
}
|
|
75
|
+
depth++;
|
|
76
|
+
try {
|
|
77
|
+
// `depth` (1 = top-level, 2 = nested in a cell, …) sets heading level so
|
|
78
|
+
// a nested table's section labels sit UNDER their parent, not as peers.
|
|
79
|
+
return `\n\n${renderTable(table, turndown, depth)}\n\n`;
|
|
80
|
+
}
|
|
81
|
+
finally {
|
|
82
|
+
depth--;
|
|
83
|
+
}
|
|
84
|
+
},
|
|
85
|
+
});
|
|
86
|
+
return turndown;
|
|
87
|
+
}
|
|
88
|
+
/** True for a list item whose only meaningful child is a nested <ol>/<ul>
|
|
89
|
+
* (ignoring whitespace-only text nodes) — Word's ordered-list wrapper shape. */
|
|
90
|
+
function onlyChildIsList(li) {
|
|
91
|
+
const meaningful = Array.from(li.childNodes).filter((n) => !(n.nodeType === 3 && !(n.textContent ?? '').trim()));
|
|
92
|
+
return (meaningful.length === 1 &&
|
|
93
|
+
(meaningful[0].nodeName === 'OL' || meaningful[0].nodeName === 'UL'));
|
|
94
|
+
}
|
|
95
|
+
/** This table's DIRECT rows only — `<tr>` that are direct children or one level
|
|
96
|
+
* under `<thead>/<tbody>/<tfoot>`. Never descends into a cell, so a nested
|
|
97
|
+
* table's rows stay with the nested table (DOM `.rows` wrongly includes them). */
|
|
98
|
+
function directRows(table) {
|
|
99
|
+
const out = [];
|
|
100
|
+
for (const child of Array.from(table.childNodes)) {
|
|
101
|
+
if (child.nodeName === 'TR')
|
|
102
|
+
out.push(child);
|
|
103
|
+
else if (['THEAD', 'TBODY', 'TFOOT'].includes(child.nodeName)) {
|
|
104
|
+
for (const tr of Array.from(child.childNodes)) {
|
|
105
|
+
if (tr.nodeName === 'TR')
|
|
106
|
+
out.push(tr);
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
return out;
|
|
111
|
+
}
|
|
112
|
+
/** A row's DIRECT cells — `<td>/<th>` children of this `<tr>` (a nested table's
|
|
113
|
+
* cells belong to its own rows, never directly to this one). */
|
|
114
|
+
function directCells(row) {
|
|
115
|
+
return Array.from(row.childNodes).filter((n) => n.nodeName === 'TD' || n.nodeName === 'TH');
|
|
116
|
+
}
|
|
117
|
+
/** A cell that spans multiple columns/rows. Merged cells break the rectangular
|
|
118
|
+
* assumption GFM + the 2-col layout rely on, so a table with any forces flatten. */
|
|
119
|
+
function cellSpans(cell) {
|
|
120
|
+
const col = Number(cell.getAttribute?.('colspan') ?? '1') || 1;
|
|
121
|
+
const row = Number(cell.getAttribute?.('rowspan') ?? '1') || 1;
|
|
122
|
+
return col > 1 || row > 1;
|
|
123
|
+
}
|
|
124
|
+
/** Convert one table to markdown by shape. `td`/`th` content is produced by a
|
|
125
|
+
* nested turndown pass (so nested lists/paragraphs/tables come through).
|
|
126
|
+
* `depth` (1 = top-level) sets the heading level for the section-layout path. */
|
|
127
|
+
function renderTable(table, turndown, depth) {
|
|
128
|
+
const rowNodes = directRows(table);
|
|
129
|
+
const spanned = rowNodes.some((r) => directCells(r).some(cellSpans));
|
|
130
|
+
const rows = rowNodes.map((r) => directCells(r).map((c) => turndown.turndown(c.innerHTML).trim()));
|
|
131
|
+
if (!rows.length)
|
|
132
|
+
return '';
|
|
133
|
+
const cols = rows[0].length;
|
|
134
|
+
const uniform = rows.every((r) => r.length === cols);
|
|
135
|
+
const anyMultiline = rows.some((r) => r.some((c) => c.includes('\n')));
|
|
136
|
+
// 1) Clean rectangular grid of single-line cells → a real GFM table (row 1 =
|
|
137
|
+
// header). Merged cells (`spanned`) skip this — the grid isn't rectangular.
|
|
138
|
+
if (!spanned && uniform && rows.length >= 2 && cols >= 2 && !anyMultiline) {
|
|
139
|
+
return renderGfmTable(rows);
|
|
140
|
+
}
|
|
141
|
+
// 2) Two-column table. Section layout (short LABEL + substantial BODY in most
|
|
142
|
+
// rows) → headings; otherwise data → `label: value`. Merged cells fall
|
|
143
|
+
// through to flatten.
|
|
144
|
+
if (!spanned && uniform && cols === 2) {
|
|
145
|
+
const isSection = (row) => isLabel(row[0]) && isSubstantial(row[1]);
|
|
146
|
+
if (rows.filter(isSection).length >= Math.ceil(rows.length / 2)) {
|
|
147
|
+
// Heading level tracks nesting depth (## top-level, ### one level in, …),
|
|
148
|
+
// so a nested table's labels read as children, not peers of the document's
|
|
149
|
+
// top sections.
|
|
150
|
+
const h = '#'.repeat(Math.min(depth + 1, 6));
|
|
151
|
+
// Drop a leading column-header row (e.g. "Phases | Deliverables") when every
|
|
152
|
+
// BODY row is section-like — it's a table header, noise once headingized.
|
|
153
|
+
const body = rows.length > 1 && !isSection(rows[0]) && rows.slice(1).every(isSection)
|
|
154
|
+
? rows.slice(1)
|
|
155
|
+
: rows;
|
|
156
|
+
return body
|
|
157
|
+
.map((row) => isSection(row)
|
|
158
|
+
? `${h} ${headingLabel(row[0])}\n\n${row[1]}`
|
|
159
|
+
: row.filter(Boolean).join('\n\n'))
|
|
160
|
+
.join('\n\n');
|
|
161
|
+
}
|
|
162
|
+
return rows
|
|
163
|
+
.map(([left, right]) => isLabel(left) && right
|
|
164
|
+
? `${inlineText(left)}: ${inlineText(right)}`
|
|
165
|
+
: [left, right].filter(Boolean).join('\n\n'))
|
|
166
|
+
.join('\n\n');
|
|
167
|
+
}
|
|
168
|
+
// 3) Anything else → flatten: each non-empty cell as its own block.
|
|
169
|
+
return rows.flat().filter(Boolean).join('\n\n');
|
|
170
|
+
}
|
|
171
|
+
function renderGfmTable(rows) {
|
|
172
|
+
const cell = (s) => s.replace(/\|/g, '\\|').replace(/\n+/g, ' ').trim();
|
|
173
|
+
const line = (cells) => `| ${cells.map(cell).join(' | ')} |`;
|
|
174
|
+
const [header, ...body] = rows;
|
|
175
|
+
return [
|
|
176
|
+
line(header),
|
|
177
|
+
`| ${header.map(() => '---').join(' | ')} |`,
|
|
178
|
+
...body.map(line),
|
|
179
|
+
].join('\n');
|
|
180
|
+
}
|
|
181
|
+
/** Collapse a cell's markdown to a single line (for headings / value cells). */
|
|
182
|
+
function inlineText(md) {
|
|
183
|
+
return md.replace(/\s*\n+\s*/g, ' ').trim();
|
|
184
|
+
}
|
|
185
|
+
/** A short, single-line cell that can act as a section label / key. */
|
|
186
|
+
function isLabel(cell) {
|
|
187
|
+
return !!cell && !cell.includes('\n') && cell.length <= MAX_LABEL_LEN;
|
|
188
|
+
}
|
|
189
|
+
/** A cell substantial enough to be a section BODY (not a short data value):
|
|
190
|
+
* multi-line, long, or a full sentence. Keeps a 2-col DATA table from turning
|
|
191
|
+
* every left value into a heading. */
|
|
192
|
+
function isSubstantial(cell) {
|
|
193
|
+
return cell.includes('\n') || cell.length >= 40 || /[.!?](\s|$)/.test(cell);
|
|
194
|
+
}
|
|
195
|
+
/** A section label for a heading: single line, with one layer of surrounding
|
|
196
|
+
* bold/italic stripped (Word styles the label; the `##` already conveys it, so
|
|
197
|
+
* `**Project Scope**` → `Project Scope`, `_Phases_` → `Phases`). */
|
|
198
|
+
function headingLabel(md) {
|
|
199
|
+
return inlineText(md)
|
|
200
|
+
.replace(/^\*\*(.+?)\*\*$/, '$1')
|
|
201
|
+
.replace(/^\*(.+?)\*$/, '$1')
|
|
202
|
+
.replace(/^_(.+?)_$/, '$1')
|
|
203
|
+
.trim();
|
|
204
|
+
}
|
|
205
|
+
/** Reading-text escape cleanup: turndown escapes `[ ] _` to protect markdown
|
|
206
|
+
* syntax, which litters placeholders (`\[MSA date\]`) and signature lines
|
|
207
|
+
* (`By: \_\_\_…`). Unescape those and collapse a long underscore run to a
|
|
208
|
+
* short rule — but ONLY outside code spans / fenced blocks, so literal code
|
|
209
|
+
* (snake_case, `a____b`, escaped brackets) is never rewritten. */
|
|
210
|
+
function cleanup(md) {
|
|
211
|
+
// Split on code regions (fenced blocks first, then inline spans); transform
|
|
212
|
+
// only the prose between them, re-emitting code verbatim.
|
|
213
|
+
const codeRegion = /(```[\s\S]*?```|`[^`\n]*`)/g;
|
|
214
|
+
let out = '';
|
|
215
|
+
let last = 0;
|
|
216
|
+
for (const m of md.matchAll(codeRegion)) {
|
|
217
|
+
out += unescapeProse(md.slice(last, m.index));
|
|
218
|
+
out += m[0];
|
|
219
|
+
last = (m.index ?? 0) + m[0].length;
|
|
220
|
+
}
|
|
221
|
+
out += unescapeProse(md.slice(last));
|
|
222
|
+
return out.replace(/\n{3,}/g, '\n\n').trim();
|
|
223
|
+
}
|
|
224
|
+
function unescapeProse(s) {
|
|
225
|
+
return s
|
|
226
|
+
// A run of 6+ underscores (escaped or not) — a signature line → short rule.
|
|
227
|
+
// 6+ (not 4+) so it can't catch a stray escaped pair in ordinary prose.
|
|
228
|
+
.replace(/(?:\\?_){6,}/g, '______')
|
|
229
|
+
// Unescape the punctuation turndown guards that only adds noise to reading
|
|
230
|
+
// text (brackets around placeholders, stray underscores).
|
|
231
|
+
.replace(/\\([[\]_])/g, '$1');
|
|
232
|
+
}
|
|
233
|
+
//# sourceMappingURL=docx.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"docx.js","sourceRoot":"","sources":["../../../src/services/extract/docx.ts"],"names":[],"mappings":"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"}
|