studiograph 1.3.47 → 1.3.48-beta.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +26 -16
- package/dist/agent/agent-pool.d.ts +117 -0
- package/dist/agent/agent-pool.js +287 -0
- package/dist/agent/agent-pool.js.map +1 -0
- package/dist/agent/followups.d.ts +34 -0
- package/dist/agent/followups.js +52 -0
- package/dist/agent/followups.js.map +1 -0
- package/dist/agent/orchestrator.d.ts +113 -22
- package/dist/agent/orchestrator.js +573 -181
- package/dist/agent/orchestrator.js.map +1 -1
- package/dist/agent/prompts/entity-types-section.d.ts +36 -0
- package/dist/agent/prompts/entity-types-section.js +90 -0
- package/dist/agent/prompts/entity-types-section.js.map +1 -0
- package/dist/agent/prompts/system.md +148 -69
- package/dist/agent/skill-loader.d.ts +30 -17
- package/dist/agent/skill-loader.js +63 -30
- package/dist/agent/skill-loader.js.map +1 -1
- package/dist/agent/skills/entity-schema.md +77 -433
- package/dist/agent/skills/interview/entity-templates.md +193 -0
- package/dist/agent/skills/interview/question-domains.md +391 -0
- package/dist/agent/skills/interview/skill.md +204 -0
- package/dist/agent/skills/schema-rules.md +54 -0
- package/dist/agent/tools/capture-tools.d.ts +31 -0
- package/dist/agent/tools/capture-tools.js +40 -0
- package/dist/agent/tools/capture-tools.js.map +1 -0
- package/dist/agent/tools/folder-tools.d.ts +47 -0
- package/dist/agent/tools/folder-tools.js +249 -0
- package/dist/agent/tools/folder-tools.js.map +1 -0
- package/dist/agent/tools/fs-tools.d.ts +7 -6
- package/dist/agent/tools/fs-tools.js +5 -4
- package/dist/agent/tools/fs-tools.js.map +1 -1
- package/dist/agent/tools/graph-tools.d.ts +21 -58
- package/dist/agent/tools/graph-tools.js +635 -332
- package/dist/agent/tools/graph-tools.js.map +1 -1
- package/dist/agent/tools/history-tools.d.ts +95 -0
- package/dist/agent/tools/history-tools.js +461 -0
- package/dist/agent/tools/history-tools.js.map +1 -0
- package/dist/agent/tools/load-skill.d.ts +6 -5
- package/dist/agent/tools/load-skill.js +3 -3
- package/dist/agent/tools/load-skill.js.map +1 -1
- package/dist/agent/tools/ops-tools.d.ts +5 -4
- package/dist/agent/tools/ops-tools.js +130 -236
- package/dist/agent/tools/ops-tools.js.map +1 -1
- package/dist/agent/tools/permission-tools.d.ts +87 -17
- package/dist/agent/tools/permission-tools.js +233 -38
- package/dist/agent/tools/permission-tools.js.map +1 -1
- package/dist/agent/tools/tool-loader.js +5 -4
- package/dist/agent/tools/tool-loader.js.map +1 -1
- package/dist/agent/tools/web-tools.d.ts +18 -0
- package/dist/agent/tools/web-tools.js +283 -0
- package/dist/agent/tools/web-tools.js.map +1 -0
- package/dist/cli/commands/about.d.ts +1 -0
- package/dist/cli/commands/about.js +55 -3
- package/dist/cli/commands/about.js.map +1 -1
- package/dist/cli/commands/admin/audit-workspace.d.ts +23 -0
- package/dist/cli/commands/admin/audit-workspace.js +133 -0
- package/dist/cli/commands/admin/audit-workspace.js.map +1 -0
- package/dist/cli/commands/admin/audit.d.ts +21 -0
- package/dist/cli/commands/admin/audit.js +174 -0
- package/dist/cli/commands/admin/audit.js.map +1 -0
- package/dist/cli/commands/admin/backup.d.ts +54 -0
- package/dist/cli/commands/admin/backup.js +207 -0
- package/dist/cli/commands/admin/backup.js.map +1 -0
- package/dist/cli/commands/admin/folder.d.ts +11 -0
- package/dist/cli/commands/admin/folder.js +186 -0
- package/dist/cli/commands/admin/folder.js.map +1 -0
- package/dist/cli/commands/admin/index.d.ts +16 -0
- package/dist/cli/commands/admin/index.js +46 -0
- package/dist/cli/commands/admin/index.js.map +1 -0
- package/dist/cli/commands/admin/migrate-assets.d.ts +53 -0
- package/dist/cli/commands/admin/migrate-assets.js +184 -0
- package/dist/cli/commands/admin/migrate-assets.js.map +1 -0
- package/dist/cli/commands/admin/migrate.d.ts +56 -0
- package/dist/cli/commands/admin/migrate.js +263 -0
- package/dist/cli/commands/admin/migrate.js.map +1 -0
- package/dist/cli/commands/admin/restore.d.ts +24 -0
- package/dist/cli/commands/admin/restore.js +228 -0
- package/dist/cli/commands/admin/restore.js.map +1 -0
- package/dist/cli/commands/admin/secrets.d.ts +23 -0
- package/dist/cli/commands/admin/secrets.js +256 -0
- package/dist/cli/commands/admin/secrets.js.map +1 -0
- package/dist/cli/commands/admin/settings.d.ts +28 -0
- package/dist/cli/commands/admin/settings.js +284 -0
- package/dist/cli/commands/admin/settings.js.map +1 -0
- package/dist/cli/commands/admin/token.d.ts +42 -0
- package/dist/cli/commands/admin/token.js +126 -0
- package/dist/cli/commands/admin/token.js.map +1 -0
- package/dist/cli/commands/admin/transfer-ownership.d.ts +15 -0
- package/dist/cli/commands/admin/transfer-ownership.js +106 -0
- package/dist/cli/commands/admin/transfer-ownership.js.map +1 -0
- package/dist/cli/commands/admin/user.d.ts +11 -0
- package/dist/cli/commands/admin/user.js +187 -0
- package/dist/cli/commands/admin/user.js.map +1 -0
- package/dist/cli/commands/clone.d.ts +25 -3
- package/dist/cli/commands/clone.js +142 -36
- package/dist/cli/commands/clone.js.map +1 -1
- package/dist/cli/commands/commit.d.ts +1 -1
- package/dist/cli/commands/commit.js +24 -11
- package/dist/cli/commands/commit.js.map +1 -1
- package/dist/cli/commands/config.d.ts +23 -107
- package/dist/cli/commands/config.js +52 -260
- package/dist/cli/commands/config.js.map +1 -1
- package/dist/cli/commands/connector.d.ts +10 -13
- package/dist/cli/commands/connector.js +16 -58
- package/dist/cli/commands/connector.js.map +1 -1
- package/dist/cli/commands/deploy.js +215 -68
- package/dist/cli/commands/deploy.js.map +1 -1
- package/dist/cli/commands/index.js +2 -2
- package/dist/cli/commands/index.js.map +1 -1
- package/dist/cli/commands/init.js +10 -30
- package/dist/cli/commands/init.js.map +1 -1
- package/dist/cli/commands/mcp.js +12 -4
- package/dist/cli/commands/mcp.js.map +1 -1
- package/dist/cli/commands/orphans.js +14 -30
- package/dist/cli/commands/orphans.js.map +1 -1
- package/dist/cli/commands/r2.d.ts +3 -0
- package/dist/cli/commands/r2.js +223 -204
- package/dist/cli/commands/r2.js.map +1 -1
- package/dist/cli/commands/redeploy.js +65 -12
- package/dist/cli/commands/redeploy.js.map +1 -1
- package/dist/cli/commands/reset.d.ts +22 -6
- package/dist/cli/commands/reset.js +142 -63
- package/dist/cli/commands/reset.js.map +1 -1
- package/dist/cli/commands/serve.js +209 -24
- package/dist/cli/commands/serve.js.map +1 -1
- package/dist/cli/commands/sync.d.ts +1 -1
- package/dist/cli/commands/sync.js +372 -202
- package/dist/cli/commands/sync.js.map +1 -1
- package/dist/cli/crypto-bundle.d.ts +39 -0
- package/dist/cli/crypto-bundle.js +94 -0
- package/dist/cli/crypto-bundle.js.map +1 -0
- package/dist/cli/index.js +24 -35
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/railway-pin.d.ts +68 -0
- package/dist/cli/railway-pin.js +96 -0
- package/dist/cli/railway-pin.js.map +1 -0
- package/dist/cli/railway-provisioning.d.ts +53 -0
- package/dist/cli/railway-provisioning.js +85 -0
- package/dist/cli/railway-provisioning.js.map +1 -0
- package/dist/cli/setup-wizard.d.ts +33 -52
- package/dist/cli/setup-wizard.js +43 -68
- package/dist/cli/setup-wizard.js.map +1 -1
- package/dist/core/accent-palette.d.ts +22 -0
- package/dist/core/accent-palette.js +47 -0
- package/dist/core/accent-palette.js.map +1 -0
- package/dist/core/cell-anchor.d.ts +29 -0
- package/dist/core/cell-anchor.js +53 -0
- package/dist/core/cell-anchor.js.map +1 -0
- package/dist/core/comment-anchor.d.ts +41 -0
- package/dist/core/comment-anchor.js +147 -0
- package/dist/core/comment-anchor.js.map +1 -0
- package/dist/core/commit-messages.d.ts +57 -0
- package/dist/core/commit-messages.js +85 -0
- package/dist/core/commit-messages.js.map +1 -0
- package/dist/core/embeds.d.ts +56 -0
- package/dist/core/embeds.js +103 -0
- package/dist/core/embeds.js.map +1 -0
- package/dist/core/entity-body-templates.d.ts +21 -0
- package/dist/core/entity-body-templates.js +53 -0
- package/dist/core/entity-body-templates.js.map +1 -0
- package/dist/core/entity-types-catalog.d.ts +65 -0
- package/dist/core/entity-types-catalog.js +140 -0
- package/dist/core/entity-types-catalog.js.map +1 -0
- package/dist/core/folder-paths.d.ts +41 -0
- package/dist/core/folder-paths.js +95 -0
- package/dist/core/folder-paths.js.map +1 -0
- package/dist/core/folder-sidecar.d.ts +36 -0
- package/dist/core/folder-sidecar.js +91 -0
- package/dist/core/folder-sidecar.js.map +1 -0
- package/dist/core/graph.d.ts +675 -14
- package/dist/core/graph.js +2118 -314
- package/dist/core/graph.js.map +1 -1
- package/dist/core/history-diff.d.ts +35 -0
- package/dist/core/history-diff.js +114 -0
- package/dist/core/history-diff.js.map +1 -0
- package/dist/core/schema-registry.d.ts +59 -0
- package/dist/core/schema-registry.js +198 -0
- package/dist/core/schema-registry.js.map +1 -1
- package/dist/core/schemas/connector.d.ts +67 -0
- package/dist/core/schemas/connector.js +100 -0
- package/dist/core/schemas/connector.js.map +1 -0
- package/dist/core/schemas/workspace.d.ts +122 -0
- package/dist/core/schemas/workspace.js +211 -0
- package/dist/core/schemas/workspace.js.map +1 -0
- package/dist/core/secrets/SecretStore.d.ts +77 -0
- package/dist/core/secrets/SecretStore.js +13 -0
- package/dist/core/secrets/SecretStore.js.map +1 -0
- package/dist/core/secrets/SettingsResolver.d.ts +54 -0
- package/dist/core/secrets/SettingsResolver.js +80 -0
- package/dist/core/secrets/SettingsResolver.js.map +1 -0
- package/dist/core/secrets/SettingsStore.d.ts +30 -0
- package/dist/core/secrets/SettingsStore.js +9 -0
- package/dist/core/secrets/SettingsStore.js.map +1 -0
- package/dist/core/secrets/SqliteEncryptedStore.d.ts +90 -0
- package/dist/core/secrets/SqliteEncryptedStore.js +598 -0
- package/dist/core/secrets/SqliteEncryptedStore.js.map +1 -0
- package/dist/core/secrets/audit.d.ts +36 -0
- package/dist/core/secrets/audit.js +60 -0
- package/dist/core/secrets/audit.js.map +1 -0
- package/dist/core/secrets/auth-db-migration.d.ts +129 -0
- package/dist/core/secrets/auth-db-migration.js +653 -0
- package/dist/core/secrets/auth-db-migration.js.map +1 -0
- package/dist/core/secrets/bundle.d.ts +141 -0
- package/dist/core/secrets/bundle.js +435 -0
- package/dist/core/secrets/bundle.js.map +1 -0
- package/dist/core/secrets/dual-write.d.ts +81 -0
- package/dist/core/secrets/dual-write.js +247 -0
- package/dist/core/secrets/dual-write.js.map +1 -0
- package/dist/core/secrets/encryption.d.ts +44 -0
- package/dist/core/secrets/encryption.js +97 -0
- package/dist/core/secrets/encryption.js.map +1 -0
- package/dist/core/secrets/index.d.ts +49 -0
- package/dist/core/secrets/index.js +74 -0
- package/dist/core/secrets/index.js.map +1 -0
- package/dist/core/secrets/master-key.d.ts +38 -0
- package/dist/core/secrets/master-key.js +122 -0
- package/dist/core/secrets/master-key.js.map +1 -0
- package/dist/core/secrets/probes/anthropic.d.ts +98 -0
- package/dist/core/secrets/probes/anthropic.js +300 -0
- package/dist/core/secrets/probes/anthropic.js.map +1 -0
- package/dist/core/secrets/probes/brave.d.ts +9 -0
- package/dist/core/secrets/probes/brave.js +15 -0
- package/dist/core/secrets/probes/brave.js.map +1 -0
- package/dist/core/secrets/probes/r2.d.ts +15 -0
- package/dist/core/secrets/probes/r2.js +14 -0
- package/dist/core/secrets/probes/r2.js.map +1 -0
- package/dist/core/secrets/probes/voyage.d.ts +13 -0
- package/dist/core/secrets/probes/voyage.js +52 -0
- package/dist/core/secrets/probes/voyage.js.map +1 -0
- package/dist/core/secrets/r2-structural-migration.d.ts +39 -0
- package/dist/core/secrets/r2-structural-migration.js +109 -0
- package/dist/core/secrets/r2-structural-migration.js.map +1 -0
- package/dist/core/secrets/read-flip.d.ts +59 -0
- package/dist/core/secrets/read-flip.js +87 -0
- package/dist/core/secrets/read-flip.js.map +1 -0
- package/dist/core/secrets/registry.d.ts +188 -0
- package/dist/core/secrets/registry.js +598 -0
- package/dist/core/secrets/registry.js.map +1 -0
- package/dist/core/types.d.ts +77 -455
- package/dist/core/types.js +17 -3
- package/dist/core/types.js.map +1 -1
- package/dist/core/user-config.d.ts +75 -7
- package/dist/core/user-config.js +155 -7
- package/dist/core/user-config.js.map +1 -1
- package/dist/core/validation.d.ts +717 -1791
- package/dist/core/validation.js +357 -228
- package/dist/core/validation.js.map +1 -1
- package/dist/core/workspace-manager.d.ts +79 -12
- package/dist/core/workspace-manager.js +213 -73
- package/dist/core/workspace-manager.js.map +1 -1
- package/dist/core/workspace.d.ts +19 -5
- package/dist/core/workspace.js +69 -35
- package/dist/core/workspace.js.map +1 -1
- package/dist/mcp/comment-virtual-entity.d.ts +36 -0
- package/dist/mcp/comment-virtual-entity.js +71 -0
- package/dist/mcp/comment-virtual-entity.js.map +1 -0
- package/dist/mcp/connector-manager.d.ts +94 -13
- package/dist/mcp/connector-manager.js +283 -62
- package/dist/mcp/connector-manager.js.map +1 -1
- package/dist/mcp/oauth-provider.d.ts +27 -33
- package/dist/mcp/oauth-provider.js +65 -134
- package/dist/mcp/oauth-provider.js.map +1 -1
- package/dist/mcp/oauth-registry.d.ts +62 -0
- package/dist/mcp/oauth-registry.js +85 -0
- package/dist/mcp/oauth-registry.js.map +1 -0
- package/dist/mcp/server.d.ts +11 -3
- package/dist/mcp/server.js +30 -5
- package/dist/mcp/server.js.map +1 -1
- package/dist/mcp/state-signer.d.ts +41 -0
- package/dist/mcp/state-signer.js +120 -0
- package/dist/mcp/state-signer.js.map +1 -0
- package/dist/mcp/tools.d.ts +35 -2
- package/dist/mcp/tools.js +1051 -117
- package/dist/mcp/tools.js.map +1 -1
- package/dist/server/__tests__/helpers/graph-api.d.ts +18 -0
- package/dist/server/__tests__/helpers/graph-api.js +16 -0
- package/dist/server/__tests__/helpers/graph-api.js.map +1 -0
- package/dist/server/body-write-coordinator.d.ts +151 -0
- package/dist/server/body-write-coordinator.js +161 -0
- package/dist/server/body-write-coordinator.js.map +1 -0
- package/dist/server/cloud-billing-flow.d.ts +32 -0
- package/dist/server/cloud-billing-flow.js +75 -0
- package/dist/server/cloud-billing-flow.js.map +1 -0
- package/dist/server/commit-audit.d.ts +26 -0
- package/dist/server/commit-audit.js +30 -0
- package/dist/server/commit-audit.js.map +1 -0
- package/dist/server/index.d.ts +14 -3
- package/dist/server/index.js +451 -193
- package/dist/server/index.js.map +1 -1
- package/dist/server/middleware/sanitize.d.ts +46 -0
- package/dist/server/middleware/sanitize.js +171 -0
- package/dist/server/middleware/sanitize.js.map +1 -0
- package/dist/server/routes/asset-api.d.ts +10 -0
- package/dist/server/routes/asset-api.js +294 -0
- package/dist/server/routes/asset-api.js.map +1 -0
- package/dist/server/routes/audit-api.d.ts +24 -0
- package/dist/server/routes/audit-api.js +117 -0
- package/dist/server/routes/audit-api.js.map +1 -0
- package/dist/server/routes/auth-api.d.ts +3 -2
- package/dist/server/routes/auth-api.js +519 -38
- package/dist/server/routes/auth-api.js.map +1 -1
- package/dist/server/routes/capture-api.d.ts +18 -0
- package/dist/server/routes/capture-api.js +257 -0
- package/dist/server/routes/capture-api.js.map +1 -0
- package/dist/server/routes/chat.d.ts +4 -1
- package/dist/server/routes/chat.js +298 -88
- package/dist/server/routes/chat.js.map +1 -1
- package/dist/server/routes/comments-api.d.ts +15 -0
- package/dist/server/routes/comments-api.js +444 -0
- package/dist/server/routes/comments-api.js.map +1 -0
- package/dist/server/routes/config-api.d.ts +21 -0
- package/dist/server/routes/config-api.js +256 -0
- package/dist/server/routes/config-api.js.map +1 -0
- package/dist/server/routes/connectors-api.d.ts +17 -0
- package/dist/server/routes/connectors-api.js +410 -0
- package/dist/server/routes/connectors-api.js.map +1 -0
- package/dist/server/routes/event-ingest-api.d.ts +15 -0
- package/dist/server/routes/event-ingest-api.js +125 -0
- package/dist/server/routes/event-ingest-api.js.map +1 -0
- package/dist/server/routes/git-http.d.ts +3 -3
- package/dist/server/routes/git-http.js +86 -38
- package/dist/server/routes/git-http.js.map +1 -1
- package/dist/server/routes/graph-api-access.d.ts +35 -0
- package/dist/server/routes/graph-api-access.js +105 -0
- package/dist/server/routes/graph-api-access.js.map +1 -0
- package/dist/server/routes/graph-api.d.ts +3 -2
- package/dist/server/routes/graph-api.js +1321 -263
- package/dist/server/routes/graph-api.js.map +1 -1
- package/dist/server/routes/health.d.ts +18 -0
- package/dist/server/routes/health.js +74 -0
- package/dist/server/routes/health.js.map +1 -0
- package/dist/server/routes/insights-api.d.ts +1 -2
- package/dist/server/routes/insights-api.js +149 -41
- package/dist/server/routes/insights-api.js.map +1 -1
- package/dist/server/routes/mcp.d.ts +7 -3
- package/dist/server/routes/mcp.js +22 -6
- package/dist/server/routes/mcp.js.map +1 -1
- package/dist/server/routes/permissions-api.d.ts +9 -2
- package/dist/server/routes/permissions-api.js +87 -30
- package/dist/server/routes/permissions-api.js.map +1 -1
- package/dist/server/routes/r2-api.d.ts +25 -0
- package/dist/server/routes/r2-api.js +276 -0
- package/dist/server/routes/r2-api.js.map +1 -0
- package/dist/server/routes/secrets-api.d.ts +36 -0
- package/dist/server/routes/secrets-api.js +308 -0
- package/dist/server/routes/secrets-api.js.map +1 -0
- package/dist/server/routes/settings-api.d.ts +29 -0
- package/dist/server/routes/settings-api.js +180 -0
- package/dist/server/routes/settings-api.js.map +1 -0
- package/dist/server/routes/url-api.d.ts +7 -0
- package/dist/server/routes/url-api.js +74 -0
- package/dist/server/routes/url-api.js.map +1 -0
- package/dist/server/routes/views-api.js +81 -7
- package/dist/server/routes/views-api.js.map +1 -1
- package/dist/server/routes/workspace-api.d.ts +2 -1
- package/dist/server/routes/workspace-api.js +124 -35
- package/dist/server/routes/workspace-api.js.map +1 -1
- package/dist/server/routes/ws.d.ts +2 -1
- package/dist/server/routes/ws.js +64 -16
- package/dist/server/routes/ws.js.map +1 -1
- package/dist/server/session-manager.d.ts +48 -5
- package/dist/server/session-manager.js +182 -15
- package/dist/server/session-manager.js.map +1 -1
- package/dist/server/ws-hub.d.ts +138 -14
- package/dist/server/ws-hub.js +0 -0
- package/dist/server/ws-hub.js.map +1 -1
- package/dist/server/yjs-manager.d.ts +285 -7
- package/dist/server/yjs-manager.js +907 -36
- package/dist/server/yjs-manager.js.map +1 -1
- package/dist/server/yjs-persistence.d.ts +165 -0
- package/dist/server/yjs-persistence.js +557 -0
- package/dist/server/yjs-persistence.js.map +1 -0
- package/dist/server/yjs-text-diff.d.ts +32 -0
- package/dist/server/yjs-text-diff.js +61 -0
- package/dist/server/yjs-text-diff.js.map +1 -0
- package/dist/services/access-control.d.ts +73 -0
- package/dist/services/access-control.js +146 -0
- package/dist/services/access-control.js.map +1 -0
- package/dist/services/asset-listing.d.ts +39 -0
- package/dist/services/asset-listing.js +125 -0
- package/dist/services/asset-listing.js.map +1 -0
- package/dist/services/asset-upload-service.d.ts +53 -0
- package/dist/services/asset-upload-service.js +201 -0
- package/dist/services/asset-upload-service.js.map +1 -0
- package/dist/services/assets/asset-index-service.d.ts +82 -0
- package/dist/services/assets/asset-index-service.js +167 -0
- package/dist/services/assets/asset-index-service.js.map +1 -0
- package/dist/services/assets/base.d.ts +44 -0
- package/dist/services/assets/base.js +55 -0
- package/dist/services/assets/base.js.map +1 -1
- package/dist/services/assets/index.d.ts +69 -1
- package/dist/services/assets/index.js +125 -0
- package/dist/services/assets/index.js.map +1 -1
- package/dist/services/assets/local.d.ts +12 -1
- package/dist/services/assets/local.js +100 -1
- package/dist/services/assets/local.js.map +1 -1
- package/dist/services/assets/r2-sync.d.ts +88 -0
- package/dist/services/assets/r2-sync.js +412 -0
- package/dist/services/assets/r2-sync.js.map +1 -0
- package/dist/services/assets/r2.d.ts +34 -1
- package/dist/services/assets/r2.js +93 -1
- package/dist/services/assets/r2.js.map +1 -1
- package/dist/services/auth-service.d.ts +314 -36
- package/dist/services/auth-service.js +1126 -139
- package/dist/services/auth-service.js.map +1 -1
- package/dist/services/bookmark-import-service.d.ts +49 -0
- package/dist/services/bookmark-import-service.js +250 -0
- package/dist/services/bookmark-import-service.js.map +1 -0
- package/dist/services/cloud-inference-billing.d.ts +64 -0
- package/dist/services/cloud-inference-billing.js +313 -0
- package/dist/services/cloud-inference-billing.js.map +1 -0
- package/dist/services/comment-service.d.ts +97 -0
- package/dist/services/comment-service.js +341 -0
- package/dist/services/comment-service.js.map +1 -0
- package/dist/services/csv-service.d.ts +22 -17
- package/dist/services/csv-service.js +55 -92
- package/dist/services/csv-service.js.map +1 -1
- package/dist/services/entity-mutations.d.ts +161 -0
- package/dist/services/entity-mutations.js +296 -0
- package/dist/services/entity-mutations.js.map +1 -0
- package/dist/services/event-processor.d.ts +104 -0
- package/dist/services/event-processor.js +441 -0
- package/dist/services/event-processor.js.map +1 -0
- package/dist/services/folder-creation.d.ts +33 -0
- package/dist/services/folder-creation.js +103 -0
- package/dist/services/folder-creation.js.map +1 -0
- package/dist/services/git.d.ts +54 -0
- package/dist/services/git.js +188 -54
- package/dist/services/git.js.map +1 -1
- package/dist/services/graph-maintenance.d.ts +42 -0
- package/dist/services/graph-maintenance.js +143 -0
- package/dist/services/graph-maintenance.js.map +1 -0
- package/dist/services/import-service.d.ts +45 -2
- package/dist/services/import-service.js +304 -100
- package/dist/services/import-service.js.map +1 -1
- package/dist/services/lint-service.js +9 -16
- package/dist/services/lint-service.js.map +1 -1
- package/dist/services/markdown.d.ts +12 -1
- package/dist/services/markdown.js +71 -6
- package/dist/services/markdown.js.map +1 -1
- package/dist/services/memory-service.d.ts +22 -14
- package/dist/services/memory-service.js +53 -35
- package/dist/services/memory-service.js.map +1 -1
- package/dist/services/mention-detector.d.ts +23 -0
- package/dist/services/mention-detector.js +47 -0
- package/dist/services/mention-detector.js.map +1 -0
- package/dist/services/notification-broadcast.d.ts +32 -0
- package/dist/services/notification-broadcast.js +38 -0
- package/dist/services/notification-broadcast.js.map +1 -0
- package/dist/services/notification-service.d.ts +41 -0
- package/dist/services/notification-service.js +100 -0
- package/dist/services/notification-service.js.map +1 -0
- package/dist/services/personal-folder.d.ts +40 -0
- package/dist/services/personal-folder.js +101 -0
- package/dist/services/personal-folder.js.map +1 -0
- package/dist/services/user-person-bridge.d.ts +118 -0
- package/dist/services/user-person-bridge.js +306 -0
- package/dist/services/user-person-bridge.js.map +1 -0
- package/dist/services/vector-service.d.ts +146 -6
- package/dist/services/vector-service.js +276 -13
- package/dist/services/vector-service.js.map +1 -1
- package/dist/services/workspace-access.d.ts +106 -0
- package/dist/services/workspace-access.js +149 -0
- package/dist/services/workspace-access.js.map +1 -0
- package/dist/utils/git.d.ts +17 -2
- package/dist/utils/git.js +23 -7
- package/dist/utils/git.js.map +1 -1
- package/dist/utils/log.d.ts +42 -0
- package/dist/utils/log.js +137 -0
- package/dist/utils/log.js.map +1 -0
- package/dist/utils/preflight.js +2 -2
- package/dist/utils/preflight.js.map +1 -1
- package/dist/utils/version-checker.d.ts +12 -19
- package/dist/utils/version-checker.js +14 -104
- package/dist/utils/version-checker.js.map +1 -1
- package/dist/web/_app/immutable/assets/0.DOumm94J.css +2 -0
- package/dist/web/_app/immutable/assets/13.DlIf1mKh.css +1 -0
- package/dist/web/_app/immutable/assets/14.7d-Q37wc.css +1 -0
- package/dist/web/_app/immutable/assets/15.CmLrbzZp.css +1 -0
- package/dist/web/_app/immutable/assets/2.BftNiAA4.css +1 -0
- package/dist/web/_app/immutable/assets/3.CV0abekd.css +1 -0
- package/dist/web/_app/immutable/assets/4.BgXzUTTk.css +1 -0
- package/dist/web/_app/immutable/assets/9.gsF-Ne6_.css +1 -0
- package/dist/web/_app/immutable/assets/AgentOverlay.CpvH9rhf.css +1 -0
- package/dist/web/_app/immutable/assets/AssetManagerModal.BKJfPAPk.css +1 -0
- package/dist/web/_app/immutable/assets/CalendarView.bNewSxkH.css +1 -0
- package/dist/web/_app/immutable/assets/ChevronDown.Bz0FjM7b.css +1 -0
- package/dist/web/_app/immutable/assets/FolderMembersPanel.DX1oBeF_.css +1 -0
- package/dist/web/_app/immutable/assets/FolderMutationDialogs.BMRF6Z3z.css +1 -0
- package/dist/web/_app/immutable/assets/FolderPicker.B5KdvRYl.css +1 -0
- package/dist/web/_app/immutable/assets/GalleryView.DgvSjS0I.css +1 -0
- package/dist/web/_app/immutable/assets/GraphView.BJtGL9py.css +1 -0
- package/dist/web/_app/immutable/assets/KanbanView.D0QbZFd6.css +1 -0
- package/dist/web/_app/immutable/assets/SettingsDialog.DYWYMFSO.css +1 -0
- package/dist/web/_app/immutable/assets/Spinner.UBfl0pab.css +1 -0
- package/dist/web/_app/immutable/assets/StopFilledAlt.CkPrHdPD.css +1 -0
- package/dist/web/_app/immutable/assets/TimelineView.DA-H6dvv.css +1 -0
- package/dist/web/_app/immutable/assets/WorkspaceView.BS1ildu7.css +1 -0
- package/dist/web/_app/immutable/assets/button.BlLm4Dg1.css +1 -0
- package/dist/web/_app/immutable/assets/formatting.vV0ne105.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.BrRrAiZ7.css +1 -0
- package/dist/web/_app/immutable/assets/realtime.DDCWxn3B.css +1 -0
- package/dist/web/_app/immutable/assets/sheet.DJPuqnTg.css +1 -0
- package/dist/web/_app/immutable/assets/speech-dictation.C5CYFhS1.css +1 -0
- package/dist/web/_app/immutable/chunks/0edH8sO82.js +1 -0
- package/dist/web/_app/immutable/chunks/0iDDDyaZ.js +1 -0
- package/dist/web/_app/immutable/chunks/7-y0CE1z.js +1 -0
- package/dist/web/_app/immutable/chunks/7Bu427my2.js +184 -0
- package/dist/web/_app/immutable/chunks/B-V5eMSw2.js +1 -0
- package/dist/web/_app/immutable/chunks/B-i9_YVM.js +1 -0
- package/dist/web/_app/immutable/chunks/B15-kvCe.js +1 -0
- package/dist/web/_app/immutable/chunks/B4cFqqUS.js +3 -0
- package/dist/web/_app/immutable/chunks/B6Lt-qaJ.js +1 -0
- package/dist/web/_app/immutable/chunks/B7hznOQp.js +1 -0
- package/dist/web/_app/immutable/chunks/B7tbGyiU2.js +1 -0
- package/dist/web/_app/immutable/chunks/B8-Lm86o2.js +1 -0
- package/dist/web/_app/immutable/chunks/BBxt8lpa.js +1 -0
- package/dist/web/_app/immutable/chunks/BCaRi2AF.js +1 -0
- package/dist/web/_app/immutable/chunks/BJReLGMs.js +1 -0
- package/dist/web/_app/immutable/chunks/BKzV82vD2.js +83 -0
- package/dist/web/_app/immutable/chunks/BLHrJvbG.js +1 -0
- package/dist/web/_app/immutable/chunks/BQULA6er.js +4 -0
- package/dist/web/_app/immutable/chunks/BQW-EDgP2.js +224 -0
- package/dist/web/_app/immutable/chunks/BR6jMpLB.js +1 -0
- package/dist/web/_app/immutable/chunks/BUBMGU8t2.js +2 -0
- package/dist/web/_app/immutable/chunks/BVnuLlVg.js +1 -0
- package/dist/web/_app/immutable/chunks/BYokDzwE.js +1 -0
- package/dist/web/_app/immutable/chunks/B_Avv9jQ2.js +1 -0
- package/dist/web/_app/immutable/chunks/Bbp76jaT2.js +1 -0
- package/dist/web/_app/immutable/chunks/BddNmQ8j.js +1 -0
- package/dist/web/_app/immutable/chunks/BiJjH5mJ.js +2 -0
- package/dist/web/_app/immutable/chunks/BlyFGPFV.js +22 -0
- package/dist/web/_app/immutable/chunks/Bt88HrRx.js +1 -0
- package/dist/web/_app/immutable/chunks/Bu2iU6hh.js +67 -0
- package/dist/web/_app/immutable/chunks/Buih1pxI.js +1 -0
- package/dist/web/_app/immutable/chunks/BwwLJVvR.js +1 -0
- package/dist/web/_app/immutable/chunks/C0RpyyYZ.js +7 -0
- package/dist/web/_app/immutable/chunks/C2l-EXsT2.js +1 -0
- package/dist/web/_app/immutable/chunks/C35TIzaB.js +1 -0
- package/dist/web/_app/immutable/chunks/C3OdK8z_2.js +1 -0
- package/dist/web/_app/immutable/chunks/C6Nx0jpM.js +1 -0
- package/dist/web/_app/immutable/chunks/CA7O0J_u2.js +1 -0
- package/dist/web/_app/immutable/chunks/CAwjrHdk.js +23 -0
- package/dist/web/_app/immutable/chunks/CCLR-AJL2.js +185 -0
- package/dist/web/_app/immutable/chunks/CD0X7XPW.js +6 -0
- package/dist/web/_app/immutable/chunks/CDTjuBSm2.js +1 -0
- package/dist/web/_app/immutable/chunks/CSUrYOis.js +1 -0
- package/dist/web/_app/immutable/chunks/CUPSJObs.js +1 -0
- package/dist/web/_app/immutable/chunks/CUoGvuxK2.js +2 -0
- package/dist/web/_app/immutable/chunks/CWh8aehb.js +1 -0
- package/dist/web/_app/immutable/chunks/CY4XVBP0.js +1 -0
- package/dist/web/_app/immutable/chunks/CYTTTma0.js +3 -0
- package/dist/web/_app/immutable/chunks/CaoriuNq.js +1 -0
- package/dist/web/_app/immutable/chunks/CcsSt9AW2.js +1 -0
- package/dist/web/_app/immutable/chunks/Cd4VfAZC.js +2 -0
- package/dist/web/_app/immutable/chunks/CePZ1985.js +1 -0
- package/dist/web/_app/immutable/chunks/Cei8CKT4.js +1 -0
- package/dist/web/_app/immutable/chunks/CheXrbDk.js +1 -0
- package/dist/web/_app/immutable/chunks/CkLfUXwy.js +1 -0
- package/dist/web/_app/immutable/chunks/Cl-W0JYt.js +2 -0
- package/dist/web/_app/immutable/chunks/Cna7tYp-.js +1 -0
- package/dist/web/_app/immutable/chunks/Czwe4sGU2.js +3 -0
- package/dist/web/_app/immutable/chunks/D41CbXmM.js +1 -0
- package/dist/web/_app/immutable/chunks/D83_Ss42.js +1 -0
- package/dist/web/_app/immutable/chunks/D9NgbGbO2.js +9 -0
- package/dist/web/_app/immutable/chunks/DA-BuZei.js +2 -0
- package/dist/web/_app/immutable/chunks/DAXW5iLp.js +1 -0
- package/dist/web/_app/immutable/chunks/DCNJWlho2.js +1 -0
- package/dist/web/_app/immutable/chunks/DCtgLRl52.js +1 -0
- package/dist/web/_app/immutable/chunks/DH0epITQ2.js +1 -0
- package/dist/web/_app/immutable/chunks/DIb5rAPU2.js +1 -0
- package/dist/web/_app/immutable/chunks/DOmH4G9o2.js +14 -0
- package/dist/web/_app/immutable/chunks/DQMWa2t7.js +1 -0
- package/dist/web/_app/immutable/chunks/DQ_Xokap2.js +1 -0
- package/dist/web/_app/immutable/chunks/DR1K6PIm.js +1 -0
- package/dist/web/_app/immutable/chunks/DTCHhxD5.js +1 -0
- package/dist/web/_app/immutable/chunks/DU7XA-cL2.js +1 -0
- package/dist/web/_app/immutable/chunks/DVcy5Pp82.js +1 -0
- package/dist/web/_app/immutable/chunks/DWygwzcO2.js +1 -0
- package/dist/web/_app/immutable/chunks/DYXDRmoo2.js +1 -0
- package/dist/web/_app/immutable/chunks/DZEmjBTb.js +5 -0
- package/dist/web/_app/immutable/chunks/DaoOQFPb.js +1 -0
- package/dist/web/_app/immutable/chunks/DdfvtDOY.js +1 -0
- package/dist/web/_app/immutable/chunks/DevZTY1l.js +1 -0
- package/dist/web/_app/immutable/chunks/DiMQob8p.js +1 -0
- package/dist/web/_app/immutable/chunks/DiQJ9DLy.js +1 -0
- package/dist/web/_app/immutable/chunks/Dj5oP_ik.js +2 -0
- package/dist/web/_app/immutable/chunks/DjTJ4D_0.js +3 -0
- package/dist/web/_app/immutable/chunks/Dk4TeNwu.js +1 -0
- package/dist/web/_app/immutable/chunks/Dng3OcRd2.js +1 -0
- package/dist/web/_app/immutable/chunks/Do1OCNEG.js +1 -0
- package/dist/web/_app/immutable/chunks/Do6qOOng.js +1 -0
- package/dist/web/_app/immutable/chunks/DoQwt-f9.js +1 -0
- package/dist/web/_app/immutable/chunks/Dqg3k9HI2.js +1 -0
- package/dist/web/_app/immutable/chunks/DsnqOT222.js +1 -0
- package/dist/web/_app/immutable/chunks/DvJSCDuZ2.js +1 -0
- package/dist/web/_app/immutable/chunks/DvPuaTCl.js +5 -0
- package/dist/web/_app/immutable/chunks/DvYQu1SV.js +1 -0
- package/dist/web/_app/immutable/chunks/HdjeJPly2.js +1 -0
- package/dist/web/_app/immutable/chunks/JDw4tOUY.js +1 -0
- package/dist/web/_app/immutable/chunks/KBbDg4lS2.js +1 -0
- package/dist/web/_app/immutable/chunks/KQXQLJf32.js +1 -0
- package/dist/web/_app/immutable/chunks/LGnNalpn2.js +2 -0
- package/dist/web/_app/immutable/chunks/SH5Fg0Xu.js +1 -0
- package/dist/web/_app/immutable/chunks/Shyla9c12.js +2 -0
- package/dist/web/_app/immutable/chunks/VQbAelHN.js +1 -0
- package/dist/web/_app/immutable/chunks/apNT0aug2.js +1 -0
- package/dist/web/_app/immutable/chunks/e0ySQvQ6.js +1 -0
- package/dist/web/_app/immutable/chunks/eNB_sIHC2.js +1 -0
- package/dist/web/_app/immutable/chunks/g09ZrevW2.js +1 -0
- package/dist/web/_app/immutable/chunks/h4WWBpcD2.js +2692 -0
- package/dist/web/_app/immutable/chunks/kLub81jO.js +1 -0
- package/dist/web/_app/immutable/chunks/kW0z_eo62.js +1 -0
- package/dist/web/_app/immutable/chunks/oBQOivfH.js +1 -0
- package/dist/web/_app/immutable/chunks/ss8hcwTT.js +1 -0
- package/dist/web/_app/immutable/chunks/sub7ikQV.js +2 -0
- package/dist/web/_app/immutable/chunks/uuFM-ygL.js +1 -0
- package/dist/web/_app/immutable/chunks/v7me-ydg.js +2 -0
- package/dist/web/_app/immutable/chunks/xihTtKlq.js +1 -0
- package/dist/web/_app/immutable/chunks/yWi6xIp8.js +1 -0
- package/dist/web/_app/immutable/chunks/zl16E4yc2.js +1 -0
- package/dist/web/_app/immutable/entry/app.Bgniax9U.js +2 -0
- package/dist/web/_app/immutable/entry/start.DeD3x0AC.js +1 -0
- package/dist/web/_app/immutable/nodes/0.D7f7eDDY.js +2 -0
- package/dist/web/_app/immutable/nodes/1.nDAGsQWA.js +1 -0
- package/dist/web/_app/immutable/nodes/10.DFbhcPKT.js +1 -0
- package/dist/web/_app/immutable/nodes/11.CDErrkBt.js +1 -0
- package/dist/web/_app/immutable/nodes/12.QmphOXE2.js +1 -0
- package/dist/web/_app/immutable/nodes/13.Bq5rDhPs.js +1 -0
- package/dist/web/_app/immutable/nodes/14.BlcHqgr6.js +1 -0
- package/dist/web/_app/immutable/nodes/15.COK_-D-x.js +1 -0
- package/dist/web/_app/immutable/nodes/2.DOsCYNHa.js +109 -0
- package/dist/web/_app/immutable/nodes/3.BgE1sIyr.js +2 -0
- package/dist/web/_app/immutable/nodes/4.DvgaHeI4.js +11 -0
- package/dist/web/_app/immutable/nodes/5.CrjeBZES.js +1 -0
- package/dist/web/_app/immutable/nodes/6.DoHxsiEE.js +1 -0
- package/dist/web/_app/immutable/nodes/7.04fnxKIo.js +1 -0
- package/dist/web/_app/immutable/nodes/8.D35_cY6C.js +1 -0
- package/dist/web/_app/immutable/nodes/9.BRionwW6.js +1 -0
- package/dist/web/_app/version.json +1 -1
- package/dist/web/favicon-16.png +0 -0
- package/dist/web/favicon-180.png +0 -0
- package/dist/web/favicon-32.png +0 -0
- package/dist/web/favicon-48.png +0 -0
- package/dist/web/favicon-512.png +0 -0
- package/dist/web/favicon.ico +0 -0
- package/dist/web/favicon.svg +8 -0
- package/dist/web/index.html +56 -19
- package/dist/web/studiograph-logomark.svg +29 -0
- package/package.json +34 -14
- package/dist/agent/skills/enrich-entities.md +0 -136
- package/dist/agent/skills/obsidian-source-setup.md +0 -246
- package/dist/agent/skills/skill-loader.d.ts +0 -48
- package/dist/agent/skills/skill-loader.js +0 -166
- package/dist/agent/skills/skill-loader.js.map +0 -1
- package/dist/agent/skills/sync-configuration.md +0 -119
- package/dist/agent/skills/sync-setup.md +0 -82
- package/dist/agent/tools/sync-tools.d.ts +0 -35
- package/dist/agent/tools/sync-tools.js +0 -992
- package/dist/agent/tools/sync-tools.js.map +0 -1
- package/dist/auth/github.d.ts +0 -56
- package/dist/auth/github.js +0 -169
- package/dist/auth/github.js.map +0 -1
- package/dist/cli/commands/access.d.ts +0 -11
- package/dist/cli/commands/access.js +0 -156
- package/dist/cli/commands/access.js.map +0 -1
- package/dist/cli/commands/app.d.ts +0 -7
- package/dist/cli/commands/app.js +0 -268
- package/dist/cli/commands/app.js.map +0 -1
- package/dist/cli/commands/auth.d.ts +0 -10
- package/dist/cli/commands/auth.js +0 -79
- package/dist/cli/commands/auth.js.map +0 -1
- package/dist/cli/commands/clear.d.ts +0 -5
- package/dist/cli/commands/clear.js +0 -36
- package/dist/cli/commands/clear.js.map +0 -1
- package/dist/cli/commands/collection.d.ts +0 -10
- package/dist/cli/commands/collection.js +0 -187
- package/dist/cli/commands/collection.js.map +0 -1
- package/dist/cli/commands/enrich.d.ts +0 -11
- package/dist/cli/commands/enrich.js +0 -135
- package/dist/cli/commands/enrich.js.map +0 -1
- package/dist/cli/commands/graphrag.d.ts +0 -12
- package/dist/cli/commands/graphrag.js +0 -122
- package/dist/cli/commands/graphrag.js.map +0 -1
- package/dist/cli/commands/join.d.ts +0 -9
- package/dist/cli/commands/join.js +0 -255
- package/dist/cli/commands/join.js.map +0 -1
- package/dist/cli/commands/members.d.ts +0 -11
- package/dist/cli/commands/members.js +0 -230
- package/dist/cli/commands/members.js.map +0 -1
- package/dist/cli/commands/org.d.ts +0 -10
- package/dist/cli/commands/org.js +0 -132
- package/dist/cli/commands/org.js.map +0 -1
- package/dist/cli/commands/provision.d.ts +0 -8
- package/dist/cli/commands/provision.js +0 -116
- package/dist/cli/commands/provision.js.map +0 -1
- package/dist/cli/commands/resolve.d.ts +0 -8
- package/dist/cli/commands/resolve.js +0 -85
- package/dist/cli/commands/resolve.js.map +0 -1
- package/dist/cli/commands/review.d.ts +0 -19
- package/dist/cli/commands/review.js +0 -128
- package/dist/cli/commands/review.js.map +0 -1
- package/dist/cli/commands/source.d.ts +0 -16
- package/dist/cli/commands/source.js +0 -159
- package/dist/cli/commands/source.js.map +0 -1
- package/dist/cli/commands/start.d.ts +0 -7
- package/dist/cli/commands/start.js +0 -589
- package/dist/cli/commands/start.js.map +0 -1
- package/dist/cli/commands/sync-collection.d.ts +0 -14
- package/dist/cli/commands/sync-collection.js +0 -355
- package/dist/cli/commands/sync-collection.js.map +0 -1
- package/dist/cli/commands/sync-entities.d.ts +0 -13
- package/dist/cli/commands/sync-entities.js +0 -242
- package/dist/cli/commands/sync-entities.js.map +0 -1
- package/dist/cli/commands/team.d.ts +0 -12
- package/dist/cli/commands/team.js +0 -185
- package/dist/cli/commands/team.js.map +0 -1
- package/dist/cli/commands/update.d.ts +0 -8
- package/dist/cli/commands/update.js +0 -155
- package/dist/cli/commands/update.js.map +0 -1
- package/dist/cli/commands/user.d.ts +0 -7
- package/dist/cli/commands/user.js +0 -153
- package/dist/cli/commands/user.js.map +0 -1
- package/dist/cli/scaffolding.d.ts +0 -12
- package/dist/cli/scaffolding.js +0 -397
- package/dist/cli/scaffolding.js.map +0 -1
- package/dist/cli/sync-review-interactive.d.ts +0 -31
- package/dist/cli/sync-review-interactive.js +0 -393
- package/dist/cli/sync-review-interactive.js.map +0 -1
- package/dist/core/migration-runner.d.ts +0 -42
- package/dist/core/migration-runner.js +0 -232
- package/dist/core/migration-runner.js.map +0 -1
- package/dist/core/migration-types.d.ts +0 -101
- package/dist/core/migration-types.js +0 -21
- package/dist/core/migration-types.js.map +0 -1
- package/dist/core/migrations/20260219-formalize-memory-location.d.ts +0 -2
- package/dist/core/migrations/20260219-formalize-memory-location.js +0 -35
- package/dist/core/migrations/20260219-formalize-memory-location.js.map +0 -1
- package/dist/core/migrations/20260220-add-workspace-metadata.d.ts +0 -12
- package/dist/core/migrations/20260220-add-workspace-metadata.js +0 -65
- package/dist/core/migrations/20260220-add-workspace-metadata.js.map +0 -1
- package/dist/core/migrations/20260220-add-workspace-readme.d.ts +0 -11
- package/dist/core/migrations/20260220-add-workspace-readme.js +0 -82
- package/dist/core/migrations/20260220-add-workspace-readme.js.map +0 -1
- package/dist/core/migrations/20260220-migrate-yaml-to-json.d.ts +0 -9
- package/dist/core/migrations/20260220-migrate-yaml-to-json.js +0 -64
- package/dist/core/migrations/20260220-migrate-yaml-to-json.js.map +0 -1
- package/dist/core/migrations/index.d.ts +0 -11
- package/dist/core/migrations/index.js +0 -23
- package/dist/core/migrations/index.js.map +0 -1
- package/dist/integrations/asana.d.ts +0 -26
- package/dist/integrations/asana.js +0 -78
- package/dist/integrations/asana.js.map +0 -1
- package/dist/integrations/figma-local.d.ts +0 -16
- package/dist/integrations/figma-local.js +0 -10
- package/dist/integrations/figma-local.js.map +0 -1
- package/dist/integrations/figma.d.ts +0 -17
- package/dist/integrations/figma.js +0 -17
- package/dist/integrations/figma.js.map +0 -1
- package/dist/integrations/granola.d.ts +0 -24
- package/dist/integrations/granola.js +0 -60
- package/dist/integrations/granola.js.map +0 -1
- package/dist/integrations/linear.d.ts +0 -14
- package/dist/integrations/linear.js +0 -80
- package/dist/integrations/linear.js.map +0 -1
- package/dist/integrations/paper-local.d.ts +0 -14
- package/dist/integrations/paper-local.js +0 -10
- package/dist/integrations/paper-local.js.map +0 -1
- package/dist/integrations/paper.d.ts +0 -2
- package/dist/integrations/paper.js +0 -10
- package/dist/integrations/paper.js.map +0 -1
- package/dist/integrations/pipedrive.d.ts +0 -26
- package/dist/integrations/pipedrive.js +0 -97
- package/dist/integrations/pipedrive.js.map +0 -1
- package/dist/integrations/registry.d.ts +0 -15
- package/dist/integrations/registry.js +0 -27
- package/dist/integrations/registry.js.map +0 -1
- package/dist/integrations/types.d.ts +0 -38
- package/dist/integrations/types.js +0 -9
- package/dist/integrations/types.js.map +0 -1
- package/dist/lib/lib/utils.d.ts +0 -2
- package/dist/lib/lib/utils.js +0 -6
- package/dist/lib/lib/utils.js.map +0 -1
- package/dist/mcp/connectors/asana.d.ts +0 -2
- package/dist/mcp/connectors/asana.js +0 -20
- package/dist/mcp/connectors/asana.js.map +0 -1
- package/dist/mcp/connectors/definitions.d.ts +0 -45
- package/dist/mcp/connectors/definitions.js +0 -32
- package/dist/mcp/connectors/definitions.js.map +0 -1
- package/dist/mcp/connectors/figma.d.ts +0 -5
- package/dist/mcp/connectors/figma.js +0 -21
- package/dist/mcp/connectors/figma.js.map +0 -1
- package/dist/mcp/connectors/gdrive.d.ts +0 -2
- package/dist/mcp/connectors/gdrive.js +0 -20
- package/dist/mcp/connectors/gdrive.js.map +0 -1
- package/dist/mcp/connectors/granola.d.ts +0 -2
- package/dist/mcp/connectors/granola.js +0 -12
- package/dist/mcp/connectors/granola.js.map +0 -1
- package/dist/mcp/connectors/linear.d.ts +0 -2
- package/dist/mcp/connectors/linear.js +0 -19
- package/dist/mcp/connectors/linear.js.map +0 -1
- package/dist/mcp/connectors/obsidian.d.ts +0 -2
- package/dist/mcp/connectors/obsidian.js +0 -19
- package/dist/mcp/connectors/obsidian.js.map +0 -1
- package/dist/mcp/connectors/pipedrive.d.ts +0 -2
- package/dist/mcp/connectors/pipedrive.js +0 -20
- package/dist/mcp/connectors/pipedrive.js.map +0 -1
- package/dist/mcp/connectors/slack.d.ts +0 -2
- package/dist/mcp/connectors/slack.js +0 -21
- package/dist/mcp/connectors/slack.js.map +0 -1
- package/dist/mcp/server-oauth-provider.d.ts +0 -56
- package/dist/mcp/server-oauth-provider.js +0 -142
- package/dist/mcp/server-oauth-provider.js.map +0 -1
- package/dist/server/chrome/chrome.css +0 -691
- package/dist/server/chrome/chrome.js +0 -374
- package/dist/server/collab-authority.d.ts +0 -70
- package/dist/server/collab-authority.js +0 -218
- package/dist/server/collab-authority.js.map +0 -1
- package/dist/server/collab.d.ts +0 -29
- package/dist/server/collab.js +0 -195
- package/dist/server/collab.js.map +0 -1
- package/dist/server/commit-scheduler.d.ts +0 -39
- package/dist/server/commit-scheduler.js +0 -113
- package/dist/server/commit-scheduler.js.map +0 -1
- package/dist/server/plugin-loader.d.ts +0 -53
- package/dist/server/plugin-loader.js +0 -155
- package/dist/server/plugin-loader.js.map +0 -1
- package/dist/server/routes/collab.d.ts +0 -6
- package/dist/server/routes/collab.js +0 -10
- package/dist/server/routes/collab.js.map +0 -1
- package/dist/server/routes/git-api.d.ts +0 -9
- package/dist/server/routes/git-api.js +0 -82
- package/dist/server/routes/git-api.js.map +0 -1
- package/dist/server/routes/meeting-ingest-api.d.ts +0 -15
- package/dist/server/routes/meeting-ingest-api.js +0 -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/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/B-7hHz7B.js +0 -1
- package/dist/web/_app/immutable/chunks/B340SUKR.js +0 -1
- package/dist/web/_app/immutable/chunks/BB_5th5W.js +0 -3383
- package/dist/web/_app/immutable/chunks/BDoWDZaG.js +0 -1
- package/dist/web/_app/immutable/chunks/BFyl1ZHO.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/BWNY8zw6.js +0 -2
- package/dist/web/_app/immutable/chunks/BdPUVvAi.js +0 -1
- package/dist/web/_app/immutable/chunks/BmsJVLyy.js +0 -1
- package/dist/web/_app/immutable/chunks/BoAosqzE.js +0 -1
- package/dist/web/_app/immutable/chunks/Bs-tL5OR.js +0 -1
- package/dist/web/_app/immutable/chunks/Bsacq2UX.js +0 -1
- package/dist/web/_app/immutable/chunks/BuewkNdS.js +0 -4
- package/dist/web/_app/immutable/chunks/ByunV8un.js +0 -1
- package/dist/web/_app/immutable/chunks/C7VoTosa.js +0 -2
- package/dist/web/_app/immutable/chunks/CDV5Q7RN.js +0 -1
- package/dist/web/_app/immutable/chunks/CJ8__CWt.js +0 -1
- package/dist/web/_app/immutable/chunks/CJUKmosC.js +0 -5
- package/dist/web/_app/immutable/chunks/CSVbGg_b.js +0 -5
- package/dist/web/_app/immutable/chunks/CT6oIU-C.js +0 -1
- package/dist/web/_app/immutable/chunks/CTRxNfZk.js +0 -1
- package/dist/web/_app/immutable/chunks/CWQRQXxy.js +0 -1
- package/dist/web/_app/immutable/chunks/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/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/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/FFlLQIiS.js +0 -1
- package/dist/web/_app/immutable/chunks/O9Eb9k00.js +0 -1
- package/dist/web/_app/immutable/chunks/PPVm8Dsz.js +0 -1
- package/dist/web/_app/immutable/chunks/QF8MAmnc.js +0 -1
- package/dist/web/_app/immutable/chunks/UjzxCpxn.js +0 -1
- package/dist/web/_app/immutable/chunks/WSUKABI_.js +0 -1
- package/dist/web/_app/immutable/chunks/Y90OgS-9.js +0 -1
- package/dist/web/_app/immutable/chunks/cLyZlkXv.js +0 -1
- package/dist/web/_app/immutable/chunks/iDtAARVW.js +0 -2
- package/dist/web/_app/immutable/chunks/oC_W7W7p.js +0 -1
- package/dist/web/_app/immutable/chunks/rJdWIgh-.js +0 -1
- package/dist/web/_app/immutable/chunks/tvOsokaa.js +0 -1
- package/dist/web/_app/immutable/chunks/uLEXaPwE.js +0 -1
- package/dist/web/_app/immutable/chunks/vSaooFHB.js +0 -1
- package/dist/web/_app/immutable/entry/app.DAR-mtfg.js +0 -2
- package/dist/web/_app/immutable/entry/start.xDnyRaR1.js +0 -1
- package/dist/web/_app/immutable/nodes/0.D0aV-Zro.js +0 -2
- package/dist/web/_app/immutable/nodes/1.C7QoM8qD.js +0 -1
- package/dist/web/_app/immutable/nodes/10.DrDOAjOD.js +0 -1
- package/dist/web/_app/immutable/nodes/2.B0OgNuKW.js +0 -168
- package/dist/web/_app/immutable/nodes/3.BZ4qHGZi.js +0 -1
- package/dist/web/_app/immutable/nodes/4.hm-mxuuj.js +0 -12
- package/dist/web/_app/immutable/nodes/5.Bdbt4fjx.js +0 -4
- package/dist/web/_app/immutable/nodes/6.BXrCI40c.js +0 -2
- package/dist/web/_app/immutable/nodes/7.Chd4i9bm.js +0 -2
- package/dist/web/_app/immutable/nodes/8.B8SF-aNs.js +0 -1
- package/dist/web/_app/immutable/nodes/9.YDeu-RnO.js +0 -1
|
@@ -0,0 +1,204 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: interview
|
|
3
|
+
description: Conversational interview that builds organizational context in the knowledge graph — always running, stoppable, resumable
|
|
4
|
+
loading: eager
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# Interview Agent
|
|
8
|
+
|
|
9
|
+
You are an interviewer. Your primary job is to build the user's organizational knowledge graph through conversation. Every time you respond, you should be working toward filling in the graph.
|
|
10
|
+
|
|
11
|
+
## Core Behavior
|
|
12
|
+
|
|
13
|
+
**At the start of every conversation**, assess the graph state by calling `list_entities` across all folders. Then:
|
|
14
|
+
|
|
15
|
+
- **If the workspace has no folders (or no entries):** This is a brand-new workspace. Introduce yourself as their knowledge graph assistant and begin the interview script. Start by asking for their website and organization name. Create the first folder as you go (see "Folder Structure" below).
|
|
16
|
+
- **If the graph has baseline coverage but gaps remain:** Pick up where the gaps are. Ask the next most valuable question based on what's missing.
|
|
17
|
+
- **If the user asks something unrelated:** Handle their request, then return to the interview with your next question.
|
|
18
|
+
|
|
19
|
+
### Workspace identity vs. user identity — don't conflate them
|
|
20
|
+
|
|
21
|
+
The workspace's `team_name` (set at `studiograph init`) is the **authoritative organization name** for this graph. It's what the user explicitly chose. The user's **display name and email** are session context for identifying *who is talking to you*, not what the workspace is about.
|
|
22
|
+
|
|
23
|
+
These two are often different — many workspaces are personal projects, side ventures, or research scratchpads unrelated to where the user works. Anchor on `team_name` when discussing the organization. Treat the email domain as a hint worth confirming, not a fact to assert.
|
|
24
|
+
|
|
25
|
+
**Don't:** "Sounds good. To pick things back up, could you tell me a bit about Schema's core mission and the primary focus of the work you do?" — when `team_name` is "Watowa" and the email is `christian@schemadesign.com`, you've inferred the wrong organization.
|
|
26
|
+
|
|
27
|
+
**Do:** "Could you tell me a bit about Watowa's core mission?" or, if the email/workspace mismatch is striking and you want to disambiguate: "Is Watowa related to Schema Design (which I noticed from your email), or a separate project?"
|
|
28
|
+
|
|
29
|
+
Never derive organization facts from the email domain alone — the model may know about the firm and pattern-match plausible sentences ("strategic design firm doing data visualization"), but plausible isn't the same as accurate.
|
|
30
|
+
|
|
31
|
+
**Always end your response with the next interview question.** The interview is always running. You don't wait for the user to ask you to continue — you proactively drive the conversation forward.
|
|
32
|
+
|
|
33
|
+
The only time you don't ask a follow-up question is if the user explicitly says "stop", "that's enough", or "no more questions."
|
|
34
|
+
|
|
35
|
+
**If the user says "skip", "skip this", "skip this question", "next", or otherwise asks to move past the current question:** Acknowledge briefly ("Sure, we can come back to that.") and ask the next-most-valuable question on a *different* topic — don't re-phrase the same question. Treat the skipped topic as a known gap the agent can revisit later, not as something the user refused.
|
|
36
|
+
|
|
37
|
+
## Language
|
|
38
|
+
|
|
39
|
+
Always say "entries" when talking to the user, never "entities". "Entities" is an internal term — users see "entries".
|
|
40
|
+
|
|
41
|
+
## Entry Types
|
|
42
|
+
|
|
43
|
+
The full canonical list of entry types is in the system prompt's "Entry Types" section. You are not restricted to the defaults — use the most specific canonical type for each topic. Don't collapse a decision into a note or a deliverable into a document just because the default picker tier is smaller; the catalog has dedicated types.
|
|
44
|
+
|
|
45
|
+
Quick mapping for interview topics:
|
|
46
|
+
|
|
47
|
+
- **Processes, workflows, SOPs** → `process`
|
|
48
|
+
- **Standards, guidelines, principles** → `guideline`
|
|
49
|
+
- **Decisions (ADR-style records)** → `decision`
|
|
50
|
+
- **Deals, pipeline, prospects** → `deal` (with the prospect as `organization`, category `prospect`)
|
|
51
|
+
- **Capabilities, practice areas, expertise** → `practice-area`, or embed inside the organization entry body
|
|
52
|
+
- **Deliverables, scoped outputs to a client** → `deliverable`, linked to its project
|
|
53
|
+
- **Case studies, portfolio pieces** → `case-study`
|
|
54
|
+
- **Published content (articles, talks, posts)** → `publication`
|
|
55
|
+
- **Presentations, slide decks** → `deck`
|
|
56
|
+
- **Reusable agent instructions the team wants you to follow** → `skill` (see "Listening for Skill-Worthy Patterns" below)
|
|
57
|
+
- **Freeform thinking with no obvious fit** → `note`
|
|
58
|
+
- **Authored docs that don't fit a more specific type** → `document`
|
|
59
|
+
|
|
60
|
+
If `create_entity` rejects a type, the error lists the allowed types (full canonical set + workspace custom types). Pick the closest and carry on — don't loop.
|
|
61
|
+
|
|
62
|
+
## The Script
|
|
63
|
+
|
|
64
|
+
Follow the 10-topic script in the `question-domains` sub-file for the initial interview. The topics in order:
|
|
65
|
+
|
|
66
|
+
1. Organization (name, what you do, size, positioning)
|
|
67
|
+
2. Team (people, roles, locations)
|
|
68
|
+
3. Clients (current client organizations, key contacts)
|
|
69
|
+
4. Active Projects (workstreams, status, who's on them)
|
|
70
|
+
5. Pipeline & Deals (prospects, active deals)
|
|
71
|
+
6. Processes & Workflows (meeting cadence, how work flows)
|
|
72
|
+
7. Tools & Systems (tech stack)
|
|
73
|
+
8. Capabilities & Expertise (specialties, what you're known for)
|
|
74
|
+
9. Goals & Strategy (current priorities, direction)
|
|
75
|
+
10. Standards & Guidelines (communication style, preferences)
|
|
76
|
+
|
|
77
|
+
**Before starting the script**, ask: "Do you have a website for your organization? Sharing it helps me ask better questions." If provided, fetch it with `web_fetch` and use the extracted context to adapt your questions.
|
|
78
|
+
|
|
79
|
+
After all 10 topics have baseline coverage, call `mark_onboarded` to record that the user's onboarding is complete. Then **synthesize the workspace description**: read the current ABOUT.md (if any) and the graph entities you've created, and call `update_workspace_about` with a concise markdown narrative covering the organization's identity, team, capabilities, and values. If the user had already written an ABOUT.md, preserve their voice and any unique context while weaving in the structured facts from the graph. After that, switch to deepening — ask about sparse entries, missing relationships, stale data, and new content from any source.
|
|
80
|
+
|
|
81
|
+
## Script Rules
|
|
82
|
+
|
|
83
|
+
1. **One question at a time.** Never compound questions.
|
|
84
|
+
2. **Create entries immediately** from each answer. Don't batch or wait until the end.
|
|
85
|
+
3. **Use wikilinks** to connect entries from the start (person → organization, project → client).
|
|
86
|
+
4. **Adapt phrasing** based on website context and prior answers. If a topic is already covered, acknowledge it and ask only for gaps.
|
|
87
|
+
5. **Allow detours.** If the user mentions something interesting off-script, follow up briefly, then return to the script.
|
|
88
|
+
6. **Always come back to the interview.** After handling any request, end with your next question.
|
|
89
|
+
7. **Dig deeper on sparse answers.** If the user gives a short or vague answer, ask a follow-up to draw out more detail before moving on. "You mentioned X — can you tell me more about that?" One follow-up is enough; don't interrogate.
|
|
90
|
+
|
|
91
|
+
## Folder Structure
|
|
92
|
+
|
|
93
|
+
Do NOT put everything in a single folder. Set up this structure as the interview progresses:
|
|
94
|
+
|
|
95
|
+
| Folder | Graph Type | What Goes Here |
|
|
96
|
+
|---|---|---|
|
|
97
|
+
| `{org-name}` | function | The org entry itself, team (person), practice areas, processes, guidelines, strategy notes |
|
|
98
|
+
| `clients` | function | Client organizations, key client contacts |
|
|
99
|
+
| `projects` | function | Active project entries (one per engagement) |
|
|
100
|
+
| `case-studies` | shared-resource | Portfolio case studies from past work |
|
|
101
|
+
| `new-business` | function | Prospect organizations, deals, pipeline entries |
|
|
102
|
+
|
|
103
|
+
Create folders as needed — `{org-name}` first, then others as the relevant topics come up.
|
|
104
|
+
|
|
105
|
+
## Entry Quality
|
|
106
|
+
|
|
107
|
+
**Don't create sparse entries.** Every entry should have:
|
|
108
|
+
- All relevant frontmatter fields populated (omit optional fields entirely if unknown — never set them to empty strings like `email: ''` or `start_date: ''`)
|
|
109
|
+
- A meaningful markdown body — at least 2-3 sentences or a structured overview
|
|
110
|
+
- Wikilinks to related entries
|
|
111
|
+
|
|
112
|
+
**For people entries:** Don't just write "Role at Org, based in Location." Include what they do, what they're responsible for, who they work closely with.
|
|
113
|
+
|
|
114
|
+
**For prospect/target entries:** Include why they're a target, what the angle would be, any existing connections.
|
|
115
|
+
|
|
116
|
+
## Listening for Skill-Worthy Patterns
|
|
117
|
+
|
|
118
|
+
Throughout the interview — especially during Topic 10 (Standards & Guidelines) but at any point — listen for the user describing a **repeatable working pattern** they'd want you to follow in future conversations. These are different from facts about the organization; they're instructions on *how this team wants the agent to operate*.
|
|
119
|
+
|
|
120
|
+
Examples of skill-worthy signals:
|
|
121
|
+
|
|
122
|
+
- "Our proposals always open with context, then scope, then pricing."
|
|
123
|
+
- "When we summarize a meeting we always put action items in a bulleted list at the top."
|
|
124
|
+
- "We never use bullet points in client emails — always paragraphs."
|
|
125
|
+
- "For every new project we create a kickoff doc with these sections…"
|
|
126
|
+
- "Decisions are logged with a What / Why / Alternatives structure."
|
|
127
|
+
|
|
128
|
+
When you hear one, **opportunistically offer to capture it as a skill**:
|
|
129
|
+
|
|
130
|
+
> "That sounds like a pattern I could reuse — want me to save it as a skill so I follow it next time you ask me to write a proposal?"
|
|
131
|
+
|
|
132
|
+
On confirmation, call `create_entity` with `type: 'skill'`:
|
|
133
|
+
- `entity_id` — kebab-case name the agent will call via `load_skill` (e.g., `proposal-writing`, `meeting-summary-format`, `client-email-style`)
|
|
134
|
+
- `data.description` — short sentence the skill index will show
|
|
135
|
+
- `content` — markdown body with the actual instruction, written in second person ("When the user asks you to write a proposal, always…")
|
|
136
|
+
|
|
137
|
+
Put team-wide skills in a shared folder; personal skills in `repo: "private"`. Don't set `loading: eager` unless the user explicitly wants the instruction inlined into every agent turn (admin-only in shared folders).
|
|
138
|
+
|
|
139
|
+
Don't *ask* about skills as a topic. Listen for them and offer. Many users won't have strong conventions and that's fine — skip.
|
|
140
|
+
|
|
141
|
+
## Assessing Graph State
|
|
142
|
+
|
|
143
|
+
Use `list_entities` across all folders to inventory what exists. Map entries to script topics. The full canonical type catalog is available — use the dedicated type for each check rather than falling back to tagged notes.
|
|
144
|
+
|
|
145
|
+
- Has an `organization` entry? → Topic 1 covered
|
|
146
|
+
- Has `person` entries with org links? → Topic 2 covered
|
|
147
|
+
- Has client `organization` entries? → Topic 3 covered
|
|
148
|
+
- Has `project` entries? → Topic 4 covered
|
|
149
|
+
- Has `deal` entries or prospect `organization` entries? → Topic 5 covered
|
|
150
|
+
- Has `process` entries? → Topic 6 covered
|
|
151
|
+
- Has tool/system `reference` or `note` entries → Topic 7 covered
|
|
152
|
+
- Has `practice-area` entries (or capability coverage in the org entry body) → Topic 8 covered
|
|
153
|
+
- Has strategy/goals `note` entries → Topic 9 covered
|
|
154
|
+
- Has `guideline` entries or `skill` entries → Topic 10 covered
|
|
155
|
+
|
|
156
|
+
The first uncovered topic is your next question. If all are covered, look for the sparsest entries and deepen those.
|
|
157
|
+
|
|
158
|
+
Load `question-domains` for the full question bank and `entity-templates` for extraction patterns.
|
|
159
|
+
|
|
160
|
+
## Team Member Onboarding
|
|
161
|
+
|
|
162
|
+
When a team member (not the workspace owner) starts a conversation and the graph is already populated:
|
|
163
|
+
|
|
164
|
+
1. **Identify the user from the current session** — the user's `handle`, display name, and email are available from the system context. **Their linked person entity is already auto-provisioned at registration time** (the user↔person bridge). Read `linkedPersonRef` via `permission_list_users` or accept it from the session context — do NOT call `search_entities` to find them, and do NOT call `link_person_to_user` for the user themselves; the link is already in place.
|
|
165
|
+
2. **If the bridge somehow has no record** (legacy account, ambiguous migration, team_repo unconfigured), `search_entities` falls back as today. Surface the gap to the user and offer to run `link_person_to_user` if they identify the right record.
|
|
166
|
+
3. **Welcome them** by name and show their current profile: "Welcome, [name]. I can see you're listed as [role] at [org]. Let me ask a few questions to fill out your profile and enrich the graph with your perspective."
|
|
167
|
+
|
|
168
|
+
### User ↔ Person bridge rules
|
|
169
|
+
|
|
170
|
+
- The user's own record: **already linked.** Read `personRef` from session context; write enrichments via `update_entity`. Never call `link_person_to_user` for the current user.
|
|
171
|
+
- Team members the user *mentions* during the interview ("Sarah is our designer"): create person entities with `email` if known, but **do not set `user_handle`**. They have no account yet — `ensurePersonForUser` will auto-link them by email when they register.
|
|
172
|
+
- Existing-entity bridging only when the user *explicitly* asks ("[[chris]] is me", "this person record is actually [[fritz]]"). Use `permission_list_users` first to confirm the target handle, then call `link_person_to_user`.
|
|
173
|
+
- Unlink (`unlink_person_from_user`) is reserved for fixing a wrong link the user flags. It leaves the entity intact — only the bridge is severed.
|
|
174
|
+
|
|
175
|
+
### Onboarding Questions (5 questions max)
|
|
176
|
+
|
|
177
|
+
The onboarding is not just about the person's profile — it's an opportunity to enrich the broader graph from their unique perspective. Each answer should update their profile AND create or enrich related entries.
|
|
178
|
+
|
|
179
|
+
1. **Background** — "Tell me about your background — what did you do before, what are you most deep in?"
|
|
180
|
+
→ Update their person entry with a rich bio.
|
|
181
|
+
|
|
182
|
+
2. **Current work** — "What are you working on right now? Walk me through your projects, your role, and the tools or technologies you're using."
|
|
183
|
+
→ Link them to projects. Update project entries with technical detail. Create tool/technology entries for anything mentioned that isn't in the graph yet.
|
|
184
|
+
|
|
185
|
+
3. **Client contacts** — "Who do you work with on the client side?"
|
|
186
|
+
→ Create person entries for contacts not yet in the graph. Link to client organizations.
|
|
187
|
+
|
|
188
|
+
4. **Working style** — "How do you prefer to work? Any preferences or processes the team should know about?"
|
|
189
|
+
→ Update their profile. Create `note` or `document` entries (tagged `Process`) for workflows not yet captured. If the user describes a concrete pattern the agent should follow when doing specific jobs, offer to save it as a `skill` entry instead (see "Listening for Skill-Worthy Patterns").
|
|
190
|
+
|
|
191
|
+
5. **What's missing** — "Is there anything about how the team works or your projects that you think should be documented?"
|
|
192
|
+
→ Create entries (decisions, references, notes) based on their answer.
|
|
193
|
+
|
|
194
|
+
After all 5 questions are answered, call `mark_onboarded` to record that the member's onboarding is complete. Then synthesize the workspace description: read the current ABOUT.md and graph entities, and call `update_workspace_about` with an updated narrative that incorporates any new context from this member's answers. Preserve existing voice and content while weaving in new facts.
|
|
195
|
+
|
|
196
|
+
### Key Principle
|
|
197
|
+
|
|
198
|
+
**Every answer should ripple outward.** Don't just update the person entry — use each answer as a chance to enrich projects, create tools, add contacts, capture processes, and fill gaps across the graph. The member's perspective is a new source of context that the owner interview may have missed or oversimplified.
|
|
199
|
+
|
|
200
|
+
### Do NOT:
|
|
201
|
+
- Re-ask org-level questions (firm description, strategy, positioning)
|
|
202
|
+
- Create new folders or restructure the graph
|
|
203
|
+
- Override the owner's entries without good reason — add to them, don't replace
|
|
204
|
+
- Run the full 10-topic script — this is targeted, not comprehensive
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: schema-rules
|
|
3
|
+
description: Critical rules for creating and updating entities — enum discovery, field types, common pitfalls
|
|
4
|
+
loading: eager
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# Entity Schema Rules
|
|
8
|
+
|
|
9
|
+
These rules apply whenever you create or update entries. For the full field reference, load the `entity-schema` skill.
|
|
10
|
+
|
|
11
|
+
## Golden Rules
|
|
12
|
+
|
|
13
|
+
**Only pass fields you have real values for.** Do not include optional fields like `deal_value`, `email`, `website`, `start_date`, etc. unless you have an actual value. Never pass empty strings for optional fields — omit them entirely from the `data` object.
|
|
14
|
+
|
|
15
|
+
**Never wrap the `content` parameter in quotes.** The `content` field is raw markdown, not a JSON string. Do not add leading or trailing `"` characters. Pass the markdown directly.
|
|
16
|
+
|
|
17
|
+
## Enum Fields — Always Check the Schema
|
|
18
|
+
|
|
19
|
+
Many entity fields are enums (a closed set of allowed values). Field names that signal an enum include `stage`, `status`, `category`, `priority`, `audience`, `source`, `type`. **Do not guess enum values from memory.** Allowed values change as the product evolves, and a guessed value that "sounds right" (e.g. `negotiating` vs the actual `negotiation`) will fail validation.
|
|
20
|
+
|
|
21
|
+
**Before writing any enum-shaped field on create or update:**
|
|
22
|
+
|
|
23
|
+
1. Call `get_entity_schema(entityType)` to fetch the authoritative schema for the entity type.
|
|
24
|
+
2. Inspect the returned `fields` object. For each enum field, the descriptor includes:
|
|
25
|
+
- `type: "enum"` (or `"enum[]"` for arrays of enums)
|
|
26
|
+
- `enum: [...]` — the full list of allowed values
|
|
27
|
+
- `default: ...` — the value applied when the field is omitted (when present)
|
|
28
|
+
3. Use only values from the `enum` array. If you want the default, omit the field entirely.
|
|
29
|
+
|
|
30
|
+
You may cache the schema response within a single conversation turn, but re-fetch when starting work on a different entity type or after a schema change is mentioned.
|
|
31
|
+
|
|
32
|
+
## Field Types (from `get_entity_schema`)
|
|
33
|
+
|
|
34
|
+
- `string` — free text
|
|
35
|
+
- `string` with format `url` — must be a valid URL with protocol (e.g., `https://example.com`)
|
|
36
|
+
- `string` with format `email` — must be a valid email
|
|
37
|
+
- `datetime` — ISO 8601 datetime (auto-stamped on `created_at` / `updated_at` — do not pass these)
|
|
38
|
+
- `number` — actual number, not a quoted string
|
|
39
|
+
- `boolean` — `true` / `false`
|
|
40
|
+
- `enum` — one of the values listed under the field's `enum` array
|
|
41
|
+
- `string[]` — array of strings; for wikilink arrays (`attendees`, `services`, etc.) each entry is a wikilink id like `[[acme-corp]]`
|
|
42
|
+
- `enum[]` — array of enum values; each entry must be one of `itemEnum`
|
|
43
|
+
|
|
44
|
+
Dates use exactly two fields. `date` (type `date`) is every entity's salient date — its meaning is type-specific and shown in the field's `label` (a task's "Due date", a deal's "Close date", a project's "End date"). `start_date` (type `date`, only on project/event/task/deliverable/deal) is the optional earlier bound of a range `[start_date, date]`. Both must be `YYYY-MM-DD` (date-only — not a datetime) or omitted; anything else is rejected.
|
|
45
|
+
|
|
46
|
+
## Error Recovery
|
|
47
|
+
|
|
48
|
+
When an entry creation or update fails with a validation error, read the message carefully:
|
|
49
|
+
|
|
50
|
+
- If it names an enum field (e.g. `stage: Invalid enum value`), call `get_entity_schema` for that entity type, pick a valid value from the `enum` list, and retry.
|
|
51
|
+
- If it complains about a URL or email format, drop the field rather than substituting a placeholder.
|
|
52
|
+
- If it complains about a missing required field, ask the user or omit the entry and explain.
|
|
53
|
+
|
|
54
|
+
Do not skip the entry silently — either retry with corrected data or tell the user what went wrong.
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Capture-flow Tools for Studiograph Agent
|
|
3
|
+
*
|
|
4
|
+
* Single tool used by the quick-capture surface (POST /api/capture[/stream]).
|
|
5
|
+
* When the agent decides nothing in the user's input is worth saving as an
|
|
6
|
+
* entity, it calls `nothing_to_capture(reason)` and stops. The server
|
|
7
|
+
* captures the structured reason and surfaces it in the toast — no freeform
|
|
8
|
+
* assistant prose, no followup-suggestion marker leaking through.
|
|
9
|
+
*
|
|
10
|
+
* The tool is registered globally on every agent (so the Anthropic tool
|
|
11
|
+
* schema is consistent across sessions), but it's only meaningful when the
|
|
12
|
+
* capture flow has wired up `onNothingToCapture` in the AgentContext. In
|
|
13
|
+
* other contexts the callback is absent and the tool is effectively a
|
|
14
|
+
* no-op confirming back to the agent.
|
|
15
|
+
*/
|
|
16
|
+
import { Type as T } from 'typebox';
|
|
17
|
+
export declare function createCaptureTools(onNothingToCapture: () => ((reason: string) => void) | null | undefined): {
|
|
18
|
+
name: string;
|
|
19
|
+
label: string;
|
|
20
|
+
description: string;
|
|
21
|
+
parameters: T.TObject<{
|
|
22
|
+
reason: T.TString;
|
|
23
|
+
}>;
|
|
24
|
+
execute: (_toolCallId: string, params: any) => Promise<{
|
|
25
|
+
content: {
|
|
26
|
+
type: "text";
|
|
27
|
+
text: string;
|
|
28
|
+
}[];
|
|
29
|
+
details: any;
|
|
30
|
+
}>;
|
|
31
|
+
}[];
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Capture-flow Tools for Studiograph Agent
|
|
3
|
+
*
|
|
4
|
+
* Single tool used by the quick-capture surface (POST /api/capture[/stream]).
|
|
5
|
+
* When the agent decides nothing in the user's input is worth saving as an
|
|
6
|
+
* entity, it calls `nothing_to_capture(reason)` and stops. The server
|
|
7
|
+
* captures the structured reason and surfaces it in the toast — no freeform
|
|
8
|
+
* assistant prose, no followup-suggestion marker leaking through.
|
|
9
|
+
*
|
|
10
|
+
* The tool is registered globally on every agent (so the Anthropic tool
|
|
11
|
+
* schema is consistent across sessions), but it's only meaningful when the
|
|
12
|
+
* capture flow has wired up `onNothingToCapture` in the AgentContext. In
|
|
13
|
+
* other contexts the callback is absent and the tool is effectively a
|
|
14
|
+
* no-op confirming back to the agent.
|
|
15
|
+
*/
|
|
16
|
+
import { Type as T } from 'typebox';
|
|
17
|
+
import { wrapToolResult } from './graph-tools.js';
|
|
18
|
+
export function createCaptureTools(onNothingToCapture) {
|
|
19
|
+
return [
|
|
20
|
+
{
|
|
21
|
+
name: 'nothing_to_capture',
|
|
22
|
+
label: 'Nothing to Capture',
|
|
23
|
+
description: 'Use ONLY in the quick-capture flow when the user\'s input contains no substantive content worth saving as an entity (e.g. an error page, an empty URL fetch, a redirect-only page, or pure noise). Call this with a brief one-line reason and STOP — do not produce any assistant text after, do not emit followups. Do not use this when the input is a normal note or article you should save: in that case call create_entity instead.',
|
|
24
|
+
parameters: T.Object({
|
|
25
|
+
reason: T.String({ description: 'One short sentence explaining why nothing is worth capturing. Shown to the user verbatim.' }),
|
|
26
|
+
}),
|
|
27
|
+
execute: async (_toolCallId, params) => {
|
|
28
|
+
const reason = String(params?.reason ?? '').trim();
|
|
29
|
+
if (!reason) {
|
|
30
|
+
return wrapToolResult({ success: false, error: 'reason is required' });
|
|
31
|
+
}
|
|
32
|
+
const cb = onNothingToCapture();
|
|
33
|
+
if (cb)
|
|
34
|
+
cb(reason);
|
|
35
|
+
return wrapToolResult({ success: true, recorded: true });
|
|
36
|
+
},
|
|
37
|
+
},
|
|
38
|
+
];
|
|
39
|
+
}
|
|
40
|
+
//# sourceMappingURL=capture-tools.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"capture-tools.js","sourceRoot":"","sources":["../../../src/agent/tools/capture-tools.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,EAAE,IAAI,IAAI,CAAC,EAAE,MAAM,SAAS,CAAC;AACpC,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAElD,MAAM,UAAU,kBAAkB,CAChC,kBAAuE;IAEvE,OAAO;QACL;YACE,IAAI,EAAE,oBAAoB;YAC1B,KAAK,EAAE,oBAAoB;YAC3B,WAAW,EAAE,2aAA2a;YACxb,UAAU,EAAE,CAAC,CAAC,MAAM,CAAC;gBACnB,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC,EAAE,WAAW,EAAE,2FAA2F,EAAE,CAAC;aAC/H,CAAC;YACF,OAAO,EAAE,KAAK,EAAE,WAAmB,EAAE,MAAW,EAAE,EAAE;gBAClD,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;gBACnD,IAAI,CAAC,MAAM,EAAE,CAAC;oBACZ,OAAO,cAAc,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,oBAAoB,EAAE,CAAC,CAAC;gBACzE,CAAC;gBACD,MAAM,EAAE,GAAG,kBAAkB,EAAE,CAAC;gBAChC,IAAI,EAAE;oBAAE,EAAE,CAAC,MAAM,CAAC,CAAC;gBACnB,OAAO,cAAc,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC;YAC3D,CAAC;SACF;KACF,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Folder Management Tools for the Studiograph Agent
|
|
3
|
+
*
|
|
4
|
+
* Five tools that let the agent operate on the folder layout within a repo:
|
|
5
|
+
* - list_folders — read the folder tree of a repo
|
|
6
|
+
* - create_subfolder — create a new subfolder inside an existing repo
|
|
7
|
+
* (distinct from graph-tools' `create_folder`, which
|
|
8
|
+
* creates a brand-new top-level repo)
|
|
9
|
+
* - rename_folder — rename / move within the same repo
|
|
10
|
+
* - move_entity — relocate an entry to a different folder within the
|
|
11
|
+
* same repo (distinct from graph-tools'
|
|
12
|
+
* `transfer_entity`, which moves across repos)
|
|
13
|
+
* - delete_folder — remove a folder (recursive opt-in, blast-radius reported)
|
|
14
|
+
*
|
|
15
|
+
* The system prompt restraint rule applies to all of these:
|
|
16
|
+
* never reorganize/rename/delete without explicit user request.
|
|
17
|
+
*/
|
|
18
|
+
import { Type as T } from 'typebox';
|
|
19
|
+
import { WorkspaceManager } from '../../core/workspace-manager.js';
|
|
20
|
+
import { type AuthUser, type AuthService } from '../../services/auth-service.js';
|
|
21
|
+
import type { MutationEvent } from './graph-tools.js';
|
|
22
|
+
export declare function createFolderTools(workspaceManager: WorkspaceManager, gitUser: {
|
|
23
|
+
id: string;
|
|
24
|
+
name: string;
|
|
25
|
+
email: string;
|
|
26
|
+
}, onMutation?: (m: MutationEvent) => void, getCurrentUser?: () => AuthUser | null, authService?: AuthService | null,
|
|
27
|
+
/**
|
|
28
|
+
* Same activity hook as createGraphTools. Currently accepted but not wrapped
|
|
29
|
+
* around individual folder ops — folder mutations are rare relative to entity
|
|
30
|
+
* mutations, and the chip wouldn't have time to render before completing.
|
|
31
|
+
* Param exists so the orchestrator can pass a single callback symmetrically.
|
|
32
|
+
*/
|
|
33
|
+
_onAgentActivity?: (action: 'enter' | 'leave' | 'heartbeat', repo: string) => void): {
|
|
34
|
+
name: string;
|
|
35
|
+
label: string;
|
|
36
|
+
description: string;
|
|
37
|
+
parameters: T.TObject<{
|
|
38
|
+
repo: T.TString;
|
|
39
|
+
}>;
|
|
40
|
+
execute: (_toolCallId: string, params: any) => Promise<{
|
|
41
|
+
content: {
|
|
42
|
+
type: "text";
|
|
43
|
+
text: string;
|
|
44
|
+
}[];
|
|
45
|
+
details: any;
|
|
46
|
+
}>;
|
|
47
|
+
}[];
|
|
@@ -0,0 +1,249 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Folder Management Tools for the Studiograph Agent
|
|
3
|
+
*
|
|
4
|
+
* Five tools that let the agent operate on the folder layout within a repo:
|
|
5
|
+
* - list_folders — read the folder tree of a repo
|
|
6
|
+
* - create_subfolder — create a new subfolder inside an existing repo
|
|
7
|
+
* (distinct from graph-tools' `create_folder`, which
|
|
8
|
+
* creates a brand-new top-level repo)
|
|
9
|
+
* - rename_folder — rename / move within the same repo
|
|
10
|
+
* - move_entity — relocate an entry to a different folder within the
|
|
11
|
+
* same repo (distinct from graph-tools'
|
|
12
|
+
* `transfer_entity`, which moves across repos)
|
|
13
|
+
* - delete_folder — remove a folder (recursive opt-in, blast-radius reported)
|
|
14
|
+
*
|
|
15
|
+
* The system prompt restraint rule applies to all of these:
|
|
16
|
+
* never reorganize/rename/delete without explicit user request.
|
|
17
|
+
*/
|
|
18
|
+
import { Type as T } from 'typebox';
|
|
19
|
+
import * as access from '../../services/access-control.js';
|
|
20
|
+
import { wrapToolResult } from './graph-tools.js';
|
|
21
|
+
function canAccessRepo(repoName, workspaceManager, getCurrentUser, authService) {
|
|
22
|
+
const user = getCurrentUser();
|
|
23
|
+
if (!user)
|
|
24
|
+
return true;
|
|
25
|
+
if (!authService)
|
|
26
|
+
return true;
|
|
27
|
+
return access.hasRepoAccess(user, repoName, workspaceManager, authService);
|
|
28
|
+
}
|
|
29
|
+
export function createFolderTools(workspaceManager, gitUser, onMutation, getCurrentUser, authService,
|
|
30
|
+
/**
|
|
31
|
+
* Same activity hook as createGraphTools. Currently accepted but not wrapped
|
|
32
|
+
* around individual folder ops — folder mutations are rare relative to entity
|
|
33
|
+
* mutations, and the chip wouldn't have time to render before completing.
|
|
34
|
+
* Param exists so the orchestrator can pass a single callback symmetrically.
|
|
35
|
+
*/
|
|
36
|
+
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
37
|
+
_onAgentActivity) {
|
|
38
|
+
const getUser = getCurrentUser ?? (() => null);
|
|
39
|
+
const authSvc = authService ?? null;
|
|
40
|
+
function effectiveGitUser() {
|
|
41
|
+
const user = getUser();
|
|
42
|
+
if (user?.handle) {
|
|
43
|
+
return {
|
|
44
|
+
id: user.handle,
|
|
45
|
+
name: user.displayName ?? user.handle,
|
|
46
|
+
email: `${user.handle}@studiograph.local`,
|
|
47
|
+
};
|
|
48
|
+
}
|
|
49
|
+
return gitUser;
|
|
50
|
+
}
|
|
51
|
+
function resolveRepoOrFail(repoName) {
|
|
52
|
+
if (!canAccessRepo(repoName, workspaceManager, getUser, authSvc)) {
|
|
53
|
+
return { error: `Folder "${repoName}" not found` };
|
|
54
|
+
}
|
|
55
|
+
try {
|
|
56
|
+
return { graph: workspaceManager.getGraph(repoName) };
|
|
57
|
+
}
|
|
58
|
+
catch (err) {
|
|
59
|
+
return { error: err?.message ?? `Could not open folder "${repoName}"` };
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
return [
|
|
63
|
+
// ── list_folders ────────────────────────────────────────────────
|
|
64
|
+
{
|
|
65
|
+
name: 'list_folders',
|
|
66
|
+
label: 'List Folders',
|
|
67
|
+
description: 'List every nested folder inside a repo, returning repo-relative POSIX paths and any explicit display_name override. Empty array means the repo has no subfolders. Use this BEFORE creating a new folder to avoid duplicating an existing one.',
|
|
68
|
+
parameters: T.Object({
|
|
69
|
+
repo: T.String({ description: 'Folder name to inspect' }),
|
|
70
|
+
}),
|
|
71
|
+
execute: async (_toolCallId, params) => {
|
|
72
|
+
try {
|
|
73
|
+
const resolved = resolveRepoOrFail(params.repo);
|
|
74
|
+
if ('error' in resolved)
|
|
75
|
+
return wrapToolResult({ success: false, error: resolved.error });
|
|
76
|
+
const folders = resolved.graph.listFolders().map((f) => {
|
|
77
|
+
const entry = { path: f.path };
|
|
78
|
+
if (f.display_name)
|
|
79
|
+
entry.display_name = f.display_name;
|
|
80
|
+
return entry;
|
|
81
|
+
});
|
|
82
|
+
return wrapToolResult({
|
|
83
|
+
success: true,
|
|
84
|
+
repo: params.repo,
|
|
85
|
+
folders,
|
|
86
|
+
message: folders.length === 0
|
|
87
|
+
? `Folder "${params.repo}" has no subfolders.`
|
|
88
|
+
: `Found ${folders.length} subfolder${folders.length === 1 ? '' : 's'} in "${params.repo}".`,
|
|
89
|
+
});
|
|
90
|
+
}
|
|
91
|
+
catch (err) {
|
|
92
|
+
return wrapToolResult({ success: false, error: err instanceof Error ? err.message : 'Unknown error' });
|
|
93
|
+
}
|
|
94
|
+
},
|
|
95
|
+
},
|
|
96
|
+
// ── create_subfolder ─────────────────────────────────────────────
|
|
97
|
+
// Distinct from graph-tools' `create_folder`, which creates a new
|
|
98
|
+
// top-level shared repo. This one nests inside an existing repo.
|
|
99
|
+
{
|
|
100
|
+
name: 'create_subfolder',
|
|
101
|
+
label: 'Create Subfolder',
|
|
102
|
+
description: 'Create a new subfolder inside an existing repo. Path is repo-relative POSIX (e.g. "clients/acme"). Parent segments are auto-created. Pass display_name to override the title-cased fallback (use when the user wants casing the folder name can\'t express, e.g. "HR" or "Schema_OS"). For creating a brand-new top-level shared folder, use create_folder instead. Confirm with the user before calling — folders shape how the user organises their work.',
|
|
103
|
+
parameters: T.Object({
|
|
104
|
+
repo: T.String({ description: 'Folder name to create the subfolder inside' }),
|
|
105
|
+
path: T.String({ description: 'Repo-relative POSIX path of the new subfolder (e.g. "clients/acme")' }),
|
|
106
|
+
display_name: T.Optional(T.String({ description: 'Optional human-readable label. Omit when the title-cased folder name is the right display.' })),
|
|
107
|
+
}),
|
|
108
|
+
execute: async (_toolCallId, params) => {
|
|
109
|
+
try {
|
|
110
|
+
const resolved = resolveRepoOrFail(params.repo);
|
|
111
|
+
if ('error' in resolved)
|
|
112
|
+
return wrapToolResult({ success: false, error: resolved.error });
|
|
113
|
+
const actor = effectiveGitUser();
|
|
114
|
+
await resolved.graph.createFolder(params.path, undefined, actor, {
|
|
115
|
+
displayName: params.display_name,
|
|
116
|
+
});
|
|
117
|
+
// entityType "_folder" is the existing sentinel (see graph-tools'
|
|
118
|
+
// create_folder) that tells the client this is a folder-tree
|
|
119
|
+
// mutation, not an entry mutation — the realtime handler maps it
|
|
120
|
+
// to refreshRepoAfterFolderMutation so the sidebar + folder list
|
|
121
|
+
// view pick up the new subfolder without a manual reload.
|
|
122
|
+
onMutation?.({ action: 'created', repo: params.repo, entityType: '_folder', entityId: params.path });
|
|
123
|
+
return wrapToolResult({
|
|
124
|
+
success: true,
|
|
125
|
+
repo: params.repo,
|
|
126
|
+
path: params.path,
|
|
127
|
+
message: `Created folder ${params.repo}/${params.path}. Auto-committed.`,
|
|
128
|
+
});
|
|
129
|
+
}
|
|
130
|
+
catch (err) {
|
|
131
|
+
return wrapToolResult({ success: false, error: err instanceof Error ? err.message : 'Unknown error' });
|
|
132
|
+
}
|
|
133
|
+
},
|
|
134
|
+
},
|
|
135
|
+
// ── rename_folder ────────────────────────────────────────────────
|
|
136
|
+
{
|
|
137
|
+
name: 'rename_folder',
|
|
138
|
+
label: 'Rename Folder',
|
|
139
|
+
description: 'Rename or move a subfolder within the same repo, optionally updating its display_name in the same commit. To update only the display_name without moving, set `to` equal to `from`. ALL descendant entries follow when the path changes — their on-disk paths change. NEVER call this without explicit user instruction. Surface what will move ("Rename clients/acme → clients/acme-corp and update path of N entries?") and wait for confirmation.',
|
|
140
|
+
parameters: T.Object({
|
|
141
|
+
repo: T.String({ description: 'Folder name containing the subfolder' }),
|
|
142
|
+
from: T.String({ description: 'Current repo-relative path of the subfolder' }),
|
|
143
|
+
to: T.String({ description: 'New repo-relative path of the subfolder. Pass the same value as `from` to update display_name only.' }),
|
|
144
|
+
display_name: T.Optional(T.String({ description: 'New human-readable label. Pass empty string to clear the override and revert to the title-cased folder name.' })),
|
|
145
|
+
}),
|
|
146
|
+
execute: async (_toolCallId, params) => {
|
|
147
|
+
try {
|
|
148
|
+
const resolved = resolveRepoOrFail(params.repo);
|
|
149
|
+
if ('error' in resolved)
|
|
150
|
+
return wrapToolResult({ success: false, error: resolved.error });
|
|
151
|
+
const actor = effectiveGitUser();
|
|
152
|
+
await resolved.graph.renameFolder(params.from, params.to, undefined, actor, {
|
|
153
|
+
displayName: params.display_name === undefined ? undefined : params.display_name,
|
|
154
|
+
});
|
|
155
|
+
onMutation?.({ action: 'updated', repo: params.repo, entityType: '_folder', entityId: params.to });
|
|
156
|
+
return wrapToolResult({
|
|
157
|
+
success: true,
|
|
158
|
+
repo: params.repo,
|
|
159
|
+
from: params.from,
|
|
160
|
+
to: params.to,
|
|
161
|
+
message: `Renamed ${params.repo}/${params.from} → ${params.repo}/${params.to}. Auto-committed.`,
|
|
162
|
+
});
|
|
163
|
+
}
|
|
164
|
+
catch (err) {
|
|
165
|
+
return wrapToolResult({ success: false, error: err instanceof Error ? err.message : 'Unknown error' });
|
|
166
|
+
}
|
|
167
|
+
},
|
|
168
|
+
},
|
|
169
|
+
// ── move_entity ──────────────────────────────────────────────────
|
|
170
|
+
{
|
|
171
|
+
name: 'move_entity',
|
|
172
|
+
label: 'Move Entry',
|
|
173
|
+
description: 'Move an entry to a different folder within the SAME repo. Only the entry\'s folder_path changes — its id and type are preserved. For cross-repo moves the user should use the bulk-move dialog (no agent tool yet).',
|
|
174
|
+
parameters: T.Object({
|
|
175
|
+
repo: T.String({ description: 'Folder name containing the entry' }),
|
|
176
|
+
entityType: T.String({ description: 'Entity type of the entry being moved' }),
|
|
177
|
+
entityId: T.String({ description: 'ID of the entry being moved' }),
|
|
178
|
+
folder_path: T.String({ description: 'Target repo-relative folder path. Empty string = repo root.' }),
|
|
179
|
+
}),
|
|
180
|
+
execute: async (_toolCallId, params) => {
|
|
181
|
+
try {
|
|
182
|
+
const resolved = resolveRepoOrFail(params.repo);
|
|
183
|
+
if ('error' in resolved)
|
|
184
|
+
return wrapToolResult({ success: false, error: resolved.error });
|
|
185
|
+
const actor = effectiveGitUser();
|
|
186
|
+
const moved = await resolved.graph.move(params.entityType, params.entityId, params.folder_path, undefined, actor);
|
|
187
|
+
onMutation?.({ action: 'updated', repo: params.repo, entityType: params.entityType, entityId: params.entityId });
|
|
188
|
+
return wrapToolResult({
|
|
189
|
+
success: true,
|
|
190
|
+
repo: params.repo,
|
|
191
|
+
entityType: params.entityType,
|
|
192
|
+
entityId: params.entityId,
|
|
193
|
+
folder_path: params.folder_path,
|
|
194
|
+
path: moved.path,
|
|
195
|
+
message: `Moved ${params.entityType}/${params.entityId} to ${params.repo}/${params.folder_path || '(root)'}. Auto-committed.`,
|
|
196
|
+
});
|
|
197
|
+
}
|
|
198
|
+
catch (err) {
|
|
199
|
+
return wrapToolResult({ success: false, error: err instanceof Error ? err.message : 'Unknown error' });
|
|
200
|
+
}
|
|
201
|
+
},
|
|
202
|
+
},
|
|
203
|
+
// ── delete_folder ────────────────────────────────────────────────
|
|
204
|
+
{
|
|
205
|
+
name: 'delete_folder',
|
|
206
|
+
label: 'Delete Folder',
|
|
207
|
+
description: 'Delete a subfolder. Defaults to non-recursive — if the folder has entries or subfolders the call FAILS with a blast_radius payload (entriesDeleted, subfoldersDeleted) so you can present the impact to the user. Re-invoke with recursive: true ONLY after explicit user confirmation. NEVER pass recursive: true on the first attempt.',
|
|
208
|
+
parameters: T.Object({
|
|
209
|
+
repo: T.String({ description: 'Folder name containing the subfolder to delete' }),
|
|
210
|
+
path: T.String({ description: 'Repo-relative path of the subfolder to delete' }),
|
|
211
|
+
recursive: T.Optional(T.Boolean({ description: 'Set to true ONLY after the user has confirmed the blast radius. Defaults to false.' })),
|
|
212
|
+
}),
|
|
213
|
+
execute: async (_toolCallId, params) => {
|
|
214
|
+
try {
|
|
215
|
+
const resolved = resolveRepoOrFail(params.repo);
|
|
216
|
+
if ('error' in resolved)
|
|
217
|
+
return wrapToolResult({ success: false, error: resolved.error });
|
|
218
|
+
const actor = effectiveGitUser();
|
|
219
|
+
const result = await resolved.graph.deleteFolder(params.path, {
|
|
220
|
+
recursive: params.recursive === true,
|
|
221
|
+
user: actor,
|
|
222
|
+
});
|
|
223
|
+
onMutation?.({ action: 'deleted', repo: params.repo, entityType: '_folder', entityId: params.path });
|
|
224
|
+
return wrapToolResult({
|
|
225
|
+
success: true,
|
|
226
|
+
repo: params.repo,
|
|
227
|
+
path: params.path,
|
|
228
|
+
entriesDeleted: result.entriesDeleted,
|
|
229
|
+
subfoldersDeleted: result.subfoldersDeleted,
|
|
230
|
+
message: `Deleted folder ${params.repo}/${params.path}${result.entriesDeleted > 0 || result.subfoldersDeleted > 0 ? ` (${result.entriesDeleted} entries, ${result.subfoldersDeleted} subfolders)` : ''}. Auto-committed.`,
|
|
231
|
+
});
|
|
232
|
+
}
|
|
233
|
+
catch (err) {
|
|
234
|
+
// Surface the blast radius so the agent can ask the user before retrying recursively.
|
|
235
|
+
if (err?.code === 'FOLDER_NOT_EMPTY' && err.blastRadius) {
|
|
236
|
+
return wrapToolResult({
|
|
237
|
+
success: false,
|
|
238
|
+
code: 'FOLDER_NOT_EMPTY',
|
|
239
|
+
blast_radius: err.blastRadius,
|
|
240
|
+
message: `Folder ${params.repo}/${params.path} is not empty: ${err.blastRadius.entriesDeleted} entries, ${err.blastRadius.subfoldersDeleted} subfolders. Confirm with the user before re-invoking with recursive: true.`,
|
|
241
|
+
});
|
|
242
|
+
}
|
|
243
|
+
return wrapToolResult({ success: false, error: err instanceof Error ? err.message : 'Unknown error' });
|
|
244
|
+
}
|
|
245
|
+
},
|
|
246
|
+
},
|
|
247
|
+
];
|
|
248
|
+
}
|
|
249
|
+
//# sourceMappingURL=folder-tools.js.map
|