t3code-cli 0.7.0 → 0.8.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 (48) hide show
  1. package/dist/auth.js +2 -2
  2. package/dist/bin.js +56 -5
  3. package/dist/connection.js +3 -3
  4. package/dist/{error-B2t1bAP9.js → error-ChTsLQTu.js} +2 -2
  5. package/dist/{error-jwMt3VoW.js → error-CjADNVm8.js} +1 -1
  6. package/dist/index.js +1 -1
  7. package/dist/{layer-DvHnKBYj.js → layer-CMo36MrX.js} +3 -3
  8. package/dist/{layer-CfC5qZol.js → layer-Do8wK1t6.js} +3 -3
  9. package/dist/{layer-MqCKkIGD.js → layer-DwI3Skkh.js} +24 -7
  10. package/dist/orchestration.js +1 -1
  11. package/dist/rpc.js +1 -1
  12. package/dist/runtime.js +1 -1
  13. package/dist/src/application/layer.d.ts +61 -0
  14. package/dist/src/application/models.d.ts +1 -0
  15. package/dist/src/application/projects.d.ts +9 -0
  16. package/dist/src/application/service.d.ts +9 -0
  17. package/dist/src/application/shell-sequence.d.ts +9 -0
  18. package/dist/src/application/thread-wait.d.ts +9 -0
  19. package/dist/src/application/threads.d.ts +52 -1
  20. package/dist/src/cli-path/layer.d.ts +3 -0
  21. package/dist/src/cli-path/service.d.ts +8 -0
  22. package/dist/src/domain/helpers.d.ts +9 -0
  23. package/dist/src/domain/model-config.d.ts +3 -0
  24. package/dist/src/domain/thread-lifecycle.d.ts +9 -0
  25. package/dist/src/orchestration/layer.d.ts +215 -0
  26. package/dist/src/rpc/layer.d.ts +466 -0
  27. package/dist/src/rpc/ws-group.d.ts +142 -0
  28. package/dist/src/runtime/layer.d.ts +1 -1
  29. package/dist/{src-KdbHqrex.js → src-aiFPmAG7.js} +169 -13
  30. package/dist/t3tools.js +2 -2
  31. package/dist/{transport-D3zBdZ1h.js → transport-MI0Z3d2T.js} +2 -2
  32. package/dist/upstream-t3code/packages/contracts/src/environmentHttp.d.ts +33 -10
  33. package/dist/upstream-t3code/packages/contracts/src/ipc.d.ts +6 -0
  34. package/dist/upstream-t3code/packages/contracts/src/orchestration.d.ts +657 -1
  35. package/dist/upstream-t3code/packages/contracts/src/provider.d.ts +14 -0
  36. package/dist/upstream-t3code/packages/contracts/src/providerRuntime.d.ts +175 -1
  37. package/dist/upstream-t3code/packages/contracts/src/rpc.d.ts +492 -0
  38. package/dist/upstream-t3code/packages/contracts/src/server.d.ts +45 -0
  39. package/dist/upstream-t3code/packages/contracts/src/settings.d.ts +21 -0
  40. package/dist/upstream-t3code/packages/contracts/src/terminal.d.ts +6 -3
  41. package/package.json +2 -2
  42. package/src/application/service.ts +13 -0
  43. package/src/application/threads.ts +15 -1
  44. package/src/cli/thread.ts +2 -0
  45. package/src/cli/threads/callback.ts +92 -0
  46. package/src/cli-path/layer.ts +10 -0
  47. package/src/cli-path/service.ts +7 -0
  48. package/src/runtime/layer.ts +2 -0
@@ -126,6 +126,7 @@ export declare const ServerProvider: Schema.Struct<{
126
126
  readonly groupKey: Schema.decodeTo<Schema.String, Schema.String, never, never>;
127
127
  }>>;
128
128
  readonly showInteractionModeToggle: Schema.optional<Schema.Boolean>;
129
+ readonly requiresNewThreadForModelChange: Schema.optional<Schema.Boolean>;
129
130
  readonly enabled: Schema.Boolean;
130
131
  readonly installed: Schema.Boolean;
131
132
  readonly version: Schema.NullOr<Schema.decodeTo<Schema.String, Schema.String, never, never>>;
@@ -213,6 +214,7 @@ export declare const ServerProviders: Schema.$Array<Schema.Struct<{
213
214
  readonly groupKey: Schema.decodeTo<Schema.String, Schema.String, never, never>;
214
215
  }>>;
215
216
  readonly showInteractionModeToggle: Schema.optional<Schema.Boolean>;
217
+ readonly requiresNewThreadForModelChange: Schema.optional<Schema.Boolean>;
216
218
  readonly enabled: Schema.Boolean;
217
219
  readonly installed: Schema.Boolean;
218
220
  readonly version: Schema.NullOr<Schema.decodeTo<Schema.String, Schema.String, never, never>>;
