@kindgi/cli 0.0.0-bootstrap.0 → 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 (516) hide show
  1. package/LICENSE +201 -0
  2. package/README.md +738 -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 +48 -0
  8. package/dist/build/bundle.d.ts.map +1 -0
  9. package/dist/build/bundle.js +125 -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 +197 -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 +597 -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 +100 -0
  28. package/dist/build/host-install.d.ts.map +1 -0
  29. package/dist/build/host-install.js +443 -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 +25 -0
  88. package/dist/commands/auth.d.ts.map +1 -0
  89. package/dist/commands/auth.js +283 -0
  90. package/dist/commands/auth.js.map +1 -0
  91. package/dist/commands/build.d.ts +46 -0
  92. package/dist/commands/build.d.ts.map +1 -0
  93. package/dist/commands/build.js +902 -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 +43 -0
  108. package/dist/commands/dev.d.ts.map +1 -0
  109. package/dist/commands/dev.js +1110 -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 +48 -0
  132. package/dist/commands/helpers.d.ts.map +1 -0
  133. package/dist/commands/helpers.js +110 -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 +454 -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 +212 -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 +223 -0
  178. package/dist/commands/runs.js.map +1 -0
  179. package/dist/commands/secrets.d.ts +18 -0
  180. package/dist/commands/secrets.d.ts.map +1 -0
  181. package/dist/commands/secrets.js +702 -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 +162 -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 +22 -0
  204. package/dist/commands/unwired.d.ts.map +1 -0
  205. package/dist/commands/unwired.js +52 -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 +162 -0
  216. package/dist/context.d.ts.map +1 -0
  217. package/dist/context.js +45 -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 +10 -0
  240. package/dist/dev/bundler.d.ts.map +1 -0
  241. package/dist/dev/bundler.js +235 -0
  242. package/dist/dev/bundler.js.map +1 -0
  243. package/dist/dev/defaults.d.ts +140 -0
  244. package/dist/dev/defaults.d.ts.map +1 -0
  245. package/dist/dev/defaults.js +709 -0
  246. package/dist/dev/defaults.js.map +1 -0
  247. package/dist/dev/dev-only-imports.d.ts +15 -0
  248. package/dist/dev/dev-only-imports.d.ts.map +1 -0
  249. package/dist/dev/dev-only-imports.js +57 -0
  250. package/dist/dev/dev-only-imports.js.map +1 -0
  251. package/dist/dev/docker-compose.dev.yml +68 -0
  252. package/dist/dev/index-child.d.ts +2 -0
  253. package/dist/dev/index-child.d.ts.map +1 -0
  254. package/dist/dev/index-child.js +53 -0
  255. package/dist/dev/index-child.js.map +1 -0
  256. package/dist/dev/pack-code.d.ts +36 -0
  257. package/dist/dev/pack-code.d.ts.map +1 -0
  258. package/dist/dev/pack-code.js +129 -0
  259. package/dist/dev/pack-code.js.map +1 -0
  260. package/dist/dev/pack-env.d.ts +13 -0
  261. package/dist/dev/pack-env.d.ts.map +1 -0
  262. package/dist/dev/pack-env.js +36 -0
  263. package/dist/dev/pack-env.js.map +1 -0
  264. package/dist/dev/pack-service.d.ts +40 -0
  265. package/dist/dev/pack-service.d.ts.map +1 -0
  266. package/dist/dev/pack-service.js +189 -0
  267. package/dist/dev/pack-service.js.map +1 -0
  268. package/dist/dev/paths.d.ts +22 -0
  269. package/dist/dev/paths.d.ts.map +1 -0
  270. package/dist/dev/paths.js +35 -0
  271. package/dist/dev/paths.js.map +1 -0
  272. package/dist/dev/postgres-container.d.ts +77 -0
  273. package/dist/dev/postgres-container.d.ts.map +1 -0
  274. package/dist/dev/postgres-container.js +346 -0
  275. package/dist/dev/postgres-container.js.map +1 -0
  276. package/dist/dev/python-builder.d.ts +16 -0
  277. package/dist/dev/python-builder.d.ts.map +1 -0
  278. package/dist/dev/python-builder.js +122 -0
  279. package/dist/dev/python-builder.js.map +1 -0
  280. package/dist/dev/register.d.ts +71 -0
  281. package/dist/dev/register.d.ts.map +1 -0
  282. package/dist/dev/register.js +54 -0
  283. package/dist/dev/register.js.map +1 -0
  284. package/dist/dev/runners.d.ts +312 -0
  285. package/dist/dev/runners.d.ts.map +1 -0
  286. package/dist/dev/runners.js +4 -0
  287. package/dist/dev/runners.js.map +1 -0
  288. package/dist/dev/runtime-container.d.ts +71 -0
  289. package/dist/dev/runtime-container.d.ts.map +1 -0
  290. package/dist/dev/runtime-container.js +173 -0
  291. package/dist/dev/runtime-container.js.map +1 -0
  292. package/dist/dev/runtime-env.d.ts +62 -0
  293. package/dist/dev/runtime-env.d.ts.map +1 -0
  294. package/dist/dev/runtime-env.js +100 -0
  295. package/dist/dev/runtime-env.js.map +1 -0
  296. package/dist/dev/runtime-image.d.ts +26 -0
  297. package/dist/dev/runtime-image.d.ts.map +1 -0
  298. package/dist/dev/runtime-image.js +44 -0
  299. package/dist/dev/runtime-image.js.map +1 -0
  300. package/dist/dev/runtime-registry.d.ts +73 -0
  301. package/dist/dev/runtime-registry.d.ts.map +1 -0
  302. package/dist/dev/runtime-registry.js +111 -0
  303. package/dist/dev/runtime-registry.js.map +1 -0
  304. package/dist/env/defaults.d.ts +3 -0
  305. package/dist/env/defaults.d.ts.map +1 -0
  306. package/dist/env/defaults.js +22 -0
  307. package/dist/env/defaults.js.map +1 -0
  308. package/dist/env/pack-env-plan.d.ts +70 -0
  309. package/dist/env/pack-env-plan.d.ts.map +1 -0
  310. package/dist/env/pack-env-plan.js +236 -0
  311. package/dist/env/pack-env-plan.js.map +1 -0
  312. package/dist/env/parser.d.ts +9 -0
  313. package/dist/env/parser.d.ts.map +1 -0
  314. package/dist/env/parser.js +11 -0
  315. package/dist/env/parser.js.map +1 -0
  316. package/dist/env/project-env.d.ts +34 -0
  317. package/dist/env/project-env.d.ts.map +1 -0
  318. package/dist/env/project-env.js +45 -0
  319. package/dist/env/project-env.js.map +1 -0
  320. package/dist/env/runners.d.ts +22 -0
  321. package/dist/env/runners.d.ts.map +1 -0
  322. package/dist/env/runners.js +4 -0
  323. package/dist/env/runners.js.map +1 -0
  324. package/dist/env/writer.d.ts +7 -0
  325. package/dist/env/writer.d.ts.map +1 -0
  326. package/dist/env/writer.js +9 -0
  327. package/dist/env/writer.js.map +1 -0
  328. package/dist/errors.d.ts +31 -0
  329. package/dist/errors.d.ts.map +1 -0
  330. package/dist/errors.js +111 -0
  331. package/dist/errors.js.map +1 -0
  332. package/dist/help.d.ts +5 -0
  333. package/dist/help.d.ts.map +1 -0
  334. package/dist/help.js +61 -0
  335. package/dist/help.js.map +1 -0
  336. package/dist/index.d.ts +13 -0
  337. package/dist/index.d.ts.map +1 -0
  338. package/dist/index.js +13 -0
  339. package/dist/index.js.map +1 -0
  340. package/dist/init/augment-scaffolder.d.ts +86 -0
  341. package/dist/init/augment-scaffolder.d.ts.map +1 -0
  342. package/dist/init/augment-scaffolder.js +538 -0
  343. package/dist/init/augment-scaffolder.js.map +1 -0
  344. package/dist/init/dependency-specs.d.ts +58 -0
  345. package/dist/init/dependency-specs.d.ts.map +1 -0
  346. package/dist/init/dependency-specs.js +153 -0
  347. package/dist/init/dependency-specs.js.map +1 -0
  348. package/dist/init/gitignore-patcher.d.ts +23 -0
  349. package/dist/init/gitignore-patcher.d.ts.map +1 -0
  350. package/dist/init/gitignore-patcher.js +103 -0
  351. package/dist/init/gitignore-patcher.js.map +1 -0
  352. package/dist/init/mode-detect.d.ts +34 -0
  353. package/dist/init/mode-detect.d.ts.map +1 -0
  354. package/dist/init/mode-detect.js +115 -0
  355. package/dist/init/mode-detect.js.map +1 -0
  356. package/dist/init/package-json-patcher.d.ts +36 -0
  357. package/dist/init/package-json-patcher.d.ts.map +1 -0
  358. package/dist/init/package-json-patcher.js +128 -0
  359. package/dist/init/package-json-patcher.js.map +1 -0
  360. package/dist/init/pnpm-workspace-patcher.d.ts +55 -0
  361. package/dist/init/pnpm-workspace-patcher.d.ts.map +1 -0
  362. package/dist/init/pnpm-workspace-patcher.js +248 -0
  363. package/dist/init/pnpm-workspace-patcher.js.map +1 -0
  364. package/dist/init/pyproject-patcher.d.ts +56 -0
  365. package/dist/init/pyproject-patcher.d.ts.map +1 -0
  366. package/dist/init/pyproject-patcher.js +324 -0
  367. package/dist/init/pyproject-patcher.js.map +1 -0
  368. package/dist/init/python-augment.d.ts +22 -0
  369. package/dist/init/python-augment.d.ts.map +1 -0
  370. package/dist/init/python-augment.js +300 -0
  371. package/dist/init/python-augment.js.map +1 -0
  372. package/dist/init/template-files.d.ts +18 -0
  373. package/dist/init/template-files.d.ts.map +1 -0
  374. package/dist/init/template-files.js +53 -0
  375. package/dist/init/template-files.js.map +1 -0
  376. package/dist/key/defaults.d.ts +3 -0
  377. package/dist/key/defaults.d.ts.map +1 -0
  378. package/dist/key/defaults.js +60 -0
  379. package/dist/key/defaults.js.map +1 -0
  380. package/dist/key/fingerprint.d.ts +6 -0
  381. package/dist/key/fingerprint.d.ts.map +1 -0
  382. package/dist/key/fingerprint.js +25 -0
  383. package/dist/key/fingerprint.js.map +1 -0
  384. package/dist/key/paths.d.ts +30 -0
  385. package/dist/key/paths.d.ts.map +1 -0
  386. package/dist/key/paths.js +51 -0
  387. package/dist/key/paths.js.map +1 -0
  388. package/dist/key/runners.d.ts +60 -0
  389. package/dist/key/runners.d.ts.map +1 -0
  390. package/dist/key/runners.js +4 -0
  391. package/dist/key/runners.js.map +1 -0
  392. package/dist/main.d.ts +113 -0
  393. package/dist/main.d.ts.map +1 -0
  394. package/dist/main.js +199 -0
  395. package/dist/main.js.map +1 -0
  396. package/dist/mcp/launcher.d.ts +143 -0
  397. package/dist/mcp/launcher.d.ts.map +1 -0
  398. package/dist/mcp/launcher.js +393 -0
  399. package/dist/mcp/launcher.js.map +1 -0
  400. package/dist/mcp/preset-loader.d.ts +29 -0
  401. package/dist/mcp/preset-loader.d.ts.map +1 -0
  402. package/dist/mcp/preset-loader.js +217 -0
  403. package/dist/mcp/preset-loader.js.map +1 -0
  404. package/dist/mcp/preset-types.d.ts +71 -0
  405. package/dist/mcp/preset-types.d.ts.map +1 -0
  406. package/dist/mcp/preset-types.js +4 -0
  407. package/dist/mcp/preset-types.js.map +1 -0
  408. package/dist/mcp/presets/README.md +68 -0
  409. package/dist/mcp/presets/postgres.json +15 -0
  410. package/dist/output.d.ts +26 -0
  411. package/dist/output.d.ts.map +1 -0
  412. package/dist/output.js +46 -0
  413. package/dist/output.js.map +1 -0
  414. package/dist/pack-config.d.ts +37 -0
  415. package/dist/pack-config.d.ts.map +1 -0
  416. package/dist/pack-config.js +65 -0
  417. package/dist/pack-config.js.map +1 -0
  418. package/dist/package-manager.d.ts +33 -0
  419. package/dist/package-manager.d.ts.map +1 -0
  420. package/dist/package-manager.js +129 -0
  421. package/dist/package-manager.js.map +1 -0
  422. package/dist/parse.d.ts +88 -0
  423. package/dist/parse.d.ts.map +1 -0
  424. package/dist/parse.js +100 -0
  425. package/dist/parse.js.map +1 -0
  426. package/dist/providers/preset-loader.d.ts +47 -0
  427. package/dist/providers/preset-loader.d.ts.map +1 -0
  428. package/dist/providers/preset-loader.js +107 -0
  429. package/dist/providers/preset-loader.js.map +1 -0
  430. package/dist/providers/presets/anthropic.json +47 -0
  431. package/dist/providers/presets/gemini.json +40 -0
  432. package/dist/reference.d.ts +28 -0
  433. package/dist/reference.d.ts.map +1 -0
  434. package/dist/reference.js +52 -0
  435. package/dist/reference.js.map +1 -0
  436. package/dist/sdk-package.d.ts +9 -0
  437. package/dist/sdk-package.d.ts.map +1 -0
  438. package/dist/sdk-package.js +20 -0
  439. package/dist/sdk-package.js.map +1 -0
  440. package/dist/sdk-skills/kindgi-authoring-agents/SKILL.md +252 -0
  441. package/dist/sdk-skills/kindgi-authoring-flows/SKILL.md +302 -0
  442. package/dist/sdk-skills/kindgi-authoring-guardrails/SKILL.md +297 -0
  443. package/dist/sdk-skills/kindgi-authoring-mcp-servers/SKILL.md +289 -0
  444. package/dist/sdk-skills/kindgi-authoring-providers/SKILL.md +705 -0
  445. package/dist/sdk-skills/kindgi-authoring-tools/SKILL.md +298 -0
  446. package/dist/sdk-skills/kindgi-framework-feedback/SKILL.md +211 -0
  447. package/dist/sdk-skills/kindgi-getting-started/SKILL.md +189 -0
  448. package/dist/sdk-skills/kindgi-python-authoring-agents/SKILL.md +205 -0
  449. package/dist/sdk-skills/kindgi-python-authoring-flows/SKILL.md +325 -0
  450. package/dist/sdk-skills/kindgi-python-authoring-guardrails/SKILL.md +176 -0
  451. package/dist/sdk-skills/kindgi-python-authoring-tools/SKILL.md +305 -0
  452. package/dist/sdk-skills/kindgi-python-getting-started/SKILL.md +242 -0
  453. package/dist/stop-signal.d.ts +15 -0
  454. package/dist/stop-signal.d.ts.map +1 -0
  455. package/dist/stop-signal.js +16 -0
  456. package/dist/stop-signal.js.map +1 -0
  457. package/dist/templates/minimal/.nvmrc +1 -0
  458. package/dist/templates/minimal/AGENTS.md +23 -0
  459. package/dist/templates/minimal/README.md.tmpl +69 -0
  460. package/dist/templates/minimal/agents/.gitkeep +0 -0
  461. package/dist/templates/minimal/flows/.gitkeep +0 -0
  462. package/dist/templates/minimal/gitignore +8 -0
  463. package/dist/templates/minimal/guardrails/.gitkeep +0 -0
  464. package/dist/templates/minimal/kindgi.config.ts.tmpl +44 -0
  465. package/dist/templates/minimal/package.json.tmpl +25 -0
  466. package/dist/templates/minimal/pnpm-workspace.yaml +8 -0
  467. package/dist/templates/minimal/tools/.gitkeep +0 -0
  468. package/dist/templates/minimal/tsconfig.json.tmpl +27 -0
  469. package/dist/templates/minimal/vitest.config.ts.tmpl +14 -0
  470. package/dist/templates/python/AGENTS.md +30 -0
  471. package/dist/templates/python/README.md.tmpl +56 -0
  472. package/dist/templates/python/agents/echo_agent.py.tmpl +23 -0
  473. package/dist/templates/python/flows/echo_flow.py.tmpl +17 -0
  474. package/dist/templates/python/gitignore +9 -0
  475. package/dist/templates/python/guardrails/response_not_empty.py.tmpl +27 -0
  476. package/dist/templates/python/pyproject.toml.tmpl +42 -0
  477. package/dist/templates/python/tests/test_tools.py.tmpl +22 -0
  478. package/dist/templates/python/tools/echo.py.tmpl +27 -0
  479. package/dist/templates/python/tools/greet.py.tmpl +20 -0
  480. package/dist/templates/sample/.nvmrc +1 -0
  481. package/dist/templates/sample/AGENTS.md +23 -0
  482. package/dist/templates/sample/README.md.tmpl +85 -0
  483. package/dist/templates/sample/agents/echo-agent/index.ts.tmpl +34 -0
  484. package/dist/templates/sample/flows/echo-flow/index.ts.tmpl +59 -0
  485. package/dist/templates/sample/gitignore +8 -0
  486. package/dist/templates/sample/guardrails/response-not-empty/index.ts.tmpl +58 -0
  487. package/dist/templates/sample/kindgi.config.ts.tmpl +41 -0
  488. package/dist/templates/sample/package.json.tmpl +25 -0
  489. package/dist/templates/sample/pnpm-workspace.yaml +8 -0
  490. package/dist/templates/sample/tools/echo/index.test.ts.tmpl +31 -0
  491. package/dist/templates/sample/tools/echo/index.ts.tmpl +37 -0
  492. package/dist/templates/sample/tools/fetch-httpbin/index.ts.tmpl +60 -0
  493. package/dist/templates/sample/tools/greet/index.ts.tmpl +35 -0
  494. package/dist/templates/sample/tsconfig.json.tmpl +27 -0
  495. package/dist/templates/sample/vitest.config.ts.tmpl +14 -0
  496. package/dist/terminal-input.d.ts +17 -0
  497. package/dist/terminal-input.d.ts.map +1 -0
  498. package/dist/terminal-input.js +88 -0
  499. package/dist/terminal-input.js.map +1 -0
  500. package/dist/test/defaults.d.ts +3 -0
  501. package/dist/test/defaults.d.ts.map +1 -0
  502. package/dist/test/defaults.js +104 -0
  503. package/dist/test/defaults.js.map +1 -0
  504. package/dist/test/runners.d.ts +60 -0
  505. package/dist/test/runners.d.ts.map +1 -0
  506. package/dist/test/runners.js +4 -0
  507. package/dist/test/runners.js.map +1 -0
  508. package/dist/version-info.d.ts +9 -0
  509. package/dist/version-info.d.ts.map +1 -0
  510. package/dist/version-info.js +27 -0
  511. package/dist/version-info.js.map +1 -0
  512. package/dist/write-fully.d.ts +13 -0
  513. package/dist/write-fully.d.ts.map +1 -0
  514. package/dist/write-fully.js +17 -0
  515. package/dist/write-fully.js.map +1 -0
  516. package/package.json +63 -4
