@valni/cli-darwin-x64 0.0.0-stage → 0.1.2

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 (236) hide show
  1. package/LICENSE +53 -0
  2. package/package.json +18 -5
  3. package/runtime/LICENSE +53 -0
  4. package/runtime/README.md +674 -0
  5. package/runtime/assets/clankolas.png +0 -0
  6. package/runtime/docs/extensions.md +2910 -0
  7. package/runtime/docs/json.md +82 -0
  8. package/runtime/docs/models.md +540 -0
  9. package/runtime/docs/packages.md +228 -0
  10. package/runtime/docs/rpc.md +1480 -0
  11. package/runtime/docs/sdk.md +1183 -0
  12. package/runtime/docs/session-format.md +422 -0
  13. package/runtime/docs/settings.md +315 -0
  14. package/runtime/docs/shell-aliases.md +13 -0
  15. package/runtime/docs/terminal-setup.md +142 -0
  16. package/runtime/docs/termux.md +127 -0
  17. package/runtime/docs/tmux.md +63 -0
  18. package/runtime/docs/tui.md +927 -0
  19. package/runtime/docs/windows.md +17 -0
  20. package/runtime/examples/README.md +25 -0
  21. package/runtime/examples/extensions/README.md +212 -0
  22. package/runtime/examples/extensions/auto-commit-on-exit.ts +49 -0
  23. package/runtime/examples/extensions/bash-spawn-hook.ts +30 -0
  24. package/runtime/examples/extensions/bookmark.ts +50 -0
  25. package/runtime/examples/extensions/border-status-editor.ts +145 -0
  26. package/runtime/examples/extensions/built-in-tool-renderer.ts +249 -0
  27. package/runtime/examples/extensions/claude-rules.ts +86 -0
  28. package/runtime/examples/extensions/commands.ts +72 -0
  29. package/runtime/examples/extensions/confirm-destructive.ts +59 -0
  30. package/runtime/examples/extensions/custom-footer.ts +64 -0
  31. package/runtime/examples/extensions/custom-header.ts +73 -0
  32. package/runtime/examples/extensions/custom-provider-anthropic/index.ts +604 -0
  33. package/runtime/examples/extensions/custom-provider-anthropic/package-lock.json +24 -0
  34. package/runtime/examples/extensions/custom-provider-anthropic/package.json +19 -0
  35. package/runtime/examples/extensions/dirty-repo-guard.ts +56 -0
  36. package/runtime/examples/extensions/doom-overlay/README.md +46 -0
  37. package/runtime/examples/extensions/doom-overlay/doom/build/doom.js +21 -0
  38. package/runtime/examples/extensions/doom-overlay/doom/build/doom.wasm +0 -0
  39. package/runtime/examples/extensions/doom-overlay/doom/build.sh +152 -0
  40. package/runtime/examples/extensions/doom-overlay/doom/doomgeneric_pi.c +72 -0
  41. package/runtime/examples/extensions/doom-overlay/doom-component.ts +132 -0
  42. package/runtime/examples/extensions/doom-overlay/doom-engine.ts +173 -0
  43. package/runtime/examples/extensions/doom-overlay/doom-keys.ts +104 -0
  44. package/runtime/examples/extensions/doom-overlay/index.ts +74 -0
  45. package/runtime/examples/extensions/doom-overlay/wad-finder.ts +51 -0
  46. package/runtime/examples/extensions/dynamic-resources/SKILL.md +8 -0
  47. package/runtime/examples/extensions/dynamic-resources/dynamic.json +79 -0
  48. package/runtime/examples/extensions/dynamic-resources/dynamic.md +5 -0
  49. package/runtime/examples/extensions/dynamic-resources/index.ts +15 -0
  50. package/runtime/examples/extensions/dynamic-tools.ts +74 -0
  51. package/runtime/examples/extensions/entry-renderer.ts +41 -0
  52. package/runtime/examples/extensions/event-bus.ts +43 -0
  53. package/runtime/examples/extensions/file-trigger.ts +41 -0
  54. package/runtime/examples/extensions/git-checkpoint.ts +53 -0
  55. package/runtime/examples/extensions/git-merge-and-resolve.ts +115 -0
  56. package/runtime/examples/extensions/github-issue-autocomplete.ts +185 -0
  57. package/runtime/examples/extensions/gondolin/index.ts +531 -0
  58. package/runtime/examples/extensions/gondolin/package-lock.json +185 -0
  59. package/runtime/examples/extensions/gondolin/package.json +19 -0
  60. package/runtime/examples/extensions/hello.ts +26 -0
  61. package/runtime/examples/extensions/hidden-thinking-label.ts +53 -0
  62. package/runtime/examples/extensions/inline-bash.ts +94 -0
  63. package/runtime/examples/extensions/input-transform-streaming.ts +39 -0
  64. package/runtime/examples/extensions/input-transform.ts +43 -0
  65. package/runtime/examples/extensions/interactive-shell.ts +196 -0
  66. package/runtime/examples/extensions/mac-system-theme.ts +47 -0
  67. package/runtime/examples/extensions/message-renderer.ts +59 -0
  68. package/runtime/examples/extensions/minimal-mode.ts +426 -0
  69. package/runtime/examples/extensions/modal-editor.ts +85 -0
  70. package/runtime/examples/extensions/model-status.ts +31 -0
  71. package/runtime/examples/extensions/notify.ts +55 -0
  72. package/runtime/examples/extensions/overlay-qa-tests.ts +1450 -0
  73. package/runtime/examples/extensions/overlay-test.ts +153 -0
  74. package/runtime/examples/extensions/permission-gate.ts +34 -0
  75. package/runtime/examples/extensions/pirate.ts +47 -0
  76. package/runtime/examples/extensions/plan-mode/README.md +66 -0
  77. package/runtime/examples/extensions/plan-mode/index.ts +390 -0
  78. package/runtime/examples/extensions/plan-mode/utils.ts +168 -0
  79. package/runtime/examples/extensions/preset.ts +436 -0
  80. package/runtime/examples/extensions/project-trust.ts +64 -0
  81. package/runtime/examples/extensions/prompt-customizer.ts +97 -0
  82. package/runtime/examples/extensions/protected-paths.ts +30 -0
  83. package/runtime/examples/extensions/provider-payload.ts +18 -0
  84. package/runtime/examples/extensions/question.ts +278 -0
  85. package/runtime/examples/extensions/questionnaire.ts +440 -0
  86. package/runtime/examples/extensions/rainbow-editor.ts +88 -0
  87. package/runtime/examples/extensions/reload-runtime.ts +37 -0
  88. package/runtime/examples/extensions/rpc-demo.ts +118 -0
  89. package/runtime/examples/extensions/sandbox/index.ts +321 -0
  90. package/runtime/examples/extensions/sandbox/package-lock.json +92 -0
  91. package/runtime/examples/extensions/sandbox/package.json +19 -0
  92. package/runtime/examples/extensions/send-user-message.ts +97 -0
  93. package/runtime/examples/extensions/session-name.ts +27 -0
  94. package/runtime/examples/extensions/shutdown-command.ts +63 -0
  95. package/runtime/examples/extensions/snake.ts +343 -0
  96. package/runtime/examples/extensions/space-invaders.ts +560 -0
  97. package/runtime/examples/extensions/ssh.ts +220 -0
  98. package/runtime/examples/extensions/status-line.ts +32 -0
  99. package/runtime/examples/extensions/structured-output.ts +65 -0
  100. package/runtime/examples/extensions/subagent/README.md +175 -0
  101. package/runtime/examples/extensions/subagent/agents/planner.md +37 -0
  102. package/runtime/examples/extensions/subagent/agents/reviewer.md +35 -0
  103. package/runtime/examples/extensions/subagent/agents/scout.md +50 -0
  104. package/runtime/examples/extensions/subagent/agents/worker.md +24 -0
  105. package/runtime/examples/extensions/subagent/agents.ts +126 -0
  106. package/runtime/examples/extensions/subagent/index.ts +1009 -0
  107. package/runtime/examples/extensions/subagent/prompts/implement-and-review.md +10 -0
  108. package/runtime/examples/extensions/subagent/prompts/implement.md +10 -0
  109. package/runtime/examples/extensions/subagent/prompts/scout-and-plan.md +9 -0
  110. package/runtime/examples/extensions/system-prompt-header.ts +17 -0
  111. package/runtime/examples/extensions/tic-tac-toe.ts +1008 -0
  112. package/runtime/examples/extensions/timed-confirm.ts +70 -0
  113. package/runtime/examples/extensions/titlebar-spinner.ts +58 -0
  114. package/runtime/examples/extensions/todo.ts +297 -0
  115. package/runtime/examples/extensions/tool-override.ts +144 -0
  116. package/runtime/examples/extensions/tools.ts +146 -0
  117. package/runtime/examples/extensions/trigger-compact.ts +50 -0
  118. package/runtime/examples/extensions/truncated-tool.ts +195 -0
  119. package/runtime/examples/extensions/widget-placement.ts +9 -0
  120. package/runtime/examples/extensions/with-deps/index.ts +32 -0
  121. package/runtime/examples/extensions/with-deps/package-lock.json +31 -0
  122. package/runtime/examples/extensions/with-deps/package.json +22 -0
  123. package/runtime/examples/extensions/working-indicator.ts +123 -0
  124. package/runtime/examples/extensions/working-message-test.ts +25 -0
  125. package/runtime/examples/rpc-extension-ui.ts +632 -0
  126. package/runtime/examples/sdk/01-minimal.ts +26 -0
  127. package/runtime/examples/sdk/02-custom-model.ts +43 -0
  128. package/runtime/examples/sdk/03-custom-prompt.ts +70 -0
  129. package/runtime/examples/sdk/04-skills.ts +55 -0
  130. package/runtime/examples/sdk/05-tools.ts +48 -0
  131. package/runtime/examples/sdk/06-extensions.ts +94 -0
  132. package/runtime/examples/sdk/07-context-files.ts +42 -0
  133. package/runtime/examples/sdk/08-prompt-templates.ts +51 -0
  134. package/runtime/examples/sdk/09-api-keys-and-oauth.ts +34 -0
  135. package/runtime/examples/sdk/10-settings.ts +53 -0
  136. package/runtime/examples/sdk/11-sessions.ts +52 -0
  137. package/runtime/examples/sdk/12-full-control.ts +71 -0
  138. package/runtime/examples/sdk/13-session-runtime.ts +67 -0
  139. package/runtime/examples/sdk/README.md +140 -0
  140. package/runtime/export-html/ansi-to-html.js +249 -0
  141. package/runtime/export-html/index.js +226 -0
  142. package/runtime/export-html/template.css +1066 -0
  143. package/runtime/export-html/template.html +55 -0
  144. package/runtime/export-html/template.js +1864 -0
  145. package/runtime/export-html/tool-renderer.js +108 -0
  146. package/runtime/export-html/vendor/highlight.min.js +1213 -0
  147. package/runtime/export-html/vendor/marked.min.js +78 -0
  148. package/runtime/extensions/pi-switchboard/.github/workflows/ci.yml +51 -0
  149. package/runtime/extensions/pi-switchboard/LICENSE +22 -0
  150. package/runtime/extensions/pi-switchboard/README.md +85 -0
  151. package/runtime/extensions/pi-switchboard/extensions/switchboard/catalog.ts +183 -0
  152. package/runtime/extensions/pi-switchboard/extensions/switchboard/config.ts +97 -0
  153. package/runtime/extensions/pi-switchboard/extensions/switchboard/connections.ts +386 -0
  154. package/runtime/extensions/pi-switchboard/extensions/switchboard/constants.ts +12 -0
  155. package/runtime/extensions/pi-switchboard/extensions/switchboard/device-auth.ts +127 -0
  156. package/runtime/extensions/pi-switchboard/extensions/switchboard/envelope.ts +199 -0
  157. package/runtime/extensions/pi-switchboard/extensions/switchboard/errors.ts +180 -0
  158. package/runtime/extensions/pi-switchboard/extensions/switchboard/index.ts +125 -0
  159. package/runtime/extensions/pi-switchboard/extensions/switchboard/participant.ts +17 -0
  160. package/runtime/extensions/pi-switchboard/extensions/switchboard/sessionStream.ts +131 -0
  161. package/runtime/extensions/pi-switchboard/extensions/switchboard/toolProxy.ts +136 -0
  162. package/runtime/extensions/pi-switchboard/extensions/switchboard/tools.ts +16 -0
  163. package/runtime/extensions/pi-switchboard/extensions/switchboard/types.ts +37 -0
  164. package/runtime/extensions/pi-switchboard/package.json +30 -0
  165. package/runtime/extensions/pi-switchboard/tsconfig.json +13 -0
  166. package/runtime/extensions/switchboard-local/.github/workflows/ci.yml +80 -0
  167. package/runtime/extensions/switchboard-local/.github/workflows/release.yml +46 -0
  168. package/runtime/extensions/switchboard-local/README.md +98 -0
  169. package/runtime/extensions/switchboard-local/extensions/local/engine.ts +28 -0
  170. package/runtime/extensions/switchboard-local/extensions/local/engines/gguf.ts +324 -0
  171. package/runtime/extensions/switchboard-local/extensions/local/engines/llamaBuild.ts +62 -0
  172. package/runtime/extensions/switchboard-local/extensions/local/engines/mlx.ts +245 -0
  173. package/runtime/extensions/switchboard-local/extensions/local/engines/select.ts +38 -0
  174. package/runtime/extensions/switchboard-local/extensions/local/engines/support.ts +151 -0
  175. package/runtime/extensions/switchboard-local/extensions/local/hf.ts +106 -0
  176. package/runtime/extensions/switchboard-local/extensions/local/index.ts +67 -0
  177. package/runtime/extensions/switchboard-local/extensions/local/nativeStream.ts +602 -0
  178. package/runtime/extensions/switchboard-local/extensions/local/paths.ts +44 -0
  179. package/runtime/extensions/switchboard-local/extensions/local/provider.ts +57 -0
  180. package/runtime/extensions/switchboard-local/extensions/local/store.ts +82 -0
  181. package/runtime/extensions/switchboard-local/extensions/local/ui.ts +60 -0
  182. package/runtime/extensions/switchboard-local/node_modules/@valni/switchboard/dist/apiTypes.js +74 -0
  183. package/runtime/extensions/switchboard-local/node_modules/@valni/switchboard/dist/client.js +292 -0
  184. package/runtime/extensions/switchboard-local/node_modules/@valni/switchboard/dist/deviceAuth.js +155 -0
  185. package/runtime/extensions/switchboard-local/node_modules/@valni/switchboard/dist/errors.js +95 -0
  186. package/runtime/extensions/switchboard-local/node_modules/@valni/switchboard/dist/index.js +8 -0
  187. package/runtime/extensions/switchboard-local/node_modules/@valni/switchboard/dist/messages.js +253 -0
  188. package/runtime/extensions/switchboard-local/node_modules/@valni/switchboard/dist/models.js +19 -0
  189. package/runtime/extensions/switchboard-local/node_modules/@valni/switchboard/dist/native.js +886 -0
  190. package/runtime/extensions/switchboard-local/node_modules/@valni/switchboard/dist/wire.js +85 -0
  191. package/runtime/extensions/switchboard-local/node_modules/@valni/switchboard/package.json +39 -0
  192. package/runtime/extensions/switchboard-local/node_modules/@valni/switchboard-native/package.json +29 -0
  193. package/runtime/extensions/switchboard-local/node_modules/@valni/switchboard-native/src/anthropic.ts +127 -0
  194. package/runtime/extensions/switchboard-local/node_modules/@valni/switchboard-native/src/google.ts +111 -0
  195. package/runtime/extensions/switchboard-local/node_modules/@valni/switchboard-native/src/index.ts +8 -0
  196. package/runtime/extensions/switchboard-local/node_modules/@valni/switchboard-native/src/modelRecord.test.ts +25 -0
  197. package/runtime/extensions/switchboard-local/node_modules/@valni/switchboard-native/src/modelRecord.ts +57 -0
  198. package/runtime/extensions/switchboard-local/node_modules/@valni/switchboard-native/src/openaiGeneric.ts +103 -0
  199. package/runtime/extensions/switchboard-local/node_modules/@valni/switchboard-native/src/openaiPro.ts +89 -0
  200. package/runtime/extensions/switchboard-local/node_modules/@valni/switchboard-native/src/profile.ts +120 -0
  201. package/runtime/extensions/switchboard-local/node_modules/@valni/switchboard-native/src/routing.test.ts +82 -0
  202. package/runtime/extensions/switchboard-local/node_modules/@valni/switchboard-native/src/routing.ts +74 -0
  203. package/runtime/extensions/switchboard-local/node_modules/@valni/switchboard-native/src/validateConfig.google.test.ts +137 -0
  204. package/runtime/extensions/switchboard-local/node_modules/@valni/switchboard-native/src/validateConfig.openai.test.ts +241 -0
  205. package/runtime/extensions/switchboard-local/node_modules/@valni/switchboard-native/src/validateConfig.test.ts +174 -0
  206. package/runtime/extensions/switchboard-local/node_modules/@valni/switchboard-native/src/validateConfig.ts +438 -0
  207. package/runtime/extensions/switchboard-local/package.json +34 -0
  208. package/runtime/extensions/switchboard-local/tsconfig.json +13 -0
  209. package/runtime/native/darwin/prebuilds/darwin-x64/darwin-modifiers.node +0 -0
  210. package/runtime/node_modules/@mariozechner/clipboard/.yarnrc.yml +1 -0
  211. package/runtime/node_modules/@mariozechner/clipboard/Cargo.toml +45 -0
  212. package/runtime/node_modules/@mariozechner/clipboard/README.md +60 -0
  213. package/runtime/node_modules/@mariozechner/clipboard/build.rs +5 -0
  214. package/runtime/node_modules/@mariozechner/clipboard/clipboard.darwin-x64.node +0 -0
  215. package/runtime/node_modules/@mariozechner/clipboard/exp.ts +12 -0
  216. package/runtime/node_modules/@mariozechner/clipboard/index.js +606 -0
  217. package/runtime/node_modules/@mariozechner/clipboard/package.json +56 -0
  218. package/runtime/node_modules/@mariozechner/clipboard/src/clipboard_rs/common.rs +307 -0
  219. package/runtime/node_modules/@mariozechner/clipboard/src/clipboard_rs/mod.rs +93 -0
  220. package/runtime/node_modules/@mariozechner/clipboard/src/clipboard_rs/platform/ios.rs +313 -0
  221. package/runtime/node_modules/@mariozechner/clipboard/src/clipboard_rs/platform/macos.rs +471 -0
  222. package/runtime/node_modules/@mariozechner/clipboard/src/clipboard_rs/platform/mod.rs +252 -0
  223. package/runtime/node_modules/@mariozechner/clipboard/src/clipboard_rs/platform/wayland.rs +431 -0
  224. package/runtime/node_modules/@mariozechner/clipboard/src/clipboard_rs/platform/win.rs +712 -0
  225. package/runtime/node_modules/@mariozechner/clipboard/src/clipboard_rs/platform/x11.rs +916 -0
  226. package/runtime/node_modules/@mariozechner/clipboard/src/lib.rs +194 -0
  227. package/runtime/node_modules/@mariozechner/clipboard-darwin-x64/README.md +3 -0
  228. package/runtime/node_modules/@mariozechner/clipboard-darwin-x64/clipboard.darwin-x64.node +0 -0
  229. package/runtime/node_modules/@mariozechner/clipboard-darwin-x64/package.json +22 -0
  230. package/runtime/package.json +104 -0
  231. package/runtime/photon_rs_bg.wasm +0 -0
  232. package/runtime/theme/dark.json +87 -0
  233. package/runtime/theme/light.json +86 -0
  234. package/runtime/theme/theme-schema.json +340 -0
  235. package/runtime/valni +4 -0
  236. package/README.md +0 -3
