t3code-cli 0.13.0 → 0.14.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 (323) hide show
  1. package/README.md +87 -1
  2. package/dist/application.d.ts +2 -0
  3. package/dist/application.js +1 -1
  4. package/dist/auth.d.ts +50 -0
  5. package/dist/auth.js +1 -1
  6. package/dist/bin.d.ts +1 -0
  7. package/dist/bin.js +348 -603
  8. package/dist/cli.d.ts +66 -0
  9. package/dist/cli.js +1 -1
  10. package/dist/client-runtime/authorization.d.ts +2 -0
  11. package/dist/client-runtime/authorization.js +2 -0
  12. package/dist/client-runtime/connection.d.ts +2 -0
  13. package/dist/client-runtime/connection.js +2 -0
  14. package/dist/client-runtime/environment.d.ts +57 -0
  15. package/dist/client-runtime/environment.js +2 -0
  16. package/dist/client-runtime/errors.d.ts +28 -0
  17. package/dist/client-runtime/errors.js +35 -0
  18. package/dist/client-runtime/operations/projects.d.ts +2 -0
  19. package/dist/client-runtime/operations/projects.js +2 -0
  20. package/dist/client-runtime/operations.d.ts +2 -0
  21. package/dist/client-runtime/operations.js +2 -0
  22. package/dist/client-runtime/platform.d.ts +26 -0
  23. package/dist/client-runtime/platform.js +74 -0
  24. package/dist/client-runtime/relay.d.ts +121 -0
  25. package/dist/client-runtime/relay.js +245 -0
  26. package/dist/client-runtime/rpc.d.ts +2 -0
  27. package/dist/client-runtime/rpc.js +2 -0
  28. package/dist/client-runtime/state/assets.d.ts +40 -0
  29. package/dist/client-runtime/state/assets.js +53 -0
  30. package/dist/client-runtime/state/auth.d.ts +98 -0
  31. package/dist/client-runtime/state/auth.js +48 -0
  32. package/dist/client-runtime/state/connections.d.ts +2 -0
  33. package/dist/client-runtime/state/connections.js +52 -0
  34. package/dist/client-runtime/state/entities.d.ts +33 -0
  35. package/dist/client-runtime/state/entities.js +2 -0
  36. package/dist/client-runtime/state/filesystem.d.ts +42 -0
  37. package/dist/client-runtime/state/filesystem.js +48 -0
  38. package/dist/client-runtime/state/git.d.ts +43 -0
  39. package/dist/client-runtime/state/git.js +18 -0
  40. package/dist/client-runtime/state/models.d.ts +2 -0
  41. package/dist/client-runtime/state/models.js +2 -0
  42. package/dist/client-runtime/state/orchestration.d.ts +128 -0
  43. package/dist/client-runtime/state/orchestration.js +20 -0
  44. package/dist/client-runtime/state/presentation.d.ts +277 -0
  45. package/dist/client-runtime/state/presentation.js +34 -0
  46. package/dist/client-runtime/state/preview.d.ts +447 -0
  47. package/dist/client-runtime/state/preview.js +103 -0
  48. package/dist/client-runtime/state/project-grouping.d.ts +26 -0
  49. package/dist/client-runtime/state/project-grouping.js +73 -0
  50. package/dist/client-runtime/state/projects.d.ts +192 -0
  51. package/dist/client-runtime/state/projects.js +2 -0
  52. package/dist/client-runtime/state/relay.d.ts +10 -0
  53. package/dist/client-runtime/state/relay.js +19 -0
  54. package/dist/client-runtime/state/review.d.ts +28 -0
  55. package/dist/client-runtime/state/review.js +11 -0
  56. package/dist/client-runtime/state/runtime.d.ts +2 -0
  57. package/dist/client-runtime/state/runtime.js +2 -0
  58. package/dist/client-runtime/state/server.d.ts +1495 -0
  59. package/dist/client-runtime/state/server.js +207 -0
  60. package/dist/client-runtime/state/session.d.ts +532 -0
  61. package/dist/client-runtime/state/session.js +21 -0
  62. package/dist/client-runtime/state/shell.d.ts +529 -0
  63. package/dist/client-runtime/state/shell.js +2 -0
  64. package/dist/client-runtime/state/source-control.d.ts +92 -0
  65. package/dist/client-runtime/state/source-control.js +36 -0
  66. package/dist/client-runtime/state/terminal.d.ts +237 -0
  67. package/dist/client-runtime/state/terminal.js +173 -0
  68. package/dist/client-runtime/state/thread-settled.d.ts +104 -0
  69. package/dist/client-runtime/state/thread-settled.js +157 -0
  70. package/dist/client-runtime/state/thread-sort.d.ts +23 -0
  71. package/dist/client-runtime/state/thread-sort.js +47 -0
  72. package/dist/client-runtime/state/threads.d.ts +538 -0
  73. package/dist/client-runtime/state/threads.js +934 -0
  74. package/dist/client-runtime/state/vcs.d.ts +442 -0
  75. package/dist/client-runtime/state/vcs.js +756 -0
  76. package/dist/config.d.ts +84 -0
  77. package/dist/config.js +1 -1
  78. package/dist/connection.d.ts +7 -0
  79. package/dist/connection.js +1 -1
  80. package/dist/contracts.d.ts +2 -0
  81. package/dist/contracts.js +2 -1
  82. package/dist/index.d.ts +2 -0
  83. package/dist/index.js +1 -1
  84. package/dist/node.d.ts +6 -0
  85. package/dist/node.js +1 -1
  86. package/dist/orchestration.d.ts +1420 -0
  87. package/dist/orchestration.js +1 -1
  88. package/dist/preview.d.ts +2 -0
  89. package/dist/preview.js +2 -0
  90. package/dist/rpc.d.ts +6043 -0
  91. package/dist/rpc.js +1 -1
  92. package/dist/runtime.d.ts +2 -0
  93. package/dist/runtime.js +2 -2
  94. package/dist/shared/DrainableWorker.d.ts +28 -0
  95. package/dist/shared/DrainableWorker.js +24 -0
  96. package/dist/shared/KeyedCoalescingWorker.d.ts +13 -0
  97. package/dist/shared/KeyedCoalescingWorker.js +89 -0
  98. package/dist/shared/Net.d.ts +43 -0
  99. package/dist/shared/Net.js +126 -0
  100. package/dist/shared/String.d.ts +4 -0
  101. package/dist/shared/String.js +8 -0
  102. package/dist/shared/Struct.d.ts +5 -0
  103. package/dist/shared/Struct.js +2 -0
  104. package/dist/shared/advertisedEndpoint.d.ts +2 -0
  105. package/dist/shared/advertisedEndpoint.js +2 -0
  106. package/dist/shared/agentAwareness.d.ts +27 -0
  107. package/dist/shared/agentAwareness.js +54 -0
  108. package/dist/shared/backgroundActivitySettings.d.ts +23 -0
  109. package/dist/shared/backgroundActivitySettings.js +2 -0
  110. package/dist/shared/chatList.d.ts +12 -0
  111. package/dist/shared/chatList.js +14 -0
  112. package/dist/shared/cliArgs.d.ts +33 -0
  113. package/dist/shared/cliArgs.js +103 -0
  114. package/dist/shared/composerInlineTokens.d.ts +20 -0
  115. package/dist/shared/composerInlineTokens.js +72 -0
  116. package/dist/shared/composerTrigger.d.ts +26 -0
  117. package/dist/shared/composerTrigger.js +97 -0
  118. package/dist/shared/connectAuth.d.ts +58 -0
  119. package/dist/shared/connectAuth.js +89 -0
  120. package/dist/shared/devHome.d.ts +21 -0
  121. package/dist/shared/devHome.js +65 -0
  122. package/dist/shared/devProxy.d.ts +15 -0
  123. package/dist/shared/devProxy.js +22 -0
  124. package/dist/shared/dpop.d.ts +32 -0
  125. package/dist/shared/dpop.js +2724 -0
  126. package/dist/shared/dpopCommon.d.ts +2 -0
  127. package/dist/shared/dpopCommon.js +2 -0
  128. package/dist/shared/filePreview.d.ts +8 -0
  129. package/dist/shared/filePreview.js +31 -0
  130. package/dist/shared/git.d.ts +41 -0
  131. package/dist/shared/git.js +2 -0
  132. package/dist/shared/hostProcess.d.ts +13 -0
  133. package/dist/shared/hostProcess.js +2 -0
  134. package/dist/shared/httpObservability.d.ts +5 -0
  135. package/dist/shared/httpObservability.js +2 -0
  136. package/dist/shared/httpReadiness.d.ts +38 -0
  137. package/dist/shared/httpReadiness.js +110 -0
  138. package/dist/shared/keybindings.d.ts +35 -0
  139. package/dist/shared/keybindings.js +330 -0
  140. package/dist/shared/logging.d.ts +39 -0
  141. package/dist/shared/logging.js +2 -0
  142. package/dist/shared/model.d.ts +44 -0
  143. package/dist/shared/model.js +2 -0
  144. package/dist/shared/oauthScope.d.ts +23 -0
  145. package/dist/shared/oauthScope.js +2 -0
  146. package/dist/shared/observability.d.ts +105 -0
  147. package/dist/shared/observability.js +346 -0
  148. package/dist/shared/orchestrationTiming.d.ts +16 -0
  149. package/dist/shared/orchestrationTiming.js +32 -0
  150. package/dist/shared/path.d.ts +2 -0
  151. package/dist/shared/path.js +2 -0
  152. package/dist/shared/preview.d.ts +35 -0
  153. package/dist/shared/preview.js +103 -0
  154. package/dist/shared/previewViewport.d.ts +16 -0
  155. package/dist/shared/previewViewport.js +159 -0
  156. package/dist/shared/projectFavicon.d.ts +5 -0
  157. package/dist/shared/projectFavicon.js +13 -0
  158. package/dist/shared/projectScripts.d.ts +19 -0
  159. package/dist/shared/projectScripts.js +18 -0
  160. package/dist/shared/qrCode.d.ts +87 -0
  161. package/dist/shared/qrCode.js +870 -0
  162. package/dist/shared/relayAuth.d.ts +27 -0
  163. package/dist/shared/relayAuth.js +83 -0
  164. package/dist/shared/relayClient.d.ts +58 -0
  165. package/dist/shared/relayClient.js +245 -0
  166. package/dist/shared/relayJwt.d.ts +39 -0
  167. package/dist/shared/relayJwt.js +2 -0
  168. package/dist/shared/relaySigning.d.ts +4 -0
  169. package/dist/shared/relaySigning.js +2 -0
  170. package/dist/shared/relayTracing.d.ts +25 -0
  171. package/dist/shared/relayTracing.js +2 -0
  172. package/dist/shared/relayUrl.d.ts +5 -0
  173. package/dist/shared/relayUrl.js +2 -0
  174. package/dist/shared/remote.d.ts +57 -0
  175. package/dist/shared/remote.js +2 -0
  176. package/dist/shared/schemaJson.d.ts +35 -0
  177. package/dist/shared/schemaJson.js +2 -0
  178. package/dist/shared/schemaYaml.d.ts +86 -0
  179. package/dist/shared/schemaYaml.js +99 -0
  180. package/dist/shared/searchRanking.d.ts +30 -0
  181. package/dist/shared/searchRanking.js +99 -0
  182. package/dist/shared/semver.d.ts +23 -0
  183. package/dist/shared/semver.js +124 -0
  184. package/dist/shared/serverSettings.d.ts +19 -0
  185. package/dist/shared/serverSettings.js +103 -0
  186. package/dist/shared/shell.d.ts +51 -0
  187. package/dist/shared/shell.js +408 -0
  188. package/dist/shared/sourceControl.d.ts +26 -0
  189. package/dist/shared/sourceControl.js +2 -0
  190. package/dist/shared/t3ProjectFile.d.ts +27 -0
  191. package/dist/shared/t3ProjectFile.js +25 -0
  192. package/dist/shared/terminalLabels.d.ts +16 -0
  193. package/dist/shared/terminalLabels.js +28 -0
  194. package/dist/shared/toolActivity.d.ts +16 -0
  195. package/dist/shared/toolActivity.js +159 -0
  196. package/dist/shared.d.ts +43036 -0
  197. package/dist/shared.js +25428 -12277
  198. package/dist/t3tools.d.ts +2 -0
  199. package/dist/t3tools.js +1 -1
  200. package/package.json +39 -21
  201. package/src/auth/index.ts +2 -0
  202. package/src/auth/pairing.ts +8 -5
  203. package/src/auth/service.ts +2 -1
  204. package/src/auth/transport.ts +4 -0
  205. package/src/auth/type.ts +6 -0
  206. package/src/cli/auth.ts +7 -1
  207. package/src/contracts/index.ts +8 -0
  208. package/src/orchestration/layer.ts +36 -0
  209. package/src/orchestration/service.ts +5 -0
  210. package/src/preview/index.ts +11 -0
  211. package/src/preview/service.ts +52 -0
  212. package/src/rpc/error.ts +2 -0
  213. package/src/rpc/layer.ts +5 -4
  214. package/src/rpc/operation.ts +5 -4
  215. package/src/rpc/ws-group.ts +6 -0
  216. package/src/runtime/index.ts +1 -0
  217. package/src/runtime/layer.ts +5 -0
  218. package/src/sql/node-sqlite-client.ts +3 -0
  219. package/dist/src/application/actions.d.ts +0 -25
  220. package/dist/src/application/error.d.ts +0 -3
  221. package/dist/src/application/index.d.ts +0 -4
  222. package/dist/src/application/layer.d.ts +0 -117
  223. package/dist/src/application/model-selection.d.ts +0 -34
  224. package/dist/src/application/models.d.ts +0 -8
  225. package/dist/src/application/project-commands.d.ts +0 -44
  226. package/dist/src/application/projects.d.ts +0 -23
  227. package/dist/src/application/service.d.ts +0 -243
  228. package/dist/src/application/shell-sequence.d.ts +0 -96
  229. package/dist/src/application/terminals.d.ts +0 -66
  230. package/dist/src/application/thread-commands.d.ts +0 -157
  231. package/dist/src/application/thread-update.d.ts +0 -8
  232. package/dist/src/application/thread-wait.d.ts +0 -106
  233. package/dist/src/application/threads.d.ts +0 -660
  234. package/dist/src/auth/error.d.ts +0 -50
  235. package/dist/src/auth/index.d.ts +0 -10
  236. package/dist/src/auth/layer.d.ts +0 -53
  237. package/dist/src/auth/local-base-dir.d.ts +0 -8
  238. package/dist/src/auth/local-origin.d.ts +0 -18
  239. package/dist/src/auth/local-token.d.ts +0 -26
  240. package/dist/src/auth/local.d.ts +0 -24
  241. package/dist/src/auth/pairing.d.ts +0 -22
  242. package/dist/src/auth/remote-error.d.ts +0 -3
  243. package/dist/src/auth/schema.d.ts +0 -58
  244. package/dist/src/auth/service.d.ts +0 -27
  245. package/dist/src/auth/transport.d.ts +0 -22
  246. package/dist/src/auth/type.d.ts +0 -83
  247. package/dist/src/cli/env/flag.d.ts +0 -2
  248. package/dist/src/cli/env/index.d.ts +0 -2
  249. package/dist/src/cli/env/selection-layer.d.ts +0 -3
  250. package/dist/src/cli/flags.d.ts +0 -20
  251. package/dist/src/cli/format/index.d.ts +0 -1
  252. package/dist/src/cli/format/output.d.ts +0 -12
  253. package/dist/src/cli/index.d.ts +0 -5
  254. package/dist/src/cli/runtime/index.d.ts +0 -1
  255. package/dist/src/cli/runtime/service.d.ts +0 -16
  256. package/dist/src/cli/scope/index.d.ts +0 -1
  257. package/dist/src/cli/scope/resolve.d.ts +0 -20
  258. package/dist/src/cli-path/layer.d.ts +0 -3
  259. package/dist/src/cli-path/service.d.ts +0 -8
  260. package/dist/src/config/config.d.ts +0 -49
  261. package/dist/src/config/credential/cipher-node.d.ts +0 -3
  262. package/dist/src/config/credential/cipher-web.d.ts +0 -3
  263. package/dist/src/config/credential/cipher.d.ts +0 -29
  264. package/dist/src/config/credential/env.d.ts +0 -3
  265. package/dist/src/config/credential/error.d.ts +0 -8
  266. package/dist/src/config/credential/index.d.ts +0 -6
  267. package/dist/src/config/credential/service.d.ts +0 -34
  268. package/dist/src/config/env/env.d.ts +0 -55
  269. package/dist/src/config/env/index.d.ts +0 -2
  270. package/dist/src/config/env/layout.d.ts +0 -11
  271. package/dist/src/config/environment-name/index.d.ts +0 -1
  272. package/dist/src/config/environment-name/name.d.ts +0 -10
  273. package/dist/src/config/error.d.ts +0 -11
  274. package/dist/src/config/index.d.ts +0 -10
  275. package/dist/src/config/keystore/error.d.ts +0 -8
  276. package/dist/src/config/keystore/file.d.ts +0 -9
  277. package/dist/src/config/keystore/index.d.ts +0 -4
  278. package/dist/src/config/keystore/keyring-node.d.ts +0 -4
  279. package/dist/src/config/keystore/service.d.ts +0 -33
  280. package/dist/src/config/paths/index.d.ts +0 -1
  281. package/dist/src/config/paths/paths.d.ts +0 -6
  282. package/dist/src/config/persist/file-mode.d.ts +0 -4
  283. package/dist/src/config/persist/migration.d.ts +0 -68
  284. package/dist/src/config/persist/persist.d.ts +0 -40
  285. package/dist/src/config/persist/schema.d.ts +0 -68
  286. package/dist/src/config/resolve/resolve.d.ts +0 -40
  287. package/dist/src/config/selection/index.d.ts +0 -1
  288. package/dist/src/config/selection/resolve.d.ts +0 -4
  289. package/dist/src/config/selection/service.d.ts +0 -10
  290. package/dist/src/config/types.d.ts +0 -36
  291. package/dist/src/config/url/error.d.ts +0 -10
  292. package/dist/src/config/url/index.d.ts +0 -2
  293. package/dist/src/config/url/url.d.ts +0 -6
  294. package/dist/src/connection/error.d.ts +0 -10
  295. package/dist/src/connection/index.d.ts +0 -4
  296. package/dist/src/connection/layer.d.ts +0 -3
  297. package/dist/src/connection/prepared.d.ts +0 -14
  298. package/dist/src/connection/service.d.ts +0 -13
  299. package/dist/src/connection/type.d.ts +0 -10
  300. package/dist/src/contracts/index.d.ts +0 -1
  301. package/dist/src/domain/error.d.ts +0 -57
  302. package/dist/src/domain/helpers.d.ts +0 -179
  303. package/dist/src/domain/model-config.d.ts +0 -330
  304. package/dist/src/domain/thread-activities.d.ts +0 -14
  305. package/dist/src/domain/thread-lifecycle.d.ts +0 -120
  306. package/dist/src/index.d.ts +0 -3
  307. package/dist/src/node/connection.d.ts +0 -2
  308. package/dist/src/node/index.d.ts +0 -1
  309. package/dist/src/orchestration/index.d.ts +0 -2
  310. package/dist/src/orchestration/layer.d.ts +0 -1419
  311. package/dist/src/orchestration/service.d.ts +0 -28
  312. package/dist/src/rpc/error.d.ts +0 -16
  313. package/dist/src/rpc/index.d.ts +0 -6
  314. package/dist/src/rpc/layer.d.ts +0 -5862
  315. package/dist/src/rpc/operation.d.ts +0 -24
  316. package/dist/src/rpc/service.d.ts +0 -15
  317. package/dist/src/rpc/session.d.ts +0 -22
  318. package/dist/src/rpc/ws-group.d.ts +0 -1984
  319. package/dist/src/runtime/index.d.ts +0 -1
  320. package/dist/src/runtime/layer.d.ts +0 -15
  321. package/dist/src/sql/node-sqlite-client.d.ts +0 -10
  322. package/dist/src/sql/service.d.ts +0 -17
  323. package/dist/src/t3tools/index.d.ts +0 -1
