twinny 0.0.0-dev.260525150705

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 (191) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +264 -0
  3. package/README.zh-CN.md +252 -0
  4. package/configs/banner.png +0 -0
  5. package/configs/logo.png +0 -0
  6. package/dist/app/caffeinate.d.ts +28 -0
  7. package/dist/app/caffeinate.js +96 -0
  8. package/dist/app/caffeinate.js.map +1 -0
  9. package/dist/app/daemon.d.ts +1 -0
  10. package/dist/app/daemon.js +44 -0
  11. package/dist/app/daemon.js.map +1 -0
  12. package/dist/app/lark-assets.d.ts +25 -0
  13. package/dist/app/lark-assets.js +108 -0
  14. package/dist/app/lark-assets.js.map +1 -0
  15. package/dist/app/startup-probe.d.ts +17 -0
  16. package/dist/app/startup-probe.js +90 -0
  17. package/dist/app/startup-probe.js.map +1 -0
  18. package/dist/app/wiring.d.ts +122 -0
  19. package/dist/app/wiring.js +694 -0
  20. package/dist/app/wiring.js.map +1 -0
  21. package/dist/cli/commands.d.ts +1 -0
  22. package/dist/cli/commands.js +47 -0
  23. package/dist/cli/commands.js.map +1 -0
  24. package/dist/cli/install-wizard.d.ts +41 -0
  25. package/dist/cli/install-wizard.js +629 -0
  26. package/dist/cli/install-wizard.js.map +1 -0
  27. package/dist/codex/appserver.d.ts +109 -0
  28. package/dist/codex/appserver.js +308 -0
  29. package/dist/codex/appserver.js.map +1 -0
  30. package/dist/codex/goal.d.ts +64 -0
  31. package/dist/codex/goal.js +433 -0
  32. package/dist/codex/goal.js.map +1 -0
  33. package/dist/codex/index.d.ts +6 -0
  34. package/dist/codex/index.js +7 -0
  35. package/dist/codex/index.js.map +1 -0
  36. package/dist/codex/protocol.d.ts +95 -0
  37. package/dist/codex/protocol.js +205 -0
  38. package/dist/codex/protocol.js.map +1 -0
  39. package/dist/codex/thread-name.d.ts +3 -0
  40. package/dist/codex/thread-name.js +27 -0
  41. package/dist/codex/thread-name.js.map +1 -0
  42. package/dist/codex/thread.d.ts +76 -0
  43. package/dist/codex/thread.js +80 -0
  44. package/dist/codex/thread.js.map +1 -0
  45. package/dist/codex/turn.d.ts +166 -0
  46. package/dist/codex/turn.js +746 -0
  47. package/dist/codex/turn.js.map +1 -0
  48. package/dist/config/bootstrap.d.ts +14 -0
  49. package/dist/config/bootstrap.js +56 -0
  50. package/dist/config/bootstrap.js.map +1 -0
  51. package/dist/config/index.d.ts +4 -0
  52. package/dist/config/index.js +5 -0
  53. package/dist/config/index.js.map +1 -0
  54. package/dist/config/loader.d.ts +49 -0
  55. package/dist/config/loader.js +467 -0
  56. package/dist/config/loader.js.map +1 -0
  57. package/dist/config/paths.d.ts +11 -0
  58. package/dist/config/paths.js +43 -0
  59. package/dist/config/paths.js.map +1 -0
  60. package/dist/config/secrets.d.ts +33 -0
  61. package/dist/config/secrets.js +85 -0
  62. package/dist/config/secrets.js.map +1 -0
  63. package/dist/conversation/manager.d.ts +701 -0
  64. package/dist/conversation/manager.js +7673 -0
  65. package/dist/conversation/manager.js.map +1 -0
  66. package/dist/conversation/queue.d.ts +8 -0
  67. package/dist/conversation/queue.js +28 -0
  68. package/dist/conversation/queue.js.map +1 -0
  69. package/dist/conversation/routing.d.ts +11 -0
  70. package/dist/conversation/routing.js +55 -0
  71. package/dist/conversation/routing.js.map +1 -0
  72. package/dist/errors.d.ts +6 -0
  73. package/dist/errors.js +17 -0
  74. package/dist/errors.js.map +1 -0
  75. package/dist/index.d.ts +3 -0
  76. package/dist/index.js +4 -0
  77. package/dist/index.js.map +1 -0
  78. package/dist/lark/auth.d.ts +41 -0
  79. package/dist/lark/auth.js +132 -0
  80. package/dist/lark/auth.js.map +1 -0
  81. package/dist/lark/browser-auth.d.ts +68 -0
  82. package/dist/lark/browser-auth.js +258 -0
  83. package/dist/lark/browser-auth.js.map +1 -0
  84. package/dist/lark/cards.d.ts +140 -0
  85. package/dist/lark/cards.js +1150 -0
  86. package/dist/lark/cards.js.map +1 -0
  87. package/dist/lark/contact.d.ts +41 -0
  88. package/dist/lark/contact.js +122 -0
  89. package/dist/lark/contact.js.map +1 -0
  90. package/dist/lark/events.d.ts +65 -0
  91. package/dist/lark/events.js +218 -0
  92. package/dist/lark/events.js.map +1 -0
  93. package/dist/lark/files.d.ts +36 -0
  94. package/dist/lark/files.js +191 -0
  95. package/dist/lark/files.js.map +1 -0
  96. package/dist/lark/filters.d.ts +73 -0
  97. package/dist/lark/filters.js +678 -0
  98. package/dist/lark/filters.js.map +1 -0
  99. package/dist/lark/index.d.ts +10 -0
  100. package/dist/lark/index.js +11 -0
  101. package/dist/lark/index.js.map +1 -0
  102. package/dist/lark/messages.d.ts +87 -0
  103. package/dist/lark/messages.js +428 -0
  104. package/dist/lark/messages.js.map +1 -0
  105. package/dist/lark/openapi.d.ts +58 -0
  106. package/dist/lark/openapi.js +206 -0
  107. package/dist/lark/openapi.js.map +1 -0
  108. package/dist/lark/redactor.d.ts +5 -0
  109. package/dist/lark/redactor.js +68 -0
  110. package/dist/lark/redactor.js.map +1 -0
  111. package/dist/lark/types.d.ts +49 -0
  112. package/dist/lark/types.js +18 -0
  113. package/dist/lark/types.js.map +1 -0
  114. package/dist/launchd/install.d.ts +22 -0
  115. package/dist/launchd/install.js +114 -0
  116. package/dist/launchd/install.js.map +1 -0
  117. package/dist/launchd/plist.d.ts +10 -0
  118. package/dist/launchd/plist.js +61 -0
  119. package/dist/launchd/plist.js.map +1 -0
  120. package/dist/lock/index.d.ts +20 -0
  121. package/dist/lock/index.js +74 -0
  122. package/dist/lock/index.js.map +1 -0
  123. package/dist/main.d.ts +2 -0
  124. package/dist/main.js +11 -0
  125. package/dist/main.js.map +1 -0
  126. package/dist/markdown.d.ts +12 -0
  127. package/dist/markdown.js +149 -0
  128. package/dist/markdown.js.map +1 -0
  129. package/dist/observability/health.d.ts +25 -0
  130. package/dist/observability/health.js +187 -0
  131. package/dist/observability/health.js.map +1 -0
  132. package/dist/observability/logs.d.ts +10 -0
  133. package/dist/observability/logs.js +34 -0
  134. package/dist/observability/logs.js.map +1 -0
  135. package/dist/observability/system-notifications.d.ts +25 -0
  136. package/dist/observability/system-notifications.js +33 -0
  137. package/dist/observability/system-notifications.js.map +1 -0
  138. package/dist/profiles/guest.d.ts +19 -0
  139. package/dist/profiles/guest.js +241 -0
  140. package/dist/profiles/guest.js.map +1 -0
  141. package/dist/profiles/index.d.ts +5 -0
  142. package/dist/profiles/index.js +14 -0
  143. package/dist/profiles/index.js.map +1 -0
  144. package/dist/profiles/owner.d.ts +1 -0
  145. package/dist/profiles/owner.js +6 -0
  146. package/dist/profiles/owner.js.map +1 -0
  147. package/dist/store/db.d.ts +10 -0
  148. package/dist/store/db.js +29 -0
  149. package/dist/store/db.js.map +1 -0
  150. package/dist/store/index.d.ts +3 -0
  151. package/dist/store/index.js +4 -0
  152. package/dist/store/index.js.map +1 -0
  153. package/dist/store/migrations.d.ts +13 -0
  154. package/dist/store/migrations.js +79 -0
  155. package/dist/store/migrations.js.map +1 -0
  156. package/dist/store/repositories.d.ts +227 -0
  157. package/dist/store/repositories.js +1384 -0
  158. package/dist/store/repositories.js.map +1 -0
  159. package/dist/telemetry/client.d.ts +60 -0
  160. package/dist/telemetry/client.js +204 -0
  161. package/dist/telemetry/client.js.map +1 -0
  162. package/dist/telemetry/hash.d.ts +1 -0
  163. package/dist/telemetry/hash.js +8 -0
  164. package/dist/telemetry/hash.js.map +1 -0
  165. package/dist/telemetry/index.d.ts +4 -0
  166. package/dist/telemetry/index.js +5 -0
  167. package/dist/telemetry/index.js.map +1 -0
  168. package/dist/telemetry/posthog.d.ts +27 -0
  169. package/dist/telemetry/posthog.js +45 -0
  170. package/dist/telemetry/posthog.js.map +1 -0
  171. package/dist/telemetry/reporter.d.ts +13 -0
  172. package/dist/telemetry/reporter.js +29 -0
  173. package/dist/telemetry/reporter.js.map +1 -0
  174. package/dist/types.d.ts +330 -0
  175. package/dist/types.js +9 -0
  176. package/dist/types.js.map +1 -0
  177. package/dist/version.d.ts +1 -0
  178. package/dist/version.js +1 -0
  179. package/dist/version.js.map +1 -0
  180. package/dist/version.json +3 -0
  181. package/dist/workspace/index.d.ts +2 -0
  182. package/dist/workspace/index.js +3 -0
  183. package/dist/workspace/index.js.map +1 -0
  184. package/dist/workspace/manager.d.ts +14 -0
  185. package/dist/workspace/manager.js +69 -0
  186. package/dist/workspace/manager.js.map +1 -0
  187. package/dist/workspace/slug.d.ts +8 -0
  188. package/dist/workspace/slug.js +59 -0
  189. package/dist/workspace/slug.js.map +1 -0
  190. package/migrations/0001_initial.sql +102 -0
  191. package/package.json +85 -0
