@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.
- package/LICENSE +21 -0
- package/README.md +99 -0
- package/dist/adapter-registry.d.ts +51 -0
- package/dist/adapter-registry.d.ts.map +1 -0
- package/dist/adapter-registry.js +208 -0
- package/dist/adapter-registry.js.map +1 -0
- package/dist/adapter-types.d.ts +164 -0
- package/dist/adapter-types.d.ts.map +1 -0
- package/dist/adapter-types.js +27 -0
- package/dist/adapter-types.js.map +1 -0
- package/dist/adapter.d.ts +248 -0
- package/dist/adapter.d.ts.map +1 -0
- package/dist/adapter.js +18 -0
- package/dist/adapter.js.map +1 -0
- package/dist/atomic-fs.d.ts +33 -0
- package/dist/atomic-fs.d.ts.map +1 -0
- package/dist/atomic-fs.js +190 -0
- package/dist/atomic-fs.js.map +1 -0
- package/dist/auth-manager.d.ts +37 -0
- package/dist/auth-manager.d.ts.map +1 -0
- package/dist/auth-manager.js +94 -0
- package/dist/auth-manager.js.map +1 -0
- package/dist/auth-types.d.ts +83 -0
- package/dist/auth-types.d.ts.map +1 -0
- package/dist/auth-types.js +10 -0
- package/dist/auth-types.js.map +1 -0
- package/dist/automation.d.ts +104 -0
- package/dist/automation.d.ts.map +1 -0
- package/dist/automation.js +2 -0
- package/dist/automation.js.map +1 -0
- package/dist/browser.d.ts +5 -0
- package/dist/browser.d.ts.map +1 -0
- package/dist/browser.js +2 -0
- package/dist/browser.js.map +1 -0
- package/dist/builtin-hooks.d.ts +24 -0
- package/dist/builtin-hooks.d.ts.map +1 -0
- package/dist/builtin-hooks.js +80 -0
- package/dist/builtin-hooks.js.map +1 -0
- package/dist/capabilities.d.ts +251 -0
- package/dist/capabilities.d.ts.map +1 -0
- package/dist/capabilities.js +7 -0
- package/dist/capabilities.js.map +1 -0
- package/dist/client.d.ts +118 -0
- package/dist/client.d.ts.map +1 -0
- package/dist/client.js +316 -0
- package/dist/client.js.map +1 -0
- package/dist/config-manager.d.ts +85 -0
- package/dist/config-manager.d.ts.map +1 -0
- package/dist/config-manager.js +202 -0
- package/dist/config-manager.js.map +1 -0
- package/dist/config-types.d.ts +134 -0
- package/dist/config-types.d.ts.map +1 -0
- package/dist/config-types.js +10 -0
- package/dist/config-types.js.map +1 -0
- package/dist/cost-utils.d.ts +31 -0
- package/dist/cost-utils.d.ts.map +1 -0
- package/dist/cost-utils.js +69 -0
- package/dist/cost-utils.js.map +1 -0
- package/dist/errors.d.ts +50 -0
- package/dist/errors.d.ts.map +1 -0
- package/dist/errors.js +85 -0
- package/dist/errors.js.map +1 -0
- package/dist/events-control.d.ts +91 -0
- package/dist/events-control.d.ts.map +1 -0
- package/dist/events-control.js +8 -0
- package/dist/events-control.js.map +1 -0
- package/dist/events.d.ts +285 -0
- package/dist/events.d.ts.map +1 -0
- package/dist/events.js +8 -0
- package/dist/events.js.map +1 -0
- package/dist/hook-catalog.d.ts +20 -0
- package/dist/hook-catalog.d.ts.map +1 -0
- package/dist/hook-catalog.js +63 -0
- package/dist/hook-catalog.js.map +1 -0
- package/dist/hook-dispatcher.d.ts +24 -0
- package/dist/hook-dispatcher.d.ts.map +1 -0
- package/dist/hook-dispatcher.js +91 -0
- package/dist/hook-dispatcher.js.map +1 -0
- package/dist/hook-payload.d.ts +24 -0
- package/dist/hook-payload.d.ts.map +1 -0
- package/dist/hook-payload.js +62 -0
- package/dist/hook-payload.js.map +1 -0
- package/dist/hooks.d.ts +59 -0
- package/dist/hooks.d.ts.map +1 -0
- package/dist/hooks.js +118 -0
- package/dist/hooks.js.map +1 -0
- package/dist/host-detection.d.ts +67 -0
- package/dist/host-detection.d.ts.map +1 -0
- package/dist/host-detection.js +147 -0
- package/dist/host-detection.js.map +1 -0
- package/dist/index.d.ts +88 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +50 -0
- package/dist/index.js.map +1 -0
- package/dist/interaction-channel-impl.d.ts +56 -0
- package/dist/interaction-channel-impl.d.ts.map +1 -0
- package/dist/interaction-channel-impl.js +159 -0
- package/dist/interaction-channel-impl.js.map +1 -0
- package/dist/interaction.d.ts +93 -0
- package/dist/interaction.d.ts.map +1 -0
- package/dist/interaction.js +8 -0
- package/dist/interaction.js.map +1 -0
- package/dist/invocation.d.ts +100 -0
- package/dist/invocation.d.ts.map +1 -0
- package/dist/invocation.js +17 -0
- package/dist/invocation.js.map +1 -0
- package/dist/kanban.d.ts +894 -0
- package/dist/kanban.d.ts.map +1 -0
- package/dist/kanban.js +1155 -0
- package/dist/kanban.js.map +1 -0
- package/dist/merge.d.ts +37 -0
- package/dist/merge.d.ts.map +1 -0
- package/dist/merge.js +102 -0
- package/dist/merge.js.map +1 -0
- package/dist/model-registry.d.ts +61 -0
- package/dist/model-registry.d.ts.map +1 -0
- package/dist/model-registry.js +198 -0
- package/dist/model-registry.js.map +1 -0
- package/dist/plugin-manager-impl.d.ts +48 -0
- package/dist/plugin-manager-impl.d.ts.map +1 -0
- package/dist/plugin-manager-impl.js +343 -0
- package/dist/plugin-manager-impl.js.map +1 -0
- package/dist/plugin-manager.d.ts +81 -0
- package/dist/plugin-manager.d.ts.map +1 -0
- package/dist/plugin-manager.js +7 -0
- package/dist/plugin-manager.js.map +1 -0
- package/dist/plugin-types.d.ts +114 -0
- package/dist/plugin-types.d.ts.map +1 -0
- package/dist/plugin-types.js +7 -0
- package/dist/plugin-types.js.map +1 -0
- package/dist/process-tracker.d.ts +20 -0
- package/dist/process-tracker.d.ts.map +1 -0
- package/dist/process-tracker.js +96 -0
- package/dist/process-tracker.js.map +1 -0
- package/dist/profiles.d.ts +99 -0
- package/dist/profiles.d.ts.map +1 -0
- package/dist/profiles.js +231 -0
- package/dist/profiles.js.map +1 -0
- package/dist/programmatic-runner.d.ts +4 -0
- package/dist/programmatic-runner.d.ts.map +1 -0
- package/dist/programmatic-runner.js +110 -0
- package/dist/programmatic-runner.js.map +1 -0
- package/dist/provider-config.d.ts +40 -0
- package/dist/provider-config.d.ts.map +1 -0
- package/dist/provider-config.js +67 -0
- package/dist/provider-config.js.map +1 -0
- package/dist/provider-profiles.d.ts +47 -0
- package/dist/provider-profiles.d.ts.map +1 -0
- package/dist/provider-profiles.js +117 -0
- package/dist/provider-profiles.js.map +1 -0
- package/dist/provider-resolver.d.ts +15 -0
- package/dist/provider-resolver.d.ts.map +1 -0
- package/dist/provider-resolver.js +114 -0
- package/dist/provider-resolver.js.map +1 -0
- package/dist/provider-support-matrix.d.ts +12 -0
- package/dist/provider-support-matrix.d.ts.map +1 -0
- package/dist/provider-support-matrix.js +88 -0
- package/dist/provider-support-matrix.js.map +1 -0
- package/dist/remote-runner.d.ts +4 -0
- package/dist/remote-runner.d.ts.map +1 -0
- package/dist/remote-runner.js +114 -0
- package/dist/remote-runner.js.map +1 -0
- package/dist/retry.d.ts +13 -0
- package/dist/retry.d.ts.map +1 -0
- package/dist/retry.js +17 -0
- package/dist/retry.js.map +1 -0
- package/dist/run-handle-cost.d.ts +36 -0
- package/dist/run-handle-cost.d.ts.map +1 -0
- package/dist/run-handle-cost.js +62 -0
- package/dist/run-handle-cost.js.map +1 -0
- package/dist/run-handle-impl.d.ts +144 -0
- package/dist/run-handle-impl.d.ts.map +1 -0
- package/dist/run-handle-impl.js +695 -0
- package/dist/run-handle-impl.js.map +1 -0
- package/dist/run-handle.d.ts +222 -0
- package/dist/run-handle.d.ts.map +1 -0
- package/dist/run-handle.js +9 -0
- package/dist/run-handle.js.map +1 -0
- package/dist/run-options-validation.d.ts +23 -0
- package/dist/run-options-validation.d.ts.map +1 -0
- package/dist/run-options-validation.js +234 -0
- package/dist/run-options-validation.js.map +1 -0
- package/dist/run-options.d.ts +128 -0
- package/dist/run-options.d.ts.map +1 -0
- package/dist/run-options.js +329 -0
- package/dist/run-options.js.map +1 -0
- package/dist/runtime-hook-dispatcher.d.ts +19 -0
- package/dist/runtime-hook-dispatcher.d.ts.map +1 -0
- package/dist/runtime-hook-dispatcher.js +50 -0
- package/dist/runtime-hook-dispatcher.js.map +1 -0
- package/dist/runtime-hooks.d.ts +47 -0
- package/dist/runtime-hooks.d.ts.map +1 -0
- package/dist/runtime-hooks.js +2 -0
- package/dist/runtime-hooks.js.map +1 -0
- package/dist/schema/__tests__/event-schema.test.d.ts +1 -0
- package/dist/schema/__tests__/event-schema.test.d.ts.map +1 -0
- package/dist/schema/__tests__/event-schema.test.js +480 -0
- package/dist/schema/__tests__/event-schema.test.js.map +1 -0
- package/dist/schema/event-schema.d.ts +120 -0
- package/dist/schema/event-schema.d.ts.map +1 -0
- package/dist/schema/event-schema.js +546 -0
- package/dist/schema/event-schema.js.map +1 -0
- package/dist/schema/index.d.ts +7 -0
- package/dist/schema/index.d.ts.map +1 -0
- package/dist/schema/index.js +49 -0
- package/dist/schema/index.js.map +1 -0
- package/dist/session-manager-helpers.d.ts +33 -0
- package/dist/session-manager-helpers.d.ts.map +1 -0
- package/dist/session-manager-helpers.js +66 -0
- package/dist/session-manager-helpers.js.map +1 -0
- package/dist/session-manager.d.ts +70 -0
- package/dist/session-manager.d.ts.map +1 -0
- package/dist/session-manager.js +343 -0
- package/dist/session-manager.js.map +1 -0
- package/dist/session-types.d.ts +358 -0
- package/dist/session-types.d.ts.map +1 -0
- package/dist/session-types.js +10 -0
- package/dist/session-types.js.map +1 -0
- package/dist/spawn-invocation.d.ts +52 -0
- package/dist/spawn-invocation.d.ts.map +1 -0
- package/dist/spawn-invocation.js +218 -0
- package/dist/spawn-invocation.js.map +1 -0
- package/dist/spawn-runner-utils.d.ts +21 -0
- package/dist/spawn-runner-utils.d.ts.map +1 -0
- package/dist/spawn-runner-utils.js +102 -0
- package/dist/spawn-runner-utils.js.map +1 -0
- package/dist/spawn-runner.d.ts +21 -0
- package/dist/spawn-runner.d.ts.map +1 -0
- package/dist/spawn-runner.js +576 -0
- package/dist/spawn-runner.js.map +1 -0
- package/dist/spawn-runtime-hooks.d.ts +15 -0
- package/dist/spawn-runtime-hooks.d.ts.map +1 -0
- package/dist/spawn-runtime-hooks.js +136 -0
- package/dist/spawn-runtime-hooks.js.map +1 -0
- package/dist/state-machine.d.ts +33 -0
- package/dist/state-machine.d.ts.map +1 -0
- package/dist/state-machine.js +61 -0
- package/dist/state-machine.js.map +1 -0
- package/dist/storage.d.ts +47 -0
- package/dist/storage.d.ts.map +1 -0
- package/dist/storage.js +90 -0
- package/dist/storage.js.map +1 -0
- package/dist/stream-assembler.d.ts +51 -0
- package/dist/stream-assembler.d.ts.map +1 -0
- package/dist/stream-assembler.js +86 -0
- package/dist/stream-assembler.js.map +1 -0
- package/dist/tools/classify.d.ts +9 -0
- package/dist/tools/classify.d.ts.map +1 -0
- package/dist/tools/classify.js +77 -0
- package/dist/tools/classify.js.map +1 -0
- package/dist/tools/index.d.ts +2 -0
- package/dist/tools/index.d.ts.map +1 -0
- package/dist/tools/index.js +2 -0
- package/dist/tools/index.js.map +1 -0
- package/dist/types.d.ts +288 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +8 -0
- package/dist/types.js.map +1 -0
- package/dist/workspaces.d.ts +142 -0
- package/dist/workspaces.d.ts.map +1 -0
- package/dist/workspaces.js +515 -0
- package/dist/workspaces.js.map +1 -0
- 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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"}
|
package/dist/profiles.js
ADDED
|
@@ -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"}
|