@atomic-chat/core 0.20.6 → 0.21.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 (226) hide show
  1. package/dist/audio/jobs.js +4 -0
  2. package/dist/audio/jobs.js.map +1 -1
  3. package/dist/audio/service.d.ts +1 -1
  4. package/dist/audio/service.js +3 -1
  5. package/dist/audio/service.js.map +1 -1
  6. package/dist/audio/session.js +28 -16
  7. package/dist/audio/session.js.map +1 -1
  8. package/dist/audio/state.d.ts +3 -1
  9. package/dist/audio/state.js +3 -1
  10. package/dist/audio/state.js.map +1 -1
  11. package/dist/cli/launch.d.ts +23 -3
  12. package/dist/cli/launch.js +59 -8
  13. package/dist/cli/launch.js.map +1 -1
  14. package/dist/cli/main.d.ts +1 -1
  15. package/dist/contracts/events.d.ts +8 -0
  16. package/dist/contracts/settings.d.ts +5 -0
  17. package/dist/contracts/settings.js.map +1 -1
  18. package/dist/core/atomic-core.d.ts +3 -1
  19. package/dist/core/atomic-core.js +4 -1
  20. package/dist/core/atomic-core.js.map +1 -1
  21. package/dist/core/create.js +4 -1
  22. package/dist/core/create.js.map +1 -1
  23. package/dist/core/sessions.js +1 -0
  24. package/dist/core/sessions.js.map +1 -1
  25. package/dist/integrations/catalog.d.ts +25 -8
  26. package/dist/integrations/catalog.js +105 -38
  27. package/dist/integrations/catalog.js.map +1 -1
  28. package/dist/integrations/configure/atomic-agent.d.ts +9 -1
  29. package/dist/integrations/configure/atomic-agent.js +42 -3
  30. package/dist/integrations/configure/atomic-agent.js.map +1 -1
  31. package/dist/integrations/configure/backup.d.ts +21 -0
  32. package/dist/integrations/configure/backup.js +52 -0
  33. package/dist/integrations/configure/backup.js.map +1 -0
  34. package/dist/integrations/configure/claude-code.d.ts +11 -4
  35. package/dist/integrations/configure/claude-code.js +73 -24
  36. package/dist/integrations/configure/claude-code.js.map +1 -1
  37. package/dist/integrations/configure/cline.d.ts +14 -4
  38. package/dist/integrations/configure/cline.js +78 -6
  39. package/dist/integrations/configure/cline.js.map +1 -1
  40. package/dist/integrations/configure/codex.d.ts +5 -3
  41. package/dist/integrations/configure/codex.js +12 -5
  42. package/dist/integrations/configure/codex.js.map +1 -1
  43. package/dist/integrations/configure/copilot.d.ts +28 -5
  44. package/dist/integrations/configure/copilot.js +124 -8
  45. package/dist/integrations/configure/copilot.js.map +1 -1
  46. package/dist/integrations/configure/droid.d.ts +13 -7
  47. package/dist/integrations/configure/droid.js +48 -17
  48. package/dist/integrations/configure/droid.js.map +1 -1
  49. package/dist/integrations/configure/dsh.d.ts +36 -20
  50. package/dist/integrations/configure/dsh.js +250 -48
  51. package/dist/integrations/configure/dsh.js.map +1 -1
  52. package/dist/integrations/configure/goose.d.ts +21 -7
  53. package/dist/integrations/configure/goose.js +141 -10
  54. package/dist/integrations/configure/goose.js.map +1 -1
  55. package/dist/integrations/configure/hermes.d.ts +63 -10
  56. package/dist/integrations/configure/hermes.js +360 -75
  57. package/dist/integrations/configure/hermes.js.map +1 -1
  58. package/dist/integrations/configure/json-backup.d.ts +73 -0
  59. package/dist/integrations/configure/json-backup.js +292 -0
  60. package/dist/integrations/configure/json-backup.js.map +1 -0
  61. package/dist/integrations/configure/json-key-backup.d.ts +43 -0
  62. package/dist/integrations/configure/json-key-backup.js +113 -0
  63. package/dist/integrations/configure/json-key-backup.js.map +1 -0
  64. package/dist/integrations/configure/kilo.d.ts +4 -4
  65. package/dist/integrations/configure/kilo.js +6 -9
  66. package/dist/integrations/configure/kilo.js.map +1 -1
  67. package/dist/integrations/configure/legacy-env-block.d.ts +18 -0
  68. package/dist/integrations/configure/legacy-env-block.js +47 -0
  69. package/dist/integrations/configure/legacy-env-block.js.map +1 -0
  70. package/dist/integrations/configure/mimo.d.ts +3 -2
  71. package/dist/integrations/configure/mimo.js +8 -9
  72. package/dist/integrations/configure/mimo.js.map +1 -1
  73. package/dist/integrations/configure/muse.d.ts +3 -3
  74. package/dist/integrations/configure/muse.js +5 -6
  75. package/dist/integrations/configure/muse.js.map +1 -1
  76. package/dist/integrations/configure/openclaude.d.ts +22 -7
  77. package/dist/integrations/configure/openclaude.js +132 -39
  78. package/dist/integrations/configure/openclaude.js.map +1 -1
  79. package/dist/integrations/configure/openclaw.d.ts +19 -5
  80. package/dist/integrations/configure/openclaw.js +79 -23
  81. package/dist/integrations/configure/openclaw.js.map +1 -1
  82. package/dist/integrations/configure/opencode-style.d.ts +53 -11
  83. package/dist/integrations/configure/opencode-style.js +218 -23
  84. package/dist/integrations/configure/opencode-style.js.map +1 -1
  85. package/dist/integrations/configure/opencode.d.ts +5 -4
  86. package/dist/integrations/configure/opencode.js +8 -10
  87. package/dist/integrations/configure/opencode.js.map +1 -1
  88. package/dist/integrations/configure/openhands.d.ts +5 -4
  89. package/dist/integrations/configure/openhands.js +7 -7
  90. package/dist/integrations/configure/openhands.js.map +1 -1
  91. package/dist/integrations/configure/pi.d.ts +6 -5
  92. package/dist/integrations/configure/pi.js +79 -30
  93. package/dist/integrations/configure/pi.js.map +1 -1
  94. package/dist/integrations/configure/poolside.d.ts +5 -4
  95. package/dist/integrations/configure/poolside.js +7 -7
  96. package/dist/integrations/configure/poolside.js.map +1 -1
  97. package/dist/integrations/configure/registry.d.ts +6 -0
  98. package/dist/integrations/configure/registry.js +1 -0
  99. package/dist/integrations/configure/registry.js.map +1 -1
  100. package/dist/integrations/configure/zcode.d.ts +6 -7
  101. package/dist/integrations/configure/zcode.js +26 -11
  102. package/dist/integrations/configure/zcode.js.map +1 -1
  103. package/dist/integrations/configure/zed.d.ts +16 -4
  104. package/dist/integrations/configure/zed.js +61 -13
  105. package/dist/integrations/configure/zed.js.map +1 -1
  106. package/dist/models/gguf/kv-cache.d.ts +20 -1
  107. package/dist/models/gguf/kv-cache.js +97 -7
  108. package/dist/models/gguf/kv-cache.js.map +1 -1
  109. package/dist/models/gguf/reader.d.ts +5 -3
  110. package/dist/models/gguf/reader.js +10 -6
  111. package/dist/models/gguf/reader.js.map +1 -1
  112. package/dist/runtime/llamacpp/args.d.ts +14 -0
  113. package/dist/runtime/llamacpp/args.js +48 -4
  114. package/dist/runtime/llamacpp/args.js.map +1 -1
  115. package/dist/runtime/llamacpp/ctx-ladder.d.ts +6 -3
  116. package/dist/runtime/llamacpp/ctx-ladder.js +6 -3
  117. package/dist/runtime/llamacpp/ctx-ladder.js.map +1 -1
  118. package/dist/runtime/llamacpp/fit-margin.d.ts +24 -0
  119. package/dist/runtime/llamacpp/fit-margin.js +31 -0
  120. package/dist/runtime/llamacpp/fit-margin.js.map +1 -1
  121. package/dist/runtime/llamacpp/generation-limits.d.ts +45 -0
  122. package/dist/runtime/llamacpp/generation-limits.js +61 -0
  123. package/dist/runtime/llamacpp/generation-limits.js.map +1 -0
  124. package/dist/runtime/llamacpp/load-plan.d.ts +14 -2
  125. package/dist/runtime/llamacpp/load-plan.js +64 -13
  126. package/dist/runtime/llamacpp/load-plan.js.map +1 -1
  127. package/dist/runtime/llamacpp/runtime.d.ts +1 -0
  128. package/dist/runtime/llamacpp/runtime.js +2 -0
  129. package/dist/runtime/llamacpp/runtime.js.map +1 -1
  130. package/dist/runtime/managed-engines/runtime.js +13 -2
  131. package/dist/runtime/managed-engines/runtime.js.map +1 -1
  132. package/dist/runtime/managed-engines/spec.d.ts +6 -0
  133. package/dist/runtime/managed-engines/spec.js.map +1 -1
  134. package/dist/runtime/managed-models/auto-limits.d.ts +47 -0
  135. package/dist/runtime/managed-models/auto-limits.js +60 -0
  136. package/dist/runtime/managed-models/auto-limits.js.map +1 -0
  137. package/dist/runtime/managed-models/index.d.ts +1 -0
  138. package/dist/runtime/managed-models/index.js +1 -0
  139. package/dist/runtime/managed-models/index.js.map +1 -1
  140. package/dist/runtime/mlx/config.d.ts +9 -5
  141. package/dist/runtime/mlx/config.js +12 -6
  142. package/dist/runtime/mlx/config.js.map +1 -1
  143. package/dist/runtime/mlx/model-files.d.ts +9 -0
  144. package/dist/runtime/mlx/model-files.js +26 -0
  145. package/dist/runtime/mlx/model-files.js.map +1 -1
  146. package/dist/runtime/mlx/runtime.d.ts +7 -0
  147. package/dist/runtime/mlx/runtime.js +24 -2
  148. package/dist/runtime/mlx/runtime.js.map +1 -1
  149. package/dist/runtime/sglang/adapter.d.ts +4 -0
  150. package/dist/runtime/sglang/adapter.js +9 -6
  151. package/dist/runtime/sglang/adapter.js.map +1 -1
  152. package/dist/runtime/sglang/engine.js +2 -1
  153. package/dist/runtime/sglang/engine.js.map +1 -1
  154. package/dist/runtime/sglang/memory.d.ts +11 -1
  155. package/dist/runtime/sglang/memory.js +34 -3
  156. package/dist/runtime/sglang/memory.js.map +1 -1
  157. package/dist/runtime/sglang/settings.d.ts +2 -1
  158. package/dist/runtime/sglang/settings.js +11 -7
  159. package/dist/runtime/sglang/settings.js.map +1 -1
  160. package/dist/runtime/vllm/adapter.d.ts +4 -0
  161. package/dist/runtime/vllm/adapter.js +9 -6
  162. package/dist/runtime/vllm/adapter.js.map +1 -1
  163. package/dist/runtime/vllm/engine.js +1 -0
  164. package/dist/runtime/vllm/engine.js.map +1 -1
  165. package/dist/runtime/vllm/memory.d.ts +12 -1
  166. package/dist/runtime/vllm/memory.js +44 -2
  167. package/dist/runtime/vllm/memory.js.map +1 -1
  168. package/dist/runtime/vllm/settings.d.ts +2 -1
  169. package/dist/runtime/vllm/settings.js +12 -7
  170. package/dist/runtime/vllm/settings.js.map +1 -1
  171. package/dist/server/public/context-window.d.ts +29 -0
  172. package/dist/server/public/context-window.js +77 -0
  173. package/dist/server/public/context-window.js.map +1 -0
  174. package/dist/server/public/decision-preview.js +1 -0
  175. package/dist/server/public/decision-preview.js.map +1 -1
  176. package/dist/server/public/errors.d.ts +15 -4
  177. package/dist/server/public/errors.js +53 -7
  178. package/dist/server/public/errors.js.map +1 -1
  179. package/dist/server/public/forward.js +65 -5
  180. package/dist/server/public/forward.js.map +1 -1
  181. package/dist/server/public/index.d.ts +1 -0
  182. package/dist/server/public/index.js +1 -0
  183. package/dist/server/public/index.js.map +1 -1
  184. package/dist/server/public/listing.d.ts +9 -2
  185. package/dist/server/public/listing.js +30 -9
  186. package/dist/server/public/listing.js.map +1 -1
  187. package/dist/server/public/responses.js +9 -5
  188. package/dist/server/public/responses.js.map +1 -1
  189. package/dist/server/public/system-messages.d.ts +39 -0
  190. package/dist/server/public/system-messages.js +166 -0
  191. package/dist/server/public/system-messages.js.map +1 -0
  192. package/dist/server/public/telemetry.d.ts +9 -0
  193. package/dist/server/public/telemetry.js +42 -6
  194. package/dist/server/public/telemetry.js.map +1 -1
  195. package/dist/server/public/thinking.d.ts +26 -0
  196. package/dist/server/public/thinking.js +62 -0
  197. package/dist/server/public/thinking.js.map +1 -0
  198. package/dist/server/public/trace.d.ts +8 -0
  199. package/dist/server/public/trace.js +17 -0
  200. package/dist/server/public/trace.js.map +1 -1
  201. package/dist/server/public/types.d.ts +8 -0
  202. package/dist/server/shims/index.d.ts +1 -0
  203. package/dist/server/shims/index.js +1 -0
  204. package/dist/server/shims/index.js.map +1 -1
  205. package/dist/server/shims/reminders.d.ts +8 -0
  206. package/dist/server/shims/reminders.js +14 -0
  207. package/dist/server/shims/reminders.js.map +1 -0
  208. package/dist/server/shims/responses.d.ts +33 -9
  209. package/dist/server/shims/responses.js +160 -36
  210. package/dist/server/shims/responses.js.map +1 -1
  211. package/dist/settings/default-migrations.d.ts +34 -0
  212. package/dist/settings/default-migrations.js +47 -0
  213. package/dist/settings/default-migrations.js.map +1 -0
  214. package/dist/settings/schema/atomic-prism.json +23 -9
  215. package/dist/settings/schema/llamacpp-upstream.json +23 -9
  216. package/dist/settings/schema/llamacpp.json +23 -9
  217. package/dist/settings/schema/sglang.json +8 -8
  218. package/dist/settings/schema/vllm.json +8 -8
  219. package/dist/settings/schema.js +1 -0
  220. package/dist/settings/schema.js.map +1 -1
  221. package/dist/settings/store.d.ts +6 -0
  222. package/dist/settings/store.js +18 -1
  223. package/dist/settings/store.js.map +1 -1
  224. package/dist/version.d.ts +1 -1
  225. package/dist/version.js +1 -1
  226. package/package.json +1 -1
