@acpus/runtime 0.8.0 → 0.9.0-alpha.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/.tsbuildinfo +1 -0
- package/dist/admission/input.d.ts +5 -0
- package/dist/admission/input.d.ts.map +1 -0
- package/dist/admission/input.js +17 -0
- package/dist/admission/input.js.map +1 -0
- package/dist/artifacts/rewrite.d.ts +7 -0
- package/dist/artifacts/rewrite.d.ts.map +1 -0
- package/dist/artifacts/rewrite.js +28 -0
- package/dist/artifacts/rewrite.js.map +1 -0
- package/dist/control/agent-overrides.d.ts +4 -0
- package/dist/control/agent-overrides.d.ts.map +1 -0
- package/dist/control/agent-overrides.js +40 -0
- package/dist/control/agent-overrides.js.map +1 -0
- package/dist/daemon/loop.d.ts +16 -0
- package/dist/daemon/loop.d.ts.map +1 -0
- package/dist/daemon/loop.js +191 -0
- package/dist/daemon/loop.js.map +1 -0
- package/dist/daemon/sessions.d.ts +23 -0
- package/dist/daemon/sessions.d.ts.map +1 -0
- package/dist/daemon/sessions.js +190 -0
- package/dist/daemon/sessions.js.map +1 -0
- package/dist/daemon/socket.d.ts +82 -0
- package/dist/daemon/socket.d.ts.map +1 -0
- package/dist/daemon/socket.js +341 -0
- package/dist/daemon/socket.js.map +1 -0
- package/dist/daemon/tick.d.ts +9 -0
- package/dist/daemon/tick.d.ts.map +1 -0
- package/dist/daemon/tick.js +18 -0
- package/dist/daemon/tick.js.map +1 -0
- package/dist/evaluation/admissible.d.ts +2 -0
- package/dist/evaluation/admissible.d.ts.map +1 -0
- package/dist/evaluation/admissible.js +50 -0
- package/dist/evaluation/admissible.js.map +1 -0
- package/dist/evaluation/evaluator.d.ts +14 -0
- package/dist/evaluation/evaluator.d.ts.map +1 -0
- package/dist/evaluation/evaluator.js +34 -0
- package/dist/evaluation/evaluator.js.map +1 -0
- package/dist/evaluation/loop-limit.d.ts +4 -0
- package/dist/evaluation/loop-limit.d.ts.map +1 -0
- package/dist/evaluation/loop-limit.js +9 -0
- package/dist/evaluation/loop-limit.js.map +1 -0
- package/dist/evaluation/schema.d.ts +4 -0
- package/dist/evaluation/schema.d.ts.map +1 -0
- package/dist/evaluation/schema.js +92 -0
- package/dist/evaluation/schema.js.map +1 -0
- package/dist/execution/advance.d.ts +18 -0
- package/dist/execution/advance.d.ts.map +1 -0
- package/dist/execution/advance.js +57 -0
- package/dist/execution/advance.js.map +1 -0
- package/dist/execution/agent-node.d.ts +23 -0
- package/dist/execution/agent-node.d.ts.map +1 -0
- package/dist/execution/agent-node.js +512 -0
- package/dist/execution/agent-node.js.map +1 -0
- package/dist/execution/duration.d.ts +2 -0
- package/dist/execution/duration.d.ts.map +1 -0
- package/dist/execution/duration.js +15 -0
- package/dist/execution/duration.js.map +1 -0
- package/dist/execution/ir.d.ts +3 -0
- package/dist/execution/ir.d.ts.map +1 -0
- package/dist/execution/ir.js +46 -0
- package/dist/execution/ir.js.map +1 -0
- package/dist/execution/scheduler.d.ts +59 -0
- package/dist/execution/scheduler.d.ts.map +1 -0
- package/dist/execution/scheduler.js +306 -0
- package/dist/execution/scheduler.js.map +1 -0
- package/dist/execution/task-executor.d.ts +14 -0
- package/dist/execution/task-executor.d.ts.map +1 -0
- package/dist/execution/task-executor.js +186 -0
- package/dist/execution/task-executor.js.map +1 -0
- package/dist/hooks/config.d.ts +32 -0
- package/dist/hooks/config.d.ts.map +1 -0
- package/dist/hooks/config.js +112 -0
- package/dist/hooks/config.js.map +1 -0
- package/dist/hooks/context.d.ts +50 -0
- package/dist/hooks/context.d.ts.map +1 -0
- package/dist/hooks/context.js +116 -0
- package/dist/hooks/context.js.map +1 -0
- package/dist/hooks/events.d.ts +22 -0
- package/dist/hooks/events.d.ts.map +1 -0
- package/dist/hooks/events.js +41 -0
- package/dist/hooks/events.js.map +1 -0
- package/dist/hooks/journal.d.ts +21 -19
- package/dist/hooks/journal.d.ts.map +1 -1
- package/dist/hooks/journal.js +1 -48
- package/dist/hooks/journal.js.map +1 -1
- package/dist/hooks/loader.d.ts +33 -39
- package/dist/hooks/loader.d.ts.map +1 -1
- package/dist/hooks/loader.js +79 -95
- package/dist/hooks/loader.js.map +1 -1
- package/dist/hooks/runner.d.ts +14 -41
- package/dist/hooks/runner.d.ts.map +1 -1
- package/dist/hooks/runner.js +177 -145
- package/dist/hooks/runner.js.map +1 -1
- package/dist/index.d.ts +13 -28
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +13 -33
- package/dist/index.js.map +1 -1
- package/dist/runs/advance-runtime.d.ts +50 -0
- package/dist/runs/advance-runtime.d.ts.map +1 -0
- package/dist/runs/advance-runtime.js +82 -0
- package/dist/runs/advance-runtime.js.map +1 -0
- package/dist/runs/use-cases.d.ts +111 -0
- package/dist/runs/use-cases.d.ts.map +1 -0
- package/dist/runs/use-cases.js +539 -0
- package/dist/runs/use-cases.js.map +1 -0
- package/dist/scheduler/advance.d.ts +65 -0
- package/dist/scheduler/advance.d.ts.map +1 -0
- package/dist/scheduler/advance.js +435 -0
- package/dist/scheduler/advance.js.map +1 -0
- package/dist/scheduler/control.d.ts +49 -0
- package/dist/scheduler/control.d.ts.map +1 -0
- package/dist/scheduler/control.js +212 -0
- package/dist/scheduler/control.js.map +1 -0
- package/dist/scheduler/event-codec.d.ts +4 -0
- package/dist/scheduler/event-codec.d.ts.map +1 -0
- package/dist/scheduler/event-codec.js +57 -0
- package/dist/scheduler/event-codec.js.map +1 -0
- package/dist/scheduler/events.d.ts +193 -0
- package/dist/scheduler/events.d.ts.map +1 -0
- package/dist/scheduler/events.js +13 -0
- package/dist/scheduler/events.js.map +1 -0
- package/dist/scheduler/fork-seed.d.ts +38 -0
- package/dist/scheduler/fork-seed.d.ts.map +1 -0
- package/dist/scheduler/fork-seed.js +590 -0
- package/dist/scheduler/fork-seed.js.map +1 -0
- package/dist/scheduler/identity.d.ts +8 -0
- package/dist/scheduler/identity.d.ts.map +1 -0
- package/dist/scheduler/identity.js +49 -0
- package/dist/scheduler/identity.js.map +1 -0
- package/dist/scheduler/ir-walk.d.ts +3 -0
- package/dist/scheduler/ir-walk.d.ts.map +1 -0
- package/dist/scheduler/ir-walk.js +25 -0
- package/dist/scheduler/ir-walk.js.map +1 -0
- package/dist/scheduler/limiter.d.ts +7 -0
- package/dist/scheduler/limiter.d.ts.map +1 -0
- package/dist/scheduler/limiter.js +10 -0
- package/dist/scheduler/limiter.js.map +1 -0
- package/dist/scheduler/materialize.d.ts +7 -0
- package/dist/scheduler/materialize.d.ts.map +1 -0
- package/dist/scheduler/materialize.js +756 -0
- package/dist/scheduler/materialize.js.map +1 -0
- package/dist/scheduler/membership.d.ts +12 -0
- package/dist/scheduler/membership.d.ts.map +1 -0
- package/dist/scheduler/membership.js +74 -0
- package/dist/scheduler/membership.js.map +1 -0
- package/dist/scheduler/node-executor.d.ts +15 -0
- package/dist/scheduler/node-executor.d.ts.map +1 -0
- package/dist/scheduler/node-executor.js +69 -0
- package/dist/scheduler/node-executor.js.map +1 -0
- package/dist/scheduler/runtime-runner.d.ts +44 -0
- package/dist/scheduler/runtime-runner.d.ts.map +1 -0
- package/dist/scheduler/runtime-runner.js +155 -0
- package/dist/scheduler/runtime-runner.js.map +1 -0
- package/dist/scheduler/scope.d.ts +6 -0
- package/dist/scheduler/scope.d.ts.map +1 -0
- package/dist/scheduler/scope.js +56 -0
- package/dist/scheduler/scope.js.map +1 -0
- package/dist/scheduler/store-port.d.ts +211 -0
- package/dist/scheduler/store-port.d.ts.map +1 -0
- package/dist/scheduler/store-port.js +28 -0
- package/dist/scheduler/store-port.js.map +1 -0
- package/dist/scheduler/transitions.d.ts +89 -0
- package/dist/scheduler/transitions.d.ts.map +1 -0
- package/dist/scheduler/transitions.js +967 -0
- package/dist/scheduler/transitions.js.map +1 -0
- package/dist/scheduler/types.d.ts +146 -0
- package/dist/scheduler/types.d.ts.map +1 -0
- package/dist/{executors → scheduler}/types.js.map +1 -1
- package/dist/store/store.d.ts +390 -0
- package/dist/store/store.d.ts.map +1 -0
- package/dist/store/store.js +3053 -0
- package/dist/store/store.js.map +1 -0
- package/dist/visualization/overlay.d.ts +86 -0
- package/dist/visualization/overlay.d.ts.map +1 -0
- package/dist/visualization/overlay.js +161 -0
- package/dist/visualization/overlay.js.map +1 -0
- package/package.json +19 -37
- package/README.md +0 -7
- package/dist/agent-telemetry.d.ts +0 -56
- package/dist/agent-telemetry.d.ts.map +0 -1
- package/dist/agent-telemetry.js +0 -304
- package/dist/agent-telemetry.js.map +0 -1
- package/dist/artifacts.d.ts +0 -45
- package/dist/artifacts.d.ts.map +0 -1
- package/dist/artifacts.js +0 -163
- package/dist/artifacts.js.map +0 -1
- package/dist/attempt-artifacts.d.ts +0 -35
- package/dist/attempt-artifacts.d.ts.map +0 -1
- package/dist/attempt-artifacts.js +0 -90
- package/dist/attempt-artifacts.js.map +0 -1
- package/dist/client.d.ts +0 -82
- package/dist/client.d.ts.map +0 -1
- package/dist/client.js +0 -200
- package/dist/client.js.map +0 -1
- package/dist/evaluator.d.ts +0 -36
- package/dist/evaluator.d.ts.map +0 -1
- package/dist/evaluator.js +0 -101
- package/dist/evaluator.js.map +0 -1
- package/dist/executors/agent.d.ts +0 -103
- package/dist/executors/agent.d.ts.map +0 -1
- package/dist/executors/agent.js +0 -516
- package/dist/executors/agent.js.map +0 -1
- package/dist/executors/mock-program.d.ts +0 -26
- package/dist/executors/mock-program.d.ts.map +0 -1
- package/dist/executors/mock-program.js +0 -100
- package/dist/executors/mock-program.js.map +0 -1
- package/dist/executors/output-preview.d.ts +0 -2
- package/dist/executors/output-preview.d.ts.map +0 -1
- package/dist/executors/output-preview.js +0 -20
- package/dist/executors/output-preview.js.map +0 -1
- package/dist/executors/program.d.ts +0 -30
- package/dist/executors/program.d.ts.map +0 -1
- package/dist/executors/program.js +0 -230
- package/dist/executors/program.js.map +0 -1
- package/dist/executors/types.d.ts +0 -32
- package/dist/executors/types.d.ts.map +0 -1
- package/dist/fork.d.ts +0 -74
- package/dist/fork.d.ts.map +0 -1
- package/dist/fork.js +0 -278
- package/dist/fork.js.map +0 -1
- package/dist/hooks/payload.d.ts +0 -17
- package/dist/hooks/payload.d.ts.map +0 -1
- package/dist/hooks/payload.js +0 -45
- package/dist/hooks/payload.js.map +0 -1
- package/dist/interpreter.d.ts +0 -168
- package/dist/interpreter.d.ts.map +0 -1
- package/dist/interpreter.js +0 -1747
- package/dist/interpreter.js.map +0 -1
- package/dist/keys.d.ts +0 -77
- package/dist/keys.d.ts.map +0 -1
- package/dist/keys.js +0 -382
- package/dist/keys.js.map +0 -1
- package/dist/run-control.d.ts +0 -45
- package/dist/run-control.d.ts.map +0 -1
- package/dist/run-control.js +0 -255
- package/dist/run-control.js.map +0 -1
- package/dist/run-id.d.ts +0 -3
- package/dist/run-id.d.ts.map +0 -1
- package/dist/run-id.js +0 -10
- package/dist/run-id.js.map +0 -1
- package/dist/state-machine.d.ts +0 -31
- package/dist/state-machine.d.ts.map +0 -1
- package/dist/state-machine.js +0 -102
- package/dist/state-machine.js.map +0 -1
- package/dist/store.d.ts +0 -92
- package/dist/store.d.ts.map +0 -1
- package/dist/store.js +0 -420
- package/dist/store.js.map +0 -1
- package/dist/supervisor-app.d.ts +0 -27
- package/dist/supervisor-app.d.ts.map +0 -1
- package/dist/supervisor-app.js +0 -694
- package/dist/supervisor-app.js.map +0 -1
- package/dist/supervisor-discovery.d.ts +0 -18
- package/dist/supervisor-discovery.d.ts.map +0 -1
- package/dist/supervisor-discovery.js +0 -180
- package/dist/supervisor-discovery.js.map +0 -1
- package/dist/supervisor-entry.d.ts +0 -11
- package/dist/supervisor-entry.d.ts.map +0 -1
- package/dist/supervisor-entry.js +0 -50
- package/dist/supervisor-entry.js.map +0 -1
- package/dist/supervisor-lock.d.ts +0 -26
- package/dist/supervisor-lock.d.ts.map +0 -1
- package/dist/supervisor-lock.js +0 -49
- package/dist/supervisor-lock.js.map +0 -1
- package/dist/supervisor-runner.d.ts +0 -11
- package/dist/supervisor-runner.d.ts.map +0 -1
- package/dist/supervisor-runner.js +0 -128
- package/dist/supervisor-runner.js.map +0 -1
- package/dist/types.d.ts +0 -375
- package/dist/types.d.ts.map +0 -1
- package/dist/types.js +0 -7
- package/dist/types.js.map +0 -1
- package/dist/validate-input.d.ts +0 -27
- package/dist/validate-input.d.ts.map +0 -1
- package/dist/validate-input.js +0 -56
- package/dist/validate-input.js.map +0 -1
- package/dist/validate-signal.d.ts +0 -14
- package/dist/validate-signal.d.ts.map +0 -1
- package/dist/validate-signal.js +0 -31
- package/dist/validate-signal.js.map +0 -1
- package/dist/workflow-context.d.ts +0 -4
- package/dist/workflow-context.d.ts.map +0 -1
- package/dist/workflow-context.js +0 -11
- package/dist/workflow-context.js.map +0 -1
- package/dist/workflow-outputs.d.ts +0 -9
- package/dist/workflow-outputs.d.ts.map +0 -1
- package/dist/workflow-outputs.js +0 -60
- package/dist/workflow-outputs.js.map +0 -1
- /package/dist/{executors → scheduler}/types.js +0 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/hooks/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAW,KAAK,MAAM,EAAE,MAAM,YAAY,CAAC;AAElD,eAAO,MAAM,UAAU,0IASb,CAAC;AAEX,MAAM,MAAM,SAAS,GAAG,CAAC,OAAO,UAAU,CAAC,CAAC,MAAM,CAAC,CAAC;AACpD,MAAM,MAAM,UAAU,GAAG,SAAS,GAAG,QAAQ,CAAC;AAE9C,MAAM,MAAM,SAAS,GAAG;IACtB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE,MAAM,CAAC;CACf,CAAC;AAEF,MAAM,MAAM,UAAU,GAAG;IACvB,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,KAAK,CAAC,EAAE,SAAS,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB,CAAC;AAEF,MAAM,MAAM,SAAS,GAAG,OAAO,CAAC,MAAM,CAAC,SAAS,EAAE,UAAU,EAAE,CAAC,CAAC,CAAC;AAEjE,MAAM,MAAM,gBAAgB,GAAG,UAAU,GAAG;IAC1C,KAAK,EAAE,SAAS,CAAC;IACjB,MAAM,EAAE,UAAU,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,eAAe,EAAE,MAAM,CAAC;IACxB,cAAc,EAAE,MAAM,CAAC;IACvB,WAAW,EAAE,MAAM,CAAC;CACrB,CAAC;AAEF,MAAM,MAAM,mBAAmB,GAAG;IAChC,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;CACjB,CAAC;AAOF,wBAAgB,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,KAAK,IAAI,SAAS,CAE7D;AAED,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,OAAO,GAAG,MAAM,CAAC,SAAS,EAAE,mBAAmB,EAAE,CAAC,CA2B3F"}
|
|
@@ -0,0 +1,112 @@
|
|
|
1
|
+
import { err, ok } from "neverthrow";
|
|
2
|
+
export const hookEvents = [
|
|
3
|
+
"run.started",
|
|
4
|
+
"run.completed",
|
|
5
|
+
"run.failed",
|
|
6
|
+
"run.canceled",
|
|
7
|
+
"run.awaiting",
|
|
8
|
+
"node.started",
|
|
9
|
+
"node.completed",
|
|
10
|
+
"node.failed",
|
|
11
|
+
];
|
|
12
|
+
const hookEventSet = new Set(hookEvents);
|
|
13
|
+
const allowedHookFields = new Set(["id", "match", "command", "timeout"]);
|
|
14
|
+
const allowedMatchFields = new Set(["workflow", "nodeId", "nodeKey", "kind"]);
|
|
15
|
+
const durationPattern = /^\d+(ms|s|m|h)?$/;
|
|
16
|
+
export function isHookEvent(value) {
|
|
17
|
+
return hookEventSet.has(value);
|
|
18
|
+
}
|
|
19
|
+
export function validateHooksFile(config) {
|
|
20
|
+
const errors = [];
|
|
21
|
+
if (!isRecord(config))
|
|
22
|
+
return err([{ path: "$", message: "Hooks file must be an object." }]);
|
|
23
|
+
const output = {};
|
|
24
|
+
for (const [event, value] of Object.entries(config)) {
|
|
25
|
+
if (event === "hooks") {
|
|
26
|
+
errors.push({ path: "$.hooks", message: "Hooks file must be an event map, not a hooks wrapper." });
|
|
27
|
+
continue;
|
|
28
|
+
}
|
|
29
|
+
if (!isHookEvent(event)) {
|
|
30
|
+
errors.push({ path: `$.${event}`, message: `Unknown hook event '${event}'.` });
|
|
31
|
+
continue;
|
|
32
|
+
}
|
|
33
|
+
if (!Array.isArray(value)) {
|
|
34
|
+
errors.push({ path: `$.${event}`, message: "Hook event value must be an array." });
|
|
35
|
+
continue;
|
|
36
|
+
}
|
|
37
|
+
const entries = [];
|
|
38
|
+
for (const [index, entry] of value.entries()) {
|
|
39
|
+
const parsed = validateHookEntry(entry, event, `$.${event}[${index}]`, errors);
|
|
40
|
+
if (parsed)
|
|
41
|
+
entries.push(parsed);
|
|
42
|
+
}
|
|
43
|
+
output[event] = entries;
|
|
44
|
+
}
|
|
45
|
+
return errors.length > 0 ? err(errors) : ok(output);
|
|
46
|
+
}
|
|
47
|
+
function validateHookEntry(entry, event, path, errors) {
|
|
48
|
+
if (!isRecord(entry)) {
|
|
49
|
+
errors.push({ path, message: "Hook entry must be an object." });
|
|
50
|
+
return undefined;
|
|
51
|
+
}
|
|
52
|
+
for (const key of Object.keys(entry)) {
|
|
53
|
+
if (!allowedHookFields.has(key))
|
|
54
|
+
errors.push({ path: `${path}.${key}`, message: `Unknown hook field '${key}'.` });
|
|
55
|
+
}
|
|
56
|
+
const id = entry.id;
|
|
57
|
+
if (id !== undefined && (typeof id !== "string" || id.length === 0)) {
|
|
58
|
+
errors.push({ path: `${path}.id`, message: "Hook id must be a non-empty string." });
|
|
59
|
+
}
|
|
60
|
+
if (typeof entry.command !== "string" || entry.command.length === 0) {
|
|
61
|
+
errors.push({ path: `${path}.command`, message: "Hook command must be a non-empty string." });
|
|
62
|
+
}
|
|
63
|
+
const timeout = entry.timeout;
|
|
64
|
+
if (timeout !== undefined && (typeof timeout !== "string" || !durationPattern.test(timeout))) {
|
|
65
|
+
errors.push({ path: `${path}.timeout`, message: "Hook timeout must be a duration such as 500ms, 30s, 5m, or 1h." });
|
|
66
|
+
}
|
|
67
|
+
const match = validateMatch(entry.match, event, `${path}.match`, errors);
|
|
68
|
+
if (errors.some(error => error.path === `${path}.command`))
|
|
69
|
+
return undefined;
|
|
70
|
+
return {
|
|
71
|
+
...(typeof id === "string" ? { id } : {}),
|
|
72
|
+
...(match === undefined ? {} : { match }),
|
|
73
|
+
command: String(entry.command),
|
|
74
|
+
...(typeof timeout === "string" ? { timeout } : {}),
|
|
75
|
+
};
|
|
76
|
+
}
|
|
77
|
+
function validateMatch(match, event, path, errors) {
|
|
78
|
+
if (match === undefined)
|
|
79
|
+
return undefined;
|
|
80
|
+
if (!isRecord(match)) {
|
|
81
|
+
errors.push({ path, message: "Hook match must be an object." });
|
|
82
|
+
return undefined;
|
|
83
|
+
}
|
|
84
|
+
const output = {};
|
|
85
|
+
for (const [key, value] of Object.entries(match)) {
|
|
86
|
+
if (!allowedMatchFields.has(key)) {
|
|
87
|
+
errors.push({ path: `${path}.${key}`, message: `Unknown hook match field '${key}'.` });
|
|
88
|
+
continue;
|
|
89
|
+
}
|
|
90
|
+
if (event.startsWith("run.") && event !== "run.awaiting" && key !== "workflow") {
|
|
91
|
+
errors.push({ path: `${path}.${key}`, message: `Match field '${key}' is not valid for ${event}.` });
|
|
92
|
+
continue;
|
|
93
|
+
}
|
|
94
|
+
if (typeof value !== "string") {
|
|
95
|
+
errors.push({ path: `${path}.${key}`, message: "Hook match value must be a regex string." });
|
|
96
|
+
continue;
|
|
97
|
+
}
|
|
98
|
+
try {
|
|
99
|
+
new RegExp(value);
|
|
100
|
+
}
|
|
101
|
+
catch (error) {
|
|
102
|
+
errors.push({ path: `${path}.${key}`, message: `Invalid regex: ${error instanceof Error ? error.message : String(error)}` });
|
|
103
|
+
continue;
|
|
104
|
+
}
|
|
105
|
+
output[key] = value;
|
|
106
|
+
}
|
|
107
|
+
return output;
|
|
108
|
+
}
|
|
109
|
+
function isRecord(value) {
|
|
110
|
+
return !!value && typeof value === "object" && !Array.isArray(value);
|
|
111
|
+
}
|
|
112
|
+
//# sourceMappingURL=config.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/hooks/config.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
import type { WorkflowIR } from "@acpus/core/ir";
|
|
2
|
+
import { type EvaluationScope } from "../evaluation/evaluator.js";
|
|
3
|
+
import type { SchedulerProjection } from "../scheduler/types.js";
|
|
4
|
+
import type { HookEvent } from "./config.js";
|
|
5
|
+
import type { CommittedRuntimeEventRow } from "./events.js";
|
|
6
|
+
export type HookContext = {
|
|
7
|
+
event: HookEvent;
|
|
8
|
+
eventSequence: number;
|
|
9
|
+
run: {
|
|
10
|
+
id: string;
|
|
11
|
+
workflowName: string;
|
|
12
|
+
workflowPath: string;
|
|
13
|
+
workspaceDir: string;
|
|
14
|
+
status: string;
|
|
15
|
+
};
|
|
16
|
+
node?: {
|
|
17
|
+
id: string;
|
|
18
|
+
key: string;
|
|
19
|
+
kind: "task" | "agent" | "signal";
|
|
20
|
+
status: string;
|
|
21
|
+
output?: unknown;
|
|
22
|
+
error?: {
|
|
23
|
+
message: string;
|
|
24
|
+
};
|
|
25
|
+
agentPrompt?: string;
|
|
26
|
+
taskInput?: unknown;
|
|
27
|
+
};
|
|
28
|
+
output?: unknown;
|
|
29
|
+
error?: {
|
|
30
|
+
message: string;
|
|
31
|
+
};
|
|
32
|
+
cancellation?: {
|
|
33
|
+
reason: string;
|
|
34
|
+
};
|
|
35
|
+
signal?: {
|
|
36
|
+
nodeId: string;
|
|
37
|
+
nodeKey: string;
|
|
38
|
+
prompt: string;
|
|
39
|
+
};
|
|
40
|
+
};
|
|
41
|
+
export declare function buildHookContext(input: {
|
|
42
|
+
row: CommittedRuntimeEventRow;
|
|
43
|
+
hookEvent: HookEvent;
|
|
44
|
+
projection: SchedulerProjection;
|
|
45
|
+
ir: WorkflowIR;
|
|
46
|
+
workspaceDir: string;
|
|
47
|
+
workflowPath: string;
|
|
48
|
+
baseScope: EvaluationScope;
|
|
49
|
+
}): HookContext;
|
|
50
|
+
//# sourceMappingURL=context.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../../src/hooks/context.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAmC,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAElF,OAAO,EAAgC,KAAK,eAAe,EAAE,MAAM,4BAA4B,CAAC;AAGhG,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AACjE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAC7C,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,aAAa,CAAC;AAE5D,MAAM,MAAM,WAAW,GAAG;IACxB,KAAK,EAAE,SAAS,CAAC;IACjB,aAAa,EAAE,MAAM,CAAC;IACtB,GAAG,EAAE;QACH,EAAE,EAAE,MAAM,CAAC;QACX,YAAY,EAAE,MAAM,CAAC;QACrB,YAAY,EAAE,MAAM,CAAC;QACrB,YAAY,EAAE,MAAM,CAAC;QACrB,MAAM,EAAE,MAAM,CAAC;KAChB,CAAC;IACF,IAAI,CAAC,EAAE;QACL,EAAE,EAAE,MAAM,CAAC;QACX,GAAG,EAAE,MAAM,CAAC;QACZ,IAAI,EAAE,MAAM,GAAG,OAAO,GAAG,QAAQ,CAAC;QAClC,MAAM,EAAE,MAAM,CAAC;QACf,MAAM,CAAC,EAAE,OAAO,CAAC;QACjB,KAAK,CAAC,EAAE;YAAE,OAAO,EAAE,MAAM,CAAA;SAAE,CAAC;QAC5B,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,SAAS,CAAC,EAAE,OAAO,CAAC;KACrB,CAAC;IACF,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,KAAK,CAAC,EAAE;QAAE,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC;IAC5B,YAAY,CAAC,EAAE;QAAE,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC;IAClC,MAAM,CAAC,EAAE;QACP,MAAM,EAAE,MAAM,CAAC;QACf,OAAO,EAAE,MAAM,CAAC;QAChB,MAAM,EAAE,MAAM,CAAC;KAChB,CAAC;CACH,CAAC;AAEF,wBAAgB,gBAAgB,CAAC,KAAK,EAAE;IACtC,GAAG,EAAE,wBAAwB,CAAC;IAC9B,SAAS,EAAE,SAAS,CAAC;IACrB,UAAU,EAAE,mBAAmB,CAAC;IAChC,EAAE,EAAE,UAAU,CAAC;IACf,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY,EAAE,MAAM,CAAC;IACrB,SAAS,EAAE,eAAe,CAAC;CAC5B,GAAG,WAAW,CAqCd"}
|
|
@@ -0,0 +1,116 @@
|
|
|
1
|
+
import { evaluateExpr, renderTemplate } from "../evaluation/evaluator.js";
|
|
2
|
+
import { indexNodes } from "../scheduler/ir-walk.js";
|
|
3
|
+
import { scopeForNodeAttempt } from "../scheduler/scope.js";
|
|
4
|
+
export function buildHookContext(input) {
|
|
5
|
+
const context = {
|
|
6
|
+
event: input.hookEvent,
|
|
7
|
+
eventSequence: input.row.sequence,
|
|
8
|
+
run: {
|
|
9
|
+
id: input.row.runId,
|
|
10
|
+
workflowName: input.ir.name,
|
|
11
|
+
workflowPath: input.workflowPath,
|
|
12
|
+
workspaceDir: input.workspaceDir,
|
|
13
|
+
status: runStatusForEvent(input.hookEvent),
|
|
14
|
+
},
|
|
15
|
+
};
|
|
16
|
+
if (input.hookEvent === "run.completed")
|
|
17
|
+
return { ...context, output: input.row.payload.output };
|
|
18
|
+
if (input.hookEvent === "run.failed")
|
|
19
|
+
return { ...context, error: errorFrom(input.row.payload) };
|
|
20
|
+
if (input.hookEvent === "run.canceled")
|
|
21
|
+
return { ...context, cancellation: { reason: stringField(input.row.payload, "reason") ?? "canceled" } };
|
|
22
|
+
if (input.hookEvent === "run.awaiting") {
|
|
23
|
+
const nodeKey = stringField(input.row.payload, "nodeKey") ?? input.row.nodeKey ?? "";
|
|
24
|
+
const wait = input.projection.signalWaits[nodeKey];
|
|
25
|
+
const nodeId = stringField(input.row.payload, "nodeId") ?? wait?.nodeId ?? "";
|
|
26
|
+
const node = indexNodes(input.ir.root).get(nodeId);
|
|
27
|
+
const prompt = stringField(input.row.payload, "renderedPrompt") ?? wait?.renderedPrompt ?? renderSignalPrompt(node, input.baseScope, input.projection, nodeKey);
|
|
28
|
+
const nodeContext = buildNodeContext(input, nodeKey);
|
|
29
|
+
return {
|
|
30
|
+
...context,
|
|
31
|
+
...(nodeContext === undefined ? {} : { node: nodeContext }),
|
|
32
|
+
signal: { nodeId, nodeKey, prompt },
|
|
33
|
+
};
|
|
34
|
+
}
|
|
35
|
+
if (input.hookEvent.startsWith("node.")) {
|
|
36
|
+
const nodeKey = stringField(input.row.payload, "nodeKey") ?? input.row.nodeKey;
|
|
37
|
+
const nodeContext = nodeKey ? buildNodeContext(input, nodeKey) : undefined;
|
|
38
|
+
return nodeContext ? { ...context, node: nodeContext } : context;
|
|
39
|
+
}
|
|
40
|
+
return context;
|
|
41
|
+
}
|
|
42
|
+
function buildNodeContext(input, nodeKey) {
|
|
43
|
+
const instance = input.projection.instances[nodeKey];
|
|
44
|
+
const nodeId = instance?.nodeId ?? stringField(input.row.payload, "nodeId");
|
|
45
|
+
if (!nodeId)
|
|
46
|
+
return undefined;
|
|
47
|
+
const node = indexNodes(input.ir.root).get(nodeId);
|
|
48
|
+
if (!node || !isHookNode(node))
|
|
49
|
+
return undefined;
|
|
50
|
+
const scope = scopeForNodeAttempt(input.baseScope, input.projection, nodeKey);
|
|
51
|
+
const base = {
|
|
52
|
+
id: node.id,
|
|
53
|
+
key: nodeKey,
|
|
54
|
+
kind: node.kind,
|
|
55
|
+
status: nodeStatusForEvent(input.hookEvent) ?? instance?.status ?? input.projection.signalWaits[nodeKey]?.status ?? "unknown",
|
|
56
|
+
};
|
|
57
|
+
if (node.kind === "agent")
|
|
58
|
+
return { ...base, agentPrompt: renderTemplate(node.run.prompt, scope), ...nodeResultFields(input.hookEvent, input.row.payload) };
|
|
59
|
+
if (node.kind === "task")
|
|
60
|
+
return { ...base, taskInput: taskInput(node, scope), ...nodeResultFields(input.hookEvent, input.row.payload) };
|
|
61
|
+
return { ...base, ...nodeResultFields(input.hookEvent, input.row.payload) };
|
|
62
|
+
}
|
|
63
|
+
function taskInput(node, scope) {
|
|
64
|
+
return Object.fromEntries(Object.entries(node.run.input).map(([key, expr]) => [key, evaluateExpr(expr, scope)]));
|
|
65
|
+
}
|
|
66
|
+
function renderSignalPrompt(node, baseScope, projection, nodeKey) {
|
|
67
|
+
if (!node || node.kind !== "signal")
|
|
68
|
+
return "";
|
|
69
|
+
return renderTemplate(node.run.prompt, scopeForNodeAttempt(baseScope, projection, nodeKey));
|
|
70
|
+
}
|
|
71
|
+
function nodeResultFields(hookEvent, payload) {
|
|
72
|
+
return {
|
|
73
|
+
...(hookEvent === "node.completed" && payload.output !== undefined ? { output: payload.output } : {}),
|
|
74
|
+
...(hookEvent === "node.failed" && payload.error !== undefined ? { error: errorFrom(payload.error) } : {}),
|
|
75
|
+
};
|
|
76
|
+
}
|
|
77
|
+
function runStatusForEvent(hookEvent) {
|
|
78
|
+
if (hookEvent === "run.started")
|
|
79
|
+
return "running";
|
|
80
|
+
if (hookEvent === "run.awaiting")
|
|
81
|
+
return "awaiting";
|
|
82
|
+
if (hookEvent === "run.completed")
|
|
83
|
+
return "completed";
|
|
84
|
+
if (hookEvent === "run.failed")
|
|
85
|
+
return "failed";
|
|
86
|
+
if (hookEvent === "run.canceled")
|
|
87
|
+
return "canceled";
|
|
88
|
+
return "running";
|
|
89
|
+
}
|
|
90
|
+
function nodeStatusForEvent(hookEvent) {
|
|
91
|
+
if (hookEvent === "node.started")
|
|
92
|
+
return "running";
|
|
93
|
+
if (hookEvent === "node.completed")
|
|
94
|
+
return "completed";
|
|
95
|
+
if (hookEvent === "node.failed")
|
|
96
|
+
return "failed";
|
|
97
|
+
if (hookEvent === "run.awaiting")
|
|
98
|
+
return "awaiting";
|
|
99
|
+
return undefined;
|
|
100
|
+
}
|
|
101
|
+
function errorFrom(value) {
|
|
102
|
+
if (value && typeof value === "object" && !Array.isArray(value)) {
|
|
103
|
+
const message = value.message ?? value.reason;
|
|
104
|
+
if (typeof message === "string")
|
|
105
|
+
return { message };
|
|
106
|
+
}
|
|
107
|
+
return { message: value === undefined ? "failed" : String(value) };
|
|
108
|
+
}
|
|
109
|
+
function stringField(value, key) {
|
|
110
|
+
const found = value[key];
|
|
111
|
+
return typeof found === "string" ? found : undefined;
|
|
112
|
+
}
|
|
113
|
+
function isHookNode(node) {
|
|
114
|
+
return node.kind === "agent" || node.kind === "task" || node.kind === "signal";
|
|
115
|
+
}
|
|
116
|
+
//# sourceMappingURL=context.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"context.js","sourceRoot":"","sources":["../../src/hooks/context.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import type { HookEvent } from "./config.js";
|
|
2
|
+
export type CommittedRuntimeEventRow = {
|
|
3
|
+
runId: string;
|
|
4
|
+
sequence: number;
|
|
5
|
+
type: string;
|
|
6
|
+
nodeKey?: string;
|
|
7
|
+
payload: Record<string, unknown>;
|
|
8
|
+
createdAt: string;
|
|
9
|
+
idempotencyKey: string;
|
|
10
|
+
};
|
|
11
|
+
export declare function mapRuntimeEventToHookEvent(row: CommittedRuntimeEventRow): HookEvent | undefined;
|
|
12
|
+
export declare function decodeCommittedRuntimeEventRow(row: {
|
|
13
|
+
run_id: string;
|
|
14
|
+
sequence: number;
|
|
15
|
+
type: string;
|
|
16
|
+
node_key: string | null;
|
|
17
|
+
payload_json: string;
|
|
18
|
+
created_at: string;
|
|
19
|
+
idempotency_key: string;
|
|
20
|
+
}): CommittedRuntimeEventRow;
|
|
21
|
+
export declare function decodeRuntimeEventPayload(payloadJson: string, eventType: string): Record<string, unknown>;
|
|
22
|
+
//# sourceMappingURL=events.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"events.d.ts","sourceRoot":"","sources":["../../src/hooks/events.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAE7C,MAAM,MAAM,wBAAwB,GAAG;IACrC,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACjC,SAAS,EAAE,MAAM,CAAC;IAClB,cAAc,EAAE,MAAM,CAAC;CACxB,CAAC;AAEF,wBAAgB,0BAA0B,CAAC,GAAG,EAAE,wBAAwB,GAAG,SAAS,GAAG,SAAS,CAU/F;AAED,wBAAgB,8BAA8B,CAAC,GAAG,EAAE;IAClD,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,MAAM,CAAC;IACnB,eAAe,EAAE,MAAM,CAAC;CACzB,GAAG,wBAAwB,CAU3B;AAED,wBAAgB,yBAAyB,CAAC,WAAW,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAOzG"}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import { decodeSchedulerPayload, isSchedulerEventType } from "../scheduler/event-codec.js";
|
|
2
|
+
export function mapRuntimeEventToHookEvent(row) {
|
|
3
|
+
if (row.type === "frame.started" && row.payload.frameKey === "root" && row.payload.frameKind === "root")
|
|
4
|
+
return "run.started";
|
|
5
|
+
if (row.type === "run.completed")
|
|
6
|
+
return "run.completed";
|
|
7
|
+
if (row.type === "run.failed")
|
|
8
|
+
return "run.failed";
|
|
9
|
+
if (row.type === "run.canceled")
|
|
10
|
+
return "run.canceled";
|
|
11
|
+
if (row.type === "instance.completed")
|
|
12
|
+
return "node.completed";
|
|
13
|
+
if (row.type === "instance.failed")
|
|
14
|
+
return "node.failed";
|
|
15
|
+
if (row.type === "instance.started")
|
|
16
|
+
return "node.started";
|
|
17
|
+
if (row.type === "signal.awaiting")
|
|
18
|
+
return "run.awaiting";
|
|
19
|
+
return undefined;
|
|
20
|
+
}
|
|
21
|
+
export function decodeCommittedRuntimeEventRow(row) {
|
|
22
|
+
return {
|
|
23
|
+
runId: row.run_id,
|
|
24
|
+
sequence: row.sequence,
|
|
25
|
+
type: row.type,
|
|
26
|
+
...(row.node_key === null ? {} : { nodeKey: row.node_key }),
|
|
27
|
+
payload: decodeRuntimeEventPayload(row.payload_json, row.type),
|
|
28
|
+
createdAt: row.created_at,
|
|
29
|
+
idempotencyKey: row.idempotency_key,
|
|
30
|
+
};
|
|
31
|
+
}
|
|
32
|
+
export function decodeRuntimeEventPayload(payloadJson, eventType) {
|
|
33
|
+
const parsed = JSON.parse(payloadJson);
|
|
34
|
+
if (isSchedulerEventType(eventType)) {
|
|
35
|
+
return decodeSchedulerPayload(payloadJson, eventType);
|
|
36
|
+
}
|
|
37
|
+
if (!parsed || typeof parsed !== "object" || Array.isArray(parsed))
|
|
38
|
+
return {};
|
|
39
|
+
return parsed;
|
|
40
|
+
}
|
|
41
|
+
//# sourceMappingURL=events.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"events.js","sourceRoot":"","sources":["../../src/hooks/events.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,sBAAsB,EAAE,oBAAoB,EAAE,MAAM,6BAA6B,CAAC;AAa3F,MAAM,UAAU,0BAA0B,CAAC,GAA6B;IACtE,IAAI,GAAG,CAAC,IAAI,KAAK,eAAe,IAAI,GAAG,CAAC,OAAO,CAAC,QAAQ,KAAK,MAAM,IAAI,GAAG,CAAC,OAAO,CAAC,SAAS,KAAK,MAAM;QAAE,OAAO,aAAa,CAAC;IAC9H,IAAI,GAAG,CAAC,IAAI,KAAK,eAAe;QAAE,OAAO,eAAe,CAAC;IACzD,IAAI,GAAG,CAAC,IAAI,KAAK,YAAY;QAAE,OAAO,YAAY,CAAC;IACnD,IAAI,GAAG,CAAC,IAAI,KAAK,cAAc;QAAE,OAAO,cAAc,CAAC;IACvD,IAAI,GAAG,CAAC,IAAI,KAAK,oBAAoB;QAAE,OAAO,gBAAgB,CAAC;IAC/D,IAAI,GAAG,CAAC,IAAI,KAAK,iBAAiB;QAAE,OAAO,aAAa,CAAC;IACzD,IAAI,GAAG,CAAC,IAAI,KAAK,kBAAkB;QAAE,OAAO,cAAc,CAAC;IAC3D,IAAI,GAAG,CAAC,IAAI,KAAK,iBAAiB;QAAE,OAAO,cAAc,CAAC;IAC1D,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,MAAM,UAAU,8BAA8B,CAAC,GAQ9C;IACC,OAAO;QACL,KAAK,EAAE,GAAG,CAAC,MAAM;QACjB,QAAQ,EAAE,GAAG,CAAC,QAAQ;QACtB,IAAI,EAAE,GAAG,CAAC,IAAI;QACd,GAAG,CAAC,GAAG,CAAC,QAAQ,KAAK,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,GAAG,CAAC,QAAQ,EAAE,CAAC;QAC3D,OAAO,EAAE,yBAAyB,CAAC,GAAG,CAAC,YAAY,EAAE,GAAG,CAAC,IAAI,CAAC;QAC9D,SAAS,EAAE,GAAG,CAAC,UAAU;QACzB,cAAc,EAAE,GAAG,CAAC,eAAe;KACpC,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,yBAAyB,CAAC,WAAmB,EAAE,SAAiB;IAC9E,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,WAAW,CAAc,CAAC;IACpD,IAAI,oBAAoB,CAAC,SAAS,CAAC,EAAE,CAAC;QACpC,OAAO,sBAAsB,CAAC,WAAW,EAAE,SAAS,CAAC,CAAC;IACxD,CAAC;IACD,IAAI,CAAC,MAAM,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC;QAAE,OAAO,EAAE,CAAC;IAC9E,OAAO,MAAiC,CAAC;AAC3C,CAAC"}
|
package/dist/hooks/journal.d.ts
CHANGED
|
@@ -1,20 +1,22 @@
|
|
|
1
|
-
import type {
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
1
|
+
import type { HookEvent, HookSource } from "./config.js";
|
|
2
|
+
export type HookJournalStatus = "completed" | "failed" | "timed_out";
|
|
3
|
+
export type HookJournalEntry = {
|
|
4
|
+
id?: number;
|
|
5
|
+
runId: string;
|
|
6
|
+
eventSequence: number;
|
|
7
|
+
triggerOrder: number;
|
|
8
|
+
event: HookEvent;
|
|
9
|
+
source: HookSource;
|
|
10
|
+
sourcePath: string;
|
|
11
|
+
handlerId: string;
|
|
12
|
+
definitionHash: string;
|
|
13
|
+
nodeKey?: string;
|
|
14
|
+
status: HookJournalStatus;
|
|
15
|
+
exitCode?: number;
|
|
16
|
+
stdout?: string;
|
|
17
|
+
stderr?: string;
|
|
18
|
+
durationMs?: number;
|
|
19
|
+
error?: string;
|
|
20
|
+
triggeredAt: string;
|
|
21
|
+
};
|
|
20
22
|
//# sourceMappingURL=journal.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"journal.d.ts","sourceRoot":"","sources":["../../src/hooks/journal.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"journal.d.ts","sourceRoot":"","sources":["../../src/hooks/journal.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAEzD,MAAM,MAAM,iBAAiB,GAAG,WAAW,GAAG,QAAQ,GAAG,WAAW,CAAC;AAErE,MAAM,MAAM,gBAAgB,GAAG;IAC7B,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,aAAa,EAAE,MAAM,CAAC;IACtB,YAAY,EAAE,MAAM,CAAC;IACrB,KAAK,EAAE,SAAS,CAAC;IACjB,MAAM,EAAE,UAAU,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,cAAc,EAAE,MAAM,CAAC;IACvB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,iBAAiB,CAAC;IAC1B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,MAAM,CAAC;CACrB,CAAC"}
|
package/dist/hooks/journal.js
CHANGED
|
@@ -1,49 +1,2 @@
|
|
|
1
|
-
|
|
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
|
-
}
|
|
1
|
+
export {};
|
|
49
2
|
//# sourceMappingURL=journal.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"journal.js","sourceRoot":"","sources":["../../src/hooks/journal.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"journal.js","sourceRoot":"","sources":["../../src/hooks/journal.ts"],"names":[],"mappings":""}
|
package/dist/hooks/loader.d.ts
CHANGED
|
@@ -1,41 +1,35 @@
|
|
|
1
|
-
import { type
|
|
2
|
-
|
|
3
|
-
export
|
|
4
|
-
|
|
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 {
|
|
1
|
+
import { type Result } from "neverthrow";
|
|
2
|
+
import { type HooksFile, type HookSource, type HookValidationError, type LoadedHookConfig } from "./config.js";
|
|
3
|
+
export type HookConfigScope = {
|
|
4
|
+
source: HookSource;
|
|
10
5
|
path: string;
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
export declare function
|
|
39
|
-
|
|
40
|
-
export declare function hashHookConfig(config: HookConfig): string;
|
|
6
|
+
hooks: LoadedHookConfig[];
|
|
7
|
+
};
|
|
8
|
+
export type HookLoadError = {
|
|
9
|
+
type: "invalid-json";
|
|
10
|
+
source: HookSource;
|
|
11
|
+
path: string;
|
|
12
|
+
message: string;
|
|
13
|
+
} | {
|
|
14
|
+
type: "invalid-config";
|
|
15
|
+
source: HookSource;
|
|
16
|
+
path: string;
|
|
17
|
+
errors: HookValidationError[];
|
|
18
|
+
} | {
|
|
19
|
+
type: "read-failed";
|
|
20
|
+
source: HookSource;
|
|
21
|
+
path: string;
|
|
22
|
+
message: string;
|
|
23
|
+
};
|
|
24
|
+
export declare function formatHookLoadError(error: HookLoadError): string;
|
|
25
|
+
export declare function projectHooksPath(workspaceDir: string): string;
|
|
26
|
+
export declare function globalHooksPath(homeDir?: string): string;
|
|
27
|
+
export declare function loadHooksConfig(workspaceDir: string, options?: {
|
|
28
|
+
homeDir?: string;
|
|
29
|
+
}): Promise<Result<LoadedHookConfig[], HookLoadError>>;
|
|
30
|
+
export declare function loadHooksConfigScopes(workspaceDir: string, options?: {
|
|
31
|
+
homeDir?: string;
|
|
32
|
+
}): Promise<Result<HookConfigScope[], HookLoadError>>;
|
|
33
|
+
export declare function loadHooksConfigScope(source: HookSource, path: string): Promise<Result<HookConfigScope, HookLoadError>>;
|
|
34
|
+
export declare function flattenHooksFile(file: HooksFile, source: HookSource, sourcePath: string): LoadedHookConfig[];
|
|
41
35
|
//# sourceMappingURL=loader.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"loader.d.ts","sourceRoot":"","sources":["../../src/hooks/loader.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"loader.d.ts","sourceRoot":"","sources":["../../src/hooks/loader.ts"],"names":[],"mappings":"AAIA,OAAO,EAAW,KAAK,MAAM,EAAE,MAAM,YAAY,CAAC;AAClD,OAAO,EAAkD,KAAK,SAAS,EAAE,KAAK,UAAU,EAAE,KAAK,mBAAmB,EAAE,KAAK,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAE/J,MAAM,MAAM,eAAe,GAAG;IAC5B,MAAM,EAAE,UAAU,CAAC;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,gBAAgB,EAAE,CAAC;CAC3B,CAAC;AAEF,MAAM,MAAM,aAAa,GACrB;IAAE,IAAI,EAAE,cAAc,CAAC;IAAC,MAAM,EAAE,UAAU,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,GAC3E;IAAE,IAAI,EAAE,gBAAgB,CAAC;IAAC,MAAM,EAAE,UAAU,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,mBAAmB,EAAE,CAAA;CAAE,GAC3F;IAAE,IAAI,EAAE,aAAa,CAAC;IAAC,MAAM,EAAE,UAAU,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAAC;AAE/E,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,aAAa,GAAG,MAAM,CAKhE;AAED,wBAAgB,gBAAgB,CAAC,YAAY,EAAE,MAAM,GAAG,MAAM,CAE7D;AAED,wBAAgB,eAAe,CAAC,OAAO,SAAY,GAAG,MAAM,CAE3D;AAED,wBAAsB,eAAe,CAAC,YAAY,EAAE,MAAM,EAAE,OAAO,GAAE;IAAE,OAAO,CAAC,EAAE,MAAM,CAAA;CAAO,GAAG,OAAO,CAAC,MAAM,CAAC,gBAAgB,EAAE,EAAE,aAAa,CAAC,CAAC,CAGlJ;AAED,wBAAsB,qBAAqB,CAAC,YAAY,EAAE,MAAM,EAAE,OAAO,GAAE;IAAE,OAAO,CAAC,EAAE,MAAM,CAAA;CAAO,GAAG,OAAO,CAAC,MAAM,CAAC,eAAe,EAAE,EAAE,aAAa,CAAC,CAAC,CAMvJ;AAED,wBAAsB,oBAAoB,CAAC,MAAM,EAAE,UAAU,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,eAAe,EAAE,aAAa,CAAC,CAAC,CAE5H;AAED,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,SAAS,EAAE,MAAM,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,GAAG,gBAAgB,EAAE,CAkB5G"}
|