@parlor/agent-host 0.1.0 → 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"file":"policy.js","sourceRoot":"","sources":["../src/policy.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAsB1C,MAAM,CAAC,MAAM,cAAc,GAAiB;IAC1C,cAAc,EAAE,OAAO;IACvB,OAAO,EAAE,UAAU;IACnB,cAAc,EAAE,EAAE,WAAW,EAAE,EAAE,EAAE;CACpC,CAAC;AAEF,MAAM,CAAC,MAAM,UAAU,GAAiB;IACtC,cAAc,EAAE,KAAK;IACrB,OAAO,EAAE,KAAK;IACd,cAAc,EAAE,KAAK;CACtB,CAAC;AAEF,4FAA4F;AAC5F,MAAM,UAAU,aAAa,CAC3B,MAAoB,EACpB,MAAqB;IAErB,MAAM,OAAO,GAAG,MAAM,CAAC,cAAc,CAAC;IACtC,IAAI,OAAO,KAAK,SAAS,IAAI,OAAO,KAAK,KAAK,IAAI,CAAC,MAAM,CAAC,WAAW;QAAE,OAAO,SAAS,CAAC;IACxF,OAAO,CAAC,MAAM,CAAC,UAAU,IAAI,MAAM,CAAC,UAAU,CAAC,GAAG,OAAO,CAAC,WAAW,GAAG,SAAS,CAAC;AACpF,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,SAAS,CAAC,GAAa,EAAE,SAAiB;IACxD,OAAO,GAAG,CAAC,IAAI,KAAK,YAAY,IAAI,GAAG,CAAC,GAAG,EAAE,MAAM,KAAK,SAAS,CAAC;AACpE,CAAC;AAED,8FAA8F;AAC9F,MAAM,UAAU,WAAW,CACzB,MAAoB,EACpB,GAAa;IAEb,IAAI,GAAG,CAAC,IAAI,KAAK,UAAU,IAAI,MAAM,CAAC,OAAO,KAAK,KAAK;QAAE,OAAO,SAAS,CAAC;IAC1E,OAAO,MAAM,CAAC,OAAO,CAAC;AACxB,CAAC;AAID,MAAM,MAAM,GAAG,CAAmB,OAAqB,EAAE,KAAc,EAAE,IAAO,EAAK,EAAE,CACrF,OAAO,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,SAAS,KAAK,KAAK,CAAC,IAAI,IAAI,CAAC;AAE3D,gGAAgG;AAChG,MAAM,CAAC,KAAK,UAAU,UAAU,CAC9B,IAAY,EACZ,IAAkB;IAElB,IAAI,OAAgB,CAAC;IACrB,IAAI,CAAC;QACH,OAAO,GAAG,MAAM,QAAQ,CAAU,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC;IACjD,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;IACD,OAAO;QACL,cAAc,EAAE,MAAM,CAAC,CAAC,OAAO,EAAE,KAAK,CAAC,EAAE,OAAO,CAAC,cAAc,EAAE,IAAI,CAAC,cAAc,CAAC;QACrF,OAAO,EAAE,MAAM,CAAC,CAAC,UAAU,EAAE,UAAU,EAAE,KAAK,CAAC,EAAE,OAAO,CAAC,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC;QAC/E,cAAc,EAAE,gBAAgB,CAAC,OAAO,CAAC,cAAc,EAAE,IAAI,CAAC,cAAc,CAAC;KAC9E,CAAC;AACJ,CAAC;AAED,SAAS,gBAAgB,CACvB,KAAc,EACd,IAAoC;IAEpC,IAAI,KAAK,KAAK,KAAK;QAAE,OAAO,KAAK,CAAC;IAClC,MAAM,KAAK,GAAI,KAAmD,EAAE,WAAW,CAAC;IAChF,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,KAAK,GAAG,CAAC;QACrE,CAAC,CAAC,EAAE,WAAW,EAAE,KAAK,EAAE;QACxB,CAAC,CAAC,IAAI,CAAC;AACX,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,YAAY,CAChC,IAAY,EACZ,IAAkB,EAClB,MAA6B;IAE7B,MAAM,QAAQ,CAAU,IAAI,CAAC,CAAC,MAAM,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC,CAAC;IAClF,OAAO,UAAU,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;AAChC,CAAC"}
1
+ {"version":3,"file":"policy.js","sourceRoot":"","sources":["../src/policy.ts"],"names":[],"mappings":"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","sourcesContent":["import type { AgentAsk } from \"./acp.js\";\nimport { jsonFile } from \"./json-file.js\";\nimport type { TrustedDevice } from \"./trust.js\";\n\n/**\n * What this computer enforces on remote turns, whatever the app or its backend says. Set\n * only on this computer (`parlor-host config` or the Mac app's settings).\n */\nexport interface RemotePolicy {\n /** `local`: an untrusted device is approved in a dialog here before its first prompt runs. */\n readonly deviceApproval: \"local\" | \"off\";\n /**\n * Where an answer to the agent's own permission prompts counts: on any trusted device\n * with presence, only on this computer, or (`parlor dev` only) anywhere.\n */\n readonly answers: \"presence\" | \"computer\" | \"off\";\n /**\n * How long a linked device with Face ID or Touch ID sends before its next prompt needs them\n * again. Absent: never.\n */\n readonly promptPresence?: { readonly maxAgeHours: number } | \"off\" | undefined;\n}\n\nexport const DEFAULT_POLICY: RemotePolicy = {\n deviceApproval: \"local\",\n answers: \"presence\",\n promptPresence: { maxAgeHours: 18 },\n};\n\nexport const DEV_POLICY: RemotePolicy = {\n deviceApproval: \"off\",\n answers: \"off\",\n promptPresence: \"off\",\n};\n\n/** When `device`'s prompts need Face ID or Touch ID again; undefined when they never do. */\nexport function presenceDueAt(\n policy: RemotePolicy,\n device: TrustedDevice,\n): number | undefined {\n const setting = policy.promptPresence;\n if (setting === undefined || setting === \"off\" || !device.presenceKey) return undefined;\n return (device.presenceAt ?? device.approvedAt) + setting.maxAgeHours * 3_600_000;\n}\n\n/**\n * The app's own tools are allowed once without asking: the server already enforces the\n * app's `confirm: true`, and asking twice only teaches users to click through.\n */\nexport function isAppTool(ask: AgentAsk, appServer: string): boolean {\n return ask.kind === \"permission\" && ask.mcp?.server === appServer;\n}\n\n/** The ask item's `approval`; `undefined` lets any trusted device answer without presence. */\nexport function approvalFor(\n policy: RemotePolicy,\n ask: AgentAsk,\n): \"presence\" | \"computer\" | undefined {\n if (ask.kind === \"question\" || policy.answers === \"off\") return undefined;\n return policy.answers;\n}\n\ntype Overlay = { readonly [K in keyof RemotePolicy]?: unknown };\n\nconst choose = <T extends string>(allowed: readonly T[], value: unknown, base: T): T =>\n allowed.find((candidate) => candidate === value) ?? base;\n\n/** `base` with the settings `parlor-host config` wrote to `file`; read afresh on every call. */\nexport async function loadPolicy(\n file: string,\n base: RemotePolicy,\n): Promise<RemotePolicy> {\n let overlay: Overlay;\n try {\n overlay = await jsonFile<Overlay>(file).read();\n } catch {\n return base;\n }\n return {\n deviceApproval: choose([\"local\", \"off\"], overlay.deviceApproval, base.deviceApproval),\n answers: choose([\"presence\", \"computer\", \"off\"], overlay.answers, base.answers),\n promptPresence: promptPresenceOf(overlay.promptPresence, base.promptPresence),\n };\n}\n\nfunction promptPresenceOf(\n value: unknown,\n base: RemotePolicy[\"promptPresence\"],\n): RemotePolicy[\"promptPresence\"] {\n if (value === \"off\") return \"off\";\n const hours = (value as { readonly maxAgeHours?: unknown } | null)?.maxAgeHours;\n return typeof hours === \"number\" && Number.isFinite(hours) && hours > 0\n ? { maxAgeHours: hours }\n : base;\n}\n\nexport async function changePolicy(\n file: string,\n base: RemotePolicy,\n change: Partial<RemotePolicy>,\n): Promise<RemotePolicy> {\n await jsonFile<Overlay>(file).change((overlay) => Object.assign(overlay, change));\n return loadPolicy(file, base);\n}\n"]}
package/dist/pool.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"pool.js","sourceRoot":"","sources":["../src/pool.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"pool.js","sourceRoot":"","sources":["../src/pool.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AA4C1C,MAAM,KAAK,GAAG,CAAC,GAAG,KAAwB,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;AAEpE,MAAM,YAAY,GAAG,CAAC,KAAkB,EAAE,QAAgB,EAAE,OAAe,EAAE,EAAE,CAC7E,KAAK,CAAC,KAAK,CAAC,SAAS,EAAE,KAAK,CAAC,OAAO,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAC;AAO3D;;;GAGG;AACH,MAAM,UAAU,iBAAiB,CAAC,SAAiB;IACjD,MAAM,SAAS,GAAG,IAAI,GAAG,EAA2B,CAAC;IACrD,MAAM,SAAS,GAAG,IAAI,GAAG,EAAqB,CAAC;IAC/C,MAAM,MAAM,GAAG,IAAI,OAAO,EAAwB,CAAC;IACnD,MAAM,QAAQ,GAAG,IAAI,GAAG,EAGrB,CAAC;IACJ,MAAM,UAAU,GAAG,QAAQ,CAAyB,SAAS,CAAC,CAAC;IAE/D,MAAM,OAAO,GAAG,CAAC,KAAa,EAAE,EAAE;QAChC,SAAS,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QACxB,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,QAAQ,EAAE,CAAC;YACpC,IAAI,KAAK,CAAC,KAAK,KAAK,KAAK;gBAAE,SAAS;YACpC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC;YAC3B,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QACvB,CAAC;IACH,CAAC,CAAC;IAEF,MAAM,KAAK,GAAG,CAAC,KAAa,EAAE,UAA2B,EAAmB,EAAE;QAC5E,MAAM,OAAO,GAAoB;YAC/B,YAAY,EAAE,UAAU,CAAC,YAAY;YACrC,MAAM,EAAE,UAAU,CAAC,MAAM;YACzB,IAAI,EAAE,GAAG,EAAE,CAAC,UAAU,CAAC,IAAI,EAAE;YAC7B,WAAW,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE;gBAC3B,MAAM,OAAO,GAAG,MAAM,UAAU,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;gBACpD,MAAM,CAAC,GAAG,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;gBAC3B,OAAO,OAAO,CAAC;YACjB,CAAC;SACF,CAAC;QACF,SAAS,CAAC,GAAG,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;QAC9B,KAAK,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE;YAC/B,IAAI,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,OAAO;gBAAE,OAAO,CAAC,KAAK,CAAC,CAAC;QACvD,CAAC,CAAC,CAAC;QACH,OAAO,OAAO,CAAC;IACjB,CAAC,CAAC;IAEF,MAAM,OAAO,GAAG,CAAC,SAAiB,EAAE,OAA2B,EAAE,EAAE,CAAC,CAAC,KAAa,EAAE,EAAE,CACpF,OAAO,KAAK,SAAS;QACnB,CAAC,CAAC,KAAK,CAAC,UAAU,CAAC,KAAK,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC;QACxC,CAAC,CAAC,KAAK,KAAK,KAAK,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;IAE1C,OAAO;QACL,OAAO,EAAE,CAAC,SAAS,EAAE,OAAO,EAAE,EAAE,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;QACzE,MAAM,CAAC,SAAS,EAAE,OAAO,EAAE,KAAK;YAC9B,MAAM,KAAK,GAAG,KAAK,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;YACxC,MAAM,OAAO,GAAG,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;YACrC,IAAI,OAAO;gBAAE,OAAO,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;YAC7C,MAAM,OAAO,GAAG,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;YACrC,IAAI,OAAO;gBAAE,OAAO,OAAO,CAAC,UAAU,CAAC;YACvC,MAAM,UAAU,GAAG,IAAI,eAAe,EAAE,CAAC;YACzC,MAAM,UAAU,GAAG,CAAC,KAAK,IAAI,EAAE;gBAC7B,IAAI,CAAC;oBACH,MAAM,OAAO,GAAG,MAAM,KAAK,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;oBAC/C,IAAI,UAAU,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;wBAC9B,MAAM,OAAO,CAAC,IAAI,EAAE,CAAC;wBACrB,MAAM,IAAI,KAAK,CACb,gEAAgE,CACjE,CAAC;oBACJ,CAAC;oBACD,OAAO,KAAK,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;gBAC/B,CAAC;wBAAS,CAAC;oBACT,IAAI,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,UAAU,KAAK,UAAU;wBAAE,SAAS,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;gBAC/E,CAAC;YACH,CAAC,CAAC,EAAE,CAAC;YACL,SAAS,CAAC,GAAG,CAAC,KAAK,EAAE,EAAE,UAAU,EAAE,UAAU,EAAE,CAAC,CAAC;YACjD,OAAO,UAAU,CAAC;QACpB,CAAC;QACD,OAAO,EAAE,CAAC,KAAK,EAAE,QAAQ,EAAE,OAAO,EAAE,EAAE,CACpC,QAAQ,CAAC,GAAG,CAAC,YAAY,CAAC,KAAK,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAC,EAAE,IAAI;QAC5D,QAAQ,CAAC,KAAK,EAAE,QAAQ,EAAE,OAAO,EAAE,IAAI;YACrC,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;YAC9C,IAAI,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,KAAK,IAAI,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,SAAS,EAAE,CAAC;gBAC7E,MAAM,IAAI,KAAK,CAAC,2DAA2D,CAAC,CAAC;YAC/E,CAAC;YACD,MAAM,GAAG,GAAG,YAAY,CAAC,KAAK,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAC;YACnD,QAAQ,CAAC,GAAG,CAAC,GAAG,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;YACnC,KAAK,UAAU;iBACZ,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;iBAClD,KAAK,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC;QAC5B,CAAC;QACD,SAAS,EAAE,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,OAAO,EAAE,EAAE;YAC5C,MAAM,GAAG,GAAG,MAAM,UAAU,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,CAA2B,CAAC,CAAC;YAChF,OAAO,GAAG,CAAC,YAAY,CAAC,KAAK,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAC,CAAC;QACrD,CAAC;QACD,KAAK,CAAC,IAAI,CAAC,SAAS,EAAE,OAAO;YAC3B,MAAM,KAAK,GAAG,OAAO,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;YAC1C,KAAK,MAAM,CAAC,KAAK,EAAE,OAAO,CAAC,IAAI,SAAS,EAAE,CAAC;gBACzC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC;oBAAE,SAAS;gBAC5B,SAAS,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;gBACxB,OAAO,CAAC,UAAU,CAAC,KAAK,EAAE,CAAC;YAC7B,CAAC;YACD,MAAM,OAAO,GAAG,CAAC,GAAG,SAAS,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC;YACjE,KAAK,MAAM,CAAC,KAAK,CAAC,IAAI,OAAO;gBAAE,OAAO,CAAC,KAAK,CAAC,CAAC;YAC9C,MAAM,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,UAAU,CAAC,EAAE,EAAE,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;QACxE,CAAC;QACD,KAAK,CAAC,MAAM,CAAC,KAAK;YAChB,MAAM,MAAM,GAAG,KAAK,CAAC,KAAK,CAAC,SAAS,EAAE,KAAK,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;YACzD,MAAM,UAAU,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE;gBAC9B,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;oBACnC,IAAI,GAAG,CAAC,UAAU,CAAC,MAAM,CAAC;wBAAE,OAAO,GAAG,CAAC,GAAG,CAAC,CAAC;gBAC9C,CAAC;YACH,CAAC,CAAC,CAAC;QACL,CAAC;KACF,CAAC;AACJ,CAAC","sourcesContent":["import type { AgentConnection, AgentSession } from \"./acp.js\";\nimport type { AppGrant } from \"./grants.js\";\nimport { jsonFile } from \"./json-file.js\";\nimport type { ProxySession } from \"./mcp-proxy.js\";\n\nexport interface LiveSession {\n readonly session: AgentSession;\n readonly proxy: ProxySession;\n}\n\nexport type PooledGrant = Pick<AppGrant, \"appOrigin\" | \"grantId\">;\n\n/**\n * Processes per (app, agent), so two apps never share an agent process or its MCP\n * servers; sessions per (grant, thread, agent), so a thread keeps its context across\n * turns and never carries it to another account.\n */\nexport interface SessionPool {\n process(appOrigin: string, agentId: string): AgentConnection | undefined;\n /**\n * The running process, or the one `start` launches for every turn that asks meanwhile.\n * A `drop` during the launch aborts `signal` and kills whatever `start` returns.\n */\n launch(\n appOrigin: string,\n agentId: string,\n start: (signal: AbortSignal) => Promise<AgentConnection>,\n ): Promise<AgentConnection>;\n session(grant: PooledGrant, threadId: string, agentId: string): LiveSession | undefined;\n remember(\n grant: PooledGrant,\n threadId: string,\n agentId: string,\n session: LiveSession,\n ): void;\n /** The last session id, from `sessions.json`, for `session/resume` after a restart. */\n resumable(\n grant: PooledGrant,\n threadId: string,\n agentId: string,\n ): Promise<string | undefined>;\n drop(appOrigin: string, agentId?: string): Promise<void>;\n /** Erases the grant's remembered session ids, once the grant is gone. */\n forget(grant: PooledGrant): Promise<void>;\n}\n\nconst keyOf = (...parts: readonly string[]) => parts.join(\"\\u0000\");\n\nconst sessionKeyOf = (grant: PooledGrant, threadId: string, agentId: string) =>\n keyOf(grant.appOrigin, grant.grantId, threadId, agentId);\n\ninterface Launching {\n readonly controller: AbortController;\n readonly connection: Promise<AgentConnection>;\n}\n\n/**\n * Sessions live inside their process: `launch()` hands out the connection with its\n * sessions tracked, so dropping a process forgets every session it held.\n */\nexport function createSessionPool(stateFile: string): SessionPool {\n const processes = new Map<string, AgentConnection>();\n const launching = new Map<string, Launching>();\n const owners = new WeakMap<AgentSession, string>();\n const sessions = new Map<\n string,\n { readonly live: LiveSession; readonly owner: string }\n >();\n const remembered = jsonFile<Record<string, string>>(stateFile);\n\n const discard = (owner: string) => {\n processes.delete(owner);\n for (const [key, entry] of sessions) {\n if (entry.owner !== owner) continue;\n entry.live.proxy.dispose();\n sessions.delete(key);\n }\n };\n\n const adopt = (owner: string, connection: AgentConnection): AgentConnection => {\n const tracked: AgentConnection = {\n capabilities: connection.capabilities,\n exited: connection.exited,\n kill: () => connection.kill(),\n openSession: async (input) => {\n const session = await connection.openSession(input);\n owners.set(session, owner);\n return session;\n },\n };\n processes.set(owner, tracked);\n void connection.exited.then(() => {\n if (processes.get(owner) === tracked) discard(owner);\n });\n return tracked;\n };\n\n const ownedBy = (appOrigin: string, agentId: string | undefined) => (owner: string) =>\n agentId === undefined\n ? owner.startsWith(keyOf(appOrigin, \"\"))\n : owner === keyOf(appOrigin, agentId);\n\n return {\n process: (appOrigin, agentId) => processes.get(keyOf(appOrigin, agentId)),\n launch(appOrigin, agentId, start) {\n const owner = keyOf(appOrigin, agentId);\n const running = processes.get(owner);\n if (running) return Promise.resolve(running);\n const pending = launching.get(owner);\n if (pending) return pending.connection;\n const controller = new AbortController();\n const connection = (async () => {\n try {\n const started = await start(controller.signal);\n if (controller.signal.aborted) {\n await started.kill();\n throw new Error(\n \"This computer stopped serving the app while the agent started.\",\n );\n }\n return adopt(owner, started);\n } finally {\n if (launching.get(owner)?.controller === controller) launching.delete(owner);\n }\n })();\n launching.set(owner, { controller, connection });\n return connection;\n },\n session: (grant, threadId, agentId) =>\n sessions.get(sessionKeyOf(grant, threadId, agentId))?.live,\n remember(grant, threadId, agentId, live) {\n const owner = keyOf(grant.appOrigin, agentId);\n if (owners.get(live.session) !== owner || processes.get(owner) === undefined) {\n throw new Error(\"Remember a session opened through the pool's own process.\");\n }\n const key = sessionKeyOf(grant, threadId, agentId);\n sessions.set(key, { live, owner });\n void remembered\n .change((all) => void (all[key] = live.session.id))\n .catch(() => undefined);\n },\n resumable: async (grant, threadId, agentId) => {\n const all = await remembered.read().catch(() => ({}) as Record<string, string>);\n return all[sessionKeyOf(grant, threadId, agentId)];\n },\n async drop(appOrigin, agentId) {\n const owned = ownedBy(appOrigin, agentId);\n for (const [owner, pending] of launching) {\n if (!owned(owner)) continue;\n launching.delete(owner);\n pending.controller.abort();\n }\n const dropped = [...processes].filter(([owner]) => owned(owner));\n for (const [owner] of dropped) discard(owner);\n await Promise.all(dropped.map(([, connection]) => connection.kill()));\n },\n async forget(grant) {\n const prefix = keyOf(grant.appOrigin, grant.grantId, \"\");\n await remembered.change((all) => {\n for (const key of Object.keys(all)) {\n if (key.startsWith(prefix)) delete all[key];\n }\n });\n },\n };\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"prompter.js","sourceRoot":"","sources":["../src/prompter.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"prompter.js","sourceRoot":"","sources":["../src/prompter.ts"],"names":[],"mappings":"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","sourcesContent":["import { execFile } from \"node:child_process\";\nimport { createInterface } from \"node:readline\";\n\n/** The computer's own surface, which no app, backend or web page can draw. */\nexport interface LocalPrompter {\n /** The chosen option id, or undefined when dismissed. */\n answerHere(input: {\n readonly appName: string;\n readonly agent: string;\n readonly question: string;\n readonly choices: readonly { readonly id: string; readonly label: string }[];\n readonly signal?: AbortSignal | undefined;\n }): Promise<string | undefined>;\n /** Passive: a turn from another device started here; none for a browser on this computer. */\n turnStarted(input: {\n readonly appName: string;\n readonly device: string;\n readonly agent: string;\n readonly preview: string;\n }): void;\n /** Passive: a device was linked to the agents here. */\n deviceLinked?(input: { readonly appName: string; readonly device: string }): void;\n}\n\nconst UNPRINTABLE = /[\\p{Cc}\\u061c\\u200e\\u200f\\u202a-\\u202e\\u2066-\\u2069]/gu;\n\nexport const printable = (text: string) => text.replace(UNPRINTABLE, \"\");\n\nfunction ask(question: string): Promise<string | undefined> {\n return new Promise((resolve) => {\n const lines = createInterface({ input: process.stdin, output: process.stdout });\n let answered = false;\n lines.question(question, (answer) => {\n answered = true;\n lines.close();\n resolve(answer);\n });\n lines.once(\"close\", () => {\n if (!answered) resolve(undefined);\n });\n });\n}\n\nconst yes = (answer: string | undefined) => /^y(es)?$/i.test(answer?.trim() ?? \"\");\n\n/** A `[y/N]` question on the terminal that ran a command; only yes is yes. */\nexport const askYesNo = async (question: string): Promise<boolean> =>\n yes(await ask(`${printable(question)} [y/N] `));\n\n/** Interactive `connect`: asks on the TTY that ran it. */\nexport function terminalPrompter(): LocalPrompter {\n return {\n answerHere: async ({ appName, agent, question, choices }) => {\n const menu = choices\n .map((choice, at) => ` ${at + 1}. ${printable(choice.label)}`)\n .join(\"\\n\");\n const answer = await ask(\n `${printable(agent)} for ${printable(appName)} asks: ${printable(question)}\\n${menu}\\nChoice: `,\n );\n return choices[Number(answer?.trim()) - 1]?.id;\n },\n deviceLinked: ({ appName, device }) => {\n process.stdout.write(\n `${printable(device)} was linked to your agents for ${printable(appName)}.\\n`,\n );\n },\n turnStarted: ({ appName, device, agent, preview }) => {\n process.stdout.write(\n `${printable(agent)} is working for ${printable(appName)} from ${printable(device)}: ${printable(preview)}\\n`,\n );\n },\n };\n}\n\nconst DIALOG_TITLE = \"Parlor Host\";\nconst MAX_DIALOG_BUTTONS = 3;\nconst MAX_DIALOG_TEXT = 600;\n\nconst clipped = (text: string) =>\n printable(text).length > MAX_DIALOG_TEXT\n ? `${printable(text).slice(0, MAX_DIALOG_TEXT)}...`\n : printable(text);\n\nfunction osascript(\n lines: readonly string[],\n args: readonly string[],\n signal?: AbortSignal,\n): Promise<string | undefined> {\n return new Promise((resolve) => {\n execFile(\n \"osascript\",\n [...lines.flatMap((line) => [\"-e\", line]), \"--\", ...args],\n { signal },\n (error, stdout) => resolve(error ? undefined : stdout.trim()),\n );\n });\n}\n\nfunction choose(\n text: string,\n labels: readonly string[],\n signal?: AbortSignal,\n): Promise<string | undefined> {\n const options = labels.map(clipped);\n return osascript(\n labels.length <= MAX_DIALOG_BUTTONS\n ? [\n \"on run argv\",\n `set reply to display dialog (item 1 of argv) with title \"${DIALOG_TITLE}\" buttons (rest of argv)`,\n \"return button returned of reply\",\n \"end run\",\n ]\n : [\n \"on run argv\",\n `set picked to choose from list (rest of argv) with title \"${DIALOG_TITLE}\" with prompt (item 1 of argv)`,\n \"if picked is false then error number -128\",\n \"return item 1 of picked\",\n \"end run\",\n ],\n [clipped(text), ...options],\n signal,\n );\n}\n\nexport function macDialogPrompter(): LocalPrompter {\n return {\n answerHere: async ({ appName, agent, question, choices, signal }) => {\n const label = await choose(\n `${agent} for ${appName} asks: ${question}`,\n choices.map((choice) => choice.label),\n signal,\n );\n return choices.find((choice) => clipped(choice.label) === label)?.id;\n },\n deviceLinked: ({ appName, device }) => {\n void osascript(\n [\n \"on run argv\",\n `display notification (item 2 of argv) with title \"${DIALOG_TITLE}\" subtitle (item 1 of argv)`,\n \"end run\",\n ],\n [\n clipped(`${device} was linked`),\n clipped(\n `It can use your agents for ${appName}. Not you? Remove it under Devices in the app's Agent sidebar.`,\n ),\n ],\n );\n },\n turnStarted: ({ appName, device, agent, preview }) => {\n void osascript(\n [\n \"on run argv\",\n `display notification (item 3 of argv) with title \"${DIALOG_TITLE}\" subtitle (item 1 of argv & \" from \" & item 2 of argv)`,\n \"end run\",\n ],\n [\n clipped(`${agent} is working for ${appName}`),\n clipped(device),\n clipped(preview),\n ],\n );\n },\n };\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"release-main.js","sourceRoot":"","sources":["../src/release-main.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAC7C,OAAO,EAAE,UAAU,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AAE7D,KAAK,UAAU,gBAAgB;IAC7B,MAAM,EAAE,qBAAqB,EAAE,GAC7B,MAAM,MAAM,CAAC,8DAA8D,CAAC,CAAC;IAC/E,MAAM,EAAE,QAAQ,EAAE,GAChB,MAAM,MAAM,CAAC,qDAAqD,CAAC,CAAC;IACtE,MAAM,qBAAqB,EAAE,CAAC;IAC9B,OAAO,CAAC,GAAG,GAAG,OAAO,CAAC,KAAK,CAAC;IAC5B,OAAO,CAAC,IAAI,GAAG,OAAO,CAAC,KAAK,CAAC;IAC7B,OAAO,CAAC,IAAI,GAAG,OAAO,CAAC,KAAK,CAAC;IAC7B,OAAO,CAAC,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC;IAC9B,MAAM,GAAG,GAAG,QAAQ,CAAC,SAAS,EAAE,EAAE,cAAc,EAAE,KAAK,EAAE,CAAC,CAAC;IAC3D,MAAM,QAAQ,GAAG,KAAK,IAAI,EAAE;QAC1B,MAAM,GAAG,CAAC,OAAO,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC;QAC3C,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC,CAAC;IACF,KAAK,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IAC/B,OAAO,CAAC,EAAE,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;IAChC,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;IAC/B,OAAO,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC;AACzB,CAAC;AAED,KAAK,UAAU,eAAe;IAC5B,MAAM,MAAM,CAAC,8CAA8C,CAAC,CAAC;AAC/D,CAAC;AAED,MAAM,QAAQ,GAAkD;IAC9D,MAAM,EAAE,gBAAgB;IACxB,KAAK,EAAE,eAAe;CACvB,CAAC;AAEF,KAAK,MAAM,OAAO,IAAI,cAAc,EAAE,CAAC;IACrC,IAAI,OAAO,CAAC,MAAM,CAAC,IAAI,KAAK,SAAS,IAAI,OAAO,CAAC,EAAE,IAAI,QAAQ,EAAE,CAAC;QAChE,gBAAgB,CAAC,GAAG,CAAC,UAAU,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,OAAO,CAAC,EAAE,CAAC,CAAC;IAC/D,CAAC;AACH,CAAC;AAED,KAAK,UAAU,IAAI;IACjB,MAAM,CAAC,OAAO,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IACjD,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;QAC1B,MAAM,MAAM,CAAC,WAAW,CAAC,CAAC;QAC1B,OAAO;IACT,CAAC;IACD,MAAM,GAAG,GAAG,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;IAClE,IAAI,CAAC,GAAG,EAAE,CAAC;QACT,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,wBAAwB,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QACnF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IACD,MAAM,GAAG,EAAE,CAAC;AACd,CAAC;AAED,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,KAAc,EAAE,EAAE;IAC9B,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IACrB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC"}
1
+ {"version":3,"file":"release-main.js","sourceRoot":"","sources":["../src/release-main.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAC7C,OAAO,EAAE,UAAU,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AAE7D,KAAK,UAAU,gBAAgB;IAC7B,MAAM,EAAE,qBAAqB,EAAE,GAC7B,MAAM,MAAM,CAAC,8DAA8D,CAAC,CAAC;IAC/E,MAAM,EAAE,QAAQ,EAAE,GAChB,MAAM,MAAM,CAAC,qDAAqD,CAAC,CAAC;IACtE,MAAM,qBAAqB,EAAE,CAAC;IAC9B,OAAO,CAAC,GAAG,GAAG,OAAO,CAAC,KAAK,CAAC;IAC5B,OAAO,CAAC,IAAI,GAAG,OAAO,CAAC,KAAK,CAAC;IAC7B,OAAO,CAAC,IAAI,GAAG,OAAO,CAAC,KAAK,CAAC;IAC7B,OAAO,CAAC,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC;IAC9B,MAAM,GAAG,GAAG,QAAQ,CAAC,SAAS,EAAE,EAAE,cAAc,EAAE,KAAK,EAAE,CAAC,CAAC;IAC3D,MAAM,QAAQ,GAAG,KAAK,IAAI,EAAE;QAC1B,MAAM,GAAG,CAAC,OAAO,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC;QAC3C,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC,CAAC;IACF,KAAK,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IAC/B,OAAO,CAAC,EAAE,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;IAChC,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;IAC/B,OAAO,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC;AACzB,CAAC;AAED,KAAK,UAAU,eAAe;IAC5B,MAAM,MAAM,CAAC,8CAA8C,CAAC,CAAC;AAC/D,CAAC;AAED,MAAM,QAAQ,GAAkD;IAC9D,MAAM,EAAE,gBAAgB;IACxB,KAAK,EAAE,eAAe;CACvB,CAAC;AAEF,KAAK,MAAM,OAAO,IAAI,cAAc,EAAE,CAAC;IACrC,IAAI,OAAO,CAAC,MAAM,CAAC,IAAI,KAAK,SAAS,IAAI,OAAO,CAAC,EAAE,IAAI,QAAQ,EAAE,CAAC;QAChE,gBAAgB,CAAC,GAAG,CAAC,UAAU,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,OAAO,CAAC,EAAE,CAAC,CAAC;IAC/D,CAAC;AACH,CAAC;AAED,KAAK,UAAU,IAAI;IACjB,MAAM,CAAC,OAAO,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IACjD,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;QAC1B,MAAM,MAAM,CAAC,WAAW,CAAC,CAAC;QAC1B,OAAO;IACT,CAAC;IACD,MAAM,GAAG,GAAG,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;IAClE,IAAI,CAAC,GAAG,EAAE,CAAC;QACT,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,wBAAwB,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QACnF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IACD,MAAM,GAAG,EAAE,CAAC;AACd,CAAC;AAED,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,KAAc,EAAE,EAAE;IAC9B,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IACrB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC","sourcesContent":["import { AGENT_PROFILES } from \"./agents.js\";\nimport { adapterKey, embeddedAdapters } from \"./embedded.js\";\n\nasync function runClaudeAdapter(): Promise<void> {\n const { applyManagedPolicyEnv } =\n await import(\"@agentclientprotocol/claude-agent-acp/dist/managed-policy.js\");\n const { serveAcp } =\n await import(\"@agentclientprotocol/claude-agent-acp/dist/serve.js\");\n await applyManagedPolicyEnv();\n console.log = console.error;\n console.info = console.error;\n console.warn = console.error;\n console.debug = console.error;\n const acp = serveAcp(undefined, { experimentalV2: false });\n const shutdown = async () => {\n await acp.dispose().catch(() => undefined);\n process.exit(0);\n };\n void acp.closed.then(shutdown);\n process.on(\"SIGTERM\", shutdown);\n process.on(\"SIGINT\", shutdown);\n process.stdin.resume();\n}\n\nasync function runCodexAdapter(): Promise<void> {\n await import(\"@agentclientprotocol/codex-acp/dist/index.js\");\n}\n\nconst ADAPTERS: Readonly<Record<string, () => Promise<void>>> = {\n claude: runClaudeAdapter,\n codex: runCodexAdapter,\n};\n\nfor (const profile of AGENT_PROFILES) {\n if (profile.launch.kind === \"adapter\" && profile.id in ADAPTERS) {\n embeddedAdapters.set(adapterKey(profile.launch), profile.id);\n }\n}\n\nasync function main(): Promise<void> {\n const [command, adapter] = process.argv.slice(2);\n if (command !== \"adapter\") {\n await import(\"./main.js\");\n return;\n }\n const run = adapter === undefined ? undefined : ADAPTERS[adapter];\n if (!run) {\n process.stderr.write(`parlor-host adapter <${Object.keys(ADAPTERS).join(\"|\")}>\\n`);\n process.exit(2);\n }\n await run();\n}\n\nmain().catch((error: unknown) => {\n console.error(error);\n process.exit(1);\n});\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"release.js","sourceRoot":"","sources":["../src/release.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"release.js","sourceRoot":"","sources":["../src/release.ts"],"names":[],"mappings":"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","sourcesContent":["import { createHash, createPublicKey, verify } from \"node:crypto\";\nimport { createReadStream } from \"node:fs\";\nimport { readFile } from \"node:fs/promises\";\n\nimport { canonicalBytes } from \"@parlor/capabilities/encoding\";\n\ndeclare const __PARLOR_RELEASE_KEY__: string | undefined;\n\n/** The Parlor release public key, base64url, fixed at build time; a build without one trusts no handover. */\nexport const RELEASE_KEY: string | undefined =\n typeof __PARLOR_RELEASE_KEY__ === \"undefined\" ? undefined : __PARLOR_RELEASE_KEY__;\n\nexport const RELEASE_PLATFORM = `${process.platform}-${process.arch}`;\n\nconst VERSION = /^(0|[1-9]\\d*)\\.(0|[1-9]\\d*)\\.(0|[1-9]\\d*)$/;\n\nexport interface ReleaseSignature {\n readonly v: 1;\n readonly version: string;\n readonly platform: string;\n readonly sha256: string;\n readonly signature: string;\n}\n\nexport const isVersion = (text: string) => VERSION.test(text);\n\nexport function compareVersions(a: string, b: string): number {\n const [left, right] = [a, b].map((version) => {\n const match = VERSION.exec(version);\n if (!match) throw new Error(`\"${version}\" is not a major.minor.patch version.`);\n return match.slice(1).map(Number);\n }) as [number[], number[]];\n for (let at = 0; at < 3; at += 1) {\n const difference = left[at]! - right[at]!;\n if (difference !== 0) return difference;\n }\n return 0;\n}\n\nexport function releaseBytes(signature: Omit<ReleaseSignature, \"signature\">): Uint8Array {\n const { v, version, platform, sha256 } = signature;\n return canonicalBytes({ v, version, platform, sha256 });\n}\n\nexport function parseReleaseSignature(text: string): ReleaseSignature | undefined {\n let value: unknown;\n try {\n value = JSON.parse(text);\n } catch {\n return undefined;\n }\n if (typeof value !== \"object\" || value === null) return undefined;\n const { v, version, platform, sha256, signature } = value as Record<string, unknown>;\n if (v !== 1) return undefined;\n if (typeof version !== \"string\" || !isVersion(version)) return undefined;\n if (typeof platform !== \"string\" || typeof signature !== \"string\") return undefined;\n if (typeof sha256 !== \"string\" || !/^[0-9a-f]{64}$/.test(sha256)) return undefined;\n return { v, version, platform, sha256, signature };\n}\n\nexport function signatureHolds(\n signature: ReleaseSignature,\n key: string | undefined,\n): boolean {\n if (key === undefined) return false;\n try {\n return verify(\n null,\n releaseBytes(signature),\n createPublicKey({ key: { kty: \"OKP\", crv: \"Ed25519\", x: key }, format: \"jwk\" }),\n Buffer.from(signature.signature, \"base64url\"),\n );\n } catch {\n return false;\n }\n}\n\nexport function sha256File(path: string): Promise<string> {\n return new Promise((resolve, reject) => {\n const hash = createHash(\"sha256\");\n createReadStream(path)\n .on(\"data\", (chunk) => hash.update(chunk))\n .once(\"end\", () => resolve(hash.digest(\"hex\")))\n .once(\"error\", reject);\n });\n}\n\n/**\n * The signed release a binary is: its `.sig` verifies under `key`, names this platform,\n * and its hash is the binary's own. `undefined` for anything else.\n */\nexport async function signedRelease(\n binary: string,\n signatureFile: string,\n key: string | undefined,\n): Promise<ReleaseSignature | undefined> {\n const signature = parseReleaseSignature(\n await readFile(signatureFile, \"utf8\").catch(() => \"\"),\n );\n if (!signature || signature.platform !== RELEASE_PLATFORM) return undefined;\n if (!signatureHolds(signature, key)) return undefined;\n const actual = await sha256File(binary).catch(() => undefined);\n return actual === signature.sha256 ? signature : undefined;\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"revoke.js","sourceRoot":"","sources":["../src/revoke.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,WAAW,GAAG,4BAA4B,CAAC;AAExD,MAAM,cAAc,GAAG,CAAC,QAAkB,EAAE,EAAE,CAAC,QAAQ,CAAC,MAAM,KAAK,GAAG,CAAC;AASvE,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,KAAkB;IAClD,MAAM,GAAG,GAAG,GAAG,KAAK,CAAC,SAAS,GAAG,WAAW,EAAE,CAAC;IAC/C,MAAM,aAAa,GAAG,cAAc,MAAM,KAAK,CAAC,MAAM,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC;IAClF,IAAI,QAAkB,CAAC;IACvB,IAAI,CAAC;QACH,QAAQ,GAAG,MAAM,CAAC,KAAK,CAAC,KAAK,IAAI,KAAK,CAAC,CAAC,GAAG,EAAE;YAC3C,MAAM,EAAE,MAAM;YACd,OAAO,EAAE,EAAE,aAAa,EAAE,cAAc,EAAE,kBAAkB,EAAE;YAC9D,IAAI,EAAE,IAAI;SACX,CAAC,CAAC;IACL,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,IAAI,KAAK,CACb,GAAG,KAAK,CAAC,OAAO,oDAAoD,EACpE;YACE,KAAK,EAAE,KAAK;SACb,CACF,CAAC;IACJ,CAAC;IACD,IAAI,CAAC,QAAQ,CAAC,EAAE,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC9C,MAAM,IAAI,KAAK,CACb,GAAG,KAAK,CAAC,OAAO,uDAAuD,QAAQ,CAAC,MAAM,GAAG,CAC1F,CAAC;IACJ,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"revoke.js","sourceRoot":"","sources":["../src/revoke.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,WAAW,GAAG,4BAA4B,CAAC;AAExD,MAAM,cAAc,GAAG,CAAC,QAAkB,EAAE,EAAE,CAAC,QAAQ,CAAC,MAAM,KAAK,GAAG,CAAC;AASvE,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,KAAkB;IAClD,MAAM,GAAG,GAAG,GAAG,KAAK,CAAC,SAAS,GAAG,WAAW,EAAE,CAAC;IAC/C,MAAM,aAAa,GAAG,cAAc,MAAM,KAAK,CAAC,MAAM,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC;IAClF,IAAI,QAAkB,CAAC;IACvB,IAAI,CAAC;QACH,QAAQ,GAAG,MAAM,CAAC,KAAK,CAAC,KAAK,IAAI,KAAK,CAAC,CAAC,GAAG,EAAE;YAC3C,MAAM,EAAE,MAAM;YACd,OAAO,EAAE,EAAE,aAAa,EAAE,cAAc,EAAE,kBAAkB,EAAE;YAC9D,IAAI,EAAE,IAAI;SACX,CAAC,CAAC;IACL,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,IAAI,KAAK,CACb,GAAG,KAAK,CAAC,OAAO,oDAAoD,EACpE;YACE,KAAK,EAAE,KAAK;SACb,CACF,CAAC;IACJ,CAAC;IACD,IAAI,CAAC,QAAQ,CAAC,EAAE,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC9C,MAAM,IAAI,KAAK,CACb,GAAG,KAAK,CAAC,OAAO,uDAAuD,QAAQ,CAAC,MAAM,GAAG,CAC1F,CAAC;IACJ,CAAC;AACH,CAAC","sourcesContent":["import type { AssertionRequest } from \"./assertion.js\";\n\nexport const REVOKE_PATH = \"/_parlor/auth/hosts/revoke\";\n\nconst alreadyRevoked = (response: Response) => response.status === 401;\n\nexport interface RevokeInput {\n readonly appOrigin: string;\n readonly appName: string;\n readonly assert: (request: AssertionRequest) => Promise<string>;\n readonly fetch?: typeof fetch | undefined;\n}\n\nexport async function revokeGrant(input: RevokeInput): Promise<void> {\n const url = `${input.appOrigin}${REVOKE_PATH}`;\n const authorization = `ParlorHost ${await input.assert({ method: \"POST\", url })}`;\n let response: Response;\n try {\n response = await (input.fetch ?? fetch)(url, {\n method: \"POST\",\n headers: { authorization, \"content-type\": \"application/json\" },\n body: \"{}\",\n });\n } catch (error) {\n throw new Error(\n `${input.appName} could not be reached to disconnect this computer.`,\n {\n cause: error,\n },\n );\n }\n if (!response.ok && !alreadyRevoked(response)) {\n throw new Error(\n `${input.appName} did not disconnect this computer: it answered HTTP ${response.status}.`,\n );\n }\n}\n"]}
package/dist/self.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"self.js","sourceRoot":"","sources":["../src/self.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,UAAU,CAAC;AAEjC,MAAM,UAAU,cAAc,CAAC,IAAuB;IAIpD,MAAM,KAAK,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAC9B,OAAO,KAAK,EAAE,IAAI,KAAK,KAAK,SAAS;QACnC,CAAC,CAAC,EAAE,OAAO,EAAE,OAAO,CAAC,QAAQ,EAAE,IAAI,EAAE;QACrC,CAAC,CAAC,EAAE,OAAO,EAAE,OAAO,CAAC,QAAQ,EAAE,IAAI,EAAE,CAAC,KAAK,EAAE,GAAG,IAAI,CAAC,EAAE,CAAC;AAC5D,CAAC;AAED,MAAM,CAAC,MAAM,sBAAsB,GAAG,GAAY,EAAE,CAAC,KAAK,EAAE,CAAC;AAE7D,MAAM,CAAC,MAAM,SAAS,GAAG,GAAuB,EAAE,CAChD,KAAK,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC"}
1
+ {"version":3,"file":"self.js","sourceRoot":"","sources":["../src/self.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,UAAU,CAAC;AAEjC,MAAM,UAAU,cAAc,CAAC,IAAuB;IAIpD,MAAM,KAAK,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAC9B,OAAO,KAAK,EAAE,IAAI,KAAK,KAAK,SAAS;QACnC,CAAC,CAAC,EAAE,OAAO,EAAE,OAAO,CAAC,QAAQ,EAAE,IAAI,EAAE;QACrC,CAAC,CAAC,EAAE,OAAO,EAAE,OAAO,CAAC,QAAQ,EAAE,IAAI,EAAE,CAAC,KAAK,EAAE,GAAG,IAAI,CAAC,EAAE,CAAC;AAC5D,CAAC;AAED,MAAM,CAAC,MAAM,sBAAsB,GAAG,GAAY,EAAE,CAAC,KAAK,EAAE,CAAC;AAE7D,MAAM,CAAC,MAAM,SAAS,GAAG,GAAuB,EAAE,CAChD,KAAK,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC","sourcesContent":["import { isSea } from \"node:sea\";\n\nexport function selfInvocation(args: readonly string[]): {\n readonly command: string;\n readonly args: readonly string[];\n} {\n const entry = process.argv[1];\n return isSea() || entry === undefined\n ? { command: process.execPath, args }\n : { command: process.execPath, args: [entry, ...args] };\n}\n\nexport const runsAsSingleExecutable = (): boolean => isSea();\n\nexport const selfEntry = (): string | undefined =>\n isSea() ? process.execPath : process.argv[1];\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"service.js","sourceRoot":"","sources":["../src/service.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"service.js","sourceRoot":"","sources":["../src/service.ts"],"names":[],"mappings":"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","sourcesContent":["import { spawn } from \"node:child_process\";\nimport {\n access,\n chmod,\n copyFile,\n mkdir,\n open,\n rename,\n rm,\n symlink,\n writeFile,\n} from \"node:fs/promises\";\nimport { dirname, join } from \"node:path\";\n\nimport type { ProtocolRange } from \"@parlor/chat\";\n\nimport { connectControl } from \"./control.js\";\nimport { LOCK_TOKEN_ENV, withFileLock } from \"./lock.js\";\nimport type { HostPaths } from \"./paths.js\";\nimport {\n compareVersions,\n RELEASE_KEY,\n type ReleaseSignature,\n sha256File,\n signedRelease,\n} from \"./release.js\";\nimport { selfInvocation } from \"./self.js\";\n\nexport interface HostRelease {\n readonly version: string;\n /** Host protocols it speaks with app backends. */\n readonly protocols: ProtocolRange;\n /** The control protocol it speaks with CLIs and desktop sidecars. */\n readonly control: number;\n}\n\nexport type ServiceClient =\n | { readonly kind: \"cli\"; readonly release: HostRelease }\n | {\n readonly kind: \"desktop-sidecar\";\n readonly app: string;\n readonly release: HostRelease;\n /** The bundled binary, copied in when newer than what is installed. */\n readonly binary: string;\n /** Its `.sig`, `<binary>.sig` when the bundle keeps them together. */\n readonly signature?: string;\n };\n\nexport type AdoptOutcome =\n | { readonly kind: \"using\"; readonly running: HostRelease }\n | { readonly kind: \"installed\"; readonly release: HostRelease }\n /** The old service handed its links over; its running turns finish under it. */\n | { readonly kind: \"upgraded\"; readonly from: HostRelease; readonly to: HostRelease }\n | {\n readonly kind: \"refused\";\n readonly reason: \"unsigned\" | \"downgrade\" | \"legacy_service\";\n readonly running?: HostRelease;\n };\n\nexport type Situation =\n | { readonly service: \"absent\"; readonly installed: boolean }\n | { readonly service: \"legacy\" }\n | { readonly service: \"running\"; readonly running: HostRelease };\n\ntype Sidecar = Extract<ServiceClient, { readonly kind: \"desktop-sidecar\" }>;\n\nexport type Action =\n | { readonly do: \"start_installed\" }\n | { readonly do: \"spawn_self\" }\n | { readonly do: \"install_bundled\"; readonly client: Sidecar }\n | { readonly do: \"refuse_legacy\" }\n | { readonly do: \"use\"; readonly running: HostRelease }\n | { readonly do: \"refuse_downgrade\"; readonly running: HostRelease }\n | { readonly do: \"hand_over\"; readonly client: Sidecar; readonly running: HostRelease };\n\nexport function actionFor(situation: Situation, client: ServiceClient): Action {\n switch (situation.service) {\n case \"legacy\":\n return { do: \"refuse_legacy\" };\n case \"absent\":\n if (situation.installed) return { do: \"start_installed\" };\n return client.kind === \"cli\"\n ? { do: \"spawn_self\" }\n : { do: \"install_bundled\", client };\n case \"running\": {\n const { running } = situation;\n if (client.kind === \"cli\") return { do: \"use\", running };\n const order = compareVersions(client.release.version, running.version);\n if (order > 0) return { do: \"hand_over\", client, running };\n return order === 0 ? { do: \"use\", running } : { do: \"refuse_downgrade\", running };\n }\n }\n}\n\nexport interface ServiceDeps {\n readonly releaseKey: string | undefined;\n readonly readyMs: number;\n readonly pollMs: number;\n readonly start?:\n | ((\n paths: HostPaths,\n command: string,\n args: readonly string[],\n lockToken: string,\n ) => Promise<void>)\n | undefined;\n}\n\nconst DEFAULTS: ServiceDeps = { releaseKey: RELEASE_KEY, readyMs: 15_000, pollMs: 100 };\n\nconst startWith = (deps: ServiceDeps) => deps.start ?? spawnService;\nconst SERVICE_BINARY = \"parlor-host\";\nconst SIGNATURE_FILE = \"parlor-host.sig\";\n\nconst sleep = (ms: number) => new Promise((resolve) => setTimeout(resolve, ms));\n\nconst exists = (path: string) =>\n access(path).then(\n () => true,\n () => false,\n );\n\nasync function observe(paths: HostPaths, client: ServiceClient): Promise<Situation> {\n const control = await connectControl(paths.control);\n if (!control) {\n return {\n service: \"absent\",\n installed: await exists(join(paths.current, SERVICE_BINARY)),\n };\n }\n const reply = await control.send({ op: \"hello\", client });\n control.close();\n return reply.ok\n ? { service: \"running\", running: reply.release }\n : { service: \"legacy\" };\n}\n\nasync function spawnService(\n paths: HostPaths,\n command: string,\n args: readonly string[],\n lockToken: string,\n): Promise<void> {\n await mkdir(paths.logs, { recursive: true, mode: 0o700 });\n const output = await open(join(paths.logs, \"daemon.out\"), \"a\", 0o600);\n const child = spawn(command, args, {\n cwd: paths.root,\n detached: true,\n stdio: [\"ignore\", output.fd, output.fd],\n env: { ...process.env, [LOCK_TOKEN_ENV]: lockToken },\n });\n child.unref();\n await output.close();\n}\n\nasync function untilRunning(\n paths: HostPaths,\n client: ServiceClient,\n deps: ServiceDeps,\n ready: (running: HostRelease) => boolean = () => true,\n): Promise<HostRelease> {\n for (const deadline = Date.now() + deps.readyMs; Date.now() < deadline;) {\n const situation = await observe(paths, client);\n if (situation.service === \"running\" && ready(situation.running)) {\n return situation.running;\n }\n await sleep(deps.pollMs);\n }\n throw new Error(`Parlor Host did not start; see ${join(paths.logs, \"daemon.out\")}.`);\n}\n\n/**\n * Copies a verified binary into `versions/<version>/` and repoints `current`, each step\n * atomic and repeatable; false when the copy is not the binary the signature describes.\n */\nexport async function installRelease(\n paths: HostPaths,\n source: { readonly binary: string; readonly signature: string },\n release: ReleaseSignature,\n): Promise<boolean> {\n const target = join(paths.versions, release.version);\n const installed = join(target, SERVICE_BINARY);\n const present = (await sha256File(installed).catch(() => undefined)) === release.sha256;\n if (!present) {\n const staged = join(paths.versions, `.${release.version}.tmp-${process.pid}`);\n await rm(staged, { recursive: true, force: true });\n await mkdir(staged, { recursive: true, mode: 0o700 });\n await copyFile(source.binary, join(staged, SERVICE_BINARY));\n await chmod(join(staged, SERVICE_BINARY), 0o755);\n await copyFile(source.signature, join(staged, SIGNATURE_FILE));\n if ((await sha256File(join(staged, SERVICE_BINARY))) !== release.sha256) {\n await rm(staged, { recursive: true, force: true });\n return false;\n }\n await rm(target, { recursive: true, force: true });\n await rename(staged, target);\n }\n const link = `${paths.current}.tmp-${process.pid}`;\n await rm(link, { force: true });\n await symlink(join(\"versions\", release.version), link);\n await rename(link, paths.current);\n return true;\n}\n\nconst escapeXml = (text: string) =>\n text.replaceAll(\"&\", \"&amp;\").replaceAll(\"<\", \"&lt;\").replaceAll(\">\", \"&gt;\");\n\n/** LaunchAgent, systemd user unit or Task Scheduler, pointing at `paths.current`. */\nexport async function installLoginItem(paths: HostPaths): Promise<void> {\n const plist = `<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">\n<plist version=\"1.0\">\n<dict>\n <key>Label</key>\n <string>dev.parlor.host</string>\n <key>ProgramArguments</key>\n <array>\n <string>${escapeXml(join(paths.current, SERVICE_BINARY))}</string>\n <string>daemon</string>\n </array>\n <key>RunAtLoad</key>\n <true/>\n <key>KeepAlive</key>\n <dict>\n <key>SuccessfulExit</key>\n <false/>\n </dict>\n <key>StandardOutPath</key>\n <string>${escapeXml(join(paths.logs, \"daemon.out\"))}</string>\n <key>StandardErrorPath</key>\n <string>${escapeXml(join(paths.logs, \"daemon.out\"))}</string>\n</dict>\n</plist>\n`;\n await mkdir(dirname(paths.launchAgent), { recursive: true });\n const staged = `${paths.launchAgent}.${process.pid}.tmp`;\n await writeFile(staged, plist, { mode: 0o644 });\n await rename(staged, paths.launchAgent);\n}\n\nasync function installBundled(\n paths: HostPaths,\n client: Sidecar,\n deps: ServiceDeps,\n lockToken: string,\n): Promise<AdoptOutcome> {\n const source = {\n binary: client.binary,\n signature: client.signature ?? `${client.binary}.sig`,\n };\n const release = await signedRelease(source.binary, source.signature, deps.releaseKey);\n if (\n !release ||\n release.version !== client.release.version ||\n !(await installRelease(paths, source, release))\n ) {\n return { kind: \"refused\", reason: \"unsigned\" };\n }\n await installLoginItem(paths);\n await startWith(deps)(\n paths,\n join(paths.current, SERVICE_BINARY),\n [\"daemon\"],\n lockToken,\n );\n return { kind: \"installed\", release: await untilRunning(paths, client, deps) };\n}\n\nasync function handOver(\n paths: HostPaths,\n client: Sidecar,\n running: HostRelease,\n deps: ServiceDeps,\n lockToken: string,\n): Promise<AdoptOutcome> {\n const control = await connectControl(paths.control);\n if (!control) throw new Error(\"Parlor Host stopped answering during the upgrade.\");\n const reply = await control.send({\n op: \"handover\",\n binary: client.binary,\n signature: client.signature ?? `${client.binary}.sig`,\n });\n control.close();\n if (!reply.ok) {\n return reply.error === \"unsigned\" || reply.error === \"downgrade\"\n ? { kind: \"refused\", reason: reply.error, running }\n : (() => {\n throw new Error(reply.error);\n })();\n }\n await startWith(deps)(\n paths,\n join(paths.current, SERVICE_BINARY),\n [\"daemon\"],\n lockToken,\n );\n const to = await untilRunning(\n paths,\n client,\n deps,\n (release) => compareVersions(release.version, running.version) > 0,\n );\n return { kind: \"upgraded\", from: running, to };\n}\n\n/**\n * Leaves exactly one per-user service running, the newest: adopt, install or upgrade.\n * Only binaries signed by the Parlor release key, never a downgrade; installs hold a lock\n * under `paths.root`, so two apps can run it at once.\n */\nexport async function ensureServiceWith(\n deps: ServiceDeps,\n paths: HostPaths,\n client: ServiceClient,\n): Promise<AdoptOutcome> {\n await mkdir(paths.root, { recursive: true, mode: 0o700 });\n return withFileLock(paths.lock, async (lockToken) => {\n for (;;) {\n const action = actionFor(await observe(paths, client), client);\n switch (action.do) {\n case \"refuse_legacy\":\n return { kind: \"refused\", reason: \"legacy_service\" };\n case \"use\":\n return { kind: \"using\", running: action.running };\n case \"refuse_downgrade\":\n return { kind: \"refused\", reason: \"downgrade\", running: action.running };\n case \"hand_over\":\n return handOver(paths, action.client, action.running, deps, lockToken);\n case \"install_bundled\":\n return installBundled(paths, action.client, deps, lockToken);\n case \"start_installed\":\n await startWith(deps)(\n paths,\n join(paths.current, SERVICE_BINARY),\n [\"daemon\"],\n lockToken,\n );\n await untilRunning(paths, client, deps);\n continue;\n case \"spawn_self\": {\n const self = selfInvocation([\"daemon\"]);\n await startWith(deps)(paths, self.command, self.args, lockToken);\n return { kind: \"installed\", release: await untilRunning(paths, client, deps) };\n }\n }\n }\n });\n}\n\nexport function ensureService(\n paths: HostPaths,\n client: ServiceClient,\n): Promise<AdoptOutcome> {\n return ensureServiceWith(DEFAULTS, paths, client);\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"shell-path.js","sourceRoot":"","sources":["../src/shell-path.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"shell-path.js","sourceRoot":"","sources":["../src/shell-path.ts"],"names":[],"mappings":"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","sourcesContent":["import { spawn } from \"node:child_process\";\nimport { access, constants } from \"node:fs/promises\";\nimport { homedir } from \"node:os\";\nimport { delimiter, join } from \"node:path\";\n\nconst MARK = \"__PARLOR_PATH__\";\nconst TIMEOUT_MS = 3_000;\n\nlet resolved: Promise<string> | undefined;\n\nconst wellKnownDirectories = () => [\n join(homedir(), \".local\", \"bin\"),\n \"/opt/homebrew/bin\",\n \"/usr/local/bin\",\n];\n\nfunction fromLoginShell(): Promise<string | undefined> {\n return new Promise((resolve) => {\n const shell = process.env.SHELL || \"/bin/zsh\";\n const child = spawn(shell, [\"-ilc\", `printf '${MARK}%s${MARK}' \"$PATH\"`], {\n stdio: [\"ignore\", \"pipe\", \"ignore\"],\n timeout: TIMEOUT_MS,\n });\n let out = \"\";\n child.stdout.setEncoding(\"utf8\");\n child.stdout.on(\"data\", (chunk: string) => (out += chunk));\n child.once(\"error\", () => resolve(undefined));\n child.once(\"close\", () => resolve(out.split(MARK)[1]));\n });\n}\n\n/**\n * The PATH agents are found on: this process's own first, then what the login shell adds,\n * then the directories agent CLIs install into, since a LaunchAgent or a GUI app gets only\n * launchd's system PATH.\n */\nexport function agentPath(): Promise<string> {\n resolved ??= fromLoginShell().then((login) => {\n const own = (process.env.PATH ?? \"\").split(delimiter).filter(Boolean);\n const known = (entry: string) => own.includes(entry);\n const fromShell = (login ?? \"\")\n .split(delimiter)\n .filter((entry) => entry && !known(entry));\n const rest = [...own, ...fromShell];\n const installed = wellKnownDirectories().filter((entry) => !rest.includes(entry));\n return [...rest, ...installed].join(delimiter);\n });\n return resolved;\n}\n\n/** The first executable `name` on `path`, as an absolute path. */\nexport async function resolveBinary(\n name: string,\n path: string,\n): Promise<string | undefined> {\n for (const directory of path.split(delimiter).filter(Boolean)) {\n const candidate = join(directory, name);\n const found = await access(candidate, constants.X_OK).then(\n () => candidate,\n () => undefined,\n );\n if (found !== undefined) return found;\n }\n return undefined;\n}\n\nexport async function agentEnvironment(): Promise<Record<string, string>> {\n const env: Record<string, string> = {};\n for (const [name, value] of Object.entries(process.env)) {\n if (value !== undefined && !name.startsWith(\"PARLOR_\")) env[name] = value;\n }\n env.PATH = await agentPath();\n return env;\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"skeleton-kit.js","sourceRoot":"","sources":["../src/skeleton-kit.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"skeleton-kit.js","sourceRoot":"","sources":["../src/skeleton-kit.ts"],"names":[],"mappings":"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","sourcesContent":["const OPENING = \"([{\";\nconst CLOSING = \")]}\";\n\nfunction statementsOf(text: string): string[] {\n const statements: string[] = [];\n let current = \"\";\n let depth = 0;\n const open: string[] = [];\n for (let at = 0; at < text.length; at += 1) {\n const char = text[at]!;\n const next = text[at + 1];\n if (char === \"/\" && next === \"/\") {\n while (at < text.length && text[at] !== \"\\n\") at += 1;\n continue;\n }\n if (char === \"/\" && next === \"*\") {\n at = text.indexOf(\"*/\", at + 2) + 1;\n continue;\n }\n if (char === '\"' || char === \"'\" || char === \"`\") {\n let end = at + 1;\n while (end < text.length && text[end] !== char) end += text[end] === \"\\\\\" ? 2 : 1;\n current += text.slice(at, end + 1);\n at = end;\n continue;\n }\n if (CLOSING.includes(char) && depth === 0) {\n current = \"\";\n continue;\n }\n current += char;\n if (OPENING.includes(char)) {\n depth += 1;\n open.push(CLOSING[OPENING.indexOf(char)]!);\n } else if (CLOSING.includes(char)) {\n depth -= 1;\n open.pop();\n const blockEnded = char === \"}\" && depth === 0;\n const rest = text.slice(at + 1).match(/^\\s*(\\S)/)?.[1];\n if (blockEnded && rest !== \";\" && rest !== \",\" && rest !== \".\" && rest !== \")\") {\n const head = current.trim();\n const isBlock = /^(export\\s+)?(async\\s+)?(function|interface|class|enum)\\b/.test(\n head,\n );\n const hasBody =\n !/^(export\\s+)?(async\\s+)?function\\b/.test(head) ||\n endOfSignature(head) < head.length;\n if (isBlock && hasBody) {\n statements.push(current.trim());\n current = \"\";\n }\n }\n } else if (char === \";\" && depth === 0) {\n statements.push(current.trim());\n current = \"\";\n }\n }\n if (current.trim()) statements.push(`${current.trim()}${open.reverse().join(\"\")}`);\n return statements;\n}\n\nexport const compact = (text: string) =>\n text\n .replace(/\\s+/g, \" \")\n .replace(/\\s*([(){}[\\],;:<>|&=?])\\s*/g, \"$1\")\n .replace(/[,;](?=[)\\]}>])/g, \"\");\n\nfunction endOfSignature(statement: string): number {\n let parens = 0;\n let angles = 0;\n let seenParams = false;\n for (let at = 0; at < statement.length; at += 1) {\n const char = statement[at]!;\n if (char === \"(\") parens += 1;\n else if (char === \")\") {\n parens -= 1;\n if (parens === 0) seenParams = true;\n } else if (parens === 0 && seenParams) {\n if (char === \"<\") angles += 1;\n else if (char === \">\" && statement[at - 1] !== \"=\") angles -= 1;\n else if (\n char === \"{\" &&\n angles === 0 &&\n !/[:|&]\\s*$/.test(statement.slice(0, at))\n ) {\n return at;\n }\n }\n }\n return statement.length;\n}\n\nfunction signaturesOf(text: string): Map<string, string> {\n const signatures = new Map<string, string>();\n const add = (name: string, signature: string) =>\n signatures.set(\n name,\n [signatures.get(name), compact(signature)].filter(Boolean).join(\"\\n\"),\n );\n for (const statement of statementsOf(text)) {\n if (!statement.startsWith(\"export\")) continue;\n const declaration = statement.replace(/^export\\s+(default\\s+)?/, \"\");\n const named = /^(?:async\\s+)?(function|interface|type|class|enum)\\s+(\\w+)/.exec(\n declaration,\n );\n if (named) {\n const [, kind, name] = named;\n const keep =\n kind === \"function\"\n ? declaration.slice(0, endOfSignature(declaration)).replace(/^async\\s+/, \"\")\n : declaration;\n add(name!, keep);\n } else if (/^(const|let)\\s/.test(declaration)) {\n const name = /^(?:const|let)\\s+(\\w+)/.exec(declaration)![1]!;\n const [head] = declaration.split(/(?<![=!<>])=(?![=>])/);\n const annotated = /^(?:const|let)\\s+\\w+\\s*:/.test(declaration);\n const callee = /=\\s*([\\w.]+(?:<[^(]*>)?)\\(/.exec(declaration)?.[1];\n add(name, annotated ? head! : `${name} = ${callee ?? \"\"}`);\n } else if (/^(type\\s+)?\\{/.test(declaration) || declaration.startsWith(\"*\")) {\n for (const [, name] of declaration.matchAll(/(?:\\btype\\s+)?(\\w+)(?=\\s*[,}])/g)) {\n if (name !== \"type\") add(name!, \"re-export\");\n }\n }\n }\n return signatures;\n}\n\nexport interface Difference {\n readonly file: string;\n readonly symbol: string;\n readonly kind: \"changed\" | \"missing\" | \"added\";\n}\n\nexport function differences(\n file: string,\n skeleton: string,\n actual: string,\n only?: readonly string[],\n): Difference[] {\n const wanted = signaturesOf(skeleton);\n const found = signaturesOf(actual);\n const names = new Set([...wanted.keys(), ...found.keys()]);\n const out: Difference[] = [];\n for (const symbol of [...names].sort()) {\n if (only && !only.includes(symbol)) continue;\n const before = wanted.get(symbol);\n const after = found.get(symbol);\n if (before === undefined) out.push({ file, symbol, kind: \"added\" });\n else if (after === undefined) out.push({ file, symbol, kind: \"missing\" });\n else if (before !== after) out.push({ file, symbol, kind: \"changed\" });\n }\n return out;\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"spec-kit.js","sourceRoot":"","sources":["../src/spec-kit.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"spec-kit.js","sourceRoot":"","sources":["../src/spec-kit.ts"],"names":[],"mappings":"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","sourcesContent":["import { createHash } from \"node:crypto\";\nimport {\n createServer as createHttpServer,\n type IncomingMessage,\n type Server,\n type ServerResponse,\n} from \"node:http\";\nimport type { AddressInfo } from \"node:net\";\n\nimport {\n answerStatement,\n betterAuthProvider,\n deviceCommitment,\n parlorAuth,\n promptStatement,\n statementBytes,\n vouchStatement,\n} from \"@parlor/auth\";\nimport {\n type AnswerToSign,\n HOST_PROTOCOL,\n type ItemSignature,\n type PromptToSign,\n} from \"@parlor/chat\";\nimport { chat } from \"@parlor/chat/server\";\nimport { asId, defineAction } from \"@parlor/core\";\nimport { createRegistry } from \"@parlor/core/registry\";\nimport { createDatabase, type DatabaseHandle } from \"@parlor/data\";\nimport {\n createServer,\n type DeviceKeys,\n type DeviceVouch,\n type FrameworkServer,\n} from \"@parlor/server\";\nimport { betterAuth } from \"better-auth\";\nimport { memoryAdapter } from \"better-auth/adapters/memory\";\nimport { getAuthTables } from \"better-auth/db\";\nimport { serve } from \"srvx\";\nimport { z } from \"zod\";\n\nimport { hostAssertion } from \"./assertion.js\";\nimport type { AppGrant, HostKeys } from \"./grants.js\";\nimport type { TrustedDevice, TrustStore } from \"./trust.js\";\n\nexport const PASSWORD = \"correct horse battery staple\";\n\nconst digest = (password: string) => createHash(\"sha256\").update(password).digest(\"hex\");\n\nexport class Browser {\n readonly #cookies = new Map<string, string>();\n\n constructor(readonly origin: string) {}\n\n async fetch(url: string, init: RequestInit = {}): Promise<Response> {\n const headers = new Headers(init.headers);\n if (this.#cookies.size > 0) {\n headers.set(\n \"cookie\",\n [...this.#cookies].map(([name, value]) => `${name}=${value}`).join(\"; \"),\n );\n }\n if (init.method === \"POST\" && !headers.has(\"origin\"))\n headers.set(\"origin\", this.origin);\n const response = await fetch(new URL(url, this.origin), {\n ...init,\n headers,\n redirect: \"manual\",\n });\n for (const cookie of response.headers.getSetCookie()) {\n const [pair] = cookie.split(\";\");\n const at = pair!.indexOf(\"=\");\n this.#cookies.set(pair!.slice(0, at), pair!.slice(at + 1));\n }\n return response;\n }\n\n async consent(\n url: string,\n decision: \"connect\" | \"cancel\",\n ): Promise<{\n readonly page: string;\n readonly answer: Response;\n }> {\n const page = await (await this.fetch(url)).text();\n const fields = new URLSearchParams(\n [...page.matchAll(/<input type=\"hidden\" name=\"([^\"]+)\" value=\"([^\"]*)\">/g)].map(\n (match) => [match[1]!, match[2]!.replaceAll(\"&amp;\", \"&\")],\n ),\n );\n fields.set(\"decision\", decision);\n const action = /<form method=\"post\" action=\"([^\"]+)\"/.exec(page)?.[1] ?? \"\";\n const answer = await this.fetch(action, {\n method: \"POST\",\n headers: { \"content-type\": \"application/x-www-form-urlencoded\" },\n body: fields.toString(),\n });\n return { page, answer };\n }\n}\n\nexport interface SpecApp {\n readonly origin: string;\n readonly server: FrameworkServer;\n signUp(name: string): Promise<Browser>;\n close(): Promise<void>;\n}\n\nexport async function startSpecApp(): Promise<SpecApp> {\n const database: DatabaseHandle = await createDatabase({ dataDir: \"memory://\" });\n let server: FrameworkServer | undefined;\n const listener = serve({\n port: 0,\n hostname: \"127.0.0.1\",\n silent: true,\n fetch: (request) => server!.fetch(request),\n });\n await listener.ready();\n const origin = new URL(listener.url!).origin;\n const authOptions = parlorAuth({\n origin,\n signInPage: \"/sign-in\",\n appName: \"Hello\",\n secret: \"a-test-secret-that-is-long-enough-for-better-auth\",\n emailAndPassword: {\n enabled: true,\n password: {\n hash: (password) => Promise.resolve(digest(password)),\n verify: ({ hash, password }) => Promise.resolve(digest(password) === hash),\n },\n },\n });\n const tables = Object.values(getAuthTables(authOptions)).map((table) => [\n table.modelName,\n [],\n ]);\n const instance = betterAuth({\n ...authOptions,\n database: memoryAdapter(Object.fromEntries(tables)),\n });\n server = createServer({\n actions: createRegistry({\n listTasks: defineAction({\n description: \"List tasks.\",\n input: z.object({}),\n run: () => [],\n }),\n }),\n auth: betterAuthProvider({ instance }),\n plugins: [chat()],\n database: {\n read: () => database.read(),\n transaction: (run) => database.transaction(run),\n listen: (channel, handler, options) => database.listen(channel, handler, options),\n },\n });\n return {\n origin,\n server,\n async signUp(name) {\n const browser = new Browser(origin);\n const response = await browser.fetch(\"/_parlor/auth/sign-up/email\", {\n method: \"POST\",\n headers: { \"content-type\": \"application/json\" },\n body: JSON.stringify({\n name,\n email: `${name.toLowerCase()}@example.com`,\n password: PASSWORD,\n }),\n });\n if (response.status !== 200) throw new Error(`sign-up answered ${response.status}`);\n return browser;\n },\n async close() {\n await listener.close(true);\n await server!.close();\n },\n };\n}\n\nexport function memoryHostKeys(): HostKeys & {\n readonly origins: () => readonly string[];\n} {\n const kept = new Map<string, { key: CryptoKey; kid: string; grantId: string }>();\n const sign = (key: CryptoKey) => async (payload: Uint8Array) =>\n Buffer.from(\n await crypto.subtle.sign(\n { name: \"ECDSA\", hash: \"SHA-256\" },\n key,\n new Uint8Array(payload),\n ),\n ).toString(\"base64url\");\n return {\n origins: () => [...kept.keys()],\n async create(appOrigin) {\n const pair = await crypto.subtle.generateKey(\n { name: \"ECDSA\", namedCurve: \"P-256\" },\n false,\n [\"sign\", \"verify\"],\n );\n const { kty, crv, x, y } = await crypto.subtle.exportKey(\"jwk\", pair.publicKey);\n const publicKey = { kty: kty!, crv: crv!, x: x!, y: y! };\n const thumbprint = createHash(\"sha256\")\n .update(JSON.stringify({ crv, kty, x, y }))\n .digest(\"base64url\");\n return {\n publicKey,\n thumbprint,\n sign: sign(pair.privateKey),\n keep: async (grantId) => {\n kept.set(appOrigin, { key: pair.privateKey, kid: thumbprint, grantId });\n },\n };\n },\n async assert(appOrigin, request) {\n const key = kept.get(appOrigin);\n if (!key) throw new Error(`no key for ${appOrigin}`);\n return hostAssertion(sign(key.key), key, request);\n },\n async remove(appOrigin) {\n kept.delete(appOrigin);\n },\n };\n}\n\nexport function memoryTrust(): TrustStore & { readonly pins: () => TrustedDevice[] } {\n const pinned = new Map<string, TrustedDevice>();\n const keyOf = (appOrigin: string, deviceId: string) => `${appOrigin}\\n${deviceId}`;\n return {\n pins: () => [...pinned.values()],\n get: async (appOrigin, deviceId) => pinned.get(keyOf(appOrigin, deviceId)),\n list: async (appOrigin) =>\n [...pinned.entries()]\n .filter(([key]) => key.startsWith(`${appOrigin}\\n`))\n .map(([, device]) => device),\n pin: async (appOrigin, device) =>\n void pinned.set(keyOf(appOrigin, device.deviceId), device),\n forget: async (appOrigin, deviceId) => {\n for (const key of [...pinned.keys()]) {\n if (\n key.startsWith(`${appOrigin}\\n`) &&\n (deviceId === undefined || key.endsWith(`\\n${deviceId}`))\n ) {\n pinned.delete(key);\n }\n }\n },\n };\n}\n\nconst ES256 = { name: \"ECDSA\", hash: \"SHA-256\" } as const;\n\nexport class TestDevice {\n private constructor(\n readonly keys: DeviceKeys,\n private readonly signing: CryptoKey,\n private readonly presence: CryptoKey,\n ) {}\n\n static async create(\n id = \"device-1\",\n name = \"Chrome on macOS\",\n platform = \"web\",\n ): Promise<TestDevice> {\n const make = async () => {\n const pair = await crypto.subtle.generateKey(\n { name: \"ECDSA\", namedCurve: \"P-256\" },\n true,\n [\"sign\", \"verify\"],\n );\n const { kty, crv, x, y } = await crypto.subtle.exportKey(\"jwk\", pair.publicKey);\n return {\n privateKey: pair.privateKey,\n publicKey: { kty: kty!, crv: crv!, x: x!, y: y! },\n };\n };\n const [signing, presence] = [await make(), await make()];\n return new TestDevice(\n {\n id: asId(\"device\", id),\n name,\n platform,\n signingKey: signing.publicKey,\n presenceKey: {\n format: \"es256-raw\",\n keyId: \"presence\",\n publicKey: presence.publicKey,\n },\n },\n signing.privateKey,\n presence.privateKey,\n );\n }\n\n get id() {\n return this.keys.id;\n }\n\n private async sign(\n key: CryptoKey,\n bytes: Uint8Array,\n presence: \"none\" | \"user\",\n at: number,\n ) {\n const signature = await crypto.subtle.sign(ES256, key, new Uint8Array(bytes));\n return {\n deviceId: this.id,\n at,\n signature: {\n keyId: \"key\",\n presence,\n format: \"es256-raw\",\n signature: Buffer.from(signature).toString(\"base64url\"),\n },\n } satisfies ItemSignature;\n }\n\n async signPrompt(\n app: string,\n prompt: PromptToSign,\n at: number,\n presence = false,\n ): Promise<ItemSignature> {\n const statement = await promptStatement(app, prompt, at);\n return this.sign(\n presence ? this.presence : this.signing,\n statementBytes(statement),\n presence ? \"user\" : \"none\",\n at,\n );\n }\n\n async signAnswer(\n app: string,\n answer: AnswerToSign,\n at: number,\n presence: boolean,\n ): Promise<ItemSignature> {\n const statement = await answerStatement(app, answer, at);\n return this.sign(\n presence ? this.presence : this.signing,\n statementBytes(statement),\n presence ? \"user\" : \"none\",\n at,\n );\n }\n\n /** This device's vouch for `device`, signed with its presence key unless `presence` is false. */\n async vouchFor(\n app: string,\n device: DeviceKeys,\n at: number,\n options: { readonly presence?: boolean; readonly commitment?: string } = {},\n ): Promise<DeviceVouch> {\n const commitment =\n options.commitment ??\n (await deviceCommitment(\n app,\n device.id,\n device.signingKey,\n device.presenceKey?.publicKey,\n ));\n const presence = options.presence ?? true;\n const { signature } = await this.sign(\n presence ? this.presence : this.signing,\n statementBytes(vouchStatement(app, this.id, device.id, commitment, at)),\n presence ? \"user\" : \"none\",\n at,\n );\n return { voucher: this.id, commitment, at, signature };\n }\n}\n\nexport interface StubApp {\n readonly origin: string;\n readonly seen: {\n readonly method: string;\n readonly path: string;\n readonly body: string;\n }[];\n close(): Promise<void>;\n}\n\nexport type Route = (\n request: IncomingMessage,\n body: string,\n response: ServerResponse,\n) => boolean;\n\nexport async function stubApp(route: Route): Promise<StubApp> {\n const seen: StubApp[\"seen\"][number][] = [];\n const server: Server = createHttpServer((request, response) => {\n let body = \"\";\n request.setEncoding(\"utf8\");\n request.on(\"data\", (chunk: string) => (body += chunk));\n request.on(\"end\", () => {\n const path = new URL(request.url ?? \"/\", \"http://stub\").pathname;\n seen.push({ method: request.method ?? \"GET\", path, body });\n if (!route(request, body, response)) response.writeHead(404).end();\n });\n });\n await new Promise<void>((resolve) => server.listen(0, \"127.0.0.1\", resolve));\n return {\n origin: `http://127.0.0.1:${(server.address() as AddressInfo).port}`,\n seen,\n close: () =>\n new Promise((resolve) => {\n server.closeAllConnections();\n server.close(() => resolve());\n }),\n };\n}\n\nexport const json = (response: ServerResponse, value: unknown, status = 200) =>\n response\n .writeHead(status, { \"content-type\": \"application/json\" })\n .end(JSON.stringify(value));\n\nexport const welcome = {\n id: \"h\",\n accepted: true,\n protocol: HOST_PROTOCOL,\n leaseMs: 60_000,\n heartbeatMs: 30_000,\n};\n\nexport function hostRoutes(options: {\n readonly wake: boolean;\n readonly turn?: () => unknown;\n}): Route {\n let claimed = false;\n return (request, body, response) => {\n const path = new URL(request.url ?? \"/\", \"http://stub\").pathname;\n const action = path.startsWith(\"/_parlor/chat/actions/\")\n ? path.split(\"/\").at(-1)\n : undefined;\n if (action === \"hostHello\")\n return (json(response, { data: welcome, tags: [] }), true);\n if (action === \"hostClaim\") {\n if (options.turn && !claimed) {\n claimed = true;\n return (json(response, { data: options.turn(), tags: [] }), true);\n }\n return (\n json(response, { error: { code: \"not_found\", message: \"No turn.\" } }, 404), true\n );\n }\n if (action === \"hostSignals\") return (json(response, { data: [], tags: [] }), true);\n if (action) {\n return (\n json(response, {\n data: {\n id: \"t1\",\n leaseUntil: Date.now() + 60_000,\n token: { token: \"turn-2\", expiresAt: Date.now() + 60_000 },\n },\n tags: [],\n }),\n true\n );\n }\n if (path === \"/_parlor/sync/token\") {\n return (\n json(response, {\n protocol: 1,\n transport: \"sse\",\n endpoint: \"/_parlor/sync/stream\",\n pollIntervalMs: 2_000,\n }),\n true\n );\n }\n if (path === \"/_parlor/sync/stream\") {\n response.writeHead(200, { \"content-type\": \"text/event-stream\" });\n response.write(\n `event: handshake\\ndata: ${JSON.stringify({ capabilities: [], keepAliveMs: 10_000 })}\\n\\n`,\n );\n if (options.wake) {\n const events = [{ version: 1, id: \"e1\", tags: [[\"parlor_chat\", \"t1\"]] }];\n response.write(\n `event: message\\ndata: ${JSON.stringify({ events, cursor: \"1.e1\" })}\\n\\n`,\n );\n }\n return true;\n }\n if (path === \"/_parlor/mcp\") {\n const message = JSON.parse(body) as { id?: number; method: string };\n if (message.id === undefined) return (response.writeHead(202).end(), true);\n const result =\n message.method === \"initialize\"\n ? {\n protocolVersion: \"2025-06-18\",\n capabilities: { tools: {} },\n serverInfo: { name: \"stub\", version: \"1\" },\n }\n : message.method === \"tools/list\"\n ? { tools: [] }\n : { content: [{ type: \"text\", text: \"[]\" }] };\n return (json(response, { jsonrpc: \"2.0\", id: message.id, result }), true);\n }\n return false;\n };\n}\n\nexport const claimedTurn = (\n turnId: string,\n agentId: string,\n context: string,\n text: string,\n) => ({\n id: \"t1\",\n turnId,\n agent: { hostId: \"h-A\", agentId },\n clientId: \"tab\",\n prompt: {\n id: `p-${turnId}`,\n threadId: \"t1\",\n turnId,\n seq: 1,\n at: Date.now(),\n author: \"user\",\n kind: \"prompt\",\n body: { text, agent: { hostId: \"h-A\", agentId } },\n },\n device: undefined,\n context,\n token: { token: \"turn-1\", expiresAt: Date.now() + 60_000 },\n leaseUntil: Date.now() + 60_000,\n});\n\nexport const grantFor = (origin: string, name: string, workspace: string): AppGrant => ({\n appOrigin: origin,\n appName: name,\n grantId: asId(\"grant\", `host:${name}`),\n hostId: asId(\"host\", `h-${name}`),\n account: { userId: asId(\"user\", \"alice\"), name: \"Alice\", email: \"alice@example.com\" },\n workspace,\n createdAt: 1,\n});\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"fake-agent.js","sourceRoot":"","sources":["../../src/testing/fake-agent.ts"],"names":[],"mappings":"AAAA,OAAO,EAAuC,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAChF,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAEhD,OAAO,EAOL,aAAa,GAId,MAAM,WAAW,CAAC;AA0DnB,MAAM,KAAK,GAAG,OAAO,CAAC;AACtB,MAAM,MAAM,GAAG,QAAQ,CAAC;AAExB,MAAM,kBAAkB,GAAG;IACzB,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,YAAY,EAAE;IACnD,EAAE,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,aAAa,EAAE;CAC9C,CAAC;AAEX,SAAS,KAAK,CAAC,EAAU,EAAE,MAAmB;IAC5C,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;QAC7B,IAAI,MAAM,CAAC,OAAO;YAAE,OAAO,OAAO,EAAE,CAAC;QACrC,MAAM,KAAK,GAAG,UAAU,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;QACtC,MAAM,CAAC,gBAAgB,CACrB,OAAO,EACP,GAAG,EAAE;YACH,YAAY,CAAC,KAAK,CAAC,CAAC;YACpB,OAAO,EAAE,CAAC;QACZ,CAAC,EACD,EAAE,IAAI,EAAE,IAAI,EAAE,CACf,CAAC;IACJ,CAAC,CAAC,CAAC;AACL,CAAC;AAED,SAAS,QAAQ,CAAC,MAAuB,EAAE,IAAY;IACrD,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;IAC5B,MAAM,QAAQ,GAAG,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;IAC1D,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;IAC9D,IAAI,KAAK;QAAE,OAAO,KAAK,CAAC;IACxB,OAAO;QACL;YACE,IAAI,EAAE,OAAO;YACb,MAAM,EAAE;gBACN,MAAM,CAAC,QAAQ,KAAK,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,0BAA0B,QAAQ,IAAI;aAC3E;SACF;KACF,CAAC;AACJ,CAAC;AAED,MAAM,cAAc;IACT,MAAM,CAAiC;IACvC,QAAQ,GAAG,IAAI,GAAG,EAAsD,CAAC;IACzE,MAAM,CAAgB;IAC/B,OAAO,GAAG,CAAC,CAAC;IAEZ,YAAY,MAAsB;QAChC,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC,EAAE;YACpD,GAAG,EAAE,EAAE,GAAG,OAAO,CAAC,GAAG,EAAE,GAAG,MAAM,CAAC,GAAG,EAAE;YACtC,KAAK,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC;SAChC,CAAC,CAAC;QACH,eAAe,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,EAAE;YACjE,IAAI,OAAgC,CAAC;YACrC,IAAI,CAAC;gBACH,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAA4B,CAAC;YACxD,CAAC;YAAC,MAAM,CAAC;gBACP,OAAO;YACT,CAAC;YACD,IAAI,OAAO,OAAO,CAAC,EAAE,KAAK,QAAQ;gBAAE,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC;QAC/E,CAAC,CAAC,CAAC;QACH,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,YAAY,EAAE;YACvC,eAAe,EAAE,YAAY;YAC7B,YAAY,EAAE,EAAE;YAChB,UAAU,EAAE,EAAE,IAAI,EAAE,YAAY,EAAE,OAAO,EAAE,OAAO,EAAE;SACrD,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,2BAA2B,EAAE,CAAC,CAAC,CAAC;IACrF,CAAC;IAED,KAAK,CAAC,OAAgB;QACpB,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IAC1D,CAAC;IAED,OAAO,CAAC,MAAc,EAAE,MAAe;QACrC,MAAM,EAAE,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC;QAC1B,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;YAC7B,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC,OAAO,EAAE,EAAE;gBAChC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;gBACzB,OAAO,CAAC,OAAO,CAAC,CAAC;YACnB,CAAC,CAAC,CAAC;YACH,IAAI,CAAC,KAAK,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;QACrD,CAAC,CAAC,CAAC;IACL,CAAC;IAED,KAAK,CAAC,QAAQ,CAAC,IAAY,EAAE,KAAc;QACzC,MAAM,IAAI,CAAC,MAAM,CAAC;QAClB,OAAO,IAAI,CAAC,OAAO,CAAC,YAAY,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC,CAAC;IAChE,CAAC;IAED,KAAK;QACH,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;IACrB,CAAC;CACF;AAED,SAAS,UAAU,CAAC,OAAgC;IAClD,MAAM,KAAK,GAAG,OAAO,CAAC,KAAyC,CAAC;IAChE,IAAI,KAAK;QAAE,OAAO,EAAE,IAAI,EAAE,KAAK,CAAC,OAAO,IAAI,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;IACnE,MAAM,MAAM,GAAG,OAAO,CAAC,MAEV,CAAC;IACd,MAAM,IAAI,GAAG,CAAC,MAAM,EAAE,OAAO,IAAI,EAAE,CAAC;SACjC,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,IAAI,KAAK,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;SACrF,IAAI,CAAC,IAAI,CAAC,CAAC;IACd,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,KAAK,IAAI,EAAE,CAAC;AACpD,CAAC;AAED,gFAAgF;AAChF,MAAM,UAAU,cAAc,CAAC,MAAuB,EAAE,EAAY;IAClE,MAAM,QAAQ,GAAG,IAAI,GAAG,EAAqC,CAAC;IAC9D,MAAM,OAAO,GAAG,IAAI,GAAG,EAA0B,CAAC;IAClD,IAAI,KAAK,GAAG,CAAC,CAAC;IAEd,MAAM,MAAM,GAAG,KAAK,EAClB,IAAU,EACV,UAAkB,EAClB,KAAa,EACb,IAGC,EACD,EAAE;QACF,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC;YAC5B,IAAI,EAAE,YAAY;YAClB,UAAU;YACV,KAAK;YACL,QAAQ,EAAE,IAAI,CAAC,QAAQ;YACvB,GAAG,EAAE,IAAI,CAAC,GAAG;YACb,OAAO,EAAE,kBAAkB;SAC5B,CAAC,CAAC;QACH,OAAO,MAAM,CAAC,IAAI,KAAK,UAAU,IAAI,MAAM,CAAC,QAAQ,KAAK,KAAK,CAAC;IACjE,CAAC,CAAC;IAEF,MAAM,IAAI,GAAG,KAAK,EAChB,SAAiB,EACjB,IAAc,EACd,IAAU,EACuB,EAAE;QACnC,QAAQ,IAAI,CAAC,IAAI,EAAE,CAAC;YAClB,KAAK,OAAO;gBACV,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;oBAChC,IAAI,IAAI,CAAC,SAAS,CAAC,OAAO;wBAAE,OAAO,WAAW,CAAC;oBAC/C,MAAM,IAAI,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,IAAI,CAAC,GAAG,EAAE,IAAI,KAAK,EAAE,EAAE,CAAC,CAAC;oBACvE,IAAI,IAAI,CAAC,SAAS;wBAAE,MAAM,KAAK,CAAC,IAAI,GAAG,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC;gBACzE,CAAC;gBACD,OAAO,SAAS,CAAC;YACnB,KAAK,SAAS;gBACZ,MAAM,IAAI,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;gBACxD,OAAO,SAAS,CAAC;YACnB,KAAK,MAAM,EAAE,CAAC;gBACZ,MAAM,UAAU,GAAG,QAAQ,EAAE,KAAK,EAAE,CAAC;gBACrC,MAAM,IAAI,CAAC,MAAM,CAAC;oBAChB,IAAI,EAAE,YAAY;oBAClB,UAAU;oBACV,KAAK,EAAE,IAAI,CAAC,KAAK;oBACjB,QAAQ,EAAE,IAAI,CAAC,QAAQ;oBACvB,GAAG,EAAE,IAAI,CAAC,GAAG;iBACd,CAAC,CAAC;gBACH,MAAM,OAAO,GACX,CAAC,IAAI,CAAC,aAAa;oBACnB,CAAC,MAAM,MAAM,CAAC,IAAI,EAAE,UAAU,EAAE,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC,CAAC;gBACtE,MAAM,IAAI,CAAC,MAAM,CAAC;oBAChB,IAAI,EAAE,aAAa;oBACnB,UAAU;oBACV,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,QAAQ;oBACxC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC;iBACzC,CAAC,CAAC;gBACH,OAAO,SAAS,CAAC;YACnB,CAAC;YACD,KAAK,UAAU,EAAE,CAAC;gBAChB,MAAM,MAAM,GAAG,QAAQ,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;gBAC5C,IAAI,CAAC,MAAM;oBAAE,MAAM,IAAI,KAAK,CAAC,2CAA2C,CAAC,CAAC;gBAC1E,MAAM,UAAU,GAAG,QAAQ,EAAE,KAAK,EAAE,CAAC;gBACrC,MAAM,GAAG,GAAG,EAAE,MAAM,EAAE,MAAM,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC;gBACrD,MAAM,IAAI,CAAC,MAAM,CAAC;oBAChB,IAAI,EAAE,YAAY;oBAClB,UAAU;oBACV,KAAK,EAAE,IAAI,CAAC,IAAI;oBAChB,QAAQ,EAAE,OAAO;oBACjB,GAAG;iBACJ,CAAC,CAAC;gBACH,IAAI,CAAC,CAAC,MAAM,MAAM,CAAC,IAAI,EAAE,UAAU,EAAE,IAAI,CAAC,IAAI,EAAE,EAAE,QAAQ,EAAE,OAAO,EAAE,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC;oBAC7E,MAAM,IAAI,CAAC,MAAM,CAAC;wBAChB,IAAI,EAAE,aAAa;wBACnB,UAAU;wBACV,MAAM,EAAE,QAAQ;wBAChB,MAAM,EAAE,QAAQ;qBACjB,CAAC,CAAC;oBACH,OAAO,SAAS,CAAC;gBACnB,CAAC;gBACD,IAAI,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;gBACpC,IAAI,CAAC,MAAM,EAAE,CAAC;oBACZ,MAAM,GAAG,IAAI,cAAc,CAAC,MAAM,CAAC,CAAC;oBACpC,OAAO,CAAC,GAAG,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;gBACjC,CAAC;gBACD,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,UAAU,CAAC,MAAM,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;gBAClF,MAAM,IAAI,CAAC,MAAM,CAAC;oBAChB,IAAI,EAAE,aAAa;oBACnB,UAAU;oBACV,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,WAAW;oBACvC,MAAM,EAAE,IAAI;iBACb,CAAC,CAAC;gBACH,OAAO,SAAS,CAAC;YACnB,CAAC;YACD,KAAK,MAAM;gBACT,MAAM,IAAI,CAAC,MAAM,CAAC;oBAChB,IAAI,EAAE,MAAM;oBACZ,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC,CAAC;iBACzE,CAAC,CAAC;gBACH,OAAO,SAAS,CAAC;YACnB,KAAK,UAAU;gBACb,MAAM,IAAI,CAAC,GAAG,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;gBACjF,OAAO,SAAS,CAAC;YACnB,KAAK,iBAAiB;gBACpB,MAAM,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,EAAE;oBAClC,IAAI,IAAI,CAAC,SAAS,CAAC,OAAO;wBAAE,OAAO,OAAO,EAAE,CAAC;oBAC7C,IAAI,CAAC,SAAS,CAAC,gBAAgB,CAAC,OAAO,EAAE,GAAG,EAAE,CAAC,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;gBAC5E,CAAC,CAAC,CAAC;gBACH,OAAO,WAAW,CAAC;YACrB,KAAK,MAAM;gBACT,OAAO,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACjC,KAAK,MAAM;gBACT,OAAO,IAAI,CAAC,MAAM,CAAC;QACvB,CAAC;IACH,CAAC,CAAC;IAEF,MAAM,MAAM,GAAG,aAAa,CAC1B;QACE,YAAY,EAAE;YACZ,MAAM,EAAE,MAAM,CAAC,SAAS,EAAE,MAAM,KAAK,IAAI;YACzC,KAAK,EAAE,MAAM,CAAC,SAAS,EAAE,KAAK,KAAK,IAAI;YACvC,OAAO,EAAE,MAAM,CAAC,SAAS,EAAE,OAAO,KAAK,IAAI;SAC5C;QACD,UAAU,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE;YAC1B,MAAM,EAAE,GAAG,gBAAgB,QAAQ,CAAC,IAAI,GAAG,CAAC,EAAE,CAAC;YAC/C,QAAQ,CAAC,GAAG,CAAC,EAAE,EAAE,KAAK,CAAC,UAAU,CAAC,CAAC;YACnC,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,CAAC,SAAS,EAAE,KAAK,EAAE,CAAC;QAChD,CAAC;QACD,MAAM,EAAE,KAAK,EAAE,SAAS,EAAE,MAA8B,EAAE,IAAI,EAAE,EAAE;YAChE,MAAM,IAAI,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAC1D,KAAK,MAAM,IAAI,IAAI,QAAQ,CAAC,MAAM,EAAE,IAAI,CAAC,EAAE,CAAC;gBAC1C,IAAI,IAAI,CAAC,SAAS,CAAC,OAAO;oBAAE,OAAO,WAAW,CAAC;gBAC/C,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,SAAS,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;gBAC/C,IAAI,IAAI;oBAAE,OAAO,IAAI,CAAC;YACxB,CAAC;YACD,OAAO,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,UAAU,CAAC;QAC3D,CAAC;KACF,EACD,EAAE,CACH,CAAC;IACF,OAAO,MAAM,CAAC,OAAO,CAAC,GAAG,EAAE;QACzB,KAAK,MAAM,MAAM,IAAI,OAAO,CAAC,MAAM,EAAE;YAAE,MAAM,CAAC,KAAK,EAAE,CAAC;IACxD,CAAC,CAAC,CAAC;AACL,CAAC;AAED,wEAAwE;AACxE,MAAM,UAAU,gBAAgB,CAAC,KAAa,EAAE,UAAkB;IAChE,OAAO;QACL,EAAE,EAAE,MAAM;QACV,IAAI,EAAE,YAAY;QAClB,MAAM,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,KAAK,EAAE,UAAU,CAAC,EAAE;QACtE,MAAM,EAAE,MAAM;KACf,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"fake-agent.js","sourceRoot":"","sources":["../../src/testing/fake-agent.ts"],"names":[],"mappings":"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","sourcesContent":["import { type ChildProcessWithoutNullStreams, spawn } from \"node:child_process\";\nimport { createInterface } from \"node:readline\";\n\nimport {\n type AcpStdio,\n type AgentAsk,\n type AgentAskAnswer,\n type AgentModes,\n type AgentUpdate,\n type PromptBlock,\n serveAcpAgent,\n type StdioMcpServer,\n type StopReason,\n type ToolKind,\n} from \"../acp.js\";\nimport type { AgentProfile } from \"../agents.js\";\n\n/**\n * A scripted agent on the real ACP transport (through `serveAcpAgent`), so the adapter,\n * fold, permission, cancel and MCP proxy paths are tested as Claude Code and Codex drive\n * them. A prompt's text names the step list to play: the whole text, or its last line when\n * the host put its context block first. Every reply chunk goes out prefixed with\n * `[t:<epoch ms>]`, the time it was written.\n */\nexport interface FakeAgentScript {\n readonly advertise?:\n | {\n readonly resume?: boolean | undefined;\n readonly close?: boolean | undefined;\n readonly mcpHttp?: boolean | undefined;\n readonly modes?: AgentModes | undefined;\n }\n | undefined;\n readonly steps: Readonly<Record<string, readonly FakeStep[]>>;\n /** For a prompt no step names: reply with it. */\n readonly fallback?: \"echo\" | undefined;\n}\n\nexport type FakeStep =\n | {\n readonly kind: \"reply\";\n readonly chunks: readonly string[];\n readonly perSecond?: number;\n }\n | { readonly kind: \"thought\"; readonly text: string }\n | {\n readonly kind: \"tool\";\n readonly title: string;\n readonly toolKind: ToolKind;\n readonly mcp?: { readonly server: string; readonly tool: string } | undefined;\n readonly askPermission: boolean;\n /** The permission request's own title, when it differs from the call's. */\n readonly askTitle?: string | undefined;\n }\n /** Calls an app tool through the MCP server the host passed in `session/new`. */\n | { readonly kind: \"call_app\"; readonly tool: string; readonly input: unknown }\n | { readonly kind: \"plan\"; readonly entries: readonly string[] }\n | {\n readonly kind: \"question\";\n readonly message: string;\n readonly schema: Readonly<Record<string, unknown>>;\n }\n | { readonly kind: \"wait_for_cancel\" }\n | { readonly kind: \"exit\"; readonly code: number }\n | { readonly kind: \"stop\"; readonly reason: Exclude<StopReason, \"cancelled\"> };\n\ninterface Peer {\n update(update: AgentUpdate): Promise<void>;\n ask(ask: AgentAsk): Promise<AgentAskAnswer>;\n readonly cancelled: AbortSignal;\n}\n\nconst ALLOW = \"allow\";\nconst REJECT = \"reject\";\n\nconst PERMISSION_OPTIONS = [\n { id: ALLOW, label: \"Allow\", effect: \"allow_once\" },\n { id: REJECT, label: \"Reject\", effect: \"reject_once\" },\n] as const;\n\nfunction sleep(ms: number, signal: AbortSignal): Promise<void> {\n return new Promise((resolve) => {\n if (signal.aborted) return resolve();\n const timer = setTimeout(resolve, ms);\n signal.addEventListener(\n \"abort\",\n () => {\n clearTimeout(timer);\n resolve();\n },\n { once: true },\n );\n });\n}\n\nfunction stepsFor(script: FakeAgentScript, text: string): readonly FakeStep[] {\n const trimmed = text.trim();\n const lastLine = trimmed.split(\"\\n\").at(-1)?.trim() ?? \"\";\n const named = script.steps[trimmed] ?? script.steps[lastLine];\n if (named) return named;\n return [\n {\n kind: \"reply\",\n chunks: [\n script.fallback === \"echo\" ? text : `No step list is named \"${lastLine}\".`,\n ],\n },\n ];\n}\n\nclass McpStdioClient {\n readonly #child: ChildProcessWithoutNullStreams;\n readonly #pending = new Map<number, (message: Record<string, unknown>) => void>();\n readonly #ready: Promise<void>;\n #nextId = 1;\n\n constructor(server: StdioMcpServer) {\n this.#child = spawn(server.command, [...server.args], {\n env: { ...process.env, ...server.env },\n stdio: [\"pipe\", \"pipe\", \"pipe\"],\n });\n createInterface({ input: this.#child.stdout }).on(\"line\", (line) => {\n let message: Record<string, unknown>;\n try {\n message = JSON.parse(line) as Record<string, unknown>;\n } catch {\n return;\n }\n if (typeof message.id === \"number\") this.#pending.get(message.id)?.(message);\n });\n this.#ready = this.request(\"initialize\", {\n protocolVersion: \"2025-06-18\",\n capabilities: {},\n clientInfo: { name: \"fake-agent\", version: \"0.0.0\" },\n }).then(() => this.#send({ jsonrpc: \"2.0\", method: \"notifications/initialized\" }));\n }\n\n #send(message: unknown) {\n this.#child.stdin.write(`${JSON.stringify(message)}\\n`);\n }\n\n request(method: string, params: unknown): Promise<Record<string, unknown>> {\n const id = this.#nextId++;\n return new Promise((resolve) => {\n this.#pending.set(id, (message) => {\n this.#pending.delete(id);\n resolve(message);\n });\n this.#send({ jsonrpc: \"2.0\", id, method, params });\n });\n }\n\n async callTool(name: string, input: unknown): Promise<Record<string, unknown>> {\n await this.#ready;\n return this.request(\"tools/call\", { name, arguments: input });\n }\n\n close() {\n this.#child.kill();\n }\n}\n\nfunction resultText(message: Record<string, unknown>): { text: string; failed: boolean } {\n const error = message.error as { message?: string } | undefined;\n if (error) return { text: error.message ?? \"error\", failed: true };\n const result = message.result as\n | { content?: { type: string; text?: string }[]; isError?: boolean }\n | undefined;\n const text = (result?.content ?? [])\n .flatMap((content) => (content.type === \"text\" && content.text ? [content.text] : []))\n .join(\"\\n\");\n return { text, failed: result?.isError === true };\n}\n\n/** The fixture's entry point: serves `script` on `io` (the process's stdio). */\nexport function serveFakeAgent(script: FakeAgentScript, io: AcpStdio): Promise<void> {\n const sessions = new Map<string, readonly StdioMcpServer[]>();\n const clients = new Map<string, McpStdioClient>();\n let tools = 0;\n\n const permit = async (\n peer: Peer,\n toolCallId: string,\n title: string,\n step: {\n readonly toolKind: ToolKind;\n readonly mcp?: { readonly server: string; readonly tool: string } | undefined;\n },\n ) => {\n const answer = await peer.ask({\n kind: \"permission\",\n toolCallId,\n title,\n toolKind: step.toolKind,\n mcp: step.mcp,\n options: PERMISSION_OPTIONS,\n });\n return answer.kind === \"selected\" && answer.optionId === ALLOW;\n };\n\n const play = async (\n sessionId: string,\n step: FakeStep,\n peer: Peer,\n ): Promise<StopReason | undefined> => {\n switch (step.kind) {\n case \"reply\":\n for (const chunk of step.chunks) {\n if (peer.cancelled.aborted) return \"cancelled\";\n await peer.update({ kind: \"text\", text: `[t:${Date.now()}]${chunk}` });\n if (step.perSecond) await sleep(1000 / step.perSecond, peer.cancelled);\n }\n return undefined;\n case \"thought\":\n await peer.update({ kind: \"thought\", text: step.text });\n return undefined;\n case \"tool\": {\n const toolCallId = `tool-${++tools}`;\n await peer.update({\n kind: \"tool_start\",\n toolCallId,\n title: step.title,\n toolKind: step.toolKind,\n mcp: step.mcp,\n });\n const allowed =\n !step.askPermission ||\n (await permit(peer, toolCallId, step.askTitle ?? step.title, step));\n await peer.update({\n kind: \"tool_update\",\n toolCallId,\n status: allowed ? \"completed\" : \"failed\",\n ...(allowed ? {} : { detail: \"denied\" }),\n });\n return undefined;\n }\n case \"call_app\": {\n const server = sessions.get(sessionId)?.[0];\n if (!server) throw new Error(\"The host gave this session no MCP server.\");\n const toolCallId = `tool-${++tools}`;\n const mcp = { server: server.name, tool: step.tool };\n await peer.update({\n kind: \"tool_start\",\n toolCallId,\n title: step.tool,\n toolKind: \"other\",\n mcp,\n });\n if (!(await permit(peer, toolCallId, step.tool, { toolKind: \"other\", mcp }))) {\n await peer.update({\n kind: \"tool_update\",\n toolCallId,\n status: \"failed\",\n detail: \"denied\",\n });\n return undefined;\n }\n let client = clients.get(sessionId);\n if (!client) {\n client = new McpStdioClient(server);\n clients.set(sessionId, client);\n }\n const { text, failed } = resultText(await client.callTool(step.tool, step.input));\n await peer.update({\n kind: \"tool_update\",\n toolCallId,\n status: failed ? \"failed\" : \"completed\",\n detail: text,\n });\n return undefined;\n }\n case \"plan\":\n await peer.update({\n kind: \"plan\",\n entries: step.entries.map((content) => ({ content, status: \"pending\" })),\n });\n return undefined;\n case \"question\":\n await peer.ask({ kind: \"question\", message: step.message, schema: step.schema });\n return undefined;\n case \"wait_for_cancel\":\n await new Promise<void>((resolve) => {\n if (peer.cancelled.aborted) return resolve();\n peer.cancelled.addEventListener(\"abort\", () => resolve(), { once: true });\n });\n return \"cancelled\";\n case \"exit\":\n return process.exit(step.code);\n case \"stop\":\n return step.reason;\n }\n };\n\n const served = serveAcpAgent(\n {\n capabilities: {\n resume: script.advertise?.resume === true,\n close: script.advertise?.close === true,\n mcpHttp: script.advertise?.mcpHttp === true,\n },\n newSession: async (input) => {\n const id = `fake-session-${sessions.size + 1}`;\n sessions.set(id, input.mcpServers);\n return { id, modes: script.advertise?.modes };\n },\n prompt: async (sessionId, blocks: readonly PromptBlock[], peer) => {\n const text = blocks.map((block) => block.text).join(\"\\n\");\n for (const step of stepsFor(script, text)) {\n if (peer.cancelled.aborted) return \"cancelled\";\n const stop = await play(sessionId, step, peer);\n if (stop) return stop;\n }\n return peer.cancelled.aborted ? \"cancelled\" : \"end_turn\";\n },\n },\n io,\n );\n return served.finally(() => {\n for (const client of clients.values()) client.close();\n });\n}\n\n/** A profile that launches the fixture at `entry` with `scriptFile`. */\nexport function fakeAgentProfile(entry: string, scriptFile: string): AgentProfile {\n return {\n id: \"fake\",\n name: \"Fake agent\",\n launch: { kind: \"native\", command: \"node\", args: [entry, scriptFile] },\n binary: \"node\",\n };\n}\n"]}
package/dist/trust.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"trust.js","sourceRoot":"","sources":["../src/trust.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAuB1C,MAAM,UAAU,cAAc,CAAC,IAAY;IACzC,MAAM,IAAI,GAAG,QAAQ,CAAO,IAAI,CAAC,CAAC;IAClC,OAAO;QACL,GAAG,EAAE,KAAK,EAAE,SAAS,EAAE,QAAQ,EAAE,EAAE;YACjC,MAAM,OAAO,GAAG,CAAC,MAAM,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,SAAS,CAAC,CAAC;YAC/C,OAAO,OAAO,IAAI,MAAM,CAAC,MAAM,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;QACrF,CAAC;QACD,IAAI,EAAE,KAAK,EAAE,SAAS,EAAE,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,MAAM,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC;QAC9E,GAAG,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,EAAE,CACzB,IAAI,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE;YAClB,CAAC,GAAG,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,GAAG,MAAM,CAAC;QACpD,CAAC,CAAC;QACJ,MAAM,EAAE,CAAC,SAAS,EAAE,QAAQ,EAAE,EAAE,CAC9B,IAAI,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE;YAClB,IAAI,QAAQ,KAAK,SAAS,EAAE,CAAC;gBAC3B,OAAO,GAAG,CAAC,SAAS,CAAC,CAAC;gBACtB,OAAO;YACT,CAAC;YACD,MAAM,MAAM,GAAG,GAAG,CAAC,SAAS,CAAC,CAAC;YAC9B,IAAI,CAAC,MAAM;gBAAE,OAAO;YACpB,OAAO,MAAM,CAAC,QAAQ,CAAC,CAAC;YACxB,IAAI,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,MAAM,KAAK,CAAC;gBAAE,OAAO,GAAG,CAAC,SAAS,CAAC,CAAC;QAC9D,CAAC,CAAC;KACL,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"trust.js","sourceRoot":"","sources":["../src/trust.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAuB1C,MAAM,UAAU,cAAc,CAAC,IAAY;IACzC,MAAM,IAAI,GAAG,QAAQ,CAAO,IAAI,CAAC,CAAC;IAClC,OAAO;QACL,GAAG,EAAE,KAAK,EAAE,SAAS,EAAE,QAAQ,EAAE,EAAE;YACjC,MAAM,OAAO,GAAG,CAAC,MAAM,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,SAAS,CAAC,CAAC;YAC/C,OAAO,OAAO,IAAI,MAAM,CAAC,MAAM,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;QACrF,CAAC;QACD,IAAI,EAAE,KAAK,EAAE,SAAS,EAAE,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,MAAM,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC;QAC9E,GAAG,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,EAAE,CACzB,IAAI,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE;YAClB,CAAC,GAAG,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,GAAG,MAAM,CAAC;QACpD,CAAC,CAAC;QACJ,MAAM,EAAE,CAAC,SAAS,EAAE,QAAQ,EAAE,EAAE,CAC9B,IAAI,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE;YAClB,IAAI,QAAQ,KAAK,SAAS,EAAE,CAAC;gBAC3B,OAAO,GAAG,CAAC,SAAS,CAAC,CAAC;gBACtB,OAAO;YACT,CAAC;YACD,MAAM,MAAM,GAAG,GAAG,CAAC,SAAS,CAAC,CAAC;YAC9B,IAAI,CAAC,MAAM;gBAAE,OAAO;YACpB,OAAO,MAAM,CAAC,QAAQ,CAAC,CAAC;YACxB,IAAI,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,MAAM,KAAK,CAAC;gBAAE,OAAO,GAAG,CAAC,SAAS,CAAC,CAAC;QAC9D,CAAC,CAAC;KACL,CAAC;AACJ,CAAC","sourcesContent":["import type { PinnedDevice } from \"@parlor/auth\";\n\nimport { jsonFile } from \"./json-file.js\";\n\nexport interface TrustedDevice extends PinnedDevice {\n readonly name: string;\n readonly platform: string;\n readonly approvedAt: number;\n /** `pairing`: it approved `connect` here; `local`: linked on this computer; `vouched`: a linked device vouched for it. */\n readonly via: \"pairing\" | \"local\" | \"vouched\";\n /** The linked device whose vouch pinned it. */\n readonly voucher?: string | undefined;\n /** When it last signed here with Face ID or Touch ID; `approvedAt` until it does. */\n readonly presenceAt?: number | undefined;\n}\n\nexport interface TrustStore {\n get(appOrigin: string, deviceId: string): Promise<TrustedDevice | undefined>;\n list(appOrigin: string): Promise<readonly TrustedDevice[]>;\n pin(appOrigin: string, device: TrustedDevice): Promise<void>;\n forget(appOrigin: string, deviceId?: string): Promise<void>;\n}\n\ntype Pins = Record<string, Record<string, TrustedDevice>>;\n\nexport function fileTrustStore(file: string): TrustStore {\n const pins = jsonFile<Pins>(file);\n return {\n get: async (appOrigin, deviceId) => {\n const devices = (await pins.read())[appOrigin];\n return devices && Object.hasOwn(devices, deviceId) ? devices[deviceId] : undefined;\n },\n list: async (appOrigin) => Object.values((await pins.read())[appOrigin] ?? {}),\n pin: (appOrigin, device) =>\n pins.change((all) => {\n (all[appOrigin] ??= {})[device.deviceId] = device;\n }),\n forget: (appOrigin, deviceId) =>\n pins.change((all) => {\n if (deviceId === undefined) {\n delete all[appOrigin];\n return;\n }\n const origin = all[appOrigin];\n if (!origin) return;\n delete origin[deviceId];\n if (Object.keys(origin).length === 0) delete all[appOrigin];\n }),\n };\n}\n"]}