@azure-id/orc 0.55.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (449) hide show
  1. package/CHANGELOG.md +2017 -0
  2. package/README-id.md +521 -0
  3. package/README.md +485 -0
  4. package/bin/build-agents.js +86 -0
  5. package/bin/cli.js +29050 -0
  6. package/bin/mockrun-catalog.js +267 -0
  7. package/bin/onboarding-content.js +172 -0
  8. package/bin/pricing.json +200 -0
  9. package/bin/providers.json +437 -0
  10. package/bin/ui.js +95 -0
  11. package/bin/verify-contracts.js +3277 -0
  12. package/bin/verify-package.js +498 -0
  13. package/bin/webui/api.js +1163 -0
  14. package/bin/webui/app.html +198 -0
  15. package/bin/webui/css/00-tokens.css +92 -0
  16. package/bin/webui/css/01-base.css +42 -0
  17. package/bin/webui/css/02-shell.css +103 -0
  18. package/bin/webui/css/03-components.css +462 -0
  19. package/bin/webui/css/04-motion.css +91 -0
  20. package/bin/webui/css/05-tour.css +100 -0
  21. package/bin/webui/css/06-responsive.css +108 -0
  22. package/bin/webui/css/panels/boundary.css +26 -0
  23. package/bin/webui/css/panels/challenge.css +151 -0
  24. package/bin/webui/css/panels/crosslink.css +194 -0
  25. package/bin/webui/css/panels/docs.css +254 -0
  26. package/bin/webui/css/panels/experiment.css +23 -0
  27. package/bin/webui/css/panels/extra.css +536 -0
  28. package/bin/webui/css/panels/flow.css +177 -0
  29. package/bin/webui/css/panels/handoff.css +67 -0
  30. package/bin/webui/css/panels/knowledge.css +86 -0
  31. package/bin/webui/css/panels/learn.css +154 -0
  32. package/bin/webui/css/panels/maintenance.css +55 -0
  33. package/bin/webui/css/panels/mockrun.css +268 -0
  34. package/bin/webui/css/panels/overview.css +100 -0
  35. package/bin/webui/css/panels/pact.css +43 -0
  36. package/bin/webui/css/panels/runs.css +105 -0
  37. package/bin/webui/css/panels/settings.css +227 -0
  38. package/bin/webui/css/panels/stats.css +87 -0
  39. package/bin/webui/fixtures/boundary.js +92 -0
  40. package/bin/webui/fixtures/challenge.js +825 -0
  41. package/bin/webui/fixtures/crosslink.js +31 -0
  42. package/bin/webui/fixtures/docs.js +982 -0
  43. package/bin/webui/fixtures/extra.js +1934 -0
  44. package/bin/webui/fixtures/flow.js +81 -0
  45. package/bin/webui/fixtures/handoff.js +35 -0
  46. package/bin/webui/fixtures/index.js +486 -0
  47. package/bin/webui/fixtures/knowledge.js +291 -0
  48. package/bin/webui/fixtures/maintenance.js +42 -0
  49. package/bin/webui/fixtures/mockrun.js +36 -0
  50. package/bin/webui/fixtures/pact.js +111 -0
  51. package/bin/webui/fixtures/runs.js +109 -0
  52. package/bin/webui/fixtures/settings.js +78 -0
  53. package/bin/webui/fixtures/shell.js +48 -0
  54. package/bin/webui/fixtures/stats.js +104 -0
  55. package/bin/webui/i18n/TERMS.md +134 -0
  56. package/bin/webui/i18n/en/banner.json +29 -0
  57. package/bin/webui/i18n/en/boundary.json +20 -0
  58. package/bin/webui/i18n/en/challenge.json +106 -0
  59. package/bin/webui/i18n/en/common.json +69 -0
  60. package/bin/webui/i18n/en/crosslink.json +69 -0
  61. package/bin/webui/i18n/en/docs.json +175 -0
  62. package/bin/webui/i18n/en/experiment.json +17 -0
  63. package/bin/webui/i18n/en/extra.json +313 -0
  64. package/bin/webui/i18n/en/flow.json +30 -0
  65. package/bin/webui/i18n/en/handoff.json +37 -0
  66. package/bin/webui/i18n/en/knowledge.json +141 -0
  67. package/bin/webui/i18n/en/learn.json +16 -0
  68. package/bin/webui/i18n/en/maintenance.json +52 -0
  69. package/bin/webui/i18n/en/mockrun.json +19 -0
  70. package/bin/webui/i18n/en/nav.json +19 -0
  71. package/bin/webui/i18n/en/overview.json +89 -0
  72. package/bin/webui/i18n/en/pact.json +36 -0
  73. package/bin/webui/i18n/en/runs.json +51 -0
  74. package/bin/webui/i18n/en/settings.json +49 -0
  75. package/bin/webui/i18n/en/stats.json +69 -0
  76. package/bin/webui/i18n/en/tour.json +33 -0
  77. package/bin/webui/i18n/id/banner.json +29 -0
  78. package/bin/webui/i18n/id/boundary.json +20 -0
  79. package/bin/webui/i18n/id/challenge.json +106 -0
  80. package/bin/webui/i18n/id/common.json +70 -0
  81. package/bin/webui/i18n/id/crosslink.json +69 -0
  82. package/bin/webui/i18n/id/docs.json +175 -0
  83. package/bin/webui/i18n/id/experiment.json +17 -0
  84. package/bin/webui/i18n/id/extra.json +313 -0
  85. package/bin/webui/i18n/id/flow.json +30 -0
  86. package/bin/webui/i18n/id/handoff.json +37 -0
  87. package/bin/webui/i18n/id/knowledge.json +141 -0
  88. package/bin/webui/i18n/id/learn.json +16 -0
  89. package/bin/webui/i18n/id/maintenance.json +52 -0
  90. package/bin/webui/i18n/id/mockrun.json +19 -0
  91. package/bin/webui/i18n/id/nav.json +19 -0
  92. package/bin/webui/i18n/id/overview.json +89 -0
  93. package/bin/webui/i18n/id/pact.json +36 -0
  94. package/bin/webui/i18n/id/runs.json +51 -0
  95. package/bin/webui/i18n/id/settings.json +49 -0
  96. package/bin/webui/i18n/id/stats.json +69 -0
  97. package/bin/webui/i18n/id/tour.json +33 -0
  98. package/bin/webui/js/00-core.js +115 -0
  99. package/bin/webui/js/01-i18n.js +149 -0
  100. package/bin/webui/js/02-ui.js +211 -0
  101. package/bin/webui/js/03-md.js +286 -0
  102. package/bin/webui/js/04-router.js +51 -0
  103. package/bin/webui/js/05-banners.js +172 -0
  104. package/bin/webui/js/06-edit.js +183 -0
  105. package/bin/webui/js/90-tour.js +488 -0
  106. package/bin/webui/js/91-shortcuts.js +126 -0
  107. package/bin/webui/js/99-boot.js +118 -0
  108. package/bin/webui/js/panels/boundary.js +104 -0
  109. package/bin/webui/js/panels/challenge.js +781 -0
  110. package/bin/webui/js/panels/crosslink.js +654 -0
  111. package/bin/webui/js/panels/docs.js +1338 -0
  112. package/bin/webui/js/panels/experiment.js +98 -0
  113. package/bin/webui/js/panels/extra.js +3011 -0
  114. package/bin/webui/js/panels/flow.js +297 -0
  115. package/bin/webui/js/panels/handoff.js +169 -0
  116. package/bin/webui/js/panels/knowledge.js +890 -0
  117. package/bin/webui/js/panels/learn.js +220 -0
  118. package/bin/webui/js/panels/maintenance.js +235 -0
  119. package/bin/webui/js/panels/mockrun.js +227 -0
  120. package/bin/webui/js/panels/overview.js +447 -0
  121. package/bin/webui/js/panels/pact.js +189 -0
  122. package/bin/webui/js/panels/runs.js +416 -0
  123. package/bin/webui/js/panels/settings.js +573 -0
  124. package/bin/webui/js/panels/stats.js +378 -0
  125. package/bin/webui/serve.js +557 -0
  126. package/mock-run/INDEX.md +106 -0
  127. package/mock-run/a-normal-day.md +587 -0
  128. package/mock-run/context-combiner.md +100 -0
  129. package/mock-run/extra-recovery.md +330 -0
  130. package/mock-run/extra-slots.md +177 -0
  131. package/mock-run/media/README.md +43 -0
  132. package/mock-run/orc-aftermath.md +392 -0
  133. package/mock-run/orc-boundary.md +356 -0
  134. package/mock-run/orc-brainstorm.md +177 -0
  135. package/mock-run/orc-budget.md +534 -0
  136. package/mock-run/orc-challenge-council.md +262 -0
  137. package/mock-run/orc-challenge.md +416 -0
  138. package/mock-run/orc-cli.md +200 -0
  139. package/mock-run/orc-diy.md +129 -0
  140. package/mock-run/orc-doc.md +448 -0
  141. package/mock-run/orc-explain.md +86 -0
  142. package/mock-run/orc-export.md +423 -0
  143. package/mock-run/orc-extra.md +392 -0
  144. package/mock-run/orc-fast.md +106 -0
  145. package/mock-run/orc-grill.md +151 -0
  146. package/mock-run/orc-handoff.md +480 -0
  147. package/mock-run/orc-pact.md +421 -0
  148. package/mock-run/orc-pattern.md +112 -0
  149. package/mock-run/orc-plan.md +108 -0
  150. package/mock-run/orc-pr-setup.md +126 -0
  151. package/mock-run/orc-quick.md +113 -0
  152. package/mock-run/orc-route.md +93 -0
  153. package/mock-run/orc-ui.md +125 -0
  154. package/mock-run/orc-ultra.md +103 -0
  155. package/mock-run/orc.md +157 -0
  156. package/mock-run/the-example-project.md +55 -0
  157. package/package.json +39 -0
  158. package/templates/agents/MODEL-MAPPING.md +168 -0
  159. package/templates/agents/orc-advisor-fable-5.md +50 -0
  160. package/templates/agents/orc-advisor-opus-5-xhigh.md +56 -0
  161. package/templates/agents/orc-analyst-fable-5.md +115 -0
  162. package/templates/agents/orc-analyze-mini-opus-5-med.md +60 -0
  163. package/templates/agents/orc-analyze-mini-sonnet-5-high.md +58 -0
  164. package/templates/agents/orc-challenge-advisor-opus-5-med.md +75 -0
  165. package/templates/agents/orc-challenge-contrarian-opus-5-high.md +110 -0
  166. package/templates/agents/orc-challenge-executor-opus-5-med.md +114 -0
  167. package/templates/agents/orc-challenge-expansionist-opus-5-med.md +112 -0
  168. package/templates/agents/orc-challenge-judge-opus-5-high.md +132 -0
  169. package/templates/agents/orc-challenge-outsider-opus-5-low.md +109 -0
  170. package/templates/agents/orc-challenge-principles-opus-5-high.md +109 -0
  171. package/templates/agents/orc-challenge-reader-opus-5-low.md +90 -0
  172. package/templates/agents/orc-claude-writer-opus-4-8-high.md +53 -0
  173. package/templates/agents/orc-claude-writer-opus-5-med.md +55 -0
  174. package/templates/agents/orc-context-combiner-opus-5-high.md +88 -0
  175. package/templates/agents/orc-doc-checker-opus-5-low.md +108 -0
  176. package/templates/agents/orc-doc-writer-opus-5-med.md +134 -0
  177. package/templates/agents/orc-executor-haiku-4-5.md +113 -0
  178. package/templates/agents/orc-executor-opus-4-7-high.md +114 -0
  179. package/templates/agents/orc-executor-opus-4-7-med.md +114 -0
  180. package/templates/agents/orc-executor-opus-4-8-high.md +114 -0
  181. package/templates/agents/orc-executor-opus-5-high.md +114 -0
  182. package/templates/agents/orc-executor-opus-5-low.md +114 -0
  183. package/templates/agents/orc-executor-opus-5-med.md +114 -0
  184. package/templates/agents/orc-executor-sonnet-4-6-high.md +114 -0
  185. package/templates/agents/orc-executor-sonnet-4-6-med.md +114 -0
  186. package/templates/agents/orc-executor-sonnet-5-high.md +114 -0
  187. package/templates/agents/orc-judge-fable-5.md +79 -0
  188. package/templates/agents/orc-judge-opus-5-xhigh.md +85 -0
  189. package/templates/agents/orc-learn-writer-opus-5-low.md +73 -0
  190. package/templates/agents/orc-pattern-codifier-opus-5-med.md +65 -0
  191. package/templates/agents/orc-pattern-codifier-sonnet-5-high.md +63 -0
  192. package/templates/agents/orc-planner-fable-5.md +152 -0
  193. package/templates/agents/orc-planner-mini-opus-5-med.md +69 -0
  194. package/templates/agents/orc-planner-mini-sonnet-5-high.md +67 -0
  195. package/templates/agents/orc-planner-opus-5-med.md +160 -0
  196. package/templates/agents/orc-retro-opus-5-med.md +73 -0
  197. package/templates/agents/orc-retro-sonnet-5-high.md +72 -0
  198. package/templates/agents/orc-reviewer-fable-5.md +57 -0
  199. package/templates/agents/orc-reviewer-opus-5-med.md +60 -0
  200. package/templates/agents/orc-scout-opus-5-low.md +40 -0
  201. package/templates/agents/orc-scout-sonnet-4-6-high.md +39 -0
  202. package/templates/agents/orc-system-analyst-opus-5-high.md +120 -0
  203. package/templates/agents/orc-test-author-opus-5-med.md +71 -0
  204. package/templates/agents/orc-trace-writer-haiku-4-5.md +107 -0
  205. package/templates/agents/orc-verifier-opus-5-med.md +69 -0
  206. package/templates/agents/orc-wiki-scanner-opus-4-8-high.md +79 -0
  207. package/templates/agents/orc-wiki-scanner-opus-5-med.md +81 -0
  208. package/templates/agents/orc-wiki-scanner-sonnet-5-high.md +106 -0
  209. package/templates/commands/orc-aftermath.md +49 -0
  210. package/templates/commands/orc-analyze.md +21 -0
  211. package/templates/commands/orc-boundary.md +46 -0
  212. package/templates/commands/orc-brainstorm.md +51 -0
  213. package/templates/commands/orc-budget.md +54 -0
  214. package/templates/commands/orc-challenge.md +58 -0
  215. package/templates/commands/orc-claude.md +14 -0
  216. package/templates/commands/orc-diy.md +13 -0
  217. package/templates/commands/orc-doc.md +128 -0
  218. package/templates/commands/orc-explain.md +20 -0
  219. package/templates/commands/orc-export.md +46 -0
  220. package/templates/commands/orc-fast.md +15 -0
  221. package/templates/commands/orc-grill.md +40 -0
  222. package/templates/commands/orc-handoff.md +52 -0
  223. package/templates/commands/orc-learn.md +17 -0
  224. package/templates/commands/orc-mini.md +12 -0
  225. package/templates/commands/orc-pact.md +44 -0
  226. package/templates/commands/orc-pattern.md +15 -0
  227. package/templates/commands/orc-plan.md +22 -0
  228. package/templates/commands/orc-poly.md +21 -0
  229. package/templates/commands/orc-pr-driver.md +30 -0
  230. package/templates/commands/orc-pr-setup.md +31 -0
  231. package/templates/commands/orc-quick.md +33 -0
  232. package/templates/commands/orc-retro.md +17 -0
  233. package/templates/commands/orc-route.md +41 -0
  234. package/templates/commands/orc-ultra.md +17 -0
  235. package/templates/commands/orc-verify.md +11 -0
  236. package/templates/commands/orc-wiki.md +42 -0
  237. package/templates/commands/orc.md +16 -0
  238. package/templates/hooks/orc-effort-guard.js +178 -0
  239. package/templates/hooks/orc-statusline.js +305 -0
  240. package/templates/hooks/orc-trace.js +471 -0
  241. package/templates/hooks/orc-update-lib.js +125 -0
  242. package/templates/skills/_shared/README.md +50 -0
  243. package/templates/skills/_shared/detecting-artifacts.md +90 -0
  244. package/templates/skills/_shared/drift-recovery.md +98 -0
  245. package/templates/skills/_shared/extra-dispatch.md +1051 -0
  246. package/templates/skills/_shared/fable5-override.md +56 -0
  247. package/templates/skills/_shared/fallback-handoff.md +42 -0
  248. package/templates/skills/_shared/gh-stack-commands.md +65 -0
  249. package/templates/skills/_shared/gotchas.md +177 -0
  250. package/templates/skills/_shared/interview.md +144 -0
  251. package/templates/skills/_shared/lane-suspend.md +82 -0
  252. package/templates/skills/_shared/opus5-only.md +131 -0
  253. package/templates/skills/_shared/pr-templates.md +106 -0
  254. package/templates/skills/_shared/read-ladder.md +54 -0
  255. package/templates/skills/_shared/return-validation.md +145 -0
  256. package/templates/skills/_shared/smoke-gate.md +28 -0
  257. package/templates/skills/_shared/stack-plan.md +135 -0
  258. package/templates/skills/_shared/untrusted-input.md +63 -0
  259. package/templates/skills/context-combiner/SKILL.md +187 -0
  260. package/templates/skills/context-combiner/schemas/combined-report.md +78 -0
  261. package/templates/skills/context-combiner/schemas/combined-requirement-spec.md +87 -0
  262. package/templates/skills/orc/README.md +150 -0
  263. package/templates/skills/orc/SKILL.md +526 -0
  264. package/templates/skills/orc/config.md +389 -0
  265. package/templates/skills/orc/examples/full-run-mock.md +73 -0
  266. package/templates/skills/orc/references/analyst-gates.md +124 -0
  267. package/templates/skills/orc/references/effort-and-mode.md +224 -0
  268. package/templates/skills/orc/references/house-rules.md +20 -0
  269. package/templates/skills/orc/references/intake.md +120 -0
  270. package/templates/skills/orc/references/log-protocol.md +39 -0
  271. package/templates/skills/orc/references/pattern-gate.md +89 -0
  272. package/templates/skills/orc/references/plan-handoff.md +84 -0
  273. package/templates/skills/orc/references/preflight-report.md +220 -0
  274. package/templates/skills/orc/references/security-checklist.md +39 -0
  275. package/templates/skills/orc/references/stop-and-resume.md +160 -0
  276. package/templates/skills/orc/references/trace-protocol.md +314 -0
  277. package/templates/skills/orc/references/ultra-mode.md +123 -0
  278. package/templates/skills/orc/references/wave-grouping.md +121 -0
  279. package/templates/skills/orc/references/wiki-consult.md +177 -0
  280. package/templates/skills/orc/schemas/checkpoint.md +122 -0
  281. package/templates/skills/orc/schemas/intent-spec.md +42 -0
  282. package/templates/skills/orc/schemas/planning-output.md +279 -0
  283. package/templates/skills/orc/subskills/orc-checkpoint/SKILL.md +55 -0
  284. package/templates/skills/orc/subskills/orc-execution/SKILL.md +72 -0
  285. package/templates/skills/orc/subskills/orc-execution/core.md +151 -0
  286. package/templates/skills/orc/subskills/orc-execution/subagent.md +13 -0
  287. package/templates/skills/orc/subskills/orc-planner/SKILL.md +264 -0
  288. package/templates/skills/orc/subskills/orc-planner-mini/SKILL.md +121 -0
  289. package/templates/skills/orc/subskills/orc-pr/SKILL.md +51 -0
  290. package/templates/skills/orc/subskills/orc-pr/pr.md +22 -0
  291. package/templates/skills/orc/subskills/orc-pr/stack-gate.md +108 -0
  292. package/templates/skills/orc/subskills/orc-review-verify/SKILL.md +76 -0
  293. package/templates/skills/orc/subskills/orc-review-verify/core.md +135 -0
  294. package/templates/skills/orc/subskills/orc-review-verify/subagent.md +7 -0
  295. package/templates/skills/orc/subskills/orc-testgen/SKILL.md +45 -0
  296. package/templates/skills/orc/subskills/orc-testgen/core.md +59 -0
  297. package/templates/skills/orc/subskills/orc-testgen/subagent.md +7 -0
  298. package/templates/skills/orc-advisor/SKILL.md +60 -0
  299. package/templates/skills/orc-aftermath/SKILL.md +136 -0
  300. package/templates/skills/orc-aftermath/references/report.md +95 -0
  301. package/templates/skills/orc-analyze/SKILL.md +220 -0
  302. package/templates/skills/orc-analyze/examples/analyze-mock.md +42 -0
  303. package/templates/skills/orc-analyze/references/branching.md +51 -0
  304. package/templates/skills/orc-analyze/references/deep-mode.md +27 -0
  305. package/templates/skills/orc-analyze/references/thin-input.md +77 -0
  306. package/templates/skills/orc-analyze/schemas/report-audit.md +83 -0
  307. package/templates/skills/orc-analyze/schemas/report-prose.md +63 -0
  308. package/templates/skills/orc-analyze/schemas/report-requirement.md +78 -0
  309. package/templates/skills/orc-analyze/schemas/requirement-spec.md +77 -0
  310. package/templates/skills/orc-analyze-mini/SKILL.md +112 -0
  311. package/templates/skills/orc-analyze-mini/examples/quick-analysis-mock.md +31 -0
  312. package/templates/skills/orc-boundary/SKILL.md +208 -0
  313. package/templates/skills/orc-boundary/references/card.md +78 -0
  314. package/templates/skills/orc-boundary/references/gate.md +113 -0
  315. package/templates/skills/orc-brainstorm/SKILL.md +339 -0
  316. package/templates/skills/orc-brainstorm/references/brainstorm-doc.md +133 -0
  317. package/templates/skills/orc-brainstorm/references/lenses.md +152 -0
  318. package/templates/skills/orc-budget/SKILL.md +225 -0
  319. package/templates/skills/orc-budget/references/corpus.md +87 -0
  320. package/templates/skills/orc-challenge/README.md +142 -0
  321. package/templates/skills/orc-challenge/SKILL.md +255 -0
  322. package/templates/skills/orc-challenge/examples/code-module.md +110 -0
  323. package/templates/skills/orc-challenge/examples/council-full-roster.md +273 -0
  324. package/templates/skills/orc-challenge/examples/tsd-two-iterations.md +213 -0
  325. package/templates/skills/orc-challenge/references/conservation.md +107 -0
  326. package/templates/skills/orc-challenge/references/council.md +315 -0
  327. package/templates/skills/orc-challenge/references/cycle-state.md +185 -0
  328. package/templates/skills/orc-challenge/references/dimensions.md +121 -0
  329. package/templates/skills/orc-challenge/references/fix-brief.md +130 -0
  330. package/templates/skills/orc-challenge/references/intake.md +171 -0
  331. package/templates/skills/orc-challenge/references/kinds.md +44 -0
  332. package/templates/skills/orc-challenge/references/plain-english.md +98 -0
  333. package/templates/skills/orc-challenge/references/rubric.md +109 -0
  334. package/templates/skills/orc-challenge/references/sealed-slice.md +97 -0
  335. package/templates/skills/orc-challenge/references/verdict-doc.md +154 -0
  336. package/templates/skills/orc-claude/SKILL.md +199 -0
  337. package/templates/skills/orc-claude/examples/claude-run-mock.md +65 -0
  338. package/templates/skills/orc-claude/references/refresh.md +76 -0
  339. package/templates/skills/orc-claude/references/template.md +109 -0
  340. package/templates/skills/orc-diy/README.md +142 -0
  341. package/templates/skills/orc-diy/SKILL.md +70 -0
  342. package/templates/skills/orc-diy/references/blocks/analyze.md +24 -0
  343. package/templates/skills/orc-diy/references/blocks/execution.md +42 -0
  344. package/templates/skills/orc-diy/references/blocks/extra.md +55 -0
  345. package/templates/skills/orc-diy/references/blocks/header.md +55 -0
  346. package/templates/skills/orc-diy/references/blocks/mock-example.md +22 -0
  347. package/templates/skills/orc-diy/references/blocks/pattern.md +18 -0
  348. package/templates/skills/orc-diy/references/blocks/planning.md +34 -0
  349. package/templates/skills/orc-diy/references/blocks/review.md +18 -0
  350. package/templates/skills/orc-diy/references/blocks/scoring.md +16 -0
  351. package/templates/skills/orc-diy/references/blocks/security.md +25 -0
  352. package/templates/skills/orc-diy/references/blocks/ship.md +25 -0
  353. package/templates/skills/orc-diy/references/blocks/summary.md +18 -0
  354. package/templates/skills/orc-diy/references/blocks/testgen.md +17 -0
  355. package/templates/skills/orc-diy/references/blocks/trace.md +28 -0
  356. package/templates/skills/orc-diy/references/blocks/verify.md +25 -0
  357. package/templates/skills/orc-diy/references/blocks/wiki.md +26 -0
  358. package/templates/skills/orc-diy/references/compile.md +59 -0
  359. package/templates/skills/orc-diy/references/flow-schema.md +100 -0
  360. package/templates/skills/orc-diy/references/locked-blocks.md +37 -0
  361. package/templates/skills/orc-doc/README.md +229 -0
  362. package/templates/skills/orc-doc/SKILL.md +444 -0
  363. package/templates/skills/orc-doc/examples/orc-doc-prd-run.md +325 -0
  364. package/templates/skills/orc-doc/references/chunking.md +527 -0
  365. package/templates/skills/orc-doc/references/gates.md +311 -0
  366. package/templates/skills/orc-doc/references/generation-rules.md +122 -0
  367. package/templates/skills/orc-doc/references/house-rules.md +170 -0
  368. package/templates/skills/orc-doc/references/import-targets.md +40 -0
  369. package/templates/skills/orc-doc/references/plain-language.md +66 -0
  370. package/templates/skills/orc-doc/references/portable-markdown.md +74 -0
  371. package/templates/skills/orc-doc/references/resume-protocol.md +228 -0
  372. package/templates/skills/orc-doc/references/templates/collaboration.md +118 -0
  373. package/templates/skills/orc-doc/references/templates/prd.md +133 -0
  374. package/templates/skills/orc-doc/references/templates/report.md +102 -0
  375. package/templates/skills/orc-doc/references/templates/tsd.md +122 -0
  376. package/templates/skills/orc-doc/references/templates/workflow.md +112 -0
  377. package/templates/skills/orc-explain/SKILL.md +57 -0
  378. package/templates/skills/orc-export/SKILL.md +154 -0
  379. package/templates/skills/orc-fast/SKILL.md +188 -0
  380. package/templates/skills/orc-grill/SKILL.md +207 -0
  381. package/templates/skills/orc-grill/references/grill-doc.md +105 -0
  382. package/templates/skills/orc-handoff/SKILL.md +204 -0
  383. package/templates/skills/orc-handoff/references/handoff-log.md +67 -0
  384. package/templates/skills/orc-handoff/references/surfaces.md +88 -0
  385. package/templates/skills/orc-judge/SKILL.md +82 -0
  386. package/templates/skills/orc-learn/SKILL.md +156 -0
  387. package/templates/skills/orc-learn/examples/learn-run-mock.md +61 -0
  388. package/templates/skills/orc-learn/references/deepen.md +70 -0
  389. package/templates/skills/orc-learn/references/refresh.md +65 -0
  390. package/templates/skills/orc-learn/references/template-knowledge.md +83 -0
  391. package/templates/skills/orc-learn/references/template-learning.md +67 -0
  392. package/templates/skills/orc-mini/SKILL.md +226 -0
  393. package/templates/skills/orc-mini/examples/mini-run-mock.md +50 -0
  394. package/templates/skills/orc-pact/SKILL.md +218 -0
  395. package/templates/skills/orc-pact/references/gate.md +70 -0
  396. package/templates/skills/orc-pact/references/ledger.md +99 -0
  397. package/templates/skills/orc-pattern/SKILL.md +124 -0
  398. package/templates/skills/orc-pattern/references/INDEX.md +73 -0
  399. package/templates/skills/orc-pattern/references/be-django.md +80 -0
  400. package/templates/skills/orc-pattern/references/be-express.md +82 -0
  401. package/templates/skills/orc-pattern/references/be-fastapi.md +107 -0
  402. package/templates/skills/orc-pattern/references/be-go.md +96 -0
  403. package/templates/skills/orc-pattern/references/be-nestjs.md +86 -0
  404. package/templates/skills/orc-pattern/references/be-postgres.md +98 -0
  405. package/templates/skills/orc-pattern/references/fe-a11y.md +36 -0
  406. package/templates/skills/orc-pattern/references/fe-angular.md +87 -0
  407. package/templates/skills/orc-pattern/references/fe-nextjs.md +65 -0
  408. package/templates/skills/orc-pattern/references/fe-perf.md +39 -0
  409. package/templates/skills/orc-pattern/references/fe-react.md +83 -0
  410. package/templates/skills/orc-pattern/references/fe-vue.md +75 -0
  411. package/templates/skills/orc-pattern/schemas/pattern-doc.md +62 -0
  412. package/templates/skills/orc-poly/SKILL.md +216 -0
  413. package/templates/skills/orc-poly/examples/poly-run-mock.md +51 -0
  414. package/templates/skills/orc-poly/references/gather.md +70 -0
  415. package/templates/skills/orc-poly/references/poly-spec.md +84 -0
  416. package/templates/skills/orc-pr-driver/README.md +349 -0
  417. package/templates/skills/orc-pr-driver/SKILL.md +167 -0
  418. package/templates/skills/orc-pr-driver/references/conflict-playbook.md +78 -0
  419. package/templates/skills/orc-pr-driver/references/green-gate.md +105 -0
  420. package/templates/skills/orc-pr-driver/references/orc-run-split.md +99 -0
  421. package/templates/skills/orc-pr-setup/README.md +436 -0
  422. package/templates/skills/orc-pr-setup/SKILL.md +184 -0
  423. package/templates/skills/orc-pr-setup/references/certainty-gate.md +66 -0
  424. package/templates/skills/orc-pr-setup/references/layer-taxonomy.md +67 -0
  425. package/templates/skills/orc-quick/README.md +423 -0
  426. package/templates/skills/orc-quick/SKILL.md +306 -0
  427. package/templates/skills/orc-quick/references/context-doc.md +114 -0
  428. package/templates/skills/orc-quick/references/dispatch-gate.md +163 -0
  429. package/templates/skills/orc-quick/references/gh-mode.md +127 -0
  430. package/templates/skills/orc-retro/SKILL.md +222 -0
  431. package/templates/skills/orc-retro/examples/retro-mock.md +171 -0
  432. package/templates/skills/orc-route/SKILL.md +165 -0
  433. package/templates/skills/orc-verify/SKILL.md +86 -0
  434. package/templates/skills/orc-verify/examples/verify-mock.md +33 -0
  435. package/templates/skills/orc-wiki/README.md +325 -0
  436. package/templates/skills/orc-wiki/SKILL.md +322 -0
  437. package/templates/skills/orc-wiki/examples/wiki-run-mock.md +37 -0
  438. package/templates/skills/orc-wiki/references/claude-md-injection.md +61 -0
  439. package/templates/skills/orc-wiki/references/crosslink-compile.md +39 -0
  440. package/templates/skills/orc-wiki/references/crosslink-kinds.md +57 -0
  441. package/templates/skills/orc-wiki/references/crosslink.md +284 -0
  442. package/templates/skills/orc-wiki/references/extra.md +79 -0
  443. package/templates/skills/orc-wiki/references/integrity-check.md +86 -0
  444. package/templates/skills/orc-wiki/references/orientation.md +51 -0
  445. package/templates/skills/orc-wiki/references/partial-refresh.md +203 -0
  446. package/templates/skills/orc-wiki/references/pattern-prewarm.md +19 -0
  447. package/templates/skills/orc-wiki/references/staleness.md +288 -0
  448. package/templates/skills/orc-wiki/schemas/crosslink-tag.md +166 -0
  449. package/templates/skills/orc-wiki/schemas/wiki-doc.md +120 -0
