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,94 @@
1
+ import { resolveCliBackendConfig } from '../agents/cli-backends.js';
2
+ import { AGENT_LIFE_CHANNEL_ID, AppConfigSchema, toPersistedAgentLifeChannelConfig } from './zod-schema.js';
3
+ export const ONBOARD_MODEL_CHOICES = [
4
+ 'claude-cli/opus-4.6',
5
+ 'codex-cli/gpt-5.4',
6
+ 'qwen-cli/qwen3-coder-plus',
7
+ 'anthropic/claude-sonnet-4-6',
8
+ ];
9
+ function getBuiltinCliBackend(provider) {
10
+ const backend = resolveCliBackendConfig(provider);
11
+ if (!backend) {
12
+ throw new Error(`Missing builtin CLI backend config for ${provider}`);
13
+ }
14
+ return backend.config;
15
+ }
16
+ function toPersistedClaudeBackendConfig(backend) {
17
+ return {
18
+ command: backend.command,
19
+ sessionMode: backend.sessionMode,
20
+ serialize: backend.serialize,
21
+ reliability: backend.reliability,
22
+ };
23
+ }
24
+ function toPersistedCodexBackendConfig(backend) {
25
+ return {
26
+ command: backend.command,
27
+ runtimeMode: backend.runtimeMode,
28
+ sessionMode: backend.sessionMode,
29
+ serialize: backend.serialize,
30
+ appServer: backend.appServer,
31
+ };
32
+ }
33
+ function toPersistedQwenBackendConfig(backend) {
34
+ return {
35
+ command: backend.command,
36
+ runtimeMode: backend.runtimeMode,
37
+ args: backend.args,
38
+ resumeArgs: backend.resumeArgs,
39
+ output: backend.output,
40
+ resumeOutput: backend.resumeOutput,
41
+ input: backend.input,
42
+ modelArg: backend.modelArg,
43
+ sessionArg: backend.sessionArg,
44
+ sessionIdFields: backend.sessionIdFields,
45
+ sessionMode: backend.sessionMode,
46
+ serialize: backend.serialize,
47
+ reliability: backend.reliability,
48
+ };
49
+ }
50
+ export function createDefaultConfig({ gatewayUrl, botToken, selectedModel, }) {
51
+ const fallbacks = ONBOARD_MODEL_CHOICES.filter(model => model !== selectedModel).slice(0, 1);
52
+ const claudeBackend = toPersistedClaudeBackendConfig(getBuiltinCliBackend('claude-cli'));
53
+ const codexBackend = toPersistedCodexBackendConfig(getBuiltinCliBackend('codex-cli'));
54
+ const qwenBackend = toPersistedQwenBackendConfig(getBuiltinCliBackend('qwen-cli'));
55
+ return AppConfigSchema.parse({
56
+ channels: {
57
+ [AGENT_LIFE_CHANNEL_ID]: toPersistedAgentLifeChannelConfig({
58
+ gateway_url: gatewayUrl.trim(),
59
+ bot_token: botToken.trim(),
60
+ poll_timeout: 30,
61
+ retry_interval: 5,
62
+ max_retry_interval: 60,
63
+ }),
64
+ },
65
+ agents: {
66
+ defaults: {
67
+ model: {
68
+ primary: selectedModel,
69
+ ...(fallbacks.length > 0 ? { fallbacks } : {}),
70
+ },
71
+ cliBackends: {
72
+ 'claude-cli': claudeBackend,
73
+ 'codex-cli': codexBackend,
74
+ 'qwen-cli': qwenBackend,
75
+ },
76
+ },
77
+ list: [
78
+ {
79
+ id: 'default',
80
+ default: true,
81
+ },
82
+ ],
83
+ },
84
+ bindings: [
85
+ {
86
+ agentId: 'default',
87
+ match: {
88
+ channel: '*',
89
+ },
90
+ },
91
+ ],
92
+ });
93
+ }
94
+ //# sourceMappingURL=default-config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"default-config.js","sourceRoot":"","sources":["../../src/config/default-config.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,uBAAuB,EAAE,MAAM,2BAA2B,CAAA;AACnE,OAAO,EAAE,qBAAqB,EAAE,eAAe,EAAE,iCAAiC,EAAkB,MAAM,iBAAiB,CAAA;AAE3H,MAAM,CAAC,MAAM,qBAAqB,GAAG;IACnC,qBAAqB;IACrB,mBAAmB;IACnB,2BAA2B;IAC3B,6BAA6B;CACrB,CAAA;AAQV,SAAS,oBAAoB,CAAC,QAAiD;IAC7E,MAAM,OAAO,GAAG,uBAAuB,CAAC,QAAQ,CAAC,CAAA;IACjD,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,MAAM,IAAI,KAAK,CAAC,0CAA0C,QAAQ,EAAE,CAAC,CAAA;IACvE,CAAC;IACD,OAAO,OAAO,CAAC,MAAM,CAAA;AACvB,CAAC;AAED,SAAS,8BAA8B,CAAC,OAAyB;IAC/D,OAAO;QACL,OAAO,EAAE,OAAO,CAAC,OAAO;QACxB,WAAW,EAAE,OAAO,CAAC,WAAW;QAChC,SAAS,EAAE,OAAO,CAAC,SAAS;QAC5B,WAAW,EAAE,OAAO,CAAC,WAAW;KACjC,CAAA;AACH,CAAC;AAED,SAAS,6BAA6B,CAAC,OAAyB;IAC9D,OAAO;QACL,OAAO,EAAE,OAAO,CAAC,OAAO;QACxB,WAAW,EAAE,OAAO,CAAC,WAAW;QAChC,WAAW,EAAE,OAAO,CAAC,WAAW;QAChC,SAAS,EAAE,OAAO,CAAC,SAAS;QAC5B,SAAS,EAAE,OAAO,CAAC,SAAS;KAC7B,CAAA;AACH,CAAC;AAED,SAAS,4BAA4B,CAAC,OAAyB;IAC7D,OAAO;QACL,OAAO,EAAE,OAAO,CAAC,OAAO;QACxB,WAAW,EAAE,OAAO,CAAC,WAAW;QAChC,IAAI,EAAE,OAAO,CAAC,IAAI;QAClB,UAAU,EAAE,OAAO,CAAC,UAAU;QAC9B,MAAM,EAAE,OAAO,CAAC,MAAM;QACtB,YAAY,EAAE,OAAO,CAAC,YAAY;QAClC,KAAK,EAAE,OAAO,CAAC,KAAK;QACpB,QAAQ,EAAE,OAAO,CAAC,QAAQ;QAC1B,UAAU,EAAE,OAAO,CAAC,UAAU;QAC9B,eAAe,EAAE,OAAO,CAAC,eAAe;QACxC,WAAW,EAAE,OAAO,CAAC,WAAW;QAChC,SAAS,EAAE,OAAO,CAAC,SAAS;QAC5B,WAAW,EAAE,OAAO,CAAC,WAAW;KACjC,CAAA;AACH,CAAC;AAED,MAAM,UAAU,mBAAmB,CAAC,EAClC,UAAU,EACV,QAAQ,EACR,aAAa,GACa;IAC1B,MAAM,SAAS,GAAG,qBAAqB,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,KAAK,aAAa,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAA;IAC5F,MAAM,aAAa,GAAG,8BAA8B,CAAC,oBAAoB,CAAC,YAAY,CAAC,CAAC,CAAA;IACxF,MAAM,YAAY,GAAG,6BAA6B,CAAC,oBAAoB,CAAC,WAAW,CAAC,CAAC,CAAA;IACrF,MAAM,WAAW,GAAG,4BAA4B,CAAC,oBAAoB,CAAC,UAAU,CAAC,CAAC,CAAA;IAElF,OAAO,eAAe,CAAC,KAAK,CAAC;QAC3B,QAAQ,EAAE;YACR,CAAC,qBAAqB,CAAC,EAAE,iCAAiC,CAAC;gBACzD,WAAW,EAAE,UAAU,CAAC,IAAI,EAAE;gBAC9B,SAAS,EAAE,QAAQ,CAAC,IAAI,EAAE;gBAC1B,YAAY,EAAE,EAAE;gBAChB,cAAc,EAAE,CAAC;gBACjB,kBAAkB,EAAE,EAAE;aACvB,CAAC;SACH;QACD,MAAM,EAAE;YACN,QAAQ,EAAE;gBACR,KAAK,EAAE;oBACL,OAAO,EAAE,aAAa;oBACtB,GAAG,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;iBAC/C;gBACD,WAAW,EAAE;oBACX,YAAY,EAAE,aAAa;oBAC3B,WAAW,EAAE,YAAY;oBACzB,UAAU,EAAE,WAAW;iBACxB;aACF;YACD,IAAI,EAAE;gBACJ;oBACE,EAAE,EAAE,SAAS;oBACb,OAAO,EAAE,IAAI;iBACd;aACF;SACF;QACD,QAAQ,EAAE;YACR;gBACE,OAAO,EAAE,SAAS;gBAClB,KAAK,EAAE;oBACL,OAAO,EAAE,GAAG;iBACb;aACF;SACF;KACF,CAAC,CAAA;AACJ,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_LIFE_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_LIFE_BRIDGE_<SECTION>_<KEY>
6
+ */
7
+ export function readEnvOverrides() {
8
+ return {
9
+ configPath: process.env.AGENT_LIFE_BRIDGE_CONFIG,
10
+ gatewayUrl: process.env.AGENT_LIFE_BRIDGE_GATEWAY_URL,
11
+ botToken: process.env.AGENT_LIFE_BRIDGE_BOT_TOKEN,
12
+ logLevel: process.env.AGENT_LIFE_BRIDGE_LOG_LEVEL,
13
+ tempDir: process.env.AGENT_LIFE_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,wBAAwB;QAChD,UAAU,EAAE,OAAO,CAAC,GAAG,CAAC,6BAA6B;QACrD,QAAQ,EAAE,OAAO,CAAC,GAAG,CAAC,2BAA2B;QACjD,QAAQ,EAAE,OAAO,CAAC,GAAG,CAAC,2BAA2B;QACjD,OAAO,EAAE,OAAO,CAAC,GAAG,CAAC,0BAA0B;KAChD,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;AAGjD;;;GAGG;AACH,wBAAgB,YAAY,CAAC,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,GAAG,EAAE,YAAY,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAqCrG"}
@@ -0,0 +1,45 @@
1
+ import { AGENT_LIFE_CHANNEL_ID, DEFAULT_AGENT_LIFE_ACCOUNT_ID } from './zod-schema.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 function mergeWithEnv(raw, env) {
7
+ const merged = structuredClone(raw);
8
+ // agent-life channel overrides
9
+ if (env.gatewayUrl || env.botToken) {
10
+ const channels = (merged.channels ?? {});
11
+ const agentLife = (channels[AGENT_LIFE_CHANNEL_ID] ?? {});
12
+ const agentLifeAccounts = agentLife.accounts;
13
+ if (agentLifeAccounts && Object.keys(agentLifeAccounts).length > 0) {
14
+ const defaultAccount = (agentLifeAccounts[DEFAULT_AGENT_LIFE_ACCOUNT_ID] ?? {});
15
+ if (env.gatewayUrl)
16
+ defaultAccount.gateway_url = env.gatewayUrl;
17
+ if (env.botToken)
18
+ defaultAccount.bot_token = env.botToken;
19
+ agentLifeAccounts[DEFAULT_AGENT_LIFE_ACCOUNT_ID] = defaultAccount;
20
+ agentLife.accounts = agentLifeAccounts;
21
+ }
22
+ else {
23
+ if (env.gatewayUrl)
24
+ agentLife.gateway_url = env.gatewayUrl;
25
+ if (env.botToken)
26
+ agentLife.bot_token = env.botToken;
27
+ }
28
+ channels[AGENT_LIFE_CHANNEL_ID] = agentLife;
29
+ merged.channels = channels;
30
+ }
31
+ // logging.level override
32
+ if (env.logLevel) {
33
+ const logging = (merged.logging ?? {});
34
+ logging.level = env.logLevel;
35
+ merged.logging = logging;
36
+ }
37
+ // files.temp_dir override
38
+ if (env.tempDir) {
39
+ const files = (merged.files ?? {});
40
+ files.temp_dir = env.tempDir;
41
+ merged.files = files;
42
+ }
43
+ return merged;
44
+ }
45
+ //# sourceMappingURL=merge-config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"merge-config.js","sourceRoot":"","sources":["../../src/config/merge-config.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,qBAAqB,EAAE,6BAA6B,EAAE,MAAM,iBAAiB,CAAA;AAEtF;;;GAGG;AACH,MAAM,UAAU,YAAY,CAAC,GAA4B,EAAE,GAAiB;IAC1E,MAAM,MAAM,GAAG,eAAe,CAAC,GAAG,CAAC,CAAA;IAEnC,+BAA+B;IAC/B,IAAI,GAAG,CAAC,UAAU,IAAI,GAAG,CAAC,QAAQ,EAAE,CAAC;QACnC,MAAM,QAAQ,GAAG,CAAC,MAAM,CAAC,QAAQ,IAAI,EAAE,CAA4B,CAAA;QACnE,MAAM,SAAS,GAAG,CAAC,QAAQ,CAAC,qBAAqB,CAAC,IAAI,EAAE,CAA4B,CAAA;QACpF,MAAM,iBAAiB,GAAG,SAAS,CAAC,QAA+D,CAAA;QACnG,IAAI,iBAAiB,IAAI,MAAM,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACnE,MAAM,cAAc,GAAG,CAAC,iBAAiB,CAAC,6BAA6B,CAAC,IAAI,EAAE,CAA4B,CAAA;YAC1G,IAAI,GAAG,CAAC,UAAU;gBAAE,cAAc,CAAC,WAAW,GAAG,GAAG,CAAC,UAAU,CAAA;YAC/D,IAAI,GAAG,CAAC,QAAQ;gBAAE,cAAc,CAAC,SAAS,GAAG,GAAG,CAAC,QAAQ,CAAA;YACzD,iBAAiB,CAAC,6BAA6B,CAAC,GAAG,cAAc,CAAA;YACjE,SAAS,CAAC,QAAQ,GAAG,iBAAiB,CAAA;QACxC,CAAC;aAAM,CAAC;YACN,IAAI,GAAG,CAAC,UAAU;gBAAE,SAAS,CAAC,WAAW,GAAG,GAAG,CAAC,UAAU,CAAA;YAC1D,IAAI,GAAG,CAAC,QAAQ;gBAAE,SAAS,CAAC,SAAS,GAAG,GAAG,CAAC,QAAQ,CAAA;QACtD,CAAC;QACD,QAAQ,CAAC,qBAAqB,CAAC,GAAG,SAAS,CAAA;QAC3C,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,25 @@
1
+ /**
2
+ * Data directory
3
+ * ~/.agent-life-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_CLI_SESSION_STORE_PATH: string;
16
+ export declare const DATA_AGENT_LIFE_SESSION_MAP_PATH: string;
17
+ export declare const DATA_FILES_DIR: string;
18
+ export declare const DATA_LOGS_DIR: string;
19
+ export declare const DATA_SKILLS_DIR: string;
20
+ export declare const PID_FILE: string;
21
+ export declare const RUNTIME_STATE_FILE: string;
22
+ export declare const AGENTS_STATE_DIR: string;
23
+ export declare function agentStatePath(agentId: string): string;
24
+ export declare function agentSessionStorePath(agentId: string): string;
25
+ //# 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,QAAwC,CAAA;AAC7D,eAAO,MAAM,gBAAgB,QAAgC,CAAA;AAC7D,eAAO,MAAM,iBAAiB,QAAqC,CAAA;AACnE,eAAO,MAAM,2BAA2B,QAA+C,CAAA;AACvF,eAAO,MAAM,gCAAgC,QAAyD,CAAA;AACtG,eAAO,MAAM,cAAc,QAAkC,CAAA;AAC7D,eAAO,MAAM,aAAa,QAAiC,CAAA;AAC3D,eAAO,MAAM,eAAe,QAA2B,CAAA;AACvD,eAAO,MAAM,QAAQ,QAA0C,CAAA;AAC/D,eAAO,MAAM,kBAAkB,QAAiC,CAAA;AAChE,eAAO,MAAM,gBAAgB,QAA2B,CAAA;AAExD,wBAAgB,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAEtD;AAED,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAE7D"}
@@ -0,0 +1,31 @@
1
+ import { join } from 'node:path';
2
+ import { homedir } from 'node:os';
3
+ /**
4
+ * Data directory
5
+ * ~/.agent-life-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-life-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_AGENT_LIFE_SESSION_MAP_PATH = join(DATA_SESSIONS_DIR, 'agent-life-session-map.json');
19
+ export const DATA_FILES_DIR = join(DATA_DIR, 'data', 'files');
20
+ export const DATA_LOGS_DIR = join(DATA_DIR, 'data', 'logs');
21
+ export const DATA_SKILLS_DIR = join(DATA_DIR, 'skills');
22
+ export const PID_FILE = join(DATA_DIR, 'agent-life-bridge.pid');
23
+ export const RUNTIME_STATE_FILE = join(DATA_DIR, 'runtime.json');
24
+ export const AGENTS_STATE_DIR = join(DATA_DIR, 'agents');
25
+ export function agentStatePath(agentId) {
26
+ return join(AGENTS_STATE_DIR, agentId);
27
+ }
28
+ export function agentSessionStorePath(agentId) {
29
+ return join(agentStatePath(agentId), 'cli-sessions.json');
30
+ }
31
+ //# 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,oBAAoB,CAAC,CAAA;AAC7D,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,gCAAgC,GAAG,IAAI,CAAC,iBAAiB,EAAE,6BAA6B,CAAC,CAAA;AACtG,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,uBAAuB,CAAC,CAAA;AAC/D,MAAM,CAAC,MAAM,kBAAkB,GAAG,IAAI,CAAC,QAAQ,EAAE,cAAc,CAAC,CAAA;AAChE,MAAM,CAAC,MAAM,gBAAgB,GAAG,IAAI,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAA;AAExD,MAAM,UAAU,cAAc,CAAC,OAAe;IAC5C,OAAO,IAAI,CAAC,gBAAgB,EAAE,OAAO,CAAC,CAAA;AACxC,CAAC;AAED,MAAM,UAAU,qBAAqB,CAAC,OAAe;IACnD,OAAO,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,EAAE,mBAAmB,CAAC,CAAA;AAC3D,CAAC"}