@beeos-ai/device-agent 0.4.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 (398) hide show
  1. package/.pi/extensions/android-tools.ts +139 -0
  2. package/.pi/skills/.gitkeep +0 -0
  3. package/.pi/skills/ground-mobile-fallback/SKILL.md +50 -0
  4. package/LICENSE +201 -0
  5. package/dist/action/handler.d.ts +9 -0
  6. package/dist/action/handler.js +124 -0
  7. package/dist/action/handler.js.map +1 -0
  8. package/dist/adapters/agent-gateway-client.d.ts +256 -0
  9. package/dist/adapters/agent-gateway-client.js +332 -0
  10. package/dist/adapters/agent-gateway-client.js.map +1 -0
  11. package/dist/adapters/agentcore-inner-loop.d.ts +29 -0
  12. package/dist/adapters/agentcore-inner-loop.js +72 -0
  13. package/dist/adapters/agentcore-inner-loop.js.map +1 -0
  14. package/dist/adapters/agentcore-pi.d.ts +215 -0
  15. package/dist/adapters/agentcore-pi.js +464 -0
  16. package/dist/adapters/agentcore-pi.js.map +1 -0
  17. package/dist/adapters/agentcore-runner.d.ts +70 -0
  18. package/dist/adapters/agentcore-runner.js +255 -0
  19. package/dist/adapters/agentcore-runner.js.map +1 -0
  20. package/dist/adapters/device-android-adb.d.ts +41 -0
  21. package/dist/adapters/device-android-adb.js +279 -0
  22. package/dist/adapters/device-android-adb.js.map +1 -0
  23. package/dist/adapters/device-desktop.d.ts +37 -0
  24. package/dist/adapters/device-desktop.js +101 -0
  25. package/dist/adapters/device-desktop.js.map +1 -0
  26. package/dist/adapters/identity-file.d.ts +30 -0
  27. package/dist/adapters/identity-file.js +50 -0
  28. package/dist/adapters/identity-file.js.map +1 -0
  29. package/dist/adapters/transport-bridge-ws.d.ts +39 -0
  30. package/dist/adapters/transport-bridge-ws.js +49 -0
  31. package/dist/adapters/transport-bridge-ws.js.map +1 -0
  32. package/dist/adapters/vlm-inner-loop.d.ts +88 -0
  33. package/dist/adapters/vlm-inner-loop.js +199 -0
  34. package/dist/adapters/vlm-inner-loop.js.map +1 -0
  35. package/dist/agent-runtime/adapters/base.d.ts +145 -0
  36. package/dist/agent-runtime/adapters/base.js +29 -0
  37. package/dist/agent-runtime/adapters/base.js.map +1 -0
  38. package/dist/agent-runtime/adapters/index.d.ts +17 -0
  39. package/dist/agent-runtime/adapters/index.js +17 -0
  40. package/dist/agent-runtime/adapters/index.js.map +1 -0
  41. package/dist/agent-runtime/adapters/mock.d.ts +44 -0
  42. package/dist/agent-runtime/adapters/mock.js +54 -0
  43. package/dist/agent-runtime/adapters/mock.js.map +1 -0
  44. package/dist/agent-runtime/adapters/openai.d.ts +63 -0
  45. package/dist/agent-runtime/adapters/openai.js +302 -0
  46. package/dist/agent-runtime/adapters/openai.js.map +1 -0
  47. package/dist/agent-runtime/adapters/registry.d.ts +49 -0
  48. package/dist/agent-runtime/adapters/registry.js +129 -0
  49. package/dist/agent-runtime/adapters/registry.js.map +1 -0
  50. package/dist/agent-runtime/adapters/ui-tars.d.ts +13 -0
  51. package/dist/agent-runtime/adapters/ui-tars.js +22 -0
  52. package/dist/agent-runtime/adapters/ui-tars.js.map +1 -0
  53. package/dist/agent-runtime/agent-runner.d.ts +149 -0
  54. package/dist/agent-runtime/agent-runner.js +356 -0
  55. package/dist/agent-runtime/agent-runner.js.map +1 -0
  56. package/dist/agent-runtime/core.d.ts +170 -0
  57. package/dist/agent-runtime/core.js +624 -0
  58. package/dist/agent-runtime/core.js.map +1 -0
  59. package/dist/agent-runtime/index.d.ts +16 -0
  60. package/dist/agent-runtime/index.js +17 -0
  61. package/dist/agent-runtime/index.js.map +1 -0
  62. package/dist/agent-runtime/plan-executor.d.ts +118 -0
  63. package/dist/agent-runtime/plan-executor.js +501 -0
  64. package/dist/agent-runtime/plan-executor.js.map +1 -0
  65. package/dist/agent-runtime/planner/base.d.ts +128 -0
  66. package/dist/agent-runtime/planner/base.js +157 -0
  67. package/dist/agent-runtime/planner/base.js.map +1 -0
  68. package/dist/agent-runtime/planner/llm-planner.d.ts +58 -0
  69. package/dist/agent-runtime/planner/llm-planner.js +112 -0
  70. package/dist/agent-runtime/planner/llm-planner.js.map +1 -0
  71. package/dist/agent-runtime/planner/noop-planner.d.ts +13 -0
  72. package/dist/agent-runtime/planner/noop-planner.js +30 -0
  73. package/dist/agent-runtime/planner/noop-planner.js.map +1 -0
  74. package/dist/agent-runtime/planner/prompts.d.ts +33 -0
  75. package/dist/agent-runtime/planner/prompts.js +165 -0
  76. package/dist/agent-runtime/planner/prompts.js.map +1 -0
  77. package/dist/agent-runtime/reflection.d.ts +81 -0
  78. package/dist/agent-runtime/reflection.js +189 -0
  79. package/dist/agent-runtime/reflection.js.map +1 -0
  80. package/dist/agent-runtime/reflectors/action-reflector.d.ts +97 -0
  81. package/dist/agent-runtime/reflectors/action-reflector.js +233 -0
  82. package/dist/agent-runtime/reflectors/action-reflector.js.map +1 -0
  83. package/dist/agent-runtime/reflectors/policy.d.ts +53 -0
  84. package/dist/agent-runtime/reflectors/policy.js +106 -0
  85. package/dist/agent-runtime/reflectors/policy.js.map +1 -0
  86. package/dist/agent-runtime/reflectors/trajectory-reflector.d.ts +94 -0
  87. package/dist/agent-runtime/reflectors/trajectory-reflector.js +223 -0
  88. package/dist/agent-runtime/reflectors/trajectory-reflector.js.map +1 -0
  89. package/dist/agent-runtime/skills/embedding.d.ts +53 -0
  90. package/dist/agent-runtime/skills/embedding.js +134 -0
  91. package/dist/agent-runtime/skills/embedding.js.map +1 -0
  92. package/dist/agent-runtime/skills/fs-store.d.ts +88 -0
  93. package/dist/agent-runtime/skills/fs-store.js +483 -0
  94. package/dist/agent-runtime/skills/fs-store.js.map +1 -0
  95. package/dist/agent-runtime/skills/index.d.ts +10 -0
  96. package/dist/agent-runtime/skills/index.js +10 -0
  97. package/dist/agent-runtime/skills/index.js.map +1 -0
  98. package/dist/agent-runtime/skills/matcher-evolver.d.ts +88 -0
  99. package/dist/agent-runtime/skills/matcher-evolver.js +110 -0
  100. package/dist/agent-runtime/skills/matcher-evolver.js.map +1 -0
  101. package/dist/agent-runtime/skills/memory-store.d.ts +23 -0
  102. package/dist/agent-runtime/skills/memory-store.js +94 -0
  103. package/dist/agent-runtime/skills/memory-store.js.map +1 -0
  104. package/dist/agent-runtime/skills/normalise.d.ts +40 -0
  105. package/dist/agent-runtime/skills/normalise.js +152 -0
  106. package/dist/agent-runtime/skills/normalise.js.map +1 -0
  107. package/dist/agent-runtime/skills/replay.d.ts +46 -0
  108. package/dist/agent-runtime/skills/replay.js +106 -0
  109. package/dist/agent-runtime/skills/replay.js.map +1 -0
  110. package/dist/agent-runtime/skills/sqlite-store.d.ts +60 -0
  111. package/dist/agent-runtime/skills/sqlite-store.js +234 -0
  112. package/dist/agent-runtime/skills/sqlite-store.js.map +1 -0
  113. package/dist/agent-runtime/skills/types.d.ts +99 -0
  114. package/dist/agent-runtime/skills/types.js +14 -0
  115. package/dist/agent-runtime/skills/types.js.map +1 -0
  116. package/dist/agent.d.ts +110 -0
  117. package/dist/agent.js +162 -0
  118. package/dist/agent.js.map +1 -0
  119. package/dist/api.d.ts +27 -0
  120. package/dist/api.js +48 -0
  121. package/dist/api.js.map +1 -0
  122. package/dist/app/agent-host.d.ts +59 -0
  123. package/dist/app/agent-host.js +263 -0
  124. package/dist/app/agent-host.js.map +1 -0
  125. package/dist/app/device-manager.d.ts +28 -0
  126. package/dist/app/device-manager.js +64 -0
  127. package/dist/app/device-manager.js.map +1 -0
  128. package/dist/app/message-store.d.ts +55 -0
  129. package/dist/app/message-store.js +99 -0
  130. package/dist/app/message-store.js.map +1 -0
  131. package/dist/app/session-manager.d.ts +132 -0
  132. package/dist/app/session-manager.js +350 -0
  133. package/dist/app/session-manager.js.map +1 -0
  134. package/dist/bootstrap.d.ts +94 -0
  135. package/dist/bootstrap.js +459 -0
  136. package/dist/bootstrap.js.map +1 -0
  137. package/dist/chat.d.ts +16 -0
  138. package/dist/chat.js +175 -0
  139. package/dist/chat.js.map +1 -0
  140. package/dist/config/loader.d.ts +77 -0
  141. package/dist/config/loader.js +292 -0
  142. package/dist/config/loader.js.map +1 -0
  143. package/dist/config/schema.d.ts +162 -0
  144. package/dist/config/schema.js +243 -0
  145. package/dist/config/schema.js.map +1 -0
  146. package/dist/core/actions.d.ts +60 -0
  147. package/dist/core/actions.js +120 -0
  148. package/dist/core/actions.js.map +1 -0
  149. package/dist/core/errors.d.ts +8 -0
  150. package/dist/core/errors.js +9 -0
  151. package/dist/core/errors.js.map +1 -0
  152. package/dist/core/screen.d.ts +7 -0
  153. package/dist/core/screen.js +8 -0
  154. package/dist/core/screen.js.map +1 -0
  155. package/dist/core/session.d.ts +42 -0
  156. package/dist/core/session.js +29 -0
  157. package/dist/core/session.js.map +1 -0
  158. package/dist/debug/dump-system-prompt.d.ts +1 -0
  159. package/dist/debug/dump-system-prompt.js +34 -0
  160. package/dist/debug/dump-system-prompt.js.map +1 -0
  161. package/dist/device/android.d.ts +25 -0
  162. package/dist/device/android.js +231 -0
  163. package/dist/device/android.js.map +1 -0
  164. package/dist/device/apps.d.ts +3 -0
  165. package/dist/device/apps.js +77 -0
  166. package/dist/device/apps.js.map +1 -0
  167. package/dist/device/base.d.ts +20 -0
  168. package/dist/device/base.js +2 -0
  169. package/dist/device/base.js.map +1 -0
  170. package/dist/device/ui-xml.d.ts +29 -0
  171. package/dist/device/ui-xml.js +194 -0
  172. package/dist/device/ui-xml.js.map +1 -0
  173. package/dist/fleet/adapters/process/node-process-manager.d.ts +157 -0
  174. package/dist/fleet/adapters/process/node-process-manager.js +664 -0
  175. package/dist/fleet/adapters/process/node-process-manager.js.map +1 -0
  176. package/dist/fleet/adapters/sources/local-adb.d.ts +105 -0
  177. package/dist/fleet/adapters/sources/local-adb.js +353 -0
  178. package/dist/fleet/adapters/sources/local-adb.js.map +1 -0
  179. package/dist/fleet/adapters/sources/remote-adb.d.ts +97 -0
  180. package/dist/fleet/adapters/sources/remote-adb.js +138 -0
  181. package/dist/fleet/adapters/sources/remote-adb.js.map +1 -0
  182. package/dist/fleet/adapters/state/beeos-cli-store.d.ts +72 -0
  183. package/dist/fleet/adapters/state/beeos-cli-store.js +250 -0
  184. package/dist/fleet/adapters/state/beeos-cli-store.js.map +1 -0
  185. package/dist/fleet/adapters/state/port-allocator.d.ts +43 -0
  186. package/dist/fleet/adapters/state/port-allocator.js +173 -0
  187. package/dist/fleet/adapters/state/port-allocator.js.map +1 -0
  188. package/dist/fleet/domain/device.d.ts +138 -0
  189. package/dist/fleet/domain/device.js +49 -0
  190. package/dist/fleet/domain/device.js.map +1 -0
  191. package/dist/fleet/domain/events.d.ts +102 -0
  192. package/dist/fleet/domain/events.js +15 -0
  193. package/dist/fleet/domain/events.js.map +1 -0
  194. package/dist/fleet/domain/fsm.d.ts +122 -0
  195. package/dist/fleet/domain/fsm.js +475 -0
  196. package/dist/fleet/domain/fsm.js.map +1 -0
  197. package/dist/fleet/http/status-client.d.ts +31 -0
  198. package/dist/fleet/http/status-client.js +115 -0
  199. package/dist/fleet/http/status-client.js.map +1 -0
  200. package/dist/fleet/http/status-server.d.ts +64 -0
  201. package/dist/fleet/http/status-server.js +200 -0
  202. package/dist/fleet/http/status-server.js.map +1 -0
  203. package/dist/fleet/index.d.ts +27 -0
  204. package/dist/fleet/index.js +17 -0
  205. package/dist/fleet/index.js.map +1 -0
  206. package/dist/fleet/installer/index.d.ts +12 -0
  207. package/dist/fleet/installer/index.js +13 -0
  208. package/dist/fleet/installer/index.js.map +1 -0
  209. package/dist/fleet/installer/launchd-mac.d.ts +73 -0
  210. package/dist/fleet/installer/launchd-mac.js +291 -0
  211. package/dist/fleet/installer/launchd-mac.js.map +1 -0
  212. package/dist/fleet/installer/service-spec.d.ts +70 -0
  213. package/dist/fleet/installer/service-spec.js +43 -0
  214. package/dist/fleet/installer/service-spec.js.map +1 -0
  215. package/dist/fleet/installer/spawn-env.d.ts +45 -0
  216. package/dist/fleet/installer/spawn-env.js +224 -0
  217. package/dist/fleet/installer/spawn-env.js.map +1 -0
  218. package/dist/fleet/ports/clock.d.ts +19 -0
  219. package/dist/fleet/ports/clock.js +26 -0
  220. package/dist/fleet/ports/clock.js.map +1 -0
  221. package/dist/fleet/ports/device-source.d.ts +28 -0
  222. package/dist/fleet/ports/device-source.js +18 -0
  223. package/dist/fleet/ports/device-source.js.map +1 -0
  224. package/dist/fleet/ports/process-manager.d.ts +110 -0
  225. package/dist/fleet/ports/process-manager.js +27 -0
  226. package/dist/fleet/ports/process-manager.js.map +1 -0
  227. package/dist/fleet/ports/state-registry.d.ts +49 -0
  228. package/dist/fleet/ports/state-registry.js +12 -0
  229. package/dist/fleet/ports/state-registry.js.map +1 -0
  230. package/dist/fleet/supervisor.d.ts +107 -0
  231. package/dist/fleet/supervisor.js +508 -0
  232. package/dist/fleet/supervisor.js.map +1 -0
  233. package/dist/grounding/grounder.d.ts +46 -0
  234. package/dist/grounding/grounder.js +82 -0
  235. package/dist/grounding/grounder.js.map +1 -0
  236. package/dist/inbound/acp/handlers/device.d.ts +43 -0
  237. package/dist/inbound/acp/handlers/device.js +153 -0
  238. package/dist/inbound/acp/handlers/device.js.map +1 -0
  239. package/dist/inbound/acp/handlers/initialize.d.ts +71 -0
  240. package/dist/inbound/acp/handlers/initialize.js +53 -0
  241. package/dist/inbound/acp/handlers/initialize.js.map +1 -0
  242. package/dist/inbound/acp/handlers/models.d.ts +16 -0
  243. package/dist/inbound/acp/handlers/models.js +23 -0
  244. package/dist/inbound/acp/handlers/models.js.map +1 -0
  245. package/dist/inbound/acp/handlers/session.d.ts +51 -0
  246. package/dist/inbound/acp/handlers/session.js +61 -0
  247. package/dist/inbound/acp/handlers/session.js.map +1 -0
  248. package/dist/inbound/acp/handlers/skills.d.ts +8 -0
  249. package/dist/inbound/acp/handlers/skills.js +9 -0
  250. package/dist/inbound/acp/handlers/skills.js.map +1 -0
  251. package/dist/inbound/acp/notifier.d.ts +35 -0
  252. package/dist/inbound/acp/notifier.js +45 -0
  253. package/dist/inbound/acp/notifier.js.map +1 -0
  254. package/dist/inbound/acp/router.d.ts +67 -0
  255. package/dist/inbound/acp/router.js +179 -0
  256. package/dist/inbound/acp/router.js.map +1 -0
  257. package/dist/inbound/cli/fleet-command.d.ts +34 -0
  258. package/dist/inbound/cli/fleet-command.js +792 -0
  259. package/dist/inbound/cli/fleet-command.js.map +1 -0
  260. package/dist/inbound/cli/main.d.ts +38 -0
  261. package/dist/inbound/cli/main.js +364 -0
  262. package/dist/inbound/cli/main.js.map +1 -0
  263. package/dist/inbound/cli/run-command.d.ts +101 -0
  264. package/dist/inbound/cli/run-command.js +405 -0
  265. package/dist/inbound/cli/run-command.js.map +1 -0
  266. package/dist/inbound/cli/skills-command.d.ts +39 -0
  267. package/dist/inbound/cli/skills-command.js +333 -0
  268. package/dist/inbound/cli/skills-command.js.map +1 -0
  269. package/dist/inbound/http/server.d.ts +7 -0
  270. package/dist/inbound/http/server.js +8 -0
  271. package/dist/inbound/http/server.js.map +1 -0
  272. package/dist/index.d.ts +66 -0
  273. package/dist/index.js +48 -0
  274. package/dist/index.js.map +1 -0
  275. package/dist/logger/index.d.ts +37 -0
  276. package/dist/logger/index.js +84 -0
  277. package/dist/logger/index.js.map +1 -0
  278. package/dist/mcp-client/autospawn.d.ts +67 -0
  279. package/dist/mcp-client/autospawn.js +173 -0
  280. package/dist/mcp-client/autospawn.js.map +1 -0
  281. package/dist/mcp-client/client.d.ts +78 -0
  282. package/dist/mcp-client/client.js +168 -0
  283. package/dist/mcp-client/client.js.map +1 -0
  284. package/dist/mcp-client/index.d.ts +7 -0
  285. package/dist/mcp-client/index.js +4 -0
  286. package/dist/mcp-client/index.js.map +1 -0
  287. package/dist/mcp-client/inproc.d.ts +47 -0
  288. package/dist/mcp-client/inproc.js +229 -0
  289. package/dist/mcp-client/inproc.js.map +1 -0
  290. package/dist/mcp-client/runtime.d.ts +34 -0
  291. package/dist/mcp-client/runtime.js +15 -0
  292. package/dist/mcp-client/runtime.js.map +1 -0
  293. package/dist/model/adapters/autoglm.d.ts +31 -0
  294. package/dist/model/adapters/autoglm.js +409 -0
  295. package/dist/model/adapters/autoglm.js.map +1 -0
  296. package/dist/model/adapters/base.d.ts +13 -0
  297. package/dist/model/adapters/base.js +27 -0
  298. package/dist/model/adapters/base.js.map +1 -0
  299. package/dist/model/adapters/guiowl.d.ts +1 -0
  300. package/dist/model/adapters/guiowl.js +253 -0
  301. package/dist/model/adapters/guiowl.js.map +1 -0
  302. package/dist/model/adapters/index.d.ts +6 -0
  303. package/dist/model/adapters/index.js +8 -0
  304. package/dist/model/adapters/index.js.map +1 -0
  305. package/dist/model/adapters/maiui.d.ts +1 -0
  306. package/dist/model/adapters/maiui.js +117 -0
  307. package/dist/model/adapters/maiui.js.map +1 -0
  308. package/dist/model/adapters/qwenvl.d.ts +1 -0
  309. package/dist/model/adapters/qwenvl.js +108 -0
  310. package/dist/model/adapters/qwenvl.js.map +1 -0
  311. package/dist/model/adapters/showui.d.ts +1 -0
  312. package/dist/model/adapters/showui.js +132 -0
  313. package/dist/model/adapters/showui.js.map +1 -0
  314. package/dist/model/adapters/tool-call.d.ts +6 -0
  315. package/dist/model/adapters/tool-call.js +102 -0
  316. package/dist/model/adapters/tool-call.js.map +1 -0
  317. package/dist/model/adapters/uitars.d.ts +1 -0
  318. package/dist/model/adapters/uitars.js +180 -0
  319. package/dist/model/adapters/uitars.js.map +1 -0
  320. package/dist/model/base.d.ts +32 -0
  321. package/dist/model/base.js +2 -0
  322. package/dist/model/base.js.map +1 -0
  323. package/dist/model/client.d.ts +26 -0
  324. package/dist/model/client.js +300 -0
  325. package/dist/model/client.js.map +1 -0
  326. package/dist/model/image/compress.d.ts +53 -0
  327. package/dist/model/image/compress.js +89 -0
  328. package/dist/model/image/compress.js.map +1 -0
  329. package/dist/model/image/transport.d.ts +134 -0
  330. package/dist/model/image/transport.js +154 -0
  331. package/dist/model/image/transport.js.map +1 -0
  332. package/dist/orchestrator-system-prompt.d.ts +6 -0
  333. package/dist/orchestrator-system-prompt.js +81 -0
  334. package/dist/orchestrator-system-prompt.js.map +1 -0
  335. package/dist/pi-context.d.ts +82 -0
  336. package/dist/pi-context.js +62 -0
  337. package/dist/pi-context.js.map +1 -0
  338. package/dist/pi-local-skills.d.ts +17 -0
  339. package/dist/pi-local-skills.js +24 -0
  340. package/dist/pi-local-skills.js.map +1 -0
  341. package/dist/plugins/acp/index.d.ts +46 -0
  342. package/dist/plugins/acp/index.js +111 -0
  343. package/dist/plugins/acp/index.js.map +1 -0
  344. package/dist/plugins/agent-sync/index.d.ts +40 -0
  345. package/dist/plugins/agent-sync/index.js +98 -0
  346. package/dist/plugins/agent-sync/index.js.map +1 -0
  347. package/dist/plugins/http-debug/index.d.ts +30 -0
  348. package/dist/plugins/http-debug/index.js +64 -0
  349. package/dist/plugins/http-debug/index.js.map +1 -0
  350. package/dist/plugins/http-debug/server.d.ts +92 -0
  351. package/dist/plugins/http-debug/server.js +464 -0
  352. package/dist/plugins/http-debug/server.js.map +1 -0
  353. package/dist/ports/agent-core.d.ts +158 -0
  354. package/dist/ports/agent-core.js +2 -0
  355. package/dist/ports/agent-core.js.map +1 -0
  356. package/dist/ports/agent-host.d.ts +125 -0
  357. package/dist/ports/agent-host.js +23 -0
  358. package/dist/ports/agent-host.js.map +1 -0
  359. package/dist/ports/device.d.ts +53 -0
  360. package/dist/ports/device.js +13 -0
  361. package/dist/ports/device.js.map +1 -0
  362. package/dist/ports/identity.d.ts +22 -0
  363. package/dist/ports/identity.js +9 -0
  364. package/dist/ports/identity.js.map +1 -0
  365. package/dist/ports/plugin.d.ts +62 -0
  366. package/dist/ports/plugin.js +35 -0
  367. package/dist/ports/plugin.js.map +1 -0
  368. package/dist/ports/transport.d.ts +32 -0
  369. package/dist/ports/transport.js +12 -0
  370. package/dist/ports/transport.js.map +1 -0
  371. package/dist/ports/vlm.d.ts +59 -0
  372. package/dist/ports/vlm.js +14 -0
  373. package/dist/ports/vlm.js.map +1 -0
  374. package/dist/test-lan-autoglm.d.ts +7 -0
  375. package/dist/test-lan-autoglm.js +46 -0
  376. package/dist/test-lan-autoglm.js.map +1 -0
  377. package/dist/test-mem-breakdown.d.ts +1 -0
  378. package/dist/test-mem-breakdown.js +103 -0
  379. package/dist/test-mem-breakdown.js.map +1 -0
  380. package/dist/test-mem.d.ts +1 -0
  381. package/dist/test-mem.js +60 -0
  382. package/dist/test-mem.js.map +1 -0
  383. package/dist/test-mobile-use.d.ts +1 -0
  384. package/dist/test-mobile-use.js +18 -0
  385. package/dist/test-mobile-use.js.map +1 -0
  386. package/dist/test-screenshot-loop.d.ts +1 -0
  387. package/dist/test-screenshot-loop.js +43 -0
  388. package/dist/test-screenshot-loop.js.map +1 -0
  389. package/dist/test-screenshot.d.ts +1 -0
  390. package/dist/test-screenshot.js +10 -0
  391. package/dist/test-screenshot.js.map +1 -0
  392. package/dist/test-ui-xml-dump.d.ts +15 -0
  393. package/dist/test-ui-xml-dump.js +49 -0
  394. package/dist/test-ui-xml-dump.js.map +1 -0
  395. package/dist/types.d.ts +69 -0
  396. package/dist/types.js +23 -0
  397. package/dist/types.js.map +1 -0
  398. package/package.json +94 -0