@@ -1,16 +1,147 @@
1
1
  /**
2
- * Goose reads `GOOSE_PROVIDER` / `GOOSE_MODEL` plus the OpenAI host variables from the environment;
3
- * there is no provider file to patch. Goose appends its own path, so `OPENAI_HOST` is the bare
4
- * host:port (the catalog marks it `endpointWithPrefix: false`) and `OPENAI_BASE_PATH` carries the
5
- * chat-completions path.
2
+ * Goose — a connection writes nothing. `launch` starts `goose session` with its provider, model,
3
+ * endpoint, key and window in that one process's environment (`childEnv` in the catalog), so nothing
4
+ * outside it changes.
6
5
  *
7
- * The block also holds `OPENAI_*` variables, which do not share the `GOOSE_` prefix. Rerun stays
8
- * idempotent because the whole marked region is removed first; the prefix filter is only the safety
9
- * net for stray lines outside it, which is why a user's own `export OPENAI_API_KEY` survives.
6
+ * Earlier releases saved the same variables for the whole user instead — a marked block in the shell
7
+ * rc file, or `setx` on Windows — which pointed every OpenAI SDK tool on the machine at Atomic Chat
8
+ * (`OPENAI_API_KEY`, `OPENAI_HOST`). Configuring takes exactly that out again, and nothing a user
9
+ * wrote. Port of `goose_config.rs` in the app.
10
10
  */
