robrain 2.4.7 → 2.4.8
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +3 -0
- package/dist/commands/check.d.ts.map +1 -1
- package/dist/commands/check.js +6 -8
- package/dist/commands/check.js.map +1 -1
- package/dist/commands/explain.d.ts.map +1 -1
- package/dist/commands/explain.js +5 -8
- package/dist/commands/explain.js.map +1 -1
- package/dist/commands/export-interchange.d.ts.map +1 -1
- package/dist/commands/export-interchange.js +4 -9
- package/dist/commands/export-interchange.js.map +1 -1
- package/dist/commands/export-memory.d.ts.map +1 -1
- package/dist/commands/export-memory.js +4 -9
- package/dist/commands/export-memory.js.map +1 -1
- package/dist/commands/inject.d.ts.map +1 -1
- package/dist/commands/inject.js +5 -9
- package/dist/commands/inject.js.map +1 -1
- package/dist/commands/install.d.ts +7 -1
- package/dist/commands/install.d.ts.map +1 -1
- package/dist/commands/install.js +40 -3
- package/dist/commands/install.js.map +1 -1
- package/dist/commands/install.test.js +89 -0
- package/dist/commands/install.test.js.map +1 -1
- package/dist/commands/outcomes.d.ts.map +1 -1
- package/dist/commands/outcomes.js +5 -13
- package/dist/commands/outcomes.js.map +1 -1
- package/dist/commands/review.d.ts.map +1 -1
- package/dist/commands/review.js +4 -5
- package/dist/commands/review.js.map +1 -1
- package/dist/commands/status.d.ts +20 -0
- package/dist/commands/status.d.ts.map +1 -1
- package/dist/commands/status.js +87 -29
- package/dist/commands/status.js.map +1 -1
- package/dist/commands/status.test.d.ts +2 -0
- package/dist/commands/status.test.d.ts.map +1 -0
- package/dist/commands/status.test.js +201 -0
- package/dist/commands/status.test.js.map +1 -0
- package/dist/index.js +1 -1
- package/dist/lib/auth.d.ts +30 -2
- package/dist/lib/auth.d.ts.map +1 -1
- package/dist/lib/auth.js +45 -5
- package/dist/lib/auth.js.map +1 -1
- package/dist/lib/auth.test.d.ts +2 -0
- package/dist/lib/auth.test.d.ts.map +1 -0
- package/dist/lib/auth.test.js +46 -0
- package/dist/lib/auth.test.js.map +1 -0
- package/dist/lib/perception-errors.d.ts +33 -0
- package/dist/lib/perception-errors.d.ts.map +1 -0
- package/dist/lib/perception-errors.js +104 -0
- package/dist/lib/perception-errors.js.map +1 -0
- package/dist/lib/perception-errors.test.d.ts +2 -0
- package/dist/lib/perception-errors.test.d.ts.map +1 -0
- package/dist/lib/perception-errors.test.js +64 -0
- package/dist/lib/perception-errors.test.js.map +1 -0
- package/dist/lib/project.d.ts +9 -0
- package/dist/lib/project.d.ts.map +1 -1
- package/dist/lib/project.js +17 -9
- package/dist/lib/project.js.map +1 -1
- package/package.json +2 -2
- package/vendor/sensing-mcp/dist/index.js +1 -1
- package/vendor/sensing-mcp/package.json +1 -1
- package/vendor/synthesis/package.json +1 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"auth.test.js","sourceRoot":"","sources":["../../src/lib/auth.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
export interface FailureExplanation {
|
|
2
|
+
headline: string;
|
|
3
|
+
hints: string[];
|
|
4
|
+
}
|
|
5
|
+
export interface FailureContext {
|
|
6
|
+
/** Cloud install (managed store) vs self-hosted (local Perception). */
|
|
7
|
+
cloud: boolean;
|
|
8
|
+
perceptionUrl: string;
|
|
9
|
+
}
|
|
10
|
+
/** Spinner-like sink so callers can pass ora, or a console shim. */
|
|
11
|
+
export interface FailSink {
|
|
12
|
+
fail(text: string): unknown;
|
|
13
|
+
}
|
|
14
|
+
/** Auth-failure hints, or [] when the status is not an auth failure. */
|
|
15
|
+
export declare function perceptionAuthHints(status: number, ctx: FailureContext): string[];
|
|
16
|
+
/**
|
|
17
|
+
* @param action what the caller was doing, for the unclassified fallback
|
|
18
|
+
* (e.g. "fetch decisions", "scan for prior rejections").
|
|
19
|
+
*/
|
|
20
|
+
export declare function explainPerceptionFailure(status: number, ctx: FailureContext, action?: string): FailureExplanation;
|
|
21
|
+
/** The store was never reached — DNS, refused connection, timeout. */
|
|
22
|
+
export declare function explainPerceptionUnreachable(ctx: FailureContext): FailureExplanation;
|
|
23
|
+
/**
|
|
24
|
+
* Print a status failure and exit.
|
|
25
|
+
* @param exitCode callers with their own contract override it — `robrain check`
|
|
26
|
+
* reserves 1 for "a rejection matched" and uses 2 for "could not scan".
|
|
27
|
+
*/
|
|
28
|
+
export declare function failPerception(sink: FailSink, status: number, ctx: FailureContext, action?: string, exitCode?: number): never;
|
|
29
|
+
/** Print an unreachable-store failure and exit. */
|
|
30
|
+
export declare function failPerceptionUnreachable(sink: FailSink, ctx: FailureContext, exitCode?: number): never;
|
|
31
|
+
/** Console-based sink for commands that do not use a spinner. */
|
|
32
|
+
export declare function consoleFailSink(): FailSink;
|
|
33
|
+
//# sourceMappingURL=perception-errors.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"perception-errors.d.ts","sourceRoot":"","sources":["../../src/lib/perception-errors.ts"],"names":[],"mappings":"AAiBA,MAAM,WAAW,kBAAkB;IACjC,QAAQ,EAAE,MAAM,CAAA;IAChB,KAAK,EAAK,MAAM,EAAE,CAAA;CACnB;AAED,MAAM,WAAW,cAAc;IAC7B,uEAAuE;IACvE,KAAK,EAAU,OAAO,CAAA;IACtB,aAAa,EAAE,MAAM,CAAA;CACtB;AAED,oEAAoE;AACpE,MAAM,WAAW,QAAQ;IACvB,IAAI,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAA;CAC5B;AASD,wEAAwE;AACxE,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,cAAc,GAAG,MAAM,EAAE,CAYjF;AAED;;;GAGG;AACH,wBAAgB,wBAAwB,CACtC,MAAM,EAAE,MAAM,EACd,GAAG,EAAE,cAAc,EACnB,MAAM,SAAoB,GACzB,kBAAkB,CA6BpB;AAED,sEAAsE;AACtE,wBAAgB,4BAA4B,CAAC,GAAG,EAAE,cAAc,GAAG,kBAAkB,CAUpF;AAQD;;;;GAIG;AACH,wBAAgB,cAAc,CAC5B,IAAI,EAAE,QAAQ,EACd,MAAM,EAAE,MAAM,EACd,GAAG,EAAE,cAAc,EACnB,MAAM,CAAC,EAAE,MAAM,EACf,QAAQ,SAAI,GACX,KAAK,CAGP;AAED,mDAAmD;AACnD,wBAAgB,yBAAyB,CACvC,IAAI,EAAE,QAAQ,EACd,GAAG,EAAE,cAAc,EACnB,QAAQ,SAAI,GACX,KAAK,CAGP;AAED,iEAAiE;AACjE,wBAAgB,eAAe,IAAI,QAAQ,CAE1C"}
|
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
// src/lib/perception-errors.ts
|
|
2
|
+
// ─────────────────────────────────────────────────────────────
|
|
3
|
+
// Shared explanations for a failed Perception call.
|
|
4
|
+
//
|
|
5
|
+
// Every consumer used to print
|
|
6
|
+
// "Could not fetch decisions (401). Is Perception running? … pnpm docker:up"
|
|
7
|
+
// which is wrong twice for a cloud user: the store IS running, and there is no
|
|
8
|
+
// local Docker stack to start. 401 and 404 each have one likely cause worth
|
|
9
|
+
// naming — reported by a user who hit both while installing on two machines.
|
|
10
|
+
//
|
|
11
|
+
// Covers both failure shapes: an HTTP status we can read (explainPerceptionFailure)
|
|
12
|
+
// and never reaching the store at all (explainPerceptionUnreachable) — the second
|
|
13
|
+
// is the path users hit most, and it carried the same wrong advice.
|
|
14
|
+
// ─────────────────────────────────────────────────────────────
|
|
15
|
+
import chalk from 'chalk';
|
|
16
|
+
/** Point a self-hosted user at their own stack; never a cloud user. */
|
|
17
|
+
function startStackHints(ctx) {
|
|
18
|
+
return ctx.cloud
|
|
19
|
+
? [`Store: ${ctx.perceptionUrl}`]
|
|
20
|
+
: [`Expected at: ${ctx.perceptionUrl}`, 'Start it with `npx robrain up` (or `pnpm docker:up` from a clone).'];
|
|
21
|
+
}
|
|
22
|
+
/** Auth-failure hints, or [] when the status is not an auth failure. */
|
|
23
|
+
export function perceptionAuthHints(status, ctx) {
|
|
24
|
+
if (status !== 401 && status !== 403)
|
|
25
|
+
return [];
|
|
26
|
+
return ctx.cloud
|
|
27
|
+
? [
|
|
28
|
+
// Observed: installing on a second machine left the first one 401ing.
|
|
29
|
+
'Installing RoBrain on another machine can replace this machine\'s key.',
|
|
30
|
+
'Re-run `npx robrain install` here to get a working one.',
|
|
31
|
+
]
|
|
32
|
+
: [
|
|
33
|
+
'The key in ~/.robrain/config.json must match Perception\'s PERCEPTION_API_KEY.',
|
|
34
|
+
'Check your .env, then re-run `npx robrain install --self-hosted`.',
|
|
35
|
+
];
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* @param action what the caller was doing, for the unclassified fallback
|
|
39
|
+
* (e.g. "fetch decisions", "scan for prior rejections").
|
|
40
|
+
*/
|
|
41
|
+
export function explainPerceptionFailure(status, ctx, action = 'fetch decisions') {
|
|
42
|
+
const authHints = perceptionAuthHints(status, ctx);
|
|
43
|
+
if (authHints.length > 0) {
|
|
44
|
+
return { headline: `Memory store rejected this API key (${status})`, hints: authHints };
|
|
45
|
+
}
|
|
46
|
+
if (status === 404) {
|
|
47
|
+
return {
|
|
48
|
+
headline: 'This project is not in your memory space (404)',
|
|
49
|
+
hints: [
|
|
50
|
+
'Never initialized here? Run `npx robrain init-project` from the project root.',
|
|
51
|
+
ctx.cloud
|
|
52
|
+
// A teammate's project is invisible — not empty — until you are in their team.
|
|
53
|
+
? 'Created by a teammate? Ask to be added to their team; until then it is not visible to you.'
|
|
54
|
+
: 'Expected it to exist? Check which id this directory maps to with `npx robrain status`.',
|
|
55
|
+
],
|
|
56
|
+
};
|
|
57
|
+
}
|
|
58
|
+
if (status >= 500) {
|
|
59
|
+
return {
|
|
60
|
+
headline: `Memory store errored (${status})`,
|
|
61
|
+
hints: ctx.cloud
|
|
62
|
+
? ['Server-side — retry shortly, then contact support@roryplans.ai if it persists.']
|
|
63
|
+
: ['Check Perception\'s logs: docker logs robrain-perception'],
|
|
64
|
+
};
|
|
65
|
+
}
|
|
66
|
+
return { headline: `Could not ${action} (${status})`, hints: startStackHints(ctx) };
|
|
67
|
+
}
|
|
68
|
+
/** The store was never reached — DNS, refused connection, timeout. */
|
|
69
|
+
export function explainPerceptionUnreachable(ctx) {
|
|
70
|
+
return {
|
|
71
|
+
headline: 'Could not reach the memory store',
|
|
72
|
+
hints: ctx.cloud
|
|
73
|
+
? [
|
|
74
|
+
`Store: ${ctx.perceptionUrl}`,
|
|
75
|
+
'Check your network connection; if it persists, contact support@roryplans.ai.',
|
|
76
|
+
]
|
|
77
|
+
: startStackHints(ctx),
|
|
78
|
+
};
|
|
79
|
+
}
|
|
80
|
+
function emit(sink, { headline, hints }) {
|
|
81
|
+
sink.fail(headline);
|
|
82
|
+
for (const hint of hints)
|
|
83
|
+
console.log(chalk.dim(` ${hint}`));
|
|
84
|
+
console.log();
|
|
85
|
+
}
|
|
86
|
+
/**
|
|
87
|
+
* Print a status failure and exit.
|
|
88
|
+
* @param exitCode callers with their own contract override it — `robrain check`
|
|
89
|
+
* reserves 1 for "a rejection matched" and uses 2 for "could not scan".
|
|
90
|
+
*/
|
|
91
|
+
export function failPerception(sink, status, ctx, action, exitCode = 1) {
|
|
92
|
+
emit(sink, explainPerceptionFailure(status, ctx, action));
|
|
93
|
+
process.exit(exitCode);
|
|
94
|
+
}
|
|
95
|
+
/** Print an unreachable-store failure and exit. */
|
|
96
|
+
export function failPerceptionUnreachable(sink, ctx, exitCode = 1) {
|
|
97
|
+
emit(sink, explainPerceptionUnreachable(ctx));
|
|
98
|
+
process.exit(exitCode);
|
|
99
|
+
}
|
|
100
|
+
/** Console-based sink for commands that do not use a spinner. */
|
|
101
|
+
export function consoleFailSink() {
|
|
102
|
+
return { fail: (text) => console.error(chalk.red(` ✗ ${text}`)) };
|
|
103
|
+
}
|
|
104
|
+
//# sourceMappingURL=perception-errors.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"perception-errors.js","sourceRoot":"","sources":["../../src/lib/perception-errors.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"perception-errors.test.d.ts","sourceRoot":"","sources":["../../src/lib/perception-errors.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
import { describe, it } from 'node:test';
|
|
2
|
+
import assert from 'node:assert/strict';
|
|
3
|
+
import { explainPerceptionFailure, explainPerceptionUnreachable, } from './perception-errors.js';
|
|
4
|
+
const CLOUD = { cloud: true, perceptionUrl: 'https://api.roryplans.ai' };
|
|
5
|
+
const LOCAL = { cloud: false, perceptionUrl: 'http://127.0.0.1:3001' };
|
|
6
|
+
describe('explainPerceptionFailure', () => {
|
|
7
|
+
it('names the second-machine cause for a rejected key on cloud', () => {
|
|
8
|
+
// Reported: install on VM2 left VM1 401ing, and vice versa.
|
|
9
|
+
const { headline, hints } = explainPerceptionFailure(401, CLOUD);
|
|
10
|
+
assert.match(headline, /rejected this API key \(401\)/);
|
|
11
|
+
assert.match(hints.join(' '), /another machine/);
|
|
12
|
+
assert.match(hints.join(' '), /npx robrain install/);
|
|
13
|
+
});
|
|
14
|
+
it('points a self-hosted 401 at the key mismatch instead', () => {
|
|
15
|
+
const { hints } = explainPerceptionFailure(401, LOCAL);
|
|
16
|
+
assert.match(hints.join(' '), /PERCEPTION_API_KEY/);
|
|
17
|
+
assert.doesNotMatch(hints.join(' '), /another machine/);
|
|
18
|
+
});
|
|
19
|
+
it('treats 403 like 401', () => {
|
|
20
|
+
assert.match(explainPerceptionFailure(403, CLOUD).headline, /rejected this API key/);
|
|
21
|
+
});
|
|
22
|
+
it('explains a 404 as scope, not emptiness — including the team case', () => {
|
|
23
|
+
// Reported: a new account got 404 until it was added to the owning team.
|
|
24
|
+
const { headline, hints } = explainPerceptionFailure(404, CLOUD);
|
|
25
|
+
assert.match(headline, /not in your memory space/);
|
|
26
|
+
assert.match(hints.join(' '), /init-project/);
|
|
27
|
+
assert.match(hints.join(' '), /team/);
|
|
28
|
+
});
|
|
29
|
+
it('does not blame the team on a self-hosted 404', () => {
|
|
30
|
+
const { hints } = explainPerceptionFailure(404, LOCAL);
|
|
31
|
+
assert.match(hints.join(' '), /init-project/);
|
|
32
|
+
assert.doesNotMatch(hints.join(' '), /team/);
|
|
33
|
+
});
|
|
34
|
+
it('never tells a cloud user to start a local stack', () => {
|
|
35
|
+
// The old message said "Is Perception running? … pnpm docker:up" for every
|
|
36
|
+
// status — wrong twice over when the store is managed.
|
|
37
|
+
for (const status of [401, 403, 404, 500, 502, 418]) {
|
|
38
|
+
const text = JSON.stringify(explainPerceptionFailure(status, CLOUD));
|
|
39
|
+
assert.doesNotMatch(text, /docker:up|robrain up/, `status ${status} suggested starting a local stack`);
|
|
40
|
+
}
|
|
41
|
+
});
|
|
42
|
+
it('does point a self-hosted user at their stack for an unclassified failure', () => {
|
|
43
|
+
const { hints } = explainPerceptionFailure(418, LOCAL);
|
|
44
|
+
assert.match(hints.join(' '), /robrain up|docker:up/);
|
|
45
|
+
});
|
|
46
|
+
it('routes 5xx to the right owner per mode', () => {
|
|
47
|
+
assert.match(explainPerceptionFailure(503, CLOUD).hints.join(' '), /support@roryplans\.ai/);
|
|
48
|
+
assert.match(explainPerceptionFailure(503, LOCAL).hints.join(' '), /docker logs/);
|
|
49
|
+
});
|
|
50
|
+
});
|
|
51
|
+
describe('explainPerceptionUnreachable', () => {
|
|
52
|
+
it('never tells a cloud user to start a local stack on network failure', () => {
|
|
53
|
+
// The path Bug 1/2 hit: catch blocks used to print pnpm docker:up even for
|
|
54
|
+
// managed installs. Unreachable must stay cloud-aware too.
|
|
55
|
+
const text = JSON.stringify(explainPerceptionUnreachable(CLOUD));
|
|
56
|
+
assert.doesNotMatch(text, /docker:up|robrain up/);
|
|
57
|
+
assert.match(text, /network|support@roryplans\.ai/i);
|
|
58
|
+
});
|
|
59
|
+
it('points a self-hosted user at their stack when the store is unreachable', () => {
|
|
60
|
+
const { hints } = explainPerceptionUnreachable(LOCAL);
|
|
61
|
+
assert.match(hints.join(' '), /robrain up|docker:up/);
|
|
62
|
+
});
|
|
63
|
+
});
|
|
64
|
+
//# sourceMappingURL=perception-errors.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"perception-errors.test.js","sourceRoot":"","sources":["../../src/lib/perception-errors.test.ts"],"names":[],"mappings":"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"}
|
package/dist/lib/project.d.ts
CHANGED
|
@@ -8,6 +8,15 @@ export interface ProjectInfo {
|
|
|
8
8
|
}
|
|
9
9
|
/** Derive a stable project ID from the working directory path */
|
|
10
10
|
export declare function deriveProjectId(cwd: string): string;
|
|
11
|
+
/**
|
|
12
|
+
* The editor file pinning this directory's project_id, if any — with the file
|
|
13
|
+
* it came from, so callers can name it instead of guessing (init-project
|
|
14
|
+
* writes all three; the Cursor rule is easy to forget it exists).
|
|
15
|
+
*/
|
|
16
|
+
export declare function findPinnedProjectId(dir: string): {
|
|
17
|
+
id: string;
|
|
18
|
+
source: string;
|
|
19
|
+
} | null;
|
|
11
20
|
/** Collect all available context from the project root */
|
|
12
21
|
export declare function gatherProjectInfo(cwd: string): ProjectInfo;
|
|
13
22
|
/** Format project info as context string for Haiku warm-start call */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"project.d.ts","sourceRoot":"","sources":["../../src/lib/project.ts"],"names":[],"mappings":"AAYA,MAAM,WAAW,WAAW;IAC1B,EAAE,EAAW,MAAM,CAAA;IACnB,IAAI,EAAS,MAAM,CAAA;IACnB,WAAW,EAAE,MAAM,CAAA;IACnB,KAAK,EAAQ,MAAM,EAAE,CAAA;IACrB,MAAM,EAAO,MAAM,CAAA;IACnB,OAAO,EAAM,MAAM,CAAA;CACpB;AAED,iEAAiE;AACjE,wBAAgB,eAAe,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAEnD;
|
|
1
|
+
{"version":3,"file":"project.d.ts","sourceRoot":"","sources":["../../src/lib/project.ts"],"names":[],"mappings":"AAYA,MAAM,WAAW,WAAW;IAC1B,EAAE,EAAW,MAAM,CAAA;IACnB,IAAI,EAAS,MAAM,CAAA;IACnB,WAAW,EAAE,MAAM,CAAA;IACnB,KAAK,EAAQ,MAAM,EAAE,CAAA;IACrB,MAAM,EAAO,MAAM,CAAA;IACnB,OAAO,EAAM,MAAM,CAAA;CACpB;AAED,iEAAiE;AACjE,wBAAgB,eAAe,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAEnD;AAED;;;;GAIG;AACH,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,MAAM,GAAG;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAYtF;AAOD,0DAA0D;AAC1D,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,MAAM,GAAG,WAAW,CAgE1D;AAED,sEAAsE;AACtE,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,WAAW,GAAG,MAAM,CAS1D;AAKD,sEAAsE;AACtE,wBAAsB,iBAAiB,CACrC,aAAa,EAAE,MAAM,EACrB,aAAa,EAAE,MAAM,EACrB,IAAI,EAAE,WAAW;AACjB,4FAA4F;AAC5F,gBAAgB,EAAE,MAAM,GACvB,OAAO,CAAC;IAAE,EAAE,EAAE,OAAO,CAAC;IAAC,gBAAgB,EAAE,MAAM,CAAA;CAAE,CAAC,CAgHpD"}
|
package/dist/lib/project.js
CHANGED
|
@@ -12,22 +12,30 @@ import { createHash } from 'crypto';
|
|
|
12
12
|
export function deriveProjectId(cwd) {
|
|
13
13
|
return createHash('sha256').update(cwd).digest('hex').slice(0, 12);
|
|
14
14
|
}
|
|
15
|
-
/**
|
|
16
|
-
|
|
15
|
+
/**
|
|
16
|
+
* The editor file pinning this directory's project_id, if any — with the file
|
|
17
|
+
* it came from, so callers can name it instead of guessing (init-project
|
|
18
|
+
* writes all three; the Cursor rule is easy to forget it exists).
|
|
19
|
+
*/
|
|
20
|
+
export function findPinnedProjectId(dir) {
|
|
17
21
|
const candidates = [
|
|
18
|
-
join(dir, 'CLAUDE.md'),
|
|
19
|
-
join(dir, 'AGENTS.md'),
|
|
20
|
-
join(dir, '.cursor', 'rules', 'robrain.mdc'),
|
|
22
|
+
['CLAUDE.md', join(dir, 'CLAUDE.md')],
|
|
23
|
+
['AGENTS.md', join(dir, 'AGENTS.md')],
|
|
24
|
+
['.cursor/rules/robrain.mdc', join(dir, '.cursor', 'rules', 'robrain.mdc')],
|
|
21
25
|
];
|
|
22
|
-
for (const
|
|
23
|
-
if (!existsSync(
|
|
26
|
+
for (const [source, path] of candidates) {
|
|
27
|
+
if (!existsSync(path))
|
|
24
28
|
continue;
|
|
25
|
-
const match = readFileSync(
|
|
29
|
+
const match = readFileSync(path, 'utf8').match(/project_id="([^"]+)"/);
|
|
26
30
|
if (match?.[1])
|
|
27
|
-
return match[1].trim();
|
|
31
|
+
return { id: match[1].trim(), source };
|
|
28
32
|
}
|
|
29
33
|
return null;
|
|
30
34
|
}
|
|
35
|
+
/** Read the project_id written by init-project from CLAUDE.md / AGENTS.md / Cursor rule */
|
|
36
|
+
function readProjectIdFromEditorFiles(dir) {
|
|
37
|
+
return findPinnedProjectId(dir)?.id ?? null;
|
|
38
|
+
}
|
|
31
39
|
/** Collect all available context from the project root */
|
|
32
40
|
export function gatherProjectInfo(cwd) {
|
|
33
41
|
const id = readProjectIdFromEditorFiles(cwd) ?? deriveProjectId(cwd);
|
package/dist/lib/project.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"project.js","sourceRoot":"","sources":["../../src/lib/project.ts"],"names":[],"mappings":"AAAA,qBAAqB;AACrB,gEAAgE;AAChE,gEAAgE;AAChE,iEAAiE;AACjE,8EAA8E;AAC9E,gEAAgE;AAEhE,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,IAAI,CAAA;AAC7C,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,MAAM,CAAA;AACrC,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAA;AACxC,OAAO,EAAE,UAAU,EAAE,MAAM,QAAQ,CAAA;AAWnC,iEAAiE;AACjE,MAAM,UAAU,eAAe,CAAC,GAAW;IACzC,OAAO,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAA;AACpE,CAAC;AAED
|
|
1
|
+
{"version":3,"file":"project.js","sourceRoot":"","sources":["../../src/lib/project.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "robrain",
|
|
3
|
-
"version": "2.4.
|
|
3
|
+
"version": "2.4.8",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"description": "RoBrain CLI for installation, setup, and memory workflows",
|
|
6
6
|
"author": "Rory Plans, Inc.",
|
|
@@ -57,7 +57,7 @@
|
|
|
57
57
|
"build": "tsc",
|
|
58
58
|
"dev": "tsc --watch",
|
|
59
59
|
"typecheck": "tsc --noEmit",
|
|
60
|
-
"test": "pnpm build && node --test dist/lib/editor.codex.test.js dist/lib/editor.stale-block.test.js dist/lib/release-guard.test.js dist/lib/mcp-bundle.test.js dist/lib/control-bundle.test.js dist/lib/claude-plugin.test.js dist/lib/hermes-plugin.test.js dist/lib/codex-hooks.test.js dist/commands/outcomes.test.js dist/commands/export-interchange.test.js dist/commands/up.test.js dist/commands/mcp.test.js dist/commands/install.test.js dist/commands/synth.test.js dist/lib/synthesis-bundle.test.js",
|
|
60
|
+
"test": "pnpm build && node --test dist/lib/editor.codex.test.js dist/lib/editor.stale-block.test.js dist/lib/release-guard.test.js dist/lib/auth.test.js dist/lib/perception-errors.test.js dist/lib/mcp-bundle.test.js dist/lib/control-bundle.test.js dist/lib/claude-plugin.test.js dist/lib/hermes-plugin.test.js dist/lib/codex-hooks.test.js dist/commands/outcomes.test.js dist/commands/export-interchange.test.js dist/commands/up.test.js dist/commands/mcp.test.js dist/commands/install.test.js dist/commands/synth.test.js dist/commands/status.test.js dist/lib/synthesis-bundle.test.js",
|
|
61
61
|
"pack:verify": "node scripts/verify-publish-tarball.mjs",
|
|
62
62
|
"postinstall": "node scripts/chmod-bin.cjs"
|
|
63
63
|
}
|
|
@@ -23297,7 +23297,7 @@ function resolveSessionId(raw) {
|
|
|
23297
23297
|
function buildServer() {
|
|
23298
23298
|
const server = new McpServer({
|
|
23299
23299
|
name: "sensing-mcp",
|
|
23300
|
-
version: "2.4.
|
|
23300
|
+
version: "2.4.8"
|
|
23301
23301
|
});
|
|
23302
23302
|
server.tool(
|
|
23303
23303
|
"sensing_start_session",
|