@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,210 @@
1
+ // SPDX-License-Identifier: Apache-2.0
2
+ // Copyright (C) 2026 Kindgi Inc.
3
+ /**
4
+ * `POST /v1/deployments` wire adapter. Two exports:
5
+ *
6
+ * - `buildPostBody(envelope)` — strips `tenantId` + `$schema` +
7
+ * `buildLogsUrl` from the envelope; the server derives `tenantId`
8
+ * from the bearer token and returns 400 signature-invalid if the
9
+ * signed envelope's tenantId doesn't match. `buildLogsUrl` is CLI-
10
+ * local metadata, not part of the wire contract.
11
+ *
12
+ * - `deriveIdempotencyKey(body)` — `sha256:<hex>` over the
13
+ * canonicalised POST body; matches every other hash shape in the
14
+ * codebase. Callers can override via
15
+ * `--idempotency-key <str>` for CI re-runs that manage keys
16
+ * externally.
17
+ *
18
+ * - `postDeploymentReal(opts)` — the production runner: does the
19
+ * actual HTTP POST via the caller-supplied `fetchImpl`, parses the
20
+ * server's response, discriminates 201 / 200 / 4xx / 5xx.
21
+ */
22
+ import { createHash } from 'node:crypto';
23
+ import { stableStringify } from '../build/envelope.js';
24
+ /**
25
+ * Build the exact wire body per
26
+ * `packages/api/src/openapi/schemas.ts:3141` — the
27
+ * `DeploymentRegistrationBodySchema`. `tenantId` is deliberately
28
+ * absent (server-derived from the token); the envelope's signature
29
+ * covers it via re-canonicalisation on the server.
30
+ *
31
+ * `$schema` (envelope-side namespace pin) and `buildLogsUrl` (build-
32
+ * server URL, only useful for humans debugging failed builds) are
33
+ * client-side metadata — not part of the deployment wire contract.
34
+ */
35
+ export function buildPostBody(envelope) {
36
+ if (envelope.signerKeyId === undefined ||
37
+ envelope.signerPublicKey === undefined ||
38
+ envelope.signature === undefined) {
39
+ // Should not happen — the caller pre-validates via `isEnvelopeSigned`.
40
+ // We throw here (as opposed to returning Result) because it's a
41
+ // programmer error, not user error.
42
+ throw new Error('buildPostBody() called on an unsigned envelope. Check with `isEnvelopeSigned` first.');
43
+ }
44
+ return {
45
+ imageRef: envelope.imageRef,
46
+ artifactVersion: envelope.artifactVersion,
47
+ index: envelope.index,
48
+ indexHash: envelope.indexHash,
49
+ signerKeyId: envelope.signerKeyId,
50
+ signerPublicKey: envelope.signerPublicKey,
51
+ signature: envelope.signature,
52
+ publishedAt: envelope.publishedAt,
53
+ };
54
+ }
55
+ /**
56
+ * `sha256:<hex>` over the canonical (sorted-key, no-whitespace) JSON
57
+ * representation of the wire body. Matches the sha256 shape every other hash in the framework uses.
58
+ *
59
+ * The idempotency middleware on `packages/api` caches the full HTTP
60
+ * response by `(tenantId, Idempotency-Key)`. Same body → same key →
61
+ * same cached response (201 or 200-replay). Different body + same
62
+ * key → server returns `idempotency-key-conflict`.
63
+ */
64
+ export function deriveIdempotencyKey(body) {
65
+ const canonical = stableStringify(body);
66
+ const hex = createHash('sha256').update(canonical).digest('hex');
67
+ return `sha256:${hex}`;
68
+ }
69
+ /**
70
+ * Production `postDeployment` runner. Executes the HTTP POST, parses
71
+ * the response, discriminates the outcome. Tests substitute this whole
72
+ * function via `DeployRunners.postDeployment` to keep the wire
73
+ * synthetic.
74
+ */
75
+ export async function postDeploymentReal(opts) {
76
+ const url = `${opts.endpoint.replace(/\/+$/, '')}/v1/deployments`;
77
+ let res;
78
+ try {
79
+ res = await opts.fetchImpl(url, {
80
+ method: 'POST',
81
+ headers: {
82
+ Authorization: `Bearer ${opts.token}`,
83
+ 'Content-Type': 'application/json',
84
+ 'Idempotency-Key': opts.idempotencyKey,
85
+ },
86
+ body: JSON.stringify(opts.body),
87
+ ...(opts.signal !== undefined && { signal: opts.signal }),
88
+ });
89
+ }
90
+ catch (err) {
91
+ return {
92
+ kind: 'transport-error',
93
+ message: `POST ${url} failed: ${err.message}`,
94
+ };
95
+ }
96
+ let body = null;
97
+ try {
98
+ body = await res.json();
99
+ }
100
+ catch {
101
+ // Non-JSON body — treat as transport-level failure.
102
+ return {
103
+ kind: 'transport-error',
104
+ message: `POST ${url} returned HTTP ${res.status} with non-JSON body`,
105
+ };
106
+ }
107
+ if (res.status === 201) {
108
+ return {
109
+ kind: 'created',
110
+ status: 201,
111
+ record: body,
112
+ };
113
+ }
114
+ if (res.status === 200) {
115
+ return {
116
+ kind: 'replayed',
117
+ status: 200,
118
+ record: body,
119
+ };
120
+ }
121
+ // 4xx / 5xx — the api-server wraps errors in `{ error: { code,
122
+ // message, ...details } }` via `toWireError` in
123
+ // `packages/api/src/errors.ts`.
124
+ const wire = body;
125
+ const code = wire?.error?.code ?? `http-${res.status}`;
126
+ const message = wire?.error?.message ?? `HTTP ${res.status}`;
127
+ const details = extractDetails(wire?.error);
128
+ return {
129
+ kind: 'wire-error',
130
+ status: res.status,
131
+ error: { code, message, ...(details !== undefined && { details }) },
132
+ };
133
+ }
134
+ function extractDetails(err) {
135
+ if (err === undefined)
136
+ return undefined;
137
+ const issues = err.issues;
138
+ if (Array.isArray(issues)) {
139
+ return issues;
140
+ }
141
+ return undefined;
142
+ }
143
+ /**
144
+ * Derive the Idempotency-Key for a sync-secrets POST. Same shape as
145
+ * `deriveIdempotencyKey` for deployments (sha256 of canonical body) —
146
+ * so a re-run of the same deploy with the same `.env.<envName>` sends
147
+ * the same key and the server middleware caches the response.
148
+ */
149
+ export function deriveSyncSecretsIdempotencyKey(deploymentId, body) {
150
+ const canonical = stableStringify({ deploymentId, ...body });
151
+ const hex = createHash('sha256').update(canonical).digest('hex');
152
+ return `sha256:${hex}`;
153
+ }
154
+ /**
155
+ * Production `syncSecrets` runner. Executes
156
+ * `POST /v1/deployments/:deploymentId/secrets` — the wire body carries
157
+ * plaintext `value` entries at the developer boundary; the server
158
+ * responds with references only. Errors surface as `wire-error` (with
159
+ * the server's error code preserved for the CLI banner) or
160
+ * `transport-error`.
161
+ */
162
+ export async function syncSecretsReal(opts) {
163
+ const url = `${opts.endpoint.replace(/\/+$/, '')}/v1/deployments/${encodeURIComponent(opts.deploymentId)}/secrets`;
164
+ let res;
165
+ try {
166
+ res = await opts.fetchImpl(url, {
167
+ method: 'POST',
168
+ headers: {
169
+ Authorization: `Bearer ${opts.token}`,
170
+ 'Content-Type': 'application/json',
171
+ 'Idempotency-Key': opts.idempotencyKey,
172
+ },
173
+ body: JSON.stringify(opts.body),
174
+ ...(opts.signal !== undefined && { signal: opts.signal }),
175
+ });
176
+ }
177
+ catch (err) {
178
+ return {
179
+ kind: 'transport-error',
180
+ message: `POST ${url} failed: ${err.message}`,
181
+ };
182
+ }
183
+ let body = null;
184
+ try {
185
+ body = await res.json();
186
+ }
187
+ catch {
188
+ return {
189
+ kind: 'transport-error',
190
+ message: `POST ${url} returned HTTP ${res.status} with non-JSON body`,
191
+ };
192
+ }
193
+ if (res.status === 200) {
194
+ return {
195
+ kind: 'ok',
196
+ status: 200,
197
+ response: body,
198
+ };
199
+ }
200
+ const wire = body;
201
+ return {
202
+ kind: 'wire-error',
203
+ status: res.status,
204
+ error: {
205
+ code: wire?.error?.code ?? `http-${res.status}`,
206
+ message: wire?.error?.message ?? `HTTP ${res.status}`,
207
+ },
208
+ };
209
+ }
210
+ //# sourceMappingURL=post.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"post.js","sourceRoot":"","sources":["../../src/deploy/post.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,42 @@
1
+ /**
2
+ * Deploy response formatters — turn a `PostDeploymentResult` into the
3
+ * banner lines + JSON summary the command emits. Split out from
4
+ * `commands/deploy.ts` so tests can pin the exact text without
5
+ * exercising the full runCli path.
6
+ */
7
+ import type { DeploymentRecord, PostDeploymentResult } from './runners.js';
8
+ export interface RenderedResponse {
9
+ /** Lines to append to the stderr banner. */
10
+ readonly banner: readonly string[];
11
+ /** The value to render as JSON on stdout. `null` for error outcomes. */
12
+ readonly summary: Record<string, unknown> | null;
13
+ /** Exit code the command should return. */
14
+ readonly exitCode: number;
15
+ }
16
+ /**
17
+ * Render a POST outcome. Includes the "what the developer sees"
18
+ * summary for 201/200 outcomes + code-specific hints for 4xx.
19
+ */
20
+ export declare function renderResponse(result: PostDeploymentResult, ctx: {
21
+ readonly envName: string;
22
+ readonly endpoint: string;
23
+ readonly imageRef: string;
24
+ readonly artifactVersion: string;
25
+ readonly indexHash: string;
26
+ readonly indexCounts: Readonly<{
27
+ tools: number;
28
+ guardrails: number;
29
+ agents: number;
30
+ flows: number;
31
+ }>;
32
+ readonly signerKeyId: string;
33
+ readonly envelopePath: string;
34
+ readonly idempotencyKey: string;
35
+ }): RenderedResponse;
36
+ /**
37
+ * Pretty-print the primitive counts on one line
38
+ * ("primitives: 5 tools, 1 guardrail, 2 agents"). Handles pluralisation
39
+ * (`guardrail` vs `guardrails` etc.).
40
+ */
41
+ export declare function primitivesLine(p: DeploymentRecord['primitives']): string;
42
+ //# sourceMappingURL=response.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"response.d.ts","sourceRoot":"","sources":["../../src/deploy/response.ts"],"names":[],"mappings":"AAGA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,gBAAgB,EAAE,oBAAoB,EAAE,MAAM,cAAc,CAAC;AA8B3E,MAAM,WAAW,gBAAgB;IAC/B,4CAA4C;IAC5C,QAAQ,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,CAAC;IACnC,wEAAwE;IACxE,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC;IACjD,2CAA2C;IAC3C,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;CAC3B;AAED;;;GAGG;AACH,wBAAgB,cAAc,CAC5B,MAAM,EAAE,oBAAoB,EAC5B,GAAG,EAAE;IACH,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAC;IACjC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,WAAW,EAAE,QAAQ,CAAC;QAC7B,KAAK,EAAE,MAAM,CAAC;QACd,UAAU,EAAE,MAAM,CAAC;QACnB,MAAM,EAAE,MAAM,CAAC;QACf,KAAK,EAAE,MAAM,CAAC;KACf,CAAC,CAAC;IACH,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;CACjC,GACA,gBAAgB,CAiFlB;AAED;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,CAAC,EAAE,gBAAgB,CAAC,YAAY,CAAC,GAAG,MAAM,CAOxE"}
@@ -0,0 +1,128 @@
1
+ // SPDX-License-Identifier: Apache-2.0
2
+ // Copyright (C) 2026 Kindgi Inc.
3
+ /**
4
+ * Human-friendly hint text keyed by server wire-error code. Each hint
5
+ * points the developer at the most likely remedy. Unknown codes fall
6
+ * through to a generic "check server logs" line.
7
+ */
8
+ const WIRE_ERROR_HINTS = {
9
+ 'signature-invalid': 'Check that --tenant matches the tenant your token authenticates as. ' +
10
+ "The server re-canonicalises the envelope using the token's tenantId; " +
11
+ 'a mismatch fails signature verification.',
12
+ 'signer-not-trusted': "The signing key's public key is not on this tenant's trust list. " +
13
+ 'Print it with `kindgi key export <keyId>` and have your Kindgi operator ' +
14
+ 'add it to the trust list (SigningKeyBinding).',
15
+ 'image-unverifiable': 'The server could not pull the image or the extracted /app/index.json ' +
16
+ 'sha256 did not match the signed indexHash. Verify the build server ' +
17
+ 'pushed to the same registry the deployment tenant can pull from, and ' +
18
+ 'that the imageRef in the envelope is digest-pinned.',
19
+ 'deployment-validation-failed': 'One or more primitives in the pack failed server-side validation. ' +
20
+ 'The `details[]` array below names each failing primitive + path + ' +
21
+ 'message. Fix locally + re-run `kindgi build`.',
22
+ 'bad-input': 'The wire body was malformed. Regenerate the envelope with ' +
23
+ '`kindgi build` — a partial write on disk can cause this.',
24
+ };
25
+ /**
26
+ * Render a POST outcome. Includes the "what the developer sees"
27
+ * summary for 201/200 outcomes + code-specific hints for 4xx.
28
+ */
29
+ export function renderResponse(result, ctx) {
30
+ if (result.kind === 'created' || result.kind === 'replayed') {
31
+ const banner = [];
32
+ banner.push(' Registering deployment');
33
+ const statusLabel = result.kind === 'created' ? '201 Created' : '200 OK (idempotent replay)';
34
+ banner.push(` ✓ POST /v1/deployments → ${statusLabel}`);
35
+ banner.push(` deploymentId: ${result.record.deploymentId}`);
36
+ banner.push(` artifactVersion: ${result.record.artifactVersion}`);
37
+ banner.push(` primitives: ${primitivesLine(result.record.primitives)}`);
38
+ banner.push(` activatedAt: ${result.record.activatedAt}`);
39
+ banner.push('');
40
+ if (result.kind === 'replayed') {
41
+ banner.push(' Note: same imageDigest previously landed. Server returned the existing record.');
42
+ banner.push(` Runs already in flight continue on their pinned image (${result.record.imageDigest.slice(0, 20)}…).`);
43
+ }
44
+ else {
45
+ banner.push(' Deploy complete.');
46
+ banner.push(` Runs started from now use image ${result.record.imageDigest.slice(0, 20)}… ` +
47
+ `(artifactVersion ${result.record.artifactVersion}).`);
48
+ banner.push(' Runs already in flight continue on their pinned image.');
49
+ }
50
+ banner.push('');
51
+ const summary = {
52
+ envName: ctx.envName,
53
+ endpoint: ctx.endpoint,
54
+ envelopePath: ctx.envelopePath,
55
+ idempotencyKey: ctx.idempotencyKey,
56
+ status: result.status,
57
+ outcome: result.kind === 'created' ? 'created' : 'replayed',
58
+ deployment: result.record,
59
+ };
60
+ return { banner, summary, exitCode: 0 };
61
+ }
62
+ if (result.kind === 'wire-error') {
63
+ const banner = [];
64
+ banner.push(' Registering deployment');
65
+ banner.push(` ✗ POST /v1/deployments → HTTP ${result.status}`);
66
+ banner.push(` code: ${result.error.code}`);
67
+ banner.push(` message: ${result.error.message}`);
68
+ const hint = WIRE_ERROR_HINTS[result.error.code];
69
+ if (hint !== undefined) {
70
+ banner.push('');
71
+ banner.push(' Hint:');
72
+ for (const line of wrapForBanner(hint, 74, ' ')) {
73
+ banner.push(line);
74
+ }
75
+ }
76
+ if (result.error.details !== undefined && result.error.details.length > 0) {
77
+ banner.push('');
78
+ banner.push(' Details:');
79
+ for (const detail of result.error.details) {
80
+ banner.push(` · ${JSON.stringify(detail)}`);
81
+ }
82
+ }
83
+ if (result.status >= 500) {
84
+ banner.push('');
85
+ banner.push(' This is a server error — check the api-server logs. Idempotent-safe to retry.');
86
+ }
87
+ banner.push('');
88
+ return { banner, summary: null, exitCode: 1 };
89
+ }
90
+ // transport-error
91
+ const banner = [];
92
+ banner.push(' Registering deployment');
93
+ banner.push(' ✗ POST /v1/deployments → transport failure');
94
+ banner.push(` ${result.message}`);
95
+ banner.push('');
96
+ banner.push(' Check network connectivity + endpoint URL. Idempotent-safe to retry with the same key.');
97
+ banner.push('');
98
+ return { banner, summary: null, exitCode: 1 };
99
+ }
100
+ /**
101
+ * Pretty-print the primitive counts on one line
102
+ * ("primitives: 5 tools, 1 guardrail, 2 agents"). Handles pluralisation
103
+ * (`guardrail` vs `guardrails` etc.).
104
+ */
105
+ export function primitivesLine(p) {
106
+ const parts = [];
107
+ parts.push(`${p.tools} ${p.tools === 1 ? 'tool' : 'tools'}`);
108
+ parts.push(`${p.guardrails} ${p.guardrails === 1 ? 'guardrail' : 'guardrails'}`);
109
+ parts.push(`${p.agents} ${p.agents === 1 ? 'agent' : 'agents'}`);
110
+ parts.push(`${p.flows} ${p.flows === 1 ? 'flow' : 'flows'}`);
111
+ return parts.join(', ');
112
+ }
113
+ function wrapForBanner(text, width, indent) {
114
+ const words = text.split(/\s+/);
115
+ const lines = [];
116
+ let current = indent;
117
+ for (const word of words) {
118
+ if (current.length + word.length + 1 > width && current !== indent) {
119
+ lines.push(current);
120
+ current = indent;
121
+ }
122
+ current += (current === indent ? '' : ' ') + word;
123
+ }
124
+ if (current !== indent)
125
+ lines.push(current);
126
+ return lines;
127
+ }
128
+ //# sourceMappingURL=response.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"response.js","sourceRoot":"","sources":["../../src/deploy/response.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,218 @@
1
+ /**
2
+ * Injectable seams for `kindgi deploy` — the client-side POST
3
+ * orchestrator that lands a signed pack image on a Kindgi runtime
4
+ * (the one deployment wire call). Every side effect flows through this interface so tests
5
+ * substitute fixtures without ever booting `kindgi build` or hitting
6
+ * a real api-server.
7
+ *
8
+ * Three slots — the shape of the pipeline `commands/deploy.ts`
9
+ * composes:
10
+ *
11
+ * 1. `runBuild` — inline `kindgi build` when the envelope isn't
12
+ * already on disk. Composed from a fresh `BuildRunners` set (the
13
+ * command wires its own `ctx.buildRunners` through).
14
+ * 2. `loadEnvelope` — read + JSON-parse `deploy-envelope.json` from a
15
+ * resolved absolute path.
16
+ * 3. `postDeployment` — POST the built body to `/v1/deployments`,
17
+ * returning the parsed response record (or the wire error).
18
+ *
19
+ * The build inline step reuses the exact same `BuildRunners` seam
20
+ * `kindgi build` uses — no fresh interface, no duplicated
21
+ * plumbing. `kindgi deploy` = `kindgi build` + one more POST.
22
+ */
23
+ import type { DeployEnvelope } from '../build/envelope.js';
24
+ export interface LoadEnvelopeOptions {
25
+ readonly path: string;
26
+ }
27
+ export type LoadEnvelopeResult = {
28
+ readonly kind: 'ok';
29
+ readonly envelope: DeployEnvelope;
30
+ } | {
31
+ readonly kind: 'err';
32
+ readonly code: 'envelope-not-found' | 'envelope-invalid-json' | 'envelope-schema-mismatch';
33
+ readonly message: string;
34
+ readonly path: string;
35
+ };
36
+ /**
37
+ * Exact wire body per `packages/api/src/openapi/schemas.ts`'s
38
+ * `DeploymentRegistrationBodySchema`. `tenantId` is deliberately absent
39
+ * — the server derives it from the bearer token. The client's signed
40
+ * envelope MUST have signed against the same tenantId the token
41
+ * authenticates as, or the server rejects with `signature-invalid`.
42
+ */
43
+ export interface PostDeploymentBody {
44
+ readonly imageRef: string;
45
+ readonly artifactVersion: string;
46
+ readonly index: Readonly<Record<string, unknown>>;
47
+ readonly indexHash: string;
48
+ readonly signerKeyId: string;
49
+ readonly signerPublicKey: string;
50
+ readonly signature: string;
51
+ readonly publishedAt: string;
52
+ }
53
+ /**
54
+ * Wire response for `POST /v1/deployments` — the `DeploymentRecord`
55
+ * shape from `packages/api/src/openapi/schemas.ts:3071`.
56
+ */
57
+ export interface DeploymentRecord {
58
+ readonly deploymentId: string;
59
+ readonly tenantId: string;
60
+ readonly imageRef: string;
61
+ readonly imageDigest: string;
62
+ readonly artifactVersion: string;
63
+ readonly indexHash: string;
64
+ readonly signerKeyId: string;
65
+ readonly signerPublicKey: string;
66
+ readonly signature: string;
67
+ readonly publishedAt: string;
68
+ readonly activatedAt: string;
69
+ readonly primitives: {
70
+ readonly tools: number;
71
+ readonly guardrails: number;
72
+ readonly agents: number;
73
+ readonly flows: number;
74
+ };
75
+ }
76
+ export interface PostDeploymentOptions {
77
+ readonly endpoint: string;
78
+ readonly token: string;
79
+ readonly body: PostDeploymentBody;
80
+ readonly idempotencyKey: string;
81
+ readonly fetchImpl: typeof fetch;
82
+ readonly signal?: AbortSignal;
83
+ }
84
+ export type PostDeploymentResult = {
85
+ readonly kind: 'created';
86
+ readonly status: 201;
87
+ readonly record: DeploymentRecord;
88
+ } | {
89
+ readonly kind: 'replayed';
90
+ readonly status: 200;
91
+ readonly record: DeploymentRecord;
92
+ } | {
93
+ readonly kind: 'wire-error';
94
+ readonly status: number;
95
+ readonly error: {
96
+ readonly code: string;
97
+ readonly message: string;
98
+ readonly details?: readonly Record<string, unknown>[];
99
+ };
100
+ } | {
101
+ readonly kind: 'transport-error';
102
+ readonly message: string;
103
+ };
104
+ export interface RunBuildOptions {
105
+ /**
106
+ * The parsed CLI options the build command would consume. The deploy
107
+ * command derives this from its own flag set + the resolved env
108
+ * block. Kept opaque so `deploy` doesn't need to know every flag
109
+ * `build` accepts.
110
+ */
111
+ readonly buildArgv: readonly string[];
112
+ /**
113
+ * The pack directory (`--path`) — resolved absolute path. The build
114
+ * inline step needs it to load `kindgi.config.ts` and locate the
115
+ * default `.kindgi/build/` output.
116
+ */
117
+ readonly packDir: string;
118
+ }
119
+ export type RunBuildResult = {
120
+ readonly kind: 'ok';
121
+ /** Absolute path of the freshly-emitted `deploy-envelope.json`. */
122
+ readonly envelopePath: string;
123
+ /** Human-readable banner lines from the underlying build. */
124
+ readonly banner: string;
125
+ } | {
126
+ readonly kind: 'err';
127
+ readonly exitCode: number;
128
+ readonly stderr: string;
129
+ };
130
+ /**
131
+ * Wire body for `POST /v1/deployments/:deploymentId/secrets`. Mirror
132
+ * of the server-side `DeploymentSecretsSyncRequestSchema` in
133
+ * `packages/api/src/openapi/schemas.ts`. Each entry sets exactly one
134
+ * of `ref` (validate-only) or `value` (write new version).
135
+ *
136
+ * The CLI only emits `{ name, value }` entries — the `.env.<envName>`
137
+ * file carries plaintext values, and the server-side scope is derived
138
+ * from the deployment row itself (never the wire).
139
+ */
140
+ export interface SyncSecretsBody {
141
+ readonly envName: string;
142
+ readonly secrets: readonly ({
143
+ readonly name: string;
144
+ readonly ref: string;
145
+ } | {
146
+ readonly name: string;
147
+ readonly value: string;
148
+ })[];
149
+ }
150
+ export interface SyncSecretsReference {
151
+ readonly name: string;
152
+ readonly ref: string;
153
+ readonly version: number;
154
+ }
155
+ export interface SyncSecretsSuccess {
156
+ readonly resolved: number;
157
+ readonly added: number;
158
+ readonly references: readonly SyncSecretsReference[];
159
+ }
160
+ export interface SyncSecretsOptions {
161
+ readonly endpoint: string;
162
+ readonly token: string;
163
+ readonly deploymentId: string;
164
+ readonly body: SyncSecretsBody;
165
+ readonly idempotencyKey: string;
166
+ readonly fetchImpl: typeof fetch;
167
+ readonly signal?: AbortSignal;
168
+ }
169
+ export type SyncSecretsResult = {
170
+ readonly kind: 'ok';
171
+ readonly status: 200;
172
+ readonly response: SyncSecretsSuccess;
173
+ } | {
174
+ readonly kind: 'wire-error';
175
+ readonly status: number;
176
+ readonly error: {
177
+ readonly code: string;
178
+ readonly message: string;
179
+ };
180
+ } | {
181
+ readonly kind: 'transport-error';
182
+ readonly message: string;
183
+ };
184
+ /**
185
+ * Injected seams the `deploy` command consumes. Every side effect must
186
+ * pass through one of these — no `fetch()` inside `commands/deploy.ts`,
187
+ * no direct filesystem writes outside `loadEnvelope`, no inline build
188
+ * outside `runBuild`. Tests substitute per-field to exercise every
189
+ * branch without ever booting `kindgi build`, hitting a real
190
+ * api-server, or reading a real envelope file.
191
+ */
192
+ export interface DeployRunners {
193
+ /** Read `deploy-envelope.json` from disk + structurally validate. */
194
+ readonly loadEnvelope: (opts: LoadEnvelopeOptions) => Promise<LoadEnvelopeResult>;
195
+ /** POST the deployment body to `/v1/deployments`. */
196
+ readonly postDeployment: (opts: PostDeploymentOptions) => Promise<PostDeploymentResult>;
197
+ /**
198
+ * Inline-build fallback used when no `deploy-envelope.json` is present
199
+ * on disk and `--from-envelope` was not explicitly supplied.
200
+ * Production wiring shells out (in-process) to the same `runBuild`
201
+ * exported from `commands/build.ts`, threading the current
202
+ * `ctx.buildRunners` through so tests keep control of every stage.
203
+ * Absent in test fixtures that supply their own envelope — the
204
+ * command surfaces a clear error if inline build is required but no
205
+ * runner is wired.
206
+ */
207
+ readonly runBuild?: (opts: RunBuildOptions) => Promise<RunBuildResult>;
208
+ /**
209
+ * Post-deploy secret sync. Called ONLY when the
210
+ * user passes `--sync-secrets` AND a local `.env.<envName>` file
211
+ * carries entries. POSTs plaintext values (the wire-carry point is
212
+ * the developer boundary; the server responds with references
213
+ * only). Absent runner in tests → the command surfaces a clear
214
+ * "runner not wired" error even when the flag is passed.
215
+ */
216
+ readonly syncSecrets?: (opts: SyncSecretsOptions) => Promise<SyncSecretsResult>;
217
+ }
218
+ //# sourceMappingURL=runners.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"runners.d.ts","sourceRoot":"","sources":["../../src/deploy/runners.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ // SPDX-License-Identifier: Apache-2.0
2
+ // Copyright (C) 2026 Kindgi Inc.
3
+ export {};
4
+ //# sourceMappingURL=runners.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"runners.js","sourceRoot":"","sources":["../../src/deploy/runners.ts"],"names":[],"mappings":"AAAA,sCAAsC;AACtC,iCAAiC"}
@@ -0,0 +1,10 @@
1
+ import type { PackBuilder } from './runners.js';
2
+ export interface DevPackBuilderOptions {
3
+ readonly packDir: string;
4
+ /** The pack's discovery patterns. */
5
+ readonly patterns: readonly string[];
6
+ /** The pack's `kindgi.config.*`, whose imports count among the externals. */
7
+ readonly configPath?: string;
8
+ }
9
+ export declare function createDevPackBuilder(options: DevPackBuilderOptions): PackBuilder;
10
+ //# sourceMappingURL=bundler.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bundler.d.ts","sourceRoot":"","sources":["../../src/dev/bundler.ts"],"names":[],"mappings":"AAsCA,OAAO,KAAK,EAA8B,WAAW,EAAE,MAAM,cAAc,CAAC;AAE5E,MAAM,WAAW,qBAAqB;IACpC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,qCAAqC;IACrC,QAAQ,CAAC,QAAQ,EAAE,SAAS,MAAM,EAAE,CAAC;IACrC,6EAA6E;IAC7E,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;CAC9B;AAKD,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,qBAAqB,GAAG,WAAW,CAuHhF"}