@iowarp/clio-coder 0.3.1 → 0.3.3

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 (601) hide show
  1. package/CHANGELOG.md +233 -373
  2. package/CONTRIBUTING.md +23 -23
  3. package/README.md +284 -613
  4. package/dist/{acp-FPR54DGL.js → acp-P2AQILE2.js} +43 -53
  5. package/dist/{agents-OGPIHPJH.js → agents-72W3BI7I.js} +43 -26
  6. package/dist/assets/codewiki.json +1 -1
  7. package/dist/{auth-IC3K6NIZ.js → auth-5TWEIYDN.js} +20 -12
  8. package/dist/chunk-2DJ2KNFG.js +2095 -0
  9. package/dist/{chunk-IS3ONKU3.js → chunk-2IR2NMPA.js} +6 -4
  10. package/dist/chunk-2SFS6XQE.js +122 -0
  11. package/dist/{chunk-PV4JUBVJ.js → chunk-2TLUCQVG.js} +40 -21
  12. package/dist/chunk-2VTFPG5O.js +48 -0
  13. package/dist/chunk-4BJ5BYCE.js +61 -0
  14. package/dist/{chunk-474KN5II.js → chunk-4BPJXDWC.js} +111 -181
  15. package/dist/chunk-4VP4KH3K.js +962 -0
  16. package/dist/chunk-4XUGQOHA.js +797 -0
  17. package/dist/chunk-4ZG3XFUR.js +77 -0
  18. package/dist/chunk-5B2AEOW5.js +5407 -0
  19. package/dist/{chunk-K2ITRMHZ.js → chunk-5TSRNF4G.js} +6 -138
  20. package/dist/{chunk-4QKXUHSR.js → chunk-5UFT4SUX.js} +70 -20
  21. package/dist/{chunk-OLBBMFRD.js → chunk-5UUP6MWO.js} +24 -62
  22. package/dist/chunk-65DEGPJ6.js +52 -0
  23. package/dist/chunk-6EJMN2Y3.js +17 -0
  24. package/dist/chunk-6N5PTWMY.js +136 -0
  25. package/dist/chunk-6SGHMWE3.js +277 -0
  26. package/dist/chunk-6XLNIQDB.js +27 -0
  27. package/dist/chunk-7CR24IG7.js +242 -0
  28. package/dist/chunk-7MNJORFF.js +22 -0
  29. package/dist/{chunk-KY56HMHH.js → chunk-A3CYT5EX.js} +125 -31
  30. package/dist/chunk-AGYYIBLL.js +1069 -0
  31. package/dist/{chunk-GB6QRBXN.js → chunk-APJ265NV.js} +54 -1187
  32. package/dist/{chunk-673JJUWJ.js → chunk-BMEMKKIT.js} +2 -2
  33. package/dist/chunk-CBCAPZAA.js +229 -0
  34. package/dist/chunk-CMZWFGD2.js +352 -0
  35. package/dist/chunk-COU2UHX6.js +400 -0
  36. package/dist/chunk-DSELYM6W.js +1077 -0
  37. package/dist/chunk-DUYJ5IO6.js +644 -0
  38. package/dist/chunk-ECH6PKUQ.js +39 -0
  39. package/dist/chunk-ED4KHGC3.js +143 -0
  40. package/dist/chunk-EKMEHE4H.js +340 -0
  41. package/dist/chunk-FCSXB6T2.js +338 -0
  42. package/dist/chunk-FJ3H4MN5.js +48 -0
  43. package/dist/{chunk-RPTR2H26.js → chunk-FNTMWMX5.js} +21 -15
  44. package/dist/chunk-FQ4SKYE4.js +29 -0
  45. package/dist/chunk-G4BMMOKF.js +182 -0
  46. package/dist/{chunk-ZPY3JZ5E.js → chunk-GGXXDWE4.js} +183 -1233
  47. package/dist/chunk-HC4CLZ2Y.js +68 -0
  48. package/dist/{chunk-LU4TK2PR.js → chunk-HFSBBKSQ.js} +5 -56
  49. package/dist/{chunk-PIUMUEMV.js → chunk-HKIYEGME.js} +10 -6
  50. package/dist/chunk-I4HZDVNP.js +73 -0
  51. package/dist/chunk-IKCO5N3L.js +162 -0
  52. package/dist/chunk-IR4CFBFN.js +56 -0
  53. package/dist/{chunk-R5KLMSBV.js → chunk-J5Q24KAG.js} +2 -2
  54. package/dist/chunk-J7CWMCQD.js +255 -0
  55. package/dist/{chunk-K5XEMXTI.js → chunk-JVCV3ICN.js} +1 -1
  56. package/dist/chunk-KZWTDYJF.js +217 -0
  57. package/dist/chunk-LBMZMYH2.js +285 -0
  58. package/dist/{chunk-G34LV2PF.js → chunk-LM5TQCJZ.js} +84 -170
  59. package/dist/chunk-LW6DSM3M.js +5135 -0
  60. package/dist/chunk-LWLEKMDQ.js +3482 -0
  61. package/dist/{chunk-H6F6BYOH.js → chunk-LZSJBIVT.js} +7003 -7434
  62. package/dist/{chunk-HQQID6OA.js → chunk-M6SHUN7Q.js} +5 -5
  63. package/dist/{chunk-FST4FYJB.js → chunk-MFFY33HR.js} +99 -140
  64. package/dist/{chunk-BSU2YIWB.js → chunk-MVVUPGPW.js} +131 -136
  65. package/dist/chunk-OAO4GE4M.js +619 -0
  66. package/dist/{chunk-Q3RUPKEJ.js → chunk-OC7FIQPC.js} +58 -189
  67. package/dist/chunk-OKGUZO2U.js +34 -0
  68. package/dist/{chunk-GAEBEQVI.js → chunk-OOJYHWRB.js} +32 -346
  69. package/dist/{chunk-Q5WJOSJ7.js → chunk-OQ33BKR3.js} +2 -1
  70. package/dist/chunk-OQE5J4C6.js +73 -0
  71. package/dist/{chunk-KKNLWXI6.js → chunk-ORBHGJC5.js} +8 -8
  72. package/dist/{chunk-MAR7Y6HW.js → chunk-PAJK6MAQ.js} +23 -16
  73. package/dist/{chunk-M5T5VO65.js → chunk-PIWWS5BL.js} +837 -635
  74. package/dist/chunk-POHLU5DW.js +1186 -0
  75. package/dist/chunk-QKMUKYO7.js +4961 -0
  76. package/dist/chunk-SRDMMSEP.js +16405 -0
  77. package/dist/chunk-SST6Z5JA.js +80 -0
  78. package/dist/chunk-STBPMHSX.js +2456 -0
  79. package/dist/chunk-T6YILFSB.js +80 -0
  80. package/dist/chunk-TZK7PACC.js +174 -0
  81. package/dist/chunk-TZTZS7QK.js +227 -0
  82. package/dist/{chunk-ASND7OZK.js → chunk-UFIIWP2H.js} +13 -13
  83. package/dist/chunk-UOV2BYIW.js +107 -0
  84. package/dist/{chunk-PFEFKVGL.js → chunk-V6RTAOC2.js} +13 -11
  85. package/dist/chunk-VAKQQHWR.js +434 -0
  86. package/dist/chunk-VG7TBQIY.js +128 -0
  87. package/dist/chunk-VJWL6YS5.js +244 -0
  88. package/dist/{chunk-EYOKLTMF.js → chunk-VPAYEGVX.js} +17 -3
  89. package/dist/chunk-WEH5XRJQ.js +32 -0
  90. package/dist/chunk-X4RCMKVQ.js +641 -0
  91. package/dist/{chunk-TEKV33Q5.js → chunk-X6IAEBZR.js} +65 -33
  92. package/dist/chunk-XBXAASKX.js +18 -0
  93. package/dist/chunk-XN3L4EYL.js +46 -0
  94. package/dist/{chunk-RDLVBZEO.js → chunk-YCWGATWI.js} +6 -4
  95. package/dist/chunk-YHZX5GEU.js +193 -0
  96. package/dist/chunk-YXLYO42X.js +91 -0
  97. package/dist/{chunk-NMOX6HFD.js → chunk-ZDOOVTXZ.js} +29 -77
  98. package/dist/chunk-ZI647VB5.js +37 -0
  99. package/dist/{chunk-C4PTHK7P.js → chunk-ZWLZP4ZT.js} +5 -5
  100. package/dist/chunk-ZWMF7253.js +1882 -0
  101. package/dist/cli/index.js +62 -54
  102. package/dist/clio-JOU4FXVA.js +25 -0
  103. package/dist/code-nav-7AX6FYE6.js +600 -0
  104. package/dist/codewiki/build-worker.js +66 -0
  105. package/dist/compile-cache-CVJMMODC.js +18 -0
  106. package/dist/{components-DMAOEKFB.js → components-KELWS457.js} +11 -6
  107. package/dist/{config-IRUQ7SE4.js → config-XCDVKR23.js} +92 -55
  108. package/dist/configure-4GAP54ZW.js +42 -0
  109. package/dist/{context-5RADCKTR.js → context-4UOGGLQ5.js} +71 -35
  110. package/dist/context-5VKGUVJJ.js +866 -0
  111. package/dist/{context-3KWFLHJG.js → context-77FM5DV5.js} +15 -13
  112. package/dist/{context-clear-7TSNPAAI.js → context-clear-XXJRLCJJ.js} +54 -28
  113. package/dist/{context-index-W4RLWOQH.js → context-index-BZ4UYMTC.js} +30 -24
  114. package/dist/dispatch-runner-QPRDDBDX.js +1997 -0
  115. package/dist/{docs-5AWSPS37.js → docs-2C2LTVT2.js} +23 -10
  116. package/dist/{doctor-UC5NAJYQ.js → doctor-HR46URBJ.js} +27 -17
  117. package/dist/{eval-U6TJHRLX.js → eval-XSSNATB4.js} +29 -16
  118. package/dist/{evidence-YEGUW4L3.js → evidence-6HG2PY2B.js} +46 -26
  119. package/dist/{evolve-TXARCTPG.js → evolve-K7YU3NCY.js} +45 -25
  120. package/dist/{extensions-OZFJ3A3G.js → extensions-QVDOHDGJ.js} +16 -7
  121. package/dist/{fleet-6G3DHNYE.js → fleet-VY3HHKN6.js} +163 -54
  122. package/dist/{fleet-preflight-DSNT37JK.js → fleet-preflight-DDN536IT.js} +7 -4
  123. package/dist/{init-KZ5QTF6M.js → init-JYGXI3FK.js} +69 -32
  124. package/dist/{memory-73ESV5YC.js → memory-WFZMGYHX.js} +48 -27
  125. package/dist/{models-A4PVNWJK.js → models-I5QWSEOM.js} +39 -25
  126. package/dist/monitor-GE4ID3IA.js +661 -0
  127. package/dist/{chunk-FCIH3BIZ.js → orchestrator-EM5MC3HM.js} +15979 -12407
  128. package/dist/{paths-C4H6IV77.js → paths-UXLN5YYZ.js} +10 -5
  129. package/dist/{preload-6WVMHX3A.js → preload-P6DGH2PZ.js} +2 -2
  130. package/dist/{reset-BGW6OGMV.js → reset-L2FQEE3E.js} +16 -10
  131. package/dist/{run-YTPEYQOH.js → run-ZU3QMZPZ.js} +101 -61
  132. package/dist/{share-YIFFV4NQ.js → share-S5BZQC5I.js} +15 -8
  133. package/dist/{skills-2V6RA3OQ.js → skills-X5VXCRNQ.js} +34 -14
  134. package/dist/{skills-eval-S2TVJO4F.js → skills-eval-WKIHWTHR.js} +70 -34
  135. package/dist/steer-GGWFUJUD.js +77 -0
  136. package/dist/{targets-TYXLPB23.js → targets-SNCPI2NR.js} +43 -27
  137. package/dist/terminal-lease-BNAHVHBS.js +395 -0
  138. package/dist/{trace-GGOJ6Q6Z.js → trace-PNCASAXC.js} +41 -16
  139. package/dist/{chunk-N6F52NLF.js → tree-sitter-HGKH6LG4.js} +28 -2306
  140. package/dist/{uninstall-LLLT4F4W.js → uninstall-FZCQCDKC.js} +10 -5
  141. package/dist/{upgrade-33G2LMM5.js → upgrade-JQHHPQ4K.js} +45 -25
  142. package/dist/{usage-ZAFSXKKG.js → usage-OR4O5SMZ.js} +62 -31
  143. package/dist/verify-375KUB3Y.js +716 -0
  144. package/dist/web-fetch-2YHJ3KTG.js +638 -0
  145. package/dist/{wiki-generate-NUQCVOQ3.js → wiki-generate-UEXP2ARI.js} +74 -34
  146. package/dist/worker/entry.js +221 -36
  147. package/dist/workspace-G4ZWUIPR.js +22 -0
  148. package/docs/README.md +22 -17
  149. package/docs/acp.md +168 -16
  150. package/docs/alcf-provider.md +1 -1
  151. package/docs/architecture.md +136 -7
  152. package/docs/artifact-versions.md +1 -1
  153. package/docs/built-in-agents.md +1 -1
  154. package/docs/capacity-and-scheduling.md +1 -1
  155. package/docs/commands-and-modes.md +114 -71
  156. package/docs/config-knobs-audit.md +1 -3
  157. package/docs/configuration-and-targets.md +174 -46
  158. package/docs/context-engine.md +29 -6
  159. package/docs/development-pipeline.md +26 -1
  160. package/docs/dispatch-architecture-rationale.md +1 -1
  161. package/docs/documentation-coverage.md +2 -2
  162. package/docs/documentation-guide.md +1 -1
  163. package/docs/environment-variables.md +13 -5
  164. package/docs/eval-runner.md +1 -1
  165. package/docs/evals-internal.md +1 -1
  166. package/docs/evidence-and-memory.md +6 -2
  167. package/docs/evolution.md +2 -2
  168. package/docs/exit-codes-and-output.md +15 -9
  169. package/docs/extensions-and-sharing.md +9 -9
  170. package/docs/fleet-dispatch.md +7 -5
  171. package/docs/git-commit-provenance.md +120 -0
  172. package/docs/glossary.md +1 -1
  173. package/docs/installation-and-lifecycle.md +34 -27
  174. package/docs/middleware-and-components.md +1 -1
  175. package/docs/model-catalog.md +45 -14
  176. package/docs/observability.md +8 -5
  177. package/docs/performance-methodology.md +491 -0
  178. package/docs/pi-boundary.md +72 -0
  179. package/docs/proactive-memory.md +3 -3
  180. package/docs/prompt-envelope-and-tools.md +24 -3
  181. package/docs/provider-adapter-cookbook.md +57 -4
  182. package/docs/release-cut-checklist.md +129 -115
  183. package/docs/safety-model.md +9 -5
  184. package/docs/scientific-validation.md +3 -3
  185. package/docs/session-lifecycle.md +55 -12
  186. package/docs/skills-marketplace.md +12 -8
  187. package/docs/time-conventions.md +1 -1
  188. package/docs/tool-usage.md +3 -3
  189. package/docs/trace-store.md +1 -1
  190. package/docs/troubleshooting.md +10 -7
  191. package/docs/tui-design.md +47 -10
  192. package/docs/worker-dispatch-mechanics.md +1 -1
  193. package/package.json +19 -22
  194. package/skills/coding/ast-grep/SKILL.md +136 -0
  195. package/skills/coding/ast-grep/evals.md +56 -0
  196. package/skills/coding/ast-grep/references/rule_reference.md +297 -0
  197. package/skills/coding/coding-standards/SKILL.md +113 -0
  198. package/skills/coding/coding-standards/evals.md +34 -0
  199. package/skills/coding/prototype/SKILL.md +86 -0
  200. package/skills/coding/prototype/evals.md +42 -0
  201. package/skills/coding/prototype/references/LOGIC.md +67 -0
  202. package/skills/coding/prototype/references/UI.md +112 -0
  203. package/skills/coding/tdd/SKILL.md +101 -0
  204. package/skills/coding/tdd/evals.md +41 -0
  205. package/skills/coding/tdd/references/mocking.md +59 -0
  206. package/skills/coding/tdd/references/tests.md +77 -0
  207. package/skills/context/context-handoff/SKILL.md +126 -0
  208. package/skills/context/context-handoff/evals.md +57 -0
  209. package/skills/context/context-handoff/scripts/new-handoff.sh +26 -0
  210. package/skills/context/context-prime/SKILL.md +95 -0
  211. package/skills/context/context-prime/evals.md +54 -0
  212. package/skills/meta/clio-dev/SKILL.md +91 -0
  213. package/skills/meta/clio-dev/evals.md +45 -0
  214. package/skills/meta/clio-test/SKILL.md +130 -0
  215. package/skills/meta/clio-test/evals.md +43 -0
  216. package/skills/meta/clio-test/references/harness.md +97 -0
  217. package/skills/meta/clio-test/references/test-map.md +59 -0
  218. package/skills/meta/credentials/SKILL.md +125 -0
  219. package/skills/meta/credentials/evals.md +104 -0
  220. package/skills/meta/find-skills/SKILL.md +72 -0
  221. package/skills/meta/find-skills/evals.md +47 -0
  222. package/skills/meta/herdr/SKILL.md +127 -0
  223. package/skills/meta/herdr/evals.md +38 -0
  224. package/skills/meta/skill-craft/SKILL.md +102 -0
  225. package/skills/meta/skill-craft/evals.md +41 -0
  226. package/skills/planning/architecture/SKILL.md +129 -0
  227. package/skills/planning/architecture/evals.md +36 -0
  228. package/skills/planning/backlog/SKILL.md +90 -0
  229. package/skills/planning/backlog/evals.md +43 -0
  230. package/skills/planning/prd/SKILL.md +82 -0
  231. package/skills/planning/prd/evals.md +49 -0
  232. package/skills/planning/product-intent/SKILL.md +112 -0
  233. package/skills/planning/product-intent/evals.md +36 -0
  234. package/skills/planning/tech-spec/SKILL.md +115 -0
  235. package/skills/planning/tech-spec/evals.md +47 -0
  236. package/skills/registry.yaml +136 -0
  237. package/skills/research/arxiv-literature/SKILL.md +104 -0
  238. package/skills/research/arxiv-literature/evals.md +58 -0
  239. package/skills/research/experiment-protocol/SKILL.md +122 -0
  240. package/skills/research/experiment-protocol/evals.md +91 -0
  241. package/skills/research/scientific-debugging/SKILL.md +119 -0
  242. package/skills/research/scientific-debugging/evals.md +138 -0
  243. package/skills/research/scientific-modernization/SKILL.md +138 -0
  244. package/skills/research/scientific-modernization/evals.md +84 -0
  245. package/skills/workflow/design-council/SKILL.md +139 -0
  246. package/skills/workflow/design-council/evals.md +97 -0
  247. package/skills/workflow/grill-me/SKILL.md +186 -0
  248. package/skills/workflow/grill-me/evals.md +78 -0
  249. package/skills/workflow/workflow-distiller/SKILL.md +136 -0
  250. package/skills/workflow/workflow-distiller/evals.md +107 -0
  251. package/src/cli/acp.ts +31 -4
  252. package/src/cli/clio.ts +68 -6
  253. package/src/cli/config-inspect.ts +28 -22
  254. package/src/cli/configure.ts +47 -9
  255. package/src/cli/context-clear.ts +2 -2
  256. package/src/cli/context-index.ts +21 -23
  257. package/src/cli/context.ts +13 -8
  258. package/src/cli/default-target.ts +9 -17
  259. package/src/cli/docs.ts +11 -5
  260. package/src/cli/evidence.ts +4 -1
  261. package/src/cli/extensions.ts +10 -1
  262. package/src/cli/fleet.ts +47 -6
  263. package/src/cli/index.ts +55 -26
  264. package/src/cli/memory.ts +3 -1
  265. package/src/cli/models.ts +1 -1
  266. package/src/cli/modes/json-stream.ts +37 -1
  267. package/src/cli/modes/print.ts +24 -9
  268. package/src/cli/run.ts +2 -2
  269. package/src/cli/skills-eval.ts +23 -8
  270. package/src/cli/skills.ts +19 -4
  271. package/src/cli/targets.ts +4 -0
  272. package/src/cli/text-layout.ts +15 -5
  273. package/src/cli/trace.ts +62 -14
  274. package/src/cli/upgrade.ts +18 -2
  275. package/src/cli/usage.ts +10 -3
  276. package/src/cli/wiki-generate.ts +2 -1
  277. package/src/core/agent-environment.ts +7 -0
  278. package/src/core/bash-exec.ts +72 -1
  279. package/src/core/boot-trace.ts +9 -4
  280. package/src/core/bus-events.ts +20 -4
  281. package/src/core/commit-attribution.ts +157 -0
  282. package/src/core/compile-cache.ts +159 -0
  283. package/src/core/config.ts +131 -2
  284. package/src/core/defaults.ts +39 -5
  285. package/src/core/domain-loader.ts +12 -5
  286. package/src/core/git-commit-attribution.ts +387 -0
  287. package/src/core/incomplete-installation.ts +45 -0
  288. package/src/core/response-schema.ts +1 -1
  289. package/src/core/safe-exec.ts +13 -1
  290. package/src/core/settings-layers.ts +155 -21
  291. package/src/core/skill-activation.ts +1 -1
  292. package/src/core/startup-timer.ts +3 -3
  293. package/src/core/state-file-lock.ts +13 -1
  294. package/src/core/termination.ts +78 -5
  295. package/src/domains/config/classify.ts +15 -3
  296. package/src/domains/config/extension.ts +19 -13
  297. package/src/domains/config/index.ts +10 -0
  298. package/src/domains/config/keybindings.ts +45 -9
  299. package/src/domains/context/bootstrap-prompt.ts +1 -1
  300. package/src/domains/context/bootstrap.ts +111 -18
  301. package/src/domains/context/clear.ts +16 -11
  302. package/src/domains/context/clio-md.ts +111 -9
  303. package/src/domains/context/codewiki/artifact.ts +400 -0
  304. package/src/domains/context/codewiki/build-worker-protocol.ts +24 -0
  305. package/src/domains/context/codewiki/build-worker.ts +54 -0
  306. package/src/domains/context/codewiki/coordinator.ts +182 -0
  307. package/src/domains/context/codewiki/indexer.ts +59 -144
  308. package/src/domains/context/codewiki/paths.ts +67 -0
  309. package/src/domains/context/codewiki/schema.ts +80 -0
  310. package/src/domains/context/codewiki/tree-sitter.ts +1 -1
  311. package/src/domains/context/contract.ts +11 -5
  312. package/src/domains/context/extension.ts +94 -143
  313. package/src/domains/context/fingerprint.ts +3 -1
  314. package/src/domains/context/index.ts +12 -22
  315. package/src/domains/context/project-metadata.ts +19 -0
  316. package/src/domains/context/prompt-context.ts +9 -10
  317. package/src/domains/context/refresh.ts +29 -21
  318. package/src/domains/context/runtime.ts +17 -0
  319. package/src/domains/context/wiki/generate.ts +39 -34
  320. package/src/domains/context/wiki/plan.ts +1 -1
  321. package/src/domains/context/wiki/prompts.ts +21 -8
  322. package/src/domains/dispatch/code-step.ts +20 -1
  323. package/src/domains/dispatch/extension.ts +158 -21
  324. package/src/domains/dispatch/failure-classification.ts +6 -0
  325. package/src/domains/dispatch/fleet-commit-attribution.ts +56 -0
  326. package/src/domains/dispatch/orphan-recovery.ts +50 -8
  327. package/src/domains/dispatch/receipt-integrity.ts +5 -0
  328. package/src/domains/dispatch/state.ts +31 -6
  329. package/src/domains/dispatch/transport.ts +2 -1
  330. package/src/domains/dispatch/types.ts +14 -0
  331. package/src/domains/dispatch/worker-spawn.ts +21 -2
  332. package/src/domains/eval/metrics/context.ts +1 -1
  333. package/src/domains/eval/types.ts +0 -1
  334. package/src/domains/evidence/build.ts +41 -1
  335. package/src/domains/lifecycle/migrations/2026-08-18-lmstudio-runtime-id.ts +52 -0
  336. package/src/domains/lifecycle/migrations/index.ts +24 -4
  337. package/src/domains/middleware/hooks-io.ts +12 -0
  338. package/src/domains/middleware/skills-reminder.ts +30 -15
  339. package/src/domains/prompts/compiler.ts +142 -84
  340. package/src/domains/prompts/contract.ts +18 -2
  341. package/src/domains/prompts/extension.ts +39 -7
  342. package/src/domains/prompts/fragment-loader.ts +0 -1
  343. package/src/domains/prompts/fragments/identity/clio.md +2 -4
  344. package/src/domains/prompts/fragments/identity/docs-routing.md +10 -0
  345. package/src/domains/prompts/fragments/identity/self-awareness.md +1 -45
  346. package/src/domains/prompts/fragments/operating/contract.md +4 -50
  347. package/src/domains/prompts/fragments/operating/delegation.md +42 -0
  348. package/src/domains/prompts/fragments/operating/skills.md +26 -0
  349. package/src/domains/prompts/fragments/operating/worker.md +16 -0
  350. package/src/domains/prompts/fragments/safety/auto-edit.md +5 -5
  351. package/src/domains/prompts/fragments/safety/full-auto.md +3 -3
  352. package/src/domains/prompts/fragments/safety/read-only.md +4 -4
  353. package/src/domains/prompts/fragments/safety/suggest.md +2 -2
  354. package/src/domains/prompts/fragments/wiki/page.md +10 -0
  355. package/src/domains/prompts/fragments/wiki/plan.md +10 -0
  356. package/src/domains/prompts/preload.ts +3 -3
  357. package/src/domains/providers/auth/api-key.ts +1 -1
  358. package/src/domains/providers/auth/backend-file.ts +20 -10
  359. package/src/domains/providers/auth/backend-memory.ts +59 -4
  360. package/src/domains/providers/auth/boot-status.ts +65 -0
  361. package/src/domains/providers/auth/oauth.ts +2 -1
  362. package/src/domains/providers/auth/storage.ts +97 -38
  363. package/src/domains/providers/capabilities.ts +12 -4
  364. package/src/domains/providers/contract.ts +15 -4
  365. package/src/domains/providers/extension.ts +18 -6
  366. package/src/domains/providers/model-runtime-capabilities.ts +15 -4
  367. package/src/domains/providers/models/local-models/clio-local-coding-targets.yaml +118 -35
  368. package/src/domains/providers/plugins.ts +5 -3
  369. package/src/domains/providers/probe/fingerprint.ts +25 -5
  370. package/src/domains/providers/registry.ts +31 -10
  371. package/src/domains/providers/runtimes/boot-manifest.ts +55 -0
  372. package/src/domains/providers/runtimes/builtins.ts +2 -2
  373. package/src/domains/providers/runtimes/common/lmstudio-http.ts +423 -0
  374. package/src/domains/providers/runtimes/common/local-synth.ts +6 -7
  375. package/src/domains/providers/runtimes/local-native/lmstudio.ts +241 -0
  376. package/src/domains/providers/support.ts +6 -3
  377. package/src/domains/providers/types/local-model-quirks.ts +7 -9
  378. package/src/domains/providers/types/runtime-descriptor.ts +12 -1
  379. package/src/domains/providers/types/target-descriptor.ts +22 -0
  380. package/src/domains/resources/contract.ts +0 -1
  381. package/src/domains/resources/extension.ts +1 -3
  382. package/src/domains/resources/loader.ts +3 -4
  383. package/src/domains/resources/prompts/loader.ts +16 -2
  384. package/src/domains/resources/prompts/substitute.ts +1 -65
  385. package/src/domains/resources/skills/content-hash.ts +2 -0
  386. package/src/domains/resources/skills/install.ts +17 -0
  387. package/src/domains/resources/skills/loader.ts +17 -10
  388. package/src/domains/resources/skills/marketplace.ts +55 -9
  389. package/src/domains/safety/action-classifier.ts +4 -2
  390. package/src/domains/safety/audit.ts +8 -2
  391. package/src/domains/safety/extension.ts +1 -1
  392. package/src/domains/session/compaction/branch-summary.ts +3 -2
  393. package/src/domains/session/compaction/cut-point.ts +2 -1
  394. package/src/domains/session/compaction/tokens.ts +2 -1
  395. package/src/domains/session/context-ledger.ts +14 -0
  396. package/src/domains/session/contract.ts +15 -0
  397. package/src/domains/session/decision-board.ts +190 -0
  398. package/src/domains/session/entries.ts +66 -3
  399. package/src/domains/session/extension.ts +93 -12
  400. package/src/domains/session/retry.ts +10 -18
  401. package/src/domains/session/session-artifacts.ts +107 -0
  402. package/src/domains/session/task-board.ts +207 -13
  403. package/src/domains/session/tree/active-path.ts +44 -5
  404. package/src/domains/session/tree/fork.ts +26 -27
  405. package/src/domains/session/tree/preview.ts +2 -2
  406. package/src/domains/session/workspace/git-probe.ts +17 -11
  407. package/src/domains/user-tasks/store.ts +297 -0
  408. package/src/engine/acp/errors.ts +96 -0
  409. package/src/engine/acp/server.ts +1728 -146
  410. package/src/engine/acp/transport.ts +135 -14
  411. package/src/engine/acp/types.ts +26 -0
  412. package/src/engine/agent.ts +3 -3
  413. package/src/engine/ai.ts +32 -27
  414. package/src/engine/alcf-oauth.ts +26 -19
  415. package/src/engine/api-registry.ts +223 -0
  416. package/src/engine/apis/index.ts +3 -7
  417. package/src/engine/apis/llamacpp-residency.ts +49 -9
  418. package/src/engine/apis/lmstudio-residency.ts +5 -21
  419. package/src/engine/apis/lmstudio.ts +243 -0
  420. package/src/engine/apis/ollama-native.ts +24 -3
  421. package/src/engine/apis/openai-completions.ts +170 -91
  422. package/src/engine/apis/residency.ts +139 -3
  423. package/src/engine/apis/types.ts +16 -0
  424. package/src/engine/env-api-keys.ts +98 -0
  425. package/src/engine/gemma-channel-filter.ts +223 -0
  426. package/src/engine/instrumented-tui.ts +192 -0
  427. package/src/engine/messages.ts +14 -0
  428. package/src/engine/models.ts +42 -0
  429. package/src/engine/oauth.ts +16 -12
  430. package/src/engine/prompt-templates.ts +1 -0
  431. package/src/engine/provider-payload.ts +16 -59
  432. package/src/engine/strip-tokenizer-sentinels.ts +1 -1
  433. package/src/engine/truncate.ts +9 -0
  434. package/src/engine/tui.ts +17 -9
  435. package/src/engine/types.ts +3 -6
  436. package/src/engine/worker-runtime-capabilities.ts +5 -0
  437. package/src/engine/worker-runtime.ts +1 -1
  438. package/src/engine/worker-tools.ts +9 -4
  439. package/src/entry/boot-options.ts +50 -0
  440. package/src/entry/orchestrator.ts +288 -150
  441. package/src/interactive/application-controller.ts +89 -2
  442. package/src/interactive/chat-loop.ts +266 -41
  443. package/src/interactive/chat-panel.ts +715 -278
  444. package/src/interactive/chat-renderer.ts +306 -85
  445. package/src/interactive/clio-editor.ts +3 -8
  446. package/src/interactive/command-fallbacks.ts +2 -2
  447. package/src/interactive/context-overlay.ts +27 -1
  448. package/src/interactive/editor-submit.ts +253 -24
  449. package/src/interactive/export-html/ansi-to-html.ts +161 -0
  450. package/src/interactive/export-html/index.ts +51 -0
  451. package/src/interactive/export-html/template.ts +45 -0
  452. package/src/interactive/export-html/tool-renderer.ts +54 -0
  453. package/src/interactive/footer/dashboard.ts +4 -0
  454. package/src/interactive/footer/notifications.ts +1 -1
  455. package/src/interactive/footer/widgets.ts +42 -22
  456. package/src/interactive/footer-panel.ts +8 -3
  457. package/src/interactive/format-time.ts +14 -2
  458. package/src/interactive/interactive-application.ts +203 -17
  459. package/src/interactive/interactive-event-projection.ts +18 -1
  460. package/src/interactive/interactive-input-runtime.ts +50 -4
  461. package/src/interactive/interactive-presentation.ts +151 -19
  462. package/src/interactive/interactive-shell.ts +268 -14
  463. package/src/interactive/interactive-slash-runtime.ts +184 -117
  464. package/src/interactive/interactive-tickers.ts +38 -7
  465. package/src/interactive/keybinding-manager.ts +1 -1
  466. package/src/interactive/layout.ts +40 -3
  467. package/src/interactive/overlay-frame.ts +1 -1
  468. package/src/interactive/overlay-general-openers.ts +58 -1
  469. package/src/interactive/overlay-key-routing.ts +3 -0
  470. package/src/interactive/overlay-lifecycle.ts +13 -0
  471. package/src/interactive/overlay-permission-lifecycle.ts +2 -1
  472. package/src/interactive/overlay-session-lifecycle.ts +69 -12
  473. package/src/interactive/overlays/ask-user.ts +146 -24
  474. package/src/interactive/overlays/decisions.ts +300 -0
  475. package/src/interactive/overlays/help-reference.ts +15 -10
  476. package/src/interactive/overlays/model-selector.ts +34 -16
  477. package/src/interactive/overlays/session-selector.ts +18 -0
  478. package/src/interactive/overlays/settings.ts +105 -17
  479. package/src/interactive/overlays/skills-hub.ts +4 -4
  480. package/src/interactive/overlays/tree-selector.ts +41 -6
  481. package/src/interactive/render-trace.ts +499 -90
  482. package/src/interactive/renderers/compaction-summary.ts +2 -2
  483. package/src/interactive/renderers/diff.ts +115 -104
  484. package/src/interactive/renderers/mermaid.ts +53 -0
  485. package/src/interactive/renderers/tool-execution.ts +516 -168
  486. package/src/interactive/renderers/worker-entry.ts +20 -4
  487. package/src/interactive/session-switch-settlement.ts +10 -0
  488. package/src/interactive/slash-autocomplete.ts +6 -114
  489. package/src/interactive/slash-commands.ts +135 -47
  490. package/src/interactive/slash-spec.ts +9 -38
  491. package/src/interactive/status/controller.ts +5 -1
  492. package/src/interactive/status/index.ts +12 -1
  493. package/src/interactive/status/reasoning.ts +87 -0
  494. package/src/interactive/status/summary.ts +13 -2
  495. package/src/interactive/stdout-backpressure.ts +99 -0
  496. package/src/interactive/stream-pacer.ts +530 -0
  497. package/src/interactive/stream-pacing-policy.ts +66 -0
  498. package/src/interactive/tasks-overlay.ts +368 -14
  499. package/src/interactive/terminal-lease.ts +485 -0
  500. package/src/interactive/theme/tokens.ts +1 -1
  501. package/src/interactive/transcript-detail.ts +120 -0
  502. package/src/interactive/turn-context.ts +4 -3
  503. package/src/interactive/turn-persistence.ts +30 -13
  504. package/src/interactive/turn-queues.ts +12 -0
  505. package/src/interactive/turn-recovery.ts +25 -8
  506. package/src/interactive/turn-runtime.ts +79 -12
  507. package/src/interactive/turn-state.ts +10 -0
  508. package/src/interactive/view/artifacts.ts +114 -4
  509. package/src/interactive/view/view-overlay.ts +3 -0
  510. package/src/interactive/welcome-dashboard.ts +17 -16
  511. package/src/interactive/worker-receipts.ts +52 -3
  512. package/src/interactive/worker-stream.ts +5 -1
  513. package/src/tools/agent-tools.ts +23 -3
  514. package/src/tools/artifact.ts +2 -2
  515. package/src/tools/ask-user.ts +23 -13
  516. package/src/tools/bash.ts +30 -2
  517. package/src/tools/bootstrap.ts +34 -431
  518. package/src/tools/builtin-tool-catalog.ts +271 -0
  519. package/src/tools/codewiki/code-nav-surface.ts +29 -0
  520. package/src/tools/codewiki/code-nav.ts +8 -22
  521. package/src/tools/codewiki/shared.ts +41 -38
  522. package/src/tools/context/docs-engine.ts +14 -3
  523. package/src/tools/context/index.ts +107 -28
  524. package/src/tools/context/surface.ts +19 -0
  525. package/src/tools/core-bootstrap.ts +168 -0
  526. package/src/tools/credential-present.ts +5 -5
  527. package/src/tools/dispatch-admission.ts +533 -0
  528. package/src/tools/dispatch-background.ts +54 -0
  529. package/src/tools/dispatch-event-text.ts +6 -0
  530. package/src/tools/dispatch-plan.ts +9 -4
  531. package/src/tools/dispatch-run-events.ts +238 -0
  532. package/src/tools/dispatch-runner.ts +2370 -0
  533. package/src/tools/dispatch-scout-admission.ts +295 -0
  534. package/src/tools/dispatch-types.ts +77 -0
  535. package/src/tools/dispatch.ts +67 -3161
  536. package/src/tools/find.ts +4 -2
  537. package/src/tools/grep.ts +2 -2
  538. package/src/tools/lazy-tool.ts +60 -0
  539. package/src/tools/ledger.ts +3 -3
  540. package/src/tools/monitor-surface.ts +36 -0
  541. package/src/tools/monitor.ts +2 -32
  542. package/src/tools/observers.ts +2 -2
  543. package/src/tools/presentation.ts +107 -0
  544. package/src/tools/registry.ts +45 -27
  545. package/src/tools/safe-exec.ts +2 -2
  546. package/src/tools/steer-surface.ts +17 -0
  547. package/src/tools/steer.ts +2 -13
  548. package/src/tools/tasks.ts +108 -11
  549. package/src/tools/truncate.ts +25 -184
  550. package/src/tools/verify/frontend.ts +3 -1
  551. package/src/tools/verify/index.ts +3 -38
  552. package/src/tools/verify/surface.ts +46 -0
  553. package/src/tools/web-fetch-surface.ts +23 -0
  554. package/src/tools/web-fetch.ts +2 -20
  555. package/src/tools/write.ts +7 -2
  556. package/src/worker/entry.ts +39 -2
  557. package/src/worker/spec-contract.ts +26 -5
  558. package/dist/chunk-7SS2CTV2.js +0 -61361
  559. package/dist/chunk-DKGKUHFA.js +0 -924
  560. package/dist/chunk-GEP36Y4X.js +0 -12796
  561. package/dist/chunk-XYWBQRDM.js +0 -137
  562. package/dist/clio-BZVGEUFJ.js +0 -58
  563. package/dist/configure-S7S6F6CL.js +0 -32
  564. package/docs/html/agents_blueprint.html +0 -936
  565. package/docs/html/alcf_blueprint.html +0 -324
  566. package/docs/html/architecture_blueprint.html +0 -850
  567. package/docs/html/commands_blueprint.html +0 -939
  568. package/docs/html/config_knobs_audit_blueprint.html +0 -178
  569. package/docs/html/configuration_blueprint.html +0 -1080
  570. package/docs/html/context_blueprint.html +0 -603
  571. package/docs/html/documentation_blueprint.html +0 -832
  572. package/docs/html/environment_blueprint.html +0 -404
  573. package/docs/html/eval_blueprint.html +0 -743
  574. package/docs/html/evals_internal_blueprint.html +0 -190
  575. package/docs/html/evolution_blueprint.html +0 -674
  576. package/docs/html/extensions_blueprint.html +0 -2065
  577. package/docs/html/fleet_dispatch_blueprint.html +0 -286
  578. package/docs/html/index.html +0 -919
  579. package/docs/html/lifecycle_blueprint.html +0 -723
  580. package/docs/html/memory_blueprint.html +0 -699
  581. package/docs/html/middleware_blueprint.html +0 -664
  582. package/docs/html/models_blueprint.html +0 -2366
  583. package/docs/html/observability_blueprint.html +0 -683
  584. package/docs/html/provider_adapter_blueprint.html +0 -245
  585. package/docs/html/safety_blueprint.html +0 -1386
  586. package/docs/html/shared.css +0 -571
  587. package/docs/html/shared.js +0 -143
  588. package/docs/html/skills_blueprint.html +0 -671
  589. package/docs/html/soak_blueprint.html +0 -182
  590. package/docs/html/tool_usage_blueprint.html +0 -350
  591. package/docs/html/tools_blueprint.html +0 -2249
  592. package/docs/html/trace_blueprint.html +0 -235
  593. package/docs/html/tui_design_blueprint.html +0 -374
  594. package/docs/html/validation_blueprint.html +0 -961
  595. package/docs/html/worker_dispatch_blueprint.html +0 -231
  596. package/src/core/release.ts +0 -2
  597. package/src/domains/providers/runtimes/common/lmstudio-logger.ts +0 -32
  598. package/src/domains/providers/runtimes/local-native/lmstudio-native.ts +0 -491
  599. package/src/engine/apis/lmstudio-native.ts +0 -1438
  600. package/src/engine/apis/thinking-replay.ts +0 -11
  601. package/src/tools/string-enum.ts +0 -15
