@iowarp/clio-coder 0.3.0 → 0.3.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (988) hide show
  1. package/CHANGELOG.md +33 -0
  2. package/README.md +50 -53
  3. package/dist/acp-FPR54DGL.js +138 -0
  4. package/dist/{agents-Q4MYPMUW.js → agents-OGPIHPJH.js} +33 -25
  5. package/dist/assets/codewiki.json +1 -0
  6. package/dist/assets/grammars/notices/@vscode__tree-sitter-wasm/LICENSE +21 -0
  7. package/dist/assets/grammars/notices/@vscode__tree-sitter-wasm/cgmanifest.json +16 -0
  8. package/dist/assets/grammars/notices/tree-sitter-wasms/LICENSE +24 -0
  9. package/dist/assets/grammars/tree-sitter-c-sharp.wasm +0 -0
  10. package/dist/assets/grammars/tree-sitter-c.wasm +0 -0
  11. package/dist/assets/grammars/tree-sitter-cpp.wasm +0 -0
  12. package/dist/assets/grammars/tree-sitter-go.wasm +0 -0
  13. package/dist/assets/grammars/tree-sitter-java.wasm +0 -0
  14. package/dist/assets/grammars/tree-sitter-javascript.wasm +0 -0
  15. package/dist/assets/grammars/tree-sitter-python.wasm +0 -0
  16. package/dist/assets/grammars/tree-sitter-ruby.wasm +0 -0
  17. package/dist/assets/grammars/tree-sitter-rust.wasm +0 -0
  18. package/dist/assets/grammars/tree-sitter-tsx.wasm +0 -0
  19. package/dist/assets/grammars/tree-sitter-typescript.wasm +0 -0
  20. package/dist/assets/grammars/tree-sitter.wasm +0 -0
  21. package/dist/{auth-O6HYIJ6J.js → auth-IC3K6NIZ.js} +22 -15
  22. package/dist/{chunk-KKKPTZLM.js → chunk-2STGEDFV.js} +8 -1
  23. package/dist/chunk-3I7MS7N2.js +40 -0
  24. package/dist/chunk-3R73A4XB.js +69 -0
  25. package/dist/{chunk-26BZQOAD.js → chunk-474KN5II.js} +86 -115
  26. package/dist/{chunk-NI4DEJMC.js → chunk-4QKXUHSR.js} +26 -3
  27. package/dist/{chunk-X3BR7HWV.js → chunk-5WIGXA4T.js} +7 -1
  28. package/dist/{chunk-TFSSEXL6.js → chunk-673JJUWJ.js} +14 -4
  29. package/dist/{chunk-GNGDQYDU.js → chunk-7SS2CTV2.js} +27922 -1249
  30. package/dist/{chunk-7RBKDI66.js → chunk-ASND7OZK.js} +104 -12
  31. package/dist/{chunk-X3NE4WVW.js → chunk-BNAZZHFG.js} +7 -1
  32. package/dist/{chunk-RQDWMVRB.js → chunk-BSU2YIWB.js} +9 -3
  33. package/dist/{chunk-CLJ5HLUD.js → chunk-C4PTHK7P.js} +24 -5
  34. package/dist/{chunk-QV47YRF4.js → chunk-CGKSTWHD.js} +7 -1
  35. package/dist/{chunk-BYEU76JP.js → chunk-DKGKUHFA.js} +34 -9
  36. package/dist/chunk-EYOKLTMF.js +170 -0
  37. package/dist/{chunk-PS4PFJQP.js → chunk-FCIH3BIZ.js} +15258 -14130
  38. package/dist/{chunk-2J63S4SF.js → chunk-FST4FYJB.js} +82 -14
  39. package/dist/{chunk-3DANZDGR.js → chunk-G34LV2PF.js} +34 -9
  40. package/dist/{chunk-BBUH4VAA.js → chunk-GAEBEQVI.js} +34 -21
  41. package/dist/chunk-GB6QRBXN.js +8543 -0
  42. package/dist/chunk-GEP36Y4X.js +12796 -0
  43. package/dist/{chunk-TKHQ4DGZ.js → chunk-H6F6BYOH.js} +496 -121
  44. package/dist/{chunk-UGYAX5YI.js → chunk-HQQID6OA.js} +10 -5
  45. package/dist/chunk-IHXBNWMM.js +137 -0
  46. package/dist/{chunk-ME6DNWIU.js → chunk-IS3ONKU3.js} +7 -1
  47. package/dist/{chunk-DXQNI4PC.js → chunk-IWHMRKLL.js} +8 -1
  48. package/dist/chunk-K2ITRMHZ.js +642 -0
  49. package/dist/{chunk-KBR4MZZR.js → chunk-K5XEMXTI.js} +7 -1
  50. package/dist/{chunk-AMFR5YA3.js → chunk-KKNLWXI6.js} +24 -10
  51. package/dist/{chunk-JWHCJDCI.js → chunk-KY56HMHH.js} +145 -61
  52. package/dist/{chunk-E3NYWENM.js → chunk-LU4TK2PR.js} +52 -7
  53. package/dist/{chunk-UWIJNAOB.js → chunk-M5T5VO65.js} +109 -42
  54. package/dist/{chunk-JPOWPFCU.js → chunk-MAR7Y6HW.js} +38 -16
  55. package/dist/chunk-N6F52NLF.js +6951 -0
  56. package/dist/{chunk-UHTSULZS.js → chunk-NMOX6HFD.js} +20 -7
  57. package/dist/{chunk-WD6AJM35.js → chunk-OLBBMFRD.js} +30 -13
  58. package/dist/{chunk-VOO7NYPP.js → chunk-PFEFKVGL.js} +22 -6
  59. package/dist/{chunk-6CWDTGUC.js → chunk-PIUMUEMV.js} +7 -1
  60. package/dist/chunk-PV4JUBVJ.js +462 -0
  61. package/dist/{chunk-527KG6XR.js → chunk-Q3RUPKEJ.js} +22 -4
  62. package/dist/{chunk-D5YD55AR.js → chunk-Q5WJOSJ7.js} +11 -1
  63. package/dist/{chunk-5N2FG33Q.js → chunk-R346GLFC.js} +7 -1
  64. package/dist/{chunk-4UQA7NCT.js → chunk-R5KLMSBV.js} +7 -2
  65. package/dist/{chunk-PIDUD6M2.js → chunk-RDLVBZEO.js} +11 -6
  66. package/dist/{chunk-O4EJEDHO.js → chunk-RPTR2H26.js} +40 -31
  67. package/dist/{chunk-HBU5MTAM.js → chunk-SVNXH4L2.js} +7 -1
  68. package/dist/{chunk-XNISANGE.js → chunk-TEKV33Q5.js} +122 -57
  69. package/dist/chunk-TXOTCRLG.js +15 -0
  70. package/dist/{chunk-VPAWTYLY.js → chunk-WEPFGWHJ.js} +7 -1
  71. package/dist/{chunk-HMYNFFY4.js → chunk-XPLRXC72.js} +7 -2
  72. package/dist/{chunk-UU3R62TT.js → chunk-XYWBQRDM.js} +13 -4
  73. package/dist/{chunk-7BHLZB3A.js → chunk-ZPY3JZ5E.js} +32 -10
  74. package/dist/cli/index.js +39 -33
  75. package/dist/clio-BZVGEUFJ.js +58 -0
  76. package/dist/{components-JVHMUBEB.js → components-DMAOEKFB.js} +26 -9
  77. package/dist/{config-ZFCDBMDC.js → config-IRUQ7SE4.js} +42 -31
  78. package/dist/configure-S7S6F6CL.js +32 -0
  79. package/dist/{context-CDXTP2MP.js → context-3KWFLHJG.js} +17 -11
  80. package/dist/{context-E3KIFVXI.js → context-5RADCKTR.js} +33 -28
  81. package/dist/{context-clear-3F4PLXOS.js → context-clear-7TSNPAAI.js} +36 -28
  82. package/dist/{context-index-Q7YSYTR3.js → context-index-W4RLWOQH.js} +10 -4
  83. package/dist/{docs-YIETIWZI.js → docs-5AWSPS37.js} +16 -10
  84. package/dist/doctor-UC5NAJYQ.js +77 -0
  85. package/dist/{eval-B3KZZESM.js → eval-U6TJHRLX.js} +77 -24
  86. package/dist/{evidence-V67CHM35.js → evidence-YEGUW4L3.js} +34 -26
  87. package/dist/{evolve-YDZSUQYA.js → evolve-TXARCTPG.js} +39 -26
  88. package/dist/{extensions-SRG7XCAH.js → extensions-OZFJ3A3G.js} +13 -7
  89. package/dist/{fleet-CA2CRTVG.js → fleet-6G3DHNYE.js} +45 -37
  90. package/dist/fleet-preflight-DSNT37JK.js +23 -0
  91. package/dist/{init-2OZDJE2D.js → init-KZ5QTF6M.js} +42 -34
  92. package/dist/{memory-3PIQQAKX.js → memory-73ESV5YC.js} +35 -27
  93. package/dist/{models-DY35XI7Y.js → models-A4PVNWJK.js} +34 -23
  94. package/dist/{paths-5OMXW7Z4.js → paths-C4H6IV77.js} +12 -6
  95. package/dist/preload-6WVMHX3A.js +13 -0
  96. package/dist/{reset-PIFYNOS3.js → reset-BGW6OGMV.js} +17 -11
  97. package/dist/{run-3VSPP24F.js → run-YTPEYQOH.js} +60 -48
  98. package/dist/{share-D36RQCXM.js → share-YIFFV4NQ.js} +16 -10
  99. package/dist/{skills-F2MRLELY.js → skills-2V6RA3OQ.js} +18 -11
  100. package/dist/{skills-eval-E2ZTW4PL.js → skills-eval-S2TVJO4F.js} +45 -36
  101. package/dist/{targets-DZMEZAH4.js → targets-TYXLPB23.js} +61 -59
  102. package/dist/{trace-7NYCUI2J.js → trace-GGOJ6Q6Z.js} +9 -3
  103. package/dist/{uninstall-AD3JWHBB.js → uninstall-LLLT4F4W.js} +14 -8
  104. package/dist/{upgrade-WYYBKGDY.js → upgrade-33G2LMM5.js} +45 -23
  105. package/dist/{usage-ULIDAGFF.js → usage-ZAFSXKKG.js} +35 -27
  106. package/dist/version-KGEG7EPO.js +21 -0
  107. package/dist/{wiki-generate-PKFIX6OB.js → wiki-generate-NUQCVOQ3.js} +55 -45
  108. package/dist/worker/entry.js +101 -43
  109. package/docs/README.md +12 -9
  110. package/docs/acp.md +28 -5
  111. package/docs/alcf-provider.md +1 -1
  112. package/docs/architecture.md +23 -2
  113. package/docs/artifact-placement.md +101 -0
  114. package/docs/artifact-versions.md +1 -1
  115. package/docs/built-in-agents.md +4 -2
  116. package/docs/capacity-and-scheduling.md +1 -1
  117. package/docs/commands-and-modes.md +125 -41
  118. package/docs/configuration-and-targets.md +88 -18
  119. package/docs/context-engine.md +6 -2
  120. package/docs/development-pipeline.md +77 -0
  121. package/docs/documentation-coverage.md +4 -4
  122. package/docs/documentation-guide.md +3 -3
  123. package/docs/environment-variables.md +2 -1
  124. package/docs/eval-runner.md +3 -3
  125. package/docs/evals-internal.md +2 -2
  126. package/docs/evidence-and-memory.md +6 -2
  127. package/docs/evolution.md +1 -1
  128. package/docs/exit-codes-and-output.md +1 -1
  129. package/docs/extensions-and-sharing.md +18 -11
  130. package/docs/fleet-demo-runbook.md +22 -23
  131. package/docs/fleet-dispatch.md +111 -12
  132. package/docs/glossary.md +107 -15
  133. package/docs/html/agents_blueprint.html +3 -3
  134. package/docs/html/alcf_blueprint.html +3 -3
  135. package/docs/html/architecture_blueprint.html +3 -3
  136. package/docs/html/commands_blueprint.html +187 -42
  137. package/docs/html/configuration_blueprint.html +7 -7
  138. package/docs/html/context_blueprint.html +3 -3
  139. package/docs/html/documentation_blueprint.html +1 -1
  140. package/docs/html/environment_blueprint.html +3 -3
  141. package/docs/html/eval_blueprint.html +4 -4
  142. package/docs/html/evals_internal_blueprint.html +3 -3
  143. package/docs/html/evolution_blueprint.html +3 -3
  144. package/docs/html/extensions_blueprint.html +3 -3
  145. package/docs/html/fleet_dispatch_blueprint.html +8 -8
  146. package/docs/html/index.html +5 -5
  147. package/docs/html/lifecycle_blueprint.html +4 -4
  148. package/docs/html/memory_blueprint.html +3 -3
  149. package/docs/html/middleware_blueprint.html +3 -3
  150. package/docs/html/models_blueprint.html +2 -2
  151. package/docs/html/observability_blueprint.html +2 -2
  152. package/docs/html/provider_adapter_blueprint.html +3 -3
  153. package/docs/html/safety_blueprint.html +3 -3
  154. package/docs/html/skills_blueprint.html +2 -2
  155. package/docs/html/soak_blueprint.html +3 -3
  156. package/docs/html/tool_usage_blueprint.html +4 -4
  157. package/docs/html/tools_blueprint.html +2 -2
  158. package/docs/html/trace_blueprint.html +3 -3
  159. package/docs/html/tui_design_blueprint.html +100 -40
  160. package/docs/html/validation_blueprint.html +1 -1
  161. package/docs/html/worker_dispatch_blueprint.html +3 -3
  162. package/docs/installation-and-lifecycle.md +62 -11
  163. package/docs/middleware-and-components.md +1 -1
  164. package/docs/model-catalog.md +2 -2
  165. package/docs/observability.md +3 -3
  166. package/docs/proactive-memory.md +12 -12
  167. package/docs/prompt-envelope-and-tools.md +2 -2
  168. package/docs/provider-adapter-cookbook.md +1 -1
  169. package/docs/release-cut-checklist.md +4 -0
  170. package/docs/safety-model.md +21 -5
  171. package/docs/scientific-validation.md +3 -3
  172. package/docs/session-lifecycle.md +2 -2
  173. package/docs/skills-marketplace.md +1 -1
  174. package/docs/time-conventions.md +101 -0
  175. package/docs/tool-usage.md +5 -4
  176. package/docs/trace-store.md +1 -1
  177. package/docs/troubleshooting.md +1 -1
  178. package/docs/tui-design.md +83 -27
  179. package/docs/worker-dispatch-mechanics.md +3 -3
  180. package/package.json +16 -16
  181. package/skills/README.md +5 -6
  182. package/skills/git/file-ticket/SKILL.md +107 -0
  183. package/skills/git/file-ticket/evals.md +54 -0
  184. package/skills/git/fix-issue/SKILL.md +106 -0
  185. package/skills/git/fix-issue/evals.md +71 -0
  186. package/skills/git/ship/SKILL.md +92 -0
  187. package/skills/git/ship/evals.md +72 -0
  188. package/skills/skill-marketplace.json +12 -20
  189. package/src/cli/acp.ts +88 -0
  190. package/src/cli/agents.ts +60 -0
  191. package/src/cli/args.ts +280 -0
  192. package/src/cli/argv.ts +170 -0
  193. package/src/cli/ask.ts +34 -0
  194. package/src/cli/auth.ts +468 -0
  195. package/src/cli/bootstrap-generate.ts +498 -0
  196. package/src/cli/clio.ts +34 -0
  197. package/src/cli/components.ts +195 -0
  198. package/src/cli/config-inspect.ts +330 -0
  199. package/src/cli/config.ts +72 -0
  200. package/src/cli/configure-interop.ts +67 -0
  201. package/src/cli/configure-layout.ts +172 -0
  202. package/src/cli/configure.ts +1487 -0
  203. package/src/cli/context-clear.ts +76 -0
  204. package/src/cli/context-index.ts +102 -0
  205. package/src/cli/context.ts +316 -0
  206. package/src/cli/default-target.ts +63 -0
  207. package/src/cli/docs.ts +340 -0
  208. package/src/cli/doctor.ts +54 -0
  209. package/src/cli/eval.ts +315 -0
  210. package/src/cli/evidence.ts +222 -0
  211. package/src/cli/evolve.ts +219 -0
  212. package/src/cli/extensions.ts +205 -0
  213. package/src/cli/fleet.ts +827 -0
  214. package/src/cli/index.ts +309 -0
  215. package/src/cli/init.ts +219 -0
  216. package/src/cli/initial-message.ts +47 -0
  217. package/src/cli/internal-dispatch.ts +55 -0
  218. package/src/cli/memory.ts +180 -0
  219. package/src/cli/models.ts +257 -0
  220. package/src/cli/modes/json-stream.ts +85 -0
  221. package/src/cli/modes/jsonl.ts +9 -0
  222. package/src/cli/modes/print.ts +589 -0
  223. package/src/cli/oauth-manual-input.ts +72 -0
  224. package/src/cli/oauth-select.ts +36 -0
  225. package/src/cli/output-guard.ts +48 -0
  226. package/src/cli/paths.ts +44 -0
  227. package/src/cli/provider-target.ts +113 -0
  228. package/src/cli/removal.ts +72 -0
  229. package/src/cli/reset.ts +253 -0
  230. package/src/cli/run.ts +497 -0
  231. package/src/cli/share.ts +243 -0
  232. package/src/cli/shared.ts +60 -0
  233. package/src/cli/skills-eval.ts +1225 -0
  234. package/src/cli/skills.ts +470 -0
  235. package/src/cli/steer-channel.ts +86 -0
  236. package/src/cli/targets.ts +1150 -0
  237. package/src/cli/text-layout.ts +102 -0
  238. package/src/cli/trace.ts +274 -0
  239. package/src/cli/uninstall.ts +405 -0
  240. package/src/cli/upgrade.ts +270 -0
  241. package/src/cli/usage.ts +869 -0
  242. package/src/cli/validate-model.ts +28 -0
  243. package/src/cli/version.ts +7 -0
  244. package/src/cli/wiki-generate.ts +509 -0
  245. package/src/core/artifact-paths.ts +43 -0
  246. package/src/core/bash-exec.ts +242 -0
  247. package/src/core/boot-trace.ts +37 -0
  248. package/src/core/bus-events.ts +728 -0
  249. package/src/core/bus-trace.ts +53 -0
  250. package/src/core/c-header-language.ts +265 -0
  251. package/src/core/clio-repo.ts +78 -0
  252. package/src/core/config.ts +1593 -0
  253. package/src/core/context-floor.ts +33 -0
  254. package/src/core/defaults.ts +625 -0
  255. package/src/core/domain-loader.ts +170 -0
  256. package/src/core/event-bus.ts +94 -0
  257. package/src/core/file-references.ts +282 -0
  258. package/src/core/guardrails.ts +185 -0
  259. package/src/core/headless-permission.ts +21 -0
  260. package/src/core/init.ts +223 -0
  261. package/src/core/json-payload.ts +58 -0
  262. package/src/core/package-root.ts +54 -0
  263. package/src/core/path-canonical.ts +37 -0
  264. package/src/core/process-identity.ts +41 -0
  265. package/src/core/recent-models.ts +91 -0
  266. package/src/core/release.ts +2 -0
  267. package/src/core/residency-protection.ts +56 -0
  268. package/src/core/resolve-config-value.ts +88 -0
  269. package/src/core/response-schema.ts +279 -0
  270. package/src/core/run-overrides.ts +77 -0
  271. package/src/core/safe-exec.ts +193 -0
  272. package/src/core/safe-id.ts +37 -0
  273. package/src/core/safe-resource-write.ts +162 -0
  274. package/src/core/session-routing.ts +339 -0
  275. package/src/core/settings-layers.ts +220 -0
  276. package/src/core/shared-bus.ts +8 -0
  277. package/src/core/shell-quote.ts +26 -0
  278. package/src/core/skill-activation.ts +190 -0
  279. package/src/core/startup-timer.ts +37 -0
  280. package/src/core/state-file-lock.ts +207 -0
  281. package/src/core/termination.ts +202 -0
  282. package/src/core/timers.ts +38 -0
  283. package/src/core/tool-names.ts +65 -0
  284. package/src/core/verification-scripts.ts +13 -0
  285. package/src/core/workspace-files.ts +492 -0
  286. package/src/core/xdg.ts +177 -0
  287. package/src/domains/agents/builtins/architect.md +4 -4
  288. package/src/domains/agents/builtins/coder.md +3 -2
  289. package/src/domains/agents/builtins/debugger.md +1 -1
  290. package/src/domains/agents/builtins/documenter.md +1 -1
  291. package/src/domains/agents/builtins/git-master.md +3 -3
  292. package/src/domains/agents/builtins/provenance.md +1 -1
  293. package/src/domains/agents/builtins/researcher.md +1 -1
  294. package/src/domains/agents/builtins/scout.md +1 -1
  295. package/src/domains/agents/builtins/tester.md +1 -1
  296. package/src/domains/agents/builtins/verifier.md +1 -1
  297. package/src/domains/agents/builtins/wiki-writer.md +1 -1
  298. package/src/domains/agents/catalog.ts +172 -0
  299. package/src/domains/agents/contract.ts +16 -0
  300. package/src/domains/agents/extension.ts +110 -0
  301. package/src/domains/agents/fleet-commands.ts +154 -0
  302. package/src/domains/agents/fleet-contract.ts +797 -0
  303. package/src/domains/agents/frontmatter.ts +40 -0
  304. package/src/domains/agents/index.ts +102 -0
  305. package/src/domains/agents/manifest.ts +6 -0
  306. package/src/domains/agents/recipe-schema.ts +202 -0
  307. package/src/domains/agents/recipe.ts +125 -0
  308. package/src/domains/agents/registry.ts +111 -0
  309. package/src/domains/agents/result-contract.ts +1265 -0
  310. package/src/domains/agents/spec.ts +371 -0
  311. package/src/domains/agents/write-boundary.ts +109 -0
  312. package/src/domains/components/diff.ts +99 -0
  313. package/src/domains/components/hash.ts +21 -0
  314. package/src/domains/components/index.ts +3 -0
  315. package/src/domains/components/scan.ts +304 -0
  316. package/src/domains/components/snapshot.ts +108 -0
  317. package/src/domains/components/types.ts +82 -0
  318. package/src/domains/config/agent-namespace.ts +13 -0
  319. package/src/domains/config/classify.ts +94 -0
  320. package/src/domains/config/contract.ts +22 -0
  321. package/src/domains/config/extension.ts +136 -0
  322. package/src/domains/config/index.ts +13 -0
  323. package/src/domains/config/keybindings.ts +164 -0
  324. package/src/domains/config/manifest.ts +6 -0
  325. package/src/domains/config/watcher.ts +41 -0
  326. package/src/domains/context/adoption.ts +880 -0
  327. package/src/domains/context/bootstrap-prompt.ts +273 -0
  328. package/src/domains/context/bootstrap.ts +1409 -0
  329. package/src/domains/context/clear.ts +86 -0
  330. package/src/domains/context/clio-md.ts +327 -0
  331. package/src/domains/context/codewiki/cmake.ts +356 -0
  332. package/src/domains/context/codewiki/cooperative.ts +46 -0
  333. package/src/domains/context/codewiki/digest.ts +135 -0
  334. package/src/domains/context/codewiki/grammar-assets.ts +33 -0
  335. package/src/domains/context/codewiki/indexer.ts +1614 -0
  336. package/src/domains/context/codewiki/tree-sitter.ts +771 -0
  337. package/src/domains/context/contract.ts +62 -0
  338. package/src/domains/context/excluded-dirs.ts +1 -0
  339. package/src/domains/context/extension.ts +407 -0
  340. package/src/domains/context/fingerprint.ts +196 -0
  341. package/src/domains/context/index.ts +164 -0
  342. package/src/domains/context/init-options.ts +69 -0
  343. package/src/domains/context/manifest.ts +6 -0
  344. package/src/domains/context/operator-profile.ts +157 -0
  345. package/src/domains/context/project-metadata.ts +510 -0
  346. package/src/domains/context/project-rules.ts +227 -0
  347. package/src/domains/context/prompt-context.ts +62 -0
  348. package/src/domains/context/refresh.ts +170 -0
  349. package/src/domains/context/sibling-files.ts +10 -0
  350. package/src/domains/context/state.ts +237 -0
  351. package/src/domains/context/wiki/assemble.ts +303 -0
  352. package/src/domains/context/wiki/frontmatter.ts +210 -0
  353. package/src/domains/context/wiki/generate.ts +590 -0
  354. package/src/domains/context/wiki/layout.ts +111 -0
  355. package/src/domains/context/wiki/meta.ts +221 -0
  356. package/src/domains/context/wiki/plan-store.ts +217 -0
  357. package/src/domains/context/wiki/plan.ts +250 -0
  358. package/src/domains/context/wiki/prompts.ts +270 -0
  359. package/src/domains/context/wiki/staleness.ts +198 -0
  360. package/src/domains/dispatch/active-route-planner.ts +168 -0
  361. package/src/domains/dispatch/admission-queue.ts +150 -0
  362. package/src/domains/dispatch/admission.ts +334 -0
  363. package/src/domains/dispatch/agent-candidates.ts +307 -0
  364. package/src/domains/dispatch/agent-ledger-hub.ts +71 -0
  365. package/src/domains/dispatch/agent-ledger-store.ts +257 -0
  366. package/src/domains/dispatch/agent-ledger.ts +212 -0
  367. package/src/domains/dispatch/agent-plan-adapter.ts +85 -0
  368. package/src/domains/dispatch/assignment-events.ts +132 -0
  369. package/src/domains/dispatch/assignment-reconcile.ts +76 -0
  370. package/src/domains/dispatch/assignment-store.ts +162 -0
  371. package/src/domains/dispatch/assignment.ts +278 -0
  372. package/src/domains/dispatch/backoff.ts +59 -0
  373. package/src/domains/dispatch/batch-store.ts +134 -0
  374. package/src/domains/dispatch/batch-tracker.ts +66 -0
  375. package/src/domains/dispatch/capability-match.ts +155 -0
  376. package/src/domains/dispatch/capacity-lease.ts +413 -0
  377. package/src/domains/dispatch/code-step-store.ts +52 -0
  378. package/src/domains/dispatch/code-step.ts +368 -0
  379. package/src/domains/dispatch/contract.ts +278 -0
  380. package/src/domains/dispatch/dedup.ts +133 -0
  381. package/src/domains/dispatch/event-pump.ts +251 -0
  382. package/src/domains/dispatch/execution-handoff.ts +29 -0
  383. package/src/domains/dispatch/execution-plan.ts +328 -0
  384. package/src/domains/dispatch/execution-role.ts +277 -0
  385. package/src/domains/dispatch/execution-scheduler.ts +583 -0
  386. package/src/domains/dispatch/extension.ts +5869 -0
  387. package/src/domains/dispatch/failure-classification.ts +141 -0
  388. package/src/domains/dispatch/fleet-plan.ts +225 -0
  389. package/src/domains/dispatch/fleet-preflight.ts +394 -0
  390. package/src/domains/dispatch/gate-decisions.ts +1040 -0
  391. package/src/domains/dispatch/gate-role-prompts.ts +58 -0
  392. package/src/domains/dispatch/heartbeat.ts +27 -0
  393. package/src/domains/dispatch/index.ts +137 -0
  394. package/src/domains/dispatch/joint-route-adapter.ts +114 -0
  395. package/src/domains/dispatch/joint-route-resolver.ts +283 -0
  396. package/src/domains/dispatch/manifest.ts +6 -0
  397. package/src/domains/dispatch/orphan-recovery.ts +224 -0
  398. package/src/domains/dispatch/outcome.ts +109 -0
  399. package/src/domains/dispatch/phase-timing.ts +47 -0
  400. package/src/domains/dispatch/placement.ts +202 -0
  401. package/src/domains/dispatch/receipt-findings.ts +255 -0
  402. package/src/domains/dispatch/receipt-integrity.ts +378 -0
  403. package/src/domains/dispatch/recovery-candidates.ts +74 -0
  404. package/src/domains/dispatch/reproducibility.ts +48 -0
  405. package/src/domains/dispatch/reservation-store.ts +501 -0
  406. package/src/domains/dispatch/route-approval.ts +177 -0
  407. package/src/domains/dispatch/route-candidates.ts +57 -0
  408. package/src/domains/dispatch/route-decision.ts +1079 -0
  409. package/src/domains/dispatch/route-facts.ts +187 -0
  410. package/src/domains/dispatch/route-history.ts +238 -0
  411. package/src/domains/dispatch/route-observer.ts +488 -0
  412. package/src/domains/dispatch/route-policy.ts +327 -0
  413. package/src/domains/dispatch/route-quality.ts +256 -0
  414. package/src/domains/dispatch/route-readiness.ts +120 -0
  415. package/src/domains/dispatch/routing-intent.ts +287 -0
  416. package/src/domains/dispatch/run-identity.ts +56 -0
  417. package/src/domains/dispatch/scout-transition.ts +130 -0
  418. package/src/domains/dispatch/state.ts +277 -0
  419. package/src/domains/dispatch/tool-stats.ts +132 -0
  420. package/src/domains/dispatch/transport.ts +209 -0
  421. package/src/domains/dispatch/types.ts +785 -0
  422. package/src/domains/dispatch/validation-grounding.ts +154 -0
  423. package/src/domains/dispatch/validation.ts +721 -0
  424. package/src/domains/dispatch/worker-protocol.ts +275 -0
  425. package/src/domains/dispatch/worker-spawn.ts +566 -0
  426. package/src/domains/dispatch/write-boundary-enforcer.ts +97 -0
  427. package/src/domains/dispatch/write-boundary.ts +426 -0
  428. package/src/domains/eval/artifacts/redact.ts +42 -0
  429. package/src/domains/eval/artifacts/store.ts +173 -0
  430. package/src/domains/eval/compare/compare.ts +33 -0
  431. package/src/domains/eval/compare/gates.ts +66 -0
  432. package/src/domains/eval/compare/thresholds.ts +92 -0
  433. package/src/domains/eval/harness-metrics.ts +62 -0
  434. package/src/domains/eval/index.ts +66 -0
  435. package/src/domains/eval/metrics/chaos-stream.ts +93 -0
  436. package/src/domains/eval/metrics/context.ts +34 -0
  437. package/src/domains/eval/metrics/coverage.ts +21 -0
  438. package/src/domains/eval/metrics/evidence.ts +182 -0
  439. package/src/domains/eval/metrics/fleet-loop-stream.ts +196 -0
  440. package/src/domains/eval/metrics/invariants.ts +736 -0
  441. package/src/domains/eval/metrics/latency.ts +4 -0
  442. package/src/domains/eval/metrics/token-stream.ts +139 -0
  443. package/src/domains/eval/metrics/tokens.ts +51 -0
  444. package/src/domains/eval/metrics/tool-calls.ts +7 -0
  445. package/src/domains/eval/proactive-memory.ts +279 -0
  446. package/src/domains/eval/provenance.ts +35 -0
  447. package/src/domains/eval/report.ts +234 -0
  448. package/src/domains/eval/reports/json.ts +5 -0
  449. package/src/domains/eval/reports/junit.ts +23 -0
  450. package/src/domains/eval/reports/markdown.ts +20 -0
  451. package/src/domains/eval/reports/swe-jsonl.ts +16 -0
  452. package/src/domains/eval/reports/text.ts +25 -0
  453. package/src/domains/eval/run-compare.ts +274 -0
  454. package/src/domains/eval/runner.ts +244 -0
  455. package/src/domains/eval/runners/clio-run.ts +148 -0
  456. package/src/domains/eval/runners/context-index.ts +56 -0
  457. package/src/domains/eval/runners/context-init.ts +203 -0
  458. package/src/domains/eval/runners/external-command.ts +350 -0
  459. package/src/domains/eval/runtime-paths.ts +171 -0
  460. package/src/domains/eval/schema/artifact.ts +75 -0
  461. package/src/domains/eval/schema/suite.ts +235 -0
  462. package/src/domains/eval/schema/validate.ts +339 -0
  463. package/src/domains/eval/store.ts +392 -0
  464. package/src/domains/eval/suites/load.ts +74 -0
  465. package/src/domains/eval/suites/matrix.ts +19 -0
  466. package/src/domains/eval/suites/resolve.ts +44 -0
  467. package/src/domains/eval/suites/run.ts +325 -0
  468. package/src/domains/eval/task-file.ts +186 -0
  469. package/src/domains/eval/types.ts +141 -0
  470. package/src/domains/eval/verifiers/command.ts +27 -0
  471. package/src/domains/eval/verifiers/file-exists.ts +6 -0
  472. package/src/domains/eval/verifiers/patch.ts +22 -0
  473. package/src/domains/eval/workspaces/git.ts +41 -0
  474. package/src/domains/eval/workspaces/local.ts +17 -0
  475. package/src/domains/eval/workspaces/temp-copy.ts +29 -0
  476. package/src/domains/evidence/build.ts +1714 -0
  477. package/src/domains/evidence/eval.ts +605 -0
  478. package/src/domains/evidence/failure-attribution.ts +54 -0
  479. package/src/domains/evidence/finish-contract-map.ts +42 -0
  480. package/src/domains/evidence/index.ts +55 -0
  481. package/src/domains/evidence/provenance.ts +200 -0
  482. package/src/domains/evidence/redact.ts +81 -0
  483. package/src/domains/evidence/store.ts +291 -0
  484. package/src/domains/evidence/types.ts +325 -0
  485. package/src/domains/evolution/SELF_EDIT_GATE.md +91 -0
  486. package/src/domains/evolution/index.ts +26 -0
  487. package/src/domains/evolution/manifest.ts +154 -0
  488. package/src/domains/evolution/validate.ts +304 -0
  489. package/src/domains/extensions/contract.ts +22 -0
  490. package/src/domains/extensions/discovery.ts +193 -0
  491. package/src/domains/extensions/extension.ts +46 -0
  492. package/src/domains/extensions/index.ts +34 -0
  493. package/src/domains/extensions/manager.ts +30 -0
  494. package/src/domains/extensions/manifest.ts +6 -0
  495. package/src/domains/extensions/resources.ts +38 -0
  496. package/src/domains/extensions/state.ts +224 -0
  497. package/src/domains/extensions/types.ts +83 -0
  498. package/src/domains/interop/consent.ts +185 -0
  499. package/src/domains/interop/contract.ts +29 -0
  500. package/src/domains/interop/detect.ts +173 -0
  501. package/src/domains/interop/extension.ts +59 -0
  502. package/src/domains/interop/index.ts +34 -0
  503. package/src/domains/interop/manifest.ts +6 -0
  504. package/src/domains/interop/registry.ts +139 -0
  505. package/src/domains/interop/state.ts +92 -0
  506. package/src/domains/interop/types.ts +109 -0
  507. package/src/domains/lifecycle/contract.ts +11 -0
  508. package/src/domains/lifecycle/doctor.ts +536 -0
  509. package/src/domains/lifecycle/extension.ts +23 -0
  510. package/src/domains/lifecycle/index.ts +21 -0
  511. package/src/domains/lifecycle/install-method.ts +51 -0
  512. package/src/domains/lifecycle/manifest.ts +6 -0
  513. package/src/domains/lifecycle/migrations/index.ts +94 -0
  514. package/src/domains/lifecycle/state.ts +93 -0
  515. package/src/domains/lifecycle/upgrade-notice.ts +35 -0
  516. package/src/domains/lifecycle/version.ts +35 -0
  517. package/src/domains/memory/index.ts +128 -0
  518. package/src/domains/memory/operations.ts +143 -0
  519. package/src/domains/memory/prompt-section.ts +86 -0
  520. package/src/domains/memory/proposal.ts +180 -0
  521. package/src/domains/memory/store.ts +163 -0
  522. package/src/domains/memory/task-bank.ts +229 -0
  523. package/src/domains/memory/task-memory-handoff.ts +222 -0
  524. package/src/domains/memory/task-memory-policy.ts +602 -0
  525. package/src/domains/memory/task-memory-status.ts +58 -0
  526. package/src/domains/memory/task-memory-telemetry.ts +346 -0
  527. package/src/domains/memory/task-memory-trace.ts +89 -0
  528. package/src/domains/memory/types.ts +74 -0
  529. package/src/domains/memory/validate.ts +297 -0
  530. package/src/domains/middleware/budget.ts +216 -0
  531. package/src/domains/middleware/contract.ts +35 -0
  532. package/src/domains/middleware/dispatch-nudge.ts +469 -0
  533. package/src/domains/middleware/extension.ts +129 -0
  534. package/src/domains/middleware/hook-receipts.ts +70 -0
  535. package/src/domains/middleware/hooks-io.ts +174 -0
  536. package/src/domains/middleware/hooks.ts +432 -0
  537. package/src/domains/middleware/index.ts +154 -0
  538. package/src/domains/middleware/manifest.ts +6 -0
  539. package/src/domains/middleware/memory-intervention.ts +701 -0
  540. package/src/domains/middleware/rules.ts +42 -0
  541. package/src/domains/middleware/runtime.ts +333 -0
  542. package/src/domains/middleware/skills-reminder.ts +187 -0
  543. package/src/domains/middleware/snapshot.ts +71 -0
  544. package/src/domains/middleware/stalled-turn.ts +71 -0
  545. package/src/domains/middleware/task-board-reminder.ts +87 -0
  546. package/src/domains/middleware/task-nudge.ts +77 -0
  547. package/src/domains/middleware/tool-choice-control.ts +42 -0
  548. package/src/domains/middleware/types.ts +131 -0
  549. package/src/domains/middleware/validate.ts +329 -0
  550. package/src/domains/observability/accountability.ts +67 -0
  551. package/src/domains/observability/contract.ts +168 -0
  552. package/src/domains/observability/cost.ts +206 -0
  553. package/src/domains/observability/evidence-index.ts +123 -0
  554. package/src/domains/observability/extension.ts +281 -0
  555. package/src/domains/observability/index.ts +78 -0
  556. package/src/domains/observability/manifest.ts +10 -0
  557. package/src/domains/observability/metrics.ts +37 -0
  558. package/src/domains/observability/projection.ts +477 -0
  559. package/src/domains/observability/telemetry.ts +89 -0
  560. package/src/domains/observability/trace-store.ts +1454 -0
  561. package/src/domains/prompts/compiler.ts +556 -0
  562. package/src/domains/prompts/contract.ts +30 -0
  563. package/src/domains/prompts/extension.ts +304 -0
  564. package/src/domains/prompts/fragment-loader.ts +139 -0
  565. package/src/domains/prompts/fragments/identity/clio.md +3 -2
  566. package/src/domains/prompts/fragments/identity/self-awareness.md +63 -0
  567. package/src/domains/prompts/fragments/operating/contract.md +10 -1
  568. package/src/domains/prompts/hash.ts +73 -0
  569. package/src/domains/prompts/index.ts +32 -0
  570. package/src/domains/prompts/manifest.ts +8 -0
  571. package/src/domains/prompts/memory-intervention.ts +57 -0
  572. package/src/domains/prompts/preload.ts +82 -0
  573. package/src/domains/providers/auth/api-key.ts +47 -0
  574. package/src/domains/providers/auth/backend-file.ts +69 -0
  575. package/src/domains/providers/auth/backend-memory.ts +17 -0
  576. package/src/domains/providers/auth/index.ts +37 -0
  577. package/src/domains/providers/auth/oauth.ts +36 -0
  578. package/src/domains/providers/auth/storage.ts +667 -0
  579. package/src/domains/providers/capabilities.ts +50 -0
  580. package/src/domains/providers/catalog.ts +162 -0
  581. package/src/domains/providers/contract.ts +151 -0
  582. package/src/domains/providers/credentials.ts +20 -0
  583. package/src/domains/providers/eligibility.ts +24 -0
  584. package/src/domains/providers/errors.ts +64 -0
  585. package/src/domains/providers/extension.ts +536 -0
  586. package/src/domains/providers/index.ts +142 -0
  587. package/src/domains/providers/knowledge-base-path.ts +102 -0
  588. package/src/domains/providers/manifest.ts +6 -0
  589. package/src/domains/providers/model-capabilities.ts +136 -0
  590. package/src/domains/providers/model-discovery.ts +144 -0
  591. package/src/domains/providers/model-family.ts +32 -0
  592. package/src/domains/providers/model-runtime-capabilities.ts +712 -0
  593. package/src/domains/providers/models/local-models/clio-local-coding-targets.yaml +2 -2
  594. package/src/domains/providers/plugins.ts +59 -0
  595. package/src/domains/providers/probe/fingerprint.ts +44 -0
  596. package/src/domains/providers/probe/http.ts +114 -0
  597. package/src/domains/providers/probe/reasoning.ts +111 -0
  598. package/src/domains/providers/registry.ts +166 -0
  599. package/src/domains/providers/resolver.ts +156 -0
  600. package/src/domains/providers/runtime-resolution.ts +720 -0
  601. package/src/domains/providers/runtimes/antigravity/antigravity-code.ts +90 -0
  602. package/src/domains/providers/runtimes/builtins.ts +78 -0
  603. package/src/domains/providers/runtimes/claude/claude-code.ts +38 -0
  604. package/src/domains/providers/runtimes/claude/claude-sdk.ts +38 -0
  605. package/src/domains/providers/runtimes/claude/common.ts +55 -0
  606. package/src/domains/providers/runtimes/cloud/alcf.ts +171 -0
  607. package/src/domains/providers/runtimes/cloud/anthropic-max.ts +71 -0
  608. package/src/domains/providers/runtimes/cloud/anthropic.ts +43 -0
  609. package/src/domains/providers/runtimes/cloud/bedrock.ts +35 -0
  610. package/src/domains/providers/runtimes/cloud/deepseek.ts +50 -0
  611. package/src/domains/providers/runtimes/cloud/google.ts +41 -0
  612. package/src/domains/providers/runtimes/cloud/groq.ts +46 -0
  613. package/src/domains/providers/runtimes/cloud/mistral.ts +46 -0
  614. package/src/domains/providers/runtimes/cloud/openai-codex.ts +49 -0
  615. package/src/domains/providers/runtimes/cloud/openai.ts +46 -0
  616. package/src/domains/providers/runtimes/cloud/openrouter.ts +111 -0
  617. package/src/domains/providers/runtimes/common/lmstudio-logger.ts +32 -0
  618. package/src/domains/providers/runtimes/common/local-synth.ts +165 -0
  619. package/src/domains/providers/runtimes/common/probe-helpers.ts +474 -0
  620. package/src/domains/providers/runtimes/local-native/lemonade-anthropic.ts +27 -0
  621. package/src/domains/providers/runtimes/local-native/lemonade-openai.ts +26 -0
  622. package/src/domains/providers/runtimes/local-native/llamacpp-anthropic.ts +88 -0
  623. package/src/domains/providers/runtimes/local-native/llamacpp-completion.ts +207 -0
  624. package/src/domains/providers/runtimes/local-native/llamacpp-embed.ts +180 -0
  625. package/src/domains/providers/runtimes/local-native/llamacpp-rerank.ts +126 -0
  626. package/src/domains/providers/runtimes/local-native/llamacpp.ts +98 -0
  627. package/src/domains/providers/runtimes/local-native/lmstudio-native.ts +491 -0
  628. package/src/domains/providers/runtimes/local-native/ollama-native.ts +117 -0
  629. package/src/domains/providers/runtimes/local-native/sglang.ts +26 -0
  630. package/src/domains/providers/runtimes/local-native/vllm.ts +27 -0
  631. package/src/domains/providers/runtimes/protocol/anthropic-compat.ts +104 -0
  632. package/src/domains/providers/runtimes/protocol/anthropic-messages.ts +28 -0
  633. package/src/domains/providers/runtimes/protocol/bedrock.ts +26 -0
  634. package/src/domains/providers/runtimes/protocol/google.ts +27 -0
  635. package/src/domains/providers/runtimes/protocol/openai-compat.ts +145 -0
  636. package/src/domains/providers/support.ts +238 -0
  637. package/src/domains/providers/thinking-control-policy.ts +85 -0
  638. package/src/domains/providers/types/capability-flags.ts +114 -0
  639. package/src/domains/providers/types/cost-provenance.ts +7 -0
  640. package/src/domains/providers/types/inference.ts +41 -0
  641. package/src/domains/providers/types/knowledge-base.ts +156 -0
  642. package/src/domains/providers/types/local-model-quirks.ts +218 -0
  643. package/src/domains/providers/types/runtime-descriptor.ts +170 -0
  644. package/src/domains/providers/types/target-descriptor.ts +38 -0
  645. package/src/domains/resources/collision.ts +92 -0
  646. package/src/domains/resources/common-loader.ts +140 -0
  647. package/src/domains/resources/contract.ts +25 -0
  648. package/src/domains/resources/extension.ts +61 -0
  649. package/src/domains/resources/index.ts +74 -0
  650. package/src/domains/resources/loader.ts +86 -0
  651. package/src/domains/resources/manifest.ts +6 -0
  652. package/src/domains/resources/prompts/loader.ts +232 -0
  653. package/src/domains/resources/prompts/substitute.ts +65 -0
  654. package/src/domains/resources/skills/content-hash.ts +105 -0
  655. package/src/domains/resources/skills/evals.ts +175 -0
  656. package/src/domains/resources/skills/install.ts +410 -0
  657. package/src/domains/resources/skills/loader.ts +978 -0
  658. package/src/domains/resources/skills/marketplace.ts +255 -0
  659. package/src/domains/resources/skills/provenance-pin.ts +115 -0
  660. package/src/domains/safety/action-classifier.ts +268 -0
  661. package/src/domains/safety/approval-axis.ts +23 -0
  662. package/src/domains/safety/audit.ts +487 -0
  663. package/src/domains/safety/autonomy.ts +174 -0
  664. package/src/domains/safety/call-target.ts +59 -0
  665. package/src/domains/safety/contract.ts +65 -0
  666. package/src/domains/safety/damage-control.ts +44 -0
  667. package/src/domains/safety/default-path-policy.ts +117 -0
  668. package/src/domains/safety/extension.ts +383 -0
  669. package/src/domains/safety/finish-contract-registration.ts +128 -0
  670. package/src/domains/safety/finish-contract.ts +554 -0
  671. package/src/domains/safety/index.ts +44 -0
  672. package/src/domains/safety/loop-detector.ts +143 -0
  673. package/src/domains/safety/manifest.ts +6 -0
  674. package/src/domains/safety/path-policy.ts +164 -0
  675. package/src/domains/safety/policy-engine.ts +994 -0
  676. package/src/domains/safety/project-policy.ts +391 -0
  677. package/src/domains/safety/protected-artifacts-registration.ts +189 -0
  678. package/src/domains/safety/protected-artifacts.ts +993 -0
  679. package/src/domains/safety/rejection-feedback.ts +102 -0
  680. package/src/domains/safety/rigor.ts +72 -0
  681. package/src/domains/safety/rule-compiler.ts +48 -0
  682. package/src/domains/safety/rule-pack-loader.ts +92 -0
  683. package/src/domains/safety/run-effects.ts +197 -0
  684. package/src/domains/safety/scope.ts +61 -0
  685. package/src/domains/scheduling/budget.ts +35 -0
  686. package/src/domains/scheduling/cluster.ts +175 -0
  687. package/src/domains/scheduling/contract.ts +30 -0
  688. package/src/domains/scheduling/extension.ts +91 -0
  689. package/src/domains/scheduling/index.ts +12 -0
  690. package/src/domains/scheduling/manifest.ts +6 -0
  691. package/src/domains/session/archive-readers.ts +208 -0
  692. package/src/domains/session/checkpoint.ts +38 -0
  693. package/src/domains/session/compaction/auto.ts +89 -0
  694. package/src/domains/session/compaction/branch-summary.ts +186 -0
  695. package/src/domains/session/compaction/compact.ts +493 -0
  696. package/src/domains/session/compaction/cut-point.ts +171 -0
  697. package/src/domains/session/compaction/defaults.ts +34 -0
  698. package/src/domains/session/compaction/mask-observations.ts +265 -0
  699. package/src/domains/session/compaction/session-entries.ts +18 -0
  700. package/src/domains/session/compaction/tokens.ts +147 -0
  701. package/src/domains/session/context-accounting.ts +583 -0
  702. package/src/domains/session/context-ledger.ts +348 -0
  703. package/src/domains/session/contract.ts +144 -0
  704. package/src/domains/session/cwd-fallback.ts +65 -0
  705. package/src/domains/session/entries.ts +509 -0
  706. package/src/domains/session/extension.ts +322 -0
  707. package/src/domains/session/history.ts +172 -0
  708. package/src/domains/session/index.ts +84 -0
  709. package/src/domains/session/manager.ts +128 -0
  710. package/src/domains/session/manifest.ts +6 -0
  711. package/src/domains/session/migrations/index.ts +27 -0
  712. package/src/domains/session/prompt-manifest.ts +173 -0
  713. package/src/domains/session/protected-artifact-journal.ts +241 -0
  714. package/src/domains/session/protected-artifacts.ts +90 -0
  715. package/src/domains/session/retry.ts +238 -0
  716. package/src/domains/session/task-board.ts +375 -0
  717. package/src/domains/session/tree/active-path.ts +98 -0
  718. package/src/domains/session/tree/fork.ts +160 -0
  719. package/src/domains/session/tree/manager.ts +128 -0
  720. package/src/domains/session/tree/navigator.ts +177 -0
  721. package/src/domains/session/tree/preview.ts +259 -0
  722. package/src/domains/session/usage.ts +148 -0
  723. package/src/domains/session/workspace/git-probe.ts +161 -0
  724. package/src/domains/session/workspace/index.ts +4 -0
  725. package/src/domains/session/workspace/project-type.ts +217 -0
  726. package/src/domains/session/workspace/snapshot.ts +74 -0
  727. package/src/domains/share/archive.ts +684 -0
  728. package/src/domains/share/contract.ts +9 -0
  729. package/src/domains/share/extension.ts +26 -0
  730. package/src/domains/share/index.ts +28 -0
  731. package/src/domains/share/manifest.ts +6 -0
  732. package/src/engine/acp/adapter.ts +397 -0
  733. package/src/engine/acp/errors.ts +32 -0
  734. package/src/engine/acp/event-mapper.ts +154 -0
  735. package/src/engine/acp/server.ts +656 -0
  736. package/src/engine/acp/tool-mediator.ts +686 -0
  737. package/src/engine/acp/transport.ts +654 -0
  738. package/src/engine/acp/types.ts +170 -0
  739. package/src/engine/agent.ts +29 -0
  740. package/src/engine/ai.ts +202 -0
  741. package/src/engine/alcf-oauth.ts +198 -0
  742. package/src/engine/antigravity/subprocess-runtime.ts +205 -0
  743. package/src/engine/apis/degraded-inference.ts +95 -0
  744. package/src/engine/apis/index.ts +20 -0
  745. package/src/engine/apis/llamacpp-residency.ts +252 -0
  746. package/src/engine/apis/lmstudio-native.ts +1438 -0
  747. package/src/engine/apis/lmstudio-residency.ts +92 -0
  748. package/src/engine/apis/ollama-native.ts +507 -0
  749. package/src/engine/apis/openai-completions.ts +716 -0
  750. package/src/engine/apis/output-budget.ts +99 -0
  751. package/src/engine/apis/residency-lock.ts +29 -0
  752. package/src/engine/apis/residency.ts +640 -0
  753. package/src/engine/apis/resident-models.ts +42 -0
  754. package/src/engine/apis/sampling-overrides.ts +38 -0
  755. package/src/engine/apis/thinking-replay.ts +11 -0
  756. package/src/engine/claude/sdk-runtime.ts +685 -0
  757. package/src/engine/claude/session-id.ts +5 -0
  758. package/src/engine/claude/subprocess-runtime.ts +316 -0
  759. package/src/engine/claude/tool-safety.ts +400 -0
  760. package/src/engine/external-subprocess.ts +23 -0
  761. package/src/engine/harmony-response.ts +165 -0
  762. package/src/engine/loop-guard.ts +1127 -0
  763. package/src/engine/oauth.ts +192 -0
  764. package/src/engine/pi-mono-names.ts +13 -0
  765. package/src/engine/provider-payload.ts +315 -0
  766. package/src/engine/select-list.ts +53 -0
  767. package/src/engine/session.ts +834 -0
  768. package/src/engine/strip-tokenizer-sentinels.ts +125 -0
  769. package/src/engine/tui.ts +103 -0
  770. package/src/engine/types.ts +66 -0
  771. package/src/engine/worker-events.ts +100 -0
  772. package/src/engine/worker-runtime.ts +1022 -0
  773. package/src/engine/worker-tools.ts +203 -0
  774. package/src/entry/orchestrator.ts +1873 -0
  775. package/src/interactive/application-controller.ts +346 -0
  776. package/src/interactive/bus-notices.ts +265 -0
  777. package/src/interactive/chat-loop-messages.ts +626 -0
  778. package/src/interactive/chat-loop-policy.ts +18 -0
  779. package/src/interactive/chat-loop.ts +865 -0
  780. package/src/interactive/chat-panel.ts +1694 -0
  781. package/src/interactive/chat-renderer.ts +1038 -0
  782. package/src/interactive/clio-editor.ts +166 -0
  783. package/src/interactive/command-fallbacks.ts +23 -0
  784. package/src/interactive/command-output.ts +85 -0
  785. package/src/interactive/context-activity.ts +203 -0
  786. package/src/interactive/context-meter.ts +223 -0
  787. package/src/interactive/context-overlay.ts +220 -0
  788. package/src/interactive/cost-overlay.ts +279 -0
  789. package/src/interactive/dispatch-board.ts +1319 -0
  790. package/src/interactive/dispatch-steering.ts +86 -0
  791. package/src/interactive/editor-bash.ts +46 -0
  792. package/src/interactive/editor-steer.ts +51 -0
  793. package/src/interactive/editor-submit.ts +303 -0
  794. package/src/interactive/external-editor.ts +67 -0
  795. package/src/interactive/follow-up-queue-panel.ts +75 -0
  796. package/src/interactive/footer/dashboard.ts +534 -0
  797. package/src/interactive/footer/notifications.ts +275 -0
  798. package/src/interactive/footer/widgets.ts +1246 -0
  799. package/src/interactive/footer-panel.ts +187 -0
  800. package/src/interactive/format-time.ts +85 -0
  801. package/src/interactive/index.ts +11 -0
  802. package/src/interactive/interactive-application.ts +755 -0
  803. package/src/interactive/interactive-event-projection.ts +380 -0
  804. package/src/interactive/interactive-input-runtime.ts +261 -0
  805. package/src/interactive/interactive-presentation.ts +452 -0
  806. package/src/interactive/interactive-shell.ts +134 -0
  807. package/src/interactive/interactive-slash-runtime.ts +492 -0
  808. package/src/interactive/interactive-subscriptions.ts +111 -0
  809. package/src/interactive/interactive-tickers.ts +152 -0
  810. package/src/interactive/keybinding-manager.ts +496 -0
  811. package/src/interactive/layout.ts +20 -0
  812. package/src/interactive/leader-key.ts +143 -0
  813. package/src/interactive/loop-guard-interrupt.ts +101 -0
  814. package/src/interactive/memory-overlay.ts +280 -0
  815. package/src/interactive/overlay-ask-user-lifecycle.ts +110 -0
  816. package/src/interactive/overlay-auth-lifecycle.ts +308 -0
  817. package/src/interactive/overlay-frame.ts +502 -0
  818. package/src/interactive/overlay-general-openers.ts +217 -0
  819. package/src/interactive/overlay-key-routing.ts +213 -0
  820. package/src/interactive/overlay-lifecycle.ts +413 -0
  821. package/src/interactive/overlay-model-selectors.ts +127 -0
  822. package/src/interactive/overlay-permission-lifecycle.ts +344 -0
  823. package/src/interactive/overlay-resource-openers.ts +112 -0
  824. package/src/interactive/overlay-session-lifecycle.ts +270 -0
  825. package/src/interactive/overlay-transitions.ts +57 -0
  826. package/src/interactive/overlays/agents.ts +69 -0
  827. package/src/interactive/overlays/ask-user.ts +921 -0
  828. package/src/interactive/overlays/auth-dialog.ts +221 -0
  829. package/src/interactive/overlays/context-reset.ts +108 -0
  830. package/src/interactive/overlays/cwd-fallback.ts +141 -0
  831. package/src/interactive/overlays/extensions.ts +54 -0
  832. package/src/interactive/overlays/help-reference.ts +140 -0
  833. package/src/interactive/overlays/interop.ts +139 -0
  834. package/src/interactive/overlays/keybinding-detail.ts +90 -0
  835. package/src/interactive/overlays/list-overlay.ts +606 -0
  836. package/src/interactive/overlays/message-picker.ts +155 -0
  837. package/src/interactive/overlays/model-selector.ts +1091 -0
  838. package/src/interactive/overlays/prompts.ts +72 -0
  839. package/src/interactive/overlays/session-selector-search.ts +31 -0
  840. package/src/interactive/overlays/session-selector.ts +266 -0
  841. package/src/interactive/overlays/settings.ts +3363 -0
  842. package/src/interactive/overlays/skills-hub.ts +237 -0
  843. package/src/interactive/overlays/tree-selector.ts +387 -0
  844. package/src/interactive/permission-overlay.ts +170 -0
  845. package/src/interactive/render-trace.ts +125 -0
  846. package/src/interactive/renderers/branch-summary.ts +86 -0
  847. package/src/interactive/renderers/code-ink.ts +420 -0
  848. package/src/interactive/renderers/compaction-summary.ts +112 -0
  849. package/src/interactive/renderers/diff.ts +126 -0
  850. package/src/interactive/renderers/notice.ts +28 -0
  851. package/src/interactive/renderers/retry-status.ts +31 -0
  852. package/src/interactive/renderers/structured.ts +89 -0
  853. package/src/interactive/renderers/tool-execution.ts +1104 -0
  854. package/src/interactive/renderers/worker-entry.ts +264 -0
  855. package/src/interactive/session-last-turn.ts +186 -0
  856. package/src/interactive/session-transcript.ts +105 -0
  857. package/src/interactive/session-usage-reseed.ts +74 -0
  858. package/src/interactive/slash-autocomplete.ts +364 -0
  859. package/src/interactive/slash-commands.ts +1319 -0
  860. package/src/interactive/slash-spec.ts +453 -0
  861. package/src/interactive/status/controller.ts +256 -0
  862. package/src/interactive/status/index.ts +23 -0
  863. package/src/interactive/status/state-machine.ts +530 -0
  864. package/src/interactive/status/summary.ts +170 -0
  865. package/src/interactive/status/types.ts +121 -0
  866. package/src/interactive/status/verbs.ts +163 -0
  867. package/src/interactive/status/watchdog.ts +24 -0
  868. package/src/interactive/tasks-overlay.ts +186 -0
  869. package/src/interactive/theme/components.ts +55 -0
  870. package/src/interactive/theme/glyphs.ts +70 -0
  871. package/src/interactive/theme/index.ts +15 -0
  872. package/src/interactive/theme/labels.ts +88 -0
  873. package/src/interactive/theme/rules.ts +138 -0
  874. package/src/interactive/theme/segments.ts +88 -0
  875. package/src/interactive/theme/tokens.ts +121 -0
  876. package/src/interactive/thinking-level-policy.ts +6 -0
  877. package/src/interactive/tool-prose-loop.ts +122 -0
  878. package/src/interactive/tool-prose-registration.ts +48 -0
  879. package/src/interactive/turn-context.ts +854 -0
  880. package/src/interactive/turn-middleware.ts +283 -0
  881. package/src/interactive/turn-persistence.ts +441 -0
  882. package/src/interactive/turn-queues.ts +169 -0
  883. package/src/interactive/turn-recovery.ts +306 -0
  884. package/src/interactive/turn-runtime.ts +802 -0
  885. package/src/interactive/turn-state.ts +123 -0
  886. package/src/interactive/view/artifacts.ts +1342 -0
  887. package/src/interactive/view/view-overlay.ts +732 -0
  888. package/src/interactive/welcome-dashboard.ts +536 -0
  889. package/src/interactive/worker-receipts.ts +94 -0
  890. package/src/interactive/worker-replay.ts +111 -0
  891. package/src/interactive/worker-share.ts +100 -0
  892. package/src/interactive/worker-stream.ts +442 -0
  893. package/src/interactive/workspace-facts.ts +141 -0
  894. package/src/tools/agent-tools.ts +382 -0
  895. package/src/tools/artifact.ts +103 -0
  896. package/src/tools/ask-user.ts +656 -0
  897. package/src/tools/bash.ts +176 -0
  898. package/src/tools/bootstrap.ts +474 -0
  899. package/src/tools/codewiki/code-nav.ts +563 -0
  900. package/src/tools/codewiki/shared.ts +115 -0
  901. package/src/tools/compete-worktrees.ts +898 -0
  902. package/src/tools/context/docs-engine.ts +619 -0
  903. package/src/tools/context/index.ts +435 -0
  904. package/src/tools/credential-present.ts +151 -0
  905. package/src/tools/dispatch-arguments.ts +228 -0
  906. package/src/tools/dispatch-plan.ts +741 -0
  907. package/src/tools/dispatch-scout.ts +461 -0
  908. package/src/tools/dispatch.ts +3338 -0
  909. package/src/tools/edit-diff.ts +534 -0
  910. package/src/tools/edit.ts +128 -0
  911. package/src/tools/executables.ts +22 -0
  912. package/src/tools/file-mutation-queue.ts +35 -0
  913. package/src/tools/find.ts +292 -0
  914. package/src/tools/grep.ts +495 -0
  915. package/src/tools/ignore-policy.ts +169 -0
  916. package/src/tools/ledger.ts +206 -0
  917. package/src/tools/ls.ts +110 -0
  918. package/src/tools/monitor.ts +797 -0
  919. package/src/tools/network-policy.ts +29 -0
  920. package/src/tools/observation.ts +421 -0
  921. package/src/tools/observers.ts +99 -0
  922. package/src/tools/path-utils.ts +79 -0
  923. package/src/tools/policy.ts +154 -0
  924. package/src/tools/profiles.ts +108 -0
  925. package/src/tools/read.ts +173 -0
  926. package/src/tools/registry.ts +1157 -0
  927. package/src/tools/result-shaping.ts +204 -0
  928. package/src/tools/safe-exec.ts +128 -0
  929. package/src/tools/spawn-hygiene.ts +182 -0
  930. package/src/tools/steer.ts +88 -0
  931. package/src/tools/string-enum.ts +15 -0
  932. package/src/tools/tasks.ts +168 -0
  933. package/src/tools/truncate-utf8.ts +17 -0
  934. package/src/tools/truncate.ts +202 -0
  935. package/src/tools/verify/frontend.ts +685 -0
  936. package/src/tools/verify/index.ts +66 -0
  937. package/src/tools/verify/scripts.ts +108 -0
  938. package/src/tools/web-fetch.ts +777 -0
  939. package/src/tools/worker-evidence.ts +215 -0
  940. package/src/tools/write.ts +52 -0
  941. package/src/utils/exif-orientation.ts +192 -0
  942. package/src/utils/git.ts +24 -0
  943. package/src/utils/image-resize.ts +148 -0
  944. package/src/utils/photon.ts +103 -0
  945. package/src/worker/control-lane.ts +22 -0
  946. package/src/worker/entry.ts +257 -0
  947. package/src/worker/event-projection.ts +56 -0
  948. package/src/worker/heartbeat.ts +24 -0
  949. package/src/worker/ledger-mirror.ts +95 -0
  950. package/src/worker/ndjson.ts +40 -0
  951. package/src/worker/protocol.ts +529 -0
  952. package/src/worker/resource-facts.ts +79 -0
  953. package/src/worker/runtime-registry.ts +12 -0
  954. package/src/worker/spec-contract.ts +654 -0
  955. package/src/worker/stdin-demux.ts +316 -0
  956. package/dist/acp-UMLFVA3F.js +0 -92
  957. package/dist/chunk-262G75JS.js +0 -35
  958. package/dist/chunk-5LDRNKX2.js +0 -1063
  959. package/dist/chunk-67MTHP2E.js +0 -135
  960. package/dist/chunk-GOTUR54M.js +0 -9
  961. package/dist/chunk-TPOCL34A.js +0 -2876
  962. package/dist/chunk-XV4ZJ6ZM.js +0 -3177
  963. package/dist/clio-KIQ5SNDS.js +0 -53
  964. package/dist/configure-G4E3A2PG.js +0 -27
  965. package/dist/doctor-M5HJJZOL.js +0 -61
  966. package/dist/domains/agents/builtins/architect.md +0 -33
  967. package/dist/domains/agents/builtins/coder.md +0 -31
  968. package/dist/domains/agents/builtins/context-bootstrap.md +0 -38
  969. package/dist/domains/agents/builtins/debugger.md +0 -30
  970. package/dist/domains/agents/builtins/documenter.md +0 -31
  971. package/dist/domains/agents/builtins/git-master.md +0 -30
  972. package/dist/domains/agents/builtins/provenance.md +0 -30
  973. package/dist/domains/agents/builtins/researcher.md +0 -71
  974. package/dist/domains/agents/builtins/scout.md +0 -42
  975. package/dist/domains/agents/builtins/tester.md +0 -31
  976. package/dist/domains/agents/builtins/verifier.md +0 -30
  977. package/dist/domains/agents/builtins/wiki-writer.md +0 -41
  978. package/dist/fleet-preflight-CLIAX7YR.js +0 -21
  979. package/dist/preload-KZVHET2B.js +0 -11
  980. package/dist/version-ROZ6CZKH.js +0 -16
  981. package/skills/git/commit-crafting/SKILL.md +0 -79
  982. package/skills/git/commit-crafting/evals.md +0 -92
  983. package/skills/git/create-pr/SKILL.md +0 -116
  984. package/skills/git/create-pr/evals.md +0 -114
  985. package/skills/git/investigate-issue/SKILL.md +0 -139
  986. package/skills/git/investigate-issue/evals.md +0 -94
  987. package/skills/git/review-changes/SKILL.md +0 -103
  988. package/skills/git/review-changes/evals.md +0 -85
