@cavelang/cli 0.27.14 → 0.29.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 (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,84 @@
1
+ /**
2
+ * Automation lifecycle (spec §29.1) — declaring automations from a CAVE
3
+ * document, resolving and listing what a store currently believes its
4
+ * automations are, and retracting a declaration. The exact §25.1 moves:
5
+ * name identity, one evolving declaration series per subject, resolution
6
+ * by the newest current row across actor series.
7
+ *
8
+ * An automation file is an ordinary CAVE document: top-level
9
+ * `automation/<name> HAS automation: `…`` claims are the declarations;
10
+ * everything else — verb declarations the triggers need, comments — is
11
+ * prelude, ingested first. Declaring is idempotent: an unchanged
12
+ * declaration (or prelude) appends nothing.
13
+ */
14
+ import { Row, type Store } from '@cavelang/store';
15
+ import * as Automation from './automation.ts';
16
+ /** Source context stamped on declarations and bookkeeping (spec §9.5, §29.2). */
17
+ export declare const provenanceContext = "src:cave-automate";
18
+ /** Claim key of a `subject HAS <attribute>: … @src:cave-automate` bookkeeping claim. */
19
+ export declare const bookkeepingKey: (subject: string, attribute: string) => string;
20
+ export type Loaded = {
21
+ readonly automation: Automation.t;
22
+ /** The declaration row — its tx is the arming point (spec §29.2). */
23
+ readonly row: Row.t;
24
+ /** Declaration comment — the automation's description. */
25
+ readonly description?: string;
26
+ };
27
+ export type LoadProblem = {
28
+ readonly subject: string;
29
+ readonly problems: readonly string[];
30
+ };
31
+ /**
32
+ * Loads every current positive automation declaration, parsing each body;
33
+ * declarations that fail to parse are reported and skipped (spec §29.1).
34
+ */
35
+ export declare const loadAutomations: (store: Store) => {
36
+ loaded: Loaded[];
37
+ problems: LoadProblem[];
38
+ };
39
+ export type ListedAutomation = {
40
+ /** Declaration subject, `automation/<name>`. */
41
+ readonly subject: string;
42
+ readonly name: string;
43
+ readonly text: string;
44
+ readonly description?: string;
45
+ readonly ok: boolean;
46
+ readonly problems: readonly string[];
47
+ };
48
+ /** Current positive automations of a store, in declaration order. */
49
+ export declare const listAutomations: (store: Store) => ListedAutomation[];
50
+ export type Declaration = {
51
+ /** Automations newly declared (or re-declared after a change/retraction). */
52
+ readonly declared: number;
53
+ /** Automations whose declaration is already current — nothing appended. */
54
+ readonly unchanged: number;
55
+ /** Claims appended by the file's prelude (0 when unchanged). */
56
+ readonly prelude: number;
57
+ readonly automations: readonly Automation.t[];
58
+ readonly problems: readonly {
59
+ line: number;
60
+ message: string;
61
+ }[];
62
+ };
63
+ /**
64
+ * Declares the automations of a CAVE document into the store — prelude
65
+ * first, then one normalized `automation/<name> HAS automation: …` claim
66
+ * per declaration (§29.1), each skipped when already current.
67
+ */
68
+ export declare const declareAutomations: (store: Store, text: string) => Declaration;
69
+ export type Retraction = {
70
+ readonly ok: true;
71
+ readonly subject: string;
72
+ readonly retracted: number;
73
+ } | {
74
+ readonly ok: false;
75
+ readonly error: string;
76
+ };
77
+ /**
78
+ * Retracts an automation's declaration — by name or subject — disabling
79
+ * it. Every current positive series of the declaration is retracted (§9.5
80
+ * stamps fork one per appending actor). What past firings recorded stays
81
+ * recorded (spec §25.1's rule; contrast §24.5).
82
+ */
83
+ export declare const retractAutomation: (store: Store, ref: string) => Retraction;
84
+ //# sourceMappingURL=declare.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"declare.d.ts","sourceRoot":"","sources":["../../src/declare.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAKH,OAAO,EAAE,GAAG,EAAE,KAAK,KAAK,EAAE,MAAM,iBAAiB,CAAA;AACjD,OAAO,KAAK,UAAU,MAAM,iBAAiB,CAAA;AAE7C,iFAAiF;AACjF,eAAO,MAAM,iBAAiB,sBAAsB,CAAA;AAOpD,wFAAwF;AACxF,eAAO,MAAM,cAAc,GAAI,SAAS,MAAM,EAAE,WAAW,MAAM,KAAG,MAM/D,CAAA;AAqCL,MAAM,MAAM,MAAM,GAAG;IACnB,QAAQ,CAAC,UAAU,EAAE,UAAU,CAAC,CAAC,CAAA;IACjC,qEAAqE;IACrE,QAAQ,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAAA;IACnB,0DAA0D;IAC1D,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAA;CAC9B,CAAA;AAED,MAAM,MAAM,WAAW,GAAG;IACxB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;IACxB,QAAQ,CAAC,QAAQ,EAAE,SAAS,MAAM,EAAE,CAAA;CACrC,CAAA;AAED;;;GAGG;AACH,eAAO,MAAM,eAAe,GAAI,OAAO,KAAK,KAAG;IAAE,MAAM,EAAE,MAAM,EAAE,CAAC;IAAC,QAAQ,EAAE,WAAW,EAAE,CAAA;CAgBzF,CAAA;AAED,MAAM,MAAM,gBAAgB,GAAG;IAC7B,gDAAgD;IAChD,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;IACxB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IACrB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IACrB,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAA;IAC7B,QAAQ,CAAC,EAAE,EAAE,OAAO,CAAA;IACpB,QAAQ,CAAC,QAAQ,EAAE,SAAS,MAAM,EAAE,CAAA;CACrC,CAAA;AAED,qEAAqE;AACrE,eAAO,MAAM,eAAe,GAAI,OAAO,KAAK,KAAG,gBAAgB,EAY3D,CAAA;AAEJ,MAAM,MAAM,WAAW,GAAG;IACxB,6EAA6E;IAC7E,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAA;IACzB,2EAA2E;IAC3E,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAA;IAC1B,gEAAgE;IAChE,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;IACxB,QAAQ,CAAC,WAAW,EAAE,SAAS,UAAU,CAAC,CAAC,EAAE,CAAA;IAC7C,QAAQ,CAAC,QAAQ,EAAE,SAAS;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,EAAE,CAAA;CAChE,CAAA;AA2CD;;;;GAIG;AACH,eAAO,MAAM,kBAAkB,GAAI,OAAO,KAAK,EAAE,MAAM,MAAM,KAAG,WA6E/D,CAAA;AAED,MAAM,MAAM,UAAU,GAClB;IAAE,QAAQ,CAAC,EAAE,EAAE,IAAI,CAAC;IAAC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAA;CAAE,GAC3E;IAAE,QAAQ,CAAC,EAAE,EAAE,KAAK,CAAC;IAAC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAA;AAElD;;;;;GAKG;AACH,eAAO,MAAM,iBAAiB,GAAI,OAAO,KAAK,EAAE,KAAK,MAAM,KAAG,UAmB7D,CAAA"}
@@ -0,0 +1,233 @@
1
+ /**
2
+ * Automation lifecycle (spec §29.1) — declaring automations from a CAVE
3
+ * document, resolving and listing what a store currently believes its
4
+ * automations are, and retracting a declaration. The exact §25.1 moves:
5
+ * name identity, one evolving declaration series per subject, resolution
6
+ * by the newest current row across actor series.
7
+ *
8
+ * An automation file is an ordinary CAVE document: top-level
9
+ * `automation/<name> HAS automation: `…`` claims are the declarations;
10
+ * everything else — verb declarations the triggers need, comments — is
11
+ * prelude, ingested first. Declaring is idempotent: an unchanged
12
+ * declaration (or prelude) appends nothing.
13
+ */
14
+ import { Claim, Key, Value } from '@cavelang/core';
15
+ import { parseDocument } from '@cavelang/parser';
16
+ import { Rule } from '@cavelang/cli/rules';
17
+ import { Row } from '@cavelang/store';
18
+ import * as Automation from "./automation.js";
19
+ /** Source context stamped on declarations and bookkeeping (spec §9.5, §29.2). */
20
+ export const provenanceContext = 'src:cave-automate';
21
+ /** Subject of the prelude digest bookkeeping claim. */
22
+ const preludeSubject = 'automate/prelude';
23
+ const preludeDigestAttribute = 'automate-digest';
24
+ /** Claim key of a `subject HAS <attribute>: … @src:cave-automate` bookkeeping claim. */
25
+ export const bookkeepingKey = (subject, attribute) => Key.of(Claim.of({
26
+ subject: Claim.entity(subject),
27
+ verb: 'HAS',
28
+ payload: Claim.attribute(attribute, Value.parse('x')),
29
+ contexts: [provenanceContext]
30
+ }));
31
+ /**
32
+ * The newest current row of `attribute` on `subject`, across every
33
+ * belief series (§9.5 stamps make one series per appending actor —
34
+ * §25.1's resolution rule).
35
+ */
36
+ const currentAttribute = (store, subject, attribute) => {
37
+ let winner;
38
+ for (const row of store.currentBeliefs()) {
39
+ if (row.subject === subject && row.verb === 'HAS' && row.attribute === attribute &&
40
+ (winner === undefined || winner.tx < row.tx)) {
41
+ winner = row;
42
+ }
43
+ }
44
+ return winner;
45
+ };
46
+ const enabled = (row) => row !== undefined && row.conf > 0 && row.negated === 0 && row.value_text !== null;
47
+ /** Current positive automation declaration rows, newest series winner per subject. */
48
+ const currentAutomationRows = (store) => {
49
+ const bySubject = new Map();
50
+ for (const row of store.currentBeliefs()) {
51
+ if (row.verb !== 'HAS' || row.attribute !== Automation.automationAttribute ||
52
+ Automation.automationName(row.subject) === undefined) {
53
+ continue;
54
+ }
55
+ const seen = bySubject.get(row.subject);
56
+ if (seen === undefined || seen.tx < row.tx) {
57
+ bySubject.set(row.subject, row);
58
+ }
59
+ }
60
+ return [...bySubject.values()].filter(enabled);
61
+ };
62
+ /**
63
+ * Loads every current positive automation declaration, parsing each body;
64
+ * declarations that fail to parse are reported and skipped (spec §29.1).
65
+ */
66
+ export const loadAutomations = (store) => {
67
+ const loaded = [];
68
+ const problems = [];
69
+ for (const row of currentAutomationRows(store)) {
70
+ const parsed = Automation.parse(row.subject, Row.parseValue(row.value_text).raw);
71
+ if (!parsed.ok) {
72
+ problems.push({ subject: row.subject, problems: parsed.problems });
73
+ continue;
74
+ }
75
+ loaded.push({
76
+ automation: parsed.automation,
77
+ row,
78
+ ...row.comment === null ? {} : { description: row.comment }
79
+ });
80
+ }
81
+ return { loaded, problems };
82
+ };
83
+ /** Current positive automations of a store, in declaration order. */
84
+ export const listAutomations = (store) => currentAutomationRows(store).map(row => {
85
+ const text = Row.parseValue(row.value_text).raw;
86
+ const parsed = Automation.parse(row.subject, text);
87
+ return {
88
+ subject: row.subject,
89
+ name: Automation.automationName(row.subject),
90
+ text,
91
+ ...row.comment === null ? {} : { description: row.comment },
92
+ ok: parsed.ok,
93
+ problems: parsed.ok ? [] : parsed.problems
94
+ };
95
+ });
96
+ const indentOf = (line) => line.length - line.trimStart().length;
97
+ const isStructural = (line) => {
98
+ const body = line.trim();
99
+ return body !== '' && !body.startsWith(';');
100
+ };
101
+ /**
102
+ * Reads one top-level line as an automation declaration claim —
103
+ * `automation/<name> HAS automation: `…``. @returns `undefined` when the
104
+ * line is anything else (prelude).
105
+ */
106
+ const asDeclaration = (line) => {
107
+ const document = parseDocument(line);
108
+ if (document.diagnostics.length > 0) {
109
+ return undefined;
110
+ }
111
+ const entry = document.lines.find(candidate => candidate.kind === 'claim');
112
+ if (entry === undefined || entry.kind !== 'claim') {
113
+ return undefined;
114
+ }
115
+ const claim = entry.claim;
116
+ if (claim.verb !== 'HAS' || claim.negated || claim.payload.kind !== 'attribute' ||
117
+ claim.payload.attribute !== Automation.automationAttribute ||
118
+ claim.subject.kind !== 'entity' || Automation.automationName(claim.subject.text) === undefined) {
119
+ return undefined;
120
+ }
121
+ return {
122
+ subject: claim.subject.text,
123
+ body: claim.payload.value.raw,
124
+ ...claim.meta.comment === undefined ? {} : { comment: claim.meta.comment }
125
+ };
126
+ };
127
+ /**
128
+ * Declares the automations of a CAVE document into the store — prelude
129
+ * first, then one normalized `automation/<name> HAS automation: …` claim
130
+ * per declaration (§29.1), each skipped when already current.
131
+ */
132
+ export const declareAutomations = (store, text) => {
133
+ const problems = [];
134
+ const automations = [];
135
+ const preludeLines = [];
136
+ const declarations = [];
137
+ // Top-level blocks: a structural unindented line plus what follows it —
138
+ // §25.1's rule: a declaration block with structural children is rejected
139
+ // whole rather than silently re-attaching them to the prelude.
140
+ const blocks = [];
141
+ text.split(/\r?\n/).forEach((line, index) => {
142
+ if (isStructural(line) && indentOf(line) === 0) {
143
+ blocks.push({ lines: [line], at: index + 1 });
144
+ }
145
+ else if (blocks.length === 0) {
146
+ preludeLines.push(line);
147
+ }
148
+ else {
149
+ blocks[blocks.length - 1].lines.push(line);
150
+ }
151
+ });
152
+ for (const block of blocks) {
153
+ const declaration = asDeclaration(block.lines[0]);
154
+ if (declaration === undefined) {
155
+ preludeLines.push(...block.lines);
156
+ continue;
157
+ }
158
+ if (block.lines.slice(1).some(isStructural)) {
159
+ problems.push({ line: block.at, message: 'automation declarations take no qualifier children (spec §29.1)' });
160
+ continue;
161
+ }
162
+ declarations.push({ declaration, at: block.at });
163
+ preludeLines.push(...block.lines.slice(1));
164
+ }
165
+ return store.transaction(() => {
166
+ let prelude = 0;
167
+ const preludeText = preludeLines.join('\n');
168
+ if (preludeText.trim() !== '') {
169
+ const digest = Rule.digestOf(preludeText);
170
+ const known = store.currentBelief(bookkeepingKey(preludeSubject, preludeDigestAttribute));
171
+ if (known === undefined || known.conf <= 0 || known.value_text !== digest) {
172
+ const result = store.ingest(preludeText, { source: 'cave-automate' });
173
+ problems.push(...result.problems);
174
+ prelude = result.ids.length;
175
+ store.ingest(`${preludeSubject} HAS ${preludeDigestAttribute}: ${digest} @${provenanceContext}`);
176
+ }
177
+ }
178
+ let declared = 0;
179
+ let unchanged = 0;
180
+ for (const { declaration, at } of declarations) {
181
+ const parsed = Automation.parse(declaration.subject, declaration.body);
182
+ if (!parsed.ok) {
183
+ problems.push(...parsed.problems.map(message => ({ line: at, message })));
184
+ continue;
185
+ }
186
+ const automation = parsed.automation;
187
+ automations.push(automation);
188
+ const literal = !automation.text.includes('`') ? `\`${automation.text}\`` :
189
+ !automation.text.includes('"') ? `"${automation.text}"` :
190
+ undefined;
191
+ if (literal === undefined) {
192
+ problems.push({ line: at, message: 'automation body contains both " and ` — cannot be stored as a literal' });
193
+ continue;
194
+ }
195
+ const known = currentAttribute(store, automation.subject, Automation.automationAttribute);
196
+ if (enabled(known) && known.value_text === literal &&
197
+ (known.comment ?? undefined) === declaration.comment) {
198
+ unchanged += 1;
199
+ continue;
200
+ }
201
+ const description = declaration.comment === undefined ? '' : ` ; ${declaration.comment}`;
202
+ store.ingest(`${automation.subject} HAS ${Automation.automationAttribute}: ${literal} @${provenanceContext}${description}`);
203
+ declared += 1;
204
+ }
205
+ return { declared, unchanged, prelude, automations, problems };
206
+ });
207
+ };
208
+ /**
209
+ * Retracts an automation's declaration — by name or subject — disabling
210
+ * it. Every current positive series of the declaration is retracted (§9.5
211
+ * stamps fork one per appending actor). What past firings recorded stays
212
+ * recorded (spec §25.1's rule; contrast §24.5).
213
+ */
214
+ export const retractAutomation = (store, ref) => {
215
+ const subject = Automation.automationSubject(ref);
216
+ const rows = store.currentBeliefs().filter(row => row.subject === subject && row.verb === 'HAS' && row.attribute === Automation.automationAttribute &&
217
+ row.negated === 0 && row.conf > 0);
218
+ if (rows.length === 0) {
219
+ return { ok: false, error: `no current automation matches ${JSON.stringify(ref)}` };
220
+ }
221
+ return store.transaction(() => {
222
+ for (const row of rows) {
223
+ store.insertResult({
224
+ claims: [{ claim: { ...store.toClaim(row), conf: 0, raw: '', comment: 'retracted: cave automate --retract' }, line: 0 }],
225
+ edges: [],
226
+ registry: store.registry(),
227
+ problems: []
228
+ });
229
+ }
230
+ return { ok: true, subject, retracted: rows.length };
231
+ });
232
+ };
233
+ //# sourceMappingURL=declare.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"declare.js","sourceRoot":"","sources":["../../src/declare.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,EAAE,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,MAAM,gBAAgB,CAAA;AAClD,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAA;AAChD,OAAO,EAAE,IAAI,EAAE,MAAM,iBAAiB,CAAA;AACtC,OAAO,EAAE,GAAG,EAAc,MAAM,iBAAiB,CAAA;AACjD,OAAO,KAAK,UAAU,MAAM,iBAAiB,CAAA;AAE7C,iFAAiF;AACjF,MAAM,CAAC,MAAM,iBAAiB,GAAG,mBAAmB,CAAA;AAEpD,uDAAuD;AACvD,MAAM,cAAc,GAAG,kBAAkB,CAAA;AAEzC,MAAM,sBAAsB,GAAG,iBAAiB,CAAA;AAEhD,wFAAwF;AACxF,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,OAAe,EAAE,SAAiB,EAAU,EAAE,CAC3E,GAAG,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC;IACd,OAAO,EAAE,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC;IAC9B,IAAI,EAAE,KAAK;IACX,OAAO,EAAE,KAAK,CAAC,SAAS,CAAC,SAAS,EAAE,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IACrD,QAAQ,EAAE,CAAC,iBAAiB,CAAC;CAC9B,CAAC,CAAC,CAAA;AAEL;;;;GAIG;AACH,MAAM,gBAAgB,GAAG,CAAC,KAAY,EAAE,OAAe,EAAE,SAAiB,EAAqB,EAAE;IAC/F,IAAI,MAAyB,CAAA;IAC7B,KAAK,MAAM,GAAG,IAAI,KAAK,CAAC,cAAc,EAAE,EAAE,CAAC;QACzC,IAAI,GAAG,CAAC,OAAO,KAAK,OAAO,IAAI,GAAG,CAAC,IAAI,KAAK,KAAK,IAAI,GAAG,CAAC,SAAS,KAAK,SAAS;YAC5E,CAAC,MAAM,KAAK,SAAS,IAAI,MAAM,CAAC,EAAE,GAAG,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC;YACjD,MAAM,GAAG,GAAG,CAAA;QACd,CAAC;IACH,CAAC;IACD,OAAO,MAAM,CAAA;AACf,CAAC,CAAA;AAED,MAAM,OAAO,GAAG,CAAC,GAAsB,EAAgB,EAAE,CACvD,GAAG,KAAK,SAAS,IAAI,GAAG,CAAC,IAAI,GAAG,CAAC,IAAI,GAAG,CAAC,OAAO,KAAK,CAAC,IAAI,GAAG,CAAC,UAAU,KAAK,IAAI,CAAA;AAEnF,sFAAsF;AACtF,MAAM,qBAAqB,GAAG,CAAC,KAAY,EAAW,EAAE;IACtD,MAAM,SAAS,GAAG,IAAI,GAAG,EAAiB,CAAA;IAC1C,KAAK,MAAM,GAAG,IAAI,KAAK,CAAC,cAAc,EAAE,EAAE,CAAC;QACzC,IAAI,GAAG,CAAC,IAAI,KAAK,KAAK,IAAI,GAAG,CAAC,SAAS,KAAK,UAAU,CAAC,mBAAmB;YACtE,UAAU,CAAC,cAAc,CAAC,GAAG,CAAC,OAAO,CAAC,KAAK,SAAS,EAAE,CAAC;YACzD,SAAQ;QACV,CAAC;QACD,MAAM,IAAI,GAAG,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC,OAAO,CAAC,CAAA;QACvC,IAAI,IAAI,KAAK,SAAS,IAAI,IAAI,CAAC,EAAE,GAAG,GAAG,CAAC,EAAE,EAAE,CAAC;YAC3C,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC,OAAO,EAAE,GAAG,CAAC,CAAA;QACjC,CAAC;IACH,CAAC;IACD,OAAO,CAAC,GAAG,SAAS,CAAC,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAA;AAChD,CAAC,CAAA;AAeD;;;GAGG;AACH,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC,KAAY,EAAiD,EAAE;IAC7F,MAAM,MAAM,GAAa,EAAE,CAAA;IAC3B,MAAM,QAAQ,GAAkB,EAAE,CAAA;IAClC,KAAK,MAAM,GAAG,IAAI,qBAAqB,CAAC,KAAK,CAAC,EAAE,CAAC;QAC/C,MAAM,MAAM,GAAG,UAAU,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,EAAE,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,UAAW,CAAC,CAAC,GAAG,CAAC,CAAA;QACjF,IAAI,CAAC,MAAM,CAAC,EAAE,EAAE,CAAC;YACf,QAAQ,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,GAAG,CAAC,OAAO,EAAE,QAAQ,EAAE,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAA;YAClE,SAAQ;QACV,CAAC;QACD,MAAM,CAAC,IAAI,CAAC;YACV,UAAU,EAAE,MAAM,CAAC,UAAU;YAC7B,GAAG;YACH,GAAG,GAAG,CAAC,OAAO,KAAK,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,GAAG,CAAC,OAAO,EAAE;SAC5D,CAAC,CAAA;IACJ,CAAC;IACD,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAA;AAC7B,CAAC,CAAA;AAYD,qEAAqE;AACrE,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC,KAAY,EAAsB,EAAE,CAClE,qBAAqB,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE;IACrC,MAAM,IAAI,GAAG,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,UAAW,CAAC,CAAC,GAAG,CAAA;IAChD,MAAM,MAAM,GAAG,UAAU,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,EAAE,IAAI,CAAC,CAAA;IAClD,OAAO;QACL,OAAO,EAAE,GAAG,CAAC,OAAO;QACpB,IAAI,EAAE,UAAU,CAAC,cAAc,CAAC,GAAG,CAAC,OAAO,CAAE;QAC7C,IAAI;QACJ,GAAG,GAAG,CAAC,OAAO,KAAK,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,GAAG,CAAC,OAAO,EAAE;QAC3D,EAAE,EAAE,MAAM,CAAC,EAAE;QACb,QAAQ,EAAE,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ;KAC3C,CAAA;AACH,CAAC,CAAC,CAAA;AAaJ,MAAM,QAAQ,GAAG,CAAC,IAAY,EAAU,EAAE,CACxC,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC,MAAM,CAAA;AAEvC,MAAM,YAAY,GAAG,CAAC,IAAY,EAAW,EAAE;IAC7C,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,EAAE,CAAA;IACxB,OAAO,IAAI,KAAK,EAAE,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAA;AAC7C,CAAC,CAAA;AAQD;;;;GAIG;AACH,MAAM,aAAa,GAAG,CAAC,IAAY,EAA+B,EAAE;IAClE,MAAM,QAAQ,GAAG,aAAa,CAAC,IAAI,CAAC,CAAA;IACpC,IAAI,QAAQ,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACpC,OAAO,SAAS,CAAA;IAClB,CAAC;IACD,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC,SAAS,CAAC,IAAI,KAAK,OAAO,CAAC,CAAA;IAC1E,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;QAClD,OAAO,SAAS,CAAA;IAClB,CAAC;IACD,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAA;IACzB,IAAI,KAAK,CAAC,IAAI,KAAK,KAAK,IAAI,KAAK,CAAC,OAAO,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,KAAK,WAAW;QAC3E,KAAK,CAAC,OAAO,CAAC,SAAS,KAAK,UAAU,CAAC,mBAAmB;QAC1D,KAAK,CAAC,OAAO,CAAC,IAAI,KAAK,QAAQ,IAAI,UAAU,CAAC,cAAc,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,SAAS,EAAE,CAAC;QACnG,OAAO,SAAS,CAAA;IAClB,CAAC;IACD,OAAO;QACL,OAAO,EAAE,KAAK,CAAC,OAAO,CAAC,IAAI;QAC3B,IAAI,EAAE,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG;QAC7B,GAAG,KAAK,CAAC,IAAI,CAAC,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,KAAK,CAAC,IAAI,CAAC,OAAO,EAAE;KAC3E,CAAA;AACH,CAAC,CAAA;AAED;;;;GAIG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,KAAY,EAAE,IAAY,EAAe,EAAE;IAC5E,MAAM,QAAQ,GAAwC,EAAE,CAAA;IACxD,MAAM,WAAW,GAAmB,EAAE,CAAA;IACtC,MAAM,YAAY,GAAa,EAAE,CAAA;IACjC,MAAM,YAAY,GAAmD,EAAE,CAAA;IAEvE,wEAAwE;IACxE,yEAAyE;IACzE,+DAA+D;IAC/D,MAAM,MAAM,GAAsC,EAAE,CAAA;IACpD,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE;QAC1C,IAAI,YAAY,CAAC,IAAI,CAAC,IAAI,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;YAC/C,MAAM,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,KAAK,GAAG,CAAC,EAAE,CAAC,CAAA;QAC/C,CAAC;aAAM,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC/B,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;QACzB,CAAC;aAAM,CAAC;YACN,MAAM,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAE,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;QAC7C,CAAC;IACH,CAAC,CAAC,CAAA;IACF,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;QAC3B,MAAM,WAAW,GAAG,aAAa,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAE,CAAC,CAAA;QAClD,IAAI,WAAW,KAAK,SAAS,EAAE,CAAC;YAC9B,YAAY,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,CAAA;YACjC,SAAQ;QACV,CAAC;QACD,IAAI,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,EAAE,CAAC;YAC5C,QAAQ,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,KAAK,CAAC,EAAE,EAAE,OAAO,EAAE,iEAAiE,EAAE,CAAC,CAAA;YAC7G,SAAQ;QACV,CAAC;QACD,YAAY,CAAC,IAAI,CAAC,EAAE,WAAW,EAAE,EAAE,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,CAAA;QAChD,YAAY,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAA;IAC5C,CAAC;IAED,OAAO,KAAK,CAAC,WAAW,CAAC,GAAG,EAAE;QAC5B,IAAI,OAAO,GAAG,CAAC,CAAA;QACf,MAAM,WAAW,GAAG,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;QAC3C,IAAI,WAAW,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC;YAC9B,MAAM,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAA;YACzC,MAAM,KAAK,GAAG,KAAK,CAAC,aAAa,CAAC,cAAc,CAAC,cAAc,EAAE,sBAAsB,CAAC,CAAC,CAAA;YACzF,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,CAAC,IAAI,IAAI,CAAC,IAAI,KAAK,CAAC,UAAU,KAAK,MAAM,EAAE,CAAC;gBAC1E,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC,WAAW,EAAE,EAAE,MAAM,EAAE,eAAe,EAAE,CAAC,CAAA;gBACrE,QAAQ,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,QAAQ,CAAC,CAAA;gBACjC,OAAO,GAAG,MAAM,CAAC,GAAG,CAAC,MAAM,CAAA;gBAC3B,KAAK,CAAC,MAAM,CAAC,GAAG,cAAc,QAAQ,sBAAsB,KAAK,MAAM,KAAK,iBAAiB,EAAE,CAAC,CAAA;YAClG,CAAC;QACH,CAAC;QAED,IAAI,QAAQ,GAAG,CAAC,CAAA;QAChB,IAAI,SAAS,GAAG,CAAC,CAAA;QACjB,KAAK,MAAM,EAAE,WAAW,EAAE,EAAE,EAAE,IAAI,YAAY,EAAE,CAAC;YAC/C,MAAM,MAAM,GAAG,UAAU,CAAC,KAAK,CAAC,WAAW,CAAC,OAAO,EAAE,WAAW,CAAC,IAAI,CAAC,CAAA;YACtE,IAAI,CAAC,MAAM,CAAC,EAAE,EAAE,CAAC;gBACf,QAAQ,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC,CAAA;gBACzE,SAAQ;YACV,CAAC;YACD,MAAM,UAAU,GAAG,MAAM,CAAC,UAAU,CAAA;YACpC,WAAW,CAAC,IAAI,CAAC,UAAU,CAAC,CAAA;YAC5B,MAAM,OAAO,GACX,CAAC,UAAU,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,UAAU,CAAC,IAAI,IAAI,CAAC,CAAC;gBAC3D,CAAC,UAAU,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,UAAU,CAAC,IAAI,GAAG,CAAC,CAAC;oBACzD,SAAS,CAAA;YACX,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;gBAC1B,QAAQ,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,OAAO,EAAE,uEAAuE,EAAE,CAAC,CAAA;gBAC7G,SAAQ;YACV,CAAC;YACD,MAAM,KAAK,GAAG,gBAAgB,CAAC,KAAK,EAAE,UAAU,CAAC,OAAO,EAAE,UAAU,CAAC,mBAAmB,CAAC,CAAA;YACzF,IAAI,OAAO,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,UAAU,KAAK,OAAO;gBAC9C,CAAC,KAAK,CAAC,OAAO,IAAI,SAAS,CAAC,KAAK,WAAW,CAAC,OAAO,EAAE,CAAC;gBACzD,SAAS,IAAI,CAAC,CAAA;gBACd,SAAQ;YACV,CAAC;YACD,MAAM,WAAW,GAAG,WAAW,CAAC,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,WAAW,CAAC,OAAO,EAAE,CAAA;YACxF,KAAK,CAAC,MAAM,CAAC,GAAG,UAAU,CAAC,OAAO,QAAQ,UAAU,CAAC,mBAAmB,KAAK,OAAO,KAAK,iBAAiB,GAAG,WAAW,EAAE,CAAC,CAAA;YAC3H,QAAQ,IAAI,CAAC,CAAA;QACf,CAAC;QACD,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAE,CAAA;IAChE,CAAC,CAAC,CAAA;AACJ,CAAC,CAAA;AAMD;;;;;GAKG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,KAAY,EAAE,GAAW,EAAc,EAAE;IACzE,MAAM,OAAO,GAAG,UAAU,CAAC,iBAAiB,CAAC,GAAG,CAAC,CAAA;IACjD,MAAM,IAAI,GAAG,KAAK,CAAC,cAAc,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAC/C,GAAG,CAAC,OAAO,KAAK,OAAO,IAAI,GAAG,CAAC,IAAI,KAAK,KAAK,IAAI,GAAG,CAAC,SAAS,KAAK,UAAU,CAAC,mBAAmB;QACjG,GAAG,CAAC,OAAO,KAAK,CAAC,IAAI,GAAG,CAAC,IAAI,GAAG,CAAC,CAAC,CAAA;IACpC,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACtB,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,iCAAiC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE,EAAE,CAAA;IACrF,CAAC;IACD,OAAO,KAAK,CAAC,WAAW,CAAC,GAAG,EAAE;QAC5B,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;YACvB,KAAK,CAAC,YAAY,CAAC;gBACjB,MAAM,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,GAAG,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE,OAAO,EAAE,oCAAoC,EAAE,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC;gBACxH,KAAK,EAAE,EAAE;gBACT,QAAQ,EAAE,KAAK,CAAC,QAAQ,EAAE;gBAC1B,QAAQ,EAAE,EAAE;aACb,CAAC,CAAA;QACJ,CAAC;QACD,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,SAAS,EAAE,IAAI,CAAC,MAAM,EAAE,CAAA;IACtD,CAAC,CAAC,CAAA;AACJ,CAAC,CAAA"}
@@ -0,0 +1,125 @@
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 { type Store } from '@cavelang/store';
31
+ import * as Automation from './automation.ts';
32
+ import { type LoadProblem } from './declare.ts';
33
+ /** Attribute of per-automation watermark claims (spec §29.2). */
34
+ export declare const watermarkAttribute = "automate-watermark";
35
+ export declare const defaultMaxPasses = 20;
36
+ export declare const defaultAgentTimeoutSeconds = 120;
37
+ export type SettleOptions = {
38
+ /** Premises match through the alias closure (spec §13.6). */
39
+ readonly aliases?: boolean;
40
+ /** Fire the store's rules each pass (spec §29.4) — on by default. */
41
+ readonly derive?: boolean;
42
+ /** Shape gate for action steps (spec §25.3) — on by default. */
43
+ readonly check?: boolean;
44
+ /** Out-of-band hook command templates by name (spec §25.4). */
45
+ readonly hooks?: Readonly<Record<string, string>>;
46
+ /** Out-of-band agent for prompt steps — the shell contract's completion. */
47
+ readonly complete?: (prompt: string) => Promise<string>;
48
+ /** Cycle guard — maximum passes before giving up on quiescence. */
49
+ readonly maxPasses?: number;
50
+ /** Working directory for hook commands. */
51
+ readonly cwd?: string;
52
+ /** Hook wall-clock budget in seconds (default 600, like §25.4). */
53
+ readonly hookTimeoutSeconds?: number;
54
+ };
55
+ export type StepOutcome = {
56
+ /** Normalized step text — `action/<x>`, `hook/<y>`, or the prompt literal. */
57
+ readonly step: string;
58
+ readonly kind: Automation.Step['kind'];
59
+ /** `not-configured` is a legitimate, side-effect-free mode (§25.4, §29.3). */
60
+ readonly outcome: 'ok' | 'failed' | 'not-configured';
61
+ /** Claims the step appended or updated (action effects, agent reply). */
62
+ readonly appended?: number;
63
+ readonly detail?: string;
64
+ };
65
+ export type FiringOutcome = {
66
+ readonly bindings: Readonly<Record<string, string>>;
67
+ readonly steps: StepOutcome[];
68
+ };
69
+ export type AutomationOutcome = {
70
+ /** Declaration subject, `automation/<name>`. */
71
+ readonly subject: string;
72
+ readonly name: string;
73
+ readonly text: string;
74
+ readonly description?: string;
75
+ evaluations: number;
76
+ /** Firing solutions across the cycle's passes. */
77
+ fired: number;
78
+ readonly firings: FiringOutcome[];
79
+ };
80
+ export type DeriveTotals = {
81
+ passes: number;
82
+ appended: number;
83
+ updated: number;
84
+ retracted: number;
85
+ unchanged: number;
86
+ };
87
+ export type SettleReport = {
88
+ readonly passes: number;
89
+ readonly automations: readonly AutomationOutcome[];
90
+ /** Stored declarations that failed to parse — reported, skipped. */
91
+ readonly problems: readonly LoadProblem[];
92
+ /** Accumulated §24 derivation counts, absent under `derive: false`. */
93
+ readonly derive?: DeriveTotals;
94
+ readonly notes: readonly string[];
95
+ };
96
+ /** `true` when the report contains a failed step or a parse problem. */
97
+ export declare const settled: (report: SettleReport) => boolean;
98
+ /** Substitutes bound `?var`s into a prompt template, longest name first. */
99
+ export declare const substitutePrompt: (template: string, bindings: Readonly<Record<string, string>>) => string;
100
+ /**
101
+ * Substitutes `{automation}` and `{<var>}` placeholders in one pass —
102
+ * every value shell-quoted, never spliced raw (§25.4's rule); unknown
103
+ * placeholders stay.
104
+ */
105
+ export declare const substituteHook: (template: string, automation: string, bindings: Readonly<Record<string, string>>) => string;
106
+ /** The engine-built prompt around one instantiated template (spec §29.3). */
107
+ export declare const buildPrompt: (automation: Automation.t, description: undefined | string, instruction: string, claims: readonly string[]) => string;
108
+ /**
109
+ * Appends an agent reply (spec §29.3): lenient parse, `@src:automation/<name>`
110
+ * stamp, and the §24.4 idempotency convention per claim — a reply claim
111
+ * equal to its current belief appends nothing (claims cited by qualifier
112
+ * edges are kept, so reply structure survives).
113
+ */
114
+ export declare const appendReply: (store: Store, automation: Automation.t, reply: string) => {
115
+ appended: number;
116
+ problems: string[];
117
+ };
118
+ /**
119
+ * One settle cycle (spec §29.4): passes of derivation + trigger
120
+ * evaluation until nothing fires, bounded by `maxPasses`. Firing appends
121
+ * the watermark before running steps (§29.3); step failures are reported
122
+ * in the outcome and never abort the cycle.
123
+ */
124
+ export declare const settle: (store: Store, options?: SettleOptions) => Promise<SettleReport>;
125
+ //# sourceMappingURL=engine.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"engine.d.ts","sourceRoot":"","sources":["../../src/engine.ts"],"names":[],"mappings":"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"}