@kindgi/cli 0.0.0-bootstrap.0 → 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 (496) hide show
  1. package/LICENSE +201 -0
  2. package/README.md +690 -1
  3. package/dist/build/apt.d.ts +16 -0
  4. package/dist/build/apt.d.ts.map +1 -0
  5. package/dist/build/apt.js +50 -0
  6. package/dist/build/apt.js.map +1 -0
  7. package/dist/build/bundle.d.ts +45 -0
  8. package/dist/build/bundle.d.ts.map +1 -0
  9. package/dist/build/bundle.js +121 -0
  10. package/dist/build/bundle.js.map +1 -0
  11. package/dist/build/containerfile.d.ts +27 -0
  12. package/dist/build/containerfile.d.ts.map +1 -0
  13. package/dist/build/containerfile.js +196 -0
  14. package/dist/build/containerfile.js.map +1 -0
  15. package/dist/build/context-files.d.ts +24 -0
  16. package/dist/build/context-files.d.ts.map +1 -0
  17. package/dist/build/context-files.js +99 -0
  18. package/dist/build/context-files.js.map +1 -0
  19. package/dist/build/defaults.d.ts +66 -0
  20. package/dist/build/defaults.d.ts.map +1 -0
  21. package/dist/build/defaults.js +586 -0
  22. package/dist/build/defaults.js.map +1 -0
  23. package/dist/build/envelope.d.ts +72 -0
  24. package/dist/build/envelope.d.ts.map +1 -0
  25. package/dist/build/envelope.js +76 -0
  26. package/dist/build/envelope.js.map +1 -0
  27. package/dist/build/host-install.d.ts +48 -0
  28. package/dist/build/host-install.d.ts.map +1 -0
  29. package/dist/build/host-install.js +375 -0
  30. package/dist/build/host-install.js.map +1 -0
  31. package/dist/build/image-config.d.ts +32 -0
  32. package/dist/build/image-config.d.ts.map +1 -0
  33. package/dist/build/image-config.js +129 -0
  34. package/dist/build/image-config.js.map +1 -0
  35. package/dist/build/integrity.d.ts +51 -0
  36. package/dist/build/integrity.d.ts.map +1 -0
  37. package/dist/build/integrity.js +75 -0
  38. package/dist/build/integrity.js.map +1 -0
  39. package/dist/build/node-image.d.ts +18 -0
  40. package/dist/build/node-image.d.ts.map +1 -0
  41. package/dist/build/node-image.js +46 -0
  42. package/dist/build/node-image.js.map +1 -0
  43. package/dist/build/pack-root.d.ts +69 -0
  44. package/dist/build/pack-root.d.ts.map +1 -0
  45. package/dist/build/pack-root.js +102 -0
  46. package/dist/build/pack-root.js.map +1 -0
  47. package/dist/build/poetry-requirements.d.ts +5 -0
  48. package/dist/build/poetry-requirements.d.ts.map +1 -0
  49. package/dist/build/poetry-requirements.js +8 -0
  50. package/dist/build/poetry-requirements.js.map +1 -0
  51. package/dist/build/python-image.d.ts +40 -0
  52. package/dist/build/python-image.d.ts.map +1 -0
  53. package/dist/build/python-image.js +197 -0
  54. package/dist/build/python-image.js.map +1 -0
  55. package/dist/build/runners.d.ts +259 -0
  56. package/dist/build/runners.d.ts.map +1 -0
  57. package/dist/build/runners.js +4 -0
  58. package/dist/build/runners.js.map +1 -0
  59. package/dist/build/version-specifier.d.ts +2 -0
  60. package/dist/build/version-specifier.d.ts.map +1 -0
  61. package/dist/build/version-specifier.js +70 -0
  62. package/dist/build/version-specifier.js.map +1 -0
  63. package/dist/cli-package.d.ts +15 -0
  64. package/dist/cli-package.d.ts.map +1 -0
  65. package/dist/cli-package.js +37 -0
  66. package/dist/cli-package.js.map +1 -0
  67. package/dist/cli.d.ts +3 -0
  68. package/dist/cli.d.ts.map +1 -0
  69. package/dist/cli.js +26 -0
  70. package/dist/cli.js.map +1 -0
  71. package/dist/commands/adapters.d.ts +3 -0
  72. package/dist/commands/adapters.d.ts.map +1 -0
  73. package/dist/commands/adapters.js +148 -0
  74. package/dist/commands/adapters.js.map +1 -0
  75. package/dist/commands/agents.d.ts +3 -0
  76. package/dist/commands/agents.d.ts.map +1 -0
  77. package/dist/commands/agents.js +82 -0
  78. package/dist/commands/agents.js.map +1 -0
  79. package/dist/commands/approvals.d.ts +3 -0
  80. package/dist/commands/approvals.d.ts.map +1 -0
  81. package/dist/commands/approvals.js +92 -0
  82. package/dist/commands/approvals.js.map +1 -0
  83. package/dist/commands/artifacts.d.ts +3 -0
  84. package/dist/commands/artifacts.d.ts.map +1 -0
  85. package/dist/commands/artifacts.js +87 -0
  86. package/dist/commands/artifacts.js.map +1 -0
  87. package/dist/commands/auth.d.ts +3 -0
  88. package/dist/commands/auth.d.ts.map +1 -0
  89. package/dist/commands/auth.js +88 -0
  90. package/dist/commands/auth.js.map +1 -0
  91. package/dist/commands/build.d.ts +39 -0
  92. package/dist/commands/build.d.ts.map +1 -0
  93. package/dist/commands/build.js +872 -0
  94. package/dist/commands/build.js.map +1 -0
  95. package/dist/commands/capabilities.d.ts +3 -0
  96. package/dist/commands/capabilities.d.ts.map +1 -0
  97. package/dist/commands/capabilities.js +38 -0
  98. package/dist/commands/capabilities.js.map +1 -0
  99. package/dist/commands/conversations.d.ts +3 -0
  100. package/dist/commands/conversations.d.ts.map +1 -0
  101. package/dist/commands/conversations.js +75 -0
  102. package/dist/commands/conversations.js.map +1 -0
  103. package/dist/commands/deploy.d.ts +7 -0
  104. package/dist/commands/deploy.d.ts.map +1 -0
  105. package/dist/commands/deploy.js +697 -0
  106. package/dist/commands/deploy.js.map +1 -0
  107. package/dist/commands/dev.d.ts +44 -0
  108. package/dist/commands/dev.d.ts.map +1 -0
  109. package/dist/commands/dev.js +1032 -0
  110. package/dist/commands/dev.js.map +1 -0
  111. package/dist/commands/env.d.ts +27 -0
  112. package/dist/commands/env.d.ts.map +1 -0
  113. package/dist/commands/env.js +816 -0
  114. package/dist/commands/env.js.map +1 -0
  115. package/dist/commands/feedback.d.ts +33 -0
  116. package/dist/commands/feedback.d.ts.map +1 -0
  117. package/dist/commands/feedback.js +374 -0
  118. package/dist/commands/feedback.js.map +1 -0
  119. package/dist/commands/flows.d.ts +3 -0
  120. package/dist/commands/flows.d.ts.map +1 -0
  121. package/dist/commands/flows.js +60 -0
  122. package/dist/commands/flows.js.map +1 -0
  123. package/dist/commands/guardrails.d.ts +3 -0
  124. package/dist/commands/guardrails.d.ts.map +1 -0
  125. package/dist/commands/guardrails.js +89 -0
  126. package/dist/commands/guardrails.js.map +1 -0
  127. package/dist/commands/health.d.ts +8 -0
  128. package/dist/commands/health.d.ts.map +1 -0
  129. package/dist/commands/health.js +40 -0
  130. package/dist/commands/health.js.map +1 -0
  131. package/dist/commands/helpers.d.ts +37 -0
  132. package/dist/commands/helpers.d.ts.map +1 -0
  133. package/dist/commands/helpers.js +93 -0
  134. package/dist/commands/helpers.js.map +1 -0
  135. package/dist/commands/index.d.ts +7 -0
  136. package/dist/commands/index.d.ts.map +1 -0
  137. package/dist/commands/index.js +90 -0
  138. package/dist/commands/index.js.map +1 -0
  139. package/dist/commands/init.d.ts +46 -0
  140. package/dist/commands/init.d.ts.map +1 -0
  141. package/dist/commands/init.js +455 -0
  142. package/dist/commands/init.js.map +1 -0
  143. package/dist/commands/key.d.ts +3 -0
  144. package/dist/commands/key.d.ts.map +1 -0
  145. package/dist/commands/key.js +322 -0
  146. package/dist/commands/key.js.map +1 -0
  147. package/dist/commands/mcp.d.ts +43 -0
  148. package/dist/commands/mcp.d.ts.map +1 -0
  149. package/dist/commands/mcp.js +433 -0
  150. package/dist/commands/mcp.js.map +1 -0
  151. package/dist/commands/memory.d.ts +3 -0
  152. package/dist/commands/memory.d.ts.map +1 -0
  153. package/dist/commands/memory.js +82 -0
  154. package/dist/commands/memory.js.map +1 -0
  155. package/dist/commands/observations.d.ts +3 -0
  156. package/dist/commands/observations.d.ts.map +1 -0
  157. package/dist/commands/observations.js +27 -0
  158. package/dist/commands/observations.js.map +1 -0
  159. package/dist/commands/proposals.d.ts +3 -0
  160. package/dist/commands/proposals.d.ts.map +1 -0
  161. package/dist/commands/proposals.js +116 -0
  162. package/dist/commands/proposals.js.map +1 -0
  163. package/dist/commands/provenance.d.ts +3 -0
  164. package/dist/commands/provenance.d.ts.map +1 -0
  165. package/dist/commands/provenance.js +53 -0
  166. package/dist/commands/provenance.js.map +1 -0
  167. package/dist/commands/providers.d.ts +3 -0
  168. package/dist/commands/providers.d.ts.map +1 -0
  169. package/dist/commands/providers.js +202 -0
  170. package/dist/commands/providers.js.map +1 -0
  171. package/dist/commands/reviewers.d.ts +3 -0
  172. package/dist/commands/reviewers.d.ts.map +1 -0
  173. package/dist/commands/reviewers.js +78 -0
  174. package/dist/commands/reviewers.js.map +1 -0
  175. package/dist/commands/runs.d.ts +3 -0
  176. package/dist/commands/runs.d.ts.map +1 -0
  177. package/dist/commands/runs.js +221 -0
  178. package/dist/commands/runs.js.map +1 -0
  179. package/dist/commands/secrets.d.ts +21 -0
  180. package/dist/commands/secrets.d.ts.map +1 -0
  181. package/dist/commands/secrets.js +750 -0
  182. package/dist/commands/secrets.js.map +1 -0
  183. package/dist/commands/skills.d.ts +64 -0
  184. package/dist/commands/skills.d.ts.map +1 -0
  185. package/dist/commands/skills.js +430 -0
  186. package/dist/commands/skills.js.map +1 -0
  187. package/dist/commands/test.d.ts +5 -0
  188. package/dist/commands/test.d.ts.map +1 -0
  189. package/dist/commands/test.js +181 -0
  190. package/dist/commands/test.js.map +1 -0
  191. package/dist/commands/tokens.d.ts +3 -0
  192. package/dist/commands/tokens.d.ts.map +1 -0
  193. package/dist/commands/tokens.js +33 -0
  194. package/dist/commands/tokens.js.map +1 -0
  195. package/dist/commands/tools.d.ts +3 -0
  196. package/dist/commands/tools.d.ts.map +1 -0
  197. package/dist/commands/tools.js +153 -0
  198. package/dist/commands/tools.js.map +1 -0
  199. package/dist/commands/types.d.ts +54 -0
  200. package/dist/commands/types.d.ts.map +1 -0
  201. package/dist/commands/types.js +4 -0
  202. package/dist/commands/types.js.map +1 -0
  203. package/dist/commands/unwired.d.ts +17 -0
  204. package/dist/commands/unwired.d.ts.map +1 -0
  205. package/dist/commands/unwired.js +41 -0
  206. package/dist/commands/unwired.js.map +1 -0
  207. package/dist/commands/version.d.ts +8 -0
  208. package/dist/commands/version.d.ts.map +1 -0
  209. package/dist/commands/version.js +41 -0
  210. package/dist/commands/version.js.map +1 -0
  211. package/dist/config.d.ts +42 -0
  212. package/dist/config.d.ts.map +1 -0
  213. package/dist/config.js +83 -0
  214. package/dist/config.js.map +1 -0
  215. package/dist/context.d.ts +153 -0
  216. package/dist/context.d.ts.map +1 -0
  217. package/dist/context.js +44 -0
  218. package/dist/context.js.map +1 -0
  219. package/dist/deploy/defaults.d.ts +14 -0
  220. package/dist/deploy/defaults.d.ts.map +1 -0
  221. package/dist/deploy/defaults.js +37 -0
  222. package/dist/deploy/defaults.js.map +1 -0
  223. package/dist/deploy/envelope-loader.d.ts +24 -0
  224. package/dist/deploy/envelope-loader.d.ts.map +1 -0
  225. package/dist/deploy/envelope-loader.js +141 -0
  226. package/dist/deploy/envelope-loader.js.map +1 -0
  227. package/dist/deploy/post.d.ts +48 -0
  228. package/dist/deploy/post.d.ts.map +1 -0
  229. package/dist/deploy/post.js +210 -0
  230. package/dist/deploy/post.js.map +1 -0
  231. package/dist/deploy/response.d.ts +42 -0
  232. package/dist/deploy/response.d.ts.map +1 -0
  233. package/dist/deploy/response.js +128 -0
  234. package/dist/deploy/response.js.map +1 -0
  235. package/dist/deploy/runners.d.ts +218 -0
  236. package/dist/deploy/runners.d.ts.map +1 -0
  237. package/dist/deploy/runners.js +4 -0
  238. package/dist/deploy/runners.js.map +1 -0
  239. package/dist/dev/bundler.d.ts +8 -0
  240. package/dist/dev/bundler.d.ts.map +1 -0
  241. package/dist/dev/bundler.js +154 -0
  242. package/dist/dev/bundler.js.map +1 -0
  243. package/dist/dev/defaults.d.ts +138 -0
  244. package/dist/dev/defaults.d.ts.map +1 -0
  245. package/dist/dev/defaults.js +691 -0
  246. package/dist/dev/defaults.js.map +1 -0
  247. package/dist/dev/docker-compose.dev.yml +56 -0
  248. package/dist/dev/index-child.d.ts +2 -0
  249. package/dist/dev/index-child.d.ts.map +1 -0
  250. package/dist/dev/index-child.js +53 -0
  251. package/dist/dev/index-child.js.map +1 -0
  252. package/dist/dev/pack-code.d.ts +36 -0
  253. package/dist/dev/pack-code.d.ts.map +1 -0
  254. package/dist/dev/pack-code.js +129 -0
  255. package/dist/dev/pack-code.js.map +1 -0
  256. package/dist/dev/pack-env.d.ts +13 -0
  257. package/dist/dev/pack-env.d.ts.map +1 -0
  258. package/dist/dev/pack-env.js +36 -0
  259. package/dist/dev/pack-env.js.map +1 -0
  260. package/dist/dev/pack-service.d.ts +32 -0
  261. package/dist/dev/pack-service.d.ts.map +1 -0
  262. package/dist/dev/pack-service.js +188 -0
  263. package/dist/dev/pack-service.js.map +1 -0
  264. package/dist/dev/paths.d.ts +22 -0
  265. package/dist/dev/paths.d.ts.map +1 -0
  266. package/dist/dev/paths.js +35 -0
  267. package/dist/dev/paths.js.map +1 -0
  268. package/dist/dev/python-builder.d.ts +16 -0
  269. package/dist/dev/python-builder.d.ts.map +1 -0
  270. package/dist/dev/python-builder.js +122 -0
  271. package/dist/dev/python-builder.js.map +1 -0
  272. package/dist/dev/register.d.ts +71 -0
  273. package/dist/dev/register.d.ts.map +1 -0
  274. package/dist/dev/register.js +54 -0
  275. package/dist/dev/register.js.map +1 -0
  276. package/dist/dev/runners.d.ts +287 -0
  277. package/dist/dev/runners.d.ts.map +1 -0
  278. package/dist/dev/runners.js +4 -0
  279. package/dist/dev/runners.js.map +1 -0
  280. package/dist/dev/runtime-container.d.ts +62 -0
  281. package/dist/dev/runtime-container.d.ts.map +1 -0
  282. package/dist/dev/runtime-container.js +164 -0
  283. package/dist/dev/runtime-container.js.map +1 -0
  284. package/dist/dev/runtime-env.d.ts +62 -0
  285. package/dist/dev/runtime-env.d.ts.map +1 -0
  286. package/dist/dev/runtime-env.js +100 -0
  287. package/dist/dev/runtime-env.js.map +1 -0
  288. package/dist/dev/runtime-image.d.ts +13 -0
  289. package/dist/dev/runtime-image.d.ts.map +1 -0
  290. package/dist/dev/runtime-image.js +15 -0
  291. package/dist/dev/runtime-image.js.map +1 -0
  292. package/dist/env/defaults.d.ts +3 -0
  293. package/dist/env/defaults.d.ts.map +1 -0
  294. package/dist/env/defaults.js +22 -0
  295. package/dist/env/defaults.js.map +1 -0
  296. package/dist/env/pack-env-plan.d.ts +70 -0
  297. package/dist/env/pack-env-plan.d.ts.map +1 -0
  298. package/dist/env/pack-env-plan.js +236 -0
  299. package/dist/env/pack-env-plan.js.map +1 -0
  300. package/dist/env/parser.d.ts +9 -0
  301. package/dist/env/parser.d.ts.map +1 -0
  302. package/dist/env/parser.js +11 -0
  303. package/dist/env/parser.js.map +1 -0
  304. package/dist/env/project-env.d.ts +34 -0
  305. package/dist/env/project-env.d.ts.map +1 -0
  306. package/dist/env/project-env.js +45 -0
  307. package/dist/env/project-env.js.map +1 -0
  308. package/dist/env/runners.d.ts +22 -0
  309. package/dist/env/runners.d.ts.map +1 -0
  310. package/dist/env/runners.js +4 -0
  311. package/dist/env/runners.js.map +1 -0
  312. package/dist/env/writer.d.ts +7 -0
  313. package/dist/env/writer.d.ts.map +1 -0
  314. package/dist/env/writer.js +9 -0
  315. package/dist/env/writer.js.map +1 -0
  316. package/dist/errors.d.ts +31 -0
  317. package/dist/errors.d.ts.map +1 -0
  318. package/dist/errors.js +107 -0
  319. package/dist/errors.js.map +1 -0
  320. package/dist/help.d.ts +5 -0
  321. package/dist/help.d.ts.map +1 -0
  322. package/dist/help.js +61 -0
  323. package/dist/help.js.map +1 -0
  324. package/dist/index.d.ts +13 -0
  325. package/dist/index.d.ts.map +1 -0
  326. package/dist/index.js +13 -0
  327. package/dist/index.js.map +1 -0
  328. package/dist/init/augment-scaffolder.d.ts +74 -0
  329. package/dist/init/augment-scaffolder.d.ts.map +1 -0
  330. package/dist/init/augment-scaffolder.js +459 -0
  331. package/dist/init/augment-scaffolder.js.map +1 -0
  332. package/dist/init/dependency-specs.d.ts +58 -0
  333. package/dist/init/dependency-specs.d.ts.map +1 -0
  334. package/dist/init/dependency-specs.js +153 -0
  335. package/dist/init/dependency-specs.js.map +1 -0
  336. package/dist/init/gitignore-patcher.d.ts +23 -0
  337. package/dist/init/gitignore-patcher.d.ts.map +1 -0
  338. package/dist/init/gitignore-patcher.js +103 -0
  339. package/dist/init/gitignore-patcher.js.map +1 -0
  340. package/dist/init/mode-detect.d.ts +34 -0
  341. package/dist/init/mode-detect.d.ts.map +1 -0
  342. package/dist/init/mode-detect.js +115 -0
  343. package/dist/init/mode-detect.js.map +1 -0
  344. package/dist/init/package-json-patcher.d.ts +36 -0
  345. package/dist/init/package-json-patcher.d.ts.map +1 -0
  346. package/dist/init/package-json-patcher.js +128 -0
  347. package/dist/init/package-json-patcher.js.map +1 -0
  348. package/dist/init/pyproject-patcher.d.ts +56 -0
  349. package/dist/init/pyproject-patcher.d.ts.map +1 -0
  350. package/dist/init/pyproject-patcher.js +324 -0
  351. package/dist/init/pyproject-patcher.js.map +1 -0
  352. package/dist/init/python-augment.d.ts +22 -0
  353. package/dist/init/python-augment.d.ts.map +1 -0
  354. package/dist/init/python-augment.js +300 -0
  355. package/dist/init/python-augment.js.map +1 -0
  356. package/dist/init/template-files.d.ts +16 -0
  357. package/dist/init/template-files.d.ts.map +1 -0
  358. package/dist/init/template-files.js +38 -0
  359. package/dist/init/template-files.js.map +1 -0
  360. package/dist/key/defaults.d.ts +3 -0
  361. package/dist/key/defaults.d.ts.map +1 -0
  362. package/dist/key/defaults.js +60 -0
  363. package/dist/key/defaults.js.map +1 -0
  364. package/dist/key/fingerprint.d.ts +6 -0
  365. package/dist/key/fingerprint.d.ts.map +1 -0
  366. package/dist/key/fingerprint.js +25 -0
  367. package/dist/key/fingerprint.js.map +1 -0
  368. package/dist/key/paths.d.ts +30 -0
  369. package/dist/key/paths.d.ts.map +1 -0
  370. package/dist/key/paths.js +51 -0
  371. package/dist/key/paths.js.map +1 -0
  372. package/dist/key/runners.d.ts +60 -0
  373. package/dist/key/runners.d.ts.map +1 -0
  374. package/dist/key/runners.js +4 -0
  375. package/dist/key/runners.js.map +1 -0
  376. package/dist/main.d.ts +106 -0
  377. package/dist/main.d.ts.map +1 -0
  378. package/dist/main.js +198 -0
  379. package/dist/main.js.map +1 -0
  380. package/dist/mcp/launcher.d.ts +143 -0
  381. package/dist/mcp/launcher.d.ts.map +1 -0
  382. package/dist/mcp/launcher.js +393 -0
  383. package/dist/mcp/launcher.js.map +1 -0
  384. package/dist/mcp/preset-loader.d.ts +29 -0
  385. package/dist/mcp/preset-loader.d.ts.map +1 -0
  386. package/dist/mcp/preset-loader.js +217 -0
  387. package/dist/mcp/preset-loader.js.map +1 -0
  388. package/dist/mcp/preset-types.d.ts +71 -0
  389. package/dist/mcp/preset-types.d.ts.map +1 -0
  390. package/dist/mcp/preset-types.js +4 -0
  391. package/dist/mcp/preset-types.js.map +1 -0
  392. package/dist/mcp/presets/README.md +68 -0
  393. package/dist/mcp/presets/postgres.json +15 -0
  394. package/dist/output.d.ts +26 -0
  395. package/dist/output.d.ts.map +1 -0
  396. package/dist/output.js +46 -0
  397. package/dist/output.js.map +1 -0
  398. package/dist/pack-config.d.ts +37 -0
  399. package/dist/pack-config.d.ts.map +1 -0
  400. package/dist/pack-config.js +65 -0
  401. package/dist/pack-config.js.map +1 -0
  402. package/dist/package-manager.d.ts +33 -0
  403. package/dist/package-manager.d.ts.map +1 -0
  404. package/dist/package-manager.js +129 -0
  405. package/dist/package-manager.js.map +1 -0
  406. package/dist/parse.d.ts +82 -0
  407. package/dist/parse.d.ts.map +1 -0
  408. package/dist/parse.js +99 -0
  409. package/dist/parse.js.map +1 -0
  410. package/dist/providers/preset-loader.d.ts +47 -0
  411. package/dist/providers/preset-loader.d.ts.map +1 -0
  412. package/dist/providers/preset-loader.js +107 -0
  413. package/dist/providers/preset-loader.js.map +1 -0
  414. package/dist/providers/presets/anthropic.json +47 -0
  415. package/dist/providers/presets/gemini.json +40 -0
  416. package/dist/reference.d.ts +28 -0
  417. package/dist/reference.d.ts.map +1 -0
  418. package/dist/reference.js +52 -0
  419. package/dist/reference.js.map +1 -0
  420. package/dist/sdk-package.d.ts +9 -0
  421. package/dist/sdk-package.d.ts.map +1 -0
  422. package/dist/sdk-package.js +20 -0
  423. package/dist/sdk-package.js.map +1 -0
  424. package/dist/sdk-skills/kindgi-authoring-agents/SKILL.md +253 -0
  425. package/dist/sdk-skills/kindgi-authoring-flows/SKILL.md +299 -0
  426. package/dist/sdk-skills/kindgi-authoring-guardrails/SKILL.md +291 -0
  427. package/dist/sdk-skills/kindgi-authoring-mcp-servers/SKILL.md +289 -0
  428. package/dist/sdk-skills/kindgi-authoring-providers/SKILL.md +704 -0
  429. package/dist/sdk-skills/kindgi-authoring-tools/SKILL.md +288 -0
  430. package/dist/sdk-skills/kindgi-framework-feedback/SKILL.md +211 -0
  431. package/dist/sdk-skills/kindgi-getting-started/SKILL.md +181 -0
  432. package/dist/sdk-skills/kindgi-python-authoring-agents/SKILL.md +205 -0
  433. package/dist/sdk-skills/kindgi-python-authoring-flows/SKILL.md +322 -0
  434. package/dist/sdk-skills/kindgi-python-authoring-guardrails/SKILL.md +173 -0
  435. package/dist/sdk-skills/kindgi-python-authoring-tools/SKILL.md +299 -0
  436. package/dist/sdk-skills/kindgi-python-getting-started/SKILL.md +240 -0
  437. package/dist/stop-signal.d.ts +15 -0
  438. package/dist/stop-signal.d.ts.map +1 -0
  439. package/dist/stop-signal.js +16 -0
  440. package/dist/stop-signal.js.map +1 -0
  441. package/dist/templates/minimal/.gitignore +8 -0
  442. package/dist/templates/minimal/.nvmrc +1 -0
  443. package/dist/templates/minimal/AGENTS.md +23 -0
  444. package/dist/templates/minimal/README.md.tmpl +69 -0
  445. package/dist/templates/minimal/agents/.gitkeep +0 -0
  446. package/dist/templates/minimal/flows/.gitkeep +0 -0
  447. package/dist/templates/minimal/guardrails/.gitkeep +0 -0
  448. package/dist/templates/minimal/kindgi.config.ts.tmpl +44 -0
  449. package/dist/templates/minimal/package.json.tmpl +25 -0
  450. package/dist/templates/minimal/pnpm-workspace.yaml +6 -0
  451. package/dist/templates/minimal/tools/.gitkeep +0 -0
  452. package/dist/templates/minimal/tsconfig.json.tmpl +27 -0
  453. package/dist/templates/minimal/vitest.config.ts.tmpl +14 -0
  454. package/dist/templates/python/.gitignore +9 -0
  455. package/dist/templates/python/AGENTS.md +30 -0
  456. package/dist/templates/python/README.md.tmpl +56 -0
  457. package/dist/templates/python/agents/echo_agent.py.tmpl +23 -0
  458. package/dist/templates/python/flows/echo_flow.py.tmpl +17 -0
  459. package/dist/templates/python/guardrails/response_not_empty.py.tmpl +27 -0
  460. package/dist/templates/python/pyproject.toml.tmpl +42 -0
  461. package/dist/templates/python/tests/test_tools.py.tmpl +22 -0
  462. package/dist/templates/python/tools/echo.py.tmpl +27 -0
  463. package/dist/templates/python/tools/greet.py.tmpl +20 -0
  464. package/dist/templates/sample/.gitignore +8 -0
  465. package/dist/templates/sample/.nvmrc +1 -0
  466. package/dist/templates/sample/AGENTS.md +23 -0
  467. package/dist/templates/sample/README.md.tmpl +85 -0
  468. package/dist/templates/sample/agents/echo-agent/index.ts.tmpl +34 -0
  469. package/dist/templates/sample/flows/echo-flow/index.ts.tmpl +59 -0
  470. package/dist/templates/sample/guardrails/response-not-empty/index.ts.tmpl +50 -0
  471. package/dist/templates/sample/kindgi.config.ts.tmpl +41 -0
  472. package/dist/templates/sample/package.json.tmpl +25 -0
  473. package/dist/templates/sample/pnpm-workspace.yaml +6 -0
  474. package/dist/templates/sample/tools/echo/index.test.ts.tmpl +31 -0
  475. package/dist/templates/sample/tools/echo/index.ts.tmpl +37 -0
  476. package/dist/templates/sample/tools/fetch-httpbin/index.ts.tmpl +60 -0
  477. package/dist/templates/sample/tools/greet/index.ts.tmpl +35 -0
  478. package/dist/templates/sample/tsconfig.json.tmpl +27 -0
  479. package/dist/templates/sample/vitest.config.ts.tmpl +14 -0
  480. package/dist/test/defaults.d.ts +3 -0
  481. package/dist/test/defaults.d.ts.map +1 -0
  482. package/dist/test/defaults.js +104 -0
  483. package/dist/test/defaults.js.map +1 -0
  484. package/dist/test/runners.d.ts +60 -0
  485. package/dist/test/runners.d.ts.map +1 -0
  486. package/dist/test/runners.js +4 -0
  487. package/dist/test/runners.js.map +1 -0
  488. package/dist/version-info.d.ts +9 -0
  489. package/dist/version-info.d.ts.map +1 -0
  490. package/dist/version-info.js +27 -0
  491. package/dist/version-info.js.map +1 -0
  492. package/dist/write-fully.d.ts +13 -0
  493. package/dist/write-fully.d.ts.map +1 -0
  494. package/dist/write-fully.js +17 -0
  495. package/dist/write-fully.js.map +1 -0
  496. package/package.json +63 -4
