@intutic/clawde 2.2.0 → 2.4.0

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 (44) hide show
  1. package/README.md +5 -3
  2. package/dist/client.d.ts +26 -3
  3. package/dist/client.d.ts.map +1 -1
  4. package/dist/client.js +104 -15
  5. package/dist/client.js.map +1 -1
  6. package/dist/control-plane.d.ts +314 -13
  7. package/dist/control-plane.d.ts.map +1 -1
  8. package/dist/control-plane.js +665 -20
  9. package/dist/control-plane.js.map +1 -1
  10. package/dist/errors.d.ts +13 -3
  11. package/dist/errors.d.ts.map +1 -1
  12. package/dist/errors.js +15 -3
  13. package/dist/errors.js.map +1 -1
  14. package/dist/evidence.d.ts +22 -0
  15. package/dist/evidence.d.ts.map +1 -0
  16. package/dist/evidence.js +114 -0
  17. package/dist/evidence.js.map +1 -0
  18. package/dist/git-context.d.ts +27 -0
  19. package/dist/git-context.d.ts.map +1 -0
  20. package/dist/git-context.js +114 -0
  21. package/dist/git-context.js.map +1 -0
  22. package/dist/index.d.ts +4 -0
  23. package/dist/index.d.ts.map +1 -1
  24. package/dist/index.js +14 -1
  25. package/dist/index.js.map +1 -1
  26. package/dist/integrity.d.ts +23 -0
  27. package/dist/integrity.d.ts.map +1 -0
  28. package/dist/integrity.js +89 -0
  29. package/dist/integrity.js.map +1 -0
  30. package/dist/refusals.d.ts +39 -15
  31. package/dist/refusals.d.ts.map +1 -1
  32. package/dist/refusals.js +69 -16
  33. package/dist/refusals.js.map +1 -1
  34. package/dist/toon.d.ts +22 -0
  35. package/dist/toon.d.ts.map +1 -0
  36. package/dist/toon.js +115 -0
  37. package/dist/toon.js.map +1 -0
  38. package/dist/types.d.ts +1182 -1
  39. package/dist/types.d.ts.map +1 -1
  40. package/dist/upstream.d.ts +8 -0
  41. package/dist/upstream.d.ts.map +1 -0
  42. package/dist/upstream.js +17 -0
  43. package/dist/upstream.js.map +1 -0
  44. package/package.json +1 -1
package/README.md CHANGED
@@ -10,13 +10,15 @@ npm install @intutic/clawde
10
10
 
11
11
  ## Features
12
12
 
