@beeos-ai/device-agent 0.15.0 → 0.16.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 (240) hide show
  1. package/README.md +35 -0
  2. package/dist/adapters/agent-gateway-client.d.ts +6 -68
  3. package/dist/adapters/agent-gateway-client.js +7 -67
  4. package/dist/adapters/agent-gateway-client.js.map +1 -1
  5. package/dist/adapters/device-compat.d.ts +1 -2
  6. package/dist/adapters/device-compat.js +2 -52
  7. package/dist/adapters/device-compat.js.map +1 -1
  8. package/dist/agent-runtime/action-guard.js +92 -17
  9. package/dist/agent-runtime/action-guard.js.map +1 -1
  10. package/dist/agent-runtime/adapters/base.d.ts +13 -9
  11. package/dist/agent-runtime/adapters/base.js.map +1 -1
  12. package/dist/agent-runtime/adapters/general-flash.d.ts +3 -3
  13. package/dist/agent-runtime/adapters/general-flash.js +2 -2
  14. package/dist/agent-runtime/adapters/general-flash.js.map +1 -1
  15. package/dist/agent-runtime/adapters/native-tools.d.ts +56 -0
  16. package/dist/agent-runtime/adapters/native-tools.js +416 -0
  17. package/dist/agent-runtime/adapters/native-tools.js.map +1 -0
  18. package/dist/agent-runtime/adapters/openai.d.ts +1 -2
  19. package/dist/agent-runtime/adapters/openai.js +5 -5
  20. package/dist/agent-runtime/adapters/openai.js.map +1 -1
  21. package/dist/agent-runtime/adapters/pro.d.ts +7 -37
  22. package/dist/agent-runtime/adapters/pro.js +7 -249
  23. package/dist/agent-runtime/adapters/pro.js.map +1 -1
  24. package/dist/agent-runtime/advanced/app-card.js +9 -2
  25. package/dist/agent-runtime/advanced/app-card.js.map +1 -1
  26. package/dist/agent-runtime/advanced/subgoal-verifier.d.ts +1 -0
  27. package/dist/agent-runtime/advanced/subgoal-verifier.js +30 -36
  28. package/dist/agent-runtime/advanced/subgoal-verifier.js.map +1 -1
  29. package/dist/agent-runtime/advanced/task-state.js +4 -9
  30. package/dist/agent-runtime/advanced/task-state.js.map +1 -1
  31. package/dist/agent-runtime/agent-runner.d.ts +2 -11
  32. package/dist/agent-runtime/agent-runner.js +69 -34
  33. package/dist/agent-runtime/agent-runner.js.map +1 -1
  34. package/dist/agent-runtime/core.d.ts +24 -46
  35. package/dist/agent-runtime/core.js +161 -228
  36. package/dist/agent-runtime/core.js.map +1 -1
  37. package/dist/agent-runtime/execution-checks.d.ts +40 -0
  38. package/dist/agent-runtime/execution-checks.js +133 -0
  39. package/dist/agent-runtime/execution-checks.js.map +1 -0
  40. package/dist/agent-runtime/execution-mode.d.ts +1 -8
  41. package/dist/agent-runtime/execution-mode.js +10 -30
  42. package/dist/agent-runtime/execution-mode.js.map +1 -1
  43. package/dist/agent-runtime/feedback.d.ts +4 -28
  44. package/dist/agent-runtime/feedback.js +4 -26
  45. package/dist/agent-runtime/feedback.js.map +1 -1
  46. package/dist/agent-runtime/form-prerequisites.d.ts +3 -0
  47. package/dist/agent-runtime/form-prerequisites.js +52 -0
  48. package/dist/agent-runtime/form-prerequisites.js.map +1 -0
  49. package/dist/agent-runtime/index.d.ts +2 -8
  50. package/dist/agent-runtime/index.js +2 -8
  51. package/dist/agent-runtime/index.js.map +1 -1
  52. package/dist/agent-runtime/{modes/orchestrator → knowledge}/app-guide.d.ts +1 -1
  53. package/dist/agent-runtime/{modes/orchestrator → knowledge}/app-guide.js +1 -1
  54. package/dist/agent-runtime/knowledge/app-guide.js.map +1 -0
  55. package/dist/agent-runtime/models/base.d.ts +3 -1
  56. package/dist/agent-runtime/models/client.js +30 -9
  57. package/dist/agent-runtime/models/client.js.map +1 -1
  58. package/dist/agent-runtime/models/reasoning.d.ts +10 -0
  59. package/dist/agent-runtime/models/reasoning.js +29 -0
  60. package/dist/agent-runtime/models/reasoning.js.map +1 -0
  61. package/dist/agent-runtime/models/runtime-registry.d.ts +2 -1
  62. package/dist/agent-runtime/models/runtime-registry.js +4 -2
  63. package/dist/agent-runtime/models/runtime-registry.js.map +1 -1
  64. package/dist/agent-runtime/models/vlm/autoglm.js +6 -2
  65. package/dist/agent-runtime/models/vlm/autoglm.js.map +1 -1
  66. package/dist/agent-runtime/models/vlm/base.js +1 -12
  67. package/dist/agent-runtime/models/vlm/base.js.map +1 -1
  68. package/dist/agent-runtime/models/vlm/index.d.ts +0 -4
  69. package/dist/agent-runtime/models/vlm/index.js +0 -4
  70. package/dist/agent-runtime/models/vlm/index.js.map +1 -1
  71. package/dist/agent-runtime/modes/hybrid/index.d.ts +2 -12
  72. package/dist/agent-runtime/modes/hybrid/index.js +10 -27
  73. package/dist/agent-runtime/modes/hybrid/index.js.map +1 -1
  74. package/dist/agent-runtime/modes/hybrid/planner/base.d.ts +4 -44
  75. package/dist/agent-runtime/modes/hybrid/planner/base.js +3 -21
  76. package/dist/agent-runtime/modes/hybrid/planner/base.js.map +1 -1
  77. package/dist/agent-runtime/modes/hybrid/planner/llm-planner.d.ts +1 -1
  78. package/dist/agent-runtime/modes/hybrid/planner/llm-planner.js +9 -6
  79. package/dist/agent-runtime/modes/hybrid/planner/llm-planner.js.map +1 -1
  80. package/dist/agent-runtime/modes/hybrid/planner/prompts.d.ts +1 -17
  81. package/dist/agent-runtime/modes/hybrid/planner/prompts.js +65 -160
  82. package/dist/agent-runtime/modes/hybrid/planner/prompts.js.map +1 -1
  83. package/dist/agent-runtime/plan-executor.d.ts +13 -14
  84. package/dist/agent-runtime/plan-executor.js +236 -122
  85. package/dist/agent-runtime/plan-executor.js.map +1 -1
  86. package/dist/agent-runtime/pro-memory.js +1 -1
  87. package/dist/agent-runtime/pro-memory.js.map +1 -1
  88. package/dist/agent-runtime/pro-operator.js +8 -2
  89. package/dist/agent-runtime/pro-operator.js.map +1 -1
  90. package/dist/agent-runtime/pro-perception.d.ts +1 -0
  91. package/dist/agent-runtime/pro-perception.js +4 -2
  92. package/dist/agent-runtime/pro-perception.js.map +1 -1
  93. package/dist/agent-runtime/pro-target-check.d.ts +2 -2
  94. package/dist/agent-runtime/pro-target-check.js +102 -17
  95. package/dist/agent-runtime/pro-target-check.js.map +1 -1
  96. package/dist/agent-runtime/prompts/operator.d.ts +2 -0
  97. package/dist/agent-runtime/prompts/operator.js +69 -0
  98. package/dist/agent-runtime/prompts/operator.js.map +1 -0
  99. package/dist/agent-runtime/prompts/verification.d.ts +2 -0
  100. package/dist/agent-runtime/prompts/verification.js +52 -0
  101. package/dist/agent-runtime/prompts/verification.js.map +1 -0
  102. package/dist/agent-runtime/skills/replay.d.ts +4 -14
  103. package/dist/agent-runtime/skills/replay.js +46 -27
  104. package/dist/agent-runtime/skills/replay.js.map +1 -1
  105. package/dist/agent-runtime/tool-batch.d.ts +10 -0
  106. package/dist/agent-runtime/tool-batch.js +51 -0
  107. package/dist/agent-runtime/tool-batch.js.map +1 -0
  108. package/dist/agent-runtime/visual-state.d.ts +2 -0
  109. package/dist/agent-runtime/visual-state.js +24 -0
  110. package/dist/agent-runtime/visual-state.js.map +1 -0
  111. package/dist/agent-runtime/vlm.d.ts +1 -1
  112. package/dist/agent-runtime/vlm.js +1 -1
  113. package/dist/api.js +3 -1
  114. package/dist/api.js.map +1 -1
  115. package/dist/app/agent-host.js +6 -2
  116. package/dist/app/agent-host.js.map +1 -1
  117. package/dist/app/multi-device-host.js +4 -5
  118. package/dist/app/multi-device-host.js.map +1 -1
  119. package/dist/app/session-manager.d.ts +3 -45
  120. package/dist/app/session-manager.js +8 -9
  121. package/dist/app/session-manager.js.map +1 -1
  122. package/dist/bootstrap.js +25 -84
  123. package/dist/bootstrap.js.map +1 -1
  124. package/dist/config/loader.js +12 -1
  125. package/dist/config/loader.js.map +1 -1
  126. package/dist/config/schema.d.ts +7 -2
  127. package/dist/config/schema.js +8 -5
  128. package/dist/config/schema.js.map +1 -1
  129. package/dist/core/abortable-read.d.ts +1 -0
  130. package/dist/core/abortable-read.js +24 -0
  131. package/dist/core/abortable-read.js.map +1 -0
  132. package/dist/device/ui-xml.d.ts +4 -0
  133. package/dist/device/ui-xml.js +35 -13
  134. package/dist/device/ui-xml.js.map +1 -1
  135. package/dist/fleet/adapters/process/node-process-manager.d.ts +2 -1
  136. package/dist/fleet/adapters/process/node-process-manager.js +11 -19
  137. package/dist/fleet/adapters/process/node-process-manager.js.map +1 -1
  138. package/dist/inbound/acp/handlers/models.js +11 -8
  139. package/dist/inbound/acp/handlers/models.js.map +1 -1
  140. package/dist/inbound/acp/handlers/session.d.ts +1 -4
  141. package/dist/inbound/acp/handlers/session.js +3 -6
  142. package/dist/inbound/acp/handlers/session.js.map +1 -1
  143. package/dist/inbound/bma/agent.d.ts +47 -0
  144. package/dist/inbound/bma/agent.js +130 -0
  145. package/dist/inbound/bma/agent.js.map +1 -0
  146. package/dist/inbound/bma/command.d.ts +15 -0
  147. package/dist/inbound/bma/command.js +98 -0
  148. package/dist/inbound/bma/command.js.map +1 -0
  149. package/dist/inbound/bma/model-proxy.d.ts +22 -0
  150. package/dist/inbound/bma/model-proxy.js +130 -0
  151. package/dist/inbound/bma/model-proxy.js.map +1 -0
  152. package/dist/inbound/cli/main.js +12 -2
  153. package/dist/inbound/cli/main.js.map +1 -1
  154. package/dist/inbound/cli/run-artifacts.js +16 -7
  155. package/dist/inbound/cli/run-artifacts.js.map +1 -1
  156. package/dist/inbound/cli/run-command.d.ts +7 -0
  157. package/dist/inbound/cli/run-command.js +37 -29
  158. package/dist/inbound/cli/run-command.js.map +1 -1
  159. package/dist/index.d.ts +1 -10
  160. package/dist/index.js +1 -6
  161. package/dist/index.js.map +1 -1
  162. package/dist/mcp-client/autospawn.d.ts +7 -9
  163. package/dist/mcp-client/autospawn.js +16 -12
  164. package/dist/mcp-client/autospawn.js.map +1 -1
  165. package/dist/mcp-client/client.d.ts +6 -3
  166. package/dist/mcp-client/client.js +31 -13
  167. package/dist/mcp-client/client.js.map +1 -1
  168. package/dist/mcp-client/runtime.d.ts +5 -2
  169. package/dist/plugins/agent-sync/index.d.ts +32 -17
  170. package/dist/plugins/agent-sync/index.js +223 -232
  171. package/dist/plugins/agent-sync/index.js.map +1 -1
  172. package/dist/plugins/message-bus/inbound.d.ts +0 -32
  173. package/dist/plugins/message-bus/inbound.js +3 -0
  174. package/dist/plugins/message-bus/inbound.js.map +1 -1
  175. package/dist/plugins/message-bus/ms-channel-notifier.d.ts +1 -0
  176. package/dist/plugins/message-bus/ms-channel-notifier.js +16 -8
  177. package/dist/plugins/message-bus/ms-channel-notifier.js.map +1 -1
  178. package/dist/plugins/native-chat/deadline.d.ts +2 -0
  179. package/dist/plugins/native-chat/deadline.js +16 -0
  180. package/dist/plugins/native-chat/deadline.js.map +1 -0
  181. package/dist/plugins/native-chat/index.d.ts +46 -0
  182. package/dist/plugins/native-chat/index.js +331 -0
  183. package/dist/plugins/native-chat/index.js.map +1 -0
  184. package/dist/plugins/native-chat/reply-stream.d.ts +50 -0
  185. package/dist/plugins/native-chat/reply-stream.js +81 -0
  186. package/dist/plugins/native-chat/reply-stream.js.map +1 -0
  187. package/dist/plugins/native-chat/session-notifier.d.ts +16 -0
  188. package/dist/plugins/native-chat/session-notifier.js +130 -0
  189. package/dist/plugins/native-chat/session-notifier.js.map +1 -0
  190. package/dist/ports/agent-core.d.ts +2 -0
  191. package/dist/ports/agent-host.d.ts +2 -0
  192. package/dist/ports/agent-host.js +0 -21
  193. package/dist/ports/agent-host.js.map +1 -1
  194. package/dist/ports/device.d.ts +0 -1
  195. package/dist/ports/device.js +0 -1
  196. package/dist/ports/device.js.map +1 -1
  197. package/dist/runtime-authority/device-prompt.gen.d.ts +54 -0
  198. package/dist/runtime-authority/device-prompt.gen.js +19 -0
  199. package/dist/runtime-authority/device-prompt.gen.js.map +1 -0
  200. package/dist/types.d.ts +10 -0
  201. package/dist/types.js +1 -0
  202. package/dist/types.js.map +1 -1
  203. package/package.json +5 -3
  204. package/dist/adapters/device-desktop.d.ts +0 -49
  205. package/dist/adapters/device-desktop.js +0 -132
  206. package/dist/adapters/device-desktop.js.map +0 -1
  207. package/dist/agent-runtime/factory.d.ts +0 -24
  208. package/dist/agent-runtime/factory.js +0 -25
  209. package/dist/agent-runtime/factory.js.map +0 -1
  210. package/dist/agent-runtime/models/vlm/guiowl.d.ts +0 -1
  211. package/dist/agent-runtime/models/vlm/guiowl.js +0 -249
  212. package/dist/agent-runtime/models/vlm/guiowl.js.map +0 -1
  213. package/dist/agent-runtime/models/vlm/maiui.d.ts +0 -1
  214. package/dist/agent-runtime/models/vlm/maiui.js +0 -142
  215. package/dist/agent-runtime/models/vlm/maiui.js.map +0 -1
  216. package/dist/agent-runtime/models/vlm/qwen38.d.ts +0 -1
  217. package/dist/agent-runtime/models/vlm/qwen38.js +0 -241
  218. package/dist/agent-runtime/models/vlm/qwen38.js.map +0 -1
  219. package/dist/agent-runtime/models/vlm/qwenvl.d.ts +0 -1
  220. package/dist/agent-runtime/models/vlm/qwenvl.js +0 -202
  221. package/dist/agent-runtime/models/vlm/qwenvl.js.map +0 -1
  222. package/dist/agent-runtime/modes/orchestrator/app-guide.js.map +0 -1
  223. package/dist/agent-runtime/modes/orchestrator/index.d.ts +0 -41
  224. package/dist/agent-runtime/modes/orchestrator/index.js +0 -218
  225. package/dist/agent-runtime/modes/orchestrator/index.js.map +0 -1
  226. package/dist/agent-runtime/modes/orchestrator/prompt.d.ts +0 -7
  227. package/dist/agent-runtime/modes/orchestrator/prompt.js +0 -53
  228. package/dist/agent-runtime/modes/orchestrator/prompt.js.map +0 -1
  229. package/dist/agent-runtime/reflection.d.ts +0 -100
  230. package/dist/agent-runtime/reflection.js +0 -241
  231. package/dist/agent-runtime/reflection.js.map +0 -1
  232. package/dist/agent-runtime/reflectors/action-reflector.d.ts +0 -97
  233. package/dist/agent-runtime/reflectors/action-reflector.js +0 -234
  234. package/dist/agent-runtime/reflectors/action-reflector.js.map +0 -1
  235. package/dist/agent-runtime/reflectors/policy.d.ts +0 -56
  236. package/dist/agent-runtime/reflectors/policy.js +0 -111
  237. package/dist/agent-runtime/reflectors/policy.js.map +0 -1
  238. package/dist/agent-runtime/reflectors/trajectory-reflector.d.ts +0 -93
  239. package/dist/agent-runtime/reflectors/trajectory-reflector.js +0 -224
  240. package/dist/agent-runtime/reflectors/trajectory-reflector.js.map +0 -1
