@zhin.js/agent 1.0.3 → 1.0.4

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 (322) hide show
  1. package/README.md +26 -0
  2. package/lib/activity-feedback/ai-bus.d.ts +20 -0
  3. package/lib/activity-feedback/ai-bus.d.ts.map +1 -0
  4. package/lib/activity-feedback/ai-bus.js +42 -0
  5. package/lib/activity-feedback/ai-bus.js.map +1 -0
  6. package/lib/activity-feedback/config-resolver.d.ts.map +1 -1
  7. package/lib/activity-feedback/config-resolver.js +34 -5
  8. package/lib/activity-feedback/config-resolver.js.map +1 -1
  9. package/lib/activity-feedback/index.d.ts +1 -0
  10. package/lib/activity-feedback/index.d.ts.map +1 -1
  11. package/lib/activity-feedback/index.js +1 -0
  12. package/lib/activity-feedback/index.js.map +1 -1
  13. package/lib/agent-prompt/registry.d.ts.map +1 -1
  14. package/lib/agent-prompt/registry.js +2 -2
  15. package/lib/agent-prompt/registry.js.map +1 -1
  16. package/lib/agent-prompt/resolver.d.ts.map +1 -1
  17. package/lib/agent-prompt/resolver.js +2 -2
  18. package/lib/agent-prompt/resolver.js.map +1 -1
  19. package/lib/ai-event-subscriber.d.ts +10 -0
  20. package/lib/ai-event-subscriber.d.ts.map +1 -1
  21. package/lib/ai-event-subscriber.js +32 -6
  22. package/lib/ai-event-subscriber.js.map +1 -1
  23. package/lib/ai-hook-handlers.d.ts +8 -0
  24. package/lib/ai-hook-handlers.d.ts.map +1 -0
  25. package/lib/ai-hook-handlers.js +46 -0
  26. package/lib/ai-hook-handlers.js.map +1 -0
  27. package/lib/ai-hook-runtime-bus.d.ts +19 -0
  28. package/lib/ai-hook-runtime-bus.d.ts.map +1 -0
  29. package/lib/ai-hook-runtime-bus.js +41 -0
  30. package/lib/ai-hook-runtime-bus.js.map +1 -0
  31. package/lib/aop/index.d.ts +7 -5
  32. package/lib/aop/index.d.ts.map +1 -1
  33. package/lib/aop/index.js +6 -5
  34. package/lib/aop/index.js.map +1 -1
  35. package/lib/assistant/domains/home-assistant.js +2 -2
  36. package/lib/assistant/domains/home-assistant.js.map +1 -1
  37. package/lib/assistant/event-ingress.js +2 -2
  38. package/lib/assistant/event-ingress.js.map +1 -1
  39. package/lib/assistant/index.d.ts +1 -1
  40. package/lib/assistant/index.d.ts.map +1 -1
  41. package/lib/assistant/index.js +1 -1
  42. package/lib/assistant/index.js.map +1 -1
  43. package/lib/assistant/job-engine.js +2 -2
  44. package/lib/assistant/job-engine.js.map +1 -1
  45. package/lib/assistant/job-store.js +2 -2
  46. package/lib/assistant/job-store.js.map +1 -1
  47. package/lib/assistant/job-worker.js +2 -2
  48. package/lib/assistant/job-worker.js.map +1 -1
  49. package/lib/assistant/notification-router.d.ts.map +1 -1
  50. package/lib/assistant/notification-router.js +2 -2
  51. package/lib/assistant/notification-router.js.map +1 -1
  52. package/lib/assistant/runtime-registry.d.ts +2 -0
  53. package/lib/assistant/runtime-registry.d.ts.map +1 -1
  54. package/lib/assistant/runtime-registry.js +19 -5
  55. package/lib/assistant/runtime-registry.js.map +1 -1
  56. package/lib/assistant/schedule-tool-runtime.js +2 -2
  57. package/lib/assistant/schedule-tool-runtime.js.map +1 -1
  58. package/lib/authoring/define-tool.d.ts +12 -2
  59. package/lib/authoring/define-tool.d.ts.map +1 -1
  60. package/lib/authoring/define-tool.js +11 -1
  61. package/lib/authoring/define-tool.js.map +1 -1
  62. package/lib/authoring/entries/tools.d.ts +2 -2
  63. package/lib/authoring/entries/tools.d.ts.map +1 -1
  64. package/lib/authoring/entries/tools.js +1 -1
  65. package/lib/authoring/entries/tools.js.map +1 -1
  66. package/lib/authoring/index.d.ts +2 -2
  67. package/lib/authoring/index.d.ts.map +1 -1
  68. package/lib/authoring/index.js +1 -1
  69. package/lib/authoring/index.js.map +1 -1
  70. package/lib/bootstrap.js +2 -2
  71. package/lib/bootstrap.js.map +1 -1
  72. package/lib/builtin/analyze-media-tool.d.ts.map +1 -1
  73. package/lib/builtin/analyze-media-tool.js +18 -19
  74. package/lib/builtin/analyze-media-tool.js.map +1 -1
  75. package/lib/builtin/bash-tool.d.ts.map +1 -1
  76. package/lib/builtin/bash-tool.js +7 -21
  77. package/lib/builtin/bash-tool.js.map +1 -1
  78. package/lib/builtin/edit-file-tool.d.ts.map +1 -1
  79. package/lib/builtin/edit-file-tool.js +13 -43
  80. package/lib/builtin/edit-file-tool.js.map +1 -1
  81. package/lib/builtin/glob-tool.d.ts.map +1 -1
  82. package/lib/builtin/glob-tool.js +5 -13
  83. package/lib/builtin/glob-tool.js.map +1 -1
  84. package/lib/builtin/grep-tool.d.ts.map +1 -1
  85. package/lib/builtin/grep-tool.js +5 -13
  86. package/lib/builtin/grep-tool.js.map +1 -1
  87. package/lib/builtin/install-skill-tool.d.ts.map +1 -1
  88. package/lib/builtin/install-skill-tool.js +2 -2
  89. package/lib/builtin/install-skill-tool.js.map +1 -1
  90. package/lib/builtin/list-dir-tool.d.ts.map +1 -1
  91. package/lib/builtin/list-dir-tool.js +5 -13
  92. package/lib/builtin/list-dir-tool.js.map +1 -1
  93. package/lib/builtin/read-file-tool.d.ts.map +1 -1
  94. package/lib/builtin/read-file-tool.js +20 -26
  95. package/lib/builtin/read-file-tool.js.map +1 -1
  96. package/lib/builtin/web-fetch-tool.d.ts.map +1 -1
  97. package/lib/builtin/web-fetch-tool.js +5 -8
  98. package/lib/builtin/web-fetch-tool.js.map +1 -1
  99. package/lib/builtin/write-file-tool.d.ts.map +1 -1
  100. package/lib/builtin/write-file-tool.js +12 -44
  101. package/lib/builtin/write-file-tool.js.map +1 -1
  102. package/lib/collaboration/collaboration-delegation.d.ts.map +1 -1
  103. package/lib/collaboration/collaboration-delegation.js +35 -6
  104. package/lib/collaboration/collaboration-delegation.js.map +1 -1
  105. package/lib/collaboration/inbound-turn-route.d.ts.map +1 -1
  106. package/lib/collaboration/inbound-turn-route.js +35 -18
  107. package/lib/collaboration/inbound-turn-route.js.map +1 -1
  108. package/lib/collaboration/index.d.ts +2 -0
  109. package/lib/collaboration/index.d.ts.map +1 -1
  110. package/lib/collaboration/index.js +1 -0
  111. package/lib/collaboration/index.js.map +1 -1
  112. package/lib/collaboration/runtime-inbound-gate.d.ts +35 -0
  113. package/lib/collaboration/runtime-inbound-gate.d.ts.map +1 -0
  114. package/lib/collaboration/runtime-inbound-gate.js +111 -0
  115. package/lib/collaboration/runtime-inbound-gate.js.map +1 -0
  116. package/lib/collaboration/runtime-registry.d.ts +2 -2
  117. package/lib/collaboration/runtime-registry.d.ts.map +1 -1
  118. package/lib/collaboration/runtime-registry.js +12 -7
  119. package/lib/collaboration/runtime-registry.js.map +1 -1
  120. package/lib/core/agent-core-run.d.ts.map +1 -1
  121. package/lib/core/agent-core-run.js +10 -5
  122. package/lib/core/agent-core-run.js.map +1 -1
  123. package/lib/core/agent-loop-standalone.js +2 -2
  124. package/lib/core/agent-loop-standalone.js.map +1 -1
  125. package/lib/deferred-worker-runner.d.ts.map +1 -1
  126. package/lib/deferred-worker-runner.js +2 -2
  127. package/lib/deferred-worker-runner.js.map +1 -1
  128. package/lib/discovery/agent-surface.d.ts.map +1 -1
  129. package/lib/discovery/agent-surface.js +2 -2
  130. package/lib/discovery/agent-surface.js.map +1 -1
  131. package/lib/discovery/agents.d.ts +1 -1
  132. package/lib/discovery/agents.d.ts.map +1 -1
  133. package/lib/discovery/agents.js +6 -6
  134. package/lib/discovery/agents.js.map +1 -1
  135. package/lib/discovery/register-agent-surface.d.ts +8 -2
  136. package/lib/discovery/register-agent-surface.d.ts.map +1 -1
  137. package/lib/discovery/register-agent-surface.js +22 -7
  138. package/lib/discovery/register-agent-surface.js.map +1 -1
  139. package/lib/discovery/skills.d.ts.map +1 -1
  140. package/lib/discovery/skills.js +2 -2
  141. package/lib/discovery/skills.js.map +1 -1
  142. package/lib/discovery/tools.d.ts.map +1 -1
  143. package/lib/discovery/tools.js +2 -2
  144. package/lib/discovery/tools.js.map +1 -1
  145. package/lib/event/event-emitter.d.ts.map +1 -1
  146. package/lib/event/event-emitter.js +7 -2
  147. package/lib/event/event-emitter.js.map +1 -1
  148. package/lib/event/event-system.js +2 -2
  149. package/lib/event/event-system.js.map +1 -1
  150. package/lib/event/logging-middleware.js +2 -2
  151. package/lib/event/logging-middleware.js.map +1 -1
  152. package/lib/features/agent-feature.d.ts +23 -0
  153. package/lib/features/agent-feature.d.ts.map +1 -0
  154. package/lib/features/agent-feature.js +51 -0
  155. package/lib/features/agent-feature.js.map +1 -0
  156. package/lib/features/index.d.ts +3 -0
  157. package/lib/features/index.d.ts.map +1 -0
  158. package/lib/features/index.js +3 -0
  159. package/lib/features/index.js.map +1 -0
  160. package/lib/features/mcp-feature.d.ts +25 -0
  161. package/lib/features/mcp-feature.d.ts.map +1 -0
  162. package/lib/features/mcp-feature.js +52 -0
  163. package/lib/features/mcp-feature.js.map +1 -0
  164. package/lib/hooks.d.ts +3 -2
  165. package/lib/hooks.d.ts.map +1 -1
  166. package/lib/hooks.js +8 -36
  167. package/lib/hooks.js.map +1 -1
  168. package/lib/index.d.ts +28 -10
  169. package/lib/index.d.ts.map +1 -1
  170. package/lib/index.js +18 -7
  171. package/lib/index.js.map +1 -1
  172. package/lib/ingress/capability-ingress.d.ts +75 -0
  173. package/lib/ingress/capability-ingress.d.ts.map +1 -0
  174. package/lib/ingress/capability-ingress.js +266 -0
  175. package/lib/ingress/capability-ingress.js.map +1 -0
  176. package/lib/ingress/index.d.ts +2 -0
  177. package/lib/ingress/index.d.ts.map +1 -0
  178. package/lib/ingress/index.js +2 -0
  179. package/lib/ingress/index.js.map +1 -0
  180. package/lib/init/activate-ai-database-storage.d.ts +2 -1
  181. package/lib/init/activate-ai-database-storage.d.ts.map +1 -1
  182. package/lib/init/activate-ai-database-storage.js +3 -3
  183. package/lib/init/activate-ai-database-storage.js.map +1 -1
  184. package/lib/init/configure-zhin-agent.js +2 -2
  185. package/lib/init/configure-zhin-agent.js.map +1 -1
  186. package/lib/init/define-ai-database-models.d.ts +4 -0
  187. package/lib/init/define-ai-database-models.d.ts.map +1 -0
  188. package/lib/init/define-ai-database-models.js +33 -0
  189. package/lib/init/define-ai-database-models.js.map +1 -0
  190. package/lib/init/register-ai-service.d.ts.map +1 -1
  191. package/lib/init/register-ai-service.js +3 -0
  192. package/lib/init/register-ai-service.js.map +1 -1
  193. package/lib/init/register-builtin-tools.d.ts.map +1 -1
  194. package/lib/init/register-builtin-tools.js +40 -22
  195. package/lib/init/register-builtin-tools.js.map +1 -1
  196. package/lib/init/register-capability-features.d.ts +2 -0
  197. package/lib/init/register-capability-features.d.ts.map +1 -0
  198. package/lib/init/register-capability-features.js +28 -0
  199. package/lib/init/register-capability-features.js.map +1 -0
  200. package/lib/init/register-db-models.d.ts.map +1 -1
  201. package/lib/init/register-db-models.js +3 -20
  202. package/lib/init/register-db-models.js.map +1 -1
  203. package/lib/init/register-mcp-from-config.d.ts.map +1 -1
  204. package/lib/init/register-mcp-from-config.js +8 -6
  205. package/lib/init/register-mcp-from-config.js.map +1 -1
  206. package/lib/init/types.d.ts +7 -0
  207. package/lib/init/types.d.ts.map +1 -1
  208. package/lib/init.d.ts.map +1 -1
  209. package/lib/init.js +3 -1
  210. package/lib/init.js.map +1 -1
  211. package/lib/internal/phase-trace.js +2 -2
  212. package/lib/internal/phase-trace.js.map +1 -1
  213. package/lib/internal/prompt-trace.js +2 -2
  214. package/lib/internal/prompt-trace.js.map +1 -1
  215. package/lib/memory-layers.d.ts.map +1 -1
  216. package/lib/memory-layers.js +2 -2
  217. package/lib/memory-layers.js.map +1 -1
  218. package/lib/orchestration-runtime-registry.d.ts +1 -1
  219. package/lib/orchestrator/hook-registry.js +2 -2
  220. package/lib/orchestrator/hook-registry.js.map +1 -1
  221. package/lib/orchestrator/index.d.ts +1 -1
  222. package/lib/orchestrator/index.d.ts.map +1 -1
  223. package/lib/orchestrator/index.js +1 -1
  224. package/lib/orchestrator/index.js.map +1 -1
  225. package/lib/orchestrator/mcp-registry.js +2 -2
  226. package/lib/orchestrator/mcp-registry.js.map +1 -1
  227. package/lib/orchestrator/orchestration-repository.js +3 -3
  228. package/lib/orchestrator/orchestration-repository.js.map +1 -1
  229. package/lib/orchestrator/orchestration-service.d.ts +3 -1
  230. package/lib/orchestrator/orchestration-service.d.ts.map +1 -1
  231. package/lib/orchestrator/orchestration-service.js +25 -6
  232. package/lib/orchestrator/orchestration-service.js.map +1 -1
  233. package/lib/orchestrator/remote-agent-registry.js +2 -2
  234. package/lib/orchestrator/remote-agent-registry.js.map +1 -1
  235. package/lib/orchestrator/remote-task-poller.js +2 -2
  236. package/lib/orchestrator/remote-task-poller.js.map +1 -1
  237. package/lib/orchestrator/tool-registry.d.ts.map +1 -1
  238. package/lib/orchestrator/tool-registry.js +2 -2
  239. package/lib/orchestrator/tool-registry.js.map +1 -1
  240. package/lib/orchestrator/tool-selection.d.ts.map +1 -1
  241. package/lib/orchestrator/tool-selection.js +2 -2
  242. package/lib/orchestrator/tool-selection.js.map +1 -1
  243. package/lib/plugin-ai-hook-bus.d.ts +8 -0
  244. package/lib/plugin-ai-hook-bus.d.ts.map +1 -1
  245. package/lib/plugin-ai-hook-bus.js +20 -1
  246. package/lib/plugin-ai-hook-bus.js.map +1 -1
  247. package/lib/plugin-runtime/agent-host-port.d.ts +11 -0
  248. package/lib/plugin-runtime/agent-host-port.d.ts.map +1 -0
  249. package/lib/plugin-runtime/agent-host-port.js +3 -0
  250. package/lib/plugin-runtime/agent-host-port.js.map +1 -0
  251. package/lib/plugin-runtime/agent-runtime.d.ts +11 -0
  252. package/lib/plugin-runtime/agent-runtime.d.ts.map +1 -0
  253. package/lib/plugin-runtime/agent-runtime.js +25 -0
  254. package/lib/plugin-runtime/agent-runtime.js.map +1 -0
  255. package/lib/plugin-runtime/capability-ingress.d.ts +25 -0
  256. package/lib/plugin-runtime/capability-ingress.d.ts.map +1 -0
  257. package/lib/plugin-runtime/capability-ingress.js +77 -0
  258. package/lib/plugin-runtime/capability-ingress.js.map +1 -0
  259. package/lib/plugin-runtime/index.d.ts +4 -0
  260. package/lib/plugin-runtime/index.d.ts.map +1 -0
  261. package/lib/plugin-runtime/index.js +4 -0
  262. package/lib/plugin-runtime/index.js.map +1 -0
  263. package/lib/schedule-manager.d.ts +2 -0
  264. package/lib/schedule-manager.d.ts.map +1 -1
  265. package/lib/schedule-manager.js +14 -3
  266. package/lib/schedule-manager.js.map +1 -1
  267. package/lib/security/audit-logger.d.ts +19 -5
  268. package/lib/security/audit-logger.d.ts.map +1 -1
  269. package/lib/security/audit-logger.js +87 -11
  270. package/lib/security/audit-logger.js.map +1 -1
  271. package/lib/security/exec-policy.d.ts +7 -1
  272. package/lib/security/exec-policy.d.ts.map +1 -1
  273. package/lib/security/exec-policy.js +92 -4
  274. package/lib/security/exec-policy.js.map +1 -1
  275. package/lib/security/index.d.ts +1 -0
  276. package/lib/security/index.d.ts.map +1 -1
  277. package/lib/security/index.js +1 -0
  278. package/lib/security/index.js.map +1 -1
  279. package/lib/security/owner-approve-always-store.d.ts +20 -15
  280. package/lib/security/owner-approve-always-store.d.ts.map +1 -1
  281. package/lib/security/owner-approve-always-store.js +131 -19
  282. package/lib/security/owner-approve-always-store.js.map +1 -1
  283. package/lib/security/policy-facade.d.ts +86 -0
  284. package/lib/security/policy-facade.d.ts.map +1 -0
  285. package/lib/security/policy-facade.js +230 -0
  286. package/lib/security/policy-facade.js.map +1 -0
  287. package/lib/stability/memory-pressure.d.ts.map +1 -1
  288. package/lib/stability/memory-pressure.js +2 -2
  289. package/lib/stability/memory-pressure.js.map +1 -1
  290. package/lib/subagent/subagent-runtime.d.ts.map +1 -1
  291. package/lib/subagent/subagent-runtime.js +2 -2
  292. package/lib/subagent/subagent-runtime.js.map +1 -1
  293. package/lib/subagent/subagent-system-init.js +2 -2
  294. package/lib/subagent/subagent-system-init.js.map +1 -1
  295. package/lib/task-executor.d.ts.map +1 -1
  296. package/lib/task-executor.js +2 -2
  297. package/lib/task-executor.js.map +1 -1
  298. package/lib/tool/sources.d.ts.map +1 -1
  299. package/lib/tool/sources.js +2 -10
  300. package/lib/tool/sources.js.map +1 -1
  301. package/lib/turn/auto-continue.js +2 -2
  302. package/lib/turn/auto-continue.js.map +1 -1
  303. package/lib/turn/turn-pipeline.js +2 -2
  304. package/lib/turn/turn-pipeline.js.map +1 -1
  305. package/lib/typing-indicator/index.d.ts.map +1 -1
  306. package/lib/typing-indicator/index.js +8 -1
  307. package/lib/typing-indicator/index.js.map +1 -1
  308. package/lib/user-profile.js +2 -2
  309. package/lib/user-profile.js.map +1 -1
  310. package/lib/zhin-agent/index.d.ts +14 -1
  311. package/lib/zhin-agent/index.d.ts.map +1 -1
  312. package/lib/zhin-agent/index.js +21 -2
  313. package/lib/zhin-agent/index.js.map +1 -1
  314. package/package.json +16 -6
  315. package/lib/aop/coordination/index.d.ts +0 -7
  316. package/lib/aop/coordination/index.d.ts.map +0 -1
  317. package/lib/aop/coordination/index.js +0 -7
  318. package/lib/aop/coordination/index.js.map +0 -1
  319. package/lib/aop/inbound/index.d.ts +0 -7
  320. package/lib/aop/inbound/index.d.ts.map +0 -1
  321. package/lib/aop/inbound/index.js +0 -6
  322. package/lib/aop/inbound/index.js.map +0 -1
