@a5c-ai/agent-comm-mux 5.0.1-staging.04ca6ab00d21

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 (263) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +99 -0
  3. package/dist/adapter-registry.d.ts +51 -0
  4. package/dist/adapter-registry.d.ts.map +1 -0
  5. package/dist/adapter-registry.js +208 -0
  6. package/dist/adapter-registry.js.map +1 -0
  7. package/dist/adapter-types.d.ts +164 -0
  8. package/dist/adapter-types.d.ts.map +1 -0
  9. package/dist/adapter-types.js +27 -0
  10. package/dist/adapter-types.js.map +1 -0
  11. package/dist/adapter.d.ts +248 -0
  12. package/dist/adapter.d.ts.map +1 -0
  13. package/dist/adapter.js +18 -0
  14. package/dist/adapter.js.map +1 -0
  15. package/dist/atomic-fs.d.ts +33 -0
  16. package/dist/atomic-fs.d.ts.map +1 -0
  17. package/dist/atomic-fs.js +190 -0
  18. package/dist/atomic-fs.js.map +1 -0
  19. package/dist/auth-manager.d.ts +37 -0
  20. package/dist/auth-manager.d.ts.map +1 -0
  21. package/dist/auth-manager.js +94 -0
  22. package/dist/auth-manager.js.map +1 -0
  23. package/dist/auth-types.d.ts +83 -0
  24. package/dist/auth-types.d.ts.map +1 -0
  25. package/dist/auth-types.js +10 -0
  26. package/dist/auth-types.js.map +1 -0
  27. package/dist/automation.d.ts +104 -0
  28. package/dist/automation.d.ts.map +1 -0
  29. package/dist/automation.js +2 -0
  30. package/dist/automation.js.map +1 -0
  31. package/dist/browser.d.ts +5 -0
  32. package/dist/browser.d.ts.map +1 -0
  33. package/dist/browser.js +2 -0
  34. package/dist/browser.js.map +1 -0
  35. package/dist/builtin-hooks.d.ts +24 -0
  36. package/dist/builtin-hooks.d.ts.map +1 -0
  37. package/dist/builtin-hooks.js +80 -0
  38. package/dist/builtin-hooks.js.map +1 -0
  39. package/dist/capabilities.d.ts +251 -0
  40. package/dist/capabilities.d.ts.map +1 -0
  41. package/dist/capabilities.js +7 -0
  42. package/dist/capabilities.js.map +1 -0
  43. package/dist/client.d.ts +118 -0
  44. package/dist/client.d.ts.map +1 -0
  45. package/dist/client.js +316 -0
  46. package/dist/client.js.map +1 -0
  47. package/dist/config-manager.d.ts +85 -0
  48. package/dist/config-manager.d.ts.map +1 -0
  49. package/dist/config-manager.js +202 -0
  50. package/dist/config-manager.js.map +1 -0
  51. package/dist/config-types.d.ts +134 -0
  52. package/dist/config-types.d.ts.map +1 -0
  53. package/dist/config-types.js +10 -0
  54. package/dist/config-types.js.map +1 -0
  55. package/dist/cost-utils.d.ts +31 -0
  56. package/dist/cost-utils.d.ts.map +1 -0
  57. package/dist/cost-utils.js +69 -0
  58. package/dist/cost-utils.js.map +1 -0
  59. package/dist/errors.d.ts +50 -0
  60. package/dist/errors.d.ts.map +1 -0
  61. package/dist/errors.js +85 -0
  62. package/dist/errors.js.map +1 -0
  63. package/dist/events-control.d.ts +91 -0
  64. package/dist/events-control.d.ts.map +1 -0
  65. package/dist/events-control.js +8 -0
  66. package/dist/events-control.js.map +1 -0
  67. package/dist/events.d.ts +285 -0
  68. package/dist/events.d.ts.map +1 -0
  69. package/dist/events.js +8 -0
  70. package/dist/events.js.map +1 -0
  71. package/dist/hook-catalog.d.ts +20 -0
  72. package/dist/hook-catalog.d.ts.map +1 -0
  73. package/dist/hook-catalog.js +63 -0
  74. package/dist/hook-catalog.js.map +1 -0
  75. package/dist/hook-dispatcher.d.ts +24 -0
  76. package/dist/hook-dispatcher.d.ts.map +1 -0
  77. package/dist/hook-dispatcher.js +91 -0
  78. package/dist/hook-dispatcher.js.map +1 -0
  79. package/dist/hook-payload.d.ts +24 -0
  80. package/dist/hook-payload.d.ts.map +1 -0
  81. package/dist/hook-payload.js +62 -0
  82. package/dist/hook-payload.js.map +1 -0
  83. package/dist/hooks.d.ts +59 -0
  84. package/dist/hooks.d.ts.map +1 -0
  85. package/dist/hooks.js +118 -0
  86. package/dist/hooks.js.map +1 -0
  87. package/dist/host-detection.d.ts +67 -0
  88. package/dist/host-detection.d.ts.map +1 -0
  89. package/dist/host-detection.js +147 -0
  90. package/dist/host-detection.js.map +1 -0
  91. package/dist/index.d.ts +88 -0
  92. package/dist/index.d.ts.map +1 -0
  93. package/dist/index.js +50 -0
  94. package/dist/index.js.map +1 -0
  95. package/dist/interaction-channel-impl.d.ts +56 -0
  96. package/dist/interaction-channel-impl.d.ts.map +1 -0
  97. package/dist/interaction-channel-impl.js +159 -0
  98. package/dist/interaction-channel-impl.js.map +1 -0
  99. package/dist/interaction.d.ts +93 -0
  100. package/dist/interaction.d.ts.map +1 -0
  101. package/dist/interaction.js +8 -0
  102. package/dist/interaction.js.map +1 -0
  103. package/dist/invocation.d.ts +100 -0
  104. package/dist/invocation.d.ts.map +1 -0
  105. package/dist/invocation.js +17 -0
  106. package/dist/invocation.js.map +1 -0
  107. package/dist/kanban.d.ts +894 -0
  108. package/dist/kanban.d.ts.map +1 -0
  109. package/dist/kanban.js +1155 -0
  110. package/dist/kanban.js.map +1 -0
  111. package/dist/merge.d.ts +37 -0
  112. package/dist/merge.d.ts.map +1 -0
  113. package/dist/merge.js +102 -0
  114. package/dist/merge.js.map +1 -0
  115. package/dist/model-registry.d.ts +61 -0
  116. package/dist/model-registry.d.ts.map +1 -0
  117. package/dist/model-registry.js +198 -0
  118. package/dist/model-registry.js.map +1 -0
  119. package/dist/plugin-manager-impl.d.ts +48 -0
  120. package/dist/plugin-manager-impl.d.ts.map +1 -0
  121. package/dist/plugin-manager-impl.js +343 -0
  122. package/dist/plugin-manager-impl.js.map +1 -0
  123. package/dist/plugin-manager.d.ts +81 -0
  124. package/dist/plugin-manager.d.ts.map +1 -0
  125. package/dist/plugin-manager.js +7 -0
  126. package/dist/plugin-manager.js.map +1 -0
  127. package/dist/plugin-types.d.ts +114 -0
  128. package/dist/plugin-types.d.ts.map +1 -0
  129. package/dist/plugin-types.js +7 -0
  130. package/dist/plugin-types.js.map +1 -0
  131. package/dist/process-tracker.d.ts +20 -0
  132. package/dist/process-tracker.d.ts.map +1 -0
  133. package/dist/process-tracker.js +96 -0
  134. package/dist/process-tracker.js.map +1 -0
  135. package/dist/profiles.d.ts +99 -0
  136. package/dist/profiles.d.ts.map +1 -0
  137. package/dist/profiles.js +231 -0
  138. package/dist/profiles.js.map +1 -0
  139. package/dist/programmatic-runner.d.ts +4 -0
  140. package/dist/programmatic-runner.d.ts.map +1 -0
  141. package/dist/programmatic-runner.js +110 -0
  142. package/dist/programmatic-runner.js.map +1 -0
  143. package/dist/provider-config.d.ts +40 -0
  144. package/dist/provider-config.d.ts.map +1 -0
  145. package/dist/provider-config.js +67 -0
  146. package/dist/provider-config.js.map +1 -0
  147. package/dist/provider-profiles.d.ts +47 -0
  148. package/dist/provider-profiles.d.ts.map +1 -0
  149. package/dist/provider-profiles.js +117 -0
  150. package/dist/provider-profiles.js.map +1 -0
  151. package/dist/provider-resolver.d.ts +15 -0
  152. package/dist/provider-resolver.d.ts.map +1 -0
  153. package/dist/provider-resolver.js +114 -0
  154. package/dist/provider-resolver.js.map +1 -0
  155. package/dist/provider-support-matrix.d.ts +12 -0
  156. package/dist/provider-support-matrix.d.ts.map +1 -0
  157. package/dist/provider-support-matrix.js +88 -0
  158. package/dist/provider-support-matrix.js.map +1 -0
  159. package/dist/remote-runner.d.ts +4 -0
  160. package/dist/remote-runner.d.ts.map +1 -0
  161. package/dist/remote-runner.js +114 -0
  162. package/dist/remote-runner.js.map +1 -0
  163. package/dist/retry.d.ts +13 -0
  164. package/dist/retry.d.ts.map +1 -0
  165. package/dist/retry.js +17 -0
  166. package/dist/retry.js.map +1 -0
  167. package/dist/run-handle-cost.d.ts +36 -0
  168. package/dist/run-handle-cost.d.ts.map +1 -0
  169. package/dist/run-handle-cost.js +62 -0
  170. package/dist/run-handle-cost.js.map +1 -0
  171. package/dist/run-handle-impl.d.ts +144 -0
  172. package/dist/run-handle-impl.d.ts.map +1 -0
  173. package/dist/run-handle-impl.js +695 -0
  174. package/dist/run-handle-impl.js.map +1 -0
  175. package/dist/run-handle.d.ts +222 -0
  176. package/dist/run-handle.d.ts.map +1 -0
  177. package/dist/run-handle.js +9 -0
  178. package/dist/run-handle.js.map +1 -0
  179. package/dist/run-options-validation.d.ts +23 -0
  180. package/dist/run-options-validation.d.ts.map +1 -0
  181. package/dist/run-options-validation.js +234 -0
  182. package/dist/run-options-validation.js.map +1 -0
  183. package/dist/run-options.d.ts +128 -0
  184. package/dist/run-options.d.ts.map +1 -0
  185. package/dist/run-options.js +329 -0
  186. package/dist/run-options.js.map +1 -0
  187. package/dist/runtime-hook-dispatcher.d.ts +19 -0
  188. package/dist/runtime-hook-dispatcher.d.ts.map +1 -0
  189. package/dist/runtime-hook-dispatcher.js +50 -0
  190. package/dist/runtime-hook-dispatcher.js.map +1 -0
  191. package/dist/runtime-hooks.d.ts +47 -0
  192. package/dist/runtime-hooks.d.ts.map +1 -0
  193. package/dist/runtime-hooks.js +2 -0
  194. package/dist/runtime-hooks.js.map +1 -0
  195. package/dist/schema/__tests__/event-schema.test.d.ts +1 -0
  196. package/dist/schema/__tests__/event-schema.test.d.ts.map +1 -0
  197. package/dist/schema/__tests__/event-schema.test.js +480 -0
  198. package/dist/schema/__tests__/event-schema.test.js.map +1 -0
  199. package/dist/schema/event-schema.d.ts +120 -0
  200. package/dist/schema/event-schema.d.ts.map +1 -0
  201. package/dist/schema/event-schema.js +546 -0
  202. package/dist/schema/event-schema.js.map +1 -0
  203. package/dist/schema/index.d.ts +7 -0
  204. package/dist/schema/index.d.ts.map +1 -0
  205. package/dist/schema/index.js +49 -0
  206. package/dist/schema/index.js.map +1 -0
  207. package/dist/session-manager-helpers.d.ts +33 -0
  208. package/dist/session-manager-helpers.d.ts.map +1 -0
  209. package/dist/session-manager-helpers.js +66 -0
  210. package/dist/session-manager-helpers.js.map +1 -0
  211. package/dist/session-manager.d.ts +70 -0
  212. package/dist/session-manager.d.ts.map +1 -0
  213. package/dist/session-manager.js +343 -0
  214. package/dist/session-manager.js.map +1 -0
  215. package/dist/session-types.d.ts +358 -0
  216. package/dist/session-types.d.ts.map +1 -0
  217. package/dist/session-types.js +10 -0
  218. package/dist/session-types.js.map +1 -0
  219. package/dist/spawn-invocation.d.ts +52 -0
  220. package/dist/spawn-invocation.d.ts.map +1 -0
  221. package/dist/spawn-invocation.js +218 -0
  222. package/dist/spawn-invocation.js.map +1 -0
  223. package/dist/spawn-runner-utils.d.ts +21 -0
  224. package/dist/spawn-runner-utils.d.ts.map +1 -0
  225. package/dist/spawn-runner-utils.js +102 -0
  226. package/dist/spawn-runner-utils.js.map +1 -0
  227. package/dist/spawn-runner.d.ts +21 -0
  228. package/dist/spawn-runner.d.ts.map +1 -0
  229. package/dist/spawn-runner.js +576 -0
  230. package/dist/spawn-runner.js.map +1 -0
  231. package/dist/spawn-runtime-hooks.d.ts +15 -0
  232. package/dist/spawn-runtime-hooks.d.ts.map +1 -0
  233. package/dist/spawn-runtime-hooks.js +136 -0
  234. package/dist/spawn-runtime-hooks.js.map +1 -0
  235. package/dist/state-machine.d.ts +33 -0
  236. package/dist/state-machine.d.ts.map +1 -0
  237. package/dist/state-machine.js +61 -0
  238. package/dist/state-machine.js.map +1 -0
  239. package/dist/storage.d.ts +47 -0
  240. package/dist/storage.d.ts.map +1 -0
  241. package/dist/storage.js +90 -0
  242. package/dist/storage.js.map +1 -0
  243. package/dist/stream-assembler.d.ts +51 -0
  244. package/dist/stream-assembler.d.ts.map +1 -0
  245. package/dist/stream-assembler.js +86 -0
  246. package/dist/stream-assembler.js.map +1 -0
  247. package/dist/tools/classify.d.ts +9 -0
  248. package/dist/tools/classify.d.ts.map +1 -0
  249. package/dist/tools/classify.js +77 -0
  250. package/dist/tools/classify.js.map +1 -0
  251. package/dist/tools/index.d.ts +2 -0
  252. package/dist/tools/index.d.ts.map +1 -0
  253. package/dist/tools/index.js +2 -0
  254. package/dist/tools/index.js.map +1 -0
  255. package/dist/types.d.ts +288 -0
  256. package/dist/types.d.ts.map +1 -0
  257. package/dist/types.js +8 -0
  258. package/dist/types.js.map +1 -0
  259. package/dist/workspaces.d.ts +142 -0
  260. package/dist/workspaces.d.ts.map +1 -0
  261. package/dist/workspaces.js +515 -0
  262. package/dist/workspaces.js.map +1 -0
  263. package/package.json +107 -0
