@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,443 @@
1
+ // SPDX-License-Identifier: Apache-2.0
2
+ // Copyright (C) 2026 Kindgi Inc.
3
+ import { readFile, readdir, stat } from 'node:fs/promises';
4
+ import { dirname, isAbsolute, join, relative, resolve, sep } from 'node:path';
5
+ import { createGlobMatcher } from '@kindgi/handler-runtime';
6
+ import { parse as parseYaml } from 'yaml';
7
+ import { forbiddenReason } from './context-files.js';
8
+ const LOCKFILES = [
9
+ ['pnpm-lock.yaml', 'pnpm'],
10
+ ['package-lock.json', 'npm'],
11
+ ['npm-shrinkwrap.json', 'npm'],
12
+ ['yarn.lock', 'yarn'],
13
+ ['bun.lock', 'bun'],
14
+ ['bun.lockb', 'bun'],
15
+ ];
16
+ const DEPENDENCY_FIELDS = [
17
+ 'dependencies',
18
+ 'devDependencies',
19
+ 'optionalDependencies',
20
+ 'peerDependencies',
21
+ ];
22
+ /** What a pack image installs, for the pack at `packDir`. */
23
+ export async function resolveHostInstall(packDir) {
24
+ const found = await findLockfile(resolve(packDir));
25
+ if (found === undefined) {
26
+ return {
27
+ kind: 'err',
28
+ message: `No lockfile at or above ${packDir}. A pack image installs the app's dependencies from its lockfile: run the app's install (pnpm, npm or yarn) so it writes one.`,
29
+ };
30
+ }
31
+ const { root, lockfile, manager } = found;
32
+ if (manager === 'bun') {
33
+ return { kind: 'err', message: `${lockfile}: bun isn't supported for pack images yet; use pnpm, npm or yarn.` };
34
+ }
35
+ const rootManifest = await readManifest(join(root, 'package.json'));
36
+ if (rootManifest === undefined) {
37
+ return { kind: 'err', message: `${join(root, 'package.json')} is missing or isn't JSON.` };
38
+ }
39
+ const managerSpec = stringField(rootManifest, 'packageManager');
40
+ const declared = managerSpec?.split('@')[0];
41
+ if (declared !== undefined && declared !== manager) {
42
+ return {
43
+ kind: 'err',
44
+ message: `package.json says packageManager "${managerSpec}", but the lockfile is ${lockfile} (${manager}). Make them agree.`,
45
+ };
46
+ }
47
+ const files = new Set(['package.json', lockfile]);
48
+ const secrets = [];
49
+ let yarnBerry = false;
50
+ let memberPatterns = [];
51
+ // Where overrides and resolutions can point a package at a local path.
52
+ const overrides = [];
53
+ if (manager === 'pnpm') {
54
+ const workspace = await readYaml(join(root, 'pnpm-workspace.yaml'));
55
+ overrides.push(['pnpm-workspace.yaml overrides', workspace?.overrides]);
56
+ if (workspace !== undefined) {
57
+ files.add('pnpm-workspace.yaml');
58
+ memberPatterns = stringList(workspace.packages);
59
+ for (const patch of Object.values(objectField(workspace, 'patchedDependencies'))) {
60
+ if (typeof patch === 'string')
61
+ files.add(patch);
62
+ }
63
+ }
64
+ const pnpmField = objectField(rootManifest, 'pnpm');
65
+ overrides.push(['package.json pnpm.overrides', pnpmField.overrides]);
66
+ for (const patch of Object.values(objectField(pnpmField, 'patchedDependencies'))) {
67
+ if (typeof patch === 'string')
68
+ files.add(patch);
69
+ }
70
+ if (await isFile(join(root, '.pnpmfile.cjs')))
71
+ files.add('.pnpmfile.cjs');
72
+ }
73
+ else {
74
+ overrides.push(manager === 'npm'
75
+ ? ['package.json overrides', rootManifest.overrides]
76
+ : ['package.json resolutions', rootManifest.resolutions]);
77
+ const workspaces = rootManifest.workspaces;
78
+ memberPatterns = Array.isArray(workspaces)
79
+ ? stringList(workspaces)
80
+ : stringList(objectField(rootManifest, 'workspaces').packages);
81
+ }
82
+ if (manager === 'yarn') {
83
+ yarnBerry = (await readFile(join(root, lockfile), 'utf8')).includes('__metadata:');
84
+ if (yarnBerry) {
85
+ const yarnrc = await readYaml(join(root, '.yarnrc.yml'));
86
+ const linker = yarnrc?.nodeLinker;
87
+ if (linker !== 'node-modules') {
88
+ return {
89
+ kind: 'err',
90
+ message: `Yarn ${linker === undefined ? 'Plug’n’Play (the default)' : `nodeLinker "${String(linker)}"`} has no node_modules for a pack image to load packages from: set nodeLinker: node-modules in .yarnrc.yml.`,
91
+ };
92
+ }
93
+ secrets.push({ id: 'yarnrc-yml', file: '.yarnrc.yml' });
94
+ for (const dir of ['.yarn/releases', '.yarn/plugins', '.yarn/patches']) {
95
+ for (const file of await filesUnder(root, dir))
96
+ files.add(file);
97
+ }
98
+ }
99
+ else if (await isFile(join(root, '.yarnrc'))) {
100
+ secrets.push({ id: 'yarnrc', file: '.yarnrc' });
101
+ }
102
+ }
103
+ if (await isFile(join(root, '.npmrc')))
104
+ secrets.push({ id: 'npmrc', file: '.npmrc' });
105
+ // Workspace members: their manifests, so a frozen install sees the
106
+ // whole workspace the lockfile describes.
107
+ const memberDirs = await matchDirectories(root, memberPatterns);
108
+ const workspace = memberDirs.some((dir) => dir !== '');
109
+ const manifests = [['', rootManifest]];
110
+ for (const dir of memberDirs) {
111
+ if (dir === '')
112
+ continue;
113
+ const manifest = await readManifest(join(root, dir, 'package.json'));
114
+ if (manifest === undefined)
115
+ continue;
116
+ files.add(`${dir}/package.json`);
117
+ manifests.push([dir, manifest]);
118
+ }
119
+ const packRel = toPosix(relative(root, resolve(packDir)));
120
+ if (packRel !== '' && !files.has(`${packRel}/package.json`)) {
121
+ const manifest = await readManifest(join(root, packRel, 'package.json'));
122
+ if (manifest !== undefined) {
123
+ files.add(`${packRel}/package.json`);
124
+ manifests.push([packRel, manifest]);
125
+ }
126
+ }
127
+ // Local dependencies (`file:` / `link:` / `portal:`) the install reads:
128
+ // those the manifests name (relative to their folder), and those the
129
+ // overrides point at (relative to the root).
130
+ const locals = [];
131
+ for (const [dir, manifest] of manifests) {
132
+ for (const field of DEPENDENCY_FIELDS) {
133
+ for (const [name, spec] of Object.entries(objectField(manifest, field))) {
134
+ if (typeof spec === 'string') {
135
+ locals.push({ name, spec, base: dir, where: `${dir === '' ? '' : `${dir}/`}package.json` });
136
+ }
137
+ }
138
+ }
139
+ }
140
+ for (const [where, value] of overrides) {
141
+ for (const [name, spec] of overrideSpecs(value))
142
+ locals.push({ name, spec, base: '', where });
143
+ }
144
+ for (const { name, spec, base, where } of locals) {
145
+ const local = /^(file|link|portal):(.+)$/.exec(spec);
146
+ if (local === null)
147
+ continue;
148
+ const rel = toPosix(relative(root, resolve(root, base, local[2] ?? '')));
149
+ if (rel.startsWith('..') || isAbsolute(rel)) {
150
+ return {
151
+ kind: 'err',
152
+ message: `${name} is "${spec}" in ${where}, outside the project: a pack image can't install it. Vendor it as a tarball inside the project (file:vendor/<name>.tgz), or install it from a registry.`,
153
+ };
154
+ }
155
+ const added = await addLocalDependency(root, rel, files);
156
+ if (added !== undefined)
157
+ return { kind: 'err', message: added };
158
+ }
159
+ for (const file of files) {
160
+ const reason = forbiddenReason(file);
161
+ if (reason !== undefined) {
162
+ return { kind: 'err', message: `The install would ship ${file} (${reason}); move it out of the install's inputs.` };
163
+ }
164
+ }
165
+ const enginesNode = stringField(objectField(rootManifest, 'engines'), 'node');
166
+ // The pack folder's own manifest (`readPackDependencies` reads the same file).
167
+ const packManifest = manifests.find(([dir]) => dir === packRel)?.[1] ?? {};
168
+ return {
169
+ kind: 'ok',
170
+ install: {
171
+ root,
172
+ packRel,
173
+ manager,
174
+ ...(managerSpec !== undefined && { managerSpec }),
175
+ yarnBerry,
176
+ workspace,
177
+ ...(enginesNode !== undefined && { enginesNode }),
178
+ files: [...files].sort(),
179
+ projectManifests: manifests
180
+ .map(([dir]) => (dir === '' ? 'package.json' : `${dir}/package.json`))
181
+ .sort(),
182
+ skippedScripts: manifests
183
+ .map(([dir, manifest]) => [dir === '' ? 'package.json' : `${dir}/package.json`, manifest])
184
+ .sort(([a], [b]) => (a < b ? -1 : a > b ? 1 : 0))
185
+ .flatMap(([path, manifest]) => Object.entries(objectField(manifest, 'scripts'))
186
+ .filter(([name, command]) => INSTALL_LIFECYCLE_SCRIPTS.includes(name) && typeof command === 'string')
187
+ .map(([name, command]) => ({ manifest: path, name, command: command }))),
188
+ packDependencies: packDependenciesOf(packManifest),
189
+ secrets,
190
+ },
191
+ };
192
+ }
193
+ /**
194
+ * The pack project's dependency names, as `resolveHostInstall` reads
195
+ * them: from the pack folder's own `package.json` (the app's, when Kindgi
196
+ * is added to an app; the member's, for a pack in a workspace member).
197
+ * None when the folder has no manifest. Needs no lockfile, so `kindgi dev`
198
+ * can read them on every save.
199
+ */
200
+ export async function readPackDependencies(packDir) {
201
+ return packDependenciesOf((await readManifest(join(resolve(packDir), 'package.json'))) ?? {});
202
+ }
203
+ /**
204
+ * The packages the pack's bundles import that its project lists only in
205
+ * devDependencies: the image's prune to production drops them, so they'd
206
+ * be missing there although they load locally. A package in both
207
+ * sections stays.
208
+ */
209
+ export function devOnlyImports(externals, deps) {
210
+ return externals.filter((name) => deps.dev.includes(name) && !deps.runtime.includes(name));
211
+ }
212
+ function packDependenciesOf(manifest) {
213
+ const namesIn = (...fields) => [...new Set(fields.flatMap((field) => Object.keys(objectField(manifest, field))))].sort();
214
+ return {
215
+ runtime: namesIn('dependencies', 'optionalDependencies', 'peerDependencies'),
216
+ dev: namesIn('devDependencies'),
217
+ };
218
+ }
219
+ /**
220
+ * The lifecycle scripts a package manager runs for a project on install
221
+ * or rebuild: npm's and pnpm's install hooks, `prepare` and its pre/post,
222
+ * npm's legacy `prepublish` and `dependencies`.
223
+ */
224
+ export const INSTALL_LIFECYCLE_SCRIPTS = [
225
+ 'preinstall',
226
+ 'install',
227
+ 'postinstall',
228
+ 'preprepare',
229
+ 'prepare',
230
+ 'postprepare',
231
+ 'prepublish',
232
+ 'dependencies',
233
+ ];
234
+ /**
235
+ * A project manifest's text without its install scripts
236
+ * (`INSTALL_LIFECYCLE_SCRIPTS`); every other field, and every other
237
+ * script, stays. A manifest with none comes back byte for byte.
238
+ */
239
+ export function withoutInstallScripts(text) {
240
+ const manifest = JSON.parse(text);
241
+ const scripts = manifest.scripts;
242
+ if (scripts === null || typeof scripts !== 'object' || Array.isArray(scripts))
243
+ return text;
244
+ const kept = Object.fromEntries(Object.entries(scripts).filter(([name]) => !INSTALL_LIFECYCLE_SCRIPTS.includes(name)));
245
+ if (Object.keys(kept).length === Object.keys(scripts).length)
246
+ return text;
247
+ return `${JSON.stringify({ ...manifest, scripts: kept }, null, 2)}\n`;
248
+ }
249
+ export function installCommands(install) {
250
+ switch (install.manager) {
251
+ case 'pnpm': {
252
+ // `rebuild` runs the build scripts the app allows (pnpm's allowBuilds).
253
+ if (!install.workspace) {
254
+ return {
255
+ install: 'pnpm install --frozen-lockfile --ignore-scripts && pnpm rebuild',
256
+ prune: 'pnpm prune --prod',
257
+ };
258
+ }
259
+ // A workspace: the pack's project and what it depends on, not the
260
+ // rest of the workspace. The prune is the same filtered install with
261
+ // --prod (`pnpm prune` ignores a filter and installs the whole
262
+ // workspace).
263
+ const only = `--filter '{${install.packRel === '' ? '.' : `./${install.packRel}`}}...'`;
264
+ return {
265
+ install: `pnpm install --frozen-lockfile --ignore-scripts ${only} && pnpm ${only} rebuild`,
266
+ prune: `pnpm install --frozen-lockfile --ignore-scripts --prod ${only}`,
267
+ };
268
+ }
269
+ case 'npm':
270
+ return {
271
+ install: 'npm ci --ignore-scripts --no-audit --no-fund && npm rebuild',
272
+ prune: 'npm prune --omit=dev --no-audit --no-fund',
273
+ };
274
+ case 'yarn':
275
+ return install.yarnBerry
276
+ ? { install: 'yarn install --immutable', prune: 'yarn workspaces focus --all --production' }
277
+ : {
278
+ install: 'yarn install --frozen-lockfile --ignore-scripts --non-interactive && npm rebuild',
279
+ prune: 'yarn install --production --frozen-lockfile --ignore-scripts --non-interactive && npm rebuild',
280
+ };
281
+ }
282
+ }
283
+ // ---------------------------------------------------------------------
284
+ async function findLockfile(start) {
285
+ let current = start;
286
+ for (;;) {
287
+ for (const [lockfile, manager] of LOCKFILES) {
288
+ if (await isFile(join(current, lockfile)))
289
+ return { root: current, lockfile, manager };
290
+ }
291
+ const parent = dirname(current);
292
+ if (parent === current)
293
+ return undefined;
294
+ current = parent;
295
+ }
296
+ }
297
+ /**
298
+ * Every `[package, spec]` in overrides or resolutions: a flat map of
299
+ * strings (pnpm, yarn), or npm's nested one (`{ "a": { "b": "1.0.0" } }`,
300
+ * `"."` for the package itself).
301
+ */
302
+ function overrideSpecs(value, parent = '') {
303
+ if (value === null || typeof value !== 'object' || Array.isArray(value))
304
+ return [];
305
+ const out = [];
306
+ for (const [key, spec] of Object.entries(value)) {
307
+ const name = key === '.' ? parent : key;
308
+ if (typeof spec === 'string')
309
+ out.push([name, spec]);
310
+ else
311
+ out.push(...overrideSpecs(spec, key));
312
+ }
313
+ return out;
314
+ }
315
+ /** A `file:` / `link:` dependency inside the root: the tarball, or the folder's files. */
316
+ async function addLocalDependency(root, rel, files) {
317
+ const abs = join(root, rel);
318
+ let info;
319
+ try {
320
+ info = await stat(abs);
321
+ }
322
+ catch {
323
+ return `The local dependency ${rel} doesn't exist.`;
324
+ }
325
+ if (info.isFile()) {
326
+ files.add(rel);
327
+ return undefined;
328
+ }
329
+ for (const file of await filesUnder(root, rel))
330
+ files.add(file);
331
+ return undefined;
332
+ }
333
+ /** Every file under `dir` (relative to `root`), skipping `node_modules` and `.git`. */
334
+ async function filesUnder(root, dir) {
335
+ const out = [];
336
+ const walk = async (rel) => {
337
+ let entries;
338
+ try {
339
+ entries = await readdir(join(root, rel), { withFileTypes: true });
340
+ }
341
+ catch {
342
+ return;
343
+ }
344
+ for (const entry of entries) {
345
+ if (entry.name === 'node_modules' || entry.name === '.git')
346
+ continue;
347
+ const child = `${rel}/${entry.name}`;
348
+ if (entry.isDirectory())
349
+ await walk(child);
350
+ else if (entry.isFile())
351
+ out.push(child);
352
+ }
353
+ };
354
+ await walk(dir);
355
+ return out;
356
+ }
357
+ /**
358
+ * The folders (relative to `root`) the workspace patterns match:
359
+ * `packages/*`, `apps/**`, `.`, with `!` negations.
360
+ */
361
+ async function matchDirectories(root, patterns) {
362
+ const include = patterns.filter((p) => !p.startsWith('!')).map(normalizePattern);
363
+ const exclude = patterns.filter((p) => p.startsWith('!')).map((p) => normalizePattern(p.slice(1)));
364
+ if (include.length === 0)
365
+ return [];
366
+ const included = createGlobMatcher(include);
367
+ const excluded = exclude.length > 0 ? createGlobMatcher(exclude) : () => false;
368
+ const out = include.includes('') ? [''] : [];
369
+ const deep = include.some((p) => p.includes('**'));
370
+ const maxDepth = deep ? Number.POSITIVE_INFINITY : Math.max(...include.map((p) => p.split('/').length));
371
+ const walk = async (rel, depth) => {
372
+ if (depth >= maxDepth)
373
+ return;
374
+ let entries;
375
+ try {
376
+ entries = await readdir(rel === '' ? root : join(root, rel), { withFileTypes: true });
377
+ }
378
+ catch {
379
+ return;
380
+ }
381
+ for (const entry of entries) {
382
+ if (!entry.isDirectory() || entry.name === 'node_modules' || entry.name.startsWith('.'))
383
+ continue;
384
+ const child = rel === '' ? entry.name : `${rel}/${entry.name}`;
385
+ if (included(child) && !excluded(child))
386
+ out.push(child);
387
+ await walk(child, depth + 1);
388
+ }
389
+ };
390
+ await walk('', 0);
391
+ return out.sort();
392
+ }
393
+ function normalizePattern(pattern) {
394
+ const trimmed = pattern.replace(/^\.\//, '').replace(/\/+$/, '');
395
+ return trimmed === '.' ? '' : trimmed;
396
+ }
397
+ async function readManifest(path) {
398
+ try {
399
+ const parsed = JSON.parse(await readFile(path, 'utf8'));
400
+ return parsed !== null && typeof parsed === 'object' && !Array.isArray(parsed)
401
+ ? parsed
402
+ : undefined;
403
+ }
404
+ catch {
405
+ return undefined;
406
+ }
407
+ }
408
+ async function readYaml(path) {
409
+ let raw;
410
+ try {
411
+ raw = await readFile(path, 'utf8');
412
+ }
413
+ catch {
414
+ return undefined;
415
+ }
416
+ const parsed = parseYaml(raw);
417
+ return parsed !== null && typeof parsed === 'object' && !Array.isArray(parsed)
418
+ ? parsed
419
+ : {};
420
+ }
421
+ async function isFile(path) {
422
+ try {
423
+ return (await stat(path)).isFile();
424
+ }
425
+ catch {
426
+ return false;
427
+ }
428
+ }
429
+ function objectField(value, key) {
430
+ const field = value?.[key];
431
+ return field !== null && typeof field === 'object' && !Array.isArray(field) ? field : {};
432
+ }
433
+ function stringField(value, key) {
434
+ const field = value[key];
435
+ return typeof field === 'string' && field !== '' ? field : undefined;
436
+ }
437
+ function stringList(value) {
438
+ return Array.isArray(value) ? value.filter((v) => typeof v === 'string') : [];
439
+ }
440
+ function toPosix(path) {
441
+ return path.split(sep).join('/');
442
+ }
443
+ //# sourceMappingURL=host-install.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"host-install.js","sourceRoot":"","sources":["../../src/build/host-install.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,32 @@
1
+ /**
2
+ * `image` in a TypeScript pack's `kindgi.config.*` (`@kindgi/sdk/build`),
3
+ * checked and resolved into what the Containerfile renders:
4
+ * - the Debian packages, the config's and the extensions', deduplicated;
5
+ * - the build env, the extensions' merged under the config's own;
6
+ * - the files the steps read, relative to the pack folder;
7
+ * - the steps, in extension order.
8
+ * A config that isn't the documented shape fails the build, naming the
9
+ * field — never a silently different image.
10
+ */
11
+ import type { BuildStep } from '@kindgi/handler-runtime/build-extensions';
12
+ export interface ResolvedImage {
13
+ readonly systemPackages: readonly string[];
14
+ readonly buildEnv: Readonly<Record<string, string>>;
15
+ /** Relative to the pack folder, sorted. */
16
+ readonly contextFiles: readonly string[];
17
+ readonly steps: readonly (BuildStep & {
18
+ readonly extension: string;
19
+ })[];
20
+ /** The extensions' names, in order. */
21
+ readonly extensions: readonly string[];
22
+ }
23
+ export type ImageConfigOutcome = {
24
+ readonly kind: 'ok';
25
+ readonly image: ResolvedImage;
26
+ } | {
27
+ readonly kind: 'invalid';
28
+ readonly message: string;
29
+ };
30
+ /** `image` from the loaded config (absent: nothing beyond the install). */
31
+ export declare function readImageConfig(config: Readonly<Record<string, unknown>>): ImageConfigOutcome;
32
+ //# sourceMappingURL=image-config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"image-config.d.ts","sourceRoot":"","sources":["../../src/build/image-config.ts"],"names":[],"mappings":"AAGA;;;;;;;;;GASG;AAEH,OAAO,KAAK,EAAkB,SAAS,EAAE,MAAM,0CAA0C,CAAC;AAK1F,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,cAAc,EAAE,SAAS,MAAM,EAAE,CAAC;IAC3C,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;IACpD,2CAA2C;IAC3C,QAAQ,CAAC,YAAY,EAAE,SAAS,MAAM,EAAE,CAAC;IACzC,QAAQ,CAAC,KAAK,EAAE,SAAS,CAAC,SAAS,GAAG;QAAE,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAA;KAAE,CAAC,EAAE,CAAC;IACxE,uCAAuC;IACvC,QAAQ,CAAC,UAAU,EAAE,SAAS,MAAM,EAAE,CAAC;CACxC;AAED,MAAM,MAAM,kBAAkB,GAC1B;IAAE,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC;IAAC,QAAQ,CAAC,KAAK,EAAE,aAAa,CAAA;CAAE,GACtD;IAAE,QAAQ,CAAC,IAAI,EAAE,SAAS,CAAC;IAAC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAAC;AAK3D,2EAA2E;AAC3E,wBAAgB,eAAe,CAAC,MAAM,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,GAAG,kBAAkB,CA0D7F"}
@@ -0,0 +1,129 @@
1
+ // SPDX-License-Identifier: Apache-2.0
2
+ // Copyright (C) 2026 Kindgi Inc.
3
+ import { checkAptPackages } from './apt.js';
4
+ import { forbiddenReason } from './context-files.js';
5
+ const ENV_NAME = /^[A-Za-z_][A-Za-z0-9_]*$/;
6
+ const BIN = /^[A-Za-z0-9@._/-]+$/;
7
+ /** `image` from the loaded config (absent: nothing beyond the install). */
8
+ export function readImageConfig(config) {
9
+ const image = config.image;
10
+ if (image === undefined) {
11
+ return {
12
+ kind: 'ok',
13
+ image: { systemPackages: [], buildEnv: {}, contextFiles: [], steps: [], extensions: [] },
14
+ };
15
+ }
16
+ if (image === null || typeof image !== 'object' || Array.isArray(image)) {
17
+ return invalid('`image` in kindgi.config must be an object: { systemPackages?, extensions?, buildEnv? }.');
18
+ }
19
+ const { systemPackages, extensions, buildEnv, ...rest } = image;
20
+ const unknown = Object.keys(rest);
21
+ if (unknown.length > 0) {
22
+ return invalid(`\`image\` in kindgi.config has ${unknown.map((k) => `\`${k}\``).join(', ')}: it takes systemPackages, extensions and buildEnv.`);
23
+ }
24
+ if (extensions !== undefined && !Array.isArray(extensions)) {
25
+ return invalid('`image.extensions` must be a list of build extensions (`@kindgi/sdk/build`).');
26
+ }
27
+ const packages = [];
28
+ if (systemPackages !== undefined) {
29
+ if (!Array.isArray(systemPackages))
30
+ return invalid('`image.systemPackages` must be a list of Debian package names.');
31
+ packages.push(...systemPackages);
32
+ }
33
+ const env = {};
34
+ const files = new Set();
35
+ const steps = [];
36
+ const names = [];
37
+ for (const [i, raw] of (extensions ?? []).entries()) {
38
+ const checked = checkExtension(raw, `image.extensions[${i}]`);
39
+ if (checked.kind === 'invalid')
40
+ return checked;
41
+ const extension = checked.extension;
42
+ names.push(extension.name);
43
+ packages.push(...(extension.systemPackages ?? []));
44
+ for (const file of extension.contextFiles ?? [])
45
+ files.add(file);
46
+ for (const step of extension.postInstall ?? [])
47
+ steps.push({ ...step, extension: extension.name });
48
+ Object.assign(env, extension.buildEnv ?? {});
49
+ }
50
+ const ownEnv = checkEnv(buildEnv, 'image.buildEnv');
51
+ if (ownEnv.kind === 'invalid')
52
+ return ownEnv;
53
+ Object.assign(env, ownEnv.env);
54
+ const apt = checkAptPackages(packages, 'image.systemPackages');
55
+ if (apt.kind === 'err')
56
+ return invalid(`${apt.message}.`);
57
+ return {
58
+ kind: 'ok',
59
+ image: {
60
+ systemPackages: apt.packages,
61
+ buildEnv: env,
62
+ contextFiles: [...files].sort(),
63
+ steps,
64
+ extensions: names,
65
+ },
66
+ };
67
+ }
68
+ function checkExtension(raw, where) {
69
+ if (raw === null || typeof raw !== 'object' || Array.isArray(raw)) {
70
+ return invalid(`${where} must be a build extension (\`@kindgi/sdk/build\`).`);
71
+ }
72
+ const ext = raw;
73
+ if (typeof ext.name !== 'string' || ext.name === '')
74
+ return invalid(`${where} has no \`name\`.`);
75
+ const label = `${where} (${ext.name})`;
76
+ const files = ext.contextFiles;
77
+ if (files !== undefined) {
78
+ if (!Array.isArray(files) || !files.every((f) => typeof f === 'string' && f !== '')) {
79
+ return invalid(`${label}: \`contextFiles\` must be a list of paths relative to the pack folder.`);
80
+ }
81
+ for (const file of files) {
82
+ if (file.startsWith('/') || file.split('/').includes('..')) {
83
+ return invalid(`${label}: ${file} isn't inside the pack folder.`);
84
+ }
85
+ const reason = forbiddenReason(file);
86
+ if (reason !== undefined)
87
+ return invalid(`${label}: refusing to put ${file} in the image (${reason}).`);
88
+ }
89
+ }
90
+ const steps = ext.postInstall;
91
+ if (steps !== undefined) {
92
+ if (!Array.isArray(steps))
93
+ return invalid(`${label}: \`postInstall\` must be a list of { bin, args }.`);
94
+ for (const step of steps) {
95
+ const s = step;
96
+ if (s === null || typeof s.bin !== 'string' || !BIN.test(s.bin)) {
97
+ return invalid(`${label}: each \`postInstall\` step needs a \`bin\`, a package's executable name.`);
98
+ }
99
+ if (s.args !== undefined && (!Array.isArray(s.args) || !s.args.every((a) => typeof a === 'string'))) {
100
+ return invalid(`${label}: \`postInstall\` args must be strings.`);
101
+ }
102
+ }
103
+ }
104
+ if (ext.systemPackages !== undefined && !Array.isArray(ext.systemPackages)) {
105
+ return invalid(`${label}: \`systemPackages\` must be a list of Debian package names.`);
106
+ }
107
+ const env = checkEnv(ext.buildEnv, `${label} buildEnv`);
108
+ if (env.kind === 'invalid')
109
+ return env;
110
+ return { kind: 'ok', extension: ext };
111
+ }
112
+ function checkEnv(raw, where) {
113
+ if (raw === undefined)
114
+ return { kind: 'ok', env: {} };
115
+ if (raw === null || typeof raw !== 'object' || Array.isArray(raw)) {
116
+ return invalid(`${where} must be an object of NAME → value.`);
117
+ }
118
+ for (const [name, value] of Object.entries(raw)) {
119
+ if (!ENV_NAME.test(name))
120
+ return invalid(`${where}: ${JSON.stringify(name)} isn't an env name.`);
121
+ if (typeof value !== 'string')
122
+ return invalid(`${where}: ${name} must be a string.`);
123
+ }
124
+ return { kind: 'ok', env: raw };
125
+ }
126
+ function invalid(message) {
127
+ return { kind: 'invalid', message };
128
+ }
129
+ //# sourceMappingURL=image-config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"image-config.js","sourceRoot":"","sources":["../../src/build/image-config.ts"],"names":[],"mappings":"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"}