@@ -595,6 +597,7 @@ export declare const ServerConfig: Schema.Struct<{
595
597
  readonly groupKey: Schema.decodeTo<Schema.String, Schema.String, never, never>;
596
598
  }>>;
597
599
  readonly showInteractionModeToggle: Schema.optional<Schema.Boolean>;
600
+ readonly requiresNewThreadForModelChange: Schema.optional<Schema.Boolean>;
598
601
  readonly enabled: Schema.Boolean;
599
602
  readonly installed: Schema.Boolean;
600
603
  readonly version: Schema.NullOr<Schema.decodeTo<Schema.String, Schema.String, never, never>>;
@@ -722,6 +725,11 @@ export declare const ServerConfig: Schema.Struct<{
722
725
  readonly apiEndpoint: Schema.withDecodingDefault<Schema.decodeTo<Schema.String, Schema.String, never, never>, never>;
723
726
  readonly customModels: Schema.withDecodingDefault<Schema.$Array<Schema.String>, never>;
724
727
  }>, never>;
728
+ readonly grok: Schema.withDecodingDefault<Schema.Struct<{
729
+ readonly enabled: Schema.withDecodingDefault<Schema.Boolean, never>;
730
+ readonly binaryPath: Schema.withDecodingDefault<Schema.decodeTo<Schema.String, Schema.decodeTo<Schema.String, Schema.String, never, never>, never, never>, never>;
731
+ readonly customModels: Schema.withDecodingDefault<Schema.$Array<Schema.String>, never>;
732
+ }>, never>;
725
733
  readonly opencode: Schema.withDecodingDefault<Schema.Struct<{
726
734
  readonly enabled: Schema.withDecodingDefault<Schema.Boolean, never>;
727
735
  readonly binaryPath: Schema.withDecodingDefault<Schema.decodeTo<Schema.String, Schema.decodeTo<Schema.String, Schema.String, never, never>, never, never>, never>;
@@ -860,6 +868,7 @@ export declare const ServerConfigUpdatedPayload: Schema.Struct<{
860
868
  readonly groupKey: Schema.decodeTo<Schema.String, Schema.String, never, never>;
861
869
  }>>;
862
870
  readonly showInteractionModeToggle: Schema.optional<Schema.Boolean>;
871
+ readonly requiresNewThreadForModelChange: Schema.optional<Schema.Boolean>;
863
872
  readonly enabled: Schema.Boolean;
864
873
  readonly installed: Schema.Boolean;
865
874
  readonly version: Schema.NullOr<Schema.decodeTo<Schema.String, Schema.String, never, never>>;
@@ -978,6 +987,11 @@ export declare const ServerConfigUpdatedPayload: Schema.Struct<{
978
987
  readonly apiEndpoint: Schema.withDecodingDefault<Schema.decodeTo<Schema.String, Schema.String, never, never>, never>;
979
988
  readonly customModels: Schema.withDecodingDefault<Schema.$Array<Schema.String>, never>;
980
989
  }>, never>;
990
+ readonly grok: Schema.withDecodingDefault<Schema.Struct<{
991
+ readonly enabled: Schema.withDecodingDefault<Schema.Boolean, never>;
992
+ readonly binaryPath: Schema.withDecodingDefault<Schema.decodeTo<Schema.String, Schema.decodeTo<Schema.String, Schema.String, never, never>, never, never>, never>;
993
+ readonly customModels: Schema.withDecodingDefault<Schema.$Array<Schema.String>, never>;
994
+ }>, never>;
981
995
  readonly opencode: Schema.withDecodingDefault<Schema.Struct<{
982
996
  readonly enabled: Schema.withDecodingDefault<Schema.Boolean, never>;
983
997
  readonly binaryPath: Schema.withDecodingDefault<Schema.decodeTo<Schema.String, Schema.decodeTo<Schema.String, Schema.String, never, never>, never, never>, never>;
@@ -1054,6 +1068,7 @@ export declare const ServerConfigProviderStatusesPayload: Schema.Struct<{
1054
1068
  readonly groupKey: Schema.decodeTo<Schema.String, Schema.String, never, never>;
1055
1069
  }>>;
1056
1070
  readonly showInteractionModeToggle: Schema.optional<Schema.Boolean>;
1071
+ readonly requiresNewThreadForModelChange: Schema.optional<Schema.Boolean>;
1057
1072
  readonly enabled: Schema.Boolean;
1058
1073
  readonly installed: Schema.Boolean;
1059
1074
  readonly version: Schema.NullOr<Schema.decodeTo<Schema.String, Schema.String, never, never>>;
@@ -1175,6 +1190,11 @@ export declare const ServerConfigSettingsUpdatedPayload: Schema.Struct<{
1175
1190
  readonly apiEndpoint: Schema.withDecodingDefault<Schema.decodeTo<Schema.String, Schema.String, never, never>, never>;
1176
1191
  readonly customModels: Schema.withDecodingDefault<Schema.$Array<Schema.String>, never>;
1177
1192
  }>, never>;
1193
+ readonly grok: Schema.withDecodingDefault<Schema.Struct<{
1194
+ readonly enabled: Schema.withDecodingDefault<Schema.Boolean, never>;
1195
+ readonly binaryPath: Schema.withDecodingDefault<Schema.decodeTo<Schema.String, Schema.decodeTo<Schema.String, Schema.String, never, never>, never, never>, never>;
1196
+ readonly customModels: Schema.withDecodingDefault<Schema.$Array<Schema.String>, never>;
1197
+ }>, never>;
1178
1198
  readonly opencode: Schema.withDecodingDefault<Schema.Struct<{
1179
1199
  readonly enabled: Schema.withDecodingDefault<Schema.Boolean, never>;
1180
1200
  readonly binaryPath: Schema.withDecodingDefault<Schema.decodeTo<Schema.String, Schema.decodeTo<Schema.String, Schema.String, never, never>, never, never>, never>;
@@ -1271,6 +1291,7 @@ export declare const ServerConfigStreamSnapshotEvent: Schema.Struct<{
1271
1291
  readonly groupKey: Schema.decodeTo<Schema.String, Schema.String, never, never>;
1272
1292
  }>>;
1273
1293
  readonly showInteractionModeToggle: Schema.optional<Schema.Boolean>;
1294
+ readonly requiresNewThreadForModelChange: Schema.optional<Schema.Boolean>;
1274
1295
  readonly enabled: Schema.Boolean;
1275
1296
  readonly installed: Schema.Boolean;
1276
1297
  readonly version: Schema.NullOr<Schema.decodeTo<Schema.String, Schema.String, never, never>>;
@@ -1398,6 +1419,11 @@ export declare const ServerConfigStreamSnapshotEvent: Schema.Struct<{
1398
1419
  readonly apiEndpoint: Schema.withDecodingDefault<Schema.decodeTo<Schema.String, Schema.String, never, never>, never>;
1399
1420
  readonly customModels: Schema.withDecodingDefault<Schema.$Array<Schema.String>, never>;
1400
1421
  }>, never>;
1422
+ readonly grok: Schema.withDecodingDefault<Schema.Struct<{
1423
+ readonly enabled: Schema.withDecodingDefault<Schema.Boolean, never>;
1424
+ readonly binaryPath: Schema.withDecodingDefault<Schema.decodeTo<Schema.String, Schema.decodeTo<Schema.String, Schema.String, never, never>, never, never>, never>;
1425
+ readonly customModels: Schema.withDecodingDefault<Schema.$Array<Schema.String>, never>;
1426
+ }>, never>;
1401
1427
  readonly opencode: Schema.withDecodingDefault<Schema.Struct<{
1402
1428
  readonly enabled: Schema.withDecodingDefault<Schema.Boolean, never>;
1403
1429
  readonly binaryPath: Schema.withDecodingDefault<Schema.decodeTo<Schema.String, Schema.decodeTo<Schema.String, Schema.String, never, never>, never, never>, never>;
@@ -1482,6 +1508,7 @@ export declare const ServerConfigStreamProviderStatusesEvent: Schema.Struct<{
1482
1508
  readonly groupKey: Schema.decodeTo<Schema.String, Schema.String, never, never>;
1483
1509
  }>>;
1484
1510
  readonly showInteractionModeToggle: Schema.optional<Schema.Boolean>;
1511
+ readonly requiresNewThreadForModelChange: Schema.optional<Schema.Boolean>;
1485
1512
  readonly enabled: Schema.Boolean;
1486
1513
  readonly installed: Schema.Boolean;
1487
1514
  readonly version: Schema.NullOr<Schema.decodeTo<Schema.String, Schema.String, never, never>>;
@@ -1607,6 +1634,11 @@ export declare const ServerConfigStreamSettingsUpdatedEvent: Schema.Struct<{
1607
1634
  readonly apiEndpoint: Schema.withDecodingDefault<Schema.decodeTo<Schema.String, Schema.String, never, never>, never>;
1608
1635
  readonly customModels: Schema.withDecodingDefault<Schema.$Array<Schema.String>, never>;
1609
1636
  }>, never>;
1637
+ readonly grok: Schema.withDecodingDefault<Schema.Struct<{
1638
+ readonly enabled: Schema.withDecodingDefault<Schema.Boolean, never>;
1639
+ readonly binaryPath: Schema.withDecodingDefault<Schema.decodeTo<Schema.String, Schema.decodeTo<Schema.String, Schema.String, never, never>, never, never>, never>;
1640
+ readonly customModels: Schema.withDecodingDefault<Schema.$Array<Schema.String>, never>;
1641
+ }>, never>;
1610
1642
  readonly opencode: Schema.withDecodingDefault<Schema.Struct<{
1611
1643
  readonly enabled: Schema.withDecodingDefault<Schema.Boolean, never>;
1612
1644
  readonly binaryPath: Schema.withDecodingDefault<Schema.decodeTo<Schema.String, Schema.decodeTo<Schema.String, Schema.String, never, never>, never, never>, never>;
@@ -1704,6 +1736,7 @@ export declare const ServerConfigStreamEvent: Schema.Union<readonly [Schema.Stru
1704
1736
  readonly groupKey: Schema.decodeTo<Schema.String, Schema.String, never, never>;
1705
1737
  }>>;
1706
1738
  readonly showInteractionModeToggle: Schema.optional<Schema.Boolean>;
1739
+ readonly requiresNewThreadForModelChange: Schema.optional<Schema.Boolean>;
1707
1740
  readonly enabled: Schema.Boolean;
1708
1741
  readonly installed: Schema.Boolean;
1709
1742
  readonly version: Schema.NullOr<Schema.decodeTo<Schema.String, Schema.String, never, never>>;
@@ -1831,6 +1864,11 @@ export declare const ServerConfigStreamEvent: Schema.Union<readonly [Schema.Stru
1831
1864
  readonly apiEndpoint: Schema.withDecodingDefault<Schema.decodeTo<Schema.String, Schema.String, never, never>, never>;
1832
1865
  readonly customModels: Schema.withDecodingDefault<Schema.$Array<Schema.String>, never>;
1833
1866
  }>, never>;
1867
+ readonly grok: Schema.withDecodingDefault<Schema.Struct<{
1868
+ readonly enabled: Schema.withDecodingDefault<Schema.Boolean, never>;
1869
+ readonly binaryPath: Schema.withDecodingDefault<Schema.decodeTo<Schema.String, Schema.decodeTo<Schema.String, Schema.String, never, never>, never, never>, never>;
1870
+ readonly customModels: Schema.withDecodingDefault<Schema.$Array<Schema.String>, never>;
1871
+ }>, never>;
1834
1872
  readonly opencode: Schema.withDecodingDefault<Schema.Struct<{
1835
1873
  readonly enabled: Schema.withDecodingDefault<Schema.Boolean, never>;
1836
1874
  readonly binaryPath: Schema.withDecodingDefault<Schema.decodeTo<Schema.String, Schema.decodeTo<Schema.String, Schema.String, never, never>, never, never>, never>;
@@ -1911,6 +1949,7 @@ export declare const ServerConfigStreamEvent: Schema.Union<readonly [Schema.Stru
1911
1949
  readonly groupKey: Schema.decodeTo<Schema.String, Schema.String, never, never>;
1912
1950
  }>>;
1913
1951
  readonly showInteractionModeToggle: Schema.optional<Schema.Boolean>;
1952
+ readonly requiresNewThreadForModelChange: Schema.optional<Schema.Boolean>;
1914
1953
  readonly enabled: Schema.Boolean;
1915
1954
  readonly installed: Schema.Boolean;
1916
1955
  readonly version: Schema.NullOr<Schema.decodeTo<Schema.String, Schema.String, never, never>>;
@@ -2034,6 +2073,11 @@ export declare const ServerConfigStreamEvent: Schema.Union<readonly [Schema.Stru
2034
2073
  readonly apiEndpoint: Schema.withDecodingDefault<Schema.decodeTo<Schema.String, Schema.String, never, never>, never>;
2035
2074
  readonly customModels: Schema.withDecodingDefault<Schema.$Array<Schema.String>, never>;
2036
2075
  }>, never>;
2076
+ readonly grok: Schema.withDecodingDefault<Schema.Struct<{
2077
+ readonly enabled: Schema.withDecodingDefault<Schema.Boolean, never>;
2078
+ readonly binaryPath: Schema.withDecodingDefault<Schema.decodeTo<Schema.String, Schema.decodeTo<Schema.String, Schema.String, never, never>, never, never>, never>;
2079
+ readonly customModels: Schema.withDecodingDefault<Schema.$Array<Schema.String>, never>;
2080
+ }>, never>;
2037
2081
  readonly opencode: Schema.withDecodingDefault<Schema.Struct<{
2038
2082
  readonly enabled: Schema.withDecodingDefault<Schema.Boolean, never>;
2039
2083
  readonly binaryPath: Schema.withDecodingDefault<Schema.decodeTo<Schema.String, Schema.decodeTo<Schema.String, Schema.String, never, never>, never, never>, never>;
@@ -2197,6 +2241,7 @@ export declare const ServerProviderUpdatedPayload: Schema.Struct<{
2197
2241
  readonly groupKey: Schema.decodeTo<Schema.String, Schema.String, never, never>;
2198
2242
  }>>;
2199
2243
  readonly showInteractionModeToggle: Schema.optional<Schema.Boolean>;
2244
+ readonly requiresNewThreadForModelChange: Schema.optional<Schema.Boolean>;
2200
2245
  readonly enabled: Schema.Boolean;
2201
2246
  readonly installed: Schema.Boolean;
2202
2247
  readonly version: Schema.NullOr<Schema.decodeTo<Schema.String, Schema.String, never, never>>;
@@ -3,6 +3,9 @@ import * as Schema from "effect/Schema";
3
3
  export declare const TimestampFormat: Schema.Literals<readonly ["locale", "12-hour", "24-hour"]>;
4
4
  export type TimestampFormat = typeof TimestampFormat.Type;
5
5
  export declare const DEFAULT_TIMESTAMP_FORMAT: TimestampFormat;
6
+ export declare const ContextMenuStyle: Schema.Literals<readonly ["default", "native", "custom"]>;
7
+ export type ContextMenuStyle = typeof ContextMenuStyle.Type;
8
+ export declare const DEFAULT_CONTEXT_MENU_STYLE: ContextMenuStyle;
6
9
  export declare const SidebarProjectSortOrder: Schema.Literals<readonly ["updated_at", "created_at", "manual"]>;
7
10
  export type SidebarProjectSortOrder = typeof SidebarProjectSortOrder.Type;
8
11
  export declare const DEFAULT_SIDEBAR_PROJECT_SORT_ORDER: SidebarProjectSortOrder;
@@ -21,6 +24,7 @@ export declare const ClientSettingsSchema: Schema.Struct<{
21
24
  readonly autoOpenPlanSidebar: Schema.withDecodingDefault<Schema.Boolean, never>;
22
25
  readonly confirmThreadArchive: Schema.withDecodingDefault<Schema.Boolean, never>;
23
26
  readonly confirmThreadDelete: Schema.withDecodingDefault<Schema.Boolean, never>;
27
+ readonly contextMenuStyle: Schema.withDecodingDefault<Schema.Literals<readonly ["default", "native", "custom"]>, never>;
24
28
  readonly dismissedProviderUpdateNotificationKeys: Schema.withDecodingDefault<Schema.$Array<Schema.decodeTo<Schema.String, Schema.String, never, never>>, never>;
25
29
  readonly diffIgnoreWhitespace: Schema.withDecodingDefault<Schema.Boolean, never>;
26
30
  readonly diffWordWrap: Schema.withDecodingDefault<Schema.Boolean, never>;
@@ -88,6 +92,12 @@ export declare const CursorSettings: Schema.Struct<{
88
92
  readonly customModels: Schema.withDecodingDefault<Schema.$Array<Schema.String>, never>;
89
93
  }>;
90
94
  export type CursorSettings = typeof CursorSettings.Type;
95
+ export declare const GrokSettings: Schema.Struct<{
96
+ readonly enabled: Schema.withDecodingDefault<Schema.Boolean, never>;
97
+ readonly binaryPath: Schema.withDecodingDefault<Schema.decodeTo<Schema.String, Schema.decodeTo<Schema.String, Schema.String, never, never>, never, never>, never>;
98
+ readonly customModels: Schema.withDecodingDefault<Schema.$Array<Schema.String>, never>;
99
+ }>;
100
+ export type GrokSettings = typeof GrokSettings.Type;
91
101
  export declare const OpenCodeSettings: Schema.Struct<{
92
102
  readonly enabled: Schema.withDecodingDefault<Schema.Boolean, never>;
93
103
  readonly binaryPath: Schema.withDecodingDefault<Schema.decodeTo<Schema.String, Schema.decodeTo<Schema.String, Schema.String, never, never>, never, never>, never>;
@@ -144,6 +154,11 @@ export declare const ServerSettings: Schema.Struct<{
144
154
  readonly apiEndpoint: Schema.withDecodingDefault<Schema.decodeTo<Schema.String, Schema.String, never, never>, never>;
145
155
  readonly customModels: Schema.withDecodingDefault<Schema.$Array<Schema.String>, never>;
146
156
  }>, never>;
157
+ readonly grok: Schema.withDecodingDefault<Schema.Struct<{
158
+ readonly enabled: Schema.withDecodingDefault<Schema.Boolean, never>;
159
+ readonly binaryPath: Schema.withDecodingDefault<Schema.decodeTo<Schema.String, Schema.decodeTo<Schema.String, Schema.String, never, never>, never, never>, never>;
160
+ readonly customModels: Schema.withDecodingDefault<Schema.$Array<Schema.String>, never>;
161
+ }>, never>;
147
162
  readonly opencode: Schema.withDecodingDefault<Schema.Struct<{
148
163
  readonly enabled: Schema.withDecodingDefault<Schema.Boolean, never>;
149
164
  readonly binaryPath: Schema.withDecodingDefault<Schema.decodeTo<Schema.String, Schema.decodeTo<Schema.String, Schema.String, never, never>, never, never>, never>;
@@ -223,6 +238,11 @@ export declare const ServerSettingsPatch: Schema.Struct<{
223
238
  readonly apiEndpoint: Schema.optionalKey<Schema.decodeTo<Schema.String, Schema.String, never, never>>;
224
239
  readonly customModels: Schema.optionalKey<Schema.$Array<Schema.String>>;
225
240
  }>>;
241
+ readonly grok: Schema.optionalKey<Schema.Struct<{
242
+ readonly enabled: Schema.optionalKey<Schema.Boolean>;
243
+ readonly binaryPath: Schema.optionalKey<Schema.decodeTo<Schema.String, Schema.String, never, never>>;
244
+ readonly customModels: Schema.optionalKey<Schema.$Array<Schema.String>>;
245
+ }>>;
226
246
  readonly opencode: Schema.optionalKey<Schema.Struct<{
227
247
  readonly enabled: Schema.optionalKey<Schema.Boolean>;
228
248
  readonly binaryPath: Schema.optionalKey<Schema.decodeTo<Schema.String, Schema.String, never, never>>;
@@ -250,6 +270,7 @@ export declare const ClientSettingsPatch: Schema.Struct<{
250
270
  readonly autoOpenPlanSidebar: Schema.optionalKey<Schema.Boolean>;
251
271
  readonly confirmThreadArchive: Schema.optionalKey<Schema.Boolean>;
252
272
  readonly confirmThreadDelete: Schema.optionalKey<Schema.Boolean>;
273
+ readonly contextMenuStyle: Schema.optionalKey<Schema.Literals<readonly ["default", "native", "custom"]>>;
253
274
  readonly diffIgnoreWhitespace: Schema.optionalKey<Schema.Boolean>;
254
275
  readonly diffWordWrap: Schema.optionalKey<Schema.Boolean>;
255
276
  readonly favorites: Schema.optionalKey<Schema.$Array<Schema.Struct<{
@@ -21,10 +21,11 @@ export declare const TerminalOpenInput: Schema.Struct<{
21
21
  readonly cols: Schema.optional<Schema.Int>;
22
22
  readonly rows: Schema.optional<Schema.Int>;
23
23
  readonly env: Schema.optional<Schema.$Record<Schema.String, Schema.String>>;
24
+ readonly projectId: Schema.optional<Schema.brand<Schema.decodeTo<Schema.String, Schema.String, never, never>, "ProjectId">>;
24
25
  readonly terminalId: Schema.decodeTo<Schema.String, Schema.String, never, never>;
25
26
  readonly threadId: Schema.decodeTo<Schema.String, Schema.String, never, never>;
26
27
  }>;
27
- export type TerminalOpenInput = Schema.Codec.Encoded<typeof TerminalOpenInput>;
28
+ export type TerminalOpenInput = typeof TerminalOpenInput.Type;
28
29
  export declare const TerminalAttachInput: Schema.Struct<{
29
30
  readonly cwd: Schema.optional<Schema.decodeTo<Schema.String, Schema.String, never, never>>;
30
31
  readonly worktreePath: Schema.optional<Schema.NullOr<Schema.decodeTo<Schema.String, Schema.String, never, never>>>;
@@ -32,10 +33,11 @@ export declare const TerminalAttachInput: Schema.Struct<{
32
33
  readonly rows: Schema.optional<Schema.Int>;
33
34
  readonly env: Schema.optional<Schema.$Record<Schema.String, Schema.String>>;
34
35
  readonly restartIfNotRunning: Schema.optional<Schema.Boolean>;
36
+ readonly projectId: Schema.optional<Schema.brand<Schema.decodeTo<Schema.String, Schema.String, never, never>, "ProjectId">>;
35
37
  readonly terminalId: Schema.decodeTo<Schema.String, Schema.String, never, never>;
36
38
  readonly threadId: Schema.decodeTo<Schema.String, Schema.String, never, never>;
37
39
  }>;
38
- export type TerminalAttachInput = Schema.Codec.Encoded<typeof TerminalAttachInput>;
40
+ export type TerminalAttachInput = typeof TerminalAttachInput.Type;
39
41
  export declare const TerminalWriteInput: Schema.Struct<{
40
42
  readonly data: Schema.String;
41
43
  readonly terminalId: Schema.decodeTo<Schema.String, Schema.String, never, never>;
@@ -60,10 +62,11 @@ export declare const TerminalRestartInput: Schema.Struct<{
60
62
  readonly cols: Schema.Int;
61
63
  readonly rows: Schema.Int;
62
64
  readonly env: Schema.optional<Schema.$Record<Schema.String, Schema.String>>;
65
+ readonly projectId: Schema.optional<Schema.brand<Schema.decodeTo<Schema.String, Schema.String, never, never>, "ProjectId">>;
63
66
  readonly terminalId: Schema.decodeTo<Schema.String, Schema.String, never, never>;
64
67
  readonly threadId: Schema.decodeTo<Schema.String, Schema.String, never, never>;
65
68
  }>;
66
- export type TerminalRestartInput = Schema.Codec.Encoded<typeof TerminalRestartInput>;
69
+ export type TerminalRestartInput = typeof TerminalRestartInput.Type;
67
70
  export declare const TerminalCloseInput: Schema.Struct<{
68
71
  readonly terminalId: Schema.optional<Schema.decodeTo<Schema.String, Schema.String, never, never>>;
69
72
  readonly deleteHistory: Schema.optional<Schema.Boolean>;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "t3code-cli",
3
- "version": "0.7.0",
3
+ "version": "0.8.0",
4
4
  "description": "CLI for t3code",
5
5
  "keywords": [
6
6
  "claude",
@@ -98,7 +98,7 @@
98
98
  "@types/node": "^25.9.1",
99
99
  "typescript": "^6.0.3",
100
100
  "vite-plus": "^0.1.24",
101
- "@t3tools/contracts": "0.0.24"
101
+ "@t3tools/contracts": "0.0.27"
102
102
  },
103
103
  "engines": {
104
104
  "node": ">=24.0.0"
@@ -30,6 +30,12 @@ export type SendThreadInput = {
30
30
  readonly options?: NonNullable<ModelSelection["options"]>;
31
31
  };
32
32
 
33
+ export type CallbackThreadInput = {
34
+ readonly fromThreadId: string;
35
+ readonly targetThreadId: string;
36
+ readonly prompt: string;
37
+ };
38
+
33
39
  export type StartThreadPolicy = {
34
40
  readonly until: "dispatch" | "visible" | "complete";
35
41
  };
@@ -93,5 +99,12 @@ export class T3Application extends Context.Service<
93
99
  readonly waitForThread: (
94
100
  threadId: string,
95
101
  ) => Effect.Effect<OrchestrationThread, ApplicationError>;
102
+ readonly callbackThread: (input: CallbackThreadInput) => Effect.Effect<
103
+ {
104
+ readonly dispatch: DispatchResult;
105
+ readonly targetThreadId: string;
106
+ },
107
+ ApplicationError
108
+ >;
96
109
  }
97
110
  >()("t3cli/T3Application") {}
@@ -7,7 +7,7 @@ import { T3Orchestration } from "../orchestration/service.ts";
7
7
  import { ProjectLookupError, ThreadSessionError } from "../domain/error.ts";
8
8
  import { resolveProjectScope } from "../domain/helpers.ts";
9
9
  import { type StartThreadInput } from "./service.ts";
10
- import type { SendThreadInput } from "./service.ts";
10
+ import type { SendThreadInput, CallbackThreadInput } from "./service.ts";
11
11
  import { mergeModelOptions } from "./model-selection.ts";
12
12
  import {
13
13
  makeThreadArchiveCommand,
@@ -171,6 +171,19 @@ export const makeThreadApplication = Effect.fn("makeThreadApplication")(function
171
171
  yield* failIfThreadError(thread);
172
172
  return thread;
173
173
  });
174
+ const callbackThread = Effect.fn("T3ApplicationLive.callbackThread")(function* (
175
+ input: CallbackThreadInput,
176
+ ) {
177
+ yield* waitForThreadUntilComplete({
178
+ orchestration,
179
+ threadId: input.fromThreadId,
180
+ });
181
+ const result = yield* sendThread(
182
+ { threadId: input.targetThreadId, message: input.prompt },
183
+ { until: "dispatch" },
184
+ );
185
+ return { dispatch: result.dispatch, targetThreadId: input.targetThreadId };
186
+ });
174
187
 
175
188
  return {
176
189
  archiveThread,
@@ -180,6 +193,7 @@ export const makeThreadApplication = Effect.fn("makeThreadApplication")(function
180
193
  startThread,
181
194
  watchThread,
182
195
  waitForThread,
196
+ callbackThread,
183
197
  };
184
198
  });
185
199
 
package/src/cli/thread.ts CHANGED
@@ -1,6 +1,7 @@
1
1
  import { Command } from "effect/unstable/cli";
2
2
 
3
3
  import { archiveThreadCommand } from "./threads/archive.ts";
4
+ import { callbackThreadCommand } from "./threads/callback.ts";
4
5
  import { listThreadsCommand } from "./threads/list.ts";
5
6
  import { getThreadMessagesCommand } from "./threads/messages.ts";
6
7
  import { sendThreadCommand } from "./threads/send.ts";
@@ -17,6 +18,7 @@ export function createThreadCommand() {
17
18
  archiveThreadCommand,
18
19
  getThreadMessagesCommand,
19
20
  waitForThreadCommand,
21
+ callbackThreadCommand,
20
22
  ]),
21
23
  );
22
24
  }
@@ -0,0 +1,92 @@
1
+ import * as Effect from "effect/Effect";
2
+ import * as Option from "effect/Option";
3
+ import * as ChildProcess from "effect/unstable/process/ChildProcess";
4
+ import { ChildProcessSpawner } from "effect/unstable/process/ChildProcessSpawner";
5
+ import { Command, Flag } from "effect/unstable/cli";
6
+
7
+ import { threadFlag } from "../flags.ts";
8
+ import { MissingThreadError } from "../error.ts";
9
+ import { resolveThreadId } from "../../scope/index.ts";
10
+ import { Environment } from "../../environment/service.ts";
11
+ import { T3Application } from "../../application/service.ts";
12
+ import { T3Output } from "../output/service.ts";
13
+ import { CliPath } from "../../cli-path/service.ts";
14
+
15
+ export const callbackThreadCommand = Command.make(
16
+ "callback",
17
+ {
18
+ from: Flag.string("from").pipe(Flag.withDescription("Thread ID to watch for completion")),
19
+ thread: threadFlag,
20
+ prompt: Flag.string("prompt").pipe(Flag.withDescription("Message to send to target thread")),
21
+ background: Flag.boolean("background").pipe(
22
+ Flag.withDescription("Fork and detach as background process"),
23
+ Flag.optional,
24
+ ),
25
+ },
26
+ ({ from, thread, prompt, background }) =>
27
+ Effect.gen(function* () {
28
+ const application = yield* T3Application;
29
+ const environment = yield* Environment;
30
+ const output = yield* T3Output;
31
+ const cliPath = yield* CliPath;
32
+ const spawner = yield* ChildProcessSpawner;
33
+
34
+ const fromThreadId = from;
35
+
36
+ const targetThreadId = resolveThreadId({
37
+ value: Option.getOrUndefined(thread),
38
+ env: environment.env,
39
+ });
40
+ if (targetThreadId === undefined) {
41
+ return yield* Effect.fail(
42
+ new MissingThreadError({
43
+ message: "target thread id is required: pass --thread or set T3CODE_THREAD_ID",
44
+ }),
45
+ );
46
+ }
47
+
48
+ const isBackground = Option.getOrElse(background, () => false);
49
+ if (isBackground) {
50
+ const args = [
51
+ cliPath.path,
52
+ "thread",
53
+ "callback",
54
+ "--from",
55
+ fromThreadId,
56
+ "--thread",
57
+ targetThreadId,
58
+ "--prompt",
59
+ prompt,
60
+ ];
61
+
62
+ const proc = ChildProcess.make(process.execPath, args, {
63
+ detached: true,
64
+ stdin: "ignore",
65
+ stdout: "ignore",
66
+ stderr: "ignore",
67
+ });
68
+
69
+ const handle = yield* spawner.spawn(proc);
70
+ const reref = yield* handle.unref;
71
+ yield* reref.pipe(Effect.ignore);
72
+
73
+ yield* output.printInfo(
74
+ `background callback scheduled: ${fromThreadId} -> ${targetThreadId} (pid: ${handle.pid})`,
75
+ );
76
+ return undefined;
77
+ }
78
+
79
+ yield* output.printInfo(`watching thread ${fromThreadId} for completion...`);
80
+
81
+ const result = yield* application.callbackThread({
82
+ fromThreadId,
83
+ targetThreadId,
84
+ prompt,
85
+ });
86
+
87
+ yield* output.printInfo(
88
+ `callback sent to ${result.targetThreadId} (dispatch: ${result.dispatch.sequence})`,
89
+ );
90
+ return undefined;
91
+ }),
92
+ ).pipe(Command.withDescription("watch a thread and send a message when it completes"));
@@ -0,0 +1,10 @@
1
+ import * as Effect from "effect/Effect";
2
+ import * as Layer from "effect/Layer";
3
+
4
+ import { CliPath } from "./service.ts";
5
+
6
+ const makeCliPath = Effect.sync(() => ({
7
+ path: process.argv[1] ?? "dist/bin.js",
8
+ }));
9
+
10
+ export const NodeCliPathLayer = Layer.effect(CliPath, makeCliPath);
@@ -0,0 +1,7 @@
1
+ import * as Context from "effect/Context";
2
+
3
+ export type CliPathShape = {
4
+ readonly path: string;
5
+ };
6
+
7
+ export class CliPath extends Context.Service<CliPath, CliPathShape>()("t3cli/CliPath") {}
@@ -17,6 +17,7 @@ import { T3CodeConnectionProvider, makeT3CodeConnectionProvider } from "../conne
17
17
  import { T3OrchestrationLive } from "../orchestration/layer.ts";
18
18
  import { T3RpcLive } from "../rpc/layer.ts";
19
19
  import { NodeSqlClientFactoryLive } from "../sql/node-sqlite-client.ts";
20
+ import { NodeCliPathLayer } from "../cli-path/layer.ts";
20
21
 
21
22
  export const T3AuthTransportLayer = T3AuthTransportLive.pipe(
22
23
  Layer.provide(NodeHttpClient.layerUndici),
@@ -76,4 +77,5 @@ export const AppLayer = Layer.mergeAll(
76
77
  T3RpcLayer,
77
78
  T3OrchestrationLayer,
78
79
  T3ApplicationLayer,
80
+ NodeCliPathLayer,
79
81
  );