@kilnai/cli 1.0.7 → 2.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (546) hide show
  1. package/README.md +34 -8
  2. package/dist/application/__tests__/session-report.test.d.ts +2 -0
  3. package/dist/application/__tests__/session-report.test.d.ts.map +1 -0
  4. package/dist/application/__tests__/session-report.test.js +100 -0
  5. package/dist/application/__tests__/session-report.test.js.map +1 -0
  6. package/dist/application/agent-loader.d.ts +30 -2
  7. package/dist/application/agent-loader.d.ts.map +1 -1
  8. package/dist/application/agent-loader.js +99 -3
  9. package/dist/application/agent-loader.js.map +1 -1
  10. package/dist/application/agent-loader.test.js +112 -18
  11. package/dist/application/agent-loader.test.js.map +1 -1
  12. package/dist/application/agent-skill-context.d.ts +12 -0
  13. package/dist/application/agent-skill-context.d.ts.map +1 -0
  14. package/dist/application/agent-skill-context.js +32 -0
  15. package/dist/application/agent-skill-context.js.map +1 -0
  16. package/dist/application/agent-skill-context.test.d.ts +2 -0
  17. package/dist/application/agent-skill-context.test.d.ts.map +1 -0
  18. package/dist/application/agent-skill-context.test.js +156 -0
  19. package/dist/application/agent-skill-context.test.js.map +1 -0
  20. package/dist/application/benchmark-session-executor.d.ts +14 -0
  21. package/dist/application/benchmark-session-executor.d.ts.map +1 -0
  22. package/dist/application/benchmark-session-executor.js +210 -0
  23. package/dist/application/benchmark-session-executor.js.map +1 -0
  24. package/dist/application/config-apply-tool.d.ts +30 -0
  25. package/dist/application/config-apply-tool.d.ts.map +1 -0
  26. package/dist/application/config-apply-tool.js +68 -0
  27. package/dist/application/config-apply-tool.js.map +1 -0
  28. package/dist/application/config-apply.d.ts +9 -0
  29. package/dist/application/config-apply.d.ts.map +1 -0
  30. package/dist/application/config-apply.js +146 -0
  31. package/dist/application/config-apply.js.map +1 -0
  32. package/dist/application/config-approval.d.ts +10 -0
  33. package/dist/application/config-approval.d.ts.map +1 -0
  34. package/dist/application/config-approval.js +30 -0
  35. package/dist/application/config-approval.js.map +1 -0
  36. package/dist/application/config-mutation-store.d.ts +25 -0
  37. package/dist/application/config-mutation-store.d.ts.map +1 -0
  38. package/dist/application/config-mutation-store.js +59 -0
  39. package/dist/application/config-mutation-store.js.map +1 -0
  40. package/dist/application/config-proposal.d.ts +22 -0
  41. package/dist/application/config-proposal.d.ts.map +1 -0
  42. package/dist/application/config-proposal.js +395 -0
  43. package/dist/application/config-proposal.js.map +1 -0
  44. package/dist/application/config-propose-tool.d.ts +30 -0
  45. package/dist/application/config-propose-tool.d.ts.map +1 -0
  46. package/dist/application/config-propose-tool.js +63 -0
  47. package/dist/application/config-propose-tool.js.map +1 -0
  48. package/dist/application/config-read-tool.d.ts +26 -0
  49. package/dist/application/config-read-tool.d.ts.map +1 -0
  50. package/dist/application/config-read-tool.js +51 -0
  51. package/dist/application/config-read-tool.js.map +1 -0
  52. package/dist/application/config-status.d.ts +9 -0
  53. package/dist/application/config-status.d.ts.map +1 -0
  54. package/dist/application/config-status.js +361 -0
  55. package/dist/application/config-status.js.map +1 -0
  56. package/dist/application/config-tools.d.ts +3 -0
  57. package/dist/application/config-tools.d.ts.map +1 -0
  58. package/dist/application/config-tools.js +11 -0
  59. package/dist/application/config-tools.js.map +1 -0
  60. package/dist/application/context-types.d.ts +4 -17
  61. package/dist/application/context-types.d.ts.map +1 -1
  62. package/dist/application/context-types.js.map +1 -1
  63. package/dist/application/first-party-agent-defaults.d.ts +3 -0
  64. package/dist/application/first-party-agent-defaults.d.ts.map +1 -0
  65. package/dist/application/first-party-agent-defaults.js +135 -0
  66. package/dist/application/first-party-agent-defaults.js.map +1 -0
  67. package/dist/application/instruction-profile-context.d.ts +15 -0
  68. package/dist/application/instruction-profile-context.d.ts.map +1 -0
  69. package/dist/application/instruction-profile-context.js +80 -0
  70. package/dist/application/instruction-profile-context.js.map +1 -0
  71. package/dist/application/instruction-profile-loader.d.ts +20 -0
  72. package/dist/application/instruction-profile-loader.d.ts.map +1 -0
  73. package/dist/application/instruction-profile-loader.js +132 -0
  74. package/dist/application/instruction-profile-loader.js.map +1 -0
  75. package/dist/application/instruction-profile-loader.test.d.ts +2 -0
  76. package/dist/application/instruction-profile-loader.test.d.ts.map +1 -0
  77. package/dist/application/instruction-profile-loader.test.js +100 -0
  78. package/dist/application/instruction-profile-loader.test.js.map +1 -0
  79. package/dist/application/operator-theme-preferences.d.ts +11 -0
  80. package/dist/application/operator-theme-preferences.d.ts.map +1 -0
  81. package/dist/application/operator-theme-preferences.js +49 -0
  82. package/dist/application/operator-theme-preferences.js.map +1 -0
  83. package/dist/application/project-context.d.ts +22 -0
  84. package/dist/application/project-context.d.ts.map +1 -0
  85. package/dist/application/project-context.js +139 -0
  86. package/dist/application/project-context.js.map +1 -0
  87. package/dist/application/project-root-resolver.d.ts +14 -0
  88. package/dist/application/project-root-resolver.d.ts.map +1 -0
  89. package/dist/application/project-root-resolver.js +71 -0
  90. package/dist/application/project-root-resolver.js.map +1 -0
  91. package/dist/application/repo-shim-projection.d.ts +48 -0
  92. package/dist/application/repo-shim-projection.d.ts.map +1 -0
  93. package/dist/application/repo-shim-projection.js +536 -0
  94. package/dist/application/repo-shim-projection.js.map +1 -0
  95. package/dist/application/resume-sidebar-info.d.ts +9 -0
  96. package/dist/application/resume-sidebar-info.d.ts.map +1 -0
  97. package/dist/application/resume-sidebar-info.js +40 -0
  98. package/dist/application/resume-sidebar-info.js.map +1 -0
  99. package/dist/application/resume-strategy-feedback.d.ts.map +1 -1
  100. package/dist/application/resume-strategy-feedback.js +2 -1
  101. package/dist/application/resume-strategy-feedback.js.map +1 -1
  102. package/dist/application/run-session.d.ts +15 -0
  103. package/dist/application/run-session.d.ts.map +1 -1
  104. package/dist/application/run-session.js +110 -19
  105. package/dist/application/run-session.js.map +1 -1
  106. package/dist/application/runtime-session-rehydration.d.ts +9 -0
  107. package/dist/application/runtime-session-rehydration.d.ts.map +1 -0
  108. package/dist/application/runtime-session-rehydration.js +115 -0
  109. package/dist/application/runtime-session-rehydration.js.map +1 -0
  110. package/dist/application/session-context-artifacts.d.ts +19 -0
  111. package/dist/application/session-context-artifacts.d.ts.map +1 -0
  112. package/dist/application/session-context-artifacts.js +60 -0
  113. package/dist/application/session-context-artifacts.js.map +1 -0
  114. package/dist/application/session-metadata.d.ts +35 -0
  115. package/dist/application/session-metadata.d.ts.map +1 -0
  116. package/dist/application/session-metadata.js +157 -0
  117. package/dist/application/session-metadata.js.map +1 -0
  118. package/dist/application/session-report.d.ts.map +1 -1
  119. package/dist/application/session-report.js +8 -0
  120. package/dist/application/session-report.js.map +1 -1
  121. package/dist/application/session-resume.d.ts +1 -1
  122. package/dist/application/session-resume.d.ts.map +1 -1
  123. package/dist/application/session-resume.js +4 -4
  124. package/dist/application/session-resume.js.map +1 -1
  125. package/dist/application/work-governance-context.d.ts +7 -0
  126. package/dist/application/work-governance-context.d.ts.map +1 -0
  127. package/dist/application/work-governance-context.js +64 -0
  128. package/dist/application/work-governance-context.js.map +1 -0
  129. package/dist/application/work-governance-context.test.d.ts +2 -0
  130. package/dist/application/work-governance-context.test.d.ts.map +1 -0
  131. package/dist/application/work-governance-context.test.js +55 -0
  132. package/dist/application/work-governance-context.test.js.map +1 -0
  133. package/dist/application/work-governance-policy.d.ts +15 -0
  134. package/dist/application/work-governance-policy.d.ts.map +1 -0
  135. package/dist/application/work-governance-policy.js +53 -0
  136. package/dist/application/work-governance-policy.js.map +1 -0
  137. package/dist/application/work-governance-tool.d.ts +421 -0
  138. package/dist/application/work-governance-tool.d.ts.map +1 -0
  139. package/dist/application/work-governance-tool.js +937 -0
  140. package/dist/application/work-governance-tool.js.map +1 -0
  141. package/dist/application/work-governance-tool.test.d.ts +2 -0
  142. package/dist/application/work-governance-tool.test.d.ts.map +1 -0
  143. package/dist/application/work-governance-tool.test.js +935 -0
  144. package/dist/application/work-governance-tool.test.js.map +1 -0
  145. package/dist/application/work-governance-workflows.d.ts +23 -0
  146. package/dist/application/work-governance-workflows.d.ts.map +1 -0
  147. package/dist/application/work-governance-workflows.js +177 -0
  148. package/dist/application/work-governance-workflows.js.map +1 -0
  149. package/dist/application/workflow-snapshot-export.d.ts +81 -0
  150. package/dist/application/workflow-snapshot-export.d.ts.map +1 -0
  151. package/dist/application/workflow-snapshot-export.js +141 -0
  152. package/dist/application/workflow-snapshot-export.js.map +1 -0
  153. package/dist/commands/auth.d.ts.map +1 -1
  154. package/dist/commands/auth.js +242 -24
  155. package/dist/commands/auth.js.map +1 -1
  156. package/dist/commands/benchmark.d.ts +8 -0
  157. package/dist/commands/benchmark.d.ts.map +1 -0
  158. package/dist/commands/benchmark.js +287 -0
  159. package/dist/commands/benchmark.js.map +1 -0
  160. package/dist/commands/config.d.ts +1 -1
  161. package/dist/commands/config.d.ts.map +1 -1
  162. package/dist/commands/config.js +369 -39
  163. package/dist/commands/config.js.map +1 -1
  164. package/dist/commands/config.test.d.ts +2 -0
  165. package/dist/commands/config.test.d.ts.map +1 -0
  166. package/dist/commands/config.test.js +86 -0
  167. package/dist/commands/config.test.js.map +1 -0
  168. package/dist/commands/goal.d.ts +12 -0
  169. package/dist/commands/goal.d.ts.map +1 -0
  170. package/dist/commands/goal.js +469 -0
  171. package/dist/commands/goal.js.map +1 -0
  172. package/dist/commands/goal.test.d.ts +2 -0
  173. package/dist/commands/goal.test.d.ts.map +1 -0
  174. package/dist/commands/goal.test.js +317 -0
  175. package/dist/commands/goal.test.js.map +1 -0
  176. package/dist/commands/gui-options.d.ts +5 -0
  177. package/dist/commands/gui-options.d.ts.map +1 -0
  178. package/dist/commands/gui-options.js +18 -0
  179. package/dist/commands/gui-options.js.map +1 -0
  180. package/dist/commands/gui-session-detail.d.ts +4 -0
  181. package/dist/commands/gui-session-detail.d.ts.map +1 -0
  182. package/dist/commands/gui-session-detail.js +32 -0
  183. package/dist/commands/gui-session-detail.js.map +1 -0
  184. package/dist/commands/gui-session-summaries.d.ts +5 -0
  185. package/dist/commands/gui-session-summaries.d.ts.map +1 -0
  186. package/dist/commands/gui-session-summaries.js +62 -0
  187. package/dist/commands/gui-session-summaries.js.map +1 -0
  188. package/dist/commands/gui-shutdown-monitor.d.ts +8 -0
  189. package/dist/commands/gui-shutdown-monitor.d.ts.map +1 -0
  190. package/dist/commands/gui-shutdown-monitor.js +50 -0
  191. package/dist/commands/gui-shutdown-monitor.js.map +1 -0
  192. package/dist/commands/gui-window.d.ts +42 -0
  193. package/dist/commands/gui-window.d.ts.map +1 -0
  194. package/dist/commands/gui-window.js +287 -0
  195. package/dist/commands/gui-window.js.map +1 -0
  196. package/dist/commands/gui-workspace.d.ts +3 -0
  197. package/dist/commands/gui-workspace.d.ts.map +1 -0
  198. package/dist/commands/gui-workspace.js +297 -0
  199. package/dist/commands/gui-workspace.js.map +1 -0
  200. package/dist/commands/gui.d.ts +14 -0
  201. package/dist/commands/gui.d.ts.map +1 -0
  202. package/dist/commands/gui.js +391 -0
  203. package/dist/commands/gui.js.map +1 -0
  204. package/dist/commands/import-native.d.ts +34 -0
  205. package/dist/commands/import-native.d.ts.map +1 -0
  206. package/dist/commands/import-native.js +302 -0
  207. package/dist/commands/import-native.js.map +1 -0
  208. package/dist/commands/init-templates.d.ts.map +1 -1
  209. package/dist/commands/init-templates.js +13 -12
  210. package/dist/commands/init-templates.js.map +1 -1
  211. package/dist/commands/init.js +1 -1
  212. package/dist/commands/init.js.map +1 -1
  213. package/dist/commands/mcp-config.d.ts.map +1 -1
  214. package/dist/commands/mcp-config.js +6 -3
  215. package/dist/commands/mcp-config.js.map +1 -1
  216. package/dist/commands/memory.d.ts +1 -1
  217. package/dist/commands/memory.d.ts.map +1 -1
  218. package/dist/commands/memory.js +188 -39
  219. package/dist/commands/memory.js.map +1 -1
  220. package/dist/commands/project.d.ts +3 -0
  221. package/dist/commands/project.d.ts.map +1 -0
  222. package/dist/commands/project.js +64 -0
  223. package/dist/commands/project.js.map +1 -0
  224. package/dist/commands/route.d.ts +3 -0
  225. package/dist/commands/route.d.ts.map +1 -0
  226. package/dist/commands/route.js +19 -0
  227. package/dist/commands/route.js.map +1 -0
  228. package/dist/commands/run.d.ts +23 -1
  229. package/dist/commands/run.d.ts.map +1 -1
  230. package/dist/commands/run.js +416 -81
  231. package/dist/commands/run.js.map +1 -1
  232. package/dist/commands/skill-capture.js +34 -14
  233. package/dist/commands/skill-capture.js.map +1 -1
  234. package/dist/commands/skill.d.ts.map +1 -1
  235. package/dist/commands/skill.js +10 -9
  236. package/dist/commands/skill.js.map +1 -1
  237. package/dist/commands/status.d.ts +5 -1
  238. package/dist/commands/status.d.ts.map +1 -1
  239. package/dist/commands/status.js +134 -5
  240. package/dist/commands/status.js.map +1 -1
  241. package/dist/commands/sync.d.ts +8 -6
  242. package/dist/commands/sync.d.ts.map +1 -1
  243. package/dist/commands/sync.js +173 -48
  244. package/dist/commands/sync.js.map +1 -1
  245. package/dist/commands/tools.d.ts +2 -0
  246. package/dist/commands/tools.d.ts.map +1 -1
  247. package/dist/commands/tools.js +34 -15
  248. package/dist/commands/tools.js.map +1 -1
  249. package/dist/commands/tui.d.ts +6 -4
  250. package/dist/commands/tui.d.ts.map +1 -1
  251. package/dist/commands/tui.js +594 -94
  252. package/dist/commands/tui.js.map +1 -1
  253. package/dist/commands/uninstall.d.ts +13 -0
  254. package/dist/commands/uninstall.d.ts.map +1 -0
  255. package/dist/commands/uninstall.js +111 -0
  256. package/dist/commands/uninstall.js.map +1 -0
  257. package/dist/config/builtin-tool-surface-config.d.ts +6 -0
  258. package/dist/config/builtin-tool-surface-config.d.ts.map +1 -0
  259. package/dist/config/builtin-tool-surface-config.js +27 -0
  260. package/dist/config/builtin-tool-surface-config.js.map +1 -0
  261. package/dist/config/config-merger.d.ts +1 -1
  262. package/dist/config/config-merger.d.ts.map +1 -1
  263. package/dist/config/config-merger.js +21 -4
  264. package/dist/config/config-merger.js.map +1 -1
  265. package/dist/config/config-merger.test.js +202 -7
  266. package/dist/config/config-merger.test.js.map +1 -1
  267. package/dist/config/global-config.d.ts +59 -13
  268. package/dist/config/global-config.d.ts.map +1 -1
  269. package/dist/config/global-config.js +580 -5
  270. package/dist/config/global-config.js.map +1 -1
  271. package/dist/config/global-config.test.js +481 -8
  272. package/dist/config/global-config.test.js.map +1 -1
  273. package/dist/config/harness-integration-capabilities.d.ts +27 -0
  274. package/dist/config/harness-integration-capabilities.d.ts.map +1 -0
  275. package/dist/config/harness-integration-capabilities.js +64 -0
  276. package/dist/config/harness-integration-capabilities.js.map +1 -0
  277. package/dist/config/interactive-use-config.d.ts +25 -0
  278. package/dist/config/interactive-use-config.d.ts.map +1 -0
  279. package/dist/config/interactive-use-config.js +210 -0
  280. package/dist/config/interactive-use-config.js.map +1 -0
  281. package/dist/config/json-comments.d.ts +2 -0
  282. package/dist/config/json-comments.d.ts.map +1 -0
  283. package/dist/config/json-comments.js +21 -0
  284. package/dist/config/json-comments.js.map +1 -0
  285. package/dist/config/managed-agent-direct-adapters.d.ts +15 -0
  286. package/dist/config/managed-agent-direct-adapters.d.ts.map +1 -0
  287. package/dist/config/managed-agent-direct-adapters.js +54 -0
  288. package/dist/config/managed-agent-direct-adapters.js.map +1 -0
  289. package/dist/config/managed-agent-provider-models.d.ts +3 -0
  290. package/dist/config/managed-agent-provider-models.d.ts.map +1 -0
  291. package/dist/config/managed-agent-provider-models.js +12 -0
  292. package/dist/config/managed-agent-provider-models.js.map +1 -0
  293. package/dist/config/managed-agent-routes.d.ts +49 -0
  294. package/dist/config/managed-agent-routes.d.ts.map +1 -0
  295. package/dist/config/managed-agent-routes.js +578 -0
  296. package/dist/config/managed-agent-routes.js.map +1 -0
  297. package/dist/config/managed-invocation-context-resolver.d.ts +10 -0
  298. package/dist/config/managed-invocation-context-resolver.d.ts.map +1 -0
  299. package/dist/config/managed-invocation-context-resolver.js +98 -0
  300. package/dist/config/managed-invocation-context-resolver.js.map +1 -0
  301. package/dist/config/managed-invocation-context-resolver.test.d.ts +2 -0
  302. package/dist/config/managed-invocation-context-resolver.test.d.ts.map +1 -0
  303. package/dist/config/managed-invocation-context-resolver.test.js +133 -0
  304. package/dist/config/managed-invocation-context-resolver.test.js.map +1 -0
  305. package/dist/config/model-task-suitability.d.ts +9 -0
  306. package/dist/config/model-task-suitability.d.ts.map +1 -0
  307. package/dist/config/model-task-suitability.js +40 -0
  308. package/dist/config/model-task-suitability.js.map +1 -0
  309. package/dist/config/native-agent-projection.d.ts +16 -0
  310. package/dist/config/native-agent-projection.d.ts.map +1 -0
  311. package/dist/config/native-agent-projection.js +242 -0
  312. package/dist/config/native-agent-projection.js.map +1 -0
  313. package/dist/config/native-hook-projection.d.ts +11 -0
  314. package/dist/config/native-hook-projection.d.ts.map +1 -0
  315. package/dist/config/native-hook-projection.js +180 -0
  316. package/dist/config/native-hook-projection.js.map +1 -0
  317. package/dist/config/native-permission-projection.d.ts +12 -0
  318. package/dist/config/native-permission-projection.d.ts.map +1 -0
  319. package/dist/config/native-permission-projection.js +162 -0
  320. package/dist/config/native-permission-projection.js.map +1 -0
  321. package/dist/config/native-projection-backup.d.ts +8 -0
  322. package/dist/config/native-projection-backup.d.ts.map +1 -0
  323. package/dist/config/native-projection-backup.js +19 -0
  324. package/dist/config/native-projection-backup.js.map +1 -0
  325. package/dist/config/native-projection-policy.d.ts +10 -0
  326. package/dist/config/native-projection-policy.d.ts.map +1 -0
  327. package/dist/config/native-projection-policy.js +9 -0
  328. package/dist/config/native-projection-policy.js.map +1 -0
  329. package/dist/config/native-projection-state.d.ts +57 -0
  330. package/dist/config/native-projection-state.d.ts.map +1 -0
  331. package/dist/config/native-projection-state.js +199 -0
  332. package/dist/config/native-projection-state.js.map +1 -0
  333. package/dist/config/native-skill-projection.d.ts +24 -0
  334. package/dist/config/native-skill-projection.d.ts.map +1 -0
  335. package/dist/config/native-skill-projection.js +170 -0
  336. package/dist/config/native-skill-projection.js.map +1 -0
  337. package/dist/config/operator-identity-context.d.ts +7 -0
  338. package/dist/config/operator-identity-context.d.ts.map +1 -0
  339. package/dist/config/operator-identity-context.js +46 -0
  340. package/dist/config/operator-identity-context.js.map +1 -0
  341. package/dist/config/operator-identity-context.test.d.ts +2 -0
  342. package/dist/config/operator-identity-context.test.d.ts.map +1 -0
  343. package/dist/config/operator-identity-context.test.js +61 -0
  344. package/dist/config/operator-identity-context.test.js.map +1 -0
  345. package/dist/config/operator-voice.d.ts +10 -0
  346. package/dist/config/operator-voice.d.ts.map +1 -0
  347. package/dist/config/operator-voice.js +29 -0
  348. package/dist/config/operator-voice.js.map +1 -0
  349. package/dist/config/provider-route-candidates.d.ts +20 -0
  350. package/dist/config/provider-route-candidates.d.ts.map +1 -0
  351. package/dist/config/provider-route-candidates.js +211 -0
  352. package/dist/config/provider-route-candidates.js.map +1 -0
  353. package/dist/config/provider-route-candidates.test.d.ts +2 -0
  354. package/dist/config/provider-route-candidates.test.d.ts.map +1 -0
  355. package/dist/config/provider-route-candidates.test.js +150 -0
  356. package/dist/config/provider-route-candidates.test.js.map +1 -0
  357. package/dist/config/skill-registry.d.ts +9 -0
  358. package/dist/config/skill-registry.d.ts.map +1 -0
  359. package/dist/config/skill-registry.js +13 -0
  360. package/dist/config/skill-registry.js.map +1 -0
  361. package/dist/config/skill-registry.test.d.ts +2 -0
  362. package/dist/config/skill-registry.test.d.ts.map +1 -0
  363. package/dist/config/skill-registry.test.js +64 -0
  364. package/dist/config/skill-registry.test.js.map +1 -0
  365. package/dist/config/task-skill-selection.d.ts +24 -0
  366. package/dist/config/task-skill-selection.d.ts.map +1 -0
  367. package/dist/config/task-skill-selection.js +79 -0
  368. package/dist/config/task-skill-selection.js.map +1 -0
  369. package/dist/config/translators/claude-translator.d.ts +7 -0
  370. package/dist/config/translators/claude-translator.d.ts.map +1 -0
  371. package/dist/config/translators/claude-translator.js +30 -0
  372. package/dist/config/translators/claude-translator.js.map +1 -0
  373. package/dist/config/translators/codex-translator.d.ts +7 -0
  374. package/dist/config/translators/codex-translator.d.ts.map +1 -0
  375. package/dist/config/translators/codex-translator.js +20 -0
  376. package/dist/config/translators/codex-translator.js.map +1 -0
  377. package/dist/config/translators/opencode-translator.d.ts +7 -0
  378. package/dist/config/translators/opencode-translator.d.ts.map +1 -0
  379. package/dist/config/translators/opencode-translator.js +19 -0
  380. package/dist/config/translators/opencode-translator.js.map +1 -0
  381. package/dist/config/translators/permission-projection.d.ts +26 -0
  382. package/dist/config/translators/permission-projection.d.ts.map +1 -0
  383. package/dist/config/translators/permission-projection.js +22 -0
  384. package/dist/config/translators/permission-projection.js.map +1 -0
  385. package/dist/config/web-tools-config.d.ts +45 -0
  386. package/dist/config/web-tools-config.d.ts.map +1 -0
  387. package/dist/config/web-tools-config.js +846 -0
  388. package/dist/config/web-tools-config.js.map +1 -0
  389. package/dist/config.d.ts +4 -0
  390. package/dist/config.d.ts.map +1 -1
  391. package/dist/config.js.map +1 -1
  392. package/dist/engines/engine-registry.d.ts +45 -0
  393. package/dist/engines/engine-registry.d.ts.map +1 -0
  394. package/dist/engines/engine-registry.js +125 -0
  395. package/dist/engines/engine-registry.js.map +1 -0
  396. package/dist/index.d.ts +2 -2
  397. package/dist/index.d.ts.map +1 -1
  398. package/dist/index.js +141 -18
  399. package/dist/index.js.map +1 -1
  400. package/dist/kiln-yaml-types.d.ts +207 -1
  401. package/dist/kiln-yaml-types.d.ts.map +1 -1
  402. package/dist/kiln-yaml-types.js +29 -0
  403. package/dist/kiln-yaml-types.js.map +1 -1
  404. package/dist/kiln-yaml.d.ts +1 -1
  405. package/dist/kiln-yaml.d.ts.map +1 -1
  406. package/dist/kiln-yaml.js +93 -0
  407. package/dist/kiln-yaml.js.map +1 -1
  408. package/dist/mcp/config-generator.d.ts.map +1 -1
  409. package/dist/mcp/config-generator.js +8 -7
  410. package/dist/mcp/config-generator.js.map +1 -1
  411. package/dist/mcp/index.d.ts +2 -25
  412. package/dist/mcp/index.d.ts.map +1 -1
  413. package/dist/mcp/index.js +1 -103
  414. package/dist/mcp/index.js.map +1 -1
  415. package/dist/wrapper/__tests__/session-manager-context-governor.test.d.ts +2 -0
  416. package/dist/wrapper/__tests__/session-manager-context-governor.test.d.ts.map +1 -0
  417. package/dist/wrapper/__tests__/session-manager-context-governor.test.js +210 -0
  418. package/dist/wrapper/__tests__/session-manager-context-governor.test.js.map +1 -0
  419. package/dist/wrapper/claude-code-process.d.ts +1 -0
  420. package/dist/wrapper/claude-code-process.d.ts.map +1 -1
  421. package/dist/wrapper/claude-code-process.js +32 -19
  422. package/dist/wrapper/claude-code-process.js.map +1 -1
  423. package/dist/wrapper/cleanup-registry.d.ts.map +1 -1
  424. package/dist/wrapper/cleanup-registry.js +3 -1
  425. package/dist/wrapper/cleanup-registry.js.map +1 -1
  426. package/dist/wrapper/codex-session.d.ts +3 -0
  427. package/dist/wrapper/codex-session.d.ts.map +1 -1
  428. package/dist/wrapper/codex-session.js +193 -85
  429. package/dist/wrapper/codex-session.js.map +1 -1
  430. package/dist/wrapper/debug.d.ts.map +1 -1
  431. package/dist/wrapper/debug.js +2 -0
  432. package/dist/wrapper/debug.js.map +1 -1
  433. package/dist/wrapper/direct-provider-adapter-factory.d.ts +12 -0
  434. package/dist/wrapper/direct-provider-adapter-factory.d.ts.map +1 -0
  435. package/dist/wrapper/direct-provider-adapter-factory.js +99 -0
  436. package/dist/wrapper/direct-provider-adapter-factory.js.map +1 -0
  437. package/dist/wrapper/index.d.ts +0 -2
  438. package/dist/wrapper/index.d.ts.map +1 -1
  439. package/dist/wrapper/index.js +0 -1
  440. package/dist/wrapper/index.js.map +1 -1
  441. package/dist/wrapper/opencode-session.d.ts +4 -0
  442. package/dist/wrapper/opencode-session.d.ts.map +1 -1
  443. package/dist/wrapper/opencode-session.js +245 -38
  444. package/dist/wrapper/opencode-session.js.map +1 -1
  445. package/dist/wrapper/permission-evaluator.d.ts +2 -1
  446. package/dist/wrapper/permission-evaluator.d.ts.map +1 -1
  447. package/dist/wrapper/permission-evaluator.js +54 -0
  448. package/dist/wrapper/permission-evaluator.js.map +1 -1
  449. package/dist/wrapper/permission-normalizer.d.ts +5 -1
  450. package/dist/wrapper/permission-normalizer.d.ts.map +1 -1
  451. package/dist/wrapper/permission-normalizer.js +17 -0
  452. package/dist/wrapper/permission-normalizer.js.map +1 -1
  453. package/dist/wrapper/permission-policy-authorizer.d.ts +1 -1
  454. package/dist/wrapper/permission-policy-authorizer.js +1 -1
  455. package/dist/wrapper/pooled-harness-session.d.ts +24 -0
  456. package/dist/wrapper/pooled-harness-session.d.ts.map +1 -0
  457. package/dist/wrapper/pooled-harness-session.js +123 -0
  458. package/dist/wrapper/pooled-harness-session.js.map +1 -0
  459. package/dist/wrapper/preamble-builder.d.ts +4 -1
  460. package/dist/wrapper/preamble-builder.d.ts.map +1 -1
  461. package/dist/wrapper/preamble-builder.js +48 -20
  462. package/dist/wrapper/preamble-builder.js.map +1 -1
  463. package/dist/wrapper/provider-session.d.ts +25 -5
  464. package/dist/wrapper/provider-session.d.ts.map +1 -1
  465. package/dist/wrapper/provider-session.js +562 -138
  466. package/dist/wrapper/provider-session.js.map +1 -1
  467. package/dist/wrapper/session-manager.d.ts.map +1 -1
  468. package/dist/wrapper/session-manager.js +16 -5
  469. package/dist/wrapper/session-manager.js.map +1 -1
  470. package/dist/wrapper/session-registry.d.ts +11 -1
  471. package/dist/wrapper/session-registry.d.ts.map +1 -1
  472. package/dist/wrapper/session-registry.js +167 -259
  473. package/dist/wrapper/session-registry.js.map +1 -1
  474. package/dist/wrapper/session-store.d.ts +33 -10
  475. package/dist/wrapper/session-store.d.ts.map +1 -1
  476. package/dist/wrapper/session-store.js +327 -84
  477. package/dist/wrapper/session-store.js.map +1 -1
  478. package/dist/wrapper/session.d.ts +55 -2
  479. package/dist/wrapper/session.d.ts.map +1 -1
  480. package/dist/wrapper/session.js +11 -2
  481. package/dist/wrapper/session.js.map +1 -1
  482. package/package.json +8 -8
  483. package/dist/application/__tests__/plan-exit-tool.test.d.ts +0 -2
  484. package/dist/application/__tests__/plan-exit-tool.test.d.ts.map +0 -1
  485. package/dist/application/__tests__/plan-exit-tool.test.js +0 -12
  486. package/dist/application/__tests__/plan-exit-tool.test.js.map +0 -1
  487. package/dist/application/context-governor.d.ts +0 -26
  488. package/dist/application/context-governor.d.ts.map +0 -1
  489. package/dist/application/context-governor.js +0 -164
  490. package/dist/application/context-governor.js.map +0 -1
  491. package/dist/application/plan-exit-tool.d.ts +0 -19
  492. package/dist/application/plan-exit-tool.d.ts.map +0 -1
  493. package/dist/application/plan-exit-tool.js +0 -13
  494. package/dist/application/plan-exit-tool.js.map +0 -1
  495. package/dist/commands/serve.d.ts +0 -7
  496. package/dist/commands/serve.d.ts.map +0 -1
  497. package/dist/commands/serve.js +0 -24
  498. package/dist/commands/serve.js.map +0 -1
  499. package/dist/mcp/server.d.ts +0 -36
  500. package/dist/mcp/server.d.ts.map +0 -1
  501. package/dist/mcp/server.js +0 -156
  502. package/dist/mcp/server.js.map +0 -1
  503. package/dist/mcp/transports.d.ts +0 -28
  504. package/dist/mcp/transports.d.ts.map +0 -1
  505. package/dist/mcp/transports.js +0 -108
  506. package/dist/mcp/transports.js.map +0 -1
  507. package/dist/mcp-entry.d.ts +0 -3
  508. package/dist/mcp-entry.d.ts.map +0 -1
  509. package/dist/mcp-entry.js +0 -19
  510. package/dist/mcp-entry.js.map +0 -1
  511. package/dist/sync/agent-sync.d.ts +0 -13
  512. package/dist/sync/agent-sync.d.ts.map +0 -1
  513. package/dist/sync/agent-sync.js +0 -130
  514. package/dist/sync/agent-sync.js.map +0 -1
  515. package/dist/sync/agent-sync.test.d.ts +0 -2
  516. package/dist/sync/agent-sync.test.d.ts.map +0 -1
  517. package/dist/sync/agent-sync.test.js +0 -130
  518. package/dist/sync/agent-sync.test.js.map +0 -1
  519. package/dist/sync/agents-md-sync.d.ts +0 -7
  520. package/dist/sync/agents-md-sync.d.ts.map +0 -1
  521. package/dist/sync/agents-md-sync.js +0 -44
  522. package/dist/sync/agents-md-sync.js.map +0 -1
  523. package/dist/sync/agents-md-sync.test.d.ts +0 -2
  524. package/dist/sync/agents-md-sync.test.d.ts.map +0 -1
  525. package/dist/sync/agents-md-sync.test.js +0 -154
  526. package/dist/sync/agents-md-sync.test.js.map +0 -1
  527. package/dist/sync/hook-sync.d.ts +0 -8
  528. package/dist/sync/hook-sync.d.ts.map +0 -1
  529. package/dist/sync/hook-sync.js +0 -90
  530. package/dist/sync/hook-sync.js.map +0 -1
  531. package/dist/sync/security-sync.d.ts +0 -9
  532. package/dist/sync/security-sync.d.ts.map +0 -1
  533. package/dist/sync/security-sync.js +0 -161
  534. package/dist/sync/security-sync.js.map +0 -1
  535. package/dist/sync/skill-sync.d.ts +0 -10
  536. package/dist/sync/skill-sync.d.ts.map +0 -1
  537. package/dist/sync/skill-sync.js +0 -87
  538. package/dist/sync/skill-sync.js.map +0 -1
  539. package/dist/sync/skill-sync.test.d.ts +0 -2
  540. package/dist/sync/skill-sync.test.d.ts.map +0 -1
  541. package/dist/sync/skill-sync.test.js +0 -163
  542. package/dist/sync/skill-sync.test.js.map +0 -1
  543. package/dist/wrapper/executable-provider-session.d.ts +0 -26
  544. package/dist/wrapper/executable-provider-session.d.ts.map +0 -1
  545. package/dist/wrapper/executable-provider-session.js +0 -214
  546. package/dist/wrapper/executable-provider-session.js.map +0 -1
