@useactor/core 0.1.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 (153) hide show
  1. package/dist/ai-sdk-provider.d.ts +54 -0
  2. package/dist/ai-sdk-provider.d.ts.map +1 -0
  3. package/dist/ai-sdk-provider.js +335 -0
  4. package/dist/ai-sdk-provider.js.map +1 -0
  5. package/dist/app-runtime.d.ts +83 -0
  6. package/dist/app-runtime.d.ts.map +1 -0
  7. package/dist/app-runtime.js +504 -0
  8. package/dist/app-runtime.js.map +1 -0
  9. package/dist/artifacts.d.ts +49 -0
  10. package/dist/artifacts.d.ts.map +1 -0
  11. package/dist/artifacts.js +50 -0
  12. package/dist/artifacts.js.map +1 -0
  13. package/dist/cli-defined-tools.d.ts +17 -0
  14. package/dist/cli-defined-tools.d.ts.map +1 -0
  15. package/dist/cli-defined-tools.js +146 -0
  16. package/dist/cli-defined-tools.js.map +1 -0
  17. package/dist/codex-oauth-provider.d.ts +30 -0
  18. package/dist/codex-oauth-provider.d.ts.map +1 -0
  19. package/dist/codex-oauth-provider.js +453 -0
  20. package/dist/codex-oauth-provider.js.map +1 -0
  21. package/dist/events.d.ts +133 -0
  22. package/dist/events.d.ts.map +1 -0
  23. package/dist/events.js +46 -0
  24. package/dist/events.js.map +1 -0
  25. package/dist/feedback.d.ts +29 -0
  26. package/dist/feedback.d.ts.map +1 -0
  27. package/dist/feedback.js +62 -0
  28. package/dist/feedback.js.map +1 -0
  29. package/dist/history.d.ts +34 -0
  30. package/dist/history.d.ts.map +1 -0
  31. package/dist/history.js +118 -0
  32. package/dist/history.js.map +1 -0
  33. package/dist/in-memory-runtime.d.ts +12 -0
  34. package/dist/in-memory-runtime.d.ts.map +1 -0
  35. package/dist/in-memory-runtime.js +491 -0
  36. package/dist/in-memory-runtime.js.map +1 -0
  37. package/dist/index.d.ts +36 -0
  38. package/dist/index.d.ts.map +1 -0
  39. package/dist/index.js +36 -0
  40. package/dist/index.js.map +1 -0
  41. package/dist/integrations.d.ts +37 -0
  42. package/dist/integrations.d.ts.map +1 -0
  43. package/dist/integrations.js +48 -0
  44. package/dist/integrations.js.map +1 -0
  45. package/dist/local-event-logger.d.ts +19 -0
  46. package/dist/local-event-logger.d.ts.map +1 -0
  47. package/dist/local-event-logger.js +163 -0
  48. package/dist/local-event-logger.js.map +1 -0
  49. package/dist/local-event-schema.d.ts +99 -0
  50. package/dist/local-event-schema.d.ts.map +1 -0
  51. package/dist/local-event-schema.js +43 -0
  52. package/dist/local-event-schema.js.map +1 -0
  53. package/dist/local-tools.d.ts +99 -0
  54. package/dist/local-tools.d.ts.map +1 -0
  55. package/dist/local-tools.js +418 -0
  56. package/dist/local-tools.js.map +1 -0
  57. package/dist/mcp-server-config.d.ts +16 -0
  58. package/dist/mcp-server-config.d.ts.map +1 -0
  59. package/dist/mcp-server-config.js +75 -0
  60. package/dist/mcp-server-config.js.map +1 -0
  61. package/dist/mock-provider.d.ts +8 -0
  62. package/dist/mock-provider.d.ts.map +1 -0
  63. package/dist/mock-provider.js +47 -0
  64. package/dist/mock-provider.js.map +1 -0
  65. package/dist/model-catalog.d.ts +24 -0
  66. package/dist/model-catalog.d.ts.map +1 -0
  67. package/dist/model-catalog.js +92 -0
  68. package/dist/model-catalog.js.map +1 -0
  69. package/dist/monoid-integration.d.ts +33 -0
  70. package/dist/monoid-integration.d.ts.map +1 -0
  71. package/dist/monoid-integration.js +184 -0
  72. package/dist/monoid-integration.js.map +1 -0
  73. package/dist/openai-oauth.d.ts +69 -0
  74. package/dist/openai-oauth.d.ts.map +1 -0
  75. package/dist/openai-oauth.js +127 -0
  76. package/dist/openai-oauth.js.map +1 -0
  77. package/dist/permission-grant-store.d.ts +7 -0
  78. package/dist/permission-grant-store.d.ts.map +1 -0
  79. package/dist/permission-grant-store.js +77 -0
  80. package/dist/permission-grant-store.js.map +1 -0
  81. package/dist/permission-grants.d.ts +38 -0
  82. package/dist/permission-grants.d.ts.map +1 -0
  83. package/dist/permission-grants.js +93 -0
  84. package/dist/permission-grants.js.map +1 -0
  85. package/dist/personas.d.ts +51 -0
  86. package/dist/personas.d.ts.map +1 -0
  87. package/dist/personas.js +137 -0
  88. package/dist/personas.js.map +1 -0
  89. package/dist/project-tool-registry.d.ts +16 -0
  90. package/dist/project-tool-registry.d.ts.map +1 -0
  91. package/dist/project-tool-registry.js +86 -0
  92. package/dist/project-tool-registry.js.map +1 -0
  93. package/dist/projects.d.ts +88 -0
  94. package/dist/projects.d.ts.map +1 -0
  95. package/dist/projects.js +243 -0
  96. package/dist/projects.js.map +1 -0
  97. package/dist/prompt-context.d.ts +13 -0
  98. package/dist/prompt-context.d.ts.map +1 -0
  99. package/dist/prompt-context.js +170 -0
  100. package/dist/prompt-context.js.map +1 -0
  101. package/dist/proposed-plan.d.ts +24 -0
  102. package/dist/proposed-plan.d.ts.map +1 -0
  103. package/dist/proposed-plan.js +74 -0
  104. package/dist/proposed-plan.js.map +1 -0
  105. package/dist/providers.d.ts +53 -0
  106. package/dist/providers.d.ts.map +1 -0
  107. package/dist/providers.js +31 -0
  108. package/dist/providers.js.map +1 -0
  109. package/dist/question-requests.d.ts +39 -0
  110. package/dist/question-requests.d.ts.map +1 -0
  111. package/dist/question-requests.js +135 -0
  112. package/dist/question-requests.js.map +1 -0
  113. package/dist/renderer-api.d.ts +52 -0
  114. package/dist/renderer-api.d.ts.map +1 -0
  115. package/dist/renderer-api.js +2 -0
  116. package/dist/renderer-api.js.map +1 -0
  117. package/dist/runtime-tool-execution.d.ts +22 -0
  118. package/dist/runtime-tool-execution.d.ts.map +1 -0
  119. package/dist/runtime-tool-execution.js +245 -0
  120. package/dist/runtime-tool-execution.js.map +1 -0
  121. package/dist/runtime.d.ts +154 -0
  122. package/dist/runtime.d.ts.map +1 -0
  123. package/dist/runtime.js +184 -0
  124. package/dist/runtime.js.map +1 -0
  125. package/dist/secrets.d.ts +75 -0
  126. package/dist/secrets.d.ts.map +1 -0
  127. package/dist/secrets.js +255 -0
  128. package/dist/secrets.js.map +1 -0
  129. package/dist/session-actions.d.ts +45 -0
  130. package/dist/session-actions.d.ts.map +1 -0
  131. package/dist/session-actions.js +393 -0
  132. package/dist/session-actions.js.map +1 -0
  133. package/dist/skills.d.ts +43 -0
  134. package/dist/skills.d.ts.map +1 -0
  135. package/dist/skills.js +333 -0
  136. package/dist/skills.js.map +1 -0
  137. package/dist/test/setup.d.ts +2 -0
  138. package/dist/test/setup.d.ts.map +1 -0
  139. package/dist/test/setup.js +17 -0
  140. package/dist/test/setup.js.map +1 -0
  141. package/dist/tool-requests.d.ts +58 -0
  142. package/dist/tool-requests.d.ts.map +1 -0
  143. package/dist/tool-requests.js +122 -0
  144. package/dist/tool-requests.js.map +1 -0
  145. package/dist/tools.d.ts +45 -0
  146. package/dist/tools.d.ts.map +1 -0
  147. package/dist/tools.js +50 -0
  148. package/dist/tools.js.map +1 -0
  149. package/dist/wyrdos-integration.d.ts +32 -0
  150. package/dist/wyrdos-integration.d.ts.map +1 -0
  151. package/dist/wyrdos-integration.js +183 -0
  152. package/dist/wyrdos-integration.js.map +1 -0
  153. package/package.json +51 -0
