@ttfw/envoi 1.0.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 (283) hide show
  1. package/README.md +238 -0
  2. package/dist/commands/app.d.ts +2 -0
  3. package/dist/commands/app.d.ts.map +1 -0
  4. package/dist/commands/app.js +31 -0
  5. package/dist/commands/app.js.map +1 -0
  6. package/dist/commands/autonomy.d.ts +6 -0
  7. package/dist/commands/autonomy.d.ts.map +1 -0
  8. package/dist/commands/autonomy.js +89 -0
  9. package/dist/commands/autonomy.js.map +1 -0
  10. package/dist/commands/builder.d.ts +13 -0
  11. package/dist/commands/builder.d.ts.map +1 -0
  12. package/dist/commands/builder.js +142 -0
  13. package/dist/commands/builder.js.map +1 -0
  14. package/dist/commands/idea.d.ts +12 -0
  15. package/dist/commands/idea.d.ts.map +1 -0
  16. package/dist/commands/idea.js +79 -0
  17. package/dist/commands/idea.js.map +1 -0
  18. package/dist/commands/init.d.ts +18 -0
  19. package/dist/commands/init.d.ts.map +1 -0
  20. package/dist/commands/init.js +423 -0
  21. package/dist/commands/init.js.map +1 -0
  22. package/dist/commands/mode.d.ts +13 -0
  23. package/dist/commands/mode.d.ts.map +1 -0
  24. package/dist/commands/mode.js +96 -0
  25. package/dist/commands/mode.js.map +1 -0
  26. package/dist/commands/onboard.d.ts +37 -0
  27. package/dist/commands/onboard.d.ts.map +1 -0
  28. package/dist/commands/onboard.js +743 -0
  29. package/dist/commands/onboard.js.map +1 -0
  30. package/dist/commands/pr-note.d.ts +8 -0
  31. package/dist/commands/pr-note.d.ts.map +1 -0
  32. package/dist/commands/pr-note.js +27 -0
  33. package/dist/commands/pr-note.js.map +1 -0
  34. package/dist/commands/undo.d.ts +7 -0
  35. package/dist/commands/undo.d.ts.map +1 -0
  36. package/dist/commands/undo.js +59 -0
  37. package/dist/commands/undo.js.map +1 -0
  38. package/dist/commands/update.d.ts +24 -0
  39. package/dist/commands/update.d.ts.map +1 -0
  40. package/dist/commands/update.js +248 -0
  41. package/dist/commands/update.js.map +1 -0
  42. package/dist/constants/report_codes.d.ts +29 -0
  43. package/dist/constants/report_codes.d.ts.map +1 -0
  44. package/dist/constants/report_codes.js +69 -0
  45. package/dist/constants/report_codes.js.map +1 -0
  46. package/dist/index.d.ts +3 -0
  47. package/dist/index.d.ts.map +1 -0
  48. package/dist/index.js +675 -0
  49. package/dist/index.js.map +1 -0
  50. package/dist/lib/autonomy.d.ts +16 -0
  51. package/dist/lib/autonomy.d.ts.map +1 -0
  52. package/dist/lib/autonomy.js +38 -0
  53. package/dist/lib/autonomy.js.map +1 -0
  54. package/dist/lib/blocked.d.ts +87 -0
  55. package/dist/lib/blocked.d.ts.map +1 -0
  56. package/dist/lib/blocked.js +134 -0
  57. package/dist/lib/blocked.js.map +1 -0
  58. package/dist/lib/branding.d.ts +13 -0
  59. package/dist/lib/branding.d.ts.map +1 -0
  60. package/dist/lib/branding.js +19 -0
  61. package/dist/lib/branding.js.map +1 -0
  62. package/dist/lib/claude.d.ts +42 -0
  63. package/dist/lib/claude.d.ts.map +1 -0
  64. package/dist/lib/claude.js +291 -0
  65. package/dist/lib/claude.js.map +1 -0
  66. package/dist/lib/config.d.ts +71 -0
  67. package/dist/lib/config.d.ts.map +1 -0
  68. package/dist/lib/config.js +410 -0
  69. package/dist/lib/config.js.map +1 -0
  70. package/dist/lib/diff.d.ts +150 -0
  71. package/dist/lib/diff.d.ts.map +1 -0
  72. package/dist/lib/diff.js +257 -0
  73. package/dist/lib/diff.js.map +1 -0
  74. package/dist/lib/doctor.d.ts +67 -0
  75. package/dist/lib/doctor.d.ts.map +1 -0
  76. package/dist/lib/doctor.js +211 -0
  77. package/dist/lib/doctor.js.map +1 -0
  78. package/dist/lib/fingerprint.d.ts +27 -0
  79. package/dist/lib/fingerprint.d.ts.map +1 -0
  80. package/dist/lib/fingerprint.js +116 -0
  81. package/dist/lib/fingerprint.js.map +1 -0
  82. package/dist/lib/fs.d.ts +93 -0
  83. package/dist/lib/fs.d.ts.map +1 -0
  84. package/dist/lib/fs.js +179 -0
  85. package/dist/lib/fs.js.map +1 -0
  86. package/dist/lib/git.d.ts +177 -0
  87. package/dist/lib/git.d.ts.map +1 -0
  88. package/dist/lib/git.js +355 -0
  89. package/dist/lib/git.js.map +1 -0
  90. package/dist/lib/git_branching.d.ts +84 -0
  91. package/dist/lib/git_branching.d.ts.map +1 -0
  92. package/dist/lib/git_branching.js +327 -0
  93. package/dist/lib/git_branching.js.map +1 -0
  94. package/dist/lib/gitignore.d.ts +26 -0
  95. package/dist/lib/gitignore.d.ts.map +1 -0
  96. package/dist/lib/gitignore.js +119 -0
  97. package/dist/lib/gitignore.js.map +1 -0
  98. package/dist/lib/guardrails.d.ts +232 -0
  99. package/dist/lib/guardrails.d.ts.map +1 -0
  100. package/dist/lib/guardrails.js +323 -0
  101. package/dist/lib/guardrails.js.map +1 -0
  102. package/dist/lib/history.d.ts +110 -0
  103. package/dist/lib/history.d.ts.map +1 -0
  104. package/dist/lib/history.js +236 -0
  105. package/dist/lib/history.js.map +1 -0
  106. package/dist/lib/index.d.ts +29 -0
  107. package/dist/lib/index.d.ts.map +1 -0
  108. package/dist/lib/index.js +29 -0
  109. package/dist/lib/index.js.map +1 -0
  110. package/dist/lib/json-extract.d.ts +42 -0
  111. package/dist/lib/json-extract.d.ts.map +1 -0
  112. package/dist/lib/json-extract.js +201 -0
  113. package/dist/lib/json-extract.js.map +1 -0
  114. package/dist/lib/judge.d.ts +237 -0
  115. package/dist/lib/judge.d.ts.map +1 -0
  116. package/dist/lib/judge.js +501 -0
  117. package/dist/lib/judge.js.map +1 -0
  118. package/dist/lib/lock.d.ts +79 -0
  119. package/dist/lib/lock.d.ts.map +1 -0
  120. package/dist/lib/lock.js +254 -0
  121. package/dist/lib/lock.js.map +1 -0
  122. package/dist/lib/migration.d.ts +9 -0
  123. package/dist/lib/migration.d.ts.map +1 -0
  124. package/dist/lib/migration.js +74 -0
  125. package/dist/lib/migration.js.map +1 -0
  126. package/dist/lib/paths.d.ts +18 -0
  127. package/dist/lib/paths.d.ts.map +1 -0
  128. package/dist/lib/paths.js +27 -0
  129. package/dist/lib/paths.js.map +1 -0
  130. package/dist/lib/preflight.d.ts +33 -0
  131. package/dist/lib/preflight.d.ts.map +1 -0
  132. package/dist/lib/preflight.js +177 -0
  133. package/dist/lib/preflight.js.map +1 -0
  134. package/dist/lib/prompt_budget.d.ts +18 -0
  135. package/dist/lib/prompt_budget.d.ts.map +1 -0
  136. package/dist/lib/prompt_budget.js +36 -0
  137. package/dist/lib/prompt_budget.js.map +1 -0
  138. package/dist/lib/report.d.ts +102 -0
  139. package/dist/lib/report.d.ts.map +1 -0
  140. package/dist/lib/report.js +347 -0
  141. package/dist/lib/report.js.map +1 -0
  142. package/dist/lib/reviewer-flow.d.ts +80 -0
  143. package/dist/lib/reviewer-flow.d.ts.map +1 -0
  144. package/dist/lib/reviewer-flow.js +138 -0
  145. package/dist/lib/reviewer-flow.js.map +1 -0
  146. package/dist/lib/reviewer.d.ts +53 -0
  147. package/dist/lib/reviewer.d.ts.map +1 -0
  148. package/dist/lib/reviewer.js +199 -0
  149. package/dist/lib/reviewer.js.map +1 -0
  150. package/dist/lib/risk.d.ts +127 -0
  151. package/dist/lib/risk.d.ts.map +1 -0
  152. package/dist/lib/risk.js +192 -0
  153. package/dist/lib/risk.js.map +1 -0
  154. package/dist/lib/rollback.d.ts +143 -0
  155. package/dist/lib/rollback.d.ts.map +1 -0
  156. package/dist/lib/rollback.js +244 -0
  157. package/dist/lib/rollback.js.map +1 -0
  158. package/dist/lib/schema.d.ts +47 -0
  159. package/dist/lib/schema.d.ts.map +1 -0
  160. package/dist/lib/schema.js +91 -0
  161. package/dist/lib/schema.js.map +1 -0
  162. package/dist/lib/scope.d.ts +89 -0
  163. package/dist/lib/scope.d.ts.map +1 -0
  164. package/dist/lib/scope.js +135 -0
  165. package/dist/lib/scope.js.map +1 -0
  166. package/dist/lib/self_update.d.ts +13 -0
  167. package/dist/lib/self_update.d.ts.map +1 -0
  168. package/dist/lib/self_update.js +172 -0
  169. package/dist/lib/self_update.js.map +1 -0
  170. package/dist/lib/state.d.ts +143 -0
  171. package/dist/lib/state.d.ts.map +1 -0
  172. package/dist/lib/state.js +258 -0
  173. package/dist/lib/state.js.map +1 -0
  174. package/dist/lib/tick.d.ts +310 -0
  175. package/dist/lib/tick.d.ts.map +1 -0
  176. package/dist/lib/tick.js +424 -0
  177. package/dist/lib/tick.js.map +1 -0
  178. package/dist/lib/transport.d.ts +145 -0
  179. package/dist/lib/transport.d.ts.map +1 -0
  180. package/dist/lib/transport.js +237 -0
  181. package/dist/lib/transport.js.map +1 -0
  182. package/dist/lib/verdict_labels.d.ts +5 -0
  183. package/dist/lib/verdict_labels.d.ts.map +1 -0
  184. package/dist/lib/verdict_labels.js +25 -0
  185. package/dist/lib/verdict_labels.js.map +1 -0
  186. package/dist/lib/verify-safety.d.ts +63 -0
  187. package/dist/lib/verify-safety.d.ts.map +1 -0
  188. package/dist/lib/verify-safety.js +123 -0
  189. package/dist/lib/verify-safety.js.map +1 -0
  190. package/dist/lib/verify.d.ts +139 -0
  191. package/dist/lib/verify.d.ts.map +1 -0
  192. package/dist/lib/verify.js +311 -0
  193. package/dist/lib/verify.js.map +1 -0
  194. package/dist/lib/workspace_state.d.ts +79 -0
  195. package/dist/lib/workspace_state.d.ts.map +1 -0
  196. package/dist/lib/workspace_state.js +283 -0
  197. package/dist/lib/workspace_state.js.map +1 -0
  198. package/dist/runner/builder.d.ts +58 -0
  199. package/dist/runner/builder.d.ts.map +1 -0
  200. package/dist/runner/builder.js +775 -0
  201. package/dist/runner/builder.js.map +1 -0
  202. package/dist/runner/builder_parse.d.ts +37 -0
  203. package/dist/runner/builder_parse.d.ts.map +1 -0
  204. package/dist/runner/builder_parse.js +76 -0
  205. package/dist/runner/builder_parse.js.map +1 -0
  206. package/dist/runner/index.d.ts +9 -0
  207. package/dist/runner/index.d.ts.map +1 -0
  208. package/dist/runner/index.js +7 -0
  209. package/dist/runner/index.js.map +1 -0
  210. package/dist/runner/loop.d.ts +51 -0
  211. package/dist/runner/loop.d.ts.map +1 -0
  212. package/dist/runner/loop.js +221 -0
  213. package/dist/runner/loop.js.map +1 -0
  214. package/dist/runner/orchestrator.d.ts +67 -0
  215. package/dist/runner/orchestrator.d.ts.map +1 -0
  216. package/dist/runner/orchestrator.js +376 -0
  217. package/dist/runner/orchestrator.js.map +1 -0
  218. package/dist/runner/tick.d.ts +10 -0
  219. package/dist/runner/tick.d.ts.map +1 -0
  220. package/dist/runner/tick.js +1639 -0
  221. package/dist/runner/tick.js.map +1 -0
  222. package/dist/types/blocked.d.ts +52 -0
  223. package/dist/types/blocked.d.ts.map +1 -0
  224. package/dist/types/blocked.js +8 -0
  225. package/dist/types/blocked.js.map +1 -0
  226. package/dist/types/builder.d.ts +25 -0
  227. package/dist/types/builder.d.ts.map +1 -0
  228. package/dist/types/builder.js +7 -0
  229. package/dist/types/builder.js.map +1 -0
  230. package/dist/types/claude.d.ts +86 -0
  231. package/dist/types/claude.d.ts.map +1 -0
  232. package/dist/types/claude.js +48 -0
  233. package/dist/types/claude.js.map +1 -0
  234. package/dist/types/config.d.ts +384 -0
  235. package/dist/types/config.d.ts.map +1 -0
  236. package/dist/types/config.js +7 -0
  237. package/dist/types/config.js.map +1 -0
  238. package/dist/types/index.d.ts +18 -0
  239. package/dist/types/index.d.ts.map +1 -0
  240. package/dist/types/index.js +8 -0
  241. package/dist/types/index.js.map +1 -0
  242. package/dist/types/lock.d.ts +21 -0
  243. package/dist/types/lock.d.ts.map +1 -0
  244. package/dist/types/lock.js +8 -0
  245. package/dist/types/lock.js.map +1 -0
  246. package/dist/types/preflight.d.ts +49 -0
  247. package/dist/types/preflight.d.ts.map +1 -0
  248. package/dist/types/preflight.js +8 -0
  249. package/dist/types/preflight.js.map +1 -0
  250. package/dist/types/report.d.ts +161 -0
  251. package/dist/types/report.d.ts.map +1 -0
  252. package/dist/types/report.js +8 -0
  253. package/dist/types/report.js.map +1 -0
  254. package/dist/types/reviewer.d.ts +66 -0
  255. package/dist/types/reviewer.d.ts.map +1 -0
  256. package/dist/types/reviewer.js +5 -0
  257. package/dist/types/reviewer.js.map +1 -0
  258. package/dist/types/state.d.ts +124 -0
  259. package/dist/types/state.d.ts.map +1 -0
  260. package/dist/types/state.js +20 -0
  261. package/dist/types/state.js.map +1 -0
  262. package/dist/types/task.d.ts +117 -0
  263. package/dist/types/task.d.ts.map +1 -0
  264. package/dist/types/task.js +7 -0
  265. package/dist/types/task.js.map +1 -0
  266. package/dist/types/workspace_state.d.ts +125 -0
  267. package/dist/types/workspace_state.d.ts.map +1 -0
  268. package/dist/types/workspace_state.js +10 -0
  269. package/dist/types/workspace_state.js.map +1 -0
  270. package/envoi.config.json +191 -0
  271. package/package.json +52 -0
  272. package/relais/prompts/.gitkeep +0 -0
  273. package/relais/prompts/builder.system.txt +13 -0
  274. package/relais/prompts/builder.user.txt +15 -0
  275. package/relais/prompts/orchestrator.system.txt +37 -0
  276. package/relais/prompts/orchestrator.user.txt +34 -0
  277. package/relais/prompts/reviewer.system.txt +33 -0
  278. package/relais/prompts/reviewer.user.txt +35 -0
  279. package/relais/schemas/.gitkeep +0 -0
  280. package/relais/schemas/builder_result.schema.json +29 -0
  281. package/relais/schemas/report.schema.json +195 -0
  282. package/relais/schemas/reviewer_result.schema.json +70 -0
  283. package/relais/schemas/task.schema.json +155 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"state.d.ts","sourceRoot":"","sources":["../../src/lib/state.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACtD,OAAO,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAC9C,OAAO,KAAK,EACV,SAAS,EAET,gBAAgB,EAChB,kBAAkB,EACnB,MAAM,mBAAmB,CAAC;AAE3B;;;;GAIG;AACH,wBAAgB,aAAa,IAAI,MAAM,CAGtC;AAED;;;;;;GAMG;AACH,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,GAAG,SAAS,CAWrF;AAED;;;;;;GAMG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,SAAS,EAAE,QAAQ,EAAE,SAAS,GAAG,SAAS,CAKhF;AAED;;;;;;GAMG;AACH,wBAAgB,QAAQ,CAAC,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,GAAG,SAAS,CAKnE;AAED;;;;;;GAMG;AACH,wBAAgB,OAAO,CAAC,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE,SAAS,CAAC,MAAM,CAAC,GAAG,SAAS,CAK5E;AAED;;;;;;GAMG;AACH,wBAAgB,gBAAgB,CAC9B,KAAK,EAAE,SAAS,EAChB,aAAa,EAAE,SAAS,CAAC,gBAAgB,CAAC,GACzC,SAAS,CAKX;AAED;;;;;;GAMG;AACH,wBAAgB,iBAAiB,CAC/B,KAAK,EAAE,SAAS,EAChB,KAAK,EAAE,gBAAgB,GACtB,SAAS,CAiBX;AAED;;;;;;;GAOG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,SAAS,GAAG,SAAS,CAY3D;AAED;;;;;;;GAOG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,SAAS,GAAG,SAAS,CAczD;AAED;;;;;;GAMG;AACH,wBAAgB,qBAAqB,CACnC,KAAK,EAAE,SAAS,EAChB,WAAW,EAAE,MAAM,GAClB,SAAS,CAKX;AAED;;;;;;;;GAQG;AACH,wBAAgB,iBAAiB,CAC/B,KAAK,EAAE,SAAS,EAChB,WAAW,EAAE,MAAM,GAClB,SAAS,CAMX;AAED;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,SAAS,GAAG,SAAS,CAK9D;AAED;;;;;;GAMG;AACH,wBAAgB,mBAAmB,CACjC,KAAK,EAAE,SAAS,EAChB,KAAK,EAAE,kBAAkB,GACxB,SAAS,CASX;AAED;;;;;GAKG;AACH,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,SAAS,GAAG,SAAS,CAK/D;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,oBAAoB,CAClC,KAAK,EAAE,SAAS,EAChB,SAAS,EAAE,MAAM,EACjB,SAAS,EAAE,MAAM,GAAG,IAAI,GACvB,SAAS,CAOX;AAED;;;;;;;;GAQG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,SAAS,GAAG,SAAS,CAO3D"}
