dexto 1.14.6 → 2.0.0-beta.1

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 (297) hide show
  1. package/dist/agents/coding-agent/coding-agent.yml +0 -2
  2. package/dist/cli/agent-audit.d.ts +12 -0
  3. package/dist/cli/agent-audit.d.ts.map +1 -0
  4. package/dist/cli/agent-audit.js +52 -0
  5. package/dist/cli/auth/billing.d.ts +0 -6
  6. package/dist/cli/auth/billing.d.ts.map +1 -1
  7. package/dist/cli/auth/billing.js +0 -23
  8. package/dist/cli/auth/constants.d.ts +3 -31
  9. package/dist/cli/auth/constants.d.ts.map +1 -1
  10. package/dist/cli/auth/constants.js +9 -33
  11. package/dist/cli/auth/index.d.ts +2 -9
  12. package/dist/cli/auth/index.d.ts.map +1 -1
  13. package/dist/cli/auth/index.js +2 -7
  14. package/dist/cli/auth/sign-in-runtime.d.ts +12 -0
  15. package/dist/cli/auth/sign-in-runtime.d.ts.map +1 -0
  16. package/dist/cli/auth/sign-in-runtime.js +59 -0
  17. package/dist/cli/cloud/app-scopes.d.ts +4 -0
  18. package/dist/cli/cloud/app-scopes.d.ts.map +1 -0
  19. package/dist/cli/cloud/app-scopes.js +19 -0
  20. package/dist/cli/cloud/command.d.ts +107 -0
  21. package/dist/cli/cloud/command.d.ts.map +1 -0
  22. package/dist/cli/cloud/command.js +154 -0
  23. package/dist/cli/cloud/commands/account.d.ts +11 -0
  24. package/dist/cli/cloud/commands/account.d.ts.map +1 -0
  25. package/dist/cli/cloud/commands/account.js +129 -0
  26. package/dist/cli/cloud/commands/agents.d.ts +3 -0
  27. package/dist/cli/cloud/commands/agents.d.ts.map +1 -0
  28. package/dist/cli/cloud/commands/agents.js +526 -0
  29. package/dist/cli/cloud/commands/api.d.ts +3 -0
  30. package/dist/cli/cloud/commands/api.d.ts.map +1 -0
  31. package/dist/cli/cloud/commands/api.js +26 -0
  32. package/dist/cli/cloud/commands/app-files.d.ts +29 -0
  33. package/dist/cli/cloud/commands/app-files.d.ts.map +1 -0
  34. package/dist/cli/cloud/commands/app-files.js +72 -0
  35. package/dist/cli/cloud/commands/artifacts.d.ts +3 -0
  36. package/dist/cli/cloud/commands/artifacts.d.ts.map +1 -0
  37. package/dist/cli/cloud/commands/artifacts.js +267 -0
  38. package/dist/cli/cloud/commands/automations.d.ts +3 -0
  39. package/dist/cli/cloud/commands/automations.d.ts.map +1 -0
  40. package/dist/cli/cloud/commands/automations.js +233 -0
  41. package/dist/cli/cloud/commands/chats.d.ts +3 -0
  42. package/dist/cli/cloud/commands/chats.d.ts.map +1 -0
  43. package/dist/cli/cloud/commands/chats.js +204 -0
  44. package/dist/cli/cloud/commands/data-deletions.d.ts +3 -0
  45. package/dist/cli/cloud/commands/data-deletions.d.ts.map +1 -0
  46. package/dist/cli/cloud/commands/data-deletions.js +55 -0
  47. package/dist/cli/cloud/commands/deploys.d.ts +10 -0
  48. package/dist/cli/cloud/commands/deploys.d.ts.map +1 -0
  49. package/dist/cli/cloud/commands/deploys.js +225 -0
  50. package/dist/cli/cloud/commands/drive.d.ts +12 -0
  51. package/dist/cli/cloud/commands/drive.d.ts.map +1 -0
  52. package/dist/cli/cloud/commands/drive.js +321 -0
  53. package/dist/cli/cloud/commands/files.d.ts +24 -0
  54. package/dist/cli/cloud/commands/files.d.ts.map +1 -0
  55. package/dist/cli/cloud/commands/files.js +284 -0
  56. package/dist/cli/cloud/commands/find.d.ts +3 -0
  57. package/dist/cli/cloud/commands/find.d.ts.map +1 -0
  58. package/dist/cli/cloud/commands/find.js +63 -0
  59. package/dist/cli/cloud/commands/models.d.ts +3 -0
  60. package/dist/cli/cloud/commands/models.d.ts.map +1 -0
  61. package/dist/cli/cloud/commands/models.js +250 -0
  62. package/dist/cli/cloud/commands/profile.d.ts +3 -0
  63. package/dist/cli/cloud/commands/profile.d.ts.map +1 -0
  64. package/dist/cli/cloud/commands/profile.js +120 -0
  65. package/dist/cli/cloud/commands/projects.d.ts +5 -0
  66. package/dist/cli/cloud/commands/projects.d.ts.map +1 -0
  67. package/dist/cli/cloud/commands/projects.js +66 -0
  68. package/dist/cli/cloud/commands/publish.d.ts +3 -0
  69. package/dist/cli/cloud/commands/publish.d.ts.map +1 -0
  70. package/dist/cli/cloud/commands/publish.js +139 -0
  71. package/dist/cli/cloud/commands/sandboxes.d.ts +3 -0
  72. package/dist/cli/cloud/commands/sandboxes.d.ts.map +1 -0
  73. package/dist/cli/cloud/commands/sandboxes.js +266 -0
  74. package/dist/cli/cloud/commands/secrets.d.ts +3 -0
  75. package/dist/cli/cloud/commands/secrets.d.ts.map +1 -0
  76. package/dist/cli/cloud/commands/secrets.js +111 -0
  77. package/dist/cli/cloud/commands/skills.d.ts +3 -0
  78. package/dist/cli/cloud/commands/skills.d.ts.map +1 -0
  79. package/dist/cli/cloud/commands/skills.js +203 -0
  80. package/dist/cli/cloud/commands/traces.d.ts +3 -0
  81. package/dist/cli/cloud/commands/traces.d.ts.map +1 -0
  82. package/dist/cli/cloud/commands/traces.js +142 -0
  83. package/dist/cli/cloud/commands/web.d.ts +3 -0
  84. package/dist/cli/cloud/commands/web.d.ts.map +1 -0
  85. package/dist/cli/cloud/commands/web.js +53 -0
  86. package/dist/cli/cloud/commands/workspace-apps.d.ts +58 -0
  87. package/dist/cli/cloud/commands/workspace-apps.d.ts.map +1 -0
  88. package/dist/cli/cloud/commands/workspace-apps.js +657 -0
  89. package/dist/cli/cloud/commands/workspace.d.ts +36 -0
  90. package/dist/cli/cloud/commands/workspace.d.ts.map +1 -0
  91. package/dist/cli/cloud/commands/workspace.js +281 -0
  92. package/dist/cli/cloud/connection.d.ts +33 -0
  93. package/dist/cli/cloud/connection.d.ts.map +1 -0
  94. package/dist/cli/cloud/connection.js +38 -0
  95. package/dist/cli/cloud/events.d.ts +63 -0
  96. package/dist/cli/cloud/events.d.ts.map +1 -0
  97. package/dist/cli/cloud/events.js +72 -0
  98. package/dist/cli/cloud/host.d.ts +9 -0
  99. package/dist/cli/cloud/host.d.ts.map +1 -0
  100. package/dist/cli/cloud/host.js +109 -0
  101. package/dist/cli/cloud/output.d.ts +34 -0
  102. package/dist/cli/cloud/output.d.ts.map +1 -0
  103. package/dist/cli/cloud/output.js +77 -0
  104. package/dist/cli/cloud/run.d.ts +26 -0
  105. package/dist/cli/cloud/run.d.ts.map +1 -0
  106. package/dist/cli/cloud/run.js +444 -0
  107. package/dist/cli/cloud/runtime.d.ts +33 -0
  108. package/dist/cli/cloud/runtime.d.ts.map +1 -0
  109. package/dist/cli/cloud/runtime.js +86 -0
  110. package/dist/cli/cloud/tar.d.ts +9 -0
  111. package/dist/cli/cloud/tar.d.ts.map +1 -0
  112. package/dist/cli/cloud/tar.js +69 -0
  113. package/dist/cli/cloud/transfer.d.ts +13 -0
  114. package/dist/cli/cloud/transfer.d.ts.map +1 -0
  115. package/dist/cli/cloud/transfer.js +36 -0
  116. package/dist/cli/cloud/v1.d.ts +20 -0
  117. package/dist/cli/cloud/v1.d.ts.map +1 -0
  118. package/dist/cli/cloud/v1.js +66 -0
  119. package/dist/cli/cloud/zip.d.ts +8 -0
  120. package/dist/cli/cloud/zip.d.ts.map +1 -0
  121. package/dist/cli/cloud/zip.js +66 -0
  122. package/dist/cli/commands/auth/sign-in-commands.d.ts +62 -0
  123. package/dist/cli/commands/auth/sign-in-commands.d.ts.map +1 -0
  124. package/dist/cli/commands/auth/sign-in-commands.js +248 -0
  125. package/dist/cli/commands/auth/sign-in-context.d.ts +16 -0
  126. package/dist/cli/commands/auth/sign-in-context.d.ts.map +1 -0
  127. package/dist/cli/commands/auth/sign-in-context.js +68 -0
  128. package/dist/cli/commands/cloud/register.d.ts +5 -0
  129. package/dist/cli/commands/cloud/register.d.ts.map +1 -1
  130. package/dist/cli/commands/cloud/register.js +44 -24
  131. package/dist/cli/commands/create-app.js +5 -6
  132. package/dist/cli/commands/create-image.d.ts.map +1 -1
  133. package/dist/cli/commands/create-image.js +9 -10
  134. package/dist/cli/commands/index.d.ts +0 -2
  135. package/dist/cli/commands/index.d.ts.map +1 -1
  136. package/dist/cli/commands/index.js +0 -2
  137. package/dist/cli/commands/init.d.ts +0 -2
  138. package/dist/cli/commands/init.d.ts.map +1 -1
  139. package/dist/cli/commands/init.js +5 -26
  140. package/dist/cli/commands/run/headless.d.ts.map +1 -1
  141. package/dist/cli/commands/run/headless.js +57 -2
  142. package/dist/cli/commands/run/output.d.ts +29 -10
  143. package/dist/cli/commands/run/output.d.ts.map +1 -1
  144. package/dist/cli/commands/run/output.js +44 -22
  145. package/dist/cli/commands/run/register.d.ts.map +1 -1
  146. package/dist/cli/commands/run/register.js +21 -9
  147. package/dist/cli/commands/run/step-log.d.ts +11 -0
  148. package/dist/cli/commands/run/step-log.d.ts.map +1 -0
  149. package/dist/cli/commands/run/step-log.js +42 -0
  150. package/dist/cli/commands/session/register.d.ts.map +1 -1
  151. package/dist/cli/commands/session/register.js +51 -21
  152. package/dist/cli/commands/session-commands.js +1 -1
  153. package/dist/cli/commands/setup.js +17 -14
  154. package/dist/cli/failure.d.ts +29 -0
  155. package/dist/cli/failure.d.ts.map +1 -0
  156. package/dist/cli/failure.js +31 -0
  157. package/dist/cli/help-json.d.ts +22 -0
  158. package/dist/cli/help-json.d.ts.map +1 -0
  159. package/dist/cli/help-json.js +20 -0
  160. package/dist/cli/import/claude-code.d.ts +10 -0
  161. package/dist/cli/import/claude-code.d.ts.map +1 -0
  162. package/dist/cli/import/claude-code.js +131 -0
  163. package/dist/cli/import/codex.d.ts +27 -0
  164. package/dist/cli/import/codex.d.ts.map +1 -0
  165. package/dist/cli/import/codex.js +148 -0
  166. package/dist/cli/import/git.d.ts +19 -0
  167. package/dist/cli/import/git.d.ts.map +1 -0
  168. package/dist/cli/import/git.js +95 -0
  169. package/dist/cli/import/local-chats.d.ts +28 -0
  170. package/dist/cli/import/local-chats.d.ts.map +1 -0
  171. package/dist/cli/import/local-chats.js +129 -0
  172. package/dist/cli/import/redaction.d.ts +37 -0
  173. package/dist/cli/import/redaction.d.ts.map +1 -0
  174. package/dist/cli/import/redaction.js +148 -0
  175. package/dist/cli/import/test-utils.d.ts +16 -0
  176. package/dist/cli/import/test-utils.d.ts.map +1 -0
  177. package/dist/cli/import/test-utils.js +223 -0
  178. package/dist/cli/import/transcript.d.ts +75 -0
  179. package/dist/cli/import/transcript.d.ts.map +1 -0
  180. package/dist/cli/import/transcript.js +123 -0
  181. package/dist/cli/interaction.d.ts +18 -0
  182. package/dist/cli/interaction.d.ts.map +1 -0
  183. package/dist/cli/interaction.js +30 -0
  184. package/dist/cli/modes/cli.d.ts.map +1 -1
  185. package/dist/cli/modes/cli.js +42 -9
  186. package/dist/cli/modes/server.js +8 -8
  187. package/dist/cli/modes/web.js +3 -3
  188. package/dist/cli/output.d.ts +9 -0
  189. package/dist/cli/output.d.ts.map +1 -0
  190. package/dist/cli/output.js +6 -0
  191. package/dist/cli/utils/dexto-auth-check.d.ts +1 -1
  192. package/dist/cli/utils/dexto-auth-check.d.ts.map +1 -1
  193. package/dist/cli/utils/dexto-auth-check.js +4 -5
  194. package/dist/cli/utils/dexto-setup.d.ts +4 -5
  195. package/dist/cli/utils/dexto-setup.d.ts.map +1 -1
  196. package/dist/cli/utils/dexto-setup.js +17 -14
  197. package/dist/cli/utils/provider-setup.js +1 -1
  198. package/dist/cli/utils/scaffolding-utils.d.ts +9 -3
  199. package/dist/cli/utils/scaffolding-utils.d.ts.map +1 -1
  200. package/dist/cli/utils/scaffolding-utils.js +48 -40
  201. package/dist/cli/utils/version-check.d.ts.map +1 -1
  202. package/dist/cli/utils/version-check.js +2 -1
  203. package/dist/index-main.js +44 -65
  204. package/dist/webui/assets/index-D9xiOs62.js +1649 -0
  205. package/dist/webui/index.html +1 -1
  206. package/package.json +15 -14
  207. package/dist/cli/auth/api-client.d.ts +0 -125
  208. package/dist/cli/auth/api-client.d.ts.map +0 -1
  209. package/dist/cli/auth/api-client.js +0 -585
  210. package/dist/cli/auth/device.d.ts +0 -14
  211. package/dist/cli/auth/device.d.ts.map +0 -1
  212. package/dist/cli/auth/device.js +0 -84
  213. package/dist/cli/auth/dexto-api-key.d.ts +0 -34
  214. package/dist/cli/auth/dexto-api-key.d.ts.map +0 -1
  215. package/dist/cli/auth/dexto-api-key.js +0 -160
  216. package/dist/cli/auth/login-persistence.d.ts +0 -15
  217. package/dist/cli/auth/login-persistence.d.ts.map +0 -1
  218. package/dist/cli/auth/login-persistence.js +0 -72
  219. package/dist/cli/auth/oauth.d.ts +0 -39
  220. package/dist/cli/auth/oauth.d.ts.map +0 -1
  221. package/dist/cli/auth/oauth.js +0 -434
  222. package/dist/cli/auth/service.d.ts +0 -24
  223. package/dist/cli/auth/service.d.ts.map +0 -1
  224. package/dist/cli/auth/service.js +0 -161
  225. package/dist/cli/auth/types.d.ts +0 -11
  226. package/dist/cli/auth/types.d.ts.map +0 -1
  227. package/dist/cli/auth/types.js +0 -1
  228. package/dist/cli/cloud-chat.d.ts +0 -18
  229. package/dist/cli/cloud-chat.d.ts.map +0 -1
  230. package/dist/cli/cloud-chat.js +0 -734
  231. package/dist/cli/commands/auth/index.d.ts +0 -4
  232. package/dist/cli/commands/auth/index.d.ts.map +0 -1
  233. package/dist/cli/commands/auth/index.js +0 -4
  234. package/dist/cli/commands/auth/login.d.ts +0 -12
  235. package/dist/cli/commands/auth/login.d.ts.map +0 -1
  236. package/dist/cli/commands/auth/login.js +0 -153
  237. package/dist/cli/commands/auth/logout.d.ts +0 -5
  238. package/dist/cli/commands/auth/logout.d.ts.map +0 -1
  239. package/dist/cli/commands/auth/logout.js +0 -81
  240. package/dist/cli/commands/auth/register.d.ts +0 -3
  241. package/dist/cli/commands/auth/register.d.ts.map +0 -1
  242. package/dist/cli/commands/auth/register.js +0 -96
  243. package/dist/cli/commands/auth/status.d.ts +0 -2
  244. package/dist/cli/commands/auth/status.d.ts.map +0 -1
  245. package/dist/cli/commands/auth/status.js +0 -22
  246. package/dist/cli/commands/billing/index.d.ts +0 -2
  247. package/dist/cli/commands/billing/index.d.ts.map +0 -1
  248. package/dist/cli/commands/billing/index.js +0 -2
  249. package/dist/cli/commands/billing/register.d.ts +0 -3
  250. package/dist/cli/commands/billing/register.d.ts.map +0 -1
  251. package/dist/cli/commands/billing/register.js +0 -20
  252. package/dist/cli/commands/billing/status.d.ts +0 -8
  253. package/dist/cli/commands/billing/status.d.ts.map +0 -1
  254. package/dist/cli/commands/billing/status.js +0 -71
  255. package/dist/cli/commands/cloud/discovery.d.ts +0 -17
  256. package/dist/cli/commands/cloud/discovery.d.ts.map +0 -1
  257. package/dist/cli/commands/cloud/discovery.js +0 -88
  258. package/dist/cli/commands/deploy/client.d.ts +0 -113
  259. package/dist/cli/commands/deploy/client.d.ts.map +0 -1
  260. package/dist/cli/commands/deploy/client.js +0 -519
  261. package/dist/cli/commands/deploy/config.d.ts +0 -37
  262. package/dist/cli/commands/deploy/config.d.ts.map +0 -1
  263. package/dist/cli/commands/deploy/config.js +0 -144
  264. package/dist/cli/commands/deploy/entry-agent.d.ts +0 -3
  265. package/dist/cli/commands/deploy/entry-agent.d.ts.map +0 -1
  266. package/dist/cli/commands/deploy/entry-agent.js +0 -70
  267. package/dist/cli/commands/deploy/index.d.ts +0 -12
  268. package/dist/cli/commands/deploy/index.d.ts.map +0 -1
  269. package/dist/cli/commands/deploy/index.js +0 -370
  270. package/dist/cli/commands/deploy/links.d.ts +0 -3
  271. package/dist/cli/commands/deploy/links.d.ts.map +0 -1
  272. package/dist/cli/commands/deploy/links.js +0 -53
  273. package/dist/cli/commands/deploy/register.d.ts +0 -6
  274. package/dist/cli/commands/deploy/register.d.ts.map +0 -1
  275. package/dist/cli/commands/deploy/register.js +0 -128
  276. package/dist/cli/commands/deploy/snapshot.d.ts +0 -12
  277. package/dist/cli/commands/deploy/snapshot.d.ts.map +0 -1
  278. package/dist/cli/commands/deploy/snapshot.js +0 -76
  279. package/dist/cli/commands/deploy/state.d.ts +0 -13
  280. package/dist/cli/commands/deploy/state.d.ts.map +0 -1
  281. package/dist/cli/commands/deploy/state.js +0 -122
  282. package/dist/cli/commands/span/register.d.ts +0 -6
  283. package/dist/cli/commands/span/register.d.ts.map +0 -1
  284. package/dist/cli/commands/span/register.js +0 -25
  285. package/dist/cli/commands/trace/client.d.ts +0 -98
  286. package/dist/cli/commands/trace/client.d.ts.map +0 -1
  287. package/dist/cli/commands/trace/client.js +0 -150
  288. package/dist/cli/commands/trace/format.d.ts +0 -5
  289. package/dist/cli/commands/trace/format.d.ts.map +0 -1
  290. package/dist/cli/commands/trace/format.js +0 -58
  291. package/dist/cli/commands/trace/index.d.ts +0 -21
  292. package/dist/cli/commands/trace/index.d.ts.map +0 -1
  293. package/dist/cli/commands/trace/index.js +0 -49
  294. package/dist/cli/commands/trace/register.d.ts +0 -6
  295. package/dist/cli/commands/trace/register.d.ts.map +0 -1
  296. package/dist/cli/commands/trace/register.js +0 -71
  297. package/dist/webui/assets/index-DEfRFmFT.js +0 -1667