@@ -0,0 +1,146 @@
1
+ import { readActorConfig, updateActorConfig } from "@useactor/storage";
2
+ import { execFile } from "node:child_process";
3
+ import { promisify } from "node:util";
4
+ const execFileAsync = promisify(execFile);
5
+ export async function saveCliDefinedToolConfig(config, options) {
6
+ const normalized = validateCliDefinedToolConfig(config);
7
+ await updateActorConfig({
8
+ ...(options ?? {}),
9
+ update(existing) {
10
+ const current = getCliToolMap(existing);
11
+ return {
12
+ ...existing,
13
+ cli: {
14
+ ...(existing.cli ?? {}),
15
+ integrationTools: {
16
+ ...current,
17
+ [normalized.id]: normalized
18
+ }
19
+ }
20
+ };
21
+ }
22
+ });
23
+ }
24
+ export async function listCliDefinedToolConfigs(options) {
25
+ const config = await readActorConfig(options);
26
+ return Object.values(getCliToolMap(config))
27
+ .map((tool) => validateCliDefinedToolConfig(tool))
28
+ .sort((a, b) => a.id.localeCompare(b.id));
29
+ }
30
+ export async function deleteCliDefinedToolConfig(toolId, options) {
31
+ let deleted = false;
32
+ await updateActorConfig({
33
+ ...(options ?? {}),
34
+ update(existing) {
35
+ const current = getCliToolMap(existing);
36
+ if (!current[toolId]) {
37
+ return existing;
38
+ }
39
+ deleted = true;
40
+ const { [toolId]: _, ...rest } = current;
41
+ return {
42
+ ...existing,
43
+ cli: {
44
+ ...(existing.cli ?? {}),
45
+ integrationTools: rest
46
+ }
47
+ };
48
+ }
49
+ });
50
+ return deleted;
51
+ }
52
+ export function createCliDefinedIntegration(config) {
53
+ const normalized = validateCliDefinedToolConfig(config);
54
+ const tool = {
55
+ id: `cli_tool_${normalized.id}`,
56
+ name: normalized.name,
57
+ description: normalized.description,
58
+ inputSchema: normalized.inputSchema ?? {
59
+ type: "object",
60
+ additionalProperties: false,
61
+ properties: {
62
+ args: { type: "array", items: { type: "string" } }
63
+ }
64
+ },
65
+ permissionPolicy: normalized.permissionPolicy,
66
+ async executor(input) {
67
+ const extraArgs = normalizeArgsInput(input);
68
+ const result = await execFileAsync(normalized.command, [...(normalized.args ?? []), ...extraArgs], {
69
+ timeout: 10_000,
70
+ maxBuffer: 128_000
71
+ });
72
+ return {
73
+ content: JSON.stringify({
74
+ ok: true,
75
+ stdout: result.stdout.slice(0, 4000),
76
+ stderr: result.stderr.slice(0, 2000)
77
+ })
78
+ };
79
+ }
80
+ };
81
+ return {
82
+ definition: {
83
+ id: `cli:${normalized.id}`,
84
+ kind: "cli",
85
+ name: normalized.name,
86
+ description: normalized.description,
87
+ tools: [
88
+ {
89
+ id: tool.id,
90
+ name: tool.name,
91
+ description: tool.description,
92
+ inputSchema: tool.inputSchema,
93
+ permissionPolicy: tool.permissionPolicy,
94
+ readOnly: normalized.permissionPolicy === "never",
95
+ approvalRequired: normalized.permissionPolicy !== "never"
96
+ }
97
+ ]
98
+ },
99
+ tools: [tool]
100
+ };
101
+ }
102
+ function normalizeArgsInput(input) {
103
+ if (!input || typeof input !== "object" || Array.isArray(input)) {
104
+ return [];
105
+ }
106
+ const args = input.args;
107
+ if (!Array.isArray(args)) {
108
+ return [];
109
+ }
110
+ return args.map((value) => String(value));
111
+ }
112
+ function getCliToolMap(config) {
113
+ const tools = config.cli?.integrationTools;
114
+ if (!tools || typeof tools !== "object" || Array.isArray(tools)) {
115
+ return {};
116
+ }
117
+ return tools;
118
+ }
119
+ function validateCliDefinedToolConfig(config) {
120
+ const id = config.id.trim();
121
+ const name = config.name.trim();
122
+ const description = config.description.trim();
123
+ const command = config.command.trim();
124
+ const args = config.args?.map((value) => value.trim()).filter(Boolean) ?? [];
125
+ if (!id || !name || !description || !command) {
126
+ throw new Error("CLI-defined tool requires id, name, description, and command.");
127
+ }
128
+ for (const value of [id, name, description, command, ...args]) {
129
+ assertNoRawSecret(value);
130
+ }
131
+ return {
132
+ id,
133
+ name,
134
+ description,
135
+ command,
136
+ args,
137
+ inputSchema: config.inputSchema,
138
+ permissionPolicy: config.permissionPolicy
139
+ };
140
+ }
141
+ function assertNoRawSecret(value) {
142
+ if (/\b(sk-[A-Za-z0-9_-]{8,}|xox[baprs]-[A-Za-z0-9-]{8,}|gh[pousr]_[A-Za-z0-9_]{8,})\b/.test(value)) {
143
+ throw new Error("CLI-defined tool config cannot contain raw secret values; use secret refs.");
144
+ }
145
+ }
146
+ //# sourceMappingURL=cli-defined-tools.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli-defined-tools.js","sourceRoot":"","sources":["../src/cli-defined-tools.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,iBAAiB,EAAiC,MAAM,mBAAmB,CAAC;AACtG,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAC9C,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AAItC,MAAM,aAAa,GAAG,SAAS,CAAC,QAAQ,CAAC,CAAC;AAY1C,MAAM,CAAC,KAAK,UAAU,wBAAwB,CAC5C,MAA4B,EAC5B,OAAkC;IAElC,MAAM,UAAU,GAAG,4BAA4B,CAAC,MAAM,CAAC,CAAC;IACxD,MAAM,iBAAiB,CAAC;QACtB,GAAG,CAAC,OAAO,IAAI,EAAE,CAAC;QAClB,MAAM,CAAC,QAAQ;YACb,MAAM,OAAO,GAAG,aAAa,CAAC,QAAQ,CAAC,CAAC;YACxC,OAAO;gBACL,GAAG,QAAQ;gBACX,GAAG,EAAE;oBACH,GAAG,CAAC,QAAQ,CAAC,GAAG,IAAI,EAAE,CAAC;oBACvB,gBAAgB,EAAE;wBAChB,GAAG,OAAO;wBACV,CAAC,UAAU,CAAC,EAAE,CAAC,EAAE,UAAU;qBAC5B;iBACF;aACF,CAAC;QACJ,CAAC;KACF,CAAC,CAAC;AACL,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,yBAAyB,CAC7C,OAAkC;IAElC,MAAM,MAAM,GAAG,MAAM,eAAe,CAAC,OAAO,CAAC,CAAC;IAC9C,OAAO,MAAM,CAAC,MAAM,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC;SACxC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,4BAA4B,CAAC,IAAI,CAAC,CAAC;SACjD,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,aAAa,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;AAC9C,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,0BAA0B,CAC9C,MAAc,EACd,OAAkC;IAElC,IAAI,OAAO,GAAG,KAAK,CAAC;IACpB,MAAM,iBAAiB,CAAC;QACtB,GAAG,CAAC,OAAO,IAAI,EAAE,CAAC;QAClB,MAAM,CAAC,QAAQ;YACb,MAAM,OAAO,GAAG,aAAa,CAAC,QAAQ,CAAC,CAAC;YACxC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;gBACrB,OAAO,QAAQ,CAAC;YAClB,CAAC;YACD,OAAO,GAAG,IAAI,CAAC;YACf,MAAM,EAAE,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,GAAG,IAAI,EAAE,GAAG,OAAO,CAAC;YACzC,OAAO;gBACL,GAAG,QAAQ;gBACX,GAAG,EAAE;oBACH,GAAG,CAAC,QAAQ,CAAC,GAAG,IAAI,EAAE,CAAC;oBACvB,gBAAgB,EAAE,IAAI;iBACvB;aACF,CAAC;QACJ,CAAC;KACF,CAAC,CAAC;IACH,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,MAAM,UAAU,2BAA2B,CAAC,MAA4B;IACtE,MAAM,UAAU,GAAG,4BAA4B,CAAC,MAAM,CAAC,CAAC;IACxD,MAAM,IAAI,GAAmB;QAC3B,EAAE,EAAE,YAAY,UAAU,CAAC,EAAE,EAAE;QAC/B,IAAI,EAAE,UAAU,CAAC,IAAI;QACrB,WAAW,EAAE,UAAU,CAAC,WAAW;QACnC,WAAW,EAAE,UAAU,CAAC,WAAW,IAAI;YACrC,IAAI,EAAE,QAAQ;YACd,oBAAoB,EAAE,KAAK;YAC3B,UAAU,EAAE;gBACV,IAAI,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE;aACnD;SACF;QACD,gBAAgB,EAAE,UAAU,CAAC,gBAAgB;QAC7C,KAAK,CAAC,QAAQ,CAAC,KAAK;YAClB,MAAM,SAAS,GAAG,kBAAkB,CAAC,KAAK,CAAC,CAAC;YAC5C,MAAM,MAAM,GAAG,MAAM,aAAa,CAAC,UAAU,CAAC,OAAO,EAAE,CAAC,GAAG,CAAC,UAAU,CAAC,IAAI,IAAI,EAAE,CAAC,EAAE,GAAG,SAAS,CAAC,EAAE;gBACjG,OAAO,EAAE,MAAM;gBACf,SAAS,EAAE,OAAO;aACnB,CAAC,CAAC;YACH,OAAO;gBACL,OAAO,EAAE,IAAI,CAAC,SAAS,CAAC;oBACtB,EAAE,EAAE,IAAI;oBACR,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC;oBACpC,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC;iBACrC,CAAC;aACH,CAAC;QACJ,CAAC;KACF,CAAC;IAEF,OAAO;QACL,UAAU,EAAE;YACV,EAAE,EAAE,OAAO,UAAU,CAAC,EAAE,EAAE;YAC1B,IAAI,EAAE,KAAK;YACX,IAAI,EAAE,UAAU,CAAC,IAAI;YACrB,WAAW,EAAE,UAAU,CAAC,WAAW;YACnC,KAAK,EAAE;gBACL;oBACE,EAAE,EAAE,IAAI,CAAC,EAAE;oBACX,IAAI,EAAE,IAAI,CAAC,IAAI;oBACf,WAAW,EAAE,IAAI,CAAC,WAAW;oBAC7B,WAAW,EAAE,IAAI,CAAC,WAAW;oBAC7B,gBAAgB,EAAE,IAAI,CAAC,gBAAgB;oBACvC,QAAQ,EAAE,UAAU,CAAC,gBAAgB,KAAK,OAAO;oBACjD,gBAAgB,EAAE,UAAU,CAAC,gBAAgB,KAAK,OAAO;iBAC1D;aACF;SACF;QACD,KAAK,EAAE,CAAC,IAAI,CAAC;KACd,CAAC;AACJ,CAAC;AAED,SAAS,kBAAkB,CAAC,KAAc;IACxC,IAAI,CAAC,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QAChE,OAAO,EAAE,CAAC;IACZ,CAAC;IACD,MAAM,IAAI,GAAI,KAAiC,CAAC,IAAI,CAAC;IACrD,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;QACzB,OAAO,EAAE,CAAC;IACZ,CAAC;IACD,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;AAC5C,CAAC;AAED,SAAS,aAAa,CAAC,MAAkD;IACvE,MAAM,KAAK,GAAG,MAAM,CAAC,GAAG,EAAE,gBAAgB,CAAC;IAC3C,IAAI,CAAC,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QAChE,OAAO,EAAE,CAAC;IACZ,CAAC;IACD,OAAO,KAA6C,CAAC;AACvD,CAAC;AAED,SAAS,4BAA4B,CAAC,MAA4B;IAChE,MAAM,EAAE,GAAG,MAAM,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC;IAC5B,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;IAChC,MAAM,WAAW,GAAG,MAAM,CAAC,WAAW,CAAC,IAAI,EAAE,CAAC;IAC9C,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;IACtC,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;IAC7E,IAAI,CAAC,EAAE,IAAI,CAAC,IAAI,IAAI,CAAC,WAAW,IAAI,CAAC,OAAO,EAAE,CAAC;QAC7C,MAAM,IAAI,KAAK,CAAC,+DAA+D,CAAC,CAAC;IACnF,CAAC;IACD,KAAK,MAAM,KAAK,IAAI,CAAC,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC,EAAE,CAAC;QAC9D,iBAAiB,CAAC,KAAK,CAAC,CAAC;IAC3B,CAAC;IACD,OAAO;QACL,EAAE;QACF,IAAI;QACJ,WAAW;QACX,OAAO;QACP,IAAI;QACJ,WAAW,EAAE,MAAM,CAAC,WAAW;QAC/B,gBAAgB,EAAE,MAAM,CAAC,gBAAgB;KAC1C,CAAC;AACJ,CAAC;AAED,SAAS,iBAAiB,CAAC,KAAa;IACtC,IAAI,mFAAmF,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;QACpG,MAAM,IAAI,KAAK,CAAC,4EAA4E,CAAC,CAAC;IAChG,CAAC;AACH,CAAC"}
@@ -0,0 +1,30 @@
1
+ import type { ModelRef, ProviderAdapter, ProviderStreamChunk, SessionMessage } from "./runtime.js";
2
+ import type { ProviderConfig, SecretStore } from "./secrets.js";
3
+ export interface CodexOAuthProviderAdapterOptions {
4
+ readonly providerConfig: ProviderConfig;
5
+ readonly secretStore: SecretStore;
6
+ readonly fetch?: typeof fetch;
7
+ readonly endpoint?: string;
8
+ readonly clientId?: string;
9
+ }
10
+ export declare function createCodexOAuthProviderAdapter(options: CodexOAuthProviderAdapterOptions): ProviderAdapter;
11
+ export declare class CodexOAuthProviderAdapter implements ProviderAdapter {
12
+ readonly id: string;
13
+ readonly displayName: string;
14
+ private readonly providerConfig;
15
+ private readonly secretStore;
16
+ private readonly runFetch;
17
+ private readonly endpoint;
18
+ private readonly clientId;
19
+ constructor(options: CodexOAuthProviderAdapterOptions);
20
+ streamMessage(input: {
21
+ readonly messages: readonly SessionMessage[];
22
+ readonly model?: ModelRef;
23
+ readonly signal?: AbortSignal;
24
+ }): AsyncIterable<ProviderStreamChunk>;
25
+ }
26
+ export declare class CodexOAuthProviderError extends Error {
27
+ readonly code: string;
28
+ constructor(code: string, message: string);
29
+ }
30
+ //# sourceMappingURL=codex-oauth-provider.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"codex-oauth-provider.d.ts","sourceRoot":"","sources":["../src/codex-oauth-provider.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EACV,QAAQ,EACR,eAAe,EACf,mBAAmB,EACnB,cAAc,EAEf,MAAM,cAAc,CAAC;AAEtB,OAAO,KAAK,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAEhE,MAAM,WAAW,gCAAgC;IAC/C,QAAQ,CAAC,cAAc,EAAE,cAAc,CAAC;IACxC,QAAQ,CAAC,WAAW,EAAE,WAAW,CAAC;IAClC,QAAQ,CAAC,KAAK,CAAC,EAAE,OAAO,KAAK,CAAC;IAC9B,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;CAC5B;AAOD,wBAAgB,+BAA+B,CAC7C,OAAO,EAAE,gCAAgC,GACxC,eAAe,CAEjB;AAED,qBAAa,yBAA0B,YAAW,eAAe;IAC/D,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAE7B,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAiB;IAChD,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAc;IAC1C,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAe;IACxC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAS;IAClC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAS;gBAEtB,OAAO,EAAE,gCAAgC;IAU9C,aAAa,CAAC,KAAK,EAAE;QAC1B,QAAQ,CAAC,QAAQ,EAAE,SAAS,cAAc,EAAE,CAAC;QAC7C,QAAQ,CAAC,KAAK,CAAC,EAAE,QAAQ,CAAC;QAC1B,QAAQ,CAAC,MAAM,CAAC,EAAE,WAAW,CAAC;KAC/B,GAAG,aAAa,CAAC,mBAAmB,CAAC;CA2CvC;AAiED,qBAAa,uBAAwB,SAAQ,KAAK;IAChD,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;gBAEV,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM;CAK1C"}
@@ -0,0 +1,453 @@
1
+ import { appendFileSync } from "node:fs";
2
+ import { ensureFreshOpenAiOAuthCredential, getOpenAiOAuthHeaders, } from "./openai-oauth.js";
3
+ import { normalizeSessionMessage, sessionMessageText } from "./runtime.js";
4
+ const defaultCodexEndpoint = "https://chatgpt.com/backend-api/codex/responses";
5
+ const defaultCodexClientId = "app_EMoamEEZ73f0CkXaXp7hrann";
6
+ const defaultCodexInstructions = "You are Actor, a helpful local coding assistant.";
7
+ export function createCodexOAuthProviderAdapter(options) {
8
+ return new CodexOAuthProviderAdapter(options);
9
+ }
10
+ export class CodexOAuthProviderAdapter {
11
+ id;
12
+ displayName;
13
+ providerConfig;
14
+ secretStore;
15
+ runFetch;
16
+ endpoint;
17
+ clientId;
18
+ constructor(options) {
19
+ this.providerConfig = options.providerConfig;
20
+ this.secretStore = options.secretStore;
21
+ this.runFetch = options.fetch ?? fetch;
22
+ this.endpoint = options.endpoint ?? defaultCodexEndpoint;
23
+ this.clientId = options.clientId ?? defaultCodexClientId;
24
+ this.id = `codex-oauth:${options.providerConfig.providerId}`;
25
+ this.displayName = `${options.providerConfig.name} (Codex OAuth)`;
26
+ }
27
+ async *streamMessage(input) {
28
+ const modelId = resolveCodexModelId(this.providerConfig, input.model);
29
+ const credential = await ensureFreshOpenAiOAuthCredential({
30
+ secretStore: this.secretStore,
31
+ secretId: this.providerConfig.secretRef.secretId,
32
+ clientId: this.clientId,
33
+ fetch: this.runFetch,
34
+ });
35
+ if (!credential) {
36
+ throw new CodexOAuthProviderError("missing_oauth_credential", `Missing OAuth credential for provider: ${this.providerConfig.providerId}`);
37
+ }
38
+ const requestBody = createCodexRequestBody(modelId, input);
39
+ const debug = createCodexDebugLogger();
40
+ debug?.recordRequest(requestBody);
41
+ const requestInit = {
42
+ method: "POST",
43
+ headers: {
44
+ ...getOpenAiOAuthHeaders(credential),
45
+ "content-type": "application/json",
46
+ },
47
+ body: JSON.stringify(requestBody),
48
+ };
49
+ if (input.signal) {
50
+ requestInit.signal = input.signal;
51
+ }
52
+ const response = await this.runFetch(this.endpoint, requestInit);
53
+ if (!response.ok) {
54
+ throw new CodexOAuthProviderError("codex_request_failed", await formatCodexError(response));
55
+ }
56
+ yield* streamCodexResponse(response, debug);
57
+ }
58
+ }
59
+ function createCodexRequestBody(modelId, input) {
60
+ return {
61
+ model: modelId,
62
+ input: input.messages
63
+ .map(toCodexInputMessage)
64
+ .filter((message) => Boolean(message)),
65
+ instructions: formatCodexInstructions(input.messages),
66
+ store: false,
67
+ reasoning: {
68
+ effort: toCodexReasoningEffort(input.model?.variantId),
69
+ summary: "auto",
70
+ },
71
+ text: { format: { type: "text" }, verbosity: "low" },
72
+ stream: true,
73
+ };
74
+ }
75
+ function formatCodexInstructions(messages) {
76
+ const instructions = messages
77
+ .map(normalizeSessionMessage)
78
+ .filter((message) => message.role === "system")
79
+ .map((message) => sessionMessageText(message).trim())
80
+ .filter(Boolean)
81
+ .join("\n\n");
82
+ return instructions || defaultCodexInstructions;
83
+ }
84
+ function toCodexReasoningEffort(variantId) {
85
+ if (variantId === "low" ||
86
+ variantId === "medium" ||
87
+ variantId === "high" ||
88
+ variantId === "xhigh") {
89
+ return variantId;
90
+ }
91
+ return "medium";
92
+ }
93
+ export class CodexOAuthProviderError extends Error {
94
+ code;
95
+ constructor(code, message) {
96
+ super(message);
97
+ this.name = "CodexOAuthProviderError";
98
+ this.code = code;
99
+ }
100
+ }
101
+ function resolveCodexModelId(providerConfig, model) {
102
+ const modelId = model?.modelId ?? providerConfig.models.defaultModelId;
103
+ if (model && model.providerId !== providerConfig.providerId) {
104
+ throw new CodexOAuthProviderError("provider_model_mismatch", `Model provider "${model.providerId}" does not match configured provider "${providerConfig.providerId}".`);
105
+ }
106
+ if (!providerConfig.models.availableModelIds.includes(modelId)) {
107
+ throw new CodexOAuthProviderError("unknown_model", `Model "${modelId}" is not configured for provider "${providerConfig.providerId}".`);
108
+ }
109
+ return modelId;
110
+ }
111
+ function toCodexInputMessage(input) {
112
+ const message = normalizeSessionMessage(input);
113
+ const text = sessionMessageText(message).trim();
114
+ if (!text) {
115
+ return undefined;
116
+ }
117
+ if (message.message?.role === "user") {
118
+ return {
119
+ role: "user",
120
+ content: [{ type: "input_text", text: sessionMessageText(message) }],
121
+ };
122
+ }
123
+ if (message.message?.role === "assistant") {
124
+ return {
125
+ role: "assistant",
126
+ content: [{ type: "output_text", text: sessionMessageText(message) }],
127
+ };
128
+ }
129
+ return undefined;
130
+ }
131
+ async function* streamCodexResponse(response, debug = createCodexDebugLogger()) {
132
+ const contentType = response.headers.get("content-type") ?? "";
133
+ if (!contentType.includes("text/event-stream") || !response.body) {
134
+ const value = await response.json().catch(() => undefined);
135
+ debug?.record(value);
136
+ const text = extractText(value);
137
+ if (text) {
138
+ yield { text };
139
+ const usage = extractUsage(value);
140
+ if (usage) {
141
+ yield { type: "usage", usage };
142
+ }
143
+ debug?.finish({ sawText: true, completedTextLength: text.length });
144
+ }
145
+ else {
146
+ debug?.finish({ sawText: false, completedTextLength: 0 });
147
+ throw new CodexOAuthProviderError("empty_response", "Codex OAuth response completed without text.");
148
+ }
149
+ yield { type: "finish", finishReason: "stop" };
150
+ return;
151
+ }
152
+ const reader = response.body.getReader();
153
+ const decoder = new TextDecoder();
154
+ let buffer = "";
155
+ let sawText = false;
156
+ let completedText;
157
+ let usage;
158
+ while (true) {
159
+ const { done, value } = await reader.read();
160
+ if (done) {
161
+ break;
162
+ }
163
+ buffer += decoder.decode(value, { stream: true });
164
+ const lines = buffer.split("\n");
165
+ buffer = lines.pop() ?? "";
166
+ for (const line of lines) {
167
+ const event = parseSseDataLine(line);
168
+ if (!event) {
169
+ continue;
170
+ }
171
+ debug?.record(event);
172
+ const finalText = extractCompletedText(event);
173
+ if (finalText) {
174
+ completedText = finalText;
175
+ }
176
+ usage = extractUsage(event) ?? usage;
177
+ const text = extractIncrementalText(event);
178
+ if (text) {
179
+ sawText = true;
180
+ yield { text };
181
+ }
182
+ }
183
+ }
184
+ if (!sawText && completedText) {
185
+ yield { text: completedText };
186
+ sawText = true;
187
+ }
188
+ debug?.finish({
189
+ sawText,
190
+ completedTextLength: completedText?.length ?? 0,
191
+ });
192
+ if (!sawText) {
193
+ throw new CodexOAuthProviderError("empty_response", "Codex OAuth response completed without text.");
194
+ }
195
+ if (usage) {
196
+ yield { type: "usage", usage };
197
+ }
198
+ yield { type: "finish", finishReason: "stop" };
199
+ }
200
+ function parseSseDataLine(line) {
201
+ if (!line.startsWith("data:")) {
202
+ return undefined;
203
+ }
204
+ const data = line.slice("data:".length).trim();
205
+ if (!data || data === "[DONE]") {
206
+ return undefined;
207
+ }
208
+ return JSON.parse(data);
209
+ }
210
+ function extractIncrementalText(value) {
211
+ if (!value || typeof value !== "object") {
212
+ return undefined;
213
+ }
214
+ const record = value;
215
+ if (record.type === "response.output_text.delta" &&
216
+ typeof record.delta === "string") {
217
+ return record.delta;
218
+ }
219
+ if (record.type === "response.output_text.done" &&
220
+ typeof record.text === "string") {
221
+ return record.text;
222
+ }
223
+ if (!record.type && typeof record.delta === "string") {
224
+ return record.delta;
225
+ }
226
+ return undefined;
227
+ }
228
+ function extractCompletedText(value) {
229
+ if (!value || typeof value !== "object") {
230
+ return undefined;
231
+ }
232
+ const record = value;
233
+ if (record.type === "response.completed") {
234
+ return extractText(record.response);
235
+ }
236
+ if (record.type === "response.content_part.done") {
237
+ return extractText(record.part);
238
+ }
239
+ if (record.type === "response.output_item.done") {
240
+ return extractText(record.item);
241
+ }
242
+ if (record.type === "response.output_text.done") {
243
+ return typeof record.text === "string" ? record.text : undefined;
244
+ }
245
+ return undefined;
246
+ }
247
+ function extractUsage(value) {
248
+ if (!value || typeof value !== "object") {
249
+ return undefined;
250
+ }
251
+ const record = value;
252
+ const usage = normalizeUsage(record.usage) ??
253
+ (record.type === "response.completed" && isRecord(record.response)
254
+ ? normalizeUsage(record.response.usage)
255
+ : undefined);
256
+ return usage;
257
+ }
258
+ function normalizeUsage(value) {
259
+ if (!isRecord(value)) {
260
+ return undefined;
261
+ }
262
+ const input = numberValue(value.input_tokens ?? value.inputTokens);
263
+ const output = numberValue(value.output_tokens ?? value.outputTokens);
264
+ const total = numberValue(value.total_tokens ?? value.totalTokens);
265
+ const inputDetails = isRecord(value.input_tokens_details)
266
+ ? value.input_tokens_details
267
+ : isRecord(value.inputTokenDetails)
268
+ ? value.inputTokenDetails
269
+ : undefined;
270
+ const outputDetails = isRecord(value.output_tokens_details)
271
+ ? value.output_tokens_details
272
+ : isRecord(value.outputTokenDetails)
273
+ ? value.outputTokenDetails
274
+ : undefined;
275
+ const cacheRead = numberValue(inputDetails?.cached_tokens ?? inputDetails?.cacheReadTokens);
276
+ const cacheWrite = numberValue(inputDetails?.cacheWriteTokens);
277
+ const reasoning = numberValue(outputDetails?.reasoning_tokens ?? outputDetails?.reasoningTokens);
278
+ const resolvedTotal = total || input + output + reasoning + cacheRead + cacheWrite;
279
+ if (resolvedTotal <= 0) {
280
+ return undefined;
281
+ }
282
+ return {
283
+ input,
284
+ output,
285
+ reasoning,
286
+ cacheRead,
287
+ cacheWrite,
288
+ total: resolvedTotal,
289
+ };
290
+ }
291
+ function isRecord(value) {
292
+ return Boolean(value && typeof value === "object" && !Array.isArray(value));
293
+ }
294
+ function numberValue(value) {
295
+ return typeof value === "number" && Number.isFinite(value) ? value : 0;
296
+ }
297
+ function createCodexDebugLogger() {
298
+ if (process.env.ACTOR_CODEX_DEBUG !== "1") {
299
+ return undefined;
300
+ }
301
+ const eventTypes = [];
302
+ const outputTypes = [];
303
+ const textLengths = [];
304
+ const statuses = [];
305
+ const errors = [];
306
+ let request;
307
+ return {
308
+ recordRequest(value) {
309
+ request = {
310
+ model: value.model,
311
+ input: value.input.map((message) => ({
312
+ role: message.role,
313
+ contentTypes: message.content.map((part) => part.type),
314
+ textLengths: message.content.map((part) => part.text.length),
315
+ })),
316
+ instructionsLength: value.instructions.length,
317
+ reasoning: value.reasoning,
318
+ text: value.text,
319
+ };
320
+ },
321
+ record(value) {
322
+ const summary = summarizeCodexEvent(value);
323
+ if (!summary) {
324
+ return;
325
+ }
326
+ eventTypes.push(summary.type);
327
+ outputTypes.push(...summary.outputTypes);
328
+ textLengths.push(...summary.textLengths);
329
+ statuses.push(...summary.statuses);
330
+ errors.push(...summary.errors);
331
+ },
332
+ finish(input) {
333
+ const entry = {
334
+ source: "actor.codex_oauth.debug",
335
+ timestamp: new Date().toISOString(),
336
+ request,
337
+ eventTypes,
338
+ outputTypes,
339
+ textLengths,
340
+ statuses,
341
+ errors,
342
+ sawText: input.sawText,
343
+ completedTextLength: input.completedTextLength,
344
+ };
345
+ const line = JSON.stringify(entry);
346
+ console.error(line);
347
+ appendCodexDebugLine(line);
348
+ },
349
+ };
350
+ }
351
+ function appendCodexDebugLine(line) {
352
+ const filePath = process.env.ACTOR_CODEX_DEBUG_FILE || "/tmp/actor-codex-debug.jsonl";
353
+ try {
354
+ appendFileSync(filePath, `${line}\n`, { encoding: "utf8" });
355
+ }
356
+ catch {
357
+ // Debug logging must never break provider execution.
358
+ }
359
+ }
360
+ function summarizeCodexEvent(value) {
361
+ if (!value || typeof value !== "object") {
362
+ return undefined;
363
+ }
364
+ const record = value;
365
+ const outputTypes = [];
366
+ const textLengths = [];
367
+ const statuses = [];
368
+ const errors = [];
369
+ collectCodexDebugFields(record, {
370
+ outputTypes,
371
+ textLengths,
372
+ statuses,
373
+ errors,
374
+ });
375
+ return {
376
+ type: typeof record.type === "string" ? record.type : "unknown",
377
+ outputTypes,
378
+ textLengths,
379
+ statuses,
380
+ errors,
381
+ };
382
+ }
383
+ function collectCodexDebugFields(value, output) {
384
+ if (!value || typeof value !== "object") {
385
+ return;
386
+ }
387
+ if (Array.isArray(value)) {
388
+ for (const item of value) {
389
+ collectCodexDebugFields(item, output);
390
+ }
391
+ return;
392
+ }
393
+ const record = value;
394
+ if (typeof record.type === "string") {
395
+ output.outputTypes.push(record.type);
396
+ }
397
+ if (typeof record.status === "string") {
398
+ output.statuses.push(record.status);
399
+ }
400
+ if (typeof record.text === "string") {
401
+ output.textLengths.push(record.text.length);
402
+ }
403
+ if (record.error && typeof record.error === "object") {
404
+ const error = record.error;
405
+ if (typeof error.type === "string") {
406
+ output.errors.push(error.type);
407
+ }
408
+ else {
409
+ output.errors.push("error");
410
+ }
411
+ }
412
+ for (const key of ["response", "output", "content", "part", "item"]) {
413
+ collectCodexDebugFields(record[key], output);
414
+ }
415
+ }
416
+ function extractText(value) {
417
+ if (!value || typeof value !== "object") {
418
+ return undefined;
419
+ }
420
+ const record = value;
421
+ if (typeof record.delta === "string") {
422
+ return record.delta;
423
+ }
424
+ if (typeof record.text === "string") {
425
+ return record.text;
426
+ }
427
+ if (typeof record.output_text === "string") {
428
+ return record.output_text;
429
+ }
430
+ if (record.type === "response.output_text.delta") {
431
+ return typeof record.delta === "string" ? record.delta : undefined;
432
+ }
433
+ if (record.response) {
434
+ return extractText(record.response);
435
+ }
436
+ const output = record.output;
437
+ if (Array.isArray(output)) {
438
+ return output.map(extractText).filter(Boolean).join("");
439
+ }
440
+ const content = record.content;
441
+ if (Array.isArray(content)) {
442
+ return content.map(extractText).filter(Boolean).join("");
443
+ }
444
+ return undefined;
445
+ }
446
+ async function formatCodexError(response) {
447
+ const body = await response.text().catch(() => "");
448
+ const detail = body.trim().slice(0, 500);
449
+ return detail
450
+ ? `Codex OAuth request failed with status ${response.status}: ${detail}`
451
+ : `Codex OAuth request failed with status ${response.status}.`;
452
+ }
453
+ //# sourceMappingURL=codex-oauth-provider.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"codex-oauth-provider.js","sourceRoot":"","sources":["../src/codex-oauth-provider.ts"],"names":[],"mappings":"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"}