@intent-systems/nexus 2026.1.5-4 → 2026.1.5-8

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 (347) hide show
  1. package/dist/agents/agent-id.js +41 -0
  2. package/dist/agents/auth-profiles.js +114 -25
  3. package/dist/agents/identity-state.js +101 -0
  4. package/dist/agents/model-auth.js +1 -0
  5. package/dist/agents/model-fallback.js +15 -9
  6. package/dist/agents/model-selection.js +1 -1
  7. package/dist/agents/models-config.js +17 -11
  8. package/dist/agents/pi-embedded-runner.js +101 -9
  9. package/dist/agents/sandbox.js +12 -3
  10. package/dist/agents/skill-runner.js +41 -6
  11. package/dist/agents/skill-usage.js +117 -17
  12. package/dist/agents/skills-status.js +4 -3
  13. package/dist/agents/skills.js +38 -30
  14. package/dist/agents/subagent-registry.js +25 -11
  15. package/dist/agents/system-prompt.js +16 -0
  16. package/dist/agents/tool-policy.js +19 -3
  17. package/dist/agents/tools/browser-tool.js +5 -2
  18. package/dist/agents/tools/image-tool.js +93 -8
  19. package/dist/agents/tools/sessions-announce-target.js +5 -1
  20. package/dist/agents/workspace.js +81 -59
  21. package/dist/auto-reply/command-detection.js +2 -1
  22. package/dist/auto-reply/reply/directive-handling.js +153 -28
  23. package/dist/auto-reply/reply/directives.js +17 -2
  24. package/dist/auto-reply/reply/model-selection.js +8 -3
  25. package/dist/auto-reply/reply/queue.js +2 -2
  26. package/dist/auto-reply/reply.js +1 -1
  27. package/dist/auto-reply/thinking.js +15 -0
  28. package/dist/browser/chrome.js +1 -1
  29. package/dist/browser/client.js +2 -0
  30. package/dist/browser/config.js +6 -2
  31. package/dist/browser/pw-tools-core.js +3 -0
  32. package/dist/browser/routes/agent.js +14 -0
  33. package/dist/canvas-host/server.js +1 -1
  34. package/dist/capabilities/detector.js +46 -15
  35. package/dist/capabilities/registry.js +2 -1
  36. package/dist/cli/cloud-cli.js +70 -7
  37. package/dist/cli/credential-cli.js +214 -23
  38. package/dist/cli/gateway-cli.js +1 -1
  39. package/dist/cli/log-cli.js +25 -0
  40. package/dist/cli/pairing-cli.js +1 -1
  41. package/dist/cli/program.js +82 -8
  42. package/dist/cli/run-main.js +1 -1
  43. package/dist/cli/skills-cli.js +165 -30
  44. package/dist/cli/skills-hub-cli.js +68 -36
  45. package/dist/cli/tool-connector-cli.js +99 -24
  46. package/dist/cli/upstream-sync-cli.js +253 -96
  47. package/dist/cli/usage-cli.js +14 -0
  48. package/dist/commands/auth-choice-options.js +6 -1
  49. package/dist/commands/auth-choice.js +157 -5
  50. package/dist/commands/bootstrap-preset.js +26 -12
  51. package/dist/commands/capabilities.js +33 -6
  52. package/dist/commands/claude-md.js +3 -2
  53. package/dist/commands/config-view.js +1 -1
  54. package/dist/commands/config.js +85 -0
  55. package/dist/commands/configure.js +4 -4
  56. package/dist/commands/credential.js +497 -36
  57. package/dist/commands/cursor-hooks.js +240 -0
  58. package/dist/commands/cursor-rules.js +14 -188
  59. package/dist/commands/doctor.js +5 -4
  60. package/dist/commands/identity.js +29 -32
  61. package/dist/commands/init.js +304 -20
  62. package/dist/commands/log.js +134 -0
  63. package/dist/commands/models/fallbacks.js +1 -1
  64. package/dist/commands/models/image-fallbacks.js +1 -1
  65. package/dist/commands/models/list.js +1 -1
  66. package/dist/commands/models/scan.js +1 -1
  67. package/dist/commands/onboard-auth.js +27 -2
  68. package/dist/commands/onboard-eve-identity.js +8 -9
  69. package/dist/commands/onboard-non-interactive.js +4 -2
  70. package/dist/commands/onboard-quickstart.js +18 -11
  71. package/dist/commands/quest-state.js +271 -0
  72. package/dist/commands/quest.js +53 -13
  73. package/dist/commands/reset.js +1 -1
  74. package/dist/commands/sessions-ingest.js +5 -4
  75. package/dist/commands/setup.js +4 -2
  76. package/dist/commands/skills-manifest.js +89 -29
  77. package/dist/commands/status.js +193 -73
  78. package/dist/commands/suggestions.js +1 -1
  79. package/dist/commands/usage-tracking.js +32 -0
  80. package/dist/commands/usage-upload.js +6 -1
  81. package/dist/config/defaults.js +1 -3
  82. package/dist/config/includes.js +5 -7
  83. package/dist/config/io.js +88 -16
  84. package/dist/config/legacy.js +4 -2
  85. package/dist/config/paths.js +16 -0
  86. package/dist/config/sessions.js +9 -5
  87. package/dist/config/zod-schema.js +4 -3
  88. package/dist/control-plane/broker/broker.js +131 -78
  89. package/dist/control-plane/compaction.js +3 -5
  90. package/dist/control-plane/factory.js +2 -2
  91. package/dist/control-plane/index.js +2 -2
  92. package/dist/control-plane/odu/agents.js +28 -23
  93. package/dist/control-plane/odu/interaction-tools.js +62 -50
  94. package/dist/control-plane/odu/prompt-loader.js +8 -8
  95. package/dist/control-plane/odu/runtime.js +87 -75
  96. package/dist/control-plane/odu-control-plane.js +14 -12
  97. package/dist/control-plane/single-agent.js +13 -13
  98. package/dist/credentials/store.js +133 -7
  99. package/dist/daemon/launchd.js +14 -0
  100. package/dist/entry.js +0 -0
  101. package/dist/gateway/server-browser.js +5 -4
  102. package/dist/gateway/server-methods/cron.js +11 -1
  103. package/dist/gateway/server.js +14 -7
  104. package/dist/infra/bonjour.js +1 -1
  105. package/dist/infra/event-log.js +8 -2
  106. package/dist/infra/path-env.js +1 -2
  107. package/dist/infra/provider-usage.auth.js +5 -3
  108. package/dist/infra/provider-usage.fetch.claude.js +16 -6
  109. package/dist/infra/provider-usage.fetch.minimax.js +8 -3
  110. package/dist/infra/provider-usage.js +9 -5
  111. package/dist/infra/restart.js +2 -2
  112. package/dist/infra/usage-settings.js +78 -0
  113. package/dist/infra/usage-suggestions.js +17 -5
  114. package/dist/infra/usage-upload.js +38 -1
  115. package/dist/infra/voicewake.js +2 -2
  116. package/dist/media/image-ops.js +3 -1
  117. package/dist/memory/index.js +2 -381
  118. package/dist/native/nexus-cloud/darwin-arm64/nexus-cloud +0 -0
  119. package/dist/native/nexus-cloud/darwin-arm64/nexus-cloud-rs +0 -0
  120. package/dist/pairing/pairing-store.js +24 -0
  121. package/dist/providers/github-copilot-auth.js +1 -1
  122. package/dist/routing/resolve-route.js +6 -6
  123. package/dist/routing/session-key.js +3 -1
  124. package/dist/sessions/send-policy.js +5 -5
  125. package/dist/slack/monitor.js +22 -1
  126. package/dist/telegram/reaction-level.js +2 -1
  127. package/dist/utils.js +8 -3
  128. package/dist/wizard/onboarding.js +29 -7
  129. package/docs/AGENTS.default.md +1 -1
  130. package/docs/configuration.md +1 -1
  131. package/docs/feature-inventory/overview.md +2 -2
  132. package/docs/reference/templates/AGENTS.md +172 -109
  133. package/docs/templates/AGENTS.md +140 -199
  134. package/docs/templates/BOOTSTRAP.md +40 -20
  135. package/docs/templates/IDENTITY.md +6 -0
  136. package/docs/templates/USER.md +22 -2
  137. package/package.json +3 -1
  138. package/skills/{notion → connectors/notion}/SKILL.md +1 -1
  139. package/skills/{filesystem → guides/filesystem}/SKILL.md +1 -1
  140. package/skills/{onboarding → guides/onboarding}/SKILL.md +1 -1
  141. package/skills/{onboarding → guides/onboarding}/docs/CAPABILITY_TAXONOMY.md +5 -5
  142. package/skills/{onboarding → guides/onboarding}/docs/CLI_GRAMMAR.md +8 -8
  143. package/skills/{onboarding → guides/onboarding}/docs/CLI_GRAMMAR_ONBOARDING.md +2 -2
  144. package/skills/{onboarding → guides/onboarding}/docs/CLI_GRAMMAR_SKILLS.md +26 -20
  145. package/skills/{onboarding → guides/onboarding}/docs/GOAL_STATE_ARCHITECTURE.md +38 -43
  146. package/skills/{onboarding → guides/onboarding}/docs/NEXUS_SYSTEM_OVERVIEW.md +4 -4
  147. package/skills/{onboarding → guides/onboarding}/docs/SKILLS_HUB_SPEC.md +1 -1
  148. package/skills/{onboarding → guides/onboarding}/docs/SKILLS_SPECIFICATION.md +8 -7
  149. package/skills/{onboarding → guides/onboarding}/docs/SKILL_GATEWAY_DESIGN.md +16 -16
  150. package/skills/{onboarding → guides/onboarding}/docs/SKILL_GATEWAY_PRD.md +10 -12
  151. package/skills/guides/onboarding/docs/canonical/00_CONFLICT_ANALYSIS.md +463 -0
  152. package/skills/guides/onboarding/docs/canonical/01_NEXUS_OVERVIEW.md +167 -0
  153. package/skills/guides/onboarding/docs/canonical/02_CLI_REFERENCE.md +404 -0
  154. package/skills/guides/onboarding/docs/canonical/03_STATE_ARCHITECTURE.md +357 -0
  155. package/skills/guides/onboarding/docs/canonical/04_SKILL_SPECIFICATION.md +393 -0
  156. package/skills/guides/onboarding/docs/canonical/05_CAPABILITY_TAXONOMY.md +298 -0
  157. package/skills/guides/onboarding/docs/canonical/06_CAPABILITIES_REFERENCE.md +207 -0
  158. package/skills/guides/onboarding/docs/canonical/07_AGENT_BINDINGS.md +85 -0
  159. package/skills/{onboarding → guides/onboarding}/docs/skill-deep-dives/nexus-cloud.md +2 -2
  160. package/skills/{onboarding → guides/onboarding}/scripts/ralph/progress.txt +1 -1
  161. package/skills/{nexus-cloud → tools/nexus-cloud}/SKILL.md +2 -1
  162. package/skills/{nexus-cloud → tools/nexus-cloud}/docs/setup.md +1 -1
  163. package/docs/templates/PROFILE.md +0 -14
  164. /package/skills/{brave-search → connectors/brave-search}/SKILL.md +0 -0
  165. /package/skills/{brave-search → connectors/brave-search}/docs/setup.md +0 -0
  166. /package/skills/{brave-search → connectors/brave-search}/docs/troubleshooting.md +0 -0
  167. /package/skills/{brave-search → connectors/brave-search}/docs/usage.md +0 -0
  168. /package/skills/{brave-search → connectors/brave-search}/scripts/content.mjs +0 -0
  169. /package/skills/{brave-search → connectors/brave-search}/scripts/search.mjs +0 -0
  170. /package/skills/{discord → connectors/discord}/SKILL.md +0 -0
  171. /package/skills/{gemini → connectors/gemini}/SKILL.md +0 -0
  172. /package/skills/{github → connectors/github}/SKILL.md +0 -0
  173. /package/skills/{github → connectors/github}/docs/setup.md +0 -0
  174. /package/skills/{github → connectors/github}/docs/troubleshooting.md +0 -0
  175. /package/skills/{google-oauth → connectors/google-oauth}/SKILL.md +0 -0
  176. /package/skills/{slack → connectors/slack}/SKILL.md +0 -0
  177. /package/skills/{telegram → connectors/telegram}/SKILL.md +0 -0
  178. /package/skills/{telegram → connectors/telegram}/docs/pairing.md +0 -0
  179. /package/skills/{telegram → connectors/telegram}/docs/setup.md +0 -0
  180. /package/skills/{telegram → connectors/telegram}/docs/webhook.md +0 -0
  181. /package/skills/{wacli → connectors/wacli}/SKILL.md +0 -0
  182. /package/skills/{wacli → connectors/wacli}/docs/auth.md +0 -0
  183. /package/skills/{wacli → connectors/wacli}/docs/backup.md +0 -0
  184. /package/skills/{wacli → connectors/wacli}/docs/troubleshooting.md +0 -0
  185. /package/skills/{browser-use-agent-sdk → guides/browser-use-agent-sdk}/SKILL.md +0 -0
  186. /package/skills/{json-render → guides/json-render}/SKILL.md +0 -0
  187. /package/skills/{json-render → guides/json-render}/assets/components/README.md +0 -0
  188. /package/skills/{json-render → guides/json-render}/assets/components/catalog.ts +0 -0
  189. /package/skills/{json-render → guides/json-render}/assets/components/registry.tsx +0 -0
  190. /package/skills/{json-render → guides/json-render}/assets/demo/App.css +0 -0
  191. /package/skills/{json-render → guides/json-render}/assets/demo/App.tsx +0 -0
  192. /package/skills/{json-render → guides/json-render}/assets/demo/README.md +0 -0
  193. /package/skills/{json-render → guides/json-render}/assets/demo/catalog.ts +0 -0
  194. /package/skills/{json-render → guides/json-render}/assets/demo/data/nexus-core.json +0 -0
  195. /package/skills/{json-render → guides/json-render}/assets/demo/index.css +0 -0
  196. /package/skills/{json-render → guides/json-render}/assets/demo/registry.tsx +0 -0
  197. /package/skills/{json-render → guides/json-render}/docs/nexus-state-demo.md +0 -0
  198. /package/skills/{json-render → guides/json-render}/docs/shadcn-preset.md +0 -0
  199. /package/skills/{json-render → guides/json-render}/scripts/create-vite-demo.sh +0 -0
  200. /package/skills/{json-render → guides/json-render}/scripts/llm-server/README.md +0 -0
  201. /package/skills/{json-render → guides/json-render}/scripts/llm-server/catalog.ts +0 -0
  202. /package/skills/{json-render → guides/json-render}/scripts/llm-server/package-lock.json +0 -0
  203. /package/skills/{json-render → guides/json-render}/scripts/llm-server/package.json +0 -0
  204. /package/skills/{json-render → guides/json-render}/scripts/llm-server/server.ts +0 -0
  205. /package/skills/{onboarding → guides/onboarding}/docs/CAPABILITIES.md +0 -0
  206. /package/skills/{onboarding → guides/onboarding}/docs/CLI_GRAMMAR_CREDENTIALS.md +0 -0
  207. /package/skills/{onboarding → guides/onboarding}/docs/DOCUMENTATION_OVERVIEW.md +0 -0
  208. /package/skills/{onboarding → guides/onboarding}/docs/ENTITY_MODEL.md +0 -0
  209. /package/skills/{onboarding → guides/onboarding}/docs/SKILL_INVENTORY.md +0 -0
  210. /package/skills/{onboarding → guides/onboarding}/docs/STATE_ARCHITECTURE.md +0 -0
  211. /package/skills/{onboarding → guides/onboarding}/docs/TROUBLESHOOTING.md +0 -0
  212. /package/skills/{onboarding → guides/onboarding}/docs/USER_JOURNEY.md +0 -0
  213. /package/skills/{onboarding → guides/onboarding}/docs/WOW_MOMENTS.md +0 -0
  214. /package/skills/{onboarding → guides/onboarding}/docs/agent-apple-id.md +0 -0
  215. /package/skills/{onboarding → guides/onboarding}/docs/skill-deep-dives/1password.md +0 -0
  216. /package/skills/{onboarding → guides/onboarding}/docs/skill-deep-dives/TEMPLATE.md +0 -0
  217. /package/skills/{onboarding → guides/onboarding}/docs/skill-deep-dives/aix.md +0 -0
  218. /package/skills/{onboarding → guides/onboarding}/docs/skill-deep-dives/bird.md +0 -0
  219. /package/skills/{onboarding → guides/onboarding}/docs/skill-deep-dives/brave-search.md +0 -0
  220. /package/skills/{onboarding → guides/onboarding}/docs/skill-deep-dives/comms.md +0 -0
  221. /package/skills/{onboarding → guides/onboarding}/docs/skill-deep-dives/computer-use.md +0 -0
  222. /package/skills/{onboarding → guides/onboarding}/docs/skill-deep-dives/cron-and-heartbeat.md +0 -0
  223. /package/skills/{onboarding → guides/onboarding}/docs/skill-deep-dives/eve.md +0 -0
  224. /package/skills/{onboarding → guides/onboarding}/docs/skill-deep-dives/github.md +0 -0
  225. /package/skills/{onboarding → guides/onboarding}/docs/skill-deep-dives/gog.md +0 -0
  226. /package/skills/{onboarding → guides/onboarding}/docs/skill-deep-dives/homebrew-prereqs.md +0 -0
  227. /package/skills/{onboarding → guides/onboarding}/docs/skill-deep-dives/qmd.md +0 -0
  228. /package/skills/{onboarding → guides/onboarding}/docs/skill-deep-dives/telegram.md +0 -0
  229. /package/skills/{onboarding → guides/onboarding}/docs/skill-deep-dives/wacli.md +0 -0
  230. /package/skills/{onboarding → guides/onboarding}/docs/skill-deep-dives/weather.md +0 -0
  231. /package/skills/{onboarding → guides/onboarding}/scripts/ralph/prd.json +0 -0
  232. /package/skills/{onboarding → guides/onboarding}/scripts/ralph/prompt.md +0 -0
  233. /package/skills/{onboarding → guides/onboarding}/scripts/ralph/ralph.log +0 -0
  234. /package/skills/{onboarding → guides/onboarding}/scripts/ralph/ralph.sh +0 -0
  235. /package/skills/{onboarding → guides/onboarding}/scripts/setup-cursor-skills.sh +0 -0
  236. /package/skills/{1password → tools/1password}/SKILL.md +0 -0
  237. /package/skills/{1password → tools/1password}/docs/setup.md +0 -0
  238. /package/skills/{1password → tools/1password}/docs/troubleshooting.md +0 -0
  239. /package/skills/{1password → tools/1password}/references/cli-examples.md +0 -0
  240. /package/skills/{1password → tools/1password}/references/get-started.md +0 -0
  241. /package/skills/{agent-browser → tools/agent-browser}/SKILL.md +0 -0
  242. /package/skills/{agent-browser → tools/agent-browser}/docs/browser-use-eval.md +0 -0
  243. /package/skills/{agent-browser → tools/agent-browser}/docs/first-tests.md +0 -0
  244. /package/skills/{agent-browser → tools/agent-browser}/docs/wordle-nyt-eval.js +0 -0
  245. /package/skills/{aix → tools/aix}/SKILL.md +0 -0
  246. /package/skills/{aix → tools/aix}/docs/embeddings.md +0 -0
  247. /package/skills/{aix → tools/aix}/docs/setup.md +0 -0
  248. /package/skills/{aix → tools/aix}/docs/troubleshooting.md +0 -0
  249. /package/skills/{aix → tools/aix}/references/sql.md +0 -0
  250. /package/skills/{apple-notes → tools/apple-notes}/SKILL.md +0 -0
  251. /package/skills/{apple-reminders → tools/apple-reminders}/SKILL.md +0 -0
  252. /package/skills/{bear-notes → tools/bear-notes}/SKILL.md +0 -0
  253. /package/skills/{bird → tools/bird}/SKILL.md +0 -0
  254. /package/skills/{bird → tools/bird}/docs/auth.md +0 -0
  255. /package/skills/{bird → tools/bird}/docs/troubleshooting.md +0 -0
  256. /package/skills/{blogwatcher → tools/blogwatcher}/SKILL.md +0 -0
  257. /package/skills/{blucli → tools/blucli}/SKILL.md +0 -0
  258. /package/skills/{camsnap → tools/camsnap}/SKILL.md +0 -0
  259. /package/skills/{clawdhub → tools/clawdhub}/SKILL.md +0 -0
  260. /package/skills/{coding-agent → tools/coding-agent}/SKILL.md +0 -0
  261. /package/skills/{comms → tools/comms}/SKILL.md +0 -0
  262. /package/skills/{comms → tools/comms}/docs/adapters.md +0 -0
  263. /package/skills/{comms → tools/comms}/docs/setup.md +0 -0
  264. /package/skills/{comms → tools/comms}/docs/troubleshooting.md +0 -0
  265. /package/skills/{comms → tools/comms}/references/schema.md +0 -0
  266. /package/skills/{computer-use → tools/computer-use}/SKILL.md +0 -0
  267. /package/skills/{computer-use → tools/computer-use}/docs/open-interpreter.md +0 -0
  268. /package/skills/{computer-use → tools/computer-use}/docs/peekaboo.md +0 -0
  269. /package/skills/{computer-use → tools/computer-use}/docs/setup.md +0 -0
  270. /package/skills/{computer-use → tools/computer-use}/docs/troubleshooting.md +0 -0
  271. /package/skills/{eightctl → tools/eightctl}/SKILL.md +0 -0
  272. /package/skills/{eve → tools/eve}/SKILL.md +0 -0
  273. /package/skills/{eve → tools/eve}/docs/dual-account.md +0 -0
  274. /package/skills/{eve → tools/eve}/docs/intelligence.md +0 -0
  275. /package/skills/{eve → tools/eve}/docs/setup.md +0 -0
  276. /package/skills/{eve → tools/eve}/docs/troubleshooting.md +0 -0
  277. /package/skills/{eve → tools/eve}/scripts/setup-dual-account.sh +0 -0
  278. /package/skills/{food-order → tools/food-order}/SKILL.md +0 -0
  279. /package/skills/{gh → tools/gh}/SKILL.md +0 -0
  280. /package/skills/{gh → tools/gh}/docs/usage.md +0 -0
  281. /package/skills/{gifgrep → tools/gifgrep}/SKILL.md +0 -0
  282. /package/skills/{gog → tools/gog}/SKILL.md +0 -0
  283. /package/skills/{gog → tools/gog}/docs/portability.md +0 -0
  284. /package/skills/{gog → tools/gog}/docs/setup.md +0 -0
  285. /package/skills/{gog → tools/gog}/docs/troubleshooting.md +0 -0
  286. /package/skills/{gog → tools/gog}/scripts/cdp/README.md +0 -0
  287. /package/skills/{gog → tools/gog}/scripts/cdp/add_test_users.py +0 -0
  288. /package/skills/{gog → tools/gog}/scripts/cdp/auth_add_accounts.py +0 -0
  289. /package/skills/{gog → tools/gog}/scripts/cdp/auth_add_accounts_manual.py +0 -0
  290. /package/skills/{gog → tools/gog}/scripts/cdp/create_oauth_client.py +0 -0
  291. /package/skills/{gog → tools/gog}/scripts/cdp/launch_cdp_chrome.sh +0 -0
  292. /package/skills/{goplaces → tools/goplaces}/SKILL.md +0 -0
  293. /package/skills/{imsg → tools/imsg}/SKILL.md +0 -0
  294. /package/skills/{local-places → tools/local-places}/SERVER_README.md +0 -0
  295. /package/skills/{local-places → tools/local-places}/SKILL.md +0 -0
  296. /package/skills/{local-places → tools/local-places}/pyproject.toml +0 -0
  297. /package/skills/{local-places → tools/local-places}/src/local_places/__init__.py +0 -0
  298. /package/skills/{local-places → tools/local-places}/src/local_places/__pycache__/__init__.cpython-314.pyc +0 -0
  299. /package/skills/{local-places → tools/local-places}/src/local_places/__pycache__/google_places.cpython-314.pyc +0 -0
  300. /package/skills/{local-places → tools/local-places}/src/local_places/__pycache__/main.cpython-314.pyc +0 -0
  301. /package/skills/{local-places → tools/local-places}/src/local_places/__pycache__/schemas.cpython-314.pyc +0 -0
  302. /package/skills/{local-places → tools/local-places}/src/local_places/google_places.py +0 -0
  303. /package/skills/{local-places → tools/local-places}/src/local_places/main.py +0 -0
  304. /package/skills/{local-places → tools/local-places}/src/local_places/schemas.py +0 -0
  305. /package/skills/{mcporter → tools/mcporter}/SKILL.md +0 -0
  306. /package/skills/{model-usage → tools/model-usage}/SKILL.md +0 -0
  307. /package/skills/{model-usage → tools/model-usage}/references/codexbar-cli.md +0 -0
  308. /package/skills/{model-usage → tools/model-usage}/scripts/model_usage.py +0 -0
  309. /package/skills/{nano-banana-pro → tools/nano-banana-pro}/SKILL.md +0 -0
  310. /package/skills/{nano-banana-pro → tools/nano-banana-pro}/scripts/generate_image.py +0 -0
  311. /package/skills/{nano-pdf → tools/nano-pdf}/SKILL.md +0 -0
  312. /package/skills/{nexus-cloud → tools/nexus-cloud}/docs/security.md +0 -0
  313. /package/skills/{nexus-cloud → tools/nexus-cloud}/docs/troubleshooting.md +0 -0
  314. /package/skills/{obsidian → tools/obsidian}/SKILL.md +0 -0
  315. /package/skills/{openai-image-gen → tools/openai-image-gen}/SKILL.md +0 -0
  316. /package/skills/{openai-image-gen → tools/openai-image-gen}/scripts/gen.py +0 -0
  317. /package/skills/{openai-whisper → tools/openai-whisper}/SKILL.md +0 -0
  318. /package/skills/{openai-whisper-api → tools/openai-whisper-api}/SKILL.md +0 -0
  319. /package/skills/{openai-whisper-api → tools/openai-whisper-api}/scripts/transcribe.sh +0 -0
  320. /package/skills/{openhue → tools/openhue}/SKILL.md +0 -0
  321. /package/skills/{oracle → tools/oracle}/SKILL.md +0 -0
  322. /package/skills/{ordercli → tools/ordercli}/SKILL.md +0 -0
  323. /package/skills/{peekaboo → tools/peekaboo}/SKILL.md +0 -0
  324. /package/skills/{qmd → tools/qmd}/SKILL.md +0 -0
  325. /package/skills/{qmd → tools/qmd}/docs/mcp.md +0 -0
  326. /package/skills/{qmd → tools/qmd}/docs/ollama.md +0 -0
  327. /package/skills/{qmd → tools/qmd}/docs/setup.md +0 -0
  328. /package/skills/{sag → tools/sag}/SKILL.md +0 -0
  329. /package/skills/{skill-cli-template → tools/skill-cli-template}/SKILL.md +0 -0
  330. /package/skills/{songsee → tools/songsee}/SKILL.md +0 -0
  331. /package/skills/{sonoscli → tools/sonoscli}/SKILL.md +0 -0
  332. /package/skills/{spotify-player → tools/spotify-player}/SKILL.md +0 -0
  333. /package/skills/{summarize → tools/summarize}/SKILL.md +0 -0
  334. /package/skills/{things-mac → tools/things-mac}/SKILL.md +0 -0
  335. /package/skills/{tmux → tools/tmux}/SKILL.md +0 -0
  336. /package/skills/{tmux → tools/tmux}/scripts/find-sessions.sh +0 -0
  337. /package/skills/{tmux → tools/tmux}/scripts/wait-for-text.sh +0 -0
  338. /package/skills/{trello → tools/trello}/SKILL.md +0 -0
  339. /package/skills/{upstream-sync → tools/upstream-sync}/SKILL.md +0 -0
  340. /package/skills/{upstream-sync → tools/upstream-sync}/scripts/auto-port.sh +0 -0
  341. /package/skills/{upstream-sync → tools/upstream-sync}/scripts/check-all.sh +0 -0
  342. /package/skills/{upstream-sync → tools/upstream-sync}/scripts/check-nexus.sh +0 -0
  343. /package/skills/{upstream-sync → tools/upstream-sync}/scripts/check-pi-ai.sh +0 -0
  344. /package/skills/{video-frames → tools/video-frames}/SKILL.md +0 -0
  345. /package/skills/{video-frames → tools/video-frames}/scripts/frame.sh +0 -0
  346. /package/skills/{weather → tools/weather}/SKILL.md +0 -0
  347. /package/skills/{weather → tools/weather}/docs/usage.md +0 -0