@@ -0,0 +1,223 @@
1
+ /**
2
+ * agent-runtime/reflectors/trajectory-reflector — periodic global progress
3
+ * assessment.
4
+ *
5
+ * Phase 2.2 of the device-agent reflector upgrade plan
6
+ * ([../../../../../../.cursor/plans/device-agent-reflector-skills_d5599350.plan.md]).
7
+ *
8
+ * Where the {@link IActionReflector} (Phase 1.4) is *step-local* — does THIS
9
+ * one prediction look right? — the trajectory reflector is *task-global*:
10
+ * every N steps it inspects the rolling history + accumulated notes + the
11
+ * current goal and decides whether the agent is making progress, drifting
12
+ * onto a wrong sub-task, or stuck altogether.
13
+ *
14
+ * The default {@link LLMTrajectoryReflector} talks to a cheap text-only
15
+ * chat model (`glm-4-flash` by default, the same family the planner uses)
16
+ * and emits a strict `{ verdict, reason, suggestion? }` JSON payload.
17
+ *
18
+ * Cost model:
19
+ * - One ~600-1000 input token / ≤80 output token request per N steps.
20
+ * With N=5 and a 30-step task budget that's ≤ 6 calls / task, ~ ¥0.001
21
+ * in incremental cost.
22
+ * - Reflector failures are non-fatal: a transient 5xx logs a warning and
23
+ * returns `verdict: "on_track"` so the executor keeps going.
24
+ */
25
+ import OpenAI from "openai";
26
+ import { getLogger } from "../../logger/index.js";
27
+ const DEFAULT_MODEL = "glm-4-flash";
28
+ const DEFAULT_EVERY_N = 5;
29
+ const HISTORY_TAIL = 10;
30
+ const STR_MAX = 240;
31
+ export class LLMTrajectoryReflector {
32
+ name = "llm-trajectory-reflector";
33
+ client;
34
+ modelName;
35
+ everyNSteps;
36
+ maxTokens;
37
+ temperature;
38
+ constructor(opts = {}) {
39
+ this.modelName =
40
+ opts.modelName ?? process.env.TRAJECTORY_REFLECTOR_MODEL ?? DEFAULT_MODEL;
41
+ const fromEnv = readInt(process.env.TRAJECTORY_REFLECTOR_EVERY_N, NaN);
42
+ this.everyNSteps = Math.max(1, opts.everyNSteps ?? (Number.isFinite(fromEnv) ? fromEnv : DEFAULT_EVERY_N));
43
+ this.maxTokens = opts.maxTokens ?? 160;
44
+ this.temperature = opts.temperature ?? 0;
45
+ const baseUrl = opts.baseUrl ??
46
+ process.env.TRAJECTORY_REFLECTOR_BASE_URL ??
47
+ process.env.PLANNER_BASE_URL ??
48
+ process.env.GUI_AGENT_BASE_URL ??
49
+ "https://api.openai.com/v1";
50
+ const apiKey = opts.apiKey ??
51
+ process.env.TRAJECTORY_REFLECTOR_API_KEY ??
52
+ process.env.PLANNER_API_KEY ??
53
+ process.env.GUI_AGENT_API_KEY ??
54
+ "EMPTY";
55
+ this.client =
56
+ opts.client ?? new OpenAI({ baseURL: baseUrl, apiKey, timeout: 30_000, maxRetries: 1 });
57
+ }
58
+ shouldReflect(step, history) {
59
+ if (step <= 0)
60
+ return false;
61
+ if (step % this.everyNSteps !== 0)
62
+ return false;
63
+ // No need to fire when there is essentially no signal yet.
64
+ if (history.length === 0)
65
+ return false;
66
+ return true;
67
+ }
68
+ async reflect(ctx, signal) {
69
+ const startedAt = Date.now();
70
+ const messages = [
71
+ { role: "system", content: SYSTEM_PROMPT },
72
+ { role: "user", content: renderUserPrompt(ctx) },
73
+ ];
74
+ try {
75
+ const resp = await this.client.chat.completions.create({
76
+ model: this.modelName,
77
+ messages,
78
+ temperature: this.temperature,
79
+ max_tokens: this.maxTokens,
80
+ response_format: { type: "json_object" },
81
+ }, { signal });
82
+ const raw = resp.choices?.[0]?.message?.content ?? "";
83
+ const usage = {
84
+ inputTokens: resp.usage?.prompt_tokens ?? 0,
85
+ outputTokens: resp.usage?.completion_tokens ?? 0,
86
+ durationMs: Date.now() - startedAt,
87
+ costUsd: estimateCostUsd(this.modelName, resp.usage?.prompt_tokens ?? 0, resp.usage?.completion_tokens ?? 0),
88
+ };
89
+ const parsed = parseVerdict(raw);
90
+ return { ...parsed, usage };
91
+ }
92
+ catch (e) {
93
+ // Reflector failures must NOT abort the run — log and pass.
94
+ getLogger().warn({ component: "trajectory-reflector", err: errMsg(e) }, "trajectory-reflector.failed");
95
+ return {
96
+ verdict: "on_track",
97
+ reason: `trajectory reflector unavailable: ${errMsg(e)}`,
98
+ usage: {
99
+ inputTokens: 0,
100
+ outputTokens: 0,
101
+ durationMs: Date.now() - startedAt,
102
+ costUsd: 0,
103
+ },
104
+ };
105
+ }
106
+ }
107
+ }
108
+ /* -------------------------------------------------------------------------- */
109
+ /* Prompts */
110
+ /* -------------------------------------------------------------------------- */
111
+ const SYSTEM_PROMPT = `You are the trajectory reviewer of a mobile-agent run.
112
+ Every few steps you inspect the goal, the rolling step history, any notes the
113
+ agent took mid-run, and the latest screen summary, and you classify the
114
+ trajectory:
115
+
116
+ - "on_track" — clear progress toward the goal, keep going.
117
+ - "off_track" — drifting onto a wrong sub-goal / wrong app / wrong screen.
118
+ Recoverable; the executor should re-plan.
119
+ - "stuck" — repeated failures or no observable progress for several steps.
120
+ The executor MUST replan or escalate.
121
+
122
+ Output STRICT JSON:
123
+ {"verdict": "on_track" | "off_track" | "stuck",
124
+ "reason": "<<=200 chars>",
125
+ "suggestion": "<concrete next step, optional>"}
126
+
127
+ Be conservative — only flag off_track / stuck when the evidence is clear.
128
+ Empty notes / sparse history is normal early on; that alone is not stuck.`;
129
+ function renderUserPrompt(ctx) {
130
+ const tail = ctx.history.slice(-HISTORY_TAIL).map((h) => ({
131
+ step: h.stepIdx,
132
+ action: h.action ? actionToOneLiner(h.action) : null,
133
+ rationale: truncate(h.rationale, STR_MAX),
134
+ actionResult: h.actionResult ?? null,
135
+ actError: h.actErrorMessage ?? null,
136
+ obsSummary: truncate(h.observationSummary, STR_MAX),
137
+ }));
138
+ return JSON.stringify({
139
+ goal: truncate(ctx.goal, STR_MAX * 2),
140
+ stepCounter: ctx.step,
141
+ maxSteps: ctx.maxSteps,
142
+ recentHistory: tail,
143
+ notes: ctx.notes.slice(-8).map((n) => truncate(n, STR_MAX)),
144
+ latestScreenSummary: truncate(ctx.observationSummary, STR_MAX),
145
+ }, null, 2);
146
+ }
147
+ function actionToOneLiner(a) {
148
+ const target = a.target ? ` ${JSON.stringify(a.target)}` : "";
149
+ const payload = a.payload && Object.keys(a.payload).length > 0 ? ` ${JSON.stringify(a.payload)}` : "";
150
+ return `${a.type}${target}${payload}`;
151
+ }
152
+ function truncate(s, max) {
153
+ if (!s)
154
+ return "";
155
+ return s.length > max ? `${s.slice(0, max - 1)}…` : s;
156
+ }
157
+ /* -------------------------------------------------------------------------- */
158
+ /* Verdict parsing */
159
+ /* -------------------------------------------------------------------------- */
160
+ function parseVerdict(raw) {
161
+ if (!raw)
162
+ return { verdict: "on_track", reason: "empty trajectory response" };
163
+ try {
164
+ const obj = JSON.parse(raw);
165
+ if (obj && typeof obj === "object") {
166
+ const verdict = normaliseVerdict(obj.verdict);
167
+ const reason = typeof obj.reason === "string"
168
+ ? obj.reason.trim()
169
+ : "";
170
+ const suggestion = typeof obj.suggestion === "string"
171
+ ? obj.suggestion.trim()
172
+ : undefined;
173
+ return {
174
+ verdict,
175
+ reason: reason || (verdict === "on_track" ? "ok" : "trajectory flagged"),
176
+ suggestion: suggestion && suggestion.length > 0 ? suggestion : undefined,
177
+ };
178
+ }
179
+ }
180
+ catch {
181
+ /* fall through */
182
+ }
183
+ return {
184
+ verdict: "on_track",
185
+ reason: `unparseable trajectory response: ${truncate(raw, 80)}`,
186
+ };
187
+ }
188
+ function normaliseVerdict(v) {
189
+ if (typeof v !== "string")
190
+ return "on_track";
191
+ const norm = v.trim().toLowerCase();
192
+ if (norm === "off_track" || norm === "off-track" || norm === "drift")
193
+ return "off_track";
194
+ if (norm === "stuck" || norm === "stalled")
195
+ return "stuck";
196
+ return "on_track";
197
+ }
198
+ const PRICING_PER_KTOK_USD = {
199
+ "glm-4-flash": { input: 0.0001, output: 0.0001 },
200
+ "glm-4-air": { input: 0.0014, output: 0.0014 },
201
+ "glm-4-plus": { input: 0.007, output: 0.007 },
202
+ };
203
+ function estimateCostUsd(model, inputTokens, outputTokens) {
204
+ const p = PRICING_PER_KTOK_USD[model.toLowerCase()];
205
+ if (!p)
206
+ return 0;
207
+ return (inputTokens / 1000) * p.input + (outputTokens / 1000) * p.output;
208
+ }
209
+ /* -------------------------------------------------------------------------- */
210
+ /* Misc helpers */
211
+ /* -------------------------------------------------------------------------- */
212
+ function readInt(raw, fallback) {
213
+ if (!raw)
214
+ return fallback;
215
+ const n = Number(raw);
216
+ return Number.isFinite(n) ? Math.floor(n) : fallback;
217
+ }
218
+ function errMsg(e) {
219
+ if (e instanceof Error)
220
+ return e.message;
221
+ return String(e);
222
+ }
223
+ //# sourceMappingURL=trajectory-reflector.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"trajectory-reflector.js","sourceRoot":"","sources":["../../../src/agent-runtime/reflectors/trajectory-reflector.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,53 @@
1
+ /**
2
+ * agent-runtime/skills/embedding — task-summary → dense vector helpers.
3
+ *
4
+ * Phase 3.1 of the [device-agent reflector upgrade plan](../../../../../../.cursor/plans/device-agent-reflector-skills_d5599350.plan.md).
5
+ *
6
+ * The plan calls for "glm-4-flash embedding endpoint OR hash
7
+ * bag-of-words". We default to the deterministic hash producer because:
8
+ *
9
+ * - it has zero external deps and zero token cost,
10
+ * - it gives reasonable recall on the "same task wording" case (which
11
+ * is exactly what the cache hits on),
12
+ * - it lets unit tests run hermetically without an OpenAI client,
13
+ * - it can always be swapped out with an `EmbeddingProvider` plug-in
14
+ * later (the matcher only needs `Float32Array` of a fixed size).
15
+ *
16
+ * The vector dimension matches the SQL schema — Phase 3.1 picks 256.
17
+ */
18
+ export declare const DEFAULT_EMBEDDING_DIM = 256;
19
+ /**
20
+ * Provider that turns a string into a fixed-length dense vector.
21
+ * Implementations may be sync (hash) or async (LLM endpoint). The
22
+ * matcher only invokes embed once per task, so an async hop is fine.
23
+ */
24
+ export interface EmbeddingProvider {
25
+ readonly dim: number;
26
+ embed(text: string): Promise<Float32Array> | Float32Array;
27
+ }
28
+ /**
29
+ * Hash bag-of-words — fnv1a-32 per token, mod-projected onto a fixed
30
+ * dimension, L2-normalised. Same input yields the same vector across
31
+ * processes, which makes the cache deterministic.
32
+ */
33
+ export declare class HashEmbeddingProvider implements EmbeddingProvider {
34
+ readonly dim: number;
35
+ constructor(dim?: number);
36
+ embed(text: string): Float32Array;
37
+ }
38
+ /**
39
+ * Cosine similarity in `[-1, 1]`. Returns 0 when either vector is the
40
+ * zero vector. Inputs are expected to share the same dimension; mixed
41
+ * dims throw.
42
+ */
43
+ export declare function cosine(a: Float32Array, b: Float32Array): number;
44
+ /**
45
+ * Encode a Float32Array to a Buffer (raw little-endian Float32 layout).
46
+ * Re-exported because the filesystem store base64-encodes this Buffer
47
+ * into the per-skill JSON file; bench / migration tooling can use it
48
+ * directly. The dimension is recovered from `buffer.byteLength / 4` on
49
+ * read.
50
+ */
51
+ export declare function embeddingToBuffer(v: Float32Array): Buffer;
52
+ /** Decode a Buffer back into a Float32Array (zero-copy when aligned). */
53
+ export declare function bufferToEmbedding(buf: Buffer): Float32Array;
@@ -0,0 +1,134 @@
1
+ /**
2
+ * agent-runtime/skills/embedding — task-summary → dense vector helpers.
3
+ *
4
+ * Phase 3.1 of the [device-agent reflector upgrade plan](../../../../../../.cursor/plans/device-agent-reflector-skills_d5599350.plan.md).
5
+ *
6
+ * The plan calls for "glm-4-flash embedding endpoint OR hash
7
+ * bag-of-words". We default to the deterministic hash producer because:
8
+ *
9
+ * - it has zero external deps and zero token cost,
10
+ * - it gives reasonable recall on the "same task wording" case (which
11
+ * is exactly what the cache hits on),
12
+ * - it lets unit tests run hermetically without an OpenAI client,
13
+ * - it can always be swapped out with an `EmbeddingProvider` plug-in
14
+ * later (the matcher only needs `Float32Array` of a fixed size).
15
+ *
16
+ * The vector dimension matches the SQL schema — Phase 3.1 picks 256.
17
+ */
18
+ export const DEFAULT_EMBEDDING_DIM = 256;
19
+ /**
20
+ * Hash bag-of-words — fnv1a-32 per token, mod-projected onto a fixed
21
+ * dimension, L2-normalised. Same input yields the same vector across
22
+ * processes, which makes the cache deterministic.
23
+ */
24
+ export class HashEmbeddingProvider {
25
+ dim;
26
+ constructor(dim = DEFAULT_EMBEDDING_DIM) {
27
+ this.dim = dim;
28
+ }
29
+ embed(text) {
30
+ const v = new Float32Array(this.dim);
31
+ if (!text)
32
+ return v;
33
+ const tokens = tokenize(text);
34
+ for (const tok of tokens) {
35
+ const h = fnv1a32(tok);
36
+ const idx = h % this.dim;
37
+ // Sign bit picks +1 / -1 so unrelated tokens don't all just add.
38
+ const sign = (h >>> 31) === 0 ? 1 : -1;
39
+ v[idx] += sign;
40
+ }
41
+ return l2Normalise(v);
42
+ }
43
+ }
44
+ /**
45
+ * Cosine similarity in `[-1, 1]`. Returns 0 when either vector is the
46
+ * zero vector. Inputs are expected to share the same dimension; mixed
47
+ * dims throw.
48
+ */
49
+ export function cosine(a, b) {
50
+ if (a.length !== b.length) {
51
+ throw new Error(`cosine: length mismatch ${a.length} vs ${b.length}`);
52
+ }
53
+ let dot = 0;
54
+ let aa = 0;
55
+ let bb = 0;
56
+ for (let i = 0; i < a.length; i++) {
57
+ const ax = a[i];
58
+ const bx = b[i];
59
+ dot += ax * bx;
60
+ aa += ax * ax;
61
+ bb += bx * bx;
62
+ }
63
+ if (aa === 0 || bb === 0)
64
+ return 0;
65
+ return dot / Math.sqrt(aa * bb);
66
+ }
67
+ /**
68
+ * Encode a Float32Array to a Buffer (raw little-endian Float32 layout).
69
+ * Re-exported because the filesystem store base64-encodes this Buffer
70
+ * into the per-skill JSON file; bench / migration tooling can use it
71
+ * directly. The dimension is recovered from `buffer.byteLength / 4` on
72
+ * read.
73
+ */
74
+ export function embeddingToBuffer(v) {
75
+ return Buffer.from(v.buffer, v.byteOffset, v.byteLength);
76
+ }
77
+ /** Decode a Buffer back into a Float32Array (zero-copy when aligned). */
78
+ export function bufferToEmbedding(buf) {
79
+ // Buffer's underlying ArrayBuffer can be a slice — copy out so callers
80
+ // can hold the typed array beyond the buffer's lifetime.
81
+ const view = new Float32Array(buf.byteLength / 4);
82
+ for (let i = 0; i < view.length; i++) {
83
+ view[i] = buf.readFloatLE(i * 4);
84
+ }
85
+ return view;
86
+ }
87
+ /* -------------------------------------------------------------------------- */
88
+ /* internals */
89
+ /* -------------------------------------------------------------------------- */
90
+ function tokenize(text) {
91
+ // Whitespace tokens for ASCII / Latin scripts + per-character tokens for
92
+ // CJK (where there's no whitespace between glyphs). This is deliberately
93
+ // dumb — we only need enough recall to match "buy chicken" against
94
+ // "purchase chicken" or "买鸡" against "买只鸡".
95
+ const tokens = [];
96
+ for (const word of text.toLowerCase().split(/[^\p{L}\p{N}]+/u)) {
97
+ if (!word)
98
+ continue;
99
+ if (/[\u3400-\u9fff]/.test(word)) {
100
+ // CJK — emit each character + the bigrams to capture local order.
101
+ const chars = [...word];
102
+ for (const ch of chars)
103
+ tokens.push(ch);
104
+ for (let i = 0; i + 1 < chars.length; i++) {
105
+ tokens.push(chars[i] + chars[i + 1]);
106
+ }
107
+ }
108
+ else {
109
+ tokens.push(word);
110
+ }
111
+ }
112
+ return tokens;
113
+ }
114
+ function fnv1a32(s) {
115
+ let h = 0x811c9dc5;
116
+ for (let i = 0; i < s.length; i++) {
117
+ h ^= s.charCodeAt(i);
118
+ // 32-bit FNV prime multiplication.
119
+ h = (h + ((h << 1) + (h << 4) + (h << 7) + (h << 8) + (h << 24))) >>> 0;
120
+ }
121
+ return h >>> 0;
122
+ }
123
+ function l2Normalise(v) {
124
+ let sum = 0;
125
+ for (let i = 0; i < v.length; i++)
126
+ sum += v[i] * v[i];
127
+ if (sum === 0)
128
+ return v;
129
+ const inv = 1 / Math.sqrt(sum);
130
+ for (let i = 0; i < v.length; i++)
131
+ v[i] *= inv;
132
+ return v;
133
+ }
134
+ //# sourceMappingURL=embedding.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"embedding.js","sourceRoot":"","sources":["../../../src/agent-runtime/skills/embedding.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,88 @@
1
+ /**
2
+ * agent-runtime/skills/fs-store — FileSystem-backed
3
+ * {@link SkillCacheStore}.
4
+ *
5
+ * Layout:
6
+ * ```
7
+ * <root>/
8
+ * ├── _meta/
9
+ * │ └── version # plain text "1"
10
+ * ├── com.tencent.mm/
11
+ * │ ├── 8dc7bafa-...-e58122.json # main record (atomic tmp+rename)
12
+ * │ └── 8dc7bafa-...-e58122.deltas.jsonl # append-only counter log
13
+ * └── com.xunmeng.pinduoduo/
14
+ * └── ...
15
+ * ```
16
+ *
17
+ * The default root is `~/.beeos/device-agent/skills/`. Cloud
18
+ * deployments mount a `ReadWriteMany` PVC at `$HOME/.beeos` so multiple
19
+ * pods see one shared cache; on a developer laptop / EdgeAgent host the
20
+ * directory is just a local folder, naturally shared by every
21
+ * `device-agent` process running on that machine.
22
+ *
23
+ * Counter atomicity relies on POSIX O_APPEND semantics: each
24
+ * `recordSuccess` / `recordFailure` writes a single ≤30-byte line via
25
+ * `fs.appendFileSync`, which the kernel guarantees to be atomic across
26
+ * processes (line ≤ PIPE_BUF). When `deltas.jsonl` exceeds
27
+ * `compactThresholdBytes` (default 4 KB) the next writer folds the
28
+ * accumulated deltas into the main JSON via tmp+rename and truncates
29
+ * the deltas file. Read paths always fold the live deltas plus any
30
+ * orphaned `*.compacting` files left by a crashed writer.
31
+ *
32
+ * The schema is intentionally diff-friendly (one self-contained JSON
33
+ * per skill, base64-encoded embedding) so users can inspect / git-track
34
+ * / rsync the cache directly.
35
+ */
36
+ import type { NewSkillInput, Skill, SkillCacheStore, SkillMatch } from "./types.js";
37
+ export interface FileSystemSkillCacheStoreOptions {
38
+ /**
39
+ * Root directory under which the per-app subfolders live. Defaults
40
+ * to `~/.beeos/device-agent/skills/`.
41
+ */
42
+ root?: string;
43
+ /**
44
+ * Skip the auto-mkdir step on construction. Tests typically pass a
45
+ * pre-existing tmp dir.
46
+ */
47
+ noMkdir?: boolean;
48
+ /**
49
+ * Override the compaction trigger size. Tests use a small value
50
+ * (e.g. 256 bytes) to exercise compaction; production keeps the
51
+ * default to stay below PIPE_BUF.
52
+ */
53
+ compactThresholdBytes?: number;
54
+ }
55
+ /**
56
+ * Default cache root: `~/.beeos/device-agent/skills/` unless
57
+ * `SKILL_CACHE_PATH` overrides it. Returns a directory path (the
58
+ * legacy SQLite store returned a `.sqlite` *file*; the new layout is
59
+ * directory-based).
60
+ */
61
+ export declare function defaultSkillCachePath(): string;
62
+ export declare class FileSystemSkillCacheStore implements SkillCacheStore {
63
+ private readonly root;
64
+ private readonly compactThreshold;
65
+ constructor(opts?: FileSystemSkillCacheStoreOptions);
66
+ insert(input: NewSkillInput): Skill;
67
+ get(id: string): Skill | undefined;
68
+ listByApp(appPackage: string, limit?: number): Skill[];
69
+ listAll(limit?: number): Skill[];
70
+ search(appPackage: string, query: Float32Array, k: number): SkillMatch[];
71
+ recordSuccess(id: string, now?: number): void;
72
+ recordFailure(id: string, now?: number): void;
73
+ delete(id: string): boolean;
74
+ clear(): void;
75
+ close(): void;
76
+ private writeVersionIfMissing;
77
+ private appDir;
78
+ private skillJsonPath;
79
+ private skillDeltasPath;
80
+ private appDirs;
81
+ private skillIdsIn;
82
+ private locate;
83
+ private readSkill;
84
+ private foldDeltaFiles;
85
+ private findCompacting;
86
+ private appendDelta;
87
+ private maybeCompact;
88
+ }