@kilnai/cli 0.23.2 → 1.0.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 (300) hide show
  1. package/README.md +33 -0
  2. package/dist/application/__tests__/plan-exit-tool.test.d.ts +2 -0
  3. package/dist/application/__tests__/plan-exit-tool.test.d.ts.map +1 -0
  4. package/dist/application/__tests__/plan-exit-tool.test.js +12 -0
  5. package/dist/application/__tests__/plan-exit-tool.test.js.map +1 -0
  6. package/dist/application/agent-loader.d.ts +12 -0
  7. package/dist/application/agent-loader.d.ts.map +1 -0
  8. package/dist/application/agent-loader.js +114 -0
  9. package/dist/application/agent-loader.js.map +1 -0
  10. package/dist/application/agent-loader.test.d.ts +2 -0
  11. package/dist/application/agent-loader.test.d.ts.map +1 -0
  12. package/dist/application/agent-loader.test.js +151 -0
  13. package/dist/application/agent-loader.test.js.map +1 -0
  14. package/dist/application/context-artifact-keys.d.ts +5 -0
  15. package/dist/application/context-artifact-keys.d.ts.map +1 -0
  16. package/dist/application/context-artifact-keys.js +14 -0
  17. package/dist/application/context-artifact-keys.js.map +1 -0
  18. package/dist/application/context-governance.d.ts +6 -0
  19. package/dist/application/context-governance.d.ts.map +1 -0
  20. package/dist/application/context-governance.js +20 -0
  21. package/dist/application/context-governance.js.map +1 -0
  22. package/dist/application/context-governor.d.ts +26 -0
  23. package/dist/application/context-governor.d.ts.map +1 -0
  24. package/dist/application/context-governor.js +164 -0
  25. package/dist/application/context-governor.js.map +1 -0
  26. package/dist/application/context-types.d.ts +20 -0
  27. package/dist/application/context-types.d.ts.map +1 -0
  28. package/dist/application/context-types.js +21 -0
  29. package/dist/application/context-types.js.map +1 -0
  30. package/dist/application/plan-exit-tool.d.ts +19 -0
  31. package/dist/application/plan-exit-tool.d.ts.map +1 -0
  32. package/dist/application/plan-exit-tool.js +13 -0
  33. package/dist/application/plan-exit-tool.js.map +1 -0
  34. package/dist/application/repo-summary-cache.d.ts +5 -0
  35. package/dist/application/repo-summary-cache.d.ts.map +1 -0
  36. package/dist/application/repo-summary-cache.js +82 -0
  37. package/dist/application/repo-summary-cache.js.map +1 -0
  38. package/dist/application/resume-strategy-feedback.d.ts +5 -0
  39. package/dist/application/resume-strategy-feedback.d.ts.map +1 -0
  40. package/dist/application/resume-strategy-feedback.js +81 -0
  41. package/dist/application/resume-strategy-feedback.js.map +1 -0
  42. package/dist/application/resume-strategy-policy.d.ts +26 -0
  43. package/dist/application/resume-strategy-policy.d.ts.map +1 -0
  44. package/dist/application/resume-strategy-policy.js +35 -0
  45. package/dist/application/resume-strategy-policy.js.map +1 -0
  46. package/dist/application/run-session.d.ts +39 -0
  47. package/dist/application/run-session.d.ts.map +1 -0
  48. package/dist/application/run-session.js +349 -0
  49. package/dist/application/run-session.js.map +1 -0
  50. package/dist/application/session-hooks.d.ts +20 -0
  51. package/dist/application/session-hooks.d.ts.map +1 -0
  52. package/dist/application/session-hooks.js +55 -0
  53. package/dist/application/session-hooks.js.map +1 -0
  54. package/dist/application/session-ledger.d.ts +12 -0
  55. package/dist/application/session-ledger.d.ts.map +1 -0
  56. package/dist/application/session-ledger.js +29 -0
  57. package/dist/application/session-ledger.js.map +1 -0
  58. package/dist/application/session-report.d.ts +19 -0
  59. package/dist/application/session-report.d.ts.map +1 -0
  60. package/dist/application/session-report.js +207 -0
  61. package/dist/application/session-report.js.map +1 -0
  62. package/dist/application/session-resume.d.ts +3 -0
  63. package/dist/application/session-resume.d.ts.map +1 -0
  64. package/dist/application/session-resume.js +16 -0
  65. package/dist/application/session-resume.js.map +1 -0
  66. package/dist/commands/auth.d.ts +2 -0
  67. package/dist/commands/auth.d.ts.map +1 -0
  68. package/dist/commands/auth.js +138 -0
  69. package/dist/commands/auth.js.map +1 -0
  70. package/dist/commands/config.d.ts +1 -1
  71. package/dist/commands/config.d.ts.map +1 -1
  72. package/dist/commands/config.js +141 -27
  73. package/dist/commands/config.js.map +1 -1
  74. package/dist/commands/cron.d.ts +3 -0
  75. package/dist/commands/cron.d.ts.map +1 -0
  76. package/dist/commands/cron.js +201 -0
  77. package/dist/commands/cron.js.map +1 -0
  78. package/dist/commands/dev.js +2 -2
  79. package/dist/commands/dev.js.map +1 -1
  80. package/dist/commands/domain.js +17 -17
  81. package/dist/commands/domain.js.map +1 -1
  82. package/dist/commands/init.d.ts +2 -11
  83. package/dist/commands/init.d.ts.map +1 -1
  84. package/dist/commands/init.js +14 -25
  85. package/dist/commands/init.js.map +1 -1
  86. package/dist/commands/mcp-config.d.ts +7 -1
  87. package/dist/commands/mcp-config.d.ts.map +1 -1
  88. package/dist/commands/mcp-config.js +26 -10
  89. package/dist/commands/mcp-config.js.map +1 -1
  90. package/dist/commands/memory.d.ts +1 -1
  91. package/dist/commands/memory.d.ts.map +1 -1
  92. package/dist/commands/memory.js +10 -10
  93. package/dist/commands/memory.js.map +1 -1
  94. package/dist/commands/run.d.ts +15 -3
  95. package/dist/commands/run.d.ts.map +1 -1
  96. package/dist/commands/run.js +464 -85
  97. package/dist/commands/run.js.map +1 -1
  98. package/dist/commands/serve.d.ts +1 -1
  99. package/dist/commands/serve.d.ts.map +1 -1
  100. package/dist/commands/serve.js +3 -3
  101. package/dist/commands/serve.js.map +1 -1
  102. package/dist/commands/skill-capture.d.ts +13 -0
  103. package/dist/commands/skill-capture.d.ts.map +1 -0
  104. package/dist/commands/skill-capture.js +212 -0
  105. package/dist/commands/skill-capture.js.map +1 -0
  106. package/dist/commands/skill.d.ts.map +1 -1
  107. package/dist/commands/skill.js +7 -3
  108. package/dist/commands/skill.js.map +1 -1
  109. package/dist/commands/status.d.ts +1 -1
  110. package/dist/commands/status.d.ts.map +1 -1
  111. package/dist/commands/status.js +15 -16
  112. package/dist/commands/status.js.map +1 -1
  113. package/dist/commands/sync.d.ts +11 -0
  114. package/dist/commands/sync.d.ts.map +1 -0
  115. package/dist/commands/sync.js +114 -0
  116. package/dist/commands/sync.js.map +1 -0
  117. package/dist/commands/tools.d.ts +6 -0
  118. package/dist/commands/tools.d.ts.map +1 -0
  119. package/dist/commands/tools.js +28 -0
  120. package/dist/commands/tools.js.map +1 -0
  121. package/dist/commands/tui.d.ts +29 -0
  122. package/dist/commands/tui.d.ts.map +1 -0
  123. package/dist/commands/tui.js +444 -0
  124. package/dist/commands/tui.js.map +1 -0
  125. package/dist/config/config-merger.d.ts +5 -0
  126. package/dist/config/config-merger.d.ts.map +1 -0
  127. package/dist/config/config-merger.js +25 -0
  128. package/dist/config/config-merger.js.map +1 -0
  129. package/dist/config/config-merger.test.d.ts +2 -0
  130. package/dist/config/config-merger.test.d.ts.map +1 -0
  131. package/dist/config/config-merger.test.js +165 -0
  132. package/dist/config/config-merger.test.js.map +1 -0
  133. package/dist/config/env-config.d.ts +5 -0
  134. package/dist/config/env-config.d.ts.map +1 -0
  135. package/dist/config/env-config.js +24 -0
  136. package/dist/config/env-config.js.map +1 -0
  137. package/dist/config/env-config.test.d.ts +2 -0
  138. package/dist/config/env-config.test.d.ts.map +1 -0
  139. package/dist/config/env-config.test.js +79 -0
  140. package/dist/config/env-config.test.js.map +1 -0
  141. package/dist/config/global-config.d.ts +23 -0
  142. package/dist/config/global-config.d.ts.map +1 -0
  143. package/dist/config/global-config.js +48 -0
  144. package/dist/config/global-config.js.map +1 -0
  145. package/dist/config/global-config.test.d.ts +2 -0
  146. package/dist/config/global-config.test.d.ts.map +1 -0
  147. package/dist/config/global-config.test.js +96 -0
  148. package/dist/config/global-config.test.js.map +1 -0
  149. package/dist/config-resolver.d.ts +5 -0
  150. package/dist/config-resolver.d.ts.map +1 -0
  151. package/dist/config-resolver.js +19 -0
  152. package/dist/config-resolver.js.map +1 -0
  153. package/dist/config.d.ts +8 -7
  154. package/dist/config.d.ts.map +1 -1
  155. package/dist/config.js +14 -1
  156. package/dist/config.js.map +1 -1
  157. package/dist/index.d.ts.map +1 -1
  158. package/dist/index.js +193 -16
  159. package/dist/index.js.map +1 -1
  160. package/dist/kiln-yaml-types.d.ts +127 -0
  161. package/dist/kiln-yaml-types.d.ts.map +1 -0
  162. package/dist/kiln-yaml-types.js +42 -0
  163. package/dist/kiln-yaml-types.js.map +1 -0
  164. package/dist/kiln-yaml.d.ts +10 -0
  165. package/dist/kiln-yaml.d.ts.map +1 -0
  166. package/dist/kiln-yaml.js +109 -0
  167. package/dist/kiln-yaml.js.map +1 -0
  168. package/dist/mcp/config-generator.d.ts +9 -2
  169. package/dist/mcp/config-generator.d.ts.map +1 -1
  170. package/dist/mcp/config-generator.js +132 -2
  171. package/dist/mcp/config-generator.js.map +1 -1
  172. package/dist/mcp/index.d.ts.map +1 -1
  173. package/dist/mcp/index.js +2 -1
  174. package/dist/mcp/index.js.map +1 -1
  175. package/dist/mcp/server.d.ts.map +1 -1
  176. package/dist/mcp/server.js +2 -1
  177. package/dist/mcp/server.js.map +1 -1
  178. package/dist/mcp-entry.js +0 -5
  179. package/dist/mcp-entry.js.map +1 -1
  180. package/dist/sync/agent-sync.d.ts +13 -0
  181. package/dist/sync/agent-sync.d.ts.map +1 -0
  182. package/dist/sync/agent-sync.js +130 -0
  183. package/dist/sync/agent-sync.js.map +1 -0
  184. package/dist/sync/agent-sync.test.d.ts +2 -0
  185. package/dist/sync/agent-sync.test.d.ts.map +1 -0
  186. package/dist/sync/agent-sync.test.js +130 -0
  187. package/dist/sync/agent-sync.test.js.map +1 -0
  188. package/dist/sync/agents-md-sync.d.ts +7 -0
  189. package/dist/sync/agents-md-sync.d.ts.map +1 -0
  190. package/dist/sync/agents-md-sync.js +44 -0
  191. package/dist/sync/agents-md-sync.js.map +1 -0
  192. package/dist/sync/agents-md-sync.test.d.ts +2 -0
  193. package/dist/sync/agents-md-sync.test.d.ts.map +1 -0
  194. package/dist/sync/agents-md-sync.test.js +154 -0
  195. package/dist/sync/agents-md-sync.test.js.map +1 -0
  196. package/dist/sync/hook-sync.d.ts +8 -0
  197. package/dist/sync/hook-sync.d.ts.map +1 -0
  198. package/dist/sync/hook-sync.js +90 -0
  199. package/dist/sync/hook-sync.js.map +1 -0
  200. package/dist/sync/security-sync.d.ts +9 -0
  201. package/dist/sync/security-sync.d.ts.map +1 -0
  202. package/dist/sync/security-sync.js +161 -0
  203. package/dist/sync/security-sync.js.map +1 -0
  204. package/dist/sync/skill-sync.d.ts +10 -0
  205. package/dist/sync/skill-sync.d.ts.map +1 -0
  206. package/dist/sync/skill-sync.js +87 -0
  207. package/dist/sync/skill-sync.js.map +1 -0
  208. package/dist/sync/skill-sync.test.d.ts +2 -0
  209. package/dist/sync/skill-sync.test.d.ts.map +1 -0
  210. package/dist/sync/skill-sync.test.js +163 -0
  211. package/dist/sync/skill-sync.test.js.map +1 -0
  212. package/dist/wrapper/approval-memory-store.d.ts +40 -0
  213. package/dist/wrapper/approval-memory-store.d.ts.map +1 -0
  214. package/dist/wrapper/approval-memory-store.js +132 -0
  215. package/dist/wrapper/approval-memory-store.js.map +1 -0
  216. package/dist/wrapper/claude-code-process.d.ts +32 -34
  217. package/dist/wrapper/claude-code-process.d.ts.map +1 -1
  218. package/dist/wrapper/claude-code-process.js +181 -66
  219. package/dist/wrapper/claude-code-process.js.map +1 -1
  220. package/dist/wrapper/cleanup-registry.d.ts +7 -0
  221. package/dist/wrapper/cleanup-registry.d.ts.map +1 -0
  222. package/dist/wrapper/cleanup-registry.js +11 -0
  223. package/dist/wrapper/cleanup-registry.js.map +1 -0
  224. package/dist/wrapper/codex-session.d.ts +49 -0
  225. package/dist/wrapper/codex-session.d.ts.map +1 -0
  226. package/dist/wrapper/codex-session.js +470 -0
  227. package/dist/wrapper/codex-session.js.map +1 -0
  228. package/dist/wrapper/debug.d.ts +2 -0
  229. package/dist/wrapper/debug.d.ts.map +1 -0
  230. package/dist/wrapper/debug.js +7 -0
  231. package/dist/wrapper/debug.js.map +1 -0
  232. package/dist/wrapper/executable-provider-session.d.ts +26 -0
  233. package/dist/wrapper/executable-provider-session.d.ts.map +1 -0
  234. package/dist/wrapper/executable-provider-session.js +214 -0
  235. package/dist/wrapper/executable-provider-session.js.map +1 -0
  236. package/dist/wrapper/hook-executor.d.ts +21 -0
  237. package/dist/wrapper/hook-executor.d.ts.map +1 -0
  238. package/dist/wrapper/hook-executor.js +100 -0
  239. package/dist/wrapper/hook-executor.js.map +1 -0
  240. package/dist/wrapper/hook-registry.d.ts +10 -0
  241. package/dist/wrapper/hook-registry.d.ts.map +1 -0
  242. package/dist/wrapper/hook-registry.js +57 -0
  243. package/dist/wrapper/hook-registry.js.map +1 -0
  244. package/dist/wrapper/index.d.ts +83 -2
  245. package/dist/wrapper/index.d.ts.map +1 -1
  246. package/dist/wrapper/index.js +11 -0
  247. package/dist/wrapper/index.js.map +1 -1
  248. package/dist/wrapper/mcp-selector.d.ts +2 -0
  249. package/dist/wrapper/mcp-selector.d.ts.map +1 -0
  250. package/dist/wrapper/mcp-selector.js +8 -0
  251. package/dist/wrapper/mcp-selector.js.map +1 -0
  252. package/dist/wrapper/opencode-session.d.ts +69 -0
  253. package/dist/wrapper/opencode-session.d.ts.map +1 -0
  254. package/dist/wrapper/opencode-session.js +568 -0
  255. package/dist/wrapper/opencode-session.js.map +1 -0
  256. package/dist/wrapper/permission-evaluator.d.ts +57 -0
  257. package/dist/wrapper/permission-evaluator.d.ts.map +1 -0
  258. package/dist/wrapper/permission-evaluator.js +310 -0
  259. package/dist/wrapper/permission-evaluator.js.map +1 -0
  260. package/dist/wrapper/permission-normalizer.d.ts +13 -0
  261. package/dist/wrapper/permission-normalizer.d.ts.map +1 -0
  262. package/dist/wrapper/permission-normalizer.js +88 -0
  263. package/dist/wrapper/permission-normalizer.js.map +1 -0
  264. package/dist/wrapper/permission-policy-authorizer.d.ts +12 -0
  265. package/dist/wrapper/permission-policy-authorizer.d.ts.map +1 -0
  266. package/dist/wrapper/permission-policy-authorizer.js +64 -0
  267. package/dist/wrapper/permission-policy-authorizer.js.map +1 -0
  268. package/dist/wrapper/preamble-builder.d.ts +7 -0
  269. package/dist/wrapper/preamble-builder.d.ts.map +1 -0
  270. package/dist/wrapper/preamble-builder.js +103 -0
  271. package/dist/wrapper/preamble-builder.js.map +1 -0
  272. package/dist/wrapper/provider-context.d.ts +20 -0
  273. package/dist/wrapper/provider-context.d.ts.map +1 -0
  274. package/dist/wrapper/provider-context.js +58 -0
  275. package/dist/wrapper/provider-context.js.map +1 -0
  276. package/dist/wrapper/provider-session.d.ts +27 -0
  277. package/dist/wrapper/provider-session.d.ts.map +1 -0
  278. package/dist/wrapper/provider-session.js +208 -0
  279. package/dist/wrapper/provider-session.js.map +1 -0
  280. package/dist/wrapper/session-manager.d.ts +21 -4
  281. package/dist/wrapper/session-manager.d.ts.map +1 -1
  282. package/dist/wrapper/session-manager.js +173 -14
  283. package/dist/wrapper/session-manager.js.map +1 -1
  284. package/dist/wrapper/session-registry.d.ts +136 -0
  285. package/dist/wrapper/session-registry.d.ts.map +1 -0
  286. package/dist/wrapper/session-registry.js +977 -0
  287. package/dist/wrapper/session-registry.js.map +1 -0
  288. package/dist/wrapper/session-store.d.ts +63 -0
  289. package/dist/wrapper/session-store.d.ts.map +1 -0
  290. package/dist/wrapper/session-store.js +215 -0
  291. package/dist/wrapper/session-store.js.map +1 -0
  292. package/dist/wrapper/session.d.ts +127 -0
  293. package/dist/wrapper/session.d.ts.map +1 -0
  294. package/dist/wrapper/session.js +14 -0
  295. package/dist/wrapper/session.js.map +1 -0
  296. package/dist/wrapper/worktree-manager.d.ts +30 -0
  297. package/dist/wrapper/worktree-manager.d.ts.map +1 -0
  298. package/dist/wrapper/worktree-manager.js +139 -0
  299. package/dist/wrapper/worktree-manager.js.map +1 -0
  300. package/package.json +11 -7