@@ -0,0 +1,205 @@
1
+ import { EventEmitter } from "node:events";
2
+ import { TwinnyError, toErrorMessage } from "../errors.js";
3
+ import { TWINNY_VERSION } from "../version.js";
4
+ export class CodexProtocolClient extends EventEmitter {
5
+ readable;
6
+ writable;
7
+ pending = new Map();
8
+ requestTimeoutMs;
9
+ requestIdPrefix;
10
+ nextRequestId = 1;
11
+ readLoopDone;
12
+ closed = false;
13
+ constructor(readable, writable, options = {}) {
14
+ super();
15
+ this.readable = readable;
16
+ this.writable = writable;
17
+ this.requestTimeoutMs = options.requestTimeoutMs ?? 120_000;
18
+ this.requestIdPrefix = options.requestIdPrefix ?? "twinny";
19
+ }
20
+ start() {
21
+ if (this.readLoopDone) {
22
+ return;
23
+ }
24
+ this.readLoopDone = this.readLoop().catch((error) => {
25
+ const parsedError = error instanceof Error ? error : new TwinnyError(toErrorMessage(error), "CODEX_PROTOCOL_READ_ERROR");
26
+ this.failAllPending(parsedError);
27
+ this.emit("error", parsedError);
28
+ });
29
+ }
30
+ async waitForClose() {
31
+ await this.readLoopDone;
32
+ }
33
+ async initialize(params) {
34
+ const response = await this.request("initialize", params);
35
+ this.notify("initialized");
36
+ return response;
37
+ }
38
+ request(method, params, options = {}) {
39
+ if (this.closed) {
40
+ return Promise.reject(new TwinnyError("Codex protocol connection is closed", "CODEX_PROTOCOL_CLOSED"));
41
+ }
42
+ const id = this.allocateRequestId();
43
+ const message = params === undefined ? { id, method } : { id, method, params };
44
+ const promise = new Promise((resolve, reject) => {
45
+ const timeoutMs = options.timeoutMs ?? this.requestTimeoutMs;
46
+ const timeout = timeoutMs > 0
47
+ ? setTimeout(() => {
48
+ this.pending.delete(id);
49
+ reject(new TwinnyError(`Timed out waiting for Codex response to ${method}`, "CODEX_REQUEST_TIMEOUT"));
50
+ }, timeoutMs)
51
+ : undefined;
52
+ this.pending.set(id, { method, resolve, reject, timeout });
53
+ });
54
+ try {
55
+ this.writeJson(message);
56
+ }
57
+ catch (error) {
58
+ const pending = this.pending.get(id);
59
+ if (pending?.timeout) {
60
+ clearTimeout(pending.timeout);
61
+ }
62
+ this.pending.delete(id);
63
+ throw error;
64
+ }
65
+ return promise;
66
+ }
67
+ notify(method, params) {
68
+ const message = params === undefined ? { method } : { method, params };
69
+ this.writeJson(message);
70
+ }
71
+ respond(id, result) {
72
+ this.writeJson({ id, result });
73
+ }
74
+ respondError(id, error) {
75
+ this.writeJson({ id, error });
76
+ }
77
+ close() {
78
+ if (this.closed) {
79
+ return;
80
+ }
81
+ this.closed = true;
82
+ this.writable.end();
83
+ this.failAllPending(new TwinnyError("Codex protocol connection closed", "CODEX_PROTOCOL_CLOSED"));
84
+ }
85
+ allocateRequestId() {
86
+ return `${this.requestIdPrefix}-${this.nextRequestId++}`;
87
+ }
88
+ async readLoop() {
89
+ let buffer = "";
90
+ this.readable.setEncoding("utf8");
91
+ for await (const chunk of this.readable) {
92
+ buffer += chunk;
93
+ let newlineIndex = buffer.indexOf("\n");
94
+ while (newlineIndex !== -1) {
95
+ const line = buffer.slice(0, newlineIndex);
96
+ buffer = buffer.slice(newlineIndex + 1);
97
+ this.handleLine(line);
98
+ newlineIndex = buffer.indexOf("\n");
99
+ }
100
+ }
101
+ if (buffer.trim().length > 0) {
102
+ this.handleLine(buffer);
103
+ }
104
+ this.closed = true;
105
+ this.failAllPending(new TwinnyError("Codex protocol stream ended", "CODEX_PROTOCOL_CLOSED"));
106
+ this.emit("close");
107
+ }
108
+ handleLine(line) {
109
+ if (this.closed) {
110
+ return;
111
+ }
112
+ const trimmed = line.trim();
113
+ if (trimmed.length === 0) {
114
+ return;
115
+ }
116
+ let parsed;
117
+ try {
118
+ parsed = JSON.parse(trimmed);
119
+ }
120
+ catch (error) {
121
+ this.emit("error", new TwinnyError(`Invalid Codex protocol JSON line: ${toErrorMessage(error)}`, "CODEX_PROTOCOL_PARSE_ERROR"));
122
+ return;
123
+ }
124
+ if (!isRecord(parsed)) {
125
+ this.emit("error", new TwinnyError("Codex protocol message is not an object", "CODEX_PROTOCOL_PARSE_ERROR"));
126
+ return;
127
+ }
128
+ const message = parsed;
129
+ this.emit("message", message);
130
+ if (isResponseMessage(message)) {
131
+ this.handleResponse(message);
132
+ return;
133
+ }
134
+ if (isRequestMessage(message)) {
135
+ this.emit("serverRequest", message);
136
+ return;
137
+ }
138
+ if (isNotificationMessage(message)) {
139
+ this.emit("notification", message);
140
+ return;
141
+ }
142
+ this.emit("error", new TwinnyError("Unknown Codex protocol message shape", "CODEX_PROTOCOL_PARSE_ERROR"));
143
+ }
144
+ handleResponse(message) {
145
+ this.emit("response", message);
146
+ const pending = this.pending.get(message.id);
147
+ if (!pending) {
148
+ this.emit("error", new TwinnyError(`Received response for unknown Codex request id ${String(message.id)}`, "CODEX_UNKNOWN_RESPONSE"));
149
+ return;
150
+ }
151
+ if (pending.timeout) {
152
+ clearTimeout(pending.timeout);
153
+ }
154
+ this.pending.delete(message.id);
155
+ if (message.error) {
156
+ pending.reject(new TwinnyError(message.error.message, "CODEX_REQUEST_FAILED", message.error));
157
+ return;
158
+ }
159
+ pending.resolve(message.result);
160
+ }
161
+ writeJson(message) {
162
+ if (this.closed) {
163
+ throw new TwinnyError("Codex protocol connection is closed", "CODEX_PROTOCOL_CLOSED");
164
+ }
165
+ const line = `${JSON.stringify(message)}\n`;
166
+ if (!this.writable.write(line, "utf8")) {
167
+ this.writable.once("drain", () => undefined);
168
+ }
169
+ }
170
+ failAllPending(error) {
171
+ for (const pending of this.pending.values()) {
172
+ if (pending.timeout) {
173
+ clearTimeout(pending.timeout);
174
+ }
175
+ pending.reject(error);
176
+ }
177
+ this.pending.clear();
178
+ }
179
+ }
180
+ export function createInitializeParams(version = TWINNY_VERSION) {
181
+ return {
182
+ clientInfo: {
183
+ name: "twinny",
184
+ title: "Twinny",
185
+ version
186
+ },
187
+ capabilities: {
188
+ experimentalApi: true,
189
+ optOutNotificationMethods: null
190
+ }
191
+ };
192
+ }
193
+ export function isResponseMessage(message) {
194
+ return "id" in message && ("result" in message || "error" in message) && !("method" in message);
195
+ }
196
+ export function isRequestMessage(message) {
197
+ return "id" in message && "method" in message && typeof message.method === "string";
198
+ }
199
+ export function isNotificationMessage(message) {
200
+ return !("id" in message) && "method" in message && typeof message.method === "string";
201
+ }
202
+ function isRecord(value) {
203
+ return typeof value === "object" && value !== null && !Array.isArray(value);
204
+ }
205
+ //# sourceMappingURL=protocol.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"protocol.js","sourceRoot":"","sources":["../../src/codex/protocol.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import type { CodexThreadNameUpdate } from "../types.js";
2
+ import type { CodexNotificationMessage } from "./protocol.js";
3
+ export declare function parseCodexThreadNameUpdatedNotification(message: CodexNotificationMessage): CodexThreadNameUpdate | undefined;
@@ -0,0 +1,27 @@
1
+ export function parseCodexThreadNameUpdatedNotification(message) {
2
+ if (message.method !== "thread/name/updated" || !isRecord(message.params)) {
3
+ return undefined;
4
+ }
5
+ const threadId = firstString(message.params.threadId, message.params.thread_id);
6
+ const name = firstString(message.params.name, message.params.threadName, message.params.thread_name);
7
+ if (!threadId || !name) {
8
+ return undefined;
9
+ }
10
+ return { threadId, name };
11
+ }
12
+ function firstString(...values) {
13
+ for (const value of values) {
14
+ if (typeof value !== "string") {
15
+ continue;
16
+ }
17
+ const trimmed = value.trim();
18
+ if (trimmed) {
19
+ return trimmed;
20
+ }
21
+ }
22
+ return undefined;
23
+ }
24
+ function isRecord(value) {
25
+ return typeof value === "object" && value !== null && !Array.isArray(value);
26
+ }
27
+ //# sourceMappingURL=thread-name.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"thread-name.js","sourceRoot":"","sources":["../../src/codex/thread-name.ts"],"names":[],"mappings":"AAGA,MAAM,UAAU,uCAAuC,CACrD,OAAiC;IAEjC,IAAI,OAAO,CAAC,MAAM,KAAK,qBAAqB,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;QAC1E,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,MAAM,QAAQ,GAAG,WAAW,CAAC,OAAO,CAAC,MAAM,CAAC,QAAQ,EAAE,OAAO,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;IAChF,MAAM,IAAI,GAAG,WAAW,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,MAAM,CAAC,UAAU,EAAE,OAAO,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;IACrG,IAAI,CAAC,QAAQ,IAAI,CAAC,IAAI,EAAE,CAAC;QACvB,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;AAC5B,CAAC;AAED,SAAS,WAAW,CAAC,GAAG,MAAiB;IACvC,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;QAC3B,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;YAC9B,SAAS;QACX,CAAC;QACD,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC;QAC7B,IAAI,OAAO,EAAE,CAAC;YACZ,OAAO,OAAO,CAAC;QACjB,CAAC;IACH,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,SAAS,QAAQ,CAAC,KAAc;IAC9B,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;AAC9E,CAAC"}
@@ -0,0 +1,76 @@
1
+ import type { CodexProtocolClient } from "./protocol.js";
2
+ export type CodexApprovalPolicy = "never";
3
+ export interface ThreadRuntimeParams {
4
+ cwd: string;
5
+ approvalPolicy: CodexApprovalPolicy;
6
+ persistExtendedHistory: boolean;
7
+ }
8
+ export interface ThreadStartParams extends ThreadRuntimeParams {
9
+ dynamicTools: DynamicToolSpec[];
10
+ developerInstructions?: string;
11
+ }
12
+ export interface ThreadResumeParams extends ThreadRuntimeParams {
13
+ threadId: string;
14
+ }
15
+ export interface ThreadForkParams extends ThreadRuntimeParams {
16
+ threadId: string;
17
+ excludeTurns: true;
18
+ persistExtendedHistory: boolean;
19
+ developerInstructions?: string;
20
+ ephemeral?: boolean;
21
+ model?: string;
22
+ config?: Record<string, unknown>;
23
+ }
24
+ export interface DynamicToolSpec {
25
+ namespace?: string;
26
+ name: string;
27
+ description: string;
28
+ inputSchema: unknown;
29
+ deferLoading?: boolean;
30
+ }
31
+ export declare const SET_THREAD_NAME_TOOL_SPEC: DynamicToolSpec;
32
+ export interface CodexThread {
33
+ id: string;
34
+ [key: string]: unknown;
35
+ }
36
+ export interface ThreadStartResponse {
37
+ thread: CodexThread;
38
+ [key: string]: unknown;
39
+ }
40
+ export interface ThreadResumeResponse {
41
+ thread: CodexThread;
42
+ [key: string]: unknown;
43
+ }
44
+ export interface ThreadForkResponse {
45
+ thread: CodexThread;
46
+ [key: string]: unknown;
47
+ }
48
+ export interface ThreadRuntimeOptions {
49
+ cwd: string;
50
+ developerInstructions?: string;
51
+ }
52
+ export interface ThreadForkOptions extends ThreadRuntimeOptions {
53
+ ephemeral?: boolean;
54
+ model?: string;
55
+ effort?: string;
56
+ }
57
+ export declare function buildThreadStartParams(options: ThreadRuntimeOptions): ThreadStartParams;
58
+ export declare function buildThreadResumeParams(threadId: string, options: ThreadRuntimeOptions): ThreadResumeParams;
59
+ export declare function buildThreadForkParams(threadId: string, options: ThreadForkOptions): ThreadForkParams;
60
+ export interface ThreadSetNameParams {
61
+ threadId: string;
62
+ name: string;
63
+ }
64
+ export declare function startCodexThread(protocol: CodexProtocolClient, options: ThreadRuntimeOptions): Promise<ThreadStartResponse>;
65
+ export declare function resumeCodexThread(protocol: CodexProtocolClient, threadId: string, options: ThreadRuntimeOptions): Promise<ThreadResumeResponse>;
66
+ export declare function forkCodexThread(protocol: CodexProtocolClient, threadId: string, options: ThreadForkOptions): Promise<ThreadForkResponse>;
67
+ export interface ThreadInjectItemsParams {
68
+ threadId: string;
69
+ items: unknown[];
70
+ }
71
+ export declare function injectCodexThreadItems(protocol: CodexProtocolClient, params: ThreadInjectItemsParams): Promise<void>;
72
+ export interface ThreadUnsubscribeParams {
73
+ threadId: string;
74
+ }
75
+ export declare function unsubscribeCodexThread(protocol: CodexProtocolClient, threadId: string): Promise<void>;
76
+ export declare function setCodexThreadName(protocol: CodexProtocolClient, params: ThreadSetNameParams): Promise<void>;
@@ -0,0 +1,80 @@
1
+ export const SET_THREAD_NAME_TOOL_SPEC = {
2
+ namespace: "twinny",
3
+ name: "set_thread_name",
4
+ description: "Update the current thread name. Call this at the beginning of a conversation after understanding the work, and call it again whenever the current thread name does not match the actual work. Keep the name concise, within 15 Chinese characters or 10 words.",
5
+ inputSchema: {
6
+ type: "object",
7
+ additionalProperties: false,
8
+ required: ["name"],
9
+ properties: {
10
+ name: {
11
+ type: "string",
12
+ minLength: 1,
13
+ description: "New thread name. Keep it concise, within 15 Chinese characters or 10 words. Do not include explanations."
14
+ }
15
+ }
16
+ },
17
+ deferLoading: false
18
+ };
19
+ export function buildThreadStartParams(options) {
20
+ const params = {
21
+ cwd: options.cwd,
22
+ approvalPolicy: "never",
23
+ persistExtendedHistory: true,
24
+ dynamicTools: [SET_THREAD_NAME_TOOL_SPEC]
25
+ };
26
+ if (options.developerInstructions) {
27
+ params.developerInstructions = options.developerInstructions;
28
+ }
29
+ return params;
30
+ }
31
+ export function buildThreadResumeParams(threadId, options) {
32
+ return {
33
+ threadId,
34
+ cwd: options.cwd,
35
+ approvalPolicy: "never",
36
+ persistExtendedHistory: true
37
+ };
38
+ }
39
+ export function buildThreadForkParams(threadId, options) {
40
+ const params = {
41
+ threadId,
42
+ cwd: options.cwd,
43
+ approvalPolicy: "never",
44
+ persistExtendedHistory: true,
45
+ excludeTurns: true
46
+ };
47
+ if (options.ephemeral) {
48
+ params.ephemeral = true;
49
+ params.persistExtendedHistory = false;
50
+ }
51
+ if (options.developerInstructions) {
52
+ params.developerInstructions = options.developerInstructions;
53
+ }
54
+ if (options.model) {
55
+ params.model = options.model;
56
+ }
57
+ if (options.effort) {
58
+ params.config = { model_reasoning_effort: options.effort };
59
+ }
60
+ return params;
61
+ }
62
+ export async function startCodexThread(protocol, options) {
63
+ return protocol.request("thread/start", buildThreadStartParams(options));
64
+ }
65
+ export async function resumeCodexThread(protocol, threadId, options) {
66
+ return protocol.request("thread/resume", buildThreadResumeParams(threadId, options));
67
+ }
68
+ export async function forkCodexThread(protocol, threadId, options) {
69
+ return protocol.request("thread/fork", buildThreadForkParams(threadId, options));
70
+ }
71
+ export async function injectCodexThreadItems(protocol, params) {
72
+ await protocol.request("thread/inject_items", params);
73
+ }
74
+ export async function unsubscribeCodexThread(protocol, threadId) {
75
+ await protocol.request("thread/unsubscribe", { threadId });
76
+ }
77
+ export async function setCodexThreadName(protocol, params) {
78
+ await protocol.request("thread/name/set", params);
79
+ }
80
+ //# sourceMappingURL=thread.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"thread.js","sourceRoot":"","sources":["../../src/codex/thread.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,166 @@
1
+ import type { CodexAgentMessage, CodexImageGeneration, CodexPlanUpdate, CodexRequestUserInputRequest, CodexRequestUserInputResponse, CodexThreadMode, CodexThreadTokenUsageUpdate, CodexTurnResult } from "../types.js";
2
+ import type { CodexNotificationMessage, CodexProtocolClient, CodexRequestMessage } from "./protocol.js";
3
+ import { type ThreadGoal } from "./goal.js";
4
+ export interface TextTurnInput {
5
+ type: "text";
6
+ text: string;
7
+ text_elements: [];
8
+ }
9
+ export interface LocalImageTurnInput {
10
+ type: "localImage";
11
+ path: string;
12
+ detail: null;
13
+ }
14
+ export type CodexUserInput = TextTurnInput | LocalImageTurnInput;
15
+ export type CodexTurnInput = string | CodexUserInput[];
16
+ export interface TurnStartParams {
17
+ threadId: string;
18
+ input: CodexUserInput[];
19
+ cwd: string;
20
+ approvalPolicy: "never";
21
+ collaborationMode?: {
22
+ mode: CodexThreadMode;
23
+ settings: {
24
+ model: string;
25
+ reasoning_effort: string | null;
26
+ developer_instructions: string | null;
27
+ };
28
+ };
29
+ }
30
+ export interface TurnStartOptions {
31
+ threadId: string;
32
+ text?: string;
33
+ input?: CodexTurnInput;
34
+ currentThreadName?: string;
35
+ cwd: string;
36
+ mode?: CodexThreadMode;
37
+ model?: string;
38
+ effort?: string;
39
+ onTurnStarted?: (turnId: string) => Promise<void> | void;
40
+ onAgentMessage?: (message: CompletedAgentMessage) => Promise<void> | void;
41
+ onImageGeneration?: (image: CodexImageGeneration) => Promise<void> | void;
42
+ onTokenUsage?: (usage: CodexThreadTokenUsageUpdate) => Promise<void> | void;
43
+ onGoalUpdated?: (goal: ThreadGoal, turnId: string | null) => Promise<void> | void;
44
+ onGoalCleared?: () => Promise<void> | void;
45
+ onPlanUpdated?: (plan: CodexPlanUpdate) => Promise<void> | void;
46
+ onRequestUserInput?: (request: CodexRequestUserInputRequest, responder: CodexRequestUserInputResponder) => Promise<void> | void;
47
+ onSetThreadName?: (request: CodexSetThreadNameToolRequest) => Promise<CodexDynamicToolCallResponse> | CodexDynamicToolCallResponse;
48
+ }
49
+ export interface TurnRequestOptions {
50
+ requestTimeoutMs?: number;
51
+ completionTimeoutMs?: number;
52
+ }
53
+ export interface TurnStartResponse {
54
+ turn?: {
55
+ id?: string;
56
+ [key: string]: unknown;
57
+ };
58
+ [key: string]: unknown;
59
+ }
60
+ type TurnIdSource = "response" | "notification";
61
+ export type CompletedAgentMessage = CodexAgentMessage;
62
+ export interface CodexRequestUserInputResponder {
63
+ respond(response: CodexRequestUserInputResponse): void;
64
+ reject(error: Error | string): void;
65
+ }
66
+ export interface CodexSetThreadNameToolRequest {
67
+ requestId: string | number;
68
+ threadId: string;
69
+ turnId: string;
70
+ callId: string;
71
+ name: string;
72
+ rawArguments: unknown;
73
+ }
74
+ export interface CodexDynamicToolCallResponse {
75
+ success: boolean;
76
+ contentItems: Array<{
77
+ type: "inputText";
78
+ text: string;
79
+ }>;
80
+ }
81
+ export interface TurnSteerOptions {
82
+ threadId: string;
83
+ turnId: string;
84
+ text?: string;
85
+ input?: CodexTurnInput;
86
+ }
87
+ export interface TurnSteerParams {
88
+ threadId: string;
89
+ input: CodexUserInput[];
90
+ expectedTurnId: string;
91
+ }
92
+ export interface TurnInterruptOptions {
93
+ threadId: string;
94
+ turnId: string;
95
+ }
96
+ export interface TurnInterruptParams {
97
+ threadId: string;
98
+ turnId: string;
99
+ }
100
+ export interface ThreadCompactStartOptions {
101
+ threadId: string;
102
+ onTurnStarted?: (turnId: string) => Promise<void> | void;
103
+ onTokenUsage?: (usage: CodexThreadTokenUsageUpdate) => Promise<void> | void;
104
+ }
105
+ export interface ThreadCompactStartParams {
106
+ threadId: string;
107
+ }
108
+ export declare function buildTextTurnInput(text: string): TextTurnInput;
109
+ export declare function buildLocalImageTurnInput(path: string): LocalImageTurnInput;
110
+ export declare function normalizeCodexTurnInput(input?: CodexTurnInput, fallbackText?: string): CodexUserInput[];
111
+ export declare function prefixCurrentThreadNameInput(input: CodexUserInput[], threadName: string): CodexUserInput[];
112
+ export declare function buildTurnStartParams(options: TurnStartOptions): TurnStartParams;
113
+ export declare function buildTurnSteerParams(options: TurnSteerOptions): TurnSteerParams;
114
+ export declare function buildTurnInterruptParams(options: TurnInterruptOptions): TurnInterruptParams;
115
+ export declare function startCodexTurn(protocol: CodexProtocolClient, options: TurnStartOptions, requestOptions?: TurnRequestOptions): Promise<CodexTurnResult>;
116
+ export declare function compactCodexThread(protocol: CodexProtocolClient, options: ThreadCompactStartOptions, requestOptions?: TurnRequestOptions): Promise<CodexTurnResult>;
117
+ export declare function steerCodexTurn(protocol: CodexProtocolClient, options: TurnSteerOptions): Promise<void>;
118
+ export declare function interruptCodexTurn(protocol: CodexProtocolClient, options: TurnInterruptOptions): Promise<void>;
119
+ export declare class TurnOutputAccumulator {
120
+ private readonly threadId;
121
+ private readonly callbacks;
122
+ private readonly assistantMessages;
123
+ private readonly generatedImages;
124
+ private readonly pendingAgentMessageCallbacks;
125
+ private agentMessageCallbackChain;
126
+ private readonly startedAt;
127
+ private finalAnswerText;
128
+ private turnId;
129
+ private turnIdSource;
130
+ private emittedTurnStartedId;
131
+ private completed;
132
+ private completionError;
133
+ private resolveWait;
134
+ private rejectWait;
135
+ constructor(threadId: string, turnId?: string, callbacks?: {
136
+ onTurnStarted?: (turnId: string) => Promise<void> | void;
137
+ onAgentMessage?: (message: CompletedAgentMessage) => Promise<void> | void;
138
+ onImageGeneration?: (image: CodexImageGeneration) => Promise<void> | void;
139
+ onTokenUsage?: (usage: CodexThreadTokenUsageUpdate) => Promise<void> | void;
140
+ onGoalUpdated?: (goal: ThreadGoal, turnId: string | null) => Promise<void> | void;
141
+ onGoalCleared?: () => Promise<void> | void;
142
+ onPlanUpdated?: (plan: CodexPlanUpdate) => Promise<void> | void;
143
+ });
144
+ setTurnId(turnId: string, source?: TurnIdSource): void;
145
+ record(notification: CodexNotificationMessage): void;
146
+ wait(timeoutMs?: number): Promise<CodexTurnResult>;
147
+ get text(): string;
148
+ private recordTurnStarted;
149
+ private recordItemCompleted;
150
+ private recordTurnCompleted;
151
+ private recordError;
152
+ private recordTokenUsage;
153
+ private recordGoalUpdated;
154
+ private recordGoalCleared;
155
+ private emitPlanUpdate;
156
+ private toResult;
157
+ private recordImageGeneration;
158
+ private emitAgentMessage;
159
+ private emitImageGeneration;
160
+ private resolveCompleted;
161
+ private waitForPendingAgentMessageCallbacks;
162
+ }
163
+ export declare function handleTurnServerRequest(protocol: CodexProtocolClient, options: TurnStartOptions, request: CodexRequestMessage): void;
164
+ export declare function dynamicToolTextResponse(success: boolean, text: string): CodexDynamicToolCallResponse;
165
+ export declare function extractTotalTokens(params: Record<string, unknown>): number | undefined;
166
+ export {};