@@ -0,0 +1,536 @@
1
+ /* panels/extra.css — the Extra panel (v0.50.0), "Integrate with other AI model".
2
+
3
+ Loaded by app.html in the order its <link> sits in that manifest, and for CSS
4
+ the load order IS the cascade order — which is why 06-responsive and 04-motion
5
+ come after every panel sheet.
6
+
7
+ NO COLOUR TOKEN IS DEFINED HERE. Every one of them is declared once, on bare
8
+ :root, in 00-tokens.css.
9
+
10
+ The connect animation (v0.50.0) lives here as a keyframe; the reduced-motion
11
+ rule that REMOVES it lives in 04-motion.css with every other one, because
12
+ there is exactly ONE such media block in this codebase and a test asserts that
13
+ the literal appears in no panel sheet — including in a comment like this one,
14
+ which is why this paragraph does not spell it out. */
15
+
16
+ /* --- the boundary card ---------------------------------------------------- */
17
+ /* It renders ALWAYS and never behind a hover or a fold: somebody about to send
18
+ their source code to a third party should not have to go looking for the
19
+ paragraph that says so. The accent edge is what stops it reading as chrome. */
20
+ .ex-boundary { border-left: 3px solid var(--accent); }
21
+ .ex-boundary-line { margin: 0 0 var(--sp-2); color: var(--text-dim); font-size: 13px; line-height: 1.55; }
22
+ .ex-boundary-line:first-of-type { color: var(--text); }
23
+
24
+ /* --- the header strip ----------------------------------------------------- */
25
+ /* Same shape as Knowledge's, and for the same reason: the numbers that answer
26
+ "what is set up here?" belong on one line above everything else. A `—` means
27
+ the CLI could not compute it, and that is an ANSWER. */
28
+ .ex-strip {
29
+ display: flex;
30
+ flex-wrap: wrap;
31
+ gap: var(--sp-4);
32
+ padding: var(--sp-3);
33
+ border: 1px solid var(--line-soft);
34
+ border-radius: var(--radius-sm);
35
+ }
36
+ .ex-strip-item { display: grid; gap: 2px; }
37
+ .ex-strip-value { font-size: 18px; font-weight: 600; font-variant-numeric: tabular-nums; }
38
+ .ex-strip-label { font-size: 11px; color: var(--text-faint); text-transform: uppercase; letter-spacing: .04em; }
39
+
40
+ /* --- one connection ------------------------------------------------------- */
41
+ .ex-profile {
42
+ border: 1px solid var(--line-soft);
43
+ border-radius: var(--radius-sm);
44
+ padding: var(--sp-3);
45
+ margin-top: var(--sp-2);
46
+ display: grid;
47
+ gap: var(--sp-2);
48
+ }
49
+ .ex-name { font-weight: 600; }
50
+ .ex-finding { display: block; }
51
+
52
+ /* The model names a real connection test read back. They are ids, so they are
53
+ monospace, and the row scrolls inside itself rather than widening the page. */
54
+ .ex-models {
55
+ display: flex;
56
+ flex-wrap: wrap;
57
+ gap: var(--sp-1);
58
+ max-height: 92px;
59
+ overflow: auto;
60
+ scrollbar-width: thin;
61
+ scrollbar-color: var(--line) transparent;
62
+ }
63
+ .ex-models::-webkit-scrollbar { width: 8px; height: 8px; }
64
+ .ex-models::-webkit-scrollbar-track { background: transparent; }
65
+ .ex-models::-webkit-scrollbar-thumb { background: var(--line); border-radius: 4px; }
66
+ .ex-model {
67
+ font-size: 11px;
68
+ color: var(--text-dim);
69
+ background: var(--surface-2);
70
+ border-radius: var(--radius-sm);
71
+ padding: 1px var(--sp-2);
72
+ }
73
+
74
+ /* --- the provider catalog ------------------------------------------------- */
75
+ /* A fixed-width tile grid, so the catalog is the same picture whatever is in it
76
+ — the VAULT lesson: a box sized by its longest label cannot be laid out by
77
+ arithmetic. It wraps; it never squeezes. */
78
+ .ex-provider-grid {
79
+ display: grid;
80
+ grid-template-columns: repeat(auto-fill, minmax(210px, 1fr));
81
+ gap: var(--sp-2);
82
+ margin: var(--sp-2) 0;
83
+ }
84
+ .ex-provider {
85
+ border: 1px solid var(--line-soft);
86
+ border-radius: var(--radius-sm);
87
+ padding: var(--sp-3);
88
+ display: grid;
89
+ gap: var(--sp-2);
90
+ align-content: start;
91
+ }
92
+ .ex-provider-id { font-weight: 600; font-size: 13px; }
93
+ .ex-provider-label { color: var(--text-dim); font-size: 12px; }
94
+ .ex-link { color: var(--accent); font-size: 12px; text-decoration: none; }
95
+ .ex-link:hover { text-decoration: underline; }
96
+
97
+ /* --- the connect modal: the probe note, the wire, the result -------------- */
98
+ /* R11's first animation. The pulse travels from this machine to the provider
99
+ and lands green or red — the feedback that makes an invisible network call
100
+ feel like an event, in the one place where a user has no other way to tell
101
+ whether anything happened. */
102
+
103
+ .ex-probe {
104
+ border-left: 3px solid var(--line);
105
+ padding-left: var(--sp-3);
106
+ display: grid;
107
+ gap: 2px;
108
+ }
109
+ .ex-probe-head { font-weight: 600; font-size: 13px; }
110
+
111
+ .ex-wire {
112
+ display: flex;
113
+ align-items: center;
114
+ gap: var(--sp-2);
115
+ padding: var(--sp-3) 0;
116
+ }
117
+ .ex-wire-end {
118
+ font-size: 11px;
119
+ color: var(--text-faint);
120
+ text-transform: uppercase;
121
+ letter-spacing: .04em;
122
+ white-space: nowrap;
123
+ }
124
+ /* The line is the only thing that changes colour, so the whole state of the
125
+ probe reads at a glance without a single word moving. */
126
+ .ex-wire-line {
127
+ position: relative;
128
+ flex: 1 1 auto;
129
+ min-width: 40px;
130
+ height: 2px;
131
+ border-radius: 2px;
132
+ background: var(--line);
133
+ transition: background var(--dur) var(--ease);
134
+ }
135
+ .ex-wire-dot {
136
+ position: absolute;
137
+ top: 50%;
138
+ left: 0;
139
+ width: 8px;
140
+ height: 8px;
141
+ margin-top: -4px;
142
+ border-radius: 50%;
143
+ background: var(--accent);
144
+ opacity: 0;
145
+ }
146
+ /* INFINITE while the probe is in flight, because a probe has no known duration
147
+ — which is exactly why 04-motion.css removes this outright rather than
148
+ capping it: a capped infinite animation freezes mid-travel, and a dot stopped
149
+ half way across reads as a request that hung. */
150
+ .ex-wire-live .ex-wire-dot { animation: ex-travel 1100ms var(--ease) infinite; }
151
+ .ex-wire-live .ex-wire-line { background: var(--accent-dim); }
152
+ .ex-wire-ok .ex-wire-line { background: var(--ok); }
153
+ .ex-wire-bad .ex-wire-line { background: var(--bad); }
154
+ @keyframes ex-travel {
155
+ 0% { left: 0; opacity: 0; }
156
+ 15% { opacity: 1; }
157
+ 85% { opacity: 1; }
158
+ 100% { left: 100%; opacity: 0; }
159
+ }
160
+
161
+ .ex-result { display: grid; gap: var(--sp-2); }
162
+ .ex-result-ok,
163
+ .ex-result-bad {
164
+ display: grid;
165
+ gap: var(--sp-2);
166
+ padding: var(--sp-3);
167
+ border-radius: var(--radius-sm);
168
+ border: 1px solid var(--line-soft);
169
+ }
170
+ .ex-result-ok { border-left: 3px solid var(--ok); }
171
+ .ex-result-bad { border-left: 3px solid var(--bad); }
172
+ /* v0.53.0 — the verdict LANDS rather than appears. A probe has no known
173
+ duration, so the dot loops while it runs (`.ex-wire-dot`, removed outright
174
+ under reduced motion) and this is the punctuation at the end of it. ONE SHOT,
175
+ finishing at its resting state, so 04-motion.css can cap it without freezing
176
+ anything half way — and the border colour still carries the whole result with
177
+ motion off. */
178
+ .ex-result-ok,
179
+ .ex-result-bad { animation: ex-land var(--dur) var(--ease); }
180
+ @keyframes ex-land {
181
+ from { opacity: 0; transform: translateY(-4px); }
182
+ to { opacity: 1; transform: none; }
183
+ }
184
+
185
+ /* `hidden` LOSES to an author `display`, which is how a form ends up showing the
186
+ fields it just hid: `.field` is a flex box and `.banner` is a flex box, and an
187
+ author rule beats the UA stylesheet's `[hidden] { display: none }` whatever
188
+ its specificity. Every box this form hides is named here.
189
+
190
+ The engine `cli` fields, the region picker on a provider with one region and
191
+ the paste-a-key warning all shipped VISIBLE in the first draft because of
192
+ exactly this. */
193
+ .ex-form-hide[hidden] { display: none; }
194
+
195
+ /* The credential choice. The recommended option is first and selected, and the
196
+ other one is offered with its cost printed beside it rather than hidden. */
197
+ .ex-cred-choice { display: grid; gap: var(--sp-2); }
198
+ .ex-cred-opt { display: flex; align-items: center; gap: var(--sp-2); font-size: 13px; }
199
+
200
+ .ex-save { display: grid; gap: var(--sp-2); margin-top: var(--sp-2); }
201
+
202
+ /* --- the band ladder (v0.53.0) ------------------------------------------- */
203
+ /* ONE VERTICAL LADDER, and the row you read is the row you edit.
204
+ It replaces a horizontal 0→100 rail plus a separate list of editable rows —
205
+ the same data twice, with only the second copy interactive.
206
+
207
+ The proportional bar is a width INSIDE the row rather than the row's own
208
+ width. That is the whole geometric fix: the old rail gave each segment
209
+ `flex: 0 0 var(--w)` with `min-width: 128px`, so the floor fought the
210
+ percentage and a 10-point band came out nearly as wide as a 30-point one
211
+ while the axis underneath promised they were to scale. A full-width track
212
+ holding a `var(--w)` bar is honest at every viewport, needs no floor, needs
213
+ no horizontal scroll, and can never clip a target name. */
214
+
215
+ .ex-ladder { display: grid; gap: var(--sp-1); margin: var(--sp-3) 0 var(--sp-2); }
216
+ .ex-band {
217
+ border: 1px solid var(--line-soft);
218
+ border-radius: var(--radius-sm);
219
+ overflow: hidden;
220
+ }
221
+ .ex-band.open { border-color: var(--accent); }
222
+ /* A GRID, and it DECLARES ITS COLUMNS — the .run-card lesson. Five children,
223
+ five columns, every one of them fixed except the two that hold text. */
224
+ .ex-band-head {
225
+ display: grid;
226
+ grid-template-columns: minmax(0, 22%) minmax(0, auto) minmax(0, 1fr) auto 16px;
227
+ align-items: center;
228
+ gap: var(--sp-2);
229
+ width: 100%;
230
+ padding: var(--sp-2) var(--sp-3);
231
+ background: none;
232
+ border: 0;
233
+ text-align: left;
234
+ color: inherit;
235
+ font: inherit;
236
+ cursor: pointer;
237
+ }
238
+ .ex-band-head:hover { background: var(--surface-2); }
239
+ .ex-band.open > .ex-band-head { background: var(--surface-2); }
240
+ .ex-band-track {
241
+ display: block;
242
+ height: 10px;
243
+ border-radius: 999px;
244
+ background: var(--line-soft);
245
+ overflow: hidden;
246
+ }
247
+ /* The one-shot entrance: the bar grows to its width on first paint and FINISHES
248
+ at its resting state, so 04-motion.css can cap it without freezing anything
249
+ mid-way — the one-shot rule the staged-segment grow already followed. */
250
+ .ex-band-bar {
251
+ display: block;
252
+ width: var(--w);
253
+ height: 100%;
254
+ border-radius: 999px;
255
+ animation: ex-grow var(--dur-slow) var(--ease);
256
+ }
257
+ .ex-band-claude { background: var(--accent-dim); }
258
+ .ex-band-extra { background: var(--ok); }
259
+ /* A staged bar is dashed as well as animated: the dashed edge is what carries
260
+ the meaning when motion is off. */
261
+ .ex-band-staged { outline: 1px dashed var(--text-faint); outline-offset: 1px; }
262
+ @keyframes ex-grow {
263
+ from { transform: scaleX(.15); transform-origin: left center; opacity: .35; }
264
+ to { transform: none; opacity: 1; }
265
+ }
266
+ .ex-band-mid { display: grid; gap: 1px; min-width: 0; }
267
+ .ex-band-label { font-size: 12px; font-weight: 600; white-space: nowrap; }
268
+ .ex-band-range { font-size: 11px; white-space: nowrap; }
269
+ /* NEVER TRUNCATED. The target is the most important fact in the row, and it was
270
+ the one thing the old rail clipped. It wraps instead. */
271
+ .ex-band-target { font-size: 12px; min-width: 0; overflow-wrap: anywhere; }
272
+ .ex-band-chips { display: flex; flex-wrap: wrap; gap: 2px; align-items: center; justify-content: flex-end; }
273
+ .ex-band-caret { color: var(--text-faint); transition: transform var(--dur-fast) var(--ease); justify-self: end; }
274
+ .ex-band.open .ex-band-caret { transform: rotate(90deg); }
275
+ .ex-band-pane:not(:empty) {
276
+ padding: var(--sp-3);
277
+ border-top: 1px solid var(--line-soft);
278
+ }
279
+
280
+ /* THE POSITIONS (v0.55.0) — the same row, minus the bar.
281
+
282
+ A band has a width because it covers a range of scores. A POSITION covers
283
+ nothing: it is a point. So this row reuses `.ex-band` wholesale and simply
284
+ DECLARES ONE FEWER COLUMN, rather than drawing a bar at some invented width
285
+ the CLI never computed. The `.run-card` lesson stated once more: a row whose
286
+ child count differs from another's must declare its own columns, never
287
+ inherit a template built for a different number of children. */
288
+ .ex-slot-head { grid-template-columns: minmax(0, 22%) minmax(0, auto) minmax(0, 1fr) auto 16px; }
289
+ .ex-slot-when { font-size: 11px; white-space: normal; overflow-wrap: anywhere; }
290
+ /* The six `extra_roles` values nothing resolves. Reported, never fixed, and
291
+ visually quiet: a permanent honest gap is not a caution. */
292
+ .ex-unreachable {
293
+ margin-top: var(--sp-3);
294
+ padding-top: var(--sp-2);
295
+ border-top: 1px solid var(--line-soft);
296
+ }
297
+ .ex-unreachable-list { display: grid; gap: 2px; margin-top: var(--sp-1); }
298
+ .ex-lane-slot { display: flex; flex-wrap: wrap; gap: 4px; padding-left: var(--sp-2); }
299
+
300
+ /* THE LEGEND. Two colours were carrying the whole meaning of the picture and
301
+ neither was ever named anywhere on the page. */
302
+ .ex-legend { display: flex; flex-wrap: wrap; gap: var(--sp-3); align-items: center; }
303
+ .ex-legend-item { display: inline-flex; align-items: center; gap: var(--sp-2); }
304
+ .ex-legend-swatch { width: 18px; height: 10px; border-radius: 999px; flex: 0 0 auto; }
305
+
306
+ .ex-route-controls { display: flex; flex-wrap: wrap; gap: var(--sp-2); align-items: center; }
307
+ .ex-route-controls .text-input { flex: 1 1 160px; min-width: 0; }
308
+ .ex-route-staged { display: flex; align-items: center; gap: var(--sp-2); flex-wrap: wrap; }
309
+
310
+ /* --- what it ran, and what it cost (W12) ---------------------------------- */
311
+ /* Every routed band keeps its slot, including one nothing has run through — a
312
+ row that reads `—` everywhere is an ANSWER, and dropping it would make "this
313
+ band cost nothing" and "nothing has run here yet" identical. */
314
+ .ex-cost-row {
315
+ border: 1px solid var(--line-soft);
316
+ border-radius: var(--radius-sm);
317
+ padding: var(--sp-3);
318
+ margin-top: var(--sp-2);
319
+ display: grid;
320
+ gap: var(--sp-2);
321
+ }
322
+ .ex-cost-list {
323
+ border-left: 3px solid var(--warn);
324
+ padding-left: var(--sp-3);
325
+ margin-top: var(--sp-3);
326
+ display: grid;
327
+ gap: 2px;
328
+ }
329
+ .ex-rates { margin-top: var(--sp-3); display: grid; gap: var(--sp-2); justify-items: start; }
330
+ .ex-rates pre { max-height: 240px; overflow: auto; width: 100%; }
331
+
332
+ /* --- the local tools, the gate and the live result (v0.51.0) -------------- */
333
+ /* A tool box is a GRID and it DECLARES its shape per state, because the four
334
+ states carry different numbers of children — the `.run-card` lesson: a grid
335
+ that does not declare its columns prints one child on top of another. Every
336
+ state gets its own border colour so the card that needs an action is the one
337
+ your eye lands on. */
338
+ .ex-tool-grid {
339
+ display: grid;
340
+ grid-template-columns: repeat(auto-fill, minmax(300px, 1fr));
341
+ gap: var(--sp-3);
342
+ margin-top: var(--sp-3);
343
+ }
344
+ /* v0.53.0 — A TOOL CARD IS CHILD-COUNT AGNOSTIC, AND THAT IS NOT A PREFERENCE.
345
+ v0.52.0 declared `grid-template-rows: auto auto auto 1fr auto` here to absorb
346
+ the height difference between two tools in ONE place, and the diagnosis was
347
+ right. The remedy was not: FOUR STATES CARRY FOUR DIFFERENT NUMBERS OF
348
+ CHILDREN, so a POSITIONAL row template cannot describe this card. A
349
+ ready-and-verified card has exactly five children — head, kv, path, the
350
+ "connected as" chip, actions — so the chip landed in the `1fr` slack row, a
351
+ grid item defaults to `align-self: stretch`, and `border-radius: 999px` on a
352
+ tall full-width box drew a ~250px green ELLIPSE. It hit whichever card had the
353
+ shortest content in its row, so it was never about one tool.
354
+
355
+ So: no row template at all. The footer is pushed down by the FREE SPACE, and
356
+ nothing can be stretched by a slot it was never meant to occupy. This cannot
357
+ break when a fifth state joins. */
358
+ .ex-tool {
359
+ border: 1px solid var(--line-soft);
360
+ border-radius: var(--radius-sm);
361
+ padding: var(--sp-3);
362
+ display: flex;
363
+ flex-direction: column;
364
+ gap: var(--sp-2);
365
+ }
366
+ .ex-tool > .row-actions:last-child { margin-top: auto; }
367
+ /* v0.53.0 — and when the state's diagnostics disclosure is the last child, IT
368
+ absorbs the slack instead. Same rule, one child further down: whatever is at
369
+ the bottom of the card lines up across the row. */
370
+ .ex-tool > .ex-more:last-child { margin-top: auto; }
371
+ /* A CHIP STATES A FACT. It is never a layout element and it never stretches —
372
+ in either axis. */
373
+ .ex-tool > .chip { align-self: flex-start; flex: 0 0 auto; }
374
+ .ex-tool .kv { align-content: start; }
375
+ /* The one genuinely unbounded field. `auth_detail` is DIAGNOSTIC, not prose, so
376
+ it is clamped rather than allowed to make one card taller than its neighbour
377
+ on its own. */
378
+ .ex-tool .kv dd.ex-auth-detail {
379
+ display: -webkit-box;
380
+ -webkit-line-clamp: 2;
381
+ -webkit-box-orient: vertical;
382
+ overflow: hidden;
383
+ }
384
+ /* The disclosure a tool card's diagnostics live behind. A native <details>, so
385
+ the marker is the browser's — only the summary needs to read like the rest of
386
+ the panel. */
387
+ .ex-more { margin-top: var(--sp-1); }
388
+ .ex-more > summary {
389
+ cursor: pointer;
390
+ font-size: 12px;
391
+ color: var(--text-dim);
392
+ list-style: revert;
393
+ }
394
+ .ex-more > summary:hover { color: var(--text); }
395
+ .ex-more[open] > summary { margin-bottom: var(--sp-2); }
396
+ .ex-more > *:not(summary) { margin-top: var(--sp-2); }
397
+ /* The "why" disclosure sits under a card's instruction line, so it is indented
398
+ to read as a footnote to it rather than as another instruction. */
399
+ .ex-why { margin-top: calc(var(--sp-1) * -1); }
400
+ .ex-why > summary { font-size: 11px; }
401
+
402
+ .ex-tool-absent { border-color: var(--bad); }
403
+ .ex-tool-outdated,
404
+ .ex-tool-unauthenticated { border-color: var(--warn); }
405
+ .ex-tool-ready { border-color: var(--ok); }
406
+ .ex-tool-name { font-weight: 600; }
407
+ .ex-tool-path { word-break: break-all; }
408
+
409
+ /* PREVIEW THEN APPLY: the exact command sits ABOVE the button that runs it, and
410
+ it is selectable so the paste-it-yourself path is always open. */
411
+ .ex-install,
412
+ .ex-keyhelp { display: grid; gap: var(--sp-2); justify-items: start; }
413
+ .ex-install .action-cmd,
414
+ .ex-keyhelp .action-cmd { width: 100%; user-select: text; }
415
+
416
+ /* WHICH LANE A BAND GOVERNS (v0.52.0). One row per lane, and every row keeps
417
+ its slot whatever its verdict — filtering out the lanes that never route
418
+ would make "this lane cannot go foreign" and "I have not configured it yet"
419
+ look identical. The OFF-phase-keeps-its-slot rule, one panel over. */
420
+ .ex-lanes { display: grid; gap: var(--sp-2); margin-top: var(--sp-2); }
421
+ .ex-lane {
422
+ display: grid;
423
+ gap: 4px;
424
+ padding: var(--sp-2) var(--sp-3);
425
+ border-left: 2px solid var(--line-soft);
426
+ }
427
+ .ex-lane-name { font-weight: 600; }
428
+
429
+ /* THE GATE. It is a banner rather than a card because it is not a thing you
430
+ configure — it is the reason the things below it are missing. */
431
+ .ex-gate { display: grid; gap: var(--sp-2); }
432
+ .ex-gate-head { font-weight: 600; }
433
+
434
+ /* The model control. A dropdown and a text box occupy the same slot, so the row
435
+ does not change width when the CLI answers `list` instead of `free-text`. */
436
+ /* `flex` belongs to the ROUTING ROW, which lays these out horizontally. Left on
437
+ the base class it also applied inside the test modal's `.field` — a COLUMN
438
+ flex container — where `flex-grow: 1` stretched the control to fill the form
439
+ and left a hand's width of dead space under the picker. */
440
+ .ex-modelbox { display: grid; gap: 4px; min-width: 0; }
441
+ .ex-route-controls .ex-modelbox { flex: 1 1 220px; }
442
+ .ex-modelbox > .text-input { width: 100%; }
443
+
444
+ /* THE LIVE RESULT. The reply is a third party's text: it scrolls inside its own
445
+ box and never widens the modal. */
446
+ .ex-live {
447
+ border-top: 1px solid var(--line-soft);
448
+ margin-top: var(--sp-3);
449
+ padding-top: var(--sp-3);
450
+ display: grid;
451
+ gap: var(--sp-2);
452
+ }
453
+ .ex-live-reply { max-height: 200px; overflow: auto; }
454
+
455
+ /* A tool box carries SENTENCES, not paths, so it opts out of the global
456
+ `word-break: break-all` that a base URL needs — that rule broke ordinary
457
+ words mid-syllable in the one card written to be read rather than scanned.
458
+ The binary PATH keeps the break, because a path has no word boundaries. */
459
+ .ex-tool .kv dd { word-break: normal; overflow-wrap: anywhere; }
460
+ .ex-tool-path { word-break: break-all; }
461
+
462
+ /* A <select> inside a grid stretches to the row, which made the model picker a
463
+ 120px-tall box with one line in it. It sizes itself. */
464
+ .ex-modelbox > select.text-input { align-self: start; height: auto; }
465
+
466
+ /* The live result is PROSE beside numbers — the honest "this tool does not say
467
+ which model answered" sentence lives in a `kv` value, and the global
468
+ `word-break: break-all` was hyphenating it mid-word. Same reasoning as
469
+ `.ex-tool`: a path breaks anywhere, a sentence breaks on spaces. */
470
+ .ex-live .kv dd { word-break: normal; overflow-wrap: anywhere; }
471
+
472
+ /* ── RECOVERY (v0.54.0) ──────────────────────────────────────────────────────
473
+ One row per journal directory, EXPANDED IN PLACE — the Runs-row rule: there
474
+ is no detail box below the list.
475
+
476
+ A ROW IS A FLEX COLUMN, NOT A DECLARED GRID. Five states carry five different
477
+ numbers of children (an orphan has no outcome chip, a single attempt has no
478
+ attempt chip, engine `cli` has no per-turn note), and `.ex-tool`'s 250px
479
+ ellipse is what a declared row template does to a card whose child count
480
+ changes with its state. A chip states a FACT — it is never a layout element. */
481
+ .ex-rec-list { display: flex; flex-direction: column; gap: var(--sp-2); }
482
+ .ex-rec-row {
483
+ border: 1px solid var(--line-soft);
484
+ border-radius: var(--r-md);
485
+ background: var(--surface-1);
486
+ overflow: hidden;
487
+ }
488
+ .ex-rec-head {
489
+ display: flex;
490
+ align-items: center;
491
+ gap: var(--sp-3);
492
+ width: 100%;
493
+ padding: var(--sp-2) var(--sp-3);
494
+ background: none;
495
+ border: 0;
496
+ color: inherit;
497
+ font: inherit;
498
+ text-align: left;
499
+ cursor: pointer;
500
+ }
501
+ .ex-rec-head:hover { background: var(--surface-2); }
502
+ .ex-rec-row.open > .ex-rec-head { background: var(--surface-2); }
503
+ .ex-rec-task { font-weight: 600; flex: 0 0 auto; }
504
+ /* The identity may be long and must not push the caret off the row. */
505
+ .ex-rec-who { flex: 1 1 auto; min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
506
+ .ex-rec-chips { display: inline-flex; flex-wrap: wrap; gap: var(--sp-2); flex: 0 0 auto; }
507
+ .ex-rec-caret { color: var(--text-faint); transition: transform var(--dur-fast) var(--ease); flex: 0 0 auto; }
508
+ .ex-rec-row.open .ex-rec-caret { transform: rotate(90deg); }
509
+ .ex-rec-pane:not(:empty) { padding: var(--sp-3); border-top: 1px solid var(--line-soft); }
510
+
511
+ .ex-rec-attr,
512
+ .ex-rec-files,
513
+ .ex-rec-acc,
514
+ .ex-rec-floor {
515
+ border: 1px solid var(--line-soft);
516
+ border-radius: var(--r-sm);
517
+ padding: var(--sp-2) var(--sp-3);
518
+ display: flex;
519
+ flex-direction: column;
520
+ gap: var(--sp-1);
521
+ }
522
+ /* A RECOVERED VECTOR IS A FLOOR and is drawn distinctly, so it can never be
523
+ mistaken for a measured total. */
524
+ .ex-rec-floor { border-color: var(--warn-line, var(--line)); }
525
+ .ex-rec-file { gap: var(--sp-2); }
526
+ .ex-rec-file .mono { flex: 1 1 auto; min-width: 0; overflow-wrap: anywhere; }
527
+
528
+ .ex-rel { display: flex; flex-direction: column; gap: var(--sp-2); }
529
+ .ex-rel-row {
530
+ display: flex;
531
+ flex-direction: column;
532
+ gap: var(--sp-1);
533
+ border: 1px solid var(--line-soft);
534
+ border-radius: var(--r-sm);
535
+ padding: var(--sp-2) var(--sp-3);
536
+ }