11
+ import { AtomicCoreError } from '../../contracts/index.js';
11
12
  import { registerWriter } from './registry.js';
12
- import { configureEnvAgent } from './env-agent.js';
13
- const MARKER = '# Atomic Chat - Goose Config';
14
- export const configureGoose = (input) => configureEnvAgent(input, { agentId: 'goose', marker: MARKER, prefix: 'GOOSE_' });
13
+ /** The line that opened and closed the block earlier releases wrote. */
14
+ export const LEGACY_SHELL_MARKER = '# Atomic Chat - Goose Config';
15
+ /** The variables that block (or `setx`) held. */
16
+ const LEGACY_VARS = ['GOOSE_PROVIDER', 'GOOSE_MODEL', 'OPENAI_HOST', 'OPENAI_BASE_PATH', 'OPENAI_API_KEY'];
17
+ const LEGACY_BASE_PATH = 'v1/chat/completions';
18
+ /** The key written when the server had none. */
19
+ const KEY_PLACEHOLDER = 'atomic';
20
+ /** The rc files `shellRcFile` could have picked for the `$SHELL` of the time. */
21
+ const LEGACY_RC_FILES = ['.zshenv', '.bashrc', '.bash_profile'];
22
+ function isLegacyExport(line) {
23
+ const rest = line.trimStart();
24
+ if (!rest.startsWith('export '))
25
+ return false;
26
+ const eq = rest.indexOf('=');
27
+ return eq >= 0 && LEGACY_VARS.includes(rest.slice('export '.length, eq).trim());
28
+ }
29
+ /**
30
+ * `content` without our Goose blocks, or `undefined` when it has none. A block runs from one marker
31
+ * line to the next; within it only the marker lines, our `export` lines and blank lines go — anything
32
+ * else a user put there stays. A marker without a partner goes alone.
33
+ */
34
+ export function stripLegacyGooseBlock(content) {
35
+ const lines = content.split('\n');
36
+ const markers = lines.flatMap((line, i) => (line.startsWith(LEGACY_SHELL_MARKER) ? [i] : []));
37
+ if (markers.length === 0)
38
+ return undefined;
39
+ const inBlock = (i) => {
40
+ for (let p = 0; p + 1 < markers.length; p += 2) {
41
+ if (markers[p] < i && i < markers[p + 1])
42
+ return true;
43
+ }
44
+ return false;
45
+ };
46
+ return lines
47
+ .filter((line, i) => {
48
+ if (markers.includes(i))
49
+ return false;
50
+ return !(inBlock(i) && (line.trim() === '' || isLegacyExport(line)));
51
+ })
52
+ .join('\n');
53
+ }
54
+ /** `localhost`, loopback, unspecified, private or link-local: a host an earlier release pointed at. */
55
+ function isLocalUrl(raw) {
56
+ let host;
57
+ try {
58
+ host = new URL(raw.includes('://') ? raw : `http://${raw}`).hostname.toLowerCase();
59
+ }
60
+ catch {
61
+ return false;
62
+ }
63
+ host = host.replace(/^\[|\]$/g, '');
64
+ if (host === 'localhost' || host.endsWith('.localhost') || host === '::1' || host === '::')
65
+ return true;
66
+ if (/^f[cd][0-9a-f]{2}:/.test(host) || /^fe[89ab][0-9a-f]:/.test(host))
67
+ return true;
68
+ const v4 = host.match(/^(\d+)\.(\d+)\.(\d+)\.(\d+)$/);
69
+ if (!v4)
70
+ return false;
71
+ const [a, b] = [Number(v4[1]), Number(v4[2])];
72
+ return (a === 127 ||
73
+ a === 10 ||
74
+ a === 0 ||
75
+ (a === 172 && b >= 16 && b <= 31) ||
76
+ (a === 192 && b === 168) ||
77
+ (a === 169 && b === 254));
78
+ }
79
+ /**
80
+ * The User-scope variables (`read` looks one up) that are recognisably what an earlier release set
81
+ * with `setx`: Goose on the OpenAI provider with our fixed base path at a local host. The key goes
82
+ * only when it is our placeholder or the server's own key.
83
+ */
84
+ export function legacyGooseUserVars(read, apiKey) {
85
+ const ours = read('GOOSE_PROVIDER')?.trim() === 'openai' &&
86
+ read('OPENAI_BASE_PATH')?.trim() === LEGACY_BASE_PATH &&
87
+ isLocalUrl(read('OPENAI_HOST') ?? '');
88
+ if (!ours)
89
+ return [];
90
+ return LEGACY_VARS.filter((name) => {
91
+ const value = read(name);
92
+ if (value === undefined)
93
+ return false;
94
+ if (name === 'OPENAI_API_KEY')
95
+ return value === KEY_PLACEHOLDER || (apiKey !== '' && value === apiKey);
96
+ return true;
97
+ });
98
+ }
99
+ /** `reg query HKCU\Environment /v <name>`'s value, `undefined` when there is none. */
100
+ async function readUserVar(spawn, name) {
101
+ const result = await spawn('reg', ['query', 'HKCU\\Environment', '/v', name]).catch(() => undefined);
102
+ if (!result || result.code !== 0)
103
+ return undefined;
104
+ for (const line of result.stdout.split(/\r?\n/)) {
105
+ const match = line.match(/^\s+(\S+)\s+REG_\w+\s+(.*)$/);
106
+ if (match && match[1]?.toLowerCase() === name.toLowerCase()) {
107
+ // `(.*)` always takes part in a match, so group 2 is a string here.
108
+ const value = match[2].trim();
109
+ return value === '' ? undefined : value;
110
+ }
111
+ }
112
+ return undefined;
113
+ }
114
+ export const configureGoose = async (input) => {
115
+ const { fs } = input;
116
+ for (const rc of LEGACY_RC_FILES) {
117
+ const content = await fs.read(rc);
118
+ if (content === undefined)
119
+ continue;
120
+ const cleaned = stripLegacyGooseBlock(content);
121
+ if (cleaned !== undefined)
122
+ await fs.write(rc, cleaned);
123
+ }
124
+ if (input.platform !== 'win32' || !input.spawn)
125
+ return;
126
+ const spawn = input.spawn;
127
+ const values = new Map();
128
+ for (const name of LEGACY_VARS) {
129
+ const value = await readUserVar(spawn, name);
130
+ if (value !== undefined)
131
+ values.set(name, value);
132
+ }
133
+ const names = legacyGooseUserVars((name) => values.get(name), input.apiKey);
134
+ if (names.length === 0)
135
+ return;
136
+ // `SetEnvironmentVariable(…, $null, 'User')` deletes the value and broadcasts WM_SETTINGCHANGE,
137
+ // as `setx` did when it set it. The names are our constants.
138
+ const script = names
139
+ .map((name) => `[Environment]::SetEnvironmentVariable('${name}', $null, 'User')`)
140
+ .join('; ');
141
+ const result = await spawn('powershell', ['-NoProfile', '-NonInteractive', '-Command', script]);
142
+ if (result.code !== 0) {
143
+ throw new AtomicCoreError('IO_ERROR', `Could not remove the Goose variables an earlier Atomic Chat set: ${result.stderr.trim()}`);
144
+ }
145
+ };
15
146
  registerWriter('goose', configureGoose);
