@fnndsc/chell 4.3.2 → 4.4.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/builtins/debug.d.ts +3 -1
- package/dist/builtins/debug.js +14 -22
- package/dist/builtins/debug.js.map +1 -1
- package/dist/builtins/fs/cat.d.ts +8 -8
- package/dist/builtins/fs/cat.js +37 -20
- package/dist/builtins/fs/cat.js.map +1 -1
- package/dist/builtins/fs/cd.d.ts +3 -2
- package/dist/builtins/fs/cd.js +48 -33
- package/dist/builtins/fs/cd.js.map +1 -1
- package/dist/builtins/fs/cp.d.ts +4 -1
- package/dist/builtins/fs/cp.js +23 -10
- package/dist/builtins/fs/cp.js.map +1 -1
- package/dist/builtins/fs/download.js +5 -1
- package/dist/builtins/fs/download.js.map +1 -1
- package/dist/builtins/fs/edit.d.ts +2 -2
- package/dist/builtins/fs/edit.js +37 -19
- package/dist/builtins/fs/edit.js.map +1 -1
- package/dist/builtins/fs/mkdir.d.ts +4 -1
- package/dist/builtins/fs/mkdir.js +20 -6
- package/dist/builtins/fs/mkdir.js.map +1 -1
- package/dist/builtins/fs/mv.d.ts +4 -1
- package/dist/builtins/fs/mv.js +23 -10
- package/dist/builtins/fs/mv.js.map +1 -1
- package/dist/builtins/fs/pull.d.ts +2 -2
- package/dist/builtins/fs/pull.js +57 -29
- package/dist/builtins/fs/pull.js.map +1 -1
- package/dist/builtins/fs/pwd.d.ts +6 -3
- package/dist/builtins/fs/pwd.js +8 -10
- package/dist/builtins/fs/pwd.js.map +1 -1
- package/dist/builtins/fs/rm.d.ts +7 -1
- package/dist/builtins/fs/rm.js +61 -12
- package/dist/builtins/fs/rm.js.map +1 -1
- package/dist/builtins/fs/touch.d.ts +4 -1
- package/dist/builtins/fs/touch.js +24 -12
- package/dist/builtins/fs/touch.js.map +1 -1
- package/dist/builtins/fs/upload.js +4 -1
- package/dist/builtins/fs/upload.js.map +1 -1
- package/dist/builtins/index.d.ts +1 -0
- package/dist/builtins/index.js +1 -0
- package/dist/builtins/index.js.map +1 -1
- package/dist/builtins/sys/physicalmode.d.ts +3 -1
- package/dist/builtins/sys/physicalmode.js +13 -20
- package/dist/builtins/sys/physicalmode.js.map +1 -1
- package/dist/builtins/sys/timing.d.ts +3 -1
- package/dist/builtins/sys/timing.js +13 -20
- package/dist/builtins/sys/timing.js.map +1 -1
- package/dist/builtins/sys/version.d.ts +15 -0
- package/dist/builtins/sys/version.js +23 -0
- package/dist/builtins/sys/version.js.map +1 -0
- package/dist/builtins/sys/whoami.d.ts +9 -4
- package/dist/builtins/sys/whoami.js +20 -13
- package/dist/builtins/sys/whoami.js.map +1 -1
- package/dist/calypso.d.ts +13 -0
- package/dist/calypso.js +44 -0
- package/dist/calypso.js.map +1 -0
- package/dist/chell.d.ts +2 -1
- package/dist/chell.js +2 -1
- package/dist/chell.js.map +1 -1
- package/dist/core/boot.d.ts +3 -1
- package/dist/core/boot.js +50 -100
- package/dist/core/boot.js.map +1 -1
- package/dist/core/cli.d.ts +3 -1
- package/dist/core/cli.js +11 -1
- package/dist/core/cli.js.map +1 -1
- package/dist/core/cliSurface.d.ts +26 -0
- package/dist/core/cliSurface.js +152 -0
- package/dist/core/cliSurface.js.map +1 -0
- package/dist/core/dispatch.d.ts +63 -10
- package/dist/core/dispatch.js +326 -234
- package/dist/core/dispatch.js.map +1 -1
- package/dist/core/engine.d.ts +91 -0
- package/dist/core/engine.js +222 -0
- package/dist/core/engine.js.map +1 -0
- package/dist/core/progress.d.ts +25 -0
- package/dist/core/progress.js +10 -0
- package/dist/core/progress.js.map +1 -0
- package/dist/core/progressRenderer.d.ts +42 -0
- package/dist/core/progressRenderer.js +176 -0
- package/dist/core/progressRenderer.js.map +1 -0
- package/dist/core/prompt/session.d.ts +20 -0
- package/dist/core/prompt/session.js +43 -0
- package/dist/core/prompt/session.js.map +1 -0
- package/dist/core/question.d.ts +11 -18
- package/dist/core/question.js +14 -57
- package/dist/core/question.js.map +1 -1
- package/dist/core/repl.d.ts +25 -5
- package/dist/core/repl.js +56 -45
- package/dist/core/repl.js.map +1 -1
- package/dist/core/sink.d.ts +201 -0
- package/dist/core/sink.js +300 -0
- package/dist/core/sink.js.map +1 -0
- package/dist/core/surface.d.ts +172 -0
- package/dist/core/surface.js +105 -0
- package/dist/core/surface.js.map +1 -0
- package/dist/core/version.d.ts +20 -0
- package/dist/core/version.js +82 -0
- package/dist/core/version.js.map +1 -0
- package/dist/core/warnings.d.ts +14 -0
- package/dist/core/warnings.js +25 -0
- package/dist/core/warnings.js.map +1 -0
- package/dist/daemon/launch.d.ts +9 -0
- package/dist/daemon/launch.js +82 -0
- package/dist/daemon/launch.js.map +1 -0
- package/dist/index.js +2 -12
- package/dist/index.js.map +1 -1
- package/dist/lib/spinner.js +5 -4
- package/dist/lib/spinner.js.map +1 -1
- package/dist/lib/vfs/vfs.js +7 -3
- package/dist/lib/vfs/vfs.js.map +1 -1
- package/dist/remote/client.d.ts +6 -0
- package/dist/remote/client.js +71 -0
- package/dist/remote/client.js.map +1 -0
- package/dist/remote/discovery.d.ts +23 -0
- package/dist/remote/discovery.js +55 -0
- package/dist/remote/discovery.js.map +1 -0
- package/dist/remote/remoteEngine.d.ts +125 -0
- package/dist/remote/remoteEngine.js +283 -0
- package/dist/remote/remoteEngine.js.map +1 -0
- package/package.json +7 -5
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @file Surface capabilities: the input/interaction seam a host provides.
|
|
3
|
+
*
|
|
4
|
+
* The output sink (`./sink.js`) lets a host decide where a command's output
|
|
5
|
+
* goes. This module is its input-side counterpart: it lets a host declare
|
|
6
|
+
* what *interaction* it can offer — prompting for a line, reading a secret
|
|
7
|
+
* without echo, opening a local editor — and lets a builtin ask for a
|
|
8
|
+
* capability and fail with a clear message when the attached surface cannot
|
|
9
|
+
* provide it, rather than hanging on a standard input that is not there.
|
|
10
|
+
*
|
|
11
|
+
* The CLI host backs this with readline and the local `$EDITOR`; a future
|
|
12
|
+
* daemon backs it with request messages to a remote surface, and a surface
|
|
13
|
+
* that cannot (say) open a local editor simply declares `localEdit: false`.
|
|
14
|
+
*
|
|
15
|
+
* Capabilities the surface can act on directly (prompting) are methods here;
|
|
16
|
+
* capabilities a builtin still performs itself (local editing, whose editor
|
|
17
|
+
* mechanics remain in the `edit` builtin until a remote surface needs its
|
|
18
|
+
* own implementation) are declared as flags a builtin gates on via
|
|
19
|
+
* {@link capability_require}. This module is deliberately free of Node
|
|
20
|
+
* built-ins so it stays trivially testable and host-agnostic; the readline
|
|
21
|
+
* implementation lives in `./cliSurface.js`.
|
|
22
|
+
*
|
|
23
|
+
* @see docs/calypso.adoc — "Interactivity is a declared surface capability".
|
|
24
|
+
* @module
|
|
25
|
+
*/
|
|
26
|
+
/**
|
|
27
|
+
* Raised when a builtin requests an interaction the attached surface cannot
|
|
28
|
+
* provide. Carries the capability name so a host can present it uniformly.
|
|
29
|
+
*/
|
|
30
|
+
export class CapabilityError extends Error {
|
|
31
|
+
/** The capability that was required but absent. */
|
|
32
|
+
capability;
|
|
33
|
+
/**
|
|
34
|
+
* @param capability - The missing capability.
|
|
35
|
+
* @param message - Human-readable explanation.
|
|
36
|
+
*/
|
|
37
|
+
constructor(capability, message) {
|
|
38
|
+
super(message);
|
|
39
|
+
this.name = 'CapabilityError';
|
|
40
|
+
this.capability = capability;
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* The default surface for a host that has not installed one: it can do
|
|
45
|
+
* nothing interactive and says so clearly. This is the correct default for
|
|
46
|
+
* an unknown host — a CLI host replaces it (see `./cliSurface.js`), and any
|
|
47
|
+
* attempt to prompt or edit before a real surface is installed fails loudly
|
|
48
|
+
* instead of hanging.
|
|
49
|
+
*/
|
|
50
|
+
export class HeadlessSurface {
|
|
51
|
+
/** @inheritdoc */
|
|
52
|
+
capabilities = {
|
|
53
|
+
hiddenInput: false,
|
|
54
|
+
localEdit: false,
|
|
55
|
+
tty: false,
|
|
56
|
+
pipeSegments: false,
|
|
57
|
+
};
|
|
58
|
+
/** @inheritdoc */
|
|
59
|
+
prompt(_request) {
|
|
60
|
+
throw new CapabilityError('tty', 'This surface cannot prompt for input.');
|
|
61
|
+
}
|
|
62
|
+
/** @inheritdoc */
|
|
63
|
+
pipeSegment(_command, _input) {
|
|
64
|
+
throw new CapabilityError('pipeSegments', 'This surface cannot run pipeline segments.');
|
|
65
|
+
}
|
|
66
|
+
/** @inheritdoc */
|
|
67
|
+
localEdit(_request) {
|
|
68
|
+
throw new CapabilityError('localEdit', 'This surface cannot open a local editor.');
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
/** The active surface. Defaults to headless until a host installs one. */
|
|
72
|
+
let activeSurface = new HeadlessSurface();
|
|
73
|
+
/**
|
|
74
|
+
* Returns the currently installed surface.
|
|
75
|
+
*
|
|
76
|
+
* @returns The active surface.
|
|
77
|
+
*/
|
|
78
|
+
export function surface_get() {
|
|
79
|
+
return activeSurface;
|
|
80
|
+
}
|
|
81
|
+
/**
|
|
82
|
+
* Installs a surface. Called by the host that owns the interaction channel.
|
|
83
|
+
*
|
|
84
|
+
* @param surface - The surface to install.
|
|
85
|
+
* @returns The previously installed surface, so callers can restore it.
|
|
86
|
+
*/
|
|
87
|
+
export function surface_set(surface) {
|
|
88
|
+
const previous = activeSurface;
|
|
89
|
+
activeSurface = surface;
|
|
90
|
+
return previous;
|
|
91
|
+
}
|
|
92
|
+
/**
|
|
93
|
+
* Asserts that the active surface has a capability, throwing a
|
|
94
|
+
* {@link CapabilityError} with a clear message when it does not.
|
|
95
|
+
*
|
|
96
|
+
* @param capability - The capability the caller needs.
|
|
97
|
+
* @param message - The message to present when it is absent.
|
|
98
|
+
* @throws {CapabilityError} When the active surface lacks the capability.
|
|
99
|
+
*/
|
|
100
|
+
export function capability_require(capability, message) {
|
|
101
|
+
if (!activeSurface.capabilities[capability]) {
|
|
102
|
+
throw new CapabilityError(capability, message);
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
//# sourceMappingURL=surface.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"surface.js","sourceRoot":"","sources":["../../src/core/surface.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AAyGH;;;GAGG;AACH,MAAM,OAAO,eAAgB,SAAQ,KAAK;IACxC,mDAAmD;IACnC,UAAU,CAA4B;IAEtD;;;OAGG;IACH,YAAY,UAAqC,EAAE,OAAe;QAChE,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,iBAAiB,CAAC;QAC9B,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;IAC/B,CAAC;CACF;AAED;;;;;;GAMG;AACH,MAAM,OAAO,eAAe;IAC1B,kBAAkB;IACF,YAAY,GAAwB;QAClD,WAAW,EAAE,KAAK;QAClB,SAAS,EAAE,KAAK;QAChB,GAAG,EAAE,KAAK;QACV,YAAY,EAAE,KAAK;KACpB,CAAC;IAEF,kBAAkB;IACX,MAAM,CAAC,QAAuB;QACnC,MAAM,IAAI,eAAe,CAAC,KAAK,EAAE,uCAAuC,CAAC,CAAC;IAC5E,CAAC;IAED,kBAAkB;IACX,WAAW,CAAC,QAAgB,EAAE,MAAc;QACjD,MAAM,IAAI,eAAe,CAAC,cAAc,EAAE,4CAA4C,CAAC,CAAC;IAC1F,CAAC;IAED,kBAAkB;IACX,SAAS,CAAC,QAA0B;QACzC,MAAM,IAAI,eAAe,CAAC,WAAW,EAAE,0CAA0C,CAAC,CAAC;IACrF,CAAC;CACF;AAED,0EAA0E;AAC1E,IAAI,aAAa,GAAY,IAAI,eAAe,EAAE,CAAC;AAEnD;;;;GAIG;AACH,MAAM,UAAU,WAAW;IACzB,OAAO,aAAa,CAAC;AACvB,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,WAAW,CAAC,OAAgB;IAC1C,MAAM,QAAQ,GAAY,aAAa,CAAC;IACxC,aAAa,GAAG,OAAO,CAAC;IACxB,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,kBAAkB,CAChC,UAAqC,EACrC,OAAe;IAEf,IAAI,CAAC,aAAa,CAAC,YAAY,CAAC,UAAU,CAAC,EAAE,CAAC;QAC5C,MAAM,IAAI,eAAe,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;IACjD,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
/** The resolved version of every layer of the stack, in sandwich order. */
|
|
2
|
+
export interface StackVersions {
|
|
3
|
+
chell: string;
|
|
4
|
+
chili: string;
|
|
5
|
+
salsa: string;
|
|
6
|
+
cumin: string;
|
|
7
|
+
}
|
|
8
|
+
/**
|
|
9
|
+
* The resolved version of every layer of the stack.
|
|
10
|
+
*
|
|
11
|
+
* @returns The chell/chili/salsa/cumin version strings.
|
|
12
|
+
*/
|
|
13
|
+
export declare function versions_get(): StackVersions;
|
|
14
|
+
/**
|
|
15
|
+
* Builds the multi-line version report shown by the `version` command and
|
|
16
|
+
* `--version`: chell itself plus the sandwich layers it runs with.
|
|
17
|
+
*
|
|
18
|
+
* @returns The version report string.
|
|
19
|
+
*/
|
|
20
|
+
export declare function versionReport_build(): string;
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @file Version reporting for chell and its sandwich layers.
|
|
3
|
+
*
|
|
4
|
+
* Reads chell's own package.json and those of the cumin/salsa/chili layers, so
|
|
5
|
+
* the boot panel, the `version` command, and `--version` all report a
|
|
6
|
+
* consistent set of versions. In the standalone bundled binary — where no
|
|
7
|
+
* package.json exists on disk — the versions esbuild injected at build time are
|
|
8
|
+
* used instead.
|
|
9
|
+
*
|
|
10
|
+
* @module
|
|
11
|
+
*/
|
|
12
|
+
import { readFileSync } from 'fs';
|
|
13
|
+
import * as path from 'path';
|
|
14
|
+
import { fileURLToPath } from 'url';
|
|
15
|
+
import { createRequire } from 'module';
|
|
16
|
+
const moduleDir = path.dirname(fileURLToPath(import.meta.url));
|
|
17
|
+
/**
|
|
18
|
+
* Reads chell's own package.json, falling back to the build-time version in the
|
|
19
|
+
* bundled binary where that file is not present on disk.
|
|
20
|
+
*
|
|
21
|
+
* @returns The parsed package.json (or a `{ name, version }` fallback).
|
|
22
|
+
*/
|
|
23
|
+
function selfPackageJson_load() {
|
|
24
|
+
try {
|
|
25
|
+
return JSON.parse(readFileSync(path.resolve(moduleDir, '../../package.json'), 'utf-8'));
|
|
26
|
+
}
|
|
27
|
+
catch {
|
|
28
|
+
const version = typeof __CHELL_VERSION__ !== 'undefined' ? __CHELL_VERSION__ : 'unknown';
|
|
29
|
+
return { name: '@fnndsc/chell', version };
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Loads a dependency's package.json via node module resolution, so it works
|
|
34
|
+
* whether the dep is nested or hoisted to a workspace-root node_modules. In the
|
|
35
|
+
* bundled binary it falls back to the versions inlined at build time.
|
|
36
|
+
*
|
|
37
|
+
* @param name - The package name (e.g. `@fnndsc/cumin`).
|
|
38
|
+
* @returns The parsed package.json, or a fallback `{ name, version }`.
|
|
39
|
+
*/
|
|
40
|
+
function depPackageJson_load(name) {
|
|
41
|
+
try {
|
|
42
|
+
const req = createRequire(import.meta.url);
|
|
43
|
+
return req(`${name}/package.json`);
|
|
44
|
+
}
|
|
45
|
+
catch {
|
|
46
|
+
const version = typeof __CHELL_DEP_VERSIONS__ !== 'undefined' ? (__CHELL_DEP_VERSIONS__[name] ?? 'unknown') : 'unknown';
|
|
47
|
+
return { name, version };
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
const chellJson = selfPackageJson_load();
|
|
51
|
+
const cuminJson = depPackageJson_load('@fnndsc/cumin');
|
|
52
|
+
const salsaJson = depPackageJson_load('@fnndsc/salsa');
|
|
53
|
+
const chiliJson = depPackageJson_load('@fnndsc/chili');
|
|
54
|
+
/**
|
|
55
|
+
* The resolved version of every layer of the stack.
|
|
56
|
+
*
|
|
57
|
+
* @returns The chell/chili/salsa/cumin version strings.
|
|
58
|
+
*/
|
|
59
|
+
export function versions_get() {
|
|
60
|
+
return {
|
|
61
|
+
chell: chellJson.version,
|
|
62
|
+
chili: chiliJson.version,
|
|
63
|
+
salsa: salsaJson.version,
|
|
64
|
+
cumin: cuminJson.version,
|
|
65
|
+
};
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* Builds the multi-line version report shown by the `version` command and
|
|
69
|
+
* `--version`: chell itself plus the sandwich layers it runs with.
|
|
70
|
+
*
|
|
71
|
+
* @returns The version report string.
|
|
72
|
+
*/
|
|
73
|
+
export function versionReport_build() {
|
|
74
|
+
const versions = versions_get();
|
|
75
|
+
return [
|
|
76
|
+
`chell ${versions.chell}`,
|
|
77
|
+
` chili ${versions.chili}`,
|
|
78
|
+
` salsa ${versions.salsa}`,
|
|
79
|
+
` cumin ${versions.cumin}`,
|
|
80
|
+
].join('\n');
|
|
81
|
+
}
|
|
82
|
+
//# sourceMappingURL=version.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"version.js","sourceRoot":"","sources":["../../src/core/version.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AACH,OAAO,EAAE,YAAY,EAAE,MAAM,IAAI,CAAC;AAClC,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAC7B,OAAO,EAAE,aAAa,EAAE,MAAM,KAAK,CAAC;AACpC,OAAO,EAAE,aAAa,EAAE,MAAM,QAAQ,CAAC;AASvC,MAAM,SAAS,GAAW,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;AAevE;;;;;GAKG;AACH,SAAS,oBAAoB;IAC3B,IAAI,CAAC;QACH,OAAO,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,oBAAoB,CAAC,EAAE,OAAO,CAAC,CAAgB,CAAC;IACzG,CAAC;IAAC,MAAM,CAAC;QACP,MAAM,OAAO,GAAW,OAAO,iBAAiB,KAAK,WAAW,CAAC,CAAC,CAAC,iBAAiB,CAAC,CAAC,CAAC,SAAS,CAAC;QACjG,OAAO,EAAE,IAAI,EAAE,eAAe,EAAE,OAAO,EAAE,CAAC;IAC5C,CAAC;AACH,CAAC;AAED;;;;;;;GAOG;AACH,SAAS,mBAAmB,CAAC,IAAY;IACvC,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAC3C,OAAO,GAAG,CAAC,GAAG,IAAI,eAAe,CAAgB,CAAC;IACpD,CAAC;IAAC,MAAM,CAAC;QACP,MAAM,OAAO,GACX,OAAO,sBAAsB,KAAK,WAAW,CAAC,CAAC,CAAC,CAAC,sBAAsB,CAAC,IAAI,CAAC,IAAI,SAAS,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;QAC1G,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC;IAC3B,CAAC;AACH,CAAC;AAED,MAAM,SAAS,GAAgB,oBAAoB,EAAE,CAAC;AACtD,MAAM,SAAS,GAAgB,mBAAmB,CAAC,eAAe,CAAC,CAAC;AACpE,MAAM,SAAS,GAAgB,mBAAmB,CAAC,eAAe,CAAC,CAAC;AACpE,MAAM,SAAS,GAAgB,mBAAmB,CAAC,eAAe,CAAC,CAAC;AAUpE;;;;GAIG;AACH,MAAM,UAAU,YAAY;IAC1B,OAAO;QACL,KAAK,EAAE,SAAS,CAAC,OAAO;QACxB,KAAK,EAAE,SAAS,CAAC,OAAO;QACxB,KAAK,EAAE,SAAS,CAAC,OAAO;QACxB,KAAK,EAAE,SAAS,CAAC,OAAO;KACzB,CAAC;AACJ,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,mBAAmB;IACjC,MAAM,QAAQ,GAAkB,YAAY,EAAE,CAAC;IAC/C,OAAO;QACL,SAAS,QAAQ,CAAC,KAAK,EAAE;QACzB,WAAW,QAAQ,CAAC,KAAK,EAAE;QAC3B,WAAW,QAAQ,CAAC,KAAK,EAAE;QAC3B,WAAW,QAAQ,CAAC,KAAK,EAAE;KAC5B,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACf,CAAC"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @file Node deprecation-warning suppression shared by chell's entry points.
|
|
3
|
+
*
|
|
4
|
+
* @module
|
|
5
|
+
*/
|
|
6
|
+
/**
|
|
7
|
+
* Suppresses the DEP0169 `url.parse()` deprecation warning emitted through the
|
|
8
|
+
* axios -> proxy-from-env dependency chain.
|
|
9
|
+
*
|
|
10
|
+
* proxy-from-env 1.1.0 (pulled via axios) still uses `url.parse()`, which
|
|
11
|
+
* triggers the warning in Node. Safe to remove once that dependency migrates to
|
|
12
|
+
* the WHATWG URL API or axios drops it.
|
|
13
|
+
*/
|
|
14
|
+
export declare function warnings_suppress(): void;
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @file Node deprecation-warning suppression shared by chell's entry points.
|
|
3
|
+
*
|
|
4
|
+
* @module
|
|
5
|
+
*/
|
|
6
|
+
/**
|
|
7
|
+
* Suppresses the DEP0169 `url.parse()` deprecation warning emitted through the
|
|
8
|
+
* axios -> proxy-from-env dependency chain.
|
|
9
|
+
*
|
|
10
|
+
* proxy-from-env 1.1.0 (pulled via axios) still uses `url.parse()`, which
|
|
11
|
+
* triggers the warning in Node. Safe to remove once that dependency migrates to
|
|
12
|
+
* the WHATWG URL API or axios drops it.
|
|
13
|
+
*/
|
|
14
|
+
export function warnings_suppress() {
|
|
15
|
+
const originalEmitWarning = process.emitWarning;
|
|
16
|
+
process.emitWarning = function (warning, ...args) {
|
|
17
|
+
if (typeof warning === 'string' &&
|
|
18
|
+
(warning.includes('DEP0169') || warning.includes('url.parse()'))) {
|
|
19
|
+
return;
|
|
20
|
+
}
|
|
21
|
+
// eslint-disable-next-line prefer-spread
|
|
22
|
+
return originalEmitWarning.apply(process, [warning, ...args]);
|
|
23
|
+
};
|
|
24
|
+
}
|
|
25
|
+
//# sourceMappingURL=warnings.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"warnings.js","sourceRoot":"","sources":["../../src/core/warnings.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH;;;;;;;GAOG;AACH,MAAM,UAAU,iBAAiB;IAC/B,MAAM,mBAAmB,GAA+B,OAAO,CAAC,WAAW,CAAC;IAC5E,OAAO,CAAC,WAAW,GAAG,UAAU,OAAuB,EAAE,GAAG,IAAe;QACzE,IACE,OAAO,OAAO,KAAK,QAAQ;YAC3B,CAAC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAI,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC,EAChE,CAAC;YACD,OAAO;QACT,CAAC;QACD,yCAAyC;QACzC,OAAQ,mBAAiD,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC,CAAC,CAAC;IAC/F,CAAC,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { ChellEngine } from '../core/engine.js';
|
|
2
|
+
/**
|
|
3
|
+
* Starts the daemon over an engine and advertises it for same-user discovery.
|
|
4
|
+
*
|
|
5
|
+
* @param engine - The engine to host (already created and connected by boot).
|
|
6
|
+
* @returns A promise that resolves once the daemon is listening; the process
|
|
7
|
+
* then stays alive on the WebSocket server.
|
|
8
|
+
*/
|
|
9
|
+
export declare function daemon_launch(engine: ChellEngine): Promise<void>;
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @file The `chell --daemon` launcher.
|
|
3
|
+
*
|
|
4
|
+
* Hosts the already-created chell engine behind a CALYPSO daemon. Two host
|
|
5
|
+
* concerns are handled here that the transport-agnostic daemon (in calypso)
|
|
6
|
+
* cannot: color is forced on (a daemon has no TTY, so chalk would otherwise
|
|
7
|
+
* strip it, and the rendered text must carry color for a remote terminal to
|
|
8
|
+
* reproduce the local experience), and the engine's live sink output is
|
|
9
|
+
* routed through the command's origin surface rather than rendered on the
|
|
10
|
+
* daemon's own console.
|
|
11
|
+
*
|
|
12
|
+
* @module
|
|
13
|
+
*/
|
|
14
|
+
import chalk from 'chalk';
|
|
15
|
+
import { CalypsoDaemon, token_generate } from '@fnndsc/calypso';
|
|
16
|
+
import { sink_set } from '../core/sink.js';
|
|
17
|
+
import { surface_set } from '../core/surface.js';
|
|
18
|
+
import { sessionPrompt_render } from '../core/prompt/session.js';
|
|
19
|
+
import { discovery_write, discovery_path } from '../remote/discovery.js';
|
|
20
|
+
/** The daemon sink forwards live command output to the executing surface. */
|
|
21
|
+
class DaemonSink {
|
|
22
|
+
daemon;
|
|
23
|
+
liveEnvelopeOutput = true;
|
|
24
|
+
constructor(daemon) {
|
|
25
|
+
this.daemon = daemon;
|
|
26
|
+
}
|
|
27
|
+
/** @inheritdoc */
|
|
28
|
+
data_write(chunk) { this.output_write('data', chunk); }
|
|
29
|
+
/** @inheritdoc */
|
|
30
|
+
err_write(chunk) { this.output_write('err', chunk); }
|
|
31
|
+
/** @inheritdoc */
|
|
32
|
+
status_write(text) { this.daemon.output_current('status', text); }
|
|
33
|
+
/** @inheritdoc */
|
|
34
|
+
progress_write(event) { this.daemon.progress_current(event); }
|
|
35
|
+
output_write(channel, chunk) {
|
|
36
|
+
const text = typeof chunk === 'string' ? chunk : chunk.toString('utf-8');
|
|
37
|
+
this.daemon.output_current(channel, text);
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* Starts the daemon over an engine and advertises it for same-user discovery.
|
|
42
|
+
*
|
|
43
|
+
* @param engine - The engine to host (already created and connected by boot).
|
|
44
|
+
* @returns A promise that resolves once the daemon is listening; the process
|
|
45
|
+
* then stays alive on the WebSocket server.
|
|
46
|
+
*/
|
|
47
|
+
export async function daemon_launch(engine) {
|
|
48
|
+
// Force color into the engine's rendered text: no TTY here to auto-detect.
|
|
49
|
+
if (chalk.level < 1) {
|
|
50
|
+
chalk.level = 3;
|
|
51
|
+
}
|
|
52
|
+
const token = token_generate();
|
|
53
|
+
const daemon = new CalypsoDaemon({
|
|
54
|
+
engine,
|
|
55
|
+
token,
|
|
56
|
+
host: '127.0.0.1',
|
|
57
|
+
port: 0,
|
|
58
|
+
// Only the daemon holds the session context, so it renders the themed
|
|
59
|
+
// prompt and pushes it to surfaces.
|
|
60
|
+
promptProvider: () => sessionPrompt_render(),
|
|
61
|
+
});
|
|
62
|
+
sink_set(new DaemonSink(daemon));
|
|
63
|
+
// Interactivity is a surface capability: a builtin that prompts, or a
|
|
64
|
+
// pipeline segment, reaches the surface running the command through the
|
|
65
|
+
// daemon's brokers, over the wire, without knowing the transport — and
|
|
66
|
+
// nothing ever spawns on the daemon host.
|
|
67
|
+
const surface = {
|
|
68
|
+
capabilities: { hiddenInput: true, localEdit: true, tty: true, pipeSegments: true },
|
|
69
|
+
prompt: (request) => daemon.prompt_current(request.message, request.hidden ?? false),
|
|
70
|
+
pipeSegment: (command, input) => daemon.pipe_current(command, input),
|
|
71
|
+
localEdit: (request) => daemon.edit_current(request.content, request.extension),
|
|
72
|
+
};
|
|
73
|
+
surface_set(surface);
|
|
74
|
+
const port = await daemon.start();
|
|
75
|
+
const url = `ws://127.0.0.1:${port}`;
|
|
76
|
+
discovery_write({ url, token });
|
|
77
|
+
console.log(chalk.green(`[+] CALYPSO daemon listening on ${url}`));
|
|
78
|
+
console.log(chalk.gray(` token: ${token}`));
|
|
79
|
+
console.log(chalk.gray(` discovery: ${discovery_path()}`));
|
|
80
|
+
console.log(chalk.gray(' attach a surface with: chell --remote'));
|
|
81
|
+
}
|
|
82
|
+
//# sourceMappingURL=launch.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"launch.js","sourceRoot":"","sources":["../../src/daemon/launch.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -4,21 +4,11 @@
|
|
|
4
4
|
*
|
|
5
5
|
* @module
|
|
6
6
|
*/
|
|
7
|
-
// Suppress DEP0169 warning from axios/proxy-from-env dependency.
|
|
8
|
-
// proxy-from-env 1.1.0 (pulled via axios) still uses url.parse(), which triggers
|
|
9
|
-
// a deprecation warning in Node. This suppression is safe to remove once that
|
|
10
|
-
// dependency migrates to the WHATWG URL API or axios drops it.
|
|
11
|
-
const originalEmitWarning = process.emitWarning;
|
|
12
|
-
process.emitWarning = function (warning, ...args) {
|
|
13
|
-
if (typeof warning === 'string' &&
|
|
14
|
-
(warning.includes('DEP0169') || warning.includes('url.parse()'))) {
|
|
15
|
-
return;
|
|
16
|
-
}
|
|
17
|
-
return originalEmitWarning.call(process, warning, ...args);
|
|
18
|
-
};
|
|
19
7
|
import { fileURLToPath } from 'url';
|
|
20
8
|
import { realpathSync } from 'fs';
|
|
9
|
+
import { warnings_suppress } from './core/warnings.js';
|
|
21
10
|
import { chell_start } from './core/boot.js';
|
|
11
|
+
warnings_suppress();
|
|
22
12
|
const currentFile = fileURLToPath(import.meta.url);
|
|
23
13
|
// Compare real paths to handle symlinks (e.g. global install)
|
|
24
14
|
let isMain = false;
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAEA;;;;GAIG;AAEH,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAEA;;;;GAIG;AAEH,OAAO,EAAE,aAAa,EAAE,MAAM,KAAK,CAAC;AACpC,OAAO,EAAE,YAAY,EAAE,MAAM,IAAI,CAAC;AAClC,OAAO,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AACvD,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAE7C,iBAAiB,EAAE,CAAC;AAEpB,MAAM,WAAW,GAAW,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAE3D,8DAA8D;AAC9D,IAAI,MAAM,GAAY,KAAK,CAAC;AAC5B,IAAI,CAAC;IACH,MAAM,GAAG,YAAY,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,YAAY,CAAC,WAAW,CAAC,CAAC;AACvE,CAAC;AAAC,OAAO,CAAU,EAAE,CAAC;IACpB,qBAAqB;AACvB,CAAC;AAED,IAAI,MAAM,EAAE,CAAC;IACX,WAAW,EAAE,CAAC;AAChB,CAAC"}
|
package/dist/lib/spinner.js
CHANGED
|
@@ -4,6 +4,7 @@
|
|
|
4
4
|
* @module
|
|
5
5
|
*/
|
|
6
6
|
import chalk from 'chalk';
|
|
7
|
+
import { sink_get } from '../core/sink.js';
|
|
7
8
|
/**
|
|
8
9
|
* Terminal spinner indicating progress of async work.
|
|
9
10
|
*/
|
|
@@ -32,7 +33,7 @@ export class Spinner {
|
|
|
32
33
|
this.showTiming = showTiming;
|
|
33
34
|
this.startTime = Date.now();
|
|
34
35
|
// Hide cursor
|
|
35
|
-
|
|
36
|
+
sink_get().status_write('\x1B[?25l');
|
|
36
37
|
this.interval = setInterval(() => {
|
|
37
38
|
const frame = this.frames[this.frameIndex = (this.frameIndex + 1) % this.frames.length];
|
|
38
39
|
let displayMessage = this.message;
|
|
@@ -44,7 +45,7 @@ export class Spinner {
|
|
|
44
45
|
// Note: We use chalk.gray for the message to match the existing "Fetching..." style.
|
|
45
46
|
// \x1b[K erases to end-of-line so a shorter message never leaves the
|
|
46
47
|
// tail of a longer previous one behind.
|
|
47
|
-
|
|
48
|
+
sink_get().status_write(`\r\x1b[K${chalk.bgBlack.cyanBright.bold(frame)} ${chalk.gray(displayMessage)}`);
|
|
48
49
|
}, 80);
|
|
49
50
|
}
|
|
50
51
|
stop(clearLine = true) {
|
|
@@ -54,10 +55,10 @@ export class Spinner {
|
|
|
54
55
|
}
|
|
55
56
|
if (this.spinnerActive) {
|
|
56
57
|
if (clearLine) {
|
|
57
|
-
|
|
58
|
+
sink_get().status_write('\r\x1b[K'); // Clear line
|
|
58
59
|
}
|
|
59
60
|
// Show cursor
|
|
60
|
-
|
|
61
|
+
sink_get().status_write('\x1B[?25h');
|
|
61
62
|
this.spinnerActive = false;
|
|
62
63
|
}
|
|
63
64
|
}
|
package/dist/lib/spinner.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"spinner.js","sourceRoot":"","sources":["../../src/lib/spinner.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,MAAM,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"spinner.js","sourceRoot":"","sources":["../../src/lib/spinner.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAE3C;;GAEG;AACH,MAAM,OAAO,OAAO;IACV,QAAQ,GAA0B,IAAI,CAAC;IACvC,OAAO,GAAW,EAAE,CAAC;IACrB,MAAM,GAAa,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;IAC5D,UAAU,GAAW,CAAC,CAAC;IACvB,aAAa,GAAY,KAAK,CAAC;IAC/B,SAAS,GAAW,CAAC,CAAC;IACtB,UAAU,GAAY,KAAK,CAAC;IAEpC,YAAY,iBAAyB,YAAY;QAC/C,IAAI,CAAC,OAAO,GAAG,cAAc,CAAC;IAChC,CAAC;IAEM,KAAK,CAAC,OAAgB,EAAE,aAAsB,KAAK;QACxD,2DAA2D;QAC3D,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;YAC1B,OAAO;QACT,CAAC;QAED,IAAI,IAAI,CAAC,aAAa,EAAE,CAAC;YACvB,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,4BAA4B;QAC3C,CAAC;QACD,IAAI,CAAC,OAAO,GAAG,OAAO,IAAI,IAAI,CAAC,OAAO,CAAC;QACvC,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC;QAC1B,IAAI,CAAC,UAAU,GAAG,CAAC,CAAC;QACpB,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;QAC7B,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QAE5B,cAAc;QACd,QAAQ,EAAE,CAAC,YAAY,CAAC,WAAW,CAAC,CAAC;QAErC,IAAI,CAAC,QAAQ,GAAG,WAAW,CAAC,GAAG,EAAE;YAC/B,MAAM,KAAK,GAAW,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,UAAU,GAAG,CAAC,IAAI,CAAC,UAAU,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;YAChG,IAAI,cAAc,GAAW,IAAI,CAAC,OAAO,CAAC;YAE1C,wBAAwB;YACxB,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;gBACpB,MAAM,cAAc,GAAW,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;gBACjF,cAAc,GAAG,GAAG,IAAI,CAAC,OAAO,KAAK,cAAc,IAAI,CAAC;YAC1D,CAAC;YAED,qFAAqF;YACrF,qEAAqE;YACrE,wCAAwC;YACxC,QAAQ,EAAE,CAAC,YAAY,CAAC,WAAW,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,CAAC,cAAc,CAAC,EAAE,CAAC,CAAC;QAC3G,CAAC,EAAE,EAAE,CAAC,CAAC;IACT,CAAC;IAEM,IAAI,CAAC,YAAqB,IAAI;QACnC,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;YAClB,aAAa,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YAC7B,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;QACvB,CAAC;QACD,IAAI,IAAI,CAAC,aAAa,EAAE,CAAC;YACvB,IAAI,SAAS,EAAE,CAAC;gBACd,QAAQ,EAAE,CAAC,YAAY,CAAC,UAAU,CAAC,CAAC,CAAC,aAAa;YACpD,CAAC;YACD,cAAc;YACd,QAAQ,EAAE,CAAC,YAAY,CAAC,WAAW,CAAC,CAAC;YACrC,IAAI,CAAC,aAAa,GAAG,KAAK,CAAC;QAC7B,CAAC;IACH,CAAC;IAEM,aAAa,CAAC,UAAkB;QACrC,IAAI,CAAC,OAAO,GAAG,UAAU,CAAC;IAC5B,CAAC;CACF;AAED,MAAM,aAAa,GAAY,IAAI,OAAO,EAAE,CAAC;AAC7C,OAAO,EAAE,aAAa,IAAI,OAAO,EAAE,CAAC"}
|
package/dist/lib/vfs/vfs.js
CHANGED
|
@@ -163,9 +163,13 @@ export class VFS {
|
|
|
163
163
|
// If we served stale cache, show indicator and refresh in background
|
|
164
164
|
if (wasStale) {
|
|
165
165
|
console.log(chalk.gray('(cached, refreshing...)'));
|
|
166
|
-
// Trigger background refresh - don't await
|
|
167
|
-
|
|
168
|
-
|
|
166
|
+
// Trigger background refresh - don't await. Fenced in its own error-stack
|
|
167
|
+
// scope so its pushes/pops cannot corrupt a concurrent foreground
|
|
168
|
+
// command's error-drain window.
|
|
169
|
+
errorStack.scope_run(() => {
|
|
170
|
+
this.refreshInBackground(effectivePath, options).catch(() => {
|
|
171
|
+
// Silently ignore refresh errors - user has moved on
|
|
172
|
+
});
|
|
169
173
|
});
|
|
170
174
|
}
|
|
171
175
|
}
|
package/dist/lib/vfs/vfs.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"vfs.js","sourceRoot":"","sources":["../../../src/lib/vfs/vfs.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"vfs.js","sourceRoot":"","sources":["../../../src/lib/vfs/vfs.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @file The `chell --remote` client.
|
|
3
|
+
*
|
|
4
|
+
* Attaches to a same-user CALYPSO daemon and drives it with the ordinary REPL,
|
|
5
|
+
* proving the sibling-surfaces topology: the same REPL runs over either an
|
|
6
|
+
* in-process engine or a remote one. The remote engine delivers received
|
|
7
|
+
* output to the sink exactly as the local engine delivers live, so the REPL is
|
|
8
|
+
* unchanged. Another surface's activity (the session bus) is printed as it
|
|
9
|
+
* arrives.
|
|
10
|
+
*
|
|
11
|
+
* @module
|
|
12
|
+
*/
|
|
13
|
+
import chalk from 'chalk';
|
|
14
|
+
import { REPL } from '../core/repl.js';
|
|
15
|
+
import { RemoteEngine } from './remoteEngine.js';
|
|
16
|
+
import { discovery_read } from './discovery.js';
|
|
17
|
+
import { surface_get } from '../core/surface.js';
|
|
18
|
+
/**
|
|
19
|
+
* Runs the remote client: discovers a daemon, attaches, and enters the REPL.
|
|
20
|
+
*
|
|
21
|
+
* @returns A promise that resolves when the client session ends.
|
|
22
|
+
*/
|
|
23
|
+
export async function remote_run() {
|
|
24
|
+
const discovery = discovery_read();
|
|
25
|
+
if (!discovery) {
|
|
26
|
+
console.error(chalk.red('[!] No CALYPSO daemon found. Start one with: chell --daemon'));
|
|
27
|
+
process.exit(1);
|
|
28
|
+
}
|
|
29
|
+
let engine;
|
|
30
|
+
try {
|
|
31
|
+
engine = await RemoteEngine.connect({
|
|
32
|
+
url: discovery.url,
|
|
33
|
+
token: discovery.token,
|
|
34
|
+
onSession: (surface, envelope) => {
|
|
35
|
+
if (envelope.rendered.length > 0) {
|
|
36
|
+
process.stdout.write(`\n${chalk.gray(`[surface ${surface.slice(0, 6)}]`)}\n${envelope.rendered}`);
|
|
37
|
+
}
|
|
38
|
+
},
|
|
39
|
+
onPrompt: (message, hidden) =>
|
|
40
|
+
// The REPL has installed the CLI surface (readline-backed) by the time
|
|
41
|
+
// a prompt can arrive, so this reads from the local terminal.
|
|
42
|
+
surface_get().prompt({ message, hidden }),
|
|
43
|
+
onPipe: (command, input) =>
|
|
44
|
+
// Pipeline segments run on this machine, through the client's own
|
|
45
|
+
// tools — never on the daemon host.
|
|
46
|
+
surface_get().pipeSegment(command, input),
|
|
47
|
+
onEdit: (content, extension) =>
|
|
48
|
+
// Editing happens in this machine's editor.
|
|
49
|
+
surface_get().localEdit({ content, extension }),
|
|
50
|
+
onClose: () => {
|
|
51
|
+
console.log(chalk.yellow('\n[!] Daemon disconnected.'));
|
|
52
|
+
process.exit(0);
|
|
53
|
+
},
|
|
54
|
+
});
|
|
55
|
+
}
|
|
56
|
+
catch (err) {
|
|
57
|
+
const message = err instanceof Error ? err.message : String(err);
|
|
58
|
+
console.error(chalk.red(`[!] Could not attach to the daemon: ${message}`));
|
|
59
|
+
process.exit(1);
|
|
60
|
+
return;
|
|
61
|
+
}
|
|
62
|
+
console.log(chalk.green(`[+] Attached to CALYPSO daemon at ${discovery.url}`));
|
|
63
|
+
console.log(chalk.gray(" Type 'exit' to detach.\n"));
|
|
64
|
+
// The daemon pushes the themed prompt string; the REPL renders whatever the
|
|
65
|
+
// daemon last sent, falling back until the first push arrives.
|
|
66
|
+
const repl = new REPL(engine, {
|
|
67
|
+
promptText: () => engine.promptLine() || 'chell(remote) ❯ ',
|
|
68
|
+
});
|
|
69
|
+
await repl.start();
|
|
70
|
+
}
|
|
71
|
+
//# sourceMappingURL=client.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"client.js","sourceRoot":"","sources":["../../src/remote/client.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AACH,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,OAAO,EAAE,IAAI,EAAE,MAAM,iBAAiB,CAAC;AACvC,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,EAAE,cAAc,EAAkB,MAAM,gBAAgB,CAAC;AAChE,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAEjD;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,UAAU;IAC9B,MAAM,SAAS,GAAqB,cAAc,EAAE,CAAC;IACrD,IAAI,CAAC,SAAS,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,8DAA8D,CAAC,CAAC,CAAC;QACzF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,IAAI,MAAoB,CAAC;IACzB,IAAI,CAAC;QACH,MAAM,GAAG,MAAM,YAAY,CAAC,OAAO,CAAC;YAClC,GAAG,EAAE,SAAS,CAAC,GAAG;YAClB,KAAK,EAAE,SAAS,CAAC,KAAK;YACtB,SAAS,EAAE,CAAC,OAAe,EAAE,QAAyB,EAAQ,EAAE;gBAC9D,IAAI,QAAQ,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;oBACjC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,KAAK,CAAC,IAAI,CAAC,YAAY,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,KAAK,QAAQ,CAAC,QAAQ,EAAE,CAAC,CAAC;gBACpG,CAAC;YACH,CAAC;YACD,QAAQ,EAAE,CAAC,OAAe,EAAE,MAAe,EAAmB,EAAE;YAC9D,uEAAuE;YACvE,8DAA8D;YAC9D,WAAW,EAAE,CAAC,MAAM,CAAC,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC;YAC3C,MAAM,EAAE,CAAC,OAAe,EAAE,KAAa,EAAmB,EAAE;YAC1D,kEAAkE;YAClE,oCAAoC;YACpC,WAAW,EAAE,CAAC,WAAW,CAAC,OAAO,EAAE,KAAK,CAAC;YAC3C,MAAM,EAAE,CAAC,OAAe,EAAE,SAA6B,EAAkD,EAAE;YACzG,4CAA4C;YAC5C,WAAW,EAAE,CAAC,SAAS,CAAC,EAAE,OAAO,EAAE,SAAS,EAAE,CAAC;YACjD,OAAO,EAAE,GAAS,EAAE;gBAClB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,4BAA4B,CAAC,CAAC,CAAC;gBACxD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAClB,CAAC;SACF,CAAC,CAAC;IACL,CAAC;IAAC,OAAO,GAAY,EAAE,CAAC;QACtB,MAAM,OAAO,GAAW,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QACzE,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,uCAAuC,OAAO,EAAE,CAAC,CAAC,CAAC;QAC3E,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAChB,OAAO;IACT,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,qCAAqC,SAAS,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;IAC/E,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,8BAA8B,CAAC,CAAC,CAAC;IAExD,4EAA4E;IAC5E,+DAA+D;IAC/D,MAAM,IAAI,GAAS,IAAI,IAAI,CAAC,MAAM,EAAE;QAClC,UAAU,EAAE,GAAW,EAAE,CAAC,MAAM,CAAC,UAAU,EAAE,IAAI,kBAAkB;KACpE,CAAC,CAAC;IACH,MAAM,IAAI,CAAC,KAAK,EAAE,CAAC;AACrB,CAAC"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
/** What the discovery file records. */
|
|
2
|
+
export interface Discovery {
|
|
3
|
+
url: string;
|
|
4
|
+
token: string;
|
|
5
|
+
}
|
|
6
|
+
/**
|
|
7
|
+
* The per-user discovery file path.
|
|
8
|
+
*
|
|
9
|
+
* @returns The path the daemon writes and a client reads.
|
|
10
|
+
*/
|
|
11
|
+
export declare function discovery_path(): string;
|
|
12
|
+
/**
|
|
13
|
+
* Writes the discovery file, readable only by the current user.
|
|
14
|
+
*
|
|
15
|
+
* @param discovery - The URL and token to record.
|
|
16
|
+
*/
|
|
17
|
+
export declare function discovery_write(discovery: Discovery): void;
|
|
18
|
+
/**
|
|
19
|
+
* Reads the discovery file.
|
|
20
|
+
*
|
|
21
|
+
* @returns The recorded URL and token, or null when no daemon has advertised.
|
|
22
|
+
*/
|
|
23
|
+
export declare function discovery_read(): Discovery | null;
|