package/README.md CHANGED
@@ -6,16 +6,19 @@
6
6
 
7
7
  <p align="center">
8
8
  <a href="https://www.npmjs.com/package/@kilnai/cli"><img src="https://img.shields.io/npm/v/@kilnai/cli.svg" alt="npm version" /></a>
9
- <a href="https://opensource.org/licenses/MIT"><img src="https://img.shields.io/badge/License-MIT-blue.svg" alt="License: MIT" /></a>
9
+ <a href="https://opensource.org/licenses/Apache-2.0"><img src="https://img.shields.io/badge/License-Apache_2.0-blue.svg" alt="License: Apache-2.0" /></a>
10
10
  </p>
11
11
 
12
- <p align="center">CLI and MCP server for the Kiln AI orchestration engine.</p>
12
+ <p align="center">CLI, GUI launcher, and MCP tooling for the Kiln governed AI control plane.</p>
13
13
 
14
14
  ---
15
15
 
16
16
  ## What is this?
17
17
 
18
- `@kilnai/cli` is the command-line interface for [Kiln](https://github.com/sequelcore/kiln). It provides an interactive setup wizard, dev mode with YAML hot-reload, and an MCP server for Claude Code integration.
18
+ `@kilnai/cli` is the command-line interface for
19
+ [Kiln](https://github.com/sequelcore/kiln). It provides local operator
20
+ commands, GUI/TUI launchers, config projection tools, workflow commands, and
21
+ the dev-tools MCP server.
19
22
 
20
23
  ## Install
21
24
 
@@ -23,6 +26,9 @@
23
26
  bun add -g @kilnai/cli
24
27
  ```
25
28
 
29
+ This installs the official CLI, GUI launcher/assets, TUI, runtime, and gateway
30
+ contracts so `kiln gui` and `kiln tui` can run from any project directory.
31
+
26
32
  Or use directly:
27
33
 
28
34
  ```bash
@@ -40,9 +46,9 @@ kiln init
40
46
  ```
41
47
 
42
48
  Walks you through:
43
- - Provider selection (Anthropic, OpenAI, DeepSeek, Ollama)
44
- - Channel selection (CLI, Web, WhatsApp, Slack, API)
45
- - Team mode (sequential, supervisor, swarm)
49
+ - Provider selection
50
+ - Channel selection
51
+ - Team mode selection for YAML app scaffolding
46
52
  - Quality gates (test, lint, typecheck)
47
53
  - Domain detection (React, Python, docs, etc.)
48
54
 
@@ -66,6 +72,20 @@ Run a single task:
66
72
  kiln run "Implement the login page"
67
73
  ```
68
74
 
75
+ Useful flags:
76
+
77
+ - `--provider <name>` to select the provider for the run
78
+ - `--model <name>` to select the model for providers that require model selection
79
+ - `--effort <minimal|low|medium|high|xhigh>` or
80
+ `--reasoning-effort <minimal|low|medium|high|xhigh>` to set reasoning effort
81
+ for providers/models that support it
82
+ - `--plan` to start in plan mode
83
+ - `--workers <number>` to run isolated parallel workers
84
+
85
+ Reasoning effort is forwarded through the shared session contract. For the
86
+ Codex CLI wrapper it becomes Codex's `model_reasoning_effort` config override;
87
+ for direct runtime providers it is sent as provider request metadata.
88
+
69
89
  ### `kiln tui`
70
90
 
71
91
  Start the interactive terminal UI:
@@ -77,6 +97,7 @@ kiln tui
77
97
  Useful flags:
78
98
 
79
99
  - `--provider <name>` to select the initial provider
100
+ - `--model <name>` to select the initial model
80
101
  - `--theme <name>` to select a theme
81
102
  - `--port <number>` to override the local TUI gateway port
82
103
  - `--plan` to start in plan mode
@@ -86,7 +107,12 @@ Current transport behavior:
86
107
  - gateway transport is the default path
87
108
  - direct transport is available only with `KILN_TUI_TRANSPORT=direct`
88
109
 
89
- The default gateway path keeps TUI conversations on the runtime session pipeline so provider routing, continuity, approvals, and sidebar route labels reflect the actual backend used for each turn.
110
+ The default gateway path keeps TUI conversations on the runtime session
111
+ pipeline so provider routing, continuity, approvals, reasoning effort, and
112
+ sidebar route labels reflect the actual backend used for each turn.
113
+
114
+ Inside the TUI, use `/provider` to change provider/model and `/effort` to cycle
115
+ the active model's advertised reasoning effort options.
90
116
 
91
117
  ### `kiln gateway`
92
118
 
@@ -160,4 +186,4 @@ This lets Claude Code use Kiln tools directly in your development workflow.
160
186
 
161
187
  ## License
162
188
 
163
- [MIT](https://github.com/sequelcore/kiln/blob/main/LICENSE)
189
+ [Apache-2.0](https://github.com/sequelcore/kiln/blob/main/LICENSE)
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=session-report.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"session-report.test.d.ts","sourceRoot":"","sources":["../../../src/application/__tests__/session-report.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,100 @@
1
+ import { describe, expect, it } from "vitest";
2
+ import { summarizeContextGovernance } from "../session-report.js";
3
+ describe("summarizeContextGovernance", () => {
4
+ it("uses core context audit reasons instead of local inference when available", () => {
5
+ const projectedContext = {
6
+ blocks: [
7
+ {
8
+ id: "candidate:0",
9
+ kind: "summary",
10
+ source: "runtime-continuity",
11
+ content: "summary",
12
+ required: false,
13
+ score: 80,
14
+ estimatedTokens: 2,
15
+ },
16
+ ],
17
+ deferredBlocks: [
18
+ {
19
+ id: "candidate:1",
20
+ kind: "memory",
21
+ source: "runtime-recalled-memory",
22
+ content: "memory",
23
+ required: false,
24
+ score: 40,
25
+ estimatedTokens: 2,
26
+ },
27
+ ],
28
+ estimatedTokens: 2,
29
+ tokenBudget: 2,
30
+ overflow: true,
31
+ auditTrail: [
32
+ {
33
+ governor: "DefaultContextGovernor",
34
+ selectedBlockIds: ["candidate:0"],
35
+ deferredBlockIds: ["candidate:1"],
36
+ requiredBlockIds: [],
37
+ preservedRequiredBlockIds: [],
38
+ selectedTokens: 2,
39
+ requiredTokens: 0,
40
+ tokenBudget: 2,
41
+ overflow: true,
42
+ overflowReason: "budget-cap",
43
+ blocks: [
44
+ {
45
+ id: "candidate:0",
46
+ kind: "summary",
47
+ source: "runtime-continuity",
48
+ required: false,
49
+ estimatedTokens: 2,
50
+ baseScore: 80,
51
+ effectiveScore: 80,
52
+ decision: "admitted",
53
+ reason: "within-budget",
54
+ order: 0,
55
+ },
56
+ {
57
+ id: "candidate:1",
58
+ kind: "memory",
59
+ source: "runtime-recalled-memory",
60
+ required: false,
61
+ estimatedTokens: 2,
62
+ baseScore: 40,
63
+ effectiveScore: 40,
64
+ decision: "deferred",
65
+ reason: "budget-cap",
66
+ order: 1,
67
+ },
68
+ ],
69
+ },
70
+ ],
71
+ };
72
+ expect(summarizeContextGovernance(projectedContext).deferredReasons).toEqual([
73
+ "budget-cap",
74
+ ]);
75
+ });
76
+ it("keeps the local deferred reason fallback when no core audit is present", () => {
77
+ const projectedContext = {
78
+ blocks: [],
79
+ deferredBlocks: [
80
+ {
81
+ id: "candidate:1",
82
+ kind: "memory",
83
+ source: "runtime-recalled-memory",
84
+ content: "memory",
85
+ required: false,
86
+ score: 40,
87
+ estimatedTokens: 2,
88
+ },
89
+ ],
90
+ estimatedTokens: 0,
91
+ tokenBudget: 2,
92
+ overflow: true,
93
+ };
94
+ expect(summarizeContextGovernance(projectedContext).deferredReasons).toEqual([
95
+ "required-overflow",
96
+ "lower-priority-memory",
97
+ ]);
98
+ });
99
+ });
100
+ //# sourceMappingURL=session-report.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"session-report.test.js","sourceRoot":"","sources":["../../../src/application/__tests__/session-report.test.ts"],"names":[],"mappings":"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"}
@@ -1,12 +1,40 @@
1
+ import type { AgentTier, ModelTaskSuitabilityTask } from "@kilnai/core";
1
2
  export interface KilnAgentDefinition {
2
3
  readonly name: string;
4
+ readonly displayName?: string;
5
+ readonly nicknameCandidates?: readonly string[];
3
6
  readonly role: string;
7
+ readonly description?: string;
8
+ readonly goal: string;
9
+ readonly backstory?: string;
10
+ readonly tier: AgentTier;
4
11
  readonly tools?: readonly string[];
5
12
  readonly model?: string;
6
13
  readonly skills?: readonly string[];
14
+ readonly instructionProfiles?: readonly string[];
15
+ readonly taskAffinity?: readonly ModelTaskSuitabilityTask[];
16
+ readonly mode?: KilnAgentMode;
17
+ readonly structured?: boolean;
18
+ readonly count?: number;
19
+ readonly sandbox?: boolean;
20
+ readonly modalities?: readonly string[];
21
+ readonly authorityProfile?: string;
22
+ readonly routeId?: string;
23
+ readonly providerRoute?: KilnAgentProviderRoute;
24
+ readonly voiceProfile?: string;
7
25
  readonly instructions?: string;
8
- readonly scope: "global" | "project";
26
+ readonly scope: "builtin" | "global" | "project";
9
27
  }
10
- export declare function loadAgentDefinitions(projectPath: string): Promise<KilnAgentDefinition[]>;
28
+ export type KilnAgentMode = "primary" | "subagent" | "managed-child" | "all";
29
+ export interface KilnAgentProviderRoute {
30
+ readonly providerId: string;
31
+ readonly model?: string;
32
+ readonly reasoningEffort?: string;
33
+ }
34
+ export declare function parseAgentDefinitionContent(raw: string, scope?: "global" | "project"): KilnAgentDefinition | undefined;
35
+ export interface LoadAgentDefinitionsOptions {
36
+ readonly includeBuiltins?: boolean;
37
+ }
38
+ export declare function loadAgentDefinitions(projectPath: string, options?: LoadAgentDefinitionsOptions): Promise<KilnAgentDefinition[]>;
11
39
  export declare function findAgent(definitions: KilnAgentDefinition[], name: string): KilnAgentDefinition | undefined;
12
40
  //# sourceMappingURL=agent-loader.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"agent-loader.d.ts","sourceRoot":"","sources":["../../src/application/agent-loader.ts"],"names":[],"mappings":"AAKA,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,KAAK,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IACnC,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,MAAM,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IACpC,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,KAAK,EAAE,QAAQ,GAAG,SAAS,CAAC;CACtC;AAiHD,wBAAsB,oBAAoB,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,mBAAmB,EAAE,CAAC,CAe9F;AAED,wBAAgB,SAAS,CACvB,WAAW,EAAE,mBAAmB,EAAE,EAClC,IAAI,EAAE,MAAM,GACX,mBAAmB,GAAG,SAAS,CAOjC"}
1
+ {"version":3,"file":"agent-loader.d.ts","sourceRoot":"","sources":["../../src/application/agent-loader.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,SAAS,EAAE,wBAAwB,EAAE,MAAM,cAAc,CAAC;AAGxE,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,kBAAkB,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IAChD,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,IAAI,EAAE,SAAS,CAAC;IACzB,QAAQ,CAAC,KAAK,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IACnC,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,MAAM,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IACpC,QAAQ,CAAC,mBAAmB,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IACjD,QAAQ,CAAC,YAAY,CAAC,EAAE,SAAS,wBAAwB,EAAE,CAAC;IAC5D,QAAQ,CAAC,IAAI,CAAC,EAAE,aAAa,CAAC;IAC9B,QAAQ,CAAC,UAAU,CAAC,EAAE,OAAO,CAAC;IAC9B,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,OAAO,CAAC,EAAE,OAAO,CAAC;IAC3B,QAAQ,CAAC,UAAU,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IACxC,QAAQ,CAAC,gBAAgB,CAAC,EAAE,MAAM,CAAC;IACnC,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,aAAa,CAAC,EAAE,sBAAsB,CAAC;IAChD,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,KAAK,EAAE,SAAS,GAAG,QAAQ,GAAG,SAAS,CAAC;CAClD;AAED,MAAM,MAAM,aAAa,GAAG,SAAS,GAAG,UAAU,GAAG,eAAe,GAAG,KAAK,CAAC;AAE7E,MAAM,WAAW,sBAAsB;IACrC,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,eAAe,CAAC,EAAE,MAAM,CAAC;CACnC;AAuKD,wBAAgB,2BAA2B,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,GAAE,QAAQ,GAAG,SAAqB,GAAG,mBAAmB,GAAG,SAAS,CAEjI;AAkCD,MAAM,WAAW,2BAA2B;IAC1C,QAAQ,CAAC,eAAe,CAAC,EAAE,OAAO,CAAC;CACpC;AAED,wBAAsB,oBAAoB,CACxC,WAAW,EAAE,MAAM,EACnB,OAAO,GAAE,2BAAgC,GACxC,OAAO,CAAC,mBAAmB,EAAE,CAAC,CAqBhC;AAED,wBAAgB,SAAS,CACvB,WAAW,EAAE,mBAAmB,EAAE,EAClC,IAAI,EAAE,MAAM,GACX,mBAAmB,GAAG,SAAS,CAkBjC"}
@@ -2,6 +2,7 @@ import { readdirSync, readFileSync } from "node:fs";
2
2
  import { join } from "node:path";
3
3
  import { homedir } from "node:os";
4
4
  import { parse } from "yaml";
5
+ import { KILN_FIRST_PARTY_AGENT_DEFAULTS } from "./first-party-agent-defaults.js";
5
6
  function parseFrontmatter(raw) {
6
7
  const content = raw.replace(/^\uFEFF/, "");
7
8
  const match = /^---\s*\r?\n([\s\S]*?)\r?\n---\s*([\s\S]*)$/u.exec(content);
@@ -30,6 +31,50 @@ function asStringArray(value) {
30
31
  .filter((entry) => entry.length > 0);
31
32
  return entries.length > 0 ? entries : undefined;
32
33
  }
34
+ function asBoolean(value) {
35
+ return typeof value === "boolean" ? value : undefined;
36
+ }
37
+ function asPositiveInteger(value) {
38
+ return typeof value === "number" && Number.isInteger(value) && value > 0 ? value : undefined;
39
+ }
40
+ function asAgentTier(value) {
41
+ return value === "reasoning" || value === "coding" || value === "fast" ? value : undefined;
42
+ }
43
+ function asAgentMode(value) {
44
+ return value === "primary" || value === "subagent" || value === "managed-child" || value === "all"
45
+ ? value
46
+ : undefined;
47
+ }
48
+ function asTaskAffinity(value) {
49
+ const entries = asStringArray(value);
50
+ if (!entries) {
51
+ return undefined;
52
+ }
53
+ const supported = entries.filter((entry) => entry === "architecture-review"
54
+ || entry === "backend-coding"
55
+ || entry === "frontend-design"
56
+ || entry === "mechanical-edit"
57
+ || entry === "research"
58
+ || entry === "test-writing");
59
+ return supported.length > 0 ? supported : undefined;
60
+ }
61
+ function asProviderRoute(value) {
62
+ if (!value || typeof value !== "object") {
63
+ return undefined;
64
+ }
65
+ const record = value;
66
+ const providerId = asNonEmptyString(record.providerId);
67
+ if (!providerId) {
68
+ return undefined;
69
+ }
70
+ const model = asNonEmptyString(record.model);
71
+ const reasoningEffort = asNonEmptyString(record.reasoningEffort);
72
+ return {
73
+ providerId,
74
+ ...(model ? { model } : {}),
75
+ ...(reasoningEffort ? { reasoningEffort } : {}),
76
+ };
77
+ }
33
78
  function parseAgentDefinition(raw, scope) {
34
79
  const parsed = parseFrontmatter(raw);
35
80
  if (!parsed) {
@@ -48,23 +93,60 @@ function parseAgentDefinition(raw, scope) {
48
93
  const record = frontmatter;
49
94
  const name = asNonEmptyString(record.name);
50
95
  const role = asNonEmptyString(record.role);
51
- if (!name || !role) {
96
+ const goal = asNonEmptyString(record.goal);
97
+ const tier = asAgentTier(record.tier);
98
+ if (!name || !role || !goal || !tier) {
52
99
  return undefined;
53
100
  }
101
+ const description = asNonEmptyString(record.description);
102
+ const displayName = asNonEmptyString(record.displayName);
103
+ const nicknameCandidates = asStringArray(record.nicknameCandidates);
104
+ const backstory = asNonEmptyString(record.backstory);
54
105
  const tools = asStringArray(record.tools);
55
106
  const model = asNonEmptyString(record.model);
56
107
  const skills = asStringArray(record.skills);
108
+ const instructionProfiles = asStringArray(record.instructionProfiles);
109
+ const taskAffinity = asTaskAffinity(record.taskAffinity);
110
+ const mode = asAgentMode(record.mode);
111
+ const structured = asBoolean(record.structured);
112
+ const count = asPositiveInteger(record.count);
113
+ const sandbox = asBoolean(record.sandbox);
114
+ const modalities = asStringArray(record.modalities);
115
+ const authorityProfile = asNonEmptyString(record.authorityProfile);
116
+ const routeId = asNonEmptyString(record.routeId);
117
+ const providerRoute = asProviderRoute(record.providerRoute);
118
+ const voiceProfile = asNonEmptyString(record.voiceProfile);
57
119
  const instructions = parsed.body.length > 0 ? parsed.body : undefined;
58
120
  return {
59
121
  name,
122
+ ...(displayName ? { displayName } : {}),
123
+ ...(nicknameCandidates ? { nicknameCandidates } : {}),
60
124
  role,
125
+ ...(description ? { description } : {}),
126
+ goal,
127
+ ...(backstory ? { backstory } : {}),
128
+ tier,
61
129
  ...(tools ? { tools } : {}),
62
130
  ...(model ? { model } : {}),
63
131
  ...(skills ? { skills } : {}),
132
+ ...(instructionProfiles ? { instructionProfiles } : {}),
133
+ ...(taskAffinity ? { taskAffinity } : {}),
134
+ ...(mode ? { mode } : {}),
135
+ ...(structured !== undefined ? { structured } : {}),
136
+ ...(count !== undefined ? { count } : {}),
137
+ ...(sandbox !== undefined ? { sandbox } : {}),
138
+ ...(modalities ? { modalities } : {}),
139
+ ...(authorityProfile ? { authorityProfile } : {}),
140
+ ...(routeId ? { routeId } : {}),
141
+ ...(providerRoute ? { providerRoute } : {}),
142
+ ...(voiceProfile ? { voiceProfile } : {}),
64
143
  ...(instructions ? { instructions } : {}),
65
144
  scope,
66
145
  };
67
146
  }
147
+ export function parseAgentDefinitionContent(raw, scope = "project") {
148
+ return parseAgentDefinition(raw, scope);
149
+ }
68
150
  function readDefinitionsFromDirectory(directory, scope) {
69
151
  let entries;
70
152
  try {
@@ -92,10 +174,15 @@ function readDefinitionsFromDirectory(directory, scope) {
92
174
  }
93
175
  return definitions;
94
176
  }
95
- export async function loadAgentDefinitions(projectPath) {
177
+ export async function loadAgentDefinitions(projectPath, options = {}) {
96
178
  const globalDirectory = join(homedir(), ".kiln", "agents");
97
179
  const projectDirectory = join(projectPath, ".kiln", "agents");
98
180
  const merged = new Map();
181
+ if (options.includeBuiltins !== false) {
182
+ for (const definition of KILN_FIRST_PARTY_AGENT_DEFAULTS) {
183
+ merged.set(definition.name.toLowerCase(), definition);
184
+ }
185
+ }
99
186
  for (const definition of readDefinitionsFromDirectory(globalDirectory, "global")) {
100
187
  merged.set(definition.name.toLowerCase(), definition);
101
188
  }
@@ -109,6 +196,15 @@ export function findAgent(definitions, name) {
109
196
  if (target.length === 0) {
110
197
  return undefined;
111
198
  }
112
- return definitions.find((definition) => definition.name.toLowerCase() === target);
199
+ const canonicalMatch = definitions.find((definition) => definition.name.toLowerCase() === target);
200
+ if (canonicalMatch) {
201
+ return canonicalMatch;
202
+ }
203
+ const nicknameMatches = definitions.filter((definition) => {
204
+ const displayName = definition.displayName?.toLowerCase();
205
+ const nicknames = definition.nicknameCandidates?.map((nickname) => nickname.toLowerCase()) ?? [];
206
+ return displayName === target || nicknames.includes(target);
207
+ });
208
+ return nicknameMatches.length === 1 ? nicknameMatches[0] : undefined;
113
209
  }
114
210
  //# sourceMappingURL=agent-loader.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"agent-loader.js","sourceRoot":"","sources":["../../src/application/agent-loader.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"agent-loader.js","sourceRoot":"","sources":["../../src/application/agent-loader.ts"],"names":[],"mappings":"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"}
@@ -58,18 +58,34 @@ describe("agent-loader", () => {
58
58
  afterEach(() => {
59
59
  vi.restoreAllMocks();
60
60
  });
61
- it("returns empty array when both directories missing", async () => {
61
+ it("returns first-party defaults when both directories missing", async () => {
62
62
  const definitions = await loadAgentDefinitions(PROJECT_PATH);
63
- expect(definitions).toEqual([]);
63
+ expect(findAgent(definitions, "architect")).toMatchObject({
64
+ name: "architect",
65
+ scope: "builtin",
66
+ taskAffinity: ["architecture-review"],
67
+ });
68
+ expect(findAgent(definitions, "coder")).toMatchObject({
69
+ name: "coder",
70
+ scope: "builtin",
71
+ tools: ["read", "grep", "glob", "write", "bash"],
72
+ });
64
73
  expect(readdirSyncMock).toHaveBeenCalledWith(GLOBAL_AGENTS_DIR);
65
74
  expect(readdirSyncMock).toHaveBeenCalledWith(PROJECT_AGENTS_DIR);
66
75
  });
67
- it("parses frontmatter correctly (name, role, tools, model, skills)", async () => {
76
+ it("parses canonical agent profile frontmatter", async () => {
68
77
  configureDirectories(["architect.md"], []);
69
78
  configureFiles({
70
79
  [join(GLOBAL_AGENTS_DIR, "architect.md")]: markdownWithFrontmatter([
71
80
  "name: Architect",
81
+ "displayName: Piama",
82
+ "nicknameCandidates:",
83
+ " - Architect Piama",
72
84
  "role: System architect",
85
+ "description: Reviews system boundaries",
86
+ "goal: Keep architecture coherent",
87
+ "backstory: Staff engineer perspective",
88
+ "tier: reasoning",
73
89
  "tools:",
74
90
  " - read",
75
91
  " - write",
@@ -77,16 +93,47 @@ describe("agent-loader", () => {
77
93
  "skills:",
78
94
  " - sequel-spring",
79
95
  " - refactor",
96
+ "instructionProfiles:",
97
+ " - sequel-engineering",
98
+ "mode: managed-child",
99
+ "structured: true",
100
+ "count: 2",
101
+ "sandbox: true",
102
+ "modalities:",
103
+ " - text",
104
+ "authorityProfile: foundation-readonly-plan",
105
+ "routeId: codex-oauth-readonly",
106
+ "providerRoute:",
107
+ " providerId: codex-oauth",
108
+ " model: gpt-5.4-mini",
80
109
  ].join("\n")),
81
110
  });
82
- const definitions = await loadAgentDefinitions(PROJECT_PATH);
111
+ const definitions = await loadAgentDefinitions(PROJECT_PATH, { includeBuiltins: false });
83
112
  expect(definitions).toEqual([
84
113
  {
85
114
  name: "Architect",
115
+ displayName: "Piama",
116
+ nicknameCandidates: ["Architect Piama"],
86
117
  role: "System architect",
118
+ description: "Reviews system boundaries",
119
+ goal: "Keep architecture coherent",
120
+ backstory: "Staff engineer perspective",
121
+ tier: "reasoning",
87
122
  tools: ["read", "write"],
88
123
  model: "claude-sonnet-4-6",
89
124
  skills: ["sequel-spring", "refactor"],
125
+ instructionProfiles: ["sequel-engineering"],
126
+ mode: "managed-child",
127
+ structured: true,
128
+ count: 2,
129
+ sandbox: true,
130
+ modalities: ["text"],
131
+ authorityProfile: "foundation-readonly-plan",
132
+ routeId: "codex-oauth-readonly",
133
+ providerRoute: {
134
+ providerId: "codex-oauth",
135
+ model: "gpt-5.4-mini",
136
+ },
90
137
  scope: "global",
91
138
  },
92
139
  ]);
@@ -94,24 +141,26 @@ describe("agent-loader", () => {
94
141
  it("captures markdown body as instructions", async () => {
95
142
  configureDirectories(["planner.md"], []);
96
143
  configureFiles({
97
- [join(GLOBAL_AGENTS_DIR, "planner.md")]: markdownWithFrontmatter(["name: Planner", "role: Planning specialist"].join("\n"), "\n# Plan\n\nCreate a concrete implementation plan.\n"),
144
+ [join(GLOBAL_AGENTS_DIR, "planner.md")]: markdownWithFrontmatter(["name: Planner", "role: Planning specialist", "goal: Produce plans", "tier: reasoning"].join("\n"), "\n# Plan\n\nCreate a concrete implementation plan.\n"),
98
145
  });
99
- const [definition] = await loadAgentDefinitions(PROJECT_PATH);
146
+ const [definition] = await loadAgentDefinitions(PROJECT_PATH, { includeBuiltins: false });
100
147
  expect(definition?.instructions).toBe("# Plan\n\nCreate a concrete implementation plan.");
101
148
  });
102
149
  it("project agents override global agents with same name", async () => {
103
150
  configureDirectories(["shared.md", "global-only.md"], ["shared.md", "project-only.md"]);
104
151
  configureFiles({
105
- [join(GLOBAL_AGENTS_DIR, "shared.md")]: markdownWithFrontmatter(["name: Shared", "role: Global role"].join("\n")),
106
- [join(GLOBAL_AGENTS_DIR, "global-only.md")]: markdownWithFrontmatter(["name: GlobalOnly", "role: Global only role"].join("\n")),
107
- [join(PROJECT_AGENTS_DIR, "shared.md")]: markdownWithFrontmatter(["name: Shared", "role: Project role"].join("\n")),
108
- [join(PROJECT_AGENTS_DIR, "project-only.md")]: markdownWithFrontmatter(["name: ProjectOnly", "role: Project only role"].join("\n")),
152
+ [join(GLOBAL_AGENTS_DIR, "shared.md")]: markdownWithFrontmatter(["name: Shared", "role: Global role", "goal: Global goal", "tier: fast"].join("\n")),
153
+ [join(GLOBAL_AGENTS_DIR, "global-only.md")]: markdownWithFrontmatter(["name: GlobalOnly", "role: Global only role", "goal: Global only goal", "tier: coding"].join("\n")),
154
+ [join(PROJECT_AGENTS_DIR, "shared.md")]: markdownWithFrontmatter(["name: Shared", "role: Project role", "goal: Project goal", "tier: reasoning"].join("\n")),
155
+ [join(PROJECT_AGENTS_DIR, "project-only.md")]: markdownWithFrontmatter(["name: ProjectOnly", "role: Project only role", "goal: Project only goal", "tier: fast"].join("\n")),
109
156
  });
110
- const definitions = await loadAgentDefinitions(PROJECT_PATH);
157
+ const definitions = await loadAgentDefinitions(PROJECT_PATH, { includeBuiltins: false });
111
158
  expect(definitions).toHaveLength(3);
112
159
  expect(findAgent(definitions, "shared")).toEqual({
113
160
  name: "Shared",
114
161
  role: "Project role",
162
+ goal: "Project goal",
163
+ tier: "reasoning",
115
164
  scope: "project",
116
165
  });
117
166
  expect(findAgent(definitions, "globalonly")?.scope).toBe("global");
@@ -122,28 +171,73 @@ describe("agent-loader", () => {
122
171
  configureFiles({
123
172
  [join(GLOBAL_AGENTS_DIR, "missing-name.md")]: markdownWithFrontmatter(["role: No name present"].join("\n")),
124
173
  });
125
- const definitions = await loadAgentDefinitions(PROJECT_PATH);
174
+ const definitions = await loadAgentDefinitions(PROJECT_PATH, { includeBuiltins: false });
126
175
  expect(definitions).toEqual([]);
127
176
  });
128
- it("skips files missing required role field", async () => {
177
+ it("skips files missing required canonical fields", async () => {
129
178
  configureDirectories(["missing-role.md"], []);
130
179
  configureFiles({
131
- [join(GLOBAL_AGENTS_DIR, "missing-role.md")]: markdownWithFrontmatter(["name: MissingRole"].join("\n")),
180
+ [join(GLOBAL_AGENTS_DIR, "missing-role.md")]: markdownWithFrontmatter(["name: MissingRole", "role: Worker"].join("\n")),
132
181
  });
133
- const definitions = await loadAgentDefinitions(PROJECT_PATH);
182
+ const definitions = await loadAgentDefinitions(PROJECT_PATH, { includeBuiltins: false });
134
183
  expect(definitions).toEqual([]);
135
184
  });
136
185
  it("findAgent() returns correct definition case-insensitively", () => {
137
186
  const definitions = [
138
- { name: "Planner", role: "Planning specialist", scope: "global" },
139
- { name: "Code-Reviewer", role: "Review specialist", scope: "project" },
187
+ { name: "Planner", role: "Planning specialist", goal: "Plan work", tier: "reasoning", scope: "global" },
188
+ { name: "Code-Reviewer", role: "Review specialist", goal: "Review code", tier: "coding", scope: "project" },
140
189
  ];
141
190
  expect(findAgent(definitions, "planner")).toBe(definitions[0]);
142
191
  expect(findAgent(definitions, "CODE-REVIEWER")).toBe(definitions[1]);
143
192
  });
193
+ it("findAgent() resolves unique display names and nicknames", () => {
194
+ const definitions = [
195
+ {
196
+ name: "tdd",
197
+ displayName: "Malcolm",
198
+ nicknameCandidates: ["Malcolm Wilkerson"],
199
+ role: "TDD specialist",
200
+ goal: "Write tests first",
201
+ tier: "reasoning",
202
+ scope: "global",
203
+ },
204
+ {
205
+ name: "coder",
206
+ displayName: "Reese",
207
+ role: "Coding specialist",
208
+ goal: "Implement code",
209
+ tier: "coding",
210
+ scope: "global",
211
+ },
212
+ ];
213
+ expect(findAgent(definitions, "malcolm")).toBe(definitions[0]);
214
+ expect(findAgent(definitions, "Malcolm Wilkerson")).toBe(definitions[0]);
215
+ expect(findAgent(definitions, "reese")).toBe(definitions[1]);
216
+ });
217
+ it("findAgent() does not resolve ambiguous nicknames", () => {
218
+ const definitions = [
219
+ {
220
+ name: "reviewer-one",
221
+ displayName: "Reviewer",
222
+ role: "Review specialist",
223
+ goal: "Review code",
224
+ tier: "reasoning",
225
+ scope: "global",
226
+ },
227
+ {
228
+ name: "reviewer-two",
229
+ nicknameCandidates: ["Reviewer"],
230
+ role: "Second review specialist",
231
+ goal: "Review code",
232
+ tier: "reasoning",
233
+ scope: "global",
234
+ },
235
+ ];
236
+ expect(findAgent(definitions, "Reviewer")).toBeUndefined();
237
+ });
144
238
  it("findAgent() returns undefined for unknown name", () => {
145
239
  const definitions = [
146
- { name: "Planner", role: "Planning specialist", scope: "global" },
240
+ { name: "Planner", role: "Planning specialist", goal: "Plan work", tier: "reasoning", scope: "global" },
147
241
  ];
148
242
  expect(findAgent(definitions, "unknown")).toBeUndefined();
149
243
  });