@litfamily/litopencode 1.0.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 (690) hide show
  1. package/.gitattributes +8 -0
  2. package/ATTRIBUTION.md +56 -0
  3. package/CHANGELOG.md +267 -0
  4. package/CODE_OF_CONDUCT.md +30 -0
  5. package/CONTRIBUTING.md +82 -0
  6. package/LICENSE +21 -0
  7. package/README-Ko-KR.md +252 -0
  8. package/README.md +252 -0
  9. package/SECURITY.md +36 -0
  10. package/SUPPORT.md +37 -0
  11. package/bin/litopencode +3 -0
  12. package/bin/litopencode.cjs +10 -0
  13. package/dist/activation-managed-prompts.d.ts +2 -0
  14. package/dist/activation-managed-prompts.js +51 -0
  15. package/dist/activation-primary-prompts.d.ts +2 -0
  16. package/dist/activation-primary-prompts.js +176 -0
  17. package/dist/activation-probe.d.ts +3 -0
  18. package/dist/activation-probe.js +19 -0
  19. package/dist/activation-prompt-utils.d.ts +6 -0
  20. package/dist/activation-prompt-utils.js +36 -0
  21. package/dist/activation-routing.d.ts +5 -0
  22. package/dist/activation-routing.js +340 -0
  23. package/dist/activation-workflow-prompts.d.ts +26 -0
  24. package/dist/activation-workflow-prompts.js +295 -0
  25. package/dist/activation.d.ts +24 -0
  26. package/dist/activation.js +152 -0
  27. package/dist/agents/defaults.d.ts +15 -0
  28. package/dist/agents/defaults.js +112 -0
  29. package/dist/agents/registry.d.ts +65 -0
  30. package/dist/agents/registry.js +319 -0
  31. package/dist/agents/specialists.d.ts +49 -0
  32. package/dist/agents/specialists.js +307 -0
  33. package/dist/agents/types.d.ts +55 -0
  34. package/dist/agents/types.js +4 -0
  35. package/dist/agents.d.ts +4 -0
  36. package/dist/agents.js +3 -0
  37. package/dist/benchmark.d.ts +94 -0
  38. package/dist/benchmark.js +172 -0
  39. package/dist/bounded-authority-hooks.d.ts +19 -0
  40. package/dist/bounded-authority-hooks.js +157 -0
  41. package/dist/bounded-authority.d.ts +184 -0
  42. package/dist/bounded-authority.js +825 -0
  43. package/dist/cache-metrics.d.ts +54 -0
  44. package/dist/cache-metrics.js +81 -0
  45. package/dist/cli/args.d.ts +5 -0
  46. package/dist/cli/args.js +415 -0
  47. package/dist/cli/auto-update.d.ts +117 -0
  48. package/dist/cli/auto-update.js +604 -0
  49. package/dist/cli/command-alias-ownership.d.ts +2 -0
  50. package/dist/cli/command-alias-ownership.js +14 -0
  51. package/dist/cli/command-aliases.d.ts +12 -0
  52. package/dist/cli/command-aliases.js +112 -0
  53. package/dist/cli/doctor.d.ts +2 -0
  54. package/dist/cli/doctor.js +175 -0
  55. package/dist/cli/host-capabilities.d.ts +12 -0
  56. package/dist/cli/host-capabilities.js +25 -0
  57. package/dist/cli/host-limits.d.ts +21 -0
  58. package/dist/cli/host-limits.js +83 -0
  59. package/dist/cli/install-config.d.ts +13 -0
  60. package/dist/cli/install-config.js +201 -0
  61. package/dist/cli/install-report.d.ts +2 -0
  62. package/dist/cli/install-report.js +180 -0
  63. package/dist/cli/install-tui.d.ts +12 -0
  64. package/dist/cli/install-tui.js +174 -0
  65. package/dist/cli/install.d.ts +2 -0
  66. package/dist/cli/install.js +264 -0
  67. package/dist/cli/json.d.ts +4 -0
  68. package/dist/cli/json.js +31 -0
  69. package/dist/cli/loop.d.ts +3 -0
  70. package/dist/cli/loop.js +135 -0
  71. package/dist/cli/lsp-capability.d.ts +17 -0
  72. package/dist/cli/lsp-capability.js +92 -0
  73. package/dist/cli/managed-skill-assets.d.ts +23 -0
  74. package/dist/cli/managed-skill-assets.js +117 -0
  75. package/dist/cli/model-catalog.d.ts +21 -0
  76. package/dist/cli/model-catalog.js +107 -0
  77. package/dist/cli/model-policy.d.ts +3 -0
  78. package/dist/cli/model-policy.js +143 -0
  79. package/dist/cli/model-routing.d.ts +5 -0
  80. package/dist/cli/model-routing.js +208 -0
  81. package/dist/cli/native-canonical-backup.d.ts +9 -0
  82. package/dist/cli/native-canonical-backup.js +96 -0
  83. package/dist/cli/native-canonical-cache.d.ts +9 -0
  84. package/dist/cli/native-canonical-cache.js +37 -0
  85. package/dist/cli/native-skill-install.d.ts +2 -0
  86. package/dist/cli/native-skill-install.js +128 -0
  87. package/dist/cli/native-skill-integrity.d.ts +25 -0
  88. package/dist/cli/native-skill-integrity.js +178 -0
  89. package/dist/cli/native-skill-tree.d.ts +12 -0
  90. package/dist/cli/native-skill-tree.js +104 -0
  91. package/dist/cli/native-skills.d.ts +22 -0
  92. package/dist/cli/native-skills.js +105 -0
  93. package/dist/cli/plugin-mutation.d.ts +4 -0
  94. package/dist/cli/plugin-mutation.js +89 -0
  95. package/dist/cli/scientific-visualization-dependencies.d.ts +18 -0
  96. package/dist/cli/scientific-visualization-dependencies.js +91 -0
  97. package/dist/cli/skill-loop.d.ts +3 -0
  98. package/dist/cli/skill-loop.js +649 -0
  99. package/dist/cli/types.d.ts +188 -0
  100. package/dist/cli/types.js +1 -0
  101. package/dist/cli/update-check.d.ts +2 -0
  102. package/dist/cli/update-check.js +15 -0
  103. package/dist/cli/update-notifier.d.ts +70 -0
  104. package/dist/cli/update-notifier.js +717 -0
  105. package/dist/cli/vendor-path-migration.d.ts +9 -0
  106. package/dist/cli/vendor-path-migration.js +96 -0
  107. package/dist/cli.d.ts +7 -0
  108. package/dist/cli.js +250 -0
  109. package/dist/commands.d.ts +331 -0
  110. package/dist/commands.js +600 -0
  111. package/dist/config-parser.d.ts +5 -0
  112. package/dist/config-parser.js +274 -0
  113. package/dist/config.d.ts +72 -0
  114. package/dist/config.js +157 -0
  115. package/dist/deliverable-hedge-guard.d.ts +26 -0
  116. package/dist/deliverable-hedge-guard.js +302 -0
  117. package/dist/durable-plan.d.ts +23 -0
  118. package/dist/durable-plan.js +349 -0
  119. package/dist/features.d.ts +828 -0
  120. package/dist/features.js +1109 -0
  121. package/dist/hooks.d.ts +17 -0
  122. package/dist/hooks.js +83 -0
  123. package/dist/ignition.d.ts +14 -0
  124. package/dist/ignition.js +33 -0
  125. package/dist/index.d.ts +30 -0
  126. package/dist/index.js +30 -0
  127. package/dist/inert-data.d.ts +2 -0
  128. package/dist/inert-data.js +13 -0
  129. package/dist/knowledge.d.ts +98 -0
  130. package/dist/knowledge.js +961 -0
  131. package/dist/ledger.d.ts +181 -0
  132. package/dist/ledger.js +1179 -0
  133. package/dist/lit-fetch-classify.d.ts +8 -0
  134. package/dist/lit-fetch-classify.js +107 -0
  135. package/dist/lit-fetch-content.d.ts +2 -0
  136. package/dist/lit-fetch-content.js +43 -0
  137. package/dist/lit-fetch-http.d.ts +10 -0
  138. package/dist/lit-fetch-http.js +82 -0
  139. package/dist/lit-fetch-result.d.ts +2 -0
  140. package/dist/lit-fetch-result.js +65 -0
  141. package/dist/lit-fetch-ssrf.d.ts +9 -0
  142. package/dist/lit-fetch-ssrf.js +77 -0
  143. package/dist/lit-fetch-url.d.ts +3 -0
  144. package/dist/lit-fetch-url.js +28 -0
  145. package/dist/lit-fetch.d.ts +69 -0
  146. package/dist/lit-fetch.js +84 -0
  147. package/dist/lit-mark.d.ts +17 -0
  148. package/dist/lit-mark.js +129 -0
  149. package/dist/logger.d.ts +9 -0
  150. package/dist/logger.js +21 -0
  151. package/dist/model-route-policy.d.ts +25 -0
  152. package/dist/model-route-policy.js +129 -0
  153. package/dist/reader-facing-output.d.ts +3 -0
  154. package/dist/reader-facing-output.js +28 -0
  155. package/dist/rules/discovery.d.ts +36 -0
  156. package/dist/rules/discovery.js +270 -0
  157. package/dist/rules/engine.d.ts +43 -0
  158. package/dist/rules/engine.js +236 -0
  159. package/dist/rules/frontmatter.d.ts +16 -0
  160. package/dist/rules/frontmatter.js +179 -0
  161. package/dist/rules/glob.d.ts +12 -0
  162. package/dist/rules/glob.js +233 -0
  163. package/dist/rules/hooks.d.ts +25 -0
  164. package/dist/rules/hooks.js +75 -0
  165. package/dist/rules/output-style.d.ts +1 -0
  166. package/dist/rules/output-style.js +20 -0
  167. package/dist/scientific-visualization-banner.d.ts +1 -0
  168. package/dist/scientific-visualization-banner.js +2 -0
  169. package/dist/search-workflow-ideas.d.ts +67 -0
  170. package/dist/search-workflow-ideas.js +128 -0
  171. package/dist/secret-shapes.d.ts +9 -0
  172. package/dist/secret-shapes.js +63 -0
  173. package/dist/server.d.ts +6 -0
  174. package/dist/server.js +129 -0
  175. package/dist/session-lineage.d.ts +8 -0
  176. package/dist/session-lineage.js +12 -0
  177. package/dist/skill-loop/apply.d.ts +19 -0
  178. package/dist/skill-loop/apply.js +483 -0
  179. package/dist/skill-loop/config.d.ts +50 -0
  180. package/dist/skill-loop/config.js +215 -0
  181. package/dist/skill-loop/curator.d.ts +18 -0
  182. package/dist/skill-loop/curator.js +232 -0
  183. package/dist/skill-loop/ledger.d.ts +39 -0
  184. package/dist/skill-loop/ledger.js +344 -0
  185. package/dist/skill-loop/proposals.d.ts +48 -0
  186. package/dist/skill-loop/proposals.js +290 -0
  187. package/dist/skill-loop/storage.d.ts +72 -0
  188. package/dist/skill-loop/storage.js +817 -0
  189. package/dist/skill-loop/time.d.ts +2 -0
  190. package/dist/skill-loop/time.js +23 -0
  191. package/dist/skill-loop/transaction.d.ts +62 -0
  192. package/dist/skill-loop/transaction.js +836 -0
  193. package/dist/skill-loop/usage.d.ts +31 -0
  194. package/dist/skill-loop/usage.js +146 -0
  195. package/dist/skill-observer.d.ts +22 -0
  196. package/dist/skill-observer.js +1154 -0
  197. package/dist/skill-renames.d.ts +5 -0
  198. package/dist/skill-renames.js +8 -0
  199. package/dist/skills.d.ts +307 -0
  200. package/dist/skills.js +450 -0
  201. package/dist/stable-identity.d.ts +14 -0
  202. package/dist/stable-identity.js +15 -0
  203. package/dist/state.d.ts +25 -0
  204. package/dist/state.js +38 -0
  205. package/dist/strict-json.d.ts +2 -0
  206. package/dist/strict-json.js +94 -0
  207. package/dist/tool-guards.d.ts +34 -0
  208. package/dist/tool-guards.js +210 -0
  209. package/dist/tool-kit.d.ts +32 -0
  210. package/dist/tool-kit.js +75 -0
  211. package/dist/tools.d.ts +43 -0
  212. package/dist/tools.js +381 -0
  213. package/dist/uiux-visual-catalog.d.ts +50 -0
  214. package/dist/uiux-visual-catalog.js +103 -0
  215. package/dist/user-facing-markdown.d.ts +5 -0
  216. package/dist/user-facing-markdown.js +93 -0
  217. package/dist/workflow-families.d.ts +16 -0
  218. package/dist/workflow-families.js +95 -0
  219. package/docs/assets/cover.webp +0 -0
  220. package/docs/assets/litopencode-continuity-1600.webp +0 -0
  221. package/docs/assets/litopencode-ignition-1600.webp +0 -0
  222. package/docs/assets/readme/badge-license.svg +1 -0
  223. package/docs/assets/readme/badge-version.svg +1 -0
  224. package/docs/assets/readme/litopencode-clay-icon.png +0 -0
  225. package/docs/assets/readme/litopencode-wordmark.svg +5 -0
  226. package/docs/lit-mark.md +46 -0
  227. package/docs/migration.md +162 -0
  228. package/docs/privacy.md +82 -0
  229. package/docs/reference-Ko-KR.md +309 -0
  230. package/docs/reference.md +444 -0
  231. package/output-styles/asd-ste100-ko.md +41 -0
  232. package/output-styles/asd-ste100.md +40 -0
  233. package/output-styles/eli5-ko.md +13 -0
  234. package/output-styles/eli5.md +11 -0
  235. package/package.json +57 -0
  236. package/qa/fixtures/litfamily-harness-speed-v1.json +38 -0
  237. package/qa/harness-speed-contract.mjs +209 -0
  238. package/qa/harness-speed-v2-contract.mjs +213 -0
  239. package/qa/harness-speed-verdict.mjs +105 -0
  240. package/skills/agent-roster/SKILL.md +262 -0
  241. package/skills/autoconference/LICENSE +21 -0
  242. package/skills/autoconference/PROVENANCE.md +20 -0
  243. package/skills/autoconference/SKILL.md +125 -0
  244. package/skills/autoconference/assets/conference_template.md +76 -0
  245. package/skills/autoconference/assets/report_template.md +53 -0
  246. package/skills/autoconference/assets/synthesis_template.md +39 -0
  247. package/skills/autoconference/modes/analyze.md +255 -0
  248. package/skills/autoconference/modes/core.md +112 -0
  249. package/skills/autoconference/modes/debate.md +373 -0
  250. package/skills/autoconference/modes/plan.md +310 -0
  251. package/skills/autoconference/modes/resume.md +48 -0
  252. package/skills/autoconference/modes/ship.md +57 -0
  253. package/skills/autoconference/modes/survey.md +109 -0
  254. package/skills/autoconference/references/agent-prompts.md +134 -0
  255. package/skills/autoconference/references/conference-protocol.md +102 -0
  256. package/skills/autoconference/references/convergence-guide.md +167 -0
  257. package/skills/autoconference/references/core-principles.md +83 -0
  258. package/skills/autoconference/references/crash-recovery.md +104 -0
  259. package/skills/autoconference/references/results-logging.md +198 -0
  260. package/skills/autoconference/references/upstream-family-contract.md +130 -0
  261. package/skills/autoconference/references/visualization-guide.md +105 -0
  262. package/skills/autoconference/scripts/check_conference.sh +371 -0
  263. package/skills/autoconference/scripts/init_conference.py +625 -0
  264. package/skills/autoconference/scripts/style_presets.py +104 -0
  265. package/skills/autoresearch/LICENSE +21 -0
  266. package/skills/autoresearch/PROVENANCE.md +20 -0
  267. package/skills/autoresearch/SKILL.md +131 -0
  268. package/skills/autoresearch/assets/report_template.md +50 -0
  269. package/skills/autoresearch/assets/research_template.md +38 -0
  270. package/skills/autoresearch/assets/results_template.tsv +1 -0
  271. package/skills/autoresearch/modes/core.md +216 -0
  272. package/skills/autoresearch/modes/debug.md +235 -0
  273. package/skills/autoresearch/modes/fix.md +173 -0
  274. package/skills/autoresearch/modes/learn.md +91 -0
  275. package/skills/autoresearch/modes/plan.md +291 -0
  276. package/skills/autoresearch/modes/predict.md +266 -0
  277. package/skills/autoresearch/modes/reason.md +170 -0
  278. package/skills/autoresearch/modes/scenario.md +164 -0
  279. package/skills/autoresearch/modes/security.md +282 -0
  280. package/skills/autoresearch/modes/ship.md +49 -0
  281. package/skills/autoresearch/references/core-principles.md +80 -0
  282. package/skills/autoresearch/references/evaluator-contract.md +126 -0
  283. package/skills/autoresearch/references/investigation-techniques.md +205 -0
  284. package/skills/autoresearch/references/owasp-checklist.md +161 -0
  285. package/skills/autoresearch/references/persona-templates.md +232 -0
  286. package/skills/autoresearch/references/results-logging.md +96 -0
  287. package/skills/autoresearch/references/scenario-dimensions.md +178 -0
  288. package/skills/autoresearch/references/stride-model.md +196 -0
  289. package/skills/autoresearch/references/stuck-detection.md +107 -0
  290. package/skills/autoresearch/references/type-checklists.md +163 -0
  291. package/skills/autoresearch/references/upstream-family-contract.md +125 -0
  292. package/skills/autoresearch/references/visualization-guide.md +95 -0
  293. package/skills/autoresearch/scripts/check_progress.sh +272 -0
  294. package/skills/autoresearch/scripts/init_research.py +330 -0
  295. package/skills/autoresearch/scripts/run_with_deadline.py +164 -0
  296. package/skills/autoresearch/scripts/style_presets.py +104 -0
  297. package/skills/browser-drive/SKILL.md +133 -0
  298. package/skills/browser-drive/references/snapshot-act-loop.md +37 -0
  299. package/skills/browser-drive/scripts/capability-probe.mjs +262 -0
  300. package/skills/comment-checker/SKILL.md +171 -0
  301. package/skills/debugging/SKILL.md +202 -0
  302. package/skills/debugging/references/README.md +15 -0
  303. package/skills/debugging/references/escalation.md +43 -0
  304. package/skills/debugging/references/runtimes/README.md +17 -0
  305. package/skills/debugging/references/runtimes/bundled-js-binary.md +44 -0
  306. package/skills/debugging/references/runtimes/go.md +37 -0
  307. package/skills/debugging/references/runtimes/native-binary.md +44 -0
  308. package/skills/debugging/references/runtimes/node.md +43 -0
  309. package/skills/debugging/references/runtimes/python.md +41 -0
  310. package/skills/debugging/references/runtimes/rust.md +37 -0
  311. package/skills/debugging/references/tools.md +72 -0
  312. package/skills/deep-interview/SKILL.md +201 -0
  313. package/skills/doctor-installer/SKILL.md +252 -0
  314. package/skills/durable-litgoal/SKILL.md +248 -0
  315. package/skills/frontend-ui-ux/SKILL.md +70 -0
  316. package/skills/frontend-ui-ux/data/LICENSE +21 -0
  317. package/skills/frontend-ui-ux/data/PROVENANCE.json +1088 -0
  318. package/skills/frontend-ui-ux/data/THIRD-PARTY-NOTICE.txt +14 -0
  319. package/skills/frontend-ui-ux/data/design-intelligence.json +1 -0
  320. package/skills/frontend-ui-ux/references/_canonical-corpus/ATTRIBUTION.md +217 -0
  321. package/skills/frontend-ui-ux/references/_canonical-corpus/LICENSE +21 -0
  322. package/skills/frontend-ui-ux/references/_canonical-corpus/LICENSE-Apache-2.0.txt +201 -0
  323. package/skills/frontend-ui-ux/references/_canonical-corpus/manifest.json +867 -0
  324. package/skills/frontend-ui-ux/references/adaptive-layout.md +85 -0
  325. package/skills/frontend-ui-ux/references/brand-and-imagery.md +79 -0
  326. package/skills/frontend-ui-ux/references/complete-contract.md +282 -0
  327. package/skills/frontend-ui-ux/references/composition.md +87 -0
  328. package/skills/frontend-ui-ux/references/creative-directions.md +83 -0
  329. package/skills/frontend-ui-ux/references/design/README.md +248 -0
  330. package/skills/frontend-ui-ux/references/design/_INDEX.md +191 -0
  331. package/skills/frontend-ui-ux/references/design/airbnb.md +393 -0
  332. package/skills/frontend-ui-ux/references/design/airtable.md +92 -0
  333. package/skills/frontend-ui-ux/references/design/apple.md +250 -0
  334. package/skills/frontend-ui-ux/references/design/aside.md +209 -0
  335. package/skills/frontend-ui-ux/references/design/binance.md +348 -0
  336. package/skills/frontend-ui-ux/references/design/bmw.md +183 -0
  337. package/skills/frontend-ui-ux/references/design/brutalist-skill.md +92 -0
  338. package/skills/frontend-ui-ux/references/design/bugatti.md +271 -0
  339. package/skills/frontend-ui-ux/references/design/cal.md +262 -0
  340. package/skills/frontend-ui-ux/references/design/claude.md +315 -0
  341. package/skills/frontend-ui-ux/references/design/clay.md +307 -0
  342. package/skills/frontend-ui-ux/references/design/clickhouse.md +284 -0
  343. package/skills/frontend-ui-ux/references/design/clone-from-url.md +65 -0
  344. package/skills/frontend-ui-ux/references/design/cohere.md +269 -0
  345. package/skills/frontend-ui-ux/references/design/coinbase.md +132 -0
  346. package/skills/frontend-ui-ux/references/design/composio.md +310 -0
  347. package/skills/frontend-ui-ux/references/design/cursor.md +312 -0
  348. package/skills/frontend-ui-ux/references/design/design-system-architecture.md +244 -0
  349. package/skills/frontend-ui-ux/references/design/elevenlabs.md +268 -0
  350. package/skills/frontend-ui-ux/references/design/expo.md +284 -0
  351. package/skills/frontend-ui-ux/references/design/ferrari.md +317 -0
  352. package/skills/frontend-ui-ux/references/design/figma.md +223 -0
  353. package/skills/frontend-ui-ux/references/design/framer.md +249 -0
  354. package/skills/frontend-ui-ux/references/design/gpt-tasteskill.md +74 -0
  355. package/skills/frontend-ui-ux/references/design/hashicorp.md +281 -0
  356. package/skills/frontend-ui-ux/references/design/ibm.md +335 -0
  357. package/skills/frontend-ui-ux/references/design/image-to-code-skill.md +1228 -0
  358. package/skills/frontend-ui-ux/references/design/imagegen-brandkit.md +798 -0
  359. package/skills/frontend-ui-ux/references/design/imagegen-frontend-mobile.md +1465 -0
  360. package/skills/frontend-ui-ux/references/design/imagegen-frontend-web.md +987 -0
  361. package/skills/frontend-ui-ux/references/design/intercom.md +149 -0
  362. package/skills/frontend-ui-ux/references/design/kraken.md +128 -0
  363. package/skills/frontend-ui-ux/references/design/lamborghini.md +291 -0
  364. package/skills/frontend-ui-ux/references/design/layout-skill.md +107 -0
  365. package/skills/frontend-ui-ux/references/design/lazyweb.md +77 -0
  366. package/skills/frontend-ui-ux/references/design/linear.app.md +370 -0
  367. package/skills/frontend-ui-ux/references/design/lovable.md +301 -0
  368. package/skills/frontend-ui-ux/references/design/mastercard.md +368 -0
  369. package/skills/frontend-ui-ux/references/design/meta.md +369 -0
  370. package/skills/frontend-ui-ux/references/design/minimalist-skill.md +85 -0
  371. package/skills/frontend-ui-ux/references/design/minimax.md +260 -0
  372. package/skills/frontend-ui-ux/references/design/mintlify.md +329 -0
  373. package/skills/frontend-ui-ux/references/design/miro.md +111 -0
  374. package/skills/frontend-ui-ux/references/design/mistral.ai.md +264 -0
  375. package/skills/frontend-ui-ux/references/design/mongodb.md +269 -0
  376. package/skills/frontend-ui-ux/references/design/nike.md +366 -0
  377. package/skills/frontend-ui-ux/references/design/notion.md +312 -0
  378. package/skills/frontend-ui-ux/references/design/nvidia.md +296 -0
  379. package/skills/frontend-ui-ux/references/design/ollama.md +270 -0
  380. package/skills/frontend-ui-ux/references/design/opencode.ai.md +284 -0
  381. package/skills/frontend-ui-ux/references/design/output-skill.md +49 -0
  382. package/skills/frontend-ui-ux/references/design/pinterest.md +233 -0
  383. package/skills/frontend-ui-ux/references/design/playstation.md +367 -0
  384. package/skills/frontend-ui-ux/references/design/posthog.md +259 -0
  385. package/skills/frontend-ui-ux/references/design/raycast.md +271 -0
  386. package/skills/frontend-ui-ux/references/design/react-dev-tooling-skill.md +230 -0
  387. package/skills/frontend-ui-ux/references/design/redesign-skill.md +178 -0
  388. package/skills/frontend-ui-ux/references/design/renault.md +314 -0
  389. package/skills/frontend-ui-ux/references/design/replicate.md +264 -0
  390. package/skills/frontend-ui-ux/references/design/resend.md +306 -0
  391. package/skills/frontend-ui-ux/references/design/revolut.md +188 -0
  392. package/skills/frontend-ui-ux/references/design/runwayml.md +247 -0
  393. package/skills/frontend-ui-ux/references/design/sanity.md +360 -0
  394. package/skills/frontend-ui-ux/references/design/sentry.md +265 -0
  395. package/skills/frontend-ui-ux/references/design/shopify.md +353 -0
  396. package/skills/frontend-ui-ux/references/design/soft-skill.md +98 -0
  397. package/skills/frontend-ui-ux/references/design/spacex.md +197 -0
  398. package/skills/frontend-ui-ux/references/design/spotify.md +249 -0
  399. package/skills/frontend-ui-ux/references/design/starbucks.md +583 -0
  400. package/skills/frontend-ui-ux/references/design/stitch-design-example.md +121 -0
  401. package/skills/frontend-ui-ux/references/design/stitch-skill.md +184 -0
  402. package/skills/frontend-ui-ux/references/design/stripe.md +325 -0
  403. package/skills/frontend-ui-ux/references/design/supabase.md +258 -0
  404. package/skills/frontend-ui-ux/references/design/superhuman.md +255 -0
  405. package/skills/frontend-ui-ux/references/design/taste-skill.md +1206 -0
  406. package/skills/frontend-ui-ux/references/design/tesla.md +289 -0
  407. package/skills/frontend-ui-ux/references/design/theverge.md +342 -0
  408. package/skills/frontend-ui-ux/references/design/together.ai.md +266 -0
  409. package/skills/frontend-ui-ux/references/design/uber.md +298 -0
  410. package/skills/frontend-ui-ux/references/design/vercel.md +313 -0
  411. package/skills/frontend-ui-ux/references/design/vodafone.md +426 -0
  412. package/skills/frontend-ui-ux/references/design/voltagent.md +326 -0
  413. package/skills/frontend-ui-ux/references/design/warp.md +256 -0
  414. package/skills/frontend-ui-ux/references/design/webflow.md +95 -0
  415. package/skills/frontend-ui-ux/references/design/wired.md +281 -0
  416. package/skills/frontend-ui-ux/references/design/wise.md +176 -0
  417. package/skills/frontend-ui-ux/references/design/x.ai.md +260 -0
  418. package/skills/frontend-ui-ux/references/design/zapier.md +331 -0
  419. package/skills/frontend-ui-ux/references/designpowers/EVIDENCE.md +97 -0
  420. package/skills/frontend-ui-ux/references/designpowers/README.md +48 -0
  421. package/skills/frontend-ui-ux/references/designpowers/UPSTREAM.md +80 -0
  422. package/skills/frontend-ui-ux/references/designpowers/lane-a-direction.md +64 -0
  423. package/skills/frontend-ui-ux/references/designpowers/lane-b-execution.md +65 -0
  424. package/skills/frontend-ui-ux/references/designpowers/lane-c-review.md +65 -0
  425. package/skills/frontend-ui-ux/references/designpowers/lane-d-memory.md +83 -0
  426. package/skills/frontend-ui-ux/references/designpowers/orchestration.md +80 -0
  427. package/skills/frontend-ui-ux/references/designpowers/routing.md +79 -0
  428. package/skills/frontend-ui-ux/references/designpowers/vendor/LICENSE +21 -0
  429. package/skills/frontend-ui-ux/references/designpowers/vendor/agents/accessibility-reviewer.md +83 -0
  430. package/skills/frontend-ui-ux/references/designpowers/vendor/agents/content-writer.md +132 -0
  431. package/skills/frontend-ui-ux/references/designpowers/vendor/agents/design-builder.md +109 -0
  432. package/skills/frontend-ui-ux/references/designpowers/vendor/agents/design-critic.md +89 -0
  433. package/skills/frontend-ui-ux/references/designpowers/vendor/agents/design-lead.md +113 -0
  434. package/skills/frontend-ui-ux/references/designpowers/vendor/agents/design-scout.md +78 -0
  435. package/skills/frontend-ui-ux/references/designpowers/vendor/agents/design-strategist.md +121 -0
  436. package/skills/frontend-ui-ux/references/designpowers/vendor/agents/heuristic-evaluator.md +268 -0
  437. package/skills/frontend-ui-ux/references/designpowers/vendor/agents/inspiration-scout.md +107 -0
  438. package/skills/frontend-ui-ux/references/designpowers/vendor/agents/motion-designer.md +120 -0
  439. package/skills/frontend-ui-ux/references/designpowers/vendor/skills/accessible-content/reference.md +101 -0
  440. package/skills/frontend-ui-ux/references/designpowers/vendor/skills/adaptive-interfaces/reference.md +109 -0
  441. package/skills/frontend-ui-ux/references/designpowers/vendor/skills/cognitive-accessibility/reference.md +107 -0
  442. package/skills/frontend-ui-ux/references/designpowers/vendor/skills/design-debate/reference.md +199 -0
  443. package/skills/frontend-ui-ux/references/designpowers/vendor/skills/design-debt-tracker/reference.md +174 -0
  444. package/skills/frontend-ui-ux/references/designpowers/vendor/skills/design-handoff/reference.md +125 -0
  445. package/skills/frontend-ui-ux/references/designpowers/vendor/skills/design-md/reference.md +106 -0
  446. package/skills/frontend-ui-ux/references/designpowers/vendor/skills/design-retrospective/reference.md +266 -0
  447. package/skills/frontend-ui-ux/references/designpowers/vendor/skills/design-review/reference.md +123 -0
  448. package/skills/frontend-ui-ux/references/designpowers/vendor/skills/design-system-alignment/reference.md +120 -0
  449. package/skills/frontend-ui-ux/references/designpowers/vendor/skills/designpowers-critique/reference.md +164 -0
  450. package/skills/frontend-ui-ux/references/designpowers/vendor/skills/heuristic-evaluation/reference.md +85 -0
  451. package/skills/frontend-ui-ux/references/designpowers/vendor/skills/inclusive-personas/reference.md +98 -0
  452. package/skills/frontend-ui-ux/references/designpowers/vendor/skills/inspiration-scouting/reference.md +165 -0
  453. package/skills/frontend-ui-ux/references/designpowers/vendor/skills/interaction-design/reference.md +122 -0
  454. package/skills/frontend-ui-ux/references/designpowers/vendor/skills/motion-choreography/reference.md +81 -0
  455. package/skills/frontend-ui-ux/references/designpowers/vendor/skills/research-planning/reference.md +96 -0
  456. package/skills/frontend-ui-ux/references/designpowers/vendor/skills/responsive-patterns/reference.md +77 -0
  457. package/skills/frontend-ui-ux/references/designpowers/vendor/skills/synthetic-user-testing/reference.md +192 -0
  458. package/skills/frontend-ui-ux/references/designpowers/vendor/skills/taste-feedback/reference.md +165 -0
  459. package/skills/frontend-ui-ux/references/designpowers/vendor/skills/taste-report/reference.md +78 -0
  460. package/skills/frontend-ui-ux/references/designpowers/vendor/skills/token-architecture/reference.md +75 -0
  461. package/skills/frontend-ui-ux/references/designpowers/vendor/skills/ui-composition/reference.md +117 -0
  462. package/skills/frontend-ui-ux/references/designpowers/vendor/skills/usability-testing/reference.md +78 -0
  463. package/skills/frontend-ui-ux/references/designpowers/vendor/skills/verification-before-shipping/reference.md +125 -0
  464. package/skills/frontend-ui-ux/references/designpowers/vendor/skills/voice-and-tone/reference.md +79 -0
  465. package/skills/frontend-ui-ux/references/designpowers/vendor/skills/writing-design-plans/reference.md +119 -0
  466. package/skills/frontend-ui-ux/references/evidence-review.md +103 -0
  467. package/skills/frontend-ui-ux/references/implementation-platforms.md +94 -0
  468. package/skills/frontend-ui-ux/references/inclusive-interface.md +85 -0
  469. package/skills/frontend-ui-ux/references/interaction-motion.md +93 -0
  470. package/skills/frontend-ui-ux/references/operating-lanes.md +80 -0
  471. package/skills/frontend-ui-ux/references/perfection/README.md +160 -0
  472. package/skills/frontend-ui-ux/references/perfection/react-perf-tooling.md +127 -0
  473. package/skills/frontend-ui-ux/references/performance-delivery.md +77 -0
  474. package/skills/frontend-ui-ux/references/product-direction.md +84 -0
  475. package/skills/frontend-ui-ux/references/redesign-playbook.md +88 -0
  476. package/skills/frontend-ui-ux/references/system-foundations.md +86 -0
  477. package/skills/frontend-ui-ux/references/taste-direction.md +55 -0
  478. package/skills/frontend-ui-ux/references/ui-ux-db/README.md +659 -0
  479. package/skills/frontend-ui-ux/references/ui-ux-db/data/charts.csv +26 -0
  480. package/skills/frontend-ui-ux/references/ui-ux-db/data/colors.csv +162 -0
  481. package/skills/frontend-ui-ux/references/ui-ux-db/data/icons.csv +106 -0
  482. package/skills/frontend-ui-ux/references/ui-ux-db/data/landing.csv +35 -0
  483. package/skills/frontend-ui-ux/references/ui-ux-db/data/products.csv +162 -0
  484. package/skills/frontend-ui-ux/references/ui-ux-db/data/react-performance.csv +45 -0
  485. package/skills/frontend-ui-ux/references/ui-ux-db/data/stacks/astro.csv +54 -0
  486. package/skills/frontend-ui-ux/references/ui-ux-db/data/stacks/flutter.csv +53 -0
  487. package/skills/frontend-ui-ux/references/ui-ux-db/data/stacks/html-tailwind.csv +56 -0
  488. package/skills/frontend-ui-ux/references/ui-ux-db/data/stacks/jetpack-compose.csv +53 -0
  489. package/skills/frontend-ui-ux/references/ui-ux-db/data/stacks/nextjs.csv +53 -0
  490. package/skills/frontend-ui-ux/references/ui-ux-db/data/stacks/nuxt-ui.csv +51 -0
  491. package/skills/frontend-ui-ux/references/ui-ux-db/data/stacks/nuxtjs.csv +59 -0
  492. package/skills/frontend-ui-ux/references/ui-ux-db/data/stacks/react-native.csv +52 -0
  493. package/skills/frontend-ui-ux/references/ui-ux-db/data/stacks/react.csv +54 -0
  494. package/skills/frontend-ui-ux/references/ui-ux-db/data/stacks/shadcn.csv +61 -0
  495. package/skills/frontend-ui-ux/references/ui-ux-db/data/stacks/svelte.csv +54 -0
  496. package/skills/frontend-ui-ux/references/ui-ux-db/data/stacks/swiftui.csv +51 -0
  497. package/skills/frontend-ui-ux/references/ui-ux-db/data/stacks/vue.csv +50 -0
  498. package/skills/frontend-ui-ux/references/ui-ux-db/data/styles.csv +85 -0
  499. package/skills/frontend-ui-ux/references/ui-ux-db/data/typography.csv +74 -0
  500. package/skills/frontend-ui-ux/references/ui-ux-db/data/ui-reasoning.csv +162 -0
  501. package/skills/frontend-ui-ux/references/ui-ux-db/data/ux-guidelines.csv +100 -0
  502. package/skills/frontend-ui-ux/references/ui-ux-db/data/web-interface.csv +31 -0
  503. package/skills/frontend-ui-ux/references/ui-ux-db/scripts/core.py +262 -0
  504. package/skills/frontend-ui-ux/references/ui-ux-db/scripts/design_system.py +1148 -0
  505. package/skills/frontend-ui-ux/references/ui-ux-db/scripts/search.py +114 -0
  506. package/skills/frontend-ui-ux/references/visual-language.md +84 -0
  507. package/skills/frontend-ui-ux/references/visual-reconstruction.md +87 -0
  508. package/skills/frontend-ui-ux/schemas/design-contract-v1alpha1.json +570 -0
  509. package/skills/frontend-ui-ux/schemas/design-contract-v1beta1.json +32 -0
  510. package/skills/frontend-ui-ux/schemas/design-contract-v1beta2.json +34 -0
  511. package/skills/frontend-ui-ux/scripts/bounded-json.mjs +45 -0
  512. package/skills/frontend-ui-ux/scripts/canonical-json.mjs +26 -0
  513. package/skills/frontend-ui-ux/scripts/contract-error.mjs +15 -0
  514. package/skills/frontend-ui-ux/scripts/csv.mjs +64 -0
  515. package/skills/frontend-ui-ux/scripts/dataset.mjs +65 -0
  516. package/skills/frontend-ui-ux/scripts/design-contract.mjs +609 -0
  517. package/skills/frontend-ui-ux/scripts/import-design-intelligence.mjs +193 -0
  518. package/skills/frontend-ui-ux/scripts/retrieval.mjs +92 -0
  519. package/skills/frontend-ui-ux/scripts/stable-file-read.mjs +237 -0
  520. package/skills/frontend-ui-ux/scripts/stdin-json.mjs +16 -0
  521. package/skills/frontend-ui-ux/scripts/strict-json.mjs +102 -0
  522. package/skills/frontend-ui-ux/scripts/uiux.mjs +86 -0
  523. package/skills/frontend-ui-ux/scripts/verify-canonical-corpus.mjs +266 -0
  524. package/skills/lit-burnoff/SKILL.md +227 -0
  525. package/skills/lit-burnoff-file/SKILL.md +175 -0
  526. package/skills/lit-code/SKILL.md +266 -0
  527. package/skills/lit-code/references/README.md +18 -0
  528. package/skills/lit-code/references/go/README.md +12 -0
  529. package/skills/lit-code/references/go/concurrency.md +42 -0
  530. package/skills/lit-code/references/go/error-handling.md +47 -0
  531. package/skills/lit-code/references/go/testing.md +55 -0
  532. package/skills/lit-code/references/go/tooling.md +35 -0
  533. package/skills/lit-code/references/go/type-patterns.md +50 -0
  534. package/skills/lit-code/references/python/README.md +12 -0
  535. package/skills/lit-code/references/python/async.md +50 -0
  536. package/skills/lit-code/references/python/error-handling.md +44 -0
  537. package/skills/lit-code/references/python/testing.md +50 -0
  538. package/skills/lit-code/references/python/tooling.md +38 -0
  539. package/skills/lit-code/references/python/type-patterns.md +46 -0
  540. package/skills/lit-code/references/rust/README.md +12 -0
  541. package/skills/lit-code/references/rust/concurrency.md +45 -0
  542. package/skills/lit-code/references/rust/error-handling.md +43 -0
  543. package/skills/lit-code/references/rust/tooling.md +36 -0
  544. package/skills/lit-code/references/rust/type-patterns.md +46 -0
  545. package/skills/lit-code/references/rust/unsafe.md +47 -0
  546. package/skills/lit-code/references/typescript/README.md +11 -0
  547. package/skills/lit-code/references/typescript/error-handling.md +56 -0
  548. package/skills/lit-code/references/typescript/testing.md +42 -0
  549. package/skills/lit-code/references/typescript/tsconfig-strict.md +40 -0
  550. package/skills/lit-code/references/typescript/type-patterns.md +60 -0
  551. package/skills/lit-commit/SKILL.md +222 -0
  552. package/skills/lit-comprehend/SKILL.md +278 -0
  553. package/skills/lit-comprehend/assets/explainer-scaffold.html +104 -0
  554. package/skills/lit-comprehend/references/artifact-template.md +114 -0
  555. package/skills/lit-comprehend/references/micro-worlds.md +115 -0
  556. package/skills/lit-comprehend/scripts/verify-explainer.ts +339 -0
  557. package/skills/lit-crucible/SKILL.md +212 -0
  558. package/skills/lit-fetch/SKILL.md +242 -0
  559. package/skills/lit-handoff/SKILL.md +199 -0
  560. package/skills/lit-init/SKILL.md +214 -0
  561. package/skills/lit-korean/SKILL.md +231 -0
  562. package/skills/lit-plan/SKILL.md +351 -0
  563. package/skills/lit-plan/scripts/scaffold-plan.mjs +275 -0
  564. package/skills/lit-recap/SKILL.md +233 -0
  565. package/skills/lit-scientific-visualization/SKILL.md +175 -0
  566. package/skills/litresearch/SKILL.md +436 -0
  567. package/skills/litwork/SKILL.md +227 -0
  568. package/skills/lsp/SKILL.md +186 -0
  569. package/skills/lsp-setup/SKILL.md +187 -0
  570. package/skills/lsp-setup/references/README.md +40 -0
  571. package/skills/lsp-setup/references/bash.md +31 -0
  572. package/skills/lsp-setup/references/c-cpp.md +43 -0
  573. package/skills/lsp-setup/references/csharp.md +29 -0
  574. package/skills/lsp-setup/references/dart.md +25 -0
  575. package/skills/lsp-setup/references/elixir.md +30 -0
  576. package/skills/lsp-setup/references/go.md +33 -0
  577. package/skills/lsp-setup/references/haskell.md +27 -0
  578. package/skills/lsp-setup/references/java.md +28 -0
  579. package/skills/lsp-setup/references/julia.md +28 -0
  580. package/skills/lsp-setup/references/kotlin.md +25 -0
  581. package/skills/lsp-setup/references/lua.md +26 -0
  582. package/skills/lsp-setup/references/php.md +30 -0
  583. package/skills/lsp-setup/references/python.md +33 -0
  584. package/skills/lsp-setup/references/ruby.md +34 -0
  585. package/skills/lsp-setup/references/rust.md +34 -0
  586. package/skills/lsp-setup/references/swift.md +26 -0
  587. package/skills/lsp-setup/references/terraform.md +26 -0
  588. package/skills/lsp-setup/references/typescript.md +35 -0
  589. package/skills/lsp-setup/references/yaml.md +27 -0
  590. package/skills/lsp-setup/references/zig.md +28 -0
  591. package/skills/managed-skill-manifest.json +1386 -0
  592. package/skills/native-goal-verdict/SKILL.md +216 -0
  593. package/skills/refactor/SKILL.md +221 -0
  594. package/skills/reference-benchmark-claims/SKILL.md +204 -0
  595. package/skills/release-guardrails/SKILL.md +245 -0
  596. package/skills/review-work/SKILL.md +301 -0
  597. package/skills/rules/SKILL.md +196 -0
  598. package/skills/search-workflow-ideas/SKILL.md +223 -0
  599. package/skills/skill-observer/SKILL.md +148 -0
  600. package/skills/skill-observer/references/review-contract.md +95 -0
  601. package/skills/skill-rename-aliases.json +10 -0
  602. package/skills/start-work/SKILL.md +334 -0
  603. package/skills/structural-search/SKILL.md +234 -0
  604. package/skills/tool-guards/SKILL.md +223 -0
  605. package/skills/visual-qa/SKILL.md +61 -0
  606. package/skills/visual-qa/references/capture-playbook.md +105 -0
  607. package/skills/visual-qa/references/complete-contract.md +411 -0
  608. package/skills/visual-qa/schemas/evidence-manifest-v1alpha1.json +201 -0
  609. package/skills/visual-qa/schemas/evidence-manifest-v1beta1.json +141 -0
  610. package/skills/visual-qa/schemas/review-receipt-v1alpha1.json +113 -0
  611. package/skills/visual-qa/scripts/artifact.mjs +123 -0
  612. package/skills/visual-qa/scripts/bounded-json.mjs +47 -0
  613. package/skills/visual-qa/scripts/canonical-json.mjs +28 -0
  614. package/skills/visual-qa/scripts/capabilities.mjs +66 -0
  615. package/skills/visual-qa/scripts/contract-text.mjs +15 -0
  616. package/skills/visual-qa/scripts/design-contract.mjs +611 -0
  617. package/skills/visual-qa/scripts/evidence-evaluate.mjs +521 -0
  618. package/skills/visual-qa/scripts/evidence.mjs +271 -0
  619. package/skills/visual-qa/scripts/png-decode.mjs +146 -0
  620. package/skills/visual-qa/scripts/png.mjs +154 -0
  621. package/skills/visual-qa/scripts/review.mjs +188 -0
  622. package/skills/visual-qa/scripts/stdin-json.mjs +16 -0
  623. package/skills/visual-qa/scripts/strict-json.mjs +102 -0
  624. package/skills/visual-qa/scripts/tui.mjs +149 -0
  625. package/skills/visual-qa/scripts/visual-qa.mjs +90 -0
  626. package/skills/wikify/LICENSE +21 -0
  627. package/skills/wikify/PROVENANCE.md +18 -0
  628. package/skills/wikify/SKILL.md +176 -0
  629. package/skills/wikify/assets/home-template.md +44 -0
  630. package/skills/wikify/assets/maintenance-report-template.md +46 -0
  631. package/skills/wikify/assets/paper-source-note-template.md +137 -0
  632. package/skills/wikify/assets/source-note-template.md +45 -0
  633. package/skills/wikify/assets/wiki-rules-template.md +117 -0
  634. package/skills/wikify/modes/ingest.md +57 -0
  635. package/skills/wikify/modes/init.md +44 -0
  636. package/skills/wikify/modes/lint.md +60 -0
  637. package/skills/wikify/modes/query.md +38 -0
  638. package/skills/wikify/modes/save.md +45 -0
  639. package/skills/wikify/references-upstream-contract.md +758 -0
  640. package/skills/workflow-loop/SKILL.md +387 -0
  641. package/tools/check-pack-payload.mjs +410 -0
  642. package/tools/check-payload-substance.mjs +738 -0
  643. package/tools/check-version-lockstep.mjs +238 -0
  644. package/tools/gen-canonical-frontend-manifest.mjs +66 -0
  645. package/tools/gen-managed-skill-manifest.mjs +135 -0
  646. package/tools/harness-speed-local.mjs +261 -0
  647. package/tools/payload-reference-exemptions.json +49 -0
  648. package/tools/payload-substance-allowlist.json +46 -0
  649. package/tools/payload-substance-parity.json +571 -0
  650. package/tools/qa-real-surface-fixtures.mjs +428 -0
  651. package/tools/qa-real-surface-harness.mjs +173 -0
  652. package/tools/run-behavior-replacement-probes.mjs +296 -0
  653. package/tools/run-build.mjs +101 -0
  654. package/tools/run-harness-speed-local.mjs +52 -0
  655. package/tools/run-harness-speed-v2.mjs +36 -0
  656. package/tools/run-installed-resource-tamper-probe.mjs +62 -0
  657. package/tools/run-negative-gate-matrix.mjs +516 -0
  658. package/tools/run-rules-glob-differential.mjs +232 -0
  659. package/tools/run-typecheck.mjs +25 -0
  660. package/tools/run-uiux-visual-qa-scenarios.mjs +234 -0
  661. package/tools/run-wikify-surface-probe.mjs +170 -0
  662. package/tools/scan-legacy-tokens.mjs +431 -0
  663. package/tools/version-manifests.json +60 -0
  664. package/tsconfig.build.json +12 -0
  665. package/tsconfig.json +13 -0
  666. package/vendor/NOTICE.md +21 -0
  667. package/vendor/handoff/SKILL.md +199 -0
  668. package/vendor/handoff/evals/evals.json +154 -0
  669. package/vendor/handoff/examples/HANDOFF-example-generic-auth-refactor.md +97 -0
  670. package/vendor/handoff/templates/HANDOFF.md +121 -0
  671. package/vendor/licenses/022_handoff-MIT.txt +21 -0
  672. package/vendor/licenses/045_scientific-visualization-MIT.txt +21 -0
  673. package/vendor/provenance/022_handoff.md +19 -0
  674. package/vendor/provenance/045_scientific-visualization.md +36 -0
  675. package/vendor/scientific-visualization/SKILL.md +283 -0
  676. package/vendor/scientific-visualization/assets/color_palettes.py +197 -0
  677. package/vendor/scientific-visualization/assets/nature.mplstyle +75 -0
  678. package/vendor/scientific-visualization/assets/presentation.mplstyle +74 -0
  679. package/vendor/scientific-visualization/assets/publication.mplstyle +78 -0
  680. package/vendor/scientific-visualization/evals/evals.json +158 -0
  681. package/vendor/scientific-visualization/references/color_palettes.md +380 -0
  682. package/vendor/scientific-visualization/references/journal_requirements.md +359 -0
  683. package/vendor/scientific-visualization/references/matplotlib_examples.md +608 -0
  684. package/vendor/scientific-visualization/references/mdanalysis_martini_visualization.md +85 -0
  685. package/vendor/scientific-visualization/references/publication_guidelines.md +217 -0
  686. package/vendor/scientific-visualization/references/seaborn_for_publications.md +293 -0
  687. package/vendor/scientific-visualization/scripts/figure_export.py +238 -0
  688. package/vendor/scientific-visualization/scripts/style_presets.py +467 -0
  689. package/vendor/scientific-visualization/tests/test_figure_export.py +51 -0
  690. package/vendor/scientific-visualization/tests/test_style_presets.py +114 -0