@@ -0,0 +1,130 @@
1
+ /** Maps the existing SessionManager's trusted updates to the reserved native reply. */
2
+ export class NativeSessionNotifier {
3
+ stream;
4
+ text = "";
5
+ thought = "";
6
+ thoughtIndex;
7
+ tools = new Map();
8
+ constructor(stream) {
9
+ this.stream = stream;
10
+ }
11
+ async send(_sessionId, update) {
12
+ switch (update.sessionUpdate) {
13
+ case "agent_message_chunk": {
14
+ const content = update.content;
15
+ if (content.type === "resource_link") {
16
+ this.commitText();
17
+ this.stream.addPart({ type: "file", url: content.uri, ...(content.name ? { name: content.name } : {}),
18
+ mime_type: content.mimeType ?? "application/octet-stream" });
19
+ this.appendText(`\n${content.uri}`);
20
+ }
21
+ else {
22
+ this.text += content.text;
23
+ this.stream.appendBody(content.text);
24
+ }
25
+ await this.stream.flush();
26
+ return;
27
+ }
28
+ case "agent_thought_chunk": {
29
+ this.thought += update.content.text;
30
+ const part = { type: "thinking", text: this.thought, state: "streaming", _seq: this.thoughtIndex ?? this.stream.parts.length };
31
+ if (this.thoughtIndex === undefined) {
32
+ this.thoughtIndex = this.stream.parts.length;
33
+ this.stream.addPart(part);
34
+ }
35
+ else
36
+ this.stream.replacePart(this.thoughtIndex, part);
37
+ await this.stream.flush();
38
+ return;
39
+ }
40
+ case "tool_call": {
41
+ this.commitText();
42
+ const id = update.toolCallId;
43
+ const name = update.title;
44
+ const args = JSON.parse(update.arguments);
45
+ const index = this.stream.parts.length;
46
+ this.stream.addPart({ type: "tool_use", id, name, arguments: args, state: "streaming", _seq: index });
47
+ this.tools.set(id, { index, name, arguments: args });
48
+ this.appendText("\n");
49
+ await this.stream.flush();
50
+ return;
51
+ }
52
+ case "tool_call_update": {
53
+ const id = update.toolCallId;
54
+ const tool = this.tools.get(id);
55
+ if (update.status === "completed" || update.status === "failed") {
56
+ this.stream.replacePart(tool.index, { type: "tool_use", id, name: tool.name, arguments: tool.arguments,
57
+ state: "done", _seq: tool.index });
58
+ const result = { type: "tool_result", tool_use_id: id, content: update.output,
59
+ is_error: update.status === "failed", _seq: tool.progress ?? this.stream.parts.length };
60
+ if (tool.progress === undefined)
61
+ this.stream.addPart(result);
62
+ else
63
+ this.stream.replacePart(tool.progress, result);
64
+ this.appendText("\n");
65
+ }
66
+ else if (update.output !== undefined) {
67
+ const progress = { type: "custom", kind: "tool_progress", state: "streaming",
68
+ data: { tool_use_id: id, content: update.output, is_error: false }, _seq: tool.progress ?? this.stream.parts.length };
69
+ if (tool.progress === undefined) {
70
+ tool.progress = this.stream.parts.length;
71
+ this.stream.addPart(progress);
72
+ }
73
+ else
74
+ this.stream.replacePart(tool.progress, progress);
75
+ }
76
+ await this.stream.flush();
77
+ return;
78
+ }
79
+ case "stream_complete": {
80
+ this.commitText();
81
+ this.finishThought();
82
+ const task = update.task;
83
+ const errorText = update.error;
84
+ const runtimeErrorCode = update.metadata?.runtimeErrorCode;
85
+ if (runtimeErrorCode)
86
+ this.stream.addPart({ type: "custom", kind: "runtime_error", data: { code: runtimeErrorCode, ...(errorText ? { message: errorText } : {}) } });
87
+ if (task)
88
+ this.stream.addPart({ type: "custom", kind: "device_task_outcome", data: task });
89
+ if (update.stopReason === "cancelled" || task?.task_status === "cancelled")
90
+ await this.stream.cancel({ stopReason: "user_stop" });
91
+ else if (errorText || task?.task_status === "failed")
92
+ await this.stream.fail({ body: this.stream.journal.body || errorText || task?.task_error || "Task failed", stopReason: task?.task_reason === "timeout" ? "timeout" : "error" });
93
+ else if (update.stopReason === "refused")
94
+ await this.stream.refuse({ stopReason: "refused" });
95
+ else
96
+ await this.stream.finalize({ stopReason: update.stopReason });
97
+ }
98
+ }
99
+ }
100
+ async finish(stopReason) {
101
+ if (this.stream.isTerminated) {
102
+ await this.stream.flush();
103
+ return;
104
+ }
105
+ this.commitText();
106
+ this.finishThought();
107
+ if (stopReason === "cancelled")
108
+ await this.stream.cancel({ stopReason: "user_stop" });
109
+ else
110
+ await this.stream.finalize({ stopReason });
111
+ }
112
+ commitText() {
113
+ if (!this.text)
114
+ return;
115
+ this.stream.addPart({ type: "text", text: this.text, state: "done", _seq: this.stream.parts.length });
116
+ this.text = "";
117
+ }
118
+ // Body separators are real text too. Keep canonical parts byte-aligned with
119
+ // the streamed body so UHP can preserve tool/text ordering and settle it.
120
+ appendText(value) {
121
+ this.text += value;
122
+ this.stream.appendBody(value);
123
+ }
124
+ finishThought() {
125
+ if (this.thoughtIndex === undefined)
126
+ return;
127
+ this.stream.replacePart(this.thoughtIndex, { type: "thinking", text: this.thought, state: "done", _seq: this.thoughtIndex });
128
+ }
129
+ }
130
+ //# sourceMappingURL=session-notifier.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"session-notifier.js","sourceRoot":"","sources":["../../../src/plugins/native-chat/session-notifier.ts"],"names":[],"mappings":"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"}
@@ -1,3 +1,4 @@
1
+ import type { ModelReasoning } from "../agent-runtime/models/reasoning.js";
1
2
  /**
2
3
  * Port — IAgentCore.
3
4
  *
@@ -132,6 +133,7 @@ export interface AgentCoreRunResult {
132
133
  }
133
134
  /** Options passed to `IAgentCore.run`. */
