robrain 2.0.1 → 2.3.0
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/dist/commands/doctor.d.ts +2 -0
- package/dist/commands/doctor.d.ts.map +1 -0
- package/dist/commands/doctor.js +195 -0
- package/dist/commands/doctor.js.map +1 -0
- package/dist/commands/export-interchange.d.ts +62 -0
- package/dist/commands/export-interchange.d.ts.map +1 -0
- package/dist/commands/export-interchange.js +109 -0
- package/dist/commands/export-interchange.js.map +1 -0
- package/dist/commands/export-interchange.test.d.ts +2 -0
- package/dist/commands/export-interchange.test.d.ts.map +1 -0
- package/dist/commands/export-interchange.test.js +94 -0
- package/dist/commands/export-interchange.test.js.map +1 -0
- package/dist/commands/inject.d.ts.map +1 -1
- package/dist/commands/inject.js +12 -1
- package/dist/commands/inject.js.map +1 -1
- package/dist/commands/install.d.ts.map +1 -1
- package/dist/commands/install.js +29 -21
- package/dist/commands/install.js.map +1 -1
- package/dist/commands/outcomes.d.ts +41 -0
- package/dist/commands/outcomes.d.ts.map +1 -0
- package/dist/commands/outcomes.js +274 -0
- package/dist/commands/outcomes.js.map +1 -0
- package/dist/commands/outcomes.test.d.ts +2 -0
- package/dist/commands/outcomes.test.d.ts.map +1 -0
- package/dist/commands/outcomes.test.js +118 -0
- package/dist/commands/outcomes.test.js.map +1 -0
- package/dist/commands/review.d.ts.map +1 -1
- package/dist/commands/review.js +24 -0
- package/dist/commands/review.js.map +1 -1
- package/dist/commands/up.d.ts +34 -0
- package/dist/commands/up.d.ts.map +1 -0
- package/dist/commands/up.js +257 -0
- package/dist/commands/up.js.map +1 -0
- package/dist/commands/up.test.d.ts +2 -0
- package/dist/commands/up.test.d.ts.map +1 -0
- package/dist/commands/up.test.js +70 -0
- package/dist/commands/up.test.js.map +1 -0
- package/dist/index.js +65 -5
- package/dist/index.js.map +1 -1
- package/dist/lib/mcp-bundle.d.ts +26 -2
- package/dist/lib/mcp-bundle.d.ts.map +1 -1
- package/dist/lib/mcp-bundle.js +71 -6
- package/dist/lib/mcp-bundle.js.map +1 -1
- package/dist/lib/mcp-bundle.test.d.ts +2 -0
- package/dist/lib/mcp-bundle.test.d.ts.map +1 -0
- package/dist/lib/mcp-bundle.test.js +85 -0
- package/dist/lib/mcp-bundle.test.js.map +1 -0
- package/dist/lib/project.d.ts.map +1 -1
- package/dist/lib/project.js +17 -1
- package/dist/lib/project.js.map +1 -1
- package/package.json +3 -2
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"doctor.d.ts","sourceRoot":"","sources":["../../src/commands/doctor.ts"],"names":[],"mappings":"AAoCA,wBAAsB,aAAa,IAAI,OAAO,CAAC,IAAI,CAAC,CAwKnD"}
|
|
@@ -0,0 +1,195 @@
|
|
|
1
|
+
// src/commands/doctor.ts
|
|
2
|
+
// robrain doctor — diagnose a RoBrain setup end to end.
|
|
3
|
+
// Each check prints ✓ / ⚠ / ✗ with a fix hint; exits non-zero when any
|
|
4
|
+
// check fails so it can gate scripts and bug reports.
|
|
5
|
+
import chalk from 'chalk';
|
|
6
|
+
import { existsSync, readFileSync } from 'fs';
|
|
7
|
+
import { homedir } from 'os';
|
|
8
|
+
import { join } from 'path';
|
|
9
|
+
import { cwd } from 'process';
|
|
10
|
+
import { readConfig, isAuthenticated } from '../lib/config.js';
|
|
11
|
+
import { sensingBundleReady } from '../lib/mcp-bundle.js';
|
|
12
|
+
import { detectEditors } from '../lib/editor.js';
|
|
13
|
+
import { gatherProjectInfo } from '../lib/project.js';
|
|
14
|
+
const ROBRAIN_MCP_DIR = join(homedir(), '.robrain', 'mcp');
|
|
15
|
+
const HEALTH_TIMEOUT_MS = 3_000;
|
|
16
|
+
function printCheck(c) {
|
|
17
|
+
const mark = c.level === 'pass' ? chalk.green('✓') :
|
|
18
|
+
c.level === 'warn' ? chalk.yellow('⚠') :
|
|
19
|
+
chalk.red('✗');
|
|
20
|
+
console.log(` ${mark} ${c.label}` + (c.detail ? chalk.dim(` — ${c.detail}`) : ''));
|
|
21
|
+
if (c.hint)
|
|
22
|
+
console.log(chalk.dim(` → ${c.hint}`));
|
|
23
|
+
}
|
|
24
|
+
export async function doctorCommand() {
|
|
25
|
+
console.log();
|
|
26
|
+
console.log(chalk.bold(' RoBrain doctor\n'));
|
|
27
|
+
const checks = [];
|
|
28
|
+
const config = readConfig();
|
|
29
|
+
// 1 — local install / auth
|
|
30
|
+
if (isAuthenticated()) {
|
|
31
|
+
checks.push({
|
|
32
|
+
level: 'pass',
|
|
33
|
+
label: 'Install config',
|
|
34
|
+
detail: config.token && config.email ? `cloud (${config.email})` : 'self-hosted (OSS)',
|
|
35
|
+
});
|
|
36
|
+
}
|
|
37
|
+
else {
|
|
38
|
+
checks.push({
|
|
39
|
+
level: 'fail',
|
|
40
|
+
label: 'Install config',
|
|
41
|
+
detail: '~/.robrain/config.json missing or incomplete',
|
|
42
|
+
hint: 'Run: robrain install (cloud) or robrain install --self-hosted --repo-root <robrain-clone>',
|
|
43
|
+
});
|
|
44
|
+
}
|
|
45
|
+
// 2 — Sensing MCP bundle
|
|
46
|
+
if (sensingBundleReady(ROBRAIN_MCP_DIR)) {
|
|
47
|
+
checks.push({ level: 'pass', label: 'Sensing MCP bundle', detail: join(ROBRAIN_MCP_DIR, 'sensing') });
|
|
48
|
+
}
|
|
49
|
+
else {
|
|
50
|
+
checks.push({
|
|
51
|
+
level: 'fail',
|
|
52
|
+
label: 'Sensing MCP bundle',
|
|
53
|
+
detail: `no complete bundle under ${join(ROBRAIN_MCP_DIR, 'sensing')}`,
|
|
54
|
+
hint: 'From the robrain clone run: pnpm install && pnpm build, then re-run robrain install',
|
|
55
|
+
});
|
|
56
|
+
}
|
|
57
|
+
// 3 — editor wiring (all editor config formats mention the server by name)
|
|
58
|
+
const editors = detectEditors();
|
|
59
|
+
const wired = editors.filter(e => {
|
|
60
|
+
try {
|
|
61
|
+
return existsSync(e.configPath) && readFileSync(e.configPath, 'utf8').includes('robrain-sensing');
|
|
62
|
+
}
|
|
63
|
+
catch {
|
|
64
|
+
return false;
|
|
65
|
+
}
|
|
66
|
+
});
|
|
67
|
+
if (wired.length > 0) {
|
|
68
|
+
checks.push({
|
|
69
|
+
level: 'pass',
|
|
70
|
+
label: 'Editor wiring',
|
|
71
|
+
detail: wired.map(e => e.label).join(', '),
|
|
72
|
+
});
|
|
73
|
+
}
|
|
74
|
+
else {
|
|
75
|
+
checks.push({
|
|
76
|
+
level: 'fail',
|
|
77
|
+
label: 'Editor wiring',
|
|
78
|
+
detail: editors.length > 0
|
|
79
|
+
? `detected ${editors.map(e => e.label).join(', ')} but none reference robrain-sensing`
|
|
80
|
+
: 'no supported editor detected',
|
|
81
|
+
hint: 'Run: robrain install (add --editor claude-code | cursor | copilot | codex to target one)',
|
|
82
|
+
});
|
|
83
|
+
}
|
|
84
|
+
// 4 — API keys. Warn-only: editor configs carry their own env block, so a
|
|
85
|
+
// missing shell key does not necessarily break Sensing inside the editor.
|
|
86
|
+
const llmKey = process.env.LLM_PROVIDER === 'openai'
|
|
87
|
+
? process.env.OPENAI_API_KEY
|
|
88
|
+
: process.env.ANTHROPIC_API_KEY;
|
|
89
|
+
checks.push(llmKey
|
|
90
|
+
? { level: 'pass', label: 'Reasoning LLM key', detail: process.env.LLM_PROVIDER === 'openai' ? 'OPENAI_API_KEY set' : 'ANTHROPIC_API_KEY set' }
|
|
91
|
+
: {
|
|
92
|
+
level: 'warn',
|
|
93
|
+
label: 'Reasoning LLM key',
|
|
94
|
+
detail: 'not found in shell env / .env (decision extraction is skipped without it)',
|
|
95
|
+
hint: 'Set ANTHROPIC_API_KEY (or LLM_PROVIDER=openai + OPENAI_API_KEY) in the repo .env',
|
|
96
|
+
});
|
|
97
|
+
const embeddingKeySet = Boolean(config.embeddingKey) ||
|
|
98
|
+
Boolean(process.env.OPENAI_API_KEY || process.env.VOYAGE_API_KEY || process.env.COHERE_API_KEY);
|
|
99
|
+
checks.push(embeddingKeySet
|
|
100
|
+
? { level: 'pass', label: 'Embedding key', detail: config.embeddingProvider ?? 'openai' }
|
|
101
|
+
: {
|
|
102
|
+
level: 'warn',
|
|
103
|
+
label: 'Embedding key',
|
|
104
|
+
detail: 'no embedding provider key found (topic-shift and semantic search need one)',
|
|
105
|
+
hint: 'Set OPENAI_API_KEY (or VOYAGE_API_KEY / COHERE_API_KEY) and re-run robrain install',
|
|
106
|
+
});
|
|
107
|
+
// 5 — Perception health. A dead Perception is the classic silent failure:
|
|
108
|
+
// Sensing blocks on it at session start, so the editor's first reply can
|
|
109
|
+
// hang for minutes with no visible error.
|
|
110
|
+
const perceptionUrl = config.perceptionUrl ?? process.env.PERCEPTION_API_URL;
|
|
111
|
+
let perceptionUp = false;
|
|
112
|
+
if (!perceptionUrl) {
|
|
113
|
+
checks.push({
|
|
114
|
+
level: 'fail',
|
|
115
|
+
label: 'Perception API',
|
|
116
|
+
detail: 'no URL configured (config.json perceptionUrl / PERCEPTION_API_URL)',
|
|
117
|
+
hint: 'Run: robrain install (cloud) or pnpm docker:up + robrain install --self-hosted',
|
|
118
|
+
});
|
|
119
|
+
}
|
|
120
|
+
else {
|
|
121
|
+
try {
|
|
122
|
+
const res = await fetch(`${perceptionUrl}/health`, {
|
|
123
|
+
signal: AbortSignal.timeout(HEALTH_TIMEOUT_MS),
|
|
124
|
+
});
|
|
125
|
+
perceptionUp = res.ok;
|
|
126
|
+
checks.push(res.ok
|
|
127
|
+
? { level: 'pass', label: 'Perception API', detail: `${perceptionUrl} healthy` }
|
|
128
|
+
: {
|
|
129
|
+
level: 'fail',
|
|
130
|
+
label: 'Perception API',
|
|
131
|
+
detail: `${perceptionUrl} answered HTTP ${res.status}`,
|
|
132
|
+
hint: 'Check the Perception logs (self-hosted: docker compose -f docker/docker-compose.yml logs perception)',
|
|
133
|
+
});
|
|
134
|
+
}
|
|
135
|
+
catch {
|
|
136
|
+
checks.push({
|
|
137
|
+
level: 'fail',
|
|
138
|
+
label: 'Perception API',
|
|
139
|
+
detail: `${perceptionUrl} unreachable — Sensing will stall waiting on it (slow first reply in the editor)`,
|
|
140
|
+
hint: 'Self-hosted: pnpm docker:up in the robrain clone. Cloud: check your network / status page.',
|
|
141
|
+
});
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
// 6 — current project registered (only meaningful when Perception is up)
|
|
145
|
+
if (perceptionUp && perceptionUrl) {
|
|
146
|
+
const info = gatherProjectInfo(cwd());
|
|
147
|
+
try {
|
|
148
|
+
const key = config.perceptionKey ?? process.env.PERCEPTION_API_KEY;
|
|
149
|
+
const res = await fetch(`${perceptionUrl}/projects`, {
|
|
150
|
+
headers: key ? { Authorization: `Bearer ${key}` } : {},
|
|
151
|
+
signal: AbortSignal.timeout(HEALTH_TIMEOUT_MS),
|
|
152
|
+
});
|
|
153
|
+
if (res.ok) {
|
|
154
|
+
const data = await res.json();
|
|
155
|
+
const registered = data.projects?.some(p => p.id === info.id) ?? false;
|
|
156
|
+
checks.push(registered
|
|
157
|
+
? { level: 'pass', label: 'Project registered', detail: info.id }
|
|
158
|
+
: {
|
|
159
|
+
level: 'warn',
|
|
160
|
+
label: 'Project registered',
|
|
161
|
+
detail: `${info.id} not found in Perception (signals from this repo would be rejected)`,
|
|
162
|
+
hint: 'Run: robrain init-project in this directory',
|
|
163
|
+
});
|
|
164
|
+
}
|
|
165
|
+
else {
|
|
166
|
+
checks.push({
|
|
167
|
+
level: 'warn',
|
|
168
|
+
label: 'Project registered',
|
|
169
|
+
detail: `could not list projects (HTTP ${res.status})`,
|
|
170
|
+
hint: res.status === 401 ? 'Perception key mismatch — set perceptionKey in ~/.robrain/config.json or PERCEPTION_API_KEY' : undefined,
|
|
171
|
+
});
|
|
172
|
+
}
|
|
173
|
+
}
|
|
174
|
+
catch {
|
|
175
|
+
checks.push({ level: 'warn', label: 'Project registered', detail: 'could not list projects' });
|
|
176
|
+
}
|
|
177
|
+
}
|
|
178
|
+
for (const c of checks)
|
|
179
|
+
printCheck(c);
|
|
180
|
+
const failures = checks.filter(c => c.level === 'fail').length;
|
|
181
|
+
const warnings = checks.filter(c => c.level === 'warn').length;
|
|
182
|
+
console.log();
|
|
183
|
+
if (failures > 0) {
|
|
184
|
+
console.log(chalk.red(` ${failures} check(s) failed`) + (warnings ? chalk.yellow(`, ${warnings} warning(s)`) : ''));
|
|
185
|
+
process.exitCode = 1;
|
|
186
|
+
}
|
|
187
|
+
else if (warnings > 0) {
|
|
188
|
+
console.log(chalk.yellow(` All required checks passed — ${warnings} warning(s)`));
|
|
189
|
+
}
|
|
190
|
+
else {
|
|
191
|
+
console.log(chalk.green(' All checks passed'));
|
|
192
|
+
}
|
|
193
|
+
console.log();
|
|
194
|
+
}
|
|
195
|
+
//# sourceMappingURL=doctor.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"doctor.js","sourceRoot":"","sources":["../../src/commands/doctor.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
export declare const INTERCHANGE_FORMAT = "robrain-memory/v1";
|
|
2
|
+
/** Decision row as returned by Perception GET /decisions?history=true. */
|
|
3
|
+
export interface SourceDecision {
|
|
4
|
+
id: string;
|
|
5
|
+
decision: string;
|
|
6
|
+
rationale?: string | null;
|
|
7
|
+
rejected?: Array<{
|
|
8
|
+
option: string;
|
|
9
|
+
reason: string;
|
|
10
|
+
}> | null;
|
|
11
|
+
files_affected?: string[] | null;
|
|
12
|
+
scope: string;
|
|
13
|
+
created_at: string;
|
|
14
|
+
invalidated_at?: string | null;
|
|
15
|
+
reviewed_at?: string | null;
|
|
16
|
+
supersedes_id?: string | null;
|
|
17
|
+
session_id: string;
|
|
18
|
+
source_turn_sequence?: number | null;
|
|
19
|
+
source_excerpt?: string | null;
|
|
20
|
+
historical_relevance?: number | null;
|
|
21
|
+
injected_count?: number | null;
|
|
22
|
+
used_count?: number | null;
|
|
23
|
+
}
|
|
24
|
+
export interface InterchangeRecord {
|
|
25
|
+
format: typeof INTERCHANGE_FORMAT;
|
|
26
|
+
id: string;
|
|
27
|
+
decision: string;
|
|
28
|
+
rationale: string | null;
|
|
29
|
+
rejected: Array<{
|
|
30
|
+
option: string;
|
|
31
|
+
reason: string;
|
|
32
|
+
}>;
|
|
33
|
+
files_affected: string[];
|
|
34
|
+
scope: string;
|
|
35
|
+
lifecycle: {
|
|
36
|
+
created_at: string;
|
|
37
|
+
invalidated_at: string | null;
|
|
38
|
+
reviewed_at: string | null;
|
|
39
|
+
supersedes_id: string | null;
|
|
40
|
+
};
|
|
41
|
+
provenance: {
|
|
42
|
+
session_id: string;
|
|
43
|
+
source_turn_sequence: number | null;
|
|
44
|
+
source_excerpt: string | null;
|
|
45
|
+
};
|
|
46
|
+
quality: {
|
|
47
|
+
historical_relevance: number | null;
|
|
48
|
+
injected_count: number;
|
|
49
|
+
used_count: number;
|
|
50
|
+
};
|
|
51
|
+
}
|
|
52
|
+
export declare function toInterchangeRecord(d: SourceDecision): InterchangeRecord;
|
|
53
|
+
export declare function toInterchangeJsonl(decisions: SourceDecision[]): string;
|
|
54
|
+
interface ExportInterchangeOptions {
|
|
55
|
+
format?: string;
|
|
56
|
+
out?: string;
|
|
57
|
+
cwd?: string;
|
|
58
|
+
projectId?: string;
|
|
59
|
+
}
|
|
60
|
+
export declare function exportInterchangeCommand(opts: ExportInterchangeOptions): Promise<void>;
|
|
61
|
+
export {};
|
|
62
|
+
//# sourceMappingURL=export-interchange.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"export-interchange.d.ts","sourceRoot":"","sources":["../../src/commands/export-interchange.ts"],"names":[],"mappings":"AAmBA,eAAO,MAAM,kBAAkB,sBAAsB,CAAA;AAIrD,0EAA0E;AAC1E,MAAM,WAAW,cAAc;IAC7B,EAAE,EAAc,MAAM,CAAA;IACtB,QAAQ,EAAQ,MAAM,CAAA;IACtB,SAAS,CAAC,EAAM,MAAM,GAAG,IAAI,CAAA;IAC7B,QAAQ,CAAC,EAAO,KAAK,CAAC;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC,GAAG,IAAI,CAAA;IAChE,cAAc,CAAC,EAAE,MAAM,EAAE,GAAG,IAAI,CAAA;IAChC,KAAK,EAAW,MAAM,CAAA;IACtB,UAAU,EAAM,MAAM,CAAA;IACtB,cAAc,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IAC9B,WAAW,CAAC,EAAI,MAAM,GAAG,IAAI,CAAA;IAC7B,aAAa,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IAC7B,UAAU,EAAM,MAAM,CAAA;IACtB,oBAAoB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IACpC,cAAc,CAAC,EAAQ,MAAM,GAAG,IAAI,CAAA;IACpC,oBAAoB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IACpC,cAAc,CAAC,EAAQ,MAAM,GAAG,IAAI,CAAA;IACpC,UAAU,CAAC,EAAY,MAAM,GAAG,IAAI,CAAA;CACrC;AAED,MAAM,WAAW,iBAAiB;IAChC,MAAM,EAAU,OAAO,kBAAkB,CAAA;IACzC,EAAE,EAAc,MAAM,CAAA;IACtB,QAAQ,EAAQ,MAAM,CAAA;IACtB,SAAS,EAAO,MAAM,GAAG,IAAI,CAAA;IAC7B,QAAQ,EAAQ,KAAK,CAAC;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;IACzD,cAAc,EAAE,MAAM,EAAE,CAAA;IACxB,KAAK,EAAW,MAAM,CAAA;IACtB,SAAS,EAAE;QACT,UAAU,EAAM,MAAM,CAAA;QACtB,cAAc,EAAE,MAAM,GAAG,IAAI,CAAA;QAC7B,WAAW,EAAK,MAAM,GAAG,IAAI,CAAA;QAC7B,aAAa,EAAG,MAAM,GAAG,IAAI,CAAA;KAC9B,CAAA;IACD,UAAU,EAAE;QACV,UAAU,EAAY,MAAM,CAAA;QAC5B,oBAAoB,EAAE,MAAM,GAAG,IAAI,CAAA;QACnC,cAAc,EAAQ,MAAM,GAAG,IAAI,CAAA;KACpC,CAAA;IACD,OAAO,EAAE;QACP,oBAAoB,EAAE,MAAM,GAAG,IAAI,CAAA;QACnC,cAAc,EAAQ,MAAM,CAAA;QAC5B,UAAU,EAAY,MAAM,CAAA;KAC7B,CAAA;CACF;AAED,wBAAgB,mBAAmB,CAAC,CAAC,EAAE,cAAc,GAAG,iBAAiB,CA0BxE;AAED,wBAAgB,kBAAkB,CAAC,SAAS,EAAE,cAAc,EAAE,GAAG,MAAM,CAEtE;AAID,UAAU,wBAAwB;IAChC,MAAM,CAAC,EAAK,MAAM,CAAA;IAClB,GAAG,CAAC,EAAQ,MAAM,CAAA;IAClB,GAAG,CAAC,EAAQ,MAAM,CAAA;IAClB,SAAS,CAAC,EAAE,MAAM,CAAA;CACnB;AAED,wBAAsB,wBAAwB,CAAC,IAAI,EAAE,wBAAwB,GAAG,OAAO,CAAC,IAAI,CAAC,CA4D5F"}
|
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
// packages/cli/src/commands/export-interchange.ts
|
|
2
|
+
// ─────────────────────────────────────────────────────────────
|
|
3
|
+
// robrain export --format interchange [--out FILE] [--cwd PATH] [--project-id ID]
|
|
4
|
+
//
|
|
5
|
+
// Writes the full decision corpus as JSONL — one memory per line,
|
|
6
|
+
// format "robrain-memory/v1" — so other agent-memory tools can
|
|
7
|
+
// import it. Spec: docs/memory-interchange.md.
|
|
8
|
+
//
|
|
9
|
+
// Default target is stdout (pipe-friendly); status lines go to
|
|
10
|
+
// stderr. `--out` writes a file instead.
|
|
11
|
+
// ─────────────────────────────────────────────────────────────
|
|
12
|
+
import chalk from 'chalk';
|
|
13
|
+
import { writeFileSync } from 'fs';
|
|
14
|
+
import { resolve } from 'path';
|
|
15
|
+
import { cwd } from 'process';
|
|
16
|
+
import { readConfig } from '../lib/config.js';
|
|
17
|
+
import { gatherProjectInfo } from '../lib/project.js';
|
|
18
|
+
export const INTERCHANGE_FORMAT = 'robrain-memory/v1';
|
|
19
|
+
export function toInterchangeRecord(d) {
|
|
20
|
+
return {
|
|
21
|
+
format: INTERCHANGE_FORMAT,
|
|
22
|
+
id: d.id,
|
|
23
|
+
decision: d.decision,
|
|
24
|
+
rationale: d.rationale ?? null,
|
|
25
|
+
rejected: (d.rejected ?? []).map(r => ({ option: r.option, reason: r.reason })),
|
|
26
|
+
files_affected: d.files_affected ?? [],
|
|
27
|
+
scope: d.scope,
|
|
28
|
+
lifecycle: {
|
|
29
|
+
created_at: d.created_at,
|
|
30
|
+
invalidated_at: d.invalidated_at ?? null,
|
|
31
|
+
reviewed_at: d.reviewed_at ?? null,
|
|
32
|
+
supersedes_id: d.supersedes_id ?? null,
|
|
33
|
+
},
|
|
34
|
+
provenance: {
|
|
35
|
+
session_id: d.session_id,
|
|
36
|
+
source_turn_sequence: d.source_turn_sequence ?? null,
|
|
37
|
+
source_excerpt: d.source_excerpt ?? null,
|
|
38
|
+
},
|
|
39
|
+
quality: {
|
|
40
|
+
historical_relevance: d.historical_relevance ?? null,
|
|
41
|
+
injected_count: d.injected_count ?? 0,
|
|
42
|
+
used_count: d.used_count ?? 0,
|
|
43
|
+
},
|
|
44
|
+
};
|
|
45
|
+
}
|
|
46
|
+
export function toInterchangeJsonl(decisions) {
|
|
47
|
+
return decisions.map(d => JSON.stringify(toInterchangeRecord(d))).join('\n') + (decisions.length > 0 ? '\n' : '');
|
|
48
|
+
}
|
|
49
|
+
export async function exportInterchangeCommand(opts) {
|
|
50
|
+
const format = opts.format ?? 'interchange';
|
|
51
|
+
if (format !== 'interchange') {
|
|
52
|
+
console.error(chalk.red(` ✗ Unknown format "${format}". Supported: interchange`));
|
|
53
|
+
process.exit(1);
|
|
54
|
+
}
|
|
55
|
+
const config = readConfig();
|
|
56
|
+
const projectRoot = opts.cwd ?? cwd();
|
|
57
|
+
const baseInfo = gatherProjectInfo(projectRoot);
|
|
58
|
+
const info = opts.projectId
|
|
59
|
+
? { ...baseInfo, id: opts.projectId }
|
|
60
|
+
: baseInfo;
|
|
61
|
+
const percUrl = config.perceptionUrl ?? 'http://localhost:3001';
|
|
62
|
+
const percKey = config.perceptionKey ?? '';
|
|
63
|
+
const decisions = [];
|
|
64
|
+
try {
|
|
65
|
+
// Server caps limit at 100 — page with offset until a short page so the
|
|
66
|
+
// export carries the whole corpus, not just the oldest 100 rows.
|
|
67
|
+
const pageSize = 100;
|
|
68
|
+
for (let offset = 0;; offset += pageSize) {
|
|
69
|
+
const params = new URLSearchParams({
|
|
70
|
+
project_id: info.id,
|
|
71
|
+
history: 'true', // interchange carries the full lifecycle, invalidated rows included
|
|
72
|
+
limit: String(pageSize),
|
|
73
|
+
offset: String(offset),
|
|
74
|
+
});
|
|
75
|
+
const res = await fetch(`${percUrl}/decisions?${params}`, {
|
|
76
|
+
headers: percKey ? { 'Authorization': `Bearer ${percKey}` } : {},
|
|
77
|
+
});
|
|
78
|
+
if (!res.ok) {
|
|
79
|
+
console.error(chalk.red(` ✗ Could not fetch decisions (${res.status}). Is Perception running?`));
|
|
80
|
+
console.error(chalk.dim(` Expected at: ${percUrl}`));
|
|
81
|
+
console.error(chalk.dim(' Start with: pnpm docker:up'));
|
|
82
|
+
process.exit(1);
|
|
83
|
+
}
|
|
84
|
+
const data = await res.json();
|
|
85
|
+
const page = data.decisions ?? [];
|
|
86
|
+
decisions.push(...page);
|
|
87
|
+
if (page.length < pageSize)
|
|
88
|
+
break;
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
catch {
|
|
92
|
+
console.error(chalk.red(' ✗ Could not reach Perception API'));
|
|
93
|
+
console.error(chalk.dim(` Expected at: ${percUrl}`));
|
|
94
|
+
console.error(chalk.dim(' Start with: pnpm docker:up'));
|
|
95
|
+
process.exit(1);
|
|
96
|
+
}
|
|
97
|
+
const jsonl = toInterchangeJsonl(decisions);
|
|
98
|
+
if (opts.out) {
|
|
99
|
+
const outPath = resolve(opts.out);
|
|
100
|
+
writeFileSync(outPath, jsonl);
|
|
101
|
+
console.error(chalk.green(` ✓ Wrote ${decisions.length} memor${decisions.length === 1 ? 'y' : 'ies'} to ${outPath}`));
|
|
102
|
+
console.error(chalk.dim(` Format: ${INTERCHANGE_FORMAT} — spec in docs/memory-interchange.md`));
|
|
103
|
+
}
|
|
104
|
+
else {
|
|
105
|
+
process.stdout.write(jsonl);
|
|
106
|
+
console.error(chalk.dim(` ${decisions.length} memor${decisions.length === 1 ? 'y' : 'ies'} · ${INTERCHANGE_FORMAT} · spec in docs/memory-interchange.md`));
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
//# sourceMappingURL=export-interchange.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"export-interchange.js","sourceRoot":"","sources":["../../src/commands/export-interchange.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"export-interchange.test.d.ts","sourceRoot":"","sources":["../../src/commands/export-interchange.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
import { describe, it } from 'node:test';
|
|
2
|
+
import assert from 'node:assert/strict';
|
|
3
|
+
import { INTERCHANGE_FORMAT, toInterchangeJsonl, toInterchangeRecord, } from './export-interchange.js';
|
|
4
|
+
const full = {
|
|
5
|
+
id: 'dec-1',
|
|
6
|
+
decision: 'Use pnpm for all workspace commands',
|
|
7
|
+
rationale: 'Repo is standardized on pnpm',
|
|
8
|
+
rejected: [{ option: 'npm', reason: 'lockfile drift' }],
|
|
9
|
+
files_affected: ['package.json', 'pnpm-workspace.yaml'],
|
|
10
|
+
scope: 'team',
|
|
11
|
+
created_at: '2026-05-01T10:00:00Z',
|
|
12
|
+
invalidated_at: null,
|
|
13
|
+
reviewed_at: '2026-05-02T09:00:00Z',
|
|
14
|
+
supersedes_id: 'dec-0',
|
|
15
|
+
session_id: 'sess-abc',
|
|
16
|
+
source_turn_sequence: 4,
|
|
17
|
+
source_excerpt: 'please only ever use pnpm here',
|
|
18
|
+
historical_relevance: 0.62,
|
|
19
|
+
injected_count: 14,
|
|
20
|
+
used_count: 11,
|
|
21
|
+
};
|
|
22
|
+
describe('toInterchangeRecord', () => {
|
|
23
|
+
it('maps a full decision row into the versioned envelope', () => {
|
|
24
|
+
const rec = toInterchangeRecord(full);
|
|
25
|
+
assert.equal(rec.format, 'robrain-memory/v1');
|
|
26
|
+
assert.equal(rec.format, INTERCHANGE_FORMAT);
|
|
27
|
+
assert.equal(rec.id, 'dec-1');
|
|
28
|
+
assert.equal(rec.decision, full.decision);
|
|
29
|
+
assert.equal(rec.rationale, full.rationale);
|
|
30
|
+
assert.deepEqual(rec.rejected, [{ option: 'npm', reason: 'lockfile drift' }]);
|
|
31
|
+
assert.deepEqual(rec.files_affected, ['package.json', 'pnpm-workspace.yaml']);
|
|
32
|
+
assert.equal(rec.scope, 'team');
|
|
33
|
+
assert.deepEqual(rec.lifecycle, {
|
|
34
|
+
created_at: '2026-05-01T10:00:00Z',
|
|
35
|
+
invalidated_at: null,
|
|
36
|
+
reviewed_at: '2026-05-02T09:00:00Z',
|
|
37
|
+
supersedes_id: 'dec-0',
|
|
38
|
+
});
|
|
39
|
+
assert.deepEqual(rec.provenance, {
|
|
40
|
+
session_id: 'sess-abc',
|
|
41
|
+
source_turn_sequence: 4,
|
|
42
|
+
source_excerpt: 'please only ever use pnpm here',
|
|
43
|
+
});
|
|
44
|
+
assert.deepEqual(rec.quality, {
|
|
45
|
+
historical_relevance: 0.62,
|
|
46
|
+
injected_count: 14,
|
|
47
|
+
used_count: 11,
|
|
48
|
+
});
|
|
49
|
+
});
|
|
50
|
+
it('normalizes missing optional fields to nulls / empty defaults', () => {
|
|
51
|
+
const rec = toInterchangeRecord({
|
|
52
|
+
id: 'dec-2',
|
|
53
|
+
decision: 'Bare minimum row',
|
|
54
|
+
scope: 'local',
|
|
55
|
+
created_at: '2026-05-01T10:00:00Z',
|
|
56
|
+
session_id: 'sess-abc',
|
|
57
|
+
});
|
|
58
|
+
assert.equal(rec.rationale, null);
|
|
59
|
+
assert.deepEqual(rec.rejected, []);
|
|
60
|
+
assert.deepEqual(rec.files_affected, []);
|
|
61
|
+
assert.equal(rec.lifecycle.invalidated_at, null);
|
|
62
|
+
assert.equal(rec.lifecycle.reviewed_at, null);
|
|
63
|
+
assert.equal(rec.lifecycle.supersedes_id, null);
|
|
64
|
+
assert.equal(rec.provenance.source_turn_sequence, null);
|
|
65
|
+
assert.equal(rec.provenance.source_excerpt, null);
|
|
66
|
+
assert.equal(rec.quality.historical_relevance, null);
|
|
67
|
+
assert.equal(rec.quality.injected_count, 0);
|
|
68
|
+
assert.equal(rec.quality.used_count, 0);
|
|
69
|
+
});
|
|
70
|
+
it('strips extra fields from rejected entries', () => {
|
|
71
|
+
const rec = toInterchangeRecord({
|
|
72
|
+
...full,
|
|
73
|
+
rejected: [{ option: 'npm', reason: 'drift', extra: 'noise' }],
|
|
74
|
+
});
|
|
75
|
+
assert.deepEqual(rec.rejected, [{ option: 'npm', reason: 'drift' }]);
|
|
76
|
+
});
|
|
77
|
+
});
|
|
78
|
+
describe('toInterchangeJsonl', () => {
|
|
79
|
+
it('writes one JSON object per line with a trailing newline', () => {
|
|
80
|
+
const jsonl = toInterchangeJsonl([full, { ...full, id: 'dec-2' }]);
|
|
81
|
+
assert.ok(jsonl.endsWith('\n'));
|
|
82
|
+
const lines = jsonl.trimEnd().split('\n');
|
|
83
|
+
assert.equal(lines.length, 2);
|
|
84
|
+
for (const line of lines) {
|
|
85
|
+
const parsed = JSON.parse(line);
|
|
86
|
+
assert.equal(parsed.format, 'robrain-memory/v1');
|
|
87
|
+
}
|
|
88
|
+
assert.equal(JSON.parse(lines[1]).id, 'dec-2');
|
|
89
|
+
});
|
|
90
|
+
it('returns an empty string for an empty corpus', () => {
|
|
91
|
+
assert.equal(toInterchangeJsonl([]), '');
|
|
92
|
+
});
|
|
93
|
+
});
|
|
94
|
+
//# sourceMappingURL=export-interchange.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"export-interchange.test.js","sourceRoot":"","sources":["../../src/commands/export-interchange.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"inject.d.ts","sourceRoot":"","sources":["../../src/commands/inject.ts"],"names":[],"mappings":"AAmBA,UAAU,aAAa;IACrB,KAAK,CAAC,EAAG,MAAM,CAAA;IACf,KAAK,CAAC,EAAG,MAAM,CAAA;IACf,IAAI,CAAC,EAAI,OAAO,CAAA;IAChB,KAAK,CAAC,EAAG,MAAM,CAAA;IACf,GAAG,CAAC,EAAK,OAAO,CAAA;CACjB;AAED,wBAAsB,aAAa,CAAC,IAAI,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC,
|
|
1
|
+
{"version":3,"file":"inject.d.ts","sourceRoot":"","sources":["../../src/commands/inject.ts"],"names":[],"mappings":"AAmBA,UAAU,aAAa;IACrB,KAAK,CAAC,EAAG,MAAM,CAAA;IACf,KAAK,CAAC,EAAG,MAAM,CAAA;IACf,IAAI,CAAC,EAAI,OAAO,CAAA;IAChB,KAAK,CAAC,EAAG,MAAM,CAAA;IACf,GAAG,CAAC,EAAK,OAAO,CAAA;CACjB;AAED,wBAAsB,aAAa,CAAC,IAAI,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC,CAqLtE"}
|
package/dist/commands/inject.js
CHANGED
|
@@ -97,8 +97,19 @@ export async function injectCommand(opts) {
|
|
|
97
97
|
const similarityStr = typeof d.similarity === 'number'
|
|
98
98
|
? ` [sim ${(d.similarity * 100).toFixed(0)}%]`
|
|
99
99
|
: '';
|
|
100
|
-
|
|
100
|
+
const line = `• Chose ${d.decision}${vetoStr}${rationale} [${date}, ${conf} confidence${supersedes}]${similarityStr}`;
|
|
101
|
+
// Provenance — which session/turn this decision was captured from
|
|
102
|
+
if (d.session_id && (d.source_turn_sequence != null || d.source_excerpt)) {
|
|
103
|
+
const turn = d.source_turn_sequence != null ? ` · turn ${d.source_turn_sequence}` : '';
|
|
104
|
+
const excerpt = d.source_excerpt ? ` · "${truncateExcerpt(d.source_excerpt)}"` : '';
|
|
105
|
+
return `${line}\n ↳ from session ${d.session_id.slice(0, 8)}${turn} · ${date}${excerpt}`;
|
|
106
|
+
}
|
|
107
|
+
return line;
|
|
101
108
|
};
|
|
109
|
+
function truncateExcerpt(text, max = 80) {
|
|
110
|
+
const oneLine = text.replace(/\s+/g, ' ').trim();
|
|
111
|
+
return oneLine.length <= max ? oneLine : `${oneLine.slice(0, max - 1)}…`;
|
|
112
|
+
}
|
|
102
113
|
const hasSimilarityScores = query && decisions.some(d => typeof d.similarity === 'number');
|
|
103
114
|
if (hasSimilarityScores) {
|
|
104
115
|
const highConfidence = decisions.filter(d => (d.similarity ?? 0) >= 0.5);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"inject.js","sourceRoot":"","sources":["../../src/commands/inject.ts"],"names":[],"mappings":"AAAA,sCAAsC;AACtC,gEAAgE;AAChE,+DAA+D;AAC/D,EAAE;AACF,2DAA2D;AAC3D,2DAA2D;AAC3D,EAAE;AACF,+DAA+D;AAC/D,gEAAgE;AAChE,uDAAuD;AACvD,gEAAgE;AAEhE,OAAO,KAAK,MAAQ,OAAO,CAAA;AAC3B,OAAO,GAAG,MAAU,KAAK,CAAA;AACzB,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAA;AAC7C,OAAO,EAAE,iBAAiB,EAAE,MAAgB,mBAAmB,CAAA;AAC/D,OAAO,EAAE,GAAG,EAAE,MAA8B,SAAS,CAAA;AACrD,OAAO,EAAE,QAAQ,EAAE,MAAyB,eAAe,CAAA;AAU3D,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,IAAmB;IACrD,OAAO,CAAC,GAAG,EAAE,CAAA;IAEb,MAAM,MAAM,GAAI,UAAU,EAAE,CAAA;IAC5B,MAAM,IAAI,GAAM,iBAAiB,CAAC,GAAG,EAAE,CAAC,CAAA;IAExC,6DAA6D;IAC7D,MAAM,OAAO,GAAG,MAAM,CAAC,aAAa,IAAI,uBAAuB,CAAA;IAC/D,MAAM,OAAO,GAAG,MAAM,CAAC,aAAa,IAAI,EAAE,CAAA;IAE1C,8DAA8D;IAC9D,6CAA6C;IAC7C,MAAM,KAAK,GAAQ,IAAI,CAAC,KAAK,CAAA;IAC7B,MAAM,KAAK,GAAQ,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAA;IAC7E,MAAM,SAAS,GAAI,IAAI,CAAC,KAAK,IAAI,CAAC,CAAA;IAClC,kFAAkF;IAClF,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC,CAAA;IAEzE,MAAM,OAAO,GAAG,GAAG,CAAC,EAAE,IAAI,EAAE,gCAAgC,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC,CAAC,KAAK,EAAE,CAAA;IAEvF,IAAI,SAAS,
|
|
1
|
+
{"version":3,"file":"inject.js","sourceRoot":"","sources":["../../src/commands/inject.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"install.d.ts","sourceRoot":"","sources":["../../src/commands/install.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"install.d.ts","sourceRoot":"","sources":["../../src/commands/install.ts"],"names":[],"mappings":"AAyCA,UAAU,cAAc;IACtB,KAAK,CAAC,EAAU,MAAM,CAAA;IACtB,MAAM,CAAC,EAAS,MAAM,CAAA;IACtB,UAAU,CAAC,EAAK,OAAO,CAAA;IACvB,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB,kGAAkG;IAClG,QAAQ,CAAC,EAAO,MAAM,CAAA;IACtB,kEAAkE;IAClE,eAAe,CAAC,EAAE,OAAO,CAAA;CAC1B;AAyDD,wBAAsB,cAAc,CAAC,IAAI,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC,CA4KxE"}
|