@@ -0,0 +1,95 @@
1
+ export class SwitchboardError extends Error {
2
+ constructor(message) {
3
+ super(message);
4
+ this.name = new.target.name;
5
+ }
6
+ }
7
+ export class ServerError extends SwitchboardError {
8
+ status;
9
+ code;
10
+ serverMessage;
11
+ context;
12
+ constructor(status, code, message, context = null) {
13
+ super(code !== null ? `Switchboard ${status} ${code}: ${message}` : `Switchboard ${status}: ${message}`);
14
+ this.status = status;
15
+ this.code = code;
16
+ this.serverMessage = message;
17
+ this.context = context;
18
+ }
19
+ }
20
+ export class AuthenticationError extends ServerError {
21
+ }
22
+ export class InsufficientBalanceError extends ServerError {
23
+ }
24
+ export class RateLimitError extends ServerError {
25
+ }
26
+ export class SpendLimitError extends ServerError {
27
+ }
28
+ export class ModelNotPermittedError extends ServerError {
29
+ }
30
+ const AUTHENTICATION_CODES = new Set(["SWB-1001", "SWB-1002", "SWB-1006", "SWB-1013", "SWB-1014"]);
31
+ const INSUFFICIENT_BALANCE_CODES = new Set(["SWB-1007"]);
32
+ const RATE_LIMIT_CODES = new Set(["SWB-1003", "SWB-1004", "SWB-1008"]);
33
+ const SPEND_LIMIT_CODES = new Set(["SWB-1005", "SWB-1009", "SWB-1011"]);
34
+ const MODEL_NOT_PERMITTED_CODES = new Set(["SWB-1010", "SWB-1012"]);
35
+ export function serverErrorFor(status, code, message, context = null) {
36
+ if (code !== null) {
37
+ if (AUTHENTICATION_CODES.has(code))
38
+ return new AuthenticationError(status, code, message, context);
39
+ if (INSUFFICIENT_BALANCE_CODES.has(code))
40
+ return new InsufficientBalanceError(status, code, message, context);
41
+ if (RATE_LIMIT_CODES.has(code))
42
+ return new RateLimitError(status, code, message, context);
43
+ if (SPEND_LIMIT_CODES.has(code))
44
+ return new SpendLimitError(status, code, message, context);
45
+ if (MODEL_NOT_PERMITTED_CODES.has(code))
46
+ return new ModelNotPermittedError(status, code, message, context);
47
+ }
48
+ return new ServerError(status, code, message, context);
49
+ }
50
+ export class DecodingFailedError extends SwitchboardError {
51
+ underlying;
52
+ constructor(underlying) {
53
+ super(`Switchboard response decode failed: ${underlying instanceof Error ? underlying.message : String(underlying)}`);
54
+ this.underlying = underlying;
55
+ }
56
+ }
57
+ export class EncodingFailedError extends SwitchboardError {
58
+ underlying;
59
+ constructor(underlying) {
60
+ super(`Switchboard request body encode failed: ${underlying instanceof Error ? underlying.message : String(underlying)}`);
61
+ this.underlying = underlying;
62
+ }
63
+ }
64
+ export class TransportError extends SwitchboardError {
65
+ underlying;
66
+ constructor(underlying) {
67
+ super(`Switchboard request failed: ${underlying instanceof Error ? underlying.message : String(underlying)}`);
68
+ this.underlying = underlying;
69
+ }
70
+ }
71
+ export class MissingAPIKeyError extends SwitchboardError {
72
+ constructor() {
73
+ super("Client was constructed with an empty API key.");
74
+ }
75
+ }
76
+ export class StreamError extends SwitchboardError {
77
+ code;
78
+ streamMessage;
79
+ detail;
80
+ constructor(code, message, detail = null) {
81
+ super(detail !== null
82
+ ? `Switchboard stream error ${code}: ${message} (${detail})`
83
+ : `Switchboard stream error ${code}: ${message}`);
84
+ this.code = code;
85
+ this.streamMessage = message;
86
+ this.detail = detail;
87
+ }
88
+ }
89
+ export class DeviceAuthError extends SwitchboardError {
90
+ reason;
91
+ constructor(reason, message) {
92
+ super(message);
93
+ this.reason = reason;
94
+ }
95
+ }
@@ -0,0 +1,8 @@
1
+ export * as messages from "./messages.js";
2
+ export * as native from "./native.js";
3
+ export { Client, DEFAULT_BASE_URL, DEFAULT_TIMEOUT_MILLISECONDS, } from "./client.js";
4
+ export { BalancePage, ErrorEnvelope, MICRO_CENTS_PER_USD, ModelsPage, PickerModel, UsagePage, UsageRecord, usdFromMicroCents, } from "./apiTypes.js";
5
+ export { AuthenticationError, DecodingFailedError, DeviceAuthError, EncodingFailedError, InsufficientBalanceError, MissingAPIKeyError, ModelNotPermittedError, RateLimitError, ServerError, SpendLimitError, StreamError, SwitchboardError, TransportError, serverErrorFor, } from "./errors.js";
6
+ export { DEFAULT_AUTH_BASE_URL, deviceLogin, deviceRefresh, } from "./deviceAuth.js";
7
+ export { WireFormat, kindForWireFormat } from "./models.js";
8
+ export { SwitchboardRouter, } from "./native.js";
@@ -0,0 +1,253 @@
1
+ import * as wire from "./wire.js";
2
+ const KNOWN_PROPERTY_TYPES = new Set(["string", "number", "integer", "boolean", "object", "array", "null"]);
3
+ const DATA_URL_PREVIEW_LENGTH = 64;
4
+ const DATA_URL_PREFIX = "data:";
5
+ const BASE64_ENCODING_LABEL = "base64";
6
+ export const Role = {
7
+ SYSTEM: "system",
8
+ USER: "user",
9
+ ASSISTANT: "assistant",
10
+ TOOL: "tool",
11
+ };
12
+ const ROLES = new Set(Object.values(Role));
13
+ function decodeRole(value) {
14
+ if (!ROLES.has(value)) {
15
+ throw new Error(`unknown role ${JSON.stringify(value)}`);
16
+ }
17
+ return value;
18
+ }
19
+ export class ImageData {
20
+ mediaType;
21
+ base64;
22
+ constructor(mediaType, base64) {
23
+ this.mediaType = mediaType;
24
+ this.base64 = base64;
25
+ }
26
+ get dataUrl() {
27
+ return `${DATA_URL_PREFIX}${this.mediaType};${BASE64_ENCODING_LABEL},${this.base64}`;
28
+ }
29
+ static fromDataUrl(dataUrl) {
30
+ const parsed = parseDataUrl(dataUrl);
31
+ if (parsed === null) {
32
+ const preview = dataUrl.slice(0, DATA_URL_PREVIEW_LENGTH);
33
+ const suffix = dataUrl.length > DATA_URL_PREVIEW_LENGTH ? `… (${dataUrl.length} chars total)` : "";
34
+ throw new Error(`Expected a \`data:\` image URL, got ${preview}${suffix}`);
35
+ }
36
+ return parsed;
37
+ }
38
+ }
39
+ function parseDataUrl(dataUrl) {
40
+ if (!dataUrl.startsWith(DATA_URL_PREFIX))
41
+ return null;
42
+ const body = dataUrl.slice(DATA_URL_PREFIX.length);
43
+ const semicolon = body.indexOf(";");
44
+ const comma = body.indexOf(",");
45
+ if (semicolon === -1 || comma === -1 || semicolon >= comma)
46
+ return null;
47
+ if (body.slice(semicolon + 1, comma) !== BASE64_ENCODING_LABEL)
48
+ return null;
49
+ return new ImageData(body.slice(0, semicolon), body.slice(comma + 1));
50
+ }
51
+ export class TextPart {
52
+ text;
53
+ constructor(text) {
54
+ this.text = text;
55
+ }
56
+ }
57
+ export class ImagePart {
58
+ image;
59
+ constructor(image) {
60
+ this.image = image;
61
+ }
62
+ }
63
+ function encodeContent(content) {
64
+ if (typeof content === "string")
65
+ return content;
66
+ return content.map(encodePart);
67
+ }
68
+ function encodePart(part) {
69
+ if (part instanceof TextPart) {
70
+ return { type: "text", text: part.text };
71
+ }
72
+ return { type: "image_url", image_url: { url: part.image.dataUrl } };
73
+ }
74
+ function decodeContent(value) {
75
+ if (typeof value === "string")
76
+ return value;
77
+ if (Array.isArray(value))
78
+ return value.map(decodePart);
79
+ throw new Error(`message.content: expected string or array of parts, got ${value === null ? "null" : typeof value}`);
80
+ }
81
+ function decodePart(value) {
82
+ const fields = wire.mapping(value, "content part");
83
+ const partType = wire.string(fields, "type", "content part");
84
+ if (partType === "text") {
85
+ return new TextPart(wire.string(fields, "text", "content part"));
86
+ }
87
+ if (partType === "image_url") {
88
+ const payload = wire.mapping(fields["image_url"], "content part.image_url");
89
+ return new ImagePart(ImageData.fromDataUrl(wire.string(payload, "url", "content part.image_url")));
90
+ }
91
+ throw new Error(`Unknown content part type: ${partType}`);
92
+ }
93
+ export function contentText(content) {
94
+ if (typeof content === "string")
95
+ return content;
96
+ return content
97
+ .filter((part) => part instanceof TextPart)
98
+ .map((part) => part.text)
99
+ .join("");
100
+ }
101
+ export class ToolCallFunction {
102
+ name;
103
+ arguments;
104
+ constructor(name, argumentsText) {
105
+ this.name = name;
106
+ this.arguments = argumentsText;
107
+ }
108
+ static fromWire(value) {
109
+ const fields = wire.mapping(value, "tool_call.function");
110
+ return new ToolCallFunction(wire.string(fields, "name", "tool_call.function"), wire.string(fields, "arguments", "tool_call.function"));
111
+ }
112
+ }
113
+ export class ToolCall {
114
+ id;
115
+ function;
116
+ type;
117
+ constructor(id, functionCall, type = "function") {
118
+ this.id = id;
119
+ this.function = functionCall;
120
+ this.type = type;
121
+ }
122
+ toWire() {
123
+ return {
124
+ id: this.id,
125
+ type: this.type,
126
+ function: { name: this.function.name, arguments: this.function.arguments },
127
+ };
128
+ }
129
+ static fromWire(value) {
130
+ const fields = wire.mapping(value, "tool_call");
131
+ return new ToolCall(wire.string(fields, "id", "tool_call"), ToolCallFunction.fromWire(fields["function"]), wire.string(fields, "type", "tool_call"));
132
+ }
133
+ }
134
+ export class Message {
135
+ role;
136
+ content;
137
+ toolCallId;
138
+ toolCalls;
139
+ constructor(role, content, options = {}) {
140
+ this.role = role;
141
+ this.content = content;
142
+ this.toolCallId = options.toolCallId ?? null;
143
+ this.toolCalls = options.toolCalls ?? null;
144
+ }
145
+ static system(text) {
146
+ return new Message(Role.SYSTEM, text);
147
+ }
148
+ static user(text) {
149
+ return new Message(Role.USER, text);
150
+ }
151
+ static assistant(text) {
152
+ return new Message(Role.ASSISTANT, text);
153
+ }
154
+ static userParts(parts) {
155
+ return new Message(Role.USER, parts);
156
+ }
157
+ static tool(callId, result) {
158
+ return new Message(Role.TOOL, result, { toolCallId: callId });
159
+ }
160
+ get text() {
161
+ return contentText(this.content);
162
+ }
163
+ toWire() {
164
+ if (this.role === Role.TOOL && this.toolCallId === null) {
165
+ throw new Error("`toolCallId` is required when role is tool");
166
+ }
167
+ if (this.toolCallId !== null && this.role !== Role.TOOL) {
168
+ throw new Error("`toolCallId` is only valid when role is tool");
169
+ }
170
+ if (this.toolCalls !== null && this.role !== Role.ASSISTANT) {
171
+ throw new Error("`toolCalls` is only valid when role is assistant");
172
+ }
173
+ const encoded = { role: this.role, content: encodeContent(this.content) };
174
+ if (this.toolCallId !== null) {
175
+ encoded["tool_call_id"] = this.toolCallId;
176
+ }
177
+ if (this.toolCalls !== null) {
178
+ encoded["tool_calls"] = this.toolCalls.map((toolCall) => toolCall.toWire());
179
+ }
180
+ return encoded;
181
+ }
182
+ static fromWire(value) {
183
+ const fields = wire.mapping(value, "message");
184
+ const role = decodeRole(wire.string(fields, "role", "message"));
185
+ const contentWire = fields["content"];
186
+ let content;
187
+ if (contentWire === null || contentWire === undefined) {
188
+ if (role !== Role.ASSISTANT) {
189
+ throw new Error(`message.content is required for role ${role}`);
190
+ }
191
+ content = "";
192
+ }
193
+ else {
194
+ content = decodeContent(contentWire);
195
+ }
196
+ const toolCallsWire = wire.optionalArray(fields, "tool_calls", "message");
197
+ const toolCalls = toolCallsWire === null ? null : toolCallsWire.map((item) => ToolCall.fromWire(item));
198
+ return new Message(role, content, {
199
+ toolCallId: wire.optionalString(fields, "tool_call_id", "message"),
200
+ toolCalls,
201
+ });
202
+ }
203
+ }
204
+ export class PropertySchema {
205
+ type;
206
+ description;
207
+ constructor(type, description) {
208
+ const lowered = type.toLowerCase();
209
+ this.type = KNOWN_PROPERTY_TYPES.has(lowered) ? lowered : type;
210
+ this.description = description;
211
+ }
212
+ }
213
+ export class ToolParameters {
214
+ properties;
215
+ required;
216
+ constructor(properties, required = []) {
217
+ this.properties = properties;
218
+ this.required = required;
219
+ }
220
+ toWire() {
221
+ const encoded = {
222
+ type: "object",
223
+ properties: Object.fromEntries(Object.entries(this.properties).map(([name, schema]) => [
224
+ name,
225
+ { type: schema.type, description: schema.description },
226
+ ])),
227
+ };
228
+ if (this.required.length > 0) {
229
+ encoded["required"] = [...this.required];
230
+ }
231
+ return encoded;
232
+ }
233
+ }
234
+ export class Tool {
235
+ name;
236
+ description;
237
+ parameters;
238
+ constructor(name, description, parameters) {
239
+ this.name = name;
240
+ this.description = description;
241
+ this.parameters = parameters;
242
+ }
243
+ toWire() {
244
+ return {
245
+ type: "function",
246
+ function: {
247
+ name: this.name,
248
+ description: this.description,
249
+ parameters: this.parameters.toWire(),
250
+ },
251
+ };
252
+ }
253
+ }
@@ -0,0 +1,19 @@
1
+ import { SwitchboardError } from "./errors.js";
2
+ import { KIND_ANTHROPIC, KIND_OPENAI_GENERIC, KIND_OPENAI_PRO } from "./native.js";
3
+ export const WireFormat = {
4
+ ANTHROPIC_MESSAGES: "anthropic-messages",
5
+ OPENAI_COMPATIBLE: "openai-compat",
6
+ OPENAI_RESPONSES: "openai-responses",
7
+ };
8
+ const WIRE_FORMAT_TO_KIND = {
9
+ [WireFormat.ANTHROPIC_MESSAGES]: KIND_ANTHROPIC,
10
+ [WireFormat.OPENAI_COMPATIBLE]: KIND_OPENAI_GENERIC,
11
+ [WireFormat.OPENAI_RESPONSES]: KIND_OPENAI_PRO,
12
+ };
13
+ export function kindForWireFormat(wireFormat) {
14
+ const kind = WIRE_FORMAT_TO_KIND[wireFormat];
15
+ if (kind === undefined) {
16
+ throw new SwitchboardError(`Unknown wire format: ${wireFormat}`);
17
+ }
18
+ return kind;
19
+ }