@agentorg/cli 0.0.5 → 0.0.7

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 (260) hide show
  1. package/README.md +23 -104
  2. package/dist/node_modules/@agentorg/computer/LICENSE +201 -0
  3. package/dist/node_modules/@agentorg/computer/NOTICE +2 -0
  4. package/dist/node_modules/@agentorg/computer/dist/THIRD_PARTY_LICENSES.txt +1321 -0
  5. package/dist/node_modules/@agentorg/computer/dist/sdk.js +24909 -0
  6. package/dist/node_modules/@agentorg/computer/dist/types/generated/schema.d.ts +860 -0
  7. package/dist/node_modules/@agentorg/computer/dist/types/sdk.d.ts +242 -0
  8. package/dist/node_modules/@agentorg/computer/package.json +12 -0
  9. package/dist/node_modules/@agentorg/computer-connector/dist/src/index.d.ts +1 -0
  10. package/dist/node_modules/@agentorg/computer-connector/dist/src/index.js +1 -0
  11. package/dist/node_modules/@agentorg/computer-connector/dist/src/provider.d.ts +24 -0
  12. package/dist/node_modules/@agentorg/computer-connector/dist/src/provider.js +482 -0
  13. package/dist/node_modules/@agentorg/computer-connector/dist/src/unit.d.ts +19 -0
  14. package/dist/node_modules/@agentorg/computer-connector/dist/src/unit.js +149 -0
  15. package/dist/node_modules/@agentorg/computer-connector/package.json +33 -0
  16. package/dist/node_modules/@agentorg/computer-connector/skills/browser/SKILL.md +31 -0
  17. package/dist/node_modules/@agentorg/computer-connector/skills/computer/SKILL.md +30 -0
  18. package/dist/node_modules/@agentorg/computer-connector/skills/files/SKILL.md +28 -0
  19. package/dist/node_modules/@agentorg/computer-connector/skills/terminal/SKILL.md +39 -0
  20. package/dist/node_modules/@agentorg/computer-connector/skills/web-research/SKILL.md +29 -0
  21. package/dist/node_modules/@agentorg/hub/dist/src/hub-actor.d.ts +2 -7
  22. package/dist/node_modules/@agentorg/hub/dist/src/hub-actor.js +4 -144
  23. package/dist/node_modules/@agentorg/hub/dist/src/index.d.ts +1 -3
  24. package/dist/node_modules/@agentorg/hub/dist/src/index.js +1 -3
  25. package/dist/node_modules/@agentorg/hub/dist/src/router.d.ts +9 -58
  26. package/dist/node_modules/@agentorg/hub/dist/src/router.js +41 -414
  27. package/dist/node_modules/@agentorg/hub/dist/src/state.d.ts +17 -317
  28. package/dist/node_modules/@agentorg/hub/dist/src/state.js +42 -536
  29. package/dist/node_modules/@agentorg/hub/dist/src/validate.d.ts +1 -3
  30. package/dist/node_modules/@agentorg/hub/dist/src/validate.js +19 -17
  31. package/dist/node_modules/@agentorg/hub/package.json +0 -3
  32. package/dist/node_modules/@agentorg/interfaces/dist/src/agent-provider.d.ts +119 -0
  33. package/dist/node_modules/@agentorg/interfaces/dist/src/agent-provider.js +96 -0
  34. package/dist/node_modules/@agentorg/interfaces/dist/src/agent-settings.d.ts +42 -0
  35. package/dist/node_modules/@agentorg/interfaces/dist/src/agent-settings.js +53 -0
  36. package/dist/node_modules/@agentorg/interfaces/dist/src/chat.d.ts +93 -38
  37. package/dist/node_modules/@agentorg/interfaces/dist/src/chat.js +71 -22
  38. package/dist/node_modules/@agentorg/interfaces/dist/src/connection.d.ts +36 -0
  39. package/dist/node_modules/@agentorg/interfaces/dist/src/connection.js +31 -0
  40. package/dist/node_modules/@agentorg/interfaces/dist/src/folders.d.ts +19 -0
  41. package/dist/node_modules/@agentorg/interfaces/dist/src/folders.js +25 -0
  42. package/dist/node_modules/@agentorg/interfaces/dist/src/hub.d.ts +16 -286
  43. package/dist/node_modules/@agentorg/interfaces/dist/src/hub.js +17 -159
  44. package/dist/node_modules/@agentorg/interfaces/dist/src/index.d.ts +9 -9
  45. package/dist/node_modules/@agentorg/interfaces/dist/src/index.js +9 -9
  46. package/dist/node_modules/@agentorg/interfaces/dist/src/kv.d.ts +2 -2
  47. package/dist/node_modules/@agentorg/interfaces/dist/src/kv.js +2 -2
  48. package/dist/node_modules/@agentorg/interfaces/dist/src/llm-session.d.ts +2 -0
  49. package/dist/node_modules/@agentorg/interfaces/dist/src/llm-session.js +2 -1
  50. package/dist/node_modules/@agentorg/interfaces/dist/src/manager.d.ts +626 -0
  51. package/dist/node_modules/@agentorg/interfaces/dist/src/manager.js +349 -0
  52. package/dist/node_modules/@agentorg/interfaces/dist/src/tools.d.ts +39 -0
  53. package/dist/node_modules/@agentorg/interfaces/dist/src/tools.js +43 -0
  54. package/dist/node_modules/@agentorg/interfaces/dist/src/units.d.ts +460 -0
  55. package/dist/node_modules/@agentorg/interfaces/dist/src/units.js +204 -0
  56. package/dist/node_modules/@agentorg/looper/dist/src/index.d.ts +5 -0
  57. package/dist/node_modules/@agentorg/looper/dist/src/index.js +5 -0
  58. package/dist/node_modules/@agentorg/looper/dist/src/loop.d.ts +75 -0
  59. package/dist/node_modules/@agentorg/looper/dist/src/loop.js +332 -0
  60. package/dist/node_modules/@agentorg/looper/dist/src/looper.d.ts +71 -0
  61. package/dist/node_modules/@agentorg/looper/dist/src/looper.js +282 -0
  62. package/dist/node_modules/@agentorg/looper/dist/src/record.d.ts +99 -0
  63. package/dist/node_modules/@agentorg/looper/dist/src/record.js +278 -0
  64. package/dist/node_modules/@agentorg/looper/dist/src/tools.d.ts +11 -0
  65. package/dist/node_modules/@agentorg/looper/dist/src/tools.js +42 -0
  66. package/dist/node_modules/@agentorg/looper/dist/src/types.d.ts +147 -0
  67. package/dist/node_modules/@agentorg/looper/dist/src/types.js +32 -0
  68. package/dist/node_modules/@agentorg/looper/package.json +24 -0
  69. package/dist/node_modules/@agentorg/manager/dist/src/activity.d.ts +18 -0
  70. package/dist/node_modules/@agentorg/manager/dist/src/activity.js +65 -0
  71. package/dist/node_modules/@agentorg/manager/dist/src/control.d.ts +134 -0
  72. package/dist/node_modules/@agentorg/manager/dist/src/control.js +1115 -0
  73. package/dist/node_modules/@agentorg/manager/dist/src/form.d.ts +40 -0
  74. package/dist/node_modules/@agentorg/manager/dist/src/form.js +191 -0
  75. package/dist/node_modules/@agentorg/manager/dist/src/index.d.ts +1 -0
  76. package/dist/node_modules/@agentorg/manager/dist/src/index.js +1 -0
  77. package/dist/node_modules/@agentorg/manager/dist/src/manager.d.ts +25 -0
  78. package/dist/node_modules/@agentorg/manager/dist/src/manager.js +680 -0
  79. package/dist/node_modules/@agentorg/manager/dist/src/skills.d.ts +27 -0
  80. package/dist/node_modules/@agentorg/manager/dist/src/skills.js +152 -0
  81. package/dist/node_modules/@agentorg/manager/dist/src/stack.d.ts +454 -0
  82. package/dist/node_modules/@agentorg/manager/dist/src/stack.js +917 -0
  83. package/dist/node_modules/@agentorg/manager/package.json +30 -0
  84. package/dist/node_modules/@agentorg/mcp/dist/src/connection.d.ts +34 -0
  85. package/dist/node_modules/@agentorg/mcp/dist/src/connection.js +296 -0
  86. package/dist/node_modules/@agentorg/mcp/dist/src/index.d.ts +4 -0
  87. package/dist/node_modules/@agentorg/mcp/dist/src/index.js +4 -0
  88. package/dist/node_modules/@agentorg/mcp/dist/src/kinds.d.ts +158 -0
  89. package/dist/node_modules/@agentorg/mcp/dist/src/kinds.js +164 -0
  90. package/dist/node_modules/@agentorg/mcp/dist/src/provider.d.ts +22 -0
  91. package/dist/node_modules/@agentorg/mcp/dist/src/provider.js +197 -0
  92. package/dist/node_modules/@agentorg/mcp/dist/src/public.d.ts +6 -0
  93. package/dist/node_modules/@agentorg/mcp/dist/src/public.js +72 -0
  94. package/dist/node_modules/@agentorg/mcp/package.json +31 -0
  95. package/dist/node_modules/@agentorg/sdk/dist/src/cli.js +3 -23
  96. package/dist/node_modules/@agentorg/sdk/dist/src/client.d.ts +4 -25
  97. package/dist/node_modules/@agentorg/sdk/dist/src/client.js +5 -55
  98. package/dist/node_modules/@agentorg/sdk/dist/src/errors.d.ts +1 -1
  99. package/dist/node_modules/@agentorg/sdk/dist/src/errors.js +3 -3
  100. package/dist/node_modules/@agentorg/sdk/dist/src/filled.d.ts +21 -0
  101. package/dist/node_modules/@agentorg/sdk/dist/src/filled.js +24 -0
  102. package/dist/node_modules/@agentorg/sdk/dist/src/index.d.ts +3 -2
  103. package/dist/node_modules/@agentorg/sdk/dist/src/index.js +2 -1
  104. package/dist/node_modules/@agentorg/sdk/dist/src/interface.d.ts +6 -34
  105. package/dist/node_modules/@agentorg/sdk/dist/src/interface.js +3 -24
  106. package/dist/node_modules/@agentorg/sdk/dist/src/module-host.d.ts +8 -17
  107. package/dist/node_modules/@agentorg/sdk/dist/src/module-host.js +15 -87
  108. package/dist/node_modules/@agentorg/sdk/dist/src/module.d.ts +10 -76
  109. package/dist/node_modules/@agentorg/sdk/dist/src/module.js +3 -23
  110. package/dist/node_modules/@agentorg/sdk/dist/src/person-commands.js +0 -5
  111. package/dist/node_modules/@agentorg/sdk/dist/src/runtime.d.ts +3 -27
  112. package/dist/node_modules/@agentorg/sdk/dist/src/runtime.js +5 -100
  113. package/dist/node_modules/@agentorg/sdk/dist/src/testing.d.ts +7 -8
  114. package/dist/node_modules/@agentorg/sdk/dist/src/testing.js +12 -24
  115. package/dist/node_modules/@agentorg/sdk/package.json +4 -37
  116. package/dist/node_modules/@agentorg/shell/dist/app.css +4624 -739
  117. package/dist/node_modules/@agentorg/shell/dist/app.js +245 -202
  118. package/dist/node_modules/@agentorg/shell/package.json +23 -10
  119. package/dist/node_modules/@agentorg/wire/dist/src/frames.d.ts +2 -3
  120. package/dist/node_modules/@agentorg/wire/dist/src/frames.js +2 -3
  121. package/dist/node_modules/@agentorg/wire/dist/src/ops.d.ts +5 -34
  122. package/dist/node_modules/@agentorg/wire/dist/src/ops.js +2 -17
  123. package/dist/node_modules/assistant/dist/src/chats.d.ts +92 -0
  124. package/dist/node_modules/assistant/dist/src/chats.js +357 -0
  125. package/dist/node_modules/assistant/dist/src/engine.d.ts +42 -0
  126. package/dist/node_modules/assistant/dist/src/engine.js +160 -0
  127. package/dist/node_modules/assistant/dist/src/local-store.d.ts +3 -0
  128. package/dist/node_modules/assistant/dist/src/local-store.js +58 -0
  129. package/dist/node_modules/assistant/dist/src/provider.d.ts +21 -0
  130. package/dist/node_modules/assistant/dist/src/provider.js +259 -0
  131. package/dist/node_modules/assistant/dist/src/settings.d.ts +17 -0
  132. package/dist/node_modules/assistant/dist/src/settings.js +43 -0
  133. package/dist/node_modules/assistant/dist/src/tools.d.ts +57 -0
  134. package/dist/node_modules/assistant/dist/src/tools.js +102 -0
  135. package/dist/node_modules/assistant/package.json +30 -0
  136. package/dist/node_modules/chatgpt/dist/src/account.d.ts +52 -0
  137. package/dist/node_modules/chatgpt/dist/src/account.js +270 -0
  138. package/dist/node_modules/chatgpt/dist/src/encoding.d.ts +7 -0
  139. package/dist/node_modules/chatgpt/dist/src/encoding.js +20 -0
  140. package/dist/node_modules/chatgpt/dist/src/file-store.d.ts +9 -0
  141. package/dist/node_modules/chatgpt/dist/src/file-store.js +68 -0
  142. package/dist/node_modules/chatgpt/dist/src/index.d.ts +1 -0
  143. package/dist/node_modules/chatgpt/dist/src/index.js +1 -0
  144. package/dist/node_modules/chatgpt/dist/src/jwt.d.ts +15 -0
  145. package/dist/node_modules/chatgpt/dist/src/jwt.js +37 -0
  146. package/dist/node_modules/chatgpt/dist/src/oauth.d.ts +43 -0
  147. package/dist/node_modules/chatgpt/dist/src/oauth.js +104 -0
  148. package/dist/node_modules/chatgpt/dist/src/program.d.ts +23 -0
  149. package/dist/node_modules/chatgpt/dist/src/program.js +41 -0
  150. package/dist/node_modules/chatgpt/dist/src/responses.d.ts +54 -0
  151. package/dist/node_modules/chatgpt/dist/src/responses.js +300 -0
  152. package/dist/node_modules/chatgpt/dist/src/serve.d.ts +65 -0
  153. package/dist/node_modules/chatgpt/dist/src/serve.js +46 -0
  154. package/dist/node_modules/chatgpt/package.json +33 -0
  155. package/dist/src/api.d.ts +5 -34
  156. package/dist/src/api.js +10 -68
  157. package/dist/src/cli.js +3 -7
  158. package/dist/src/folders.d.ts +2 -0
  159. package/dist/src/folders.js +45 -0
  160. package/dist/src/gateway.d.ts +13 -8
  161. package/dist/src/gateway.js +119 -296
  162. package/dist/src/index.d.ts +4 -5
  163. package/dist/src/index.js +3 -4
  164. package/dist/src/live.d.ts +17 -0
  165. package/dist/src/live.js +109 -0
  166. package/dist/src/notes.d.ts +11 -0
  167. package/dist/src/notes.js +64 -0
  168. package/dist/src/oauth.d.ts +16 -0
  169. package/dist/src/oauth.js +46 -0
  170. package/dist/src/programs.d.ts +36 -0
  171. package/dist/src/programs.js +198 -0
  172. package/dist/src/signin.d.ts +12 -3
  173. package/dist/src/signin.js +30 -6
  174. package/package.json +4 -11
  175. package/dist/bundled/index.json +0 -6
  176. package/dist/bundled/sha256-0e91cc3d0e9762b81abc2427b5496b20f383abcd6fb97d928a8d50e956b54d1f.agentorg +0 -0
  177. package/dist/bundled/sha256-1f64ca62a0209d767d6aa6c4feb50b0653d60f10bebbc301f79bd3a37e0153c1.agentorg +0 -0
  178. package/dist/bundled/sha256-4055f8fddf6b90f3d356543f554b2a9e9a2c4a8827a8774f8f87952dc1692331.agentorg +0 -0
  179. package/dist/bundled/sha256-e356ea3c1899138a8494baf521556831006f38534fa9e92ae873e7e6956c3a46.agentorg +0 -0
  180. package/dist/node_modules/@agentorg/hub/dist/src/build.d.ts +0 -17
  181. package/dist/node_modules/@agentorg/hub/dist/src/build.js +0 -120
  182. package/dist/node_modules/@agentorg/hub/dist/src/logs.d.ts +0 -33
  183. package/dist/node_modules/@agentorg/hub/dist/src/logs.js +0 -162
  184. package/dist/node_modules/@agentorg/hub/dist/src/net.d.ts +0 -41
  185. package/dist/node_modules/@agentorg/hub/dist/src/net.js +0 -265
  186. package/dist/node_modules/@agentorg/hub/dist/src/processes.d.ts +0 -78
  187. package/dist/node_modules/@agentorg/hub/dist/src/processes.js +0 -485
  188. package/dist/node_modules/@agentorg/hub/dist/src/storage.d.ts +0 -38
  189. package/dist/node_modules/@agentorg/hub/dist/src/storage.js +0 -194
  190. package/dist/node_modules/@agentorg/interfaces/dist/src/http-egress.d.ts +0 -6
  191. package/dist/node_modules/@agentorg/interfaces/dist/src/http-egress.js +0 -7
  192. package/dist/node_modules/@agentorg/interfaces/dist/src/installer.d.ts +0 -191
  193. package/dist/node_modules/@agentorg/interfaces/dist/src/installer.js +0 -136
  194. package/dist/node_modules/@agentorg/interfaces/dist/src/layout.d.ts +0 -47
  195. package/dist/node_modules/@agentorg/interfaces/dist/src/layout.js +0 -52
  196. package/dist/node_modules/@agentorg/interfaces/dist/src/rules.d.ts +0 -35
  197. package/dist/node_modules/@agentorg/interfaces/dist/src/rules.js +0 -37
  198. package/dist/node_modules/@agentorg/interfaces/dist/src/storage-admin.d.ts +0 -23
  199. package/dist/node_modules/@agentorg/interfaces/dist/src/storage-admin.js +0 -31
  200. package/dist/node_modules/@agentorg/interfaces/dist/src/ui-shell.d.ts +0 -14
  201. package/dist/node_modules/@agentorg/interfaces/dist/src/ui-shell.js +0 -26
  202. package/dist/node_modules/@agentorg/interfaces/dist/src/ui-view.d.ts +0 -27
  203. package/dist/node_modules/@agentorg/interfaces/dist/src/ui-view.js +0 -26
  204. package/dist/node_modules/@agentorg/kit/dist/src/chat.d.ts +0 -37
  205. package/dist/node_modules/@agentorg/kit/dist/src/chat.js +0 -131
  206. package/dist/node_modules/@agentorg/kit/dist/src/components.d.ts +0 -94
  207. package/dist/node_modules/@agentorg/kit/dist/src/components.js +0 -66
  208. package/dist/node_modules/@agentorg/kit/dist/src/icons.d.ts +0 -17
  209. package/dist/node_modules/@agentorg/kit/dist/src/icons.js +0 -30
  210. package/dist/node_modules/@agentorg/kit/dist/src/index.d.ts +0 -6
  211. package/dist/node_modules/@agentorg/kit/dist/src/index.js +0 -10
  212. package/dist/node_modules/@agentorg/kit/dist/src/markdown.d.ts +0 -9
  213. package/dist/node_modules/@agentorg/kit/dist/src/markdown.js +0 -14
  214. package/dist/node_modules/@agentorg/kit/dist/src/resizable.d.ts +0 -5
  215. package/dist/node_modules/@agentorg/kit/dist/src/resizable.js +0 -8
  216. package/dist/node_modules/@agentorg/kit/dist/src/styles.d.ts +0 -11
  217. package/dist/node_modules/@agentorg/kit/dist/src/styles.js +0 -166
  218. package/dist/node_modules/@agentorg/kit/package.json +0 -44
  219. package/dist/node_modules/@agentorg/sdk/dist/frame/runtime.js +0 -753
  220. package/dist/node_modules/@agentorg/sdk/dist/host/runner.js +0 -21963
  221. package/dist/node_modules/@agentorg/sdk/dist/src/build.d.ts +0 -2
  222. package/dist/node_modules/@agentorg/sdk/dist/src/build.js +0 -2
  223. package/dist/node_modules/@agentorg/sdk/dist/src/client-http.d.ts +0 -24
  224. package/dist/node_modules/@agentorg/sdk/dist/src/client-http.js +0 -247
  225. package/dist/node_modules/@agentorg/sdk/dist/src/describe.d.ts +0 -13
  226. package/dist/node_modules/@agentorg/sdk/dist/src/describe.js +0 -16
  227. package/dist/node_modules/@agentorg/sdk/dist/src/frame-base.d.ts +0 -8
  228. package/dist/node_modules/@agentorg/sdk/dist/src/frame-base.js +0 -64
  229. package/dist/node_modules/@agentorg/sdk/dist/src/frame-entry.d.ts +0 -1
  230. package/dist/node_modules/@agentorg/sdk/dist/src/frame-entry.js +0 -35
  231. package/dist/node_modules/@agentorg/sdk/dist/src/frame-host.d.ts +0 -57
  232. package/dist/node_modules/@agentorg/sdk/dist/src/frame-host.js +0 -293
  233. package/dist/node_modules/@agentorg/sdk/dist/src/frame-protocol.d.ts +0 -124
  234. package/dist/node_modules/@agentorg/sdk/dist/src/frame-protocol.js +0 -16
  235. package/dist/node_modules/@agentorg/sdk/dist/src/frame.d.ts +0 -25
  236. package/dist/node_modules/@agentorg/sdk/dist/src/frame.js +0 -248
  237. package/dist/node_modules/@agentorg/sdk/dist/src/host-main.d.ts +0 -1
  238. package/dist/node_modules/@agentorg/sdk/dist/src/host-main.js +0 -60
  239. package/dist/node_modules/@agentorg/sdk/dist/src/host.d.ts +0 -25
  240. package/dist/node_modules/@agentorg/sdk/dist/src/host.js +0 -92
  241. package/dist/node_modules/@agentorg/sdk/dist/src/manifest-api.d.ts +0 -2
  242. package/dist/node_modules/@agentorg/sdk/dist/src/manifest-api.js +0 -2
  243. package/dist/node_modules/@agentorg/sdk/dist/src/manifest.d.ts +0 -56
  244. package/dist/node_modules/@agentorg/sdk/dist/src/manifest.js +0 -165
  245. package/dist/node_modules/@agentorg/sdk/dist/src/package.d.ts +0 -60
  246. package/dist/node_modules/@agentorg/sdk/dist/src/package.js +0 -538
  247. package/dist/node_modules/@agentorg/sdk/dist/src/tar.d.ts +0 -7
  248. package/dist/node_modules/@agentorg/sdk/dist/src/tar.js +0 -71
  249. package/dist/node_modules/@agentorg/shell/dist/agent-bindings.js +0 -59
  250. package/dist/node_modules/@agentorg/shell/src/agent-bindings.ts +0 -107
  251. package/dist/src/frames.d.ts +0 -23
  252. package/dist/src/frames.js +0 -78
  253. package/dist/src/layout.d.ts +0 -44
  254. package/dist/src/layout.js +0 -90
  255. package/dist/src/model.d.ts +0 -54
  256. package/dist/src/model.js +0 -299
  257. package/dist/src/rules.d.ts +0 -71
  258. package/dist/src/rules.js +0 -157
  259. package/dist/src/transfer.d.ts +0 -30
  260. package/dist/src/transfer.js +0 -110
