cli-jaw 0.1.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 (845) hide show
  1. package/LICENSE +21 -0
  2. package/README.ko.md +411 -0
  3. package/README.md +416 -0
  4. package/README.zh-CN.md +411 -0
  5. package/dist/bin/cli-jaw.js +108 -0
  6. package/dist/bin/cli-jaw.js.map +1 -0
  7. package/dist/bin/commands/browser.js +241 -0
  8. package/dist/bin/commands/browser.js.map +1 -0
  9. package/dist/bin/commands/chat.js +878 -0
  10. package/dist/bin/commands/chat.js.map +1 -0
  11. package/dist/bin/commands/doctor.js +152 -0
  12. package/dist/bin/commands/doctor.js.map +1 -0
  13. package/dist/bin/commands/employee.js +70 -0
  14. package/dist/bin/commands/employee.js.map +1 -0
  15. package/dist/bin/commands/init.js +110 -0
  16. package/dist/bin/commands/init.js.map +1 -0
  17. package/dist/bin/commands/mcp.js +219 -0
  18. package/dist/bin/commands/mcp.js.map +1 -0
  19. package/dist/bin/commands/memory.js +105 -0
  20. package/dist/bin/commands/memory.js.map +1 -0
  21. package/dist/bin/commands/reset.js +109 -0
  22. package/dist/bin/commands/reset.js.map +1 -0
  23. package/dist/bin/commands/serve.js +75 -0
  24. package/dist/bin/commands/serve.js.map +1 -0
  25. package/dist/bin/commands/skill.js +232 -0
  26. package/dist/bin/commands/skill.js.map +1 -0
  27. package/dist/bin/commands/status.js +51 -0
  28. package/dist/bin/commands/status.js.map +1 -0
  29. package/dist/bin/postinstall.js +218 -0
  30. package/dist/bin/postinstall.js.map +1 -0
  31. package/dist/lib/mcp-sync.js +639 -0
  32. package/dist/lib/mcp-sync.js.map +1 -0
  33. package/dist/lib/quota-copilot.js +62 -0
  34. package/dist/lib/quota-copilot.js.map +1 -0
  35. package/dist/lib/upload.js +72 -0
  36. package/dist/lib/upload.js.map +1 -0
  37. package/dist/server.js +832 -0
  38. package/dist/server.js.map +1 -0
  39. package/dist/src/agent/args.js +66 -0
  40. package/dist/src/agent/args.js.map +1 -0
  41. package/dist/src/agent/events.js +328 -0
  42. package/dist/src/agent/events.js.map +1 -0
  43. package/dist/src/agent/spawn.js +646 -0
  44. package/dist/src/agent/spawn.js.map +1 -0
  45. package/dist/src/browser/actions.js +168 -0
  46. package/dist/src/browser/actions.js.map +1 -0
  47. package/dist/src/browser/connection.js +79 -0
  48. package/dist/src/browser/connection.js.map +1 -0
  49. package/dist/src/browser/index.js +4 -0
  50. package/dist/src/browser/index.js.map +1 -0
  51. package/dist/src/browser/vision.js +128 -0
  52. package/dist/src/browser/vision.js.map +1 -0
  53. package/dist/src/cli/acp-client.js +298 -0
  54. package/dist/src/cli/acp-client.js.map +1 -0
  55. package/dist/src/cli/commands.js +267 -0
  56. package/dist/src/cli/commands.js.map +1 -0
  57. package/dist/src/cli/handlers.js +405 -0
  58. package/dist/src/cli/handlers.js.map +1 -0
  59. package/dist/src/cli/registry.js +87 -0
  60. package/dist/src/cli/registry.js.map +1 -0
  61. package/dist/src/command-contract/catalog.js +36 -0
  62. package/dist/src/command-contract/catalog.js.map +1 -0
  63. package/dist/src/command-contract/help-renderer.js +39 -0
  64. package/dist/src/command-contract/help-renderer.js.map +1 -0
  65. package/dist/src/command-contract/policy.js +34 -0
  66. package/dist/src/command-contract/policy.js.map +1 -0
  67. package/dist/src/core/bus.js +17 -0
  68. package/dist/src/core/bus.js.map +1 -0
  69. package/dist/src/core/config.js +198 -0
  70. package/dist/src/core/config.js.map +1 -0
  71. package/dist/src/core/db.js +97 -0
  72. package/dist/src/core/db.js.map +1 -0
  73. package/dist/src/core/i18n.js +86 -0
  74. package/dist/src/core/i18n.js.map +1 -0
  75. package/dist/src/core/logger.js +14 -0
  76. package/dist/src/core/logger.js.map +1 -0
  77. package/dist/src/core/settings-merge.js +40 -0
  78. package/dist/src/core/settings-merge.js.map +1 -0
  79. package/dist/src/http/async-handler.js +6 -0
  80. package/dist/src/http/async-handler.js.map +1 -0
  81. package/dist/src/http/error-middleware.js +24 -0
  82. package/dist/src/http/error-middleware.js.map +1 -0
  83. package/dist/src/http/response.js +16 -0
  84. package/dist/src/http/response.js.map +1 -0
  85. package/dist/src/memory/heartbeat.js +106 -0
  86. package/dist/src/memory/heartbeat.js.map +1 -0
  87. package/dist/src/memory/memory.js +119 -0
  88. package/dist/src/memory/memory.js.map +1 -0
  89. package/dist/src/memory/worklog.js +154 -0
  90. package/dist/src/memory/worklog.js.map +1 -0
  91. package/dist/src/orchestrator/distribute.js +310 -0
  92. package/dist/src/orchestrator/distribute.js.map +1 -0
  93. package/dist/src/orchestrator/parser.js +118 -0
  94. package/dist/src/orchestrator/parser.js.map +1 -0
  95. package/dist/src/orchestrator/pipeline.js +343 -0
  96. package/dist/src/orchestrator/pipeline.js.map +1 -0
  97. package/dist/src/prompt/builder.js +531 -0
  98. package/dist/src/prompt/builder.js.map +1 -0
  99. package/dist/src/routes/browser.js +126 -0
  100. package/dist/src/routes/browser.js.map +1 -0
  101. package/dist/src/routes/quota.js +94 -0
  102. package/dist/src/routes/quota.js.map +1 -0
  103. package/dist/src/security/decode.js +23 -0
  104. package/dist/src/security/decode.js.map +1 -0
  105. package/dist/src/security/path-guards.js +62 -0
  106. package/dist/src/security/path-guards.js.map +1 -0
  107. package/dist/src/telegram/bot.js +469 -0
  108. package/dist/src/telegram/bot.js.map +1 -0
  109. package/dist/src/telegram/forwarder.js +93 -0
  110. package/dist/src/telegram/forwarder.js.map +1 -0
  111. package/package.json +80 -0
  112. package/public/css/chat.css +571 -0
  113. package/public/css/layout.css +350 -0
  114. package/public/css/markdown.css +270 -0
  115. package/public/css/modals.css +172 -0
  116. package/public/css/sidebar.css +225 -0
  117. package/public/css/variables.css +142 -0
  118. package/public/index.html +470 -0
  119. package/public/js/api.js +55 -0
  120. package/public/js/constants.js +119 -0
  121. package/public/js/features/appname.js +43 -0
  122. package/public/js/features/chat.js +242 -0
  123. package/public/js/features/employees.js +120 -0
  124. package/public/js/features/heartbeat.js +80 -0
  125. package/public/js/features/i18n.js +125 -0
  126. package/public/js/features/memory.js +85 -0
  127. package/public/js/features/settings.js +512 -0
  128. package/public/js/features/sidebar.js +88 -0
  129. package/public/js/features/skills.js +68 -0
  130. package/public/js/features/slash-commands.js +231 -0
  131. package/public/js/features/theme.js +40 -0
  132. package/public/js/locale.js +23 -0
  133. package/public/js/main.js +281 -0
  134. package/public/js/render.js +294 -0
  135. package/public/js/state.js +16 -0
  136. package/public/js/ui.js +172 -0
  137. package/public/js/ws.js +76 -0
  138. package/public/locales/en.json +180 -0
  139. package/public/locales/ko.json +180 -0
  140. package/public/theme-test.html +545 -0
  141. package/skills_ref/1password/SKILL.md +70 -0
  142. package/skills_ref/agents-sdk/SKILL.md +155 -0
  143. package/skills_ref/agents-sdk/references/callable.md +92 -0
  144. package/skills_ref/agents-sdk/references/codemode.md +207 -0
  145. package/skills_ref/agents-sdk/references/email.md +146 -0
  146. package/skills_ref/agents-sdk/references/mcp.md +154 -0
  147. package/skills_ref/agents-sdk/references/state-scheduling.md +164 -0
  148. package/skills_ref/agents-sdk/references/streaming-chat.md +178 -0
  149. package/skills_ref/agents-sdk/references/workflows.md +132 -0
  150. package/skills_ref/algorithmic-art/LICENSE.txt +202 -0
  151. package/skills_ref/algorithmic-art/SKILL.md +405 -0
  152. package/skills_ref/algorithmic-art/templates/generator_template.js +223 -0
  153. package/skills_ref/algorithmic-art/templates/viewer.html +599 -0
  154. package/skills_ref/apple-notes/SKILL.md +77 -0
  155. package/skills_ref/apple-reminders/SKILL.md +118 -0
  156. package/skills_ref/atlas/SKILL.md +99 -0
  157. package/skills_ref/brainstorming/SKILL.md +96 -0
  158. package/skills_ref/browser/SKILL.md +179 -0
  159. package/skills_ref/canvas-design/LICENSE.txt +202 -0
  160. package/skills_ref/canvas-design/SKILL.md +130 -0
  161. package/skills_ref/canvas-design/canvas-fonts/ArsenalSC-OFL.txt +93 -0
  162. package/skills_ref/canvas-design/canvas-fonts/ArsenalSC-Regular.ttf +0 -0
  163. package/skills_ref/canvas-design/canvas-fonts/BigShoulders-Bold.ttf +0 -0
  164. package/skills_ref/canvas-design/canvas-fonts/BigShoulders-OFL.txt +93 -0
  165. package/skills_ref/canvas-design/canvas-fonts/BigShoulders-Regular.ttf +0 -0
  166. package/skills_ref/canvas-design/canvas-fonts/Boldonse-OFL.txt +93 -0
  167. package/skills_ref/canvas-design/canvas-fonts/Boldonse-Regular.ttf +0 -0
  168. package/skills_ref/canvas-design/canvas-fonts/BricolageGrotesque-Bold.ttf +0 -0
  169. package/skills_ref/canvas-design/canvas-fonts/BricolageGrotesque-OFL.txt +93 -0
  170. package/skills_ref/canvas-design/canvas-fonts/BricolageGrotesque-Regular.ttf +0 -0
  171. package/skills_ref/canvas-design/canvas-fonts/CrimsonPro-Bold.ttf +0 -0
  172. package/skills_ref/canvas-design/canvas-fonts/CrimsonPro-Italic.ttf +0 -0
  173. package/skills_ref/canvas-design/canvas-fonts/CrimsonPro-OFL.txt +93 -0
  174. package/skills_ref/canvas-design/canvas-fonts/CrimsonPro-Regular.ttf +0 -0
  175. package/skills_ref/canvas-design/canvas-fonts/DMMono-OFL.txt +93 -0
  176. package/skills_ref/canvas-design/canvas-fonts/DMMono-Regular.ttf +0 -0
  177. package/skills_ref/canvas-design/canvas-fonts/EricaOne-OFL.txt +94 -0
  178. package/skills_ref/canvas-design/canvas-fonts/EricaOne-Regular.ttf +0 -0
  179. package/skills_ref/canvas-design/canvas-fonts/GeistMono-Bold.ttf +0 -0
  180. package/skills_ref/canvas-design/canvas-fonts/GeistMono-OFL.txt +93 -0
  181. package/skills_ref/canvas-design/canvas-fonts/GeistMono-Regular.ttf +0 -0
  182. package/skills_ref/canvas-design/canvas-fonts/Gloock-OFL.txt +93 -0
  183. package/skills_ref/canvas-design/canvas-fonts/Gloock-Regular.ttf +0 -0
  184. package/skills_ref/canvas-design/canvas-fonts/IBMPlexMono-Bold.ttf +0 -0
  185. package/skills_ref/canvas-design/canvas-fonts/IBMPlexMono-OFL.txt +93 -0
  186. package/skills_ref/canvas-design/canvas-fonts/IBMPlexMono-Regular.ttf +0 -0
  187. package/skills_ref/canvas-design/canvas-fonts/IBMPlexSerif-Bold.ttf +0 -0
  188. package/skills_ref/canvas-design/canvas-fonts/IBMPlexSerif-BoldItalic.ttf +0 -0
  189. package/skills_ref/canvas-design/canvas-fonts/IBMPlexSerif-Italic.ttf +0 -0
  190. package/skills_ref/canvas-design/canvas-fonts/IBMPlexSerif-Regular.ttf +0 -0
  191. package/skills_ref/canvas-design/canvas-fonts/InstrumentSans-Bold.ttf +0 -0
  192. package/skills_ref/canvas-design/canvas-fonts/InstrumentSans-BoldItalic.ttf +0 -0
  193. package/skills_ref/canvas-design/canvas-fonts/InstrumentSans-Italic.ttf +0 -0
  194. package/skills_ref/canvas-design/canvas-fonts/InstrumentSans-OFL.txt +93 -0
  195. package/skills_ref/canvas-design/canvas-fonts/InstrumentSans-Regular.ttf +0 -0
  196. package/skills_ref/canvas-design/canvas-fonts/InstrumentSerif-Italic.ttf +0 -0
  197. package/skills_ref/canvas-design/canvas-fonts/InstrumentSerif-Regular.ttf +0 -0
  198. package/skills_ref/canvas-design/canvas-fonts/Italiana-OFL.txt +93 -0
  199. package/skills_ref/canvas-design/canvas-fonts/Italiana-Regular.ttf +0 -0
  200. package/skills_ref/canvas-design/canvas-fonts/JetBrainsMono-Bold.ttf +0 -0
  201. package/skills_ref/canvas-design/canvas-fonts/JetBrainsMono-OFL.txt +93 -0
  202. package/skills_ref/canvas-design/canvas-fonts/JetBrainsMono-Regular.ttf +0 -0
  203. package/skills_ref/canvas-design/canvas-fonts/Jura-Light.ttf +0 -0
  204. package/skills_ref/canvas-design/canvas-fonts/Jura-Medium.ttf +0 -0
  205. package/skills_ref/canvas-design/canvas-fonts/Jura-OFL.txt +93 -0
  206. package/skills_ref/canvas-design/canvas-fonts/LibreBaskerville-OFL.txt +93 -0
  207. package/skills_ref/canvas-design/canvas-fonts/LibreBaskerville-Regular.ttf +0 -0
  208. package/skills_ref/canvas-design/canvas-fonts/Lora-Bold.ttf +0 -0
  209. package/skills_ref/canvas-design/canvas-fonts/Lora-BoldItalic.ttf +0 -0
  210. package/skills_ref/canvas-design/canvas-fonts/Lora-Italic.ttf +0 -0
  211. package/skills_ref/canvas-design/canvas-fonts/Lora-OFL.txt +93 -0
  212. package/skills_ref/canvas-design/canvas-fonts/Lora-Regular.ttf +0 -0
  213. package/skills_ref/canvas-design/canvas-fonts/NationalPark-Bold.ttf +0 -0
  214. package/skills_ref/canvas-design/canvas-fonts/NationalPark-OFL.txt +93 -0
  215. package/skills_ref/canvas-design/canvas-fonts/NationalPark-Regular.ttf +0 -0
  216. package/skills_ref/canvas-design/canvas-fonts/NothingYouCouldDo-OFL.txt +93 -0
  217. package/skills_ref/canvas-design/canvas-fonts/NothingYouCouldDo-Regular.ttf +0 -0
  218. package/skills_ref/canvas-design/canvas-fonts/Outfit-Bold.ttf +0 -0
  219. package/skills_ref/canvas-design/canvas-fonts/Outfit-OFL.txt +93 -0
  220. package/skills_ref/canvas-design/canvas-fonts/Outfit-Regular.ttf +0 -0
  221. package/skills_ref/canvas-design/canvas-fonts/PixelifySans-Medium.ttf +0 -0
  222. package/skills_ref/canvas-design/canvas-fonts/PixelifySans-OFL.txt +93 -0
  223. package/skills_ref/canvas-design/canvas-fonts/PoiretOne-OFL.txt +93 -0
  224. package/skills_ref/canvas-design/canvas-fonts/PoiretOne-Regular.ttf +0 -0
  225. package/skills_ref/canvas-design/canvas-fonts/RedHatMono-Bold.ttf +0 -0
  226. package/skills_ref/canvas-design/canvas-fonts/RedHatMono-OFL.txt +93 -0
  227. package/skills_ref/canvas-design/canvas-fonts/RedHatMono-Regular.ttf +0 -0
  228. package/skills_ref/canvas-design/canvas-fonts/Silkscreen-OFL.txt +93 -0
  229. package/skills_ref/canvas-design/canvas-fonts/Silkscreen-Regular.ttf +0 -0
  230. package/skills_ref/canvas-design/canvas-fonts/SmoochSans-Medium.ttf +0 -0
  231. package/skills_ref/canvas-design/canvas-fonts/SmoochSans-OFL.txt +93 -0
  232. package/skills_ref/canvas-design/canvas-fonts/Tektur-Medium.ttf +0 -0
  233. package/skills_ref/canvas-design/canvas-fonts/Tektur-OFL.txt +93 -0
  234. package/skills_ref/canvas-design/canvas-fonts/Tektur-Regular.ttf +0 -0
  235. package/skills_ref/canvas-design/canvas-fonts/WorkSans-Bold.ttf +0 -0
  236. package/skills_ref/canvas-design/canvas-fonts/WorkSans-BoldItalic.ttf +0 -0
  237. package/skills_ref/canvas-design/canvas-fonts/WorkSans-Italic.ttf +0 -0
  238. package/skills_ref/canvas-design/canvas-fonts/WorkSans-OFL.txt +93 -0
  239. package/skills_ref/canvas-design/canvas-fonts/WorkSans-Regular.ttf +0 -0
  240. package/skills_ref/canvas-design/canvas-fonts/YoungSerif-OFL.txt +93 -0
  241. package/skills_ref/canvas-design/canvas-fonts/YoungSerif-Regular.ttf +0 -0
  242. package/skills_ref/changelog-generator/SKILL.md +104 -0
  243. package/skills_ref/cloudflare-deploy/SKILL.md +207 -0
  244. package/skills_ref/codebase-orientation/SKILL.md +29 -0
  245. package/skills_ref/config-file-explainer/SKILL.md +26 -0
  246. package/skills_ref/context-compression/SKILL.md +265 -0
  247. package/skills_ref/context-compression/references/evaluation-framework.md +213 -0
  248. package/skills_ref/context-compression/scripts/compression_evaluator.py +658 -0
  249. package/skills_ref/data-structure-chooser/SKILL.md +26 -0
  250. package/skills_ref/debugging-checklist/SKILL.md +26 -0
  251. package/skills_ref/debugging-helpers/CREATION-LOG.md +119 -0
  252. package/skills_ref/debugging-helpers/SKILL.md +296 -0
  253. package/skills_ref/debugging-helpers/condition-based-waiting-example.ts +158 -0
  254. package/skills_ref/debugging-helpers/condition-based-waiting.md +115 -0
  255. package/skills_ref/debugging-helpers/defense-in-depth.md +122 -0
  256. package/skills_ref/debugging-helpers/find-polluter.sh +63 -0
  257. package/skills_ref/debugging-helpers/root-cause-tracing.md +169 -0
  258. package/skills_ref/debugging-helpers/test-academic.md +14 -0
  259. package/skills_ref/debugging-helpers/test-pressure-1.md +58 -0
  260. package/skills_ref/debugging-helpers/test-pressure-2.md +68 -0
  261. package/skills_ref/debugging-helpers/test-pressure-3.md +69 -0
  262. package/skills_ref/deep-research/.env.example +7 -0
  263. package/skills_ref/deep-research/README.md +246 -0
  264. package/skills_ref/deep-research/SKILL.md +106 -0
  265. package/skills_ref/deep-research/requirements.txt +2 -0
  266. package/skills_ref/deep-research/scripts/research.py +692 -0
  267. package/skills_ref/dependency-install-helper/SKILL.md +26 -0
  268. package/skills_ref/dev/SKILL.md +65 -0
  269. package/skills_ref/dev-backend/SKILL.md +61 -0
  270. package/skills_ref/dev-data/SKILL.md +76 -0
  271. package/skills_ref/dev-frontend/LICENSE.txt +177 -0
  272. package/skills_ref/dev-frontend/SKILL.md +42 -0
  273. package/skills_ref/dev-testing/LICENSE.txt +202 -0
  274. package/skills_ref/dev-testing/SKILL.md +96 -0
  275. package/skills_ref/dev-testing/examples/console_logging.py +35 -0
  276. package/skills_ref/dev-testing/examples/element_discovery.py +40 -0
  277. package/skills_ref/dev-testing/examples/static_html_automation.py +33 -0
  278. package/skills_ref/dev-testing/scripts/with_server.py +106 -0
  279. package/skills_ref/develop-web-game/SKILL.md +149 -0
  280. package/skills_ref/differential-review/.claude-plugin/plugin.json +10 -0
  281. package/skills_ref/differential-review/README.md +109 -0
  282. package/skills_ref/differential-review/commands/diff-review.md +21 -0
  283. package/skills_ref/differential-review/skills/differential-review/SKILL.md +220 -0
  284. package/skills_ref/differential-review/skills/differential-review/adversarial.md +203 -0
  285. package/skills_ref/differential-review/skills/differential-review/methodology.md +234 -0
  286. package/skills_ref/differential-review/skills/differential-review/patterns.md +300 -0
  287. package/skills_ref/differential-review/skills/differential-review/reporting.md +369 -0
  288. package/skills_ref/dispatching-parallel-agents/SKILL.md +180 -0
  289. package/skills_ref/doc-coauthoring/SKILL.md +375 -0
  290. package/skills_ref/docx/LICENSE.txt +30 -0
  291. package/skills_ref/docx/SKILL.md +481 -0
  292. package/skills_ref/docx/scripts/__init__.py +1 -0
  293. package/skills_ref/docx/scripts/accept_changes.py +135 -0
  294. package/skills_ref/docx/scripts/comment.py +318 -0
  295. package/skills_ref/docx/scripts/office/helpers/__init__.py +0 -0
  296. package/skills_ref/docx/scripts/office/helpers/merge_runs.py +199 -0
  297. package/skills_ref/docx/scripts/office/helpers/simplify_redlines.py +197 -0
  298. package/skills_ref/docx/scripts/office/pack.py +159 -0
  299. package/skills_ref/docx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-chart.xsd +1499 -0
  300. package/skills_ref/docx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-chartDrawing.xsd +146 -0
  301. package/skills_ref/docx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-diagram.xsd +1085 -0
  302. package/skills_ref/docx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-lockedCanvas.xsd +11 -0
  303. package/skills_ref/docx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-main.xsd +3081 -0
  304. package/skills_ref/docx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-picture.xsd +23 -0
  305. package/skills_ref/docx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-spreadsheetDrawing.xsd +185 -0
  306. package/skills_ref/docx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-wordprocessingDrawing.xsd +287 -0
  307. package/skills_ref/docx/scripts/office/schemas/ISO-IEC29500-4_2016/pml.xsd +1676 -0
  308. package/skills_ref/docx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-additionalCharacteristics.xsd +28 -0
  309. package/skills_ref/docx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-bibliography.xsd +144 -0
  310. package/skills_ref/docx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-commonSimpleTypes.xsd +174 -0
  311. package/skills_ref/docx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-customXmlDataProperties.xsd +25 -0
  312. package/skills_ref/docx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-customXmlSchemaProperties.xsd +18 -0
  313. package/skills_ref/docx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesCustom.xsd +59 -0
  314. package/skills_ref/docx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesExtended.xsd +56 -0
  315. package/skills_ref/docx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesVariantTypes.xsd +195 -0
  316. package/skills_ref/docx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-math.xsd +582 -0
  317. package/skills_ref/docx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-relationshipReference.xsd +25 -0
  318. package/skills_ref/docx/scripts/office/schemas/ISO-IEC29500-4_2016/sml.xsd +4439 -0
  319. package/skills_ref/docx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-main.xsd +570 -0
  320. package/skills_ref/docx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-officeDrawing.xsd +509 -0
  321. package/skills_ref/docx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-presentationDrawing.xsd +12 -0
  322. package/skills_ref/docx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-spreadsheetDrawing.xsd +108 -0
  323. package/skills_ref/docx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-wordprocessingDrawing.xsd +96 -0
  324. package/skills_ref/docx/scripts/office/schemas/ISO-IEC29500-4_2016/wml.xsd +3646 -0
  325. package/skills_ref/docx/scripts/office/schemas/ISO-IEC29500-4_2016/xml.xsd +116 -0
  326. package/skills_ref/docx/scripts/office/schemas/ecma/fouth-edition/opc-contentTypes.xsd +42 -0
  327. package/skills_ref/docx/scripts/office/schemas/ecma/fouth-edition/opc-coreProperties.xsd +50 -0
  328. package/skills_ref/docx/scripts/office/schemas/ecma/fouth-edition/opc-digSig.xsd +49 -0
  329. package/skills_ref/docx/scripts/office/schemas/ecma/fouth-edition/opc-relationships.xsd +33 -0
  330. package/skills_ref/docx/scripts/office/schemas/mce/mc.xsd +75 -0
  331. package/skills_ref/docx/scripts/office/schemas/microsoft/wml-2010.xsd +560 -0
  332. package/skills_ref/docx/scripts/office/schemas/microsoft/wml-2012.xsd +67 -0
  333. package/skills_ref/docx/scripts/office/schemas/microsoft/wml-2018.xsd +14 -0
  334. package/skills_ref/docx/scripts/office/schemas/microsoft/wml-cex-2018.xsd +20 -0
  335. package/skills_ref/docx/scripts/office/schemas/microsoft/wml-cid-2016.xsd +13 -0
  336. package/skills_ref/docx/scripts/office/schemas/microsoft/wml-sdtdatahash-2020.xsd +4 -0
  337. package/skills_ref/docx/scripts/office/schemas/microsoft/wml-symex-2015.xsd +8 -0
  338. package/skills_ref/docx/scripts/office/soffice.py +183 -0
  339. package/skills_ref/docx/scripts/office/unpack.py +132 -0
  340. package/skills_ref/docx/scripts/office/validate.py +111 -0
  341. package/skills_ref/docx/scripts/office/validators/__init__.py +15 -0
  342. package/skills_ref/docx/scripts/office/validators/base.py +847 -0
  343. package/skills_ref/docx/scripts/office/validators/docx.py +446 -0
  344. package/skills_ref/docx/scripts/office/validators/pptx.py +275 -0
  345. package/skills_ref/docx/scripts/office/validators/redlining.py +247 -0
  346. package/skills_ref/docx/scripts/templates/comments.xml +3 -0
  347. package/skills_ref/docx/scripts/templates/commentsExtended.xml +3 -0
  348. package/skills_ref/docx/scripts/templates/commentsExtensible.xml +3 -0
  349. package/skills_ref/docx/scripts/templates/commentsIds.xml +3 -0
  350. package/skills_ref/docx/scripts/templates/people.xml +3 -0
  351. package/skills_ref/durable-objects/SKILL.md +186 -0
  352. package/skills_ref/durable-objects/references/rules.md +286 -0
  353. package/skills_ref/durable-objects/references/testing.md +264 -0
  354. package/skills_ref/durable-objects/references/workers.md +346 -0
  355. package/skills_ref/email-draft-polish/SKILL.md +24 -0
  356. package/skills_ref/error-message-explainer/SKILL.md +27 -0
  357. package/skills_ref/fal-image-edit/SKILL.md +249 -0
  358. package/skills_ref/fal-image-edit/scripts/edit-image.sh +199 -0
  359. package/skills_ref/figma-implement-design/SKILL.md +264 -0
  360. package/skills_ref/git-worktrees/SKILL.md +218 -0
  361. package/skills_ref/github/SKILL.md +210 -0
  362. package/skills_ref/gog/SKILL.md +116 -0
  363. package/skills_ref/goplaces/SKILL.md +52 -0
  364. package/skills_ref/himalaya/SKILL.md +257 -0
  365. package/skills_ref/hugging-face-cli/SKILL.md +186 -0
  366. package/skills_ref/hugging-face-cli/references/commands.md +954 -0
  367. package/skills_ref/hugging-face-cli/references/examples.md +374 -0
  368. package/skills_ref/hugging-face-evaluation/SKILL.md +651 -0
  369. package/skills_ref/hugging-face-evaluation/examples/.env.example +7 -0
  370. package/skills_ref/hugging-face-evaluation/examples/USAGE_EXAMPLES.md +382 -0
  371. package/skills_ref/hugging-face-evaluation/examples/artificial_analysis_to_hub.py +141 -0
  372. package/skills_ref/hugging-face-evaluation/examples/example_readme_tables.md +135 -0
  373. package/skills_ref/hugging-face-evaluation/examples/metric_mapping.json +50 -0
  374. package/skills_ref/hugging-face-evaluation/requirements.txt +20 -0
  375. package/skills_ref/hugging-face-evaluation/scripts/evaluation_manager.py +1374 -0
  376. package/skills_ref/hugging-face-evaluation/scripts/inspect_eval_uv.py +104 -0
  377. package/skills_ref/hugging-face-evaluation/scripts/inspect_vllm_uv.py +317 -0
  378. package/skills_ref/hugging-face-evaluation/scripts/lighteval_vllm_uv.py +303 -0
  379. package/skills_ref/hugging-face-evaluation/scripts/run_eval_job.py +98 -0
  380. package/skills_ref/hugging-face-evaluation/scripts/run_vllm_eval_job.py +331 -0
  381. package/skills_ref/hugging-face-evaluation/scripts/test_extraction.py +206 -0
  382. package/skills_ref/hugging-face-model-trainer/SKILL.md +718 -0
  383. package/skills_ref/hugging-face-model-trainer/references/gguf_conversion.md +296 -0
  384. package/skills_ref/hugging-face-model-trainer/references/hardware_guide.md +283 -0
  385. package/skills_ref/hugging-face-model-trainer/references/hub_saving.md +364 -0
  386. package/skills_ref/hugging-face-model-trainer/references/reliability_principles.md +371 -0
  387. package/skills_ref/hugging-face-model-trainer/references/trackio_guide.md +189 -0
  388. package/skills_ref/hugging-face-model-trainer/references/training_methods.md +150 -0
  389. package/skills_ref/hugging-face-model-trainer/references/training_patterns.md +203 -0
  390. package/skills_ref/hugging-face-model-trainer/references/troubleshooting.md +282 -0
  391. package/skills_ref/hugging-face-model-trainer/references/unsloth.md +313 -0
  392. package/skills_ref/hugging-face-model-trainer/scripts/convert_to_gguf.py +424 -0
  393. package/skills_ref/hugging-face-model-trainer/scripts/dataset_inspector.py +417 -0
  394. package/skills_ref/hugging-face-model-trainer/scripts/estimate_cost.py +150 -0
  395. package/skills_ref/hugging-face-model-trainer/scripts/train_dpo_example.py +106 -0
  396. package/skills_ref/hugging-face-model-trainer/scripts/train_grpo_example.py +89 -0
  397. package/skills_ref/hugging-face-model-trainer/scripts/train_sft_example.py +122 -0
  398. package/skills_ref/hugging-face-model-trainer/scripts/unsloth_sft_example.py +512 -0
  399. package/skills_ref/imagegen/SKILL.md +174 -0
  400. package/skills_ref/insecure-defaults/.claude-plugin/plugin.json +10 -0
  401. package/skills_ref/insecure-defaults/README.md +45 -0
  402. package/skills_ref/insecure-defaults/skills/insecure-defaults/SKILL.md +117 -0
  403. package/skills_ref/insecure-defaults/skills/insecure-defaults/references/examples.md +409 -0
  404. package/skills_ref/jupyter-notebook/SKILL.md +107 -0
  405. package/skills_ref/linear/SKILL.md +87 -0
  406. package/skills_ref/linter-fix-guide/SKILL.md +27 -0
  407. package/skills_ref/log-summarizer/SKILL.md +27 -0
  408. package/skills_ref/mcp-builder/LICENSE.txt +202 -0
  409. package/skills_ref/mcp-builder/SKILL.md +236 -0
  410. package/skills_ref/mcp-builder/reference/evaluation.md +602 -0
  411. package/skills_ref/mcp-builder/reference/mcp_best_practices.md +249 -0
  412. package/skills_ref/mcp-builder/reference/node_mcp_server.md +970 -0
  413. package/skills_ref/mcp-builder/reference/python_mcp_server.md +719 -0
  414. package/skills_ref/mcp-builder/scripts/connections.py +151 -0
  415. package/skills_ref/mcp-builder/scripts/evaluation.py +373 -0
  416. package/skills_ref/mcp-builder/scripts/example_evaluation.xml +22 -0
  417. package/skills_ref/mcp-builder/scripts/requirements.txt +2 -0
  418. package/skills_ref/memory/SKILL.md +129 -0
  419. package/skills_ref/modern-python/.claude-plugin/plugin.json +10 -0
  420. package/skills_ref/modern-python/README.md +66 -0
  421. package/skills_ref/modern-python/hooks/hooks.json +16 -0
  422. package/skills_ref/modern-python/hooks/setup-shims.bats +70 -0
  423. package/skills_ref/modern-python/hooks/setup-shims.sh +24 -0
  424. package/skills_ref/modern-python/hooks/shims/pip +27 -0
  425. package/skills_ref/modern-python/hooks/shims/pip-shim.bats +45 -0
  426. package/skills_ref/modern-python/hooks/shims/pip3 +27 -0
  427. package/skills_ref/modern-python/hooks/shims/pipx +41 -0
  428. package/skills_ref/modern-python/hooks/shims/pipx-shim.bats +64 -0
  429. package/skills_ref/modern-python/hooks/shims/python +26 -0
  430. package/skills_ref/modern-python/hooks/shims/python-shim.bats +53 -0
  431. package/skills_ref/modern-python/hooks/shims/python3 +26 -0
  432. package/skills_ref/modern-python/hooks/shims/uv +27 -0
  433. package/skills_ref/modern-python/hooks/shims/uv-shim.bats +47 -0
  434. package/skills_ref/modern-python/skills/modern-python/SKILL.md +333 -0
  435. package/skills_ref/modern-python/skills/modern-python/references/dependabot.md +43 -0
  436. package/skills_ref/modern-python/skills/modern-python/references/migration-checklist.md +141 -0
  437. package/skills_ref/modern-python/skills/modern-python/references/pep723-scripts.md +259 -0
  438. package/skills_ref/modern-python/skills/modern-python/references/prek.md +211 -0
  439. package/skills_ref/modern-python/skills/modern-python/references/pyproject.md +254 -0
  440. package/skills_ref/modern-python/skills/modern-python/references/ruff-config.md +240 -0
  441. package/skills_ref/modern-python/skills/modern-python/references/security-setup.md +255 -0
  442. package/skills_ref/modern-python/skills/modern-python/references/testing.md +284 -0
  443. package/skills_ref/modern-python/skills/modern-python/references/uv-commands.md +200 -0
  444. package/skills_ref/modern-python/skills/modern-python/templates/dependabot.yml +36 -0
  445. package/skills_ref/modern-python/skills/modern-python/templates/pre-commit-config.yaml +66 -0
  446. package/skills_ref/nano-banana-pro/SKILL.md +58 -0
  447. package/skills_ref/netlify-deploy/SKILL.md +233 -0
  448. package/skills_ref/notion/SKILL.md +304 -0
  449. package/skills_ref/notion-knowledge-capture/SKILL.md +56 -0
  450. package/skills_ref/notion-meeting-intelligence/SKILL.md +60 -0
  451. package/skills_ref/notion-research-documentation/SKILL.md +59 -0
  452. package/skills_ref/notion-spec-to-implementation/SKILL.md +58 -0
  453. package/skills_ref/obsidian/SKILL.md +81 -0
  454. package/skills_ref/openai-docs/SKILL.md +56 -0
  455. package/skills_ref/openhue/SKILL.md +112 -0
  456. package/skills_ref/pdf/SKILL.md +69 -0
  457. package/skills_ref/postgres/README.md +77 -0
  458. package/skills_ref/postgres/SKILL.md +129 -0
  459. package/skills_ref/postgres/connections.example.json +34 -0
  460. package/skills_ref/postgres/requirements.txt +1 -0
  461. package/skills_ref/postgres/scripts/query.py +262 -0
  462. package/skills_ref/pptx/LICENSE.txt +30 -0
  463. package/skills_ref/pptx/SKILL.md +232 -0
  464. package/skills_ref/pptx/editing.md +205 -0
  465. package/skills_ref/pptx/pptxgenjs.md +420 -0
  466. package/skills_ref/pptx/scripts/__init__.py +0 -0
  467. package/skills_ref/pptx/scripts/add_slide.py +195 -0
  468. package/skills_ref/pptx/scripts/clean.py +286 -0
  469. package/skills_ref/pptx/scripts/office/helpers/__init__.py +0 -0
  470. package/skills_ref/pptx/scripts/office/helpers/merge_runs.py +199 -0
  471. package/skills_ref/pptx/scripts/office/helpers/simplify_redlines.py +197 -0
  472. package/skills_ref/pptx/scripts/office/pack.py +159 -0
  473. package/skills_ref/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-chart.xsd +1499 -0
  474. package/skills_ref/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-chartDrawing.xsd +146 -0
  475. package/skills_ref/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-diagram.xsd +1085 -0
  476. package/skills_ref/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-lockedCanvas.xsd +11 -0
  477. package/skills_ref/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-main.xsd +3081 -0
  478. package/skills_ref/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-picture.xsd +23 -0
  479. package/skills_ref/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-spreadsheetDrawing.xsd +185 -0
  480. package/skills_ref/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-wordprocessingDrawing.xsd +287 -0
  481. package/skills_ref/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/pml.xsd +1676 -0
  482. package/skills_ref/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-additionalCharacteristics.xsd +28 -0
  483. package/skills_ref/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-bibliography.xsd +144 -0
  484. package/skills_ref/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-commonSimpleTypes.xsd +174 -0
  485. package/skills_ref/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-customXmlDataProperties.xsd +25 -0
  486. package/skills_ref/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-customXmlSchemaProperties.xsd +18 -0
  487. package/skills_ref/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesCustom.xsd +59 -0
  488. package/skills_ref/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesExtended.xsd +56 -0
  489. package/skills_ref/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesVariantTypes.xsd +195 -0
  490. package/skills_ref/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-math.xsd +582 -0
  491. package/skills_ref/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-relationshipReference.xsd +25 -0
  492. package/skills_ref/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/sml.xsd +4439 -0
  493. package/skills_ref/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-main.xsd +570 -0
  494. package/skills_ref/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-officeDrawing.xsd +509 -0
  495. package/skills_ref/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-presentationDrawing.xsd +12 -0
  496. package/skills_ref/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-spreadsheetDrawing.xsd +108 -0
  497. package/skills_ref/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-wordprocessingDrawing.xsd +96 -0
  498. package/skills_ref/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/wml.xsd +3646 -0
  499. package/skills_ref/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/xml.xsd +116 -0
  500. package/skills_ref/pptx/scripts/office/schemas/ecma/fouth-edition/opc-contentTypes.xsd +42 -0
  501. package/skills_ref/pptx/scripts/office/schemas/ecma/fouth-edition/opc-coreProperties.xsd +50 -0
  502. package/skills_ref/pptx/scripts/office/schemas/ecma/fouth-edition/opc-digSig.xsd +49 -0
  503. package/skills_ref/pptx/scripts/office/schemas/ecma/fouth-edition/opc-relationships.xsd +33 -0
  504. package/skills_ref/pptx/scripts/office/schemas/mce/mc.xsd +75 -0
  505. package/skills_ref/pptx/scripts/office/schemas/microsoft/wml-2010.xsd +560 -0
  506. package/skills_ref/pptx/scripts/office/schemas/microsoft/wml-2012.xsd +67 -0
  507. package/skills_ref/pptx/scripts/office/schemas/microsoft/wml-2018.xsd +14 -0
  508. package/skills_ref/pptx/scripts/office/schemas/microsoft/wml-cex-2018.xsd +20 -0
  509. package/skills_ref/pptx/scripts/office/schemas/microsoft/wml-cid-2016.xsd +13 -0
  510. package/skills_ref/pptx/scripts/office/schemas/microsoft/wml-sdtdatahash-2020.xsd +4 -0
  511. package/skills_ref/pptx/scripts/office/schemas/microsoft/wml-symex-2015.xsd +8 -0
  512. package/skills_ref/pptx/scripts/office/soffice.py +183 -0
  513. package/skills_ref/pptx/scripts/office/unpack.py +132 -0
  514. package/skills_ref/pptx/scripts/office/validate.py +111 -0
  515. package/skills_ref/pptx/scripts/office/validators/__init__.py +15 -0
  516. package/skills_ref/pptx/scripts/office/validators/base.py +847 -0
  517. package/skills_ref/pptx/scripts/office/validators/docx.py +446 -0
  518. package/skills_ref/pptx/scripts/office/validators/pptx.py +275 -0
  519. package/skills_ref/pptx/scripts/office/validators/redlining.py +247 -0
  520. package/skills_ref/pptx/scripts/thumbnail.py +289 -0
  521. package/skills_ref/property-based-testing/.claude-plugin/plugin.json +9 -0
  522. package/skills_ref/property-based-testing/README.md +47 -0
  523. package/skills_ref/property-based-testing/skills/property-based-testing/README.md +88 -0
  524. package/skills_ref/property-based-testing/skills/property-based-testing/SKILL.md +123 -0
  525. package/skills_ref/property-based-testing/skills/property-based-testing/references/design.md +191 -0
  526. package/skills_ref/property-based-testing/skills/property-based-testing/references/generating.md +204 -0
  527. package/skills_ref/property-based-testing/skills/property-based-testing/references/interpreting-failures.md +239 -0
  528. package/skills_ref/property-based-testing/skills/property-based-testing/references/libraries.md +130 -0
  529. package/skills_ref/property-based-testing/skills/property-based-testing/references/refactoring.md +181 -0
  530. package/skills_ref/property-based-testing/skills/property-based-testing/references/reviewing.md +209 -0
  531. package/skills_ref/property-based-testing/skills/property-based-testing/references/strategies.md +124 -0
  532. package/skills_ref/react-best-practices/AGENTS.md +2934 -0
  533. package/skills_ref/react-best-practices/README.md +123 -0
  534. package/skills_ref/react-best-practices/SKILL.md +136 -0
  535. package/skills_ref/react-best-practices/metadata.json +15 -0
  536. package/skills_ref/react-best-practices/rules/_sections.md +46 -0
  537. package/skills_ref/react-best-practices/rules/_template.md +28 -0
  538. package/skills_ref/react-best-practices/rules/advanced-event-handler-refs.md +55 -0
  539. package/skills_ref/react-best-practices/rules/advanced-init-once.md +42 -0
  540. package/skills_ref/react-best-practices/rules/advanced-use-latest.md +39 -0
  541. package/skills_ref/react-best-practices/rules/async-api-routes.md +38 -0
  542. package/skills_ref/react-best-practices/rules/async-defer-await.md +80 -0
  543. package/skills_ref/react-best-practices/rules/async-dependencies.md +51 -0
  544. package/skills_ref/react-best-practices/rules/async-parallel.md +28 -0
  545. package/skills_ref/react-best-practices/rules/async-suspense-boundaries.md +99 -0
  546. package/skills_ref/react-best-practices/rules/bundle-barrel-imports.md +59 -0
  547. package/skills_ref/react-best-practices/rules/bundle-conditional.md +31 -0
  548. package/skills_ref/react-best-practices/rules/bundle-defer-third-party.md +49 -0
  549. package/skills_ref/react-best-practices/rules/bundle-dynamic-imports.md +35 -0
  550. package/skills_ref/react-best-practices/rules/bundle-preload.md +50 -0
  551. package/skills_ref/react-best-practices/rules/client-event-listeners.md +74 -0
  552. package/skills_ref/react-best-practices/rules/client-localstorage-schema.md +71 -0
  553. package/skills_ref/react-best-practices/rules/client-passive-event-listeners.md +48 -0
  554. package/skills_ref/react-best-practices/rules/client-swr-dedup.md +56 -0
  555. package/skills_ref/react-best-practices/rules/js-batch-dom-css.md +107 -0
  556. package/skills_ref/react-best-practices/rules/js-cache-function-results.md +80 -0
  557. package/skills_ref/react-best-practices/rules/js-cache-property-access.md +28 -0
  558. package/skills_ref/react-best-practices/rules/js-cache-storage.md +70 -0
  559. package/skills_ref/react-best-practices/rules/js-combine-iterations.md +32 -0
  560. package/skills_ref/react-best-practices/rules/js-early-exit.md +50 -0
  561. package/skills_ref/react-best-practices/rules/js-hoist-regexp.md +45 -0
  562. package/skills_ref/react-best-practices/rules/js-index-maps.md +37 -0
  563. package/skills_ref/react-best-practices/rules/js-length-check-first.md +49 -0
  564. package/skills_ref/react-best-practices/rules/js-min-max-loop.md +82 -0
  565. package/skills_ref/react-best-practices/rules/js-set-map-lookups.md +24 -0
  566. package/skills_ref/react-best-practices/rules/js-tosorted-immutable.md +57 -0
  567. package/skills_ref/react-best-practices/rules/rendering-activity.md +26 -0
  568. package/skills_ref/react-best-practices/rules/rendering-animate-svg-wrapper.md +47 -0
  569. package/skills_ref/react-best-practices/rules/rendering-conditional-render.md +40 -0
  570. package/skills_ref/react-best-practices/rules/rendering-content-visibility.md +38 -0
  571. package/skills_ref/react-best-practices/rules/rendering-hoist-jsx.md +46 -0
  572. package/skills_ref/react-best-practices/rules/rendering-hydration-no-flicker.md +82 -0
  573. package/skills_ref/react-best-practices/rules/rendering-hydration-suppress-warning.md +30 -0
  574. package/skills_ref/react-best-practices/rules/rendering-svg-precision.md +28 -0
  575. package/skills_ref/react-best-practices/rules/rendering-usetransition-loading.md +75 -0
  576. package/skills_ref/react-best-practices/rules/rerender-defer-reads.md +39 -0
  577. package/skills_ref/react-best-practices/rules/rerender-dependencies.md +45 -0
  578. package/skills_ref/react-best-practices/rules/rerender-derived-state-no-effect.md +40 -0
  579. package/skills_ref/react-best-practices/rules/rerender-derived-state.md +29 -0
  580. package/skills_ref/react-best-practices/rules/rerender-functional-setstate.md +74 -0
  581. package/skills_ref/react-best-practices/rules/rerender-lazy-state-init.md +58 -0
  582. package/skills_ref/react-best-practices/rules/rerender-memo-with-default-value.md +38 -0
  583. package/skills_ref/react-best-practices/rules/rerender-memo.md +44 -0
  584. package/skills_ref/react-best-practices/rules/rerender-move-effect-to-event.md +45 -0
  585. package/skills_ref/react-best-practices/rules/rerender-simple-expression-in-memo.md +35 -0
  586. package/skills_ref/react-best-practices/rules/rerender-transitions.md +40 -0
  587. package/skills_ref/react-best-practices/rules/rerender-use-ref-transient-values.md +73 -0
  588. package/skills_ref/react-best-practices/rules/server-after-nonblocking.md +73 -0
  589. package/skills_ref/react-best-practices/rules/server-auth-actions.md +96 -0
  590. package/skills_ref/react-best-practices/rules/server-cache-lru.md +41 -0
  591. package/skills_ref/react-best-practices/rules/server-cache-react.md +76 -0
  592. package/skills_ref/react-best-practices/rules/server-dedup-props.md +65 -0
  593. package/skills_ref/react-best-practices/rules/server-parallel-fetching.md +83 -0
  594. package/skills_ref/react-best-practices/rules/server-serialization.md +38 -0
  595. package/skills_ref/receiving-code-review/SKILL.md +213 -0
  596. package/skills_ref/registry.json +1493 -0
  597. package/skills_ref/render-deploy/SKILL.md +462 -0
  598. package/skills_ref/requesting-code-review/SKILL.md +105 -0
  599. package/skills_ref/requesting-code-review/code-reviewer.md +146 -0
  600. package/skills_ref/screen-capture/SKILL.md +162 -0
  601. package/skills_ref/security-best-practices/LICENSE.txt +201 -0
  602. package/skills_ref/security-best-practices/SKILL.md +86 -0
  603. package/skills_ref/security-best-practices/agents/openai.yaml +4 -0
  604. package/skills_ref/security-best-practices/references/golang-general-backend-security.md +826 -0
  605. package/skills_ref/security-best-practices/references/javascript-express-web-server-security.md +1158 -0
  606. package/skills_ref/security-best-practices/references/javascript-general-web-frontend-security.md +747 -0
  607. package/skills_ref/security-best-practices/references/javascript-jquery-web-frontend-security.md +678 -0
  608. package/skills_ref/security-best-practices/references/javascript-typescript-nextjs-web-server-security.md +1144 -0
  609. package/skills_ref/security-best-practices/references/javascript-typescript-react-web-frontend-security.md +990 -0
  610. package/skills_ref/security-best-practices/references/javascript-typescript-vue-web-frontend-security.md +791 -0
  611. package/skills_ref/security-best-practices/references/python-django-web-server-security.md +882 -0
  612. package/skills_ref/security-best-practices/references/python-fastapi-web-server-security.md +1036 -0
  613. package/skills_ref/security-best-practices/references/python-flask-web-server-security.md +705 -0
  614. package/skills_ref/security-ownership-map/LICENSE.txt +201 -0
  615. package/skills_ref/security-ownership-map/SKILL.md +206 -0
  616. package/skills_ref/security-ownership-map/agents/openai.yaml +4 -0
  617. package/skills_ref/security-ownership-map/references/neo4j-import.md +60 -0
  618. package/skills_ref/security-ownership-map/scripts/build_ownership_map.py +956 -0
  619. package/skills_ref/security-ownership-map/scripts/community_maintainers.py +544 -0
  620. package/skills_ref/security-ownership-map/scripts/query_ownership.py +483 -0
  621. package/skills_ref/security-ownership-map/scripts/run_ownership_map.py +200 -0
  622. package/skills_ref/security-threat-model/LICENSE.txt +201 -0
  623. package/skills_ref/security-threat-model/SKILL.md +81 -0
  624. package/skills_ref/security-threat-model/agents/openai.yaml +4 -0
  625. package/skills_ref/security-threat-model/references/prompt-template.md +255 -0
  626. package/skills_ref/security-threat-model/references/security-controls-and-assets.md +32 -0
  627. package/skills_ref/sentry/SKILL.md +123 -0
  628. package/skills_ref/skill-creator/SKILL.md +372 -0
  629. package/skills_ref/sora/SKILL.md +153 -0
  630. package/skills_ref/speech/SKILL.md +144 -0
  631. package/skills_ref/spotify-player/SKILL.md +64 -0
  632. package/skills_ref/static-analysis/.claude-plugin/plugin.json +8 -0
  633. package/skills_ref/static-analysis/README.md +65 -0
  634. package/skills_ref/static-analysis/agents/semgrep-scanner.md +71 -0
  635. package/skills_ref/static-analysis/agents/semgrep-triager.md +107 -0
  636. package/skills_ref/static-analysis/skills/codeql/SKILL.md +119 -0
  637. package/skills_ref/static-analysis/skills/codeql/references/diagnostic-query-templates.md +339 -0
  638. package/skills_ref/static-analysis/skills/codeql/references/language-details.md +207 -0
  639. package/skills_ref/static-analysis/skills/codeql/references/performance-tuning.md +111 -0
  640. package/skills_ref/static-analysis/skills/codeql/references/ruleset-catalog.md +63 -0
  641. package/skills_ref/static-analysis/skills/codeql/references/threat-models.md +44 -0
  642. package/skills_ref/static-analysis/skills/codeql/workflows/build-database.md +669 -0
  643. package/skills_ref/static-analysis/skills/codeql/workflows/create-data-extensions.md +536 -0
  644. package/skills_ref/static-analysis/skills/codeql/workflows/run-analysis.md +436 -0
  645. package/skills_ref/static-analysis/skills/sarif-parsing/SKILL.md +479 -0
  646. package/skills_ref/static-analysis/skills/sarif-parsing/resources/jq-queries.md +162 -0
  647. package/skills_ref/static-analysis/skills/sarif-parsing/resources/sarif_helpers.py +331 -0
  648. package/skills_ref/static-analysis/skills/semgrep/SKILL.md +431 -0
  649. package/skills_ref/static-analysis/skills/semgrep/references/rulesets.md +162 -0
  650. package/skills_ref/static-analysis/skills/semgrep/references/scanner-task-prompt.md +102 -0
  651. package/skills_ref/static-analysis/skills/semgrep/references/triage-task-prompt.md +122 -0
  652. package/skills_ref/static-analysis/skills/semgrep/scripts/merge_triaged_sarif.py +252 -0
  653. package/skills_ref/summarize/SKILL.md +87 -0
  654. package/skills_ref/tdd/SKILL.md +371 -0
  655. package/skills_ref/tdd/testing-anti-patterns.md +299 -0
  656. package/skills_ref/telegram-send/SKILL.md +99 -0
  657. package/skills_ref/terraform/README.md +105 -0
  658. package/skills_ref/terraform/code-generation/.claude-plugin/plugin.json +30 -0
  659. package/skills_ref/terraform/code-generation/skills/azure-verified-modules/SKILL.md +613 -0
  660. package/skills_ref/terraform/code-generation/skills/terraform-style-guide/SKILL.md +353 -0
  661. package/skills_ref/terraform/code-generation/skills/terraform-test/SKILL.md +1669 -0
  662. package/skills_ref/terraform/module-generation/.claude-plugin/plugin.json +30 -0
  663. package/skills_ref/terraform/module-generation/skills/refactor-module/SKILL.md +538 -0
  664. package/skills_ref/terraform/module-generation/skills/terraform-stacks/SKILL.md +468 -0
  665. package/skills_ref/terraform/module-generation/skills/terraform-stacks/references/api-monitoring.md +543 -0
  666. package/skills_ref/terraform/module-generation/skills/terraform-stacks/references/component-blocks.md +476 -0
  667. package/skills_ref/terraform/module-generation/skills/terraform-stacks/references/deployment-blocks.md +391 -0
  668. package/skills_ref/terraform/module-generation/skills/terraform-stacks/references/examples.md +1529 -0
  669. package/skills_ref/terraform/module-generation/skills/terraform-stacks/references/linked-stacks.md +187 -0
  670. package/skills_ref/terraform/module-generation/skills/terraform-stacks/references/troubleshooting.md +671 -0
  671. package/skills_ref/terraform/provider-development/.claude-plugin/plugin.json +13 -0
  672. package/skills_ref/terraform/provider-development/skills/new-terraform-provider/SKILL.md +25 -0
  673. package/skills_ref/terraform/provider-development/skills/new-terraform-provider/assets/main.go +40 -0
  674. package/skills_ref/terraform/provider-development/skills/provider-actions/SKILL.md +478 -0
  675. package/skills_ref/terraform/provider-development/skills/provider-resources/SKILL.md +599 -0
  676. package/skills_ref/terraform/provider-development/skills/run-acceptance-tests/SKILL.md +41 -0
  677. package/skills_ref/theme-factory/LICENSE.txt +202 -0
  678. package/skills_ref/theme-factory/SKILL.md +59 -0
  679. package/skills_ref/theme-factory/theme-showcase.pdf +0 -0
  680. package/skills_ref/theme-factory/themes/arctic-frost.md +19 -0
  681. package/skills_ref/theme-factory/themes/botanical-garden.md +19 -0
  682. package/skills_ref/theme-factory/themes/desert-rose.md +19 -0
  683. package/skills_ref/theme-factory/themes/forest-canopy.md +19 -0
  684. package/skills_ref/theme-factory/themes/golden-hour.md +19 -0
  685. package/skills_ref/theme-factory/themes/midnight-galaxy.md +19 -0
  686. package/skills_ref/theme-factory/themes/modern-minimalist.md +19 -0
  687. package/skills_ref/theme-factory/themes/ocean-depths.md +19 -0
  688. package/skills_ref/theme-factory/themes/sunset-boulevard.md +19 -0
  689. package/skills_ref/theme-factory/themes/tech-innovation.md +19 -0
  690. package/skills_ref/things-mac/SKILL.md +86 -0
  691. package/skills_ref/tmux/SKILL.md +153 -0
  692. package/skills_ref/transcribe/SKILL.md +81 -0
  693. package/skills_ref/trello/SKILL.md +95 -0
  694. package/skills_ref/tts/SKILL.md +99 -0
  695. package/skills_ref/vercel-deploy/SKILL.md +115 -0
  696. package/skills_ref/video-downloader/SKILL.md +99 -0
  697. package/skills_ref/video-downloader/scripts/download_video.py +145 -0
  698. package/skills_ref/video-frames/SKILL.md +46 -0
  699. package/skills_ref/vision-click/SKILL.md +128 -0
  700. package/skills_ref/weather/SKILL.md +112 -0
  701. package/skills_ref/web-artifacts-builder/LICENSE.txt +202 -0
  702. package/skills_ref/web-artifacts-builder/SKILL.md +74 -0
  703. package/skills_ref/web-artifacts-builder/scripts/bundle-artifact.sh +54 -0
  704. package/skills_ref/web-artifacts-builder/scripts/init-artifact.sh +322 -0
  705. package/skills_ref/web-artifacts-builder/scripts/shadcn-components.tar.gz +0 -0
  706. package/skills_ref/web-perf/SKILL.md +193 -0
  707. package/skills_ref/web-routing/SKILL.md +26 -0
  708. package/skills_ref/whatsapp/SKILL.md +255 -0
  709. package/skills_ref/whatsapp/assets/agent-app-integration-example.json +35 -0
  710. package/skills_ref/whatsapp/assets/databases-example.json +11 -0
  711. package/skills_ref/whatsapp/assets/function-decide-route-interactive-buttons.json +6 -0
  712. package/skills_ref/whatsapp/assets/functions-example.json +5 -0
  713. package/skills_ref/whatsapp/assets/workflow-agent-simple.json +31 -0
  714. package/skills_ref/whatsapp/assets/workflow-api-template-wait-agent.json +59 -0
  715. package/skills_ref/whatsapp/assets/workflow-customer-support-intake-agent.json +56 -0
  716. package/skills_ref/whatsapp/assets/workflow-decision.json +83 -0
  717. package/skills_ref/whatsapp/assets/workflow-interactive-buttons-decide-ai.json +89 -0
  718. package/skills_ref/whatsapp/assets/workflow-interactive-buttons-decide-function.json +88 -0
  719. package/skills_ref/whatsapp/assets/workflow-linear.json +53 -0
  720. package/skills_ref/whatsapp/package.json +10 -0
  721. package/skills_ref/whatsapp/references/app-integrations.md +89 -0
  722. package/skills_ref/whatsapp/references/databases-reference.md +21 -0
  723. package/skills_ref/whatsapp/references/execution-context.md +42 -0
  724. package/skills_ref/whatsapp/references/function-contracts.md +55 -0
  725. package/skills_ref/whatsapp/references/functions-payloads.md +87 -0
  726. package/skills_ref/whatsapp/references/functions-reference.md +133 -0
  727. package/skills_ref/whatsapp/references/graph-contract.md +145 -0
  728. package/skills_ref/whatsapp/references/node-types.md +430 -0
  729. package/skills_ref/whatsapp/references/triggers.md +20 -0
  730. package/skills_ref/whatsapp/references/workflow-overview.md +22 -0
  731. package/skills_ref/whatsapp/references/workflow-reference.md +123 -0
  732. package/skills_ref/whatsapp/scripts/configure-prop.js +113 -0
  733. package/skills_ref/whatsapp/scripts/create-connect-token.js +38 -0
  734. package/skills_ref/whatsapp/scripts/create-function.js +64 -0
  735. package/skills_ref/whatsapp/scripts/create-integration.js +137 -0
  736. package/skills_ref/whatsapp/scripts/create-row.js +47 -0
  737. package/skills_ref/whatsapp/scripts/create-trigger.js +88 -0
  738. package/skills_ref/whatsapp/scripts/create-workflow.js +85 -0
  739. package/skills_ref/whatsapp/scripts/delete-integration.js +44 -0
  740. package/skills_ref/whatsapp/scripts/delete-row.js +49 -0
  741. package/skills_ref/whatsapp/scripts/delete-trigger.js +44 -0
  742. package/skills_ref/whatsapp/scripts/deploy-function.js +47 -0
  743. package/skills_ref/whatsapp/scripts/edit-graph.js +289 -0
  744. package/skills_ref/whatsapp/scripts/get-action-schema.js +44 -0
  745. package/skills_ref/whatsapp/scripts/get-context-value.js +80 -0
  746. package/skills_ref/whatsapp/scripts/get-execution-event.js +55 -0
  747. package/skills_ref/whatsapp/scripts/get-execution.js +44 -0
  748. package/skills_ref/whatsapp/scripts/get-function.js +43 -0
  749. package/skills_ref/whatsapp/scripts/get-graph.js +85 -0
  750. package/skills_ref/whatsapp/scripts/get-table.js +45 -0
  751. package/skills_ref/whatsapp/scripts/get-workflow.js +44 -0
  752. package/skills_ref/whatsapp/scripts/invoke-function.js +60 -0
  753. package/skills_ref/whatsapp/scripts/lib/databases/args.js +87 -0
  754. package/skills_ref/whatsapp/scripts/lib/databases/filters.js +30 -0
  755. package/skills_ref/whatsapp/scripts/lib/databases/kapso-api.js +70 -0
  756. package/skills_ref/whatsapp/scripts/lib/functions/args.js +55 -0
  757. package/skills_ref/whatsapp/scripts/lib/functions/kapso-api.js +70 -0
  758. package/skills_ref/whatsapp/scripts/lib/workflows/args.js +53 -0
  759. package/skills_ref/whatsapp/scripts/lib/workflows/kapso-api.js +123 -0
  760. package/skills_ref/whatsapp/scripts/lib/workflows/result.js +16 -0
  761. package/skills_ref/whatsapp/scripts/list-accounts.js +62 -0
  762. package/skills_ref/whatsapp/scripts/list-apps.js +42 -0
  763. package/skills_ref/whatsapp/scripts/list-execution-events.js +61 -0
  764. package/skills_ref/whatsapp/scripts/list-executions.js +53 -0
  765. package/skills_ref/whatsapp/scripts/list-function-invocations.js +53 -0
  766. package/skills_ref/whatsapp/scripts/list-functions.js +41 -0
  767. package/skills_ref/whatsapp/scripts/list-integrations.js +41 -0
  768. package/skills_ref/whatsapp/scripts/list-provider-models.js +48 -0
  769. package/skills_ref/whatsapp/scripts/list-tables.js +41 -0
  770. package/skills_ref/whatsapp/scripts/list-triggers.js +44 -0
  771. package/skills_ref/whatsapp/scripts/list-whatsapp-phone-numbers.js +56 -0
  772. package/skills_ref/whatsapp/scripts/list-workflows.js +44 -0
  773. package/skills_ref/whatsapp/scripts/openapi-explore.mjs +1273 -0
  774. package/skills_ref/whatsapp/scripts/query-rows.js +71 -0
  775. package/skills_ref/whatsapp/scripts/reload-props.js +110 -0
  776. package/skills_ref/whatsapp/scripts/resume-execution.js +75 -0
  777. package/skills_ref/whatsapp/scripts/search-actions.js +64 -0
  778. package/skills_ref/whatsapp/scripts/update-execution-status.js +51 -0
  779. package/skills_ref/whatsapp/scripts/update-function.js +65 -0
  780. package/skills_ref/whatsapp/scripts/update-graph.js +154 -0
  781. package/skills_ref/whatsapp/scripts/update-integration.js +82 -0
  782. package/skills_ref/whatsapp/scripts/update-row.js +51 -0
  783. package/skills_ref/whatsapp/scripts/update-trigger.js +60 -0
  784. package/skills_ref/whatsapp/scripts/update-workflow-settings.js +67 -0
  785. package/skills_ref/whatsapp/scripts/upsert-row.js +64 -0
  786. package/skills_ref/whatsapp/scripts/validate-graph.js +293 -0
  787. package/skills_ref/whatsapp/scripts/variables-delete.js +37 -0
  788. package/skills_ref/whatsapp/scripts/variables-list.js +55 -0
  789. package/skills_ref/whatsapp/scripts/variables-set.js +39 -0
  790. package/skills_ref/writing-plans/SKILL.md +116 -0
  791. package/skills_ref/xlsx/LICENSE.txt +30 -0
  792. package/skills_ref/xlsx/SKILL.md +292 -0
  793. package/skills_ref/xlsx/scripts/office/helpers/__init__.py +0 -0
  794. package/skills_ref/xlsx/scripts/office/helpers/merge_runs.py +199 -0
  795. package/skills_ref/xlsx/scripts/office/helpers/simplify_redlines.py +197 -0
  796. package/skills_ref/xlsx/scripts/office/pack.py +159 -0
  797. package/skills_ref/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-chart.xsd +1499 -0
  798. package/skills_ref/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-chartDrawing.xsd +146 -0
  799. package/skills_ref/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-diagram.xsd +1085 -0
  800. package/skills_ref/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-lockedCanvas.xsd +11 -0
  801. package/skills_ref/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-main.xsd +3081 -0
  802. package/skills_ref/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-picture.xsd +23 -0
  803. package/skills_ref/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-spreadsheetDrawing.xsd +185 -0
  804. package/skills_ref/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-wordprocessingDrawing.xsd +287 -0
  805. package/skills_ref/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/pml.xsd +1676 -0
  806. package/skills_ref/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-additionalCharacteristics.xsd +28 -0
  807. package/skills_ref/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-bibliography.xsd +144 -0
  808. package/skills_ref/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-commonSimpleTypes.xsd +174 -0
  809. package/skills_ref/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-customXmlDataProperties.xsd +25 -0
  810. package/skills_ref/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-customXmlSchemaProperties.xsd +18 -0
  811. package/skills_ref/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesCustom.xsd +59 -0
  812. package/skills_ref/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesExtended.xsd +56 -0
  813. package/skills_ref/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesVariantTypes.xsd +195 -0
  814. package/skills_ref/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-math.xsd +582 -0
  815. package/skills_ref/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-relationshipReference.xsd +25 -0
  816. package/skills_ref/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/sml.xsd +4439 -0
  817. package/skills_ref/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-main.xsd +570 -0
  818. package/skills_ref/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-officeDrawing.xsd +509 -0
  819. package/skills_ref/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-presentationDrawing.xsd +12 -0
  820. package/skills_ref/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-spreadsheetDrawing.xsd +108 -0
  821. package/skills_ref/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-wordprocessingDrawing.xsd +96 -0
  822. package/skills_ref/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/wml.xsd +3646 -0
  823. package/skills_ref/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/xml.xsd +116 -0
  824. package/skills_ref/xlsx/scripts/office/schemas/ecma/fouth-edition/opc-contentTypes.xsd +42 -0
  825. package/skills_ref/xlsx/scripts/office/schemas/ecma/fouth-edition/opc-coreProperties.xsd +50 -0
  826. package/skills_ref/xlsx/scripts/office/schemas/ecma/fouth-edition/opc-digSig.xsd +49 -0
  827. package/skills_ref/xlsx/scripts/office/schemas/ecma/fouth-edition/opc-relationships.xsd +33 -0
  828. package/skills_ref/xlsx/scripts/office/schemas/mce/mc.xsd +75 -0
  829. package/skills_ref/xlsx/scripts/office/schemas/microsoft/wml-2010.xsd +560 -0
  830. package/skills_ref/xlsx/scripts/office/schemas/microsoft/wml-2012.xsd +67 -0
  831. package/skills_ref/xlsx/scripts/office/schemas/microsoft/wml-2018.xsd +14 -0
  832. package/skills_ref/xlsx/scripts/office/schemas/microsoft/wml-cex-2018.xsd +20 -0
  833. package/skills_ref/xlsx/scripts/office/schemas/microsoft/wml-cid-2016.xsd +13 -0
  834. package/skills_ref/xlsx/scripts/office/schemas/microsoft/wml-sdtdatahash-2020.xsd +4 -0
  835. package/skills_ref/xlsx/scripts/office/schemas/microsoft/wml-symex-2015.xsd +8 -0
  836. package/skills_ref/xlsx/scripts/office/soffice.py +183 -0
  837. package/skills_ref/xlsx/scripts/office/unpack.py +132 -0
  838. package/skills_ref/xlsx/scripts/office/validate.py +111 -0
  839. package/skills_ref/xlsx/scripts/office/validators/__init__.py +15 -0
  840. package/skills_ref/xlsx/scripts/office/validators/base.py +847 -0
  841. package/skills_ref/xlsx/scripts/office/validators/docx.py +446 -0
  842. package/skills_ref/xlsx/scripts/office/validators/pptx.py +275 -0
  843. package/skills_ref/xlsx/scripts/office/validators/redlining.py +247 -0
  844. package/skills_ref/xlsx/scripts/recalc.py +184 -0
  845. package/skills_ref/xurl/SKILL.md +461 -0