@@ -0,0 +1,29 @@
1
+ import type { KilnAppConfig } from "../config.js";
2
+ import { createDefaultRegistry, type ProviderId } from "../wrapper/session-registry.js";
3
+ import { SessionStore, TranscriptStore } from "../wrapper/session-store.js";
4
+ import type { ContextArtifactCache } from "@kilnai/core";
5
+ export interface TuiFlags {
6
+ provider?: string;
7
+ cwd?: string;
8
+ port?: number;
9
+ theme?: string;
10
+ plan?: boolean;
11
+ }
12
+ type CliSessionFactory = (systemPrompt: string, cwd: string) => import("../wrapper/session.js").IKilnSession;
13
+ /**
14
+ * Dynamic session factory that supports cross-provider session management.
15
+ * Each provider maintains independent session state, allowing seamless switching.
16
+ */
17
+ export declare function makeMultiProviderSessionFactory(initialProvider: ProviderId, providerIds: readonly ProviderId[], cwd: string, registry: ReturnType<typeof createDefaultRegistry>["registry"], sessionStore: SessionStore, transcriptStore: TranscriptStore, contextArtifactCache: ContextArtifactCache): Promise<MultiProviderSessionManager>;
18
+ export interface MultiProviderSessionManager {
19
+ readonly factory: CliSessionFactory;
20
+ getProvider: () => string;
21
+ setProvider: (provider: string) => void;
22
+ getModel: () => string;
23
+ setModel: (model: string) => void;
24
+ onClear: (provider?: string) => Promise<void>;
25
+ setResumeSession: (sessionId: string, provider: string) => void;
26
+ }
27
+ export declare function tuiCommand(appConfig: KilnAppConfig, flags?: TuiFlags): Promise<void>;
28
+ export {};
29
+ //# sourceMappingURL=tui.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tui.d.ts","sourceRoot":"","sources":["../../src/commands/tui.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAUlD,OAAO,EAAE,qBAAqB,EAA0B,KAAK,UAAU,EAAE,MAAM,gCAAgC,CAAC;AAChH,OAAO,EAAE,YAAY,EAAE,eAAe,EAAE,MAAM,6BAA6B,CAAC;AAI5E,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,cAAc,CAAC;AAGzD,MAAM,WAAW,QAAQ;IACvB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB;AAuBD,KAAK,iBAAiB,GAAG,CACvB,YAAY,EAAE,MAAM,EACpB,GAAG,EAAE,MAAM,KACR,OAAO,uBAAuB,EAAE,YAAY,CAAC;AAgBlD;;;GAGG;AACH,wBAAsB,+BAA+B,CACnD,eAAe,EAAE,UAAU,EAC3B,WAAW,EAAE,SAAS,UAAU,EAAE,EAClC,GAAG,EAAE,MAAM,EACX,QAAQ,EAAE,UAAU,CAAC,OAAO,qBAAqB,CAAC,CAAC,UAAU,CAAC,EAC9D,YAAY,EAAE,YAAY,EAC1B,eAAe,EAAE,eAAe,EAChC,oBAAoB,EAAE,oBAAoB,GACzC,OAAO,CAAC,2BAA2B,CAAC,CA6LtC;AAED,MAAM,WAAW,2BAA2B;IAC1C,QAAQ,CAAC,OAAO,EAAE,iBAAiB,CAAC;IACpC,WAAW,EAAE,MAAM,MAAM,CAAC;IAC1B,WAAW,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,IAAI,CAAC;IACxC,QAAQ,EAAE,MAAM,MAAM,CAAC;IACvB,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAClC,OAAO,EAAE,CAAC,QAAQ,CAAC,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAC9C,gBAAgB,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,KAAK,IAAI,CAAC;CACjE;AA6MD,wBAAsB,UAAU,CAAC,SAAS,EAAE,aAAa,EAAE,KAAK,GAAE,QAAa,GAAG,OAAO,CAAC,IAAI,CAAC,CAqG9F"}
@@ -0,0 +1,444 @@
1
+ import { inferResumeStrategyFeedback } from "../application/resume-strategy-feedback.js";
2
+ import { collectResumeSignals, decideResumeStrategy } from "../application/resume-strategy-policy.js";
3
+ import { buildCliPlanSummaryArtifactKeyFromShape, buildCliProjectSummaryArtifactKey, buildCliSessionSummaryArtifactKey, } from "../application/context-artifact-keys.js";
4
+ import { readGlobalConfig } from "../config/global-config.js";
5
+ import { resolveEffectiveProvider } from "../config/env-config.js";
6
+ import { createDefaultRegistry, getProviderDisplayInfo } from "../wrapper/session-registry.js";
7
+ import { SessionStore, TranscriptStore } from "../wrapper/session-store.js";
8
+ import { GatewaySession, waitForGateway, themes, kilnDark } from "@kilnai/tui";
9
+ import { getProjectContextArtifactCache } from "@kilnai/runtime";
10
+ function parseProvider(p, providerIds) {
11
+ if (p && providerIds.includes(p)) {
12
+ return p;
13
+ }
14
+ return providerIds.includes("claude") ? "claude" : providerIds[0] ?? "claude";
15
+ }
16
+ function resolveTuiStartupTransport(_flags) {
17
+ if (process.env.KILN_TUI_TRANSPORT?.toLowerCase() === "direct") {
18
+ return "direct";
19
+ }
20
+ return "gateway";
21
+ }
22
+ /**
23
+ * Dynamic session factory that supports cross-provider session management.
24
+ * Each provider maintains independent session state, allowing seamless switching.
25
+ */
26
+ export async function makeMultiProviderSessionFactory(initialProvider, providerIds, cwd, registry, sessionStore, transcriptStore, contextArtifactCache) {
27
+ const providers = providerIds;
28
+ // Per-provider session state
29
+ const providerState = new Map(providers.map((provider) => [provider, {}]));
30
+ let currentProvider = initialProvider;
31
+ let currentModel = "";
32
+ // Load last session for each provider
33
+ for (const p of providers) {
34
+ const lastRecord = await sessionStore.last(p);
35
+ if (lastRecord) {
36
+ const state = providerState.get(p);
37
+ if (!state)
38
+ continue;
39
+ state.resumeSessionId = lastRecord.sessionId;
40
+ state.providerSessionId = lastRecord.providerSessionId;
41
+ }
42
+ }
43
+ const policyAwareFactory = (systemPrompt, sessionCwd) => {
44
+ let activeSession = null;
45
+ return {
46
+ get capabilities() {
47
+ return activeSession?.capabilities ?? registry.list().find((provider) => provider.id === currentProvider)?.capabilities ?? {
48
+ mcp: false,
49
+ streaming: true,
50
+ resumable: false,
51
+ resume: false,
52
+ costTrackingMode: "computed",
53
+ supportedTools: [],
54
+ maxContextTokens: null,
55
+ priority: 0,
56
+ fallbackTo: null,
57
+ permissionPolicy: { approval: "never", sandbox: "workspace-write" },
58
+ };
59
+ },
60
+ get sessionId() {
61
+ return activeSession?.sessionId ?? `${currentProvider}-tui-session`;
62
+ },
63
+ get providerSessionId() {
64
+ return activeSession?.providerSessionId;
65
+ },
66
+ run: async function* (options) {
67
+ const providerForTurn = currentProvider;
68
+ const modelForTurn = currentModel || undefined;
69
+ const state = providerState.get(providerForTurn) ?? {};
70
+ const resumedFrom = state.resumeSessionId;
71
+ const projectArtifactKey = buildCliProjectSummaryArtifactKey(cwd);
72
+ const sessionArtifactKey = resumedFrom
73
+ ? buildCliSessionSummaryArtifactKey(resumedFrom)
74
+ : undefined;
75
+ const planArtifactKey = buildCliPlanSummaryArtifactKeyFromShape(cwd, "interactive");
76
+ const signals = collectResumeSignals({
77
+ cache: contextArtifactCache,
78
+ keys: [sessionArtifactKey, projectArtifactKey, planArtifactKey],
79
+ });
80
+ const feedback = resumedFrom
81
+ ? await inferResumeStrategyFeedback(transcriptStore, providerForTurn)
82
+ : undefined;
83
+ const decision = decideResumeStrategy({
84
+ resumeSessionId: resumedFrom,
85
+ preferredProvider: providerForTurn,
86
+ signals,
87
+ feedback,
88
+ });
89
+ const resumeStrategy = decision.resumeStrategy;
90
+ const resumeFeedback = decision.resumeFeedback;
91
+ const resumedSession = registry.createSession(providerForTurn, {
92
+ task: "interactive",
93
+ systemPrompt,
94
+ cwd: sessionCwd || cwd,
95
+ permissionPolicy: { approval: "never", sandbox: "workspace-write" },
96
+ resumeSessionId: decision.shouldUseProviderNativeResume ? resumedFrom : undefined,
97
+ model: modelForTurn,
98
+ });
99
+ activeSession = resumedSession;
100
+ const capturedId = resumedSession.sessionId;
101
+ if (typeof transcriptStore.init === "function") {
102
+ await transcriptStore.init(capturedId, {
103
+ kilnSessionId: capturedId,
104
+ provider: providerForTurn,
105
+ task: "interactive",
106
+ startedAt: new Date().toISOString(),
107
+ resumeStrategy,
108
+ resumeFeedback,
109
+ sessionLedger: {
110
+ currentPhase: "interactive",
111
+ resumedFrom,
112
+ workingDirectory: sessionCwd || cwd,
113
+ },
114
+ });
115
+ }
116
+ let turnCostUsd = 0;
117
+ try {
118
+ for await (const event of resumedSession.run(options)) {
119
+ if (event
120
+ && typeof event === "object"
121
+ && "type" in event
122
+ && event.type === "completed") {
123
+ turnCostUsd = event.totalUsd;
124
+ }
125
+ yield event;
126
+ }
127
+ }
128
+ finally {
129
+ await resumedSession.dispose();
130
+ const currentState = providerState.get(providerForTurn);
131
+ if (currentState) {
132
+ currentState.resumeSessionId = capturedId;
133
+ currentState.providerSessionId = resumedSession.providerSessionId;
134
+ }
135
+ if (typeof transcriptStore.finalize === "function") {
136
+ await transcriptStore.finalize(capturedId, {
137
+ completedAt: new Date().toISOString(),
138
+ providerSessionId: resumedSession.providerSessionId,
139
+ resumeStrategy,
140
+ resumeFeedback,
141
+ sessionLedger: {
142
+ currentPhase: "completed",
143
+ resumedFrom,
144
+ workingDirectory: sessionCwd || cwd,
145
+ lastProvider: providerForTurn,
146
+ },
147
+ });
148
+ }
149
+ await sessionStore.append({
150
+ sessionId: capturedId,
151
+ provider: providerForTurn,
152
+ task: "interactive",
153
+ completedAt: new Date().toISOString(),
154
+ cost: turnCostUsd,
155
+ projectPath: cwd,
156
+ providerSessionId: resumedSession.providerSessionId,
157
+ resumeStrategy,
158
+ });
159
+ if (activeSession === resumedSession) {
160
+ activeSession = null;
161
+ }
162
+ }
163
+ },
164
+ dispose: async () => {
165
+ if (activeSession) {
166
+ await activeSession.dispose();
167
+ activeSession = null;
168
+ }
169
+ },
170
+ };
171
+ };
172
+ return {
173
+ factory: policyAwareFactory,
174
+ getProvider: () => currentProvider,
175
+ setProvider: (newProvider) => {
176
+ if (providers.includes(newProvider)) {
177
+ currentProvider = newProvider;
178
+ }
179
+ },
180
+ getModel: () => currentModel,
181
+ setModel: (model) => {
182
+ currentModel = model;
183
+ },
184
+ onClear: async (provider) => {
185
+ const p = (provider && providers.includes(provider))
186
+ ? provider
187
+ : currentProvider;
188
+ const state = providerState.get(p);
189
+ if (state) {
190
+ state.resumeSessionId = undefined;
191
+ state.providerSessionId = undefined;
192
+ }
193
+ await sessionStore.clearLast(p);
194
+ },
195
+ setResumeSession: (sessionId, provider) => {
196
+ if (providers.includes(provider)) {
197
+ const p = provider;
198
+ const state = providerState.get(p);
199
+ if (state) {
200
+ currentProvider = p;
201
+ state.resumeSessionId = sessionId;
202
+ }
203
+ }
204
+ },
205
+ };
206
+ }
207
+ function formatResumeFeedback(feedback) {
208
+ if (!feedback) {
209
+ return undefined;
210
+ }
211
+ const source = feedback.influencedChoice ? "applied" : "observed";
212
+ const preferred = feedback.preferredStrategy ? ` ${feedback.preferredStrategy}` : "";
213
+ return `${source}${preferred} · ${feedback.sampleSize}`;
214
+ }
215
+ async function loadInitialResumeInfo(cwd, sessionStore, providerIds) {
216
+ const transcriptStore = new TranscriptStore(cwd);
217
+ const info = {};
218
+ for (const provider of providerIds) {
219
+ const lastRecord = await sessionStore.last(provider);
220
+ if (!lastRecord) {
221
+ continue;
222
+ }
223
+ const meta = await transcriptStore.readMeta(lastRecord.sessionId);
224
+ if (!meta?.resumeStrategy || meta.resumeStrategy === "none") {
225
+ continue;
226
+ }
227
+ info[provider] = {
228
+ strategy: meta.resumeStrategy,
229
+ feedbackLabel: formatResumeFeedback(meta.resumeFeedback),
230
+ };
231
+ }
232
+ return info;
233
+ }
234
+ async function bootstrapGatewaySession(options) {
235
+ const { startTuiGateway } = await import("@kilnai/runtime");
236
+ const { flags, sessionManager, contextArtifactCache, systemPrompt } = options;
237
+ const gateway = await startTuiGateway({
238
+ sessionManager,
239
+ port: flags.port,
240
+ systemPrompt,
241
+ onClear: sessionManager.onClear,
242
+ contextArtifactCache,
243
+ planMode: flags.plan ?? false,
244
+ });
245
+ await waitForGateway(`http://localhost:${gateway.port}/health`);
246
+ const providerModelsRef = {
247
+ current: gateway.models,
248
+ };
249
+ let session = null;
250
+ const createSession = async () => {
251
+ if (!session) {
252
+ session = new GatewaySession(gateway.url, (models) => {
253
+ providerModelsRef.current = models;
254
+ });
255
+ }
256
+ return session;
257
+ };
258
+ return {
259
+ createSession,
260
+ providerModelsRef,
261
+ shutdown: () => {
262
+ void session?.dispose();
263
+ gateway.shutdown();
264
+ },
265
+ };
266
+ }
267
+ function mapSessionEventToTui(event, route) {
268
+ const candidate = event;
269
+ switch (candidate?.type) {
270
+ case "text_delta":
271
+ return {
272
+ type: "text_delta",
273
+ content: String(candidate.content ?? ""),
274
+ };
275
+ case "file_changed":
276
+ return {
277
+ type: "file_changed",
278
+ path: String(candidate.path ?? ""),
279
+ changeType: candidate.changeType ?? "modified",
280
+ linesAdded: typeof candidate.linesAdded === "number" ? candidate.linesAdded : undefined,
281
+ linesRemoved: typeof candidate.linesRemoved === "number" ? candidate.linesRemoved : undefined,
282
+ };
283
+ case "cost_update":
284
+ return {
285
+ type: "cost_update",
286
+ usd: typeof candidate.usd === "number" ? candidate.usd : 0,
287
+ };
288
+ case "completed":
289
+ return {
290
+ type: "completed",
291
+ totalUsd: typeof candidate.totalUsd === "number" ? candidate.totalUsd : 0,
292
+ routedProvider: route?.provider,
293
+ routedModel: route?.model || undefined,
294
+ };
295
+ case "error":
296
+ return {
297
+ type: "error",
298
+ message: `${String(candidate.code ?? "ERROR")}: ${String(candidate.message ?? "Unknown error")}`,
299
+ };
300
+ case "tool_use":
301
+ return {
302
+ type: "activity",
303
+ activity: "tool_use",
304
+ toolName: typeof candidate.toolName === "string" ? candidate.toolName : undefined,
305
+ input: candidate.input,
306
+ };
307
+ case "tool_result":
308
+ return {
309
+ type: "activity",
310
+ activity: "tool_result",
311
+ toolName: typeof candidate.toolName === "string" ? candidate.toolName : undefined,
312
+ output: typeof candidate.output === "string" ? candidate.output : undefined,
313
+ };
314
+ default:
315
+ return {
316
+ type: "activity",
317
+ activity: "unknown_event",
318
+ };
319
+ }
320
+ }
321
+ async function bootstrapDirectSession(options) {
322
+ const { flags, sessionManager, systemPrompt } = options;
323
+ const sessionCwd = flags.cwd ?? process.cwd();
324
+ let session = null;
325
+ const createSession = async () => {
326
+ if (session) {
327
+ return session;
328
+ }
329
+ const inner = sessionManager.factory(systemPrompt, sessionCwd);
330
+ session = {
331
+ async *run(opts) {
332
+ const providerForTurn = sessionManager.getProvider();
333
+ const modelForTurn = sessionManager.getModel();
334
+ for await (const event of inner.run(opts)) {
335
+ yield mapSessionEventToTui(event, {
336
+ provider: providerForTurn,
337
+ model: modelForTurn,
338
+ });
339
+ }
340
+ },
341
+ async dispose() {
342
+ await inner.dispose();
343
+ },
344
+ async clear() {
345
+ await sessionManager.onClear(sessionManager.getProvider());
346
+ },
347
+ async switchProvider(providerName, modelName) {
348
+ sessionManager.setProvider(providerName);
349
+ sessionManager.setModel(modelName ?? "");
350
+ return providerName;
351
+ },
352
+ };
353
+ return session;
354
+ };
355
+ return {
356
+ createSession,
357
+ providerModelsRef: { current: {} },
358
+ shutdown: () => { },
359
+ };
360
+ }
361
+ async function bootstrapTuiSession(options) {
362
+ const transport = resolveTuiStartupTransport(options.flags);
363
+ if (transport === 'gateway') {
364
+ return bootstrapGatewaySession(options);
365
+ }
366
+ return bootstrapDirectSession(options);
367
+ }
368
+ export async function tuiCommand(appConfig, flags = {}) {
369
+ const { startTui } = await import("@kilnai/tui");
370
+ const { registry } = createDefaultRegistry();
371
+ const providerDisplayInfo = getProviderDisplayInfo(registry);
372
+ const providerIds = providerDisplayInfo.map((entry) => entry.id);
373
+ const cwd = flags.cwd ?? process.cwd();
374
+ const globalConfig = readGlobalConfig();
375
+ const provider = parseProvider(resolveEffectiveProvider(flags.provider, globalConfig?.provider), providerIds);
376
+ const contextArtifactCache = await getProjectContextArtifactCache(cwd);
377
+ // Resolve domain display name from app config if available
378
+ let domain = "kiln";
379
+ let systemPrompt = "You are a helpful assistant.";
380
+ try {
381
+ const { SessionManager } = await import("../wrapper/session-manager.js");
382
+ const wrapperConfig = { mode: "cli-wrapper", permissionPolicy: { approval: "never", sandbox: "workspace-write" } };
383
+ const manager = new SessionManager(wrapperConfig, appConfig, contextArtifactCache);
384
+ const context = await manager.prepare("interactive", cwd, undefined, undefined, undefined);
385
+ domain = context.domain.displayName;
386
+ systemPrompt = context.systemPrompt;
387
+ }
388
+ catch {
389
+ // Non-fatal — proceed without domain name
390
+ }
391
+ // Inject CLI session factory into the gateway (dependency inversion)
392
+ const sessionStore = new SessionStore(cwd);
393
+ const transcriptStore = new TranscriptStore(cwd);
394
+ const initialResumeInfo = await loadInitialResumeInfo(cwd, sessionStore, providerIds);
395
+ const startupTransport = resolveTuiStartupTransport(flags);
396
+ const sessionManager = await makeMultiProviderSessionFactory(provider, providerIds, cwd, registry, sessionStore, transcriptStore, contextArtifactCache);
397
+ const bootstrap = await bootstrapTuiSession({
398
+ flags,
399
+ sessionManager,
400
+ contextArtifactCache,
401
+ systemPrompt,
402
+ });
403
+ const shutdown = (code = 0, error) => {
404
+ bootstrap.shutdown();
405
+ if (error) {
406
+ process.stderr.write(String(error instanceof Error ? (error.stack ?? error.message) : error) + "\n");
407
+ process.exitCode = 1;
408
+ }
409
+ else {
410
+ process.exitCode = code;
411
+ }
412
+ setTimeout(() => process.exit(process.exitCode ?? code), 50).unref();
413
+ };
414
+ const handlers = [
415
+ ["SIGINT", () => shutdown(0)],
416
+ ["SIGTERM", () => shutdown(0)],
417
+ ["SIGHUP", () => shutdown(0)],
418
+ ["uncaughtException", (e) => shutdown(1, e)],
419
+ ["unhandledRejection", (e) => shutdown(1, e)],
420
+ ];
421
+ for (const [ev, handler] of handlers)
422
+ process.on(ev, handler);
423
+ const resolvedTheme = themes[flags.theme ?? globalConfig?.tui?.theme ?? "kiln-dark"] ?? kilnDark;
424
+ // Session list loader for sidebar browser
425
+ async function loadSessionList() {
426
+ try {
427
+ const records = await sessionStore.list();
428
+ return records.slice(0, 20);
429
+ }
430
+ catch {
431
+ return [];
432
+ }
433
+ }
434
+ // Session resume handler - sets resume session ID for the selected provider
435
+ const handleResumeSession = (session) => {
436
+ sessionManager.setProvider(session.provider);
437
+ sessionManager.setResumeSession(session.sessionId, session.provider);
438
+ };
439
+ await startTui(bootstrap.createSession, providerDisplayInfo, provider, domain, resolvedTheme, startupTransport === "direct" ? initialResumeInfo : {}, () => loadInitialResumeInfo(cwd, sessionStore, providerIds), bootstrap.providerModelsRef, startupTransport === "direct" ? loadSessionList : undefined, startupTransport === "direct" ? handleResumeSession : undefined);
440
+ bootstrap.shutdown();
441
+ for (const [ev, handler] of handlers)
442
+ process.off(ev, handler);
443
+ }
444
+ //# sourceMappingURL=tui.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tui.js","sourceRoot":"","sources":["../../src/commands/tui.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ import type { KilnYaml } from "../kiln-yaml-types.js";
2
+ import type { KilnGlobalConfig } from "./global-config.js";
3
+ export declare function globalToKilnYaml(global: KilnGlobalConfig): KilnYaml;
4
+ export declare function loadKilnConfig(projectPath: string): Promise<KilnYaml | null>;
5
+ //# sourceMappingURL=config-merger.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config-merger.d.ts","sourceRoot":"","sources":["../../src/config/config-merger.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AACtD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAE3D,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,gBAAgB,GAAG,QAAQ,CASnE;AAED,wBAAsB,cAAc,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,QAAQ,GAAG,IAAI,CAAC,CAalF"}
@@ -0,0 +1,25 @@
1
+ import { join } from "node:path";
2
+ import { readGlobalConfig } from "./global-config.js";
3
+ import { mergeKilnYaml, readKilnYaml } from "../kiln-yaml.js";
4
+ export function globalToKilnYaml(global) {
5
+ return {
6
+ version: global.version ?? "1",
7
+ provider: global.provider,
8
+ model: global.model ? { default: global.model } : undefined,
9
+ permissions: global.permissions,
10
+ mcp: global.mcp,
11
+ hooks: global.hooks,
12
+ };
13
+ }
14
+ export async function loadKilnConfig(projectPath) {
15
+ const globalConfig = readGlobalConfig();
16
+ const projectConfig = readKilnYaml(join(projectPath, ".kiln"));
17
+ if (!globalConfig) {
18
+ return projectConfig;
19
+ }
20
+ if (!projectConfig) {
21
+ return globalToKilnYaml(globalConfig);
22
+ }
23
+ return mergeKilnYaml(globalToKilnYaml(globalConfig), projectConfig);
24
+ }
25
+ //# sourceMappingURL=config-merger.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config-merger.js","sourceRoot":"","sources":["../../src/config/config-merger.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AACtD,OAAO,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAI9D,MAAM,UAAU,gBAAgB,CAAC,MAAwB;IACvD,OAAO;QACL,OAAO,EAAE,MAAM,CAAC,OAAO,IAAI,GAAG;QAC9B,QAAQ,EAAE,MAAM,CAAC,QAAQ;QACzB,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,SAAS;QAC3D,WAAW,EAAE,MAAM,CAAC,WAAW;QAC/B,GAAG,EAAE,MAAM,CAAC,GAAG;QACf,KAAK,EAAE,MAAM,CAAC,KAAK;KACpB,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,WAAmB;IACtD,MAAM,YAAY,GAAG,gBAAgB,EAAE,CAAC;IACxC,MAAM,aAAa,GAAG,YAAY,CAAC,IAAI,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC,CAAC;IAE/D,IAAI,CAAC,YAAY,EAAE,CAAC;QAClB,OAAO,aAAa,CAAC;IACvB,CAAC;IAED,IAAI,CAAC,aAAa,EAAE,CAAC;QACnB,OAAO,gBAAgB,CAAC,YAAY,CAAC,CAAC;IACxC,CAAC;IAED,OAAO,aAAa,CAAC,gBAAgB,CAAC,YAAY,CAAC,EAAE,aAAa,CAAC,CAAC;AACtE,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=config-merger.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config-merger.test.d.ts","sourceRoot":"","sources":["../../src/config/config-merger.test.ts"],"names":[],"mappings":""}