@@ -0,0 +1,86 @@
1
+ // The process the cloud commands run in, injected so tests drive the public command boundary.
2
+ import { spawn } from 'node:child_process';
3
+ import { homedir } from 'node:os';
4
+ import { createInterface } from 'node:readline/promises';
5
+ import { setTimeout as delay } from 'node:timers/promises';
6
+ import chalk from 'chalk';
7
+ export function nodeCloudRuntime(signal) {
8
+ return {
9
+ color: process.stdout.isTTY === true && chalk.level > 0,
10
+ environment: process.env,
11
+ fetch: globalThis.fetch.bind(globalThis),
12
+ homeDirectory: homedir(),
13
+ prompt: process.stdin.isTTY === true ? promptAtTerminal : null,
14
+ readStdin: async () => {
15
+ const chunks = [];
16
+ for await (const chunk of process.stdin)
17
+ chunks.push(Buffer.from(chunk));
18
+ return Buffer.concat(chunks).toString('utf8');
19
+ },
20
+ runProcess: (command, args, options) => runProcess(command, args, options.cwd, signal),
21
+ signal,
22
+ sleep: (ms) => delay(ms, undefined, { signal }),
23
+ stdoutIsTerminal: process.stdout.isTTY === true,
24
+ writeBytes: (chunk) => new Promise((resolve, reject) => process.stdout.write(chunk, (error) => (error ? reject(error) : resolve()))),
25
+ writeError: (text) => {
26
+ process.stderr.write(text);
27
+ },
28
+ writeOutput: (text) => {
29
+ process.stdout.write(text);
30
+ },
31
+ };
32
+ }
33
+ function runProcess(command, args, cwd, signal) {
34
+ return new Promise((resolve, reject) => {
35
+ const child = spawn(command, args, { cwd, signal, stdio: ['ignore', 'pipe', 'pipe'] });
36
+ let output = '';
37
+ child.stdout.on('data', (chunk) => (output += chunk.toString('utf8')));
38
+ child.stderr.on('data', (chunk) => (output += chunk.toString('utf8')));
39
+ child.once('error', reject);
40
+ child.once('close', (code) => resolve({ exitCode: code ?? 1, output }));
41
+ });
42
+ }
43
+ async function promptAtTerminal(question, options) {
44
+ if (options.secret)
45
+ return await readHidden(question);
46
+ const readline = createInterface({ input: process.stdin, output: process.stderr });
47
+ try {
48
+ return await readline.question(question);
49
+ }
50
+ finally {
51
+ readline.close();
52
+ }
53
+ }
54
+ /** Reads a line without echoing it, for API keys and secret values. */
55
+ function readHidden(question) {
56
+ return new Promise((resolve, reject) => {
57
+ const input = process.stdin;
58
+ let value = '';
59
+ const finish = (error) => {
60
+ input.off('data', onData);
61
+ input.setRawMode(false);
62
+ input.pause();
63
+ process.stderr.write('\n');
64
+ if (error === null)
65
+ resolve(value);
66
+ else
67
+ reject(error);
68
+ };
69
+ const onData = (chunk) => {
70
+ for (const character of chunk.toString('utf8')) {
71
+ if (character === '\r' || character === '\n')
72
+ return finish(null);
73
+ if (character === '\u0003')
74
+ return finish(new Error('Cancelled.'));
75
+ if (character === '\u007f' || character === '\b')
76
+ value = value.slice(0, -1);
77
+ else
78
+ value += character;
79
+ }
80
+ };
81
+ process.stderr.write(question);
82
+ input.setRawMode(true);
83
+ input.resume();
84
+ input.on('data', onData);
85
+ });
86
+ }
@@ -0,0 +1,9 @@
1
+ export interface TarFile {
2
+ readonly bytes: Uint8Array;
3
+ readonly executable: boolean;
4
+ /** Relative, with `/` between segments. */
5
+ readonly path: string;
6
+ }
7
+ /** The archive of these files in order, closed by its two empty blocks. */
8
+ export declare function tarArchive(files: readonly TarFile[]): Uint8Array<ArrayBuffer>;
9
+ //# sourceMappingURL=tar.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tar.d.ts","sourceRoot":"","sources":["../../../src/cli/cloud/tar.ts"],"names":[],"mappings":"AAKA,MAAM,WAAW,OAAO;IACpB,QAAQ,CAAC,KAAK,EAAE,UAAU,CAAC;IAC3B,QAAQ,CAAC,UAAU,EAAE,OAAO,CAAC;IAC7B,2CAA2C;IAC3C,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;CACzB;AAED,2EAA2E;AAC3E,wBAAgB,UAAU,CAAC,KAAK,EAAE,SAAS,OAAO,EAAE,GAAG,UAAU,CAAC,WAAW,CAAC,CA6B7E"}
@@ -0,0 +1,69 @@
1
+ // Writes a POSIX ustar archive as Dexto's Skill bundle import reads one: files, PAX for long paths.
2
+ const BLOCK_BYTES = 512;
3
+ const encoder = new globalThis.TextEncoder();
4
+ /** The archive of these files in order, closed by its two empty blocks. */
5
+ export function tarArchive(files) {
6
+ const blocks = [];
7
+ for (const [index, file] of files.entries()) {
8
+ // A path past the 100-byte name field rides in a PAX header for the entry after it.
9
+ const pax = paxPathBody(file.path);
10
+ if (pax !== null)
11
+ blocks.push(tarHeader({
12
+ mode: 0o644,
13
+ name: `PaxHeaders/${index}`,
14
+ size: pax.length,
15
+ type: 'x',
16
+ }), pax, padding(pax.length));
17
+ blocks.push(tarHeader({
18
+ mode: file.executable ? 0o755 : 0o644,
19
+ name: pax === null ? file.path : `file-${index}`,
20
+ size: file.bytes.length,
21
+ type: '0',
22
+ }), file.bytes, padding(file.bytes.length));
23
+ }
24
+ blocks.push(new Uint8Array(BLOCK_BYTES * 2));
25
+ return Buffer.concat(blocks);
26
+ }
27
+ function tarHeader(input) {
28
+ const header = new Uint8Array(BLOCK_BYTES);
29
+ writeText(header, 0, 100, input.name);
30
+ writeOctal(header, 100, 8, input.mode);
31
+ writeOctal(header, 108, 8, 0);
32
+ writeOctal(header, 116, 8, 0);
33
+ writeOctal(header, 124, 12, input.size);
34
+ writeOctal(header, 136, 12, 0);
35
+ // The checksum counts its own field as spaces.
36
+ header.fill(0x20, 148, 156);
37
+ writeText(header, 156, 1, input.type);
38
+ writeText(header, 257, 6, 'ustar');
39
+ writeText(header, 263, 2, '00');
40
+ const checksum = header.reduce((total, byte) => total + byte, 0);
41
+ writeText(header, 148, 6, checksum.toString(8).padStart(6, '0'));
42
+ header[154] = 0;
43
+ header[155] = 0x20;
44
+ return header;
45
+ }
46
+ function writeText(target, offset, length, value) {
47
+ const bytes = encoder.encode(value);
48
+ if (bytes.length > length)
49
+ throw new Error(`Tar header value is too long: ${value}`);
50
+ target.set(bytes, offset);
51
+ }
52
+ function writeOctal(target, offset, length, value) {
53
+ writeText(target, offset, length, `${value.toString(8).padStart(length - 1, '0')}\0`);
54
+ }
55
+ /** `<length> path=<path>\n`, whose length counts its own digits; null when the name field fits. */
56
+ function paxPathBody(path) {
57
+ if (encoder.encode(path).length <= 100)
58
+ return null;
59
+ let length = encoder.encode(` path=${path}\n`).length + 1;
60
+ for (;;) {
61
+ const record = encoder.encode(`${length} path=${path}\n`);
62
+ if (record.length === length)
63
+ return record;
64
+ length = record.length;
65
+ }
66
+ }
67
+ function padding(size) {
68
+ return new Uint8Array(Math.ceil(size / BLOCK_BYTES) * BLOCK_BYTES - size);
69
+ }
@@ -0,0 +1,13 @@
1
+ import { type CommandContext } from './command.js';
2
+ /** Where the bytes go: a short-lived URL, its method and the headers it expects. */
3
+ export interface TransferTarget {
4
+ readonly headers: Readonly<Record<string, string>>;
5
+ readonly method: string;
6
+ readonly url: string;
7
+ }
8
+ /**
9
+ * Streams `body` to the target with its length, and returns the JSON reply (null when there is
10
+ * none). A refusal fails with the server's own message.
11
+ */
12
+ export declare function sendBytes(context: CommandContext, target: TransferTarget, body: globalThis.Blob): Promise<unknown>;
13
+ //# sourceMappingURL=transfer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"transfer.d.ts","sourceRoot":"","sources":["../../../src/cli/cloud/transfer.ts"],"names":[],"mappings":"AAIA,OAAO,EAAgB,KAAK,cAAc,EAAE,MAAM,cAAc,CAAC;AAEjE,oFAAoF;AACpF,MAAM,WAAW,cAAc;IAC3B,QAAQ,CAAC,OAAO,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;IACnD,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;CACxB;AAED;;;GAGG;AACH,wBAAsB,SAAS,CAC3B,OAAO,EAAE,cAAc,EACvB,MAAM,EAAE,cAAc,EACtB,IAAI,EAAE,UAAU,CAAC,IAAI,GACtB,OAAO,CAAC,OAAO,CAAC,CAelB"}
@@ -0,0 +1,36 @@
1
+ // Sends local bytes to a URL the server handed out for them, outside MCP JSON.
2
+ import { CommandFailure } from '../failure.js';
3
+ import { isJsonObject } from './command.js';
4
+ /**
5
+ * Streams `body` to the target with its length, and returns the JSON reply (null when there is
6
+ * none). A refusal fails with the server's own message.
7
+ */
8
+ export async function sendBytes(context, target, body) {
9
+ const response = await context.runtime.fetch(target.url, {
10
+ body,
11
+ headers: { ...target.headers, 'content-length': String(body.size) },
12
+ method: target.method,
13
+ signal: context.runtime.signal,
14
+ });
15
+ const text = await response.text();
16
+ const parsed = parseJson(text);
17
+ if (response.ok)
18
+ return parsed;
19
+ throw new CommandFailure(response.status === 404 ? 'not_found' : 'failed', `The upload was refused (HTTP ${response.status}): ${refusalMessage(parsed) ?? (text || 'no reason given')}`, null);
20
+ }
21
+ function parseJson(text) {
22
+ try {
23
+ return JSON.parse(text);
24
+ }
25
+ catch {
26
+ return null;
27
+ }
28
+ }
29
+ /** `{"error":{"message"}}` from the API, or `{"error_description"}` from an upload route. */
30
+ function refusalMessage(body) {
31
+ if (!isJsonObject(body))
32
+ return null;
33
+ if (isJsonObject(body.error) && typeof body.error.message === 'string')
34
+ return body.error.message;
35
+ return typeof body.error_description === 'string' ? body.error_description : null;
36
+ }
@@ -0,0 +1,20 @@
1
+ import { CommandFailure } from '../failure.js';
2
+ import { type CommandContext, type SignInContext } from './command.js';
3
+ /**
4
+ * Sends one request to a `/v1` path with the sign-in's credential and Cloud project. The path is
5
+ * resolved against the API and checked, so no path can send the credential elsewhere.
6
+ */
7
+ export declare function fetchV1(context: CommandContext, method: string, requestPath: string, body: string | null): Promise<Response>;
8
+ /**
9
+ * Sends one request to a `/v1` path with its own headers and body, such as a file or a request
10
+ * for an event stream; `signal` ends it early.
11
+ */
12
+ export declare function sendV1(context: CommandContext, method: string, requestPath: string, content: {
13
+ readonly body: string | globalThis.Blob | null;
14
+ readonly headers: Readonly<Record<string, string>>;
15
+ } | null, signal?: AbortSignal): Promise<Response>;
16
+ /** As `fetchV1`, returning the JSON body of a success and failing with the error's kind otherwise. */
17
+ export declare function callV1(context: CommandContext, method: string, requestPath: string, body: string | null): Promise<unknown>;
18
+ /** A failed call as the contract's failure, by its status and the error's message. */
19
+ export declare function v1Failure(context: SignInContext, status: number, text: string): CommandFailure;
20
+ //# sourceMappingURL=v1.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"v1.d.ts","sourceRoot":"","sources":["../../../src/cli/cloud/v1.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAE/C,OAAO,EAIH,KAAK,cAAc,EACnB,KAAK,aAAa,EACrB,MAAM,cAAc,CAAC;AAEtB;;;GAGG;AACH,wBAAsB,OAAO,CACzB,OAAO,EAAE,cAAc,EACvB,MAAM,EAAE,MAAM,EACd,WAAW,EAAE,MAAM,EACnB,IAAI,EAAE,MAAM,GAAG,IAAI,GACpB,OAAO,CAAC,QAAQ,CAAC,CAOnB;AAED;;;GAGG;AACH,wBAAsB,MAAM,CACxB,OAAO,EAAE,cAAc,EACvB,MAAM,EAAE,MAAM,EACd,WAAW,EAAE,MAAM,EACnB,OAAO,EAAE;IACL,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,UAAU,CAAC,IAAI,GAAG,IAAI,CAAC;IAC/C,QAAQ,CAAC,OAAO,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;CACtD,GAAG,IAAI,EACR,MAAM,GAAE,WAAoC,GAC7C,OAAO,CAAC,QAAQ,CAAC,CAsBnB;AAED,sGAAsG;AACtG,wBAAsB,MAAM,CACxB,OAAO,EAAE,cAAc,EACvB,MAAM,EAAE,MAAM,EACd,WAAW,EAAE,MAAM,EACnB,IAAI,EAAE,MAAM,GAAG,IAAI,GACpB,OAAO,CAAC,OAAO,CAAC,CAKlB;AAED,sFAAsF;AACtF,wBAAgB,SAAS,CAAC,OAAO,EAAE,aAAa,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,cAAc,CA0B9F"}
@@ -0,0 +1,66 @@
1
+ // Calls the public /v1 API as the sign-in, for `cloud api` and what the typed client does not cover.
2
+ import { CommandFailure } from '../failure.js';
3
+ import { isJsonObject, signInCommand, UsageError, } from './command.js';
4
+ /**
5
+ * Sends one request to a `/v1` path with the sign-in's credential and Cloud project. The path is
6
+ * resolved against the API and checked, so no path can send the credential elsewhere.
7
+ */
8
+ export async function fetchV1(context, method, requestPath, body) {
9
+ return await sendV1(context, method, requestPath, body === null ? null : { body, headers: { 'content-type': 'application/json' } });
10
+ }
11
+ /**
12
+ * Sends one request to a `/v1` path with its own headers and body, such as a file or a request
13
+ * for an event stream; `signal` ends it early.
14
+ */
15
+ export async function sendV1(context, method, requestPath, content, signal = context.runtime.signal) {
16
+ const connection = await context.connection();
17
+ const apiOrigin = new URL(connection.apiBaseUrl).origin;
18
+ const url = new URL(requestPath, `${connection.apiBaseUrl}/`);
19
+ if (!requestPath.startsWith('/v1/') ||
20
+ url.origin !== apiOrigin ||
21
+ !url.pathname.startsWith('/v1/'))
22
+ throw new UsageError('The path must start with /v1/; the CLI only calls the public API.');
23
+ return await context.runtime.fetch(url, {
24
+ headers: {
25
+ ...content?.headers,
26
+ authorization: `Bearer ${connection.token}`,
27
+ ...(connection.kind === 'oauth' && connection.cloudProject !== null
28
+ ? { 'dexto-cloud-project': connection.cloudProject }
29
+ : {}),
30
+ },
31
+ method,
32
+ ...(content === null || content.body === null ? {} : { body: content.body }),
33
+ signal,
34
+ });
35
+ }
36
+ /** As `fetchV1`, returning the JSON body of a success and failing with the error's kind otherwise. */
37
+ export async function callV1(context, method, requestPath, body) {
38
+ const response = await fetchV1(context, method, requestPath, body);
39
+ const text = await response.text();
40
+ if (!response.ok)
41
+ throw v1Failure(context, response.status, text);
42
+ return JSON.parse(text);
43
+ }
44
+ /** A failed call as the contract's failure, by its status and the error's message. */
45
+ export function v1Failure(context, status, text) {
46
+ let message = `HTTP ${status}`;
47
+ try {
48
+ const body = JSON.parse(text);
49
+ if (isJsonObject(body) &&
50
+ isJsonObject(body.error) &&
51
+ typeof body.error.message === 'string')
52
+ message = `HTTP ${status}: ${body.error.message}`;
53
+ }
54
+ catch {
55
+ // Not JSON: the status says enough.
56
+ }
57
+ if (status === 401)
58
+ return new CommandFailure('needs_sign_in', message, signInCommand(context, null));
59
+ return new CommandFailure(status === 403
60
+ ? 'needs_permission'
61
+ : status === 404
62
+ ? 'not_found'
63
+ : status === 400 || status === 413 || status === 422
64
+ ? 'invalid_input'
65
+ : 'failed', message, null);
66
+ }
@@ -0,0 +1,8 @@
1
+ export interface ZipFile {
2
+ readonly bytes: Uint8Array;
3
+ /** Relative, with `/` between folders. */
4
+ readonly path: string;
5
+ }
6
+ /** The archive of these files in order, with its central directory. */
7
+ export declare function zipArchive(files: readonly ZipFile[]): Uint8Array<ArrayBuffer>;
8
+ //# sourceMappingURL=zip.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"zip.d.ts","sourceRoot":"","sources":["../../../src/cli/cloud/zip.ts"],"names":[],"mappings":"AAUA,MAAM,WAAW,OAAO;IACpB,QAAQ,CAAC,KAAK,EAAE,UAAU,CAAC;IAC3B,0CAA0C;IAC1C,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;CACzB;AAED,uEAAuE;AACvE,wBAAgB,UAAU,CAAC,KAAK,EAAE,SAAS,OAAO,EAAE,GAAG,UAAU,CAAC,WAAW,CAAC,CAqC7E"}
@@ -0,0 +1,66 @@
1
+ // Writes a .zip of files, as Dexto takes files to publish: each deflated unless that's no smaller.
2
+ import { crc32, deflateRawSync } from 'node:zlib';
3
+ const encoder = new globalThis.TextEncoder();
4
+ /** 1980-01-01, the first date a .zip can hold, so the same files make the same archive. */
5
+ const DOS_DATE = 0x21;
6
+ /** Entry names are UTF-8. */
7
+ const UTF8_FLAG = 0x0800;
8
+ /** The archive of these files in order, with its central directory. */
9
+ export function zipArchive(files) {
10
+ const parts = [];
11
+ const directory = [];
12
+ let offset = 0;
13
+ for (const file of files) {
14
+ const name = encoder.encode(file.path);
15
+ const deflated = deflateRawSync(file.bytes);
16
+ const stored = deflated.byteLength >= file.bytes.byteLength;
17
+ const body = stored ? file.bytes : deflated;
18
+ const entry = {
19
+ checksum: crc32(file.bytes),
20
+ method: stored ? 0 : 8,
21
+ nameLength: name.byteLength,
22
+ size: body.byteLength,
23
+ unpackedSize: file.bytes.byteLength,
24
+ };
25
+ const local = new DataView(new ArrayBuffer(30));
26
+ local.setUint32(0, 0x04034b50, true);
27
+ writeEntryFields(local, 4, entry);
28
+ parts.push(new Uint8Array(local.buffer), name, body);
29
+ const central = new DataView(new ArrayBuffer(46));
30
+ central.setUint32(0, 0x02014b50, true);
31
+ central.setUint16(4, 20, true);
32
+ writeEntryFields(central, 6, entry);
33
+ central.setUint32(42, offset, true);
34
+ directory.push(new Uint8Array(central.buffer), name);
35
+ offset += 30 + name.byteLength + body.byteLength;
36
+ }
37
+ const directorySize = directory.reduce((total, part) => total + part.byteLength, 0);
38
+ const end = new DataView(new ArrayBuffer(22));
39
+ end.setUint32(0, 0x06054b50, true);
40
+ end.setUint16(8, files.length, true);
41
+ end.setUint16(10, files.length, true);
42
+ end.setUint32(12, directorySize, true);
43
+ end.setUint32(16, offset, true);
44
+ return concat([...parts, ...directory, new Uint8Array(end.buffer)]);
45
+ }
46
+ /** The fields a local header and a central directory entry share, from the version needed on. */
47
+ function writeEntryFields(view, at, entry) {
48
+ view.setUint16(at, 20, true);
49
+ view.setUint16(at + 2, UTF8_FLAG, true);
50
+ view.setUint16(at + 4, entry.method, true);
51
+ view.setUint16(at + 6, 0, true);
52
+ view.setUint16(at + 8, DOS_DATE, true);
53
+ view.setUint32(at + 10, entry.checksum, true);
54
+ view.setUint32(at + 14, entry.size, true);
55
+ view.setUint32(at + 18, entry.unpackedSize, true);
56
+ view.setUint16(at + 22, entry.nameLength, true);
57
+ }
58
+ function concat(parts) {
59
+ const out = new Uint8Array(parts.reduce((total, part) => total + part.byteLength, 0));
60
+ let at = 0;
61
+ for (const part of parts) {
62
+ out.set(part, at);
63
+ at += part.byteLength;
64
+ }
65
+ return out;
66
+ }
@@ -0,0 +1,62 @@
1
+ import { dextoAccounts, type dextoCloud, type dextoSignIn } from '@dexto/agent-management';
2
+ type OAuthLogin = dextoAccounts.OAuthLogin;
3
+ type CloudProject = dextoCloud.CloudProject;
4
+ type BrowserSignInInput = dextoSignIn.BrowserSignInInput;
5
+ type EndedSignIn = dextoSignIn.EndedSignIn;
6
+ type SignInInput = dextoSignIn.SignInInput;
7
+ /** Dexto's side of signing in, injected so commands can be tested without a server. */
8
+ export interface DextoSignIn {
9
+ readonly signInWithBrowser: (input: BrowserSignInInput) => Promise<OAuthLogin>;
10
+ readonly signInWithDevice: (input: SignInInput) => Promise<OAuthLogin>;
11
+ readonly endSignIn: (login: OAuthLogin) => Promise<EndedSignIn>;
12
+ readonly refreshSignIn: (login: OAuthLogin) => Promise<OAuthLogin>;
13
+ /** The Cloud projects the signed-in organization has. */
14
+ readonly listProjects: (login: OAuthLogin) => Promise<readonly CloudProject[]>;
15
+ /** Whether the public API accepts the key; false on 401. */
16
+ readonly acceptsApiKey: (apiBaseUrl: string, apiKey: string) => Promise<boolean>;
17
+ }
18
+ export interface SignInContext {
19
+ /** ~/.dexto/accounts */
20
+ readonly dir: string;
21
+ readonly environment: Readonly<Record<string, string | undefined>>;
22
+ /** The Dexto app a new sign-in goes to. */
23
+ readonly appUrl: string;
24
+ /** The public API a new sign-in is saved for. */
25
+ readonly apiBaseUrl: string;
26
+ /** A command's result: the value for JSON output, the text for people. */
27
+ readonly result: (value: unknown, text: string) => void;
28
+ /** Anything else, on stderr. */
29
+ readonly note: (text: string) => void;
30
+ /** Asks the person; false when there is no one to ask. */
31
+ readonly confirm: (question: string) => Promise<boolean>;
32
+ /** False over SSH or without a display: a loopback redirect can't reach this machine. */
33
+ readonly canOpenBrowser: boolean;
34
+ readonly dexto: DextoSignIn;
35
+ }
36
+ export interface LoginOptions {
37
+ readonly profile: string | null;
38
+ readonly org: string | null;
39
+ readonly device: boolean;
40
+ readonly browser: boolean;
41
+ readonly scopes: readonly string[];
42
+ readonly apiKey: string | null;
43
+ }
44
+ export declare function login(context: SignInContext, options: LoginOptions): Promise<void>;
45
+ /** Who the current profile acts as, in a few words, or null when signed out. */
46
+ export declare function describeSignIn(context: SignInContext): Promise<string | null>;
47
+ export declare function logout(context: SignInContext, options: {
48
+ readonly profile: string | null;
49
+ }): Promise<void>;
50
+ export declare function whoami(context: SignInContext, options: {
51
+ readonly profile: string | null;
52
+ readonly apiKey: string | null;
53
+ }): Promise<void>;
54
+ export declare function listAccounts(context: SignInContext, options: {
55
+ readonly profile: string | null;
56
+ }): Promise<void>;
57
+ export declare function useAccount(context: SignInContext, wanted: string): Promise<void>;
58
+ export declare function removeAccount(context: SignInContext, wanted: string, options: {
59
+ readonly yes: boolean;
60
+ }): Promise<void>;
61
+ export {};
62
+ //# sourceMappingURL=sign-in-commands.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sign-in-commands.d.ts","sourceRoot":"","sources":["../../../../src/cli/commands/auth/sign-in-commands.ts"],"names":[],"mappings":"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"}