@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,108 @@
1
+ /* 06-responsive.css — orc ui
2
+ The width breakpoints that cross panel boundaries (the rail becomes a strip,
3
+ the Learn rail becomes a scrollable row). They override rules from the shell
4
+ AND from four panels, so they load after every one of them — the same reason
5
+ 04-motion.css is last. Breakpoints that only touch ONE panel stay in that
6
+ panel's file.
7
+
8
+ The <link> ORDER in app.html is the cascade order, and the numeric
9
+ prefix is that order. No @import: it would carry no session token and
10
+ 401. */
11
+
12
+ /* --------------------------------------------------------------- RESPONSIVE */
13
+
14
+ @media (max-width: 1040px) {
15
+ /* The Learn rail stops being a rail and becomes a scrollable strip above the
16
+ reading pane — a 244px column plus prose does not fit twice over. */
17
+ .learn { grid-template-columns: 1fr; }
18
+ .learn-side { position: static; max-height: none; }
19
+ .learn-nav { flex-direction: row; overflow-x: auto; padding-bottom: 2px; }
20
+ .learn-nav-item { flex: 0 0 auto; max-width: 210px; }
21
+ }
22
+
23
+ @media (max-width: 900px) {
24
+ .shell { grid-template-columns: 1fr; }
25
+ .rail {
26
+ position: static;
27
+ height: auto;
28
+ flex-direction: row;
29
+ align-items: center;
30
+ gap: var(--sp-4);
31
+ overflow-x: auto;
32
+ border-right: 0;
33
+ border-bottom: 1px solid var(--line-soft);
34
+ }
35
+ .nav { flex-direction: row; flex-wrap: nowrap; }
36
+ .nav a { white-space: nowrap; }
37
+ .rail-foot { flex-direction: row; align-items: center; }
38
+ .rail-project { max-width: 180px; }
39
+ .main { padding: var(--sp-4); }
40
+ .setting { grid-template-columns: 1fr; }
41
+ .setting-control { align-items: flex-start; }
42
+ /* Every `.run-card` VARIANT collapses explicitly. A variant that inherits a
43
+ column count it does not have is the v0.49.2 Overview collision again, just
44
+ at a narrower width. */
45
+ .run-card { grid-template-columns: 16px 80px minmax(0, 1fr); }
46
+ .run-card.no-caret { grid-template-columns: 80px minmax(0, 1fr); }
47
+ .run-card.has-extra { grid-template-columns: 16px 80px auto minmax(0, 1fr); }
48
+ .run-card.no-caret.has-extra { grid-template-columns: 80px auto minmax(0, 1fr); }
49
+ .run-age { grid-column: 3; }
50
+ .run-card.no-caret .run-age { grid-column: 2; }
51
+ .run-card.has-extra .run-age { grid-column: 4; }
52
+ .run-card.no-caret.has-extra .run-age { grid-column: 3; }
53
+ .todo { grid-template-columns: 4px minmax(0, 1fr); }
54
+ .todo-cta { grid-column: 2; margin-top: var(--sp-2); }
55
+ /* Extra. v0.50.0 brought the rail's segment floor down here so a band was
56
+ never squeezed to a sliver. v0.53.0 deleted that floor entirely: the band
57
+ ladder puts the proportional bar INSIDE a full-width row, so there is
58
+ nothing left to squeeze and nothing left to tune per viewport. What the
59
+ ladder does need at this width is for its head to stop pretending it has
60
+ five columns. */
61
+ .ex-band-head { grid-template-columns: minmax(0, 30%) minmax(0, auto) minmax(0, 1fr) 16px; }
62
+ /* v0.55.0 — EVERY VARIANT COLLAPSES EXPLICITLY. A position row has no bar, so
63
+ its first column is the slot name rather than a track; leaving it on the
64
+ band template here would put the target under the caret. */
65
+ .ex-slot-head { grid-template-columns: minmax(0, 40%) minmax(0, 1fr) 16px; }
66
+ .ex-slot-when { grid-column: 1 / -1; }
67
+ .ex-band-chips { grid-column: 1 / -1; justify-content: flex-start; }
68
+ .ex-route-controls { align-items: stretch; }
69
+ .ex-route-controls .btn { width: 100%; }
70
+ /* v0.53.0 — `.ex-tool` was the one `.ex-*` block with no entry here at all.
71
+ At this width a tool card's actions are the reason you opened the panel, so
72
+ they go full width rather than being squeezed onto the end of a row. */
73
+ .ex-tool > .row-actions:not(:first-child) { align-items: stretch; }
74
+ .ex-tool > .row-actions:not(:first-child) .btn { width: 100%; }
75
+ /* v0.54.0 — a recovery row's identity is the longest thing in it, so at this
76
+ width it takes its own line rather than truncating a profile and a model
77
+ into nothing. The row is a FLEX COLUMN, so this is a wrap rather than a
78
+ second grid template. */
79
+ .ex-rec-head { flex-wrap: wrap; }
80
+ .ex-rec-who { flex: 1 1 100%; white-space: normal; }
81
+ }
82
+
83
+ @media (max-width: 600px) {
84
+ /* Below this there is no honest way to keep a chip, a slug and an age on one
85
+ line, so the card stacks: chip, then the slug and where it stands, then the
86
+ age. One column, in reading order. */
87
+ .run-card,
88
+ .run-card.no-caret,
89
+ .run-card.has-extra,
90
+ .run-card.no-caret.has-extra {
91
+ grid-template-columns: minmax(0, 1fr);
92
+ gap: var(--sp-2);
93
+ }
94
+ .run-caret { display: none; }
95
+ .run-card .run-age { grid-column: 1; }
96
+ /* Extra: the provider catalog stops being a grid — below this a two-column
97
+ tile cannot hold a base URL and two links without wrapping mid-word — and
98
+ the connect form's two columns become one. */
99
+ .ex-provider-grid { grid-template-columns: minmax(0, 1fr); }
100
+ .ex-strip { gap: var(--sp-3); }
101
+ .ex-route-controls > * { flex: 1 1 100%; }
102
+ /* The tool card's head stops being a row: a label, a binary name and a state
103
+ chip cannot share a line honestly below this. */
104
+ .ex-tool > .row-actions:first-child { flex-direction: column; align-items: flex-start; }
105
+ /* A per-file position line cannot hold a path, a state word and a line delta
106
+ on one row below this — and the path is the half that must stay readable. */
107
+ .ex-rec-file { flex-direction: column; align-items: flex-start; }
108
+ }
@@ -0,0 +1,26 @@
1
+ /* panels/boundary.css — orc ui
2
+ The checklist — what would make a REFUSE a yes. It is the product, so it is
3
+ the most legible thing on the card.
4
+
5
+ The <link> ORDER in app.html is the cascade order, and the numeric
6
+ prefix is that order. No @import: it would carry no session token and
7
+ 401. */
8
+
9
+ .checklist {
10
+ background: var(--surface-2);
11
+ border-radius: var(--radius-sm);
12
+ padding: var(--sp-3);
13
+ }
14
+ .checklist-head {
15
+ font-size: 11.5px;
16
+ text-transform: uppercase;
17
+ letter-spacing: .07em;
18
+ color: var(--text-dim);
19
+ margin-bottom: var(--sp-2);
20
+ }
21
+ .checklist-row { display: flex; align-items: center; gap: var(--sp-2); flex-wrap: wrap; font-size: 13px; }
22
+ .checklist-row + .checklist-row { margin-top: var(--sp-2); }
23
+ .checklist-box { color: var(--text-dim); font-family: var(--mono); }
24
+
25
+ /* A paid action. Deliberately quiet - it is not a call to action, it is an
26
+ honest statement that this panel cannot do the thing. */
@@ -0,0 +1,151 @@
1
+ /* panels/challenge.css — orc ui
2
+ The iteration timeline, the convergence chart, the findings.
3
+
4
+ The <link> ORDER in app.html is the cascade order, and the numeric
5
+ prefix is that order. No @import: it would carry no session token and
6
+ 401. */
7
+
8
+ /* ================================================================ CHALLENGE */
9
+ /* Reuses the existing palette tokens — no new colours. The convergence bar is
10
+ deliberately the same visual family as the budget cost bar, because both are
11
+ "one row, several kinds, stacked, and the KINDS must stay visibly separate". */
12
+
13
+ .ch-list .run-where { text-transform: none; }
14
+
15
+ /* --- the goal block, the reader score --- */
16
+ .ch-score { display: flex; align-items: baseline; gap: var(--sp-3); }
17
+ .ch-score-num {
18
+ font: 600 30px/1 var(--mono, ui-monospace, SFMono-Regular, Menlo, monospace);
19
+ color: var(--accent);
20
+ }
21
+
22
+ /* --- the iteration timeline (the hero) ---------------------------------- */
23
+ /* The wrapper SCROLLS rather than squeezing: the SVG carries an intrinsic width
24
+ solved from the node box, so a 14-iteration cycle is legible sideways instead
25
+ of illegible in place. A transparent track, both syntaxes — neither falls back
26
+ to the other. */
27
+ .ch-rail-wrap {
28
+ overflow-x: auto;
29
+ overflow-y: hidden;
30
+ padding-bottom: var(--sp-2);
31
+ scrollbar-width: thin;
32
+ scrollbar-color: var(--line) transparent;
33
+ }
34
+ .ch-rail-wrap::-webkit-scrollbar { height: 8px; }
35
+ .ch-rail-wrap::-webkit-scrollbar-track { background: transparent; }
36
+ .ch-rail-wrap::-webkit-scrollbar-thumb { background: var(--line); border-radius: 4px; }
37
+ .ch-rail { display: block; }
38
+ .ch-rail-link { stroke: var(--line); stroke-width: 2; }
39
+ /* A version break: a comparison across one is not a comparison, so it is drawn,
40
+ not implied. */
41
+ .ch-rail-break { stroke: var(--warn); stroke-width: 2; stroke-dasharray: 3 3; }
42
+ .ch-rail-breaklabel { fill: var(--warn); font-size: 10px; }
43
+ .ch-rail-box { fill: var(--surface-2); stroke: var(--line); stroke-width: 1.5; }
44
+ .ch-rail-node.pass .ch-rail-box { stroke: var(--ok); fill: var(--ok-wash); }
45
+ .ch-rail-node.fail .ch-rail-box { stroke: var(--warn); fill: var(--warn-wash); }
46
+ .ch-rail-n { fill: var(--text); font: 600 15px/1 var(--mono, ui-monospace, monospace); }
47
+ .ch-rail-verdict { fill: var(--text-dim); font-size: 11px; }
48
+ /* Staggered entrance, `backwards` so the geometry lands once and the delay never
49
+ leaves a node invisible. */
50
+ .ch-rail-node { animation: ch-node-in .28s ease-out backwards; }
51
+ @keyframes ch-node-in { from { opacity: 0; transform: translateY(6px); } to { opacity: 1; transform: none; } }
52
+
53
+ /* --- the convergence chart ---------------------------------------------- */
54
+ .ch-conv { margin-top: var(--sp-3); display: grid; gap: var(--sp-1); }
55
+ .ch-conv-row { display: grid; grid-template-columns: 2ch minmax(0, 1fr) 3ch; align-items: center; gap: var(--sp-2); }
56
+ .ch-conv-n, .ch-conv-blocking { font: 500 12px/1 var(--mono, ui-monospace, monospace); color: var(--text-faint); }
57
+ .ch-conv-blocking { text-align: right; color: var(--text-dim); }
58
+ .ch-conv-bar { display: flex; height: 12px; border-radius: 3px; overflow: hidden; background: var(--surface-3); }
59
+ /* Draws left to right on open, once: the SHAPE of the trend is the information,
60
+ so animating it is the fastest way to read it. */
61
+ .ch-conv-seg { width: var(--w); animation: ch-grow .5s ease-out backwards; }
62
+ @keyframes ch-grow { from { width: 0; } to { width: var(--w); } }
63
+ .ch-sev-p0 { background: var(--bad); }
64
+ .ch-sev-p1 { background: var(--warn); }
65
+ .ch-sev-p2 { background: var(--accent-dim); }
66
+ .ch-sev-p3 { background: var(--idle); }
67
+
68
+ /* --- findings ------------------------------------------------------------ */
69
+ .ch-finding {
70
+ border: 1px solid var(--line-soft);
71
+ border-radius: var(--radius-sm);
72
+ padding: var(--sp-3);
73
+ margin-top: var(--sp-3);
74
+ display: grid;
75
+ gap: var(--sp-2);
76
+ }
77
+ .ch-anchor { color: var(--text-faint); font-size: 12px; }
78
+ .ch-quote {
79
+ margin: 0;
80
+ padding-left: var(--sp-3);
81
+ border-left: 3px solid var(--line);
82
+ color: var(--text-dim);
83
+ overflow-wrap: anywhere;
84
+ }
85
+ /* The paste block is wide by nature. It scrolls INSIDE itself — the page body
86
+ never scrolls horizontally. */
87
+ .ch-prompt { max-height: 320px; overflow: auto; scrollbar-width: thin; scrollbar-color: var(--line) transparent; }
88
+ .ch-prompt::-webkit-scrollbar { width: 8px; height: 8px; }
89
+ .ch-prompt::-webkit-scrollbar-track { background: transparent; }
90
+ .ch-prompt::-webkit-scrollbar-thumb { background: var(--line); border-radius: 4px; }
91
+
92
+ /* --- the council (v0.49.1) ----------------------------------------------- */
93
+ /* One row per roster lens. A NOT-RUN row keeps its slot and a NOT-SELECTED row
94
+ renders muted (`.row-muted`, defined once in 03-components.css) — filtering
95
+ either out makes "the contrarian found nothing" and "the contrarian never
96
+ ran" look identical. Same reason an OFF phase keeps its slot in the Flow
97
+ stepper. */
98
+ .ch-lens-row {
99
+ border: 1px solid var(--line-soft);
100
+ border-radius: var(--radius-sm);
101
+ padding: var(--sp-3);
102
+ margin-top: var(--sp-2);
103
+ display: grid;
104
+ gap: var(--sp-1);
105
+ }
106
+ .ch-lens-name { font-weight: 600; }
107
+ .ch-lens-agent { font-size: 12px; }
108
+ .ch-monday-head { margin-top: var(--sp-2); font-weight: 600; font-size: 13px; }
109
+ .ch-monday { margin: 0; padding-left: var(--sp-4); color: var(--text-dim); display: grid; gap: 2px; }
110
+
111
+ /* The per-lens legend under the convergence chart. The bar keeps SEVERITY
112
+ stacking — a bar that works does not gain a second dimension — so "which lens
113
+ is earning its money" gets its own row instead. */
114
+ .ch-lens-legend {
115
+ display: flex;
116
+ flex-wrap: wrap;
117
+ gap: var(--sp-3);
118
+ margin-top: var(--sp-2);
119
+ font-size: 12px;
120
+ color: var(--text-faint);
121
+ }
122
+ .ch-lens-legend-item { display: inline-flex; gap: 6px; align-items: baseline; }
123
+ .ch-lens-legend-n { color: var(--text); font-variant-numeric: tabular-nums; }
124
+
125
+ /* --- premise challenges --------------------------------------------------- */
126
+ /* THE LOUDEST CARD ON THE PANEL when one is open, and it sits above the
127
+ findings: a premise disputes the yardstick every finding below it was
128
+ measured against. */
129
+ .ch-premise-loud { border-color: var(--bad); }
130
+ .ch-premise {
131
+ border: 1px solid var(--line-soft);
132
+ border-left: 3px solid var(--bad);
133
+ border-radius: var(--radius-sm);
134
+ padding: var(--sp-3);
135
+ margin-top: var(--sp-3);
136
+ display: grid;
137
+ gap: var(--sp-2);
138
+ }
139
+
140
+ /* --- opportunities -------------------------------------------------------- */
141
+ /* NO SEVERITY COLOUR ANYWHERE IN HERE. An opportunity never blocks and never has
142
+ a severity; colouring it like a defect is exactly the confusion the class
143
+ split exists to prevent. */
144
+ .ch-opportunity {
145
+ border: 1px dashed var(--line-soft);
146
+ border-radius: var(--radius-sm);
147
+ padding: var(--sp-3);
148
+ margin-top: var(--sp-3);
149
+ display: grid;
150
+ gap: var(--sp-2);
151
+ }
@@ -0,0 +1,194 @@
1
+ /* panels/crosslink.css — orc ui
2
+ The vault graph and the folder picker. .vault-node's box MUST stay the same
3
+ size as VAULT.W/H in js/panels/crosslink.js — a test asserts it.
4
+
5
+ The <link> ORDER in app.html is the cascade order, and the numeric
6
+ prefix is that order. No @import: it would carry no session token and
7
+ 401. */
8
+
9
+ /* --- Crosslink ----------------------------------------------------------- */
10
+
11
+ /* Nothing is linked yet, so the Design tab has nothing to draw. The pulse points
12
+ at the tab that can fix that; it is dropped the moment a link exists. */
13
+ .tabs button.tab-spot { color: var(--accent); animation: tab-spot 2s ease-in-out infinite; }
14
+ @keyframes tab-spot {
15
+ 0%, 100% { opacity: 1; }
16
+ 50% { opacity: .5; }
17
+ }
18
+
19
+ /* THE VAULT GRAPH. Absolutely-positioned repo boxes over a stretched SVG edge
20
+ layer — both use the same normalised coordinates, so they line up at any
21
+ width without measuring anything. */
22
+ /* Width and height are set inline by vaultCard — the canvas is sized to the
23
+ ring it has to hold, so it is never the thing that decides the spacing.
24
+ `margin: 0 auto` centres it when the panel is wider than the graph; when the
25
+ panel is NARROWER, the `.scroll-x` wrapper scrolls rather than compressing
26
+ the ring back into a collision. */
27
+ .vault {
28
+ position: relative;
29
+ margin: 0 auto;
30
+ border: 1px solid var(--line-soft);
31
+ border-radius: var(--radius);
32
+ background: radial-gradient(circle at 50% 50%, var(--surface-2) 0%, var(--surface) 62%);
33
+ }
34
+ .vault-edges { position: absolute; inset: 0; width: 100%; height: 100%; }
35
+ .vault-line {
36
+ stroke: var(--line);
37
+ stroke-width: 1.5;
38
+ /* pathLength="1" — the draw-in is written in fractions, not pixels. */
39
+ stroke-dasharray: 1;
40
+ animation: edge-draw var(--dur-slow) var(--ease) var(--d, 0ms) both;
41
+ }
42
+ /* A short dash running from → to. The direction of travel IS the direction of
43
+ the dependency, which is the whole point of a crosslink edge. */
44
+ .vault-pulse {
45
+ stroke: var(--accent);
46
+ stroke-width: 2.5;
47
+ stroke-linecap: round;
48
+ stroke-dasharray: .07 .93;
49
+ opacity: .85;
50
+ animation: edge-pulse 2.8s linear var(--d, 0ms) infinite;
51
+ }
52
+ @keyframes edge-draw {
53
+ from { stroke-dashoffset: 1; opacity: 0; }
54
+ to { stroke-dashoffset: 0; opacity: 1; }
55
+ }
56
+ @keyframes edge-pulse {
57
+ from { stroke-dashoffset: 1; }
58
+ to { stroke-dashoffset: 0; }
59
+ }
60
+ .vault-via { fill: var(--text-faint); font-family: var(--mono); font-size: 11px; }
61
+
62
+ /* Hover a repo: its edges brighten, every other edge steps back. */
63
+ .vault-edge { transition: opacity var(--dur) var(--ease); }
64
+ .vault-edge.edge-dim { opacity: .22; }
65
+ .vault-edge.edge-hi .vault-line { stroke: var(--accent-dim); }
66
+ .vault-edge.edge-hi .vault-pulse { stroke-width: 3.5; opacity: 1; }
67
+
68
+ /* THE BOX SIZE IS FIXED, AND THAT IS LOAD-BEARING. These two numbers are the
69
+ VAULT.W / VAULT.H the ring radii are solved from in app.js — change one and
70
+ you must change the other, or the arithmetic that guarantees no two repos
71
+ overlap is being done against the wrong box. A box that grew to fit its
72
+ longest repo name could not be spaced by arithmetic at all, only measured;
73
+ long names ellipsis instead. */
74
+ .vault-node {
75
+ position: absolute;
76
+ transform: translate(-50%, -50%);
77
+ box-sizing: border-box;
78
+ width: 156px;
79
+ height: 78px;
80
+ display: flex;
81
+ flex-direction: column;
82
+ align-items: flex-start;
83
+ justify-content: center;
84
+ gap: 2px;
85
+ padding: var(--sp-2) var(--sp-3);
86
+ overflow: hidden;
87
+ border: 1px solid var(--line);
88
+ border-radius: var(--radius);
89
+ background: var(--surface);
90
+ box-shadow: var(--shadow);
91
+ font: inherit;
92
+ text-align: left;
93
+ animation: vault-in var(--dur-slow) var(--ease) var(--d, 0ms) both;
94
+ transition: border-color var(--dur-fast) var(--ease), box-shadow var(--dur-fast) var(--ease);
95
+ }
96
+ button.vault-node { cursor: pointer; }
97
+ /* A hovered repo lifts above its neighbours' shadows, never under them. */
98
+ .vault-node:hover, .vault-node.vault-hi { border-color: var(--accent); z-index: 3; }
99
+ button.vault-node:focus-visible { outline: 2px solid var(--accent); outline-offset: 2px; z-index: 3; }
100
+ .vault-name,
101
+ .vault-sub { max-width: 100%; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
102
+ .vault-name { font-family: var(--mono); font-size: 13px; color: var(--text); }
103
+ .vault-sub { font-size: 11px; color: var(--text-faint); }
104
+ /* The state chip must not push the box taller than the geometry assumes. */
105
+ .vault-node .chip { flex: none; margin-top: 2px; max-width: 100%; }
106
+ /* This repo is the hub — it is the one node that is not a link. */
107
+ .vault-hub { border-color: var(--accent); background: var(--accent-wash); z-index: 2; }
108
+ .vault-consume { border-left: 3px solid var(--accent); }
109
+ .vault-provide { border-left: 3px solid var(--ok); }
110
+ .vault-none { border-left: 3px solid var(--warn); }
111
+ @keyframes vault-in {
112
+ from { opacity: 0; transform: translate(-50%, -50%) scale(.88); }
113
+ to { opacity: 1; transform: translate(-50%, -50%) scale(1); }
114
+ }
115
+
116
+ /* Hovering a graph node lights its detail row, so the picture and the list are
117
+ visibly the same set of things. */
118
+ .linked-hi { border-color: var(--accent) !important; background: var(--surface-2); }
119
+
120
+ .linkform { display: grid; grid-template-columns: repeat(auto-fit, minmax(220px, 1fr)); gap: var(--sp-3); }
121
+ .field { display: flex; flex-direction: column; gap: 4px; min-width: 0; }
122
+ .field-label { font-size: 11px; text-transform: uppercase; letter-spacing: .06em; color: var(--text-faint); }
123
+ .field-hint { font-size: 11px; color: var(--text-faint); }
124
+ .field select.text-input { padding: 5px 8px; }
125
+
126
+ .kind-picker { display: flex; flex-wrap: wrap; gap: 4px; }
127
+ .kind {
128
+ border: 1px solid var(--line);
129
+ background: var(--surface-2);
130
+ color: var(--text-dim);
131
+ border-radius: 100px;
132
+ padding: 2px 9px;
133
+ font-size: 11px;
134
+ font-family: var(--mono);
135
+ cursor: pointer;
136
+ transition: background var(--dur-fast) var(--ease), color var(--dur-fast) var(--ease),
137
+ border-color var(--dur-fast) var(--ease), transform var(--dur-fast) var(--ease);
138
+ }
139
+ .kind:hover { border-color: var(--accent-dim); color: var(--text); }
140
+ .kind-on { background: var(--accent); border-color: var(--accent); color: #fff; transform: scale(1.04); }
141
+
142
+ /* --- Crosslink: the folder picker ---------------------------------------- */
143
+ /* A directory listing the SERVER walks, rendered as a list you click through.
144
+ Nothing here reads a file — the two chips are a single existsSync each. */
145
+
146
+ .path-row { display: flex; gap: var(--sp-2); align-items: center; }
147
+ .path-row .text-input { flex: 1 1 auto; min-width: 0; }
148
+ .path-row .btn { flex: none; }
149
+
150
+ .picker-crumbs { display: flex; align-items: center; gap: var(--sp-2); flex-wrap: wrap; }
151
+ .picker-path {
152
+ font-family: var(--mono);
153
+ font-size: 11.5px;
154
+ color: var(--text-dim);
155
+ background: var(--surface-2);
156
+ border-radius: var(--radius-sm);
157
+ padding: 2px 8px;
158
+ overflow-wrap: anywhere;
159
+ }
160
+ .picker-list {
161
+ max-height: 46vh;
162
+ overflow-y: auto;
163
+ display: flex;
164
+ flex-direction: column;
165
+ gap: 2px;
166
+ border: 1px solid var(--line);
167
+ border-radius: var(--radius-sm);
168
+ padding: var(--sp-2);
169
+ background: var(--surface-2);
170
+ }
171
+ .picker-item {
172
+ display: grid;
173
+ grid-template-columns: 16px minmax(0, 1fr) auto;
174
+ align-items: center;
175
+ gap: var(--sp-3);
176
+ padding: 6px var(--sp-3);
177
+ border: 1px solid transparent;
178
+ border-radius: var(--radius-sm);
179
+ background: transparent;
180
+ text-align: left;
181
+ font: inherit;
182
+ color: inherit;
183
+ cursor: pointer;
184
+ transition: background var(--dur-fast) var(--ease), border-color var(--dur-fast) var(--ease);
185
+ }
186
+ .picker-item:hover { background: var(--surface-3); border-color: var(--accent-dim); }
187
+ .picker-icon { color: var(--text-faint); font-size: 11px; }
188
+ .picker-item:hover .picker-icon { color: var(--accent); }
189
+ .picker-name { font-family: var(--mono); font-size: 13px; overflow: hidden; text-overflow: ellipsis; }
190
+ .picker-tags { display: flex; gap: 4px; flex-wrap: wrap; margin-top: 3px; }
191
+ .picker-into { color: var(--text-faint); opacity: 0; transition: opacity var(--dur-fast) var(--ease); }
192
+ .picker-item:hover .picker-into { opacity: 1; }
193
+ .picker-foot { display: flex; justify-content: flex-end; }
194
+ .picker-warn { color: var(--warn); }