@@ -0,0 +1,128 @@
1
+ /**
2
+ * RunOptions interface and validation for @a5c-ai/agent-mux.
3
+ *
4
+ * Defines the full set of options accepted by `AgentMuxClient.run()`
5
+ * and the validation logic that enforces spec constraints.
6
+ */
7
+ import type { AgentName, Attachment, InputRequiredEvent, ApprovalRequestEvent, McpServerConfig, RetryPolicy } from './types.js';
8
+ import type { RuntimeHooks } from './runtime-hooks.js';
9
+ import type { InvocationMode } from './invocation.js';
10
+ export { PROHIBITED_PROFILE_FIELDS, validateProfileData, } from './run-options-validation.js';
11
+ /**
12
+ * Full configuration for a single agent run.
13
+ *
14
+ * Only `agent` and `prompt` are required; all other fields are optional
15
+ * and fall back to profile, client, or global defaults.
16
+ */
17
+ export interface RunOptions {
18
+ /** The agent to invoke. */
19
+ agent: AgentName;
20
+ /** The prompt to send to the agent. */
21
+ prompt: string | string[];
22
+ /** System prompt text to inject. */
23
+ systemPrompt?: string;
24
+ /** How to combine the system prompt with the agent's default. */
25
+ systemPromptMode?: 'prepend' | 'append' | 'replace';
26
+ /** File or data attachments to include with the prompt. */
27
+ attachments?: Attachment[];
28
+ /** Model identifier (agent-specific). */
29
+ model?: string;
30
+ /** Thinking effort level. */
31
+ thinkingEffort?: 'low' | 'medium' | 'high' | 'max';
32
+ /** Thinking budget in tokens. Must be >= 1024. */
33
+ thinkingBudgetTokens?: number;
34
+ /** Override thinking behavior entirely (agent-specific). */
35
+ thinkingOverride?: Record<string, unknown>;
36
+ /** Sampling temperature. Must be in [0, 2]. */
37
+ temperature?: number;
38
+ /** Top-P nucleus sampling. Must be in [0, 1]. */
39
+ topP?: number;
40
+ /** Top-K sampling. Must be an integer >= 1. */
41
+ topK?: number;
42
+ /** Maximum tokens for the response. Must be >= 1. */
43
+ maxTokens?: number;
44
+ /** Maximum output tokens (alias). Must be >= 1. */
45
+ maxOutputTokens?: number;
46
+ /** Resume an existing session by ID. Mutually exclusive with forkSessionId and noSession. */
47
+ sessionId?: string;
48
+ /** Fork from an existing session. Mutually exclusive with sessionId and noSession. */
49
+ forkSessionId?: string;
50
+ /** Start with no session context. Mutually exclusive with sessionId and forkSessionId. */
51
+ noSession?: boolean;
52
+ /** Enable streaming. */
53
+ stream?: boolean | 'auto';
54
+ /** Output format. */
55
+ outputFormat?: 'text' | 'json' | 'jsonl';
56
+ /** Force headless one-shot prompt delivery instead of stdin-driven interactive transport. */
57
+ nonInteractive?: boolean;
58
+ /**
59
+ * Spawn the harness with a real PTY (via node-pty) so it gets a TTY for
60
+ * interactive features (colors, prompt input, tool approval UIs).
61
+ * Output is tee'd through the event parser so hooks still fire.
62
+ */
63
+ interactive?: boolean;
64
+ /** Working directory for the agent process. Must be an absolute path. */
65
+ cwd?: string;
66
+ /** Additional environment variables for the agent process. */
67
+ env?: Record<string, string>;
68
+ /** Overall run timeout in milliseconds. Must be a non-negative integer. */
69
+ timeout?: number;
70
+ /** Inactivity timeout in milliseconds. Must be a non-negative integer. */
71
+ inactivityTimeout?: number;
72
+ /** Maximum number of agent turns. Must be >= 1. */
73
+ maxTurns?: number;
74
+ /** Approval mode for tool calls and file operations. */
75
+ approvalMode?: 'yolo' | 'prompt' | 'deny';
76
+ /** Callback invoked when the agent requires user input. Returns the input text. */
77
+ onInputRequired?: (event: InputRequiredEvent) => Promise<string>;
78
+ /** Callback invoked when the agent requests tool call approval. Returns the decision. */
79
+ onApprovalRequest?: (event: ApprovalRequestEvent) => Promise<'approve' | 'deny'>;
80
+ /** In-process runtime hooks for this run only. */
81
+ hooks?: RuntimeHooks;
82
+ /** Skills to load for this run. */
83
+ skills?: string[];
84
+ /** Path or content for the agents doc. */
85
+ agentsDoc?: string;
86
+ /** MCP server configurations for this run. */
87
+ mcpServers?: McpServerConfig[];
88
+ /** Retry policy for transient failures. */
89
+ retryPolicy?: RetryPolicy;
90
+ /** Explicit run ID (ULID format, 26 Crockford base32 chars). */
91
+ runId?: string;
92
+ /** Tags for run indexing and filtering. */
93
+ tags?: string[];
94
+ /** Project ID for multi-project setups. */
95
+ projectId?: string;
96
+ /** Named profile to apply as a base layer. Must match `^[a-zA-Z0-9_-]{1,64}$`. */
97
+ profile?: string;
98
+ /** Whether to collect all events in memory. */
99
+ collectEvents?: boolean;
100
+ /** Grace period in milliseconds for cleanup on abort. */
101
+ gracePeriodMs?: number;
102
+ /** Invocation mode — how to spawn the underlying process (local, docker, ssh, k8s). */
103
+ invocation?: InvocationMode;
104
+ /** Provider configuration for model/provider selection. */
105
+ providerConfig?: import('./provider-config.js').ProviderConfig;
106
+ /** Named provider profile from ~/.amux/providers.json. */
107
+ providerProfile?: string;
108
+ }
109
+ /**
110
+ * Handle returned by `AgentMuxClient.run()`.
111
+ *
112
+ * Full implementation lives in run-handle.ts. Re-exported here for
113
+ * backwards compatibility with imports from run-options.
114
+ */
115
+ export type { RunHandle } from './run-handle.js';
116
+ /**
117
+ * Validate RunOptions according to the spec validation order.
118
+ *
119
+ * Validation order:
120
+ * 1. Session mutual exclusivity
121
+ * 2. Required fields (agent, prompt non-empty)
122
+ * 3. Range validation for numeric/enum fields
123
+ * 4. Attachment validation
124
+ * 5. McpServerConfig validation
125
+ *
126
+ * @throws ValidationError if any fields are invalid.
127
+ */
128
+ export declare function validateRunOptions(options: RunOptions): void;
@@ -0,0 +1 @@
1
+ {"version":3,"file":"run-options.d.ts","sourceRoot":"","sources":["../src/run-options.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAKH,OAAO,KAAK,EACV,SAAS,EACT,UAAU,EAEV,kBAAkB,EAClB,oBAAoB,EACpB,eAAe,EACf,WAAW,EAEZ,MAAM,YAAY,CAAC;AACpB,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAEvD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAQtD,OAAO,EACL,yBAAyB,EACzB,mBAAmB,GACpB,MAAM,6BAA6B,CAAC;AAMrC;;;;;GAKG;AACH,MAAM,WAAW,UAAU;IAGzB,2BAA2B;IAC3B,KAAK,EAAE,SAAS,CAAC;IAEjB,uCAAuC;IACvC,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;IAI1B,oCAAoC;IACpC,YAAY,CAAC,EAAE,MAAM,CAAC;IAEtB,iEAAiE;IACjE,gBAAgB,CAAC,EAAE,SAAS,GAAG,QAAQ,GAAG,SAAS,CAAC;IAIpD,2DAA2D;IAC3D,WAAW,CAAC,EAAE,UAAU,EAAE,CAAC;IAI3B,yCAAyC;IACzC,KAAK,CAAC,EAAE,MAAM,CAAC;IAIf,6BAA6B;IAC7B,cAAc,CAAC,EAAE,KAAK,GAAG,QAAQ,GAAG,MAAM,GAAG,KAAK,CAAC;IAEnD,kDAAkD;IAClD,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAE9B,4DAA4D;IAC5D,gBAAgB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAI3C,+CAA+C;IAC/C,WAAW,CAAC,EAAE,MAAM,CAAC;IAErB,iDAAiD;IACjD,IAAI,CAAC,EAAE,MAAM,CAAC;IAEd,+CAA+C;IAC/C,IAAI,CAAC,EAAE,MAAM,CAAC;IAEd,qDAAqD;IACrD,SAAS,CAAC,EAAE,MAAM,CAAC;IAEnB,mDAAmD;IACnD,eAAe,CAAC,EAAE,MAAM,CAAC;IAIzB,6FAA6F;IAC7F,SAAS,CAAC,EAAE,MAAM,CAAC;IAEnB,sFAAsF;IACtF,aAAa,CAAC,EAAE,MAAM,CAAC;IAEvB,0FAA0F;IAC1F,SAAS,CAAC,EAAE,OAAO,CAAC;IAIpB,wBAAwB;IACxB,MAAM,CAAC,EAAE,OAAO,GAAG,MAAM,CAAC;IAE1B,qBAAqB;IACrB,YAAY,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC;IAEzC,6FAA6F;IAC7F,cAAc,CAAC,EAAE,OAAO,CAAC;IAEzB;;;;OAIG;IACH,WAAW,CAAC,EAAE,OAAO,CAAC;IAItB,yEAAyE;IACzE,GAAG,CAAC,EAAE,MAAM,CAAC;IAEb,8DAA8D;IAC9D,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAI7B,2EAA2E;IAC3E,OAAO,CAAC,EAAE,MAAM,CAAC;IAEjB,0EAA0E;IAC1E,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAE3B,mDAAmD;IACnD,QAAQ,CAAC,EAAE,MAAM,CAAC;IAIlB,wDAAwD;IACxD,YAAY,CAAC,EAAE,MAAM,GAAG,QAAQ,GAAG,MAAM,CAAC;IAE1C,mFAAmF;IACnF,eAAe,CAAC,EAAE,CAAC,KAAK,EAAE,kBAAkB,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;IAEjE,yFAAyF;IACzF,iBAAiB,CAAC,EAAE,CAAC,KAAK,EAAE,oBAAoB,KAAK,OAAO,CAAC,SAAS,GAAG,MAAM,CAAC,CAAC;IAIjF,kDAAkD;IAClD,KAAK,CAAC,EAAE,YAAY,CAAC;IAErB,mCAAmC;IACnC,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAElB,0CAA0C;IAC1C,SAAS,CAAC,EAAE,MAAM,CAAC;IAEnB,8CAA8C;IAC9C,UAAU,CAAC,EAAE,eAAe,EAAE,CAAC;IAE/B,2CAA2C;IAC3C,WAAW,CAAC,EAAE,WAAW,CAAC;IAI1B,gEAAgE;IAChE,KAAK,CAAC,EAAE,MAAM,CAAC;IAEf,2CAA2C;IAC3C,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAEhB,2CAA2C;IAC3C,SAAS,CAAC,EAAE,MAAM,CAAC;IAEnB,kFAAkF;IAClF,OAAO,CAAC,EAAE,MAAM,CAAC;IAIjB,+CAA+C;IAC/C,aAAa,CAAC,EAAE,OAAO,CAAC;IAExB,yDAAyD;IACzD,aAAa,CAAC,EAAE,MAAM,CAAC;IAEvB,uFAAuF;IACvF,UAAU,CAAC,EAAE,cAAc,CAAC;IAI5B,2DAA2D;IAC3D,cAAc,CAAC,EAAE,OAAO,sBAAsB,EAAE,cAAc,CAAC;IAE/D,0DAA0D;IAC1D,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B;AAMD;;;;;GAKG;AACH,YAAY,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAMjD;;;;;;;;;;;GAWG;AACH,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,UAAU,GAAG,IAAI,CA8T5D"}
@@ -0,0 +1,329 @@
1
+ /**
2
+ * RunOptions interface and validation for @a5c-ai/agent-mux.
3
+ *
4
+ * Defines the full set of options accepted by `AgentMuxClient.run()`
5
+ * and the validation logic that enforces spec constraints.
6
+ */
7
+ import * as fs from 'node:fs';
8
+ import * as path from 'node:path';
9
+ import { ValidationError } from './errors.js';
10
+ import { VALID_ERROR_CODES, PROFILE_NAME_RE, MCP_NAME_RE, ULID_RE, } from './run-options-validation.js';
11
+ export { PROHIBITED_PROFILE_FIELDS, validateProfileData, } from './run-options-validation.js';
12
+ // ---------------------------------------------------------------------------
13
+ // validateRunOptions (§6.4)
14
+ // ---------------------------------------------------------------------------
15
+ /**
16
+ * Validate RunOptions according to the spec validation order.
17
+ *
18
+ * Validation order:
19
+ * 1. Session mutual exclusivity
20
+ * 2. Required fields (agent, prompt non-empty)
21
+ * 3. Range validation for numeric/enum fields
22
+ * 4. Attachment validation
23
+ * 5. McpServerConfig validation
24
+ *
25
+ * @throws ValidationError if any fields are invalid.
26
+ */
27
+ export function validateRunOptions(options) {
28
+ // §6.4: Validation stops at the first failure group.
29
+ // 1. Session mutual exclusivity (§6.1 — per-pair error messages)
30
+ {
31
+ const errors = [];
32
+ const hasSession = options.sessionId !== undefined;
33
+ const hasFork = options.forkSessionId !== undefined;
34
+ const hasNoSession = options.noSession === true;
35
+ if (hasSession && hasNoSession) {
36
+ errors.push({
37
+ field: 'sessionId',
38
+ message: 'sessionId and noSession are mutually exclusive',
39
+ received: { sessionId: options.sessionId, noSession: options.noSession },
40
+ expected: 'mutually exclusive',
41
+ });
42
+ }
43
+ if (hasSession && hasFork) {
44
+ errors.push({
45
+ field: 'sessionId',
46
+ message: 'sessionId and forkSessionId are mutually exclusive',
47
+ received: { sessionId: options.sessionId, forkSessionId: options.forkSessionId },
48
+ expected: 'mutually exclusive',
49
+ });
50
+ }
51
+ if (hasFork && hasNoSession) {
52
+ errors.push({
53
+ field: 'forkSessionId',
54
+ message: 'forkSessionId and noSession are mutually exclusive',
55
+ received: { forkSessionId: options.forkSessionId, noSession: options.noSession },
56
+ expected: 'mutually exclusive',
57
+ });
58
+ }
59
+ if (errors.length > 0)
60
+ throw new ValidationError(errors);
61
+ }
62
+ // 2. Required fields
63
+ {
64
+ const errors = [];
65
+ if (!options.agent || (typeof options.agent === 'string' && options.agent.trim() === '')) {
66
+ errors.push({
67
+ field: 'agent',
68
+ message: 'is required and must be a non-empty string',
69
+ received: options.agent,
70
+ expected: 'AgentName (non-empty string)',
71
+ });
72
+ }
73
+ if (options.prompt === undefined || options.prompt === null) {
74
+ errors.push({
75
+ field: 'prompt',
76
+ message: 'is required',
77
+ received: options.prompt,
78
+ expected: 'string | string[] (non-empty)',
79
+ });
80
+ }
81
+ else if (typeof options.prompt === 'string') {
82
+ if (options.prompt.trim() === '') {
83
+ errors.push({
84
+ field: 'prompt',
85
+ message: 'must not be empty',
86
+ received: options.prompt,
87
+ expected: 'non-empty string',
88
+ });
89
+ }
90
+ }
91
+ else if (Array.isArray(options.prompt)) {
92
+ if (options.prompt.length === 0 || options.prompt.every(s => s.trim() === '')) {
93
+ errors.push({
94
+ field: 'prompt',
95
+ message: 'must not be empty',
96
+ received: options.prompt,
97
+ expected: 'non-empty string[]',
98
+ });
99
+ }
100
+ }
101
+ if (errors.length > 0)
102
+ throw new ValidationError(errors);
103
+ }
104
+ // 3. Range validation for numeric/enum fields
105
+ const errors = [];
106
+ if (options.temperature !== undefined) {
107
+ if (typeof options.temperature !== 'number' || !Number.isFinite(options.temperature) || options.temperature < 0 || options.temperature > 2) {
108
+ errors.push({ field: 'temperature', message: 'must be a number in [0, 2]', received: options.temperature, expected: '[0, 2]' });
109
+ }
110
+ }
111
+ if (options.topP !== undefined) {
112
+ if (typeof options.topP !== 'number' || !Number.isFinite(options.topP) || options.topP < 0 || options.topP > 1) {
113
+ errors.push({ field: 'topP', message: 'must be a number in [0, 1]', received: options.topP, expected: '[0, 1]' });
114
+ }
115
+ }
116
+ if (options.topK !== undefined) {
117
+ if (typeof options.topK !== 'number' || !Number.isFinite(options.topK) || options.topK < 1 || !Number.isInteger(options.topK)) {
118
+ errors.push({ field: 'topK', message: 'must be an integer >= 1', received: options.topK, expected: '>= 1 (integer)' });
119
+ }
120
+ }
121
+ if (options.maxTokens !== undefined) {
122
+ if (typeof options.maxTokens !== 'number' || !Number.isFinite(options.maxTokens) || options.maxTokens < 1 || !Number.isInteger(options.maxTokens)) {
123
+ errors.push({ field: 'maxTokens', message: 'must be an integer >= 1', received: options.maxTokens, expected: '>= 1 (integer)' });
124
+ }
125
+ }
126
+ if (options.maxOutputTokens !== undefined) {
127
+ if (typeof options.maxOutputTokens !== 'number' || !Number.isFinite(options.maxOutputTokens) || options.maxOutputTokens < 1 || !Number.isInteger(options.maxOutputTokens)) {
128
+ errors.push({ field: 'maxOutputTokens', message: 'must be an integer >= 1', received: options.maxOutputTokens, expected: '>= 1 (integer)' });
129
+ }
130
+ }
131
+ if (options.thinkingBudgetTokens !== undefined) {
132
+ if (typeof options.thinkingBudgetTokens !== 'number' || !Number.isFinite(options.thinkingBudgetTokens) || options.thinkingBudgetTokens < 1024 || !Number.isInteger(options.thinkingBudgetTokens)) {
133
+ errors.push({ field: 'thinkingBudgetTokens', message: 'must be an integer >= 1024', received: options.thinkingBudgetTokens, expected: '>= 1024 (integer)' });
134
+ }
135
+ }
136
+ if (options.timeout !== undefined) {
137
+ if (typeof options.timeout !== 'number' || !Number.isFinite(options.timeout) || options.timeout < 0 || !Number.isInteger(options.timeout)) {
138
+ errors.push({ field: 'timeout', message: 'must be a non-negative integer', received: options.timeout, expected: '>= 0 (integer, ms)' });
139
+ }
140
+ }
141
+ if (options.inactivityTimeout !== undefined) {
142
+ if (typeof options.inactivityTimeout !== 'number' || !Number.isFinite(options.inactivityTimeout) || options.inactivityTimeout < 0 || !Number.isInteger(options.inactivityTimeout)) {
143
+ errors.push({ field: 'inactivityTimeout', message: 'must be a non-negative integer', received: options.inactivityTimeout, expected: '>= 0 (integer, ms)' });
144
+ }
145
+ }
146
+ if (options.maxTurns !== undefined) {
147
+ if (typeof options.maxTurns !== 'number' || !Number.isFinite(options.maxTurns) || options.maxTurns < 1 || !Number.isInteger(options.maxTurns)) {
148
+ errors.push({ field: 'maxTurns', message: 'must be an integer >= 1', received: options.maxTurns, expected: '>= 1 (integer)' });
149
+ }
150
+ }
151
+ // Enum validations
152
+ if (options.approvalMode !== undefined) {
153
+ const valid = ['yolo', 'prompt', 'deny'];
154
+ if (!valid.includes(options.approvalMode)) {
155
+ errors.push({ field: 'approvalMode', message: 'must be one of: yolo, prompt, deny', received: options.approvalMode, expected: "'yolo' | 'prompt' | 'deny'" });
156
+ }
157
+ }
158
+ if (options.stream !== undefined) {
159
+ if (options.stream !== true && options.stream !== false && options.stream !== 'auto') {
160
+ errors.push({ field: 'stream', message: "must be true, false, or 'auto'", received: options.stream, expected: "boolean | 'auto'" });
161
+ }
162
+ }
163
+ if (options.systemPromptMode !== undefined) {
164
+ const valid = ['prepend', 'append', 'replace'];
165
+ if (!valid.includes(options.systemPromptMode)) {
166
+ errors.push({ field: 'systemPromptMode', message: 'must be one of: prepend, append, replace', received: options.systemPromptMode, expected: "'prepend' | 'append' | 'replace'" });
167
+ }
168
+ }
169
+ if (options.outputFormat !== undefined) {
170
+ const valid = ['text', 'json', 'jsonl'];
171
+ if (!valid.includes(options.outputFormat)) {
172
+ errors.push({ field: 'outputFormat', message: 'must be one of: text, json, jsonl', received: options.outputFormat, expected: "'text' | 'json' | 'jsonl'" });
173
+ }
174
+ }
175
+ if (options.thinkingEffort !== undefined) {
176
+ const valid = ['low', 'medium', 'high', 'max'];
177
+ if (!valid.includes(options.thinkingEffort)) {
178
+ errors.push({ field: 'thinkingEffort', message: 'must be one of: low, medium, high, max', received: options.thinkingEffort, expected: "'low' | 'medium' | 'high' | 'max'" });
179
+ }
180
+ }
181
+ // env values must be strings
182
+ if (options.env !== undefined) {
183
+ for (const [key, val] of Object.entries(options.env)) {
184
+ if (typeof val !== 'string') {
185
+ errors.push({ field: `env.${key}`, message: 'values must be strings', received: val, expected: 'string' });
186
+ }
187
+ }
188
+ }
189
+ // cwd must be absolute and the directory must exist
190
+ if (options.cwd !== undefined) {
191
+ if (!path.isAbsolute(options.cwd)) {
192
+ errors.push({ field: 'cwd', message: 'must be an absolute path', received: options.cwd, expected: 'Absolute path' });
193
+ }
194
+ else {
195
+ try {
196
+ const stat = fs.statSync(options.cwd);
197
+ if (!stat.isDirectory()) {
198
+ errors.push({ field: 'cwd', message: 'must be an existing directory', received: options.cwd, expected: 'existing directory' });
199
+ }
200
+ }
201
+ catch {
202
+ errors.push({ field: 'cwd', message: 'must be an existing directory', received: options.cwd, expected: 'existing directory' });
203
+ }
204
+ }
205
+ }
206
+ // profile name pattern
207
+ if (options.profile !== undefined) {
208
+ if (!PROFILE_NAME_RE.test(options.profile)) {
209
+ errors.push({ field: 'profile', message: 'must match ^[a-zA-Z0-9_-]{1,64}$', received: options.profile, expected: '^[a-zA-Z0-9_-]{1,64}$' });
210
+ }
211
+ }
212
+ // runId ULID format
213
+ if (options.runId !== undefined) {
214
+ if (!ULID_RE.test(options.runId)) {
215
+ errors.push({ field: 'runId', message: 'must be a valid ULID (26 Crockford base32 characters)', received: options.runId, expected: '26-char Crockford base32 ULID' });
216
+ }
217
+ }
218
+ // 4. Attachment validation
219
+ if (options.attachments !== undefined) {
220
+ if (!Array.isArray(options.attachments)) {
221
+ errors.push({ field: 'attachments', message: 'must be an array', received: options.attachments, expected: 'Attachment[]' });
222
+ }
223
+ else {
224
+ for (let i = 0; i < options.attachments.length; i++) {
225
+ const att = options.attachments[i];
226
+ const prefix = `attachments[${i}]`;
227
+ const sourceCount = [att.filePath, att.url, att.base64].filter((s) => s !== undefined).length;
228
+ if (sourceCount !== 1) {
229
+ errors.push({ field: prefix, message: 'must have exactly one source (filePath, url, or base64)', received: att, expected: 'exactly one of filePath | url | base64' });
230
+ }
231
+ if (att.base64 !== undefined && !att.mimeType) {
232
+ errors.push({ field: `${prefix}.mimeType`, message: 'is required when base64 is set', received: att.mimeType, expected: 'string (MIME type)' });
233
+ }
234
+ if (att.filePath !== undefined) {
235
+ if (!path.isAbsolute(att.filePath)) {
236
+ errors.push({ field: `${prefix}.filePath`, message: 'must be an absolute path', received: att.filePath, expected: 'Absolute path' });
237
+ }
238
+ else {
239
+ try {
240
+ fs.accessSync(att.filePath, fs.constants.R_OK);
241
+ }
242
+ catch {
243
+ errors.push({ field: `${prefix}.filePath`, message: 'file must exist and be readable', received: att.filePath, expected: 'existing readable file' });
244
+ }
245
+ }
246
+ }
247
+ }
248
+ }
249
+ }
250
+ // 5. McpServerConfig validation
251
+ if (options.mcpServers !== undefined) {
252
+ if (!Array.isArray(options.mcpServers)) {
253
+ errors.push({ field: 'mcpServers', message: 'must be an array', received: options.mcpServers, expected: 'McpServerConfig[]' });
254
+ }
255
+ else {
256
+ for (let i = 0; i < options.mcpServers.length; i++) {
257
+ const srv = options.mcpServers[i];
258
+ const prefix = `mcpServers[${i}]`;
259
+ if (!MCP_NAME_RE.test(srv.name)) {
260
+ errors.push({ field: `${prefix}.name`, message: 'must match ^[a-zA-Z0-9_-]{1,64}$', received: srv.name, expected: '^[a-zA-Z0-9_-]{1,64}$' });
261
+ }
262
+ const validTransports = ['stdio', 'sse', 'streamable-http'];
263
+ if (!validTransports.includes(srv.transport)) {
264
+ errors.push({ field: `${prefix}.transport`, message: 'must be one of: stdio, sse, streamable-http', received: srv.transport, expected: "'stdio' | 'sse' | 'streamable-http'" });
265
+ }
266
+ if (srv.transport === 'stdio' && !srv.command) {
267
+ errors.push({ field: `${prefix}.command`, message: 'is required for stdio transport', received: srv.command, expected: 'string' });
268
+ }
269
+ if ((srv.transport === 'sse' || srv.transport === 'streamable-http') && !srv.url) {
270
+ errors.push({ field: `${prefix}.url`, message: `is required for ${srv.transport} transport`, received: srv.url, expected: 'string (URL)' });
271
+ }
272
+ // Validate env values are strings
273
+ if (srv.env !== undefined) {
274
+ for (const [key, val] of Object.entries(srv.env)) {
275
+ if (typeof val !== 'string') {
276
+ errors.push({ field: `${prefix}.env.${key}`, message: 'values must be strings', received: val, expected: 'string' });
277
+ }
278
+ }
279
+ }
280
+ }
281
+ }
282
+ }
283
+ // gracePeriodMs validation
284
+ if (options.gracePeriodMs !== undefined) {
285
+ if (typeof options.gracePeriodMs !== 'number' || !Number.isFinite(options.gracePeriodMs) || options.gracePeriodMs < 0 || !Number.isInteger(options.gracePeriodMs)) {
286
+ errors.push({ field: 'gracePeriodMs', message: 'must be a non-negative integer', received: options.gracePeriodMs, expected: '>= 0 (integer, ms)' });
287
+ }
288
+ }
289
+ // retryPolicy validation
290
+ if (options.retryPolicy !== undefined) {
291
+ const rp = options.retryPolicy;
292
+ if (rp.maxAttempts !== undefined && (typeof rp.maxAttempts !== 'number' || !Number.isFinite(rp.maxAttempts) || rp.maxAttempts < 1 || !Number.isInteger(rp.maxAttempts))) {
293
+ errors.push({ field: 'retryPolicy.maxAttempts', message: 'must be an integer >= 1', received: rp.maxAttempts, expected: '>= 1 (integer)' });
294
+ }
295
+ if (rp.baseDelayMs !== undefined && (typeof rp.baseDelayMs !== 'number' || !Number.isFinite(rp.baseDelayMs) || rp.baseDelayMs < 0 || !Number.isInteger(rp.baseDelayMs))) {
296
+ errors.push({ field: 'retryPolicy.baseDelayMs', message: 'must be a non-negative integer', received: rp.baseDelayMs, expected: '>= 0 (integer)' });
297
+ }
298
+ if (rp.maxDelayMs !== undefined && (typeof rp.maxDelayMs !== 'number' || !Number.isFinite(rp.maxDelayMs) || rp.maxDelayMs < 0 || !Number.isInteger(rp.maxDelayMs))) {
299
+ errors.push({ field: 'retryPolicy.maxDelayMs', message: 'must be a non-negative integer', received: rp.maxDelayMs, expected: '>= 0 (integer)' });
300
+ }
301
+ // Cross-field: maxDelayMs >= baseDelayMs (using defaults)
302
+ {
303
+ const effectiveBase = rp.baseDelayMs ?? 1000;
304
+ const effectiveMax = rp.maxDelayMs ?? 30_000;
305
+ if (effectiveMax < effectiveBase) {
306
+ errors.push({ field: 'retryPolicy.maxDelayMs', message: 'must be >= baseDelayMs', received: rp.maxDelayMs ?? effectiveMax, expected: `>= ${effectiveBase}` });
307
+ }
308
+ }
309
+ if (rp.jitterFactor !== undefined && (typeof rp.jitterFactor !== 'number' || !Number.isFinite(rp.jitterFactor) || rp.jitterFactor < 0 || rp.jitterFactor > 1)) {
310
+ errors.push({ field: 'retryPolicy.jitterFactor', message: 'must be between 0.0 and 1.0', received: rp.jitterFactor, expected: '[0.0, 1.0]' });
311
+ }
312
+ if (rp.retryOn !== undefined) {
313
+ if (!Array.isArray(rp.retryOn)) {
314
+ errors.push({ field: 'retryPolicy.retryOn', message: 'must be an array of ErrorCode strings', received: rp.retryOn, expected: 'ErrorCode[]' });
315
+ }
316
+ else {
317
+ for (const code of rp.retryOn) {
318
+ if (!VALID_ERROR_CODES.has(code)) {
319
+ errors.push({ field: 'retryPolicy.retryOn', message: `invalid error code: ${String(code)}`, received: code, expected: 'ErrorCode' });
320
+ }
321
+ }
322
+ }
323
+ }
324
+ }
325
+ if (errors.length > 0) {
326
+ throw new ValidationError(errors);
327
+ }
328
+ }
329
+ //# sourceMappingURL=run-options.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"run-options.js","sourceRoot":"","sources":["../src/run-options.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,19 @@
1
+ import type { AgentEvent } from './events.js';
2
+ import type { HookDecision, RuntimeHookKind, RuntimeHookMode, RuntimeHooks } from './runtime-hooks.js';
3
+ export interface RuntimeHookDispatcherOptions {
4
+ hooks?: RuntimeHooks;
5
+ runId: string;
6
+ agent: string;
7
+ emit(event: AgentEvent): void | Promise<void>;
8
+ }
9
+ /**
10
+ * Dispatches per-run runtime hooks and lets them inject synthetic run events.
11
+ */
12
+ export declare class RuntimeHookDispatcher {
13
+ private readonly hooks?;
14
+ readonly runId: string;
15
+ readonly agent: string;
16
+ private readonly emitEvent;
17
+ constructor(options: RuntimeHookDispatcherOptions);
18
+ dispatch(kind: RuntimeHookKind, payload: unknown, signal: AbortSignal, mode: Exclude<RuntimeHookMode, 'unsupported'>): Promise<HookDecision | void>;
19
+ }
@@ -0,0 +1 @@
1
+ {"version":3,"file":"runtime-hook-dispatcher.d.ts","sourceRoot":"","sources":["../src/runtime-hook-dispatcher.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAC9C,OAAO,KAAK,EACV,YAAY,EACZ,eAAe,EACf,eAAe,EACf,YAAY,EACb,MAAM,oBAAoB,CAAC;AAE5B,MAAM,WAAW,4BAA4B;IAC3C,KAAK,CAAC,EAAE,YAAY,CAAC;IACrB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,KAAK,EAAE,UAAU,GAAG,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CAC/C;AAID;;GAEG;AACH,qBAAa,qBAAqB;IAChC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAe;IACtC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAuC;gBAErD,OAAO,EAAE,4BAA4B;IAO3C,QAAQ,CACZ,IAAI,EAAE,eAAe,EACrB,OAAO,EAAE,OAAO,EAChB,MAAM,EAAE,WAAW,EACnB,IAAI,EAAE,OAAO,CAAC,eAAe,EAAE,aAAa,CAAC,GAC5C,OAAO,CAAC,YAAY,GAAG,IAAI,CAAC;CAqChC"}
@@ -0,0 +1,50 @@
1
+ const ALLOW = { decision: 'allow' };
2
+ /**
3
+ * Dispatches per-run runtime hooks and lets them inject synthetic run events.
4
+ */
5
+ export class RuntimeHookDispatcher {
6
+ hooks;
7
+ runId;
8
+ agent;
9
+ emitEvent;
10
+ constructor(options) {
11
+ this.hooks = options.hooks;
12
+ this.runId = options.runId;
13
+ this.agent = options.agent;
14
+ this.emitEvent = options.emit;
15
+ }
16
+ async dispatch(kind, payload, signal, mode) {
17
+ const handler = this.hooks?.[kind];
18
+ if (!handler) {
19
+ return mode === 'blocking' ? ALLOW : undefined;
20
+ }
21
+ const context = {
22
+ signal,
23
+ emit: async (event) => {
24
+ await this.emitEvent({ ...event, source: 'hook' });
25
+ },
26
+ };
27
+ if (mode === 'blocking') {
28
+ try {
29
+ return await handler(payload, context);
30
+ }
31
+ catch (error) {
32
+ return {
33
+ decision: 'deny',
34
+ reason: error instanceof Error ? error.message : String(error),
35
+ };
36
+ }
37
+ }
38
+ void Promise.resolve(handler(payload, context)).catch(async (error) => {
39
+ await context.emit({
40
+ type: 'debug',
41
+ runId: this.runId,
42
+ agent: this.agent,
43
+ timestamp: Date.now(),
44
+ level: 'warn',
45
+ message: `runtime hook ${kind} failed: ${error instanceof Error ? error.message : String(error)}`,
46
+ });
47
+ });
48
+ }
49
+ }
50
+ //# sourceMappingURL=runtime-hook-dispatcher.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"runtime-hook-dispatcher.js","sourceRoot":"","sources":["../src/runtime-hook-dispatcher.ts"],"names":[],"mappings":"AAeA,MAAM,KAAK,GAAiB,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC;AAElD;;GAEG;AACH,MAAM,OAAO,qBAAqB;IACf,KAAK,CAAgB;IAC7B,KAAK,CAAS;IACd,KAAK,CAAS;IACN,SAAS,CAAuC;IAEjE,YAAY,OAAqC;QAC/C,IAAI,CAAC,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC;QAC3B,IAAI,CAAC,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC;QAC3B,IAAI,CAAC,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC;QAC3B,IAAI,CAAC,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC;IAChC,CAAC;IAED,KAAK,CAAC,QAAQ,CACZ,IAAqB,EACrB,OAAgB,EAChB,MAAmB,EACnB,IAA6C;QAE7C,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,EAAE,CAAC,IAAI,CAEpB,CAAC;QACd,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,OAAO,IAAI,KAAK,UAAU,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC;QACjD,CAAC;QAED,MAAM,OAAO,GAAG;YACd,MAAM;YACN,IAAI,EAAE,KAAK,EAAE,KAAiB,EAAiB,EAAE;gBAC/C,MAAM,IAAI,CAAC,SAAS,CAAC,EAAE,GAAG,KAAK,EAAE,MAAM,EAAE,MAAM,EAAgB,CAAC,CAAC;YACnE,CAAC;SACF,CAAC;QAEF,IAAI,IAAI,KAAK,UAAU,EAAE,CAAC;YACxB,IAAI,CAAC;gBACH,OAAO,MAAM,OAAO,CAAC,OAAO,EAAE,OAAO,CAAiB,CAAC;YACzD,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,OAAO;oBACL,QAAQ,EAAE,MAAM;oBAChB,MAAM,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC;iBAC/D,CAAC;YACJ,CAAC;QACH,CAAC;QAED,KAAK,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE;YACpE,MAAM,OAAO,CAAC,IAAI,CAAC;gBACjB,IAAI,EAAE,OAAO;gBACb,KAAK,EAAE,IAAI,CAAC,KAAK;gBACjB,KAAK,EAAE,IAAI,CAAC,KAA4B;gBACxC,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;gBACrB,KAAK,EAAE,MAAM;gBACb,OAAO,EAAE,gBAAgB,IAAI,YAAY,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE;aACpF,CAAC,CAAC;QACnB,CAAC,CAAC,CAAC;IACL,CAAC;CACF"}
@@ -0,0 +1,47 @@
1
+ import type { AgentEvent } from './events.js';
2
+ /** Runtime hook kinds supported by agent-mux. */
3
+ export type RuntimeHookKind = 'preToolUse' | 'postToolUse' | 'sessionStart' | 'sessionEnd' | 'stop' | 'userPromptSubmit';
4
+ /** How an adapter supports a given runtime hook kind. */
5
+ export type RuntimeHookMode = 'unsupported' | 'nonblocking' | 'blocking';
6
+ /** Adapter capability declaration for runtime hooks. */
7
+ export interface RuntimeHookCapabilities {
8
+ preToolUse: RuntimeHookMode;
9
+ postToolUse: RuntimeHookMode;
10
+ sessionStart: RuntimeHookMode;
11
+ sessionEnd: RuntimeHookMode;
12
+ stop: RuntimeHookMode;
13
+ userPromptSubmit: RuntimeHookMode;
14
+ }
15
+ /** Context passed to runtime hook handlers. */
16
+ export interface HookContext {
17
+ signal: AbortSignal;
18
+ emit(event: AgentEvent): void | Promise<void>;
19
+ }
20
+ /** Decision returned by blocking runtime hooks. */
21
+ export type HookDecision = {
22
+ decision: 'allow';
23
+ } | {
24
+ decision: 'deny';
25
+ reason?: string;
26
+ };
27
+ /** Handler invoked before a tool executes. */
28
+ export type PreToolUseHook<TPayload = unknown> = (payload: TPayload, context: HookContext) => Promise<HookDecision> | HookDecision;
29
+ /** Handler invoked when the user submits a prompt. */
30
+ export type UserPromptSubmitHook<TPayload = unknown> = (payload: TPayload, context: HookContext) => Promise<HookDecision> | HookDecision;
31
+ /** Handler invoked for non-blocking runtime hook notifications. */
32
+ export type NotificationHook<TPayload = unknown> = (payload: TPayload, context: HookContext) => Promise<void> | void;
33
+ /** Per-run runtime hooks attached through RunOptions. */
34
+ export interface RuntimeHooks {
35
+ preToolUse?: PreToolUseHook;
36
+ postToolUse?: NotificationHook;
37
+ sessionStart?: NotificationHook;
38
+ sessionEnd?: NotificationHook;
39
+ stop?: NotificationHook;
40
+ userPromptSubmit?: UserPromptSubmitHook;
41
+ }
42
+ /** Optional native harness bridge returned by adapters that support runtime hooks. */
43
+ export interface RuntimeHookSetup {
44
+ env?: Record<string, string>;
45
+ cleanup?: () => Promise<void> | void;
46
+ }
47
+ export type { RuntimeHookDispatcher } from './runtime-hook-dispatcher.js';
@@ -0,0 +1 @@
1
+ {"version":3,"file":"runtime-hooks.d.ts","sourceRoot":"","sources":["../src/runtime-hooks.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAG9C,iDAAiD;AACjD,MAAM,MAAM,eAAe,GACvB,YAAY,GACZ,aAAa,GACb,cAAc,GACd,YAAY,GACZ,MAAM,GACN,kBAAkB,CAAC;AAEvB,yDAAyD;AACzD,MAAM,MAAM,eAAe,GAAG,aAAa,GAAG,aAAa,GAAG,UAAU,CAAC;AAEzE,wDAAwD;AACxD,MAAM,WAAW,uBAAuB;IACtC,UAAU,EAAE,eAAe,CAAC;IAC5B,WAAW,EAAE,eAAe,CAAC;IAC7B,YAAY,EAAE,eAAe,CAAC;IAC9B,UAAU,EAAE,eAAe,CAAC;IAC5B,IAAI,EAAE,eAAe,CAAC;IACtB,gBAAgB,EAAE,eAAe,CAAC;CACnC;AAED,+CAA+C;AAC/C,MAAM,WAAW,WAAW;IAC1B,MAAM,EAAE,WAAW,CAAC;IACpB,IAAI,CAAC,KAAK,EAAE,UAAU,GAAG,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CAC/C;AAED,mDAAmD;AACnD,MAAM,MAAM,YAAY,GACpB;IACE,QAAQ,EAAE,OAAO,CAAC;CACnB,GACD;IACE,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB,CAAC;AAEN,8CAA8C;AAC9C,MAAM,MAAM,cAAc,CAAC,QAAQ,GAAG,OAAO,IAAI,CAC/C,OAAO,EAAE,QAAQ,EACjB,OAAO,EAAE,WAAW,KACjB,OAAO,CAAC,YAAY,CAAC,GAAG,YAAY,CAAC;AAE1C,sDAAsD;AACtD,MAAM,MAAM,oBAAoB,CAAC,QAAQ,GAAG,OAAO,IAAI,CACrD,OAAO,EAAE,QAAQ,EACjB,OAAO,EAAE,WAAW,KACjB,OAAO,CAAC,YAAY,CAAC,GAAG,YAAY,CAAC;AAE1C,mEAAmE;AACnE,MAAM,MAAM,gBAAgB,CAAC,QAAQ,GAAG,OAAO,IAAI,CACjD,OAAO,EAAE,QAAQ,EACjB,OAAO,EAAE,WAAW,KACjB,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;AAE1B,yDAAyD;AACzD,MAAM,WAAW,YAAY;IAC3B,UAAU,CAAC,EAAE,cAAc,CAAC;IAC5B,WAAW,CAAC,EAAE,gBAAgB,CAAC;IAC/B,YAAY,CAAC,EAAE,gBAAgB,CAAC;IAChC,UAAU,CAAC,EAAE,gBAAgB,CAAC;IAC9B,IAAI,CAAC,EAAE,gBAAgB,CAAC;IACxB,gBAAgB,CAAC,EAAE,oBAAoB,CAAC;CACzC;AAED,sFAAsF;AACtF,MAAM,WAAW,gBAAgB;IAC/B,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC7B,OAAO,CAAC,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;CACtC;AAED,YAAY,EAAE,qBAAqB,EAAE,MAAM,8BAA8B,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=runtime-hooks.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"runtime-hooks.js","sourceRoot":"","sources":["../src/runtime-hooks.ts"],"names":[],"mappings":""}
@@ -0,0 +1 @@
1
+ export {};