@@ -1,1063 +0,0 @@
1
- import {
2
- safeResourceWrite
3
- } from "./chunk-VPAWTYLY.js";
4
- import {
5
- clioConfigDir
6
- } from "./chunk-X3NE4WVW.js";
7
-
8
- // src/engine/oauth.ts
9
- import { findEnvKeys as piFindEnvKeys, getEnvApiKey as piGetEnvApiKey } from "@earendil-works/pi-ai/compat";
10
- import { anthropicProvider } from "@earendil-works/pi-ai/providers/anthropic";
11
- import { githubCopilotProvider } from "@earendil-works/pi-ai/providers/github-copilot";
12
- import { openaiCodexProvider } from "@earendil-works/pi-ai/providers/openai-codex";
13
-
14
- // src/engine/alcf-oauth.ts
15
- var AUTH_CLIENT_ID = "58fdd3bc-e1c3-4ce5-80ea-8d6b87cfb944";
16
- var GATEWAY_CLIENT_ID = "681c10cc-f684-4540-bcd7-0b4df3bc26ef";
17
- var GATEWAY_SCOPE = `https://auth.globus.org/scopes/${GATEWAY_CLIENT_ID}/action_all`;
18
- var ALLOWED_DOMAINS = "anl.gov,alcf.anl.gov";
19
- var AUTHORIZE_URL = "https://auth.globus.org/v2/oauth2/authorize";
20
- var TOKEN_URL = "https://auth.globus.org/v2/oauth2/token";
21
- var REDIRECT_URI = "https://auth.globus.org/v2/web/auth-code";
22
- var EXPIRY_SKEW_MS = 5 * 60 * 1e3;
23
- function base64Url(bytes) {
24
- let binary = "";
25
- for (const byte of bytes) binary += String.fromCharCode(byte);
26
- return btoa(binary).replace(/\+/g, "-").replace(/\//g, "_").replace(/=/g, "");
27
- }
28
- async function generatePkce() {
29
- const verifierBytes = new Uint8Array(32);
30
- crypto.getRandomValues(verifierBytes);
31
- const verifier = base64Url(verifierBytes);
32
- const digest = await crypto.subtle.digest("SHA-256", new TextEncoder().encode(verifier));
33
- return { verifier, challenge: base64Url(new Uint8Array(digest)) };
34
- }
35
- function randomState() {
36
- const bytes = new Uint8Array(16);
37
- crypto.getRandomValues(bytes);
38
- return base64Url(bytes);
39
- }
40
- function buildAuthorizeUrl(params) {
41
- const query = new URLSearchParams({
42
- client_id: AUTH_CLIENT_ID,
43
- response_type: "code",
44
- redirect_uri: REDIRECT_URI,
45
- scope: GATEWAY_SCOPE,
46
- state: params.state,
47
- code_challenge: params.challenge,
48
- code_challenge_method: "S256",
49
- access_type: "offline",
50
- session_required_single_domain: ALLOWED_DOMAINS
51
- });
52
- return `${AUTHORIZE_URL}?${query.toString()}`;
53
- }
54
- function parseAuthorizationInput(input) {
55
- const value = input.trim();
56
- if (!value) return "";
57
- try {
58
- const url = new URL(value);
59
- const code = url.searchParams.get("code");
60
- if (code) return code;
61
- } catch {
62
- }
63
- if (value.includes("code=")) {
64
- const params = new URLSearchParams(value.includes("?") ? value.slice(value.indexOf("?") + 1) : value);
65
- const code = params.get("code");
66
- if (code) return code;
67
- }
68
- return value;
69
- }
70
- function isRecord(value) {
71
- return typeof value === "object" && value !== null;
72
- }
73
- function selectGatewayGrant(payload) {
74
- const grants = [payload, ...Array.isArray(payload.other_tokens) ? payload.other_tokens : []];
75
- const byResourceServer = grants.find((grant) => grant.resource_server === GATEWAY_CLIENT_ID);
76
- if (byResourceServer) return byResourceServer;
77
- const byScope = grants.find(
78
- (grant) => typeof grant.scope === "string" && (grant.scope.includes("action_all") || grant.scope === GATEWAY_SCOPE)
79
- );
80
- if (byScope) return byScope;
81
- if (grants.length === 1 && typeof payload.access_token === "string") return payload;
82
- throw new Error(
83
- `Globus token response did not include a grant for the ALCF gateway (resource_server=${GATEWAY_CLIENT_ID}).`
84
- );
85
- }
86
- function grantToCredentials(grant, previousRefresh) {
87
- const access = grant.access_token;
88
- if (typeof access !== "string" || access.length === 0) {
89
- throw new Error("Globus token response is missing an access token for the ALCF gateway.");
90
- }
91
- const refresh = typeof grant.refresh_token === "string" && grant.refresh_token.length > 0 ? grant.refresh_token : previousRefresh;
92
- if (typeof refresh !== "string" || refresh.length === 0) {
93
- throw new Error("Globus token response is missing a refresh token; cannot persist a renewable session.");
94
- }
95
- const expiresInSeconds = typeof grant.expires_in === "number" && grant.expires_in > 0 ? grant.expires_in : 0;
96
- return {
97
- access,
98
- refresh,
99
- expires: Date.now() + expiresInSeconds * 1e3 - EXPIRY_SKEW_MS
100
- };
101
- }
102
- async function postForm(body) {
103
- const response = await fetch(TOKEN_URL, {
104
- method: "POST",
105
- headers: {
106
- "Content-Type": "application/x-www-form-urlencoded",
107
- Accept: "application/json"
108
- },
109
- body: new URLSearchParams(body).toString(),
110
- signal: AbortSignal.timeout(3e4)
111
- });
112
- const text = await response.text();
113
- if (!response.ok) {
114
- throw new Error(`Globus token endpoint failed (HTTP ${response.status}): ${text.slice(0, 300)}`);
115
- }
116
- let parsed;
117
- try {
118
- parsed = JSON.parse(text);
119
- } catch (err) {
120
- throw new Error(`Globus token endpoint returned invalid JSON: ${err instanceof Error ? err.message : String(err)}`);
121
- }
122
- if (!isRecord(parsed)) throw new Error("Globus token endpoint returned a non-object response.");
123
- return parsed;
124
- }
125
- async function exchangeCode(code, verifier) {
126
- const payload = await postForm({
127
- grant_type: "authorization_code",
128
- client_id: AUTH_CLIENT_ID,
129
- code,
130
- code_verifier: verifier,
131
- redirect_uri: REDIRECT_URI
132
- });
133
- return grantToCredentials(selectGatewayGrant(payload));
134
- }
135
- async function refreshGatewayToken(refreshToken) {
136
- const payload = await postForm({
137
- grant_type: "refresh_token",
138
- client_id: AUTH_CLIENT_ID,
139
- refresh_token: refreshToken
140
- });
141
- return grantToCredentials(selectGatewayGrant(payload), refreshToken);
142
- }
143
- async function loginAlcf(callbacks) {
144
- const { verifier, challenge } = await generatePkce();
145
- const url = buildAuthorizeUrl({ challenge, state: randomState() });
146
- callbacks.onAuth({
147
- url,
148
- instructions: "Log in with your ALCF / anl.gov identity. Globus will show an authorization code; copy it and paste it here."
149
- });
150
- const pasted = callbacks.onManualCodeInput ? await callbacks.onManualCodeInput() : await callbacks.onPrompt({ message: "Paste the authorization code from Globus", placeholder: "code" });
151
- const code = parseAuthorizationInput(pasted);
152
- if (!code) throw new Error("No authorization code was provided.");
153
- callbacks.onProgress?.("Exchanging authorization code for an ALCF access token...");
154
- return exchangeCode(code, verifier);
155
- }
156
- var alcfOAuthProvider = {
157
- id: "alcf",
158
- name: "ALCF Inference (Globus)",
159
- usesCallbackServer: false,
160
- login(callbacks) {
161
- return loginAlcf(callbacks);
162
- },
163
- refreshToken(credentials) {
164
- return refreshGatewayToken(credentials.refresh);
165
- },
166
- async getApiKey(credentials) {
167
- return credentials.access;
168
- }
169
- };
170
-
171
- // src/engine/oauth.ts
172
- function interactionFromLoginCallbacks(callbacks) {
173
- const interaction = {
174
- notify(event) {
175
- switch (event.type) {
176
- case "auth_url":
177
- callbacks.onAuth({
178
- url: event.url,
179
- ...event.instructions === void 0 ? {} : { instructions: event.instructions }
180
- });
181
- return;
182
- case "device_code":
183
- callbacks.onDeviceCode({
184
- userCode: event.userCode,
185
- verificationUri: event.verificationUri,
186
- ...event.intervalSeconds === void 0 ? {} : { intervalSeconds: event.intervalSeconds },
187
- ...event.expiresInSeconds === void 0 ? {} : { expiresInSeconds: event.expiresInSeconds }
188
- });
189
- return;
190
- case "progress":
191
- case "info":
192
- callbacks.onProgress?.(event.message);
193
- return;
194
- }
195
- },
196
- async prompt(prompt) {
197
- switch (prompt.type) {
198
- case "select": {
199
- const selection = await callbacks.onSelect({
200
- message: prompt.message,
201
- options: prompt.options.map((option) => ({ id: option.id, label: option.label }))
202
- });
203
- if (selection === void 0) throw new Error("login cancelled");
204
- return selection;
205
- }
206
- case "manual_code":
207
- if (callbacks.onManualCodeInput) return callbacks.onManualCodeInput();
208
- return callbacks.onPrompt({
209
- message: prompt.message,
210
- ...prompt.placeholder === void 0 ? {} : { placeholder: prompt.placeholder }
211
- });
212
- default:
213
- return callbacks.onPrompt({
214
- message: prompt.message,
215
- ...prompt.placeholder === void 0 ? {} : { placeholder: prompt.placeholder }
216
- });
217
- }
218
- }
219
- };
220
- if (callbacks.signal) interaction.signal = callbacks.signal;
221
- return interaction;
222
- }
223
- function fromOAuthAuth(id, auth, usesCallbackServer) {
224
- if (!auth) throw new Error(`pi-ai provider "${id}" no longer exposes an OAuth flow`);
225
- return {
226
- id,
227
- name: auth.name,
228
- usesCallbackServer,
229
- async login(callbacks) {
230
- return auth.login(interactionFromLoginCallbacks(callbacks));
231
- },
232
- async refreshToken(credentials) {
233
- return auth.refresh({ ...credentials, type: "oauth" });
234
- },
235
- async getApiKey(credentials) {
236
- const resolved = await auth.toAuth({ ...credentials, type: "oauth" });
237
- if (!resolved.apiKey) {
238
- throw new Error(`OAuth provider "${id}" resolved no API key from the stored credential`);
239
- }
240
- return resolved.apiKey;
241
- }
242
- };
243
- }
244
- var providers = null;
245
- function builtinProviders() {
246
- return [
247
- fromOAuthAuth("anthropic", anthropicProvider().auth.oauth, true),
248
- fromOAuthAuth("openai-codex", openaiCodexProvider().auth.oauth, true),
249
- fromOAuthAuth("github-copilot", githubCopilotProvider().auth.oauth, false)
250
- ];
251
- }
252
- function registry() {
253
- if (!providers) {
254
- providers = new Map(builtinProviders().map((provider) => [provider.id, provider]));
255
- }
256
- return providers;
257
- }
258
- function getEngineEnvApiKey(providerId) {
259
- try {
260
- return piGetEnvApiKey(providerId);
261
- } catch {
262
- return void 0;
263
- }
264
- }
265
- function findEngineEnvKeys(providerId) {
266
- try {
267
- return piFindEnvKeys(providerId);
268
- } catch {
269
- return void 0;
270
- }
271
- }
272
- function getEngineOAuthProvider(providerId) {
273
- return registry().get(providerId);
274
- }
275
- function listEngineOAuthProviders() {
276
- return [...registry().values()];
277
- }
278
- function registerEngineOAuthProvider(provider) {
279
- registry().set(provider.id, provider);
280
- }
281
- var clioOAuthProvidersRegistered = false;
282
- function registerClioOAuthProviders() {
283
- if (clioOAuthProvidersRegistered) return;
284
- clioOAuthProvidersRegistered = true;
285
- registerEngineOAuthProvider(alcfOAuthProvider);
286
- }
287
- async function loginWithEngineOAuthProvider(providerId, callbacks) {
288
- const provider = registry().get(providerId);
289
- if (!provider) throw new Error(`unknown OAuth provider: ${providerId}`);
290
- return provider.login(callbacks);
291
- }
292
- async function refreshEngineOAuthCredentials(providerId, credentials) {
293
- const provider = registry().get(providerId);
294
- if (!provider) throw new Error(`unknown OAuth provider: ${providerId}`);
295
- return provider.refreshToken(credentials);
296
- }
297
- async function getEngineOAuthApiKey(providerId, credentials) {
298
- const provider = registry().get(providerId);
299
- if (!provider) throw new Error(`unknown OAuth provider: ${providerId}`);
300
- return provider.getApiKey(credentials);
301
- }
302
-
303
- // src/domains/providers/auth/storage.ts
304
- import { parse as parseYaml, stringify as stringifyYaml } from "yaml";
305
-
306
- // src/core/resolve-config-value.ts
307
- import { spawnSync } from "node:child_process";
308
- import { homedir } from "node:os";
309
- import { join, resolve, sep } from "node:path";
310
- var commandResultCache = /* @__PURE__ */ new Map();
311
- function env(options) {
312
- return options?.env ?? process.env;
313
- }
314
- function shellCommand(command) {
315
- const isWindows = process.platform === "win32";
316
- const shell = isWindows ? process.env.ComSpec || "cmd.exe" : process.env.SHELL || "/bin/sh";
317
- const args = isWindows ? ["/d", "/s", "/c", command] : ["-lc", command];
318
- const result = spawnSync(shell, args, {
319
- encoding: "utf8",
320
- stdio: ["ignore", "pipe", "ignore"],
321
- timeout: 1e4,
322
- windowsHide: true
323
- });
324
- if (result.error || result.status !== 0) return void 0;
325
- const value = result.stdout.trim();
326
- return value.length > 0 ? value : void 0;
327
- }
328
- function executeCommand(commandConfig) {
329
- if (commandResultCache.has(commandConfig)) return commandResultCache.get(commandConfig);
330
- const value = shellCommand(commandConfig.slice(1));
331
- commandResultCache.set(commandConfig, value);
332
- return value;
333
- }
334
- function warnStaticCommand(config, options) {
335
- options?.onWarning?.({
336
- code: "dynamic-command-in-static-resolution",
337
- message: "bang-prefixed config command left literal by static config value resolver",
338
- command: config.slice(1)
339
- });
340
- }
341
- function expandConfigValue(value, options) {
342
- const sourceEnv = env(options);
343
- return value.replace(/\$(\w+)|\$\{([^}]+)\}/g, (match, bare, braced) => {
344
- const key = bare ?? braced;
345
- if (!key) return match;
346
- return sourceEnv[key] ?? "";
347
- });
348
- }
349
- function expandConfigPath(value, options) {
350
- const cwd = options?.cwd ?? process.cwd();
351
- const expandedEnv = expandConfigValue(value.trim(), options);
352
- let expanded = expandedEnv;
353
- if (expanded === "~") {
354
- expanded = homedir();
355
- } else if (expanded.startsWith(`~${sep}`) || expanded.startsWith("~/")) {
356
- expanded = `${homedir()}${expanded.slice(1)}`;
357
- } else if (expanded.startsWith("~")) {
358
- expanded = join(homedir(), expanded.slice(1));
359
- }
360
- return resolve(cwd, expanded);
361
- }
362
- function resolveStaticConfigValue(config, options) {
363
- if (config.startsWith("!")) warnStaticCommand(config, options);
364
- const sourceEnv = env(options);
365
- const envValue = sourceEnv[config];
366
- if (envValue !== void 0 && envValue.length > 0) return envValue;
367
- const expanded = expandConfigValue(config, options);
368
- return expanded.length > 0 ? expanded : void 0;
369
- }
370
- function resolveDynamicConfigValue(config, options) {
371
- if (config.startsWith("!")) return executeCommand(config);
372
- return resolveStaticConfigValue(config, options);
373
- }
374
-
375
- // src/domains/providers/auth/api-key.ts
376
- function resolveStoredApiKey(key, providerId = "stored-api-key") {
377
- const trimmed = key.trim();
378
- if (trimmed.length === 0) return void 0;
379
- return resolveProviderDynamicSecret(trimmed, { providerId, field: "apiKey" });
380
- }
381
- function normalizeStoredApiKeyRef(key) {
382
- const trimmed = key.trim();
383
- return trimmed.length > 0 ? trimmed : void 0;
384
- }
385
- function resolveProviderDynamicSecret(value, context, options) {
386
- void context;
387
- return resolveDynamicConfigValue(value, options);
388
- }
389
- function resolveEnvironmentApiKey(providerId, explicitEnvVar) {
390
- if (explicitEnvVar) {
391
- const fromExplicit = process.env[explicitEnvVar]?.trim();
392
- if (fromExplicit && fromExplicit.length > 0) {
393
- return { apiKey: fromExplicit, source: explicitEnvVar };
394
- }
395
- }
396
- for (const envVar of findEngineEnvKeys(providerId) ?? []) {
397
- const fromKnownEnv = process.env[envVar]?.trim();
398
- if (fromKnownEnv && fromKnownEnv.length > 0) {
399
- return { apiKey: fromKnownEnv, source: envVar };
400
- }
401
- }
402
- const fromKnownProvider = getEngineEnvApiKey(providerId)?.trim();
403
- if (fromKnownProvider && fromKnownProvider.length > 0) {
404
- return { apiKey: fromKnownProvider, source: null };
405
- }
406
- return { apiKey: void 0, source: explicitEnvVar ?? null };
407
- }
408
-
409
- // src/domains/providers/auth/oauth.ts
410
- function getOAuthProvider(providerId) {
411
- return getEngineOAuthProvider(providerId);
412
- }
413
- function listOAuthProviders() {
414
- return listEngineOAuthProviders();
415
- }
416
- async function loginWithOAuthProvider(providerId, callbacks) {
417
- return loginWithEngineOAuthProvider(providerId, callbacks);
418
- }
419
- async function refreshOAuthCredentials(providerId, credentials) {
420
- return refreshEngineOAuthCredentials(providerId, credentials);
421
- }
422
- function getOAuthApiKey(providerId, credentials) {
423
- return getEngineOAuthApiKey(providerId, credentials);
424
- }
425
-
426
- // src/domains/providers/auth/storage.ts
427
- var AuthStorageDamagedError = class extends Error {
428
- constructor(damage, path) {
429
- super(
430
- [
431
- `refusing to write credentials: ${damage}.`,
432
- path ? `File: ${path}` : null,
433
- "Writing would replace the whole file and lose whatever is stored there.",
434
- "Move the file aside once you have recovered anything you need, then log in again."
435
- ].filter((line) => line !== null).join(" ")
436
- );
437
- this.damage = damage;
438
- this.path = path;
439
- this.name = "AuthStorageDamagedError";
440
- }
441
- damage;
442
- path;
443
- };
444
- function nowIso() {
445
- return (/* @__PURE__ */ new Date()).toISOString();
446
- }
447
- function emptyData() {
448
- return {};
449
- }
450
- function isRecord2(value) {
451
- return typeof value === "object" && value !== null;
452
- }
453
- function toApiKeyCredential(raw) {
454
- if (!isRecord2(raw)) return null;
455
- if (raw.type === "api_key" && typeof raw.key === "string" && raw.key.trim().length > 0) {
456
- return {
457
- type: "api_key",
458
- key: raw.key,
459
- updatedAt: typeof raw.updatedAt === "string" && raw.updatedAt.length > 0 ? raw.updatedAt : nowIso()
460
- };
461
- }
462
- return null;
463
- }
464
- function toOAuthCredential(raw) {
465
- if (!isRecord2(raw)) return null;
466
- if (raw.type === "oauth" && typeof raw.access === "string" && typeof raw.refresh === "string" && typeof raw.expires === "number") {
467
- return {
468
- ...raw,
469
- type: "oauth",
470
- access: raw.access,
471
- refresh: raw.refresh,
472
- expires: raw.expires,
473
- updatedAt: typeof raw.updatedAt === "string" && raw.updatedAt.length > 0 ? raw.updatedAt : nowIso()
474
- };
475
- }
476
- return null;
477
- }
478
- function readStorageData(content) {
479
- if (!content || content.trim().length === 0) return { data: emptyData(), damage: null };
480
- let parsed;
481
- try {
482
- parsed = parseYaml(content);
483
- } catch (error) {
484
- const raw = error instanceof Error ? error.message : String(error);
485
- const detail = (raw.split("\n")[0] ?? raw).trim().replace(/:$/u, "");
486
- return { data: emptyData(), damage: `it is not valid YAML: ${detail}` };
487
- }
488
- if (parsed === null || parsed === void 0) return { data: emptyData(), damage: null };
489
- if (!isRecord2(parsed)) return { data: emptyData(), damage: "its top level is not a mapping" };
490
- if (Object.keys(parsed).length === 0) return { data: emptyData(), damage: null };
491
- if (!("entries" in parsed) && !("version" in parsed)) {
492
- return { data: emptyData(), damage: "it has neither a version nor an entries mapping" };
493
- }
494
- const entries = isRecord2(parsed.entries) ? parsed.entries : null;
495
- if (!entries) return { data: emptyData(), damage: null };
496
- const data = {};
497
- const unread = [];
498
- const version = parsed.version;
499
- if (version === 1 || version === void 0 && Object.values(entries).every((value) => isRecord2(value) && "key" in value)) {
500
- for (const [providerId, value] of Object.entries(entries ?? {})) {
501
- if (!value || typeof value.key !== "string" || value.key.trim().length === 0) {
502
- unread.push(providerId);
503
- continue;
504
- }
505
- data[providerId] = {
506
- type: "api_key",
507
- key: value.key,
508
- updatedAt: typeof value.updatedAt === "string" && value.updatedAt.length > 0 ? value.updatedAt : nowIso()
509
- };
510
- }
511
- return { data, damage: unreadDamage(unread) };
512
- }
513
- for (const [providerId, value] of Object.entries(entries ?? {})) {
514
- const apiKey = toApiKeyCredential(value);
515
- if (apiKey) {
516
- data[providerId] = apiKey;
517
- continue;
518
- }
519
- const oauth = toOAuthCredential(value);
520
- if (oauth) {
521
- data[providerId] = oauth;
522
- continue;
523
- }
524
- unread.push(providerId);
525
- }
526
- return { data, damage: unreadDamage(unread) };
527
- }
528
- function unreadDamage(unread) {
529
- if (unread.length === 0) return null;
530
- return `these entries are stored in a shape this version cannot read: ${[...unread].sort().join(", ")}`;
531
- }
532
- function serializeStorageData(data) {
533
- return stringifyYaml({
534
- version: 2,
535
- entries: data
536
- });
537
- }
538
- function resolveAuthTarget(target, runtime) {
539
- const providerId = target.auth?.oauthProfile?.trim() || target.auth?.apiKeyRef?.trim() || runtime.oauthProviderId || runtime.id;
540
- const authTarget = {
541
- providerId,
542
- targetId: target.id,
543
- runtimeAuth: runtime.auth
544
- };
545
- const explicitEnvVar = target.auth?.apiKeyEnvVar ?? runtime.credentialsEnvVar;
546
- if (explicitEnvVar) authTarget.explicitEnvVar = explicitEnvVar;
547
- return authTarget;
548
- }
549
- function resolveRuntimeAuthTarget(runtime) {
550
- const target = {
551
- providerId: runtime.oauthProviderId ?? runtime.id,
552
- runtimeAuth: runtime.auth
553
- };
554
- if (runtime.credentialsEnvVar) target.explicitEnvVar = runtime.credentialsEnvVar;
555
- return target;
556
- }
557
- function targetRequiresAuth(target, runtime) {
558
- if (runtime.auth === "oauth") return true;
559
- if (runtime.auth !== "api-key") return false;
560
- if (target.auth?.apiKeyEnvVar || target.auth?.apiKeyRef || target.auth?.oauthProfile) return true;
561
- return runtime.tier === "cloud" || Boolean(runtime.credentialsEnvVar);
562
- }
563
- function authNotRequiredStatus(providerId) {
564
- return {
565
- providerId,
566
- available: true,
567
- credentialType: null,
568
- source: "not-required",
569
- detail: null
570
- };
571
- }
572
- var AuthStorage = class {
573
- constructor(backend) {
574
- this.backend = backend;
575
- this.reload();
576
- }
577
- backend;
578
- data = {};
579
- damage = null;
580
- runtimeOverrides = /* @__PURE__ */ new Map();
581
- fallbackResolver;
582
- reload() {
583
- try {
584
- let content;
585
- this.backend.withLock((current) => {
586
- content = current;
587
- return { result: void 0 };
588
- });
589
- const read = readStorageData(content);
590
- this.data = read.data;
591
- this.damage = read.damage;
592
- } catch (error) {
593
- this.data = emptyData();
594
- this.damage = error instanceof Error ? `it could not be read: ${error.message}` : "it could not be read";
595
- }
596
- }
597
- /**
598
- * Why the store on disk could not be fully read, or why the last write to it
599
- * did not land, or null when it is clean. Callers that report connection
600
- * state must consult this, because a damaged store reads as zero credentials
601
- * and is otherwise indistinguishable from having never logged in, and a
602
- * refused write leaves memory claiming a credential that disk does not hold.
603
- */
604
- damageReason() {
605
- return this.damage;
606
- }
607
- persist(providerId, credential) {
608
- try {
609
- this.backend.withLock((current) => {
610
- const read = readStorageData(current);
611
- if (read.damage !== null) {
612
- this.damage = read.damage;
613
- throw new AuthStorageDamagedError(read.damage, this.backend.describe?.());
614
- }
615
- const merged = read.data;
616
- if (credential) merged[providerId] = credential;
617
- else delete merged[providerId];
618
- this.data = merged;
619
- this.damage = null;
620
- return { result: void 0, next: serializeStorageData(merged) };
621
- });
622
- } catch (error) {
623
- if (error instanceof AuthStorageDamagedError) throw error;
624
- this.damage = error instanceof Error ? `it could not be written: ${error.message}` : "it could not be written";
625
- }
626
- }
627
- get(providerId) {
628
- return this.data[providerId];
629
- }
630
- // persist() adopts the merged view on success, so it runs first: assigning
631
- // in-memory ahead of it would leave a credential that reads back as stored
632
- // while the disk write was refused.
633
- set(providerId, credential) {
634
- this.persist(providerId, credential);
635
- this.data[providerId] = credential;
636
- }
637
- setApiKey(providerId, key) {
638
- const resolved = normalizeStoredApiKeyRef(key);
639
- if (!resolved) throw new Error(`auth.setApiKey: empty key for provider=${providerId}`);
640
- this.set(providerId, { type: "api_key", key: resolved, updatedAt: nowIso() });
641
- }
642
- remove(providerId) {
643
- this.persist(providerId, void 0);
644
- delete this.data[providerId];
645
- }
646
- listStored() {
647
- return Object.entries(this.data).map(([providerId, credential]) => ({
648
- providerId,
649
- type: credential.type,
650
- updatedAt: credential.updatedAt
651
- })).sort((a, b) => a.providerId.localeCompare(b.providerId));
652
- }
653
- hasStored(providerId) {
654
- return providerId in this.data;
655
- }
656
- /**
657
- * Install a process-lifetime API key override scoped to a specific target.
658
- * Overrides are keyed by `targetId` (not providerId) so two targets
659
- * sharing a runtime do not share the override. `clio-coder --api-key <key>`
660
- * applies only to the active target, not every target on that provider.
661
- */
662
- setRuntimeOverride(targetId, apiKey) {
663
- if (targetId.length === 0) {
664
- throw new Error("auth.setRuntimeOverride: empty targetId");
665
- }
666
- const resolved = normalizeStoredApiKeyRef(apiKey);
667
- if (!resolved) throw new Error(`auth.setRuntimeOverride: empty key for target=${targetId}`);
668
- this.runtimeOverrides.set(targetId, resolved);
669
- }
670
- clearRuntimeOverride(targetId) {
671
- if (targetId.length === 0) return;
672
- this.runtimeOverrides.delete(targetId);
673
- }
674
- setFallbackResolver(resolver) {
675
- this.fallbackResolver = resolver;
676
- }
677
- status(providerId, opts) {
678
- if (opts?.targetId && this.runtimeOverrides.has(opts.targetId)) {
679
- return {
680
- providerId,
681
- available: true,
682
- credentialType: "api_key",
683
- source: "runtime-override",
684
- detail: providerId
685
- };
686
- }
687
- const stored = this.data[providerId];
688
- if (stored?.type === "api_key") {
689
- return {
690
- providerId,
691
- available: true,
692
- credentialType: "api_key",
693
- source: "stored-api-key",
694
- detail: providerId
695
- };
696
- }
697
- if (stored?.type === "oauth") {
698
- return {
699
- providerId,
700
- available: true,
701
- credentialType: "oauth",
702
- source: "stored-oauth",
703
- detail: providerId
704
- };
705
- }
706
- const env2 = resolveEnvironmentApiKey(providerId, opts?.explicitEnvVar);
707
- if (env2.apiKey) {
708
- return {
709
- providerId,
710
- available: true,
711
- credentialType: "api_key",
712
- source: "environment",
713
- detail: env2.source ?? providerId
714
- };
715
- }
716
- if (opts?.includeFallback !== false) {
717
- const fallback = this.fallbackResolver?.(providerId)?.trim();
718
- if (fallback && fallback.length > 0) {
719
- return {
720
- providerId,
721
- available: true,
722
- credentialType: "api_key",
723
- source: "fallback",
724
- detail: providerId
725
- };
726
- }
727
- }
728
- return {
729
- providerId,
730
- available: false,
731
- credentialType: null,
732
- source: "none",
733
- detail: null
734
- };
735
- }
736
- statusForTarget(target, opts) {
737
- const args = {};
738
- if (opts?.includeFallback !== void 0) args.includeFallback = opts.includeFallback;
739
- if (target.explicitEnvVar) args.explicitEnvVar = target.explicitEnvVar;
740
- if (target.targetId) args.targetId = target.targetId;
741
- return this.status(target.providerId, args);
742
- }
743
- async refreshOAuthCredentialWithLock(providerId) {
744
- return this.backend.withLockAsync(async (current) => {
745
- const read = readStorageData(current);
746
- if (read.damage !== null) {
747
- this.damage = read.damage;
748
- throw new AuthStorageDamagedError(read.damage, this.backend.describe?.());
749
- }
750
- const currentData = read.data;
751
- this.data = currentData;
752
- this.damage = null;
753
- const stored = currentData[providerId];
754
- if (stored?.type !== "oauth") {
755
- return { result: null };
756
- }
757
- if (Date.now() < stored.expires) {
758
- return { result: { apiKey: await getOAuthApiKey(providerId, stored), credential: stored } };
759
- }
760
- const refreshed = await refreshOAuthCredentials(providerId, stored);
761
- const next = {
762
- type: "oauth",
763
- ...refreshed,
764
- updatedAt: nowIso()
765
- };
766
- const merged = { ...currentData, [providerId]: next };
767
- this.data = merged;
768
- return {
769
- result: { apiKey: await getOAuthApiKey(providerId, next), credential: next },
770
- next: serializeStorageData(merged)
771
- };
772
- });
773
- }
774
- async resolveApiKey(providerId, opts) {
775
- if (opts?.targetId) {
776
- const override = this.runtimeOverrides.get(opts.targetId);
777
- if (override) {
778
- return {
779
- providerId,
780
- available: true,
781
- credentialType: "api_key",
782
- source: "runtime-override",
783
- detail: providerId,
784
- apiKey: override
785
- };
786
- }
787
- }
788
- const stored = this.data[providerId];
789
- if (stored?.type === "api_key") {
790
- const apiKey = resolveStoredApiKey(stored.key, providerId);
791
- return {
792
- providerId,
793
- available: true,
794
- credentialType: "api_key",
795
- source: "stored-api-key",
796
- detail: providerId,
797
- ...apiKey ? { apiKey } : {}
798
- };
799
- }
800
- if (stored?.type === "oauth") {
801
- const provider = getOAuthProvider(providerId);
802
- if (!provider) {
803
- return {
804
- providerId,
805
- available: true,
806
- credentialType: "oauth",
807
- source: "stored-oauth",
808
- detail: providerId
809
- };
810
- }
811
- if (Date.now() < stored.expires) {
812
- return {
813
- providerId,
814
- available: true,
815
- credentialType: "oauth",
816
- source: "stored-oauth",
817
- detail: providerId,
818
- apiKey: await getOAuthApiKey(providerId, stored)
819
- };
820
- }
821
- try {
822
- const refreshed = await this.refreshOAuthCredentialWithLock(providerId);
823
- if (refreshed) {
824
- return {
825
- providerId,
826
- available: true,
827
- credentialType: "oauth",
828
- source: "stored-oauth",
829
- detail: providerId,
830
- apiKey: refreshed.apiKey
831
- };
832
- }
833
- } catch {
834
- this.reload();
835
- const updated = this.data[providerId];
836
- if (updated?.type === "oauth" && Date.now() < updated.expires) {
837
- return {
838
- providerId,
839
- available: true,
840
- credentialType: "oauth",
841
- source: "stored-oauth",
842
- detail: providerId,
843
- apiKey: await getOAuthApiKey(providerId, updated)
844
- };
845
- }
846
- }
847
- return {
848
- providerId,
849
- available: true,
850
- credentialType: "oauth",
851
- source: "stored-oauth",
852
- detail: providerId
853
- };
854
- }
855
- const env2 = resolveEnvironmentApiKey(providerId, opts?.explicitEnvVar);
856
- if (env2.apiKey) {
857
- return {
858
- providerId,
859
- available: true,
860
- credentialType: "api_key",
861
- source: "environment",
862
- detail: env2.source ?? providerId,
863
- apiKey: env2.apiKey
864
- };
865
- }
866
- if (opts?.includeFallback !== false) {
867
- const fallback = this.fallbackResolver?.(providerId)?.trim();
868
- if (fallback && fallback.length > 0) {
869
- return {
870
- providerId,
871
- available: true,
872
- credentialType: "api_key",
873
- source: "fallback",
874
- detail: providerId,
875
- apiKey: fallback
876
- };
877
- }
878
- }
879
- return {
880
- providerId,
881
- available: false,
882
- credentialType: null,
883
- source: "none",
884
- detail: null
885
- };
886
- }
887
- resolveForTarget(target, opts) {
888
- const args = {};
889
- if (opts?.includeFallback !== void 0) args.includeFallback = opts.includeFallback;
890
- if (target.explicitEnvVar) args.explicitEnvVar = target.explicitEnvVar;
891
- if (target.targetId) args.targetId = target.targetId;
892
- return this.resolveApiKey(target.providerId, args);
893
- }
894
- async login(providerId, callbacks) {
895
- const credentials = await loginWithOAuthProvider(providerId, callbacks);
896
- this.set(providerId, { type: "oauth", ...credentials, updatedAt: nowIso() });
897
- }
898
- logout(providerId) {
899
- this.remove(providerId);
900
- }
901
- getOAuthProviders() {
902
- return listOAuthProviders().map((provider) => ({ id: provider.id, name: provider.name })).sort((a, b) => a.id.localeCompare(b.id));
903
- }
904
- };
905
-
906
- // src/domains/providers/auth/backend-file.ts
907
- import { chmodSync, closeSync, existsSync, mkdirSync, openSync, readFileSync, statSync, unlinkSync } from "node:fs";
908
- import { open, readFile, stat, unlink } from "node:fs/promises";
909
- import { dirname, join as join2 } from "node:path";
910
- var DEFAULT_LOCK_RETRY_MS = 50;
911
- var DEFAULT_LOCK_STALE_MS = 3e4;
912
- var DEFAULT_LOCK_ATTEMPTS = 200;
913
- function sleepSync(ms) {
914
- Atomics.wait(new Int32Array(new SharedArrayBuffer(4)), 0, 0, ms);
915
- }
916
- function atomicWriteSecret(absPath, contents) {
917
- safeResourceWrite(absPath, contents, { encoding: "utf8", mode: 384 });
918
- chmodSync(absPath, 384);
919
- }
920
- function staleLock(path) {
921
- try {
922
- return Date.now() - statSync(path).mtimeMs > DEFAULT_LOCK_STALE_MS;
923
- } catch {
924
- return false;
925
- }
926
- }
927
- async function staleLockAsync(path) {
928
- try {
929
- const info = await stat(path);
930
- return Date.now() - info.mtimeMs > DEFAULT_LOCK_STALE_MS;
931
- } catch {
932
- return false;
933
- }
934
- }
935
- function authStoragePath() {
936
- return join2(clioConfigDir(), "credentials.yaml");
937
- }
938
- var FileAuthStorageBackend = class {
939
- constructor(path = authStoragePath()) {
940
- this.path = path;
941
- }
942
- path;
943
- describe() {
944
- return this.path;
945
- }
946
- get lockPath() {
947
- return `${this.path}.lock`;
948
- }
949
- ensureParentDir() {
950
- mkdirSync(dirname(this.path), { recursive: true, mode: 448 });
951
- }
952
- ensureFileExists() {
953
- if (existsSync(this.path)) return;
954
- const fd = openSync(this.path, "a", 384);
955
- closeSync(fd);
956
- chmodSync(this.path, 384);
957
- }
958
- releaseSync(fd) {
959
- try {
960
- closeSync(fd);
961
- } finally {
962
- try {
963
- unlinkSync(this.lockPath);
964
- } catch {
965
- }
966
- }
967
- }
968
- async releaseAsync(handle) {
969
- try {
970
- await handle.close();
971
- } finally {
972
- try {
973
- await unlink(this.lockPath);
974
- } catch {
975
- }
976
- }
977
- }
978
- acquireLockSync() {
979
- for (let attempt = 0; attempt < DEFAULT_LOCK_ATTEMPTS; attempt += 1) {
980
- try {
981
- return openSync(this.lockPath, "wx", 384);
982
- } catch (error) {
983
- const code = typeof error === "object" && error !== null && "code" in error ? String(error.code) : "";
984
- if (code !== "EEXIST") throw error;
985
- if (staleLock(this.lockPath)) {
986
- try {
987
- unlinkSync(this.lockPath);
988
- continue;
989
- } catch {
990
- }
991
- }
992
- sleepSync(DEFAULT_LOCK_RETRY_MS);
993
- }
994
- }
995
- throw new Error(`auth backend: failed to acquire lock for ${this.path}`);
996
- }
997
- async acquireLockAsync() {
998
- for (let attempt = 0; attempt < DEFAULT_LOCK_ATTEMPTS; attempt += 1) {
999
- try {
1000
- return await open(this.lockPath, "wx", 384);
1001
- } catch (error) {
1002
- const code = typeof error === "object" && error !== null && "code" in error ? String(error.code) : "";
1003
- if (code !== "EEXIST") throw error;
1004
- if (await staleLockAsync(this.lockPath)) {
1005
- try {
1006
- await unlink(this.lockPath);
1007
- continue;
1008
- } catch {
1009
- }
1010
- }
1011
- await new Promise((resolve2) => setTimeout(resolve2, DEFAULT_LOCK_RETRY_MS));
1012
- }
1013
- }
1014
- throw new Error(`auth backend: failed to acquire lock for ${this.path}`);
1015
- }
1016
- withLock(fn) {
1017
- this.ensureParentDir();
1018
- this.ensureFileExists();
1019
- const fd = this.acquireLockSync();
1020
- try {
1021
- const current = existsSync(this.path) ? readFileSync(this.path, "utf8") : void 0;
1022
- const { result, next } = fn(current);
1023
- if (next !== void 0) {
1024
- atomicWriteSecret(this.path, next);
1025
- }
1026
- return result;
1027
- } finally {
1028
- this.releaseSync(fd);
1029
- }
1030
- }
1031
- async withLockAsync(fn) {
1032
- this.ensureParentDir();
1033
- this.ensureFileExists();
1034
- const handle = await this.acquireLockAsync();
1035
- try {
1036
- const current = existsSync(this.path) ? await readFile(this.path, "utf8") : void 0;
1037
- const { result, next } = await fn(current);
1038
- if (next !== void 0) {
1039
- atomicWriteSecret(this.path, next);
1040
- }
1041
- return result;
1042
- } finally {
1043
- await this.releaseAsync(handle);
1044
- }
1045
- }
1046
- };
1047
-
1048
- // src/domains/providers/auth/index.ts
1049
- function openAuthStorage(path) {
1050
- return new AuthStorage(new FileAuthStorageBackend(path));
1051
- }
1052
-
1053
- export {
1054
- expandConfigPath,
1055
- registerClioOAuthProviders,
1056
- authStoragePath,
1057
- resolveAuthTarget,
1058
- resolveRuntimeAuthTarget,
1059
- targetRequiresAuth,
1060
- authNotRequiredStatus,
1061
- openAuthStorage
1062
- };
1063
- //# sourceMappingURL=chunk-5LDRNKX2.js.map