@sapiom/harness 0.1.4 → 0.1.6
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 +74 -0
- package/dist/cli/bin.js +24 -7
- package/dist/cli/bin.js.map +1 -1
- package/dist/cli/consent.js +1 -1
- package/dist/core/adapters/adapter.d.ts +2 -2
- package/dist/core/api-key-provider.d.ts +79 -0
- package/dist/core/api-key-provider.d.ts.map +1 -0
- package/dist/core/api-key-provider.js +91 -0
- package/dist/core/api-key-provider.js.map +1 -0
- package/dist/core/canvas-run-state.d.ts +99 -0
- package/dist/core/canvas-run-state.d.ts.map +1 -0
- package/dist/core/canvas-run-state.js +191 -0
- package/dist/core/canvas-run-state.js.map +1 -0
- package/dist/core/canvas-svg.d.ts.map +1 -1
- package/dist/core/canvas-svg.js +28 -8
- package/dist/core/canvas-svg.js.map +1 -1
- package/dist/core/canvas-template.d.ts +4 -3
- package/dist/core/canvas-template.d.ts.map +1 -1
- package/dist/core/canvas-template.js +75 -3
- package/dist/core/canvas-template.js.map +1 -1
- package/dist/core/definition-slug-resolver.d.ts +46 -0
- package/dist/core/definition-slug-resolver.d.ts.map +1 -0
- package/dist/core/definition-slug-resolver.js +110 -0
- package/dist/core/definition-slug-resolver.js.map +1 -0
- package/dist/core/execution-detector.d.ts +59 -0
- package/dist/core/execution-detector.d.ts.map +1 -0
- package/dist/core/execution-detector.js +110 -0
- package/dist/core/execution-detector.js.map +1 -0
- package/dist/core/inject/mcp-config.d.ts.map +1 -1
- package/dist/core/inject/mcp-config.js +9 -1
- package/dist/core/inject/mcp-config.js.map +1 -1
- package/dist/core/render-local-run.d.ts +82 -0
- package/dist/core/render-local-run.d.ts.map +1 -0
- package/dist/core/render-local-run.js +105 -0
- package/dist/core/render-local-run.js.map +1 -0
- package/dist/core/render-log-slice.d.ts +30 -0
- package/dist/core/render-log-slice.d.ts.map +1 -0
- package/dist/core/render-log-slice.js +49 -0
- package/dist/core/render-log-slice.js.map +1 -0
- package/dist/core/render-run-state.d.ts +9 -0
- package/dist/core/render-run-state.d.ts.map +1 -0
- package/dist/core/render-run-state.js +120 -0
- package/dist/core/render-run-state.js.map +1 -0
- package/dist/core/run-local-bootstrap.d.ts +93 -0
- package/dist/core/run-local-bootstrap.d.ts.map +1 -0
- package/dist/core/run-local-bootstrap.js +155 -0
- package/dist/core/run-local-bootstrap.js.map +1 -0
- package/dist/core/run-state.d.ts +60 -0
- package/dist/core/run-state.d.ts.map +1 -0
- package/dist/core/run-state.js +122 -0
- package/dist/core/run-state.js.map +1 -0
- package/dist/core/stub-feedback.d.ts +52 -0
- package/dist/core/stub-feedback.d.ts.map +1 -0
- package/dist/core/stub-feedback.js +33 -0
- package/dist/core/stub-feedback.js.map +1 -0
- package/dist/core/workflow-registry.d.ts +12 -1
- package/dist/core/workflow-registry.d.ts.map +1 -1
- package/dist/core/workflow-registry.js +2 -0
- package/dist/core/workflow-registry.js.map +1 -1
- package/dist/server/actions.d.ts +139 -0
- package/dist/server/actions.d.ts.map +1 -0
- package/dist/server/actions.js +430 -0
- package/dist/server/actions.js.map +1 -0
- package/dist/server/auth-routes.d.ts +92 -0
- package/dist/server/auth-routes.d.ts.map +1 -0
- package/dist/server/auth-routes.js +151 -0
- package/dist/server/auth-routes.js.map +1 -0
- 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/rest.d.ts +5 -0
- package/dist/server/rest.d.ts.map +1 -1
- package/dist/server/rest.js +36 -12
- package/dist/server/rest.js.map +1 -1
- package/dist/server/runs.d.ts +34 -0
- package/dist/server/runs.d.ts.map +1 -0
- package/dist/server/runs.js +59 -0
- package/dist/server/runs.js.map +1 -0
- package/dist/server/static.d.ts +15 -1
- package/dist/server/static.d.ts.map +1 -1
- package/dist/server/static.js +54 -4
- package/dist/server/static.js.map +1 -1
- package/dist/shared/types.d.ts +136 -2
- package/dist/shared/types.d.ts.map +1 -1
- package/dist/shared/types.js.map +1 -1
- package/dist/web/assets/index-DCtyI4VW.css +32 -0
- package/dist/web/assets/index-WSw5RvYR.js +445 -0
- package/dist/web/canvas/sess-boot/index.html +305 -0
- package/dist/web/index.html +4 -9
- package/dist/web/welcome-hero-dark.png +0 -0
- package/dist/web/welcome-hero-light.png +0 -0
- package/package.json +6 -3
- package/dist/server/skills.d.ts +0 -51
- package/dist/server/skills.d.ts.map +0 -1
- package/dist/server/skills.js +0 -312
- package/dist/server/skills.js.map +0 -1
- package/dist/web/assets/index-BhKGSTTT.js +0 -214
- package/dist/web/assets/index-DRTrwTku.css +0 -32
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Should the "stubbed" chip render for the step named `stepName`?
|
|
3
|
+
*
|
|
4
|
+
* True only when BOTH hold:
|
|
5
|
+
* 1. the run was stub-served (`run.stubbed` — set by renderLocalRun for an
|
|
6
|
+
* offline local run; never by renderRunState for a prod run), and
|
|
7
|
+
* 2. that step actually ran this run (it appears in `run.steps`).
|
|
8
|
+
*
|
|
9
|
+
* A local run resolves every `ctx.sapiom.*` call from a stub, so a step that ran
|
|
10
|
+
* was stub-served — that is the honest granularity (agent-core records no
|
|
11
|
+
* per-CALL stub attribution). A step the run never reached, or any step of a
|
|
12
|
+
* real run, gets no chip. A null run (nothing observed yet) is never stubbed.
|
|
13
|
+
*/
|
|
14
|
+
export function stepIsStubbed(run, stepName) {
|
|
15
|
+
if (!run || run.stubbed !== true)
|
|
16
|
+
return false;
|
|
17
|
+
return run.steps.some((s) => s.name === stepName);
|
|
18
|
+
}
|
|
19
|
+
export function stubNotice(run) {
|
|
20
|
+
if (!run)
|
|
21
|
+
return null;
|
|
22
|
+
const notice = {};
|
|
23
|
+
if (run.unusedStubs && run.unusedStubs.length > 0) {
|
|
24
|
+
notice.unusedStubs = run.unusedStubs;
|
|
25
|
+
}
|
|
26
|
+
if (run.stubWarnings && run.stubWarnings.length > 0) {
|
|
27
|
+
notice.stubWarnings = run.stubWarnings;
|
|
28
|
+
}
|
|
29
|
+
// Empty object == no real signal; report honest absence as null so the
|
|
30
|
+
// inspector renders no notice block at all.
|
|
31
|
+
return notice.unusedStubs || notice.stubWarnings ? notice : null;
|
|
32
|
+
}
|
|
33
|
+
//# sourceMappingURL=stub-feedback.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stub-feedback.js","sourceRoot":"","sources":["../../src/core/stub-feedback.ts"],"names":[],"mappings":"AAqBA;;;;;;;;;;;;GAYG;AACH,MAAM,UAAU,aAAa,CAAC,GAAmB,EAAE,QAAgB;IACjE,IAAI,CAAC,GAAG,IAAI,GAAG,CAAC,OAAO,KAAK,IAAI;QAAE,OAAO,KAAK,CAAC;IAC/C,OAAO,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC;AACpD,CAAC;AAmBD,MAAM,UAAU,UAAU,CAAC,GAAmB;IAC5C,IAAI,CAAC,GAAG;QAAE,OAAO,IAAI,CAAC;IACtB,MAAM,MAAM,GAAe,EAAE,CAAC;IAC9B,IAAI,GAAG,CAAC,WAAW,IAAI,GAAG,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAClD,MAAM,CAAC,WAAW,GAAG,GAAG,CAAC,WAAW,CAAC;IACvC,CAAC;IACD,IAAI,GAAG,CAAC,YAAY,IAAI,GAAG,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACpD,MAAM,CAAC,YAAY,GAAG,GAAG,CAAC,YAAY,CAAC;IACzC,CAAC;IACD,uEAAuE;IACvE,4CAA4C;IAC5C,OAAO,MAAM,CAAC,WAAW,IAAI,MAAM,CAAC,YAAY,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC;AACnE,CAAC"}
|
|
@@ -39,5 +39,16 @@ export declare class WorkflowRegistry {
|
|
|
39
39
|
/** Registers an arbitrary path (the "+ Connect" flow); marker is optional at connect time. */
|
|
40
40
|
connectPath(inputPath: string): Promise<WorkflowInfo>;
|
|
41
41
|
}
|
|
42
|
-
|
|
42
|
+
/**
|
|
43
|
+
* The subset of {@link WorkflowRegistry} the workflows router depends on. Typed
|
|
44
|
+
* structurally so a caller can pass a wrapper (e.g. one that enriches `list()`
|
|
45
|
+
* with resolved slugs) without an unsafe cast — a missing method is then a
|
|
46
|
+
* compile error, not a runtime crash.
|
|
47
|
+
*/
|
|
48
|
+
export interface WorkflowRegistryLike {
|
|
49
|
+
list(): Promise<WorkflowInfo[]>;
|
|
50
|
+
scan(root: string): Promise<WorkflowInfo[]>;
|
|
51
|
+
connectPath(inputPath: string): Promise<WorkflowInfo>;
|
|
52
|
+
}
|
|
53
|
+
export declare function createWorkflowsRouter(registry: WorkflowRegistryLike): ExpressRouter;
|
|
43
54
|
//# sourceMappingURL=workflow-registry.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"workflow-registry.d.ts","sourceRoot":"","sources":["../../src/core/workflow-registry.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAKH,OAAO,EAAU,KAAK,MAAM,IAAI,aAAa,EAAE,MAAM,SAAS,CAAC;AAE/D,OAAO,EAAiB,KAAK,YAAY,EAAE,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"workflow-registry.d.ts","sourceRoot":"","sources":["../../src/core/workflow-registry.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAKH,OAAO,EAAU,KAAK,MAAM,IAAI,aAAa,EAAE,MAAM,SAAS,CAAC;AAE/D,OAAO,EAAiB,KAAK,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAsFtE,qBAAa,gBAAgB;IAQf,OAAO,CAAC,QAAQ,CAAC,YAAY;IAPzC,OAAO,CAAC,SAAS,CAAsB;IACvC,OAAO,CAAC,MAAM,CAAS;IACvB;;6EAEyE;IACzE,OAAO,CAAC,UAAU,CAAoC;gBAEzB,YAAY,GAAE,MAA4C;YAEzE,YAAY;YAWZ,OAAO;IAYrB;8DAC0D;IAC1D,OAAO,CAAC,OAAO;IAST,IAAI,IAAI,OAAO,CAAC,YAAY,EAAE,CAAC;IAKrC;;;;;;;OAOG;IACG,KAAK,IAAI,OAAO,CAAC,YAAY,EAAE,CAAC;IAuBtC,+EAA+E;IACzE,IAAI,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC;IAmBjD,8FAA8F;IACxF,WAAW,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC;CAmB5D;AAED;;;;;GAKG;AACH,MAAM,WAAW,oBAAoB;IACnC,IAAI,IAAI,OAAO,CAAC,YAAY,EAAE,CAAC,CAAC;IAChC,IAAI,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC,CAAC;IAC5C,WAAW,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC,CAAC;CACvD;AAED,wBAAgB,qBAAqB,CAAC,QAAQ,EAAE,oBAAoB,GAAG,aAAa,CAkCnF"}
|
|
@@ -74,6 +74,7 @@ async function scanDir(root, dir, depth, found) {
|
|
|
74
74
|
name: await nameFor(safeDir),
|
|
75
75
|
path: safeDir,
|
|
76
76
|
definitionId: marker.definitionId ?? null,
|
|
77
|
+
definitionSlug: marker.name ?? null,
|
|
77
78
|
source: "scan",
|
|
78
79
|
});
|
|
79
80
|
return;
|
|
@@ -196,6 +197,7 @@ export class WorkflowRegistry {
|
|
|
196
197
|
name: await nameFor(absolutePath),
|
|
197
198
|
path: absolutePath,
|
|
198
199
|
definitionId: marker?.definitionId ?? null,
|
|
200
|
+
definitionSlug: marker?.name ?? null,
|
|
199
201
|
source: "connect",
|
|
200
202
|
};
|
|
201
203
|
const idx = this.workflows.findIndex((workflow) => workflow.path === absolutePath);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"workflow-registry.js","sourceRoot":"","sources":["../../src/core/workflow-registry.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,KAAK,EAAE,MAAM,kBAAkB,CAAC;AACvC,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;AAC9B,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAClC,OAAO,EAAE,MAAM,EAAgC,MAAM,SAAS,CAAC;AAE/D,OAAO,EAAE,aAAa,EAAqB,MAAM,oBAAoB,CAAC;AACtE,OAAO,EAAE,mBAAmB,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AAE1E,MAAM,cAAc,GAAG,CAAC,CAAC;AACzB,MAAM,cAAc,GAAG,IAAI,GAAG,CAAC,CAAC,cAAc,EAAE,MAAM,CAAC,CAAC,CAAC;AAEzD,SAAS,UAAU,CAAC,SAAiB;IACnC,IAAI,SAAS,KAAK,GAAG;QAAE,OAAO,EAAE,CAAC,OAAO,EAAE,CAAC;IAC3C,IAAI,SAAS,CAAC,UAAU,CAAC,IAAI,CAAC;QAAE,OAAO,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;IACnF,OAAO,SAAS,CAAC;AACnB,CAAC;
|
|
1
|
+
{"version":3,"file":"workflow-registry.js","sourceRoot":"","sources":["../../src/core/workflow-registry.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,139 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Actions router — backs the direct, in-app agent action macros:
|
|
3
|
+
* POST /api/workflows/:id/deploy → deploy the linked agent (build + poll).
|
|
4
|
+
* POST /api/runs → start a prod execution → { executionId }.
|
|
5
|
+
*
|
|
6
|
+
* These are the "direct" replacements for the old CLI/agent-driven macros: the
|
|
7
|
+
* harness server calls the Sapiom backend itself (via {@link deploy} / {@link run}
|
|
8
|
+
* from @sapiom/agent-core), so an action never spawns a subprocess agent and never
|
|
9
|
+
* consumes the user's LLM credits. The Sapiom API key is held server-side and
|
|
10
|
+
* never forwarded to the browser — exactly like {@link createRunsRouter}: the
|
|
11
|
+
* SPA hits these local `/api/*` routes (no key in the request) and the router
|
|
12
|
+
* presents the key to the backend on its behalf.
|
|
13
|
+
*
|
|
14
|
+
* Deploy streams its build lifecycle as NDJSON (one JSON object per line, the
|
|
15
|
+
* same line-oriented convention the local-run stream uses) so the canvas can
|
|
16
|
+
* show "building…" the moment the build kicks off and a terminal line when it
|
|
17
|
+
* settles. Prod-run is a single request/response returning `{ executionId }`,
|
|
18
|
+
* which the existing live-canvas path then polls via the runs router.
|
|
19
|
+
*
|
|
20
|
+
* Run-local (`POST /api/runs/local`) is the offline sibling: it spawns the
|
|
21
|
+
* run-local bootstrap child, which runs the workflow in-process against stub
|
|
22
|
+
* capabilities and streams NDJSON back — one {@link LocalStepTrace} per line,
|
|
23
|
+
* then a terminal summary carrying `unusedStubs`/`stubWarnings`. It needs no
|
|
24
|
+
* API key and makes no network call, so it works signed-out and at zero cost.
|
|
25
|
+
*/
|
|
26
|
+
import { Router } from "express";
|
|
27
|
+
import { createClient, deploy as coreDeploy, run as coreRun, readConfig as coreReadConfig } from "@sapiom/agent-core";
|
|
28
|
+
import { type ApiKeyProvider } from "../core/api-key-provider.js";
|
|
29
|
+
/**
|
|
30
|
+
* A registered workflow the actions router can act on — the subset of
|
|
31
|
+
* {@link WorkflowInfo} deploy needs. Resolved by the injected
|
|
32
|
+
* {@link ActionsRouterOpts.resolveWorkflow} so the router stays decoupled from
|
|
33
|
+
* the registry (mirrors the rest router's `findWorkflow` seam).
|
|
34
|
+
*/
|
|
35
|
+
export interface ActionWorkflow {
|
|
36
|
+
/** Absolute path to the agent project directory (deploy's `projectDir`). */
|
|
37
|
+
path: string;
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* One line of the deploy NDJSON stream. `building` is emitted once the build is
|
|
41
|
+
* triggered; exactly one terminal line (`ready` | `error`) closes the stream.
|
|
42
|
+
* `capability`-agnostic and credential-free by construction.
|
|
43
|
+
*/
|
|
44
|
+
export type DeployStreamEvent = {
|
|
45
|
+
phase: "building";
|
|
46
|
+
definitionId: string;
|
|
47
|
+
} | {
|
|
48
|
+
phase: "ready";
|
|
49
|
+
definitionId: string;
|
|
50
|
+
buildRunId: string;
|
|
51
|
+
status: string;
|
|
52
|
+
} | {
|
|
53
|
+
phase: "error";
|
|
54
|
+
code: string;
|
|
55
|
+
message: string;
|
|
56
|
+
hint?: string;
|
|
57
|
+
};
|
|
58
|
+
/**
|
|
59
|
+
* Injectable core operations. Real implementations are the @sapiom/agent-core
|
|
60
|
+
* exports; tests substitute fakes so no route ever touches git or the network.
|
|
61
|
+
* Undocumented for prod — a test seam only, mirroring `fetchImpl` in runs.ts.
|
|
62
|
+
*/
|
|
63
|
+
export interface ActionsCoreDeps {
|
|
64
|
+
createClient: typeof createClient;
|
|
65
|
+
deploy: typeof coreDeploy;
|
|
66
|
+
run: typeof coreRun;
|
|
67
|
+
readConfig: typeof coreReadConfig;
|
|
68
|
+
}
|
|
69
|
+
/**
|
|
70
|
+
* The slice of node's ChildProcess the run-local route uses — injectable so
|
|
71
|
+
* tests drive a fake child (a scripted stdout stream) without spawning a real
|
|
72
|
+
* `node` process. Mirrors {@link TaskProcess} in task-manager.ts.
|
|
73
|
+
*/
|
|
74
|
+
export interface RunLocalChildProcess {
|
|
75
|
+
/** Where the request JSON is written; closed immediately after. */
|
|
76
|
+
stdin: NodeJS.WritableStream | null;
|
|
77
|
+
/** Line-oriented NDJSON the route forwards to the HTTP response. */
|
|
78
|
+
stdout: NodeJS.ReadableStream | null;
|
|
79
|
+
/** Diagnostics; a bounded tail is kept for failure reporting. */
|
|
80
|
+
stderr: NodeJS.ReadableStream | null;
|
|
81
|
+
on(event: "exit", listener: (code: number | null) => void): unknown;
|
|
82
|
+
on(event: "error", listener: (err: Error) => void): unknown;
|
|
83
|
+
}
|
|
84
|
+
/** Spawn the run-local bootstrap child. Test seam — defaults to `node`ing the
|
|
85
|
+
* compiled bootstrap. */
|
|
86
|
+
export type RunLocalSpawnFn = () => RunLocalChildProcess;
|
|
87
|
+
/**
|
|
88
|
+
* Resolve the compiled run-local bootstrap entry. This module lives at
|
|
89
|
+
* `dist/server/actions.js` (built) or `src/server/actions.ts` (tsx dev /
|
|
90
|
+
* vitest) — the bootstrap is its sibling one directory over in `core/`, with
|
|
91
|
+
* the same `.js`/`.ts` extension as this file. Reading the extension off
|
|
92
|
+
* `import.meta.url` (rather than hard-coding `.js`) keeps a real dev-server
|
|
93
|
+
* spawn resolvable too. Exported for unit coverage of the path math.
|
|
94
|
+
*/
|
|
95
|
+
export declare function resolveRunLocalBootstrapPath(moduleUrl: string): string;
|
|
96
|
+
export interface ActionsRouterOpts {
|
|
97
|
+
/**
|
|
98
|
+
* Sapiom credential the deploy/prod-run actions authenticate with. Accepts
|
|
99
|
+
* either a plain `string | null` (the boot-time key) or an
|
|
100
|
+
* {@link ApiKeyProvider}; pass a provider — exactly like
|
|
101
|
+
* {@link createRunsRouter} — so a rejected key can refresh + retry and so each
|
|
102
|
+
* request reads the current key rather than a boot-time snapshot. This is the
|
|
103
|
+
* API key (`sk_…`), NOT the local boot token. `null` (or a provider whose
|
|
104
|
+
* `getKey()` is null) means the harness is not signed in.
|
|
105
|
+
*/
|
|
106
|
+
apiKey: string | null | ApiKeyProvider;
|
|
107
|
+
/**
|
|
108
|
+
* Backend host for @sapiom/agent-core's GatewayClient (the CORE surface —
|
|
109
|
+
* `/v1/workflows` is appended by the client). Resolved from env by default.
|
|
110
|
+
* Test seam.
|
|
111
|
+
*/
|
|
112
|
+
coreBaseUrl?: string;
|
|
113
|
+
/**
|
|
114
|
+
* Resolve a workflow `:id` (as it appears in the route path) to the registered
|
|
115
|
+
* workflow, or null when unknown. The caller supplies this from the live
|
|
116
|
+
* registry — the router does not read the registry directly.
|
|
117
|
+
*/
|
|
118
|
+
resolveWorkflow: (id: string) => ActionWorkflow | null;
|
|
119
|
+
/** Injectable core operations. Test seam; defaults to the real exports. */
|
|
120
|
+
coreDeps?: Partial<ActionsCoreDeps>;
|
|
121
|
+
/**
|
|
122
|
+
* Spawn the run-local bootstrap child. Undocumented for prod — a test seam
|
|
123
|
+
* only (defaults to `node`ing the compiled bootstrap), so a test can stream a
|
|
124
|
+
* scripted trace without spawning a real process, mirroring `fetchImpl` in
|
|
125
|
+
* runs.ts and the `spawnProcess` seam in task-manager.ts.
|
|
126
|
+
*/
|
|
127
|
+
runLocalSpawn?: RunLocalSpawnFn;
|
|
128
|
+
}
|
|
129
|
+
/**
|
|
130
|
+
* Create the actions router. Mounts:
|
|
131
|
+
* - `POST /api/workflows/:id/deploy` — NDJSON build-status stream.
|
|
132
|
+
* - `POST /api/runs` — `{ executionId }` for a started prod execution.
|
|
133
|
+
* - `POST /api/runs/local` — NDJSON offline stub-run trace + summary.
|
|
134
|
+
*
|
|
135
|
+
* Deploy and prod-run run server-side with the held API key; run-local is fully
|
|
136
|
+
* offline and needs no key. None of them ever involve an AI coding agent.
|
|
137
|
+
*/
|
|
138
|
+
export declare function createActionsRouter(opts: ActionsRouterOpts): Router;
|
|
139
|
+
//# sourceMappingURL=actions.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"actions.d.ts","sourceRoot":"","sources":["../../src/server/actions.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AAOH,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AACjC,OAAO,EAEL,YAAY,EACZ,MAAM,IAAI,UAAU,EACpB,GAAG,IAAI,OAAO,EACd,UAAU,IAAI,cAAc,EAI7B,MAAM,oBAAoB,CAAC;AAI5B,OAAO,EACL,KAAK,cAAc,EAEpB,MAAM,6BAA6B,CAAC;AAErC;;;;;GAKG;AACH,MAAM,WAAW,cAAc;IAC7B,4EAA4E;IAC5E,IAAI,EAAE,MAAM,CAAC;CACd;AAED;;;;GAIG;AACH,MAAM,MAAM,iBAAiB,GACzB;IAAE,KAAK,EAAE,UAAU,CAAC;IAAC,YAAY,EAAE,MAAM,CAAA;CAAE,GAC3C;IAAE,KAAK,EAAE,OAAO,CAAC;IAAC,YAAY,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,GAC5E;IAAE,KAAK,EAAE,OAAO,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC;AAErE;;;;GAIG;AACH,MAAM,WAAW,eAAe;IAC9B,YAAY,EAAE,OAAO,YAAY,CAAC;IAClC,MAAM,EAAE,OAAO,UAAU,CAAC;IAC1B,GAAG,EAAE,OAAO,OAAO,CAAC;IACpB,UAAU,EAAE,OAAO,cAAc,CAAC;CACnC;AASD;;;;GAIG;AACH,MAAM,WAAW,oBAAoB;IACnC,mEAAmE;IACnE,KAAK,EAAE,MAAM,CAAC,cAAc,GAAG,IAAI,CAAC;IACpC,oEAAoE;IACpE,MAAM,EAAE,MAAM,CAAC,cAAc,GAAG,IAAI,CAAC;IACrC,iEAAiE;IACjE,MAAM,EAAE,MAAM,CAAC,cAAc,GAAG,IAAI,CAAC;IACrC,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,KAAK,IAAI,GAAG,OAAO,CAAC;IACpE,EAAE,CAAC,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC,GAAG,EAAE,KAAK,KAAK,IAAI,GAAG,OAAO,CAAC;CAC7D;AAED;0BAC0B;AAC1B,MAAM,MAAM,eAAe,GAAG,MAAM,oBAAoB,CAAC;AAEzD;;;;;;;GAOG;AACH,wBAAgB,4BAA4B,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAItE;AA0CD,MAAM,WAAW,iBAAiB;IAChC;;;;;;;;OAQG;IACH,MAAM,EAAE,MAAM,GAAG,IAAI,GAAG,cAAc,CAAC;IACvC;;;;OAIG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB;;;;OAIG;IACH,eAAe,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,cAAc,GAAG,IAAI,CAAC;IACvD,2EAA2E;IAC3E,QAAQ,CAAC,EAAE,OAAO,CAAC,eAAe,CAAC,CAAC;IACpC;;;;;OAKG;IACH,aAAa,CAAC,EAAE,eAAe,CAAC;CACjC;AA4FD;;;;;;;;GAQG;AACH,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,iBAAiB,GAAG,MAAM,CAuRnE"}
|