16
147
  //# sourceMappingURL=goose.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"goose.js","sourceRoot":"","sources":["../../../src/integrations/configure/goose.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAGH,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAA;AAC9C,OAAO,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAA;AAElD,MAAM,MAAM,GAAG,8BAA8B,CAAA;AAE7C,MAAM,CAAC,MAAM,cAAc,GAAoB,CAAC,KAAK,EAAE,EAAE,CACvD,iBAAiB,CAAC,KAAK,EAAE,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,CAAA;AAElF,cAAc,CAAC,OAAO,EAAE,cAAc,CAAC,CAAA"}
1
+ {"version":3,"file":"goose.js","sourceRoot":"","sources":["../../../src/integrations/configure/goose.ts"],"names":[],"mappings":"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"}
@@ -3,17 +3,34 @@
3
3
  *
4
4
  * That is deliberate: the file is hand-edited, heavily commented, and its `custom_providers` list
5
5
  * carries the user's own bridges (Telegram, WhatsApp, …). A YAML round trip would drop every comment
6
- * and reflow every block for the sake of three scalars. So we rewrite only the lines we own and
6
+ * and reflow every block for the sake of a few scalars. So we rewrite only the lines we own and
7
7
  * splice our list entry in, leaving everything else byte-identical.
8
8
  *