@@ -0,0 +1,266 @@
1
+ /**
2
+ * Capability Ingress — Feature → Agent Orchestrator (ADR 0042)
3
+ *
4
+ * Load filters reuse platforms / scopes / permissions via `canAccessTool`
5
+ * (same vocabulary as Tool Selection). Cache keys use the same message
6
+ * projections `canAccessTool` reads — not a second authoring vocabulary.
7
+ *
8
+ * Ownership: only one on-demand set is live at a time (`lastCacheKey`);
9
+ * a cache miss purges previous owned entries then reloads. While a turn is
10
+ * still in flight (holding the previous projection), the purge is deferred
11
+ * until that turn releases its lease, so a concurrent turn never loses the
12
+ * tools it is executing with.
13
+ *
14
+ * Named `FeatureCapabilityIngress` to disambiguate from the Plugin Runtime
15
+ * `CapabilityIngress` exported by `@zhin.js/agent/runtime`.
16
+ */
17
+ import { canAccessTool, senderRolesFromMessage, } from '@zhin.js/core';
18
+ import { isBuiltinToolSource } from '@zhin.js/ai';
19
+ function toolToOrchestrator(tool) {
20
+ return tool;
21
+ }
22
+ function skillToOrchestrator(skill) {
23
+ return {
24
+ name: skill.name,
25
+ description: skill.description,
26
+ tools: (skill.tools ?? []).map(toolToOrchestrator),
27
+ platforms: skill.platforms,
28
+ keywords: skill.keywords,
29
+ tags: skill.tags,
30
+ pluginName: skill.pluginName,
31
+ filePath: skill.filePath,
32
+ always: skill.always,
33
+ };
34
+ }
35
+ /** Skill visibility via same platforms/scopes/permissions contract as Tool. */
36
+ function canAccessSkill(skill, message) {
37
+ return canAccessTool({
38
+ name: skill.name,
39
+ description: skill.description,
40
+ parameters: { type: 'object', properties: {} },
41
+ execute: () => undefined,
42
+ platforms: skill.platforms,
43
+ }, message);
44
+ }
45
+ function toolAccessMeta(tool) {
46
+ return [
47
+ tool.name,
48
+ tool.source ?? '',
49
+ (tool.platforms ?? []).join(','),
50
+ (tool.scopes ?? []).join(','),
51
+ (tool.permissions ?? []).join(','),
52
+ ].join(':');
53
+ }
54
+ function featureFingerprint(features) {
55
+ const tools = (features.tools?.getAll() ?? []).map(toolAccessMeta).sort().join('+');
56
+ const skills = (features.skills?.getAll() ?? [])
57
+ .map((s) => `${s.name}:${(s.platforms ?? []).join(',')}`)
58
+ .sort()
59
+ .join('+');
60
+ const agents = (features.agents?.getAll() ?? []).map((a) => a.name).sort().join('+');
61
+ const mcps = (features.mcps?.getAll() ?? []).map((m) => m.name).sort().join('+');
62
+ const agentEpoch = features.agents?.epoch ?? 0;
63
+ const mcpEpoch = features.mcps?.epoch ?? 0;
64
+ return `t:${tools}|s:${skills}|a:${agents}@${agentEpoch}|m:${mcps}@${mcpEpoch}`;
65
+ }
66
+ /**
67
+ * Fingerprint of message fields that `canAccessTool` consults
68
+ * (platforms ← $adapter, scopes ← $channel.type, permissions ← sender roles).
69
+ */
70
+ function canAccessProjectionKey(message) {
71
+ const platformsProjection = String(message.$adapter ?? '');
72
+ const scopesProjection = String(message.$channel?.type ?? 'private');
73
+ const permissionsProjection = [...senderRolesFromMessage(message)].map(String).sort().join(',');
74
+ return `p=${platformsProjection}|s=${scopesProjection}|perm=${permissionsProjection}`;
75
+ }
76
+ function buildTurnCacheKey(ctx, fingerprint) {
77
+ const mcpAllow = [...(ctx.binding.mcpServers ?? [])].map(String).sort().join(',');
78
+ return `${ctx.binding.name}|mcp=${mcpAllow}|${canAccessProjectionKey(ctx.message)}|${fingerprint}`;
79
+ }
80
+ function emptyOwned() {
81
+ return {
82
+ tools: new Set(),
83
+ skills: new Set(),
84
+ agents: new Set(),
85
+ mcps: new Set(),
86
+ };
87
+ }
88
+ function purgeOwned(orchestrator, owned, retained = emptyOwned()) {
89
+ for (const name of owned.tools) {
90
+ if (!retained.tools.has(name))
91
+ orchestrator.removeTool(name);
92
+ }
93
+ for (const name of owned.skills) {
94
+ if (!retained.skills.has(name))
95
+ orchestrator.removeSkill(name);
96
+ }
97
+ for (const name of owned.agents) {
98
+ if (retained.agents.has(name))
99
+ continue;
100
+ // removePreset also drops the SubAgentDef resource
101
+ orchestrator.subagents.removePreset(name);
102
+ }
103
+ for (const name of owned.mcps) {
104
+ if (!retained.mcps.has(name))
105
+ orchestrator.removeMcp(name);
106
+ }
107
+ }
108
+ function mergeOwned(target, source) {
109
+ for (const name of source.tools)
110
+ target.tools.add(name);
111
+ for (const name of source.skills)
112
+ target.skills.add(name);
113
+ for (const name of source.agents)
114
+ target.agents.add(name);
115
+ for (const name of source.mcps)
116
+ target.mcps.add(name);
117
+ }
118
+ export class FeatureCapabilityIngress {
119
+ /** Live on-demand set key; ownership is single-slot (purge on miss). */
120
+ lastCacheKey = null;
121
+ owned = emptyOwned();
122
+ /** Turns currently executing against the live projection. */
123
+ inFlight = 0;
124
+ /** Previous projections kept alive until their in-flight turns release. */
125
+ retired = new Map();
126
+ staleCounter = 0;
127
+ coreToolNames = new Set();
128
+ /** Test / hot-reload: drop cache so next ensureForTurn re-loads. */
129
+ invalidate() {
130
+ this.lastCacheKey = null;
131
+ }
132
+ /**
133
+ * Boot / refresh: load reserved/builtin tools from ToolFeature into Orchestrator.
134
+ * Returns count of newly tracked builtins (net adds this call).
135
+ */
136
+ ensureCore(orchestrator, features) {
137
+ let added = 0;
138
+ const seen = new Set();
139
+ for (const tool of features.tools?.getAll() ?? []) {
140
+ if (!isBuiltinToolSource(tool.source))
141
+ continue;
142
+ seen.add(tool.name);
143
+ const isNew = !this.coreToolNames.has(tool.name);
144
+ orchestrator.addTool(toolToOrchestrator(tool), undefined, tool.source ?? 'builtin');
145
+ this.coreToolNames.add(tool.name);
146
+ if (isNew)
147
+ added++;
148
+ }
149
+ for (const name of [...this.coreToolNames]) {
150
+ if (seen.has(name))
151
+ continue;
152
+ orchestrator.removeTool(name);
153
+ this.coreToolNames.delete(name);
154
+ }
155
+ return { tools: added };
156
+ }
157
+ /**
158
+ * Inbound: if cache miss, purge previous on-demand set then load Feature
159
+ * capabilities that pass canAccessTool / canAccessSkill for this message.
160
+ * MCP entries are limited to `binding.mcpServers` (empty → none).
161
+ *
162
+ * Concurrency: the returned lease must be released when the turn ends.
163
+ * While any turn is in flight, a cache miss retires the previous
164
+ * projection instead of purging it; the purge runs when the last turn
165
+ * holding that projection releases its lease.
166
+ */
167
+ ensureForTurn(orchestrator, features, ctx) {
168
+ const fp = featureFingerprint(features);
169
+ const key = buildTurnCacheKey(ctx, fp);
170
+ if (this.lastCacheKey === key) {
171
+ this.inFlight++;
172
+ return {
173
+ tools: 0,
174
+ skills: 0,
175
+ agents: 0,
176
+ mcps: 0,
177
+ cacheHit: true,
178
+ release: () => this.#releaseTurn(orchestrator, key),
179
+ };
180
+ }
181
+ // Cache miss: a turn still executing against the live projection keeps
182
+ // its entries; retire the projection and purge once it drains.
183
+ if (this.inFlight > 0) {
184
+ const retiredKey = this.lastCacheKey ?? `stale-${this.staleCounter++}`;
185
+ this.retired.set(retiredKey, { owned: this.owned, inFlight: this.inFlight });
186
+ }
187
+ else {
188
+ purgeOwned(orchestrator, this.owned);
189
+ }
190
+ this.owned = emptyOwned();
191
+ this.inFlight = 0;
192
+ let tools = 0;
193
+ let skills = 0;
194
+ let agents = 0;
195
+ let mcps = 0;
196
+ const allowedMcp = new Set((ctx.binding.mcpServers ?? []).map((s) => String(s).trim()).filter(Boolean));
197
+ for (const tool of features.tools?.getAll() ?? []) {
198
+ if (isBuiltinToolSource(tool.source))
199
+ continue;
200
+ if (!canAccessTool(tool, ctx.message))
201
+ continue;
202
+ orchestrator.addTool(toolToOrchestrator(tool), undefined, tool.source ?? 'feature');
203
+ this.owned.tools.add(tool.name);
204
+ tools++;
205
+ }
206
+ for (const skill of features.skills?.getAll() ?? []) {
207
+ if (!canAccessSkill(skill, ctx.message))
208
+ continue;
209
+ const orchSkill = skillToOrchestrator(skill);
210
+ orchSkill.tools = orchSkill.tools.filter((t) => canAccessTool(t, ctx.message));
211
+ orchestrator.addSkill(orchSkill, undefined, skill.pluginName);
212
+ this.owned.skills.add(skill.name);
213
+ skills++;
214
+ }
215
+ for (const preset of features.agents?.getAll() ?? []) {
216
+ orchestrator.addAgentPreset(preset, undefined, preset.pluginName ?? 'feature');
217
+ this.owned.agents.add(preset.name);
218
+ agents++;
219
+ }
220
+ for (const entry of features.mcps?.getAll() ?? []) {
221
+ if (!allowedMcp.has(entry.name))
222
+ continue;
223
+ const { pluginName: _p, ...mcp } = entry;
224
+ orchestrator.addMcp(mcp, undefined, entry.pluginName ?? 'feature');
225
+ this.owned.mcps.add(entry.name);
226
+ mcps++;
227
+ }
228
+ this.lastCacheKey = key;
229
+ this.inFlight = 1;
230
+ return {
231
+ tools,
232
+ skills,
233
+ agents,
234
+ mcps,
235
+ cacheHit: false,
236
+ release: () => this.#releaseTurn(orchestrator, key),
237
+ };
238
+ }
239
+ #releaseTurn(orchestrator, key) {
240
+ if (key === this.lastCacheKey) {
241
+ // Live projection: keep the cache even when no turn is in flight.
242
+ this.inFlight = Math.max(0, this.inFlight - 1);
243
+ return;
244
+ }
245
+ const retired = this.retired.get(key);
246
+ if (!retired)
247
+ return;
248
+ retired.inFlight--;
249
+ if (retired.inFlight > 0)
250
+ return;
251
+ this.retired.delete(key);
252
+ // Skip names the live projection (or another still-active retired
253
+ // projection) re-registered under the same name.
254
+ const retained = emptyOwned();
255
+ mergeOwned(retained, this.owned);
256
+ for (const other of this.retired.values()) {
257
+ if (other.inFlight > 0)
258
+ mergeOwned(retained, other.owned);
259
+ }
260
+ purgeOwned(orchestrator, retired.owned, retained);
261
+ }
262
+ }
263
+ export function createFeatureCapabilityIngress() {
264
+ return new FeatureCapabilityIngress();
265
+ }
266
+ //# sourceMappingURL=capability-ingress.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"capability-ingress.js","sourceRoot":"","sources":["../../src/ingress/capability-ingress.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export { FeatureCapabilityIngress, createFeatureCapabilityIngress, type CapabilityFeatureBundle, type IngressTurnContext, type IngressTurnLease, } from './capability-ingress.js';
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/ingress/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,wBAAwB,EACxB,8BAA8B,EAC9B,KAAK,uBAAuB,EAC5B,KAAK,kBAAkB,EACvB,KAAK,gBAAgB,GACtB,MAAM,yBAAyB,CAAC"}
@@ -0,0 +1,2 @@
1
+ export { FeatureCapabilityIngress, createFeatureCapabilityIngress, } from './capability-ingress.js';
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/ingress/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,wBAAwB,EACxB,8BAA8B,GAI/B,MAAM,yBAAyB,CAAC"}
@@ -2,6 +2,7 @@
2
2
  * Wire agent_* / im_transcripts stores into ZhinAgent (ADR 0009).
