@parlor/chat 0.1.0 → 0.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (43) hide show
  1. package/dist/events.js.map +1 -1
  2. package/dist/id-schemas.js.map +1 -1
  3. package/dist/index.d.ts +2 -2
  4. package/dist/index.d.ts.map +1 -1
  5. package/dist/index.js +1 -1
  6. package/dist/index.js.map +1 -1
  7. package/dist/items.d.ts +3 -0
  8. package/dist/items.d.ts.map +1 -1
  9. package/dist/items.js +8 -2
  10. package/dist/items.js.map +1 -1
  11. package/dist/limits.js.map +1 -1
  12. package/dist/model.d.ts +42 -0
  13. package/dist/model.d.ts.map +1 -1
  14. package/dist/model.js.map +1 -1
  15. package/dist/open-turns.js.map +1 -1
  16. package/dist/protocol.d.ts +2 -0
  17. package/dist/protocol.d.ts.map +1 -1
  18. package/dist/protocol.js +2 -0
  19. package/dist/protocol.js.map +1 -1
  20. package/dist/server/actions.d.ts +95 -1
  21. package/dist/server/actions.d.ts.map +1 -1
  22. package/dist/server/actions.js +13 -0
  23. package/dist/server/actions.js.map +1 -1
  24. package/dist/server/context.js.map +1 -1
  25. package/dist/server/index.d.ts +16 -1
  26. package/dist/server/index.d.ts.map +1 -1
  27. package/dist/server/index.js +25 -9
  28. package/dist/server/index.js.map +1 -1
  29. package/dist/server/live.js.map +1 -1
  30. package/dist/server/migrations.js.map +1 -1
  31. package/dist/server/party.js.map +1 -1
  32. package/dist/server/routes.js.map +1 -1
  33. package/dist/server/rows.d.ts +21 -0
  34. package/dist/server/rows.d.ts.map +1 -1
  35. package/dist/server/rows.js +32 -0
  36. package/dist/server/rows.js.map +1 -1
  37. package/dist/server/store.d.ts.map +1 -1
  38. package/dist/server/store.js +3 -0
  39. package/dist/server/store.js.map +1 -1
  40. package/dist/tags.js.map +1 -1
  41. package/dist/testing/index.js.map +1 -1
  42. package/dist/view.js.map +1 -1
  43. package/package.json +6 -6
@@ -1 +1 @@
1
- {"version":3,"file":"events.js","sourceRoot":"","sources":["../src/events.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,WAAW,GAAG;IACzB,gBAAgB;IAChB,iBAAiB;IACjB,eAAe;IACf,cAAc;IACd,gBAAgB;IAChB,WAAW;IACX,aAAa;IACb,iBAAiB;IACjB,sBAAsB;CACd,CAAC"}
1
+ {"version":3,"file":"events.js","sourceRoot":"","sources":["../src/events.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,WAAW,GAAG;IACzB,gBAAgB;IAChB,iBAAiB;IACjB,eAAe;IACf,cAAc;IACd,gBAAgB;IAChB,WAAW;IACX,aAAa;IACb,iBAAiB;IACjB,sBAAsB;CACd,CAAC","sourcesContent":["export const CHAT_EVENTS = [\n \"device_pending\",\n \"device_rejected\",\n \"agent_started\",\n \"agent_exited\",\n \"agent_switched\",\n \"host_lost\",\n \"turn_failed\",\n \"answer_rejected\",\n \"answered_on_computer\",\n] as const;\n\nexport type ChatEvent = (typeof CHAT_EVENTS)[number];\n\nexport type FoldedEvent = Extract<ChatEvent, \"answered_on_computer\">;\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"id-schemas.js","sourceRoot":"","sources":["../src/id-schemas.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAwB,MAAM,cAAc,CAAC;AAC1D,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,kFAAkF;AAClF,MAAM,UAAU,QAAQ,CACtB,IAAO;IAEP,OAAO,CAAC;SACL,MAAM,EAAE;SACR,GAAG,CAAC,CAAC,CAAC;SACN,GAAG,CAAC,EAAE,CAAC;SACP,SAAS,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC;AAC7C,CAAC"}
1
+ {"version":3,"file":"id-schemas.js","sourceRoot":"","sources":["../src/id-schemas.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAwB,MAAM,cAAc,CAAC;AAC1D,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,kFAAkF;AAClF,MAAM,UAAU,QAAQ,CACtB,IAAO;IAEP,OAAO,CAAC;SACL,MAAM,EAAE;SACR,GAAG,CAAC,CAAC,CAAC;SACN,GAAG,CAAC,EAAE,CAAC;SACP,SAAS,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC;AAC7C,CAAC","sourcesContent":["import { asId, type Id, type IdKind } from \"@parlor/core\";\nimport { z } from \"zod\";\n\n/** A request field naming an entity: validated, then branded, at the boundary. */\nexport function idSchema<K extends IdKind>(\n kind: K,\n): z.ZodPipe<z.ZodString, z.ZodTransform<Id<K>, string>> {\n return z\n .string()\n .min(1)\n .max(64)\n .transform((value) => asId(kind, value));\n}\n"]}
package/dist/index.d.ts CHANGED
@@ -2,8 +2,8 @@ export { CHAT_EVENTS, type ChatEvent } from "./events.js";
2
2
  export type { Author, AuthorOf, ChatItemBody, ChatItemKind, HostItemDraft, HostItemKind, ItemSignature, LoggedItem, UserItemKind, } from "./items.js";
3
3
  export { type AppliedFrame, applyFrame } from "./open-turns.js";
4
4
  export { isPromptTooLong, MAX_PROMPT_CHARS, PROMPT_LIMIT_MESSAGE } from "./limits.js";
5
- export type { AgentInfo, AgentRef, AnswerToSign, ChatOwner, ChatSnapshot, ClaimedDevice, ClaimedTurn, HostSummary, OpenItem, OpenTurn, PromptToSign, ThreadHistory, ThreadList, ThreadPage, ThreadSummary, TurnFailure, TurnOutcome, TurnSignals, TurnState, TurnStatus, } from "./model.js";
6
- export { CHAT_CHANNEL, type ChatFrame, HOST_PROTOCOL, type HostFrame, type HostHello, type HostStreamBatch, type HostWelcome, parseChatFrame, type ProtocolRange, type StreamingKind, } from "./protocol.js";
5
+ export type { AgentInfo, AgentOption, AgentOptionValue, AgentRef, AgentUsage, AgentUsageWindow, AnswerToSign, ChatOwner, ChatSnapshot, ClaimedDevice, ClaimedTurn, HostSummary, OpenItem, OpenTurn, PromptToSign, ThreadHistory, ThreadList, ThreadPage, ThreadSummary, TurnFailure, TurnOutcome, TurnSignals, TurnState, TurnStatus, } from "./model.js";
6
+ export { CHAT_CHANNEL, CHAT_PLUGIN, type ChatFrame, HOST_PROTOCOL, type HostFrame, type HostHello, type HostStreamBatch, type HostWelcome, parseChatFrame, type ProtocolRange, type StreamingKind, } from "./protocol.js";
7
7
  export { CHAT_ACTIVITY_TAG, CHAT_TAG, HOSTS_TAG } from "./tags.js";
8
8
  export { type AskState, type ChatItem, type FoldedKind, type FoldInput, foldThread, type ItemFolders, type ThreadConfirmation, } from "./view.js";
9
9
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,KAAK,SAAS,EAAE,MAAM,aAAa,CAAC;AAC1D,YAAY,EACV,MAAM,EACN,QAAQ,EACR,YAAY,EACZ,YAAY,EACZ,aAAa,EACb,YAAY,EACZ,aAAa,EACb,UAAU,EACV,YAAY,GACb,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,KAAK,YAAY,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAChE,OAAO,EAAE,eAAe,EAAE,gBAAgB,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;AACtF,YAAY,EACV,SAAS,EACT,QAAQ,EACR,YAAY,EACZ,SAAS,EACT,YAAY,EACZ,aAAa,EACb,WAAW,EACX,WAAW,EACX,QAAQ,EACR,QAAQ,EACR,YAAY,EACZ,aAAa,EACb,UAAU,EACV,UAAU,EACV,aAAa,EACb,WAAW,EACX,WAAW,EACX,WAAW,EACX,SAAS,EACT,UAAU,GACX,MAAM,YAAY,CAAC;AACpB,OAAO,EACL,YAAY,EACZ,KAAK,SAAS,EACd,aAAa,EACb,KAAK,SAAS,EACd,KAAK,SAAS,EACd,KAAK,eAAe,EACpB,KAAK,WAAW,EAChB,cAAc,EACd,KAAK,aAAa,EAClB,KAAK,aAAa,GACnB,MAAM,eAAe,CAAC;AACvB,OAAO,EAAE,iBAAiB,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AACnE,OAAO,EACL,KAAK,QAAQ,EACb,KAAK,QAAQ,EACb,KAAK,UAAU,EACf,KAAK,SAAS,EACd,UAAU,EACV,KAAK,WAAW,EAChB,KAAK,kBAAkB,GACxB,MAAM,WAAW,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,KAAK,SAAS,EAAE,MAAM,aAAa,CAAC;AAC1D,YAAY,EACV,MAAM,EACN,QAAQ,EACR,YAAY,EACZ,YAAY,EACZ,aAAa,EACb,YAAY,EACZ,aAAa,EACb,UAAU,EACV,YAAY,GACb,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,KAAK,YAAY,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAChE,OAAO,EAAE,eAAe,EAAE,gBAAgB,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;AACtF,YAAY,EACV,SAAS,EACT,WAAW,EACX,gBAAgB,EAChB,QAAQ,EACR,UAAU,EACV,gBAAgB,EAChB,YAAY,EACZ,SAAS,EACT,YAAY,EACZ,aAAa,EACb,WAAW,EACX,WAAW,EACX,QAAQ,EACR,QAAQ,EACR,YAAY,EACZ,aAAa,EACb,UAAU,EACV,UAAU,EACV,aAAa,EACb,WAAW,EACX,WAAW,EACX,WAAW,EACX,SAAS,EACT,UAAU,GACX,MAAM,YAAY,CAAC;AACpB,OAAO,EACL,YAAY,EACZ,WAAW,EACX,KAAK,SAAS,EACd,aAAa,EACb,KAAK,SAAS,EACd,KAAK,SAAS,EACd,KAAK,eAAe,EACpB,KAAK,WAAW,EAChB,cAAc,EACd,KAAK,aAAa,EAClB,KAAK,aAAa,GACnB,MAAM,eAAe,CAAC;AACvB,OAAO,EAAE,iBAAiB,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AACnE,OAAO,EACL,KAAK,QAAQ,EACb,KAAK,QAAQ,EACb,KAAK,UAAU,EACf,KAAK,SAAS,EACd,UAAU,EACV,KAAK,WAAW,EAChB,KAAK,kBAAkB,GACxB,MAAM,WAAW,CAAC"}
package/dist/index.js CHANGED
@@ -1,7 +1,7 @@
1
1
  export { CHAT_EVENTS } from "./events.js";
2
2
  export { applyFrame } from "./open-turns.js";
3
3
  export { isPromptTooLong, MAX_PROMPT_CHARS, PROMPT_LIMIT_MESSAGE } from "./limits.js";
4
- export { CHAT_CHANNEL, HOST_PROTOCOL, parseChatFrame, } from "./protocol.js";
4
+ export { CHAT_CHANNEL, CHAT_PLUGIN, HOST_PROTOCOL, parseChatFrame, } from "./protocol.js";
5
5
  export { CHAT_ACTIVITY_TAG, CHAT_TAG, HOSTS_TAG } from "./tags.js";
6
6
  export { foldThread, } from "./view.js";
7
7
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAkB,MAAM,aAAa,CAAC;AAY1D,OAAO,EAAqB,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAChE,OAAO,EAAE,eAAe,EAAE,gBAAgB,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;AAuBtF,OAAO,EACL,YAAY,EAEZ,aAAa,EAKb,cAAc,GAGf,MAAM,eAAe,CAAC;AACvB,OAAO,EAAE,iBAAiB,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AACnE,OAAO,EAKL,UAAU,GAGX,MAAM,WAAW,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAkB,MAAM,aAAa,CAAC;AAY1D,OAAO,EAAqB,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAChE,OAAO,EAAE,eAAe,EAAE,gBAAgB,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;AA2BtF,OAAO,EACL,YAAY,EACZ,WAAW,EAEX,aAAa,EAKb,cAAc,GAGf,MAAM,eAAe,CAAC;AACvB,OAAO,EAAE,iBAAiB,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AACnE,OAAO,EAKL,UAAU,GAGX,MAAM,WAAW,CAAC","sourcesContent":["export { CHAT_EVENTS, type ChatEvent } from \"./events.js\";\nexport type {\n Author,\n AuthorOf,\n ChatItemBody,\n ChatItemKind,\n HostItemDraft,\n HostItemKind,\n ItemSignature,\n LoggedItem,\n UserItemKind,\n} from \"./items.js\";\nexport { type AppliedFrame, applyFrame } from \"./open-turns.js\";\nexport { isPromptTooLong, MAX_PROMPT_CHARS, PROMPT_LIMIT_MESSAGE } from \"./limits.js\";\nexport type {\n AgentInfo,\n AgentOption,\n AgentOptionValue,\n AgentRef,\n AgentUsage,\n AgentUsageWindow,\n AnswerToSign,\n ChatOwner,\n ChatSnapshot,\n ClaimedDevice,\n ClaimedTurn,\n HostSummary,\n OpenItem,\n OpenTurn,\n PromptToSign,\n ThreadHistory,\n ThreadList,\n ThreadPage,\n ThreadSummary,\n TurnFailure,\n TurnOutcome,\n TurnSignals,\n TurnState,\n TurnStatus,\n} from \"./model.js\";\nexport {\n CHAT_CHANNEL,\n CHAT_PLUGIN,\n type ChatFrame,\n HOST_PROTOCOL,\n type HostFrame,\n type HostHello,\n type HostStreamBatch,\n type HostWelcome,\n parseChatFrame,\n type ProtocolRange,\n type StreamingKind,\n} from \"./protocol.js\";\nexport { CHAT_ACTIVITY_TAG, CHAT_TAG, HOSTS_TAG } from \"./tags.js\";\nexport {\n type AskState,\n type ChatItem,\n type FoldedKind,\n type FoldInput,\n foldThread,\n type ItemFolders,\n type ThreadConfirmation,\n} from \"./view.js\";\n"]}
package/dist/items.d.ts CHANGED
@@ -52,6 +52,7 @@ export declare const chatItemBodies: {
52
52
  }, z.core.$strip>;
53
53
  pairing: z.ZodOptional<z.ZodString>;
54
54
  }, z.core.$strip>>;
55
+ options: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
55
56
  }, z.core.$strip>;
56
57
  };
