@cavelang/cli 0.27.14 → 0.29.0

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 (321) hide show
  1. package/Authors.md +5 -0
  2. package/License.md +6 -0
  3. package/README.md +122 -24
  4. package/dist/internal/act/action.d.ts +69 -0
  5. package/dist/internal/act/action.d.ts.map +1 -0
  6. package/dist/internal/act/action.js +201 -0
  7. package/dist/internal/act/action.js.map +1 -0
  8. package/dist/internal/act/declare.d.ts +102 -0
  9. package/dist/internal/act/declare.d.ts.map +1 -0
  10. package/dist/internal/act/declare.js +270 -0
  11. package/dist/internal/act/declare.js.map +1 -0
  12. package/dist/internal/act/engine.d.ts +103 -0
  13. package/dist/internal/act/engine.d.ts.map +1 -0
  14. package/dist/internal/act/engine.js +298 -0
  15. package/dist/internal/act/engine.js.map +1 -0
  16. package/dist/internal/act/index.d.ts +27 -0
  17. package/dist/internal/act/index.d.ts.map +1 -0
  18. package/dist/internal/act/index.js +25 -0
  19. package/dist/internal/act/index.js.map +1 -0
  20. package/dist/internal/automate/automation.d.ts +78 -0
  21. package/dist/internal/automate/automation.d.ts.map +1 -0
  22. package/dist/internal/automate/automation.js +135 -0
  23. package/dist/internal/automate/automation.js.map +1 -0
  24. package/dist/internal/automate/declare.d.ts +84 -0
  25. package/dist/internal/automate/declare.d.ts.map +1 -0
  26. package/dist/internal/automate/declare.js +233 -0
  27. package/dist/internal/automate/declare.js.map +1 -0
  28. package/dist/internal/automate/engine.d.ts +125 -0
  29. package/dist/internal/automate/engine.d.ts.map +1 -0
  30. package/dist/internal/automate/engine.js +388 -0
  31. package/dist/internal/automate/engine.js.map +1 -0
  32. package/dist/internal/automate/index.d.ts +28 -0
  33. package/dist/internal/automate/index.d.ts.map +1 -0
  34. package/dist/internal/automate/index.js +26 -0
  35. package/dist/internal/automate/index.js.map +1 -0
  36. package/dist/internal/automate/main.d.ts +26 -0
  37. package/dist/internal/automate/main.d.ts.map +1 -0
  38. package/dist/internal/automate/main.js +298 -0
  39. package/dist/internal/automate/main.js.map +1 -0
  40. package/dist/internal/connect/index.d.ts +26 -0
  41. package/dist/internal/connect/index.d.ts.map +1 -0
  42. package/dist/internal/connect/index.js +24 -0
  43. package/dist/internal/connect/index.js.map +1 -0
  44. package/dist/internal/connect/main.d.ts +23 -0
  45. package/dist/internal/connect/main.d.ts.map +1 -0
  46. package/dist/internal/connect/main.js +330 -0
  47. package/dist/internal/connect/main.js.map +1 -0
  48. package/dist/internal/connect/run.d.ts +85 -0
  49. package/dist/internal/connect/run.d.ts.map +1 -0
  50. package/dist/internal/connect/run.js +242 -0
  51. package/dist/internal/connect/run.js.map +1 -0
  52. package/dist/internal/connect/source.d.ts +44 -0
  53. package/dist/internal/connect/source.d.ts.map +1 -0
  54. package/dist/internal/connect/source.js +215 -0
  55. package/dist/internal/connect/source.js.map +1 -0
  56. package/dist/internal/connect/template.d.ts +69 -0
  57. package/dist/internal/connect/template.d.ts.map +1 -0
  58. package/dist/internal/connect/template.js +221 -0
  59. package/dist/internal/connect/template.js.map +1 -0
  60. package/dist/internal/eval/index.d.ts +28 -0
  61. package/dist/internal/eval/index.d.ts.map +1 -0
  62. package/dist/internal/eval/index.js +27 -0
  63. package/dist/internal/eval/index.js.map +1 -0
  64. package/dist/internal/eval/judge.d.ts +30 -0
  65. package/dist/internal/eval/judge.d.ts.map +1 -0
  66. package/dist/internal/eval/judge.js +101 -0
  67. package/dist/internal/eval/judge.js.map +1 -0
  68. package/dist/internal/eval/loop.d.ts +64 -0
  69. package/dist/internal/eval/loop.d.ts.map +1 -0
  70. package/dist/internal/eval/loop.js +123 -0
  71. package/dist/internal/eval/loop.js.map +1 -0
  72. package/dist/internal/eval/main.d.ts +17 -0
  73. package/dist/internal/eval/main.d.ts.map +1 -0
  74. package/dist/internal/eval/main.js +236 -0
  75. package/dist/internal/eval/main.js.map +1 -0
  76. package/dist/internal/eval/queries.d.ts +74 -0
  77. package/dist/internal/eval/queries.d.ts.map +1 -0
  78. package/dist/internal/eval/queries.js +161 -0
  79. package/dist/internal/eval/queries.js.map +1 -0
  80. package/dist/internal/eval/run.d.ts +143 -0
  81. package/dist/internal/eval/run.d.ts.map +1 -0
  82. package/dist/internal/eval/run.js +376 -0
  83. package/dist/internal/eval/run.js.map +1 -0
  84. package/dist/internal/eval/score.d.ts +81 -0
  85. package/dist/internal/eval/score.d.ts.map +1 -0
  86. package/dist/internal/eval/score.js +126 -0
  87. package/dist/internal/eval/score.js.map +1 -0
  88. package/dist/internal/eval/suite.d.ts +66 -0
  89. package/dist/internal/eval/suite.d.ts.map +1 -0
  90. package/dist/internal/eval/suite.js +130 -0
  91. package/dist/internal/eval/suite.js.map +1 -0
  92. package/dist/internal/ingest/context.d.ts +20 -0
  93. package/dist/internal/ingest/context.d.ts.map +1 -0
  94. package/dist/internal/ingest/context.js +59 -0
  95. package/dist/internal/ingest/context.js.map +1 -0
  96. package/dist/internal/ingest/files.d.ts +46 -0
  97. package/dist/internal/ingest/files.d.ts.map +1 -0
  98. package/dist/internal/ingest/files.js +115 -0
  99. package/dist/internal/ingest/files.js.map +1 -0
  100. package/dist/internal/ingest/index.d.ts +31 -0
  101. package/dist/internal/ingest/index.d.ts.map +1 -0
  102. package/dist/internal/ingest/index.js +29 -0
  103. package/dist/internal/ingest/index.js.map +1 -0
  104. package/dist/internal/ingest/main.d.ts +12 -0
  105. package/dist/internal/ingest/main.d.ts.map +1 -0
  106. package/dist/internal/ingest/main.js +180 -0
  107. package/dist/internal/ingest/main.js.map +1 -0
  108. package/dist/internal/ingest/prompt.d.ts +32 -0
  109. package/dist/internal/ingest/prompt.d.ts.map +1 -0
  110. package/dist/internal/ingest/prompt.js +75 -0
  111. package/dist/internal/ingest/prompt.js.map +1 -0
  112. package/dist/internal/ingest/run.d.ts +142 -0
  113. package/dist/internal/ingest/run.d.ts.map +1 -0
  114. package/dist/internal/ingest/run.js +350 -0
  115. package/dist/internal/ingest/run.js.map +1 -0
  116. package/dist/internal/ingest/web.d.ts +48 -0
  117. package/dist/internal/ingest/web.d.ts.map +1 -0
  118. package/dist/internal/ingest/web.js +140 -0
  119. package/dist/internal/ingest/web.js.map +1 -0
  120. package/dist/internal/loop/demo.d.ts +22 -0
  121. package/dist/internal/loop/demo.d.ts.map +1 -0
  122. package/dist/internal/loop/demo.js +67 -0
  123. package/dist/internal/loop/demo.js.map +1 -0
  124. package/dist/internal/loop/index.d.ts +20 -0
  125. package/dist/internal/loop/index.d.ts.map +1 -0
  126. package/dist/internal/loop/index.js +17 -0
  127. package/dist/internal/loop/index.js.map +1 -0
  128. package/dist/internal/loop/llm.d.ts +99 -0
  129. package/dist/internal/loop/llm.d.ts.map +1 -0
  130. package/dist/internal/loop/llm.js +231 -0
  131. package/dist/internal/loop/llm.js.map +1 -0
  132. package/dist/internal/loop/reconstruct.d.ts +87 -0
  133. package/dist/internal/loop/reconstruct.d.ts.map +1 -0
  134. package/dist/internal/loop/reconstruct.js +157 -0
  135. package/dist/internal/loop/reconstruct.js.map +1 -0
  136. package/dist/internal/loop/sqlite.d.ts +13 -0
  137. package/dist/internal/loop/sqlite.d.ts.map +1 -0
  138. package/dist/internal/loop/sqlite.js +33 -0
  139. package/dist/internal/loop/sqlite.js.map +1 -0
  140. package/dist/internal/loop/store.d.ts +50 -0
  141. package/dist/internal/loop/store.d.ts.map +1 -0
  142. package/dist/internal/loop/store.js +100 -0
  143. package/dist/internal/loop/store.js.map +1 -0
  144. package/dist/internal/mcp/bin.d.ts +7 -0
  145. package/dist/internal/mcp/bin.d.ts.map +1 -0
  146. package/dist/internal/mcp/bin.js +8 -0
  147. package/dist/internal/mcp/bin.js.map +1 -0
  148. package/dist/internal/mcp/index.d.ts +25 -0
  149. package/dist/internal/mcp/index.d.ts.map +1 -0
  150. package/dist/internal/mcp/index.js +23 -0
  151. package/dist/internal/mcp/index.js.map +1 -0
  152. package/dist/internal/mcp/main.d.ts +23 -0
  153. package/dist/internal/mcp/main.d.ts.map +1 -0
  154. package/dist/internal/mcp/main.js +156 -0
  155. package/dist/internal/mcp/main.js.map +1 -0
  156. package/dist/internal/mcp/server.d.ts +92 -0
  157. package/dist/internal/mcp/server.d.ts.map +1 -0
  158. package/dist/internal/mcp/server.js +251 -0
  159. package/dist/internal/mcp/server.js.map +1 -0
  160. package/dist/internal/mcp/tools.d.ts +91 -0
  161. package/dist/internal/mcp/tools.d.ts.map +1 -0
  162. package/dist/internal/mcp/tools.js +584 -0
  163. package/dist/internal/mcp/tools.js.map +1 -0
  164. package/dist/internal/rules/declare.d.ts +58 -0
  165. package/dist/internal/rules/declare.d.ts.map +1 -0
  166. package/dist/internal/rules/declare.js +152 -0
  167. package/dist/internal/rules/declare.js.map +1 -0
  168. package/dist/internal/rules/engine.d.ts +125 -0
  169. package/dist/internal/rules/engine.d.ts.map +1 -0
  170. package/dist/internal/rules/engine.js +575 -0
  171. package/dist/internal/rules/engine.js.map +1 -0
  172. package/dist/internal/rules/index.d.ts +23 -0
  173. package/dist/internal/rules/index.d.ts.map +1 -0
  174. package/dist/internal/rules/index.js +21 -0
  175. package/dist/internal/rules/index.js.map +1 -0
  176. package/dist/internal/rules/rule.d.ts +88 -0
  177. package/dist/internal/rules/rule.d.ts.map +1 -0
  178. package/dist/internal/rules/rule.js +221 -0
  179. package/dist/internal/rules/rule.js.map +1 -0
  180. package/dist/internal/shape/check.d.ts +118 -0
  181. package/dist/internal/shape/check.d.ts.map +1 -0
  182. package/dist/internal/shape/check.js +331 -0
  183. package/dist/internal/shape/check.js.map +1 -0
  184. package/dist/internal/shape/client.d.ts +31 -0
  185. package/dist/internal/shape/client.d.ts.map +1 -0
  186. package/dist/internal/shape/client.js +170 -0
  187. package/dist/internal/shape/client.js.map +1 -0
  188. package/dist/internal/shape/gate.d.ts +33 -0
  189. package/dist/internal/shape/gate.d.ts.map +1 -0
  190. package/dist/internal/shape/gate.js +0 -0
  191. package/dist/internal/shape/gate.js.map +1 -0
  192. package/dist/internal/shape/index.d.ts +27 -0
  193. package/dist/internal/shape/index.d.ts.map +1 -0
  194. package/dist/internal/shape/index.js +23 -0
  195. package/dist/internal/shape/index.js.map +1 -0
  196. package/dist/internal/shape/suggest.d.ts +82 -0
  197. package/dist/internal/shape/suggest.d.ts.map +1 -0
  198. package/dist/internal/shape/suggest.js +374 -0
  199. package/dist/internal/shape/suggest.js.map +1 -0
  200. package/dist/internal/sync/index.d.ts +22 -0
  201. package/dist/internal/sync/index.d.ts.map +1 -0
  202. package/dist/internal/sync/index.js +21 -0
  203. package/dist/internal/sync/index.js.map +1 -0
  204. package/dist/internal/sync/sync.d.ts +95 -0
  205. package/dist/internal/sync/sync.d.ts.map +1 -0
  206. package/dist/internal/sync/sync.js +342 -0
  207. package/dist/internal/sync/sync.js.map +1 -0
  208. package/dist/internal/view/api.d.ts +196 -0
  209. package/dist/internal/view/api.d.ts.map +1 -0
  210. package/dist/internal/view/api.js +189 -0
  211. package/dist/internal/view/api.js.map +1 -0
  212. package/dist/internal/view/index.d.ts +33 -0
  213. package/dist/internal/view/index.d.ts.map +1 -0
  214. package/dist/internal/view/index.js +30 -0
  215. package/dist/internal/view/index.js.map +1 -0
  216. package/dist/internal/view/main.d.ts +11 -0
  217. package/dist/internal/view/main.d.ts.map +1 -0
  218. package/dist/internal/view/main.js +98 -0
  219. package/dist/internal/view/main.js.map +1 -0
  220. package/dist/internal/view/page.d.ts +14 -0
  221. package/dist/internal/view/page.d.ts.map +1 -0
  222. package/dist/internal/view/page.js +370 -0
  223. package/dist/internal/view/page.js.map +1 -0
  224. package/dist/internal/view/report.d.ts +52 -0
  225. package/dist/internal/view/report.d.ts.map +1 -0
  226. package/dist/internal/view/report.js +367 -0
  227. package/dist/internal/view/report.js.map +1 -0
  228. package/dist/internal/view/scope.d.ts +11 -0
  229. package/dist/internal/view/scope.d.ts.map +1 -0
  230. package/dist/internal/view/scope.js +41 -0
  231. package/dist/internal/view/scope.js.map +1 -0
  232. package/dist/internal/view/server.d.ts +35 -0
  233. package/dist/internal/view/server.d.ts.map +1 -0
  234. package/dist/internal/view/server.js +141 -0
  235. package/dist/internal/view/server.js.map +1 -0
  236. package/dist/src/act.d.ts +3 -0
  237. package/dist/src/act.d.ts.map +1 -0
  238. package/dist/src/act.js +3 -0
  239. package/dist/src/act.js.map +1 -0
  240. package/dist/src/automate.d.ts +3 -0
  241. package/dist/src/automate.d.ts.map +1 -0
  242. package/dist/src/automate.js +3 -0
  243. package/dist/src/automate.js.map +1 -0
  244. package/dist/src/cli.d.ts +24 -17
  245. package/dist/src/cli.d.ts.map +1 -1
  246. package/dist/src/cli.js +408 -107
  247. package/dist/src/cli.js.map +1 -1
  248. package/dist/src/commands.d.ts +104 -0
  249. package/dist/src/commands.d.ts.map +1 -0
  250. package/dist/src/commands.js +33 -0
  251. package/dist/src/commands.js.map +1 -0
  252. package/dist/src/connect.d.ts +3 -0
  253. package/dist/src/connect.d.ts.map +1 -0
  254. package/dist/src/connect.js +3 -0
  255. package/dist/src/connect.js.map +1 -0
  256. package/dist/src/dispatch.d.ts +14 -0
  257. package/dist/src/dispatch.d.ts.map +1 -0
  258. package/dist/src/dispatch.js +116 -0
  259. package/dist/src/dispatch.js.map +1 -0
  260. package/dist/src/doctor.d.ts +45 -0
  261. package/dist/src/doctor.d.ts.map +1 -0
  262. package/dist/src/doctor.js +284 -0
  263. package/dist/src/doctor.js.map +1 -0
  264. package/dist/src/eval.d.ts +3 -0
  265. package/dist/src/eval.d.ts.map +1 -0
  266. package/dist/src/eval.js +3 -0
  267. package/dist/src/eval.js.map +1 -0
  268. package/dist/src/index.d.ts +9 -2
  269. package/dist/src/index.d.ts.map +1 -1
  270. package/dist/src/index.js +6 -2
  271. package/dist/src/index.js.map +1 -1
  272. package/dist/src/ingest.d.ts +3 -0
  273. package/dist/src/ingest.d.ts.map +1 -0
  274. package/dist/src/ingest.js +3 -0
  275. package/dist/src/ingest.js.map +1 -0
  276. package/dist/src/loop.d.ts +3 -0
  277. package/dist/src/loop.d.ts.map +1 -0
  278. package/dist/src/loop.js +3 -0
  279. package/dist/src/loop.js.map +1 -0
  280. package/dist/src/main.d.ts +1 -1
  281. package/dist/src/main.d.ts.map +1 -1
  282. package/dist/src/main.js +3 -75
  283. package/dist/src/main.js.map +1 -1
  284. package/dist/src/mcp.d.ts +3 -0
  285. package/dist/src/mcp.d.ts.map +1 -0
  286. package/dist/src/mcp.js +3 -0
  287. package/dist/src/mcp.js.map +1 -0
  288. package/dist/src/rules.d.ts +3 -0
  289. package/dist/src/rules.d.ts.map +1 -0
  290. package/dist/src/rules.js +3 -0
  291. package/dist/src/rules.js.map +1 -0
  292. package/dist/src/shape.d.ts +3 -0
  293. package/dist/src/shape.d.ts.map +1 -0
  294. package/dist/src/shape.js +3 -0
  295. package/dist/src/shape.js.map +1 -0
  296. package/dist/src/sync.d.ts +3 -0
  297. package/dist/src/sync.d.ts.map +1 -0
  298. package/dist/src/sync.js +3 -0
  299. package/dist/src/sync.js.map +1 -0
  300. package/dist/src/view.d.ts +3 -0
  301. package/dist/src/view.d.ts.map +1 -0
  302. package/dist/src/view.js +3 -0
  303. package/dist/src/view.js.map +1 -0
  304. package/package.json +81 -21
  305. package/src/act.ts +2 -0
  306. package/src/automate.ts +2 -0
  307. package/src/cli.ts +416 -102
  308. package/src/commands.ts +48 -0
  309. package/src/connect.ts +2 -0
  310. package/src/dispatch.ts +141 -0
  311. package/src/doctor.ts +370 -0
  312. package/src/eval.ts +2 -0
  313. package/src/index.ts +9 -2
  314. package/src/ingest.ts +2 -0
  315. package/src/loop.ts +2 -0
  316. package/src/main.ts +3 -66
  317. package/src/mcp.ts +2 -0
  318. package/src/rules.ts +2 -0
  319. package/src/shape.ts +2 -0
  320. package/src/sync.ts +2 -0
  321. package/src/view.ts +2 -0