3
3
  */
4
4
  import { type AIConfig } from '@zhin.js/ai';
5
+ import { type OrchestrationService } from '../orchestrator/orchestration-service.js';
5
6
  import type { AIServiceRefs } from './shared-refs.js';
6
- export declare function activateAiDatabaseStorage(db: any, refs: AIServiceRefs, config: AIConfig, collaborationRaw?: unknown): Promise<void>;
7
+ export declare function activateAiDatabaseStorage(db: any, refs: AIServiceRefs, config: AIConfig, collaborationRaw?: unknown, orchestrationService?: OrchestrationService): Promise<void>;
7
8
  //# sourceMappingURL=activate-ai-database-storage.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"activate-ai-database-storage.d.ts","sourceRoot":"","sources":["../../src/init/activate-ai-database-storage.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,EAAE,KAAK,QAAQ,EAAyI,MAAM,aAAa,CAAC;AAQnL,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAEtD,wBAAsB,yBAAyB,CAC7C,EAAE,EAAE,GAAG,EACP,IAAI,EAAE,aAAa,EACnB,MAAM,EAAE,QAAQ,EAChB,gBAAgB,CAAC,EAAE,OAAO,GACzB,OAAO,CAAC,IAAI,CAAC,CAkEf"}
1
+ {"version":3,"file":"activate-ai-database-storage.d.ts","sourceRoot":"","sources":["../../src/init/activate-ai-database-storage.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,EAAE,KAAK,QAAQ,EAAyI,MAAM,aAAa,CAAC;AAOnL,OAAO,EAEL,KAAK,oBAAoB,EAC1B,MAAM,0CAA0C,CAAC;AAClD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAEtD,wBAAsB,yBAAyB,CAC7C,EAAE,EAAE,GAAG,EACP,IAAI,EAAE,aAAa,EACnB,MAAM,EAAE,QAAQ,EAChB,gBAAgB,CAAC,EAAE,OAAO,EAC1B,oBAAoB,CAAC,EAAE,oBAAoB,GAC1C,OAAO,CAAC,IAAI,CAAC,CAkEf"}
@@ -5,9 +5,9 @@ import { AgentSessionStore, DatabaseContextRepository, DatabaseImTranscriptStore
5
5
  import { DEFAULT_CONTEXT_TAIL_MESSAGE_LIMIT } from '../context/context-tail-limit.js';
6
6
  import { setMemoryEntryRepository } from '../memory-entry-registry.js';
7
7
  import { DatabaseOrchestrationRepository, MemoryOrchestrationRepository, } from '../orchestrator/orchestration-repository.js';
8
- import { upgradeOrchestrationRepository } from '../orchestrator/orchestration-service.js';
8
+ import { upgradeOrchestrationRepository, } from '../orchestrator/orchestration-service.js';
9
9
  import { wireCollaborationStorage } from '../collaboration/wire-collaboration-storage.js';
10
- export async function activateAiDatabaseStorage(db, refs, config, collaborationRaw) {
10
+ export async function activateAiDatabaseStorage(db, refs, config, collaborationRaw, orchestrationService) {
11
11
  if (!refs.zhinAgent)
12
12
  return;
13
13
  if (config.sessions?.useDatabase === false)
@@ -49,7 +49,7 @@ export async function activateAiDatabaseStorage(db, refs, config, collaborationR
49
49
  // initialised with a Memory placeholder during create-zhinAgent; this swaps
50
50
  // it to the Database repository while preserving registered executors and
51
51
  // workflow strategies (ADR 0027 — single state-transition authority).
52
- upgradeOrchestrationRepository(orchRepo);
52
+ upgradeOrchestrationRepository(orchRepo, orchestrationService);
53
53
  const semanticEnabled = config.memory?.semantic?.enabled === true;
54
54
  if (semanticEnabled) {
55
55
  const memoryModel = db.models?.get('memory_entries');
@@ -1 +1 @@
1
- {"version":3,"file":"activate-ai-database-storage.js","sourceRoot":"","sources":["../../src/init/activate-ai-database-storage.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"activate-ai-database-storage.js","sourceRoot":"","sources":["../../src/init/activate-ai-database-storage.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,EAAiB,iBAAiB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,6BAA6B,EAAE,6BAA6B,EAAE,MAAM,aAAa,CAAC;AACnL,OAAO,EAAE,kCAAkC,EAAE,MAAM,kCAAkC,CAAC;AACtF,OAAO,EAAE,wBAAwB,EAAE,MAAM,6BAA6B,CAAC;AACvE,OAAO,EACL,+BAA+B,EAC/B,6BAA6B,GAC9B,MAAM,6CAA6C,CAAC;AACrD,OAAO,EACL,8BAA8B,GAE/B,MAAM,0CAA0C,CAAC;AAElD,OAAO,EAAE,wBAAwB,EAAE,MAAM,gDAAgD,CAAC;AAC1F,MAAM,CAAC,KAAK,UAAU,yBAAyB,CAC7C,EAAO,EACP,IAAmB,EACnB,MAAgB,EAChB,gBAA0B,EAC1B,oBAA2C;IAE3C,IAAI,CAAC,IAAI,CAAC,SAAS;QAAE,OAAO;IAC5B,IAAI,MAAM,CAAC,QAAQ,EAAE,WAAW,KAAK,KAAK;QAAE,OAAO;IAEnD,MAAM,iBAAiB,GAAG,EAAE,CAAC,MAAM,EAAE,GAAG,CAAC,gBAAgB,CAAC,CAAC;IAC3D,MAAM,iBAAiB,GAAG,EAAE,CAAC,MAAM,EAAE,GAAG,CAAC,gBAAgB,CAAC,CAAC;IAC3D,MAAM,iBAAiB,GAAG,EAAE,CAAC,MAAM,EAAE,GAAG,CAAC,iBAAiB,CAAC,CAAC;IAC5D,MAAM,iBAAiB,GAAG,EAAE,CAAC,MAAM,EAAE,GAAG,CAAC,gBAAgB,CAAC,CAAC;IAE3D,IAAI,iBAAgD,CAAC;IACrD,IAAI,iBAAiB,EAAE,CAAC;QACtB,iBAAiB,GAAG,IAAI,iBAAiB,CAAC,iBAAiB,EAAE;YAC3D,oBAAoB,EAAE,MAAM,CAAC,QAAQ,EAAE,oBAAoB;SAC5D,CAAC,CAAC;IACL,CAAC;IAED,MAAM,iBAAiB,GAAG,CAAC,iBAAiB,IAAI,iBAAiB,IAAI,iBAAiB,CAAC;QACrF,CAAC,CAAC,IAAI,yBAAyB,CAC3B,iBAAiB,EACjB,iBAAiB,EACjB,iBAAiB,EACjB,EAAE,gBAAgB,EAAE,MAAM,CAAC,QAAQ,EAAE,oBAAoB,IAAI,kCAAkC,EAAE,CAClG;QACH,CAAC,CAAC,SAAS,CAAC;IAEd,MAAM,iBAAiB,GAAG,iBAAiB;QACzC,CAAC,CAAC,IAAI,yBAAyB,CAAC,iBAAiB,EAAE;YACjD,cAAc,EAAE,MAAM,CAAC,QAAQ,EAAE,iBAAiB;SACnD,CAAC;QACF,CAAC,CAAC,SAAS,CAAC;IAEd,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC;QACvB,iBAAiB;QACjB,iBAAiB;QACjB,iBAAiB;KAClB,CAAC,CAAC;IAEH,MAAM,YAAY,GAAG,EAAE,CAAC,MAAM,EAAE,GAAG,CAAC,kBAAkB,CAAC,CAAC;IACxD,IAAI,YAAY,EAAE,CAAC;QACjB,IAAI,CAAC,SAAS,CAAC,yBAAyB,CAAC,YAAY,CAAC,CAAC;IACzD,CAAC;IAED,MAAM,QAAQ,GAAG,EAAE,CAAC,MAAM,EAAE,GAAG,CAAC,oBAAoB,CAAC,CAAC;IACtD,MAAM,SAAS,GAAG,EAAE,CAAC,MAAM,EAAE,GAAG,CAAC,qBAAqB,CAAC,CAAC;IACxD,MAAM,UAAU,GAAG,EAAE,CAAC,MAAM,EAAE,GAAG,CAAC,sBAAsB,CAAC,CAAC;IAC1D,MAAM,QAAQ,GAAG,QAAQ,IAAI,SAAS;QACpC,CAAC,CAAC,IAAI,+BAA+B,CAAC,QAAQ,EAAE,SAAS,EAAE,UAAU,CAAC;QACtE,CAAC,CAAC,IAAI,6BAA6B,EAAE,CAAC;IACxC,4EAA4E;IAC5E,4EAA4E;IAC5E,0EAA0E;IAC1E,sEAAsE;IACtE,8BAA8B,CAAC,QAAQ,EAAE,oBAAoB,CAAC,CAAC;IAE/D,MAAM,eAAe,GAAG,MAAM,CAAC,MAAM,EAAE,QAAQ,EAAE,OAAO,KAAK,IAAI,CAAC;IAClE,IAAI,eAAe,EAAE,CAAC;QACpB,MAAM,WAAW,GAAG,EAAE,CAAC,MAAM,EAAE,GAAG,CAAC,gBAAgB,CAAC,CAAC;QACrD,MAAM,UAAU,GAAG,WAAW;YAC5B,CAAC,CAAC,IAAI,6BAA6B,CAAC,WAA6E,CAAC;YAClH,CAAC,CAAC,IAAI,6BAA6B,EAAE,CAAC;QACxC,wBAAwB,CAAC,UAAU,CAAC,CAAC;IACvC,CAAC;SAAM,CAAC;QACN,wBAAwB,CAAC,IAAI,CAAC,CAAC;IACjC,CAAC;IAED,MAAM,wBAAwB,CAAC,EAAE,EAAE,gBAAgB,CAAC,CAAC;AACvD,CAAC"}
@@ -1,8 +1,8 @@
1
- import { Logger } from '@zhin.js/logger';
1
+ import { getLogger } from '@zhin.js/logger';
2
2
  import { registerLlmApiFromProviders, sdkEntryFromProvider } from '@zhin.js/ai';
3
3
  import { createSkillSystem } from '../skill/skill-system.js';
4
4
  import { bindingToModelConfig } from '../routing/runtime-binding.js';
5
- const logger = new Logger(null, 'ZhinAgent');
5
+ const logger = getLogger('ZhinAgent');
6
6
  export function applyZhinAgentConfigure(target, deps) {
7
7
  if (deps.skillRegistry !== undefined) {
8
8
  target.skillRegistry = deps.skillRegistry;
@@ -1 +1 @@
1
- {"version":3,"file":"configure-zhin-agent.js","sourceRoot":"","sources":["../../src/init/configure-zhin-agent.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"configure-zhin-agent.js","sourceRoot":"","sources":["../../src/init/configure-zhin-agent.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ export type AiDatabaseModelDefiner = (name: string, definition: Record<string, unknown>) => void;
2
+ /** Define all AI / orchestration / collaboration tables (idempotent per Host generation). */
3
+ export declare function defineAiDatabaseModels(define: AiDatabaseModelDefiner): number;
4
+ //# sourceMappingURL=define-ai-database-models.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"define-ai-database-models.d.ts","sourceRoot":"","sources":["../../src/init/define-ai-database-models.ts"],"names":[],"mappings":"AAyBA,MAAM,MAAM,sBAAsB,GAAG,CACnC,IAAI,EAAE,MAAM,EACZ,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAChC,IAAI,CAAC;AAqBV,6FAA6F;AAC7F,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,sBAAsB,GAAG,MAAM,CAK7E"}
@@ -0,0 +1,33 @@
1
+ /**
2
+ * Register ADR 0009 AI persistence tables on a Host/plugin `define` surface.
3
+ * Used by legacy `registerDbModels` and Plugin Runtime Agent Host.
4
+ */
5
+ import { AGENT_SESSION_MODEL, AGENT_MESSAGE_MODEL, AGENT_SUMMARY_MODEL, IM_TRANSCRIPT_MODEL, ORCHESTRATION_RUN_MODEL, ORCHESTRATION_TASK_MODEL, ORCHESTRATION_EVENT_MODEL, MEMORY_ENTRY_MODEL, } from '@zhin.js/ai';
6
+ import { AI_USER_PROFILE_MODEL } from '../user-profile.js';
7
+ import { COLLABORATION_SCENE_MODEL, COLLABORATION_SCENE_MEMBER_MODEL, COLLABORATION_SCENE_ARTIFACT_MODEL, COLLABORATION_SCENE_ALIAS_MODEL, COLLABORATION_INIT_SESSION_MODEL, COLLABORATION_INIT_OBSERVATION_MODEL, COLLABORATION_SCENE_MEMBER_CHANNEL_MODEL, } from '../collaboration/collaboration-db-model.js';
8
+ const AI_DATABASE_MODELS = [
9
+ ['im_transcripts', IM_TRANSCRIPT_MODEL],
10
+ ['agent_sessions', AGENT_SESSION_MODEL],
11
+ ['agent_messages', AGENT_MESSAGE_MODEL],
12
+ ['agent_summaries', AGENT_SUMMARY_MODEL],
13
+ ['ai_user_profiles', AI_USER_PROFILE_MODEL],
14
+ ['orchestration_runs', ORCHESTRATION_RUN_MODEL],
15
+ ['orchestration_tasks', ORCHESTRATION_TASK_MODEL],
16
+ ['orchestration_events', ORCHESTRATION_EVENT_MODEL],
17
+ ['memory_entries', MEMORY_ENTRY_MODEL],
18
+ ['collaboration_scenes', COLLABORATION_SCENE_MODEL],
19
+ ['collaboration_scene_members', COLLABORATION_SCENE_MEMBER_MODEL],
20
+ ['collaboration_scene_artifacts', COLLABORATION_SCENE_ARTIFACT_MODEL],
21
+ ['collaboration_scene_aliases', COLLABORATION_SCENE_ALIAS_MODEL],
22
+ ['collaboration_init_sessions', COLLABORATION_INIT_SESSION_MODEL],
23
+ ['collaboration_init_observations', COLLABORATION_INIT_OBSERVATION_MODEL],
24
+ ['collaboration_scene_member_channels', COLLABORATION_SCENE_MEMBER_CHANNEL_MODEL],
25
+ ];
26
+ /** Define all AI / orchestration / collaboration tables (idempotent per Host generation). */
27
+ export function defineAiDatabaseModels(define) {
28
+ for (const [name, definition] of AI_DATABASE_MODELS) {
29
+ define(name, definition);
30
+ }
31
+ return AI_DATABASE_MODELS.length;
32
+ }
33
+ //# sourceMappingURL=define-ai-database-models.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"define-ai-database-models.js","sourceRoot":"","sources":["../../src/init/define-ai-database-models.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,EACL,mBAAmB,EACnB,mBAAmB,EACnB,mBAAmB,EACnB,mBAAmB,EACnB,uBAAuB,EACvB,wBAAwB,EACxB,yBAAyB,EACzB,kBAAkB,GACnB,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,qBAAqB,EAAE,MAAM,oBAAoB,CAAC;AAC3D,OAAO,EACL,yBAAyB,EACzB,gCAAgC,EAChC,kCAAkC,EAClC,+BAA+B,EAC/B,gCAAgC,EAChC,oCAAoC,EACpC,wCAAwC,GACzC,MAAM,4CAA4C,CAAC;AAOpD,MAAM,kBAAkB,GAA8D;IACpF,CAAC,gBAAgB,EAAE,mBAAmB,CAAC;IACvC,CAAC,gBAAgB,EAAE,mBAAmB,CAAC;IACvC,CAAC,gBAAgB,EAAE,mBAAmB,CAAC;IACvC,CAAC,iBAAiB,EAAE,mBAAmB,CAAC;IACxC,CAAC,kBAAkB,EAAE,qBAAqB,CAAC;IAC3C,CAAC,oBAAoB,EAAE,uBAAuB,CAAC;IAC/C,CAAC,qBAAqB,EAAE,wBAAwB,CAAC;IACjD,CAAC,sBAAsB,EAAE,yBAAyB,CAAC;IACnD,CAAC,gBAAgB,EAAE,kBAAkB,CAAC;IACtC,CAAC,sBAAsB,EAAE,yBAAyB,CAAC;IACnD,CAAC,6BAA6B,EAAE,gCAAgC,CAAC;IACjE,CAAC,+BAA+B,EAAE,kCAAkC,CAAC;IACrE,CAAC,6BAA6B,EAAE,+BAA+B,CAAC;IAChE,CAAC,6BAA6B,EAAE,gCAAgC,CAAC;IACjE,CAAC,iCAAiC,EAAE,oCAAoC,CAAC;IACzE,CAAC,qCAAqC,EAAE,wCAAwC,CAAC;CAClF,CAAC;AAEF,6FAA6F;AAC7F,MAAM,UAAU,sBAAsB,CAAC,MAA8B;IACnE,KAAK,MAAM,CAAC,IAAI,EAAE,UAAU,CAAC,IAAI,kBAAkB,EAAE,CAAC;QACpD,MAAM,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;IAC3B,CAAC;IACD,OAAO,kBAAkB,CAAC,MAAM,CAAC;AACnC,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"register-ai-service.d.ts","sourceRoot":"","sources":["../../src/init/register-ai-service.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,YAAY,CAAC;AAIpB,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAEtD,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,aAAa,GAAG,IAAI,CAwC3D"}
1
+ {"version":3,"file":"register-ai-service.d.ts","sourceRoot":"","sources":["../../src/init/register-ai-service.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,YAAY,CAAC;AAKpB,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAEtD,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,aAAa,GAAG,IAAI,CA0C3D"}
@@ -4,6 +4,7 @@
4
4
  import './types.js';
5
5
  import { formatCompact, getPlugin, setHostRootPlugin } from '@zhin.js/core';
6
6
  import { AIService } from '../service.js';
7
+ import { closeAuditLogger } from '../security/audit-logger.js';
7
8
  export function registerAIService(refs) {
8
9
  const plugin = getPlugin();
9
10
  const { provide, root, logger } = plugin;
@@ -37,6 +38,8 @@ export function registerAIService(refs) {
37
38
  refs.aiService = null;
38
39
  logger.debug(formatCompact({ stopped: true }));
39
40
  }
41
+ // 关停前 flush 审计日志,避免进程快退丢事件
42
+ await closeAuditLogger();
40
43
  },
41
44
  });
42
45
  }
@@ -1 +1 @@
1
- {"version":3,"file":"register-ai-service.js","sourceRoot":"","sources":["../../src/init/register-ai-service.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,YAAY,CAAC;AACpB,OAAO,EAAE,aAAa,EAAE,SAAS,EAAE,iBAAiB,EAAe,MAAM,eAAe,CAAC;AAEzF,OAAO,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAG1C,MAAM,UAAU,iBAAiB,CAAC,IAAmB;IACnD,MAAM,MAAM,GAAG,SAAS,EAAE,CAAC;IAC3B,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,MAAM,CAAC;IACzC,iBAAiB,CAAC,IAAI,CAAC,CAAC;IAExB,OAAO,CAAC;QACN,IAAI,EAAE,IAAI;QACV,WAAW,EAAE,0CAA0C;QACvD,KAAK,CAAC,OAAO,CAAC,EAAU;YACtB,MAAM,aAAa,GAAG,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;YAC5C,MAAM,SAAS,GACb,aAAa,EAAE,UAAU,EAAqB,IAAI,EAAE,CAAC;YACvD,MAAM,MAAM,GAAG,SAAS,CAAC,EAAE,IAAI,EAAE,CAAC;YAElC,IAAI,MAAM,CAAC,OAAO,KAAK,KAAK,EAAE,CAAC;gBAC7B,MAAM,CAAC,IAAI,CAAC,aAAa,CAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;gBAChD,OAAO,SAAiC,CAAC;YAC3C,CAAC;YAED,MAAM,OAAO,GAAG,IAAI,SAAS,CAAC,MAAM,CAAC,CAAC;YACtC,IAAI,CAAC,SAAS,GAAG,OAAO,CAAC;YACzB,OAAO,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;YAExB,MAAM,SAAS,GAAG,OAAO,CAAC,aAAa,EAAE,CAAC;YAC1C,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBAC3B,MAAM,CAAC,IAAI,CAAC,aAAa,CAAE,EAAE,KAAK,EAAE,cAAc,EAAE,CAAC,CAAC,CAAC;YACzD,CAAC;iBAAM,CAAC;gBACN,MAAM,CAAC,KAAK,CAAC,aAAa,CAAC,EAAE,SAAS,EAAE,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;YAClE,CAAC;YAED,OAAO,OAAO,CAAC;QACjB,CAAC;QACD,KAAK,CAAC,OAAO,CAAC,OAAkB;YAC9B,IAAI,OAAO,EAAE,CAAC;gBACZ,OAAO,CAAC,OAAO,EAAE,CAAC;gBAClB,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;gBACtB,MAAM,CAAC,KAAK,CAAC,aAAa,CAAE,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;YAClD,CAAC;QACH,CAAC;KACF,CAAC,CAAC;AACL,CAAC"}
1
+ {"version":3,"file":"register-ai-service.js","sourceRoot":"","sources":["../../src/init/register-ai-service.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,YAAY,CAAC;AACpB,OAAO,EAAE,aAAa,EAAE,SAAS,EAAE,iBAAiB,EAAe,MAAM,eAAe,CAAC;AAEzF,OAAO,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAC1C,OAAO,EAAE,gBAAgB,EAAE,MAAM,6BAA6B,CAAC;AAG/D,MAAM,UAAU,iBAAiB,CAAC,IAAmB;IACnD,MAAM,MAAM,GAAG,SAAS,EAAE,CAAC;IAC3B,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,MAAM,CAAC;IACzC,iBAAiB,CAAC,IAAI,CAAC,CAAC;IAExB,OAAO,CAAC;QACN,IAAI,EAAE,IAAI;QACV,WAAW,EAAE,0CAA0C;QACvD,KAAK,CAAC,OAAO,CAAC,EAAU;YACtB,MAAM,aAAa,GAAG,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;YAC5C,MAAM,SAAS,GACb,aAAa,EAAE,UAAU,EAAqB,IAAI,EAAE,CAAC;YACvD,MAAM,MAAM,GAAG,SAAS,CAAC,EAAE,IAAI,EAAE,CAAC;YAElC,IAAI,MAAM,CAAC,OAAO,KAAK,KAAK,EAAE,CAAC;gBAC7B,MAAM,CAAC,IAAI,CAAC,aAAa,CAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;gBAChD,OAAO,SAAiC,CAAC;YAC3C,CAAC;YAED,MAAM,OAAO,GAAG,IAAI,SAAS,CAAC,MAAM,CAAC,CAAC;YACtC,IAAI,CAAC,SAAS,GAAG,OAAO,CAAC;YACzB,OAAO,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;YAExB,MAAM,SAAS,GAAG,OAAO,CAAC,aAAa,EAAE,CAAC;YAC1C,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBAC3B,MAAM,CAAC,IAAI,CAAC,aAAa,CAAE,EAAE,KAAK,EAAE,cAAc,EAAE,CAAC,CAAC,CAAC;YACzD,CAAC;iBAAM,CAAC;gBACN,MAAM,CAAC,KAAK,CAAC,aAAa,CAAC,EAAE,SAAS,EAAE,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;YAClE,CAAC;YAED,OAAO,OAAO,CAAC;QACjB,CAAC;QACD,KAAK,CAAC,OAAO,CAAC,OAAkB;YAC9B,IAAI,OAAO,EAAE,CAAC;gBACZ,OAAO,CAAC,OAAO,EAAE,CAAC;gBAClB,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;gBACtB,MAAM,CAAC,KAAK,CAAC,aAAa,CAAE,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;YAClD,CAAC;YACD,2BAA2B;YAC3B,MAAM,gBAAgB,EAAE,CAAC;QAC3B,CAAC;KACF,CAAC,CAAC;AACL,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"register-builtin-tools.d.ts","sourceRoot":"","sources":["../../src/init/register-builtin-tools.ts"],"names":[],"mappings":"AAuBA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAEtD,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,aAAa,GAAG,IAAI,CA4X9D"}
1
+ {"version":3,"file":"register-builtin-tools.d.ts","sourceRoot":"","sources":["../../src/init/register-builtin-tools.ts"],"names":[],"mappings":"AAuBA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAEtD,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,aAAa,GAAG,IAAI,CAiZ9D"}
@@ -48,6 +48,9 @@ export function registerBuiltinTools(refs) {
48
48
  skillInstructionMaxChars: resolveSkillInstructionMaxChars(fullCfg, modelName),
49
49
  pluginSkillRootsResolver: () => collectPluginSkillSearchRoots(root),
50
50
  skillFileLookup: (name) => {
51
+ const fromFeature = root.inject?.('skill')?.get(name)?.filePath;
52
+ if (fromFeature)
53
+ return fromFeature;
51
54
  const orchestrator = root.inject?.('agent');
52
55
  return orchestrator?.skills.getByName(name)?.filePath;
53
56
  },
@@ -63,6 +66,12 @@ export function registerBuiltinTools(refs) {
63
66
  const plain = tool.toTool();
64
67
  disposers.push(toolService.addTool({ ...plain, source: 'builtin' }, root.name));
65
68
  }
69
+ // Boot: reserved/builtin → Orchestrator via Capability Ingress
70
+ const orchestratorBoot = root.inject?.('agent');
71
+ const ingress = root.inject?.('capabilityIngress');
72
+ if (orchestratorBoot && ingress) {
73
+ ingress.ensureCore(orchestratorBoot, { tools: toolService });
74
+ }
66
75
  let skillWatchers = [];
67
76
  let skillReloadDebounce = null;
68
77
  let toolReloadDebounce = null;
@@ -88,28 +97,34 @@ export function registerBuiltinTools(refs) {
88
97
  }
89
98
  return result;
90
99
  }
91
- /** 重新关联所有已注册 Skill tools(适配器 tool 后注册时调用) */
100
+ /** 重新关联 SkillFeature 中技能的 tools(适配器 tool 后注册时调用) */
92
101
  function relinkSkillTools() {
93
- const orchestrator = root.inject?.('agent');
94
- if (!orchestrator)
102
+ const skillFeature = root.inject?.('skill');
103
+ if (!skillFeature)
95
104
  return;
96
- for (const skill of orchestrator.skills.getAll()) {
105
+ let changed = false;
106
+ for (const skill of skillFeature.getAll()) {
97
107
  const declaredNames = skillToolNames.get(skill.name);
98
108
  if (!declaredNames || declaredNames.length === 0)
99
109
  continue;
100
110
  const newTools = resolveSkillTools(declaredNames);
101
111
  if (newTools.length > skill.tools.length) {
102
112
  skill.tools = newTools;
113
+ changed = true;
103
114
  }
104
115
  }
116
+ if (changed)
117
+ root.inject?.('capabilityIngress')?.invalidate();
105
118
  }
119
+ /**
120
+ * Discover workspace skills → SkillFeature (ADR 0042); Orchestrator via Ingress.
121
+ */
106
122
  async function syncWorkspaceSkills() {
107
- const orchestrator = root.inject?.('agent');
108
- if (!orchestrator)
123
+ const skillFeature = root.inject?.('skill');
124
+ if (!skillFeature)
109
125
  return { count: 0, pluginTools: '' };
110
- // Remove previously discovered skills
111
- for (const existing of orchestrator.skills.getAll()) {
112
- orchestrator.skills.remove(existing.name);
126
+ for (const existing of [...skillFeature.getAll()]) {
127
+ skillFeature.remove(existing);
113
128
  }
114
129
  skillToolNames.clear();
115
130
  const skills = await discoverWorkspaceSkills(root);
@@ -120,7 +135,7 @@ export function registerBuiltinTools(refs) {
120
135
  const toolNames = s.toolNames || [];
121
136
  skillToolNames.set(s.name, toolNames);
122
137
  const associatedTools = resolveSkillTools(toolNames);
123
- orchestrator.addSkill({
138
+ skillFeature.add({
124
139
  name: s.name,
125
140
  description: s.description,
126
141
  tools: associatedTools,
@@ -130,13 +145,14 @@ export function registerBuiltinTools(refs) {
130
145
  pluginName: ownerName,
131
146
  filePath: s.filePath,
132
147
  always: s.always,
133
- }, undefined, ownerName);
148
+ }, ownerName);
134
149
  if (associatedTools.length) {
135
150
  const label = s.platforms?.length ? s.platforms.join('+') : 'generic';
136
151
  pluginToolCounts.push(`${label}:${associatedTools.length}`);
137
152
  }
138
153
  }
139
154
  }
155
+ root.inject?.('capabilityIngress')?.invalidate();
140
156
  // Inject always-on skills content + XML summary into agent
141
157
  if (refs.zhinAgent) {
142
158
  const alwaysContent = await loadAlwaysSkillsContent(skills);
@@ -176,20 +192,21 @@ export function registerBuiltinTools(refs) {
176
192
  return added;
177
193
  }
178
194
  /**
179
- * Discover *.agent.md files and register agent presets into AgentPresetFeature.
195
+ * Discover *.agent.md AgentFeature (ADR 0042); Orchestrator via Ingress.
180
196
  */
181
197
  async function syncWorkspaceAgents() {
182
- const orchestrator = root.inject?.('agent');
183
- if (!orchestrator)
198
+ const agentFeature = root.inject?.('agentFeature');
199
+ if (!agentFeature)
184
200
  return 0;
185
- // Remove previously discovered presets
186
- for (const existing of orchestrator.subagents.getAllPresets()) {
187
- orchestrator.subagents.removePreset(existing.name);
201
+ for (const existing of [...agentFeature.getAll()]) {
202
+ agentFeature.remove(existing);
188
203
  }
189
204
  const agentMetas = await discoverWorkspaceAgents(root);
190
205
  ai.setDiscoveredAgents(agentMetas);
191
- if (agentMetas.length === 0)
206
+ if (agentMetas.length === 0) {
207
+ root.inject?.('capabilityIngress')?.invalidate();
192
208
  return 0;
209
+ }
193
210
  const allRegisteredTools = toolService.getAll();
194
211
  const toolNameIndex = new Map();
195
212
  for (const t of allRegisteredTools) {
@@ -197,7 +214,7 @@ export function registerBuiltinTools(refs) {
197
214
  }
198
215
  let added = 0;
199
216
  for (const meta of agentMetas) {
200
- if (orchestrator.subagents.getPreset(meta.name))
217
+ if (agentFeature.get(meta.name))
201
218
  continue;
202
219
  const toolNames = [];
203
220
  for (const toolName of meta.toolNames || []) {
@@ -213,7 +230,7 @@ export function registerBuiltinTools(refs) {
213
230
  systemPrompt = body;
214
231
  }
215
232
  catch { /* ignore */ }
216
- orchestrator.addAgentPreset({
233
+ agentFeature.add({
217
234
  name: meta.name,
218
235
  description: meta.description,
219
236
  systemPrompt: systemPrompt || '',
@@ -221,9 +238,10 @@ export function registerBuiltinTools(refs) {
221
238
  model: meta.model,
222
239
  filePath: meta.filePath,
223
240
  pluginName: meta.ownerPlugin || root.name,
224
- }, undefined, meta.ownerPlugin || root.name);
241
+ }, meta.ownerPlugin || root.name);
225
242
  added++;
226
243
  }
244
+ root.inject?.('capabilityIngress')?.invalidate();
227
245
  return added;
228
246
  }
229
247
  (async () => {
@@ -323,7 +341,7 @@ export function registerBuiltinTools(refs) {
323
341
  await orchestrator2?.hooks.trigger(createAIHookEvent('agent', 'bootstrap', undefined, {
324
342
  workspaceDir: process.cwd(),
325
343
  toolCount: builtinTools.length,
326
- skillCount: orchestrator2?.skills.size ?? 0,
344
+ skillCount: root.inject?.('skill')?.getAll().length ?? orchestrator2?.skills.size ?? 0,
327
345
  bootstrapFiles: loadedFiles,
328
346
  }));
329
347
  // Step 3: 延迟重关联 — 等适配器 tool 就绪后补齐 Skill 的 tools 列表