@kortix/sdk 0.10.15 → 0.11.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 (285) hide show
  1. package/README.md +17 -2
  2. package/dist/browser/session-sync/session-sync-registry.d.ts +3 -0
  3. package/dist/browser/session-sync/session-sync-registry.d.ts.map +1 -1
  4. package/dist/browser/session-sync/session-sync-registry.js +31 -2
  5. package/dist/browser/session-sync/session-sync-registry.js.map +1 -1
  6. package/dist/core/acp/client.d.ts +45 -0
  7. package/dist/core/acp/client.d.ts.map +1 -0
  8. package/dist/core/acp/client.js +277 -0
  9. package/dist/core/acp/client.js.map +1 -0
  10. package/dist/core/acp/index.d.ts +5 -0
  11. package/dist/core/acp/index.d.ts.map +1 -0
  12. package/dist/core/acp/index.js +5 -0
  13. package/dist/core/acp/index.js.map +1 -0
  14. package/dist/core/acp/projection.d.ts +23 -0
  15. package/dist/core/acp/projection.d.ts.map +1 -0
  16. package/dist/core/acp/projection.js +603 -0
  17. package/dist/core/acp/projection.js.map +1 -0
  18. package/dist/core/acp/session-controller.d.ts +90 -0
  19. package/dist/core/acp/session-controller.d.ts.map +1 -0
  20. package/dist/core/acp/session-controller.js +530 -0
  21. package/dist/core/acp/session-controller.js.map +1 -0
  22. package/dist/core/acp/types.d.ts +66 -0
  23. package/dist/core/acp/types.d.ts.map +1 -0
  24. package/dist/core/acp/types.js +21 -0
  25. package/dist/core/acp/types.js.map +1 -0
  26. package/dist/core/client/kortix.d.ts +141 -14
  27. package/dist/core/client/kortix.d.ts.map +1 -1
  28. package/dist/core/client/kortix.js +40 -7
  29. package/dist/core/client/kortix.js.map +1 -1
  30. package/dist/core/http/api-client.d.ts.map +1 -1
  31. package/dist/core/http/api-client.js +48 -68
  32. package/dist/core/http/api-client.js.map +1 -1
  33. package/dist/core/rest/platform-client/host-boundary.d.ts +114 -0
  34. package/dist/core/rest/platform-client/host-boundary.d.ts.map +1 -0
  35. package/dist/core/rest/platform-client/host-boundary.js +229 -0
  36. package/dist/core/rest/platform-client/host-boundary.js.map +1 -0
  37. package/dist/core/rest/platform-client/index.d.ts +1 -0
  38. package/dist/core/rest/platform-client/index.d.ts.map +1 -1
  39. package/dist/core/rest/platform-client/index.js +1 -0
  40. package/dist/core/rest/platform-client/index.js.map +1 -1
  41. package/dist/core/rest/projects-client/account-lifecycle.d.ts +22 -0
  42. package/dist/core/rest/projects-client/account-lifecycle.d.ts.map +1 -0
  43. package/dist/core/rest/projects-client/account-lifecycle.js +26 -0
  44. package/dist/core/rest/projects-client/account-lifecycle.js.map +1 -0
  45. package/dist/core/rest/projects-client/admin-providers.d.ts +10 -0
  46. package/dist/core/rest/projects-client/admin-providers.d.ts.map +1 -0
  47. package/dist/core/rest/projects-client/admin-providers.js +34 -0
  48. package/dist/core/rest/projects-client/admin-providers.js.map +1 -0
  49. package/dist/core/rest/projects-client/agent-config.d.ts +7 -0
  50. package/dist/core/rest/projects-client/agent-config.d.ts.map +1 -1
  51. package/dist/core/rest/projects-client/agent-config.js.map +1 -1
  52. package/dist/core/rest/projects-client/billing.d.ts +89 -0
  53. package/dist/core/rest/projects-client/billing.d.ts.map +1 -1
  54. package/dist/core/rest/projects-client/billing.js +43 -0
  55. package/dist/core/rest/projects-client/billing.js.map +1 -1
  56. package/dist/core/rest/projects-client/channels.d.ts +8 -27
  57. package/dist/core/rest/projects-client/channels.d.ts.map +1 -1
  58. package/dist/core/rest/projects-client/channels.js +12 -23
  59. package/dist/core/rest/projects-client/channels.js.map +1 -1
  60. package/dist/core/rest/projects-client/connectors.d.ts +162 -13
  61. package/dist/core/rest/projects-client/connectors.d.ts.map +1 -1
  62. package/dist/core/rest/projects-client/connectors.js +64 -2
  63. package/dist/core/rest/projects-client/connectors.js.map +1 -1
  64. package/dist/core/rest/projects-client/gateway.d.ts +1 -0
  65. package/dist/core/rest/projects-client/gateway.d.ts.map +1 -1
  66. package/dist/core/rest/projects-client/gateway.js.map +1 -1
  67. package/dist/core/rest/projects-client/iam.d.ts +492 -0
  68. package/dist/core/rest/projects-client/iam.d.ts.map +1 -0
  69. package/dist/core/rest/projects-client/iam.js +287 -0
  70. package/dist/core/rest/projects-client/iam.js.map +1 -0
  71. package/dist/core/rest/projects-client/index.d.ts +6 -0
  72. package/dist/core/rest/projects-client/index.d.ts.map +1 -1
  73. package/dist/core/rest/projects-client/index.js +6 -0
  74. package/dist/core/rest/projects-client/index.js.map +1 -1
  75. package/dist/core/rest/projects-client/marketplace-catalog.d.ts +9 -2
  76. package/dist/core/rest/projects-client/marketplace-catalog.d.ts.map +1 -1
  77. package/dist/core/rest/projects-client/marketplace-catalog.js +7 -0
  78. package/dist/core/rest/projects-client/marketplace-catalog.js.map +1 -1
  79. package/dist/core/rest/projects-client/presentations.d.ts +12 -0
  80. package/dist/core/rest/projects-client/presentations.d.ts.map +1 -0
  81. package/dist/core/rest/projects-client/presentations.js +9 -0
  82. package/dist/core/rest/projects-client/presentations.js.map +1 -0
  83. package/dist/core/rest/projects-client/projects.d.ts +55 -10
  84. package/dist/core/rest/projects-client/projects.d.ts.map +1 -1
  85. package/dist/core/rest/projects-client/projects.js +14 -7
  86. package/dist/core/rest/projects-client/projects.js.map +1 -1
  87. package/dist/core/rest/projects-client/public-voice-join.d.ts +59 -0
  88. package/dist/core/rest/projects-client/public-voice-join.d.ts.map +1 -0
  89. package/dist/core/rest/projects-client/public-voice-join.js +64 -0
  90. package/dist/core/rest/projects-client/public-voice-join.js.map +1 -0
  91. package/dist/core/rest/projects-client/referrals.d.ts +53 -0
  92. package/dist/core/rest/projects-client/referrals.d.ts.map +1 -0
  93. package/dist/core/rest/projects-client/referrals.js +27 -0
  94. package/dist/core/rest/projects-client/referrals.js.map +1 -0
  95. package/dist/core/rest/projects-client/session-sandbox.d.ts +2 -0
  96. package/dist/core/rest/projects-client/session-sandbox.d.ts.map +1 -1
  97. package/dist/core/rest/projects-client/session-sandbox.js +10 -0
  98. package/dist/core/rest/projects-client/session-sandbox.js.map +1 -1
  99. package/dist/core/rest/projects-client/sessions.d.ts +89 -0
  100. package/dist/core/rest/projects-client/sessions.d.ts.map +1 -1
  101. package/dist/core/rest/projects-client/sessions.js +49 -1
  102. package/dist/core/rest/projects-client/sessions.js.map +1 -1
  103. package/dist/core/session/index.d.ts +2 -0
  104. package/dist/core/session/index.d.ts.map +1 -1
  105. package/dist/core/session/index.js +2 -0
  106. package/dist/core/session/index.js.map +1 -1
  107. package/dist/core/session/presentation.d.ts +12 -0
  108. package/dist/core/session/presentation.d.ts.map +1 -0
  109. package/dist/core/session/presentation.js +70 -0
  110. package/dist/core/session/presentation.js.map +1 -0
  111. package/dist/core/session/rewind.d.ts +18 -0
  112. package/dist/core/session/rewind.d.ts.map +1 -0
  113. package/dist/core/session/rewind.js +17 -0
  114. package/dist/core/session/rewind.js.map +1 -0
  115. package/dist/core/session/runtime-transport.d.ts +16 -0
  116. package/dist/core/session/runtime-transport.d.ts.map +1 -0
  117. package/dist/core/session/runtime-transport.js +30 -0
  118. package/dist/core/session/runtime-transport.js.map +1 -0
  119. package/dist/core/session/url.d.ts +43 -0
  120. package/dist/core/session/url.d.ts.map +1 -1
  121. package/dist/core/session/url.js +81 -0
  122. package/dist/core/session/url.js.map +1 -1
  123. package/dist/core/session-sync/session-sync-controller.d.ts +28 -0
  124. package/dist/core/session-sync/session-sync-controller.d.ts.map +1 -1
  125. package/dist/core/session-sync/session-sync-controller.js +127 -4
  126. package/dist/core/session-sync/session-sync-controller.js.map +1 -1
  127. package/dist/core/stream/fetch-sse.d.ts +23 -0
  128. package/dist/core/stream/fetch-sse.d.ts.map +1 -0
  129. package/dist/core/stream/fetch-sse.js +119 -0
  130. package/dist/core/stream/fetch-sse.js.map +1 -0
  131. package/dist/core/turns/state.d.ts.map +1 -1
  132. package/dist/core/turns/state.js +11 -4
  133. package/dist/core/turns/state.js.map +1 -1
  134. package/dist/core/turns/types.d.ts +6 -0
  135. package/dist/core/turns/types.d.ts.map +1 -1
  136. package/dist/index.d.ts +6 -1
  137. package/dist/index.d.ts.map +1 -1
  138. package/dist/index.js +6 -1
  139. package/dist/index.js.map +1 -1
  140. package/dist/kortix.esm.min.js +24 -16
  141. package/dist/kortix.global.js +24 -16
  142. package/dist/node/server.d.ts +14 -0
  143. package/dist/node/server.d.ts.map +1 -1
  144. package/dist/node/server.js +42 -0
  145. package/dist/node/server.js.map +1 -1
  146. package/dist/platform/auth-core.d.ts +3 -5
  147. package/dist/platform/auth-core.d.ts.map +1 -1
  148. package/dist/platform/auth-core.js +4 -6
  149. package/dist/platform/auth-core.js.map +1 -1
  150. package/dist/react/agent-selection-scope.d.ts +8 -0
  151. package/dist/react/agent-selection-scope.d.ts.map +1 -0
  152. package/dist/react/agent-selection-scope.js +4 -0
  153. package/dist/react/agent-selection-scope.js.map +1 -0
  154. package/dist/react/index.d.ts +13 -0
  155. package/dist/react/index.d.ts.map +1 -1
  156. package/dist/react/index.js +13 -0
  157. package/dist/react/index.js.map +1 -1
  158. package/dist/react/initial-session-pin.d.ts +8 -0
  159. package/dist/react/initial-session-pin.d.ts.map +1 -0
  160. package/dist/react/initial-session-pin.js +4 -0
  161. package/dist/react/initial-session-pin.js.map +1 -0
  162. package/dist/react/opencode.d.ts +25 -2
  163. package/dist/react/opencode.d.ts.map +1 -1
  164. package/dist/react/opencode.js +24 -1
  165. package/dist/react/opencode.js.map +1 -1
  166. package/dist/react/provider-selection.d.ts +1 -0
  167. package/dist/react/provider-selection.d.ts.map +1 -1
  168. package/dist/react/provider-selection.js +22 -0
  169. package/dist/react/provider-selection.js.map +1 -1
  170. package/dist/react/run-pty-command.d.ts +5 -0
  171. package/dist/react/run-pty-command.d.ts.map +1 -0
  172. package/dist/react/run-pty-command.js +42 -0
  173. package/dist/react/run-pty-command.js.map +1 -0
  174. package/dist/react/runtime-actions.d.ts +51 -0
  175. package/dist/react/runtime-actions.d.ts.map +1 -0
  176. package/dist/react/runtime-actions.js +105 -0
  177. package/dist/react/runtime-actions.js.map +1 -0
  178. package/dist/react/session-agent-name-guard.d.ts +16 -0
  179. package/dist/react/session-agent-name-guard.d.ts.map +1 -0
  180. package/dist/react/session-agent-name-guard.js +22 -0
  181. package/dist/react/session-agent-name-guard.js.map +1 -0
  182. package/dist/react/session-busy.d.ts +8 -0
  183. package/dist/react/session-busy.d.ts.map +1 -0
  184. package/dist/react/session-busy.js +4 -0
  185. package/dist/react/session-busy.js.map +1 -0
  186. package/dist/react/session-title-sync.d.ts +19 -0
  187. package/dist/react/session-title-sync.d.ts.map +1 -0
  188. package/dist/react/session-title-sync.js +81 -0
  189. package/dist/react/session-title-sync.js.map +1 -0
  190. package/dist/react/use-acp-session-runtime.d.ts +34 -0
  191. package/dist/react/use-acp-session-runtime.d.ts.map +1 -0
  192. package/dist/react/use-acp-session-runtime.js +84 -0
  193. package/dist/react/use-acp-session-runtime.js.map +1 -0
  194. package/dist/react/use-admin-accounts.d.ts +122 -0
  195. package/dist/react/use-admin-accounts.d.ts.map +1 -0
  196. package/dist/react/use-admin-accounts.js +146 -0
  197. package/dist/react/use-admin-accounts.js.map +1 -0
  198. package/dist/react/use-admin-analytics.d.ts +332 -0
  199. package/dist/react/use-admin-analytics.d.ts.map +1 -0
  200. package/dist/react/use-admin-analytics.js +518 -0
  201. package/dist/react/use-admin-analytics.js.map +1 -0
  202. package/dist/react/use-admin-billing.d.ts +27 -0
  203. package/dist/react/use-admin-billing.d.ts.map +1 -0
  204. package/dist/react/use-admin-billing.js +61 -0
  205. package/dist/react/use-admin-billing.js.map +1 -0
  206. package/dist/react/use-admin-feedback.d.ts +119 -0
  207. package/dist/react/use-admin-feedback.d.ts.map +1 -0
  208. package/dist/react/use-admin-feedback.js +148 -0
  209. package/dist/react/use-admin-feedback.js.map +1 -0
  210. package/dist/react/use-admin-sandboxes.d.ts +157 -0
  211. package/dist/react/use-admin-sandboxes.d.ts.map +1 -0
  212. package/dist/react/use-admin-sandboxes.js +145 -0
  213. package/dist/react/use-admin-sandboxes.js.map +1 -0
  214. package/dist/react/use-admin-users.d.ts +98 -0
  215. package/dist/react/use-admin-users.d.ts.map +1 -0
  216. package/dist/react/use-admin-users.js +121 -0
  217. package/dist/react/use-admin-users.js.map +1 -0
  218. package/dist/react/use-authenticated-preview-url.d.ts +24 -0
  219. package/dist/react/use-authenticated-preview-url.d.ts.map +1 -0
  220. package/dist/react/use-authenticated-preview-url.js +137 -0
  221. package/dist/react/use-authenticated-preview-url.js.map +1 -0
  222. package/dist/react/use-canonical-opencode-session.d.ts +4 -0
  223. package/dist/react/use-canonical-opencode-session.d.ts.map +1 -1
  224. package/dist/react/use-canonical-opencode-session.js +9 -4
  225. package/dist/react/use-canonical-opencode-session.js.map +1 -1
  226. package/dist/react/use-model-defaults.d.ts +22 -0
  227. package/dist/react/use-model-defaults.d.ts.map +1 -0
  228. package/dist/react/use-model-defaults.js +104 -0
  229. package/dist/react/use-model-defaults.js.map +1 -0
  230. package/dist/react/use-model-store.d.ts.map +1 -1
  231. package/dist/react/use-model-store.js +11 -0
  232. package/dist/react/use-model-store.js.map +1 -1
  233. package/dist/react/use-opencode-events/index.d.ts +3 -1
  234. package/dist/react/use-opencode-events/index.d.ts.map +1 -1
  235. package/dist/react/use-opencode-events/index.js +6 -2
  236. package/dist/react/use-opencode-events/index.js.map +1 -1
  237. package/dist/react/use-opencode-local.d.ts.map +1 -1
  238. package/dist/react/use-opencode-local.js +10 -1
  239. package/dist/react/use-opencode-local.js.map +1 -1
  240. package/dist/react/use-opencode-sessions/agents.d.ts.map +1 -1
  241. package/dist/react/use-opencode-sessions/agents.js +5 -3
  242. package/dist/react/use-opencode-sessions/agents.js.map +1 -1
  243. package/dist/react/use-opencode-sessions/commands.d.ts +7 -2
  244. package/dist/react/use-opencode-sessions/commands.d.ts.map +1 -1
  245. package/dist/react/use-opencode-sessions/commands.js +13 -9
  246. package/dist/react/use-opencode-sessions/commands.js.map +1 -1
  247. package/dist/react/use-opencode-sessions/provider-load-plan.d.ts +6 -0
  248. package/dist/react/use-opencode-sessions/provider-load-plan.d.ts.map +1 -0
  249. package/dist/react/use-opencode-sessions/provider-load-plan.js +4 -0
  250. package/dist/react/use-opencode-sessions/provider-load-plan.js.map +1 -0
  251. package/dist/react/use-opencode-sessions/providers.d.ts.map +1 -1
  252. package/dist/react/use-opencode-sessions/providers.js +39 -27
  253. package/dist/react/use-opencode-sessions/providers.js.map +1 -1
  254. package/dist/react/use-opencode-sessions/sessions.d.ts +1 -1
  255. package/dist/react/use-opencode-sessions/sessions.d.ts.map +1 -1
  256. package/dist/react/use-opencode-sessions/sessions.js +2 -2
  257. package/dist/react/use-opencode-sessions/sessions.js.map +1 -1
  258. package/dist/react/use-ops-overview.d.ts +64 -0
  259. package/dist/react/use-ops-overview.d.ts.map +1 -0
  260. package/dist/react/use-ops-overview.js +16 -0
  261. package/dist/react/use-ops-overview.js.map +1 -0
  262. package/dist/react/use-session-model-selection.d.ts +15 -0
  263. package/dist/react/use-session-model-selection.d.ts.map +1 -0
  264. package/dist/react/use-session-model-selection.js +27 -0
  265. package/dist/react/use-session-model-selection.js.map +1 -0
  266. package/dist/react/use-session-sync.d.ts.map +1 -1
  267. package/dist/react/use-session-sync.js +3 -1
  268. package/dist/react/use-session-sync.js.map +1 -1
  269. package/dist/react/use-session.d.ts +78 -4
  270. package/dist/react/use-session.d.ts.map +1 -1
  271. package/dist/react/use-session.js +329 -34
  272. package/dist/react/use-session.js.map +1 -1
  273. package/dist/react/use-system-status.d.ts +39 -0
  274. package/dist/react/use-system-status.d.ts.map +1 -0
  275. package/dist/react/use-system-status.js +68 -0
  276. package/dist/react/use-system-status.js.map +1 -0
  277. package/dist/react/use-teams-installations.d.ts +36 -0
  278. package/dist/react/use-teams-installations.d.ts.map +1 -0
  279. package/dist/react/use-teams-installations.js +94 -0
  280. package/dist/react/use-teams-installations.js.map +1 -0
  281. package/dist/react/use-tunnel.d.ts +120 -0
  282. package/dist/react/use-tunnel.d.ts.map +1 -0
  283. package/dist/react/use-tunnel.js +268 -0
  284. package/dist/react/use-tunnel.js.map +1 -0
  285. package/package.json +2 -2
