@theihtisham/agent-shadow-brain 7.2.0 → 7.22.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/CHANGELOG.md +482 -427
- package/README.md +202 -68
- package/dist/activity-cli.d.ts +3 -0
- package/dist/activity-cli.d.ts.map +1 -0
- package/dist/activity-cli.js +78 -0
- package/dist/activity-cli.js.map +1 -0
- package/dist/adapters/index.d.ts +2 -1
- package/dist/adapters/index.d.ts.map +1 -1
- package/dist/adapters/index.js +3 -2
- package/dist/adapters/index.js.map +1 -1
- package/dist/brain/activity-journal.d.ts +82 -0
- package/dist/brain/activity-journal.d.ts.map +1 -0
- package/dist/brain/activity-journal.js +315 -0
- package/dist/brain/activity-journal.js.map +1 -0
- package/dist/brain/activity-reporting.d.ts +14 -0
- package/dist/brain/activity-reporting.d.ts.map +1 -0
- package/dist/brain/activity-reporting.js +17 -0
- package/dist/brain/activity-reporting.js.map +1 -0
- package/dist/brain/auto-update.js +1 -1
- package/dist/brain/auto-update.js.map +1 -1
- package/dist/brain/brain-portability.js +1 -1
- package/dist/brain/brain-portability.js.map +1 -1
- package/dist/brain/client-config.d.ts +19 -0
- package/dist/brain/client-config.d.ts.map +1 -0
- package/dist/brain/client-config.js +40 -0
- package/dist/brain/client-config.js.map +1 -0
- package/dist/brain/client-integrations.d.ts +63 -0
- package/dist/brain/client-integrations.d.ts.map +1 -0
- package/dist/brain/client-integrations.js +79 -0
- package/dist/brain/client-integrations.js.map +1 -0
- package/dist/brain/context-assembly.d.ts +41 -5
- package/dist/brain/context-assembly.d.ts.map +1 -1
- package/dist/brain/context-assembly.js +366 -35
- package/dist/brain/context-assembly.js.map +1 -1
- package/dist/brain/context-efficiency.d.ts +48 -0
- package/dist/brain/context-efficiency.d.ts.map +1 -0
- package/dist/brain/context-efficiency.js +34 -0
- package/dist/brain/context-efficiency.js.map +1 -0
- package/dist/brain/context-request.d.ts +4 -0
- package/dist/brain/context-request.d.ts.map +1 -0
- package/dist/brain/context-request.js +24 -0
- package/dist/brain/context-request.js.map +1 -0
- package/dist/brain/context-retrieval.d.ts +88 -0
- package/dist/brain/context-retrieval.d.ts.map +1 -0
- package/dist/brain/context-retrieval.js +301 -0
- package/dist/brain/context-retrieval.js.map +1 -0
- package/dist/brain/feature-settings.d.ts +10 -0
- package/dist/brain/feature-settings.d.ts.map +1 -1
- package/dist/brain/feature-settings.js +18 -2
- package/dist/brain/feature-settings.js.map +1 -1
- package/dist/brain/file-identity.d.ts +4 -0
- package/dist/brain/file-identity.d.ts.map +1 -0
- package/dist/brain/file-identity.js +27 -0
- package/dist/brain/file-identity.js.map +1 -0
- package/dist/brain/global-brain.d.ts +18 -2
- package/dist/brain/global-brain.d.ts.map +1 -1
- package/dist/brain/global-brain.js +75 -7
- package/dist/brain/global-brain.js.map +1 -1
- package/dist/brain/managed-project-skills.d.ts +48 -0
- package/dist/brain/managed-project-skills.d.ts.map +1 -0
- package/dist/brain/managed-project-skills.js +230 -0
- package/dist/brain/managed-project-skills.js.map +1 -0
- package/dist/brain/mcp-presence.d.ts +50 -0
- package/dist/brain/mcp-presence.d.ts.map +1 -0
- package/dist/brain/mcp-presence.js +214 -0
- package/dist/brain/mcp-presence.js.map +1 -0
- package/dist/brain/mcp-server.d.ts +40 -1
- package/dist/brain/mcp-server.d.ts.map +1 -1
- package/dist/brain/mcp-server.js +506 -52
- package/dist/brain/mcp-server.js.map +1 -1
- package/dist/brain/mcp-stdio.d.ts +12 -0
- package/dist/brain/mcp-stdio.d.ts.map +1 -0
- package/dist/brain/mcp-stdio.js +158 -0
- package/dist/brain/mcp-stdio.js.map +1 -0
- package/dist/brain/memory-annotations.d.ts +99 -0
- package/dist/brain/memory-annotations.d.ts.map +1 -0
- package/dist/brain/memory-annotations.js +402 -0
- package/dist/brain/memory-annotations.js.map +1 -0
- package/dist/brain/memory-graph.d.ts.map +1 -1
- package/dist/brain/memory-graph.js +12 -23
- package/dist/brain/memory-graph.js.map +1 -1
- package/dist/brain/memory-inspection.d.ts +73 -0
- package/dist/brain/memory-inspection.d.ts.map +1 -0
- package/dist/brain/memory-inspection.js +131 -0
- package/dist/brain/memory-inspection.js.map +1 -0
- package/dist/brain/memory-mcp-content.d.ts +46 -0
- package/dist/brain/memory-mcp-content.d.ts.map +1 -0
- package/dist/brain/memory-mcp-content.js +95 -0
- package/dist/brain/memory-mcp-content.js.map +1 -0
- package/dist/brain/memory-sources.d.ts +8 -0
- package/dist/brain/memory-sources.d.ts.map +1 -0
- package/dist/brain/memory-sources.js +27 -0
- package/dist/brain/memory-sources.js.map +1 -0
- package/dist/brain/model-registry.d.ts +4 -5
- package/dist/brain/model-registry.d.ts.map +1 -1
- package/dist/brain/model-registry.js +22 -207
- package/dist/brain/model-registry.js.map +1 -1
- package/dist/brain/model-usage.d.ts +66 -0
- package/dist/brain/model-usage.d.ts.map +1 -0
- package/dist/brain/model-usage.js +246 -0
- package/dist/brain/model-usage.js.map +1 -0
- package/dist/brain/native-codex.d.ts +105 -0
- package/dist/brain/native-codex.d.ts.map +1 -0
- package/dist/brain/native-codex.js +292 -0
- package/dist/brain/native-codex.js.map +1 -0
- package/dist/brain/native-session-import.d.ts +56 -0
- package/dist/brain/native-session-import.d.ts.map +1 -0
- package/dist/brain/native-session-import.js +307 -0
- package/dist/brain/native-session-import.js.map +1 -0
- package/dist/brain/orchestrator.js +1 -1
- package/dist/brain/orchestrator.js.map +1 -1
- package/dist/brain/project-feedback.d.ts +63 -0
- package/dist/brain/project-feedback.d.ts.map +1 -0
- package/dist/brain/project-feedback.js +300 -0
- package/dist/brain/project-feedback.js.map +1 -0
- package/dist/brain/project-hub-contract.d.ts +332 -0
- package/dist/brain/project-hub-contract.d.ts.map +1 -0
- package/dist/brain/project-hub-contract.js +57 -0
- package/dist/brain/project-hub-contract.js.map +1 -0
- package/dist/brain/project-hub-mcp.d.ts +182 -0
- package/dist/brain/project-hub-mcp.d.ts.map +1 -0
- package/dist/brain/project-hub-mcp.js +46 -0
- package/dist/brain/project-hub-mcp.js.map +1 -0
- package/dist/brain/project-hub-pdf-worker.d.ts +13 -0
- package/dist/brain/project-hub-pdf-worker.d.ts.map +1 -0
- package/dist/brain/project-hub-pdf-worker.js +84 -0
- package/dist/brain/project-hub-pdf-worker.js.map +1 -0
- package/dist/brain/project-hub-store.d.ts +50 -0
- package/dist/brain/project-hub-store.d.ts.map +1 -0
- package/dist/brain/project-hub-store.js +257 -0
- package/dist/brain/project-hub-store.js.map +1 -0
- package/dist/brain/project-hub.d.ts +132 -0
- package/dist/brain/project-hub.d.ts.map +1 -0
- package/dist/brain/project-hub.js +403 -0
- package/dist/brain/project-hub.js.map +1 -0
- package/dist/brain/project-kit-inspection.d.ts +28 -0
- package/dist/brain/project-kit-inspection.d.ts.map +1 -0
- package/dist/brain/project-kit-inspection.js +200 -0
- package/dist/brain/project-kit-inspection.js.map +1 -0
- package/dist/brain/project-kit-paths.d.ts +13 -0
- package/dist/brain/project-kit-paths.d.ts.map +1 -0
- package/dist/brain/project-kit-paths.js +141 -0
- package/dist/brain/project-kit-paths.js.map +1 -0
- package/dist/brain/project-kit.d.ts +51 -0
- package/dist/brain/project-kit.d.ts.map +1 -0
- package/dist/brain/project-kit.js +319 -0
- package/dist/brain/project-kit.js.map +1 -0
- package/dist/brain/project-memory.d.ts +38 -0
- package/dist/brain/project-memory.d.ts.map +1 -0
- package/dist/brain/project-memory.js +76 -0
- package/dist/brain/project-memory.js.map +1 -0
- package/dist/brain/project-policy-delivery.d.ts +8 -0
- package/dist/brain/project-policy-delivery.d.ts.map +1 -0
- package/dist/brain/project-policy-delivery.js +38 -0
- package/dist/brain/project-policy-delivery.js.map +1 -0
- package/dist/brain/project-policy.d.ts +88 -0
- package/dist/brain/project-policy.d.ts.map +1 -0
- package/dist/brain/project-policy.js +267 -0
- package/dist/brain/project-policy.js.map +1 -0
- package/dist/brain/project-session-contract.d.ts +180 -0
- package/dist/brain/project-session-contract.d.ts.map +1 -0
- package/dist/brain/project-session-contract.js +50 -0
- package/dist/brain/project-session-contract.js.map +1 -0
- package/dist/brain/project-session-mcp.d.ts +145 -0
- package/dist/brain/project-session-mcp.d.ts.map +1 -0
- package/dist/brain/project-session-mcp.js +58 -0
- package/dist/brain/project-session-mcp.js.map +1 -0
- package/dist/brain/project-sessions.d.ts +97 -0
- package/dist/brain/project-sessions.d.ts.map +1 -0
- package/dist/brain/project-sessions.js +223 -0
- package/dist/brain/project-sessions.js.map +1 -0
- package/dist/brain/project-source-contract.d.ts +109 -0
- package/dist/brain/project-source-contract.d.ts.map +1 -0
- package/dist/brain/project-source-contract.js +2 -0
- package/dist/brain/project-source-contract.js.map +1 -0
- package/dist/brain/project-source-intake.d.ts +26 -0
- package/dist/brain/project-source-intake.d.ts.map +1 -0
- package/dist/brain/project-source-intake.js +457 -0
- package/dist/brain/project-source-intake.js.map +1 -0
- package/dist/brain/subconscious.d.ts +3 -1
- package/dist/brain/subconscious.d.ts.map +1 -1
- package/dist/brain/subconscious.js +8 -3
- package/dist/brain/subconscious.js.map +1 -1
- package/dist/brain/workflow-skills.d.ts +5 -5
- package/dist/brain/workflow-skills.d.ts.map +1 -1
- package/dist/brain/workflow-skills.js +3 -2
- package/dist/brain/workflow-skills.js.map +1 -1
- package/dist/cli.js +37 -3
- package/dist/cli.js.map +1 -1
- package/dist/context-cli.d.ts.map +1 -1
- package/dist/context-cli.js +49 -7
- package/dist/context-cli.js.map +1 -1
- package/dist/curation-cli.d.ts +4 -0
- package/dist/curation-cli.d.ts.map +1 -0
- package/dist/curation-cli.js +118 -0
- package/dist/curation-cli.js.map +1 -0
- package/dist/dashboard/brain-hub-actions.d.ts +2 -0
- package/dist/dashboard/brain-hub-actions.d.ts.map +1 -0
- package/dist/dashboard/brain-hub-actions.js +234 -0
- package/dist/dashboard/brain-hub-actions.js.map +1 -0
- package/dist/dashboard/brain-hub-agent-dock.d.ts +2 -0
- package/dist/dashboard/brain-hub-agent-dock.d.ts.map +1 -0
- package/dist/dashboard/brain-hub-agent-dock.js +255 -0
- package/dist/dashboard/brain-hub-agent-dock.js.map +1 -0
- package/dist/dashboard/brain-hub-brand-icons.d.ts +2 -0
- package/dist/dashboard/brain-hub-brand-icons.d.ts.map +1 -0
- package/dist/dashboard/brain-hub-brand-icons.js +9 -0
- package/dist/dashboard/brain-hub-brand-icons.js.map +1 -0
- package/dist/dashboard/brain-hub-client.d.ts +2 -0
- package/dist/dashboard/brain-hub-client.d.ts.map +1 -0
- package/dist/dashboard/brain-hub-client.js +435 -0
- package/dist/dashboard/brain-hub-client.js.map +1 -0
- package/dist/dashboard/brain-hub-context.d.ts +2 -0
- package/dist/dashboard/brain-hub-context.d.ts.map +1 -0
- package/dist/dashboard/brain-hub-context.js +37 -0
- package/dist/dashboard/brain-hub-context.js.map +1 -0
- package/dist/dashboard/brain-hub-controls.d.ts +2 -0
- package/dist/dashboard/brain-hub-controls.d.ts.map +1 -0
- package/dist/dashboard/brain-hub-controls.js +63 -0
- package/dist/dashboard/brain-hub-controls.js.map +1 -0
- package/dist/dashboard/brain-hub-exchanges.d.ts +2 -0
- package/dist/dashboard/brain-hub-exchanges.d.ts.map +1 -0
- package/dist/dashboard/brain-hub-exchanges.js +82 -0
- package/dist/dashboard/brain-hub-exchanges.js.map +1 -0
- package/dist/dashboard/brain-hub-graph.d.ts +2 -0
- package/dist/dashboard/brain-hub-graph.d.ts.map +1 -0
- package/dist/dashboard/brain-hub-graph.js +338 -0
- package/dist/dashboard/brain-hub-graph.js.map +1 -0
- package/dist/dashboard/brain-hub-html.d.ts +2 -0
- package/dist/dashboard/brain-hub-html.d.ts.map +1 -0
- package/dist/dashboard/brain-hub-html.js +85 -0
- package/dist/dashboard/brain-hub-html.js.map +1 -0
- package/dist/dashboard/brain-hub-knowledge.d.ts +2 -0
- package/dist/dashboard/brain-hub-knowledge.d.ts.map +1 -0
- package/dist/dashboard/brain-hub-knowledge.js +33 -0
- package/dist/dashboard/brain-hub-knowledge.js.map +1 -0
- package/dist/dashboard/brain-hub-live.d.ts +2 -0
- package/dist/dashboard/brain-hub-live.d.ts.map +1 -0
- package/dist/dashboard/brain-hub-live.js +151 -0
- package/dist/dashboard/brain-hub-live.js.map +1 -0
- package/dist/dashboard/brain-hub-managed-skills.d.ts +2 -0
- package/dist/dashboard/brain-hub-managed-skills.d.ts.map +1 -0
- package/dist/dashboard/brain-hub-managed-skills.js +20 -0
- package/dist/dashboard/brain-hub-managed-skills.js.map +1 -0
- package/dist/dashboard/brain-hub-native.d.ts +2 -0
- package/dist/dashboard/brain-hub-native.d.ts.map +1 -0
- package/dist/dashboard/brain-hub-native.js +44 -0
- package/dist/dashboard/brain-hub-native.js.map +1 -0
- package/dist/dashboard/brain-hub-project-views.d.ts +2 -0
- package/dist/dashboard/brain-hub-project-views.d.ts.map +1 -0
- package/dist/dashboard/brain-hub-project-views.js +80 -0
- package/dist/dashboard/brain-hub-project-views.js.map +1 -0
- package/dist/dashboard/brain-hub-sessions.d.ts +2 -0
- package/dist/dashboard/brain-hub-sessions.d.ts.map +1 -0
- package/dist/dashboard/brain-hub-sessions.js +40 -0
- package/dist/dashboard/brain-hub-sessions.js.map +1 -0
- package/dist/dashboard/brain-hub-usage.d.ts +2 -0
- package/dist/dashboard/brain-hub-usage.d.ts.map +1 -0
- package/dist/dashboard/brain-hub-usage.js +28 -0
- package/dist/dashboard/brain-hub-usage.js.map +1 -0
- package/dist/dashboard/brain-hub-views.d.ts +2 -0
- package/dist/dashboard/brain-hub-views.d.ts.map +1 -0
- package/dist/dashboard/brain-hub-views.js +155 -0
- package/dist/dashboard/brain-hub-views.js.map +1 -0
- package/dist/dashboard/demo-workspace.d.ts +11 -0
- package/dist/dashboard/demo-workspace.d.ts.map +1 -0
- package/dist/dashboard/demo-workspace.js +178 -0
- package/dist/dashboard/demo-workspace.js.map +1 -0
- package/dist/dashboard/live-workspace-html.d.ts +2 -0
- package/dist/dashboard/live-workspace-html.d.ts.map +1 -0
- package/dist/dashboard/live-workspace-html.js +1042 -0
- package/dist/dashboard/live-workspace-html.js.map +1 -0
- package/dist/dashboard/managed-project-skills-api.d.ts +29 -0
- package/dist/dashboard/managed-project-skills-api.d.ts.map +1 -0
- package/dist/dashboard/managed-project-skills-api.js +28 -0
- package/dist/dashboard/managed-project-skills-api.js.map +1 -0
- package/dist/dashboard/native-codex-api.d.ts +83 -0
- package/dist/dashboard/native-codex-api.d.ts.map +1 -0
- package/dist/dashboard/native-codex-api.js +91 -0
- package/dist/dashboard/native-codex-api.js.map +1 -0
- package/dist/dashboard/project-feedback-html.d.ts +5 -0
- package/dist/dashboard/project-feedback-html.d.ts.map +1 -0
- package/dist/dashboard/project-feedback-html.js +216 -0
- package/dist/dashboard/project-feedback-html.js.map +1 -0
- package/dist/dashboard/project-file-watch.d.ts +46 -0
- package/dist/dashboard/project-file-watch.d.ts.map +1 -0
- package/dist/dashboard/project-file-watch.js +221 -0
- package/dist/dashboard/project-file-watch.js.map +1 -0
- package/dist/dashboard/project-hub-api.d.ts +5 -0
- package/dist/dashboard/project-hub-api.d.ts.map +1 -0
- package/dist/dashboard/project-hub-api.js +121 -0
- package/dist/dashboard/project-hub-api.js.map +1 -0
- package/dist/dashboard/project-kit-html.d.ts +4 -0
- package/dist/dashboard/project-kit-html.d.ts.map +1 -0
- package/dist/dashboard/project-kit-html.js +359 -0
- package/dist/dashboard/project-kit-html.js.map +1 -0
- package/dist/dashboard/project-live-stream.d.ts +33 -0
- package/dist/dashboard/project-live-stream.d.ts.map +1 -0
- package/dist/dashboard/project-live-stream.js +233 -0
- package/dist/dashboard/project-live-stream.js.map +1 -0
- package/dist/dashboard/project-policy-api.d.ts +37 -0
- package/dist/dashboard/project-policy-api.d.ts.map +1 -0
- package/dist/dashboard/project-policy-api.js +31 -0
- package/dist/dashboard/project-policy-api.js.map +1 -0
- package/dist/dashboard/project-session-api.d.ts +28 -0
- package/dist/dashboard/project-session-api.d.ts.map +1 -0
- package/dist/dashboard/project-session-api.js +84 -0
- package/dist/dashboard/project-session-api.js.map +1 -0
- package/dist/dashboard/project-source-api.d.ts +11 -0
- package/dist/dashboard/project-source-api.d.ts.map +1 -0
- package/dist/dashboard/project-source-api.js +67 -0
- package/dist/dashboard/project-source-api.js.map +1 -0
- package/dist/dashboard/project-workspace.d.ts +16 -0
- package/dist/dashboard/project-workspace.d.ts.map +1 -0
- package/dist/dashboard/project-workspace.js +124 -0
- package/dist/dashboard/project-workspace.js.map +1 -0
- package/dist/dashboard/server.d.ts +1 -0
- package/dist/dashboard/server.d.ts.map +1 -1
- package/dist/dashboard/server.js +99 -42
- package/dist/dashboard/server.js.map +1 -1
- package/dist/dashboard/v6-dashboard-html.d.ts +1 -1
- package/dist/dashboard/v6-dashboard-html.d.ts.map +1 -1
- package/dist/dashboard/v6-dashboard-html.js +39 -87
- package/dist/dashboard/v6-dashboard-html.js.map +1 -1
- package/dist/dashboard/workspace-api.d.ts +12 -0
- package/dist/dashboard/workspace-api.d.ts.map +1 -1
- package/dist/dashboard/workspace-api.js +359 -41
- package/dist/dashboard/workspace-api.js.map +1 -1
- package/dist/dashboard/workspace-html.d.ts.map +1 -1
- package/dist/dashboard/workspace-html.js +2535 -1552
- package/dist/dashboard/workspace-html.js.map +1 -1
- package/dist/dashboard/workspace-status.d.ts +53 -0
- package/dist/dashboard/workspace-status.d.ts.map +1 -0
- package/dist/dashboard/workspace-status.js +23 -0
- package/dist/dashboard/workspace-status.js.map +1 -0
- package/dist/index.d.ts +16 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +13 -0
- package/dist/index.js.map +1 -1
- package/dist/integration-cli.d.ts +3 -0
- package/dist/integration-cli.d.ts.map +1 -0
- package/dist/integration-cli.js +16 -0
- package/dist/integration-cli.js.map +1 -0
- package/dist/project-cli.d.ts +3 -0
- package/dist/project-cli.d.ts.map +1 -0
- package/dist/project-cli.js +100 -0
- package/dist/project-cli.js.map +1 -0
- package/dist/types.d.ts +8 -1
- package/dist/types.d.ts.map +1 -1
- package/docs/BRAND_ASSETS.md +36 -0
- package/docs/COMPARISON.md +22 -0
- package/docs/COMPONENTS.md +66 -0
- package/docs/CONTEXT_LAB.md +79 -0
- package/docs/FEATURES_AND_LIMITS.md +29 -0
- package/docs/INTEGRATIONS.md +70 -0
- package/docs/LEARNING.md +46 -0
- package/docs/PROJECT_KIT.md +98 -0
- package/docs/QUICKSTART.md +62 -0
- package/docs/README.md +36 -0
- package/docs/ROADMAP-v7.md +147 -0
- package/docs/SESSIONS.md +77 -0
- package/docs/SHARING.md +13 -0
- package/docs/SHOWCASE.md +87 -0
- package/docs/SOURCE_INTAKE.md +33 -0
- package/docs/STATS.md +21 -0
- package/docs/TROUBLESHOOTING.md +42 -0
- package/docs/UPGRADE_PLAN_v7.0.0.md +203 -0
- package/docs/VIRAL-PLAYBOOK.md +259 -0
- package/docs/VISUAL_GUIDE_v7.1.4.md +70 -0
- package/docs/VISUAL_GUIDE_v7.22.0.md +73 -0
- package/docs/WORKFLOW_INTEGRATION.md +125 -105
- package/docs/WORKSPACE.md +63 -70
- package/docs/assets/7.1.4-collaboration-design-preview.png +0 -0
- package/docs/assets/7.1.4-comparison.png +0 -0
- package/docs/assets/7.1.4-context-lab.png +0 -0
- package/docs/assets/7.1.4-control-room-dense-preview.png +0 -0
- package/docs/assets/7.1.4-control-room-focus-preview.png +0 -0
- package/docs/assets/7.1.4-features.png +0 -0
- package/docs/assets/7.1.4-graph.png +0 -0
- package/docs/assets/7.1.4-hub-control-room.png +0 -0
- package/docs/assets/7.1.4-hub-empty.png +0 -0
- package/docs/assets/7.1.4-hub-knowledge.png +0 -0
- package/docs/assets/7.1.4-hub-learning.png +0 -0
- package/docs/assets/7.1.4-hub-mobile.png +0 -0
- package/docs/assets/7.1.4-hub-public-docs-source.png +0 -0
- package/docs/assets/7.1.4-hub-public-docs.gif +0 -0
- package/docs/assets/7.1.4-hub-public-docs.png +0 -0
- package/docs/assets/7.1.4-hub-setup.png +0 -0
- package/docs/assets/7.1.4-hub-walkthrough.gif +0 -0
- package/docs/assets/7.1.4-integrations.png +0 -0
- package/docs/assets/7.1.4-knowledge-design-preview.png +0 -0
- package/docs/assets/7.1.4-learning-design-preview.png +0 -0
- package/docs/assets/7.1.4-learning.png +0 -0
- package/docs/assets/7.1.4-live.png +0 -0
- package/docs/assets/7.1.4-memory-review.png +0 -0
- package/docs/assets/7.1.4-mobile.png +0 -0
- package/docs/assets/7.1.4-models-design-preview.png +0 -0
- package/docs/assets/7.1.4-outcome-ranking.png +0 -0
- package/docs/assets/7.1.4-overview.png +0 -0
- package/docs/assets/7.1.4-project-kit.png +0 -0
- package/docs/assets/7.1.4-project-skill-preview.png +0 -0
- package/docs/assets/7.1.4-replay.png +0 -0
- package/docs/assets/7.1.4-setup-design-preview.png +0 -0
- package/docs/assets/7.1.4-usage-design-preview.png +0 -0
- package/docs/assets/7.22.0-agent-dock-mobile.png +0 -0
- package/docs/assets/7.22.0-agent-dock.gif +0 -0
- package/docs/assets/7.22.0-agent-dock.png +0 -0
- package/docs/assets/7.22.0-hub-exchange.png +0 -0
- package/docs/assets/7.22.0-hub-exchanges.gif +0 -0
- package/docs/assets/7.22.0-hub-graph.png +0 -0
- package/docs/assets/7.22.0-hub-mobile-empty.png +0 -0
- package/docs/assets/7.22.0-managed-skills.png +0 -0
- package/docs/assets/7.22.0-plain-evidence.png +0 -0
- package/docs/assets/7.22.0-project-controls.png +0 -0
- package/docs/assets/7.22.0-sessions.png +0 -0
- package/docs/assets/7.22.0-teach-brain.png +0 -0
- package/docs/assets/context-v7.1.3.png +0 -0
- package/docs/assets/features-v7.1.3.png +0 -0
- package/docs/assets/graph-v7.1.3.png +0 -0
- package/docs/assets/integrations-v7.1.3.png +0 -0
- package/docs/assets/live-v7.1.3.png +0 -0
- package/docs/assets/live-v7.1.4.gif +0 -0
- package/docs/assets/memory-detail-v7.1.3.png +0 -0
- package/docs/assets/overview-v7.1.3.png +0 -0
- package/docs/evaluation/CONTEXT_EVALUATION_v7.1.4.json +1818 -0
- package/docs/evaluation/CONTEXT_EVALUATION_v7.1.4.md +36 -0
- package/docs/launch/COMPONENT_MAP_v7.1.4.md +307 -0
- package/docs/launch/PROJECT_KIT_PLAN_v7.1.4.md +110 -0
- package/docs/launch/PROJECT_LEARNING_PLAN_v7.1.4.md +63 -0
- package/docs/launch/RELEASE_ACCEPTANCE_v7.22.0.md +48 -0
- package/docs/launch/RELEASE_CHECKLIST_v7.0.0.md +24 -24
- package/docs/launch/RELEASE_NOTES_v7.0.0.md +44 -44
- package/docs/launch/RELEASE_NOTES_v7.1.0.md +32 -32
- package/docs/launch/RELEASE_NOTES_v7.1.3.md +40 -0
- package/docs/launch/RELEASE_NOTES_v7.1.4.md +30 -0
- package/docs/launch/RELEASE_NOTES_v7.2.0.md +24 -24
- package/docs/launch/RELEASE_NOTES_v7.22.0.md +53 -0
- package/docs/launch/RELEASE_NOTES_v7.22.1.md +11 -0
- package/docs/launch/RESEARCH_AND_PLAN_v7.1.4.md +255 -0
- package/docs/launch/RESEARCH_AND_PLAN_v7.22.0.md +672 -0
- package/package.json +139 -111
- package/skills/shadow-debug/SKILL.md +16 -16
- package/skills/shadow-implement/SKILL.md +16 -16
- package/skills/shadow-release/SKILL.md +16 -16
- package/skills/shadow-research/SKILL.md +14 -12
- package/skills/shadow-review/SKILL.md +14 -14
- package/skills/shadow-workflow/SKILL.md +39 -31
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
import { Worker } from 'node:worker_threads';
|
|
2
|
+
import { createRequire } from 'node:module';
|
|
3
|
+
import { pathToFileURL } from 'node:url';
|
|
4
|
+
import { HUB_LIMITS } from './project-hub-contract.js';
|
|
5
|
+
const pdfModule = pathToFileURL(createRequire(import.meta.url).resolve('pdfjs-dist/legacy/build/pdf.mjs')).href;
|
|
6
|
+
export const PDF_PARSER = 'PDF.js 6.5.438';
|
|
7
|
+
// The worker only receives bytes and resource limits. It resolves its own parser, with no input URL or path.
|
|
8
|
+
const workerSource = String.raw `
|
|
9
|
+
const { parentPort, workerData } = require('node:worker_threads');
|
|
10
|
+
const { bytes, pdfModule, limits } = workerData;
|
|
11
|
+
async function extract() {
|
|
12
|
+
const { getDocument, VerbosityLevel } = await import(pdfModule);
|
|
13
|
+
const loading = getDocument({ data: bytes, verbosity: VerbosityLevel.ERRORS, stopAtErrors: true,
|
|
14
|
+
disableFontFace: true, useSystemFonts: false, useWorkerFetch: false, isImageDecoderSupported: false,
|
|
15
|
+
isOffscreenCanvasSupported: false, enableXfa: false });
|
|
16
|
+
try {
|
|
17
|
+
const document = await loading.promise;
|
|
18
|
+
if (document.numPages < 1 || document.numPages > limits.pages) {
|
|
19
|
+
return { error: 'PDF must contain between 1 and ' + limits.pages + ' pages.' };
|
|
20
|
+
}
|
|
21
|
+
const pages = [];
|
|
22
|
+
let total = 0;
|
|
23
|
+
for (let page = 1; page <= document.numPages; page++) {
|
|
24
|
+
const source = await document.getPage(page);
|
|
25
|
+
const reader = source.streamTextContent().getReader();
|
|
26
|
+
const limit = Math.min(limits.pageChars, limits.extractedChars - total);
|
|
27
|
+
let text = '';
|
|
28
|
+
let truncated = false;
|
|
29
|
+
try {
|
|
30
|
+
for (;;) {
|
|
31
|
+
const next = await reader.read();
|
|
32
|
+
if (next.done) break;
|
|
33
|
+
for (const item of next.value.items) {
|
|
34
|
+
if (!('str' in item)) continue;
|
|
35
|
+
const piece = item.str.replace(/[\u0000-\u0008\u000b\u000c\u000e-\u001f\u007f]/gu, '') + (item.hasEOL ? '\n' : ' ');
|
|
36
|
+
if (text.length + piece.length > limit) {
|
|
37
|
+
text += piece.slice(0, Math.max(0, limit - text.length)).replace(/[\ud800-\udbff]$/u, '');
|
|
38
|
+
truncated = true;
|
|
39
|
+
break;
|
|
40
|
+
}
|
|
41
|
+
text += piece;
|
|
42
|
+
}
|
|
43
|
+
if (truncated) { await reader.cancel(); break; }
|
|
44
|
+
}
|
|
45
|
+
} finally {
|
|
46
|
+
reader.releaseLock();
|
|
47
|
+
source.cleanup();
|
|
48
|
+
}
|
|
49
|
+
text = text.trim();
|
|
50
|
+
if (limit === 0) return { error: 'Extracted text exceeds the project PDF text limit.' };
|
|
51
|
+
total += text.length;
|
|
52
|
+
pages.push({ page, text, truncated });
|
|
53
|
+
}
|
|
54
|
+
return { pages };
|
|
55
|
+
} catch (error) {
|
|
56
|
+
return { error: error?.name === 'PasswordException'
|
|
57
|
+
? 'This PDF is password protected. Upload an unencrypted copy you are authorized to use.'
|
|
58
|
+
: 'PDF text could not be extracted. The file may be malformed or unsupported.' };
|
|
59
|
+
} finally {
|
|
60
|
+
await loading.destroy();
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
void extract().then(result => parentPort.postMessage(result), () => parentPort.postMessage({ error: 'PDF extraction failed.' }));
|
|
65
|
+
`;
|
|
66
|
+
export async function extractHubPdf(data) {
|
|
67
|
+
const worker = new Worker(workerSource, { eval: true, workerData: { bytes: Uint8Array.from(data), pdfModule, limits: HUB_LIMITS },
|
|
68
|
+
env: {}, execArgv: [], resourceLimits: { maxOldGenerationSizeMb: 128, maxYoungGenerationSizeMb: 24, stackSizeMb: 4 } });
|
|
69
|
+
return new Promise(resolve => {
|
|
70
|
+
let completed = false;
|
|
71
|
+
const finish = (result) => {
|
|
72
|
+
if (completed)
|
|
73
|
+
return;
|
|
74
|
+
completed = true;
|
|
75
|
+
clearTimeout(timeout);
|
|
76
|
+
void worker.terminate().then(() => resolve(result), () => resolve(result));
|
|
77
|
+
};
|
|
78
|
+
const timeout = setTimeout(() => finish({ error: 'PDF extraction exceeded the time limit.' }), HUB_LIMITS.extractionMs);
|
|
79
|
+
worker.once('message', finish);
|
|
80
|
+
worker.once('error', () => finish({ error: 'PDF extraction worker could not complete.' }));
|
|
81
|
+
worker.once('exit', () => finish({ error: 'PDF extraction worker stopped before returning pages.' }));
|
|
82
|
+
});
|
|
83
|
+
}
|
|
84
|
+
//# sourceMappingURL=project-hub-pdf-worker.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"project-hub-pdf-worker.js","sourceRoot":"","sources":["../../src/brain/project-hub-pdf-worker.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAC7C,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAC;AAGvD,MAAM,SAAS,GAAG,aAAa,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,iCAAiC,CAAC,CAAC,CAAC,IAAI,CAAC;AAChH,MAAM,CAAC,MAAM,UAAU,GAAG,gBAAgB,CAAC;AAE3C,6GAA6G;AAC7G,MAAM,YAAY,GAAG,MAAM,CAAC,GAAG,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAyD9B,CAAC;AAEF,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,IAAgB;IAClD,MAAM,MAAM,GAAG,IAAI,MAAM,CAAC,YAAY,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,UAAU,EAAE,EAAE,KAAK,EAAE,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,SAAS,EAAE,MAAM,EAAE,UAAU,EAAE;QAC/H,GAAG,EAAE,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE,cAAc,EAAE,EAAE,sBAAsB,EAAE,GAAG,EAAE,wBAAwB,EAAE,EAAE,EAAE,WAAW,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC;IAC1H,OAAO,IAAI,OAAO,CAAC,OAAO,CAAC,EAAE;QAC3B,IAAI,SAAS,GAAG,KAAK,CAAC;QACtB,MAAM,MAAM,GAAG,CAAC,MAAoB,EAAE,EAAE;YACtC,IAAI,SAAS;gBAAE,OAAO;YACtB,SAAS,GAAG,IAAI,CAAC;YACjB,YAAY,CAAC,OAAO,CAAC,CAAC;YACtB,KAAK,MAAM,CAAC,SAAS,EAAE,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC;QAC7E,CAAC,CAAC;QACF,MAAM,OAAO,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,EAAE,KAAK,EAAE,yCAAyC,EAAE,CAAC,EAAE,UAAU,CAAC,YAAY,CAAC,CAAC;QACxH,MAAM,CAAC,IAAI,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;QAC/B,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,EAAE,KAAK,EAAE,2CAA2C,EAAE,CAAC,CAAC,CAAC;QAC3F,MAAM,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,EAAE,KAAK,EAAE,uDAAuD,EAAE,CAAC,CAAC,CAAC;IACxG,CAAC,CAAC,CAAC;AACL,CAAC"}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
import { type HubActor, type HubEvent } from './project-hub-contract.js';
|
|
2
|
+
type Table = 'documents' | 'rooms' | 'tasks' | 'messages' | 'artifacts' | 'outcomes' | 'acknowledgements' | 'lessons' | 'sessions' | 'session-messages' | 'session-checkpoints';
|
|
3
|
+
export declare function digest(value: string | Uint8Array): string;
|
|
4
|
+
export declare function missing(entity: string): never;
|
|
5
|
+
export declare function conflict(message: string): never;
|
|
6
|
+
export declare function capped(message: string): never;
|
|
7
|
+
export declare class HubStore {
|
|
8
|
+
private readonly root;
|
|
9
|
+
private readonly projectId;
|
|
10
|
+
private database?;
|
|
11
|
+
constructor(root: string, projectId: string);
|
|
12
|
+
private checkedPath;
|
|
13
|
+
private checkProject;
|
|
14
|
+
/** Probe an existing database without initializing or changing its contents. */
|
|
15
|
+
checkStorage(): void;
|
|
16
|
+
private db;
|
|
17
|
+
close(): void;
|
|
18
|
+
/** Read existing rows in one snapshot. An empty project does not acquire a database just by listing. */
|
|
19
|
+
read<T>(apply: () => T): T | undefined;
|
|
20
|
+
transaction<T>(apply: () => T): T;
|
|
21
|
+
private active;
|
|
22
|
+
revision(): number;
|
|
23
|
+
get<T>(kind: Table, id: string, scope?: string): T | undefined;
|
|
24
|
+
list<T>(kind: Table, scope?: string): T[];
|
|
25
|
+
count(kind: Table, scope?: string): number;
|
|
26
|
+
put<T extends {
|
|
27
|
+
id: string;
|
|
28
|
+
}>(kind: Table, value: T, scope?: string): T;
|
|
29
|
+
findByScope<T>(kind: Table, scope: string): T | undefined;
|
|
30
|
+
latestSessionNative(nativeTool: string, nativeId: string): {
|
|
31
|
+
id: string;
|
|
32
|
+
sha256: string;
|
|
33
|
+
} | undefined;
|
|
34
|
+
page<T>(kind: Table, scope: string, limit: number, byteLimit: number, before?: string): {
|
|
35
|
+
rows: T[];
|
|
36
|
+
more: boolean;
|
|
37
|
+
} | undefined;
|
|
38
|
+
sessionCheckpointSummaries(sessionId: string): any[];
|
|
39
|
+
blob(id: string): Uint8Array | undefined;
|
|
40
|
+
saveBlob(id: string, bytes: Uint8Array): void;
|
|
41
|
+
event(roomId: string, kind: string, targetId: string, actor: HubActor, createdAt: string): void;
|
|
42
|
+
events(roomId: string, after: number, limit?: number): {
|
|
43
|
+
events: HubEvent[];
|
|
44
|
+
cursor: number;
|
|
45
|
+
more: boolean;
|
|
46
|
+
};
|
|
47
|
+
operation<T>(id: string, input: unknown, apply: () => T, maximum?: 20000): T;
|
|
48
|
+
}
|
|
49
|
+
export {};
|
|
50
|
+
//# sourceMappingURL=project-hub-store.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"project-hub-store.d.ts","sourceRoot":"","sources":["../../src/brain/project-hub-store.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,257 @@
|
|
|
1
|
+
import { createHash, randomUUID } from 'node:crypto';
|
|
2
|
+
import { lstatSync } from 'node:fs';
|
|
3
|
+
import { DatabaseSync } from 'node:sqlite';
|
|
4
|
+
import { ensureProjectDirectory, projectLocalPath } from './project-kit-paths.js';
|
|
5
|
+
import { HUB_LIMITS, ProjectHubError } from './project-hub-contract.js';
|
|
6
|
+
const relative = '.shadow-brain/project-hub.sqlite';
|
|
7
|
+
export function digest(value) {
|
|
8
|
+
return createHash('sha256').update(value).digest('hex');
|
|
9
|
+
}
|
|
10
|
+
export function missing(entity) {
|
|
11
|
+
throw new ProjectHubError('HUB_NOT_FOUND', entity + ' was not found in this project.', 404);
|
|
12
|
+
}
|
|
13
|
+
export function conflict(message) {
|
|
14
|
+
throw new ProjectHubError('HUB_CONFLICT', message, 409);
|
|
15
|
+
}
|
|
16
|
+
export function capped(message) {
|
|
17
|
+
throw new ProjectHubError('HUB_LIMIT', message, 422);
|
|
18
|
+
}
|
|
19
|
+
export class HubStore {
|
|
20
|
+
constructor(root, projectId) {
|
|
21
|
+
this.root = root;
|
|
22
|
+
this.projectId = projectId;
|
|
23
|
+
}
|
|
24
|
+
checkedPath() {
|
|
25
|
+
const filename = projectLocalPath(this.root, relative);
|
|
26
|
+
let exists = false;
|
|
27
|
+
for (const suffix of ['', '-journal', '-wal', '-shm']) {
|
|
28
|
+
const file = suffix ? projectLocalPath(this.root, relative + suffix) : filename;
|
|
29
|
+
const info = lstatSync(file, { throwIfNoEntry: false });
|
|
30
|
+
if (info && (!info.isFile() || info.nlink !== 1)) {
|
|
31
|
+
throw new ProjectHubError('HUB_UNSAFE_STORE', 'The project hub database requires ordinary, unlinked files.', 409);
|
|
32
|
+
}
|
|
33
|
+
if (!suffix)
|
|
34
|
+
exists = !!info;
|
|
35
|
+
}
|
|
36
|
+
return { filename, exists };
|
|
37
|
+
}
|
|
38
|
+
checkProject(db) {
|
|
39
|
+
const metadata = db.prepare('SELECT project_id,version FROM hub_metadata LIMIT 2').all();
|
|
40
|
+
if (metadata.length !== 1 || metadata[0].project_id !== this.projectId || metadata[0].version !== 1) {
|
|
41
|
+
throw new ProjectHubError('HUB_STORE_SCOPE', 'This hub database belongs to another project or schema version.', 409);
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
/** Probe an existing database without initializing or changing its contents. */
|
|
45
|
+
checkStorage() {
|
|
46
|
+
try {
|
|
47
|
+
const { filename, exists } = this.checkedPath();
|
|
48
|
+
if (!exists) {
|
|
49
|
+
this.close();
|
|
50
|
+
return;
|
|
51
|
+
}
|
|
52
|
+
const db = new DatabaseSync(filename, { readOnly: true, allowExtension: false });
|
|
53
|
+
try {
|
|
54
|
+
db.exec('PRAGMA busy_timeout=300; PRAGMA trusted_schema=OFF; BEGIN;');
|
|
55
|
+
this.checkProject(db);
|
|
56
|
+
const rows = db.prepare('SELECT singleton,revision FROM hub_revision LIMIT 2').all();
|
|
57
|
+
if (rows.length !== 1 || rows[0].singleton !== 1 || !Number.isSafeInteger(rows[0].revision) || Number(rows[0].revision) < 0) {
|
|
58
|
+
throw new Error('Invalid hub revision.');
|
|
59
|
+
}
|
|
60
|
+
db.prepare('SELECT kind,id,scope,data FROM hub_rows LIMIT 0').all();
|
|
61
|
+
db.prepare('SELECT cursor,room_id,data FROM hub_events LIMIT 0').all();
|
|
62
|
+
db.prepare('SELECT operation_id,hash,data FROM hub_operations LIMIT 0').all();
|
|
63
|
+
db.prepare('SELECT id,data FROM hub_blobs LIMIT 0').all();
|
|
64
|
+
db.exec('COMMIT;');
|
|
65
|
+
}
|
|
66
|
+
finally {
|
|
67
|
+
db.close();
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
catch {
|
|
71
|
+
this.close();
|
|
72
|
+
throw new ProjectHubError('HUB_STORAGE_UNAVAILABLE', 'Project Hub storage could not be read. Repair the project store, then retry.', 503);
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
db() {
|
|
76
|
+
ensureProjectDirectory(this.root, '.shadow-brain');
|
|
77
|
+
const { filename } = this.checkedPath();
|
|
78
|
+
if (this.database)
|
|
79
|
+
return this.database;
|
|
80
|
+
const db = new DatabaseSync(filename, { allowExtension: false });
|
|
81
|
+
try {
|
|
82
|
+
db.exec('PRAGMA busy_timeout=3000; PRAGMA trusted_schema=OFF; PRAGMA synchronous=FULL;');
|
|
83
|
+
db.exec('BEGIN IMMEDIATE;');
|
|
84
|
+
const metadata = db.prepare("SELECT 1 FROM sqlite_schema WHERE type='table' AND name='hub_metadata'").get();
|
|
85
|
+
if (metadata)
|
|
86
|
+
this.checkProject(db);
|
|
87
|
+
else if (db.prepare("SELECT 1 FROM sqlite_schema WHERE name NOT LIKE 'sqlite_%' LIMIT 1").get()) {
|
|
88
|
+
throw new ProjectHubError('HUB_STORE_SCOPE', 'The existing database does not contain project Hub storage.', 409);
|
|
89
|
+
}
|
|
90
|
+
db.exec(`CREATE TABLE IF NOT EXISTS hub_metadata (project_id TEXT PRIMARY KEY, version INTEGER NOT NULL) STRICT;
|
|
91
|
+
CREATE TABLE IF NOT EXISTS hub_revision (singleton INTEGER PRIMARY KEY CHECK(singleton=1), revision INTEGER NOT NULL) STRICT;
|
|
92
|
+
INSERT OR IGNORE INTO hub_revision VALUES(1,0);
|
|
93
|
+
CREATE TABLE IF NOT EXISTS hub_rows (kind TEXT NOT NULL, id TEXT NOT NULL, scope TEXT NOT NULL, data TEXT NOT NULL, PRIMARY KEY(kind,id)) STRICT;
|
|
94
|
+
CREATE INDEX IF NOT EXISTS hub_rows_scope ON hub_rows(kind,scope);
|
|
95
|
+
CREATE TABLE IF NOT EXISTS hub_events (cursor INTEGER PRIMARY KEY, room_id TEXT NOT NULL, data TEXT NOT NULL) STRICT;
|
|
96
|
+
CREATE INDEX IF NOT EXISTS hub_events_room ON hub_events(room_id,cursor);
|
|
97
|
+
CREATE TABLE IF NOT EXISTS hub_operations (operation_id TEXT PRIMARY KEY, hash TEXT NOT NULL, data TEXT NOT NULL) STRICT;
|
|
98
|
+
CREATE TABLE IF NOT EXISTS hub_blobs (id TEXT PRIMARY KEY, data BLOB NOT NULL) STRICT;`);
|
|
99
|
+
const insert = db.prepare('INSERT INTO hub_metadata SELECT ?, 1 WHERE NOT EXISTS (SELECT 1 FROM hub_metadata)');
|
|
100
|
+
insert.run(this.projectId);
|
|
101
|
+
this.checkProject(db);
|
|
102
|
+
db.exec('COMMIT;');
|
|
103
|
+
this.database = db;
|
|
104
|
+
return db;
|
|
105
|
+
}
|
|
106
|
+
catch (error) {
|
|
107
|
+
db.close();
|
|
108
|
+
throw error;
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
close() {
|
|
112
|
+
this.database?.close();
|
|
113
|
+
this.database = undefined;
|
|
114
|
+
}
|
|
115
|
+
/** Read existing rows in one snapshot. An empty project does not acquire a database just by listing. */
|
|
116
|
+
read(apply) {
|
|
117
|
+
const { filename, exists } = this.checkedPath();
|
|
118
|
+
if (!exists)
|
|
119
|
+
return undefined;
|
|
120
|
+
if (this.database)
|
|
121
|
+
throw new Error('Cannot nest a project hub snapshot.');
|
|
122
|
+
const db = new DatabaseSync(filename, { readOnly: true, allowExtension: false });
|
|
123
|
+
try {
|
|
124
|
+
db.exec('PRAGMA busy_timeout=3000; PRAGMA trusted_schema=OFF; BEGIN;');
|
|
125
|
+
this.checkProject(db);
|
|
126
|
+
this.database = db;
|
|
127
|
+
const result = apply();
|
|
128
|
+
db.exec('COMMIT;');
|
|
129
|
+
return result;
|
|
130
|
+
}
|
|
131
|
+
finally {
|
|
132
|
+
this.database = undefined;
|
|
133
|
+
db.close();
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
transaction(apply) {
|
|
137
|
+
const db = this.db();
|
|
138
|
+
try {
|
|
139
|
+
db.exec('BEGIN IMMEDIATE');
|
|
140
|
+
}
|
|
141
|
+
catch (error) {
|
|
142
|
+
if (error.errcode === 5)
|
|
143
|
+
conflict('Another project hub operation is writing. Retry with the same operation key.');
|
|
144
|
+
throw error;
|
|
145
|
+
}
|
|
146
|
+
try {
|
|
147
|
+
const result = apply();
|
|
148
|
+
db.exec('COMMIT');
|
|
149
|
+
return result;
|
|
150
|
+
}
|
|
151
|
+
catch (error) {
|
|
152
|
+
db.exec('ROLLBACK');
|
|
153
|
+
throw error;
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
active() { return this.database ?? this.db(); }
|
|
157
|
+
revision() {
|
|
158
|
+
return Number(this.active().prepare('SELECT revision FROM hub_revision WHERE singleton=1').get()?.revision);
|
|
159
|
+
}
|
|
160
|
+
get(kind, id, scope) {
|
|
161
|
+
const row = this.active().prepare('SELECT id,scope,data FROM hub_rows WHERE kind=? AND id=?').get(kind, id);
|
|
162
|
+
return row && (scope === undefined || row.scope === scope) ? JSON.parse(row.data) : undefined;
|
|
163
|
+
}
|
|
164
|
+
list(kind, scope) {
|
|
165
|
+
const db = this.active();
|
|
166
|
+
const rows = scope === undefined
|
|
167
|
+
? db.prepare('SELECT data FROM hub_rows WHERE kind=? ORDER BY rowid').all(kind)
|
|
168
|
+
: db.prepare('SELECT data FROM hub_rows WHERE kind=? AND scope=? ORDER BY rowid').all(kind, scope);
|
|
169
|
+
return rows.map(row => JSON.parse(row.data));
|
|
170
|
+
}
|
|
171
|
+
count(kind, scope) {
|
|
172
|
+
const db = this.active();
|
|
173
|
+
const row = scope === undefined
|
|
174
|
+
? db.prepare('SELECT count(*) AS count FROM hub_rows WHERE kind=?').get(kind)
|
|
175
|
+
: db.prepare('SELECT count(*) AS count FROM hub_rows WHERE kind=? AND scope=?').get(kind, scope);
|
|
176
|
+
return Number(row?.count);
|
|
177
|
+
}
|
|
178
|
+
put(kind, value, scope = '') {
|
|
179
|
+
const db = this.active();
|
|
180
|
+
const result = db.prepare('INSERT INTO hub_rows(kind,id,scope,data) VALUES(?,?,?,?) ON CONFLICT(kind,id) DO UPDATE SET data=excluded.data WHERE data<>excluded.data')
|
|
181
|
+
.run(kind, value.id, scope, JSON.stringify(value));
|
|
182
|
+
if (Number(result.changes))
|
|
183
|
+
db.exec('UPDATE hub_revision SET revision=revision+1 WHERE singleton=1');
|
|
184
|
+
return value;
|
|
185
|
+
}
|
|
186
|
+
findByScope(kind, scope) {
|
|
187
|
+
const row = this.active().prepare('SELECT data FROM hub_rows WHERE kind=? AND scope=? LIMIT 1').get(kind, scope);
|
|
188
|
+
return row ? JSON.parse(row.data) : undefined;
|
|
189
|
+
}
|
|
190
|
+
latestSessionNative(nativeTool, nativeId) {
|
|
191
|
+
return this.active().prepare(`SELECT id, json_extract(data, '$.native.sha256') AS sha256 FROM hub_rows WHERE kind='sessions'
|
|
192
|
+
AND json_extract(data, '$.native.tool')=? AND json_extract(data, '$.native.sessionId')=? ORDER BY rowid DESC LIMIT 1`)
|
|
193
|
+
.get(nativeTool, nativeId);
|
|
194
|
+
}
|
|
195
|
+
page(kind, scope, limit, byteLimit, before) {
|
|
196
|
+
const db = this.active();
|
|
197
|
+
const cursor = before ? db.prepare('SELECT rowid FROM hub_rows WHERE kind=? AND scope=? AND id=?').get(kind, scope, before) : undefined;
|
|
198
|
+
if (before && !cursor)
|
|
199
|
+
return undefined;
|
|
200
|
+
const rows = cursor
|
|
201
|
+
? db.prepare('SELECT data FROM hub_rows WHERE kind=? AND scope=? AND rowid<? ORDER BY rowid DESC LIMIT ?').all(kind, scope, cursor.rowid, limit + 1)
|
|
202
|
+
: db.prepare('SELECT data FROM hub_rows WHERE kind=? AND scope=? ORDER BY rowid DESC LIMIT ?').all(kind, scope, limit + 1);
|
|
203
|
+
const page = [];
|
|
204
|
+
let bytes = 2;
|
|
205
|
+
for (const { data } of rows.slice(0, limit)) {
|
|
206
|
+
const size = Buffer.byteLength(data) + (page.length ? 1 : 0);
|
|
207
|
+
if (bytes + size > byteLimit)
|
|
208
|
+
break;
|
|
209
|
+
page.push(JSON.parse(data));
|
|
210
|
+
bytes += size;
|
|
211
|
+
}
|
|
212
|
+
if (!page.length && rows.length)
|
|
213
|
+
throw new Error('Stored session message exceeds its byte limit.');
|
|
214
|
+
return { rows: page.reverse(), more: rows.length > page.length };
|
|
215
|
+
}
|
|
216
|
+
sessionCheckpointSummaries(sessionId) {
|
|
217
|
+
return this.active().prepare(`SELECT json_object('id', id, 'sessionId', scope, 'revision', json_extract(data, '$.revision'),
|
|
218
|
+
'actor', json_extract(data, '$.actor'), 'createdAt', json_extract(data, '$.createdAt'), 'sha256', json_extract(data, '$.sha256')) AS summary
|
|
219
|
+
FROM hub_rows WHERE kind='session-checkpoints' AND scope=? ORDER BY rowid`).all(sessionId)
|
|
220
|
+
.map(row => JSON.parse(row.summary));
|
|
221
|
+
}
|
|
222
|
+
blob(id) {
|
|
223
|
+
return this.active().prepare('SELECT data FROM hub_blobs WHERE id=?').get(id)?.data;
|
|
224
|
+
}
|
|
225
|
+
saveBlob(id, bytes) {
|
|
226
|
+
this.active().prepare('INSERT OR IGNORE INTO hub_blobs(id,data) VALUES(?,?)').run(id, bytes);
|
|
227
|
+
}
|
|
228
|
+
event(roomId, kind, targetId, actor, createdAt) {
|
|
229
|
+
this.active().prepare('INSERT INTO hub_events(room_id,data) VALUES(?,?)')
|
|
230
|
+
.run(roomId, JSON.stringify({ id: randomUUID(), roomId, kind, targetId, actor, createdAt }));
|
|
231
|
+
}
|
|
232
|
+
events(roomId, after, limit = 200) {
|
|
233
|
+
const rows = this.active().prepare('SELECT cursor,data FROM hub_events WHERE room_id=? AND cursor>? ORDER BY cursor LIMIT ?').all(roomId, after, limit + 1);
|
|
234
|
+
const events = rows.slice(0, limit).map(row => ({ ...JSON.parse(row.data), cursor: Number(row.cursor) }));
|
|
235
|
+
return { events, cursor: events.at(-1)?.cursor ?? after, more: rows.length > limit };
|
|
236
|
+
}
|
|
237
|
+
operation(id, input, apply, maximum = HUB_LIMITS.operations) {
|
|
238
|
+
const db = this.active();
|
|
239
|
+
const fingerprint = digest(JSON.stringify(input));
|
|
240
|
+
const previous = db.prepare('SELECT hash,data FROM hub_operations WHERE operation_id=?').get(id);
|
|
241
|
+
if (previous) {
|
|
242
|
+
if (previous.hash !== fingerprint)
|
|
243
|
+
conflict('This operation key was already used with a different request.');
|
|
244
|
+
return JSON.parse(previous.data);
|
|
245
|
+
}
|
|
246
|
+
const prefix = id.startsWith('session:') ? 'session:%' : undefined;
|
|
247
|
+
const count = db.prepare(prefix ? 'SELECT count(*) AS count FROM hub_operations WHERE operation_id LIKE ?' :
|
|
248
|
+
"SELECT count(*) AS count FROM hub_operations WHERE operation_id NOT LIKE 'session:%'");
|
|
249
|
+
if (Number((prefix ? count.get(prefix) : count.get())?.count) >= maximum) {
|
|
250
|
+
capped('This project has reached its retained hub operation limit.');
|
|
251
|
+
}
|
|
252
|
+
const value = apply();
|
|
253
|
+
db.prepare('INSERT INTO hub_operations VALUES(?,?,?)').run(id, fingerprint, JSON.stringify(value));
|
|
254
|
+
return value;
|
|
255
|
+
}
|
|
256
|
+
}
|
|
257
|
+
//# sourceMappingURL=project-hub-store.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"project-hub-store.js","sourceRoot":"","sources":["../../src/brain/project-hub-store.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,132 @@
|
|
|
1
|
+
import type { GlobalBrain } from './global-brain.js';
|
|
2
|
+
import { type HubAck, type HubActor, type HubArtifact, type HubDocument, type HubLesson, type HubMessage, type HubOutcome, type HubPage, type HubRoom, type HubTask } from './project-hub-contract.js';
|
|
3
|
+
export declare class ProjectHubService {
|
|
4
|
+
private readonly brain;
|
|
5
|
+
private readonly now;
|
|
6
|
+
private readonly project;
|
|
7
|
+
private readonly db;
|
|
8
|
+
constructor(directory: string, brain: GlobalBrain, now?: () => number);
|
|
9
|
+
close(): void;
|
|
10
|
+
checkStorage(): void;
|
|
11
|
+
private time;
|
|
12
|
+
private row;
|
|
13
|
+
private run;
|
|
14
|
+
private operator;
|
|
15
|
+
private documentSummary;
|
|
16
|
+
overview(): {
|
|
17
|
+
schemaVersion: 1;
|
|
18
|
+
projectId: string;
|
|
19
|
+
projectName: string;
|
|
20
|
+
revision: number;
|
|
21
|
+
documents: HubDocument[];
|
|
22
|
+
rooms: HubRoom[];
|
|
23
|
+
lessons: HubLesson[];
|
|
24
|
+
ocr: "unavailable";
|
|
25
|
+
limits: Readonly<{
|
|
26
|
+
pdfBytes: number;
|
|
27
|
+
pages: 60;
|
|
28
|
+
pageChars: 8000;
|
|
29
|
+
extractedChars: 180000;
|
|
30
|
+
extractionMs: 20000;
|
|
31
|
+
documents: 30;
|
|
32
|
+
rooms: 100;
|
|
33
|
+
roomRecords: 500;
|
|
34
|
+
lessons: 200;
|
|
35
|
+
operations: 20000;
|
|
36
|
+
artifactBytes: number;
|
|
37
|
+
artifactTextBytes: number;
|
|
38
|
+
leaseMs: number;
|
|
39
|
+
}>;
|
|
40
|
+
};
|
|
41
|
+
document(id: string): {
|
|
42
|
+
document: HubDocument;
|
|
43
|
+
pages: HubPage[];
|
|
44
|
+
};
|
|
45
|
+
upload(name: string, data: Uint8Array): Promise<{
|
|
46
|
+
document: HubDocument;
|
|
47
|
+
pages: HubPage[];
|
|
48
|
+
}>;
|
|
49
|
+
reviewDocument(id: string, raw: unknown): Promise<{
|
|
50
|
+
document: HubDocument;
|
|
51
|
+
pages: HubPage[];
|
|
52
|
+
}>;
|
|
53
|
+
private writeMemory;
|
|
54
|
+
private roomSnapshot;
|
|
55
|
+
private expireLeases;
|
|
56
|
+
private reopen;
|
|
57
|
+
room(id: string, after?: number): {
|
|
58
|
+
events: import("./project-hub-contract.js").HubEvent[];
|
|
59
|
+
cursor: number;
|
|
60
|
+
more: boolean;
|
|
61
|
+
room: HubRoom;
|
|
62
|
+
revision: number;
|
|
63
|
+
tasks: HubTask[];
|
|
64
|
+
messages: HubMessage[];
|
|
65
|
+
artifacts: HubArtifact[];
|
|
66
|
+
outcomes: HubOutcome[];
|
|
67
|
+
acknowledgements: HubAck[];
|
|
68
|
+
};
|
|
69
|
+
createRoom(raw: unknown, by: HubActor): {
|
|
70
|
+
events: import("./project-hub-contract.js").HubEvent[];
|
|
71
|
+
cursor: number;
|
|
72
|
+
more: boolean;
|
|
73
|
+
room: HubRoom;
|
|
74
|
+
revision: number;
|
|
75
|
+
tasks: HubTask[];
|
|
76
|
+
messages: HubMessage[];
|
|
77
|
+
artifacts: HubArtifact[];
|
|
78
|
+
outcomes: HubOutcome[];
|
|
79
|
+
acknowledgements: HubAck[];
|
|
80
|
+
};
|
|
81
|
+
roomAction(id: string, raw: unknown, by: HubActor): {
|
|
82
|
+
applied: {
|
|
83
|
+
revision?: number | undefined;
|
|
84
|
+
kind: string;
|
|
85
|
+
targetId: string;
|
|
86
|
+
};
|
|
87
|
+
events: import("./project-hub-contract.js").HubEvent[];
|
|
88
|
+
cursor: number;
|
|
89
|
+
more: boolean;
|
|
90
|
+
room: HubRoom;
|
|
91
|
+
revision: number;
|
|
92
|
+
tasks: HubTask[];
|
|
93
|
+
messages: HubMessage[];
|
|
94
|
+
artifacts: HubArtifact[];
|
|
95
|
+
outcomes: HubOutcome[];
|
|
96
|
+
acknowledgements: HubAck[];
|
|
97
|
+
};
|
|
98
|
+
applyRoomCommand(id: string, raw: unknown, by: HubActor): {
|
|
99
|
+
revision?: number | undefined;
|
|
100
|
+
kind: string;
|
|
101
|
+
targetId: string;
|
|
102
|
+
};
|
|
103
|
+
roomFeed(id: string, after?: number): {
|
|
104
|
+
events: import("./project-hub-contract.js").HubEvent[];
|
|
105
|
+
cursor: number;
|
|
106
|
+
more: boolean;
|
|
107
|
+
room: HubRoom;
|
|
108
|
+
revision: number;
|
|
109
|
+
tasks: HubTask[];
|
|
110
|
+
messages: HubMessage[];
|
|
111
|
+
artifacts: HubArtifact[];
|
|
112
|
+
outcomes: HubOutcome[];
|
|
113
|
+
acknowledgements: HubAck[];
|
|
114
|
+
};
|
|
115
|
+
private capacity;
|
|
116
|
+
private applyRoomAction;
|
|
117
|
+
artifact(roomId: string, artifactId: string): {
|
|
118
|
+
artifact: HubArtifact;
|
|
119
|
+
bytes: Uint8Array<ArrayBufferLike>;
|
|
120
|
+
};
|
|
121
|
+
artifactText(raw: unknown): {
|
|
122
|
+
artifact: HubArtifact;
|
|
123
|
+
text: string;
|
|
124
|
+
};
|
|
125
|
+
createLesson(raw: unknown, by: HubActor): {
|
|
126
|
+
lesson: HubLesson;
|
|
127
|
+
};
|
|
128
|
+
lessonAction(id: string, raw: unknown, by: HubActor): Promise<{
|
|
129
|
+
lesson: HubLesson;
|
|
130
|
+
}>;
|
|
131
|
+
}
|
|
132
|
+
//# sourceMappingURL=project-hub.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"project-hub.d.ts","sourceRoot":"","sources":["../../src/brain/project-hub.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAMrD,OAAO,EAEL,KAAK,MAAM,EAAE,KAAK,QAAQ,EAAE,KAAK,WAAW,EAAE,KAAK,WAAW,EAAE,KAAK,SAAS,EAAE,KAAK,UAAU,EAAE,KAAK,UAAU,EAChH,KAAK,OAAO,EAAE,KAAK,OAAO,EAAE,KAAK,OAAO,EACzC,MAAM,2BAA2B,CAAC;AAUnC,qBAAa,iBAAiB;IAIG,OAAO,CAAC,QAAQ,CAAC,KAAK;IAAe,OAAO,CAAC,QAAQ,CAAC,GAAG;IAHxF,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAyC;IACjE,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAW;gBAElB,SAAS,EAAE,MAAM,EAAmB,KAAK,EAAE,WAAW,EAAmB,GAAG,eAAW;IAKnG,KAAK,IAAI,IAAI;IAEb,YAAY,IAAI,IAAI;IAEpB,OAAO,CAAC,IAAI;IACZ,OAAO,CAAC,GAAG;IAIX,OAAO,CAAC,GAAG;IAIX,OAAO,CAAC,QAAQ;IAIhB,OAAO,CAAC,eAAe;IAEvB,QAAQ;;;;;;;;;;;;;;;;;;;;;;;;;IAmBR,QAAQ,CAAC,EAAE,EAAE,MAAM,GAAG;QAAE,QAAQ,EAAE,WAAW,CAAC;QAAC,KAAK,EAAE,OAAO,EAAE,CAAA;KAAE;IAK3D,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,UAAU;kBALT,WAAW;eAAS,OAAO,EAAE;;IAiDzD,cAAc,CAAC,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,OAAO;kBAjDX,WAAW;eAAS,OAAO,EAAE;;YAgFjD,WAAW;IASzB,OAAO,CAAC,YAAY;IAOpB,OAAO,CAAC,YAAY;IAWpB,OAAO,CAAC,MAAM;IAId,IAAI,CAAC,EAAE,EAAE,MAAM,EAAE,KAAK,SAAI;;;;;;;;;;;;IAM1B,UAAU,CAAC,GAAG,EAAE,OAAO,EAAE,EAAE,EAAE,QAAQ;;;;;;;;;;;;IAWrC,UAAU,CAAC,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,OAAO,EAAE,EAAE,EAAE,QAAQ;;;;;;;;;;;;;;;;;IAKjD,gBAAgB,CAAC,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,OAAO,EAAE,EAAE,EAAE,QAAQ;;;;;IAQvD,QAAQ,CAAC,EAAE,EAAE,MAAM,EAAE,KAAK,SAAI;;;;;;;;;;;;IAiB9B,OAAO,CAAC,QAAQ;IAIhB,OAAO,CAAC,eAAe;IA0FvB,QAAQ,CAAC,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM;;;;IAO3C,YAAY,CAAC,GAAG,EAAE,OAAO;;;;IAgBzB,YAAY,CAAC,GAAG,EAAE,OAAO,EAAE,EAAE,EAAE,QAAQ;;;IAYjC,YAAY,CAAC,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,OAAO,EAAE,EAAE,EAAE,QAAQ;;;CA4C1D"}
|