@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,136 @@
1
+ import { RuntimeHookDispatcher } from './runtime-hook-dispatcher.js';
2
+ function normalizePrompt(prompt) {
3
+ return Array.isArray(prompt) ? prompt.join('\n') : prompt;
4
+ }
5
+ function getRuntimeHookMode(adapter, kind) {
6
+ return adapter.capabilities.runtimeHooks?.[kind] ?? 'unsupported';
7
+ }
8
+ export async function createSpawnRuntimeHookBridge(handle, adapter, options) {
9
+ const abortController = new AbortController();
10
+ const dispatcher = options.hooks
11
+ ? new RuntimeHookDispatcher({
12
+ hooks: options.hooks,
13
+ runId: handle.runId,
14
+ agent: handle.agent,
15
+ emit: (event) => handle.emit({
16
+ ...event,
17
+ runId: handle.runId,
18
+ agent: handle.agent,
19
+ timestamp: event.timestamp ?? Date.now(),
20
+ source: 'hook',
21
+ }),
22
+ })
23
+ : null;
24
+ const setupResult = dispatcher && typeof adapter.setupRuntimeHooks === 'function'
25
+ ? await adapter.setupRuntimeHooks(options, dispatcher)
26
+ : undefined;
27
+ const setup = setupResult ?? undefined;
28
+ let sessionId = options.sessionId;
29
+ const preToolSeen = new Set();
30
+ let eventChain = Promise.resolve();
31
+ const emitHookDeniedTool = (event, decision) => {
32
+ handle.emit({
33
+ type: 'tool_error',
34
+ runId: handle.runId,
35
+ agent: handle.agent,
36
+ timestamp: Date.now(),
37
+ source: 'hook',
38
+ toolCallId: event.toolCallId ?? '',
39
+ toolName: event.toolName ?? '',
40
+ error: decision.decision === 'deny'
41
+ ? (decision.reason ?? 'Runtime hook denied tool use')
42
+ : 'Runtime hook denied tool use',
43
+ });
44
+ };
45
+ const emitRuntimeAware = async (event) => {
46
+ if (event.type === 'session_start') {
47
+ sessionId = event.sessionId;
48
+ const mode = getRuntimeHookMode(adapter, 'sessionStart');
49
+ if (dispatcher && mode !== 'unsupported') {
50
+ const decision = await dispatcher.dispatch('sessionStart', {
51
+ sessionId,
52
+ resumed: event.resumed,
53
+ forkedFrom: event.forkedFrom,
54
+ }, abortController.signal, mode === 'blocking' ? 'blocking' : 'nonblocking');
55
+ if (mode === 'blocking' && decision && decision.decision === 'deny') {
56
+ return;
57
+ }
58
+ }
59
+ handle.emit(event);
60
+ return;
61
+ }
62
+ if (event.type === 'tool_call_start' || event.type === 'tool_call_ready') {
63
+ const toolCallId = String(event.toolCallId ?? '');
64
+ const mode = getRuntimeHookMode(adapter, 'preToolUse');
65
+ if (dispatcher && mode !== 'unsupported' && !preToolSeen.has(toolCallId)) {
66
+ preToolSeen.add(toolCallId);
67
+ const decision = await dispatcher.dispatch('preToolUse', {
68
+ sessionId,
69
+ toolCallId,
70
+ toolName: event.toolName ?? '',
71
+ input: 'input' in event ? event.input : event.inputAccumulated,
72
+ }, abortController.signal, mode === 'blocking' ? 'blocking' : 'nonblocking');
73
+ if (mode === 'blocking' && decision && decision.decision === 'deny') {
74
+ emitHookDeniedTool(event, decision);
75
+ return;
76
+ }
77
+ }
78
+ handle.emit(event);
79
+ return;
80
+ }
81
+ handle.emit(event);
82
+ if (event.type === 'tool_result' || event.type === 'tool_error') {
83
+ const mode = getRuntimeHookMode(adapter, 'postToolUse');
84
+ if (dispatcher && mode !== 'unsupported') {
85
+ void dispatcher.dispatch('postToolUse', {
86
+ sessionId,
87
+ toolCallId: event.toolCallId ?? '',
88
+ toolName: event.toolName ?? '',
89
+ output: 'output' in event ? event.output : undefined,
90
+ error: 'error' in event ? event.error : undefined,
91
+ durationMs: event.durationMs ?? 0,
92
+ }, abortController.signal, mode === 'blocking' ? 'blocking' : 'nonblocking');
93
+ }
94
+ }
95
+ };
96
+ const awaitIdle = async () => {
97
+ await eventChain.catch(() => { });
98
+ };
99
+ return {
100
+ get sessionId() {
101
+ return sessionId;
102
+ },
103
+ setup,
104
+ enqueue(event) {
105
+ eventChain = eventChain.then(() => emitRuntimeAware(event), () => emitRuntimeAware(event));
106
+ },
107
+ dispatchPrompt(promptText) {
108
+ if (!dispatcher || promptText.length === 0)
109
+ return;
110
+ const mode = getRuntimeHookMode(adapter, 'userPromptSubmit');
111
+ if (mode !== 'nonblocking')
112
+ return;
113
+ void dispatcher.dispatch('userPromptSubmit', { prompt: normalizePrompt(promptText), sessionId }, abortController.signal, 'nonblocking');
114
+ },
115
+ abort() {
116
+ abortController.abort();
117
+ },
118
+ awaitIdle,
119
+ async finalize(exitReason, exitCode, signal) {
120
+ await awaitIdle();
121
+ if (!dispatcher) {
122
+ return;
123
+ }
124
+ const finalHookSignal = new AbortController().signal;
125
+ const sessionEndMode = getRuntimeHookMode(adapter, 'sessionEnd');
126
+ if (sessionId && sessionEndMode !== 'unsupported') {
127
+ await dispatcher.dispatch('sessionEnd', { sessionId, exitReason, exitCode, signal }, finalHookSignal, sessionEndMode === 'blocking' ? 'blocking' : 'nonblocking');
128
+ }
129
+ const stopMode = getRuntimeHookMode(adapter, 'stop');
130
+ if (stopMode !== 'unsupported') {
131
+ await dispatcher.dispatch('stop', { sessionId, exitReason, exitCode, signal }, finalHookSignal, stopMode === 'blocking' ? 'blocking' : 'nonblocking');
132
+ }
133
+ },
134
+ };
135
+ }
136
+ //# sourceMappingURL=spawn-runtime-hooks.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"spawn-runtime-hooks.js","sourceRoot":"","sources":["../src/spawn-runtime-hooks.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,33 @@
1
+ /**
2
+ * Run state machine for @a5c-ai/agent-mux.
3
+ *
4
+ * Defines the 9 RunState values, valid transition map, terminal state set,
5
+ * and guard helpers used by RunHandleImpl.
6
+ */
7
+ /**
8
+ * All valid states for an agent run.
9
+ *
10
+ * States are mutually exclusive; every run is in exactly one state at a time.
11
+ * Terminal states are absorbing — no transitions out.
12
+ */
13
+ export type RunState = 'spawned' | 'running' | 'paused' | 'interrupted' | 'aborted' | 'timed-out' | 'completed' | 'crashed' | 'killed';
14
+ /** Set of states from which no further transitions are possible. */
15
+ export declare const TERMINAL_STATES: ReadonlySet<RunState>;
16
+ /**
17
+ * Map of (fromState -> Set<toState>) defining all legal state transitions.
18
+ *
19
+ * Transitions not listed here are invalid and will throw
20
+ * AgentMuxError('INVALID_STATE_TRANSITION', ...).
21
+ */
22
+ export declare const VALID_TRANSITIONS: ReadonlyMap<RunState, ReadonlySet<RunState>>;
23
+ /**
24
+ * Returns true when the state is terminal (no transitions out).
25
+ */
26
+ export declare function isTerminal(state: RunState): boolean;
27
+ /**
28
+ * Assert that transitioning from `from` to `to` is valid.
29
+ *
30
+ * @throws {AgentMuxError} code `INVALID_STATE_TRANSITION` when the transition
31
+ * is not in the VALID_TRANSITIONS map.
32
+ */
33
+ export declare function assertTransition(from: RunState, to: RunState): void;
@@ -0,0 +1 @@
1
+ {"version":3,"file":"state-machine.d.ts","sourceRoot":"","sources":["../src/state-machine.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAQH;;;;;GAKG;AACH,MAAM,MAAM,QAAQ,GAChB,SAAS,GACT,SAAS,GACT,QAAQ,GACR,aAAa,GACb,SAAS,GACT,WAAW,GACX,WAAW,GACX,SAAS,GACT,QAAQ,CAAC;AAMb,oEAAoE;AACpE,eAAO,MAAM,eAAe,EAAE,WAAW,CAAC,QAAQ,CAMhD,CAAC;AAMH;;;;;GAKG;AACH,eAAO,MAAM,iBAAiB,EAAE,WAAW,CAAC,QAAQ,EAAE,WAAW,CAAC,QAAQ,CAAC,CAWzE,CAAC;AAMH;;GAEG;AACH,wBAAgB,UAAU,CAAC,KAAK,EAAE,QAAQ,GAAG,OAAO,CAEnD;AAED;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,QAAQ,EAAE,EAAE,EAAE,QAAQ,GAAG,IAAI,CASnE"}
@@ -0,0 +1,61 @@
1
+ /**
2
+ * Run state machine for @a5c-ai/agent-mux.
3
+ *
4
+ * Defines the 9 RunState values, valid transition map, terminal state set,
5
+ * and guard helpers used by RunHandleImpl.
6
+ */
7
+ import { AgentMuxError } from './errors.js';
8
+ // ---------------------------------------------------------------------------
9
+ // Terminal states
10
+ // ---------------------------------------------------------------------------
11
+ /** Set of states from which no further transitions are possible. */
12
+ export const TERMINAL_STATES = new Set([
13
+ 'aborted',
14
+ 'timed-out',
15
+ 'completed',
16
+ 'crashed',
17
+ 'killed',
18
+ ]);
19
+ // ---------------------------------------------------------------------------
20
+ // Valid transitions
21
+ // ---------------------------------------------------------------------------
22
+ /**
23
+ * Map of (fromState -> Set<toState>) defining all legal state transitions.
24
+ *
25
+ * Transitions not listed here are invalid and will throw
26
+ * AgentMuxError('INVALID_STATE_TRANSITION', ...).
27
+ */
28
+ export const VALID_TRANSITIONS = new Map([
29
+ ['spawned', new Set(['running', 'crashed', 'timed-out', 'aborted'])],
30
+ ['running', new Set(['paused', 'interrupted', 'aborted', 'timed-out', 'completed', 'crashed', 'killed'])],
31
+ ['paused', new Set(['running', 'aborted', 'timed-out'])],
32
+ ['interrupted', new Set(['running', 'completed', 'crashed', 'aborted'])],
33
+ // Terminal states — no outgoing transitions
34
+ ['aborted', new Set()],
35
+ ['timed-out', new Set()],
36
+ ['completed', new Set()],
37
+ ['crashed', new Set()],
38
+ ['killed', new Set()],
39
+ ]);
40
+ // ---------------------------------------------------------------------------
41
+ // Helper functions
42
+ // ---------------------------------------------------------------------------
43
+ /**
44
+ * Returns true when the state is terminal (no transitions out).
45
+ */
46
+ export function isTerminal(state) {
47
+ return TERMINAL_STATES.has(state);
48
+ }
49
+ /**
50
+ * Assert that transitioning from `from` to `to` is valid.
51
+ *
52
+ * @throws {AgentMuxError} code `INVALID_STATE_TRANSITION` when the transition
53
+ * is not in the VALID_TRANSITIONS map.
54
+ */
55
+ export function assertTransition(from, to) {
56
+ const allowed = VALID_TRANSITIONS.get(from);
57
+ if (!allowed || !allowed.has(to)) {
58
+ throw new AgentMuxError('INVALID_STATE_TRANSITION', `Cannot transition run state from '${from}' to '${to}'`, false);
59
+ }
60
+ }
61
+ //# sourceMappingURL=state-machine.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"state-machine.js","sourceRoot":"","sources":["../src/state-machine.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAuB5C,8EAA8E;AAC9E,kBAAkB;AAClB,8EAA8E;AAE9E,oEAAoE;AACpE,MAAM,CAAC,MAAM,eAAe,GAA0B,IAAI,GAAG,CAAW;IACtE,SAAS;IACT,WAAW;IACX,WAAW;IACX,SAAS;IACT,QAAQ;CACT,CAAC,CAAC;AAEH,8EAA8E;AAC9E,oBAAoB;AACpB,8EAA8E;AAE9E;;;;;GAKG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAAiD,IAAI,GAAG,CAAkC;IACtH,CAAC,SAAS,EAAE,IAAI,GAAG,CAAW,CAAC,SAAS,EAAE,SAAS,EAAE,WAAW,EAAE,SAAS,CAAC,CAAC,CAAC;IAC9E,CAAC,SAAS,EAAE,IAAI,GAAG,CAAW,CAAC,QAAQ,EAAE,aAAa,EAAE,SAAS,EAAE,WAAW,EAAE,WAAW,EAAE,SAAS,EAAE,QAAQ,CAAC,CAAC,CAAC;IACnH,CAAC,QAAQ,EAAG,IAAI,GAAG,CAAW,CAAC,SAAS,EAAE,SAAS,EAAE,WAAW,CAAC,CAAC,CAAC;IACnE,CAAC,aAAa,EAAE,IAAI,GAAG,CAAW,CAAC,SAAS,EAAE,WAAW,EAAE,SAAS,EAAE,SAAS,CAAC,CAAC,CAAC;IAClF,4CAA4C;IAC5C,CAAC,SAAS,EAAI,IAAI,GAAG,EAAY,CAAC;IAClC,CAAC,WAAW,EAAE,IAAI,GAAG,EAAY,CAAC;IAClC,CAAC,WAAW,EAAE,IAAI,GAAG,EAAY,CAAC;IAClC,CAAC,SAAS,EAAI,IAAI,GAAG,EAAY,CAAC;IAClC,CAAC,QAAQ,EAAK,IAAI,GAAG,EAAY,CAAC;CACnC,CAAC,CAAC;AAEH,8EAA8E;AAC9E,mBAAmB;AACnB,8EAA8E;AAE9E;;GAEG;AACH,MAAM,UAAU,UAAU,CAAC,KAAe;IACxC,OAAO,eAAe,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;AACpC,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,gBAAgB,CAAC,IAAc,EAAE,EAAY;IAC3D,MAAM,OAAO,GAAG,iBAAiB,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IAC5C,IAAI,CAAC,OAAO,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC;QACjC,MAAM,IAAI,aAAa,CACrB,0BAA0B,EAC1B,qCAAqC,IAAI,SAAS,EAAE,GAAG,EACvD,KAAK,CACN,CAAC;IACJ,CAAC;AACH,CAAC"}
@@ -0,0 +1,47 @@
1
+ /**
2
+ * Storage path resolution for @a5c-ai/agent-mux.
3
+ *
4
+ * Resolves the global config directory and project config directory
5
+ * based on options, environment variables, and filesystem walk-up.
6
+ */
7
+ /** Resolved paths for both global and project storage directories. */
8
+ export interface StoragePaths {
9
+ /** Absolute path to the global config directory (e.g., ~/.agent-mux). */
10
+ readonly configDir: string;
11
+ /** Absolute path to the project config directory (e.g., .agent-mux). */
12
+ readonly projectConfigDir: string;
13
+ /** Absolute path to the global config.json file. */
14
+ readonly globalConfigFile: string;
15
+ /** Absolute path to the project config.json file. */
16
+ readonly projectConfigFile: string;
17
+ /** Absolute path to the global profiles directory. */
18
+ readonly globalProfilesDir: string;
19
+ /** Absolute path to the project profiles directory. */
20
+ readonly projectProfilesDir: string;
21
+ /** Absolute path to the auth-hints.json file. */
22
+ readonly authHintsFile: string;
23
+ /** Absolute path to the run-index.jsonl file. */
24
+ readonly runIndexFile: string;
25
+ }
26
+ /** Options that influence storage path resolution. */
27
+ export interface StoragePathOptions {
28
+ /** Override the global config directory. Must be absolute. */
29
+ configDir?: string;
30
+ /** Override the project config directory. Must be absolute. */
31
+ projectConfigDir?: string;
32
+ }
33
+ /**
34
+ * Resolve the global and project config directory paths.
35
+ *
36
+ * Resolution order for the global config directory:
37
+ * 1. `options.configDir` if provided.
38
+ * 2. `AGENT_MUX_CONFIG_DIR` environment variable if set.
39
+ * 3. `path.join(os.homedir(), '.agent-mux')`.
40
+ *
41
+ * Resolution order for the project config directory:
42
+ * 1. `options.projectConfigDir` if provided.
43
+ * 2. `AGENT_MUX_PROJECT_DIR` environment variable if set.
44
+ * 3. Walk up from `process.cwd()` looking for a `.agent-mux/` directory.
45
+ * 4. If not found, use `path.join(process.cwd(), '.agent-mux')`.
46
+ */
47
+ export declare function resolveStoragePaths(options?: StoragePathOptions): StoragePaths;
@@ -0,0 +1 @@
1
+ {"version":3,"file":"storage.d.ts","sourceRoot":"","sources":["../src/storage.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAUH,sEAAsE;AACtE,MAAM,WAAW,YAAY;IAC3B,yEAAyE;IACzE,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAE3B,wEAAwE;IACxE,QAAQ,CAAC,gBAAgB,EAAE,MAAM,CAAC;IAElC,oDAAoD;IACpD,QAAQ,CAAC,gBAAgB,EAAE,MAAM,CAAC;IAElC,qDAAqD;IACrD,QAAQ,CAAC,iBAAiB,EAAE,MAAM,CAAC;IAEnC,sDAAsD;IACtD,QAAQ,CAAC,iBAAiB,EAAE,MAAM,CAAC;IAEnC,uDAAuD;IACvD,QAAQ,CAAC,kBAAkB,EAAE,MAAM,CAAC;IAEpC,iDAAiD;IACjD,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAE/B,iDAAiD;IACjD,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;CAC/B;AAMD,sDAAsD;AACtD,MAAM,WAAW,kBAAkB;IACjC,8DAA8D;IAC9D,SAAS,CAAC,EAAE,MAAM,CAAC;IAEnB,+DAA+D;IAC/D,gBAAgB,CAAC,EAAE,MAAM,CAAC;CAC3B;AAMD;;;;;;;;;;;;;GAaG;AACH,wBAAgB,mBAAmB,CAAC,OAAO,CAAC,EAAE,kBAAkB,GAAG,YAAY,CAc9E"}
@@ -0,0 +1,90 @@
1
+ /**
2
+ * Storage path resolution for @a5c-ai/agent-mux.
3
+ *
4
+ * Resolves the global config directory and project config directory
5
+ * based on options, environment variables, and filesystem walk-up.
6
+ */
7
+ import * as path from 'node:path';
8
+ import * as os from 'node:os';
9
+ import * as fs from 'node:fs';
10
+ // ---------------------------------------------------------------------------
11
+ // resolveStoragePaths()
12
+ // ---------------------------------------------------------------------------
13
+ /**
14
+ * Resolve the global and project config directory paths.
15
+ *
16
+ * Resolution order for the global config directory:
17
+ * 1. `options.configDir` if provided.
18
+ * 2. `AGENT_MUX_CONFIG_DIR` environment variable if set.
19
+ * 3. `path.join(os.homedir(), '.agent-mux')`.
20
+ *
21
+ * Resolution order for the project config directory:
22
+ * 1. `options.projectConfigDir` if provided.
23
+ * 2. `AGENT_MUX_PROJECT_DIR` environment variable if set.
24
+ * 3. Walk up from `process.cwd()` looking for a `.agent-mux/` directory.
25
+ * 4. If not found, use `path.join(process.cwd(), '.agent-mux')`.
26
+ */
27
+ export function resolveStoragePaths(options) {
28
+ const configDir = resolveConfigDir(options?.configDir);
29
+ const projectConfigDir = resolveProjectConfigDir(options?.projectConfigDir);
30
+ return {
31
+ configDir,
32
+ projectConfigDir,
33
+ globalConfigFile: path.join(configDir, 'config.json'),
34
+ projectConfigFile: path.join(projectConfigDir, 'config.json'),
35
+ globalProfilesDir: path.join(configDir, 'profiles'),
36
+ projectProfilesDir: path.join(projectConfigDir, 'profiles'),
37
+ authHintsFile: path.join(configDir, 'auth-hints.json'),
38
+ runIndexFile: path.join(projectConfigDir, 'run-index.jsonl'),
39
+ };
40
+ }
41
+ // ---------------------------------------------------------------------------
42
+ // Internal helpers
43
+ // ---------------------------------------------------------------------------
44
+ function resolveConfigDir(override) {
45
+ if (override) {
46
+ return path.resolve(override);
47
+ }
48
+ const envDir = process.env['AGENT_MUX_CONFIG_DIR'];
49
+ if (envDir) {
50
+ return path.resolve(envDir);
51
+ }
52
+ return path.join(os.homedir(), '.agent-mux');
53
+ }
54
+ function resolveProjectConfigDir(override) {
55
+ if (override) {
56
+ return path.resolve(override);
57
+ }
58
+ const envDir = process.env['AGENT_MUX_PROJECT_DIR'];
59
+ if (envDir) {
60
+ return path.resolve(envDir);
61
+ }
62
+ return walkUpForAgentMux(process.cwd());
63
+ }
64
+ /**
65
+ * Walk up the directory tree from `startDir` looking for a `.agent-mux/`
66
+ * directory. If not found, defaults to `startDir/.agent-mux`.
67
+ */
68
+ function walkUpForAgentMux(startDir) {
69
+ let current = path.resolve(startDir);
70
+ while (true) {
71
+ const candidate = path.join(current, '.agent-mux');
72
+ try {
73
+ const stat = fs.statSync(candidate);
74
+ if (stat.isDirectory()) {
75
+ return candidate;
76
+ }
77
+ }
78
+ catch {
79
+ // Directory doesn't exist, keep walking up.
80
+ }
81
+ const parent = path.dirname(current);
82
+ if (parent === current) {
83
+ // Reached the filesystem root without finding .agent-mux/.
84
+ // Default to cwd/.agent-mux.
85
+ return path.join(startDir, '.agent-mux');
86
+ }
87
+ current = parent;
88
+ }
89
+ }
90
+ //# sourceMappingURL=storage.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"storage.js","sourceRoot":"","sources":["../src/storage.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,51 @@
1
+ /**
2
+ * StreamAssembler — stateful utility for reassembling fragmented agent output.
3
+ *
4
+ * Operates in two modes:
5
+ * - Line mode (default): each line is returned as-is from feed().
6
+ * - Block mode: lines are accumulated until a termination condition is met.
7
+ *
8
+ * @see 05-adapter-system.md §6
9
+ */
10
+ /** Predicate that determines when a block is complete. */
11
+ export type BlockTerminator = (line: string, accumulated: string) => boolean;
12
+ /**
13
+ * Stateful utility for reassembling fragmented agent output into
14
+ * complete, parseable units. One instance per run.
15
+ */
16
+ export declare class StreamAssembler {
17
+ private _buffer;
18
+ private _terminator;
19
+ /**
20
+ * Feeds a line into the assembler. In line mode, returns the line
21
+ * unchanged. In block mode, accumulates the line and returns null
22
+ * until the block is complete, then returns the assembled block.
23
+ */
24
+ feed(line: string): string | null;
25
+ /**
26
+ * Begins block accumulation mode. Subsequent calls to feed()
27
+ * will accumulate lines until endBlock() is called or the
28
+ * termination predicate returns true.
29
+ */
30
+ startBlock(terminator: BlockTerminator): void;
31
+ /**
32
+ * Forces the current block to end and returns whatever has been
33
+ * accumulated so far. Returns null if not in block mode.
34
+ */
35
+ endBlock(): string | null;
36
+ /** Whether the assembler is currently in block accumulation mode. */
37
+ get inBlock(): boolean;
38
+ /**
39
+ * Resets the assembler to its initial state.
40
+ */
41
+ reset(): void;
42
+ /**
43
+ * Returns the number of lines currently accumulated in the buffer.
44
+ * Zero when not in block mode.
45
+ */
46
+ get bufferedLineCount(): number;
47
+ /**
48
+ * Returns the raw accumulated content without ending the block.
49
+ */
50
+ peek(): string;
51
+ }
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stream-assembler.d.ts","sourceRoot":"","sources":["../src/stream-assembler.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,0DAA0D;AAC1D,MAAM,MAAM,eAAe,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,KAAK,OAAO,CAAC;AAE7E;;;GAGG;AACH,qBAAa,eAAe;IAC1B,OAAO,CAAC,OAAO,CAAgB;IAC/B,OAAO,CAAC,WAAW,CAAgC;IAEnD;;;;OAIG;IACH,IAAI,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI;IAqBjC;;;;OAIG;IACH,UAAU,CAAC,UAAU,EAAE,eAAe,GAAG,IAAI;IAK7C;;;OAGG;IACH,QAAQ,IAAI,MAAM,GAAG,IAAI;IAUzB,qEAAqE;IACrE,IAAI,OAAO,IAAI,OAAO,CAErB;IAED;;OAEG;IACH,KAAK,IAAI,IAAI;IAKb;;;OAGG;IACH,IAAI,iBAAiB,IAAI,MAAM,CAE9B;IAED;;OAEG;IACH,IAAI,IAAI,MAAM;CAGf"}
@@ -0,0 +1,86 @@
1
+ /**
2
+ * StreamAssembler — stateful utility for reassembling fragmented agent output.
3
+ *
4
+ * Operates in two modes:
5
+ * - Line mode (default): each line is returned as-is from feed().
6
+ * - Block mode: lines are accumulated until a termination condition is met.
7
+ *
8
+ * @see 05-adapter-system.md §6
9
+ */
10
+ /**
11
+ * Stateful utility for reassembling fragmented agent output into
12
+ * complete, parseable units. One instance per run.
13
+ */
14
+ export class StreamAssembler {
15
+ _buffer = [];
16
+ _terminator = null;
17
+ /**
18
+ * Feeds a line into the assembler. In line mode, returns the line
19
+ * unchanged. In block mode, accumulates the line and returns null
20
+ * until the block is complete, then returns the assembled block.
21
+ */
22
+ feed(line) {
23
+ if (this._terminator === null) {
24
+ // Line mode — pass through
25
+ return line;
26
+ }
27
+ // Block mode — accumulate
28
+ this._buffer.push(line);
29
+ const accumulated = this._buffer.join('\n');
30
+ if (this._terminator(line, accumulated)) {
31
+ // Block complete
32
+ this._terminator = null;
33
+ const result = accumulated;
34
+ this._buffer = [];
35
+ return result;
36
+ }
37
+ return null;
38
+ }
39
+ /**
40
+ * Begins block accumulation mode. Subsequent calls to feed()
41
+ * will accumulate lines until endBlock() is called or the
42
+ * termination predicate returns true.
43
+ */
44
+ startBlock(terminator) {
45
+ this._terminator = terminator;
46
+ this._buffer = [];
47
+ }
48
+ /**
49
+ * Forces the current block to end and returns whatever has been
50
+ * accumulated so far. Returns null if not in block mode.
51
+ */
52
+ endBlock() {
53
+ if (this._terminator === null && this._buffer.length === 0) {
54
+ return null;
55
+ }
56
+ const result = this._buffer.length > 0 ? this._buffer.join('\n') : null;
57
+ this._terminator = null;
58
+ this._buffer = [];
59
+ return result;
60
+ }
61
+ /** Whether the assembler is currently in block accumulation mode. */
62
+ get inBlock() {
63
+ return this._terminator !== null;
64
+ }
65
+ /**
66
+ * Resets the assembler to its initial state.
67
+ */
68
+ reset() {
69
+ this._buffer = [];
70
+ this._terminator = null;
71
+ }
72
+ /**
73
+ * Returns the number of lines currently accumulated in the buffer.
74
+ * Zero when not in block mode.
75
+ */
76
+ get bufferedLineCount() {
77
+ return this._buffer.length;
78
+ }
79
+ /**
80
+ * Returns the raw accumulated content without ending the block.
81
+ */
82
+ peek() {
83
+ return this._buffer.join('\n');
84
+ }
85
+ }
86
+ //# sourceMappingURL=stream-assembler.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stream-assembler.js","sourceRoot":"","sources":["../src/stream-assembler.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAKH;;;GAGG;AACH,MAAM,OAAO,eAAe;IAClB,OAAO,GAAa,EAAE,CAAC;IACvB,WAAW,GAA2B,IAAI,CAAC;IAEnD;;;;OAIG;IACH,IAAI,CAAC,IAAY;QACf,IAAI,IAAI,CAAC,WAAW,KAAK,IAAI,EAAE,CAAC;YAC9B,2BAA2B;YAC3B,OAAO,IAAI,CAAC;QACd,CAAC;QAED,0BAA0B;QAC1B,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACxB,MAAM,WAAW,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAE5C,IAAI,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,WAAW,CAAC,EAAE,CAAC;YACxC,iBAAiB;YACjB,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;YACxB,MAAM,MAAM,GAAG,WAAW,CAAC;YAC3B,IAAI,CAAC,OAAO,GAAG,EAAE,CAAC;YAClB,OAAO,MAAM,CAAC;QAChB,CAAC;QAED,OAAO,IAAI,CAAC;IACd,CAAC;IAED;;;;OAIG;IACH,UAAU,CAAC,UAA2B;QACpC,IAAI,CAAC,WAAW,GAAG,UAAU,CAAC;QAC9B,IAAI,CAAC,OAAO,GAAG,EAAE,CAAC;IACpB,CAAC;IAED;;;OAGG;IACH,QAAQ;QACN,IAAI,IAAI,CAAC,WAAW,KAAK,IAAI,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC3D,OAAO,IAAI,CAAC;QACd,CAAC;QACD,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;QACxE,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;QACxB,IAAI,CAAC,OAAO,GAAG,EAAE,CAAC;QAClB,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,qEAAqE;IACrE,IAAI,OAAO;QACT,OAAO,IAAI,CAAC,WAAW,KAAK,IAAI,CAAC;IACnC,CAAC;IAED;;OAEG;IACH,KAAK;QACH,IAAI,CAAC,OAAO,GAAG,EAAE,CAAC;QAClB,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;IAC1B,CAAC;IAED;;;OAGG;IACH,IAAI,iBAAiB;QACnB,OAAO,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC;IAC7B,CAAC;IAED;;OAEG;IACH,IAAI;QACF,OAAO,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACjC,CAAC;CACF"}
@@ -0,0 +1,9 @@
1
+ import type { AgentName } from '../types.js';
2
+ export interface ToolClassification {
3
+ destructive: boolean;
4
+ readOnly: boolean;
5
+ network: boolean;
6
+ longRunning: boolean;
7
+ handlesSecrets: boolean;
8
+ }
9
+ export declare function classifyTool(agent: AgentName, toolName: string, input?: unknown): ToolClassification;
@@ -0,0 +1 @@
1
+ {"version":3,"file":"classify.d.ts","sourceRoot":"","sources":["../../src/tools/classify.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAE7C,MAAM,WAAW,kBAAkB;IACjC,WAAW,EAAE,OAAO,CAAC;IACrB,QAAQ,EAAE,OAAO,CAAC;IAClB,OAAO,EAAE,OAAO,CAAC;IACjB,WAAW,EAAE,OAAO,CAAC;IACrB,cAAc,EAAE,OAAO,CAAC;CACzB;AAwED,wBAAgB,YAAY,CAC1B,KAAK,EAAE,SAAS,EAChB,QAAQ,EAAE,MAAM,EAChB,KAAK,CAAC,EAAE,OAAO,GACd,kBAAkB,CAapB"}
@@ -0,0 +1,77 @@
1
+ const DEFAULT_CLASSIFICATION = {
2
+ destructive: true,
3
+ readOnly: false,
4
+ network: false,
5
+ longRunning: false,
6
+ handlesSecrets: false,
7
+ };
8
+ const RULES = {
9
+ '*': [
10
+ { test: /^(read|cat|view|open_file|read_file|file_read|glob|grep|search_files|file_search|list_dir|ls|find)$/i, value: { destructive: false, readOnly: true } },
11
+ { test: /^(fetch|web(fetch|search)?|search_query|browser_(navigate|open|visit|search)|open_url|http_request)$/i, value: { destructive: false, readOnly: true, network: true } },
12
+ { test: /^(bash|shell|exec_command|run_shell_command|terminal|command)$/i, value: { longRunning: true }, inputTest: /\b(rm|del|remove-item|mv|move|cp|copy|chmod|chown|git\s+(commit|push|reset|clean|checkout)|npm\s+publish)\b/i },
13
+ { test: /^(bash|shell|exec_command|run_shell_command|terminal|command)$/i, value: { destructive: false, readOnly: true, longRunning: true }, inputTest: /\b(ls|dir|cat|type|pwd|echo|grep|rg|find|git\s+(status|diff|log)|npm\s+(test|run\s+lint)|vitest|eslint|tsc)\b/i },
14
+ { test: /^(write|edit|multi(edit)?|replace|patch|apply_patch|notebook(edit|_write)|file_(write|create|delete|patch)|create|mkdir|delete|remove|rename|move|copy)$/i, value: { destructive: true, readOnly: false } },
15
+ { test: /^(secret|credential|credentials|auth|login|token|env|keychain|vault)/i, value: { handlesSecrets: true } },
16
+ ],
17
+ claude: [
18
+ { test: /^(Read|Grep|Glob|LS|NotebookRead|TodoRead)$/i, value: { destructive: false, readOnly: true } },
19
+ { test: /^(Write|Edit|MultiEdit|NotebookEdit|TodoWrite)$/i, value: { destructive: true, readOnly: false } },
20
+ { test: /^Web(Fetch|Search)$/i, value: { destructive: false, readOnly: true, network: true } },
21
+ { test: /^Bash$/i, value: { longRunning: true } },
22
+ { test: /^Task$/i, value: { longRunning: true } },
23
+ ],
24
+ codex: [
25
+ { test: /^(view_image|read_mcp_resource|list_mcp_resources|list_mcp_resource_templates)$/i, value: { destructive: false, readOnly: true } },
26
+ { test: /^(exec_command|write_stdin)$/i, value: { longRunning: true } },
27
+ { test: /^apply_patch$/i, value: { destructive: true, readOnly: false } },
28
+ ],
29
+ gemini: [
30
+ { test: /^(read_file|grep_in_files|search_codebase)$/i, value: { destructive: false, readOnly: true } },
31
+ { test: /^(write_file|replace_file_text|create_file|delete_file)$/i, value: { destructive: true, readOnly: false } },
32
+ { test: /^google_search$/i, value: { destructive: false, readOnly: true, network: true } },
33
+ { test: /^run_shell_command$/i, value: { longRunning: true } },
34
+ ],
35
+ copilot: [
36
+ { test: /^(readFile|findTextInFiles|search)$/i, value: { destructive: false, readOnly: true } },
37
+ { test: /^(createFile|editFile|deleteFile)$/i, value: { destructive: true, readOnly: false } },
38
+ ],
39
+ cursor: [
40
+ { test: /^(read_file|search_files|list_files)$/i, value: { destructive: false, readOnly: true } },
41
+ { test: /^(edit_file|create_file|delete_file)$/i, value: { destructive: true, readOnly: false } },
42
+ ],
43
+ opencode: [
44
+ { test: /^(read|grep|glob|ls)$/i, value: { destructive: false, readOnly: true } },
45
+ { test: /^(write|edit|patch)$/i, value: { destructive: true, readOnly: false } },
46
+ ],
47
+ openclaw: [
48
+ { test: /^(channel-plugin|webhook)$/i, value: { network: true, longRunning: true } },
49
+ ],
50
+ pi: [
51
+ { test: /^(read_file|search_files)$/i, value: { destructive: false, readOnly: true } },
52
+ { test: /^(write_file|edit_file)$/i, value: { destructive: true, readOnly: false } },
53
+ ],
54
+ omp: [
55
+ { test: /^(read|grep|glob)$/i, value: { destructive: false, readOnly: true } },
56
+ { test: /^(write|edit|patch)$/i, value: { destructive: true, readOnly: false } },
57
+ ],
58
+ hermes: [
59
+ { test: /^(read_file|grep|glob)$/i, value: { destructive: false, readOnly: true } },
60
+ { test: /^(write_file|edit_file|patch_file)$/i, value: { destructive: true, readOnly: false } },
61
+ ],
62
+ };
63
+ export function classifyTool(agent, toolName, input) {
64
+ const normalizedAgent = String(agent).toLowerCase();
65
+ const normalizedInput = typeof input === 'string' ? input : JSON.stringify(input ?? '');
66
+ const matches = [...(RULES['*'] ?? []), ...(RULES[normalizedAgent] ?? [])];
67
+ const resolved = { ...DEFAULT_CLASSIFICATION };
68
+ for (const rule of matches) {
69
+ if (!rule.test.test(toolName))
70
+ continue;
71
+ if (rule.inputTest && !rule.inputTest.test(normalizedInput))
72
+ continue;
73
+ Object.assign(resolved, rule.value);
74
+ }
75
+ return resolved;
76
+ }
77
+ //# sourceMappingURL=classify.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"classify.js","sourceRoot":"","sources":["../../src/tools/classify.ts"],"names":[],"mappings":"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"}