@mobrienv/autoloop 0.1.2

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 (307) hide show
  1. package/README.md +145 -0
  2. package/bin/autoloop +2 -0
  3. package/dist/backend/index.d.ts +10 -0
  4. package/dist/backend/index.js +59 -0
  5. package/dist/backend/index.js.map +1 -0
  6. package/dist/backend/run-command.d.ts +7 -0
  7. package/dist/backend/run-command.js +50 -0
  8. package/dist/backend/run-command.js.map +1 -0
  9. package/dist/backend/run-mock.d.ts +1 -0
  10. package/dist/backend/run-mock.js +6 -0
  11. package/dist/backend/run-mock.js.map +1 -0
  12. package/dist/backend/run-pi.d.ts +5 -0
  13. package/dist/backend/run-pi.js +5 -0
  14. package/dist/backend/run-pi.js.map +1 -0
  15. package/dist/backend/types.d.ts +21 -0
  16. package/dist/backend/types.js +2 -0
  17. package/dist/backend/types.js.map +1 -0
  18. package/dist/chains/budget.d.ts +7 -0
  19. package/dist/chains/budget.js +42 -0
  20. package/dist/chains/budget.js.map +1 -0
  21. package/dist/chains/load.d.ts +12 -0
  22. package/dist/chains/load.js +80 -0
  23. package/dist/chains/load.js.map +1 -0
  24. package/dist/chains/render.d.ts +2 -0
  25. package/dist/chains/render.js +46 -0
  26. package/dist/chains/render.js.map +1 -0
  27. package/dist/chains/run.d.ts +17 -0
  28. package/dist/chains/run.js +175 -0
  29. package/dist/chains/run.js.map +1 -0
  30. package/dist/chains/types.d.ts +37 -0
  31. package/dist/chains/types.js +2 -0
  32. package/dist/chains/types.js.map +1 -0
  33. package/dist/chains.d.ts +5 -0
  34. package/dist/chains.js +5 -0
  35. package/dist/chains.js.map +1 -0
  36. package/dist/commands/chain.d.ts +1 -0
  37. package/dist/commands/chain.js +51 -0
  38. package/dist/commands/chain.js.map +1 -0
  39. package/dist/commands/inspect.d.ts +1 -0
  40. package/dist/commands/inspect.js +95 -0
  41. package/dist/commands/inspect.js.map +1 -0
  42. package/dist/commands/list.d.ts +1 -0
  43. package/dist/commands/list.js +12 -0
  44. package/dist/commands/list.js.map +1 -0
  45. package/dist/commands/loops.d.ts +1 -0
  46. package/dist/commands/loops.js +72 -0
  47. package/dist/commands/loops.js.map +1 -0
  48. package/dist/commands/memory.d.ts +1 -0
  49. package/dist/commands/memory.js +65 -0
  50. package/dist/commands/memory.js.map +1 -0
  51. package/dist/commands/pi-adapter.d.ts +1 -0
  52. package/dist/commands/pi-adapter.js +6 -0
  53. package/dist/commands/pi-adapter.js.map +1 -0
  54. package/dist/commands/run.d.ts +1 -0
  55. package/dist/commands/run.js +185 -0
  56. package/dist/commands/run.js.map +1 -0
  57. package/dist/config.d.ts +16 -0
  58. package/dist/config.js +169 -0
  59. package/dist/config.js.map +1 -0
  60. package/dist/events/decode.d.ts +2 -0
  61. package/dist/events/decode.js +45 -0
  62. package/dist/events/decode.js.map +1 -0
  63. package/dist/events/encode.d.ts +2 -0
  64. package/dist/events/encode.js +33 -0
  65. package/dist/events/encode.js.map +1 -0
  66. package/dist/events/guards.d.ts +5 -0
  67. package/dist/events/guards.js +42 -0
  68. package/dist/events/guards.js.map +1 -0
  69. package/dist/events/types.d.ts +25 -0
  70. package/dist/events/types.js +2 -0
  71. package/dist/events/types.js.map +1 -0
  72. package/dist/harness/config-helpers.d.ts +24 -0
  73. package/dist/harness/config-helpers.js +231 -0
  74. package/dist/harness/config-helpers.js.map +1 -0
  75. package/dist/harness/coordination.d.ts +1 -0
  76. package/dist/harness/coordination.js +127 -0
  77. package/dist/harness/coordination.js.map +1 -0
  78. package/dist/harness/display.d.ts +20 -0
  79. package/dist/harness/display.js +130 -0
  80. package/dist/harness/display.js.map +1 -0
  81. package/dist/harness/emit.d.ts +15 -0
  82. package/dist/harness/emit.js +220 -0
  83. package/dist/harness/emit.js.map +1 -0
  84. package/dist/harness/index.d.ts +13 -0
  85. package/dist/harness/index.js +124 -0
  86. package/dist/harness/index.js.map +1 -0
  87. package/dist/harness/iteration.d.ts +4 -0
  88. package/dist/harness/iteration.js +129 -0
  89. package/dist/harness/iteration.js.map +1 -0
  90. package/dist/harness/journal.d.ts +13 -0
  91. package/dist/harness/journal.js +106 -0
  92. package/dist/harness/journal.js.map +1 -0
  93. package/dist/harness/metareview.d.ts +4 -0
  94. package/dist/harness/metareview.js +33 -0
  95. package/dist/harness/metareview.js.map +1 -0
  96. package/dist/harness/metrics.d.ts +12 -0
  97. package/dist/harness/metrics.js +180 -0
  98. package/dist/harness/metrics.js.map +1 -0
  99. package/dist/harness/parallel.d.ts +37 -0
  100. package/dist/harness/parallel.js +158 -0
  101. package/dist/harness/parallel.js.map +1 -0
  102. package/dist/harness/prompt.d.ts +35 -0
  103. package/dist/harness/prompt.js +328 -0
  104. package/dist/harness/prompt.js.map +1 -0
  105. package/dist/harness/scratchpad.d.ts +2 -0
  106. package/dist/harness/scratchpad.js +65 -0
  107. package/dist/harness/scratchpad.js.map +1 -0
  108. package/dist/harness/stop.d.ts +5 -0
  109. package/dist/harness/stop.js +63 -0
  110. package/dist/harness/stop.js.map +1 -0
  111. package/dist/harness/tools.d.ts +3 -0
  112. package/dist/harness/tools.js +39 -0
  113. package/dist/harness/tools.js.map +1 -0
  114. package/dist/harness/types.d.ts +81 -0
  115. package/dist/harness/types.js +2 -0
  116. package/dist/harness/types.js.map +1 -0
  117. package/dist/harness/wave/finalize-wave.d.ts +9 -0
  118. package/dist/harness/wave/finalize-wave.js +60 -0
  119. package/dist/harness/wave/finalize-wave.js.map +1 -0
  120. package/dist/harness/wave/launch-branches.d.ts +6 -0
  121. package/dist/harness/wave/launch-branches.js +218 -0
  122. package/dist/harness/wave/launch-branches.js.map +1 -0
  123. package/dist/harness/wave/parse-objectives.d.ts +3 -0
  124. package/dist/harness/wave/parse-objectives.js +29 -0
  125. package/dist/harness/wave/parse-objectives.js.map +1 -0
  126. package/dist/harness/wave/types.d.ts +43 -0
  127. package/dist/harness/wave/types.js +2 -0
  128. package/dist/harness/wave/types.js.map +1 -0
  129. package/dist/harness/wave.d.ts +6 -0
  130. package/dist/harness/wave.js +98 -0
  131. package/dist/harness/wave.js.map +1 -0
  132. package/dist/json.d.ts +8 -0
  133. package/dist/json.js +80 -0
  134. package/dist/json.js.map +1 -0
  135. package/dist/loops/health.d.ts +14 -0
  136. package/dist/loops/health.js +104 -0
  137. package/dist/loops/health.js.map +1 -0
  138. package/dist/loops/list.d.ts +6 -0
  139. package/dist/loops/list.js +21 -0
  140. package/dist/loops/list.js.map +1 -0
  141. package/dist/loops/render.d.ts +18 -0
  142. package/dist/loops/render.js +87 -0
  143. package/dist/loops/render.js.map +1 -0
  144. package/dist/loops/show.d.ts +8 -0
  145. package/dist/loops/show.js +31 -0
  146. package/dist/loops/show.js.map +1 -0
  147. package/dist/loops/watch.d.ts +8 -0
  148. package/dist/loops/watch.js +77 -0
  149. package/dist/loops/watch.js.map +1 -0
  150. package/dist/main.d.ts +1 -0
  151. package/dist/main.js +101 -0
  152. package/dist/main.js.map +1 -0
  153. package/dist/markdown.d.ts +10 -0
  154. package/dist/markdown.js +66 -0
  155. package/dist/markdown.js.map +1 -0
  156. package/dist/memory-render.d.ts +6 -0
  157. package/dist/memory-render.js +81 -0
  158. package/dist/memory-render.js.map +1 -0
  159. package/dist/memory.d.ts +23 -0
  160. package/dist/memory.js +314 -0
  161. package/dist/memory.js.map +1 -0
  162. package/dist/pi-adapter.d.ts +1 -0
  163. package/dist/pi-adapter.js +220 -0
  164. package/dist/pi-adapter.js.map +1 -0
  165. package/dist/registry/derive.d.ts +8 -0
  166. package/dist/registry/derive.js +81 -0
  167. package/dist/registry/derive.js.map +1 -0
  168. package/dist/registry/harness.d.ts +7 -0
  169. package/dist/registry/harness.js +57 -0
  170. package/dist/registry/harness.js.map +1 -0
  171. package/dist/registry/index.d.ts +5 -0
  172. package/dist/registry/index.js +5 -0
  173. package/dist/registry/index.js.map +1 -0
  174. package/dist/registry/read.d.ts +11 -0
  175. package/dist/registry/read.js +50 -0
  176. package/dist/registry/read.js.map +1 -0
  177. package/dist/registry/rebuild.d.ts +5 -0
  178. package/dist/registry/rebuild.js +19 -0
  179. package/dist/registry/rebuild.js.map +1 -0
  180. package/dist/registry/types.d.ts +19 -0
  181. package/dist/registry/types.js +2 -0
  182. package/dist/registry/types.js.map +1 -0
  183. package/dist/registry/update.d.ts +2 -0
  184. package/dist/registry/update.js +7 -0
  185. package/dist/registry/update.js.map +1 -0
  186. package/dist/testing/mock-backend.d.ts +11 -0
  187. package/dist/testing/mock-backend.js +76 -0
  188. package/dist/testing/mock-backend.js.map +1 -0
  189. package/dist/topology.d.ts +25 -0
  190. package/dist/topology.js +188 -0
  191. package/dist/topology.js.map +1 -0
  192. package/dist/usage.d.ts +8 -0
  193. package/dist/usage.js +114 -0
  194. package/dist/usage.js.map +1 -0
  195. package/dist/utils.d.ts +15 -0
  196. package/dist/utils.js +79 -0
  197. package/dist/utils.js.map +1 -0
  198. package/package.json +52 -0
  199. package/presets/autocode/README.md +81 -0
  200. package/presets/autocode/autoloops.toml +22 -0
  201. package/presets/autocode/harness.md +19 -0
  202. package/presets/autocode/miniloops.toml +22 -0
  203. package/presets/autocode/roles/build.md +33 -0
  204. package/presets/autocode/roles/critic.md +40 -0
  205. package/presets/autocode/roles/finalizer.md +43 -0
  206. package/presets/autocode/roles/planner.md +40 -0
  207. package/presets/autocode/topology.toml +32 -0
  208. package/presets/autodoc/README.md +42 -0
  209. package/presets/autodoc/autoloops.toml +21 -0
  210. package/presets/autodoc/harness.md +19 -0
  211. package/presets/autodoc/miniloops.toml +21 -0
  212. package/presets/autodoc/roles/auditor.md +39 -0
  213. package/presets/autodoc/roles/checker.md +43 -0
  214. package/presets/autodoc/roles/publisher.md +51 -0
  215. package/presets/autodoc/roles/writer.md +37 -0
  216. package/presets/autodoc/topology.toml +31 -0
  217. package/presets/autofix/README.md +56 -0
  218. package/presets/autofix/autoloops.toml +21 -0
  219. package/presets/autofix/harness.md +24 -0
  220. package/presets/autofix/miniloops.toml +21 -0
  221. package/presets/autofix/roles/closer.md +48 -0
  222. package/presets/autofix/roles/diagnoser.md +42 -0
  223. package/presets/autofix/roles/fixer.md +28 -0
  224. package/presets/autofix/roles/verifier.md +31 -0
  225. package/presets/autofix/topology.toml +33 -0
  226. package/presets/autoideas/README.md +73 -0
  227. package/presets/autoideas/autoloops.toml +18 -0
  228. package/presets/autoideas/harness.md +31 -0
  229. package/presets/autoideas/miniloops.toml +18 -0
  230. package/presets/autoideas/roles/analyst.md +32 -0
  231. package/presets/autoideas/roles/reviewer.md +36 -0
  232. package/presets/autoideas/roles/scanner.md +26 -0
  233. package/presets/autoideas/roles/synthesizer.md +48 -0
  234. package/presets/autoideas/topology.toml +32 -0
  235. package/presets/autoperf/README.md +56 -0
  236. package/presets/autoperf/autoloops.toml +21 -0
  237. package/presets/autoperf/harness.md +21 -0
  238. package/presets/autoperf/miniloops.toml +21 -0
  239. package/presets/autoperf/roles/judge.md +38 -0
  240. package/presets/autoperf/roles/measurer.md +36 -0
  241. package/presets/autoperf/roles/optimizer.md +35 -0
  242. package/presets/autoperf/roles/profiler.md +38 -0
  243. package/presets/autoperf/topology.toml +32 -0
  244. package/presets/autoqa/README.md +76 -0
  245. package/presets/autoqa/autoloops.toml +21 -0
  246. package/presets/autoqa/harness.md +30 -0
  247. package/presets/autoqa/miniloops.toml +21 -0
  248. package/presets/autoqa/roles/executor.md +43 -0
  249. package/presets/autoqa/roles/inspector.md +45 -0
  250. package/presets/autoqa/roles/planner.md +55 -0
  251. package/presets/autoqa/roles/reporter.md +74 -0
  252. package/presets/autoqa/topology.toml +31 -0
  253. package/presets/autoresearch/README.md +63 -0
  254. package/presets/autoresearch/autoloops.toml +18 -0
  255. package/presets/autoresearch/harness.md +28 -0
  256. package/presets/autoresearch/miniloops.toml +18 -0
  257. package/presets/autoresearch/roles/benchmarker.md +34 -0
  258. package/presets/autoresearch/roles/evaluator.md +33 -0
  259. package/presets/autoresearch/roles/implementer.md +26 -0
  260. package/presets/autoresearch/roles/strategist.md +43 -0
  261. package/presets/autoresearch/topology.toml +31 -0
  262. package/presets/autoreview/README.md +51 -0
  263. package/presets/autoreview/autoloops.toml +21 -0
  264. package/presets/autoreview/harness.md +20 -0
  265. package/presets/autoreview/miniloops.toml +21 -0
  266. package/presets/autoreview/roles/checker.md +36 -0
  267. package/presets/autoreview/roles/reader.md +33 -0
  268. package/presets/autoreview/roles/suggester.md +26 -0
  269. package/presets/autoreview/roles/summarizer.md +57 -0
  270. package/presets/autoreview/topology.toml +31 -0
  271. package/presets/autosec/README.md +51 -0
  272. package/presets/autosec/autoloops.toml +21 -0
  273. package/presets/autosec/harness.md +20 -0
  274. package/presets/autosec/miniloops.toml +21 -0
  275. package/presets/autosec/roles/analyst.md +38 -0
  276. package/presets/autosec/roles/hardener.md +36 -0
  277. package/presets/autosec/roles/reporter.md +63 -0
  278. package/presets/autosec/roles/scanner.md +38 -0
  279. package/presets/autosec/topology.toml +31 -0
  280. package/presets/autosimplify/README.md +83 -0
  281. package/presets/autosimplify/autoloops.toml +22 -0
  282. package/presets/autosimplify/harness.md +25 -0
  283. package/presets/autosimplify/miniloops.toml +22 -0
  284. package/presets/autosimplify/roles/reviewer.md +38 -0
  285. package/presets/autosimplify/roles/scoper.md +42 -0
  286. package/presets/autosimplify/roles/simplifier.md +51 -0
  287. package/presets/autosimplify/roles/verifier.md +40 -0
  288. package/presets/autosimplify/topology.toml +32 -0
  289. package/presets/autospec/README.md +84 -0
  290. package/presets/autospec/autoloops.toml +21 -0
  291. package/presets/autospec/harness.md +23 -0
  292. package/presets/autospec/miniloops.toml +21 -0
  293. package/presets/autospec/roles/clarifier.md +38 -0
  294. package/presets/autospec/roles/critic.md +41 -0
  295. package/presets/autospec/roles/designer.md +37 -0
  296. package/presets/autospec/roles/planner.md +38 -0
  297. package/presets/autospec/roles/researcher.md +33 -0
  298. package/presets/autospec/topology.toml +38 -0
  299. package/presets/autotest/README.md +55 -0
  300. package/presets/autotest/autoloops.toml +21 -0
  301. package/presets/autotest/harness.md +21 -0
  302. package/presets/autotest/miniloops.toml +21 -0
  303. package/presets/autotest/roles/assessor.md +57 -0
  304. package/presets/autotest/roles/runner.md +31 -0
  305. package/presets/autotest/roles/surveyor.md +39 -0
  306. package/presets/autotest/roles/writer.md +37 -0
  307. package/presets/autotest/topology.toml +32 -0