9
- * Hermes ignores the API key entirely (`api_key` is accepted for call-site symmetry and reserved),
10
- * and `.env` is patched only when it already exists — creating one would shadow the agent's own
11
- * defaults.
9
+ * The route is bare `custom` with `model.base_url` and `model.api_key`: Hermes trusts that URL while
10
+ * `model.provider` is `custom` and takes the key from the same section, so the route needs nothing
11
+ * outside it — unlike `custom:atomic-chat`, which needs our `custom_providers` entry, and that cannot
12
+ * be added to an inline `custom_providers: [...]` list. The entry is still written where it can be,
13
+ * for `hermes model` and detection. What the edit replaced is recorded in
14
+ * `config.yaml.atomic-chat-backup.json` for the app's Disconnect. `.env` is patched only when it
15
+ * already exists — creating one would shadow the agent's own defaults.
16
+ *
17
+ * Mirrors `configure_hermes_at` in the app's `core/system/commands.rs`, byte for byte.
12
18
  */
13
19
  import type { ConfigFs } from '../config-io.js';
14
20
  import type { ConfigureWriter } from './registry.js';
15
21
  /** Rewrite everything after the first colon, with no quoting — the values here never need it. */
16
22
  export declare function replaceYamlScalarValue(line: string, value: string): string;