@@ -1,25 +1,29 @@
1
1
  import { createRequire as __clioCreateRequire } from "node:module"; const require = __clioCreateRequire(import.meta.url);
2
2
  import {
3
- ToolNames
4
- } from "./chunk-CGKSTWHD.js";
3
+ readRootEntries,
4
+ splitYamlFrontmatter,
5
+ stringField
6
+ } from "./chunk-2SFS6XQE.js";
5
7
  import {
6
8
  enabledExtensionResourceRoots
7
- } from "./chunk-C4PTHK7P.js";
9
+ } from "./chunk-ZWLZP4ZT.js";
10
+ import {
11
+ ToolNames
12
+ } from "./chunk-CGKSTWHD.js";
8
13
  import {
9
14
  INTEROP_AGENT_KINDS,
10
15
  interopSourceRank
11
16
  } from "./chunk-IHXBNWMM.js";
12
17
  import {
13
- require_dist
14
- } from "./chunk-GB6QRBXN.js";
18
+ clioConfigDir
19
+ } from "./chunk-BNAZZHFG.js";
15
20
  import {
16
21
  fsyncDirectory
17
22
  } from "./chunk-WEPFGWHJ.js";
18
23
  import {
19
- clioConfigDir
20
- } from "./chunk-BNAZZHFG.js";
24
+ resolvePackageRoot
25
+ } from "./chunk-IWHMRKLL.js";
21
26
  import {
22
- __toESM,
23
27
  init_esm_shims
24
28
  } from "./chunk-3R73A4XB.js";
