@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,48 @@
1
+ import type { HttpClient } from "./http.js";
2
+ import type { ApiKey, ApiKeyCreateResponse, ApiKeyScope, BillingStatus, ModelKey, ModelKeyCreateParams, ModelKeyProvider, UsageSummary, WebhookEndpoint, WebhookEndpointCreateResponse, WebhookEventType } from "./types.js";
3
+ export declare class ApiKeysResource {
4
+ private readonly http;
5
+ constructor(http: HttpClient);
6
+ list(): Promise<ApiKey[]>;
7
+ create(name: string, scopes: ApiKeyScope[]): Promise<ApiKeyCreateResponse>;
8
+ rename(id: string, name: string): Promise<ApiKey>;
9
+ revoke(id: string): Promise<void>;
10
+ }
11
+ export declare class ModelKeysResource {
12
+ private readonly http;
13
+ constructor(http: HttpClient);
14
+ list(): Promise<ModelKey[]>;
15
+ create(provider: ModelKeyProvider, plaintext: string, name?: string): Promise<ModelKey>;
16
+ create(params: ModelKeyCreateParams): Promise<ModelKey>;
17
+ revoke(id: string | number): Promise<void>;
18
+ }
19
+ export interface WebhookEndpointCreateParams {
20
+ url: string;
21
+ name?: string;
22
+ event_types?: WebhookEventType[];
23
+ }
24
+ export interface WebhookEndpointUpdateParams {
25
+ name?: string;
26
+ url?: string;
27
+ event_types?: WebhookEventType[];
28
+ }
29
+ export declare class WebhookEndpointsResource {
30
+ private readonly http;
31
+ constructor(http: HttpClient);
32
+ list(): Promise<WebhookEndpoint[]>;
33
+ create(params: WebhookEndpointCreateParams): Promise<WebhookEndpointCreateResponse>;
34
+ update(id: string, params: WebhookEndpointUpdateParams): Promise<WebhookEndpoint>;
35
+ enable(id: string): Promise<WebhookEndpoint>;
36
+ delete(id: string): Promise<void>;
37
+ }
38
+ export declare class UsageResource {
39
+ private readonly http;
40
+ constructor(http: HttpClient);
41
+ summary(): Promise<UsageSummary>;
42
+ }
43
+ export declare class BillingResource {
44
+ private readonly http;
45
+ constructor(http: HttpClient);
46
+ status(): Promise<BillingStatus>;
47
+ }
48
+ //# sourceMappingURL=resources.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resources.d.ts","sourceRoot":"","sources":["../src/resources.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AAC5C,OAAO,KAAK,EACV,MAAM,EACN,oBAAoB,EACpB,WAAW,EACX,aAAa,EACb,QAAQ,EACR,oBAAoB,EACpB,gBAAgB,EAChB,YAAY,EACZ,eAAe,EACf,6BAA6B,EAC7B,gBAAgB,EACjB,MAAM,YAAY,CAAC;AAcpB,qBAAa,eAAe;IACd,OAAO,CAAC,QAAQ,CAAC,IAAI;IAAjC,YAA6B,IAAI,EAAE,UAAU,EAAI;IAE3C,IAAI,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC,CAG9B;IAEK,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,GAAG,OAAO,CAAC,oBAAoB,CAAC,CAO/E;IAEK,MAAM,CAAC,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAQtD;IAEK,MAAM,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAMtC;CACF;AAED,qBAAa,iBAAiB;IAChB,OAAO,CAAC,QAAQ,CAAC,IAAI;IAAjC,YAA6B,IAAI,EAAE,UAAU,EAAI;IAE3C,IAAI,IAAI,OAAO,CAAC,QAAQ,EAAE,CAAC,CAGhC;IAEK,MAAM,CAAC,QAAQ,EAAE,gBAAgB,EAAE,SAAS,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC;IACxF,MAAM,CAAC,MAAM,EAAE,oBAAoB,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC;IAkBxD,MAAM,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAM/C;CACF;AAED,MAAM,WAAW,2BAA2B;IAC1C,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,gBAAgB,EAAE,CAAC;CAClC;AAED,MAAM,WAAW,2BAA2B;IAC1C,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,EAAE,gBAAgB,EAAE,CAAC;CAClC;AAED,qBAAa,wBAAwB;IACvB,OAAO,CAAC,QAAQ,CAAC,IAAI;IAAjC,YAA6B,IAAI,EAAE,UAAU,EAAI;IAE3C,IAAI,IAAI,OAAO,CAAC,eAAe,EAAE,CAAC,CAGvC;IAEK,MAAM,CAAC,MAAM,EAAE,2BAA2B,GAAG,OAAO,CAAC,6BAA6B,CAAC,CAOxF;IAEK,MAAM,CAAC,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,2BAA2B,GAAG,OAAO,CAAC,eAAe,CAAC,CAQtF;IAEK,MAAM,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,CAAC,CAOjD;IAEK,MAAM,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAMtC;CACF;AAED,qBAAa,aAAa;IACZ,OAAO,CAAC,QAAQ,CAAC,IAAI;IAAjC,YAA6B,IAAI,EAAE,UAAU,EAAI;IAE3C,OAAO,IAAI,OAAO,CAAC,YAAY,CAAC,CAErC;CACF;AAED,qBAAa,eAAe;IACd,OAAO,CAAC,QAAQ,CAAC,IAAI;IAAjC,YAA6B,IAAI,EAAE,UAAU,EAAI;IAE3C,MAAM,IAAI,OAAO,CAAC,aAAa,CAAC,CAErC;CACF"}
@@ -0,0 +1,150 @@
1
+ export class ApiKeysResource {
2
+ http;
3
+ constructor(http) {
4
+ this.http = http;
5
+ }
6
+ async list() {
7
+ const res = await this.http.request({ path: "/api_keys" });
8
+ return res.data;
9
+ }
10
+ async create(name, scopes) {
11
+ return this.http.request({
12
+ method: "POST",
13
+ path: "/api_keys",
14
+ headers: idempotencyHeaders(),
15
+ body: { name, scopes },
16
+ });
17
+ }
18
+ async rename(id, name) {
19
+ const res = await this.http.request({
20
+ method: "PATCH",
21
+ path: `/api_keys/${encodeURIComponent(id)}`,
22
+ headers: idempotencyHeaders(),
23
+ body: { name },
24
+ });
25
+ return res.api_key;
26
+ }
27
+ async revoke(id) {
28
+ await this.http.request({
29
+ method: "DELETE",
30
+ path: `/api_keys/${encodeURIComponent(id)}`,
31
+ headers: idempotencyHeaders(),
32
+ });
33
+ }
34
+ }
35
+ export class ModelKeysResource {
36
+ http;
37
+ constructor(http) {
38
+ this.http = http;
39
+ }
40
+ async list() {
41
+ const res = await this.http.request({ path: "/model_keys" });
42
+ return res.data;
43
+ }
44
+ async create(providerOrParams, plaintext, name) {
45
+ const body = typeof providerOrParams === "string"
46
+ ? { provider: providerOrParams, plaintext, name }
47
+ : providerOrParams;
48
+ const res = await this.http.request({
49
+ method: "POST",
50
+ path: "/model_keys",
51
+ headers: idempotencyHeaders(),
52
+ body,
53
+ });
54
+ return res.model_key;
55
+ }
56
+ async revoke(id) {
57
+ await this.http.request({
58
+ method: "DELETE",
59
+ path: `/model_keys/${encodeURIComponent(String(id))}`,
60
+ headers: idempotencyHeaders(),
61
+ });
62
+ }
63
+ }
64
+ export class WebhookEndpointsResource {
65
+ http;
66
+ constructor(http) {
67
+ this.http = http;
68
+ }
69
+ async list() {
70
+ const res = await this.http.request({ path: "/api/webhook_endpoints" });
71
+ return res.data;
72
+ }
73
+ async create(params) {
74
+ return this.http.request({
75
+ method: "POST",
76
+ path: "/api/webhook_endpoints",
77
+ headers: idempotencyHeaders(),
78
+ body: params,
79
+ });
80
+ }
81
+ async update(id, params) {
82
+ const res = await this.http.request({
83
+ method: "PATCH",
84
+ path: `/api/webhook_endpoints/${encodeURIComponent(id)}`,
85
+ headers: idempotencyHeaders(),
86
+ body: params,
87
+ });
88
+ return res.webhook_endpoint;
89
+ }
90
+ async enable(id) {
91
+ const res = await this.http.request({
92
+ method: "POST",
93
+ path: `/api/webhook_endpoints/${encodeURIComponent(id)}/enable`,
94
+ headers: idempotencyHeaders(),
95
+ });
96
+ return res.webhook_endpoint;
97
+ }
98
+ async delete(id) {
99
+ await this.http.request({
100
+ method: "DELETE",
101
+ path: `/api/webhook_endpoints/${encodeURIComponent(id)}`,
102
+ headers: idempotencyHeaders(),
103
+ });
104
+ }
105
+ }
106
+ export class UsageResource {
107
+ http;
108
+ constructor(http) {
109
+ this.http = http;
110
+ }
111
+ async summary() {
112
+ return this.http.request({ path: "/api/usage" });
113
+ }
114
+ }
115
+ export class BillingResource {
116
+ http;
117
+ constructor(http) {
118
+ this.http = http;
119
+ }
120
+ async status() {
121
+ return this.http.request({ path: "/api/billing" });
122
+ }
123
+ }
124
+ function idempotencyHeaders() {
125
+ return { "Idempotency-Key": randomIdempotencyKey() };
126
+ }
127
+ function randomIdempotencyKey() {
128
+ if (globalThis.crypto?.randomUUID)
129
+ return globalThis.crypto.randomUUID();
130
+ const bytes = new Uint8Array(16);
131
+ if (globalThis.crypto?.getRandomValues) {
132
+ globalThis.crypto.getRandomValues(bytes);
133
+ }
134
+ else {
135
+ for (let i = 0; i < bytes.length; i += 1) {
136
+ bytes[i] = Math.floor(Math.random() * 256);
137
+ }
138
+ }
139
+ bytes[6] = (bytes[6] & 0x0f) | 0x40;
140
+ bytes[8] = (bytes[8] & 0x3f) | 0x80;
141
+ const hex = [...bytes].map((byte) => byte.toString(16).padStart(2, "0"));
142
+ return [
143
+ hex.slice(0, 4).join(""),
144
+ hex.slice(4, 6).join(""),
145
+ hex.slice(6, 8).join(""),
146
+ hex.slice(8, 10).join(""),
147
+ hex.slice(10, 16).join(""),
148
+ ].join("-");
149
+ }
150
+ //# sourceMappingURL=resources.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resources.js","sourceRoot":"","sources":["../src/resources.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,94 @@
1
+ export declare const API_KEY_SCOPES: readonly ["agents:read", "appearance:read", "analytics:read", "caps:read", "directories:read", "embed_keys:read", "env:read", "keys:read", "members:read", "model_keys:read", "releases:read", "schedules:read", "sessions:read", "source_repos:read", "webhooks:read", "agents:write", "appearance:write", "env:write", "releases:write", "schedules:write", "webhooks:write", "embed_keys:write", "caps:write", "source_repos:write", "env:secrets:read", "source_archives:read", "workspace_tokens:create", "audit_log:export", "members:invite", "members:write", "members:owner_role:write", "agents:delete", "keys:write", "model_keys:write", "billing:read"];
2
+ export type ApiKeyScope = (typeof API_KEY_SCOPES)[number];
3
+ export type ModelKeyProvider = "anthropic" | "openai" | "bedrock" | "vertex" | "openrouter" | "xai" | "google";
4
+ export type ModelApiFormat = "anthropic_messages" | "openai_chat_completions" | "openai_responses" | "bedrock_converse" | "vertex_generate_content";
5
+ export type ModelReasoningEffort = "low" | "medium" | "high";
6
+ export interface ModelParameters {
7
+ temperature?: number;
8
+ top_p?: number;
9
+ max_output_tokens?: number;
10
+ reasoning_effort?: ModelReasoningEffort;
11
+ provider_options?: {
12
+ openai?: {
13
+ service_tier?: "auto" | "default" | "flex" | "priority";
14
+ verbosity?: "low" | "medium" | "high";
15
+ };
16
+ };
17
+ }
18
+ export declare const WEBHOOK_EVENT_TYPES: readonly ["api_key.created", "api_key.revoked", "subscription.created", "subscription.updated", "subscription.canceled", "invoice.paid", "invoice.payment_failed", "organization.suspended", "organization.resumed", "usage.budget_threshold_reached", "usage.budget_exhausted", "session.started", "turn.completed", "turn.failed"];
19
+ export type WebhookEventType = (typeof WEBHOOK_EVENT_TYPES)[number];
20
+ export interface ApiKey {
21
+ id: string;
22
+ name: string;
23
+ prefix: string;
24
+ scopes: ApiKeyScope[];
25
+ mode?: "live" | "test";
26
+ expires_at?: string | null;
27
+ created_at: string;
28
+ last_used_at: string | null;
29
+ revoked_at: string | null;
30
+ }
31
+ export interface ApiKeyCreateResponse {
32
+ api_key: ApiKey;
33
+ secret: string;
34
+ }
35
+ export interface ModelKey {
36
+ id: number;
37
+ provider: ModelKeyProvider;
38
+ name: string;
39
+ tail: string;
40
+ auth_type: "api_key" | "oauth_subscription";
41
+ endpoint_url: string | null;
42
+ api_format: ModelApiFormat | null;
43
+ created_at: string;
44
+ last_verified_at: string | null;
45
+ verification_error: string | null;
46
+ revoked_at: string | null;
47
+ }
48
+ export interface ModelKeyCreateParams {
49
+ provider: ModelKeyProvider;
50
+ plaintext: string;
51
+ name?: string;
52
+ auth_type?: "api_key" | "oauth_subscription";
53
+ endpoint_url?: string;
54
+ api_format?: ModelApiFormat;
55
+ }
56
+ export interface WebhookEndpoint {
57
+ id: string;
58
+ name: string;
59
+ url: string;
60
+ event_types: WebhookEventType[];
61
+ enabled: boolean;
62
+ consecutive_failures: number;
63
+ disabled_at: string | null;
64
+ created_at: string;
65
+ }
66
+ export interface WebhookEndpointCreateResponse {
67
+ webhook_endpoint: WebhookEndpoint;
68
+ secret: string;
69
+ }
70
+ export interface UsageSummary {
71
+ totals: {
72
+ input_tokens?: number;
73
+ output_tokens?: number;
74
+ requests?: number;
75
+ [k: string]: number | undefined;
76
+ };
77
+ budget: {
78
+ monthly_cap_cents: number | null;
79
+ period_start: string;
80
+ period_end: string;
81
+ } | null;
82
+ }
83
+ export interface BillingStatus {
84
+ plan_key: string;
85
+ stripe_configured: boolean;
86
+ subscription_state: string | null;
87
+ current_period_end: string | null;
88
+ }
89
+ export interface ErrorBody {
90
+ error: string;
91
+ message?: string;
92
+ details?: Record<string, unknown>;
93
+ }
94
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,59 @@
1
+ // Hand-written types mirroring the Rails OpenAPI spec
2
+ // (apps/dharta-web/app/lib/openapi/spec.rb). Keep tight: only what
3
+ // the Dharta API actually returns / accepts. If a server field
4
+ // disappears, this file should drop it on the next bump rather than
5
+ // carrying dead optionals forever.
6
+ export const API_KEY_SCOPES = [
7
+ "agents:read",
8
+ "appearance:read",
9
+ "analytics:read",
10
+ "caps:read",
11
+ "directories:read",
12
+ "embed_keys:read",
13
+ "env:read",
14
+ "keys:read",
15
+ "members:read",
16
+ "model_keys:read",
17
+ "releases:read",
18
+ "schedules:read",
19
+ "sessions:read",
20
+ "source_repos:read",
21
+ "webhooks:read",
22
+ "agents:write",
23
+ "appearance:write",
24
+ "env:write",
25
+ "releases:write",
26
+ "schedules:write",
27
+ "webhooks:write",
28
+ "embed_keys:write",
29
+ "caps:write",
30
+ "source_repos:write",
31
+ "env:secrets:read",
32
+ "source_archives:read",
33
+ "workspace_tokens:create",
34
+ "audit_log:export",
35
+ "members:invite",
36
+ "members:write",
37
+ "members:owner_role:write",
38
+ "agents:delete",
39
+ "keys:write",
40
+ "model_keys:write",
41
+ "billing:read",
42
+ ];
43
+ export const WEBHOOK_EVENT_TYPES = [
44
+ "api_key.created",
45
+ "api_key.revoked",
46
+ "subscription.created",
47
+ "subscription.updated",
48
+ "subscription.canceled",
49
+ "invoice.paid",
50
+ "invoice.payment_failed",
51
+ "organization.suspended",
52
+ "organization.resumed",
53
+ "usage.budget_threshold_reached",
54
+ "usage.budget_exhausted",
55
+ "session.started",
56
+ "turn.completed",
57
+ "turn.failed",
58
+ ];
59
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,sDAAsD;AACtD,mEAAmE;AACnE,+DAA+D;AAC/D,oEAAoE;AACpE,mCAAmC;AAEnC,MAAM,CAAC,MAAM,cAAc,GAAG;IAC5B,aAAa;IACb,iBAAiB;IACjB,gBAAgB;IAChB,WAAW;IACX,kBAAkB;IAClB,iBAAiB;IACjB,UAAU;IACV,WAAW;IACX,cAAc;IACd,iBAAiB;IACjB,eAAe;IACf,gBAAgB;IAChB,eAAe;IACf,mBAAmB;IACnB,eAAe;IACf,cAAc;IACd,kBAAkB;IAClB,WAAW;IACX,gBAAgB;IAChB,iBAAiB;IACjB,gBAAgB;IAChB,kBAAkB;IAClB,YAAY;IACZ,oBAAoB;IACpB,kBAAkB;IAClB,sBAAsB;IACtB,yBAAyB;IACzB,kBAAkB;IAClB,gBAAgB;IAChB,eAAe;IACf,0BAA0B;IAC1B,eAAe;IACf,YAAY;IACZ,kBAAkB;IAClB,cAAc;CACN,CAAC;AAmCX,MAAM,CAAC,MAAM,mBAAmB,GAAG;IACjC,iBAAiB;IACjB,iBAAiB;IACjB,sBAAsB;IACtB,sBAAsB;IACtB,uBAAuB;IACvB,cAAc;IACd,wBAAwB;IACxB,wBAAwB;IACxB,sBAAsB;IACtB,gCAAgC;IAChC,wBAAwB;IACxB,iBAAiB;IACjB,gBAAgB;IAChB,aAAa;CACL,CAAC"}
@@ -0,0 +1,32 @@
1
+ {
2
+ "name": "@dharta/sdk",
3
+ "version": "0.6.77",
4
+ "description": "TypeScript SDK for the Dharta API (api keys, model keys, webhooks, usage, billing).",
5
+ "license": "MIT",
6
+ "type": "module",
7
+ "main": "./dist/index.js",
8
+ "types": "./dist/index.d.ts",
9
+ "exports": {
10
+ ".": {
11
+ "types": "./dist/index.d.ts",
12
+ "import": "./dist/index.js"
13
+ }
14
+ },
15
+ "files": [
16
+ "dist",
17
+ "src",
18
+ "README.md"
19
+ ],
20
+ "scripts": {
21
+ "build": "tsc -p tsconfig.json",
22
+ "test": "vitest run",
23
+ "test:watch": "vitest"
24
+ },
25
+ "engines": {
26
+ "node": ">=18.17.0"
27
+ },
28
+ "devDependencies": {
29
+ "typescript": "^7.0.2",
30
+ "vitest": "^4.1.9"
31
+ }
32
+ }
@@ -0,0 +1,58 @@
1
+ import type { ErrorBody } from "./types.js";
2
+
3
+ // Base class so consumers can `catch (e: KartaError)` without
4
+ // switching on status codes manually for the common cases.
5
+ export class KartaError extends Error {
6
+ readonly status: number;
7
+ readonly body: ErrorBody | string | null;
8
+
9
+ constructor(message: string, status: number, body: ErrorBody | string | null) {
10
+ super(message);
11
+ this.name = "KartaError";
12
+ this.status = status;
13
+ this.body = body;
14
+ }
15
+ }
16
+
17
+ export class KartaAuthError extends KartaError {
18
+ constructor(body: ErrorBody | string | null) {
19
+ super("Unauthenticated or invalid API key", 401, body);
20
+ this.name = "KartaAuthError";
21
+ }
22
+ }
23
+
24
+ export class KartaForbiddenError extends KartaError {
25
+ constructor(body: ErrorBody | string | null) {
26
+ super("Forbidden — caller lacks required scope", 403, body);
27
+ this.name = "KartaForbiddenError";
28
+ }
29
+ }
30
+
31
+ export class KartaNotFoundError extends KartaError {
32
+ constructor(body: ErrorBody | string | null) {
33
+ super("Resource not found", 404, body);
34
+ this.name = "KartaNotFoundError";
35
+ }
36
+ }
37
+
38
+ export class KartaValidationError extends KartaError {
39
+ constructor(body: ErrorBody | string | null) {
40
+ super("Validation failed", 422, body);
41
+ this.name = "KartaValidationError";
42
+ }
43
+ }
44
+
45
+ export function errorFor(
46
+ status: number,
47
+ body: ErrorBody | string | null,
48
+ ): KartaError {
49
+ if (status === 401) return new KartaAuthError(body);
50
+ if (status === 403) return new KartaForbiddenError(body);
51
+ if (status === 404) return new KartaNotFoundError(body);
52
+ if (status === 422) return new KartaValidationError(body);
53
+ const msg =
54
+ body && typeof body === "object" && "message" in body && body.message
55
+ ? body.message
56
+ : `Dharta API error ${status}`;
57
+ return new KartaError(String(msg), status, body);
58
+ }
@@ -0,0 +1,166 @@
1
+ import { errorFor } from "./errors.js";
2
+ import type { ErrorBody } from "./types.js";
3
+
4
+ export interface KartaOptions {
5
+ // Bearer token, e.g. "dh_live_…". Required for headless / SDK use.
6
+ apiKey: string;
7
+ baseUrl?: string;
8
+ // Override for tests / custom transport. Defaults to global `fetch`.
9
+ fetch?: typeof fetch;
10
+ // Map a non-2xx (status, parsed body) to the Error to throw. Lets a caller
11
+ // (the CLI) attach its own message formatting + `err.status`/`err.body`
12
+ // shape instead of the SDK's typed errorFor() hierarchy. Defaults to errorFor.
13
+ formatError?: (status: number, body: unknown) => Error;
14
+ // Map a transport failure (DNS, refused connection, TLS, etc.) to the Error
15
+ // to throw. Defaults to a generic SDK transport message.
16
+ formatNetworkError?: (url: string, error: unknown) => Error;
17
+ }
18
+
19
+ export interface RequestOptions {
20
+ method?: string;
21
+ path: string;
22
+ query?: Record<string, string | number | boolean | undefined>;
23
+ body?: unknown;
24
+ // Extra headers, merged over the Authorization/Accept/Content-Type defaults.
25
+ headers?: Record<string, string>;
26
+ }
27
+
28
+ const PROTECTED_HEADER_NAMES = new Set([
29
+ "authorization",
30
+ "host",
31
+ "cookie",
32
+ "content-length",
33
+ "connection",
34
+ "transfer-encoding",
35
+ "proxy-authorization",
36
+ ]);
37
+
38
+ export class HttpClient {
39
+ private readonly apiKey: string;
40
+ private readonly baseUrl: string;
41
+ private readonly fetchImpl: typeof fetch;
42
+ private readonly formatError?: (status: number, body: unknown) => Error;
43
+ private readonly formatNetworkError?: (url: string, error: unknown) => Error;
44
+
45
+ constructor(opts: KartaOptions) {
46
+ if (!opts.apiKey) {
47
+ throw new Error("DhartaSDK: `apiKey` is required.");
48
+ }
49
+ this.apiKey = opts.apiKey;
50
+ // dharta.ai, not api.dharta.ai: the SDK speaks to the control API
51
+ // (RFC 0011 HOST-5 note; api.dharta.ai is the data plane).
52
+ this.baseUrl = (opts.baseUrl ?? "https://dharta.ai").replace(/\/+$/, "");
53
+ // Bind so non-window fetch (msw / stub server) keeps its `this`.
54
+ const f = opts.fetch ?? globalThis.fetch;
55
+ if (!f) {
56
+ throw new Error(
57
+ "DhartaSDK: no `fetch` implementation available. Pass one via `fetch` option on Node <18.",
58
+ );
59
+ }
60
+ this.fetchImpl = f.bind(globalThis);
61
+ this.formatError = opts.formatError;
62
+ this.formatNetworkError = opts.formatNetworkError;
63
+ }
64
+
65
+ async request<T>(opts: RequestOptions): Promise<T> {
66
+ const url = new URL(this.baseUrl + opts.path);
67
+ if (opts.query) {
68
+ for (const [k, v] of Object.entries(opts.query)) {
69
+ if (v !== undefined) url.searchParams.set(k, String(v));
70
+ }
71
+ }
72
+
73
+ const extraHeaders = sanitizeHeaders(opts.headers);
74
+ const headers: Record<string, string> = {
75
+ Authorization: `Bearer ${this.apiKey}`,
76
+ Accept: "application/json",
77
+ ...extraHeaders,
78
+ };
79
+ let body: string | undefined;
80
+ if (opts.body !== undefined) {
81
+ headers["Content-Type"] = "application/json";
82
+ body = JSON.stringify(opts.body);
83
+ }
84
+
85
+ let res: Response;
86
+ try {
87
+ res = await this.fetchImpl(url.toString(), {
88
+ method: opts.method ?? "GET",
89
+ headers,
90
+ body,
91
+ });
92
+ } catch (error) {
93
+ throw this.networkError(url.toString(), error);
94
+ }
95
+
96
+ if (res.status === 204) {
97
+ return undefined as T;
98
+ }
99
+
100
+ const text = await res.text();
101
+ let parsed: unknown = null;
102
+ if (text.length > 0) {
103
+ try {
104
+ parsed = JSON.parse(text);
105
+ } catch {
106
+ parsed = text;
107
+ }
108
+ }
109
+
110
+ if (!res.ok) {
111
+ throw this.formatError
112
+ ? this.formatError(res.status, parsed)
113
+ : errorFor(res.status, parsed as ErrorBody | string | null);
114
+ }
115
+ return parsed as T;
116
+ }
117
+
118
+ // Raw fetch with the bearer header injected — for non-JSON flows (SSE
119
+ // streaming, multipart upload) where the caller needs the Response itself.
120
+ async raw(path: string, init?: RequestInit): Promise<Response> {
121
+ const extraHeaders = sanitizeHeaders(init?.headers);
122
+ const url = this.baseUrl + path;
123
+ try {
124
+ return await this.fetchImpl(url, {
125
+ ...init,
126
+ headers: {
127
+ Authorization: `Bearer ${this.apiKey}`,
128
+ ...extraHeaders,
129
+ },
130
+ });
131
+ } catch (error) {
132
+ throw this.networkError(url, error);
133
+ }
134
+ }
135
+
136
+ private networkError(url: string, error: unknown): Error {
137
+ if (this.formatNetworkError) return this.formatNetworkError(url, error);
138
+ return new Error(`DhartaSDK: could not reach ${new URL(url).origin} (${formatCause(error)}).`);
139
+ }
140
+ }
141
+
142
+ function formatCause(error: unknown): string {
143
+ return error instanceof Error && error.message ? error.message : String(error);
144
+ }
145
+
146
+ function sanitizeHeaders(headers?: HeadersInit): Record<string, string> {
147
+ if (!headers) return {};
148
+ const entries: Array<[string, string]> = [];
149
+ if (headers instanceof Headers) {
150
+ headers.forEach((value, key) => entries.push([key, value]));
151
+ } else if (Array.isArray(headers)) {
152
+ for (const [key, value] of headers) entries.push([key, value]);
153
+ } else {
154
+ for (const [key, value] of Object.entries(headers)) entries.push([key, String(value)]);
155
+ }
156
+
157
+ const sanitized: Record<string, string> = {};
158
+ for (const [key, value] of entries) {
159
+ const normalized = key.toLowerCase();
160
+ if (PROTECTED_HEADER_NAMES.has(normalized) || normalized.startsWith("x-forwarded-")) {
161
+ throw new Error(`DhartaSDK: header '${key}' is managed by the client and cannot be overridden.`);
162
+ }
163
+ sanitized[key] = value;
164
+ }
165
+ return sanitized;
166
+ }
@@ -0,0 +1,36 @@
1
+ import { HttpClient, type KartaOptions } from "./http.js";
2
+ import {
3
+ ApiKeysResource,
4
+ BillingResource,
5
+ ModelKeysResource,
6
+ UsageResource,
7
+ WebhookEndpointsResource,
8
+ } from "./resources.js";
9
+
10
+ export class Dharta {
11
+ readonly apiKeys: ApiKeysResource;
12
+ readonly modelKeys: ModelKeysResource;
13
+ readonly webhookEndpoints: WebhookEndpointsResource;
14
+ readonly usage: UsageResource;
15
+ readonly billing: BillingResource;
16
+
17
+ constructor(opts: KartaOptions) {
18
+ const http = new HttpClient(opts);
19
+ this.apiKeys = new ApiKeysResource(http);
20
+ this.modelKeys = new ModelKeysResource(http);
21
+ this.webhookEndpoints = new WebhookEndpointsResource(http);
22
+ this.usage = new UsageResource(http);
23
+ this.billing = new BillingResource(http);
24
+ }
25
+ }
26
+
27
+ export type { KartaOptions, RequestOptions } from "./http.js";
28
+ export { HttpClient } from "./http.js";
29
+ export * from "./types.js";
30
+ export {
31
+ KartaError,
32
+ KartaAuthError,
33
+ KartaForbiddenError,
34
+ KartaNotFoundError,
35
+ KartaValidationError,
36
+ } from "./errors.js";