@theihtisham/agent-shadow-brain 7.1.0 → 7.1.4
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 +42 -0
- package/README.md +125 -450
- 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/brain-portability.js +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 +84 -0
- package/dist/brain/context-assembly.d.ts.map +1 -0
- package/dist/brain/context-assembly.js +529 -0
- package/dist/brain/context-assembly.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 +22 -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 +300 -0
- package/dist/brain/context-retrieval.js.map +1 -0
- package/dist/brain/feature-settings.d.ts +58 -0
- package/dist/brain/feature-settings.d.ts.map +1 -0
- package/dist/brain/feature-settings.js +242 -0
- package/dist/brain/feature-settings.js.map +1 -0
- 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 -1
- package/dist/brain/global-brain.d.ts.map +1 -1
- package/dist/brain/global-brain.js +77 -10
- package/dist/brain/global-brain.js.map +1 -1
- package/dist/brain/mcp-server.d.ts +30 -1
- package/dist/brain/mcp-server.d.ts.map +1 -1
- package/dist/brain/mcp-server.js +378 -28
- 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 +140 -0
- package/dist/brain/mcp-stdio.js.map +1 -0
- package/dist/brain/memory-annotations.d.ts +97 -0
- package/dist/brain/memory-annotations.d.ts.map +1 -0
- package/dist/brain/memory-annotations.js +389 -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 +72 -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 +44 -0
- package/dist/brain/memory-mcp-content.d.ts.map +1 -0
- package/dist/brain/memory-mcp-content.js +91 -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/orchestrator.js +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 +289 -0
- package/dist/brain/project-feedback.js.map +1 -0
- package/dist/brain/project-hub-contract.d.ts +326 -0
- package/dist/brain/project-hub-contract.d.ts.map +1 -0
- package/dist/brain/project-hub-contract.js +56 -0
- package/dist/brain/project-hub-contract.js.map +1 -0
- package/dist/brain/project-hub-mcp.d.ts +168 -0
- package/dist/brain/project-hub-mcp.d.ts.map +1 -0
- package/dist/brain/project-hub-mcp.js +41 -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 +38 -0
- package/dist/brain/project-hub-store.d.ts.map +1 -0
- package/dist/brain/project-hub-store.js +189 -0
- package/dist/brain/project-hub-store.js.map +1 -0
- package/dist/brain/project-hub.d.ts +127 -0
- package/dist/brain/project-hub.d.ts.map +1 -0
- package/dist/brain/project-hub.js +381 -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 +41 -0
- package/dist/brain/project-kit.d.ts.map +1 -0
- package/dist/brain/project-kit.js +255 -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/subconscious.d.ts +21 -24
- package/dist/brain/subconscious.d.ts.map +1 -1
- package/dist/brain/subconscious.js +82 -218
- 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 +40 -4
- package/dist/cli.js.map +1 -1
- package/dist/context-cli.d.ts +3 -0
- package/dist/context-cli.d.ts.map +1 -0
- package/dist/context-cli.js +90 -0
- package/dist/context-cli.js.map +1 -0
- 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 +137 -0
- package/dist/dashboard/brain-hub-actions.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 +335 -0
- package/dist/dashboard/brain-hub-client.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 +176 -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 +30 -0
- package/dist/dashboard/brain-hub-html.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 +79 -0
- package/dist/dashboard/brain-hub-project-views.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 +150 -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/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-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-workspace.d.ts +16 -0
- package/dist/dashboard/project-workspace.d.ts.map +1 -0
- package/dist/dashboard/project-workspace.js +106 -0
- package/dist/dashboard/project-workspace.js.map +1 -0
- package/dist/dashboard/server.d.ts +2 -0
- package/dist/dashboard/server.d.ts.map +1 -1
- package/dist/dashboard/server.js +65 -19
- 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 +34 -56
- package/dist/dashboard/v6-dashboard-html.js.map +1 -1
- package/dist/dashboard/workspace-api.d.ts +22 -0
- package/dist/dashboard/workspace-api.d.ts.map +1 -0
- package/dist/dashboard/workspace-api.js +429 -0
- package/dist/dashboard/workspace-api.js.map +1 -0
- package/dist/dashboard/workspace-html.d.ts +2 -0
- package/dist/dashboard/workspace-html.d.ts.map +1 -0
- package/dist/dashboard/workspace-html.js +2538 -0
- package/dist/dashboard/workspace-html.js.map +1 -0
- package/dist/dashboard/workspace-status.d.ts +50 -0
- package/dist/dashboard/workspace-status.d.ts.map +1 -0
- package/dist/dashboard/workspace-status.js +22 -0
- package/dist/dashboard/workspace-status.js.map +1 -0
- package/dist/index.d.ts +20 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +15 -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 +12 -3
- package/dist/types.d.ts.map +1 -1
- 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 +24 -0
- package/docs/INTEGRATIONS.md +68 -0
- package/docs/LEARNING.md +46 -0
- package/docs/PROJECT_KIT.md +93 -0
- package/docs/QUICKSTART.md +44 -0
- package/docs/README.md +33 -0
- package/docs/ROADMAP-v7.md +147 -0
- package/docs/SHARING.md +13 -0
- package/docs/SHOWCASE.md +87 -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/WORKFLOW_INTEGRATION.md +19 -1
- package/docs/WORKSPACE.md +37 -0
- 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/context-flow-v7.2.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/assets/workspace-graph-v7.2.png +0 -0
- package/docs/assets/workspace-overview-v7.2.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_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 -0
- package/docs/launch/RESEARCH_AND_PLAN_v7.1.4.md +255 -0
- package/package.json +43 -126
- package/skills/shadow-research/SKILL.md +2 -0
- package/skills/shadow-workflow/SKILL.md +6 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"context-cli.d.ts","sourceRoot":"","sources":["../src/context-cli.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAWpC,wBAAgB,uBAAuB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAoE9D"}
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
import { Command } from 'commander';
|
|
2
|
+
import * as path from 'node:path';
|
|
3
|
+
import { getGlobalBrain, GlobalBrain } from './brain/global-brain.js';
|
|
4
|
+
import { assembleContext } from './brain/context-assembly.js';
|
|
5
|
+
import { FeatureSettingsStore, FEATURE_DEFINITIONS } from './brain/feature-settings.js';
|
|
6
|
+
import { memoryAnnotationsFor } from './brain/memory-annotations.js';
|
|
7
|
+
import { parseContextRequest } from './brain/context-request.js';
|
|
8
|
+
import { inspectMemoryHealth } from './brain/memory-inspection.js';
|
|
9
|
+
import { ProjectFeedbackStore } from './brain/project-feedback.js';
|
|
10
|
+
import { resolveProjectStore } from './brain/project-memory.js';
|
|
11
|
+
export function registerContextCommands(program) {
|
|
12
|
+
program.command('context-pack').description('Build a bounded, explained project context pack without model calls')
|
|
13
|
+
.argument('[query]', 'Current task or search terms', '')
|
|
14
|
+
.option('--project <directory>', 'Project directory', process.cwd())
|
|
15
|
+
.option('--project-id <id>', 'Use an existing memory project ID directly')
|
|
16
|
+
.option('--db <path>', 'Explicit memory-store path')
|
|
17
|
+
.option('--settings <path>', 'Explicit feature-settings file')
|
|
18
|
+
.option('--token-budget <number>', 'Approximate token budget, including the rendered context', '2000')
|
|
19
|
+
.option('--cross-project', 'Request broader context when the feature is enabled')
|
|
20
|
+
.option('--profile <name>', 'Retrieval profile: legacy or adaptive', 'legacy')
|
|
21
|
+
.option('--no-related', 'Disable recorded one-hop expansion in adaptive retrieval')
|
|
22
|
+
.option('--json', 'Print entries, exclusions, reasons, and budget as JSON')
|
|
23
|
+
.action(async (query, opts) => {
|
|
24
|
+
const tokenBudget = Number(opts.tokenBudget);
|
|
25
|
+
if (!Number.isSafeInteger(tokenBudget) || tokenBudget < 0 || tokenBudget > 12000)
|
|
26
|
+
throw new TypeError('Token budget must be an integer from 0 to 12000.');
|
|
27
|
+
const local = resolveProjectStore(opts.project, opts.db);
|
|
28
|
+
const request = parseContextRequest({ projectId: opts.projectId ?? local?.projectId ?? GlobalBrain.projectIdFor(path.resolve(opts.project)),
|
|
29
|
+
query, tokenBudget, includeCrossProject: !!opts.crossProject, profile: opts.profile, expandRelated: opts.related });
|
|
30
|
+
if (local && (request.projectId !== local.projectId || request.includeCrossProject)) {
|
|
31
|
+
throw new TypeError('This memory store is pinned to its local project.');
|
|
32
|
+
}
|
|
33
|
+
const dbPath = local?.storagePath ?? (opts.db ? path.resolve(opts.db) : undefined);
|
|
34
|
+
const brain = getGlobalBrain(dbPath ? { dbPath } : undefined);
|
|
35
|
+
const settings = new FeatureSettingsStore({ filePath: opts.settings ?? local?.settingsPath ?? (dbPath ? path.join(path.dirname(dbPath), 'feature-settings.json') : undefined) });
|
|
36
|
+
const features = settings.get().features;
|
|
37
|
+
try {
|
|
38
|
+
if (features.contextAssembly)
|
|
39
|
+
brain.refresh();
|
|
40
|
+
const pack = assembleContext(brain, {
|
|
41
|
+
...request, features,
|
|
42
|
+
feedback: features.contextAssembly && local && request.profile === 'adaptive' ? new ProjectFeedbackStore(local.root, brain).get() : undefined,
|
|
43
|
+
annotations: features.contextAssembly ? memoryAnnotationsFor(brain).get() : undefined,
|
|
44
|
+
});
|
|
45
|
+
if (opts.json)
|
|
46
|
+
console.log(JSON.stringify(pack, null, 2));
|
|
47
|
+
else {
|
|
48
|
+
console.log(pack.markdown || (pack.enabled ? 'No matching context fits this request and budget.' : 'Context packs are disabled in feature settings.'));
|
|
49
|
+
for (const warning of pack.warnings)
|
|
50
|
+
console.log(`Note: ${warning}`);
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
finally {
|
|
54
|
+
await brain.shutdown();
|
|
55
|
+
}
|
|
56
|
+
});
|
|
57
|
+
program.command('memory-health').description('Inspect scoped source, review, duplication, age, and relationship attention hints without model calls')
|
|
58
|
+
.option('--project <directory>', 'Project directory', process.cwd())
|
|
59
|
+
.option('--project-id <id>', 'Use an existing memory project ID directly')
|
|
60
|
+
.option('--db <path>', 'Explicit memory-store path')
|
|
61
|
+
.option('--limit <number>', 'Maximum attention items, 1 to 100', '30')
|
|
62
|
+
.action(async (opts) => {
|
|
63
|
+
const local = resolveProjectStore(opts.project, opts.db);
|
|
64
|
+
if (local && opts.projectId && opts.projectId !== local.projectId)
|
|
65
|
+
throw new TypeError('This memory store is pinned to its local project.');
|
|
66
|
+
const dbPath = local?.storagePath ?? (opts.db ? path.resolve(opts.db) : undefined);
|
|
67
|
+
const brain = getGlobalBrain(dbPath ? { dbPath } : undefined);
|
|
68
|
+
try {
|
|
69
|
+
brain.refresh();
|
|
70
|
+
console.log(JSON.stringify(inspectMemoryHealth(brain, memoryAnnotationsFor(brain).get(), {
|
|
71
|
+
projectId: opts.projectId ?? local?.projectId ?? GlobalBrain.projectIdFor(path.resolve(opts.project)), limit: Number(opts.limit),
|
|
72
|
+
}), null, 2));
|
|
73
|
+
}
|
|
74
|
+
finally {
|
|
75
|
+
await brain.shutdown();
|
|
76
|
+
}
|
|
77
|
+
});
|
|
78
|
+
const features = new Command('features').description('Inspect or change the dedicated runtime feature controls');
|
|
79
|
+
features.command('list').option('--settings <path>', 'Explicit feature-settings file').action((opts) => {
|
|
80
|
+
console.log(JSON.stringify({ ...new FeatureSettingsStore({ filePath: opts.settings }).get(), definitions: FEATURE_DEFINITIONS }, null, 2));
|
|
81
|
+
});
|
|
82
|
+
features.command('set').argument('<name>', 'Feature ID from features list').argument('<state>', 'on or off')
|
|
83
|
+
.option('--settings <path>', 'Explicit feature-settings file').action(async (name, state, opts) => {
|
|
84
|
+
if (!['on', 'off'].includes(state))
|
|
85
|
+
throw new TypeError('Choose on or off.');
|
|
86
|
+
console.log(JSON.stringify(await new FeatureSettingsStore({ filePath: opts.settings }).update({ [name]: state === 'on' }), null, 2));
|
|
87
|
+
});
|
|
88
|
+
program.addCommand(features);
|
|
89
|
+
}
|
|
90
|
+
//# sourceMappingURL=context-cli.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"context-cli.js","sourceRoot":"","sources":["../src/context-cli.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"curation-cli.d.ts","sourceRoot":"","sources":["../src/curation-cli.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AA+DpC,qFAAqF;AACrF,wBAAgB,wBAAwB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAsE/D"}
|
|
@@ -0,0 +1,118 @@
|
|
|
1
|
+
import * as path from 'node:path';
|
|
2
|
+
import { Command } from 'commander';
|
|
3
|
+
import { getGlobalBrain } from './brain/global-brain.js';
|
|
4
|
+
import { MemoryAnnotationsError, MemoryAnnotationsStore, memoryAnnotationsFor, memoryState, } from './brain/memory-annotations.js';
|
|
5
|
+
import { normalizeMemorySources } from './brain/memory-sources.js';
|
|
6
|
+
function scoped(command) {
|
|
7
|
+
return command
|
|
8
|
+
.requiredOption('--project-id <id>', 'Existing memory project ID')
|
|
9
|
+
.option('--db <path>', 'Explicit memory-store path')
|
|
10
|
+
.option('--annotations <path>', 'Explicit annotation-store path');
|
|
11
|
+
}
|
|
12
|
+
function change(command) {
|
|
13
|
+
return scoped(command).option('--revision <number>', 'Require this annotation revision before writing');
|
|
14
|
+
}
|
|
15
|
+
function expectedRevision(value) {
|
|
16
|
+
if (value === undefined)
|
|
17
|
+
return undefined;
|
|
18
|
+
if (!/^\d+$/.test(value) || !Number.isSafeInteger(Number(value))) {
|
|
19
|
+
throw new TypeError('Annotation revision must be a nonnegative integer.');
|
|
20
|
+
}
|
|
21
|
+
return Number(value);
|
|
22
|
+
}
|
|
23
|
+
function requireScope(projectId) {
|
|
24
|
+
if (!projectId.trim() || projectId !== projectId.trim())
|
|
25
|
+
throw new TypeError('Provide a nonempty project ID.');
|
|
26
|
+
}
|
|
27
|
+
async function runCuration(opts, perform) {
|
|
28
|
+
requireScope(opts.projectId);
|
|
29
|
+
const brain = getGlobalBrain(opts.db ? { dbPath: path.resolve(opts.db) } : undefined);
|
|
30
|
+
try {
|
|
31
|
+
await brain.init();
|
|
32
|
+
const store = opts.annotations
|
|
33
|
+
? new MemoryAnnotationsStore({ filePath: opts.annotations, resolveMemory: id => brain.getEntry(id) })
|
|
34
|
+
: memoryAnnotationsFor(brain);
|
|
35
|
+
console.log(JSON.stringify(await perform(brain, store), null, 2));
|
|
36
|
+
}
|
|
37
|
+
finally {
|
|
38
|
+
await brain.shutdown();
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
function isMemoryEvent(event, projectId, memoryId) {
|
|
42
|
+
if (event.projectId !== projectId)
|
|
43
|
+
return false;
|
|
44
|
+
return event.command.kind === 'review'
|
|
45
|
+
? event.command.memoryId === memoryId
|
|
46
|
+
: event.relation?.fromId === memoryId || event.relation?.toId === memoryId;
|
|
47
|
+
}
|
|
48
|
+
/** Register project-scoped curation commands without initializing local services. */
|
|
49
|
+
export function registerCurationCommands(program) {
|
|
50
|
+
const curate = new Command('curate').description('Review stored memories and record explicit project relations');
|
|
51
|
+
scoped(curate.command('show').description('Inspect one memory, its sources, and its review history'))
|
|
52
|
+
.argument('<memory-id>')
|
|
53
|
+
.action((id, opts) => runCuration(opts, (brain, store) => {
|
|
54
|
+
const memory = brain.getEntry(id);
|
|
55
|
+
if (!memory || memory.projectId !== opts.projectId) {
|
|
56
|
+
throw new MemoryAnnotationsError('ANNOTATIONS_NOT_FOUND', 'Memory was not found in the selected project.');
|
|
57
|
+
}
|
|
58
|
+
const { projectId, projectName, agentTool, category, content, createdAt, metadata } = memory;
|
|
59
|
+
const snapshot = store.get();
|
|
60
|
+
const review = snapshot.reviews[id];
|
|
61
|
+
const links = snapshot.links.filter(link => link.projectId === projectId && (link.fromId === id || link.toId === id))
|
|
62
|
+
.map(link => {
|
|
63
|
+
const otherId = link.fromId === id ? link.toId : link.fromId;
|
|
64
|
+
return { ...link, otherId, otherAvailable: brain.getEntry(otherId)?.projectId === projectId };
|
|
65
|
+
});
|
|
66
|
+
return {
|
|
67
|
+
id, projectId, projectName, agentTool, category, content, createdAt,
|
|
68
|
+
sources: normalizeMemorySources(metadata),
|
|
69
|
+
state: memoryState(snapshot, projectId, id),
|
|
70
|
+
review: review?.projectId === projectId ? review : null,
|
|
71
|
+
links,
|
|
72
|
+
history: snapshot.history.filter(event => isMemoryEvent(event, projectId, id)),
|
|
73
|
+
revision: snapshot.revision,
|
|
74
|
+
};
|
|
75
|
+
}));
|
|
76
|
+
change(curate.command('review').description('Set a manual review state for a memory'))
|
|
77
|
+
.argument('<memory-id>')
|
|
78
|
+
.argument('<state>', 'active, archived, or contested')
|
|
79
|
+
.option('--note <text>', 'Optional review note')
|
|
80
|
+
.action((memoryId, state, opts) => {
|
|
81
|
+
const revision = expectedRevision(opts.revision);
|
|
82
|
+
return runCuration(opts, async (_brain, store) => {
|
|
83
|
+
const snapshot = await store.update({ kind: 'review', projectId: opts.projectId, memoryId, state, note: opts.note }, revision);
|
|
84
|
+
return {
|
|
85
|
+
memoryId, projectId: opts.projectId, revision: snapshot.revision, updatedAt: snapshot.updatedAt,
|
|
86
|
+
state: memoryState(snapshot, opts.projectId, memoryId), review: snapshot.reviews[memoryId],
|
|
87
|
+
};
|
|
88
|
+
});
|
|
89
|
+
});
|
|
90
|
+
change(curate.command('link').description('Record a relation between memories in one project'))
|
|
91
|
+
.argument('<from-id>')
|
|
92
|
+
.argument('<to-id>')
|
|
93
|
+
.argument('<type>', 'related, supports, contradicts, or supersedes')
|
|
94
|
+
.option('--note <text>', 'Optional relation note')
|
|
95
|
+
.action((fromId, toId, type, opts) => {
|
|
96
|
+
const revision = expectedRevision(opts.revision);
|
|
97
|
+
return runCuration(opts, async (_brain, store) => {
|
|
98
|
+
const snapshot = await store.update({ kind: 'link', projectId: opts.projectId, fromId, toId, type, note: opts.note }, revision);
|
|
99
|
+
return { projectId: opts.projectId, revision: snapshot.revision, updatedAt: snapshot.updatedAt,
|
|
100
|
+
link: snapshot.history[snapshot.history.length - 1].relation };
|
|
101
|
+
});
|
|
102
|
+
});
|
|
103
|
+
change(curate.command('unlink').description('Remove an explicit relation and retain its audit event'))
|
|
104
|
+
.argument('<link-id>')
|
|
105
|
+
.action((linkId, opts) => {
|
|
106
|
+
const revision = expectedRevision(opts.revision);
|
|
107
|
+
return runCuration(opts, async (_brain, store) => {
|
|
108
|
+
const before = store.get();
|
|
109
|
+
const link = before.links.find(item => item.id === linkId && item.projectId === opts.projectId);
|
|
110
|
+
if (!link)
|
|
111
|
+
throw new MemoryAnnotationsError('ANNOTATIONS_NOT_FOUND', 'Memory relation was not found in the selected project.');
|
|
112
|
+
const snapshot = await store.update({ kind: 'unlink', linkId }, revision ?? before.revision);
|
|
113
|
+
return { projectId: opts.projectId, revision: snapshot.revision, updatedAt: snapshot.updatedAt, linkId };
|
|
114
|
+
});
|
|
115
|
+
});
|
|
116
|
+
program.addCommand(curate);
|
|
117
|
+
}
|
|
118
|
+
//# sourceMappingURL=curation-cli.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"curation-cli.js","sourceRoot":"","sources":["../src/curation-cli.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"brain-hub-actions.d.ts","sourceRoot":"","sources":["../../src/dashboard/brain-hub-actions.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,iBAAiB,QAuI7B,CAAC"}
|
|
@@ -0,0 +1,137 @@
|
|
|
1
|
+
export const BRAIN_HUB_ACTIONS = String.raw `
|
|
2
|
+
async function roomWrite(input){
|
|
3
|
+
if(!state.room)throw new Error('Select a room first.');
|
|
4
|
+
state.room=await hubWrite('hub/rooms/'+encodeURIComponent(state.room.room.id)+'/actions',input);
|
|
5
|
+
}
|
|
6
|
+
async function lessonWrite(id,input){
|
|
7
|
+
const {lesson}=await hubWrite('hub/lessons/'+encodeURIComponent(id)+'/actions',input);
|
|
8
|
+
if(lesson)state.hub={...state.hub,lessons:arr(state.hub?.lessons).map(item=>item.id===id?lesson:item)};
|
|
9
|
+
return afterSave(refreshHub,...(input.kind!=='evaluate'?[refreshGraph]:[]));
|
|
10
|
+
}
|
|
11
|
+
async function inspectApprovedMemory(id){
|
|
12
|
+
state.graph=await api('graph'+projectQuery({limit:'140',memory:id}));
|
|
13
|
+
openView('overview');
|
|
14
|
+
await chooseMemory('memory:'+id);
|
|
15
|
+
}
|
|
16
|
+
function handleClick(event){
|
|
17
|
+
const button=event.target.closest('button');
|
|
18
|
+
if(!button||button.disabled)return;
|
|
19
|
+
const data=button.dataset;
|
|
20
|
+
if(data.view){openView(data.view);return;}
|
|
21
|
+
if(data.project){
|
|
22
|
+
if(!state.pending&&data.project!==state.project){state.project=data.project;resetScope();render();void refresh(true);}
|
|
23
|
+
return;
|
|
24
|
+
}
|
|
25
|
+
if(data.node){void chooseMemory(data.node);return;}
|
|
26
|
+
if(data.inspect){state.inspector=data.inspect;renderInspector();$('inspector').querySelector('[data-inspect="'+data.inspect+'"]')?.focus({preventScroll:true});return;}
|
|
27
|
+
if(data.event){setReplay(state.events.findIndex(item=>item.id===data.event));return;}
|
|
28
|
+
if(data.document){void mutation(()=>loadDocuments(data.document),button,'Document opened.');return;}
|
|
29
|
+
if(data.page){state.docPage=Number(data.page);render();return;}
|
|
30
|
+
if(data.room){void mutation(()=>loadRoom(data.room),button,'Room opened.');return;}
|
|
31
|
+
if(data.feature){
|
|
32
|
+
if(!state.features||featureLimit(data.feature))return;
|
|
33
|
+
const feature=data.feature;
|
|
34
|
+
void mutation(async()=>{
|
|
35
|
+
state.features=await api('features',json({patch:{[feature]:!state.features.features[feature]},expectedRevision:state.features.revision}));
|
|
36
|
+
if(feature==='liveActivity'||feature==='activityRecording'){
|
|
37
|
+
if(!state.features.features.liveActivity){state.live=false;state.events=[];state.replayId=null;state.cursor=undefined;state.journalId=undefined;}
|
|
38
|
+
else state.live=true;
|
|
39
|
+
void refresh();
|
|
40
|
+
}
|
|
41
|
+
},button,'Feature setting saved.');return;
|
|
42
|
+
}
|
|
43
|
+
if(data.roomAction){
|
|
44
|
+
const kind=data.roomAction;
|
|
45
|
+
const payload=kind==='ack-message'||kind==='ack-artifact'?{kind:'ack',targetType:kind.slice(4),targetId:data.id,...(data.sha256?{sha256:data.sha256}:{})}:
|
|
46
|
+
kind==='accept'?{kind,artifactId:data.id}:{kind,taskId:data.id,revision:Number(data.revision)};
|
|
47
|
+
void mutation(()=>roomWrite(payload),button);return;
|
|
48
|
+
}
|
|
49
|
+
if(data.lessonAction){void mutation(()=>lessonWrite(data.id,{kind:data.lessonAction}),button);return;}
|
|
50
|
+
if(data.lessonFrom){state.lessonFrom=data.lessonFrom;openView('learning');return;}
|
|
51
|
+
if(!data.action)return;
|
|
52
|
+
if(data.action.startsWith('copy-')){
|
|
53
|
+
const host=arr(state.integrations?.agents).find(item=>item.id===data.host);
|
|
54
|
+
const current=displayEvent();
|
|
55
|
+
const copies={
|
|
56
|
+
'copy-host':host?.config?.content,'copy-command':host?.command,'copy-diagnostics':state.integrations?.diagnostics,
|
|
57
|
+
'copy-project-command':'shadow-brain project workspace .','copy-pack':state.context?.markdown,
|
|
58
|
+
'copy-memory':state.memory?.memory?.content??arr(state.graph?.nodes).find(node=>node.id===state.picked)?.snippet,
|
|
59
|
+
'copy-event':current?JSON.stringify(current,null,2):null,
|
|
60
|
+
};
|
|
61
|
+
void clipboard(copies[data.action]).catch(failure=>status(failure.message,true));return;
|
|
62
|
+
}
|
|
63
|
+
switch(data.action){
|
|
64
|
+
case 'refresh':void refresh(true);break;
|
|
65
|
+
case 'refresh-room':void mutation(async()=>{await refreshHub();if(state.room)await loadRoom(state.room.room.id);},button,'Room refreshed.');break;
|
|
66
|
+
case 'graph':case 'trace':
|
|
67
|
+
state.graphMode=data.action;state.listing=false;state.pulseIds=[];render();$('main').querySelector('[data-action="'+data.action+'"]')?.focus();break;
|
|
68
|
+
case 'node-list':{
|
|
69
|
+
state.listing=!state.listing;button.setAttribute('aria-expanded',String(state.listing));
|
|
70
|
+
const target=$('node-list');target.hidden=!state.listing;syncGraphControls();if(state.listing)target.querySelector('button')?.focus();break;
|
|
71
|
+
}
|
|
72
|
+
case 'clear-focus':state.focus=false;renderInspector();drawGraph();$('main').querySelector('[data-action=graph]')?.focus({preventScroll:true});break;
|
|
73
|
+
case 'pause':state.motionPaused=!state.motionPaused;state.pulseIds=[];updateOverviewLive();break;
|
|
74
|
+
case 'inspect-latest':state.inspector='event';renderInspector();break;
|
|
75
|
+
case 'live':state.replayId=null;updateOverviewLive();$('replay')?.focus({preventScroll:true});break;
|
|
76
|
+
case 'open-memory':void inspectApprovedMemory(data.memory).catch(failure=>status(failure.message,true));break;
|
|
77
|
+
case 'apply-skill':void mutation(async()=>{
|
|
78
|
+
if(!state.skill?.planHash||!state.skillInput)throw new Error('Preview a project skill before applying it.');
|
|
79
|
+
state.skill={...await api('project-skill-apply',json({...state.skillInput,expectedPlanHash:state.skill.planHash})),applied:true};
|
|
80
|
+
},button,'Reviewed project skill applied.');break;
|
|
81
|
+
case 'review-page':void mutation(async()=>{
|
|
82
|
+
const id=state.documents?.document?.id;
|
|
83
|
+
if(!id)throw new Error('Choose a document page first.');
|
|
84
|
+
state.documents=await hubWrite('hub/documents/'+encodeURIComponent(id)+'/review',{page:state.docPage,decision:data.decision});
|
|
85
|
+
return afterSave(refreshHub,refreshGraph);
|
|
86
|
+
},button,data.decision==='approve'?'Page approved and added to project memory.':'Page rejected.');break;
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
function handleSubmit(event){
|
|
90
|
+
const target=event.target;
|
|
91
|
+
const kind=target.dataset.form;
|
|
92
|
+
if(!kind)return;
|
|
93
|
+
event.preventDefault();
|
|
94
|
+
const form=new FormData(target,event.submitter),button=event.submitter;
|
|
95
|
+
const tasks={
|
|
96
|
+
context:async()=>{
|
|
97
|
+
const input={projectId:state.project,query:field(form,'query'),tokenBudget:Number(form.get('tokenBudget')),profile:field(form,'profile'),expandRelated:form.has('expandRelated')};
|
|
98
|
+
state.contextInput=input;
|
|
99
|
+
if(form.get('compare')==='yes'){state.comparison=await api('context-compare',json(input));state.context=state.comparison[input.profile];}
|
|
100
|
+
else {state.context=await api('context',json(input));state.comparison=null;}
|
|
101
|
+
},
|
|
102
|
+
upload:async()=>{
|
|
103
|
+
const pdf=form.get('pdf');
|
|
104
|
+
if(!(pdf instanceof File)||!pdf.size)throw new Error('Choose a PDF to upload.');
|
|
105
|
+
if(state.hub?.limits?.pdfBytes&&pdf.size>state.hub.limits.pdfBytes)throw new Error('The PDF exceeds this workspace’s upload limit.');
|
|
106
|
+
state.documents=await api('hub/documents?'+new URLSearchParams({name:pdf.name}),{method:'POST',body:pdf,headers:{'Content-Type':'application/pdf'},timeoutMs:30000});
|
|
107
|
+
state.docPage=arr(state.documents.pages)[0]?.page??1;
|
|
108
|
+
return afterSave(refreshHub);
|
|
109
|
+
},
|
|
110
|
+
knowledge:async()=>{
|
|
111
|
+
const input={title:field(form,'title'),content:field(form,'content')};
|
|
112
|
+
const source=field(form,'source');if(source)input.source=source;
|
|
113
|
+
await api('project-knowledge',json(input));return afterSave(refreshGraph);
|
|
114
|
+
},
|
|
115
|
+
skill:async()=>{
|
|
116
|
+
const input={requirement:field(form,'requirement'),target:field(form,'target')};
|
|
117
|
+
const name=field(form,'name'),knowledge=field(form,'knowledge');
|
|
118
|
+
if(name)input.name=name;if(knowledge)input.knowledge=knowledge;
|
|
119
|
+
state.skill=await api('project-skill-preview',json(input));state.skillInput=input;
|
|
120
|
+
},
|
|
121
|
+
room:async()=>{state.room=await hubWrite('hub/rooms',{goal:field(form,'goal')});return afterSave(refreshHub);},
|
|
122
|
+
message:async()=>{const replyTo=field(form,'replyTo');await roomWrite({kind:'message',type:field(form,'type'),text:field(form,'text'),...(replyTo?{replyTo}:{})});},
|
|
123
|
+
task:()=>roomWrite({kind:'task',title:field(form,'title')}),
|
|
124
|
+
artifact:async()=>{
|
|
125
|
+
const taskId=field(form,'taskId'),task=arr(state.room?.tasks).find(item=>item.id===taskId);
|
|
126
|
+
if(!task)throw new Error('Choose a claimed task.');
|
|
127
|
+
await roomWrite({kind:'artifact',taskId,revision:task.revision,path:field(form,'path')});
|
|
128
|
+
},
|
|
129
|
+
outcome:()=>{const artifactId=field(form,'artifactId');return roomWrite({kind:'outcome',taskId:field(form,'taskId'),result:field(form,'result'),check:field(form,'check'),evidence:field(form,'evidence'),...(artifactId?{artifactId}:{})});},
|
|
130
|
+
lesson:async()=>{const {lesson}=await hubWrite('hub/lessons',{outcomeId:field(form,'outcomeId'),title:field(form,'title'),text:field(form,'text')});if(lesson)state.hub={...state.hub,lessons:[...arr(state.hub?.lessons),lesson]};state.lessonFrom=null;return afterSave(refreshHub);},
|
|
131
|
+
evaluate:()=>lessonWrite(target.dataset.id,{kind:'evaluate',baseline:form.has('baseline'),candidate:form.has('candidate'),control:form.has('control'),evidence:field(form,'evidence')}),
|
|
132
|
+
};
|
|
133
|
+
const operation=tasks[kind];
|
|
134
|
+
if(operation)void mutation(operation,button,kind==='upload'?'PDF intake recorded.':kind==='context'?'Context pack assembled.':'Saved.');
|
|
135
|
+
}
|
|
136
|
+
`;
|
|
137
|
+
//# sourceMappingURL=brain-hub-actions.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"brain-hub-actions.js","sourceRoot":"","sources":["../../src/dashboard/brain-hub-actions.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,iBAAiB,GAAG,MAAM,CAAC,GAAG,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAuI1C,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"brain-hub-client.d.ts","sourceRoot":"","sources":["../../src/dashboard/brain-hub-client.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,gBAAgB,QA6U5B,CAAC"}
|