@kortix/sdk 0.11.0 → 0.12.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 (214) hide show
  1. package/README.md +110 -73
  2. package/dist/browser/cache/idb-sync-cache-key.d.ts +2 -0
  3. package/dist/browser/cache/idb-sync-cache-key.d.ts.map +1 -0
  4. package/dist/browser/cache/idb-sync-cache-key.js +7 -0
  5. package/dist/browser/cache/idb-sync-cache-key.js.map +1 -0
  6. package/dist/browser/cache/idb-sync-cache.d.ts +3 -3
  7. package/dist/browser/cache/idb-sync-cache.d.ts.map +1 -1
  8. package/dist/browser/cache/idb-sync-cache.js +49 -26
  9. package/dist/browser/cache/idb-sync-cache.js.map +1 -1
  10. package/dist/browser/session-sync/session-cache-ownership.d.ts +36 -0
  11. package/dist/browser/session-sync/session-cache-ownership.d.ts.map +1 -0
  12. package/dist/browser/session-sync/session-cache-ownership.js +66 -0
  13. package/dist/browser/session-sync/session-cache-ownership.js.map +1 -0
  14. package/dist/browser/session-sync/session-sync-registry.d.ts +8 -6
  15. package/dist/browser/session-sync/session-sync-registry.d.ts.map +1 -1
  16. package/dist/browser/session-sync/session-sync-registry.js +86 -33
  17. package/dist/browser/session-sync/session-sync-registry.js.map +1 -1
  18. package/dist/browser/session-sync/session-transcript-cache.d.ts +55 -0
  19. package/dist/browser/session-sync/session-transcript-cache.d.ts.map +1 -0
  20. package/dist/browser/session-sync/session-transcript-cache.js +69 -0
  21. package/dist/browser/session-sync/session-transcript-cache.js.map +1 -0
  22. package/dist/core/client/kortix.d.ts +72 -25
  23. package/dist/core/client/kortix.d.ts.map +1 -1
  24. package/dist/core/client/kortix.js +76 -17
  25. package/dist/core/client/kortix.js.map +1 -1
  26. package/dist/core/rest/platform-client/host-boundary.d.ts +7 -0
  27. package/dist/core/rest/platform-client/host-boundary.d.ts.map +1 -1
  28. package/dist/core/rest/platform-client/host-boundary.js +14 -0
  29. package/dist/core/rest/platform-client/host-boundary.js.map +1 -1
  30. package/dist/core/rest/projects-client/access.d.ts +1 -2
  31. package/dist/core/rest/projects-client/access.d.ts.map +1 -1
  32. package/dist/core/rest/projects-client/access.js +9 -6
  33. package/dist/core/rest/projects-client/access.js.map +1 -1
  34. package/dist/core/rest/projects-client/agent-config.d.ts +15 -7
  35. package/dist/core/rest/projects-client/agent-config.d.ts.map +1 -1
  36. package/dist/core/rest/projects-client/agent-config.js +43 -2
  37. package/dist/core/rest/projects-client/agent-config.js.map +1 -1
  38. package/dist/core/rest/projects-client/agent-scope.d.ts +4 -0
  39. package/dist/core/rest/projects-client/agent-scope.d.ts.map +1 -1
  40. package/dist/core/rest/projects-client/agent-scope.js +34 -1
  41. package/dist/core/rest/projects-client/agent-scope.js.map +1 -1
  42. package/dist/core/rest/projects-client/audit.d.ts +34 -0
  43. package/dist/core/rest/projects-client/audit.d.ts.map +1 -1
  44. package/dist/core/rest/projects-client/audit.js +49 -4
  45. package/dist/core/rest/projects-client/audit.js.map +1 -1
  46. package/dist/core/rest/projects-client/billing.d.ts +26 -14
  47. package/dist/core/rest/projects-client/billing.d.ts.map +1 -1
  48. package/dist/core/rest/projects-client/billing.js +4 -5
  49. package/dist/core/rest/projects-client/billing.js.map +1 -1
  50. package/dist/core/rest/projects-client/connectors.d.ts +106 -45
  51. package/dist/core/rest/projects-client/connectors.d.ts.map +1 -1
  52. package/dist/core/rest/projects-client/connectors.js +95 -58
  53. package/dist/core/rest/projects-client/connectors.js.map +1 -1
  54. package/dist/core/rest/projects-client/github.d.ts +7 -1
  55. package/dist/core/rest/projects-client/github.d.ts.map +1 -1
  56. package/dist/core/rest/projects-client/github.js.map +1 -1
  57. package/dist/core/rest/projects-client/iam.d.ts +17 -0
  58. package/dist/core/rest/projects-client/iam.d.ts.map +1 -1
  59. package/dist/core/rest/projects-client/iam.js +14 -0
  60. package/dist/core/rest/projects-client/iam.js.map +1 -1
  61. package/dist/core/rest/projects-client/index.d.ts +2 -0
  62. package/dist/core/rest/projects-client/index.d.ts.map +1 -1
  63. package/dist/core/rest/projects-client/index.js +2 -0
  64. package/dist/core/rest/projects-client/index.js.map +1 -1
  65. package/dist/core/rest/projects-client/model-enablement.d.ts +9 -0
  66. package/dist/core/rest/projects-client/model-enablement.d.ts.map +1 -0
  67. package/dist/core/rest/projects-client/model-enablement.js +16 -0
  68. package/dist/core/rest/projects-client/model-enablement.js.map +1 -0
  69. package/dist/core/rest/projects-client/policies.d.ts +18 -0
  70. package/dist/core/rest/projects-client/policies.d.ts.map +1 -1
  71. package/dist/core/rest/projects-client/policies.js.map +1 -1
  72. package/dist/core/rest/projects-client/projects.d.ts +87 -1
  73. package/dist/core/rest/projects-client/projects.d.ts.map +1 -1
  74. package/dist/core/rest/projects-client/projects.js +8 -0
  75. package/dist/core/rest/projects-client/projects.js.map +1 -1
  76. package/dist/core/rest/projects-client/sandbox.d.ts +50 -0
  77. package/dist/core/rest/projects-client/sandbox.d.ts.map +1 -1
  78. package/dist/core/rest/projects-client/sandbox.js.map +1 -1
  79. package/dist/core/rest/projects-client/session-costs.d.ts +102 -0
  80. package/dist/core/rest/projects-client/session-costs.d.ts.map +1 -0
  81. package/dist/core/rest/projects-client/session-costs.js +25 -0
  82. package/dist/core/rest/projects-client/session-costs.js.map +1 -0
  83. package/dist/core/rest/projects-client/session-sandbox.d.ts +0 -2
  84. package/dist/core/rest/projects-client/session-sandbox.d.ts.map +1 -1
  85. package/dist/core/rest/projects-client/session-sandbox.js +1 -10
  86. package/dist/core/rest/projects-client/session-sandbox.js.map +1 -1
  87. package/dist/core/rest/projects-client/sessions.d.ts +94 -44
  88. package/dist/core/rest/projects-client/sessions.d.ts.map +1 -1
  89. package/dist/core/rest/projects-client/sessions.js +9 -15
  90. package/dist/core/rest/projects-client/sessions.js.map +1 -1
  91. package/dist/core/rest/projects-client/setup-links.d.ts +37 -0
  92. package/dist/core/rest/projects-client/setup-links.d.ts.map +1 -1
  93. package/dist/core/rest/projects-client/setup-links.js +11 -0
  94. package/dist/core/rest/projects-client/setup-links.js.map +1 -1
  95. package/dist/core/session/index.d.ts +1 -1
  96. package/dist/core/session/index.d.ts.map +1 -1
  97. package/dist/core/session/index.js +1 -1
  98. package/dist/core/session/index.js.map +1 -1
  99. package/dist/core/session/preview-auth.d.ts +32 -0
  100. package/dist/core/session/preview-auth.d.ts.map +1 -0
  101. package/dist/core/session/preview-auth.js +53 -0
  102. package/dist/core/session/preview-auth.js.map +1 -0
  103. package/dist/core/session/server-store/url-helpers.d.ts.map +1 -1
  104. package/dist/core/session/server-store/url-helpers.js +5 -3
  105. package/dist/core/session/server-store/url-helpers.js.map +1 -1
  106. package/dist/core/session-sync/session-sync-controller.d.ts +12 -1
  107. package/dist/core/session-sync/session-sync-controller.d.ts.map +1 -1
  108. package/dist/core/session-sync/session-sync-controller.js +34 -2
  109. package/dist/core/session-sync/session-sync-controller.js.map +1 -1
  110. package/dist/index.d.ts +1 -2
  111. package/dist/index.d.ts.map +1 -1
  112. package/dist/index.js +0 -1
  113. package/dist/index.js.map +1 -1
  114. package/dist/kortix.esm.min.js +19 -24
  115. package/dist/kortix.global.js +19 -24
  116. package/dist/platform/auth-core.d.ts +5 -3
  117. package/dist/platform/auth-core.d.ts.map +1 -1
  118. package/dist/platform/auth-core.js +6 -4
  119. package/dist/platform/auth-core.js.map +1 -1
  120. package/dist/react/index.d.ts +1 -2
  121. package/dist/react/index.d.ts.map +1 -1
  122. package/dist/react/index.js +0 -1
  123. package/dist/react/index.js.map +1 -1
  124. package/dist/react/model-flatten.d.ts +20 -0
  125. package/dist/react/model-flatten.d.ts.map +1 -1
  126. package/dist/react/model-flatten.js +12 -0
  127. package/dist/react/model-flatten.js.map +1 -1
  128. package/dist/react/opencode.d.ts +4 -3
  129. package/dist/react/opencode.d.ts.map +1 -1
  130. package/dist/react/opencode.js +4 -3
  131. package/dist/react/opencode.js.map +1 -1
  132. package/dist/react/provider-selection.d.ts +9 -0
  133. package/dist/react/provider-selection.d.ts.map +1 -1
  134. package/dist/react/provider-selection.js +23 -0
  135. package/dist/react/provider-selection.js.map +1 -1
  136. package/dist/react/session-title-sync.d.ts +9 -5
  137. package/dist/react/session-title-sync.d.ts.map +1 -1
  138. package/dist/react/session-title-sync.js +14 -10
  139. package/dist/react/session-title-sync.js.map +1 -1
  140. package/dist/react/use-canonical-opencode-session.d.ts +2 -2
  141. package/dist/react/use-canonical-opencode-session.d.ts.map +1 -1
  142. package/dist/react/use-model-enablement.d.ts +25 -0
  143. package/dist/react/use-model-enablement.d.ts.map +1 -0
  144. package/dist/react/use-model-enablement.js +92 -0
  145. package/dist/react/use-model-enablement.js.map +1 -0
  146. package/dist/react/use-model-store.d.ts +6 -14
  147. package/dist/react/use-model-store.d.ts.map +1 -1
  148. package/dist/react/use-model-store.js +30 -52
  149. package/dist/react/use-model-store.js.map +1 -1
  150. package/dist/react/use-opencode-events/handle-event.d.ts.map +1 -1
  151. package/dist/react/use-opencode-events/handle-event.js +103 -41
  152. package/dist/react/use-opencode-events/handle-event.js.map +1 -1
  153. package/dist/react/use-opencode-local.d.ts +5 -4
  154. package/dist/react/use-opencode-local.d.ts.map +1 -1
  155. package/dist/react/use-opencode-local.js +20 -37
  156. package/dist/react/use-opencode-local.js.map +1 -1
  157. package/dist/react/use-opencode-sessions/keys.d.ts +3 -1
  158. package/dist/react/use-opencode-sessions/keys.d.ts.map +1 -1
  159. package/dist/react/use-opencode-sessions/keys.js +2 -0
  160. package/dist/react/use-opencode-sessions/keys.js.map +1 -1
  161. package/dist/react/use-opencode-sessions/sessions.d.ts.map +1 -1
  162. package/dist/react/use-opencode-sessions/sessions.js +16 -7
  163. package/dist/react/use-opencode-sessions/sessions.js.map +1 -1
  164. package/dist/react/use-opencode-sessions/shared.d.ts +3 -2
  165. package/dist/react/use-opencode-sessions/shared.d.ts.map +1 -1
  166. package/dist/react/use-opencode-sessions/shared.js +6 -3
  167. package/dist/react/use-opencode-sessions/shared.js.map +1 -1
  168. package/dist/react/use-opencode-sessions/sharing.js +2 -2
  169. package/dist/react/use-opencode-sessions/sharing.js.map +1 -1
  170. package/dist/react/use-session-sync.d.ts +13 -1
  171. package/dist/react/use-session-sync.d.ts.map +1 -1
  172. package/dist/react/use-session-sync.js +85 -17
  173. package/dist/react/use-session-sync.js.map +1 -1
  174. package/dist/react/use-session.d.ts +60 -40
  175. package/dist/react/use-session.d.ts.map +1 -1
  176. package/dist/react/use-session.js +160 -202
  177. package/dist/react/use-session.js.map +1 -1
  178. package/package.json +2 -2
  179. package/dist/core/acp/client.d.ts +0 -45
  180. package/dist/core/acp/client.d.ts.map +0 -1
  181. package/dist/core/acp/client.js +0 -277
  182. package/dist/core/acp/client.js.map +0 -1
  183. package/dist/core/acp/index.d.ts +0 -5
  184. package/dist/core/acp/index.d.ts.map +0 -1
  185. package/dist/core/acp/index.js +0 -5
  186. package/dist/core/acp/index.js.map +0 -1
  187. package/dist/core/acp/projection.d.ts +0 -23
  188. package/dist/core/acp/projection.d.ts.map +0 -1
  189. package/dist/core/acp/projection.js +0 -603
  190. package/dist/core/acp/projection.js.map +0 -1
  191. package/dist/core/acp/session-controller.d.ts +0 -90
  192. package/dist/core/acp/session-controller.d.ts.map +0 -1
  193. package/dist/core/acp/session-controller.js +0 -530
  194. package/dist/core/acp/session-controller.js.map +0 -1
  195. package/dist/core/acp/types.d.ts +0 -66
  196. package/dist/core/acp/types.d.ts.map +0 -1
  197. package/dist/core/acp/types.js +0 -21
  198. package/dist/core/acp/types.js.map +0 -1
  199. package/dist/core/session/runtime-transport.d.ts +0 -16
  200. package/dist/core/session/runtime-transport.d.ts.map +0 -1
  201. package/dist/core/session/runtime-transport.js +0 -30
  202. package/dist/core/session/runtime-transport.js.map +0 -1
  203. package/dist/react/session-busy.d.ts +0 -8
  204. package/dist/react/session-busy.d.ts.map +0 -1
  205. package/dist/react/session-busy.js +0 -4
  206. package/dist/react/session-busy.js.map +0 -1
  207. package/dist/react/use-acp-session-runtime.d.ts +0 -34
  208. package/dist/react/use-acp-session-runtime.d.ts.map +0 -1
  209. package/dist/react/use-acp-session-runtime.js +0 -84
  210. package/dist/react/use-acp-session-runtime.js.map +0 -1
  211. package/dist/react/use-admin-users.d.ts +0 -98
  212. package/dist/react/use-admin-users.d.ts.map +0 -1
  213. package/dist/react/use-admin-users.js +0 -121
  214. package/dist/react/use-admin-users.js.map +0 -1
@@ -1,603 +0,0 @@
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
@@ -1 +0,0 @@
1
- {"version":3,"file":"projection.js","sourceRoot":"","sources":["../../../src/core/acp/projection.ts"],"names":[],"mappings":"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"}