@dharta/cli 0.6.77

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 (259) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +167 -0
  3. package/dist/agent.d.ts +17 -0
  4. package/dist/agent.js +134 -0
  5. package/dist/agent.js.map +1 -0
  6. package/dist/api-error.d.ts +3 -0
  7. package/dist/api-error.js +80 -0
  8. package/dist/api-error.js.map +1 -0
  9. package/dist/browser.d.ts +1 -0
  10. package/dist/browser.js +19 -0
  11. package/dist/browser.js.map +1 -0
  12. package/dist/cli.d.ts +5 -0
  13. package/dist/cli.js +1978 -0
  14. package/dist/cli.js.map +1 -0
  15. package/dist/commands/agents.d.ts +131 -0
  16. package/dist/commands/agents.js +439 -0
  17. package/dist/commands/agents.js.map +1 -0
  18. package/dist/commands/analytics.d.ts +25 -0
  19. package/dist/commands/analytics.js +166 -0
  20. package/dist/commands/analytics.js.map +1 -0
  21. package/dist/commands/api.d.ts +19 -0
  22. package/dist/commands/api.js +278 -0
  23. package/dist/commands/api.js.map +1 -0
  24. package/dist/commands/appearance.d.ts +19 -0
  25. package/dist/commands/appearance.js +63 -0
  26. package/dist/commands/appearance.js.map +1 -0
  27. package/dist/commands/artifact.d.ts +33 -0
  28. package/dist/commands/artifact.js +235 -0
  29. package/dist/commands/artifact.js.map +1 -0
  30. package/dist/commands/audit-log.d.ts +32 -0
  31. package/dist/commands/audit-log.js +102 -0
  32. package/dist/commands/audit-log.js.map +1 -0
  33. package/dist/commands/auth.d.ts +47 -0
  34. package/dist/commands/auth.js +117 -0
  35. package/dist/commands/auth.js.map +1 -0
  36. package/dist/commands/caps.d.ts +82 -0
  37. package/dist/commands/caps.js +213 -0
  38. package/dist/commands/caps.js.map +1 -0
  39. package/dist/commands/create.d.ts +22 -0
  40. package/dist/commands/create.js +76 -0
  41. package/dist/commands/create.js.map +1 -0
  42. package/dist/commands/deploy.d.ts +45 -0
  43. package/dist/commands/deploy.js +892 -0
  44. package/dist/commands/deploy.js.map +1 -0
  45. package/dist/commands/dev.d.ts +33 -0
  46. package/dist/commands/dev.js +655 -0
  47. package/dist/commands/dev.js.map +1 -0
  48. package/dist/commands/directories.d.ts +60 -0
  49. package/dist/commands/directories.js +83 -0
  50. package/dist/commands/directories.js.map +1 -0
  51. package/dist/commands/doctor.d.ts +13 -0
  52. package/dist/commands/doctor.js +123 -0
  53. package/dist/commands/doctor.js.map +1 -0
  54. package/dist/commands/embed-keys.d.ts +61 -0
  55. package/dist/commands/embed-keys.js +165 -0
  56. package/dist/commands/embed-keys.js.map +1 -0
  57. package/dist/commands/env.d.ts +59 -0
  58. package/dist/commands/env.js +300 -0
  59. package/dist/commands/env.js.map +1 -0
  60. package/dist/commands/files.d.ts +14 -0
  61. package/dist/commands/files.js +84 -0
  62. package/dist/commands/files.js.map +1 -0
  63. package/dist/commands/git-credential.d.ts +1 -0
  64. package/dist/commands/git-credential.js +70 -0
  65. package/dist/commands/git-credential.js.map +1 -0
  66. package/dist/commands/kartas.d.ts +101 -0
  67. package/dist/commands/kartas.js +289 -0
  68. package/dist/commands/kartas.js.map +1 -0
  69. package/dist/commands/keys.d.ts +33 -0
  70. package/dist/commands/keys.js +141 -0
  71. package/dist/commands/keys.js.map +1 -0
  72. package/dist/commands/login.d.ts +22 -0
  73. package/dist/commands/login.js +78 -0
  74. package/dist/commands/login.js.map +1 -0
  75. package/dist/commands/logs.d.ts +14 -0
  76. package/dist/commands/logs.js +89 -0
  77. package/dist/commands/logs.js.map +1 -0
  78. package/dist/commands/members.d.ts +32 -0
  79. package/dist/commands/members.js +77 -0
  80. package/dist/commands/members.js.map +1 -0
  81. package/dist/commands/model-keys.d.ts +22 -0
  82. package/dist/commands/model-keys.js +222 -0
  83. package/dist/commands/model-keys.js.map +1 -0
  84. package/dist/commands/open.d.ts +29 -0
  85. package/dist/commands/open.js +119 -0
  86. package/dist/commands/open.js.map +1 -0
  87. package/dist/commands/parity.d.ts +15 -0
  88. package/dist/commands/parity.js +73 -0
  89. package/dist/commands/parity.js.map +1 -0
  90. package/dist/commands/rollback.d.ts +21 -0
  91. package/dist/commands/rollback.js +26 -0
  92. package/dist/commands/rollback.js.map +1 -0
  93. package/dist/commands/schedules.d.ts +52 -0
  94. package/dist/commands/schedules.js +231 -0
  95. package/dist/commands/schedules.js.map +1 -0
  96. package/dist/commands/scopes.d.ts +3 -0
  97. package/dist/commands/scopes.js +21 -0
  98. package/dist/commands/scopes.js.map +1 -0
  99. package/dist/commands/sessions.d.ts +53 -0
  100. package/dist/commands/sessions.js +142 -0
  101. package/dist/commands/sessions.js.map +1 -0
  102. package/dist/commands/setup.d.ts +28 -0
  103. package/dist/commands/setup.js +949 -0
  104. package/dist/commands/setup.js.map +1 -0
  105. package/dist/commands/status.d.ts +19 -0
  106. package/dist/commands/status.js +63 -0
  107. package/dist/commands/status.js.map +1 -0
  108. package/dist/commands/update.d.ts +14 -0
  109. package/dist/commands/update.js +120 -0
  110. package/dist/commands/update.js.map +1 -0
  111. package/dist/commands/usage.d.ts +3 -0
  112. package/dist/commands/usage.js +37 -0
  113. package/dist/commands/usage.js.map +1 -0
  114. package/dist/commands/webhooks.d.ts +47 -0
  115. package/dist/commands/webhooks.js +156 -0
  116. package/dist/commands/webhooks.js.map +1 -0
  117. package/dist/commands/whoami.d.ts +7 -0
  118. package/dist/commands/whoami.js +17 -0
  119. package/dist/commands/whoami.js.map +1 -0
  120. package/dist/completions.d.ts +13 -0
  121. package/dist/completions.js +120 -0
  122. package/dist/completions.js.map +1 -0
  123. package/dist/config.d.ts +20 -0
  124. package/dist/config.js +98 -0
  125. package/dist/config.js.map +1 -0
  126. package/dist/context.d.ts +14 -0
  127. package/dist/context.js +38 -0
  128. package/dist/context.js.map +1 -0
  129. package/dist/device-flow.d.ts +9 -0
  130. package/dist/device-flow.js +127 -0
  131. package/dist/device-flow.js.map +1 -0
  132. package/dist/harness-preflight.d.ts +24 -0
  133. package/dist/harness-preflight.js +252 -0
  134. package/dist/harness-preflight.js.map +1 -0
  135. package/dist/harnesses.d.ts +11 -0
  136. package/dist/harnesses.js +112 -0
  137. package/dist/harnesses.js.map +1 -0
  138. package/dist/index.d.ts +3 -0
  139. package/dist/index.js +3 -0
  140. package/dist/index.js.map +1 -0
  141. package/dist/login-offer.d.ts +9 -0
  142. package/dist/login-offer.js +36 -0
  143. package/dist/login-offer.js.map +1 -0
  144. package/dist/manifest.d.ts +15 -0
  145. package/dist/manifest.js +142 -0
  146. package/dist/manifest.js.map +1 -0
  147. package/dist/money.d.ts +1 -0
  148. package/dist/money.js +16 -0
  149. package/dist/money.js.map +1 -0
  150. package/dist/output.d.ts +2 -0
  151. package/dist/output.js +20 -0
  152. package/dist/output.js.map +1 -0
  153. package/dist/runtime.d.ts +19 -0
  154. package/dist/runtime.js +95 -0
  155. package/dist/runtime.js.map +1 -0
  156. package/dist/scaffold.d.ts +16 -0
  157. package/dist/scaffold.js +74 -0
  158. package/dist/scaffold.js.map +1 -0
  159. package/dist/setup-scan.d.ts +21 -0
  160. package/dist/setup-scan.js +127 -0
  161. package/dist/setup-scan.js.map +1 -0
  162. package/dist/templates.d.ts +14 -0
  163. package/dist/templates.js +65 -0
  164. package/dist/templates.js.map +1 -0
  165. package/dist/validators.d.ts +10 -0
  166. package/dist/validators.js +116 -0
  167. package/dist/validators.js.map +1 -0
  168. package/dist/version-check.d.ts +25 -0
  169. package/dist/version-check.js +68 -0
  170. package/dist/version-check.js.map +1 -0
  171. package/node_modules/@dharta/sdk/LICENSE +21 -0
  172. package/node_modules/@dharta/sdk/README.md +87 -0
  173. package/node_modules/@dharta/sdk/dist/errors.d.ts +20 -0
  174. package/node_modules/@dharta/sdk/dist/errors.d.ts.map +1 -0
  175. package/node_modules/@dharta/sdk/dist/errors.js +51 -0
  176. package/node_modules/@dharta/sdk/dist/errors.js.map +1 -0
  177. package/node_modules/@dharta/sdk/dist/http.d.ts +26 -0
  178. package/node_modules/@dharta/sdk/dist/http.d.ts.map +1 -0
  179. package/node_modules/@dharta/sdk/dist/http.js +136 -0
  180. package/node_modules/@dharta/sdk/dist/http.js.map +1 -0
  181. package/node_modules/@dharta/sdk/dist/index.d.ts +15 -0
  182. package/node_modules/@dharta/sdk/dist/index.d.ts.map +1 -0
  183. package/node_modules/@dharta/sdk/dist/index.js +21 -0
  184. package/node_modules/@dharta/sdk/dist/index.js.map +1 -0
  185. package/node_modules/@dharta/sdk/dist/resources.d.ts +48 -0
  186. package/node_modules/@dharta/sdk/dist/resources.d.ts.map +1 -0
  187. package/node_modules/@dharta/sdk/dist/resources.js +150 -0
  188. package/node_modules/@dharta/sdk/dist/resources.js.map +1 -0
  189. package/node_modules/@dharta/sdk/dist/types.d.ts +94 -0
  190. package/node_modules/@dharta/sdk/dist/types.d.ts.map +1 -0
  191. package/node_modules/@dharta/sdk/dist/types.js +59 -0
  192. package/node_modules/@dharta/sdk/dist/types.js.map +1 -0
  193. package/node_modules/@dharta/sdk/package.json +32 -0
  194. package/node_modules/@dharta/sdk/src/errors.ts +58 -0
  195. package/node_modules/@dharta/sdk/src/http.ts +166 -0
  196. package/node_modules/@dharta/sdk/src/index.ts +36 -0
  197. package/node_modules/@dharta/sdk/src/resources.ts +197 -0
  198. package/node_modules/@dharta/sdk/src/types.ts +179 -0
  199. package/package.json +38 -0
  200. package/src/agent.ts +147 -0
  201. package/src/api-error.ts +88 -0
  202. package/src/browser.ts +20 -0
  203. package/src/cli.ts +2339 -0
  204. package/src/commands/agents.ts +635 -0
  205. package/src/commands/analytics.ts +181 -0
  206. package/src/commands/api.ts +297 -0
  207. package/src/commands/appearance.ts +79 -0
  208. package/src/commands/artifact.ts +331 -0
  209. package/src/commands/audit-log.ts +125 -0
  210. package/src/commands/auth.ts +186 -0
  211. package/src/commands/caps.ts +302 -0
  212. package/src/commands/create.ts +114 -0
  213. package/src/commands/deploy.ts +1122 -0
  214. package/src/commands/dev.ts +792 -0
  215. package/src/commands/directories.ts +136 -0
  216. package/src/commands/doctor.ts +138 -0
  217. package/src/commands/embed-keys.ts +237 -0
  218. package/src/commands/env.ts +369 -0
  219. package/src/commands/files.ts +124 -0
  220. package/src/commands/git-credential.ts +78 -0
  221. package/src/commands/kartas.ts +439 -0
  222. package/src/commands/keys.ts +206 -0
  223. package/src/commands/login.ts +115 -0
  224. package/src/commands/logs.ts +111 -0
  225. package/src/commands/members.ts +109 -0
  226. package/src/commands/model-keys.ts +278 -0
  227. package/src/commands/open.ts +173 -0
  228. package/src/commands/parity.ts +96 -0
  229. package/src/commands/rollback.ts +45 -0
  230. package/src/commands/schedules.ts +290 -0
  231. package/src/commands/scopes.ts +22 -0
  232. package/src/commands/sessions.ts +225 -0
  233. package/src/commands/setup.ts +1176 -0
  234. package/src/commands/status.ts +94 -0
  235. package/src/commands/update.ts +157 -0
  236. package/src/commands/usage.ts +41 -0
  237. package/src/commands/webhooks.ts +200 -0
  238. package/src/commands/whoami.ts +24 -0
  239. package/src/completions.ts +168 -0
  240. package/src/config.ts +143 -0
  241. package/src/context.ts +59 -0
  242. package/src/device-flow.ts +174 -0
  243. package/src/harness-preflight.ts +293 -0
  244. package/src/harnesses.ts +117 -0
  245. package/src/index.ts +3 -0
  246. package/src/login-offer.ts +49 -0
  247. package/src/manifest.ts +153 -0
  248. package/src/money.ts +15 -0
  249. package/src/output.ts +22 -0
  250. package/src/runtime.ts +127 -0
  251. package/src/scaffold.ts +102 -0
  252. package/src/setup-scan.ts +154 -0
  253. package/src/templates.ts +85 -0
  254. package/src/validators.ts +124 -0
  255. package/src/version-check.ts +75 -0
  256. package/templates/blank/CLAUDE.md +21 -0
  257. package/templates/blank/dharta.toml +11 -0
  258. package/templates/faq-agent/CLAUDE.md +51 -0
  259. package/templates/faq-agent/dharta.toml +11 -0
