studiograph 1.3.48-next.2 → 1.3.48-next.200
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +26 -16
- package/dist/agent/agent-pool.d.ts +117 -0
- package/dist/agent/agent-pool.js +287 -0
- package/dist/agent/agent-pool.js.map +1 -0
- package/dist/agent/followups.d.ts +34 -0
- package/dist/agent/followups.js +52 -0
- package/dist/agent/followups.js.map +1 -0
- package/dist/agent/orchestrator.d.ts +113 -22
- package/dist/agent/orchestrator.js +574 -181
- package/dist/agent/orchestrator.js.map +1 -1
- package/dist/agent/prompts/entity-types-section.d.ts +42 -0
- package/dist/agent/prompts/entity-types-section.js +96 -0
- package/dist/agent/prompts/entity-types-section.js.map +1 -0
- package/dist/agent/prompts/system.md +147 -69
- package/dist/agent/skill-loader.d.ts +30 -17
- package/dist/agent/skill-loader.js +63 -30
- package/dist/agent/skill-loader.js.map +1 -1
- package/dist/agent/skills/entity-schema.md +77 -433
- package/dist/agent/skills/interview/entity-templates.md +193 -0
- package/dist/agent/skills/interview/question-domains.md +391 -0
- package/dist/agent/skills/interview/skill.md +204 -0
- package/dist/agent/skills/schema-rules.md +54 -0
- package/dist/agent/tools/capture-tools.d.ts +31 -0
- package/dist/agent/tools/capture-tools.js +40 -0
- package/dist/agent/tools/capture-tools.js.map +1 -0
- package/dist/agent/tools/folder-tools.d.ts +47 -0
- package/dist/agent/tools/folder-tools.js +249 -0
- package/dist/agent/tools/folder-tools.js.map +1 -0
- package/dist/agent/tools/fs-tools.d.ts +7 -6
- package/dist/agent/tools/fs-tools.js +5 -4
- package/dist/agent/tools/fs-tools.js.map +1 -1
- package/dist/agent/tools/graph-tools.d.ts +21 -58
- package/dist/agent/tools/graph-tools.js +673 -333
- package/dist/agent/tools/graph-tools.js.map +1 -1
- package/dist/agent/tools/history-tools.d.ts +95 -0
- package/dist/agent/tools/history-tools.js +461 -0
- package/dist/agent/tools/history-tools.js.map +1 -0
- package/dist/agent/tools/load-skill.d.ts +6 -5
- package/dist/agent/tools/load-skill.js +3 -3
- package/dist/agent/tools/load-skill.js.map +1 -1
- package/dist/agent/tools/ops-tools.d.ts +5 -4
- package/dist/agent/tools/ops-tools.js +130 -236
- package/dist/agent/tools/ops-tools.js.map +1 -1
- package/dist/agent/tools/permission-tools.d.ts +87 -17
- package/dist/agent/tools/permission-tools.js +233 -38
- package/dist/agent/tools/permission-tools.js.map +1 -1
- package/dist/agent/tools/tool-loader.js +5 -4
- package/dist/agent/tools/tool-loader.js.map +1 -1
- package/dist/agent/tools/web-tools.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 +186 -0
- package/dist/cli/commands/admin/folder.js.map +1 -0
- package/dist/cli/commands/admin/index.d.ts +16 -0
- package/dist/cli/commands/admin/index.js +46 -0
- package/dist/cli/commands/admin/index.js.map +1 -0
- package/dist/cli/commands/admin/migrate-assets.d.ts +53 -0
- package/dist/cli/commands/admin/migrate-assets.js +184 -0
- package/dist/cli/commands/admin/migrate-assets.js.map +1 -0
- package/dist/cli/commands/admin/migrate.d.ts +56 -0
- package/dist/cli/commands/admin/migrate.js +263 -0
- package/dist/cli/commands/admin/migrate.js.map +1 -0
- package/dist/cli/commands/admin/restore.d.ts +24 -0
- package/dist/cli/commands/admin/restore.js +228 -0
- package/dist/cli/commands/admin/restore.js.map +1 -0
- package/dist/cli/commands/admin/secrets.d.ts +23 -0
- package/dist/cli/commands/admin/secrets.js +256 -0
- package/dist/cli/commands/admin/secrets.js.map +1 -0
- package/dist/cli/commands/admin/settings.d.ts +28 -0
- package/dist/cli/commands/admin/settings.js +284 -0
- package/dist/cli/commands/admin/settings.js.map +1 -0
- package/dist/cli/commands/admin/token.d.ts +42 -0
- package/dist/cli/commands/admin/token.js +126 -0
- package/dist/cli/commands/admin/token.js.map +1 -0
- package/dist/cli/commands/admin/transfer-ownership.d.ts +15 -0
- package/dist/cli/commands/admin/transfer-ownership.js +106 -0
- package/dist/cli/commands/admin/transfer-ownership.js.map +1 -0
- package/dist/cli/commands/admin/user.d.ts +11 -0
- package/dist/cli/commands/admin/user.js +187 -0
- package/dist/cli/commands/admin/user.js.map +1 -0
- package/dist/cli/commands/clone.d.ts +25 -3
- package/dist/cli/commands/clone.js +142 -36
- package/dist/cli/commands/clone.js.map +1 -1
- package/dist/cli/commands/commit.d.ts +1 -1
- package/dist/cli/commands/commit.js +24 -11
- package/dist/cli/commands/commit.js.map +1 -1
- package/dist/cli/commands/config.d.ts +23 -107
- package/dist/cli/commands/config.js +52 -260
- package/dist/cli/commands/config.js.map +1 -1
- package/dist/cli/commands/connector.d.ts +10 -13
- package/dist/cli/commands/connector.js +16 -58
- package/dist/cli/commands/connector.js.map +1 -1
- package/dist/cli/commands/deploy.js +215 -68
- package/dist/cli/commands/deploy.js.map +1 -1
- package/dist/cli/commands/index.js +2 -2
- package/dist/cli/commands/index.js.map +1 -1
- package/dist/cli/commands/init.js +10 -30
- package/dist/cli/commands/init.js.map +1 -1
- package/dist/cli/commands/mcp.js +12 -4
- package/dist/cli/commands/mcp.js.map +1 -1
- package/dist/cli/commands/orphans.js +14 -30
- package/dist/cli/commands/orphans.js.map +1 -1
- package/dist/cli/commands/r2.d.ts +3 -0
- package/dist/cli/commands/r2.js +223 -204
- package/dist/cli/commands/r2.js.map +1 -1
- package/dist/cli/commands/redeploy.js +65 -12
- package/dist/cli/commands/redeploy.js.map +1 -1
- package/dist/cli/commands/reset.d.ts +22 -6
- package/dist/cli/commands/reset.js +142 -63
- package/dist/cli/commands/reset.js.map +1 -1
- package/dist/cli/commands/serve.js +218 -24
- package/dist/cli/commands/serve.js.map +1 -1
- package/dist/cli/commands/sync.d.ts +1 -1
- package/dist/cli/commands/sync.js +372 -202
- package/dist/cli/commands/sync.js.map +1 -1
- package/dist/cli/crypto-bundle.d.ts +39 -0
- package/dist/cli/crypto-bundle.js +94 -0
- package/dist/cli/crypto-bundle.js.map +1 -0
- package/dist/cli/index.js +24 -35
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/railway-pin.d.ts +68 -0
- package/dist/cli/railway-pin.js +96 -0
- package/dist/cli/railway-pin.js.map +1 -0
- package/dist/cli/railway-provisioning.d.ts +53 -0
- package/dist/cli/railway-provisioning.js +85 -0
- package/dist/cli/railway-provisioning.js.map +1 -0
- package/dist/cli/setup-wizard.d.ts +33 -52
- package/dist/cli/setup-wizard.js +43 -68
- package/dist/cli/setup-wizard.js.map +1 -1
- package/dist/core/accent-palette.d.ts +22 -0
- package/dist/core/accent-palette.js +47 -0
- package/dist/core/accent-palette.js.map +1 -0
- package/dist/core/cell-anchor.d.ts +29 -0
- package/dist/core/cell-anchor.js +53 -0
- package/dist/core/cell-anchor.js.map +1 -0
- package/dist/core/comment-anchor.d.ts +41 -0
- package/dist/core/comment-anchor.js +147 -0
- package/dist/core/comment-anchor.js.map +1 -0
- package/dist/core/commit-messages.d.ts +57 -0
- package/dist/core/commit-messages.js +85 -0
- package/dist/core/commit-messages.js.map +1 -0
- package/dist/core/embeds.d.ts +77 -0
- package/dist/core/embeds.js +147 -0
- package/dist/core/embeds.js.map +1 -0
- package/dist/core/entity-body-templates.d.ts +21 -0
- package/dist/core/entity-body-templates.js +53 -0
- package/dist/core/entity-body-templates.js.map +1 -0
- package/dist/core/entity-types-catalog.d.ts +65 -0
- package/dist/core/entity-types-catalog.js +142 -0
- package/dist/core/entity-types-catalog.js.map +1 -0
- package/dist/core/folder-paths.d.ts +41 -0
- package/dist/core/folder-paths.js +95 -0
- package/dist/core/folder-paths.js.map +1 -0
- package/dist/core/folder-sidecar.d.ts +36 -0
- package/dist/core/folder-sidecar.js +91 -0
- package/dist/core/folder-sidecar.js.map +1 -0
- package/dist/core/format-registry.d.ts +170 -0
- package/dist/core/format-registry.js +404 -0
- package/dist/core/format-registry.js.map +1 -0
- package/dist/core/graph.d.ts +731 -14
- package/dist/core/graph.js +2238 -313
- 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 +82 -0
- package/dist/core/schema-registry.js +238 -0
- package/dist/core/schema-registry.js.map +1 -1
- package/dist/core/schemas/connector.d.ts +67 -0
- package/dist/core/schemas/connector.js +100 -0
- package/dist/core/schemas/connector.js.map +1 -0
- package/dist/core/schemas/workspace.d.ts +122 -0
- package/dist/core/schemas/workspace.js +211 -0
- package/dist/core/schemas/workspace.js.map +1 -0
- package/dist/core/secrets/SecretStore.d.ts +77 -0
- package/dist/core/secrets/SecretStore.js +13 -0
- package/dist/core/secrets/SecretStore.js.map +1 -0
- package/dist/core/secrets/SettingsResolver.d.ts +54 -0
- package/dist/core/secrets/SettingsResolver.js +80 -0
- package/dist/core/secrets/SettingsResolver.js.map +1 -0
- package/dist/core/secrets/SettingsStore.d.ts +30 -0
- package/dist/core/secrets/SettingsStore.js +9 -0
- package/dist/core/secrets/SettingsStore.js.map +1 -0
- package/dist/core/secrets/SqliteEncryptedStore.d.ts +90 -0
- package/dist/core/secrets/SqliteEncryptedStore.js +598 -0
- package/dist/core/secrets/SqliteEncryptedStore.js.map +1 -0
- package/dist/core/secrets/audit.d.ts +36 -0
- package/dist/core/secrets/audit.js +60 -0
- package/dist/core/secrets/audit.js.map +1 -0
- package/dist/core/secrets/auth-db-migration.d.ts +129 -0
- package/dist/core/secrets/auth-db-migration.js +653 -0
- package/dist/core/secrets/auth-db-migration.js.map +1 -0
- package/dist/core/secrets/bundle.d.ts +141 -0
- package/dist/core/secrets/bundle.js +435 -0
- package/dist/core/secrets/bundle.js.map +1 -0
- package/dist/core/secrets/dual-write.d.ts +81 -0
- package/dist/core/secrets/dual-write.js +247 -0
- package/dist/core/secrets/dual-write.js.map +1 -0
- package/dist/core/secrets/encryption.d.ts +44 -0
- package/dist/core/secrets/encryption.js +97 -0
- package/dist/core/secrets/encryption.js.map +1 -0
- package/dist/core/secrets/index.d.ts +49 -0
- package/dist/core/secrets/index.js +74 -0
- package/dist/core/secrets/index.js.map +1 -0
- package/dist/core/secrets/master-key.d.ts +38 -0
- package/dist/core/secrets/master-key.js +122 -0
- package/dist/core/secrets/master-key.js.map +1 -0
- package/dist/core/secrets/probes/anthropic.d.ts +98 -0
- package/dist/core/secrets/probes/anthropic.js +300 -0
- package/dist/core/secrets/probes/anthropic.js.map +1 -0
- package/dist/core/secrets/probes/brave.d.ts +9 -0
- package/dist/core/secrets/probes/brave.js +15 -0
- package/dist/core/secrets/probes/brave.js.map +1 -0
- package/dist/core/secrets/probes/r2.d.ts +15 -0
- package/dist/core/secrets/probes/r2.js +14 -0
- package/dist/core/secrets/probes/r2.js.map +1 -0
- package/dist/core/secrets/probes/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 +80 -475
- package/dist/core/types.js +27 -3
- package/dist/core/types.js.map +1 -1
- package/dist/core/user-config.d.ts +75 -7
- package/dist/core/user-config.js +155 -7
- package/dist/core/user-config.js.map +1 -1
- package/dist/core/validation.d.ts +767 -1777
- package/dist/core/validation.js +463 -227
- package/dist/core/validation.js.map +1 -1
- package/dist/core/workspace-manager.d.ts +89 -12
- package/dist/core/workspace-manager.js +225 -73
- package/dist/core/workspace-manager.js.map +1 -1
- package/dist/core/workspace.d.ts +19 -5
- package/dist/core/workspace.js +69 -35
- package/dist/core/workspace.js.map +1 -1
- package/dist/mcp/comment-virtual-entity.d.ts +36 -0
- package/dist/mcp/comment-virtual-entity.js +71 -0
- package/dist/mcp/comment-virtual-entity.js.map +1 -0
- package/dist/mcp/connector-manager.d.ts +94 -13
- package/dist/mcp/connector-manager.js +283 -62
- package/dist/mcp/connector-manager.js.map +1 -1
- package/dist/mcp/oauth-provider.d.ts +27 -33
- package/dist/mcp/oauth-provider.js +65 -134
- package/dist/mcp/oauth-provider.js.map +1 -1
- package/dist/mcp/oauth-registry.d.ts +62 -0
- package/dist/mcp/oauth-registry.js +85 -0
- package/dist/mcp/oauth-registry.js.map +1 -0
- package/dist/mcp/server.d.ts +11 -3
- package/dist/mcp/server.js +30 -5
- package/dist/mcp/server.js.map +1 -1
- package/dist/mcp/state-signer.d.ts +62 -0
- package/dist/mcp/state-signer.js +205 -0
- package/dist/mcp/state-signer.js.map +1 -0
- package/dist/mcp/tools.d.ts +35 -2
- package/dist/mcp/tools.js +1366 -112
- 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/asset-index-queue.d.ts +96 -0
- package/dist/server/asset-index-queue.js +191 -0
- package/dist/server/asset-index-queue.js.map +1 -0
- package/dist/server/body-write-coordinator.d.ts +151 -0
- package/dist/server/body-write-coordinator.js +161 -0
- package/dist/server/body-write-coordinator.js.map +1 -0
- package/dist/server/cloud-billing-flow.d.ts +32 -0
- package/dist/server/cloud-billing-flow.js +75 -0
- package/dist/server/cloud-billing-flow.js.map +1 -0
- package/dist/server/commit-audit.d.ts +26 -0
- package/dist/server/commit-audit.js +30 -0
- package/dist/server/commit-audit.js.map +1 -0
- package/dist/server/index.d.ts +22 -3
- package/dist/server/index.js +622 -198
- package/dist/server/index.js.map +1 -1
- package/dist/server/middleware/sanitize.d.ts +46 -0
- package/dist/server/middleware/sanitize.js +171 -0
- package/dist/server/middleware/sanitize.js.map +1 -0
- package/dist/server/routes/asset-api.d.ts +31 -0
- package/dist/server/routes/asset-api.js +593 -0
- package/dist/server/routes/asset-api.js.map +1 -0
- package/dist/server/routes/audit-api.d.ts +24 -0
- package/dist/server/routes/audit-api.js +117 -0
- package/dist/server/routes/audit-api.js.map +1 -0
- package/dist/server/routes/auth-api.d.ts +3 -2
- package/dist/server/routes/auth-api.js +573 -39
- package/dist/server/routes/auth-api.js.map +1 -1
- package/dist/server/routes/capture-api.d.ts +18 -0
- package/dist/server/routes/capture-api.js +257 -0
- package/dist/server/routes/capture-api.js.map +1 -0
- package/dist/server/routes/chat-sessions-api.d.ts +9 -0
- package/dist/server/routes/chat-sessions-api.js +121 -0
- package/dist/server/routes/chat-sessions-api.js.map +1 -0
- package/dist/server/routes/chat.d.ts +12 -1
- package/dist/server/routes/chat.js +318 -88
- package/dist/server/routes/chat.js.map +1 -1
- package/dist/server/routes/comments-api.d.ts +15 -0
- package/dist/server/routes/comments-api.js +444 -0
- package/dist/server/routes/comments-api.js.map +1 -0
- package/dist/server/routes/config-api.d.ts +21 -0
- package/dist/server/routes/config-api.js +256 -0
- package/dist/server/routes/config-api.js.map +1 -0
- package/dist/server/routes/connectors-api.d.ts +17 -0
- package/dist/server/routes/connectors-api.js +410 -0
- package/dist/server/routes/connectors-api.js.map +1 -0
- package/dist/server/routes/event-ingest-api.d.ts +15 -0
- package/dist/server/routes/event-ingest-api.js +125 -0
- package/dist/server/routes/event-ingest-api.js.map +1 -0
- package/dist/server/routes/git-http.d.ts +3 -3
- package/dist/server/routes/git-http.js +86 -38
- package/dist/server/routes/git-http.js.map +1 -1
- package/dist/server/routes/graph-api-access.d.ts +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 +1519 -263
- package/dist/server/routes/graph-api.js.map +1 -1
- package/dist/server/routes/health.d.ts +18 -0
- package/dist/server/routes/health.js +74 -0
- package/dist/server/routes/health.js.map +1 -0
- package/dist/server/routes/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 +384 -38
- package/dist/server/routes/insights-api.js.map +1 -1
- package/dist/server/routes/mcp.d.ts +7 -3
- package/dist/server/routes/mcp.js +22 -6
- package/dist/server/routes/mcp.js.map +1 -1
- package/dist/server/routes/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 -30
- package/dist/server/routes/permissions-api.js.map +1 -1
- package/dist/server/routes/r2-api.d.ts +25 -0
- package/dist/server/routes/r2-api.js +276 -0
- package/dist/server/routes/r2-api.js.map +1 -0
- package/dist/server/routes/secrets-api.d.ts +36 -0
- package/dist/server/routes/secrets-api.js +308 -0
- package/dist/server/routes/secrets-api.js.map +1 -0
- package/dist/server/routes/settings-api.d.ts +29 -0
- package/dist/server/routes/settings-api.js +180 -0
- package/dist/server/routes/settings-api.js.map +1 -0
- package/dist/server/routes/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/url-api.d.ts +7 -0
- package/dist/server/routes/url-api.js +74 -0
- package/dist/server/routes/url-api.js.map +1 -0
- package/dist/server/routes/views-api.js +75 -7
- package/dist/server/routes/views-api.js.map +1 -1
- package/dist/server/routes/workspace-api.d.ts +2 -1
- package/dist/server/routes/workspace-api.js +129 -35
- package/dist/server/routes/workspace-api.js.map +1 -1
- package/dist/server/routes/ws.d.ts +2 -1
- package/dist/server/routes/ws.js +68 -16
- package/dist/server/routes/ws.js.map +1 -1
- package/dist/server/session-manager.d.ts +48 -5
- package/dist/server/session-manager.js +182 -15
- package/dist/server/session-manager.js.map +1 -1
- package/dist/server/ws-hub.d.ts +138 -14
- package/dist/server/ws-hub.js +0 -0
- package/dist/server/ws-hub.js.map +1 -1
- package/dist/server/yjs-manager.d.ts +285 -7
- package/dist/server/yjs-manager.js +907 -36
- package/dist/server/yjs-manager.js.map +1 -1
- package/dist/server/yjs-persistence.d.ts +165 -0
- package/dist/server/yjs-persistence.js +557 -0
- package/dist/server/yjs-persistence.js.map +1 -0
- package/dist/server/yjs-text-diff.d.ts +32 -0
- package/dist/server/yjs-text-diff.js +61 -0
- package/dist/server/yjs-text-diff.js.map +1 -0
- package/dist/services/access-control.d.ts +73 -0
- package/dist/services/access-control.js +165 -0
- package/dist/services/access-control.js.map +1 -0
- package/dist/services/asset-caption-service.d.ts +102 -0
- package/dist/services/asset-caption-service.js +184 -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 +205 -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 +92 -0
- package/dist/services/asset-index-sweep.js +258 -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 +30 -0
- package/dist/services/asset-sidecar-service.js +96 -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 +74 -0
- package/dist/services/asset-upload-service.js +244 -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 +118 -1
- package/dist/services/assets/base.js +77 -1
- package/dist/services/assets/base.js.map +1 -1
- package/dist/services/assets/index.d.ts +103 -1
- package/dist/services/assets/index.js +192 -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 +350 -36
- package/dist/services/auth-service.js +1179 -140
- package/dist/services/auth-service.js.map +1 -1
- package/dist/services/bookmark-import-service.d.ts +49 -0
- package/dist/services/bookmark-import-service.js +250 -0
- package/dist/services/bookmark-import-service.js.map +1 -0
- package/dist/services/chat-session-service.d.ts +96 -0
- package/dist/services/chat-session-service.js +316 -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/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 +210 -0
- package/dist/services/entity-mutations.js +377 -0
- package/dist/services/entity-mutations.js.map +1 -0
- package/dist/services/event-processor.d.ts +104 -0
- package/dist/services/event-processor.js +441 -0
- package/dist/services/event-processor.js.map +1 -0
- package/dist/services/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 +54 -0
- package/dist/services/git.js +188 -54
- package/dist/services/git.js.map +1 -1
- package/dist/services/graph-maintenance.d.ts +42 -0
- package/dist/services/graph-maintenance.js +143 -0
- package/dist/services/graph-maintenance.js.map +1 -0
- package/dist/services/import-service.d.ts +58 -3
- package/dist/services/import-service.js +316 -100
- 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/memory-service.d.ts +22 -14
- package/dist/services/memory-service.js +53 -35
- package/dist/services/memory-service.js.map +1 -1
- package/dist/services/mention-detector.d.ts +23 -0
- package/dist/services/mention-detector.js +47 -0
- package/dist/services/mention-detector.js.map +1 -0
- package/dist/services/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/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 +260 -6
- package/dist/services/vector-service.js +574 -31
- 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.BZHoBJEc.css +2 -0
- package/dist/web/_app/immutable/assets/12.DlIf1mKh.css +1 -0
- package/dist/web/_app/immutable/assets/13.7d-Q37wc.css +1 -0
- package/dist/web/_app/immutable/assets/14.BwBFdc1D.css +1 -0
- package/dist/web/_app/immutable/assets/15.CmLrbzZp.css +1 -0
- package/dist/web/_app/immutable/assets/16.B0GwXar3.css +1 -0
- package/dist/web/_app/immutable/assets/2.C9Vt4JHy.css +1 -0
- package/dist/web/_app/immutable/assets/3.BFvgCYSk.css +1 -0
- package/dist/web/_app/immutable/assets/4.B5mExQRc.css +1 -0
- package/dist/web/_app/immutable/assets/5.C6MySjPq.css +1 -0
- package/dist/web/_app/immutable/assets/BulkActionsBar.Bx7nxMjH.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.DX1oBeF_.css +1 -0
- package/dist/web/_app/immutable/assets/FolderMutationDialogs.D2B7KrRn.css +1 -0
- package/dist/web/_app/immutable/assets/FolderPicker.B5KdvRYl.css +1 -0
- package/dist/web/_app/immutable/assets/GalleryView.CF48FWYQ.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.BqgpZCv5.css +1 -0
- package/dist/web/_app/immutable/assets/Rail.f8lsriOT.css +1 -0
- package/dist/web/_app/immutable/assets/SettingsDialog.DwMus2u2.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.DriOGAKB.css +1 -0
- package/dist/web/_app/immutable/assets/WorkspaceView.u5VdwRR6.css +1 -0
- package/dist/web/_app/immutable/assets/button.BlLm4Dg1.css +1 -0
- package/dist/web/_app/immutable/assets/checkbox.DK0MgYgb.css +1 -0
- package/dist/web/_app/immutable/assets/dist.DDCWxn3B.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.DiLB0G5L.css +1 -0
- package/dist/web/_app/immutable/assets/select.BFL238eD.css +1 -0
- package/dist/web/_app/immutable/assets/sheet.4rY4hpfJ.css +1 -0
- package/dist/web/_app/immutable/chunks/-XvFB-zz2.js +2 -0
- package/dist/web/_app/immutable/chunks/-oRd_ir9.js +1 -0
- package/dist/web/_app/immutable/chunks/4XSri7g0.js +1 -0
- package/dist/web/_app/immutable/chunks/4iaT0dG72.js +1 -0
- package/dist/web/_app/immutable/chunks/5_TKU9QS2.js +1 -0
- package/dist/web/_app/immutable/chunks/6-29uWv0.js +1 -0
- package/dist/web/_app/immutable/chunks/8Yh26Z9_2.js +1 -0
- package/dist/web/_app/immutable/chunks/8q1f96y1.js +1 -0
- package/dist/web/_app/immutable/chunks/B-Z_xZy_.js +4 -0
- package/dist/web/_app/immutable/chunks/B1RnjnNt.js +1 -0
- package/dist/web/_app/immutable/chunks/B21rwvCB.js +1 -0
- package/dist/web/_app/immutable/chunks/B2n86UNJ.js +1 -0
- package/dist/web/_app/immutable/chunks/B318GEUB2.js +1 -0
- package/dist/web/_app/immutable/chunks/B6Lt-qaJ.js +1 -0
- package/dist/web/_app/immutable/chunks/BADt8daH.js +2 -0
- package/dist/web/_app/immutable/chunks/BBGt-XQo.js +3 -0
- package/dist/web/_app/immutable/chunks/BCCSYbMx.js +2 -0
- package/dist/web/_app/immutable/chunks/BDIUHcEz.js +1 -0
- package/dist/web/_app/immutable/chunks/BDSuq3KH.js +1 -0
- package/dist/web/_app/immutable/chunks/BGiLU5VN.js +1 -0
- package/dist/web/_app/immutable/chunks/BJgOZTHR.js +1 -0
- package/dist/web/_app/immutable/chunks/BN8IRueA2.js +1 -0
- package/dist/web/_app/immutable/chunks/BRRoo378.js +2 -0
- package/dist/web/_app/immutable/chunks/BVPNAzAK.js +1 -0
- package/dist/web/_app/immutable/chunks/BZ7qh0of.js +1 -0
- package/dist/web/_app/immutable/chunks/BaMo5OWI.js +1 -0
- package/dist/web/_app/immutable/chunks/BdYQewoD.js +1 -0
- package/dist/web/_app/immutable/chunks/BgRT-K6w.js +5 -0
- package/dist/web/_app/immutable/chunks/BibveGGd.js +1 -0
- package/dist/web/_app/immutable/chunks/BoDmwOTJ.js +1 -0
- package/dist/web/_app/immutable/chunks/BoglwbZW.js +1 -0
- package/dist/web/_app/immutable/chunks/Bqm_YrIg2.js +23 -0
- package/dist/web/_app/immutable/chunks/Bw3ftRwD2.js +1 -0
- package/dist/web/_app/immutable/chunks/C7-8fYBp.js +2 -0
- package/dist/web/_app/immutable/chunks/C84_yofr.js +1 -0
- package/dist/web/_app/immutable/chunks/CAXXrbj52.js +1 -0
- package/dist/web/_app/immutable/chunks/CEniyZ1Z2.js +6 -0
- package/dist/web/_app/immutable/chunks/CJhElIkU2.js +1 -0
- package/dist/web/_app/immutable/chunks/CK8tIaYT.js +1 -0
- package/dist/web/_app/immutable/chunks/CO2DvORW.js +2 -0
- package/dist/web/_app/immutable/chunks/CQDB9Yvp.js +1 -0
- package/dist/web/_app/immutable/chunks/CTzjJm_m2.js +1 -0
- package/dist/web/_app/immutable/chunks/CUXqa1nn2.js +1 -0
- package/dist/web/_app/immutable/chunks/CY0iY_WO.js +1 -0
- package/dist/web/_app/immutable/chunks/CYY3Iy2G.js +1 -0
- package/dist/web/_app/immutable/chunks/CbCfNNV_2.js +2692 -0
- package/dist/web/_app/immutable/chunks/CbuGIyDu2.js +22 -0
- package/dist/web/_app/immutable/chunks/CcXmQaYs2.js +1 -0
- package/dist/web/_app/immutable/chunks/CcaQuaSt2.js +1 -0
- package/dist/web/_app/immutable/chunks/CoHaBDpN2.js +2 -0
- package/dist/web/_app/immutable/chunks/Cvbd3myc2.js +14 -0
- package/dist/web/_app/immutable/chunks/CwgiPHda.js +2 -0
- package/dist/web/_app/immutable/chunks/Cwt5tUMq.js +1 -0
- package/dist/web/_app/immutable/chunks/CyGDzYpQ2.js +3 -0
- package/dist/web/_app/immutable/chunks/D-HVAF_w.js +2 -0
- package/dist/web/_app/immutable/chunks/D20C1thX2.js +1 -0
- package/dist/web/_app/immutable/chunks/D3JoMtWC.js +7 -0
- package/dist/web/_app/immutable/chunks/D3ch71s_.js +1 -0
- package/dist/web/_app/immutable/chunks/DBFijAmG.js +1 -0
- package/dist/web/_app/immutable/chunks/DJAStLNu.js +1 -0
- package/dist/web/_app/immutable/chunks/DMZS8I6d.js +7 -0
- package/dist/web/_app/immutable/chunks/DO_sw49q2.js +1 -0
- package/dist/web/_app/immutable/chunks/DP69PpIj.js +1 -0
- package/dist/web/_app/immutable/chunks/DQMWa2t7.js +1 -0
- package/dist/web/_app/immutable/chunks/DT0wzK622.js +1 -0
- package/dist/web/_app/immutable/chunks/DTnEJArL.js +1 -0
- package/dist/web/_app/immutable/chunks/DToS-G202.js +1 -0
- package/dist/web/_app/immutable/chunks/DV0hSm5g.js +2 -0
- package/dist/web/_app/immutable/chunks/DZcU6mGe2.js +1 -0
- package/dist/web/_app/immutable/chunks/DbslMybD.js +1 -0
- package/dist/web/_app/immutable/chunks/DcGThsSF.js +1 -0
- package/dist/web/_app/immutable/chunks/DcPrzUMJ.js +1 -0
- package/dist/web/_app/immutable/chunks/De0g5qop2.js +1 -0
- package/dist/web/_app/immutable/chunks/DeGcz9JU.js +1 -0
- package/dist/web/_app/immutable/chunks/DimS8dbZ2.js +1 -0
- package/dist/web/_app/immutable/chunks/DjuqhOjF.js +1 -0
- package/dist/web/_app/immutable/chunks/DnIQzIOz.js +1 -0
- package/dist/web/_app/immutable/chunks/DnfCmXUt.js +1 -0
- package/dist/web/_app/immutable/chunks/DnrImJan.js +1 -0
- package/dist/web/_app/immutable/chunks/Do09oEro2.js +2 -0
- package/dist/web/_app/immutable/chunks/Dpuq25vu2.js +1 -0
- package/dist/web/_app/immutable/chunks/DrSaepAD2.js +1 -0
- package/dist/web/_app/immutable/chunks/Dw-frCfE.js +1 -0
- package/dist/web/_app/immutable/chunks/Dz34u8Ie2.js +185 -0
- package/dist/web/_app/immutable/chunks/DzrRTvug.js +1 -0
- package/dist/web/_app/immutable/chunks/E5LDmXgv.js +1 -0
- package/dist/web/_app/immutable/chunks/FCTxXqoV.js +1 -0
- package/dist/web/_app/immutable/chunks/FLoGUKj7.js +2 -0
- package/dist/web/_app/immutable/chunks/F_crThMu2.js +1 -0
- package/dist/web/_app/immutable/chunks/GRN8IpJ0.js +2 -0
- package/dist/web/_app/immutable/chunks/J5nb9xxj.js +1 -0
- package/dist/web/_app/immutable/chunks/JCjEwqH9.js +1 -0
- package/dist/web/_app/immutable/chunks/JN_nsXUm2.js +1 -0
- package/dist/web/_app/immutable/chunks/JS2_GaB1.js +1 -0
- package/dist/web/_app/immutable/chunks/N6vnY5Si2.js +1 -0
- package/dist/web/_app/immutable/chunks/PKzH7OBb2.js +1 -0
- package/dist/web/_app/immutable/chunks/Wowi_89k.js +5 -0
- package/dist/web/_app/immutable/chunks/Y_asqJqs2.js +83 -0
- package/dist/web/_app/immutable/chunks/Yhg5Q4MT.js +1 -0
- package/dist/web/_app/immutable/chunks/cHSFvkPC.js +3 -0
- package/dist/web/_app/immutable/chunks/f_eYccPf2.js +1 -0
- package/dist/web/_app/immutable/chunks/hm_8RsuL.js +1 -0
- package/dist/web/_app/immutable/chunks/iPCkjliu.js +3 -0
- package/dist/web/_app/immutable/chunks/j2AvgZGz.js +1 -0
- package/dist/web/_app/immutable/chunks/kNaey6uv.js +1 -0
- package/dist/web/_app/immutable/chunks/kWdKf0Ej.js +8 -0
- package/dist/web/_app/immutable/chunks/l1761xxj.js +1 -0
- package/dist/web/_app/immutable/chunks/liGRFQqV2.js +184 -0
- package/dist/web/_app/immutable/chunks/lq1kR86d.js +1 -0
- package/dist/web/_app/immutable/chunks/mIykYR4F2.js +1 -0
- package/dist/web/_app/immutable/chunks/piVEn8CZ.js +66 -0
- package/dist/web/_app/immutable/chunks/rbhlO_t8.js +1 -0
- package/dist/web/_app/immutable/chunks/rgZlSXXV.js +1 -0
- package/dist/web/_app/immutable/chunks/rx_WUKwk2.js +1 -0
- package/dist/web/_app/immutable/chunks/u8G2EUvz2.js +224 -0
- package/dist/web/_app/immutable/chunks/vgsM0KTm2.js +1 -0
- package/dist/web/_app/immutable/chunks/xcGI4fuV.js +1 -0
- package/dist/web/_app/immutable/chunks/xihTtKlq.js +1 -0
- package/dist/web/_app/immutable/chunks/yEYlhV9G2.js +1 -0
- package/dist/web/_app/immutable/entry/app.CusiWZov.js +2 -0
- package/dist/web/_app/immutable/entry/start.DrLcQ4Lx.js +1 -0
- package/dist/web/_app/immutable/nodes/0.CXwev3zA.js +2 -0
- package/dist/web/_app/immutable/nodes/1.D93E26FU.js +1 -0
- package/dist/web/_app/immutable/nodes/10.BSkeTxej.js +1 -0
- package/dist/web/_app/immutable/nodes/11.CRoiFE32.js +1 -0
- package/dist/web/_app/immutable/nodes/12.Bcwm3-AY.js +1 -0
- package/dist/web/_app/immutable/nodes/13.BVWnarZm.js +1 -0
- package/dist/web/_app/immutable/nodes/14.D_x8-nk9.js +1 -0
- package/dist/web/_app/immutable/nodes/15.B_ReGv9R.js +1 -0
- package/dist/web/_app/immutable/nodes/16.DiOHgg-l.js +77 -0
- package/dist/web/_app/immutable/nodes/2.bwyeAMyx.js +109 -0
- package/dist/web/_app/immutable/nodes/3.CyIpLMSo.js +6 -0
- package/dist/web/_app/immutable/nodes/4.CBxNEgp_.js +11 -0
- package/dist/web/_app/immutable/nodes/5.BV-6fNbn.js +5 -0
- package/dist/web/_app/immutable/nodes/6.BanV644Z.js +1 -0
- package/dist/web/_app/immutable/nodes/7.B7rO4HSm.js +1 -0
- package/dist/web/_app/immutable/nodes/8.BdssFp4B.js +1 -0
- package/dist/web/_app/immutable/nodes/9.B_TACjMT.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 +58 -19
- package/dist/web/studiograph-logomark.svg +29 -0
- package/package.json +38 -14
- package/dist/agent/skills/enrich-entities.md +0 -136
- package/dist/agent/skills/obsidian-source-setup.md +0 -246
- package/dist/agent/skills/skill-loader.d.ts +0 -48
- package/dist/agent/skills/skill-loader.js +0 -166
- package/dist/agent/skills/skill-loader.js.map +0 -1
- package/dist/agent/skills/sync-configuration.md +0 -119
- package/dist/agent/skills/sync-setup.md +0 -82
- package/dist/agent/tools/sync-tools.d.ts +0 -35
- package/dist/agent/tools/sync-tools.js +0 -992
- package/dist/agent/tools/sync-tools.js.map +0 -1
- package/dist/auth/github.d.ts +0 -56
- package/dist/auth/github.js +0 -169
- package/dist/auth/github.js.map +0 -1
- package/dist/cli/commands/access.d.ts +0 -11
- package/dist/cli/commands/access.js +0 -156
- package/dist/cli/commands/access.js.map +0 -1
- package/dist/cli/commands/app.d.ts +0 -7
- package/dist/cli/commands/app.js +0 -268
- package/dist/cli/commands/app.js.map +0 -1
- package/dist/cli/commands/auth.d.ts +0 -10
- package/dist/cli/commands/auth.js +0 -79
- package/dist/cli/commands/auth.js.map +0 -1
- package/dist/cli/commands/clear.d.ts +0 -5
- package/dist/cli/commands/clear.js +0 -36
- package/dist/cli/commands/clear.js.map +0 -1
- package/dist/cli/commands/collection.d.ts +0 -10
- package/dist/cli/commands/collection.js +0 -187
- package/dist/cli/commands/collection.js.map +0 -1
- package/dist/cli/commands/enrich.d.ts +0 -11
- package/dist/cli/commands/enrich.js +0 -135
- package/dist/cli/commands/enrich.js.map +0 -1
- package/dist/cli/commands/graphrag.d.ts +0 -12
- package/dist/cli/commands/graphrag.js +0 -122
- package/dist/cli/commands/graphrag.js.map +0 -1
- package/dist/cli/commands/join.d.ts +0 -9
- package/dist/cli/commands/join.js +0 -255
- package/dist/cli/commands/join.js.map +0 -1
- package/dist/cli/commands/members.d.ts +0 -11
- package/dist/cli/commands/members.js +0 -230
- package/dist/cli/commands/members.js.map +0 -1
- package/dist/cli/commands/org.d.ts +0 -10
- package/dist/cli/commands/org.js +0 -132
- package/dist/cli/commands/org.js.map +0 -1
- package/dist/cli/commands/provision.d.ts +0 -8
- package/dist/cli/commands/provision.js +0 -116
- package/dist/cli/commands/provision.js.map +0 -1
- package/dist/cli/commands/resolve.d.ts +0 -8
- package/dist/cli/commands/resolve.js +0 -85
- package/dist/cli/commands/resolve.js.map +0 -1
- package/dist/cli/commands/review.d.ts +0 -19
- package/dist/cli/commands/review.js +0 -128
- package/dist/cli/commands/review.js.map +0 -1
- package/dist/cli/commands/source.d.ts +0 -16
- package/dist/cli/commands/source.js +0 -159
- package/dist/cli/commands/source.js.map +0 -1
- package/dist/cli/commands/start.d.ts +0 -7
- package/dist/cli/commands/start.js +0 -589
- package/dist/cli/commands/start.js.map +0 -1
- package/dist/cli/commands/sync-collection.d.ts +0 -14
- package/dist/cli/commands/sync-collection.js +0 -355
- package/dist/cli/commands/sync-collection.js.map +0 -1
- package/dist/cli/commands/sync-entities.d.ts +0 -13
- package/dist/cli/commands/sync-entities.js +0 -242
- package/dist/cli/commands/sync-entities.js.map +0 -1
- package/dist/cli/commands/team.d.ts +0 -12
- package/dist/cli/commands/team.js +0 -185
- package/dist/cli/commands/team.js.map +0 -1
- package/dist/cli/commands/update.d.ts +0 -8
- package/dist/cli/commands/update.js +0 -155
- package/dist/cli/commands/update.js.map +0 -1
- package/dist/cli/commands/user.d.ts +0 -7
- package/dist/cli/commands/user.js +0 -153
- package/dist/cli/commands/user.js.map +0 -1
- package/dist/cli/scaffolding.d.ts +0 -12
- package/dist/cli/scaffolding.js +0 -397
- package/dist/cli/scaffolding.js.map +0 -1
- package/dist/cli/sync-review-interactive.d.ts +0 -31
- package/dist/cli/sync-review-interactive.js +0 -393
- package/dist/cli/sync-review-interactive.js.map +0 -1
- package/dist/core/migration-runner.d.ts +0 -42
- package/dist/core/migration-runner.js +0 -232
- package/dist/core/migration-runner.js.map +0 -1
- package/dist/core/migration-types.d.ts +0 -101
- package/dist/core/migration-types.js +0 -21
- package/dist/core/migration-types.js.map +0 -1
- package/dist/core/migrations/20260219-formalize-memory-location.d.ts +0 -2
- package/dist/core/migrations/20260219-formalize-memory-location.js +0 -35
- package/dist/core/migrations/20260219-formalize-memory-location.js.map +0 -1
- package/dist/core/migrations/20260220-add-workspace-metadata.d.ts +0 -12
- package/dist/core/migrations/20260220-add-workspace-metadata.js +0 -65
- package/dist/core/migrations/20260220-add-workspace-metadata.js.map +0 -1
- package/dist/core/migrations/20260220-add-workspace-readme.d.ts +0 -11
- package/dist/core/migrations/20260220-add-workspace-readme.js +0 -82
- package/dist/core/migrations/20260220-add-workspace-readme.js.map +0 -1
- package/dist/core/migrations/20260220-migrate-yaml-to-json.d.ts +0 -9
- package/dist/core/migrations/20260220-migrate-yaml-to-json.js +0 -64
- package/dist/core/migrations/20260220-migrate-yaml-to-json.js.map +0 -1
- package/dist/core/migrations/index.d.ts +0 -11
- package/dist/core/migrations/index.js +0 -23
- package/dist/core/migrations/index.js.map +0 -1
- package/dist/integrations/asana.d.ts +0 -26
- package/dist/integrations/asana.js +0 -78
- package/dist/integrations/asana.js.map +0 -1
- package/dist/integrations/figma-local.d.ts +0 -16
- package/dist/integrations/figma-local.js +0 -10
- package/dist/integrations/figma-local.js.map +0 -1
- package/dist/integrations/figma.d.ts +0 -17
- package/dist/integrations/figma.js +0 -17
- package/dist/integrations/figma.js.map +0 -1
- package/dist/integrations/granola.d.ts +0 -24
- package/dist/integrations/granola.js +0 -60
- package/dist/integrations/granola.js.map +0 -1
- package/dist/integrations/linear.d.ts +0 -14
- package/dist/integrations/linear.js +0 -80
- package/dist/integrations/linear.js.map +0 -1
- package/dist/integrations/paper-local.d.ts +0 -14
- package/dist/integrations/paper-local.js +0 -10
- package/dist/integrations/paper-local.js.map +0 -1
- package/dist/integrations/paper.d.ts +0 -2
- package/dist/integrations/paper.js +0 -10
- package/dist/integrations/paper.js.map +0 -1
- package/dist/integrations/pipedrive.d.ts +0 -26
- package/dist/integrations/pipedrive.js +0 -97
- package/dist/integrations/pipedrive.js.map +0 -1
- package/dist/integrations/registry.d.ts +0 -15
- package/dist/integrations/registry.js +0 -27
- package/dist/integrations/registry.js.map +0 -1
- package/dist/integrations/types.d.ts +0 -38
- package/dist/integrations/types.js +0 -9
- package/dist/integrations/types.js.map +0 -1
- package/dist/lib/lib/utils.d.ts +0 -2
- package/dist/lib/lib/utils.js +0 -6
- package/dist/lib/lib/utils.js.map +0 -1
- package/dist/mcp/connectors/asana.d.ts +0 -2
- package/dist/mcp/connectors/asana.js +0 -20
- package/dist/mcp/connectors/asana.js.map +0 -1
- package/dist/mcp/connectors/definitions.d.ts +0 -45
- package/dist/mcp/connectors/definitions.js +0 -32
- package/dist/mcp/connectors/definitions.js.map +0 -1
- package/dist/mcp/connectors/figma.d.ts +0 -5
- package/dist/mcp/connectors/figma.js +0 -21
- package/dist/mcp/connectors/figma.js.map +0 -1
- package/dist/mcp/connectors/gdrive.d.ts +0 -2
- package/dist/mcp/connectors/gdrive.js +0 -20
- package/dist/mcp/connectors/gdrive.js.map +0 -1
- package/dist/mcp/connectors/granola.d.ts +0 -2
- package/dist/mcp/connectors/granola.js +0 -12
- package/dist/mcp/connectors/granola.js.map +0 -1
- package/dist/mcp/connectors/linear.d.ts +0 -2
- package/dist/mcp/connectors/linear.js +0 -19
- package/dist/mcp/connectors/linear.js.map +0 -1
- package/dist/mcp/connectors/obsidian.d.ts +0 -2
- package/dist/mcp/connectors/obsidian.js +0 -19
- package/dist/mcp/connectors/obsidian.js.map +0 -1
- package/dist/mcp/connectors/pipedrive.d.ts +0 -2
- package/dist/mcp/connectors/pipedrive.js +0 -20
- package/dist/mcp/connectors/pipedrive.js.map +0 -1
- package/dist/mcp/connectors/slack.d.ts +0 -2
- package/dist/mcp/connectors/slack.js +0 -21
- package/dist/mcp/connectors/slack.js.map +0 -1
- package/dist/mcp/server-oauth-provider.d.ts +0 -56
- package/dist/mcp/server-oauth-provider.js +0 -142
- package/dist/mcp/server-oauth-provider.js.map +0 -1
- package/dist/server/chrome/chrome.css +0 -691
- package/dist/server/chrome/chrome.js +0 -374
- package/dist/server/collab-authority.d.ts +0 -70
- package/dist/server/collab-authority.js +0 -218
- package/dist/server/collab-authority.js.map +0 -1
- package/dist/server/collab.d.ts +0 -29
- package/dist/server/collab.js +0 -195
- package/dist/server/collab.js.map +0 -1
- package/dist/server/commit-scheduler.d.ts +0 -39
- package/dist/server/commit-scheduler.js +0 -113
- package/dist/server/commit-scheduler.js.map +0 -1
- package/dist/server/plugin-loader.d.ts +0 -53
- package/dist/server/plugin-loader.js +0 -155
- package/dist/server/plugin-loader.js.map +0 -1
- package/dist/server/routes/collab.d.ts +0 -6
- package/dist/server/routes/collab.js +0 -10
- package/dist/server/routes/collab.js.map +0 -1
- package/dist/server/routes/git-api.d.ts +0 -9
- package/dist/server/routes/git-api.js +0 -82
- package/dist/server/routes/git-api.js.map +0 -1
- package/dist/server/routes/meeting-ingest-api.d.ts +0 -15
- package/dist/server/routes/meeting-ingest-api.js +0 -323
- package/dist/server/routes/meeting-ingest-api.js.map +0 -1
- package/dist/server/routes/sync-api.d.ts +0 -26
- package/dist/server/routes/sync-api.js +0 -814
- package/dist/server/routes/sync-api.js.map +0 -1
- package/dist/server/routes/webhook.d.ts +0 -14
- package/dist/server/routes/webhook.js +0 -102
- package/dist/server/routes/webhook.js.map +0 -1
- package/dist/services/github-provisioner.d.ts +0 -36
- package/dist/services/github-provisioner.js +0 -126
- package/dist/services/github-provisioner.js.map +0 -1
- package/dist/services/github-service.d.ts +0 -99
- package/dist/services/github-service.js +0 -310
- package/dist/services/github-service.js.map +0 -1
- package/dist/services/insights.d.ts +0 -38
- package/dist/services/insights.js +0 -246
- package/dist/services/insights.js.map +0 -1
- package/dist/services/sync/collection-sync.d.ts +0 -60
- package/dist/services/sync/collection-sync.js +0 -509
- package/dist/services/sync/collection-sync.js.map +0 -1
- package/dist/services/sync/commit.d.ts +0 -60
- package/dist/services/sync/commit.js +0 -354
- package/dist/services/sync/commit.js.map +0 -1
- package/dist/services/sync/context-index.d.ts +0 -69
- package/dist/services/sync/context-index.js +0 -280
- package/dist/services/sync/context-index.js.map +0 -1
- package/dist/services/sync/data-fetcher.d.ts +0 -31
- package/dist/services/sync/data-fetcher.js +0 -12
- package/dist/services/sync/data-fetcher.js.map +0 -1
- package/dist/services/sync/derive.d.ts +0 -34
- package/dist/services/sync/derive.js +0 -164
- package/dist/services/sync/derive.js.map +0 -1
- package/dist/services/sync/enrichment-state.d.ts +0 -31
- package/dist/services/sync/enrichment-state.js +0 -63
- package/dist/services/sync/enrichment-state.js.map +0 -1
- package/dist/services/sync/enrichment.d.ts +0 -25
- package/dist/services/sync/enrichment.js +0 -121
- package/dist/services/sync/enrichment.js.map +0 -1
- package/dist/services/sync/entity-refresh.d.ts +0 -30
- package/dist/services/sync/entity-refresh.js +0 -275
- package/dist/services/sync/entity-refresh.js.map +0 -1
- package/dist/services/sync/frontmatter-extractor.d.ts +0 -40
- package/dist/services/sync/frontmatter-extractor.js +0 -279
- package/dist/services/sync/frontmatter-extractor.js.map +0 -1
- package/dist/services/sync/graph-match-state.d.ts +0 -33
- package/dist/services/sync/graph-match-state.js +0 -61
- package/dist/services/sync/graph-match-state.js.map +0 -1
- package/dist/services/sync/graph-match.d.ts +0 -53
- package/dist/services/sync/graph-match.js +0 -316
- package/dist/services/sync/graph-match.js.map +0 -1
- package/dist/services/sync/graphrag-client.d.ts +0 -43
- package/dist/services/sync/graphrag-client.js +0 -94
- package/dist/services/sync/graphrag-client.js.map +0 -1
- package/dist/services/sync/graphrag-config.d.ts +0 -16
- package/dist/services/sync/graphrag-config.js +0 -39
- package/dist/services/sync/graphrag-config.js.map +0 -1
- package/dist/services/sync/graphrag-context.d.ts +0 -14
- package/dist/services/sync/graphrag-context.js +0 -109
- package/dist/services/sync/graphrag-context.js.map +0 -1
- package/dist/services/sync/graphrag-indexer.d.ts +0 -30
- package/dist/services/sync/graphrag-indexer.js +0 -358
- package/dist/services/sync/graphrag-indexer.js.map +0 -1
- package/dist/services/sync/llm.d.ts +0 -32
- package/dist/services/sync/llm.js +0 -115
- package/dist/services/sync/llm.js.map +0 -1
- package/dist/services/sync/mcp-client.d.ts +0 -71
- package/dist/services/sync/mcp-client.js +0 -299
- package/dist/services/sync/mcp-client.js.map +0 -1
- package/dist/services/sync/model-factory.d.ts +0 -13
- package/dist/services/sync/model-factory.js +0 -38
- package/dist/services/sync/model-factory.js.map +0 -1
- package/dist/services/sync/name-quality.d.ts +0 -31
- package/dist/services/sync/name-quality.js +0 -60
- package/dist/services/sync/name-quality.js.map +0 -1
- package/dist/services/sync/output-schemas.d.ts +0 -92
- package/dist/services/sync/output-schemas.js +0 -43
- package/dist/services/sync/output-schemas.js.map +0 -1
- package/dist/services/sync/prompts.d.ts +0 -19
- package/dist/services/sync/prompts.js +0 -128
- package/dist/services/sync/prompts.js.map +0 -1
- package/dist/services/sync/reconciler.d.ts +0 -48
- package/dist/services/sync/reconciler.js +0 -294
- package/dist/services/sync/reconciler.js.map +0 -1
- package/dist/services/sync/rest-client.d.ts +0 -40
- package/dist/services/sync/rest-client.js +0 -100
- package/dist/services/sync/rest-client.js.map +0 -1
- package/dist/services/sync/source-config.d.ts +0 -67
- package/dist/services/sync/source-config.js +0 -304
- package/dist/services/sync/source-config.js.map +0 -1
- package/dist/services/sync/source-definitions/asana.d.ts +0 -14
- package/dist/services/sync/source-definitions/asana.js +0 -42
- package/dist/services/sync/source-definitions/asana.js.map +0 -1
- package/dist/services/sync/source-definitions/definitions.d.ts +0 -8
- package/dist/services/sync/source-definitions/definitions.js +0 -8
- package/dist/services/sync/source-definitions/definitions.js.map +0 -1
- package/dist/services/sync/source-definitions/gdrive.d.ts +0 -16
- package/dist/services/sync/source-definitions/gdrive.js +0 -68
- package/dist/services/sync/source-definitions/gdrive.js.map +0 -1
- package/dist/services/sync/source-definitions/granola.d.ts +0 -2
- package/dist/services/sync/source-definitions/granola.js +0 -21
- package/dist/services/sync/source-definitions/granola.js.map +0 -1
- package/dist/services/sync/source-definitions/linear.d.ts +0 -2
- package/dist/services/sync/source-definitions/linear.js +0 -62
- package/dist/services/sync/source-definitions/linear.js.map +0 -1
- package/dist/services/sync/source-definitions/obsidian.d.ts +0 -2
- package/dist/services/sync/source-definitions/obsidian.js +0 -55
- package/dist/services/sync/source-definitions/obsidian.js.map +0 -1
- package/dist/services/sync/source-definitions/pipedrive.d.ts +0 -2
- package/dist/services/sync/source-definitions/pipedrive.js +0 -43
- package/dist/services/sync/source-definitions/pipedrive.js.map +0 -1
- package/dist/services/sync/staging.d.ts +0 -53
- package/dist/services/sync/staging.js +0 -130
- package/dist/services/sync/staging.js.map +0 -1
- package/dist/services/sync/structured-extractor.d.ts +0 -57
- package/dist/services/sync/structured-extractor.js +0 -584
- package/dist/services/sync/structured-extractor.js.map +0 -1
- package/dist/services/sync/sync-runner.d.ts +0 -32
- package/dist/services/sync/sync-runner.js +0 -195
- package/dist/services/sync/sync-runner.js.map +0 -1
- package/dist/services/sync/sync-state.d.ts +0 -43
- package/dist/services/sync/sync-state.js +0 -154
- package/dist/services/sync/sync-state.js.map +0 -1
- package/dist/services/sync/types.d.ts +0 -381
- package/dist/services/sync/types.js +0 -8
- package/dist/services/sync/types.js.map +0 -1
- package/dist/services/sync/unstructured-extractor.d.ts +0 -27
- package/dist/services/sync/unstructured-extractor.js +0 -185
- package/dist/services/sync/unstructured-extractor.js.map +0 -1
- package/dist/utils/merge-resolver.d.ts +0 -59
- package/dist/utils/merge-resolver.js +0 -303
- package/dist/utils/merge-resolver.js.map +0 -1
- package/dist/utils/workspace-config.d.ts +0 -8
- package/dist/utils/workspace-config.js +0 -22
- package/dist/utils/workspace-config.js.map +0 -1
- package/dist/web/_app/immutable/assets/0.DdizXOKi.css +0 -1
- package/dist/web/_app/immutable/assets/10.BUrHkYry.css +0 -1
- package/dist/web/_app/immutable/assets/2.n7-yW_Fs.css +0 -1
- package/dist/web/_app/immutable/assets/3.BtaZagnv.css +0 -1
- package/dist/web/_app/immutable/assets/4.DT7X0x5S.css +0 -1
- package/dist/web/_app/immutable/assets/5.DFeGxLYf.css +0 -1
- package/dist/web/_app/immutable/assets/6.CquhUpOu.css +0 -1
- package/dist/web/_app/immutable/assets/7.CjbDRbuG.css +0 -1
- package/dist/web/_app/immutable/assets/8.S1QdUGNM.css +0 -1
- package/dist/web/_app/immutable/assets/9.CT4xL4K3.css +0 -1
- package/dist/web/_app/immutable/assets/Copy.FS8bdfxr.css +0 -1
- package/dist/web/_app/immutable/assets/Toaster.rN8r_Hzv.css +0 -1
- package/dist/web/_app/immutable/assets/ViewToolbar.D-QW2oKe.css +0 -1
- package/dist/web/_app/immutable/assets/index.D6tMDJWk.css +0 -1
- package/dist/web/_app/immutable/chunks/-iaeBIWN.js +0 -1
- package/dist/web/_app/immutable/chunks/37NdyH6G.js +0 -32
- package/dist/web/_app/immutable/chunks/4Hhzb6pv.js +0 -1
- package/dist/web/_app/immutable/chunks/72bZS3G9.js +0 -1
- package/dist/web/_app/immutable/chunks/7S2LGqoP.js +0 -2
- package/dist/web/_app/immutable/chunks/B340SUKR.js +0 -1
- package/dist/web/_app/immutable/chunks/B3Z4_Sps.js +0 -1
- package/dist/web/_app/immutable/chunks/BB_5th5W.js +0 -3383
- package/dist/web/_app/immutable/chunks/BPWYOQXG.js +0 -1
- package/dist/web/_app/immutable/chunks/BR77jbfR.js +0 -1
- package/dist/web/_app/immutable/chunks/BS2rFAVq.js +0 -1
- package/dist/web/_app/immutable/chunks/BSsDC_p4.js +0 -1
- package/dist/web/_app/immutable/chunks/BTX2Jr8_.js +0 -1
- package/dist/web/_app/immutable/chunks/Bq_KShUL.js +0 -4
- package/dist/web/_app/immutable/chunks/Bsacq2UX.js +0 -1
- package/dist/web/_app/immutable/chunks/ByunV8un.js +0 -1
- package/dist/web/_app/immutable/chunks/BzPu-Eht.js +0 -1
- package/dist/web/_app/immutable/chunks/C7VoTosa.js +0 -2
- package/dist/web/_app/immutable/chunks/CDV5Q7RN.js +0 -1
- package/dist/web/_app/immutable/chunks/CGc1sIb_.js +0 -1
- package/dist/web/_app/immutable/chunks/CJ8__CWt.js +0 -1
- package/dist/web/_app/immutable/chunks/CJUKmosC.js +0 -5
- package/dist/web/_app/immutable/chunks/CSVbGg_b.js +0 -5
- package/dist/web/_app/immutable/chunks/CT6oIU-C.js +0 -1
- package/dist/web/_app/immutable/chunks/CTRxNfZk.js +0 -1
- package/dist/web/_app/immutable/chunks/CWQRQXxy.js +0 -1
- package/dist/web/_app/immutable/chunks/CX87mIM8.js +0 -1
- package/dist/web/_app/immutable/chunks/CXH6iFbA.js +0 -1
- package/dist/web/_app/immutable/chunks/CX_61fY8.js +0 -5
- package/dist/web/_app/immutable/chunks/CYrVHOHA.js +0 -1
- package/dist/web/_app/immutable/chunks/CdeYcEuU.js +0 -1
- package/dist/web/_app/immutable/chunks/CmCtpZ1Y.js +0 -1
- package/dist/web/_app/immutable/chunks/Cpsr8-Xy.js +0 -1
- package/dist/web/_app/immutable/chunks/CqkleIqs.js +0 -1
- package/dist/web/_app/immutable/chunks/CrdV0ttd.js +0 -1
- package/dist/web/_app/immutable/chunks/CscoF-YL.js +0 -18
- package/dist/web/_app/immutable/chunks/Cx4YdFMk.js +0 -1
- package/dist/web/_app/immutable/chunks/D7ZqAKi9.js +0 -3
- package/dist/web/_app/immutable/chunks/DGbA7IXh.js +0 -2
- package/dist/web/_app/immutable/chunks/DTZE-yoq.js +0 -2
- package/dist/web/_app/immutable/chunks/DbbB6Up5.js +0 -1
- package/dist/web/_app/immutable/chunks/DnL9f0lc.js +0 -7
- package/dist/web/_app/immutable/chunks/DtM5cEDu.js +0 -1
- package/dist/web/_app/immutable/chunks/Eqahi7_S.js +0 -2
- package/dist/web/_app/immutable/chunks/O9Eb9k00.js +0 -1
- package/dist/web/_app/immutable/chunks/PPVm8Dsz.js +0 -1
- package/dist/web/_app/immutable/chunks/QF8MAmnc.js +0 -1
- package/dist/web/_app/immutable/chunks/UjzxCpxn.js +0 -1
- package/dist/web/_app/immutable/chunks/WSUKABI_.js +0 -1
- package/dist/web/_app/immutable/chunks/Y90OgS-9.js +0 -1
- package/dist/web/_app/immutable/chunks/cLyZlkXv.js +0 -1
- package/dist/web/_app/immutable/chunks/iDtAARVW.js +0 -2
- package/dist/web/_app/immutable/chunks/oC_W7W7p.js +0 -1
- package/dist/web/_app/immutable/chunks/rJdWIgh-.js +0 -1
- package/dist/web/_app/immutable/chunks/tvOsokaa.js +0 -1
- package/dist/web/_app/immutable/chunks/uLEXaPwE.js +0 -1
- package/dist/web/_app/immutable/chunks/vSaooFHB.js +0 -1
- package/dist/web/_app/immutable/entry/app.BeUKh4sD.js +0 -2
- package/dist/web/_app/immutable/entry/start.CZJnFuQn.js +0 -1
- package/dist/web/_app/immutable/nodes/0.DyF_RsLg.js +0 -2
- package/dist/web/_app/immutable/nodes/1.7iDQmMPh.js +0 -1
- package/dist/web/_app/immutable/nodes/10.Btl8d8HT.js +0 -1
- package/dist/web/_app/immutable/nodes/2.LDRE62jN.js +0 -168
- package/dist/web/_app/immutable/nodes/3.BaW1XB1x.js +0 -1
- package/dist/web/_app/immutable/nodes/4.D0Q8kpkI.js +0 -12
- package/dist/web/_app/immutable/nodes/5.n7j2UG9h.js +0 -4
- package/dist/web/_app/immutable/nodes/6.DQYxR0iy.js +0 -2
- package/dist/web/_app/immutable/nodes/7.BsURvFAp.js +0 -2
- package/dist/web/_app/immutable/nodes/8.CsiErG0p.js +0 -1
- package/dist/web/_app/immutable/nodes/9.CnN6OZgC.js +0 -1
|
@@ -4,17 +4,19 @@
|
|
|
4
4
|
* Manages the Pi-Mono agent instance and coordinates with workspace managers.
|
|
5
5
|
* Loads skills, handles system prompts, and manages conversation flow.
|
|
6
6
|
*/
|
|
7
|
-
import { readFileSync, existsSync
|
|
7
|
+
import { readFileSync, existsSync } from 'fs';
|
|
8
8
|
import { join, dirname } from 'path';
|
|
9
9
|
import { homedir } from 'os';
|
|
10
10
|
import { fileURLToPath } from 'url';
|
|
11
11
|
const __filename = fileURLToPath(import.meta.url);
|
|
12
12
|
const __dirname = dirname(__filename);
|
|
13
|
-
import { getModel } from '@mariozechner/pi-ai';
|
|
13
|
+
import { getModel, completeSimple } from '@mariozechner/pi-ai';
|
|
14
14
|
import { Agent } from '@mariozechner/pi-agent-core';
|
|
15
15
|
import { WorkspaceManager } from '../core/workspace-manager.js';
|
|
16
|
+
import { findPersonRefForUser } from '../services/user-person-bridge.js';
|
|
16
17
|
import { createGraphTools } from './tools/graph-tools.js';
|
|
17
|
-
import {
|
|
18
|
+
import { createFolderTools } from './tools/folder-tools.js';
|
|
19
|
+
import { createHistoryTools } from './tools/history-tools.js';
|
|
18
20
|
import { loadSkillIndex, buildSkillIndexPrompt, loadEagerSkills } from './skill-loader.js';
|
|
19
21
|
import { createLoadSkillTool } from './tools/load-skill.js';
|
|
20
22
|
import { loadCustomTools } from './tools/tool-loader.js';
|
|
@@ -24,82 +26,186 @@ import { createFsTools } from './tools/fs-tools.js';
|
|
|
24
26
|
import { createWebTools } from './tools/web-tools.js';
|
|
25
27
|
import { createOpsTools } from './tools/ops-tools.js';
|
|
26
28
|
import { createPermissionTools } from './tools/permission-tools.js';
|
|
29
|
+
import { createCaptureTools } from './tools/capture-tools.js';
|
|
30
|
+
import { renderEntityTypesSection } from './prompts/entity-types-section.js';
|
|
31
|
+
import { ENTITY_SCHEMAS } from '../core/validation.js';
|
|
27
32
|
import { AuthService } from '../services/auth-service.js';
|
|
33
|
+
import * as access from '../services/access-control.js';
|
|
28
34
|
import { loadUserConfig, resolveApiKey, resolveProvider, resolveModelId } from '../core/user-config.js';
|
|
35
|
+
import { onSecretMutation } from '../core/secrets/index.js';
|
|
36
|
+
import { AgentPool } from './agent-pool.js';
|
|
37
|
+
import { addInferenceUsage, createCloudInferenceStreamFn, createInferenceUsageSummary, isStudiographCreditsMode, studiographCreditsModel, } from '../services/cloud-inference-billing.js';
|
|
29
38
|
export class AgentOrchestrator {
|
|
30
39
|
workspacePath;
|
|
31
40
|
workspaceManager;
|
|
32
|
-
|
|
41
|
+
pool;
|
|
33
42
|
config;
|
|
34
43
|
gitUser;
|
|
35
44
|
skillsDirs;
|
|
36
45
|
toolsDirs;
|
|
37
46
|
registryRef = { registry: null };
|
|
38
|
-
_highlightCallback = null;
|
|
39
|
-
_mutationCallback = null;
|
|
40
|
-
_currentUser = null;
|
|
41
47
|
authService;
|
|
42
48
|
recentMemory;
|
|
43
|
-
currentSessionId = null;
|
|
44
49
|
sessionsDir;
|
|
50
|
+
// Per-session context — used by tool closures via the pool's contextMap
|
|
51
|
+
// Legacy fields kept for backward compat with callers that set them before chat()
|
|
52
|
+
_currentUser = null;
|
|
53
|
+
_highlightCallback = null;
|
|
54
|
+
_mutationCallback = null;
|
|
55
|
+
currentSessionId = null;
|
|
56
|
+
_sessionUserId;
|
|
45
57
|
constructor(config) {
|
|
46
58
|
this.workspacePath = config.workspacePath;
|
|
47
59
|
this.config = config.workspaceConfig;
|
|
48
60
|
this.gitUser = config.gitUser;
|
|
49
61
|
this.recentMemory = config.recentMemory;
|
|
50
|
-
|
|
62
|
+
// Prefer the route-level AuthService so we share the master-key
|
|
63
|
+
// crypto wiring + the OAuth-mutation pubsub. Fallback construction
|
|
64
|
+
// only fires in tests / CLI scenarios that don't supply one — those
|
|
65
|
+
// paths don't read encrypted oauth_tokens, so the missing crypto is
|
|
66
|
+
// harmless there.
|
|
67
|
+
this.authService = config.authService ?? new AuthService(config.workspacePath);
|
|
51
68
|
this.sessionsDir = join(homedir(), '.studiograph', 'sessions');
|
|
52
|
-
//
|
|
53
|
-
//
|
|
54
|
-
const userSkillsDir = join(homedir(), '.studiograph', 'skills');
|
|
69
|
+
// Skills: filesystem dirs are now bundled-only. User/workspace authoring
|
|
70
|
+
// moves to graph `skill` entities (enumerated per-user in createAgentInstance).
|
|
55
71
|
const userToolsDir = join(homedir(), '.studiograph', 'tools');
|
|
56
|
-
const workspaceSkillsDir = join(this.workspacePath, '.studiograph', 'skills');
|
|
57
72
|
const workspaceToolsDir = join(this.workspacePath, '.studiograph', 'tools');
|
|
58
73
|
const bundledSkillsDir = join(__dirname, 'skills');
|
|
59
|
-
this.skillsDirs = [
|
|
74
|
+
this.skillsDirs = [bundledSkillsDir, ...(config.skillsDirs ?? [])];
|
|
60
75
|
this.toolsDirs = [userToolsDir, workspaceToolsDir, ...(config.toolsDirs ?? [])];
|
|
61
|
-
// Use shared workspace manager if provided, otherwise create one
|
|
62
76
|
this.workspaceManager = config.workspaceManager ?? new WorkspaceManager(this.workspacePath, this.config, this.gitUser);
|
|
63
|
-
// Initialize
|
|
64
|
-
this.
|
|
77
|
+
// Initialize agent pool — each session gets its own Agent instance
|
|
78
|
+
this.pool = new AgentPool({
|
|
79
|
+
createAgent: (userId) => this.createAgentInstance(userId),
|
|
80
|
+
loadCustomTools: (agent, userId) => this.loadCustomToolsAsync(agent, userId),
|
|
81
|
+
sessionsDir: this.sessionsDir,
|
|
82
|
+
});
|
|
83
|
+
// Evict cached agents when an operator changes a model.* key via
|
|
84
|
+
// Settings UI / CLI. Without this, the running agent keeps using
|
|
85
|
+
// the apiKey/provider/modelId it captured at createAgentInstance
|
|
86
|
+
// time, and the operator's rotation appears to have no effect
|
|
87
|
+
// until the next process restart. Other keys (r2.*, search.*) are
|
|
88
|
+
// read fresh on each tool call, so eviction isn't needed for them.
|
|
89
|
+
onSecretMutation((key) => {
|
|
90
|
+
if (key.startsWith('model.')) {
|
|
91
|
+
this.pool.invalidateAll();
|
|
92
|
+
}
|
|
93
|
+
});
|
|
94
|
+
// Evict the user's pooled agent when their OAuth state changes.
|
|
95
|
+
// ConnectorManager.buildTools resolves per-user OAuth at agent-
|
|
96
|
+
// construction time only; mid-session connect/disconnect would
|
|
97
|
+
// otherwise leave the agent with a stale tool list (the connector
|
|
98
|
+
// would stay invisible after Connect, or stay visible after
|
|
99
|
+
// Disconnect). Scoped per-user — other users' sessions are
|
|
100
|
+
// untouched.
|
|
101
|
+
this.authService.onOAuthMutation((userId) => {
|
|
102
|
+
this.pool.invalidateUser(userId);
|
|
103
|
+
});
|
|
65
104
|
}
|
|
66
105
|
/**
|
|
67
106
|
* Create Pi-Mono agent with tools and system prompt.
|
|
68
107
|
* Custom tools and skills are loaded asynchronously via initAsync().
|
|
69
108
|
*/
|
|
70
|
-
|
|
109
|
+
createAgentInstance(userId) {
|
|
71
110
|
const userConfig = loadUserConfig();
|
|
72
|
-
const
|
|
73
|
-
const
|
|
74
|
-
const
|
|
111
|
+
const useCreditsGateway = isStudiographCreditsMode();
|
|
112
|
+
const provider = useCreditsGateway ? 'studiograph-cloud' : resolveProvider(userConfig, this.config);
|
|
113
|
+
const modelId = useCreditsGateway ? studiographCreditsModel().id : resolveModelId(userConfig, this.config);
|
|
114
|
+
const apiKey = useCreditsGateway ? 'studiograph-cloud-gateway' : resolveApiKey(userConfig, this.config);
|
|
75
115
|
if (!apiKey) {
|
|
76
116
|
throw new Error('API key not found in config or environment');
|
|
77
117
|
}
|
|
78
|
-
const model =
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
// Build
|
|
118
|
+
const model = useCreditsGateway
|
|
119
|
+
? studiographCreditsModel()
|
|
120
|
+
: getModel(provider, modelId);
|
|
121
|
+
// Build skill index — bundled filesystem skills + graph `skill` entries
|
|
122
|
+
// from folders the user can access. Graph skills take priority over
|
|
123
|
+
// bundled on name collision (user-authored overrides can customise
|
|
124
|
+
// built-in skills).
|
|
125
|
+
const promptRepos = this.getPromptRepoScope(userId);
|
|
126
|
+
const graphSkills = this.enumerateGraphSkills(promptRepos, userId);
|
|
127
|
+
const bundledSkills = loadSkillIndex(this.skillsDirs);
|
|
128
|
+
const seen = new Set(graphSkills.map((s) => s.name));
|
|
129
|
+
const skillIndex = [...graphSkills, ...bundledSkills.filter(s => !seen.has(s.name))];
|
|
130
|
+
const graphResolver = (repo, id) => this.readGraphSkillBody(repo, id);
|
|
131
|
+
// Build tools — closures read per-session context from the pool
|
|
132
|
+
// The pool sets context before each withAgent call, so these resolve correctly
|
|
133
|
+
// Closures that resolve per-session context at call time.
|
|
134
|
+
// The pool sets context before each withAgent callback; the closure
|
|
135
|
+
// finds which session owns this agent and reads from that context.
|
|
136
|
+
const getUser = () => {
|
|
137
|
+
const sid = this.pool.findSessionForAgent(agent);
|
|
138
|
+
return sid ? (this.pool.getContext(sid).user ?? null) : this._currentUser;
|
|
139
|
+
};
|
|
140
|
+
const onHighlight = (ids) => {
|
|
141
|
+
const sid = this.pool.findSessionForAgent(agent);
|
|
142
|
+
if (sid)
|
|
143
|
+
this.pool.getContext(sid).onHighlight?.(ids);
|
|
144
|
+
else
|
|
145
|
+
this._highlightCallback?.(ids);
|
|
146
|
+
};
|
|
147
|
+
const onMutation = (m) => {
|
|
148
|
+
const sid = this.pool.findSessionForAgent(agent);
|
|
149
|
+
if (sid)
|
|
150
|
+
this.pool.getContext(sid).onMutation?.(m);
|
|
151
|
+
else
|
|
152
|
+
this._mutationCallback?.(m);
|
|
153
|
+
};
|
|
154
|
+
const onAgentActivity = (action, repo) => {
|
|
155
|
+
const sid = this.pool.findSessionForAgent(agent);
|
|
156
|
+
if (sid)
|
|
157
|
+
this.pool.getContext(sid).onAgentActivity?.(action, repo);
|
|
158
|
+
};
|
|
159
|
+
/** Resolves the per-session capture callback at tool-call time. The
|
|
160
|
+
* capture flow installs it via AgentContext; other flows leave it
|
|
161
|
+
* undefined and the tool becomes a no-op acknowledgement. */
|
|
162
|
+
const getNothingToCaptureCallback = () => {
|
|
163
|
+
const sid = this.pool.findSessionForAgent(agent);
|
|
164
|
+
if (!sid)
|
|
165
|
+
return undefined;
|
|
166
|
+
return this.pool.getContext(sid).onNothingToCapture ?? undefined;
|
|
167
|
+
};
|
|
82
168
|
const tools = [
|
|
83
|
-
...createGraphTools(this.workspaceManager, this.gitUser, this.workspacePath,
|
|
84
|
-
...
|
|
169
|
+
...createGraphTools(this.workspaceManager, this.gitUser, this.workspacePath, onHighlight, onMutation, getUser, this.authService, onAgentActivity),
|
|
170
|
+
...createFolderTools(this.workspaceManager, this.gitUser, onMutation, getUser, this.authService, onAgentActivity),
|
|
171
|
+
...createHistoryTools(this.workspaceManager, this.gitUser, onMutation, getUser, this.authService, onAgentActivity),
|
|
85
172
|
...createOpsTools(this.workspacePath, this.config),
|
|
86
|
-
...createPermissionTools(this.authService,
|
|
87
|
-
...createFsTools(
|
|
173
|
+
...createPermissionTools(this.authService, getUser, this.workspaceManager),
|
|
174
|
+
...createFsTools(getUser),
|
|
88
175
|
...createWebTools(this.config.search),
|
|
89
|
-
|
|
176
|
+
...createCaptureTools(getNothingToCaptureCallback),
|
|
177
|
+
createLoadSkillTool(skillIndex, graphResolver),
|
|
90
178
|
];
|
|
91
179
|
// Build system prompt — base + auto-generated tool reference + memory + eager skills + skill index
|
|
92
|
-
const systemPrompt = this.buildSystemPrompt(skillIndex, tools, this.recentMemory);
|
|
180
|
+
const systemPrompt = this.buildSystemPrompt(skillIndex, tools, this.recentMemory, graphResolver, promptRepos, userId);
|
|
93
181
|
// Log registered tools at startup (verbose only)
|
|
94
182
|
if (process.env.STUDIOGRAPH_VERBOSE === '1') {
|
|
95
183
|
console.log(`🔧 ${tools.length} tools registered: ${tools.map((t) => t.name).join(', ')}`);
|
|
96
184
|
}
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
185
|
+
// Dedup the bundled tools array — guards against any future
|
|
186
|
+
// createXxxTools() collision so we never hand a duplicate-name list
|
|
187
|
+
// to the Agent constructor (Anthropic 400s on `tools: Tool names must
|
|
188
|
+
// be unique.`).
|
|
189
|
+
const dedupedTools = [];
|
|
190
|
+
const bundledSeen = new Set();
|
|
191
|
+
for (const t of tools) {
|
|
192
|
+
const name = t.name;
|
|
193
|
+
if (!name || bundledSeen.has(name))
|
|
194
|
+
continue;
|
|
195
|
+
bundledSeen.add(name);
|
|
196
|
+
dedupedTools.push(t);
|
|
197
|
+
}
|
|
198
|
+
const agent = new Agent({
|
|
199
|
+
getApiKey: () => apiKey,
|
|
200
|
+
initialState: { model, systemPrompt, tools: dedupedTools },
|
|
201
|
+
streamFn: useCreditsGateway ? createCloudInferenceStreamFn() : undefined,
|
|
202
|
+
});
|
|
203
|
+
// Custom tools are loaded asynchronously by the pool wrapper
|
|
204
|
+
// (config.loadCustomTools, wired to loadCustomToolsAsync). Do NOT call
|
|
205
|
+
// it here — calling it twice fires two concurrent Promise.alls, both
|
|
206
|
+
// racing to mutate agent.state.tools, and the inter-microtask dedup
|
|
207
|
+
// can't always prevent Anthropic seeing a duplicated list on the very
|
|
208
|
+
// first prompt. Single fire site = no race.
|
|
103
209
|
return agent;
|
|
104
210
|
}
|
|
105
211
|
/**
|
|
@@ -107,12 +213,20 @@ export class AgentOrchestrator {
|
|
|
107
213
|
* Runs async after construction — custom tools may not be available for the
|
|
108
214
|
* very first message if initialisation is extremely fast, but in practice
|
|
109
215
|
* the first user message arrives well after startup.
|
|
216
|
+
*
|
|
217
|
+
* `userId` is forwarded into `ConnectorManager.buildTools` so per-user MCP
|
|
218
|
+
* OAuth tokens are resolved at tool-build time. Without it the runtime
|
|
219
|
+
* silently falls back to workspace-shared static headers (the deferred
|
|
220
|
+
* gap before 2026-05-13). The agent pool keys agents per-session and
|
|
221
|
+
* supplies the session's userId on creation; CLI / non-interactive
|
|
222
|
+
* spawns pass `undefined` and intentionally land on the workspace
|
|
223
|
+
* fallback.
|
|
110
224
|
*/
|
|
111
|
-
loadCustomToolsAsync(agent) {
|
|
225
|
+
loadCustomToolsAsync(agent, userId) {
|
|
112
226
|
const context = { workspaceManager: this.workspaceManager, gitUser: this.gitUser };
|
|
113
|
-
Promise.all([
|
|
227
|
+
return Promise.all([
|
|
114
228
|
loadCustomTools(this.toolsDirs, context),
|
|
115
|
-
ConnectorManager.buildTools(ConnectorManager.loadConfigs(this.workspacePath)),
|
|
229
|
+
ConnectorManager.buildTools(ConnectorManager.loadConfigs(this.workspacePath), { userId, authService: this.authService }),
|
|
116
230
|
]).then(([customTools, connectorTools]) => {
|
|
117
231
|
const extra = [...customTools];
|
|
118
232
|
if (connectorTools.length > 0) {
|
|
@@ -121,8 +235,27 @@ export class AgentOrchestrator {
|
|
|
121
235
|
this.registryRef.registry = registry;
|
|
122
236
|
}
|
|
123
237
|
if (extra.length > 0) {
|
|
238
|
+
// Dedup by name — this method can be invoked more than once per agent
|
|
239
|
+
// (createAgentInstance schedules it, and the pool also calls it via
|
|
240
|
+
// its loadCustomTools callback). Without dedup we end up with
|
|
241
|
+
// duplicate tool registrations, which Anthropic rejects on the next
|
|
242
|
+
// turn with: 400 "tools: Tool names must be unique."
|
|
124
243
|
const existing = agent.state.tools;
|
|
125
|
-
|
|
244
|
+
const seen = new Set(existing.map((t) => t.name));
|
|
245
|
+
const merged = [...existing];
|
|
246
|
+
for (const t of extra) {
|
|
247
|
+
if (seen.has(t.name))
|
|
248
|
+
continue;
|
|
249
|
+
seen.add(t.name);
|
|
250
|
+
merged.push(t);
|
|
251
|
+
}
|
|
252
|
+
if (merged.length !== existing.length) {
|
|
253
|
+
agent.state.tools = merged;
|
|
254
|
+
}
|
|
255
|
+
}
|
|
256
|
+
if (process.env.STUDIOGRAPH_VERBOSE === '1') {
|
|
257
|
+
// eslint-disable-next-line no-console
|
|
258
|
+
console.log(`[orchestrator] loadCustomToolsAsync done: customTools=${customTools.length}, connectorTools=${connectorTools.length}, total agent.state.tools=${agent.state.tools.length}`);
|
|
126
259
|
}
|
|
127
260
|
}).catch(err => {
|
|
128
261
|
console.warn('Failed to load custom/connector tools:', err);
|
|
@@ -131,11 +264,11 @@ export class AgentOrchestrator {
|
|
|
131
264
|
/**
|
|
132
265
|
* Build the full system prompt: base prompt + eager skill content + skill index.
|
|
133
266
|
*/
|
|
134
|
-
buildSystemPrompt(skillIndex, tools, recentMemory) {
|
|
267
|
+
buildSystemPrompt(skillIndex, tools, recentMemory, graphResolver, promptRepos = this.workspaceManager.getContentRepoConfigs(), userId) {
|
|
135
268
|
const promptPath = join(__dirname, 'prompts', 'system.md');
|
|
136
269
|
let base = existsSync(promptPath)
|
|
137
270
|
? readFileSync(promptPath, 'utf-8')
|
|
138
|
-
: this.getDefaultSystemPrompt();
|
|
271
|
+
: this.getDefaultSystemPrompt(promptRepos);
|
|
139
272
|
// Auto-generate tool reference from registered tools, grouped by category
|
|
140
273
|
const categories = {
|
|
141
274
|
'Entity Management': [],
|
|
@@ -159,6 +292,10 @@ export class AgentOrchestrator {
|
|
|
159
292
|
categories['Skills'].push(t);
|
|
160
293
|
else if (['create_entity', 'get_entity', 'update_entity', 'delete_entity', 'search_entities', 'list_entities', 'get_related', 'get_backlinks', 'validate_wikilinks', 'get_workspace_summary', 'list_repos', 'query_dataset', 'append_rows', 'get_entity_schema', 'lint_entities'].includes(name))
|
|
161
294
|
categories['Entity Management'].push(t);
|
|
295
|
+
else if (['create_folder', 'create_subfolder', 'rename_folder', 'delete_folder', 'list_folders', 'move_entity', 'transfer_entity'].includes(name))
|
|
296
|
+
(categories['Folders'] ??= []).push(t);
|
|
297
|
+
else if (['list_file_history', 'list_folder_history', 'list_recent_deletions', 'read_file_at_commit', 'get_entity_diff', 'restore_file'].includes(name))
|
|
298
|
+
(categories['Git History'] ??= []).push(t);
|
|
162
299
|
else
|
|
163
300
|
categories['Other'].push(t);
|
|
164
301
|
}
|
|
@@ -167,13 +304,26 @@ export class AgentOrchestrator {
|
|
|
167
304
|
.map(([cat, items]) => `**${cat}:**\n${items.map((t) => `- \`${t.name}\` — ${t.description}`).join('\n')}`)
|
|
168
305
|
.join('\n\n');
|
|
169
306
|
base = base.replace('{{TOOL_REFERENCE}}', toolRef);
|
|
307
|
+
// Render the agent-visible entity type list from the launch allowlist +
|
|
308
|
+
// any workspace-defined custom types.
|
|
309
|
+
const registry = this.workspaceManager.getSchemaRegistry();
|
|
310
|
+
const builtinTypes = new Set(Object.keys(ENTITY_SCHEMAS));
|
|
311
|
+
const customTypes = registry.getAllTypes().filter(t => !builtinTypes.has(t));
|
|
312
|
+
base = base.replace('{{ENTITY_TYPES}}', renderEntityTypesSection({ customTypes }));
|
|
170
313
|
const parts = [base.trim()];
|
|
171
|
-
// Inject workspace
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
314
|
+
// Inject workspace identity from graph entities (org, team, capabilities, guidelines)
|
|
315
|
+
// Falls back to ABOUT.md if the graph has no organization entries
|
|
316
|
+
const identitySection = this.buildWorkspaceIdentity(promptRepos);
|
|
317
|
+
if (identitySection) {
|
|
318
|
+
parts.push(identitySection);
|
|
319
|
+
}
|
|
320
|
+
else {
|
|
321
|
+
const aboutPath = join(this.workspacePath, '.studiograph', 'ABOUT.md');
|
|
322
|
+
if (existsSync(aboutPath)) {
|
|
323
|
+
const aboutContent = readFileSync(aboutPath, 'utf-8');
|
|
324
|
+
if (aboutContent.trim()) {
|
|
325
|
+
parts.push(`## Workspace Identity\n\n${aboutContent}`);
|
|
326
|
+
}
|
|
177
327
|
}
|
|
178
328
|
}
|
|
179
329
|
// Append workspace schema extensions (org-specific fields and custom types)
|
|
@@ -181,12 +331,40 @@ export class AgentOrchestrator {
|
|
|
181
331
|
if (schemaSection) {
|
|
182
332
|
parts.push(schemaSection);
|
|
183
333
|
}
|
|
334
|
+
// Inject per-repo subfolder inventory so the agent knows the existing
|
|
335
|
+
// folder layout without calling list_folders for every routing decision.
|
|
336
|
+
// Capped per-repo to keep system prompt size bounded.
|
|
337
|
+
const folderInventory = this.buildFolderInventory(promptRepos);
|
|
338
|
+
if (folderInventory) {
|
|
339
|
+
parts.push(folderInventory);
|
|
340
|
+
}
|
|
184
341
|
// Inject recent memory context (today + yesterday daily memory)
|
|
185
342
|
if (recentMemory) {
|
|
186
343
|
parts.push(`## Memory Context\n\n${recentMemory}`);
|
|
187
344
|
}
|
|
345
|
+
// Inject current-user identity + bridge so the agent can read its own
|
|
346
|
+
// handle and the linked person entity from the prompt instead of
|
|
347
|
+
// having to call list_users on every turn.
|
|
348
|
+
if (userId) {
|
|
349
|
+
const u = this.authService.findUserById(userId);
|
|
350
|
+
if (u) {
|
|
351
|
+
const ref = findPersonRefForUser(this.workspaceManager, u.handle);
|
|
352
|
+
const lines = [
|
|
353
|
+
`## Current User`,
|
|
354
|
+
``,
|
|
355
|
+
`- Display name: ${u.displayName}`,
|
|
356
|
+
`- Handle: \`${u.handle}\` (use this for created_by/updated_by audit, @mentions, and link_person_to_user)`,
|
|
357
|
+
`- Email: ${u.email}`,
|
|
358
|
+
`- Role: ${u.role}`,
|
|
359
|
+
ref
|
|
360
|
+
? `- Linked person entity: \`[[${ref.entityId}]]\` in \`${ref.repo}\` — when the user refers to themselves, this is their record. Write enrichments here via update_entity; never call link_person_to_user for the current user.`
|
|
361
|
+
: `- Linked person entity: **none.** This account has no person record yet (new/legacy account, or a previously-linked record was deleted). The link is optional but powers their "My Tasks", @mentions, and lets teammates assign tasks to them. If they'd like to link, offer to either (a) find an existing person record that is them and link it (search_entities → link_person_to_user), or (b) create a person entity for them and link it (create_entity → link_person_to_user). You can also point them to Settings → Profile → "Create & link" for a one-click repair. Don't push workspace-wide config changes for this.`,
|
|
362
|
+
];
|
|
363
|
+
parts.push(lines.join('\n'));
|
|
364
|
+
}
|
|
365
|
+
}
|
|
188
366
|
// Inline eager skills directly into the system prompt
|
|
189
|
-
const eagerContent = loadEagerSkills(skillIndex);
|
|
367
|
+
const eagerContent = loadEagerSkills(skillIndex, graphResolver);
|
|
190
368
|
if (eagerContent) {
|
|
191
369
|
parts.push(eagerContent);
|
|
192
370
|
}
|
|
@@ -197,13 +375,194 @@ export class AgentOrchestrator {
|
|
|
197
375
|
}
|
|
198
376
|
return parts.join('\n\n');
|
|
199
377
|
}
|
|
378
|
+
/**
|
|
379
|
+
* Enumerate skill entities across all folders the user can access. Each
|
|
380
|
+
* skill becomes a SkillMeta with a `graph://<repo>/<id>` sentinel
|
|
381
|
+
* entrypoint. Priority order: user's private folder first, then shared
|
|
382
|
+
* folders alphabetically. First occurrence of a given name wins.
|
|
383
|
+
*/
|
|
384
|
+
getPromptRepoScope(userId) {
|
|
385
|
+
if (!userId)
|
|
386
|
+
return this.workspaceManager.getAllRepoConfigs();
|
|
387
|
+
const user = this.authService.findUserById(userId);
|
|
388
|
+
if (!user)
|
|
389
|
+
return [];
|
|
390
|
+
return access.getAccessibleRepos(user, this.workspaceManager, this.authService);
|
|
391
|
+
}
|
|
392
|
+
enumerateGraphSkills(accessibleRepos, userId) {
|
|
393
|
+
const skills = [];
|
|
394
|
+
const seen = new Set();
|
|
395
|
+
const personalRepo = userId ? this.workspaceManager.getUserPersonalRepo(userId) : undefined;
|
|
396
|
+
const sortedRepos = [...accessibleRepos]
|
|
397
|
+
.sort((a, b) => {
|
|
398
|
+
if (personalRepo && a.name === personalRepo.name)
|
|
399
|
+
return -1;
|
|
400
|
+
if (personalRepo && b.name === personalRepo.name)
|
|
401
|
+
return 1;
|
|
402
|
+
return a.name.localeCompare(b.name);
|
|
403
|
+
});
|
|
404
|
+
for (const repo of sortedRepos) {
|
|
405
|
+
try {
|
|
406
|
+
const graph = this.workspaceManager.getGraph(repo.name);
|
|
407
|
+
const entries = graph.list('skill');
|
|
408
|
+
for (const entry of entries) {
|
|
409
|
+
if (seen.has(entry.id))
|
|
410
|
+
continue;
|
|
411
|
+
seen.add(entry.id);
|
|
412
|
+
const data = entry.data;
|
|
413
|
+
skills.push({
|
|
414
|
+
name: entry.id,
|
|
415
|
+
description: typeof data.description === 'string' ? data.description : '',
|
|
416
|
+
loading: data.loading === 'eager' ? 'eager' : 'on-demand',
|
|
417
|
+
dir: `graph://${repo.name}`,
|
|
418
|
+
entrypoint: `graph://${repo.name}/${entry.id}`,
|
|
419
|
+
isDirectory: false,
|
|
420
|
+
});
|
|
421
|
+
}
|
|
422
|
+
}
|
|
423
|
+
catch {
|
|
424
|
+
// skip repos that fail to load
|
|
425
|
+
}
|
|
426
|
+
}
|
|
427
|
+
return skills;
|
|
428
|
+
}
|
|
429
|
+
/**
|
|
430
|
+
* Load the markdown body of a skill entity by (repo, id).
|
|
431
|
+
*/
|
|
432
|
+
readGraphSkillBody(repo, id) {
|
|
433
|
+
try {
|
|
434
|
+
const graph = this.workspaceManager.getGraph(repo);
|
|
435
|
+
const entries = graph.list('skill');
|
|
436
|
+
const entry = entries.find(e => e.id === id);
|
|
437
|
+
if (!entry)
|
|
438
|
+
return `Error: skill "${id}" not found in folder "${repo}".`;
|
|
439
|
+
return entry.document?.content ?? '';
|
|
440
|
+
}
|
|
441
|
+
catch (e) {
|
|
442
|
+
return `Error loading skill "${id}" from "${repo}": ${e?.message ?? e}`;
|
|
443
|
+
}
|
|
444
|
+
}
|
|
445
|
+
/**
|
|
446
|
+
* Build a workspace identity section from graph entities.
|
|
447
|
+
* Reads organization, person, practice-area, and guideline entries
|
|
448
|
+
* to compose a concise identity summary for the system prompt.
|
|
449
|
+
* Returns null if no organization entries exist.
|
|
450
|
+
*/
|
|
451
|
+
buildWorkspaceIdentity(repos) {
|
|
452
|
+
try {
|
|
453
|
+
const listScoped = (entityType) => repos.flatMap(repo => {
|
|
454
|
+
try {
|
|
455
|
+
return this.workspaceManager.getGraph(repo.name).list(entityType);
|
|
456
|
+
}
|
|
457
|
+
catch {
|
|
458
|
+
return [];
|
|
459
|
+
}
|
|
460
|
+
});
|
|
461
|
+
const orgs = listScoped('organization');
|
|
462
|
+
if (orgs.length === 0)
|
|
463
|
+
return null;
|
|
464
|
+
const lines = ['## Workspace Identity'];
|
|
465
|
+
// Organization(s)
|
|
466
|
+
for (const org of orgs.slice(0, 3)) {
|
|
467
|
+
const name = org.data.name || org.id;
|
|
468
|
+
const industry = org.data.industry ? ` (${org.data.industry})` : '';
|
|
469
|
+
lines.push(`\n### ${name}${industry}`);
|
|
470
|
+
if (org.document.content.trim()) {
|
|
471
|
+
// Include first ~500 chars of body for context
|
|
472
|
+
const body = org.document.content.trim();
|
|
473
|
+
lines.push(body.length > 500 ? body.slice(0, 500) + '...' : body);
|
|
474
|
+
}
|
|
475
|
+
}
|
|
476
|
+
// Team
|
|
477
|
+
const people = listScoped('person');
|
|
478
|
+
if (people.length > 0) {
|
|
479
|
+
lines.push('\n### Team');
|
|
480
|
+
for (const person of people.slice(0, 15)) {
|
|
481
|
+
const name = person.data.name || person.id;
|
|
482
|
+
const role = person.data.role ? ` — ${person.data.role}` : '';
|
|
483
|
+
const location = person.data.location ? ` (${person.data.location})` : '';
|
|
484
|
+
lines.push(`- ${name}${role}${location}`);
|
|
485
|
+
}
|
|
486
|
+
}
|
|
487
|
+
// Services (capabilities + methodologies — replaces former practice areas)
|
|
488
|
+
const services = listScoped('service');
|
|
489
|
+
if (services.length > 0) {
|
|
490
|
+
lines.push('\n### Capabilities');
|
|
491
|
+
// Top-level services (no `sprint` parent) read as the firm's overall
|
|
492
|
+
// capabilities; nested services are sprint-level details. Surface
|
|
493
|
+
// top-level only here to keep the system prompt compact.
|
|
494
|
+
const topLevel = services.filter(s => !s.data.sprint);
|
|
495
|
+
const list = topLevel.length > 0 ? topLevel : services;
|
|
496
|
+
lines.push(list.map(s => s.data.name || s.id).join(', '));
|
|
497
|
+
}
|
|
498
|
+
// Guidelines (communication style, preferences) — now document.category=guideline
|
|
499
|
+
const guidelines = listScoped('document').filter(d => d.data.category === 'guideline');
|
|
500
|
+
if (guidelines.length > 0) {
|
|
501
|
+
lines.push('\n### Guidelines');
|
|
502
|
+
for (const g of guidelines.slice(0, 5)) {
|
|
503
|
+
const name = g.data.name || g.id;
|
|
504
|
+
lines.push(`\n**${name}**`);
|
|
505
|
+
if (g.document.content.trim()) {
|
|
506
|
+
const body = g.document.content.trim();
|
|
507
|
+
lines.push(body.length > 300 ? body.slice(0, 300) + '...' : body);
|
|
508
|
+
}
|
|
509
|
+
}
|
|
510
|
+
}
|
|
511
|
+
return lines.join('\n');
|
|
512
|
+
}
|
|
513
|
+
catch {
|
|
514
|
+
return null;
|
|
515
|
+
}
|
|
516
|
+
}
|
|
517
|
+
/**
|
|
518
|
+
* Per-repo subfolder summary for the system prompt. Lists each accessible
|
|
519
|
+
* repo with up to MAX_PER_REPO subfolder paths so the agent can route new
|
|
520
|
+
* entries into existing folders without calling list_folders for every
|
|
521
|
+
* decision. Refresh cadence is per-session (system prompt is built once).
|
|
522
|
+
*/
|
|
523
|
+
buildFolderInventory(repos) {
|
|
524
|
+
const MAX_PER_REPO = 8;
|
|
525
|
+
// System folders (the reserved asset store) are never a place the agent
|
|
526
|
+
// should create entries — keep them out of the folder inventory.
|
|
527
|
+
repos = repos.filter(r => !r.system);
|
|
528
|
+
if (repos.length === 0)
|
|
529
|
+
return null;
|
|
530
|
+
const lines = [];
|
|
531
|
+
for (const repo of repos) {
|
|
532
|
+
let folders = [];
|
|
533
|
+
try {
|
|
534
|
+
folders = this.workspaceManager.getGraph(repo.name).listFolders().map(f => f.path);
|
|
535
|
+
}
|
|
536
|
+
catch {
|
|
537
|
+
continue;
|
|
538
|
+
}
|
|
539
|
+
const display = repo.display_name || repo.name;
|
|
540
|
+
if (folders.length === 0) {
|
|
541
|
+
lines.push(`- **${display}** (\`${repo.name}\`): no subfolders`);
|
|
542
|
+
}
|
|
543
|
+
else {
|
|
544
|
+
const shown = folders.slice(0, MAX_PER_REPO).map(p => `\`${p}\``).join(', ');
|
|
545
|
+
const more = folders.length > MAX_PER_REPO ? ` (+${folders.length - MAX_PER_REPO} more)` : '';
|
|
546
|
+
lines.push(`- **${display}** (\`${repo.name}\`): ${shown}${more}`);
|
|
547
|
+
}
|
|
548
|
+
}
|
|
549
|
+
if (lines.length === 0)
|
|
550
|
+
return null;
|
|
551
|
+
return `## Folder Inventory\n\nExisting subfolders per repo. Prefer placing new entries in an existing folder when one fits. Folder paths are repo-relative POSIX.\n\n${lines.join('\n')}`;
|
|
552
|
+
}
|
|
200
553
|
/**
|
|
201
554
|
* Fallback system prompt when prompts/system.md is not found.
|
|
202
555
|
*/
|
|
203
|
-
getDefaultSystemPrompt() {
|
|
204
|
-
const
|
|
205
|
-
|
|
206
|
-
|
|
556
|
+
getDefaultSystemPrompt(promptRepos = this.workspaceManager.getContentRepoConfigs()) {
|
|
557
|
+
const totalEntities = promptRepos.reduce((count, repo) => {
|
|
558
|
+
try {
|
|
559
|
+
return count + this.workspaceManager.getGraph(repo.name).search({}).length;
|
|
560
|
+
}
|
|
561
|
+
catch {
|
|
562
|
+
return count;
|
|
563
|
+
}
|
|
564
|
+
}, 0);
|
|
565
|
+
const repoList = promptRepos
|
|
207
566
|
.map(r => ` - ${r.name} (${r.type}): ${r.description}`)
|
|
208
567
|
.join('\n');
|
|
209
568
|
return `# Studiograph AI Assistant
|
|
@@ -213,8 +572,8 @@ You are Studiograph, an AI assistant helping creative teams manage their knowled
|
|
|
213
572
|
## Workspace
|
|
214
573
|
|
|
215
574
|
**Team:** ${this.config.team_name}
|
|
216
|
-
**Repositories:** ${
|
|
217
|
-
**Total Entities:** ${
|
|
575
|
+
**Repositories:** ${promptRepos.length}
|
|
576
|
+
**Total Entities:** ${totalEntities}
|
|
218
577
|
|
|
219
578
|
**Available Repositories:**
|
|
220
579
|
${repoList}`;
|
|
@@ -222,46 +581,88 @@ ${repoList}`;
|
|
|
222
581
|
/**
|
|
223
582
|
* Send a message to the agent
|
|
224
583
|
*/
|
|
584
|
+
/**
|
|
585
|
+
* Send a message and await the full agent response.
|
|
586
|
+
* Uses the current session (set via switchSession) or a default session.
|
|
587
|
+
*/
|
|
225
588
|
async chat(userMessage) {
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
.
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
589
|
+
const sessionId = this.currentSessionId ?? 'default';
|
|
590
|
+
const ctx = {
|
|
591
|
+
user: this._currentUser,
|
|
592
|
+
onHighlight: this._highlightCallback,
|
|
593
|
+
onMutation: this._mutationCallback,
|
|
594
|
+
};
|
|
595
|
+
return this.pool.withAgent(sessionId, ctx, async (agent) => {
|
|
596
|
+
return new Promise((resolve, reject) => {
|
|
597
|
+
let content = '';
|
|
598
|
+
const toolCalls = [];
|
|
599
|
+
const usage = createInferenceUsageSummary();
|
|
600
|
+
const unsubscribe = agent.subscribe((event) => {
|
|
601
|
+
if (event.type === 'message_end') {
|
|
602
|
+
const msg = event.message;
|
|
603
|
+
if (msg?.role === 'assistant') {
|
|
604
|
+
addInferenceUsage(usage, msg.usage);
|
|
605
|
+
content = msg.content
|
|
606
|
+
.filter((b) => b.type === 'text')
|
|
607
|
+
.map((b) => b.text)
|
|
608
|
+
.join('');
|
|
609
|
+
for (const block of msg.content) {
|
|
610
|
+
if (block.type === 'toolCall') {
|
|
611
|
+
toolCalls.push({ tool: block.name, input: block.input, output: null });
|
|
612
|
+
}
|
|
249
613
|
}
|
|
250
614
|
}
|
|
251
615
|
}
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
616
|
+
else if (event.type === 'agent_end') {
|
|
617
|
+
unsubscribe();
|
|
618
|
+
resolve({ content, toolCalls, usage });
|
|
619
|
+
}
|
|
620
|
+
});
|
|
621
|
+
agent.prompt(userMessage).catch((error) => {
|
|
255
622
|
unsubscribe();
|
|
256
|
-
|
|
257
|
-
}
|
|
623
|
+
reject(error);
|
|
624
|
+
});
|
|
258
625
|
});
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
626
|
+
}, { userId: this._sessionUserId });
|
|
627
|
+
}
|
|
628
|
+
/**
|
|
629
|
+
* Send a message with an explicit session ID and context.
|
|
630
|
+
* Preferred over the legacy setCurrentUser + switchSession + chat pattern.
|
|
631
|
+
*/
|
|
632
|
+
async chatInSession(sessionId, userMessage, opts) {
|
|
633
|
+
const ctx = { user: opts?.user ?? null };
|
|
634
|
+
return this.pool.withAgent(sessionId, ctx, async (agent) => {
|
|
635
|
+
return new Promise((resolve, reject) => {
|
|
636
|
+
let content = '';
|
|
637
|
+
const toolCalls = [];
|
|
638
|
+
const usage = createInferenceUsageSummary();
|
|
639
|
+
const unsubscribe = agent.subscribe((event) => {
|
|
640
|
+
if (event.type === 'message_end') {
|
|
641
|
+
const msg = event.message;
|
|
642
|
+
if (msg?.role === 'assistant') {
|
|
643
|
+
addInferenceUsage(usage, msg.usage);
|
|
644
|
+
content = msg.content
|
|
645
|
+
.filter((b) => b.type === 'text')
|
|
646
|
+
.map((b) => b.text)
|
|
647
|
+
.join('');
|
|
648
|
+
for (const block of msg.content) {
|
|
649
|
+
if (block.type === 'toolCall') {
|
|
650
|
+
toolCalls.push({ tool: block.name, input: block.input, output: null });
|
|
651
|
+
}
|
|
652
|
+
}
|
|
653
|
+
}
|
|
654
|
+
}
|
|
655
|
+
else if (event.type === 'agent_end') {
|
|
656
|
+
unsubscribe();
|
|
657
|
+
resolve({ content, toolCalls, usage });
|
|
658
|
+
}
|
|
659
|
+
});
|
|
660
|
+
agent.prompt(userMessage).catch((error) => {
|
|
661
|
+
unsubscribe();
|
|
662
|
+
reject(error);
|
|
663
|
+
});
|
|
263
664
|
});
|
|
264
|
-
});
|
|
665
|
+
}, { userId: opts?.userId, fallbackHistory: opts?.fallbackHistory });
|
|
265
666
|
}
|
|
266
667
|
/**
|
|
267
668
|
* Get workspace manager (for tools)
|
|
@@ -269,6 +670,62 @@ ${repoList}`;
|
|
|
269
670
|
getWorkspaceManager() {
|
|
270
671
|
return this.workspaceManager;
|
|
271
672
|
}
|
|
673
|
+
getModelSelection() {
|
|
674
|
+
const userConfig = loadUserConfig();
|
|
675
|
+
return {
|
|
676
|
+
provider: resolveProvider(userConfig, this.config),
|
|
677
|
+
modelId: resolveModelId(userConfig, this.config),
|
|
678
|
+
};
|
|
679
|
+
}
|
|
680
|
+
/**
|
|
681
|
+
* One-shot, tool-free model call that names a conversation from its opening
|
|
682
|
+
* exchange (the ChatGPT pattern). Used by POST /api/chat/title after the
|
|
683
|
+
* first assistant reply. Deliberately lightweight: no agent pool, no tools,
|
|
684
|
+
* no system context — just the configured model and a tight instruction.
|
|
685
|
+
*
|
|
686
|
+
* Returns null (caller keeps the truncated first-message title) when there's
|
|
687
|
+
* no usable title, no API key, or we're in Studiograph Credits gateway mode —
|
|
688
|
+
* the gateway routes inference through its own client (cloud-inference-billing),
|
|
689
|
+
* not pi-ai's complete(), so a direct completeSimple() can't reach it. Titles
|
|
690
|
+
* via the gateway are a follow-up if we want them.
|
|
691
|
+
*/
|
|
692
|
+
async generateConversationTitle(firstUserMessage, assistantReply) {
|
|
693
|
+
if (isStudiographCreditsMode())
|
|
694
|
+
return null;
|
|
695
|
+
const userConfig = loadUserConfig();
|
|
696
|
+
const provider = resolveProvider(userConfig, this.config);
|
|
697
|
+
const modelId = resolveModelId(userConfig, this.config);
|
|
698
|
+
const apiKey = resolveApiKey(userConfig, this.config);
|
|
699
|
+
if (!apiKey)
|
|
700
|
+
return null;
|
|
701
|
+
const model = getModel(provider, modelId);
|
|
702
|
+
const systemPrompt = 'You name a conversation from its opening exchange. Reply with ONLY the ' +
|
|
703
|
+
'title: 3 to 6 words, Title Case, no surrounding quotes, no trailing ' +
|
|
704
|
+
'punctuation. Describe the topic, not the speaker (e.g. "Cooper Hewitt ' +
|
|
705
|
+
'DEM Sync Notes", not "User Talks About a Meeting").';
|
|
706
|
+
const userText = `First message:\n${firstUserMessage}\n\nAssistant reply:\n${assistantReply}`.slice(0, 2000);
|
|
707
|
+
// No `temperature` — newer models (e.g. claude-opus-4-7) reject it with a
|
|
708
|
+
// 400 "temperature is deprecated for this model". maxTokens is plenty for a
|
|
709
|
+
// few-word title.
|
|
710
|
+
const result = await completeSimple(model, { systemPrompt, messages: [{ role: 'user', content: userText, timestamp: Date.now() }] }, { apiKey, maxTokens: 32 });
|
|
711
|
+
// Surface provider errors (e.g. a rejected option) so the route logs them
|
|
712
|
+
// instead of silently returning null and the client keeping its fallback.
|
|
713
|
+
if (result.stopReason === 'error') {
|
|
714
|
+
throw new Error(result.errorMessage || 'title model call failed');
|
|
715
|
+
}
|
|
716
|
+
const raw = result.content
|
|
717
|
+
.filter((c) => c.type === 'text')
|
|
718
|
+
.map((c) => c.text)
|
|
719
|
+
.join('')
|
|
720
|
+
.trim();
|
|
721
|
+
// Strip wrapping quotes / trailing punctuation the model may add anyway.
|
|
722
|
+
const title = raw.replace(/^["'`]+|["'`]+$/g, '').replace(/[.!?]+$/, '').trim().slice(0, 60);
|
|
723
|
+
if (!title)
|
|
724
|
+
return null;
|
|
725
|
+
const usage = createInferenceUsageSummary();
|
|
726
|
+
addInferenceUsage(usage, result.usage);
|
|
727
|
+
return { title, usage };
|
|
728
|
+
}
|
|
272
729
|
/**
|
|
273
730
|
* Get workspace summary
|
|
274
731
|
*/
|
|
@@ -282,7 +739,7 @@ ${repoList}`;
|
|
|
282
739
|
return this.workspaceManager.getRepoNames();
|
|
283
740
|
}
|
|
284
741
|
/**
|
|
285
|
-
* Set the current authenticated user for per-
|
|
742
|
+
* Set the current authenticated user for per-folder access filtering.
|
|
286
743
|
* Called per-request by the chat endpoint. Null = full access (API key / open mode).
|
|
287
744
|
*/
|
|
288
745
|
setCurrentUser(user) {
|
|
@@ -313,14 +770,19 @@ ${repoList}`;
|
|
|
313
770
|
this._mutationCallback?.(m);
|
|
314
771
|
}
|
|
315
772
|
/**
|
|
316
|
-
* Expose the raw pi-agent-core Agent instance.
|
|
773
|
+
* Expose the raw pi-agent-core Agent instance for a session (for SSE streaming).
|
|
774
|
+
* Returns the default session agent if no sessionId specified.
|
|
317
775
|
*/
|
|
318
|
-
getAgent() {
|
|
319
|
-
return this.
|
|
776
|
+
getAgent(sessionId) {
|
|
777
|
+
return this.pool.getAgent(sessionId ?? this.currentSessionId ?? 'default');
|
|
320
778
|
}
|
|
321
|
-
/**
|
|
322
|
-
|
|
323
|
-
this.
|
|
779
|
+
/** Get the agent pool (for advanced callers that need direct pool access). */
|
|
780
|
+
getPool() {
|
|
781
|
+
return this.pool;
|
|
782
|
+
}
|
|
783
|
+
/** Abort the agent for a session. */
|
|
784
|
+
abort(sessionId) {
|
|
785
|
+
this.pool.abort(sessionId ?? this.currentSessionId ?? 'default');
|
|
324
786
|
}
|
|
325
787
|
/**
|
|
326
788
|
* Get the current session ID (null if none active).
|
|
@@ -329,105 +791,36 @@ ${repoList}`;
|
|
|
329
791
|
return this.currentSessionId;
|
|
330
792
|
}
|
|
331
793
|
/**
|
|
332
|
-
* Switch
|
|
333
|
-
*
|
|
334
|
-
* - Existing session file → restore messages from disk
|
|
335
|
-
* - No file but fallback history → inject as context message
|
|
336
|
-
* - Nothing → clear messages for a fresh start
|
|
794
|
+
* Switch session (backward compat — sets state for next chat() call).
|
|
795
|
+
* With the pool, actual session loading happens lazily in withAgent().
|
|
337
796
|
*/
|
|
338
|
-
async switchSession(sessionId, fallbackHistory) {
|
|
339
|
-
|
|
340
|
-
return;
|
|
341
|
-
// Save current session before switching
|
|
342
|
-
if (this.currentSessionId) {
|
|
343
|
-
this.saveSession();
|
|
344
|
-
}
|
|
797
|
+
async switchSession(sessionId, fallbackHistory, userId) {
|
|
798
|
+
this._sessionUserId = userId;
|
|
345
799
|
this.currentSessionId = sessionId;
|
|
346
|
-
|
|
347
|
-
//
|
|
348
|
-
const sessionPath = join(this.sessionsDir, `${sessionId}.json`);
|
|
349
|
-
if (existsSync(sessionPath)) {
|
|
350
|
-
try {
|
|
351
|
-
const data = JSON.parse(readFileSync(sessionPath, 'utf-8'));
|
|
352
|
-
if (Array.isArray(data.messages) && data.messages.length > 0) {
|
|
353
|
-
this.agent.replaceMessages(data.messages);
|
|
354
|
-
return;
|
|
355
|
-
}
|
|
356
|
-
}
|
|
357
|
-
catch {
|
|
358
|
-
// Corrupted file — fall through
|
|
359
|
-
}
|
|
360
|
-
}
|
|
361
|
-
// Fallback: inject frontend history as a context message
|
|
800
|
+
// Pre-create the agent in the pool if fallback history is provided
|
|
801
|
+
// (so the pool has the context ready when chat() runs)
|
|
362
802
|
if (fallbackHistory && fallbackHistory.length > 0) {
|
|
363
|
-
const
|
|
364
|
-
|
|
365
|
-
|
|
366
|
-
|
|
367
|
-
role: 'user',
|
|
368
|
-
content: [{ type: 'text', text: `[Prior conversation context]\n\n${transcript}` }],
|
|
369
|
-
timestamp: Date.now(),
|
|
370
|
-
};
|
|
371
|
-
this.agent.replaceMessages([contextMsg]);
|
|
372
|
-
return;
|
|
803
|
+
const ctx = { user: this._currentUser };
|
|
804
|
+
await this.pool.withAgent(sessionId, ctx, async () => {
|
|
805
|
+
// Agent is created and loaded — nothing else to do
|
|
806
|
+
}, { userId, fallbackHistory });
|
|
373
807
|
}
|
|
374
|
-
// Fresh start
|
|
375
|
-
this.agent.clearMessages();
|
|
376
808
|
}
|
|
377
809
|
/**
|
|
378
|
-
* Save
|
|
810
|
+
* Save session (backward compat — pool auto-saves after each withAgent call).
|
|
379
811
|
*/
|
|
380
812
|
saveSession() {
|
|
381
|
-
|
|
382
|
-
return;
|
|
383
|
-
const messages = this.agent.state.messages;
|
|
384
|
-
if (messages.length === 0)
|
|
385
|
-
return;
|
|
386
|
-
if (!existsSync(this.sessionsDir)) {
|
|
387
|
-
mkdirSync(this.sessionsDir, { recursive: true });
|
|
388
|
-
}
|
|
389
|
-
const sessionPath = join(this.sessionsDir, `${this.currentSessionId}.json`);
|
|
390
|
-
writeFileSync(sessionPath, JSON.stringify({
|
|
391
|
-
sessionId: this.currentSessionId,
|
|
392
|
-
updatedAt: new Date().toISOString(),
|
|
393
|
-
messages,
|
|
394
|
-
}), 'utf-8');
|
|
395
|
-
this.pruneSessions(20);
|
|
813
|
+
// Pool handles session persistence automatically
|
|
396
814
|
}
|
|
397
815
|
/**
|
|
398
816
|
* Clear all saved sessions from disk.
|
|
399
817
|
*/
|
|
400
818
|
clearSessions() {
|
|
401
|
-
|
|
402
|
-
return 0;
|
|
403
|
-
const files = readdirSync(this.sessionsDir).filter(f => f.endsWith('.json'));
|
|
404
|
-
for (const f of files) {
|
|
405
|
-
try {
|
|
406
|
-
unlinkSync(join(this.sessionsDir, f));
|
|
407
|
-
}
|
|
408
|
-
catch { /* ignore */ }
|
|
409
|
-
}
|
|
410
|
-
return files.length;
|
|
819
|
+
return this.pool.clearSessions(this._sessionUserId);
|
|
411
820
|
}
|
|
412
|
-
/**
|
|
413
|
-
|
|
414
|
-
|
|
415
|
-
pruneSessions(keep) {
|
|
416
|
-
if (!existsSync(this.sessionsDir))
|
|
417
|
-
return;
|
|
418
|
-
const files = readdirSync(this.sessionsDir)
|
|
419
|
-
.filter(f => f.endsWith('.json'))
|
|
420
|
-
.map(f => {
|
|
421
|
-
const p = join(this.sessionsDir, f);
|
|
422
|
-
return { name: f, path: p, mtime: statSync(p).mtimeMs };
|
|
423
|
-
})
|
|
424
|
-
.sort((a, b) => b.mtime - a.mtime);
|
|
425
|
-
for (const file of files.slice(keep)) {
|
|
426
|
-
try {
|
|
427
|
-
unlinkSync(file.path);
|
|
428
|
-
}
|
|
429
|
-
catch { /* ignore */ }
|
|
430
|
-
}
|
|
821
|
+
/** Shut down the agent pool (save all sessions, stop idle reaper). */
|
|
822
|
+
async shutdown() {
|
|
823
|
+
await this.pool.shutdown();
|
|
431
824
|
}
|
|
432
825
|
}
|
|
433
826
|
//# sourceMappingURL=orchestrator.js.map
|