25
29
 
@@ -28,17 +32,17 @@ init_esm_shims();
28
32
  import { execFileSync } from "node:child_process";
29
33
  import {
30
34
  cpSync,
31
- existsSync as existsSync4,
35
+ existsSync as existsSync3,
32
36
  mkdirSync,
33
37
  mkdtempSync,
34
38
  readFileSync as readFileSync3,
35
39
  renameSync,
36
40
  rmSync,
37
- statSync as statSync2,
41
+ statSync,
38
42
  writeFileSync
39
43
  } from "node:fs";
40
44
  import { homedir as homedir2, tmpdir } from "node:os";
41
- import path4 from "node:path";
45
+ import path3 from "node:path";
42
46
 
43
47
  // src/domains/resources/skills/content-hash.ts
44
48
  init_esm_shims();
@@ -53,7 +57,9 @@ var PROVENANCE_KEYS = /* @__PURE__ */ new Set([
53
57
  "updatedAt",
54
58
  "installed-hash",
55
59
  "installedHash",
56
- "audit"
60
+ "audit",
61
+ "installed-by",
62
+ "installedBy"
57
63
  ]);
58
64
  function frontmatterRegion(rawText) {
59
65
  const opening = rawText.match(/^---\r?\n/);
@@ -110,119 +116,37 @@ function normalizedSkillHash(rawText) {
110
116
  // src/domains/resources/skills/loader.ts
111
117
  init_esm_shims();
112
118
  import { createHash as createHash2 } from "node:crypto";
113
- import { existsSync as existsSync3, readdirSync as readdirSync3, readFileSync as readFileSync2, realpathSync } from "node:fs";
119
+ import { existsSync as existsSync2, readdirSync as readdirSync2, readFileSync as readFileSync2, realpathSync } from "node:fs";
114
120
  import { homedir } from "node:os";
115
- import path3 from "node:path";
121
+ import path2 from "node:path";
116
122
 
117
- // src/domains/resources/common-loader.ts
123
+ // src/domains/resources/skills/marketplace.ts
118
124
  init_esm_shims();
119
- var import_yaml = __toESM(require_dist(), 1);
120
- import { existsSync, readdirSync, statSync } from "node:fs";
125
+ import { existsSync, readdirSync, readFileSync } from "node:fs";
121
126
  import path from "node:path";
122
- var COMPAT_RESOURCE_PRECEDENCE = {
123
- extension: 10,
124
- userCompat: 20,
125
- user: 30,
126
- projectCompat: 40,
127
- project: 50
128
- };
129
- function defaultScopedResourceRoots(kind, cwd) {
130
- return [
131
- ...enabledExtensionResourceRoots(kind, cwd).map((root) => ({
132
- path: root.path,
133
- scope: "package",
134
- source: root.source,
135
- precedence: COMPAT_RESOURCE_PRECEDENCE.extension
136
- })),
137
- {
138
- path: path.join(clioConfigDir(), kind),
139
- scope: "user",
140
- source: "config",
141
- precedence: COMPAT_RESOURCE_PRECEDENCE.user
142
- },
143
- {
144
- path: path.join(cwd, ".clio-coder", kind),
145
- scope: "project",
146
- source: "project",
147
- precedence: COMPAT_RESOURCE_PRECEDENCE.project
148
- }
149
- ];
150
- }
151
- function sourceInfoForRoot(root, filePath) {
152
- return {
153
- path: filePath,
154
- scope: root.scope,
155
- ...root.source ? { source: root.source } : {},
156
- ...root.precedence !== void 0 ? { precedence: root.precedence } : {}
157
- };
158
- }
159
- function readRootEntries(root, label, diagnostics) {
160
- if (!existsSync(root.path)) return [];
161
- let stat;
162
- try {
163
- stat = statSync(root.path);
164
- } catch (err) {
165
- const reason = err instanceof Error ? err.message : String(err);
166
- diagnostics.push({
167
- type: "warning",
168
- message: `${label} root could not be stat'ed: ${reason}`,
169
- path: root.path
170
- });
171
- return [];
172
- }
173
- if (!stat.isDirectory()) {
174
- diagnostics.push({ type: "warning", message: `${label} root is not a directory`, path: root.path });
175
- return [];
176
- }
127
+ var MARKETPLACE_UNCONFIGURED = "no local skill marketplace catalog or index configured";
128
+ function packageCatalogDir() {
177
129
  try {
178
- return readdirSync(root.path, { withFileTypes: true }).sort((a, b) => a.name.localeCompare(b.name));
179
- } catch (err) {
180
- const reason = err instanceof Error ? err.message : String(err);
181
- diagnostics.push({ type: "warning", message: `${label} root could not be read: ${reason}`, path: root.path });
182
- return [];
130
+ return path.join(resolvePackageRoot(), "skills");
131
+ } catch {
132
+ return null;
183
133
  }
184
134
  }
185
- function splitYamlFrontmatter(raw) {
186
- const opening = raw.match(/^---\r?\n/);
187
- if (!opening) return { ok: false, reason: "missing", body: raw };
188
- const closeRegex = /\r?\n---(?:\r?\n|$)/g;
189
- closeRegex.lastIndex = opening[0].length;
190
- const closing = closeRegex.exec(raw);
191
- if (!closing) return { ok: false, reason: "missing closing delimiter", body: raw };
192
- const body = raw.slice(closing.index + closing[0].length);
193
- const frontmatterText = raw.slice(opening[0].length, closing.index);
194
- let parsed;
135
+ function packageIndexPath() {
195
136
  try {
196
- parsed = (0, import_yaml.parse)(frontmatterText);
197
- } catch (err) {
198
- const reason = err instanceof Error ? err.message : String(err);
199
- return { ok: false, reason: `invalid YAML: ${reason}`, body };
200
- }
201
- if (parsed === null || typeof parsed !== "object" || Array.isArray(parsed)) {
202
- return { ok: false, reason: "must be a YAML object", body };
137
+ return path.join(resolvePackageRoot(), "skills", "skill-marketplace.json");
138
+ } catch {
139
+ return null;
203
140
  }
204
- return {
205
- ok: true,
206
- frontmatter: parsed,
207
- body
208
- };
209
141
  }
210
- function stringField(frontmatter, key) {
211
- const value = frontmatter[key];
212
- return typeof value === "string" && value.trim().length > 0 ? value.trim() : null;
213
- }
214
-
215
- // src/domains/resources/skills/marketplace.ts
216
- init_esm_shims();
217
- import { existsSync as existsSync2, readdirSync as readdirSync2, readFileSync } from "node:fs";
218
- import path2 from "node:path";
219
- var MARKETPLACE_UNCONFIGURED = "no local skill marketplace catalog or index configured";
220
142
  function defaultIndexPath() {
221
143
  try {
222
- return path2.join(clioConfigDir(), "skill-marketplace.json");
144
+ const configured = path.join(clioConfigDir(), "skill-marketplace.json");
145
+ if (existsSync(configured)) return configured;
223
146
  } catch {
224
- return null;
225
147
  }
148
+ const bundled = packageIndexPath();
149
+ return bundled && existsSync(bundled) ? bundled : null;
226
150
  }
227
151
  function isIndexSkill(value) {
228
152
  if (!value || typeof value !== "object" || Array.isArray(value)) return false;
@@ -260,15 +184,15 @@ function indexSkills(indexPath, diagnostics) {
260
184
  }
261
185
  }
262
186
  function looksLikeSkillCatalog(dir) {
263
- if (!existsSync2(dir)) return false;
187
+ if (!existsSync(dir)) return false;
264
188
  try {
265
- return readdirSync2(dir, { withFileTypes: true }).some((entry) => {
189
+ return readdirSync(dir, { withFileTypes: true }).some((entry) => {
266
190
  if (!entry.isDirectory()) return false;
267
- const child = path2.join(dir, entry.name);
268
- if (existsSync2(path2.join(child, "SKILL.md"))) return true;
191
+ const child = path.join(dir, entry.name);
192
+ if (existsSync(path.join(child, "SKILL.md"))) return true;
269
193
  try {
270
- return readdirSync2(child, { withFileTypes: true }).some(
271
- (inner) => inner.isDirectory() && existsSync2(path2.join(child, inner.name, "SKILL.md"))
194
+ return readdirSync(child, { withFileTypes: true }).some(
195
+ (inner) => inner.isDirectory() && existsSync(path.join(child, inner.name, "SKILL.md"))
272
196
  );
273
197
  } catch {
274
198
  return false;
@@ -280,15 +204,17 @@ function looksLikeSkillCatalog(dir) {
280
204
  }
281
205
  function resolveCatalogDir(options) {
282
206
  if (options.catalogDir === null) return null;
283
- if (options.catalogDir) return path2.resolve(options.catalogDir);
207
+ if (options.catalogDir) return path.resolve(options.catalogDir);
284
208
  const fromEnv = process.env.CLIO_CODER_SKILL_CATALOG_DIR;
285
- if (fromEnv && fromEnv.trim().length > 0) return path2.resolve(fromEnv.trim());
286
- const repoCatalog = path2.join(options.cwd ?? process.cwd(), "skills");
287
- return looksLikeSkillCatalog(repoCatalog) ? repoCatalog : null;
209
+ if (fromEnv && fromEnv.trim().length > 0) return path.resolve(fromEnv.trim());
210
+ const repoCatalog = path.join(options.cwd ?? process.cwd(), "skills");
211
+ if (looksLikeSkillCatalog(repoCatalog)) return repoCatalog;
212
+ const bundled = packageCatalogDir();
213
+ return bundled && looksLikeSkillCatalog(bundled) ? bundled : null;
288
214
  }
289
215
  function catalogCategory(catalogDir, baseDir) {
290
- const rel = path2.relative(catalogDir, baseDir);
291
- const category = path2.dirname(rel);
216
+ const rel = path.relative(catalogDir, baseDir);
217
+ const category = path.dirname(rel);
292
218
  if (rel.length === 0 || rel.startsWith("..") || category === "." || category.startsWith("..")) return void 0;
293
219
  return category;
294
220
  }
@@ -326,7 +252,7 @@ function discoverMarketplaceSkills(options = {}) {
326
252
  }
327
253
  const indexPath = options.indexPath === null ? null : options.indexPath ?? process.env.CLIO_CODER_SKILL_MARKETPLACE_INDEX ?? null;
328
254
  const resolvedIndexPath = indexPath ?? defaultIndexPath();
329
- if (options.indexPath !== null && resolvedIndexPath && existsSync2(resolvedIndexPath)) {
255
+ if (options.indexPath !== null && resolvedIndexPath && existsSync(resolvedIndexPath)) {
330
256
  for (const skill of indexSkills(resolvedIndexPath, diagnostics)) {
331
257
  if (seen.has(skill.name)) continue;
332
258
  seen.add(skill.name);
@@ -344,7 +270,7 @@ function getMarketplaceSkills(options = {}) {
344
270
  function installSkill(input) {
345
271
  const source = input.source.trim();
346
272
  const spec = parseSkillSourceSpec(source);
347
- if (spec?.kind === "local" && isSkillName(source) && !existsSync2(spec.path)) {
273
+ if (spec?.kind === "local" && isSkillName(source) && !existsSync(spec.path)) {
348
274
  const skill = getMarketplaceSkills({ ...input.cwd ? { cwd: input.cwd } : {} }).find(
349
275
  (entry) => entry.name === source
350
276
  );
@@ -414,7 +340,7 @@ function defaultSkillRoots(input = {}) {
414
340
  for (const kind of INTEROP_AGENT_KINDS) {
415
341
  if (kind.userSkillRoot === void 0 || kind.skillSource === void 0) continue;
416
342
  roots.push({
417
- path: path3.join(home, kind.userSkillRoot),
343
+ path: path2.join(home, kind.userSkillRoot),
418
344
  scope: "user",
419
345
  source: kind.skillSource,
420
346
  origin: `${kind.skillSource}-user`,
@@ -425,7 +351,7 @@ function defaultSkillRoots(input = {}) {
425
351
  }
426
352
  if (configDir) {
427
353
  roots.push({
428
- path: path3.join(configDir, "skills"),
354
+ path: path2.join(configDir, "skills"),
429
355
  scope: "user",
430
356
  source: "clio",
431
357
  origin: "config",
@@ -437,7 +363,7 @@ function defaultSkillRoots(input = {}) {
437
363
  for (const kind of INTEROP_AGENT_KINDS) {
438
364
  if (kind.projectSkillRoot === void 0 || kind.skillSource === void 0) continue;
439
365
  roots.push({
440
- path: path3.join(cwd, kind.projectSkillRoot),
366
+ path: path2.join(cwd, kind.projectSkillRoot),
441
367
  scope: "project",
442
368
  source: kind.skillSource,
443
369
  origin: `${kind.skillSource}-project`,
@@ -447,7 +373,7 @@ function defaultSkillRoots(input = {}) {
447
373
  });
448
374
  }
449
375
  roots.push({
450
- path: path3.join(cwd, ".clio-coder", "skills"),
376
+ path: path2.join(cwd, ".clio-coder", "skills"),
451
377
  scope: "project",
452
378
  source: "clio",
453
379
  origin: "project",
@@ -521,7 +447,7 @@ function declaredToolSurface(frontmatter, key, filePath, diagnostics) {
521
447
  return tools.length > 0 ? tools : void 0;
522
448
  }
523
449
  function validationSubject(filePath) {
524
- return path3.basename(filePath) === "SKILL.md" ? path3.basename(path3.dirname(filePath)) : path3.basename(filePath, ".md");
450
+ return path2.basename(filePath) === "SKILL.md" ? path2.basename(path2.dirname(filePath)) : path2.basename(filePath, ".md");
525
451
  }
526
452
  function validateNameFormat(name) {
527
453
  const errors = [];
@@ -572,7 +498,9 @@ function extractProvenance(frontmatter) {
572
498
  const installedHash = field("installed-hash", "installedHash");
573
499
  const auditRaw = field("audit");
574
500
  const audit = auditRaw === "pass" || auditRaw === "warn" || auditRaw === "fail" || auditRaw === "unknown" ? auditRaw : void 0;
575
- if (!installUrl && !registryId && !registryUrl && !installedAt && !updatedAt && !installedHash && !audit)
501
+ const installedByRaw = field("installed-by", "installedBy");
502
+ const installedBy = installedByRaw === "worker" ? installedByRaw : void 0;
503
+ if (!installUrl && !registryId && !registryUrl && !installedAt && !updatedAt && !installedHash && !audit && !installedBy)
576
504
  return void 0;
577
505
  return {
578
506
  ...installUrl ? { installUrl } : {},
@@ -581,18 +509,19 @@ function extractProvenance(frontmatter) {
581
509
  ...installedAt ? { installedAt } : {},
582
510
  ...updatedAt ? { updatedAt } : {},
583
511
  ...installedHash ? { installedHash } : {},
584
- ...audit ? { audit } : {}
512
+ ...audit ? { audit } : {},
513
+ ...installedBy ? { installedBy } : {}
585
514
  };
586
515
  }
587
516
  function canonicalizePath(filePath) {
588
517
  try {
589
518
  return realpathSync.native(filePath);
590
519
  } catch {
591
- return path3.resolve(filePath);
520
+ return path2.resolve(filePath);
592
521
  }
593
522
  }
594
523
  function pathIsInside(candidate, anchor) {
595
- return candidate === anchor || candidate.startsWith(anchor + path3.sep);
524
+ return candidate === anchor || candidate.startsWith(anchor + path2.sep);
596
525
  }
597
526
  function containmentAnchor(root) {
598
527
  if (root.containment === void 0) return null;
@@ -676,7 +605,7 @@ function loadSkillFile(filePath, root) {
676
605
  }
677
606
  for (const message of validateNameFormat(name)) diagnostics.push({ type: "warning", message, path: filePath });
678
607
  if (!description) return { candidate: null, diagnostics };
679
- const baseDir = path3.dirname(filePath);
608
+ const baseDir = path2.dirname(filePath);
680
609
  const scope = root.scope;
681
610
  const sourceInfo = {
682
611
  path: filePath,
@@ -713,11 +642,11 @@ function isSkillMarkdownFile(entryName) {
713
642
  return entryName === "SKILL.md" || entryName.endsWith(".md");
714
643
  }
715
644
  function collectSkills(root, dir, diagnostics, includeRootFiles, anchor = containmentAnchor(root)) {
716
- if (!existsSync3(dir)) return [];
645
+ if (!existsSync2(dir)) return [];
717
646
  if (escapesContainment(dir, anchor, diagnostics)) return [];
718
647
  let entries;
719
648
  try {
720
- entries = readdirSync3(dir, { withFileTypes: true });
649
+ entries = readdirSync2(dir, { withFileTypes: true });
721
650
  } catch (err) {
722
651
  const reason = err instanceof Error ? err.message : String(err);
723
652
  diagnostics.push({ type: "warning", message: `skill root could not be read: ${reason}`, path: dir });
@@ -725,7 +654,7 @@ function collectSkills(root, dir, diagnostics, includeRootFiles, anchor = contai
725
654
  }
726
655
  const skillEntry = entries.find((entry) => entry.name === "SKILL.md" && entry.isFile());
727
656
  if (skillEntry) {
728
- const skillPath = path3.join(dir, skillEntry.name);
657
+ const skillPath = path2.join(dir, skillEntry.name);
729
658
  if (escapesContainment(skillPath, anchor, diagnostics)) return [];
730
659
  const loaded = loadSkillFile(skillPath, root);
731
660
  diagnostics.push(...loaded.diagnostics);
@@ -734,8 +663,8 @@ function collectSkills(root, dir, diagnostics, includeRootFiles, anchor = contai
734
663
  const candidates = [];
735
664
  for (const entry of entries.sort((a, b) => a.name.localeCompare(b.name))) {
736
665
  if (entry.name.startsWith(".") || entry.name === "node_modules") continue;
737
- const fullPath = path3.join(dir, entry.name);
738
- if (entry.isDirectory() || entry.isSymbolicLink() && existsSync3(path3.join(fullPath, "SKILL.md"))) {
666
+ const fullPath = path2.join(dir, entry.name);
667
+ if (entry.isDirectory() || entry.isSymbolicLink() && existsSync2(path2.join(fullPath, "SKILL.md"))) {
739
668
  candidates.push(...collectSkills(root, fullPath, diagnostics, false, anchor));
740
669
  continue;
741
670
  }
@@ -763,14 +692,14 @@ function explicitSkillRoot(filePath) {
763
692
  };
764
693
  }
765
694
  function loadExplicitSkillPath(inputPath, diagnostics) {
766
- const resolved = path3.resolve(inputPath);
695
+ const resolved = path2.resolve(inputPath);
767
696
  const root = explicitSkillRoot(resolved);
768
- if (!existsSync3(resolved)) {
697
+ if (!existsSync2(resolved)) {
769
698
  diagnostics.push({ type: "warning", message: `explicit skill path does not exist: ${resolved}`, path: resolved });
770
699
  return [];
771
700
  }
772
- const skillFile = path3.basename(resolved) === "SKILL.md" || resolved.endsWith(".md") ? resolved : path3.join(resolved, "SKILL.md");
773
- if (!existsSync3(skillFile)) {
701
+ const skillFile = path2.basename(resolved) === "SKILL.md" || resolved.endsWith(".md") ? resolved : path2.join(resolved, "SKILL.md");
702
+ if (!existsSync2(skillFile)) {
774
703
  const packages = collectSkills(root, resolved, diagnostics, false);
775
704
  if (packages.length > 0) return packages;
776
705
  diagnostics.push({
@@ -891,9 +820,8 @@ function modelVisibleSkills(skills) {
891
820
  }
892
821
  function parseSkillCommand(input) {
893
822
  const trimmed = input.trim();
894
- const prefix = trimmed.startsWith("/skill:") ? "/skill:" : trimmed.startsWith("/skills:") ? "/skills:" : trimmed.startsWith("/skill ") ? "/skill " : null;
895
- if (!prefix) return null;
896
- const rest = trimmed.slice(prefix.length).trim();
823
+ if (!trimmed.startsWith("/skill ")) return null;
824
+ const rest = trimmed.slice("/skill ".length).trim();
897
825
  const separator = rest.search(/\s/);
898
826
  const name = separator === -1 ? rest : rest.slice(0, separator);
899
827
  if (name.length === 0) return null;
@@ -975,11 +903,11 @@ function isSkillName(value) {
975
903
  return value.length > 0 && value.length <= 64 && SKILL_NAME_PATTERN.test(value);
976
904
  }
977
905
  function repoRelativePath(filePath) {
978
- if (path4.isAbsolute(filePath) || filePath.includes("\0")) return null;
906
+ if (path3.isAbsolute(filePath) || filePath.includes("\0")) return null;
979
907
  const segments = filePath.split("/");
980
908
  if (segments.some((segment) => segment === "..")) return null;
981
- const normalized = path4.posix.normalize(filePath);
982
- if (normalized.startsWith("..") || path4.posix.isAbsolute(normalized)) return null;
909
+ const normalized = path3.posix.normalize(filePath);
910
+ if (normalized.startsWith("..") || path3.posix.isAbsolute(normalized)) return null;
983
911
  return normalized;
984
912
  }
985
913
  function parseSkillSourceSpec(source) {
@@ -1010,8 +938,11 @@ function parseSkillSourceSpec(source) {
1010
938
  };
1011
939
  }
1012
940
  if (trimmed.startsWith("http://") || trimmed.startsWith("https://")) return null;
1013
- const expanded = trimmed.startsWith("~/") ? path4.join(homedir2(), trimmed.slice(2)) : trimmed;
1014
- return { kind: "local", path: path4.resolve(expanded), original: trimmed };
941
+ const expanded = trimmed.startsWith("~/") ? path3.join(homedir2(), trimmed.slice(2)) : trimmed;
942
+ return { kind: "local", path: path3.resolve(expanded), original: trimmed };
943
+ }
944
+ function installingAsWorker() {
945
+ return process.env.CLIO_CODER_WORKER_RUN === "1";
1015
946
  }
1016
947
  function yamlQuote(value) {
1017
948
  return `"${value.replace(/\\/g, "\\\\").replace(/"/g, '\\"')}"`;
@@ -1026,7 +957,8 @@ function injectProvenanceFrontmatter(rawText, fields) {
1026
957
  ...fields.updatedAt ? [`updated-at: ${yamlQuote(fields.updatedAt)}`] : [],
1027
958
  `installed-hash: ${yamlQuote(fields.installedHash)}`,
1028
959
  // Audit is a human decision; installs always land unreviewed.
1029
- "audit: unknown"
960
+ "audit: unknown",
961
+ ...fields.installedBy ? [`installed-by: ${yamlQuote(fields.installedBy)}`] : []
1030
962
  ];
1031
963
  const clioIndex = kept.findIndex((line) => /^clio:/.test(line));
1032
964
  if (clioIndex >= 0 && !/^clio:\s*$/.test(kept[clioIndex])) {
@@ -1045,13 +977,13 @@ function injectProvenanceFrontmatter(rawText, fields) {
1045
977
  return `${region.head}${[...kept.slice(0, blockEnd), ...nested, ...kept.slice(blockEnd)].join("\n")}${region.tail}`;
1046
978
  }
1047
979
  function resolveSkillDir(target) {
1048
- if (!existsSync4(target)) throw new Error(`skill source path does not exist: ${target}`);
1049
- const stat = statSync2(target);
980
+ if (!existsSync3(target)) throw new Error(`skill source path does not exist: ${target}`);
981
+ const stat = statSync(target);
1050
982
  if (stat.isFile()) {
1051
983
  if (!target.endsWith(".md")) throw new Error(`skill source must be a SKILL.md file or directory: ${target}`);
1052
- return path4.dirname(target);
984
+ return path3.dirname(target);
1053
985
  }
1054
- if (!existsSync4(path4.join(target, "SKILL.md"))) {
986
+ if (!existsSync3(path3.join(target, "SKILL.md"))) {
1055
987
  throw new Error(`skill source directory has no SKILL.md: ${target}`);
1056
988
  }
1057
989
  return target;
@@ -1061,15 +993,15 @@ function fetchSource(spec) {
1061
993
  return { skillDir: resolveSkillDir(spec.path), cleanup: () => {
1062
994
  } };
1063
995
  }
1064
- const tmp = mkdtempSync(path4.join(tmpdir(), "clio-skill-"));
996
+ const tmp = mkdtempSync(path3.join(tmpdir(), "clio-skill-"));
1065
997
  const cleanup = () => rmSync(tmp, { recursive: true, force: true });
1066
998
  try {
1067
999
  execFileSync("git", ["clone", "--depth", "1", "--branch", spec.branch, spec.cloneUrl, tmp], {
1068
1000
  stdio: "pipe",
1069
1001
  timeout: CLONE_TIMEOUT_MS
1070
1002
  });
1071
- const target = path4.join(tmp, spec.filePath);
1072
- if (!existsSync4(target)) {
1003
+ const target = path3.join(tmp, spec.filePath);
1004
+ if (!existsSync3(target)) {
1073
1005
  throw new Error(
1074
1006
  `${spec.cloneUrl} (branch ${spec.branch}) has no ${spec.filePath}; the source-url may name a path that branch does not carry`
1075
1007
  );
@@ -1081,11 +1013,11 @@ function fetchSource(spec) {
1081
1013
  }
1082
1014
  }
1083
1015
  function copySkillDir(from, to) {
1084
- mkdirSync(path4.dirname(to), { recursive: true });
1016
+ mkdirSync(path3.dirname(to), { recursive: true });
1085
1017
  cpSync(from, to, {
1086
1018
  recursive: true,
1087
1019
  filter: (source) => {
1088
- const base = path4.basename(source);
1020
+ const base = path3.basename(source);
1089
1021
  return base !== ".git" && base !== "node_modules";
1090
1022
  }
1091
1023
  });
@@ -1102,7 +1034,7 @@ function swapSkillDir(stage, dest) {
1102
1034
  rmSync(staging, { recursive: true, force: true });
1103
1035
  throw err;
1104
1036
  }
1105
- const hadPrevious = existsSync4(dest);
1037
+ const hadPrevious = existsSync3(dest);
1106
1038
  if (hadPrevious) renameSync(dest, backup);
1107
1039
  try {
1108
1040
  renameSync(staging, dest);
@@ -1112,10 +1044,10 @@ function swapSkillDir(stage, dest) {
1112
1044
  throw err;
1113
1045
  }
1114
1046
  if (hadPrevious) rmSync(backup, { recursive: true, force: true });
1115
- fsyncDirectory(path4.dirname(dest));
1047
+ fsyncDirectory(path3.dirname(dest));
1116
1048
  }
1117
1049
  function destinationRoot(scope, cwd, configDir) {
1118
- return scope === "user" ? path4.join(configDir ?? clioConfigDir(), "skills") : path4.join(cwd, ".clio-coder", "skills");
1050
+ return scope === "user" ? path3.join(configDir ?? clioConfigDir(), "skills") : path3.join(cwd, ".clio-coder", "skills");
1119
1051
  }
1120
1052
  function validateSourceSkill(skillDir) {
1121
1053
  const list = loadSkills({ disableDiscovery: true, explicitSkillPaths: [skillDir] });
@@ -1141,27 +1073,28 @@ function installSkillFromSource(input) {
1141
1073
  if (!isSkillName(name)) {
1142
1074
  throw new Error(`invalid skill name "${name}": use lowercase letters, numbers, and single hyphens`);
1143
1075
  }
1144
- const dest = path4.join(destinationRoot(scope, cwd, input.configDir), name);
1145
- if (existsSync4(dest) && input.force !== true) {
1076
+ const dest = path3.join(destinationRoot(scope, cwd, input.configDir), name);
1077
+ if (existsSync3(dest) && input.force !== true) {
1146
1078
  throw new Error(`skill already installed at ${dest} (use --force to overwrite)`);
1147
1079
  }
1148
1080
  const sourceRaw = readFileSync3(skill.filePath, "utf8");
1149
1081
  const installedHash = normalizedSkillHash(sourceRaw);
1150
- const destFile = path4.join(dest, "SKILL.md");
1082
+ const destFile = path3.join(dest, "SKILL.md");
1151
1083
  swapSkillDir((staging) => {
1152
1084
  copySkillDir(fetched.skillDir, staging);
1153
1085
  writeFileSync(
1154
- path4.join(staging, "SKILL.md"),
1086
+ path3.join(staging, "SKILL.md"),
1155
1087
  injectProvenanceFrontmatter(sourceRaw, {
1156
1088
  sourceUrl: spec.original,
1157
1089
  installedAt: (/* @__PURE__ */ new Date()).toISOString(),
1158
- installedHash
1090
+ installedHash,
1091
+ ...installingAsWorker() ? { installedBy: "worker" } : {}
1159
1092
  }),
1160
1093
  "utf8"
1161
1094
  );
1162
1095
  }, dest);
1163
1096
  const after = loadSkills({ cwd, ...scope === "user" && input.configDir ? { configDir: input.configDir } : {} });
1164
- const installWarnings = after.diagnostics.filter((diag) => diag.path && path4.resolve(diag.path).startsWith(dest)).map((diag) => diag.message);
1097
+ const installWarnings = after.diagnostics.filter((diag) => diag.path && path3.resolve(diag.path).startsWith(dest)).map((diag) => diag.message);
1165
1098
  return {
1166
1099
  name,
1167
1100
  scope,
@@ -1186,7 +1119,7 @@ function updateOne(skill, force) {
1186
1119
  const fetched = fetchSource(spec);
1187
1120
  try {
1188
1121
  validateSourceSkill(fetched.skillDir);
1189
- const remoteFile = path4.join(fetched.skillDir, "SKILL.md");
1122
+ const remoteFile = path3.join(fetched.skillDir, "SKILL.md");
1190
1123
  const remoteRaw = readFileSync3(remoteFile, "utf8");
1191
1124
  const remoteHash = normalizedSkillHash(remoteRaw);
1192
1125
  const localRaw = readFileSync3(skill.filePath, "utf8");
@@ -1200,12 +1133,15 @@ function updateOne(skill, force) {
1200
1133
  swapSkillDir((staging) => {
1201
1134
  copySkillDir(fetched.skillDir, staging);
1202
1135
  writeFileSync(
1203
- path4.join(staging, "SKILL.md"),
1136
+ path3.join(staging, "SKILL.md"),
1204
1137
  injectProvenanceFrontmatter(remoteRaw, {
1205
1138
  sourceUrl,
1206
1139
  installedAt: skill.provenance?.installedAt ?? (/* @__PURE__ */ new Date()).toISOString(),
1207
1140
  updatedAt: (/* @__PURE__ */ new Date()).toISOString(),
1208
- installedHash: remoteHash
1141
+ installedHash: remoteHash,
1142
+ // Who installed a skill is set once; an update, worker- or
1143
+ // operator-run, does not change who put it there originally.
1144
+ ...skill.provenance?.installedBy ? { installedBy: skill.provenance.installedBy } : {}
1209
1145
  }),
1210
1146
  "utf8"
1211
1147
  );
@@ -1231,12 +1167,6 @@ function updateSkills(input = {}) {
1231
1167
  }
1232
1168
 
1233
1169
  export {
1234
- COMPAT_RESOURCE_PRECEDENCE,
1235
- defaultScopedResourceRoots,
1236
- sourceInfoForRoot,
1237
- readRootEntries,
1238
- splitYamlFrontmatter,
1239
- stringField,
1240
1170
  updateSkills,
1241
1171
  MARKETPLACE_UNCONFIGURED,
1242
1172
  discoverMarketplaceSkills,
@@ -1249,4 +1179,4 @@ export {
1249
1179
  expandSkillInvocationInput,
1250
1180
  parsePendingSkillRequests
1251
1181
  };
1252
- //# sourceMappingURL=chunk-474KN5II.js.map
1182
+ //# sourceMappingURL=chunk-4BPJXDWC.js.map