agents-bridge 0.1.0

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 (139) hide show
  1. package/.env.example +20 -0
  2. package/LICENSE +21 -0
  3. package/README.md +259 -0
  4. package/bin/agent-bridge.mjs +12 -0
  5. package/config.example.json +117 -0
  6. package/dist/agents/cli-backends.d.ts +32 -0
  7. package/dist/agents/cli-backends.d.ts.map +1 -0
  8. package/dist/agents/cli-backends.js +217 -0
  9. package/dist/agents/cli-backends.js.map +1 -0
  10. package/dist/agents/cli-runner.d.ts.map +1 -0
  11. package/dist/agents/cli-runner.js +524 -0
  12. package/dist/agents/cli-runner.js.map +1 -0
  13. package/dist/agents/cli-session-store.d.ts.map +1 -0
  14. package/dist/agents/cli-session-store.js +127 -0
  15. package/dist/agents/cli-session-store.js.map +1 -0
  16. package/dist/agents/model-selection.d.ts +27 -0
  17. package/dist/agents/model-selection.d.ts.map +1 -0
  18. package/dist/agents/model-selection.js +40 -0
  19. package/dist/agents/model-selection.js.map +1 -0
  20. package/dist/agents/models-config.d.ts +28 -0
  21. package/dist/agents/models-config.d.ts.map +1 -0
  22. package/dist/agents/models-config.js +43 -0
  23. package/dist/agents/models-config.js.map +1 -0
  24. package/dist/channels/botlink.d.ts.map +1 -0
  25. package/dist/channels/botlink.js +320 -0
  26. package/dist/channels/botlink.js.map +1 -0
  27. package/dist/channels/command-gating.d.ts +20 -0
  28. package/dist/channels/command-gating.d.ts.map +1 -0
  29. package/dist/channels/command-gating.js +43 -0
  30. package/dist/channels/command-gating.js.map +1 -0
  31. package/dist/channels/draft-stream-controls.d.ts +21 -0
  32. package/dist/channels/draft-stream-controls.d.ts.map +1 -0
  33. package/dist/channels/draft-stream-controls.js +43 -0
  34. package/dist/channels/draft-stream-controls.js.map +1 -0
  35. package/dist/channels/draft-stream-loop.d.ts +31 -0
  36. package/dist/channels/draft-stream-loop.d.ts.map +1 -0
  37. package/dist/channels/draft-stream-loop.js +60 -0
  38. package/dist/channels/draft-stream-loop.js.map +1 -0
  39. package/dist/channels/mention-gating.d.ts +18 -0
  40. package/dist/channels/mention-gating.d.ts.map +1 -0
  41. package/dist/channels/mention-gating.js +20 -0
  42. package/dist/channels/mention-gating.js.map +1 -0
  43. package/dist/channels/registry.d.ts +5 -0
  44. package/dist/channels/registry.d.ts.map +1 -0
  45. package/dist/channels/registry.js +14 -0
  46. package/dist/channels/registry.js.map +1 -0
  47. package/dist/channels/run-state-machine.d.ts +21 -0
  48. package/dist/channels/run-state-machine.d.ts.map +1 -0
  49. package/dist/channels/run-state-machine.js +41 -0
  50. package/dist/channels/run-state-machine.js.map +1 -0
  51. package/dist/channels/session-envelope.d.ts +5 -0
  52. package/dist/channels/session-envelope.d.ts.map +1 -0
  53. package/dist/channels/session-envelope.js +13 -0
  54. package/dist/channels/session-envelope.js.map +1 -0
  55. package/dist/channels/session.d.ts +18 -0
  56. package/dist/channels/session.d.ts.map +1 -0
  57. package/dist/channels/session.js +35 -0
  58. package/dist/channels/session.js.map +1 -0
  59. package/dist/channels/typing-lifecycle.d.ts +16 -0
  60. package/dist/channels/typing-lifecycle.d.ts.map +1 -0
  61. package/dist/channels/typing-lifecycle.js +31 -0
  62. package/dist/channels/typing-lifecycle.js.map +1 -0
  63. package/dist/cli/cmd-config.d.ts +3 -0
  64. package/dist/cli/cmd-config.d.ts.map +1 -0
  65. package/dist/cli/cmd-config.js +15 -0
  66. package/dist/cli/cmd-config.js.map +1 -0
  67. package/dist/cli/cmd-doctor.d.ts +3 -0
  68. package/dist/cli/cmd-doctor.d.ts.map +1 -0
  69. package/dist/cli/cmd-doctor.js +80 -0
  70. package/dist/cli/cmd-doctor.js.map +1 -0
  71. package/dist/cli/cmd-logs.d.ts +3 -0
  72. package/dist/cli/cmd-logs.d.ts.map +1 -0
  73. package/dist/cli/cmd-logs.js +26 -0
  74. package/dist/cli/cmd-logs.js.map +1 -0
  75. package/dist/cli/cmd-onboard.d.ts +3 -0
  76. package/dist/cli/cmd-onboard.d.ts.map +1 -0
  77. package/dist/cli/cmd-onboard.js +103 -0
  78. package/dist/cli/cmd-onboard.js.map +1 -0
  79. package/dist/cli/cmd-start.d.ts +3 -0
  80. package/dist/cli/cmd-start.d.ts.map +1 -0
  81. package/dist/cli/cmd-start.js +155 -0
  82. package/dist/cli/cmd-start.js.map +1 -0
  83. package/dist/cli/cmd-status.d.ts +3 -0
  84. package/dist/cli/cmd-status.d.ts.map +1 -0
  85. package/dist/cli/cmd-status.js +16 -0
  86. package/dist/cli/cmd-status.js.map +1 -0
  87. package/dist/cli/cmd-stop.d.ts +3 -0
  88. package/dist/cli/cmd-stop.d.ts.map +1 -0
  89. package/dist/cli/cmd-stop.js +30 -0
  90. package/dist/cli/cmd-stop.js.map +1 -0
  91. package/dist/cli/pid-file.d.ts +7 -0
  92. package/dist/cli/pid-file.d.ts.map +1 -0
  93. package/dist/cli/pid-file.js +51 -0
  94. package/dist/cli/pid-file.js.map +1 -0
  95. package/dist/cli/run-main.d.ts +11 -0
  96. package/dist/cli/run-main.d.ts.map +1 -0
  97. package/dist/cli/run-main.js +64 -0
  98. package/dist/cli/run-main.js.map +1 -0
  99. package/dist/config/agent-dirs.d.ts +12 -0
  100. package/dist/config/agent-dirs.d.ts.map +1 -0
  101. package/dist/config/agent-dirs.js +30 -0
  102. package/dist/config/agent-dirs.js.map +1 -0
  103. package/dist/config/config.d.ts +3 -0
  104. package/dist/config/config.d.ts.map +1 -0
  105. package/dist/config/config.js +40 -0
  106. package/dist/config/config.js.map +1 -0
  107. package/dist/config/env-vars.d.ts +15 -0
  108. package/dist/config/env-vars.d.ts.map +1 -0
  109. package/dist/config/env-vars.js +16 -0
  110. package/dist/config/env-vars.js.map +1 -0
  111. package/dist/config/merge-config.d.ts +7 -0
  112. package/dist/config/merge-config.d.ts.map +1 -0
  113. package/dist/config/merge-config.js +32 -0
  114. package/dist/config/merge-config.js.map +1 -0
  115. package/dist/config/paths.d.ts +19 -0
  116. package/dist/config/paths.d.ts.map +1 -0
  117. package/dist/config/paths.js +22 -0
  118. package/dist/config/paths.js.map +1 -0
  119. package/dist/config/zod-schema.d.ts +1192 -0
  120. package/dist/config/zod-schema.d.ts.map +1 -0
  121. package/dist/config/zod-schema.js +107 -0
  122. package/dist/config/zod-schema.js.map +1 -0
  123. package/dist/console-encoding.d.ts +6 -0
  124. package/dist/console-encoding.d.ts.map +1 -0
  125. package/dist/console-encoding.js +35 -0
  126. package/dist/console-encoding.js.map +1 -0
  127. package/dist/entry.d.ts +3 -0
  128. package/dist/entry.d.ts.map +1 -0
  129. package/dist/entry.js +47 -0
  130. package/dist/entry.js.map +1 -0
  131. package/dist/logger.d.ts +4 -0
  132. package/dist/logger.d.ts.map +1 -0
  133. package/dist/logger.js +19 -0
  134. package/dist/logger.js.map +1 -0
  135. package/dist/types/index.d.ts +67 -0
  136. package/dist/types/index.d.ts.map +1 -0
  137. package/dist/types/index.js +2 -0
  138. package/dist/types/index.js.map +1 -0
  139. package/package.json +55 -0
