@acpus/runtime 0.6.0 → 0.6.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/agent-telemetry.d.ts.map +1 -1
- package/dist/agent-telemetry.js.map +1 -1
- package/dist/artifacts.d.ts.map +1 -1
- package/dist/attempt-artifacts.d.ts.map +1 -1
- package/dist/attempt-artifacts.js.map +1 -1
- package/dist/client.d.ts +1 -5
- package/dist/client.d.ts.map +1 -1
- package/dist/client.js +2 -2
- package/dist/client.js.map +1 -1
- package/dist/evaluator.d.ts.map +1 -1
- package/dist/executors/agent.d.ts.map +1 -1
- package/dist/executors/agent.js.map +1 -1
- package/dist/executors/mock-program.d.ts.map +1 -1
- package/dist/executors/program.d.ts +1 -1
- package/dist/executors/program.d.ts.map +1 -1
- package/dist/executors/program.js +10 -3
- package/dist/executors/program.js.map +1 -1
- package/dist/executors/types.d.ts +2 -0
- package/dist/executors/types.d.ts.map +1 -1
- package/dist/fork.d.ts +4 -0
- package/dist/fork.d.ts.map +1 -1
- package/dist/fork.js +9 -1
- package/dist/fork.js.map +1 -1
- package/dist/hooks/journal.d.ts +20 -0
- package/dist/hooks/journal.d.ts.map +1 -0
- package/dist/hooks/journal.js +49 -0
- package/dist/hooks/journal.js.map +1 -0
- package/dist/hooks/loader.d.ts +41 -0
- package/dist/hooks/loader.d.ts.map +1 -0
- package/dist/hooks/loader.js +168 -0
- package/dist/hooks/loader.js.map +1 -0
- package/dist/hooks/payload.d.ts +17 -0
- package/dist/hooks/payload.d.ts.map +1 -0
- package/dist/hooks/payload.js +45 -0
- package/dist/hooks/payload.js.map +1 -0
- package/dist/hooks/runner.d.ts +42 -0
- package/dist/hooks/runner.d.ts.map +1 -0
- package/dist/hooks/runner.js +161 -0
- package/dist/hooks/runner.js.map +1 -0
- package/dist/index.d.ts +4 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +4 -0
- package/dist/index.js.map +1 -1
- package/dist/interpreter.d.ts +28 -5
- package/dist/interpreter.d.ts.map +1 -1
- package/dist/interpreter.js +382 -2
- package/dist/interpreter.js.map +1 -1
- package/dist/keys.js.map +1 -1
- package/dist/run-control.d.ts.map +1 -1
- package/dist/run-control.js.map +1 -1
- package/dist/store.d.ts +9 -1
- package/dist/store.d.ts.map +1 -1
- package/dist/store.js +21 -1
- package/dist/store.js.map +1 -1
- package/dist/supervisor-app.d.ts.map +1 -1
- package/dist/supervisor-app.js +33 -3
- package/dist/supervisor-app.js.map +1 -1
- package/dist/supervisor-discovery.js.map +1 -1
- package/dist/supervisor-runner.js.map +1 -1
- package/dist/types.d.ts +15 -1
- package/dist/types.d.ts.map +1 -1
- package/dist/validate-input.d.ts.map +1 -1
- package/dist/validate-input.js.map +1 -1
- package/dist/validate-signal.d.ts.map +1 -1
- package/dist/workflow-outputs.js.map +1 -1
- package/package.json +5 -4
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
import { appendFileSync, existsSync, mkdirSync, readFileSync } from "node:fs";
|
|
2
|
+
import { dirname, join } from "node:path";
|
|
3
|
+
/**
|
|
4
|
+
* Append-only per-Run journal of injector handler invocations.
|
|
5
|
+
*
|
|
6
|
+
* One line of JSON per handler call, storing the full resolved Agent prompt
|
|
7
|
+
* prefix and Program env (not a boolean flag) for audit/observability. Events
|
|
8
|
+
* are never journaled.
|
|
9
|
+
*/
|
|
10
|
+
export class HookJournal {
|
|
11
|
+
path;
|
|
12
|
+
sequence;
|
|
13
|
+
constructor(runDir) {
|
|
14
|
+
this.path = join(runDir, "hook-journal.jsonl");
|
|
15
|
+
this.sequence = this.lastSequence();
|
|
16
|
+
}
|
|
17
|
+
/** Append one injector record, assigning the next monotonic sequence. */
|
|
18
|
+
append(entry) {
|
|
19
|
+
const full = { sequence: ++this.sequence, ...entry };
|
|
20
|
+
mkdirSync(dirname(this.path), { recursive: true });
|
|
21
|
+
appendFileSync(this.path, `${JSON.stringify(full)}\n`, "utf8");
|
|
22
|
+
return full;
|
|
23
|
+
}
|
|
24
|
+
/** Read all journal records in append order. */
|
|
25
|
+
read() {
|
|
26
|
+
if (!existsSync(this.path))
|
|
27
|
+
return [];
|
|
28
|
+
const entries = [];
|
|
29
|
+
for (const line of readFileSync(this.path, "utf8").split("\n")) {
|
|
30
|
+
if (line.trim().length === 0)
|
|
31
|
+
continue;
|
|
32
|
+
// appendFileSync is not atomic; a crash mid-append can leave a torn final
|
|
33
|
+
// line. Skip unparseable lines rather than throwing on the whole journal.
|
|
34
|
+
try {
|
|
35
|
+
entries.push(JSON.parse(line));
|
|
36
|
+
}
|
|
37
|
+
catch {
|
|
38
|
+
continue;
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
return entries;
|
|
42
|
+
}
|
|
43
|
+
/** Highest sequence already on disk (0 when the journal is empty). */
|
|
44
|
+
lastSequence() {
|
|
45
|
+
const entries = this.read();
|
|
46
|
+
return entries.length > 0 ? entries[entries.length - 1].sequence : 0;
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
//# sourceMappingURL=journal.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"journal.js","sourceRoot":"","sources":["../../src/hooks/journal.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,UAAU,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAC9E,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAG1C;;;;;;GAMG;AACH,MAAM,OAAO,WAAW;IACL,IAAI,CAAS;IACtB,QAAQ,CAAS;IAEzB,YAAY,MAAc;QACxB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,MAAM,EAAE,oBAAoB,CAAC,CAAC;QAC/C,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,YAAY,EAAE,CAAC;IACtC,CAAC;IAED,yEAAyE;IACzE,MAAM,CAAC,KAAyC;QAC9C,MAAM,IAAI,GAAqB,EAAE,QAAQ,EAAE,EAAE,IAAI,CAAC,QAAQ,EAAE,GAAG,KAAK,EAAE,CAAC;QACvE,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QACnD,cAAc,CAAC,IAAI,CAAC,IAAI,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;QAC/D,OAAO,IAAI,CAAC;IACd,CAAC;IAED,gDAAgD;IAChD,IAAI;QACF,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC;YAAE,OAAO,EAAE,CAAC;QACtC,MAAM,OAAO,GAAuB,EAAE,CAAC;QACvC,KAAK,MAAM,IAAI,IAAI,YAAY,CAAC,IAAI,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;YAC/D,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC;gBAAE,SAAS;YACvC,0EAA0E;YAC1E,0EAA0E;YAC1E,IAAI,CAAC;gBACH,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAqB,CAAC,CAAC;YACrD,CAAC;YAAC,MAAM,CAAC;gBACP,SAAS;YACX,CAAC;QACH,CAAC;QACD,OAAO,OAAO,CAAC;IACjB,CAAC;IAED,sEAAsE;IAC9D,YAAY;QAClB,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;QAC5B,OAAO,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;IACvE,CAAC;CACF"}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import { type HookConfig, type HookConfigSnapshot } from "@acpus/core";
|
|
2
|
+
/** Absolute path to the global hooks file (~/.acpus/hooks.yaml). */
|
|
3
|
+
export declare function globalHookConfigPath(): string;
|
|
4
|
+
/** Absolute path to the project hooks file (<workspace>/.acpus/hooks.yaml). */
|
|
5
|
+
export declare function projectHookConfigPath(workspace: string): string;
|
|
6
|
+
/** True when the config declares no injectors and no events. */
|
|
7
|
+
export declare function isEmptyHookConfig(config: HookConfig): boolean;
|
|
8
|
+
/** A loaded layer, plus its source path when the file existed. */
|
|
9
|
+
export interface LoadedLayer {
|
|
10
|
+
path: string;
|
|
11
|
+
config: HookConfig;
|
|
12
|
+
exists: boolean;
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* Loads and merges hook configuration from the global and project layers.
|
|
16
|
+
*
|
|
17
|
+
* A missing layer is treated as empty (no error). Merge concatenates handler
|
|
18
|
+
* arrays per key with global handlers ordered before project handlers.
|
|
19
|
+
*/
|
|
20
|
+
export declare class HookConfigLoader {
|
|
21
|
+
private readonly workspace;
|
|
22
|
+
constructor(workspace?: string);
|
|
23
|
+
/** Read a single layer; absent or empty files yield an empty config. */
|
|
24
|
+
loadLayer(path: string): LoadedLayer;
|
|
25
|
+
/** Load and merge both layers, returning the merged config plus source paths. */
|
|
26
|
+
load(): {
|
|
27
|
+
merged: HookConfig;
|
|
28
|
+
globalLayer: LoadedLayer;
|
|
29
|
+
projectLayer: LoadedLayer;
|
|
30
|
+
};
|
|
31
|
+
/**
|
|
32
|
+
* Freeze the merged configuration into a snapshot. Returns `undefined` when
|
|
33
|
+
* both layers are absent/empty so the runtime can skip all hook machinery.
|
|
34
|
+
*/
|
|
35
|
+
freeze(): HookConfigSnapshot | undefined;
|
|
36
|
+
}
|
|
37
|
+
/** Concatenate handler arrays per key; global handlers precede project handlers. */
|
|
38
|
+
export declare function mergeHookConfigs(global: HookConfig, project: HookConfig): HookConfig;
|
|
39
|
+
/** Stable "sha256:..." hash over the canonicalized merged configuration. */
|
|
40
|
+
export declare function hashHookConfig(config: HookConfig): string;
|
|
41
|
+
//# sourceMappingURL=loader.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"loader.d.ts","sourceRoot":"","sources":["../../src/hooks/loader.ts"],"names":[],"mappings":"AAKA,OAAO,EAKL,KAAK,UAAU,EACf,KAAK,kBAAkB,EAGxB,MAAM,aAAa,CAAC;AAErB,oEAAoE;AACpE,wBAAgB,oBAAoB,IAAI,MAAM,CAE7C;AAED,+EAA+E;AAC/E,wBAAgB,qBAAqB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAE/D;AAED,gEAAgE;AAChE,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,UAAU,GAAG,OAAO,CAI7D;AAED,kEAAkE;AAClE,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,UAAU,CAAC;IACnB,MAAM,EAAE,OAAO,CAAC;CACjB;AAED;;;;;GAKG;AACH,qBAAa,gBAAgB;IACf,OAAO,CAAC,QAAQ,CAAC,SAAS;IAAtC,YAA6B,SAAS,GAAE,MAAsB,EAAI;IAElE,wEAAwE;IACxE,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,WAAW,CAOnC;IAED,iFAAiF;IACjF,IAAI,IAAI;QAAE,MAAM,EAAE,UAAU,CAAC;QAAC,WAAW,EAAE,WAAW,CAAC;QAAC,YAAY,EAAE,WAAW,CAAA;KAAE,CAKlF;IAED;;;OAGG;IACH,MAAM,IAAI,kBAAkB,GAAG,SAAS,CASvC;CACF;AAyED,oFAAoF;AACpF,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,UAAU,EAAE,OAAO,EAAE,UAAU,GAAG,UAAU,CAepF;AAED,4EAA4E;AAC5E,wBAAgB,cAAc,CAAC,MAAM,EAAE,UAAU,GAAG,MAAM,CAEzD"}
|
|
@@ -0,0 +1,168 @@
|
|
|
1
|
+
import { createHash } from "node:crypto";
|
|
2
|
+
import { existsSync, readFileSync } from "node:fs";
|
|
3
|
+
import { homedir } from "node:os";
|
|
4
|
+
import { join, resolve } from "node:path";
|
|
5
|
+
import { parse as parseYaml } from "yaml";
|
|
6
|
+
import { EVENT_NAMES, INJECTOR_NAMES } from "@acpus/core";
|
|
7
|
+
/** Absolute path to the global hooks file (~/.acpus/hooks.yaml). */
|
|
8
|
+
export function globalHookConfigPath() {
|
|
9
|
+
return join(homedir(), ".acpus", "hooks.yaml");
|
|
10
|
+
}
|
|
11
|
+
/** Absolute path to the project hooks file (<workspace>/.acpus/hooks.yaml). */
|
|
12
|
+
export function projectHookConfigPath(workspace) {
|
|
13
|
+
return join(resolve(workspace), ".acpus", "hooks.yaml");
|
|
14
|
+
}
|
|
15
|
+
/** True when the config declares no injectors and no events. */
|
|
16
|
+
export function isEmptyHookConfig(config) {
|
|
17
|
+
const injectorCount = INJECTOR_NAMES.reduce((n, k) => n + (config.injectors?.[k]?.length ?? 0), 0);
|
|
18
|
+
const eventCount = EVENT_NAMES.reduce((n, k) => n + (config.events?.[k]?.length ?? 0), 0);
|
|
19
|
+
return injectorCount === 0 && eventCount === 0;
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Loads and merges hook configuration from the global and project layers.
|
|
23
|
+
*
|
|
24
|
+
* A missing layer is treated as empty (no error). Merge concatenates handler
|
|
25
|
+
* arrays per key with global handlers ordered before project handlers.
|
|
26
|
+
*/
|
|
27
|
+
export class HookConfigLoader {
|
|
28
|
+
workspace;
|
|
29
|
+
constructor(workspace = process.cwd()) {
|
|
30
|
+
this.workspace = workspace;
|
|
31
|
+
}
|
|
32
|
+
/** Read a single layer; absent or empty files yield an empty config. */
|
|
33
|
+
loadLayer(path) {
|
|
34
|
+
if (!existsSync(path))
|
|
35
|
+
return { path, config: {}, exists: false };
|
|
36
|
+
const raw = readFileSync(path, "utf8").trim();
|
|
37
|
+
if (raw.length === 0)
|
|
38
|
+
return { path, config: {}, exists: true };
|
|
39
|
+
const parsed = parseYaml(raw);
|
|
40
|
+
validateHookConfig(parsed, path);
|
|
41
|
+
return { path, config: parsed, exists: true };
|
|
42
|
+
}
|
|
43
|
+
/** Load and merge both layers, returning the merged config plus source paths. */
|
|
44
|
+
load() {
|
|
45
|
+
const globalLayer = this.loadLayer(globalHookConfigPath());
|
|
46
|
+
const projectLayer = this.loadLayer(projectHookConfigPath(this.workspace));
|
|
47
|
+
const merged = mergeHookConfigs(globalLayer.config, projectLayer.config);
|
|
48
|
+
return { merged, globalLayer, projectLayer };
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* Freeze the merged configuration into a snapshot. Returns `undefined` when
|
|
52
|
+
* both layers are absent/empty so the runtime can skip all hook machinery.
|
|
53
|
+
*/
|
|
54
|
+
freeze() {
|
|
55
|
+
const { merged, globalLayer, projectLayer } = this.load();
|
|
56
|
+
if (isEmptyHookConfig(merged))
|
|
57
|
+
return undefined;
|
|
58
|
+
return {
|
|
59
|
+
hash: hashHookConfig(merged),
|
|
60
|
+
globalConfigPath: globalLayer.exists ? globalLayer.path : undefined,
|
|
61
|
+
projectConfigPath: projectLayer.exists ? projectLayer.path : undefined,
|
|
62
|
+
mergedConfig: merged
|
|
63
|
+
};
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
/** Validate the minimal command-only hook config shape used by the runtime. */
|
|
67
|
+
function validateHookConfig(config, path) {
|
|
68
|
+
if (!config || typeof config !== "object" || Array.isArray(config)) {
|
|
69
|
+
throw new Error(`${path}: hook config must be an object`);
|
|
70
|
+
}
|
|
71
|
+
validateGroup(config.injectors, "injectors", path, INJECTOR_NAMES);
|
|
72
|
+
validateGroup(config.events, "events", path, EVENT_NAMES);
|
|
73
|
+
}
|
|
74
|
+
function validateGroup(group, groupName, path, allowedNames) {
|
|
75
|
+
for (const [hookName, handlers] of Object.entries(group ?? {})) {
|
|
76
|
+
if (!allowedNames.includes(hookName)) {
|
|
77
|
+
throw new Error(`${path}: unknown hook name '${hookName}' in ${groupName}`);
|
|
78
|
+
}
|
|
79
|
+
if (!Array.isArray(handlers)) {
|
|
80
|
+
throw new Error(`${path}: ${groupName}.${hookName} must be an array`);
|
|
81
|
+
}
|
|
82
|
+
handlers.forEach((handler, index) => validateHandler(handler, `${path}: ${groupName}.${hookName}[${index}]`, groupName));
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
function validateHandler(handler, label, groupName) {
|
|
86
|
+
if (!handler || typeof handler !== "object") {
|
|
87
|
+
throw new Error(`${label} must be an object`);
|
|
88
|
+
}
|
|
89
|
+
const h = handler;
|
|
90
|
+
const allowedFields = groupName === "injectors"
|
|
91
|
+
? new Set(["command", "timeout", "env", "cwd", "on_failure"])
|
|
92
|
+
: new Set(["command", "timeout", "env", "cwd", "sync"]);
|
|
93
|
+
for (const field of Object.keys(h)) {
|
|
94
|
+
if (!allowedFields.has(field)) {
|
|
95
|
+
throw new Error(`${label}.${field} is not supported`);
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
if (typeof h.command !== "string" || h.command.length === 0) {
|
|
99
|
+
throw new Error(`${label}.command must be a non-empty string`);
|
|
100
|
+
}
|
|
101
|
+
if ("timeout" in h && typeof h.timeout !== "string") {
|
|
102
|
+
throw new Error(`${label}.timeout must be a string`);
|
|
103
|
+
}
|
|
104
|
+
if ("cwd" in h && typeof h.cwd !== "string") {
|
|
105
|
+
throw new Error(`${label}.cwd must be a string`);
|
|
106
|
+
}
|
|
107
|
+
if ("env" in h && !isStringRecord(h.env)) {
|
|
108
|
+
throw new Error(`${label}.env must be a string map`);
|
|
109
|
+
}
|
|
110
|
+
if (groupName === "injectors") {
|
|
111
|
+
if ("sync" in h)
|
|
112
|
+
throw new Error(`${label}.sync is supported only on event handlers`);
|
|
113
|
+
if ("on_failure" in h && h.on_failure !== "fail" && h.on_failure !== "skip") {
|
|
114
|
+
throw new Error(`${label}.on_failure must be "fail" or "skip"`);
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
else {
|
|
118
|
+
if ("on_failure" in h)
|
|
119
|
+
throw new Error(`${label}.on_failure is supported only on injector handlers`);
|
|
120
|
+
if ("sync" in h && typeof h.sync !== "boolean") {
|
|
121
|
+
throw new Error(`${label}.sync must be boolean`);
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
function isStringRecord(value) {
|
|
126
|
+
return Boolean(value)
|
|
127
|
+
&& typeof value === "object"
|
|
128
|
+
&& !Array.isArray(value)
|
|
129
|
+
&& Object.values(value).every((v) => typeof v === "string");
|
|
130
|
+
}
|
|
131
|
+
/** Concatenate handler arrays per key; global handlers precede project handlers. */
|
|
132
|
+
export function mergeHookConfigs(global, project) {
|
|
133
|
+
const injectors = {};
|
|
134
|
+
for (const key of INJECTOR_NAMES) {
|
|
135
|
+
const combined = [...(global.injectors?.[key] ?? []), ...(project.injectors?.[key] ?? [])];
|
|
136
|
+
if (combined.length > 0)
|
|
137
|
+
injectors[key] = combined;
|
|
138
|
+
}
|
|
139
|
+
const events = {};
|
|
140
|
+
for (const key of EVENT_NAMES) {
|
|
141
|
+
const combined = [...(global.events?.[key] ?? []), ...(project.events?.[key] ?? [])];
|
|
142
|
+
if (combined.length > 0)
|
|
143
|
+
events[key] = combined;
|
|
144
|
+
}
|
|
145
|
+
const result = {};
|
|
146
|
+
if (Object.keys(injectors).length > 0)
|
|
147
|
+
result.injectors = injectors;
|
|
148
|
+
if (Object.keys(events).length > 0)
|
|
149
|
+
result.events = events;
|
|
150
|
+
return result;
|
|
151
|
+
}
|
|
152
|
+
/** Stable "sha256:..." hash over the canonicalized merged configuration. */
|
|
153
|
+
export function hashHookConfig(config) {
|
|
154
|
+
return `sha256:${createHash("sha256").update(canonicalJson(config)).digest("hex")}`;
|
|
155
|
+
}
|
|
156
|
+
/** Deterministic JSON with object keys sorted recursively. */
|
|
157
|
+
function canonicalJson(value) {
|
|
158
|
+
if (Array.isArray(value))
|
|
159
|
+
return `[${value.map(canonicalJson).join(",")}]`;
|
|
160
|
+
if (value && typeof value === "object") {
|
|
161
|
+
const entries = Object.entries(value)
|
|
162
|
+
.filter(([, v]) => v !== undefined)
|
|
163
|
+
.sort(([a], [b]) => (a < b ? -1 : a > b ? 1 : 0));
|
|
164
|
+
return `{${entries.map(([k, v]) => `${JSON.stringify(k)}:${canonicalJson(v)}`).join(",")}}`;
|
|
165
|
+
}
|
|
166
|
+
return JSON.stringify(value ?? null);
|
|
167
|
+
}
|
|
168
|
+
//# sourceMappingURL=loader.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"loader.js","sourceRoot":"","sources":["../../src/hooks/loader.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import type { AcpusIr, HookPayload, IrNode } from "@acpus/core";
|
|
2
|
+
import type { ExpressionContext, NodeExecutionState, NodeKeyDynamic, RunState } from "../types.js";
|
|
3
|
+
/** Run-scoped fields shared by every payload built during a Run. */
|
|
4
|
+
export interface RunScope {
|
|
5
|
+
runId: string;
|
|
6
|
+
workflowName: string;
|
|
7
|
+
workflowSourcePath: string;
|
|
8
|
+
workflowSourceDir: string;
|
|
9
|
+
cwd: string;
|
|
10
|
+
}
|
|
11
|
+
/** Derive the run scope once per Run from the frozen IR and metadata. */
|
|
12
|
+
export declare function runScope(ir: AcpusIr, meta: RunState): RunScope;
|
|
13
|
+
/** Base payload carrying the common fields for any hook event/injector. */
|
|
14
|
+
export declare function basePayload(scope: RunScope, hookEventName: string): HookPayload;
|
|
15
|
+
/** Attach node-level identity and dynamic-context fields to a payload. */
|
|
16
|
+
export declare function withNodeFields(payload: HookPayload, node: IrNode, nodeKey: string, state: NodeExecutionState | undefined, dynamic: NodeKeyDynamic, ctx?: ExpressionContext): HookPayload;
|
|
17
|
+
//# sourceMappingURL=payload.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"payload.d.ts","sourceRoot":"","sources":["../../src/hooks/payload.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,WAAW,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAChE,OAAO,KAAK,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,cAAc,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAEnG,oEAAoE;AACpE,MAAM,WAAW,QAAQ;IACvB,KAAK,EAAE,MAAM,CAAC;IACd,YAAY,EAAE,MAAM,CAAC;IACrB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,iBAAiB,EAAE,MAAM,CAAC;IAC1B,GAAG,EAAE,MAAM,CAAC;CACb;AAED,yEAAyE;AACzE,wBAAgB,QAAQ,CAAC,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,GAAG,QAAQ,CAS9D;AAED,2EAA2E;AAC3E,wBAAgB,WAAW,CAAC,KAAK,EAAE,QAAQ,EAAE,aAAa,EAAE,MAAM,GAAG,WAAW,CAU/E;AAED,0EAA0E;AAC1E,wBAAgB,cAAc,CAC5B,OAAO,EAAE,WAAW,EACpB,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,MAAM,EACf,KAAK,EAAE,kBAAkB,GAAG,SAAS,EACrC,OAAO,EAAE,cAAc,EACvB,GAAG,CAAC,EAAE,iBAAiB,GACtB,WAAW,CAUb"}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
/** Derive the run scope once per Run from the frozen IR and metadata. */
|
|
2
|
+
export function runScope(ir, meta) {
|
|
3
|
+
const sourcePath = meta.workflowSourcePath ?? ir.source.path ?? "";
|
|
4
|
+
return {
|
|
5
|
+
runId: meta.runId,
|
|
6
|
+
workflowName: meta.workflowName,
|
|
7
|
+
workflowSourcePath: sourcePath,
|
|
8
|
+
workflowSourceDir: sourcePath ? dirnameOf(sourcePath) : "",
|
|
9
|
+
cwd: process.cwd()
|
|
10
|
+
};
|
|
11
|
+
}
|
|
12
|
+
/** Base payload carrying the common fields for any hook event/injector. */
|
|
13
|
+
export function basePayload(scope, hookEventName) {
|
|
14
|
+
return {
|
|
15
|
+
hook_event_name: hookEventName,
|
|
16
|
+
run_id: scope.runId,
|
|
17
|
+
workflow_name: scope.workflowName,
|
|
18
|
+
workflow_source_path: scope.workflowSourcePath,
|
|
19
|
+
workflow_source_dir: scope.workflowSourceDir,
|
|
20
|
+
cwd: scope.cwd,
|
|
21
|
+
timestamp: new Date().toISOString()
|
|
22
|
+
};
|
|
23
|
+
}
|
|
24
|
+
/** Attach node-level identity and dynamic-context fields to a payload. */
|
|
25
|
+
export function withNodeFields(payload, node, nodeKey, state, dynamic, ctx) {
|
|
26
|
+
payload.node_key = nodeKey;
|
|
27
|
+
payload.node_id = node.id;
|
|
28
|
+
payload.node_kind = node.kind;
|
|
29
|
+
if (state?.attempt !== undefined)
|
|
30
|
+
payload.node_attempt = state.attempt;
|
|
31
|
+
if (dynamic.loopRound !== undefined)
|
|
32
|
+
payload.loop_round = dynamic.loopRound;
|
|
33
|
+
if (dynamic.fanoutItemId !== undefined)
|
|
34
|
+
payload.fanout_item_id = dynamic.fanoutItemId;
|
|
35
|
+
if (dynamic.laneId !== undefined)
|
|
36
|
+
payload.parallel_lane_id = dynamic.laneId;
|
|
37
|
+
if (ctx?.item_index !== undefined)
|
|
38
|
+
payload.fanout_item_index = ctx.item_index;
|
|
39
|
+
return payload;
|
|
40
|
+
}
|
|
41
|
+
function dirnameOf(p) {
|
|
42
|
+
const idx = p.lastIndexOf("/");
|
|
43
|
+
return idx > 0 ? p.slice(0, idx) : idx === 0 ? "/" : "";
|
|
44
|
+
}
|
|
45
|
+
//# sourceMappingURL=payload.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"payload.js","sourceRoot":"","sources":["../../src/hooks/payload.ts"],"names":[],"mappings":"AAYA,yEAAyE;AACzE,MAAM,UAAU,QAAQ,CAAC,EAAW,EAAE,IAAc;IAClD,MAAM,UAAU,GAAG,IAAI,CAAC,kBAAkB,IAAI,EAAE,CAAC,MAAM,CAAC,IAAI,IAAI,EAAE,CAAC;IACnE,OAAO;QACL,KAAK,EAAE,IAAI,CAAC,KAAK;QACjB,YAAY,EAAE,IAAI,CAAC,YAAY;QAC/B,kBAAkB,EAAE,UAAU;QAC9B,iBAAiB,EAAE,UAAU,CAAC,CAAC,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,EAAE;QAC1D,GAAG,EAAE,OAAO,CAAC,GAAG,EAAE;KACnB,CAAC;AACJ,CAAC;AAED,2EAA2E;AAC3E,MAAM,UAAU,WAAW,CAAC,KAAe,EAAE,aAAqB;IAChE,OAAO;QACL,eAAe,EAAE,aAAa;QAC9B,MAAM,EAAE,KAAK,CAAC,KAAK;QACnB,aAAa,EAAE,KAAK,CAAC,YAAY;QACjC,oBAAoB,EAAE,KAAK,CAAC,kBAAkB;QAC9C,mBAAmB,EAAE,KAAK,CAAC,iBAAiB;QAC5C,GAAG,EAAE,KAAK,CAAC,GAAG;QACd,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;KACpC,CAAC;AACJ,CAAC;AAED,0EAA0E;AAC1E,MAAM,UAAU,cAAc,CAC5B,OAAoB,EACpB,IAAY,EACZ,OAAe,EACf,KAAqC,EACrC,OAAuB,EACvB,GAAuB;IAEvB,OAAO,CAAC,QAAQ,GAAG,OAAO,CAAC;IAC3B,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC,EAAE,CAAC;IAC1B,OAAO,CAAC,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC;IAC9B,IAAI,KAAK,EAAE,OAAO,KAAK,SAAS;QAAE,OAAO,CAAC,YAAY,GAAG,KAAK,CAAC,OAAO,CAAC;IACvE,IAAI,OAAO,CAAC,SAAS,KAAK,SAAS;QAAE,OAAO,CAAC,UAAU,GAAG,OAAO,CAAC,SAAS,CAAC;IAC5E,IAAI,OAAO,CAAC,YAAY,KAAK,SAAS;QAAE,OAAO,CAAC,cAAc,GAAG,OAAO,CAAC,YAAY,CAAC;IACtF,IAAI,OAAO,CAAC,MAAM,KAAK,SAAS;QAAE,OAAO,CAAC,gBAAgB,GAAG,OAAO,CAAC,MAAM,CAAC;IAC5E,IAAI,GAAG,EAAE,UAAU,KAAK,SAAS;QAAE,OAAO,CAAC,iBAAiB,GAAG,GAAG,CAAC,UAAU,CAAC;IAC9E,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,SAAS,SAAS,CAAC,CAAS;IAC1B,MAAM,GAAG,GAAG,CAAC,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;IAC/B,OAAO,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;AAC1D,CAAC"}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import { type EventName, type HookConfig, type InjectorHookHandler, type HookPayload, type InjectorName, type InjectorResult } from "@acpus/core";
|
|
2
|
+
/**
|
|
3
|
+
* Thrown when an injector handler fails under the `on_failure: "fail"` policy.
|
|
4
|
+
* The interpreter maps this to a node failure with `failureKind: "hook_failure"`.
|
|
5
|
+
*/
|
|
6
|
+
export declare class HookFailureError extends Error {
|
|
7
|
+
constructor(message: string);
|
|
8
|
+
}
|
|
9
|
+
/**
|
|
10
|
+
* Executes hook command handlers. Injectors run sequentially and may fail the
|
|
11
|
+
* node; events never affect outcome. The runner holds the frozen, merged
|
|
12
|
+
* configuration for a single Run.
|
|
13
|
+
*/
|
|
14
|
+
export declare class HookRunner {
|
|
15
|
+
private readonly config;
|
|
16
|
+
constructor(config: HookConfig);
|
|
17
|
+
hasInjector(name: InjectorName): boolean;
|
|
18
|
+
hasEvent(name: EventName): boolean;
|
|
19
|
+
injectorHandlers(name: InjectorName): InjectorHookHandler[];
|
|
20
|
+
/**
|
|
21
|
+
* Run all handlers for an injector sequentially, merging their results.
|
|
22
|
+
* `prependPrompt` is concatenated in order for beforeAgentExec; `env` maps
|
|
23
|
+
* merge with later handlers overriding earlier ones for beforeProgramExec.
|
|
24
|
+
* A failing handler under `fail` throws
|
|
25
|
+
* HookFailureError; under `skip` it logs a warning and injects nothing.
|
|
26
|
+
*
|
|
27
|
+
* `onHandler` is called once per handler with the resolved per-handler result
|
|
28
|
+
* (for journaling).
|
|
29
|
+
*/
|
|
30
|
+
runInjector(name: InjectorName, payload: HookPayload, onHandler?: (handlerIndex: number, result: InjectorResult, durationMs: number) => void): Promise<InjectorResult>;
|
|
31
|
+
/**
|
|
32
|
+
* Fire all handlers for an event. Event handlers are async by default;
|
|
33
|
+
* `sync: true` handlers are awaited. Event handlers never throw and never
|
|
34
|
+
* affect Run/Node outcome — failures are logged as warnings.
|
|
35
|
+
*/
|
|
36
|
+
emitEvent(name: EventName, payload: HookPayload): Promise<void>;
|
|
37
|
+
private runHandler;
|
|
38
|
+
private runCommand;
|
|
39
|
+
/** Parse handler stdout as an InjectorResult. Empty output → empty result. */
|
|
40
|
+
private parseInjectorStdout;
|
|
41
|
+
}
|
|
42
|
+
//# sourceMappingURL=runner.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"runner.d.ts","sourceRoot":"","sources":["../../src/hooks/runner.ts"],"names":[],"mappings":"AACA,OAAO,EAIL,KAAK,SAAS,EACd,KAAK,UAAU,EAEf,KAAK,mBAAmB,EACxB,KAAK,WAAW,EAChB,KAAK,YAAY,EACjB,KAAK,cAAc,EAEpB,MAAM,aAAa,CAAC;AAKrB;;;GAGG;AACH,qBAAa,gBAAiB,SAAQ,KAAK;IACzC,YAAY,OAAO,EAAE,MAAM,EAG1B;CACF;AAWD;;;;GAIG;AACH,qBAAa,UAAU;IACT,OAAO,CAAC,QAAQ,CAAC,MAAM;IAAnC,YAA6B,MAAM,EAAE,UAAU,EAAI;IAEnD,WAAW,CAAC,IAAI,EAAE,YAAY,GAAG,OAAO,CAEvC;IAED,QAAQ,CAAC,IAAI,EAAE,SAAS,GAAG,OAAO,CAEjC;IAED,gBAAgB,CAAC,IAAI,EAAE,YAAY,GAAG,mBAAmB,EAAE,CAE1D;IAED;;;;;;;;;OASG;IACG,WAAW,CACf,IAAI,EAAE,YAAY,EAClB,OAAO,EAAE,WAAW,EACpB,SAAS,CAAC,EAAE,CAAC,YAAY,EAAE,MAAM,EAAE,MAAM,EAAE,cAAc,EAAE,UAAU,EAAE,MAAM,KAAK,IAAI,GACrF,OAAO,CAAC,cAAc,CAAC,CA6CzB;IAED;;;;OAIG;IACG,SAAS,CAAC,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CAepE;YAGa,UAAU;YAUV,UAAU;IA8BxB,8EAA8E;IAC9E,OAAO,CAAC,mBAAmB;CAU5B"}
|
|
@@ -0,0 +1,161 @@
|
|
|
1
|
+
import { execa } from "execa";
|
|
2
|
+
import { parseDurationMs } from "@acpus/core";
|
|
3
|
+
const DEFAULT_INJECTOR_TIMEOUT_MS = 5_000;
|
|
4
|
+
const DEFAULT_EVENT_TIMEOUT_MS = 30_000;
|
|
5
|
+
/**
|
|
6
|
+
* Thrown when an injector handler fails under the `on_failure: "fail"` policy.
|
|
7
|
+
* The interpreter maps this to a node failure with `failureKind: "hook_failure"`.
|
|
8
|
+
*/
|
|
9
|
+
export class HookFailureError extends Error {
|
|
10
|
+
constructor(message) {
|
|
11
|
+
super(message);
|
|
12
|
+
this.name = "HookFailureError";
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* Executes hook command handlers. Injectors run sequentially and may fail the
|
|
17
|
+
* node; events never affect outcome. The runner holds the frozen, merged
|
|
18
|
+
* configuration for a single Run.
|
|
19
|
+
*/
|
|
20
|
+
export class HookRunner {
|
|
21
|
+
config;
|
|
22
|
+
constructor(config) {
|
|
23
|
+
this.config = config;
|
|
24
|
+
}
|
|
25
|
+
hasInjector(name) {
|
|
26
|
+
return (this.config.injectors?.[name]?.length ?? 0) > 0;
|
|
27
|
+
}
|
|
28
|
+
hasEvent(name) {
|
|
29
|
+
return (this.config.events?.[name]?.length ?? 0) > 0;
|
|
30
|
+
}
|
|
31
|
+
injectorHandlers(name) {
|
|
32
|
+
return this.config.injectors?.[name] ?? [];
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* Run all handlers for an injector sequentially, merging their results.
|
|
36
|
+
* `prependPrompt` is concatenated in order for beforeAgentExec; `env` maps
|
|
37
|
+
* merge with later handlers overriding earlier ones for beforeProgramExec.
|
|
38
|
+
* A failing handler under `fail` throws
|
|
39
|
+
* HookFailureError; under `skip` it logs a warning and injects nothing.
|
|
40
|
+
*
|
|
41
|
+
* `onHandler` is called once per handler with the resolved per-handler result
|
|
42
|
+
* (for journaling).
|
|
43
|
+
*/
|
|
44
|
+
async runInjector(name, payload, onHandler) {
|
|
45
|
+
const handlers = this.injectorHandlers(name);
|
|
46
|
+
const contexts = [];
|
|
47
|
+
let env;
|
|
48
|
+
for (let i = 0; i < handlers.length; i++) {
|
|
49
|
+
const handler = handlers[i];
|
|
50
|
+
const started = Date.now();
|
|
51
|
+
const outcome = await this.runHandler(handler, payload, DEFAULT_INJECTOR_TIMEOUT_MS, true);
|
|
52
|
+
const durationMs = Date.now() - started;
|
|
53
|
+
if (!outcome.ok) {
|
|
54
|
+
const policy = handler.on_failure ?? "fail";
|
|
55
|
+
if (policy === "fail") {
|
|
56
|
+
throw new HookFailureError(`Injector '${name}' handler #${i} failed: ${outcome.error ?? "unknown error"}`);
|
|
57
|
+
}
|
|
58
|
+
console.warn(`Injector '${name}' handler #${i} failed (skipped): ${outcome.error ?? "unknown error"}`);
|
|
59
|
+
onHandler?.(i, {}, durationMs);
|
|
60
|
+
continue;
|
|
61
|
+
}
|
|
62
|
+
const result = outcome.result ?? {};
|
|
63
|
+
if (name === "beforeAgentExec") {
|
|
64
|
+
const agentResult = result;
|
|
65
|
+
if (typeof agentResult.prependPrompt === "string" && agentResult.prependPrompt.length > 0) {
|
|
66
|
+
contexts.push(agentResult.prependPrompt);
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
if (name === "beforeProgramExec") {
|
|
70
|
+
const programResult = result;
|
|
71
|
+
if (programResult.env && Object.keys(programResult.env).length > 0) {
|
|
72
|
+
env = { ...(env ?? {}), ...programResult.env };
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
onHandler?.(i, result, durationMs);
|
|
76
|
+
}
|
|
77
|
+
if (name === "beforeAgentExec") {
|
|
78
|
+
const merged = {};
|
|
79
|
+
if (contexts.length > 0)
|
|
80
|
+
merged.prependPrompt = contexts.join("\n");
|
|
81
|
+
return merged;
|
|
82
|
+
}
|
|
83
|
+
const merged = {};
|
|
84
|
+
if (env)
|
|
85
|
+
merged.env = env;
|
|
86
|
+
return merged;
|
|
87
|
+
}
|
|
88
|
+
/**
|
|
89
|
+
* Fire all handlers for an event. Event handlers are async by default;
|
|
90
|
+
* `sync: true` handlers are awaited. Event handlers never throw and never
|
|
91
|
+
* affect Run/Node outcome — failures are logged as warnings.
|
|
92
|
+
*/
|
|
93
|
+
async emitEvent(name, payload) {
|
|
94
|
+
const handlers = this.config.events?.[name] ?? [];
|
|
95
|
+
for (let i = 0; i < handlers.length; i++) {
|
|
96
|
+
const handler = handlers[i];
|
|
97
|
+
const run = this.runHandler(handler, payload, DEFAULT_EVENT_TIMEOUT_MS, false)
|
|
98
|
+
.then((outcome) => {
|
|
99
|
+
if (!outcome.ok) {
|
|
100
|
+
console.warn(`Event '${name}' handler #${i} failed (ignored): ${outcome.error ?? "unknown error"}`);
|
|
101
|
+
}
|
|
102
|
+
})
|
|
103
|
+
.catch((error) => {
|
|
104
|
+
console.warn(`Event '${name}' handler #${i} threw (ignored): ${error instanceof Error ? error.message : String(error)}`);
|
|
105
|
+
});
|
|
106
|
+
if (handler.sync)
|
|
107
|
+
await run;
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
/** Dispatch a single command handler. `parseResult` only for injectors. */
|
|
111
|
+
async runHandler(handler, payload, defaultTimeoutMs, parseResult) {
|
|
112
|
+
const timeoutMs = handler.timeout ? parseDurationMs(handler.timeout) || defaultTimeoutMs : defaultTimeoutMs;
|
|
113
|
+
return this.runCommand(handler, payload, timeoutMs, parseResult);
|
|
114
|
+
}
|
|
115
|
+
async runCommand(handler, payload, timeoutMs, parseResult) {
|
|
116
|
+
try {
|
|
117
|
+
const result = await execa(handler.command, {
|
|
118
|
+
shell: true,
|
|
119
|
+
cwd: handler.cwd ?? process.cwd(),
|
|
120
|
+
timeout: timeoutMs > 0 ? timeoutMs : undefined,
|
|
121
|
+
reject: false,
|
|
122
|
+
input: JSON.stringify(payload),
|
|
123
|
+
env: handler.env
|
|
124
|
+
? { ...Object.fromEntries(Object.entries(process.env).filter(([, v]) => v !== undefined)), ...handler.env }
|
|
125
|
+
: undefined
|
|
126
|
+
});
|
|
127
|
+
if (result.timedOut) {
|
|
128
|
+
return { ok: false, error: `timed out after ${timeoutMs}ms` };
|
|
129
|
+
}
|
|
130
|
+
if ((result.exitCode ?? 0) !== 0) {
|
|
131
|
+
return { ok: false, error: `exit code ${result.exitCode}: ${stderrTail(result.stderr)}` };
|
|
132
|
+
}
|
|
133
|
+
if (!parseResult)
|
|
134
|
+
return { ok: true };
|
|
135
|
+
return this.parseInjectorStdout(result.stdout ?? "");
|
|
136
|
+
}
|
|
137
|
+
catch (error) {
|
|
138
|
+
return { ok: false, error: error instanceof Error ? error.message : String(error) };
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
/** Parse handler stdout as an InjectorResult. Empty output → empty result. */
|
|
142
|
+
parseInjectorStdout(raw) {
|
|
143
|
+
const trimmed = raw.trim();
|
|
144
|
+
if (trimmed.length === 0)
|
|
145
|
+
return { ok: true, result: {} };
|
|
146
|
+
try {
|
|
147
|
+
const parsed = JSON.parse(trimmed);
|
|
148
|
+
return { ok: true, result: parsed ?? {} };
|
|
149
|
+
}
|
|
150
|
+
catch {
|
|
151
|
+
return { ok: false, error: "stdout is not valid JSON" };
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
/** Last few lines of stderr for a concise failure summary. */
|
|
156
|
+
function stderrTail(stderr) {
|
|
157
|
+
if (!stderr)
|
|
158
|
+
return "";
|
|
159
|
+
return stderr.replace(/\s+$/u, "").split(/\r?\n/u).slice(-5).join("\n");
|
|
160
|
+
}
|
|
161
|
+
//# sourceMappingURL=runner.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"runner.js","sourceRoot":"","sources":["../../src/hooks/runner.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -22,4 +22,8 @@ export { ensureWorkspaceSupervisor } from "./supervisor-discovery.js";
|
|
|
22
22
|
export { RunSupervisorClient, ForkRejectedError } from "./client.js";
|
|
23
23
|
export { planForkedRun, materializeForkedRun, ForkError } from "./fork.js";
|
|
24
24
|
export type { ForkPlan, BoundaryReason, PlanForkedRunOptions, MaterializeForkOptions, MaterializeForkedRunOptions, MaterializedFork } from "./fork.js";
|
|
25
|
+
export { HookConfigLoader, mergeHookConfigs, hashHookConfig, isEmptyHookConfig, globalHookConfigPath, projectHookConfigPath } from "./hooks/loader.js";
|
|
26
|
+
export type { LoadedLayer } from "./hooks/loader.js";
|
|
27
|
+
export { HookRunner, HookFailureError } from "./hooks/runner.js";
|
|
28
|
+
export { HookJournal } from "./hooks/journal.js";
|
|
25
29
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,YAAY,EACV,SAAS,EACT,SAAS,EACT,cAAc,EACd,kBAAkB,EAClB,QAAQ,EACR,UAAU,EACV,aAAa,EACb,iBAAiB,EACjB,cAAc,EACd,WAAW,EACX,kBAAkB,EAClB,UAAU,EACV,gBAAgB,EAChB,kBAAkB,EAClB,gBAAgB,EAChB,eAAe,EACf,UAAU,EACV,YAAY,EACZ,cAAc,EACd,YAAY,EACZ,cAAc,EACd,kBAAkB,EAClB,iBAAiB,EACjB,eAAe,EACf,0BAA0B,EAC1B,cAAc,EACd,sBAAsB,EACtB,mBAAmB,EACnB,qBAAqB,EACrB,cAAc,EACf,MAAM,YAAY,CAAC;AAGpB,YAAY,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AAG9E,OAAO,EACL,cAAc,EACd,YAAY,EACZ,qBAAqB,EACrB,kBAAkB,EAClB,uBAAuB,EACvB,uBAAuB,EACvB,iBAAiB,EACjB,kBAAkB,EAClB,mBAAmB,EACpB,MAAM,WAAW,CAAC;AACnB,YAAY,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC;AAG/C,OAAO,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAC;AACrD,OAAO,EAAE,yBAAyB,EAAE,uBAAuB,EAAE,oBAAoB,EAAE,sBAAsB,EAAE,MAAM,uBAAuB,CAAC;AAGzI,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAGtC,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,UAAU,EAAE,sBAAsB,EAAE,mBAAmB,EAAE,4BAA4B,EAAE,6BAA6B,EAAE,MAAM,oBAAoB,CAAC;AACrL,OAAO,EAAE,aAAa,EAAE,qBAAqB,EAAE,MAAM,YAAY,CAAC;AAGlE,OAAO,EAAE,aAAa,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;AACnE,YAAY,EAAE,uBAAuB,EAAE,MAAM,gBAAgB,CAAC;AAG9D,OAAO,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AAGvD,OAAO,EAAE,sBAAsB,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAC5E,YAAY,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAC;AACvD,OAAO,EAAE,4BAA4B,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAG3F,OAAO,EAAE,mBAAmB,EAAE,MAAM,6BAA6B,CAAC;AAClE,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AACzD,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAGrD,OAAO,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAC1D,OAAO,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AAC5D,OAAO,EAAE,yBAAyB,EAAE,MAAM,2BAA2B,CAAC;AAGtE,OAAO,EAAE,mBAAmB,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAGrE,OAAO,EAAE,aAAa,EAAE,oBAAoB,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AAC3E,YAAY,EACV,QAAQ,EACR,cAAc,EACd,oBAAoB,EACpB,sBAAsB,EACtB,2BAA2B,EAC3B,gBAAgB,EACjB,MAAM,WAAW,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,YAAY,EACV,SAAS,EACT,SAAS,EACT,cAAc,EACd,kBAAkB,EAClB,QAAQ,EACR,UAAU,EACV,aAAa,EACb,iBAAiB,EACjB,cAAc,EACd,WAAW,EACX,kBAAkB,EAClB,UAAU,EACV,gBAAgB,EAChB,kBAAkB,EAClB,gBAAgB,EAChB,eAAe,EACf,UAAU,EACV,YAAY,EACZ,cAAc,EACd,YAAY,EACZ,cAAc,EACd,kBAAkB,EAClB,iBAAiB,EACjB,eAAe,EACf,0BAA0B,EAC1B,cAAc,EACd,sBAAsB,EACtB,mBAAmB,EACnB,qBAAqB,EACrB,cAAc,EACf,MAAM,YAAY,CAAC;AAGpB,YAAY,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AAG9E,OAAO,EACL,cAAc,EACd,YAAY,EACZ,qBAAqB,EACrB,kBAAkB,EAClB,uBAAuB,EACvB,uBAAuB,EACvB,iBAAiB,EACjB,kBAAkB,EAClB,mBAAmB,EACpB,MAAM,WAAW,CAAC;AACnB,YAAY,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC;AAG/C,OAAO,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAC;AACrD,OAAO,EAAE,yBAAyB,EAAE,uBAAuB,EAAE,oBAAoB,EAAE,sBAAsB,EAAE,MAAM,uBAAuB,CAAC;AAGzI,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAGtC,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,UAAU,EAAE,sBAAsB,EAAE,mBAAmB,EAAE,4BAA4B,EAAE,6BAA6B,EAAE,MAAM,oBAAoB,CAAC;AACrL,OAAO,EAAE,aAAa,EAAE,qBAAqB,EAAE,MAAM,YAAY,CAAC;AAGlE,OAAO,EAAE,aAAa,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;AACnE,YAAY,EAAE,uBAAuB,EAAE,MAAM,gBAAgB,CAAC;AAG9D,OAAO,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AAGvD,OAAO,EAAE,sBAAsB,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAC5E,YAAY,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAC;AACvD,OAAO,EAAE,4BAA4B,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAG3F,OAAO,EAAE,mBAAmB,EAAE,MAAM,6BAA6B,CAAC;AAClE,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AACzD,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAGrD,OAAO,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAC1D,OAAO,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AAC5D,OAAO,EAAE,yBAAyB,EAAE,MAAM,2BAA2B,CAAC;AAGtE,OAAO,EAAE,mBAAmB,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAGrE,OAAO,EAAE,aAAa,EAAE,oBAAoB,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AAC3E,YAAY,EACV,QAAQ,EACR,cAAc,EACd,oBAAoB,EACpB,sBAAsB,EACtB,2BAA2B,EAC3B,gBAAgB,EACjB,MAAM,WAAW,CAAC;AAGnB,OAAO,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,cAAc,EAAE,iBAAiB,EAAE,oBAAoB,EAAE,qBAAqB,EAAE,MAAM,mBAAmB,CAAC;AACvJ,YAAY,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AACrD,OAAO,EAAE,UAAU,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AACjE,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -27,4 +27,8 @@ export { ensureWorkspaceSupervisor } from "./supervisor-discovery.js";
|
|
|
27
27
|
export { RunSupervisorClient, ForkRejectedError } from "./client.js";
|
|
28
28
|
// ─── Fork ────────────────────────────────────────────────────────
|
|
29
29
|
export { planForkedRun, materializeForkedRun, ForkError } from "./fork.js";
|
|
30
|
+
// ─── Hooks ───────────────────────────────────────────────────────
|
|
31
|
+
export { HookConfigLoader, mergeHookConfigs, hashHookConfig, isEmptyHookConfig, globalHookConfigPath, projectHookConfigPath } from "./hooks/loader.js";
|
|
32
|
+
export { HookRunner, HookFailureError } from "./hooks/runner.js";
|
|
33
|
+
export { HookJournal } from "./hooks/journal.js";
|
|
30
34
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAqCA,oEAAoE;AACpE,OAAO,EACL,cAAc,EACd,YAAY,EACZ,qBAAqB,EACrB,kBAAkB,EAClB,uBAAuB,EACvB,uBAAuB,EACvB,iBAAiB,EACjB,kBAAkB,EAClB,mBAAmB,EACpB,MAAM,WAAW,CAAC;AAGnB,oEAAoE;AACpE,OAAO,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAC;AACrD,OAAO,EAAE,yBAAyB,EAAE,uBAAuB,EAAE,oBAAoB,EAAE,sBAAsB,EAAE,MAAM,uBAAuB,CAAC;AAEzI,oEAAoE;AACpE,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAEtC,oEAAoE;AACpE,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,UAAU,EAAE,sBAAsB,EAAE,mBAAmB,EAAE,4BAA4B,EAAE,6BAA6B,EAAE,MAAM,oBAAoB,CAAC;AACrL,OAAO,EAAE,aAAa,EAAE,qBAAqB,EAAE,MAAM,YAAY,CAAC;AAElE,oEAAoE;AACpE,OAAO,EAAE,aAAa,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;AAGnE,oEAAoE;AACpE,OAAO,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AAEvD,oEAAoE;AACpE,OAAO,EAAE,sBAAsB,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAE5E,OAAO,EAAE,4BAA4B,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAE3F,oEAAoE;AACpE,OAAO,EAAE,mBAAmB,EAAE,MAAM,6BAA6B,CAAC;AAClE,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AACzD,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAErD,oEAAoE;AACpE,OAAO,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAC1D,OAAO,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AAC5D,OAAO,EAAE,yBAAyB,EAAE,MAAM,2BAA2B,CAAC;AAEtE,oEAAoE;AACpE,OAAO,EAAE,mBAAmB,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAErE,oEAAoE;AACpE,OAAO,EAAE,aAAa,EAAE,oBAAoB,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAqCA,oEAAoE;AACpE,OAAO,EACL,cAAc,EACd,YAAY,EACZ,qBAAqB,EACrB,kBAAkB,EAClB,uBAAuB,EACvB,uBAAuB,EACvB,iBAAiB,EACjB,kBAAkB,EAClB,mBAAmB,EACpB,MAAM,WAAW,CAAC;AAGnB,oEAAoE;AACpE,OAAO,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAC;AACrD,OAAO,EAAE,yBAAyB,EAAE,uBAAuB,EAAE,oBAAoB,EAAE,sBAAsB,EAAE,MAAM,uBAAuB,CAAC;AAEzI,oEAAoE;AACpE,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAEtC,oEAAoE;AACpE,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,UAAU,EAAE,sBAAsB,EAAE,mBAAmB,EAAE,4BAA4B,EAAE,6BAA6B,EAAE,MAAM,oBAAoB,CAAC;AACrL,OAAO,EAAE,aAAa,EAAE,qBAAqB,EAAE,MAAM,YAAY,CAAC;AAElE,oEAAoE;AACpE,OAAO,EAAE,aAAa,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;AAGnE,oEAAoE;AACpE,OAAO,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AAEvD,oEAAoE;AACpE,OAAO,EAAE,sBAAsB,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAE5E,OAAO,EAAE,4BAA4B,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAE3F,oEAAoE;AACpE,OAAO,EAAE,mBAAmB,EAAE,MAAM,6BAA6B,CAAC;AAClE,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AACzD,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAErD,oEAAoE;AACpE,OAAO,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAC1D,OAAO,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AAC5D,OAAO,EAAE,yBAAyB,EAAE,MAAM,2BAA2B,CAAC;AAEtE,oEAAoE;AACpE,OAAO,EAAE,mBAAmB,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAErE,oEAAoE;AACpE,OAAO,EAAE,aAAa,EAAE,oBAAoB,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AAU3E,oEAAoE;AACpE,OAAO,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,cAAc,EAAE,iBAAiB,EAAE,oBAAoB,EAAE,qBAAqB,EAAE,MAAM,mBAAmB,CAAC;AAEvJ,OAAO,EAAE,UAAU,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AACjE,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC"}
|