goatchain-cli-darwin-x64 0.0.73-beta.9 → 0.1.1

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 (305) hide show
  1. package/bin/goatchain +0 -0
  2. package/bin/node_modules/skills/bin/cli.mjs +14 -0
  3. package/bin/node_modules/skills/dist/_chunks/libs/@clack/core.mjs +767 -0
  4. package/bin/node_modules/skills/dist/_chunks/libs/@clack/prompts.mjs +334 -0
  5. package/bin/node_modules/skills/dist/_chunks/libs/@kwsites/file-exists.mjs +562 -0
  6. package/bin/node_modules/skills/dist/_chunks/libs/@kwsites/promise-deferred.mjs +37 -0
  7. package/bin/node_modules/skills/dist/_chunks/libs/@vercel/detect-agent.mjs +138 -0
  8. package/bin/node_modules/skills/dist/_chunks/libs/simple-git.mjs +3584 -0
  9. package/bin/node_modules/skills/dist/_chunks/libs/xdg-basedir.mjs +14 -0
  10. package/bin/node_modules/skills/dist/_chunks/rolldown-runtime.mjs +24 -0
  11. package/bin/node_modules/skills/dist/cli.d.mts +1 -0
  12. package/bin/node_modules/skills/dist/cli.mjs +6199 -0
  13. package/bin/node_modules/skills/package.json +143 -0
  14. package/bin/node_modules/yaml/LICENSE +13 -0
  15. package/bin/node_modules/yaml/README.md +172 -0
  16. package/bin/node_modules/yaml/bin.mjs +11 -0
  17. package/bin/node_modules/yaml/browser/dist/compose/compose-collection.js +88 -0
  18. package/bin/node_modules/yaml/browser/dist/compose/compose-doc.js +43 -0
  19. package/bin/node_modules/yaml/browser/dist/compose/compose-node.js +109 -0
  20. package/bin/node_modules/yaml/browser/dist/compose/compose-scalar.js +86 -0
  21. package/bin/node_modules/yaml/browser/dist/compose/composer.js +219 -0
  22. package/bin/node_modules/yaml/browser/dist/compose/resolve-block-map.js +115 -0
  23. package/bin/node_modules/yaml/browser/dist/compose/resolve-block-scalar.js +198 -0
  24. package/bin/node_modules/yaml/browser/dist/compose/resolve-block-seq.js +49 -0
  25. package/bin/node_modules/yaml/browser/dist/compose/resolve-end.js +37 -0
  26. package/bin/node_modules/yaml/browser/dist/compose/resolve-flow-collection.js +207 -0
  27. package/bin/node_modules/yaml/browser/dist/compose/resolve-flow-scalar.js +225 -0
  28. package/bin/node_modules/yaml/browser/dist/compose/resolve-props.js +146 -0
  29. package/bin/node_modules/yaml/browser/dist/compose/util-contains-newline.js +34 -0
  30. package/bin/node_modules/yaml/browser/dist/compose/util-empty-scalar-position.js +26 -0
  31. package/bin/node_modules/yaml/browser/dist/compose/util-flow-indent-check.js +15 -0
  32. package/bin/node_modules/yaml/browser/dist/compose/util-map-includes.js +13 -0
  33. package/bin/node_modules/yaml/browser/dist/doc/Document.js +335 -0
  34. package/bin/node_modules/yaml/browser/dist/doc/anchors.js +71 -0
  35. package/bin/node_modules/yaml/browser/dist/doc/applyReviver.js +55 -0
  36. package/bin/node_modules/yaml/browser/dist/doc/createNode.js +88 -0
  37. package/bin/node_modules/yaml/browser/dist/doc/directives.js +176 -0
  38. package/bin/node_modules/yaml/browser/dist/errors.js +57 -0
  39. package/bin/node_modules/yaml/browser/dist/index.js +17 -0
  40. package/bin/node_modules/yaml/browser/dist/log.js +11 -0
  41. package/bin/node_modules/yaml/browser/dist/nodes/Alias.js +116 -0
  42. package/bin/node_modules/yaml/browser/dist/nodes/Collection.js +147 -0
  43. package/bin/node_modules/yaml/browser/dist/nodes/Node.js +38 -0
  44. package/bin/node_modules/yaml/browser/dist/nodes/Pair.js +36 -0
  45. package/bin/node_modules/yaml/browser/dist/nodes/Scalar.js +24 -0
  46. package/bin/node_modules/yaml/browser/dist/nodes/YAMLMap.js +144 -0
  47. package/bin/node_modules/yaml/browser/dist/nodes/YAMLSeq.js +113 -0
  48. package/bin/node_modules/yaml/browser/dist/nodes/addPairToJSMap.js +63 -0
  49. package/bin/node_modules/yaml/browser/dist/nodes/identity.js +36 -0
  50. package/bin/node_modules/yaml/browser/dist/nodes/toJS.js +37 -0
  51. package/bin/node_modules/yaml/browser/dist/parse/cst-scalar.js +214 -0
  52. package/bin/node_modules/yaml/browser/dist/parse/cst-stringify.js +61 -0
  53. package/bin/node_modules/yaml/browser/dist/parse/cst-visit.js +97 -0
  54. package/bin/node_modules/yaml/browser/dist/parse/cst.js +98 -0
  55. package/bin/node_modules/yaml/browser/dist/parse/lexer.js +721 -0
  56. package/bin/node_modules/yaml/browser/dist/parse/line-counter.js +39 -0
  57. package/bin/node_modules/yaml/browser/dist/parse/parser.js +975 -0
  58. package/bin/node_modules/yaml/browser/dist/public-api.js +102 -0
  59. package/bin/node_modules/yaml/browser/dist/schema/Schema.js +37 -0
  60. package/bin/node_modules/yaml/browser/dist/schema/common/map.js +17 -0
  61. package/bin/node_modules/yaml/browser/dist/schema/common/null.js +15 -0
  62. package/bin/node_modules/yaml/browser/dist/schema/common/seq.js +17 -0
  63. package/bin/node_modules/yaml/browser/dist/schema/common/string.js +14 -0
  64. package/bin/node_modules/yaml/browser/dist/schema/core/bool.js +19 -0
  65. package/bin/node_modules/yaml/browser/dist/schema/core/float.js +43 -0
  66. package/bin/node_modules/yaml/browser/dist/schema/core/int.js +38 -0
  67. package/bin/node_modules/yaml/browser/dist/schema/core/schema.js +23 -0
  68. package/bin/node_modules/yaml/browser/dist/schema/json/schema.js +62 -0
  69. package/bin/node_modules/yaml/browser/dist/schema/tags.js +96 -0
  70. package/bin/node_modules/yaml/browser/dist/schema/yaml-1.1/binary.js +58 -0
  71. package/bin/node_modules/yaml/browser/dist/schema/yaml-1.1/bool.js +26 -0
  72. package/bin/node_modules/yaml/browser/dist/schema/yaml-1.1/float.js +46 -0
  73. package/bin/node_modules/yaml/browser/dist/schema/yaml-1.1/int.js +71 -0
  74. package/bin/node_modules/yaml/browser/dist/schema/yaml-1.1/merge.js +67 -0
  75. package/bin/node_modules/yaml/browser/dist/schema/yaml-1.1/omap.js +74 -0
  76. package/bin/node_modules/yaml/browser/dist/schema/yaml-1.1/pairs.js +78 -0
  77. package/bin/node_modules/yaml/browser/dist/schema/yaml-1.1/schema.js +39 -0
  78. package/bin/node_modules/yaml/browser/dist/schema/yaml-1.1/set.js +93 -0
  79. package/bin/node_modules/yaml/browser/dist/schema/yaml-1.1/timestamp.js +101 -0
  80. package/bin/node_modules/yaml/browser/dist/stringify/foldFlowLines.js +146 -0
  81. package/bin/node_modules/yaml/browser/dist/stringify/stringify.js +129 -0
  82. package/bin/node_modules/yaml/browser/dist/stringify/stringifyCollection.js +153 -0
  83. package/bin/node_modules/yaml/browser/dist/stringify/stringifyComment.js +20 -0
  84. package/bin/node_modules/yaml/browser/dist/stringify/stringifyDocument.js +85 -0
  85. package/bin/node_modules/yaml/browser/dist/stringify/stringifyNumber.js +25 -0
  86. package/bin/node_modules/yaml/browser/dist/stringify/stringifyPair.js +150 -0
  87. package/bin/node_modules/yaml/browser/dist/stringify/stringifyString.js +336 -0
  88. package/bin/node_modules/yaml/browser/dist/util.js +11 -0
  89. package/bin/node_modules/yaml/browser/dist/visit.js +233 -0
  90. package/bin/node_modules/yaml/browser/index.js +5 -0
  91. package/bin/node_modules/yaml/browser/package.json +3 -0
  92. package/bin/node_modules/yaml/dist/cli.d.ts +8 -0
  93. package/bin/node_modules/yaml/dist/cli.mjs +201 -0
  94. package/bin/node_modules/yaml/dist/compose/compose-collection.d.ts +11 -0
  95. package/bin/node_modules/yaml/dist/compose/compose-collection.js +90 -0
  96. package/bin/node_modules/yaml/dist/compose/compose-doc.d.ts +7 -0
  97. package/bin/node_modules/yaml/dist/compose/compose-doc.js +45 -0
  98. package/bin/node_modules/yaml/dist/compose/compose-node.d.ts +29 -0
  99. package/bin/node_modules/yaml/dist/compose/compose-node.js +112 -0
  100. package/bin/node_modules/yaml/dist/compose/compose-scalar.d.ts +5 -0
  101. package/bin/node_modules/yaml/dist/compose/compose-scalar.js +88 -0
  102. package/bin/node_modules/yaml/dist/compose/composer.d.ts +63 -0
  103. package/bin/node_modules/yaml/dist/compose/composer.js +224 -0
  104. package/bin/node_modules/yaml/dist/compose/resolve-block-map.d.ts +6 -0
  105. package/bin/node_modules/yaml/dist/compose/resolve-block-map.js +117 -0
  106. package/bin/node_modules/yaml/dist/compose/resolve-block-scalar.d.ts +11 -0
  107. package/bin/node_modules/yaml/dist/compose/resolve-block-scalar.js +200 -0
  108. package/bin/node_modules/yaml/dist/compose/resolve-block-seq.d.ts +6 -0
  109. package/bin/node_modules/yaml/dist/compose/resolve-block-seq.js +51 -0
  110. package/bin/node_modules/yaml/dist/compose/resolve-end.d.ts +6 -0
  111. package/bin/node_modules/yaml/dist/compose/resolve-end.js +39 -0
  112. package/bin/node_modules/yaml/dist/compose/resolve-flow-collection.d.ts +7 -0
  113. package/bin/node_modules/yaml/dist/compose/resolve-flow-collection.js +209 -0
  114. package/bin/node_modules/yaml/dist/compose/resolve-flow-scalar.d.ts +10 -0
  115. package/bin/node_modules/yaml/dist/compose/resolve-flow-scalar.js +227 -0
  116. package/bin/node_modules/yaml/dist/compose/resolve-props.d.ts +23 -0
  117. package/bin/node_modules/yaml/dist/compose/resolve-props.js +148 -0
  118. package/bin/node_modules/yaml/dist/compose/util-contains-newline.d.ts +2 -0
  119. package/bin/node_modules/yaml/dist/compose/util-contains-newline.js +36 -0
  120. package/bin/node_modules/yaml/dist/compose/util-empty-scalar-position.d.ts +2 -0
  121. package/bin/node_modules/yaml/dist/compose/util-empty-scalar-position.js +28 -0
  122. package/bin/node_modules/yaml/dist/compose/util-flow-indent-check.d.ts +3 -0
  123. package/bin/node_modules/yaml/dist/compose/util-flow-indent-check.js +17 -0
  124. package/bin/node_modules/yaml/dist/compose/util-map-includes.d.ts +4 -0
  125. package/bin/node_modules/yaml/dist/compose/util-map-includes.js +15 -0
  126. package/bin/node_modules/yaml/dist/doc/Document.d.ts +141 -0
  127. package/bin/node_modules/yaml/dist/doc/Document.js +337 -0
  128. package/bin/node_modules/yaml/dist/doc/anchors.d.ts +24 -0
  129. package/bin/node_modules/yaml/dist/doc/anchors.js +76 -0
  130. package/bin/node_modules/yaml/dist/doc/applyReviver.d.ts +9 -0
  131. package/bin/node_modules/yaml/dist/doc/applyReviver.js +57 -0
  132. package/bin/node_modules/yaml/dist/doc/createNode.d.ts +17 -0
  133. package/bin/node_modules/yaml/dist/doc/createNode.js +90 -0
  134. package/bin/node_modules/yaml/dist/doc/directives.d.ts +49 -0
  135. package/bin/node_modules/yaml/dist/doc/directives.js +178 -0
  136. package/bin/node_modules/yaml/dist/errors.d.ts +21 -0
  137. package/bin/node_modules/yaml/dist/errors.js +62 -0
  138. package/bin/node_modules/yaml/dist/index.d.ts +25 -0
  139. package/bin/node_modules/yaml/dist/index.js +50 -0
  140. package/bin/node_modules/yaml/dist/log.d.ts +3 -0
  141. package/bin/node_modules/yaml/dist/log.js +19 -0
  142. package/bin/node_modules/yaml/dist/nodes/Alias.d.ts +29 -0
  143. package/bin/node_modules/yaml/dist/nodes/Alias.js +118 -0
  144. package/bin/node_modules/yaml/dist/nodes/Collection.d.ts +73 -0
  145. package/bin/node_modules/yaml/dist/nodes/Collection.js +151 -0
  146. package/bin/node_modules/yaml/dist/nodes/Node.d.ts +53 -0
  147. package/bin/node_modules/yaml/dist/nodes/Node.js +40 -0
  148. package/bin/node_modules/yaml/dist/nodes/Pair.d.ts +22 -0
  149. package/bin/node_modules/yaml/dist/nodes/Pair.js +39 -0
  150. package/bin/node_modules/yaml/dist/nodes/Scalar.d.ts +47 -0
  151. package/bin/node_modules/yaml/dist/nodes/Scalar.js +27 -0
  152. package/bin/node_modules/yaml/dist/nodes/YAMLMap.d.ts +53 -0
  153. package/bin/node_modules/yaml/dist/nodes/YAMLMap.js +147 -0
  154. package/bin/node_modules/yaml/dist/nodes/YAMLSeq.d.ts +60 -0
  155. package/bin/node_modules/yaml/dist/nodes/YAMLSeq.js +115 -0
  156. package/bin/node_modules/yaml/dist/nodes/addPairToJSMap.d.ts +4 -0
  157. package/bin/node_modules/yaml/dist/nodes/addPairToJSMap.js +65 -0
  158. package/bin/node_modules/yaml/dist/nodes/identity.d.ts +23 -0
  159. package/bin/node_modules/yaml/dist/nodes/identity.js +53 -0
  160. package/bin/node_modules/yaml/dist/nodes/toJS.d.ts +29 -0
  161. package/bin/node_modules/yaml/dist/nodes/toJS.js +39 -0
  162. package/bin/node_modules/yaml/dist/options.d.ts +350 -0
  163. package/bin/node_modules/yaml/dist/parse/cst-scalar.d.ts +64 -0
  164. package/bin/node_modules/yaml/dist/parse/cst-scalar.js +218 -0
  165. package/bin/node_modules/yaml/dist/parse/cst-stringify.d.ts +8 -0
  166. package/bin/node_modules/yaml/dist/parse/cst-stringify.js +63 -0
  167. package/bin/node_modules/yaml/dist/parse/cst-visit.d.ts +39 -0
  168. package/bin/node_modules/yaml/dist/parse/cst-visit.js +99 -0
  169. package/bin/node_modules/yaml/dist/parse/cst.d.ts +109 -0
  170. package/bin/node_modules/yaml/dist/parse/cst.js +112 -0
  171. package/bin/node_modules/yaml/dist/parse/lexer.d.ts +87 -0
  172. package/bin/node_modules/yaml/dist/parse/lexer.js +723 -0
  173. package/bin/node_modules/yaml/dist/parse/line-counter.d.ts +22 -0
  174. package/bin/node_modules/yaml/dist/parse/line-counter.js +41 -0
  175. package/bin/node_modules/yaml/dist/parse/parser.d.ts +84 -0
  176. package/bin/node_modules/yaml/dist/parse/parser.js +980 -0
  177. package/bin/node_modules/yaml/dist/public-api.d.ts +44 -0
  178. package/bin/node_modules/yaml/dist/public-api.js +107 -0
  179. package/bin/node_modules/yaml/dist/schema/Schema.d.ts +17 -0
  180. package/bin/node_modules/yaml/dist/schema/Schema.js +39 -0
  181. package/bin/node_modules/yaml/dist/schema/common/map.d.ts +2 -0
  182. package/bin/node_modules/yaml/dist/schema/common/map.js +19 -0
  183. package/bin/node_modules/yaml/dist/schema/common/null.d.ts +4 -0
  184. package/bin/node_modules/yaml/dist/schema/common/null.js +17 -0
  185. package/bin/node_modules/yaml/dist/schema/common/seq.d.ts +2 -0
  186. package/bin/node_modules/yaml/dist/schema/common/seq.js +19 -0
  187. package/bin/node_modules/yaml/dist/schema/common/string.d.ts +2 -0
  188. package/bin/node_modules/yaml/dist/schema/common/string.js +16 -0
  189. package/bin/node_modules/yaml/dist/schema/core/bool.d.ts +4 -0
  190. package/bin/node_modules/yaml/dist/schema/core/bool.js +21 -0
  191. package/bin/node_modules/yaml/dist/schema/core/float.d.ts +4 -0
  192. package/bin/node_modules/yaml/dist/schema/core/float.js +47 -0
  193. package/bin/node_modules/yaml/dist/schema/core/int.d.ts +4 -0
  194. package/bin/node_modules/yaml/dist/schema/core/int.js +42 -0
  195. package/bin/node_modules/yaml/dist/schema/core/schema.d.ts +1 -0
  196. package/bin/node_modules/yaml/dist/schema/core/schema.js +25 -0
  197. package/bin/node_modules/yaml/dist/schema/json/schema.d.ts +2 -0
  198. package/bin/node_modules/yaml/dist/schema/json/schema.js +64 -0
  199. package/bin/node_modules/yaml/dist/schema/json-schema.d.ts +69 -0
  200. package/bin/node_modules/yaml/dist/schema/tags.d.ts +48 -0
  201. package/bin/node_modules/yaml/dist/schema/tags.js +99 -0
  202. package/bin/node_modules/yaml/dist/schema/types.d.ts +92 -0
  203. package/bin/node_modules/yaml/dist/schema/yaml-1.1/binary.d.ts +2 -0
  204. package/bin/node_modules/yaml/dist/schema/yaml-1.1/binary.js +70 -0
  205. package/bin/node_modules/yaml/dist/schema/yaml-1.1/bool.d.ts +7 -0
  206. package/bin/node_modules/yaml/dist/schema/yaml-1.1/bool.js +29 -0
  207. package/bin/node_modules/yaml/dist/schema/yaml-1.1/float.d.ts +4 -0
  208. package/bin/node_modules/yaml/dist/schema/yaml-1.1/float.js +50 -0
  209. package/bin/node_modules/yaml/dist/schema/yaml-1.1/int.d.ts +5 -0
  210. package/bin/node_modules/yaml/dist/schema/yaml-1.1/int.js +76 -0
  211. package/bin/node_modules/yaml/dist/schema/yaml-1.1/merge.d.ts +9 -0
  212. package/bin/node_modules/yaml/dist/schema/yaml-1.1/merge.js +71 -0
  213. package/bin/node_modules/yaml/dist/schema/yaml-1.1/omap.d.ts +22 -0
  214. package/bin/node_modules/yaml/dist/schema/yaml-1.1/omap.js +77 -0
  215. package/bin/node_modules/yaml/dist/schema/yaml-1.1/pairs.d.ts +10 -0
  216. package/bin/node_modules/yaml/dist/schema/yaml-1.1/pairs.js +82 -0
  217. package/bin/node_modules/yaml/dist/schema/yaml-1.1/schema.d.ts +1 -0
  218. package/bin/node_modules/yaml/dist/schema/yaml-1.1/schema.js +41 -0
  219. package/bin/node_modules/yaml/dist/schema/yaml-1.1/set.d.ts +28 -0
  220. package/bin/node_modules/yaml/dist/schema/yaml-1.1/set.js +96 -0
  221. package/bin/node_modules/yaml/dist/schema/yaml-1.1/timestamp.d.ts +6 -0
  222. package/bin/node_modules/yaml/dist/schema/yaml-1.1/timestamp.js +105 -0
  223. package/bin/node_modules/yaml/dist/stringify/foldFlowLines.d.ts +34 -0
  224. package/bin/node_modules/yaml/dist/stringify/foldFlowLines.js +151 -0
  225. package/bin/node_modules/yaml/dist/stringify/stringify.d.ts +21 -0
  226. package/bin/node_modules/yaml/dist/stringify/stringify.js +132 -0
  227. package/bin/node_modules/yaml/dist/stringify/stringifyCollection.d.ts +17 -0
  228. package/bin/node_modules/yaml/dist/stringify/stringifyCollection.js +155 -0
  229. package/bin/node_modules/yaml/dist/stringify/stringifyComment.d.ts +10 -0
  230. package/bin/node_modules/yaml/dist/stringify/stringifyComment.js +24 -0
  231. package/bin/node_modules/yaml/dist/stringify/stringifyDocument.d.ts +4 -0
  232. package/bin/node_modules/yaml/dist/stringify/stringifyDocument.js +87 -0
  233. package/bin/node_modules/yaml/dist/stringify/stringifyNumber.d.ts +2 -0
  234. package/bin/node_modules/yaml/dist/stringify/stringifyNumber.js +27 -0
  235. package/bin/node_modules/yaml/dist/stringify/stringifyPair.d.ts +3 -0
  236. package/bin/node_modules/yaml/dist/stringify/stringifyPair.js +152 -0
  237. package/bin/node_modules/yaml/dist/stringify/stringifyString.d.ts +9 -0
  238. package/bin/node_modules/yaml/dist/stringify/stringifyString.js +338 -0
  239. package/bin/node_modules/yaml/dist/test-events.d.ts +4 -0
  240. package/bin/node_modules/yaml/dist/test-events.js +134 -0
  241. package/bin/node_modules/yaml/dist/util.d.ts +16 -0
  242. package/bin/node_modules/yaml/dist/util.js +28 -0
  243. package/bin/node_modules/yaml/dist/visit.d.ts +102 -0
  244. package/bin/node_modules/yaml/dist/visit.js +236 -0
  245. package/bin/node_modules/yaml/package.json +97 -0
  246. package/bin/node_modules/yaml/util.js +2 -0
  247. package/bin/runtime/sandbox/dim-sandbox-runner +0 -0
  248. package/bin/runtime/sandbox/manifest.json +15 -0
  249. package/bin/skills-assets/artifact-static-site/SKILL.md +58 -0
  250. package/bin/skills-assets/artifact-static-site/agents/openai.yaml +6 -0
  251. package/bin/skills-assets/chrome-control/SKILL.md +96 -0
  252. package/bin/skills-assets/computer-use/SKILL.md +34 -0
  253. package/bin/skills-assets/deep-investigate/SKILL.md +101 -0
  254. package/bin/skills-assets/deep-investigate/references/prompts.md +75 -0
  255. package/bin/skills-assets/deep-investigate/references/templates.md +73 -0
  256. package/bin/skills-assets/deep-investigate/references/thinking-tools.md +36 -0
  257. package/bin/skills-assets/dim-modality/SKILL.md +88 -0
  258. package/bin/skills-assets/dim-modality/agents/openai.yaml +4 -0
  259. package/bin/skills-assets/dim-modality/references/cli-recipes.md +137 -0
  260. package/bin/skills-assets/dim-modality/references/model-notes.md +56 -0
  261. package/bin/skills-assets/dim-workflow/SKILL.md +125 -0
  262. package/bin/skills-assets/dim-workflow/agents/openai.yaml +6 -0
  263. package/bin/skills-assets/docs-sprint/SKILL.md +73 -0
  264. package/bin/skills-assets/docs-sprint/agents/openai.yaml +4 -0
  265. package/bin/skills-assets/docs-sprint/references/contract-discipline.md +30 -0
  266. package/bin/skills-assets/docs-sprint/references/delivery-plan.md +162 -0
  267. package/bin/skills-assets/docs-sprint/references/documentation-system.md +109 -0
  268. package/bin/skills-assets/docs-sprint/references/ui-layout.md +73 -0
  269. package/bin/skills-assets/docs-sprint/references/worktree-guide.md +45 -0
  270. package/bin/skills-assets/officecli/SKILL.md +423 -0
  271. package/bin/skills-assets/pdf/README.md +222 -0
  272. package/bin/skills-assets/pdf/SKILL.md +191 -0
  273. package/bin/skills-assets/pdf/design/design.md +381 -0
  274. package/bin/skills-assets/pdf/scripts/cover.py +1579 -0
  275. package/bin/skills-assets/pdf/scripts/fill_inspect.py +200 -0
  276. package/bin/skills-assets/pdf/scripts/fill_write.py +242 -0
  277. package/bin/skills-assets/pdf/scripts/make.sh +491 -0
  278. package/bin/skills-assets/pdf/scripts/merge.py +112 -0
  279. package/bin/skills-assets/pdf/scripts/palette.py +521 -0
  280. package/bin/skills-assets/pdf/scripts/reformat_parse.py +374 -0
  281. package/bin/skills-assets/pdf/scripts/render_body.py +1052 -0
  282. package/bin/skills-assets/pdf/scripts/render_cover.js +111 -0
  283. package/bin/skills-assets/plugin-creator/SKILL.md +148 -0
  284. package/bin/skills-assets/plugin-creator/references/installing-and-updating.md +66 -0
  285. package/bin/skills-assets/plugin-creator/references/plugin-json-spec.md +148 -0
  286. package/bin/skills-assets/plugin-creator/scripts/create_basic_plugin.py +189 -0
  287. package/bin/skills-assets/plugin-creator/scripts/validate_plugin.py +269 -0
  288. package/bin/skills-assets/skill-creator/SKILL.md +368 -0
  289. package/bin/skills-assets/skill-creator/agents/openai.yaml +5 -0
  290. package/bin/skills-assets/skill-creator/assets/skill-creator-small.svg +3 -0
  291. package/bin/skills-assets/skill-creator/assets/skill-creator.png +0 -0
  292. package/bin/skills-assets/skill-creator/license.txt +202 -0
  293. package/bin/skills-assets/skill-creator/references/openai_yaml.md +49 -0
  294. package/bin/skills-assets/skill-creator/scripts/generate_openai_yaml.py +226 -0
  295. package/bin/skills-assets/skill-creator/scripts/init_skill.py +397 -0
  296. package/bin/skills-assets/skill-creator/scripts/quick_validate.py +101 -0
  297. package/bin/skills-assets/skill-installer/LICENSE.txt +202 -0
  298. package/bin/skills-assets/skill-installer/SKILL.md +58 -0
  299. package/bin/skills-assets/skill-installer/agents/openai.yaml +5 -0
  300. package/bin/skills-assets/skill-installer/assets/skill-installer-small.svg +3 -0
  301. package/bin/skills-assets/skill-installer/assets/skill-installer.png +0 -0
  302. package/bin/skills-assets/skill-installer/scripts/github_utils.py +21 -0
  303. package/bin/skills-assets/skill-installer/scripts/install-skill-from-github.py +308 -0
  304. package/bin/skills-assets/skill-installer/scripts/list-skills.py +107 -0
  305. package/package.json +1 -1