@@ -0,0 +1,300 @@
1
+ // SPDX-License-Identifier: Apache-2.0
2
+ // Copyright (C) 2026 Kindgi Inc.
3
+ /**
4
+ * `kindgi init` in an existing Python app — the Python counterpart of the
5
+ * augment scaffolder. Called from `runInit` when `detectInitMode` returns
6
+ * augment mode for a `pyproject.toml`.
7
+ *
8
+ * What it writes:
9
+ * - `pyproject.toml`, edited in place (`pyproject-patcher.ts`, each edit
10
+ * verified by re-parsing):
11
+ * - the `[tool.kindgi]` tables, appended — the pack id from
12
+ * `[project].name` (PEP 503-normalized), discovery under `kindgi/`,
13
+ * and for a Poetry app `dev.python = ["poetry", "run", "python"]`;
14
+ * - `kindgi` in `[project].dependencies`, and — for a uv app, while
15
+ * the SDK is unpublished — a `[tool.uv.sources]` entry for the
16
+ * Kindgi checkout's `sdks/python` (a uv app also gets Kindgi's
17
+ * `[tool.uv] required-version` unless it sets its own). An app whose dependencies can't be
18
+ * edited that way (Poetry 1, dynamic dependencies) gets the command
19
+ * to run instead.
20
+ * - `kindgi/{tools,guardrails,agents,flows}/.gitkeep`
21
+ * - `.claude/skills/` — the skills written for Python packs
22
+ * - `.gitignore` — Kindgi's local-state patterns
23
+ *
24
+ * The app's own code, env files, lockfile and virtualenv are left alone:
25
+ * the next steps say to `uv sync` (or the app's equivalent).
26
+ */
27
+ import { mkdir, readFile, stat, writeFile } from 'node:fs/promises';
28
+ import { dirname, join } from 'node:path';
29
+ import { IMAGE_UV_VERSION, PACK_UV_REQUIRED_VERSION } from '../build/python-image.js';
30
+ import { satisfiesSpecifiers } from '../build/version-specifier.js';
31
+ import { PACK_ID_REGEX } from '../commands/init.js';
32
+ import { syncSkills } from '../commands/skills.js';
33
+ import { renderJson } from '../output.js';
34
+ import { binDisplay } from '../package-manager.js';
35
+ import { kindgiRequirementFor, resolveKindgiPythonSource, } from './dependency-specs.js';
36
+ import { patchGitignore } from './gitignore-patcher.js';
37
+ import { addProjectDependency, addTableKey, addUvSource, appendTables, normalizeName, readPyproject, } from './pyproject-patcher.js';
38
+ const SUBDIRS = ['agents', 'tools', 'guardrails', 'flows'];
39
+ const DEFAULT_VERSION = '0.1.0';
40
+ export async function runInitPythonAugment(inputs) {
41
+ const fail = (message) => ({
42
+ kind: 'error',
43
+ stderr: `${message}\n`,
44
+ exitCode: 1,
45
+ });
46
+ const exists = inputs.fileExists ?? fileExists;
47
+ const pyprojectPath = join(inputs.targetDir, 'pyproject.toml');
48
+ const original = await readFile(pyprojectPath, 'utf8');
49
+ const read = readPyproject(original);
50
+ if (read.kind === 'err')
51
+ return fail(`${pyprojectPath}: ${read.message}`);
52
+ const info = read.info;
53
+ if (info.isPack) {
54
+ return fail(`${pyprojectPath} already has a [tool.kindgi] table — this app is a Kindgi pack. Run \`${binDisplay('path', 'kindgi', ['dev'])}\` here.`);
55
+ }
56
+ const packId = resolvePackId(info, inputs.packIdOverride);
57
+ if (packId.kind === 'err')
58
+ return fail(packId.message);
59
+ const version = info.version ?? DEFAULT_VERSION;
60
+ const installer = await detectInstaller(inputs.targetDir, info, exists);
61
+ const source = inputs.pythonSource ?? (await resolveKindgiPythonSource());
62
+ if (source.kind === 'error')
63
+ return fail(source.message);
64
+ // Every pyproject edit is made and verified before anything is written.
65
+ const edited = editPyproject(original, { info, packId: packId.id, version, installer, source });
66
+ if (edited.kind === 'err')
67
+ return fail(`${pyprojectPath}: ${edited.message}`);
68
+ const created = [];
69
+ const skipped = [];
70
+ await writeFile(pyprojectPath, edited.text, 'utf8');
71
+ created.push(`${pyprojectPath} (${edited.changes.join('; ')})`);
72
+ for (const sub of SUBDIRS) {
73
+ const keep = join(inputs.targetDir, 'kindgi', sub, '.gitkeep');
74
+ if (await exists(keep)) {
75
+ skipped.push(keep);
76
+ }
77
+ else {
78
+ await mkdir(dirname(keep), { recursive: true });
79
+ await writeFile(keep, '', 'utf8');
80
+ created.push(keep);
81
+ }
82
+ }
83
+ if (inputs.skillsRoot !== undefined) {
84
+ const report = await syncSkills({
85
+ skillsRoot: inputs.skillsRoot,
86
+ targetDir: inputs.targetDir,
87
+ language: 'python',
88
+ force: inputs.force,
89
+ dryRun: false,
90
+ });
91
+ for (const o of report.outcomes) {
92
+ const target = join(inputs.targetDir, '.claude', 'skills', o.name, 'SKILL.md');
93
+ if (o.status === 'added' || o.status === 'updated')
94
+ created.push(target);
95
+ else if (o.status !== 'local-only')
96
+ skipped.push(target);
97
+ }
98
+ }
99
+ const gitignorePath = join(inputs.targetDir, '.gitignore');
100
+ const gitignore = await patchGitignore(gitignorePath);
101
+ if (gitignore.kind === 'error') {
102
+ return fail(`Failed to patch ${gitignorePath}: ${gitignore.message ?? 'unknown error'}`);
103
+ }
104
+ if (gitignore.kind === 'patched') {
105
+ created.push(`${gitignorePath} (patched: +${gitignore.appended.join(', +')})`);
106
+ }
107
+ const nextSteps = [
108
+ ...pythonAugmentNextSteps(installer, edited.dependencyAdded, source),
109
+ ...uvVersionNote(info.uvRequiredVersion),
110
+ ];
111
+ const summary = {
112
+ kind: 'augment',
113
+ language: 'python',
114
+ targetDir: inputs.targetDir,
115
+ packId: packId.id,
116
+ packVersion: version,
117
+ installer,
118
+ kindgi: source,
119
+ created,
120
+ skipped,
121
+ nextSteps,
122
+ };
123
+ return {
124
+ kind: 'ok',
125
+ rendered: {
126
+ stdout: renderJson(summary, 'json').stdout,
127
+ stderr: [
128
+ '',
129
+ ` Kindgi added to ${inputs.targetDir} (a Python pack in the app).`,
130
+ ` Pack id: ${packId.id} Version: ${version}`,
131
+ ` Wrote ${created.length} file${created.length === 1 ? '' : 's'}; skipped ${skipped.length}.`,
132
+ '',
133
+ ' Next steps:',
134
+ ...nextSteps.map((step) => ` ${step}`),
135
+ '',
136
+ '',
137
+ ].join('\n'),
138
+ },
139
+ };
140
+ }
141
+ function resolvePackId(info, override) {
142
+ if (override !== undefined && override !== '') {
143
+ return PACK_ID_REGEX.test(override)
144
+ ? { kind: 'ok', id: override }
145
+ : {
146
+ kind: 'err',
147
+ message: `Invalid --pack-id: ${override}. Must match ${PACK_ID_REGEX.source}.`,
148
+ };
149
+ }
150
+ if (info.name === undefined) {
151
+ return {
152
+ kind: 'err',
153
+ message: 'pyproject.toml has no [project].name (or [tool.poetry].name) to name the pack. Pass `--pack-id=<id>`.',
154
+ };
155
+ }
156
+ const candidate = normalizeName(info.name);
157
+ return PACK_ID_REGEX.test(candidate)
158
+ ? { kind: 'ok', id: candidate }
159
+ : {
160
+ kind: 'err',
161
+ message: `Cannot derive a pack id from the project name "${info.name}" (candidate "${candidate}"); pack ids match ${PACK_ID_REGEX.source}. Pass \`--pack-id=<id>\`.`,
162
+ };
163
+ }
164
+ /**
165
+ * The app's installer: uv when it says so (a `uv.lock`, `[tool.uv]`, the
166
+ * `uv_build` backend), Poetry likewise, pip for a `requirements.txt` app —
167
+ * otherwise uv, Kindgi's own toolchain.
168
+ */
169
+ async function detectInstaller(dir, info, exists) {
170
+ if (info.usesUv || (await exists(join(dir, 'uv.lock'))))
171
+ return 'uv';
172
+ if (info.usesPoetry || (await exists(join(dir, 'poetry.lock'))))
173
+ return 'poetry';
174
+ if (await exists(join(dir, 'requirements.txt')))
175
+ return 'pip';
176
+ return 'uv';
177
+ }
178
+ function editPyproject(original, inputs) {
179
+ let text = original;
180
+ const changes = [];
181
+ let dependencyAdded = inputs.info.hasKindgiDependency;
182
+ if (inputs.info.dependencyStyle === 'pep621' && !inputs.info.hasKindgiDependency) {
183
+ const requirement = kindgiRequirementFor(inputs.source);
184
+ const dep = addProjectDependency(text, requirement);
185
+ if (dep.kind === 'ok') {
186
+ text = dep.text;
187
+ dependencyAdded = true;
188
+ changes.push(`+${requirement} in [project].dependencies`);
189
+ }
190
+ }
191
+ // uv settings only for an app uv installs — Poetry and pip ignore
192
+ // `[tool.uv]`; their next steps install the SDK by path instead.
193
+ const usesUv = inputs.installer === 'uv';
194
+ // The uv versions the pack works with: the app's own when it sets them
195
+ // (`kindgi build` checks they include the image's uv), else Kindgi's.
196
+ if (usesUv && inputs.info.uvRequiredVersion === undefined) {
197
+ const uvVersion = addTableKey(text, 'tool.uv', 'required-version', JSON.stringify(PACK_UV_REQUIRED_VERSION));
198
+ if (uvVersion.kind === 'err') {
199
+ return {
200
+ kind: 'err',
201
+ message: `could not add [tool.uv] required-version: ${uvVersion.message}`,
202
+ };
203
+ }
204
+ text = uvVersion.text;
205
+ changes.push(`+[tool.uv] required-version = "${PACK_UV_REQUIRED_VERSION}"`);
206
+ }
207
+ if (usesUv && dependencyAdded && inputs.source.kind === 'local-checkout') {
208
+ const uv = addUvSource(text, 'kindgi', `{ path = ${JSON.stringify(inputs.source.path)}, editable = true }`);
209
+ if (uv.kind === 'err')
210
+ return { kind: 'err', message: `could not add [tool.uv.sources] kindgi: ${uv.message}` };
211
+ text = uv.text;
212
+ changes.push("+[tool.uv.sources] kindgi (the Kindgi checkout's Python SDK)");
213
+ }
214
+ const poetryDev = inputs.installer === 'poetry';
215
+ const tables = appendTables(text, kindgiTables(inputs.packId, inputs.version, poetryDev), {
216
+ tool: {
217
+ kindgi: {
218
+ pack: { id: inputs.packId, version: inputs.version },
219
+ discovery: Object.fromEntries(SUBDIRS.map((s) => [s, `kindgi/${s}/**/*.py`])),
220
+ ...(poetryDev && { dev: { python: ['poetry', 'run', 'python'] } }),
221
+ },
222
+ },
223
+ });
224
+ if (tables.kind === 'err')
225
+ return { kind: 'err', message: `could not add [tool.kindgi]: ${tables.message}` };
226
+ changes.push('+[tool.kindgi]');
227
+ return { kind: 'ok', text: tables.text, changes, dependencyAdded };
228
+ }
229
+ /** The appended `[tool.kindgi]` tables. */
230
+ export function kindgiTables(packId, version, poetry) {
231
+ const dev = poetry
232
+ ? [
233
+ '[tool.kindgi.dev]',
234
+ 'python = ["poetry", "run", "python"] # the interpreter that runs the pack',
235
+ ]
236
+ : [
237
+ '# [tool.kindgi.dev]',
238
+ '# python = ["uv", "run", "python"] # default: .venv/bin/python, else python3',
239
+ ];
240
+ return [
241
+ '# The Kindgi pack, added by `kindgi init`: its tools, guardrails, agents and',
242
+ "# flows live under kindgi/ (the app's own packages import by name there).",
243
+ '[tool.kindgi.pack]',
244
+ `id = ${JSON.stringify(packId)}`,
245
+ `version = ${JSON.stringify(version)}`,
246
+ '',
247
+ '[tool.kindgi.discovery]',
248
+ ...SUBDIRS.map((s) => `${s} = "kindgi/${s}/**/*.py"`),
249
+ '',
250
+ ...dev,
251
+ '',
252
+ ].join('\n');
253
+ }
254
+ /** What to run next, for the app's installer. */
255
+ export function pythonAugmentNextSteps(installer, dependencyAdded, source) {
256
+ const sdk = source.kind === 'local-checkout' ? source.path : undefined;
257
+ // Quoted: the range has `<` and `>`, which a shell would read as redirects.
258
+ const requirement = `"${kindgiRequirementFor(source)}"`;
259
+ const install = dependencyAdded
260
+ ? installer === 'uv'
261
+ ? 'Install: uv sync'
262
+ : installer === 'poetry'
263
+ ? `Install: ${sdk === undefined ? 'poetry install' : `poetry add --editable ${sdk}`}`
264
+ : `Install: ${sdk === undefined ? 'pip install -e .' : `pip install -e ${sdk} && pip install -e .`}`
265
+ : `Add the SDK to the app's dependencies: ${installer === 'uv'
266
+ ? sdk === undefined
267
+ ? `uv add ${requirement}`
268
+ : `uv add --editable ${sdk}`
269
+ : installer === 'poetry'
270
+ ? sdk === undefined
271
+ ? `poetry add ${requirement}`
272
+ : `poetry add --editable ${sdk}`
273
+ : sdk === undefined
274
+ ? `pip install ${requirement} (and list it with the app’s requirements)`
275
+ : `pip install -e ${sdk}`}`;
276
+ return [
277
+ install,
278
+ `Boot the dev server: ${binDisplay('path', 'kindgi', ['dev'])}`,
279
+ 'Write tools, guardrails and agents under kindgi/ — see .claude/skills/kindgi-python-getting-started/SKILL.md',
280
+ 'Secrets: kindgi dev reads your .env and .env.local; tools read them from os.environ',
281
+ `Model provider: agents answer with the dev-echo fallback until you register one — e.g. ${binDisplay('path', 'kindgi', ['providers', 'register', '--preset=anthropic'])} (ANTHROPIC_API_KEY in .env)`,
282
+ ];
283
+ }
284
+ /** A next step when the app's own uv range leaves out the uv that builds Kindgi images. */
285
+ function uvVersionNote(required) {
286
+ if (required === undefined || satisfiesSpecifiers(IMAGE_UV_VERSION, required) !== false)
287
+ return [];
288
+ return [
289
+ `uv: the app's required-version ("${required}") excludes uv ${IMAGE_UV_VERSION}, which builds Kindgi's images — \`kindgi build\` refuses until it includes it (e.g. "${PACK_UV_REQUIRED_VERSION}")`,
290
+ ];
291
+ }
292
+ async function fileExists(path) {
293
+ try {
294
+ return (await stat(path)).isFile();
295
+ }
296
+ catch {
297
+ return false;
298
+ }
299
+ }
300
+ //# sourceMappingURL=python-augment.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"python-augment.js","sourceRoot":"","sources":["../../src/init/python-augment.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,16 @@
1
+ /** What a template's placeholders become. */
2
+ export interface Substitutions {
3
+ readonly PACK_NAME: string;
4
+ readonly PACK_ID: string;
5
+ readonly PACK_VERSION: string;
6
+ /** The python template's `kindgi` dependency, quoted (`"kindgi>=0.1,<0.2"` from a published CLI). */
7
+ readonly KINDGI_REQUIREMENT?: string;
8
+ /** The python template's `[tool.uv.sources]` block for `kindgi` (from a checkout; empty when published). */
9
+ readonly KINDGI_PYTHON_SOURCE?: string;
10
+ /** The python template's `[tool.uv] required-version`. */
11
+ readonly UV_REQUIRED_VERSION?: string;
12
+ }
13
+ /** Every file under `root`, as paths relative to it. */
14
+ export declare function collectTemplateFiles(root: string): Promise<string[]>;
15
+ export declare function substitute(raw: string, subs: Substitutions): string;
16
+ //# sourceMappingURL=template-files.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"template-files.d.ts","sourceRoot":"","sources":["../../src/init/template-files.ts"],"names":[],"mappings":"AAYA,6CAA6C;AAC7C,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,qGAAqG;IACrG,QAAQ,CAAC,kBAAkB,CAAC,EAAE,MAAM,CAAC;IACrC,4GAA4G;IAC5G,QAAQ,CAAC,oBAAoB,CAAC,EAAE,MAAM,CAAC;IACvC,0DAA0D;IAC1D,QAAQ,CAAC,mBAAmB,CAAC,EAAE,MAAM,CAAC;CACvC;AAED,wDAAwD;AACxD,wBAAsB,oBAAoB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAgB1E;AAED,wBAAgB,UAAU,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,aAAa,GAAG,MAAM,CAQnE"}
@@ -0,0 +1,38 @@
1
+ // SPDX-License-Identifier: Apache-2.0
2
+ // Copyright (C) 2026 Kindgi Inc.
3
+ /**
4
+ * Template files, as `kindgi init` writes them. Files ending in `.tmpl`
5
+ * are rendered (suffix stripped, placeholders replaced); others are
6
+ * copied as they are.
7
+ */
8
+ import { readdir } from 'node:fs/promises';
9
+ import { join } from 'node:path';
10
+ /** Every file under `root`, as paths relative to it. */
11
+ export async function collectTemplateFiles(root) {
12
+ const out = [];
13
+ async function walk(dir, prefix) {
14
+ const entries = await readdir(dir, { withFileTypes: true });
15
+ for (const entry of entries) {
16
+ const rel = prefix === '' ? entry.name : `${prefix}/${entry.name}`;
17
+ const abs = join(dir, entry.name);
18
+ if (entry.isDirectory()) {
19
+ await walk(abs, rel);
20
+ }
21
+ else if (entry.isFile()) {
22
+ out.push(rel);
23
+ }
24
+ }
25
+ }
26
+ await walk(root, '');
27
+ return out;
28
+ }
29
+ export function substitute(raw, subs) {
30
+ return raw
31
+ .replaceAll('{{PACK_NAME}}', subs.PACK_NAME)
32
+ .replaceAll('{{PACK_ID}}', subs.PACK_ID)
33
+ .replaceAll('{{PACK_VERSION}}', subs.PACK_VERSION)
34
+ .replaceAll('{{KINDGI_REQUIREMENT}}', subs.KINDGI_REQUIREMENT ?? '"kindgi"')
35
+ .replaceAll('{{KINDGI_PYTHON_SOURCE}}', subs.KINDGI_PYTHON_SOURCE ?? '')
36
+ .replaceAll('{{UV_REQUIRED_VERSION}}', subs.UV_REQUIRED_VERSION ?? '');
37
+ }
38
+ //# sourceMappingURL=template-files.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"template-files.js","sourceRoot":"","sources":["../../src/init/template-files.ts"],"names":[],"mappings":"AAAA,sCAAsC;AACtC,iCAAiC;AAEjC;;;;GAIG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAC3C,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAejC,wDAAwD;AACxD,MAAM,CAAC,KAAK,UAAU,oBAAoB,CAAC,IAAY;IACrD,MAAM,GAAG,GAAa,EAAE,CAAC;IACzB,KAAK,UAAU,IAAI,CAAC,GAAW,EAAE,MAAc;QAC7C,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,GAAG,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC;QAC5D,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;YAC5B,MAAM,GAAG,GAAG,MAAM,KAAK,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,MAAM,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC;YACnE,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;YAClC,IAAI,KAAK,CAAC,WAAW,EAAE,EAAE,CAAC;gBACxB,MAAM,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;YACvB,CAAC;iBAAM,IAAI,KAAK,CAAC,MAAM,EAAE,EAAE,CAAC;gBAC1B,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YAChB,CAAC;QACH,CAAC;IACH,CAAC;IACD,MAAM,IAAI,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;IACrB,OAAO,GAAG,CAAC;AACb,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,GAAW,EAAE,IAAmB;IACzD,OAAO,GAAG;SACP,UAAU,CAAC,eAAe,EAAE,IAAI,CAAC,SAAS,CAAC;SAC3C,UAAU,CAAC,aAAa,EAAE,IAAI,CAAC,OAAO,CAAC;SACvC,UAAU,CAAC,kBAAkB,EAAE,IAAI,CAAC,YAAY,CAAC;SACjD,UAAU,CAAC,wBAAwB,EAAE,IAAI,CAAC,kBAAkB,IAAI,UAAU,CAAC;SAC3E,UAAU,CAAC,0BAA0B,EAAE,IAAI,CAAC,oBAAoB,IAAI,EAAE,CAAC;SACvE,UAAU,CAAC,yBAAyB,EAAE,IAAI,CAAC,mBAAmB,IAAI,EAAE,CAAC,CAAC;AAC3E,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { KeyRunners } from './runners.js';
2
+ export declare const REAL_KEY_RUNNERS: KeyRunners;
3
+ //# sourceMappingURL=defaults.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"defaults.d.ts","sourceRoot":"","sources":["../../src/key/defaults.ts"],"names":[],"mappings":"AAkBA,OAAO,KAAK,EAAe,UAAU,EAAE,MAAM,cAAc,CAAC;AAE5D,eAAO,MAAM,gBAAgB,EAAE,UA0C9B,CAAC"}
@@ -0,0 +1,60 @@
1
+ // SPDX-License-Identifier: Apache-2.0
2
+ // Copyright (C) 2026 Kindgi Inc.
3
+ /**
4
+ * Production wiring for `kindgi key`. Composes `@kindgi/crypto`
5
+ * primitives + `node:fs/promises` into the `KeyRunners` shape. Loaded
6
+ * lazily by `main.ts` on `key` dispatch so unrelated commands don't
7
+ * pay the crypto load.
8
+ */
9
+ import { mkdir, readFile, readdir, stat, writeFile } from 'node:fs/promises';
10
+ import { generateEd25519KeyPair, serializePrivateKeyPem, serializePublicKeyPem, } from '@kindgi/crypto';
11
+ export const REAL_KEY_RUNNERS = {
12
+ generateKeyPair: async () => {
13
+ const pair = generateEd25519KeyPair();
14
+ return {
15
+ publicKey: pair.publicKey,
16
+ privateKey: pair.privateKey,
17
+ privateKeyPem: serializePrivateKeyPem(pair.privateKey),
18
+ publicKeyPem: serializePublicKeyPem(pair.publicKey),
19
+ };
20
+ },
21
+ mkdir: async (path, mode) => {
22
+ await mkdir(path, { recursive: true, mode });
23
+ },
24
+ writeFile: async ({ path, contents, mode }) => {
25
+ await writeFile(path, contents, { mode });
26
+ },
27
+ readFile: async (path) => {
28
+ try {
29
+ return await readFile(path, 'utf8');
30
+ }
31
+ catch (err) {
32
+ if (err.code === 'ENOENT')
33
+ return null;
34
+ throw err;
35
+ }
36
+ },
37
+ readdir: async (path) => {
38
+ try {
39
+ const entries = await readdir(path, { withFileTypes: true });
40
+ return entries.map((e) => ({ name: e.name, isFile: e.isFile() }));
41
+ }
42
+ catch (err) {
43
+ if (err.code === 'ENOENT')
44
+ return [];
45
+ throw err;
46
+ }
47
+ },
48
+ exists: async (path) => {
49
+ try {
50
+ await stat(path);
51
+ return true;
52
+ }
53
+ catch (err) {
54
+ if (err.code === 'ENOENT')
55
+ return false;
56
+ throw err;
57
+ }
58
+ },
59
+ };
60
+ //# sourceMappingURL=defaults.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"defaults.js","sourceRoot":"","sources":["../../src/key/defaults.ts"],"names":[],"mappings":"AAAA,sCAAsC;AACtC,iCAAiC;AAEjC;;;;;GAKG;AAEH,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAE7E,OAAO,EACL,sBAAsB,EACtB,sBAAsB,EACtB,qBAAqB,GACtB,MAAM,gBAAgB,CAAC;AAIxB,MAAM,CAAC,MAAM,gBAAgB,GAAe;IAC1C,eAAe,EAAE,KAAK,IAAI,EAAE;QAC1B,MAAM,IAAI,GAAG,sBAAsB,EAAE,CAAC;QACtC,OAAO;YACL,SAAS,EAAE,IAAI,CAAC,SAAS;YACzB,UAAU,EAAE,IAAI,CAAC,UAAU;YAC3B,aAAa,EAAE,sBAAsB,CAAC,IAAI,CAAC,UAAU,CAAC;YACtD,YAAY,EAAE,qBAAqB,CAAC,IAAI,CAAC,SAAS,CAAC;SACpD,CAAC;IACJ,CAAC;IACD,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE;QAC1B,MAAM,KAAK,CAAC,IAAI,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;IAC/C,CAAC;IACD,SAAS,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,EAAE,EAAE;QAC5C,MAAM,SAAS,CAAC,IAAI,EAAE,QAAQ,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC;IAC5C,CAAC;IACD,QAAQ,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE;QACvB,IAAI,CAAC;YACH,OAAO,MAAM,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;QACtC,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,IAAK,GAA6B,CAAC,IAAI,KAAK,QAAQ;gBAAE,OAAO,IAAI,CAAC;YAClE,MAAM,GAAG,CAAC;QACZ,CAAC;IACH,CAAC;IACD,OAAO,EAAE,KAAK,EAAE,IAAI,EAAmC,EAAE;QACvD,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,IAAI,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC;YAC7D,OAAO,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,CAAC;QACpE,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,IAAK,GAA6B,CAAC,IAAI,KAAK,QAAQ;gBAAE,OAAO,EAAE,CAAC;YAChE,MAAM,GAAG,CAAC;QACZ,CAAC;IACH,CAAC;IACD,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE;QACrB,IAAI,CAAC;YACH,MAAM,IAAI,CAAC,IAAI,CAAC,CAAC;YACjB,OAAO,IAAI,CAAC;QACd,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,IAAK,GAA6B,CAAC,IAAI,KAAK,QAAQ;gBAAE,OAAO,KAAK,CAAC;YACnE,MAAM,GAAG,CAAC;QACZ,CAAC;IACH,CAAC;CACF,CAAC"}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * Compute a short fingerprint (`sha256:<first 12 bytes as hex>`) over
3
+ * the given public-key material. Accepts raw bytes or a PEM string.
4
+ */
5
+ export declare function shortFingerprint(input: Uint8Array | string): string;
6
+ //# sourceMappingURL=fingerprint.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fingerprint.d.ts","sourceRoot":"","sources":["../../src/key/fingerprint.ts"],"names":[],"mappings":"AAiBA;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,UAAU,GAAG,MAAM,GAAG,MAAM,CAKnE"}
@@ -0,0 +1,25 @@
1
+ // SPDX-License-Identifier: Apache-2.0
2
+ // Copyright (C) 2026 Kindgi Inc.
3
+ /**
4
+ * Public-key fingerprint helper. `sha256:<first-12-bytes-hex>` — short
5
+ * enough to eyeball in a list, long enough to disambiguate keys within
6
+ * a single tenant's tree. Consumers wanting the full digest hash the
7
+ * public PEM themselves.
8
+ *
9
+ * Framework-grade note: this is intentionally NOT the same shape as
10
+ * `@kindgi/crypto`'s wire fingerprint (if one lands) — this is a
11
+ * CLI-local display convenience. When `SigningKeyBinding` admin ops
12
+ * ship, the CLI should switch to the server's canonical fingerprint.
13
+ */
14
+ import { createHash } from 'node:crypto';
15
+ /**
16
+ * Compute a short fingerprint (`sha256:<first 12 bytes as hex>`) over
17
+ * the given public-key material. Accepts raw bytes or a PEM string.
18
+ */
19
+ export function shortFingerprint(input) {
20
+ const hash = createHash('sha256');
21
+ hash.update(typeof input === 'string' ? input : Buffer.from(input));
22
+ const hex = hash.digest('hex').slice(0, 24);
23
+ return `sha256:${hex}`;
24
+ }
25
+ //# sourceMappingURL=fingerprint.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fingerprint.js","sourceRoot":"","sources":["../../src/key/fingerprint.ts"],"names":[],"mappings":"AAAA,sCAAsC;AACtC,iCAAiC;AAEjC;;;;;;;;;;GAUG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAEzC;;;GAGG;AACH,MAAM,UAAU,gBAAgB,CAAC,KAA0B;IACzD,MAAM,IAAI,GAAG,UAAU,CAAC,QAAQ,CAAC,CAAC;IAClC,IAAI,CAAC,MAAM,CAAC,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;IACpE,MAAM,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IAC5C,OAAO,UAAU,GAAG,EAAE,CAAC;AACzB,CAAC"}
@@ -0,0 +1,30 @@
1
+ /** Directory the CLI writes / reads keys under. `~/.kindgi/keys/`. */
2
+ export declare const KEYS_SUBDIR: readonly [".kindgi", "keys"];
3
+ /** File permissions the CLI enforces on the layout. */
4
+ export declare const PRIVATE_KEY_FILE_MODE = 384;
5
+ export declare const PUBLIC_KEY_FILE_MODE = 420;
6
+ export declare const KEYS_DIR_MODE = 448;
7
+ /** Regex a `keyId` must match. Same shape as pack IDs — lowercase kebab, optionally dot-namespaced. */
8
+ export declare const KEY_ID_REGEX: RegExp;
9
+ export interface KeyPaths {
10
+ readonly home: string;
11
+ readonly keysDir: string;
12
+ readonly privateKeyPath: (keyId: string) => string;
13
+ readonly publicKeyPath: (keyId: string) => string;
14
+ }
15
+ /**
16
+ * Resolve every filesystem path from a home dir. Callers supply
17
+ * `--home` / `ctx.env.HOME` / `ctx.home`; this file's job is to keep
18
+ * the layout consistent regardless.
19
+ */
20
+ export declare function resolveKeyPaths(homeInput: string): KeyPaths;
21
+ /**
22
+ * Resolve the effective home dir given the standard precedence:
23
+ * `--home` > `ctx.env.HOME` > `ctx.home` > `os.homedir()`.
24
+ */
25
+ export declare function pickHome(inputs: {
26
+ readonly flag?: string;
27
+ readonly ctxHome?: string;
28
+ readonly envHome?: string;
29
+ }): string;
30
+ //# sourceMappingURL=paths.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"paths.d.ts","sourceRoot":"","sources":["../../src/key/paths.ts"],"names":[],"mappings":"AAiBA,sEAAsE;AACtE,eAAO,MAAM,WAAW,8BAA+B,CAAC;AAExD,uDAAuD;AACvD,eAAO,MAAM,qBAAqB,MAAQ,CAAC;AAC3C,eAAO,MAAM,oBAAoB,MAAQ,CAAC;AAC1C,eAAO,MAAM,aAAa,MAAQ,CAAC;AAEnC,uGAAuG;AACvG,eAAO,MAAM,YAAY,QAA2B,CAAC;AAErD,MAAM,WAAW,QAAQ;IACvB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,cAAc,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,MAAM,CAAC;IACnD,QAAQ,CAAC,aAAa,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,MAAM,CAAC;CACnD;AAED;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,SAAS,EAAE,MAAM,GAAG,QAAQ,CAS3D;AAED;;;GAGG;AACH,wBAAgB,QAAQ,CAAC,MAAM,EAAE;IAC/B,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;CAC3B,GAAG,MAAM,CAKT"}
@@ -0,0 +1,51 @@
1
+ // SPDX-License-Identifier: Apache-2.0
2
+ // Copyright (C) 2026 Kindgi Inc.
3
+ /**
4
+ * Filesystem layout for local signing keys under
5
+ * `<home>/.kindgi/keys/<keyId>.{pem,pub.pem}`. Kept in its own file so the
6
+ * command handler + tests share one source of truth for the layout.
7
+ *
8
+ * Home dir resolution order (matches other CLI commands):
9
+ * 1. `--home <dir>` flag
10
+ * 2. `HOME` env var (via `ctx.env.HOME` or `process.env.HOME`)
11
+ * 3. `os.homedir()`
12
+ */
13
+ import { homedir } from 'node:os';
14
+ import { join } from 'node:path';
15
+ /** Directory the CLI writes / reads keys under. `~/.kindgi/keys/`. */
16
+ export const KEYS_SUBDIR = ['.kindgi', 'keys'];
17
+ /** File permissions the CLI enforces on the layout. */
18
+ export const PRIVATE_KEY_FILE_MODE = 0o600;
19
+ export const PUBLIC_KEY_FILE_MODE = 0o644;
20
+ export const KEYS_DIR_MODE = 0o700;
21
+ /** Regex a `keyId` must match. Same shape as pack IDs — lowercase kebab, optionally dot-namespaced. */
22
+ export const KEY_ID_REGEX = /^[a-z0-9][a-z0-9._-]*$/;
23
+ /**
24
+ * Resolve every filesystem path from a home dir. Callers supply
25
+ * `--home` / `ctx.env.HOME` / `ctx.home`; this file's job is to keep
26
+ * the layout consistent regardless.
27
+ */
28
+ export function resolveKeyPaths(homeInput) {
29
+ const home = homeInput;
30
+ const keysDir = join(home, ...KEYS_SUBDIR);
31
+ return {
32
+ home,
33
+ keysDir,
34
+ privateKeyPath: (keyId) => join(keysDir, `${keyId}.pem`),
35
+ publicKeyPath: (keyId) => join(keysDir, `${keyId}.pub.pem`),
36
+ };
37
+ }
38
+ /**
39
+ * Resolve the effective home dir given the standard precedence:
40
+ * `--home` > `ctx.env.HOME` > `ctx.home` > `os.homedir()`.
41
+ */
42
+ export function pickHome(inputs) {
43
+ if (typeof inputs.flag === 'string' && inputs.flag !== '')
44
+ return inputs.flag;
45
+ if (typeof inputs.envHome === 'string' && inputs.envHome !== '')
46
+ return inputs.envHome;
47
+ if (typeof inputs.ctxHome === 'string' && inputs.ctxHome !== '')
48
+ return inputs.ctxHome;
49
+ return homedir();
50
+ }
51
+ //# sourceMappingURL=paths.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"paths.js","sourceRoot":"","sources":["../../src/key/paths.ts"],"names":[],"mappings":"AAAA,sCAAsC;AACtC,iCAAiC;AAEjC;;;;;;;;;GASG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAEjC,sEAAsE;AACtE,MAAM,CAAC,MAAM,WAAW,GAAG,CAAC,SAAS,EAAE,MAAM,CAAU,CAAC;AAExD,uDAAuD;AACvD,MAAM,CAAC,MAAM,qBAAqB,GAAG,KAAK,CAAC;AAC3C,MAAM,CAAC,MAAM,oBAAoB,GAAG,KAAK,CAAC;AAC1C,MAAM,CAAC,MAAM,aAAa,GAAG,KAAK,CAAC;AAEnC,uGAAuG;AACvG,MAAM,CAAC,MAAM,YAAY,GAAG,wBAAwB,CAAC;AASrD;;;;GAIG;AACH,MAAM,UAAU,eAAe,CAAC,SAAiB;IAC/C,MAAM,IAAI,GAAG,SAAS,CAAC;IACvB,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,EAAE,GAAG,WAAW,CAAC,CAAC;IAC3C,OAAO;QACL,IAAI;QACJ,OAAO;QACP,cAAc,EAAE,CAAC,KAAa,EAAE,EAAE,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,KAAK,MAAM,CAAC;QAChE,aAAa,EAAE,CAAC,KAAa,EAAE,EAAE,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,KAAK,UAAU,CAAC;KACpE,CAAC;AACJ,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,QAAQ,CAAC,MAIxB;IACC,IAAI,OAAO,MAAM,CAAC,IAAI,KAAK,QAAQ,IAAI,MAAM,CAAC,IAAI,KAAK,EAAE;QAAE,OAAO,MAAM,CAAC,IAAI,CAAC;IAC9E,IAAI,OAAO,MAAM,CAAC,OAAO,KAAK,QAAQ,IAAI,MAAM,CAAC,OAAO,KAAK,EAAE;QAAE,OAAO,MAAM,CAAC,OAAO,CAAC;IACvF,IAAI,OAAO,MAAM,CAAC,OAAO,KAAK,QAAQ,IAAI,MAAM,CAAC,OAAO,KAAK,EAAE;QAAE,OAAO,MAAM,CAAC,OAAO,CAAC;IACvF,OAAO,OAAO,EAAE,CAAC;AACnB,CAAC"}