@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.
Files changed (289) hide show
  1. package/dist/.tsbuildinfo +1 -0
  2. package/dist/admission/input.d.ts +5 -0
  3. package/dist/admission/input.d.ts.map +1 -0
  4. package/dist/admission/input.js +17 -0
  5. package/dist/admission/input.js.map +1 -0
  6. package/dist/artifacts/rewrite.d.ts +7 -0
  7. package/dist/artifacts/rewrite.d.ts.map +1 -0
  8. package/dist/artifacts/rewrite.js +28 -0
  9. package/dist/artifacts/rewrite.js.map +1 -0
  10. package/dist/control/agent-overrides.d.ts +4 -0
  11. package/dist/control/agent-overrides.d.ts.map +1 -0
  12. package/dist/control/agent-overrides.js +40 -0
  13. package/dist/control/agent-overrides.js.map +1 -0
  14. package/dist/daemon/loop.d.ts +16 -0
  15. package/dist/daemon/loop.d.ts.map +1 -0
  16. package/dist/daemon/loop.js +191 -0
  17. package/dist/daemon/loop.js.map +1 -0
  18. package/dist/daemon/sessions.d.ts +23 -0
  19. package/dist/daemon/sessions.d.ts.map +1 -0
  20. package/dist/daemon/sessions.js +190 -0
  21. package/dist/daemon/sessions.js.map +1 -0
  22. package/dist/daemon/socket.d.ts +82 -0
  23. package/dist/daemon/socket.d.ts.map +1 -0
  24. package/dist/daemon/socket.js +341 -0
  25. package/dist/daemon/socket.js.map +1 -0
  26. package/dist/daemon/tick.d.ts +9 -0
  27. package/dist/daemon/tick.d.ts.map +1 -0
  28. package/dist/daemon/tick.js +18 -0
  29. package/dist/daemon/tick.js.map +1 -0
  30. package/dist/evaluation/admissible.d.ts +2 -0
  31. package/dist/evaluation/admissible.d.ts.map +1 -0
  32. package/dist/evaluation/admissible.js +50 -0
  33. package/dist/evaluation/admissible.js.map +1 -0
  34. package/dist/evaluation/evaluator.d.ts +14 -0
  35. package/dist/evaluation/evaluator.d.ts.map +1 -0
  36. package/dist/evaluation/evaluator.js +34 -0
  37. package/dist/evaluation/evaluator.js.map +1 -0
  38. package/dist/evaluation/loop-limit.d.ts +4 -0
  39. package/dist/evaluation/loop-limit.d.ts.map +1 -0
  40. package/dist/evaluation/loop-limit.js +9 -0
  41. package/dist/evaluation/loop-limit.js.map +1 -0
  42. package/dist/evaluation/schema.d.ts +4 -0
  43. package/dist/evaluation/schema.d.ts.map +1 -0
  44. package/dist/evaluation/schema.js +92 -0
  45. package/dist/evaluation/schema.js.map +1 -0
  46. package/dist/execution/advance.d.ts +18 -0
  47. package/dist/execution/advance.d.ts.map +1 -0
  48. package/dist/execution/advance.js +57 -0
  49. package/dist/execution/advance.js.map +1 -0
  50. package/dist/execution/agent-node.d.ts +23 -0
  51. package/dist/execution/agent-node.d.ts.map +1 -0
  52. package/dist/execution/agent-node.js +512 -0
  53. package/dist/execution/agent-node.js.map +1 -0
  54. package/dist/execution/duration.d.ts +2 -0
  55. package/dist/execution/duration.d.ts.map +1 -0
  56. package/dist/execution/duration.js +15 -0
  57. package/dist/execution/duration.js.map +1 -0
  58. package/dist/execution/ir.d.ts +3 -0
  59. package/dist/execution/ir.d.ts.map +1 -0
  60. package/dist/execution/ir.js +46 -0
  61. package/dist/execution/ir.js.map +1 -0
  62. package/dist/execution/scheduler.d.ts +59 -0
  63. package/dist/execution/scheduler.d.ts.map +1 -0
  64. package/dist/execution/scheduler.js +306 -0
  65. package/dist/execution/scheduler.js.map +1 -0
  66. package/dist/execution/task-executor.d.ts +14 -0
  67. package/dist/execution/task-executor.d.ts.map +1 -0
  68. package/dist/execution/task-executor.js +186 -0
  69. package/dist/execution/task-executor.js.map +1 -0
  70. package/dist/hooks/config.d.ts +32 -0
  71. package/dist/hooks/config.d.ts.map +1 -0
  72. package/dist/hooks/config.js +112 -0
  73. package/dist/hooks/config.js.map +1 -0
  74. package/dist/hooks/context.d.ts +50 -0
  75. package/dist/hooks/context.d.ts.map +1 -0
  76. package/dist/hooks/context.js +116 -0
  77. package/dist/hooks/context.js.map +1 -0
  78. package/dist/hooks/events.d.ts +22 -0
  79. package/dist/hooks/events.d.ts.map +1 -0
  80. package/dist/hooks/events.js +41 -0
  81. package/dist/hooks/events.js.map +1 -0
  82. package/dist/hooks/journal.d.ts +21 -19
  83. package/dist/hooks/journal.d.ts.map +1 -1
  84. package/dist/hooks/journal.js +1 -48
  85. package/dist/hooks/journal.js.map +1 -1
  86. package/dist/hooks/loader.d.ts +33 -39
  87. package/dist/hooks/loader.d.ts.map +1 -1
  88. package/dist/hooks/loader.js +79 -95
  89. package/dist/hooks/loader.js.map +1 -1
  90. package/dist/hooks/runner.d.ts +14 -41
  91. package/dist/hooks/runner.d.ts.map +1 -1
  92. package/dist/hooks/runner.js +177 -145
  93. package/dist/hooks/runner.js.map +1 -1
  94. package/dist/index.d.ts +13 -28
  95. package/dist/index.d.ts.map +1 -1
  96. package/dist/index.js +13 -33
  97. package/dist/index.js.map +1 -1
  98. package/dist/runs/advance-runtime.d.ts +50 -0
  99. package/dist/runs/advance-runtime.d.ts.map +1 -0
  100. package/dist/runs/advance-runtime.js +82 -0
  101. package/dist/runs/advance-runtime.js.map +1 -0
  102. package/dist/runs/use-cases.d.ts +111 -0
  103. package/dist/runs/use-cases.d.ts.map +1 -0
  104. package/dist/runs/use-cases.js +539 -0
  105. package/dist/runs/use-cases.js.map +1 -0
  106. package/dist/scheduler/advance.d.ts +65 -0
  107. package/dist/scheduler/advance.d.ts.map +1 -0
  108. package/dist/scheduler/advance.js +435 -0
  109. package/dist/scheduler/advance.js.map +1 -0
  110. package/dist/scheduler/control.d.ts +49 -0
  111. package/dist/scheduler/control.d.ts.map +1 -0
  112. package/dist/scheduler/control.js +212 -0
  113. package/dist/scheduler/control.js.map +1 -0
  114. package/dist/scheduler/event-codec.d.ts +4 -0
  115. package/dist/scheduler/event-codec.d.ts.map +1 -0
  116. package/dist/scheduler/event-codec.js +57 -0
  117. package/dist/scheduler/event-codec.js.map +1 -0
  118. package/dist/scheduler/events.d.ts +193 -0
  119. package/dist/scheduler/events.d.ts.map +1 -0
  120. package/dist/scheduler/events.js +13 -0
  121. package/dist/scheduler/events.js.map +1 -0
  122. package/dist/scheduler/fork-seed.d.ts +38 -0
  123. package/dist/scheduler/fork-seed.d.ts.map +1 -0
  124. package/dist/scheduler/fork-seed.js +590 -0
  125. package/dist/scheduler/fork-seed.js.map +1 -0
  126. package/dist/scheduler/identity.d.ts +8 -0
  127. package/dist/scheduler/identity.d.ts.map +1 -0
  128. package/dist/scheduler/identity.js +49 -0
  129. package/dist/scheduler/identity.js.map +1 -0
  130. package/dist/scheduler/ir-walk.d.ts +3 -0
  131. package/dist/scheduler/ir-walk.d.ts.map +1 -0
  132. package/dist/scheduler/ir-walk.js +25 -0
  133. package/dist/scheduler/ir-walk.js.map +1 -0
  134. package/dist/scheduler/limiter.d.ts +7 -0
  135. package/dist/scheduler/limiter.d.ts.map +1 -0
  136. package/dist/scheduler/limiter.js +10 -0
  137. package/dist/scheduler/limiter.js.map +1 -0
  138. package/dist/scheduler/materialize.d.ts +7 -0
  139. package/dist/scheduler/materialize.d.ts.map +1 -0
  140. package/dist/scheduler/materialize.js +756 -0
  141. package/dist/scheduler/materialize.js.map +1 -0
  142. package/dist/scheduler/membership.d.ts +12 -0
  143. package/dist/scheduler/membership.d.ts.map +1 -0
  144. package/dist/scheduler/membership.js +74 -0
  145. package/dist/scheduler/membership.js.map +1 -0
  146. package/dist/scheduler/node-executor.d.ts +15 -0
  147. package/dist/scheduler/node-executor.d.ts.map +1 -0
  148. package/dist/scheduler/node-executor.js +69 -0
  149. package/dist/scheduler/node-executor.js.map +1 -0
  150. package/dist/scheduler/runtime-runner.d.ts +44 -0
  151. package/dist/scheduler/runtime-runner.d.ts.map +1 -0
  152. package/dist/scheduler/runtime-runner.js +155 -0
  153. package/dist/scheduler/runtime-runner.js.map +1 -0
  154. package/dist/scheduler/scope.d.ts +6 -0
  155. package/dist/scheduler/scope.d.ts.map +1 -0
  156. package/dist/scheduler/scope.js +56 -0
  157. package/dist/scheduler/scope.js.map +1 -0
  158. package/dist/scheduler/store-port.d.ts +211 -0
  159. package/dist/scheduler/store-port.d.ts.map +1 -0
  160. package/dist/scheduler/store-port.js +28 -0
  161. package/dist/scheduler/store-port.js.map +1 -0
  162. package/dist/scheduler/transitions.d.ts +89 -0
  163. package/dist/scheduler/transitions.d.ts.map +1 -0
  164. package/dist/scheduler/transitions.js +967 -0
  165. package/dist/scheduler/transitions.js.map +1 -0
  166. package/dist/scheduler/types.d.ts +146 -0
  167. package/dist/scheduler/types.d.ts.map +1 -0
  168. package/dist/{executors → scheduler}/types.js.map +1 -1
  169. package/dist/store/store.d.ts +390 -0
  170. package/dist/store/store.d.ts.map +1 -0
  171. package/dist/store/store.js +3053 -0
  172. package/dist/store/store.js.map +1 -0
  173. package/dist/visualization/overlay.d.ts +86 -0
  174. package/dist/visualization/overlay.d.ts.map +1 -0
  175. package/dist/visualization/overlay.js +161 -0
  176. package/dist/visualization/overlay.js.map +1 -0
  177. package/package.json +19 -37
  178. package/README.md +0 -7
  179. package/dist/agent-telemetry.d.ts +0 -56
  180. package/dist/agent-telemetry.d.ts.map +0 -1
  181. package/dist/agent-telemetry.js +0 -304
  182. package/dist/agent-telemetry.js.map +0 -1
  183. package/dist/artifacts.d.ts +0 -45
  184. package/dist/artifacts.d.ts.map +0 -1
  185. package/dist/artifacts.js +0 -163
  186. package/dist/artifacts.js.map +0 -1
  187. package/dist/attempt-artifacts.d.ts +0 -35
  188. package/dist/attempt-artifacts.d.ts.map +0 -1
  189. package/dist/attempt-artifacts.js +0 -90
  190. package/dist/attempt-artifacts.js.map +0 -1
  191. package/dist/client.d.ts +0 -82
  192. package/dist/client.d.ts.map +0 -1
  193. package/dist/client.js +0 -200
  194. package/dist/client.js.map +0 -1
  195. package/dist/evaluator.d.ts +0 -36
  196. package/dist/evaluator.d.ts.map +0 -1
  197. package/dist/evaluator.js +0 -101
  198. package/dist/evaluator.js.map +0 -1
  199. package/dist/executors/agent.d.ts +0 -103
  200. package/dist/executors/agent.d.ts.map +0 -1
  201. package/dist/executors/agent.js +0 -516
  202. package/dist/executors/agent.js.map +0 -1
  203. package/dist/executors/mock-program.d.ts +0 -26
  204. package/dist/executors/mock-program.d.ts.map +0 -1
  205. package/dist/executors/mock-program.js +0 -100
  206. package/dist/executors/mock-program.js.map +0 -1
  207. package/dist/executors/output-preview.d.ts +0 -2
  208. package/dist/executors/output-preview.d.ts.map +0 -1
  209. package/dist/executors/output-preview.js +0 -20
  210. package/dist/executors/output-preview.js.map +0 -1
  211. package/dist/executors/program.d.ts +0 -30
  212. package/dist/executors/program.d.ts.map +0 -1
  213. package/dist/executors/program.js +0 -230
  214. package/dist/executors/program.js.map +0 -1
  215. package/dist/executors/types.d.ts +0 -32
  216. package/dist/executors/types.d.ts.map +0 -1
  217. package/dist/fork.d.ts +0 -74
  218. package/dist/fork.d.ts.map +0 -1
  219. package/dist/fork.js +0 -278
  220. package/dist/fork.js.map +0 -1
  221. package/dist/hooks/payload.d.ts +0 -17
  222. package/dist/hooks/payload.d.ts.map +0 -1
  223. package/dist/hooks/payload.js +0 -45
  224. package/dist/hooks/payload.js.map +0 -1
  225. package/dist/interpreter.d.ts +0 -168
  226. package/dist/interpreter.d.ts.map +0 -1
  227. package/dist/interpreter.js +0 -1747
  228. package/dist/interpreter.js.map +0 -1
  229. package/dist/keys.d.ts +0 -77
  230. package/dist/keys.d.ts.map +0 -1
  231. package/dist/keys.js +0 -382
  232. package/dist/keys.js.map +0 -1
  233. package/dist/run-control.d.ts +0 -45
  234. package/dist/run-control.d.ts.map +0 -1
  235. package/dist/run-control.js +0 -255
  236. package/dist/run-control.js.map +0 -1
  237. package/dist/run-id.d.ts +0 -3
  238. package/dist/run-id.d.ts.map +0 -1
  239. package/dist/run-id.js +0 -10
  240. package/dist/run-id.js.map +0 -1
  241. package/dist/state-machine.d.ts +0 -31
  242. package/dist/state-machine.d.ts.map +0 -1
  243. package/dist/state-machine.js +0 -102
  244. package/dist/state-machine.js.map +0 -1
  245. package/dist/store.d.ts +0 -92
  246. package/dist/store.d.ts.map +0 -1
  247. package/dist/store.js +0 -420
  248. package/dist/store.js.map +0 -1
  249. package/dist/supervisor-app.d.ts +0 -27
  250. package/dist/supervisor-app.d.ts.map +0 -1
  251. package/dist/supervisor-app.js +0 -694
  252. package/dist/supervisor-app.js.map +0 -1
  253. package/dist/supervisor-discovery.d.ts +0 -18
  254. package/dist/supervisor-discovery.d.ts.map +0 -1
  255. package/dist/supervisor-discovery.js +0 -180
  256. package/dist/supervisor-discovery.js.map +0 -1
  257. package/dist/supervisor-entry.d.ts +0 -11
  258. package/dist/supervisor-entry.d.ts.map +0 -1
  259. package/dist/supervisor-entry.js +0 -50
  260. package/dist/supervisor-entry.js.map +0 -1
  261. package/dist/supervisor-lock.d.ts +0 -26
  262. package/dist/supervisor-lock.d.ts.map +0 -1
  263. package/dist/supervisor-lock.js +0 -49
  264. package/dist/supervisor-lock.js.map +0 -1
  265. package/dist/supervisor-runner.d.ts +0 -11
  266. package/dist/supervisor-runner.d.ts.map +0 -1
  267. package/dist/supervisor-runner.js +0 -128
  268. package/dist/supervisor-runner.js.map +0 -1
  269. package/dist/types.d.ts +0 -375
  270. package/dist/types.d.ts.map +0 -1
  271. package/dist/types.js +0 -7
  272. package/dist/types.js.map +0 -1
  273. package/dist/validate-input.d.ts +0 -27
  274. package/dist/validate-input.d.ts.map +0 -1
  275. package/dist/validate-input.js +0 -56
  276. package/dist/validate-input.js.map +0 -1
  277. package/dist/validate-signal.d.ts +0 -14
  278. package/dist/validate-signal.d.ts.map +0 -1
  279. package/dist/validate-signal.js +0 -31
  280. package/dist/validate-signal.js.map +0 -1
  281. package/dist/workflow-context.d.ts +0 -4
  282. package/dist/workflow-context.d.ts.map +0 -1
  283. package/dist/workflow-context.js +0 -11
  284. package/dist/workflow-context.js.map +0 -1
  285. package/dist/workflow-outputs.d.ts +0 -9
  286. package/dist/workflow-outputs.d.ts.map +0 -1
  287. package/dist/workflow-outputs.js +0 -60
  288. package/dist/workflow-outputs.js.map +0 -1
  289. /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"}
