shennian 0.2.0 → 0.2.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/bin/shennian.d.ts +0 -1
- package/dist/bin/shennian.js +0 -1
- package/dist/src/agents/adapter.d.ts +0 -1
- package/dist/src/agents/adapter.js +0 -1
- package/dist/src/agents/claude.d.ts +1 -1
- package/dist/src/agents/claude.js +12 -6
- package/dist/src/agents/codex.d.ts +18 -1
- package/dist/src/agents/codex.js +372 -13
- package/dist/src/agents/command-spec.d.ts +28 -3
- package/dist/src/agents/command-spec.js +251 -10
- package/dist/src/agents/cursor.d.ts +0 -1
- package/dist/src/agents/cursor.js +2 -4
- package/dist/src/agents/custom.d.ts +0 -6
- package/dist/src/agents/custom.js +4 -40
- package/dist/src/agents/detect.d.ts +0 -1
- package/dist/src/agents/detect.js +0 -1
- package/dist/src/agents/gemini.d.ts +0 -1
- package/dist/src/agents/gemini.js +7 -3
- package/dist/src/agents/model-registry/cache.d.ts +0 -1
- package/dist/src/agents/model-registry/cache.js +0 -1
- package/dist/src/agents/model-registry/discovery.d.ts +0 -1
- package/dist/src/agents/model-registry/discovery.js +90 -48
- package/dist/src/agents/model-registry/parsers.d.ts +4 -1
- package/dist/src/agents/model-registry/parsers.js +168 -1
- package/dist/src/agents/model-registry/runner.d.ts +2 -7
- package/dist/src/agents/model-registry/runner.js +3 -134
- package/dist/src/agents/model-registry/service.d.ts +0 -1
- package/dist/src/agents/model-registry/service.js +12 -10
- package/dist/src/agents/model-registry/types.d.ts +0 -1
- package/dist/src/agents/model-registry/types.js +0 -1
- package/dist/src/agents/model-registry.d.ts +3 -2
- package/dist/src/agents/model-registry.js +3 -2
- package/dist/src/agents/openclaw.d.ts +0 -1
- package/dist/src/agents/openclaw.js +13 -4
- package/dist/src/agents/pi.d.ts +0 -1
- package/dist/src/agents/pi.js +0 -1
- package/dist/src/commands/agent.d.ts +0 -1
- package/dist/src/commands/agent.js +2 -33
- package/dist/src/commands/daemon.d.ts +6 -1
- package/dist/src/commands/daemon.js +153 -18
- package/dist/src/commands/pair-qr.d.ts +0 -1
- package/dist/src/commands/pair-qr.js +0 -1
- package/dist/src/commands/pair.d.ts +0 -1
- package/dist/src/commands/pair.js +0 -1
- package/dist/src/commands/upgrade.d.ts +0 -1
- package/dist/src/commands/upgrade.js +0 -1
- package/dist/src/config/index.d.ts +0 -1
- package/dist/src/config/index.js +0 -1
- package/dist/src/fs/handler.d.ts +0 -1
- package/dist/src/fs/handler.js +18 -1
- package/dist/src/fs/security.d.ts +0 -1
- package/dist/src/fs/security.js +5 -1
- package/dist/src/index.d.ts +0 -1
- package/dist/src/index.js +36 -8
- package/dist/src/log-reporter.d.ts +0 -1
- package/dist/src/log-reporter.js +2 -20
- package/dist/src/native-fusion/parsers.d.ts +0 -1
- package/dist/src/native-fusion/parsers.js +407 -44
- package/dist/src/native-fusion/service.d.ts +0 -1
- package/dist/src/native-fusion/service.js +16 -10
- package/dist/src/native-fusion/state.d.ts +0 -1
- package/dist/src/native-fusion/state.js +0 -1
- package/dist/src/native-fusion/types.d.ts +0 -1
- package/dist/src/native-fusion/types.js +0 -1
- package/dist/src/region.d.ts +0 -1
- package/dist/src/region.js +0 -1
- package/dist/src/relay/client.d.ts +11 -2
- package/dist/src/relay/client.js +22 -4
- package/dist/src/session/handlers/agents.d.ts +0 -1
- package/dist/src/session/handlers/agents.js +0 -1
- package/dist/src/session/handlers/chat.d.ts +0 -1
- package/dist/src/session/handlers/chat.js +49 -8
- package/dist/src/session/handlers/control.d.ts +0 -1
- package/dist/src/session/handlers/control.js +0 -1
- package/dist/src/session/handlers/fs.d.ts +0 -1
- package/dist/src/session/handlers/fs.js +37 -3
- package/dist/src/session/manager.d.ts +1 -1
- package/dist/src/session/manager.js +23 -4
- package/dist/src/session/store.d.ts +0 -1
- package/dist/src/session/store.js +0 -1
- package/dist/src/session/types.d.ts +6 -1
- package/dist/src/session/types.js +0 -1
- package/dist/src/upgrade/engine.d.ts +0 -1
- package/dist/src/upgrade/engine.js +0 -1
- package/package.json +3 -2
- package/dist/bin/shennian.d.ts.map +0 -1
- package/dist/bin/shennian.js.map +0 -1
- package/dist/src/__experiments__/probe-debug.d.ts +0 -2
- package/dist/src/__experiments__/probe-debug.d.ts.map +0 -1
- package/dist/src/__experiments__/probe-debug.js +0 -66
- package/dist/src/__experiments__/probe-debug.js.map +0 -1
- package/dist/src/__experiments__/probe-final-benchmark.d.ts +0 -3
- package/dist/src/__experiments__/probe-final-benchmark.d.ts.map +0 -1
- package/dist/src/__experiments__/probe-final-benchmark.js +0 -234
- package/dist/src/__experiments__/probe-final-benchmark.js.map +0 -1
- package/dist/src/__experiments__/probe-models-final.d.ts +0 -19
- package/dist/src/__experiments__/probe-models-final.d.ts.map +0 -1
- package/dist/src/__experiments__/probe-models-final.js +0 -250
- package/dist/src/__experiments__/probe-models-final.js.map +0 -1
- package/dist/src/__experiments__/probe-models.d.ts +0 -7
- package/dist/src/__experiments__/probe-models.d.ts.map +0 -1
- package/dist/src/__experiments__/probe-models.js +0 -251
- package/dist/src/__experiments__/probe-models.js.map +0 -1
- package/dist/src/__tests__/agents-e2e.d.ts +0 -21
- package/dist/src/__tests__/agents-e2e.d.ts.map +0 -1
- package/dist/src/__tests__/agents-e2e.js +0 -146
- package/dist/src/__tests__/agents-e2e.js.map +0 -1
- package/dist/src/__tests__/claude-adapter.test.d.ts +0 -2
- package/dist/src/__tests__/claude-adapter.test.d.ts.map +0 -1
- package/dist/src/__tests__/claude-adapter.test.js +0 -75
- package/dist/src/__tests__/claude-adapter.test.js.map +0 -1
- package/dist/src/__tests__/codex-adapter.test.d.ts +0 -2
- package/dist/src/__tests__/codex-adapter.test.d.ts.map +0 -1
- package/dist/src/__tests__/codex-adapter.test.js +0 -224
- package/dist/src/__tests__/codex-adapter.test.js.map +0 -1
- package/dist/src/__tests__/config.test.d.ts +0 -2
- package/dist/src/__tests__/config.test.d.ts.map +0 -1
- package/dist/src/__tests__/config.test.js +0 -60
- package/dist/src/__tests__/config.test.js.map +0 -1
- package/dist/src/__tests__/cursor-adapter.test.d.ts +0 -2
- package/dist/src/__tests__/cursor-adapter.test.d.ts.map +0 -1
- package/dist/src/__tests__/cursor-adapter.test.js +0 -69
- package/dist/src/__tests__/cursor-adapter.test.js.map +0 -1
- package/dist/src/__tests__/custom-agent-flow.test.d.ts +0 -2
- package/dist/src/__tests__/custom-agent-flow.test.d.ts.map +0 -1
- package/dist/src/__tests__/custom-agent-flow.test.js +0 -244
- package/dist/src/__tests__/custom-agent-flow.test.js.map +0 -1
- package/dist/src/__tests__/daemon-autostart.test.d.ts +0 -2
- package/dist/src/__tests__/daemon-autostart.test.d.ts.map +0 -1
- package/dist/src/__tests__/daemon-autostart.test.js +0 -60
- package/dist/src/__tests__/daemon-autostart.test.js.map +0 -1
- package/dist/src/__tests__/e2e-relay.d.ts +0 -19
- package/dist/src/__tests__/e2e-relay.d.ts.map +0 -1
- package/dist/src/__tests__/e2e-relay.js +0 -256
- package/dist/src/__tests__/e2e-relay.js.map +0 -1
- package/dist/src/__tests__/model-discovery.test.d.ts +0 -2
- package/dist/src/__tests__/model-discovery.test.d.ts.map +0 -1
- package/dist/src/__tests__/model-discovery.test.js +0 -47
- package/dist/src/__tests__/model-discovery.test.js.map +0 -1
- package/dist/src/__tests__/model-switching.test.d.ts +0 -2
- package/dist/src/__tests__/model-switching.test.d.ts.map +0 -1
- package/dist/src/__tests__/model-switching.test.js +0 -253
- package/dist/src/__tests__/model-switching.test.js.map +0 -1
- package/dist/src/__tests__/native-fusion-parsers.test.d.ts +0 -2
- package/dist/src/__tests__/native-fusion-parsers.test.d.ts.map +0 -1
- package/dist/src/__tests__/native-fusion-parsers.test.js +0 -216
- package/dist/src/__tests__/native-fusion-parsers.test.js.map +0 -1
- package/dist/src/__tests__/native-fusion-service.test.d.ts +0 -2
- package/dist/src/__tests__/native-fusion-service.test.d.ts.map +0 -1
- package/dist/src/__tests__/native-fusion-service.test.js +0 -157
- package/dist/src/__tests__/native-fusion-service.test.js.map +0 -1
- package/dist/src/__tests__/native-session-sync.test.d.ts +0 -2
- package/dist/src/__tests__/native-session-sync.test.d.ts.map +0 -1
- package/dist/src/__tests__/native-session-sync.test.js +0 -198
- package/dist/src/__tests__/native-session-sync.test.js.map +0 -1
- package/dist/src/__tests__/pair-qr.test.d.ts +0 -2
- package/dist/src/__tests__/pair-qr.test.d.ts.map +0 -1
- package/dist/src/__tests__/pair-qr.test.js +0 -13
- package/dist/src/__tests__/pair-qr.test.js.map +0 -1
- package/dist/src/__tests__/pi-context.test.d.ts +0 -2
- package/dist/src/__tests__/pi-context.test.d.ts.map +0 -1
- package/dist/src/__tests__/pi-context.test.js +0 -261
- package/dist/src/__tests__/pi-context.test.js.map +0 -1
- package/dist/src/__tests__/session-manager.test.d.ts +0 -2
- package/dist/src/__tests__/session-manager.test.d.ts.map +0 -1
- package/dist/src/__tests__/session-manager.test.js +0 -592
- package/dist/src/__tests__/session-manager.test.js.map +0 -1
- package/dist/src/__tests__/session-store.test.d.ts +0 -2
- package/dist/src/__tests__/session-store.test.d.ts.map +0 -1
- package/dist/src/__tests__/session-store.test.js +0 -106
- package/dist/src/__tests__/session-store.test.js.map +0 -1
- package/dist/src/agents/adapter.d.ts.map +0 -1
- package/dist/src/agents/adapter.js.map +0 -1
- package/dist/src/agents/claude.d.ts.map +0 -1
- package/dist/src/agents/claude.js.map +0 -1
- package/dist/src/agents/codex.d.ts.map +0 -1
- package/dist/src/agents/codex.js.map +0 -1
- package/dist/src/agents/command-spec.d.ts.map +0 -1
- package/dist/src/agents/command-spec.js.map +0 -1
- package/dist/src/agents/cursor.d.ts.map +0 -1
- package/dist/src/agents/cursor.js.map +0 -1
- package/dist/src/agents/custom.d.ts.map +0 -1
- package/dist/src/agents/custom.js.map +0 -1
- package/dist/src/agents/detect.d.ts.map +0 -1
- package/dist/src/agents/detect.js.map +0 -1
- package/dist/src/agents/gemini.d.ts.map +0 -1
- package/dist/src/agents/gemini.js.map +0 -1
- package/dist/src/agents/model-registry/cache.d.ts.map +0 -1
- package/dist/src/agents/model-registry/cache.js.map +0 -1
- package/dist/src/agents/model-registry/discovery.d.ts.map +0 -1
- package/dist/src/agents/model-registry/discovery.js.map +0 -1
- package/dist/src/agents/model-registry/parsers.d.ts.map +0 -1
- package/dist/src/agents/model-registry/parsers.js.map +0 -1
- package/dist/src/agents/model-registry/runner.d.ts.map +0 -1
- package/dist/src/agents/model-registry/runner.js.map +0 -1
- package/dist/src/agents/model-registry/service.d.ts.map +0 -1
- package/dist/src/agents/model-registry/service.js.map +0 -1
- package/dist/src/agents/model-registry/types.d.ts.map +0 -1
- package/dist/src/agents/model-registry/types.js.map +0 -1
- package/dist/src/agents/model-registry.d.ts.map +0 -1
- package/dist/src/agents/model-registry.js.map +0 -1
- package/dist/src/agents/openclaw.d.ts.map +0 -1
- package/dist/src/agents/openclaw.js.map +0 -1
- package/dist/src/agents/pi.d.ts.map +0 -1
- package/dist/src/agents/pi.js.map +0 -1
- package/dist/src/commands/agent.d.ts.map +0 -1
- package/dist/src/commands/agent.js.map +0 -1
- package/dist/src/commands/daemon.d.ts.map +0 -1
- package/dist/src/commands/daemon.js.map +0 -1
- package/dist/src/commands/pair-qr.d.ts.map +0 -1
- package/dist/src/commands/pair-qr.js.map +0 -1
- package/dist/src/commands/pair.d.ts.map +0 -1
- package/dist/src/commands/pair.js.map +0 -1
- package/dist/src/commands/upgrade.d.ts.map +0 -1
- package/dist/src/commands/upgrade.js.map +0 -1
- package/dist/src/config/index.d.ts.map +0 -1
- package/dist/src/config/index.js.map +0 -1
- package/dist/src/fs/handler.d.ts.map +0 -1
- package/dist/src/fs/handler.js.map +0 -1
- package/dist/src/fs/multimodal.d.ts +0 -5
- package/dist/src/fs/multimodal.d.ts.map +0 -1
- package/dist/src/fs/multimodal.js +0 -39
- package/dist/src/fs/multimodal.js.map +0 -1
- package/dist/src/fs/security.d.ts.map +0 -1
- package/dist/src/fs/security.js.map +0 -1
- package/dist/src/index.d.ts.map +0 -1
- package/dist/src/index.js.map +0 -1
- package/dist/src/log-reporter.d.ts.map +0 -1
- package/dist/src/log-reporter.js.map +0 -1
- package/dist/src/native-fusion/parsers.d.ts.map +0 -1
- package/dist/src/native-fusion/parsers.js.map +0 -1
- package/dist/src/native-fusion/service.d.ts.map +0 -1
- package/dist/src/native-fusion/service.js.map +0 -1
- package/dist/src/native-fusion/state.d.ts.map +0 -1
- package/dist/src/native-fusion/state.js.map +0 -1
- package/dist/src/native-fusion/types.d.ts.map +0 -1
- package/dist/src/native-fusion/types.js.map +0 -1
- package/dist/src/native-sync/discover.d.ts +0 -6
- package/dist/src/native-sync/discover.d.ts.map +0 -1
- package/dist/src/native-sync/discover.js +0 -69
- package/dist/src/native-sync/discover.js.map +0 -1
- package/dist/src/native-sync/parsers.d.ts +0 -3
- package/dist/src/native-sync/parsers.d.ts.map +0 -1
- package/dist/src/native-sync/parsers.js +0 -373
- package/dist/src/native-sync/parsers.js.map +0 -1
- package/dist/src/native-sync/service.d.ts +0 -16
- package/dist/src/native-sync/service.d.ts.map +0 -1
- package/dist/src/native-sync/service.js +0 -95
- package/dist/src/native-sync/service.js.map +0 -1
- package/dist/src/native-sync/state.d.ts +0 -6
- package/dist/src/native-sync/state.d.ts.map +0 -1
- package/dist/src/native-sync/state.js +0 -34
- package/dist/src/native-sync/state.js.map +0 -1
- package/dist/src/native-sync/types.d.ts +0 -23
- package/dist/src/native-sync/types.d.ts.map +0 -1
- package/dist/src/native-sync/types.js +0 -4
- package/dist/src/native-sync/types.js.map +0 -1
- package/dist/src/region.d.ts.map +0 -1
- package/dist/src/region.js.map +0 -1
- package/dist/src/relay/client.d.ts.map +0 -1
- package/dist/src/relay/client.js.map +0 -1
- package/dist/src/session/handlers/agents.d.ts.map +0 -1
- package/dist/src/session/handlers/agents.js.map +0 -1
- package/dist/src/session/handlers/chat.d.ts.map +0 -1
- package/dist/src/session/handlers/chat.js.map +0 -1
- package/dist/src/session/handlers/control.d.ts.map +0 -1
- package/dist/src/session/handlers/control.js.map +0 -1
- package/dist/src/session/handlers/fs.d.ts.map +0 -1
- package/dist/src/session/handlers/fs.js.map +0 -1
- package/dist/src/session/handlers/queue.d.ts +0 -4
- package/dist/src/session/handlers/queue.d.ts.map +0 -1
- package/dist/src/session/handlers/queue.js +0 -66
- package/dist/src/session/handlers/queue.js.map +0 -1
- package/dist/src/session/manager.d.ts.map +0 -1
- package/dist/src/session/manager.js.map +0 -1
- package/dist/src/session/store.d.ts.map +0 -1
- package/dist/src/session/store.js.map +0 -1
- package/dist/src/session/types.d.ts.map +0 -1
- package/dist/src/session/types.js.map +0 -1
- package/dist/src/upgrade/engine.d.ts.map +0 -1
- package/dist/src/upgrade/engine.js.map +0 -1
- package/dist/tsconfig.tsbuildinfo +0 -1
|
@@ -34,6 +34,20 @@ function prettifyCodexModel(id) {
|
|
|
34
34
|
})
|
|
35
35
|
.join('-');
|
|
36
36
|
}
|
|
37
|
+
function prettifyReasoningEffort(id) {
|
|
38
|
+
switch (id) {
|
|
39
|
+
case 'low':
|
|
40
|
+
return 'Low';
|
|
41
|
+
case 'medium':
|
|
42
|
+
return 'Medium';
|
|
43
|
+
case 'high':
|
|
44
|
+
return 'High';
|
|
45
|
+
case 'xhigh':
|
|
46
|
+
return 'Extra High';
|
|
47
|
+
default:
|
|
48
|
+
return titleCaseSegment(id);
|
|
49
|
+
}
|
|
50
|
+
}
|
|
37
51
|
function prettifyCursorModel(id) {
|
|
38
52
|
return id
|
|
39
53
|
.split('-')
|
|
@@ -124,6 +138,78 @@ export function parseClaudeModels(raw) {
|
|
|
124
138
|
}
|
|
125
139
|
return uniqueModels(fallback);
|
|
126
140
|
}
|
|
141
|
+
function compareVersionNumbers(a, b) {
|
|
142
|
+
const length = Math.max(a.length, b.length);
|
|
143
|
+
for (let index = 0; index < length; index++) {
|
|
144
|
+
const left = a[index] ?? -1;
|
|
145
|
+
const right = b[index] ?? -1;
|
|
146
|
+
if (left === right)
|
|
147
|
+
continue;
|
|
148
|
+
return left - right;
|
|
149
|
+
}
|
|
150
|
+
return 0;
|
|
151
|
+
}
|
|
152
|
+
function extractClaudeFamilyVersion(id, family) {
|
|
153
|
+
const match = id.match(new RegExp(`^claude-${family}-([0-9]+(?:-[0-9]+)*)$`, 'i'));
|
|
154
|
+
if (!match?.[1])
|
|
155
|
+
return null;
|
|
156
|
+
const parts = match[1]
|
|
157
|
+
.split('-')
|
|
158
|
+
.map((part) => Number.parseInt(part, 10))
|
|
159
|
+
.filter((part) => Number.isFinite(part));
|
|
160
|
+
if (parts.length === 0 || parts.length > 2)
|
|
161
|
+
return null;
|
|
162
|
+
return parts;
|
|
163
|
+
}
|
|
164
|
+
function formatClaudeVersion(version) {
|
|
165
|
+
if (!version?.length)
|
|
166
|
+
return undefined;
|
|
167
|
+
return `v${version.join('.')}`;
|
|
168
|
+
}
|
|
169
|
+
export function parseClaudeBinaryModels(raw) {
|
|
170
|
+
const clean = stripAnsi(raw);
|
|
171
|
+
const aliasMap = {
|
|
172
|
+
default: 'Default (recommended)',
|
|
173
|
+
sonnet: 'Sonnet',
|
|
174
|
+
opus: 'Opus',
|
|
175
|
+
haiku: 'Haiku',
|
|
176
|
+
};
|
|
177
|
+
const familyVersions = new Map();
|
|
178
|
+
for (const family of ['sonnet', 'opus', 'haiku']) {
|
|
179
|
+
for (const match of clean.matchAll(new RegExp(`\\bclaude-${family}-[0-9.-]+\\b`, 'gi'))) {
|
|
180
|
+
const normalized = match[0].trim().toLowerCase().replace(/\./g, '-').replace(/-+$/g, '');
|
|
181
|
+
const version = extractClaudeFamilyVersion(normalized, family);
|
|
182
|
+
if (!version)
|
|
183
|
+
continue;
|
|
184
|
+
const current = familyVersions.get(family);
|
|
185
|
+
if (!current || compareVersionNumbers(current, version) < 0) {
|
|
186
|
+
familyVersions.set(family, version);
|
|
187
|
+
}
|
|
188
|
+
}
|
|
189
|
+
}
|
|
190
|
+
const models = [];
|
|
191
|
+
for (const alias of ['default', 'sonnet', 'opus', 'haiku']) {
|
|
192
|
+
if (!new RegExp(`\\b${alias}\\b`, 'i').test(clean))
|
|
193
|
+
continue;
|
|
194
|
+
const version = (alias === 'default' ? familyVersions.get('sonnet') : familyVersions.get(alias)) ?? null;
|
|
195
|
+
models.push({
|
|
196
|
+
id: alias,
|
|
197
|
+
name: aliasMap[alias],
|
|
198
|
+
description: formatClaudeVersion(version),
|
|
199
|
+
provider: 'anthropic',
|
|
200
|
+
isDefault: alias === 'default',
|
|
201
|
+
});
|
|
202
|
+
}
|
|
203
|
+
return uniqueModels(models);
|
|
204
|
+
}
|
|
205
|
+
export function fallbackClaudeAliasModels() {
|
|
206
|
+
return [
|
|
207
|
+
{ id: 'default', name: 'Default (recommended)', provider: 'anthropic', isDefault: true },
|
|
208
|
+
{ id: 'sonnet', name: 'Sonnet', provider: 'anthropic' },
|
|
209
|
+
{ id: 'opus', name: 'Opus', provider: 'anthropic' },
|
|
210
|
+
{ id: 'haiku', name: 'Haiku', provider: 'anthropic' },
|
|
211
|
+
];
|
|
212
|
+
}
|
|
127
213
|
export function parseCodexModels(raw) {
|
|
128
214
|
const clean = stripAnsi(raw);
|
|
129
215
|
const models = [];
|
|
@@ -143,6 +229,81 @@ export function parseCodexModels(raw) {
|
|
|
143
229
|
}
|
|
144
230
|
return uniqueModels(models);
|
|
145
231
|
}
|
|
232
|
+
export function parseCodexAppServerModels(raw) {
|
|
233
|
+
const data = typeof raw === 'object' && raw !== null
|
|
234
|
+
? raw
|
|
235
|
+
: {};
|
|
236
|
+
const currentModel = typeof data.config?.model === 'string' ? data.config.model : undefined;
|
|
237
|
+
const currentReasoningEffort = typeof data.config?.model_reasoning_effort === 'string'
|
|
238
|
+
? data.config.model_reasoning_effort
|
|
239
|
+
: undefined;
|
|
240
|
+
const models = [];
|
|
241
|
+
for (const entry of data.data ?? []) {
|
|
242
|
+
if (typeof entry !== 'object' || entry === null)
|
|
243
|
+
continue;
|
|
244
|
+
const item = entry;
|
|
245
|
+
const id = typeof item.id === 'string'
|
|
246
|
+
? item.id
|
|
247
|
+
: typeof item.model === 'string'
|
|
248
|
+
? item.model
|
|
249
|
+
: '';
|
|
250
|
+
if (!id)
|
|
251
|
+
continue;
|
|
252
|
+
const displayName = typeof item.displayName === 'string'
|
|
253
|
+
? item.displayName
|
|
254
|
+
: typeof item.name === 'string'
|
|
255
|
+
? item.name
|
|
256
|
+
: undefined;
|
|
257
|
+
const description = typeof item.description === 'string' ? item.description : undefined;
|
|
258
|
+
const defaultReasoningEffort = typeof item.defaultReasoningEffort === 'string'
|
|
259
|
+
? item.defaultReasoningEffort
|
|
260
|
+
: undefined;
|
|
261
|
+
const supportedReasoningEfforts = Array.isArray(item.supportedReasoningEfforts)
|
|
262
|
+
? item.supportedReasoningEfforts
|
|
263
|
+
.map((effort) => {
|
|
264
|
+
if (typeof effort !== 'object' || effort === null)
|
|
265
|
+
return null;
|
|
266
|
+
const rawEffort = effort;
|
|
267
|
+
const effortId = typeof rawEffort.reasoningEffort === 'string'
|
|
268
|
+
? rawEffort.reasoningEffort
|
|
269
|
+
: typeof rawEffort.id === 'string'
|
|
270
|
+
? rawEffort.id
|
|
271
|
+
: '';
|
|
272
|
+
if (!effortId)
|
|
273
|
+
return null;
|
|
274
|
+
return {
|
|
275
|
+
id: effortId,
|
|
276
|
+
name: prettifyReasoningEffort(effortId),
|
|
277
|
+
description: typeof rawEffort.description === 'string' ? rawEffort.description : undefined,
|
|
278
|
+
};
|
|
279
|
+
})
|
|
280
|
+
.filter((effort) => effort != null)
|
|
281
|
+
: undefined;
|
|
282
|
+
const additionalSpeedTiers = Array.isArray(item.additionalSpeedTiers)
|
|
283
|
+
? item.additionalSpeedTiers.filter((tier) => typeof tier === 'string')
|
|
284
|
+
: undefined;
|
|
285
|
+
models.push({
|
|
286
|
+
id,
|
|
287
|
+
name: displayName || prettifyCodexModel(id),
|
|
288
|
+
description,
|
|
289
|
+
provider: 'openai',
|
|
290
|
+
isDefault: currentModel ? currentModel === id : item.isDefault === true,
|
|
291
|
+
supportedReasoningEfforts,
|
|
292
|
+
defaultReasoningEffort,
|
|
293
|
+
additionalSpeedTiers,
|
|
294
|
+
});
|
|
295
|
+
}
|
|
296
|
+
if (currentModel && !models.some((model) => model.id === currentModel)) {
|
|
297
|
+
models.unshift({
|
|
298
|
+
id: currentModel,
|
|
299
|
+
name: prettifyCodexModel(currentModel),
|
|
300
|
+
provider: 'openai',
|
|
301
|
+
isDefault: true,
|
|
302
|
+
defaultReasoningEffort: currentReasoningEffort,
|
|
303
|
+
});
|
|
304
|
+
}
|
|
305
|
+
return uniqueModels(models);
|
|
306
|
+
}
|
|
146
307
|
export function parseGeminiModels(raw) {
|
|
147
308
|
const clean = stripAnsi(raw);
|
|
148
309
|
const models = [];
|
|
@@ -179,4 +340,10 @@ export function parseGeminiModels(raw) {
|
|
|
179
340
|
}
|
|
180
341
|
return uniqueModels(models);
|
|
181
342
|
}
|
|
182
|
-
|
|
343
|
+
export function fallbackGeminiModels() {
|
|
344
|
+
return [
|
|
345
|
+
{ id: 'gemini-2.5-pro', name: 'Gemini 2.5 Pro', provider: 'google', isDefault: true },
|
|
346
|
+
{ id: 'gemini-2.5-flash', name: 'Gemini 2.5 Flash', provider: 'google' },
|
|
347
|
+
{ id: 'auto-gemini-2.5', name: 'Auto Gemini 2.5', provider: 'google' },
|
|
348
|
+
];
|
|
349
|
+
}
|
|
@@ -1,11 +1,6 @@
|
|
|
1
|
-
import {
|
|
2
|
-
export declare function
|
|
1
|
+
import type { ResolvedCommandSpec } from '../command-spec.js';
|
|
2
|
+
export declare function runResolvedCommand(spec: ResolvedCommandSpec, args: string[], timeoutMs?: number): Promise<{
|
|
3
3
|
stdout: string;
|
|
4
4
|
stderr: string;
|
|
5
5
|
exitCode: number | null;
|
|
6
6
|
}>;
|
|
7
|
-
export declare function runPtyCommand(spec: {
|
|
8
|
-
command: string;
|
|
9
|
-
args: string[];
|
|
10
|
-
}, options: PtyOptions): Promise<string>;
|
|
11
|
-
//# sourceMappingURL=runner.d.ts.map
|
|
@@ -1,11 +1,10 @@
|
|
|
1
1
|
// @arch docs/architecture/cli/model-discovery.md
|
|
2
2
|
// @test src/__tests__/model-switching.test.ts
|
|
3
|
-
import {
|
|
4
|
-
import { stripAnsi } from './parsers.js';
|
|
3
|
+
import { spawnResolvedCommand } from '../command-spec.js';
|
|
5
4
|
import { DISCOVERY_WORKDIR } from './types.js';
|
|
6
|
-
export function
|
|
5
|
+
export function runResolvedCommand(spec, args, timeoutMs = 15_000) {
|
|
7
6
|
return new Promise((resolve, reject) => {
|
|
8
|
-
const proc =
|
|
7
|
+
const proc = spawnResolvedCommand(spec, args, {
|
|
9
8
|
cwd: DISCOVERY_WORKDIR,
|
|
10
9
|
stdio: ['ignore', 'pipe', 'pipe'],
|
|
11
10
|
env: { ...process.env, NO_COLOR: '1' },
|
|
@@ -28,133 +27,3 @@ export function runCommand(command, args, timeoutMs = 15_000) {
|
|
|
28
27
|
});
|
|
29
28
|
});
|
|
30
29
|
}
|
|
31
|
-
// Lazy-load node-pty so platforms where native compilation fails still work
|
|
32
|
-
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
33
|
-
let ptySpawnRef;
|
|
34
|
-
async function loadPtySpawn() {
|
|
35
|
-
if (ptySpawnRef)
|
|
36
|
-
return ptySpawnRef;
|
|
37
|
-
try {
|
|
38
|
-
const pty = await import('@homebridge/node-pty-prebuilt-multiarch');
|
|
39
|
-
ptySpawnRef = pty.spawn;
|
|
40
|
-
return ptySpawnRef;
|
|
41
|
-
}
|
|
42
|
-
catch {
|
|
43
|
-
return undefined;
|
|
44
|
-
}
|
|
45
|
-
}
|
|
46
|
-
export async function runPtyCommand(spec, options) {
|
|
47
|
-
const ptySpawn = await loadPtySpawn();
|
|
48
|
-
if (!ptySpawn)
|
|
49
|
-
return '';
|
|
50
|
-
const initialDelayMs = options.initialDelayMs ?? 2500;
|
|
51
|
-
const timeoutMs = options.timeoutMs ?? 20_000;
|
|
52
|
-
const scrollCount = options.scrollCount ?? 0;
|
|
53
|
-
const scrollIntervalMs = options.scrollIntervalMs ?? 400;
|
|
54
|
-
const scrollAfterOpenMs = options.scrollAfterOpenMs ?? 2000;
|
|
55
|
-
const preOpenPromptPatterns = options.preOpenPromptPatterns ?? [];
|
|
56
|
-
const preOpenPromptInput = options.preOpenPromptInput ?? '';
|
|
57
|
-
return new Promise((resolve) => {
|
|
58
|
-
const proc = ptySpawn(spec.command, [...spec.args, ...(options.startupArgs ?? [])], {
|
|
59
|
-
name: 'xterm-256color',
|
|
60
|
-
cols: 200,
|
|
61
|
-
rows: 120,
|
|
62
|
-
cwd: DISCOVERY_WORKDIR,
|
|
63
|
-
env: {
|
|
64
|
-
...process.env,
|
|
65
|
-
TERM: 'xterm-256color',
|
|
66
|
-
COLUMNS: '200',
|
|
67
|
-
LINES: '120',
|
|
68
|
-
NO_COLOR: '1',
|
|
69
|
-
},
|
|
70
|
-
});
|
|
71
|
-
let output = '';
|
|
72
|
-
let opened = false;
|
|
73
|
-
let scrolling = false;
|
|
74
|
-
let closing = false;
|
|
75
|
-
let finished = false;
|
|
76
|
-
let handledPreOpenPrompt = false;
|
|
77
|
-
const cleanup = () => {
|
|
78
|
-
if (finished)
|
|
79
|
-
return;
|
|
80
|
-
finished = true;
|
|
81
|
-
clearTimeout(forceOpenTimer);
|
|
82
|
-
clearTimeout(forceCloseTimer);
|
|
83
|
-
resolve(output);
|
|
84
|
-
};
|
|
85
|
-
const doClose = () => {
|
|
86
|
-
if (closing)
|
|
87
|
-
return;
|
|
88
|
-
closing = true;
|
|
89
|
-
proc.write('\u001b');
|
|
90
|
-
setTimeout(() => {
|
|
91
|
-
proc.write('\u0003');
|
|
92
|
-
proc.kill();
|
|
93
|
-
}, 300);
|
|
94
|
-
};
|
|
95
|
-
const doScroll = () => {
|
|
96
|
-
if (scrollCount <= 0)
|
|
97
|
-
return;
|
|
98
|
-
scrolling = true;
|
|
99
|
-
let remaining = scrollCount;
|
|
100
|
-
const tick = () => {
|
|
101
|
-
if (remaining <= 0 || closing || finished) {
|
|
102
|
-
scrolling = false;
|
|
103
|
-
setTimeout(doClose, 500);
|
|
104
|
-
return;
|
|
105
|
-
}
|
|
106
|
-
proc.write('\u001b[B');
|
|
107
|
-
remaining--;
|
|
108
|
-
setTimeout(tick, scrollIntervalMs);
|
|
109
|
-
};
|
|
110
|
-
tick();
|
|
111
|
-
};
|
|
112
|
-
const afterOpen = () => {
|
|
113
|
-
if (scrollCount > 0) {
|
|
114
|
-
setTimeout(doScroll, scrollAfterOpenMs);
|
|
115
|
-
}
|
|
116
|
-
};
|
|
117
|
-
const forceOpenTimer = setTimeout(() => {
|
|
118
|
-
if (!opened) {
|
|
119
|
-
opened = true;
|
|
120
|
-
proc.write('/model\r');
|
|
121
|
-
afterOpen();
|
|
122
|
-
}
|
|
123
|
-
}, initialDelayMs);
|
|
124
|
-
const forceCloseTimer = setTimeout(doClose, timeoutMs);
|
|
125
|
-
const maybeOpen = () => {
|
|
126
|
-
const clean = stripAnsi(output);
|
|
127
|
-
if (!handledPreOpenPrompt && preOpenPromptPatterns.some((pattern) => pattern.test(clean))) {
|
|
128
|
-
handledPreOpenPrompt = true;
|
|
129
|
-
if (preOpenPromptInput) {
|
|
130
|
-
proc.write(preOpenPromptInput);
|
|
131
|
-
}
|
|
132
|
-
return;
|
|
133
|
-
}
|
|
134
|
-
if (opened)
|
|
135
|
-
return;
|
|
136
|
-
if (options.readyPatterns.some((pattern) => pattern.test(clean))) {
|
|
137
|
-
opened = true;
|
|
138
|
-
proc.write('/model\r');
|
|
139
|
-
afterOpen();
|
|
140
|
-
}
|
|
141
|
-
};
|
|
142
|
-
const maybeClose = () => {
|
|
143
|
-
if (!opened || closing || scrolling || scrollCount > 0)
|
|
144
|
-
return;
|
|
145
|
-
const clean = stripAnsi(output);
|
|
146
|
-
if (options.closePatterns.some((pattern) => pattern.test(clean))) {
|
|
147
|
-
doClose();
|
|
148
|
-
}
|
|
149
|
-
};
|
|
150
|
-
proc.onData((chunk) => {
|
|
151
|
-
output += chunk;
|
|
152
|
-
if (!finished) {
|
|
153
|
-
maybeOpen();
|
|
154
|
-
maybeClose();
|
|
155
|
-
}
|
|
156
|
-
});
|
|
157
|
-
proc.onExit(cleanup);
|
|
158
|
-
});
|
|
159
|
-
}
|
|
160
|
-
//# sourceMappingURL=runner.js.map
|
|
@@ -4,4 +4,3 @@ import type { DiscoveryContext } from './types.js';
|
|
|
4
4
|
export declare function getCachedAgentInfos(detectedAgents: DetectedAgent[]): AgentInfo[];
|
|
5
5
|
export declare function refreshAgentInfos(detectedAgents: DetectedAgent[], context: DiscoveryContext): Promise<AgentInfo[]>;
|
|
6
6
|
export declare function resolveAgentInfos(detectedAgents: DetectedAgent[], context: DiscoveryContext): Promise<AgentInfo[]>;
|
|
7
|
-
//# sourceMappingURL=service.d.ts.map
|
|
@@ -39,21 +39,24 @@ export async function resolveAgentInfos(detectedAgents, context) {
|
|
|
39
39
|
models = cached.models;
|
|
40
40
|
}
|
|
41
41
|
else {
|
|
42
|
+
let discovered = null;
|
|
42
43
|
try {
|
|
43
|
-
|
|
44
|
+
discovered = uniqueModels(await discoverModelsForAgent(agent, context));
|
|
44
45
|
models = discovered.length > 0 ? discovered : cached?.models ?? agent.models ?? [];
|
|
45
46
|
}
|
|
46
47
|
catch {
|
|
47
48
|
models = cached?.models ?? agent.models ?? [];
|
|
48
49
|
}
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
50
|
+
if (discovered && discovered.length > 0) {
|
|
51
|
+
const nextEntry = {
|
|
52
|
+
version: agent.version,
|
|
53
|
+
refreshedAt: Date.now(),
|
|
54
|
+
models,
|
|
55
|
+
};
|
|
56
|
+
if (JSON.stringify(cached) !== JSON.stringify(nextEntry)) {
|
|
57
|
+
cache.agents[agent.type] = nextEntry;
|
|
58
|
+
changed = true;
|
|
59
|
+
}
|
|
57
60
|
}
|
|
58
61
|
}
|
|
59
62
|
infos.push({
|
|
@@ -66,4 +69,3 @@ export async function resolveAgentInfos(detectedAgents, context) {
|
|
|
66
69
|
}
|
|
67
70
|
return infos;
|
|
68
71
|
}
|
|
69
|
-
//# sourceMappingURL=service.js.map
|
|
@@ -1,12 +1,13 @@
|
|
|
1
1
|
export { getCachedAgentInfos, refreshAgentInfos, resolveAgentInfos } from './model-registry/service.js';
|
|
2
|
-
import { parseClaudeModels, parseCodexModels, parseCursorModels, parseGeminiModels, parseOpenClawModels, stripAnsi } from './model-registry/parsers.js';
|
|
2
|
+
import { parseClaudeBinaryModels, parseClaudeModels, parseCodexModels, parseCodexAppServerModels, parseCursorModels, parseGeminiModels, parseOpenClawModels, stripAnsi } from './model-registry/parsers.js';
|
|
3
3
|
/** Used by Vitest / `model-switching-e2e.ts` — not a stable public API. */
|
|
4
4
|
export declare const modelSwitchingTestExports: {
|
|
5
|
+
readonly parseClaudeBinaryModels: typeof parseClaudeBinaryModels;
|
|
5
6
|
readonly parseClaudeModels: typeof parseClaudeModels;
|
|
6
7
|
readonly parseCodexModels: typeof parseCodexModels;
|
|
8
|
+
readonly parseCodexAppServerModels: typeof parseCodexAppServerModels;
|
|
7
9
|
readonly parseCursorModels: typeof parseCursorModels;
|
|
8
10
|
readonly parseOpenClawModels: typeof parseOpenClawModels;
|
|
9
11
|
readonly parseGeminiModels: typeof parseGeminiModels;
|
|
10
12
|
readonly stripAnsi: typeof stripAnsi;
|
|
11
13
|
};
|
|
12
|
-
//# sourceMappingURL=model-registry.d.ts.map
|
|
@@ -1,14 +1,15 @@
|
|
|
1
1
|
// @arch docs/architecture/cli/model-discovery.md
|
|
2
2
|
// @test src/__tests__/model-switching.test.ts
|
|
3
3
|
export { getCachedAgentInfos, refreshAgentInfos, resolveAgentInfos } from './model-registry/service.js';
|
|
4
|
-
import { parseClaudeModels, parseCodexModels, parseCursorModels, parseGeminiModels, parseOpenClawModels, stripAnsi, } from './model-registry/parsers.js';
|
|
4
|
+
import { parseClaudeBinaryModels, parseClaudeModels, parseCodexModels, parseCodexAppServerModels, parseCursorModels, parseGeminiModels, parseOpenClawModels, stripAnsi, } from './model-registry/parsers.js';
|
|
5
5
|
/** Used by Vitest / `model-switching-e2e.ts` — not a stable public API. */
|
|
6
6
|
export const modelSwitchingTestExports = {
|
|
7
|
+
parseClaudeBinaryModels,
|
|
7
8
|
parseClaudeModels,
|
|
8
9
|
parseCodexModels,
|
|
10
|
+
parseCodexAppServerModels,
|
|
9
11
|
parseCursorModels,
|
|
10
12
|
parseOpenClawModels,
|
|
11
13
|
parseGeminiModels,
|
|
12
14
|
stripAnsi,
|
|
13
15
|
};
|
|
14
|
-
//# sourceMappingURL=model-registry.js.map
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { spawn } from 'node:child_process';
|
|
2
1
|
import { randomUUID } from 'node:crypto';
|
|
3
2
|
import { AgentAdapter, registerAgent } from './adapter.js';
|
|
3
|
+
import { resolveBuiltinCommand, spawnResolvedCommand } from './command-spec.js';
|
|
4
4
|
/** Best-effort parse of `openclaw agent --json` stdout; shape may vary by version. */
|
|
5
5
|
function extractResponseText(parsed) {
|
|
6
6
|
if (parsed == null)
|
|
@@ -116,8 +116,13 @@ export class OpenClawAdapter extends AgentAdapter {
|
|
|
116
116
|
await this.killProcess();
|
|
117
117
|
}
|
|
118
118
|
spawnAgent(extraArgs) {
|
|
119
|
+
const spec = resolveBuiltinCommand('openclaw');
|
|
120
|
+
if (!spec) {
|
|
121
|
+
this.emit('error', new Error('Command "openclaw" not found. Is OpenClaw CLI installed?'));
|
|
122
|
+
return;
|
|
123
|
+
}
|
|
119
124
|
const args = ['agent', '--local', '--json', ...extraArgs];
|
|
120
|
-
const proc =
|
|
125
|
+
const proc = spawnResolvedCommand(spec, args, {
|
|
121
126
|
cwd: this.workDir ?? undefined,
|
|
122
127
|
stdio: ['ignore', 'pipe', 'pipe'],
|
|
123
128
|
env: { ...process.env },
|
|
@@ -190,8 +195,13 @@ export class OpenClawAdapter extends AgentAdapter {
|
|
|
190
195
|
}
|
|
191
196
|
async runAgentCommand(extraArgs) {
|
|
192
197
|
return new Promise((resolve) => {
|
|
198
|
+
const spec = resolveBuiltinCommand('openclaw');
|
|
199
|
+
if (!spec) {
|
|
200
|
+
resolve({ ok: false, error: 'Command "openclaw" not found. Is OpenClaw CLI installed?' });
|
|
201
|
+
return;
|
|
202
|
+
}
|
|
193
203
|
const args = ['agent', '--local', '--json', ...extraArgs];
|
|
194
|
-
const proc =
|
|
204
|
+
const proc = spawnResolvedCommand(spec, args, {
|
|
195
205
|
cwd: this.workDir ?? undefined,
|
|
196
206
|
stdio: ['ignore', 'pipe', 'pipe'],
|
|
197
207
|
env: { ...process.env },
|
|
@@ -261,4 +271,3 @@ export class OpenClawAdapter extends AgentAdapter {
|
|
|
261
271
|
}
|
|
262
272
|
}
|
|
263
273
|
registerAgent('openclaw', () => new OpenClawAdapter());
|
|
264
|
-
//# sourceMappingURL=openclaw.js.map
|
package/dist/src/agents/pi.d.ts
CHANGED
package/dist/src/agents/pi.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { spawn } from 'node:child_process';
|
|
2
1
|
import chalk from 'chalk';
|
|
3
2
|
import { loadConfig, saveConfig } from '../config/index.js';
|
|
3
|
+
import { spawnCommandString } from '../agents/command-spec.js';
|
|
4
4
|
function getCapsModels(caps) {
|
|
5
5
|
if (caps.models?.length)
|
|
6
6
|
return caps.models;
|
|
@@ -12,11 +12,8 @@ function getCapsModels(caps) {
|
|
|
12
12
|
* Runs `<command> /caps` and returns the parsed caps JSON.
|
|
13
13
|
*/
|
|
14
14
|
async function probeCaps(command) {
|
|
15
|
-
const parts = splitCommand(command);
|
|
16
|
-
const bin = parts[0];
|
|
17
|
-
const args = [...parts.slice(1), '/caps'];
|
|
18
15
|
return new Promise((resolve, reject) => {
|
|
19
|
-
const proc =
|
|
16
|
+
const proc = spawnCommandString(command, ['/caps'], { stdio: ['ignore', 'pipe', 'pipe'] });
|
|
20
17
|
let stdout = '';
|
|
21
18
|
let stderr = '';
|
|
22
19
|
proc.stdout?.on('data', (d) => { stdout += d.toString(); });
|
|
@@ -54,33 +51,6 @@ async function probeCaps(command) {
|
|
|
54
51
|
}, 5000);
|
|
55
52
|
});
|
|
56
53
|
}
|
|
57
|
-
function splitCommand(cmd) {
|
|
58
|
-
const args = [];
|
|
59
|
-
let current = '';
|
|
60
|
-
let inSingle = false;
|
|
61
|
-
let inDouble = false;
|
|
62
|
-
for (const ch of cmd) {
|
|
63
|
-
if (ch === "'" && !inDouble) {
|
|
64
|
-
inSingle = !inSingle;
|
|
65
|
-
continue;
|
|
66
|
-
}
|
|
67
|
-
if (ch === '"' && !inSingle) {
|
|
68
|
-
inDouble = !inDouble;
|
|
69
|
-
continue;
|
|
70
|
-
}
|
|
71
|
-
if (ch === ' ' && !inSingle && !inDouble) {
|
|
72
|
-
if (current) {
|
|
73
|
-
args.push(current);
|
|
74
|
-
current = '';
|
|
75
|
-
}
|
|
76
|
-
continue;
|
|
77
|
-
}
|
|
78
|
-
current += ch;
|
|
79
|
-
}
|
|
80
|
-
if (current)
|
|
81
|
-
args.push(current);
|
|
82
|
-
return args;
|
|
83
|
-
}
|
|
84
54
|
export function registerAgentCommand(program) {
|
|
85
55
|
const agent = program
|
|
86
56
|
.command('agent')
|
|
@@ -159,4 +129,3 @@ export function registerAgentCommand(program) {
|
|
|
159
129
|
console.log(chalk.yellow(' Refresh Agents in the app to hot-reload this daemon, or restart the daemon as a fallback.'));
|
|
160
130
|
});
|
|
161
131
|
}
|
|
162
|
-
//# sourceMappingURL=agent.js.map
|
|
@@ -14,6 +14,12 @@ export declare function resolveServiceLaunchSpec(input: {
|
|
|
14
14
|
}): ServiceLaunchSpec;
|
|
15
15
|
export declare function buildWindowsLauncherCommand(spec: ServiceLaunchSpec, logFile: string): string;
|
|
16
16
|
export declare function buildWindowsStartupVbs(cmdPath: string): string;
|
|
17
|
+
export declare function buildWindowsScheduledTaskXml(input: {
|
|
18
|
+
userId: string;
|
|
19
|
+
command: string;
|
|
20
|
+
arguments: string[];
|
|
21
|
+
}): string;
|
|
22
|
+
export declare function captureEnvForService(): Record<string, string>;
|
|
17
23
|
/**
|
|
18
24
|
* Save current env vars so the daemon can load them at startup.
|
|
19
25
|
* This is critical for launchd/systemd which start with minimal env.
|
|
@@ -27,4 +33,3 @@ export declare function startDaemonProcess(): void;
|
|
|
27
33
|
export declare function installService(): boolean;
|
|
28
34
|
export declare function registerDaemonCommand(program: Command): void;
|
|
29
35
|
export {};
|
|
30
|
-
//# sourceMappingURL=daemon.d.ts.map
|