@@ -0,0 +1,180 @@
1
+ const reset = "\u001b[0m";
2
+ const green = "\u001b[38;5;82m";
3
+ const cyan = "\u001b[1;38;5;81m";
4
+ const muted = "\u001b[38;5;245m";
5
+ function useColor() {
6
+ return process.stdout.isTTY === true && process.env.NO_COLOR === undefined && process.env.CI === undefined;
7
+ }
8
+ function tint(value, code) {
9
+ if (!useColor())
10
+ return value;
11
+ return code + value + reset;
12
+ }
13
+ function padLabel(label) {
14
+ return label.padEnd(18, " ");
15
+ }
16
+ function cellWidth(value) {
17
+ let width = 0;
18
+ for (const character of value) {
19
+ const codePoint = character.codePointAt(0) ?? 0;
20
+ if (/\p{Mark}/u.test(character) || codePoint === 0x200d)
21
+ continue;
22
+ const wide = codePoint >= 0x1100 &&
23
+ (codePoint <= 0x115f ||
24
+ codePoint === 0x2329 ||
25
+ codePoint === 0x232a ||
26
+ (codePoint >= 0x2e80 && codePoint <= 0xa4cf) ||
27
+ (codePoint >= 0xac00 && codePoint <= 0xd7a3) ||
28
+ (codePoint >= 0xf900 && codePoint <= 0xfaff) ||
29
+ (codePoint >= 0xfe10 && codePoint <= 0xfe6f) ||
30
+ (codePoint >= 0xff00 && codePoint <= 0xff60) ||
31
+ (codePoint >= 0x1f300 && codePoint <= 0x1faff));
32
+ width += wide ? 2 : 1;
33
+ }
34
+ return width;
35
+ }
36
+ function splitLongWord(word, width) {
37
+ const chunks = [];
38
+ let chunk = "";
39
+ for (const character of word) {
40
+ if (chunk.length > 0 && cellWidth(chunk + character) > width) {
41
+ chunks.push(chunk);
42
+ chunk = character;
43
+ }
44
+ else {
45
+ chunk += character;
46
+ }
47
+ }
48
+ if (chunk.length > 0)
49
+ chunks.push(chunk);
50
+ return chunks;
51
+ }
52
+ function wrapValue(value, width) {
53
+ const words = value.trim().split(/\s+/u).flatMap((word) => splitLongWord(word, width));
54
+ const wrapped = [];
55
+ let current = "";
56
+ for (const word of words) {
57
+ const candidate = current.length === 0 ? word : current + " " + word;
58
+ if (current.length > 0 && cellWidth(candidate) > width) {
59
+ wrapped.push(current);
60
+ current = word;
61
+ }
62
+ else {
63
+ current = candidate;
64
+ }
65
+ }
66
+ if (current.length > 0)
67
+ wrapped.push(current);
68
+ return wrapped.length > 0 ? wrapped : [""];
69
+ }
70
+ function line(label, value) {
71
+ const prefix = " " + padLabel(label) + " ";
72
+ const continuation = " ".repeat(prefix.length);
73
+ return wrapValue(value, 80 - prefix.length)
74
+ .map((part, index) => (index === 0 ? prefix : continuation) + part)
75
+ .join("\n");
76
+ }
77
+ function section(title) {
78
+ return ["", " " + tint(title, muted)];
79
+ }
80
+ function modelRoute(report) {
81
+ const model = report.litopencodeConfig.model;
82
+ if (model.provider && model.model) {
83
+ const lead = model.provider + "/" + model.model;
84
+ return model.helper === undefined ? lead : lead + " lead; " + model.helper.provider + "/" + model.helper.model + " helpers";
85
+ }
86
+ if (model.classification.originalDispatchId)
87
+ return model.classification.originalDispatchId;
88
+ if (model.classification.class === "fresh")
89
+ return "Role-split shipped defaults";
90
+ return "OpenCode session default";
91
+ }
92
+ function existingRoute(report) {
93
+ const model = report.litopencodeConfig.model;
94
+ if (model.classification.originalDispatchId === null)
95
+ return model.classification.class;
96
+ return model.classification.originalDispatchId + (model.existingVariant === undefined ? "" : " (" + model.existingVariant + ")");
97
+ }
98
+ function permissionRoute(report) {
99
+ if (report.litopencodeConfig.permissionMode.mode === "balanced") {
100
+ return "Balanced (allow routine work; ask for dangerous bash)";
101
+ }
102
+ if (report.litopencodeConfig.permissionMode.mode === "yolo") {
103
+ return "YOLO (allow bash/edit/task/webfetch/external_directory; lit-plan stays deny)";
104
+ }
105
+ return "Safe / ask-first";
106
+ }
107
+ function actionLines(report) {
108
+ const pluginChanged = report.patch.length > 0;
109
+ const routeAction = report.litopencodeConfig.changed
110
+ ? report.litopencodeConfig.alreadyPresent
111
+ ? "litopencode.json updated"
112
+ : "litopencode.json created"
113
+ : "litopencode.json preserved";
114
+ return [
115
+ pluginChanged ? "plugin[] updated" : "plugin[] already ready",
116
+ routeAction,
117
+ report.hostLimits.reconfigure
118
+ ? report.hostLimits.changed
119
+ ? "OpenCode context and compaction limits updated"
120
+ : "OpenCode context and compaction limits already ready"
121
+ : "OpenCode context and compaction limits preserved; select LUNA to reconfigure",
122
+ report.commandAliases.changed ? "command aliases written" : "command aliases preserved",
123
+ report.nativeSkills.changed ? "native skills written" : "native skills preserved"
124
+ ];
125
+ }
126
+ function progressLine(label) {
127
+ return " " + tint("[ok]", green) + " " + label;
128
+ }
129
+ function headerLine(label, code) {
130
+ return "| " + tint(label.padEnd(58, " "), code) + " |";
131
+ }
132
+ export function renderInstallReport(report) {
133
+ const changed = report.changed || report.litopencodeConfig.changed || report.commandAliases.changed;
134
+ const status = changed ? "Complete" : "Already installed";
135
+ const actions = actionLines(report);
136
+ return [
137
+ "+------------------------------------------------------------+",
138
+ headerLine("LitOpenCode installer", cyan),
139
+ headerLine("OpenCode plugin setup", muted),
140
+ "+------------------------------------------------------------+",
141
+ ...section("Install summary"),
142
+ line("Package", report.package.name + "@" + report.package.version),
143
+ line("Status", status),
144
+ line("Result", actions[0]),
145
+ line("", actions[1]),
146
+ line("", actions[2]),
147
+ line("", actions[3]),
148
+ line("", actions[4]),
149
+ ...section("Routes"),
150
+ line("Model", modelRoute(report)),
151
+ line("Effort", report.litopencodeConfig.model.effort ?? "preserve existing"),
152
+ line("Existing route", existingRoute(report)),
153
+ line("Route class", report.litopencodeConfig.model.classification.class),
154
+ line("Permissions", permissionRoute(report)),
155
+ line("Authority lifecycle", "schema 3; bounded history/context; trusted resume only"),
156
+ line("Agents", "lit-loop, lit-plan, lit-implement"),
157
+ line("Shipped defaults", "Astra/xhigh lead + planning/review; LUNA/max execution/research helpers"),
158
+ line("Override order", "project merges after global; per-agent routes override categories"),
159
+ line("Coverage", report.litopencodeConfig.agents.length + " agents / " + report.litopencodeConfig.categories.length + " categories"),
160
+ ...section("Host capabilities"),
161
+ line("Context ceiling 372K", report.capabilities.contextCeiling372k.status),
162
+ line("Compaction 334.8K", report.capabilities.autoCompaction334800.status),
163
+ line("Concurrency 20", report.capabilities.subagentConcurrency20.status),
164
+ ...section("Files"),
165
+ line("OpenCode config", report.path),
166
+ line("Host limits", report.hostLimits.path),
167
+ line("LitOpenCode config", report.litopencodeConfig.path),
168
+ line("Command aliases", report.commandAliases.write.length + " managed / " + report.commandAliases.preserve.length + " preserved"),
169
+ line("Native skills", report.nativeSkills.write.length + " managed / " + report.nativeSkills.preserve.length + " preserved"),
170
+ line("Plugin entries", report.plugin.currentCount + " -> " + report.plugin.resultCount),
171
+ ...section("Progress"),
172
+ progressLine("Resolve package"),
173
+ progressLine("Read OpenCode config"),
174
+ progressLine("Write litopencode.json"),
175
+ progressLine("Register plugin"),
176
+ progressLine("Verify install"),
177
+ ...section("Next"),
178
+ " Restart OpenCode, press Tab, then choose lit-loop, lit-plan, or lit-implement."
179
+ ].join("\n");
180
+ }
@@ -0,0 +1,12 @@
1
+ import type { InstallProgress, InstallStageLabel } from "./types.ts";
2
+ type InstallStageState = "running" | "complete" | "failed";
3
+ type TextOutput = {
4
+ write(value: string): unknown;
5
+ };
6
+ export declare function renderLitOpenCodeWordmark(packageLabel: string, colorEnabled?: boolean): string;
7
+ export declare function renderInstallTuiLogo(packageLabel: string): string;
8
+ export declare function renderInstallTuiStage(label: InstallStageLabel, state: InstallStageState, frameIndex: number): string;
9
+ export declare function renderInstallTuiCompletion(): string;
10
+ export declare function shouldRenderInstallTui(argv: readonly string[]): boolean;
11
+ export declare function createInstallTui(output?: TextOutput): InstallProgress;
12
+ export {};
@@ -0,0 +1,174 @@
1
+ import { banner, colorize, lockup, markColorMode, supportsMarkGlyphs } from "../lit-mark.js";
2
+ const reset = "\u001b[0m";
3
+ const bold = "\u001b[1m";
4
+ const green = "\u001b[38;5;82m";
5
+ const muted = "\u001b[38;5;245m";
6
+ const amber = "\u001b[38;5;221m";
7
+ const litLoopOrange = "\u001b[38;2;255;90;31m";
8
+ const litPlanYellow = "\u001b[38;2;250;204;21m";
9
+ const boxContentWidth = 56;
10
+ const spinnerFrames = ["⠋", "⠙", "⠹", "⠸", "⠼", "⠴", "⠦", "⠧", "⠇", "⠏"];
11
+ const installStages = [
12
+ {
13
+ index: 1,
14
+ label: "Resolve package",
15
+ code: "PACKAGE",
16
+ purpose: "Resolve package root and the host-native install source",
17
+ active: "Resolving package identity",
18
+ complete: "Package source resolved"
19
+ },
20
+ {
21
+ index: 2,
22
+ label: "Read OpenCode config",
23
+ code: "HOST CONFIG",
24
+ purpose: "Inspect plugin entries without exposing stored secrets",
25
+ active: "Inspecting OpenCode configuration",
26
+ complete: "OpenCode config inspected"
27
+ },
28
+ {
29
+ index: 3,
30
+ label: "Write litopencode.json",
31
+ code: "ROUTES & SKILLS",
32
+ purpose: "Write role routes, commands, and native skill surfaces",
33
+ active: "Writing LitOpenCode surfaces",
34
+ complete: "Routes, commands, and skills ready"
35
+ },
36
+ {
37
+ index: 4,
38
+ label: "Register plugin",
39
+ code: "PLUGIN",
40
+ purpose: "Register through OpenCode or patch the requested custom root",
41
+ active: "Registering plugin with OpenCode",
42
+ complete: "Plugin registered"
43
+ },
44
+ {
45
+ index: 5,
46
+ label: "Verify install",
47
+ code: "HEALTH CHECK",
48
+ purpose: "Confirm the installer surface completed cleanly",
49
+ active: "Verifying installed surfaces",
50
+ complete: "Install surface verified"
51
+ }
52
+ ];
53
+ function sleep(milliseconds) {
54
+ return new Promise((resolve) => setTimeout(resolve, milliseconds));
55
+ }
56
+ function color(value, code) {
57
+ if (markColorMode() === "none")
58
+ return value;
59
+ return code + value + reset;
60
+ }
61
+ function boxTop(title) {
62
+ return "╭─ " + title + " " + "─".repeat(boxContentWidth - title.length - 1) + "╮";
63
+ }
64
+ function boxLine(value) {
65
+ return "│ " + value.padEnd(boxContentWidth, " ") + " │";
66
+ }
67
+ function boxBottom() {
68
+ return "╰" + "─".repeat(boxContentWidth + 2) + "╯";
69
+ }
70
+ function findStage(label) {
71
+ const stage = installStages.find((candidate) => candidate.label === label);
72
+ if (stage === undefined)
73
+ throw new Error("Unknown install stage: " + String(label));
74
+ return stage;
75
+ }
76
+ function stageHeader(stage) {
77
+ const number = String(stage.index).padStart(2, "0") + " / " + String(installStages.length).padStart(2, "0");
78
+ return "\n " + color(number, amber) + " " + color(stage.code, bold) + "\n " + color(stage.purpose, muted) + "\n";
79
+ }
80
+ function stageStateLine(stage, state, frameIndex) {
81
+ if (state === "complete")
82
+ return " " + color("✓", green) + " " + stage.complete;
83
+ if (state === "failed")
84
+ return " " + color("×", amber) + " " + stage.label + " stopped";
85
+ const frame = spinnerFrames[frameIndex % spinnerFrames.length];
86
+ return " " + color(frame, amber) + " " + stage.active;
87
+ }
88
+ function clearLine(output) {
89
+ output.write(markColorMode() !== "none" ? "\r\u001b[2K" : "\r");
90
+ }
91
+ const bannerRule = " " + "━".repeat(46);
92
+ function productVersion(packageLabel) {
93
+ const at = packageLabel.lastIndexOf("@");
94
+ return at > 0 ? packageLabel.slice(at + 1) : packageLabel;
95
+ }
96
+ export function renderLitOpenCodeWordmark(packageLabel, colorEnabled = true) {
97
+ const product = "litopencode v" + productVersion(packageLabel);
98
+ if (!supportsMarkGlyphs())
99
+ return "LIT\n" + product;
100
+ return colorize(lockup(product, banner), { mode: colorEnabled ? markColorMode() : "none" }).join("\n");
101
+ }
102
+ export function renderInstallTuiLogo(packageLabel) {
103
+ const stageRows = installStages.map((stage) => " │ " + color(String(stage.index).padStart(2, "0"), litPlanYellow) + " · " + stage.label.split(" ")[0].padEnd(10, " ") + " " + color(stage.purpose, muted));
104
+ return [
105
+ "",
106
+ color(bannerRule, litLoopOrange),
107
+ "",
108
+ renderLitOpenCodeWordmark(packageLabel),
109
+ " " + color("OpenCode plugin installer · visible progress, explicit receipts", muted),
110
+ "",
111
+ color(bannerRule, litLoopOrange),
112
+ " ╭─ INSTALL",
113
+ ...stageRows,
114
+ " ╰─ writes begin at 03 / 05 · " + packageLabel,
115
+ ""
116
+ ].join("\n") + "\n";
117
+ }
118
+ export function renderInstallTuiStage(label, state, frameIndex) {
119
+ const stage = findStage(label);
120
+ return stageHeader(stage) + stageStateLine(stage, state, frameIndex);
121
+ }
122
+ export function renderInstallTuiCompletion() {
123
+ return [
124
+ "",
125
+ color(boxTop("INSTALL READY"), green),
126
+ boxLine("Plugin, routes, commands, and skills are ready."),
127
+ boxLine("Next Restart OpenCode · press Tab · choose lit-loop"),
128
+ color(boxBottom(), green),
129
+ ""
130
+ ].join("\n");
131
+ }
132
+ export function shouldRenderInstallTui(argv) {
133
+ return process.stdout.isTTY === true && process.env.CI === undefined && argv[0] === "install" && !argv.includes("--dry-run") && !argv.includes("--json");
134
+ }
135
+ export function createInstallTui(output = process.stdout) {
136
+ let frameIndex = 0;
137
+ function paint(stage) {
138
+ clearLine(output);
139
+ output.write(stageStateLine(stage, "running", frameIndex));
140
+ frameIndex += 1;
141
+ }
142
+ return {
143
+ async start(packageLabel) {
144
+ output.write(renderInstallTuiLogo(packageLabel));
145
+ await sleep(80);
146
+ },
147
+ async run(label, task) {
148
+ const stage = findStage(label);
149
+ output.write(stageHeader(stage));
150
+ paint(stage);
151
+ const timer = setInterval(() => paint(stage), 80);
152
+ try {
153
+ const result = await task();
154
+ clearInterval(timer);
155
+ clearLine(output);
156
+ output.write(stageStateLine(stage, "complete", frameIndex) + "\n");
157
+ return result;
158
+ }
159
+ catch (error) {
160
+ clearInterval(timer);
161
+ clearLine(output);
162
+ output.write(stageStateLine(stage, "failed", frameIndex) + "\n");
163
+ throw error;
164
+ }
165
+ },
166
+ async complete() {
167
+ output.write(renderInstallTuiCompletion());
168
+ },
169
+ async fail(message) {
170
+ clearLine(output);
171
+ output.write(" " + color("×", amber) + " " + message + "\n\n");
172
+ }
173
+ };
174
+ }
@@ -0,0 +1,2 @@
1
+ import type { CliResult, InstallModelSelection, InstallPermissionMode, InstallProgress, ModelPromptMode, PermissionPromptMode } from "./types.ts";
2
+ export declare function install(root: string, dryRun: boolean, modelSelection?: InstallModelSelection | undefined, modelPrompt?: ModelPromptMode, permissionMode?: InstallPermissionMode, permissionModeExplicit?: boolean, permissionPrompt?: PermissionPromptMode, progress?: InstallProgress, outputStylePrompt?: PermissionPromptMode): Promise<CliResult>;
@@ -0,0 +1,264 @@
1
+ import { execFile } from "node:child_process";
2
+ import fs from "node:fs/promises";
3
+ import os from "node:os";
4
+ import path from "node:path";
5
+ import { promisify } from "node:util";
6
+ import { createRuntimePaths } from "../state.js";
7
+ import { describeCommandAliasMutation, ensureCommandAliases, inspectCommandAliases } from "./command-aliases.js";
8
+ import { openCodeHostCapabilities } from "./host-capabilities.js";
9
+ import { describeHostLimitMutation, ensureHostLimits } from "./host-limits.js";
10
+ import { assertExistingModelRoutesSafe, describeInstallRoutes, describeLitConfigMutation, ensureLitConfig, readExistingOutputStyle, readInstallModelClassification, readInstallModelSelection, writeTextAtomically } from "./install-config.js";
11
+ import { readJsonObjectIfPresent, readPackageMetadata } from "./json.js";
12
+ import { renderInstallReport } from "./install-report.js";
13
+ import { renderLitOpenCodeWordmark } from "./install-tui.js";
14
+ import { promptModelSelection, promptOutputStyle, promptPermissionMode } from "./model-routing.js";
15
+ import { litOpenCodeConfigFileForOpenCodeRoot } from "../state.js";
16
+ import { describeNativeSkillMutation, ensureNativeSkills, inspectNativeSkills } from "./native-skills.js";
17
+ import { applyPluginMutation, describePluginMutation, isLitOpenCodeEntry } from "./plugin-mutation.js";
18
+ const execFileAsync = promisify(execFile);
19
+ function withProgress(progress, label, task) {
20
+ return progress === undefined ? task() : progress.run(label, task);
21
+ }
22
+ function pluginSpec(metadata) {
23
+ return metadata.name + "@" + metadata.version;
24
+ }
25
+ async function isLitOpenCodePathEntry(root, value) {
26
+ if (typeof value !== "string" || isLitOpenCodeEntry(value))
27
+ return false;
28
+ if (!(path.isAbsolute(value) || value.startsWith(".")))
29
+ return false;
30
+ const metadata = await readJsonObjectIfPresent(path.join(path.resolve(root, value), "package.json"));
31
+ return metadata?.name === "litopencode" || metadata?.name === "@litfamily/opencode" || metadata?.name === "@litfamily/litopencode";
32
+ }
33
+ function defaultOpenCodeRoot() {
34
+ const configHome = process.env.XDG_CONFIG_HOME;
35
+ if (configHome && configHome.length > 0)
36
+ return path.join(configHome, "opencode");
37
+ return path.join(os.homedir(), ".config", "opencode");
38
+ }
39
+ function shouldUseOpenCodeInstaller(root) {
40
+ return path.resolve(root) === path.resolve(defaultOpenCodeRoot());
41
+ }
42
+ function openCodeConfigCandidates(root) {
43
+ const resolvedRoot = path.resolve(root);
44
+ return [path.join(resolvedRoot, "opencode.json"), path.join(resolvedRoot, "opencode.jsonc")];
45
+ }
46
+ async function openCodeManagedConfigFile(root) {
47
+ const [jsonFile, jsoncFile] = openCodeConfigCandidates(root);
48
+ if (await pathExists(jsonFile))
49
+ return jsonFile;
50
+ if (await pathExists(jsoncFile))
51
+ return jsoncFile;
52
+ return jsoncFile;
53
+ }
54
+ function outputText(value) {
55
+ if (typeof value === "string")
56
+ return value;
57
+ if (value instanceof Uint8Array)
58
+ return Buffer.from(value).toString("utf8");
59
+ return "";
60
+ }
61
+ function stripAnsi(value) {
62
+ return value.replace(/\u001b\[[0-9;?]*[ -/]*[@-~]/g, "");
63
+ }
64
+ function commandFailureDetail(error) {
65
+ if (!(error instanceof Error))
66
+ return String(error);
67
+ const failure = error;
68
+ const parts = [];
69
+ const stderr = stripAnsi(outputText(failure.stderr)).trim();
70
+ const stdout = stripAnsi(outputText(failure.stdout)).trim();
71
+ const code = typeof failure.code === "number" || typeof failure.code === "string" ? String(failure.code) : "";
72
+ const signal = typeof failure.signal === "string" ? failure.signal : "";
73
+ if (stderr.length > 0)
74
+ parts.push("stderr:\n" + stderr);
75
+ if (stdout.length > 0)
76
+ parts.push("stdout:\n" + stdout);
77
+ if (code.length > 0)
78
+ parts.push("exit code: " + code);
79
+ if (signal.length > 0)
80
+ parts.push("signal: " + signal);
81
+ if (parts.length === 0 && error.message.length > 0)
82
+ parts.push(error.message);
83
+ return parts.join("\n\n");
84
+ }
85
+ async function pathExists(filePath) {
86
+ try {
87
+ await fs.stat(filePath);
88
+ return true;
89
+ }
90
+ catch (error) {
91
+ if (error instanceof Error && "code" in error && error.code === "ENOENT")
92
+ return false;
93
+ throw error;
94
+ }
95
+ }
96
+ async function isLocalSourcePackage(packageRoot) {
97
+ const realPackageRoot = await fs.realpath(packageRoot);
98
+ return (await pathExists(path.join(realPackageRoot, ".git"))) && (await pathExists(path.join(realPackageRoot, "src")));
99
+ }
100
+ async function openCodeInstallTarget(metadata) {
101
+ if (await isLocalSourcePackage(metadata.packageRoot)) {
102
+ const realPackageRoot = await fs.realpath(metadata.packageRoot);
103
+ return { value: realPackageRoot, label: metadata.name + "@" + metadata.version + " (local checkout)" };
104
+ }
105
+ const spec = pluginSpec(metadata);
106
+ return { value: spec, label: spec };
107
+ }
108
+ async function installWithOpenCode(target) {
109
+ try {
110
+ await execFileAsync("opencode", ["plugin", target.value, "--global", "--force"], {
111
+ timeout: 120_000,
112
+ maxBuffer: 1024 * 1024 * 4
113
+ });
114
+ }
115
+ catch (error) {
116
+ const detail = commandFailureDetail(error);
117
+ throw new Error("OpenCode plugin install failed for " + target.label + (detail ? ":\n" + detail : ""));
118
+ }
119
+ }
120
+ async function normalizeOpenCodeEntries(root, target) {
121
+ for (const configFile of openCodeConfigCandidates(root)) {
122
+ const config = await readJsonObjectIfPresent(configFile);
123
+ const pluginValue = config?.plugin;
124
+ if (!Array.isArray(pluginValue))
125
+ continue;
126
+ const nextPlugin = [];
127
+ let registered = false;
128
+ for (const entry of pluginValue) {
129
+ const id = Array.isArray(entry) ? entry[0] : entry;
130
+ if (id === target.value || isLitOpenCodeEntry(entry) || (await isLitOpenCodePathEntry(root, id))) {
131
+ if (!registered)
132
+ nextPlugin.push(Array.isArray(entry) ? [target.value, ...entry.slice(1)] : target.value);
133
+ registered = true;
134
+ }
135
+ else {
136
+ nextPlugin.push(entry);
137
+ }
138
+ }
139
+ if (JSON.stringify(nextPlugin) === JSON.stringify(pluginValue))
140
+ continue;
141
+ await writeTextAtomically(configFile, JSON.stringify({ ...config, plugin: nextPlugin }, null, 2) + "\n");
142
+ }
143
+ }
144
+ async function verifyInstalledSurfaces(root, configFile, target, metadata, selectedModel, selectedPermissionMode, selectedPermissionExplicit, selectedOutputStyle) {
145
+ const config = await readJsonObjectIfPresent(configFile);
146
+ const pluginEntries = Array.isArray(config?.plugin) ? config.plugin : [];
147
+ const pluginIds = pluginEntries.map((entry) => typeof entry === "string" ? entry : Array.isArray(entry) && typeof entry[0] === "string" ? entry[0] : "");
148
+ const targetCount = pluginIds.filter((id) => id === target.value).length;
149
+ const staleLitEntries = pluginIds.filter((id) => id !== target.value && isLitOpenCodeEntry(id));
150
+ const litConfig = await describeLitConfigMutation(root, selectedModel, selectedPermissionMode, selectedPermissionExplicit, selectedOutputStyle);
151
+ const commandAliases = await inspectCommandAliases(root);
152
+ const nativeSkills = await inspectNativeSkills(root, metadata);
153
+ const failures = [];
154
+ if (targetCount !== 1 || staleLitEntries.length > 0)
155
+ failures.push("plugin registration");
156
+ if (litConfig.changed)
157
+ failures.push("LitOpenCode routes");
158
+ if (!commandAliases.ok)
159
+ failures.push("command aliases: " + commandAliases.missing.join(", "));
160
+ if (!nativeSkills.ok) {
161
+ const details = [...new Set([...nativeSkills.missing, ...nativeSkills.invalid])];
162
+ failures.push("native skills: " + details.join(", "));
163
+ }
164
+ if (metadata.name !== "@litfamily/litopencode")
165
+ failures.push("package identity");
166
+ if (failures.length > 0)
167
+ throw new Error("Install verification failed: " + failures.join("; "));
168
+ }
169
+ export async function install(root, dryRun, modelSelection = undefined, modelPrompt = "auto", permissionMode = "safe", permissionModeExplicit = false, permissionPrompt = "auto", progress, outputStylePrompt = "auto") {
170
+ await assertExistingModelRoutesSafe(root);
171
+ const classification = await readInstallModelClassification(root);
172
+ const currentModel = await readInstallModelSelection(root);
173
+ const existingOutputStyle = await readExistingOutputStyle(root);
174
+ const selectedModel = await promptModelSelection(modelSelection, modelPrompt, dryRun, classification, litOpenCodeConfigFileForOpenCodeRoot(root), currentModel);
175
+ const selectedPermission = await promptPermissionMode(permissionMode, permissionPrompt, dryRun);
176
+ const selectedOutputStyle = await promptOutputStyle(existingOutputStyle, outputStylePrompt, dryRun);
177
+ const selectedPermissionMode = selectedPermission.mode;
178
+ const selectedPermissionExplicit = permissionModeExplicit || selectedPermission.explicit;
179
+ const metadata = await readPackageMetadata();
180
+ const activeProgress = dryRun ? undefined : progress;
181
+ if (activeProgress !== undefined) {
182
+ await activeProgress.start(pluginSpec(metadata));
183
+ }
184
+ const spec = pluginSpec(metadata);
185
+ const resolved = await withProgress(activeProgress, "Resolve package", async () => {
186
+ const paths = createRuntimePaths(root);
187
+ const useOpenCodeInstaller = shouldUseOpenCodeInstaller(root);
188
+ const target = useOpenCodeInstaller ? await openCodeInstallTarget(metadata) : { value: spec, label: spec };
189
+ return { paths, useOpenCodeInstaller, target };
190
+ });
191
+ const inspected = await withProgress(activeProgress, "Read OpenCode config", async () => {
192
+ const configFile = resolved.useOpenCodeInstaller
193
+ ? await openCodeManagedConfigFile(root)
194
+ : resolved.paths.opencodeConfigFile;
195
+ const before = await readJsonObjectIfPresent(configFile);
196
+ return {
197
+ configFile,
198
+ before,
199
+ mutation: describePluginMutation(before, resolved.target.value),
200
+ litopencodeConfig: await describeLitConfigMutation(root, selectedModel, selectedPermissionMode, selectedPermissionExplicit, selectedOutputStyle),
201
+ commandAliases: await describeCommandAliasMutation(root),
202
+ nativeSkills: await describeNativeSkillMutation(root, metadata),
203
+ hostLimits: describeHostLimitMutation(before, selectedModel !== undefined),
204
+ routes: dryRun
205
+ ? await describeInstallRoutes(root, before, selectedModel, selectedPermissionMode, selectedPermissionExplicit, selectedOutputStyle)
206
+ : undefined
207
+ };
208
+ });
209
+ const { configFile, before, mutation, litopencodeConfig, commandAliases, nativeSkills, hostLimits, routes } = inspected;
210
+ const report = {
211
+ dryRun,
212
+ path: configFile,
213
+ litopencodeConfig,
214
+ plugin: mutation.plugin,
215
+ commandAliases,
216
+ nativeSkills,
217
+ patch: mutation.patch,
218
+ changed: mutation.changed || litopencodeConfig.changed || commandAliases.changed || nativeSkills.changed || hostLimits.changed,
219
+ routes,
220
+ hostLimits: { path: configFile, ...hostLimits },
221
+ capabilities: openCodeHostCapabilities(),
222
+ package: { name: metadata.name, version: metadata.version }
223
+ };
224
+ if (dryRun) {
225
+ return { exitCode: 0, stdout: JSON.stringify(report, null, 2) };
226
+ }
227
+ if (nativeSkills.collisions.length > 0) {
228
+ throw new Error("Native skill collision: refusing to overwrite pre-existing roots without managed entrypoints: " +
229
+ nativeSkills.collisions.join(", "));
230
+ }
231
+ await withProgress(activeProgress, "Write litopencode.json", async () => {
232
+ await ensureLitConfig(root, selectedModel, selectedPermissionMode, selectedPermissionExplicit, selectedOutputStyle);
233
+ await ensureCommandAliases(root);
234
+ await ensureNativeSkills(root, metadata);
235
+ });
236
+ await withProgress(activeProgress, "Register plugin", async () => {
237
+ if (resolved.useOpenCodeInstaller) {
238
+ await installWithOpenCode(resolved.target);
239
+ const installed = await readJsonObjectIfPresent(configFile);
240
+ if (!Array.isArray(installed?.plugin) || !installed.plugin.some((entry) => (Array.isArray(entry) ? entry[0] : entry) === resolved.target.value))
241
+ throw new Error("OpenCode did not register the requested package target");
242
+ await normalizeOpenCodeEntries(root, resolved.target);
243
+ await ensureHostLimits(configFile, await readJsonObjectIfPresent(configFile), hostLimits.reconfigure);
244
+ return;
245
+ }
246
+ const next = applyPluginMutation(before, mutation, resolved.target.value);
247
+ if (hostLimits.reconfigure) {
248
+ await ensureHostLimits(configFile, next, true);
249
+ return;
250
+ }
251
+ if (!mutation.changed)
252
+ return;
253
+ await fs.mkdir(path.dirname(configFile), { recursive: true });
254
+ await writeTextAtomically(configFile, JSON.stringify(next, null, 2) + "\n");
255
+ });
256
+ await withProgress(activeProgress, "Verify install", async () => verifyInstalledSurfaces(root, configFile, resolved.target, metadata, selectedModel, selectedPermissionMode, selectedPermissionExplicit, selectedOutputStyle));
257
+ await activeProgress?.complete();
258
+ return {
259
+ exitCode: 0,
260
+ stdout: activeProgress === undefined
261
+ ? renderLitOpenCodeWordmark(pluginSpec(metadata), false) + "\n" + renderInstallReport(report)
262
+ : undefined
263
+ };
264
+ }
@@ -0,0 +1,4 @@
1
+ import type { PackageMetadata } from "./types.ts";
2
+ export declare function isRecord(value: unknown): value is Record<string, unknown>;
3
+ export declare function readPackageMetadata(): Promise<PackageMetadata>;
4
+ export declare function readJsonObjectIfPresent(filePath: string): Promise<Record<string, unknown> | null>;
@@ -0,0 +1,31 @@
1
+ import fs from "node:fs/promises";
2
+ import path from "node:path";
3
+ import { fileURLToPath } from "node:url";
4
+ export function isRecord(value) {
5
+ return typeof value === "object" && value !== null && !Array.isArray(value);
6
+ }
7
+ export async function readPackageMetadata() {
8
+ const packageRoot = path.resolve(path.dirname(fileURLToPath(import.meta.url)), "../..");
9
+ const packagePath = path.join(packageRoot, "package.json");
10
+ const parsed = JSON.parse(await fs.readFile(packagePath, "utf8"));
11
+ if (!isRecord(parsed) || typeof parsed.name !== "string" || typeof parsed.version !== "string") {
12
+ throw new Error(`Malformed package metadata at ${packagePath}`);
13
+ }
14
+ return { name: parsed.name, version: parsed.version, packageRoot };
15
+ }
16
+ export async function readJsonObjectIfPresent(filePath) {
17
+ let raw;
18
+ try {
19
+ raw = await fs.readFile(filePath, "utf8");
20
+ }
21
+ catch (error) {
22
+ if (error instanceof Error && "code" in error && error.code === "ENOENT")
23
+ return null;
24
+ throw error;
25
+ }
26
+ const parsed = JSON.parse(raw);
27
+ if (!isRecord(parsed)) {
28
+ throw new Error(`Malformed JSON at ${filePath}: expected an object.`);
29
+ }
30
+ return parsed;
31
+ }