23
+ /**
24
+ * Point the top-level `model:` section at our endpoint, and touch nothing outside it.
25
+ *
26
+ * Hermes' chat route comes from `model.default` (`model.model` is an alias), `model.provider` and
27
+ * `model.base_url`; a section it cannot read leaves it on its built-in default, an empty model on
28
+ * provider `auto`, which falls through to OpenRouter. The same keys recur under `auxiliary:`,
29
+ * `delegation:`, `compression:` and others, so only direct children of the top-level `model:` key are
30
+ * ours. A missing key is added, a scalar `model: <id>` (also valid Hermes) becomes a block, and a file
31
+ * with no `model:` at all gets one appended.
32
+ */
33
+ export declare function patchModelSection(content: string, wanted: Array<[string, string]>): string;
17
34
  /**
18
35
  * Split the document into (before, entries, after) around `custom_providers:`. `entries` is one
19
36
  * array of raw lines per list item; blank lines inside the block are dropped, which is why a rerun
@@ -26,16 +43,52 @@ export declare function splitCustomProviders(content: string): {
26
43
  };
27
44
  /** Re-emit the block: items at column 0, or `custom_providers: []` when nothing is left. */
28
45
  export declare function rebuildCustomProviders(before: string[], entries: string[][], after: string[]): string;