@@ -0,0 +1,388 @@
1
+ /**
2
+ * The settle engine (spec §29.2–§29.4) — evaluates every current
3
+ * automation against the store's change feed and runs the steps of the
4
+ * solutions that fire.
5
+ *
6
+ * - Triggers join exactly like rules and actions (§24.2's left-to-right
7
+ * join over current positive beliefs); a solution **fires** only when
8
+ * it cites at least one *event row* — a premise row newer than the
9
+ * automation's watermark that is neither engine bookkeeping
10
+ * (actors `cave-automate` / `cave-derive` / `cave-act`) nor the
11
+ * automation's own lifecycle run (`automation/<name>`, or `action/<x>`
12
+ * for its action steps). An automation is deaf to its own echo; other
13
+ * automations' output triggers normally, which is how automations chain.
14
+ * A transitive (`VERB+`) premise cites its supporting edge rows (the
15
+ * query layer's `support` option), so a new edge is an event exactly
16
+ * for the solutions whose connection it backs — with the same
17
+ * exclusions applied per edge row.
18
+ * - An automation arms at the later of its stored watermark and its
19
+ * declaration row's tx — it watches from the moment it is declared
20
+ * (§29.2), and a watermark left current by a retracted incarnation
21
+ * never lets a re-declaration fire over rows recorded in between.
22
+ * - Firing records the batch *before* acting on it (§29.3): one
23
+ * `automate-watermark` append (the firing log), then the steps per
24
+ * solution in declaration order — re-runs never re-notify the world.
25
+ * - One `settle` call is a cycle: passes run derivation (§24, opt-out)
26
+ * then every automation, until nothing fires — steps append, the next
27
+ * pass sees the new rows, and idempotent write paths make chains
28
+ * converge (§29.4).
29
+ */
30
+ import { spawnSync } from 'node:child_process';
31
+ import { Context, Key } from '@cavelang/core';
32
+ import * as Canonical from '@cavelang/canonical';
33
+ import { act, loadAction, shellQuote } from '@cavelang/cli/act';
34
+ import { match } from '@cavelang/query';
35
+ import { derive, satisfies, specialize } from '@cavelang/cli/rules';
36
+ import { Row } from '@cavelang/store';
37
+ import * as Automation from "./automation.js";
38
+ import { bookkeepingKey, loadAutomations, provenanceContext } from "./declare.js";
39
+ /** Attribute of per-automation watermark claims (spec §29.2). */
40
+ export const watermarkAttribute = 'automate-watermark';
41
+ export const defaultMaxPasses = 20;
42
+ export const defaultAgentTimeoutSeconds = 120;
43
+ /** Engine bookkeeping sources — never event rows (spec §29.2). */
44
+ const infrastructureActors = ['cave-automate', 'cave-derive', 'cave-act'];
45
+ /** `true` when the report contains a failed step or a parse problem. */
46
+ export const settled = (report) => report.problems.length === 0 &&
47
+ report.automations.every(automation => automation.firings.every(firing => firing.steps.every(step => step.outcome !== 'failed')));
48
+ const maxTx = (store) => store.db.prepare('SELECT MAX(tx) AS t FROM cave_claim').get().t ?? undefined;
49
+ /** The §24.2 join with no pre-bound parameters — the trigger evaluation. */
50
+ const evaluateTrigger = (store, automation, aliases) => {
51
+ let solutions = [{ bindings: {}, rows: [] }];
52
+ for (const premise of automation.premises) {
53
+ if (premise.kind === 'constraint') {
54
+ solutions = solutions.filter(solution => satisfies(solution.bindings[premise.variable], premise.op, premise.value));
55
+ }
56
+ else {
57
+ solutions = solutions.flatMap(solution => {
58
+ const pattern = specialize(premise.pattern, solution.bindings);
59
+ if (pattern === undefined) {
60
+ return [];
61
+ }
62
+ return match(store, pattern, { aliases, support: true }).map(found => ({
63
+ bindings: { ...solution.bindings, ...found.bindings },
64
+ rows: found.row !== undefined ? [...solution.rows, found.row] :
65
+ found.rows !== undefined ? [...solution.rows, ...found.rows] :
66
+ solution.rows
67
+ }));
68
+ });
69
+ }
70
+ if (solutions.length === 0) {
71
+ break;
72
+ }
73
+ }
74
+ return solutions;
75
+ };
76
+ /**
77
+ * Sources whose rows an automation must not treat as events — its own
78
+ * agent replies and the effects of its own action steps (spec §29.2).
79
+ */
80
+ const echoRuns = (automation) => [
81
+ automation.subject,
82
+ ...automation.steps.flatMap(step => step.kind === 'action' ? [`action/${step.name}`] : [])
83
+ ];
84
+ /**
85
+ * Raw text of a stored binding — literal delimiters stripped, so values
86
+ * read naturally in prompts and hook placeholders and round-trip through
87
+ * the §25.2 argument formatting.
88
+ */
89
+ const rawBinding = (bound) => Row.parseValue(bound).raw;
90
+ /** Substitutes bound `?var`s into a prompt template, longest name first. */
91
+ export const substitutePrompt = (template, bindings) => {
92
+ let text = template;
93
+ for (const name of Object.keys(bindings).sort((a, b) => b.length - a.length)) {
94
+ const escaped = name.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
95
+ text = text.replace(new RegExp(`\\?${escaped}(?![A-Za-z0-9_-])`, 'g'), rawBinding(bindings[name]));
96
+ }
97
+ return text;
98
+ };
99
+ /**
100
+ * Substitutes `{automation}` and `{<var>}` placeholders in one pass —
101
+ * every value shell-quoted, never spliced raw (§25.4's rule); unknown
102
+ * placeholders stay.
103
+ */
104
+ export const substituteHook = (template, automation, bindings) => template.replace(/\{([A-Za-z][A-Za-z0-9_-]*)\}/g, (whole, name) => name === 'automation' ? shellQuote(automation) :
105
+ bindings[name] !== undefined ? shellQuote(rawBinding(bindings[name])) :
106
+ whole);
107
+ /** Canonical lines of a solution's premise rows, deduplicated, join order. */
108
+ const solutionLines = (store, solution) => {
109
+ const seen = new Set();
110
+ const lines = [];
111
+ for (const row of solution.rows) {
112
+ if (!seen.has(row.id)) {
113
+ seen.add(row.id);
114
+ lines.push(Canonical.emitClaim(store.toClaim(row)));
115
+ }
116
+ }
117
+ return lines;
118
+ };
119
+ /** The engine-built prompt around one instantiated template (spec §29.3). */
120
+ export const buildPrompt = (automation, description, instruction, claims) => `You are the agent step of the CAVE automation "${automation.name}"${description === undefined ? '' : ` — ${description}`}.
121
+
122
+ Instruction:
123
+ ${instruction}
124
+
125
+ Triggering claims (current beliefs matched by the trigger):
126
+ \`\`\`cave
127
+ ${claims.join('\n')}
128
+ \`\`\`
129
+
130
+ Reply with CAVE claim lines to record in the store — they are appended
131
+ stamped @src:${automation.subject}, and a line equal to current belief is
132
+ skipped. Reply with nothing to record nothing. Output only CAVE lines.`;
133
+ const runAction = (store, step, solution, options) => {
134
+ const resolved = loadAction(store, step.name);
135
+ if (resolved === undefined) {
136
+ return { step: step.text, kind: 'action', outcome: 'failed', detail: `no current action "action/${step.name}" — declare it first (spec §25.1)` };
137
+ }
138
+ if (resolved.loaded === undefined) {
139
+ return { step: step.text, kind: 'action', outcome: 'failed', detail: `the declaration of "action/${step.name}" does not parse: ${resolved.problems.join('; ')}` };
140
+ }
141
+ const args = {};
142
+ for (const param of resolved.loaded.action.params) {
143
+ const bound = solution.bindings[param];
144
+ if (bound === undefined) {
145
+ return { step: step.text, kind: 'action', outcome: 'failed', detail: `the trigger did not bind ?${param} — action parameters bind from same-named trigger variables (spec §29.3)` };
146
+ }
147
+ args[param] = rawBinding(bound);
148
+ }
149
+ const report = act(store, step.name, args, {
150
+ check: options.check !== false,
151
+ aliases: options.aliases === true,
152
+ ...options.hooks === undefined ? {} : { hooks: options.hooks },
153
+ ...options.cwd === undefined ? {} : { cwd: options.cwd },
154
+ ...options.hookTimeoutSeconds === undefined ? {} : { hookTimeoutSeconds: options.hookTimeoutSeconds }
155
+ });
156
+ if (!report.ok) {
157
+ return { step: step.text, kind: 'action', outcome: 'failed', detail: report.error };
158
+ }
159
+ const hook = report.hook !== undefined && report.hook.error !== undefined ? `; hook ${report.hook.name}: ${report.hook.error}` : '';
160
+ return {
161
+ step: step.text,
162
+ kind: 'action',
163
+ outcome: hook === '' ? 'ok' : 'failed',
164
+ appended: report.appended + report.updated,
165
+ detail: `+${report.appended} appended, ${report.updated} updated, ${report.unchanged} unchanged${hook}`
166
+ };
167
+ };
168
+ const runHook = (name, automation, solution, lines, options) => {
169
+ const step = `hook/${name}`;
170
+ const template = options.hooks?.[name];
171
+ if (template === undefined) {
172
+ return { step, kind: 'hook', outcome: 'not-configured', detail: 'hook not configured (spec §25.4)' };
173
+ }
174
+ const command = substituteHook(template, automation.name, solution.bindings);
175
+ const result = spawnSync(command, {
176
+ shell: true,
177
+ encoding: 'utf8',
178
+ input: `${lines.join('\n')}\n`,
179
+ timeout: (options.hookTimeoutSeconds ?? 600) * 1000,
180
+ ...options.cwd === undefined ? {} : { cwd: options.cwd }
181
+ });
182
+ const output = `${result.stdout ?? ''}${result.stderr ?? ''}`.trim();
183
+ // A hook may exit without reading its stdin (e.g. `true`): the input
184
+ // pipe then reports EPIPE even though the hook ran and exited cleanly,
185
+ // so only non-EPIPE spawn errors fail the step — the exit status still
186
+ // arrives and is judged as usual.
187
+ const spawnFailure = result.error !== undefined && result.error.code !== 'EPIPE' ?
188
+ result.error.message :
189
+ undefined;
190
+ const error = spawnFailure !== undefined ? spawnFailure :
191
+ result.status !== 0 ? `hook exited with ${result.status ?? `signal ${result.signal}`}` :
192
+ undefined;
193
+ const detail = error !== undefined ? `${error}${output === '' ? '' : ` — ${output}`}` :
194
+ output === '' ? undefined : output;
195
+ return {
196
+ step,
197
+ kind: 'hook',
198
+ outcome: error === undefined ? 'ok' : 'failed',
199
+ ...detail === undefined ? {} : { detail }
200
+ };
201
+ };
202
+ /**
203
+ * Appends an agent reply (spec §29.3): lenient parse, `@src:automation/<name>`
204
+ * stamp, and the §24.4 idempotency convention per claim — a reply claim
205
+ * equal to its current belief appends nothing (claims cited by qualifier
206
+ * edges are kept, so reply structure survives).
207
+ */
208
+ export const appendReply = (store, automation, reply) => {
209
+ const result = Canonical.canonicalizeText(reply, store.registry());
210
+ const problems = result.problems.map(problem => `reply line ${problem.line}: ${problem.message}`);
211
+ const referenced = new Set();
212
+ for (const edge of result.edges) {
213
+ referenced.add(edge.parent);
214
+ referenced.add(edge.child);
215
+ }
216
+ const keep = [];
217
+ result.claims.forEach((entry, index) => {
218
+ const stamp = Context.source(automation.subject);
219
+ const stamped = entry.claim.contexts.includes(stamp) ?
220
+ entry.claim :
221
+ { ...entry.claim, contexts: [...entry.claim.contexts, stamp] };
222
+ const current = store.currentBelief(Key.of(stamped));
223
+ const columns = Row.toColumns(entry.claim);
224
+ const unchanged = current !== undefined && Math.abs(current.conf - entry.claim.conf) < 1e-9 &&
225
+ current.value_text === columns.valueText;
226
+ if (!unchanged || referenced.has(index)) {
227
+ keep.push(index);
228
+ }
229
+ });
230
+ if (keep.length === 0) {
231
+ return { appended: 0, problems };
232
+ }
233
+ const remap = new Map(keep.map((old, at) => [old, at]));
234
+ const inserted = store.insertResult({
235
+ claims: keep.map(index => result.claims[index]),
236
+ edges: result.edges.map(edge => ({ parent: remap.get(edge.parent), role: edge.role, child: remap.get(edge.child) })),
237
+ registry: result.registry,
238
+ problems: []
239
+ }, { source: automation.subject, lifecycle: true });
240
+ return { appended: inserted.ids.length, problems };
241
+ };
242
+ const runPrompt = async (store, step, automation, description, solution, lines, options) => {
243
+ if (options.complete === undefined) {
244
+ return { step: step.text, kind: 'prompt', outcome: 'not-configured', detail: 'no agent configured (--agent, spec §29.3)' };
245
+ }
246
+ const prompt = buildPrompt(automation, description, substitutePrompt(step.template, solution.bindings), lines);
247
+ let reply;
248
+ try {
249
+ reply = await options.complete(prompt);
250
+ }
251
+ catch (error) {
252
+ return { step: step.text, kind: 'prompt', outcome: 'failed', detail: error instanceof Error ? error.message : String(error) };
253
+ }
254
+ if (reply.trim() === '') {
255
+ return { step: step.text, kind: 'prompt', outcome: 'ok', appended: 0, detail: 'empty reply — nothing recorded' };
256
+ }
257
+ const { appended, problems } = appendReply(store, automation, reply);
258
+ return {
259
+ step: step.text,
260
+ kind: 'prompt',
261
+ outcome: 'ok',
262
+ appended,
263
+ detail: `+${appended} claim(s)${problems.length === 0 ? '' : `; ${problems.join('; ')}`}`
264
+ };
265
+ };
266
+ /**
267
+ * One settle cycle (spec §29.4): passes of derivation + trigger
268
+ * evaluation until nothing fires, bounded by `maxPasses`. Firing appends
269
+ * the watermark before running steps (§29.3); step failures are reported
270
+ * in the outcome and never abort the cycle.
271
+ */
272
+ export const settle = async (store, options = {}) => {
273
+ const aliases = options.aliases === true;
274
+ const maxPasses = options.maxPasses ?? defaultMaxPasses;
275
+ const outcomes = new Map();
276
+ const problems = new Map();
277
+ const notes = [];
278
+ const deriveTotals = { passes: 0, appended: 0, updated: 0, retracted: 0, unchanged: 0 };
279
+ const anyRowSince = store.db.prepare('SELECT 1 AS hit FROM cave_claim WHERE tx > ? LIMIT 1');
280
+ let passes = 0;
281
+ let progress = true;
282
+ while (progress && passes < maxPasses) {
283
+ passes += 1;
284
+ progress = false;
285
+ if (options.derive !== false) {
286
+ const report = derive(store, { aliases });
287
+ deriveTotals.passes += report.passes;
288
+ deriveTotals.appended += report.appended;
289
+ deriveTotals.updated += report.updated;
290
+ deriveTotals.retracted += report.retracted;
291
+ deriveTotals.unchanged += report.unchanged;
292
+ for (const problem of report.problems) {
293
+ const note = `${problem.subject}: ${problem.problems.join('; ')}`;
294
+ if (!notes.includes(note)) {
295
+ notes.push(note);
296
+ }
297
+ }
298
+ if (report.appended + report.updated + report.retracted > 0) {
299
+ progress = true;
300
+ }
301
+ }
302
+ const loaded = loadAutomations(store);
303
+ for (const problem of loaded.problems) {
304
+ problems.set(problem.subject, problem);
305
+ }
306
+ for (const entry of loaded.loaded) {
307
+ const { automation, row, description } = entry;
308
+ let outcome = outcomes.get(automation.subject);
309
+ if (outcome === undefined) {
310
+ outcome = {
311
+ subject: automation.subject,
312
+ name: automation.name,
313
+ text: automation.text,
314
+ ...description === undefined ? {} : { description },
315
+ evaluations: 0,
316
+ fired: 0,
317
+ firings: []
318
+ };
319
+ outcomes.set(automation.subject, outcome);
320
+ }
321
+ // Arming (spec §29.2): the later of the stored watermark and the
322
+ // declaration row's tx. Retracting an automation leaves its
323
+ // watermark claim current, so a re-declared automation would
324
+ // otherwise arm at the old mark and fire once over every row
325
+ // recorded while it was retracted (BUGS.md automate-stale-watermark)
326
+ // — the dual of the rules engine's §24.4 staleness rule: derivation
327
+ // must re-fire over pre-declaration rows, an automation must not.
328
+ const stored = store.currentBelief(bookkeepingKey(automation.subject, watermarkAttribute));
329
+ const mark = stored !== undefined && stored.conf > 0 &&
330
+ stored.value_text !== null && stored.value_text > row.tx ?
331
+ stored.value_text :
332
+ row.tx;
333
+ if (anyRowSince.get(mark) === undefined) {
334
+ continue;
335
+ }
336
+ outcome.evaluations += 1;
337
+ const solutions = evaluateTrigger(store, automation, aliases);
338
+ const excludedRuns = new Set(echoRuns(automation));
339
+ const isEvent = (premiseRow) => {
340
+ const provenance = store.provenanceOf(premiseRow);
341
+ return premiseRow.tx > mark &&
342
+ !provenance.actors.some(actor => infrastructureActors.includes(actor)) &&
343
+ !provenance.runs.some(run => excludedRuns.has(run));
344
+ };
345
+ const firing = solutions.filter(solution => solution.rows.some(isEvent));
346
+ if (firing.length === 0) {
347
+ continue;
348
+ }
349
+ // Record the batch before acting on it (spec §29.3): the watermark
350
+ // append is the firing log, and a re-run never re-notifies.
351
+ const boundary = maxTx(store);
352
+ const stepCount = firing.length * automation.steps.length;
353
+ store.ingest(`${automation.subject} HAS ${watermarkAttribute}: ${boundary} @${provenanceContext} ` +
354
+ `; fired ${firing.length} solution(s), ${stepCount} step(s)`);
355
+ progress = true;
356
+ outcome.fired += firing.length;
357
+ for (const solution of firing) {
358
+ const lines = solutionLines(store, solution);
359
+ const firingOutcome = { bindings: solution.bindings, steps: [] };
360
+ outcome.firings.push(firingOutcome);
361
+ for (const step of automation.steps) {
362
+ switch (step.kind) {
363
+ case 'action':
364
+ firingOutcome.steps.push(runAction(store, step, solution, options));
365
+ break;
366
+ case 'hook':
367
+ firingOutcome.steps.push(runHook(step.name, automation, solution, lines, options));
368
+ break;
369
+ case 'prompt':
370
+ firingOutcome.steps.push(await runPrompt(store, step, automation, description, solution, lines, options));
371
+ break;
372
+ }
373
+ }
374
+ }
375
+ }
376
+ }
377
+ if (passes >= maxPasses && progress) {
378
+ notes.push(`stopped at ${maxPasses} passes before settling — re-run to continue, or raise maxPasses (spec §29.4)`);
379
+ }
380
+ return {
381
+ passes,
382
+ automations: [...outcomes.values()],
383
+ problems: [...problems.values()],
384
+ ...options.derive === false ? {} : { derive: deriveTotals },
385
+ notes
386
+ };
387
+ };
388
+ //# sourceMappingURL=engine.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"engine.js","sourceRoot":"","sources":["../../src/engine.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAA;AAC9C,OAAO,EAAE,OAAO,EAAE,GAAG,EAAE,MAAM,gBAAgB,CAAA;AAC7C,OAAO,KAAK,SAAS,MAAM,qBAAqB,CAAA;AAChD,OAAO,EAAE,GAAG,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,eAAe,CAAA;AAC3D,OAAO,EAAE,KAAK,EAAE,MAAM,iBAAiB,CAAA;AACvC,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAA;AAC/D,OAAO,EAAE,GAAG,EAAc,MAAM,iBAAiB,CAAA;AACjD,OAAO,KAAK,UAAU,MAAM,iBAAiB,CAAA;AAC7C,OAAO,EAAE,cAAc,EAAE,eAAe,EAAE,iBAAiB,EAAoB,MAAM,cAAc,CAAA;AAEnG,iEAAiE;AACjE,MAAM,CAAC,MAAM,kBAAkB,GAAG,oBAAoB,CAAA;AAEtD,MAAM,CAAC,MAAM,gBAAgB,GAAG,EAAE,CAAA;AAElC,MAAM,CAAC,MAAM,0BAA0B,GAAG,GAAG,CAAA;AAE7C,kEAAkE;AAClE,MAAM,oBAAoB,GAAsB,CAAC,eAAe,EAAE,aAAa,EAAE,UAAU,CAAC,CAAA;AAmE5F,wEAAwE;AACxE,MAAM,CAAC,MAAM,OAAO,GAAG,CAAC,MAAoB,EAAW,EAAE,CACvD,MAAM,CAAC,QAAQ,CAAC,MAAM,KAAK,CAAC;IAC5B,MAAM,CAAC,WAAW,CAAC,KAAK,CAAC,UAAU,CAAC,EAAE,CACpC,UAAU,CAAC,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAA;AAO9F,MAAM,KAAK,GAAG,CAAC,KAAY,EAAsB,EAAE,CAChD,KAAK,CAAC,EAAE,CAAC,OAAO,CAAC,qCAAqC,CAAC,CAAC,GAAG,EAA2B,CAAC,CAAC,IAAI,SAAS,CAAA;AAExG,4EAA4E;AAC5E,MAAM,eAAe,GAAG,CAAC,KAAY,EAAE,UAAwB,EAAE,OAAgB,EAAc,EAAE;IAC/F,IAAI,SAAS,GAAe,CAAC,EAAE,QAAQ,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,CAAA;IACxD,KAAK,MAAM,OAAO,IAAI,UAAU,CAAC,QAAQ,EAAE,CAAC;QAC1C,IAAI,OAAO,CAAC,IAAI,KAAK,YAAY,EAAE,CAAC;YAClC,SAAS,GAAG,SAAS,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,CACtC,SAAS,CAAC,QAAQ,CAAC,QAAQ,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,OAAO,CAAC,EAAE,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC,CAAA;QAC9E,CAAC;aAAM,CAAC;YACN,SAAS,GAAG,SAAS,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE;gBACvC,MAAM,OAAO,GAAG,UAAU,CAAC,OAAO,CAAC,OAAO,EAAE,QAAQ,CAAC,QAAQ,CAAC,CAAA;gBAC9D,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;oBAC1B,OAAO,EAAE,CAAA;gBACX,CAAC;gBACD,OAAO,KAAK,CAAC,KAAK,EAAE,OAAO,EAAE,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;oBACrE,QAAQ,EAAE,EAAE,GAAG,QAAQ,CAAC,QAAQ,EAAE,GAAG,KAAK,CAAC,QAAQ,EAAE;oBACrD,IAAI,EACF,KAAK,CAAC,GAAG,KAAK,SAAS,CAAC,CAAC,CAAC,CAAC,GAAG,QAAQ,CAAC,IAAI,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC;wBACzD,KAAK,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,CAAC,GAAG,QAAQ,CAAC,IAAI,EAAE,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC;4BAC9D,QAAQ,CAAC,IAAI;iBAChB,CAAC,CAAC,CAAA;YACL,CAAC,CAAC,CAAA;QACJ,CAAC;QACD,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC3B,MAAK;QACP,CAAC;IACH,CAAC;IACD,OAAO,SAAS,CAAA;AAClB,CAAC,CAAA;AAED;;;GAGG;AACH,MAAM,QAAQ,GAAG,CAAC,UAAwB,EAAY,EAAE,CAAC;IACvD,UAAU,CAAC,OAAO;IAClB,GAAG,UAAU,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CACjC,IAAI,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,UAAU,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;CACzD,CAAA;AAED;;;;GAIG;AACH,MAAM,UAAU,GAAG,CAAC,KAAa,EAAU,EAAE,CAC3C,GAAG,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,GAAG,CAAA;AAE3B,4EAA4E;AAC5E,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,QAAgB,EAAE,QAA0C,EAAU,EAAE;IACvG,IAAI,IAAI,GAAG,QAAQ,CAAA;IACnB,KAAK,MAAM,IAAI,IAAI,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC;QAC7E,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,qBAAqB,EAAE,MAAM,CAAC,CAAA;QAC3D,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,MAAM,CAAC,MAAM,OAAO,mBAAmB,EAAE,GAAG,CAAC,EAAE,UAAU,CAAC,QAAQ,CAAC,IAAI,CAAE,CAAC,CAAC,CAAA;IACrG,CAAC;IACD,OAAO,IAAI,CAAA;AACb,CAAC,CAAA;AAED;;;;GAIG;AACH,MAAM,CAAC,MAAM,cAAc,GAAG,CAC5B,QAAgB,EAChB,UAAkB,EAClB,QAA0C,EAClC,EAAE,CACV,QAAQ,CAAC,OAAO,CAAC,+BAA+B,EAAE,CAAC,KAAK,EAAE,IAAY,EAAE,EAAE,CACxE,IAAI,KAAK,YAAY,CAAC,CAAC,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC,CAAC;IAChD,QAAQ,CAAC,IAAI,CAAC,KAAK,SAAS,CAAC,CAAC,CAAC,UAAU,CAAC,UAAU,CAAC,QAAQ,CAAC,IAAI,CAAE,CAAC,CAAC,CAAC,CAAC;QACxE,KAAK,CAAC,CAAA;AAEV,8EAA8E;AAC9E,MAAM,aAAa,GAAG,CAAC,KAAY,EAAE,QAAkB,EAAY,EAAE;IACnE,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAA;IAC9B,MAAM,KAAK,GAAa,EAAE,CAAA;IAC1B,KAAK,MAAM,GAAG,IAAI,QAAQ,CAAC,IAAI,EAAE,CAAC;QAChC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC;YACtB,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,CAAA;YAChB,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAA;QACrD,CAAC;IACH,CAAC;IACD,OAAO,KAAK,CAAA;AACd,CAAC,CAAA;AAED,6EAA6E;AAC7E,MAAM,CAAC,MAAM,WAAW,GAAG,CACzB,UAAwB,EACxB,WAA+B,EAC/B,WAAmB,EACnB,MAAyB,EACjB,EAAE,CAAC,kDAAkD,UAAU,CAAC,IAAI,IAAI,WAAW,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,WAAW,EAAE;;;EAGpI,WAAW;;;;EAIX,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC;;;;eAIJ,UAAU,CAAC,OAAO;uEACsC,CAAA;AAEvE,MAAM,SAAS,GAAG,CAAC,KAAY,EAAE,IAA0C,EAAE,QAAkB,EAAE,OAAsB,EAAe,EAAE;IACtI,MAAM,QAAQ,GAAG,UAAU,CAAC,KAAK,EAAE,IAAI,CAAC,IAAI,CAAC,CAAA;IAC7C,IAAI,QAAQ,KAAK,SAAS,EAAE,CAAC;QAC3B,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,6BAA6B,IAAI,CAAC,IAAI,mCAAmC,EAAE,CAAA;IAClJ,CAAC;IACD,IAAI,QAAQ,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;QAClC,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,8BAA8B,IAAI,CAAC,IAAI,qBAAqB,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE,CAAA;IACnK,CAAC;IACD,MAAM,IAAI,GAA2B,EAAE,CAAA;IACvC,KAAK,MAAM,KAAK,IAAI,QAAQ,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC;QAClD,MAAM,KAAK,GAAG,QAAQ,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAA;QACtC,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;YACxB,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,6BAA6B,KAAK,0EAA0E,EAAE,CAAA;QACrL,CAAC;QACD,IAAI,CAAC,KAAK,CAAC,GAAG,UAAU,CAAC,KAAK,CAAC,CAAA;IACjC,CAAC;IACD,MAAM,MAAM,GAAG,GAAG,CAAC,KAAK,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE;QACzC,KAAK,EAAE,OAAO,CAAC,KAAK,KAAK,KAAK;QAC9B,OAAO,EAAE,OAAO,CAAC,OAAO,KAAK,IAAI;QACjC,GAAG,OAAO,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,EAAE;QAC9D,GAAG,OAAO,CAAC,GAAG,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,OAAO,CAAC,GAAG,EAAE;QACxD,GAAG,OAAO,CAAC,kBAAkB,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,kBAAkB,EAAE,OAAO,CAAC,kBAAkB,EAAE;KACtG,CAAC,CAAA;IACF,IAAI,CAAC,MAAM,CAAC,EAAE,EAAE,CAAC;QACf,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,CAAC,KAAK,EAAE,CAAA;IACrF,CAAC;IACD,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,KAAK,SAAS,IAAI,MAAM,CAAC,IAAI,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,UAAU,MAAM,CAAC,IAAI,CAAC,IAAI,KAAK,MAAM,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAA;IACnI,OAAO;QACL,IAAI,EAAE,IAAI,CAAC,IAAI;QACf,IAAI,EAAE,QAAQ;QACd,OAAO,EAAE,IAAI,KAAK,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,QAAQ;QACtC,QAAQ,EAAE,MAAM,CAAC,QAAQ,GAAG,MAAM,CAAC,OAAO;QAC1C,MAAM,EAAE,IAAI,MAAM,CAAC,QAAQ,cAAc,MAAM,CAAC,OAAO,aAAa,MAAM,CAAC,SAAS,aAAa,IAAI,EAAE;KACxG,CAAA;AACH,CAAC,CAAA;AAED,MAAM,OAAO,GAAG,CAAC,IAAY,EAAE,UAAwB,EAAE,QAAkB,EAAE,KAAwB,EAAE,OAAsB,EAAe,EAAE;IAC5I,MAAM,IAAI,GAAG,QAAQ,IAAI,EAAE,CAAA;IAC3B,MAAM,QAAQ,GAAG,OAAO,CAAC,KAAK,EAAE,CAAC,IAAI,CAAC,CAAA;IACtC,IAAI,QAAQ,KAAK,SAAS,EAAE,CAAC;QAC3B,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,gBAAgB,EAAE,MAAM,EAAE,kCAAkC,EAAE,CAAA;IACtG,CAAC;IACD,MAAM,OAAO,GAAG,cAAc,CAAC,QAAQ,EAAE,UAAU,CAAC,IAAI,EAAE,QAAQ,CAAC,QAAQ,CAAC,CAAA;IAC5E,MAAM,MAAM,GAAG,SAAS,CAAC,OAAO,EAAE;QAChC,KAAK,EAAE,IAAI;QACX,QAAQ,EAAE,MAAM;QAChB,KAAK,EAAE,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI;QAC9B,OAAO,EAAE,CAAC,OAAO,CAAC,kBAAkB,IAAI,GAAG,CAAC,GAAG,IAAI;QACnD,GAAG,OAAO,CAAC,GAAG,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,OAAO,CAAC,GAAG,EAAE;KACzD,CAAC,CAAA;IACF,MAAM,MAAM,GAAG,GAAG,MAAM,CAAC,MAAM,IAAI,EAAE,GAAG,MAAM,CAAC,MAAM,IAAI,EAAE,EAAE,CAAC,IAAI,EAAE,CAAA;IACpE,qEAAqE;IACrE,uEAAuE;IACvE,uEAAuE;IACvE,kCAAkC;IAClC,MAAM,YAAY,GAChB,MAAM,CAAC,KAAK,KAAK,SAAS,IAAK,MAAM,CAAC,KAA+B,CAAC,IAAI,KAAK,OAAO,CAAC,CAAC;QACtF,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QACtB,SAAS,CAAA;IACb,MAAM,KAAK,GACT,YAAY,KAAK,SAAS,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC;QAC3C,MAAM,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,oBAAoB,MAAM,CAAC,MAAM,IAAI,UAAU,MAAM,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;YACxF,SAAS,CAAA;IACX,MAAM,MAAM,GACV,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,GAAG,KAAK,GAAG,MAAM,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,MAAM,EAAE,EAAE,CAAC,CAAC;QACxE,MAAM,KAAK,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,CAAA;IACpC,OAAO;QACL,IAAI;QACJ,IAAI,EAAE,MAAM;QACZ,OAAO,EAAE,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,QAAQ;QAC9C,GAAG,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE;KAC1C,CAAA;AACH,CAAC,CAAA;AAED;;;;;GAKG;AACH,MAAM,CAAC,MAAM,WAAW,GAAG,CAAC,KAAY,EAAE,UAAwB,EAAE,KAAa,EAA4C,EAAE;IAC7H,MAAM,MAAM,GAAG,SAAS,CAAC,gBAAgB,CAAC,KAAK,EAAE,KAAK,CAAC,QAAQ,EAAE,CAAC,CAAA;IAClE,MAAM,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC,cAAc,OAAO,CAAC,IAAI,KAAK,OAAO,CAAC,OAAO,EAAE,CAAC,CAAA;IACjG,MAAM,UAAU,GAAG,IAAI,GAAG,EAAU,CAAA;IACpC,KAAK,MAAM,IAAI,IAAI,MAAM,CAAC,KAAK,EAAE,CAAC;QAChC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;QAC3B,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;IAC5B,CAAC;IACD,MAAM,IAAI,GAAa,EAAE,CAAA;IACzB,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE;QACrC,MAAM,KAAK,GAAG,OAAO,CAAC,MAAM,CAAC,UAAU,CAAC,OAAO,CAAC,CAAA;QAChD,MAAM,OAAO,GAAG,KAAK,CAAC,KAAK,CAAC,QAAQ,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC;YACpD,KAAK,CAAC,KAAK,CAAC,CAAC;YACb,EAAE,GAAG,KAAK,CAAC,KAAK,EAAE,QAAQ,EAAE,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,QAAQ,EAAE,KAAK,CAAC,EAAE,CAAA;QAChE,MAAM,OAAO,GAAG,KAAK,CAAC,aAAa,CAAC,GAAG,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC,CAAA;QACpD,MAAM,OAAO,GAAG,GAAG,CAAC,SAAS,CAAC,KAAK,CAAC,KAAK,CAAC,CAAA;QAC1C,MAAM,SAAS,GAAG,OAAO,KAAK,SAAS,IAAI,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,GAAG,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,IAAI;YACzF,OAAO,CAAC,UAAU,KAAK,OAAO,CAAC,SAAS,CAAA;QAC1C,IAAI,CAAC,SAAS,IAAI,UAAU,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC;YACxC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;QAClB,CAAC;IACH,CAAC,CAAC,CAAA;IACF,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACtB,OAAO,EAAE,QAAQ,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAA;IAClC,CAAC;IACD,MAAM,KAAK,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,CAAC,CAAA;IACvD,MAAM,QAAQ,GAAG,KAAK,CAAC,YAAY,CAAC;QAClC,MAAM,EAAE,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,CAAE,CAAC;QAChD,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,EAAE,MAAM,EAAE,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAE,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAE,EAAE,CAAC,CAAC;QACtH,QAAQ,EAAE,MAAM,CAAC,QAAQ;QACzB,QAAQ,EAAE,EAAE;KACb,EAAE,EAAE,MAAM,EAAE,UAAU,CAAC,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAA;IACnD,OAAO,EAAE,QAAQ,EAAE,QAAQ,CAAC,GAAG,CAAC,MAAM,EAAE,QAAQ,EAAE,CAAA;AACpD,CAAC,CAAA;AAED,MAAM,SAAS,GAAG,KAAK,EACrB,KAAY,EACZ,IAA0C,EAC1C,UAAwB,EACxB,WAA+B,EAC/B,QAAkB,EAClB,KAAwB,EACxB,OAAsB,EACA,EAAE;IACxB,IAAI,OAAO,CAAC,QAAQ,KAAK,SAAS,EAAE,CAAC;QACnC,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,gBAAgB,EAAE,MAAM,EAAE,2CAA2C,EAAE,CAAA;IAC5H,CAAC;IACD,MAAM,MAAM,GAAG,WAAW,CAAC,UAAU,EAAE,WAAW,EAAE,gBAAgB,CAAC,IAAI,CAAC,QAAQ,EAAE,QAAQ,CAAC,QAAQ,CAAC,EAAE,KAAK,CAAC,CAAA;IAC9G,IAAI,KAAa,CAAA;IACjB,IAAI,CAAC;QACH,KAAK,GAAG,MAAM,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAA;IACxC,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAA;IAC/H,CAAC;IACD,IAAI,KAAK,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC;QACxB,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,EAAE,MAAM,EAAE,gCAAgC,EAAE,CAAA;IAClH,CAAC;IACD,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,GAAG,WAAW,CAAC,KAAK,EAAE,UAAU,EAAE,KAAK,CAAC,CAAA;IACpE,OAAO;QACL,IAAI,EAAE,IAAI,CAAC,IAAI;QACf,IAAI,EAAE,QAAQ;QACd,OAAO,EAAE,IAAI;QACb,QAAQ;QACR,MAAM,EAAE,IAAI,QAAQ,YAAY,QAAQ,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE;KAC1F,CAAA;AACH,CAAC,CAAA;AAED;;;;;GAKG;AACH,MAAM,CAAC,MAAM,MAAM,GAAG,KAAK,EAAE,KAAY,EAAE,UAAyB,EAAE,EAAyB,EAAE;IAC/F,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,KAAK,IAAI,CAAA;IACxC,MAAM,SAAS,GAAG,OAAO,CAAC,SAAS,IAAI,gBAAgB,CAAA;IACvD,MAAM,QAAQ,GAAG,IAAI,GAAG,EAA6B,CAAA;IACrD,MAAM,QAAQ,GAAG,IAAI,GAAG,EAAuB,CAAA;IAC/C,MAAM,KAAK,GAAa,EAAE,CAAA;IAC1B,MAAM,YAAY,GAAiB,EAAE,MAAM,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,SAAS,EAAE,CAAC,EAAE,SAAS,EAAE,CAAC,EAAE,CAAA;IACrG,MAAM,WAAW,GAAG,KAAK,CAAC,EAAE,CAAC,OAAO,CAAC,sDAAsD,CAAC,CAAA;IAE5F,IAAI,MAAM,GAAG,CAAC,CAAA;IACd,IAAI,QAAQ,GAAG,IAAI,CAAA;IACnB,OAAO,QAAQ,IAAI,MAAM,GAAG,SAAS,EAAE,CAAC;QACtC,MAAM,IAAI,CAAC,CAAA;QACX,QAAQ,GAAG,KAAK,CAAA;QAEhB,IAAI,OAAO,CAAC,MAAM,KAAK,KAAK,EAAE,CAAC;YAC7B,MAAM,MAAM,GAAG,MAAM,CAAC,KAAK,EAAE,EAAE,OAAO,EAAE,CAAC,CAAA;YACzC,YAAY,CAAC,MAAM,IAAI,MAAM,CAAC,MAAM,CAAA;YACpC,YAAY,CAAC,QAAQ,IAAI,MAAM,CAAC,QAAQ,CAAA;YACxC,YAAY,CAAC,OAAO,IAAI,MAAM,CAAC,OAAO,CAAA;YACtC,YAAY,CAAC,SAAS,IAAI,MAAM,CAAC,SAAS,CAAA;YAC1C,YAAY,CAAC,SAAS,IAAI,MAAM,CAAC,SAAS,CAAA;YAC1C,KAAK,MAAM,OAAO,IAAI,MAAM,CAAC,QAAQ,EAAE,CAAC;gBACtC,MAAM,IAAI,GAAG,GAAG,OAAO,CAAC,OAAO,KAAK,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAA;gBACjE,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;oBAC1B,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;gBAClB,CAAC;YACH,CAAC;YACD,IAAI,MAAM,CAAC,QAAQ,GAAG,MAAM,CAAC,OAAO,GAAG,MAAM,CAAC,SAAS,GAAG,CAAC,EAAE,CAAC;gBAC5D,QAAQ,GAAG,IAAI,CAAA;YACjB,CAAC;QACH,CAAC;QAED,MAAM,MAAM,GAAG,eAAe,CAAC,KAAK,CAAC,CAAA;QACrC,KAAK,MAAM,OAAO,IAAI,MAAM,CAAC,QAAQ,EAAE,CAAC;YACtC,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,OAAO,EAAE,OAAO,CAAC,CAAA;QACxC,CAAC;QACD,KAAK,MAAM,KAAK,IAAI,MAAM,CAAC,MAAM,EAAE,CAAC;YAClC,MAAM,EAAE,UAAU,EAAE,GAAG,EAAE,WAAW,EAAE,GAAG,KAAK,CAAA;YAC9C,IAAI,OAAO,GAAG,QAAQ,CAAC,GAAG,CAAC,UAAU,CAAC,OAAO,CAAC,CAAA;YAC9C,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;gBAC1B,OAAO,GAAG;oBACR,OAAO,EAAE,UAAU,CAAC,OAAO;oBAC3B,IAAI,EAAE,UAAU,CAAC,IAAI;oBACrB,IAAI,EAAE,UAAU,CAAC,IAAI;oBACrB,GAAG,WAAW,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE;oBACnD,WAAW,EAAE,CAAC;oBACd,KAAK,EAAE,CAAC;oBACR,OAAO,EAAE,EAAE;iBACZ,CAAA;gBACD,QAAQ,CAAC,GAAG,CAAC,UAAU,CAAC,OAAO,EAAE,OAAO,CAAC,CAAA;YAC3C,CAAC;YAED,iEAAiE;YACjE,4DAA4D;YAC5D,6DAA6D;YAC7D,6DAA6D;YAC7D,qEAAqE;YACrE,oEAAoE;YACpE,kEAAkE;YAClE,MAAM,MAAM,GAAG,KAAK,CAAC,aAAa,CAAC,cAAc,CAAC,UAAU,CAAC,OAAO,EAAE,kBAAkB,CAAC,CAAC,CAAA;YAC1F,MAAM,IAAI,GAAG,MAAM,KAAK,SAAS,IAAI,MAAM,CAAC,IAAI,GAAG,CAAC;gBAClD,MAAM,CAAC,UAAU,KAAK,IAAI,IAAI,MAAM,CAAC,UAAU,GAAG,GAAG,CAAC,EAAE,CAAC,CAAC;gBAC1D,MAAM,CAAC,UAAU,CAAC,CAAC;gBACnB,GAAG,CAAC,EAAE,CAAA;YACR,IAAI,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,SAAS,EAAE,CAAC;gBACxC,SAAQ;YACV,CAAC;YAED,OAAO,CAAC,WAAW,IAAI,CAAC,CAAA;YACxB,MAAM,SAAS,GAAG,eAAe,CAAC,KAAK,EAAE,UAAU,EAAE,OAAO,CAAC,CAAA;YAC7D,MAAM,YAAY,GAAG,IAAI,GAAG,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC,CAAA;YAClD,MAAM,OAAO,GAAG,CAAC,UAAiB,EAAW,EAAE;gBAC7C,MAAM,UAAU,GAAG,KAAK,CAAC,YAAY,CAAC,UAAU,CAAC,CAAA;gBACjD,OAAO,UAAU,CAAC,EAAE,GAAG,IAAI;oBACzB,CAAC,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,oBAAoB,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;oBACtE,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,YAAY,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAA;YACvD,CAAC,CAAA;YACD,MAAM,MAAM,GAAG,SAAS,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAA;YACxE,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBACxB,SAAQ;YACV,CAAC;YAED,mEAAmE;YACnE,4DAA4D;YAC5D,MAAM,QAAQ,GAAG,KAAK,CAAC,KAAK,CAAE,CAAA;YAC9B,MAAM,SAAS,GAAG,MAAM,CAAC,MAAM,GAAG,UAAU,CAAC,KAAK,CAAC,MAAM,CAAA;YACzD,KAAK,CAAC,MAAM,CACV,GAAG,UAAU,CAAC,OAAO,QAAQ,kBAAkB,KAAK,QAAQ,KAAK,iBAAiB,GAAG;gBACrF,WAAW,MAAM,CAAC,MAAM,iBAAiB,SAAS,UAAU,CAAC,CAAA;YAC/D,QAAQ,GAAG,IAAI,CAAA;YACf,OAAO,CAAC,KAAK,IAAI,MAAM,CAAC,MAAM,CAAA;YAE9B,KAAK,MAAM,QAAQ,IAAI,MAAM,EAAE,CAAC;gBAC9B,MAAM,KAAK,GAAG,aAAa,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAA;gBAC5C,MAAM,aAAa,GAAkB,EAAE,QAAQ,EAAE,QAAQ,CAAC,QAAQ,EAAE,KAAK,EAAE,EAAE,EAAE,CAAA;gBAC/E,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,aAAa,CAAC,CAAA;gBACnC,KAAK,MAAM,IAAI,IAAI,UAAU,CAAC,KAAK,EAAE,CAAC;oBACpC,QAAQ,IAAI,CAAC,IAAI,EAAE,CAAC;wBAClB,KAAK,QAAQ;4BACX,aAAa,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAC,CAAA;4BACnE,MAAK;wBACP,KAAK,MAAM;4BACT,aAAa,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,EAAE,UAAU,EAAE,QAAQ,EAAE,KAAK,EAAE,OAAO,CAAC,CAAC,CAAA;4BAClF,MAAK;wBACP,KAAK,QAAQ;4BACX,aAAa,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,SAAS,CAAC,KAAK,EAAE,IAAI,EAAE,UAAU,EAAE,WAAW,EAAE,QAAQ,EAAE,KAAK,EAAE,OAAO,CAAC,CAAC,CAAA;4BACzG,MAAK;oBACT,CAAC;gBACH,CAAC;YACH,CAAC;QACH,CAAC;IACH,CAAC;IAED,IAAI,MAAM,IAAI,SAAS,IAAI,QAAQ,EAAE,CAAC;QACpC,KAAK,CAAC,IAAI,CAAC,cAAc,SAAS,+EAA+E,CAAC,CAAA;IACpH,CAAC;IACD,OAAO;QACL,MAAM;QACN,WAAW,EAAE,CAAC,GAAG,QAAQ,CAAC,MAAM,EAAE,CAAC;QACnC,QAAQ,EAAE,CAAC,GAAG,QAAQ,CAAC,MAAM,EAAE,CAAC;QAChC,GAAG,OAAO,CAAC,MAAM,KAAK,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,YAAY,EAAE;QAC3D,KAAK;KACN,CAAA;AACH,CAAC,CAAA"}
@@ -0,0 +1,28 @@
1
+ /**
2
+ * `@cavelang/cli/automate` — CAVE automations (spec §29): the event-driven
3
+ * loop. In-band declarations pair a trigger pattern with named steps, and
4
+ * `settle` evaluates them whenever belief changes — new claims matching
5
+ * patterns fire rules, actions, out-of-band hooks, or an agent prompt.
6
+ *
7
+ * ```ts
8
+ * import { declareAutomations, settle } from '@cavelang/cli/automate'
9
+ *
10
+ * declareAutomations(store, 'automation/ack HAS automation: ' +
11
+ * '`?svc HAS error-rate: ?r, ?r > 0.05 => action/open-incident`')
12
+ * await settle(store, { hooks })
13
+ * // new error-rate claims execute action/open-incident with ?svc bound
14
+ * ```
15
+ *
16
+ * Triggers join like rules (§24.2); a solution fires only when it cites a
17
+ * row newer than the automation's watermark — an automation is armed at
18
+ * its declaration, never wakes itself, and chains with others because
19
+ * every write path is idempotent (§29.2–§29.4). Hook commands and the
20
+ * agent command stay out-of-band (§19.5); the store only ever names them.
21
+ */
22
+ export * as Automation from './automation.ts';
23
+ export { declareAutomations, listAutomations, loadAutomations, provenanceContext, retractAutomation } from './declare.ts';
24
+ export type { Declaration, ListedAutomation, LoadProblem, Loaded, Retraction } from './declare.ts';
25
+ export { appendReply, buildPrompt, defaultAgentTimeoutSeconds, defaultMaxPasses, settle, settled, substituteHook, substitutePrompt, watermarkAttribute } from './engine.ts';
26
+ export type { AutomationOutcome, DeriveTotals, FiringOutcome, SettleOptions, SettleReport, StepOutcome } from './engine.ts';
27
+ export { runAutomate, watchCycle } from './main.ts';
28
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAEH,OAAO,KAAK,UAAU,MAAM,iBAAiB,CAAA;AAC7C,OAAO,EAAE,kBAAkB,EAAE,eAAe,EAAE,eAAe,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAA;AACzH,YAAY,EAAE,WAAW,EAAE,gBAAgB,EAAE,WAAW,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,cAAc,CAAA;AAClG,OAAO,EACL,WAAW,EAAE,WAAW,EAAE,0BAA0B,EAAE,gBAAgB,EAAE,MAAM,EAAE,OAAO,EACvF,cAAc,EAAE,gBAAgB,EAAE,kBAAkB,EACrD,MAAM,aAAa,CAAA;AACpB,YAAY,EAAE,iBAAiB,EAAE,YAAY,EAAE,aAAa,EAAE,aAAa,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,aAAa,CAAA;AAC3H,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,WAAW,CAAA"}
@@ -0,0 +1,26 @@
1
+ /**
2
+ * `@cavelang/cli/automate` — CAVE automations (spec §29): the event-driven
3
+ * loop. In-band declarations pair a trigger pattern with named steps, and
4
+ * `settle` evaluates them whenever belief changes — new claims matching
5
+ * patterns fire rules, actions, out-of-band hooks, or an agent prompt.
6
+ *
7
+ * ```ts
8
+ * import { declareAutomations, settle } from '@cavelang/cli/automate'
9
+ *
10
+ * declareAutomations(store, 'automation/ack HAS automation: ' +
11
+ * '`?svc HAS error-rate: ?r, ?r > 0.05 => action/open-incident`')
12
+ * await settle(store, { hooks })
13
+ * // new error-rate claims execute action/open-incident with ?svc bound
14
+ * ```
15
+ *
16
+ * Triggers join like rules (§24.2); a solution fires only when it cites a
17
+ * row newer than the automation's watermark — an automation is armed at
18
+ * its declaration, never wakes itself, and chains with others because
19
+ * every write path is idempotent (§29.2–§29.4). Hook commands and the
20
+ * agent command stay out-of-band (§19.5); the store only ever names them.
21
+ */
22
+ export * as Automation from "./automation.js";
23
+ export { declareAutomations, listAutomations, loadAutomations, provenanceContext, retractAutomation } from "./declare.js";
24
+ export { appendReply, buildPrompt, defaultAgentTimeoutSeconds, defaultMaxPasses, settle, settled, substituteHook, substitutePrompt, watermarkAttribute } from "./engine.js";
25
+ export { runAutomate, watchCycle } from "./main.js";
26
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAEH,OAAO,KAAK,UAAU,MAAM,iBAAiB,CAAA;AAC7C,OAAO,EAAE,kBAAkB,EAAE,eAAe,EAAE,eAAe,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAA;AAEzH,OAAO,EACL,WAAW,EAAE,WAAW,EAAE,0BAA0B,EAAE,gBAAgB,EAAE,MAAM,EAAE,OAAO,EACvF,cAAc,EAAE,gBAAgB,EAAE,kBAAkB,EACrD,MAAM,aAAa,CAAA;AAEpB,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,WAAW,CAAA"}
@@ -0,0 +1,26 @@
1
+ /**
2
+ * `cave automate` entry (spec §29.5) — argument parsing, the declare /
3
+ * list / retract lifecycle, one settle cycle under `--once`, and the
4
+ * long-running loop: a cheap `MAX(tx)` poll, a cycle whenever it moves.
5
+ */
6
+ import type { Store } from '@cavelang/store';
7
+ import type { SettleOptions, SettleReport } from './engine.ts';
8
+ export type RunContext = {
9
+ readonly stdin?: NodeJS.ReadableStream;
10
+ readonly stdout?: NodeJS.WritableStream;
11
+ readonly stderr?: NodeJS.WritableStream;
12
+ readonly signal?: AbortSignal;
13
+ };
14
+ /**
15
+ * One watch cycle (spec §29.5): settle, report, and return the tx
16
+ * boundary the poll may treat as seen. The boundary is captured *before*
17
+ * each settle, and the cycle re-settles until `MAX(tx)` is unchanged
18
+ * across one — a write landing while a settle runs (or while its report
19
+ * renders) re-enters the loop instead of being marked seen unprocessed
20
+ * (BUGS.md watch-watermark-race). Settle's own appends move `MAX(tx)`
21
+ * too, so a cycle that fired ends with one confirming settle; quiescent
22
+ * write paths (§29.4) are what make the loop terminate.
23
+ */
24
+ export declare const watchCycle: (store: Store, options: SettleOptions, onReport: (report: SettleReport) => void) => Promise<null | string>;
25
+ export declare const runAutomate: (argv: readonly string[], context?: RunContext) => Promise<number>;
26
+ //# sourceMappingURL=main.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"main.d.ts","sourceRoot":"","sources":["../../src/main.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAOH,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,iBAAiB,CAAA;AAG5C,OAAO,KAAK,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,aAAa,CAAA;AAyE9D,MAAM,MAAM,UAAU,GAAG;IACvB,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC,cAAc,CAAA;IACtC,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC,cAAc,CAAA;IACvC,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC,cAAc,CAAA;IACvC,QAAQ,CAAC,MAAM,CAAC,EAAE,WAAW,CAAA;CAC9B,CAAA;AAkFD;;;;;;;;;GASG;AACH,eAAO,MAAM,UAAU,GACrB,OAAO,KAAK,EACZ,SAAS,aAAa,EACtB,UAAU,CAAC,MAAM,EAAE,YAAY,KAAK,IAAI,KACvC,OAAO,CAAC,IAAI,GAAG,MAAM,CAQvB,CAAA;AAuCD,eAAO,MAAM,WAAW,GAAU,MAAM,SAAS,MAAM,EAAE,EAAE,UAAS,UAAe,KAAG,OAAO,CAAC,MAAM,CA8GnG,CAAA"}