@iowarp/clio-coder 0.3.0 → 0.3.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (1187) hide show
  1. package/CHANGELOG.md +123 -2
  2. package/CONTRIBUTING.md +23 -23
  3. package/README.md +295 -627
  4. package/dist/acp-BIYHVZIM.js +128 -0
  5. package/dist/{agents-Q4MYPMUW.js → agents-YT6SSRIT.js} +52 -27
  6. package/dist/assets/codewiki.json +1 -0
  7. package/dist/assets/grammars/notices/@vscode__tree-sitter-wasm/LICENSE +21 -0
  8. package/dist/assets/grammars/notices/@vscode__tree-sitter-wasm/cgmanifest.json +16 -0
  9. package/dist/assets/grammars/notices/tree-sitter-wasms/LICENSE +24 -0
  10. package/dist/assets/grammars/tree-sitter-c-sharp.wasm +0 -0
  11. package/dist/assets/grammars/tree-sitter-c.wasm +0 -0
  12. package/dist/assets/grammars/tree-sitter-cpp.wasm +0 -0
  13. package/dist/assets/grammars/tree-sitter-go.wasm +0 -0
  14. package/dist/assets/grammars/tree-sitter-java.wasm +0 -0
  15. package/dist/assets/grammars/tree-sitter-javascript.wasm +0 -0
  16. package/dist/assets/grammars/tree-sitter-python.wasm +0 -0
  17. package/dist/assets/grammars/tree-sitter-ruby.wasm +0 -0
  18. package/dist/assets/grammars/tree-sitter-rust.wasm +0 -0
  19. package/dist/assets/grammars/tree-sitter-tsx.wasm +0 -0
  20. package/dist/assets/grammars/tree-sitter-typescript.wasm +0 -0
  21. package/dist/assets/grammars/tree-sitter.wasm +0 -0
  22. package/dist/{auth-O6HYIJ6J.js → auth-5TWEIYDN.js} +30 -15
  23. package/dist/chunk-2EHAIA3X.js +481 -0
  24. package/dist/{chunk-ME6DNWIU.js → chunk-2IR2NMPA.js} +12 -4
  25. package/dist/chunk-2SFS6XQE.js +122 -0
  26. package/dist/{chunk-KKKPTZLM.js → chunk-2STGEDFV.js} +8 -1
  27. package/dist/chunk-2VTFPG5O.js +48 -0
  28. package/dist/chunk-3I7MS7N2.js +40 -0
  29. package/dist/chunk-3R73A4XB.js +69 -0
  30. package/dist/{chunk-JPOWPFCU.js → chunk-3ZXDFGR5.js} +52 -23
  31. package/dist/chunk-4BJ5BYCE.js +61 -0
  32. package/dist/{chunk-26BZQOAD.js → chunk-4BPJXDWC.js} +161 -260
  33. package/dist/chunk-4KLWL3UC.js +18 -0
  34. package/dist/{chunk-5LDRNKX2.js → chunk-4VP4KH3K.js} +161 -262
  35. package/dist/chunk-4ZG3XFUR.js +77 -0
  36. package/dist/chunk-5B2AEOW5.js +5407 -0
  37. package/dist/chunk-5TSRNF4G.js +510 -0
  38. package/dist/{chunk-WD6AJM35.js → chunk-5UUP6MWO.js} +48 -69
  39. package/dist/{chunk-X3BR7HWV.js → chunk-5WIGXA4T.js} +7 -1
  40. package/dist/chunk-65DEGPJ6.js +52 -0
  41. package/dist/chunk-6EJMN2Y3.js +17 -0
  42. package/dist/chunk-6EJV5X2W.js +16405 -0
  43. package/dist/chunk-6N5PTWMY.js +136 -0
  44. package/dist/chunk-6XLNIQDB.js +27 -0
  45. package/dist/{chunk-XNISANGE.js → chunk-77VKQEHF.js} +171 -74
  46. package/dist/chunk-7CR24IG7.js +242 -0
  47. package/dist/{chunk-UWIJNAOB.js → chunk-7EYHLWU7.js} +907 -638
  48. package/dist/chunk-7MNJORFF.js +22 -0
  49. package/dist/{chunk-JWHCJDCI.js → chunk-A3CYT5EX.js} +257 -79
  50. package/dist/chunk-AGYYIBLL.js +1069 -0
  51. package/dist/chunk-AO4RKG4M.js +277 -0
  52. package/dist/chunk-APJ265NV.js +7410 -0
  53. package/dist/chunk-ARBGF5F7.js +174 -0
  54. package/dist/{chunk-TFSSEXL6.js → chunk-BMEMKKIT.js} +14 -4
  55. package/dist/{chunk-X3NE4WVW.js → chunk-BNAZZHFG.js} +7 -1
  56. package/dist/chunk-CBCAPZAA.js +229 -0
  57. package/dist/{chunk-QV47YRF4.js → chunk-CGKSTWHD.js} +7 -1
  58. package/dist/chunk-CMZWFGD2.js +352 -0
  59. package/dist/chunk-ECH6PKUQ.js +39 -0
  60. package/dist/{chunk-67MTHP2E.js → chunk-ED4KHGC3.js} +13 -5
  61. package/dist/chunk-EKMEHE4H.js +340 -0
  62. package/dist/{chunk-O4EJEDHO.js → chunk-EPVUXGXG.js} +50 -35
  63. package/dist/chunk-FCSXB6T2.js +338 -0
  64. package/dist/chunk-FJ3H4MN5.js +48 -0
  65. package/dist/chunk-FQ4SKYE4.js +29 -0
  66. package/dist/chunk-G2DE3C7R.js +644 -0
  67. package/dist/chunk-G4BMMOKF.js +182 -0
  68. package/dist/{chunk-7BHLZB3A.js → chunk-GGXXDWE4.js} +190 -1218
  69. package/dist/chunk-HC4CLZ2Y.js +68 -0
  70. package/dist/{chunk-E3NYWENM.js → chunk-HFSBBKSQ.js} +55 -61
  71. package/dist/chunk-HKIYEGME.js +30 -0
  72. package/dist/chunk-I4HZDVNP.js +73 -0
  73. package/dist/chunk-IGLFWIYI.js +161 -0
  74. package/dist/chunk-IHXBNWMM.js +137 -0
  75. package/dist/chunk-IKCO5N3L.js +162 -0
  76. package/dist/chunk-IR4CFBFN.js +56 -0
  77. package/dist/{chunk-DXQNI4PC.js → chunk-IWHMRKLL.js} +8 -1
  78. package/dist/{chunk-VOO7NYPP.js → chunk-J5HN4RYU.js} +27 -9
  79. package/dist/{chunk-4UQA7NCT.js → chunk-J5Q24KAG.js} +7 -2
  80. package/dist/{chunk-KBR4MZZR.js → chunk-JVCV3ICN.js} +7 -1
  81. package/dist/chunk-KJ5LWLOE.js +1077 -0
  82. package/dist/chunk-LBMZMYH2.js +285 -0
  83. package/dist/{chunk-3DANZDGR.js → chunk-LBNRH5WM.js} +100 -161
  84. package/dist/{chunk-TKHQ4DGZ.js → chunk-LZSJBIVT.js} +7358 -7414
  85. package/dist/{chunk-UGYAX5YI.js → chunk-M6SHUN7Q.js} +13 -8
  86. package/dist/chunk-MAW544W2.js +1882 -0
  87. package/dist/chunk-MBS4V7ZP.js +217 -0
  88. package/dist/{chunk-2J63S4SF.js → chunk-MFFY33HR.js} +167 -140
  89. package/dist/chunk-MNA4JGU4.js +255 -0
  90. package/dist/chunk-MQSRRFWA.js +3428 -0
  91. package/dist/{chunk-RQDWMVRB.js → chunk-MVVUPGPW.js} +138 -137
  92. package/dist/chunk-OAO4GE4M.js +619 -0
  93. package/dist/chunk-OHHN2SO4.js +5135 -0
  94. package/dist/chunk-OKGUZO2U.js +34 -0
  95. package/dist/{chunk-BBUH4VAA.js → chunk-OOJYHWRB.js} +60 -361
  96. package/dist/{chunk-D5YD55AR.js → chunk-OQ33BKR3.js} +12 -1
  97. package/dist/chunk-OQE5J4C6.js +73 -0
  98. package/dist/{chunk-AMFR5YA3.js → chunk-ORBHGJC5.js} +26 -12
  99. package/dist/chunk-POHLU5DW.js +1186 -0
  100. package/dist/chunk-QKMUKYO7.js +4961 -0
  101. package/dist/{chunk-7RBKDI66.js → chunk-QTYWRVRA.js} +104 -12
  102. package/dist/{chunk-5N2FG33Q.js → chunk-R346GLFC.js} +7 -1
  103. package/dist/chunk-SRF2PJNW.js +184 -0
  104. package/dist/chunk-SST6Z5JA.js +80 -0
  105. package/dist/{chunk-XV4ZJ6ZM.js → chunk-STBPMHSX.js} +473 -1194
  106. package/dist/{chunk-HBU5MTAM.js → chunk-SVNXH4L2.js} +7 -1
  107. package/dist/chunk-T6YILFSB.js +80 -0
  108. package/dist/chunk-TXOTCRLG.js +15 -0
  109. package/dist/chunk-TZTZS7QK.js +227 -0
  110. package/dist/chunk-UOV2BYIW.js +107 -0
  111. package/dist/{chunk-527KG6XR.js → chunk-V4RXGQ5Q.js} +72 -185
  112. package/dist/chunk-VAKQQHWR.js +434 -0
  113. package/dist/chunk-VG7TBQIY.js +128 -0
  114. package/dist/chunk-VJWL6YS5.js +244 -0
  115. package/dist/chunk-WEH5XRJQ.js +32 -0
  116. package/dist/{chunk-VPAWTYLY.js → chunk-WEPFGWHJ.js} +7 -1
  117. package/dist/chunk-WMSVI4G2.js +2095 -0
  118. package/dist/chunk-WVO7V2QY.js +797 -0
  119. package/dist/chunk-X4RCMKVQ.js +641 -0
  120. package/dist/chunk-X75S7HFS.js +374 -0
  121. package/dist/chunk-XN3L4EYL.js +46 -0
  122. package/dist/{chunk-HMYNFFY4.js → chunk-XPLRXC72.js} +7 -2
  123. package/dist/{chunk-PIDUD6M2.js → chunk-YCWGATWI.js} +12 -5
  124. package/dist/chunk-YHZX5GEU.js +193 -0
  125. package/dist/chunk-YXLYO42X.js +91 -0
  126. package/dist/{chunk-UHTSULZS.js → chunk-ZDOOVTXZ.js} +38 -73
  127. package/dist/chunk-ZI647VB5.js +37 -0
  128. package/dist/{chunk-CLJ5HLUD.js → chunk-ZWLZP4ZT.js} +25 -6
  129. package/dist/cli/index.js +70 -56
  130. package/dist/clio-4LY5K2AC.js +25 -0
  131. package/dist/code-nav-7AX6FYE6.js +600 -0
  132. package/dist/codewiki/build-worker.js +66 -0
  133. package/dist/compile-cache-CVJMMODC.js +18 -0
  134. package/dist/{components-JVHMUBEB.js → components-KELWS457.js} +31 -9
  135. package/dist/{config-ZFCDBMDC.js → config-GTLUW2PR.js} +104 -56
  136. package/dist/configure-R6A64DHX.js +42 -0
  137. package/dist/context-5VKGUVJJ.js +866 -0
  138. package/dist/{context-CDXTP2MP.js → context-JFZEJ7W5.js} +21 -13
  139. package/dist/{context-E3KIFVXI.js → context-RW5HC47S.js} +77 -36
  140. package/dist/{context-clear-3F4PLXOS.js → context-clear-6ZHBAZZT.js} +64 -30
  141. package/dist/{context-index-Q7YSYTR3.js → context-index-BZ4UYMTC.js} +36 -24
  142. package/dist/dispatch-runner-VKBRCWQC.js +1997 -0
  143. package/dist/{docs-YIETIWZI.js → docs-2C2LTVT2.js} +32 -13
  144. package/dist/doctor-KI767GSN.js +87 -0
  145. package/dist/{eval-B3KZZESM.js → eval-XSSNATB4.js} +93 -27
  146. package/dist/{evidence-V67CHM35.js → evidence-UA6AWDQQ.js} +55 -27
  147. package/dist/{evolve-YDZSUQYA.js → evolve-QNTFGV6Z.js} +59 -26
  148. package/dist/{extensions-SRG7XCAH.js → extensions-QVDOHDGJ.js} +23 -8
  149. package/dist/{fleet-CA2CRTVG.js → fleet-Q7UOMUSG.js} +173 -56
  150. package/dist/fleet-preflight-DDN536IT.js +26 -0
  151. package/dist/{init-2OZDJE2D.js → init-WBB65ZHQ.js} +79 -34
  152. package/dist/{memory-3PIQQAKX.js → memory-MD3O64RI.js} +57 -28
  153. package/dist/{models-DY35XI7Y.js → models-BZU34YWD.js} +49 -24
  154. package/dist/monitor-MEQA5C3I.js +661 -0
  155. package/dist/{chunk-PS4PFJQP.js → orchestrator-CGFKEP27.js} +22837 -18564
  156. package/dist/{paths-5OMXW7Z4.js → paths-UXLN5YYZ.js} +17 -6
  157. package/dist/preload-P6DGH2PZ.js +13 -0
  158. package/dist/{reset-PIFYNOS3.js → reset-L2FQEE3E.js} +25 -13
  159. package/dist/{run-3VSPP24F.js → run-IV4Q6RLN.js} +115 -63
  160. package/dist/{share-D36RQCXM.js → share-S5BZQC5I.js} +23 -10
  161. package/dist/{skills-F2MRLELY.js → skills-LQEKRDTN.js} +42 -15
  162. package/dist/{skills-eval-E2ZTW4PL.js → skills-eval-3DC4HEWS.js} +90 -45
  163. package/dist/steer-GGWFUJUD.js +77 -0
  164. package/dist/{targets-DZMEZAH4.js → targets-C4SSGQOB.js} +78 -60
  165. package/dist/terminal-lease-IT5JW2NR.js +395 -0
  166. package/dist/{trace-7NYCUI2J.js → trace-PNCASAXC.js} +48 -17
  167. package/dist/tree-sitter-HGKH6LG4.js +4673 -0
  168. package/dist/{uninstall-AD3JWHBB.js → uninstall-FZCQCDKC.js} +19 -8
  169. package/dist/{upgrade-WYYBKGDY.js → upgrade-7TT7SQ3G.js} +66 -24
  170. package/dist/{usage-ULIDAGFF.js → usage-GV4PKT3M.js} +71 -32
  171. package/dist/verify-G6V4D2G7.js +716 -0
  172. package/dist/version-KGEG7EPO.js +21 -0
  173. package/dist/web-fetch-2YHJ3KTG.js +638 -0
  174. package/dist/{wiki-generate-PKFIX6OB.js → wiki-generate-DQF6Z66B.js} +98 -48
  175. package/dist/worker/entry.js +297 -54
  176. package/dist/workspace-G4ZWUIPR.js +22 -0
  177. package/docs/README.md +29 -21
  178. package/docs/acp.md +191 -16
  179. package/docs/alcf-provider.md +1 -1
  180. package/docs/architecture.md +157 -7
  181. package/docs/artifact-placement.md +101 -0
  182. package/docs/artifact-versions.md +1 -1
  183. package/docs/built-in-agents.md +4 -2
  184. package/docs/capacity-and-scheduling.md +1 -1
  185. package/docs/commands-and-modes.md +224 -97
  186. package/docs/config-knobs-audit.md +1 -3
  187. package/docs/configuration-and-targets.md +236 -38
  188. package/docs/context-engine.md +34 -7
  189. package/docs/development-pipeline.md +102 -0
  190. package/docs/dispatch-architecture-rationale.md +1 -1
  191. package/docs/documentation-coverage.md +4 -4
  192. package/docs/documentation-guide.md +3 -3
  193. package/docs/environment-variables.md +15 -6
  194. package/docs/eval-runner.md +3 -3
  195. package/docs/evals-internal.md +2 -2
  196. package/docs/evidence-and-memory.md +10 -2
  197. package/docs/evolution.md +2 -2
  198. package/docs/exit-codes-and-output.md +15 -9
  199. package/docs/extensions-and-sharing.md +25 -18
  200. package/docs/fleet-demo-runbook.md +22 -23
  201. package/docs/fleet-dispatch.md +117 -16
  202. package/docs/git-commit-provenance.md +120 -0
  203. package/docs/glossary.md +107 -15
  204. package/docs/installation-and-lifecycle.md +75 -17
  205. package/docs/middleware-and-components.md +1 -1
  206. package/docs/model-catalog.md +46 -15
  207. package/docs/observability.md +8 -5
  208. package/docs/performance-methodology.md +491 -0
  209. package/docs/pi-boundary.md +72 -0
  210. package/docs/proactive-memory.md +14 -14
  211. package/docs/prompt-envelope-and-tools.md +25 -4
  212. package/docs/provider-adapter-cookbook.md +57 -4
  213. package/docs/release-cut-checklist.md +129 -111
  214. package/docs/safety-model.md +28 -8
  215. package/docs/scientific-validation.md +3 -3
  216. package/docs/session-lifecycle.md +55 -12
  217. package/docs/skills-marketplace.md +12 -8
  218. package/docs/time-conventions.md +101 -0
  219. package/docs/tool-usage.md +6 -5
  220. package/docs/trace-store.md +1 -1
  221. package/docs/troubleshooting.md +10 -7
  222. package/docs/tui-design.md +121 -28
  223. package/docs/worker-dispatch-mechanics.md +3 -3
  224. package/package.json +33 -36
  225. package/skills/README.md +5 -6
  226. package/skills/coding/ast-grep/SKILL.md +136 -0
  227. package/skills/coding/ast-grep/evals.md +56 -0
  228. package/skills/coding/ast-grep/references/rule_reference.md +297 -0
  229. package/skills/coding/coding-standards/SKILL.md +113 -0
  230. package/skills/coding/coding-standards/evals.md +34 -0
  231. package/skills/coding/prototype/SKILL.md +86 -0
  232. package/skills/coding/prototype/evals.md +42 -0
  233. package/skills/coding/prototype/references/LOGIC.md +67 -0
  234. package/skills/coding/prototype/references/UI.md +112 -0
  235. package/skills/coding/tdd/SKILL.md +101 -0
  236. package/skills/coding/tdd/evals.md +41 -0
  237. package/skills/coding/tdd/references/mocking.md +59 -0
  238. package/skills/coding/tdd/references/tests.md +77 -0
  239. package/skills/context/context-handoff/SKILL.md +126 -0
  240. package/skills/context/context-handoff/evals.md +57 -0
  241. package/skills/context/context-handoff/scripts/new-handoff.sh +26 -0
  242. package/skills/context/context-prime/SKILL.md +95 -0
  243. package/skills/context/context-prime/evals.md +54 -0
  244. package/skills/git/file-ticket/SKILL.md +107 -0
  245. package/skills/git/file-ticket/evals.md +54 -0
  246. package/skills/git/fix-issue/SKILL.md +106 -0
  247. package/skills/git/fix-issue/evals.md +71 -0
  248. package/skills/git/ship/SKILL.md +92 -0
  249. package/skills/git/ship/evals.md +72 -0
  250. package/skills/meta/clio-dev/SKILL.md +91 -0
  251. package/skills/meta/clio-dev/evals.md +45 -0
  252. package/skills/meta/clio-test/SKILL.md +130 -0
  253. package/skills/meta/clio-test/evals.md +43 -0
  254. package/skills/meta/clio-test/references/harness.md +97 -0
  255. package/skills/meta/clio-test/references/test-map.md +59 -0
  256. package/skills/meta/credentials/SKILL.md +125 -0
  257. package/skills/meta/credentials/evals.md +104 -0
  258. package/skills/meta/find-skills/SKILL.md +72 -0
  259. package/skills/meta/find-skills/evals.md +47 -0
  260. package/skills/meta/herdr/SKILL.md +127 -0
  261. package/skills/meta/herdr/evals.md +38 -0
  262. package/skills/meta/skill-craft/SKILL.md +102 -0
  263. package/skills/meta/skill-craft/evals.md +41 -0
  264. package/skills/planning/architecture/SKILL.md +129 -0
  265. package/skills/planning/architecture/evals.md +36 -0
  266. package/skills/planning/backlog/SKILL.md +90 -0
  267. package/skills/planning/backlog/evals.md +43 -0
  268. package/skills/planning/prd/SKILL.md +82 -0
  269. package/skills/planning/prd/evals.md +49 -0
  270. package/skills/planning/product-intent/SKILL.md +112 -0
  271. package/skills/planning/product-intent/evals.md +36 -0
  272. package/skills/planning/tech-spec/SKILL.md +115 -0
  273. package/skills/planning/tech-spec/evals.md +47 -0
  274. package/skills/registry.yaml +136 -0
  275. package/skills/research/arxiv-literature/SKILL.md +104 -0
  276. package/skills/research/arxiv-literature/evals.md +58 -0
  277. package/skills/research/experiment-protocol/SKILL.md +122 -0
  278. package/skills/research/experiment-protocol/evals.md +91 -0
  279. package/skills/research/scientific-debugging/SKILL.md +119 -0
  280. package/skills/research/scientific-debugging/evals.md +138 -0
  281. package/skills/research/scientific-modernization/SKILL.md +138 -0
  282. package/skills/research/scientific-modernization/evals.md +84 -0
  283. package/skills/skill-marketplace.json +12 -20
  284. package/skills/workflow/design-council/SKILL.md +139 -0
  285. package/skills/workflow/design-council/evals.md +97 -0
  286. package/skills/workflow/grill-me/SKILL.md +186 -0
  287. package/skills/workflow/grill-me/evals.md +78 -0
  288. package/skills/workflow/workflow-distiller/SKILL.md +136 -0
  289. package/skills/workflow/workflow-distiller/evals.md +107 -0
  290. package/src/cli/acp.ts +115 -0
  291. package/src/cli/agents.ts +60 -0
  292. package/src/cli/args.ts +280 -0
  293. package/src/cli/argv.ts +170 -0
  294. package/src/cli/ask.ts +34 -0
  295. package/src/cli/auth.ts +468 -0
  296. package/src/cli/bootstrap-generate.ts +498 -0
  297. package/src/cli/clio.ts +96 -0
  298. package/src/cli/components.ts +195 -0
  299. package/src/cli/config-inspect.ts +336 -0
  300. package/src/cli/config.ts +72 -0
  301. package/src/cli/configure-interop.ts +67 -0
  302. package/src/cli/configure-layout.ts +172 -0
  303. package/src/cli/configure.ts +1525 -0
  304. package/src/cli/context-clear.ts +76 -0
  305. package/src/cli/context-index.ts +100 -0
  306. package/src/cli/context.ts +321 -0
  307. package/src/cli/default-target.ts +55 -0
  308. package/src/cli/docs.ts +346 -0
  309. package/src/cli/doctor.ts +54 -0
  310. package/src/cli/eval.ts +315 -0
  311. package/src/cli/evidence.ts +225 -0
  312. package/src/cli/evolve.ts +219 -0
  313. package/src/cli/extensions.ts +214 -0
  314. package/src/cli/fleet.ts +868 -0
  315. package/src/cli/index.ts +338 -0
  316. package/src/cli/init.ts +219 -0
  317. package/src/cli/initial-message.ts +47 -0
  318. package/src/cli/internal-dispatch.ts +55 -0
  319. package/src/cli/memory.ts +182 -0
  320. package/src/cli/models.ts +257 -0
  321. package/src/cli/modes/json-stream.ts +121 -0
  322. package/src/cli/modes/jsonl.ts +9 -0
  323. package/src/cli/modes/print.ts +604 -0
  324. package/src/cli/oauth-manual-input.ts +72 -0
  325. package/src/cli/oauth-select.ts +36 -0
  326. package/src/cli/output-guard.ts +48 -0
  327. package/src/cli/paths.ts +44 -0
  328. package/src/cli/provider-target.ts +113 -0
  329. package/src/cli/removal.ts +72 -0
  330. package/src/cli/reset.ts +253 -0
  331. package/src/cli/run.ts +497 -0
  332. package/src/cli/share.ts +243 -0
  333. package/src/cli/shared.ts +60 -0
  334. package/src/cli/skills-eval.ts +1240 -0
  335. package/src/cli/skills.ts +485 -0
  336. package/src/cli/steer-channel.ts +86 -0
  337. package/src/cli/targets.ts +1154 -0
  338. package/src/cli/text-layout.ts +112 -0
  339. package/src/cli/trace.ts +322 -0
  340. package/src/cli/uninstall.ts +405 -0
  341. package/src/cli/upgrade.ts +286 -0
  342. package/src/cli/usage.ts +876 -0
  343. package/src/cli/validate-model.ts +28 -0
  344. package/src/cli/version.ts +7 -0
  345. package/src/cli/wiki-generate.ts +510 -0
  346. package/src/core/agent-environment.ts +7 -0
  347. package/src/core/artifact-paths.ts +43 -0
  348. package/src/core/bash-exec.ts +313 -0
  349. package/src/core/boot-trace.ts +42 -0
  350. package/src/core/bus-events.ts +744 -0
  351. package/src/core/bus-trace.ts +53 -0
  352. package/src/core/c-header-language.ts +265 -0
  353. package/src/core/clio-repo.ts +78 -0
  354. package/src/core/commit-attribution.ts +157 -0
  355. package/src/core/compile-cache.ts +159 -0
  356. package/src/core/config.ts +1722 -0
  357. package/src/core/context-floor.ts +33 -0
  358. package/src/core/defaults.ts +659 -0
  359. package/src/core/domain-loader.ts +177 -0
  360. package/src/core/event-bus.ts +94 -0
  361. package/src/core/file-references.ts +282 -0
  362. package/src/core/git-commit-attribution.ts +362 -0
  363. package/src/core/guardrails.ts +185 -0
  364. package/src/core/headless-permission.ts +21 -0
  365. package/src/core/incomplete-installation.ts +45 -0
  366. package/src/core/init.ts +223 -0
  367. package/src/core/json-payload.ts +58 -0
  368. package/src/core/package-root.ts +54 -0
  369. package/src/core/path-canonical.ts +37 -0
  370. package/src/core/process-identity.ts +41 -0
  371. package/src/core/recent-models.ts +91 -0
  372. package/src/core/residency-protection.ts +56 -0
  373. package/src/core/resolve-config-value.ts +88 -0
  374. package/src/core/response-schema.ts +279 -0
  375. package/src/core/run-overrides.ts +77 -0
  376. package/src/core/safe-exec.ts +205 -0
  377. package/src/core/safe-id.ts +37 -0
  378. package/src/core/safe-resource-write.ts +162 -0
  379. package/src/core/session-routing.ts +339 -0
  380. package/src/core/settings-layers.ts +354 -0
  381. package/src/core/shared-bus.ts +8 -0
  382. package/src/core/shell-quote.ts +26 -0
  383. package/src/core/skill-activation.ts +190 -0
  384. package/src/core/startup-timer.ts +37 -0
  385. package/src/core/state-file-lock.ts +219 -0
  386. package/src/core/termination.ts +275 -0
  387. package/src/core/timers.ts +38 -0
  388. package/src/core/tool-names.ts +65 -0
  389. package/src/core/verification-scripts.ts +13 -0
  390. package/src/core/workspace-files.ts +492 -0
  391. package/src/core/xdg.ts +177 -0
  392. package/src/domains/agents/builtins/architect.md +4 -4
  393. package/src/domains/agents/builtins/coder.md +3 -2
  394. package/src/domains/agents/builtins/debugger.md +1 -1
  395. package/src/domains/agents/builtins/documenter.md +1 -1
  396. package/src/domains/agents/builtins/git-master.md +3 -3
  397. package/src/domains/agents/builtins/provenance.md +1 -1
  398. package/src/domains/agents/builtins/researcher.md +1 -1
  399. package/src/domains/agents/builtins/scout.md +1 -1
  400. package/src/domains/agents/builtins/tester.md +1 -1
  401. package/src/domains/agents/builtins/verifier.md +1 -1
  402. package/src/domains/agents/builtins/wiki-writer.md +1 -1
  403. package/src/domains/agents/catalog.ts +172 -0
  404. package/src/domains/agents/contract.ts +16 -0
  405. package/src/domains/agents/extension.ts +110 -0
  406. package/src/domains/agents/fleet-commands.ts +154 -0
  407. package/src/domains/agents/fleet-contract.ts +797 -0
  408. package/src/domains/agents/frontmatter.ts +40 -0
  409. package/src/domains/agents/index.ts +102 -0
  410. package/src/domains/agents/manifest.ts +6 -0
  411. package/src/domains/agents/recipe-schema.ts +202 -0
  412. package/src/domains/agents/recipe.ts +125 -0
  413. package/src/domains/agents/registry.ts +111 -0
  414. package/src/domains/agents/result-contract.ts +1265 -0
  415. package/src/domains/agents/spec.ts +371 -0
  416. package/src/domains/agents/write-boundary.ts +109 -0
  417. package/src/domains/components/diff.ts +99 -0
  418. package/src/domains/components/hash.ts +21 -0
  419. package/src/domains/components/index.ts +3 -0
  420. package/src/domains/components/scan.ts +304 -0
  421. package/src/domains/components/snapshot.ts +108 -0
  422. package/src/domains/components/types.ts +82 -0
  423. package/src/domains/config/agent-namespace.ts +13 -0
  424. package/src/domains/config/classify.ts +106 -0
  425. package/src/domains/config/contract.ts +22 -0
  426. package/src/domains/config/extension.ts +142 -0
  427. package/src/domains/config/index.ts +23 -0
  428. package/src/domains/config/keybindings.ts +200 -0
  429. package/src/domains/config/manifest.ts +6 -0
  430. package/src/domains/config/watcher.ts +41 -0
  431. package/src/domains/context/adoption.ts +880 -0
  432. package/src/domains/context/bootstrap-prompt.ts +273 -0
  433. package/src/domains/context/bootstrap.ts +1502 -0
  434. package/src/domains/context/clear.ts +91 -0
  435. package/src/domains/context/clio-md.ts +429 -0
  436. package/src/domains/context/codewiki/artifact.ts +400 -0
  437. package/src/domains/context/codewiki/build-worker-protocol.ts +24 -0
  438. package/src/domains/context/codewiki/build-worker.ts +54 -0
  439. package/src/domains/context/codewiki/cmake.ts +356 -0
  440. package/src/domains/context/codewiki/cooperative.ts +46 -0
  441. package/src/domains/context/codewiki/coordinator.ts +182 -0
  442. package/src/domains/context/codewiki/digest.ts +135 -0
  443. package/src/domains/context/codewiki/grammar-assets.ts +33 -0
  444. package/src/domains/context/codewiki/indexer.ts +1529 -0
  445. package/src/domains/context/codewiki/paths.ts +67 -0
  446. package/src/domains/context/codewiki/schema.ts +80 -0
  447. package/src/domains/context/codewiki/tree-sitter.ts +771 -0
  448. package/src/domains/context/contract.ts +68 -0
  449. package/src/domains/context/excluded-dirs.ts +1 -0
  450. package/src/domains/context/extension.ts +358 -0
  451. package/src/domains/context/fingerprint.ts +198 -0
  452. package/src/domains/context/index.ts +154 -0
  453. package/src/domains/context/init-options.ts +69 -0
  454. package/src/domains/context/manifest.ts +6 -0
  455. package/src/domains/context/operator-profile.ts +157 -0
  456. package/src/domains/context/project-metadata.ts +529 -0
  457. package/src/domains/context/project-rules.ts +227 -0
  458. package/src/domains/context/prompt-context.ts +61 -0
  459. package/src/domains/context/refresh.ts +178 -0
  460. package/src/domains/context/runtime.ts +17 -0
  461. package/src/domains/context/sibling-files.ts +10 -0
  462. package/src/domains/context/state.ts +237 -0
  463. package/src/domains/context/wiki/assemble.ts +303 -0
  464. package/src/domains/context/wiki/frontmatter.ts +210 -0
  465. package/src/domains/context/wiki/generate.ts +595 -0
  466. package/src/domains/context/wiki/layout.ts +111 -0
  467. package/src/domains/context/wiki/meta.ts +221 -0
  468. package/src/domains/context/wiki/plan-store.ts +217 -0
  469. package/src/domains/context/wiki/plan.ts +250 -0
  470. package/src/domains/context/wiki/prompts.ts +283 -0
  471. package/src/domains/context/wiki/staleness.ts +198 -0
  472. package/src/domains/dispatch/active-route-planner.ts +168 -0
  473. package/src/domains/dispatch/admission-queue.ts +150 -0
  474. package/src/domains/dispatch/admission.ts +334 -0
  475. package/src/domains/dispatch/agent-candidates.ts +307 -0
  476. package/src/domains/dispatch/agent-ledger-hub.ts +71 -0
  477. package/src/domains/dispatch/agent-ledger-store.ts +257 -0
  478. package/src/domains/dispatch/agent-ledger.ts +212 -0
  479. package/src/domains/dispatch/agent-plan-adapter.ts +85 -0
  480. package/src/domains/dispatch/assignment-events.ts +132 -0
  481. package/src/domains/dispatch/assignment-reconcile.ts +76 -0
  482. package/src/domains/dispatch/assignment-store.ts +162 -0
  483. package/src/domains/dispatch/assignment.ts +278 -0
  484. package/src/domains/dispatch/backoff.ts +59 -0
  485. package/src/domains/dispatch/batch-store.ts +134 -0
  486. package/src/domains/dispatch/batch-tracker.ts +66 -0
  487. package/src/domains/dispatch/capability-match.ts +155 -0
  488. package/src/domains/dispatch/capacity-lease.ts +413 -0
  489. package/src/domains/dispatch/code-step-store.ts +52 -0
  490. package/src/domains/dispatch/code-step.ts +387 -0
  491. package/src/domains/dispatch/contract.ts +278 -0
  492. package/src/domains/dispatch/dedup.ts +133 -0
  493. package/src/domains/dispatch/event-pump.ts +251 -0
  494. package/src/domains/dispatch/execution-handoff.ts +29 -0
  495. package/src/domains/dispatch/execution-plan.ts +328 -0
  496. package/src/domains/dispatch/execution-role.ts +277 -0
  497. package/src/domains/dispatch/execution-scheduler.ts +583 -0
  498. package/src/domains/dispatch/extension.ts +6006 -0
  499. package/src/domains/dispatch/failure-classification.ts +147 -0
  500. package/src/domains/dispatch/fleet-commit-attribution.ts +56 -0
  501. package/src/domains/dispatch/fleet-plan.ts +225 -0
  502. package/src/domains/dispatch/fleet-preflight.ts +394 -0
  503. package/src/domains/dispatch/gate-decisions.ts +1040 -0
  504. package/src/domains/dispatch/gate-role-prompts.ts +58 -0
  505. package/src/domains/dispatch/heartbeat.ts +27 -0
  506. package/src/domains/dispatch/index.ts +137 -0
  507. package/src/domains/dispatch/joint-route-adapter.ts +114 -0
  508. package/src/domains/dispatch/joint-route-resolver.ts +283 -0
  509. package/src/domains/dispatch/manifest.ts +6 -0
  510. package/src/domains/dispatch/orphan-recovery.ts +266 -0
  511. package/src/domains/dispatch/outcome.ts +109 -0
  512. package/src/domains/dispatch/phase-timing.ts +47 -0
  513. package/src/domains/dispatch/placement.ts +202 -0
  514. package/src/domains/dispatch/receipt-findings.ts +255 -0
  515. package/src/domains/dispatch/receipt-integrity.ts +383 -0
  516. package/src/domains/dispatch/recovery-candidates.ts +74 -0
  517. package/src/domains/dispatch/reproducibility.ts +48 -0
  518. package/src/domains/dispatch/reservation-store.ts +501 -0
  519. package/src/domains/dispatch/route-approval.ts +177 -0
  520. package/src/domains/dispatch/route-candidates.ts +57 -0
  521. package/src/domains/dispatch/route-decision.ts +1079 -0
  522. package/src/domains/dispatch/route-facts.ts +187 -0
  523. package/src/domains/dispatch/route-history.ts +238 -0
  524. package/src/domains/dispatch/route-observer.ts +488 -0
  525. package/src/domains/dispatch/route-policy.ts +327 -0
  526. package/src/domains/dispatch/route-quality.ts +256 -0
  527. package/src/domains/dispatch/route-readiness.ts +120 -0
  528. package/src/domains/dispatch/routing-intent.ts +287 -0
  529. package/src/domains/dispatch/run-identity.ts +56 -0
  530. package/src/domains/dispatch/scout-transition.ts +130 -0
  531. package/src/domains/dispatch/state.ts +302 -0
  532. package/src/domains/dispatch/tool-stats.ts +132 -0
  533. package/src/domains/dispatch/transport.ts +210 -0
  534. package/src/domains/dispatch/types.ts +799 -0
  535. package/src/domains/dispatch/validation-grounding.ts +154 -0
  536. package/src/domains/dispatch/validation.ts +721 -0
  537. package/src/domains/dispatch/worker-protocol.ts +275 -0
  538. package/src/domains/dispatch/worker-spawn.ts +585 -0
  539. package/src/domains/dispatch/write-boundary-enforcer.ts +97 -0
  540. package/src/domains/dispatch/write-boundary.ts +426 -0
  541. package/src/domains/eval/artifacts/redact.ts +42 -0
  542. package/src/domains/eval/artifacts/store.ts +173 -0
  543. package/src/domains/eval/compare/compare.ts +33 -0
  544. package/src/domains/eval/compare/gates.ts +66 -0
  545. package/src/domains/eval/compare/thresholds.ts +92 -0
  546. package/src/domains/eval/harness-metrics.ts +62 -0
  547. package/src/domains/eval/index.ts +66 -0
  548. package/src/domains/eval/metrics/chaos-stream.ts +93 -0
  549. package/src/domains/eval/metrics/context.ts +34 -0
  550. package/src/domains/eval/metrics/coverage.ts +21 -0
  551. package/src/domains/eval/metrics/evidence.ts +182 -0
  552. package/src/domains/eval/metrics/fleet-loop-stream.ts +196 -0
  553. package/src/domains/eval/metrics/invariants.ts +736 -0
  554. package/src/domains/eval/metrics/latency.ts +4 -0
  555. package/src/domains/eval/metrics/token-stream.ts +139 -0
  556. package/src/domains/eval/metrics/tokens.ts +51 -0
  557. package/src/domains/eval/metrics/tool-calls.ts +7 -0
  558. package/src/domains/eval/proactive-memory.ts +279 -0
  559. package/src/domains/eval/provenance.ts +35 -0
  560. package/src/domains/eval/report.ts +234 -0
  561. package/src/domains/eval/reports/json.ts +5 -0
  562. package/src/domains/eval/reports/junit.ts +23 -0
  563. package/src/domains/eval/reports/markdown.ts +20 -0
  564. package/src/domains/eval/reports/swe-jsonl.ts +16 -0
  565. package/src/domains/eval/reports/text.ts +25 -0
  566. package/src/domains/eval/run-compare.ts +274 -0
  567. package/src/domains/eval/runner.ts +244 -0
  568. package/src/domains/eval/runners/clio-run.ts +148 -0
  569. package/src/domains/eval/runners/context-index.ts +56 -0
  570. package/src/domains/eval/runners/context-init.ts +203 -0
  571. package/src/domains/eval/runners/external-command.ts +350 -0
  572. package/src/domains/eval/runtime-paths.ts +171 -0
  573. package/src/domains/eval/schema/artifact.ts +75 -0
  574. package/src/domains/eval/schema/suite.ts +235 -0
  575. package/src/domains/eval/schema/validate.ts +339 -0
  576. package/src/domains/eval/store.ts +392 -0
  577. package/src/domains/eval/suites/load.ts +74 -0
  578. package/src/domains/eval/suites/matrix.ts +19 -0
  579. package/src/domains/eval/suites/resolve.ts +44 -0
  580. package/src/domains/eval/suites/run.ts +325 -0
  581. package/src/domains/eval/task-file.ts +186 -0
  582. package/src/domains/eval/types.ts +140 -0
  583. package/src/domains/eval/verifiers/command.ts +27 -0
  584. package/src/domains/eval/verifiers/file-exists.ts +6 -0
  585. package/src/domains/eval/verifiers/patch.ts +22 -0
  586. package/src/domains/eval/workspaces/git.ts +41 -0
  587. package/src/domains/eval/workspaces/local.ts +17 -0
  588. package/src/domains/eval/workspaces/temp-copy.ts +29 -0
  589. package/src/domains/evidence/build.ts +1754 -0
  590. package/src/domains/evidence/eval.ts +605 -0
  591. package/src/domains/evidence/failure-attribution.ts +54 -0
  592. package/src/domains/evidence/finish-contract-map.ts +42 -0
  593. package/src/domains/evidence/index.ts +55 -0
  594. package/src/domains/evidence/provenance.ts +200 -0
  595. package/src/domains/evidence/redact.ts +81 -0
  596. package/src/domains/evidence/store.ts +291 -0
  597. package/src/domains/evidence/types.ts +325 -0
  598. package/src/domains/evolution/SELF_EDIT_GATE.md +91 -0
  599. package/src/domains/evolution/index.ts +26 -0
  600. package/src/domains/evolution/manifest.ts +154 -0
  601. package/src/domains/evolution/validate.ts +304 -0
  602. package/src/domains/extensions/contract.ts +22 -0
  603. package/src/domains/extensions/discovery.ts +193 -0
  604. package/src/domains/extensions/extension.ts +46 -0
  605. package/src/domains/extensions/index.ts +34 -0
  606. package/src/domains/extensions/manager.ts +30 -0
  607. package/src/domains/extensions/manifest.ts +6 -0
  608. package/src/domains/extensions/resources.ts +38 -0
  609. package/src/domains/extensions/state.ts +224 -0
  610. package/src/domains/extensions/types.ts +83 -0
  611. package/src/domains/interop/consent.ts +185 -0
  612. package/src/domains/interop/contract.ts +29 -0
  613. package/src/domains/interop/detect.ts +173 -0
  614. package/src/domains/interop/extension.ts +59 -0
  615. package/src/domains/interop/index.ts +34 -0
  616. package/src/domains/interop/manifest.ts +6 -0
  617. package/src/domains/interop/registry.ts +139 -0
  618. package/src/domains/interop/state.ts +92 -0
  619. package/src/domains/interop/types.ts +109 -0
  620. package/src/domains/lifecycle/contract.ts +11 -0
  621. package/src/domains/lifecycle/doctor.ts +536 -0
  622. package/src/domains/lifecycle/extension.ts +23 -0
  623. package/src/domains/lifecycle/index.ts +21 -0
  624. package/src/domains/lifecycle/install-method.ts +51 -0
  625. package/src/domains/lifecycle/manifest.ts +6 -0
  626. package/src/domains/lifecycle/migrations/2026-08-18-lmstudio-runtime-id.ts +52 -0
  627. package/src/domains/lifecycle/migrations/index.ts +114 -0
  628. package/src/domains/lifecycle/state.ts +93 -0
  629. package/src/domains/lifecycle/upgrade-notice.ts +35 -0
  630. package/src/domains/lifecycle/version.ts +35 -0
  631. package/src/domains/memory/index.ts +128 -0
  632. package/src/domains/memory/operations.ts +143 -0
  633. package/src/domains/memory/prompt-section.ts +86 -0
  634. package/src/domains/memory/proposal.ts +180 -0
  635. package/src/domains/memory/store.ts +163 -0
  636. package/src/domains/memory/task-bank.ts +229 -0
  637. package/src/domains/memory/task-memory-handoff.ts +222 -0
  638. package/src/domains/memory/task-memory-policy.ts +602 -0
  639. package/src/domains/memory/task-memory-status.ts +58 -0
  640. package/src/domains/memory/task-memory-telemetry.ts +346 -0
  641. package/src/domains/memory/task-memory-trace.ts +89 -0
  642. package/src/domains/memory/types.ts +74 -0
  643. package/src/domains/memory/validate.ts +297 -0
  644. package/src/domains/middleware/budget.ts +216 -0
  645. package/src/domains/middleware/contract.ts +35 -0
  646. package/src/domains/middleware/dispatch-nudge.ts +469 -0
  647. package/src/domains/middleware/extension.ts +129 -0
  648. package/src/domains/middleware/hook-receipts.ts +70 -0
  649. package/src/domains/middleware/hooks-io.ts +186 -0
  650. package/src/domains/middleware/hooks.ts +432 -0
  651. package/src/domains/middleware/index.ts +154 -0
  652. package/src/domains/middleware/manifest.ts +6 -0
  653. package/src/domains/middleware/memory-intervention.ts +701 -0
  654. package/src/domains/middleware/rules.ts +42 -0
  655. package/src/domains/middleware/runtime.ts +333 -0
  656. package/src/domains/middleware/skills-reminder.ts +202 -0
  657. package/src/domains/middleware/snapshot.ts +71 -0
  658. package/src/domains/middleware/stalled-turn.ts +71 -0
  659. package/src/domains/middleware/task-board-reminder.ts +87 -0
  660. package/src/domains/middleware/task-nudge.ts +77 -0
  661. package/src/domains/middleware/tool-choice-control.ts +42 -0
  662. package/src/domains/middleware/types.ts +131 -0
  663. package/src/domains/middleware/validate.ts +329 -0
  664. package/src/domains/observability/accountability.ts +67 -0
  665. package/src/domains/observability/contract.ts +168 -0
  666. package/src/domains/observability/cost.ts +206 -0
  667. package/src/domains/observability/evidence-index.ts +123 -0
  668. package/src/domains/observability/extension.ts +281 -0
  669. package/src/domains/observability/index.ts +78 -0
  670. package/src/domains/observability/manifest.ts +10 -0
  671. package/src/domains/observability/metrics.ts +37 -0
  672. package/src/domains/observability/projection.ts +477 -0
  673. package/src/domains/observability/telemetry.ts +89 -0
  674. package/src/domains/observability/trace-store.ts +1454 -0
  675. package/src/domains/prompts/compiler.ts +614 -0
  676. package/src/domains/prompts/contract.ts +46 -0
  677. package/src/domains/prompts/extension.ts +336 -0
  678. package/src/domains/prompts/fragment-loader.ts +138 -0
  679. package/src/domains/prompts/fragments/identity/clio.md +5 -6
  680. package/src/domains/prompts/fragments/identity/docs-routing.md +10 -0
  681. package/src/domains/prompts/fragments/identity/self-awareness.md +19 -0
  682. package/src/domains/prompts/fragments/operating/contract.md +4 -41
  683. package/src/domains/prompts/fragments/operating/delegation.md +42 -0
  684. package/src/domains/prompts/fragments/operating/skills.md +26 -0
  685. package/src/domains/prompts/fragments/operating/worker.md +16 -0
  686. package/src/domains/prompts/fragments/safety/auto-edit.md +5 -5
  687. package/src/domains/prompts/fragments/safety/full-auto.md +3 -3
  688. package/src/domains/prompts/fragments/safety/read-only.md +4 -4
  689. package/src/domains/prompts/fragments/safety/suggest.md +2 -2
  690. package/src/domains/prompts/fragments/wiki/page.md +10 -0
  691. package/src/domains/prompts/fragments/wiki/plan.md +10 -0
  692. package/src/domains/prompts/hash.ts +73 -0
  693. package/src/domains/prompts/index.ts +32 -0
  694. package/src/domains/prompts/manifest.ts +8 -0
  695. package/src/domains/prompts/memory-intervention.ts +57 -0
  696. package/src/domains/prompts/preload.ts +82 -0
  697. package/src/domains/providers/auth/api-key.ts +47 -0
  698. package/src/domains/providers/auth/backend-file.ts +79 -0
  699. package/src/domains/providers/auth/backend-memory.ts +72 -0
  700. package/src/domains/providers/auth/boot-status.ts +65 -0
  701. package/src/domains/providers/auth/index.ts +37 -0
  702. package/src/domains/providers/auth/oauth.ts +37 -0
  703. package/src/domains/providers/auth/storage.ts +726 -0
  704. package/src/domains/providers/capabilities.ts +58 -0
  705. package/src/domains/providers/catalog.ts +162 -0
  706. package/src/domains/providers/contract.ts +162 -0
  707. package/src/domains/providers/credentials.ts +20 -0
  708. package/src/domains/providers/eligibility.ts +24 -0
  709. package/src/domains/providers/errors.ts +64 -0
  710. package/src/domains/providers/extension.ts +548 -0
  711. package/src/domains/providers/index.ts +142 -0
  712. package/src/domains/providers/knowledge-base-path.ts +102 -0
  713. package/src/domains/providers/manifest.ts +6 -0
  714. package/src/domains/providers/model-capabilities.ts +136 -0
  715. package/src/domains/providers/model-discovery.ts +144 -0
  716. package/src/domains/providers/model-family.ts +32 -0
  717. package/src/domains/providers/model-runtime-capabilities.ts +723 -0
  718. package/src/domains/providers/models/local-models/clio-local-coding-targets.yaml +120 -37
  719. package/src/domains/providers/plugins.ts +61 -0
  720. package/src/domains/providers/probe/fingerprint.ts +64 -0
  721. package/src/domains/providers/probe/http.ts +114 -0
  722. package/src/domains/providers/probe/reasoning.ts +111 -0
  723. package/src/domains/providers/registry.ts +187 -0
  724. package/src/domains/providers/resolver.ts +156 -0
  725. package/src/domains/providers/runtime-resolution.ts +720 -0
  726. package/src/domains/providers/runtimes/antigravity/antigravity-code.ts +90 -0
  727. package/src/domains/providers/runtimes/boot-manifest.ts +55 -0
  728. package/src/domains/providers/runtimes/builtins.ts +78 -0
  729. package/src/domains/providers/runtimes/claude/claude-code.ts +38 -0
  730. package/src/domains/providers/runtimes/claude/claude-sdk.ts +38 -0
  731. package/src/domains/providers/runtimes/claude/common.ts +55 -0
  732. package/src/domains/providers/runtimes/cloud/alcf.ts +171 -0
  733. package/src/domains/providers/runtimes/cloud/anthropic-max.ts +71 -0
  734. package/src/domains/providers/runtimes/cloud/anthropic.ts +43 -0
  735. package/src/domains/providers/runtimes/cloud/bedrock.ts +35 -0
  736. package/src/domains/providers/runtimes/cloud/deepseek.ts +50 -0
  737. package/src/domains/providers/runtimes/cloud/google.ts +41 -0
  738. package/src/domains/providers/runtimes/cloud/groq.ts +46 -0
  739. package/src/domains/providers/runtimes/cloud/mistral.ts +46 -0
  740. package/src/domains/providers/runtimes/cloud/openai-codex.ts +49 -0
  741. package/src/domains/providers/runtimes/cloud/openai.ts +46 -0
  742. package/src/domains/providers/runtimes/cloud/openrouter.ts +111 -0
  743. package/src/domains/providers/runtimes/common/lmstudio-http.ts +423 -0
  744. package/src/domains/providers/runtimes/common/local-synth.ts +164 -0
  745. package/src/domains/providers/runtimes/common/probe-helpers.ts +474 -0
  746. package/src/domains/providers/runtimes/local-native/lemonade-anthropic.ts +27 -0
  747. package/src/domains/providers/runtimes/local-native/lemonade-openai.ts +26 -0
  748. package/src/domains/providers/runtimes/local-native/llamacpp-anthropic.ts +88 -0
  749. package/src/domains/providers/runtimes/local-native/llamacpp-completion.ts +207 -0
  750. package/src/domains/providers/runtimes/local-native/llamacpp-embed.ts +180 -0
  751. package/src/domains/providers/runtimes/local-native/llamacpp-rerank.ts +126 -0
  752. package/src/domains/providers/runtimes/local-native/llamacpp.ts +98 -0
  753. package/src/domains/providers/runtimes/local-native/lmstudio.ts +241 -0
  754. package/src/domains/providers/runtimes/local-native/ollama-native.ts +117 -0
  755. package/src/domains/providers/runtimes/local-native/sglang.ts +26 -0
  756. package/src/domains/providers/runtimes/local-native/vllm.ts +27 -0
  757. package/src/domains/providers/runtimes/protocol/anthropic-compat.ts +104 -0
  758. package/src/domains/providers/runtimes/protocol/anthropic-messages.ts +28 -0
  759. package/src/domains/providers/runtimes/protocol/bedrock.ts +26 -0
  760. package/src/domains/providers/runtimes/protocol/google.ts +27 -0
  761. package/src/domains/providers/runtimes/protocol/openai-compat.ts +145 -0
  762. package/src/domains/providers/support.ts +241 -0
  763. package/src/domains/providers/thinking-control-policy.ts +85 -0
  764. package/src/domains/providers/types/capability-flags.ts +114 -0
  765. package/src/domains/providers/types/cost-provenance.ts +7 -0
  766. package/src/domains/providers/types/inference.ts +41 -0
  767. package/src/domains/providers/types/knowledge-base.ts +156 -0
  768. package/src/domains/providers/types/local-model-quirks.ts +216 -0
  769. package/src/domains/providers/types/runtime-descriptor.ts +181 -0
  770. package/src/domains/providers/types/target-descriptor.ts +60 -0
  771. package/src/domains/resources/collision.ts +92 -0
  772. package/src/domains/resources/common-loader.ts +140 -0
  773. package/src/domains/resources/contract.ts +24 -0
  774. package/src/domains/resources/extension.ts +59 -0
  775. package/src/domains/resources/index.ts +74 -0
  776. package/src/domains/resources/loader.ts +85 -0
  777. package/src/domains/resources/manifest.ts +6 -0
  778. package/src/domains/resources/prompts/loader.ts +246 -0
  779. package/src/domains/resources/prompts/substitute.ts +1 -0
  780. package/src/domains/resources/skills/content-hash.ts +107 -0
  781. package/src/domains/resources/skills/evals.ts +175 -0
  782. package/src/domains/resources/skills/install.ts +427 -0
  783. package/src/domains/resources/skills/loader.ts +985 -0
  784. package/src/domains/resources/skills/marketplace.ts +301 -0
  785. package/src/domains/resources/skills/provenance-pin.ts +115 -0
  786. package/src/domains/safety/action-classifier.ts +270 -0
  787. package/src/domains/safety/approval-axis.ts +23 -0
  788. package/src/domains/safety/audit.ts +493 -0
  789. package/src/domains/safety/autonomy.ts +174 -0
  790. package/src/domains/safety/call-target.ts +59 -0
  791. package/src/domains/safety/contract.ts +65 -0
  792. package/src/domains/safety/damage-control.ts +44 -0
  793. package/src/domains/safety/default-path-policy.ts +117 -0
  794. package/src/domains/safety/extension.ts +383 -0
  795. package/src/domains/safety/finish-contract-registration.ts +128 -0
  796. package/src/domains/safety/finish-contract.ts +554 -0
  797. package/src/domains/safety/index.ts +44 -0
  798. package/src/domains/safety/loop-detector.ts +143 -0
  799. package/src/domains/safety/manifest.ts +6 -0
  800. package/src/domains/safety/path-policy.ts +164 -0
  801. package/src/domains/safety/policy-engine.ts +994 -0
  802. package/src/domains/safety/project-policy.ts +391 -0
  803. package/src/domains/safety/protected-artifacts-registration.ts +189 -0
  804. package/src/domains/safety/protected-artifacts.ts +993 -0
  805. package/src/domains/safety/rejection-feedback.ts +102 -0
  806. package/src/domains/safety/rigor.ts +72 -0
  807. package/src/domains/safety/rule-compiler.ts +48 -0
  808. package/src/domains/safety/rule-pack-loader.ts +92 -0
  809. package/src/domains/safety/run-effects.ts +197 -0
  810. package/src/domains/safety/scope.ts +61 -0
  811. package/src/domains/scheduling/budget.ts +35 -0
  812. package/src/domains/scheduling/cluster.ts +175 -0
  813. package/src/domains/scheduling/contract.ts +30 -0
  814. package/src/domains/scheduling/extension.ts +91 -0
  815. package/src/domains/scheduling/index.ts +12 -0
  816. package/src/domains/scheduling/manifest.ts +6 -0
  817. package/src/domains/session/archive-readers.ts +208 -0
  818. package/src/domains/session/checkpoint.ts +38 -0
  819. package/src/domains/session/compaction/auto.ts +89 -0
  820. package/src/domains/session/compaction/branch-summary.ts +187 -0
  821. package/src/domains/session/compaction/compact.ts +493 -0
  822. package/src/domains/session/compaction/cut-point.ts +172 -0
  823. package/src/domains/session/compaction/defaults.ts +34 -0
  824. package/src/domains/session/compaction/mask-observations.ts +265 -0
  825. package/src/domains/session/compaction/session-entries.ts +18 -0
  826. package/src/domains/session/compaction/tokens.ts +148 -0
  827. package/src/domains/session/context-accounting.ts +583 -0
  828. package/src/domains/session/context-ledger.ts +362 -0
  829. package/src/domains/session/contract.ts +159 -0
  830. package/src/domains/session/cwd-fallback.ts +65 -0
  831. package/src/domains/session/decision-board.ts +190 -0
  832. package/src/domains/session/entries.ts +572 -0
  833. package/src/domains/session/extension.ts +403 -0
  834. package/src/domains/session/history.ts +172 -0
  835. package/src/domains/session/index.ts +84 -0
  836. package/src/domains/session/manager.ts +128 -0
  837. package/src/domains/session/manifest.ts +6 -0
  838. package/src/domains/session/migrations/index.ts +27 -0
  839. package/src/domains/session/prompt-manifest.ts +173 -0
  840. package/src/domains/session/protected-artifact-journal.ts +241 -0
  841. package/src/domains/session/protected-artifacts.ts +90 -0
  842. package/src/domains/session/retry.ts +230 -0
  843. package/src/domains/session/session-artifacts.ts +107 -0
  844. package/src/domains/session/task-board.ts +569 -0
  845. package/src/domains/session/tree/active-path.ts +137 -0
  846. package/src/domains/session/tree/fork.ts +159 -0
  847. package/src/domains/session/tree/manager.ts +128 -0
  848. package/src/domains/session/tree/navigator.ts +177 -0
  849. package/src/domains/session/tree/preview.ts +259 -0
  850. package/src/domains/session/usage.ts +148 -0
  851. package/src/domains/session/workspace/git-probe.ts +167 -0
  852. package/src/domains/session/workspace/index.ts +4 -0
  853. package/src/domains/session/workspace/project-type.ts +217 -0
  854. package/src/domains/session/workspace/snapshot.ts +74 -0
  855. package/src/domains/share/archive.ts +684 -0
  856. package/src/domains/share/contract.ts +9 -0
  857. package/src/domains/share/extension.ts +26 -0
  858. package/src/domains/share/index.ts +28 -0
  859. package/src/domains/share/manifest.ts +6 -0
  860. package/src/domains/user-tasks/store.ts +297 -0
  861. package/src/engine/acp/adapter.ts +397 -0
  862. package/src/engine/acp/errors.ts +128 -0
  863. package/src/engine/acp/event-mapper.ts +154 -0
  864. package/src/engine/acp/server.ts +2238 -0
  865. package/src/engine/acp/tool-mediator.ts +686 -0
  866. package/src/engine/acp/transport.ts +775 -0
  867. package/src/engine/acp/types.ts +196 -0
  868. package/src/engine/agent.ts +29 -0
  869. package/src/engine/ai.ts +207 -0
  870. package/src/engine/alcf-oauth.ts +205 -0
  871. package/src/engine/antigravity/subprocess-runtime.ts +205 -0
  872. package/src/engine/api-registry.ts +223 -0
  873. package/src/engine/apis/degraded-inference.ts +95 -0
  874. package/src/engine/apis/index.ts +16 -0
  875. package/src/engine/apis/llamacpp-residency.ts +292 -0
  876. package/src/engine/apis/lmstudio-residency.ts +76 -0
  877. package/src/engine/apis/lmstudio.ts +243 -0
  878. package/src/engine/apis/ollama-native.ts +528 -0
  879. package/src/engine/apis/openai-completions.ts +795 -0
  880. package/src/engine/apis/output-budget.ts +99 -0
  881. package/src/engine/apis/residency-lock.ts +29 -0
  882. package/src/engine/apis/residency.ts +776 -0
  883. package/src/engine/apis/resident-models.ts +42 -0
  884. package/src/engine/apis/sampling-overrides.ts +38 -0
  885. package/src/engine/apis/types.ts +16 -0
  886. package/src/engine/claude/sdk-runtime.ts +685 -0
  887. package/src/engine/claude/session-id.ts +5 -0
  888. package/src/engine/claude/subprocess-runtime.ts +316 -0
  889. package/src/engine/claude/tool-safety.ts +400 -0
  890. package/src/engine/env-api-keys.ts +98 -0
  891. package/src/engine/external-subprocess.ts +23 -0
  892. package/src/engine/gemma-channel-filter.ts +223 -0
  893. package/src/engine/harmony-response.ts +165 -0
  894. package/src/engine/instrumented-tui.ts +192 -0
  895. package/src/engine/loop-guard.ts +1127 -0
  896. package/src/engine/messages.ts +14 -0
  897. package/src/engine/models.ts +42 -0
  898. package/src/engine/oauth.ts +196 -0
  899. package/src/engine/pi-mono-names.ts +13 -0
  900. package/src/engine/prompt-templates.ts +1 -0
  901. package/src/engine/provider-payload.ts +272 -0
  902. package/src/engine/select-list.ts +53 -0
  903. package/src/engine/session.ts +834 -0
  904. package/src/engine/strip-tokenizer-sentinels.ts +125 -0
  905. package/src/engine/truncate.ts +9 -0
  906. package/src/engine/tui.ts +111 -0
  907. package/src/engine/types.ts +63 -0
  908. package/src/engine/worker-events.ts +100 -0
  909. package/src/engine/worker-runtime-capabilities.ts +5 -0
  910. package/src/engine/worker-runtime.ts +1022 -0
  911. package/src/engine/worker-tools.ts +208 -0
  912. package/src/entry/boot-options.ts +50 -0
  913. package/src/entry/orchestrator.ts +2011 -0
  914. package/src/interactive/application-controller.ts +433 -0
  915. package/src/interactive/bus-notices.ts +265 -0
  916. package/src/interactive/chat-loop-messages.ts +626 -0
  917. package/src/interactive/chat-loop-policy.ts +18 -0
  918. package/src/interactive/chat-loop.ts +1090 -0
  919. package/src/interactive/chat-panel.ts +1820 -0
  920. package/src/interactive/chat-renderer.ts +1228 -0
  921. package/src/interactive/clio-editor.ts +161 -0
  922. package/src/interactive/command-fallbacks.ts +23 -0
  923. package/src/interactive/command-output.ts +85 -0
  924. package/src/interactive/context-activity.ts +203 -0
  925. package/src/interactive/context-meter.ts +223 -0
  926. package/src/interactive/context-overlay.ts +246 -0
  927. package/src/interactive/cost-overlay.ts +279 -0
  928. package/src/interactive/dispatch-board.ts +1319 -0
  929. package/src/interactive/dispatch-steering.ts +86 -0
  930. package/src/interactive/editor-bash.ts +46 -0
  931. package/src/interactive/editor-steer.ts +51 -0
  932. package/src/interactive/editor-submit.ts +507 -0
  933. package/src/interactive/export-html/ansi-to-html.ts +161 -0
  934. package/src/interactive/export-html/index.ts +51 -0
  935. package/src/interactive/export-html/template.ts +45 -0
  936. package/src/interactive/export-html/tool-renderer.ts +54 -0
  937. package/src/interactive/external-editor.ts +67 -0
  938. package/src/interactive/follow-up-queue-panel.ts +75 -0
  939. package/src/interactive/footer/dashboard.ts +538 -0
  940. package/src/interactive/footer/notifications.ts +275 -0
  941. package/src/interactive/footer/widgets.ts +1264 -0
  942. package/src/interactive/footer-panel.ts +187 -0
  943. package/src/interactive/format-time.ts +97 -0
  944. package/src/interactive/index.ts +11 -0
  945. package/src/interactive/interactive-application.ts +939 -0
  946. package/src/interactive/interactive-event-projection.ts +385 -0
  947. package/src/interactive/interactive-input-runtime.ts +307 -0
  948. package/src/interactive/interactive-presentation.ts +584 -0
  949. package/src/interactive/interactive-shell.ts +388 -0
  950. package/src/interactive/interactive-slash-runtime.ts +554 -0
  951. package/src/interactive/interactive-subscriptions.ts +111 -0
  952. package/src/interactive/interactive-tickers.ts +183 -0
  953. package/src/interactive/keybinding-manager.ts +496 -0
  954. package/src/interactive/layout.ts +57 -0
  955. package/src/interactive/leader-key.ts +143 -0
  956. package/src/interactive/loop-guard-interrupt.ts +101 -0
  957. package/src/interactive/memory-overlay.ts +280 -0
  958. package/src/interactive/overlay-ask-user-lifecycle.ts +110 -0
  959. package/src/interactive/overlay-auth-lifecycle.ts +308 -0
  960. package/src/interactive/overlay-frame.ts +502 -0
  961. package/src/interactive/overlay-general-openers.ts +274 -0
  962. package/src/interactive/overlay-key-routing.ts +216 -0
  963. package/src/interactive/overlay-lifecycle.ts +426 -0
  964. package/src/interactive/overlay-model-selectors.ts +127 -0
  965. package/src/interactive/overlay-permission-lifecycle.ts +345 -0
  966. package/src/interactive/overlay-resource-openers.ts +112 -0
  967. package/src/interactive/overlay-session-lifecycle.ts +327 -0
  968. package/src/interactive/overlay-transitions.ts +57 -0
  969. package/src/interactive/overlays/agents.ts +69 -0
  970. package/src/interactive/overlays/ask-user.ts +921 -0
  971. package/src/interactive/overlays/auth-dialog.ts +221 -0
  972. package/src/interactive/overlays/context-reset.ts +108 -0
  973. package/src/interactive/overlays/cwd-fallback.ts +141 -0
  974. package/src/interactive/overlays/decisions.ts +300 -0
  975. package/src/interactive/overlays/extensions.ts +54 -0
  976. package/src/interactive/overlays/help-reference.ts +145 -0
  977. package/src/interactive/overlays/interop.ts +139 -0
  978. package/src/interactive/overlays/keybinding-detail.ts +90 -0
  979. package/src/interactive/overlays/list-overlay.ts +606 -0
  980. package/src/interactive/overlays/message-picker.ts +155 -0
  981. package/src/interactive/overlays/model-selector.ts +1109 -0
  982. package/src/interactive/overlays/prompts.ts +72 -0
  983. package/src/interactive/overlays/session-selector-search.ts +31 -0
  984. package/src/interactive/overlays/session-selector.ts +284 -0
  985. package/src/interactive/overlays/settings.ts +3451 -0
  986. package/src/interactive/overlays/skills-hub.ts +237 -0
  987. package/src/interactive/overlays/tree-selector.ts +422 -0
  988. package/src/interactive/permission-overlay.ts +170 -0
  989. package/src/interactive/render-trace.ts +534 -0
  990. package/src/interactive/renderers/branch-summary.ts +86 -0
  991. package/src/interactive/renderers/code-ink.ts +420 -0
  992. package/src/interactive/renderers/compaction-summary.ts +112 -0
  993. package/src/interactive/renderers/diff.ts +137 -0
  994. package/src/interactive/renderers/mermaid.ts +53 -0
  995. package/src/interactive/renderers/notice.ts +28 -0
  996. package/src/interactive/renderers/retry-status.ts +31 -0
  997. package/src/interactive/renderers/structured.ts +89 -0
  998. package/src/interactive/renderers/tool-execution.ts +1357 -0
  999. package/src/interactive/renderers/worker-entry.ts +280 -0
  1000. package/src/interactive/session-last-turn.ts +186 -0
  1001. package/src/interactive/session-switch-settlement.ts +10 -0
  1002. package/src/interactive/session-transcript.ts +105 -0
  1003. package/src/interactive/session-usage-reseed.ts +74 -0
  1004. package/src/interactive/slash-autocomplete.ts +256 -0
  1005. package/src/interactive/slash-commands.ts +1407 -0
  1006. package/src/interactive/slash-spec.ts +424 -0
  1007. package/src/interactive/status/controller.ts +260 -0
  1008. package/src/interactive/status/index.ts +23 -0
  1009. package/src/interactive/status/state-machine.ts +530 -0
  1010. package/src/interactive/status/summary.ts +170 -0
  1011. package/src/interactive/status/types.ts +121 -0
  1012. package/src/interactive/status/verbs.ts +163 -0
  1013. package/src/interactive/status/watchdog.ts +24 -0
  1014. package/src/interactive/stdout-backpressure.ts +99 -0
  1015. package/src/interactive/stream-pacer.ts +530 -0
  1016. package/src/interactive/stream-pacing-policy.ts +66 -0
  1017. package/src/interactive/tasks-overlay.ts +540 -0
  1018. package/src/interactive/terminal-lease.ts +485 -0
  1019. package/src/interactive/theme/components.ts +55 -0
  1020. package/src/interactive/theme/glyphs.ts +70 -0
  1021. package/src/interactive/theme/index.ts +15 -0
  1022. package/src/interactive/theme/labels.ts +88 -0
  1023. package/src/interactive/theme/rules.ts +138 -0
  1024. package/src/interactive/theme/segments.ts +88 -0
  1025. package/src/interactive/theme/tokens.ts +121 -0
  1026. package/src/interactive/thinking-level-policy.ts +6 -0
  1027. package/src/interactive/tool-prose-loop.ts +122 -0
  1028. package/src/interactive/tool-prose-registration.ts +48 -0
  1029. package/src/interactive/turn-context.ts +855 -0
  1030. package/src/interactive/turn-middleware.ts +283 -0
  1031. package/src/interactive/turn-persistence.ts +458 -0
  1032. package/src/interactive/turn-queues.ts +181 -0
  1033. package/src/interactive/turn-recovery.ts +323 -0
  1034. package/src/interactive/turn-runtime.ts +869 -0
  1035. package/src/interactive/turn-state.ts +133 -0
  1036. package/src/interactive/view/artifacts.ts +1452 -0
  1037. package/src/interactive/view/view-overlay.ts +735 -0
  1038. package/src/interactive/welcome-dashboard.ts +537 -0
  1039. package/src/interactive/worker-receipts.ts +143 -0
  1040. package/src/interactive/worker-replay.ts +111 -0
  1041. package/src/interactive/worker-share.ts +100 -0
  1042. package/src/interactive/worker-stream.ts +446 -0
  1043. package/src/interactive/workspace-facts.ts +141 -0
  1044. package/src/tools/agent-tools.ts +402 -0
  1045. package/src/tools/artifact.ts +103 -0
  1046. package/src/tools/ask-user.ts +666 -0
  1047. package/src/tools/bash.ts +204 -0
  1048. package/src/tools/bootstrap.ts +77 -0
  1049. package/src/tools/builtin-tool-catalog.ts +265 -0
  1050. package/src/tools/codewiki/code-nav-surface.ts +29 -0
  1051. package/src/tools/codewiki/code-nav.ts +549 -0
  1052. package/src/tools/codewiki/shared.ts +118 -0
  1053. package/src/tools/compete-worktrees.ts +898 -0
  1054. package/src/tools/context/docs-engine.ts +630 -0
  1055. package/src/tools/context/index.ts +514 -0
  1056. package/src/tools/context/surface.ts +19 -0
  1057. package/src/tools/core-bootstrap.ts +168 -0
  1058. package/src/tools/credential-present.ts +151 -0
  1059. package/src/tools/dispatch-admission.ts +533 -0
  1060. package/src/tools/dispatch-arguments.ts +228 -0
  1061. package/src/tools/dispatch-background.ts +54 -0
  1062. package/src/tools/dispatch-event-text.ts +6 -0
  1063. package/src/tools/dispatch-plan.ts +746 -0
  1064. package/src/tools/dispatch-run-events.ts +238 -0
  1065. package/src/tools/dispatch-runner.ts +2370 -0
  1066. package/src/tools/dispatch-scout-admission.ts +295 -0
  1067. package/src/tools/dispatch-scout.ts +461 -0
  1068. package/src/tools/dispatch-types.ts +77 -0
  1069. package/src/tools/dispatch.ts +244 -0
  1070. package/src/tools/edit-diff.ts +534 -0
  1071. package/src/tools/edit.ts +128 -0
  1072. package/src/tools/executables.ts +22 -0
  1073. package/src/tools/file-mutation-queue.ts +35 -0
  1074. package/src/tools/find.ts +294 -0
  1075. package/src/tools/grep.ts +495 -0
  1076. package/src/tools/ignore-policy.ts +169 -0
  1077. package/src/tools/lazy-tool.ts +60 -0
  1078. package/src/tools/ledger.ts +206 -0
  1079. package/src/tools/ls.ts +110 -0
  1080. package/src/tools/monitor-surface.ts +36 -0
  1081. package/src/tools/monitor.ts +767 -0
  1082. package/src/tools/network-policy.ts +29 -0
  1083. package/src/tools/observation.ts +421 -0
  1084. package/src/tools/observers.ts +99 -0
  1085. package/src/tools/path-utils.ts +79 -0
  1086. package/src/tools/policy.ts +154 -0
  1087. package/src/tools/profiles.ts +108 -0
  1088. package/src/tools/read.ts +173 -0
  1089. package/src/tools/registry.ts +1169 -0
  1090. package/src/tools/result-shaping.ts +204 -0
  1091. package/src/tools/safe-exec.ts +128 -0
  1092. package/src/tools/spawn-hygiene.ts +182 -0
  1093. package/src/tools/steer-surface.ts +17 -0
  1094. package/src/tools/steer.ts +77 -0
  1095. package/src/tools/tasks.ts +265 -0
  1096. package/src/tools/truncate-utf8.ts +17 -0
  1097. package/src/tools/truncate.ts +43 -0
  1098. package/src/tools/verify/frontend.ts +687 -0
  1099. package/src/tools/verify/index.ts +31 -0
  1100. package/src/tools/verify/scripts.ts +108 -0
  1101. package/src/tools/verify/surface.ts +46 -0
  1102. package/src/tools/web-fetch-surface.ts +23 -0
  1103. package/src/tools/web-fetch.ts +759 -0
  1104. package/src/tools/worker-evidence.ts +215 -0
  1105. package/src/tools/write.ts +57 -0
  1106. package/src/utils/exif-orientation.ts +192 -0
  1107. package/src/utils/git.ts +24 -0
  1108. package/src/utils/image-resize.ts +148 -0
  1109. package/src/utils/photon.ts +103 -0
  1110. package/src/worker/control-lane.ts +22 -0
  1111. package/src/worker/entry.ts +294 -0
  1112. package/src/worker/event-projection.ts +56 -0
  1113. package/src/worker/heartbeat.ts +24 -0
  1114. package/src/worker/ledger-mirror.ts +95 -0
  1115. package/src/worker/ndjson.ts +40 -0
  1116. package/src/worker/protocol.ts +529 -0
  1117. package/src/worker/resource-facts.ts +79 -0
  1118. package/src/worker/runtime-registry.ts +12 -0
  1119. package/src/worker/spec-contract.ts +675 -0
  1120. package/src/worker/stdin-demux.ts +316 -0
  1121. package/dist/acp-UMLFVA3F.js +0 -92
  1122. package/dist/chunk-262G75JS.js +0 -35
  1123. package/dist/chunk-6CWDTGUC.js +0 -20
  1124. package/dist/chunk-BYEU76JP.js +0 -899
  1125. package/dist/chunk-GNGDQYDU.js +0 -34688
  1126. package/dist/chunk-GOTUR54M.js +0 -9
  1127. package/dist/chunk-NI4DEJMC.js +0 -88
  1128. package/dist/chunk-TPOCL34A.js +0 -2876
  1129. package/dist/chunk-UU3R62TT.js +0 -128
  1130. package/dist/clio-KIQ5SNDS.js +0 -53
  1131. package/dist/configure-G4E3A2PG.js +0 -27
  1132. package/dist/doctor-M5HJJZOL.js +0 -61
  1133. package/dist/domains/agents/builtins/architect.md +0 -33
  1134. package/dist/domains/agents/builtins/coder.md +0 -31
  1135. package/dist/domains/agents/builtins/context-bootstrap.md +0 -38
  1136. package/dist/domains/agents/builtins/debugger.md +0 -30
  1137. package/dist/domains/agents/builtins/documenter.md +0 -31
  1138. package/dist/domains/agents/builtins/git-master.md +0 -30
  1139. package/dist/domains/agents/builtins/provenance.md +0 -30
  1140. package/dist/domains/agents/builtins/researcher.md +0 -71
  1141. package/dist/domains/agents/builtins/scout.md +0 -42
  1142. package/dist/domains/agents/builtins/tester.md +0 -31
  1143. package/dist/domains/agents/builtins/verifier.md +0 -30
  1144. package/dist/domains/agents/builtins/wiki-writer.md +0 -41
  1145. package/dist/fleet-preflight-CLIAX7YR.js +0 -21
  1146. package/dist/preload-KZVHET2B.js +0 -11
  1147. package/dist/version-ROZ6CZKH.js +0 -16
  1148. package/docs/html/agents_blueprint.html +0 -936
  1149. package/docs/html/alcf_blueprint.html +0 -324
  1150. package/docs/html/architecture_blueprint.html +0 -850
  1151. package/docs/html/commands_blueprint.html +0 -794
  1152. package/docs/html/config_knobs_audit_blueprint.html +0 -178
  1153. package/docs/html/configuration_blueprint.html +0 -1080
  1154. package/docs/html/context_blueprint.html +0 -603
  1155. package/docs/html/documentation_blueprint.html +0 -832
  1156. package/docs/html/environment_blueprint.html +0 -404
  1157. package/docs/html/eval_blueprint.html +0 -743
  1158. package/docs/html/evals_internal_blueprint.html +0 -190
  1159. package/docs/html/evolution_blueprint.html +0 -674
  1160. package/docs/html/extensions_blueprint.html +0 -2065
  1161. package/docs/html/fleet_dispatch_blueprint.html +0 -286
  1162. package/docs/html/index.html +0 -919
  1163. package/docs/html/lifecycle_blueprint.html +0 -723
  1164. package/docs/html/memory_blueprint.html +0 -699
  1165. package/docs/html/middleware_blueprint.html +0 -664
  1166. package/docs/html/models_blueprint.html +0 -2366
  1167. package/docs/html/observability_blueprint.html +0 -683
  1168. package/docs/html/provider_adapter_blueprint.html +0 -245
  1169. package/docs/html/safety_blueprint.html +0 -1386
  1170. package/docs/html/shared.css +0 -571
  1171. package/docs/html/shared.js +0 -143
  1172. package/docs/html/skills_blueprint.html +0 -671
  1173. package/docs/html/soak_blueprint.html +0 -182
  1174. package/docs/html/tool_usage_blueprint.html +0 -350
  1175. package/docs/html/tools_blueprint.html +0 -2249
  1176. package/docs/html/trace_blueprint.html +0 -235
  1177. package/docs/html/tui_design_blueprint.html +0 -314
  1178. package/docs/html/validation_blueprint.html +0 -961
  1179. package/docs/html/worker_dispatch_blueprint.html +0 -231
  1180. package/skills/git/commit-crafting/SKILL.md +0 -79
  1181. package/skills/git/commit-crafting/evals.md +0 -92
  1182. package/skills/git/create-pr/SKILL.md +0 -116
  1183. package/skills/git/create-pr/evals.md +0 -114
  1184. package/skills/git/investigate-issue/SKILL.md +0 -139
  1185. package/skills/git/investigate-issue/evals.md +0 -94
  1186. package/skills/git/review-changes/SKILL.md +0 -103
  1187. package/skills/git/review-changes/evals.md +0 -85
