sessionpipe-core 0.1.0 → 0.2.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.
package/dist/schema.js CHANGED
@@ -1,4 +1,4 @@
1
- // sessionpipe-core 0.1.0 · Apache-2.0 · https://sessionpipe.org
1
+ // sessionpipe-core 0.2.0 · Apache-2.0 · https://sessionpipe.org
2
2
 
3
3
  // schema/v1.ts
4
4
  import { z } from "zod";
@@ -112,6 +112,8 @@ var EventData = z.object({
112
112
  "turn.ended": Loose.extend({
113
113
  turn_id: z.string().max(128).optional(),
114
114
  reason: z.enum(["stop", "interrupt", "error"]),
115
+ /** The harness's error class when reason is error (rate_limit, overloaded, authentication_failed, server_error …). */
116
+ error: z.string().max(200).optional(),
115
117
  ms: z.int().min(0).optional()
116
118
  }),
117
119
  "turn.transcript": Loose.extend({
@@ -168,44 +170,150 @@ var ErrorResponse = z.object({
168
170
  max_tier: Tier.optional()
169
171
  });
170
172
  var Capability = z.enum(["events", "backfill", "forget", "control", "native"]);
171
- var WellKnown = z.object({
172
- protocol: z.array(z.int().min(1)).min(1),
173
- max_tier: Tier,
174
- capabilities: z.array(z.string().regex(/^[a-z][a-z0-9-]*$/)),
175
- auth: z.array(z.enum(["bearer"])).default(["bearer"]),
176
- endpoints: z.object({
177
- events: z.string(),
178
- control: z.string().optional(),
179
- native: z.string().optional()
180
- }),
181
- batch: z.object({ max_events: z.int().min(1).max(50), max_bytes: z.int().min(1024).max(262144) }),
182
- control: z.object({ wait_max_s: z.int().min(1).max(60) }).optional()
183
- });
184
- var ControlKind = z.enum(["permission.answer", "prompt", "cancel"]);
185
- var ControlMessage = z.object({
186
- id: Ulid,
173
+ var B64Url = z.string().regex(/^[A-Za-z0-9_-]*$/, "base64url, no padding");
174
+ var MachineId = z.string().regex(/^m_[A-Za-z0-9_-]{16,40}$/, "m_ + 16\u201340 base64url");
175
+ var SessionRef = z.string().regex(/^[a-z][a-z0-9-]{0,39}:[A-Za-z0-9._:-]{1,128}$/, "<harness>:<session id>");
176
+ var ControlKind = z.enum(["prompt", "permission.answer", "cancel", "start"]);
177
+ var DeliveryMode = z.enum(["sdk", "waiter", "turn", "api", "resume", "fork"]);
178
+ var ControlCommand = z.object({
179
+ v: z.literal(1),
180
+ t: z.literal("sessionpipe.control"),
181
+ machine: MachineId,
187
182
  kind: ControlKind,
188
- /** The attention_id a permission answer is for. */
189
- for: z.string().max(128).optional(),
183
+ session: SessionRef,
184
+ /** prompt, start: the message for the model. */
185
+ text: z.string().min(1).max(4e3).optional(),
186
+ /** permission.answer: the attention_id being answered. */
187
+ for: z.string().min(1).max(128).optional(),
190
188
  decision: z.enum(["allow", "deny"]).optional(),
191
- /** The prompt text. */
192
- text: z.string().max(2e4).optional(),
193
189
  /** Shown to the model beside a decision. */
194
190
  note: z.string().max(2e3).optional(),
191
+ /** start: the absolute folder the new session runs in. */
192
+ cwd: z.string().max(1024).optional(),
193
+ /** At least 16 random bytes, base64url. */
194
+ nonce: z.string().regex(/^[A-Za-z0-9_-]{22,64}$/),
195
+ /** Epoch ms, the signing device's clock. */
196
+ iat: z.int().min(1)
197
+ });
198
+ var ControlGrant = z.object({
199
+ v: z.literal(1),
200
+ t: z.literal("sessionpipe.grant"),
201
+ /** The day key: P-256 SPKI, base64url. */
202
+ pub: B64Url.min(1),
203
+ iat: z.int().min(1),
204
+ exp: z.int().min(1),
205
+ /** The receiver's WebAuthn rp id (well-known control.signing.rp_id). */
206
+ rp: z.string().min(1).max(253)
207
+ });
208
+ var ControlAssertion = z.object({
209
+ cred: B64Url.min(1),
210
+ ad: B64Url.min(1),
211
+ cd: B64Url.min(1),
212
+ sig: B64Url.min(1)
213
+ });
214
+ var ControlKey = z.object({
215
+ id: B64Url.min(16).max(1400),
216
+ alg: z.union([z.literal(-7), z.literal(-257)]),
217
+ spki: B64Url.min(1)
218
+ });
219
+ var ControlMessage = z.object({
220
+ /** The receiver's id for this message; the ack key. Not signed: the nonce inside cmd is. */
221
+ id: Ulid,
222
+ /** The command string, exactly as signed (≤ 12 000 characters). */
223
+ cmd: z.string().min(1).max(12e3),
224
+ /** The day key's ECDSA P-256 / SHA-256 signature over cmd: raw r‖s, base64url. */
225
+ csig: B64Url.nullable().optional(),
226
+ /** The grant vouching for the day key: its string plus the passkey's assertion over sha256(str). */
227
+ grant: ControlAssertion.extend({ str: z.string().min(1).max(2e3) }).nullable().optional(),
228
+ /** Instead of csig + grant: one passkey assertion over sha256(cmd). */
229
+ confirm: ControlAssertion.nullable().optional(),
230
+ /** The receiver's clock. */
195
231
  at: Rfc3339,
232
+ /** After this the machine MUST NOT act and acks `expired`; at most 24 h after `at`. */
196
233
  expires_at: Rfc3339
197
234
  });
198
235
  var ControlPoll = z.object({ messages: z.array(ControlMessage) });
236
+ var ControlOutcome = z.enum(["taken", "delivered", "expired", "unsupported", "failed", "refused"]);
199
237
  var ControlAck = z.object({
200
238
  acks: z.array(
201
239
  z.object({
202
240
  id: Ulid,
203
- outcome: z.enum(["delivered", "expired", "unsupported", "failed"]),
241
+ outcome: ControlOutcome,
204
242
  at: Rfc3339,
205
- detail: z.string().max(500).optional()
243
+ /** delivered: how it reached the session. */
244
+ mode: DeliveryMode.optional(),
245
+ /** The session that took it, when not the one named (a fork's copy, a started session). */
246
+ session: SessionRef.optional(),
247
+ /** refused: the verifier's code, or the machine's own (`folder`, `no_attention`, `busy`). */
248
+ code: z.string().regex(/^[a-z_]{1,40}$/).optional(),
249
+ detail: z.string().max(500).optional(),
250
+ /** resume / fork / start: the agent's reply, redacted by the secrets ruleset. */
251
+ reply: z.string().max(2e4).optional()
206
252
  })
207
253
  ).min(1)
208
254
  });
255
+ var ControlPairStart = z.object({
256
+ /** Set when adding a key to a machine already paired. */
257
+ machine: MachineId.optional(),
258
+ name: z.string().min(1).max(80),
259
+ harnesses: z.array(z.string().regex(/^[a-z][a-z0-9-]{0,39}$/)).max(20),
260
+ modes: z.array(DeliveryMode),
261
+ version: z.string().max(40),
262
+ /** The folders the machine lets sessions run in, for the receiver's "new session"
263
+ * picker. Informational: the machine checks its own list again. */
264
+ folders: z.array(z.string().max(1024)).max(50).optional(),
265
+ /** safe: nothing that needs approval runs unattended; auto: the harness's auto mode. */
266
+ mode: z.enum(["safe", "auto"]).optional()
267
+ });
268
+ var ControlPairStarted = z.object({
269
+ machine: MachineId,
270
+ code: z.string().regex(/^[A-Za-z0-9-]{6,32}$/),
271
+ url: z.url(),
272
+ /** Six digits the terminal and the receiver's page both show. */
273
+ check: z.string().regex(/^\d{6}$/),
274
+ expires_at: Rfc3339
275
+ });
276
+ var ControlPaired = z.object({
277
+ status: z.enum(["pending", "paired", "expired"]),
278
+ key: ControlKey.optional(),
279
+ proof: ControlAssertion.optional(),
280
+ /** The machine's own bearer for polls, acks and hello: opens nothing else. Minted
281
+ * once, at the first pairing of a machine. */
282
+ token: z.string().min(16).max(256).optional()
283
+ });
284
+ var ControlHello = z.object({
285
+ name: z.string().min(1).max(80),
286
+ harnesses: z.array(z.string().regex(/^[a-z][a-z0-9-]{0,39}$/)).max(20),
287
+ modes: z.array(DeliveryMode),
288
+ /** Credential ids of the keys enrolled on the machine. */
289
+ keys: z.array(B64Url.min(16).max(1400)).max(50),
290
+ version: z.string().max(40),
291
+ /** Live sessions with a waiter parked on the daemon's socket. */
292
+ waiting: z.array(SessionRef).max(500).optional(),
293
+ /** As in control-pair.json: informational, re-checked on the machine. */
294
+ folders: z.array(z.string().max(1024)).max(50).optional(),
295
+ mode: z.enum(["safe", "auto"]).optional()
296
+ });
297
+ var WellKnown = z.object({
298
+ protocol: z.array(z.int().min(1)).min(1),
299
+ max_tier: Tier,
300
+ capabilities: z.array(z.string().regex(/^[a-z][a-z0-9-]*$/)),
301
+ auth: z.array(z.enum(["bearer"])).default(["bearer"]),
302
+ endpoints: z.object({
303
+ events: z.string(),
304
+ control: z.string().optional(),
305
+ native: z.string().optional()
306
+ }),
307
+ batch: z.object({ max_events: z.int().min(1).max(50), max_bytes: z.int().min(1024).max(262144) }),
308
+ control: z.object({
309
+ wait_max_s: z.int().min(1).max(60),
310
+ /** How commands are signed: the WebAuthn rp id keys are enrolled for, and the algorithms. */
311
+ signing: z.object({
312
+ rp_id: z.string().min(1).max(253),
313
+ algs: z.array(z.union([z.literal(-7), z.literal(-257)])).min(1)
314
+ })
315
+ }).optional()
316
+ });
209
317
  var SCHEMAS = {
210
318
  event: Event,
211
319
  "event-data": EventData,
@@ -214,8 +322,15 @@ var SCHEMAS = {
214
322
  error: ErrorResponse,
215
323
  "well-known": WellKnown,
216
324
  control: ControlMessage,
325
+ "control-command": ControlCommand,
326
+ "control-grant": ControlGrant,
327
+ "control-key": ControlKey,
217
328
  "control-poll": ControlPoll,
218
- "control-ack": ControlAck
329
+ "control-ack": ControlAck,
330
+ "control-pair": ControlPairStart,
331
+ "control-pair-started": ControlPairStarted,
332
+ "control-paired": ControlPaired,
333
+ "control-hello": ControlHello
219
334
  };
220
335
  export {
221
336
  AttentionKind,
@@ -223,9 +338,19 @@ export {
223
338
  BatchResponse,
224
339
  Capability,
225
340
  ControlAck,
341
+ ControlAssertion,
342
+ ControlCommand,
343
+ ControlGrant,
344
+ ControlHello,
345
+ ControlKey,
226
346
  ControlKind,
227
347
  ControlMessage,
348
+ ControlOutcome,
349
+ ControlPairStart,
350
+ ControlPairStarted,
351
+ ControlPaired,
228
352
  ControlPoll,
353
+ DeliveryMode,
229
354
  ErrorResponse,
230
355
  Event,
231
356
  EventData,
@@ -233,12 +358,14 @@ export {
233
358
  HARNESS_NAMES,
234
359
  Harness,
235
360
  KNOWN_TYPES,
361
+ MachineId,
236
362
  PROTOCOL,
237
363
  Privacy,
238
364
  Rfc3339,
239
365
  SCHEMAS,
240
366
  Session,
241
367
  SessionId,
368
+ SessionRef,
242
369
  TYPE_TIER,
243
370
  Tier,
244
371
  ToolName,
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../schema/v1.ts"],
4
- "sourcesContent": ["// SPDX-License-Identifier: Apache-2.0\n// The one source for the protocol's shapes. schemas/v1/*.json are GENERATED from\n// this file (`npm run schemas`); core's runtime types are inferred from it with\n// type-only imports, so zod never enters the zero-dependency bundle. Prose lives in\n// spec/PROTOCOL.md; a rule that is not encoded here is a MUST in words only.\nimport { z } from \"zod\";\n\nexport const PROTOCOL = 1;\n\n/** Dotted, lowercase. Unknown types MUST be accepted and stored. */\nexport const EventType = z\n .string()\n .regex(/^(?:native|[a-z][a-z0-9]*(?:\\.[a-z][a-z0-9_]*)+)$/, \"dotted lowercase type, or native\");\n\nexport const KNOWN_TYPES = [\n \"session.started\",\n \"session.heartbeat\",\n \"session.ended\",\n \"session.backfill\",\n \"session.forgotten\",\n \"turn.started\",\n \"turn.ended\",\n \"turn.transcript\",\n \"tool.started\",\n \"tool.ended\",\n \"files.changed\",\n \"attention.needed\",\n \"attention.cleared\",\n \"subagent.started\",\n \"subagent.ended\",\n \"context.compacted\",\n \"native\",\n] as const;\n\n/** The lowest tier that carries each known type. */\nexport const TYPE_TIER: Record<(typeof KNOWN_TYPES)[number], 0 | 1 | 2 | 3> = {\n \"session.started\": 0,\n \"session.heartbeat\": 0,\n \"session.ended\": 0,\n \"session.backfill\": 0,\n \"session.forgotten\": 0,\n \"turn.started\": 0,\n \"turn.ended\": 0,\n \"turn.transcript\": 2,\n \"tool.started\": 1,\n \"tool.ended\": 1,\n \"files.changed\": 1,\n \"attention.needed\": 0,\n \"attention.cleared\": 0,\n \"subagent.started\": 1,\n \"subagent.ended\": 1,\n \"context.compacted\": 1,\n native: 3,\n};\n\nexport const HARNESS_NAMES = [\n \"claude-code\",\n \"codex\",\n \"gemini-cli\",\n \"antigravity\",\n \"cursor\",\n \"copilot-cli\",\n \"droid\",\n \"kiro\",\n \"opencode\",\n] as const;\n\nexport const Tier = z.int().min(0).max(3);\nexport const Ulid = z.string().regex(/^[0-9A-HJKMNP-TV-Z]{26}$/, \"ULID\");\nexport const Rfc3339 = z.iso.datetime({ offset: false, precision: 3 });\nexport const SessionId = z\n .string()\n .min(1)\n .max(128)\n .regex(/^[A-Za-z0-9._:-]+$/);\nexport const ToolName = z.string().regex(/^[A-Za-z0-9_.:-]{1,120}$/);\n\nexport const Harness = z.object({\n /** From the registry in ADAPTERS.md; a name outside it is allowed ([a-z0-9-]). */\n name: z.string().regex(/^[a-z][a-z0-9-]{0,39}$/),\n version: z.string().max(64).optional(),\n /** The harness's own event name (`PostToolUse`, `agentStop`). */\n event: z.string().max(64).optional(),\n});\n\nexport const Session = z.object({\n id: SessionId,\n /** Monotonic per session per sender; the dedup key with harness.name and id. */\n seq: z.int().min(0),\n machine: z.string().max(80).optional(),\n /** Home is written `~`. */\n cwd: z.string().max(1024).optional(),\n /** A remote URL with credentials stripped. */\n repo: z.string().max(512).optional(),\n branch: z.string().max(256).optional(),\n model: z.string().max(128).optional(),\n title: z.string().max(200).optional(),\n title_source: z.enum([\"custom\", \"harness\", \"first-ask\"]).optional(),\n url: z.url().max(1024).optional(),\n /** An id, never an email. */\n account_id: z.string().max(128).optional(),\n parent_id: SessionId.nullable().optional(),\n});\n\nexport const Privacy = z.object({\n /** The redaction rulesets that ran; `secrets@1` always above tier 0. */\n rulesets: z.array(z.string().regex(/^[a-z][a-z0-9-]*@\\d+$/)),\n pii: z.boolean(),\n});\n\nexport const Event = z.object({\n protocol: z.literal(PROTOCOL),\n id: Ulid,\n type: EventType,\n time: Rfc3339,\n tier: Tier,\n harness: Harness,\n session: Session,\n privacy: Privacy,\n /** Per type (see EventData); extra keys allowed and kept. */\n data: z.record(z.string(), z.unknown()),\n});\n\n// --- data per type --------------------------------------------------------------\n\nconst Loose = z.object({}).loose();\nexport const AttentionKind = z.enum([\"permission\", \"question\", \"elicitation\", \"idle\", \"error\"]);\n\nexport const EventData = z.object({\n \"session.started\": Loose.extend({ source: z.enum([\"startup\", \"resume\", \"clear\", \"compact\", \"fork\", \"unknown\"]) }),\n \"session.heartbeat\": Loose,\n \"session.ended\": Loose.extend({ reason: z.enum([\"clear\", \"logout\", \"exit\", \"other\"]) }),\n \"session.backfill\": Loose.extend({ started_at: Rfc3339, last_at: Rfc3339, turns: z.int().min(0).optional() }),\n \"session.forgotten\": Loose,\n \"turn.started\": Loose.extend({ turn_id: z.string().max(128).optional(), prompt_chars: z.int().min(0).optional() }),\n \"turn.ended\": Loose.extend({\n turn_id: z.string().max(128).optional(),\n reason: z.enum([\"stop\", \"interrupt\", \"error\"]),\n ms: z.int().min(0).optional(),\n }),\n \"turn.transcript\": Loose.extend({\n turn: z.int().min(0),\n user: z.string().max(20_000),\n assistant: z.string().max(20_000),\n at: Rfc3339,\n }),\n \"tool.started\": Loose.extend({\n tool: ToolName,\n call_id: z.string().max(128).optional(),\n turn_id: z.string().max(128).optional(),\n /** Set when a subagent made the call. */\n agent_id: z.string().max(128).optional(),\n input: z.unknown().optional(),\n }),\n \"tool.ended\": Loose.extend({\n tool: ToolName,\n call_id: z.string().max(128).optional(),\n turn_id: z.string().max(128).optional(),\n agent_id: z.string().max(128).optional(),\n ms: z.int().min(0).optional(),\n ok: z.boolean(),\n error: z.string().max(2000).optional(),\n input: z.unknown().optional(),\n output: z.unknown().optional(),\n }),\n \"files.changed\": Loose.extend({ paths: z.array(z.string().max(1024)).max(500) }),\n \"attention.needed\": Loose.extend({\n attention_id: z.string().max(128),\n kind: AttentionKind,\n tool: ToolName.optional(),\n message: z.string().max(200).optional(),\n }),\n \"attention.cleared\": Loose.extend({\n attention_id: z.string().max(128),\n how: z.enum([\"answered\", \"cancelled\", \"timeout\", \"unknown\"]),\n }),\n \"subagent.started\": Loose.extend({ agent_id: z.string().max(128), agent_type: z.string().max(128).optional() }),\n \"subagent.ended\": Loose.extend({ agent_id: z.string().max(128), agent_type: z.string().max(128).optional() }),\n \"context.compacted\": Loose.extend({ trigger: z.enum([\"manual\", \"auto\"]) }),\n native: Loose,\n});\n\n// --- wire -----------------------------------------------------------------------\n\nexport const Batch = z.object({ events: z.array(Event).min(1).max(50) });\n\nexport const BatchResponse = z.object({\n accepted: z.int().min(0),\n duplicates: z.int().min(0),\n rejected: z.array(z.object({ id: Ulid, reason: z.string().max(200) })),\n max_tier: Tier,\n});\n\nexport const ErrorResponse = z.object({\n reason: z.string().max(200),\n supported: z.array(z.int()).optional(),\n max_tier: Tier.optional(),\n});\n\nexport const Capability = z.enum([\"events\", \"backfill\", \"forget\", \"control\", \"native\"]);\n\nexport const WellKnown = z.object({\n protocol: z.array(z.int().min(1)).min(1),\n max_tier: Tier,\n capabilities: z.array(z.string().regex(/^[a-z][a-z0-9-]*$/)),\n auth: z.array(z.enum([\"bearer\"])).default([\"bearer\"]),\n endpoints: z.object({\n events: z.string(),\n control: z.string().optional(),\n native: z.string().optional(),\n }),\n batch: z.object({ max_events: z.int().min(1).max(50), max_bytes: z.int().min(1024).max(262_144) }),\n control: z.object({ wait_max_s: z.int().min(1).max(60) }).optional(),\n});\n\nexport const ControlKind = z.enum([\"permission.answer\", \"prompt\", \"cancel\"]);\n\nexport const ControlMessage = z.object({\n id: Ulid,\n kind: ControlKind,\n /** The attention_id a permission answer is for. */\n for: z.string().max(128).optional(),\n decision: z.enum([\"allow\", \"deny\"]).optional(),\n /** The prompt text. */\n text: z.string().max(20_000).optional(),\n /** Shown to the model beside a decision. */\n note: z.string().max(2000).optional(),\n at: Rfc3339,\n expires_at: Rfc3339,\n});\n\nexport const ControlPoll = z.object({ messages: z.array(ControlMessage) });\n\nexport const ControlAck = z.object({\n acks: z\n .array(\n z.object({\n id: Ulid,\n outcome: z.enum([\"delivered\", \"expired\", \"unsupported\", \"failed\"]),\n at: Rfc3339,\n detail: z.string().max(500).optional(),\n }),\n )\n .min(1),\n});\n\n/** What `npm run schemas` writes to schemas/v1/<name>.json. */\nexport const SCHEMAS = {\n event: Event,\n \"event-data\": EventData,\n batch: Batch,\n \"batch-response\": BatchResponse,\n error: ErrorResponse,\n \"well-known\": WellKnown,\n control: ControlMessage,\n \"control-poll\": ControlPoll,\n \"control-ack\": ControlAck,\n} as const;\n"],
5
- "mappings": "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",
4
+ "sourcesContent": ["// SPDX-License-Identifier: Apache-2.0\n// The one source for the protocol's shapes. schemas/v1/*.json are GENERATED from\n// this file (`npm run schemas`); core's runtime types are inferred from it with\n// type-only imports, so zod never enters the zero-dependency bundle. Prose lives in\n// spec/PROTOCOL.md; a rule that is not encoded here is a MUST in words only.\nimport { z } from \"zod\";\n\nexport const PROTOCOL = 1;\n\n/** Dotted, lowercase. Unknown types MUST be accepted and stored. */\nexport const EventType = z\n .string()\n .regex(/^(?:native|[a-z][a-z0-9]*(?:\\.[a-z][a-z0-9_]*)+)$/, \"dotted lowercase type, or native\");\n\nexport const KNOWN_TYPES = [\n \"session.started\",\n \"session.heartbeat\",\n \"session.ended\",\n \"session.backfill\",\n \"session.forgotten\",\n \"turn.started\",\n \"turn.ended\",\n \"turn.transcript\",\n \"tool.started\",\n \"tool.ended\",\n \"files.changed\",\n \"attention.needed\",\n \"attention.cleared\",\n \"subagent.started\",\n \"subagent.ended\",\n \"context.compacted\",\n \"native\",\n] as const;\n\n/** The lowest tier that carries each known type. */\nexport const TYPE_TIER: Record<(typeof KNOWN_TYPES)[number], 0 | 1 | 2 | 3> = {\n \"session.started\": 0,\n \"session.heartbeat\": 0,\n \"session.ended\": 0,\n \"session.backfill\": 0,\n \"session.forgotten\": 0,\n \"turn.started\": 0,\n \"turn.ended\": 0,\n \"turn.transcript\": 2,\n \"tool.started\": 1,\n \"tool.ended\": 1,\n \"files.changed\": 1,\n \"attention.needed\": 0,\n \"attention.cleared\": 0,\n \"subagent.started\": 1,\n \"subagent.ended\": 1,\n \"context.compacted\": 1,\n native: 3,\n};\n\nexport const HARNESS_NAMES = [\n \"claude-code\",\n \"codex\",\n \"gemini-cli\",\n \"antigravity\",\n \"cursor\",\n \"copilot-cli\",\n \"droid\",\n \"kiro\",\n \"opencode\",\n] as const;\n\nexport const Tier = z.int().min(0).max(3);\nexport const Ulid = z.string().regex(/^[0-9A-HJKMNP-TV-Z]{26}$/, \"ULID\");\nexport const Rfc3339 = z.iso.datetime({ offset: false, precision: 3 });\nexport const SessionId = z\n .string()\n .min(1)\n .max(128)\n .regex(/^[A-Za-z0-9._:-]+$/);\nexport const ToolName = z.string().regex(/^[A-Za-z0-9_.:-]{1,120}$/);\n\nexport const Harness = z.object({\n /** From the registry in ADAPTERS.md; a name outside it is allowed ([a-z0-9-]). */\n name: z.string().regex(/^[a-z][a-z0-9-]{0,39}$/),\n version: z.string().max(64).optional(),\n /** The harness's own event name (`PostToolUse`, `agentStop`). */\n event: z.string().max(64).optional(),\n});\n\nexport const Session = z.object({\n id: SessionId,\n /** Monotonic per session per sender; the dedup key with harness.name and id. */\n seq: z.int().min(0),\n machine: z.string().max(80).optional(),\n /** Home is written `~`. */\n cwd: z.string().max(1024).optional(),\n /** A remote URL with credentials stripped. */\n repo: z.string().max(512).optional(),\n branch: z.string().max(256).optional(),\n model: z.string().max(128).optional(),\n title: z.string().max(200).optional(),\n title_source: z.enum([\"custom\", \"harness\", \"first-ask\"]).optional(),\n url: z.url().max(1024).optional(),\n /** An id, never an email. */\n account_id: z.string().max(128).optional(),\n parent_id: SessionId.nullable().optional(),\n});\n\nexport const Privacy = z.object({\n /** The redaction rulesets that ran; `secrets@1` always above tier 0. */\n rulesets: z.array(z.string().regex(/^[a-z][a-z0-9-]*@\\d+$/)),\n pii: z.boolean(),\n});\n\nexport const Event = z.object({\n protocol: z.literal(PROTOCOL),\n id: Ulid,\n type: EventType,\n time: Rfc3339,\n tier: Tier,\n harness: Harness,\n session: Session,\n privacy: Privacy,\n /** Per type (see EventData); extra keys allowed and kept. */\n data: z.record(z.string(), z.unknown()),\n});\n\n// --- data per type --------------------------------------------------------------\n\nconst Loose = z.object({}).loose();\nexport const AttentionKind = z.enum([\"permission\", \"question\", \"elicitation\", \"idle\", \"error\"]);\n\nexport const EventData = z.object({\n \"session.started\": Loose.extend({ source: z.enum([\"startup\", \"resume\", \"clear\", \"compact\", \"fork\", \"unknown\"]) }),\n \"session.heartbeat\": Loose,\n \"session.ended\": Loose.extend({ reason: z.enum([\"clear\", \"logout\", \"exit\", \"other\"]) }),\n \"session.backfill\": Loose.extend({ started_at: Rfc3339, last_at: Rfc3339, turns: z.int().min(0).optional() }),\n \"session.forgotten\": Loose,\n \"turn.started\": Loose.extend({ turn_id: z.string().max(128).optional(), prompt_chars: z.int().min(0).optional() }),\n \"turn.ended\": Loose.extend({\n turn_id: z.string().max(128).optional(),\n reason: z.enum([\"stop\", \"interrupt\", \"error\"]),\n /** The harness's error class when reason is error (rate_limit, overloaded, authentication_failed, server_error \u2026). */\n error: z.string().max(200).optional(),\n ms: z.int().min(0).optional(),\n }),\n \"turn.transcript\": Loose.extend({\n turn: z.int().min(0),\n user: z.string().max(20_000),\n assistant: z.string().max(20_000),\n at: Rfc3339,\n }),\n \"tool.started\": Loose.extend({\n tool: ToolName,\n call_id: z.string().max(128).optional(),\n turn_id: z.string().max(128).optional(),\n /** Set when a subagent made the call. */\n agent_id: z.string().max(128).optional(),\n input: z.unknown().optional(),\n }),\n \"tool.ended\": Loose.extend({\n tool: ToolName,\n call_id: z.string().max(128).optional(),\n turn_id: z.string().max(128).optional(),\n agent_id: z.string().max(128).optional(),\n ms: z.int().min(0).optional(),\n ok: z.boolean(),\n error: z.string().max(2000).optional(),\n input: z.unknown().optional(),\n output: z.unknown().optional(),\n }),\n \"files.changed\": Loose.extend({ paths: z.array(z.string().max(1024)).max(500) }),\n \"attention.needed\": Loose.extend({\n attention_id: z.string().max(128),\n kind: AttentionKind,\n tool: ToolName.optional(),\n message: z.string().max(200).optional(),\n }),\n \"attention.cleared\": Loose.extend({\n attention_id: z.string().max(128),\n how: z.enum([\"answered\", \"cancelled\", \"timeout\", \"unknown\"]),\n }),\n \"subagent.started\": Loose.extend({ agent_id: z.string().max(128), agent_type: z.string().max(128).optional() }),\n \"subagent.ended\": Loose.extend({ agent_id: z.string().max(128), agent_type: z.string().max(128).optional() }),\n \"context.compacted\": Loose.extend({ trigger: z.enum([\"manual\", \"auto\"]) }),\n native: Loose,\n});\n\n// --- wire -----------------------------------------------------------------------\n\nexport const Batch = z.object({ events: z.array(Event).min(1).max(50) });\n\nexport const BatchResponse = z.object({\n accepted: z.int().min(0),\n duplicates: z.int().min(0),\n rejected: z.array(z.object({ id: Ulid, reason: z.string().max(200) })),\n max_tier: Tier,\n});\n\nexport const ErrorResponse = z.object({\n reason: z.string().max(200),\n supported: z.array(z.int()).optional(),\n max_tier: Tier.optional(),\n});\n\nexport const Capability = z.enum([\"events\", \"backfill\", \"forget\", \"control\", \"native\"]);\n\n// --- control (CONTROL.md) ---------------------------------------------------------\n\nconst B64Url = z.string().regex(/^[A-Za-z0-9_-]*$/, \"base64url, no padding\");\nexport const MachineId = z.string().regex(/^m_[A-Za-z0-9_-]{16,40}$/, \"m_ + 16\u201340 base64url\");\n/** `<harness>:<id>`; the id follows its adapter's rule (Claude Code: a UUID). */\nexport const SessionRef = z.string().regex(/^[a-z][a-z0-9-]{0,39}:[A-Za-z0-9._:-]{1,128}$/, \"<harness>:<session id>\");\nexport const ControlKind = z.enum([\"prompt\", \"permission.answer\", \"cancel\", \"start\"]);\nexport const DeliveryMode = z.enum([\"sdk\", \"waiter\", \"turn\", \"api\", \"resume\", \"fork\"]);\n\n/** The signed command, as the device writes it. The machine verifies the EXACT string\n * it received (control.json `cmd`) and never re-serializes it. */\nexport const ControlCommand = z.object({\n v: z.literal(1),\n t: z.literal(\"sessionpipe.control\"),\n machine: MachineId,\n kind: ControlKind,\n session: SessionRef,\n /** prompt, start: the message for the model. */\n text: z.string().min(1).max(4000).optional(),\n /** permission.answer: the attention_id being answered. */\n for: z.string().min(1).max(128).optional(),\n decision: z.enum([\"allow\", \"deny\"]).optional(),\n /** Shown to the model beside a decision. */\n note: z.string().max(2000).optional(),\n /** start: the absolute folder the new session runs in. */\n cwd: z.string().max(1024).optional(),\n /** At least 16 random bytes, base64url. */\n nonce: z.string().regex(/^[A-Za-z0-9_-]{22,64}$/),\n /** Epoch ms, the signing device's clock. */\n iat: z.int().min(1),\n});\n\n/** A day grant's signed string: a passkey vouches for a device key for \u2264 24 h. */\nexport const ControlGrant = z.object({\n v: z.literal(1),\n t: z.literal(\"sessionpipe.grant\"),\n /** The day key: P-256 SPKI, base64url. */\n pub: B64Url.min(1),\n iat: z.int().min(1),\n exp: z.int().min(1),\n /** The receiver's WebAuthn rp id (well-known control.signing.rp_id). */\n rp: z.string().min(1).max(253),\n});\n\n/** A WebAuthn assertion: credential id, authenticatorData, clientDataJSON, signature. */\nexport const ControlAssertion = z.object({\n cred: B64Url.min(1),\n ad: B64Url.min(1),\n cd: B64Url.min(1),\n sig: B64Url.min(1),\n});\n\n/** A key enrolled on a machine: a passkey's credential id, COSE alg, SPKI. */\nexport const ControlKey = z.object({\n id: B64Url.min(16).max(1400),\n alg: z.union([z.literal(-7), z.literal(-257)]),\n spki: B64Url.min(1),\n});\n\n/** One message as a receiver carries it: its own envelope around the signed bytes. */\nexport const ControlMessage = z.object({\n /** The receiver's id for this message; the ack key. Not signed: the nonce inside cmd is. */\n id: Ulid,\n /** The command string, exactly as signed (\u2264 12 000 characters). */\n cmd: z.string().min(1).max(12_000),\n /** The day key's ECDSA P-256 / SHA-256 signature over cmd: raw r\u2016s, base64url. */\n csig: B64Url.nullable().optional(),\n /** The grant vouching for the day key: its string plus the passkey's assertion over sha256(str). */\n grant: ControlAssertion.extend({ str: z.string().min(1).max(2000) })\n .nullable()\n .optional(),\n /** Instead of csig + grant: one passkey assertion over sha256(cmd). */\n confirm: ControlAssertion.nullable().optional(),\n /** The receiver's clock. */\n at: Rfc3339,\n /** After this the machine MUST NOT act and acks `expired`; at most 24 h after `at`. */\n expires_at: Rfc3339,\n});\n\nexport const ControlPoll = z.object({ messages: z.array(ControlMessage) });\n\n/** `taken` is the one non-final outcome: the machine verified the message and is\n * delivering it (a headless resume can take minutes); a final ack follows. */\nexport const ControlOutcome = z.enum([\"taken\", \"delivered\", \"expired\", \"unsupported\", \"failed\", \"refused\"]);\n\nexport const ControlAck = z.object({\n acks: z\n .array(\n z.object({\n id: Ulid,\n outcome: ControlOutcome,\n at: Rfc3339,\n /** delivered: how it reached the session. */\n mode: DeliveryMode.optional(),\n /** The session that took it, when not the one named (a fork's copy, a started session). */\n session: SessionRef.optional(),\n /** refused: the verifier's code, or the machine's own (`folder`, `no_attention`, `busy`). */\n code: z\n .string()\n .regex(/^[a-z_]{1,40}$/)\n .optional(),\n detail: z.string().max(500).optional(),\n /** resume / fork / start: the agent's reply, redacted by the secrets ruleset. */\n reply: z.string().max(20_000).optional(),\n }),\n )\n .min(1),\n});\n\n/** `POST {control}/pair`, sent with the person's sink token from their own terminal. */\nexport const ControlPairStart = z.object({\n /** Set when adding a key to a machine already paired. */\n machine: MachineId.optional(),\n name: z.string().min(1).max(80),\n harnesses: z.array(z.string().regex(/^[a-z][a-z0-9-]{0,39}$/)).max(20),\n modes: z.array(DeliveryMode),\n version: z.string().max(40),\n /** The folders the machine lets sessions run in, for the receiver's \"new session\"\n * picker. Informational: the machine checks its own list again. */\n folders: z.array(z.string().max(1024)).max(50).optional(),\n /** safe: nothing that needs approval runs unattended; auto: the harness's auto mode. */\n mode: z.enum([\"safe\", \"auto\"]).optional(),\n});\n\n/** The receiver's answer: where the person confirms, and the digits both screens show. */\nexport const ControlPairStarted = z.object({\n machine: MachineId,\n code: z.string().regex(/^[A-Za-z0-9-]{6,32}$/),\n url: z.url(),\n /** Six digits the terminal and the receiver's page both show. */\n check: z.string().regex(/^\\d{6}$/),\n expires_at: Rfc3339,\n});\n\n/** `GET {control}/pair?code=\u2026` once the person confirmed. The machine verifies `proof`\n * over sha256(\"sessionpipe.pair:<machine>:<code>\") before it trusts `key`. */\nexport const ControlPaired = z.object({\n status: z.enum([\"pending\", \"paired\", \"expired\"]),\n key: ControlKey.optional(),\n proof: ControlAssertion.optional(),\n /** The machine's own bearer for polls, acks and hello: opens nothing else. Minted\n * once, at the first pairing of a machine. */\n token: z.string().min(16).max(256).optional(),\n});\n\n/** `POST {control}/hello`: what the machine can do right now. */\nexport const ControlHello = z.object({\n name: z.string().min(1).max(80),\n harnesses: z.array(z.string().regex(/^[a-z][a-z0-9-]{0,39}$/)).max(20),\n modes: z.array(DeliveryMode),\n /** Credential ids of the keys enrolled on the machine. */\n keys: z.array(B64Url.min(16).max(1400)).max(50),\n version: z.string().max(40),\n /** Live sessions with a waiter parked on the daemon's socket. */\n waiting: z.array(SessionRef).max(500).optional(),\n /** As in control-pair.json: informational, re-checked on the machine. */\n folders: z.array(z.string().max(1024)).max(50).optional(),\n mode: z.enum([\"safe\", \"auto\"]).optional(),\n});\n\nexport const WellKnown = z.object({\n protocol: z.array(z.int().min(1)).min(1),\n max_tier: Tier,\n capabilities: z.array(z.string().regex(/^[a-z][a-z0-9-]*$/)),\n auth: z.array(z.enum([\"bearer\"])).default([\"bearer\"]),\n endpoints: z.object({\n events: z.string(),\n control: z.string().optional(),\n native: z.string().optional(),\n }),\n batch: z.object({ max_events: z.int().min(1).max(50), max_bytes: z.int().min(1024).max(262_144) }),\n control: z\n .object({\n wait_max_s: z.int().min(1).max(60),\n /** How commands are signed: the WebAuthn rp id keys are enrolled for, and the algorithms. */\n signing: z.object({\n rp_id: z.string().min(1).max(253),\n algs: z.array(z.union([z.literal(-7), z.literal(-257)])).min(1),\n }),\n })\n .optional(),\n});\n\n/** What `npm run schemas` writes to schemas/v1/<name>.json. */\nexport const SCHEMAS = {\n event: Event,\n \"event-data\": EventData,\n batch: Batch,\n \"batch-response\": BatchResponse,\n error: ErrorResponse,\n \"well-known\": WellKnown,\n control: ControlMessage,\n \"control-command\": ControlCommand,\n \"control-grant\": ControlGrant,\n \"control-key\": ControlKey,\n \"control-poll\": ControlPoll,\n \"control-ack\": ControlAck,\n \"control-pair\": ControlPairStart,\n \"control-pair-started\": ControlPairStarted,\n \"control-paired\": ControlPaired,\n \"control-hello\": ControlHello,\n} as const;\n"],
5
+ "mappings": "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",
6
6
  "names": []
7
7
  }
@@ -1 +1 @@
1
- {"version":3,"file":"antigravity.d.ts","sourceRoot":"","sources":["../../../src/adapters/antigravity.ts"],"names":[],"mappings":"AAYA,OAAO,KAAK,EACV,OAAO,EAEP,UAAU,EAKV,YAAY,EACb,MAAM,YAAY,CAAC;AAIpB,eAAO,MAAM,SAAS,mFAAoF,CAAC;AAgB3G,eAAO,MAAM,WAAW,EAAE,OAiIzB,CAAC;AAOF,+FAA+F;AAC/F,wBAAgB,MAAM,CAAC,CAAC,EAAE,OAAO,GAAG,MAAM,GAAG,IAAI,CAahD;AACD,eAAO,MAAM,YAAY,GAAI,OAAO,OAAO,KAAG,MAAM,EAIR,CAAC;AAoC7C,kFAAkF;AAClF,wBAAgB,cAAc,CAAC,QAAQ,EAAE;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,EAAE,CAAA;CAAE,EAAE,EAAE,UAAU,EAAE,MAAM,EAAE,GAAG,MAAM,GAAG,IAAI,CAiBjH;AAED;uEACuE;AACvE,wBAAgB,oBAAoB,CAClC,UAAU,EAAE,MAAM,EAClB,IAAI,EAAE;IAAE,YAAY,CAAC,EAAE,MAAM,CAAC;IAAC,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;IAAC,GAAG,EAAE,MAAM,CAAC,UAAU,CAAC;IAAC,WAAW,CAAC,EAAE,MAAM,CAAA;CAAE,GACnG,MAAM,GAAG,IAAI,CAiBf;AAED,wBAAgB,gBAAgB,CAC9B,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE;IAAE,YAAY,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,MAAM,EAAE,CAAC;IAAC,KAAK,EAAE,UAAU,CAAC;IAAC,GAAG,EAAE,MAAM,CAAC,UAAU,CAAA;CAAE,GAC9F,YAAY,CAyBd"}
1
+ {"version":3,"file":"antigravity.d.ts","sourceRoot":"","sources":["../../../src/adapters/antigravity.ts"],"names":[],"mappings":"AAqBA,OAAO,KAAK,EACV,OAAO,EAEP,UAAU,EAMV,YAAY,EACb,MAAM,YAAY,CAAC;AAIpB,eAAO,MAAM,SAAS,mFAAoF,CAAC;AAmB3G,eAAO,MAAM,WAAW,EAAE,OAkJzB,CAAC;AAOF,+FAA+F;AAC/F,wBAAgB,MAAM,CAAC,CAAC,EAAE,OAAO,GAAG,MAAM,GAAG,IAAI,CAahD;AACD,eAAO,MAAM,YAAY,GAAI,OAAO,OAAO,KAAG,MAAM,EAIR,CAAC;AAoC7C,kFAAkF;AAClF,wBAAgB,cAAc,CAAC,QAAQ,EAAE;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,EAAE,CAAA;CAAE,EAAE,EAAE,UAAU,EAAE,MAAM,EAAE,GAAG,MAAM,GAAG,IAAI,CAiBjH;AAED;uEACuE;AACvE,wBAAgB,oBAAoB,CAClC,UAAU,EAAE,MAAM,EAClB,IAAI,EAAE;IAAE,YAAY,CAAC,EAAE,MAAM,CAAC;IAAC,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;IAAC,GAAG,EAAE,MAAM,CAAC,UAAU,CAAC;IAAC,WAAW,CAAC,EAAE,MAAM,CAAA;CAAE,GACnG,MAAM,GAAG,IAAI,CAiBf;AAED,wBAAgB,gBAAgB,CAC9B,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE;IAAE,YAAY,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,MAAM,EAAE,CAAC;IAAC,KAAK,EAAE,UAAU,CAAC;IAAC,GAAG,EAAE,MAAM,CAAC,UAAU,CAAA;CAAE,GAC9F,YAAY,CAyBd"}
@@ -0,0 +1,70 @@
1
+ export declare const JOB_TIMEOUT_MS: number;
2
+ export type Mode = "safe" | "auto";
3
+ /** The `claude` to run: on PATH, else where the installers put it, else the newest
4
+ * copy the desktop app ships. Null when this machine has none. */
5
+ export declare function findClaude(env?: NodeJS.ProcessEnv, home?: string): string | null;
6
+ export interface Caps {
7
+ hasMode: boolean;
8
+ modes: string[];
9
+ promptsNone: boolean;
10
+ fork: boolean;
11
+ }
12
+ export declare function parseCaps(help: string): Caps;
13
+ /** Permission flags for the machine's mode. Safe: `dontAsk` (nothing that needs
14
+ * approval runs). Auto: Claude Code's own auto mode, or a refusal. Never
15
+ * bypassPermissions — no path here writes it. */
16
+ export declare function modeFlags(mode: Mode, caps: Caps): {
17
+ args: string[];
18
+ } | {
19
+ error: string;
20
+ };
21
+ /** The env a headless turn runs with: ours, minus the markers that make Claude Code
22
+ * think it runs inside another session, with CLAUDE_CONFIG_DIR naming the account. */
23
+ export declare function claudeEnv(configDir?: string, env?: NodeJS.ProcessEnv): NodeJS.ProcessEnv;
24
+ export declare function detectCaps(bin: string): Caps;
25
+ export interface Transcript {
26
+ file: string;
27
+ configDir: string;
28
+ project: string;
29
+ }
30
+ /** <config dir>/projects/<folder>/<session>.jsonl in any Claude Code config dir. */
31
+ export declare function findTranscript(session: string, dirs: string[]): Transcript | null;
32
+ /** The folder a session runs in, from its transcript's own records (never from a
33
+ * command): the `cwd` whose project name is the folder the transcript is filed
34
+ * under, else the first `cwd`. Streams; a line over 2 MB is skipped. */
35
+ export declare function sessionFolder(t: Transcript, cap?: number): string | null;
36
+ /** A Claude Code process holds this session right now: its registry file,
37
+ * <config>/sessions/<pid>.json, names it and the pid is alive (interactive and
38
+ * Agent SDK sessions both file one). */
39
+ export declare function liveProcess(session: string, configDir: string): boolean;
40
+ /** Written in the last 90 s, and not by a job of ours. */
41
+ export declare function recentlyWritten(file: string, ourLastEnd?: number, now?: number): boolean;
42
+ export interface RunResult {
43
+ error?: string;
44
+ code?: number | null;
45
+ signal?: NodeJS.Signals | null;
46
+ stdout?: string | null;
47
+ tooBig?: boolean;
48
+ stderr?: string;
49
+ timedOut?: boolean;
50
+ }
51
+ /** Run one headless turn in its own process group, holding at most 1 MB of stdout. */
52
+ export declare function runClaude(bin: string, args: string[], o: {
53
+ cwd: string;
54
+ env: NodeJS.ProcessEnv;
55
+ timeoutMs?: number;
56
+ }): Promise<RunResult>;
57
+ export interface ClaudeResult {
58
+ type?: string;
59
+ result?: unknown;
60
+ is_error?: boolean;
61
+ subtype?: string;
62
+ session_id?: unknown;
63
+ permission_denials?: {
64
+ tool_name?: unknown;
65
+ }[];
66
+ }
67
+ /** `--output-format json`: one result object, or an array whose last `result` entry it is. */
68
+ export declare function parseResult(stdout: string | null | undefined): ClaudeResult | null;
69
+ export declare const isUuid: (s: unknown) => s is string;
70
+ //# sourceMappingURL=claude-code-control.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"claude-code-control.d.ts","sourceRoot":"","sources":["../../../src/adapters/claude-code-control.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,5 @@
1
1
  import type { Adapter, FactsState, SessionFacts } from "./types.js";
2
- export declare const CLAUDE_EVENTS: readonly ["SessionStart", "UserPromptSubmit", "PreToolUse", "PostToolUse", "PostToolUseFailure", "PermissionRequest", "Notification", "Stop", "SubagentStart", "SubagentStop", "PreCompact", "PostCompact", "SessionEnd"];
2
+ export declare const CLAUDE_EVENTS: readonly ["SessionStart", "UserPromptSubmit", "PreToolUse", "PostToolUse", "PostToolUseFailure", "PermissionRequest", "Notification", "Stop", "SubagentStart", "SubagentStop", "PreCompact", "PostCompact", "SessionEnd", "StopFailure"];
3
3
  /** Every Claude Code config dir on this machine. */
4
4
  export declare function claudeDirs(env?: NodeJS.ProcessEnv, home?: string): string[];
5
5
  export declare const claudeCode: Adapter;
@@ -1 +1 @@
1
- {"version":3,"file":"claude-code.d.ts","sourceRoot":"","sources":["../../../src/adapters/claude-code.ts"],"names":[],"mappings":"AAgBA,OAAO,KAAK,EAAE,OAAO,EAAe,UAAU,EAAsC,YAAY,EAAE,MAAM,YAAY,CAAC;AAGrH,eAAO,MAAM,aAAa,2NAchB,CAAC;AAIX,oDAAoD;AACpD,wBAAgB,UAAU,CAAC,GAAG,GAAE,MAAM,CAAC,UAAwB,EAAE,IAAI,SAAO,GAAG,MAAM,EAAE,CAiBtF;AAgBD,eAAO,MAAM,UAAU,EAAE,OA0LxB,CAAC;AA4EF;sEACsE;AACtE,wBAAgB,SAAS,CAAC,GAAG,GAAE,MAAM,CAAC,UAAwB,GAAG,MAAM,GAAG,IAAI,CAa7E;AA4DD;yEACyE;AACzE,wBAAgB,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAG7C;AA2DD;;qFAEqF;AACrF,wBAAgB,WAAW,CACzB,IAAI,EAAE,MAAM,EACZ,SAAS,EAAE,MAAM,EACjB,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC9B,KAAK,EAAE,UAAU,GAChB,YAAY,CA6Fd;AAED,6GAA6G;AAC7G,eAAO,MAAM,kBAAkB,QAAO,IAGrC,CAAC"}
1
+ {"version":3,"file":"claude-code.d.ts","sourceRoot":"","sources":["../../../src/adapters/claude-code.ts"],"names":[],"mappings":"AAgBA,OAAO,KAAK,EACV,OAAO,EAEP,UAAU,EAKV,YAAY,EACb,MAAM,YAAY,CAAC;AAGpB,eAAO,MAAM,aAAa,0OAehB,CAAC;AAaX,oDAAoD;AACpD,wBAAgB,UAAU,CAAC,GAAG,GAAE,MAAM,CAAC,UAAwB,EAAE,IAAI,SAAO,GAAG,MAAM,EAAE,CAiBtF;AAgBD,eAAO,MAAM,UAAU,EAAE,OAwMxB,CAAC;AA4EF;sEACsE;AACtE,wBAAgB,SAAS,CAAC,GAAG,GAAE,MAAM,CAAC,UAAwB,GAAG,MAAM,GAAG,IAAI,CAa7E;AA4DD;yEACyE;AACzE,wBAAgB,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAG7C;AA2DD;;qFAEqF;AACrF,wBAAgB,WAAW,CACzB,IAAI,EAAE,MAAM,EACZ,SAAS,EAAE,MAAM,EACjB,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC9B,KAAK,EAAE,UAAU,GAChB,YAAY,CA6Fd;AAED,6GAA6G;AAC7G,eAAO,MAAM,kBAAkB,QAAO,IAGrC,CAAC"}
@@ -2,8 +2,11 @@ import type { HookCommand, InstallReport } from "./types.js";
2
2
  export interface ClaudeShapedOptions {
3
3
  /** Which events take a `matcher` (tool and permission events). */
4
4
  matcherFor: (event: string) => string | undefined;
5
- /** Seconds. */
5
+ /** Seconds (milliseconds for Gemini CLI). */
6
6
  timeout: number;
7
+ /** A longer timeout for one event (Claude Code's PermissionRequest, which may wait
8
+ * for a verified control answer: spec/CONTROL.md §6). */
9
+ timeoutFor?: (event: string) => number | undefined;
7
10
  /** Extra top-level keys the file must carry (Cursor/Copilot: version: 1). */
8
11
  top?: Record<string, unknown>;
9
12
  }
@@ -14,8 +17,41 @@ export declare const isOurs: (h: {
14
17
  command?: string;
15
18
  }[];
16
19
  }) => boolean;
20
+ export type JsonFile = {
21
+ ok: true;
22
+ existed: true;
23
+ value: Record<string, unknown>;
24
+ raw: string;
25
+ indent: string;
26
+ eol: string;
27
+ finalNewline: boolean;
28
+ } | {
29
+ ok: true;
30
+ existed: false;
31
+ value: Record<string, unknown>;
32
+ raw: "";
33
+ indent: " ";
34
+ eol: "\n";
35
+ finalNewline: true;
36
+ } | {
37
+ ok: false;
38
+ existed: true;
39
+ reason: string;
40
+ };
41
+ /** Read a JSON config file with its shape. Never guesses: a parse failure is a
42
+ * refusal to touch the file, not an empty object. */
43
+ export declare function readJsonFile(file: string): JsonFile;
44
+ /** Serialise in the file's own shape. */
45
+ export declare function formatJson(value: unknown, f: {
46
+ indent: string;
47
+ eol: string;
48
+ finalNewline: boolean;
49
+ }): string;
50
+ /** Back-compat helper for callers that only read. */
17
51
  export declare function readJson(file: string): Record<string, unknown>;
18
52
  export declare function installClaudeShaped(file: string, harness: string, events: readonly string[], cmd: HookCommand, o: ClaudeShapedOptions): InstallReport;
19
- export declare function uninstallClaudeShaped(file: string, events: readonly string[]): InstallReport;
53
+ export declare function uninstallClaudeShaped(file: string, events: readonly string[], opts?: {
54
+ created?: boolean | undefined;
55
+ }): InstallReport;
20
56
  export declare function installedClaudeShaped(file: string, harness: string, events: readonly string[], cmd: HookCommand, o: ClaudeShapedOptions): "current" | "stale" | "missing";
21
57
  //# sourceMappingURL=claude-shaped.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"claude-shaped.d.ts","sourceRoot":"","sources":["../../../src/adapters/claude-shaped.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAE7D,MAAM,WAAW,mBAAmB;IAClC,kEAAkE;IAClE,UAAU,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,MAAM,GAAG,SAAS,CAAC;IAClD,eAAe;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,6EAA6E;IAC7E,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAC/B;AAED,8GAA8G;AAC9G,eAAO,MAAM,IAAI,QAAqE,CAAC;AACvF,eAAO,MAAM,MAAM,GAAI,GAAG;IAAE,KAAK,CAAC,EAAE;QAAE,OAAO,CAAC,EAAE,MAAM,CAAA;KAAE,EAAE,CAAA;CAAE,KAAG,OACwC,CAAC;AAExG,wBAAgB,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAM9D;AAUD,wBAAgB,mBAAmB,CACjC,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,MAAM,EACf,MAAM,EAAE,SAAS,MAAM,EAAE,EACzB,GAAG,EAAE,WAAW,EAChB,CAAC,EAAE,mBAAmB,GACrB,aAAa,CA2Bf;AAED,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,MAAM,EAAE,GAAG,aAAa,CAqB5F;AAED,wBAAgB,qBAAqB,CACnC,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,MAAM,EACf,MAAM,EAAE,SAAS,MAAM,EAAE,EACzB,GAAG,EAAE,WAAW,EAChB,CAAC,EAAE,mBAAmB,GACrB,SAAS,GAAG,OAAO,GAAG,SAAS,CAYjC"}
1
+ {"version":3,"file":"claude-shaped.d.ts","sourceRoot":"","sources":["../../../src/adapters/claude-shaped.ts"],"names":[],"mappings":"AAcA,OAAO,KAAK,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAE7D,MAAM,WAAW,mBAAmB;IAClC,kEAAkE;IAClE,UAAU,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,MAAM,GAAG,SAAS,CAAC;IAClD,6CAA6C;IAC7C,OAAO,EAAE,MAAM,CAAC;IAChB;8DAC0D;IAC1D,UAAU,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,MAAM,GAAG,SAAS,CAAC;IACnD,6EAA6E;IAC7E,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAC/B;AAED,8GAA8G;AAC9G,eAAO,MAAM,IAAI,QAAqE,CAAC;AACvF,eAAO,MAAM,MAAM,GAAI,GAAG;IAAE,KAAK,CAAC,EAAE;QAAE,OAAO,CAAC,EAAE,MAAM,CAAA;KAAE,EAAE,CAAA;CAAE,KAAG,OACwC,CAAC;AAExG,MAAM,MAAM,QAAQ,GAChB;IACE,EAAE,EAAE,IAAI,CAAC;IACT,OAAO,EAAE,IAAI,CAAC;IACd,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC/B,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,MAAM,CAAC;IACf,GAAG,EAAE,MAAM,CAAC;IACZ,YAAY,EAAE,OAAO,CAAC;CACvB,GACD;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,OAAO,EAAE,KAAK,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAAC,GAAG,EAAE,EAAE,CAAC;IAAC,MAAM,EAAE,IAAI,CAAC;IAAC,GAAG,EAAE,IAAI,CAAC;IAAC,YAAY,EAAE,IAAI,CAAA;CAAE,GAClH;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,OAAO,EAAE,IAAI,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC;AAEjD;sDACsD;AACtD,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,QAAQ,CA4BnD;AAED,yCAAyC;AACzC,wBAAgB,UAAU,CAAC,KAAK,EAAE,OAAO,EAAE,CAAC,EAAE;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,MAAM,CAAC;IAAC,YAAY,EAAE,OAAO,CAAA;CAAE,GAAG,MAAM,CAG5G;AAED,qDAAqD;AACrD,wBAAgB,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAG9D;AAUD,wBAAgB,mBAAmB,CACjC,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,MAAM,EACf,MAAM,EAAE,SAAS,MAAM,EAAE,EACzB,GAAG,EAAE,WAAW,EAChB,CAAC,EAAE,mBAAmB,GACrB,aAAa,CAyCf;AAED,wBAAgB,qBAAqB,CACnC,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,SAAS,MAAM,EAAE,EACzB,IAAI,GAAE;IAAE,OAAO,CAAC,EAAE,OAAO,GAAG,SAAS,CAAA;CAAO,GAC3C,aAAa,CA0Bf;AAED,wBAAgB,qBAAqB,CACnC,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,MAAM,EACf,MAAM,EAAE,SAAS,MAAM,EAAE,EACzB,GAAG,EAAE,WAAW,EAChB,CAAC,EAAE,mBAAmB,GACrB,SAAS,GAAG,OAAO,GAAG,SAAS,CAiBjC"}
@@ -1 +1 @@
1
- {"version":3,"file":"codex.d.ts","sourceRoot":"","sources":["../../../src/adapters/codex.ts"],"names":[],"mappings":"AAaA,OAAO,KAAK,EAAE,OAAO,EAAmD,YAAY,EAAE,MAAM,YAAY,CAAC;AAGzG,eAAO,MAAM,YAAY,kMAaf,CAAC;AA8GX,eAAO,MAAM,KAAK,EAAE,OA6KnB,CAAC;AAOF,0DAA0D;AAC1D,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,YAAY,CA2CrD"}
1
+ {"version":3,"file":"codex.d.ts","sourceRoot":"","sources":["../../../src/adapters/codex.ts"],"names":[],"mappings":"AAaA,OAAO,KAAK,EACV,OAAO,EAOP,YAAY,EACb,MAAM,YAAY,CAAC;AAGpB,eAAO,MAAM,YAAY,kMAaf,CAAC;AAgHX,eAAO,MAAM,KAAK,EAAE,OAoLnB,CAAC;AAOF,0DAA0D;AAC1D,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,YAAY,CA2CrD"}
@@ -1,4 +1,9 @@
1
1
  import type { Adapter } from "./types.js";
2
2
  export declare const GEMINI_EVENTS: readonly ["SessionStart", "BeforeAgent", "BeforeTool", "AfterTool", "Notification", "AfterAgent", "PreCompress", "SessionEnd"];
3
+ /** Before 0.46 the hooks system is off unless tools.enableHooks is true (issue #11). */
4
+ export declare function geminiHooksActive(settingsFile: string): {
5
+ active: boolean;
6
+ note?: string;
7
+ };
3
8
  export declare const geminiCli: Adapter;
4
9
  //# sourceMappingURL=gemini-cli.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"gemini-cli.d.ts","sourceRoot":"","sources":["../../../src/adapters/gemini-cli.ts"],"names":[],"mappings":"AAWA,OAAO,KAAK,EAAE,OAAO,EAAuC,MAAM,YAAY,CAAC;AAG/E,eAAO,MAAM,aAAa,gIAShB,CAAC;AAMX,eAAO,MAAM,SAAS,EAAE,OAiIvB,CAAC"}
1
+ {"version":3,"file":"gemini-cli.d.ts","sourceRoot":"","sources":["../../../src/adapters/gemini-cli.ts"],"names":[],"mappings":"AAYA,OAAO,KAAK,EAAE,OAAO,EAAuD,MAAM,YAAY,CAAC;AAG/F,eAAO,MAAM,aAAa,gIAShB,CAAC;AAOX,wFAAwF;AACxF,wBAAgB,iBAAiB,CAAC,YAAY,EAAE,MAAM,GAAG;IAAE,MAAM,EAAE,OAAO,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAA;CAAE,CA2B1F;AAED,eAAO,MAAM,SAAS,EAAE,OA+IvB,CAAC"}
@@ -5,6 +5,8 @@ import { geminiCli } from "./gemini-cli.js";
5
5
  import type { Adapter } from "./types.js";
6
6
  export declare const ADAPTERS: readonly Adapter[];
7
7
  export declare const adapterByName: (name: string) => Adapter | undefined;
8
+ export { claudeDirs } from "./claude-code.js";
9
+ export * as claudeControl from "./claude-code-control.js";
8
10
  export type { Adapter, AdapterEvent, BackfillRow, FactsState, HookCommand, HookInput, HookResult, InstallReport, SessionFacts, TranscriptRead, Turn, } from "./types.js";
9
11
  export { antigravity, claudeCode, codex, geminiCli };
10
12
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/adapters/index.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACnC,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AAE1C,eAAO,MAAM,QAAQ,EAAE,SAAS,OAAO,EAAgD,CAAC;AACxF,eAAO,MAAM,aAAa,GAAI,MAAM,MAAM,KAAG,OAAO,GAAG,SAAkD,CAAC;AAC1G,YAAY,EACV,OAAO,EACP,YAAY,EACZ,WAAW,EACX,UAAU,EACV,WAAW,EACX,SAAS,EACT,UAAU,EACV,aAAa,EACb,YAAY,EACZ,cAAc,EACd,IAAI,GACL,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/adapters/index.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACnC,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AAE1C,eAAO,MAAM,QAAQ,EAAE,SAAS,OAAO,EAAgD,CAAC;AACxF,eAAO,MAAM,aAAa,GAAI,MAAM,MAAM,KAAG,OAAO,GAAG,SAAkD,CAAC;AAC1G,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,KAAK,aAAa,MAAM,0BAA0B,CAAC;AAC1D,YAAY,EACV,OAAO,EACP,YAAY,EACZ,WAAW,EACX,UAAU,EACV,WAAW,EACX,SAAS,EACT,UAAU,EACV,aAAa,EACb,YAAY,EACZ,cAAc,EACd,IAAI,GACL,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC"}
@@ -59,6 +59,25 @@ export interface InstallReport {
59
59
  file: string;
60
60
  changed: boolean;
61
61
  note?: string;
62
+ /** The file did not exist before this install; uninstall may delete it when empty. */
63
+ created?: boolean;
64
+ /** The file was left alone (not plain JSON, another tool's slot); `note` says why. */
65
+ skipped?: boolean;
66
+ }
67
+ export interface InstallOptions {
68
+ /** No sink takes tier ≥ 1: hook one tool event per harness (the heartbeat needs
69
+ * one), not every one — each hook is a Node start the harness waits for. */
70
+ lean?: boolean;
71
+ /** Files sessionpipe created on an earlier install (from the config), so
72
+ * uninstall may delete them once they are empty again. */
73
+ created?: string[];
74
+ }
75
+ export type InstalledState = "current" | "stale" | "missing" | "misplaced" | "inactive";
76
+ export interface InstalledReport {
77
+ file: string;
78
+ state: InstalledState;
79
+ /** Why (an inactive harness, a slot another tool holds). */
80
+ note?: string;
62
81
  }
63
82
  export interface Adapter {
64
83
  readonly name: string;
@@ -68,13 +87,10 @@ export interface Adapter {
68
87
  detect(env?: NodeJS.ProcessEnv): boolean;
69
88
  /** Config files the installer would write. */
70
89
  configFiles(env?: NodeJS.ProcessEnv): string[];
71
- install(cmd: HookCommand, env?: NodeJS.ProcessEnv): InstallReport[];
72
- uninstall(env?: NodeJS.ProcessEnv): InstallReport[];
73
- /** Is our hook present and current in the given file? */
74
- installed(cmd: HookCommand, env?: NodeJS.ProcessEnv): {
75
- file: string;
76
- state: "current" | "stale" | "missing" | "misplaced";
77
- }[];
90
+ install(cmd: HookCommand, env?: NodeJS.ProcessEnv, opts?: InstallOptions): InstallReport[];
91
+ uninstall(env?: NodeJS.ProcessEnv, opts?: InstallOptions): InstallReport[];
92
+ /** Is our hook present, current, and will the harness run it? */
93
+ installed(cmd: HookCommand, env?: NodeJS.ProcessEnv, opts?: InstallOptions): InstalledReport[];
78
94
  fromHook(input: HookInput): HookResult | null;
79
95
  readTranscript(file: string, fromLine: number): TranscriptRead;
80
96
  facts(session: {
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/adapters/types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/adapters/types.ts"],"names":[],"mappings":"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"}