@sapiom/harness 0.1.1 → 0.1.2
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 +162 -0
- package/README.md +36 -0
- package/dist/cli/bin.js +26 -2
- package/dist/cli/bin.js.map +1 -1
- package/dist/cli/consent.d.ts +29 -1
- package/dist/cli/consent.d.ts.map +1 -1
- package/dist/cli/consent.js +33 -11
- package/dist/cli/consent.js.map +1 -1
- package/dist/core/adapters/adapter.d.ts +72 -0
- package/dist/core/adapters/adapter.d.ts.map +1 -0
- package/dist/core/adapters/adapter.js +18 -0
- package/dist/core/adapters/adapter.js.map +1 -0
- package/dist/core/adapters/claude-code-info.d.ts +11 -0
- package/dist/core/adapters/claude-code-info.d.ts.map +1 -0
- package/dist/core/adapters/claude-code-info.js +27 -0
- package/dist/core/adapters/claude-code-info.js.map +1 -0
- package/dist/core/adapters/claude-code.d.ts.map +1 -1
- package/dist/core/adapters/claude-code.js +9 -8
- package/dist/core/adapters/claude-code.js.map +1 -1
- package/dist/core/adapters/codex-info.d.ts +10 -0
- package/dist/core/adapters/codex-info.d.ts.map +1 -0
- package/dist/core/adapters/codex-info.js +32 -0
- package/dist/core/adapters/codex-info.js.map +1 -0
- package/dist/core/adapters/conductor.d.ts +8 -0
- package/dist/core/adapters/conductor.d.ts.map +1 -0
- package/dist/core/adapters/conductor.js +57 -0
- package/dist/core/adapters/conductor.js.map +1 -0
- package/dist/core/adapters/detect.d.ts +15 -0
- package/dist/core/adapters/detect.d.ts.map +1 -0
- package/dist/core/adapters/detect.js +62 -0
- package/dist/core/adapters/detect.js.map +1 -0
- package/dist/core/adapters/opencode.d.ts +8 -0
- package/dist/core/adapters/opencode.d.ts.map +1 -0
- package/dist/core/adapters/opencode.js +35 -0
- package/dist/core/adapters/opencode.js.map +1 -0
- package/dist/core/adapters/pi.d.ts +8 -0
- package/dist/core/adapters/pi.d.ts.map +1 -0
- package/dist/core/adapters/pi.js +24 -0
- package/dist/core/adapters/pi.js.map +1 -0
- package/dist/core/adapters/registry.d.ts +42 -0
- package/dist/core/adapters/registry.d.ts.map +1 -0
- package/dist/core/adapters/registry.js +67 -0
- package/dist/core/adapters/registry.js.map +1 -0
- package/dist/core/canvas-enrich.d.ts +9 -0
- package/dist/core/canvas-enrich.d.ts.map +1 -1
- package/dist/core/canvas-enrich.js +8 -0
- package/dist/core/canvas-enrich.js.map +1 -1
- package/dist/core/collector/analytics-emitter.d.ts +57 -0
- package/dist/core/collector/analytics-emitter.d.ts.map +1 -0
- package/dist/core/collector/analytics-emitter.js +131 -0
- package/dist/core/collector/analytics-emitter.js.map +1 -0
- package/dist/core/collector/identity-migration.d.ts +25 -0
- package/dist/core/collector/identity-migration.d.ts.map +1 -0
- package/dist/core/collector/identity-migration.js +68 -0
- package/dist/core/collector/identity-migration.js.map +1 -0
- package/dist/core/collector/store-retention.d.ts +51 -0
- package/dist/core/collector/store-retention.d.ts.map +1 -0
- package/dist/core/collector/store-retention.js +117 -0
- package/dist/core/collector/store-retention.js.map +1 -0
- package/dist/core/collector/store.d.ts +17 -1
- package/dist/core/collector/store.d.ts.map +1 -1
- package/dist/core/collector/store.js +24 -3
- package/dist/core/collector/store.js.map +1 -1
- package/dist/core/errors.d.ts +71 -0
- package/dist/core/errors.d.ts.map +1 -0
- package/dist/core/errors.js +86 -0
- package/dist/core/errors.js.map +1 -0
- package/dist/core/inject/claude-settings.d.ts +3 -1
- package/dist/core/inject/claude-settings.d.ts.map +1 -1
- package/dist/core/inject/claude-settings.js +3 -1
- package/dist/core/inject/claude-settings.js.map +1 -1
- package/dist/core/inject/skills-plugin.d.ts +44 -0
- package/dist/core/inject/skills-plugin.d.ts.map +1 -0
- package/dist/core/inject/skills-plugin.js +146 -0
- package/dist/core/inject/skills-plugin.js.map +1 -0
- package/dist/core/macro-runner.d.ts.map +1 -1
- package/dist/core/macro-runner.js +20 -1
- package/dist/core/macro-runner.js.map +1 -1
- package/dist/core/macros.d.ts.map +1 -1
- package/dist/core/macros.js +3 -0
- package/dist/core/macros.js.map +1 -1
- package/dist/core/session-manager.d.ts +37 -18
- package/dist/core/session-manager.d.ts.map +1 -1
- package/dist/core/session-manager.js +85 -34
- package/dist/core/session-manager.js.map +1 -1
- package/dist/core/task-manager.d.ts +25 -4
- package/dist/core/task-manager.d.ts.map +1 -1
- package/dist/core/task-manager.js +118 -6
- package/dist/core/task-manager.js.map +1 -1
- package/dist/core/workflow-registry.d.ts +7 -0
- package/dist/core/workflow-registry.d.ts.map +1 -1
- package/dist/core/workflow-registry.js +74 -50
- package/dist/core/workflow-registry.js.map +1 -1
- package/dist/core/workspace-watcher.d.ts +13 -1
- package/dist/core/workspace-watcher.d.ts.map +1 -1
- package/dist/core/workspace-watcher.js +78 -4
- package/dist/core/workspace-watcher.js.map +1 -1
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -1
- package/dist/server/index.d.ts +16 -1
- package/dist/server/index.d.ts.map +1 -1
- package/dist/server/index.js +0 -0
- package/dist/server/index.js.map +1 -1
- package/dist/server/ingest.d.ts +8 -0
- package/dist/server/ingest.d.ts.map +1 -1
- package/dist/server/ingest.js +4 -0
- package/dist/server/ingest.js.map +1 -1
- package/dist/server/macros.d.ts +5 -2
- package/dist/server/macros.d.ts.map +1 -1
- package/dist/server/macros.js +5 -2
- package/dist/server/macros.js.map +1 -1
- package/dist/server/rest.d.ts +26 -1
- package/dist/server/rest.d.ts.map +1 -1
- package/dist/server/rest.js +139 -6
- package/dist/server/rest.js.map +1 -1
- package/dist/server/skills.d.ts +45 -0
- package/dist/server/skills.d.ts.map +1 -0
- package/dist/server/skills.js +286 -0
- package/dist/server/skills.js.map +1 -0
- package/dist/shared/types.d.ts +75 -2
- package/dist/shared/types.d.ts.map +1 -1
- package/dist/shared/types.js +12 -1
- package/dist/shared/types.js.map +1 -1
- package/dist/web/assets/index-BTm-QNRt.css +32 -0
- package/dist/web/assets/index-CvNiFngP.js +204 -0
- package/dist/web/index.html +2 -2
- package/package.json +19 -7
- package/dist/core/collector/batcher.d.ts +0 -57
- package/dist/core/collector/batcher.d.ts.map +0 -1
- package/dist/core/collector/batcher.js +0 -143
- package/dist/core/collector/batcher.js.map +0 -1
- package/dist/web/assets/index-B9R4TzH7.css +0 -32
- package/dist/web/assets/index-Dh97QAgq.js +0 -192
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ingest.js","sourceRoot":"","sources":["../../src/server/ingest.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,OAAwB,MAAM,SAAS,CAAC;AAI/C,OAAO,EAAE,gBAAgB,EAAmB,MAAM,0BAA0B,CAAC;
|
|
1
|
+
{"version":3,"file":"ingest.js","sourceRoot":"","sources":["../../src/server/ingest.ts"],"names":[],"mappings":"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"}
|
package/dist/server/macros.d.ts
CHANGED
|
@@ -14,10 +14,13 @@ export interface MacrosRouterDeps {
|
|
|
14
14
|
injectInput(harnessSessionId: string, text: string, submit: boolean): Promise<void>;
|
|
15
15
|
/** Runs an "inject" macro marked `execution: "background"` as a headless
|
|
16
16
|
* one-shot task (the TaskManager) instead of touching the session's pty.
|
|
17
|
+
* `workflowPath` is the resolved workflow the macro was invoked against —
|
|
18
|
+
* passed through to TaskManager so two sessions running the same macro
|
|
19
|
+
* against the same workflow dedupe per-workflow rather than per-session.
|
|
17
20
|
* May throw TaskNotSupportedError (session's harness has no headless
|
|
18
21
|
* mode → 400) or TaskAlreadyRunningError (same macro already in flight
|
|
19
|
-
* for this
|
|
20
|
-
runBackgroundTask(harnessSessionId: string, macro: MacroDef, prompt: string): Promise<void>;
|
|
22
|
+
* for this target → 409). */
|
|
23
|
+
runBackgroundTask(harnessSessionId: string, macro: MacroDef, prompt: string, workflowPath: string | null): Promise<void>;
|
|
21
24
|
/** Opens a URL in the user's default browser (the `open` package). */
|
|
22
25
|
openUrl(url: string): Promise<void>;
|
|
23
26
|
/** The "visualize" macro's `render-canvas` action: force refresh of the
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"macros.d.ts","sourceRoot":"","sources":["../../src/server/macros.ts"],"names":[],"mappings":"AAYA,OAAO,EAAU,KAAK,MAAM,IAAI,aAAa,EAAE,MAAM,SAAS,CAAC;AAC/D,OAAO,EAAgB,KAAK,QAAQ,EAAwB,KAAK,YAAY,EAAE,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"macros.d.ts","sourceRoot":"","sources":["../../src/server/macros.ts"],"names":[],"mappings":"AAYA,OAAO,EAAU,KAAK,MAAM,IAAI,aAAa,EAAE,MAAM,SAAS,CAAC;AAC/D,OAAO,EAAgB,KAAK,QAAQ,EAAwB,KAAK,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAM1G,MAAM,WAAW,gBAAgB;IAC/B,UAAU,IAAI,QAAQ,EAAE,CAAC;IACzB,sEAAsE;IACtE,YAAY,CAAC,YAAY,EAAE,MAAM,GAAG,YAAY,GAAG,IAAI,CAAC;IACxD,4EAA4E;IAC5E,aAAa,CAAC,gBAAgB,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAAC;IACvD;;mFAE+E;IAC/E,oBAAoB,CAAC,gBAAgB,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAAC;IAC9D,yEAAyE;IACzE,WAAW,CAAC,gBAAgB,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACpF;;;;;;;kCAO8B;IAC9B,iBAAiB,CAAC,gBAAgB,EAAE,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,GAAG,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACzH,sEAAsE;IACtE,OAAO,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACpC;;;;;0EAKsE;IACtE,YAAY,CAAC,gBAAgB,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CACvD;AAED,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,gBAAgB,GAAG,aAAa,CAmExE"}
|
package/dist/server/macros.js
CHANGED
|
@@ -12,6 +12,7 @@
|
|
|
12
12
|
import * as path from "node:path";
|
|
13
13
|
import { Router } from "express";
|
|
14
14
|
import { CANVAS_INDEX } from "../shared/types.js";
|
|
15
|
+
import { ExternalHarnessError } from "../core/errors.js";
|
|
15
16
|
import { MacroValidationError, resolveMacro } from "../core/macro-runner.js";
|
|
16
17
|
import { SessionNotReadyError } from "../core/session-manager.js";
|
|
17
18
|
import { TaskAlreadyRunningError, TaskNotSupportedError } from "../core/task-manager.js";
|
|
@@ -52,7 +53,7 @@ export function createMacrosRouter(deps) {
|
|
|
52
53
|
await deps.renderCanvas(body.harnessSessionId);
|
|
53
54
|
}
|
|
54
55
|
else if (macro.execution === "background") {
|
|
55
|
-
await deps.runBackgroundTask(body.harnessSessionId, macro, resolved.text);
|
|
56
|
+
await deps.runBackgroundTask(body.harnessSessionId, macro, resolved.text, workflowPath ?? null);
|
|
56
57
|
}
|
|
57
58
|
else {
|
|
58
59
|
await deps.injectInput(body.harnessSessionId, resolved.text, resolved.submit);
|
|
@@ -64,7 +65,9 @@ export function createMacrosRouter(deps) {
|
|
|
64
65
|
res.status(400).json({ error: err.message });
|
|
65
66
|
return;
|
|
66
67
|
}
|
|
67
|
-
if (err instanceof SessionNotReadyError ||
|
|
68
|
+
if (err instanceof SessionNotReadyError ||
|
|
69
|
+
err instanceof TaskAlreadyRunningError ||
|
|
70
|
+
err instanceof ExternalHarnessError) {
|
|
68
71
|
res.status(409).json({ error: err.message });
|
|
69
72
|
return;
|
|
70
73
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"macros.js","sourceRoot":"","sources":["../../src/server/macros.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AACH,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAClC,OAAO,EAAE,MAAM,EAAgC,MAAM,SAAS,CAAC;AAC/D,OAAO,EAAE,YAAY,EAA0D,MAAM,oBAAoB,CAAC;AAC1G,OAAO,EAAE,oBAAoB,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AAC7E,OAAO,EAAE,oBAAoB,EAAE,MAAM,4BAA4B,CAAC;AAClE,OAAO,EAAE,uBAAuB,EAAE,qBAAqB,EAAE,MAAM,yBAAyB,CAAC;
|
|
1
|
+
{"version":3,"file":"macros.js","sourceRoot":"","sources":["../../src/server/macros.ts"],"names":[],"mappings":"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"}
|
package/dist/server/rest.d.ts
CHANGED
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
* macros and settings are mounted by other workstreams alongside this one.
|
|
5
5
|
*/
|
|
6
6
|
import { Router } from "express";
|
|
7
|
-
import type { BackgroundTask, HarnessAdapter, HarnessKind, HarnessSession, MacroDef, SampleProjectSeedResponse, WorkflowInfo } from "../shared/types.js";
|
|
7
|
+
import type { AppState, BackgroundTask, HarnessAdapter, HarnessKind, HarnessSession, MacroDef, SampleProjectSeedResponse, WorkflowInfo } from "../shared/types.js";
|
|
8
8
|
import { type SessionManager } from "../core/session-manager.js";
|
|
9
9
|
export interface RestRouterOptions {
|
|
10
10
|
sessionManager: SessionManager;
|
|
@@ -60,6 +60,13 @@ export interface RestRouterOptions {
|
|
|
60
60
|
* mutated any state, surfaced verbatim in AppState.firstRun. Omitted when
|
|
61
61
|
* the caller doesn't supply it (tests), leaving AppState.firstRun absent. */
|
|
62
62
|
firstRun?: boolean;
|
|
63
|
+
/** How telemetry consent was determined at boot — surfaced in AppState so the
|
|
64
|
+
* UI can show the first-run notice when the user never explicitly answered.
|
|
65
|
+
* Omitted when the caller didn't run the consent flow (tests). */
|
|
66
|
+
consentSource?: AppState["consentSource"];
|
|
67
|
+
/** Which env var forced telemetry off — surfaced in AppState for the
|
|
68
|
+
* tracking indicator's "off (env)" label. Null/absent otherwise. */
|
|
69
|
+
consentEnvReason?: string | null;
|
|
63
70
|
/** Seeds (or reuses) the bundled example project and returns where it
|
|
64
71
|
* landed — backs POST /api/sample-project (the welcome panel's "Run the
|
|
65
72
|
* sample project"). Optional so callers without the real seeder (tests)
|
|
@@ -70,6 +77,24 @@ export interface RestRouterOptions {
|
|
|
70
77
|
* (server/index.ts) passes the path under its resolved state root so an
|
|
71
78
|
* isolated boot never reads or writes the developer's real settings. */
|
|
72
79
|
settingsPath?: string;
|
|
80
|
+
/**
|
|
81
|
+
* Dependencies for POST /api/track (UI-interaction analytics).
|
|
82
|
+
* Optional: when omitted, /api/track returns 501 (tests that don't care
|
|
83
|
+
* about UI analytics don't need to stub these).
|
|
84
|
+
*/
|
|
85
|
+
uiTrack?: {
|
|
86
|
+
store: {
|
|
87
|
+
append(event: import("../shared/types.js").AnalyticsEvent): Promise<void>;
|
|
88
|
+
};
|
|
89
|
+
batcher: {
|
|
90
|
+
enqueue(event: import("../shared/types.js").AnalyticsEvent): void;
|
|
91
|
+
};
|
|
92
|
+
/** Per-boot seq counter shared with the ingest pipeline. */
|
|
93
|
+
nextSeq: (sessionId: string) => number;
|
|
94
|
+
machineId: string;
|
|
95
|
+
userId: string | null;
|
|
96
|
+
tenantId: string | null;
|
|
97
|
+
};
|
|
73
98
|
}
|
|
74
99
|
export declare function createRestRouter(options: RestRouterOptions): Router;
|
|
75
100
|
//# sourceMappingURL=rest.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"rest.d.ts","sourceRoot":"","sources":["../../src/server/rest.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAgB,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"rest.d.ts","sourceRoot":"","sources":["../../src/server/rest.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAgB,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AAI1C,OAAO,KAAK,EAEV,QAAQ,EACR,cAAc,EAGd,cAAc,EACd,WAAW,EACX,cAAc,EAGd,QAAQ,EACR,yBAAyB,EAIzB,YAAY,EACb,MAAM,oBAAoB,CAAC;AAG5B,OAAO,EAA6C,KAAK,cAAc,EAAE,MAAM,4BAA4B,CAAC;AA0D5G,MAAM,WAAW,iBAAiB;IAChC,cAAc,EAAE,cAAc,CAAC;IAC/B,QAAQ,EAAE,OAAO,CAAC,MAAM,CAAC,WAAW,EAAE,cAAc,CAAC,CAAC,CAAC;IACvD,OAAO,EAAE,MAAM,CAAC;IAChB,4EAA4E;IAC5E,QAAQ,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,gBAAgB,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAAC;IAC9D,aAAa,EAAE,MAAM,OAAO,CAAC,YAAY,EAAE,CAAC,CAAC;IAC7C,UAAU,EAAE,MAAM,QAAQ,EAAE,CAAC;IAC7B;;wDAEoD;IACpD,YAAY,EAAE,CAAC,YAAY,EAAE,MAAM,KAAK,YAAY,GAAG,IAAI,CAAC;IAC5D;;;;;2DAKuD;IACvD,qBAAqB,EAAE,CAAC,OAAO,EAAE,cAAc,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAClE;;;;;0CAKsC;IACtC,YAAY,CAAC,EAAE,CAAC,OAAO,EAAE,cAAc,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAC1D;uEACmE;IACnE,sBAAsB,CAAC,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,IAAI,CAAC;IAClD;;;4EAGwE;IACxE,gBAAgB,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,gBAAgB,EAAE,MAAM,KAAK,IAAI,CAAC;IACnE;wDACoD;IACpD,SAAS,EAAE,MAAM,CAAC;IAClB;;;wEAGoE;IACpE,SAAS,CAAC,EAAE,MAAM,cAAc,EAAE,CAAC;IACnC;;;kFAG8E;IAC9E,kBAAkB,CAAC,EAAE,WAAW,EAAE,CAAC;IACnC;;iFAE6E;IAC7E,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB;;sEAEkE;IAClE,aAAa,CAAC,EAAE,QAAQ,CAAC,eAAe,CAAC,CAAC;IAC1C;wEACoE;IACpE,gBAAgB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACjC;;;iEAG6D;IAC7D,iBAAiB,CAAC,EAAE,MAAM,OAAO,CAAC,yBAAyB,CAAC,CAAC;IAC7D;;;4EAGwE;IACxE,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB;;;;OAIG;IACH,OAAO,CAAC,EAAE;QACR,KAAK,EAAE;YAAE,MAAM,CAAC,KAAK,EAAE,OAAO,oBAAoB,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;SAAE,CAAC;QACrF,OAAO,EAAE;YAAE,OAAO,CAAC,KAAK,EAAE,OAAO,oBAAoB,EAAE,cAAc,GAAG,IAAI,CAAA;SAAE,CAAC;QAC/E,4DAA4D;QAC5D,OAAO,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,MAAM,CAAC;QACvC,SAAS,EAAE,MAAM,CAAC;QAClB,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;QACtB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;KACzB,CAAC;CACH;AAED,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,iBAAiB,GAAG,MAAM,CAsUnE"}
|
package/dist/server/rest.js
CHANGED
|
@@ -5,11 +5,19 @@
|
|
|
5
5
|
*/
|
|
6
6
|
import express, { Router } from "express";
|
|
7
7
|
import { z } from "zod";
|
|
8
|
-
import {
|
|
8
|
+
import { randomUUID } from "node:crypto";
|
|
9
|
+
import { SPAWNABLE_HARNESS_KINDS } from "../shared/types.js";
|
|
10
|
+
import { AdapterNotFoundError, ExternalHarnessError, SessionAlreadyLiveError, SessionNotResumeableError } from "../core/errors.js";
|
|
11
|
+
import { SessionNotReadyError, UnknownSessionError } from "../core/session-manager.js";
|
|
12
|
+
import { listHarnessAdapters } from "../core/adapters/registry.js";
|
|
9
13
|
import { loadSettings, saveSettings } from "../cli/settings.js";
|
|
14
|
+
// Derived from SPAWNABLE_HARNESS_KINDS (shared/types.ts) so the zod
|
|
15
|
+
// validation and the TypeScript type can never drift from each other.
|
|
16
|
+
// Adding a new spawnable harness means updating that one constant; the
|
|
17
|
+
// validator here and the HarnessKind type both pick up the change automatically.
|
|
10
18
|
const createSessionSchema = z.object({
|
|
11
19
|
cwd: z.string().min(1),
|
|
12
|
-
harness: z.enum(
|
|
20
|
+
harness: z.enum(SPAWNABLE_HARNESS_KINDS),
|
|
13
21
|
profile: z.string().optional(),
|
|
14
22
|
});
|
|
15
23
|
const injectInputSchema = z.object({
|
|
@@ -23,6 +31,30 @@ const settingsPatchSchema = z.object({
|
|
|
23
31
|
telemetryOptIn: z.boolean().optional(),
|
|
24
32
|
recentDirs: z.array(z.string()).optional(),
|
|
25
33
|
});
|
|
34
|
+
const UI_EVENT_NAMES = [
|
|
35
|
+
"prompt.submitted",
|
|
36
|
+
"session.switched",
|
|
37
|
+
"macro.invoked",
|
|
38
|
+
"visualize.triggered",
|
|
39
|
+
"consent.changed",
|
|
40
|
+
"session.created",
|
|
41
|
+
"skill.viewed",
|
|
42
|
+
"skill.used",
|
|
43
|
+
"mcp.install",
|
|
44
|
+
];
|
|
45
|
+
/**
|
|
46
|
+
* Primitive-only value type for /api/track's `data` field — enforces that the
|
|
47
|
+
* payload is provably metadata-only (no nested objects or arrays that could
|
|
48
|
+
* carry arbitrary content). Keyed and value length-capped so the endpoint
|
|
49
|
+
* cannot be used as a vector to push large payloads through the remote batcher.
|
|
50
|
+
*/
|
|
51
|
+
const uiTrackDataValue = z.union([z.string().max(256), z.number(), z.boolean()]);
|
|
52
|
+
const uiTrackDataSchema = z.record(z.string().max(64), uiTrackDataValue).refine((obj) => Object.keys(obj).length <= 20, { message: "data must have at most 20 keys" });
|
|
53
|
+
const uiTrackSchema = z.object({
|
|
54
|
+
event: z.enum(UI_EVENT_NAMES),
|
|
55
|
+
data: uiTrackDataSchema.optional(),
|
|
56
|
+
harnessSessionId: z.string().optional(),
|
|
57
|
+
});
|
|
26
58
|
export function createRestRouter(options) {
|
|
27
59
|
const { sessionManager, adapters, version, identity, listWorkflows, listMacros } = options;
|
|
28
60
|
const router = Router();
|
|
@@ -43,6 +75,8 @@ export function createRestRouter(options) {
|
|
|
43
75
|
...(options.availableHarnesses ? { availableHarnesses: options.availableHarnesses } : {}),
|
|
44
76
|
...(options.listTasks ? { tasks: options.listTasks() } : {}),
|
|
45
77
|
...(options.firstRun !== undefined ? { firstRun: options.firstRun } : {}),
|
|
78
|
+
...(options.consentSource !== undefined ? { consentSource: options.consentSource } : {}),
|
|
79
|
+
...(options.consentEnvReason !== undefined ? { consentEnvReason: options.consentEnvReason } : {}),
|
|
46
80
|
};
|
|
47
81
|
res.json(state);
|
|
48
82
|
}
|
|
@@ -94,6 +128,36 @@ export function createRestRouter(options) {
|
|
|
94
128
|
next(err);
|
|
95
129
|
}
|
|
96
130
|
});
|
|
131
|
+
/**
|
|
132
|
+
* GET /api/harnesses — registry-driven listing of all known harness
|
|
133
|
+
* adapters with their mode (embedded vs external), label, and whether
|
|
134
|
+
* the binary is installed on this machine.
|
|
135
|
+
*
|
|
136
|
+
* Embedded adapters can be used in POST /sessions (harness field).
|
|
137
|
+
* External adapters expose mode:"external" so the UI can render them
|
|
138
|
+
* differently (e.g. a "companion app" chip) without being selectable
|
|
139
|
+
* as session targets.
|
|
140
|
+
*
|
|
141
|
+
* `installed` is best-effort and never throws — it may lag PATH changes
|
|
142
|
+
* by at most one request cycle since it probes the filesystem per request.
|
|
143
|
+
*/
|
|
144
|
+
router.get("/harnesses", async (_req, res, next) => {
|
|
145
|
+
try {
|
|
146
|
+
const adapters = listHarnessAdapters();
|
|
147
|
+
const entries = await Promise.all(adapters.map(async (adapter) => ({
|
|
148
|
+
id: adapter.id,
|
|
149
|
+
label: adapter.label,
|
|
150
|
+
mode: adapter.mode,
|
|
151
|
+
experimental: adapter.experimental ?? false,
|
|
152
|
+
installed: await adapter.detectInstalled(),
|
|
153
|
+
installMcpPrompt: adapter.installMcpPrompt(),
|
|
154
|
+
})));
|
|
155
|
+
res.json(entries);
|
|
156
|
+
}
|
|
157
|
+
catch (err) {
|
|
158
|
+
next(err);
|
|
159
|
+
}
|
|
160
|
+
});
|
|
97
161
|
router.post("/sessions", async (req, res, next) => {
|
|
98
162
|
const parsed = createSessionSchema.safeParse(req.body);
|
|
99
163
|
if (!parsed.success) {
|
|
@@ -109,6 +173,10 @@ export function createRestRouter(options) {
|
|
|
109
173
|
options.onSessionCreated?.(parsed.data.cwd, session.id);
|
|
110
174
|
}
|
|
111
175
|
catch (err) {
|
|
176
|
+
if (err instanceof AdapterNotFoundError) {
|
|
177
|
+
res.status(400).json({ error: err.message, code: err.code });
|
|
178
|
+
return;
|
|
179
|
+
}
|
|
112
180
|
next(err);
|
|
113
181
|
}
|
|
114
182
|
});
|
|
@@ -191,10 +259,22 @@ export function createRestRouter(options) {
|
|
|
191
259
|
res.json(session);
|
|
192
260
|
}
|
|
193
261
|
catch (err) {
|
|
194
|
-
if (err instanceof
|
|
262
|
+
if (err instanceof UnknownSessionError) {
|
|
195
263
|
res.status(404).json({ error: err.message });
|
|
196
264
|
return;
|
|
197
265
|
}
|
|
266
|
+
if (err instanceof AdapterNotFoundError) {
|
|
267
|
+
// A persisted session with an unknown harness kind (e.g. from a future
|
|
268
|
+
// or removed harness type) cannot be resumed.
|
|
269
|
+
res.status(400).json({ error: err.message, code: err.code });
|
|
270
|
+
return;
|
|
271
|
+
}
|
|
272
|
+
if (err instanceof ExternalHarnessError ||
|
|
273
|
+
err instanceof SessionAlreadyLiveError ||
|
|
274
|
+
err instanceof SessionNotResumeableError) {
|
|
275
|
+
res.status(409).json({ error: err.message, code: err.code });
|
|
276
|
+
return;
|
|
277
|
+
}
|
|
198
278
|
next(err);
|
|
199
279
|
}
|
|
200
280
|
});
|
|
@@ -204,7 +284,7 @@ export function createRestRouter(options) {
|
|
|
204
284
|
res.status(404).json({ error: "session not found" });
|
|
205
285
|
return;
|
|
206
286
|
}
|
|
207
|
-
sessionManager.kill(req.params.id);
|
|
287
|
+
void sessionManager.kill(req.params.id);
|
|
208
288
|
res.json({ ok: true });
|
|
209
289
|
});
|
|
210
290
|
router.post("/sessions/:id/input", async (req, res, next) => {
|
|
@@ -223,13 +303,66 @@ export function createRestRouter(options) {
|
|
|
223
303
|
res.json({ ok: true });
|
|
224
304
|
}
|
|
225
305
|
catch (err) {
|
|
226
|
-
if (err instanceof SessionNotReadyError) {
|
|
227
|
-
res.status(409).json({ error: err.message });
|
|
306
|
+
if (err instanceof SessionNotReadyError || err instanceof ExternalHarnessError) {
|
|
307
|
+
res.status(409).json({ error: err.message, code: err.code });
|
|
228
308
|
return;
|
|
229
309
|
}
|
|
230
310
|
next(err);
|
|
231
311
|
}
|
|
232
312
|
});
|
|
313
|
+
/**
|
|
314
|
+
* POST /api/track — UI-interaction analytics.
|
|
315
|
+
*
|
|
316
|
+
* Feeds the same store + batcher pipeline as hook events from /ingest, so
|
|
317
|
+
* ui.* events get the same local ndjson write (always) and remote delivery
|
|
318
|
+
* (per consent) that agent hook events do. The client fires fire-and-forget
|
|
319
|
+
* — we always respond 200 fast, then process.
|
|
320
|
+
*
|
|
321
|
+
* Consent semantics: store.append always; batcher.enqueue only when opted in
|
|
322
|
+
* (batcher.enqueue is gated by the HarnessEmitter's disabled flag, which
|
|
323
|
+
* mirrors the live consent state — same as hook events).
|
|
324
|
+
*/
|
|
325
|
+
router.post("/track", (req, res) => {
|
|
326
|
+
if (!options.uiTrack) {
|
|
327
|
+
// Not wired in this server instance (tests without UI analytics deps).
|
|
328
|
+
res.status(501).json({ error: "ui tracking not available" });
|
|
329
|
+
return;
|
|
330
|
+
}
|
|
331
|
+
// Validate before responding — bad shape gets a 400 synchronously.
|
|
332
|
+
const parsed = uiTrackSchema.safeParse(req.body);
|
|
333
|
+
if (!parsed.success) {
|
|
334
|
+
res.status(400).json({ error: parsed.error.message });
|
|
335
|
+
return;
|
|
336
|
+
}
|
|
337
|
+
// Respond immediately — fire-and-forget from the client's perspective.
|
|
338
|
+
res.json({ ok: true });
|
|
339
|
+
const { store, batcher, nextSeq, machineId, userId, tenantId } = options.uiTrack;
|
|
340
|
+
const { event, data, harnessSessionId } = parsed.data;
|
|
341
|
+
// Use the provided session id for seq tracking; fall back to a synthetic
|
|
342
|
+
// one-use id so ui events without a session still get a valid seq.
|
|
343
|
+
const sessionId = harnessSessionId ?? `ui-${randomUUID()}`;
|
|
344
|
+
const analyticsEvent = {
|
|
345
|
+
eventId: randomUUID(),
|
|
346
|
+
seq: nextSeq(sessionId),
|
|
347
|
+
ts: new Date().toISOString(),
|
|
348
|
+
userId,
|
|
349
|
+
tenantId,
|
|
350
|
+
machineId,
|
|
351
|
+
harnessSessionId: sessionId,
|
|
352
|
+
agentSessionId: null,
|
|
353
|
+
harness: "claude-code", // ui events have no harness kind; use canonical placeholder
|
|
354
|
+
type: event,
|
|
355
|
+
payload: {
|
|
356
|
+
...(data ?? {}),
|
|
357
|
+
surface: "ui",
|
|
358
|
+
},
|
|
359
|
+
};
|
|
360
|
+
void store.append(analyticsEvent).catch((err) => {
|
|
361
|
+
// Non-fatal: local write failure should never surface to the user.
|
|
362
|
+
void err;
|
|
363
|
+
});
|
|
364
|
+
batcher.enqueue(analyticsEvent);
|
|
365
|
+
});
|
|
233
366
|
return router;
|
|
234
367
|
}
|
|
235
368
|
//# sourceMappingURL=rest.js.map
|
package/dist/server/rest.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"rest.js","sourceRoot":"","sources":["../../src/server/rest.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"rest.js","sourceRoot":"","sources":["../../src/server/rest.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Skills listing server — backs GET /api/skills and GET /api/skills/:id.
|
|
3
|
+
*
|
|
4
|
+
* Two skill sources are merged:
|
|
5
|
+
* 1. Installed @sapiom packages: scans node_modules/@sapiom/{pkg}/skills/SKILL.md
|
|
6
|
+
* (gracefully empty when no package ships skills yet).
|
|
7
|
+
* 2. User's own ~/.claude/skills/{id}/SKILL.md (same convention Claude Code
|
|
8
|
+
* uses for project-specific skills).
|
|
9
|
+
*
|
|
10
|
+
* Path-traversal safety: skill ids are slug-shaped identifiers (letters,
|
|
11
|
+
* digits, hyphens, underscores) — any id that fails the SAFE_SLUG regex is
|
|
12
|
+
* rejected with a 404 before any filesystem access.
|
|
13
|
+
*
|
|
14
|
+
* The list endpoint (GET /api/skills) does a full directory walk across both
|
|
15
|
+
* roots. The detail endpoint (GET /api/skills/:id) resolves in O(1) by
|
|
16
|
+
* constructing candidate paths directly from the slug (= directory name),
|
|
17
|
+
* without re-walking the tree.
|
|
18
|
+
*
|
|
19
|
+
* Markdown is served as-is — the SPA renders it client-side (no HTML
|
|
20
|
+
* injection here). The frontmatter block is stripped before delivery so the
|
|
21
|
+
* rendered view shows only the body.
|
|
22
|
+
*/
|
|
23
|
+
import { Router } from "express";
|
|
24
|
+
export interface SkillMeta {
|
|
25
|
+
/** Stable identifier: directory name of the skill folder. */
|
|
26
|
+
id: string;
|
|
27
|
+
/** Human name from the `name:` frontmatter field. Falls back to the id. */
|
|
28
|
+
name: string;
|
|
29
|
+
/** One-line description from the `description:` frontmatter field. */
|
|
30
|
+
description: string;
|
|
31
|
+
/** Logical source group — shown in the panel's section header. */
|
|
32
|
+
source: "package" | "user";
|
|
33
|
+
}
|
|
34
|
+
export interface SkillDetail extends SkillMeta {
|
|
35
|
+
/** The full SKILL.md body with the frontmatter block stripped. */
|
|
36
|
+
body: string;
|
|
37
|
+
}
|
|
38
|
+
export interface SkillsRouterOptions {
|
|
39
|
+
/** Override the node_modules root for testing. */
|
|
40
|
+
nodeModulesRoot?: string;
|
|
41
|
+
/** Override the user skills root (default: ~/.claude/skills). */
|
|
42
|
+
userSkillsRoot?: string;
|
|
43
|
+
}
|
|
44
|
+
export declare function createSkillsRouter(options?: SkillsRouterOptions): Router;
|
|
45
|
+
//# sourceMappingURL=skills.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"skills.d.ts","sourceRoot":"","sources":["../../src/server/skills.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAKH,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AAGjC,MAAM,WAAW,SAAS;IACxB,6DAA6D;IAC7D,EAAE,EAAE,MAAM,CAAC;IACX,2EAA2E;IAC3E,IAAI,EAAE,MAAM,CAAC;IACb,sEAAsE;IACtE,WAAW,EAAE,MAAM,CAAC;IACpB,kEAAkE;IAClE,MAAM,EAAE,SAAS,GAAG,MAAM,CAAC;CAC5B;AAED,MAAM,WAAW,WAAY,SAAQ,SAAS;IAC5C,kEAAkE;IAClE,IAAI,EAAE,MAAM,CAAC;CACd;AAmJD,MAAM,WAAW,mBAAmB;IAClC,kDAAkD;IAClD,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,iEAAiE;IACjE,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAED,wBAAgB,kBAAkB,CAAC,OAAO,GAAE,mBAAwB,GAAG,MAAM,CA6H5E"}
|