@interf/compiler 0.5.1 → 0.6.3

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 (353) hide show
  1. package/README.md +160 -201
  2. package/builtin-workflows/interf/README.md +22 -10
  3. package/builtin-workflows/interf/compile/stages/shape/SKILL.md +8 -5
  4. package/builtin-workflows/interf/compile/stages/structure/SKILL.md +3 -0
  5. package/builtin-workflows/interf/compile/stages/summarize/SKILL.md +18 -2
  6. package/builtin-workflows/interf/improve/SKILL.md +4 -4
  7. package/builtin-workflows/interf/use/query/SKILL.md +1 -1
  8. package/builtin-workflows/interf/workflow.json +19 -5
  9. package/builtin-workflows/interf/{compiled.schema.json → workflow.schema.json} +10 -3
  10. package/dist/bin.js +2 -28
  11. package/dist/{commands → cli/commands}/check-draft.d.ts +2 -2
  12. package/dist/{commands → cli/commands}/check-draft.js +13 -13
  13. package/dist/{commands → cli/commands}/compile-controller.d.ts +3 -3
  14. package/dist/{commands → cli/commands}/compile-controller.js +39 -44
  15. package/dist/cli/commands/compile.d.ts +33 -0
  16. package/dist/{commands → cli/commands}/compile.js +107 -33
  17. package/dist/{commands → cli/commands}/compiled-flow.d.ts +3 -4
  18. package/dist/{commands → cli/commands}/compiled-flow.js +9 -14
  19. package/dist/{commands → cli/commands}/create-workflow-wizard.d.ts +20 -2
  20. package/dist/cli/commands/create-workflow-wizard.js +288 -0
  21. package/dist/{commands → cli/commands}/create.d.ts +2 -2
  22. package/dist/cli/commands/create.js +166 -0
  23. package/dist/cli/commands/dataset-selection.d.ts +6 -0
  24. package/dist/cli/commands/dataset-selection.js +11 -0
  25. package/dist/{commands → cli/commands}/default.js +5 -5
  26. package/dist/{commands → cli/commands}/doctor.js +12 -13
  27. package/dist/{commands → cli/commands}/executor-flow.d.ts +2 -2
  28. package/dist/{commands → cli/commands}/executor-flow.js +17 -17
  29. package/dist/cli/commands/init.d.ts +11 -0
  30. package/dist/{commands → cli/commands}/init.js +202 -109
  31. package/dist/{commands → cli/commands}/list.js +9 -6
  32. package/dist/{commands → cli/commands}/reset.js +5 -5
  33. package/dist/{commands → cli/commands}/source-config-wizard.d.ts +10 -5
  34. package/dist/{commands → cli/commands}/source-config-wizard.js +202 -95
  35. package/dist/{commands → cli/commands}/status.js +20 -11
  36. package/dist/{commands → cli/commands}/test-flow.d.ts +13 -4
  37. package/dist/{commands → cli/commands}/test-flow.js +30 -26
  38. package/dist/cli/commands/test.d.ts +14 -0
  39. package/dist/{commands → cli/commands}/test.js +48 -40
  40. package/dist/{commands → cli/commands}/verify.js +4 -4
  41. package/dist/cli/index.d.ts +21 -0
  42. package/dist/cli/index.js +33 -0
  43. package/dist/index.d.ts +22 -11
  44. package/dist/index.js +15 -6
  45. package/dist/lib/agent-args.d.ts +1 -3
  46. package/dist/lib/agent-args.js +1 -42
  47. package/dist/lib/agent-constants.d.ts +1 -5
  48. package/dist/lib/agent-constants.js +1 -28
  49. package/dist/lib/agent-detection.d.ts +1 -7
  50. package/dist/lib/agent-detection.js +1 -65
  51. package/dist/lib/agent-execution.d.ts +1 -2
  52. package/dist/lib/agent-execution.js +1 -242
  53. package/dist/lib/agent-logs.d.ts +1 -2
  54. package/dist/lib/agent-logs.js +1 -17
  55. package/dist/lib/agent-preflight.d.ts +1 -7
  56. package/dist/lib/agent-preflight.js +1 -76
  57. package/dist/lib/agent-render.d.ts +1 -8
  58. package/dist/lib/agent-render.js +1 -218
  59. package/dist/lib/agent-shells.d.ts +1 -44
  60. package/dist/lib/agent-shells.js +1 -847
  61. package/dist/lib/agent-status.d.ts +1 -3
  62. package/dist/lib/agent-status.js +1 -58
  63. package/dist/lib/agent-types.d.ts +1 -30
  64. package/dist/lib/agent-types.js +1 -1
  65. package/dist/lib/agents.d.ts +1 -6
  66. package/dist/lib/agents.js +1 -5
  67. package/dist/lib/builtin-compiled-workflow.d.ts +1 -129
  68. package/dist/lib/builtin-compiled-workflow.js +1 -153
  69. package/dist/lib/compiled-compile.d.ts +1 -52
  70. package/dist/lib/compiled-compile.js +1 -274
  71. package/dist/lib/compiled-paths.d.ts +1 -39
  72. package/dist/lib/compiled-paths.js +3 -103
  73. package/dist/lib/compiled-raw.d.ts +1 -49
  74. package/dist/lib/compiled-raw.js +3 -102
  75. package/dist/lib/compiled-reset.d.ts +1 -1
  76. package/dist/lib/compiled-reset.js +3 -44
  77. package/dist/lib/compiled-schema.d.ts +1 -27
  78. package/dist/lib/compiled-schema.js +1 -110
  79. package/dist/lib/discovery.d.ts +1 -1
  80. package/dist/lib/discovery.js +2 -2
  81. package/dist/lib/execution-profile.d.ts +1 -17
  82. package/dist/lib/execution-profile.js +1 -84
  83. package/dist/lib/executors.d.ts +1 -32
  84. package/dist/lib/executors.js +1 -43
  85. package/dist/lib/interf-bootstrap.d.ts +1 -3
  86. package/dist/lib/interf-bootstrap.js +3 -18
  87. package/dist/lib/interf-detect.d.ts +1 -33
  88. package/dist/lib/interf-detect.js +3 -176
  89. package/dist/lib/interf-scaffold.d.ts +1 -2
  90. package/dist/lib/interf-scaffold.js +3 -121
  91. package/dist/lib/interf-workflow-package.d.ts +1 -20
  92. package/dist/lib/interf-workflow-package.js +1 -276
  93. package/dist/lib/interf.d.ts +1 -5
  94. package/dist/lib/interf.js +3 -4
  95. package/dist/lib/local-workflows.d.ts +1 -53
  96. package/dist/lib/local-workflows.js +1 -399
  97. package/dist/lib/package-root.d.ts +1 -0
  98. package/dist/lib/package-root.js +1 -0
  99. package/dist/lib/project-paths.d.ts +1 -11
  100. package/dist/lib/project-paths.js +3 -32
  101. package/dist/lib/runtime-acceptance.d.ts +1 -9
  102. package/dist/lib/runtime-acceptance.js +1 -257
  103. package/dist/lib/runtime-contracts.d.ts +1 -2
  104. package/dist/lib/runtime-contracts.js +1 -47
  105. package/dist/lib/runtime-inventory.d.ts +1 -7
  106. package/dist/lib/runtime-inventory.js +1 -29
  107. package/dist/lib/runtime-paths.d.ts +1 -7
  108. package/dist/lib/runtime-paths.js +1 -23
  109. package/dist/lib/runtime-prompt.d.ts +1 -2
  110. package/dist/lib/runtime-prompt.js +1 -46
  111. package/dist/lib/runtime-reconcile.d.ts +1 -2
  112. package/dist/lib/runtime-reconcile.js +1 -156
  113. package/dist/lib/runtime-runs.d.ts +1 -11
  114. package/dist/lib/runtime-runs.js +1 -250
  115. package/dist/lib/runtime-types.d.ts +1 -43
  116. package/dist/lib/runtime-types.js +1 -1
  117. package/dist/lib/runtime.d.ts +1 -6
  118. package/dist/lib/runtime.js +1 -5
  119. package/dist/lib/schema.d.ts +4 -1016
  120. package/dist/lib/schema.js +6 -539
  121. package/dist/lib/source-config.d.ts +1 -39
  122. package/dist/lib/source-config.js +3 -293
  123. package/dist/lib/state-artifacts.d.ts +1 -8
  124. package/dist/lib/state-artifacts.js +1 -13
  125. package/dist/lib/state-health.d.ts +1 -4
  126. package/dist/lib/state-health.js +1 -132
  127. package/dist/lib/state-io.d.ts +1 -10
  128. package/dist/lib/state-io.js +1 -76
  129. package/dist/lib/state-paths.d.ts +1 -4
  130. package/dist/lib/state-paths.js +1 -13
  131. package/dist/lib/state-view.d.ts +1 -4
  132. package/dist/lib/state-view.js +1 -103
  133. package/dist/lib/state.d.ts +1 -6
  134. package/dist/lib/state.js +1 -5
  135. package/dist/lib/test-execution.d.ts +1 -14
  136. package/dist/lib/test-execution.js +3 -525
  137. package/dist/lib/test-matrices.d.ts +1 -90
  138. package/dist/lib/test-matrices.js +3 -96
  139. package/dist/lib/test-paths.d.ts +1 -12
  140. package/dist/lib/test-paths.js +3 -59
  141. package/dist/lib/test-profile-presets.d.ts +1 -57
  142. package/dist/lib/test-profile-presets.js +3 -50
  143. package/dist/lib/test-sandbox.d.ts +1 -11
  144. package/dist/lib/test-sandbox.js +3 -105
  145. package/dist/lib/test-specs.d.ts +1 -7
  146. package/dist/lib/test-specs.js +3 -114
  147. package/dist/lib/test-targets.d.ts +1 -5
  148. package/dist/lib/test-targets.js +3 -38
  149. package/dist/lib/test-types.d.ts +1 -17
  150. package/dist/lib/test-types.js +3 -1
  151. package/dist/lib/test.d.ts +1 -4
  152. package/dist/lib/test.js +3 -3
  153. package/dist/lib/validate-compiled.d.ts +1 -27
  154. package/dist/lib/validate-compiled.js +1 -238
  155. package/dist/lib/validate-helpers.d.ts +1 -12
  156. package/dist/lib/validate-helpers.js +1 -41
  157. package/dist/lib/validate.d.ts +1 -19
  158. package/dist/lib/validate.js +1 -256
  159. package/dist/lib/workflow-authoring.d.ts +1 -0
  160. package/dist/lib/workflow-authoring.js +1 -0
  161. package/dist/lib/workflow-definitions.d.ts +1 -68
  162. package/dist/lib/workflow-definitions.js +1 -206
  163. package/dist/lib/workflow-edit-session.d.ts +1 -0
  164. package/dist/lib/workflow-edit-session.js +1 -0
  165. package/dist/lib/workflow-edit-utils.d.ts +1 -0
  166. package/dist/lib/workflow-edit-utils.js +1 -0
  167. package/dist/lib/workflow-helpers.d.ts +1 -38
  168. package/dist/lib/workflow-helpers.js +1 -167
  169. package/dist/lib/workflow-improvement.d.ts +1 -22
  170. package/dist/lib/workflow-improvement.js +1 -396
  171. package/dist/lib/workflow-primitives.d.ts +1 -2
  172. package/dist/lib/workflow-primitives.js +1 -5
  173. package/dist/lib/workflow-review-paths.d.ts +1 -10
  174. package/dist/lib/workflow-review-paths.js +1 -27
  175. package/dist/lib/workflow-stage-policy.d.ts +1 -0
  176. package/dist/lib/workflow-stage-policy.js +1 -0
  177. package/dist/lib/workflow-stage-runner.d.ts +1 -41
  178. package/dist/lib/workflow-stage-runner.js +1 -109
  179. package/dist/lib/workflows.d.ts +1 -15
  180. package/dist/lib/workflows.js +1 -31
  181. package/dist/packages/agents/index.d.ts +17 -0
  182. package/dist/packages/agents/index.js +15 -0
  183. package/dist/packages/agents/lib/agents.d.ts +6 -0
  184. package/dist/packages/agents/lib/agents.js +5 -0
  185. package/dist/packages/agents/lib/args.d.ts +4 -0
  186. package/dist/packages/agents/lib/args.js +52 -0
  187. package/dist/packages/agents/lib/constants.d.ts +5 -0
  188. package/dist/packages/agents/lib/constants.js +28 -0
  189. package/dist/packages/agents/lib/detection.d.ts +7 -0
  190. package/dist/packages/agents/lib/detection.js +65 -0
  191. package/dist/packages/agents/lib/execution-profile.d.ts +17 -0
  192. package/dist/packages/agents/lib/execution-profile.js +84 -0
  193. package/dist/packages/agents/lib/execution.d.ts +2 -0
  194. package/dist/packages/agents/lib/execution.js +243 -0
  195. package/dist/packages/agents/lib/executors.d.ts +32 -0
  196. package/dist/packages/agents/lib/executors.js +45 -0
  197. package/dist/packages/agents/lib/logs.d.ts +2 -0
  198. package/dist/packages/agents/lib/logs.js +17 -0
  199. package/dist/packages/agents/lib/preflight.d.ts +7 -0
  200. package/dist/packages/agents/lib/preflight.js +77 -0
  201. package/dist/packages/agents/lib/render.d.ts +8 -0
  202. package/dist/packages/agents/lib/render.js +218 -0
  203. package/dist/packages/agents/lib/schema.d.ts +8 -0
  204. package/dist/packages/agents/lib/schema.js +7 -0
  205. package/dist/packages/agents/lib/shells.d.ts +69 -0
  206. package/dist/packages/agents/lib/shells.js +1021 -0
  207. package/dist/packages/agents/lib/status.d.ts +3 -0
  208. package/dist/packages/agents/lib/status.js +58 -0
  209. package/dist/packages/agents/lib/types.d.ts +30 -0
  210. package/dist/packages/agents/lib/types.js +1 -0
  211. package/dist/{lib → packages/agents/lib}/user-config.d.ts +1 -0
  212. package/dist/{lib → packages/agents/lib}/user-config.js +3 -2
  213. package/dist/packages/compiler/compiled-compile.d.ts +48 -0
  214. package/dist/packages/compiler/compiled-compile.js +256 -0
  215. package/dist/packages/compiler/compiled-schema.d.ts +31 -0
  216. package/dist/packages/compiler/compiled-schema.js +141 -0
  217. package/dist/packages/compiler/index.d.ts +24 -0
  218. package/dist/packages/compiler/index.js +23 -0
  219. package/dist/packages/compiler/lib/schema.d.ts +684 -0
  220. package/dist/packages/compiler/lib/schema.js +361 -0
  221. package/dist/packages/compiler/runtime-acceptance.d.ts +9 -0
  222. package/dist/packages/compiler/runtime-acceptance.js +269 -0
  223. package/dist/packages/compiler/runtime-contracts.d.ts +2 -0
  224. package/dist/packages/compiler/runtime-contracts.js +48 -0
  225. package/dist/packages/compiler/runtime-inventory.d.ts +7 -0
  226. package/dist/packages/compiler/runtime-inventory.js +29 -0
  227. package/dist/packages/compiler/runtime-paths.d.ts +8 -0
  228. package/dist/packages/compiler/runtime-paths.js +26 -0
  229. package/dist/packages/compiler/runtime-prompt.d.ts +2 -0
  230. package/dist/packages/compiler/runtime-prompt.js +48 -0
  231. package/dist/packages/compiler/runtime-reconcile.d.ts +2 -0
  232. package/dist/packages/compiler/runtime-reconcile.js +193 -0
  233. package/dist/packages/compiler/runtime-runs.d.ts +11 -0
  234. package/dist/packages/compiler/runtime-runs.js +262 -0
  235. package/dist/packages/compiler/runtime-types.d.ts +43 -0
  236. package/dist/packages/compiler/runtime-types.js +1 -0
  237. package/dist/packages/compiler/runtime.d.ts +6 -0
  238. package/dist/packages/compiler/runtime.js +5 -0
  239. package/dist/packages/compiler/state-artifacts.d.ts +8 -0
  240. package/dist/packages/compiler/state-artifacts.js +13 -0
  241. package/dist/packages/compiler/state-health.d.ts +4 -0
  242. package/dist/packages/compiler/state-health.js +132 -0
  243. package/dist/packages/compiler/state-io.d.ts +10 -0
  244. package/dist/packages/compiler/state-io.js +76 -0
  245. package/dist/packages/compiler/state-paths.d.ts +4 -0
  246. package/dist/packages/compiler/state-paths.js +13 -0
  247. package/dist/packages/compiler/state-view.d.ts +4 -0
  248. package/dist/packages/compiler/state-view.js +103 -0
  249. package/dist/packages/compiler/state.d.ts +7 -0
  250. package/dist/packages/compiler/state.js +12 -0
  251. package/dist/packages/compiler/validate-compiled.d.ts +27 -0
  252. package/dist/packages/compiler/validate-compiled.js +241 -0
  253. package/dist/packages/compiler/validate-helpers.d.ts +12 -0
  254. package/dist/packages/compiler/validate-helpers.js +41 -0
  255. package/dist/packages/compiler/validate.d.ts +21 -0
  256. package/dist/packages/compiler/validate.js +249 -0
  257. package/dist/packages/compiler/workflow-primitives.d.ts +2 -0
  258. package/dist/packages/compiler/workflow-primitives.js +5 -0
  259. package/dist/packages/compiler/workflows.d.ts +15 -0
  260. package/dist/packages/compiler/workflows.js +31 -0
  261. package/dist/packages/project-model/compiled-paths.d.ts +40 -0
  262. package/dist/packages/project-model/compiled-paths.js +106 -0
  263. package/dist/packages/project-model/compiled-raw.d.ts +49 -0
  264. package/dist/packages/project-model/compiled-raw.js +102 -0
  265. package/dist/packages/project-model/compiled-reset.d.ts +2 -0
  266. package/dist/packages/project-model/compiled-reset.js +72 -0
  267. package/dist/packages/project-model/index.d.ts +11 -0
  268. package/dist/packages/project-model/index.js +10 -0
  269. package/dist/packages/project-model/interf-bootstrap.d.ts +3 -0
  270. package/dist/packages/project-model/interf-bootstrap.js +18 -0
  271. package/dist/packages/project-model/interf-detect.d.ts +33 -0
  272. package/dist/packages/project-model/interf-detect.js +176 -0
  273. package/dist/packages/project-model/interf-scaffold.d.ts +2 -0
  274. package/dist/packages/project-model/interf-scaffold.js +124 -0
  275. package/dist/packages/project-model/interf.d.ts +5 -0
  276. package/dist/packages/project-model/interf.js +4 -0
  277. package/dist/packages/project-model/lib/schema.d.ts +125 -0
  278. package/dist/packages/project-model/lib/schema.js +62 -0
  279. package/dist/packages/project-model/project-paths.d.ts +11 -0
  280. package/dist/packages/project-model/project-paths.js +32 -0
  281. package/dist/packages/project-model/source-config.d.ts +38 -0
  282. package/dist/packages/project-model/source-config.js +297 -0
  283. package/dist/packages/testing/index.d.ts +13 -0
  284. package/dist/packages/testing/index.js +10 -0
  285. package/dist/packages/testing/lib/schema.d.ts +261 -0
  286. package/dist/packages/testing/lib/schema.js +119 -0
  287. package/dist/packages/testing/test-execution.d.ts +14 -0
  288. package/dist/packages/testing/test-execution.js +525 -0
  289. package/dist/packages/testing/test-matrices.d.ts +90 -0
  290. package/dist/packages/testing/test-matrices.js +96 -0
  291. package/dist/packages/testing/test-paths.d.ts +12 -0
  292. package/dist/packages/testing/test-paths.js +59 -0
  293. package/dist/packages/testing/test-profile-presets.d.ts +57 -0
  294. package/dist/packages/testing/test-profile-presets.js +50 -0
  295. package/dist/packages/testing/test-sandbox.d.ts +11 -0
  296. package/dist/packages/testing/test-sandbox.js +105 -0
  297. package/dist/packages/testing/test-specs.d.ts +7 -0
  298. package/dist/packages/testing/test-specs.js +114 -0
  299. package/dist/packages/testing/test-targets.d.ts +5 -0
  300. package/dist/packages/testing/test-targets.js +38 -0
  301. package/dist/packages/testing/test-types.d.ts +16 -0
  302. package/dist/packages/testing/test-types.js +1 -0
  303. package/dist/packages/testing/test.d.ts +4 -0
  304. package/dist/packages/testing/test.js +3 -0
  305. package/dist/packages/workflow-authoring/index.d.ts +4 -0
  306. package/dist/packages/workflow-authoring/index.js +4 -0
  307. package/dist/packages/workflow-authoring/lib/workflow-edit-utils.d.ts +10 -0
  308. package/dist/packages/workflow-authoring/lib/workflow-edit-utils.js +39 -0
  309. package/dist/packages/workflow-authoring/workflow-authoring.d.ts +26 -0
  310. package/dist/packages/workflow-authoring/workflow-authoring.js +120 -0
  311. package/dist/packages/workflow-authoring/workflow-edit-session.d.ts +16 -0
  312. package/dist/packages/workflow-authoring/workflow-edit-session.js +57 -0
  313. package/dist/packages/workflow-authoring/workflow-improvement.d.ts +23 -0
  314. package/dist/packages/workflow-authoring/workflow-improvement.js +209 -0
  315. package/dist/packages/workflow-package/builtin-compiled-workflow.d.ts +38 -0
  316. package/dist/packages/workflow-package/builtin-compiled-workflow.js +94 -0
  317. package/dist/packages/workflow-package/index.d.ts +9 -0
  318. package/dist/packages/workflow-package/index.js +9 -0
  319. package/dist/packages/workflow-package/interf-workflow-package.d.ts +25 -0
  320. package/dist/packages/workflow-package/interf-workflow-package.js +342 -0
  321. package/dist/{lib/config.d.ts → packages/workflow-package/lib/package-root.d.ts} +0 -1
  322. package/dist/packages/workflow-package/lib/package-root.js +6 -0
  323. package/dist/packages/workflow-package/local-workflows.d.ts +54 -0
  324. package/dist/packages/workflow-package/local-workflows.js +422 -0
  325. package/dist/packages/workflow-package/workflow-definitions.d.ts +78 -0
  326. package/dist/packages/workflow-package/workflow-definitions.js +203 -0
  327. package/dist/packages/workflow-package/workflow-helpers.d.ts +38 -0
  328. package/dist/packages/workflow-package/workflow-helpers.js +167 -0
  329. package/dist/packages/workflow-package/workflow-review-paths.d.ts +10 -0
  330. package/dist/packages/workflow-package/workflow-review-paths.js +27 -0
  331. package/dist/packages/workflow-package/workflow-stage-policy.d.ts +5 -0
  332. package/dist/packages/workflow-package/workflow-stage-policy.js +31 -0
  333. package/dist/packages/workflow-package/workflow-stage-runner.d.ts +41 -0
  334. package/dist/packages/workflow-package/workflow-stage-runner.js +109 -0
  335. package/package.json +44 -21
  336. package/dist/commands/compile.d.ts +0 -15
  337. package/dist/commands/create-workflow-wizard.js +0 -125
  338. package/dist/commands/create.js +0 -162
  339. package/dist/commands/init.d.ts +0 -3
  340. package/dist/commands/test.d.ts +0 -9
  341. package/dist/lib/compiled-home.d.ts +0 -5
  342. package/dist/lib/compiled-home.js +0 -32
  343. package/dist/lib/config.js +0 -9
  344. package/dist/lib/obsidian.d.ts +0 -1
  345. package/dist/lib/obsidian.js +0 -15
  346. package/dist/lib/summarize-plan.d.ts +0 -17
  347. package/dist/lib/summarize-plan.js +0 -120
  348. /package/dist/{commands → cli/commands}/default.d.ts +0 -0
  349. /package/dist/{commands → cli/commands}/doctor.d.ts +0 -0
  350. /package/dist/{commands → cli/commands}/list.d.ts +0 -0
  351. /package/dist/{commands → cli/commands}/reset.d.ts +0 -0
  352. /package/dist/{commands → cli/commands}/status.d.ts +0 -0
  353. /package/dist/{commands → cli/commands}/verify.d.ts +0 -0