@@ -0,0 +1,423 @@
1
+ ---
2
+ name: officecli
3
+ description: Create, analyze, proofread, and modify Office documents (.docx, .xlsx, .pptx) using the officecli CLI tool. Use when the user wants to create, inspect, check formatting, find issues, add charts, or modify Office documents.
4
+ ---
5
+
6
+ # officecli
7
+
8
+ AI-friendly CLI for .docx, .xlsx, .pptx. Single binary, no dependencies, no Office installation needed.
9
+
10
+ ## Install
11
+
12
+ In DimCode Desktop the `officecli` binary is bundled and already on the agent
13
+ shell PATH — there is nothing to install. Verify availability before first use:
14
+
15
+ ```bash
16
+ officecli --version
17
+ ```
18
+
19
+ If the command is missing, tell the user to update DimCode Desktop to a build
20
+ that bundles OfficeCLI. Do NOT attempt to download or replace the bundled
21
+ binary yourself — DimCode owns its lifecycle and disables its self-update
22
+ mechanism at startup. (Outside DimCode, `curl -fsSL https://d.officecli.ai/install.sh | bash` still works.)
23
+
24
+ ---
25
+
26
+ ## Strategy
27
+
28
+ **L1 (read) → L2 (DOM edit) → L3 (raw XML)**. Always prefer higher layers. Add `--json` for structured output.
29
+
30
+ **Before doc work, check Specialized Skills** (bottom of this file). Fundraising decks, academic papers, financial models, dashboards, and Morph animations need their own skill loaded first — `load_skill` once, then proceed.
31
+
32
+ ---
33
+
34
+ ## Help System (IMPORTANT)
35
+
36
+ **When unsure about property names, value formats, or command syntax, ALWAYS run help instead of guessing.** One help query beats guess-fail-retry loops.
37
+
38
+ `officecli help` ≡ `officecli --help`, and `officecli <cmd> --help` ≡ `officecli help <cmd>` — same content.
39
+
40
+ ```bash
41
+ officecli help # All commands + global options + schema entry points
42
+ officecli help docx # List all docx elements
43
+ officecli help docx paragraph # Full schema: properties, aliases, examples, readbacks
44
+ officecli help docx set paragraph # Verb-filtered: only props usable with `set`
45
+ officecli help docx paragraph --json # Structured schema (machine-readable)
46
+ ```
47
+
48
+ Format aliases: `word`→`docx`, `excel`→`xlsx`, `ppt`/`powerpoint`→`pptx`. Verbs: `add`, `set`, `get`, `query`, `remove`. MCP exposes the same schema via `{"command":"help","format":"docx","type":"paragraph"}`.
49
+
50
+ ---
51
+
52
+ ## Performance: Resident Mode
53
+
54
+ **Every command auto-starts a resident on first access** (60s idle timeout) — file-lock conflicts are automatically avoided. Explicit `open`/`close` is still recommended for longer sessions (12min idle):
55
+ ```bash
56
+ officecli open report.docx # explicitly keep in memory
57
+ officecli set report.docx ... # no file I/O overhead
58
+ officecli close report.docx # save and release
59
+ ```
60
+
61
+ Opt out of auto-start: `OFFICECLI_NO_AUTO_RESIDENT=1`.
62
+
63
+ **Flush only at the non-officecli boundary.** officecli's own reads (`get`/`query`/`view`/`dump`) always see your latest edits, so you never need to save mid-workflow. Run `save` (keeps the resident) or `close` (flush + release) only **before a non-officecli program reads the file** — python-docx/openpyxl, Word, a renderer, delivery/upload.
64
+
65
+ ---
66
+
67
+ ## Quick Start
68
+
69
+ **PPT:**
70
+ ```bash
71
+ officecli create slides.pptx
72
+ officecli add slides.pptx / --type slide --prop title="Q4 Report" --prop background=1A1A2E
73
+ officecli add slides.pptx '/slide[1]' --type shape --prop text="Revenue grew 25%" --prop x=2cm --prop y=5cm --prop font=Arial --prop size=24 --prop color=FFFFFF
74
+ ```
75
+
76
+ **Word:**
77
+ ```bash
78
+ officecli create report.docx
79
+ officecli add report.docx /body --type paragraph --prop text="Executive Summary" --prop style=Heading1
80
+ officecli add report.docx /body --type paragraph --prop text="Revenue increased by 25% year-over-year."
81
+ ```
82
+
83
+ **Excel:**
84
+ ```bash
85
+ officecli create data.xlsx
86
+ officecli set data.xlsx /Sheet1/A1 --prop value="Name" --prop bold=true
87
+ officecli set data.xlsx /Sheet1/A2 --prop value="Alice"
88
+ ```
89
+
90
+ ---
91
+
92
+ ## L1: Create, Read & Inspect
93
+
94
+ ```bash
95
+ officecli create <file> # Create blank .docx/.xlsx/.pptx (type from extension)
96
+ officecli view <file> <mode> # outline | stats | issues | text | annotated | html
97
+ officecli get <file> <path> --depth N # Get a node and its children [--json]
98
+ officecli query <file> <selector> # CSS-like query
99
+ officecli validate <file> # Validate against OpenXML schema
100
+ ```
101
+
102
+ ### view modes
103
+
104
+ | Mode | Description | Useful flags |
105
+ |------|-------------|-------------|
106
+ | `outline` | Document structure | |
107
+ | `stats` | Statistics (pages, words, shapes) | |
108
+ | `issues` | Formatting/content/structure problems | `--type format\|content\|structure`, `--limit N` |
109
+ | `text` | Plain text extraction | `--start N --end N`, `--max-lines N` |
110
+ | `annotated` | Text with formatting annotations | |
111
+ | `html` | Static HTML snapshot — same renderer as `watch`, no server needed | `--browser`, `--page N` (docx), `--start N --end N` (pptx) |
112
+ | `screenshot` / `svg` / `pdf` / `forms` | PNG via headless browser / SVG (pptx slide) / PDF via exporter plugin / form-fields JSON via format-handler plugin | `-o`, `--screenshot-width/-height`, pptx `--grid N` |
113
+
114
+ Use `view html` for one-shot snapshots (CI artifacts, archival, diffing); use `watch` when you need live refresh or browser-side click-to-select.
115
+
116
+ ### get
117
+
118
+ Any XML path via element localName. Use `--depth N` to expand children. Add `--json` for structured output. Default text output is grep-friendly: `path (type) "text" key=val key=val ...`
119
+
120
+ ```bash
121
+ officecli get report.docx '/body/p[3]' --depth 2 --json
122
+ officecli get slides.pptx '/slide[1]' --depth 1 # list all shapes on slide 1
123
+ officecli get data.xlsx '/Sheet1/B2' --json
124
+ ```
125
+
126
+ ### Stable ID Addressing
127
+
128
+ Elements with stable IDs return `@attr=value` paths instead of positional indices. Prefer these in multi-step workflows — positional indices shift on insert/delete, stable IDs do not.
129
+
130
+ ```
131
+ /slide[1]/shape[@id=550950021] # PPT shape
132
+ /slide[1]/table[@id=1388430425]/tr[1]/tc[2] # PPT table
133
+ /body/p[@paraId=1A2B3C4D] # Word paragraph
134
+ /comments/comment[@commentId=1] # Word comment
135
+ ```
136
+
137
+ PPT also accepts `@name=` (e.g. `shape[@name=Title 1]`), with morph `!!` prefix awareness. Elements without stable IDs (slide, run, tr/tc, row) fall back to positional indices.
138
+
139
+ ### query
140
+
141
+ CSS-like selectors: `[attr=value]`, `[attr!=value]`, `[attr~=text]`, `[attr>=value]`, `[attr<=value]`, `:contains("text")`, `:empty`, `:has(formula)`, `:no-alt`. Boolean `and`/`or` supported across `query`/`set`/`remove`: `cell[value>5000 or value<100]`, `cell[(type=Number or type=Date) and value>0]`. Excel row-by-column-name: `Sheet1!row[Salary>5000]`. `set` accepts selectors and Excel-native paths (parity with `get`/`query`). Bare unscoped selectors rejected on `set`/`remove`.
142
+
143
+ ```bash
144
+ officecli query report.docx 'paragraph[style=Normal] > run[font!=Arial]'
145
+ officecli query slides.pptx 'shape[fill=FF0000]'
146
+ ```
147
+
148
+ ---
149
+
150
+ ## Watch & Interactive Selection
151
+
152
+ Live HTML preview that auto-refreshes on every file change. Browsers can click / shift-click / box-drag to select shapes; the CLI can read the current browser selection and act on it.
153
+
154
+ ```bash
155
+ officecli watch <file> [--port N] # Start preview server (default port 26315)
156
+ officecli unwatch <file> # Stop
157
+ officecli goto <file> <path> # Scroll watching browser(s) to element (docx: p / table / tr / tc)
158
+ ```
159
+
160
+ Open the printed `http://localhost:N` URL. Click to select; shift/cmd/ctrl+click to multi-select; drag from empty space to box-select. PPT/Word use blue outline; Excel uses native-style green selection (double-click cell to edit inline; drag a chart to reposition).
161
+
162
+ ### `get <file> selected` — read what the user clicked
163
+
164
+ ```bash
165
+ officecli get <file> selected [--json]
166
+ ```
167
+
168
+ Returns DocumentNodes for whatever is currently selected. Empty result if nothing selected. Exit code != 0 if no watch is running.
169
+
170
+ ```bash
171
+ # User clicks shapes in the browser, then asks "make these red"
172
+ PATHS=$(officecli get deck.pptx selected --json | jq -r '.data.Results[].path')
173
+ for p in $PATHS; do officecli set deck.pptx "$p" --prop fill=FF0000; done
174
+ ```
175
+
176
+ ### Key properties
177
+
178
+ - **Selection survives file edits.** Paths use stable `@id=` form.
179
+ - **All connected browsers share one selection.** Last-write-wins.
180
+ - **Same-file single-watch.** A given file can have only one watch process at a time.
181
+ - **Group shapes select as a whole.** Drilling into individual children of a group is not supported in v1.
182
+ - **Coverage:** `.pptx` shapes/pictures/tables/charts/connectors/groups; `.docx` top-level paragraphs and tables. Inherited layout/master decorations and Word nested elements (table cells, run-level) are not addressable. **`.xlsx` does not emit `data-path`** — `mark`/`selection` on xlsx always resolve `stale=true` (v2 candidate).
183
+
184
+ ### Marks — edit proposals waiting for review
185
+
186
+ Use `mark` when changes need human review BEFORE they hit the file. Marks live in the watch process only; a separate `set` pipeline applies accepted ones. For one-shot changes use `set` directly; for permanent file annotations use `add --type comment` (Word native).
187
+
188
+ ```bash
189
+ officecli mark <file> <path> [--prop find=... color=... note=... tofix=... regex=true] [--json]
190
+ officecli unmark <file> [--path <p> | --all] [--json]
191
+ officecli get-marks <file> [--json]
192
+ ```
193
+
194
+ Props: `find` (literal or regex when `regex=true`; raw form `find='r"[abc]"'`), `color` (hex / `rgb(...)` / 22 named whitelist), `note`, `tofix` (drives apply pipeline). **Path** must be `data-path` format from watch HTML — see subskills for full pipeline.
195
+
196
+ ---
197
+
198
+ ## L2: DOM Operations
199
+
200
+ ### set — modify properties
201
+
202
+ ```bash
203
+ officecli set <file> <path> --prop key=value [--prop ...]
204
+ ```
205
+
206
+ **Any XML attribute is settable** via element path (found via `get --depth N`) — even attributes not currently present. Without `find=`, `set` applies format to the entire element.
207
+
208
+ **Value formats:**
209
+
210
+ | Type | Format | Examples |
211
+ |------|--------|---------|
212
+ | Colors | Hex (with/without `#`), named, RGB, theme | `FF0000`, `#FF0000`, `red`, `rgb(255,0,0)`, `accent1`..`accent6` |
213
+ | Spacing | Unit-qualified | `12pt`, `0.5cm`, `1.5x`, `150%` |
214
+ | Dimensions | EMU or suffixed | `914400`, `2.54cm`, `1in`, `72pt`, `96px` |
215
+
216
+ **Dotted-attr aliases** — `font.<attr>` forms accepted on shape/run/paragraph/table/row/cell/section/styles, e.g. `--prop font.color=red --prop font.bold=true --prop font.size=14pt`. Run `officecli help <fmt> <element>` for the full list.
217
+
218
+ ### find — format or replace matched text
219
+
220
+ Use top-level `--find` / `--replace` on `set` (and `--find` on `query`). Legacy `--prop find=X` still works but emits a hint.
221
+
222
+ ```bash
223
+ # Format matched text (auto-splits runs)
224
+ officecli set doc.docx '/body/p[1]' --find weather --prop bold=true --prop color=red
225
+
226
+ # Regex matching (regex= still a prop flag)
227
+ officecli set doc.docx '/body/p[1]' --find '\d+%' --prop regex=true --prop color=red
228
+
229
+ # Replace text (use `/` for whole-document scope)
230
+ officecli set doc.docx / --find draft --replace final
231
+
232
+ # docx: tracked Find&Replace
233
+ officecli set doc.docx / --find draft --replace final --prop revision.author=Alice
234
+
235
+ # PPT — same syntax, different paths
236
+ officecli set slides.pptx / --find draft --replace final
237
+ ```
238
+
239
+ **Path controls search scope:** `/` = whole document, `/body/p[1]` or `/slide[N]/shape[M]` = specific element, `/header[1]` / `/footer[1]` = headers/footers.
240
+
241
+ **Notes:**
242
+ - Case-sensitive by default. Case-insensitive: `--prop 'find=(?i)error' --prop regex=true`
243
+ - Matches work across run boundaries
244
+ - No match = silent success. `--json` includes `"matched": N`
245
+ - **Excel:** only `find` + `replace` supported (no find + format props)
246
+
247
+ ### add — add elements or clone
248
+
249
+ ```bash
250
+ officecli add <file> <parent> --type <type> [--prop ...]
251
+ officecli add <file> <parent> --type <type> --after <path> [--prop ...] # insert after anchor
252
+ officecli add <file> <parent> --type <type> --before <path> [--prop ...] # insert before anchor
253
+ officecli add <file> <parent> --type <type> --index N [--prop ...] # 0-based position (legacy)
254
+ officecli add <file> <parent> --from <path> # clone existing element
255
+ ```
256
+
257
+ `--after`, `--before`, `--index` are mutually exclusive. No position flag = append to end.
258
+
259
+ **Element types (with aliases):**
260
+
261
+ | Format | Types |
262
+ |--------|-------|
263
+ | **pptx** | slide (incl. hidden), shape (font.latin/ea/cs, direction=rtl, underline.color, highlight=COLOR (Add/Set/Get/HTML preview), effective.X+effective.X.src; arrow alias for rightArrow; slideMaster/slideLayout typed add/set/remove), picture (SVG, brightness/contrast/glow/shadow, rotation, link, tooltip), chart (direction=rtl, pieOfPie, barOfPie, axisLine/gridline per-attr setters, animation+chartBuild=byCategory|bySeries, line dropLines/hiLowLines/upDownBars, anchor=x,y,w,h shorthand), table (cell direction=rtl, fill/background, built-in PowerPoint style catalogue, /col[C] get + swap/copyFrom, row/col Move/CopyFrom), row (tr), connector (from/to accept @name=, startshape/endshape SetByPath), group (link, tooltip, deep walk by get/query/add/remove), video/audio (loop, autoStart alias), equation, notes (direction=rtl, lang), comment (legacy + modern p188 threaded round-trip), animation (15 emphasis + 16 exit presets, multi-effect chains, motion-path presets, repeat/restart/autoReverse, chart animations), transition (12 p15 presets + morph/p14), paragraph (para), run, zoom, ole (preview=, full dump round-trip via add-part+raw-set), placeholder (phType=...), model3d (rotation=ax,ay,az; full dump round-trip), smartart (dump round-trip via add-part). |
264
+ | **docx** | paragraph (direction/font.latin/ea/cs, bold.cs/italic.cs/size.cs, lang.latin/ea/cs, wordWrap, framePr.\*, tabs shorthand), run (lang slots, direction, underline.color, position half-pts, **revision.type=ins\|del\|format\|moveFrom\|moveTo + revision.action=accept\|reject** with .author/.date — `/revision[@author=X]` selector for filtered accept/reject), table (direction=rtl, hMerge, **virtual column ops**: add/remove/move/copyfrom on /body/tbl[N]/col), row (tr), cell (td), image, header/footer (direction), section (pageNumFmt full enum, direction=rtl, rtlGutter, pgBorders=box), bookmark, comment, footnote, endnote, formfield, sdt, chart, equation, field (28 types), hyperlink, style (direction, indents, pbdr, lineSpacing on Add/Set), toc, watermark, break, ole, **num/abstractNum/lvl**, **tab**, **textbox/shape** (full Add+Get; geometry, fill, line, wrap, alt, anchor, **rotation, verticalText (eaVert/vert/vert270/wordArt\*), gradient, shadow, opacity**), embedded **OLE round-trip on dump→batch**. docDefaults.rtl, autoHyphenation, `get /` exposes locale + /comments /footnotes /endnotes. `create --minimal` for raw OOXML scaffolding. |
265
+ | **xlsx** | sheet (visible/hidden/veryHidden, print margins, printTitleRows/Cols, rightToLeft sheetView, cascade-aware rename), row (c{N}= cell-content shorthand; add accepts --from /Sheet/col[L]; formula-ref rewrite on insert), col (formula-ref rewrite, named-range follow on move), cell (type=richtext+runs, merge=range/sweep, direction=rtl, phonetic; **--shift left\|up on remove, shift=right\|down on add** — Excel UI dialog parity; formula auto-detect; OFFSET/INDIRECT in calc), chart (per-axis RTL/title, anchor=x,y,w,h, pareto), image (SVG), comment (direction=rtl), table (listobject), namedrange (definedname, volatile, `[@name=X]`; formula-body inlined at parse), pivottable (cache CoW + cross-pivot sharing, labelFilter, topN, fillDownLabels, calculatedField), sparkline, validation, autofilter, shape, textbox, CF (databar/colorscale/iconset/formulacf/cellIs/topN/aboveAverage), ole, csv. Query supports `merge`/`mergedrange`. Workbook: password. Shape selector enumerates leaves inside grpSp. |
266
+
267
+ ### Pivot tables (xlsx)
268
+
269
+ ```bash
270
+ officecli add data.xlsx /Sheet1 --type pivottable \
271
+ --prop source="Sheet1!A1:E100" --prop rows=Region,Category \
272
+ --prop cols=Year --prop values="Sales:sum,Qty:count" \
273
+ --prop grandTotals=rows --prop subtotals=off --prop sort=asc
274
+ ```
275
+
276
+ Key props: `rows`, `cols`, `values` (Field:func[:showDataAs]), `filters`, `source`, `position`, `layout` (compact/outline/tabular), `repeatLabels`, `blankRows`, `aggregate`, `showDataAs` (percent_of_total/row/col, running_total), `grandTotals`, `subtotals`, `sort`. Aggregators: sum, count, average, max, min, product, stdDev, stdDevp, var, varp, countNums. Date columns auto-group. Run `officecli help xlsx pivottable` for full schema.
277
+
278
+ ### Document-level properties (all formats)
279
+
280
+ ```bash
281
+ officecli set doc.docx / --prop docDefaults.font=Arial --prop docDefaults.fontSize=11pt
282
+ officecli set doc.docx / --prop protection=forms --prop evenAndOddHeaders=true
283
+ officecli set data.xlsx / --prop calc.mode=manual --prop calc.refMode=r1c1
284
+ officecli set slides.pptx / --prop defaultFont=Arial --prop show.loop=true --prop print.what=handouts
285
+ ```
286
+
287
+ Run `officecli help <format> /` for all document-level properties (docDefaults, docGrid, CJK spacing, calc, print, show, theme, extended).
288
+
289
+ ### Sort (xlsx)
290
+
291
+ ```bash
292
+ officecli set data.xlsx /Sheet1 --prop sort="C desc" --prop sortHeader=true
293
+ officecli set data.xlsx '/Sheet1/A1:D100' --prop sort="A asc" --prop sortHeader=true
294
+ ```
295
+
296
+ Format: `COL DIR[, COL DIR ...]`. Rejects ranges with merged cells or formulas. Sidecar metadata (hyperlinks, comments, conditional formatting, drawings) follows rows automatically.
297
+
298
+ ### Text-anchored insert (`--after find:X` / `--before find:X`)
299
+
300
+ Locate an insertion point by text match within a paragraph. Inline types (run, picture, hyperlink) insert within the paragraph; block types (table, paragraph) auto-split it. PPT only supports inline.
301
+
302
+ ```bash
303
+ # Word: inline run after matched text
304
+ officecli add doc.docx '/body/p[1]' --type run --after find:weather --prop text=" (sunny)"
305
+
306
+ # Word: block table after matched text (auto-splits paragraph)
307
+ officecli add doc.docx '/body/p[1]' --type table --after "find:First sentence." --prop rows=2 --prop cols=2
308
+ ```
309
+
310
+ ### Clone
311
+
312
+ `officecli add <file> / --from '/slide[1]'` — copies with all cross-part relationships.
313
+
314
+ ### move, swap, remove
315
+
316
+ ```bash
317
+ officecli move <file> <path> [--to <parent>] [--index N] [--after <path>] [--before <path>]
318
+ officecli swap <file> <path1> <path2>
319
+ officecli remove <file> '/body/p[4]'
320
+ ```
321
+
322
+ When using `--after` or `--before`, `--to` can be omitted — the target container is inferred from the anchor.
323
+
324
+ ### batch — multiple operations in one save cycle
325
+
326
+ Continues on error by default (returns exit 1 if any item fails). Use `--stop-on-error` to abort on the first failure. `--force` is the docx-protection bypass.
327
+
328
+ `officecli dump <file> [<path>]` emits a replayable batch JSON for round-trip — `.docx` (full coverage) and `.pptx` (text/tables/pictures/charts/notes/theme + OLE/3D/video/audio/SmartArt/morph/p15 transitions via raw-set passthrough). Path defaults to `/` (whole document); pass a subtree path (`/body`, `/body/p[N]`, `/body/tbl[N]`, `/theme`, `/settings`, `/numbering`, `/styles`) to scope the dump. `officecli refresh <file.docx>` recalculates TOC page numbers / PAGE / cross-references after replay (Word backend on Windows; headless-HTML fallback elsewhere). `officecli plugins list` extends support to `.doc`, `.hwpx`, `.pdf` export.
329
+
330
+ ```bash
331
+ echo '[
332
+ {"command":"set","path":"/Sheet1/A1","props":{"value":"Name","bold":"true"}},
333
+ {"command":"set","path":"/Sheet1/B1","props":{"value":"Score","bold":"true"}}
334
+ ]' | officecli batch data.xlsx --json
335
+
336
+ officecli batch data.xlsx --commands '[{"op":"set","path":"/Sheet1/A1","props":{"value":"Done"}}]' --json
337
+ officecli batch data.xlsx --input updates.json --force --json
338
+ ```
339
+
340
+ Supports: `add`, `set`, `get`, `query`, `remove`, `move`, `swap`, `view`, `raw`, `raw-set`, `validate`. Fields: `command` (or `op`), `path`, `parent`, `type`, `from`, `to`, `index`, `after`, `before`, `props`, `selector`, `mode`, `depth`, `part`, `xpath`, `action`, `xml`.
341
+
342
+ ---
343
+
344
+ ## L3: Raw XML
345
+
346
+ Use when L2 cannot express what you need. No xmlns declarations needed — prefixes auto-registered.
347
+
348
+ ```bash
349
+ officecli raw <file> <part> # view raw XML
350
+ officecli raw-set <file> <part> --xpath "..." --action replace --xml '<w:p>...</w:p>'
351
+ officecli add-part <file> <parent> # create new document part (returns rId)
352
+ ```
353
+
354
+ `raw-set` actions: `append`, `prepend`, `insertbefore`, `insertafter`, `replace`, `remove`, `setattr`. Run `officecli help <format> raw` for available parts.
355
+
356
+ ---
357
+
358
+ ## Common Pitfalls
359
+
360
+ | Pitfall | Correct Approach |
361
+ |---------|-----------------|
362
+ | `--name "foo"` | Use `--prop name="foo"` — all attributes go through `--prop` |
363
+ | Unquoted `[N]` paths in zsh/bash | Always quote: `'/slide[1]'` or `"/slide[1]"` (shell glob-expands brackets) |
364
+ | PPT `shape[1]` for content | `shape[1]` is typically the title placeholder. Use `shape[2]+` for content shapes |
365
+ | `/shape[myname]` | Name indexing not supported. Use numeric index or `@name=` (PPT only) |
366
+ | Guessing property names | Run `officecli help <format> <element>` to see exact names |
367
+ | Modifying an open file | Close the file in PowerPoint/WPS first |
368
+ | `\n` in shell strings | Use `\\n` for newlines in `--prop text="..."` |
369
+ | `$` in shell text | `--prop text="$15M"` strips `$15`. Use single quotes: `--prop text='$15M'`, or heredoc batch |
370
+
371
+ ---
372
+
373
+ ## Specialized Skills
374
+
375
+ `officecli load_skill <name>` — output is a SKILL.md, follow its rules.
376
+
377
+ **Loading rule**:
378
+ - Pick the most specific match in "When to use"; if none fits, load the format default (`word` / `pptx` / `excel`).
379
+ - Scenes already contain the format default's rules — load **one** skill per artifact, never stack.
380
+ - Loaded rules persist across turns; don't re-load each reply.
381
+ - Two distinct artifacts → two separate loads.
382
+
383
+ ### Word (.docx)
384
+
385
+ | Name | When to use |
386
+ |------|-------------|
387
+ | `word` | Reports, letters, memos, proposals, generic documents |
388
+ | `academic-paper` | Journal / conference / thesis: APA / Chicago / IEEE / MLA citations, equations, SEQ + PAGEREF cross-refs, multi-column journal layout, bibliography. NOT for business reports or letters (route those to `word`) |
389
+
390
+ ### PowerPoint (.pptx)
391
+
392
+ | Name | When to use |
393
+ |------|-------------|
394
+ | `pptx` | Generic decks: board reviews, sales decks, all-hands, product launches |
395
+ | `pitch-deck` | **Fundraising only** — seed / Series A-C / SAFE / convertible / strategic raise. NOT for sales / product / board decks (route those to `pptx`) |
396
+ | `morph-ppt` | Cinematic Morph-animated presentations. NOT for static decks (route those to `pptx`) |
397
+ | `morph-ppt-3d` | 3D Morph: GLB models, camera moves, depth. NOT for 2D-only Morph (route those to `morph-ppt`) |
398
+
399
+ ### Excel (.xlsx)
400
+
401
+ | Name | When to use |
402
+ |------|-------------|
403
+ | `excel` | Generic workbooks, formulas, pivots, trackers |
404
+ | `financial-model` | Financial models, scenarios, projections. NOT for general data analysis (route those to `excel`) |
405
+ | `data-dashboard` | CSV/tabular data → KPI / analytics / executive dashboards with charts and sparklines. NOT for raw data tracking (route those to `excel`) |
406
+
407
+ Example: a fundraising deck task → `officecli load_skill pitch-deck` → use the printed rules.
408
+
409
+ In DimCode you can also discover and enable the related Office capability from
410
+ the **Skills** panel — the bundled `officecli` base skill is the entry point,
411
+ and the specialized skills above remain available through `officecli load_skill`
412
+ on the bundled binary. If a specialized skill's guidance contradicts this base
413
+ skill, follow the specialized skill for the task it covers.
414
+
415
+ ---
416
+
417
+ ## Notes
418
+
419
+ - Paths are **1-based** (XPath convention): `'/body/p[3]'` = third paragraph
420
+ - `--index` is **0-based** (array convention): `--index 0` = first position
421
+ - **Excel exception**: for `add --type row` and `add --type col`, `--index N` is **1-based** (matches OOXML RowIndex / column letter index). `--index 5` inserts at row 5 / column 5.
422
+ - After modifications, verify with `validate` and/or `view issues`
423
+ - **When unsure**, run `officecli help <format> <element>` instead of guessing
@@ -0,0 +1,222 @@
1
+ # pdf
2
+
3
+ A skill for creating and editing visually polished PDFs.
4
+ Three routes. One design system. Tokens flow from content analysis through every renderer.
5
+
6
+ ## Quick start
7
+
8
+ ```bash
9
+ bash scripts/make.sh check # verify deps
10
+ bash scripts/make.sh fix # auto-install missing deps
11
+ bash scripts/make.sh demo # → demo.pdf
12
+ ```
13
+
14
+ ---
15
+
16
+ ## Route A: CREATE — generate a new PDF
17
+
18
+ ```bash
19
+ bash scripts/make.sh run \
20
+ --title "Q3 Strategy Review" \
21
+ --type "proposal" \
22
+ --author "Strategy Team" \
23
+ --date "October 2025" \
24
+ --content content.json \
25
+ --out report.pdf
26
+ ```
27
+
28
+ **`--type` options:**
29
+
30
+ | Type | Palette | Cover pattern | Google Fonts (cover) |
31
+ |---|---|---|---|
32
+ | `report` | Deep ink, teal accent | `fullbleed` | Playfair Display / IBM Plex Sans |
33
+ | `proposal` | Near-black, amber accent | `split` | Syne / Nunito Sans |
34
+ | `resume` | White, navy accent | `typographic` | DM Serif Display / DM Sans |
35
+ | `portfolio` | Deep violet, coral accent | `atmospheric` | Fraunces / Inter |
36
+ | `academic` | Warm white, navy accent | `typographic` | EB Garamond / Source Sans 3 |
37
+ | `general` | Dark slate, blue accent | `fullbleed` | Outfit / Outfit |
38
+ | `minimal` | Near-white, red accent | `minimal` | Cormorant Garamond / Jost |
39
+ | `stripe` | Dark navy, amber accent | `stripe` | Barlow Condensed / Barlow |
40
+ | `diagonal` | Dark blue, teal accent | `diagonal` | Montserrat / Montserrat |
41
+ | `frame` | Warm cream, brown accent | `frame` | Cormorant / Crimson Pro |
42
+ | `editorial` | White, red accent | `editorial` | Bebas Neue / Libre Franklin |
43
+ | `magazine` | Warm linen, deep navy accent | `magazine` | Playfair Display / EB Garamond |
44
+ | `darkroom` | Deep navy, steel blue accent | `darkroom` | Playfair Display / EB Garamond |
45
+ | `terminal` | Near-black, neon green accent | `terminal` | Space Mono |
46
+ | `poster` | White, near-black accent | `poster` | Barlow Condensed / Courier Prime |
47
+
48
+ **content.json block types:**
49
+
50
+ ```json
51
+ [
52
+ {"type": "h1", "text": "Section Title"},
53
+ {"type": "h2", "text": "Subsection"},
54
+ {"type": "h3", "text": "Sub-subsection"},
55
+ {"type": "body", "text": "Paragraph. Supports <b>bold</b> and <i>italic</i>."},
56
+ {"type": "bullet", "text": "Unordered list item"},
57
+ {"type": "numbered","text": "Ordered list item — counter auto-resets between lists"},
58
+ {"type": "callout", "text": "Key insight or highlighted finding"},
59
+ {"type": "table",
60
+ "headers": ["Col A", "Col B"],
61
+ "rows": [["a", "b"], ["c", "d"]]
62
+ },
63
+ {"type": "image", "path": "chart.png", "caption": "Figure 1: optional caption"},
64
+ {"type": "code", "text": "def hello():\n print('world')"},
65
+ {"type": "math", "text": "\\int_0^\\infty e^{-x^2} dx = \\frac{\\sqrt{\\pi}}{2}", "label": "(1)"},
66
+ {"type": "divider"},
67
+ {"type": "caption", "text": "Table 1: standalone caption label"},
68
+ {"type": "pagebreak"},
69
+ {"type": "spacer", "pt": 16}
70
+ ]
71
+ ```
72
+
73
+ ---
74
+
75
+ ## Route B: FILL — fill form fields in an existing PDF
76
+
77
+ ```bash
78
+ # See what fields the PDF has
79
+ bash scripts/make.sh fill --input form.pdf --inspect
80
+
81
+ # Fill fields
82
+ bash scripts/make.sh fill \
83
+ --input form.pdf \
84
+ --out filled.pdf \
85
+ --values '{"FirstName": "Jane", "Agree": "true", "Country": "US"}'
86
+
87
+ # Or from a JSON file
88
+ bash scripts/make.sh fill --input form.pdf --out filled.pdf --data values.json
89
+ ```
90
+
91
+ Field value rules:
92
+ - `text` → any string
93
+ - `checkbox` → `"true"` or `"false"`
94
+ - `dropdown` → must match a choice value shown by `--inspect`
95
+ - `radio` → must match a radio value shown by `--inspect`
96
+
97
+ ---
98
+
99
+ ## Route C: REFORMAT — apply design to an existing document
100
+
101
+ ```bash
102
+ bash scripts/make.sh reformat \
103
+ --input source.md \
104
+ --title "Annual Report" \
105
+ --type "report" \
106
+ --author "Research Team" \
107
+ --out output.pdf
108
+ ```
109
+
110
+ Supported input: `.md` `.txt` `.pdf` `.json`
111
+
112
+ ---
113
+
114
+ ## Architecture
115
+
116
+ ```
117
+ SKILL.md ← Skill entry point, route table
118
+ design/design.md ← Aesthetic system (read before CREATE/REFORMAT)
119
+ scripts/
120
+ make.sh ← Unified CLI
121
+ palette.py ← metadata → tokens.json [CREATE, REFORMAT]
122
+ cover.py ← tokens.json → cover.html [CREATE, REFORMAT]
123
+ render_cover.js ← cover.html → cover.pdf [CREATE, REFORMAT]
124
+ render_body.py ← tokens + content → body.pdf [CREATE, REFORMAT]
125
+ merge.py ← cover + body → final.pdf [CREATE, REFORMAT]
126
+ fill_inspect.py ← PDF → field list [FILL]
127
+ fill_write.py ← PDF + values → filled PDF [FILL]
128
+ reformat_parse.py ← doc → content.json [REFORMAT]
129
+ ```
130
+
131
+ Design tokens (`tokens.json`) flow from `palette.py` to every renderer — cover and body are always visually consistent.
132
+
133
+ ## Dependencies
134
+
135
+ | Tool | Used by | Install |
136
+ |---|---|---|
137
+ | Python 3.9+ | all `.py` scripts | system |
138
+ | `reportlab` | `render_body.py` | `pip install reportlab` |
139
+ | `pypdf` | fill, merge, reformat | `pip install pypdf` |
140
+ | Node.js 18+ | `render_cover.js` | system |
141
+ | `playwright` + Chromium | `render_cover.js` | `npm install -g playwright && npx playwright install chromium` |
142
+
143
+ ## License
144
+
145
+ MIT
146
+
147
+ ## Document types
148
+
149
+ | `--type` | Mood | Cover pattern | Cover fonts |
150
+ |---|---|---|---|
151
+ | `report` | Authoritative | `fullbleed` | Playfair Display / IBM Plex Sans |
152
+ | `proposal` | Confident | `split` | Syne / Nunito Sans |
153
+ | `resume` | Clean | `typographic` | DM Serif Display / DM Sans |
154
+ | `portfolio` | Expressive | `atmospheric` | Fraunces / Inter |
155
+ | `academic` | Scholarly | `typographic` | EB Garamond / Source Sans 3 |
156
+ | `general` | Neutral | `fullbleed` | Outfit |
157
+ | `minimal` | Restrained | `minimal` | Cormorant Garamond / Jost |
158
+ | `stripe` | Bold | `stripe` | Barlow Condensed / Barlow |
159
+ | `diagonal` | Dynamic | `diagonal` | Montserrat |
160
+ | `frame` | Classical | `frame` | Cormorant / Crimson Pro |
161
+ | `editorial` | Editorial | `editorial` | Bebas Neue / Libre Franklin |
162
+
163
+ Cover fonts load via Google Fonts `@import` at render time — no local caching.
164
+ Body pages always use system fonts (Times / Helvetica) via ReportLab.
165
+
166
+ ## content.json schema
167
+
168
+ ```json
169
+ [
170
+ {"type": "h1", "text": "Section Title"},
171
+ {"type": "h2", "text": "Subsection"},
172
+ {"type": "h3", "text": "Sub-subsection"},
173
+ {"type": "body", "text": "Paragraph text. Supports <b>bold</b> and <i>italic</i>."},
174
+ {"type": "bullet", "text": "Unordered list item"},
175
+ {"type": "numbered","text": "Ordered list item — auto-numbered, counter resets between lists"},
176
+ {"type": "callout", "text": "Highlighted insight or key finding"},
177
+ {"type": "table",
178
+ "headers": ["Column A", "Column B", "Column C"],
179
+ "rows": [["row1a", "row1b", "row1c"], ["row2a", "row2b", "row2c"]]
180
+ },
181
+ {"type": "image", "path": "chart.png", "caption": "Figure 1: Sales by quarter"},
182
+ {"type": "code", "text": "SELECT * FROM users\nWHERE active = 1;"},
183
+ {"type": "math", "text": "\\sigma = \\sqrt{\\frac{1}{N}\\sum_{i=1}^N (x_i - \\mu)^2}", "label": "(2)"},
184
+ {"type": "divider"},
185
+ {"type": "caption", "text": "Table 2: standalone label"},
186
+ {"type": "pagebreak"},
187
+ {"type": "spacer", "pt": 16}
188
+ ]
189
+ ```
190
+
191
+ ## Architecture
192
+
193
+ ```
194
+ SKILL.md ← Skill entry point, routing only
195
+ design/design.md ← Aesthetic system (read before any script)
196
+ scripts/
197
+ make.sh ← Unified CLI: check / fix / run / demo
198
+ palette.py ← content metadata → tokens.json
199
+ cover.py ← tokens.json → cover.html
200
+ render_cover.js ← cover.html → cover.pdf (Playwright)
201
+ render_body.py ← tokens.json + content.json → body.pdf (ReportLab)
202
+ merge.py ← cover.pdf + body.pdf → final.pdf + QA report
203
+ ```
204
+
205
+ Design tokens (color, typography, spacing) are written once by `palette.py` and consumed by every downstream script. This guarantees visual consistency between cover and body without any manual coordination.
206
+
207
+ ## Dependencies
208
+
209
+ | Tool | Purpose | Install |
210
+ |---|---|---|
211
+ | Python 3.9+ | palette, cover, render_body, merge | system |
212
+ | `reportlab` | Body page rendering | `pip install reportlab` |
213
+ | `pypdf` | Merging PDFs | `pip install pypdf` |
214
+ | Node.js 18+ | Cover rendering | system |
215
+ | `playwright` | Headless Chromium for cover | `npm install -g playwright && npx playwright install chromium` |
216
+
217
+ Run `bash scripts/make.sh check` to verify everything at once.
218
+ Run `bash scripts/make.sh fix` to auto-install what is missing.
219
+
220
+ ## License
221
+
222
+ MIT