agent-life-bridge 0.1.1

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 (195) hide show
  1. package/.env.example +20 -0
  2. package/LICENSE +21 -0
  3. package/README.md +350 -0
  4. package/bin/agent-life-bridge.mjs +13 -0
  5. package/config.example.json +130 -0
  6. package/config.multi-agent.example.json +88 -0
  7. package/dist/agents/agent-life-session-map-store.d.ts +21 -0
  8. package/dist/agents/agent-life-session-map-store.d.ts.map +1 -0
  9. package/dist/agents/agent-life-session-map-store.js +78 -0
  10. package/dist/agents/agent-life-session-map-store.js.map +1 -0
  11. package/dist/agents/agent-resolver.d.ts +12 -0
  12. package/dist/agents/agent-resolver.d.ts.map +1 -0
  13. package/dist/agents/agent-resolver.js +114 -0
  14. package/dist/agents/agent-resolver.js.map +1 -0
  15. package/dist/agents/agent-router.d.ts +8 -0
  16. package/dist/agents/agent-router.d.ts.map +1 -0
  17. package/dist/agents/agent-router.js +72 -0
  18. package/dist/agents/agent-router.js.map +1 -0
  19. package/dist/agents/cli-backends.d.ts +25 -0
  20. package/dist/agents/cli-backends.d.ts.map +1 -0
  21. package/dist/agents/cli-backends.js +252 -0
  22. package/dist/agents/cli-backends.js.map +1 -0
  23. package/dist/agents/cli-output.d.ts +43 -0
  24. package/dist/agents/cli-output.d.ts.map +1 -0
  25. package/dist/agents/cli-output.js +352 -0
  26. package/dist/agents/cli-output.js.map +1 -0
  27. package/dist/agents/cli-runner.d.ts +32 -0
  28. package/dist/agents/cli-runner.d.ts.map +1 -0
  29. package/dist/agents/cli-runner.js +861 -0
  30. package/dist/agents/cli-runner.js.map +1 -0
  31. package/dist/agents/cli-session-store.d.ts +53 -0
  32. package/dist/agents/cli-session-store.d.ts.map +1 -0
  33. package/dist/agents/cli-session-store.js +263 -0
  34. package/dist/agents/cli-session-store.js.map +1 -0
  35. package/dist/agents/codex-app-server-runtime.d.ts +80 -0
  36. package/dist/agents/codex-app-server-runtime.d.ts.map +1 -0
  37. package/dist/agents/codex-app-server-runtime.js +1049 -0
  38. package/dist/agents/codex-app-server-runtime.js.map +1 -0
  39. package/dist/agents/fch-runtime-context.d.ts +28 -0
  40. package/dist/agents/fch-runtime-context.d.ts.map +1 -0
  41. package/dist/agents/fch-runtime-context.js +65 -0
  42. package/dist/agents/fch-runtime-context.js.map +1 -0
  43. package/dist/agents/model-selection.d.ts +28 -0
  44. package/dist/agents/model-selection.d.ts.map +1 -0
  45. package/dist/agents/model-selection.js +40 -0
  46. package/dist/agents/model-selection.js.map +1 -0
  47. package/dist/agents/models-config.d.ts +28 -0
  48. package/dist/agents/models-config.d.ts.map +1 -0
  49. package/dist/agents/models-config.js +43 -0
  50. package/dist/agents/models-config.js.map +1 -0
  51. package/dist/channels/agent-life.d.ts +9 -0
  52. package/dist/channels/agent-life.d.ts.map +1 -0
  53. package/dist/channels/agent-life.js +407 -0
  54. package/dist/channels/agent-life.js.map +1 -0
  55. package/dist/channels/command-gating.d.ts +20 -0
  56. package/dist/channels/command-gating.d.ts.map +1 -0
  57. package/dist/channels/command-gating.js +43 -0
  58. package/dist/channels/command-gating.js.map +1 -0
  59. package/dist/channels/draft-stream-controls.d.ts +21 -0
  60. package/dist/channels/draft-stream-controls.d.ts.map +1 -0
  61. package/dist/channels/draft-stream-controls.js +43 -0
  62. package/dist/channels/draft-stream-controls.js.map +1 -0
  63. package/dist/channels/draft-stream-loop.d.ts +31 -0
  64. package/dist/channels/draft-stream-loop.d.ts.map +1 -0
  65. package/dist/channels/draft-stream-loop.js +60 -0
  66. package/dist/channels/draft-stream-loop.js.map +1 -0
  67. package/dist/channels/mention-gating.d.ts +18 -0
  68. package/dist/channels/mention-gating.d.ts.map +1 -0
  69. package/dist/channels/mention-gating.js +20 -0
  70. package/dist/channels/mention-gating.js.map +1 -0
  71. package/dist/channels/registry.d.ts +5 -0
  72. package/dist/channels/registry.d.ts.map +1 -0
  73. package/dist/channels/registry.js +14 -0
  74. package/dist/channels/registry.js.map +1 -0
  75. package/dist/channels/run-state-machine.d.ts +21 -0
  76. package/dist/channels/run-state-machine.d.ts.map +1 -0
  77. package/dist/channels/run-state-machine.js +41 -0
  78. package/dist/channels/run-state-machine.js.map +1 -0
  79. package/dist/channels/session-envelope.d.ts +5 -0
  80. package/dist/channels/session-envelope.d.ts.map +1 -0
  81. package/dist/channels/session-envelope.js +16 -0
  82. package/dist/channels/session-envelope.js.map +1 -0
  83. package/dist/channels/session-id.d.ts +3 -0
  84. package/dist/channels/session-id.d.ts.map +1 -0
  85. package/dist/channels/session-id.js +11 -0
  86. package/dist/channels/session-id.js.map +1 -0
  87. package/dist/channels/session.d.ts +18 -0
  88. package/dist/channels/session.d.ts.map +1 -0
  89. package/dist/channels/session.js +35 -0
  90. package/dist/channels/session.js.map +1 -0
  91. package/dist/channels/typing-lifecycle.d.ts +16 -0
  92. package/dist/channels/typing-lifecycle.d.ts.map +1 -0
  93. package/dist/channels/typing-lifecycle.js +31 -0
  94. package/dist/channels/typing-lifecycle.js.map +1 -0
  95. package/dist/cli/cmd-add-agent.d.ts +19 -0
  96. package/dist/cli/cmd-add-agent.d.ts.map +1 -0
  97. package/dist/cli/cmd-add-agent.js +362 -0
  98. package/dist/cli/cmd-add-agent.js.map +1 -0
  99. package/dist/cli/cmd-config.d.ts +3 -0
  100. package/dist/cli/cmd-config.d.ts.map +1 -0
  101. package/dist/cli/cmd-config.js +16 -0
  102. package/dist/cli/cmd-config.js.map +1 -0
  103. package/dist/cli/cmd-doctor.d.ts +3 -0
  104. package/dist/cli/cmd-doctor.d.ts.map +1 -0
  105. package/dist/cli/cmd-doctor.js +127 -0
  106. package/dist/cli/cmd-doctor.js.map +1 -0
  107. package/dist/cli/cmd-logs.d.ts +3 -0
  108. package/dist/cli/cmd-logs.d.ts.map +1 -0
  109. package/dist/cli/cmd-logs.js +26 -0
  110. package/dist/cli/cmd-logs.js.map +1 -0
  111. package/dist/cli/cmd-onboard.d.ts +5 -0
  112. package/dist/cli/cmd-onboard.d.ts.map +1 -0
  113. package/dist/cli/cmd-onboard.js +53 -0
  114. package/dist/cli/cmd-onboard.js.map +1 -0
  115. package/dist/cli/cmd-restart.d.ts +3 -0
  116. package/dist/cli/cmd-restart.d.ts.map +1 -0
  117. package/dist/cli/cmd-restart.js +22 -0
  118. package/dist/cli/cmd-restart.js.map +1 -0
  119. package/dist/cli/cmd-start.d.ts +19 -0
  120. package/dist/cli/cmd-start.d.ts.map +1 -0
  121. package/dist/cli/cmd-start.js +783 -0
  122. package/dist/cli/cmd-start.js.map +1 -0
  123. package/dist/cli/cmd-status.d.ts +3 -0
  124. package/dist/cli/cmd-status.d.ts.map +1 -0
  125. package/dist/cli/cmd-status.js +16 -0
  126. package/dist/cli/cmd-status.js.map +1 -0
  127. package/dist/cli/cmd-stop.d.ts +9 -0
  128. package/dist/cli/cmd-stop.d.ts.map +1 -0
  129. package/dist/cli/cmd-stop.js +59 -0
  130. package/dist/cli/cmd-stop.js.map +1 -0
  131. package/dist/cli/cmd-update.d.ts +3 -0
  132. package/dist/cli/cmd-update.d.ts.map +1 -0
  133. package/dist/cli/cmd-update.js +127 -0
  134. package/dist/cli/cmd-update.js.map +1 -0
  135. package/dist/cli/cmd-version.d.ts +4 -0
  136. package/dist/cli/cmd-version.d.ts.map +1 -0
  137. package/dist/cli/cmd-version.js +12 -0
  138. package/dist/cli/cmd-version.js.map +1 -0
  139. package/dist/cli/pid-file.d.ts +23 -0
  140. package/dist/cli/pid-file.d.ts.map +1 -0
  141. package/dist/cli/pid-file.js +136 -0
  142. package/dist/cli/pid-file.js.map +1 -0
  143. package/dist/cli/run-main.d.ts +16 -0
  144. package/dist/cli/run-main.d.ts.map +1 -0
  145. package/dist/cli/run-main.js +114 -0
  146. package/dist/cli/run-main.js.map +1 -0
  147. package/dist/cli/update-check.d.ts +15 -0
  148. package/dist/cli/update-check.d.ts.map +1 -0
  149. package/dist/cli/update-check.js +187 -0
  150. package/dist/cli/update-check.js.map +1 -0
  151. package/dist/commands/prefix-router.d.ts +17 -0
  152. package/dist/commands/prefix-router.d.ts.map +1 -0
  153. package/dist/commands/prefix-router.js +79 -0
  154. package/dist/commands/prefix-router.js.map +1 -0
  155. package/dist/config/agent-dirs.d.ts +24 -0
  156. package/dist/config/agent-dirs.d.ts.map +1 -0
  157. package/dist/config/agent-dirs.js +71 -0
  158. package/dist/config/agent-dirs.js.map +1 -0
  159. package/dist/config/config.d.ts +4 -0
  160. package/dist/config/config.d.ts.map +1 -0
  161. package/dist/config/config.js +42 -0
  162. package/dist/config/config.js.map +1 -0
  163. package/dist/config/default-config.d.ts +9 -0
  164. package/dist/config/default-config.d.ts.map +1 -0
  165. package/dist/config/default-config.js +94 -0
  166. package/dist/config/default-config.js.map +1 -0
  167. package/dist/config/env-vars.d.ts +15 -0
  168. package/dist/config/env-vars.d.ts.map +1 -0
  169. package/dist/config/env-vars.js +16 -0
  170. package/dist/config/env-vars.js.map +1 -0
  171. package/dist/config/merge-config.d.ts +7 -0
  172. package/dist/config/merge-config.d.ts.map +1 -0
  173. package/dist/config/merge-config.js +45 -0
  174. package/dist/config/merge-config.js.map +1 -0
  175. package/dist/config/paths.d.ts +25 -0
  176. package/dist/config/paths.d.ts.map +1 -0
  177. package/dist/config/paths.js +31 -0
  178. package/dist/config/paths.js.map +1 -0
  179. package/dist/config/zod-schema.d.ts +3114 -0
  180. package/dist/config/zod-schema.d.ts.map +1 -0
  181. package/dist/config/zod-schema.js +217 -0
  182. package/dist/config/zod-schema.js.map +1 -0
  183. package/dist/entry.d.ts +3 -0
  184. package/dist/entry.d.ts.map +1 -0
  185. package/dist/entry.js +70 -0
  186. package/dist/entry.js.map +1 -0
  187. package/dist/logger.d.ts +5 -0
  188. package/dist/logger.d.ts.map +1 -0
  189. package/dist/logger.js +42 -0
  190. package/dist/logger.js.map +1 -0
  191. package/dist/types/index.d.ts +215 -0
  192. package/dist/types/index.d.ts.map +1 -0
  193. package/dist/types/index.js +2 -0
  194. package/dist/types/index.js.map +1 -0
  195. package/package.json +62 -0