13
- - **Governed chat:** `chat()` sends a request through the proxy and resolves with `verdict: 'allow'`. A governance refusal (policy block, reask, loop run held for review, spend cap, DLP block) throws `ClawdeBlockedError` with the proxy's `verdict`, `code` and reason, and is never retried; transport failures and 5xx answers are retried.
14
- - **Verdict Events:** `client.on('kill' | 'reask' | 'hold', ...)` fires on a refusal, before `chat()` throws. See the [SDK reference](https://docs.intutic.ai/reference/clawde-sdk#_5-verdicts-and-errors) for every refusal code.
13
+ - **Governed chat:** `chat()` sends a request through the proxy and resolves with `verdict: 'allow'`. A governance refusal (policy block, reask, loop run held for review, spend cap, DLP block) throws `ClawdeBlockedError` with the proxy's `verdict`, `code`, `ruleId` (when the proxy names the rule) and reason, and is never retried; transport failures and 5xx answers are retried.
14
+ - **Withheld tool calls:** when the proxy withholds a tool call from the model's answer (a tool an SOP denies, the SSO group policy, destructive SQL, sensitive output), the answer arrives as a 200 that names the refusal in the `x-intutic-refusal` and `x-intutic-refusal-rule` headers. `chat()` reads them and throws `ClawdeBlockedError` too. For a stream you read yourself, pass each line to `streamRefusal()`, which finds the `: intutic-refusal` marker the proxy writes before the refusal text. See [Verdicts and Errors](https://docs.intutic.ai/reference/clawde-sdk#_5-verdicts-and-errors) for every refusal code.
15
+ - **Verdict Events:** `client.on('kill' | 'reask' | 'hold', ...)` fires on a refusal, before `chat()` throws.
15
16
  - **Anthropic requests:** `provider: 'anthropic'` translates OpenAI-style parameters to an Anthropic Messages body, sends it to the proxy's `/v1/messages` route, and translates the reply back.
16
17
  - **Budget Check:** `checkBudget()` reports whether the workspace has budget left, from the control plane's `GET /api/v1/budget`.
17
18
  - **Circuit Breaker:** `client.circuitBreaker(toolName, options)(fn)` runs `fn`, after a workspace budget check when `requireBudget` is set, failing closed unless `failOpen` is set.
18
19
  - **Context Resolution:** `resolveContext()` reads the sync daemon's `~/.intutic/config.json` (git branch, Jira ticket, PagerDuty incident, CI pipeline, workspace, session), falling back to environment variables.
19
- - **Control-Plane Management (`ControlPlaneClient`):** Org signup, team/workspace creation, gateway registration and assignment, and provider-credential provisioning — the CLI's management surface, callable programmatically. See the [SDK reference](https://docs.intutic.ai/reference/clawde-sdk#control-plane-management-controlplaneclient).
20
+ - **Git context (`autoContext`, on by default):** with an Intutic virtual key, in a git repository, the first `chat()` registers a session with the control plane carrying the repository (the `origin` remote as `host/path`, credentials removed), the branch and the HEAD commit, so the calls count in cost per branch, commit and pull request. Pass `autoContext: false` to send none of it. See [Git context and cost attribution](https://docs.intutic.ai/reference/clawde-sdk#_1a-git-context-and-cost-attribution).
21
+ - **Control-Plane Management (`ControlPlaneClient`):** The operator APIs the CLI exposes, callable programmatically: org and workspace setup, gateways, settings and provider credentials, the MCP registry, notification rules, SIEM destinations, usage, the AI inventory, compliance evidence (with `verifyEvidenceArchive()` to check an archive offline), policy guardrails, held decisions and loop runs, findings, traces, trace integrity (with `verifyIntegrityRoot()` to check a sealed root's signature offline), policies and SOPs. The Python SDK has the same methods in snake_case. See the [SDK reference](https://docs.intutic.ai/reference/clawde-sdk#control-plane-management-controlplaneclient).
20
22
 
21
23
  ## License
22
24
 
package/dist/client.d.ts CHANGED
@@ -1,4 +1,6 @@
1
1
  import { ClawdeClientOptions, ChatParams, ChatResponse, ResolvedContext, BudgetCheckResult, EventCallback, CircuitBreakerOptions, VerdictEvent } from './types';
2
+ /** The harness a session this SDK registers is recorded under. */
3
+ export declare const SDK_HARNESS = "clawde_sdk";
2
4
  export declare class ClawdeClient {
3
5
  private apiKey;
4
6
  private baseUrl;
@@ -12,6 +14,8 @@ export declare class ClawdeClient {
12
14
  private budgetChecker;
13
15
  private circuitBreakerWrapper;
14
16
  private eventEmitter;
17
+ /** The session this client's requests are filed under, resolved once, on the first `chat()`. */
18
+ private session?;
15
19
  constructor(options: ClawdeClientOptions);
16
20
  on(event: VerdictEvent, callback: EventCallback): void;
17
21
  off(event: string, callback: EventCallback): void;
@@ -23,10 +27,29 @@ export declare class ClawdeClient {
23
27
  *
24
28
  * Resolves with `verdict: 'allow'` when the proxy let the request through. A
25
29
  * governance refusal, including one the proxy answers with a 200 and names in
26
- * `x-intutic-refusal`, fires the matching event and rejects with
27
- * `ClawdeBlockedError`, unretried. Transport failures, timeouts and 5xx
28
- * answers are retried; anything else rejects with `ClawdeConnectionError`.
30
+ * `x-intutic-refusal` (or, on a stream, in its `: intutic-refusal` line),
31
+ * fires the matching event and rejects with `ClawdeBlockedError`, unretried.
32
+ * Transport failures, timeouts and 5xx answers are retried; anything else
33
+ * rejects with `ClawdeConnectionError`.
29
34
  */
30
35
  chat(params: ChatParams): Promise<ChatResponse>;
36
+ /**
37
+ * The session to send as `x-session-id`, or null to send none.
38
+ *
39
+ * A session id from the environment (`INTUTIC_SESSION_ID`, or the sync
40
+ * daemon's config) is the session that started this process, and its owner
41
+ * reports its context, so it is used as is. Otherwise, when the working
42
+ * directory is a git repository, this registers a session carrying its
43
+ * repository, branch and commit (`POST /api/v1/sessions`, as the sync
44
+ * daemon does), so cost per branch, commit and pull request includes this
45
+ * client's calls. Only with an Intutic virtual key: any other key is a
46
+ * provider's, and it is never sent to the control plane. `autoContext:
47
+ * false` turns this off. Best effort: a control plane that cannot be
48
+ * reached or refuses costs the attribution, never the call.
49
+ */
50
+ private openSession;
51
+ private controlPlane;
52
+ /** Fires the refusal's event, then throws it. */
53
+ private refuse;
31
54
  }
32
55
  //# sourceMappingURL=client.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,mBAAmB,EACnB,UAAU,EACV,YAAY,EACZ,eAAe,EACf,iBAAiB,EACjB,aAAa,EACb,qBAAqB,EACrB,YAAY,EACb,MAAM,SAAS,CAAA;AAUhB,qBAAa,YAAY;IACvB,OAAO,CAAC,MAAM,CAAQ;IACtB,OAAO,CAAC,OAAO,CAAQ;IACvB,OAAO,CAAC,eAAe,CAAQ;IAC/B,OAAO,CAAC,QAAQ,CAAC,CAAmC;IACpD,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,OAAO,CAAQ;IACvB,OAAO,CAAC,OAAO,CAAQ;IAEvB,wEAAwE;IACxE,OAAO,CAAC,QAAQ,CAAe;IAE/B,OAAO,CAAC,aAAa,CAAe;IACpC,OAAO,CAAC,qBAAqB,CAAgB;IAC7C,OAAO,CAAC,YAAY,CAAoB;gBAE5B,OAAO,EAAE,mBAAmB;IAuBjC,EAAE,CAAC,KAAK,EAAE,YAAY,EAAE,QAAQ,EAAE,aAAa,GAAG,IAAI;IAItD,GAAG,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,aAAa,GAAG,IAAI;IAK3C,WAAW,CAAC,KAAK,EAAE,MAAM,EAAE,eAAe,EAAE,MAAM,GAAG,OAAO,CAAC,iBAAiB,CAAC;IAK/E,cAAc,IAAI,OAAO,CAAC,eAAe,CAAC;IAQhD,cAAc,CAAC,CAAC,EACrB,QAAQ,EAAE,MAAM,EAChB,OAAO,GAAE,qBAA0B,GAClC,CAAC,EAAE,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,KAAK,OAAO,CAAC,CAAC,CAAC;IAIvC;;;;;;;;OAQG;IACU,IAAI,CAAC,MAAM,EAAE,UAAU,GAAG,OAAO,CAAC,YAAY,CAAC;CA8E7D"}
1
+ {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,mBAAmB,EACnB,UAAU,EACV,YAAY,EACZ,eAAe,EACf,iBAAiB,EACjB,aAAa,EACb,qBAAqB,EACrB,YAAY,EACb,MAAM,SAAS,CAAA;AAahB,kEAAkE;AAClE,eAAO,MAAM,WAAW,eAAe,CAAA;AAEvC,qBAAa,YAAY;IACvB,OAAO,CAAC,MAAM,CAAQ;IACtB,OAAO,CAAC,OAAO,CAAQ;IACvB,OAAO,CAAC,eAAe,CAAQ;IAC/B,OAAO,CAAC,QAAQ,CAAC,CAAmC;IACpD,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,OAAO,CAAQ;IACvB,OAAO,CAAC,OAAO,CAAQ;IAEvB,wEAAwE;IACxE,OAAO,CAAC,QAAQ,CAAe;IAE/B,OAAO,CAAC,aAAa,CAAe;IACpC,OAAO,CAAC,qBAAqB,CAAgB;IAC7C,OAAO,CAAC,YAAY,CAAoB;IAExC,gGAAgG;IAChG,OAAO,CAAC,OAAO,CAAC,CAAwB;gBAE5B,OAAO,EAAE,mBAAmB;IAuBjC,EAAE,CAAC,KAAK,EAAE,YAAY,EAAE,QAAQ,EAAE,aAAa,GAAG,IAAI;IAItD,GAAG,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,aAAa,GAAG,IAAI;IAK3C,WAAW,CAAC,KAAK,EAAE,MAAM,EAAE,eAAe,EAAE,MAAM,GAAG,OAAO,CAAC,iBAAiB,CAAC;IAK/E,cAAc,IAAI,OAAO,CAAC,eAAe,CAAC;IAQhD,cAAc,CAAC,CAAC,EACrB,QAAQ,EAAE,MAAM,EAChB,OAAO,GAAE,qBAA0B,GAClC,CAAC,EAAE,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,KAAK,OAAO,CAAC,CAAC,CAAC;IAIvC;;;;;;;;;OASG;IACU,IAAI,CAAC,MAAM,EAAE,UAAU,GAAG,OAAO,CAAC,YAAY,CAAC;IAgG5D;;;;;;;;;;;;;OAaG;YACW,WAAW;YA0BX,YAAY;IAW1B,iDAAiD;IACjD,OAAO,CAAC,MAAM;CAKf"}
package/dist/client.js CHANGED
@@ -1,14 +1,18 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.ClawdeClient = void 0;
3
+ exports.ClawdeClient = exports.SDK_HARNESS = void 0;
4
4
  const errors_1 = require("./errors");
5
5
  const refusals_1 = require("./refusals");
6
+ const upstream_1 = require("./upstream");
6
7
  const schema_enforcer_1 = require("./schema-enforcer");
7
8
  const context_resolver_1 = require("./context-resolver");
9
+ const git_context_1 = require("./git-context");
8
10
  const budget_checker_1 = require("./budget-checker");
9
11
  const circuit_breaker_1 = require("./circuit-breaker");
10
12
  const event_emitter_1 = require("./event-emitter");
11
13
  const graph_identity_1 = require("./graph-identity");
14
+ /** The harness a session this SDK registers is recorded under. */
15
+ exports.SDK_HARNESS = 'clawde_sdk';
12
16
  class ClawdeClient {
13
17
  apiKey;
14
18
  baseUrl;
@@ -22,6 +26,8 @@ class ClawdeClient {
22
26
  budgetChecker;
23
27
  circuitBreakerWrapper;
24
28
  eventEmitter;
29
+ /** The session this client's requests are filed under, resolved once, on the first `chat()`. */
30
+ session;
25
31
  constructor(options) {
26
32
  if (!options.apiKey) {
27
33
  throw new Error('API key is required to initialize ClawdeClient.');
@@ -68,11 +74,14 @@ class ClawdeClient {
68
74
  *
69
75
  * Resolves with `verdict: 'allow'` when the proxy let the request through. A
70
76
  * governance refusal, including one the proxy answers with a 200 and names in
71
- * `x-intutic-refusal`, fires the matching event and rejects with
72
- * `ClawdeBlockedError`, unretried. Transport failures, timeouts and 5xx
73
- * answers are retried; anything else rejects with `ClawdeConnectionError`.
77
+ * `x-intutic-refusal` (or, on a stream, in its `: intutic-refusal` line),
78
+ * fires the matching event and rejects with `ClawdeBlockedError`, unretried.
79
+ * Transport failures, timeouts and 5xx answers are retried; anything else
80
+ * rejects with `ClawdeConnectionError`.
74
81
  */
75
82
  async chat(params) {
83
+ this.session ??= this.openSession();
84
+ const sessionId = await this.session;
76
85
  const anthropic = this.provider === 'anthropic';
77
86
  // The proxy picks the wire format by route: an Anthropic Messages body
78
87
  // sent to /v1/chat/completions is parsed as an OpenAI one.
@@ -86,6 +95,9 @@ class ClawdeClient {
86
95
  // request as a graph of one, and skips membership, fleet spend and
87
96
  // node counting entirely.
88
97
  ...(0, graph_identity_1.identityHeaders)(this.identity),
98
+ // The proxy files the trace under this session, and the control plane
99
+ // copies the session's repository, branch and commit onto it.
100
+ ...(sessionId ? { 'x-session-id': sessionId } : {}),
89
101
  };
90
102
  const body = JSON.stringify((0, schema_enforcer_1.normalizeRequest)(params, this.provider));
91
103
  let lastError = '';
@@ -102,10 +114,16 @@ class ClawdeClient {
102
114
  let status;
103
115
  let text;
104
116
  let refusedBy;
117
+ let refusedRule;
118
+ let upstream;
119
+ let retryAfter;
105
120
  try {
106
121
  const response = await fetch(url, { method: 'POST', headers, body, signal: controller.signal });
107
122
  status = response.status;
108
123
  refusedBy = response.headers.get(refusals_1.REFUSAL_HEADER);
124
+ refusedRule = response.headers.get(refusals_1.REFUSAL_RULE_HEADER);
125
+ upstream = (0, upstream_1.upstreamCalls)(response.headers);
126
+ retryAfter = response.headers.get('retry-after');
109
127
  text = await response.text();
110
128
  }
111
129
  catch (err) {
@@ -121,32 +139,103 @@ class ClawdeClient {
121
139
  json = JSON.parse(text);
122
140
  }
123
141
  catch {
142
+ // A `stream: true` request comes back as an event stream, which
143
+ // `chat()` does not parse; it still must not pass off a refusal
144
+ // the stream names as a transport failure.
145
+ const streamed = (0, refusals_1.streamRefusal)(text);
146
+ if (streamed)
147
+ this.refuse(streamed, status);
124
148
  throw new errors_1.ClawdeConnectionError(`Proxy answered ${status} with a body that is not JSON: ${text}`);
125
149
  }
126
150
  const normalized = (0, schema_enforcer_1.normalizeResponse)(json, this.provider);
127
- // A refusal answered as an assistant turn (the cost-prediction gate).
151
+ // A refusal answered as an assistant turn: a withheld tool call, a
152
+ // withheld body, or the cost-prediction gate.
128
153
  const content = normalized.choices?.[0]?.message?.content;
129
- const answered = (0, refusals_1.headerRefusal)(refusedBy, typeof content === 'string' ? content : '');
130
- if (answered) {
131
- this.eventEmitter.emit(answered.verdict, { ...answered, status });
132
- throw new errors_1.ClawdeBlockedError(answered.verdict, answered.code, status, answered.message);
133
- }
154
+ const answered = (0, refusals_1.headerRefusal)(refusedBy, refusedRule, typeof content === 'string' ? content : '');
155
+ if (answered)
156
+ this.refuse(answered, status);
134
157
  normalized.verdict = 'allow';
158
+ if (upstream)
159
+ normalized.upstream = upstream;
135
160
  return normalized;
136
161
  }
137
162
  const refusal = (0, refusals_1.parseRefusal)(status, text);
138
- if (refusal) {
139
- this.eventEmitter.emit(refusal.verdict, { ...refusal, status });
140
- throw new errors_1.ClawdeBlockedError(refusal.verdict, refusal.code, status, refusal.message);
141
- }
163
+ if (refusal)
164
+ this.refuse(refusal, status, retryAfter);
142
165
  lastError = `HTTP error ${status}: ${text}`;
143
166
  // A 4xx that is not a refusal (bad key, malformed body) fails the same
144
- // way every time; only a 5xx is worth another attempt.
167
+ // way every time; only a 5xx is worth another attempt — and not one the
168
+ // proxy already retried upstream, which another round from here would
169
+ // only multiply.
145
170
  if (status < 500)
146
171
  throw new errors_1.ClawdeConnectionError(lastError);
172
+ if (upstream) {
173
+ throw new errors_1.ClawdeConnectionError(`${lastError} (the proxy already made ${upstream.attempts} upstream calls)`);
174
+ }
147
175
  }
148
176
  throw new errors_1.ClawdeConnectionError(`Request failed after ${maxAttempts} attempts. Last error: ${lastError}`);
149
177
  }
178
+ /**
179
+ * The session to send as `x-session-id`, or null to send none.
180
+ *
181
+ * A session id from the environment (`INTUTIC_SESSION_ID`, or the sync
182
+ * daemon's config) is the session that started this process, and its owner
183
+ * reports its context, so it is used as is. Otherwise, when the working
184
+ * directory is a git repository, this registers a session carrying its
185
+ * repository, branch and commit (`POST /api/v1/sessions`, as the sync
186
+ * daemon does), so cost per branch, commit and pull request includes this
187
+ * client's calls. Only with an Intutic virtual key: any other key is a
188
+ * provider's, and it is never sent to the control plane. `autoContext:
189
+ * false` turns this off. Best effort: a control plane that cannot be
190
+ * reached or refuses costs the attribution, never the call.
191
+ */
192
+ async openSession() {
193
+ if (!this.autoContext)
194
+ return null;
195
+ const context = await (0, context_resolver_1.resolveContext)();
196
+ if (context.sessionId)
197
+ return context.sessionId;
198
+ if (!this.apiKey.startsWith('vk_'))
199
+ return null;
200
+ const git = await (0, git_context_1.resolveGitContext)(context.workingDirectory ?? process.cwd(), context.gitBranch);
201
+ if (Object.keys(git).length === 0)
202
+ return null;
203
+ try {
204
+ // whoami first, always: the repository goes only to a control plane
205
+ // that accepted the key. A workspace id from the environment proves
206
+ // nothing about the key, and the session route only takes the key's own.
207
+ const { workspaceId } = await this.controlPlane('GET', '/api/v1/auth/me');
208
+ const session = await this.controlPlane('POST', '/api/v1/sessions', {
209
+ workspaceId,
210
+ harnessType: exports.SDK_HARNESS,
211
+ ...git,
212
+ });
213
+ return session.sessionId ?? null;
214
+ }
215
+ catch (err) {
216
+ if (process.env.INTUTIC_DEBUG === 'true') {
217
+ console.warn(`[Clawde SDK] No session registered; calls carry no git context: ${err instanceof Error ? err.message : String(err)}`);
218
+ }
219
+ return null;
220
+ }
221
+ }
222
+ async controlPlane(method, path, body) {
223
+ const res = await fetch(`${this.controlPlaneUrl}${path}`, {
224
+ method,
225
+ headers: { 'Content-Type': 'application/json', Authorization: `Bearer ${this.apiKey}` },
226
+ body: body === undefined ? undefined : JSON.stringify(body),
227
+ signal: AbortSignal.timeout(5_000),
228
+ });
229
+ if (!res.ok)
230
+ throw new Error(`${method} ${path} answered ${res.status}`);
231
+ return (await res.json());
232
+ }
233
+ /** Fires the refusal's event, then throws it. */
234
+ refuse(refusal, status, retryAfter = null) {
235
+ const seconds = retryAfter !== null && /^\d+$/.test(retryAfter.trim()) ? Number(retryAfter.trim()) : undefined;
236
+ this.eventEmitter.emit(refusal.verdict, { ...refusal, status, ...(seconds !== undefined ? { retryAfterSeconds: seconds } : {}) });
237
+ throw new errors_1.ClawdeBlockedError(refusal.verdict, refusal.code, status, refusal.message, refusal.ruleId, seconds);
238
+ }
150
239
  }
151
240
  exports.ClawdeClient = ClawdeClient;
152
241
  //# sourceMappingURL=client.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"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"}