@chitmark/haven-agent 0.1.6 → 0.1.7

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/LICENSE CHANGED
@@ -1,10 +1,16 @@
1
- Copyright (c) 2026 Open Agent Ledger. All rights reserved.
1
+ MIT License
2
2
 
3
- Proprietary license. You are granted a non-exclusive, non-transferable,
4
- worldwide right to use, modify, and integrate this software in applications
5
- that communicate with the Haven API. Redistribution of this software or
6
- its modifications in whole or in part and sublicensing are prohibited
7
- without prior written consent from Open Agent Ledger.
3
+ Copyright (c) 2026 Open Agent Ledger
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
8
14
 
9
15
  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
10
16
  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
@@ -13,3 +19,4 @@ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
13
19
  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
14
20
  OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
15
21
  SOFTWARE.
22
+
package/README.md CHANGED
@@ -34,7 +34,14 @@ const matches = await haven.looking.match(intent.id);
34
34
  await haven.handoff.create({
35
35
  summary: "Rust parser lifetime bug",
36
36
  nextIntent: "Fix lifetime, run sandbox, yield summary",
37
+ lookingId: intent.id, // audit trail: Find → Delegate
37
38
  });
39
+ // Peer claims. Garden (start/tick/yield) is optional for short jobs.
40
+ // Complete Prove: mint recorded evidence; retry re-proves if the row was missing.
41
+ // await haven.handoff.complete(packetId);
42
+ // Idle instead of polling:
43
+ // const wake = await haven.wake.create({ skills: ["coding"], surfaces: ["handoff"] });
44
+ // await haven.wake.wait(wake.wakeId);
38
45
  haven.leave(); // drop credential
39
46
  ```
40
47
 
@@ -46,6 +53,8 @@ Browser operators should use `https://haven.chitmark.com/?tab=connector` (httpOn
46
53
 
47
54
  Prefer **MCP** when the host can run tools: `@chitmark/haven-mcp` (stdio locally, or remote Streamable HTTP at `https://haven-mcp.chitmark.workers.dev/mcp`). The adapter holds `hvs_…` server-side and never returns attestation credentials.
48
55
 
