voratiq 0.1.0-beta.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 (302) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +59 -0
  3. package/dist/auth/providers/claude/constants.d.ts +7 -0
  4. package/dist/auth/providers/claude/constants.js +9 -0
  5. package/dist/auth/providers/claude/credentials.d.ts +5 -0
  6. package/dist/auth/providers/claude/credentials.js +112 -0
  7. package/dist/auth/providers/claude/error.d.ts +5 -0
  8. package/dist/auth/providers/claude/error.js +6 -0
  9. package/dist/auth/providers/claude/keychain.d.ts +4 -0
  10. package/dist/auth/providers/claude/keychain.js +158 -0
  11. package/dist/auth/providers/claude.d.ts +2 -0
  12. package/dist/auth/providers/claude.js +124 -0
  13. package/dist/auth/providers/codex.d.ts +2 -0
  14. package/dist/auth/providers/codex.js +93 -0
  15. package/dist/auth/providers/gemini.d.ts +2 -0
  16. package/dist/auth/providers/gemini.js +159 -0
  17. package/dist/auth/providers/index.d.ts +2 -0
  18. package/dist/auth/providers/index.js +16 -0
  19. package/dist/auth/providers/messages.d.ts +1 -0
  20. package/dist/auth/providers/messages.js +3 -0
  21. package/dist/auth/providers/secret-staging.d.ts +14 -0
  22. package/dist/auth/providers/secret-staging.js +72 -0
  23. package/dist/auth/providers/teardown.d.ts +2 -0
  24. package/dist/auth/providers/teardown.js +6 -0
  25. package/dist/auth/providers/types.d.ts +31 -0
  26. package/dist/auth/providers/types.js +1 -0
  27. package/dist/auth/providers/utils.d.ts +20 -0
  28. package/dist/auth/providers/utils.js +148 -0
  29. package/dist/auth/runtime.d.ts +2 -0
  30. package/dist/auth/runtime.js +17 -0
  31. package/dist/auth/staging.d.ts +8 -0
  32. package/dist/auth/staging.js +7 -0
  33. package/dist/bin.d.ts +2 -0
  34. package/dist/bin.js +142 -0
  35. package/dist/cli/apply.d.ts +14 -0
  36. package/dist/cli/apply.js +38 -0
  37. package/dist/cli/commander-utils.d.ts +3 -0
  38. package/dist/cli/commander-utils.js +27 -0
  39. package/dist/cli/confirmation.d.ts +14 -0
  40. package/dist/cli/confirmation.js +16 -0
  41. package/dist/cli/errors.d.ts +5 -0
  42. package/dist/cli/errors.js +16 -0
  43. package/dist/cli/init.d.ts +10 -0
  44. package/dist/cli/init.js +41 -0
  45. package/dist/cli/list.d.ts +14 -0
  46. package/dist/cli/list.js +48 -0
  47. package/dist/cli/output.d.ts +14 -0
  48. package/dist/cli/output.js +62 -0
  49. package/dist/cli/prune.d.ts +14 -0
  50. package/dist/cli/prune.js +54 -0
  51. package/dist/cli/review.d.ts +12 -0
  52. package/dist/cli/review.js +33 -0
  53. package/dist/cli/run.d.ts +13 -0
  54. package/dist/cli/run.js +51 -0
  55. package/dist/commands/apply/command.d.ts +9 -0
  56. package/dist/commands/apply/command.js +135 -0
  57. package/dist/commands/apply/errors.d.ts +35 -0
  58. package/dist/commands/apply/errors.js +73 -0
  59. package/dist/commands/apply/types.d.ts +13 -0
  60. package/dist/commands/apply/types.js +1 -0
  61. package/dist/commands/errors.d.ts +4 -0
  62. package/dist/commands/errors.js +7 -0
  63. package/dist/commands/fetch.d.ts +8 -0
  64. package/dist/commands/fetch.js +25 -0
  65. package/dist/commands/init/agents.d.ts +3 -0
  66. package/dist/commands/init/agents.js +159 -0
  67. package/dist/commands/init/command.d.ts +2 -0
  68. package/dist/commands/init/command.js +40 -0
  69. package/dist/commands/init/environment.d.ts +2 -0
  70. package/dist/commands/init/environment.js +76 -0
  71. package/dist/commands/init/evals.d.ts +4 -0
  72. package/dist/commands/init/evals.js +219 -0
  73. package/dist/commands/init/types.d.ts +48 -0
  74. package/dist/commands/init/types.js +1 -0
  75. package/dist/commands/list/command.d.ts +13 -0
  76. package/dist/commands/list/command.js +60 -0
  77. package/dist/commands/prune/command.d.ts +2 -0
  78. package/dist/commands/prune/command.js +336 -0
  79. package/dist/commands/prune/errors.d.ts +20 -0
  80. package/dist/commands/prune/errors.js +39 -0
  81. package/dist/commands/prune/types.d.ts +42 -0
  82. package/dist/commands/prune/types.js +1 -0
  83. package/dist/commands/review/command.d.ts +10 -0
  84. package/dist/commands/review/command.js +26 -0
  85. package/dist/commands/run/agent-execution.d.ts +19 -0
  86. package/dist/commands/run/agent-execution.js +63 -0
  87. package/dist/commands/run/agents/auth-stage.d.ts +23 -0
  88. package/dist/commands/run/agents/auth-stage.js +108 -0
  89. package/dist/commands/run/agents/chat-preserver.d.ts +9 -0
  90. package/dist/commands/run/agents/chat-preserver.js +35 -0
  91. package/dist/commands/run/agents/eval-runner.d.ts +19 -0
  92. package/dist/commands/run/agents/eval-runner.js +27 -0
  93. package/dist/commands/run/agents/failures.d.ts +7 -0
  94. package/dist/commands/run/agents/failures.js +32 -0
  95. package/dist/commands/run/agents/lifecycle.d.ts +9 -0
  96. package/dist/commands/run/agents/lifecycle.js +157 -0
  97. package/dist/commands/run/agents/preparation.d.ts +2 -0
  98. package/dist/commands/run/agents/preparation.js +123 -0
  99. package/dist/commands/run/agents/run-context.d.ts +46 -0
  100. package/dist/commands/run/agents/run-context.js +193 -0
  101. package/dist/commands/run/agents/sandbox-launcher.d.ts +44 -0
  102. package/dist/commands/run/agents/sandbox-launcher.js +211 -0
  103. package/dist/commands/run/agents/types.d.ts +47 -0
  104. package/dist/commands/run/agents/types.js +1 -0
  105. package/dist/commands/run/agents/watchdog.d.ts +39 -0
  106. package/dist/commands/run/agents/watchdog.js +172 -0
  107. package/dist/commands/run/agents/workspace-prep.d.ts +17 -0
  108. package/dist/commands/run/agents/workspace-prep.js +78 -0
  109. package/dist/commands/run/agents.d.ts +14 -0
  110. package/dist/commands/run/agents.js +47 -0
  111. package/dist/commands/run/argv.d.ts +1 -0
  112. package/dist/commands/run/argv.js +19 -0
  113. package/dist/commands/run/command.d.ts +14 -0
  114. package/dist/commands/run/command.js +170 -0
  115. package/dist/commands/run/errors.d.ts +61 -0
  116. package/dist/commands/run/errors.js +86 -0
  117. package/dist/commands/run/id.d.ts +1 -0
  118. package/dist/commands/run/id.js +22 -0
  119. package/dist/commands/run/lifecycle.d.ts +19 -0
  120. package/dist/commands/run/lifecycle.js +186 -0
  121. package/dist/commands/run/phases.d.ts +11 -0
  122. package/dist/commands/run/phases.js +1 -0
  123. package/dist/commands/run/prompts.d.ts +4 -0
  124. package/dist/commands/run/prompts.js +16 -0
  125. package/dist/commands/run/record-init.d.ts +15 -0
  126. package/dist/commands/run/record-init.js +29 -0
  127. package/dist/commands/run/reports.d.ts +14 -0
  128. package/dist/commands/run/reports.js +63 -0
  129. package/dist/commands/run/sandbox-registry.d.ts +4 -0
  130. package/dist/commands/run/sandbox-registry.js +54 -0
  131. package/dist/commands/run/sandbox.d.ts +16 -0
  132. package/dist/commands/run/sandbox.js +96 -0
  133. package/dist/commands/run/shim/agent-manifest.d.ts +7 -0
  134. package/dist/commands/run/shim/agent-manifest.js +1 -0
  135. package/dist/commands/run/shim/run-agent-shim.d.ts +1 -0
  136. package/dist/commands/run/shim/run-agent-shim.js +232 -0
  137. package/dist/commands/run/shim/run-agent-shim.mjs +10 -0
  138. package/dist/commands/run/validation.d.ts +20 -0
  139. package/dist/commands/run/validation.js +60 -0
  140. package/dist/configs/agents/defaults.d.ts +9 -0
  141. package/dist/configs/agents/defaults.js +55 -0
  142. package/dist/configs/agents/errors.d.ts +40 -0
  143. package/dist/configs/agents/errors.js +78 -0
  144. package/dist/configs/agents/loader.d.ts +8 -0
  145. package/dist/configs/agents/loader.js +137 -0
  146. package/dist/configs/agents/types.d.ts +39 -0
  147. package/dist/configs/agents/types.js +31 -0
  148. package/dist/configs/environment/detect.d.ts +17 -0
  149. package/dist/configs/environment/detect.js +79 -0
  150. package/dist/configs/environment/errors.d.ts +12 -0
  151. package/dist/configs/environment/errors.js +26 -0
  152. package/dist/configs/environment/loader.d.ts +10 -0
  153. package/dist/configs/environment/loader.js +80 -0
  154. package/dist/configs/environment/types.d.ts +21 -0
  155. package/dist/configs/environment/types.js +98 -0
  156. package/dist/configs/evals/defaults.d.ts +8 -0
  157. package/dist/configs/evals/defaults.js +28 -0
  158. package/dist/configs/evals/detect.d.ts +10 -0
  159. package/dist/configs/evals/detect.js +224 -0
  160. package/dist/configs/evals/errors.d.ts +16 -0
  161. package/dist/configs/evals/errors.js +29 -0
  162. package/dist/configs/evals/loader.d.ts +9 -0
  163. package/dist/configs/evals/loader.js +46 -0
  164. package/dist/configs/evals/types.d.ts +42 -0
  165. package/dist/configs/evals/types.js +74 -0
  166. package/dist/configs/sandbox/defaults.d.ts +14 -0
  167. package/dist/configs/sandbox/defaults.js +54 -0
  168. package/dist/configs/sandbox/errors.d.ts +5 -0
  169. package/dist/configs/sandbox/errors.js +8 -0
  170. package/dist/configs/sandbox/loader.d.ts +6 -0
  171. package/dist/configs/sandbox/loader.js +192 -0
  172. package/dist/configs/sandbox/merge.d.ts +9 -0
  173. package/dist/configs/sandbox/merge.js +94 -0
  174. package/dist/configs/sandbox/schemas.d.ts +58 -0
  175. package/dist/configs/sandbox/schemas.js +72 -0
  176. package/dist/configs/sandbox/types.d.ts +34 -0
  177. package/dist/configs/sandbox/types.js +1 -0
  178. package/dist/configs/shared/loader-factory.d.ts +19 -0
  179. package/dist/configs/shared/loader-factory.js +33 -0
  180. package/dist/configs/shared/yaml-error-formatter.d.ts +40 -0
  181. package/dist/configs/shared/yaml-error-formatter.js +41 -0
  182. package/dist/evals/runner.d.ts +16 -0
  183. package/dist/evals/runner.js +132 -0
  184. package/dist/preflight/errors.d.ts +10 -0
  185. package/dist/preflight/errors.js +21 -0
  186. package/dist/preflight/index.d.ts +30 -0
  187. package/dist/preflight/index.js +157 -0
  188. package/dist/records/enhanced.d.ts +38 -0
  189. package/dist/records/enhanced.js +139 -0
  190. package/dist/records/errors.d.ts +23 -0
  191. package/dist/records/errors.js +43 -0
  192. package/dist/records/history-lock.d.ts +27 -0
  193. package/dist/records/history-lock.js +184 -0
  194. package/dist/records/mutators.d.ts +17 -0
  195. package/dist/records/mutators.js +144 -0
  196. package/dist/records/persistence.d.ts +95 -0
  197. package/dist/records/persistence.js +459 -0
  198. package/dist/records/types.d.ts +238 -0
  199. package/dist/records/types.js +131 -0
  200. package/dist/render/interactions/confirmation.d.ts +19 -0
  201. package/dist/render/interactions/confirmation.js +63 -0
  202. package/dist/render/transcripts/apply.d.ts +2 -0
  203. package/dist/render/transcripts/apply.js +52 -0
  204. package/dist/render/transcripts/init.d.ts +18 -0
  205. package/dist/render/transcripts/init.js +84 -0
  206. package/dist/render/transcripts/list.d.ts +3 -0
  207. package/dist/render/transcripts/list.js +44 -0
  208. package/dist/render/transcripts/prune.d.ts +16 -0
  209. package/dist/render/transcripts/prune.js +50 -0
  210. package/dist/render/transcripts/review.d.ts +2 -0
  211. package/dist/render/transcripts/review.js +36 -0
  212. package/dist/render/transcripts/run.d.ts +25 -0
  213. package/dist/render/transcripts/run.js +295 -0
  214. package/dist/render/transcripts/shared.d.ts +12 -0
  215. package/dist/render/transcripts/shared.js +41 -0
  216. package/dist/render/utils/agents.d.ts +28 -0
  217. package/dist/render/utils/agents.js +261 -0
  218. package/dist/render/utils/badges.d.ts +20 -0
  219. package/dist/render/utils/badges.js +37 -0
  220. package/dist/render/utils/errors.d.ts +2 -0
  221. package/dist/render/utils/errors.js +14 -0
  222. package/dist/render/utils/records.d.ts +1 -0
  223. package/dist/render/utils/records.js +32 -0
  224. package/dist/render/utils/runs.d.ts +16 -0
  225. package/dist/render/utils/runs.js +50 -0
  226. package/dist/render/utils/table.d.ts +12 -0
  227. package/dist/render/utils/table.js +32 -0
  228. package/dist/render/utils/transcript.d.ts +14 -0
  229. package/dist/render/utils/transcript.js +44 -0
  230. package/dist/status/colors.d.ts +10 -0
  231. package/dist/status/colors.js +33 -0
  232. package/dist/status/index.d.ts +37 -0
  233. package/dist/status/index.js +30 -0
  234. package/dist/testing/test-hooks.d.ts +7 -0
  235. package/dist/testing/test-hooks.js +16 -0
  236. package/dist/utils/binaries.d.ts +1 -0
  237. package/dist/utils/binaries.js +13 -0
  238. package/dist/utils/cli-root.d.ts +2 -0
  239. package/dist/utils/cli-root.js +42 -0
  240. package/dist/utils/colors.d.ts +2 -0
  241. package/dist/utils/colors.js +23 -0
  242. package/dist/utils/diff.d.ts +9 -0
  243. package/dist/utils/diff.js +61 -0
  244. package/dist/utils/env.d.ts +10 -0
  245. package/dist/utils/env.js +56 -0
  246. package/dist/utils/errors.d.ts +31 -0
  247. package/dist/utils/errors.js +53 -0
  248. package/dist/utils/fs.d.ts +13 -0
  249. package/dist/utils/fs.js +70 -0
  250. package/dist/utils/git.d.ts +40 -0
  251. package/dist/utils/git.js +126 -0
  252. package/dist/utils/output.d.ts +4 -0
  253. package/dist/utils/output.js +12 -0
  254. package/dist/utils/path.d.ts +11 -0
  255. package/dist/utils/path.js +84 -0
  256. package/dist/utils/process.d.ts +37 -0
  257. package/dist/utils/process.js +152 -0
  258. package/dist/utils/terminal.d.ts +5 -0
  259. package/dist/utils/terminal.js +5 -0
  260. package/dist/utils/validators.d.ts +1 -0
  261. package/dist/utils/validators.js +15 -0
  262. package/dist/utils/version.d.ts +1 -0
  263. package/dist/utils/version.js +25 -0
  264. package/dist/utils/yaml-reader.d.ts +14 -0
  265. package/dist/utils/yaml-reader.js +41 -0
  266. package/dist/utils/yaml.d.ts +33 -0
  267. package/dist/utils/yaml.js +75 -0
  268. package/dist/workspace/agents.d.ts +33 -0
  269. package/dist/workspace/agents.js +189 -0
  270. package/dist/workspace/chat/artifacts.d.ts +14 -0
  271. package/dist/workspace/chat/artifacts.js +157 -0
  272. package/dist/workspace/chat/sources.d.ts +5 -0
  273. package/dist/workspace/chat/sources.js +80 -0
  274. package/dist/workspace/chat/types.d.ts +1 -0
  275. package/dist/workspace/chat/types.js +1 -0
  276. package/dist/workspace/cleanup.d.ts +4 -0
  277. package/dist/workspace/cleanup.js +12 -0
  278. package/dist/workspace/credential-guard.d.ts +4 -0
  279. package/dist/workspace/credential-guard.js +71 -0
  280. package/dist/workspace/dependencies.d.ts +23 -0
  281. package/dist/workspace/dependencies.js +190 -0
  282. package/dist/workspace/errors.d.ts +16 -0
  283. package/dist/workspace/errors.js +43 -0
  284. package/dist/workspace/layout.d.ts +30 -0
  285. package/dist/workspace/layout.js +124 -0
  286. package/dist/workspace/prune.d.ts +8 -0
  287. package/dist/workspace/prune.js +29 -0
  288. package/dist/workspace/run.d.ts +14 -0
  289. package/dist/workspace/run.js +28 -0
  290. package/dist/workspace/sandbox-requirements.d.ts +17 -0
  291. package/dist/workspace/sandbox-requirements.js +69 -0
  292. package/dist/workspace/setup.d.ts +3 -0
  293. package/dist/workspace/setup.js +81 -0
  294. package/dist/workspace/shim.d.ts +4 -0
  295. package/dist/workspace/shim.js +65 -0
  296. package/dist/workspace/structure.d.ts +77 -0
  297. package/dist/workspace/structure.js +134 -0
  298. package/dist/workspace/templates.d.ts +9 -0
  299. package/dist/workspace/templates.js +66 -0
  300. package/dist/workspace/types.d.ts +4 -0
  301. package/dist/workspace/types.js +1 -0
  302. package/package.json +82 -0