@@ -0,0 +1,258 @@
1
+ /**
2
+ * State management utilities for tick execution.
3
+ *
4
+ * Provides functions to create and update tick state during execution.
5
+ */
6
+ import { randomBytes } from 'node:crypto';
7
+ import { TickPhase } from '../types/state.js';
8
+ /**
9
+ * Generates a unique run ID for a tick.
10
+ *
11
+ * @returns A unique identifier string
12
+ */
13
+ export function generateRunId() {
14
+ // Generate 16 random bytes and encode as hex (32 chars)
15
+ return randomBytes(16).toString('hex');
16
+ }
17
+ /**
18
+ * Creates initial tick state.
19
+ *
20
+ * @param config - Envoi configuration
21
+ * @param baseCommit - Git HEAD commit SHA at start
22
+ * @returns Initial tick state
23
+ */
24
+ export function createInitialState(config, baseCommit) {
25
+ return {
26
+ phase: TickPhase.LOCK,
27
+ run_id: generateRunId(),
28
+ started_at: new Date().toISOString(),
29
+ base_commit: baseCommit,
30
+ config,
31
+ task: null,
32
+ builder_result: null,
33
+ errors: [],
34
+ };
35
+ }
36
+ /**
37
+ * Transitions tick state to a new phase.
38
+ *
39
+ * @param state - Current tick state
40
+ * @param newPhase - Phase to transition to
41
+ * @returns Updated tick state
42
+ */
43
+ export function transitionPhase(state, newPhase) {
44
+ return {
45
+ ...state,
46
+ phase: newPhase,
47
+ };
48
+ }
49
+ /**
50
+ * Adds an error to the tick state.
51
+ *
52
+ * @param state - Current tick state
53
+ * @param error - Error message to add
54
+ * @returns Updated tick state
55
+ */
56
+ export function addError(state, error) {
57
+ return {
58
+ ...state,
59
+ errors: [...state.errors, error],
60
+ };
61
+ }
62
+ /**
63
+ * Updates task in tick state.
64
+ *
65
+ * @param state - Current tick state
66
+ * @param task - Task to set
67
+ * @returns Updated tick state
68
+ */
69
+ export function setTask(state, task) {
70
+ return {
71
+ ...state,
72
+ task,
73
+ };
74
+ }
75
+ /**
76
+ * Updates builder result in tick state.
77
+ *
78
+ * @param state - Current tick state
79
+ * @param builderResult - Builder result to set
80
+ * @returns Updated tick state
81
+ */
82
+ export function setBuilderResult(state, builderResult) {
83
+ return {
84
+ ...state,
85
+ builder_result: builderResult,
86
+ };
87
+ }
88
+ /**
89
+ * Appends a stop history entry to guardrail state, capping at 50 entries.
90
+ *
91
+ * @param state - Current tick state
92
+ * @param entry - Stop history entry to add
93
+ * @returns Updated tick state
94
+ */
95
+ export function appendStopHistory(state, entry) {
96
+ const guardrail = state.guardrail ?? {
97
+ force_patch_until_success: false,
98
+ last_risk_flags: [],
99
+ stop_history: [],
100
+ };
101
+ // Add entry and cap to 50 entries (keep most recent)
102
+ const updatedHistory = [...guardrail.stop_history, entry].slice(-50);
103
+ return {
104
+ ...state,
105
+ guardrail: {
106
+ ...guardrail,
107
+ stop_history: updatedHistory,
108
+ },
109
+ };
110
+ }
111
+ /**
112
+ * Clears force patch flag (sets force_patch_until_success to false).
113
+ *
114
+ * Called when a patch succeeds to reset escalation state.
115
+ *
116
+ * @param state - Current tick state
117
+ * @returns Updated tick state
118
+ */
119
+ export function clearForcePatch(state) {
120
+ if (!state.guardrail) {
121
+ return state;
122
+ }
123
+ return {
124
+ ...state,
125
+ guardrail: {
126
+ ...state.guardrail,
127
+ force_patch_until_success: false,
128
+ },
129
+ };
130
+ }
131
+ /**
132
+ * Sets force patch flag (sets force_patch_until_success to true).
133
+ *
134
+ * Called to enable escalation mode when guardrails trigger.
135
+ *
136
+ * @param state - Current tick state
137
+ * @returns Updated tick state
138
+ */
139
+ export function setForcePatch(state) {
140
+ const guardrail = state.guardrail ?? {
141
+ force_patch_until_success: false,
142
+ last_risk_flags: [],
143
+ stop_history: [],
144
+ };
145
+ return {
146
+ ...state,
147
+ guardrail: {
148
+ ...guardrail,
149
+ force_patch_until_success: true,
150
+ },
151
+ };
152
+ }
153
+ /**
154
+ * Updates the task fingerprint in tick state.
155
+ *
156
+ * @param state - Current tick state
157
+ * @param fingerprint - SHA256 fingerprint of the current task
158
+ * @returns Updated tick state
159
+ */
160
+ export function updateTaskFingerprint(state, fingerprint) {
161
+ return {
162
+ ...state,
163
+ task_fingerprint: fingerprint,
164
+ };
165
+ }
166
+ /**
167
+ * Updates failure tracking when a task fails.
168
+ *
169
+ * Increments failure_streak and updates last_failed_fingerprint.
170
+ *
171
+ * @param state - Current tick state
172
+ * @param fingerprint - SHA256 fingerprint of the failed task
173
+ * @returns Updated tick state
174
+ */
175
+ export function recordTaskFailure(state, fingerprint) {
176
+ return {
177
+ ...state,
178
+ last_failed_fingerprint: fingerprint,
179
+ failure_streak: (state.failure_streak ?? 0) + 1,
180
+ };
181
+ }
182
+ /**
183
+ * Resets failure streak when a task succeeds.
184
+ *
185
+ * @param state - Current tick state
186
+ * @returns Updated tick state
187
+ */
188
+ export function resetFailureStreak(state) {
189
+ return {
190
+ ...state,
191
+ failure_streak: 0,
192
+ };
193
+ }
194
+ /**
195
+ * Appends a verify history entry, capping at 50 entries.
196
+ *
197
+ * @param state - Current tick state
198
+ * @param entry - Verify history entry to add
199
+ * @returns Updated tick state
200
+ */
201
+ export function appendVerifyHistory(state, entry) {
202
+ const currentHistory = state.verify_history ?? [];
203
+ // Add entry and cap to 50 entries (keep most recent)
204
+ const updatedHistory = [...currentHistory, entry].slice(-50);
205
+ return {
206
+ ...state,
207
+ verify_history: updatedHistory,
208
+ };
209
+ }
210
+ /**
211
+ * Increments the retry count for transport stall recovery.
212
+ *
213
+ * @param state - Current tick state
214
+ * @returns Updated tick state with incremented retry_count
215
+ */
216
+ export function incrementRetryCount(state) {
217
+ return {
218
+ ...state,
219
+ retry_count: (state.retry_count ?? 0) + 1,
220
+ };
221
+ }
222
+ /**
223
+ * Records a transport stall error in state.
224
+ *
225
+ * Used to track the last error kind and request ID for debugging
226
+ * and retry policy decisions.
227
+ *
228
+ * @param state - Current tick state
229
+ * @param errorKind - Kind of error (e.g., 'transport_stalled')
230
+ * @param requestId - Request ID from the stall (for debugging)
231
+ * @returns Updated tick state
232
+ */
233
+ export function recordTransportStall(state, errorKind, requestId) {
234
+ return {
235
+ ...state,
236
+ last_error_kind: errorKind,
237
+ last_request_id: requestId,
238
+ retry_count: (state.retry_count ?? 0) + 1,
239
+ };
240
+ }
241
+ /**
242
+ * Resets retry state after a successful tick.
243
+ *
244
+ * Clears retry_count, last_error_kind, and last_request_id.
245
+ * Called when a tick completes successfully to reset recovery state.
246
+ *
247
+ * @param state - Current tick state
248
+ * @returns Updated tick state with cleared retry fields
249
+ */
250
+ export function resetRetryState(state) {
251
+ return {
252
+ ...state,
253
+ retry_count: 0,
254
+ last_error_kind: undefined,
255
+ last_request_id: undefined,
256
+ };
257
+ }
258
+ //# sourceMappingURL=state.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"state.js","sourceRoot":"","sources":["../../src/lib/state.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,310 @@
1
+ /**
2
+ * Tick runner with transport stall handling and retry policy.
3
+ *
4
+ * Provides functions to handle transport stalls during ORCHESTRATE or BUILD phases.
5
+ * When a stall is detected:
6
+ * 1. Check if repo is dirty
7
+ * 2. Rollback if needed
8
+ * 3. Return BLOCKED_TRANSPORT_STALLED with evidence
9
+ *
10
+ * Retry policy (M21):
11
+ * - Attempt 1: Retry same task unchanged
12
+ * - Attempt 2: Retry with degraded settings
13
+ * - Attempt 3+: Block and require human action
14
+ */
15
+ import type { TransportStallError, TransportStallStage } from '../types/preflight.js';
16
+ import type { RollbackResultNew } from './rollback.js';
17
+ import type { DiffLimits } from '../types/task.js';
18
+ import type { EnvoiConfig } from '../types/config.js';
19
+ import type { TickState } from '../types/state.js';
20
+ /**
21
+ * Maximum retry attempts before blocking.
22
+ */
23
+ export declare const MAX_RETRY_ATTEMPTS = 3;
24
+ /**
25
+ * Recovery prompt to prepend when retrying after a transport stall.
26
+ *
27
+ * This prompt reminds the model that previous work may have been lost
28
+ * and to read files before making assumptions about their state.
29
+ */
30
+ export declare const RECOVERY_PROMPT = "IMPORTANT: This is a retry after a transport stall. The previous attempt may have been interrupted.\n\nDo NOT assume your previous edits were applied. The connection may have stalled:\n- Before any changes were made\n- In the middle of changes (partial writes)\n- After changes were made but before confirmation\n\nBEFORE making any edits:\n1. Read the relevant files to verify their current state\n2. Check if your intended changes already exist\n3. Proceed based on the actual file contents, not your memory of what you tried to do\n\nIf the task appears completed, verify and report success. If not, complete it from the current state.";
31
+ /**
32
+ * Returns the recovery prompt to prepend when retrying.
33
+ *
34
+ * The recovery prompt is used on any retry (retry_unchanged or retry_degraded)
35
+ * to remind the model that previous work may have been lost.
36
+ *
37
+ * @param retryCount - Current retry count (0 = first attempt, no recovery prompt)
38
+ * @returns Recovery prompt string if retrying, empty string for first attempt
39
+ */
40
+ export declare function getRecoveryPrompt(retryCount: number): string;
41
+ /**
42
+ * Builds the full prompt with optional recovery prefix.
43
+ *
44
+ * If retrying after a stall, prepends the recovery prompt to the original prompt.
45
+ *
46
+ * @param originalPrompt - The original prompt content
47
+ * @param retryCount - Current retry count (0 = first attempt)
48
+ * @returns Full prompt with recovery prefix if applicable
49
+ */
50
+ export declare function buildPromptWithRecovery(originalPrompt: string, retryCount: number): string;
51
+ /**
52
+ * Action to take based on retry count.
53
+ */
54
+ export type RetryAction = 'retry_unchanged' | 'retry_degraded' | 'block';
55
+ /**
56
+ * Degraded settings applied on retry attempt 2.
57
+ */
58
+ export interface DegradedSettings {
59
+ /** Reduced max_turns for builder (50% of original, minimum 5) */
60
+ max_turns: number;
61
+ /** Stricter diff limits (50% of original) */
62
+ diff_limits: DiffLimits;
63
+ /** Prefer patch mode if available */
64
+ prefer_patch_mode: boolean;
65
+ }
66
+ /**
67
+ * Result of computing retry action.
68
+ */
69
+ export interface RetryDecision {
70
+ /** The action to take */
71
+ action: RetryAction;
72
+ /** Current retry count (after this attempt) */
73
+ retry_count: number;
74
+ /** Degraded settings if action is 'retry_degraded' */
75
+ degraded_settings?: DegradedSettings;
76
+ /** Human-readable reason for the decision */
77
+ reason: string;
78
+ }
79
+ /**
80
+ * Computes the retry action based on the current retry count.
81
+ *
82
+ * Retry policy:
83
+ * - retry_count 0 or 1 → retry_unchanged (first failure, try again)
84
+ * - retry_count 2 → retry_degraded (second failure, use safer settings)
85
+ * - retry_count >= 3 → block (third failure, require human)
86
+ *
87
+ * @param retryCount - Current retry count from state (before this attempt)
88
+ * @returns The action to take
89
+ */
90
+ export declare function getRetryAction(retryCount: number): RetryAction;
91
+ /**
92
+ * Computes the full retry decision including degraded settings if needed.
93
+ *
94
+ * @param retryCount - Current retry count from state
95
+ * @param originalMaxTurns - Original max_turns from config (default 50)
96
+ * @param originalDiffLimits - Original diff limits from config
97
+ * @returns Full retry decision with settings and reason
98
+ */
99
+ export declare function computeRetryDecision(retryCount: number, originalMaxTurns?: number, originalDiffLimits?: DiffLimits): RetryDecision;
100
+ /**
101
+ * Computes degraded settings for retry attempt 2.
102
+ *
103
+ * Applies conservative reductions:
104
+ * - max_turns: 50% of original, minimum 5
105
+ * - max_files_touched: 50% of original, minimum 5
106
+ * - max_lines_changed: 50% of original, minimum 100
107
+ * - prefer_patch_mode: true
108
+ *
109
+ * @param originalMaxTurns - Original max_turns from config
110
+ * @param originalDiffLimits - Original diff limits from config
111
+ * @returns Degraded settings
112
+ */
113
+ export declare function computeDegradedSettings(originalMaxTurns: number, originalDiffLimits: DiffLimits): DegradedSettings;
114
+ /**
115
+ * Checks if retry is allowed based on current retry count.
116
+ *
117
+ * @param retryCount - Current retry count
118
+ * @returns true if retry is allowed, false if blocked
119
+ */
120
+ export declare function canRetry(retryCount: number): boolean;
121
+ /**
122
+ * Formats retry decision as human-readable message.
123
+ *
124
+ * @param decision - The retry decision
125
+ * @returns Formatted message
126
+ */
127
+ export declare function formatRetryDecision(decision: RetryDecision): string;
128
+ /**
129
+ * Applies degraded settings to a EnvoiConfig.
130
+ *
131
+ * Used during retry attempt 2 to run with more conservative settings.
132
+ * Creates a new config object without mutating the original.
133
+ *
134
+ * Settings applied:
135
+ * - builder.claude_code.max_turns: reduced to degraded value
136
+ * - diff_limits.default_max_files_touched: reduced to degraded value
137
+ * - diff_limits.default_max_lines_changed: reduced to degraded value
138
+ * - builder.default_mode: set to 'patch' if allow_patch_mode is true and prefer_patch_mode is set
139
+ *
140
+ * @param config - Original EnvoiConfig
141
+ * @param degraded - Degraded settings to apply
142
+ * @returns New config with degraded settings applied
143
+ */
144
+ export declare function applyDegradedConfig(config: EnvoiConfig, degraded: DegradedSettings): EnvoiConfig;
145
+ /**
146
+ * Extracts relevant settings from config for computing degraded settings.
147
+ *
148
+ * @param config - EnvoiConfig to extract from
149
+ * @returns Object with max_turns and diff_limits for degradation computation
150
+ */
151
+ export declare function extractDegradationInputs(config: EnvoiConfig): {
152
+ max_turns: number;
153
+ diff_limits: DiffLimits;
154
+ };
155
+ /**
156
+ * Convenience function to degrade a config based on retry count.
157
+ *
158
+ * If retry action is 'retry_degraded', applies degraded settings to config.
159
+ * Otherwise, returns the original config unchanged.
160
+ *
161
+ * @param config - Original config
162
+ * @param retryCount - Current retry count
163
+ * @returns Degraded config if appropriate, original config otherwise
164
+ */
165
+ export declare function getDegradedConfigIfNeeded(config: EnvoiConfig, retryCount: number): EnvoiConfig;
166
+ /**
167
+ * Tick outcome types for retry state management.
168
+ */
169
+ export type TickOutcome = 'SUCCESS' | 'STOP' | 'BLOCKED_STALL' | 'BLOCKED_OTHER';
170
+ /**
171
+ * Determines if retry state should be reset based on tick outcome.
172
+ *
173
+ * Retry state is reset on:
174
+ * - SUCCESS: Task completed successfully
175
+ * - STOP: Task failed with a STOP code (not a transport issue)
176
+ *
177
+ * Retry state is NOT reset on:
178
+ * - BLOCKED_STALL: Transport stall, may retry
179
+ * - BLOCKED_OTHER: Other blocked conditions
180
+ *
181
+ * @param outcome - The tick outcome
182
+ * @returns true if retry state should be reset
183
+ */
184
+ export declare function shouldResetRetryState(outcome: TickOutcome): boolean;
185
+ /**
186
+ * Updates tick state based on completion outcome.
187
+ *
188
+ * On SUCCESS or STOP:
189
+ * - Resets retry_count to 0
190
+ * - Clears last_error_kind and last_request_id
191
+ *
192
+ * On BLOCKED_STALL:
193
+ * - Records the stall (increments retry_count, sets error fields)
194
+ *
195
+ * On BLOCKED_OTHER:
196
+ * - No changes to retry state
197
+ *
198
+ * @param state - Current tick state
199
+ * @param outcome - The tick outcome
200
+ * @param stallInfo - Stall info if outcome is BLOCKED_STALL
201
+ * @returns Updated tick state
202
+ */
203
+ export declare function updateStateForOutcome(state: TickState, outcome: TickOutcome, stallInfo?: {
204
+ errorKind: string;
205
+ requestId: string | null;
206
+ }): TickState;
207
+ /**
208
+ * Convenience function to handle successful tick completion.
209
+ *
210
+ * Resets all retry state fields to clear recovery mode.
211
+ * Call this when a tick completes with SUCCESS verdict.
212
+ *
213
+ * @param state - Current tick state
214
+ * @returns Updated state with retry fields cleared
215
+ */
216
+ export declare function handleTickSuccess(state: TickState): TickState;
217
+ /**
218
+ * Convenience function to handle tick failure with STOP code.
219
+ *
220
+ * Resets retry state because STOP is a definitive failure,
221
+ * not a transient transport issue that might benefit from retry.
222
+ *
223
+ * @param state - Current tick state
224
+ * @returns Updated state with retry fields cleared
225
+ */
226
+ export declare function handleTickStop(state: TickState): TickState;
227
+ /**
228
+ * Convenience function to handle transport stall.
229
+ *
230
+ * Increments retry_count and records error information.
231
+ * Call this when a tick is blocked due to transport stall.
232
+ *
233
+ * @param state - Current tick state
234
+ * @param requestId - Request ID from the stall (for debugging)
235
+ * @returns Updated state with incremented retry count
236
+ */
237
+ export declare function handleTickStall(state: TickState, requestId: string | null): TickState;
238
+ /**
239
+ * Result of handling a transport stall.
240
+ */
241
+ export interface StallHandlingResult {
242
+ /** Always 'BLOCKED' for stall handling */
243
+ status: 'BLOCKED';
244
+ /** The blocked code */
245
+ blockedCode: 'BLOCKED_TRANSPORT_STALLED';
246
+ /** The stage where the stall occurred */
247
+ stage: TransportStallStage;
248
+ /** Request ID if available */
249
+ requestId: string | null;
250
+ /** Raw error message */
251
+ rawError: string;
252
+ /** Whether rollback was performed */
253
+ rollbackPerformed: boolean;
254
+ /** Rollback result if performed */
255
+ rollbackResult: RollbackResultNew | null;
256
+ /** Whether repo was dirty before rollback */
257
+ wasDirty: boolean;
258
+ /** Base commit used for rollback */
259
+ baseCommit: string;
260
+ }
261
+ /**
262
+ * Options for stall handling.
263
+ */
264
+ export interface StallHandlingOptions {
265
+ /** Skip rollback (for testing) */
266
+ skipRollback?: boolean;
267
+ }
268
+ /**
269
+ * Handles a transport stall during tick execution.
270
+ *
271
+ * When a stall is detected:
272
+ * 1. Checks if the git worktree is dirty
273
+ * 2. If dirty, rolls back to the base commit
274
+ * 3. Returns a BLOCKED result with stall evidence
275
+ *
276
+ * @param stallError - The structured stall error
277
+ * @param baseCommit - The commit to rollback to if needed
278
+ * @param options - Optional handling options
279
+ * @returns StallHandlingResult with rollback status and stall evidence
280
+ *
281
+ * @example
282
+ * ```typescript
283
+ * const result = await invokeWithStallDetection(config, invocation, 'BUILD');
284
+ * if (!result.ok) {
285
+ * const stallResult = await handleTransportStall(result.error, baseCommit);
286
+ * // stallResult.blockedCode === 'BLOCKED_TRANSPORT_STALLED'
287
+ * }
288
+ * ```
289
+ */
290
+ export declare function handleTransportStall(stallError: TransportStallError, baseCommit: string, options?: StallHandlingOptions): Promise<StallHandlingResult>;
291
+ /**
292
+ * Checks if a stall occurred and handles it if so.
293
+ *
294
+ * This is a convenience wrapper that combines stall detection with handling.
295
+ *
296
+ * @param error - Any error that might be a stall
297
+ * @param stage - The stage where the error occurred
298
+ * @param baseCommit - The commit to rollback to if needed
299
+ * @param options - Optional handling options
300
+ * @returns StallHandlingResult if stall detected, null otherwise
301
+ */
302
+ export declare function checkAndHandleStall(stallError: TransportStallError | null, baseCommit: string, options?: StallHandlingOptions): Promise<StallHandlingResult | null>;
303
+ /**
304
+ * Creates a human-readable message for a stall handling result.
305
+ *
306
+ * @param result - The stall handling result
307
+ * @returns Formatted message string
308
+ */
309
+ export declare function formatStallResult(result: StallHandlingResult): string;
310
+ //# sourceMappingURL=tick.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tick.d.ts","sourceRoot":"","sources":["../../src/lib/tick.ts"],"names":[],"mappings":"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"}