@@ -0,0 +1,73 @@
1
+ // `dharta dev --release vN` / `--env remote` (RFC 0013 CLI-10): two
2
+ // orthogonal parity axes. --release runs the exact built tree prod
3
+ // serves (transcript-driven debugging: read the transcript with
4
+ // `dharta sessions show`, replay against the same code locally);
5
+ // --env remote binds prod env vars instead of .env. Honest limits:
6
+ // parity of code + config, not infrastructure.
7
+ import { promises as fs } from "node:fs";
8
+ import { randomUUID } from "node:crypto";
9
+ import * as os from "node:os";
10
+ import * as path from "node:path";
11
+ import { spawn } from "node:child_process";
12
+ import { inferAgentSlug } from "../agent.js";
13
+ import { parseReleaseVersion } from "../validators.js";
14
+ // Download + extract the release archive; returns the extracted dir.
15
+ export async function prepareReleaseDir(ctx, releaseVersion, opts = {}) {
16
+ const version = parseReleaseVersion(releaseVersion, "--release");
17
+ const slug = await inferAgentSlug(opts);
18
+ const meta = await ctx.http.request({
19
+ path: `/api/agents/${encodeURIComponent(slug)}/releases/${encodeURIComponent(version)}/archive`,
20
+ });
21
+ const fetchImpl = (opts.fetchImpl ?? globalThis.fetch).bind(globalThis);
22
+ const res = await fetchReleaseArchive(meta.url, slug, fetchImpl);
23
+ if (!res.ok) {
24
+ throw new Error(`Could not download the release archive (HTTP ${res.status}). ` +
25
+ `Check the version with \`dharta agent releases ${slug}\` and retry.`);
26
+ }
27
+ const bytes = Buffer.from(await res.arrayBuffer());
28
+ const dir = await fs.mkdtemp(path.join(os.tmpdir(), `karta-${slug}-v${meta.version}-`));
29
+ const tarball = path.join(dir, "release.tar.gz");
30
+ await fs.writeFile(tarball, bytes);
31
+ await untar(tarball, dir);
32
+ await fs.rm(tarball, { force: true });
33
+ return { dir, version: meta.version, commitSha: meta.commit_sha };
34
+ }
35
+ // Fetch prod env bindings for --env remote. Secrets ride the same D6
36
+ // rails as `dharta env pull --include-secrets`.
37
+ export async function fetchRemoteEnv(ctx, opts = {}) {
38
+ const slug = await inferAgentSlug(opts);
39
+ const body = await ctx.http.request({
40
+ method: "POST",
41
+ path: `/api/agents/${encodeURIComponent(slug)}/env/pull`,
42
+ headers: { "Idempotency-Key": randomUUID() },
43
+ body: { include_secrets: !!opts.includeSecrets },
44
+ });
45
+ const values = {};
46
+ const withheld = [];
47
+ for (const entry of body.env) {
48
+ if (entry.withheld)
49
+ withheld.push(entry.name);
50
+ else
51
+ values[entry.name] = entry.value ?? "";
52
+ }
53
+ return { values, withheld };
54
+ }
55
+ async function fetchReleaseArchive(url, slug, fetchImpl) {
56
+ try {
57
+ return await fetchImpl(url);
58
+ }
59
+ catch (error) {
60
+ throw new Error(`Could not download the release archive from ${url}: ${error.message}. ` +
61
+ `Check the version with \`dharta agent releases ${slug}\` and retry.`);
62
+ }
63
+ }
64
+ function untar(tarball, dest) {
65
+ return new Promise((resolve, reject) => {
66
+ const proc = spawn("tar", ["-xzf", tarball, "-C", dest], { stdio: "ignore" });
67
+ proc.on("error", () => reject(new Error("Could not extract the release archive (is `tar` installed?).")));
68
+ proc.on("close", (code) => code === 0
69
+ ? resolve()
70
+ : reject(new Error(`tar exited ${code} extracting the release archive.`)));
71
+ });
72
+ }
73
+ //# sourceMappingURL=parity.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parity.js","sourceRoot":"","sources":["../../src/commands/parity.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,21 @@
1
+ import type { CliContext } from "../context.js";
2
+ export interface RollbackResponse {
3
+ agent: {
4
+ id: string;
5
+ slug: string;
6
+ name: string;
7
+ };
8
+ release: {
9
+ id: string;
10
+ version: number;
11
+ status: string;
12
+ commit_sha: string;
13
+ };
14
+ previous_release: {
15
+ id: string;
16
+ version: number;
17
+ status: string;
18
+ } | null;
19
+ }
20
+ export declare function rollbackData(ctx: CliContext, slug: string, toVersion: number): Promise<RollbackResponse>;
21
+ export declare function rollback(ctx: CliContext, slug: string, toVersion: number): Promise<string>;
@@ -0,0 +1,26 @@
1
+ import { randomUUID } from "node:crypto";
2
+ import { validateAgentSlug } from "../agent.js";
3
+ export async function rollbackData(ctx, slug, toVersion) {
4
+ const normalizedSlug = validateAgentSlug(slug, "agent slug");
5
+ const normalizedVersion = normalizeRollbackVersion(toVersion);
6
+ return ctx.http.request({
7
+ method: "POST",
8
+ path: `/api/agents/${encodeURIComponent(normalizedSlug)}/rollback`,
9
+ headers: { "Idempotency-Key": randomUUID() },
10
+ body: { to_version: normalizedVersion },
11
+ });
12
+ }
13
+ export async function rollback(ctx, slug, toVersion) {
14
+ const res = await rollbackData(ctx, slug, toVersion);
15
+ const prev = res.previous_release
16
+ ? ` (from v${res.previous_release.version})`
17
+ : "";
18
+ return `Rolled back ${res.agent.slug} to v${res.release.version}${prev}.`;
19
+ }
20
+ function normalizeRollbackVersion(toVersion) {
21
+ if (!Number.isSafeInteger(toVersion) || toVersion <= 0) {
22
+ throw new Error("version must be a positive whole number.");
23
+ }
24
+ return toVersion;
25
+ }
26
+ //# sourceMappingURL=rollback.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rollback.js","sourceRoot":"","sources":["../../src/commands/rollback.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAQhD,MAAM,CAAC,KAAK,UAAU,YAAY,CAChC,GAAe,EACf,IAAY,EACZ,SAAiB;IAEjB,MAAM,cAAc,GAAG,iBAAiB,CAAC,IAAI,EAAE,YAAY,CAAC,CAAC;IAC7D,MAAM,iBAAiB,GAAG,wBAAwB,CAAC,SAAS,CAAC,CAAC;IAC9D,OAAO,GAAG,CAAC,IAAI,CAAC,OAAO,CAAmB;QACxC,MAAM,EAAE,MAAM;QACd,IAAI,EAAE,eAAe,kBAAkB,CAAC,cAAc,CAAC,WAAW;QAClE,OAAO,EAAE,EAAE,iBAAiB,EAAE,UAAU,EAAE,EAAE;QAC5C,IAAI,EAAE,EAAE,UAAU,EAAE,iBAAiB,EAAE;KACxC,CAAC,CAAC;AACL,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,QAAQ,CAC5B,GAAe,EACf,IAAY,EACZ,SAAiB;IAEjB,MAAM,GAAG,GAAG,MAAM,YAAY,CAAC,GAAG,EAAE,IAAI,EAAE,SAAS,CAAC,CAAC;IACrD,MAAM,IAAI,GAAG,GAAG,CAAC,gBAAgB;QAC/B,CAAC,CAAC,WAAW,GAAG,CAAC,gBAAgB,CAAC,OAAO,GAAG;QAC5C,CAAC,CAAC,EAAE,CAAC;IACP,OAAO,eAAe,GAAG,CAAC,KAAK,CAAC,IAAI,QAAQ,GAAG,CAAC,OAAO,CAAC,OAAO,GAAG,IAAI,GAAG,CAAC;AAC5E,CAAC;AAED,SAAS,wBAAwB,CAAC,SAAiB;IACjD,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,SAAS,CAAC,IAAI,SAAS,IAAI,CAAC,EAAE,CAAC;QACvD,MAAM,IAAI,KAAK,CAAC,0CAA0C,CAAC,CAAC;IAC9D,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC"}
@@ -0,0 +1,52 @@
1
+ import { type AgentInferOptions } from "../agent.js";
2
+ import type { CliContext } from "../context.js";
3
+ export interface Schedule {
4
+ id: number;
5
+ cron: string;
6
+ timezone: string;
7
+ initial_message: string;
8
+ release_version: number | null;
9
+ budget_cents: number | null;
10
+ end_user_id: string | null;
11
+ enabled: boolean;
12
+ next_fire_at: string | null;
13
+ last_fired_at: string | null;
14
+ created_at: string;
15
+ updated_at: string;
16
+ }
17
+ interface ScheduleEnvelope {
18
+ schedule: Schedule;
19
+ changed?: boolean;
20
+ queued?: boolean;
21
+ }
22
+ export interface ScheduleCreateOptions extends AgentInferOptions {
23
+ cron?: string;
24
+ timezone?: string;
25
+ message?: string;
26
+ budget?: string;
27
+ budgetCents?: string;
28
+ releaseVersion?: string;
29
+ endUserId?: string;
30
+ runNow?: boolean;
31
+ }
32
+ export declare function schedulesListData(ctx: CliContext, opts: AgentInferOptions): Promise<{
33
+ slug: string;
34
+ data: Schedule[];
35
+ }>;
36
+ export declare function schedulesList(ctx: CliContext, opts: AgentInferOptions): Promise<string>;
37
+ export declare function schedulesCreateData(ctx: CliContext, opts: ScheduleCreateOptions): Promise<{
38
+ slug: string;
39
+ } & ScheduleEnvelope>;
40
+ export declare function schedulesCreate(ctx: CliContext, opts: ScheduleCreateOptions): Promise<string>;
41
+ export declare function validateSchedulesCreateInput(opts: ScheduleCreateOptions): void;
42
+ export declare function schedulesActionData(ctx: CliContext, id: string, action: "pause" | "resume" | "run", opts: AgentInferOptions): Promise<{
43
+ slug: string;
44
+ } & ScheduleEnvelope>;
45
+ export declare function schedulesAction(ctx: CliContext, id: string, action: "pause" | "resume" | "run", opts: AgentInferOptions): Promise<string>;
46
+ export declare function schedulesDeleteData(ctx: CliContext, id: string, opts: AgentInferOptions): Promise<{
47
+ slug: string;
48
+ id: string;
49
+ deleted: boolean;
50
+ }>;
51
+ export declare function schedulesDelete(ctx: CliContext, id: string, opts: AgentInferOptions): Promise<string>;
52
+ export {};
@@ -0,0 +1,231 @@
1
+ import { randomUUID } from "node:crypto";
2
+ import { inferAgentSlug } from "../agent.js";
3
+ import { parseDollarAmountToCents } from "../money.js";
4
+ import { fmtTs, table } from "../output.js";
5
+ import { normalizeNonBlank, normalizeTimezone, parsePositiveInteger, parseReleaseVersion } from "../validators.js";
6
+ export async function schedulesListData(ctx, opts) {
7
+ const slug = await inferAgentSlug(opts);
8
+ const res = await ctx.http.request({
9
+ path: `/api/agents/${encodeURIComponent(slug)}/schedules`,
10
+ });
11
+ return { slug, data: res.data };
12
+ }
13
+ export async function schedulesList(ctx, opts) {
14
+ const { slug, data } = await schedulesListData(ctx, opts);
15
+ if (data.length === 0)
16
+ return `No schedules for ${slug}. Create one with: dharta schedules create --agent ${slug} --cron '0 9 * * *' --message 'Daily check-in'`;
17
+ return table(data.map((schedule) => ({
18
+ id: String(schedule.id),
19
+ state: schedule.enabled ? "enabled" : "paused",
20
+ cron: schedule.cron,
21
+ timezone: schedule.timezone,
22
+ next: fmtTs(schedule.next_fire_at),
23
+ budget: formatBudget(schedule.budget_cents),
24
+ })));
25
+ }
26
+ export async function schedulesCreateData(ctx, opts) {
27
+ validateSchedulesCreateInput(opts);
28
+ const cron = opts.cron;
29
+ const message = opts.message;
30
+ const slug = await inferAgentSlug(opts);
31
+ const body = {
32
+ cron: normalizeRequired(cron, "--cron"),
33
+ timezone: opts.timezone === undefined ? "UTC" : normalizeTimezone(opts.timezone, "--timezone"),
34
+ initial_message: normalizeRequired(message, "--message"),
35
+ };
36
+ if (opts.budget !== undefined && opts.budgetCents !== undefined) {
37
+ throw new Error("Use either --budget or --budget-cents, not both.");
38
+ }
39
+ if (opts.budget !== undefined)
40
+ body.budget_cents = parseDollarAmountToCents(opts.budget, "--budget");
41
+ if (opts.budgetCents !== undefined)
42
+ body.budget_cents = parsePositiveWholeNumber(opts.budgetCents, "--budget-cents");
43
+ if (opts.releaseVersion !== undefined)
44
+ body.release_version = parseReleaseVersion(opts.releaseVersion, "--release-version");
45
+ if (opts.endUserId !== undefined)
46
+ body.end_user_id = normalizeRequired(opts.endUserId, "--end-user-id");
47
+ const res = await ctx.http.request({
48
+ method: "POST",
49
+ path: `/api/agents/${encodeURIComponent(slug)}/schedules`,
50
+ headers: idempotencyHeader(),
51
+ body: { schedule: body },
52
+ });
53
+ if (opts.runNow) {
54
+ const run = await runScheduleNow(ctx, slug, String(res.schedule.id));
55
+ return { slug, ...res, queued: run.queued ?? true };
56
+ }
57
+ return { slug, ...res };
58
+ }
59
+ export async function schedulesCreate(ctx, opts) {
60
+ const res = await schedulesCreateData(ctx, opts);
61
+ return `Created schedule ${res.schedule.id} for ${res.slug}${res.queued ? " and queued one run" : ""}.`;
62
+ }
63
+ export function validateSchedulesCreateInput(opts) {
64
+ const missing = [
65
+ opts.cron === undefined ? "--cron <expr>" : null,
66
+ opts.message === undefined ? "--message <text>" : null,
67
+ ].filter((flag) => flag !== null);
68
+ if (missing.length > 0) {
69
+ throw new Error(`Pass ${formatMissingFlags(missing)}. ` +
70
+ "Usage: dharta schedules create --cron '0 9 * * *' --message 'Daily check-in'");
71
+ }
72
+ const cron = opts.cron;
73
+ const message = opts.message;
74
+ validateCron(cron);
75
+ if (opts.timezone !== undefined)
76
+ normalizeTimezone(opts.timezone, "--timezone");
77
+ normalizeRequired(message, "--message");
78
+ if (opts.budget !== undefined && opts.budgetCents !== undefined) {
79
+ throw new Error("Use either --budget or --budget-cents, not both.");
80
+ }
81
+ if (opts.budget !== undefined)
82
+ parseDollarAmountToCents(opts.budget, "--budget");
83
+ if (opts.budgetCents !== undefined)
84
+ parsePositiveWholeNumber(opts.budgetCents, "--budget-cents");
85
+ if (opts.releaseVersion !== undefined)
86
+ parseReleaseVersion(opts.releaseVersion, "--release-version");
87
+ if (opts.endUserId !== undefined)
88
+ normalizeRequired(opts.endUserId, "--end-user-id");
89
+ }
90
+ function formatMissingFlags(flags) {
91
+ return flags.length === 1 ? flags[0] : `${flags.slice(0, -1).join(", ")} and ${flags[flags.length - 1]}`;
92
+ }
93
+ function validateCron(value) {
94
+ const cron = normalizeRequired(value, "--cron");
95
+ const fields = cron.split(/\s+/);
96
+ if (fields.length !== 5 || fields.some((field) => field.length === 0)) {
97
+ throw new Error("--cron must be a standard 5-field cron expression, e.g. '0 9 * * *'.");
98
+ }
99
+ fields.forEach((field, index) => validateCronField(field, CRON_FIELD_SPECS[index]));
100
+ }
101
+ const CRON_FIELD_SPECS = [
102
+ { name: "minute", min: 0, max: 59, names: {} },
103
+ { name: "hour", min: 0, max: 23, names: {} },
104
+ { name: "day-of-month", min: 1, max: 31, names: {} },
105
+ {
106
+ name: "month",
107
+ min: 1,
108
+ max: 12,
109
+ names: { jan: 1, feb: 2, mar: 3, apr: 4, may: 5, jun: 6, jul: 7, aug: 8, sep: 9, oct: 10, nov: 11, dec: 12 },
110
+ },
111
+ {
112
+ name: "day-of-week",
113
+ min: 0,
114
+ max: 7,
115
+ names: { sun: 0, mon: 1, tue: 2, wed: 3, thu: 4, fri: 5, sat: 6 },
116
+ },
117
+ ];
118
+ function validateCronField(field, spec) {
119
+ for (const item of field.split(",")) {
120
+ if (!item)
121
+ throw unsupportedCronField(spec);
122
+ const [base, step, extra] = item.split("/");
123
+ if (extra !== undefined || !base)
124
+ throw unsupportedCronField(spec);
125
+ if (step !== undefined && !/^[1-9]\d*$/.test(step)) {
126
+ throw new Error(`--cron ${spec.name} field step must be a positive whole number.`);
127
+ }
128
+ if (base === "*")
129
+ continue;
130
+ const [start, end, extraRange] = base.split("-");
131
+ if (extraRange !== undefined || !start)
132
+ throw unsupportedCronField(spec);
133
+ if (end === undefined) {
134
+ parseCronToken(start, spec);
135
+ continue;
136
+ }
137
+ if (!end)
138
+ throw unsupportedCronField(spec);
139
+ const rangeStart = parseCronToken(start, spec);
140
+ const rangeEnd = parseCronToken(end, spec);
141
+ if (rangeStart > rangeEnd) {
142
+ throw new Error(`--cron ${spec.name} field range must start before it ends.`);
143
+ }
144
+ }
145
+ }
146
+ function parseCronToken(token, spec) {
147
+ const normalized = token.toLowerCase();
148
+ const named = spec.names[normalized];
149
+ if (named !== undefined)
150
+ return named;
151
+ if (!/^\d+$/.test(token))
152
+ throw unsupportedCronField(spec);
153
+ const parsed = Number(token);
154
+ if (parsed < spec.min || parsed > spec.max) {
155
+ throw new Error(`--cron ${spec.name} field must be ${spec.min}-${spec.max}.`);
156
+ }
157
+ return parsed;
158
+ }
159
+ function unsupportedCronField(spec) {
160
+ return new Error(`--cron ${spec.name} field is not supported. Use numbers, *, ranges, lists, and steps.`);
161
+ }
162
+ export async function schedulesActionData(ctx, id, action, opts) {
163
+ const normalizedId = normalizeScheduleId(id);
164
+ const slug = await inferAgentSlug(opts);
165
+ const res = action === "run"
166
+ ? await runScheduleNow(ctx, slug, normalizedId)
167
+ : await ctx.http.request({
168
+ method: "POST",
169
+ path: `/api/agents/${encodeURIComponent(slug)}/schedules/${encodeURIComponent(normalizedId)}/${action}`,
170
+ headers: idempotencyHeader(),
171
+ });
172
+ return { slug, ...res };
173
+ }
174
+ export async function schedulesAction(ctx, id, action, opts) {
175
+ const res = await schedulesActionData(ctx, id, action, opts);
176
+ if (action === "run")
177
+ return `Queued schedule ${res.schedule.id} for ${res.slug}.`;
178
+ return `${action === "pause" ? "Paused" : "Resumed"} schedule ${res.schedule.id} for ${res.slug}${res.changed ? "" : " (unchanged)"}.`;
179
+ }
180
+ export async function schedulesDeleteData(ctx, id, opts) {
181
+ const normalizedId = normalizeScheduleId(id);
182
+ const slug = await inferAgentSlug(opts);
183
+ await ctx.http.request({
184
+ method: "DELETE",
185
+ path: `/api/agents/${encodeURIComponent(slug)}/schedules/${encodeURIComponent(normalizedId)}`,
186
+ headers: idempotencyHeader(),
187
+ });
188
+ return { slug, id: normalizedId, deleted: true };
189
+ }
190
+ export async function schedulesDelete(ctx, id, opts) {
191
+ const res = await schedulesDeleteData(ctx, id, opts);
192
+ return `Deleted schedule ${res.id} for ${res.slug}.`;
193
+ }
194
+ function parsePositiveWholeNumber(value, flag) {
195
+ const normalized = value.trim();
196
+ if (!/^\d+$/.test(normalized))
197
+ throw new Error(`${flag} must be a whole number.`);
198
+ const parsed = Number(normalized);
199
+ if (!Number.isSafeInteger(parsed) || parsed <= 0) {
200
+ throw new Error(`${flag} must be a positive whole number.`);
201
+ }
202
+ return parsed;
203
+ }
204
+ function formatBudget(cents) {
205
+ if (cents === null)
206
+ return "—";
207
+ return `$${(cents / 100).toFixed(2)}`;
208
+ }
209
+ function idempotencyHeader() {
210
+ return { "Idempotency-Key": randomUUID() };
211
+ }
212
+ function runScheduleNow(ctx, slug, id) {
213
+ return ctx.http.request({
214
+ method: "POST",
215
+ path: `/api/agents/${encodeURIComponent(slug)}/schedules/${encodeURIComponent(id)}/run`,
216
+ headers: idempotencyHeader(),
217
+ });
218
+ }
219
+ function normalizeRequired(value, flag) {
220
+ const normalized = value.trim();
221
+ if (!normalized) {
222
+ throw new Error(`${flag} cannot be blank.`);
223
+ }
224
+ return normalized;
225
+ }
226
+ function normalizeScheduleId(id) {
227
+ const normalized = normalizeNonBlank(id, "Schedule id");
228
+ parsePositiveInteger(normalized, "Schedule id");
229
+ return normalized;
230
+ }
231
+ //# sourceMappingURL=schedules.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schedules.js","sourceRoot":"","sources":["../../src/commands/schedules.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ export declare const SENSITIVE_API_KEY_SCOPES: Set<string>;
2
+ export declare function formatScopes(scopes: readonly string[], separator?: string): string;
3
+ export declare function formatApiKeyExpiry(expiresAt: string | null | undefined): string;
@@ -0,0 +1,21 @@
1
+ export const SENSITIVE_API_KEY_SCOPES = new Set([
2
+ "env:secrets:read",
3
+ "source_archives:read",
4
+ "workspace_tokens:create",
5
+ "workspace:read",
6
+ "audit_log:export",
7
+ "members:invite",
8
+ "members:write",
9
+ "members:owner_role:write",
10
+ "agents:delete",
11
+ "keys:write",
12
+ "model_keys:write",
13
+ ]);
14
+ export function formatScopes(scopes, separator = ", ") {
15
+ return scopes.join(separator);
16
+ }
17
+ export function formatApiKeyExpiry(expiresAt) {
18
+ const normalized = expiresAt?.trim();
19
+ return normalized ? normalized : "none - revocable on the dashboard keys page";
20
+ }
21
+ //# sourceMappingURL=scopes.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scopes.js","sourceRoot":"","sources":["../../src/commands/scopes.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,wBAAwB,GAAG,IAAI,GAAG,CAAC;IAC9C,kBAAkB;IAClB,sBAAsB;IACtB,yBAAyB;IACzB,gBAAgB;IAChB,kBAAkB;IAClB,gBAAgB;IAChB,eAAe;IACf,0BAA0B;IAC1B,eAAe;IACf,YAAY;IACZ,kBAAkB;CACnB,CAAC,CAAC;AAEH,MAAM,UAAU,YAAY,CAAC,MAAyB,EAAE,SAAS,GAAG,IAAI;IACtE,OAAO,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;AAChC,CAAC;AAED,MAAM,UAAU,kBAAkB,CAAC,SAAoC;IACrE,MAAM,UAAU,GAAG,SAAS,EAAE,IAAI,EAAE,CAAC;IACrC,OAAO,UAAU,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,6CAA6C,CAAC;AACjF,CAAC"}
@@ -0,0 +1,53 @@
1
+ import type { CliContext } from "../context.js";
2
+ import { type AgentInferOptions } from "../agent.js";
3
+ export interface SessionsOptions extends AgentInferOptions {
4
+ fetchImpl?: typeof fetch;
5
+ write?: (text: string) => void;
6
+ log?: (line: string) => void;
7
+ limit?: string;
8
+ }
9
+ export interface SessionRow {
10
+ id: string;
11
+ created_at: string;
12
+ last_message_at: string;
13
+ message_count: number;
14
+ model: string | null;
15
+ input_tokens: number;
16
+ output_tokens: number;
17
+ status: string;
18
+ end_user_id: string | null;
19
+ }
20
+ export interface TranscriptTurn {
21
+ role: string;
22
+ text: string;
23
+ at: string;
24
+ }
25
+ export interface SessionsListData {
26
+ slug: string;
27
+ total: number;
28
+ sessions: SessionRow[];
29
+ }
30
+ export declare function sessionsListData(ctx: CliContext, opts?: SessionsOptions, { activeOnly }?: {
31
+ activeOnly?: boolean | undefined;
32
+ }): Promise<SessionsListData>;
33
+ export declare function sessionsList(ctx: CliContext, opts?: SessionsOptions, { activeOnly }?: {
34
+ activeOnly?: boolean | undefined;
35
+ }): Promise<string>;
36
+ export declare function sessionsShowData(ctx: CliContext, sessionId: string, opts?: SessionsOptions): Promise<{
37
+ id: string;
38
+ messages: TranscriptTurn[];
39
+ }>;
40
+ export declare function sessionsShow(ctx: CliContext, sessionId: string, opts?: SessionsOptions): Promise<string>;
41
+ export declare function psData(ctx: CliContext, opts?: SessionsOptions): Promise<SessionsListData>;
42
+ export declare function ps(ctx: CliContext, opts?: SessionsOptions): Promise<string>;
43
+ export declare function validateSessionsListOptions(opts?: Pick<SessionsOptions, "limit">): void;
44
+ export interface RunOptions extends SessionsOptions {
45
+ sessionId?: string;
46
+ json?: boolean;
47
+ }
48
+ export interface RunResult {
49
+ agent: string;
50
+ session_id: string;
51
+ reply: string;
52
+ }
53
+ export declare function run(ctx: CliContext, message: string, opts?: RunOptions): Promise<RunResult>;