@sapiom/harness 0.6.0 → 0.8.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/CHANGELOG.md +134 -0
- package/dist/cli/doctor.d.ts.map +1 -1
- package/dist/cli/doctor.js +4 -2
- package/dist/cli/doctor.js.map +1 -1
- package/dist/core/adapters/claude-code.d.ts +36 -0
- package/dist/core/adapters/claude-code.d.ts.map +1 -1
- package/dist/core/adapters/claude-code.js +48 -1
- package/dist/core/adapters/claude-code.js.map +1 -1
- package/dist/core/adapters/codex.d.ts +6 -0
- package/dist/core/adapters/codex.d.ts.map +1 -1
- package/dist/core/adapters/codex.js +19 -13
- package/dist/core/adapters/codex.js.map +1 -1
- package/dist/core/bracketed-paste.d.ts +16 -0
- package/dist/core/bracketed-paste.d.ts.map +1 -1
- package/dist/core/bracketed-paste.js +17 -3
- package/dist/core/bracketed-paste.js.map +1 -1
- package/dist/core/canvas-manifest-check.d.ts.map +1 -1
- package/dist/core/canvas-manifest-check.js +3 -0
- package/dist/core/canvas-manifest-check.js.map +1 -1
- package/dist/core/canvas-watcher.d.ts +25 -0
- package/dist/core/canvas-watcher.d.ts.map +1 -1
- package/dist/core/canvas-watcher.js +31 -5
- package/dist/core/canvas-watcher.js.map +1 -1
- package/dist/core/errors.d.ts +12 -0
- package/dist/core/errors.d.ts.map +1 -1
- package/dist/core/errors.js +14 -0
- package/dist/core/errors.js.map +1 -1
- package/dist/core/example-seed.js +1 -1
- package/dist/core/example-seed.js.map +1 -1
- package/dist/core/inject/claude-settings.d.ts.map +1 -1
- package/dist/core/inject/claude-settings.js +69 -7
- package/dist/core/inject/claude-settings.js.map +1 -1
- package/dist/core/inject/mcp-config.d.ts +21 -0
- package/dist/core/inject/mcp-config.d.ts.map +1 -1
- package/dist/core/inject/mcp-config.js +23 -13
- package/dist/core/inject/mcp-config.js.map +1 -1
- package/dist/core/inject/skills-plugin.d.ts.map +1 -1
- package/dist/core/inject/skills-plugin.js +41 -25
- package/dist/core/inject/skills-plugin.js.map +1 -1
- package/dist/core/input-contract.d.ts +10 -0
- package/dist/core/input-contract.d.ts.map +1 -0
- package/dist/core/input-contract.js +37 -0
- package/dist/core/input-contract.js.map +1 -0
- package/dist/core/render-local-run.d.ts +10 -5
- package/dist/core/render-local-run.d.ts.map +1 -1
- package/dist/core/render-local-run.js +31 -4
- package/dist/core/render-local-run.js.map +1 -1
- package/dist/core/render-run-state.d.ts.map +1 -1
- package/dist/core/render-run-state.js +23 -2
- package/dist/core/render-run-state.js.map +1 -1
- package/dist/core/run-local-bootstrap.d.ts +8 -1
- package/dist/core/run-local-bootstrap.d.ts.map +1 -1
- package/dist/core/run-local-bootstrap.js +5 -7
- package/dist/core/run-local-bootstrap.js.map +1 -1
- package/dist/core/session-manager.d.ts +29 -0
- package/dist/core/session-manager.d.ts.map +1 -1
- package/dist/core/session-manager.js +105 -1
- package/dist/core/session-manager.js.map +1 -1
- package/dist/core/spawn-target.d.ts +16 -0
- package/dist/core/spawn-target.d.ts.map +1 -1
- package/dist/core/spawn-target.js +87 -19
- package/dist/core/spawn-target.js.map +1 -1
- package/dist/core/strip-ansi.js +49 -11
- package/dist/core/strip-ansi.js.map +1 -1
- package/dist/core/task-manager.js +1 -1
- package/dist/core/task-manager.js.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/server/actions.d.ts +4 -0
- package/dist/server/actions.d.ts.map +1 -1
- package/dist/server/actions.js +34 -0
- package/dist/server/actions.js.map +1 -1
- package/dist/server/canvas-render.d.ts +9 -1
- package/dist/server/canvas-render.d.ts.map +1 -1
- package/dist/server/canvas-render.js +1 -0
- package/dist/server/canvas-render.js.map +1 -1
- package/dist/server/cwd-normalize.d.ts +18 -0
- package/dist/server/cwd-normalize.d.ts.map +1 -0
- package/dist/server/cwd-normalize.js +23 -0
- package/dist/server/cwd-normalize.js.map +1 -0
- package/dist/server/error-handler.d.ts +13 -0
- package/dist/server/error-handler.d.ts.map +1 -0
- package/dist/server/error-handler.js +7 -0
- package/dist/server/error-handler.js.map +1 -0
- package/dist/server/index.d.ts +8 -0
- package/dist/server/index.d.ts.map +1 -1
- package/dist/server/index.js +13 -6
- package/dist/server/index.js.map +1 -1
- package/dist/server/rest.d.ts.map +1 -1
- package/dist/server/rest.js +29 -9
- package/dist/server/rest.js.map +1 -1
- package/dist/shared/types.d.ts +79 -3
- package/dist/shared/types.d.ts.map +1 -1
- package/dist/shared/types.js.map +1 -1
- package/dist/web/assets/index-C3nbT8wm.css +32 -0
- package/dist/web/assets/index-DlI78kCp.js +490 -0
- package/dist/web/canvas/sess-boot/index.html +1 -1
- package/dist/web/index.html +2 -2
- package/package.json +4 -3
- package/dist/web/assets/index-C-h9_B2u.js +0 -468
- package/dist/web/assets/index-Dcvwqho4.css +0 -32
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"canvas-manifest-check.js","sourceRoot":"","sources":["../../src/core/canvas-manifest-check.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAC9C,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAEzC;;;sCAGsC;AACtC,MAAM,gBAAgB,GAAG,KAAM,CAAC;AAChC,MAAM,gBAAgB,GAAG,EAAE,GAAG,IAAI,GAAG,IAAI,CAAC;AAE1C,wEAAwE;AACxE,yDAAyD;AACzD,SAAS,WAAW;IAClB,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;IACvE,sEAAsE;IACtE,qEAAqE;IACrE,8EAA8E;IAC9E,gEAAgE;IAChE,OAAO,IAAI,CAAC,OAAO,CAAC,yBAAyB,EAAE,uBAAuB,CAAC,CAAC;AAC1E,CAAC;AAED,MAAM,aAAa,GAAG;;;;;;;;;;;;;;;;;;CAkBrB,CAAC;AAeF;;;;;;;;;;;;GAYG;AACH,SAAS,kBAAkB,CAAC,SAAiB,EAAE,MAAc;IAC3D,OAAO,MAAM,CAAC,QAAQ,CAAC,SAAS,CAAC;QAC/B,CAAC,CAAC,MAAM;QACR,CAAC,CAAC,GAAG,MAAM,cAAc,SAAS,GAAG,CAAC;AAC1C,CAAC;AAED;;2DAE2D;AAC3D,MAAM,UAAU,gBAAgB,CAC9B,SAAiB;IAEjB,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;QAC7B,QAAQ,CACN,OAAO,CAAC,QAAQ,EAChB,CAAC,qBAAqB,EAAE,IAAI,EAAE,aAAa,CAAC,EAC5C;YACE,GAAG,EAAE,WAAW,EAAE;YAClB,GAAG,EAAE;gBACH,GAAG,OAAO,CAAC,GAAG;gBACd,8BAA8B,EAAE,SAAS;gBACzC,gEAAgE;gBAChE,oEAAoE;gBACpE,sEAAsE;gBACtE,kDAAkD;gBAClD,GAAG,CAAC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,oBAAoB,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;aACpE;YACD,OAAO,EAAE,gBAAgB;YACzB,SAAS,EAAE,gBAAgB;
|
|
1
|
+
{"version":3,"file":"canvas-manifest-check.js","sourceRoot":"","sources":["../../src/core/canvas-manifest-check.ts"],"names":[],"mappings":"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"}
|
|
@@ -20,6 +20,31 @@ export interface SessionWatcherCallbacks {
|
|
|
20
20
|
onCanvasChange: (harnessSessionId: string) => void;
|
|
21
21
|
onSourceChange: (harnessSessionId: string) => void;
|
|
22
22
|
}
|
|
23
|
+
/**
|
|
24
|
+
* One session's watcher. Watches the whole project root recursively and routes
|
|
25
|
+
* each change: a change under CANVAS_DIR is a rendered-output change (reload
|
|
26
|
+
* the iframe); a `.ts`/`.tsx` change anywhere else is a workflow-source change
|
|
27
|
+
* (re-render). No separate "wait for the dir to appear" phase, and it survives
|
|
28
|
+
* the canvas dir itself being deleted/recreated. Falls back to polling two
|
|
29
|
+
* directory-tree fingerprints (canvas output + sources) when recursive
|
|
30
|
+
* `fs.watch` isn't available (notably Linux) or the watcher errors out.
|
|
31
|
+
*/
|
|
32
|
+
/**
|
|
33
|
+
* Normalize an `fs.watch`-reported relative path to forward-slash form.
|
|
34
|
+
*
|
|
35
|
+
* `fs.watch` reports NATIVE separators — `.sapiom\canvas\renders\x.html` on
|
|
36
|
+
* Windows — while CANVAS_DIR is a POSIX literal. Comparing them raw meant
|
|
37
|
+
* `isCanvasPath()` was false for EVERY canvas write on Windows, so
|
|
38
|
+
* `canvas.reload` was never published and the pane sat on stale HTML (the
|
|
39
|
+
* shipped symptom: the "Preparing your agent" placeholder surviving long
|
|
40
|
+
* after the real step graph was on disk — every hot-reload path was deaf).
|
|
41
|
+
*
|
|
42
|
+
* Splitting on `path.sep` (not a blanket backslash replace) keeps POSIX
|
|
43
|
+
* filenames that legitimately CONTAIN a backslash intact. Exported, with the
|
|
44
|
+
* separator injectable, so the Windows behavior is provable from POSIX CI —
|
|
45
|
+
* same pattern as server/cwd-normalize.ts.
|
|
46
|
+
*/
|
|
47
|
+
export declare function normalizeWatchPath(filename: string, sep?: string): string;
|
|
23
48
|
export interface CanvasWatcherManagerDeps {
|
|
24
49
|
/** Debounced per-session notification that the RENDERED canvas output under
|
|
25
50
|
* `.sapiom/canvas/` changed — the integrator broadcasts
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"canvas-watcher.d.ts","sourceRoot":"","sources":["../../src/core/canvas-watcher.ts"],"names":[],"mappings":"AAeA;;;;GAIG;AACH,wBAAgB,iBAAiB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAiB3D;AAED;;;;;;GAMG;AACH,wBAAgB,uBAAuB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CA4B5D;AAED;;;+BAG+B;AAC/B,MAAM,WAAW,uBAAuB;IACtC,cAAc,EAAE,CAAC,gBAAgB,EAAE,MAAM,KAAK,IAAI,CAAC;IACnD,cAAc,EAAE,CAAC,gBAAgB,EAAE,MAAM,KAAK,IAAI,CAAC;CACpD;
|
|
1
|
+
{"version":3,"file":"canvas-watcher.d.ts","sourceRoot":"","sources":["../../src/core/canvas-watcher.ts"],"names":[],"mappings":"AAeA;;;;GAIG;AACH,wBAAgB,iBAAiB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAiB3D;AAED;;;;;;GAMG;AACH,wBAAgB,uBAAuB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CA4B5D;AAED;;;+BAG+B;AAC/B,MAAM,WAAW,uBAAuB;IACtC,cAAc,EAAE,CAAC,gBAAgB,EAAE,MAAM,KAAK,IAAI,CAAC;IACnD,cAAc,EAAE,CAAC,gBAAgB,EAAE,MAAM,KAAK,IAAI,CAAC;CACpD;AAED;;;;;;;;GAQG;AACH;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,GAAE,MAAiB,GAAG,MAAM,CAEnF;AA8HD,MAAM,WAAW,wBAAwB;IACvC;;+EAE2E;IAC3E,QAAQ,CAAC,gBAAgB,EAAE,MAAM,GAAG,IAAI,CAAC;IACzC;;8EAE0E;IAC1E,cAAc,CAAC,gBAAgB,EAAE,MAAM,GAAG,IAAI,CAAC;CAChD;AAED,uEAAuE;AACvE,qBAAa,oBAAoB;IAGnB,OAAO,CAAC,QAAQ,CAAC,IAAI;IAFjC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAA2C;gBAEvC,IAAI,EAAE,wBAAwB;IAE3D;iCAC6B;IAC7B,KAAK,CAAC,gBAAgB,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,IAAI;IAWlD,IAAI,CAAC,gBAAgB,EAAE,MAAM,GAAG,IAAI;IAKpC,OAAO,IAAI,IAAI;IAIf,8EAA8E;IAC9E,IAAI,IAAI,IAAI,MAAM,CAEjB;CACF"}
|
|
@@ -85,6 +85,24 @@ export function snapshotWorkflowSources(root) {
|
|
|
85
85
|
* directory-tree fingerprints (canvas output + sources) when recursive
|
|
86
86
|
* `fs.watch` isn't available (notably Linux) or the watcher errors out.
|
|
87
87
|
*/
|
|
88
|
+
/**
|
|
89
|
+
* Normalize an `fs.watch`-reported relative path to forward-slash form.
|
|
90
|
+
*
|
|
91
|
+
* `fs.watch` reports NATIVE separators — `.sapiom\canvas\renders\x.html` on
|
|
92
|
+
* Windows — while CANVAS_DIR is a POSIX literal. Comparing them raw meant
|
|
93
|
+
* `isCanvasPath()` was false for EVERY canvas write on Windows, so
|
|
94
|
+
* `canvas.reload` was never published and the pane sat on stale HTML (the
|
|
95
|
+
* shipped symptom: the "Preparing your agent" placeholder surviving long
|
|
96
|
+
* after the real step graph was on disk — every hot-reload path was deaf).
|
|
97
|
+
*
|
|
98
|
+
* Splitting on `path.sep` (not a blanket backslash replace) keeps POSIX
|
|
99
|
+
* filenames that legitimately CONTAIN a backslash intact. Exported, with the
|
|
100
|
+
* separator injectable, so the Windows behavior is provable from POSIX CI —
|
|
101
|
+
* same pattern as server/cwd-normalize.ts.
|
|
102
|
+
*/
|
|
103
|
+
export function normalizeWatchPath(filename, sep = path.sep) {
|
|
104
|
+
return sep === "/" ? filename : filename.split(sep).join("/");
|
|
105
|
+
}
|
|
88
106
|
class SessionCanvasWatcher {
|
|
89
107
|
constructor(cwd, harnessSessionId, callbacks) {
|
|
90
108
|
this.cwd = cwd;
|
|
@@ -98,7 +116,11 @@ class SessionCanvasWatcher {
|
|
|
98
116
|
this.lastSnapshot = "";
|
|
99
117
|
this.lastSourceSnapshot = "";
|
|
100
118
|
this.canvasDir = path.join(cwd, CANVAS_DIR);
|
|
101
|
-
|
|
119
|
+
// Forward-slash prefix: every filename is normalized via
|
|
120
|
+
// normalizeWatchPath before comparison, so the POSIX-literal CANVAS_DIR
|
|
121
|
+
// and the prefix agree on every platform. (CANVAS_DIR + path.sep produced
|
|
122
|
+
// a mixed-separator prefix on Windows that could never match anything.)
|
|
123
|
+
this.canvasPrefix = CANVAS_DIR + "/";
|
|
102
124
|
this.arm();
|
|
103
125
|
}
|
|
104
126
|
scheduleCanvasChange() {
|
|
@@ -118,23 +140,27 @@ class SessionCanvasWatcher {
|
|
|
118
140
|
isCanvasPath(filename) {
|
|
119
141
|
return filename === CANVAS_DIR || filename.startsWith(this.canvasPrefix);
|
|
120
142
|
}
|
|
143
|
+
/** `filename` is the normalized (forward-slash) form — see normalizeWatchPath. */
|
|
121
144
|
isWorkflowSourcePath(filename) {
|
|
122
145
|
if (!SOURCE_EXTENSIONS.has(path.extname(filename)))
|
|
123
146
|
return false;
|
|
124
|
-
return !filename.split(
|
|
147
|
+
return !filename.split("/").some((seg) => SKIP_DIR_NAMES.has(seg));
|
|
125
148
|
}
|
|
126
149
|
arm() {
|
|
127
150
|
if (this.closed)
|
|
128
151
|
return;
|
|
129
152
|
try {
|
|
130
|
-
this.watcher = fs.watch(this.cwd, { recursive: true }, (event,
|
|
153
|
+
this.watcher = fs.watch(this.cwd, { recursive: true }, (event, rawFilename) => {
|
|
131
154
|
// A `null` filename means the platform couldn't report which path
|
|
132
155
|
// changed — do both (reload AND re-render) rather than miss an update.
|
|
133
|
-
if (
|
|
156
|
+
if (rawFilename === null) {
|
|
134
157
|
this.scheduleCanvasChange();
|
|
135
158
|
this.scheduleSourceChange();
|
|
136
159
|
return;
|
|
137
160
|
}
|
|
161
|
+
// Native separators → forward-slash before ANY comparison; on
|
|
162
|
+
// Windows the raw form matches nothing (see normalizeWatchPath).
|
|
163
|
+
const filename = normalizeWatchPath(rawFilename);
|
|
138
164
|
if (this.isCanvasPath(filename)) {
|
|
139
165
|
this.scheduleCanvasChange();
|
|
140
166
|
// A rename at (or above) the canvas dir — e.g. an editor's atomic
|
|
@@ -142,7 +168,7 @@ class SessionCanvasWatcher {
|
|
|
142
168
|
// time — can leave a recursive watcher no longer covering the new
|
|
143
169
|
// inode on some platforms. Re-arm defensively rather than risk
|
|
144
170
|
// silently going deaf.
|
|
145
|
-
if (event === "rename" && (filename === CANVAS_DIR || filename === path.dirname(CANVAS_DIR))) {
|
|
171
|
+
if (event === "rename" && (filename === CANVAS_DIR || filename === path.posix.dirname(CANVAS_DIR))) {
|
|
146
172
|
this.rearm();
|
|
147
173
|
}
|
|
148
174
|
return;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"canvas-watcher.js","sourceRoot":"","sources":["../../src/core/canvas-watcher.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"canvas-watcher.js","sourceRoot":"","sources":["../../src/core/canvas-watcher.ts"],"names":[],"mappings":"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"}
|
package/dist/core/errors.d.ts
CHANGED
|
@@ -9,6 +9,8 @@
|
|
|
9
9
|
* SessionAlreadyLiveError → 409
|
|
10
10
|
* SessionNotResumeableError → 409
|
|
11
11
|
* AdapterNotFoundError → 400
|
|
12
|
+
* SpawnTargetError → 400
|
|
13
|
+
* ExternalHarnessError → 409
|
|
12
14
|
*/
|
|
13
15
|
/** Base class for all typed harness errors. */
|
|
14
16
|
export declare class HarnessError extends Error {
|
|
@@ -61,6 +63,16 @@ export declare class SessionAlreadyLiveError extends HarnessError {
|
|
|
61
63
|
export declare class AdapterNotFoundError extends HarnessError {
|
|
62
64
|
constructor(harness: string);
|
|
63
65
|
}
|
|
66
|
+
/**
|
|
67
|
+
* Thrown by `resolveSpawnTarget` (core/spawn-target.ts) when a command cannot
|
|
68
|
+
* be turned into something `CreateProcess` can execute on Windows — not on
|
|
69
|
+
* PATH, an unparseable `.cmd`/`.bat` shim, or a shim whose target is missing.
|
|
70
|
+
* Every case is user-actionable ("install X", "restart to repair"), so it maps
|
|
71
|
+
* to HTTP 400 and the message is shown verbatim in the UI.
|
|
72
|
+
*/
|
|
73
|
+
export declare class SpawnTargetError extends HarnessError {
|
|
74
|
+
constructor(message: string);
|
|
75
|
+
}
|
|
64
76
|
/**
|
|
65
77
|
* Thrown when a spawn or send operation is attempted on an external-mode
|
|
66
78
|
* harness adapter (e.g. Conductor) whose sessions are managed by its own
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../src/core/errors.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../src/core/errors.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,+CAA+C;AAC/C,qBAAa,YAAa,SAAQ,KAAK;IACrC,mFAAmF;IACnF,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,uDAAuD;IACvD,QAAQ,CAAC,KAAK,CAAC,EAAE,OAAO,CAAC;gBAEb,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,OAAO;CAQ3D;AAED;;;GAGG;AACH,qBAAa,mBAAoB,SAAQ,YAAY;gBACvC,EAAE,EAAE,MAAM;CAGvB;AAED;;;;GAIG;AACH,qBAAa,oBAAqB,SAAQ,YAAY;gBACxC,EAAE,EAAE,MAAM;CAMvB;AAED;;;;;;;;;;GAUG;AACH,qBAAa,yBAA0B,SAAQ,YAAY;gBAC7C,EAAE,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM;CAGxC;AAED;;;GAGG;AACH,qBAAa,uBAAwB,SAAQ,YAAY;gBAC3C,EAAE,EAAE,MAAM;CAGvB;AAED;;;GAGG;AACH,qBAAa,oBAAqB,SAAQ,YAAY;gBACxC,OAAO,EAAE,MAAM;CAG5B;AAED;;;;;;GAMG;AACH,qBAAa,gBAAiB,SAAQ,YAAY;gBACpC,OAAO,EAAE,MAAM;CAG5B;AAED;;;;;;;;GAQG;AACH,qBAAa,oBAAqB,SAAQ,YAAY;IACpD,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;gBAEb,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM;CAO3C"}
|
package/dist/core/errors.js
CHANGED
|
@@ -9,6 +9,8 @@
|
|
|
9
9
|
* SessionAlreadyLiveError → 409
|
|
10
10
|
* SessionNotResumeableError → 409
|
|
11
11
|
* AdapterNotFoundError → 400
|
|
12
|
+
* SpawnTargetError → 400
|
|
13
|
+
* ExternalHarnessError → 409
|
|
12
14
|
*/
|
|
13
15
|
/** Base class for all typed harness errors. */
|
|
14
16
|
export class HarnessError extends Error {
|
|
@@ -74,6 +76,18 @@ export class AdapterNotFoundError extends HarnessError {
|
|
|
74
76
|
super("ADAPTER_NOT_FOUND", `No adapter registered for harness "${harness}"`);
|
|
75
77
|
}
|
|
76
78
|
}
|
|
79
|
+
/**
|
|
80
|
+
* Thrown by `resolveSpawnTarget` (core/spawn-target.ts) when a command cannot
|
|
81
|
+
* be turned into something `CreateProcess` can execute on Windows — not on
|
|
82
|
+
* PATH, an unparseable `.cmd`/`.bat` shim, or a shim whose target is missing.
|
|
83
|
+
* Every case is user-actionable ("install X", "restart to repair"), so it maps
|
|
84
|
+
* to HTTP 400 and the message is shown verbatim in the UI.
|
|
85
|
+
*/
|
|
86
|
+
export class SpawnTargetError extends HarnessError {
|
|
87
|
+
constructor(message) {
|
|
88
|
+
super("SPAWN_TARGET", message);
|
|
89
|
+
}
|
|
90
|
+
}
|
|
77
91
|
/**
|
|
78
92
|
* Thrown when a spawn or send operation is attempted on an external-mode
|
|
79
93
|
* harness adapter (e.g. Conductor) whose sessions are managed by its own
|
package/dist/core/errors.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"errors.js","sourceRoot":"","sources":["../../src/core/errors.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"errors.js","sourceRoot":"","sources":["../../src/core/errors.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,+CAA+C;AAC/C,MAAM,OAAO,YAAa,SAAQ,KAAK;IAMrC,YAAY,IAAY,EAAE,OAAe,EAAE,KAAe;QACxD,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;QACnB,sEAAsE;QACtE,IAAI,CAAC,IAAI,GAAG,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC;QAC5B,MAAM,CAAC,cAAc,CAAC,IAAI,EAAE,GAAG,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;IACpD,CAAC;CACF;AAED;;;GAGG;AACH,MAAM,OAAO,mBAAoB,SAAQ,YAAY;IACnD,YAAY,EAAU;QACpB,KAAK,CAAC,iBAAiB,EAAE,oBAAoB,EAAE,GAAG,CAAC,CAAC;IACtD,CAAC;CACF;AAED;;;;GAIG;AACH,MAAM,OAAO,oBAAqB,SAAQ,YAAY;IACpD,YAAY,EAAU;QACpB,KAAK,CACH,mBAAmB,EACnB,YAAY,EAAE,gFAAgF,CAC/F,CAAC;IACJ,CAAC;CACF;AAED;;;;;;;;;;GAUG;AACH,MAAM,OAAO,yBAA0B,SAAQ,YAAY;IACzD,YAAY,EAAU,EAAE,MAAe;QACrC,KAAK,CAAC,wBAAwB,EAAE,MAAM,IAAI,YAAY,EAAE,wCAAwC,CAAC,CAAC;IACpG,CAAC;CACF;AAED;;;GAGG;AACH,MAAM,OAAO,uBAAwB,SAAQ,YAAY;IACvD,YAAY,EAAU;QACpB,KAAK,CAAC,sBAAsB,EAAE,YAAY,EAAE,0BAA0B,CAAC,CAAC;IAC1E,CAAC;CACF;AAED;;;GAGG;AACH,MAAM,OAAO,oBAAqB,SAAQ,YAAY;IACpD,YAAY,OAAe;QACzB,KAAK,CAAC,mBAAmB,EAAE,sCAAsC,OAAO,GAAG,CAAC,CAAC;IAC/E,CAAC;CACF;AAED;;;;;;GAMG;AACH,MAAM,OAAO,gBAAiB,SAAQ,YAAY;IAChD,YAAY,OAAe;QACzB,KAAK,CAAC,cAAc,EAAE,OAAO,CAAC,CAAC;IACjC,CAAC;CACF;AAED;;;;;;;;GAQG;AACH,MAAM,OAAO,oBAAqB,SAAQ,YAAY;IAGpD,YAAY,OAAe,EAAE,KAAa;QACxC,KAAK,CACH,kBAAkB,EAClB,GAAG,KAAK,gCAAgC,KAAK,0CAA0C,CACxF,CAAC;QACF,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;IACzB,CAAC;CACF"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"example-seed.js","sourceRoot":"","sources":["../../src/core/example-seed.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkCG;AACH,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,KAAK,EAAE,MAAM,kBAAkB,CAAC;AACvC,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAElC,OAAO,EACL,0BAA0B,EAC1B,eAAe,EACf,QAAQ,EACR,WAAW,GAEZ,MAAM,oBAAoB,CAAC;AAE5B,OAAO,EAAE,aAAa,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AAE3E,MAAM,WAAW,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAEnD,MAAM,CAAC,MAAM,mBAAmB,GAAG,cAAc,CAAC;AAElD,iFAAiF;AACjF,SAAS,qBAAqB;IAC5B,MAAM,KAAK,GAAG,WAAW,CAAC,OAAO,CAAC,oBAAoB,CAAC,CAAC;IACxD,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,WAAW,CAAC,CAAC;IACvE,6EAA6E;IAC7E,0EAA0E;IAC1E,0EAA0E;IAC1E,0EAA0E;IAC1E,OAAO,GAAG,CAAC,OAAO,CAAC,yBAAyB,EAAE,uBAAuB,CAAC,CAAC;AACzE,CAAC;AAED,SAAS,MAAM,CAAC,GAAW,EAAE,IAAc;IACzC,IAAI,CAAC;QACH,YAAY,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE,GAAG,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"example-seed.js","sourceRoot":"","sources":["../../src/core/example-seed.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"claude-settings.d.ts","sourceRoot":"","sources":["../../../src/core/inject/claude-settings.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAQH;;GAEG;AACH,QAAA,MAAM,WAAW,kGAOP,CAAC;AAEX,MAAM,MAAM,eAAe,GAAG,CAAC,OAAO,WAAW,CAAC,CAAC,MAAM,CAAC,CAAC;AAE3D;;;;;;;;;GASG;AACH,MAAM,MAAM,eAAe,GAAG,WAAW,GAAG,YAAY,CAAC;AAEzD,MAAM,WAAW,6BAA6B;IAC5C,wDAAwD;IACxD,gBAAgB,EAAE,MAAM,CAAC;IACzB;;;;OAIG;IACH,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB;;;;;OAKG;IACH,WAAW,CAAC,EAAE,eAAe,CAAC;CAC/B;AAED,MAAM,WAAW,uBAAuB;IACtC,2EAA2E;IAC3E,YAAY,EAAE,MAAM,CAAC;IACrB,2DAA2D;IAC3D,cAAc,EAAE,MAAM,CAAC;CACxB;
|
|
1
|
+
{"version":3,"file":"claude-settings.d.ts","sourceRoot":"","sources":["../../../src/core/inject/claude-settings.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAQH;;GAEG;AACH,QAAA,MAAM,WAAW,kGAOP,CAAC;AAEX,MAAM,MAAM,eAAe,GAAG,CAAC,OAAO,WAAW,CAAC,CAAC,MAAM,CAAC,CAAC;AAE3D;;;;;;;;;GASG;AACH,MAAM,MAAM,eAAe,GAAG,WAAW,GAAG,YAAY,CAAC;AAEzD,MAAM,WAAW,6BAA6B;IAC5C,wDAAwD;IACxD,gBAAgB,EAAE,MAAM,CAAC;IACzB;;;;OAIG;IACH,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB;;;;;OAKG;IACH,WAAW,CAAC,EAAE,eAAe,CAAC;CAC/B;AAED,MAAM,WAAW,uBAAuB;IACtC,2EAA2E;IAC3E,YAAY,EAAE,MAAM,CAAC;IACrB,2DAA2D;IAC3D,cAAc,EAAE,MAAM,CAAC;CACxB;AAyKD;;;GAGG;AACH,wBAAsB,sBAAsB,CAC1C,OAAO,EAAE,6BAA6B,GACrC,OAAO,CAAC,uBAAuB,CAAC,CA0ClC"}
|
|
@@ -41,15 +41,47 @@ const EMIT_SCRIPT_SOURCE = `#!/usr/bin/env node
|
|
|
41
41
|
|
|
42
42
|
const hookEvent = process.argv[2] || "unknown";
|
|
43
43
|
|
|
44
|
-
// Absolute ceiling: whatever else happens, exit quickly so we never hang
|
|
45
|
-
//
|
|
44
|
+
// Absolute ceiling: whatever else happens, exit quickly so we never hang the
|
|
45
|
+
// agent's hook pipeline. The budgets are PER EVENT, because only SessionStart
|
|
46
|
+
// is correctness-critical: its POST is the sole signal that
|
|
47
|
+
// flips a session to "ready" (a lost one drops the user's held first prompt),
|
|
48
|
+
// so it gets the budget a cold Windows loopback needs. Every other event is
|
|
49
|
+
// analytics — the agent BLOCKS on each hook's exit, so a degraded-but-
|
|
50
|
+
// accepting server would otherwise add up to 2s per tool call, minutes across
|
|
51
|
+
// a long turn.
|
|
52
|
+
const isReadySignal = hookEvent === "SessionStart";
|
|
53
|
+
const hardStopMs = isReadySignal ? 3000 : 1000;
|
|
54
|
+
const abortMs = isReadySignal ? 2000 : 200;
|
|
55
|
+
const stdinGiveUpMs = isReadySignal ? 500 : 300;
|
|
56
|
+
|
|
46
57
|
const hardStop = setTimeout(() => {
|
|
47
58
|
try {
|
|
48
59
|
process.exit(0);
|
|
49
60
|
} catch {
|
|
50
61
|
// ignore
|
|
51
62
|
}
|
|
52
|
-
},
|
|
63
|
+
}, hardStopMs);
|
|
64
|
+
|
|
65
|
+
// Best-effort breadcrumb when the POST fails: one line beside this script.
|
|
66
|
+
// Every failure here is swallowed by design (a broken debug log must never
|
|
67
|
+
// break the hook), and the file is capped so a long-dead harness can't grow
|
|
68
|
+
// it unboundedly. Without this there is zero evidence anywhere when the
|
|
69
|
+
// ready-signal chain dies — the exact hole the Windows prompt-drop hid in.
|
|
70
|
+
function logEmitFailure(message) {
|
|
71
|
+
try {
|
|
72
|
+
const fs = require("node:fs");
|
|
73
|
+
const path = require("node:path");
|
|
74
|
+
const debugPath = path.join(__dirname, "emit-debug.log");
|
|
75
|
+
try {
|
|
76
|
+
if (fs.statSync(debugPath).size > 65536) return;
|
|
77
|
+
} catch {
|
|
78
|
+
// No file yet — fine.
|
|
79
|
+
}
|
|
80
|
+
fs.appendFileSync(debugPath, new Date().toISOString() + " " + hookEvent + " " + message + "\\n");
|
|
81
|
+
} catch {
|
|
82
|
+
// ignore
|
|
83
|
+
}
|
|
84
|
+
}
|
|
53
85
|
|
|
54
86
|
function readStdin() {
|
|
55
87
|
return new Promise((resolve) => {
|
|
@@ -58,7 +90,7 @@ function readStdin() {
|
|
|
58
90
|
return;
|
|
59
91
|
}
|
|
60
92
|
let data = "";
|
|
61
|
-
const giveUp = setTimeout(() => resolve(data),
|
|
93
|
+
const giveUp = setTimeout(() => resolve(data), stdinGiveUpMs);
|
|
62
94
|
process.stdin.setEncoding("utf8");
|
|
63
95
|
process.stdin.on("data", (chunk) => {
|
|
64
96
|
data += chunk;
|
|
@@ -93,8 +125,13 @@ async function main() {
|
|
|
93
125
|
payload: payload,
|
|
94
126
|
});
|
|
95
127
|
|
|
128
|
+
// SessionStart gets 2s, not 200ms: loopback is normally instant (and a dead
|
|
129
|
+
// port fails instantly with ECONNREFUSED), but a cold first accept on
|
|
130
|
+
// Windows can exceed 200ms — and a timed-out SessionStart means the session
|
|
131
|
+
// never reaches "ready" and the held first prompt is dropped. Analytics
|
|
132
|
+
// events keep the original tight budget (see hardStopMs above).
|
|
96
133
|
const controller = new AbortController();
|
|
97
|
-
const abortTimer = setTimeout(() => controller.abort(),
|
|
134
|
+
const abortTimer = setTimeout(() => controller.abort(), abortMs);
|
|
98
135
|
|
|
99
136
|
try {
|
|
100
137
|
await fetch(ingestUrl, {
|
|
@@ -106,8 +143,9 @@ async function main() {
|
|
|
106
143
|
body: body,
|
|
107
144
|
signal: controller.signal,
|
|
108
145
|
});
|
|
109
|
-
} catch {
|
|
146
|
+
} catch (err) {
|
|
110
147
|
// Fire-and-forget: ingest being down/slow must never surface here.
|
|
148
|
+
logEmitFailure("POST failed: " + (err && err.message ? err.message : String(err)));
|
|
111
149
|
} finally {
|
|
112
150
|
clearTimeout(abortTimer);
|
|
113
151
|
}
|
|
@@ -123,6 +161,30 @@ main()
|
|
|
123
161
|
function settingsDirFor(root, harnessSessionId) {
|
|
124
162
|
return path.join(root, harnessSessionId);
|
|
125
163
|
}
|
|
164
|
+
/**
|
|
165
|
+
* Why the hook command invokes a BARE `node`, on every platform — this is a
|
|
166
|
+
* decision, not an omission:
|
|
167
|
+
*
|
|
168
|
+
* Claude Code runs `command` hooks through a shell: `/bin/sh -c` on POSIX,
|
|
169
|
+
* and on Windows **Git Bash by default, falling back to PowerShell** (per its
|
|
170
|
+
* hooks documentation) — never cmd.exe. `node` is the one spelling all of
|
|
171
|
+
* them resolve, PROVIDED a matching flavor exists on PATH:
|
|
172
|
+
*
|
|
173
|
+
* - Git Bash resolves extensionless names and `.exe` — never a `.cmd`. A
|
|
174
|
+
* machine whose only `node` was the desktop app's `node.cmd` shim ran ZERO
|
|
175
|
+
* hooks: the SessionStart POST (the only thing that flips a session to
|
|
176
|
+
* "ready") silently died and the held first prompt was dropped. The
|
|
177
|
+
* desktop host now ships an extensionless `#!/bin/sh` node shim beside the
|
|
178
|
+
* `.cmd` for exactly this (harness-desktop's runtime-shims, mirroring
|
|
179
|
+
* npm's own three-flavor layout).
|
|
180
|
+
* - PowerShell and cmd resolve `node.cmd`/`node.exe` via PATHEXT.
|
|
181
|
+
*
|
|
182
|
+
* An absolute `"C:\…\node.exe"` looks more robust but is a trap: PowerShell's
|
|
183
|
+
* `-Command` form parses a leading quoted string as an EXPRESSION, not an
|
|
184
|
+
* invocation (it needs `&`), so embedding one would break the documented
|
|
185
|
+
* PowerShell fallback — while adding nothing Git Bash or cmd need.
|
|
186
|
+
*/
|
|
187
|
+
const HOOK_NODE = "node";
|
|
126
188
|
/**
|
|
127
189
|
* Write the generated settings.json + emit.cjs for one harness session.
|
|
128
190
|
* Returns the settings.json path — pass it as `claude --settings <path>`.
|
|
@@ -155,7 +217,7 @@ export async function generateClaudeSettings(options) {
|
|
|
155
217
|
// CLAUDE.md's "paths contain spaces — never hand a shell an
|
|
156
218
|
// unquoted path" rule. The event name is a fixed identifier from
|
|
157
219
|
// HOOK_EVENTS, so it needs no quoting.
|
|
158
|
-
command:
|
|
220
|
+
command: `${HOOK_NODE} "${emitScriptPath}" ${event}`,
|
|
159
221
|
},
|
|
160
222
|
],
|
|
161
223
|
},
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"claude-settings.js","sourceRoot":"","sources":["../../../src/core/inject/claude-settings.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,MAAM,kBAAkB,CAAC;AACvC,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAElC,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AACtD,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAEzC;;GAEG;AACH,MAAM,WAAW,GAAG;IAClB,cAAc;IACd,kBAAkB;IAClB,YAAY;IACZ,aAAa;IACb,MAAM;IACN,YAAY;CACJ,CAAC;AAyCX;;;;;;;;;;;GAWG;AACH,MAAM,kBAAkB,GAAG
|
|
1
|
+
{"version":3,"file":"claude-settings.js","sourceRoot":"","sources":["../../../src/core/inject/claude-settings.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,MAAM,kBAAkB,CAAC;AACvC,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAElC,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AACtD,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAEzC;;GAEG;AACH,MAAM,WAAW,GAAG;IAClB,cAAc;IACd,kBAAkB;IAClB,YAAY;IACZ,aAAa;IACb,MAAM;IACN,YAAY;CACJ,CAAC;AAyCX;;;;;;;;;;;GAWG;AACH,MAAM,kBAAkB,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA4H1B,CAAC;AAEF,SAAS,cAAc,CAAC,IAAY,EAAE,gBAAwB;IAC5D,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,gBAAgB,CAAC,CAAC;AAC3C,CAAC;AAED;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,MAAM,SAAS,GAAG,MAAM,CAAC;AAEzB;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,sBAAsB,CAC1C,OAAsC;IAEtC,MAAM,EAAE,WAAW,EAAE,GAAG,OAAO,CAAC;IAChC,MAAM,IAAI,GAAG,UAAU,CAAC,OAAO,CAAC,aAAa,IAAI,aAAa,CAAC,SAAS,CAAC,CAAC;IAC1E,MAAM,GAAG,GAAG,cAAc,CAAC,IAAI,EAAE,OAAO,CAAC,gBAAgB,CAAC,CAAC;IAC3D,MAAM,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAEzC,MAAM,cAAc,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,UAAU,CAAC,CAAC;IAClD,MAAM,EAAE,CAAC,SAAS,CAAC,cAAc,EAAE,kBAAkB,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;IAExE,MAAM,KAAK,GAA4B,EAAE,CAAC;IAC1C,KAAK,MAAM,KAAK,IAAI,WAAW,EAAE,CAAC;QAChC,KAAK,CAAC,KAAK,CAAC,GAAG;YACb;gBACE,OAAO,EAAE,EAAE;gBACX,KAAK,EAAE;oBACL;wBACE,IAAI,EAAE,SAAS;wBACf,8DAA8D;wBAC9D,+DAA+D;wBAC/D,oEAAoE;wBACpE,mEAAmE;wBACnE,mEAAmE;wBACnE,+DAA+D;wBAC/D,8DAA8D;wBAC9D,iEAAiE;wBACjE,8DAA8D;wBAC9D,gEAAgE;wBAChE,4DAA4D;wBAC5D,iEAAiE;wBACjE,uCAAuC;wBACvC,OAAO,EAAE,GAAG,SAAS,KAAK,cAAc,KAAK,KAAK,EAAE;qBACrD;iBACF;aACF;SACF,CAAC;IACJ,CAAC;IAED,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,eAAe,CAAC,CAAC;IACrD,MAAM,QAAQ,GAAG,WAAW,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,WAAW,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC;IACzE,MAAM,EAAE,CAAC,SAAS,CAAC,YAAY,EAAE,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,GAAG,IAAI,EAAE,MAAM,CAAC,CAAC;IAEnF,OAAO,EAAE,YAAY,EAAE,cAAc,EAAE,CAAC;AAC1C,CAAC"}
|
|
@@ -1,4 +1,25 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* A host-supplied way to launch the local `sapiom-dev` stdio server instead of
|
|
3
|
+
* the default `npx @sapiom/mcp@latest`.
|
|
4
|
+
*
|
|
5
|
+
* Why this exists (Windows, desktop host): the npx chain's top process is
|
|
6
|
+
* cmd.exe — a console-subsystem image — and Claude Code's Windows spawns leave
|
|
7
|
+
* a PERSISTENT visible console window for it. Users close that window, which
|
|
8
|
+
* kills the MCP server's process tree, and every later tool call hangs against
|
|
9
|
+
* the dead server. A GUI-subsystem executable (the Electron binary running as
|
|
10
|
+
* Node via ELECTRON_RUN_AS_NODE in `env`) allocates no console under ANY spawn
|
|
11
|
+
* flags while stdio pipes still work — so the desktop host passes itself plus
|
|
12
|
+
* the installed @sapiom/mcp entry script here. Bonus on every platform: no
|
|
13
|
+
* per-session registry fetch (npx re-resolves `@latest` each launch).
|
|
14
|
+
*/
|
|
15
|
+
export interface McpDevServerCommand {
|
|
16
|
+
command: string;
|
|
17
|
+
args: string[];
|
|
18
|
+
env?: Record<string, string>;
|
|
19
|
+
}
|
|
1
20
|
export interface McpConfigOptions {
|
|
21
|
+
/** Override for the local sapiom-dev server launch — see {@link McpDevServerCommand}. */
|
|
22
|
+
devServer?: McpDevServerCommand;
|
|
2
23
|
/** SAPIOM_ENVIRONMENT to pass through to the sapiom-dev child process. */
|
|
3
24
|
environment?: string;
|
|
4
25
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mcp-config.d.ts","sourceRoot":"","sources":["../../../src/core/inject/mcp-config.ts"],"names":[],"mappings":"AAKA,MAAM,WAAW,gBAAgB;IAC/B,0EAA0E;IAC1E,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB;;;;;;;;OAQG;IACH,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB;iFAC6E;IAC7E,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB;;;;;;;OAOG;IACH,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAED;;;;;;GAMG;AACH,wBAAsB,iBAAiB,CACrC,gBAAgB,EAAE,MAAM,EACxB,OAAO,GAAE,gBAAqB,GAC7B,OAAO,CAAC,MAAM,CAAC,
|
|
1
|
+
{"version":3,"file":"mcp-config.d.ts","sourceRoot":"","sources":["../../../src/core/inject/mcp-config.ts"],"names":[],"mappings":"AAKA;;;;;;;;;;;;;GAaG;AACH,MAAM,WAAW,mBAAmB;IAClC,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAC9B;AAED,MAAM,WAAW,gBAAgB;IAC/B,yFAAyF;IACzF,SAAS,CAAC,EAAE,mBAAmB,CAAC;IAChC,0EAA0E;IAC1E,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB;;;;;;;;OAQG;IACH,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB;iFAC6E;IAC7E,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB;;;;;;;OAOG;IACH,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAED;;;;;;GAMG;AACH,wBAAsB,iBAAiB,CACrC,gBAAgB,EAAE,MAAM,EACxB,OAAO,GAAE,gBAAqB,GAC7B,OAAO,CAAC,MAAM,CAAC,CAoDjB"}
|
|
@@ -27,19 +27,29 @@ export async function generateMcpConfig(harnessSessionId, options = {}) {
|
|
|
27
27
|
url: "https://api.sapiom.ai/v1/mcp",
|
|
28
28
|
...(options.apiKey ? { headers: { "x-api-key": options.apiKey } } : {}),
|
|
29
29
|
},
|
|
30
|
-
"sapiom-dev":
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
30
|
+
"sapiom-dev": options.devServer
|
|
31
|
+
? {
|
|
32
|
+
command: options.devServer.command,
|
|
33
|
+
args: options.devServer.args,
|
|
34
|
+
// The launcher's own env (e.g. ELECTRON_RUN_AS_NODE) must win over
|
|
35
|
+
// the shared entries — it is what makes the command a node at all.
|
|
36
|
+
...(devEnv || options.devServer.env
|
|
37
|
+
? { env: { ...devEnvEntries, ...options.devServer.env } }
|
|
38
|
+
: {}),
|
|
39
|
+
}
|
|
40
|
+
: {
|
|
41
|
+
command: "npx",
|
|
42
|
+
// Pin the dist-tag (`@latest`) rather than the bare name so npx always
|
|
43
|
+
// resolves the PUBLISHED package from the registry. A bare
|
|
44
|
+
// `@sapiom/mcp` resolves a LOCAL workspace copy whenever the harness
|
|
45
|
+
// runs from inside the sapiom-js monorepo (dogfooding/dev) — whose bin
|
|
46
|
+
// isn't linked, so the server fails to launch ("sapiom-mcp: command
|
|
47
|
+
// not found" → JSON-RPC -32000). A dist-tag spec forces registry
|
|
48
|
+
// resolution and is behaviourally identical to what a real user
|
|
49
|
+
// (outside the monorepo) already gets, so it's a pure robustness fix.
|
|
50
|
+
args: ["-y", "@sapiom/mcp@latest"],
|
|
51
|
+
...(devEnv ? { env: devEnv } : {}),
|
|
52
|
+
},
|
|
43
53
|
},
|
|
44
54
|
};
|
|
45
55
|
const filePath = path.join(dir, "mcp-config.json");
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mcp-config.js","sourceRoot":"","sources":["../../../src/core/inject/mcp-config.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,kBAAkB,CAAC;AACvC,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAClC,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AACtD,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"mcp-config.js","sourceRoot":"","sources":["../../../src/core/inject/mcp-config.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,kBAAkB,CAAC;AACvC,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAClC,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AACtD,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAmDhD;;;;;;GAMG;AACH,MAAM,CAAC,KAAK,UAAU,iBAAiB,CACrC,gBAAwB,EACxB,UAA4B,EAAE;IAE9B,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,aAAa,IAAI,aAAa,CAAC,SAAS,CAAC,EAAE,gBAAgB,CAAC,CAAC;IACtG,MAAM,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAEzC,MAAM,iBAAiB,GAAG,OAAO,CAAC,WAAW,IAAI,OAAO,CAAC,GAAG,CAAC,kBAAkB,CAAC;IAChF,MAAM,aAAa,GAA2B;QAC5C,GAAG,CAAC,iBAAiB,CAAC,CAAC,CAAC,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACvE,GAAG,CAAC,OAAO,CAAC,cAAc;YACxB,CAAC,CAAC,EAAE,sBAAsB,EAAE,OAAO,CAAC,cAAc,EAAE;YACpD,CAAC,CAAC,EAAE,CAAC;KACR,CAAC;IACF,MAAM,MAAM,GACV,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,SAAS,CAAC;IAEpE,MAAM,MAAM,GAAG;QACb,UAAU,EAAE;YACV,MAAM,EAAE;gBACN,IAAI,EAAE,MAAM;gBACZ,GAAG,EAAE,8BAA8B;gBACnC,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,EAAE,WAAW,EAAE,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;aACxE;YACD,YAAY,EAAE,OAAO,CAAC,SAAS;gBAC7B,CAAC,CAAC;oBACE,OAAO,EAAE,OAAO,CAAC,SAAS,CAAC,OAAO;oBAClC,IAAI,EAAE,OAAO,CAAC,SAAS,CAAC,IAAI;oBAC5B,mEAAmE;oBACnE,mEAAmE;oBACnE,GAAG,CAAC,MAAM,IAAI,OAAO,CAAC,SAAS,CAAC,GAAG;wBACjC,CAAC,CAAC,EAAE,GAAG,EAAE,EAAE,GAAG,aAAa,EAAE,GAAG,OAAO,CAAC,SAAS,CAAC,GAAG,EAAE,EAAE;wBACzD,CAAC,CAAC,EAAE,CAAC;iBACR;gBACH,CAAC,CAAC;oBACE,OAAO,EAAE,KAAK;oBACd,uEAAuE;oBACvE,2DAA2D;oBAC3D,qEAAqE;oBACrE,uEAAuE;oBACvE,oEAAoE;oBACpE,iEAAiE;oBACjE,gEAAgE;oBAChE,sEAAsE;oBACtE,IAAI,EAAE,CAAC,IAAI,EAAE,oBAAoB,CAAC;oBAClC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;iBACnC;SACN;KACF,CAAC;IAEF,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,iBAAiB,CAAC,CAAC;IACnD,yEAAyE;IACzE,oEAAoE;IACpE,MAAM,EAAE,CAAC,SAAS,CAAC,QAAQ,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,GAAG,IAAI,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;IACtF,OAAO,QAAQ,CAAC;AAClB,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"skills-plugin.d.ts","sourceRoot":"","sources":["../../../src/core/inject/skills-plugin.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;
|
|
1
|
+
{"version":3,"file":"skills-plugin.d.ts","sourceRoot":"","sources":["../../../src/core/inject/skills-plugin.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AAWH,MAAM,WAAW,mBAAmB;IAClC,wFAAwF;IACxF,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAiED;;;;;;;;;;GAUG;AACH,wBAAsB,oBAAoB,CACxC,gBAAgB,EAAE,MAAM,EACxB,OAAO,GAAE,mBAAwB,GAChC,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CA4D7B"}
|
|
@@ -31,6 +31,7 @@ import * as path from "node:path";
|
|
|
31
31
|
import { createRequire } from "node:module";
|
|
32
32
|
import { HARNESS_PATHS } from "../../shared/types.js";
|
|
33
33
|
import { expandHome } from "../../cli/paths.js";
|
|
34
|
+
import { unpackedPath } from "../asar-path.js";
|
|
34
35
|
/**
|
|
35
36
|
* Resolve the `skills/` directory from the installed @sapiom/agent-core package.
|
|
36
37
|
* Returns null when the package or its skills directory is unresolvable.
|
|
@@ -52,10 +53,15 @@ import { expandHome } from "../../cli/paths.js";
|
|
|
52
53
|
*/
|
|
53
54
|
function resolveAgentCoreSkillsDir() {
|
|
54
55
|
const require = createRequire(import.meta.url);
|
|
55
|
-
// Strategy 1: direct package.json resolution (clean path).
|
|
56
|
+
// Strategy 1: direct package.json resolution (clean path). unpackedPath():
|
|
57
|
+
// in the packaged desktop app require.resolve reports the app.asar virtual
|
|
58
|
+
// path, and while readFile works there (Electron patches fs), copyFile's
|
|
59
|
+
// SOURCE must be a real on-disk file — node_modules are asarUnpacked, so the
|
|
60
|
+
// twin exists (harness CLAUDE.md's mandatory translation for any
|
|
61
|
+
// package-relative path).
|
|
56
62
|
try {
|
|
57
63
|
const pkgJsonPath = require.resolve("@sapiom/agent-core/package.json");
|
|
58
|
-
return path.join(path.dirname(pkgJsonPath), "skills");
|
|
64
|
+
return unpackedPath(path.join(path.dirname(pkgJsonPath), "skills"));
|
|
59
65
|
}
|
|
60
66
|
catch {
|
|
61
67
|
// exports map may not expose ./package.json — fall through to strategy 2.
|
|
@@ -71,7 +77,7 @@ function resolveAgentCoreSkillsDir() {
|
|
|
71
77
|
try {
|
|
72
78
|
const pkg = JSON.parse(readFileSync(path.join(dir, "package.json"), "utf8"));
|
|
73
79
|
if (pkg.name === "@sapiom/agent-core")
|
|
74
|
-
return path.join(dir, "skills");
|
|
80
|
+
return unpackedPath(path.join(dir, "skills"));
|
|
75
81
|
}
|
|
76
82
|
catch {
|
|
77
83
|
// No package.json here (or unparseable / a nested type-marker without a
|
|
@@ -117,30 +123,40 @@ export async function generateSkillsPlugin(harnessSessionId, options = {}) {
|
|
|
117
123
|
return undefined;
|
|
118
124
|
const generatedRoot = expandHome(options.generatedRoot ?? HARNESS_PATHS.generated);
|
|
119
125
|
const pluginDir = path.join(generatedRoot, harnessSessionId, "skills-plugin");
|
|
120
|
-
//
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
//
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
126
|
+
// The writes honor the module's documented graceful-no-op contract too:
|
|
127
|
+
// this runs inside sessionManager.create()'s launch-opts phase, so an
|
|
128
|
+
// unguarded mkdir/copy failure (disk, permissions, an asar edge we missed)
|
|
129
|
+
// killed the whole session over an optional skills plugin.
|
|
130
|
+
try {
|
|
131
|
+
// Write the .claude-plugin/plugin.json manifest.
|
|
132
|
+
const pluginJsonDir = path.join(pluginDir, ".claude-plugin");
|
|
133
|
+
await fs.mkdir(pluginJsonDir, { recursive: true });
|
|
134
|
+
// Plugin name is user-visible: it namespaces every skill's slash command as
|
|
135
|
+
// `/<name>:<skill>`, so "sapiom" yields `/sapiom:sapiom-agent-authoring`.
|
|
136
|
+
await fs.writeFile(path.join(pluginJsonDir, "plugin.json"), JSON.stringify({ name: "sapiom" }, null, 2) + "\n", "utf8");
|
|
137
|
+
// Copy each skill's SKILL.md into skills/<name>/SKILL.md.
|
|
138
|
+
let copiedAny = false;
|
|
139
|
+
for (const skillName of skillDirs) {
|
|
140
|
+
const sourceMd = path.join(agentCoreSkillsDir, skillName, "SKILL.md");
|
|
141
|
+
try {
|
|
142
|
+
await fs.access(sourceMd);
|
|
143
|
+
}
|
|
144
|
+
catch {
|
|
145
|
+
// No SKILL.md for this entry — skip.
|
|
146
|
+
continue;
|
|
147
|
+
}
|
|
148
|
+
const destDir = path.join(pluginDir, "skills", skillName);
|
|
149
|
+
await fs.mkdir(destDir, { recursive: true });
|
|
150
|
+
await fs.copyFile(sourceMd, path.join(destDir, "SKILL.md"));
|
|
151
|
+
copiedAny = true;
|
|
136
152
|
}
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
copiedAny = true;
|
|
153
|
+
if (!copiedAny)
|
|
154
|
+
return undefined;
|
|
155
|
+
return pluginDir;
|
|
141
156
|
}
|
|
142
|
-
|
|
157
|
+
catch (err) {
|
|
158
|
+
console.warn(`[harness] skills-plugin generation failed for session ${harnessSessionId} — launching without --plugin-dir:`, err instanceof Error ? err.message : err);
|
|
143
159
|
return undefined;
|
|
144
|
-
|
|
160
|
+
}
|
|
145
161
|
}
|
|
146
162
|
//# sourceMappingURL=skills-plugin.js.map
|