@@ -19,7 +19,7 @@
19
19
  import crypto from "node:crypto";
20
20
  import { loadSession, writeSessionMetadata, } from "../../config/sessions.js";
21
21
  import { createSubsystemLogger } from "../../logging.js";
22
- import { normalizeAgentId, DEFAULT_AGENT_ID } from "../../routing/session-key.js";
22
+ import { DEFAULT_AGENT_ID, normalizeAgentId, } from "../../routing/session-key.js";
23
23
  /**
24
24
  * Active Message Broker - manages agent lifecycle
25
25
  */
@@ -52,10 +52,9 @@ export class ActiveMessageBroker {
52
52
  collectMaxMessages = 10; // Default max messages before auto-flush
53
53
  // Logger
54
54
  logger;
55
- // Config reference
56
55
  config;
57
56
  constructor(config) {
58
- this.logger = createSubsystemLogger('broker');
57
+ this.logger = createSubsystemLogger("broker");
59
58
  this.config = config;
60
59
  }
61
60
  /**
@@ -65,7 +64,10 @@ export class ActiveMessageBroker {
65
64
  registerODU(oduName, sessionStorePath, agentFactory) {
66
65
  this.sessionStorePaths.set(oduName, sessionStorePath);
67
66
  this.agentFactories.set(oduName, agentFactory);
68
- this.logger.info(`ODU registered: ${oduName}`, { oduName, sessionStorePath });
67
+ this.logger.info(`ODU registered: ${oduName}`, {
68
+ oduName,
69
+ sessionStorePath,
70
+ });
69
71
  }
70
72
  /**
71
73
  * Register an IA with the broker
@@ -80,7 +82,10 @@ export class ActiveMessageBroker {
80
82
  */
81
83
  setDeliveryMode(agentId, mode) {
82
84
  this.deliveryModes.set(agentId, mode);
83
- this.logger.debug(`Delivery mode set for ${agentId}: ${mode}`, { agentId, mode });
85
+ this.logger.debug(`Delivery mode set for ${agentId}: ${mode}`, {
86
+ agentId,
87
+ mode,
88
+ });
84
89
  }
85
90
  /**
86
91
  * Set collection parameters (for 'collect' mode)
@@ -90,7 +95,10 @@ export class ActiveMessageBroker {
90
95
  this.collectDebounceMs = debounceMs;
91
96
  if (maxMessages !== undefined)
92
97
  this.collectMaxMessages = maxMessages;
93
- this.logger.debug('Collection params updated', { debounceMs: this.collectDebounceMs, maxMessages: this.collectMaxMessages });
98
+ this.logger.debug("Collection params updated", {
99
+ debounceMs: this.collectDebounceMs,
100
+ maxMessages: this.collectMaxMessages,
101
+ });
94
102
  }
95
103
  /**
96
104
  * Handle collect mode: buffer messages and debounce delivery
@@ -101,13 +109,16 @@ export class ActiveMessageBroker {
101
109
  if (!this.collectionBuffers.has(agentId)) {
102
110
  this.collectionBuffers.set(agentId, []);
103
111
  }
104
- this.collectionBuffers.get(agentId).push(message);
112
+ this.collectionBuffers.get(agentId)?.push(message);
105
113
  // Clear existing timer
106
- if (this.collectionTimers.has(agentId)) {
107
- clearTimeout(this.collectionTimers.get(agentId));
114
+ const existingTimer = this.collectionTimers.get(agentId);
115
+ if (existingTimer) {
116
+ clearTimeout(existingTimer);
108
117
  }
109
118
  // Check if we've hit max messages
110
119
  const buffer = this.collectionBuffers.get(agentId);
120
+ if (!buffer)
121
+ return;
111
122
  if (buffer.length >= this.collectMaxMessages) {
112
123
  // Flush immediately
113
124
  this.flushCollectionBuffer(agentId);
@@ -126,10 +137,14 @@ export class ActiveMessageBroker {
126
137
  const buffer = this.collectionBuffers.get(agentId);
127
138
  if (!buffer || buffer.length === 0)
128
139
  return;
129
- this.logger.debug(`Flushing collection buffer for ${agentId}`, { agentId, messageCount: buffer.length });
140
+ this.logger.debug(`Flushing collection buffer for ${agentId}`, {
141
+ agentId,
142
+ messageCount: buffer.length,
143
+ });
130
144
  // Clear timer and buffer
131
- if (this.collectionTimers.has(agentId)) {
132
- clearTimeout(this.collectionTimers.get(agentId));
145
+ const timer = this.collectionTimers.get(agentId);
146
+ if (timer) {
147
+ clearTimeout(timer);
133
148
  this.collectionTimers.delete(agentId);
134
149
  }
135
150
  this.collectionBuffers.delete(agentId);
@@ -163,25 +178,32 @@ export class ActiveMessageBroker {
163
178
  throw new Error(`Cannot wait for ack: ${message.to} is not a registered IA`);
164
179
  }
165
180
  // Track external caller if needed
166
- if (message.from !== message.to && message.from !== 'user' && message.from !== 'system') {
181
+ if (message.from !== message.to &&
182
+ message.from !== "user" &&
183
+ message.from !== "system") {
167
184
  if (!this.externalCallers.has(message.to)) {
168
185
  this.externalCallers.set(message.to, new Set());
169
186
  }
170
- this.externalCallers.get(message.to).add(message.from);
187
+ this.externalCallers.get(message.to)?.add(message.from);
171
188
  }
172
189
  // Add to queue for tracking
173
190
  this.enqueue(message);
174
191
  // Queue message at IA
175
192
  if (ia.queueMessage) {
176
- ia.queueMessage(message.content, message.priority || 'normal', message.from);
193
+ ia.queueMessage(message.content, message.priority || "normal", message.from);
177
194
  }
178
- this.logger.debug(`Waiting for ack from ${message.to}...`, { to: message.to });
195
+ this.logger.debug(`Waiting for ack from ${message.to}...`, {
196
+ to: message.to,
197
+ });
179
198
  // Kick off processing and wait for acknowledgment
180
- let ack = '';
199
+ let ack = "";
181
200
  if (ia.processQueue) {
182
201
  ack = await ia.processQueue();
183
202
  }
184
- this.logger.debug(`Received ack from ${message.to}`, { to: message.to, ackLength: ack.length });
203
+ this.logger.debug(`Received ack from ${message.to}`, {
204
+ to: message.to,
205
+ ackLength: ack.length,
206
+ });
185
207
  return ack;
186
208
  }
187
209
  /**
@@ -204,25 +226,27 @@ export class ActiveMessageBroker {
204
226
  message.to = resolvedTo;
205
227
  this.logger.debug(`Routed to ${resolvedTo}`, { resolvedTo });
206
228
  // 1. Track external caller (if not self-message)
207
- if (message.from !== message.to && message.from !== 'user' && message.from !== 'system') {
229
+ if (message.from !== message.to &&
230
+ message.from !== "user" &&
231
+ message.from !== "system") {
208
232
  if (!this.externalCallers.has(message.to)) {
209
233
  this.externalCallers.set(message.to, new Set());
210
234
  }
211
- this.externalCallers.get(message.to).add(message.from);
235
+ this.externalCallers.get(message.to)?.add(message.from);
212
236
  }
213
237
  // 2. Handle collect mode (buffer and debounce)
214
- if (message.deliveryMode === 'collect') {
238
+ if (message.deliveryMode === "collect") {
215
239
  this.handleCollectMode(message);
216
240
  return; // Don't enqueue immediately
217
241
  }
218
242
  // 3. Handle steer mode (interrupt like urgent)
219
- if (message.deliveryMode === 'steer') {
243
+ if (message.deliveryMode === "steer") {
220
244
  // Steer mode interrupts current work
221
- message.priority = 'urgent';
222
- message.deliveryMode = 'interrupt';
245
+ message.priority = "urgent";
246
+ message.deliveryMode = "interrupt";
223
247
  }
224
248
  // 4. Handle followup mode (queue without interrupting)
225
- if (message.deliveryMode === 'followup') {
249
+ if (message.deliveryMode === "followup") {
226
250
  // Followup doesn't interrupt - just queues normally
227
251
  // No special handling needed, just enqueue
228
252
  }
@@ -233,23 +257,30 @@ export class ActiveMessageBroker {
233
257
  const ia = this.registeredIAs.get(message.to);
234
258
  if (ia) {
235
259
  // IA is always running - queue message and trigger processing
236
- this.logger.debug(`Delivering to IA: ${message.to}`, { to: message.to, contentPreview: message.content.substring(0, 100) });
260
+ this.logger.debug(`Delivering to IA: ${message.to}`, {
261
+ to: message.to,
262
+ contentPreview: message.content.substring(0, 100),
263
+ });
237
264
  // Queue the message with sender information
238
265
  if (ia.queueMessage) {
239
- ia.queueMessage(message.content, message.priority || 'normal', message.from);
266
+ ia.queueMessage(message.content, message.priority || "normal", message.from);
240
267
  }
241
268
  // Trigger processing by calling processQueue() if it exists, otherwise use chatSync
242
269
  if (ia.processQueue) {
243
- this.logger.debug(`Calling processQueue() for ${message.to}`, { to: message.to });
270
+ this.logger.debug(`Calling processQueue() for ${message.to}`, {
271
+ to: message.to,
272
+ });
244
273
  ia.processQueue().catch((error) => {
245
274
  this.logger.error(`IA ${message.to} processQueue error: ${error.message}`, { to: message.to, error: error.message });
246
275
  });
247
276
  }
248
277
  else if (ia.chatSync) {
249
278
  // Fallback: Call chatSync with empty string
250
- this.logger.debug(`Calling chatSync('') for ${message.to} (fallback)`, { to: message.to });
279
+ this.logger.debug(`Calling chatSync('') for ${message.to} (fallback)`, {
280
+ to: message.to,
281
+ });
251
282
  setImmediate(() => {
252
- ia.chatSync('').catch((error) => {
283
+ ia.chatSync?.("").catch((error) => {
253
284
  this.logger.error(`IA ${message.to} chatSync error: ${error.message}`, { to: message.to, error: error.message });
254
285
  });
255
286
  });
@@ -261,13 +292,17 @@ export class ActiveMessageBroker {
261
292
  const running = this.runningAgents.get(message.to);
262
293
  if (shouldInterrupt && running) {
263
294
  // Interrupt and restart immediately
264
- this.logger.info(`Interrupting ${message.to} for urgent message`, { agentId: message.to });
295
+ this.logger.info(`Interrupting ${message.to} for urgent message`, {
296
+ agentId: message.to,
297
+ });
265
298
  await this.interruptAndRestart(message.to);
266
299
  }
267
300
  else if (!running && !this.startingAgents.has(message.to)) {
268
301
  // Agent not running and not being started - mark as starting and process
269
302
  this.startingAgents.add(message.to);
270
- this.logger.info(`Processing batch for ${message.to}`, { agentId: message.to });
303
+ this.logger.info(`Processing batch for ${message.to}`, {
304
+ agentId: message.to,
305
+ });
271
306
  try {
272
307
  await this.processNextBatch(message.to);
273
308
  }
@@ -301,10 +336,10 @@ export class ActiveMessageBroker {
301
336
  // Rule 2: Short name - expand to caller's ODU EA
302
337
  // Special case: 'user' and 'system' default to primary ODU
303
338
  let callerODU;
304
- if (from === 'user' || from === 'system') {
339
+ if (from === "user" || from === "system") {
305
340
  // Get first registered ODU (primary)
306
341
  const odus = Array.from(this.agentFactories.keys());
307
- callerODU = odus[0] || 'nexus';
342
+ callerODU = odus[0] || "nexus";
308
343
  }
309
344
  else {
310
345
  callerODU = this.getODUName(from);
@@ -319,14 +354,14 @@ export class ActiveMessageBroker {
319
354
  * Examples: "toolbox-ea-worktrees", "meta-ia"
320
355
  */
321
356
  isFullyQualified(name) {
322
- const parts = name.split('-');
357
+ const parts = name.split("-");
323
358
  // Must have at least 2 parts (oduName-ia) or 3+ parts (oduName-ea-identifier)
324
359
  if (parts.length < 2) {
325
360
  return false;
326
361
  }
327
362
  // Second part must be 'ia' or 'ea'
328
363
  const agentType = parts[1];
329
- return agentType === 'ia' || agentType === 'ea';
364
+ return agentType === "ia" || agentType === "ea";
330
365
  }
331
366
  /**
332
367
  * Expand short agent name to fully-qualified ID
@@ -379,7 +414,7 @@ export class ActiveMessageBroker {
379
414
  * Returns 'idle' if agent never started or completed
380
415
  */
381
416
  getAgentStatus(agentId) {
382
- return this.agentStatus.get(agentId) || 'idle';
417
+ return this.agentStatus.get(agentId) || "idle";
383
418
  }
384
419
  /**
385
420
  * Set session status for an agent
@@ -388,10 +423,13 @@ export class ActiveMessageBroker {
388
423
  setAgentStatus(agentId, status) {
389
424
  const oldStatus = this.agentStatus.get(agentId);
390
425
  this.agentStatus.set(agentId, status);
391
- this.logger.debug(`Agent ${agentId} status: ${status}`, { agentId, status });
426
+ this.logger.debug(`Agent ${agentId} status: ${status}`, {
427
+ agentId,
428
+ status,
429
+ });
392
430
  // Emit status change event
393
431
  if (oldStatus !== status) {
394
- this.emit('agent_status_changed', {
432
+ this.emit("agent_status_changed", {
395
433
  agentId,
396
434
  oldStatus,
397
435
  newStatus: status,
@@ -403,7 +441,7 @@ export class ActiveMessageBroker {
403
441
  * Check if agent is currently active (processing messages)
404
442
  */
405
443
  isAgentActive(agentId) {
406
- return this.getAgentStatus(agentId) === 'active';
444
+ return this.getAgentStatus(agentId) === "active";
407
445
  }
408
446
  /**
409
447
  * Get list of external agents that have sent messages to this agent
@@ -432,7 +470,7 @@ export class ActiveMessageBroker {
432
470
  if (!this.completionCallbacks.has(agentId)) {
433
471
  this.completionCallbacks.set(agentId, []);
434
472
  }
435
- this.completionCallbacks.get(agentId).push(resolve);
473
+ this.completionCallbacks.get(agentId)?.push(resolve);
436
474
  });
437
475
  }
438
476
  /**
@@ -440,24 +478,24 @@ export class ActiveMessageBroker {
440
478
  */
441
479
  shouldInterrupt(message) {
442
480
  // Rule 1: External → IA always interrupts
443
- if (message.to.endsWith('-ia') && message.metadata?.source === 'user') {
481
+ if (message.to.endsWith("-ia") && message.metadata?.source === "user") {
444
482
  return true;
445
483
  }
446
484
  // Rule 2: EA → parent IA never interrupts
447
- if (message.to.endsWith('-ia') && message.metadata?.source === 'ea') {
485
+ if (message.to.endsWith("-ia") && message.metadata?.source === "ea") {
448
486
  return false;
449
487
  }
450
488
  // Rule 3: Explicit interrupt mode
451
- if (message.deliveryMode === 'interrupt') {
489
+ if (message.deliveryMode === "interrupt") {
452
490
  return true;
453
491
  }
454
492
  // Rule 4: Priority-based
455
- if (message.priority === 'urgent') {
493
+ if (message.priority === "urgent") {
456
494
  return true;
457
495
  }
458
- if (message.priority === 'high') {
496
+ if (message.priority === "high") {
459
497
  const running = this.runningAgents.get(message.to);
460
- if (running && (Date.now() - running.startedAt > 30000)) {
498
+ if (running && Date.now() - running.startedAt > 30000) {
461
499
  return true; // Running > 30s, interrupt
462
500
  }
463
501
  }
@@ -480,7 +518,10 @@ export class ActiveMessageBroker {
480
518
  const batch = [];
481
519
  // Take all consecutive messages from the same sender
482
520
  while (queue.length > 0 && queue[0].from === firstSender) {
483
- batch.push(queue.shift());
521
+ const nextMessage = queue.shift();
522
+ if (!nextMessage)
523
+ break;
524
+ batch.push(nextMessage);
484
525
  }
485
526
  this.logger.info(`Batched ${batch.length} messages from ${firstSender} for ${agentId}`, {
486
527
  agentId,
@@ -523,8 +564,8 @@ export class ActiveMessageBroker {
523
564
  });
524
565
  // 4. Format batch messages
525
566
  let taskDescription;
526
- const deliveryMode = this.deliveryModes.get(agentId) || 'batch';
527
- if (deliveryMode === 'single' || batch.length === 1) {
567
+ const deliveryMode = this.deliveryModes.get(agentId) || "batch";
568
+ if (deliveryMode === "single" || batch.length === 1) {
528
569
  // Single message
529
570
  taskDescription = batch[0].content;
530
571
  this.logger.debug(`Processing single message from ${this.getDisplayName(batch[0].from)}`, {
@@ -540,7 +581,7 @@ export class ActiveMessageBroker {
540
581
  else {
541
582
  taskDescription = batch
542
583
  .map((m, i) => `Message ${i + 1}:\n${m.content}`)
543
- .join('\n\n---\n\n');
584
+ .join("\n\n---\n\n");
544
585
  }
545
586
  this.logger.debug(`Batched ${batch.length} messages into prompt`, {
546
587
  agentId,
@@ -552,9 +593,9 @@ export class ActiveMessageBroker {
552
593
  // 6. Start and track
553
594
  const promise = agent.execute();
554
595
  // Mark agent as active
555
- this.setAgentStatus(agentId, 'active');
596
+ this.setAgentStatus(agentId, "active");
556
597
  // Emit agent started event
557
- this.emit('agent_started', {
598
+ this.emit("agent_started", {
558
599
  agentId,
559
600
  oduName: this.getODUName(agentId),
560
601
  timestamp: Date.now(),
@@ -565,7 +606,7 @@ export class ActiveMessageBroker {
565
606
  instance: agent,
566
607
  promise,
567
608
  startedAt: Date.now(),
568
- status: 'active',
609
+ status: "active",
569
610
  });
570
611
  this.logger.info(`Agent ${agentId} started (status: active)`, {
571
612
  agentId,
@@ -592,10 +633,10 @@ export class ActiveMessageBroker {
592
633
  * meta-ia → meta-ia (keep IAs fully-qualified)
593
634
  */
594
635
  getDisplayName(agentId) {
595
- const parts = agentId.split('-');
596
- if (parts.length >= 3 && parts[1] === 'ea') {
636
+ const parts = agentId.split("-");
637
+ if (parts.length >= 3 && parts[1] === "ea") {
597
638
  // EA: return task name part
598
- return parts.slice(2).join('-');
639
+ return parts.slice(2).join("-");
599
640
  }
600
641
  // IA or other: return full name
601
642
  return agentId;
@@ -606,11 +647,11 @@ export class ActiveMessageBroker {
606
647
  onAgentComplete(agentId) {
607
648
  this.logger.info(`Agent ${agentId} completed`, { agentId });
608
649
  // Mark agent as idle
609
- this.setAgentStatus(agentId, 'idle');
650
+ this.setAgentStatus(agentId, "idle");
610
651
  // Remove from running agents
611
652
  this.runningAgents.delete(agentId);
612
653
  // Emit agent completed event
613
- this.emit('agent_completed', {
654
+ this.emit("agent_completed", {
614
655
  agentId,
615
656
  oduName: this.getODUName(agentId),
616
657
  timestamp: Date.now(),
@@ -638,7 +679,9 @@ export class ActiveMessageBroker {
638
679
  });
639
680
  }
640
681
  else {
641
- this.logger.debug(`Agent ${agentId} idle (no more messages)`, { agentId });
682
+ this.logger.debug(`Agent ${agentId} idle (no more messages)`, {
683
+ agentId,
684
+ });
642
685
  }
643
686
  }
644
687
  /**
@@ -650,7 +693,7 @@ export class ActiveMessageBroker {
650
693
  error: error.message,
651
694
  });
652
695
  // Mark agent as idle (failed, but can receive new messages)
653
- this.setAgentStatus(agentId, 'idle');
696
+ this.setAgentStatus(agentId, "idle");
654
697
  // Remove from running
655
698
  this.runningAgents.delete(agentId);
656
699
  // Notify completion listeners with error
@@ -664,7 +707,9 @@ export class ActiveMessageBroker {
664
707
  */
665
708
  notifyCompletion(agentId, result) {
666
709
  const callbacks = this.completionCallbacks.get(agentId) || [];
667
- callbacks.forEach(cb => cb(result));
710
+ callbacks.forEach((cb) => {
711
+ cb(result);
712
+ });
668
713
  this.completionCallbacks.delete(agentId); // One-time callbacks
669
714
  if (callbacks.length > 0) {
670
715
  this.logger.debug(`Notified ${callbacks.length} listener(s) for ${agentId}`, {
@@ -693,7 +738,9 @@ export class ActiveMessageBroker {
693
738
  }
694
739
  catch {
695
740
  // Interrupt causes early exit, that's expected
696
- this.logger.debug(`Agent ${agentId} interrupted successfully`, { agentId });
741
+ this.logger.debug(`Agent ${agentId} interrupted successfully`, {
742
+ agentId,
743
+ });
697
744
  }
698
745
  // Remove from running
699
746
  this.runningAgents.delete(agentId);
@@ -715,16 +762,16 @@ export class ActiveMessageBroker {
715
762
  if (!this.queues.has(message.to)) {
716
763
  this.queues.set(message.to, []);
717
764
  }
718
- this.queues.get(message.to).push(message);
765
+ this.queues.get(message.to)?.push(message);
719
766
  this.sortQueue(message.to);
720
767
  // Emit message queued event
721
- this.emit('message_queued', {
768
+ this.emit("message_queued", {
722
769
  messageId: message.id,
723
770
  from: message.from,
724
771
  to: message.to,
725
772
  priority: message.priority,
726
773
  timestamp: message.timestamp,
727
- queueSize: this.queues.get(message.to).length,
774
+ queueSize: this.queues.get(message.to)?.length,
728
775
  });
729
776
  }
730
777
  /**
@@ -752,7 +799,7 @@ export class ActiveMessageBroker {
752
799
  * - 'meta-ia' → 'meta'
753
800
  */
754
801
  getODUName(agentId) {
755
- const parts = agentId.split('-');
802
+ const parts = agentId.split("-");
756
803
  if (parts.length < 2) {
757
804
  throw new Error(`Invalid agent ID format: ${agentId}`);
758
805
  }
@@ -762,7 +809,7 @@ export class ActiveMessageBroker {
762
809
  /**
763
810
  * Load session from Nexus session store (new format)
764
811
  */
765
- async loadSessionFromStore(storePath, agentId) {
812
+ async loadSessionFromStore(_storePath, agentId) {
766
813
  try {
767
814
  const sessionKey = `agent:${agentId}`;
768
815
  const agentIdNormalized = normalizeAgentId(DEFAULT_AGENT_ID);
@@ -771,7 +818,7 @@ export class ActiveMessageBroker {
771
818
  return null;
772
819
  }
773
820
  // Load history from new format
774
- const history = session.history.map(turn => ({
821
+ const history = session.history.map((turn) => ({
775
822
  role: turn.role,
776
823
  content: turn.content,
777
824
  timestamp: new Date(turn.timestamp).getTime(),
@@ -792,7 +839,7 @@ export class ActiveMessageBroker {
792
839
  * Register or update EA in session store (new format)
793
840
  * EAs persist forever once created
794
841
  */
795
- async registerEA(storePath, agentId, taskName) {
842
+ async registerEA(_storePath, agentId, taskName) {
796
843
  try {
797
844
  const sessionKey = `agent:${agentId}`;
798
845
  const agentIdNormalized = normalizeAgentId(DEFAULT_AGENT_ID);
@@ -815,13 +862,17 @@ export class ActiveMessageBroker {
815
862
  sessionId: crypto.randomUUID(),
816
863
  updatedAt: now,
817
864
  displayName: taskName || displayName,
818
- chatType: 'direct',
865
+ chatType: "direct",
819
866
  };
820
867
  await writeSessionMetadata(agentIdNormalized, sessionKey, {
821
868
  ...newEntry,
822
869
  created: new Date().toISOString(),
823
870
  });
824
- this.logger.info(`Registered new EA: ${agentId}`, { agentId, oduName, displayName });
871
+ this.logger.info(`Registered new EA: ${agentId}`, {
872
+ agentId,
873
+ oduName,
874
+ displayName,
875
+ });
825
876
  }
826
877
  }
827
878
  catch (error) {
@@ -887,7 +938,7 @@ export class ActiveMessageBroker {
887
938
  for (const [id] of this.registeredIAs.entries()) {
888
939
  agents.push({
889
940
  agentId: id,
890
- type: 'ia',
941
+ type: "ia",
891
942
  status: this.getAgentStatus(id),
892
943
  oduName: this.getODUName(id),
893
944
  queueSize: this.getQueueSize(id),
@@ -898,7 +949,7 @@ export class ActiveMessageBroker {
898
949
  for (const [id, runningAgent] of this.runningAgents.entries()) {
899
950
  agents.push({
900
951
  agentId: id,
901
- type: 'ea',
952
+ type: "ea",
902
953
  status: runningAgent.status,
903
954
  oduName: this.getODUName(id),
904
955
  queueSize: this.getQueueSize(id),
@@ -907,11 +958,13 @@ export class ActiveMessageBroker {
907
958
  }
908
959
  // Add queued agents that aren't running
909
960
  for (const [id, queue] of this.queues.entries()) {
910
- if (!this.runningAgents.has(id) && !this.registeredIAs.has(id) && queue.length > 0) {
961
+ if (!this.runningAgents.has(id) &&
962
+ !this.registeredIAs.has(id) &&
963
+ queue.length > 0) {
911
964
  agents.push({
912
965
  agentId: id,
913
- type: 'ea',
914
- status: 'idle',
966
+ type: "ea",
967
+ status: "idle",
915
968
  oduName: this.getODUName(id),
916
969
  queueSize: queue.length,
917
970
  isRunning: false,
@@ -933,7 +986,7 @@ export class ActiveMessageBroker {
933
986
  if (!this.eventListeners.has(event)) {
934
987
  this.eventListeners.set(event, []);
935
988
  }
936
- this.eventListeners.get(event).push(callback);
989
+ this.eventListeners.get(event)?.push(callback);
937
990
  }
938
991
  /**
939
992
  * Unsubscribe from broker events
@@ -1,7 +1,7 @@
1
- import Anthropic from "@anthropic-ai/sdk";
2
1
  import fs from "node:fs";
3
2
  import os from "node:os";
4
3
  import path from "node:path";
4
+ import Anthropic from "@anthropic-ai/sdk";
5
5
  import { compactEmbeddedPiSession, } from "../agents/pi-embedded-runner.js";
6
6
  import { archiveHistory, loadHistory, resolveSessionDir, writeSummary, } from "../config/sessions.js";
7
7
  import { createSubsystemLogger } from "../logging.js";
@@ -133,9 +133,7 @@ function partitionHistory(history, keepRecentMessages, keepRecentTokens) {
133
133
  for (let i = history.length - 1; i >= 0; i--) {
134
134
  const turn = history[i];
135
135
  const estimatedTokens = Math.ceil((turn.content?.length ?? 0) / 4 +
136
- (turn.tool_calls
137
- ? JSON.stringify(turn.tool_calls).length / 4
138
- : 0));
136
+ (turn.tool_calls ? JSON.stringify(turn.tool_calls).length / 4 : 0));
139
137
  tokenCount += estimatedTokens;
140
138
  if (tokenCount > keepRecentTokens) {
141
139
  // Found the split point
@@ -251,7 +249,7 @@ ${summaryText}
251
249
  log.debug(`Cleaned up temp history file: ${tmpFilePath}`);
252
250
  }
253
251
  catch (error) {
254
- log.warn(`Failed to clean up temp history file ${tmpFilePath}: ${error}`);
252
+ log.warn(`Failed to clean up temp history file ${tmpFilePath}: ${String(error)}`);
255
253
  }
256
254
  }
257
255
  }
@@ -2,8 +2,8 @@
2
2
  * Factory for creating the appropriate AgentControlPlane implementation
3
3
  * based on configuration.
4
4
  */
5
- import { SingleAgentControlPlane } from "./single-agent.js";
6
5
  import { ODUControlPlane } from "./odu-control-plane.js";
6
+ import { SingleAgentControlPlane } from "./single-agent.js";
7
7
  /**
8
8
  * Creates an AgentControlPlane instance based on the config.
9
9
  *
@@ -26,6 +26,6 @@ export function createControlPlane(options) {
26
26
  workspaceDir: options?.workspaceDir,
27
27
  });
28
28
  default:
29
- throw new Error(`Unknown control plane mode: ${mode}. Valid modes: 'single', 'odu'`);
29
+ throw new Error(`Unknown control plane mode: ${String(mode)}. Valid modes: 'single', 'odu'`);
30
30
  }
31
31
  }
@@ -5,6 +5,6 @@
5
5
  * and routing messages. It allows switching between different orchestration
6
6
  * strategies without changing the Gateway (Access Plane) code.
7
7
  */
8
- export { SingleAgentControlPlane } from "./single-agent.js";
8
+ export { createControlPlane, } from "./factory.js";
9
9
  export { ODUControlPlane } from "./odu-control-plane.js";
10
- export { createControlPlane } from "./factory.js";
10
+ export { SingleAgentControlPlane } from "./single-agent.js";