@@ -0,0 +1,603 @@
1
+ import { normalizeToolName, toolInfo } from '../turns/tool-registry.js';
2
+ function isObject(value) {
3
+ return typeof value === 'object' && value !== null && !Array.isArray(value);
4
+ }
5
+ function asString(value) {
6
+ return typeof value === 'string' && value.length > 0 ? value : null;
7
+ }
8
+ function stringifyOutput(value) {
9
+ if (typeof value === 'string')
10
+ return value;
11
+ if (value === undefined || value === null)
12
+ return '';
13
+ try {
14
+ return JSON.stringify(value);
15
+ }
16
+ catch {
17
+ return String(value);
18
+ }
19
+ }
20
+ function toolOutput(value) {
21
+ if (!isObject(value) || !Object.prototype.hasOwnProperty.call(value, 'output')) {
22
+ return stringifyOutput(value);
23
+ }
24
+ return stringifyOutput(value.output);
25
+ }
26
+ const ACP_KIND_TOOL = {
27
+ execute: 'bash',
28
+ read: 'read',
29
+ edit: 'edit',
30
+ delete: 'edit',
31
+ move: 'edit',
32
+ search: 'grep',
33
+ fetch: 'webfetch',
34
+ };
35
+ function looksLikeToolName(value) {
36
+ return /^[A-Za-z][A-Za-z0-9_.-]*$/.test(value);
37
+ }
38
+ function nativeToolName(update, previous) {
39
+ if (previous)
40
+ return previous.tool;
41
+ const title = asString(update.title);
42
+ if (title && looksLikeToolName(title))
43
+ return title;
44
+ const kind = asString(update.kind) ?? 'other';
45
+ return ACP_KIND_TOOL[kind] ?? kind;
46
+ }
47
+ function projectedToolTitle(tool, title) {
48
+ if (!title || normalizeToolName(title) === normalizeToolName(tool)) {
49
+ return toolInfo(tool).label;
50
+ }
51
+ return title;
52
+ }
53
+ function nextGeneratedId(state, prefix) {
54
+ return `acp-${prefix}-${String(state.nextId).padStart(8, '0')}`;
55
+ }
56
+ function createUserMessage(state, text, messageId) {
57
+ const id = messageId ?? nextGeneratedId(state, 'user');
58
+ const info = {
59
+ id,
60
+ sessionID: state.sessionId,
61
+ role: 'user',
62
+ time: { created: Date.now() },
63
+ agent: 'default',
64
+ model: { providerID: 'acp', modelID: 'runtime' },
65
+ };
66
+ return {
67
+ info,
68
+ parts: [
69
+ {
70
+ id: `${id}-text`,
71
+ sessionID: state.sessionId,
72
+ messageID: id,
73
+ type: 'text',
74
+ text,
75
+ },
76
+ ],
77
+ };
78
+ }
79
+ function createAssistantMessage(state, messageId) {
80
+ const id = messageId ?? nextGeneratedId(state, 'assistant');
81
+ const parent = [...state.messages]
82
+ .reverse()
83
+ .find((message) => message.info.role === 'user')?.info.id;
84
+ const info = {
85
+ id,
86
+ sessionID: state.sessionId,
87
+ role: 'assistant',
88
+ time: { created: Date.now() },
89
+ parentID: parent ?? id,
90
+ modelID: 'runtime',
91
+ providerID: 'acp',
92
+ mode: state.currentModeId ?? 'build',
93
+ agent: 'default',
94
+ path: { cwd: '/workspace', root: '/workspace' },
95
+ cost: 0,
96
+ tokens: {
97
+ input: 0,
98
+ output: 0,
99
+ reasoning: 0,
100
+ cache: { read: 0, write: 0 },
101
+ },
102
+ };
103
+ return { info, parts: [] };
104
+ }
105
+ function completeAssistantMessage(message, completed) {
106
+ if (message.info.role !== 'assistant' || message.info.time.completed)
107
+ return message;
108
+ const parts = message.parts.map((part) => {
109
+ if (part.type !== 'tool' ||
110
+ (part.state.status !== 'pending' && part.state.status !== 'running')) {
111
+ return part;
112
+ }
113
+ const state = part.state;
114
+ const start = state.status === 'running' ? state.time.start : completed;
115
+ return {
116
+ ...part,
117
+ state: {
118
+ status: 'completed',
119
+ input: state.input,
120
+ output: '',
121
+ title: state.status === 'running' && state.title
122
+ ? state.title
123
+ : toolInfo(part.tool).label,
124
+ metadata: state.status === 'running' ? (state.metadata ?? {}) : {},
125
+ time: { start, end: completed },
126
+ },
127
+ };
128
+ });
129
+ return {
130
+ ...message,
131
+ info: {
132
+ ...message.info,
133
+ time: { ...message.info.time, completed },
134
+ },
135
+ parts,
136
+ };
137
+ }
138
+ function withAssistant(state, messageId, mutate) {
139
+ if (messageId) {
140
+ const existingIndex = state.messages.findIndex((message) => message.info.role === 'assistant' && message.info.id === messageId);
141
+ if (existingIndex >= 0) {
142
+ const messages = [...state.messages];
143
+ messages[existingIndex] = mutate(messages[existingIndex]);
144
+ return { ...state, messages, status: { type: 'busy' } };
145
+ }
146
+ }
147
+ const last = state.messages.at(-1);
148
+ if (!messageId &&
149
+ last?.info.role === 'assistant' &&
150
+ !last.info.time.completed) {
151
+ const messages = [...state.messages];
152
+ messages[messages.length - 1] = mutate(last);
153
+ return { ...state, messages, status: { type: 'busy' } };
154
+ }
155
+ const completed = Date.now();
156
+ const messages = state.messages.map((message) => completeAssistantMessage(message, completed));
157
+ const created = createAssistantMessage({ ...state, messages }, messageId);
158
+ return {
159
+ ...state,
160
+ nextId: state.nextId + 1,
161
+ messages: [...messages, mutate(created)],
162
+ status: { type: 'busy' },
163
+ };
164
+ }
165
+ function appendText(state, type, text, messageId) {
166
+ if (!text)
167
+ return state;
168
+ return withAssistant(state, messageId, (message) => {
169
+ const parts = [...message.parts];
170
+ const existingIndex = parts.findIndex((part) => part.type === type);
171
+ if (existingIndex >= 0) {
172
+ const previous = parts[existingIndex];
173
+ parts[existingIndex] = { ...previous, text: previous.text + text };
174
+ }
175
+ else {
176
+ parts.push({
177
+ id: `${message.info.id}-${type}`,
178
+ sessionID: state.sessionId,
179
+ messageID: message.info.id,
180
+ type,
181
+ text,
182
+ ...(type === 'reasoning' ? { time: { start: Date.now() } } : {}),
183
+ });
184
+ }
185
+ return { ...message, parts };
186
+ });
187
+ }
188
+ function applyUserText(state, text, messageId) {
189
+ if (!text)
190
+ return state;
191
+ if (messageId) {
192
+ const existingIndex = state.messages.findIndex((message) => message.info.role === 'user' && message.info.id === messageId);
193
+ if (existingIndex >= 0) {
194
+ const existing = state.messages[existingIndex];
195
+ const parts = [...existing.parts];
196
+ const index = parts.findIndex((part) => part.type === 'text');
197
+ if (index >= 0) {
198
+ const previous = parts[index];
199
+ parts[index] = { ...previous, text: previous.text + text };
200
+ }
201
+ const messages = [...state.messages];
202
+ messages[existingIndex] = { ...existing, parts };
203
+ return { ...state, messages };
204
+ }
205
+ }
206
+ const last = state.messages.at(-1);
207
+ if (!messageId && last?.info.role === 'user') {
208
+ const parts = [...last.parts];
209
+ const index = parts.findIndex((part) => part.type === 'text');
210
+ if (index >= 0) {
211
+ const previous = parts[index];
212
+ parts[index] = { ...previous, text: previous.text + text };
213
+ }
214
+ const messages = [...state.messages];
215
+ messages[messages.length - 1] = { ...last, parts };
216
+ return { ...state, messages };
217
+ }
218
+ return {
219
+ ...state,
220
+ nextId: state.nextId + 1,
221
+ messages: [...state.messages, createUserMessage(state, text, messageId)],
222
+ };
223
+ }
224
+ function projectTool(state, update) {
225
+ const callId = asString(update.toolCallId);
226
+ if (!callId)
227
+ return state;
228
+ const owner = state.messages.find((message) => message.parts.some((part) => part.type === 'tool' && part.callID === callId));
229
+ const ownerId = owner?.info.role === 'assistant' ? owner.info.id : null;
230
+ return withAssistant(state, ownerId, (message) => {
231
+ const parts = [...message.parts];
232
+ const index = parts.findIndex((part) => part.type === 'tool' && part.callID === callId);
233
+ const previous = index >= 0 ? parts[index] : null;
234
+ const input = isObject(update.rawInput)
235
+ ? update.rawInput
236
+ : previous?.state.input ?? {};
237
+ const status = asString(update.status) ?? previous?.state.status ?? 'pending';
238
+ const tool = nativeToolName(update, previous);
239
+ const title = projectedToolTitle(tool, asString(update.title));
240
+ const previousTitle = previous?.state.status === 'running' ? previous.state.title : undefined;
241
+ const rawOutput = update.rawOutput;
242
+ const outputMetadata = isObject(rawOutput) && isObject(rawOutput.metadata)
243
+ ? rawOutput.metadata
244
+ : {};
245
+ const now = Date.now();
246
+ let part;
247
+ if (status === 'completed') {
248
+ part = {
249
+ id: previous?.id ?? `${message.info.id}-tool-${callId}`,
250
+ sessionID: state.sessionId,
251
+ messageID: message.info.id,
252
+ type: 'tool',
253
+ callID: callId,
254
+ tool,
255
+ state: {
256
+ status: 'completed',
257
+ input,
258
+ output: toolOutput(rawOutput),
259
+ title: title ?? previousTitle ?? tool,
260
+ metadata: outputMetadata,
261
+ time: {
262
+ start: previous?.state.status === 'running'
263
+ ? previous.state.time.start
264
+ : now,
265
+ end: now,
266
+ },
267
+ },
268
+ };
269
+ }
270
+ else if (status === 'failed') {
271
+ part = {
272
+ id: previous?.id ?? `${message.info.id}-tool-${callId}`,
273
+ sessionID: state.sessionId,
274
+ messageID: message.info.id,
275
+ type: 'tool',
276
+ callID: callId,
277
+ tool,
278
+ state: {
279
+ status: 'error',
280
+ input,
281
+ error: toolOutput(rawOutput) || title || 'Tool call failed',
282
+ time: {
283
+ start: previous?.state.status === 'running'
284
+ ? previous.state.time.start
285
+ : now,
286
+ end: now,
287
+ },
288
+ },
289
+ };
290
+ }
291
+ else {
292
+ part = {
293
+ id: previous?.id ?? `${message.info.id}-tool-${callId}`,
294
+ sessionID: state.sessionId,
295
+ messageID: message.info.id,
296
+ type: 'tool',
297
+ callID: callId,
298
+ tool,
299
+ state: {
300
+ status: 'running',
301
+ input,
302
+ title,
303
+ time: {
304
+ start: previous?.state.status === 'running'
305
+ ? previous.state.time.start
306
+ : now,
307
+ },
308
+ },
309
+ };
310
+ }
311
+ if (index >= 0)
312
+ parts[index] = part;
313
+ else
314
+ parts.push(part);
315
+ return { ...message, parts };
316
+ });
317
+ }
318
+ function normalizeTodo(value) {
319
+ if (!isObject(value))
320
+ return null;
321
+ const content = asString(value.content) ?? asString(value.title);
322
+ if (!content)
323
+ return null;
324
+ return {
325
+ content,
326
+ status: asString(value.status) ?? 'pending',
327
+ priority: asString(value.priority) ?? 'medium',
328
+ };
329
+ }
330
+ function normalizeTodos(entries) {
331
+ return Array.isArray(entries)
332
+ ? entries.flatMap((entry) => {
333
+ const todo = normalizeTodo(entry);
334
+ return todo ? [todo] : [];
335
+ })
336
+ : [];
337
+ }
338
+ function normalizeQuestion(params) {
339
+ const explicit = Array.isArray(params.questions) ? params.questions : [];
340
+ const fromExplicit = explicit.flatMap((candidate) => {
341
+ if (!isObject(candidate))
342
+ return [];
343
+ const question = asString(candidate.question) ??
344
+ asString(candidate.label) ??
345
+ asString(params.message);
346
+ if (!question)
347
+ return [];
348
+ const options = Array.isArray(candidate.options)
349
+ ? candidate.options.flatMap((option) => {
350
+ if (typeof option === 'string') {
351
+ return [{ label: option, description: option }];
352
+ }
353
+ if (!isObject(option))
354
+ return [];
355
+ const label = asString(option.label) ?? asString(option.name);
356
+ if (!label)
357
+ return [];
358
+ return [
359
+ {
360
+ label,
361
+ description: asString(option.description) ?? label,
362
+ },
363
+ ];
364
+ })
365
+ : [];
366
+ return [
367
+ {
368
+ question,
369
+ header: asString(candidate.header) ?? question.slice(0, 30),
370
+ options,
371
+ multiple: candidate.multiple === true,
372
+ custom: candidate.allowText === true,
373
+ },
374
+ ];
375
+ });
376
+ if (fromExplicit.length > 0)
377
+ return fromExplicit;
378
+ const schema = isObject(params.requestedSchema)
379
+ ? params.requestedSchema
380
+ : isObject(params.schema)
381
+ ? params.schema
382
+ : null;
383
+ const properties = schema && isObject(schema.properties)
384
+ ? schema.properties
385
+ : {};
386
+ const fromSchema = Object.entries(properties).flatMap(([key, raw]) => {
387
+ if (!isObject(raw))
388
+ return [];
389
+ const values = Array.isArray(raw.enum) ? raw.enum : [];
390
+ return [
391
+ {
392
+ question: asString(raw.title) ??
393
+ asString(raw.description) ??
394
+ asString(params.message) ??
395
+ key,
396
+ header: key.slice(0, 30),
397
+ options: values.map((value) => ({
398
+ label: String(value),
399
+ description: String(value),
400
+ })),
401
+ custom: values.length === 0,
402
+ },
403
+ ];
404
+ });
405
+ if (fromSchema.length > 0)
406
+ return fromSchema;
407
+ const message = asString(params.message) ?? 'Kortix needs your input';
408
+ return [
409
+ {
410
+ question: message,
411
+ header: message.slice(0, 30),
412
+ options: [],
413
+ custom: true,
414
+ },
415
+ ];
416
+ }
417
+ function applyRequest(state, id, method, rawParams) {
418
+ const params = isObject(rawParams) ? rawParams : {};
419
+ if (asString(params.sessionId) !== state.sessionId)
420
+ return state;
421
+ if (method === 'session/request_permission') {
422
+ const toolCall = isObject(params.toolCall) ? params.toolCall : {};
423
+ const request = {
424
+ id: String(id),
425
+ sessionID: state.sessionId,
426
+ permission: asString(toolCall.title) ??
427
+ asString(params.permission) ??
428
+ 'tool',
429
+ patterns: [],
430
+ metadata: { acp: params },
431
+ always: [],
432
+ ...(asString(toolCall.toolCallId)
433
+ ? {
434
+ tool: {
435
+ messageID: state.messages.at(-1)?.info.id ?? state.sessionId,
436
+ callID: String(toolCall.toolCallId),
437
+ },
438
+ }
439
+ : {}),
440
+ };
441
+ return {
442
+ ...state,
443
+ permissions: [
444
+ ...state.permissions.filter((item) => item.id !== request.id),
445
+ request,
446
+ ],
447
+ };
448
+ }
449
+ if (method === 'elicitation/create' ||
450
+ method === 'elicitation/request' ||
451
+ method === 'session/request_input') {
452
+ const request = {
453
+ id: String(id),
454
+ sessionID: state.sessionId,
455
+ questions: normalizeQuestion(params),
456
+ };
457
+ return {
458
+ ...state,
459
+ questions: [
460
+ ...state.questions.filter((item) => item.id !== request.id),
461
+ request,
462
+ ],
463
+ };
464
+ }
465
+ return state;
466
+ }
467
+ function finishPrompt(state, result) {
468
+ const last = state.messages.at(-1);
469
+ if (!last || last.info.role !== 'assistant') {
470
+ return { ...state, status: { type: 'idle' } };
471
+ }
472
+ const usage = isObject(result.usage) ? result.usage : {};
473
+ const input = Number(usage.inputTokens) || 0;
474
+ const output = Number(usage.outputTokens) || 0;
475
+ const reasoning = Number(usage.thoughtTokens) || 0;
476
+ const read = Number(usage.cachedReadTokens) || 0;
477
+ const write = Number(usage.cachedWriteTokens) || 0;
478
+ const reason = asString(result.stopReason) ?? 'end_turn';
479
+ const finish = {
480
+ id: `${last.info.id}-finish`,
481
+ sessionID: state.sessionId,
482
+ messageID: last.info.id,
483
+ type: 'step-finish',
484
+ reason,
485
+ cost: Number(usage.cost) || 0,
486
+ tokens: {
487
+ input,
488
+ output,
489
+ reasoning,
490
+ cache: { read, write },
491
+ },
492
+ };
493
+ const info = {
494
+ ...last.info,
495
+ time: { ...last.info.time, completed: Date.now() },
496
+ finish: reason,
497
+ cost: finish.cost,
498
+ tokens: finish.tokens,
499
+ };
500
+ const messages = [...state.messages];
501
+ messages[messages.length - 1] = {
502
+ info,
503
+ parts: [...last.parts.filter((part) => part.type !== 'step-finish'), finish],
504
+ };
505
+ return { ...state, messages, status: { type: 'idle' } };
506
+ }
507
+ export function createAcpProjection(sessionId) {
508
+ return {
509
+ sessionId,
510
+ messages: [],
511
+ status: { type: 'idle' },
512
+ todos: [],
513
+ permissions: [],
514
+ questions: [],
515
+ configOptions: [],
516
+ availableCommands: [],
517
+ currentModeId: null,
518
+ sessionInfo: null,
519
+ usage: null,
520
+ nextId: 1,
521
+ };
522
+ }
523
+ export function applyAcpEnvelope(state, envelope) {
524
+ if ('method' in envelope && 'id' in envelope) {
525
+ return applyRequest(state, envelope.id, envelope.method, envelope.params);
526
+ }
527
+ if ('method' in envelope && envelope.method === 'session/update') {
528
+ const params = isObject(envelope.params) ? envelope.params : {};
529
+ if (asString(params.sessionId) !== state.sessionId)
530
+ return state;
531
+ const update = isObject(params.update) ? params.update : {};
532
+ const kind = asString(update.sessionUpdate) ?? asString(update.type);
533
+ const content = isObject(update.content) ? update.content : {};
534
+ const text = asString(content.text) ?? '';
535
+ const messageId = asString(update.messageId);
536
+ if (kind === 'user_message_chunk') {
537
+ return applyUserText(state, text, messageId);
538
+ }
539
+ if (kind === 'agent_thought_chunk') {
540
+ return appendText(state, 'reasoning', text, messageId);
541
+ }
542
+ if (kind === 'agent_message_chunk') {
543
+ return appendText(state, 'text', text, messageId);
544
+ }
545
+ if (kind === 'tool_call' || kind === 'tool_call_update') {
546
+ return projectTool(state, update);
547
+ }
548
+ if (kind === 'plan') {
549
+ return { ...state, todos: normalizeTodos(update.entries) };
550
+ }
551
+ if (kind === 'plan_update') {
552
+ const plan = isObject(update.plan) ? update.plan : update;
553
+ if (asString(plan.type) !== 'items')
554
+ return state;
555
+ return { ...state, todos: normalizeTodos(plan.entries) };
556
+ }
557
+ if (kind === 'plan_removed') {
558
+ return { ...state, todos: [] };
559
+ }
560
+ if (kind === 'config_option_update' && Array.isArray(update.configOptions)) {
561
+ return {
562
+ ...state,
563
+ configOptions: update.configOptions.filter(isObject),
564
+ };
565
+ }
566
+ if (kind === 'available_commands_update' &&
567
+ Array.isArray(update.availableCommands)) {
568
+ return {
569
+ ...state,
570
+ availableCommands: update.availableCommands.filter(isObject),
571
+ };
572
+ }
573
+ if (kind === 'current_mode_update') {
574
+ return {
575
+ ...state,
576
+ currentModeId: asString(update.currentModeId),
577
+ };
578
+ }
579
+ if (kind === 'session_info_update') {
580
+ const { sessionUpdate: _sessionUpdate, type: _type, ...sessionInfo } = update;
581
+ return { ...state, sessionInfo };
582
+ }
583
+ if (kind === 'usage_update') {
584
+ const { sessionUpdate: _sessionUpdate, type: _type, ...usage } = update;
585
+ return { ...state, usage };
586
+ }
587
+ return state;
588
+ }
589
+ if ('id' in envelope) {
590
+ const id = String(envelope.id);
591
+ const closed = {
592
+ ...state,
593
+ permissions: state.permissions.filter((item) => item.id !== id),
594
+ questions: state.questions.filter((item) => item.id !== id),
595
+ };
596
+ return isObject(envelope.result) &&
597
+ (asString(envelope.result.stopReason) || isObject(envelope.result.usage))
598
+ ? finishPrompt(closed, envelope.result)
599
+ : closed;
600
+ }
601
+ return state;
602
+ }
603
+ //# sourceMappingURL=projection.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"projection.js","sourceRoot":"","sources":["../../../src/core/acp/projection.ts"],"names":[],"mappings":"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"}