29
- /** Add or update only our entry, leaving the user's other bridges untouched and in order. */
30
- export declare function upsertAtomicProvider(content: string, apiUrl: string, model: string, ctx: number): string;
46
+ /**
47
+ * Add or update only our entry, leaving the user's other bridges untouched and in order; also says
48
+ * whether the `custom_providers` key itself was added. `key` is already a YAML scalar.
49
+ */
50
+ export declare function upsertAtomicProvider(content: string, apiUrl: string, model: string, ctx: number, key: string): [string, boolean];
31
51
  /**
32
52
  * Ensure `providers.<id>.request_timeout_seconds` exists, creating the `providers:` map and the
33
53
  * provider sub-block as needed. A value the user already set is left alone — we only fill the gap.
54
+ * Also returns what it created, for Disconnect: `providers`, `providers:{}` (an empty inline map
55
+ * turned into a block), `providers.<id>` and `providers.<id>.request_timeout_seconds`.
56
+ */
57
+ export declare function upsertProviderRequestTimeout(content: string, providerId: string, seconds: number): [string, string[]];
58
+ /** One `model:` key Connect wrote: the lines it replaced (absent: none) and the value it wrote. */
59
+ interface KeyBackup {
60
+ before?: string[];
61
+ ours: string;
62
+ }
63
+ /** What Connect changed in `config.yaml` (the app's `HermesBackup`). */
64
+ export interface HermesBackup {
65
+ /** The `model:` line before Connect; absent when there was no section. */
66
+ header?: string;
67
+ keys: Record<string, KeyBackup>;
68
+ /** What Connect added that was not there at all (see `upsertProviderRequestTimeout`). */
69
+ created: string[];
70
+ }
71
+ export declare function parseHermesBackup(text: string): HermesBackup | undefined;
72
+ export declare function renderHermesBackup(backup: HermesBackup): string;
73
+ /**
74
+ * The backup of a Connect that wrote `route` over `content`. A key an earlier Connect recorded keeps
75
+ * that record's original while it still holds the value that Connect wrote; otherwise the user
76
+ * changed it since, and the current lines are the ones to return to.
77
+ */
78
+ export declare function hermesBackup(content: string, route: Array<[string, string]>, previous: HermesBackup | undefined, created: string[]): HermesBackup;
79
+ /**
80
+ * `HERMES_HOME` as Hermes reads it (`os.path.expanduser(os.path.expandvars(...))`): `$NAME`,
81
+ * `${NAME}` and `%NAME%` take the variable's value (an unset one stays as written), then a leading
82
+ * `~` is the user's home.
34
83
  */