@@ -1,20 +1,22 @@
1
- import type { HookJournalEntry } from "@acpus/core";
2
- /**
3
- * Append-only per-Run journal of injector handler invocations.
4
- *
5
- * One line of JSON per handler call, storing the full resolved Agent prompt
6
- * prefix and Program env (not a boolean flag) for audit/observability. Events
7
- * are never journaled.
8
- */
9
- export declare class HookJournal {
10
- private readonly path;
11
- private sequence;
12
- constructor(runDir: string);
13
- /** Append one injector record, assigning the next monotonic sequence. */
14
- append(entry: Omit<HookJournalEntry, "sequence">): HookJournalEntry;
15
- /** Read all journal records in append order. */
16
- read(): HookJournalEntry[];
17
- /** Highest sequence already on disk (0 when the journal is empty). */
18
- private lastSequence;
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":"AAEA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAEpD;;;;;;GAMG;AACH,qBAAa,WAAW;IACtB,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAS;IAC9B,OAAO,CAAC,QAAQ,CAAS;IAEzB,YAAY,MAAM,EAAE,MAAM,EAGzB;IAED,yEAAyE;IACzE,MAAM,CAAC,KAAK,EAAE,IAAI,CAAC,gBAAgB,EAAE,UAAU,CAAC,GAAG,gBAAgB,CAKlE;IAED,gDAAgD;IAChD,IAAI,IAAI,gBAAgB,EAAE,CAczB;IAED,sEAAsE;IACtE,OAAO,CAAC,YAAY;CAIrB"}
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"}
@@ -1,49 +1,2 @@
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
- }
1
+ export {};
49
2
  //# sourceMappingURL=journal.js.map
@@ -1 +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"}
1
+ {"version":3,"file":"journal.js","sourceRoot":"","sources":["../../src/hooks/journal.ts"],"names":[],"mappings":""}
@@ -1,41 +1,35 @@
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 {
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
- 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;
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":"AAKA,OAAO,EAML,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;AASD,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"}
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"}