@@ -1,2366 +0,0 @@
1
- <!DOCTYPE html>
2
- <html lang="en">
3
- <head>
4
- <meta charset="UTF-8">
5
- <meta name="viewport" content="width=device-width, initial-scale=1.0">
6
- <title>Clio Coder Model Catalog & Probing Blueprint</title>
7
-
8
- <!-- Fonts -->
9
-
10
- <style>
11
- :root {
12
- --bg-dark: #090d16;
13
- --bg-card: rgba(17, 24, 39, 0.7);
14
- --border-card: rgba(255, 255, 255, 0.08);
15
- --text-main: #f3f4f6;
16
- --text-muted: #9ca3af;
17
- --text-dark: #6b7280;
18
-
19
- /* Glowing Neon Palette */
20
- --color-cyan: #00f0ff;
21
- --color-cyan-rgb: 0, 240, 255;
22
- --color-purple: #bd00ff;
23
- --color-purple-rgb: 189, 0, 255;
24
- --color-emerald: #10b981;
25
- --color-emerald-rgb: 16, 185, 129;
26
- --color-amber: #f59e0b;
27
- --color-amber-rgb: 245, 158, 11;
28
- --color-rose: #ef4444;
29
- --color-rose-rgb: 239, 68, 68;
30
- --color-blue: #3b82f6;
31
- --color-blue-rgb: 59, 130, 246;
32
-
33
- --gradient-cyan-purple: linear-gradient(135deg, var(--color-cyan), var(--color-purple));
34
- --font-sans: "Segoe UI", -apple-system, BlinkMacSystemFont, Roboto, "Helvetica Neue", Arial, sans-serif;
35
- --font-mono: "SFMono-Regular", Consolas, "Liberation Mono", Menlo, monospace;
36
- }
37
-
38
- * {
39
- box-sizing: border-box;
40
- margin: 0;
41
- padding: 0;
42
- }
43
-
44
- body {
45
- background-color: var(--bg-dark);
46
- background-image:
47
- radial-gradient(circle at 5% 15%, rgba(var(--color-cyan-rgb), 0.04) 0%, transparent 35%),
48
- radial-gradient(circle at 95% 85%, rgba(var(--color-purple-rgb), 0.04) 0%, transparent 35%),
49
- radial-gradient(circle at 50% 50%, #0c1220 0%, var(--bg-dark) 100%);
50
- color: var(--text-main);
51
- font-family: var(--font-sans);
52
- min-height: 100vh;
53
- line-height: 1.6;
54
- overflow-x: hidden;
55
- }
56
-
57
- ::-webkit-scrollbar {
58
- width: 8px;
59
- height: 8px;
60
- }
61
- ::-webkit-scrollbar-track {
62
- background: rgba(255, 255, 255, 0.02);
63
- }
64
- ::-webkit-scrollbar-thumb {
65
- background: rgba(255, 255, 255, 0.1);
66
- border-radius: 4px;
67
- }
68
- ::-webkit-scrollbar-thumb:hover {
69
- background: rgba(var(--color-cyan-rgb), 0.3);
70
- }
71
-
72
- .container {
73
- max-width: 1400px;
74
- margin: 0 auto;
75
- padding: 2.5rem 2rem;
76
- }
77
-
78
- /* Header Styling */
79
- header {
80
- text-align: center;
81
- margin-bottom: 3.5rem;
82
- position: relative;
83
- }
84
-
85
- .header-logo {
86
- display: inline-flex;
87
- align-items: center;
88
- justify-content: center;
89
- width: 68px;
90
- height: 68px;
91
- background: rgba(255, 255, 255, 0.03);
92
- border: 1px solid var(--border-card);
93
- border-radius: 16px;
94
- margin-bottom: 1.25rem;
95
- box-shadow: 0 0 25px rgba(var(--color-cyan-rgb), 0.15);
96
- position: relative;
97
- }
98
-
99
- .header-logo::after {
100
- content: '';
101
- position: absolute;
102
- inset: -2px;
103
- border-radius: 18px;
104
- background: var(--gradient-cyan-purple);
105
- z-index: -1;
106
- opacity: 0.35;
107
- filter: blur(4px);
108
- }
109
-
110
- .header-logo img {
111
- width: 78%;
112
- height: 78%;
113
- object-fit: contain;
114
- filter: drop-shadow(0 0 8px rgba(0, 240, 255, 0.35));
115
- }
116
-
117
- h1 {
118
- font-size: 2.5rem;
119
- font-weight: 800;
120
- letter-spacing: -0.04em;
121
- margin-bottom: 0.5rem;
122
- background: linear-gradient(to right, #ffffff, #c7d2fe, var(--color-cyan));
123
- -webkit-background-clip: text;
124
- -webkit-text-fill-color: transparent;
125
- }
126
-
127
- .subtitle {
128
- font-size: 1.1rem;
129
- color: var(--text-muted);
130
- max-width: 700px;
131
- margin: 0 auto 1rem auto;
132
- font-weight: 400;
133
- }
134
-
135
- .meta-badge {
136
- display: inline-flex;
137
- align-items: center;
138
- gap: 0.5rem;
139
- background: rgba(255, 255, 255, 0.04);
140
- border: 1px solid var(--border-card);
141
- padding: 0.35rem 0.85rem;
142
- border-radius: 9999px;
143
- font-size: 0.85rem;
144
- font-family: var(--font-mono);
145
- color: var(--color-cyan);
146
- }
147
-
148
- .meta-badge span {
149
- color: var(--text-muted);
150
- }
151
-
152
- /* Tabs Navigation */
153
- .tabs-nav {
154
- display: flex;
155
- justify-content: center;
156
- gap: 0.75rem;
157
- margin-bottom: 2.5rem;
158
- border-bottom: 1px solid rgba(255, 255, 255, 0.05);
159
- padding-bottom: 1rem;
160
- flex-wrap: wrap;
161
- }
162
-
163
- .tab-btn {
164
- background: rgba(255, 255, 255, 0.02);
165
- border: 1px solid var(--border-card);
166
- color: var(--text-muted);
167
- padding: 0.65rem 1.35rem;
168
- border-radius: 8px;
169
- font-weight: 600;
170
- font-size: 0.95rem;
171
- cursor: pointer;
172
- display: flex;
173
- align-items: center;
174
- gap: 0.5rem;
175
- transition: all 0.2s ease;
176
- }
177
-
178
- .tab-btn:hover {
179
- background: rgba(255, 255, 255, 0.06);
180
- color: var(--text-main);
181
- border-color: rgba(var(--color-cyan-rgb), 0.3);
182
- }
183
-
184
- .tab-btn.active {
185
- background: var(--gradient-cyan-purple);
186
- color: #090d16;
187
- border-color: transparent;
188
- box-shadow: 0 4px 15px rgba(var(--color-cyan-rgb), 0.2);
189
- }
190
-
191
- .tab-pane {
192
- display: none;
193
- animation: fadeIn 0.4s ease-out forwards;
194
- }
195
-
196
- .tab-pane.active {
197
- display: block;
198
- }
199
-
200
- @keyframes fadeIn {
201
- from { opacity: 0; transform: translateY(8px); }
202
- to { opacity: 1; transform: translateY(0); }
203
- }
204
-
205
- /* Glass Cards */
206
- .glass-card {
207
- background: var(--bg-card);
208
- border: 1px solid var(--border-card);
209
- backdrop-filter: blur(16px);
210
- -webkit-backdrop-filter: blur(16px);
211
- border-radius: 16px;
212
- padding: 2.25rem;
213
- box-shadow: 0 10px 30px rgba(0, 0, 0, 0.35);
214
- margin-bottom: 2rem;
215
- }
216
-
217
- .glass-card-title {
218
- font-size: 1.35rem;
219
- font-weight: 700;
220
- margin-bottom: 1.5rem;
221
- display: flex;
222
- align-items: center;
223
- gap: 0.75rem;
224
- border-bottom: 1px solid rgba(255, 255, 255, 0.05);
225
- padding-bottom: 0.75rem;
226
- }
227
-
228
- .glass-card-title svg {
229
- width: 24px;
230
- height: 24px;
231
- stroke: var(--color-cyan);
232
- fill: none;
233
- stroke-width: 2;
234
- }
235
-
236
- /* Grid Layouts */
237
- .simulator-grid {
238
- display: grid;
239
- grid-template-columns: 400px 1fr;
240
- gap: 2rem;
241
- }
242
-
243
- @media (max-width: 1024px) {
244
- .simulator-grid {
245
- grid-template-columns: 1fr;
246
- }
247
- }
248
-
249
- /* Interactive Elements Styling */
250
- .form-group {
251
- margin-bottom: 1.25rem;
252
- display: flex;
253
- flex-direction: column;
254
- gap: 0.5rem;
255
- }
256
-
257
- label {
258
- font-size: 0.8rem;
259
- font-weight: 700;
260
- text-transform: uppercase;
261
- letter-spacing: 0.07em;
262
- color: var(--text-muted);
263
- }
264
-
265
- .form-control {
266
- background: rgba(9, 13, 22, 0.8);
267
- border: 1px solid var(--border-card);
268
- border-radius: 8px;
269
- color: var(--text-main);
270
- padding: 0.75rem;
271
- font-family: var(--font-sans);
272
- font-size: 0.95rem;
273
- transition: all 0.2s ease;
274
- }
275
-
276
- .form-control:focus {
277
- outline: none;
278
- border-color: var(--color-cyan);
279
- box-shadow: 0 0 10px rgba(var(--color-cyan-rgb), 0.15);
280
- }
281
-
282
- select.form-control {
283
- cursor: pointer;
284
- }
285
-
286
- .checkbox-group {
287
- display: flex;
288
- align-items: center;
289
- gap: 0.5rem;
290
- cursor: pointer;
291
- font-size: 0.95rem;
292
- user-select: none;
293
- }
294
-
295
- .checkbox-group input {
296
- width: 18px;
297
- height: 18px;
298
- accent-color: var(--color-cyan);
299
- cursor: pointer;
300
- }
301
-
302
- .slider-container {
303
- display: flex;
304
- align-items: center;
305
- gap: 1rem;
306
- }
307
-
308
- .slider-container input {
309
- flex: 1;
310
- accent-color: var(--color-cyan);
311
- }
312
-
313
- .slider-val {
314
- font-family: var(--font-mono);
315
- font-size: 0.9rem;
316
- min-width: 60px;
317
- text-align: right;
318
- color: var(--color-cyan);
319
- }
320
-
321
- /* Buttons */
322
- .btn {
323
- background: rgba(255, 255, 255, 0.03);
324
- border: 1px solid var(--border-card);
325
- color: var(--text-main);
326
- padding: 0.75rem 1.5rem;
327
- border-radius: 8px;
328
- font-weight: 600;
329
- font-size: 0.95rem;
330
- cursor: pointer;
331
- display: inline-flex;
332
- align-items: center;
333
- justify-content: center;
334
- gap: 0.5rem;
335
- transition: all 0.2s ease;
336
- }
337
-
338
- .btn:hover {
339
- background: rgba(255, 255, 255, 0.08);
340
- border-color: rgba(var(--color-cyan-rgb), 0.3);
341
- }
342
-
343
- .btn-primary {
344
- background: var(--gradient-cyan-purple);
345
- color: #090d16;
346
- font-weight: 700;
347
- border-color: transparent;
348
- box-shadow: 0 4px 15px rgba(var(--color-cyan-rgb), 0.15);
349
- }
350
-
351
- .btn-primary:hover {
352
- box-shadow: 0 4px 20px rgba(var(--color-cyan-rgb), 0.3);
353
- transform: translateY(-1px);
354
- }
355
-
356
- .btn-primary:active {
357
- transform: translateY(0);
358
- }
359
-
360
- /* Live Output Monitor Panel */
361
- .monitor-panel {
362
- background: #060910;
363
- border: 1px solid rgba(255, 255, 255, 0.04);
364
- border-radius: 12px;
365
- padding: 1.5rem;
366
- font-family: var(--font-mono);
367
- font-size: 0.85rem;
368
- display: flex;
369
- flex-direction: column;
370
- gap: 1rem;
371
- min-height: 400px;
372
- position: relative;
373
- }
374
-
375
- .monitor-header {
376
- display: flex;
377
- align-items: center;
378
- justify-content: space-between;
379
- border-bottom: 1px solid rgba(255, 255, 255, 0.06);
380
- padding-bottom: 0.5rem;
381
- color: var(--text-muted);
382
- }
383
-
384
- .monitor-status {
385
- display: flex;
386
- align-items: center;
387
- gap: 0.5rem;
388
- }
389
-
390
- .status-dot {
391
- width: 8px;
392
- height: 8px;
393
- border-radius: 50%;
394
- background: var(--text-dark);
395
- }
396
-
397
- .status-dot.active {
398
- background: var(--color-emerald);
399
- box-shadow: 0 0 8px var(--color-emerald);
400
- animation: pulse 1.5s infinite alternate;
401
- }
402
-
403
- .status-dot.error {
404
- background: var(--color-rose);
405
- box-shadow: 0 0 8px var(--color-rose);
406
- }
407
-
408
- .status-dot.warn {
409
- background: var(--color-amber);
410
- box-shadow: 0 0 8px var(--color-amber);
411
- }
412
-
413
- @keyframes pulse {
414
- from { opacity: 0.4; }
415
- to { opacity: 1; }
416
- }
417
-
418
- .monitor-log {
419
- flex: 1;
420
- overflow-y: auto;
421
- max-height: 250px;
422
- display: flex;
423
- flex-direction: column;
424
- gap: 0.4rem;
425
- color: #38bdf8;
426
- border-bottom: 1px solid rgba(255, 255, 255, 0.04);
427
- padding-bottom: 1rem;
428
- }
429
-
430
- .monitor-log .log-entry {
431
- line-height: 1.4;
432
- }
433
-
434
- .monitor-log .log-time {
435
- color: var(--text-dark);
436
- margin-right: 0.5rem;
437
- }
438
-
439
- .monitor-log .log-info {
440
- color: var(--text-main);
441
- }
442
-
443
- .monitor-log .log-success {
444
- color: var(--color-emerald);
445
- }
446
-
447
- .monitor-log .log-warn {
448
- color: var(--color-amber);
449
- }
450
-
451
- .monitor-log .log-error {
452
- color: var(--color-rose);
453
- }
454
-
455
- /* Badges section */
456
- .capabilities-badges-row {
457
- display: flex;
458
- flex-wrap: wrap;
459
- gap: 1rem;
460
- margin-top: 0.5rem;
461
- }
462
-
463
- .cap-badge {
464
- display: inline-flex;
465
- flex-direction: column;
466
- background: rgba(255, 255, 255, 0.02);
467
- border: 1px solid var(--border-card);
468
- border-radius: 10px;
469
- padding: 0.75rem 1.25rem;
470
- min-width: 110px;
471
- align-items: center;
472
- transition: all 0.3s ease;
473
- position: relative;
474
- overflow: hidden;
475
- opacity: 0.4;
476
- }
477
-
478
- .cap-badge.enabled {
479
- opacity: 1;
480
- background: rgba(255, 255, 255, 0.04);
481
- }
482
-
483
- .cap-badge.cap-chat.enabled {
484
- border-color: rgba(var(--color-cyan-rgb), 0.5);
485
- box-shadow: 0 0 12px rgba(var(--color-cyan-rgb), 0.1);
486
- }
487
-
488
- .cap-badge.cap-tools.enabled {
489
- border-color: rgba(var(--color-purple-rgb), 0.5);
490
- box-shadow: 0 0 12px rgba(var(--color-purple-rgb), 0.1);
491
- }
492
-
493
- .cap-badge.cap-reasoning.enabled {
494
- border-color: rgba(var(--color-amber-rgb), 0.5);
495
- box-shadow: 0 0 12px rgba(var(--color-amber-rgb), 0.1);
496
- }
497
-
498
- .cap-badge.cap-vision.enabled {
499
- border-color: rgba(var(--color-emerald-rgb), 0.5);
500
- box-shadow: 0 0 12px rgba(var(--color-emerald-rgb), 0.1);
501
- }
502
-
503
- .cap-badge .cap-icon {
504
- font-size: 1.5rem;
505
- margin-bottom: 0.25rem;
506
- filter: grayscale(100%);
507
- transition: filter 0.3s ease;
508
- }
509
-
510
- .cap-badge.enabled .cap-icon {
511
- filter: grayscale(0%);
512
- }
513
-
514
- .cap-badge .cap-label {
515
- font-size: 0.75rem;
516
- font-weight: 700;
517
- text-transform: uppercase;
518
- letter-spacing: 0.05em;
519
- color: var(--text-muted);
520
- }
521
-
522
- .cap-badge.enabled .cap-label {
523
- color: var(--text-main);
524
- }
525
-
526
- .cap-badge.enabled.cap-chat .cap-label { color: var(--color-cyan); }
527
- .cap-badge.enabled.cap-tools .cap-label { color: var(--color-purple); }
528
- .cap-badge.enabled.cap-reasoning .cap-label { color: var(--color-amber); }
529
- .cap-badge.enabled.cap-vision .cap-label { color: var(--color-emerald); }
530
-
531
- .cap-badge .cap-status-text {
532
- font-size: 0.65rem;
533
- font-family: var(--font-mono);
534
- margin-top: 0.15rem;
535
- color: var(--text-dark);
536
- }
537
-
538
- .cap-badge.enabled .cap-status-text {
539
- color: var(--text-muted);
540
- }
541
-
542
- /* Json View Box */
543
- .json-wrapper {
544
- position: relative;
545
- margin-top: 1rem;
546
- background: #03060b;
547
- border-radius: 8px;
548
- border: 1px solid rgba(255, 255, 255, 0.05);
549
- padding: 1rem;
550
- overflow-x: auto;
551
- max-height: 250px;
552
- }
553
-
554
- .json-title {
555
- font-size: 0.75rem;
556
- text-transform: uppercase;
557
- color: var(--text-dark);
558
- margin-bottom: 0.5rem;
559
- font-family: var(--font-sans);
560
- font-weight: 700;
561
- }
562
-
563
- .json-code {
564
- color: #e2e8f0;
565
- font-size: 0.8rem;
566
- white-space: pre;
567
- }
568
-
569
- /* Merge Stack Layout */
570
- .merge-stack {
571
- display: flex;
572
- flex-direction: column;
573
- gap: 0.75rem;
574
- margin-top: 1rem;
575
- }
576
-
577
- .merge-layer {
578
- border: 1px solid var(--border-card);
579
- border-radius: 8px;
580
- padding: 1rem 1.25rem;
581
- background: rgba(255, 255, 255, 0.02);
582
- transition: all 0.25s ease;
583
- position: relative;
584
- }
585
-
586
- .merge-layer::before {
587
- content: '';
588
- position: absolute;
589
- left: 0;
590
- top: 0;
591
- bottom: 0;
592
- width: 4px;
593
- background: var(--text-dark);
594
- border-top-left-radius: 8px;
595
- border-bottom-left-radius: 8px;
596
- }
597
-
598
- .merge-layer:hover {
599
- background: rgba(255, 255, 255, 0.04);
600
- border-color: rgba(255, 255, 255, 0.12);
601
- }
602
-
603
- .merge-layer-header {
604
- display: flex;
605
- align-items: center;
606
- justify-content: space-between;
607
- margin-bottom: 0.75rem;
608
- }
609
-
610
- .merge-layer-title {
611
- font-weight: 700;
612
- font-size: 0.95rem;
613
- display: flex;
614
- align-items: center;
615
- gap: 0.5rem;
616
- }
617
-
618
- .merge-layer-num {
619
- font-family: var(--font-mono);
620
- font-size: 0.75rem;
621
- background: rgba(255, 255, 255, 0.05);
622
- border: 1px solid var(--border-card);
623
- padding: 0.1rem 0.4rem;
624
- border-radius: 4px;
625
- color: var(--text-muted);
626
- }
627
-
628
- .merge-layer-inputs {
629
- display: grid;
630
- grid-template-columns: repeat(auto-fit, minmax(110px, 1fr));
631
- gap: 0.75rem;
632
- }
633
-
634
- .merge-layer.layer-1::before { background: var(--color-blue); }
635
- .merge-layer.layer-2::before { background: var(--color-emerald); }
636
- .merge-layer.layer-3::before { background: var(--color-purple); }
637
- .merge-layer.layer-4::before { background: var(--color-cyan); }
638
- .merge-layer.layer-5::before { background: var(--color-amber); }
639
-
640
- .merge-effective-card {
641
- background: radial-gradient(circle at 100% 0%, rgba(var(--color-cyan-rgb), 0.05) 0%, transparent 40%), rgba(0, 240, 255, 0.02);
642
- border: 1px solid rgba(var(--color-cyan-rgb), 0.3);
643
- box-shadow: 0 0 20px rgba(var(--color-cyan-rgb), 0.05);
644
- border-radius: 12px;
645
- padding: 1.5rem;
646
- margin-top: 1rem;
647
- }
648
-
649
- .effective-grid {
650
- display: grid;
651
- grid-template-columns: repeat(auto-fit, minmax(180px, 1fr));
652
- gap: 1.25rem;
653
- margin-top: 1rem;
654
- }
655
-
656
- .effective-cell {
657
- background: rgba(0, 0, 0, 0.3);
658
- border: 1px solid rgba(255, 255, 255, 0.04);
659
- border-radius: 8px;
660
- padding: 0.75rem 1rem;
661
- display: flex;
662
- flex-direction: column;
663
- gap: 0.25rem;
664
- position: relative;
665
- }
666
-
667
- .effective-cell-name {
668
- font-size: 0.75rem;
669
- text-transform: uppercase;
670
- font-weight: 700;
671
- color: var(--text-muted);
672
- }
673
-
674
- .effective-cell-val {
675
- font-size: 1.1rem;
676
- font-weight: 700;
677
- font-family: var(--font-mono);
678
- display: flex;
679
- align-items: center;
680
- gap: 0.4rem;
681
- }
682
-
683
- .effective-cell-source {
684
- font-size: 0.65rem;
685
- color: var(--text-dark);
686
- font-family: var(--font-mono);
687
- }
688
-
689
- /* Resolver Sandbox */
690
- .resolver-container {
691
- display: grid;
692
- grid-template-columns: 1fr 1fr;
693
- gap: 2rem;
694
- }
695
-
696
- @media (max-width: 900px) {
697
- .resolver-container {
698
- grid-template-columns: 1fr;
699
- }
700
- }
701
-
702
- .resolver-input-panel {
703
- display: flex;
704
- flex-direction: column;
705
- gap: 1.5rem;
706
- }
707
-
708
- .resolver-candidates {
709
- background: #05080e;
710
- border: 1px solid var(--border-card);
711
- border-radius: 8px;
712
- padding: 1rem;
713
- max-height: 250px;
714
- overflow-y: auto;
715
- }
716
-
717
- .candidate-row {
718
- display: flex;
719
- justify-content: space-between;
720
- padding: 0.4rem 0.5rem;
721
- border-bottom: 1px solid rgba(255, 255, 255, 0.03);
722
- font-family: var(--font-mono);
723
- font-size: 0.8rem;
724
- }
725
-
726
- .candidate-row:last-child {
727
- border-bottom: none;
728
- }
729
-
730
- .candidate-endpoint { color: var(--color-cyan); }
731
- .candidate-model { color: var(--text-main); }
732
-
733
- .quick-examples {
734
- display: flex;
735
- flex-wrap: wrap;
736
- gap: 0.5rem;
737
- margin-top: 0.5rem;
738
- }
739
-
740
- .example-btn {
741
- background: rgba(255, 255, 255, 0.03);
742
- border: 1px solid var(--border-card);
743
- color: var(--text-muted);
744
- font-size: 0.8rem;
745
- font-family: var(--font-mono);
746
- padding: 0.25rem 0.6rem;
747
- border-radius: 4px;
748
- cursor: pointer;
749
- transition: all 0.2s ease;
750
- }
751
-
752
- .example-btn:hover {
753
- background: rgba(255, 255, 255, 0.08);
754
- color: var(--color-cyan);
755
- border-color: rgba(var(--color-cyan-rgb), 0.3);
756
- }
757
-
758
- .trace-container {
759
- background: #060910;
760
- border: 1px solid var(--border-card);
761
- border-radius: 12px;
762
- padding: 1.5rem;
763
- min-height: 380px;
764
- font-family: var(--font-mono);
765
- display: flex;
766
- flex-direction: column;
767
- gap: 0.75rem;
768
- }
769
-
770
- .trace-step {
771
- padding: 0.6rem 0.8rem;
772
- border-left: 2px solid var(--text-dark);
773
- background: rgba(255, 255, 255, 0.01);
774
- font-size: 0.85rem;
775
- }
776
-
777
- .trace-step.evaluating {
778
- border-left-color: var(--color-blue);
779
- color: #93c5fd;
780
- }
781
-
782
- .trace-step.matched {
783
- border-left-color: var(--color-emerald);
784
- background: rgba(var(--color-emerald-rgb), 0.03);
785
- color: #6ee7b7;
786
- font-weight: 600;
787
- }
788
-
789
- .trace-step.skipped {
790
- border-left-color: var(--text-dark);
791
- color: var(--text-dark);
792
- opacity: 0.6;
793
- }
794
-
795
- .resolver-result-card {
796
- border: 1px solid rgba(var(--color-cyan-rgb), 0.3);
797
- background: rgba(0, 240, 255, 0.01);
798
- border-radius: 8px;
799
- padding: 1rem;
800
- margin-top: auto;
801
- display: flex;
802
- flex-direction: column;
803
- gap: 0.5rem;
804
- }
805
-
806
- .resolver-result-header {
807
- font-size: 0.75rem;
808
- font-weight: 700;
809
- text-transform: uppercase;
810
- color: var(--color-cyan);
811
- letter-spacing: 0.05em;
812
- }
813
-
814
- .resolver-result-val {
815
- font-size: 1.15rem;
816
- font-weight: 700;
817
- display: flex;
818
- align-items: center;
819
- gap: 0.5rem;
820
- }
821
-
822
- .resolver-result-val .badge-mini {
823
- background: rgba(255, 255, 255, 0.05);
824
- border: 1px solid var(--border-card);
825
- padding: 0.15rem 0.4rem;
826
- border-radius: 4px;
827
- font-size: 0.7rem;
828
- color: var(--color-amber);
829
- }
830
-
831
- /* Flowcharts area styling */
832
- .flowchart-container {
833
- display: flex;
834
- flex-direction: column;
835
- gap: 3rem;
836
- margin-top: 1rem;
837
- }
838
-
839
- .svg-wrapper {
840
- width: 100%;
841
- background: rgba(0, 0, 0, 0.2);
842
- border: 1px solid rgba(255, 255, 255, 0.04);
843
- border-radius: 12px;
844
- padding: 1.5rem;
845
- overflow-x: auto;
846
- }
847
-
848
- .svg-wrapper svg {
849
- display: block;
850
- margin: 0 auto;
851
- max-width: 100%;
852
- height: auto;
853
- }
854
-
855
- .svg-title {
856
- font-size: 1.1rem;
857
- font-weight: 600;
858
- margin-bottom: 1rem;
859
- color: var(--color-cyan);
860
- display: flex;
861
- align-items: center;
862
- gap: 0.5rem;
863
- }
864
-
865
- .svg-desc {
866
- font-size: 0.85rem;
867
- color: var(--text-muted);
868
- margin-top: 0.75rem;
869
- max-width: 800px;
870
- }
871
-
872
- /* Footer styling */
873
- footer {
874
- text-align: center;
875
- margin-top: 4rem;
876
- border-top: 1px solid rgba(255, 255, 255, 0.05);
877
- padding-top: 2rem;
878
- color: var(--text-dark);
879
- font-size: 0.85rem;
880
- }
881
-
882
- footer a {
883
- color: var(--text-muted);
884
- text-decoration: none;
885
- transition: color 0.2s ease;
886
- }
887
-
888
- footer a:hover {
889
- color: var(--color-cyan);
890
- }
891
- </style>
892
- </head>
893
- <body>
894
-
895
- <div class="container">
896
- <header>
897
- <div class="header-left">
898
- <div class="header-logo">
899
- <svg viewBox="0 0 64 64" width="48" height="48" role="img" aria-label="Clio Coder logo"><title>Clio Coder logo</title><rect x="8" y="8" width="48" height="48" rx="12" fill="rgba(0,240,255,0.12)" stroke="rgba(0,240,255,0.65)"/><path d="M32 14 16 23l16 9 16-9-16-9Z" fill="none" stroke="#00f0ff" stroke-width="3" stroke-linejoin="round"/><path d="M16 32l16 9 16-9M16 41l16 9 16-9" fill="none" stroke="#bd00ff" stroke-width="3" stroke-linecap="round" stroke-linejoin="round"/></svg>
900
- </div>
901
- <div class="header-title-wrapper">
902
- <h1>Model Catalog & Routing Blueprint</h1>
903
- <p>Interactive visual specifications for model target configurations, runtime detection, dynamic capability badging, and routing resolution in Clio Coder.</p>
904
- <div class="meta-chips-row">
905
- <span class="chip">Source: docs/model-catalog.md</span>
906
- <span class="chip chip-orange">clio-coder docs models</span>
907
- </div>
908
- </div>
909
- </div>
910
- <div class="header-right">
911
- <span class="version-badge">Clio Coder v0.3.0</span>
912
- <a href="index.html" class="back-btn">
913
- <svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><title>Icon</title><line x1="19" y1="12" x2="5" y2="12"></line><polyline points="12 19 5 12 12 5"></polyline></svg>
914
- Dashboard Hub
915
- </a>
916
- </div>
917
- </header>
918
-
919
-
920
- <div class="tabs-nav">
921
- <button type="button" class="tab-btn active" onclick="_switchTab('probe-sim')">
922
- <svg aria-hidden="true" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><title>Icon</title><rect x="2" y="2" width="20" height="8" rx="2" /><rect x="2" y="14" width="20" height="8" rx="2" /><line x1="6" y1="6" x2="6.01" y2="6" /><line x1="6" y1="18" x2="6.01" y2="18" /></svg>
923
- Connection Prober Simulator
924
- </button>
925
- <button type="button" class="tab-btn" onclick="_switchTab('merge-sandbox')">
926
- <svg aria-hidden="true" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><title>Icon</title><path d="M12 2v20M17 5H9.5a3.5 3.5 0 0 0 0 7h5a3.5 3.5 0 0 1 0 7H6" /></svg>
927
- Hierarchical Merge Stack
928
- </button>
929
- <button type="button" class="tab-btn" onclick="_switchTab('resolver-sim')">
930
- <svg aria-hidden="true" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><title>Icon</title><circle cx="11" cy="11" r="8" /><line x1="21" y1="21" x2="16.65" y2="16.65" /></svg>
931
- Target-First Resolver
932
- </button>
933
- <button type="button" class="tab-btn" onclick="_switchTab('thinking-replay')">
934
- <svg aria-hidden="true" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><title>Icon</title><path d="M21 15a2 2 0 0 1-2 2H7l-4 4V5a2 2 0 0 1 2-2h14a2 2 0 0 1 2 2z"/></svg>
935
- Thinking Replay Semantics
936
- </button>
937
- <button type="button" class="tab-btn" onclick="_switchTab('diagrams')">
938
- <svg aria-hidden="true" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><title>Icon</title><path d="M21.21 15.89A10 10 0 1 1 8 2.83" /><path d="M22 12A10 10 0 0 0 12 2v10z" /></svg>
939
- Architecture Flowcharts
940
- </button>
941
- </div>
942
-
943
- <!-- TAB 1: CONNECTION PROBER SIMULATOR -->
944
- <div id="probe-sim" class="tab-pane active">
945
- <div class="simulator-grid">
946
- <div class="control-panel glass-card">
947
- <div class="glass-card-title">
948
- <svg aria-hidden="true" viewBox="0 0 24 24"><title>Icon</title><path d="M12 20v-6M6 20V10M18 20V4" /></svg>
949
- Probe Configuration
950
- </div>
951
-
952
- <div class="form-group">
953
- <label for="probe-target">Target Provider</label>
954
- <select id="probe-target" class="form-control" onchange="onTargetChange()">
955
- <option value="ollama">Ollama (Local Native)</option>
956
- <option value="lmstudio">LM Studio (Local Native)</option>
957
- <option value="openai">OpenAI (Cloud)</option>
958
- <option value="bedrock">Amazon Bedrock (Cloud)</option>
959
- <option value="anthropic-max">Anthropic Max (Claude Pro Subscription)</option>
960
- <option value="openai-codex">OpenAI Codex (ChatGPT Subscription)</option>
961
- <option value="claude-sdk">Claude SDK (Claude Code Subscription)</option>
962
- </select>
963
- </div>
964
-
965
- <div class="form-group">
966
- <label for="probe-url">Endpoint URL</label>
967
- <input type="text" id="probe-url" class="form-control" value="http://localhost:11434">
968
- </div>
969
-
970
- <div class="form-group">
971
- <label for="probe-model">Model ID</label>
972
- <select id="probe-model" class="form-control" onchange="onModelChange()">
973
- <!-- Populated dynamically -->
974
- </select>
975
- </div>
976
-
977
- <div class="form-group">
978
- <label for="probe-latency">Simulated Latency</label>
979
- <div class="slider-container">
980
- <input type="range" id="probe-latency" min="10" max="2000" value="80" oninput="_updateLatencyVal()">
981
- <span id="latency-val" class="slider-val">80 ms</span>
982
- </div>
983
- </div>
984
-
985
- <div class="form-group">
986
- <label for="probe-auth">Auth Key (Optional)</label>
987
- <input type="password" id="probe-auth" class="form-control" placeholder="Not required for Ollama" disabled>
988
- </div>
989
-
990
- <div class="form-group">
991
- <label>Response Outcome</label>
992
- <div style="display: flex; flex-direction: column; gap: 0.5rem; margin-top: 0.25rem;">
993
- <label class="checkbox-group">
994
- <input type="radio" name="outcome" value="success" checked>
995
- <span>HTTP 200 OK (Success)</span>
996
- </label>
997
- <label class="checkbox-group">
998
- <input type="radio" name="outcome" value="unauthorized">
999
- <span>HTTP 401 Unauthorized</span>
1000
- </label>
1001
- <label class="checkbox-group">
1002
- <input type="radio" name="outcome" value="notfound">
1003
- <span>HTTP 404 Not Found</span>
1004
- </label>
1005
- <label class="checkbox-group">
1006
- <input type="radio" name="outcome" value="timeout">
1007
- <span>Timeout / Network Loss</span>
1008
- </label>
1009
- </div>
1010
- </div>
1011
-
1012
- <button type="button" id="run-probe-btn" class="btn btn-primary" onclick="_runConnectionProbe()" style="margin-top: 1rem;">
1013
- Run Connection Probe
1014
- </button>
1015
- </div>
1016
-
1017
- <div class="glass-card" style="display: flex; flex-direction: column; justify-content: space-between;">
1018
- <div class="glass-card-title">
1019
- <svg aria-hidden="true" viewBox="0 0 24 24"><title>Icon</title><rect x="2" y="3" width="20" height="14" rx="2" ry="2" /><line x1="8" y1="21" x2="16" y2="21" /><line x1="12" y1="17" x2="12" y2="21" /></svg>
1020
- Probe Console & capability badges
1021
- </div>
1022
-
1023
- <div class="monitor-panel">
1024
- <div class="monitor-header">
1025
- <span>PROBE_DAEMON_MONITOR</span>
1026
- <div class="monitor-status">
1027
- <span id="probe-status-text">IDLE</span>
1028
- <div id="probe-status-dot" class="status-dot"></div>
1029
- </div>
1030
- </div>
1031
-
1032
- <div id="probe-console-log" class="monitor-log">
1033
- <div class="log-entry"><span class="log-time">[12:53:02]</span><span class="log-info">Probe daemon initialized. Select target and click Run.</span></div>
1034
- </div>
1035
-
1036
- <div>
1037
- <div style="font-size: 0.8rem; font-weight: 700; color: var(--text-muted); text-transform: uppercase; margin-bottom: 0.5rem;">Detected Capabilities Badges</div>
1038
- <div class="capabilities-badges-row">
1039
- <div id="badge-chat" class="cap-badge cap-chat">
1040
- <span class="cap-icon">💬</span>
1041
- <span class="cap-label">Chat</span>
1042
- <span class="cap-status-text" id="status-chat">Disabled</span>
1043
- </div>
1044
- <div id="badge-tools" class="cap-badge cap-tools">
1045
- <span class="cap-icon">🔧</span>
1046
- <span class="cap-label">Tools</span>
1047
- <span class="cap-status-text" id="status-tools">Disabled</span>
1048
- </div>
1049
- <div id="badge-reasoning" class="cap-badge cap-reasoning">
1050
- <span class="cap-icon">🧠</span>
1051
- <span class="cap-label">Reasoning</span>
1052
- <span class="cap-status-text" id="status-reasoning">Disabled</span>
1053
- </div>
1054
- <div id="badge-vision" class="cap-badge cap-vision">
1055
- <span class="cap-icon">👁️</span>
1056
- <span class="cap-label">Vision</span>
1057
- <span class="cap-status-text" id="status-vision">Disabled</span>
1058
- </div>
1059
- </div>
1060
- </div>
1061
- </div>
1062
-
1063
- <div class="json-wrapper">
1064
- <div class="json-title" id="json-box-title">Response Payload</div>
1065
- <div class="json-code" id="response-json-code">{ "status": "no_active_probe" }</div>
1066
- </div>
1067
- </div>
1068
- </div>
1069
- </div>
1070
-
1071
- <!-- TAB 2: HIERARCHICAL CAPABILITY MERGE SANDBOX -->
1072
- <div id="merge-sandbox" class="tab-pane">
1073
- <div class="glass-card">
1074
- <div class="glass-card-title">
1075
- <svg aria-hidden="true" viewBox="0 0 24 24"><title>Icon</title><path d="M12 22s8-4 8-10V5l-8-3-8 3v7c0 6 8 10 8 10z" /></svg>
1076
- Capability Layer Aggregation Sandbox
1077
- </div>
1078
- <p style="margin-bottom: 1.5rem; color: var(--text-muted); font-size: 0.95rem;">
1079
- Clio Coder resolves model capabilities dynamically using a hierarchical overlay stack:
1080
- <code>Runtime Defaults &rarr; Catalog Model &rarr; Knowledge Base (YAML quirks) &rarr; Live Probe &rarr; User overrides</code>.
1081
- Modify individual properties on each layer below to see how the final effective capability and its source attribution update in real-time.
1082
- </p>
1083
-
1084
- <div class="merge-stack">
1085
- <!-- Layer 1: Runtime Defaults -->
1086
- <div class="merge-layer layer-1">
1087
- <div class="merge-layer-header">
1088
- <span class="merge-layer-title"><span class="merge-layer-num">1</span> Runtime Base Defaults (Ollama / OpenAI Base)</span>
1089
- </div>
1090
- <div class="merge-layer-inputs">
1091
- <label class="checkbox-group">
1092
- <input type="checkbox" id="layer1-chat" checked onchange="recalculateMergeStack()">
1093
- <span>Chat</span>
1094
- </label>
1095
- <label class="checkbox-group">
1096
- <input type="checkbox" id="layer1-tools" checked onchange="recalculateMergeStack()">
1097
- <span>Tools</span>
1098
- </label>
1099
- <label class="checkbox-group">
1100
- <input type="checkbox" id="layer1-reasoning" onchange="recalculateMergeStack()">
1101
- <span>Reasoning</span>
1102
- </label>
1103
- <label class="checkbox-group">
1104
- <input type="checkbox" id="layer1-vision" onchange="recalculateMergeStack()">
1105
- <span>Vision</span>
1106
- </label>
1107
- <div class="form-group" style="margin-bottom: 0;">
1108
- <label style="font-size:0.7rem;">Context Window</label>
1109
- <input type="number" id="layer1-context" class="form-control" value="8192" style="padding: 0.35rem; font-size: 0.8rem;" oninput="recalculateMergeStack()">
1110
- </div>
1111
- </div>
1112
- </div>
1113
-
1114
- <!-- Layer 2: Catalog Model -->
1115
- <div class="merge-layer layer-2">
1116
- <div class="merge-layer-header">
1117
- <span class="merge-layer-title"><span class="merge-layer-num">2</span> Catalog Definitions (pi-ai catalogs)</span>
1118
- </div>
1119
- <div class="merge-layer-inputs">
1120
- <label class="checkbox-group">
1121
- <input type="checkbox" id="layer2-chat" checked onchange="recalculateMergeStack()">
1122
- <span>Chat</span>
1123
- </label>
1124
- <label class="checkbox-group">
1125
- <input type="checkbox" id="layer2-tools" checked onchange="recalculateMergeStack()">
1126
- <span>Tools</span>
1127
- </label>
1128
- <label class="checkbox-group">
1129
- <input type="checkbox" id="layer2-reasoning" onchange="recalculateMergeStack()">
1130
- <span>Reasoning</span>
1131
- </label>
1132
- <label class="checkbox-group">
1133
- <input type="checkbox" id="layer2-vision" onchange="recalculateMergeStack()">
1134
- <span>Vision</span>
1135
- </label>
1136
- <div class="form-group" style="margin-bottom: 0;">
1137
- <label style="font-size:0.7rem;">Context Window</label>
1138
- <input type="number" id="layer2-context" class="form-control" value="16384" style="padding: 0.35rem; font-size: 0.8rem;" oninput="recalculateMergeStack()">
1139
- </div>
1140
- </div>
1141
- </div>
1142
-
1143
- <!-- Layer 3: Knowledge Base YAML -->
1144
- <div class="merge-layer layer-3">
1145
- <div class="merge-layer-header">
1146
- <span class="merge-layer-title"><span class="merge-layer-num">3</span> Knowledge Base Entry (clio-local-coding-targets.yaml)</span>
1147
- <label class="checkbox-group" style="font-size:0.8rem; color:var(--color-purple);">
1148
- <input type="checkbox" id="layer3-active" checked onchange="recalculateMergeStack()">
1149
- <span>Enable Layer</span>
1150
- </label>
1151
- </div>
1152
- <div class="merge-layer-inputs" id="layer3-container">
1153
- <label class="checkbox-group">
1154
- <input type="checkbox" id="layer3-chat" checked onchange="recalculateMergeStack()">
1155
- <span>Chat</span>
1156
- </label>
1157
- <label class="checkbox-group">
1158
- <input type="checkbox" id="layer3-tools" checked onchange="recalculateMergeStack()">
1159
- <span>Tools</span>
1160
- </label>
1161
- <label class="checkbox-group">
1162
- <input type="checkbox" id="layer3-reasoning" checked onchange="recalculateMergeStack()">
1163
- <span>Reasoning</span>
1164
- </label>
1165
- <label class="checkbox-group">
1166
- <input type="checkbox" id="layer3-vision" onchange="recalculateMergeStack()">
1167
- <span>Vision</span>
1168
- </label>
1169
- <div class="form-group" style="margin-bottom: 0;">
1170
- <label style="font-size:0.7rem;">Context Window</label>
1171
- <input type="number" id="layer3-context" class="form-control" value="131072" style="padding: 0.35rem; font-size: 0.8rem;" oninput="recalculateMergeStack()">
1172
- </div>
1173
- </div>
1174
- </div>
1175
-
1176
- <!-- Layer 4: Live Probe Result -->
1177
- <div class="merge-layer layer-4">
1178
- <div class="merge-layer-header">
1179
- <span class="merge-layer-title"><span class="merge-layer-num">4</span> Live Probe connection Discovery</span>
1180
- <label class="checkbox-group" style="font-size:0.8rem; color:var(--color-cyan);">
1181
- <input type="checkbox" id="layer4-active" onchange="recalculateMergeStack()">
1182
- <span>Enable Layer</span>
1183
- </label>
1184
- </div>
1185
- <div class="merge-layer-inputs" id="layer4-container" style="opacity: 0.5; pointer-events: none;">
1186
- <label class="checkbox-group">
1187
- <input type="checkbox" id="layer4-chat" checked onchange="recalculateMergeStack()">
1188
- <span>Chat</span>
1189
- </label>
1190
- <label class="checkbox-group">
1191
- <input type="checkbox" id="layer4-tools" onchange="recalculateMergeStack()">
1192
- <span>Tools</span>
1193
- </label>
1194
- <label class="checkbox-group">
1195
- <input type="checkbox" id="layer4-reasoning" checked onchange="recalculateMergeStack()">
1196
- <span>Reasoning</span>
1197
- </label>
1198
- <label class="checkbox-group">
1199
- <input type="checkbox" id="layer4-vision" checked onchange="recalculateMergeStack()">
1200
- <span>Vision</span>
1201
- </label>
1202
- <div class="form-group" style="margin-bottom: 0;">
1203
- <label style="font-size:0.7rem;">Context Window</label>
1204
- <input type="number" id="layer4-context" class="form-control" value="65536" style="padding: 0.35rem; font-size: 0.8rem;" oninput="recalculateMergeStack()">
1205
- </div>
1206
- </div>
1207
- </div>
1208
-
1209
- <!-- Layer 5: User Settings Override -->
1210
- <div class="merge-layer layer-5">
1211
- <div class="merge-layer-header">
1212
- <span class="merge-layer-title"><span class="merge-layer-num">5</span> User settings.yaml Override</span>
1213
- <label class="checkbox-group" style="font-size:0.8rem; color:var(--color-amber);">
1214
- <input type="checkbox" id="layer5-active" onchange="recalculateMergeStack()">
1215
- <span>Enable Layer</span>
1216
- </label>
1217
- </div>
1218
- <div class="merge-layer-inputs" id="layer5-container" style="opacity: 0.5; pointer-events: none;">
1219
- <label class="checkbox-group">
1220
- <input type="checkbox" id="layer5-chat" checked onchange="recalculateMergeStack()">
1221
- <span>Chat</span>
1222
- </label>
1223
- <label class="checkbox-group">
1224
- <input type="checkbox" id="layer5-tools" checked onchange="recalculateMergeStack()">
1225
- <span>Tools</span>
1226
- </label>
1227
- <label class="checkbox-group">
1228
- <input type="checkbox" id="layer5-reasoning" checked onchange="recalculateMergeStack()">
1229
- <span>Reasoning</span>
1230
- </label>
1231
- <label class="checkbox-group">
1232
- <input type="checkbox" id="layer5-vision" checked onchange="recalculateMergeStack()">
1233
- <span>Vision</span>
1234
- </label>
1235
- <div class="form-group" style="margin-bottom: 0;">
1236
- <label style="font-size:0.7rem;">Context Window</label>
1237
- <input type="number" id="layer5-context" class="form-control" value="262144" style="padding: 0.35rem; font-size: 0.8rem;" oninput="recalculateMergeStack()">
1238
- </div>
1239
- </div>
1240
- </div>
1241
- </div>
1242
-
1243
- <div class="merge-effective-card">
1244
- <h3 style="font-size: 1.1rem; font-weight: 700; color: var(--color-cyan); margin-bottom: 0.5rem; display: flex; align-items: center; gap: 0.5rem;">
1245
- <svg aria-hidden="true" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" style="width:20px; height:20px;"><title>Icon</title><path d="M22 11.08V12a10 10 0 1 1-5.93-9.14" /><polyline points="22 4 12 14.01 9 11.01" /></svg>
1246
- Resolved Effective Capabilities
1247
- </h3>
1248
- <div class="effective-grid">
1249
- <div class="effective-cell">
1250
- <span class="effective-cell-name">Chat Capability</span>
1251
- <span class="effective-cell-val" id="eff-chat">true</span>
1252
- <span class="effective-cell-source" id="source-chat">layer 1 (default)</span>
1253
- </div>
1254
- <div class="effective-cell">
1255
- <span class="effective-cell-name">Tools Capability</span>
1256
- <span class="effective-cell-val" id="eff-tools">true</span>
1257
- <span class="effective-cell-source" id="source-tools">layer 1 (default)</span>
1258
- </div>
1259
- <div class="effective-cell">
1260
- <span class="effective-cell-name">Reasoning Capability</span>
1261
- <span class="effective-cell-val" id="eff-reasoning">true</span>
1262
- <span class="effective-cell-source" id="source-reasoning">layer 3 (kb)</span>
1263
- </div>
1264
- <div class="effective-cell">
1265
- <span class="effective-cell-name">Vision Capability</span>
1266
- <span class="effective-cell-val" id="eff-vision">false</span>
1267
- <span class="effective-cell-source" id="source-vision">layer 1 (default)</span>
1268
- </div>
1269
- <div class="effective-cell">
1270
- <span class="effective-cell-name">Context Window</span>
1271
- <span class="effective-cell-val" id="eff-context">131072</span>
1272
- <span class="effective-cell-source" id="source-context">layer 3 (kb)</span>
1273
- </div>
1274
- </div>
1275
- </div>
1276
- </div>
1277
- </div>
1278
-
1279
- <!-- TAB 3: TARGET-FIRST RESOLVER SANDBOX -->
1280
- <div id="resolver-sim" class="tab-pane">
1281
- <div class="resolver-container">
1282
- <div class="resolver-input-panel glass-card">
1283
- <div class="glass-card-title">
1284
- <svg aria-hidden="true" viewBox="0 0 24 24"><title>Icon</title><path d="M20 21v-2a4 4 0 0 0-4-4H8a4 4 0 0 0-4 4v2" /><circle cx="12" cy="7" r="4" /></svg>
1285
- Resolver Input Parameters
1286
- </div>
1287
-
1288
- <div class="form-group">
1289
- <label for="resolver-pattern">Model ID / Pattern</label>
1290
- <input type="text" id="resolver-pattern" class="form-control" value="openai-codex/gpt-5.4" oninput="runResolverSimulation()">
1291
- <div class="quick-examples">
1292
- <button type="button" class="example-btn" onclick="_applyResolverExample('openai-codex/gpt-5.4')">openai-codex/gpt-5.4</button>
1293
- <button type="button" class="example-btn" onclick="_applyResolverExample('anthropic-max/claude-sonnet-5')">anthropic-max/claude-sonnet-5</button>
1294
- <button type="button" class="example-btn" onclick="_applyResolverExample('ollama/deepseek-r1:medium')">ollama/deepseek-r1:medium</button>
1295
- <button type="button" class="example-btn" onclick="_applyResolverExample('*gpt*')">*gpt*</button>
1296
- <button type="button" class="example-btn" onclick="_applyResolverExample('claude*')">claude*</button>
1297
- <button type="button" class="example-btn" onclick="_applyResolverExample('agenticqwen:high')">agenticqwen:high</button>
1298
- <button type="button" class="example-btn" onclick="_applyResolverExample('unknown-model')">unknown-model</button>
1299
- </div>
1300
- </div>
1301
-
1302
- <div>
1303
- <label>Active Registered Target Models</label>
1304
- <div class="resolver-candidates" id="resolver-candidates-list">
1305
- <!-- Populated dynamically -->
1306
- </div>
1307
- </div>
1308
- </div>
1309
-
1310
- <div class="glass-card" style="display: flex; flex-direction: column;">
1311
- <div class="glass-card-title">
1312
- <svg aria-hidden="true" viewBox="0 0 24 24"><title>Icon</title><polyline points="4 17 10 11 4 5" /><line x1="12" y1="19" x2="20" y2="19" /></svg>
1313
- Resolver Resolution Trace
1314
- </div>
1315
- <div class="trace-container" id="resolver-trace-log">
1316
- <!-- Trace steps populated dynamically -->
1317
- </div>
1318
- <div class="resolver-result-card" id="resolver-result-card">
1319
- <span class="resolver-result-header">Routing Output</span>
1320
- <span class="resolver-result-val" id="resolver-output">
1321
- openai-codex/gpt-5.4 <span class="badge-mini">thinking: off</span>
1322
- </span>
1323
- </div>
1324
- </div>
1325
- </div>
1326
- </div>
1327
-
1328
- <!-- TAB: THINKING REPLAY INSPECTOR -->
1329
- <div id="thinking-replay" class="tab-pane">
1330
- <div class="simulator-grid" style="display: grid; grid-template-columns: 1fr 1.2fr; gap: 1.5rem; margin-top: 1rem;">
1331
- <div class="control-panel glass-card">
1332
- <div class="glass-card-title">
1333
- <svg aria-hidden="true" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><title>Icon</title><path d="M21 15a2 2 0 0 1-2 2H7l-4 4V5a2 2 0 0 1 2-2h14a2 2 0 0 1 2 2z"/></svg>
1334
- Thinking Replay Parameters
1335
- </div>
1336
- <div class="form-group">
1337
- <label for="replay-provider">Target Provider / Runtime</label>
1338
- <select id="replay-provider" class="form-control" onchange="updateReplayInspector()">
1339
- <option value="ollama-native">Ollama Native (ollama-native)</option>
1340
- <option value="lmstudio-native">LM Studio Native (lmstudio-native)</option>
1341
- <option value="openai-completions">OpenAI Completions (openai-completions)</option>
1342
- <option value="anthropic-max">Anthropic OAuth / API (anthropic-max)</option>
1343
- </select>
1344
- </div>
1345
- <div class="form-group">
1346
- <label for="replay-cot">Chain of Thought (Thinking Block)</label>
1347
- <textarea id="replay-cot" class="form-control" rows="5" style="font-family: var(--font-mono); font-size: 0.85rem;" oninput="updateReplayInspector()">To find the sum of 2 and 2:
1348
- 1. Identify the two numbers (2 and 2).
1349
- 2. Apply the addition operator.
1350
- 3. 2 + 2 = 4.</textarea>
1351
- </div>
1352
- <div class="form-group">
1353
- <label for="replay-answer">Final Assistant Response</label>
1354
- <textarea id="replay-answer" class="form-control" rows="3" style="font-family: var(--font-mono); font-size: 0.85rem;" oninput="updateReplayInspector()">The sum of 2 and 2 is 4.</textarea>
1355
- </div>
1356
- </div>
1357
-
1358
- <div class="glass-card" style="display: flex; flex-direction: column; justify-content: space-between; gap: 1rem;">
1359
- <div>
1360
- <div class="glass-card-title" style="margin-bottom: 1rem;">
1361
- <svg aria-hidden="true" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><title>Icon</title><polyline points="16 18 22 12 16 6" /><polyline points="8 6 2 12 8 18" /></svg>
1362
- Payload & Message History Semantics
1363
- </div>
1364
- <div style="font-size: 0.85rem; color: var(--text-muted); margin-bottom: 0.5rem;">
1365
- How the thinking and content blocks are serialized in the API payload or message history:
1366
- </div>
1367
-
1368
- <div style="margin-bottom: 1rem;">
1369
- <span class="badge-mini" style="background: rgba(0, 240, 255, 0.1); border-color: var(--color-cyan); color: var(--color-cyan);" id="replay-mechanism-badge">Ollama Native Field</span>
1370
- </div>
1371
-
1372
- <label style="font-size: 0.75rem; text-transform: uppercase; color: var(--color-cyan);">API Request / History Payload JSON</label>
1373
- <pre id="replay-payload-json" style="background: #05080e; border: 1px solid var(--border-card); border-radius: 8px; padding: 1rem; font-family: var(--font-mono); font-size: 0.8rem; overflow-x: auto; white-space: pre-wrap; margin-top: 0.25rem; max-height: 400px;"></pre>
1374
- </div>
1375
-
1376
- <div style="border-top: 1px solid var(--border-card); padding-top: 1rem; margin-top: auto;">
1377
- <label style="font-size: 0.75rem; text-transform: uppercase; color: var(--color-emerald);">Clio Engine Session Ledger / UI Replay</label>
1378
- <div id="replay-ui-preview" style="background: rgba(16, 185, 129, 0.02); border: 1px solid rgba(16, 185, 129, 0.15); border-radius: 8px; padding: 1rem; margin-top: 0.25rem; font-family: var(--font-sans); font-size: 0.85rem;">
1379
- </div>
1380
- </div>
1381
- </div>
1382
- </div>
1383
- </div>
1384
-
1385
- <!-- TAB 4: ARCHITECTURE FLOWCHARTS -->
1386
- <div id="diagrams" class="tab-pane">
1387
- <div class="flowchart-container">
1388
-
1389
- <!-- DIAGRAM A -->
1390
- <div class="glass-card">
1391
- <div class="svg-title">
1392
- <svg aria-hidden="true" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><title>Icon</title><path d="M12 2v20M17 5H9.5a3.5 3.5 0 0 0 0 7h5a3.5 3.5 0 0 1 0 7H6" /></svg>
1393
- Hierarchical Capability Synthesis Overlay Flowchart
1394
- </div>
1395
- <div class="svg-wrapper">
1396
- <svg aria-hidden="true" width="850" height="420" viewBox="0 0 850 420" xmlns="http://www.w3.org/2000/svg"><title>Icon</title>
1397
- <!-- Definitions for arrows -->
1398
- <defs>
1399
- <marker id="arrow" viewBox="0 0 10 10" refX="6" refY="5" markerWidth="6" markerHeight="6" orient="auto-start-reverse">
1400
- <path d="M 0 0 L 10 5 L 0 10 z" fill="#00f0ff" />
1401
- </marker>
1402
- <marker id="arrow-white" viewBox="0 0 10 10" refX="6" refY="5" markerWidth="6" markerHeight="6" orient="auto-start-reverse">
1403
- <path d="M 0 0 L 10 5 L 0 10 z" fill="#f3f4f6" />
1404
- </marker>
1405
- </defs>
1406
-
1407
- <style>
1408
- .node-box { fill: #111827; stroke: rgba(255, 255, 255, 0.08); stroke-width: 1.5; rx: 8; ry: 8; }
1409
- .node-box-cyan { fill: rgba(0, 240, 255, 0.03); stroke: #00f0ff; stroke-width: 2; rx: 10; ry: 10; }
1410
- .node-box-purple { fill: rgba(189, 0, 255, 0.03); stroke: #bd00ff; stroke-width: 1.5; rx: 8; ry: 8; }
1411
- .node-title { fill: #f3f4f6; font-family: var(--font-sans); font-size: 13px; font-weight: 700; }
1412
- .node-text { fill: #9ca3af; font-family: var(--font-mono); font-size: 11px; }
1413
- .node-text-bold { fill: #f3f4f6; font-family: var(--font-mono); font-size: 11px; font-weight: bold; }
1414
- .arrow-line { fill: none; stroke: rgba(255, 255, 255, 0.2); stroke-width: 1.5; }
1415
- .arrow-line-cyan { fill: none; stroke: #00f0ff; stroke-width: 2; }
1416
- .label-text { fill: #9ca3af; font-family: var(--font-sans); font-size: 10px; }
1417
- </style>
1418
-
1419
- <!-- Layer 1 -->
1420
- <rect x="20" y="30" width="180" height="90" class="node-box" />
1421
- <text x="35" y="55" class="node-title">Layer 1: Runtime Base</text>
1422
- <text x="35" y="75" class="node-text">chat: true</text>
1423
- <text x="35" y="95" class="node-text">tools: true</text>
1424
- <text x="35" y="110" class="node-text">context: 8k</text>
1425
-
1426
- <!-- Layer 2 -->
1427
- <rect x="240" y="30" width="180" height="90" class="node-box" />
1428
- <text x="255" y="55" class="node-title">Layer 2: Catalog definition</text>
1429
- <text x="255" y="75" class="node-text">context: 16k</text>
1430
- <text x="255" y="95" class="node-text">vision: true</text>
1431
-
1432
- <!-- Layer 3 -->
1433
- <rect x="460" y="30" width="180" height="90" class="node-box" />
1434
- <text x="475" y="55" class="node-title">Layer 3: KB (YAML quirks)</text>
1435
- <text x="475" y="75" class="node-text">reasoning: true</text>
1436
- <text x="475" y="95" class="node-text">context: 131k</text>
1437
-
1438
- <!-- Merge process -->
1439
- <path d="M 200 75 L 240 75" class="arrow-line" marker-end="url(#arrow-white)" />
1440
- <path d="M 420 75 L 460 75" class="arrow-line" marker-end="url(#arrow-white)" />
1441
- <path d="M 640 75 L 680 75" class="arrow-line" marker-end="url(#arrow-white)" />
1442
-
1443
- <!-- Layer 4 -->
1444
- <rect x="680" y="30" width="150" height="90" class="node-box" />
1445
- <text x="695" y="55" class="node-title">Layer 4: Live Probe</text>
1446
- <text x="695" y="75" class="node-text">reasoning: true</text>
1447
- <text x="695" y="95" class="node-text">vision: false</text>
1448
-
1449
- <path d="M 755 120 L 755 170" class="arrow-line" marker-end="url(#arrow-white)" />
1450
-
1451
- <!-- Layer 5 -->
1452
- <rect x="665" y="170" width="180" height="90" class="node-box" />
1453
- <text x="680" y="195" class="node-title">Layer 5: User Settings</text>
1454
- <text x="680" y="215" class="node-text">settings.targets[x].caps</text>
1455
- <text x="680" y="235" class="node-text">vision: true (override)</text>
1456
-
1457
- <!-- Connection to final output -->
1458
- <path d="M 665 215 L 450 215 L 450 280" class="arrow-line-cyan" marker-end="url(#arrow)" />
1459
- <text x="500" y="210" class="label-text" fill="#00f0ff">Applies overrides in order of hierarchy</text>
1460
-
1461
- <!-- Final output block -->
1462
- <rect x="225" y="280" width="450" height="110" class="node-box-cyan" />
1463
- <text x="245" y="305" class="node-title" fill="#00f0ff">FINAL RESOLVED EFFECTIVE CAPABILITYFLAGS</text>
1464
- <text x="245" y="330" class="node-text-bold">chat: true <tspan fill="#6b7280">(from Layer 1)</tspan></text>
1465
- <text x="245" y="350" class="node-text-bold">tools: true <tspan fill="#6b7280">(from Layer 1)</tspan></text>
1466
- <text x="245" y="370" class="node-text-bold">vision: true <tspan fill="#6b7280">(overridden by Layer 5)</tspan></text>
1467
- <text x="475" y="330" class="node-text-bold">reasoning: true <tspan fill="#6b7280">(from Layer 3)</tspan></text>
1468
- <text x="475" y="350" class="node-text-bold">contextWindow: 131072 <tspan fill="#6b7280">(from Layer 3)</tspan></text>
1469
- </svg>
1470
- </div>
1471
- <div class="svg-desc">
1472
- <strong>Hierarchical Priority:</strong> Lower levels provide base definitions, which are progressively layered and overwritten by higher levels. Live probe outcomes verify runtime reality, while configured and default models remain selectable with explicit source labels when a live catalog omits them.
1473
- </div>
1474
- </div>
1475
-
1476
- <!-- DIAGRAM B -->
1477
- <div class="glass-card">
1478
- <div class="svg-title">
1479
- <svg aria-hidden="true" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><title>Icon</title><circle cx="11" cy="11" r="8" /><line x1="21" y1="21" x2="16.65" y2="16.65" /></svg>
1480
- Target-First Model Resolver Match sequence
1481
- </div>
1482
- <div class="svg-wrapper">
1483
- <svg aria-hidden="true" width="850" height="400" viewBox="0 0 850 400" xmlns="http://www.w3.org/2000/svg"><title>Icon</title>
1484
- <style>
1485
- .step-box { fill: #111827; stroke: rgba(255, 255, 255, 0.08); stroke-width: 1.5; rx: 6; ry: 6; }
1486
- .step-box-hit { fill: rgba(16, 185, 129, 0.03); stroke: #10b981; stroke-width: 2; rx: 8; ry: 8; }
1487
- .step-title { fill: #f3f4f6; font-family: var(--font-sans); font-size: 12px; font-weight: 700; }
1488
- .step-desc { fill: #9ca3af; font-family: var(--font-sans); font-size: 11px; }
1489
- .decision-diamond { fill: #1f2937; stroke: #3b82f6; stroke-width: 1.5; }
1490
- </style>
1491
-
1492
- <!-- Step 1: Input -->
1493
- <rect x="20" y="150" width="130" height="60" class="step-box" />
1494
- <text x="35" y="175" class="step-title">User Pattern Input</text>
1495
- <text x="35" y="195" class="step-desc">e.g. gpt-5.4:low</text>
1496
-
1497
- <path d="M 150 180 L 190 180" class="arrow-line" marker-end="url(#arrow-white)" />
1498
-
1499
- <!-- Step 2: Suffix splitting -->
1500
- <rect x="190" y="140" width="140" height="80" class="step-box" />
1501
- <text x="205" y="165" class="step-title">1. Suffix Parser</text>
1502
- <text x="205" y="185" class="step-desc">Splits ':thinkingLevel'</text>
1503
- <text x="205" y="200" class="step-desc">pattern &rarr; gpt-5.4</text>
1504
-
1505
- <path d="M 330 180 L 370 180" class="arrow-line" marker-end="url(#arrow-white)" />
1506
-
1507
- <!-- Step 3: Exact match check -->
1508
- <rect x="370" y="140" width="130" height="80" class="step-box" />
1509
- <text x="385" y="165" class="step-title">2. Exact Match?</text>
1510
- <text x="385" y="185" class="step-desc">Matches 'target/id'</text>
1511
- <text x="385" y="200" class="step-desc">exactly?</text>
1512
-
1513
- <!-- Branch from Exact Match -->
1514
- <path d="M 500 180 L 540 180" class="arrow-line" marker-end="url(#arrow-white)" />
1515
- <path d="M 435 220 L 435 270" class="arrow-line" marker-end="url(#arrow-white)" />
1516
- <text x="445" y="245" class="label-text">No</text>
1517
- <text x="510" y="170" class="label-text">Yes</text>
1518
-
1519
- <!-- Step 4: Glob check -->
1520
- <rect x="370" y="270" width="130" height="80" class="step-box" />
1521
- <text x="385" y="295" class="step-title">3. Glob Match?</text>
1522
- <text x="385" y="315" class="step-desc">Matches regex pattern</text>
1523
- <text x="385" y="330" class="step-desc">like *gpt* ?</text>
1524
-
1525
- <!-- Branch from Glob -->
1526
- <path d="M 500 310 L 610 310 L 610 220" class="arrow-line" marker-end="url(#arrow-white)" />
1527
- <path d="M 370 310 L 260 310 L 260 270" class="arrow-line" />
1528
- <text x="545" y="300" class="label-text">Yes</text>
1529
- <text x="290" y="300" class="label-text">No</text>
1530
-
1531
- <!-- Step 5: Bare model match check -->
1532
- <rect x="195" y="270" width="130" height="80" class="step-box" />
1533
- <text x="210" y="295" class="step-title">4. Bare Model?</text>
1534
- <text x="210" y="315" class="step-desc">Exact case-insensitive</text>
1535
- <text x="210" y="330" class="step-desc">model ID?</text>
1536
-
1537
- <!-- Branch from Bare Model -->
1538
- <path d="M 195 310 L 100 310 L 100 270" class="arrow-line" />
1539
- <path d="M 260 270 L 260 250" class="arrow-line" />
1540
- <text x="135" y="300" class="label-text">No</text>
1541
-
1542
- <!-- Step 6: Substring match check -->
1543
- <rect x="35" y="200" width="130" height="70" class="step-box" />
1544
- <text x="50" y="225" class="step-title">5. Substring Match?</text>
1545
- <text x="50" y="245" class="step-desc">Case-insensitive</text>
1546
- <text x="50" y="260" class="step-desc">substring match?</text>
1547
-
1548
- <!-- Final result success -->
1549
- <rect x="540" y="140" width="280" height="80" class="step-box-hit" />
1550
- <text x="555" y="165" class="step-title" fill="#10b981">Resolved Target Reference</text>
1551
- <text x="555" y="185" class="step-desc" fill="#f3f4f6">Returns target ID + wire model ID</text>
1552
- <text x="555" y="200" class="step-desc" fill="#f3f4f6">Applies thinking level target settings</text>
1553
-
1554
- <path d="M 100 200 L 100 100 L 680 100 L 680 140" class="arrow-line" marker-end="url(#arrow-white)" />
1555
- <text x="80" y="130" class="label-text">Yes</text>
1556
- </svg>
1557
- </div>
1558
- <div class="svg-desc">
1559
- <strong>Target-First Matching Hierarchy:</strong> Exact references block any partial checks. The resolver handles glob patterns, strips thinking constraints before evaluating names, and falls back to a substring match to prevent user frustration.
1560
- </div>
1561
- </div>
1562
-
1563
- <!-- DIAGRAM C -->
1564
- <div class="glass-card">
1565
- <div class="svg-title">
1566
- <svg aria-hidden="true" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><title>Icon</title><path d="M22 12h-4l-3 9L9 3l-3 9H2" /></svg>
1567
- Live Connection Probe & Capability Detection Pipeline
1568
- </div>
1569
- <div class="svg-wrapper">
1570
- <svg aria-hidden="true" width="850" height="380" viewBox="0 0 850 380" xmlns="http://www.w3.org/2000/svg"><title>Icon</title>
1571
- <style>
1572
- .flow-box { fill: #111827; stroke: rgba(255, 255, 255, 0.08); stroke-width: 1.5; rx: 6; ry: 6; }
1573
- .flow-box-active { fill: rgba(0, 240, 255, 0.02); stroke: #00f0ff; stroke-width: 1.5; rx: 6; ry: 6; }
1574
- .flow-title { fill: #f3f4f6; font-family: var(--font-sans); font-size: 12px; font-weight: 700; }
1575
- .flow-desc { fill: #9ca3af; font-family: var(--font-sans); font-size: 11px; }
1576
- </style>
1577
-
1578
- <!-- Start -->
1579
- <rect x="20" y="150" width="120" height="60" class="flow-box-active" />
1580
- <text x="35" y="175" class="flow-title">1. Trigger Probe</text>
1581
- <text x="35" y="192" class="flow-desc">clio-coder models / TUI</text>
1582
-
1583
- <path d="M 140 180 L 180 180" class="arrow-line" marker-end="url(#arrow-white)" />
1584
-
1585
- <!-- Liveness check -->
1586
- <rect x="180" y="140" width="150" height="80" class="flow-box" />
1587
- <text x="195" y="165" class="flow-title">2. Target Ping</text>
1588
- <text x="195" y="185" class="flow-desc">Ping HTTP URL / WS</text>
1589
- <text x="195" y="200" class="flow-desc">Verifies liveness</text>
1590
-
1591
- <path d="M 330 180 L 370 180" class="arrow-line" marker-end="url(#arrow-white)" />
1592
-
1593
- <!-- Fingerprint Check -->
1594
- <rect x="370" y="140" width="160" height="80" class="flow-box" />
1595
- <text x="385" y="165" class="flow-title">3. Fingerprint Native</text>
1596
- <text x="385" y="185" class="flow-desc">Ollama: /api/version</text>
1597
- <text x="385" y="200" class="flow-desc">LM Studio: /api/v1/models</text>
1598
-
1599
- <path d="M 530 180 L 570 180" class="arrow-line" marker-end="url(#arrow-white)" />
1600
-
1601
- <!-- Loaded models list -->
1602
- <rect x="570" y="140" width="140" height="80" class="flow-box" />
1603
- <text x="585" y="165" class="flow-title">4. Model Tags</text>
1604
- <text x="585" y="185" class="flow-desc">Fetch active tags list</text>
1605
- <text x="585" y="200" class="flow-desc">Matches against catalog</text>
1606
-
1607
- <path d="M 710 180 L 750 180" class="arrow-line" marker-end="url(#arrow-white)" />
1608
-
1609
- <!-- Reasoning priming test -->
1610
- <rect x="550" y="260" width="180" height="90" class="flow-box-active" />
1611
- <text x="565" y="285" class="flow-title" fill="#00f0ff">5. Reasoning Priming</text>
1612
- <text x="565" y="305" class="flow-desc">One-shot request (2+2)</text>
1613
- <text x="565" y="320" class="flow-desc">Checks reasoning_content</text>
1614
-
1615
- <path d="M 750 210 L 750 305 L 730 305" class="arrow-line" marker-end="url(#arrow-white)" />
1616
- <text x="758" y="250" class="label-text">If local compatible</text>
1617
-
1618
- <!-- Final capabilities updates -->
1619
- <rect x="180" y="260" width="150" height="90" class="flow-box" />
1620
- <text x="195" y="285" class="flow-title">6. Update Cache</text>
1621
- <text x="195" y="305" class="flow-desc">Saves model caps</text>
1622
- <text x="195" y="320" class="flow-desc">Updates status & badges</text>
1623
-
1624
- <path d="M 550 305 L 330 305" class="arrow-line" marker-end="url(#arrow-white)" />
1625
- </svg>
1626
- </div>
1627
- <div class="svg-desc">
1628
- <strong>Adaptive Capabilities Probing:</strong> Since local models and hardware configurations fluctuate, Clio Coder queries the tags list first to build the baseline model registry, and then initiates an optional 1-shot chat completion test to confirm reasoning capabilities in OpenAI-compatible local surfaces.
1629
- </div>
1630
- </div>
1631
-
1632
- </div>
1633
- </div>
1634
-
1635
- <footer>
1636
- <p>Clio Coder Visual Specification Blueprint. Product Version v0.3.0. Designed with high-performance dark aesthetics.</p>
1637
- </footer>
1638
- </div>
1639
-
1640
- <script>
1641
- // Tab switching
1642
- function _switchTab(tabId) {
1643
- document.querySelectorAll('.tab-pane').forEach(el => { el.classList.remove('active'); });
1644
- document.querySelectorAll('.tab-btn').forEach(el => { el.classList.remove('active'); });
1645
-
1646
- document.getElementById(tabId).classList.add('active');
1647
- event.currentTarget.classList.add('active');
1648
-
1649
- if (tabId === 'resolver-sim') {
1650
- runResolverSimulation();
1651
- }
1652
- if (tabId === 'thinking-replay') {
1653
- updateReplayInspector();
1654
- }
1655
- }
1656
-
1657
- // Dynamic model catalog per target
1658
- const modelCatalog = {
1659
- ollama: [
1660
- { id: "llama3:8b", name: "Llama 3 (8B)", chat: true, tools: true, reasoning: false, vision: false, context: 8192, format: "openai" },
1661
- { id: "deepseek-r1:8b", name: "DeepSeek R1 (8B)", chat: true, tools: false, reasoning: true, vision: false, context: 131072, format: "deepseek-r1" },
1662
- { id: "llava:7b", name: "LLaVA (7B Vision)", chat: true, tools: false, reasoning: false, vision: true, context: 4096, format: "openai" },
1663
- { id: "qwen2.5-coder:7b", name: "Qwen 2.5 Coder (7B)", chat: true, tools: true, reasoning: false, vision: false, context: 32768, format: "qwen" }
1664
- ],
1665
- lmstudio: [
1666
- { id: "qwen2.5-coder-7b-instruct", name: "Qwen 2.5 Coder 7B", chat: true, tools: true, reasoning: false, vision: false, context: 32768, format: "qwen" },
1667
- { id: "phi-4", name: "Microsoft Phi-4 (Reasoning)", chat: true, tools: true, reasoning: true, vision: false, context: 16384, format: "openai" },
1668
- { id: "deepseek-r1-distill-qwen-14b", name: "DeepSeek R1 Distill 14B", chat: true, tools: false, reasoning: true, vision: false, context: 131072, format: "deepseek-r1" }
1669
- ],
1670
- openai: [
1671
- { id: "gpt-4o", name: "GPT-4o (Chat/Vision/Tools)", chat: true, tools: true, reasoning: false, vision: true, context: 128000, format: "openai" },
1672
- { id: "gpt-4o-mini", name: "GPT-4o Mini", chat: true, tools: true, reasoning: false, vision: true, context: 128000, format: "openai" },
1673
- { id: "o1-mini", name: "o1 Mini (Reasoning)", chat: true, tools: false, reasoning: true, vision: false, context: 128000, format: "harmony" },
1674
- { id: "o3-mini", name: "o3 Mini (Reasoning/Tools)", chat: true, tools: true, reasoning: true, vision: false, context: 200000, format: "harmony" }
1675
- ],
1676
- bedrock: [
1677
- { id: "anthropic.claude-3-5-sonnet-20241022-v2:0", name: "Claude 3.5 Sonnet v2", chat: true, tools: true, reasoning: false, vision: true, context: 200000, format: "anthropic" },
1678
- { id: "us.amazon.nova-pro-v1:0", name: "Amazon Nova Pro", chat: true, tools: true, reasoning: false, vision: true, context: 300000, format: "openai" },
1679
- { id: "anthropic.claude-3-5-haiku-20241022-v1:0", name: "Claude 3.5 Haiku", chat: true, tools: true, reasoning: false, vision: false, context: 200000, format: "anthropic" }
1680
- ],
1681
- 'anthropic-max': [
1682
- { id: "claude-sonnet-5", name: "Claude Sonnet 5 (Subscription)", chat: true, tools: true, reasoning: true, vision: true, context: 200000, format: "anthropic" },
1683
- { id: "claude-3-5-haiku-latest", name: "Claude 3.5 Haiku", chat: true, tools: true, reasoning: false, vision: false, context: 200000, format: "anthropic" }
1684
- ],
1685
- 'openai-codex': [
1686
- { id: "gpt-5.4", name: "GPT-5.4 (ChatGPT Pro)", chat: true, tools: true, reasoning: false, vision: true, context: 272000, format: "openai-codex" },
1687
- { id: "o1-mini", name: "o1 Mini (ChatGPT Pro)", chat: true, tools: false, reasoning: true, vision: false, context: 272000, format: "harmony" }
1688
- ],
1689
- 'claude-sdk': [
1690
- { id: "sonnet", name: "Claude Code Sonnet (Subscription)", chat: true, tools: true, reasoning: true, vision: true, context: 200000, format: "anthropic" }
1691
- ]
1692
- };
1693
-
1694
- // On target change
1695
- function onTargetChange() {
1696
- const target = document.getElementById('probe-target').value;
1697
- const urlInput = document.getElementById('probe-url');
1698
- const authInput = document.getElementById('probe-auth');
1699
- const modelSelect = document.getElementById('probe-model');
1700
-
1701
- // Clear previous console logs
1702
- const logBox = document.getElementById('probe-console-log');
1703
- logBox.innerHTML = `<div class="log-entry"><span class="log-time">[12:53:02]</span><span class="log-info">Switched target to ${target}.</span></div>`;
1704
-
1705
- // Update values based on target
1706
- if (target === 'ollama') {
1707
- urlInput.value = "http://localhost:11434";
1708
- authInput.value = "";
1709
- authInput.placeholder = "Not required for Ollama";
1710
- authInput.disabled = true;
1711
- } else if (target === 'lmstudio') {
1712
- urlInput.value = "http://localhost:1234";
1713
- authInput.value = "";
1714
- authInput.placeholder = "Optional API Key passkey";
1715
- authInput.disabled = false;
1716
- } else if (target === 'openai') {
1717
- urlInput.value = "https://api.openai.com/v1";
1718
- authInput.value = "••••••••••••••••";
1719
- authInput.placeholder = "Enter OpenAI API Key";
1720
- authInput.disabled = false;
1721
- } else if (target === 'bedrock') {
1722
- urlInput.value = "aws-sdk://us-east-1";
1723
- authInput.value = "••••••••••••••••";
1724
- authInput.placeholder = "Resolved from AWS Profile envs";
1725
- authInput.disabled = false;
1726
- } else if (target === 'anthropic-max') {
1727
- urlInput.value = "https://api.anthropic.com";
1728
- authInput.value = "••••••••••••••••";
1729
- authInput.placeholder = "OAuth Subscription Token (automatically managed)";
1730
- authInput.disabled = false;
1731
- } else if (target === 'openai-codex') {
1732
- urlInput.value = "https://chatgpt.com/backend-api";
1733
- authInput.value = "••••••••••••••••";
1734
- authInput.placeholder = "OAuth Subscription Token (automatically managed)";
1735
- authInput.disabled = false;
1736
- } else if (target === 'claude-sdk') {
1737
- urlInput.value = "https://api.anthropic.com";
1738
- authInput.value = "••••••••••••••••";
1739
- authInput.placeholder = "OAuth Subscription Token (automatically managed)";
1740
- authInput.disabled = false;
1741
- }
1742
-
1743
- // Populate models list
1744
- modelSelect.innerHTML = '';
1745
- modelCatalog[target].forEach(model => {
1746
- const opt = document.createElement('option');
1747
- opt.value = model.id;
1748
- opt.textContent = model.name;
1749
- modelSelect.appendChild(opt);
1750
- });
1751
-
1752
- onModelChange();
1753
- }
1754
-
1755
- // On model change
1756
- function onModelChange() {
1757
- const target = document.getElementById('probe-target').value;
1758
- const modelId = document.getElementById('probe-model').value;
1759
- const model = modelCatalog[target].find(m => m.id === modelId);
1760
-
1761
- const logBox = document.getElementById('probe-console-log');
1762
- if (model) {
1763
- logBox.innerHTML += `<div class="log-entry"><span class="log-time">[${new Date().toLocaleTimeString()}]</span><span class="log-info">Selected Model: ${model.id} (Context: ${model.context} tokens)</span></div>`;
1764
- }
1765
- }
1766
-
1767
- // Update latency label
1768
- function _updateLatencyVal() {
1769
- const val = document.getElementById('probe-latency').value;
1770
- document.getElementById('latency-val').innerText = `${val} ms`;
1771
- }
1772
-
1773
- // Run Connection Probe Simulation
1774
- function _runConnectionProbe() {
1775
- const target = document.getElementById('probe-target').value;
1776
- const url = document.getElementById('probe-url').value;
1777
- const modelId = document.getElementById('probe-model').value;
1778
- const model = modelCatalog[target].find(m => m.id === modelId);
1779
- const latency = parseInt(document.getElementById('probe-latency').value, 10);
1780
- const outcome = document.querySelector('input[name="outcome"]:checked').value;
1781
-
1782
- const logBox = document.getElementById('probe-console-log');
1783
- const statusText = document.getElementById('probe-status-text');
1784
- const statusDot = document.getElementById('probe-status-dot');
1785
-
1786
- // Reset badges
1787
- disableAllBadges();
1788
-
1789
- statusText.innerText = "PROBING";
1790
- statusDot.className = "status-dot active";
1791
-
1792
- logBox.innerHTML += `<div class="log-entry"><span class="log-time">[${new Date().toLocaleTimeString()}]</span><span class="log-info">Sending connection check request to: <strong>${url}</strong></span></div>`;
1793
-
1794
- if (target === 'ollama') {
1795
- logBox.innerHTML += `<div class="log-entry"><span class="log-time">[${new Date().toLocaleTimeString()}]</span><span class="log-info">Attempting native fingerprint: HTTP GET /api/version</span></div>`;
1796
- } else if (target === 'lmstudio') {
1797
- logBox.innerHTML += `<div class="log-entry"><span class="log-time">[${new Date().toLocaleTimeString()}]</span><span class="log-info">Attempting native fingerprint: HTTP GET /api/v1/models</span></div>`;
1798
- } else {
1799
- logBox.innerHTML += `<div class="log-entry"><span class="log-time">[${new Date().toLocaleTimeString()}]</span><span class="log-info">Sending client handshake...</span></div>`;
1800
- }
1801
-
1802
- // Simulate network request duration
1803
- setTimeout(() => {
1804
- if (outcome === 'timeout') {
1805
- statusText.innerText = "TIMEOUT";
1806
- statusDot.className = "status-dot error";
1807
- logBox.innerHTML += `<div class="log-entry"><span class="log-time">[${new Date().toLocaleTimeString()}]</span><span class="log-error">Error: connection timed out after ${latency}ms</span></div>`;
1808
- document.getElementById('response-json-code').innerText = JSON.stringify({ error: `Connection timeout after ${latency}ms`, code: "TIMEOUT" }, null, 2);
1809
- return;
1810
- } else if (outcome === 'unauthorized') {
1811
- statusText.innerText = "UNAUTHORIZED";
1812
- statusDot.className = "status-dot error";
1813
- logBox.innerHTML += `<div class="log-entry"><span class="log-time">[${new Date().toLocaleTimeString()}]</span><span class="log-error">Error: HTTP 401 Unauthorized. API Key is missing or invalid.</span></div>`;
1814
- document.getElementById('response-json-code').innerText = JSON.stringify({ error: "HTTP 401 Unauthorized: Invalid credentials.", status: 401 }, null, 2);
1815
- return;
1816
- } else if (outcome === 'notfound') {
1817
- statusText.innerText = "NOT FOUND";
1818
- statusDot.className = "status-dot error";
1819
- logBox.innerHTML += `<div class="log-entry"><span class="log-time">[${new Date().toLocaleTimeString()}]</span><span class="log-error">Error: HTTP 404 Not Found at url path.</span></div>`;
1820
- document.getElementById('response-json-code').innerText = JSON.stringify({ error: "HTTP 404 Not Found: Path does not exist.", status: 404 }, null, 2);
1821
- return;
1822
- }
1823
-
1824
- // Success outcome
1825
- statusText.innerText = "HEALTHY";
1826
- statusDot.className = "status-dot active";
1827
- logBox.innerHTML += `<div class="log-entry"><span class="log-time">[${new Date().toLocaleTimeString()}]</span><span class="log-success">HTTP 200 OK received in ${latency}ms.</span></div>`;
1828
-
1829
- let responsePayload = {};
1830
-
1831
- if (target === 'ollama') {
1832
- responsePayload = {
1833
- version: "0.1.48",
1834
- models: [
1835
- { name: "llama3:8b", modified_at: "2026-06-01T12:00:00Z", size: 4700000000, details: { format: "gguf", family: "llama" } },
1836
- { name: "deepseek-r1:8b", modified_at: "2026-06-03T10:00:00Z", size: 4700000000, details: { format: "gguf", family: "qwen" } },
1837
- { name: "llava:7b", modified_at: "2026-06-02T15:00:00Z", size: 5200000000, details: { format: "gguf", family: "llama" } },
1838
- { name: "qwen2.5-coder:7b", modified_at: "2026-06-05T09:00:00Z", size: 4700000000, details: { format: "gguf", family: "qwen" } }
1839
- ]
1840
- };
1841
- logBox.innerHTML += `<div class="log-entry"><span class="log-time">[${new Date().toLocaleTimeString()}]</span><span class="log-info">Found Ollama native server. Models retrieved from /api/tags: <strong>[${responsePayload.models.map(m => m.name).join(', ')}]</strong></span></div>`;
1842
- } else if (target === 'lmstudio') {
1843
- responsePayload = {
1844
- models: [
1845
- { id: "qwen2.5-coder-7b-instruct", object: "model", owned_by: "lmstudio", capabilities: { tools: true, vision: false } },
1846
- { id: "phi-4", object: "model", owned_by: "lmstudio", capabilities: { tools: true, vision: false } },
1847
- { id: "deepseek-r1-distill-qwen-14b", object: "model", owned_by: "lmstudio", capabilities: { tools: false, vision: false } }
1848
- ]
1849
- };
1850
- logBox.innerHTML += `<div class="log-entry"><span class="log-time">[${new Date().toLocaleTimeString()}]</span><span class="log-info">Found LM Studio server. Active models: <strong>[${responsePayload.models.map(m => m.id).join(', ')}]</strong></span></div>`;
1851
- } else if (target === 'openai') {
1852
- responsePayload = {
1853
- object: "list",
1854
- data: [
1855
- { id: "gpt-4o", object: "model", created: 1715368132, owned_by: "system" },
1856
- { id: "gpt-4o-mini", object: "model", created: 1721112341, owned_by: "system" },
1857
- { id: "o1-mini", object: "model", created: 1726012391, owned_by: "system" },
1858
- { id: "o3-mini", object: "model", created: 1738012391, owned_by: "system" }
1859
- ]
1860
- };
1861
- logBox.innerHTML += `<div class="log-entry"><span class="log-time">[${new Date().toLocaleTimeString()}]</span><span class="log-info">OpenAI cloud handshake succeeded. Available models list parsed successfully.</span></div>`;
1862
- } else if (target === 'bedrock') {
1863
- responsePayload = {
1864
- handshake: "ok",
1865
- credentials: "aws-sdk-resolved",
1866
- models: [
1867
- "anthropic.claude-3-5-sonnet-20241022-v2:0",
1868
- "us.amazon.nova-pro-v1:0",
1869
- "anthropic.claude-3-5-haiku-20241022-v1:0"
1870
- ]
1871
- };
1872
- logBox.innerHTML += `<div class="log-entry"><span class="log-time">[${new Date().toLocaleTimeString()}]</span><span class="log-info">AWS Bedrock SDK initialized. Converse API capability checked.</span></div>`;
1873
- }
1874
-
1875
- document.getElementById('response-json-code').innerText = JSON.stringify(responsePayload, null, 2);
1876
-
1877
- // Capability Detection and Badging
1878
- logBox.innerHTML += `<div class="log-entry"><span class="log-time">[${new Date().toLocaleTimeString()}]</span><span class="log-info" style="color: var(--color-cyan);">Running model capability extraction...</span></div>`;
1879
-
1880
- // Chat is always enabled
1881
- enableBadge('chat', 'Active');
1882
-
1883
- // Tools Check
1884
- if (model.tools) {
1885
- enableBadge('tools', model.format === 'qwen' ? 'Qwen format' : (model.format === 'anthropic' ? 'Anthropic' : 'OpenAI schema'));
1886
- logBox.innerHTML += `<div class="log-entry"><span class="log-time">[${new Date().toLocaleTimeString()}]</span><span class="log-success">&nbsp;&nbsp;✔ Tools enabled (format: ${model.format})</span></div>`;
1887
- } else {
1888
- logBox.innerHTML += `<div class="log-entry"><span class="log-time">[${new Date().toLocaleTimeString()}]</span><span class="log-warn">&nbsp;&nbsp;⚠ Tools not supported by model template</span></div>`;
1889
- }
1890
-
1891
- // Vision Check
1892
- if (model.vision) {
1893
- enableBadge('vision', 'Multimodal');
1894
- logBox.innerHTML += `<div class="log-entry"><span class="log-time">[${new Date().toLocaleTimeString()}]</span><span class="log-success">&nbsp;&nbsp;✔ Vision active (image input supported)</span></div>`;
1895
- } else {
1896
- logBox.innerHTML += `<div class="log-entry"><span class="log-time">[${new Date().toLocaleTimeString()}]</span><span class="log-info">&nbsp;&nbsp;ℹ Vision unavailable</span></div>`;
1897
- }
1898
-
1899
- // Reasoning Check
1900
- if (model.reasoning) {
1901
- logBox.innerHTML += `<div class="log-entry"><span class="log-time">[${new Date().toLocaleTimeString()}]</span><span class="log-info">&nbsp;&nbsp;Executing reasoning test probe (priming 1-shot completion)...</span></div>`;
1902
-
1903
- setTimeout(() => {
1904
- const reasoningFormat = model.format === 'deepseek-r1' ? 'deepseek-r1' : 'harmony';
1905
- enableBadge('reasoning', reasoningFormat);
1906
- logBox.innerHTML += `<div class="log-entry"><span class="log-time">[${new Date().toLocaleTimeString()}]</span><span class="log-success">&nbsp;&nbsp;✔ Reasoning detected in output channel (thinkingFormat: ${reasoningFormat})</span></div>`;
1907
- }, 150);
1908
- } else {
1909
- logBox.innerHTML += `<div class="log-entry"><span class="log-time">[${new Date().toLocaleTimeString()}]</span><span class="log-info">&nbsp;&nbsp;ℹ Model behaves as direct-instruct (no thinking content channel)</span></div>`;
1910
- }
1911
-
1912
- }, latency);
1913
- }
1914
-
1915
- function enableBadge(id, statusText) {
1916
- const badge = document.getElementById(`badge-${id}`);
1917
- const text = document.getElementById(`status-${id}`);
1918
- badge.classList.add('enabled');
1919
- text.innerText = statusText;
1920
- }
1921
-
1922
- function disableAllBadges() {
1923
- ['chat', 'tools', 'reasoning', 'vision'].forEach(id => {
1924
- const badge = document.getElementById(`badge-${id}`);
1925
- const text = document.getElementById(`status-${id}`);
1926
- badge.classList.remove('enabled');
1927
- text.innerText = 'Disabled';
1928
- });
1929
- }
1930
-
1931
- // Initialize models list
1932
- onTargetChange();
1933
-
1934
- // TAB 2: MERGE STACK LOGIC
1935
- function toggleMergeLayers() {
1936
- const l3Active = document.getElementById('layer3-active').checked;
1937
- const l4Active = document.getElementById('layer4-active').checked;
1938
- const l5Active = document.getElementById('layer5-active').checked;
1939
-
1940
- document.getElementById('layer3-container').style.opacity = l3Active ? "1" : "0.5";
1941
- document.getElementById('layer3-container').style.pointerEvents = l3Active ? "auto" : "none";
1942
-
1943
- document.getElementById('layer4-container').style.opacity = l4Active ? "1" : "0.5";
1944
- document.getElementById('layer4-container').style.pointerEvents = l4Active ? "auto" : "none";
1945
-
1946
- document.getElementById('layer5-container').style.opacity = l5Active ? "1" : "0.5";
1947
- document.getElementById('layer5-container').style.pointerEvents = l5Active ? "auto" : "none";
1948
- }
1949
-
1950
- function recalculateMergeStack() {
1951
- toggleMergeLayers();
1952
-
1953
- const layers = [
1954
- {
1955
- id: "Layer 1 (Runtime defaults)",
1956
- active: true,
1957
- chat: document.getElementById('layer1-chat').checked,
1958
- tools: document.getElementById('layer1-tools').checked,
1959
- reasoning: document.getElementById('layer1-reasoning').checked,
1960
- vision: document.getElementById('layer1-vision').checked,
1961
- context: parseInt(document.getElementById('layer1-context').value, 10) || 0
1962
- },
1963
- {
1964
- id: "Layer 2 (Catalog definition)",
1965
- active: true,
1966
- chat: document.getElementById('layer2-chat').checked,
1967
- tools: document.getElementById('layer2-tools').checked,
1968
- reasoning: document.getElementById('layer2-reasoning').checked,
1969
- vision: document.getElementById('layer2-vision').checked,
1970
- context: parseInt(document.getElementById('layer2-context').value, 10) || 0
1971
- },
1972
- {
1973
- id: "Layer 3 (Knowledge base)",
1974
- active: document.getElementById('layer3-active').checked,
1975
- chat: document.getElementById('layer3-chat').checked,
1976
- tools: document.getElementById('layer3-tools').checked,
1977
- reasoning: document.getElementById('layer3-reasoning').checked,
1978
- vision: document.getElementById('layer3-vision').checked,
1979
- context: parseInt(document.getElementById('layer3-context').value, 10) || 0
1980
- },
1981
- {
1982
- id: "Layer 4 (Live Probe)",
1983
- active: document.getElementById('layer4-active').checked,
1984
- chat: document.getElementById('layer4-chat').checked,
1985
- tools: document.getElementById('layer4-tools').checked,
1986
- reasoning: document.getElementById('layer4-reasoning').checked,
1987
- vision: document.getElementById('layer4-vision').checked,
1988
- context: parseInt(document.getElementById('layer4-context').value, 10) || 0
1989
- },
1990
- {
1991
- id: "Layer 5 (User override)",
1992
- active: document.getElementById('layer5-active').checked,
1993
- chat: document.getElementById('layer5-chat').checked,
1994
- tools: document.getElementById('layer5-tools').checked,
1995
- reasoning: document.getElementById('layer5-reasoning').checked,
1996
- vision: document.getElementById('layer5-vision').checked,
1997
- context: parseInt(document.getElementById('layer5-context').value, 10) || 0
1998
- }
1999
- ];
2000
-
2001
- // Merge values
2002
- const resolved = { chat: false, tools: false, reasoning: false, vision: false, context: 0 };
2003
- const sources = { chat: 'None', tools: 'None', reasoning: 'None', vision: 'None', context: 'None' };
2004
-
2005
- layers.forEach(layer => {
2006
- if (!layer.active) return;
2007
-
2008
- resolved.chat = layer.chat;
2009
- sources.chat = layer.id;
2010
-
2011
- resolved.tools = layer.tools;
2012
- sources.tools = layer.id;
2013
-
2014
- resolved.reasoning = layer.reasoning;
2015
- sources.reasoning = layer.id;
2016
-
2017
- resolved.vision = layer.vision;
2018
- sources.vision = layer.id;
2019
-
2020
- if (layer.context > 0) {
2021
- resolved.context = layer.context;
2022
- sources.context = layer.id;
2023
- }
2024
- });
2025
-
2026
- // Update UI
2027
- document.getElementById('eff-chat').innerText = resolved.chat;
2028
- document.getElementById('source-chat').innerText = sources.chat;
2029
-
2030
- document.getElementById('eff-tools').innerText = resolved.tools;
2031
- document.getElementById('source-tools').innerText = sources.tools;
2032
-
2033
- document.getElementById('eff-reasoning').innerText = resolved.reasoning;
2034
- document.getElementById('source-reasoning').innerText = sources.reasoning;
2035
-
2036
- document.getElementById('eff-vision').innerText = resolved.vision;
2037
- document.getElementById('source-vision').innerText = sources.vision;
2038
-
2039
- document.getElementById('eff-context').innerText = resolved.context;
2040
- document.getElementById('source-context').innerText = sources.context;
2041
- }
2042
-
2043
- recalculateMergeStack();
2044
-
2045
- // TAB 3: RESOLVER SIMULATION LOGIC
2046
- const activeCandidates = [
2047
- { endpoint: "openai-codex", model: "gpt-5.4" },
2048
- { endpoint: "anthropic-max", model: "claude-sonnet-5" },
2049
- { endpoint: "claude-sdk", model: "sonnet" },
2050
- { endpoint: "openai", model: "gpt-4o" },
2051
- { endpoint: "openai", model: "gpt-4o-mini" },
2052
- { endpoint: "openai", model: "o1-mini" },
2053
- { endpoint: "openai", model: "o3-mini" },
2054
- { endpoint: "ollama", model: "llama3:8b" },
2055
- { endpoint: "ollama", model: "deepseek-r1:8b" },
2056
- { endpoint: "lmstudio", model: "qwen2.5-coder-7b-instruct" },
2057
- { endpoint: "bedrock", model: "anthropic.claude-3-5-sonnet-20241022-v2:0" },
2058
- { endpoint: "openrouter", model: "google/gemini-2.5-pro" }
2059
- ];
2060
-
2061
- function initResolverCandidates() {
2062
- const list = document.getElementById('resolver-candidates-list');
2063
- list.innerHTML = '';
2064
- activeCandidates.forEach(cand => {
2065
- const row = document.createElement('div');
2066
- row.className = 'candidate-row';
2067
- row.innerHTML = `<span class="candidate-endpoint">${cand.endpoint}/</span><span class="candidate-model">${cand.model}</span>`;
2068
- list.appendChild(row);
2069
- });
2070
- }
2071
-
2072
- initResolverCandidates();
2073
-
2074
- function _applyResolverExample(val) {
2075
- document.getElementById('resolver-pattern').value = val;
2076
- runResolverSimulation();
2077
- }
2078
-
2079
- function runResolverSimulation() {
2080
- const pattern = document.getElementById('resolver-pattern').value.trim();
2081
- const trace = document.getElementById('resolver-trace-log');
2082
- const output = document.getElementById('resolver-output');
2083
- const card = document.getElementById('resolver-result-card');
2084
-
2085
- trace.innerHTML = '';
2086
-
2087
- if (!pattern) {
2088
- trace.innerHTML = `<div class="trace-step skipped">Trace: Empty input pattern. Resolver idle.</div>`;
2089
- output.innerText = 'No match';
2090
- output.innerHTML = 'No match <span class="badge-mini" style="color: var(--color-rose);">Error: Empty pattern</span>';
2091
- card.style.borderColor = 'rgba(239, 68, 68, 0.3)';
2092
- return;
2093
- }
2094
-
2095
- // Step 1: Suffix parsing
2096
- let base = pattern;
2097
- let thinkingSuffix ;
2098
- const thinkingLevels = ['off', 'minimal', 'low', 'medium', 'high', 'xhigh', 'max'];
2099
- const lastColon = pattern.lastIndexOf(':');
2100
-
2101
- trace.innerHTML += `<div class="trace-step evaluating"><strong>[Suffix Splitter]</strong> Checking for thinking level suffix...</div>`;
2102
-
2103
- if (lastColon !== -1) {
2104
- const suffix = pattern.slice(lastColon + 1).trim();
2105
- if (thinkingLevels.includes(suffix)) {
2106
- base = pattern.slice(0, lastColon).trim();
2107
- thinkingSuffix = suffix;
2108
- trace.innerHTML += `<div class="trace-step matched">&nbsp;&nbsp;✔ Extracted thinking level suffix: <strong>:${thinkingSuffix}</strong>. Base pattern: "${base}"</div>`;
2109
- } else {
2110
- trace.innerHTML += `<div class="trace-step skipped">&nbsp;&nbsp;ℹ Found colon but suffix "${suffix}" is not a recognized thinking level (low/medium/high/etc). Treated as part of model ID.</div>`;
2111
- }
2112
- } else {
2113
- trace.innerHTML += `<div class="trace-step skipped">&nbsp;&nbsp;ℹ No thinking level suffix found. Defaulting to orchestrator configuration.</div>`;
2114
- }
2115
-
2116
- const lowerBase = base.toLowerCase();
2117
-
2118
- // Step 2: Exact endpoint/model matching
2119
- trace.innerHTML += `<div class="trace-step evaluating"><strong>[Step 1: Exact Match]</strong> Testing exact match of pattern "${base}" against "endpoint/model"...</div>`;
2120
-
2121
- const exactFull = activeCandidates.filter(c => `${c.endpoint}/${c.model}`.toLowerCase() === lowerBase);
2122
- if (exactFull.length > 0) {
2123
- trace.innerHTML += `<div class="trace-step matched">&nbsp;&nbsp;✔ SUCCESS: Exact match hit on "${exactFull[0].endpoint}/${exactFull[0].model}"</div>`;
2124
- resolveOutput(exactFull[0], thinkingSuffix);
2125
- return;
2126
- }
2127
- trace.innerHTML += `<div class="trace-step skipped">&nbsp;&nbsp;✕ No exact match found.</div>`;
2128
-
2129
- // Step 3: Glob matching
2130
- const globChars = /[*?[]/;
2131
- trace.innerHTML += `<div class="trace-step evaluating"><strong>[Step 2: Glob Match]</strong> Testing wildcard pattern...</div>`;
2132
- if (globChars.test(base)) {
2133
- // Convert glob to regex
2134
- const reStr = `^${base.replace(/\*/g, ".*").replace(/\?/g, ".")}$`;
2135
- const regex = new RegExp(reStr, "i");
2136
-
2137
- trace.innerHTML += `<div class="trace-step evaluating">&nbsp;&nbsp;Converted glob "${base}" to RegExp: ${regex.toString()}</div>`;
2138
-
2139
- const globMatches = activeCandidates.filter(c => regex.test(`${c.endpoint}/${c.model}`) || regex.test(c.model));
2140
- if (globMatches.length > 0) {
2141
- trace.innerHTML += `<div class="trace-step matched">&nbsp;&nbsp;✔ SUCCESS: Glob match hit on "${globMatches[0].endpoint}/${globMatches[0].model}"</div>`;
2142
- if (globMatches.length > 1) {
2143
- trace.innerHTML += `<div class="trace-step skipped" style="color:var(--color-amber); border-left-color:var(--color-amber);">&nbsp;&nbsp;⚠ Ambiguity Warning: ${globMatches.length} candidates matched; resolved to first: "${globMatches[0].endpoint}/${globMatches[0].model}"</div>`;
2144
- }
2145
- resolveOutput(globMatches[0], thinkingSuffix, globMatches.length > 1);
2146
- return;
2147
- }
2148
- trace.innerHTML += `<div class="trace-step skipped">&nbsp;&nbsp;✕ Glob regex did not match any targets.</div>`;
2149
- } else {
2150
- trace.innerHTML += `<div class="trace-step skipped">&nbsp;&nbsp;ℹ Pattern does not contain wildcard characters (*, ?, [). Skipping glob checks.</div>`;
2151
- }
2152
-
2153
- // Step 4: Endpoint prefix shortcut matching
2154
- trace.innerHTML += `<div class="trace-step evaluating"><strong>[Step 3: Endpoint Prefix Shortcut]</strong> Testing slash prefix mapping...</div>`;
2155
- const slashIdx = base.indexOf('/');
2156
- if (slashIdx !== -1) {
2157
- const ep = base.slice(0, slashIdx).toLowerCase();
2158
- const mdl = base.slice(slashIdx + 1).toLowerCase();
2159
- const epModel = activeCandidates.filter(c => c.endpoint.toLowerCase() === ep && c.model.toLowerCase() === mdl);
2160
- if (epModel.length > 0) {
2161
- trace.innerHTML += `<div class="trace-step matched">&nbsp;&nbsp;✔ SUCCESS: Resolved endpoint prefix match: "${epModel[0].endpoint}/${epModel[0].model}"</div>`;
2162
- resolveOutput(epModel[0], thinkingSuffix);
2163
- return;
2164
- }
2165
- trace.innerHTML += `<div class="trace-step skipped">&nbsp;&nbsp;✕ Endpoint prefix matched but model id not found under that endpoint.</div>`;
2166
- } else {
2167
- trace.innerHTML += `<div class="trace-step skipped">&nbsp;&nbsp;ℹ Pattern does not contain slash separator. Skipping prefix matching.</div>`;
2168
- }
2169
-
2170
- // Step 5: Bare model exact match
2171
- trace.innerHTML += `<div class="trace-step evaluating"><strong>[Step 4: Bare Model ID Match]</strong> Testing exact model ID match (ignoring endpoint prefix)...</div>`;
2172
- const exactModel = activeCandidates.filter(c => c.model.toLowerCase() === lowerBase);
2173
- if (exactModel.length > 0) {
2174
- trace.innerHTML += `<div class="trace-step matched">&nbsp;&nbsp;✔ SUCCESS: Bare model ID matched under endpoint "${exactModel[0].endpoint}"</div>`;
2175
- resolveOutput(exactModel[0], thinkingSuffix);
2176
- return;
2177
- }
2178
- trace.innerHTML += `<div class="trace-step skipped">&nbsp;&nbsp;✕ No exact bare model ID match found.</div>`;
2179
-
2180
- // Step 6: Bare model substring match
2181
- trace.innerHTML += `<div class="trace-step evaluating"><strong>[Step 5: Bare Model Substring Match]</strong> Testing substring match against active model IDs...</div>`;
2182
- const partial = activeCandidates.filter(c => c.model.toLowerCase().includes(lowerBase));
2183
- if (partial.length > 0) {
2184
- trace.innerHTML += `<div class="trace-step matched">&nbsp;&nbsp;✔ SUCCESS: Partial substring match hit on "${partial[0].endpoint}/${partial[0].model}" (matches "${base}")</div>`;
2185
- if (partial.length > 1) {
2186
- trace.innerHTML += `<div class="trace-step skipped" style="color:var(--color-amber); border-left-color:var(--color-amber);">&nbsp;&nbsp;⚠ Ambiguity Warning: Multiple substrings match; resolved to first: "${partial[0].endpoint}/${partial[0].model}"</div>`;
2187
- }
2188
- resolveOutput(partial[0], thinkingSuffix, partial.length > 1);
2189
- return;
2190
- }
2191
- trace.innerHTML += `<div class="trace-step skipped">&nbsp;&nbsp;✕ Substring search returned no candidates.</div>`;
2192
-
2193
- // Failure
2194
- trace.innerHTML += `<div class="trace-step skipped" style="border-left-color: var(--color-rose); color: #fca5a5;"><strong>[Outcome]</strong> Routing resolution failed: no models match the pattern "${pattern}".</div>`;
2195
- output.innerHTML = `No match <span class="badge-mini" style="color: var(--color-rose);">Error: UNRESOLVED</span>`;
2196
- card.style.borderColor = 'rgba(239, 68, 68, 0.3)';
2197
- }
2198
-
2199
- function resolveOutput(match, thinking, isAmbiguous = false) {
2200
- const output = document.getElementById('resolver-output');
2201
- const card = document.getElementById('resolver-result-card');
2202
- const level = thinking ? thinking : 'off';
2203
-
2204
- let html = `<strong>${match.endpoint}/${match.model}</strong>`;
2205
- html += ` <span class="badge-mini">thinking: ${level}</span>`;
2206
- if (isAmbiguous) {
2207
- html += ` <span class="badge-mini" style="color: var(--color-amber); border-color: rgba(245, 158, 11, 0.3);">Ambiguous match</span>`;
2208
- }
2209
-
2210
- output.innerHTML = html;
2211
- card.style.borderColor = 'rgba(16, 185, 129, 0.4)';
2212
- }
2213
-
2214
- function updateReplayInspector() {
2215
- const provider = document.getElementById("replay-provider").value;
2216
- const cot = document.getElementById("replay-cot").value;
2217
- const answer = document.getElementById("replay-answer").value;
2218
-
2219
- const badge = document.getElementById("replay-mechanism-badge");
2220
- const jsonPre = document.getElementById("replay-payload-json");
2221
- const uiPreview = document.getElementById("replay-ui-preview");
2222
-
2223
- let badgeText = "";
2224
- let jsonContent = "";
2225
- let uiContent = "";
2226
-
2227
- if (provider === "ollama-native") {
2228
- badgeText = "Ollama Native thinking field";
2229
- badge.style.color = "var(--color-cyan)";
2230
- badge.style.borderColor = "var(--color-cyan)";
2231
- badge.style.background = "rgba(0, 240, 255, 0.1)";
2232
-
2233
- const payload = {
2234
- model: "deepseek-r1:8b",
2235
- messages: [
2236
- {
2237
- role: "user",
2238
- content: "What is 2 + 2?"
2239
- },
2240
- {
2241
- role: "assistant",
2242
- thinking: cot,
2243
- content: answer
2244
- }
2245
- ]
2246
- };
2247
- jsonContent = JSON.stringify(payload, null, 2);
2248
- uiContent = `
2249
- <div style="display:flex; flex-direction:column; gap:0.5rem;">
2250
- <div style="font-size:0.75rem; color:var(--text-muted);">Clio logs stream reasoning increments cleanly through the native thinking channel:</div>
2251
- <div style="border-left: 2px solid var(--color-cyan); padding-left: 0.75rem; font-family: var(--font-mono); font-size: 0.8rem; color: var(--text-muted);">${cot.replace(/\n/g, '<br>')}</div>
2252
- <div style="font-weight: 500; margin-top: 0.25rem;">${answer}</div>
2253
- </div>
2254
- `;
2255
- } else if (provider === "lmstudio-native") {
2256
- badgeText = "LM Studio Prepend <think>";
2257
- badge.style.color = "var(--color-purple)";
2258
- badge.style.borderColor = "var(--color-purple)";
2259
- badge.style.background = "rgba(189, 0, 255, 0.1)";
2260
-
2261
- const payload = {
2262
- model: "phi-4",
2263
- messages: [
2264
- {
2265
- role: "user",
2266
- content: "What is 2 + 2?"
2267
- },
2268
- {
2269
- role: "assistant",
2270
- content: `<think>\n${cot}\n</think>\n${answer}`
2271
- }
2272
- ]
2273
- };
2274
- jsonContent = JSON.stringify(payload, null, 2);
2275
- uiContent = `
2276
- <div style="display:flex; flex-direction:column; gap:0.5rem;">
2277
- <div style="font-size:0.75rem; color:var(--text-muted);">Replays prior thinking blocks by prepending them to assistant message payloads wrapped in tags:</div>
2278
- <div style="background: rgba(255,255,255,0.02); border: 1px dashed var(--border-card); padding: 0.5rem; border-radius: 4px; font-family: var(--font-mono); font-size: 0.8rem;">
2279
- <span style="color:var(--color-purple); font-weight:bold;">&lt;think&gt;</span><br>
2280
- ${cot.replace(/\n/g, '<br>')}<br>
2281
- <span style="color:var(--color-purple); font-weight:bold;">&lt;/think&gt;</span><br>
2282
- ${answer}
2283
- </div>
2284
- </div>
2285
- `;
2286
- } else if (provider === "openai-completions") {
2287
- badgeText = "OpenAI reasoning_content parameter";
2288
- badge.style.color = "var(--color-emerald)";
2289
- badge.style.borderColor = "var(--color-emerald)";
2290
- badge.style.background = "rgba(16, 185, 129, 0.1)";
2291
-
2292
- const payload = {
2293
- model: "o1-mini",
2294
- messages: [
2295
- {
2296
- role: "user",
2297
- content: "What is 2 + 2?"
2298
- },
2299
- {
2300
- role: "assistant",
2301
- reasoning_content: cot,
2302
- content: answer
2303
- }
2304
- ]
2305
- };
2306
- jsonContent = JSON.stringify(payload, null, 2);
2307
- uiContent = `
2308
- <div style="display:flex; flex-direction:column; gap:0.5rem;">
2309
- <div style="font-size:0.75rem; color:var(--text-muted);">Preserves reasoning blocks using reasoning_content parameter, ensuring the model maintains CoT across turns:</div>
2310
- <div style="border-left: 2px solid var(--color-emerald); padding-left: 0.75rem; font-family: var(--font-mono); font-size: 0.8rem; color: var(--text-muted);">${cot.replace(/\n/g, '<br>')}</div>
2311
- <div style="font-weight: 500; margin-top: 0.25rem;">${answer}</div>
2312
- </div>
2313
- `;
2314
- } else if (provider === "anthropic-max") {
2315
- badgeText = "Anthropic Extended Thinking";
2316
- badge.style.color = "var(--color-amber)";
2317
- badge.style.borderColor = "var(--color-amber)";
2318
- badge.style.background = "rgba(245, 158, 11, 0.1)";
2319
-
2320
- const payload = {
2321
- model: "claude-sonnet-5",
2322
- max_tokens: 8192,
2323
- thinking: {
2324
- type: "enabled",
2325
- budget_tokens: 2048
2326
- },
2327
- messages: [
2328
- {
2329
- role: "user",
2330
- content: "What is 2 + 2?"
2331
- },
2332
- {
2333
- role: "assistant",
2334
- content: [
2335
- {
2336
- type: "thinking",
2337
- thinking: cot
2338
- },
2339
- {
2340
- type: "text",
2341
- text: answer
2342
- }
2343
- ]
2344
- }
2345
- ]
2346
- };
2347
- jsonContent = JSON.stringify(payload, null, 2);
2348
- uiContent = `
2349
- <div style="display:flex; flex-direction:column; gap:0.5rem;">
2350
- <div style="font-size:0.75rem; color:var(--text-muted);">Uses Anthropic's extended thinking blocks payload format:</div>
2351
- <div style="border-left: 2px solid var(--color-amber); padding-left: 0.75rem; font-family: var(--font-mono); font-size: 0.8rem; color: var(--text-muted);">${cot.replace(/\n/g, '<br>')}</div>
2352
- <div style="font-weight: 500; margin-top: 0.25rem;">${answer}</div>
2353
- </div>
2354
- `;
2355
- }
2356
-
2357
- badge.innerText = badgeText;
2358
- jsonPre.textContent = jsonContent;
2359
- uiPreview.innerHTML = uiContent;
2360
- }
2361
-
2362
- runResolverSimulation();
2363
- updateReplayInspector();
2364
- </script>
2365
- </body>
2366
- </html>