@@ -0,0 +1,64 @@
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', 'doctor', 'logs', 'config', 'help',
5
+ ]);
6
+ const { values, positionals } = parseArgs({
7
+ args: argv,
8
+ options: {
9
+ config: { type: 'string', short: 'c' },
10
+ daemon: { type: 'boolean', short: 'd', default: false },
11
+ help: { type: 'boolean', short: 'h', default: false },
12
+ },
13
+ allowPositionals: true,
14
+ strict: false,
15
+ });
16
+ const first = positionals[0];
17
+ let command = 'start';
18
+ let rest = positionals;
19
+ if (first && validCommands.has(first)) {
20
+ command = first;
21
+ rest = positionals.slice(1);
22
+ }
23
+ if (values.help) {
24
+ command = 'help';
25
+ }
26
+ return {
27
+ command,
28
+ config: values.config ?? (rest[0] && !validCommands.has(rest[0]) ? rest[0] : undefined),
29
+ daemon: Boolean(values.daemon),
30
+ help: Boolean(values.help),
31
+ rest,
32
+ };
33
+ }
34
+ export function printHelp() {
35
+ console.log(`
36
+ agents-bridge - Local Agent Gateway for botlink
37
+
38
+ Usage:
39
+ agents-bridge <command> [options]
40
+
41
+ Commands:
42
+ start Start the gateway (foreground by default)
43
+ stop Stop a running daemon
44
+ status Show connection and runtime status
45
+ onboard Interactive setup wizard
46
+ doctor Diagnose environment (network, CLI tools, API keys)
47
+ logs View recent logs
48
+ config Show current configuration
49
+ help Show this help
50
+
51
+ Options:
52
+ -c, --config <path> Path to config.json
53
+ -d, --daemon Run as background daemon (with 'start')
54
+ -h, --help Show this help
55
+
56
+ Examples:
57
+ agents-bridge start # Start in foreground
58
+ agents-bridge start --daemon # Start as daemon
59
+ agents-bridge start -c ./my-config.json # Start with custom config
60
+ agents-bridge onboard # Interactive setup
61
+ agents-bridge doctor # Check environment
62
+ `.trim());
63
+ }
64
+ //# sourceMappingURL=run-main.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"run-main.js","sourceRoot":"","sources":["../../src/cli/run-main.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAA;AAoBrC,MAAM,UAAU,YAAY,CAAC,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;IACvD,MAAM,aAAa,GAAG,IAAI,GAAG,CAAU;QACrC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM;KACzE,CAAC,CAAA;IAEF,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,GAAG,SAAS,CAAC;QACxC,IAAI,EAAE,IAAI;QACV,OAAO,EAAE;YACP,MAAM,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,GAAG,EAAE;YACtC,MAAM,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,GAAG,EAAE,OAAO,EAAE,KAAK,EAAE;YACvD,IAAI,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,GAAG,EAAE,OAAO,EAAE,KAAK,EAAE;SACtD;QACD,gBAAgB,EAAE,IAAI;QACtB,MAAM,EAAE,KAAK;KACd,CAAC,CAAA;IAEF,MAAM,KAAK,GAAG,WAAW,CAAC,CAAC,CAAC,CAAA;IAC5B,IAAI,OAAO,GAAY,OAAO,CAAA;IAC9B,IAAI,IAAI,GAAG,WAAW,CAAA;IAEtB,IAAI,KAAK,IAAI,aAAa,CAAC,GAAG,CAAC,KAAgB,CAAC,EAAE,CAAC;QACjD,OAAO,GAAG,KAAgB,CAAA;QAC1B,IAAI,GAAG,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC,CAAA;IAC7B,CAAC;IAED,IAAI,MAAM,CAAC,IAAI,EAAE,CAAC;QAChB,OAAO,GAAG,MAAM,CAAA;IAClB,CAAC;IAED,OAAO;QACL,OAAO;QACP,MAAM,EAAG,MAAM,CAAC,MAA6B,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAY,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;QAC1H,MAAM,EAAE,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC;QAC9B,IAAI,EAAE,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC;QAC1B,IAAI;KACL,CAAA;AACH,CAAC;AAED,MAAM,UAAU,SAAS;IACvB,OAAO,CAAC,GAAG,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;CA2Bb,CAAC,IAAI,EAAE,CAAC,CAAA;AACT,CAAC"}
@@ -0,0 +1,12 @@
1
+ /**
2
+ * Ensure data directories exist.
3
+ *
4
+ * ~/.agent-bridge/
5
+ * ├── data/
6
+ * │ ├── sessions/
7
+ * │ ├── files/
8
+ * │ └── logs/
9
+ * └── skills/
10
+ */
11
+ export declare function ensureDataDirs(tempDir?: string): void;
12
+ //# 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":"AAUA;;;;;;;;;GASG;AACH,wBAAgB,cAAc,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAgBrD"}
@@ -0,0 +1,30 @@
1
+ import { mkdirSync, existsSync } from 'node:fs';
2
+ import { resolve } from 'node:path';
3
+ import { DATA_DIR, DATA_SESSIONS_DIR, DATA_FILES_DIR, DATA_LOGS_DIR, DATA_SKILLS_DIR, } from './paths.js';
4
+ /**
5
+ * Ensure data directories exist.
6
+ *
7
+ * ~/.agent-bridge/
8
+ * ├── data/
9
+ * │ ├── sessions/
10
+ * │ ├── files/
11
+ * │ └── logs/
12
+ * └── skills/
13
+ */
14
+ export function ensureDataDirs(tempDir) {
15
+ const dirs = [
16
+ DATA_DIR,
17
+ DATA_SESSIONS_DIR,
18
+ DATA_FILES_DIR,
19
+ DATA_LOGS_DIR,
20
+ DATA_SKILLS_DIR,
21
+ tempDir,
22
+ ].filter(Boolean);
23
+ for (const dir of dirs) {
24
+ const resolved = resolve(dir);
25
+ if (!existsSync(resolved)) {
26
+ mkdirSync(resolved, { recursive: true });
27
+ }
28
+ }
29
+ }
30
+ //# 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,EAAE,MAAM,SAAS,CAAA;AAC/C,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AACnC,OAAO,EACL,QAAQ,EACR,iBAAiB,EACjB,cAAc,EACd,aAAa,EACb,eAAe,GAChB,MAAM,YAAY,CAAA;AAEnB;;;;;;;;;GASG;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"}
@@ -0,0 +1,3 @@
1
+ import { type AppConfig } from './zod-schema.js';
2
+ export declare function loadConfig(configPath?: string): AppConfig;
3
+ //# 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,UAAU,CAAC,UAAU,CAAC,EAAE,MAAM,GAAG,SAAS,CAsCzD"}
@@ -0,0 +1,40 @@
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 loadConfig(configPath) {
8
+ const env = readEnvOverrides();
9
+ // 配置文件搜索顺序:
10
+ // 1. 显式传入的 configPath(CLI -c 参数)
11
+ // 2. 环境变量 AGENT_BRIDGE_CONFIG
12
+ // 3. ~/.agent-bridge/config.json(用户全局配置)
13
+ // 4. ./config.json(项目本地配置)
14
+ const paths = [
15
+ configPath,
16
+ env.configPath,
17
+ DATA_CONFIG_PATH,
18
+ './config.json',
19
+ ].filter(Boolean);
20
+ let rawConfig = {};
21
+ for (const p of paths) {
22
+ const resolved = resolve(p);
23
+ if (existsSync(resolved)) {
24
+ const content = readFileSync(resolved, 'utf-8');
25
+ rawConfig = JSON.parse(content);
26
+ break;
27
+ }
28
+ }
29
+ // Merge environment variable overrides
30
+ const merged = mergeWithEnv(rawConfig, env);
31
+ const result = AppConfigSchema.safeParse(merged);
32
+ if (!result.success) {
33
+ const issues = result.error.issues
34
+ .map(i => ` ${i.path.join('.')}: ${i.message}`)
35
+ .join('\n');
36
+ throw new Error(`Configuration error:\n${issues}`);
37
+ }
38
+ return result.data;
39
+ }
40
+ //# 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,UAAU,CAAC,UAAmB;IAC5C,MAAM,GAAG,GAAG,gBAAgB,EAAE,CAAA;IAE9B,YAAY;IACZ,mCAAmC;IACnC,gCAAgC;IAChC,2CAA2C;IAC3C,6BAA6B;IAC7B,MAAM,KAAK,GAAG;QACZ,UAAU;QACV,GAAG,CAAC,UAAU;QACd,gBAAgB;QAChB,eAAe;KAChB,CAAC,MAAM,CAAC,OAAO,CAAa,CAAA;IAE7B,IAAI,SAAS,GAA4B,EAAE,CAAA;IAE3C,KAAK,MAAM,CAAC,IAAI,KAAK,EAAE,CAAC;QACtB,MAAM,QAAQ,GAAG,OAAO,CAAC,CAAC,CAAC,CAAA;QAC3B,IAAI,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;YACzB,MAAM,OAAO,GAAG,YAAY,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAA;YAC/C,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAA4B,CAAA;YAC1D,MAAK;QACP,CAAC;IACH,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,15 @@
1
+ /**
2
+ * Environment variable overrides for configuration.
3
+ * Environment variables take precedence over config file values.
4
+ *
5
+ * Mapping follows the convention: AGENT_BRIDGE_<SECTION>_<KEY>
6
+ */
7
+ export interface EnvOverrides {
8
+ configPath?: string;
9
+ gatewayUrl?: string;
10
+ botToken?: string;
11
+ logLevel?: string;
12
+ tempDir?: string;
13
+ }
14
+ export declare function readEnvOverrides(): EnvOverrides;
15
+ //# sourceMappingURL=env-vars.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"env-vars.d.ts","sourceRoot":"","sources":["../../src/config/env-vars.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,MAAM,WAAW,YAAY;IAC3B,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,OAAO,CAAC,EAAE,MAAM,CAAA;CACjB;AAED,wBAAgB,gBAAgB,IAAI,YAAY,CAQ/C"}
@@ -0,0 +1,16 @@
1
+ /**
2
+ * Environment variable overrides for configuration.
3
+ * Environment variables take precedence over config file values.
4
+ *
5
+ * Mapping follows the convention: AGENT_BRIDGE_<SECTION>_<KEY>
6
+ */
7
+ export function readEnvOverrides() {
8
+ return {
9
+ configPath: process.env.AGENT_BRIDGE_CONFIG,
10
+ gatewayUrl: process.env.AGENT_BRIDGE_GATEWAY_URL,
11
+ botToken: process.env.AGENT_BRIDGE_BOT_TOKEN,
12
+ logLevel: process.env.AGENT_BRIDGE_LOG_LEVEL,
13
+ tempDir: process.env.AGENT_BRIDGE_TEMP_DIR,
14
+ };
15
+ }
16
+ //# sourceMappingURL=env-vars.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"env-vars.js","sourceRoot":"","sources":["../../src/config/env-vars.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAUH,MAAM,UAAU,gBAAgB;IAC9B,OAAO;QACL,UAAU,EAAE,OAAO,CAAC,GAAG,CAAC,mBAAmB;QAC3C,UAAU,EAAE,OAAO,CAAC,GAAG,CAAC,wBAAwB;QAChD,QAAQ,EAAE,OAAO,CAAC,GAAG,CAAC,sBAAsB;QAC5C,QAAQ,EAAE,OAAO,CAAC,GAAG,CAAC,sBAAsB;QAC5C,OAAO,EAAE,OAAO,CAAC,GAAG,CAAC,qBAAqB;KAC3C,CAAA;AACH,CAAC"}
@@ -0,0 +1,7 @@
1
+ import type { EnvOverrides } from './env-vars.js';
2
+ /**
3
+ * Deep-merge a raw config object with environment variable overrides.
4
+ * Env vars take precedence over file values. Only non-undefined env values are applied.
5
+ */
6
+ export declare function mergeWithEnv(raw: Record<string, unknown>, env: EnvOverrides): Record<string, unknown>;
7
+ //# sourceMappingURL=merge-config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"merge-config.d.ts","sourceRoot":"","sources":["../../src/config/merge-config.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,eAAe,CAAA;AAEjD;;;GAGG;AACH,wBAAgB,YAAY,CAAC,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,GAAG,EAAE,YAAY,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CA4BrG"}
@@ -0,0 +1,32 @@
1
+ /**
2
+ * Deep-merge a raw config object with environment variable overrides.
3
+ * Env vars take precedence over file values. Only non-undefined env values are applied.
4
+ */
5
+ export function mergeWithEnv(raw, env) {
6
+ const merged = structuredClone(raw);
7
+ // channels.botlink overrides
8
+ if (env.gatewayUrl || env.botToken) {
9
+ const channels = (merged.channels ?? {});
10
+ const botlink = (channels.botlink ?? {});
11
+ if (env.gatewayUrl)
12
+ botlink.gateway_url = env.gatewayUrl;
13
+ if (env.botToken)
14
+ botlink.bot_token = env.botToken;
15
+ channels.botlink = botlink;
16
+ merged.channels = channels;
17
+ }
18
+ // logging.level override
19
+ if (env.logLevel) {
20
+ const logging = (merged.logging ?? {});
21
+ logging.level = env.logLevel;
22
+ merged.logging = logging;
23
+ }
24
+ // files.temp_dir override
25
+ if (env.tempDir) {
26
+ const files = (merged.files ?? {});
27
+ files.temp_dir = env.tempDir;
28
+ merged.files = files;
29
+ }
30
+ return merged;
31
+ }
32
+ //# sourceMappingURL=merge-config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"merge-config.js","sourceRoot":"","sources":["../../src/config/merge-config.ts"],"names":[],"mappings":"AAEA;;;GAGG;AACH,MAAM,UAAU,YAAY,CAAC,GAA4B,EAAE,GAAiB;IAC1E,MAAM,MAAM,GAAG,eAAe,CAAC,GAAG,CAAC,CAAA;IAEnC,6BAA6B;IAC7B,IAAI,GAAG,CAAC,UAAU,IAAI,GAAG,CAAC,QAAQ,EAAE,CAAC;QACnC,MAAM,QAAQ,GAAG,CAAC,MAAM,CAAC,QAAQ,IAAI,EAAE,CAA4B,CAAA;QACnE,MAAM,OAAO,GAAG,CAAC,QAAQ,CAAC,OAAO,IAAI,EAAE,CAA4B,CAAA;QACnE,IAAI,GAAG,CAAC,UAAU;YAAE,OAAO,CAAC,WAAW,GAAG,GAAG,CAAC,UAAU,CAAA;QACxD,IAAI,GAAG,CAAC,QAAQ;YAAE,OAAO,CAAC,SAAS,GAAG,GAAG,CAAC,QAAQ,CAAA;QAClD,QAAQ,CAAC,OAAO,GAAG,OAAO,CAAA;QAC1B,MAAM,CAAC,QAAQ,GAAG,QAAQ,CAAA;IAC5B,CAAC;IAED,yBAAyB;IACzB,IAAI,GAAG,CAAC,QAAQ,EAAE,CAAC;QACjB,MAAM,OAAO,GAAG,CAAC,MAAM,CAAC,OAAO,IAAI,EAAE,CAA4B,CAAA;QACjE,OAAO,CAAC,KAAK,GAAG,GAAG,CAAC,QAAQ,CAAA;QAC5B,MAAM,CAAC,OAAO,GAAG,OAAO,CAAA;IAC1B,CAAC;IAED,0BAA0B;IAC1B,IAAI,GAAG,CAAC,OAAO,EAAE,CAAC;QAChB,MAAM,KAAK,GAAG,CAAC,MAAM,CAAC,KAAK,IAAI,EAAE,CAA4B,CAAA;QAC7D,KAAK,CAAC,QAAQ,GAAG,GAAG,CAAC,OAAO,CAAA;QAC5B,MAAM,CAAC,KAAK,GAAG,KAAK,CAAA;IACtB,CAAC;IAED,OAAO,MAAM,CAAA;AACf,CAAC"}
@@ -0,0 +1,19 @@
1
+ /**
2
+ * Data directory
3
+ * ~/.agent-bridge/
4
+ * ├── config.json
5
+ * ├── data/
6
+ * │ ├── sessions/
7
+ * │ ├── files/
8
+ * │ └── logs/
9
+ * ├── skills/
10
+ * └── .pi/
11
+ */
12
+ export declare const DATA_DIR: string;
13
+ export declare const DATA_CONFIG_PATH: string;
14
+ export declare const DATA_SESSIONS_DIR: string;
15
+ export declare const DATA_FILES_DIR: string;
16
+ export declare const DATA_LOGS_DIR: string;
17
+ export declare const DATA_SKILLS_DIR: string;
18
+ export declare const PID_FILE: string;
19
+ //# sourceMappingURL=paths.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"paths.d.ts","sourceRoot":"","sources":["../../src/config/paths.ts"],"names":[],"mappings":"AAGA;;;;;;;;;;GAUG;AACH,eAAO,MAAM,QAAQ,QAAmC,CAAA;AACxD,eAAO,MAAM,gBAAgB,QAAgC,CAAA;AAC7D,eAAO,MAAM,iBAAiB,QAAqC,CAAA;AACnE,eAAO,MAAM,2BAA2B,QAA+C,CAAA;AACvF,eAAO,MAAM,cAAc,QAAkC,CAAA;AAC7D,eAAO,MAAM,aAAa,QAAiC,CAAA;AAC3D,eAAO,MAAM,eAAe,QAA2B,CAAA;AACvD,eAAO,MAAM,QAAQ,QAAqC,CAAA"}
@@ -0,0 +1,22 @@
1
+ import { join } from 'node:path';
2
+ import { homedir } from 'node:os';
3
+ /**
4
+ * Data directory
5
+ * ~/.agent-bridge/
6
+ * ├── config.json
7
+ * ├── data/
8
+ * │ ├── sessions/
9
+ * │ ├── files/
10
+ * │ └── logs/
11
+ * ├── skills/
12
+ * └── .pi/
13
+ */
14
+ export const DATA_DIR = join(homedir(), '.agent-bridge');
15
+ export const DATA_CONFIG_PATH = join(DATA_DIR, 'config.json');
16
+ export const DATA_SESSIONS_DIR = join(DATA_DIR, 'data', 'sessions');
17
+ export const DATA_CLI_SESSION_STORE_PATH = join(DATA_SESSIONS_DIR, 'cli-sessions.json');
18
+ export const DATA_FILES_DIR = join(DATA_DIR, 'data', 'files');
19
+ export const DATA_LOGS_DIR = join(DATA_DIR, 'data', 'logs');
20
+ export const DATA_SKILLS_DIR = join(DATA_DIR, 'skills');
21
+ export const PID_FILE = join(DATA_DIR, 'agent-bridge.pid');
22
+ //# sourceMappingURL=paths.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"paths.js","sourceRoot":"","sources":["../../src/config/paths.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAA;AAChC,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAA;AAEjC;;;;;;;;;;GAUG;AACH,MAAM,CAAC,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,EAAE,EAAE,eAAe,CAAC,CAAA;AACxD,MAAM,CAAC,MAAM,gBAAgB,GAAG,IAAI,CAAC,QAAQ,EAAE,aAAa,CAAC,CAAA;AAC7D,MAAM,CAAC,MAAM,iBAAiB,GAAG,IAAI,CAAC,QAAQ,EAAE,MAAM,EAAE,UAAU,CAAC,CAAA;AACnE,MAAM,CAAC,MAAM,2BAA2B,GAAG,IAAI,CAAC,iBAAiB,EAAE,mBAAmB,CAAC,CAAA;AACvF,MAAM,CAAC,MAAM,cAAc,GAAG,IAAI,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,CAAC,CAAA;AAC7D,MAAM,CAAC,MAAM,aAAa,GAAG,IAAI,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,CAAC,CAAA;AAC3D,MAAM,CAAC,MAAM,eAAe,GAAG,IAAI,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAA;AACvD,MAAM,CAAC,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,EAAE,kBAAkB,CAAC,CAAA"}