@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,96 @@
1
+ /**
2
+ * ProcessTracker singleton for zombie prevention.
3
+ *
4
+ * Maintains a set of all active subprocess PIDs and their metadata.
5
+ * On Node.js exit, all tracked processes are forcefully terminated.
6
+ *
7
+ * Per spec §6.4: handlers are installed once, on first register() call.
8
+ */
9
+ // ---------------------------------------------------------------------------
10
+ // ProcessTrackerImpl
11
+ // ---------------------------------------------------------------------------
12
+ class ProcessTrackerImpl {
13
+ _tracked = new Map();
14
+ _handlersInstalled = false;
15
+ get activeCount() {
16
+ return this._tracked.size;
17
+ }
18
+ register(pid, groupId, runId) {
19
+ this._tracked.set(pid, { pid, groupId, runId });
20
+ if (!this._handlersInstalled) {
21
+ this._installHandlers();
22
+ this._handlersInstalled = true;
23
+ }
24
+ }
25
+ unregister(pid) {
26
+ this._tracked.delete(pid);
27
+ }
28
+ killAll() {
29
+ const isUnix = process.platform !== 'win32';
30
+ // Phase 1: send SIGINT to each process group (Unix) or SIGTERM to PID (Windows).
31
+ for (const proc of this._tracked.values()) {
32
+ try {
33
+ if (isUnix && proc.groupId > 0) {
34
+ // Kill the entire process group on Unix (negative PID).
35
+ process.kill(-proc.groupId, 'SIGINT');
36
+ }
37
+ else {
38
+ process.kill(proc.pid, 'SIGTERM');
39
+ }
40
+ }
41
+ catch {
42
+ // Process may have already exited — ignore.
43
+ }
44
+ }
45
+ // Phase 2: synchronous grace wait then SIGKILL.
46
+ // In the `exit` handler context this is synchronous — we cannot
47
+ // use setTimeout. We do a best-effort busy-wait then SIGKILL.
48
+ // Real async two-phase shutdown is handled by RunHandleImpl.abort().
49
+ // Here we are in the "process is dying" path — be aggressive.
50
+ for (const proc of this._tracked.values()) {
51
+ try {
52
+ if (isUnix && proc.groupId > 0) {
53
+ process.kill(-proc.groupId, 'SIGKILL');
54
+ }
55
+ else {
56
+ process.kill(proc.pid, 'SIGKILL');
57
+ }
58
+ }
59
+ catch {
60
+ // Already exited — fine.
61
+ }
62
+ }
63
+ this._tracked.clear();
64
+ }
65
+ _installHandlers() {
66
+ // Synchronous kill on exit
67
+ process.on('exit', () => {
68
+ this.killAll();
69
+ });
70
+ // Signal handlers — per spec §6.4, installed for SIGTERM and SIGINT.
71
+ // On Windows, Node.js emits these for Ctrl+C and taskkill.
72
+ const signalHandler = () => {
73
+ this.killAll();
74
+ process.exit(1);
75
+ };
76
+ process.on('SIGTERM', signalHandler);
77
+ process.on('SIGINT', signalHandler);
78
+ // Uncaught errors: cleanup then rethrow
79
+ process.on('uncaughtException', (err) => {
80
+ this.killAll();
81
+ throw err;
82
+ });
83
+ process.on('unhandledRejection', (reason) => {
84
+ this.killAll();
85
+ if (reason instanceof Error)
86
+ throw reason;
87
+ throw new Error(String(reason));
88
+ });
89
+ }
90
+ }
91
+ // ---------------------------------------------------------------------------
92
+ // Module-level singleton
93
+ // ---------------------------------------------------------------------------
94
+ /** Global ProcessTracker singleton. */
95
+ export const processTracker = new ProcessTrackerImpl();
96
+ //# sourceMappingURL=process-tracker.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"process-tracker.js","sourceRoot":"","sources":["../src/process-tracker.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,99 @@
1
+ /**
2
+ * Profile management for @a5c-ai/agent-mux.
3
+ *
4
+ * Profiles are named RunOptions presets stored as JSON files in the
5
+ * global config directory (`~/.agent-mux/profiles/`) or the project
6
+ * config directory (`.agent-mux/profiles/`).
7
+ *
8
+ * @see 02-run-options-and-profiles.md §10
9
+ */
10
+ import type { AgentName, ProfileData } from './types.js';
11
+ import type { StoragePaths } from './storage.js';
12
+ import type { RunOptions } from './run-options.js';
13
+ /** Options for filtering profile listings. */
14
+ export interface ProfileListOptions {
15
+ /** Filter by scope. If omitted, both global and project profiles are listed. */
16
+ scope?: 'global' | 'project';
17
+ }
18
+ /** Metadata for a single profile entry in a listing. */
19
+ export interface ProfileEntry {
20
+ /** Profile name (filename without `.json` extension). */
21
+ name: string;
22
+ /** Where this profile is stored. `'project'` if present in both. */
23
+ scope: 'global' | 'project';
24
+ /** Whether a global profile is also present (only relevant for project scope). */
25
+ hasGlobalOverride: boolean;
26
+ /** The agent specified in this profile, if any. */
27
+ agent?: AgentName;
28
+ /** The model specified in this profile, if any. */
29
+ model?: string;
30
+ /** `true` if the profile file exists but could not be parsed. */
31
+ corrupt?: boolean;
32
+ }
33
+ /** A resolved profile: the merged result of global + project data. */
34
+ export interface ResolvedProfile {
35
+ /** Profile name. */
36
+ name: string;
37
+ /** The resolved profile data after merging global and project layers. */
38
+ data: ProfileData;
39
+ /** Source scope of the resolved profile. */
40
+ scope: 'global' | 'project';
41
+ /** Absolute path to the global profile file, if it exists. */
42
+ globalPath?: string;
43
+ /** Absolute path to the project profile file, if it exists. */
44
+ projectPath?: string;
45
+ }
46
+ /** Options for writing a profile. */
47
+ export interface ProfileSetOptions {
48
+ /**
49
+ * Target scope for the profile file.
50
+ * @default 'project' (if a project directory exists, else 'global')
51
+ */
52
+ scope?: 'global' | 'project';
53
+ }
54
+ /** Options for deleting a profile. */
55
+ export interface ProfileDeleteOptions {
56
+ /**
57
+ * Target scope to delete from.
58
+ * If undefined, prefers project scope: deletes from project if found there,
59
+ * else falls back to global.
60
+ */
61
+ scope?: 'global' | 'project';
62
+ }
63
+ /**
64
+ * Manages named RunOptions presets (profiles).
65
+ *
66
+ * @see 02-run-options-and-profiles.md §10
67
+ */
68
+ export interface ProfileManager {
69
+ /** List all available profiles, sorted by name. */
70
+ list(options?: ProfileListOptions): Promise<ProfileEntry[]>;
71
+ /** Show the resolved contents of a named profile. */
72
+ show(name: string): Promise<ResolvedProfile>;
73
+ /** Create or update a named profile. */
74
+ set(name: string, data: ProfileData, options?: ProfileSetOptions): Promise<void>;
75
+ /** Delete a named profile. */
76
+ delete(name: string, options?: ProfileDeleteOptions): Promise<void>;
77
+ /** Apply a profile to partial RunOptions, returning the merged result. */
78
+ apply(name: string, overrides?: Partial<RunOptions>): Promise<Partial<RunOptions>>;
79
+ }
80
+ /** Implementation of the ProfileManager interface. */
81
+ export declare class ProfileManagerImpl implements ProfileManager {
82
+ private readonly globalProfilesDir;
83
+ private readonly projectProfilesDir;
84
+ constructor(storagePaths: StoragePaths);
85
+ list(options?: ProfileListOptions): Promise<ProfileEntry[]>;
86
+ show(name: string): Promise<ResolvedProfile>;
87
+ set(name: string, data: ProfileData, options?: ProfileSetOptions): Promise<void>;
88
+ delete(name: string, options?: ProfileDeleteOptions): Promise<void>;
89
+ apply(name: string, overrides?: Partial<RunOptions>): Promise<Partial<RunOptions>>;
90
+ private resolveDefaultScope;
91
+ private deleteFile;
92
+ private listDir;
93
+ /**
94
+ * Read and parse a profile JSON file.
95
+ * Returns null if the file does not exist.
96
+ * Returns { corrupt: true } for unparseable files (§12.5).
97
+ */
98
+ private readProfileFile;
99
+ }
@@ -0,0 +1 @@
1
+ {"version":3,"file":"profiles.d.ts","sourceRoot":"","sources":["../src/profiles.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,231 @@
1
+ /**
2
+ * Profile management for @a5c-ai/agent-mux.
3
+ *
4
+ * Profiles are named RunOptions presets stored as JSON files in the
5
+ * global config directory (`~/.agent-mux/profiles/`) or the project
6
+ * config directory (`.agent-mux/profiles/`).
7
+ *
8
+ * @see 02-run-options-and-profiles.md §10
9
+ */
10
+ import * as fs from 'node:fs';
11
+ import * as path from 'node:path';
12
+ import { AgentMuxError, ValidationError } from './errors.js';
13
+ import { validateProfileData } from './run-options.js';
14
+ import { deepMerge } from './merge.js';
15
+ // ---------------------------------------------------------------------------
16
+ // Constants
17
+ // ---------------------------------------------------------------------------
18
+ /** Profile name validation pattern. */
19
+ const PROFILE_NAME_RE = /^[a-zA-Z0-9_-]{1,64}$/;
20
+ // ---------------------------------------------------------------------------
21
+ // ProfileManagerImpl
22
+ // ---------------------------------------------------------------------------
23
+ /** Implementation of the ProfileManager interface. */
24
+ export class ProfileManagerImpl {
25
+ globalProfilesDir;
26
+ projectProfilesDir;
27
+ constructor(storagePaths) {
28
+ this.globalProfilesDir = storagePaths.globalProfilesDir;
29
+ this.projectProfilesDir = storagePaths.projectProfilesDir;
30
+ }
31
+ async list(options) {
32
+ const globalEntries = (!options?.scope || options.scope === 'global')
33
+ ? this.listDir(this.globalProfilesDir, 'global')
34
+ : [];
35
+ const projectEntries = (!options?.scope || options.scope === 'project')
36
+ ? this.listDir(this.projectProfilesDir, 'project')
37
+ : [];
38
+ // Build map: global first, project overrides
39
+ const byName = new Map();
40
+ const globalNames = new Set();
41
+ for (const entry of globalEntries) {
42
+ globalNames.add(entry.name);
43
+ byName.set(entry.name, entry);
44
+ }
45
+ for (const entry of projectEntries) {
46
+ const hasGlobal = globalNames.has(entry.name);
47
+ entry.hasGlobalOverride = hasGlobal;
48
+ if (hasGlobal && !entry.corrupt) {
49
+ // Merge global data into the project entry for agent/model display
50
+ const globalEntry = byName.get(entry.name);
51
+ if (!globalEntry.corrupt) {
52
+ // agent/model: project wins if set, else falls back to global
53
+ entry.agent = entry.agent ?? globalEntry.agent;
54
+ entry.model = entry.model ?? globalEntry.model;
55
+ }
56
+ }
57
+ byName.set(entry.name, entry);
58
+ }
59
+ // Sort by name
60
+ return [...byName.values()].sort((a, b) => a.name.localeCompare(b.name));
61
+ }
62
+ async show(name) {
63
+ validateProfileName(name);
64
+ const globalPath = path.join(this.globalProfilesDir, `${name}.json`);
65
+ const projectPath = path.join(this.projectProfilesDir, `${name}.json`);
66
+ const globalResult = this.readProfileFile(globalPath);
67
+ const projectResult = this.readProfileFile(projectPath);
68
+ if (globalResult === null && projectResult === null) {
69
+ throw new AgentMuxError('PROFILE_NOT_FOUND', `Profile "${name}" not found`);
70
+ }
71
+ // Throw CONFIG_ERROR for corrupt files (§12.5)
72
+ if (globalResult?.corrupt) {
73
+ throw new AgentMuxError('CONFIG_ERROR', `Profile "${name}" at ${globalPath} is corrupt: invalid JSON`);
74
+ }
75
+ if (projectResult?.corrupt) {
76
+ throw new AgentMuxError('CONFIG_ERROR', `Profile "${name}" at ${projectPath} is corrupt: invalid JSON`);
77
+ }
78
+ let merged = {};
79
+ let scope = 'global';
80
+ if (globalResult?.data) {
81
+ merged = globalResult.data;
82
+ }
83
+ if (projectResult?.data) {
84
+ merged = deepMerge(merged, projectResult.data);
85
+ scope = 'project';
86
+ }
87
+ return {
88
+ name,
89
+ data: merged,
90
+ scope,
91
+ globalPath: globalResult ? globalPath : undefined,
92
+ projectPath: projectResult ? projectPath : undefined,
93
+ };
94
+ }
95
+ async set(name, data, options) {
96
+ validateProfileName(name);
97
+ validateProfileData(data);
98
+ const scope = options?.scope ?? this.resolveDefaultScope();
99
+ const dir = scope === 'global' ? this.globalProfilesDir : this.projectProfilesDir;
100
+ const filePath = path.join(dir, `${name}.json`);
101
+ fs.mkdirSync(dir, { recursive: true });
102
+ fs.writeFileSync(filePath, JSON.stringify(data, null, 2), 'utf-8');
103
+ }
104
+ async delete(name, options) {
105
+ validateProfileName(name);
106
+ if (options?.scope) {
107
+ // Explicit scope
108
+ const dir = options.scope === 'global' ? this.globalProfilesDir : this.projectProfilesDir;
109
+ this.deleteFile(path.join(dir, `${name}.json`), name, options.scope);
110
+ }
111
+ else {
112
+ // Prefer project scope
113
+ const projectPath = path.join(this.projectProfilesDir, `${name}.json`);
114
+ if (fs.existsSync(projectPath)) {
115
+ this.deleteFile(projectPath, name, 'project');
116
+ }
117
+ else {
118
+ const globalPath = path.join(this.globalProfilesDir, `${name}.json`);
119
+ this.deleteFile(globalPath, name, 'global');
120
+ }
121
+ }
122
+ }
123
+ async apply(name, overrides) {
124
+ const resolved = await this.show(name);
125
+ if (overrides) {
126
+ return deepMerge(resolved.data, overrides);
127
+ }
128
+ return resolved.data;
129
+ }
130
+ // -----------------------------------------------------------------------
131
+ // Private helpers
132
+ // -----------------------------------------------------------------------
133
+ resolveDefaultScope() {
134
+ try {
135
+ fs.statSync(this.projectProfilesDir);
136
+ return 'project';
137
+ }
138
+ catch {
139
+ // If project dir doesn't exist, check parent
140
+ try {
141
+ const parent = path.dirname(this.projectProfilesDir);
142
+ fs.statSync(parent);
143
+ return 'project';
144
+ }
145
+ catch {
146
+ return 'global';
147
+ }
148
+ }
149
+ }
150
+ deleteFile(filePath, name, scope) {
151
+ try {
152
+ fs.unlinkSync(filePath);
153
+ }
154
+ catch (err) {
155
+ if (err.code === 'ENOENT') {
156
+ throw new AgentMuxError('PROFILE_NOT_FOUND', `Profile "${name}" not found in ${scope} scope`);
157
+ }
158
+ throw err;
159
+ }
160
+ }
161
+ listDir(dir, scope) {
162
+ const entries = [];
163
+ try {
164
+ const files = fs.readdirSync(dir);
165
+ for (const file of files) {
166
+ if (file.endsWith('.json')) {
167
+ const name = file.slice(0, -5);
168
+ if (PROFILE_NAME_RE.test(name)) {
169
+ const filePath = path.join(dir, file);
170
+ const result = this.readProfileFile(filePath);
171
+ if (result?.corrupt) {
172
+ entries.push({ name, scope, hasGlobalOverride: false, corrupt: true });
173
+ }
174
+ else {
175
+ const data = result?.data;
176
+ entries.push({
177
+ name,
178
+ scope,
179
+ hasGlobalOverride: false,
180
+ agent: data?.agent,
181
+ model: data?.model,
182
+ });
183
+ }
184
+ }
185
+ }
186
+ }
187
+ }
188
+ catch {
189
+ // Directory does not exist — no profiles in this scope
190
+ }
191
+ return entries;
192
+ }
193
+ /**
194
+ * Read and parse a profile JSON file.
195
+ * Returns null if the file does not exist.
196
+ * Returns { corrupt: true } for unparseable files (§12.5).
197
+ */
198
+ readProfileFile(filePath) {
199
+ let raw;
200
+ try {
201
+ raw = fs.readFileSync(filePath, 'utf-8');
202
+ }
203
+ catch {
204
+ return null; // File does not exist
205
+ }
206
+ try {
207
+ const parsed = JSON.parse(raw);
208
+ if (typeof parsed !== 'object' || parsed === null || Array.isArray(parsed)) {
209
+ return { corrupt: true };
210
+ }
211
+ return { data: parsed };
212
+ }
213
+ catch {
214
+ return { corrupt: true };
215
+ }
216
+ }
217
+ }
218
+ // ---------------------------------------------------------------------------
219
+ // Helpers
220
+ // ---------------------------------------------------------------------------
221
+ function validateProfileName(name) {
222
+ if (!PROFILE_NAME_RE.test(name)) {
223
+ throw new ValidationError([{
224
+ field: 'name',
225
+ message: 'must match ^[a-zA-Z0-9_-]{1,64}$',
226
+ received: name,
227
+ expected: 'string matching ^[a-zA-Z0-9_-]{1,64}$',
228
+ }]);
229
+ }
230
+ }
231
+ //# sourceMappingURL=profiles.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"profiles.js","sourceRoot":"","sources":["../src/profiles.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ import type { ProgrammaticAdapter } from './adapter-types.js';
2
+ import type { RunOptions } from './run-options.js';
3
+ import { RunHandleImpl } from './run-handle-impl.js';
4
+ export declare function startProgrammaticLoop(handle: RunHandleImpl, adapter: ProgrammaticAdapter, options: RunOptions): void;
@@ -0,0 +1 @@
1
+ {"version":3,"file":"programmatic-runner.d.ts","sourceRoot":"","sources":["../src/programmatic-runner.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AAC9D,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAGnD,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAErD,wBAAgB,qBAAqB,CACnC,MAAM,EAAE,aAAa,EACrB,OAAO,EAAE,mBAAmB,EAC5B,OAAO,EAAE,UAAU,GAClB,IAAI,CAIN"}
@@ -0,0 +1,110 @@
1
+ import { AgentMuxError } from './errors.js';
2
+ export function startProgrammaticLoop(handle, adapter, options) {
3
+ queueMicrotask(() => {
4
+ void runProgrammatic(handle, adapter, options);
5
+ });
6
+ }
7
+ async function runProgrammatic(handle, adapter, options) {
8
+ let aborted = false;
9
+ let runTimeout = null;
10
+ let inactivityTimeout = null;
11
+ let stream = null;
12
+ const clearTimers = () => {
13
+ if (runTimeout)
14
+ clearTimeout(runTimeout);
15
+ if (inactivityTimeout)
16
+ clearTimeout(inactivityTimeout);
17
+ };
18
+ const resetInactivity = () => {
19
+ if (!options.inactivityTimeout || options.inactivityTimeout <= 0)
20
+ return;
21
+ if (inactivityTimeout)
22
+ clearTimeout(inactivityTimeout);
23
+ inactivityTimeout = setTimeout(() => {
24
+ aborted = true;
25
+ void handle.abort();
26
+ }, options.inactivityTimeout);
27
+ };
28
+ if (options.timeout && options.timeout > 0) {
29
+ runTimeout = setTimeout(() => {
30
+ aborted = true;
31
+ void handle.abort();
32
+ }, options.timeout);
33
+ }
34
+ const originalAbort = handle.abort.bind(handle);
35
+ handle.abort = async () => {
36
+ aborted = true;
37
+ clearTimers();
38
+ if (stream && typeof stream.close === 'function') {
39
+ try {
40
+ await stream.close();
41
+ }
42
+ catch {
43
+ // Ignore cleanup errors.
44
+ }
45
+ }
46
+ try {
47
+ await originalAbort();
48
+ }
49
+ catch {
50
+ // Ignore double-finalization races.
51
+ }
52
+ };
53
+ const originalInterrupt = handle.interrupt.bind(handle);
54
+ handle.interrupt = async () => {
55
+ if (stream && typeof stream.interrupt === 'function') {
56
+ await stream.interrupt();
57
+ }
58
+ await originalInterrupt();
59
+ };
60
+ try {
61
+ handle.transitionTo('running');
62
+ }
63
+ catch {
64
+ // Ignore if already transitioned.
65
+ }
66
+ try {
67
+ resetInactivity();
68
+ stream = adapter.execute(options);
69
+ handle.bindInputTransport(async (text) => {
70
+ if (!adapter.capabilities.supportsStdinInjection || typeof stream?.send !== 'function') {
71
+ throw new AgentMuxError('STDIN_NOT_AVAILABLE', `${adapter.agent} does not support live prompt injection in the current agent-mux transport`, false);
72
+ }
73
+ await stream.send(text);
74
+ });
75
+ handle.bindInteractionTransport(async (interactionId, response) => {
76
+ if (typeof stream?.respond !== 'function') {
77
+ throw new AgentMuxError('STDIN_NOT_AVAILABLE', `${adapter.agent} does not support live interaction responses in the current agent-mux transport`, false);
78
+ }
79
+ await stream.respond(interactionId, response);
80
+ });
81
+ for await (const event of stream) {
82
+ resetInactivity();
83
+ handle.emit(event);
84
+ }
85
+ clearTimers();
86
+ handle.complete(aborted ? 'aborted' : 'completed', aborted ? 1 : 0, null);
87
+ }
88
+ catch (err) {
89
+ clearTimers();
90
+ if (stream && typeof stream.close === 'function') {
91
+ try {
92
+ await stream.close();
93
+ }
94
+ catch {
95
+ // Ignore cleanup errors after failures.
96
+ }
97
+ }
98
+ handle.emit({
99
+ type: 'error',
100
+ runId: handle.runId,
101
+ agent: handle.agent,
102
+ timestamp: Date.now(),
103
+ code: 'INTERNAL',
104
+ message: err instanceof Error ? err.message : String(err),
105
+ recoverable: false,
106
+ });
107
+ handle.complete(aborted ? 'aborted' : 'crashed', null, null);
108
+ }
109
+ }
110
+ //# sourceMappingURL=programmatic-runner.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"programmatic-runner.js","sourceRoot":"","sources":["../src/programmatic-runner.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,40 @@
1
+ export type ProviderId = 'anthropic' | 'openai' | 'google' | 'bedrock' | 'vertex' | 'azure' | 'foundry' | 'ollama' | 'local' | 'openrouter' | 'groq' | 'fireworks' | 'together' | 'deepseek' | 'mistral' | 'cerebras' | 'sambanova' | 'custom' | 'lmstudio' | 'vllm' | 'nvidia-nim' | 'perplexity' | 'cohere';
2
+ export type TransportId = 'anthropic' | 'openai-chat' | 'openai-responses' | 'google' | 'passthrough' | 'bedrock-converse' | 'vertex-native' | 'azure-foundry';
3
+ export interface ProviderAuth {
4
+ type: 'api_key' | 'oauth' | 'iam' | 'adc' | 'service_account' | 'spn' | 'bearer' | 'none' | 'command';
5
+ apiKey?: string;
6
+ token?: string;
7
+ command?: string;
8
+ awsProfile?: string;
9
+ awsRoleArn?: string;
10
+ awsSessionToken?: string;
11
+ gcpCredentialsFile?: string;
12
+ azureTenantId?: string;
13
+ azureClientId?: string;
14
+ azureClientSecret?: string;
15
+ }
16
+ export interface ProviderConfig {
17
+ provider: ProviderId;
18
+ model: string;
19
+ transport: TransportId;
20
+ auth: ProviderAuth;
21
+ params: Record<string, unknown>;
22
+ }
23
+ export interface ProviderDefaults {
24
+ transport: TransportId;
25
+ authType: ProviderAuth['type'];
26
+ apiBase: string;
27
+ defaultModel: string;
28
+ envKey?: string;
29
+ }
30
+ export declare const PROVIDER_DEFAULTS: Record<ProviderId, ProviderDefaults>;
31
+ /**
32
+ * Maps canonical model IDs to provider-specific formats.
33
+ * Keys are canonical model IDs, values map ProviderId → provider-specific ID.
34
+ */
35
+ export declare const MODEL_TRANSLATION_TABLE: Record<string, Partial<Record<ProviderId, string>>>;
36
+ /**
37
+ * Translate a canonical model ID to the provider-specific format.
38
+ * Returns the original model ID if no translation exists.
39
+ */
40
+ export declare function translateModelId(canonical: string, provider: ProviderId): string;
@@ -0,0 +1 @@
1
+ {"version":3,"file":"provider-config.d.ts","sourceRoot":"","sources":["../src/provider-config.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,UAAU,GAClB,WAAW,GAAG,QAAQ,GAAG,QAAQ,GAAG,SAAS,GAAG,QAAQ,GACxD,OAAO,GAAG,SAAS,GAAG,QAAQ,GAAG,OAAO,GAAG,YAAY,GACvD,MAAM,GAAG,WAAW,GAAG,UAAU,GAAG,UAAU,GAAG,SAAS,GAC1D,UAAU,GAAG,WAAW,GAAG,QAAQ,GACnC,UAAU,GAAG,MAAM,GAAG,YAAY,GAAG,YAAY,GAAG,QAAQ,CAAC;AAEjE,MAAM,MAAM,WAAW,GACnB,WAAW,GAAG,aAAa,GAAG,kBAAkB,GAAG,QAAQ,GAC3D,aAAa,GAAG,kBAAkB,GAAG,eAAe,GAAG,eAAe,CAAC;AAE3E,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,SAAS,GAAG,OAAO,GAAG,KAAK,GAAG,KAAK,GAAG,iBAAiB,GAAG,KAAK,GAAG,QAAQ,GAAG,MAAM,GAAG,SAAS,CAAC;IACtG,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,iBAAiB,CAAC,EAAE,MAAM,CAAC;CAC5B;AAED,MAAM,WAAW,cAAc;IAC7B,QAAQ,EAAE,UAAU,CAAC;IACrB,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,WAAW,CAAC;IACvB,IAAI,EAAE,YAAY,CAAC;IACnB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACjC;AAED,MAAM,WAAW,gBAAgB;IAC/B,SAAS,EAAE,WAAW,CAAC;IACvB,QAAQ,EAAE,YAAY,CAAC,MAAM,CAAC,CAAC;IAC/B,OAAO,EAAE,MAAM,CAAC;IAChB,YAAY,EAAE,MAAM,CAAC;IACrB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,eAAO,MAAM,iBAAiB,EAAE,MAAM,CAAC,UAAU,EAAE,gBAAgB,CAwBlE,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,uBAAuB,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,MAAM,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC,CA0BvF,CAAC;AAEF;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,UAAU,GAAG,MAAM,CAIhF"}