@@ -0,0 +1,42 @@
1
+ /**
2
+ * Resolved configuration used by every command. Precedence at load
3
+ * time is: CLI flag (`--url`, `--token`) > env var
4
+ * (`KINDGI_API_URL`, `KINDGI_API_TOKEN`) > file
5
+ * (`.kindgirc.json` in cwd, then `~/.kindgi/config.json`).
6
+ */
7
+ export interface ResolvedConfig {
8
+ readonly apiUrl: string | undefined;
9
+ readonly token: string | undefined;
10
+ readonly source: {
11
+ readonly apiUrl: ConfigSource;
12
+ readonly token: ConfigSource;
13
+ };
14
+ }
15
+ export type ConfigSource = 'flag' | 'env' | 'file' | 'unset';
16
+ export interface ConfigInputs {
17
+ readonly flagUrl?: string | undefined;
18
+ readonly flagToken?: string | undefined;
19
+ readonly env?: Readonly<Record<string, string | undefined>>;
20
+ /** Directory used as cwd when looking for `.kindgirc.json`. */
21
+ readonly cwd?: string;
22
+ /** Directory used as `$HOME` when looking for `~/.kindgi/config.json`. */
23
+ readonly home?: string;
24
+ /**
25
+ * Optional file loader override for tests. Returns `null` when the
26
+ * file does not exist; throws for any other IO error.
27
+ */
28
+ readonly readFile?: (path: string) => Promise<string | null>;
29
+ }
30
+ interface FileConfig {
31
+ readonly apiUrl?: string;
32
+ readonly token?: string;
33
+ }
34
+ export declare function loadConfig(inputs?: ConfigInputs): Promise<ResolvedConfig>;
35
+ /**
36
+ * Persist a config file at `~/.kindgi/config.json`. Called by
37
+ * `kindgi auth login`. Merges with any existing file so a partial
38
+ * write does not clobber other keys.
39
+ */
40
+ export declare function saveHomeConfig(patch: FileConfig, home?: string | undefined): Promise<string>;
41
+ export {};
42
+ //# sourceMappingURL=config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAOA;;;;;GAKG;AACH,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC;IACpC,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,CAAC;IACnC,QAAQ,CAAC,MAAM,EAAE;QACf,QAAQ,CAAC,MAAM,EAAE,YAAY,CAAC;QAC9B,QAAQ,CAAC,KAAK,EAAE,YAAY,CAAC;KAC9B,CAAC;CACH;AAED,MAAM,MAAM,YAAY,GAAG,MAAM,GAAG,KAAK,GAAG,MAAM,GAAG,OAAO,CAAC;AAE7D,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACtC,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACxC,QAAQ,CAAC,GAAG,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,CAAC,CAAC;IAC5D,+DAA+D;IAC/D,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC;IACtB,0EAA0E;IAC1E,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IACvB;;;OAGG;IACH,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;CAC9D;AAED,UAAU,UAAU;IAClB,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;CACzB;AAWD,wBAAsB,UAAU,CAAC,MAAM,GAAE,YAAiB,GAAG,OAAO,CAAC,cAAc,CAAC,CAmBnF;AA2CD;;;;GAIG;AACH,wBAAsB,cAAc,CAClC,KAAK,EAAE,UAAU,EACjB,IAAI,GAAE,MAAM,GAAG,SAAqB,GACnC,OAAO,CAAC,MAAM,CAAC,CASjB"}
package/dist/config.js ADDED
@@ -0,0 +1,83 @@
1
+ // SPDX-License-Identifier: Apache-2.0
2
+ // Copyright (C) 2026 Kindgi Inc.
3
+ import { mkdir, readFile, writeFile } from 'node:fs/promises';
4
+ import { homedir } from 'node:os';
5
+ import { dirname, join } from 'node:path';
6
+ async function defaultReadFile(path) {
7
+ try {
8
+ return await readFile(path, 'utf8');
9
+ }
10
+ catch (err) {
11
+ if (err.code === 'ENOENT')
12
+ return null;
13
+ throw err;
14
+ }
15
+ }
16
+ export async function loadConfig(inputs = {}) {
17
+ const env = inputs.env ?? process.env;
18
+ const cwd = inputs.cwd ?? process.cwd();
19
+ const home = inputs.home ?? homedir();
20
+ const read = inputs.readFile ?? defaultReadFile;
21
+ const fileConfig = await loadFileConfig(cwd, home, read);
22
+ const envUrl = env.KINDGI_API_URL;
23
+ const envToken = env.KINDGI_API_TOKEN;
24
+ const apiUrl = pickWithSource(inputs.flagUrl, envUrl, fileConfig.apiUrl);
25
+ const token = pickWithSource(inputs.flagToken, envToken, fileConfig.token);
26
+ return {
27
+ apiUrl: apiUrl.value,
28
+ token: token.value,
29
+ source: { apiUrl: apiUrl.source, token: token.source },
30
+ };
31
+ }
32
+ function pickWithSource(flag, env, file) {
33
+ if (typeof flag === 'string' && flag !== '')
34
+ return { value: flag, source: 'flag' };
35
+ if (typeof env === 'string' && env !== '')
36
+ return { value: env, source: 'env' };
37
+ if (typeof file === 'string' && file !== '')
38
+ return { value: file, source: 'file' };
39
+ return { value: undefined, source: 'unset' };
40
+ }
41
+ async function loadFileConfig(cwd, home, read) {
42
+ const cwdPath = join(cwd, '.kindgirc.json');
43
+ const homePath = join(home, '.kindgi', 'config.json');
44
+ const merged = {};
45
+ for (const path of [homePath, cwdPath]) {
46
+ const raw = await read(path);
47
+ if (raw === null)
48
+ continue;
49
+ const parsed = parseJson(raw, path);
50
+ if (typeof parsed.apiUrl === 'string')
51
+ merged.apiUrl = parsed.apiUrl;
52
+ if (typeof parsed.token === 'string')
53
+ merged.token = parsed.token;
54
+ }
55
+ return merged;
56
+ }
57
+ function parseJson(raw, path) {
58
+ try {
59
+ const obj = JSON.parse(raw);
60
+ if (obj === null || typeof obj !== 'object')
61
+ return {};
62
+ return obj;
63
+ }
64
+ catch (err) {
65
+ throw new Error(`Malformed JSON in ${path}: ${err.message}. Delete or repair the file.`);
66
+ }
67
+ }
68
+ /**
69
+ * Persist a config file at `~/.kindgi/config.json`. Called by
70
+ * `kindgi auth login`. Merges with any existing file so a partial
71
+ * write does not clobber other keys.
72
+ */
73
+ export async function saveHomeConfig(patch, home = homedir()) {
74
+ const resolvedHome = home ?? homedir();
75
+ const path = join(resolvedHome, '.kindgi', 'config.json');
76
+ const existing = await defaultReadFile(path);
77
+ const base = existing === null ? {} : JSON.parse(existing);
78
+ const next = { ...base, ...patch };
79
+ await mkdir(dirname(path), { recursive: true });
80
+ await writeFile(path, `${JSON.stringify(next, null, 2)}\n`, 'utf8');
81
+ return path;
82
+ }
83
+ //# sourceMappingURL=config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,162 @@
1
+ import { type KindgiClient } from '@kindgi/client';
2
+ import type { BuildRunners } from './build/runners.js';
3
+ import type { RegistryAuthSeam } from './commands/auth.js';
4
+ import type { EnvInitInputSeam } from './commands/env.js';
5
+ import type { SecretsValueInputSeam } from './commands/secrets.js';
6
+ import type { ResolvedConfig } from './config.js';
7
+ import type { DeployRunners } from './deploy/runners.js';
8
+ import type { DevRunners } from './dev/runners.js';
9
+ import type { EnvRunners } from './env/runners.js';
10
+ import type { KeyRunners } from './key/runners.js';
11
+ import type { GlobalFlags } from './parse.js';
12
+ import type { TestRunners } from './test/runners.js';
13
+ /**
14
+ * Loader hook the `kindgi build` command consumes when reading
15
+ * `kindgi.config.ts`. Production leaves this undefined; the command
16
+ * falls back to a plain dynamic `import()` (Node 22
17
+ * `--experimental-strip-types` handles the `.ts` variant natively).
18
+ * Tests inject an in-memory function to bypass the filesystem.
19
+ */
20
+ export type BuildConfigLoader = (packDir: string) => Promise<unknown>;
21
+ /**
22
+ * Runtime context passed to every command handler. Holds the resolved
23
+ * config, the SDK client (lazily created), and the effective output
24
+ * format.
25
+ */
26
+ export interface CommandContext {
27
+ readonly globals: GlobalFlags;
28
+ readonly positionals: readonly string[];
29
+ readonly options: Readonly<Record<string, string | boolean | undefined>>;
30
+ readonly config: ResolvedConfig;
31
+ /** Create an SDK client using the resolved config. Throws if apiUrl / token are missing. */
32
+ readonly client: () => KindgiClient;
33
+ /** Create an SDK client bound to arbitrary apiUrl + token (used by `kindgi dev`). */
34
+ readonly clientFor: (apiUrl: string, token: string) => KindgiClient;
35
+ /** Base URL, if resolved — used by non-SDK direct fetch (health, whoami). */
36
+ readonly apiUrl: () => string;
37
+ /** Bearer token, if resolved — used by non-SDK direct fetch. */
38
+ readonly token: () => string;
39
+ /** fetch impl (injectable for tests). */
40
+ readonly fetch: typeof fetch;
41
+ /** Home directory used by `auth login` when persisting `~/.kindgi/config.json`. */
42
+ readonly home: string | undefined;
43
+ /** Working directory (injectable for tests; defaults to process.cwd()). */
44
+ readonly cwd: string;
45
+ /**
46
+ * Environment variables the CLI was booted with. Populated verbatim
47
+ * from `runCli({ env })`; production callers pass `process.env`.
48
+ * Consumed by commands (e.g. `kindgi dev`'s `KINDGI_DATABASE_URL`
49
+ * fallback) so tests can drive the resolution deterministically.
50
+ */
51
+ readonly env: Readonly<Record<string, string | undefined>>;
52
+ /**
53
+ * Injectable dev-mode runners (api-server factory + indexer + watcher).
54
+ * Present iff the CLI was booted via `runCli({ devRunners })` — used
55
+ * exclusively by `kindgi dev` so tests can hand in mock server /
56
+ * indexer / watcher without touching Postgres or the filesystem.
57
+ * Production callers leave this undefined; `kindgi dev` then wires
58
+ * the real runtime container / `runIndexer` / `fs.watch` from
59
+ * `dev/defaults.ts`.
60
+ */
61
+ readonly devRunners: DevRunners | undefined;
62
+ /**
63
+ * Optional signal that terminates long-lived commands (currently just
64
+ * `kindgi dev` — the watch loop). Tests pass an
65
+ * `AbortController.signal` so a graceful shutdown path can be
66
+ * exercised without process signals. Production callers wire this to
67
+ * SIGINT/SIGTERM in `main.ts`.
68
+ */
69
+ readonly stopSignal: AbortSignal | undefined;
70
+ /**
71
+ * Injectable build-pipeline seams used exclusively by `kindgi
72
+ * build`. Absent for every other command. Tests hand
73
+ * in fixture implementations so the pipeline exercises without
74
+ * spawning real esbuild, real tar, real fetch, or docker; production
75
+ * lazy-loads `build/defaults.ts` on dispatch.
76
+ */
77
+ readonly buildRunners: BuildRunners | undefined;
78
+ /**
79
+ * Optional loader hook for `kindgi.config.ts`. Tests inject an
80
+ * in-memory function; production leaves this undefined and the
81
+ * command falls back to a plain dynamic `import()`.
82
+ */
83
+ readonly buildConfigLoader: ((packDir: string) => Promise<{
84
+ readonly [k: string]: unknown;
85
+ }>) | undefined;
86
+ /**
87
+ * Injectable deploy-pipeline seams used exclusively by `kindgi
88
+ * deploy`. Absent for every other command. Tests hand
89
+ * in fixture implementations so the pipeline exercises without
90
+ * reading a real envelope file or hitting a live api-server;
91
+ * production lazy-loads `deploy/defaults.ts` on dispatch.
92
+ */
93
+ readonly deployRunners: DeployRunners | undefined;
94
+ /**
95
+ * Injectable seams for `kindgi test`. Absent for
96
+ * every other command. Tests hand in fixture implementations so the
97
+ * command flow exercises without spawning real vitest; production
98
+ * lazy-loads `test/defaults.ts` on dispatch.
99
+ */
100
+ readonly testRunners: TestRunners | undefined;
101
+ /**
102
+ * Injectable filesystem seams for `kindgi env`.
103
+ * Absent for every other command. Tests substitute in-memory stubs
104
+ * so `.env.<envName>` reads/writes never touch disk; production
105
+ * lazy-loads `env/defaults.ts` on dispatch.
106
+ */
107
+ readonly envRunners: EnvRunners | undefined;
108
+ /**
109
+ * Injectable seams for `kindgi key`. Absent for
110
+ * every other command. Tests substitute stubs so the crypto +
111
+ * filesystem paths under `~/.kindgi/keys/` never touch disk; production
112
+ * lazy-loads `key/defaults.ts` on dispatch.
113
+ */
114
+ readonly keyRunners: KeyRunners | undefined;
115
+ /**
116
+ * Injectable value-input seams for `kindgi secrets set` /
117
+ * `rotate`. Tests pass fixtures so the TTY prompt / stdin reader /
118
+ * file reader / fs.stat mode check exercise without a real terminal
119
+ * or disk. Production leaves this undefined; the command falls back
120
+ * to real `readline` / `process.stdin` / `node:fs`.
121
+ */
122
+ readonly secretsInputSeam: SecretsValueInputSeam | undefined;
123
+ /**
124
+ * Injectable prompt / TTY-check seam for `kindgi env init`. Tests
125
+ * inject a fixture `promptChoice`; production leaves undefined and
126
+ * `env init` spins up a real `readline.Interface`.
127
+ */
128
+ readonly envInitInputSeam: EnvInitInputSeam | undefined;
129
+ /**
130
+ * Injectable seams for `kindgi auth registry`: the `docker` runner, the
131
+ * stdin reader, the hidden prompt and the image checked. Tests pass
132
+ * fixtures so the login and the check run without Docker or a
133
+ * terminal; production leaves this undefined (the real ones).
134
+ */
135
+ readonly registryAuthSeam: RegistryAuthSeam | undefined;
136
+ }
137
+ export interface BuildContextInputs {
138
+ readonly globals: GlobalFlags;
139
+ readonly positionals: readonly string[];
140
+ readonly options: Readonly<Record<string, string | boolean | undefined>>;
141
+ readonly config: ResolvedConfig;
142
+ readonly fetchImpl?: typeof fetch;
143
+ readonly clientFactory?: (apiUrl: string, token: string) => KindgiClient;
144
+ readonly home?: string;
145
+ readonly cwd?: string;
146
+ readonly env?: Readonly<Record<string, string | undefined>>;
147
+ readonly devRunners?: DevRunners;
148
+ readonly stopSignal?: AbortSignal;
149
+ readonly buildRunners?: BuildRunners;
150
+ readonly buildConfigLoader?: (packDir: string) => Promise<{
151
+ readonly [k: string]: unknown;
152
+ }>;
153
+ readonly deployRunners?: DeployRunners;
154
+ readonly testRunners?: TestRunners;
155
+ readonly envRunners?: EnvRunners;
156
+ readonly keyRunners?: KeyRunners;
157
+ readonly secretsInputSeam?: SecretsValueInputSeam;
158
+ readonly envInitInputSeam?: EnvInitInputSeam;
159
+ readonly registryAuthSeam?: RegistryAuthSeam;
160
+ }
161
+ export declare function buildContext(inputs: BuildContextInputs): CommandContext;
162
+ //# sourceMappingURL=context.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../src/context.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,45 @@
1
+ // SPDX-License-Identifier: Apache-2.0
2
+ // Copyright (C) 2026 Kindgi Inc.
3
+ import { createClient } from '@kindgi/client';
4
+ export function buildContext(inputs) {
5
+ const apiUrl = () => {
6
+ if (inputs.config.apiUrl === undefined) {
7
+ throw new Error('API URL not configured. Set KINDGI_API_URL, pass --url=..., or run `kindgi auth login`.');
8
+ }
9
+ return inputs.config.apiUrl;
10
+ };
11
+ const token = () => {
12
+ if (inputs.config.token === undefined) {
13
+ throw new Error('API token not configured. Set KINDGI_API_TOKEN, pass --token=..., or run `kindgi auth login`.');
14
+ }
15
+ return inputs.config.token;
16
+ };
17
+ const factory = inputs.clientFactory ??
18
+ ((url, tok) => createClient({ apiUrl: url, auth: { kind: 'apiToken', token: tok } }));
19
+ return {
20
+ globals: inputs.globals,
21
+ positionals: inputs.positionals,
22
+ options: inputs.options,
23
+ config: inputs.config,
24
+ client: () => factory(apiUrl(), token()),
25
+ clientFor: (url, tok) => factory(url, tok),
26
+ apiUrl,
27
+ token,
28
+ fetch: inputs.fetchImpl ?? fetch,
29
+ home: inputs.home,
30
+ cwd: inputs.cwd ?? process.cwd(),
31
+ env: inputs.env ?? {},
32
+ devRunners: inputs.devRunners,
33
+ stopSignal: inputs.stopSignal,
34
+ buildRunners: inputs.buildRunners,
35
+ buildConfigLoader: inputs.buildConfigLoader,
36
+ deployRunners: inputs.deployRunners,
37
+ testRunners: inputs.testRunners,
38
+ envRunners: inputs.envRunners,
39
+ keyRunners: inputs.keyRunners,
40
+ secretsInputSeam: inputs.secretsInputSeam,
41
+ envInitInputSeam: inputs.envInitInputSeam,
42
+ registryAuthSeam: inputs.registryAuthSeam,
43
+ };
44
+ }
45
+ //# sourceMappingURL=context.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"context.js","sourceRoot":"","sources":["../src/context.ts"],"names":[],"mappings":"AAAA,sCAAsC;AACtC,iCAAiC;AAEjC,OAAO,EAAqB,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAmKjE,MAAM,UAAU,YAAY,CAAC,MAA0B;IACrD,MAAM,MAAM,GAAG,GAAW,EAAE;QAC1B,IAAI,MAAM,CAAC,MAAM,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;YACvC,MAAM,IAAI,KAAK,CACb,yFAAyF,CAC1F,CAAC;QACJ,CAAC;QACD,OAAO,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC;IAC9B,CAAC,CAAC;IACF,MAAM,KAAK,GAAG,GAAW,EAAE;QACzB,IAAI,MAAM,CAAC,MAAM,CAAC,KAAK,KAAK,SAAS,EAAE,CAAC;YACtC,MAAM,IAAI,KAAK,CACb,+FAA+F,CAChG,CAAC;QACJ,CAAC;QACD,OAAO,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC;IAC7B,CAAC,CAAC;IACF,MAAM,OAAO,GACX,MAAM,CAAC,aAAa;QACpB,CAAC,CAAC,GAAW,EAAE,GAAW,EAAE,EAAE,CAC5B,YAAY,CAAC,EAAE,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,GAAG,EAAE,EAAE,CAAC,CAAC,CAAC;IAC3E,OAAO;QACL,OAAO,EAAE,MAAM,CAAC,OAAO;QACvB,WAAW,EAAE,MAAM,CAAC,WAAW;QAC/B,OAAO,EAAE,MAAM,CAAC,OAAO;QACvB,MAAM,EAAE,MAAM,CAAC,MAAM;QACrB,MAAM,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,KAAK,EAAE,CAAC;QACxC,SAAS,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,CAAC,OAAO,CAAC,GAAG,EAAE,GAAG,CAAC;QAC1C,MAAM;QACN,KAAK;QACL,KAAK,EAAE,MAAM,CAAC,SAAS,IAAI,KAAK;QAChC,IAAI,EAAE,MAAM,CAAC,IAAI;QACjB,GAAG,EAAE,MAAM,CAAC,GAAG,IAAI,OAAO,CAAC,GAAG,EAAE;QAChC,GAAG,EAAE,MAAM,CAAC,GAAG,IAAI,EAAE;QACrB,UAAU,EAAE,MAAM,CAAC,UAAU;QAC7B,UAAU,EAAE,MAAM,CAAC,UAAU;QAC7B,YAAY,EAAE,MAAM,CAAC,YAAY;QACjC,iBAAiB,EAAE,MAAM,CAAC,iBAAiB;QAC3C,aAAa,EAAE,MAAM,CAAC,aAAa;QACnC,WAAW,EAAE,MAAM,CAAC,WAAW;QAC/B,UAAU,EAAE,MAAM,CAAC,UAAU;QAC7B,UAAU,EAAE,MAAM,CAAC,UAAU;QAC7B,gBAAgB,EAAE,MAAM,CAAC,gBAAgB;QACzC,gBAAgB,EAAE,MAAM,CAAC,gBAAgB;QACzC,gBAAgB,EAAE,MAAM,CAAC,gBAAgB;KAC1C,CAAC;AACJ,CAAC"}
@@ -0,0 +1,14 @@
1
+ import type { DeployRunners } from './runners.js';
2
+ /**
3
+ * Production `DeployRunners`. `runBuild` is intentionally OMITTED here
4
+ * — the deploy command re-uses its own already-parsed
5
+ * `ctx.buildRunners` + calls into `runBuild` from `commands/build.ts`
6
+ * directly (importing the runner would create a cycle). Instead the
7
+ * command reaches for `ctx.buildRunners`; production wires
8
+ * `buildRunners` via `main.ts`'s existing lazy loader.
9
+ *
10
+ * This keeps the deploy path production-wired end-to-end without
11
+ * duplicating the build-runners production loader here.
12
+ */
13
+ export declare const REAL_DEPLOY_RUNNERS: DeployRunners;
14
+ //# sourceMappingURL=defaults.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"defaults.d.ts","sourceRoot":"","sources":["../../src/deploy/defaults.ts"],"names":[],"mappings":"AAiBA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAElD;;;;;;;;;;GAUG;AACH,eAAO,MAAM,mBAAmB,EAAE,aASjC,CAAC"}
@@ -0,0 +1,37 @@
1
+ // SPDX-License-Identifier: Apache-2.0
2
+ // Copyright (C) 2026 Kindgi Inc.
3
+ /**
4
+ * Production wiring for the deploy runners. Lazy-loaded from
5
+ * `main.ts` ONLY when the dispatched command is `deploy` — the
6
+ * `runBuild` runner pulls in the full build defaults tree (esbuild
7
+ * / tar / docker / crypto). Commands that never invoke deploy don't
8
+ * pay that transitive load.
9
+ *
10
+ * The `runBuild` inline-build path is best-effort: if it fails, the
11
+ * error is surfaced via `RunBuildResult.kind = 'err'` — the deploy
12
+ * command translates that into an actionable stderr message.
13
+ */
14
+ import { loadEnvelopeReal } from './envelope-loader.js';
15
+ import { postDeploymentReal, syncSecretsReal } from './post.js';
16
+ /**
17
+ * Production `DeployRunners`. `runBuild` is intentionally OMITTED here
18
+ * — the deploy command re-uses its own already-parsed
19
+ * `ctx.buildRunners` + calls into `runBuild` from `commands/build.ts`
20
+ * directly (importing the runner would create a cycle). Instead the
21
+ * command reaches for `ctx.buildRunners`; production wires
22
+ * `buildRunners` via `main.ts`'s existing lazy loader.
23
+ *
24
+ * This keeps the deploy path production-wired end-to-end without
25
+ * duplicating the build-runners production loader here.
26
+ */
27
+ export const REAL_DEPLOY_RUNNERS = {
28
+ loadEnvelope: loadEnvelopeReal,
29
+ postDeployment: postDeploymentReal,
30
+ // Production sync runner. Only invoked when
31
+ // `--sync-secrets` is passed AND `.env.<envName>` carries entries.
32
+ syncSecrets: syncSecretsReal,
33
+ // runBuild deliberately omitted — the command composes it from
34
+ // `ctx.buildRunners` + the exported `runBuild` from
35
+ // `commands/build.ts`.
36
+ };
37
+ //# sourceMappingURL=defaults.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"defaults.js","sourceRoot":"","sources":["../../src/deploy/defaults.ts"],"names":[],"mappings":"AAAA,sCAAsC;AACtC,iCAAiC;AAEjC;;;;;;;;;;GAUG;AAEH,OAAO,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AACxD,OAAO,EAAE,kBAAkB,EAAE,eAAe,EAAE,MAAM,WAAW,CAAC;AAGhE;;;;;;;;;;GAUG;AACH,MAAM,CAAC,MAAM,mBAAmB,GAAkB;IAChD,YAAY,EAAE,gBAAgB;IAC9B,cAAc,EAAE,kBAAkB;IAClC,4CAA4C;IAC5C,mEAAmE;IACnE,WAAW,EAAE,eAAe;IAC5B,+DAA+D;IAC/D,oDAAoD;IACpD,uBAAuB;CACxB,CAAC"}
@@ -0,0 +1,24 @@
1
+ import { type DeployEnvelope } from '../build/envelope.js';
2
+ import type { LoadEnvelopeResult } from './runners.js';
3
+ /**
4
+ * Structural check + schema pin. On success returns the parsed
5
+ * envelope; on failure returns a typed error the command surfaces to
6
+ * the developer as an actionable message.
7
+ */
8
+ export declare function validateEnvelopeStructure(raw: unknown, path: string): LoadEnvelopeResult;
9
+ /**
10
+ * Read the envelope from disk + validate. Returns typed errors for
11
+ * missing-file / bad-JSON / schema-mismatch cases — the command
12
+ * translates each to an actionable stderr message.
13
+ */
14
+ export declare function loadEnvelopeReal(opts: {
15
+ readonly path: string;
16
+ }): Promise<LoadEnvelopeResult>;
17
+ /**
18
+ * Check whether an envelope is signed. `kindgi deploy` refuses to
19
+ * POST an unsigned envelope unless `--dry-run` is set — the server
20
+ * would reject anyway (400 signature-invalid), so we fail fast with a
21
+ * clearer message.
22
+ */
23
+ export declare function isEnvelopeSigned(envelope: DeployEnvelope): boolean;
24
+ //# sourceMappingURL=envelope-loader.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"envelope-loader.d.ts","sourceRoot":"","sources":["../../src/deploy/envelope-loader.ts"],"names":[],"mappings":"AAkBA,OAAO,EAA0B,KAAK,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACnF,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC;AAEvD;;;;GAIG;AACH,wBAAgB,yBAAyB,CAAC,GAAG,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,GAAG,kBAAkB,CAwExF;AAED;;;;GAIG;AACH,wBAAsB,gBAAgB,CAAC,IAAI,EAAE;IAC3C,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;CACvB,GAAG,OAAO,CAAC,kBAAkB,CAAC,CAgC9B;AAED;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,cAAc,GAAG,OAAO,CASlE"}
@@ -0,0 +1,141 @@
1
+ // SPDX-License-Identifier: Apache-2.0
2
+ // Copyright (C) 2026 Kindgi Inc.
3
+ /**
4
+ * Deploy envelope loader — reads `deploy-envelope.json` (emitted by
5
+ * `kindgi build`) from disk and structurally
6
+ * validates it. The signature itself was computed at build time; we do
7
+ * NOT re-sign here. This loader's job is to catch corruption + partial
8
+ * writes + the "someone hand-edited the file" class of bugs before we
9
+ * put anything on the wire.
10
+ *
11
+ * The result feeds directly into `packages/cli/src/deploy/post.ts`
12
+ * (which strips `tenantId` for the wire body) + into the summary/
13
+ * banner code paths.
14
+ */
15
+ import { readFile } from 'node:fs/promises';
16
+ import { DEPLOY_ENVELOPE_SCHEMA } from '../build/envelope.js';
17
+ /**
18
+ * Structural check + schema pin. On success returns the parsed
19
+ * envelope; on failure returns a typed error the command surfaces to
20
+ * the developer as an actionable message.
21
+ */
22
+ export function validateEnvelopeStructure(raw, path) {
23
+ if (raw === null || typeof raw !== 'object' || Array.isArray(raw)) {
24
+ return {
25
+ kind: 'err',
26
+ code: 'envelope-schema-mismatch',
27
+ message: 'deploy-envelope.json must be a JSON object.',
28
+ path,
29
+ };
30
+ }
31
+ const obj = raw;
32
+ if (obj.$schema !== DEPLOY_ENVELOPE_SCHEMA) {
33
+ return {
34
+ kind: 'err',
35
+ code: 'envelope-schema-mismatch',
36
+ message: `deploy-envelope.json $schema mismatch: expected "${DEPLOY_ENVELOPE_SCHEMA}", got ` +
37
+ `"${String(obj.$schema)}". Re-run \`kindgi build\` to regenerate.`,
38
+ path,
39
+ };
40
+ }
41
+ const requiredStrings = [
42
+ 'imageRef',
43
+ 'imageDigest',
44
+ 'artifactVersion',
45
+ 'indexHash',
46
+ 'tenantId',
47
+ 'publishedAt',
48
+ ];
49
+ for (const field of requiredStrings) {
50
+ const value = obj[field];
51
+ if (typeof value !== 'string' || value.length === 0) {
52
+ return {
53
+ kind: 'err',
54
+ code: 'envelope-schema-mismatch',
55
+ message: `deploy-envelope.json is missing required field "${String(field)}" (or the value is empty). Re-run \`kindgi build\` to regenerate.`,
56
+ path,
57
+ };
58
+ }
59
+ }
60
+ const index = obj.index;
61
+ if (index === null || typeof index !== 'object' || Array.isArray(index)) {
62
+ return {
63
+ kind: 'err',
64
+ code: 'envelope-schema-mismatch',
65
+ message: 'deploy-envelope.json `index` must be an object (verbatim /app/index.json).',
66
+ path,
67
+ };
68
+ }
69
+ // Optional signature triplet: either all three are present, or all
70
+ // three are absent. Half-signed envelopes are corruption.
71
+ const hasSig = typeof obj.signature === 'string' && obj.signature.length > 0;
72
+ const hasKeyId = typeof obj.signerKeyId === 'string' && obj.signerKeyId.length > 0;
73
+ const hasPubKey = typeof obj.signerPublicKey === 'string' && obj.signerPublicKey.length > 0;
74
+ const sigCount = Number(hasSig) + Number(hasKeyId) + Number(hasPubKey);
75
+ if (sigCount !== 0 && sigCount !== 3) {
76
+ return {
77
+ kind: 'err',
78
+ code: 'envelope-schema-mismatch',
79
+ message: 'deploy-envelope.json has a partial signature triplet — expected all ' +
80
+ 'three of `signature` / `signerKeyId` / `signerPublicKey`, or none of ' +
81
+ 'them. Re-run `kindgi build` (drop `--skip-sign` if you intended to sign).',
82
+ path,
83
+ };
84
+ }
85
+ return { kind: 'ok', envelope: obj };
86
+ }
87
+ /**
88
+ * Read the envelope from disk + validate. Returns typed errors for
89
+ * missing-file / bad-JSON / schema-mismatch cases — the command
90
+ * translates each to an actionable stderr message.
91
+ */
92
+ export async function loadEnvelopeReal(opts) {
93
+ let raw;
94
+ try {
95
+ raw = await readFile(opts.path, 'utf8');
96
+ }
97
+ catch (err) {
98
+ if (err.code === 'ENOENT') {
99
+ return {
100
+ kind: 'err',
101
+ code: 'envelope-not-found',
102
+ message: `deploy-envelope.json not found at ${opts.path}.`,
103
+ path: opts.path,
104
+ };
105
+ }
106
+ return {
107
+ kind: 'err',
108
+ code: 'envelope-not-found',
109
+ message: `Failed to read ${opts.path}: ${err.message}`,
110
+ path: opts.path,
111
+ };
112
+ }
113
+ let parsed;
114
+ try {
115
+ parsed = JSON.parse(raw);
116
+ }
117
+ catch (err) {
118
+ return {
119
+ kind: 'err',
120
+ code: 'envelope-invalid-json',
121
+ message: `deploy-envelope.json is not valid JSON: ${err.message}`,
122
+ path: opts.path,
123
+ };
124
+ }
125
+ return validateEnvelopeStructure(parsed, opts.path);
126
+ }
127
+ /**
128
+ * Check whether an envelope is signed. `kindgi deploy` refuses to
129
+ * POST an unsigned envelope unless `--dry-run` is set — the server
130
+ * would reject anyway (400 signature-invalid), so we fail fast with a
131
+ * clearer message.
132
+ */
133
+ export function isEnvelopeSigned(envelope) {
134
+ return (typeof envelope.signature === 'string' &&
135
+ envelope.signature.length > 0 &&
136
+ typeof envelope.signerKeyId === 'string' &&
137
+ envelope.signerKeyId.length > 0 &&
138
+ typeof envelope.signerPublicKey === 'string' &&
139
+ envelope.signerPublicKey.length > 0);
140
+ }
141
+ //# sourceMappingURL=envelope-loader.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"envelope-loader.js","sourceRoot":"","sources":["../../src/deploy/envelope-loader.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,48 @@
1
+ import type { DeployEnvelope } from '../build/envelope.js';
2
+ import type { PostDeploymentBody, PostDeploymentOptions, PostDeploymentResult, SyncSecretsBody, SyncSecretsOptions, SyncSecretsResult } from './runners.js';
3
+ /**
4
+ * Build the exact wire body per
5
+ * `packages/api/src/openapi/schemas.ts:3141` — the
6
+ * `DeploymentRegistrationBodySchema`. `tenantId` is deliberately
7
+ * absent (server-derived from the token); the envelope's signature
8
+ * covers it via re-canonicalisation on the server.
9
+ *
10
+ * `$schema` (envelope-side namespace pin) and `buildLogsUrl` (build-
11
+ * server URL, only useful for humans debugging failed builds) are
12
+ * client-side metadata — not part of the deployment wire contract.
13
+ */
14
+ export declare function buildPostBody(envelope: DeployEnvelope): PostDeploymentBody;
15
+ /**
16
+ * `sha256:<hex>` over the canonical (sorted-key, no-whitespace) JSON
17
+ * representation of the wire body. Matches the sha256 shape every other hash in the framework uses.
18
+ *
19
+ * The idempotency middleware on `packages/api` caches the full HTTP
20
+ * response by `(tenantId, Idempotency-Key)`. Same body → same key →
21
+ * same cached response (201 or 200-replay). Different body + same
22
+ * key → server returns `idempotency-key-conflict`.
23
+ */
24
+ export declare function deriveIdempotencyKey(body: PostDeploymentBody): string;
25
+ /**
26
+ * Production `postDeployment` runner. Executes the HTTP POST, parses
27
+ * the response, discriminates the outcome. Tests substitute this whole
28
+ * function via `DeployRunners.postDeployment` to keep the wire
29
+ * synthetic.
30
+ */
31
+ export declare function postDeploymentReal(opts: PostDeploymentOptions): Promise<PostDeploymentResult>;
32
+ /**
33
+ * Derive the Idempotency-Key for a sync-secrets POST. Same shape as
34
+ * `deriveIdempotencyKey` for deployments (sha256 of canonical body) —
35
+ * so a re-run of the same deploy with the same `.env.<envName>` sends
36
+ * the same key and the server middleware caches the response.
37
+ */
38
+ export declare function deriveSyncSecretsIdempotencyKey(deploymentId: string, body: SyncSecretsBody): string;
39
+ /**
40
+ * Production `syncSecrets` runner. Executes
41
+ * `POST /v1/deployments/:deploymentId/secrets` — the wire body carries
42
+ * plaintext `value` entries at the developer boundary; the server
43
+ * responds with references only. Errors surface as `wire-error` (with
44
+ * the server's error code preserved for the CLI banner) or
45
+ * `transport-error`.
46
+ */
47
+ export declare function syncSecretsReal(opts: SyncSecretsOptions): Promise<SyncSecretsResult>;
48
+ //# sourceMappingURL=post.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"post.d.ts","sourceRoot":"","sources":["../../src/deploy/post.ts"],"names":[],"mappings":"AA0BA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAC3D,OAAO,KAAK,EAEV,kBAAkB,EAClB,qBAAqB,EACrB,oBAAoB,EACpB,eAAe,EACf,kBAAkB,EAClB,iBAAiB,EAElB,MAAM,cAAc,CAAC;AAEtB;;;;;;;;;;GAUG;AACH,wBAAgB,aAAa,CAAC,QAAQ,EAAE,cAAc,GAAG,kBAAkB,CAuB1E;AAED;;;;;;;;GAQG;AACH,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,kBAAkB,GAAG,MAAM,CAIrE;AAED;;;;;GAKG;AACH,wBAAsB,kBAAkB,CACtC,IAAI,EAAE,qBAAqB,GAC1B,OAAO,CAAC,oBAAoB,CAAC,CA2D/B;AAaD;;;;;GAKG;AACH,wBAAgB,+BAA+B,CAC7C,YAAY,EAAE,MAAM,EACpB,IAAI,EAAE,eAAe,GACpB,MAAM,CAIR;AAED;;;;;;;GAOG;AACH,wBAAsB,eAAe,CAAC,IAAI,EAAE,kBAAkB,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAgD1F"}