robrain 2.4.10 → 2.5.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/capture.d.ts +96 -0
- package/dist/commands/capture.d.ts.map +1 -0
- package/dist/commands/capture.js +356 -0
- package/dist/commands/capture.js.map +1 -0
- package/dist/commands/capture.test.d.ts +2 -0
- package/dist/commands/capture.test.d.ts.map +1 -0
- package/dist/commands/capture.test.js +102 -0
- package/dist/commands/capture.test.js.map +1 -0
- package/dist/commands/check.js +2 -2
- package/dist/commands/check.js.map +1 -1
- package/dist/commands/explain.js +2 -2
- package/dist/commands/explain.js.map +1 -1
- package/dist/commands/export-memory.js +2 -2
- package/dist/commands/export-memory.js.map +1 -1
- package/dist/commands/init-project.js +4 -4
- package/dist/commands/init-project.js.map +1 -1
- package/dist/commands/inject.d.ts +10 -0
- package/dist/commands/inject.d.ts.map +1 -1
- package/dist/commands/inject.js +52 -6
- package/dist/commands/inject.js.map +1 -1
- package/dist/commands/inject.test.d.ts +2 -0
- package/dist/commands/inject.test.d.ts.map +1 -0
- package/dist/commands/inject.test.js +170 -0
- package/dist/commands/inject.test.js.map +1 -0
- package/dist/commands/install.js +5 -5
- package/dist/commands/install.js.map +1 -1
- package/dist/commands/outcomes.js +4 -4
- package/dist/commands/outcomes.js.map +1 -1
- package/dist/commands/projects.d.ts +5 -0
- package/dist/commands/projects.d.ts.map +1 -1
- package/dist/commands/projects.js +2 -2
- package/dist/commands/projects.js.map +1 -1
- package/dist/commands/review.js +7 -7
- package/dist/commands/review.js.map +1 -1
- package/dist/commands/status.d.ts.map +1 -1
- package/dist/commands/status.js +13 -3
- package/dist/commands/status.js.map +1 -1
- package/dist/index.js +41 -1
- package/dist/index.js.map +1 -1
- package/dist/lib/config.d.ts +17 -0
- package/dist/lib/config.d.ts.map +1 -1
- package/dist/lib/config.js +45 -0
- package/dist/lib/config.js.map +1 -1
- package/dist/lib/config.test.d.ts +2 -0
- package/dist/lib/config.test.d.ts.map +1 -0
- package/dist/lib/config.test.js +75 -0
- package/dist/lib/config.test.js.map +1 -0
- package/dist/lib/spinner.d.ts +27 -0
- package/dist/lib/spinner.d.ts.map +1 -0
- package/dist/lib/spinner.js +41 -0
- package/dist/lib/spinner.js.map +1 -0
- package/dist/lib/spinner.test.d.ts +2 -0
- package/dist/lib/spinner.test.d.ts.map +1 -0
- package/dist/lib/spinner.test.js +39 -0
- package/dist/lib/spinner.test.js.map +1 -0
- package/package.json +2 -2
- package/vendor/sensing-mcp/dist/index.js +347 -84
- package/vendor/sensing-mcp/package.json +1 -1
- package/vendor/synthesis/dist/index.js +274 -7
- package/vendor/synthesis/package.json +1 -1
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AACA,eAAe;AACf,gEAAgE;AAChE,4BAA4B;AAC5B,kCAAkC;AAClC,EAAE;AACF,YAAY;AACZ,qEAAqE;AACrE,4DAA4D;AAC5D,qDAAqD;AACrD,6EAA6E;AAC7E,sDAAsD;AACtD,2CAA2C;AAC3C,gEAAgE;AAEhE,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AACnC,OAAO,EAAE,UAAU,EAAE,MAAkC,mBAAmB,CAAA;AAC1E,OAAO,EAAE,cAAc,EAAE,MAAU,uBAAuB,CAAA;AAC1D,OAAO,EAAE,kBAAkB,EAAE,MAAO,4BAA4B,CAAA;AAChE,OAAO,EAAE,aAAa,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAA;AAChF,OAAO,EAAE,aAAa,EAAE,MAAY,sBAAsB,CAAA;AAC1D,OAAO,EAAE,aAAa,EAAE,MAAY,sBAAsB,CAAA;AAC1D,OAAO,EAAE,aAAa,EAAE,MAAY,sBAAsB,CAAA;AAC1D,OAAO,EAAE,YAAY,EAAE,MAAa,qBAAqB,CAAA;AACzD,OAAO,EAAE,YAAY,EAAE,MAAa,qBAAqB,CAAA;AACzD,OAAO,EAAE,mBAAmB,EAAE,MAAM,6BAA6B,CAAA;AACjE,OAAO,EAAE,wBAAwB,EAAE,MAAM,kCAAkC,CAAA;AAC3E,OAAO,EAAE,mBAAmB,EAAE,qBAAqB,EAAE,MAAM,wBAAwB,CAAA;AACnF,OAAO,EAAE,cAAc,EAAE,MAAW,uBAAuB,CAAA;AAC3D,OAAO,EAAE,mBAAmB,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAA;AAClF,OAAO,EAAE,SAAS,EAAE,WAAW,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAA;AAC7E,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAA;AAC9C,OAAO,EAAE,mBAAmB,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAA;AAE/E,MAAM,OAAO,GAAG,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/lib/config.d.ts
CHANGED
|
@@ -33,5 +33,22 @@ export declare function isAuthenticated(): boolean;
|
|
|
33
33
|
*/
|
|
34
34
|
export declare function isCloudInstall(): boolean;
|
|
35
35
|
export declare function getToken(): string | undefined;
|
|
36
|
+
export interface CredentialSplit {
|
|
37
|
+
/** What logout leaves on disk. */
|
|
38
|
+
remaining: RoMemoryConfig;
|
|
39
|
+
/** Keys that held a value and were removed. */
|
|
40
|
+
cleared: Array<keyof RoMemoryConfig>;
|
|
41
|
+
/** Keys that held a value and were kept. */
|
|
42
|
+
kept: Array<keyof RoMemoryConfig>;
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Pure half of `logout`: removes the cloud credentials from `config` and
|
|
46
|
+
* reports which keys went and which stayed. A self-hosted install is
|
|
47
|
+
* recognised by `selfHosted`, or — for installs predating that flag — by a
|
|
48
|
+
* configured Perception URL with no cloud token.
|
|
49
|
+
*/
|
|
50
|
+
export declare function splitCloudCredentials(config: RoMemoryConfig): CredentialSplit;
|
|
51
|
+
/** Removes cloud credentials from ~/.robrain/config.json, keeping self-hosted settings. */
|
|
52
|
+
export declare function clearCloudCredentials(): CredentialSplit;
|
|
36
53
|
export declare const RORY_API_BASE: string;
|
|
37
54
|
//# sourceMappingURL=config.d.ts.map
|
package/dist/lib/config.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/lib/config.ts"],"names":[],"mappings":"AAaA,MAAM,WAAW,cAAc;IAC7B,KAAK,CAAC,EAAW,MAAM,CAAA;IACvB,KAAK,CAAC,EAAW,MAAM,CAAA;IACvB,2DAA2D;IAC3D,UAAU,CAAC,EAAM,OAAO,CAAA;IACxB,2FAA2F;IAC3F,IAAI,CAAC,EAAY,OAAO,CAAA;IACxB,aAAa,CAAC,EAAG,MAAM,CAAA;IACvB,aAAa,CAAC,EAAG,MAAM,CAAA;IACvB,WAAW,CAAC,EAAK,MAAM,CAAA;IACvB,WAAW,CAAC,EAAK,MAAM,CAAA;IACvB,iBAAiB,CAAC,EAAE,MAAM,CAAA;IAC1B,YAAY,CAAC,EAAI,MAAM,CAAA;IACvB,WAAW,CAAC,EAAK,MAAM,CAAA;IACvB,OAAO,CAAC,EAAS,MAAM,CAAA;CACxB;AAED;;;;GAIG;AACH,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAWxD;AAED,wBAAgB,UAAU,IAAI,cAAc,CAS3C;AAED,wBAAgB,WAAW,CAAC,MAAM,EAAE,cAAc,GAAG,IAAI,CAKxD;AAED,wBAAgB,WAAW,CAAC,OAAO,EAAE,OAAO,CAAC,cAAc,CAAC,GAAG,IAAI,CAGlE;AAED,4EAA4E;AAC5E,wBAAgB,eAAe,IAAI,OAAO,CAWzC;AAED;;;;;GAKG;AACH,wBAAgB,cAAc,IAAI,OAAO,CAIxC;AAED,wBAAgB,QAAQ,IAAI,MAAM,GAAG,SAAS,CAE7C;AAGD,eAAO,MAAM,aAAa,QAA0D,CAAA"}
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/lib/config.ts"],"names":[],"mappings":"AAaA,MAAM,WAAW,cAAc;IAC7B,KAAK,CAAC,EAAW,MAAM,CAAA;IACvB,KAAK,CAAC,EAAW,MAAM,CAAA;IACvB,2DAA2D;IAC3D,UAAU,CAAC,EAAM,OAAO,CAAA;IACxB,2FAA2F;IAC3F,IAAI,CAAC,EAAY,OAAO,CAAA;IACxB,aAAa,CAAC,EAAG,MAAM,CAAA;IACvB,aAAa,CAAC,EAAG,MAAM,CAAA;IACvB,WAAW,CAAC,EAAK,MAAM,CAAA;IACvB,WAAW,CAAC,EAAK,MAAM,CAAA;IACvB,iBAAiB,CAAC,EAAE,MAAM,CAAA;IAC1B,YAAY,CAAC,EAAI,MAAM,CAAA;IACvB,WAAW,CAAC,EAAK,MAAM,CAAA;IACvB,OAAO,CAAC,EAAS,MAAM,CAAA;CACxB;AAED;;;;GAIG;AACH,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAWxD;AAED,wBAAgB,UAAU,IAAI,cAAc,CAS3C;AAED,wBAAgB,WAAW,CAAC,MAAM,EAAE,cAAc,GAAG,IAAI,CAKxD;AAED,wBAAgB,WAAW,CAAC,OAAO,EAAE,OAAO,CAAC,cAAc,CAAC,GAAG,IAAI,CAGlE;AAED,4EAA4E;AAC5E,wBAAgB,eAAe,IAAI,OAAO,CAWzC;AAED;;;;;GAKG;AACH,wBAAgB,cAAc,IAAI,OAAO,CAIxC;AAED,wBAAgB,QAAQ,IAAI,MAAM,GAAG,SAAS,CAE7C;AAaD,MAAM,WAAW,eAAe;IAC9B,kCAAkC;IAClC,SAAS,EAAE,cAAc,CAAA;IACzB,+CAA+C;IAC/C,OAAO,EAAI,KAAK,CAAC,MAAM,cAAc,CAAC,CAAA;IACtC,4CAA4C;IAC5C,IAAI,EAAO,KAAK,CAAC,MAAM,cAAc,CAAC,CAAA;CACvC;AAED;;;;;GAKG;AACH,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,cAAc,GAAG,eAAe,CAqB7E;AAED,2FAA2F;AAC3F,wBAAgB,qBAAqB,IAAI,eAAe,CAIvD;AAGD,eAAO,MAAM,aAAa,QAA0D,CAAA"}
|
package/dist/lib/config.js
CHANGED
|
@@ -77,6 +77,51 @@ export function isCloudInstall() {
|
|
|
77
77
|
export function getToken() {
|
|
78
78
|
return readConfig().token;
|
|
79
79
|
}
|
|
80
|
+
/** Config keys that only a Rory Plans cloud login writes. */
|
|
81
|
+
const CLOUD_ONLY_KEYS = ['token', 'email', 'thin', 'planningUrl', 'planningKey'];
|
|
82
|
+
/**
|
|
83
|
+
* Keys a cloud install provisions for the Rory-hosted Perception. On a
|
|
84
|
+
* self-hosted install the same keys point at the local stack and must
|
|
85
|
+
* survive a logout, otherwise `status` / `init-project` stop working until
|
|
86
|
+
* the user re-runs `install --self-hosted`.
|
|
87
|
+
*/
|
|
88
|
+
const CLOUD_PERCEPTION_KEYS = ['perceptionUrl', 'perceptionKey'];
|
|
89
|
+
/**
|
|
90
|
+
* Pure half of `logout`: removes the cloud credentials from `config` and
|
|
91
|
+
* reports which keys went and which stayed. A self-hosted install is
|
|
92
|
+
* recognised by `selfHosted`, or — for installs predating that flag — by a
|
|
93
|
+
* configured Perception URL with no cloud token.
|
|
94
|
+
*/
|
|
95
|
+
export function splitCloudCredentials(config) {
|
|
96
|
+
const selfHosted = Boolean(config.selfHosted) || Boolean(config.perceptionUrl && !config.token);
|
|
97
|
+
const toClear = new Set([
|
|
98
|
+
...CLOUD_ONLY_KEYS,
|
|
99
|
+
...(selfHosted ? [] : CLOUD_PERCEPTION_KEYS),
|
|
100
|
+
]);
|
|
101
|
+
const remaining = {};
|
|
102
|
+
const cleared = [];
|
|
103
|
+
const kept = [];
|
|
104
|
+
for (const key of Object.keys(config)) {
|
|
105
|
+
const value = config[key];
|
|
106
|
+
const present = value !== undefined && value !== '';
|
|
107
|
+
if (toClear.has(key)) {
|
|
108
|
+
if (present)
|
|
109
|
+
cleared.push(key);
|
|
110
|
+
continue;
|
|
111
|
+
}
|
|
112
|
+
;
|
|
113
|
+
remaining[key] = value;
|
|
114
|
+
if (present)
|
|
115
|
+
kept.push(key);
|
|
116
|
+
}
|
|
117
|
+
return { remaining, cleared, kept };
|
|
118
|
+
}
|
|
119
|
+
/** Removes cloud credentials from ~/.robrain/config.json, keeping self-hosted settings. */
|
|
120
|
+
export function clearCloudCredentials() {
|
|
121
|
+
const split = splitCloudCredentials(readConfig());
|
|
122
|
+
writeConfig(split.remaining);
|
|
123
|
+
return split;
|
|
124
|
+
}
|
|
80
125
|
// Rory Plans API base URL — points to roryplans.ai auth + provisioning endpoints
|
|
81
126
|
export const RORY_API_BASE = process.env.RORY_API_BASE ?? 'https://api.roryplans.ai';
|
|
82
127
|
//# sourceMappingURL=config.js.map
|
package/dist/lib/config.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/lib/config.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/lib/config.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.test.d.ts","sourceRoot":"","sources":["../../src/lib/config.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
import { mkdtempSync, mkdirSync, readFileSync, rmSync, writeFileSync } from 'node:fs';
|
|
2
|
+
import { tmpdir } from 'node:os';
|
|
3
|
+
import { join } from 'node:path';
|
|
4
|
+
import { after, describe, it } from 'node:test';
|
|
5
|
+
import assert from 'node:assert/strict';
|
|
6
|
+
// config.ts resolves homedir() at import time — pin a hermetic HOME before the
|
|
7
|
+
// dynamic import, so the on-disk test below owns ~/.robrain/config.json.
|
|
8
|
+
const fakeHome = mkdtempSync(join(tmpdir(), 'robrain-config-'));
|
|
9
|
+
process.env.HOME = fakeHome;
|
|
10
|
+
mkdirSync(join(fakeHome, '.robrain'), { recursive: true });
|
|
11
|
+
const { splitCloudCredentials, clearCloudCredentials, readConfig } = await import('./config.js');
|
|
12
|
+
after(() => rmSync(fakeHome, { recursive: true, force: true }));
|
|
13
|
+
describe('logout — splitCloudCredentials', () => {
|
|
14
|
+
it('keeps the self-hosted stack settings and clears only the cloud login', () => {
|
|
15
|
+
// Reported: logout wiped the whole file, so a self-hosted user lost
|
|
16
|
+
// perceptionUrl/perceptionKey and status/init-project broke until they
|
|
17
|
+
// re-ran install --self-hosted.
|
|
18
|
+
const { remaining, cleared, kept } = splitCloudCredentials({
|
|
19
|
+
token: 'rory-token', email: 'a@b.c', planningUrl: 'https://plan', planningKey: 'pk',
|
|
20
|
+
selfHosted: true, perceptionUrl: 'http://127.0.0.1:3001', perceptionKey: 'local-key',
|
|
21
|
+
embeddingProvider: 'openai', embeddingKey: 'emb', installedAt: '2026-10-23T00:00:00Z', version: '2.4.10',
|
|
22
|
+
});
|
|
23
|
+
assert.deepEqual(remaining, {
|
|
24
|
+
selfHosted: true, perceptionUrl: 'http://127.0.0.1:3001', perceptionKey: 'local-key',
|
|
25
|
+
embeddingProvider: 'openai', embeddingKey: 'emb', installedAt: '2026-10-23T00:00:00Z', version: '2.4.10',
|
|
26
|
+
});
|
|
27
|
+
assert.deepEqual(cleared, ['token', 'email', 'planningUrl', 'planningKey']);
|
|
28
|
+
assert.deepEqual(kept, ['selfHosted', 'perceptionUrl', 'perceptionKey', 'embeddingProvider', 'embeddingKey', 'installedAt', 'version']);
|
|
29
|
+
});
|
|
30
|
+
it('clears the Rory-provisioned Perception on a pure cloud install', () => {
|
|
31
|
+
// Those keys were handed out by the cloud login; leaving them behind
|
|
32
|
+
// would keep a live credential on disk after logout.
|
|
33
|
+
const { remaining, cleared } = splitCloudCredentials({
|
|
34
|
+
token: 't', email: 'a@b.c', thin: true,
|
|
35
|
+
perceptionUrl: 'https://perception.roryplans.ai', perceptionKey: 'cloud-key',
|
|
36
|
+
planningUrl: 'https://plan', planningKey: 'pk', installedAt: '2026-10-23T00:00:00Z', version: '2.4.10',
|
|
37
|
+
});
|
|
38
|
+
assert.deepEqual(remaining, { installedAt: '2026-10-23T00:00:00Z', version: '2.4.10' });
|
|
39
|
+
assert.ok(cleared.includes('perceptionUrl'));
|
|
40
|
+
assert.ok(cleared.includes('perceptionKey'));
|
|
41
|
+
assert.ok(cleared.includes('thin'));
|
|
42
|
+
});
|
|
43
|
+
it('treats a legacy install (Perception configured, no token) as self-hosted', () => {
|
|
44
|
+
const { remaining, cleared } = splitCloudCredentials({
|
|
45
|
+
perceptionUrl: 'http://127.0.0.1:3001', installedAt: '2026-01-01T00:00:00Z',
|
|
46
|
+
});
|
|
47
|
+
assert.equal(remaining.perceptionUrl, 'http://127.0.0.1:3001');
|
|
48
|
+
assert.deepEqual(cleared, []);
|
|
49
|
+
});
|
|
50
|
+
it('does not report empty placeholders as cleared or kept', () => {
|
|
51
|
+
// install --self-hosted writes planningUrl/planningKey as '' into mcp.json
|
|
52
|
+
// options; if they ever land in config they are noise, not credentials.
|
|
53
|
+
const { cleared, kept } = splitCloudCredentials({ selfHosted: true, planningUrl: '', planningKey: '' });
|
|
54
|
+
assert.deepEqual(cleared, []);
|
|
55
|
+
assert.deepEqual(kept, ['selfHosted']);
|
|
56
|
+
});
|
|
57
|
+
});
|
|
58
|
+
describe('logout — clearCloudCredentials on disk', () => {
|
|
59
|
+
it('rewrites config.json without the cloud fields and leaves the rest readable', () => {
|
|
60
|
+
const file = join(fakeHome, '.robrain', 'config.json');
|
|
61
|
+
writeFileSync(file, JSON.stringify({
|
|
62
|
+
token: 't', email: 'a@b.c', selfHosted: true,
|
|
63
|
+
perceptionUrl: 'http://127.0.0.1:3001', perceptionKey: 'k', embeddingProvider: 'openai',
|
|
64
|
+
}));
|
|
65
|
+
const { cleared, kept } = clearCloudCredentials();
|
|
66
|
+
assert.deepEqual(cleared, ['token', 'email']);
|
|
67
|
+
assert.deepEqual(kept, ['selfHosted', 'perceptionUrl', 'perceptionKey', 'embeddingProvider']);
|
|
68
|
+
const onDisk = JSON.parse(readFileSync(file, 'utf8'));
|
|
69
|
+
assert.equal(onDisk.token, undefined);
|
|
70
|
+
assert.equal(onDisk.email, undefined);
|
|
71
|
+
assert.equal(onDisk.perceptionKey, 'k');
|
|
72
|
+
assert.equal(readConfig().selfHosted, true);
|
|
73
|
+
});
|
|
74
|
+
});
|
|
75
|
+
//# sourceMappingURL=config.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.test.js","sourceRoot":"","sources":["../../src/lib/config.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { type Options, type Ora } from 'ora';
|
|
2
|
+
/** The subset of a tty.WriteStream the zero-width check needs. */
|
|
3
|
+
export interface SpinnerStream {
|
|
4
|
+
isTTY?: boolean;
|
|
5
|
+
columns?: number;
|
|
6
|
+
}
|
|
7
|
+
/**
|
|
8
|
+
* True when `stream` is a TTY that reports a zero-column window —
|
|
9
|
+
* the one case where ora's animation never terminates.
|
|
10
|
+
*/
|
|
11
|
+
export declare function isZeroWidthTty(stream: SpinnerStream | undefined): boolean;
|
|
12
|
+
/**
|
|
13
|
+
* True when the spinner animation must be disabled. ora writes to stderr
|
|
14
|
+
* by default while most shells size stdout and stderr together, so either
|
|
15
|
+
* one reporting a zero-width TTY is enough to disable it.
|
|
16
|
+
*/
|
|
17
|
+
export declare function shouldDisableSpinner(streams?: {
|
|
18
|
+
stdout?: SpinnerStream;
|
|
19
|
+
stderr?: SpinnerStream;
|
|
20
|
+
}): boolean;
|
|
21
|
+
/**
|
|
22
|
+
* Drop-in replacement for `ora(...)`. On a normal terminal the result is
|
|
23
|
+
* identical; on a zero-width TTY the spinner is created with
|
|
24
|
+
* `isEnabled: false`, so it prints its text once instead of animating.
|
|
25
|
+
*/
|
|
26
|
+
export declare function createSpinner(options?: string | Options): Ora;
|
|
27
|
+
//# sourceMappingURL=spinner.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"spinner.d.ts","sourceRoot":"","sources":["../../src/lib/spinner.ts"],"names":[],"mappings":"AAeA,OAAY,EAAE,KAAK,OAAO,EAAE,KAAK,GAAG,EAAE,MAAM,KAAK,CAAA;AAEjD,kEAAkE;AAClE,MAAM,WAAW,aAAa;IAC5B,KAAK,CAAC,EAAI,OAAO,CAAA;IACjB,OAAO,CAAC,EAAE,MAAM,CAAA;CACjB;AAED;;;GAGG;AACH,wBAAgB,cAAc,CAAC,MAAM,EAAE,aAAa,GAAG,SAAS,GAAG,OAAO,CAEzE;AAED;;;;GAIG;AACH,wBAAgB,oBAAoB,CAClC,OAAO,GAAE;IAAE,MAAM,CAAC,EAAE,aAAa,CAAC;IAAC,MAAM,CAAC,EAAE,aAAa,CAAA;CAAY,GACpE,OAAO,CAET;AAED;;;;GAIG;AACH,wBAAgB,aAAa,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,OAAO,GAAG,GAAG,CAI7D"}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
// src/lib/spinner.ts
|
|
2
|
+
// ─────────────────────────────────────────────────────────────
|
|
3
|
+
// Shared ora factory. Every CLI spinner goes through here so one
|
|
4
|
+
// terminal quirk is handled in one place.
|
|
5
|
+
//
|
|
6
|
+
// ora animates by measuring its text against `stream.columns` and
|
|
7
|
+
// then erasing that many lines with cursor-up/clear-line sequences.
|
|
8
|
+
// A pseudo-terminal with no window size set (`expect`, `script`,
|
|
9
|
+
// `docker run -t` without a real TTY) reports `columns === 0`:
|
|
10
|
+
// the division yields Infinity lines to clear, and the spinner
|
|
11
|
+
// emits erase sequences forever without ever finishing the command.
|
|
12
|
+
// Such a stream is "a TTY" as far as ora's own interactive check
|
|
13
|
+
// goes, so we have to turn the animation off ourselves.
|
|
14
|
+
// ─────────────────────────────────────────────────────────────
|
|
15
|
+
import ora from 'ora';
|
|
16
|
+
/**
|
|
17
|
+
* True when `stream` is a TTY that reports a zero-column window —
|
|
18
|
+
* the one case where ora's animation never terminates.
|
|
19
|
+
*/
|
|
20
|
+
export function isZeroWidthTty(stream) {
|
|
21
|
+
return Boolean(stream?.isTTY) && stream?.columns === 0;
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* True when the spinner animation must be disabled. ora writes to stderr
|
|
25
|
+
* by default while most shells size stdout and stderr together, so either
|
|
26
|
+
* one reporting a zero-width TTY is enough to disable it.
|
|
27
|
+
*/
|
|
28
|
+
export function shouldDisableSpinner(streams = process) {
|
|
29
|
+
return isZeroWidthTty(streams.stdout) || isZeroWidthTty(streams.stderr);
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Drop-in replacement for `ora(...)`. On a normal terminal the result is
|
|
33
|
+
* identical; on a zero-width TTY the spinner is created with
|
|
34
|
+
* `isEnabled: false`, so it prints its text once instead of animating.
|
|
35
|
+
*/
|
|
36
|
+
export function createSpinner(options) {
|
|
37
|
+
const base = typeof options === 'string' ? { text: options } : { ...(options ?? {}) };
|
|
38
|
+
const disable = shouldDisableSpinner() && base.isEnabled === undefined;
|
|
39
|
+
return ora(disable ? { ...base, isEnabled: false } : base);
|
|
40
|
+
}
|
|
41
|
+
//# sourceMappingURL=spinner.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"spinner.js","sourceRoot":"","sources":["../../src/lib/spinner.ts"],"names":[],"mappings":"AAAA,qBAAqB;AACrB,gEAAgE;AAChE,iEAAiE;AACjE,0CAA0C;AAC1C,EAAE;AACF,kEAAkE;AAClE,oEAAoE;AACpE,iEAAiE;AACjE,+DAA+D;AAC/D,+DAA+D;AAC/D,oEAAoE;AACpE,iEAAiE;AACjE,wDAAwD;AACxD,gEAAgE;AAEhE,OAAO,GAA+B,MAAM,KAAK,CAAA;AAQjD;;;GAGG;AACH,MAAM,UAAU,cAAc,CAAC,MAAiC;IAC9D,OAAO,OAAO,CAAC,MAAM,EAAE,KAAK,CAAC,IAAI,MAAM,EAAE,OAAO,KAAK,CAAC,CAAA;AACxD,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,oBAAoB,CAClC,UAA8D,OAAO;IAErE,OAAO,cAAc,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,cAAc,CAAC,OAAO,CAAC,MAAM,CAAC,CAAA;AACzE,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,aAAa,CAAC,OAA0B;IACtD,MAAM,IAAI,GAAY,OAAO,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,OAAO,IAAI,EAAE,CAAC,EAAE,CAAA;IAC9F,MAAM,OAAO,GAAG,oBAAoB,EAAE,IAAI,IAAI,CAAC,SAAS,KAAK,SAAS,CAAA;IACtE,OAAO,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,GAAG,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAA;AAC5D,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"spinner.test.d.ts","sourceRoot":"","sources":["../../src/lib/spinner.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import { describe, it } from 'node:test';
|
|
2
|
+
import assert from 'node:assert/strict';
|
|
3
|
+
import { isZeroWidthTty, shouldDisableSpinner, createSpinner } from './spinner.js';
|
|
4
|
+
describe('spinner — zero-width TTY detection', () => {
|
|
5
|
+
it('flags a TTY that reports zero columns', () => {
|
|
6
|
+
// Reported: `expect`/`script` ptys without a window size — ora looped on
|
|
7
|
+
// cursor-up/erase sequences (>1.5 GB in minutes) and init-project never ran.
|
|
8
|
+
assert.equal(isZeroWidthTty({ isTTY: true, columns: 0 }), true);
|
|
9
|
+
});
|
|
10
|
+
it('leaves a normally sized TTY alone', () => {
|
|
11
|
+
assert.equal(isZeroWidthTty({ isTTY: true, columns: 120 }), false);
|
|
12
|
+
});
|
|
13
|
+
it('leaves a pipe alone — ora already handles non-TTY output', () => {
|
|
14
|
+
assert.equal(isZeroWidthTty({ isTTY: false, columns: 0 }), false);
|
|
15
|
+
assert.equal(isZeroWidthTty({ columns: undefined }), false);
|
|
16
|
+
assert.equal(isZeroWidthTty(undefined), false);
|
|
17
|
+
});
|
|
18
|
+
it('disables when either stdout or stderr is a zero-width TTY', () => {
|
|
19
|
+
assert.equal(shouldDisableSpinner({ stdout: { isTTY: true, columns: 0 }, stderr: { isTTY: true, columns: 80 } }), true);
|
|
20
|
+
assert.equal(shouldDisableSpinner({ stdout: { isTTY: true, columns: 80 }, stderr: { isTTY: true, columns: 0 } }), true);
|
|
21
|
+
assert.equal(shouldDisableSpinner({ stdout: { isTTY: true, columns: 80 }, stderr: { isTTY: true, columns: 80 } }), false);
|
|
22
|
+
assert.equal(shouldDisableSpinner({}), false);
|
|
23
|
+
});
|
|
24
|
+
});
|
|
25
|
+
describe('createSpinner', () => {
|
|
26
|
+
it('accepts the same string and options forms as ora', () => {
|
|
27
|
+
const a = createSpinner('Working...');
|
|
28
|
+
const b = createSpinner({ text: 'Working...', color: 'green' });
|
|
29
|
+
assert.equal(a.text, 'Working...');
|
|
30
|
+
assert.equal(b.text, 'Working...');
|
|
31
|
+
assert.equal(b.color, 'green');
|
|
32
|
+
});
|
|
33
|
+
it('does not force the spinner on when the caller already set isEnabled', () => {
|
|
34
|
+
const s = createSpinner({ text: 'quiet', isEnabled: false });
|
|
35
|
+
// ora exposes isEnabled at runtime but leaves it out of its typings.
|
|
36
|
+
assert.equal(s.isEnabled, false);
|
|
37
|
+
});
|
|
38
|
+
});
|
|
39
|
+
//# sourceMappingURL=spinner.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"spinner.test.js","sourceRoot":"","sources":["../../src/lib/spinner.test.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "robrain",
|
|
3
|
-
"version": "2.
|
|
3
|
+
"version": "2.5.0",
|
|
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/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",
|
|
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 dist/lib/spinner.test.js dist/lib/config.test.js dist/commands/inject.test.js dist/commands/capture.test.js",
|
|
61
61
|
"pack:verify": "node scripts/verify-publish-tarball.mjs",
|
|
62
62
|
"postinstall": "node scripts/chmod-bin.cjs"
|
|
63
63
|
}
|