@@ -0,0 +1,23 @@
1
+ import { KT as ProjectId, f_ as SidebarThreadSortOrder, u_ as SidebarProjectSortOrder } from "../../shared.js";
2
+ //#region upstream-t3code/packages/client-runtime/src/state/threadSort.d.ts
3
+ interface ThreadSortInput {
4
+ readonly createdAt: string;
5
+ readonly updatedAt: string;
6
+ readonly latestUserMessageAt?: string | null;
7
+ readonly messages?: ReadonlyArray<{
8
+ readonly createdAt: string;
9
+ readonly role: string;
10
+ }>;
11
+ }
12
+ declare function toSortableTimestamp(iso: string | undefined): number | null;
13
+ declare function getThreadSortTimestamp(thread: ThreadSortInput, sortOrder: SidebarThreadSortOrder | Exclude<SidebarProjectSortOrder, "manual">): number;
14
+ declare function sortThreads<T extends {
15
+ readonly id: string;
16
+ } & ThreadSortInput>(threads: readonly T[], sortOrder: SidebarThreadSortOrder): T[];
17
+ declare function getLatestThreadForProject<T extends {
18
+ readonly id: string;
19
+ readonly projectId: ProjectId;
20
+ readonly archivedAt: string | null;
21
+ } & ThreadSortInput>(threads: readonly T[], projectId: ProjectId, sortOrder: SidebarThreadSortOrder): T | null;
22
+ //#endregion
23
+ export { ThreadSortInput, getLatestThreadForProject, getThreadSortTimestamp, sortThreads, toSortableTimestamp };
@@ -0,0 +1,47 @@
1
+ import { Jk as Struct, Kk as Number$1, Qk as mapInput, Zk as flip, qk as String, vk as sort } from "../../shared.js";
2
+ //#region upstream-t3code/packages/client-runtime/src/state/threadSort.ts
3
+ function toSortableTimestamp(iso) {
4
+ if (!iso) return null;
5
+ const ms = Date.parse(iso);
6
+ return Number.isFinite(ms) ? ms : null;
7
+ }
8
+ function getFirstSortableTimestamp(...values) {
9
+ for (const value of values) {
10
+ const timestamp = toSortableTimestamp(value ?? void 0);
11
+ if (timestamp !== null) return timestamp;
12
+ }
13
+ return null;
14
+ }
15
+ function getLatestUserMessageTimestamp(thread) {
16
+ if (thread.latestUserMessageAt) {
17
+ const latestUserMessageTimestamp = toSortableTimestamp(thread.latestUserMessageAt);
18
+ if (latestUserMessageTimestamp !== null) return latestUserMessageTimestamp;
19
+ }
20
+ let latestUserMessageTimestamp = null;
21
+ for (const message of thread.messages ?? []) {
22
+ if (message.role !== "user") continue;
23
+ const messageTimestamp = toSortableTimestamp(message.createdAt);
24
+ if (messageTimestamp === null) continue;
25
+ latestUserMessageTimestamp = latestUserMessageTimestamp === null ? messageTimestamp : Math.max(latestUserMessageTimestamp, messageTimestamp);
26
+ }
27
+ if (latestUserMessageTimestamp !== null) return latestUserMessageTimestamp;
28
+ return getFirstSortableTimestamp(thread.updatedAt, thread.createdAt) ?? Number.NEGATIVE_INFINITY;
29
+ }
30
+ function getThreadSortTimestamp(thread, sortOrder) {
31
+ if (sortOrder === "created_at") return getFirstSortableTimestamp(thread.createdAt, thread.updatedAt) ?? Number.NEGATIVE_INFINITY;
32
+ return getLatestUserMessageTimestamp(thread);
33
+ }
34
+ function sortThreads(threads, sortOrder) {
35
+ return sort(threads, mapInput(Struct({
36
+ timestamp: flip(Number$1),
37
+ id: flip(String)
38
+ }), (thread) => ({
39
+ timestamp: getThreadSortTimestamp(thread, sortOrder),
40
+ id: thread.id
41
+ })));
42
+ }
43
+ function getLatestThreadForProject(threads, projectId, sortOrder) {
44
+ return sortThreads(threads.filter((thread) => thread.projectId === projectId && thread.archivedAt === null), sortOrder)[0] ?? null;
45
+ }
46
+ //#endregion
47
+ export { getLatestThreadForProject, getThreadSortTimestamp, sortThreads, toSortableTimestamp };
@@ -0,0 +1,538 @@
1
+ import { $T as ThreadId, B_ as OrchestrationEvent, Ca as EnvironmentCacheStore, Ct as StartThreadTurnInput, Dt as UnsnoozeThreadInput, Et as UnsettleThreadInput, G_ as OrchestrationGetFullThreadDiffResult, Mw as ScopedThreadRef, St as SnoozeThreadInput, Tt as UnarchiveThreadInput, Ua as RemoteEnvironmentRequestError, Y_ as OrchestrationGetTurnDiffResult, _a as EnvironmentSupervisor, _t as RespondToThreadUserInputInput, at as EnvironmentThreadShell, bT as EnvironmentAuthorizationError, bt as SetThreadRuntimeModeInput, cv as OrchestrationShellSnapshot, es as PreparedConnection, f as AtomCommand, ft as CreateThreadInput, gt as RespondToThreadApprovalInput, gv as OrchestrationThreadDetailSnapshot, ha as EnvironmentRegistry, ht as InterruptThreadTurnInput, it as EnvironmentThread, jw as ScopedProjectRef, kt as UpdateThreadMetadataInput, ma as EnvironmentNotRegisteredError, mt as DeleteThreadInput, on as EnvironmentRpcUnavailableError, pv as OrchestrationThread, u as EnvironmentCatalogState, uo as ManagedRelayDpopSigner, ut as ArchiveThreadInput, vt as RevertThreadCheckpointInput, wt as StopThreadSessionInput, xt as SettleThreadInput, yt as SetThreadInteractionModeInput, zT as EnvironmentId, z_ as OrchestrationDispatchCommandError } from "../../shared.js";
2
+ import * as Context from "effect/Context";
3
+ import * as Effect from "effect/Effect";
4
+ import * as Stream from "effect/Stream";
5
+ import * as Option from "effect/Option";
6
+ import * as Layer from "effect/Layer";
7
+ import { HttpClient } from "effect/unstable/http";
8
+ import * as SubscriptionRef from "effect/SubscriptionRef";
9
+ import * as Cause from "effect/Cause";
10
+ import * as Crypto from "effect/Crypto";
11
+ import { AsyncResult, Atom } from "effect/unstable/reactivity";
12
+ //#region upstream-t3code/packages/client-runtime/src/state/threadSnapshotHttp.d.ts
13
+ /**
14
+ * Load a thread's detail snapshot over HTTP instead of embedding it in the
15
+ * WebSocket subscription's first frame. The response is gzip-compressible by
16
+ * the transport and keeps the (potentially multi-KB) snapshot off the socket.
17
+ */
18
+ declare const fetchEnvironmentThreadSnapshot: (input: {
19
+ readonly prepared: PreparedConnection;
20
+ readonly threadId: ThreadId;
21
+ readonly signer: Option.Option<ManagedRelayDpopSigner["Service"]>;
22
+ readonly timeoutMs?: number;
23
+ }) => Effect.Effect<{
24
+ readonly snapshotSequence: number;
25
+ readonly thread: {
26
+ readonly id: string & import("effect/Brand").Brand<"ThreadId">;
27
+ readonly projectId: string & import("effect/Brand").Brand<"ProjectId">;
28
+ readonly title: string;
29
+ readonly modelSelection: {
30
+ readonly instanceId: string & import("effect/Brand").Brand<"ProviderInstanceId">;
31
+ readonly model: string;
32
+ readonly options?: readonly {
33
+ readonly id: string;
34
+ readonly value: string | boolean;
35
+ }[];
36
+ };
37
+ readonly runtimeMode: "approval-required" | "auto" | "auto-accept-edits" | "full-access";
38
+ readonly interactionMode: "default" | "plan";
39
+ readonly branch: string | null;
40
+ readonly worktreePath: string | null;
41
+ readonly latestTurn: {
42
+ readonly turnId: string & import("effect/Brand").Brand<"TurnId">;
43
+ readonly state: "completed" | "error" | "interrupted" | "running";
44
+ readonly requestedAt: string;
45
+ readonly startedAt: string | null;
46
+ readonly completedAt: string | null;
47
+ readonly assistantMessageId: (string & import("effect/Brand").Brand<"MessageId">) | null;
48
+ readonly sourceProposedPlan?: {
49
+ readonly threadId: string & import("effect/Brand").Brand<"ThreadId">;
50
+ readonly planId: string;
51
+ } | undefined;
52
+ } | null;
53
+ readonly createdAt: string;
54
+ readonly updatedAt: string;
55
+ readonly archivedAt: string | null;
56
+ readonly settledOverride: "active" | "settled" | null;
57
+ readonly settledAt: string | null;
58
+ readonly snoozedUntil?: string | null | undefined;
59
+ readonly snoozedAt?: string | null | undefined;
60
+ readonly deletedAt: string | null;
61
+ readonly messages: readonly {
62
+ readonly id: string & import("effect/Brand").Brand<"MessageId">;
63
+ readonly role: "assistant" | "system" | "user";
64
+ readonly text: string;
65
+ readonly attachments?: readonly {
66
+ readonly type: "image";
67
+ readonly id: string;
68
+ readonly name: string;
69
+ readonly mimeType: string;
70
+ readonly sizeBytes: number;
71
+ }[] | undefined;
72
+ readonly turnId: (string & import("effect/Brand").Brand<"TurnId">) | null;
73
+ readonly streaming: boolean;
74
+ readonly createdAt: string;
75
+ readonly updatedAt: string;
76
+ }[];
77
+ readonly proposedPlans: readonly {
78
+ readonly id: string;
79
+ readonly turnId: (string & import("effect/Brand").Brand<"TurnId">) | null;
80
+ readonly planMarkdown: string;
81
+ readonly implementedAt: string | null;
82
+ readonly implementationThreadId: (string & import("effect/Brand").Brand<"ThreadId">) | null;
83
+ readonly createdAt: string;
84
+ readonly updatedAt: string;
85
+ }[];
86
+ readonly activities: readonly {
87
+ readonly id: string & import("effect/Brand").Brand<"EventId">;
88
+ readonly tone: "approval" | "error" | "info" | "tool";
89
+ readonly kind: string;
90
+ readonly summary: string;
91
+ readonly payload: unknown;
92
+ readonly turnId: (string & import("effect/Brand").Brand<"TurnId">) | null;
93
+ readonly sequence?: number | undefined;
94
+ readonly createdAt: string;
95
+ }[];
96
+ readonly checkpoints: readonly {
97
+ readonly turnId: string & import("effect/Brand").Brand<"TurnId">;
98
+ readonly checkpointTurnCount: number;
99
+ readonly checkpointRef: string & import("effect/Brand").Brand<"CheckpointRef">;
100
+ readonly status: "error" | "missing" | "ready";
101
+ readonly files: readonly {
102
+ readonly path: string;
103
+ readonly kind: string;
104
+ readonly additions: number;
105
+ readonly deletions: number;
106
+ }[];
107
+ readonly assistantMessageId: (string & import("effect/Brand").Brand<"MessageId">) | null;
108
+ readonly completedAt: string;
109
+ }[];
110
+ readonly session: {
111
+ readonly threadId: string & import("effect/Brand").Brand<"ThreadId">;
112
+ readonly status: "error" | "idle" | "interrupted" | "ready" | "running" | "starting" | "stopped";
113
+ readonly providerName: string | null;
114
+ readonly providerInstanceId?: (string & import("effect/Brand").Brand<"ProviderInstanceId">) | undefined;
115
+ readonly runtimeMode: "approval-required" | "auto" | "auto-accept-edits" | "full-access";
116
+ readonly activeTurnId: (string & import("effect/Brand").Brand<"TurnId">) | null;
117
+ readonly lastError: string | null;
118
+ readonly updatedAt: string;
119
+ } | null;
120
+ };
121
+ }, RemoteEnvironmentRequestError, HttpClient.HttpClient>;
122
+ type FetchEnvironmentThreadSnapshotError = RemoteEnvironmentRequestError;
123
+ declare const ThreadSnapshotLoader_base: Context.ServiceClass<ThreadSnapshotLoader, "@t3tools/client-runtime/state/threadSnapshotHttp/ThreadSnapshotLoader", {
124
+ readonly load: (prepared: PreparedConnection, threadId: ThreadId) => Effect.Effect<Option.Option<OrchestrationThreadDetailSnapshot>>;
125
+ }>;
126
+ /**
127
+ * Loads a thread's detail snapshot over HTTP, returning `Option.none()` when it
128
+ * cannot be loaded (so the caller falls back to the socket-embedded snapshot).
129
+ * Decouples the thread state machine from the underlying HTTP + DPoP details and
130
+ * keeps them out of test contexts.
131
+ */
132
+ declare class ThreadSnapshotLoader extends ThreadSnapshotLoader_base {}
133
+ declare const threadSnapshotLoaderLayer: Layer.Layer<ThreadSnapshotLoader, never, HttpClient.HttpClient>;
134
+ //#endregion
135
+ //#region upstream-t3code/packages/client-runtime/src/state/threadState.d.ts
136
+ type EnvironmentThreadStatus = "empty" | "cached" | "synchronizing" | "live" | "deleted";
137
+ interface EnvironmentThreadState {
138
+ readonly data: Option.Option<OrchestrationThread>;
139
+ readonly status: EnvironmentThreadStatus;
140
+ readonly error: Option.Option<string>;
141
+ }
142
+ declare const EMPTY_ENVIRONMENT_THREAD_STATE: EnvironmentThreadState;
143
+ //#endregion
144
+ //#region upstream-t3code/packages/client-runtime/src/state/archivedThreads.d.ts
145
+ interface ArchivedSnapshotEntry {
146
+ readonly environmentId: EnvironmentId;
147
+ readonly snapshot: OrchestrationShellSnapshot;
148
+ }
149
+ interface ArchivedThreadSnapshotsState {
150
+ readonly snapshots: ReadonlyArray<ArchivedSnapshotEntry>;
151
+ readonly error: string | null;
152
+ readonly isLoading: boolean;
153
+ }
154
+ declare function makeArchivedThreadsEnvironmentKey(environmentIds: ReadonlyArray<EnvironmentId>): string;
155
+ declare function parseArchivedThreadsEnvironmentKey(key: string): ReadonlyArray<EnvironmentId>;
156
+ declare function createArchivedThreadSnapshotsAtomFamily<E>(options: {
157
+ readonly getSnapshotAtom: (environmentId: EnvironmentId) => Atom.Atom<AsyncResult.AsyncResult<OrchestrationShellSnapshot, E>>;
158
+ readonly labelPrefix: string;
159
+ }): (arg: string) => Atom.Atom<ArchivedThreadSnapshotsState>;
160
+ //#endregion
161
+ //#region upstream-t3code/packages/client-runtime/src/state/checkpointDiff.d.ts
162
+ type CheckpointDiffResult = OrchestrationGetTurnDiffResult | OrchestrationGetFullThreadDiffResult;
163
+ interface CheckpointDiffState {
164
+ readonly data: CheckpointDiffResult | null;
165
+ readonly error: string | null;
166
+ readonly isPending: boolean;
167
+ }
168
+ interface CheckpointDiffTarget {
169
+ readonly environmentId: EnvironmentId | null;
170
+ readonly threadId: ThreadId | null;
171
+ readonly fromTurnCount: number | null;
172
+ readonly toTurnCount: number | null;
173
+ readonly ignoreWhitespace: boolean;
174
+ readonly cacheScope?: string | null;
175
+ }
176
+ //#endregion
177
+ //#region upstream-t3code/packages/client-runtime/src/state/composerPathSearch.d.ts
178
+ interface ComposerPathSearchEntry {
179
+ readonly path: string;
180
+ readonly kind: "file" | "directory";
181
+ readonly parentPath?: string;
182
+ }
183
+ interface ComposerPathSearchState {
184
+ readonly entries: ReadonlyArray<ComposerPathSearchEntry>;
185
+ readonly isPending: boolean;
186
+ readonly error: string | null;
187
+ }
188
+ interface ComposerPathSearchTarget {
189
+ readonly environmentId: EnvironmentId | null;
190
+ readonly cwd: string | null;
191
+ readonly query: string | null;
192
+ }
193
+ //#endregion
194
+ //#region upstream-t3code/packages/client-runtime/src/state/threadCommands.d.ts
195
+ declare function createThreadEnvironmentAtoms<R, E>(runtime: Atom.AtomRuntime<EnvironmentRegistry | Crypto.Crypto | R, E>): {
196
+ create: AtomCommand<{
197
+ readonly environmentId: EnvironmentId;
198
+ readonly input: CreateThreadInput;
199
+ }, {
200
+ readonly sequence: number;
201
+ }, E | EnvironmentAuthorizationError | EnvironmentNotRegisteredError | EnvironmentRpcUnavailableError | OrchestrationDispatchCommandError | import("effect/unstable/rpc/RpcClientError").RpcClientError>;
202
+ delete: AtomCommand<{
203
+ readonly environmentId: EnvironmentId;
204
+ readonly input: DeleteThreadInput;
205
+ }, {
206
+ readonly sequence: number;
207
+ }, E | EnvironmentAuthorizationError | EnvironmentNotRegisteredError | EnvironmentRpcUnavailableError | OrchestrationDispatchCommandError | import("effect/unstable/rpc/RpcClientError").RpcClientError>;
208
+ archive: AtomCommand<{
209
+ readonly environmentId: EnvironmentId;
210
+ readonly input: ArchiveThreadInput;
211
+ }, {
212
+ readonly sequence: number;
213
+ }, E | EnvironmentAuthorizationError | EnvironmentNotRegisteredError | EnvironmentRpcUnavailableError | OrchestrationDispatchCommandError | import("effect/unstable/rpc/RpcClientError").RpcClientError>;
214
+ unarchive: AtomCommand<{
215
+ readonly environmentId: EnvironmentId;
216
+ readonly input: UnarchiveThreadInput;
217
+ }, {
218
+ readonly sequence: number;
219
+ }, E | EnvironmentAuthorizationError | EnvironmentNotRegisteredError | EnvironmentRpcUnavailableError | OrchestrationDispatchCommandError | import("effect/unstable/rpc/RpcClientError").RpcClientError>;
220
+ settle: AtomCommand<{
221
+ readonly environmentId: EnvironmentId;
222
+ readonly input: SettleThreadInput;
223
+ }, {
224
+ readonly sequence: number;
225
+ }, E | EnvironmentAuthorizationError | EnvironmentNotRegisteredError | EnvironmentRpcUnavailableError | OrchestrationDispatchCommandError | import("effect/unstable/rpc/RpcClientError").RpcClientError>;
226
+ unsettle: AtomCommand<{
227
+ readonly environmentId: EnvironmentId;
228
+ readonly input: UnsettleThreadInput;
229
+ }, {
230
+ readonly sequence: number;
231
+ }, E | EnvironmentAuthorizationError | EnvironmentNotRegisteredError | EnvironmentRpcUnavailableError | OrchestrationDispatchCommandError | import("effect/unstable/rpc/RpcClientError").RpcClientError>;
232
+ snooze: AtomCommand<{
233
+ readonly environmentId: EnvironmentId;
234
+ readonly input: SnoozeThreadInput;
235
+ }, {
236
+ readonly sequence: number;
237
+ }, E | EnvironmentAuthorizationError | EnvironmentNotRegisteredError | EnvironmentRpcUnavailableError | OrchestrationDispatchCommandError | import("effect/unstable/rpc/RpcClientError").RpcClientError>;
238
+ unsnooze: AtomCommand<{
239
+ readonly environmentId: EnvironmentId;
240
+ readonly input: UnsnoozeThreadInput;
241
+ }, {
242
+ readonly sequence: number;
243
+ }, E | EnvironmentAuthorizationError | EnvironmentNotRegisteredError | EnvironmentRpcUnavailableError | OrchestrationDispatchCommandError | import("effect/unstable/rpc/RpcClientError").RpcClientError>;
244
+ updateMetadata: AtomCommand<{
245
+ readonly environmentId: EnvironmentId;
246
+ readonly input: UpdateThreadMetadataInput;
247
+ }, {
248
+ readonly sequence: number;
249
+ }, E | EnvironmentAuthorizationError | EnvironmentNotRegisteredError | EnvironmentRpcUnavailableError | OrchestrationDispatchCommandError | import("effect/unstable/rpc/RpcClientError").RpcClientError>;
250
+ setRuntimeMode: AtomCommand<{
251
+ readonly environmentId: EnvironmentId;
252
+ readonly input: SetThreadRuntimeModeInput;
253
+ }, {
254
+ readonly sequence: number;
255
+ }, E | EnvironmentAuthorizationError | EnvironmentNotRegisteredError | EnvironmentRpcUnavailableError | OrchestrationDispatchCommandError | import("effect/unstable/rpc/RpcClientError").RpcClientError>;
256
+ setInteractionMode: AtomCommand<{
257
+ readonly environmentId: EnvironmentId;
258
+ readonly input: SetThreadInteractionModeInput;
259
+ }, {
260
+ readonly sequence: number;
261
+ }, E | EnvironmentAuthorizationError | EnvironmentNotRegisteredError | EnvironmentRpcUnavailableError | OrchestrationDispatchCommandError | import("effect/unstable/rpc/RpcClientError").RpcClientError>;
262
+ startTurn: AtomCommand<{
263
+ readonly environmentId: EnvironmentId;
264
+ readonly input: StartThreadTurnInput;
265
+ }, {
266
+ readonly sequence: number;
267
+ }, E | EnvironmentAuthorizationError | EnvironmentNotRegisteredError | EnvironmentRpcUnavailableError | OrchestrationDispatchCommandError | import("effect/unstable/rpc/RpcClientError").RpcClientError>;
268
+ interruptTurn: AtomCommand<{
269
+ readonly environmentId: EnvironmentId;
270
+ readonly input: InterruptThreadTurnInput;
271
+ }, {
272
+ readonly sequence: number;
273
+ }, E | EnvironmentAuthorizationError | EnvironmentNotRegisteredError | EnvironmentRpcUnavailableError | OrchestrationDispatchCommandError | import("effect/unstable/rpc/RpcClientError").RpcClientError>;
274
+ respondToApproval: AtomCommand<{
275
+ readonly environmentId: EnvironmentId;
276
+ readonly input: RespondToThreadApprovalInput;
277
+ }, {
278
+ readonly sequence: number;
279
+ }, E | EnvironmentAuthorizationError | EnvironmentNotRegisteredError | EnvironmentRpcUnavailableError | OrchestrationDispatchCommandError | import("effect/unstable/rpc/RpcClientError").RpcClientError>;
280
+ respondToUserInput: AtomCommand<{
281
+ readonly environmentId: EnvironmentId;
282
+ readonly input: RespondToThreadUserInputInput;
283
+ }, {
284
+ readonly sequence: number;
285
+ }, E | EnvironmentAuthorizationError | EnvironmentNotRegisteredError | EnvironmentRpcUnavailableError | OrchestrationDispatchCommandError | import("effect/unstable/rpc/RpcClientError").RpcClientError>;
286
+ revertCheckpoint: AtomCommand<{
287
+ readonly environmentId: EnvironmentId;
288
+ readonly input: RevertThreadCheckpointInput;
289
+ }, {
290
+ readonly sequence: number;
291
+ }, E | EnvironmentAuthorizationError | EnvironmentNotRegisteredError | EnvironmentRpcUnavailableError | OrchestrationDispatchCommandError | import("effect/unstable/rpc/RpcClientError").RpcClientError>;
292
+ stopSession: AtomCommand<{
293
+ readonly environmentId: EnvironmentId;
294
+ readonly input: StopThreadSessionInput;
295
+ }, {
296
+ readonly sequence: number;
297
+ }, E | EnvironmentAuthorizationError | EnvironmentNotRegisteredError | EnvironmentRpcUnavailableError | OrchestrationDispatchCommandError | import("effect/unstable/rpc/RpcClientError").RpcClientError>;
298
+ };
299
+ //#endregion
300
+ //#region upstream-t3code/packages/client-runtime/src/state/threadDetail.d.ts
301
+ /**
302
+ * Combine detail-only collections with the shell's authoritative thread metadata.
303
+ *
304
+ * Shell and detail subscriptions are intentionally independent. A cached detail can
305
+ * therefore briefly outlive a newer shell snapshot after reconnecting. Workspace
306
+ * consumers must use the shell branch/worktree/project fields so they do not target
307
+ * a stale checkout while retaining messages, activities, plans, and checkpoints
308
+ * from the detail subscription.
309
+ */
310
+ declare function mergeEnvironmentThread(detail: EnvironmentThread | null, shell: EnvironmentThreadShell | null): EnvironmentThread | null;
311
+ declare function createEnvironmentThreadDetailAtoms<E>(threadStateAtom: (environmentId: ScopedThreadRef["environmentId"], threadId: ScopedThreadRef["threadId"]) => Atom.Atom<AsyncResult.AsyncResult<EnvironmentThreadState, E>>): {
312
+ stateAtom: (ref: ScopedThreadRef) => Atom.Atom<EnvironmentThreadState>;
313
+ detailAtom: (ref: ScopedThreadRef) => Atom.Atom<EnvironmentThread | null>;
314
+ statusAtom: (ref: ScopedThreadRef) => Atom.Atom<EnvironmentThreadStatus>;
315
+ errorAtom: (ref: ScopedThreadRef) => Atom.Atom<string | null>;
316
+ messagesAtom: (ref: ScopedThreadRef) => Atom.Atom<readonly {
317
+ readonly id: string & import("effect/Brand").Brand<"MessageId">;
318
+ readonly role: "assistant" | "system" | "user";
319
+ readonly text: string;
320
+ readonly attachments?: readonly {
321
+ readonly type: "image";
322
+ readonly id: string;
323
+ readonly name: string;
324
+ readonly mimeType: string;
325
+ readonly sizeBytes: number;
326
+ }[] | undefined;
327
+ readonly turnId: (string & import("effect/Brand").Brand<"TurnId">) | null;
328
+ readonly streaming: boolean;
329
+ readonly createdAt: string;
330
+ readonly updatedAt: string;
331
+ }[]>;
332
+ activitiesAtom: (ref: ScopedThreadRef) => Atom.Atom<readonly {
333
+ readonly id: string & import("effect/Brand").Brand<"EventId">;
334
+ readonly tone: "approval" | "error" | "info" | "tool";
335
+ readonly kind: string;
336
+ readonly summary: string;
337
+ readonly payload: unknown;
338
+ readonly turnId: (string & import("effect/Brand").Brand<"TurnId">) | null;
339
+ readonly sequence?: number | undefined;
340
+ readonly createdAt: string;
341
+ }[]>;
342
+ proposedPlansAtom: (ref: ScopedThreadRef) => Atom.Atom<readonly {
343
+ readonly id: string;
344
+ readonly turnId: (string & import("effect/Brand").Brand<"TurnId">) | null;
345
+ readonly planMarkdown: string;
346
+ readonly implementedAt: string | null;
347
+ readonly implementationThreadId: (string & import("effect/Brand").Brand<"ThreadId">) | null;
348
+ readonly createdAt: string;
349
+ readonly updatedAt: string;
350
+ }[]>;
351
+ checkpointsAtom: (ref: ScopedThreadRef) => Atom.Atom<readonly {
352
+ readonly turnId: string & import("effect/Brand").Brand<"TurnId">;
353
+ readonly checkpointTurnCount: number;
354
+ readonly checkpointRef: string & import("effect/Brand").Brand<"CheckpointRef">;
355
+ readonly status: "error" | "missing" | "ready";
356
+ readonly files: readonly {
357
+ readonly path: string;
358
+ readonly kind: string;
359
+ readonly additions: number;
360
+ readonly deletions: number;
361
+ }[];
362
+ readonly assistantMessageId: (string & import("effect/Brand").Brand<"MessageId">) | null;
363
+ readonly completedAt: string;
364
+ }[]>;
365
+ sessionAtom: (ref: ScopedThreadRef) => Atom.Atom<{
366
+ readonly threadId: string & import("effect/Brand").Brand<"ThreadId">;
367
+ readonly status: "error" | "idle" | "interrupted" | "ready" | "running" | "starting" | "stopped";
368
+ readonly providerName: string | null;
369
+ readonly providerInstanceId?: (string & import("effect/Brand").Brand<"ProviderInstanceId">) | undefined;
370
+ readonly runtimeMode: "approval-required" | "auto" | "auto-accept-edits" | "full-access";
371
+ readonly activeTurnId: (string & import("effect/Brand").Brand<"TurnId">) | null;
372
+ readonly lastError: string | null;
373
+ readonly updatedAt: string;
374
+ } | null>;
375
+ latestTurnAtom: (ref: ScopedThreadRef) => Atom.Atom<{
376
+ readonly turnId: string & import("effect/Brand").Brand<"TurnId">;
377
+ readonly state: "completed" | "error" | "interrupted" | "running";
378
+ readonly requestedAt: string;
379
+ readonly startedAt: string | null;
380
+ readonly completedAt: string | null;
381
+ readonly assistantMessageId: (string & import("effect/Brand").Brand<"MessageId">) | null;
382
+ readonly sourceProposedPlan?: {
383
+ readonly threadId: string & import("effect/Brand").Brand<"ThreadId">;
384
+ readonly planId: string;
385
+ } | undefined;
386
+ } | null>;
387
+ };
388
+ //#endregion
389
+ //#region upstream-t3code/packages/client-runtime/src/state/threadReducer.d.ts
390
+ type ThreadDetailReducerResult = {
391
+ readonly kind: "updated";
392
+ readonly thread: OrchestrationThread;
393
+ } | {
394
+ readonly kind: "deleted";
395
+ } | {
396
+ readonly kind: "unchanged";
397
+ };
398
+ /**
399
+ * Apply a single orchestration event to an `OrchestrationThread`, returning
400
+ * the updated thread, a deletion signal, or an "unchanged" marker when the
401
+ * event doesn't affect this thread.
402
+ *
403
+ * This is a pure reducer operating on contract types. UI-specific mapping
404
+ * (e.g. resolving attachment preview URLs, normalising model slugs, adding
405
+ * scoped fields like `environmentId`) is the caller's responsibility.
406
+ */
407
+ declare function applyThreadDetailEvent(thread: OrchestrationThread, event: OrchestrationEvent): ThreadDetailReducerResult;
408
+ //#endregion
409
+ //#region upstream-t3code/packages/client-runtime/src/state/threadShell.d.ts
410
+ declare function createEnvironmentThreadShellAtoms(input: {
411
+ readonly catalogValueAtom: Atom.Atom<EnvironmentCatalogState>;
412
+ readonly snapshotAtom: (environmentId: EnvironmentId) => Atom.Atom<OrchestrationShellSnapshot | null>;
413
+ }): {
414
+ environmentThreadsAtom: (arg: string & import("effect/Brand").Brand<"EnvironmentId">) => Atom.Atom<readonly {
415
+ readonly id: string & import("effect/Brand").Brand<"ThreadId">;
416
+ readonly projectId: string & import("effect/Brand").Brand<"ProjectId">;
417
+ readonly title: string;
418
+ readonly modelSelection: {
419
+ readonly instanceId: string & import("effect/Brand").Brand<"ProviderInstanceId">;
420
+ readonly model: string;
421
+ readonly options?: readonly {
422
+ readonly id: string;
423
+ readonly value: string | boolean;
424
+ }[];
425
+ };
426
+ readonly runtimeMode: "approval-required" | "auto" | "auto-accept-edits" | "full-access";
427
+ readonly interactionMode: "default" | "plan";
428
+ readonly branch: string | null;
429
+ readonly worktreePath: string | null;
430
+ readonly latestTurn: {
431
+ readonly turnId: string & import("effect/Brand").Brand<"TurnId">;
432
+ readonly state: "completed" | "error" | "interrupted" | "running";
433
+ readonly requestedAt: string;
434
+ readonly startedAt: string | null;
435
+ readonly completedAt: string | null;
436
+ readonly assistantMessageId: (string & import("effect/Brand").Brand<"MessageId">) | null;
437
+ readonly sourceProposedPlan?: {
438
+ readonly threadId: string & import("effect/Brand").Brand<"ThreadId">;
439
+ readonly planId: string;
440
+ } | undefined;
441
+ } | null;
442
+ readonly createdAt: string;
443
+ readonly updatedAt: string;
444
+ readonly archivedAt: string | null;
445
+ readonly settledOverride: "active" | "settled" | null;
446
+ readonly settledAt: string | null;
447
+ readonly snoozedUntil?: string | null | undefined;
448
+ readonly snoozedAt?: string | null | undefined;
449
+ readonly session: {
450
+ readonly threadId: string & import("effect/Brand").Brand<"ThreadId">;
451
+ readonly status: "error" | "idle" | "interrupted" | "ready" | "running" | "starting" | "stopped";
452
+ readonly providerName: string | null;
453
+ readonly providerInstanceId?: (string & import("effect/Brand").Brand<"ProviderInstanceId">) | undefined;
454
+ readonly runtimeMode: "approval-required" | "auto" | "auto-accept-edits" | "full-access";
455
+ readonly activeTurnId: (string & import("effect/Brand").Brand<"TurnId">) | null;
456
+ readonly lastError: string | null;
457
+ readonly updatedAt: string;
458
+ } | null;
459
+ readonly latestUserMessageAt: string | null;
460
+ readonly hasPendingApprovals: boolean;
461
+ readonly hasPendingUserInput: boolean;
462
+ readonly hasActionableProposedPlan: boolean;
463
+ }[]>;
464
+ environmentThreadIndexAtom: (arg: string & import("effect/Brand").Brand<"EnvironmentId">) => Atom.Atom<ReadonlyMap<string & import("effect/Brand").Brand<"ThreadId">, {
465
+ readonly id: string & import("effect/Brand").Brand<"ThreadId">;
466
+ readonly projectId: string & import("effect/Brand").Brand<"ProjectId">;
467
+ readonly title: string;
468
+ readonly modelSelection: {
469
+ readonly instanceId: string & import("effect/Brand").Brand<"ProviderInstanceId">;
470
+ readonly model: string;
471
+ readonly options?: readonly {
472
+ readonly id: string;
473
+ readonly value: string | boolean;
474
+ }[];
475
+ };
476
+ readonly runtimeMode: "approval-required" | "auto" | "auto-accept-edits" | "full-access";
477
+ readonly interactionMode: "default" | "plan";
478
+ readonly branch: string | null;
479
+ readonly worktreePath: string | null;
480
+ readonly latestTurn: {
481
+ readonly turnId: string & import("effect/Brand").Brand<"TurnId">;
482
+ readonly state: "completed" | "error" | "interrupted" | "running";
483
+ readonly requestedAt: string;
484
+ readonly startedAt: string | null;
485
+ readonly completedAt: string | null;
486
+ readonly assistantMessageId: (string & import("effect/Brand").Brand<"MessageId">) | null;
487
+ readonly sourceProposedPlan?: {
488
+ readonly threadId: string & import("effect/Brand").Brand<"ThreadId">;
489
+ readonly planId: string;
490
+ } | undefined;
491
+ } | null;
492
+ readonly createdAt: string;
493
+ readonly updatedAt: string;
494
+ readonly archivedAt: string | null;
495
+ readonly settledOverride: "active" | "settled" | null;
496
+ readonly settledAt: string | null;
497
+ readonly snoozedUntil?: string | null | undefined;
498
+ readonly snoozedAt?: string | null | undefined;
499
+ readonly session: {
500
+ readonly threadId: string & import("effect/Brand").Brand<"ThreadId">;
501
+ readonly status: "error" | "idle" | "interrupted" | "ready" | "running" | "starting" | "stopped";
502
+ readonly providerName: string | null;
503
+ readonly providerInstanceId?: (string & import("effect/Brand").Brand<"ProviderInstanceId">) | undefined;
504
+ readonly runtimeMode: "approval-required" | "auto" | "auto-accept-edits" | "full-access";
505
+ readonly activeTurnId: (string & import("effect/Brand").Brand<"TurnId">) | null;
506
+ readonly lastError: string | null;
507
+ readonly updatedAt: string;
508
+ } | null;
509
+ readonly latestUserMessageAt: string | null;
510
+ readonly hasPendingApprovals: boolean;
511
+ readonly hasPendingUserInput: boolean;
512
+ readonly hasActionableProposedPlan: boolean;
513
+ }>>;
514
+ environmentThreadRefsAtom: (arg: string & import("effect/Brand").Brand<"EnvironmentId">) => Atom.Atom<readonly {
515
+ readonly environmentId: string & import("effect/Brand").Brand<"EnvironmentId">;
516
+ readonly threadId: string & import("effect/Brand").Brand<"ThreadId">;
517
+ }[]>;
518
+ environmentThreadRefsByProjectAtom: (arg: string & import("effect/Brand").Brand<"EnvironmentId">) => Atom.Atom<ReadonlyMap<string & import("effect/Brand").Brand<"ProjectId">, readonly {
519
+ readonly environmentId: string & import("effect/Brand").Brand<"EnvironmentId">;
520
+ readonly threadId: string & import("effect/Brand").Brand<"ThreadId">;
521
+ }[]>>;
522
+ threadRefsAtom: Atom.Atom<readonly {
523
+ readonly environmentId: string & import("effect/Brand").Brand<"EnvironmentId">;
524
+ readonly threadId: string & import("effect/Brand").Brand<"ThreadId">;
525
+ }[]>;
526
+ threadShellsAtom: Atom.Atom<readonly EnvironmentThreadShell[]>;
527
+ threadShellsForProjectRefsAtom: (refs: ReadonlyArray<ScopedProjectRef>) => Atom.Atom<readonly EnvironmentThreadShell[]>;
528
+ threadShellAtom: (ref: ScopedThreadRef) => Atom.Atom<EnvironmentThreadShell | null>;
529
+ };
530
+ //#endregion
531
+ //#region upstream-t3code/packages/client-runtime/src/state/threads.d.ts
532
+ declare const makeEnvironmentThreadState: (threadId: string & import("effect/Brand").Brand<"ThreadId">) => Effect.Effect<SubscriptionRef.SubscriptionRef<EnvironmentThreadState>, never, EnvironmentCacheStore | EnvironmentSupervisor | import("effect/Scope").Scope | ThreadSnapshotLoader>;
533
+ declare function threadStateChanges(environmentId: EnvironmentId, threadId: ThreadId): Stream.Stream<EnvironmentThreadState, never, EnvironmentCacheStore | EnvironmentRegistry | ThreadSnapshotLoader>;
534
+ declare function createEnvironmentThreadStateAtoms<R, E>(runtime: Atom.AtomRuntime<EnvironmentRegistry | EnvironmentCacheStore | ThreadSnapshotLoader | R, E>): {
535
+ stateAtom: (environmentId: EnvironmentId, threadId: ThreadId) => Atom.Atom<import("effect/unstable/reactivity/AsyncResult").AsyncResult<EnvironmentThreadState, E | Cause.NoSuchElementError>>;
536
+ };
537
+ //#endregion
538
+ export { type ArchiveThreadInput, ArchivedSnapshotEntry, ArchivedThreadSnapshotsState, CheckpointDiffResult, CheckpointDiffState, CheckpointDiffTarget, ComposerPathSearchEntry, ComposerPathSearchState, ComposerPathSearchTarget, type CreateThreadInput, type DeleteThreadInput, EMPTY_ENVIRONMENT_THREAD_STATE, EnvironmentThreadState, EnvironmentThreadStatus, FetchEnvironmentThreadSnapshotError, type InterruptThreadTurnInput, type RespondToThreadApprovalInput, type RespondToThreadUserInputInput, type RevertThreadCheckpointInput, type SetThreadInteractionModeInput, type SetThreadRuntimeModeInput, type SettleThreadInput, type SnoozeThreadInput, type StartThreadTurnInput, type StopThreadSessionInput, ThreadDetailReducerResult, ThreadSnapshotLoader, type UnarchiveThreadInput, type UnsettleThreadInput, type UnsnoozeThreadInput, type UpdateThreadMetadataInput, applyThreadDetailEvent, createArchivedThreadSnapshotsAtomFamily, createEnvironmentThreadDetailAtoms, createEnvironmentThreadShellAtoms, createEnvironmentThreadStateAtoms, createThreadEnvironmentAtoms, fetchEnvironmentThreadSnapshot, makeArchivedThreadsEnvironmentKey, makeEnvironmentThreadState, mergeEnvironmentThread, parseArchivedThreadsEnvironmentKey, threadSnapshotLoaderLayer, threadStateChanges };