57
58
  readonly answer: {
@@ -147,6 +148,7 @@ export declare const chatItemBodies: {
147
148
  form: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
148
149
  approval: z.ZodOptional<z.ZodEnum<{
149
150
  computer: "computer";
151
+ device: "device";
150
152
  presence: "presence";
151
153
  }>>;
152
154
  }, z.core.$strip>;
@@ -268,6 +270,7 @@ export declare const hostItemDraft: z.ZodDiscriminatedUnion<[z.ZodObject<{
268
270
  form: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
269
271
  approval: z.ZodOptional<z.ZodEnum<{
270
272
  computer: "computer";
273
+ device: "device";
271
274
  presence: "presence";
272
275
  }>>;
273
276
  }, z.core.$strip>;
@@ -1 +1 @@
1
- {"version":3,"file":"items.d.ts","sourceRoot":"","sources":["../src/items.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"items.d.ts","sourceRoot":"","sources":["../src/items.ts"],"names":[],"mappings":"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"}
package/dist/items.js CHANGED
@@ -37,6 +37,11 @@ export const chatItemBodies = {
37
37
  text: z.string().min(1).max(MAX_PROMPT_CHARS),
38
38
  agent: agentRef,
39
39
  signed: signed.optional(),
40
+ /**
41
+ * The agent's options this turn runs with, by option id. Not signed: the computer runs
42
+ * only values the agent offers, and none of them widens what the agent may do.
43
+ */
44
+ options: z.record(z.string().max(100), z.string().max(200)).optional(),
40
45
  }),
41
46
  },
42
47
  answer: {
@@ -82,9 +87,10 @@ export const chatItemBodies = {
82
87
  form: z.record(z.string(), z.unknown()).optional(),
83
88
  /**
84
89
  * Set by the host's policy, never by the app. Absent: any device answers from the
85
- * chat, without presence.
90
+ * chat, without presence. `device`: only the device that sent the turn's prompt, from
91
+ * the chat, without presence.
86
92
  */
87
- approval: z.enum(["presence", "computer"]).optional(),
93
+ approval: z.enum(["presence", "computer", "device"]).optional(),
88
94
  }),
89
95
  },
90
96
  event: {
package/dist/items.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"items.js","sourceRoot":"","sources":["../src/items.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"items.js","sourceRoot":"","sources":["../src/items.ts"],"names":[],"mappings":"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","sourcesContent":["import type { ItemId, ThreadId, TurnId } from \"@parlor/core\";\nimport { z } from \"zod\";\n\nimport { CHAT_EVENTS } from \"./events.js\";\nimport { idSchema } from \"./id-schemas.js\";\nimport { MAX_PROMPT_CHARS } from \"./limits.js\";\n\nconst signature = z.object({\n keyId: z.string(),\n presence: z.enum([\"none\", \"user\"]),\n format: z.enum([\"es256-raw\", \"webauthn\"]),\n signature: z.string(),\n authenticatorData: z.string().optional(),\n clientDataJSON: z.string().optional(),\n});\n\nconst signed = z.object({\n deviceId: idSchema(\"device\"),\n at: z.number(),\n signature,\n /** The browser that approved the computer's connect proving it, so the computer trusts it unasked. */\n pairing: z\n .string()\n .regex(/^[A-Za-z0-9_-]{43}$/)\n .optional(),\n});\n\nconst agentRef = z.object({ hostId: idSchema(\"host\"), agentId: z.string().min(1) });\n\nconst askChoice = z.object({\n id: z.string().min(1),\n label: z.string(),\n effect: z.enum([\"allow_once\", \"allow_always\", \"reject_once\", \"reject_always\"]),\n});\n\n/**\n * The one table of item kinds: who writes each and the body it carries. Types, the\n * server's parsers, the host's append type and the client's view all derive from it.\n */\nexport const chatItemBodies = {\n prompt: {\n author: \"user\",\n body: z.object({\n text: z.string().min(1).max(MAX_PROMPT_CHARS),\n agent: agentRef,\n signed: signed.optional(),\n /**\n * The agent's options this turn runs with, by option id. Not signed: the computer runs\n * only values the agent offers, and none of them widens what the agent may do.\n */\n options: z.record(z.string().max(100), z.string().max(200)).optional(),\n }),\n },\n answer: {\n author: \"user\",\n body: z.object({\n askId: idSchema(\"item\"),\n choice: z.string().min(1),\n values: z\n .record(z.string(), z.union([z.string(), z.number(), z.boolean()]))\n .optional(),\n signed: signed.optional(),\n }),\n },\n cancel: { author: \"user\", body: z.object({}) },\n reply: {\n author: \"agent\",\n body: z.object({ text: z.string(), interrupted: z.literal(true).optional() }),\n },\n reasoning: { author: \"agent\", body: z.object({ text: z.string() }) },\n tool: {\n author: \"agent\",\n body: z.object({\n title: z.string(),\n tool: z.object({ kind: z.enum([\"app\", \"local\"]), name: z.string() }),\n status: z.enum([\"done\", \"failed\", \"cancelled\"]),\n detail: z.string().max(4_000).optional(),\n }),\n },\n plan: {\n author: \"agent\",\n body: z.object({\n entries: z.array(\n z.object({\n content: z.string(),\n status: z.enum([\"pending\", \"in_progress\", \"completed\"]),\n }),\n ),\n }),\n },\n ask: {\n author: \"agent\",\n body: z.object({\n question: z.string(),\n choices: z.array(askChoice),\n form: z.record(z.string(), z.unknown()).optional(),\n /**\n * Set by the host's policy, never by the app. Absent: any device answers from the\n * chat, without presence. `device`: only the device that sent the turn's prompt, from\n * the chat, without presence.\n */\n approval: z.enum([\"presence\", \"computer\", \"device\"]).optional(),\n }),\n },\n event: {\n author: \"system\",\n body: z.object({\n event: z.enum(CHAT_EVENTS),\n detail: z.string().max(500).optional(),\n itemId: idSchema(\"item\").optional(),\n choice: z.string().min(1).optional(),\n }),\n },\n} as const;\n\ntype Bodies = typeof chatItemBodies;\n\nexport type ChatItemKind = keyof Bodies;\nexport type Author = Bodies[ChatItemKind][\"author\"];\nexport type AuthorOf<K extends ChatItemKind> = Bodies[K][\"author\"];\nexport type ChatItemBody<K extends ChatItemKind> = z.output<Bodies[K][\"body\"]>;\nexport type ItemSignature = z.output<typeof signed>;\n\ntype KindsBy<A extends Author> = {\n [K in ChatItemKind]: AuthorOf<K> extends A ? K : never;\n}[ChatItemKind];\n\n/** Appended only by the user's devices, through the user actions. */\nexport type UserItemKind = KindsBy<\"user\">;\n/** Appended only by the user's computer, through the host actions. */\nexport type HostItemKind = KindsBy<\"agent\" | \"system\">;\n\nexport type LoggedItem<K extends ChatItemKind = ChatItemKind> = {\n [Kind in K]: {\n readonly id: ItemId;\n readonly threadId: ThreadId;\n readonly turnId: TurnId;\n /** Gap-free per thread, assigned under the thread row's lock. */\n readonly seq: number;\n readonly at: number;\n readonly author: AuthorOf<Kind>;\n readonly kind: Kind;\n readonly body: ChatItemBody<Kind>;\n };\n}[K];\n\n/** Its id is `<turnId>.<n>`, chosen by the host, so a retried append is a no-op. */\nexport type HostItemDraft = {\n [K in HostItemKind]: {\n readonly id: ItemId;\n readonly kind: K;\n readonly body: ChatItemBody<K>;\n };\n}[HostItemKind];\n\nconst draft = <K extends HostItemKind>(\n kind: K,\n): z.ZodObject<{\n id: ReturnType<typeof idSchema<\"item\">>;\n kind: z.ZodLiteral<K>;\n body: Bodies[K][\"body\"];\n}> =>\n z.object({\n id: idSchema(\"item\"),\n kind: z.literal(kind),\n body: chatItemBodies[kind].body as Bodies[K][\"body\"],\n });\n\nexport const hostItemDraft = z.discriminatedUnion(\"kind\", [\n draft(\"reply\"),\n draft(\"reasoning\"),\n draft(\"tool\"),\n draft(\"plan\"),\n draft(\"ask\"),\n draft(\"event\"),\n]);\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"limits.js","sourceRoot":"","sources":["../src/limits.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,gBAAgB,GAAG,MAAM,CAAC;AAEvC,MAAM,CAAC,MAAM,oBAAoB,GAAG,2BAA2B,gBAAgB,CAAC,cAAc,CAAC,OAAO,CAAC,cAAc,CAAC;AAEtH,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC,IAAY,EAAW,EAAE,CACvD,IAAI,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,gBAAgB,CAAC"}
1
+ {"version":3,"file":"limits.js","sourceRoot":"","sources":["../src/limits.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,gBAAgB,GAAG,MAAM,CAAC;AAEvC,MAAM,CAAC,MAAM,oBAAoB,GAAG,2BAA2B,gBAAgB,CAAC,cAAc,CAAC,OAAO,CAAC,cAAc,CAAC;AAEtH,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC,IAAY,EAAW,EAAE,CACvD,IAAI,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,gBAAgB,CAAC","sourcesContent":["export const MAX_PROMPT_CHARS = 32_000;\n\nexport const PROMPT_LIMIT_MESSAGE = `Messages can be at most ${MAX_PROMPT_CHARS.toLocaleString(\"en-US\")} characters.`;\n\nexport const isPromptTooLong = (text: string): boolean =>\n text.trim().length > MAX_PROMPT_CHARS;\n"]}
package/dist/model.d.ts CHANGED
@@ -35,6 +35,48 @@ export interface AgentInfo {
35
35
  readonly ready: boolean;
36
36
  /** Why a not-ready agent cannot run yet ("run `claude` to log in"). */
37
37
  readonly problem?: string | undefined;
38
+ /** What a prompt may choose for its turn, as the agent last offered it; absent until it has. */
39
+ readonly options?: readonly AgentOption[] | undefined;
40
+ /** The account's allowance, as the agent last reported it; absent until it has. */
41
+ readonly usage?: AgentUsage | undefined;
42
+ /**
43
+ * The name this agent knows the app by outside the sidebar, when the user let it use the
44
+ * app there: "use coursekit to ..." in Claude Code.
45
+ */
46
+ readonly outsideName?: string | undefined;
47
+ }
48
+ /**
49
+ * One setting a prompt may choose, such as the model or how hard it thinks. Never the
50
+ * permission mode: that is the computer's to set.
51
+ */
52
+ export interface AgentOption {
53
+ readonly id: string;
54
+ readonly name: string;
55
+ /** `model` and `thought_level` as the agent tags them; any other the agent names. */
56
+ readonly category?: string | undefined;
57
+ /** The agent's own default, the value a prompt that chooses nothing runs with. */
58
+ readonly current: string;
59
+ readonly values: readonly AgentOptionValue[];
60
+ }
61
+ export interface AgentOptionValue {
62
+ readonly id: string;
63
+ readonly name: string;
64
+ readonly description?: string | undefined;
65
+ }
66
+ export interface AgentUsage {
67
+ /** Account-wide windows first, each set shortest first. */
68
+ readonly windows: readonly AgentUsageWindow[];
69
+ /** When the agent reported it (epoch ms). */
70
+ readonly at: number;
71
+ }
72
+ export interface AgentUsageWindow {
73
+ /** The vendor's name for it: `five_hour`, `seven_day`, `seven_day_opus`. */
74
+ readonly id: string;
75
+ readonly minutes: number;
76
+ /** Share of the window used, 0 to 1. */
77
+ readonly used: number;
78
+ /** When the window rolls over (epoch ms). */
79
+ readonly resetsAt?: number | undefined;
38
80
  }
39
81
  export interface ThreadSummary {
40
82
  readonly id: ThreadId;
@@ -1 +1 @@
1
- {"version":3,"file":"model.d.ts","sourceRoot":"","sources":["../src/model.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"model.d.ts","sourceRoot":"","sources":["../src/model.ts"],"names":[],"mappings":"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"}
package/dist/model.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"model.js","sourceRoot":"","sources":["../src/model.ts"],"names":[],"mappings":""}
1
+ {"version":3,"file":"model.js","sourceRoot":"","sources":["../src/model.ts"],"names":[],"mappings":"","sourcesContent":["import type { HostId, ItemId, ThreadId, TurnId, UserId } from \"@parlor/core\";\nimport type { Delegation, DeviceKeys } from \"@parlor/server\";\n\nimport type { ChatItemBody, LoggedItem, UserItemKind } from \"./items.js\";\n\nexport interface AgentRef {\n readonly hostId: HostId;\n /** A profile id on that host (`claude`, `codex`), not an entity. */\n readonly agentId: string;\n}\n\n/**\n * Whose chat a row is. Every thread, turn and host row carries both and every chat query\n * filters by both, so members of one organization scope never see each other's chats.\n */\nexport interface ChatOwner {\n readonly scope: string;\n readonly userId: UserId;\n}\n\nexport interface HostSummary {\n readonly id: HostId;\n readonly name: string;\n readonly platform: string;\n readonly online: boolean;\n readonly agents: readonly AgentInfo[];\n /** The devices this computer runs prompts from; absent when it is too old to say. */\n readonly devices?: readonly string[] | undefined;\n /**\n * When each of those devices must sign its next prompt with Face ID or Touch ID again\n * (epoch ms); a device it never asks is missing.\n */\n readonly presenceDue?: Readonly<Record<string, number>> | undefined;\n}\n\nexport interface AgentInfo {\n readonly id: string;\n readonly name: string;\n readonly version?: string | undefined;\n readonly ready: boolean;\n /** Why a not-ready agent cannot run yet (\"run `claude` to log in\"). */\n readonly problem?: string | undefined;\n /** What a prompt may choose for its turn, as the agent last offered it; absent until it has. */\n readonly options?: readonly AgentOption[] | undefined;\n /** The account's allowance, as the agent last reported it; absent until it has. */\n readonly usage?: AgentUsage | undefined;\n /**\n * The name this agent knows the app by outside the sidebar, when the user let it use the\n * app there: \"use coursekit to ...\" in Claude Code.\n */\n readonly outsideName?: string | undefined;\n}\n\n/**\n * One setting a prompt may choose, such as the model or how hard it thinks. Never the\n * permission mode: that is the computer's to set.\n */\nexport interface AgentOption {\n readonly id: string;\n readonly name: string;\n /** `model` and `thought_level` as the agent tags them; any other the agent names. */\n readonly category?: string | undefined;\n /** The agent's own default, the value a prompt that chooses nothing runs with. */\n readonly current: string;\n readonly values: readonly AgentOptionValue[];\n}\n\nexport interface AgentOptionValue {\n readonly id: string;\n readonly name: string;\n readonly description?: string | undefined;\n}\n\nexport interface AgentUsage {\n /** Account-wide windows first, each set shortest first. */\n readonly windows: readonly AgentUsageWindow[];\n /** When the agent reported it (epoch ms). */\n readonly at: number;\n}\n\nexport interface AgentUsageWindow {\n /** The vendor's name for it: `five_hour`, `seven_day`, `seven_day_opus`. */\n readonly id: string;\n readonly minutes: number;\n /** Share of the window used, 0 to 1. */\n readonly used: number;\n /** When the window rolls over (epoch ms). */\n readonly resetsAt?: number | undefined;\n}\n\nexport interface ThreadSummary {\n readonly id: ThreadId;\n readonly title: string;\n readonly agent: AgentRef | undefined;\n readonly updatedAt: number;\n readonly lastSeq: number;\n}\n\nexport type TurnState = \"queued\" | \"running\" | \"done\" | \"failed\" | \"cancelled\";\n\nexport type TurnFailure =\n | \"agent_exited\"\n | \"agent_unavailable\"\n | \"device_rejected\"\n | \"signature_invalid\"\n | \"prompt_expired\"\n | \"host_lost\";\n\nexport type TurnOutcome =\n | { readonly state: \"done\"; readonly stopReason: string }\n | { readonly state: \"cancelled\" }\n | { readonly state: \"failed\"; readonly reason: TurnFailure };\n\n/** Still being produced: only in memory, on the instance the host posts to. */\nexport type OpenItem =\n | { readonly id: ItemId; readonly kind: \"reply\" | \"reasoning\"; readonly text: string }\n | {\n readonly id: ItemId;\n readonly kind: \"tool\";\n readonly title: string;\n readonly status: \"pending\" | \"running\";\n }\n | {\n readonly id: ItemId;\n readonly kind: \"plan\";\n readonly entries: ChatItemBody<\"plan\">[\"entries\"];\n };\n\nexport interface OpenTurn {\n readonly turnId: TurnId;\n readonly threadId: ThreadId;\n readonly items: readonly OpenItem[];\n}\n\nexport interface TurnStatus {\n readonly turnId: TurnId;\n readonly state: TurnState;\n readonly agent: AgentRef;\n readonly failure?: TurnFailure | undefined;\n}\n\nexport interface ThreadPage {\n readonly thread: ThreadSummary | undefined;\n readonly items: readonly LoggedItem[];\n readonly open: readonly OpenTurn[];\n readonly turns: readonly TurnStatus[];\n readonly hasMore: boolean;\n}\n\nexport interface ChatSnapshot {\n readonly threads: readonly ThreadSummary[];\n /** `threads` was cut at its limit; `threadsBefore` reads on from its last one. */\n readonly moreThreads?: boolean | undefined;\n readonly hosts: readonly HostSummary[];\n readonly page: ThreadPage;\n}\n\n/** What `history` returns: earlier items of a thread, oldest first, with their turns. */\nexport interface ThreadHistory {\n readonly items: readonly LoggedItem[];\n readonly turns: readonly TurnStatus[];\n readonly hasMore: boolean;\n}\n\n/** What `threadsBefore` returns: the next older threads, newest first. */\nexport interface ThreadList {\n readonly threads: readonly ThreadSummary[];\n readonly hasMore: boolean;\n}\n\n/** The device's keys as the account has them; the host compares them with its own pins. */\nexport type ClaimedDevice = DeviceKeys;\n\nexport interface ClaimedTurn {\n /** The thread id; every chat write returns it as `id`, which becomes its sync tag. */\n readonly id: ThreadId;\n readonly turnId: TurnId;\n readonly agent: AgentRef;\n /** The client the prompt came from; the turn token binds `ui_*` to it. */\n readonly clientId: string;\n readonly prompt: LoggedItem<\"prompt\">;\n readonly device: ClaimedDevice | undefined;\n /** The `<parlor-context>` block for a fresh agent session. */\n readonly context: string;\n readonly token: Delegation;\n readonly leaseUntil: number;\n}\n\nexport interface TurnSignals {\n readonly turnId: TurnId;\n readonly items: readonly LoggedItem<Exclude<UserItemKind, \"prompt\">>[];\n /** The keys of each device that answered, as the account lists them; revoked ones are left out. */\n readonly devices?: readonly DeviceKeys[];\n}\n\n/** What a device signs for a prompt; the host rebuilds the same statement from the item. */\nexport interface PromptToSign {\n readonly threadId: ThreadId;\n readonly turnId: TurnId;\n readonly agent: AgentRef;\n readonly text: string;\n}\n\nexport interface AnswerToSign {\n readonly threadId: ThreadId;\n readonly askId: ItemId;\n readonly choice: string;\n readonly values?: ChatItemBody<\"answer\">[\"values\"];\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"open-turns.js","sourceRoot":"","sources":["../src/open-turns.ts"],"names":[],"mappings":"AASA;;;;;GAKG;AACH,MAAM,UAAU,UAAU,CACxB,KAA0B,EAC1B,KAA8C;IAE9C,IAAI,KAAK,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;QAC1B,MAAM,KAAK,GAAG,KAAK,CAAC,SAAS,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,EAAE,KAAK,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACnE,MAAM,IAAI,GACR,KAAK,GAAG,CAAC;YACP,CAAC,CAAC,CAAC,GAAG,KAAK,EAAE,KAAK,CAAC,IAAI,CAAC;YACxB,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,KAAK,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;QAClE,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC;IAChC,CAAC;IACD,MAAM,KAAK,GAAG,KAAK,CAAC,SAAS,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,EAAE,KAAK,KAAK,CAAC,MAAM,CAAC,CAAC;IAClE,MAAM,IAAI,GAAG,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IAClD,IAAI,IAAI,IAAI,IAAI,CAAC,IAAI,KAAK,OAAO,IAAI,IAAI,CAAC,IAAI,KAAK,WAAW;QAAE,OAAO,SAAS,CAAC;IACjF,MAAM,IAAI,GAAG,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC;IACnC,IAAI,KAAK,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM;QAAE,OAAO,SAAS,CAAC;IACjD,MAAM,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC;IAC3D,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,SAAS,CAAC;IACzC,MAAM,KAAK,GAAa,EAAE,EAAE,EAAE,KAAK,CAAC,MAAM,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,GAAG,KAAK,EAAE,CAAC;IACnF,MAAM,IAAI,GAAG,IAAI;QACf,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,KAAK,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;QACxD,CAAC,CAAC,CAAC,GAAG,KAAK,EAAE,KAAK,CAAC,CAAC;IACtB,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE,GAAG,KAAK,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC;AAChF,CAAC"}
1
+ {"version":3,"file":"open-turns.js","sourceRoot":"","sources":["../src/open-turns.ts"],"names":[],"mappings":"AASA;;;;;GAKG;AACH,MAAM,UAAU,UAAU,CACxB,KAA0B,EAC1B,KAA8C;IAE9C,IAAI,KAAK,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;QAC1B,MAAM,KAAK,GAAG,KAAK,CAAC,SAAS,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,EAAE,KAAK,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACnE,MAAM,IAAI,GACR,KAAK,GAAG,CAAC;YACP,CAAC,CAAC,CAAC,GAAG,KAAK,EAAE,KAAK,CAAC,IAAI,CAAC;YACxB,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,KAAK,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;QAClE,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC;IAChC,CAAC;IACD,MAAM,KAAK,GAAG,KAAK,CAAC,SAAS,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,EAAE,KAAK,KAAK,CAAC,MAAM,CAAC,CAAC;IAClE,MAAM,IAAI,GAAG,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IAClD,IAAI,IAAI,IAAI,IAAI,CAAC,IAAI,KAAK,OAAO,IAAI,IAAI,CAAC,IAAI,KAAK,WAAW;QAAE,OAAO,SAAS,CAAC;IACjF,MAAM,IAAI,GAAG,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC;IACnC,IAAI,KAAK,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM;QAAE,OAAO,SAAS,CAAC;IACjD,MAAM,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC;IAC3D,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,SAAS,CAAC;IACzC,MAAM,KAAK,GAAa,EAAE,EAAE,EAAE,KAAK,CAAC,MAAM,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,GAAG,KAAK,EAAE,CAAC;IACnF,MAAM,IAAI,GAAG,IAAI;QACf,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,KAAK,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;QACxD,CAAC,CAAC,CAAC,GAAG,KAAK,EAAE,KAAK,CAAC,CAAC;IACtB,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE,GAAG,KAAK,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC;AAChF,CAAC","sourcesContent":["import type { OpenItem } from \"./model.js\";\nimport type { ChatFrame } from \"./protocol.js\";\n\nexport interface AppliedFrame {\n readonly items: readonly OpenItem[];\n /** What actually changed: a delta overlapping the text already held is cut to its new part. */\n readonly frame: Exclude<ChatFrame, { type: \"settled\" }>;\n}\n\n/**\n * Applies a `delta` or `item` frame to one turn's open items. A delta whose text is\n * already held is skipped and one that starts past the end of the text is a gap; both\n * answer `undefined`, and after a gap every later delta is a gap too, so the item waits\n * for its durable twin instead of drawing a hole.\n */\nexport function applyFrame(\n items: readonly OpenItem[],\n frame: Exclude<ChatFrame, { type: \"settled\" }>,\n): AppliedFrame | undefined {\n if (frame.type === \"item\") {\n const index = items.findIndex((item) => item.id === frame.item.id);\n const next =\n index < 0\n ? [...items, frame.item]\n : items.map((item, at) => (at === index ? frame.item : item));\n return { items: next, frame };\n }\n const index = items.findIndex((item) => item.id === frame.itemId);\n const held = index < 0 ? undefined : items[index];\n if (held && held.kind !== \"reply\" && held.kind !== \"reasoning\") return undefined;\n const have = held ? held.text : \"\";\n if (frame.offset > have.length) return undefined;\n const fresh = frame.text.slice(have.length - frame.offset);\n if (fresh.length === 0) return undefined;\n const grown: OpenItem = { id: frame.itemId, kind: frame.kind, text: have + fresh };\n const next = held\n ? items.map((item, at) => (at === index ? grown : item))\n : [...items, grown];\n return { items: next, frame: { ...frame, offset: have.length, text: fresh } };\n}\n"]}
@@ -1,6 +1,8 @@
1
1
  import { type ItemId, type ThreadId, type TurnId } from "@parlor/core";
2
2
  import type { AgentInfo, OpenItem } from "./model.js";
3
3
  export declare const CHAT_CHANNEL = "chat";
4
+ /** The plugin name, so its routes live under `/_parlor/chat/`. */
5
+ export declare const CHAT_PLUGIN = "chat";
4
6
  export type StreamingKind = "reply" | "reasoning";
5
7
  /**
6
8
  * Server to browser on the `chat` channel; never persisted. `offset` makes a duplicate
@@ -1 +1 @@
1
- {"version":3,"file":"protocol.d.ts","sourceRoot":"","sources":["../src/protocol.ts"],"names":[],"mappings":"AAAA,OAAO,EAIL,KAAK,MAAM,EACX,KAAK,QAAQ,EACb,KAAK,MAAM,EACZ,MAAM,cAAc,CAAC;AAGtB,OAAO,KAAK,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAEtD,eAAO,MAAM,YAAY,SAAS,CAAC;AAEnC,MAAM,MAAM,aAAa,GAAG,OAAO,GAAG,WAAW,CAAC;AAElD;;;;GAIG;AACH,MAAM,MAAM,SAAS,GACjB;IACE,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC;IACvB,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAC;IAC5B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,IAAI,EAAE,aAAa,CAAC;IAC7B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;CACvB,GACD;IACE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAC;IAC5B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC,QAAQ,EAAE;QAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CAAA;KAAE,CAAC,CAAC;CAC7D,GACD;IAAE,QAAQ,CAAC,IAAI,EAAE,SAAS,CAAC;IAAC,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAC;IAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC;AAEvF,oGAAoG;AACpG,MAAM,MAAM,SAAS,GAAG,SAAS,SAAS,MAAM,CAAC,GAC7C,CAAC,SAAS;IAAE,QAAQ,CAAC,IAAI,EAAE,OAAO,GAAG,MAAM,CAAA;CAAE,GAC3C,IAAI,CAAC,CAAC,EAAE,UAAU,GAAG,QAAQ,CAAC,GAC9B,KAAK,GACP,KAAK,CAAC;AAEV,kCAAkC;AAClC,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,MAAM,EAAE,SAAS,SAAS,EAAE,CAAC;CACvC;AAED;;;GAGG;AACH,eAAO,MAAM,aAAa,IAAI,CAAC;AAE/B,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,SAAS;IACxB,QAAQ,CAAC,SAAS,EAAE,aAAa,CAAC;IAClC,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,MAAM,EAAE,SAAS,SAAS,EAAE,CAAC;CACvC;AAED,MAAM,MAAM,WAAW,GACnB;IACE,QAAQ,CAAC,QAAQ,EAAE,IAAI,CAAC;IACxB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,YAAY,CAAC,EAAE,IAAI,CAAC;CAC9B,GACD;IACE,QAAQ,CAAC,QAAQ,EAAE,KAAK,CAAC;IACzB,QAAQ,CAAC,MAAM,EAAE,cAAc,GAAG,aAAa,CAAC;IAChD,QAAQ,CAAC,SAAS,EAAE,aAAa,CAAC;CACnC,CAAC;AAwCN,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,GAAG,SAAS,CA8BlE"}
1
+ {"version":3,"file":"protocol.d.ts","sourceRoot":"","sources":["../src/protocol.ts"],"names":[],"mappings":"AAAA,OAAO,EAIL,KAAK,MAAM,EACX,KAAK,QAAQ,EACb,KAAK,MAAM,EACZ,MAAM,cAAc,CAAC;AAGtB,OAAO,KAAK,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAEtD,eAAO,MAAM,YAAY,SAAS,CAAC;AACnC,kEAAkE;AAClE,eAAO,MAAM,WAAW,SAAS,CAAC;AAElC,MAAM,MAAM,aAAa,GAAG,OAAO,GAAG,WAAW,CAAC;AAElD;;;;GAIG;AACH,MAAM,MAAM,SAAS,GACjB;IACE,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC;IACvB,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAC;IAC5B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,IAAI,EAAE,aAAa,CAAC;IAC7B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;CACvB,GACD;IACE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAC;IAC5B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC,QAAQ,EAAE;QAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CAAA;KAAE,CAAC,CAAC;CAC7D,GACD;IAAE,QAAQ,CAAC,IAAI,EAAE,SAAS,CAAC;IAAC,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAC;IAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC;AAEvF,oGAAoG;AACpG,MAAM,MAAM,SAAS,GAAG,SAAS,SAAS,MAAM,CAAC,GAC7C,CAAC,SAAS;IAAE,QAAQ,CAAC,IAAI,EAAE,OAAO,GAAG,MAAM,CAAA;CAAE,GAC3C,IAAI,CAAC,CAAC,EAAE,UAAU,GAAG,QAAQ,CAAC,GAC9B,KAAK,GACP,KAAK,CAAC;AAEV,kCAAkC;AAClC,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,MAAM,EAAE,SAAS,SAAS,EAAE,CAAC;CACvC;AAED;;;GAGG;AACH,eAAO,MAAM,aAAa,IAAI,CAAC;AAE/B,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,SAAS;IACxB,QAAQ,CAAC,SAAS,EAAE,aAAa,CAAC;IAClC,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,MAAM,EAAE,SAAS,SAAS,EAAE,CAAC;CACvC;AAED,MAAM,MAAM,WAAW,GACnB;IACE,QAAQ,CAAC,QAAQ,EAAE,IAAI,CAAC;IACxB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,YAAY,CAAC,EAAE,IAAI,CAAC;CAC9B,GACD;IACE,QAAQ,CAAC,QAAQ,EAAE,KAAK,CAAC;IACzB,QAAQ,CAAC,MAAM,EAAE,cAAc,GAAG,aAAa,CAAC;IAChD,QAAQ,CAAC,SAAS,EAAE,aAAa,CAAC;CACnC,CAAC;AAwCN,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,GAAG,SAAS,CA8BlE"}
package/dist/protocol.js CHANGED
@@ -1,5 +1,7 @@
1
1
  import { asId, } from "@parlor/core";
2
2
  export const CHAT_CHANNEL = "chat";
3
+ /** The plugin name, so its routes live under `/_parlor/chat/`. */
4
+ export const CHAT_PLUGIN = "chat";
3
5
  /**
4
6
  * The versioned contract between an app's backend and Parlor Host: host actions, item
5
7
  * kinds, frames and cursor rules. Bumped on any change an older peer could misread.
@@ -1 +1 @@
1
- {"version":3,"file":"protocol.js","sourceRoot":"","sources":["../src/protocol.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"protocol.js","sourceRoot":"","sources":["../src/protocol.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n asId,\n type Id,\n type IdKind,\n type ItemId,\n type ThreadId,\n type TurnId,\n} from \"@parlor/core\";\n\nimport type { ChatItemBody } from \"./items.js\";\nimport type { AgentInfo, OpenItem } from \"./model.js\";\n\nexport const CHAT_CHANNEL = \"chat\";\n/** The plugin name, so its routes live under `/_parlor/chat/`. */\nexport const CHAT_PLUGIN = \"chat\";\n\nexport type StreamingKind = \"reply\" | \"reasoning\";\n\n/**\n * Server to browser on the `chat` channel; never persisted. `offset` makes a duplicate\n * delta skippable and a gap detectable, after which the client waits for the durable\n * item. `settled` drops a turn's open items: durable now, or gone.\n */\nexport type ChatFrame =\n | {\n readonly type: \"delta\";\n readonly threadId: ThreadId;\n readonly turnId: TurnId;\n readonly itemId: ItemId;\n readonly kind: StreamingKind;\n readonly offset: number;\n readonly text: string;\n }\n | {\n readonly type: \"item\";\n readonly threadId: ThreadId;\n readonly turnId: TurnId;\n readonly item: Extract<OpenItem, { kind: \"tool\" | \"plan\" }>;\n }\n | { readonly type: \"settled\"; readonly threadId: ThreadId; readonly turnId: TurnId };\n\n/** Host to server: the same frames minus what the batch's turn implies. Only the server settles. */\nexport type HostFrame = ChatFrame extends infer F\n ? F extends { readonly type: \"delta\" | \"item\" }\n ? Omit<F, \"threadId\" | \"turnId\">\n : never\n : never;\n\n/** `POST /_parlor/chat/stream` */\nexport interface HostStreamBatch {\n readonly turnId: TurnId;\n readonly frames: readonly HostFrame[];\n}\n\n/**\n * The versioned contract between an app's backend and Parlor Host: host actions, item\n * kinds, frames and cursor rules. Bumped on any change an older peer could misread.\n */\nexport const HOST_PROTOCOL = 2;\n\nexport interface ProtocolRange {\n readonly min: number;\n readonly max: number;\n}\n\nexport interface HostHello {\n readonly protocols: ProtocolRange;\n readonly hostVersion: string;\n readonly name: string;\n readonly platform: string;\n readonly agents: readonly AgentInfo[];\n}\n\nexport type HostWelcome =\n | {\n readonly accepted: true;\n readonly protocol: number;\n readonly leaseMs: number;\n readonly heartbeatMs: number;\n readonly userActivity?: true;\n }\n | {\n readonly accepted: false;\n readonly reason: \"host_too_old\" | \"app_too_old\";\n readonly protocols: ProtocolRange;\n };\n\ntype Fields = Readonly<Record<string, unknown>>;\n\nfunction isFields(value: unknown): value is Fields {\n return typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n\nfunction oneOf<T extends string>(values: readonly T[], value: unknown): T | undefined {\n return values.find((candidate) => candidate === value);\n}\n\nfunction idOf<K extends IdKind>(kind: K, value: unknown): Id<K> | undefined {\n return typeof value === \"string\" && value.length > 0 ? asId(kind, value) : undefined;\n}\n\nfunction openItemOf(\n value: unknown,\n): Extract<OpenItem, { kind: \"tool\" | \"plan\" }> | undefined {\n if (!isFields(value)) return undefined;\n const id = idOf(\"item\", value.id);\n if (!id) return undefined;\n if (value.kind === \"tool\") {\n const status = oneOf([\"pending\", \"running\"], value.status);\n if (typeof value.title !== \"string\" || !status) return undefined;\n return { id, kind: \"tool\", title: value.title, status };\n }\n if (value.kind === \"plan\" && Array.isArray(value.entries)) {\n const entries: ChatItemBody<\"plan\">[\"entries\"][number][] = [];\n for (const entry of value.entries as unknown[]) {\n if (!isFields(entry) || typeof entry.content !== \"string\") return undefined;\n const status = oneOf([\"pending\", \"in_progress\", \"completed\"], entry.status);\n if (!status) return undefined;\n entries.push({ content: entry.content, status });\n }\n return { id, kind: \"plan\", entries };\n }\n return undefined;\n}\n\nexport function parseChatFrame(data: string): ChatFrame | undefined {\n let value: unknown;\n try {\n value = JSON.parse(data);\n } catch {\n return undefined;\n }\n if (!isFields(value)) return undefined;\n const threadId = idOf(\"thread\", value.threadId);\n const turnId = idOf(\"turn\", value.turnId);\n if (!threadId || !turnId) return undefined;\n switch (value.type) {\n case \"settled\":\n return { type: \"settled\", threadId, turnId };\n case \"item\": {\n const item = openItemOf(value.item);\n return item ? { type: \"item\", threadId, turnId, item } : undefined;\n }\n case \"delta\": {\n const itemId = idOf(\"item\", value.itemId);\n const kind = oneOf([\"reply\", \"reasoning\"], value.kind);\n const { offset, text } = value;\n if (!itemId || !kind || typeof text !== \"string\") return undefined;\n if (typeof offset !== \"number\" || !Number.isInteger(offset) || offset < 0)\n return undefined;\n return { type: \"delta\", threadId, turnId, itemId, kind, offset, text };\n }\n default:\n return undefined;\n }\n}\n"]}
@@ -1,6 +1,6 @@
1
1
  import { type ActionContext, type HostId, type ThreadId } from "@parlor/core";
2
2
  import { type ActionsOf } from "@parlor/core/registry";
3
- import { type AuthProvider, HOST_GRANTS_TAG } from "@parlor/server";
3
+ import { type AuthProvider, type Delegation, HOST_GRANTS_TAG } from "@parlor/server";
4
4
  import { z } from "zod";
5
5
  import { idSchema } from "../id-schemas.js";
6
6
  import { type LoggedItem } from "../items.js";
@@ -89,6 +89,7 @@ export declare function userChatActions(deps: ChatActionDeps): {
89
89
  }, z.core.$strip>;
90
90
  pairing: z.ZodOptional<z.ZodString>;
91
91
  }, z.core.$strip>>;
92
+ options: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
92
93
  }, z.core.$strip>;
93
94
  }, z.core.$strip>, {
94
95
  readonly id: string;
@@ -152,6 +153,27 @@ export declare function hostChatActions(deps: ChatActionDeps): {
152
153
  version: z.ZodOptional<z.ZodString>;
153
154
  ready: z.ZodBoolean;
154
155
  problem: z.ZodOptional<z.ZodString>;
156
+ options: z.ZodOptional<z.ZodReadonly<z.ZodArray<z.ZodObject<{
157
+ id: z.ZodString;
158
+ name: z.ZodString;
159
+ category: z.ZodOptional<z.ZodString>;
160
+ current: z.ZodString;
161
+ values: z.ZodReadonly<z.ZodArray<z.ZodObject<{
162
+ id: z.ZodString;
163
+ name: z.ZodString;
164
+ description: z.ZodOptional<z.ZodString>;
165
+ }, z.core.$strip>>>;
166
+ }, z.core.$strip>>>>;
167
+ usage: z.ZodOptional<z.ZodObject<{
168
+ windows: z.ZodReadonly<z.ZodArray<z.ZodObject<{
169
+ id: z.ZodString;
170
+ minutes: z.ZodNumber;
171
+ used: z.ZodNumber;
172
+ resetsAt: z.ZodOptional<z.ZodNumber>;
173
+ }, z.core.$strip>>>;
174
+ at: z.ZodNumber;
175
+ }, z.core.$strip>>;
176
+ outsideName: z.ZodOptional<z.ZodString>;
155
177
  }, z.core.$strip>>;
156
178
  devices: z.ZodOptional<z.ZodArray<z.ZodString>>;
157
179
  presenceDue: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodNumber>>;
@@ -166,6 +188,27 @@ export declare function hostChatActions(deps: ChatActionDeps): {
166
188
  version: z.ZodOptional<z.ZodString>;
167
189
  ready: z.ZodBoolean;
168
190
  problem: z.ZodOptional<z.ZodString>;
191
+ options: z.ZodOptional<z.ZodReadonly<z.ZodArray<z.ZodObject<{
192
+ id: z.ZodString;
193
+ name: z.ZodString;
194
+ category: z.ZodOptional<z.ZodString>;
195
+ current: z.ZodString;
196
+ values: z.ZodReadonly<z.ZodArray<z.ZodObject<{
197
+ id: z.ZodString;
198
+ name: z.ZodString;
199
+ description: z.ZodOptional<z.ZodString>;
200
+ }, z.core.$strip>>>;
201
+ }, z.core.$strip>>>>;
202
+ usage: z.ZodOptional<z.ZodObject<{
203
+ windows: z.ZodReadonly<z.ZodArray<z.ZodObject<{
204
+ id: z.ZodString;
205
+ minutes: z.ZodNumber;
206
+ used: z.ZodNumber;
207
+ resetsAt: z.ZodOptional<z.ZodNumber>;
208
+ }, z.core.$strip>>>;
209
+ at: z.ZodNumber;
210
+ }, z.core.$strip>>;
211
+ outsideName: z.ZodOptional<z.ZodString>;
169
212
  }, z.core.$strip>>;
170
213
  devices: z.ZodOptional<z.ZodArray<z.ZodString>>;
171
214
  presenceDue: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodNumber>>;
@@ -173,6 +216,9 @@ export declare function hostChatActions(deps: ChatActionDeps): {
173
216
  readonly id: string;
174
217
  readonly onlineUntil: number;
175
218
  }>;
219
+ hostAgentToken: import("@parlor/core").ActionDefinition<z.ZodObject<{
220
+ agent: z.ZodString;
221
+ }, z.core.$strip>, Delegation>;
176
222
  hostClaim: import("@parlor/core").ActionDefinition<z.ZodObject<{}, z.core.$strip>, ClaimedTurn>;
177
223
  hostSignals: import("@parlor/core").ActionDefinition<z.ZodObject<{
178
224
  turns: z.ZodArray<z.ZodObject<{
@@ -245,6 +291,7 @@ export declare function hostChatActions(deps: ChatActionDeps): {
245
291
  form: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
246
292
  approval: z.ZodOptional<z.ZodEnum<{
247
293
  computer: "computer";
294
+ device: "device";
248
295
  presence: "presence";
249
296
  }>>;
250
297
  }, z.core.$strip>;
@@ -351,6 +398,7 @@ export declare function chatActions(deps: ChatActionDeps): import("@parlor/core/
351
398
  }, z.core.$strip>;
352
399
  pairing: z.ZodOptional<z.ZodString>;
353
400
  }, z.core.$strip>>;
401
+ options: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
354
402
  }, z.core.$strip>;
355
403
  }, z.core.$strip>, {
356
404
  readonly id: string;
@@ -411,6 +459,27 @@ export declare function chatActions(deps: ChatActionDeps): import("@parlor/core/
411
459
  version: z.ZodOptional<z.ZodString>;
412
460
  ready: z.ZodBoolean;
413
461
  problem: z.ZodOptional<z.ZodString>;
462
+ options: z.ZodOptional<z.ZodReadonly<z.ZodArray<z.ZodObject<{
463
+ id: z.ZodString;
464
+ name: z.ZodString;
465
+ category: z.ZodOptional<z.ZodString>;
466
+ current: z.ZodString;
467
+ values: z.ZodReadonly<z.ZodArray<z.ZodObject<{
468
+ id: z.ZodString;
469
+ name: z.ZodString;
470
+ description: z.ZodOptional<z.ZodString>;
471
+ }, z.core.$strip>>>;
472
+ }, z.core.$strip>>>>;
473
+ usage: z.ZodOptional<z.ZodObject<{
474
+ windows: z.ZodReadonly<z.ZodArray<z.ZodObject<{
475
+ id: z.ZodString;
476
+ minutes: z.ZodNumber;
477
+ used: z.ZodNumber;
478
+ resetsAt: z.ZodOptional<z.ZodNumber>;
479
+ }, z.core.$strip>>>;
480
+ at: z.ZodNumber;
481
+ }, z.core.$strip>>;
482
+ outsideName: z.ZodOptional<z.ZodString>;
414
483
  }, z.core.$strip>>;
415
484
  devices: z.ZodOptional<z.ZodArray<z.ZodString>>;
416
485
  presenceDue: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodNumber>>;
@@ -425,6 +494,27 @@ export declare function chatActions(deps: ChatActionDeps): import("@parlor/core/
425
494
  version: z.ZodOptional<z.ZodString>;
426
495
  ready: z.ZodBoolean;
427
496
  problem: z.ZodOptional<z.ZodString>;
497
+ options: z.ZodOptional<z.ZodReadonly<z.ZodArray<z.ZodObject<{
498
+ id: z.ZodString;
499
+ name: z.ZodString;
500
+ category: z.ZodOptional<z.ZodString>;
501
+ current: z.ZodString;
502
+ values: z.ZodReadonly<z.ZodArray<z.ZodObject<{
503
+ id: z.ZodString;
504
+ name: z.ZodString;
505
+ description: z.ZodOptional<z.ZodString>;
506
+ }, z.core.$strip>>>;
507
+ }, z.core.$strip>>>>;
508
+ usage: z.ZodOptional<z.ZodObject<{
509
+ windows: z.ZodReadonly<z.ZodArray<z.ZodObject<{
510
+ id: z.ZodString;
511
+ minutes: z.ZodNumber;
512
+ used: z.ZodNumber;
513
+ resetsAt: z.ZodOptional<z.ZodNumber>;
514
+ }, z.core.$strip>>>;
515
+ at: z.ZodNumber;
516
+ }, z.core.$strip>>;
517
+ outsideName: z.ZodOptional<z.ZodString>;
428
518
  }, z.core.$strip>>;
429
519
  devices: z.ZodOptional<z.ZodArray<z.ZodString>>;
430
520
  presenceDue: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodNumber>>;
@@ -432,6 +522,9 @@ export declare function chatActions(deps: ChatActionDeps): import("@parlor/core/
432
522
  readonly id: string;
433
523
  readonly onlineUntil: number;
434
524
  }>;
525
+ hostAgentToken: import("@parlor/core").ActionDefinition<z.ZodObject<{
526
+ agent: z.ZodString;
527
+ }, z.core.$strip>, Delegation>;
435
528
  hostClaim: import("@parlor/core").ActionDefinition<z.ZodObject<{}, z.core.$strip>, ClaimedTurn>;
436
529
  hostSignals: import("@parlor/core").ActionDefinition<z.ZodObject<{
437
530
  turns: z.ZodArray<z.ZodObject<{
@@ -504,6 +597,7 @@ export declare function chatActions(deps: ChatActionDeps): import("@parlor/core/
504
597
  form: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
505
598
  approval: z.ZodOptional<z.ZodEnum<{
506
599
  computer: "computer";
600
+ device: "device";
507
601
  presence: "presence";
508
602
  }>>;
509
603
  }, z.core.$strip>;
@@ -1 +1 @@
1
- {"version":3,"file":"actions.d.ts","sourceRoot":"","sources":["../../src/server/actions.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,aAAa,EAElB,KAAK,MAAM,EACX,KAAK,QAAQ,EAEd,MAAM,cAAc,CAAC;AACtB,OAAO,EAAE,KAAK,SAAS,EAAkB,MAAM,uBAAuB,CAAC;AACvE,OAAO,EAAE,KAAK,YAAY,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AACpE,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC5C,OAAO,EAAiC,KAAK,UAAU,EAAE,MAAM,aAAa,CAAC;AAC7E,OAAO,KAAK,EAEV,SAAS,EACT,YAAY,EACZ,aAAa,EACb,UAAU,EACV,WAAW,EACX,WAAW,EACX,WAAW,EACZ,MAAM,aAAa,CAAC;AACrB,OAAO,EAAiB,KAAK,WAAW,EAAE,MAAM,gBAAgB,CAAC;AACjE,OAAO,EAAE,iBAAiB,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAEpE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AAO3C,OAAO,EACL,KAAK,MAAM,EACX,KAAK,SAAS,EAGf,MAAM,YAAY,CAAC;AAEpB,OAAO,EAAE,iBAAiB,EAAE,QAAQ,EAAE,SAAS,EAAE,eAAe,EAAE,CAAC;AAEnE,MAAM,WAAW,OAAO,CAAC,CAAC;IACxB,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC;IACnB,QAAQ,CAAC,QAAQ,EAAE,QAAQ,GAAG,SAAS,CAAC;CACzC;AAED,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAC;IAC5B;;;;OAIG;IACH,kFAAkF;IAClF,QAAQ,CAAC,QAAQ,EAAE,CAAC,CAAC,EACnB,KAAK,EAAE,SAAS,EAChB,IAAI,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,KACtC,OAAO,CAAC,CAAC,CAAC,CAAC;IAChB,wFAAwF;IACxF,QAAQ,CAAC,SAAS,EAAE,CAAC,KAAK,EAAE,SAAS,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACxD,4FAA4F;IAC5F,QAAQ,CAAC,UAAU,EAAE,CAAC,KAAK,EAAE,SAAS,EAAE,OAAO,EAAE,SAAS,MAAM,EAAE,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACrF,QAAQ,CAAC,IAAI,EAAE,YAAY,CAAC;IAC5B,QAAQ,CAAC,KAAK,EAAE,SAAS,CAAC;IAC1B,QAAQ,CAAC,KAAK,EAAE,SAAS,CAAC;IAC1B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,YAAY,EAAE,MAAM,GAAG,SAAS,CAAC;IAC1C,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,SAAS,EAAE,CAAC,GAAG,EAAE,aAAa,KAAK,MAAM,CAAC;CACpD;AAwCD,wBAAgB,eAAe,CAAC,IAAI,EAAE,cAAc;IAGhD,IAAI;;;;IAmCJ,KAAK;;;;IAOL,OAAO;;;;;IAgBP,aAAa;;;;;;;IAeb,KAAK;IAOL,IAAI;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;qBAawB,MAAM;yBAAmB,MAAM;;IA0B3D,MAAM;;;;;;;;;;;;;;;;;;;;;;;;;;;;;qBAG6C,MAAM;;IAkBzD,MAAM;;;;;qBAIkD,MAAM;;IAS9D,UAAU;qBAKgB,IAAI;;EAGjC;AAED,uEAAuE;AACvE,wBAAgB,eAAe,CAAC,IAAI,EAAE,cAAc;IA+ChD,SAAS;;;;;;;;;;;;;;;;;;qBAgB6D,MAAM;;IAiC5E,UAAU;;;;;;;;;;;;qBAakB,MAAM;8BAAwB,MAAM;;IAiBhE,SAAS;IAmDT,WAAW;;;;;;IA4BX,UAAU;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;qBASO,MAAM;6BACE,MAAM;wBACX,WAAW,CAAC,OAAO,CAAC;;IAqBxC,UAAU;;;;;;;;;;;;;;;;;;;qBAU8C,MAAM;;EAiBjE;AAED;;;GAGG;AACH,wBAAgB,WAAW,CAAC,IAAI,EAAE,cAAc;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;qBArVhB,MAAM;yBAAmB,MAAM;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;qBA6BR,MAAM;;;;;;;qBAsBD,MAAM;;;qBAcpC,IAAI;;;;;;;;;;;;;;;;;;;;qBAqEwC,MAAM;;;;;;;;;;;;;;qBA8ChD,MAAM;8BAAwB,MAAM;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;qBAyG/C,MAAM;6BACE,MAAM;wBACX,WAAW,CAAC,OAAO,CAAC;;;;;;;;;;;;;;;;;;;;;qBA+BgB,MAAM;;GAyBjE;AAED,MAAM,MAAM,kBAAkB,GAAG,UAAU,CAAC,OAAO,WAAW,CAAC,CAAC;AAChE,MAAM,MAAM,aAAa,GAAG,SAAS,CAAC,kBAAkB,CAAC,CAAC;AAC1D,MAAM,MAAM,iBAAiB,GAAG,UAAU,CAAC,OAAO,eAAe,CAAC,CAAC;AACnE,MAAM,MAAM,iBAAiB,GAAG,UAAU,CAAC,OAAO,eAAe,CAAC,CAAC"}
1
+ {"version":3,"file":"actions.d.ts","sourceRoot":"","sources":["../../src/server/actions.ts"],"names":[],"mappings":"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"}
@@ -20,6 +20,8 @@ const itemId = idSchema("item");
20
20
  const afterSeq = z.number().int().min(0);
21
21
  const MIN_HOST_PROTOCOL = 2;
22
22
  const CONTEXT_HISTORY_ITEMS = 200;
23
+ /** An agent outside a turn asks again well inside the revocation horizon. */
24
+ const AGENT_TOKEN_TTL_MS = 10 * 60_000;
23
25
  const TERMINAL = new Set(["done", "failed", "cancelled"]);
24
26
  const dbOf = (ctx) => ctx.db;
25
27
  async function activeHosts(deps, db, owner) {
@@ -311,6 +313,17 @@ export function hostChatActions(deps) {
311
313
  return { id: host.host.hostId, onlineUntil };
312
314
  },
313
315
  }),
316
+ hostAgentToken: chatAction("host", enforcing, {
317
+ description: "A token for an agent on this computer outside any turn, such as Claude Code in a terminal, to call the app's actions as the user; revoked with the grant.",
318
+ input: z.object({ agent: z.string().min(1).max(120) }),
319
+ run: async ({ agent }, host, ctx) => {
320
+ await requireWelcome(host, dbOf(ctx));
321
+ if (!deps.auth.delegateAgent) {
322
+ throw new ActionError("not_found", "This app's agents run only in its sidebar.");
323
+ }
324
+ return deps.auth.delegateAgent(host.host, { agent, ttlMs: AGENT_TOKEN_TTL_MS });
325
+ },
326
+ }),
314
327
  hostClaim: chatAction("host", enforcing, {
315
328
  description: "Take the next turn addressed to this computer with its turn token; not_found when none waits.",
316
329
  input: z.object({}),