@beeos-ai/device-agent 0.9.13 → 0.10.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.
- package/dist/adapters/device-compat.d.ts +14 -0
- package/dist/adapters/device-compat.js +71 -0
- package/dist/adapters/device-compat.js.map +1 -0
- package/dist/agent-runtime/adapters/index.d.ts +1 -3
- package/dist/agent-runtime/adapters/index.js +1 -3
- package/dist/agent-runtime/adapters/index.js.map +1 -1
- package/dist/agent-runtime/adapters/openai.d.ts +5 -5
- package/dist/agent-runtime/adapters/openai.js +19 -6
- package/dist/agent-runtime/adapters/openai.js.map +1 -1
- package/dist/agent-runtime/adapters/registry.d.ts +1 -1
- package/dist/agent-runtime/adapters/registry.js +3 -3
- package/dist/agent-runtime/adapters/registry.js.map +1 -1
- package/dist/agent-runtime/agent-runner.d.ts +1 -1
- package/dist/agent-runtime/factory.d.ts +22 -0
- package/dist/agent-runtime/factory.js +25 -0
- package/dist/agent-runtime/factory.js.map +1 -0
- package/dist/agent-runtime/index.d.ts +9 -4
- package/dist/agent-runtime/index.js +9 -4
- package/dist/agent-runtime/index.js.map +1 -1
- package/dist/{model → agent-runtime/models}/base.d.ts +1 -1
- package/dist/{model → agent-runtime/models}/base.js.map +1 -1
- package/dist/{model → agent-runtime/models}/client.d.ts +3 -3
- package/dist/{model → agent-runtime/models}/client.js +2 -2
- package/dist/agent-runtime/models/client.js.map +1 -0
- package/dist/agent-runtime/models/image/compress.js.map +1 -0
- package/dist/{model → agent-runtime/models}/image/transport.d.ts +2 -2
- package/dist/{model → agent-runtime/models}/image/transport.js +1 -1
- package/dist/agent-runtime/models/image/transport.js.map +1 -0
- package/dist/agent-runtime/models/vlm/autoglm.js.map +1 -0
- package/dist/{model/adapters → agent-runtime/models/vlm}/base.d.ts +1 -1
- package/dist/agent-runtime/models/vlm/base.js.map +1 -0
- package/dist/{model/adapters → agent-runtime/models/vlm}/general.js +19 -25
- package/dist/agent-runtime/models/vlm/general.js.map +1 -0
- package/dist/{model/adapters → agent-runtime/models/vlm}/guiowl.js +1 -1
- package/dist/agent-runtime/models/vlm/guiowl.js.map +1 -0
- package/dist/{model/adapters → agent-runtime/models/vlm}/index.d.ts +0 -2
- package/dist/agent-runtime/models/vlm/index.js +7 -0
- package/dist/agent-runtime/models/vlm/index.js.map +1 -0
- package/dist/{model/adapters → agent-runtime/models/vlm}/maiui.js +1 -1
- package/dist/agent-runtime/models/vlm/maiui.js.map +1 -0
- package/dist/{model/adapters → agent-runtime/models/vlm}/qwenvl.js +1 -1
- package/dist/agent-runtime/models/vlm/qwenvl.js.map +1 -0
- package/dist/{model/adapters → agent-runtime/models/vlm/shared}/tool-call.d.ts +1 -1
- package/dist/agent-runtime/models/vlm/shared/tool-call.js.map +1 -0
- package/dist/agent-runtime/modes/hybrid/index.d.ts +58 -0
- package/dist/{adapters/agentcore-runner.js → agent-runtime/modes/hybrid/index.js} +21 -54
- package/dist/agent-runtime/modes/hybrid/index.js.map +1 -0
- package/dist/agent-runtime/{planner → modes/hybrid/planner}/base.d.ts +2 -2
- package/dist/agent-runtime/modes/hybrid/planner/base.js.map +1 -0
- package/dist/agent-runtime/modes/hybrid/planner/llm-planner.js.map +1 -0
- package/dist/agent-runtime/modes/hybrid/planner/noop-planner.js.map +1 -0
- package/dist/agent-runtime/{planner → modes/hybrid/planner}/prompts.d.ts +2 -2
- package/dist/agent-runtime/modes/hybrid/planner/prompts.js.map +1 -0
- package/dist/{adapters → agent-runtime/modes/orchestrator}/app-guide.d.ts +1 -1
- package/dist/{adapters → agent-runtime/modes/orchestrator}/app-guide.js +51 -6
- package/dist/agent-runtime/modes/orchestrator/app-guide.js.map +1 -0
- package/dist/{adapters/agentcore-orchestrator.d.ts → agent-runtime/modes/orchestrator/index.d.ts} +5 -6
- package/dist/{adapters/agentcore-orchestrator.js → agent-runtime/modes/orchestrator/index.js} +30 -21
- package/dist/agent-runtime/modes/orchestrator/index.js.map +1 -0
- package/dist/{adapters/orchestrator-agent-prompt.js → agent-runtime/modes/orchestrator/prompt.js} +5 -11
- package/dist/agent-runtime/modes/orchestrator/prompt.js.map +1 -0
- package/dist/agent-runtime/plan-executor.d.ts +1 -1
- package/dist/agent-runtime/reflection.js +46 -36
- package/dist/agent-runtime/reflection.js.map +1 -1
- package/dist/agent-runtime/vlm.d.ts +17 -0
- package/dist/agent-runtime/vlm.js +18 -0
- package/dist/agent-runtime/vlm.js.map +1 -0
- package/dist/api.d.ts +9 -20
- package/dist/api.js +26 -33
- package/dist/api.js.map +1 -1
- package/dist/app/agent-host.js +11 -0
- package/dist/app/agent-host.js.map +1 -1
- package/dist/app/multi-device-host.d.ts +144 -0
- package/dist/app/multi-device-host.js +242 -0
- package/dist/app/multi-device-host.js.map +1 -0
- package/dist/app/plugin-commands/device-status-command.d.ts +28 -0
- package/dist/app/plugin-commands/device-status-command.js +101 -0
- package/dist/app/plugin-commands/device-status-command.js.map +1 -0
- package/dist/app/session-manager.d.ts +1 -0
- package/dist/app/session-manager.js +12 -11
- package/dist/app/session-manager.js.map +1 -1
- package/dist/bootstrap.d.ts +0 -2
- package/dist/bootstrap.js +131 -78
- package/dist/bootstrap.js.map +1 -1
- package/dist/config/loader.d.ts +4 -19
- package/dist/config/loader.js +64 -89
- package/dist/config/loader.js.map +1 -1
- package/dist/config/schema.d.ts +26 -40
- package/dist/config/schema.js +30 -57
- package/dist/config/schema.js.map +1 -1
- package/dist/core/task-outcome.d.ts +32 -0
- package/dist/core/task-outcome.js +68 -0
- package/dist/core/task-outcome.js.map +1 -0
- package/dist/fleet/adapters/process/in-process-manager.d.ts +74 -0
- package/dist/fleet/adapters/process/in-process-manager.js +212 -0
- package/dist/fleet/adapters/process/in-process-manager.js.map +1 -0
- package/dist/fleet/adapters/process/node-process-manager.d.ts +28 -0
- package/dist/fleet/adapters/process/node-process-manager.js +13 -2
- package/dist/fleet/adapters/process/node-process-manager.js.map +1 -1
- package/dist/fleet/supervisor.d.ts +21 -0
- package/dist/fleet/supervisor.js +204 -9
- package/dist/fleet/supervisor.js.map +1 -1
- package/dist/inbound/acp/handlers/models.js +0 -1
- package/dist/inbound/acp/handlers/models.js.map +1 -1
- package/dist/inbound/cli/fleet-command.d.ts +32 -0
- package/dist/inbound/cli/fleet-command.js +51 -2
- package/dist/inbound/cli/fleet-command.js.map +1 -1
- package/dist/inbound/cli/main.d.ts +3 -8
- package/dist/inbound/cli/main.js +14 -54
- package/dist/inbound/cli/main.js.map +1 -1
- package/dist/inbound/cli/run-command.d.ts +2 -2
- package/dist/inbound/cli/run-command.js +10 -9
- package/dist/inbound/cli/run-command.js.map +1 -1
- package/dist/index.d.ts +8 -7
- package/dist/index.js +4 -5
- package/dist/index.js.map +1 -1
- package/dist/plugins/message-bus/device-command.d.ts +70 -0
- package/dist/plugins/message-bus/device-command.js +197 -0
- package/dist/plugins/message-bus/device-command.js.map +1 -0
- package/dist/plugins/message-bus/index.d.ts +16 -0
- package/dist/plugins/message-bus/index.js +17 -0
- package/dist/plugins/message-bus/index.js.map +1 -1
- package/dist/plugins/message-bus/ms-channel-notifier.js +30 -2
- package/dist/plugins/message-bus/ms-channel-notifier.js.map +1 -1
- package/dist/ports/agent-core.d.ts +12 -6
- package/dist/ports/agent-host.d.ts +2 -0
- package/package.json +1 -1
- package/dist/adapters/agentcore-inner-loop.d.ts +0 -28
- package/dist/adapters/agentcore-inner-loop.js +0 -71
- package/dist/adapters/agentcore-inner-loop.js.map +0 -1
- package/dist/adapters/agentcore-orchestrator.js.map +0 -1
- package/dist/adapters/agentcore-runner.d.ts +0 -70
- package/dist/adapters/agentcore-runner.js.map +0 -1
- package/dist/adapters/app-guide.js.map +0 -1
- package/dist/adapters/orchestrator-agent-prompt.js.map +0 -1
- package/dist/adapters/vlm-inner-loop.d.ts +0 -94
- package/dist/adapters/vlm-inner-loop.js +0 -202
- package/dist/adapters/vlm-inner-loop.js.map +0 -1
- package/dist/agent-runtime/adapters/ui-tars.d.ts +0 -13
- package/dist/agent-runtime/adapters/ui-tars.js +0 -22
- package/dist/agent-runtime/adapters/ui-tars.js.map +0 -1
- package/dist/agent-runtime/planner/base.js.map +0 -1
- package/dist/agent-runtime/planner/llm-planner.js.map +0 -1
- package/dist/agent-runtime/planner/noop-planner.js.map +0 -1
- package/dist/agent-runtime/planner/prompts.js.map +0 -1
- package/dist/agent.d.ts +0 -110
- package/dist/agent.js +0 -162
- package/dist/agent.js.map +0 -1
- package/dist/grounding/grounder.d.ts +0 -46
- package/dist/grounding/grounder.js +0 -82
- package/dist/grounding/grounder.js.map +0 -1
- package/dist/model/adapters/autoglm.js.map +0 -1
- package/dist/model/adapters/base.js.map +0 -1
- package/dist/model/adapters/general.js.map +0 -1
- package/dist/model/adapters/guiowl.js.map +0 -1
- package/dist/model/adapters/index.js +0 -9
- package/dist/model/adapters/index.js.map +0 -1
- package/dist/model/adapters/maiui.js.map +0 -1
- package/dist/model/adapters/qwenvl.js.map +0 -1
- package/dist/model/adapters/showui.d.ts +0 -1
- package/dist/model/adapters/showui.js +0 -132
- package/dist/model/adapters/showui.js.map +0 -1
- package/dist/model/adapters/tool-call.js.map +0 -1
- package/dist/model/adapters/uitars.d.ts +0 -1
- package/dist/model/adapters/uitars.js +0 -176
- package/dist/model/adapters/uitars.js.map +0 -1
- package/dist/model/client.js.map +0 -1
- package/dist/model/image/compress.js.map +0 -1
- package/dist/model/image/transport.js.map +0 -1
- /package/dist/{model → agent-runtime/models}/base.js +0 -0
- /package/dist/{model → agent-runtime/models}/image/compress.d.ts +0 -0
- /package/dist/{model → agent-runtime/models}/image/compress.js +0 -0
- /package/dist/{model/adapters → agent-runtime/models/vlm}/autoglm.d.ts +0 -0
- /package/dist/{model/adapters → agent-runtime/models/vlm}/autoglm.js +0 -0
- /package/dist/{model/adapters → agent-runtime/models/vlm}/base.js +0 -0
- /package/dist/{model/adapters → agent-runtime/models/vlm}/general.d.ts +0 -0
- /package/dist/{model/adapters → agent-runtime/models/vlm}/guiowl.d.ts +0 -0
- /package/dist/{model/adapters → agent-runtime/models/vlm}/maiui.d.ts +0 -0
- /package/dist/{model/adapters → agent-runtime/models/vlm}/qwenvl.d.ts +0 -0
- /package/dist/{model/adapters → agent-runtime/models/vlm/shared}/tool-call.js +0 -0
- /package/dist/agent-runtime/{planner → modes/hybrid/planner}/base.js +0 -0
- /package/dist/agent-runtime/{planner → modes/hybrid/planner}/llm-planner.d.ts +0 -0
- /package/dist/agent-runtime/{planner → modes/hybrid/planner}/llm-planner.js +0 -0
- /package/dist/agent-runtime/{planner → modes/hybrid/planner}/noop-planner.d.ts +0 -0
- /package/dist/agent-runtime/{planner → modes/hybrid/planner}/noop-planner.js +0 -0
- /package/dist/agent-runtime/{planner → modes/hybrid/planner}/prompts.js +0 -0
- /package/dist/{adapters/orchestrator-agent-prompt.d.ts → agent-runtime/modes/orchestrator/prompt.d.ts} +0 -0
package/dist/config/schema.js
CHANGED
|
@@ -8,18 +8,12 @@
|
|
|
8
8
|
*
|
|
9
9
|
* The agent runs as a two-layer system by default:
|
|
10
10
|
*
|
|
11
|
-
* - **outer** orchestrator
|
|
12
|
-
*
|
|
13
|
-
* - **
|
|
14
|
-
*
|
|
15
|
-
*
|
|
16
|
-
* - **grounder** visual ground — coordinate grounding tool used by the outer
|
|
17
|
-
* layer when it needs precise tap targets.
|
|
18
|
-
* Defaults to mirroring `mobileUse` so a
|
|
19
|
-
* fully self-hosted setup still works.
|
|
11
|
+
* - **outer** orchestrator — text LLM via pi-coding-agent
|
|
12
|
+
* (default `moonshotai/kimi-k2.6` on ARouter)
|
|
13
|
+
* - **vlm** inner VLM — vision-language device control loop
|
|
14
|
+
* (default `AutoGLM-Phone-9B-Q4_K_M.gguf` with
|
|
15
|
+
* the `autoglm` adapter)
|
|
20
16
|
*
|
|
21
|
-
* The legacy single-layer mode is still available via `legacyInner: true`
|
|
22
|
-
* (or `--legacy-inner`) — that path drives `vlm-inner-loop.ts` directly.
|
|
23
17
|
*/
|
|
24
18
|
import { z } from "zod";
|
|
25
19
|
export const RuntimeMode = z.enum(["android", "desktop"]);
|
|
@@ -44,7 +38,7 @@ export const DEFAULT_AROUTER_BASE_URL = "https://api.arouter.ai";
|
|
|
44
38
|
/** Default outer orchestrator model when nothing is configured. */
|
|
45
39
|
export const DEFAULT_OUTER_MODEL = "moonshotai/kimi-k2.6";
|
|
46
40
|
/**
|
|
47
|
-
* Default inner
|
|
41
|
+
* Default inner VLM model when nothing is configured.
|
|
48
42
|
*
|
|
49
43
|
* The `llama/` prefix is the ARouter **provider** route — without it, the
|
|
50
44
|
* gateway falls back to `openai/...` and the request is shipped to
|
|
@@ -52,20 +46,27 @@ export const DEFAULT_OUTER_MODEL = "moonshotai/kimi-k2.6";
|
|
|
52
46
|
* surfaces the upstream error as a hollow `502 status code (no body)`.
|
|
53
47
|
* See `docs/adr/` and the agent-runtime README for the full routing table.
|
|
54
48
|
*/
|
|
55
|
-
export const
|
|
56
|
-
/**
|
|
57
|
-
|
|
49
|
+
export const DEFAULT_VLM_MODEL = "llama/AutoGLM-Phone-9B-Q4_K_M.gguf";
|
|
50
|
+
/**
|
|
51
|
+
* Default VLM adapter. Intentionally EMPTY: an unset provider means
|
|
52
|
+
* "auto-detect the adapter from the model name" (`detectAdapter`), which
|
|
53
|
+
* already falls back to `autoglm` when no pattern matches. Forcing
|
|
54
|
+
* `autoglm` here would short-circuit detection and mis-parse e.g.
|
|
55
|
+
* `general` models whose name carries no detectable pattern. Set a
|
|
56
|
+
* non-empty `vlmProvider` (config / `VLM_PROVIDER` / `--vlm-provider`)
|
|
57
|
+
* to override.
|
|
58
|
+
*/
|
|
59
|
+
export const DEFAULT_VLM_PROVIDER = "";
|
|
58
60
|
/**
|
|
59
61
|
* Group-specific defaults exported for `loader.ts` to perform a
|
|
60
62
|
* post-merge `applyGroupDefaults` pass.
|
|
61
63
|
*
|
|
62
64
|
* Why exported (and why loader does the backfill rather than zod):
|
|
63
65
|
* `zod.default(v)` only fires when the input field is `undefined`.
|
|
64
|
-
* When `loader` ends up producing `
|
|
65
|
-
*
|
|
66
|
-
*
|
|
67
|
-
*
|
|
68
|
-
* the missing field with empty string. Net result: `mobileUse.model`
|
|
66
|
+
* When `loader` ends up producing `vlm: { apiKey: "x" }` (e.g. from
|
|
67
|
+
* `VLM_API_KEY` alone), zod sees the object and skips the whole
|
|
68
|
+
* `.default(...)` — then `LlmSection`'s inner `model: z.string().default("")`
|
|
69
|
+
* fills the missing field with empty string. Net result: `vlm.model`
|
|
69
70
|
* silently becomes `""` and the agent boots without a model.
|
|
70
71
|
*
|
|
71
72
|
* Loader is the right place to express "deep-merge group defaults"
|
|
@@ -82,19 +83,13 @@ export const OUTER_DEFAULTS = {
|
|
|
82
83
|
model: DEFAULT_OUTER_MODEL,
|
|
83
84
|
provider: "",
|
|
84
85
|
};
|
|
85
|
-
export const
|
|
86
|
+
export const VLM_DEFAULTS = {
|
|
86
87
|
baseUrl: DEFAULT_AROUTER_BASE_URL,
|
|
87
|
-
model:
|
|
88
|
-
provider:
|
|
89
|
-
};
|
|
90
|
-
export const GROUNDER_DEFAULTS = {
|
|
91
|
-
baseUrl: DEFAULT_AROUTER_BASE_URL,
|
|
92
|
-
model: DEFAULT_MOBILE_USE_MODEL,
|
|
93
|
-
provider: DEFAULT_MOBILE_USE_PROVIDER,
|
|
88
|
+
model: DEFAULT_VLM_MODEL,
|
|
89
|
+
provider: DEFAULT_VLM_PROVIDER,
|
|
94
90
|
};
|
|
95
91
|
const outerDefaults = LlmSection.parse({ ...OUTER_DEFAULTS });
|
|
96
|
-
const
|
|
97
|
-
const grounderDefaults = LlmSection.parse({ ...GROUNDER_DEFAULTS });
|
|
92
|
+
const vlmDefaults = LlmSection.parse({ ...VLM_DEFAULTS });
|
|
98
93
|
export const Config = z
|
|
99
94
|
.object({
|
|
100
95
|
/** Standalone mode: skip Bridge handshake, only run HTTP/CLI. */
|
|
@@ -144,21 +139,10 @@ export const Config = z
|
|
|
144
139
|
*/
|
|
145
140
|
outer: LlmSection.default(outerDefaults),
|
|
146
141
|
/**
|
|
147
|
-
* Inner
|
|
148
|
-
* Maps from `
|
|
149
|
-
*/
|
|
150
|
-
mobileUse: LlmSection.default(mobileUseDefaults),
|
|
151
|
-
/**
|
|
152
|
-
* Visual grounder used by the outer layer for precise coordinate
|
|
153
|
-
* grounding. Maps from `GROUNDER_*` env / `--grounder-*` flags.
|
|
154
|
-
*/
|
|
155
|
-
grounder: LlmSection.default(grounderDefaults),
|
|
156
|
-
/**
|
|
157
|
-
* Force the legacy single-layer adapter (vlm-inner-loop) instead of
|
|
158
|
-
* the v0.3.0 default `AgentRunnerCore`. Maps from `--legacy-inner`
|
|
159
|
-
* / `BEEOS_LEGACY_INNER`. Default `false`.
|
|
142
|
+
* Inner VLM. Performs the screenshot→reason→act loop.
|
|
143
|
+
* Maps from `VLM_*` env / `--vlm-*` flags.
|
|
160
144
|
*/
|
|
161
|
-
|
|
145
|
+
vlm: LlmSection.default(vlmDefaults),
|
|
162
146
|
/**
|
|
163
147
|
* Enable OrchestratorAgent (OpenAI tool-calling outer loop + inner
|
|
164
148
|
* mobile_use VLM) instead of the default `AgentRunnerCore`. Maps from
|
|
@@ -177,26 +161,15 @@ export const Config = z
|
|
|
177
161
|
* → reuse `mobileUse.model`. Maps from `--planner-model`.
|
|
178
162
|
*/
|
|
179
163
|
plannerModel: z.string().default(""),
|
|
180
|
-
/** Optional planner base URL. Empty → reuse `
|
|
164
|
+
/** Optional planner base URL. Empty → reuse `vlm.baseUrl`. */
|
|
181
165
|
plannerBaseUrl: z.string().default(""),
|
|
182
|
-
/** Optional planner API key. Empty → reuse `
|
|
166
|
+
/** Optional planner API key. Empty → reuse `vlm.apiKey`. */
|
|
183
167
|
plannerApiKey: z.string().default(""),
|
|
184
168
|
// ── Plugin toggles ────────────────────────────────────────────────────
|
|
185
169
|
/** Disable the ACP plugin (Bridge WS). Maps from `--no-acp`. */
|
|
186
170
|
disableAcp: z.boolean().default(false),
|
|
187
171
|
/** Disable the HTTP debug plugin. Maps from `--no-http`. */
|
|
188
172
|
disableHttp: z.boolean().default(false),
|
|
189
|
-
// ── Backward-compat top-level VLM fields ─────────────────────────────
|
|
190
|
-
/**
|
|
191
|
-
* @deprecated since the two-layer split — mirrored to `mobileUse.apiKey`
|
|
192
|
-
* by the loader. New configs should use `mobileUse.apiKey` (and/or
|
|
193
|
-
* `outer.apiKey` / `grounder.apiKey`) instead.
|
|
194
|
-
*/
|
|
195
|
-
vlmApiKey: z.string().default(""),
|
|
196
|
-
/** @deprecated mirrored to `mobileUse.baseUrl`. */
|
|
197
|
-
vlmBaseUrl: z.string().default(DEFAULT_AROUTER_BASE_URL),
|
|
198
|
-
/** @deprecated mirrored to `mobileUse.model`. */
|
|
199
|
-
vlmModel: z.string().default(""),
|
|
200
173
|
httpEnabled: z.boolean().default(false),
|
|
201
174
|
httpHost: z.string().default("127.0.0.1"),
|
|
202
175
|
httpPort: z.coerce.number().int().positive().default(9090),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"schema.js","sourceRoot":"","sources":["../../src/config/schema.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"schema.js","sourceRoot":"","sources":["../../src/config/schema.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
export type AgentBayTaskStatus = "running" | "completed" | "failed" | "cancelled" | "unsupported";
|
|
2
|
+
export type AgentTaskReason = "done" | "fail" | "call_for_user" | "step_budget" | "timeout" | "reflection_veto" | "cancelled" | "error";
|
|
3
|
+
export interface AgentCoreTaskOutcomeFields {
|
|
4
|
+
taskStatus: AgentBayTaskStatus;
|
|
5
|
+
taskReason: AgentTaskReason;
|
|
6
|
+
taskAction?: string;
|
|
7
|
+
taskProduct?: string;
|
|
8
|
+
taskError?: string;
|
|
9
|
+
}
|
|
10
|
+
export interface AgentTaskOutcome extends AgentCoreTaskOutcomeFields {
|
|
11
|
+
taskId: string;
|
|
12
|
+
}
|
|
13
|
+
export declare function deriveTaskOutcome(args: {
|
|
14
|
+
taskId: string;
|
|
15
|
+
result: {
|
|
16
|
+
finalMessage: string;
|
|
17
|
+
cancelled: boolean;
|
|
18
|
+
taskStatus?: AgentBayTaskStatus;
|
|
19
|
+
taskReason?: AgentTaskReason;
|
|
20
|
+
taskAction?: string;
|
|
21
|
+
taskProduct?: string;
|
|
22
|
+
taskError?: string;
|
|
23
|
+
};
|
|
24
|
+
error?: string;
|
|
25
|
+
}): AgentTaskOutcome;
|
|
26
|
+
export declare function taskOutcomeFromTerminator(args: {
|
|
27
|
+
terminator: string;
|
|
28
|
+
finalMessage?: string;
|
|
29
|
+
taskAction?: string;
|
|
30
|
+
taskError?: string;
|
|
31
|
+
}): AgentCoreTaskOutcomeFields;
|
|
32
|
+
export declare function toAgentBayTaskPayload(outcome: AgentTaskOutcome | AgentCoreTaskOutcomeFields): Record<string, unknown>;
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
export function deriveTaskOutcome(args) {
|
|
2
|
+
const { taskId, result, error } = args;
|
|
3
|
+
const taskStatus = result.taskStatus ?? (error
|
|
4
|
+
? "failed"
|
|
5
|
+
: result.cancelled
|
|
6
|
+
? "cancelled"
|
|
7
|
+
: "completed");
|
|
8
|
+
const taskReason = result.taskReason ?? (error
|
|
9
|
+
? result.cancelled
|
|
10
|
+
? "cancelled"
|
|
11
|
+
: "error"
|
|
12
|
+
: result.cancelled
|
|
13
|
+
? "cancelled"
|
|
14
|
+
: "done");
|
|
15
|
+
const taskProduct = result.taskProduct ?? (result.finalMessage || undefined);
|
|
16
|
+
const taskError = result.taskError ?? error;
|
|
17
|
+
return {
|
|
18
|
+
taskId,
|
|
19
|
+
taskStatus,
|
|
20
|
+
taskReason,
|
|
21
|
+
...(result.taskAction ? { taskAction: result.taskAction } : {}),
|
|
22
|
+
...(taskProduct ? { taskProduct } : {}),
|
|
23
|
+
...(taskError ? { taskError } : {}),
|
|
24
|
+
};
|
|
25
|
+
}
|
|
26
|
+
export function taskOutcomeFromTerminator(args) {
|
|
27
|
+
const { terminator, finalMessage, taskAction, taskError } = args;
|
|
28
|
+
const base = {
|
|
29
|
+
...(taskAction ? { taskAction } : {}),
|
|
30
|
+
...(finalMessage ? { taskProduct: finalMessage } : {}),
|
|
31
|
+
...(taskError ? { taskError } : {}),
|
|
32
|
+
};
|
|
33
|
+
switch (terminator) {
|
|
34
|
+
case "done":
|
|
35
|
+
return { taskStatus: "completed", taskReason: "done", ...base };
|
|
36
|
+
case "cancelled":
|
|
37
|
+
return { taskStatus: "cancelled", taskReason: "cancelled", ...base };
|
|
38
|
+
case "call_for_user":
|
|
39
|
+
return { taskStatus: "failed", taskReason: "call_for_user", ...base };
|
|
40
|
+
case "step_budget":
|
|
41
|
+
return { taskStatus: "failed", taskReason: "step_budget", ...base };
|
|
42
|
+
case "timeout":
|
|
43
|
+
return { taskStatus: "failed", taskReason: "timeout", ...base };
|
|
44
|
+
case "reflection_veto":
|
|
45
|
+
return { taskStatus: "failed", taskReason: "reflection_veto", ...base };
|
|
46
|
+
case "fail":
|
|
47
|
+
return { taskStatus: "failed", taskReason: "fail", ...base };
|
|
48
|
+
case "error":
|
|
49
|
+
default:
|
|
50
|
+
return { taskStatus: "failed", taskReason: "error", ...base };
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
export function toAgentBayTaskPayload(outcome) {
|
|
54
|
+
const payload = {
|
|
55
|
+
task_status: outcome.taskStatus,
|
|
56
|
+
task_reason: outcome.taskReason,
|
|
57
|
+
};
|
|
58
|
+
if ("taskId" in outcome)
|
|
59
|
+
payload.task_id = outcome.taskId;
|
|
60
|
+
if (outcome.taskAction)
|
|
61
|
+
payload.task_action = outcome.taskAction;
|
|
62
|
+
if (outcome.taskProduct)
|
|
63
|
+
payload.task_product = outcome.taskProduct;
|
|
64
|
+
if (outcome.taskError)
|
|
65
|
+
payload.task_error = outcome.taskError;
|
|
66
|
+
return payload;
|
|
67
|
+
}
|
|
68
|
+
//# sourceMappingURL=task-outcome.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"task-outcome.js","sourceRoot":"","sources":["../../src/core/task-outcome.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Adapter — `IProcessManager` that hosts the device-agent DAEMON in-process.
|
|
3
|
+
*
|
|
4
|
+
* This is the production "one process controls many devices" path. The fleet
|
|
5
|
+
* supervisor and its pure FSM are UNCHANGED: they still believe they are
|
|
6
|
+
* spawning a daemon child per device. This adapter intercepts only the daemon
|
|
7
|
+
* lifecycle and redirects it to an in-process {@link MultiDeviceHost}, while
|
|
8
|
+
* delegating EVERYTHING else (mcp + scrcpy spawn/kill, liveness, pid) to a
|
|
9
|
+
* real {@link NodeProcessManager}.
|
|
10
|
+
*
|
|
11
|
+
* Topology this produces:
|
|
12
|
+
*
|
|
13
|
+
* device-agent fleet start --in-process (this OS process)
|
|
14
|
+
* ├── device-mcp-server (one shared child, via delegate) ← still a child
|
|
15
|
+
* ├── scrcpy-bridge × N (per device, via delegate) ← still children
|
|
16
|
+
* └── MultiDeviceHost (the N device-agent daemons, in-process)
|
|
17
|
+
*
|
|
18
|
+
* So the N ~50 MB agent daemons collapse into one process (deduplicated
|
|
19
|
+
* module/runtime baseline), but live video (scrcpy) and the shared MCP keep
|
|
20
|
+
* their own processes exactly as before.
|
|
21
|
+
*
|
|
22
|
+
* Why wrap instead of edit the supervisor: keeping `supervisor.ts` /
|
|
23
|
+
* `node-process-manager.ts` byte-identical to upstream means zero merge
|
|
24
|
+
* friction and the daemon's failover / activeAdbSerial / vlm-config logic is
|
|
25
|
+
* reused verbatim — `spawnDaemon` already receives the post-failover active
|
|
26
|
+
* transport in `opts.adbSerial` and the instance id for the per-device VLM
|
|
27
|
+
* config in `opts.instanceId`.
|
|
28
|
+
*/
|
|
29
|
+
import type { IProcessManager, ManagedProcess, ProcessEventListener, SpawnOptions, SpawnScrcpyOptions } from "../../ports/process-manager.js";
|
|
30
|
+
import { NodeProcessManager } from "./node-process-manager.js";
|
|
31
|
+
import type { Config } from "../../../config/schema.js";
|
|
32
|
+
import type { Logger } from "../../../logger/index.js";
|
|
33
|
+
export interface InProcessProcessManagerOptions {
|
|
34
|
+
/** Real process manager that owns the mcp + scrcpy children. */
|
|
35
|
+
delegate: NodeProcessManager;
|
|
36
|
+
/** Pino logger; the hosted MultiDeviceHost derives per-device children from it. */
|
|
37
|
+
logger: Logger;
|
|
38
|
+
/** Fallback Agent Gateway URL for bindings without a per-device override. */
|
|
39
|
+
defaultAgentGatewayUrl?: string;
|
|
40
|
+
/** Shared fleet-wide base config (vlm/outer/planMode/…) applied to every runtime. */
|
|
41
|
+
baseConfig?: Partial<Config>;
|
|
42
|
+
/** Bind host of the shared mcp (default 127.0.0.1, matches NodeProcessManager). */
|
|
43
|
+
mcpHost?: string;
|
|
44
|
+
}
|
|
45
|
+
export declare class InProcessProcessManager implements IProcessManager {
|
|
46
|
+
private readonly delegate;
|
|
47
|
+
private readonly log;
|
|
48
|
+
private readonly defaultAgentGatewayUrl;
|
|
49
|
+
private readonly baseConfig;
|
|
50
|
+
private readonly mcpHost;
|
|
51
|
+
/** Lazily built on the first spawnDaemon. */
|
|
52
|
+
private host;
|
|
53
|
+
private readonly listeners;
|
|
54
|
+
constructor(opts: InProcessProcessManagerOptions);
|
|
55
|
+
start(): Promise<void>;
|
|
56
|
+
stop(): Promise<void>;
|
|
57
|
+
spawnMcp(opts: SpawnOptions): Promise<void>;
|
|
58
|
+
killMcp(serial: string, opts?: {
|
|
59
|
+
expected?: boolean;
|
|
60
|
+
}): Promise<void>;
|
|
61
|
+
spawnScrcpy(opts: SpawnScrcpyOptions): Promise<void>;
|
|
62
|
+
killScrcpy(serial: string, opts?: {
|
|
63
|
+
expected?: boolean;
|
|
64
|
+
}): Promise<void>;
|
|
65
|
+
spawnDaemon(opts: SpawnOptions): Promise<void>;
|
|
66
|
+
killDaemon(serial: string, opts?: {
|
|
67
|
+
expected?: boolean;
|
|
68
|
+
}): Promise<void>;
|
|
69
|
+
isAlive(serial: string, which: ManagedProcess): boolean;
|
|
70
|
+
pid(serial: string, which: ManagedProcess): number | null;
|
|
71
|
+
on(listener: ProcessEventListener): () => void;
|
|
72
|
+
private ensureHost;
|
|
73
|
+
private emit;
|
|
74
|
+
}
|
|
@@ -0,0 +1,212 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Adapter — `IProcessManager` that hosts the device-agent DAEMON in-process.
|
|
3
|
+
*
|
|
4
|
+
* This is the production "one process controls many devices" path. The fleet
|
|
5
|
+
* supervisor and its pure FSM are UNCHANGED: they still believe they are
|
|
6
|
+
* spawning a daemon child per device. This adapter intercepts only the daemon
|
|
7
|
+
* lifecycle and redirects it to an in-process {@link MultiDeviceHost}, while
|
|
8
|
+
* delegating EVERYTHING else (mcp + scrcpy spawn/kill, liveness, pid) to a
|
|
9
|
+
* real {@link NodeProcessManager}.
|
|
10
|
+
*
|
|
11
|
+
* Topology this produces:
|
|
12
|
+
*
|
|
13
|
+
* device-agent fleet start --in-process (this OS process)
|
|
14
|
+
* ├── device-mcp-server (one shared child, via delegate) ← still a child
|
|
15
|
+
* ├── scrcpy-bridge × N (per device, via delegate) ← still children
|
|
16
|
+
* └── MultiDeviceHost (the N device-agent daemons, in-process)
|
|
17
|
+
*
|
|
18
|
+
* So the N ~50 MB agent daemons collapse into one process (deduplicated
|
|
19
|
+
* module/runtime baseline), but live video (scrcpy) and the shared MCP keep
|
|
20
|
+
* their own processes exactly as before.
|
|
21
|
+
*
|
|
22
|
+
* Why wrap instead of edit the supervisor: keeping `supervisor.ts` /
|
|
23
|
+
* `node-process-manager.ts` byte-identical to upstream means zero merge
|
|
24
|
+
* friction and the daemon's failover / activeAdbSerial / vlm-config logic is
|
|
25
|
+
* reused verbatim — `spawnDaemon` already receives the post-failover active
|
|
26
|
+
* transport in `opts.adbSerial` and the instance id for the per-device VLM
|
|
27
|
+
* config in `opts.instanceId`.
|
|
28
|
+
*/
|
|
29
|
+
import * as path from "node:path";
|
|
30
|
+
import * as fs from "node:fs";
|
|
31
|
+
import { materializeInlineAgentConfig } from "./node-process-manager.js";
|
|
32
|
+
import { MultiDeviceHost } from "../../../app/multi-device-host.js";
|
|
33
|
+
import { getBeeosHome } from "../../../config/paths.js";
|
|
34
|
+
export class InProcessProcessManager {
|
|
35
|
+
delegate;
|
|
36
|
+
log;
|
|
37
|
+
defaultAgentGatewayUrl;
|
|
38
|
+
baseConfig;
|
|
39
|
+
mcpHost;
|
|
40
|
+
/** Lazily built on the first spawnDaemon. */
|
|
41
|
+
host = null;
|
|
42
|
+
listeners = new Set();
|
|
43
|
+
constructor(opts) {
|
|
44
|
+
this.delegate = opts.delegate;
|
|
45
|
+
this.log = opts.logger;
|
|
46
|
+
this.defaultAgentGatewayUrl = opts.defaultAgentGatewayUrl;
|
|
47
|
+
this.baseConfig = opts.baseConfig;
|
|
48
|
+
this.mcpHost = opts.mcpHost ?? "127.0.0.1";
|
|
49
|
+
}
|
|
50
|
+
async start() {
|
|
51
|
+
await this.delegate.start();
|
|
52
|
+
}
|
|
53
|
+
async stop() {
|
|
54
|
+
// Tear down hosted runtimes first (closes their WS + flushes sessions),
|
|
55
|
+
// then the mcp/scrcpy children the delegate owns.
|
|
56
|
+
if (this.host)
|
|
57
|
+
await this.host.stop().catch(() => { });
|
|
58
|
+
await this.delegate.stop();
|
|
59
|
+
}
|
|
60
|
+
// ── mcp / scrcpy: delegated verbatim (still real child processes) ─────────
|
|
61
|
+
spawnMcp(opts) {
|
|
62
|
+
// Deliberately NO port caching here. The singleton's real listening port
|
|
63
|
+
// lives on the delegate (`globalMcpPort`) and can change across mcp
|
|
64
|
+
// restarts — it adopts the sticky port of whichever device re-boots it.
|
|
65
|
+
// spawnDaemon reads the live port from the delegate on every call, exactly
|
|
66
|
+
// like classic NodeProcessManager.spawnDaemon. (Caching the first
|
|
67
|
+
// `opts.mcpPort` here was the bug that left runtimes dialing a dead port
|
|
68
|
+
// after an mcp restart on a different device's sticky port.)
|
|
69
|
+
return this.delegate.spawnMcp(opts);
|
|
70
|
+
}
|
|
71
|
+
killMcp(serial, opts) {
|
|
72
|
+
return this.delegate.killMcp(serial, opts);
|
|
73
|
+
}
|
|
74
|
+
spawnScrcpy(opts) {
|
|
75
|
+
return this.delegate.spawnScrcpy(opts);
|
|
76
|
+
}
|
|
77
|
+
killScrcpy(serial, opts) {
|
|
78
|
+
return this.delegate.killScrcpy(serial, opts);
|
|
79
|
+
}
|
|
80
|
+
// ── daemon: hosted in-process ────────────────────────────────────────────
|
|
81
|
+
async spawnDaemon(opts) {
|
|
82
|
+
// Always route the runtime at the LIVE singleton mcp port — mirrors classic
|
|
83
|
+
// NodeProcessManager.spawnDaemon (`globalMcpPort > 0 ? globalMcpPort :
|
|
84
|
+
// opts.mcpPort`). `opts.mcpPort` is only the per-device sticky fallback for
|
|
85
|
+
// the device that first boots the singleton; once it is up, and after any
|
|
86
|
+
// mcp restart that landed it on a different device's sticky port, the
|
|
87
|
+
// actual port differs and every runtime must follow it.
|
|
88
|
+
const mcpUrl = `http://${this.mcpHost}:${this.delegate.effectiveMcpPort(opts.mcpPort)}`;
|
|
89
|
+
const host = this.ensureHost(mcpUrl);
|
|
90
|
+
// Per-instance VLM/orchestrator config: materialise the same file the
|
|
91
|
+
// spawned daemon would read via `--vlm-config-file`, then fall back to the
|
|
92
|
+
// legacy `~/.beeos/<instanceId>.config.json` if present.
|
|
93
|
+
let configFile;
|
|
94
|
+
if (opts.instanceId) {
|
|
95
|
+
const fromState = await materializeInlineAgentConfig(opts.instanceId);
|
|
96
|
+
if (fromState) {
|
|
97
|
+
configFile = fromState;
|
|
98
|
+
}
|
|
99
|
+
else {
|
|
100
|
+
const legacy = path.join(getBeeosHome(), `${opts.instanceId}.config.json`);
|
|
101
|
+
if (await fileExists(legacy))
|
|
102
|
+
configFile = legacy;
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
await host.addDevice(spawnOptionsToBinding(opts), { configFile, mcpUrl });
|
|
106
|
+
// Translate boot outcome into the lifecycle events the FSM expects. A
|
|
107
|
+
// boot failure is fault-isolated inside the host (no throw), so we must
|
|
108
|
+
// detect it via `has()` and report `daemon_exited` (unexpected) — that
|
|
109
|
+
// drives the FSM's backoff + respawn exactly like a crashed child.
|
|
110
|
+
if (host.has(opts.serial)) {
|
|
111
|
+
this.emit({ kind: "daemon_started", serial: opts.serial, pid: process.pid });
|
|
112
|
+
}
|
|
113
|
+
else {
|
|
114
|
+
this.emit({
|
|
115
|
+
kind: "daemon_exited",
|
|
116
|
+
serial: opts.serial,
|
|
117
|
+
code: 1,
|
|
118
|
+
signal: null,
|
|
119
|
+
expected: false,
|
|
120
|
+
});
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
async killDaemon(serial, opts) {
|
|
124
|
+
const wasRunning = this.host?.has(serial) ?? false;
|
|
125
|
+
if (this.host)
|
|
126
|
+
await this.host.removeDevice(serial);
|
|
127
|
+
if (wasRunning) {
|
|
128
|
+
this.emit({
|
|
129
|
+
kind: "daemon_exited",
|
|
130
|
+
serial,
|
|
131
|
+
code: null,
|
|
132
|
+
signal: "SIGTERM",
|
|
133
|
+
expected: opts?.expected ?? true,
|
|
134
|
+
});
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
// ── introspection ────────────────────────────────────────────────────────
|
|
138
|
+
isAlive(serial, which) {
|
|
139
|
+
if (which === "daemon")
|
|
140
|
+
return this.host?.has(serial) ?? false;
|
|
141
|
+
return this.delegate.isAlive(serial, which);
|
|
142
|
+
}
|
|
143
|
+
pid(serial, which) {
|
|
144
|
+
// Hosted daemons share THIS process — report our own pid when present.
|
|
145
|
+
if (which === "daemon")
|
|
146
|
+
return this.host?.has(serial) ? process.pid : null;
|
|
147
|
+
return this.delegate.pid(serial, which);
|
|
148
|
+
}
|
|
149
|
+
on(listener) {
|
|
150
|
+
// Fan in BOTH the delegate's mcp/scrcpy events and our synthetic daemon
|
|
151
|
+
// events. The delegate never emits daemon events (we never call its
|
|
152
|
+
// spawnDaemon), so there is no duplication.
|
|
153
|
+
const offDelegate = this.delegate.on(listener);
|
|
154
|
+
this.listeners.add(listener);
|
|
155
|
+
return () => {
|
|
156
|
+
offDelegate();
|
|
157
|
+
this.listeners.delete(listener);
|
|
158
|
+
};
|
|
159
|
+
}
|
|
160
|
+
// ── internals ─────────────────────────────────────────────────────────────
|
|
161
|
+
ensureHost(defaultMcpUrl) {
|
|
162
|
+
if (this.host)
|
|
163
|
+
return this.host;
|
|
164
|
+
this.host = new MultiDeviceHost({
|
|
165
|
+
// Fallback only — spawnDaemon passes a per-device `mcpUrl` override on
|
|
166
|
+
// every addDevice (computed from the live singleton port), so this
|
|
167
|
+
// constructor default is never actually used to route a runtime.
|
|
168
|
+
mcpUrl: defaultMcpUrl,
|
|
169
|
+
defaultAgentGatewayUrl: this.defaultAgentGatewayUrl,
|
|
170
|
+
...(this.baseConfig ? { baseConfig: this.baseConfig } : {}),
|
|
171
|
+
logger: this.log,
|
|
172
|
+
});
|
|
173
|
+
return this.host;
|
|
174
|
+
}
|
|
175
|
+
emit(event) {
|
|
176
|
+
for (const l of this.listeners) {
|
|
177
|
+
try {
|
|
178
|
+
l(event);
|
|
179
|
+
}
|
|
180
|
+
catch (e) {
|
|
181
|
+
this.log.warn({ err: e.message }, "in-process manager: listener threw");
|
|
182
|
+
}
|
|
183
|
+
}
|
|
184
|
+
}
|
|
185
|
+
}
|
|
186
|
+
/**
|
|
187
|
+
* Project a supervisor-built `SpawnOptions` onto the `DeviceBinding` the host
|
|
188
|
+
* consumes. `opts.adbSerial` is already the post-failover ACTIVE transport, so
|
|
189
|
+
* the in-process runtime targets the same device the spawned daemon would.
|
|
190
|
+
*/
|
|
191
|
+
function spawnOptionsToBinding(opts) {
|
|
192
|
+
return {
|
|
193
|
+
serial: opts.serial,
|
|
194
|
+
adbSerial: opts.adbSerial,
|
|
195
|
+
name: opts.name ?? opts.serial,
|
|
196
|
+
instanceId: opts.instanceId ?? null,
|
|
197
|
+
keyFile: opts.keyFile,
|
|
198
|
+
agentGatewayUrl: opts.agentGatewayUrl,
|
|
199
|
+
backend: opts.backend,
|
|
200
|
+
// httpPort intentionally dropped — MultiDeviceHost forces HTTP debug off.
|
|
201
|
+
};
|
|
202
|
+
}
|
|
203
|
+
async function fileExists(p) {
|
|
204
|
+
try {
|
|
205
|
+
await fs.promises.access(p);
|
|
206
|
+
return true;
|
|
207
|
+
}
|
|
208
|
+
catch {
|
|
209
|
+
return false;
|
|
210
|
+
}
|
|
211
|
+
}
|
|
212
|
+
//# sourceMappingURL=in-process-manager.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"in-process-manager.js","sourceRoot":"","sources":["../../../../src/fleet/adapters/process/in-process-manager.ts"],"names":[],"mappings":"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"}
|
|
@@ -241,6 +241,15 @@ export declare class NodeProcessManager implements IProcessManager {
|
|
|
241
241
|
* A no-op when the singleton is already gone.
|
|
242
242
|
*/
|
|
243
243
|
private killGlobalMcp;
|
|
244
|
+
/**
|
|
245
|
+
* The port a daemon's `--mcp-url` must target: the live singleton
|
|
246
|
+
* `globalMcpPort` when the shared mcp is up, else the supplied per-device
|
|
247
|
+
* fallback (`opts.mcpPort`) for direct/test invocations with no prior
|
|
248
|
+
* `spawnMcp`. Exposed so `InProcessProcessManager` can route its in-process
|
|
249
|
+
* runtimes at the SAME live port classic daemons use — and follow it across
|
|
250
|
+
* mcp restarts instead of caching a stale port.
|
|
251
|
+
*/
|
|
252
|
+
effectiveMcpPort(fallback: number): number;
|
|
244
253
|
spawnDaemon(opts: SpawnOptions): Promise<void>;
|
|
245
254
|
spawnScrcpy(opts: SpawnScrcpyOptions): Promise<void>;
|
|
246
255
|
killMcp(serial: string, opts?: {
|
|
@@ -257,3 +266,22 @@ export declare class NodeProcessManager implements IProcessManager {
|
|
|
257
266
|
private killChild;
|
|
258
267
|
private emit;
|
|
259
268
|
}
|
|
269
|
+
/**
|
|
270
|
+
* Read `state.json` and, if a `kind=device` agent with the given
|
|
271
|
+
* `instance_id` carries an inline `agent_config`, materialise it to a
|
|
272
|
+
* stable path under `~/.beeos/runtime/agent-config/<instance_id>.json`
|
|
273
|
+
* and return that path. Returns `null` when state.json is absent /
|
|
274
|
+
* malformed / forward-versioned / has no inline payload — caller then
|
|
275
|
+
* falls back to the legacy `~/.beeos/<instance_id>.config.json`.
|
|
276
|
+
*
|
|
277
|
+
* Why a temp file (rather than a `--vlm-config-json '<payload>'`
|
|
278
|
+
* flag) — keeping the existing CLI flag interface unchanged means
|
|
279
|
+
* the dual-write Step 3 doesn't have to ship in lockstep with a
|
|
280
|
+
* device-agent flag-parser change. The file lives under a stable
|
|
281
|
+
* path so successive spawns are idempotent (the FSM may respawn
|
|
282
|
+
* many times before the operator next runs `beeos device attach`).
|
|
283
|
+
*
|
|
284
|
+
* Round 5: shape parsing delegated to the shared `readStateJson`
|
|
285
|
+
* helper; this function just projects + materialises.
|
|
286
|
+
*/
|
|
287
|
+
export declare function materializeInlineAgentConfig(instanceId: string): Promise<string | null>;
|