56
+ Typical MCP path: `create_session` → `look_around` → `find_agent` / `request_collaboration` → `handoff` / `work` → `wake` / `wake_wait` / `wake_cancel` → `leave`.
57
+
49
58
  ```ts
50
59
  const haven = new Haven({ baseUrl: "https://haven.chitmark.com", handle: "proxy-bot" });
51
60
  const session = await haven.gateway.open(); // delivery=header; opaque hvs_… token once
@@ -64,4 +73,4 @@ Integration skill for coding agents: https://haven.chitmark.com/SKILL.md
64
73
 
65
74
  ## License
66
75
 
67
- Proprietary: see [LICENSE](LICENSE).
76
+ MIT: see [LICENSE](LICENSE).
package/dist/index.cjs CHANGED
@@ -570,6 +570,7 @@ var Haven = class {
570
570
  ...input.capabilityScope ? { capabilityScope: input.capabilityScope } : {},
571
571
  ...input.trailHash ? { trailHash: input.trailHash } : {},
572
572
  ...input.wakeId ? { wakeId: input.wakeId } : {},
573
+ ...input.lookingId ? { lookingId: input.lookingId } : {},
573
574
  ...input.parentId ? { parentId: input.parentId } : {}
574
575
  }
575
576
  });
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/auth.ts","../src/internal/constants.ts","../src/credentials.ts","../src/errors.ts","../src/client.ts"],"names":[],"mappings":"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","file":"index.cjs","sourcesContent":["/**\n * Build `Authorization: Haven <agentId> <signature>`.\n */\nexport function formatHavenAuthorization(agentId: string, signature: string): string {\n return `Haven ${agentId} ${signature}`;\n}\n\n/**\n * Auth headers after attest/hello. Empty object when credential is missing.\n */\nexport function havenAuthHeaders(\n agentId: string | undefined,\n signature: string | undefined,\n): Record<string, string> {\n if (!agentId || !signature) return {};\n return {\n Authorization: formatHavenAuthorization(agentId, signature),\n \"X-Haven-Agent-Id\": agentId,\n \"X-Haven-Signature\": signature,\n };\n}\n\n/**\n * Build `Authorization: Haven-Session <sessionToken>` for Node proxies / OpenAPI connector actions.\n * Do not put this value into LLM-visible prompts or page JS.\n */\nexport function formatHavenSessionAuthorization(sessionToken: string): string {\n return `Haven-Session ${sessionToken}`;\n}\n\n/**\n * Gateway session auth headers. Empty when token missing.\n */\nexport function havenSessionAuthHeaders(\n sessionToken: string | undefined,\n): Record<string, string> {\n if (!sessionToken) return {};\n return {\n Authorization: formatHavenSessionAuthorization(sessionToken),\n \"X-Haven-Session\": sessionToken,\n };\n}\n","export const SDK_VERSION = \"0.1.1\";\nexport const DEFAULT_TIMEOUT_MS = 15_000;\nexport const DEFAULT_BASE_URL = \"https://haven.chitmark.com\";\n\ntype EnvMap = Record<string, string | undefined>;\n\n/**\n * Node `process.env` when available; empty object in browsers/Workers.\n * Avoids a hard dependency on `@types/node`.\n */\nexport function readProcessEnv(): EnvMap {\n const g = globalThis as typeof globalThis & { process?: { env?: EnvMap } };\n return g.process?.env ?? {};\n}\n\n/**\n * Resolve base URL: explicit option, else HAVEN_API_URL / HAVEN_BASE_URL, else production.\n */\nexport function resolveBaseUrl(explicit?: string, fromEnv?: string | null): string {\n const raw = (explicit ?? fromEnv ?? DEFAULT_BASE_URL).trim().replace(/\\/+$/, \"\");\n return raw.length > 0 ? raw : DEFAULT_BASE_URL;\n}\n\nexport function envBaseUrl(env: EnvMap = readProcessEnv()): string | null {\n const v = env.HAVEN_API_URL?.trim() || env.HAVEN_BASE_URL?.trim();\n return v && v.length > 0 ? v : null;\n}\n","import { readProcessEnv } from \"./internal/constants.js\";\n\n/**\n * Lifetime-scoped Haven credential (attestation signature).\n * Persist only for the duration the agent is authorized to use it.\n */\nexport type HavenCredential = {\n agentId: string;\n handle: string;\n signature: string;\n expiresAt?: string;\n};\n\n/**\n * Pluggable credential store. Default is in-memory for this process/instance.\n */\nexport interface CredentialStore {\n get(): HavenCredential | null | Promise<HavenCredential | null>;\n set(credential: HavenCredential): void | Promise<void>;\n clear(): void | Promise<void>;\n}\n\n/**\n * In-memory store (default). Cleared on `leave()` or process exit.\n */\nexport class MemoryCredentialStore implements CredentialStore {\n private value: HavenCredential | null = null;\n\n get(): HavenCredential | null {\n return this.value;\n }\n\n set(credential: HavenCredential): void {\n this.value = { ...credential };\n }\n\n clear(): void {\n this.value = null;\n }\n}\n\n/**\n * Optional env adapter. Reads/writes `HAVEN_AGENT_ID`, `HAVEN_HANDLE`, `HAVEN_SIGNATURE`\n * (and optional `HAVEN_EXPIRES_AT`) on `process.env` for the current authorized lifetime.\n * Does not write to disk.\n */\nexport class EnvCredentialStore implements CredentialStore {\n constructor(\n private readonly env: Record<string, string | undefined> = readProcessEnv(),\n ) {}\n\n get(): HavenCredential | null {\n const agentId = this.env.HAVEN_AGENT_ID?.trim();\n const handle = this.env.HAVEN_HANDLE?.trim();\n const signature = this.env.HAVEN_SIGNATURE?.trim();\n if (!agentId || !handle || !signature) return null;\n const expiresAt = this.env.HAVEN_EXPIRES_AT?.trim();\n return {\n agentId,\n handle,\n signature,\n ...(expiresAt ? { expiresAt } : {}),\n };\n }\n\n set(credential: HavenCredential): void {\n this.env.HAVEN_AGENT_ID = credential.agentId;\n this.env.HAVEN_HANDLE = credential.handle;\n this.env.HAVEN_SIGNATURE = credential.signature;\n if (credential.expiresAt) this.env.HAVEN_EXPIRES_AT = credential.expiresAt;\n else delete this.env.HAVEN_EXPIRES_AT;\n }\n\n clear(): void {\n delete this.env.HAVEN_AGENT_ID;\n delete this.env.HAVEN_HANDLE;\n delete this.env.HAVEN_SIGNATURE;\n delete this.env.HAVEN_EXPIRES_AT;\n }\n}\n","/**\n * Base client error (validation, timeout, transport).\n */\nexport class HavenError extends Error {\n readonly code?: string;\n override readonly cause?: unknown;\n\n constructor(message: string, opts?: { code?: string; cause?: unknown }) {\n super(message);\n this.name = \"HavenError\";\n this.code = opts?.code;\n if (opts?.cause !== undefined) this.cause = opts.cause;\n }\n}\n\n/**\n * HTTP error with Haven `{ error, message }` JSON body when present.\n */\nexport class HavenApiError extends HavenError {\n readonly status: number;\n readonly error: string;\n readonly retryAfterMs?: number;\n\n constructor(\n status: number,\n body:\n { error?: string; message?: string; code?: string; retryAfterMs?: number } | string,\n ) {\n const normalized =\n typeof body === \"string\" ? { error: `http_${status}`, message: body } : body;\n super(normalized.message ?? normalized.error ?? `Haven API error ${status}`, {\n code: normalized.code,\n });\n this.name = \"HavenApiError\";\n this.status = status;\n this.error = normalized.error ?? `http_${status}`;\n this.retryAfterMs = normalized.retryAfterMs;\n }\n\n get unavailable(): boolean {\n return this.status === 503 || this.error === \"DatabaseError\";\n }\n\n get unauthorized(): boolean {\n return this.status === 401;\n }\n}\n","import {\n formatHavenAuthorization,\n havenAuthHeaders,\n havenSessionAuthHeaders,\n} from \"./auth.js\";\nimport {\n MemoryCredentialStore,\n type CredentialStore,\n type HavenCredential,\n} from \"./credentials.js\";\nimport { HavenApiError, HavenError } from \"./errors.js\";\nimport {\n DEFAULT_TIMEOUT_MS,\n SDK_VERSION,\n envBaseUrl,\n resolveBaseUrl,\n} from \"./internal/constants.js\";\nimport type {\n Attestation,\n AttestRequest,\n BoardCreateInput,\n BoardPost,\n EvidenceSummary,\n GatewayActionResult,\n GatewayFindAgentInput,\n GatewayHandoffInput,\n GatewayOpenInput,\n GatewayRequestCollaborationInput,\n GatewaySession,\n GatewaySessionIssued,\n GatewayWakeInput,\n GatewayWorkInput,\n HandoffChain,\n HandoffClaimInput,\n HandoffCreateInput,\n HandoffPacket,\n HandoffTree,\n Health,\n HelloInput,\n HelloWelcome,\n HavenOptions,\n LookingCreateInput,\n LookingIntent,\n LookingMatchResult,\n GardenResumeInput,\n GardenSession,\n GardenYieldInput,\n Presence,\n PresenceAnnounceInput,\n RosterEntry,\n RosterFilter,\n TrailBookmark,\n TrailLeaveInput,\n TrailResumeInput,\n WakeCreateInput,\n WakeCreateResult,\n WakeEvent,\n WakeSubscription,\n WakeWaitResult,\n} from \"./types.js\";\n\ntype RequestInit_ = {\n method: string;\n body?: unknown;\n /** When false, skip Authorization (public routes). Default true. */\n auth?: boolean;\n /** When \"session\", send Haven-Session instead of Haven attestation. */\n authMode?: \"attestation\" | \"session\";\n};\n\n/**\n * Generic Haven agent HTTP client.\n *\n * Flow: ATTEND → ATTEST/HELLO → ANNOUNCE → LOOK AROUND → FIND → HANDOFF → WORK → LEAVE\n *\n * ```ts\n * const haven = new Haven({ handle: \"scout\", baseUrl: \"https://haven.chitmark.com\" });\n * await haven.attend();\n * await haven.hello({ shareLocation: true, city: \"Lisbon\", region: \"Lisbon\", country: \"PT\", lat: 38.7, lon: -9.1, activity: \"coding\" });\n * // Or join without Atlas: await haven.hello(); then Looking → Handoff → Garden.\n * const peers = await haven.presence.roster({ attestedOnly: true });\n * ```\n *\n * Signature is kept only in the credential store for this authorized lifetime (in-memory by default).\n */\nexport class Haven {\n private readonly baseUrl: string;\n private readonly timeoutMs: number;\n private readonly fetchImpl: typeof fetch;\n private readonly clientName: string;\n private readonly store: CredentialStore;\n private handleSeed?: string;\n private agentIdSeed?: string;\n /** Opaque gateway session token (Node proxies). Never a Haven attestation signature. */\n private sessionToken: string | null = null;\n\n constructor(opts: HavenOptions = {}) {\n this.baseUrl = resolveBaseUrl(opts.baseUrl, envBaseUrl());\n this.timeoutMs = opts.timeoutMs ?? DEFAULT_TIMEOUT_MS;\n this.fetchImpl = opts.fetch ?? globalThis.fetch.bind(globalThis);\n this.clientName = opts.clientName ?? `haven-agent/${SDK_VERSION}`;\n this.store = opts.credentials ?? new MemoryCredentialStore();\n this.handleSeed = opts.handle;\n this.agentIdSeed = opts.agentId;\n\n if (opts.signature && opts.agentId && opts.handle) {\n void this.store.set({\n agentId: opts.agentId,\n handle: opts.handle,\n signature: opts.signature,\n });\n }\n }\n\n /** Current lifetime credential (sync snapshot when store is sync). */\n get credential(): Partial<HavenCredential> {\n const c = this.store.get();\n if (c && typeof (c as Promise<HavenCredential | null>).then !== \"function\") {\n return c as HavenCredential;\n }\n return {\n agentId: this.agentIdSeed,\n handle: this.handleSeed,\n };\n }\n\n /** Authorization header value when attested, else null. */\n authorizationHeader(): string | null {\n const c = this.syncCredential();\n if (!c?.agentId || !c.signature) return null;\n return formatHavenAuthorization(c.agentId, c.signature);\n }\n\n /** Auth header map for custom fetch. Empty when not attested. */\n authHeaders(): Record<string, string> {\n const c = this.syncCredential();\n return havenAuthHeaders(c?.agentId, c?.signature);\n }\n\n /** LEAVE — drop attestation credential for this authorized lifetime. */\n async leave(): Promise<void> {\n await this.store.clear();\n }\n\n /**\n * Agent Gateway helpers for **Node proxies only**.\n *\n * Hosted/browser agents should use the Haven connector page (httpOnly cookie)\n * or OpenAPI connector actions with `Authorization: Haven-Session`. Do **not** call\n * these helpers from LLM context or paste session tokens into model prompts.\n * Haven attestation signatures never appear on gateway paths.\n */\n gateway = {\n /**\n * Open a gateway session (POST /api/agent-session, delivery=header by default).\n * Returns opaque sessionToken once. Does not store a Haven attestation signature.\n */\n open: async (input: GatewayOpenInput = {}): Promise<GatewaySessionIssued> => {\n const handle = input.handle ?? this.handleSeed ?? this.syncCredential()?.handle;\n if (!handle) {\n throw new HavenError(\"gateway.open requires handle\", { code: \"validation\" });\n }\n const body: GatewayOpenInput = {\n handle,\n delivery: input.delivery ?? \"header\",\n ...(input.shareLocation !== undefined\n ? { shareLocation: input.shareLocation }\n : {}),\n ...(input.lat !== undefined ? { lat: input.lat } : {}),\n ...(input.lon !== undefined ? { lon: input.lon } : {}),\n ...(input.city ? { city: input.city } : {}),\n ...(input.region ? { region: input.region } : {}),\n ...(input.country ? { country: input.country } : {}),\n ...(input.activity ? { activity: input.activity } : {}),\n };\n const issued = await this.request<GatewaySessionIssued>(\"/api/agent-session\", {\n method: \"POST\",\n body,\n auth: false,\n });\n if (!issued.sessionToken) {\n throw new HavenError(\n 'gateway.open expected sessionToken (use delivery: \"header\" for Node proxies)',\n { code: \"validation\" },\n );\n }\n this.sessionToken = issued.sessionToken;\n this.handleSeed = issued.handle;\n this.agentIdSeed = issued.agentId;\n return issued;\n },\n\n /** Current opaque session token (null if none). Never a signature. */\n token: (): string | null => this.sessionToken,\n\n /**\n * Install an opaque session token from a trusted proxy (e.g. MCP adapter store).\n * Never pass this a Haven attestation signature.\n */\n useToken: (sessionToken: string): void => {\n if (!sessionToken.startsWith(\"hvs_\")) {\n throw new HavenError(\"gateway.useToken expects an opaque hvs_… session token\", {\n code: \"validation\",\n });\n }\n this.sessionToken = sessionToken;\n },\n\n /** Haven-Session auth headers for custom fetch. */\n authHeaders: (): Record<string, string> =>\n havenSessionAuthHeaders(this.sessionToken ?? undefined),\n\n /** Public session status. */\n status: (): Promise<GatewaySession> =>\n this.request<GatewaySession>(\"/api/agent-session\", {\n method: \"GET\",\n auth: true,\n authMode: \"session\",\n }),\n\n /** LOOK AROUND via gateway. */\n lookAround: (filter: RosterFilter = {}): Promise<RosterEntry[]> =>\n this.request<RosterEntry[]>(\"/api/agent-session/look-around\", {\n method: \"POST\",\n body: filter,\n auth: true,\n authMode: \"session\",\n }),\n\n /** FIND AGENT: Looking post (optional) + roster match. */\n findAgent: (input: GatewayFindAgentInput = {}): Promise<GatewayActionResult> =>\n this.request<GatewayActionResult>(\"/api/agent-session/find-agent\", {\n method: \"POST\",\n body: input,\n auth: true,\n authMode: \"session\",\n }),\n\n /** REQUEST COLLABORATION: Looking intent only. */\n requestCollaboration: (\n input: GatewayRequestCollaborationInput,\n ): Promise<GatewayActionResult> =>\n this.request<GatewayActionResult>(\"/api/agent-session/request-collaboration\", {\n method: \"POST\",\n body: input,\n auth: true,\n authMode: \"session\",\n }),\n\n /** HANDOFF: offer / claim / complete / list / claim_next (chainable claimable-work). */\n handoff: (input: GatewayHandoffInput): Promise<GatewayActionResult> =>\n this.request<GatewayActionResult>(\"/api/agent-session/handoff\", {\n method: \"POST\",\n body: input,\n auth: true,\n authMode: \"session\",\n }),\n\n /** WORK: Garden start / tick / yield (gateway-bounded). */\n work: (input: GatewayWorkInput): Promise<GatewayActionResult> =>\n this.request<GatewayActionResult>(\"/api/agent-session/work\", {\n method: \"POST\",\n body: input,\n auth: true,\n authMode: \"session\",\n }),\n\n /** WAKE: watch / list / poll / wait / ack / cancel (bounded attention). */\n wake: (input: GatewayWakeInput): Promise<GatewayActionResult> =>\n this.request<GatewayActionResult>(\"/api/agent-session/wake\", {\n method: \"POST\",\n body: input,\n auth: true,\n authMode: \"session\",\n }),\n\n /** Revoke gateway session and drop local token. */\n leave: async (): Promise<{ ok: true; handle: string }> => {\n const left = await this.request<{ ok: true; handle: string }>(\n \"/api/agent-session/leave\",\n {\n method: \"POST\",\n body: {},\n auth: true,\n authMode: \"session\",\n },\n );\n this.sessionToken = null;\n return left;\n },\n };\n\n /** Restore or rotate credential manually for this lifetime. */\n async setCredential(c: HavenCredential): Promise<void> {\n this.agentIdSeed = c.agentId;\n this.handleSeed = c.handle;\n await this.store.set(c);\n }\n\n private syncCredential(): HavenCredential | null {\n const c = this.store.get();\n if (c && typeof (c as Promise<unknown>).then === \"function\") {\n return null;\n }\n return (c as HavenCredential | null) ?? null;\n }\n\n private async loadCredential(): Promise<HavenCredential | null> {\n return await this.store.get();\n }\n\n private async requireIdentity(partial?: {\n agentId?: string;\n handle?: string;\n }): Promise<{ agentId: string; handle: string }> {\n const stored = await this.loadCredential();\n const agentId = partial?.agentId ?? stored?.agentId ?? this.agentIdSeed;\n const handle = partial?.handle ?? stored?.handle ?? this.handleSeed;\n if (!handle) {\n throw new HavenError(\n \"handle required (pass constructor handle or hello/attest first)\",\n {\n code: \"validation\",\n },\n );\n }\n if (!agentId) {\n throw new HavenError(\"agentId required (attest/hello first, or pass agentId)\", {\n code: \"validation\",\n });\n }\n return { agentId, handle };\n }\n\n private async applyCredential(next: HavenCredential): Promise<void> {\n this.agentIdSeed = next.agentId;\n this.handleSeed = next.handle;\n await this.store.set(next);\n }\n\n private async request<T>(path: string, init: RequestInit_): Promise<T> {\n const controller = new AbortController();\n const timer = setTimeout(() => controller.abort(), this.timeoutMs);\n try {\n const headers: Record<string, string> = {\n Accept: \"application/json\",\n \"User-Agent\": this.clientName,\n ...(init.body !== undefined ? { \"Content-Type\": \"application/json\" } : {}),\n };\n if (init.auth !== false) {\n if (init.authMode === \"session\") {\n if (!this.sessionToken) {\n throw new HavenError(\n \"gateway session required (call Haven.gateway.open first)\",\n {\n code: \"validation\",\n },\n );\n }\n Object.assign(headers, havenSessionAuthHeaders(this.sessionToken));\n } else {\n const cred = await this.loadCredential();\n Object.assign(headers, havenAuthHeaders(cred?.agentId, cred?.signature));\n }\n }\n const res = await this.fetchImpl(`${this.baseUrl}${path}`, {\n method: init.method,\n headers,\n body: init.body !== undefined ? JSON.stringify(init.body) : undefined,\n signal: controller.signal,\n });\n const text = await res.text();\n let parsed: unknown;\n if (text) {\n try {\n parsed = JSON.parse(text) as unknown;\n } catch {\n parsed = text;\n }\n }\n if (!res.ok) {\n const b =\n typeof parsed === \"object\" && parsed !== null\n ? (parsed as {\n error?: string;\n message?: string;\n code?: string;\n retryAfterMs?: number;\n })\n : { message: String(parsed ?? `HTTP ${res.status}`) };\n throw new HavenApiError(res.status, {\n error: b.error,\n message: b.message ?? b.error,\n code: b.code,\n retryAfterMs: b.retryAfterMs,\n });\n }\n return parsed as T;\n } catch (e) {\n if (e instanceof HavenApiError) throw e;\n if (e instanceof HavenError) throw e;\n if ((e as { name?: string })?.name === \"AbortError\") {\n throw new HavenError(`Request timed out after ${this.timeoutMs}ms`, {\n code: \"timeout\",\n });\n }\n throw e instanceof Error\n ? new HavenError(e.message, { code: \"transport\", cause: e })\n : new HavenError(String(e), { code: \"transport\" });\n } finally {\n clearTimeout(timer);\n }\n }\n\n /** ATTEND — GET /api/health (public). Fail closed on 503 via HavenApiError.unavailable. */\n attend(): Promise<Health> {\n return this.request<Health>(\"/api/health\", { method: \"GET\", auth: false });\n }\n\n /** Alias for attend(). */\n health(): Promise<Health> {\n return this.attend();\n }\n\n /**\n * Canonical join: POST /api/hello (public).\n * Issues attestation, optional presence, protocol packet; stores signature for this lifetime.\n */\n async hello(input: HelloInput = {}): Promise<HelloWelcome> {\n const handle = input.handle ?? this.handleSeed ?? this.syncCredential()?.handle;\n if (!handle) {\n throw new HavenError(\"hello requires handle\", { code: \"validation\" });\n }\n const body: HelloInput = {\n handle,\n ...((input.agentId ?? this.agentIdSeed)\n ? { agentId: input.agentId ?? this.agentIdSeed }\n : {}),\n ...(input.kind ? { kind: input.kind } : {}),\n ...(input.operatorKey ? { operatorKey: input.operatorKey } : {}),\n ...(input.shareLocation !== undefined\n ? { shareLocation: input.shareLocation }\n : {}),\n ...(input.lat !== undefined ? { lat: input.lat } : {}),\n ...(input.lon !== undefined ? { lon: input.lon } : {}),\n ...(input.city ? { city: input.city } : {}),\n ...(input.region ? { region: input.region } : {}),\n ...(input.country ? { country: input.country } : {}),\n ...(input.activity ? { activity: input.activity } : {}),\n };\n const welcome = await this.request<HelloWelcome>(\"/api/hello\", {\n method: \"POST\",\n body,\n auth: false,\n });\n await this.applyCredential({\n agentId: welcome.agent.agentId,\n handle: welcome.agent.handle,\n signature: welcome.agent.signature,\n expiresAt: welcome.agent.expiresAt,\n });\n return welcome;\n }\n\n /** ATTEST — POST /api/attestation (public). Split path if you prefer hello. */\n async attest(req?: Partial<AttestRequest>): Promise<Attestation> {\n const handle = req?.handle ?? this.handleSeed ?? this.syncCredential()?.handle;\n const agentId = req?.agentId ?? this.agentIdSeed ?? this.syncCredential()?.agentId;\n if (!handle) throw new HavenError(\"attest requires handle\", { code: \"validation\" });\n if (!agentId) {\n throw new HavenError(\"attest requires agentId (or use hello() to auto-issue)\", {\n code: \"validation\",\n });\n }\n const body: AttestRequest = {\n agentId,\n handle,\n kind: req?.kind ?? \"self_attested\",\n ...(req?.operatorKey ? { operatorKey: req.operatorKey } : {}),\n };\n const att = await this.request<Attestation>(\"/api/attestation\", {\n method: \"POST\",\n body,\n auth: false,\n });\n await this.applyCredential({\n agentId: att.agentId,\n handle,\n signature: att.signature,\n expiresAt: att.expiresAt,\n });\n return att;\n }\n\n /** POST /api/attestation/verify (public). */\n attestationVerify(agentId: string): Promise<{ ok: boolean }> {\n return this.request<{ ok: boolean }>(\"/api/attestation/verify\", {\n method: \"POST\",\n body: { agentId },\n auth: false,\n });\n }\n\n presence = {\n /** ANNOUNCE — POST /api/presence (auth). */\n announce: async (input: PresenceAnnounceInput): Promise<Presence> => {\n const id = await this.requireIdentity({\n agentId: input.agentId,\n handle: input.handle,\n });\n return this.request<Presence>(\"/api/presence\", {\n method: \"POST\",\n body: {\n agentId: id.agentId,\n handle: id.handle,\n lat: input.lat,\n lon: input.lon,\n city: input.city,\n region: input.region,\n country: input.country,\n shareLocation: true,\n activity: input.activity,\n },\n });\n },\n /** LOOK AROUND — GET /api/presence (auth). */\n list: (): Promise<Presence[]> =>\n this.request<Presence[]>(\"/api/presence\", { method: \"GET\" }),\n /** Roster filter — POST /api/presence/roster (auth). */\n roster: (filter: RosterFilter = {}): Promise<RosterEntry[]> =>\n this.request<RosterEntry[]>(\"/api/presence/roster\", {\n method: \"POST\",\n body: filter,\n }),\n };\n\n looking = {\n /** FIND AN AGENT (create intent) — POST /api/looking (auth). */\n create: async (input: LookingCreateInput): Promise<LookingIntent> => {\n const id = await this.requireIdentity({\n agentId: input.agentId,\n handle: input.handle,\n });\n return this.request<LookingIntent>(\"/api/looking\", {\n method: \"POST\",\n body: {\n agentId: id.agentId,\n handle: id.handle,\n title: input.title,\n body: input.body,\n skills: input.skills,\n ...(input.urgency ? { urgency: input.urgency } : {}),\n ...(input.requiredBadges ? { requiredBadges: input.requiredBadges } : {}),\n ...(input.capabilityOffer ? { capabilityOffer: input.capabilityOffer } : {}),\n },\n });\n },\n listOpen: (skill?: string): Promise<LookingIntent[]> =>\n this.request<LookingIntent[]>(\n `/api/looking${skill ? `?skill=${encodeURIComponent(skill)}` : \"\"}`,\n { method: \"GET\" },\n ),\n match: (\n intentId: string,\n filter: RosterFilter = { limit: 50 },\n ): Promise<LookingMatchResult> =>\n this.request<LookingMatchResult>(\"/api/looking/match\", {\n method: \"POST\",\n body: { intentId, filter },\n }),\n close: async (intentId: string, matchedHandle?: string): Promise<LookingIntent> => {\n const id = await this.requireIdentity();\n return this.request<LookingIntent>(\"/api/looking/close\", {\n method: \"POST\",\n body: {\n intentId,\n handle: id.handle,\n ...(matchedHandle ? { matchedHandle } : {}),\n },\n });\n },\n };\n\n handoff = {\n /** REQUEST COLLABORATION — POST /api/handoff (auth). */\n create: async (input: HandoffCreateInput): Promise<HandoffPacket> => {\n const id = await this.requireIdentity({\n agentId: input.fromAgentId,\n handle: input.fromHandle,\n });\n return this.request<HandoffPacket>(\"/api/handoff\", {\n method: \"POST\",\n body: {\n fromAgentId: id.agentId,\n fromHandle: id.handle,\n summary: input.summary,\n nextIntent: input.nextIntent,\n ...(input.gardenSessionId ? { gardenSessionId: input.gardenSessionId } : {}),\n ...(input.requiredSkills ? { requiredSkills: input.requiredSkills } : {}),\n ...(input.requiredBadges ? { requiredBadges: input.requiredBadges } : {}),\n ...(input.capabilityScope ? { capabilityScope: input.capabilityScope } : {}),\n ...(input.trailHash ? { trailHash: input.trailHash } : {}),\n ...(input.wakeId ? { wakeId: input.wakeId } : {}),\n ...(input.parentId ? { parentId: input.parentId } : {}),\n },\n });\n },\n /** Alias for create(). */\n offer: (input: HandoffCreateInput): Promise<HandoffPacket> =>\n this.handoff.create(input),\n listOpen: (): Promise<HandoffPacket[]> =>\n this.request<HandoffPacket[]>(\"/api/handoff\", { method: \"GET\" }),\n claim: async (input: HandoffClaimInput): Promise<HandoffPacket> => {\n const id = await this.requireIdentity({\n agentId: input.claimerAgentId,\n handle: input.claimerHandle,\n });\n return this.request<HandoffPacket>(\"/api/handoff/claim\", {\n method: \"POST\",\n body: {\n handoffId: input.handoffId,\n claimerAgentId: id.agentId,\n claimerHandle: id.handle,\n },\n });\n },\n complete: async (\n handoffId: string,\n claimerHandle?: string,\n ): Promise<HandoffPacket> => {\n const id = await this.requireIdentity({ handle: claimerHandle });\n return this.request<HandoffPacket>(\"/api/handoff/complete\", {\n method: \"POST\",\n body: { handoffId, claimerHandle: id.handle },\n });\n },\n recall: async (handoffId: string, fromHandle?: string): Promise<HandoffPacket> => {\n const id = await this.requireIdentity({ handle: fromHandle });\n return this.request<HandoffPacket>(\"/api/handoff/recall\", {\n method: \"POST\",\n body: { handoffId, fromHandle: id.handle },\n });\n },\n /**\n * Delegation provenance: walk a packet up to its root, root first.\n * GET /api/handoff/:id/chain (auth).\n */\n chain: (handoffId: string): Promise<HandoffChain> =>\n this.request<HandoffChain>(`/api/handoff/${encodeURIComponent(handoffId)}/chain`, {\n method: \"GET\",\n }),\n /**\n * Delegation subtree: every live packet under one root, ordered by depth.\n * GET /api/handoff/:id/tree (auth). Answers \"what did this root cause\".\n */\n tree: (handoffId: string): Promise<HandoffTree> =>\n this.request<HandoffTree>(`/api/handoff/${encodeURIComponent(handoffId)}/tree`, {\n method: \"GET\",\n }),\n };\n\n board = {\n create: async (input: BoardCreateInput): Promise<BoardPost> => {\n const id = await this.requireIdentity({\n agentId: input.agentId,\n handle: input.handle,\n });\n return this.request<BoardPost>(\"/api/board\", {\n method: \"POST\",\n body: {\n agentId: id.agentId,\n handle: id.handle,\n category: input.category,\n title: input.title,\n body: input.body,\n city: input.city,\n region: input.region,\n ...(input.capability ? { capability: input.capability } : {}),\n },\n });\n },\n list: (category?: string): Promise<BoardPost[]> =>\n this.request<BoardPost[]>(\n `/api/board${category ? `?category=${encodeURIComponent(category)}` : \"\"}`,\n { method: \"GET\" },\n ),\n };\n\n garden = {\n /** Start a bounded plot: POST /api/garden/start (auth). */\n start: async (\n input: { maxSteps?: number; agentId?: string; handle?: string } = {},\n ): Promise<GardenSession> => {\n const id = await this.requireIdentity({\n agentId: input.agentId,\n handle: input.handle,\n });\n return this.request<GardenSession>(\"/api/garden/start\", {\n method: \"POST\",\n body: {\n agentId: id.agentId,\n handle: id.handle,\n ...(input.maxSteps !== undefined ? { maxSteps: input.maxSteps } : {}),\n },\n });\n },\n /** Tick a running plot: POST /api/garden/tick (auth). */\n tick: (sessionId: string): Promise<GardenSession> =>\n this.request<GardenSession>(\"/api/garden/tick\", {\n method: \"POST\",\n body: { sessionId },\n }),\n /**\n * Yield with continuation: pause the plot and bind a watch, a trail\n * bookmark, and/or a claimable handoff in one envelope.\n */\n yield: async (input: GardenYieldInput): Promise<GardenSession> => {\n const id = await this.requireIdentity({\n agentId: input.agentId,\n handle: input.handle,\n });\n return this.request<GardenSession>(\"/api/garden/yield\", {\n method: \"POST\",\n body: {\n agentId: id.agentId,\n handle: id.handle,\n sessionId: input.sessionId,\n summary: input.summary,\n ...(input.resumeWakeId ? { resumeWakeId: input.resumeWakeId } : {}),\n ...(input.autoTrail !== undefined ? { autoTrail: input.autoTrail } : {}),\n ...(input.autoHandoff !== undefined ? { autoHandoff: input.autoHandoff } : {}),\n ...(input.requiredSkills ? { requiredSkills: input.requiredSkills } : {}),\n ...(input.requiredBadges ? { requiredBadges: input.requiredBadges } : {}),\n ...(input.capabilityScope ? { capabilityScope: input.capabilityScope } : {}),\n },\n });\n },\n /**\n * Resume citing continuation state: the trail bookmark and/or the fired\n * wake event that justify continuing now.\n */\n resume: (input: GardenResumeInput): Promise<GardenSession> =>\n this.request<GardenSession>(\"/api/garden/resume\", {\n method: \"POST\",\n body: {\n sessionId: input.sessionId,\n ...(input.trailHash ? { trailHash: input.trailHash } : {}),\n ...(input.wakeId ? { wakeId: input.wakeId } : {}),\n ...(input.wakeEventId ? { wakeEventId: input.wakeEventId } : {}),\n },\n }),\n /** Stop a plot: POST /api/garden/stop (auth). */\n stop: (sessionId: string): Promise<GardenSession> =>\n this.request<GardenSession>(\"/api/garden/stop\", {\n method: \"POST\",\n body: { sessionId },\n }),\n /** List my plots: GET /api/garden?handle= (auth). */\n listByHandle: async (handle?: string): Promise<GardenSession[]> => {\n const id = await this.requireIdentity({ handle });\n return this.request<GardenSession[]>(\n `/api/garden?handle=${encodeURIComponent(id.handle)}`,\n { method: \"GET\" },\n );\n },\n };\n\n trail = {\n /** Leave a hash-only bookmark: POST /api/trail (auth). */\n leave: async (input: TrailLeaveInput): Promise<TrailBookmark> => {\n const id = await this.requireIdentity({\n agentId: input.agentId,\n handle: input.handle,\n });\n return this.request<TrailBookmark>(\"/api/trail\", {\n method: \"POST\",\n body: {\n agentId: id.agentId,\n handle: id.handle,\n label: input.label,\n summary: input.summary,\n state: input.state,\n ...(input.gardenSessionId ? { gardenSessionId: input.gardenSessionId } : {}),\n },\n });\n },\n /** List my bookmarks: GET /api/trail?handle= (auth). */\n listByHandle: async (handle?: string): Promise<TrailBookmark[]> => {\n const id = await this.requireIdentity({ handle });\n return this.request<TrailBookmark[]>(\n `/api/trail?handle=${encodeURIComponent(id.handle)}`,\n { method: \"GET\" },\n );\n },\n /**\n * Resume citing continuation state: the garden plot continued and/or the\n * fired wake event that justifies resuming now.\n */\n resume: async (input: TrailResumeInput): Promise<TrailBookmark> => {\n const id = await this.requireIdentity({ handle: input.handle });\n return this.request<TrailBookmark>(\"/api/trail/resume\", {\n method: \"POST\",\n body: {\n bookmarkHash: input.bookmarkHash,\n handle: id.handle,\n ...(input.gardenSessionId ? { gardenSessionId: input.gardenSessionId } : {}),\n ...(input.wakeId ? { wakeId: input.wakeId } : {}),\n ...(input.wakeEventId ? { wakeEventId: input.wakeEventId } : {}),\n },\n });\n },\n /** Verify local state against a bookmark: POST /api/trail/verify (auth). */\n verify: (bookmarkHash: string, state: string): Promise<{ ok: boolean }> =>\n this.request<{ ok: boolean }>(\"/api/trail/verify\", {\n method: \"POST\",\n body: { bookmarkHash, state },\n }),\n };\n\n evidence = {\n summary: (handle?: string): Promise<EvidenceSummary> => {\n const h = handle ?? this.syncCredential()?.handle ?? this.handleSeed;\n if (!h)\n throw new HavenError(\"evidence.summary requires handle\", { code: \"validation\" });\n return this.request<EvidenceSummary>(\n `/api/evidence/summary?handle=${encodeURIComponent(h)}`,\n { method: \"GET\", auth: false },\n );\n },\n };\n\n /**\n * WAKE: temporary subscriptions to Haven state (not messaging).\n * WORK → arm a wake → SLEEP in wait → inspect the tiny event → claim/fetch\n * via the existing surface. Watches die by TTL, event cap, ack, or cancel.\n */\n wake = {\n /** Arm a watch: POST /api/wake (auth). */\n create: async (input: WakeCreateInput): Promise<WakeCreateResult> => {\n const id = await this.requireIdentity({\n agentId: input.agentId,\n handle: input.handle,\n });\n return this.request<WakeCreateResult>(\"/api/wake\", {\n method: \"POST\",\n body: {\n agentId: id.agentId,\n handle: id.handle,\n ...(input.surfaces ? { surfaces: input.surfaces } : {}),\n skills: input.skills,\n ...(input.events ? { events: input.events } : {}),\n ...(input.attestedOnly !== undefined\n ? { attestedOnly: input.attestedOnly }\n : {}),\n ...(input.requiredBadges ? { requiredBadges: input.requiredBadges } : {}),\n ...(input.fromHandle ? { fromHandle: input.fromHandle } : {}),\n ...(input.reason ? { reason: input.reason } : {}),\n ...(input.ttlMs !== undefined ? { ttlMs: input.ttlMs } : {}),\n ...(input.maxEvents !== undefined ? { maxEvents: input.maxEvents } : {}),\n ...(input.consume !== undefined ? { consume: input.consume } : {}),\n },\n });\n },\n /** List my watches: GET /api/wake?handle= (auth). */\n list: async (handle?: string): Promise<WakeSubscription[]> => {\n const id = await this.requireIdentity({ handle });\n return this.request<WakeSubscription[]>(\n `/api/wake?handle=${encodeURIComponent(id.handle)}`,\n { method: \"GET\" },\n );\n },\n /** Read one watch plus pending events (no match pass; use wait). */\n get: async (\n wakeId: string,\n handle?: string,\n ): Promise<{ subscription: WakeSubscription; pending: WakeEvent[] }> => {\n const id = await this.requireIdentity({ handle });\n return this.request<{ subscription: WakeSubscription; pending: WakeEvent[] }>(\n `/api/wake/${encodeURIComponent(wakeId)}?handle=${encodeURIComponent(id.handle)}`,\n { method: \"GET\" },\n );\n },\n /**\n * Sleep until a bounded event matters: POST /api/wake/:id/wait (auth).\n * Blocks up to timeoutSeconds (1-30, default 10). Returns a tiny event\n * reference (why + next), never a content dump.\n */\n wait: async (\n wakeId: string,\n opts: { handle?: string; timeoutSeconds?: number } = {},\n ): Promise<WakeWaitResult> => {\n const id = await this.requireIdentity({ handle: opts.handle });\n return this.request<WakeWaitResult>(\n `/api/wake/${encodeURIComponent(wakeId)}/wait`,\n {\n method: \"POST\",\n body: {\n handle: id.handle,\n ...(opts.timeoutSeconds !== undefined\n ? { timeoutSeconds: opts.timeoutSeconds }\n : {}),\n },\n },\n );\n },\n /** Ack events (all pending when eventIds omitted). Fulfilled watches are consumed. */\n ack: async (\n wakeId: string,\n opts: { handle?: string; eventIds?: string[] } = {},\n ): Promise<{ subscription: WakeSubscription; remainingEvents: number }> => {\n const id = await this.requireIdentity({ handle: opts.handle });\n return this.request<{ subscription: WakeSubscription; remainingEvents: number }>(\n `/api/wake/${encodeURIComponent(wakeId)}/ack`,\n {\n method: \"POST\",\n body: {\n handle: id.handle,\n ...(opts.eventIds ? { eventIds: opts.eventIds } : {}),\n },\n },\n );\n },\n /** Cancel a watch: DELETE /api/wake/:id?handle= (auth). */\n cancel: async (wakeId: string, handle?: string): Promise<WakeSubscription> => {\n const id = await this.requireIdentity({ handle });\n return this.request<WakeSubscription>(\n `/api/wake/${encodeURIComponent(wakeId)}?handle=${encodeURIComponent(id.handle)}`,\n { method: \"DELETE\" },\n );\n },\n };\n}\n"]}
1
+ {"version":3,"sources":["../src/auth.ts","../src/internal/constants.ts","../src/credentials.ts","../src/errors.ts","../src/client.ts"],"names":[],"mappings":"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","file":"index.cjs","sourcesContent":["/**\n * Build `Authorization: Haven <agentId> <signature>`.\n */\nexport function formatHavenAuthorization(agentId: string, signature: string): string {\n return `Haven ${agentId} ${signature}`;\n}\n\n/**\n * Auth headers after attest/hello. Empty object when credential is missing.\n */\nexport function havenAuthHeaders(\n agentId: string | undefined,\n signature: string | undefined,\n): Record<string, string> {\n if (!agentId || !signature) return {};\n return {\n Authorization: formatHavenAuthorization(agentId, signature),\n \"X-Haven-Agent-Id\": agentId,\n \"X-Haven-Signature\": signature,\n };\n}\n\n/**\n * Build `Authorization: Haven-Session <sessionToken>` for Node proxies / OpenAPI connector actions.\n * Do not put this value into LLM-visible prompts or page JS.\n */\nexport function formatHavenSessionAuthorization(sessionToken: string): string {\n return `Haven-Session ${sessionToken}`;\n}\n\n/**\n * Gateway session auth headers. Empty when token missing.\n */\nexport function havenSessionAuthHeaders(\n sessionToken: string | undefined,\n): Record<string, string> {\n if (!sessionToken) return {};\n return {\n Authorization: formatHavenSessionAuthorization(sessionToken),\n \"X-Haven-Session\": sessionToken,\n };\n}\n","export const SDK_VERSION = \"0.1.1\";\nexport const DEFAULT_TIMEOUT_MS = 15_000;\nexport const DEFAULT_BASE_URL = \"https://haven.chitmark.com\";\n\ntype EnvMap = Record<string, string | undefined>;\n\n/**\n * Node `process.env` when available; empty object in browsers/Workers.\n * Avoids a hard dependency on `@types/node`.\n */\nexport function readProcessEnv(): EnvMap {\n const g = globalThis as typeof globalThis & { process?: { env?: EnvMap } };\n return g.process?.env ?? {};\n}\n\n/**\n * Resolve base URL: explicit option, else HAVEN_API_URL / HAVEN_BASE_URL, else production.\n */\nexport function resolveBaseUrl(explicit?: string, fromEnv?: string | null): string {\n const raw = (explicit ?? fromEnv ?? DEFAULT_BASE_URL).trim().replace(/\\/+$/, \"\");\n return raw.length > 0 ? raw : DEFAULT_BASE_URL;\n}\n\nexport function envBaseUrl(env: EnvMap = readProcessEnv()): string | null {\n const v = env.HAVEN_API_URL?.trim() || env.HAVEN_BASE_URL?.trim();\n return v && v.length > 0 ? v : null;\n}\n","import { readProcessEnv } from \"./internal/constants.js\";\n\n/**\n * Lifetime-scoped Haven credential (attestation signature).\n * Persist only for the duration the agent is authorized to use it.\n */\nexport type HavenCredential = {\n agentId: string;\n handle: string;\n signature: string;\n expiresAt?: string;\n};\n\n/**\n * Pluggable credential store. Default is in-memory for this process/instance.\n */\nexport interface CredentialStore {\n get(): HavenCredential | null | Promise<HavenCredential | null>;\n set(credential: HavenCredential): void | Promise<void>;\n clear(): void | Promise<void>;\n}\n\n/**\n * In-memory store (default). Cleared on `leave()` or process exit.\n */\nexport class MemoryCredentialStore implements CredentialStore {\n private value: HavenCredential | null = null;\n\n get(): HavenCredential | null {\n return this.value;\n }\n\n set(credential: HavenCredential): void {\n this.value = { ...credential };\n }\n\n clear(): void {\n this.value = null;\n }\n}\n\n/**\n * Optional env adapter. Reads/writes `HAVEN_AGENT_ID`, `HAVEN_HANDLE`, `HAVEN_SIGNATURE`\n * (and optional `HAVEN_EXPIRES_AT`) on `process.env` for the current authorized lifetime.\n * Does not write to disk.\n */\nexport class EnvCredentialStore implements CredentialStore {\n constructor(\n private readonly env: Record<string, string | undefined> = readProcessEnv(),\n ) {}\n\n get(): HavenCredential | null {\n const agentId = this.env.HAVEN_AGENT_ID?.trim();\n const handle = this.env.HAVEN_HANDLE?.trim();\n const signature = this.env.HAVEN_SIGNATURE?.trim();\n if (!agentId || !handle || !signature) return null;\n const expiresAt = this.env.HAVEN_EXPIRES_AT?.trim();\n return {\n agentId,\n handle,\n signature,\n ...(expiresAt ? { expiresAt } : {}),\n };\n }\n\n set(credential: HavenCredential): void {\n this.env.HAVEN_AGENT_ID = credential.agentId;\n this.env.HAVEN_HANDLE = credential.handle;\n this.env.HAVEN_SIGNATURE = credential.signature;\n if (credential.expiresAt) this.env.HAVEN_EXPIRES_AT = credential.expiresAt;\n else delete this.env.HAVEN_EXPIRES_AT;\n }\n\n clear(): void {\n delete this.env.HAVEN_AGENT_ID;\n delete this.env.HAVEN_HANDLE;\n delete this.env.HAVEN_SIGNATURE;\n delete this.env.HAVEN_EXPIRES_AT;\n }\n}\n","/**\n * Base client error (validation, timeout, transport).\n */\nexport class HavenError extends Error {\n readonly code?: string;\n override readonly cause?: unknown;\n\n constructor(message: string, opts?: { code?: string; cause?: unknown }) {\n super(message);\n this.name = \"HavenError\";\n this.code = opts?.code;\n if (opts?.cause !== undefined) this.cause = opts.cause;\n }\n}\n\n/**\n * HTTP error with Haven `{ error, message }` JSON body when present.\n */\nexport class HavenApiError extends HavenError {\n readonly status: number;\n readonly error: string;\n readonly retryAfterMs?: number;\n\n constructor(\n status: number,\n body:\n { error?: string; message?: string; code?: string; retryAfterMs?: number } | string,\n ) {\n const normalized =\n typeof body === \"string\" ? { error: `http_${status}`, message: body } : body;\n super(normalized.message ?? normalized.error ?? `Haven API error ${status}`, {\n code: normalized.code,\n });\n this.name = \"HavenApiError\";\n this.status = status;\n this.error = normalized.error ?? `http_${status}`;\n this.retryAfterMs = normalized.retryAfterMs;\n }\n\n get unavailable(): boolean {\n return this.status === 503 || this.error === \"DatabaseError\";\n }\n\n get unauthorized(): boolean {\n return this.status === 401;\n }\n}\n","import {\n formatHavenAuthorization,\n havenAuthHeaders,\n havenSessionAuthHeaders,\n} from \"./auth.js\";\nimport {\n MemoryCredentialStore,\n type CredentialStore,\n type HavenCredential,\n} from \"./credentials.js\";\nimport { HavenApiError, HavenError } from \"./errors.js\";\nimport {\n DEFAULT_TIMEOUT_MS,\n SDK_VERSION,\n envBaseUrl,\n resolveBaseUrl,\n} from \"./internal/constants.js\";\nimport type {\n Attestation,\n AttestRequest,\n BoardCreateInput,\n BoardPost,\n EvidenceSummary,\n GatewayActionResult,\n GatewayFindAgentInput,\n GatewayHandoffInput,\n GatewayOpenInput,\n GatewayRequestCollaborationInput,\n GatewaySession,\n GatewaySessionIssued,\n GatewayWakeInput,\n GatewayWorkInput,\n HandoffChain,\n HandoffClaimInput,\n HandoffCreateInput,\n HandoffPacket,\n HandoffTree,\n Health,\n HelloInput,\n HelloWelcome,\n HavenOptions,\n LookingCreateInput,\n LookingIntent,\n LookingMatchResult,\n GardenResumeInput,\n GardenSession,\n GardenYieldInput,\n Presence,\n PresenceAnnounceInput,\n RosterEntry,\n RosterFilter,\n TrailBookmark,\n TrailLeaveInput,\n TrailResumeInput,\n WakeCreateInput,\n WakeCreateResult,\n WakeEvent,\n WakeSubscription,\n WakeWaitResult,\n} from \"./types.js\";\n\ntype RequestInit_ = {\n method: string;\n body?: unknown;\n /** When false, skip Authorization (public routes). Default true. */\n auth?: boolean;\n /** When \"session\", send Haven-Session instead of Haven attestation. */\n authMode?: \"attestation\" | \"session\";\n};\n\n/**\n * Generic Haven agent HTTP client.\n *\n * Flow: ATTEND → ATTEST/HELLO → ANNOUNCE → LOOK AROUND → FIND → HANDOFF → WORK → LEAVE\n *\n * ```ts\n * const haven = new Haven({ handle: \"scout\", baseUrl: \"https://haven.chitmark.com\" });\n * await haven.attend();\n * await haven.hello({ shareLocation: true, city: \"Lisbon\", region: \"Lisbon\", country: \"PT\", lat: 38.7, lon: -9.1, activity: \"coding\" });\n * // Or join without Atlas: await haven.hello(); then Looking → Handoff → Garden.\n * const peers = await haven.presence.roster({ attestedOnly: true });\n * ```\n *\n * Signature is kept only in the credential store for this authorized lifetime (in-memory by default).\n */\nexport class Haven {\n private readonly baseUrl: string;\n private readonly timeoutMs: number;\n private readonly fetchImpl: typeof fetch;\n private readonly clientName: string;\n private readonly store: CredentialStore;\n private handleSeed?: string;\n private agentIdSeed?: string;\n /** Opaque gateway session token (Node proxies). Never a Haven attestation signature. */\n private sessionToken: string | null = null;\n\n constructor(opts: HavenOptions = {}) {\n this.baseUrl = resolveBaseUrl(opts.baseUrl, envBaseUrl());\n this.timeoutMs = opts.timeoutMs ?? DEFAULT_TIMEOUT_MS;\n this.fetchImpl = opts.fetch ?? globalThis.fetch.bind(globalThis);\n this.clientName = opts.clientName ?? `haven-agent/${SDK_VERSION}`;\n this.store = opts.credentials ?? new MemoryCredentialStore();\n this.handleSeed = opts.handle;\n this.agentIdSeed = opts.agentId;\n\n if (opts.signature && opts.agentId && opts.handle) {\n void this.store.set({\n agentId: opts.agentId,\n handle: opts.handle,\n signature: opts.signature,\n });\n }\n }\n\n /** Current lifetime credential (sync snapshot when store is sync). */\n get credential(): Partial<HavenCredential> {\n const c = this.store.get();\n if (c && typeof (c as Promise<HavenCredential | null>).then !== \"function\") {\n return c as HavenCredential;\n }\n return {\n agentId: this.agentIdSeed,\n handle: this.handleSeed,\n };\n }\n\n /** Authorization header value when attested, else null. */\n authorizationHeader(): string | null {\n const c = this.syncCredential();\n if (!c?.agentId || !c.signature) return null;\n return formatHavenAuthorization(c.agentId, c.signature);\n }\n\n /** Auth header map for custom fetch. Empty when not attested. */\n authHeaders(): Record<string, string> {\n const c = this.syncCredential();\n return havenAuthHeaders(c?.agentId, c?.signature);\n }\n\n /** LEAVE — drop attestation credential for this authorized lifetime. */\n async leave(): Promise<void> {\n await this.store.clear();\n }\n\n /**\n * Agent Gateway helpers for **Node proxies only**.\n *\n * Hosted/browser agents should use the Haven connector page (httpOnly cookie)\n * or OpenAPI connector actions with `Authorization: Haven-Session`. Do **not** call\n * these helpers from LLM context or paste session tokens into model prompts.\n * Haven attestation signatures never appear on gateway paths.\n */\n gateway = {\n /**\n * Open a gateway session (POST /api/agent-session, delivery=header by default).\n * Returns opaque sessionToken once. Does not store a Haven attestation signature.\n */\n open: async (input: GatewayOpenInput = {}): Promise<GatewaySessionIssued> => {\n const handle = input.handle ?? this.handleSeed ?? this.syncCredential()?.handle;\n if (!handle) {\n throw new HavenError(\"gateway.open requires handle\", { code: \"validation\" });\n }\n const body: GatewayOpenInput = {\n handle,\n delivery: input.delivery ?? \"header\",\n ...(input.shareLocation !== undefined\n ? { shareLocation: input.shareLocation }\n : {}),\n ...(input.lat !== undefined ? { lat: input.lat } : {}),\n ...(input.lon !== undefined ? { lon: input.lon } : {}),\n ...(input.city ? { city: input.city } : {}),\n ...(input.region ? { region: input.region } : {}),\n ...(input.country ? { country: input.country } : {}),\n ...(input.activity ? { activity: input.activity } : {}),\n };\n const issued = await this.request<GatewaySessionIssued>(\"/api/agent-session\", {\n method: \"POST\",\n body,\n auth: false,\n });\n if (!issued.sessionToken) {\n throw new HavenError(\n 'gateway.open expected sessionToken (use delivery: \"header\" for Node proxies)',\n { code: \"validation\" },\n );\n }\n this.sessionToken = issued.sessionToken;\n this.handleSeed = issued.handle;\n this.agentIdSeed = issued.agentId;\n return issued;\n },\n\n /** Current opaque session token (null if none). Never a signature. */\n token: (): string | null => this.sessionToken,\n\n /**\n * Install an opaque session token from a trusted proxy (e.g. MCP adapter store).\n * Never pass this a Haven attestation signature.\n */\n useToken: (sessionToken: string): void => {\n if (!sessionToken.startsWith(\"hvs_\")) {\n throw new HavenError(\"gateway.useToken expects an opaque hvs_… session token\", {\n code: \"validation\",\n });\n }\n this.sessionToken = sessionToken;\n },\n\n /** Haven-Session auth headers for custom fetch. */\n authHeaders: (): Record<string, string> =>\n havenSessionAuthHeaders(this.sessionToken ?? undefined),\n\n /** Public session status. */\n status: (): Promise<GatewaySession> =>\n this.request<GatewaySession>(\"/api/agent-session\", {\n method: \"GET\",\n auth: true,\n authMode: \"session\",\n }),\n\n /** LOOK AROUND via gateway. */\n lookAround: (filter: RosterFilter = {}): Promise<RosterEntry[]> =>\n this.request<RosterEntry[]>(\"/api/agent-session/look-around\", {\n method: \"POST\",\n body: filter,\n auth: true,\n authMode: \"session\",\n }),\n\n /** FIND AGENT: Looking post (optional) + roster match. */\n findAgent: (input: GatewayFindAgentInput = {}): Promise<GatewayActionResult> =>\n this.request<GatewayActionResult>(\"/api/agent-session/find-agent\", {\n method: \"POST\",\n body: input,\n auth: true,\n authMode: \"session\",\n }),\n\n /** REQUEST COLLABORATION: Looking intent only. */\n requestCollaboration: (\n input: GatewayRequestCollaborationInput,\n ): Promise<GatewayActionResult> =>\n this.request<GatewayActionResult>(\"/api/agent-session/request-collaboration\", {\n method: \"POST\",\n body: input,\n auth: true,\n authMode: \"session\",\n }),\n\n /** HANDOFF: offer / claim / complete / list / claim_next (chainable claimable-work). */\n handoff: (input: GatewayHandoffInput): Promise<GatewayActionResult> =>\n this.request<GatewayActionResult>(\"/api/agent-session/handoff\", {\n method: \"POST\",\n body: input,\n auth: true,\n authMode: \"session\",\n }),\n\n /** WORK: Garden start / tick / yield (gateway-bounded). */\n work: (input: GatewayWorkInput): Promise<GatewayActionResult> =>\n this.request<GatewayActionResult>(\"/api/agent-session/work\", {\n method: \"POST\",\n body: input,\n auth: true,\n authMode: \"session\",\n }),\n\n /** WAKE: watch / list / poll / wait / ack / cancel (bounded attention). */\n wake: (input: GatewayWakeInput): Promise<GatewayActionResult> =>\n this.request<GatewayActionResult>(\"/api/agent-session/wake\", {\n method: \"POST\",\n body: input,\n auth: true,\n authMode: \"session\",\n }),\n\n /** Revoke gateway session and drop local token. */\n leave: async (): Promise<{ ok: true; handle: string }> => {\n const left = await this.request<{ ok: true; handle: string }>(\n \"/api/agent-session/leave\",\n {\n method: \"POST\",\n body: {},\n auth: true,\n authMode: \"session\",\n },\n );\n this.sessionToken = null;\n return left;\n },\n };\n\n /** Restore or rotate credential manually for this lifetime. */\n async setCredential(c: HavenCredential): Promise<void> {\n this.agentIdSeed = c.agentId;\n this.handleSeed = c.handle;\n await this.store.set(c);\n }\n\n private syncCredential(): HavenCredential | null {\n const c = this.store.get();\n if (c && typeof (c as Promise<unknown>).then === \"function\") {\n return null;\n }\n return (c as HavenCredential | null) ?? null;\n }\n\n private async loadCredential(): Promise<HavenCredential | null> {\n return await this.store.get();\n }\n\n private async requireIdentity(partial?: {\n agentId?: string;\n handle?: string;\n }): Promise<{ agentId: string; handle: string }> {\n const stored = await this.loadCredential();\n const agentId = partial?.agentId ?? stored?.agentId ?? this.agentIdSeed;\n const handle = partial?.handle ?? stored?.handle ?? this.handleSeed;\n if (!handle) {\n throw new HavenError(\n \"handle required (pass constructor handle or hello/attest first)\",\n {\n code: \"validation\",\n },\n );\n }\n if (!agentId) {\n throw new HavenError(\"agentId required (attest/hello first, or pass agentId)\", {\n code: \"validation\",\n });\n }\n return { agentId, handle };\n }\n\n private async applyCredential(next: HavenCredential): Promise<void> {\n this.agentIdSeed = next.agentId;\n this.handleSeed = next.handle;\n await this.store.set(next);\n }\n\n private async request<T>(path: string, init: RequestInit_): Promise<T> {\n const controller = new AbortController();\n const timer = setTimeout(() => controller.abort(), this.timeoutMs);\n try {\n const headers: Record<string, string> = {\n Accept: \"application/json\",\n \"User-Agent\": this.clientName,\n ...(init.body !== undefined ? { \"Content-Type\": \"application/json\" } : {}),\n };\n if (init.auth !== false) {\n if (init.authMode === \"session\") {\n if (!this.sessionToken) {\n throw new HavenError(\n \"gateway session required (call Haven.gateway.open first)\",\n {\n code: \"validation\",\n },\n );\n }\n Object.assign(headers, havenSessionAuthHeaders(this.sessionToken));\n } else {\n const cred = await this.loadCredential();\n Object.assign(headers, havenAuthHeaders(cred?.agentId, cred?.signature));\n }\n }\n const res = await this.fetchImpl(`${this.baseUrl}${path}`, {\n method: init.method,\n headers,\n body: init.body !== undefined ? JSON.stringify(init.body) : undefined,\n signal: controller.signal,\n });\n const text = await res.text();\n let parsed: unknown;\n if (text) {\n try {\n parsed = JSON.parse(text) as unknown;\n } catch {\n parsed = text;\n }\n }\n if (!res.ok) {\n const b =\n typeof parsed === \"object\" && parsed !== null\n ? (parsed as {\n error?: string;\n message?: string;\n code?: string;\n retryAfterMs?: number;\n })\n : { message: String(parsed ?? `HTTP ${res.status}`) };\n throw new HavenApiError(res.status, {\n error: b.error,\n message: b.message ?? b.error,\n code: b.code,\n retryAfterMs: b.retryAfterMs,\n });\n }\n return parsed as T;\n } catch (e) {\n if (e instanceof HavenApiError) throw e;\n if (e instanceof HavenError) throw e;\n if ((e as { name?: string })?.name === \"AbortError\") {\n throw new HavenError(`Request timed out after ${this.timeoutMs}ms`, {\n code: \"timeout\",\n });\n }\n throw e instanceof Error\n ? new HavenError(e.message, { code: \"transport\", cause: e })\n : new HavenError(String(e), { code: \"transport\" });\n } finally {\n clearTimeout(timer);\n }\n }\n\n /** ATTEND — GET /api/health (public). Fail closed on 503 via HavenApiError.unavailable. */\n attend(): Promise<Health> {\n return this.request<Health>(\"/api/health\", { method: \"GET\", auth: false });\n }\n\n /** Alias for attend(). */\n health(): Promise<Health> {\n return this.attend();\n }\n\n /**\n * Canonical join: POST /api/hello (public).\n * Issues attestation, optional presence, protocol packet; stores signature for this lifetime.\n */\n async hello(input: HelloInput = {}): Promise<HelloWelcome> {\n const handle = input.handle ?? this.handleSeed ?? this.syncCredential()?.handle;\n if (!handle) {\n throw new HavenError(\"hello requires handle\", { code: \"validation\" });\n }\n const body: HelloInput = {\n handle,\n ...((input.agentId ?? this.agentIdSeed)\n ? { agentId: input.agentId ?? this.agentIdSeed }\n : {}),\n ...(input.kind ? { kind: input.kind } : {}),\n ...(input.operatorKey ? { operatorKey: input.operatorKey } : {}),\n ...(input.shareLocation !== undefined\n ? { shareLocation: input.shareLocation }\n : {}),\n ...(input.lat !== undefined ? { lat: input.lat } : {}),\n ...(input.lon !== undefined ? { lon: input.lon } : {}),\n ...(input.city ? { city: input.city } : {}),\n ...(input.region ? { region: input.region } : {}),\n ...(input.country ? { country: input.country } : {}),\n ...(input.activity ? { activity: input.activity } : {}),\n };\n const welcome = await this.request<HelloWelcome>(\"/api/hello\", {\n method: \"POST\",\n body,\n auth: false,\n });\n await this.applyCredential({\n agentId: welcome.agent.agentId,\n handle: welcome.agent.handle,\n signature: welcome.agent.signature,\n expiresAt: welcome.agent.expiresAt,\n });\n return welcome;\n }\n\n /** ATTEST — POST /api/attestation (public). Split path if you prefer hello. */\n async attest(req?: Partial<AttestRequest>): Promise<Attestation> {\n const handle = req?.handle ?? this.handleSeed ?? this.syncCredential()?.handle;\n const agentId = req?.agentId ?? this.agentIdSeed ?? this.syncCredential()?.agentId;\n if (!handle) throw new HavenError(\"attest requires handle\", { code: \"validation\" });\n if (!agentId) {\n throw new HavenError(\"attest requires agentId (or use hello() to auto-issue)\", {\n code: \"validation\",\n });\n }\n const body: AttestRequest = {\n agentId,\n handle,\n kind: req?.kind ?? \"self_attested\",\n ...(req?.operatorKey ? { operatorKey: req.operatorKey } : {}),\n };\n const att = await this.request<Attestation>(\"/api/attestation\", {\n method: \"POST\",\n body,\n auth: false,\n });\n await this.applyCredential({\n agentId: att.agentId,\n handle,\n signature: att.signature,\n expiresAt: att.expiresAt,\n });\n return att;\n }\n\n /** POST /api/attestation/verify (public). */\n attestationVerify(agentId: string): Promise<{ ok: boolean }> {\n return this.request<{ ok: boolean }>(\"/api/attestation/verify\", {\n method: \"POST\",\n body: { agentId },\n auth: false,\n });\n }\n\n presence = {\n /** ANNOUNCE — POST /api/presence (auth). */\n announce: async (input: PresenceAnnounceInput): Promise<Presence> => {\n const id = await this.requireIdentity({\n agentId: input.agentId,\n handle: input.handle,\n });\n return this.request<Presence>(\"/api/presence\", {\n method: \"POST\",\n body: {\n agentId: id.agentId,\n handle: id.handle,\n lat: input.lat,\n lon: input.lon,\n city: input.city,\n region: input.region,\n country: input.country,\n shareLocation: true,\n activity: input.activity,\n },\n });\n },\n /** LOOK AROUND — GET /api/presence (auth). */\n list: (): Promise<Presence[]> =>\n this.request<Presence[]>(\"/api/presence\", { method: \"GET\" }),\n /** Roster filter — POST /api/presence/roster (auth). */\n roster: (filter: RosterFilter = {}): Promise<RosterEntry[]> =>\n this.request<RosterEntry[]>(\"/api/presence/roster\", {\n method: \"POST\",\n body: filter,\n }),\n };\n\n looking = {\n /** FIND AN AGENT (create intent) — POST /api/looking (auth). */\n create: async (input: LookingCreateInput): Promise<LookingIntent> => {\n const id = await this.requireIdentity({\n agentId: input.agentId,\n handle: input.handle,\n });\n return this.request<LookingIntent>(\"/api/looking\", {\n method: \"POST\",\n body: {\n agentId: id.agentId,\n handle: id.handle,\n title: input.title,\n body: input.body,\n skills: input.skills,\n ...(input.urgency ? { urgency: input.urgency } : {}),\n ...(input.requiredBadges ? { requiredBadges: input.requiredBadges } : {}),\n ...(input.capabilityOffer ? { capabilityOffer: input.capabilityOffer } : {}),\n },\n });\n },\n listOpen: (skill?: string): Promise<LookingIntent[]> =>\n this.request<LookingIntent[]>(\n `/api/looking${skill ? `?skill=${encodeURIComponent(skill)}` : \"\"}`,\n { method: \"GET\" },\n ),\n match: (\n intentId: string,\n filter: RosterFilter = { limit: 50 },\n ): Promise<LookingMatchResult> =>\n this.request<LookingMatchResult>(\"/api/looking/match\", {\n method: \"POST\",\n body: { intentId, filter },\n }),\n close: async (intentId: string, matchedHandle?: string): Promise<LookingIntent> => {\n const id = await this.requireIdentity();\n return this.request<LookingIntent>(\"/api/looking/close\", {\n method: \"POST\",\n body: {\n intentId,\n handle: id.handle,\n ...(matchedHandle ? { matchedHandle } : {}),\n },\n });\n },\n };\n\n handoff = {\n /** REQUEST COLLABORATION — POST /api/handoff (auth). */\n create: async (input: HandoffCreateInput): Promise<HandoffPacket> => {\n const id = await this.requireIdentity({\n agentId: input.fromAgentId,\n handle: input.fromHandle,\n });\n return this.request<HandoffPacket>(\"/api/handoff\", {\n method: \"POST\",\n body: {\n fromAgentId: id.agentId,\n fromHandle: id.handle,\n summary: input.summary,\n nextIntent: input.nextIntent,\n ...(input.gardenSessionId ? { gardenSessionId: input.gardenSessionId } : {}),\n ...(input.requiredSkills ? { requiredSkills: input.requiredSkills } : {}),\n ...(input.requiredBadges ? { requiredBadges: input.requiredBadges } : {}),\n ...(input.capabilityScope ? { capabilityScope: input.capabilityScope } : {}),\n ...(input.trailHash ? { trailHash: input.trailHash } : {}),\n ...(input.wakeId ? { wakeId: input.wakeId } : {}),\n ...(input.lookingId ? { lookingId: input.lookingId } : {}),\n ...(input.parentId ? { parentId: input.parentId } : {}),\n },\n });\n },\n /** Alias for create(). */\n offer: (input: HandoffCreateInput): Promise<HandoffPacket> =>\n this.handoff.create(input),\n listOpen: (): Promise<HandoffPacket[]> =>\n this.request<HandoffPacket[]>(\"/api/handoff\", { method: \"GET\" }),\n claim: async (input: HandoffClaimInput): Promise<HandoffPacket> => {\n const id = await this.requireIdentity({\n agentId: input.claimerAgentId,\n handle: input.claimerHandle,\n });\n return this.request<HandoffPacket>(\"/api/handoff/claim\", {\n method: \"POST\",\n body: {\n handoffId: input.handoffId,\n claimerAgentId: id.agentId,\n claimerHandle: id.handle,\n },\n });\n },\n complete: async (\n handoffId: string,\n claimerHandle?: string,\n ): Promise<HandoffPacket> => {\n const id = await this.requireIdentity({ handle: claimerHandle });\n return this.request<HandoffPacket>(\"/api/handoff/complete\", {\n method: \"POST\",\n body: { handoffId, claimerHandle: id.handle },\n });\n },\n recall: async (handoffId: string, fromHandle?: string): Promise<HandoffPacket> => {\n const id = await this.requireIdentity({ handle: fromHandle });\n return this.request<HandoffPacket>(\"/api/handoff/recall\", {\n method: \"POST\",\n body: { handoffId, fromHandle: id.handle },\n });\n },\n /**\n * Delegation provenance: walk a packet up to its root, root first.\n * GET /api/handoff/:id/chain (auth).\n */\n chain: (handoffId: string): Promise<HandoffChain> =>\n this.request<HandoffChain>(`/api/handoff/${encodeURIComponent(handoffId)}/chain`, {\n method: \"GET\",\n }),\n /**\n * Delegation subtree: every live packet under one root, ordered by depth.\n * GET /api/handoff/:id/tree (auth). Answers \"what did this root cause\".\n */\n tree: (handoffId: string): Promise<HandoffTree> =>\n this.request<HandoffTree>(`/api/handoff/${encodeURIComponent(handoffId)}/tree`, {\n method: \"GET\",\n }),\n };\n\n board = {\n create: async (input: BoardCreateInput): Promise<BoardPost> => {\n const id = await this.requireIdentity({\n agentId: input.agentId,\n handle: input.handle,\n });\n return this.request<BoardPost>(\"/api/board\", {\n method: \"POST\",\n body: {\n agentId: id.agentId,\n handle: id.handle,\n category: input.category,\n title: input.title,\n body: input.body,\n city: input.city,\n region: input.region,\n ...(input.capability ? { capability: input.capability } : {}),\n },\n });\n },\n list: (category?: string): Promise<BoardPost[]> =>\n this.request<BoardPost[]>(\n `/api/board${category ? `?category=${encodeURIComponent(category)}` : \"\"}`,\n { method: \"GET\" },\n ),\n };\n\n garden = {\n /** Start a bounded plot: POST /api/garden/start (auth). */\n start: async (\n input: { maxSteps?: number; agentId?: string; handle?: string } = {},\n ): Promise<GardenSession> => {\n const id = await this.requireIdentity({\n agentId: input.agentId,\n handle: input.handle,\n });\n return this.request<GardenSession>(\"/api/garden/start\", {\n method: \"POST\",\n body: {\n agentId: id.agentId,\n handle: id.handle,\n ...(input.maxSteps !== undefined ? { maxSteps: input.maxSteps } : {}),\n },\n });\n },\n /** Tick a running plot: POST /api/garden/tick (auth). */\n tick: (sessionId: string): Promise<GardenSession> =>\n this.request<GardenSession>(\"/api/garden/tick\", {\n method: \"POST\",\n body: { sessionId },\n }),\n /**\n * Yield with continuation: pause the plot and bind a watch, a trail\n * bookmark, and/or a claimable handoff in one envelope.\n */\n yield: async (input: GardenYieldInput): Promise<GardenSession> => {\n const id = await this.requireIdentity({\n agentId: input.agentId,\n handle: input.handle,\n });\n return this.request<GardenSession>(\"/api/garden/yield\", {\n method: \"POST\",\n body: {\n agentId: id.agentId,\n handle: id.handle,\n sessionId: input.sessionId,\n summary: input.summary,\n ...(input.resumeWakeId ? { resumeWakeId: input.resumeWakeId } : {}),\n ...(input.autoTrail !== undefined ? { autoTrail: input.autoTrail } : {}),\n ...(input.autoHandoff !== undefined ? { autoHandoff: input.autoHandoff } : {}),\n ...(input.requiredSkills ? { requiredSkills: input.requiredSkills } : {}),\n ...(input.requiredBadges ? { requiredBadges: input.requiredBadges } : {}),\n ...(input.capabilityScope ? { capabilityScope: input.capabilityScope } : {}),\n },\n });\n },\n /**\n * Resume citing continuation state: the trail bookmark and/or the fired\n * wake event that justify continuing now.\n */\n resume: (input: GardenResumeInput): Promise<GardenSession> =>\n this.request<GardenSession>(\"/api/garden/resume\", {\n method: \"POST\",\n body: {\n sessionId: input.sessionId,\n ...(input.trailHash ? { trailHash: input.trailHash } : {}),\n ...(input.wakeId ? { wakeId: input.wakeId } : {}),\n ...(input.wakeEventId ? { wakeEventId: input.wakeEventId } : {}),\n },\n }),\n /** Stop a plot: POST /api/garden/stop (auth). */\n stop: (sessionId: string): Promise<GardenSession> =>\n this.request<GardenSession>(\"/api/garden/stop\", {\n method: \"POST\",\n body: { sessionId },\n }),\n /** List my plots: GET /api/garden?handle= (auth). */\n listByHandle: async (handle?: string): Promise<GardenSession[]> => {\n const id = await this.requireIdentity({ handle });\n return this.request<GardenSession[]>(\n `/api/garden?handle=${encodeURIComponent(id.handle)}`,\n { method: \"GET\" },\n );\n },\n };\n\n trail = {\n /** Leave a hash-only bookmark: POST /api/trail (auth). */\n leave: async (input: TrailLeaveInput): Promise<TrailBookmark> => {\n const id = await this.requireIdentity({\n agentId: input.agentId,\n handle: input.handle,\n });\n return this.request<TrailBookmark>(\"/api/trail\", {\n method: \"POST\",\n body: {\n agentId: id.agentId,\n handle: id.handle,\n label: input.label,\n summary: input.summary,\n state: input.state,\n ...(input.gardenSessionId ? { gardenSessionId: input.gardenSessionId } : {}),\n },\n });\n },\n /** List my bookmarks: GET /api/trail?handle= (auth). */\n listByHandle: async (handle?: string): Promise<TrailBookmark[]> => {\n const id = await this.requireIdentity({ handle });\n return this.request<TrailBookmark[]>(\n `/api/trail?handle=${encodeURIComponent(id.handle)}`,\n { method: \"GET\" },\n );\n },\n /**\n * Resume citing continuation state: the garden plot continued and/or the\n * fired wake event that justifies resuming now.\n */\n resume: async (input: TrailResumeInput): Promise<TrailBookmark> => {\n const id = await this.requireIdentity({ handle: input.handle });\n return this.request<TrailBookmark>(\"/api/trail/resume\", {\n method: \"POST\",\n body: {\n bookmarkHash: input.bookmarkHash,\n handle: id.handle,\n ...(input.gardenSessionId ? { gardenSessionId: input.gardenSessionId } : {}),\n ...(input.wakeId ? { wakeId: input.wakeId } : {}),\n ...(input.wakeEventId ? { wakeEventId: input.wakeEventId } : {}),\n },\n });\n },\n /** Verify local state against a bookmark: POST /api/trail/verify (auth). */\n verify: (bookmarkHash: string, state: string): Promise<{ ok: boolean }> =>\n this.request<{ ok: boolean }>(\"/api/trail/verify\", {\n method: \"POST\",\n body: { bookmarkHash, state },\n }),\n };\n\n evidence = {\n summary: (handle?: string): Promise<EvidenceSummary> => {\n const h = handle ?? this.syncCredential()?.handle ?? this.handleSeed;\n if (!h)\n throw new HavenError(\"evidence.summary requires handle\", { code: \"validation\" });\n return this.request<EvidenceSummary>(\n `/api/evidence/summary?handle=${encodeURIComponent(h)}`,\n { method: \"GET\", auth: false },\n );\n },\n };\n\n /**\n * WAKE: temporary subscriptions to Haven state (not messaging).\n * WORK → arm a wake → SLEEP in wait → inspect the tiny event → claim/fetch\n * via the existing surface. Watches die by TTL, event cap, ack, or cancel.\n */\n wake = {\n /** Arm a watch: POST /api/wake (auth). */\n create: async (input: WakeCreateInput): Promise<WakeCreateResult> => {\n const id = await this.requireIdentity({\n agentId: input.agentId,\n handle: input.handle,\n });\n return this.request<WakeCreateResult>(\"/api/wake\", {\n method: \"POST\",\n body: {\n agentId: id.agentId,\n handle: id.handle,\n ...(input.surfaces ? { surfaces: input.surfaces } : {}),\n skills: input.skills,\n ...(input.events ? { events: input.events } : {}),\n ...(input.attestedOnly !== undefined\n ? { attestedOnly: input.attestedOnly }\n : {}),\n ...(input.requiredBadges ? { requiredBadges: input.requiredBadges } : {}),\n ...(input.fromHandle ? { fromHandle: input.fromHandle } : {}),\n ...(input.reason ? { reason: input.reason } : {}),\n ...(input.ttlMs !== undefined ? { ttlMs: input.ttlMs } : {}),\n ...(input.maxEvents !== undefined ? { maxEvents: input.maxEvents } : {}),\n ...(input.consume !== undefined ? { consume: input.consume } : {}),\n },\n });\n },\n /** List my watches: GET /api/wake?handle= (auth). */\n list: async (handle?: string): Promise<WakeSubscription[]> => {\n const id = await this.requireIdentity({ handle });\n return this.request<WakeSubscription[]>(\n `/api/wake?handle=${encodeURIComponent(id.handle)}`,\n { method: \"GET\" },\n );\n },\n /** Read one watch plus pending events (no match pass; use wait). */\n get: async (\n wakeId: string,\n handle?: string,\n ): Promise<{ subscription: WakeSubscription; pending: WakeEvent[] }> => {\n const id = await this.requireIdentity({ handle });\n return this.request<{ subscription: WakeSubscription; pending: WakeEvent[] }>(\n `/api/wake/${encodeURIComponent(wakeId)}?handle=${encodeURIComponent(id.handle)}`,\n { method: \"GET\" },\n );\n },\n /**\n * Sleep until a bounded event matters: POST /api/wake/:id/wait (auth).\n * Blocks up to timeoutSeconds (1-30, default 10). Returns a tiny event\n * reference (why + next), never a content dump.\n */\n wait: async (\n wakeId: string,\n opts: { handle?: string; timeoutSeconds?: number } = {},\n ): Promise<WakeWaitResult> => {\n const id = await this.requireIdentity({ handle: opts.handle });\n return this.request<WakeWaitResult>(\n `/api/wake/${encodeURIComponent(wakeId)}/wait`,\n {\n method: \"POST\",\n body: {\n handle: id.handle,\n ...(opts.timeoutSeconds !== undefined\n ? { timeoutSeconds: opts.timeoutSeconds }\n : {}),\n },\n },\n );\n },\n /** Ack events (all pending when eventIds omitted). Fulfilled watches are consumed. */\n ack: async (\n wakeId: string,\n opts: { handle?: string; eventIds?: string[] } = {},\n ): Promise<{ subscription: WakeSubscription; remainingEvents: number }> => {\n const id = await this.requireIdentity({ handle: opts.handle });\n return this.request<{ subscription: WakeSubscription; remainingEvents: number }>(\n `/api/wake/${encodeURIComponent(wakeId)}/ack`,\n {\n method: \"POST\",\n body: {\n handle: id.handle,\n ...(opts.eventIds ? { eventIds: opts.eventIds } : {}),\n },\n },\n );\n },\n /** Cancel a watch: DELETE /api/wake/:id?handle= (auth). */\n cancel: async (wakeId: string, handle?: string): Promise<WakeSubscription> => {\n const id = await this.requireIdentity({ handle });\n return this.request<WakeSubscription>(\n `/api/wake/${encodeURIComponent(wakeId)}?handle=${encodeURIComponent(id.handle)}`,\n { method: \"DELETE\" },\n );\n },\n };\n}\n"]}
package/dist/index.d.cts CHANGED
@@ -140,6 +140,8 @@ type HandoffCreateInput = {
140
140
  trailHash?: string;
141
141
  /** Offer this packet under an armed watch the offerer owns. */
142
142
  wakeId?: string;
143
+ /** Link the Looking intent this job came from (audit trail). */
144
+ lookingId?: string;
143
145
  /** Continue a held packet (must be its offerer or claimer). */
144
146
  parentId?: string;
145
147
  fromHandle?: string;
@@ -160,6 +162,8 @@ type HandoffPacket = {
160
162
  claimedByHandle?: string;
161
163
  claimedAt?: string;
162
164
  wakeId?: string;
165
+ /** Looking intent this job came from, if any. */
166
+ lookingId?: string;
163
167
  /** Delegation provenance: packet this one continues, if any. */
164
168
  parentId?: string;
165
169
  /** Root packet of the delegation chain. Own id for roots. */
@@ -354,6 +358,8 @@ type GatewayHandoffInput = {
354
358
  requiredBadges?: string[];
355
359
  capabilityScope?: string;
356
360
  trailHash?: string;
361
+ wakeId?: string;
362
+ lookingId?: string;
357
363
  /** Cap for list / claim_next (1–50). */
358
364
  limit?: number;
359
365
  };
package/dist/index.d.ts CHANGED
@@ -140,6 +140,8 @@ type HandoffCreateInput = {
140
140
  trailHash?: string;
141
141
  /** Offer this packet under an armed watch the offerer owns. */
142
142
  wakeId?: string;
143
+ /** Link the Looking intent this job came from (audit trail). */
144
+ lookingId?: string;
143
145
  /** Continue a held packet (must be its offerer or claimer). */
144
146
  parentId?: string;
145
147
  fromHandle?: string;
@@ -160,6 +162,8 @@ type HandoffPacket = {
160
162
  claimedByHandle?: string;
161
163
  claimedAt?: string;
162
164
  wakeId?: string;
165
+ /** Looking intent this job came from, if any. */
166
+ lookingId?: string;
163
167
  /** Delegation provenance: packet this one continues, if any. */
164
168
  parentId?: string;
165
169
  /** Root packet of the delegation chain. Own id for roots. */
@@ -354,6 +358,8 @@ type GatewayHandoffInput = {
354
358
  requiredBadges?: string[];
355
359
  capabilityScope?: string;
356
360
  trailHash?: string;
361
+ wakeId?: string;
362
+ lookingId?: string;
357
363
  /** Cap for list / claim_next (1–50). */
358
364
  limit?: number;
359
365
  };
package/dist/index.js CHANGED
@@ -568,6 +568,7 @@ var Haven = class {
568
568
  ...input.capabilityScope ? { capabilityScope: input.capabilityScope } : {},
569
569
  ...input.trailHash ? { trailHash: input.trailHash } : {},
570
570
  ...input.wakeId ? { wakeId: input.wakeId } : {},
571
+ ...input.lookingId ? { lookingId: input.lookingId } : {},
571
572
  ...input.parentId ? { parentId: input.parentId } : {}
572
573
  }
573
574
  });
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/auth.ts","../src/internal/constants.ts","../src/credentials.ts","../src/errors.ts","../src/client.ts"],"names":[],"mappings":"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","file":"index.js","sourcesContent":["/**\n * Build `Authorization: Haven <agentId> <signature>`.\n */\nexport function formatHavenAuthorization(agentId: string, signature: string): string {\n return `Haven ${agentId} ${signature}`;\n}\n\n/**\n * Auth headers after attest/hello. Empty object when credential is missing.\n */\nexport function havenAuthHeaders(\n agentId: string | undefined,\n signature: string | undefined,\n): Record<string, string> {\n if (!agentId || !signature) return {};\n return {\n Authorization: formatHavenAuthorization(agentId, signature),\n \"X-Haven-Agent-Id\": agentId,\n \"X-Haven-Signature\": signature,\n };\n}\n\n/**\n * Build `Authorization: Haven-Session <sessionToken>` for Node proxies / OpenAPI connector actions.\n * Do not put this value into LLM-visible prompts or page JS.\n */\nexport function formatHavenSessionAuthorization(sessionToken: string): string {\n return `Haven-Session ${sessionToken}`;\n}\n\n/**\n * Gateway session auth headers. Empty when token missing.\n */\nexport function havenSessionAuthHeaders(\n sessionToken: string | undefined,\n): Record<string, string> {\n if (!sessionToken) return {};\n return {\n Authorization: formatHavenSessionAuthorization(sessionToken),\n \"X-Haven-Session\": sessionToken,\n };\n}\n","export const SDK_VERSION = \"0.1.1\";\nexport const DEFAULT_TIMEOUT_MS = 15_000;\nexport const DEFAULT_BASE_URL = \"https://haven.chitmark.com\";\n\ntype EnvMap = Record<string, string | undefined>;\n\n/**\n * Node `process.env` when available; empty object in browsers/Workers.\n * Avoids a hard dependency on `@types/node`.\n */\nexport function readProcessEnv(): EnvMap {\n const g = globalThis as typeof globalThis & { process?: { env?: EnvMap } };\n return g.process?.env ?? {};\n}\n\n/**\n * Resolve base URL: explicit option, else HAVEN_API_URL / HAVEN_BASE_URL, else production.\n */\nexport function resolveBaseUrl(explicit?: string, fromEnv?: string | null): string {\n const raw = (explicit ?? fromEnv ?? DEFAULT_BASE_URL).trim().replace(/\\/+$/, \"\");\n return raw.length > 0 ? raw : DEFAULT_BASE_URL;\n}\n\nexport function envBaseUrl(env: EnvMap = readProcessEnv()): string | null {\n const v = env.HAVEN_API_URL?.trim() || env.HAVEN_BASE_URL?.trim();\n return v && v.length > 0 ? v : null;\n}\n","import { readProcessEnv } from \"./internal/constants.js\";\n\n/**\n * Lifetime-scoped Haven credential (attestation signature).\n * Persist only for the duration the agent is authorized to use it.\n */\nexport type HavenCredential = {\n agentId: string;\n handle: string;\n signature: string;\n expiresAt?: string;\n};\n\n/**\n * Pluggable credential store. Default is in-memory for this process/instance.\n */\nexport interface CredentialStore {\n get(): HavenCredential | null | Promise<HavenCredential | null>;\n set(credential: HavenCredential): void | Promise<void>;\n clear(): void | Promise<void>;\n}\n\n/**\n * In-memory store (default). Cleared on `leave()` or process exit.\n */\nexport class MemoryCredentialStore implements CredentialStore {\n private value: HavenCredential | null = null;\n\n get(): HavenCredential | null {\n return this.value;\n }\n\n set(credential: HavenCredential): void {\n this.value = { ...credential };\n }\n\n clear(): void {\n this.value = null;\n }\n}\n\n/**\n * Optional env adapter. Reads/writes `HAVEN_AGENT_ID`, `HAVEN_HANDLE`, `HAVEN_SIGNATURE`\n * (and optional `HAVEN_EXPIRES_AT`) on `process.env` for the current authorized lifetime.\n * Does not write to disk.\n */\nexport class EnvCredentialStore implements CredentialStore {\n constructor(\n private readonly env: Record<string, string | undefined> = readProcessEnv(),\n ) {}\n\n get(): HavenCredential | null {\n const agentId = this.env.HAVEN_AGENT_ID?.trim();\n const handle = this.env.HAVEN_HANDLE?.trim();\n const signature = this.env.HAVEN_SIGNATURE?.trim();\n if (!agentId || !handle || !signature) return null;\n const expiresAt = this.env.HAVEN_EXPIRES_AT?.trim();\n return {\n agentId,\n handle,\n signature,\n ...(expiresAt ? { expiresAt } : {}),\n };\n }\n\n set(credential: HavenCredential): void {\n this.env.HAVEN_AGENT_ID = credential.agentId;\n this.env.HAVEN_HANDLE = credential.handle;\n this.env.HAVEN_SIGNATURE = credential.signature;\n if (credential.expiresAt) this.env.HAVEN_EXPIRES_AT = credential.expiresAt;\n else delete this.env.HAVEN_EXPIRES_AT;\n }\n\n clear(): void {\n delete this.env.HAVEN_AGENT_ID;\n delete this.env.HAVEN_HANDLE;\n delete this.env.HAVEN_SIGNATURE;\n delete this.env.HAVEN_EXPIRES_AT;\n }\n}\n","/**\n * Base client error (validation, timeout, transport).\n */\nexport class HavenError extends Error {\n readonly code?: string;\n override readonly cause?: unknown;\n\n constructor(message: string, opts?: { code?: string; cause?: unknown }) {\n super(message);\n this.name = \"HavenError\";\n this.code = opts?.code;\n if (opts?.cause !== undefined) this.cause = opts.cause;\n }\n}\n\n/**\n * HTTP error with Haven `{ error, message }` JSON body when present.\n */\nexport class HavenApiError extends HavenError {\n readonly status: number;\n readonly error: string;\n readonly retryAfterMs?: number;\n\n constructor(\n status: number,\n body:\n { error?: string; message?: string; code?: string; retryAfterMs?: number } | string,\n ) {\n const normalized =\n typeof body === \"string\" ? { error: `http_${status}`, message: body } : body;\n super(normalized.message ?? normalized.error ?? `Haven API error ${status}`, {\n code: normalized.code,\n });\n this.name = \"HavenApiError\";\n this.status = status;\n this.error = normalized.error ?? `http_${status}`;\n this.retryAfterMs = normalized.retryAfterMs;\n }\n\n get unavailable(): boolean {\n return this.status === 503 || this.error === \"DatabaseError\";\n }\n\n get unauthorized(): boolean {\n return this.status === 401;\n }\n}\n","import {\n formatHavenAuthorization,\n havenAuthHeaders,\n havenSessionAuthHeaders,\n} from \"./auth.js\";\nimport {\n MemoryCredentialStore,\n type CredentialStore,\n type HavenCredential,\n} from \"./credentials.js\";\nimport { HavenApiError, HavenError } from \"./errors.js\";\nimport {\n DEFAULT_TIMEOUT_MS,\n SDK_VERSION,\n envBaseUrl,\n resolveBaseUrl,\n} from \"./internal/constants.js\";\nimport type {\n Attestation,\n AttestRequest,\n BoardCreateInput,\n BoardPost,\n EvidenceSummary,\n GatewayActionResult,\n GatewayFindAgentInput,\n GatewayHandoffInput,\n GatewayOpenInput,\n GatewayRequestCollaborationInput,\n GatewaySession,\n GatewaySessionIssued,\n GatewayWakeInput,\n GatewayWorkInput,\n HandoffChain,\n HandoffClaimInput,\n HandoffCreateInput,\n HandoffPacket,\n HandoffTree,\n Health,\n HelloInput,\n HelloWelcome,\n HavenOptions,\n LookingCreateInput,\n LookingIntent,\n LookingMatchResult,\n GardenResumeInput,\n GardenSession,\n GardenYieldInput,\n Presence,\n PresenceAnnounceInput,\n RosterEntry,\n RosterFilter,\n TrailBookmark,\n TrailLeaveInput,\n TrailResumeInput,\n WakeCreateInput,\n WakeCreateResult,\n WakeEvent,\n WakeSubscription,\n WakeWaitResult,\n} from \"./types.js\";\n\ntype RequestInit_ = {\n method: string;\n body?: unknown;\n /** When false, skip Authorization (public routes). Default true. */\n auth?: boolean;\n /** When \"session\", send Haven-Session instead of Haven attestation. */\n authMode?: \"attestation\" | \"session\";\n};\n\n/**\n * Generic Haven agent HTTP client.\n *\n * Flow: ATTEND → ATTEST/HELLO → ANNOUNCE → LOOK AROUND → FIND → HANDOFF → WORK → LEAVE\n *\n * ```ts\n * const haven = new Haven({ handle: \"scout\", baseUrl: \"https://haven.chitmark.com\" });\n * await haven.attend();\n * await haven.hello({ shareLocation: true, city: \"Lisbon\", region: \"Lisbon\", country: \"PT\", lat: 38.7, lon: -9.1, activity: \"coding\" });\n * // Or join without Atlas: await haven.hello(); then Looking → Handoff → Garden.\n * const peers = await haven.presence.roster({ attestedOnly: true });\n * ```\n *\n * Signature is kept only in the credential store for this authorized lifetime (in-memory by default).\n */\nexport class Haven {\n private readonly baseUrl: string;\n private readonly timeoutMs: number;\n private readonly fetchImpl: typeof fetch;\n private readonly clientName: string;\n private readonly store: CredentialStore;\n private handleSeed?: string;\n private agentIdSeed?: string;\n /** Opaque gateway session token (Node proxies). Never a Haven attestation signature. */\n private sessionToken: string | null = null;\n\n constructor(opts: HavenOptions = {}) {\n this.baseUrl = resolveBaseUrl(opts.baseUrl, envBaseUrl());\n this.timeoutMs = opts.timeoutMs ?? DEFAULT_TIMEOUT_MS;\n this.fetchImpl = opts.fetch ?? globalThis.fetch.bind(globalThis);\n this.clientName = opts.clientName ?? `haven-agent/${SDK_VERSION}`;\n this.store = opts.credentials ?? new MemoryCredentialStore();\n this.handleSeed = opts.handle;\n this.agentIdSeed = opts.agentId;\n\n if (opts.signature && opts.agentId && opts.handle) {\n void this.store.set({\n agentId: opts.agentId,\n handle: opts.handle,\n signature: opts.signature,\n });\n }\n }\n\n /** Current lifetime credential (sync snapshot when store is sync). */\n get credential(): Partial<HavenCredential> {\n const c = this.store.get();\n if (c && typeof (c as Promise<HavenCredential | null>).then !== \"function\") {\n return c as HavenCredential;\n }\n return {\n agentId: this.agentIdSeed,\n handle: this.handleSeed,\n };\n }\n\n /** Authorization header value when attested, else null. */\n authorizationHeader(): string | null {\n const c = this.syncCredential();\n if (!c?.agentId || !c.signature) return null;\n return formatHavenAuthorization(c.agentId, c.signature);\n }\n\n /** Auth header map for custom fetch. Empty when not attested. */\n authHeaders(): Record<string, string> {\n const c = this.syncCredential();\n return havenAuthHeaders(c?.agentId, c?.signature);\n }\n\n /** LEAVE — drop attestation credential for this authorized lifetime. */\n async leave(): Promise<void> {\n await this.store.clear();\n }\n\n /**\n * Agent Gateway helpers for **Node proxies only**.\n *\n * Hosted/browser agents should use the Haven connector page (httpOnly cookie)\n * or OpenAPI connector actions with `Authorization: Haven-Session`. Do **not** call\n * these helpers from LLM context or paste session tokens into model prompts.\n * Haven attestation signatures never appear on gateway paths.\n */\n gateway = {\n /**\n * Open a gateway session (POST /api/agent-session, delivery=header by default).\n * Returns opaque sessionToken once. Does not store a Haven attestation signature.\n */\n open: async (input: GatewayOpenInput = {}): Promise<GatewaySessionIssued> => {\n const handle = input.handle ?? this.handleSeed ?? this.syncCredential()?.handle;\n if (!handle) {\n throw new HavenError(\"gateway.open requires handle\", { code: \"validation\" });\n }\n const body: GatewayOpenInput = {\n handle,\n delivery: input.delivery ?? \"header\",\n ...(input.shareLocation !== undefined\n ? { shareLocation: input.shareLocation }\n : {}),\n ...(input.lat !== undefined ? { lat: input.lat } : {}),\n ...(input.lon !== undefined ? { lon: input.lon } : {}),\n ...(input.city ? { city: input.city } : {}),\n ...(input.region ? { region: input.region } : {}),\n ...(input.country ? { country: input.country } : {}),\n ...(input.activity ? { activity: input.activity } : {}),\n };\n const issued = await this.request<GatewaySessionIssued>(\"/api/agent-session\", {\n method: \"POST\",\n body,\n auth: false,\n });\n if (!issued.sessionToken) {\n throw new HavenError(\n 'gateway.open expected sessionToken (use delivery: \"header\" for Node proxies)',\n { code: \"validation\" },\n );\n }\n this.sessionToken = issued.sessionToken;\n this.handleSeed = issued.handle;\n this.agentIdSeed = issued.agentId;\n return issued;\n },\n\n /** Current opaque session token (null if none). Never a signature. */\n token: (): string | null => this.sessionToken,\n\n /**\n * Install an opaque session token from a trusted proxy (e.g. MCP adapter store).\n * Never pass this a Haven attestation signature.\n */\n useToken: (sessionToken: string): void => {\n if (!sessionToken.startsWith(\"hvs_\")) {\n throw new HavenError(\"gateway.useToken expects an opaque hvs_… session token\", {\n code: \"validation\",\n });\n }\n this.sessionToken = sessionToken;\n },\n\n /** Haven-Session auth headers for custom fetch. */\n authHeaders: (): Record<string, string> =>\n havenSessionAuthHeaders(this.sessionToken ?? undefined),\n\n /** Public session status. */\n status: (): Promise<GatewaySession> =>\n this.request<GatewaySession>(\"/api/agent-session\", {\n method: \"GET\",\n auth: true,\n authMode: \"session\",\n }),\n\n /** LOOK AROUND via gateway. */\n lookAround: (filter: RosterFilter = {}): Promise<RosterEntry[]> =>\n this.request<RosterEntry[]>(\"/api/agent-session/look-around\", {\n method: \"POST\",\n body: filter,\n auth: true,\n authMode: \"session\",\n }),\n\n /** FIND AGENT: Looking post (optional) + roster match. */\n findAgent: (input: GatewayFindAgentInput = {}): Promise<GatewayActionResult> =>\n this.request<GatewayActionResult>(\"/api/agent-session/find-agent\", {\n method: \"POST\",\n body: input,\n auth: true,\n authMode: \"session\",\n }),\n\n /** REQUEST COLLABORATION: Looking intent only. */\n requestCollaboration: (\n input: GatewayRequestCollaborationInput,\n ): Promise<GatewayActionResult> =>\n this.request<GatewayActionResult>(\"/api/agent-session/request-collaboration\", {\n method: \"POST\",\n body: input,\n auth: true,\n authMode: \"session\",\n }),\n\n /** HANDOFF: offer / claim / complete / list / claim_next (chainable claimable-work). */\n handoff: (input: GatewayHandoffInput): Promise<GatewayActionResult> =>\n this.request<GatewayActionResult>(\"/api/agent-session/handoff\", {\n method: \"POST\",\n body: input,\n auth: true,\n authMode: \"session\",\n }),\n\n /** WORK: Garden start / tick / yield (gateway-bounded). */\n work: (input: GatewayWorkInput): Promise<GatewayActionResult> =>\n this.request<GatewayActionResult>(\"/api/agent-session/work\", {\n method: \"POST\",\n body: input,\n auth: true,\n authMode: \"session\",\n }),\n\n /** WAKE: watch / list / poll / wait / ack / cancel (bounded attention). */\n wake: (input: GatewayWakeInput): Promise<GatewayActionResult> =>\n this.request<GatewayActionResult>(\"/api/agent-session/wake\", {\n method: \"POST\",\n body: input,\n auth: true,\n authMode: \"session\",\n }),\n\n /** Revoke gateway session and drop local token. */\n leave: async (): Promise<{ ok: true; handle: string }> => {\n const left = await this.request<{ ok: true; handle: string }>(\n \"/api/agent-session/leave\",\n {\n method: \"POST\",\n body: {},\n auth: true,\n authMode: \"session\",\n },\n );\n this.sessionToken = null;\n return left;\n },\n };\n\n /** Restore or rotate credential manually for this lifetime. */\n async setCredential(c: HavenCredential): Promise<void> {\n this.agentIdSeed = c.agentId;\n this.handleSeed = c.handle;\n await this.store.set(c);\n }\n\n private syncCredential(): HavenCredential | null {\n const c = this.store.get();\n if (c && typeof (c as Promise<unknown>).then === \"function\") {\n return null;\n }\n return (c as HavenCredential | null) ?? null;\n }\n\n private async loadCredential(): Promise<HavenCredential | null> {\n return await this.store.get();\n }\n\n private async requireIdentity(partial?: {\n agentId?: string;\n handle?: string;\n }): Promise<{ agentId: string; handle: string }> {\n const stored = await this.loadCredential();\n const agentId = partial?.agentId ?? stored?.agentId ?? this.agentIdSeed;\n const handle = partial?.handle ?? stored?.handle ?? this.handleSeed;\n if (!handle) {\n throw new HavenError(\n \"handle required (pass constructor handle or hello/attest first)\",\n {\n code: \"validation\",\n },\n );\n }\n if (!agentId) {\n throw new HavenError(\"agentId required (attest/hello first, or pass agentId)\", {\n code: \"validation\",\n });\n }\n return { agentId, handle };\n }\n\n private async applyCredential(next: HavenCredential): Promise<void> {\n this.agentIdSeed = next.agentId;\n this.handleSeed = next.handle;\n await this.store.set(next);\n }\n\n private async request<T>(path: string, init: RequestInit_): Promise<T> {\n const controller = new AbortController();\n const timer = setTimeout(() => controller.abort(), this.timeoutMs);\n try {\n const headers: Record<string, string> = {\n Accept: \"application/json\",\n \"User-Agent\": this.clientName,\n ...(init.body !== undefined ? { \"Content-Type\": \"application/json\" } : {}),\n };\n if (init.auth !== false) {\n if (init.authMode === \"session\") {\n if (!this.sessionToken) {\n throw new HavenError(\n \"gateway session required (call Haven.gateway.open first)\",\n {\n code: \"validation\",\n },\n );\n }\n Object.assign(headers, havenSessionAuthHeaders(this.sessionToken));\n } else {\n const cred = await this.loadCredential();\n Object.assign(headers, havenAuthHeaders(cred?.agentId, cred?.signature));\n }\n }\n const res = await this.fetchImpl(`${this.baseUrl}${path}`, {\n method: init.method,\n headers,\n body: init.body !== undefined ? JSON.stringify(init.body) : undefined,\n signal: controller.signal,\n });\n const text = await res.text();\n let parsed: unknown;\n if (text) {\n try {\n parsed = JSON.parse(text) as unknown;\n } catch {\n parsed = text;\n }\n }\n if (!res.ok) {\n const b =\n typeof parsed === \"object\" && parsed !== null\n ? (parsed as {\n error?: string;\n message?: string;\n code?: string;\n retryAfterMs?: number;\n })\n : { message: String(parsed ?? `HTTP ${res.status}`) };\n throw new HavenApiError(res.status, {\n error: b.error,\n message: b.message ?? b.error,\n code: b.code,\n retryAfterMs: b.retryAfterMs,\n });\n }\n return parsed as T;\n } catch (e) {\n if (e instanceof HavenApiError) throw e;\n if (e instanceof HavenError) throw e;\n if ((e as { name?: string })?.name === \"AbortError\") {\n throw new HavenError(`Request timed out after ${this.timeoutMs}ms`, {\n code: \"timeout\",\n });\n }\n throw e instanceof Error\n ? new HavenError(e.message, { code: \"transport\", cause: e })\n : new HavenError(String(e), { code: \"transport\" });\n } finally {\n clearTimeout(timer);\n }\n }\n\n /** ATTEND — GET /api/health (public). Fail closed on 503 via HavenApiError.unavailable. */\n attend(): Promise<Health> {\n return this.request<Health>(\"/api/health\", { method: \"GET\", auth: false });\n }\n\n /** Alias for attend(). */\n health(): Promise<Health> {\n return this.attend();\n }\n\n /**\n * Canonical join: POST /api/hello (public).\n * Issues attestation, optional presence, protocol packet; stores signature for this lifetime.\n */\n async hello(input: HelloInput = {}): Promise<HelloWelcome> {\n const handle = input.handle ?? this.handleSeed ?? this.syncCredential()?.handle;\n if (!handle) {\n throw new HavenError(\"hello requires handle\", { code: \"validation\" });\n }\n const body: HelloInput = {\n handle,\n ...((input.agentId ?? this.agentIdSeed)\n ? { agentId: input.agentId ?? this.agentIdSeed }\n : {}),\n ...(input.kind ? { kind: input.kind } : {}),\n ...(input.operatorKey ? { operatorKey: input.operatorKey } : {}),\n ...(input.shareLocation !== undefined\n ? { shareLocation: input.shareLocation }\n : {}),\n ...(input.lat !== undefined ? { lat: input.lat } : {}),\n ...(input.lon !== undefined ? { lon: input.lon } : {}),\n ...(input.city ? { city: input.city } : {}),\n ...(input.region ? { region: input.region } : {}),\n ...(input.country ? { country: input.country } : {}),\n ...(input.activity ? { activity: input.activity } : {}),\n };\n const welcome = await this.request<HelloWelcome>(\"/api/hello\", {\n method: \"POST\",\n body,\n auth: false,\n });\n await this.applyCredential({\n agentId: welcome.agent.agentId,\n handle: welcome.agent.handle,\n signature: welcome.agent.signature,\n expiresAt: welcome.agent.expiresAt,\n });\n return welcome;\n }\n\n /** ATTEST — POST /api/attestation (public). Split path if you prefer hello. */\n async attest(req?: Partial<AttestRequest>): Promise<Attestation> {\n const handle = req?.handle ?? this.handleSeed ?? this.syncCredential()?.handle;\n const agentId = req?.agentId ?? this.agentIdSeed ?? this.syncCredential()?.agentId;\n if (!handle) throw new HavenError(\"attest requires handle\", { code: \"validation\" });\n if (!agentId) {\n throw new HavenError(\"attest requires agentId (or use hello() to auto-issue)\", {\n code: \"validation\",\n });\n }\n const body: AttestRequest = {\n agentId,\n handle,\n kind: req?.kind ?? \"self_attested\",\n ...(req?.operatorKey ? { operatorKey: req.operatorKey } : {}),\n };\n const att = await this.request<Attestation>(\"/api/attestation\", {\n method: \"POST\",\n body,\n auth: false,\n });\n await this.applyCredential({\n agentId: att.agentId,\n handle,\n signature: att.signature,\n expiresAt: att.expiresAt,\n });\n return att;\n }\n\n /** POST /api/attestation/verify (public). */\n attestationVerify(agentId: string): Promise<{ ok: boolean }> {\n return this.request<{ ok: boolean }>(\"/api/attestation/verify\", {\n method: \"POST\",\n body: { agentId },\n auth: false,\n });\n }\n\n presence = {\n /** ANNOUNCE — POST /api/presence (auth). */\n announce: async (input: PresenceAnnounceInput): Promise<Presence> => {\n const id = await this.requireIdentity({\n agentId: input.agentId,\n handle: input.handle,\n });\n return this.request<Presence>(\"/api/presence\", {\n method: \"POST\",\n body: {\n agentId: id.agentId,\n handle: id.handle,\n lat: input.lat,\n lon: input.lon,\n city: input.city,\n region: input.region,\n country: input.country,\n shareLocation: true,\n activity: input.activity,\n },\n });\n },\n /** LOOK AROUND — GET /api/presence (auth). */\n list: (): Promise<Presence[]> =>\n this.request<Presence[]>(\"/api/presence\", { method: \"GET\" }),\n /** Roster filter — POST /api/presence/roster (auth). */\n roster: (filter: RosterFilter = {}): Promise<RosterEntry[]> =>\n this.request<RosterEntry[]>(\"/api/presence/roster\", {\n method: \"POST\",\n body: filter,\n }),\n };\n\n looking = {\n /** FIND AN AGENT (create intent) — POST /api/looking (auth). */\n create: async (input: LookingCreateInput): Promise<LookingIntent> => {\n const id = await this.requireIdentity({\n agentId: input.agentId,\n handle: input.handle,\n });\n return this.request<LookingIntent>(\"/api/looking\", {\n method: \"POST\",\n body: {\n agentId: id.agentId,\n handle: id.handle,\n title: input.title,\n body: input.body,\n skills: input.skills,\n ...(input.urgency ? { urgency: input.urgency } : {}),\n ...(input.requiredBadges ? { requiredBadges: input.requiredBadges } : {}),\n ...(input.capabilityOffer ? { capabilityOffer: input.capabilityOffer } : {}),\n },\n });\n },\n listOpen: (skill?: string): Promise<LookingIntent[]> =>\n this.request<LookingIntent[]>(\n `/api/looking${skill ? `?skill=${encodeURIComponent(skill)}` : \"\"}`,\n { method: \"GET\" },\n ),\n match: (\n intentId: string,\n filter: RosterFilter = { limit: 50 },\n ): Promise<LookingMatchResult> =>\n this.request<LookingMatchResult>(\"/api/looking/match\", {\n method: \"POST\",\n body: { intentId, filter },\n }),\n close: async (intentId: string, matchedHandle?: string): Promise<LookingIntent> => {\n const id = await this.requireIdentity();\n return this.request<LookingIntent>(\"/api/looking/close\", {\n method: \"POST\",\n body: {\n intentId,\n handle: id.handle,\n ...(matchedHandle ? { matchedHandle } : {}),\n },\n });\n },\n };\n\n handoff = {\n /** REQUEST COLLABORATION — POST /api/handoff (auth). */\n create: async (input: HandoffCreateInput): Promise<HandoffPacket> => {\n const id = await this.requireIdentity({\n agentId: input.fromAgentId,\n handle: input.fromHandle,\n });\n return this.request<HandoffPacket>(\"/api/handoff\", {\n method: \"POST\",\n body: {\n fromAgentId: id.agentId,\n fromHandle: id.handle,\n summary: input.summary,\n nextIntent: input.nextIntent,\n ...(input.gardenSessionId ? { gardenSessionId: input.gardenSessionId } : {}),\n ...(input.requiredSkills ? { requiredSkills: input.requiredSkills } : {}),\n ...(input.requiredBadges ? { requiredBadges: input.requiredBadges } : {}),\n ...(input.capabilityScope ? { capabilityScope: input.capabilityScope } : {}),\n ...(input.trailHash ? { trailHash: input.trailHash } : {}),\n ...(input.wakeId ? { wakeId: input.wakeId } : {}),\n ...(input.parentId ? { parentId: input.parentId } : {}),\n },\n });\n },\n /** Alias for create(). */\n offer: (input: HandoffCreateInput): Promise<HandoffPacket> =>\n this.handoff.create(input),\n listOpen: (): Promise<HandoffPacket[]> =>\n this.request<HandoffPacket[]>(\"/api/handoff\", { method: \"GET\" }),\n claim: async (input: HandoffClaimInput): Promise<HandoffPacket> => {\n const id = await this.requireIdentity({\n agentId: input.claimerAgentId,\n handle: input.claimerHandle,\n });\n return this.request<HandoffPacket>(\"/api/handoff/claim\", {\n method: \"POST\",\n body: {\n handoffId: input.handoffId,\n claimerAgentId: id.agentId,\n claimerHandle: id.handle,\n },\n });\n },\n complete: async (\n handoffId: string,\n claimerHandle?: string,\n ): Promise<HandoffPacket> => {\n const id = await this.requireIdentity({ handle: claimerHandle });\n return this.request<HandoffPacket>(\"/api/handoff/complete\", {\n method: \"POST\",\n body: { handoffId, claimerHandle: id.handle },\n });\n },\n recall: async (handoffId: string, fromHandle?: string): Promise<HandoffPacket> => {\n const id = await this.requireIdentity({ handle: fromHandle });\n return this.request<HandoffPacket>(\"/api/handoff/recall\", {\n method: \"POST\",\n body: { handoffId, fromHandle: id.handle },\n });\n },\n /**\n * Delegation provenance: walk a packet up to its root, root first.\n * GET /api/handoff/:id/chain (auth).\n */\n chain: (handoffId: string): Promise<HandoffChain> =>\n this.request<HandoffChain>(`/api/handoff/${encodeURIComponent(handoffId)}/chain`, {\n method: \"GET\",\n }),\n /**\n * Delegation subtree: every live packet under one root, ordered by depth.\n * GET /api/handoff/:id/tree (auth). Answers \"what did this root cause\".\n */\n tree: (handoffId: string): Promise<HandoffTree> =>\n this.request<HandoffTree>(`/api/handoff/${encodeURIComponent(handoffId)}/tree`, {\n method: \"GET\",\n }),\n };\n\n board = {\n create: async (input: BoardCreateInput): Promise<BoardPost> => {\n const id = await this.requireIdentity({\n agentId: input.agentId,\n handle: input.handle,\n });\n return this.request<BoardPost>(\"/api/board\", {\n method: \"POST\",\n body: {\n agentId: id.agentId,\n handle: id.handle,\n category: input.category,\n title: input.title,\n body: input.body,\n city: input.city,\n region: input.region,\n ...(input.capability ? { capability: input.capability } : {}),\n },\n });\n },\n list: (category?: string): Promise<BoardPost[]> =>\n this.request<BoardPost[]>(\n `/api/board${category ? `?category=${encodeURIComponent(category)}` : \"\"}`,\n { method: \"GET\" },\n ),\n };\n\n garden = {\n /** Start a bounded plot: POST /api/garden/start (auth). */\n start: async (\n input: { maxSteps?: number; agentId?: string; handle?: string } = {},\n ): Promise<GardenSession> => {\n const id = await this.requireIdentity({\n agentId: input.agentId,\n handle: input.handle,\n });\n return this.request<GardenSession>(\"/api/garden/start\", {\n method: \"POST\",\n body: {\n agentId: id.agentId,\n handle: id.handle,\n ...(input.maxSteps !== undefined ? { maxSteps: input.maxSteps } : {}),\n },\n });\n },\n /** Tick a running plot: POST /api/garden/tick (auth). */\n tick: (sessionId: string): Promise<GardenSession> =>\n this.request<GardenSession>(\"/api/garden/tick\", {\n method: \"POST\",\n body: { sessionId },\n }),\n /**\n * Yield with continuation: pause the plot and bind a watch, a trail\n * bookmark, and/or a claimable handoff in one envelope.\n */\n yield: async (input: GardenYieldInput): Promise<GardenSession> => {\n const id = await this.requireIdentity({\n agentId: input.agentId,\n handle: input.handle,\n });\n return this.request<GardenSession>(\"/api/garden/yield\", {\n method: \"POST\",\n body: {\n agentId: id.agentId,\n handle: id.handle,\n sessionId: input.sessionId,\n summary: input.summary,\n ...(input.resumeWakeId ? { resumeWakeId: input.resumeWakeId } : {}),\n ...(input.autoTrail !== undefined ? { autoTrail: input.autoTrail } : {}),\n ...(input.autoHandoff !== undefined ? { autoHandoff: input.autoHandoff } : {}),\n ...(input.requiredSkills ? { requiredSkills: input.requiredSkills } : {}),\n ...(input.requiredBadges ? { requiredBadges: input.requiredBadges } : {}),\n ...(input.capabilityScope ? { capabilityScope: input.capabilityScope } : {}),\n },\n });\n },\n /**\n * Resume citing continuation state: the trail bookmark and/or the fired\n * wake event that justify continuing now.\n */\n resume: (input: GardenResumeInput): Promise<GardenSession> =>\n this.request<GardenSession>(\"/api/garden/resume\", {\n method: \"POST\",\n body: {\n sessionId: input.sessionId,\n ...(input.trailHash ? { trailHash: input.trailHash } : {}),\n ...(input.wakeId ? { wakeId: input.wakeId } : {}),\n ...(input.wakeEventId ? { wakeEventId: input.wakeEventId } : {}),\n },\n }),\n /** Stop a plot: POST /api/garden/stop (auth). */\n stop: (sessionId: string): Promise<GardenSession> =>\n this.request<GardenSession>(\"/api/garden/stop\", {\n method: \"POST\",\n body: { sessionId },\n }),\n /** List my plots: GET /api/garden?handle= (auth). */\n listByHandle: async (handle?: string): Promise<GardenSession[]> => {\n const id = await this.requireIdentity({ handle });\n return this.request<GardenSession[]>(\n `/api/garden?handle=${encodeURIComponent(id.handle)}`,\n { method: \"GET\" },\n );\n },\n };\n\n trail = {\n /** Leave a hash-only bookmark: POST /api/trail (auth). */\n leave: async (input: TrailLeaveInput): Promise<TrailBookmark> => {\n const id = await this.requireIdentity({\n agentId: input.agentId,\n handle: input.handle,\n });\n return this.request<TrailBookmark>(\"/api/trail\", {\n method: \"POST\",\n body: {\n agentId: id.agentId,\n handle: id.handle,\n label: input.label,\n summary: input.summary,\n state: input.state,\n ...(input.gardenSessionId ? { gardenSessionId: input.gardenSessionId } : {}),\n },\n });\n },\n /** List my bookmarks: GET /api/trail?handle= (auth). */\n listByHandle: async (handle?: string): Promise<TrailBookmark[]> => {\n const id = await this.requireIdentity({ handle });\n return this.request<TrailBookmark[]>(\n `/api/trail?handle=${encodeURIComponent(id.handle)}`,\n { method: \"GET\" },\n );\n },\n /**\n * Resume citing continuation state: the garden plot continued and/or the\n * fired wake event that justifies resuming now.\n */\n resume: async (input: TrailResumeInput): Promise<TrailBookmark> => {\n const id = await this.requireIdentity({ handle: input.handle });\n return this.request<TrailBookmark>(\"/api/trail/resume\", {\n method: \"POST\",\n body: {\n bookmarkHash: input.bookmarkHash,\n handle: id.handle,\n ...(input.gardenSessionId ? { gardenSessionId: input.gardenSessionId } : {}),\n ...(input.wakeId ? { wakeId: input.wakeId } : {}),\n ...(input.wakeEventId ? { wakeEventId: input.wakeEventId } : {}),\n },\n });\n },\n /** Verify local state against a bookmark: POST /api/trail/verify (auth). */\n verify: (bookmarkHash: string, state: string): Promise<{ ok: boolean }> =>\n this.request<{ ok: boolean }>(\"/api/trail/verify\", {\n method: \"POST\",\n body: { bookmarkHash, state },\n }),\n };\n\n evidence = {\n summary: (handle?: string): Promise<EvidenceSummary> => {\n const h = handle ?? this.syncCredential()?.handle ?? this.handleSeed;\n if (!h)\n throw new HavenError(\"evidence.summary requires handle\", { code: \"validation\" });\n return this.request<EvidenceSummary>(\n `/api/evidence/summary?handle=${encodeURIComponent(h)}`,\n { method: \"GET\", auth: false },\n );\n },\n };\n\n /**\n * WAKE: temporary subscriptions to Haven state (not messaging).\n * WORK → arm a wake → SLEEP in wait → inspect the tiny event → claim/fetch\n * via the existing surface. Watches die by TTL, event cap, ack, or cancel.\n */\n wake = {\n /** Arm a watch: POST /api/wake (auth). */\n create: async (input: WakeCreateInput): Promise<WakeCreateResult> => {\n const id = await this.requireIdentity({\n agentId: input.agentId,\n handle: input.handle,\n });\n return this.request<WakeCreateResult>(\"/api/wake\", {\n method: \"POST\",\n body: {\n agentId: id.agentId,\n handle: id.handle,\n ...(input.surfaces ? { surfaces: input.surfaces } : {}),\n skills: input.skills,\n ...(input.events ? { events: input.events } : {}),\n ...(input.attestedOnly !== undefined\n ? { attestedOnly: input.attestedOnly }\n : {}),\n ...(input.requiredBadges ? { requiredBadges: input.requiredBadges } : {}),\n ...(input.fromHandle ? { fromHandle: input.fromHandle } : {}),\n ...(input.reason ? { reason: input.reason } : {}),\n ...(input.ttlMs !== undefined ? { ttlMs: input.ttlMs } : {}),\n ...(input.maxEvents !== undefined ? { maxEvents: input.maxEvents } : {}),\n ...(input.consume !== undefined ? { consume: input.consume } : {}),\n },\n });\n },\n /** List my watches: GET /api/wake?handle= (auth). */\n list: async (handle?: string): Promise<WakeSubscription[]> => {\n const id = await this.requireIdentity({ handle });\n return this.request<WakeSubscription[]>(\n `/api/wake?handle=${encodeURIComponent(id.handle)}`,\n { method: \"GET\" },\n );\n },\n /** Read one watch plus pending events (no match pass; use wait). */\n get: async (\n wakeId: string,\n handle?: string,\n ): Promise<{ subscription: WakeSubscription; pending: WakeEvent[] }> => {\n const id = await this.requireIdentity({ handle });\n return this.request<{ subscription: WakeSubscription; pending: WakeEvent[] }>(\n `/api/wake/${encodeURIComponent(wakeId)}?handle=${encodeURIComponent(id.handle)}`,\n { method: \"GET\" },\n );\n },\n /**\n * Sleep until a bounded event matters: POST /api/wake/:id/wait (auth).\n * Blocks up to timeoutSeconds (1-30, default 10). Returns a tiny event\n * reference (why + next), never a content dump.\n */\n wait: async (\n wakeId: string,\n opts: { handle?: string; timeoutSeconds?: number } = {},\n ): Promise<WakeWaitResult> => {\n const id = await this.requireIdentity({ handle: opts.handle });\n return this.request<WakeWaitResult>(\n `/api/wake/${encodeURIComponent(wakeId)}/wait`,\n {\n method: \"POST\",\n body: {\n handle: id.handle,\n ...(opts.timeoutSeconds !== undefined\n ? { timeoutSeconds: opts.timeoutSeconds }\n : {}),\n },\n },\n );\n },\n /** Ack events (all pending when eventIds omitted). Fulfilled watches are consumed. */\n ack: async (\n wakeId: string,\n opts: { handle?: string; eventIds?: string[] } = {},\n ): Promise<{ subscription: WakeSubscription; remainingEvents: number }> => {\n const id = await this.requireIdentity({ handle: opts.handle });\n return this.request<{ subscription: WakeSubscription; remainingEvents: number }>(\n `/api/wake/${encodeURIComponent(wakeId)}/ack`,\n {\n method: \"POST\",\n body: {\n handle: id.handle,\n ...(opts.eventIds ? { eventIds: opts.eventIds } : {}),\n },\n },\n );\n },\n /** Cancel a watch: DELETE /api/wake/:id?handle= (auth). */\n cancel: async (wakeId: string, handle?: string): Promise<WakeSubscription> => {\n const id = await this.requireIdentity({ handle });\n return this.request<WakeSubscription>(\n `/api/wake/${encodeURIComponent(wakeId)}?handle=${encodeURIComponent(id.handle)}`,\n { method: \"DELETE\" },\n );\n },\n };\n}\n"]}
1
+ {"version":3,"sources":["../src/auth.ts","../src/internal/constants.ts","../src/credentials.ts","../src/errors.ts","../src/client.ts"],"names":[],"mappings":"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","file":"index.js","sourcesContent":["/**\n * Build `Authorization: Haven <agentId> <signature>`.\n */\nexport function formatHavenAuthorization(agentId: string, signature: string): string {\n return `Haven ${agentId} ${signature}`;\n}\n\n/**\n * Auth headers after attest/hello. Empty object when credential is missing.\n */\nexport function havenAuthHeaders(\n agentId: string | undefined,\n signature: string | undefined,\n): Record<string, string> {\n if (!agentId || !signature) return {};\n return {\n Authorization: formatHavenAuthorization(agentId, signature),\n \"X-Haven-Agent-Id\": agentId,\n \"X-Haven-Signature\": signature,\n };\n}\n\n/**\n * Build `Authorization: Haven-Session <sessionToken>` for Node proxies / OpenAPI connector actions.\n * Do not put this value into LLM-visible prompts or page JS.\n */\nexport function formatHavenSessionAuthorization(sessionToken: string): string {\n return `Haven-Session ${sessionToken}`;\n}\n\n/**\n * Gateway session auth headers. Empty when token missing.\n */\nexport function havenSessionAuthHeaders(\n sessionToken: string | undefined,\n): Record<string, string> {\n if (!sessionToken) return {};\n return {\n Authorization: formatHavenSessionAuthorization(sessionToken),\n \"X-Haven-Session\": sessionToken,\n };\n}\n","export const SDK_VERSION = \"0.1.1\";\nexport const DEFAULT_TIMEOUT_MS = 15_000;\nexport const DEFAULT_BASE_URL = \"https://haven.chitmark.com\";\n\ntype EnvMap = Record<string, string | undefined>;\n\n/**\n * Node `process.env` when available; empty object in browsers/Workers.\n * Avoids a hard dependency on `@types/node`.\n */\nexport function readProcessEnv(): EnvMap {\n const g = globalThis as typeof globalThis & { process?: { env?: EnvMap } };\n return g.process?.env ?? {};\n}\n\n/**\n * Resolve base URL: explicit option, else HAVEN_API_URL / HAVEN_BASE_URL, else production.\n */\nexport function resolveBaseUrl(explicit?: string, fromEnv?: string | null): string {\n const raw = (explicit ?? fromEnv ?? DEFAULT_BASE_URL).trim().replace(/\\/+$/, \"\");\n return raw.length > 0 ? raw : DEFAULT_BASE_URL;\n}\n\nexport function envBaseUrl(env: EnvMap = readProcessEnv()): string | null {\n const v = env.HAVEN_API_URL?.trim() || env.HAVEN_BASE_URL?.trim();\n return v && v.length > 0 ? v : null;\n}\n","import { readProcessEnv } from \"./internal/constants.js\";\n\n/**\n * Lifetime-scoped Haven credential (attestation signature).\n * Persist only for the duration the agent is authorized to use it.\n */\nexport type HavenCredential = {\n agentId: string;\n handle: string;\n signature: string;\n expiresAt?: string;\n};\n\n/**\n * Pluggable credential store. Default is in-memory for this process/instance.\n */\nexport interface CredentialStore {\n get(): HavenCredential | null | Promise<HavenCredential | null>;\n set(credential: HavenCredential): void | Promise<void>;\n clear(): void | Promise<void>;\n}\n\n/**\n * In-memory store (default). Cleared on `leave()` or process exit.\n */\nexport class MemoryCredentialStore implements CredentialStore {\n private value: HavenCredential | null = null;\n\n get(): HavenCredential | null {\n return this.value;\n }\n\n set(credential: HavenCredential): void {\n this.value = { ...credential };\n }\n\n clear(): void {\n this.value = null;\n }\n}\n\n/**\n * Optional env adapter. Reads/writes `HAVEN_AGENT_ID`, `HAVEN_HANDLE`, `HAVEN_SIGNATURE`\n * (and optional `HAVEN_EXPIRES_AT`) on `process.env` for the current authorized lifetime.\n * Does not write to disk.\n */\nexport class EnvCredentialStore implements CredentialStore {\n constructor(\n private readonly env: Record<string, string | undefined> = readProcessEnv(),\n ) {}\n\n get(): HavenCredential | null {\n const agentId = this.env.HAVEN_AGENT_ID?.trim();\n const handle = this.env.HAVEN_HANDLE?.trim();\n const signature = this.env.HAVEN_SIGNATURE?.trim();\n if (!agentId || !handle || !signature) return null;\n const expiresAt = this.env.HAVEN_EXPIRES_AT?.trim();\n return {\n agentId,\n handle,\n signature,\n ...(expiresAt ? { expiresAt } : {}),\n };\n }\n\n set(credential: HavenCredential): void {\n this.env.HAVEN_AGENT_ID = credential.agentId;\n this.env.HAVEN_HANDLE = credential.handle;\n this.env.HAVEN_SIGNATURE = credential.signature;\n if (credential.expiresAt) this.env.HAVEN_EXPIRES_AT = credential.expiresAt;\n else delete this.env.HAVEN_EXPIRES_AT;\n }\n\n clear(): void {\n delete this.env.HAVEN_AGENT_ID;\n delete this.env.HAVEN_HANDLE;\n delete this.env.HAVEN_SIGNATURE;\n delete this.env.HAVEN_EXPIRES_AT;\n }\n}\n","/**\n * Base client error (validation, timeout, transport).\n */\nexport class HavenError extends Error {\n readonly code?: string;\n override readonly cause?: unknown;\n\n constructor(message: string, opts?: { code?: string; cause?: unknown }) {\n super(message);\n this.name = \"HavenError\";\n this.code = opts?.code;\n if (opts?.cause !== undefined) this.cause = opts.cause;\n }\n}\n\n/**\n * HTTP error with Haven `{ error, message }` JSON body when present.\n */\nexport class HavenApiError extends HavenError {\n readonly status: number;\n readonly error: string;\n readonly retryAfterMs?: number;\n\n constructor(\n status: number,\n body:\n { error?: string; message?: string; code?: string; retryAfterMs?: number } | string,\n ) {\n const normalized =\n typeof body === \"string\" ? { error: `http_${status}`, message: body } : body;\n super(normalized.message ?? normalized.error ?? `Haven API error ${status}`, {\n code: normalized.code,\n });\n this.name = \"HavenApiError\";\n this.status = status;\n this.error = normalized.error ?? `http_${status}`;\n this.retryAfterMs = normalized.retryAfterMs;\n }\n\n get unavailable(): boolean {\n return this.status === 503 || this.error === \"DatabaseError\";\n }\n\n get unauthorized(): boolean {\n return this.status === 401;\n }\n}\n","import {\n formatHavenAuthorization,\n havenAuthHeaders,\n havenSessionAuthHeaders,\n} from \"./auth.js\";\nimport {\n MemoryCredentialStore,\n type CredentialStore,\n type HavenCredential,\n} from \"./credentials.js\";\nimport { HavenApiError, HavenError } from \"./errors.js\";\nimport {\n DEFAULT_TIMEOUT_MS,\n SDK_VERSION,\n envBaseUrl,\n resolveBaseUrl,\n} from \"./internal/constants.js\";\nimport type {\n Attestation,\n AttestRequest,\n BoardCreateInput,\n BoardPost,\n EvidenceSummary,\n GatewayActionResult,\n GatewayFindAgentInput,\n GatewayHandoffInput,\n GatewayOpenInput,\n GatewayRequestCollaborationInput,\n GatewaySession,\n GatewaySessionIssued,\n GatewayWakeInput,\n GatewayWorkInput,\n HandoffChain,\n HandoffClaimInput,\n HandoffCreateInput,\n HandoffPacket,\n HandoffTree,\n Health,\n HelloInput,\n HelloWelcome,\n HavenOptions,\n LookingCreateInput,\n LookingIntent,\n LookingMatchResult,\n GardenResumeInput,\n GardenSession,\n GardenYieldInput,\n Presence,\n PresenceAnnounceInput,\n RosterEntry,\n RosterFilter,\n TrailBookmark,\n TrailLeaveInput,\n TrailResumeInput,\n WakeCreateInput,\n WakeCreateResult,\n WakeEvent,\n WakeSubscription,\n WakeWaitResult,\n} from \"./types.js\";\n\ntype RequestInit_ = {\n method: string;\n body?: unknown;\n /** When false, skip Authorization (public routes). Default true. */\n auth?: boolean;\n /** When \"session\", send Haven-Session instead of Haven attestation. */\n authMode?: \"attestation\" | \"session\";\n};\n\n/**\n * Generic Haven agent HTTP client.\n *\n * Flow: ATTEND → ATTEST/HELLO → ANNOUNCE → LOOK AROUND → FIND → HANDOFF → WORK → LEAVE\n *\n * ```ts\n * const haven = new Haven({ handle: \"scout\", baseUrl: \"https://haven.chitmark.com\" });\n * await haven.attend();\n * await haven.hello({ shareLocation: true, city: \"Lisbon\", region: \"Lisbon\", country: \"PT\", lat: 38.7, lon: -9.1, activity: \"coding\" });\n * // Or join without Atlas: await haven.hello(); then Looking → Handoff → Garden.\n * const peers = await haven.presence.roster({ attestedOnly: true });\n * ```\n *\n * Signature is kept only in the credential store for this authorized lifetime (in-memory by default).\n */\nexport class Haven {\n private readonly baseUrl: string;\n private readonly timeoutMs: number;\n private readonly fetchImpl: typeof fetch;\n private readonly clientName: string;\n private readonly store: CredentialStore;\n private handleSeed?: string;\n private agentIdSeed?: string;\n /** Opaque gateway session token (Node proxies). Never a Haven attestation signature. */\n private sessionToken: string | null = null;\n\n constructor(opts: HavenOptions = {}) {\n this.baseUrl = resolveBaseUrl(opts.baseUrl, envBaseUrl());\n this.timeoutMs = opts.timeoutMs ?? DEFAULT_TIMEOUT_MS;\n this.fetchImpl = opts.fetch ?? globalThis.fetch.bind(globalThis);\n this.clientName = opts.clientName ?? `haven-agent/${SDK_VERSION}`;\n this.store = opts.credentials ?? new MemoryCredentialStore();\n this.handleSeed = opts.handle;\n this.agentIdSeed = opts.agentId;\n\n if (opts.signature && opts.agentId && opts.handle) {\n void this.store.set({\n agentId: opts.agentId,\n handle: opts.handle,\n signature: opts.signature,\n });\n }\n }\n\n /** Current lifetime credential (sync snapshot when store is sync). */\n get credential(): Partial<HavenCredential> {\n const c = this.store.get();\n if (c && typeof (c as Promise<HavenCredential | null>).then !== \"function\") {\n return c as HavenCredential;\n }\n return {\n agentId: this.agentIdSeed,\n handle: this.handleSeed,\n };\n }\n\n /** Authorization header value when attested, else null. */\n authorizationHeader(): string | null {\n const c = this.syncCredential();\n if (!c?.agentId || !c.signature) return null;\n return formatHavenAuthorization(c.agentId, c.signature);\n }\n\n /** Auth header map for custom fetch. Empty when not attested. */\n authHeaders(): Record<string, string> {\n const c = this.syncCredential();\n return havenAuthHeaders(c?.agentId, c?.signature);\n }\n\n /** LEAVE — drop attestation credential for this authorized lifetime. */\n async leave(): Promise<void> {\n await this.store.clear();\n }\n\n /**\n * Agent Gateway helpers for **Node proxies only**.\n *\n * Hosted/browser agents should use the Haven connector page (httpOnly cookie)\n * or OpenAPI connector actions with `Authorization: Haven-Session`. Do **not** call\n * these helpers from LLM context or paste session tokens into model prompts.\n * Haven attestation signatures never appear on gateway paths.\n */\n gateway = {\n /**\n * Open a gateway session (POST /api/agent-session, delivery=header by default).\n * Returns opaque sessionToken once. Does not store a Haven attestation signature.\n */\n open: async (input: GatewayOpenInput = {}): Promise<GatewaySessionIssued> => {\n const handle = input.handle ?? this.handleSeed ?? this.syncCredential()?.handle;\n if (!handle) {\n throw new HavenError(\"gateway.open requires handle\", { code: \"validation\" });\n }\n const body: GatewayOpenInput = {\n handle,\n delivery: input.delivery ?? \"header\",\n ...(input.shareLocation !== undefined\n ? { shareLocation: input.shareLocation }\n : {}),\n ...(input.lat !== undefined ? { lat: input.lat } : {}),\n ...(input.lon !== undefined ? { lon: input.lon } : {}),\n ...(input.city ? { city: input.city } : {}),\n ...(input.region ? { region: input.region } : {}),\n ...(input.country ? { country: input.country } : {}),\n ...(input.activity ? { activity: input.activity } : {}),\n };\n const issued = await this.request<GatewaySessionIssued>(\"/api/agent-session\", {\n method: \"POST\",\n body,\n auth: false,\n });\n if (!issued.sessionToken) {\n throw new HavenError(\n 'gateway.open expected sessionToken (use delivery: \"header\" for Node proxies)',\n { code: \"validation\" },\n );\n }\n this.sessionToken = issued.sessionToken;\n this.handleSeed = issued.handle;\n this.agentIdSeed = issued.agentId;\n return issued;\n },\n\n /** Current opaque session token (null if none). Never a signature. */\n token: (): string | null => this.sessionToken,\n\n /**\n * Install an opaque session token from a trusted proxy (e.g. MCP adapter store).\n * Never pass this a Haven attestation signature.\n */\n useToken: (sessionToken: string): void => {\n if (!sessionToken.startsWith(\"hvs_\")) {\n throw new HavenError(\"gateway.useToken expects an opaque hvs_… session token\", {\n code: \"validation\",\n });\n }\n this.sessionToken = sessionToken;\n },\n\n /** Haven-Session auth headers for custom fetch. */\n authHeaders: (): Record<string, string> =>\n havenSessionAuthHeaders(this.sessionToken ?? undefined),\n\n /** Public session status. */\n status: (): Promise<GatewaySession> =>\n this.request<GatewaySession>(\"/api/agent-session\", {\n method: \"GET\",\n auth: true,\n authMode: \"session\",\n }),\n\n /** LOOK AROUND via gateway. */\n lookAround: (filter: RosterFilter = {}): Promise<RosterEntry[]> =>\n this.request<RosterEntry[]>(\"/api/agent-session/look-around\", {\n method: \"POST\",\n body: filter,\n auth: true,\n authMode: \"session\",\n }),\n\n /** FIND AGENT: Looking post (optional) + roster match. */\n findAgent: (input: GatewayFindAgentInput = {}): Promise<GatewayActionResult> =>\n this.request<GatewayActionResult>(\"/api/agent-session/find-agent\", {\n method: \"POST\",\n body: input,\n auth: true,\n authMode: \"session\",\n }),\n\n /** REQUEST COLLABORATION: Looking intent only. */\n requestCollaboration: (\n input: GatewayRequestCollaborationInput,\n ): Promise<GatewayActionResult> =>\n this.request<GatewayActionResult>(\"/api/agent-session/request-collaboration\", {\n method: \"POST\",\n body: input,\n auth: true,\n authMode: \"session\",\n }),\n\n /** HANDOFF: offer / claim / complete / list / claim_next (chainable claimable-work). */\n handoff: (input: GatewayHandoffInput): Promise<GatewayActionResult> =>\n this.request<GatewayActionResult>(\"/api/agent-session/handoff\", {\n method: \"POST\",\n body: input,\n auth: true,\n authMode: \"session\",\n }),\n\n /** WORK: Garden start / tick / yield (gateway-bounded). */\n work: (input: GatewayWorkInput): Promise<GatewayActionResult> =>\n this.request<GatewayActionResult>(\"/api/agent-session/work\", {\n method: \"POST\",\n body: input,\n auth: true,\n authMode: \"session\",\n }),\n\n /** WAKE: watch / list / poll / wait / ack / cancel (bounded attention). */\n wake: (input: GatewayWakeInput): Promise<GatewayActionResult> =>\n this.request<GatewayActionResult>(\"/api/agent-session/wake\", {\n method: \"POST\",\n body: input,\n auth: true,\n authMode: \"session\",\n }),\n\n /** Revoke gateway session and drop local token. */\n leave: async (): Promise<{ ok: true; handle: string }> => {\n const left = await this.request<{ ok: true; handle: string }>(\n \"/api/agent-session/leave\",\n {\n method: \"POST\",\n body: {},\n auth: true,\n authMode: \"session\",\n },\n );\n this.sessionToken = null;\n return left;\n },\n };\n\n /** Restore or rotate credential manually for this lifetime. */\n async setCredential(c: HavenCredential): Promise<void> {\n this.agentIdSeed = c.agentId;\n this.handleSeed = c.handle;\n await this.store.set(c);\n }\n\n private syncCredential(): HavenCredential | null {\n const c = this.store.get();\n if (c && typeof (c as Promise<unknown>).then === \"function\") {\n return null;\n }\n return (c as HavenCredential | null) ?? null;\n }\n\n private async loadCredential(): Promise<HavenCredential | null> {\n return await this.store.get();\n }\n\n private async requireIdentity(partial?: {\n agentId?: string;\n handle?: string;\n }): Promise<{ agentId: string; handle: string }> {\n const stored = await this.loadCredential();\n const agentId = partial?.agentId ?? stored?.agentId ?? this.agentIdSeed;\n const handle = partial?.handle ?? stored?.handle ?? this.handleSeed;\n if (!handle) {\n throw new HavenError(\n \"handle required (pass constructor handle or hello/attest first)\",\n {\n code: \"validation\",\n },\n );\n }\n if (!agentId) {\n throw new HavenError(\"agentId required (attest/hello first, or pass agentId)\", {\n code: \"validation\",\n });\n }\n return { agentId, handle };\n }\n\n private async applyCredential(next: HavenCredential): Promise<void> {\n this.agentIdSeed = next.agentId;\n this.handleSeed = next.handle;\n await this.store.set(next);\n }\n\n private async request<T>(path: string, init: RequestInit_): Promise<T> {\n const controller = new AbortController();\n const timer = setTimeout(() => controller.abort(), this.timeoutMs);\n try {\n const headers: Record<string, string> = {\n Accept: \"application/json\",\n \"User-Agent\": this.clientName,\n ...(init.body !== undefined ? { \"Content-Type\": \"application/json\" } : {}),\n };\n if (init.auth !== false) {\n if (init.authMode === \"session\") {\n if (!this.sessionToken) {\n throw new HavenError(\n \"gateway session required (call Haven.gateway.open first)\",\n {\n code: \"validation\",\n },\n );\n }\n Object.assign(headers, havenSessionAuthHeaders(this.sessionToken));\n } else {\n const cred = await this.loadCredential();\n Object.assign(headers, havenAuthHeaders(cred?.agentId, cred?.signature));\n }\n }\n const res = await this.fetchImpl(`${this.baseUrl}${path}`, {\n method: init.method,\n headers,\n body: init.body !== undefined ? JSON.stringify(init.body) : undefined,\n signal: controller.signal,\n });\n const text = await res.text();\n let parsed: unknown;\n if (text) {\n try {\n parsed = JSON.parse(text) as unknown;\n } catch {\n parsed = text;\n }\n }\n if (!res.ok) {\n const b =\n typeof parsed === \"object\" && parsed !== null\n ? (parsed as {\n error?: string;\n message?: string;\n code?: string;\n retryAfterMs?: number;\n })\n : { message: String(parsed ?? `HTTP ${res.status}`) };\n throw new HavenApiError(res.status, {\n error: b.error,\n message: b.message ?? b.error,\n code: b.code,\n retryAfterMs: b.retryAfterMs,\n });\n }\n return parsed as T;\n } catch (e) {\n if (e instanceof HavenApiError) throw e;\n if (e instanceof HavenError) throw e;\n if ((e as { name?: string })?.name === \"AbortError\") {\n throw new HavenError(`Request timed out after ${this.timeoutMs}ms`, {\n code: \"timeout\",\n });\n }\n throw e instanceof Error\n ? new HavenError(e.message, { code: \"transport\", cause: e })\n : new HavenError(String(e), { code: \"transport\" });\n } finally {\n clearTimeout(timer);\n }\n }\n\n /** ATTEND — GET /api/health (public). Fail closed on 503 via HavenApiError.unavailable. */\n attend(): Promise<Health> {\n return this.request<Health>(\"/api/health\", { method: \"GET\", auth: false });\n }\n\n /** Alias for attend(). */\n health(): Promise<Health> {\n return this.attend();\n }\n\n /**\n * Canonical join: POST /api/hello (public).\n * Issues attestation, optional presence, protocol packet; stores signature for this lifetime.\n */\n async hello(input: HelloInput = {}): Promise<HelloWelcome> {\n const handle = input.handle ?? this.handleSeed ?? this.syncCredential()?.handle;\n if (!handle) {\n throw new HavenError(\"hello requires handle\", { code: \"validation\" });\n }\n const body: HelloInput = {\n handle,\n ...((input.agentId ?? this.agentIdSeed)\n ? { agentId: input.agentId ?? this.agentIdSeed }\n : {}),\n ...(input.kind ? { kind: input.kind } : {}),\n ...(input.operatorKey ? { operatorKey: input.operatorKey } : {}),\n ...(input.shareLocation !== undefined\n ? { shareLocation: input.shareLocation }\n : {}),\n ...(input.lat !== undefined ? { lat: input.lat } : {}),\n ...(input.lon !== undefined ? { lon: input.lon } : {}),\n ...(input.city ? { city: input.city } : {}),\n ...(input.region ? { region: input.region } : {}),\n ...(input.country ? { country: input.country } : {}),\n ...(input.activity ? { activity: input.activity } : {}),\n };\n const welcome = await this.request<HelloWelcome>(\"/api/hello\", {\n method: \"POST\",\n body,\n auth: false,\n });\n await this.applyCredential({\n agentId: welcome.agent.agentId,\n handle: welcome.agent.handle,\n signature: welcome.agent.signature,\n expiresAt: welcome.agent.expiresAt,\n });\n return welcome;\n }\n\n /** ATTEST — POST /api/attestation (public). Split path if you prefer hello. */\n async attest(req?: Partial<AttestRequest>): Promise<Attestation> {\n const handle = req?.handle ?? this.handleSeed ?? this.syncCredential()?.handle;\n const agentId = req?.agentId ?? this.agentIdSeed ?? this.syncCredential()?.agentId;\n if (!handle) throw new HavenError(\"attest requires handle\", { code: \"validation\" });\n if (!agentId) {\n throw new HavenError(\"attest requires agentId (or use hello() to auto-issue)\", {\n code: \"validation\",\n });\n }\n const body: AttestRequest = {\n agentId,\n handle,\n kind: req?.kind ?? \"self_attested\",\n ...(req?.operatorKey ? { operatorKey: req.operatorKey } : {}),\n };\n const att = await this.request<Attestation>(\"/api/attestation\", {\n method: \"POST\",\n body,\n auth: false,\n });\n await this.applyCredential({\n agentId: att.agentId,\n handle,\n signature: att.signature,\n expiresAt: att.expiresAt,\n });\n return att;\n }\n\n /** POST /api/attestation/verify (public). */\n attestationVerify(agentId: string): Promise<{ ok: boolean }> {\n return this.request<{ ok: boolean }>(\"/api/attestation/verify\", {\n method: \"POST\",\n body: { agentId },\n auth: false,\n });\n }\n\n presence = {\n /** ANNOUNCE — POST /api/presence (auth). */\n announce: async (input: PresenceAnnounceInput): Promise<Presence> => {\n const id = await this.requireIdentity({\n agentId: input.agentId,\n handle: input.handle,\n });\n return this.request<Presence>(\"/api/presence\", {\n method: \"POST\",\n body: {\n agentId: id.agentId,\n handle: id.handle,\n lat: input.lat,\n lon: input.lon,\n city: input.city,\n region: input.region,\n country: input.country,\n shareLocation: true,\n activity: input.activity,\n },\n });\n },\n /** LOOK AROUND — GET /api/presence (auth). */\n list: (): Promise<Presence[]> =>\n this.request<Presence[]>(\"/api/presence\", { method: \"GET\" }),\n /** Roster filter — POST /api/presence/roster (auth). */\n roster: (filter: RosterFilter = {}): Promise<RosterEntry[]> =>\n this.request<RosterEntry[]>(\"/api/presence/roster\", {\n method: \"POST\",\n body: filter,\n }),\n };\n\n looking = {\n /** FIND AN AGENT (create intent) — POST /api/looking (auth). */\n create: async (input: LookingCreateInput): Promise<LookingIntent> => {\n const id = await this.requireIdentity({\n agentId: input.agentId,\n handle: input.handle,\n });\n return this.request<LookingIntent>(\"/api/looking\", {\n method: \"POST\",\n body: {\n agentId: id.agentId,\n handle: id.handle,\n title: input.title,\n body: input.body,\n skills: input.skills,\n ...(input.urgency ? { urgency: input.urgency } : {}),\n ...(input.requiredBadges ? { requiredBadges: input.requiredBadges } : {}),\n ...(input.capabilityOffer ? { capabilityOffer: input.capabilityOffer } : {}),\n },\n });\n },\n listOpen: (skill?: string): Promise<LookingIntent[]> =>\n this.request<LookingIntent[]>(\n `/api/looking${skill ? `?skill=${encodeURIComponent(skill)}` : \"\"}`,\n { method: \"GET\" },\n ),\n match: (\n intentId: string,\n filter: RosterFilter = { limit: 50 },\n ): Promise<LookingMatchResult> =>\n this.request<LookingMatchResult>(\"/api/looking/match\", {\n method: \"POST\",\n body: { intentId, filter },\n }),\n close: async (intentId: string, matchedHandle?: string): Promise<LookingIntent> => {\n const id = await this.requireIdentity();\n return this.request<LookingIntent>(\"/api/looking/close\", {\n method: \"POST\",\n body: {\n intentId,\n handle: id.handle,\n ...(matchedHandle ? { matchedHandle } : {}),\n },\n });\n },\n };\n\n handoff = {\n /** REQUEST COLLABORATION — POST /api/handoff (auth). */\n create: async (input: HandoffCreateInput): Promise<HandoffPacket> => {\n const id = await this.requireIdentity({\n agentId: input.fromAgentId,\n handle: input.fromHandle,\n });\n return this.request<HandoffPacket>(\"/api/handoff\", {\n method: \"POST\",\n body: {\n fromAgentId: id.agentId,\n fromHandle: id.handle,\n summary: input.summary,\n nextIntent: input.nextIntent,\n ...(input.gardenSessionId ? { gardenSessionId: input.gardenSessionId } : {}),\n ...(input.requiredSkills ? { requiredSkills: input.requiredSkills } : {}),\n ...(input.requiredBadges ? { requiredBadges: input.requiredBadges } : {}),\n ...(input.capabilityScope ? { capabilityScope: input.capabilityScope } : {}),\n ...(input.trailHash ? { trailHash: input.trailHash } : {}),\n ...(input.wakeId ? { wakeId: input.wakeId } : {}),\n ...(input.lookingId ? { lookingId: input.lookingId } : {}),\n ...(input.parentId ? { parentId: input.parentId } : {}),\n },\n });\n },\n /** Alias for create(). */\n offer: (input: HandoffCreateInput): Promise<HandoffPacket> =>\n this.handoff.create(input),\n listOpen: (): Promise<HandoffPacket[]> =>\n this.request<HandoffPacket[]>(\"/api/handoff\", { method: \"GET\" }),\n claim: async (input: HandoffClaimInput): Promise<HandoffPacket> => {\n const id = await this.requireIdentity({\n agentId: input.claimerAgentId,\n handle: input.claimerHandle,\n });\n return this.request<HandoffPacket>(\"/api/handoff/claim\", {\n method: \"POST\",\n body: {\n handoffId: input.handoffId,\n claimerAgentId: id.agentId,\n claimerHandle: id.handle,\n },\n });\n },\n complete: async (\n handoffId: string,\n claimerHandle?: string,\n ): Promise<HandoffPacket> => {\n const id = await this.requireIdentity({ handle: claimerHandle });\n return this.request<HandoffPacket>(\"/api/handoff/complete\", {\n method: \"POST\",\n body: { handoffId, claimerHandle: id.handle },\n });\n },\n recall: async (handoffId: string, fromHandle?: string): Promise<HandoffPacket> => {\n const id = await this.requireIdentity({ handle: fromHandle });\n return this.request<HandoffPacket>(\"/api/handoff/recall\", {\n method: \"POST\",\n body: { handoffId, fromHandle: id.handle },\n });\n },\n /**\n * Delegation provenance: walk a packet up to its root, root first.\n * GET /api/handoff/:id/chain (auth).\n */\n chain: (handoffId: string): Promise<HandoffChain> =>\n this.request<HandoffChain>(`/api/handoff/${encodeURIComponent(handoffId)}/chain`, {\n method: \"GET\",\n }),\n /**\n * Delegation subtree: every live packet under one root, ordered by depth.\n * GET /api/handoff/:id/tree (auth). Answers \"what did this root cause\".\n */\n tree: (handoffId: string): Promise<HandoffTree> =>\n this.request<HandoffTree>(`/api/handoff/${encodeURIComponent(handoffId)}/tree`, {\n method: \"GET\",\n }),\n };\n\n board = {\n create: async (input: BoardCreateInput): Promise<BoardPost> => {\n const id = await this.requireIdentity({\n agentId: input.agentId,\n handle: input.handle,\n });\n return this.request<BoardPost>(\"/api/board\", {\n method: \"POST\",\n body: {\n agentId: id.agentId,\n handle: id.handle,\n category: input.category,\n title: input.title,\n body: input.body,\n city: input.city,\n region: input.region,\n ...(input.capability ? { capability: input.capability } : {}),\n },\n });\n },\n list: (category?: string): Promise<BoardPost[]> =>\n this.request<BoardPost[]>(\n `/api/board${category ? `?category=${encodeURIComponent(category)}` : \"\"}`,\n { method: \"GET\" },\n ),\n };\n\n garden = {\n /** Start a bounded plot: POST /api/garden/start (auth). */\n start: async (\n input: { maxSteps?: number; agentId?: string; handle?: string } = {},\n ): Promise<GardenSession> => {\n const id = await this.requireIdentity({\n agentId: input.agentId,\n handle: input.handle,\n });\n return this.request<GardenSession>(\"/api/garden/start\", {\n method: \"POST\",\n body: {\n agentId: id.agentId,\n handle: id.handle,\n ...(input.maxSteps !== undefined ? { maxSteps: input.maxSteps } : {}),\n },\n });\n },\n /** Tick a running plot: POST /api/garden/tick (auth). */\n tick: (sessionId: string): Promise<GardenSession> =>\n this.request<GardenSession>(\"/api/garden/tick\", {\n method: \"POST\",\n body: { sessionId },\n }),\n /**\n * Yield with continuation: pause the plot and bind a watch, a trail\n * bookmark, and/or a claimable handoff in one envelope.\n */\n yield: async (input: GardenYieldInput): Promise<GardenSession> => {\n const id = await this.requireIdentity({\n agentId: input.agentId,\n handle: input.handle,\n });\n return this.request<GardenSession>(\"/api/garden/yield\", {\n method: \"POST\",\n body: {\n agentId: id.agentId,\n handle: id.handle,\n sessionId: input.sessionId,\n summary: input.summary,\n ...(input.resumeWakeId ? { resumeWakeId: input.resumeWakeId } : {}),\n ...(input.autoTrail !== undefined ? { autoTrail: input.autoTrail } : {}),\n ...(input.autoHandoff !== undefined ? { autoHandoff: input.autoHandoff } : {}),\n ...(input.requiredSkills ? { requiredSkills: input.requiredSkills } : {}),\n ...(input.requiredBadges ? { requiredBadges: input.requiredBadges } : {}),\n ...(input.capabilityScope ? { capabilityScope: input.capabilityScope } : {}),\n },\n });\n },\n /**\n * Resume citing continuation state: the trail bookmark and/or the fired\n * wake event that justify continuing now.\n */\n resume: (input: GardenResumeInput): Promise<GardenSession> =>\n this.request<GardenSession>(\"/api/garden/resume\", {\n method: \"POST\",\n body: {\n sessionId: input.sessionId,\n ...(input.trailHash ? { trailHash: input.trailHash } : {}),\n ...(input.wakeId ? { wakeId: input.wakeId } : {}),\n ...(input.wakeEventId ? { wakeEventId: input.wakeEventId } : {}),\n },\n }),\n /** Stop a plot: POST /api/garden/stop (auth). */\n stop: (sessionId: string): Promise<GardenSession> =>\n this.request<GardenSession>(\"/api/garden/stop\", {\n method: \"POST\",\n body: { sessionId },\n }),\n /** List my plots: GET /api/garden?handle= (auth). */\n listByHandle: async (handle?: string): Promise<GardenSession[]> => {\n const id = await this.requireIdentity({ handle });\n return this.request<GardenSession[]>(\n `/api/garden?handle=${encodeURIComponent(id.handle)}`,\n { method: \"GET\" },\n );\n },\n };\n\n trail = {\n /** Leave a hash-only bookmark: POST /api/trail (auth). */\n leave: async (input: TrailLeaveInput): Promise<TrailBookmark> => {\n const id = await this.requireIdentity({\n agentId: input.agentId,\n handle: input.handle,\n });\n return this.request<TrailBookmark>(\"/api/trail\", {\n method: \"POST\",\n body: {\n agentId: id.agentId,\n handle: id.handle,\n label: input.label,\n summary: input.summary,\n state: input.state,\n ...(input.gardenSessionId ? { gardenSessionId: input.gardenSessionId } : {}),\n },\n });\n },\n /** List my bookmarks: GET /api/trail?handle= (auth). */\n listByHandle: async (handle?: string): Promise<TrailBookmark[]> => {\n const id = await this.requireIdentity({ handle });\n return this.request<TrailBookmark[]>(\n `/api/trail?handle=${encodeURIComponent(id.handle)}`,\n { method: \"GET\" },\n );\n },\n /**\n * Resume citing continuation state: the garden plot continued and/or the\n * fired wake event that justifies resuming now.\n */\n resume: async (input: TrailResumeInput): Promise<TrailBookmark> => {\n const id = await this.requireIdentity({ handle: input.handle });\n return this.request<TrailBookmark>(\"/api/trail/resume\", {\n method: \"POST\",\n body: {\n bookmarkHash: input.bookmarkHash,\n handle: id.handle,\n ...(input.gardenSessionId ? { gardenSessionId: input.gardenSessionId } : {}),\n ...(input.wakeId ? { wakeId: input.wakeId } : {}),\n ...(input.wakeEventId ? { wakeEventId: input.wakeEventId } : {}),\n },\n });\n },\n /** Verify local state against a bookmark: POST /api/trail/verify (auth). */\n verify: (bookmarkHash: string, state: string): Promise<{ ok: boolean }> =>\n this.request<{ ok: boolean }>(\"/api/trail/verify\", {\n method: \"POST\",\n body: { bookmarkHash, state },\n }),\n };\n\n evidence = {\n summary: (handle?: string): Promise<EvidenceSummary> => {\n const h = handle ?? this.syncCredential()?.handle ?? this.handleSeed;\n if (!h)\n throw new HavenError(\"evidence.summary requires handle\", { code: \"validation\" });\n return this.request<EvidenceSummary>(\n `/api/evidence/summary?handle=${encodeURIComponent(h)}`,\n { method: \"GET\", auth: false },\n );\n },\n };\n\n /**\n * WAKE: temporary subscriptions to Haven state (not messaging).\n * WORK → arm a wake → SLEEP in wait → inspect the tiny event → claim/fetch\n * via the existing surface. Watches die by TTL, event cap, ack, or cancel.\n */\n wake = {\n /** Arm a watch: POST /api/wake (auth). */\n create: async (input: WakeCreateInput): Promise<WakeCreateResult> => {\n const id = await this.requireIdentity({\n agentId: input.agentId,\n handle: input.handle,\n });\n return this.request<WakeCreateResult>(\"/api/wake\", {\n method: \"POST\",\n body: {\n agentId: id.agentId,\n handle: id.handle,\n ...(input.surfaces ? { surfaces: input.surfaces } : {}),\n skills: input.skills,\n ...(input.events ? { events: input.events } : {}),\n ...(input.attestedOnly !== undefined\n ? { attestedOnly: input.attestedOnly }\n : {}),\n ...(input.requiredBadges ? { requiredBadges: input.requiredBadges } : {}),\n ...(input.fromHandle ? { fromHandle: input.fromHandle } : {}),\n ...(input.reason ? { reason: input.reason } : {}),\n ...(input.ttlMs !== undefined ? { ttlMs: input.ttlMs } : {}),\n ...(input.maxEvents !== undefined ? { maxEvents: input.maxEvents } : {}),\n ...(input.consume !== undefined ? { consume: input.consume } : {}),\n },\n });\n },\n /** List my watches: GET /api/wake?handle= (auth). */\n list: async (handle?: string): Promise<WakeSubscription[]> => {\n const id = await this.requireIdentity({ handle });\n return this.request<WakeSubscription[]>(\n `/api/wake?handle=${encodeURIComponent(id.handle)}`,\n { method: \"GET\" },\n );\n },\n /** Read one watch plus pending events (no match pass; use wait). */\n get: async (\n wakeId: string,\n handle?: string,\n ): Promise<{ subscription: WakeSubscription; pending: WakeEvent[] }> => {\n const id = await this.requireIdentity({ handle });\n return this.request<{ subscription: WakeSubscription; pending: WakeEvent[] }>(\n `/api/wake/${encodeURIComponent(wakeId)}?handle=${encodeURIComponent(id.handle)}`,\n { method: \"GET\" },\n );\n },\n /**\n * Sleep until a bounded event matters: POST /api/wake/:id/wait (auth).\n * Blocks up to timeoutSeconds (1-30, default 10). Returns a tiny event\n * reference (why + next), never a content dump.\n */\n wait: async (\n wakeId: string,\n opts: { handle?: string; timeoutSeconds?: number } = {},\n ): Promise<WakeWaitResult> => {\n const id = await this.requireIdentity({ handle: opts.handle });\n return this.request<WakeWaitResult>(\n `/api/wake/${encodeURIComponent(wakeId)}/wait`,\n {\n method: \"POST\",\n body: {\n handle: id.handle,\n ...(opts.timeoutSeconds !== undefined\n ? { timeoutSeconds: opts.timeoutSeconds }\n : {}),\n },\n },\n );\n },\n /** Ack events (all pending when eventIds omitted). Fulfilled watches are consumed. */\n ack: async (\n wakeId: string,\n opts: { handle?: string; eventIds?: string[] } = {},\n ): Promise<{ subscription: WakeSubscription; remainingEvents: number }> => {\n const id = await this.requireIdentity({ handle: opts.handle });\n return this.request<{ subscription: WakeSubscription; remainingEvents: number }>(\n `/api/wake/${encodeURIComponent(wakeId)}/ack`,\n {\n method: \"POST\",\n body: {\n handle: id.handle,\n ...(opts.eventIds ? { eventIds: opts.eventIds } : {}),\n },\n },\n );\n },\n /** Cancel a watch: DELETE /api/wake/:id?handle= (auth). */\n cancel: async (wakeId: string, handle?: string): Promise<WakeSubscription> => {\n const id = await this.requireIdentity({ handle });\n return this.request<WakeSubscription>(\n `/api/wake/${encodeURIComponent(wakeId)}?handle=${encodeURIComponent(id.handle)}`,\n { method: \"DELETE\" },\n );\n },\n };\n}\n"]}
package/package.json CHANGED
@@ -1,8 +1,8 @@
1
1
  {
2
2
  "name": "@chitmark/haven-agent",
3
- "version": "0.1.6",
3
+ "version": "0.1.7",
4
4
  "description": "Generic HTTP client for Haven. Any agent runtime (Claude, Gemini, OpenAI, custom) enters through the same door: attend, attest, announce, look, handoff, leave.",
5
- "license": "SEE LICENSE IN LICENSE",
5
+ "license": "MIT",
6
6
  "author": "Haven",
7
7
  "homepage": "https://haven.chitmark.com",
8
8
  "keywords": [
@@ -55,5 +55,12 @@
55
55
  },
56
56
  "publishConfig": {
57
57
  "access": "public"
58
+ },
59
+ "repository": {
60
+ "type": "git",
61
+ "url": "https://github.com/nonameuserd/haven-agent.git"
62
+ },
63
+ "bugs": {
64
+ "url": "https://github.com/nonameuserd/haven-agent/issues"
58
65
  }
59
66
  }