@@ -0,0 +1,878 @@
1
+ /**
2
+ * cli-jaw chat — Phase 9.5
3
+ * Three modes: default (raw stdin, persistent footer), --raw (JSON in UI), --simple (plain readline)
4
+ */
5
+ import { createInterface } from 'node:readline';
6
+ import { parseArgs } from 'node:util';
7
+ import WebSocket from 'ws';
8
+ import fs from 'node:fs';
9
+ import { spawnSync } from 'node:child_process';
10
+ import { resolve as resolvePath, dirname } from 'node:path';
11
+ import { fileURLToPath } from 'node:url';
12
+ import { parseCommand, executeCommand, getCompletionItems, getArgumentCompletionItems } from '../../src/cli/commands.js';
13
+ const { values } = parseArgs({
14
+ args: process.argv.slice(3),
15
+ options: {
16
+ port: { type: 'string', default: process.env.PORT || '3457' },
17
+ raw: { type: 'boolean', default: false },
18
+ simple: { type: 'boolean', default: false },
19
+ },
20
+ strict: false,
21
+ });
22
+ // ─── ANSI ────────────────────────────────────
23
+ const c = {
24
+ reset: '\x1b[0m', bold: '\x1b[1m', dim: '\x1b[2m',
25
+ red: '\x1b[31m', green: '\x1b[32m', yellow: '\x1b[33m',
26
+ blue: '\x1b[34m', magenta: '\x1b[35m', cyan: '\x1b[36m', gray: '\x1b[90m',
27
+ };
28
+ // ─── Connect ─────────────────────────────────
29
+ const wsUrl = getWsUrl(values.port);
30
+ const apiUrl = getServerUrl(values.port);
31
+ import { APP_VERSION, getServerUrl, getWsUrl } from '../../src/core/config.js';
32
+ const __filename = fileURLToPath(import.meta.url);
33
+ const __dirname = dirname(__filename);
34
+ const SKILL_SCRIPT = resolvePath(__dirname, 'skill.js');
35
+ let ws;
36
+ try {
37
+ ws = await new Promise((resolve, reject) => {
38
+ const s = new WebSocket(wsUrl);
39
+ s.on('open', () => resolve(s));
40
+ s.on('error', reject);
41
+ });
42
+ }
43
+ catch {
44
+ console.error(`\n ${c.red}x${c.reset} Cannot connect to ${wsUrl}`);
45
+ console.error(` Run ${c.cyan}cli-jaw serve${c.reset} first\n`);
46
+ process.exit(1);
47
+ }
48
+ // ─── Fetch info ──────────────────────────────
49
+ let info = { cli: 'codex', workingDir: '~', model: '' };
50
+ try {
51
+ const r = await fetch(`${apiUrl}/api/settings`, { signal: AbortSignal.timeout(2000) });
52
+ if (r.ok) {
53
+ const res = await r.json();
54
+ const s = res.data || res;
55
+ const cli = s.cli || 'codex';
56
+ info = { cli, workingDir: s.workingDir || '~', model: s.perCli?.[cli]?.model || '' };
57
+ }
58
+ // Active session model overrides perCli default
59
+ const sr = await fetch(`${apiUrl}/api/session`, { signal: AbortSignal.timeout(2000) });
60
+ if (sr.ok) {
61
+ const ses = await sr.json();
62
+ const sd = ses.data || ses;
63
+ if (sd.model)
64
+ info.model = sd.model;
65
+ }
66
+ }
67
+ catch { }
68
+ const cliLabel = { claude: 'Claude Code', codex: 'Codex', gemini: 'Gemini CLI', opencode: 'OpenCode', copilot: 'Copilot' };
69
+ const cliColor = { claude: c.magenta, codex: c.red, gemini: c.blue, opencode: c.yellow, copilot: c.cyan };
70
+ const accent = cliColor[info.cli] || c.red;
71
+ const label = cliLabel[info.cli] || info.cli;
72
+ const dir = info.workingDir.replace(process.env.HOME || '', '~');
73
+ // ─── Width helper ────────────────────────────
74
+ const W = () => Math.max(20, Math.min((process.stdout.columns || 60) - 4, 60));
75
+ const hrLine = () => '-'.repeat(W());
76
+ function renderCommandText(text) {
77
+ return String(text || '').replace(/\n/g, '\n ');
78
+ }
79
+ async function apiJson(path, init = {}, timeoutMs = 10000) {
80
+ const headers = { ...(init.headers || {}) };
81
+ const req = { ...init, headers, signal: AbortSignal.timeout(timeoutMs) };
82
+ if (req.body && typeof req.body !== 'string') {
83
+ req.body = JSON.stringify(req.body);
84
+ if (!headers['Content-Type'])
85
+ headers['Content-Type'] = 'application/json';
86
+ }
87
+ const resp = await fetch(`${apiUrl}${path}`, req);
88
+ const data = await resp.json().catch(() => ({}));
89
+ if (!resp.ok) {
90
+ const msg = data?.error || data?.message || `${resp.status} ${resp.statusText}`;
91
+ throw new Error(msg);
92
+ }
93
+ return data;
94
+ }
95
+ function runSkillResetLocal() {
96
+ const proc = spawnSync(process.execPath, [SKILL_SCRIPT, 'reset', '--force'], { encoding: 'utf8', timeout: 120000 });
97
+ if (proc.error)
98
+ throw proc.error;
99
+ if (proc.status !== 0) {
100
+ const msg = (proc.stderr || proc.stdout || `exit ${proc.status}`).trim();
101
+ throw new Error(msg);
102
+ }
103
+ }
104
+ function makeCliCommandCtx() {
105
+ return {
106
+ interface: 'cli',
107
+ version: APP_VERSION,
108
+ getSession: () => apiJson('/api/session'),
109
+ getSettings: () => apiJson('/api/settings'),
110
+ updateSettings: (patch) => apiJson('/api/settings', { method: 'PUT', body: patch }),
111
+ getRuntime: () => apiJson('/api/runtime').catch(() => null),
112
+ getSkills: () => apiJson('/api/skills').catch(() => []),
113
+ clearSession: () => apiJson('/api/clear', { method: 'POST' }),
114
+ getCliStatus: () => apiJson('/api/cli-status').catch(() => null),
115
+ getMcp: () => apiJson('/api/mcp'),
116
+ syncMcp: () => apiJson('/api/mcp/sync', { method: 'POST' }),
117
+ installMcp: () => apiJson('/api/mcp/install', { method: 'POST' }, 120000),
118
+ listMemory: () => apiJson('/api/jaw-memory/list').then((d) => d.files || []),
119
+ searchMemory: (q) => apiJson(`/api/jaw-memory/search?q=${encodeURIComponent(q)}`).then((d) => d.result || '(no results)'),
120
+ getBrowserStatus: () => apiJson('/api/browser/status'),
121
+ getBrowserTabs: () => apiJson('/api/browser/tabs'),
122
+ resetEmployees: () => apiJson('/api/employees/reset', { method: 'POST' }),
123
+ getPrompt: () => apiJson('/api/prompt'),
124
+ resetSkills: () => apiJson('/api/skills/reset', { method: 'POST' }).catch(() => { }),
125
+ };
126
+ }
127
+ // ─── Simple mode (plain readline, no tricks) ──
128
+ if (values.simple) {
129
+ console.log(`\n cli-jaw v${APP_VERSION} · ${label} · :${values.port}\n`);
130
+ const rl = createInterface({ input: process.stdin, output: process.stdout, prompt: `${label} > ` });
131
+ let streaming = false;
132
+ async function runSlashCommand(parsed) {
133
+ try {
134
+ const result = await executeCommand(parsed, makeCliCommandCtx());
135
+ if (result?.code === 'clear_screen')
136
+ console.clear();
137
+ if (result?.text)
138
+ console.log(` ${renderCommandText(result.text)}`);
139
+ if (result?.code === 'exit') {
140
+ ws.close();
141
+ rl.close();
142
+ process.exit(0);
143
+ return;
144
+ }
145
+ }
146
+ catch (err) {
147
+ console.log(` ${c.red}${err.message}${c.reset}`);
148
+ }
149
+ rl.prompt();
150
+ }
151
+ ws.on('message', (data) => {
152
+ try {
153
+ const msg = JSON.parse(data.toString());
154
+ if (msg.type === 'agent_chunk') {
155
+ if (!streaming)
156
+ streaming = true;
157
+ process.stdout.write(msg.text || '');
158
+ }
159
+ else if (msg.type === 'agent_fallback') {
160
+ console.log(` ⚡ ${msg.from} 실패 → ${msg.to}로 재시도`);
161
+ }
162
+ else if (msg.type === 'agent_done') {
163
+ if (streaming) {
164
+ process.stdout.write('\n\n');
165
+ streaming = false;
166
+ }
167
+ else if (msg.text)
168
+ console.log(msg.text + '\n');
169
+ rl.prompt();
170
+ }
171
+ else if (msg.type === 'agent_status' && msg.status === 'running')
172
+ process.stdout.write(`[${msg.agentName || msg.agentId}] working...\r`);
173
+ }
174
+ catch { }
175
+ });
176
+ rl.on('line', (line) => {
177
+ const t = line.trim();
178
+ if (!t) {
179
+ rl.prompt();
180
+ return;
181
+ }
182
+ // Phase 10: /file command
183
+ if (t.startsWith('/file ')) {
184
+ const parts = t.slice(6).trim().split(/\s+/);
185
+ const fp = resolvePath(parts[0]);
186
+ const caption = parts.slice(1).join(' ');
187
+ if (!fs.existsSync(fp)) {
188
+ console.log(` ${c.red}파일 없음: ${fp}${c.reset}`);
189
+ rl.prompt();
190
+ return;
191
+ }
192
+ const prompt = `[사용자가 파일을 보냈습니다: ${fp}]\n이 파일을 Read 도구로 읽고 분석해주세요.${caption ? `\n\n사용자 메시지: ${caption}` : ''}`;
193
+ ws.send(JSON.stringify({ type: 'send_message', text: prompt }));
194
+ return;
195
+ }
196
+ const parsed = parseCommand(t);
197
+ if (parsed) {
198
+ void runSlashCommand(parsed);
199
+ return;
200
+ }
201
+ ws.send(JSON.stringify({ type: 'send_message', text: t }));
202
+ });
203
+ rl.on('close', () => { ws.close(); process.exit(0); });
204
+ ws.on('close', () => { console.log('Disconnected'); process.exit(0); });
205
+ rl.prompt();
206
+ }
207
+ else {
208
+ // ─── Default + Raw — shared UI with raw stdin ──
209
+ const isRaw = values.raw;
210
+ // Banner — block art (no border frame)
211
+ const modelStr = info.model ? `${c.dim}model:${c.reset} ${c.bold}${info.model}${c.reset}` : '';
212
+ // prettier-ignore
213
+ const art = [
214
+ '██████╗ ██╗ ██╗ ██╗ █████╗ ██╗ ██╗',
215
+ '██╔════╝██║ ██║ ██║██╔══██╗██║ ██║',
216
+ '██║ ██║ ██║ ██║███████║██║ █╗ ██║',
217
+ '██║ ██║ ██║██ ██║██╔══██║██║███╗██║',
218
+ '╚██████╗███████╗██║╚█████╔╝██║ ██║╚███╔███╔╝',
219
+ ' ╚═════╝╚══════╝╚═╝ ╚════╝ ╚═╝ ╚═╝ ╚══╝╚══╝',
220
+ ];
221
+ console.log('');
222
+ for (const line of art)
223
+ console.log(` ${c.cyan}${c.bold}${line}${c.reset}`);
224
+ console.log(` ${c.dim}v${APP_VERSION}${c.reset}${isRaw ? ` ${c.dim}(raw json)${c.reset}` : ''}`);
225
+ console.log('');
226
+ console.log(` ${c.dim}engine:${c.reset} ${accent}${label}${c.reset}`);
227
+ if (modelStr)
228
+ console.log(` ${modelStr}`);
229
+ console.log(` ${c.dim}directory:${c.reset} ${c.cyan}${dir}${c.reset}`);
230
+ console.log(` ${c.dim}server:${c.reset} ${c.green}\u25CF${c.reset} localhost:${values.port}`);
231
+ console.log('');
232
+ console.log(` ${c.dim}/quit to exit, /clear to clear screen, /reset confirm to factory reset${c.reset}`);
233
+ console.log(` ${c.dim}/file <path> to attach${c.reset}`);
234
+ const footer = ` ${c.dim}${accent}${label}${c.reset}${c.dim} | /quit | /clear${c.reset}`;
235
+ const promptPrefix = ` ${accent}\u276F${c.reset} `;
236
+ // ─── Scroll region: fixed footer at bottom ──
237
+ const getRows = () => process.stdout.rows || 24;
238
+ function setupScrollRegion() {
239
+ const rows = getRows();
240
+ // Set scroll region to rows 1..(rows-2), leaving bottom 2 for footer
241
+ process.stdout.write(`\x1b[1;${rows - 2}r`);
242
+ // Draw fixed footer at absolute positions
243
+ process.stdout.write(`\x1b[${rows - 1};1H\x1b[2K ${c.dim}${hrLine()}${c.reset}`);
244
+ process.stdout.write(`\x1b[${rows};1H\x1b[2K${footer}`);
245
+ // Move cursor back into scroll region
246
+ process.stdout.write(`\x1b[${rows - 2};1H`);
247
+ }
248
+ function cleanupScrollRegion() {
249
+ const rows = getRows();
250
+ // Reset scroll region to full terminal
251
+ process.stdout.write(`\x1b[1;${rows}r`);
252
+ process.stdout.write(`\x1b[${rows};1H\n`);
253
+ }
254
+ function showPrompt() {
255
+ if (typeof closeAutocomplete === 'function')
256
+ closeAutocomplete();
257
+ prevLineCount = 1; // reset for fresh prompt
258
+ console.log('');
259
+ console.log(` ${c.dim}${hrLine()}${c.reset}`);
260
+ process.stdout.write(promptPrefix);
261
+ }
262
+ // Phase 12.1.7: Calculate visual width (Korean/CJK = 2 columns, ANSI codes = 0)
263
+ function visualWidth(str) {
264
+ // Strip ANSI escape codes first
265
+ const stripped = str.replace(/\x1b\[[0-9;]*m/g, '');
266
+ let w = 0;
267
+ for (const ch of stripped) {
268
+ const cp = ch.codePointAt(0);
269
+ if (cp === undefined) {
270
+ w += 1;
271
+ continue;
272
+ }
273
+ // CJK ranges: Hangul, CJK Unified, Fullwidth, etc
274
+ if ((cp >= 0x1100 && cp <= 0x115F) || (cp >= 0x2E80 && cp <= 0x303E) ||
275
+ (cp >= 0x3040 && cp <= 0x33BF) || (cp >= 0x3400 && cp <= 0x4DBF) ||
276
+ (cp >= 0x4E00 && cp <= 0xA4CF) || (cp >= 0xA960 && cp <= 0xA97C) ||
277
+ (cp >= 0xAC00 && cp <= 0xD7AF) || (cp >= 0xD7B0 && cp <= 0xD7FF) ||
278
+ (cp >= 0xF900 && cp <= 0xFAFF) || (cp >= 0xFE30 && cp <= 0xFE6F) ||
279
+ (cp >= 0xFF01 && cp <= 0xFF60) || (cp >= 0xFFE0 && cp <= 0xFFE6) ||
280
+ (cp >= 0x20000 && cp <= 0x2FA1F)) {
281
+ w += 2;
282
+ }
283
+ else {
284
+ w += 1;
285
+ }
286
+ }
287
+ return w;
288
+ }
289
+ function clipTextToCols(str, maxCols) {
290
+ if (maxCols <= 0)
291
+ return '';
292
+ let out = '';
293
+ let w = 0;
294
+ for (const ch of str) {
295
+ const cw = visualWidth(ch);
296
+ if (w + cw > maxCols)
297
+ break;
298
+ out += ch;
299
+ w += cw;
300
+ }
301
+ return out;
302
+ }
303
+ let prevLineCount = 1; // track how many terminal rows input occupied
304
+ function redrawPromptLine() {
305
+ const cols = process.stdout.columns || 80;
306
+ // Move cursor up to the start of previous render, clear all lines
307
+ if (prevLineCount > 1) {
308
+ process.stdout.write(`\x1b[${prevLineCount - 1}A`); // move up
309
+ }
310
+ for (let i = 0; i < prevLineCount; i++) {
311
+ process.stdout.write('\r\x1b[2K'); // clear line
312
+ if (i < prevLineCount - 1)
313
+ process.stdout.write('\x1b[1B'); // move down
314
+ }
315
+ // Move back to top
316
+ if (prevLineCount > 1) {
317
+ process.stdout.write(`\x1b[${prevLineCount - 1}A`);
318
+ }
319
+ process.stdout.write('\r');
320
+ // Write the prompt + input (handle embedded newlines)
321
+ const lines = inputBuf.split('\n');
322
+ const contPrefix = ` ${c.dim}· ${c.reset}`; // continuation line prefix
323
+ let totalRows = 0;
324
+ for (let i = 0; i < lines.length; i++) {
325
+ const prefix = i === 0 ? promptPrefix : contPrefix;
326
+ const rendered = prefix + lines[i];
327
+ process.stdout.write(rendered);
328
+ if (i < lines.length - 1)
329
+ process.stdout.write('\n');
330
+ // Each line may wrap across multiple terminal rows
331
+ totalRows += Math.max(1, Math.ceil(visualWidth(rendered) / cols));
332
+ }
333
+ prevLineCount = totalRows;
334
+ }
335
+ // ─── State ───────────────────────────────
336
+ let inputBuf = '';
337
+ let inputActive = true;
338
+ let streaming = false;
339
+ let commandRunning = false;
340
+ const ESC_WAIT_MS = 70;
341
+ let escPending = false;
342
+ let escTimer = null;
343
+ const ac = {
344
+ open: false,
345
+ stage: 'command',
346
+ contextHeader: '',
347
+ items: [],
348
+ selected: 0,
349
+ windowStart: 0,
350
+ visibleRows: 0,
351
+ renderedRows: 0,
352
+ maxRowsCommand: 6,
353
+ maxRowsArgument: 8,
354
+ };
355
+ function getMaxPopupRows() {
356
+ // Scroll region ends at rows-2 (rows-1/rows are fixed footer).
357
+ // Prompt baseline at rows-2 can be lifted up to rows-3 lines.
358
+ return Math.max(0, getRows() - 3);
359
+ }
360
+ function makeSelectionKey(item, stage) {
361
+ if (!item)
362
+ return '';
363
+ const base = item.command ? `${item.command}:${item.name}` : item.name;
364
+ return `${stage}:${base}`;
365
+ }
366
+ function popupTotalRows(state) {
367
+ if (!state?.open)
368
+ return 0;
369
+ return (state.visibleRows || 0) + (state.contextHeader ? 1 : 0);
370
+ }
371
+ // ─ Phase 1c: use terminal natural scrolling to create space below ─
372
+ // Prints \n within scroll region to push content up if needed,
373
+ // then CSI A back to prompt row. No content is overwritten.
374
+ function ensureSpaceBelow(n) {
375
+ if (n <= 0)
376
+ return;
377
+ for (let i = 0; i < n; i++)
378
+ process.stdout.write('\n');
379
+ process.stdout.write(`\x1b[${n}A`);
380
+ }
381
+ function syncAutocompleteWindow() {
382
+ if (!ac.items.length || ac.visibleRows <= 0) {
383
+ ac.windowStart = 0;
384
+ return;
385
+ }
386
+ ac.selected = Math.max(0, Math.min(ac.selected, ac.items.length - 1));
387
+ const maxStart = Math.max(0, ac.items.length - ac.visibleRows);
388
+ ac.windowStart = Math.max(0, Math.min(ac.windowStart, maxStart));
389
+ if (ac.selected < ac.windowStart)
390
+ ac.windowStart = ac.selected;
391
+ if (ac.selected >= ac.windowStart + ac.visibleRows) {
392
+ ac.windowStart = ac.selected - ac.visibleRows + 1;
393
+ }
394
+ }
395
+ function resolveAutocompleteState(prevKey) {
396
+ if (!inputBuf.startsWith('/') || inputBuf.includes('\n')) {
397
+ return { open: false, items: [], selected: 0, visibleRows: 0 };
398
+ }
399
+ const body = inputBuf.slice(1);
400
+ const firstSpace = body.indexOf(' ');
401
+ let stage = 'command';
402
+ let contextHeader = '';
403
+ let items = [];
404
+ if (firstSpace === -1) {
405
+ items = getCompletionItems(inputBuf, 'cli');
406
+ }
407
+ else {
408
+ const commandName = body.slice(0, firstSpace).trim().toLowerCase();
409
+ if (!commandName)
410
+ return { open: false, items: [], selected: 0, visibleRows: 0 };
411
+ const rest = body.slice(firstSpace + 1);
412
+ const endsWithSpace = /\s$/.test(rest);
413
+ const tokens = rest.trim() ? rest.trim().split(/\s+/) : [];
414
+ const partial = endsWithSpace ? '' : (tokens[tokens.length - 1] || '');
415
+ const argv = endsWithSpace ? tokens : tokens.slice(0, -1);
416
+ items = getArgumentCompletionItems(commandName, partial, 'cli', argv, {});
417
+ if (items.length) {
418
+ stage = 'argument';
419
+ contextHeader = `${commandName} ▸ ${items[0]?.commandDesc || '인자 선택'}`;
420
+ }
421
+ }
422
+ if (!items.length) {
423
+ return { open: false, items: [], selected: 0, visibleRows: 0 };
424
+ }
425
+ const selected = (() => {
426
+ if (!prevKey)
427
+ return 0;
428
+ const idx = items.findIndex(i => makeSelectionKey(i, stage) === prevKey);
429
+ return idx >= 0 ? idx : 0;
430
+ })();
431
+ const maxRows = getMaxPopupRows();
432
+ const headerRows = contextHeader ? 1 : 0;
433
+ const maxItemRows = Math.max(0, maxRows - headerRows);
434
+ const stageCap = stage === 'argument' ? ac.maxRowsArgument : ac.maxRowsCommand;
435
+ const visibleRows = Math.min(stageCap, items.length, maxItemRows);
436
+ if (visibleRows <= 0) {
437
+ return { open: false, items: [], selected: 0, visibleRows: 0 };
438
+ }
439
+ return { open: true, stage, contextHeader, items, selected, visibleRows };
440
+ }
441
+ function clearAutocomplete() {
442
+ if (ac.renderedRows <= 0)
443
+ return;
444
+ process.stdout.write('\x1b[s');
445
+ for (let row = 1; row <= ac.renderedRows; row++) {
446
+ process.stdout.write(`\x1b[${row}B\r\x1b[2K\x1b[${row}A`);
447
+ }
448
+ process.stdout.write('\x1b[u');
449
+ ac.renderedRows = 0;
450
+ }
451
+ function closeAutocomplete() {
452
+ clearAutocomplete();
453
+ ac.open = false;
454
+ ac.stage = 'command';
455
+ ac.contextHeader = '';
456
+ ac.items = [];
457
+ ac.selected = 0;
458
+ ac.windowStart = 0;
459
+ ac.visibleRows = 0;
460
+ }
461
+ function formatAutocompleteLine(item, selected, stage) {
462
+ const value = stage === 'argument' ? item.name : `/${item.name}`;
463
+ const valueCol = stage === 'argument' ? 24 : 14;
464
+ const valueText = value.length >= valueCol ? value.slice(0, valueCol) : value.padEnd(valueCol, ' ');
465
+ const desc = item.desc || '';
466
+ const raw = ` ${valueText} ${desc}`;
467
+ const line = clipTextToCols(raw, (process.stdout.columns || 80) - 2);
468
+ return selected ? `\x1b[7m${line}${c.reset}` : `${c.dim}${line}${c.reset}`;
469
+ }
470
+ function renderAutocomplete() {
471
+ clearAutocomplete();
472
+ if (!ac.open || ac.items.length === 0 || ac.visibleRows <= 0)
473
+ return;
474
+ syncAutocompleteWindow();
475
+ const start = ac.windowStart;
476
+ const end = Math.min(ac.items.length, start + ac.visibleRows);
477
+ const headerRows = ac.contextHeader ? 1 : 0;
478
+ process.stdout.write('\x1b[s');
479
+ if (headerRows) {
480
+ process.stdout.write('\x1b[1B\r\x1b[2K');
481
+ const header = clipTextToCols(` ${ac.contextHeader}`, (process.stdout.columns || 80) - 2);
482
+ process.stdout.write(`${c.dim}${header}${c.reset}`);
483
+ process.stdout.write('\x1b[1A');
484
+ }
485
+ for (let i = start; i < end; i++) {
486
+ const row = (i - start) + 1 + headerRows;
487
+ process.stdout.write(`\x1b[${row}B\r\x1b[2K`);
488
+ process.stdout.write(formatAutocompleteLine(ac.items[i], i === ac.selected, ac.stage));
489
+ process.stdout.write(`\x1b[${row}A`);
490
+ }
491
+ ac.renderedRows = headerRows + (end - start);
492
+ process.stdout.write('\x1b[u');
493
+ }
494
+ function redrawInputWithAutocomplete() {
495
+ const prevItem = ac.items[ac.selected];
496
+ const prevKey = makeSelectionKey(prevItem, ac.stage);
497
+ const next = resolveAutocompleteState(prevKey);
498
+ clearAutocomplete();
499
+ // ─ Phase 1c: scroll to create space BELOW prompt (not above) ─
500
+ if (next.open)
501
+ ensureSpaceBelow(popupTotalRows(next));
502
+ redrawPromptLine();
503
+ if (!next.open) {
504
+ ac.open = false;
505
+ ac.stage = 'command';
506
+ ac.contextHeader = '';
507
+ ac.items = [];
508
+ ac.selected = 0;
509
+ ac.windowStart = 0;
510
+ ac.visibleRows = 0;
511
+ return;
512
+ }
513
+ ac.open = true;
514
+ ac.stage = next.stage ?? 'command';
515
+ ac.contextHeader = next.contextHeader || '';
516
+ ac.items = next.items;
517
+ ac.selected = next.selected;
518
+ ac.visibleRows = next.visibleRows;
519
+ syncAutocompleteWindow();
520
+ renderAutocomplete();
521
+ }
522
+ function handleResize() {
523
+ setupScrollRegion();
524
+ if (!inputActive || commandRunning)
525
+ return;
526
+ redrawInputWithAutocomplete();
527
+ }
528
+ // Redraw footer + input/autocomplete on terminal resize (debounced)
529
+ let resizeTimer = null;
530
+ process.stdout.on('resize', () => {
531
+ if (resizeTimer)
532
+ clearTimeout(resizeTimer);
533
+ resizeTimer = setTimeout(() => { resizeTimer = null; handleResize(); }, 50);
534
+ });
535
+ async function runSlashCommand(parsed) {
536
+ let exiting = false;
537
+ try {
538
+ const result = await executeCommand(parsed, makeCliCommandCtx());
539
+ if (result?.code === 'clear_screen') {
540
+ console.clear();
541
+ setupScrollRegion();
542
+ }
543
+ if (result?.text)
544
+ console.log(` ${renderCommandText(result.text)}`);
545
+ if (result?.code === 'exit') {
546
+ exiting = true;
547
+ cleanupScrollRegion();
548
+ console.log(` ${c.dim}Bye! \uD83E\uDD9E${c.reset}\n`);
549
+ ws.close();
550
+ process.stdin.setRawMode(false);
551
+ process.exit(0);
552
+ }
553
+ }
554
+ catch (err) {
555
+ console.log(` ${c.red}${err.message}${c.reset}`);
556
+ }
557
+ finally {
558
+ if (!exiting) {
559
+ commandRunning = false;
560
+ inputActive = true;
561
+ closeAutocomplete();
562
+ showPrompt();
563
+ }
564
+ }
565
+ }
566
+ // ─── Raw stdin input ─────────────────────
567
+ process.stdin.setRawMode(true);
568
+ process.stdin.resume();
569
+ process.stdin.setEncoding('utf8');
570
+ function flushPendingEscape() {
571
+ escPending = false;
572
+ escTimer = null;
573
+ if (ac.open) {
574
+ closeAutocomplete();
575
+ redrawPromptLine();
576
+ return;
577
+ }
578
+ if (!inputActive) {
579
+ if (commandRunning)
580
+ return;
581
+ ws.send(JSON.stringify({ type: 'stop' }));
582
+ console.log(`\n ${c.yellow}■ stopped${c.reset}`);
583
+ inputActive = true;
584
+ showPrompt();
585
+ }
586
+ }
587
+ process.stdin.on('data', (_key) => {
588
+ let key = _key;
589
+ if (escPending) {
590
+ if (escTimer)
591
+ clearTimeout(escTimer);
592
+ escTimer = null;
593
+ escPending = false;
594
+ if (!key.startsWith('\x1b'))
595
+ key = `\x1b${key}`;
596
+ }
597
+ // Delay ESC standalone handling to distinguish it from ESC sequences.
598
+ if (key === '\x1b') {
599
+ escPending = true;
600
+ escTimer = setTimeout(flushPendingEscape, ESC_WAIT_MS);
601
+ return;
602
+ }
603
+ // ESC and Ctrl+C always work, even when agent is running
604
+ // Typing always works (for queue). Only Enter submission checks inputActive.
605
+ // Phase 12.1.7: Option+Enter (ESC+CR/LF) → insert newline
606
+ if (key === '\x1b\r' || key === '\x1b\n') {
607
+ if (commandRunning)
608
+ return;
609
+ inputBuf += '\n';
610
+ redrawInputWithAutocomplete();
611
+ return;
612
+ }
613
+ // Autocomplete navigation (raw ESC sequences)
614
+ const isUpKey = key === '\x1b[A' || key === '\x1bOA';
615
+ const isDownKey = key === '\x1b[B' || key === '\x1bOB';
616
+ const isPageUpKey = key === '\x1b[5~';
617
+ const isPageDownKey = key === '\x1b[6~';
618
+ const isHomeKey = key === '\x1b[H' || key === '\x1b[1~' || key === '\x1bOH';
619
+ const isEndKey = key === '\x1b[F' || key === '\x1b[4~' || key === '\x1bOF';
620
+ if (ac.open && isUpKey) { // Up
621
+ ac.selected = Math.max(0, ac.selected - 1);
622
+ if (ac.selected < ac.windowStart)
623
+ ac.windowStart = ac.selected;
624
+ renderAutocomplete();
625
+ return;
626
+ }
627
+ if (ac.open && isDownKey) { // Down
628
+ const maxIdx = ac.items.length - 1;
629
+ ac.selected = Math.min(maxIdx, ac.selected + 1);
630
+ if (ac.selected >= ac.windowStart + ac.visibleRows) {
631
+ ac.windowStart = ac.selected - ac.visibleRows + 1;
632
+ }
633
+ renderAutocomplete();
634
+ return;
635
+ }
636
+ if (ac.open && isPageUpKey) {
637
+ const step = Math.max(1, ac.visibleRows);
638
+ ac.selected = Math.max(0, ac.selected - step);
639
+ if (ac.selected < ac.windowStart)
640
+ ac.windowStart = ac.selected;
641
+ renderAutocomplete();
642
+ return;
643
+ }
644
+ if (ac.open && isPageDownKey) {
645
+ const step = Math.max(1, ac.visibleRows);
646
+ const maxIdx = ac.items.length - 1;
647
+ ac.selected = Math.min(maxIdx, ac.selected + step);
648
+ if (ac.selected >= ac.windowStart + ac.visibleRows) {
649
+ ac.windowStart = ac.selected - ac.visibleRows + 1;
650
+ }
651
+ renderAutocomplete();
652
+ return;
653
+ }
654
+ if (ac.open && isHomeKey) {
655
+ ac.selected = 0;
656
+ ac.windowStart = 0;
657
+ renderAutocomplete();
658
+ return;
659
+ }
660
+ if (ac.open && isEndKey) {
661
+ ac.selected = Math.max(0, ac.items.length - 1);
662
+ if (ac.selected >= ac.windowStart + ac.visibleRows) {
663
+ ac.windowStart = ac.selected - ac.visibleRows + 1;
664
+ }
665
+ renderAutocomplete();
666
+ return;
667
+ }
668
+ if (ac.open && key === '\t') { // Tab accept (no execute)
669
+ const picked = ac.items[ac.selected];
670
+ const pickedStage = ac.stage;
671
+ if (picked) {
672
+ if (pickedStage === 'argument') {
673
+ inputBuf = picked.insertText || `/${picked.command || ''} ${picked.name}`.trim();
674
+ }
675
+ else {
676
+ inputBuf = `/${picked.name}${picked.args ? ' ' : ''}`;
677
+ }
678
+ closeAutocomplete();
679
+ redrawPromptLine();
680
+ }
681
+ return;
682
+ }
683
+ if (key === '\r' || key === '\n') {
684
+ if (ac.open) {
685
+ const picked = ac.items[ac.selected];
686
+ const pickedStage = ac.stage;
687
+ closeAutocomplete();
688
+ if (picked) {
689
+ if (pickedStage === 'argument') {
690
+ inputBuf = picked.insertText || `/${picked.command || ''} ${picked.name}`.trim();
691
+ redrawPromptLine();
692
+ return;
693
+ }
694
+ if (picked.args) {
695
+ inputBuf = `/${picked.name} `;
696
+ redrawPromptLine();
697
+ return;
698
+ }
699
+ inputBuf = `/${picked.name}`;
700
+ }
701
+ }
702
+ // Backslash continuation: \ at end → newline instead of submit
703
+ if (inputBuf.endsWith('\\')) {
704
+ inputBuf = inputBuf.slice(0, -1) + '\n';
705
+ redrawInputWithAutocomplete();
706
+ return;
707
+ }
708
+ // Enter — submit
709
+ const text = inputBuf.trim();
710
+ inputBuf = '';
711
+ closeAutocomplete();
712
+ prevLineCount = 1;
713
+ console.log(''); // newline after input
714
+ if (!text) {
715
+ showPrompt();
716
+ return;
717
+ }
718
+ // Phase 10: /file command
719
+ if (text.startsWith('/file ')) {
720
+ const parts = text.slice(6).trim().split(/\s+/);
721
+ const fp = resolvePath(parts[0]);
722
+ const caption = parts.slice(1).join(' ');
723
+ if (!fs.existsSync(fp)) {
724
+ console.log(` ${c.red}파일 없음: ${fp}${c.reset}`);
725
+ showPrompt();
726
+ return;
727
+ }
728
+ const prompt = `[사용자가 파일을 보냈습니다: ${fp}]\n이 파일을 Read 도구로 읽고 분석해주세요.${caption ? `\n\n사용자 메시지: ${caption}` : ''}`;
729
+ ws.send(JSON.stringify({ type: 'send_message', text: prompt }));
730
+ inputActive = false;
731
+ return;
732
+ }
733
+ const parsed = parseCommand(text);
734
+ if (parsed) {
735
+ inputActive = false;
736
+ commandRunning = true;
737
+ void runSlashCommand(parsed);
738
+ return;
739
+ }
740
+ ws.send(JSON.stringify({ type: 'send_message', text }));
741
+ inputActive = false;
742
+ }
743
+ else if (key === '\x7f' || key === '\b') {
744
+ // Backspace
745
+ if (inputBuf.length > 0) {
746
+ inputBuf = inputBuf.slice(0, -1);
747
+ redrawInputWithAutocomplete();
748
+ }
749
+ }
750
+ else if (key === '\x03') {
751
+ // Ctrl+C — stop agent if running, otherwise exit
752
+ if (!inputActive) {
753
+ if (commandRunning)
754
+ return;
755
+ ws.send(JSON.stringify({ type: 'stop' }));
756
+ console.log(`\n ${c.yellow}■ stopped${c.reset}`);
757
+ inputActive = true;
758
+ showPrompt();
759
+ }
760
+ else {
761
+ cleanupScrollRegion();
762
+ console.log(`\n ${c.dim}Bye! \uD83E\uDD9E${c.reset}\n`);
763
+ ws.close();
764
+ process.stdin.setRawMode(false);
765
+ process.exit(0);
766
+ }
767
+ }
768
+ else if (key === '\x15') {
769
+ // Ctrl+U — clear line
770
+ inputBuf = '';
771
+ redrawInputWithAutocomplete();
772
+ }
773
+ else if (key.charCodeAt(0) >= 32 || key.charCodeAt(0) > 127) {
774
+ // Printable chars (including multibyte/Korean)
775
+ // Phase 12.1.5: allow typing during agent run for queue
776
+ if (!inputActive) {
777
+ if (commandRunning)
778
+ return;
779
+ inputActive = true;
780
+ showPrompt(); // new separator + prompt before queue input
781
+ }
782
+ inputBuf += key;
783
+ redrawInputWithAutocomplete();
784
+ }
785
+ });
786
+ // ─── WS messages ─────────────────────────
787
+ ws.on('message', (data) => {
788
+ const raw = data.toString();
789
+ try {
790
+ const msg = JSON.parse(raw);
791
+ switch (msg.type) {
792
+ case 'agent_chunk':
793
+ if (isRaw) {
794
+ console.log(` ${c.dim}${raw}${c.reset}`);
795
+ break;
796
+ }
797
+ if (!streaming) {
798
+ streaming = true;
799
+ console.log('');
800
+ process.stdout.write(' ');
801
+ }
802
+ process.stdout.write((msg.text || '').replace(/\n/g, '\n '));
803
+ break;
804
+ case 'agent_done':
805
+ if (isRaw) {
806
+ console.log(` ${c.dim}${raw}${c.reset}`);
807
+ }
808
+ else if (streaming) {
809
+ console.log('');
810
+ }
811
+ else if (msg.text) {
812
+ console.log('');
813
+ console.log(` ${msg.text.replace(/\n/g, '\n ')}`);
814
+ }
815
+ streaming = false;
816
+ inputActive = true;
817
+ showPrompt();
818
+ break;
819
+ case 'agent_status':
820
+ // skip 'done' — redundant with agent_done, arrives late
821
+ if (msg.status === 'done')
822
+ break;
823
+ if (isRaw) {
824
+ console.log(` ${c.dim}${raw}${c.reset}`);
825
+ }
826
+ else if (msg.status === 'running') {
827
+ const name = msg.agentName || msg.agentId || 'agent';
828
+ process.stdout.write(`\r ${c.yellow}\u25CF${c.reset} ${c.dim}${name} working...${c.reset} \r`);
829
+ }
830
+ break;
831
+ case 'agent_tool':
832
+ if (isRaw) {
833
+ console.log(` ${c.dim}${raw}${c.reset}`);
834
+ }
835
+ else if (msg.icon && msg.label) {
836
+ process.stdout.write(`\r ${c.dim}${msg.icon} ${msg.label}${c.reset} \r`);
837
+ }
838
+ break;
839
+ case 'agent_fallback':
840
+ if (isRaw) {
841
+ console.log(` ${c.dim}${raw}${c.reset}`);
842
+ }
843
+ else {
844
+ process.stdout.write(`\r ${c.yellow}⚡${c.reset} ${c.dim}${msg.from} → ${msg.to}${c.reset} \r`);
845
+ }
846
+ break;
847
+ case 'queue_update':
848
+ if (msg.pending > 0) {
849
+ process.stdout.write(`\r ${c.yellow}⏳ ${msg.pending}개 대기 중${c.reset} \r`);
850
+ }
851
+ break;
852
+ case 'new_message':
853
+ if (isRaw) {
854
+ console.log(` ${c.dim}${raw}${c.reset}`);
855
+ }
856
+ else if (msg.source && msg.source !== 'cli') {
857
+ console.log(`\n ${c.dim}[${msg.source}]${c.reset} ${(msg.content || '').slice(0, 60)}`);
858
+ }
859
+ break;
860
+ default:
861
+ if (isRaw) {
862
+ console.log(` ${c.dim}${raw}${c.reset}`);
863
+ }
864
+ break;
865
+ }
866
+ }
867
+ catch { }
868
+ });
869
+ ws.on('close', () => {
870
+ cleanupScrollRegion();
871
+ console.log(`\n ${c.dim}Disconnected${c.reset}\n`);
872
+ process.stdin.setRawMode(false);
873
+ process.exit(0);
874
+ });
875
+ setupScrollRegion();
876
+ showPrompt();
877
+ }
878
+ //# sourceMappingURL=chat.js.map