@@ -1,65 +1 @@
1
- import { existsSync } from "node:fs";
2
- import { execFileSync } from "node:child_process";
3
- import { homedir } from "node:os";
4
- import { join } from "node:path";
5
- import { loadUserConfig } from "./user-config.js";
6
- import { AGENTS } from "./agent-constants.js";
7
- export function detectAgents() {
8
- return AGENTS.filter((agent) => {
9
- const dir = join(homedir(), `.${agent.name === "claude-code" ? "claude" : agent.name}`);
10
- return existsSync(dir);
11
- });
12
- }
13
- function commandExists(command) {
14
- try {
15
- execFileSync("which", [command], { stdio: "ignore" });
16
- return true;
17
- }
18
- catch {
19
- return false;
20
- }
21
- }
22
- export function supportsAutomatedRuns(agent) {
23
- return agent.name === "claude-code" || agent.name === "codex";
24
- }
25
- export function resolveAgent() {
26
- const config = loadUserConfig();
27
- if (config) {
28
- const configured = AGENTS.find((agent) => agent.command === config.agentCommand) ??
29
- AGENTS.find((agent) => agent.name === config.agent) ??
30
- AGENTS.find((agent) => agent.displayName === config.agent);
31
- if (!configured) {
32
- return {
33
- agent: null,
34
- error: `Configured agent "${config.agent}" is not supported by this Interf build. Run \`interf\` or \`interf init\` to choose a supported agent.`,
35
- };
36
- }
37
- if (!commandExists(configured.command)) {
38
- return {
39
- agent: null,
40
- error: `Configured agent "${configured.displayName}" is not available in PATH. Run \`interf\` or \`interf init\` to reconfigure.`,
41
- };
42
- }
43
- if (!supportsAutomatedRuns(configured)) {
44
- return {
45
- agent: null,
46
- error: `Configured agent "${configured.displayName}" is detected, but this Interf build can only automate Claude Code or Codex. Run \`interf\` or \`interf init\` and choose one of those agents.`,
47
- };
48
- }
49
- return { agent: configured };
50
- }
51
- const detected = detectAgents().filter((agent) => commandExists(agent.command) && supportsAutomatedRuns(agent));
52
- if (detected.length === 0) {
53
- return {
54
- agent: null,
55
- error: "No coding agent detected. Install Claude Code or Codex.",
56
- };
57
- }
58
- if (detected.length > 1) {
59
- return {
60
- agent: null,
61
- error: "Multiple coding agents detected but no default is configured. Run `interf` or `interf init` to choose which agent local runs should use.",
62
- };
63
- }
64
- return { agent: detected[0] };
65
- }
1
+ export * from "../packages/agents/lib/detection.js";
@@ -1,2 +1 @@
1
- import type { Agent, SpawnAgentOptions } from "./agent-types.js";
2
- export declare function spawnAgent(agent: Agent, dirPath: string, prompt: string, options?: SpawnAgentOptions): Promise<number>;
1
+ export * from "../packages/agents/lib/execution.js";
@@ -1,242 +1 @@
1
- import { spawn } from "node:child_process";
2
- import chalk from "chalk";
3
- import { CODEX_NOISE_PATTERNS } from "./agent-constants.js";
4
- import { buildAgentArgs } from "./agent-args.js";
5
- import { appendAgentEventLog, appendAgentStatusLog } from "./agent-logs.js";
6
- import { displayAgentEvent, emitVisibleAgentText, summarizeAgentToolActivity, } from "./agent-render.js";
7
- import { classifyTerminalVisibleStatus, extractAgentFailureStatus, hasAgentStalled, } from "./agent-status.js";
8
- const STOP_SIGNAL_GRACE_MS = 1500;
9
- export function spawnAgent(agent, dirPath, prompt, options = {}) {
10
- return new Promise((resolve) => {
11
- const args = buildAgentArgs(agent, prompt, options.executionProfile);
12
- appendAgentEventLog(options.eventLogPath, {
13
- type: "spawn",
14
- command: agent.command,
15
- args,
16
- cwd: dirPath,
17
- });
18
- const launchLine = `Launching ${agent.displayName}...`;
19
- console.log(chalk.dim(` ${launchLine}`));
20
- appendAgentStatusLog(options.statusLogPath, launchLine);
21
- const proc = spawn(agent.command, args, {
22
- cwd: dirPath,
23
- stdio: ["ignore", "pipe", "pipe"],
24
- });
25
- const timeoutMs = options.executionProfile?.timeoutMs ?? null;
26
- let buffer = "";
27
- let stderrBuffer = "";
28
- let lastVisibleOutputAt = Date.now();
29
- let lastActivityAt = Date.now();
30
- let lastHeartbeatAt = 0;
31
- let sawRawOutput = false;
32
- let sawVisibleEvent = false;
33
- let timedOut = false;
34
- let completionSatisfied = false;
35
- let failureStatus = null;
36
- let terminalSignalSent = false;
37
- let lastToolActivity = null;
38
- let stopPhase = "running";
39
- let stopTimer = null;
40
- const lastVisibleText = { current: null };
41
- const clearStopTimer = () => {
42
- if (!stopTimer)
43
- return;
44
- clearTimeout(stopTimer);
45
- stopTimer = null;
46
- };
47
- const requestProcessStop = (signal = "SIGINT") => {
48
- if (proc.exitCode != null)
49
- return;
50
- if (signal === "SIGINT") {
51
- if (stopPhase !== "running")
52
- return;
53
- stopPhase = "sigint";
54
- }
55
- else if (signal === "SIGTERM") {
56
- if (stopPhase === "sigterm" || stopPhase === "sigkill")
57
- return;
58
- stopPhase = "sigterm";
59
- }
60
- else if (signal === "SIGKILL") {
61
- if (stopPhase === "sigkill")
62
- return;
63
- stopPhase = "sigkill";
64
- }
65
- appendAgentEventLog(options.eventLogPath, {
66
- type: "signal",
67
- signal,
68
- });
69
- proc.kill(signal);
70
- clearStopTimer();
71
- if (signal === "SIGKILL")
72
- return;
73
- stopTimer = setTimeout(() => {
74
- if (proc.exitCode != null)
75
- return;
76
- requestProcessStop(signal === "SIGINT" ? "SIGTERM" : "SIGKILL");
77
- }, STOP_SIGNAL_GRACE_MS);
78
- };
79
- const heartbeat = setInterval(() => {
80
- const now = Date.now();
81
- const minQuietMs = sawVisibleEvent ? 15000 : 8000;
82
- const minHeartbeatGapMs = sawVisibleEvent ? 30000 : 12000;
83
- if (now - lastVisibleOutputAt < minQuietMs)
84
- return;
85
- if (now - lastHeartbeatAt < minHeartbeatGapMs)
86
- return;
87
- lastHeartbeatAt = now;
88
- const seconds = Math.floor((now - lastVisibleOutputAt) / 1000);
89
- const activitySuffix = lastToolActivity ? ` while ${lastToolActivity}` : "";
90
- const label = sawVisibleEvent
91
- ? `${agent.displayName} is still running${activitySuffix}... (${seconds}s since last output)`
92
- : sawRawOutput
93
- ? `${agent.displayName} is active${activitySuffix}, but has not emitted visible progress yet... (${seconds}s)`
94
- : `${agent.displayName} started, but has not emitted visible progress yet... (${seconds}s)`;
95
- console.log(chalk.dim(` ${label}`));
96
- appendAgentStatusLog(options.statusLogPath, label);
97
- }, 5000);
98
- const forwardSignal = () => {
99
- requestProcessStop("SIGINT");
100
- };
101
- const maybeInterruptAfterTerminalStatus = () => {
102
- if (options.completionCheck)
103
- return;
104
- if (terminalSignalSent || !lastVisibleText.terminalStatus)
105
- return;
106
- terminalSignalSent = true;
107
- appendAgentEventLog(options.eventLogPath, {
108
- type: "terminal-status",
109
- status: lastVisibleText.terminalStatus,
110
- });
111
- const terminalKind = classifyTerminalVisibleStatus(lastVisibleText.terminalStatus);
112
- if (terminalKind === "done") {
113
- completionSatisfied = true;
114
- }
115
- else if (terminalKind === "failure") {
116
- failureStatus ||= lastVisibleText.terminalStatus;
117
- }
118
- requestProcessStop("SIGINT");
119
- };
120
- const timeout = typeof timeoutMs === "number" && timeoutMs > 0
121
- ? setInterval(() => {
122
- const now = Date.now();
123
- const idleMs = now - lastActivityAt;
124
- if (!hasAgentStalled(lastActivityAt, now, timeoutMs))
125
- return;
126
- timedOut = true;
127
- appendAgentEventLog(options.eventLogPath, {
128
- type: "stall-timeout",
129
- timeout_ms: timeoutMs,
130
- idle_ms: idleMs,
131
- });
132
- console.log(chalk.red(` ${agent.displayName} stalled for ${Math.round(idleMs / 1000)}s without agent output.`));
133
- requestProcessStop("SIGINT");
134
- }, 2000)
135
- : null;
136
- const completionPoll = options.completionCheck
137
- ? setInterval(() => {
138
- if (timedOut || completionSatisfied)
139
- return;
140
- try {
141
- if (!options.completionCheck?.())
142
- return;
143
- completionSatisfied = true;
144
- appendAgentEventLog(options.eventLogPath, {
145
- type: "completion-check-satisfied",
146
- });
147
- requestProcessStop("SIGINT");
148
- }
149
- catch {
150
- // Ignore completion check failures and let the agent continue.
151
- }
152
- }, 1000)
153
- : null;
154
- process.once("SIGINT", forwardSignal);
155
- proc.stdout?.on("data", (chunk) => {
156
- sawRawOutput = true;
157
- lastActivityAt = Date.now();
158
- buffer += chunk.toString();
159
- const lines = buffer.split("\n");
160
- buffer = lines.pop() ?? "";
161
- for (const line of lines) {
162
- if (!line.trim())
163
- continue;
164
- appendAgentEventLog(options.eventLogPath, {
165
- type: "stdout",
166
- line,
167
- });
168
- try {
169
- const event = JSON.parse(line);
170
- const toolActivity = summarizeAgentToolActivity(event);
171
- if (toolActivity) {
172
- lastToolActivity = toolActivity;
173
- }
174
- failureStatus ||= extractAgentFailureStatus(event);
175
- if (displayAgentEvent(event, options.statusLogPath, lastVisibleText)) {
176
- sawVisibleEvent = true;
177
- lastVisibleOutputAt = Date.now();
178
- }
179
- maybeInterruptAfterTerminalStatus();
180
- }
181
- catch {
182
- if (emitVisibleAgentText(line, options.statusLogPath, lastVisibleText)) {
183
- sawVisibleEvent = true;
184
- lastVisibleOutputAt = Date.now();
185
- }
186
- maybeInterruptAfterTerminalStatus();
187
- }
188
- }
189
- });
190
- proc.stderr?.on("data", (chunk) => {
191
- lastActivityAt = Date.now();
192
- stderrBuffer += chunk.toString();
193
- const lines = stderrBuffer.split("\n");
194
- stderrBuffer = lines.pop() ?? "";
195
- for (const line of lines) {
196
- if (!line.trim())
197
- continue;
198
- appendAgentEventLog(options.eventLogPath, {
199
- type: "stderr",
200
- line,
201
- });
202
- if (CODEX_NOISE_PATTERNS.some((pattern) => pattern.test(line)))
203
- continue;
204
- sawRawOutput = true;
205
- lastVisibleOutputAt = Date.now();
206
- process.stderr.write(`${line}\n`);
207
- sawVisibleEvent = true;
208
- }
209
- });
210
- proc.on("close", (code) => {
211
- clearInterval(heartbeat);
212
- if (timeout)
213
- clearInterval(timeout);
214
- if (completionPoll)
215
- clearInterval(completionPoll);
216
- clearStopTimer();
217
- process.removeListener("SIGINT", forwardSignal);
218
- const finalCode = timedOut ? 124 : failureStatus ? 1 : completionSatisfied ? 0 : (code ?? 0);
219
- appendAgentEventLog(options.eventLogPath, {
220
- type: "close",
221
- code: finalCode,
222
- failure_status: failureStatus,
223
- });
224
- resolve(finalCode);
225
- });
226
- proc.on("error", () => {
227
- clearInterval(heartbeat);
228
- if (timeout)
229
- clearInterval(timeout);
230
- if (completionPoll)
231
- clearInterval(completionPoll);
232
- clearStopTimer();
233
- process.removeListener("SIGINT", forwardSignal);
234
- appendAgentEventLog(options.eventLogPath, {
235
- type: "error",
236
- message: `Failed to start ${agent.displayName}`,
237
- });
238
- console.log(chalk.red(` Failed to start ${agent.displayName}.`));
239
- resolve(1);
240
- });
241
- });
242
- }
1
+ export * from "../packages/agents/lib/execution.js";
@@ -1,2 +1 @@
1
- export declare function appendAgentEventLog(eventLogPath: string | null | undefined, event: Record<string, unknown>): void;
2
- export declare function appendAgentStatusLog(statusLogPath: string | null | undefined, text: string): void;
1
+ export * from "../packages/agents/lib/logs.js";
@@ -1,17 +1 @@
1
- import { appendFileSync, mkdirSync } from "node:fs";
2
- import { dirname } from "node:path";
3
- export function appendAgentEventLog(eventLogPath, event) {
4
- if (!eventLogPath)
5
- return;
6
- mkdirSync(dirname(eventLogPath), { recursive: true });
7
- appendFileSync(eventLogPath, `${JSON.stringify({
8
- timestamp: new Date().toISOString(),
9
- ...event,
10
- })}\n`);
11
- }
12
- export function appendAgentStatusLog(statusLogPath, text) {
13
- if (!statusLogPath)
14
- return;
15
- mkdirSync(dirname(statusLogPath), { recursive: true });
16
- appendFileSync(statusLogPath, `${new Date().toISOString()} ${text}\n`);
17
- }
1
+ export * from "../packages/agents/lib/logs.js";
@@ -1,7 +1 @@
1
- import type { Agent, AgentAutomationReadiness, AgentPreflightOptions, AgentPreflightResult } from "./agent-types.js";
2
- export declare function buildAgentPreflightPrompt(): string;
3
- export declare function runAgentPreflight(agent: Agent, options?: AgentPreflightOptions): AgentPreflightResult;
4
- export declare function ensureAgentAutomatedRunReady(agent: Agent, options?: {
5
- force?: boolean;
6
- runPreflight?: typeof runAgentPreflight;
7
- }): AgentAutomationReadiness;
1
+ export * from "../packages/agents/lib/preflight.js";
@@ -1,76 +1 @@
1
- import { mkdtempSync, rmSync } from "node:fs";
2
- import { spawnSync } from "node:child_process";
3
- import { tmpdir } from "node:os";
4
- import { join } from "node:path";
5
- import { CODEX_NOISE_PATTERNS } from "./agent-constants.js";
6
- import { buildAgentArgs } from "./agent-args.js";
7
- const successfulPreflightAgents = new Set();
8
- export function buildAgentPreflightPrompt() {
9
- return [
10
- "Interf doctor preflight.",
11
- 'Reply with exactly one line: "DONE: Interf doctor ok".',
12
- "Do not use tools.",
13
- "Do not read files.",
14
- "Do not write files.",
15
- ].join(" ");
16
- }
17
- export function runAgentPreflight(agent, options = {}) {
18
- const timeoutMs = options.timeoutMs ?? 60000;
19
- const spawnSyncImpl = options.spawnSyncImpl ?? spawnSync;
20
- const dirPath = mkdtempSync(join(tmpdir(), "interf-doctor-"));
21
- try {
22
- const result = spawnSyncImpl(agent.command, buildAgentArgs(agent, buildAgentPreflightPrompt()), {
23
- cwd: dirPath,
24
- encoding: "utf8",
25
- timeout: timeoutMs,
26
- });
27
- const stdout = typeof result.stdout === "string" ? result.stdout.trim() : "";
28
- const stderr = sanitizeAgentStderr(typeof result.stderr === "string" ? result.stderr : "");
29
- const timedOut = result.error?.name === "Error" && result.error.message.includes("timed out");
30
- if (result.error) {
31
- return {
32
- ok: false,
33
- code: typeof result.status === "number" ? result.status : null,
34
- timedOut,
35
- stdout,
36
- stderr,
37
- error: result.error.message,
38
- };
39
- }
40
- return {
41
- ok: result.status === 0,
42
- code: typeof result.status === "number" ? result.status : null,
43
- timedOut: false,
44
- stdout,
45
- stderr,
46
- error: result.status === 0 ? null : `Exited with code ${result.status ?? "unknown"}`,
47
- };
48
- }
49
- finally {
50
- rmSync(dirPath, { recursive: true, force: true });
51
- }
52
- }
53
- export function ensureAgentAutomatedRunReady(agent, options = {}) {
54
- if (!options.force && successfulPreflightAgents.has(agent.name)) {
55
- return { ok: true };
56
- }
57
- const runPreflight = options.runPreflight ?? runAgentPreflight;
58
- const result = runPreflight(agent);
59
- if (!result.ok) {
60
- const details = [result.error, result.stderr].filter(Boolean).join(" ");
61
- return {
62
- ok: false,
63
- error: `${agent.displayName} failed Interf executor preflight. Run \`interf doctor --live\` for details.${details ? ` ${details}` : ""}`,
64
- };
65
- }
66
- successfulPreflightAgents.add(agent.name);
67
- return { ok: true };
68
- }
69
- function sanitizeAgentStderr(stderr) {
70
- return stderr
71
- .split("\n")
72
- .filter((line) => line.trim().length > 0)
73
- .filter((line) => !CODEX_NOISE_PATTERNS.some((pattern) => pattern.test(line)))
74
- .join("\n")
75
- .trim();
76
- }
1
+ export * from "../packages/agents/lib/preflight.js";
@@ -1,8 +1 @@
1
- export interface VisibleTextState {
2
- current: string | null;
3
- terminated?: boolean;
4
- terminalStatus?: string | null;
5
- }
6
- export declare function emitVisibleAgentText(text: string, statusLogPath: string | null | undefined, lastVisibleText?: VisibleTextState): boolean;
7
- export declare function displayAgentEvent(event: Record<string, unknown>, statusLogPath: string | null | undefined, lastVisibleText: VisibleTextState): boolean;
8
- export declare function summarizeAgentToolActivity(event: Record<string, unknown>): string | null;
1
+ export * from "../packages/agents/lib/render.js";
@@ -1,218 +1 @@
1
- import { basename } from "node:path";
2
- import chalk from "chalk";
3
- import { SHOW_AGENT_TOOL_EVENTS, VISIBLE_STATUS_PREFIXES, } from "./agent-constants.js";
4
- import { appendAgentStatusLog } from "./agent-logs.js";
5
- export function emitVisibleAgentText(text, statusLogPath, lastVisibleText) {
6
- if (lastVisibleText?.terminated) {
7
- return false;
8
- }
9
- let displayed = false;
10
- const lines = text
11
- .split(/\r?\n/)
12
- .map((line) => line.trim())
13
- .filter((line) => shouldDisplayAgentText(line));
14
- for (const line of lines) {
15
- if (lastVisibleText && lastVisibleText.current === line) {
16
- continue;
17
- }
18
- console.log(chalk.dim(` ${line}`));
19
- appendAgentStatusLog(statusLogPath, line);
20
- if (lastVisibleText) {
21
- lastVisibleText.current = line;
22
- if (isTerminalVisibleStatus(line)) {
23
- lastVisibleText.terminated = true;
24
- lastVisibleText.terminalStatus = line;
25
- }
26
- }
27
- displayed = true;
28
- }
29
- return displayed;
30
- }
31
- export function displayAgentEvent(event, statusLogPath, lastVisibleText) {
32
- const type = event.type;
33
- let displayed = false;
34
- if (type === "tool_use" && SHOW_AGENT_TOOL_EVENTS) {
35
- const name = event.name ?? "unknown";
36
- const input = event.input;
37
- let detail = "";
38
- if (input) {
39
- const path = (input.file_path ?? input.path ?? input.pattern ?? input.command ?? "");
40
- if (path)
41
- detail = chalk.dim(` ${path.slice(0, 80)}`);
42
- }
43
- console.log(chalk.blue(` → ${name}`) + detail);
44
- displayed = true;
45
- }
46
- if (type === "assistant") {
47
- const msg = event.message;
48
- const content = msg?.content;
49
- if (Array.isArray(content)) {
50
- for (const block of content) {
51
- if (block.type === "text" && block.text) {
52
- const text = block.text.trim();
53
- displayed = emitVisibleAgentText(text, statusLogPath, lastVisibleText) || displayed;
54
- }
55
- if (block.type === "tool_use" && SHOW_AGENT_TOOL_EVENTS) {
56
- const name = block.name;
57
- const input = block.input;
58
- let detail = "";
59
- if (input) {
60
- const path = (input.file_path ?? input.path ?? input.pattern ?? input.command ?? "");
61
- if (path)
62
- detail = chalk.dim(` ${path.slice(0, 80)}`);
63
- }
64
- console.log(chalk.blue(` → ${name}`) + detail);
65
- displayed = true;
66
- }
67
- }
68
- }
69
- }
70
- if (type === "item.started" || type === "item.completed") {
71
- const item = event.item;
72
- if (item) {
73
- displayed = displayItemEvent(type, item, statusLogPath, lastVisibleText) || displayed;
74
- }
75
- }
76
- if (type === "result") {
77
- const result = event.result;
78
- const subtype = event.subtype;
79
- if (result && subtype !== "tool_result") {
80
- const lines = result.split("\n");
81
- for (const line of lines) {
82
- displayed = emitVisibleAgentText(line, statusLogPath, lastVisibleText) || displayed;
83
- }
84
- }
85
- }
86
- const message = pickString(event.message) ??
87
- pickString(event.text) ??
88
- pickString(event.content) ??
89
- pickString(event.output) ??
90
- pickString(event.summary);
91
- if (message && type !== "assistant" && type !== "result") {
92
- const text = message.trim();
93
- displayed = emitVisibleAgentText(text, statusLogPath, lastVisibleText) || displayed;
94
- }
95
- return displayed;
96
- }
97
- export function summarizeAgentToolActivity(event) {
98
- const type = event.type;
99
- if (type === "assistant") {
100
- const message = event.message;
101
- const content = message?.content;
102
- if (Array.isArray(content)) {
103
- for (const block of content) {
104
- if (block.type === "tool_use") {
105
- return summarizeToolUse(block.name, block.input);
106
- }
107
- }
108
- }
109
- }
110
- if (type === "item.started" || type === "item.completed") {
111
- const item = event.item;
112
- if (item?.type === "tool_use") {
113
- return summarizeToolUse(item.name, item.input);
114
- }
115
- }
116
- return null;
117
- }
118
- function pickString(value) {
119
- if (typeof value === "string")
120
- return value;
121
- if (!Array.isArray(value))
122
- return null;
123
- for (const entry of value) {
124
- if (typeof entry === "string")
125
- return entry;
126
- if (entry && typeof entry === "object" && "text" in entry && typeof entry.text === "string") {
127
- return entry.text;
128
- }
129
- }
130
- return null;
131
- }
132
- function displayItemEvent(type, item, statusLogPath, lastVisibleText) {
133
- const itemType = item.type;
134
- if (itemType === "agent_message") {
135
- const text = item.text?.trim();
136
- return text ? emitVisibleAgentText(text, statusLogPath, lastVisibleText) : false;
137
- }
138
- if (itemType === "command_execution" && type === "item.completed") {
139
- const output = item.aggregated_output?.trim();
140
- if (output) {
141
- return emitVisibleAgentText(output, statusLogPath, lastVisibleText);
142
- }
143
- }
144
- if (!SHOW_AGENT_TOOL_EVENTS) {
145
- return false;
146
- }
147
- const title = pickString(item.title) ?? pickString(item.name);
148
- const input = item.input;
149
- const detail = input ? describeInput(input) : "";
150
- if (type === "item.started" && title) {
151
- console.log(chalk.blue(` → ${title}`) + detail);
152
- return true;
153
- }
154
- if (type === "item.completed" && title) {
155
- console.log(chalk.blue(` → ${title}`) + detail);
156
- return true;
157
- }
158
- return false;
159
- }
160
- function describeInput(input) {
161
- const path = (input.file_path ?? input.path ?? input.pattern ?? input.command ?? "");
162
- return path ? chalk.dim(` ${path.slice(0, 80)}`) : "";
163
- }
164
- function summarizeToolUse(name, input) {
165
- if (!name)
166
- return null;
167
- const target = summarizeToolTarget(input);
168
- switch (name) {
169
- case "Read":
170
- return target ? `reading ${target}` : "reading compiled files";
171
- case "Write":
172
- return target ? `writing ${target}` : "writing compiled files";
173
- case "Edit":
174
- return target ? `editing ${target}` : "editing compiled files";
175
- case "Glob":
176
- case "Grep":
177
- return target ? `${name.toLowerCase()} on ${target}` : `${name.toLowerCase()}ing compiled files`;
178
- case "Bash":
179
- return target ? `running ${target}` : "running a local helper";
180
- default:
181
- return target ? `${name} on ${target}` : name;
182
- }
183
- }
184
- function summarizeToolTarget(input) {
185
- if (!input)
186
- return null;
187
- const raw = (input.file_path ?? input.path ?? input.pattern ?? input.command ?? input.notebook_path);
188
- if (!raw || raw.length === 0)
189
- return null;
190
- if (raw.includes("\n")) {
191
- const commandName = summarizeMultilineCommand(raw);
192
- return commandName ? `${commandName} helper` : "a multi-line local helper";
193
- }
194
- return basename(raw);
195
- }
196
- function summarizeMultilineCommand(command) {
197
- const lines = command
198
- .split("\n")
199
- .map((line) => line.trim())
200
- .filter((line) => line.length > 0 && !line.startsWith("#"));
201
- for (const line of lines) {
202
- const token = line.split(/\s+/)[0];
203
- if (!token)
204
- continue;
205
- if (token.includes("="))
206
- continue;
207
- return basename(token);
208
- }
209
- return null;
210
- }
211
- function shouldDisplayAgentText(text) {
212
- if (text.length === 0 || text.length >= 300)
213
- return false;
214
- return VISIBLE_STATUS_PREFIXES.some((prefix) => text.startsWith(prefix));
215
- }
216
- function isTerminalVisibleStatus(text) {
217
- return text.startsWith("DONE:") || text.startsWith("BLOCKED:") || text.startsWith("ERROR:");
218
- }
1
+ export * from "../packages/agents/lib/render.js";