@@ -0,0 +1,35 @@
1
+ import { CliError } from "../../cli/errors.js";
2
+ export declare class ApplyError extends CliError {
3
+ constructor(headline: string, detailLines?: readonly string[], hintLines?: readonly string[]);
4
+ }
5
+ export declare class ApplyRunDeletedError extends ApplyError {
6
+ readonly runId: string;
7
+ constructor(runId: string);
8
+ }
9
+ export declare class ApplyRunMetadataCorruptedError extends ApplyError {
10
+ constructor(detail: string);
11
+ }
12
+ export declare class ApplyAgentNotFoundError extends ApplyError {
13
+ readonly runId: string;
14
+ readonly agentId: string;
15
+ constructor(runId: string, agentId: string);
16
+ }
17
+ export declare class ApplyAgentDiffNotRecordedError extends ApplyError {
18
+ readonly runId: string;
19
+ readonly agentId: string;
20
+ constructor(runId: string, agentId: string);
21
+ }
22
+ export declare class ApplyAgentDiffMissingOnDiskError extends ApplyError {
23
+ readonly diffPath: string;
24
+ constructor(diffPath: string);
25
+ }
26
+ export interface ApplyBaseMismatchOptions {
27
+ baseRevisionSha: string;
28
+ headRevision: string;
29
+ }
30
+ export declare class ApplyBaseMismatchError extends ApplyError {
31
+ constructor(options: ApplyBaseMismatchOptions);
32
+ }
33
+ export declare class ApplyPatchApplicationError extends ApplyError {
34
+ constructor(detail: string, diffPath: string, runId: string, agentId: string);
35
+ }
@@ -0,0 +1,73 @@
1
+ import { CliError } from "../../cli/errors.js";
2
+ export class ApplyError extends CliError {
3
+ constructor(headline, detailLines = [], hintLines = []) {
4
+ super(headline, detailLines, hintLines);
5
+ this.name = "ApplyError";
6
+ }
7
+ }
8
+ export class ApplyRunDeletedError extends ApplyError {
9
+ runId;
10
+ constructor(runId) {
11
+ super(`Run ${runId} has been deleted.`, [], ["Re-run the spec to generate fresh artifacts before applying."]);
12
+ this.runId = runId;
13
+ this.name = "ApplyRunDeletedError";
14
+ }
15
+ }
16
+ export class ApplyRunMetadataCorruptedError extends ApplyError {
17
+ constructor(detail) {
18
+ super("Run history is corrupted; cannot apply.", [detail], [
19
+ "Inspect `.voratiq/runs/index.json` and the affected run directory under `.voratiq/runs/<id>` or regenerate the run with `voratiq run`.",
20
+ ]);
21
+ this.name = "ApplyRunMetadataCorruptedError";
22
+ }
23
+ }
24
+ export class ApplyAgentNotFoundError extends ApplyError {
25
+ runId;
26
+ agentId;
27
+ constructor(runId, agentId) {
28
+ super(`Agent ${agentId} not found in run ${runId}.`, [], [`To review run information: voratiq review --run ${runId}.`]);
29
+ this.runId = runId;
30
+ this.agentId = agentId;
31
+ this.name = "ApplyAgentNotFoundError";
32
+ }
33
+ }
34
+ export class ApplyAgentDiffNotRecordedError extends ApplyError {
35
+ runId;
36
+ agentId;
37
+ constructor(runId, agentId) {
38
+ super(`Agent ${agentId} did not record a diff for run ${runId}.`, [
39
+ `Select an agent that produced a diff via \`voratiq review --run ${runId}\`.`,
40
+ ]);
41
+ this.runId = runId;
42
+ this.agentId = agentId;
43
+ this.name = "ApplyAgentDiffNotRecordedError";
44
+ }
45
+ }
46
+ export class ApplyAgentDiffMissingOnDiskError extends ApplyError {
47
+ diffPath;
48
+ constructor(diffPath) {
49
+ super("Recorded diff is missing from disk.", [`Expected diff at ${diffPath} but it was not found.`], ["Ensure the run directory still exists or re-run the agents."]);
50
+ this.diffPath = diffPath;
51
+ this.name = "ApplyAgentDiffMissingOnDiskError";
52
+ }
53
+ }
54
+ export class ApplyBaseMismatchError extends ApplyError {
55
+ constructor(options) {
56
+ const { baseRevisionSha, headRevision } = options;
57
+ super(`Repository HEAD (${shortSha(headRevision)}) no longer matches the run's base revision (${shortSha(baseRevisionSha)}).`, [
58
+ "Reset to the recorded base or rerun the specification, or pass `--ignore-base-mismatch` to proceed at your own risk.",
59
+ ]);
60
+ this.name = "ApplyBaseMismatchError";
61
+ }
62
+ }
63
+ export class ApplyPatchApplicationError extends ApplyError {
64
+ constructor(detail, diffPath, runId, agentId) {
65
+ super("Failed to apply the recorded diff.", [detail, `Inspect the patch at ${diffPath} for additional context.`], [
66
+ `Resolve the conflict and rerun \`voratiq apply --run ${runId} --agent ${agentId}\`.`,
67
+ ]);
68
+ this.name = "ApplyPatchApplicationError";
69
+ }
70
+ }
71
+ function shortSha(sha) {
72
+ return sha.length > 12 ? sha.slice(0, 12) : sha;
73
+ }
@@ -0,0 +1,13 @@
1
+ import type { AgentInvocationRecord } from "../../records/types.js";
2
+ import type { RunStatus } from "../../status/index.js";
3
+ export interface ApplyResult {
4
+ runId: string;
5
+ specPath: string;
6
+ status: RunStatus;
7
+ createdAt: string;
8
+ baseRevisionSha: string;
9
+ headRevision: string;
10
+ agent: AgentInvocationRecord;
11
+ diffPath: string;
12
+ ignoredBaseMismatch: boolean;
13
+ }
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,4 @@
1
+ import { CliError } from "../cli/errors.js";
2
+ export declare class RunNotFoundCliError extends CliError {
3
+ constructor(runId: string);
4
+ }
@@ -0,0 +1,7 @@
1
+ import { CliError } from "../cli/errors.js";
2
+ export class RunNotFoundCliError extends CliError {
3
+ constructor(runId) {
4
+ super(`Run ${runId} not found.`, ["To review past runs: voratiq list"]);
5
+ this.name = "RunNotFoundCliError";
6
+ }
7
+ }
@@ -0,0 +1,8 @@
1
+ import type { RunRecord } from "../records/types.js";
2
+ export interface FetchRunsCLIOptions {
3
+ root: string;
4
+ runsFilePath: string;
5
+ runId: string;
6
+ onDeleted: (runRecord: RunRecord) => Error;
7
+ }
8
+ export declare function fetchRunSafely(options: FetchRunsCLIOptions): Promise<RunRecord>;
@@ -0,0 +1,25 @@
1
+ import { RunRecordNotFoundError } from "../records/errors.js";
2
+ import { fetchRunsSafely } from "../records/persistence.js";
3
+ import { RunNotFoundCliError } from "./errors.js";
4
+ export async function fetchRunSafely(options) {
5
+ const { root, runsFilePath, runId, onDeleted } = options;
6
+ const { records } = await fetchRunsSafely({
7
+ root,
8
+ runsFilePath,
9
+ runId,
10
+ filters: { includeDeleted: true },
11
+ }).catch((error) => {
12
+ if (error instanceof RunRecordNotFoundError) {
13
+ throw new RunNotFoundCliError(runId);
14
+ }
15
+ throw error;
16
+ });
17
+ const runRecord = records[0];
18
+ if (!runRecord) {
19
+ throw new RunNotFoundCliError(runId);
20
+ }
21
+ if (runRecord.deletedAt) {
22
+ throw onDeleted(runRecord);
23
+ }
24
+ return runRecord;
25
+ }
@@ -0,0 +1,3 @@
1
+ import type { AgentInitSummary, InitConfigureOptions } from "./types.js";
2
+ export declare const AGENTS_CONFIG_DISPLAY_PATH: string;
3
+ export declare function configureAgents(root: string, options: InitConfigureOptions): Promise<AgentInitSummary>;
@@ -0,0 +1,159 @@
1
+ import { readAgentsConfig } from "../../configs/agents/loader.js";
2
+ import { renderAgentPromptPreface } from "../../render/transcripts/init.js";
3
+ import { detectBinary } from "../../utils/binaries.js";
4
+ import { isDefaultYamlTemplate, loadYamlConfig, persistYamlConfig, } from "../../utils/yaml.js";
5
+ import { formatWorkspacePath, resolveWorkspacePath, VORATIQ_AGENTS_FILE, } from "../../workspace/structure.js";
6
+ import { buildDefaultAgentsTemplate, DEFAULT_AGENT_DEFAULTS, sanitizeAgentIdFromModel, serializeAgentsConfigEntries, } from "../../workspace/templates.js";
7
+ export const AGENTS_CONFIG_DISPLAY_PATH = formatWorkspacePath(VORATIQ_AGENTS_FILE);
8
+ export async function configureAgents(root, options) {
9
+ const filePath = resolveWorkspacePath(root, VORATIQ_AGENTS_FILE);
10
+ const defaultTemplate = buildDefaultAgentsTemplate();
11
+ const loadResult = await loadYamlConfig(filePath, readAgentsConfig);
12
+ const defaultStatus = isDefaultYamlTemplate(loadResult.snapshot, defaultTemplate);
13
+ const configCreated = !loadResult.snapshot.exists;
14
+ const canInteract = canConfirm(options);
15
+ if (!canInteract || (!defaultStatus && loadResult.snapshot.exists)) {
16
+ return buildAgentSummary(loadResult.config.agents, computeZeroDetections(loadResult.config.agents), configCreated, false);
17
+ }
18
+ const lifecycle = scanWorkspaceForAgentDefaults(loadResult.config, defaultStatus);
19
+ const configChanged = await applyAgentOperatorChoices(lifecycle, options);
20
+ const snapshotResult = finalizeAgentConfigSnapshot(lifecycle);
21
+ const updated = await persistYamlConfig({
22
+ filePath,
23
+ serialized: snapshotResult.serialized,
24
+ original: loadResult.snapshot,
25
+ defaultTemplate,
26
+ isDefaultTemplate: defaultStatus,
27
+ });
28
+ return buildAgentSummary(snapshotResult.entries, lifecycle.zeroDetections, configCreated, updated || configChanged);
29
+ }
30
+ function scanWorkspaceForAgentDefaults(config, isDefaultTemplate) {
31
+ const templatesById = new Map();
32
+ for (const entry of config.agents) {
33
+ templatesById.set(entry.id, entry);
34
+ }
35
+ const templateStates = [];
36
+ const templateIds = new Set();
37
+ const templateEntries = DEFAULT_AGENT_DEFAULTS.map((template) => ({
38
+ template,
39
+ defaultId: sanitizeAgentIdFromModel(template.model),
40
+ }));
41
+ for (const { template, defaultId } of templateEntries) {
42
+ templateIds.add(defaultId);
43
+ const existing = isDefaultTemplate
44
+ ? undefined
45
+ : templatesById.get(defaultId);
46
+ const detectedBinary = detectBinary(template.provider);
47
+ const baseEntry = existing ?? buildEntryFromTemplate(template, defaultId);
48
+ const entry = cloneAgentEntry(baseEntry);
49
+ entry.binary = detectedBinary ?? entry.binary ?? "";
50
+ entry.enabled = entry.enabled !== false;
51
+ templateStates.push({
52
+ template,
53
+ existing,
54
+ entry,
55
+ detectedBinary,
56
+ });
57
+ }
58
+ const userDefined = [];
59
+ for (const entry of config.agents) {
60
+ if (!templateIds.has(entry.id)) {
61
+ userDefined.push(cloneAgentEntry(entry));
62
+ }
63
+ }
64
+ const zeroDetections = templateStates.every((state) => !hasBinary(state.entry.binary));
65
+ return {
66
+ templates: templateStates,
67
+ userDefined,
68
+ zeroDetections,
69
+ };
70
+ }
71
+ function buildEntryFromTemplate(template, defaultId) {
72
+ return {
73
+ id: defaultId,
74
+ provider: template.provider,
75
+ model: template.model,
76
+ enabled: false,
77
+ binary: "",
78
+ };
79
+ }
80
+ function cloneAgentEntry(entry) {
81
+ return {
82
+ id: entry.id,
83
+ provider: entry.provider,
84
+ model: entry.model,
85
+ enabled: entry.enabled !== false,
86
+ binary: entry.binary ?? "",
87
+ extraArgs: entry.extraArgs && entry.extraArgs.length > 0
88
+ ? [...entry.extraArgs]
89
+ : undefined,
90
+ };
91
+ }
92
+ async function applyAgentOperatorChoices(state, options) {
93
+ const confirm = options.confirm;
94
+ if (!confirm) {
95
+ state.zeroDetections = state.templates.every((templateState) => !hasBinary(templateState.entry.binary));
96
+ return false;
97
+ }
98
+ let firstPrompt = true;
99
+ let changed = false;
100
+ for (const templateState of state.templates) {
101
+ const hasDetectedBinary = hasBinary(templateState.entry.binary);
102
+ if (!hasDetectedBinary) {
103
+ templateState.entry.enabled = false;
104
+ continue;
105
+ }
106
+ const initialEnabled = templateState.entry.enabled !== false;
107
+ const defaultValue = templateState.existing !== undefined
108
+ ? templateState.existing.enabled !== false
109
+ : true;
110
+ const prefaceLines = renderAgentPromptPreface({
111
+ agentId: templateState.entry.id,
112
+ binaryPath: templateState.entry.binary ?? "",
113
+ detected: hasDetectedBinary,
114
+ firstPrompt,
115
+ });
116
+ const shouldEnable = await confirm({
117
+ message: "Enable?",
118
+ defaultValue,
119
+ prefaceLines,
120
+ });
121
+ if (shouldEnable !== initialEnabled) {
122
+ changed = true;
123
+ }
124
+ templateState.entry.enabled = shouldEnable;
125
+ firstPrompt = false;
126
+ }
127
+ state.zeroDetections = state.templates.every((templateState) => !hasBinary(templateState.entry.binary));
128
+ return changed;
129
+ }
130
+ function buildFinalAgentEntries(state) {
131
+ const finalEntries = state.templates.map((templateState) => templateState.entry);
132
+ return [...finalEntries, ...state.userDefined];
133
+ }
134
+ function finalizeAgentConfigSnapshot(state) {
135
+ const entries = buildFinalAgentEntries(state);
136
+ const serialized = serializeAgentsConfigEntries(entries);
137
+ return { entries, serialized };
138
+ }
139
+ function buildAgentSummary(entries, zeroDetections, configCreated, configUpdated) {
140
+ const enabledAgents = entries
141
+ .filter((entry) => entry.enabled !== false)
142
+ .map((entry) => entry.id);
143
+ return {
144
+ configPath: AGENTS_CONFIG_DISPLAY_PATH,
145
+ enabledAgents,
146
+ zeroDetections,
147
+ configCreated,
148
+ configUpdated,
149
+ };
150
+ }
151
+ function hasBinary(binary) {
152
+ return Boolean(binary && binary.trim().length > 0);
153
+ }
154
+ function computeZeroDetections(entries) {
155
+ return !entries.some((entry) => hasBinary(entry.binary));
156
+ }
157
+ function canConfirm(options) {
158
+ return Boolean(options.confirm);
159
+ }
@@ -0,0 +1,2 @@
1
+ import type { InitCommandInput, InitCommandResult } from "./types.js";
2
+ export declare function executeInitCommand(input: InitCommandInput): Promise<InitCommandResult>;
@@ -0,0 +1,40 @@
1
+ import { writeCommandPreface } from "../../cli/output.js";
2
+ import { buildInitializationPrompt } from "../../render/transcripts/init.js";
3
+ import { createWorkspace } from "../../workspace/setup.js";
4
+ import { formatWorkspacePath, VORATIQ_SANDBOX_FILE, } from "../../workspace/structure.js";
5
+ import { configureAgents } from "./agents.js";
6
+ import { configureEnvironment } from "./environment.js";
7
+ import { configureEvals } from "./evals.js";
8
+ export async function executeInitCommand(input) {
9
+ const { root, interactive, confirm, prompt } = input;
10
+ const workspaceResult = await createWorkspace(root);
11
+ const initializationPrompt = buildInitializationPrompt();
12
+ writeCommandPreface(initializationPrompt);
13
+ const agentSummary = await configureAgents(root, {
14
+ interactive,
15
+ confirm,
16
+ });
17
+ const environmentSummary = await configureEnvironment(root, {
18
+ interactive,
19
+ confirm,
20
+ prompt,
21
+ });
22
+ const evalSummary = await configureEvals(root, {
23
+ interactive,
24
+ confirm,
25
+ }, environmentSummary.config);
26
+ const sandboxSummary = buildSandboxSummary(workspaceResult);
27
+ return {
28
+ workspaceResult,
29
+ agentSummary,
30
+ environmentSummary,
31
+ evalSummary,
32
+ sandboxSummary,
33
+ };
34
+ }
35
+ function buildSandboxSummary(workspaceResult) {
36
+ const configPath = formatWorkspacePath(VORATIQ_SANDBOX_FILE);
37
+ const normalizedCreated = workspaceResult.createdFiles.map((file) => file.replace(/\\/g, "/"));
38
+ const configCreated = normalizedCreated.includes(configPath);
39
+ return { configPath, configCreated };
40
+ }
@@ -0,0 +1,2 @@
1
+ import type { EnvironmentInitSummary, InitConfigureOptions } from "./types.js";
2
+ export declare function configureEnvironment(root: string, options: InitConfigureOptions): Promise<EnvironmentInitSummary>;
@@ -0,0 +1,76 @@
1
+ import { detectEnvironmentConfig } from "../../configs/environment/detect.js";
2
+ import { readEnvironmentConfig, serializeEnvironmentConfig, } from "../../configs/environment/loader.js";
3
+ import { getNodeDependencyRoots, getPythonEnvironmentPath, isNodeEnvironmentDisabled, isPythonEnvironmentDisabled, } from "../../configs/environment/types.js";
4
+ import { loadYamlConfig, persistYamlConfig } from "../../utils/yaml.js";
5
+ import { formatWorkspacePath, resolveWorkspacePath, VORATIQ_ENVIRONMENT_FILE, } from "../../workspace/structure.js";
6
+ import { buildDefaultEnvironmentTemplate } from "../../workspace/templates.js";
7
+ const ENVIRONMENT_CONFIG_DISPLAY_PATH = formatWorkspacePath(VORATIQ_ENVIRONMENT_FILE);
8
+ export async function configureEnvironment(root, options) {
9
+ const filePath = resolveWorkspacePath(root, VORATIQ_ENVIRONMENT_FILE);
10
+ const defaultTemplate = buildDefaultEnvironmentTemplate();
11
+ const loadResult = await loadYamlConfig(filePath, readEnvironmentConfig);
12
+ const existingConfig = loadResult.config;
13
+ const detection = await detectEnvironmentConfig({
14
+ root,
15
+ interactive: options.interactive,
16
+ promptPath: options.prompt ?? undefined,
17
+ });
18
+ const mergedConfig = mergeEnvironmentConfig(existingConfig, detection.config);
19
+ const finalSerialized = resolveSerializedConfig(mergedConfig, defaultTemplate);
20
+ const configUpdated = await persistYamlConfig({
21
+ filePath,
22
+ serialized: finalSerialized,
23
+ original: loadResult.snapshot,
24
+ defaultTemplate,
25
+ });
26
+ return {
27
+ configPath: ENVIRONMENT_CONFIG_DISPLAY_PATH,
28
+ detectedEntries: describeEnvironmentEntries(mergedConfig),
29
+ configCreated: !loadResult.snapshot.exists,
30
+ configUpdated,
31
+ config: mergedConfig,
32
+ };
33
+ }
34
+ function mergeEnvironmentConfig(existing, detected) {
35
+ const merged = { ...existing };
36
+ if (!isNodeEnvironmentDisabled(merged)) {
37
+ const detectedRoots = getNodeDependencyRoots(detected);
38
+ const existingRoots = getNodeDependencyRoots(merged);
39
+ if (detectedRoots.length > 0 && existingRoots.length === 0) {
40
+ merged.node = {
41
+ dependencyRoots: [...detectedRoots],
42
+ };
43
+ }
44
+ }
45
+ if (!isPythonEnvironmentDisabled(merged)) {
46
+ const detectedPath = getPythonEnvironmentPath(detected);
47
+ const existingPath = getPythonEnvironmentPath(merged);
48
+ if (detectedPath && !existingPath) {
49
+ merged.python = { path: detectedPath };
50
+ }
51
+ }
52
+ return merged;
53
+ }
54
+ function resolveSerializedConfig(config, defaultTemplate) {
55
+ const serialized = serializeEnvironmentConfig(config);
56
+ return serialized.trim().length > 0 ? serialized : defaultTemplate;
57
+ }
58
+ function describeEnvironmentEntries(config) {
59
+ const entries = [];
60
+ if (isNodeEnvironmentDisabled(config)) {
61
+ entries.push("node (disabled)");
62
+ }
63
+ else if (getNodeDependencyRoots(config).length > 0) {
64
+ entries.push("node");
65
+ }
66
+ if (isPythonEnvironmentDisabled(config)) {
67
+ entries.push("python (disabled)");
68
+ }
69
+ else {
70
+ const pythonPath = getPythonEnvironmentPath(config);
71
+ if (pythonPath) {
72
+ entries.push("python");
73
+ }
74
+ }
75
+ return entries;
76
+ }
@@ -0,0 +1,4 @@
1
+ import { type EnvironmentConfig } from "../../configs/environment/types.js";
2
+ import type { EvalInitSummary, InitConfigureOptions } from "./types.js";
3
+ export declare const EVALS_CONFIG_DISPLAY_PATH: string;
4
+ export declare function configureEvals(root: string, options: InitConfigureOptions, environment: EnvironmentConfig): Promise<EvalInitSummary>;