@@ -0,0 +1,114 @@
1
+ import { parseArgs } from 'node:util';
2
+ export function parseCliArgs(argv = process.argv.slice(2)) {
3
+ const validCommands = new Set([
4
+ 'start', 'stop', 'status', 'onboard', 'add-agent', 'restart', 'doctor', 'logs', 'config', 'update', 'version', 'help',
5
+ ]);
6
+ const normalizedArgv = argv.map(arg => (arg === '--verson' ? '--version' : arg));
7
+ const { values, positionals, tokens } = parseArgs({
8
+ args: normalizedArgv,
9
+ options: {
10
+ config: { type: 'string', short: 'c' },
11
+ daemon: { type: 'boolean', short: 'd', default: false },
12
+ help: { type: 'boolean', short: 'h', default: false },
13
+ version: { type: 'boolean', short: 'v', default: false },
14
+ 'account-id': { type: 'string' },
15
+ 'create-account': { type: 'string' },
16
+ 'account-gateway-url': { type: 'string' },
17
+ 'account-bot-token': { type: 'string' },
18
+ },
19
+ allowPositionals: true,
20
+ strict: false,
21
+ tokens: true,
22
+ });
23
+ const knownOptions = new Set([
24
+ 'config',
25
+ 'daemon',
26
+ 'help',
27
+ 'version',
28
+ 'account-id',
29
+ 'create-account',
30
+ 'account-gateway-url',
31
+ 'account-bot-token',
32
+ ]);
33
+ const unknownOptions = new Set();
34
+ for (const token of tokens) {
35
+ if (token.kind !== 'option')
36
+ continue;
37
+ if (knownOptions.has(token.name))
38
+ continue;
39
+ unknownOptions.add(token.rawName);
40
+ }
41
+ if (unknownOptions.size > 0) {
42
+ throw new Error(`Unknown option(s): ${Array.from(unknownOptions).join(', ')}\nRun \`alb help\` for usage.`);
43
+ }
44
+ const first = positionals[0];
45
+ let command = 'start';
46
+ let rest = positionals;
47
+ if (first && validCommands.has(first)) {
48
+ command = first;
49
+ rest = positionals.slice(1);
50
+ }
51
+ if (values.help) {
52
+ command = 'help';
53
+ }
54
+ else if (values.version) {
55
+ command = 'version';
56
+ }
57
+ return {
58
+ command,
59
+ config: values.config ?? (rest[0] && !validCommands.has(rest[0]) ? rest[0] : undefined),
60
+ daemon: Boolean(values.daemon),
61
+ help: Boolean(values.help),
62
+ version: Boolean(values.version),
63
+ accountId: values['account-id'],
64
+ createAccount: values['create-account'],
65
+ accountGatewayUrl: values['account-gateway-url'],
66
+ accountBotToken: values['account-bot-token'],
67
+ rest,
68
+ };
69
+ }
70
+ export function printHelp() {
71
+ console.log(`
72
+ alb - Local Agent Gateway for agent-life
73
+
74
+ Usage:
75
+ alb <command> [options]
76
+
77
+ Commands:
78
+ start Start the gateway (foreground by default)
79
+ stop Stop a running daemon
80
+ restart Restart the gateway
81
+ status Show connection and runtime status
82
+ onboard Interactive setup wizard
83
+ add-agent Add an agent to the current config
84
+ doctor Diagnose environment (network, CLI tools, API keys)
85
+ logs View recent logs
86
+ config Show current configuration
87
+ update Update the installed CLI
88
+ version Show package version
89
+ help Show this help
90
+
91
+ Options:
92
+ -c, --config <path> Path to config.json
93
+ -d, --daemon Run as background daemon (with 'start')
94
+ -h, --help Show this help
95
+ -v, --version Show package version
96
+ --account-id <id> Bind add-agent to an existing agent-life account
97
+ --create-account <id> Create a new agent-life account while adding an agent
98
+ --account-gateway-url <url> Gateway URL for --create-account
99
+ --account-bot-token <token> Bot token for --create-account
100
+
101
+ Examples:
102
+ alb start # Start in foreground
103
+ alb start --daemon # Start as daemon
104
+ alb start -c ./my-config.json # Start with custom config
105
+ alb restart --daemon # Restart in daemon mode
106
+ alb onboard # Interactive setup
107
+ alb add-agent # Add a named agent
108
+ alb update # Update the installed CLI
109
+ alb add-agent --account-id office-bot
110
+ alb add-agent --create-account office-bot --account-gateway-url https://agent-life.example.com --account-bot-token bot_xxx
111
+ alb doctor # Check environment
112
+ `.trim());
113
+ }
114
+ //# sourceMappingURL=run-main.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"run-main.js","sourceRoot":"","sources":["../../src/cli/run-main.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,15 @@
1
+ import type { CliArgs } from './run-main.js';
2
+ import type { Logger } from '../types/index.js';
3
+ type UpdateCheckOptions = {
4
+ env?: NodeJS.ProcessEnv;
5
+ isInteractive?: boolean;
6
+ logger?: Logger;
7
+ };
8
+ export declare function shouldCheckForUpdates(args: CliArgs, options?: UpdateCheckOptions): boolean;
9
+ export declare function compareVersions(left: string, right: string): number;
10
+ export declare function shouldNotifyAboutUpdate(currentVersion: string, latestVersion: string | null | undefined, notifiedVersion?: string | null): boolean;
11
+ export declare function maybeNotifyAboutUpdate(args: CliArgs): void;
12
+ export declare function maybeNotifyAboutUpdateWithLogger(args: CliArgs, logger: Logger): void;
13
+ export declare function fetchLatestVersionFromNpm(): Promise<string>;
14
+ export {};
15
+ //# sourceMappingURL=update-check.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"update-check.d.ts","sourceRoot":"","sources":["../../src/cli/update-check.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,eAAe,CAAA;AAG5C,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAA;AAY/C,KAAK,kBAAkB,GAAG;IACxB,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,CAAA;IACvB,aAAa,CAAC,EAAE,OAAO,CAAA;IACvB,MAAM,CAAC,EAAE,MAAM,CAAA;CAChB,CAAA;AAED,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,OAAO,EAAE,OAAO,GAAE,kBAAuB,GAAG,OAAO,CAQ9F;AAED,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAanE;AAED,wBAAgB,uBAAuB,CACrC,cAAc,EAAE,MAAM,EACtB,aAAa,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,EACxC,eAAe,CAAC,EAAE,MAAM,GAAG,IAAI,GAC9B,OAAO,CAIT;AAED,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,OAAO,GAAG,IAAI,CAM1D;AAED,wBAAgB,gCAAgC,CAAC,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI,CAMpF;AAED,wBAAsB,yBAAyB,IAAI,OAAO,CAAC,MAAM,CAAC,CA6CjE"}
@@ -0,0 +1,187 @@
1
+ import { existsSync, mkdirSync, readFileSync, writeFileSync } from 'node:fs';
2
+ import { spawn } from 'node:child_process';
3
+ import { stdin, stdout } from 'node:process';
4
+ import { join } from 'node:path';
5
+ import { DATA_DIR } from '../config/paths.js';
6
+ import { getPackageVersion } from './cmd-version.js';
7
+ const UPDATE_CHECK_STATE_PATH = join(DATA_DIR, 'update-check.json');
8
+ const UPDATE_CHECK_TTL_MS = 12 * 60 * 60 * 1000;
9
+ const UPDATE_PACKAGE_NAME = 'agent-life-bridge';
10
+ export function shouldCheckForUpdates(args, options = {}) {
11
+ const env = options.env ?? process.env;
12
+ const isInteractive = options.isInteractive ?? (stdin.isTTY && stdout.isTTY);
13
+ const isDaemon = env.AGENT_LIFE_BRIDGE_DAEMON === '1';
14
+ if (env.AGENT_LIFE_BRIDGE_SKIP_UPDATE_CHECK === '1')
15
+ return false;
16
+ if (!isInteractive && !isDaemon)
17
+ return false;
18
+ return args.command === 'start' || args.command === 'restart';
19
+ }
20
+ export function compareVersions(left, right) {
21
+ const leftParts = normalizeVersion(left);
22
+ const rightParts = normalizeVersion(right);
23
+ const length = Math.max(leftParts.length, rightParts.length);
24
+ for (let index = 0; index < length; index += 1) {
25
+ const leftPart = leftParts[index] ?? 0;
26
+ const rightPart = rightParts[index] ?? 0;
27
+ if (leftPart > rightPart)
28
+ return 1;
29
+ if (leftPart < rightPart)
30
+ return -1;
31
+ }
32
+ return 0;
33
+ }
34
+ export function shouldNotifyAboutUpdate(currentVersion, latestVersion, notifiedVersion) {
35
+ if (!latestVersion)
36
+ return false;
37
+ if (compareVersions(latestVersion, currentVersion) <= 0)
38
+ return false;
39
+ return latestVersion !== notifiedVersion;
40
+ }
41
+ export function maybeNotifyAboutUpdate(args) {
42
+ if (!shouldCheckForUpdates(args)) {
43
+ return;
44
+ }
45
+ void runUpdateCheckNotice().catch(() => undefined);
46
+ }
47
+ export function maybeNotifyAboutUpdateWithLogger(args, logger) {
48
+ if (!shouldCheckForUpdates(args, { logger })) {
49
+ return;
50
+ }
51
+ void runUpdateCheckNotice({ logger }).catch(() => undefined);
52
+ }
53
+ export async function fetchLatestVersionFromNpm() {
54
+ const npmCommand = process.platform === 'win32' ? 'npm.cmd' : 'npm';
55
+ return await new Promise((resolve, reject) => {
56
+ let stdoutBuffer = '';
57
+ let stderrBuffer = '';
58
+ const child = spawn(npmCommand, ['view', UPDATE_PACKAGE_NAME, 'version', '--json'], {
59
+ stdio: ['ignore', 'pipe', 'pipe'],
60
+ windowsHide: true,
61
+ });
62
+ const timeout = setTimeout(() => {
63
+ child.kill();
64
+ reject(new Error('Timed out while checking npm registry'));
65
+ }, 5000);
66
+ child.stdout.on('data', (chunk) => {
67
+ stdoutBuffer += chunk.toString();
68
+ });
69
+ child.stderr.on('data', (chunk) => {
70
+ stderrBuffer += chunk.toString();
71
+ });
72
+ child.on('error', (error) => {
73
+ clearTimeout(timeout);
74
+ reject(error);
75
+ });
76
+ child.on('exit', (code) => {
77
+ clearTimeout(timeout);
78
+ if (code !== 0) {
79
+ reject(new Error(stderrBuffer.trim() || `npm exited with code ${code}`));
80
+ return;
81
+ }
82
+ const version = parseNpmVersion(stdoutBuffer);
83
+ if (!version) {
84
+ reject(new Error('Unable to parse npm version output'));
85
+ return;
86
+ }
87
+ resolve(version);
88
+ });
89
+ });
90
+ }
91
+ async function runUpdateCheckNotice(options = {}) {
92
+ const currentVersion = getPackageVersion();
93
+ const state = readUpdateCheckState();
94
+ const latestVersion = await resolveLatestVersion(currentVersion, state);
95
+ if (latestVersion && shouldNotifyAboutUpdate(currentVersion, latestVersion, state.notifiedVersion)) {
96
+ emitUpdateNotice(currentVersion, latestVersion, options);
97
+ writeUpdateCheckState({
98
+ lastCheckedAt: Date.now(),
99
+ latestVersion,
100
+ notifiedVersion: latestVersion,
101
+ });
102
+ return;
103
+ }
104
+ if (!latestVersion || compareVersions(latestVersion, currentVersion) <= 0) {
105
+ writeUpdateCheckState({
106
+ lastCheckedAt: Date.now(),
107
+ latestVersion: latestVersion ?? currentVersion,
108
+ notifiedVersion: undefined,
109
+ });
110
+ }
111
+ }
112
+ function emitUpdateNotice(currentVersion, latestVersion, options) {
113
+ const env = options.env ?? process.env;
114
+ const isInteractive = options.isInteractive ?? (stdin.isTTY && stdout.isTTY);
115
+ const isDaemon = env.AGENT_LIFE_BRIDGE_DAEMON === '1';
116
+ const message = `New ${UPDATE_PACKAGE_NAME} version ${latestVersion} is available (current: ${currentVersion}). Run \`alb update\` to upgrade.`;
117
+ if (isDaemon && options.logger) {
118
+ options.logger.warn({ currentVersion, latestVersion }, message);
119
+ return;
120
+ }
121
+ if (isInteractive) {
122
+ console.log(`\n${message}\n`);
123
+ }
124
+ }
125
+ async function resolveLatestVersion(currentVersion, state) {
126
+ const now = Date.now();
127
+ const cachedLatest = state.latestVersion ?? null;
128
+ const isStale = !state.lastCheckedAt || now - state.lastCheckedAt >= UPDATE_CHECK_TTL_MS;
129
+ if (!isStale && cachedLatest) {
130
+ return cachedLatest;
131
+ }
132
+ try {
133
+ const latestVersion = await fetchLatestVersionFromNpm();
134
+ writeUpdateCheckState({
135
+ ...state,
136
+ lastCheckedAt: now,
137
+ latestVersion,
138
+ notifiedVersion: latestVersion === state.notifiedVersion ? state.notifiedVersion : undefined,
139
+ });
140
+ return latestVersion;
141
+ }
142
+ catch {
143
+ writeUpdateCheckState({
144
+ ...state,
145
+ lastCheckedAt: now,
146
+ latestVersion: cachedLatest ?? currentVersion,
147
+ });
148
+ return cachedLatest;
149
+ }
150
+ }
151
+ function parseNpmVersion(raw) {
152
+ const trimmed = raw.trim();
153
+ if (!trimmed)
154
+ return null;
155
+ try {
156
+ const parsed = JSON.parse(trimmed);
157
+ return typeof parsed === 'string' ? parsed : null;
158
+ }
159
+ catch {
160
+ return trimmed;
161
+ }
162
+ }
163
+ function readUpdateCheckState() {
164
+ if (!existsSync(UPDATE_CHECK_STATE_PATH)) {
165
+ return {};
166
+ }
167
+ try {
168
+ return JSON.parse(readFileSync(UPDATE_CHECK_STATE_PATH, 'utf-8'));
169
+ }
170
+ catch {
171
+ return {};
172
+ }
173
+ }
174
+ function writeUpdateCheckState(state) {
175
+ mkdirSync(DATA_DIR, { recursive: true });
176
+ writeFileSync(UPDATE_CHECK_STATE_PATH, `${JSON.stringify(state, null, 2)}\n`, 'utf-8');
177
+ }
178
+ function normalizeVersion(version) {
179
+ return version
180
+ .trim()
181
+ .replace(/^v/i, '')
182
+ .split('-', 1)[0]
183
+ .split('.')
184
+ .map(part => Number.parseInt(part, 10))
185
+ .map(part => (Number.isFinite(part) ? part : 0));
186
+ }
187
+ //# sourceMappingURL=update-check.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"update-check.js","sourceRoot":"","sources":["../../src/cli/update-check.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,17 @@
1
+ export type RoutedCommand = {
2
+ kind: 'plain';
3
+ raw: string;
4
+ } | {
5
+ kind: 'bridge';
6
+ command: string;
7
+ argsText: string;
8
+ isLegacyAlias: boolean;
9
+ canonicalText: string;
10
+ } | {
11
+ kind: 'cli';
12
+ command: string;
13
+ argsText: string;
14
+ forwardedText: string;
15
+ };
16
+ export declare function routeCommandText(text: string): RoutedCommand;
17
+ //# sourceMappingURL=prefix-router.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prefix-router.d.ts","sourceRoot":"","sources":["../../src/commands/prefix-router.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,aAAa,GACrB;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,GAAG,EAAE,MAAM,CAAA;CAAE,GAC9B;IAAE,IAAI,EAAE,QAAQ,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,aAAa,EAAE,OAAO,CAAC;IAAC,aAAa,EAAE,MAAM,CAAA;CAAE,GACpG;IAAE,IAAI,EAAE,KAAK,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,aAAa,EAAE,MAAM,CAAA;CAAE,CAAA;AAgD7E,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,aAAa,CAgD5D"}
@@ -0,0 +1,79 @@
1
+ const CLI_COMMANDS_ALLOW_ARGS = new Set([
2
+ 'commit',
3
+ ]);
4
+ function tokenizeArgs(argsText) {
5
+ return argsText.match(/"[^"\\]*(?:\\.[^"\\]*)*"|'[^'\\]*(?:\\.[^'\\]*)*'|\S+/g) ?? [];
6
+ }
7
+ function sanitizeCliArgs(command, argsText) {
8
+ if (!argsText.trim()) {
9
+ return '';
10
+ }
11
+ if (!CLI_COMMANDS_ALLOW_ARGS.has(command)) {
12
+ return '';
13
+ }
14
+ const tokens = tokenizeArgs(argsText);
15
+ const keptTokens = [];
16
+ let expectingOptionValue = false;
17
+ for (const token of tokens) {
18
+ if (token.startsWith('@')) {
19
+ break;
20
+ }
21
+ if (expectingOptionValue) {
22
+ keptTokens.push(token);
23
+ expectingOptionValue = false;
24
+ continue;
25
+ }
26
+ if (!token.startsWith('-')) {
27
+ break;
28
+ }
29
+ keptTokens.push(token);
30
+ if (!token.includes('=')) {
31
+ expectingOptionValue = true;
32
+ }
33
+ }
34
+ return keptTokens.join(' ');
35
+ }
36
+ export function routeCommandText(text) {
37
+ const trimmed = text.trim();
38
+ if (!trimmed.startsWith('/')) {
39
+ return { kind: 'plain', raw: text };
40
+ }
41
+ const match = /^\/(\S+)(?:\s+([\s\S]*))?$/.exec(trimmed);
42
+ if (!match) {
43
+ return { kind: 'plain', raw: text };
44
+ }
45
+ const token = match[1].trim();
46
+ const normalizedToken = token.toLowerCase();
47
+ const argsText = match[2]?.trim() ?? '';
48
+ if (normalizedToken === 'new') {
49
+ return {
50
+ kind: 'bridge',
51
+ command: 'new',
52
+ argsText,
53
+ isLegacyAlias: true,
54
+ canonicalText: argsText ? `/br:new ${argsText}` : '/br:new',
55
+ };
56
+ }
57
+ if (normalizedToken.startsWith('br:')) {
58
+ const command = normalizedToken.slice(3);
59
+ return {
60
+ kind: 'bridge',
61
+ command,
62
+ argsText,
63
+ isLegacyAlias: false,
64
+ canonicalText: argsText ? `/br:${command} ${argsText}` : `/br:${command}`,
65
+ };
66
+ }
67
+ if (normalizedToken.startsWith('cli:')) {
68
+ const command = normalizedToken.slice(4);
69
+ const sanitizedArgsText = sanitizeCliArgs(command, argsText);
70
+ return {
71
+ kind: 'cli',
72
+ command,
73
+ argsText: sanitizedArgsText,
74
+ forwardedText: sanitizedArgsText ? `/${command} ${sanitizedArgsText}` : `/${command}`,
75
+ };
76
+ }
77
+ return { kind: 'plain', raw: text };
78
+ }
79
+ //# sourceMappingURL=prefix-router.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prefix-router.js","sourceRoot":"","sources":["../../src/commands/prefix-router.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,24 @@
1
+ /**
2
+ * Ensure data directories exist.
3
+ *
4
+ * ~/.agent-life-bridge/
5
+ * ├── data/
6
+ * │ ├── sessions/
7
+ * │ ├── files/
8
+ * │ └── logs/
9
+ * ├── agents/
10
+ * │ ├── {agentId}/
11
+ * │ │ └── cli-sessions.json
12
+ * │ └── ...
13
+ * └── skills/
14
+ */
15
+ export declare function ensureDataDirs(tempDir?: string): void;
16
+ /**
17
+ * Ensure per-agent state directories exist.
18
+ * Validates that no two agents share the same state directory.
19
+ *
20
+ * On first run, migrates the legacy
21
+ * ~/.agent-life-bridge/data/sessions/cli-sessions.json → agents/{defaultAgentId}/cli-sessions.json
22
+ */
23
+ export declare function ensureAgentStateDirs(agentIds: string[], defaultAgentId: string): void;
24
+ //# sourceMappingURL=agent-dirs.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agent-dirs.d.ts","sourceRoot":"","sources":["../../src/config/agent-dirs.ts"],"names":[],"mappings":"AAaA;;;;;;;;;;;;;GAaG;AACH,wBAAgB,cAAc,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAgBrD;AAED;;;;;;GAMG;AACH,wBAAgB,oBAAoB,CAAC,QAAQ,EAAE,MAAM,EAAE,EAAE,cAAc,EAAE,MAAM,GAAG,IAAI,CAoBrF"}
@@ -0,0 +1,71 @@
1
+ import { mkdirSync, existsSync, copyFileSync } from 'node:fs';
2
+ import { resolve } from 'node:path';
3
+ import { DATA_DIR, DATA_SESSIONS_DIR, DATA_CLI_SESSION_STORE_PATH, DATA_FILES_DIR, DATA_LOGS_DIR, DATA_SKILLS_DIR, agentStatePath, agentSessionStorePath, } from './paths.js';
4
+ /**
5
+ * Ensure data directories exist.
6
+ *
7
+ * ~/.agent-life-bridge/
8
+ * ├── data/
9
+ * │ ├── sessions/
10
+ * │ ├── files/
11
+ * │ └── logs/
12
+ * ├── agents/
13
+ * │ ├── {agentId}/
14
+ * │ │ └── cli-sessions.json
15
+ * │ └── ...
16
+ * └── skills/
17
+ */
18
+ export function ensureDataDirs(tempDir) {
19
+ const dirs = [
20
+ DATA_DIR,
21
+ DATA_SESSIONS_DIR,
22
+ DATA_FILES_DIR,
23
+ DATA_LOGS_DIR,
24
+ DATA_SKILLS_DIR,
25
+ tempDir,
26
+ ].filter(Boolean);
27
+ for (const dir of dirs) {
28
+ const resolved = resolve(dir);
29
+ if (!existsSync(resolved)) {
30
+ mkdirSync(resolved, { recursive: true });
31
+ }
32
+ }
33
+ }
34
+ /**
35
+ * Ensure per-agent state directories exist.
36
+ * Validates that no two agents share the same state directory.
37
+ *
38
+ * On first run, migrates the legacy
39
+ * ~/.agent-life-bridge/data/sessions/cli-sessions.json → agents/{defaultAgentId}/cli-sessions.json
40
+ */
41
+ export function ensureAgentStateDirs(agentIds, defaultAgentId) {
42
+ const seen = new Map();
43
+ for (const agentId of agentIds) {
44
+ const dir = resolve(agentStatePath(agentId));
45
+ const existing = seen.get(dir);
46
+ if (existing) {
47
+ throw new Error(`Agent state directory conflict: agents "${existing}" and "${agentId}" resolve to the same path: ${dir}`);
48
+ }
49
+ seen.set(dir, agentId);
50
+ if (!existsSync(dir)) {
51
+ mkdirSync(dir, { recursive: true });
52
+ }
53
+ }
54
+ // Migrate legacy session store to the default agent's directory
55
+ migrateLegacySessionStore(defaultAgentId);
56
+ }
57
+ /**
58
+ * If the legacy cli-sessions.json exists and the default agent's store doesn't,
59
+ * copy the legacy file into the default agent's state directory.
60
+ */
61
+ function migrateLegacySessionStore(defaultAgentId) {
62
+ const legacyPath = resolve(DATA_CLI_SESSION_STORE_PATH);
63
+ if (!existsSync(legacyPath))
64
+ return;
65
+ const targetPath = resolve(agentSessionStorePath(defaultAgentId));
66
+ if (existsSync(targetPath))
67
+ return;
68
+ // Copy (not move) — keep legacy file as backup until confirmed working
69
+ copyFileSync(legacyPath, targetPath);
70
+ }
71
+ //# sourceMappingURL=agent-dirs.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agent-dirs.js","sourceRoot":"","sources":["../../src/config/agent-dirs.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,UAAU,EAAc,YAAY,EAAE,MAAM,SAAS,CAAA;AACzE,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AACnC,OAAO,EACL,QAAQ,EACR,iBAAiB,EACjB,2BAA2B,EAC3B,cAAc,EACd,aAAa,EACb,eAAe,EACf,cAAc,EACd,qBAAqB,GACtB,MAAM,YAAY,CAAA;AAEnB;;;;;;;;;;;;;GAaG;AACH,MAAM,UAAU,cAAc,CAAC,OAAgB;IAC7C,MAAM,IAAI,GAAG;QACX,QAAQ;QACR,iBAAiB;QACjB,cAAc;QACd,aAAa;QACb,eAAe;QACf,OAAO;KACR,CAAC,MAAM,CAAC,OAAO,CAAa,CAAA;IAE7B,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;QACvB,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,CAAA;QAC7B,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC1B,SAAS,CAAC,QAAQ,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAA;QAC1C,CAAC;IACH,CAAC;AACH,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,oBAAoB,CAAC,QAAkB,EAAE,cAAsB;IAC7E,MAAM,IAAI,GAAG,IAAI,GAAG,EAAkB,CAAA;IAEtC,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;QAC/B,MAAM,GAAG,GAAG,OAAO,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC,CAAA;QAC5C,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;QAC9B,IAAI,QAAQ,EAAE,CAAC;YACb,MAAM,IAAI,KAAK,CACb,2CAA2C,QAAQ,UAAU,OAAO,+BAA+B,GAAG,EAAE,CACzG,CAAA;QACH,CAAC;QACD,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,OAAO,CAAC,CAAA;QAEtB,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;YACrB,SAAS,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAA;QACrC,CAAC;IACH,CAAC;IAED,gEAAgE;IAChE,yBAAyB,CAAC,cAAc,CAAC,CAAA;AAC3C,CAAC;AAED;;;GAGG;AACH,SAAS,yBAAyB,CAAC,cAAsB;IACvD,MAAM,UAAU,GAAG,OAAO,CAAC,2BAA2B,CAAC,CAAA;IACvD,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC;QAAE,OAAM;IAEnC,MAAM,UAAU,GAAG,OAAO,CAAC,qBAAqB,CAAC,cAAc,CAAC,CAAC,CAAA;IACjE,IAAI,UAAU,CAAC,UAAU,CAAC;QAAE,OAAM;IAElC,uEAAuE;IACvE,YAAY,CAAC,UAAU,EAAE,UAAU,CAAC,CAAA;AACtC,CAAC"}
@@ -0,0 +1,4 @@
1
+ import { type AppConfig } from './zod-schema.js';
2
+ export declare function resolveConfigPath(configPath?: string): string | null;
3
+ export declare function loadConfig(configPath?: string): AppConfig;
4
+ //# sourceMappingURL=config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/config/config.ts"],"names":[],"mappings":"AAEA,OAAO,EAAmB,KAAK,SAAS,EAAE,MAAM,iBAAiB,CAAA;AAKjE,wBAAgB,iBAAiB,CAAC,UAAU,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAiBpE;AAED,wBAAgB,UAAU,CAAC,UAAU,CAAC,EAAE,MAAM,GAAG,SAAS,CAsBzD"}
@@ -0,0 +1,42 @@
1
+ import { readFileSync, existsSync } from 'node:fs';
2
+ import { resolve } from 'node:path';
3
+ import { AppConfigSchema } from './zod-schema.js';
4
+ import { readEnvOverrides } from './env-vars.js';
5
+ import { mergeWithEnv } from './merge-config.js';
6
+ import { DATA_CONFIG_PATH } from './paths.js';
7
+ export function resolveConfigPath(configPath) {
8
+ const env = readEnvOverrides();
9
+ const paths = [
10
+ configPath,
11
+ env.configPath,
12
+ './config.json',
13
+ DATA_CONFIG_PATH,
14
+ ].filter(Boolean);
15
+ for (const candidate of paths) {
16
+ const resolved = resolve(candidate);
17
+ if (existsSync(resolved)) {
18
+ return resolved;
19
+ }
20
+ }
21
+ return null;
22
+ }
23
+ export function loadConfig(configPath) {
24
+ const env = readEnvOverrides();
25
+ let rawConfig = {};
26
+ const resolvedConfigPath = resolveConfigPath(configPath);
27
+ if (resolvedConfigPath) {
28
+ const content = readFileSync(resolvedConfigPath, 'utf-8').replace(/^\uFEFF/, '');
29
+ rawConfig = JSON.parse(content);
30
+ }
31
+ // Merge environment variable overrides
32
+ const merged = mergeWithEnv(rawConfig, env);
33
+ const result = AppConfigSchema.safeParse(merged);
34
+ if (!result.success) {
35
+ const issues = result.error.issues
36
+ .map(i => ` ${i.path.join('.')}: ${i.message}`)
37
+ .join('\n');
38
+ throw new Error(`Configuration error:\n${issues}`);
39
+ }
40
+ return result.data;
41
+ }
42
+ //# sourceMappingURL=config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/config/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,SAAS,CAAA;AAClD,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AACnC,OAAO,EAAE,eAAe,EAAkB,MAAM,iBAAiB,CAAA;AACjE,OAAO,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAA;AAChD,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAA;AAChD,OAAO,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAA;AAE7C,MAAM,UAAU,iBAAiB,CAAC,UAAmB;IACnD,MAAM,GAAG,GAAG,gBAAgB,EAAE,CAAA;IAC9B,MAAM,KAAK,GAAG;QACZ,UAAU;QACV,GAAG,CAAC,UAAU;QACd,eAAe;QACf,gBAAgB;KACjB,CAAC,MAAM,CAAC,OAAO,CAAa,CAAA;IAE7B,KAAK,MAAM,SAAS,IAAI,KAAK,EAAE,CAAC;QAC9B,MAAM,QAAQ,GAAG,OAAO,CAAC,SAAS,CAAC,CAAA;QACnC,IAAI,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;YACzB,OAAO,QAAQ,CAAA;QACjB,CAAC;IACH,CAAC;IAED,OAAO,IAAI,CAAA;AACb,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,UAAmB;IAC5C,MAAM,GAAG,GAAG,gBAAgB,EAAE,CAAA;IAE9B,IAAI,SAAS,GAA4B,EAAE,CAAA;IAC3C,MAAM,kBAAkB,GAAG,iBAAiB,CAAC,UAAU,CAAC,CAAA;IACxD,IAAI,kBAAkB,EAAE,CAAC;QACvB,MAAM,OAAO,GAAG,YAAY,CAAC,kBAAkB,EAAE,OAAO,CAAC,CAAC,OAAO,CAAC,SAAS,EAAE,EAAE,CAAC,CAAA;QAChF,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAA4B,CAAA;IAC5D,CAAC;IAED,uCAAuC;IACvC,MAAM,MAAM,GAAG,YAAY,CAAC,SAAS,EAAE,GAAG,CAAC,CAAA;IAE3C,MAAM,MAAM,GAAG,eAAe,CAAC,SAAS,CAAC,MAAM,CAAC,CAAA;IAChD,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;QACpB,MAAM,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,MAAM;aAC/B,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,OAAO,EAAE,CAAC;aAC/C,IAAI,CAAC,IAAI,CAAC,CAAA;QACb,MAAM,IAAI,KAAK,CAAC,yBAAyB,MAAM,EAAE,CAAC,CAAA;IACpD,CAAC;IAED,OAAO,MAAM,CAAC,IAAI,CAAA;AACpB,CAAC"}
@@ -0,0 +1,9 @@
1
+ import { type AppConfig } from './zod-schema.js';
2
+ export declare const ONBOARD_MODEL_CHOICES: readonly ["claude-cli/opus-4.6", "codex-cli/gpt-5.4", "qwen-cli/qwen3-coder-plus", "anthropic/claude-sonnet-4-6"];
3
+ export interface CreateDefaultConfigParams {
4
+ gatewayUrl: string;
5
+ botToken: string;
6
+ selectedModel: string;
7
+ }
8
+ export declare function createDefaultConfig({ gatewayUrl, botToken, selectedModel, }: CreateDefaultConfigParams): AppConfig;
9
+ //# sourceMappingURL=default-config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"default-config.d.ts","sourceRoot":"","sources":["../../src/config/default-config.ts"],"names":[],"mappings":"AAEA,OAAO,EAA6E,KAAK,SAAS,EAAE,MAAM,iBAAiB,CAAA;AAE3H,eAAO,MAAM,qBAAqB,mHAKxB,CAAA;AAEV,MAAM,WAAW,yBAAyB;IACxC,UAAU,EAAE,MAAM,CAAA;IAClB,QAAQ,EAAE,MAAM,CAAA;IAChB,aAAa,EAAE,MAAM,CAAA;CACtB;AA+CD,wBAAgB,mBAAmB,CAAC,EAClC,UAAU,EACV,QAAQ,EACR,aAAa,GACd,EAAE,yBAAyB,GAAG,SAAS,CA4CvC"}