134
135
  export interface AgentCoreRunOptions extends AgentCoreRunCallbacks {
136
+ reasoning?: ModelReasoning;
135
137
  /** Natural language task / prompt. */
136
138
  task: string;
137
139
  /** Soft cap on inner steps (legacy adapter); orchestrator may ignore. */
@@ -1,3 +1,4 @@
1
+ import type { ModelReasoning } from "../agent-runtime/models/reasoning.js";
1
2
  /**
2
3
  * Port — AgentHost.
3
4
  *
@@ -90,6 +91,7 @@ export type AgentEvent = {
90
91
  };
91
92
  export type AgentEventListener = (event: AgentEvent) => void | Promise<void>;
92
93
  export interface SubmitTaskOptions {
94
+ reasoning?: ModelReasoning;
93
95
  /** Free-form per-task tag forwarded to logs (e.g. ACP sessionId). */
94
96
  correlationTag?: string;
95
97
  /** Optional caller-supplied AbortSignal merged with the host's controller. */
@@ -1,23 +1,2 @@
1
- /**
2
- * Port — AgentHost.
3
- *
4
- * The host is the in-process event bus that sits between an `IAgentCore`
5
- * and any number of `AgentPlugin`s (ACP, HTTP debug, agent-sync, custom).
6
- *
7
- * Plugins call `host.submitTask(...)` to ask the agent to do something
8
- * and `host.on(...)` to subscribe to lifecycle / streaming events.
9
- * The host:
10
- *
11
- * - assigns a stable `taskId`
12
- * - propagates `taskId` to the logging correlation context
13
- * - translates `IAgentCore` callbacks (onText / onReasoning / onTool /
14
- * onStep) into a typed `AgentEvent` union
15
- * - tracks abort controllers for `cancel(taskId)`
16
- * - exposes `host.agent` for plugins that need to call `setModel`
17
- *
18
- * Plugins MUST NOT call `IAgentCore.run` directly — go through
19
- * `host.submitTask` so cancellation, correlation, and event fan-out
20
- * remain in one place.
21
- */
22
1
  export {};
23
2
  //# sourceMappingURL=agent-host.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"agent-host.js","sourceRoot":"","sources":["../../src/ports/agent-host.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG"}
1
+ {"version":3,"file":"agent-host.js","sourceRoot":"","sources":["../../src/ports/agent-host.ts"],"names":[],"mappings":""}
@@ -3,7 +3,6 @@
3
3
  *
4
4
  * Implementations:
5
5
  * - adapters/device-android-adb.ts (production)
6
- * - adapters/device-desktop.ts (mock / desktop runtime)
7
6
  * - tests/unit/adapters/... (in-memory test doubles)
8
7
  *
9
8
  * The application layer depends ONLY on this interface; concrete child_process /
@@ -3,7 +3,6 @@
3
3
  *
4
4
  * Implementations:
5
5
  * - adapters/device-android-adb.ts (production)
6
- * - adapters/device-desktop.ts (mock / desktop runtime)
7
6
  * - tests/unit/adapters/... (in-memory test doubles)
8
7
  *
9
8
  * The application layer depends ONLY on this interface; concrete child_process /
@@ -1 +1 @@
1
- {"version":3,"file":"device.js","sourceRoot":"","sources":["../../src/ports/device.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG"}
1
+ {"version":3,"file":"device.js","sourceRoot":"","sources":["../../src/ports/device.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG"}
@@ -0,0 +1,54 @@
1
+ export type DevicePromptParams = {
2
+ readonly "conversationId": string;
3
+ readonly "platformAgentId": string;
4
+ readonly "taskId": string;
5
+ readonly "taskRequestMessageId": string;
6
+ readonly "replyMessageId": string;
7
+ readonly "inputFingerprint": string;
8
+ readonly "runtimeLease": {
9
+ readonly "runtimeEpoch": string;
10
+ readonly "leaseId": string;
11
+ readonly "journalStoreId": string;
12
+ readonly "journalGeneration": string;
13
+ };
14
+ readonly "runtimeRunId": string;
15
+ readonly "parts": readonly ({
16
+ readonly "type": "text";
17
+ readonly "text": string;
18
+ } | {
19
+ readonly "type": "image" | "audio" | "file" | "resource";
20
+ readonly "blobRef": string;
21
+ readonly "mimeType"?: string;
22
+ readonly "fileName"?: string;
23
+ } | {
24
+ readonly "type": "resource_link";
25
+ readonly "resourceRef": string;
26
+ readonly "name"?: string;
27
+ readonly "title"?: string;
28
+ readonly "mimeType"?: string;
29
+ readonly "sizeBytes"?: string;
30
+ })[];
31
+ readonly "mentions"?: readonly ({
32
+ readonly "kind": "agent" | "resource" | "user";
33
+ readonly "targetUid": string;
34
+ readonly "label"?: string;
35
+ })[];
36
+ readonly "mode"?: string;
37
+ readonly "modelOverrideId"?: string;
38
+ readonly "observationMode"?: string;
39
+ readonly "executionMode"?: string;
40
+ readonly "reasoning"?: {
41
+ readonly "modelId": string;
42
+ readonly "reasoningOverrideId": string | null;
43
+ };
44
+ };
45
+ export declare const DEVICE_NATIVE_RUNTIME_MANIFEST: {
46
+ readonly schemaVersion: 1;
47
+ readonly kind: "beeos.device-agent.native-runtime";
48
+ readonly contractRevision: "2026-07-14.3";
49
+ readonly runtimeRpcProtocolVersion: 1;
50
+ readonly runtimeMethods: readonly ["device/prompt"];
51
+ readonly capabilities: readonly ["conversation.control"];
52
+ readonly authorityRoutes: readonly ["POST /api/v1/runtime/registrations", "POST /api/v1/runtime/registrations/{registrationId}/heartbeat", "POST /api/v1/agents/sync"];
53
+ };
54
+ export declare const DEVICE_NATIVE_MANIFEST_DIGEST = "f73bc7a23f2a41bb28f1ee3ae4d028a2d245b5144c72c17b699200467ab0a386";
@@ -0,0 +1,19 @@
1
+ export const DEVICE_NATIVE_RUNTIME_MANIFEST = {
2
+ "schemaVersion": 1,
3
+ "kind": "beeos.device-agent.native-runtime",
4
+ "contractRevision": "2026-07-14.3",
5
+ "runtimeRpcProtocolVersion": 1,
6
+ "runtimeMethods": [
7
+ "device/prompt"
8
+ ],
9
+ "capabilities": [
10
+ "conversation.control"
11
+ ],
12
+ "authorityRoutes": [
13
+ "POST /api/v1/runtime/registrations",
14
+ "POST /api/v1/runtime/registrations/{registrationId}/heartbeat",
15
+ "POST /api/v1/agents/sync"
16
+ ]
17
+ };
18
+ export const DEVICE_NATIVE_MANIFEST_DIGEST = "f73bc7a23f2a41bb28f1ee3ae4d028a2d245b5144c72c17b699200467ab0a386";
19
+ //# sourceMappingURL=device-prompt.gen.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"device-prompt.gen.js","sourceRoot":"","sources":["../../src/runtime-authority/device-prompt.gen.ts"],"names":[],"mappings":"AAGA,MAAM,CAAC,MAAM,8BAA8B,GAAG;IAC5C,eAAe,EAAE,CAAC;IAClB,MAAM,EAAE,mCAAmC;IAC3C,kBAAkB,EAAE,cAAc;IAClC,2BAA2B,EAAE,CAAC;IAC9B,gBAAgB,EAAE;QAChB,eAAe;KAChB;IACD,cAAc,EAAE;QACd,sBAAsB;KACvB;IACD,iBAAiB,EAAE;QACjB,oCAAoC;QACpC,+DAA+D;QAC/D,0BAA0B;KAC3B;CACO,CAAC;AACX,MAAM,CAAC,MAAM,6BAA6B,GAAG,kEAAkE,CAAC"}
package/dist/types.d.ts CHANGED
@@ -18,6 +18,10 @@ export interface ImageRef {
18
18
  }
19
19
  export interface ScreenInfo {
20
20
  imageRef: ImageRef | null;
21
+ imageSize?: {
22
+ width: number;
23
+ height: number;
24
+ };
21
25
  width: number;
22
26
  height: number;
23
27
  currentApp: string;
@@ -31,6 +35,10 @@ export interface ScreenInfo {
31
35
  }
32
36
  export interface ScreenInfoInit {
33
37
  imageRef: ImageRef | null;
38
+ imageSize?: {
39
+ width: number;
40
+ height: number;
41
+ };
34
42
  width: number;
35
43
  height: number;
36
44
  currentApp?: string;
@@ -71,6 +79,8 @@ export interface ModelResponse {
71
79
  name: string;
72
80
  arguments: string;
73
81
  }>;
82
+ /** Provider termination reason; truncated native calls must never execute. */
83
+ finishReason?: string;
74
84
  usage?: {
75
85
  inputTokens: number;
76
86
  outputTokens: number;
package/dist/types.js CHANGED
@@ -9,6 +9,7 @@ export function makeScreenInfo(init) {
9
9
  : null;
10
10
  return {
11
11
  imageRef: init.imageRef,
12
+ ...(init.imageSize ? { imageSize: init.imageSize } : {}),
12
13
  width: init.width,
13
14
  height: init.height,
14
15
  currentApp: init.currentApp ?? "",
package/dist/types.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AA0CA;;;;GAIG;AACH,MAAM,UAAU,cAAc,CAAC,IAAoB;IACjD,MAAM,aAAa,GACjB,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,KAAK,UAAU;QAChD,CAAC,CAAC,wBAAwB,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC;QAC7C,CAAC,CAAC,IAAI,CAAC;IACX,OAAO;QACL,QAAQ,EAAE,IAAI,CAAC,QAAQ;QACvB,KAAK,EAAE,IAAI,CAAC,KAAK;QACjB,MAAM,EAAE,IAAI,CAAC,MAAM;QACnB,UAAU,EAAE,IAAI,CAAC,UAAU,IAAI,EAAE;QACjC,KAAK,EAAE,IAAI,CAAC,KAAK,IAAI,IAAI;QACzB,aAAa;KACd,CAAC;AACJ,CAAC;AAED,SAAS,wBAAwB,CAAC,OAAe;IAC/C,MAAM,KAAK,GAAG,0BAA0B,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IACvD,OAAO,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;AACjC,CAAC"}
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AA4CA;;;;GAIG;AACH,MAAM,UAAU,cAAc,CAAC,IAAoB;IACjD,MAAM,aAAa,GACjB,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,KAAK,UAAU;QAChD,CAAC,CAAC,wBAAwB,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC;QAC7C,CAAC,CAAC,IAAI,CAAC;IACX,OAAO;QACL,QAAQ,EAAE,IAAI,CAAC,QAAQ;QACvB,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACxD,KAAK,EAAE,IAAI,CAAC,KAAK;QACjB,MAAM,EAAE,IAAI,CAAC,MAAM;QACnB,UAAU,EAAE,IAAI,CAAC,UAAU,IAAI,EAAE;QACjC,KAAK,EAAE,IAAI,CAAC,KAAK,IAAI,IAAI;QACzB,aAAa;KACd,CAAC;AACJ,CAAC;AAED,SAAS,wBAAwB,CAAC,OAAe;IAC/C,MAAM,KAAK,GAAG,0BAA0B,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IACvD,OAAO,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;AACjC,CAAC"}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@beeos-ai/device-agent",
3
- "version": "0.15.0",
4
- "description": "BeeOS device-agent — Android/desktop AI control agent (TypeScript) speaking ACP over Bridge WebSocket. Connects to a sibling device-mcp-server process for device control.",
3
+ "version": "0.16.0",
4
+ "description": "BeeOS device-agent — Android AI control agent (TypeScript) speaking ACP over Bridge WebSocket. Connects to a sibling device-mcp-server process for device control.",
5
5
  "license": "Apache-2.0",
6
6
  "type": "module",
7
7
  "main": "dist/index.js",
@@ -51,7 +51,9 @@
51
51
  },
52
52
  "dependencies": {
53
53
  "@beeos-ai/beeos-types": "4.3.0",
54
+ "@beeos-ai/bma-executor-sdk": "1.6.0",
54
55
  "@beeos-ai/bridge-client": "^0.1.1",
56
+ "@beeos-ai/cloud-harness-sdk": "1.0.0-cloud.6",
55
57
  "@beeos-ai/message-sdk": "2.0.8",
56
58
  "@fastify/cors": "^11.2.0",
57
59
  "@fastify/multipart": "^10.0.0",
@@ -74,7 +76,7 @@
74
76
  "@beeos-ai/device-mcp-server": "0.5.2"
75
77
  },
76
78
  "scripts": {
77
- "build": "tsc -p tsconfig.json && chmod +x dist/inbound/cli/main.js",
79
+ "build": "node -e \"require('node:fs').rmSync('dist', { recursive: true, force: true })\" && tsc -p tsconfig.json && chmod +x dist/inbound/cli/main.js",
78
80
  "start": "tsx src/inbound/cli/main.ts",
79
81
  "dev": "tsx --watch src/inbound/cli/main.ts",
80
82
  "test": "vitest run",
@@ -1,49 +0,0 @@
1
- /**
2
- * Adapter — desktop mock device.
3
- *
4
- * Equivalent to the Python `mode=desktop` runtime: returns a fixed canvas,
5
- * records every action into an in-memory log, and never touches the host.
6
- *
7
- * Used for:
8
- * - local UI development without ADB
9
- * - unit testing the application/inbound layers
10
- * - smoke-testing CI without a real device
11
- */
12
- import type { Action } from "../core/actions.js";
13
- import type { ScreenObservation, UiNode } from "../core/screen.js";
14
- import type { DeviceInfo, IDevice } from "../ports/device.js";
15
- export interface DesktopAdapterOptions {
16
- width?: number;
17
- height?: number;
18
- name?: string;
19
- os?: "desktop-linux" | "desktop-windows" | "desktop-macos";
20
- }
21
- export declare class DesktopAdapter implements IDevice {
22
- readonly actions: Action[];
23
- private readonly width;
24
- private readonly height;
25
- private readonly name;
26
- private readonly osType;
27
- private connected;
28
- constructor(opts?: DesktopAdapterOptions);
29
- connect(): Promise<void>;
30
- disconnect(): Promise<void>;
31
- getInfo(): Promise<DeviceInfo>;
32
- capture(): Promise<ScreenObservation>;
33
- getUiTree(): Promise<UiNode[]>;
34
- apply(action: Action): Promise<void>;
35
- install(_path: string): Promise<void>;
36
- shell(command: string): Promise<string>;
37
- resolveWellKnownDir(mime: string): Promise<string>;
38
- }
39
- /**
40
- * Map a MIME type to a desktop well-known directory under `~/`.
41
- *
42
- * - APKs explicitly throw `unsupported_platform` because desktop has no
43
- * APK installer and dropping one in `~/Downloads` would be misleading
44
- * (the user can't act on it anyway).
45
- *
46
- * Exported so unit tests can call it without instantiating the
47
- * adapter.
48
- */
49
- export declare function resolveDesktopWellKnownDir(mime: string): string;
@@ -1,132 +0,0 @@
1
- /**
2
- * Adapter — desktop mock device.
3
- *
4
- * Equivalent to the Python `mode=desktop` runtime: returns a fixed canvas,
5
- * records every action into an in-memory log, and never touches the host.
6
- *
7
- * Used for:
8
- * - local UI development without ADB
9
- * - unit testing the application/inbound layers
10
- * - smoke-testing CI without a real device
11
- */
12
- import { randomBytes } from "node:crypto";
13
- import { homedir } from "node:os";
14
- import * as path from "node:path";
15
- export class DesktopAdapter {
16
- actions = [];
17
- width;
18
- height;
19
- name;
20
- osType;
21
- connected = false;
22
- constructor(opts = {}) {
23
- this.width = opts.width ?? 1920;
24
- this.height = opts.height ?? 1080;
25
- this.name = opts.name ?? "Desktop (mock)";
26
- this.osType = opts.os ?? defaultDesktopOs();
27
- }
28
- async connect() {
29
- this.connected = true;
30
- }
31
- async disconnect() {
32
- this.connected = false;
33
- }
34
- async getInfo() {
35
- // ACP wire v2: per-action capability vocabulary. Desktop mock supports
36
- // visual capture + tap/swipe/type but no Android-specific keys/install.
37
- const capabilities = [
38
- "screenshot",
39
- "tap",
40
- "swipe",
41
- "type",
42
- "shell",
43
- ];
44
- return {
45
- type: this.osType,
46
- name: this.name,
47
- os: prettyOsName(this.osType),
48
- width: this.width,
49
- height: this.height,
50
- capabilities,
51
- osVersion: "mock",
52
- density: 96,
53
- metadata: { currentApp: "Mock", connected: String(this.connected) },
54
- };
55
- }
56
- async capture() {
57
- return {
58
- width: this.width,
59
- height: this.height,
60
- imageBase64: TINY_PNG_BASE64,
61
- imageFormat: "png",
62
- uiXml: null,
63
- currentApp: "Mock",
64
- capturedAt: Date.now(),
65
- };
66
- }
67
- async getUiTree() {
68
- return [];
69
- }
70
- async apply(action) {
71
- this.actions.push(action);
72
- }
73
- async install(_path) {
74
- this.actions.push({ kind: "shell", command: `install:${_path}` });
75
- }
76
- async shell(command) {
77
- this.actions.push({ kind: "shell", command });
78
- return `mock-stdout:${randomBytes(4).toString("hex")}`;
79
- }
80
- async resolveWellKnownDir(mime) {
81
- return resolveDesktopWellKnownDir(mime);
82
- }
83
- }
84
- /**
85
- * Map a MIME type to a desktop well-known directory under `~/`.
86
- *
87
- * - APKs explicitly throw `unsupported_platform` because desktop has no
88
- * APK installer and dropping one in `~/Downloads` would be misleading
89
- * (the user can't act on it anyway).
90
- *
91
- * Exported so unit tests can call it without instantiating the
92
- * adapter.
93
- */
94
- export function resolveDesktopWellKnownDir(mime) {
95
- const lower = mime.toLowerCase();
96
- if (lower === "application/vnd.android.package-archive") {
97
- const err = new Error("APK files cannot be resolved on desktop — no installer available");
98
- err.code = "unsupported_platform";
99
- throw err;
100
- }
101
- const home = homedir();
102
- if (lower.startsWith("image/"))
103
- return path.join(home, "Pictures");
104
- if (lower.startsWith("video/"))
105
- return path.join(home, "Movies");
106
- if (lower.startsWith("audio/"))
107
- return path.join(home, "Music");
108
- return path.join(home, "Downloads");
109
- }
110
- function defaultDesktopOs() {
111
- switch (process.platform) {
112
- case "darwin":
113
- return "desktop-macos";
114
- case "win32":
115
- return "desktop-windows";
116
- default:
117
- return "desktop-linux";
118
- }
119
- }
120
- function prettyOsName(t) {
121
- switch (t) {
122
- case "desktop-macos":
123
- return "macOS";
124
- case "desktop-windows":
125
- return "Windows";
126
- case "desktop-linux":
127
- return "Linux";
128
- }
129
- }
130
- // A 1x1 transparent PNG. Constant so unit tests get deterministic output.
131
- const TINY_PNG_BASE64 = "iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR42mNkYAAAAAYAAjCB0C8AAAAASUVORK5CYII=";
132
- //# sourceMappingURL=device-desktop.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"device-desktop.js","sourceRoot":"","sources":["../../src/adapters/device-desktop.ts"],"names":[],"mappings":"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"}
@@ -1,24 +0,0 @@
1
- /**
2
- * createAgentCore — factory for IAgentCore implementations.
3
- *
4
- * Legacy source-compatibility factory. The two accepted kinds are:
5
- *
6
- * "hybrid" → AgentRunnerCore (default; Hybrid Plan-Act / ReAct)
7
- * "orchestrator" → OrchestratorAgent (outer tool-calling LLM + inner VLM)
8
- *
9
- * Production code constructs `AgentRunnerCore` directly and derives its
10
- * internal planner policy from the per-task execution mode.
11
- */
12
- import type { IAgentCore } from "../ports/agent-core.js";
13
- import { type AgentRunnerCoreOptions } from "./modes/hybrid/index.js";
14
- import { type OrchestratorAgentOptions } from "./modes/orchestrator/index.js";
15
- /** @deprecated The "orchestrator" discriminator will be removed next major. */
16
- export type AgentCoreKind = "hybrid" | "orchestrator";
17
- /** @deprecated Construct AgentRunnerCore directly. */
18
- export type CreateAgentCoreOptions = ({
19
- kind: "hybrid";
20
- } & AgentRunnerCoreOptions) | ({
21
- kind: "orchestrator";
22
- } & OrchestratorAgentOptions);
23
- /** @deprecated Construct AgentRunnerCore directly. */
24
- export declare function createAgentCore(opts: CreateAgentCoreOptions): IAgentCore;
@@ -1,25 +0,0 @@
1
- /**
2
- * createAgentCore — factory for IAgentCore implementations.
3
- *
4
- * Legacy source-compatibility factory. The two accepted kinds are:
5
- *
6
- * "hybrid" → AgentRunnerCore (default; Hybrid Plan-Act / ReAct)
7
- * "orchestrator" → OrchestratorAgent (outer tool-calling LLM + inner VLM)
8
- *
9
- * Production code constructs `AgentRunnerCore` directly and derives its
10
- * internal planner policy from the per-task execution mode.
11
- */
12
- import { AgentRunnerCore } from "./modes/hybrid/index.js";
13
- import { OrchestratorAgent } from "./modes/orchestrator/index.js";
14
- /** @deprecated Construct AgentRunnerCore directly. */
15
- export function createAgentCore(opts) {
16
- if (opts.kind === "hybrid") {
17
- // eslint-disable-next-line @typescript-eslint/no-unused-vars
18
- const { kind: _kind, ...rest } = opts;
19
- return new AgentRunnerCore(rest);
20
- }
21
- // eslint-disable-next-line @typescript-eslint/no-unused-vars
22
- const { kind: _kind, ...rest } = opts;
23
- return new OrchestratorAgent(rest);
24
- }
25
- //# sourceMappingURL=factory.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"factory.js","sourceRoot":"","sources":["../../src/agent-runtime/factory.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAGH,OAAO,EAAE,eAAe,EAA+B,MAAM,yBAAyB,CAAC;AACvF,OAAO,EAAE,iBAAiB,EAAiC,MAAM,+BAA+B,CAAC;AAUjG,sDAAsD;AACtD,MAAM,UAAU,eAAe,CAAC,IAA4B;IAC1D,IAAI,IAAI,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;QAC3B,6DAA6D;QAC7D,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,IAAI,EAAE,GAAG,IAAI,CAAC;QACtC,OAAO,IAAI,eAAe,CAAC,IAAI,CAAC,CAAC;IACnC,CAAC;IACD,6DAA6D;IAC7D,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,IAAI,EAAE,GAAG,IAAI,CAAC;IACtC,OAAO,IAAI,iBAAiB,CAAC,IAAI,CAAC,CAAC;AACrC,CAAC"}
@@ -1 +0,0 @@
1
- export {};