35
- export declare function upsertProviderRequestTimeout(content: string, providerId: string, seconds: number): string;
84
+ export declare function expandHermesHome(raw: string, env: NodeJS.ProcessEnv, home: string): string;
36
85
  /**
37
- * `~/.hermes` everywhere except Windows, where the installer writes `HERMES_HOME` to the user
38
- * environment and the CLI honours it.
86
+ * The directory whose `config.yaml` the `hermes` CLI reads (`resolve_hermes_dir` in the app):
87
+ * `HERMES_HOME` (expanded) or the platform default (`%LOCALAPPDATA%/hermes` on Windows, `~/.hermes`
88
+ * elsewhere) is the root; a `HERMES_HOME` naming a profile (`<root>/profiles/<name>`) is used as it
89
+ * is; otherwise the sticky profile `hermes profile use <name>` leaves in `<root>/active_profile` is
90
+ * what every `hermes` without `-p` runs, from `<root>/profiles/<name>`.
39
91
  */
40
- export declare function hermesDir(env: NodeJS.ProcessEnv, platform: NodeJS.Platform, fs: ConfigFs): string;
92
+ export declare function hermesDir(env: NodeJS.ProcessEnv, platform: NodeJS.Platform, fs: ConfigFs): Promise<string>;
41
93
  export declare const configureHermes: ConfigureWriter;
94
+ export {};