@@ -0,0 +1,104 @@
1
+ export const ISSUER = "https://auth.openai.com";
2
+ export const AUTHORIZE = `${ISSUER}/api/accounts/authorize`;
3
+ export const TOKEN = `${ISSUER}/api/accounts/oauth/token`;
4
+ const DISCOVERY = `${ISSUER}/.well-known/openid-configuration`;
5
+ /** The audience of the tokens: the Responses API. */
6
+ export const RESOURCE = "https://api.openai.com/v1";
7
+ /** The scope that lets the tokens draw on the person's ChatGPT plan. */
8
+ export const PLAN_SCOPE = "chatgpt.tokens.use.direct";
9
+ export const SCOPES = `openid profile email offline_access resource.invoke ${PLAN_SCOPE}`;
10
+ /** The client id of a first sign-in; OpenAI then issues this app's own `oaiapp_…` id. */
11
+ export const DYNAMIC_CLIENT = "dynamic_agent_client";
12
+ export const AGENT_NAME = "AgentOrg";
13
+ /** A word from a server, fit to show: at most 64 characters of letters, digits and `_.-[]`. */
14
+ export const word = (value) => typeof value === "string" ? value.replace(/[^A-Za-z0-9_.[\]-]/g, "").slice(0, 64) : "";
15
+ /** The token endpoint refused a grant, with OAuth's error code. */
16
+ export class GrantError extends Error {
17
+ code;
18
+ status;
19
+ constructor(code, status) {
20
+ super(`The token endpoint refused the grant (${status} ${code}).`);
21
+ this.code = code;
22
+ this.status = status;
23
+ }
24
+ }
25
+ /** Refresh errors after which the refresh token can't be used again. */
26
+ export const TERMINAL = new Set([
27
+ "invalid_grant",
28
+ "invalid_refresh_token",
29
+ "token_expired",
30
+ "refresh_token_expired",
31
+ "refresh_token_invalidated",
32
+ "refresh_token_reused",
33
+ ]);
34
+ async function json(response) {
35
+ try {
36
+ const value = await response.json();
37
+ return typeof value === "object" && value !== null ? value : {};
38
+ }
39
+ catch {
40
+ return {};
41
+ }
42
+ }
43
+ const form = (url, params) => new Request(url, {
44
+ method: "POST",
45
+ headers: { "content-type": "application/x-www-form-urlencoded", accept: "application/json" },
46
+ body: new URLSearchParams(params),
47
+ });
48
+ /** An authorization-code or refresh-token grant, at the token endpoint. */
49
+ export async function grant(fetch, params, now) {
50
+ const response = await fetch(form(TOKEN, { ...params, resource: RESOURCE }));
51
+ const body = await json(response);
52
+ if (!response.ok)
53
+ throw new GrantError(word(body.error) || "error", response.status);
54
+ const { access_token, refresh_token, id_token, expires_in, scope } = body;
55
+ if (typeof access_token !== "string" || typeof refresh_token !== "string")
56
+ throw new GrantError("invalid_response", response.status);
57
+ return {
58
+ accessToken: access_token,
59
+ refreshToken: refresh_token,
60
+ ...(typeof id_token === "string" ? { idToken: id_token } : {}),
61
+ expiresAt: now + (typeof expires_in === "number" ? expires_in : 3600) * 1000,
62
+ scopes: typeof scope === "string" ? scope.split(" ").filter(Boolean) : [],
63
+ };
64
+ }
65
+ /** Read the issuer's configuration and keys; anything short of a usable key set throws. */
66
+ export async function discover(fetch) {
67
+ const found = await fetch(new Request(DISCOVERY));
68
+ const config = await json(found);
69
+ if (!found.ok || config.issuer !== ISSUER || typeof config.jwks_uri !== "string")
70
+ throw new Error("unexpected OpenID configuration");
71
+ const fetched = await fetch(new Request(config.jwks_uri));
72
+ const jwks = await json(fetched);
73
+ const keys = Array.isArray(jwks.keys) ? jwks.keys : [];
74
+ if (!fetched.ok || keys.length === 0)
75
+ throw new Error("no signing keys");
76
+ return {
77
+ keys,
78
+ ...(typeof config.revocation_endpoint === "string"
79
+ ? { revocation: config.revocation_endpoint }
80
+ : {}),
81
+ };
82
+ }
83
+ /** Revoke a refresh token: true when the issuer confirmed it. Retried on 5xx and network errors. */
84
+ export async function revoke(fetch, issuer, clientId, refreshToken) {
85
+ if (!issuer.revocation)
86
+ return false;
87
+ const params = { token: refreshToken, token_type_hint: "refresh_token", client_id: clientId };
88
+ for (let attempt = 0;; attempt++) {
89
+ try {
90
+ const response = await fetch(form(issuer.revocation, params));
91
+ await response.body?.cancel();
92
+ if (response.ok)
93
+ return true;
94
+ if (response.status < 500)
95
+ return false;
96
+ }
97
+ catch {
98
+ // A network failure: try again while the token is still in hand.
99
+ }
100
+ if (attempt === 2)
101
+ return false;
102
+ await new Promise((resolve) => setTimeout(resolve, 250 * 2 ** attempt));
103
+ }
104
+ }
@@ -0,0 +1,23 @@
1
+ import type { Log } from "@agentorg/sdk";
2
+ export interface ChatGPTOptions {
3
+ hubUrl: string;
4
+ /** Its own Actor. It needs no slots: no `storage`, no `net`. */
5
+ actorId: string;
6
+ credential: string;
7
+ /** A private folder of its own, which holds the sign-in. */
8
+ dir: string;
9
+ log?: Log;
10
+ /** How a request leaves, instead of the network. For tests. */
11
+ fetch?: (request: Request, init: RequestInit) => Promise<Response>;
12
+ }
13
+ export interface ChatGPT {
14
+ /** Stop every response under way and leave the Hub. The sign-in stays. */
15
+ close(): Promise<void>;
16
+ }
17
+ /**
18
+ * Run ChatGPT as a program: an Actor exporting `account.login@1` as `login` and `llm.session@1` as
19
+ * `session`, with its sign-in in its own file and the network directly. It uses the person's plan,
20
+ * never API billing. Only https goes out, and a redirect comes back as it is, never followed with a
21
+ * request's token or form.
22
+ */
23
+ export declare function startChatGPT(options: ChatGPTOptions): Promise<ChatGPT>;
@@ -0,0 +1,41 @@
1
+ import { accountLogin, llmSession } from "@agentorg/interfaces";
2
+ import { connect } from "@agentorg/sdk/client";
3
+ import { fileStore } from "./file-store.js";
4
+ import { serveChatGPT } from "./serve.js";
5
+ const quiet = { info() { }, warn() { }, error() { } };
6
+ /**
7
+ * Run ChatGPT as a program: an Actor exporting `account.login@1` as `login` and `llm.session@1` as
8
+ * `session`, with its sign-in in its own file and the network directly. It uses the person's plan,
9
+ * never API billing. Only https goes out, and a redirect comes back as it is, never followed with a
10
+ * request's token or form.
11
+ */
12
+ export async function startChatGPT(options) {
13
+ const log = options.log ?? quiet;
14
+ const store = fileStore(options.dir, log);
15
+ const send = options.fetch ?? ((request, init) => fetch(request, init));
16
+ const outbound = async (request) => {
17
+ if (new URL(request.url).protocol !== "https:")
18
+ throw new Error("Only https addresses are reached.");
19
+ // Given beside the request, not by a copy of it: a copy's link to its signal can be collected,
20
+ // and a cancel would then wait for OpenAI's first byte.
21
+ return send(request, { redirect: "manual" });
22
+ };
23
+ let session;
24
+ const client = await connect({
25
+ hubUrl: options.hubUrl,
26
+ actorId: options.actorId,
27
+ credential: options.credential,
28
+ exports: { login: accountLogin, session: llmSession },
29
+ log,
30
+ start(ctx) {
31
+ session = serveChatGPT(ctx.exports, { fetch: outbound, store, log });
32
+ },
33
+ });
34
+ return {
35
+ async close() {
36
+ session?.stop();
37
+ client.close();
38
+ await client.closed;
39
+ },
40
+ };
41
+ }
@@ -0,0 +1,54 @@
1
+ /** Inference on the person's ChatGPT plan: the Responses API, streamed, with nothing stored. */
2
+ import type { llmSession } from "@agentorg/interfaces";
3
+ import { Refused } from "@agentorg/sdk";
4
+ import type { z } from "zod";
5
+ import { type Account } from "./account.js";
6
+ import { type Fetch } from "./oauth.js";
7
+ export declare const USAGE_SETTINGS = "https://chatgpt.com/settings/usage";
8
+ type RespondInput = z.output<typeof llmSession.methods.respond.input>;
9
+ /**
10
+ * OpenAI's error, as a refusal: by its code first, then its HTTP status when there is one (an error
11
+ * inside the stream has none). Only sanitized words of OpenAI's reply are shown.
12
+ */
13
+ export declare function refusalOf(code: string | undefined, at?: {
14
+ status?: number;
15
+ requestId?: string | null;
16
+ param?: string;
17
+ }): Refused;
18
+ export declare function createSession(options: {
19
+ fetch: Fetch;
20
+ account: Account;
21
+ /** Streamed text, for the one Actor whose request it answers. */
22
+ delta(caller: string, requestId: string, text: string): void;
23
+ }): {
24
+ /** Stop every response still running. */
25
+ stop(): void;
26
+ /** Forget the model list, so it is read again for the next account. */
27
+ reset(): void;
28
+ models(): Promise<{
29
+ models: {
30
+ id: string;
31
+ name: string;
32
+ }[];
33
+ }>;
34
+ cancel({ requestId }: {
35
+ requestId: string;
36
+ }, caller: string): {};
37
+ respond(input: RespondInput, caller: string): Promise<{
38
+ output: ({
39
+ type: "message";
40
+ content: string;
41
+ role: "assistant";
42
+ } | {
43
+ type: "function_call";
44
+ callId: string;
45
+ name: string;
46
+ arguments: string;
47
+ })[];
48
+ usage?: {
49
+ inputTokens: number;
50
+ outputTokens: number;
51
+ } | undefined;
52
+ }>;
53
+ };
54
+ export {};
@@ -0,0 +1,300 @@
1
+ import { Refused } from "@agentorg/sdk";
2
+ import { notEligible } from "./account.js";
3
+ import { word } from "./oauth.js";
4
+ const API = "https://api.openai.com/v1";
5
+ export const USAGE_SETTINGS = "https://chatgpt.com/settings/usage";
6
+ /**
7
+ * OpenAI's error, as a refusal: by its code first, then its HTTP status when there is one (an error
8
+ * inside the stream has none). Only sanitized words of OpenAI's reply are shown.
9
+ */
10
+ export function refusalOf(code, at = {}) {
11
+ const ref = at.requestId ? ` (request ${word(at.requestId)})` : "";
12
+ switch (code) {
13
+ case "subscription_sharing_usage_limit_exceeded":
14
+ return new Refused("usage_limit", `Usage limit reached. Review your plan or this app's limit in ChatGPT settings: ${USAGE_SETTINGS}`);
15
+ case "subscription_sharing_usage_unavailable":
16
+ case "subscription_sharing_user_unavailable":
17
+ return new Refused("unavailable", "ChatGPT plan usage is unavailable right now. Try again later.");
18
+ case "subscription_sharing_user_not_eligible":
19
+ return notEligible();
20
+ case "subscription_sharing_unsupported_capability":
21
+ return new Refused("unsupported", `The request asked for something plan usage doesn't support${at.param ? `: ${word(at.param)}` : ""}${ref}.`);
22
+ }
23
+ if (at.status === 429)
24
+ return refusalOf("subscription_sharing_usage_limit_exceeded", at);
25
+ if (at.status === 503)
26
+ return refusalOf("subscription_sharing_usage_unavailable", at);
27
+ const what = code ? ` ${word(code)}` : "";
28
+ return new Refused("failed", at.status === undefined
29
+ ? `OpenAI ended the response with an error${what}${ref}.`
30
+ : `OpenAI answered ${at.status}${what}${ref}.`);
31
+ }
32
+ async function errorOf(response) {
33
+ let error;
34
+ try {
35
+ error = (await response.json()).error;
36
+ }
37
+ catch {
38
+ // Admission errors may carry only `detail`, which is diagnostic and isn't echoed.
39
+ }
40
+ return refusalOf(typeof error?.code === "string" ? error.code : undefined, {
41
+ status: response.status,
42
+ requestId: response.headers.get("x-request-id"),
43
+ ...(typeof error?.param === "string" ? { param: error.param } : {}),
44
+ });
45
+ }
46
+ const BLANK_LINE = /\r?\n\r?\n/;
47
+ /** Server-sent events, one parsed `data` object at a time, until the stream or `signal` ends. */
48
+ async function* events(body, signal) {
49
+ const decoder = new TextDecoder();
50
+ const reader = body.getReader();
51
+ const stop = () => void reader.cancel().catch(() => { });
52
+ signal.addEventListener("abort", stop);
53
+ let buffer = "";
54
+ let done = false;
55
+ try {
56
+ while (!done) {
57
+ const read = await reader.read();
58
+ done = read.done;
59
+ if (signal.aborted)
60
+ return;
61
+ buffer += decoder.decode(read.value, { stream: !done });
62
+ for (let end = BLANK_LINE.exec(buffer); end; end = BLANK_LINE.exec(buffer)) {
63
+ const block = buffer.slice(0, end.index);
64
+ buffer = buffer.slice(end.index + end[0].length);
65
+ const data = block
66
+ .split(/\r?\n/)
67
+ .filter((line) => line.startsWith("data:"))
68
+ .map((line) => line.slice(5).replace(/^ /, ""))
69
+ .join("\n");
70
+ if (data && data !== "[DONE]") {
71
+ const parsed = JSON.parse(data);
72
+ if (typeof parsed === "object" && parsed !== null)
73
+ yield parsed;
74
+ }
75
+ }
76
+ }
77
+ }
78
+ finally {
79
+ signal.removeEventListener("abort", stop);
80
+ // A response that ended early leaves the rest of its body: close it.
81
+ if (!done)
82
+ await reader.cancel().catch(() => { });
83
+ reader.releaseLock();
84
+ }
85
+ }
86
+ const toApi = (item) => {
87
+ switch (item.type) {
88
+ case "message":
89
+ return { type: "message", role: item.role, content: item.content };
90
+ case "function_call":
91
+ return {
92
+ type: "function_call",
93
+ call_id: item.callId,
94
+ name: item.name,
95
+ arguments: item.arguments,
96
+ };
97
+ case "function_call_output":
98
+ return { type: "function_call_output", call_id: item.callId, output: item.output };
99
+ }
100
+ };
101
+ /** The final output items of a completed response: assistant text and function calls. */
102
+ function outputOf(response) {
103
+ const items = Array.isArray(response.output)
104
+ ? response.output
105
+ : [];
106
+ const output = [];
107
+ for (const item of items) {
108
+ if (item.type === "message" && Array.isArray(item.content)) {
109
+ const text = item.content
110
+ .map((part) => part.type === "output_text" && typeof part.text === "string"
111
+ ? part.text
112
+ : part.type === "refusal" && typeof part.refusal === "string"
113
+ ? part.refusal
114
+ : "")
115
+ .join("");
116
+ output.push({ type: "message", role: "assistant", content: text });
117
+ }
118
+ else if (item.type === "function_call" &&
119
+ typeof item.call_id === "string" &&
120
+ typeof item.name === "string" &&
121
+ typeof item.arguments === "string")
122
+ output.push({
123
+ type: "function_call",
124
+ callId: item.call_id,
125
+ name: item.name,
126
+ arguments: item.arguments,
127
+ });
128
+ // Reasoning items aren't carried: nothing is stored, and the next request sends the history.
129
+ }
130
+ return output;
131
+ }
132
+ const cancelled = () => new Refused("cancelled", "The response was cancelled.");
133
+ export function createSession(options) {
134
+ const { fetch, account } = options;
135
+ let listed;
136
+ /**
137
+ * Responses still running, by caller and request id, so a caller's `cancel` can stop its own and
138
+ * no other's.
139
+ */
140
+ const running = new Map();
141
+ const keyOf = (caller, requestId) => `${caller}\0${requestId}`;
142
+ /** A request with the access token, refreshed and tried once more if OpenAI says 401. */
143
+ const authorized = async (build, signal) => {
144
+ let response;
145
+ try {
146
+ response = await fetch(build(await account.token()));
147
+ if (response.status === 401) {
148
+ await response.body?.cancel();
149
+ response = await fetch(build(await account.token(true)));
150
+ }
151
+ }
152
+ catch (error) {
153
+ if (signal?.aborted)
154
+ throw cancelled();
155
+ if (error instanceof Refused)
156
+ throw error;
157
+ throw new Refused("unavailable", "OpenAI couldn't be reached. Try again later.");
158
+ }
159
+ if (!response.ok) {
160
+ const refused = await errorOf(response);
161
+ if (refused.code === "ineligible")
162
+ await account.ineligible();
163
+ throw refused;
164
+ }
165
+ return response;
166
+ };
167
+ const models = () => {
168
+ listed ??= (async () => {
169
+ const response = await authorized((token) => new Request(`${API}/models`, { headers: { authorization: `Bearer ${token}` } }));
170
+ const body = (await response.json().catch(() => ({})));
171
+ if (!Array.isArray(body.models))
172
+ throw refusalOf("bad_models", { requestId: response.headers.get("x-request-id") });
173
+ return body.models
174
+ .filter((model) => model?.visibility === "list" && typeof model.slug === "string")
175
+ .map((model) => ({
176
+ id: model.slug.slice(0, 128),
177
+ name: (typeof model.display_name === "string"
178
+ ? model.display_name
179
+ : model.slug).slice(0, 256),
180
+ }));
181
+ })().catch((error) => {
182
+ listed = undefined;
183
+ throw error;
184
+ });
185
+ return listed;
186
+ };
187
+ async function stream(input, caller, signal) {
188
+ const model = input.model ?? (await models())[0]?.id;
189
+ if (!model)
190
+ throw new Refused("failed", "No model is offered to this account.");
191
+ if (signal.aborted)
192
+ throw cancelled();
193
+ const body = JSON.stringify({
194
+ model,
195
+ instructions: input.instructions,
196
+ input: input.input.map(toApi),
197
+ ...(input.tools?.length
198
+ ? {
199
+ tools: input.tools.map((tool) => ({
200
+ type: "function",
201
+ name: tool.name,
202
+ ...(tool.description === undefined ? {} : { description: tool.description }),
203
+ parameters: tool.parameters,
204
+ strict: false,
205
+ })),
206
+ }
207
+ : {}),
208
+ stream: true,
209
+ store: false,
210
+ });
211
+ const response = await authorized((token) => new Request(`${API}/responses`, {
212
+ method: "POST",
213
+ headers: {
214
+ authorization: `Bearer ${token}`,
215
+ "content-type": "application/json",
216
+ accept: "text/event-stream",
217
+ },
218
+ body,
219
+ signal,
220
+ }), signal);
221
+ const requestId = response.headers.get("x-request-id");
222
+ if (!response.body)
223
+ throw refusalOf("empty_stream", { status: response.status, requestId });
224
+ try {
225
+ for await (const event of events(response.body, signal)) {
226
+ switch (event.type) {
227
+ case "response.output_text.delta":
228
+ if (typeof event.delta === "string")
229
+ options.delta(caller, input.requestId, event.delta);
230
+ break;
231
+ case "response.completed": {
232
+ const done = (event.response ?? {});
233
+ const usage = done.usage;
234
+ return {
235
+ output: outputOf(done),
236
+ ...(typeof usage?.input_tokens === "number" && typeof usage.output_tokens === "number"
237
+ ? { usage: { inputTokens: usage.input_tokens, outputTokens: usage.output_tokens } }
238
+ : {}),
239
+ };
240
+ }
241
+ case "response.failed": {
242
+ const error = (event.response?.error ??
243
+ {});
244
+ const refused = refusalOf(typeof error.code === "string" ? error.code : undefined, {
245
+ requestId,
246
+ });
247
+ if (refused.code === "ineligible")
248
+ await account.ineligible();
249
+ throw refused;
250
+ }
251
+ case "response.incomplete":
252
+ throw new Refused("failed", "The response ended incomplete.");
253
+ case "error":
254
+ throw refusalOf(typeof event.code === "string" ? event.code : undefined, { requestId });
255
+ }
256
+ }
257
+ }
258
+ catch (error) {
259
+ if (error instanceof Refused)
260
+ throw error;
261
+ if (signal.aborted)
262
+ throw cancelled();
263
+ throw new Refused("failed", "The response stream broke off.");
264
+ }
265
+ if (signal.aborted)
266
+ throw cancelled();
267
+ throw new Refused("failed", "The response ended before it completed.");
268
+ }
269
+ return {
270
+ /** Stop every response still running. */
271
+ stop() {
272
+ for (const controller of running.values())
273
+ controller.abort();
274
+ },
275
+ /** Forget the model list, so it is read again for the next account. */
276
+ reset() {
277
+ listed = undefined;
278
+ },
279
+ async models() {
280
+ return { models: await models() };
281
+ },
282
+ cancel({ requestId }, caller) {
283
+ running.get(keyOf(caller, requestId))?.abort();
284
+ return {};
285
+ },
286
+ async respond(input, caller) {
287
+ const key = keyOf(caller, input.requestId);
288
+ if (running.has(key))
289
+ throw new Refused("invalid", "A response with this requestId is already running.");
290
+ const controller = new AbortController();
291
+ running.set(key, controller);
292
+ try {
293
+ return await stream(input, caller, controller.signal);
294
+ }
295
+ finally {
296
+ running.delete(key);
297
+ }
298
+ },
299
+ };
300
+ }
@@ -0,0 +1,65 @@
1
+ import type { accountLogin, llmSession } from "@agentorg/interfaces";
2
+ import type { Context, Interface, Log } from "@agentorg/sdk";
3
+ import { type Store } from "./account.js";
4
+ import type { Fetch } from "./oauth.js";
5
+ type Exports = {
6
+ login: typeof accountLogin;
7
+ session: typeof llmSession;
8
+ };
9
+ export declare function serveChatGPT(exports: Context<Record<never, Interface>, Exports>["exports"], options: {
10
+ fetch: Fetch;
11
+ store: Store;
12
+ log: Log;
13
+ }): {
14
+ stop(): void;
15
+ reset(): void;
16
+ models(): Promise<{
17
+ models: {
18
+ id: string;
19
+ name: string;
20
+ }[];
21
+ }>;
22
+ cancel({ requestId }: {
23
+ requestId: string;
24
+ }, caller: string): {};
25
+ respond(input: {
26
+ requestId: string;
27
+ model?: string | undefined;
28
+ instructions: string;
29
+ input: ({
30
+ type: "message";
31
+ role: "assistant" | "user";
32
+ content: string;
33
+ } | {
34
+ type: "function_call";
35
+ callId: string;
36
+ name: string;
37
+ arguments: string;
38
+ } | {
39
+ type: "function_call_output";
40
+ callId: string;
41
+ output: string;
42
+ })[];
43
+ tools?: {
44
+ name: string;
45
+ description?: string | undefined;
46
+ parameters: Record<string, import("zod").JSONType>;
47
+ }[] | undefined;
48
+ }, caller: string): Promise<{
49
+ output: ({
50
+ type: "message";
51
+ content: string;
52
+ role: "assistant";
53
+ } | {
54
+ type: "function_call";
55
+ callId: string;
56
+ name: string;
57
+ arguments: string;
58
+ })[];
59
+ usage?: {
60
+ inputTokens: number;
61
+ outputTokens: number;
62
+ } | undefined;
63
+ }>;
64
+ };
65
+ export {};
@@ -0,0 +1,46 @@
1
+ import { createAccount } from "./account.js";
2
+ import { createSession } from "./responses.js";
3
+ export function serveChatGPT(exports, options) {
4
+ const { store, log } = options;
5
+ /** Every request's method, host, status and request id are logged; never its content. */
6
+ const fetch = async (request) => {
7
+ const { method } = request;
8
+ const { host } = new URL(request.url);
9
+ const response = await options.fetch(request);
10
+ log.info("request", {
11
+ method,
12
+ host,
13
+ status: response.status,
14
+ requestId: response.headers.get("x-request-id") ?? undefined,
15
+ });
16
+ return response;
17
+ };
18
+ let session;
19
+ const account = createAccount({
20
+ fetch,
21
+ store,
22
+ changed(state) {
23
+ session?.reset();
24
+ exports.login.emit("changed", { state });
25
+ },
26
+ });
27
+ const started = createSession({
28
+ fetch,
29
+ account,
30
+ // Each consumer's text goes to that consumer alone.
31
+ delta: (caller, requestId, text) => exports.session.emit("delta", { requestId, text }, { to: caller }),
32
+ });
33
+ session = started;
34
+ exports.login.implement({
35
+ status: () => account.status(),
36
+ start: (input) => account.start(input),
37
+ complete: (input) => account.complete(input),
38
+ logout: () => account.logout(),
39
+ });
40
+ exports.session.implement({
41
+ models: () => started.models(),
42
+ respond: (input, { caller }) => started.respond(input, caller),
43
+ cancel: (input, { caller }) => started.cancel(input, caller),
44
+ });
45
+ return started;
46
+ }
@@ -0,0 +1,33 @@
1
+ {
2
+ "name": "chatgpt",
3
+ "version": "0.0.1",
4
+ "private": true,
5
+ "description": "Sign in with ChatGPT, and model inference on the person's ChatGPT plan",
6
+ "license": "MIT",
7
+ "type": "module",
8
+ "exports": {
9
+ ".": {
10
+ "types": "./dist/src/index.d.ts",
11
+ "default": "./dist/src/index.js"
12
+ },
13
+ "./fake-openai": {
14
+ "types": "./dist/test/fake-openai.d.ts",
15
+ "default": "./dist/test/fake-openai.js"
16
+ }
17
+ },
18
+ "files": [
19
+ "dist/src"
20
+ ],
21
+ "scripts": {
22
+ "build": "node -e \"require('node:fs').rmSync('dist', { recursive: true, force: true })\" && tsc -p tsconfig.json",
23
+ "test": "node --test \"dist/test/**/*.test.js\""
24
+ },
25
+ "dependencies": {
26
+ "@agentorg/interfaces": "0.0.0",
27
+ "@agentorg/sdk": "0.0.0",
28
+ "zod": "^4.6.7"
29
+ },
30
+ "devDependencies": {
31
+ "@agentorg/hub": "0.0.0"
32
+ }
33
+ }