@@ -0,0 +1,185 @@
1
+ import * as harness from "../harness/index.js";
2
+ import * as chains from "../chains.js";
3
+ import * as config from "../config.js";
4
+ import { joinCsv } from "../utils.js";
5
+ import { printRunUsage, missingPresetError, unknownPresetError } from "../usage.js";
6
+ export function dispatchRun(args, argv, bundleRoot, selfCmd) {
7
+ if (args[0] === "--help" || args[0] === "-h") {
8
+ printRunUsage();
9
+ return true;
10
+ }
11
+ const options = parseRunArgs(args, bundleRoot);
12
+ if (options.usageError)
13
+ return true;
14
+ if (options.chain) {
15
+ runInlineChain(options.chain, options.projectDir, selfCmd, options);
16
+ return true;
17
+ }
18
+ harness.run(options.projectDir, normalizePrompt(options.prompt), selfCmd, options);
19
+ return true;
20
+ }
21
+ function parseRunArgs(args, bundleRoot) {
22
+ const options = {
23
+ projectDir: ".",
24
+ prompt: null,
25
+ backendOverride: {},
26
+ logLevel: null,
27
+ chain: null,
28
+ presetExplicit: false,
29
+ positionals: [],
30
+ usageError: false,
31
+ };
32
+ let i = 0;
33
+ while (i < args.length) {
34
+ const token = args[i];
35
+ if (token === "run") {
36
+ i++;
37
+ continue;
38
+ }
39
+ if (token === "--verbose" || token === "-v") {
40
+ options.logLevel = "debug";
41
+ i++;
42
+ continue;
43
+ }
44
+ if (token === "-b" || token === "--backend") {
45
+ const backend = args[i + 1];
46
+ if (!backend) {
47
+ console.log("missing backend after " + token);
48
+ options.usageError = true;
49
+ return options;
50
+ }
51
+ options.backendOverride = backendOverrideSpec(backend);
52
+ i += 2;
53
+ continue;
54
+ }
55
+ if (token === "-p" || token === "--preset") {
56
+ const preset = args[i + 1];
57
+ if (!preset) {
58
+ console.log("missing preset after " + token);
59
+ options.usageError = true;
60
+ return options;
61
+ }
62
+ const resolved = config.resolveProjectDir(preset, bundleRoot);
63
+ if (!resolved) {
64
+ console.log("preset `" + preset + "` not found");
65
+ options.usageError = true;
66
+ return options;
67
+ }
68
+ options.projectDir = resolved;
69
+ options.presetExplicit = true;
70
+ i += 2;
71
+ continue;
72
+ }
73
+ if (token === "--chain") {
74
+ const chainVal = args[i + 1];
75
+ if (!chainVal) {
76
+ console.log("missing chain after --chain");
77
+ options.usageError = true;
78
+ return options;
79
+ }
80
+ options.chain = chainVal;
81
+ i += 2;
82
+ continue;
83
+ }
84
+ if (token === "-i" || token === "--iterations") {
85
+ console.log("unsupported flag `" + token + "`; set event_loop.max_iterations in the preset config");
86
+ options.usageError = true;
87
+ return options;
88
+ }
89
+ options.positionals.push(token);
90
+ i++;
91
+ }
92
+ return finalizeRunArgs(options, bundleRoot);
93
+ }
94
+ function finalizeRunArgs(options, bundleRoot) {
95
+ if (options.usageError)
96
+ return options;
97
+ const positionals = options.positionals;
98
+ if (options.presetExplicit) {
99
+ options.prompt = positionals.join(" ") || null;
100
+ return options;
101
+ }
102
+ if (positionals.length === 0) {
103
+ if (options.chain) {
104
+ options.projectDir = defaultChainProjectDir(bundleRoot);
105
+ return options;
106
+ }
107
+ missingPresetError();
108
+ options.usageError = true;
109
+ return options;
110
+ }
111
+ const first = positionals[0];
112
+ const rest = positionals.slice(1);
113
+ if (options.chain) {
114
+ if (looksLikeProjectDir(first)) {
115
+ options.projectDir = first;
116
+ options.prompt = rest.join(" ") || null;
117
+ }
118
+ else {
119
+ options.projectDir = defaultChainProjectDir(bundleRoot);
120
+ options.prompt = positionals.join(" ") || null;
121
+ }
122
+ return options;
123
+ }
124
+ if (looksLikeProjectDir(first)) {
125
+ options.projectDir = first;
126
+ options.prompt = rest.join(" ") || null;
127
+ return options;
128
+ }
129
+ const bundledPreset = config.resolveProjectDir(first, bundleRoot);
130
+ if (!bundledPreset) {
131
+ unknownPresetError(first);
132
+ options.usageError = true;
133
+ return options;
134
+ }
135
+ options.projectDir = bundledPreset;
136
+ options.prompt = rest.join(" ") || null;
137
+ return options;
138
+ }
139
+ function runInlineChain(chainCsv, projectDir, selfCmd, options) {
140
+ const chainSpec = chains.parseInlineChain(chainCsv, projectDir);
141
+ const stepNames = chainSpec.steps.map((s) => s.name);
142
+ const validation = chains.validatePresetVocabulary(stepNames, projectDir);
143
+ if (!validation.ok) {
144
+ console.log("error: invalid inline chain");
145
+ console.log("");
146
+ console.log(validation.reason ?? "");
147
+ console.log("");
148
+ console.log("Known presets: " + joinCsv(chains.listKnownPresets()));
149
+ return;
150
+ }
151
+ chains.runChain(chainSpec, projectDir, selfCmd, { prompt: normalizePrompt(options.prompt) });
152
+ }
153
+ function normalizePrompt(prompt) {
154
+ if (prompt === null || prompt === "")
155
+ return null;
156
+ return prompt;
157
+ }
158
+ function backendOverrideSpec(backend) {
159
+ if (backend === "pi") {
160
+ return { kind: "pi", command: "pi", args: [], prompt_mode: "arg" };
161
+ }
162
+ if (claudeBackend(backend)) {
163
+ return { kind: "command", command: backend, args: ["-p", "--dangerously-skip-permissions"], prompt_mode: "arg" };
164
+ }
165
+ return { kind: "command", command: backend, args: [], prompt_mode: "arg" };
166
+ }
167
+ function claudeBackend(backend) {
168
+ return backend === "claude" || backend.endsWith("/claude");
169
+ }
170
+ function looksLikeProjectDir(path) {
171
+ try {
172
+ if (!require("node:fs").statSync(path).isDirectory())
173
+ return false;
174
+ }
175
+ catch {
176
+ return false;
177
+ }
178
+ return config.projectHasConfig(path);
179
+ }
180
+ function defaultChainProjectDir(bundleRoot) {
181
+ if (looksLikeProjectDir("."))
182
+ return ".";
183
+ return bundleRoot;
184
+ }
185
+ //# sourceMappingURL=run.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"run.js","sourceRoot":"","sources":["../../src/commands/run.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,16 @@
1
+ export type Config = Record<string, unknown>;
2
+ export declare function loadProject(projectDir: string): Config;
3
+ export declare function load(path: string): Config;
4
+ export declare function get(config: Config, key: string, fallback: string): string;
5
+ export declare function getInt(config: Config, key: string, fallback: number): number;
6
+ export declare function getList(config: Config, key: string): string[];
7
+ export declare function put(config: Config, key: string, value: string): Config;
8
+ export declare function projectHasConfig(projectDir: string): boolean;
9
+ export declare function resolveProjectDir(projectDirOrPreset: string, bundleRoot: string): string;
10
+ export declare function resolveJournalFile(projectDir: string): string;
11
+ export declare function resolveJournalFileIn(projectDir: string, workDir: string): string;
12
+ export declare function resolveEventsFile(projectDir: string): string;
13
+ export declare function resolveMemoryFile(projectDir: string): string;
14
+ export declare function resolveMemoryFileIn(projectDir: string, workDir: string): string;
15
+ export declare function stateDirName(projectDir: string): string;
16
+ export declare function stateDirPath(projectDir: string): string;
package/dist/config.js ADDED
@@ -0,0 +1,169 @@
1
+ import { existsSync, readFileSync } from "node:fs";
2
+ import { join } from "node:path";
3
+ import TOML from "@iarna/toml";
4
+ import { parseStringList } from "./utils.js";
5
+ export function loadProject(projectDir) {
6
+ return load(resolveConfigPath(projectDir));
7
+ }
8
+ export function load(path) {
9
+ if (!existsSync(path))
10
+ return defaults();
11
+ return parseToml(readFileSync(path, "utf-8"));
12
+ }
13
+ export function get(config, key, fallback) {
14
+ const parts = key.split(".");
15
+ return getPath(config, parts, fallback);
16
+ }
17
+ function getPath(config, path, fallback) {
18
+ if (path.length === 0)
19
+ return fallback;
20
+ const key = path[0];
21
+ const value = config[key];
22
+ if (value === undefined || value === null)
23
+ return fallback;
24
+ if (path.length === 1)
25
+ return String(value);
26
+ if (typeof value === "object" && value !== null) {
27
+ return getPath(value, path.slice(1), fallback);
28
+ }
29
+ return fallback;
30
+ }
31
+ export function getInt(config, key, fallback) {
32
+ const raw = get(config, key, "");
33
+ if (raw === "")
34
+ return fallback;
35
+ const parsed = parseInt(raw, 10);
36
+ return isNaN(parsed) ? fallback : parsed;
37
+ }
38
+ export function getList(config, key) {
39
+ return parseStringList(get(config, key, ""));
40
+ }
41
+ export function put(config, key, value) {
42
+ const parts = key.split(".");
43
+ return putPath(config, parts, value);
44
+ }
45
+ function putPath(config, path, value) {
46
+ if (path.length === 0)
47
+ return config;
48
+ const result = { ...config };
49
+ if (path.length === 1) {
50
+ result[path[0]] = value;
51
+ return result;
52
+ }
53
+ const inner = typeof result[path[0]] === "object" && result[path[0]] !== null
54
+ ? { ...result[path[0]] }
55
+ : {};
56
+ result[path[0]] = putPath(inner, path.slice(1), value);
57
+ return result;
58
+ }
59
+ export function projectHasConfig(projectDir) {
60
+ return (existsSync(join(projectDir, "autoloops.toml")) ||
61
+ existsSync(join(projectDir, "autoloops.conf")));
62
+ }
63
+ export function resolveProjectDir(projectDirOrPreset, bundleRoot) {
64
+ if (projectHasConfig(projectDirOrPreset))
65
+ return projectDirOrPreset;
66
+ return resolveBundledPresetDir(projectDirOrPreset, bundleRoot);
67
+ }
68
+ export function resolveJournalFile(projectDir) {
69
+ const config = loadProject(projectDir);
70
+ return join(projectDir, journalPath(config));
71
+ }
72
+ export function resolveJournalFileIn(projectDir, workDir) {
73
+ const config = loadProject(projectDir);
74
+ return join(workDir, journalPath(config));
75
+ }
76
+ export function resolveEventsFile(projectDir) {
77
+ return resolveJournalFile(projectDir);
78
+ }
79
+ export function resolveMemoryFile(projectDir) {
80
+ const config = loadProject(projectDir);
81
+ return join(projectDir, get(config, "core.memory_file", ".autoloop/memory.jsonl"));
82
+ }
83
+ export function resolveMemoryFileIn(projectDir, workDir) {
84
+ const config = loadProject(projectDir);
85
+ return join(workDir, get(config, "core.memory_file", ".autoloop/memory.jsonl"));
86
+ }
87
+ export function stateDirName(projectDir) {
88
+ const config = loadProject(projectDir);
89
+ return get(config, "core.state_dir", ".autoloop");
90
+ }
91
+ export function stateDirPath(projectDir) {
92
+ return join(projectDir, stateDirName(projectDir));
93
+ }
94
+ function journalPath(config) {
95
+ return get(config, "core.journal_file", get(config, "core.events_file", ".autoloop/journal.jsonl"));
96
+ }
97
+ function resolveBundledPresetDir(name, bundleRoot) {
98
+ const bundleCandidate = join(bundleRoot, "presets/" + name);
99
+ if (projectHasConfig(bundleCandidate))
100
+ return bundleCandidate;
101
+ const cwdCandidate = join(".", "presets/" + name);
102
+ if (projectHasConfig(cwdCandidate))
103
+ return cwdCandidate;
104
+ return "";
105
+ }
106
+ function resolveConfigPath(projectDir) {
107
+ const tomlPath = join(projectDir, "autoloops.toml");
108
+ if (existsSync(tomlPath))
109
+ return tomlPath;
110
+ return join(projectDir, "autoloops.conf");
111
+ }
112
+ function defaults() {
113
+ return {
114
+ event_loop: {
115
+ max_iterations: "3",
116
+ completion_promise: "LOOP_COMPLETE",
117
+ completion_event: "task.complete",
118
+ required_events: "",
119
+ },
120
+ backend: { kind: "pi", command: "pi", timeout_ms: "300000" },
121
+ parallel: {
122
+ enabled: "false",
123
+ max_branches: "3",
124
+ branch_timeout_ms: "180000",
125
+ },
126
+ memory: { prompt_budget_chars: "8000" },
127
+ core: {
128
+ state_dir: ".autoloop",
129
+ journal_file: ".autoloop/journal.jsonl",
130
+ events_file: ".autoloop/journal.jsonl",
131
+ memory_file: ".autoloop/memory.jsonl",
132
+ run_id_format: "compact",
133
+ log_level: "info",
134
+ },
135
+ };
136
+ }
137
+ function parseToml(text) {
138
+ const parsed = TOML.parse(text);
139
+ return deepMerge(defaults(), stringifyValues(parsed));
140
+ }
141
+ function stringifyValues(obj) {
142
+ const result = {};
143
+ for (const [key, value] of Object.entries(obj)) {
144
+ if (Array.isArray(value)) {
145
+ result[key] = value.map(String).join(",");
146
+ }
147
+ else if (typeof value === "object" && value !== null) {
148
+ result[key] = stringifyValues(value);
149
+ }
150
+ else {
151
+ result[key] = String(value);
152
+ }
153
+ }
154
+ return result;
155
+ }
156
+ function deepMerge(base, override) {
157
+ const result = { ...base };
158
+ for (const [key, value] of Object.entries(override)) {
159
+ if (typeof value === "object" && value !== null && !Array.isArray(value) &&
160
+ typeof result[key] === "object" && result[key] !== null) {
161
+ result[key] = deepMerge(result[key], value);
162
+ }
163
+ else {
164
+ result[key] = value;
165
+ }
166
+ }
167
+ return result;
168
+ }
169
+ //# sourceMappingURL=config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ import type { JournalEvent } from "./types.js";
2
+ export declare function decodeEvent(line: string): JournalEvent | null;
@@ -0,0 +1,45 @@
1
+ export function decodeEvent(line) {
2
+ if (!line.trim())
3
+ return null;
4
+ try {
5
+ const parsed = JSON.parse(line);
6
+ const run = typeof parsed.run === "string" ? parsed.run : "";
7
+ const topic = typeof parsed.topic === "string" ? parsed.topic : "";
8
+ const iteration = typeof parsed.iteration === "string" ? parsed.iteration : undefined;
9
+ if (typeof parsed.payload === "string") {
10
+ const event = {
11
+ shape: "payload",
12
+ run,
13
+ topic,
14
+ payload: parsed.payload,
15
+ };
16
+ if (iteration)
17
+ event.iteration = iteration;
18
+ if (typeof parsed.source === "string")
19
+ event.source = parsed.source;
20
+ return event;
21
+ }
22
+ const rawFields = isObject(parsed.fields) ? parsed.fields : {};
23
+ const fields = {};
24
+ for (const [key, value] of Object.entries(rawFields)) {
25
+ fields[key] = value === null || value === undefined ? "" : String(value);
26
+ }
27
+ const event = {
28
+ shape: "fields",
29
+ run,
30
+ topic,
31
+ fields,
32
+ rawFields,
33
+ };
34
+ if (iteration)
35
+ event.iteration = iteration;
36
+ return event;
37
+ }
38
+ catch {
39
+ return null;
40
+ }
41
+ }
42
+ function isObject(value) {
43
+ return typeof value === "object" && value !== null && !Array.isArray(value);
44
+ }
45
+ //# sourceMappingURL=decode.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"decode.js","sourceRoot":"","sources":["../../src/events/decode.ts"],"names":[],"mappings":"AAEA,MAAM,UAAU,WAAW,CAAC,IAAY;IACtC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE;QAAE,OAAO,IAAI,CAAC;IAC9B,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAA4B,CAAC;QAC3D,MAAM,GAAG,GAAG,OAAO,MAAM,CAAC,GAAG,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;QAC7D,MAAM,KAAK,GAAG,OAAO,MAAM,CAAC,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC;QACnE,MAAM,SAAS,GAAG,OAAO,MAAM,CAAC,SAAS,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC;QAEtF,IAAI,OAAO,MAAM,CAAC,OAAO,KAAK,QAAQ,EAAE,CAAC;YACvC,MAAM,KAAK,GAAiB;gBAC1B,KAAK,EAAE,SAAS;gBAChB,GAAG;gBACH,KAAK;gBACL,OAAO,EAAE,MAAM,CAAC,OAAO;aACxB,CAAC;YACF,IAAI,SAAS;gBAAE,KAAK,CAAC,SAAS,GAAG,SAAS,CAAC;YAC3C,IAAI,OAAO,MAAM,CAAC,MAAM,KAAK,QAAQ;gBAAE,KAAK,CAAC,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC;YACpE,OAAO,KAAK,CAAC;QACf,CAAC;QAED,MAAM,SAAS,GAAG,QAAQ,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC;QAC/D,MAAM,MAAM,GAA2B,EAAE,CAAC;QAC1C,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE,CAAC;YACrD,MAAM,CAAC,GAAG,CAAC,GAAG,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QAC3E,CAAC;QACD,MAAM,KAAK,GAAgB;YACzB,KAAK,EAAE,QAAQ;YACf,GAAG;YACH,KAAK;YACL,MAAM;YACN,SAAS;SACV,CAAC;QACF,IAAI,SAAS;YAAE,KAAK,CAAC,SAAS,GAAG,SAAS,CAAC;QAC3C,OAAO,KAAK,CAAC;IACf,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED,SAAS,QAAQ,CAAC,KAAc;IAC9B,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;AAC9E,CAAC"}
@@ -0,0 +1,2 @@
1
+ import type { JournalEvent } from "./types.js";
2
+ export declare function encodeEvent(event: JournalEvent): string;
@@ -0,0 +1,33 @@
1
+ import { jsonField, jsonFieldRaw, jsonBool } from "../json.js";
2
+ export function encodeEvent(event) {
3
+ const base = [jsonField("run", event.run)];
4
+ if (event.iteration)
5
+ base.push(jsonField("iteration", event.iteration));
6
+ base.push(jsonField("topic", String(event.topic)));
7
+ if (event.shape === "payload") {
8
+ base.push(jsonField("payload", event.payload));
9
+ if (event.source)
10
+ base.push(jsonField("source", event.source));
11
+ return "{" + base.join(", ") + "}\n";
12
+ }
13
+ return ("{" +
14
+ base.join(", ") +
15
+ ', "fields": {' +
16
+ encodeFields(event.rawFields ?? event.fields) +
17
+ "}}\n");
18
+ }
19
+ function encodeFields(fields) {
20
+ return Object.entries(fields)
21
+ .map(([key, value]) => encodeField(key, value))
22
+ .join(", ");
23
+ }
24
+ function encodeField(key, value) {
25
+ if (typeof value === "boolean")
26
+ return jsonFieldRaw(key, jsonBool(value));
27
+ if (typeof value === "number")
28
+ return jsonFieldRaw(key, String(value));
29
+ if (value === null)
30
+ return jsonFieldRaw(key, "null");
31
+ return jsonField(key, String(value ?? ""));
32
+ }
33
+ //# sourceMappingURL=encode.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"encode.js","sourceRoot":"","sources":["../../src/events/encode.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,YAAY,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAG/D,MAAM,UAAU,WAAW,CAAC,KAAmB;IAC7C,MAAM,IAAI,GAAG,CAAC,SAAS,CAAC,KAAK,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC;IAC3C,IAAI,KAAK,CAAC,SAAS;QAAE,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,WAAW,EAAE,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC;IACxE,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IAEnD,IAAI,KAAK,CAAC,KAAK,KAAK,SAAS,EAAE,CAAC;QAC9B,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,SAAS,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC;QAC/C,IAAI,KAAK,CAAC,MAAM;YAAE,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC;QAC/D,OAAO,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC;IACvC,CAAC;IAED,OAAO,CACL,GAAG;QACH,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC;QACf,eAAe;QACf,YAAY,CAAC,KAAK,CAAC,SAAS,IAAI,KAAK,CAAC,MAAM,CAAC;QAC7C,MAAM,CACP,CAAC;AACJ,CAAC;AAED,SAAS,YAAY,CAAC,MAA+B;IACnD,OAAO,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC;SAC1B,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,WAAW,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;SAC9C,IAAI,CAAC,IAAI,CAAC,CAAC;AAChB,CAAC;AAED,SAAS,WAAW,CAAC,GAAW,EAAE,KAAc;IAC9C,IAAI,OAAO,KAAK,KAAK,SAAS;QAAE,OAAO,YAAY,CAAC,GAAG,EAAE,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC;IAC1E,IAAI,OAAO,KAAK,KAAK,QAAQ;QAAE,OAAO,YAAY,CAAC,GAAG,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;IACvE,IAAI,KAAK,KAAK,IAAI;QAAE,OAAO,YAAY,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;IACrD,OAAO,SAAS,CAAC,GAAG,EAAE,MAAM,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,CAAC;AAC7C,CAAC"}
@@ -0,0 +1,5 @@
1
+ import type { JournalEvent } from "./types.js";
2
+ export declare function isPayloadEvent(event: JournalEvent | null): boolean;
3
+ export declare function isSystemEvent(event: JournalEvent | null): boolean;
4
+ export declare function isCoordinationEvent(event: JournalEvent | null): boolean;
5
+ export declare function isRoutingEvent(event: JournalEvent | null): boolean;
@@ -0,0 +1,42 @@
1
+ const SYSTEM_TOPICS = new Set([
2
+ "iteration.start",
3
+ "iteration.finish",
4
+ "loop.start",
5
+ "loop.complete",
6
+ "loop.stop",
7
+ "review.start",
8
+ "review.finish",
9
+ "backend.start",
10
+ "backend.finish",
11
+ "event.invalid",
12
+ ]);
13
+ const COORDINATION_TOPICS = new Set([
14
+ "issue.discovered",
15
+ "issue.resolved",
16
+ "slice.started",
17
+ "slice.verified",
18
+ "slice.committed",
19
+ "context.archived",
20
+ "chain.spawn",
21
+ ]);
22
+ export function isPayloadEvent(event) {
23
+ return !!event && event.shape === "payload";
24
+ }
25
+ export function isSystemEvent(event) {
26
+ if (!event)
27
+ return false;
28
+ if (SYSTEM_TOPICS.has(String(event.topic)))
29
+ return true;
30
+ return String(event.topic).startsWith("wave.");
31
+ }
32
+ export function isCoordinationEvent(event) {
33
+ return !!event && COORDINATION_TOPICS.has(String(event.topic));
34
+ }
35
+ export function isRoutingEvent(event) {
36
+ if (!event)
37
+ return false;
38
+ if (isCoordinationEvent(event) || isSystemEvent(event))
39
+ return false;
40
+ return String(event.topic) !== "";
41
+ }
42
+ //# sourceMappingURL=guards.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"guards.js","sourceRoot":"","sources":["../../src/events/guards.ts"],"names":[],"mappings":"AAEA,MAAM,aAAa,GAAG,IAAI,GAAG,CAAC;IAC5B,iBAAiB;IACjB,kBAAkB;IAClB,YAAY;IACZ,eAAe;IACf,WAAW;IACX,cAAc;IACd,eAAe;IACf,eAAe;IACf,gBAAgB;IAChB,eAAe;CAChB,CAAC,CAAC;AAEH,MAAM,mBAAmB,GAAG,IAAI,GAAG,CAAC;IAClC,kBAAkB;IAClB,gBAAgB;IAChB,eAAe;IACf,gBAAgB;IAChB,iBAAiB;IACjB,kBAAkB;IAClB,aAAa;CACd,CAAC,CAAC;AAEH,MAAM,UAAU,cAAc,CAAC,KAA0B;IACvD,OAAO,CAAC,CAAC,KAAK,IAAI,KAAK,CAAC,KAAK,KAAK,SAAS,CAAC;AAC9C,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,KAA0B;IACtD,IAAI,CAAC,KAAK;QAAE,OAAO,KAAK,CAAC;IACzB,IAAI,aAAa,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QAAE,OAAO,IAAI,CAAC;IACxD,OAAO,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;AACjD,CAAC;AAED,MAAM,UAAU,mBAAmB,CAAC,KAA0B;IAC5D,OAAO,CAAC,CAAC,KAAK,IAAI,mBAAmB,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC;AACjE,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,KAA0B;IACvD,IAAI,CAAC,KAAK;QAAE,OAAO,KAAK,CAAC;IACzB,IAAI,mBAAmB,CAAC,KAAK,CAAC,IAAI,aAAa,CAAC,KAAK,CAAC;QAAE,OAAO,KAAK,CAAC;IACrE,OAAO,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;AACpC,CAAC"}
@@ -0,0 +1,25 @@
1
+ export type LoopTopic = "loop.start" | "loop.complete" | "loop.stop";
2
+ export type IterationTopic = "iteration.start" | "iteration.finish";
3
+ export type BackendTopic = "backend.start" | "backend.finish";
4
+ export type ReviewTopic = "review.start" | "review.finish";
5
+ export type CoordinationTopic = "issue.discovered" | "issue.resolved" | "slice.started" | "slice.verified" | "slice.committed" | "context.archived" | "chain.spawn";
6
+ export type ChainTopic = "chain.start" | "chain.complete";
7
+ export type WaveTopic = string;
8
+ export type CoreSystemTopic = LoopTopic | IterationTopic | BackendTopic | ReviewTopic | "event.invalid";
9
+ export type KnownTopic = CoreSystemTopic | CoordinationTopic | ChainTopic | WaveTopic | string;
10
+ export interface EventBase {
11
+ run: string;
12
+ topic: KnownTopic;
13
+ iteration?: string;
14
+ }
15
+ export interface FieldsEvent extends EventBase {
16
+ shape: "fields";
17
+ fields: Record<string, string>;
18
+ rawFields?: Record<string, unknown>;
19
+ }
20
+ export interface PayloadEvent extends EventBase {
21
+ shape: "payload";
22
+ payload: string;
23
+ source?: string;
24
+ }
25
+ export type JournalEvent = FieldsEvent | PayloadEvent;
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/events/types.ts"],"names":[],"mappings":""}
@@ -0,0 +1,24 @@
1
+ import * as config from "../config.js";
2
+ import * as topo from "../topology.js";
3
+ import type { LoopContext, RunOptions } from "./types.js";
4
+ export declare function resolvePrompt(projectDir: string, cfg: config.Config, override: string | null): string;
5
+ export declare function resolveReviewPrompt(projectDir: string, cfg: config.Config): string;
6
+ export declare function readOptionalProjectFile(projectDir: string, relativePath: string): string;
7
+ export declare function resolveReviewEvery(cfg: config.Config, topoData: topo.Topology): number;
8
+ export declare function truthySetting(value: string): boolean;
9
+ export declare function ensureLayout(stateDir: string): void;
10
+ export declare function installRuntimeTools(loop: LoopContext): void;
11
+ export declare function resolveProcessKind(kind: string, command: string): string;
12
+ export declare function normalizePromptMode(value: string): string;
13
+ export declare function configListWithFallback(cfg: config.Config, key: string, fallback: string[]): string[];
14
+ export declare function processStringOverride(override: Record<string, unknown>, key: string, fallback: string): string;
15
+ export declare function processListOverride(override: Record<string, unknown>, key: string, fallback: string[]): string[];
16
+ export declare function nextRunId(path: string, cfg: config.Config): string;
17
+ export declare function iterationFieldForRun(journalFile: string, runId: string, iteration: string, topic: string, field: string): string;
18
+ export declare function ensureRenderRunId(journalFile: string): string;
19
+ export declare function absolutePath(path: string): string;
20
+ export declare function emptyFallback(text: string): string;
21
+ export declare function buildLoopContext(projectDir: string, promptOverride: string | null, selfCommand: string, runOptions: RunOptions): LoopContext;
22
+ export declare function reloadLoop(loop: LoopContext): LoopContext;
23
+ export declare function applyRuntimeModeOverrides(loop: LoopContext): LoopContext;
24
+ export declare function initStore(loop: LoopContext): LoopContext;