@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
@@ -1,13 +1,32 @@
1
1
  import { getHostRootPlugin } from '@zhin.js/core';
2
2
  import { createAIHookBusPayload } from './ai-event-bus.js';
3
+ import { aiHookRuntimeBus } from './ai-hook-runtime-bus.js';
4
+ import { runModuleAIHookHandlers } from './ai-hook-handlers.js';
3
5
  function resolveRootPlugin() {
4
6
  return getHostRootPlugin();
5
7
  }
8
+ /**
9
+ * Emit AI hook / session lifecycle events onto:
10
+ * 1. Module Runtime bus (`aiHookRuntimeBus`) — Plugin Runtime without host Plugin
11
+ * 2. Legacy `registerAIHook` handlers
12
+ * 3. Root Plugin event bus when a classic host Plugin exists (`onAIHook` / `plugin.on`)
13
+ *
14
+ * HookRegistry and AgentStreamBus remain internal orchestration.
15
+ */
6
16
  export function emitAIHookBusEvent(event, source, agentId) {
17
+ const payload = createAIHookBusPayload(event, source, agentId);
18
+ aiHookRuntimeBus.emit('ai.hook', payload);
19
+ if (event.type === 'session' && event.action === 'new') {
20
+ aiHookRuntimeBus.emit('ai.session.new', payload);
21
+ }
22
+ if (event.type === 'session' && event.action === 'compact') {
23
+ aiHookRuntimeBus.emit('ai.session.compact', payload);
24
+ }
25
+ // Fire-and-forget: registerAIHook handlers must not block the turn pipeline.
26
+ void runModuleAIHookHandlers(event);
7
27
  const root = resolveRootPlugin();
8
28
  if (!root || typeof root.dispatch !== 'function')
9
29
  return;
10
- const payload = createAIHookBusPayload(event, source, agentId);
11
30
  root.dispatch('ai.hook', payload);
12
31
  if (event.type === 'session' && event.action === 'new') {
13
32
  root.dispatch('ai.session.new', payload);
@@ -1 +1 @@
1
- {"version":3,"file":"plugin-ai-hook-bus.js","sourceRoot":"","sources":["../src/plugin-ai-hook-bus.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAe,MAAM,eAAe,CAAC;AAE/D,OAAO,EAAE,sBAAsB,EAAE,MAAM,mBAAmB,CAAC;AAE3D,SAAS,iBAAiB;IACxB,OAAO,iBAAiB,EAAE,CAAC;AAC7B,CAAC;AAED,MAAM,UAAU,kBAAkB,CAChC,KAAkB,EAClB,MAAuC,EACvC,OAAgB;IAEhB,MAAM,IAAI,GAAG,iBAAiB,EAAE,CAAC;IACjC,IAAI,CAAC,IAAI,IAAI,OAAO,IAAI,CAAC,QAAQ,KAAK,UAAU;QAAE,OAAO;IACzD,MAAM,OAAO,GAAG,sBAAsB,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC;IAC/D,IAAI,CAAC,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;IAElC,IAAI,KAAK,CAAC,IAAI,KAAK,SAAS,IAAI,KAAK,CAAC,MAAM,KAAK,KAAK,EAAE,CAAC;QACvD,IAAI,CAAC,QAAQ,CAAC,gBAAgB,EAAE,OAAO,CAAC,CAAC;IAC3C,CAAC;IACD,IAAI,KAAK,CAAC,IAAI,KAAK,SAAS,IAAI,KAAK,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;QAC3D,IAAI,CAAC,QAAQ,CAAC,oBAAoB,EAAE,OAAO,CAAC,CAAC;IAC/C,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"plugin-ai-hook-bus.js","sourceRoot":"","sources":["../src/plugin-ai-hook-bus.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAe,MAAM,eAAe,CAAC;AAE/D,OAAO,EAAE,sBAAsB,EAAE,MAAM,mBAAmB,CAAC;AAC3D,OAAO,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAC5D,OAAO,EAAE,uBAAuB,EAAE,MAAM,uBAAuB,CAAC;AAEhE,SAAS,iBAAiB;IACxB,OAAO,iBAAiB,EAAE,CAAC;AAC7B,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,kBAAkB,CAChC,KAAkB,EAClB,MAAuC,EACvC,OAAgB;IAEhB,MAAM,OAAO,GAAG,sBAAsB,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC;IAC/D,gBAAgB,CAAC,IAAI,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;IAC1C,IAAI,KAAK,CAAC,IAAI,KAAK,SAAS,IAAI,KAAK,CAAC,MAAM,KAAK,KAAK,EAAE,CAAC;QACvD,gBAAgB,CAAC,IAAI,CAAC,gBAAgB,EAAE,OAAO,CAAC,CAAC;IACnD,CAAC;IACD,IAAI,KAAK,CAAC,IAAI,KAAK,SAAS,IAAI,KAAK,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;QAC3D,gBAAgB,CAAC,IAAI,CAAC,oBAAoB,EAAE,OAAO,CAAC,CAAC;IACvD,CAAC;IAED,6EAA6E;IAC7E,KAAK,uBAAuB,CAAC,KAAK,CAAC,CAAC;IAEpC,MAAM,IAAI,GAAG,iBAAiB,EAAE,CAAC;IACjC,IAAI,CAAC,IAAI,IAAI,OAAO,IAAI,CAAC,QAAQ,KAAK,UAAU;QAAE,OAAO;IACzD,IAAI,CAAC,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;IAElC,IAAI,KAAK,CAAC,IAAI,KAAK,SAAS,IAAI,KAAK,CAAC,MAAM,KAAK,KAAK,EAAE,CAAC;QACvD,IAAI,CAAC,QAAQ,CAAC,gBAAgB,EAAE,OAAO,CAAC,CAAC;IAC3C,CAAC;IACD,IAAI,KAAK,CAAC,IAAI,KAAK,SAAS,IAAI,KAAK,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;QAC3D,IAAI,CAAC,QAAQ,CAAC,oBAAoB,EAAE,OAAO,CAAC,CAAC;IAC/C,CAAC;AACH,CAAC"}
@@ -0,0 +1,11 @@
1
+ /**
2
+ * Stable Host boundary for protocols that expose Agent capabilities externally.
3
+ * Consumers must not reach into CLI installer state or the legacy Plugin graph.
4
+ */
5
+ export interface AgentHostPort {
6
+ /** Concrete Agent classes stay private to the composing package. */
7
+ readonly service: unknown;
8
+ readonly agent: unknown;
9
+ }
10
+ export declare const agentHostToken: import("@zhin.js/plugin-runtime").Token<AgentHostPort>;
11
+ //# sourceMappingURL=agent-host-port.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agent-host-port.d.ts","sourceRoot":"","sources":["../../src/plugin-runtime/agent-host-port.ts"],"names":[],"mappings":"AAEA;;;GAGG;AACH,MAAM,WAAW,aAAa;IAC5B,oEAAoE;IACpE,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAC1B,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC;CACzB;AAED,eAAO,MAAM,cAAc,wDAG1B,CAAC"}
@@ -0,0 +1,3 @@
1
+ import { createToken } from '@zhin.js/plugin-runtime';
2
+ export const agentHostToken = createToken('zhin.host.agent', 'Active AIService and ZhinAgent owned by the Root generation');
3
+ //# sourceMappingURL=agent-host-port.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agent-host-port.js","sourceRoot":"","sources":["../../src/plugin-runtime/agent-host-port.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAYtD,MAAM,CAAC,MAAM,cAAc,GAAG,WAAW,CACvC,iBAAiB,EACjB,6DAA6D,CAC9D,CAAC"}
@@ -0,0 +1,11 @@
1
+ import type { PluginId, SnapshotStore } from '@zhin.js/plugin-runtime';
2
+ import type { Message } from '@zhin.js/core';
3
+ import { type AgentCapabilities } from './capability-ingress.js';
4
+ export declare class AgentRuntime {
5
+ #private;
6
+ attach(snapshots: SnapshotStore): void;
7
+ runTurn<TResult>(owner: PluginId, operation: (capabilities: AgentCapabilities) => TResult | Promise<TResult>, options?: {
8
+ readonly message?: Message;
9
+ }): Promise<TResult>;
10
+ }
11
+ //# sourceMappingURL=agent-runtime.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agent-runtime.d.ts","sourceRoot":"","sources":["../../src/plugin-runtime/agent-runtime.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AACvE,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAC7C,OAAO,EAEL,KAAK,iBAAiB,EACvB,MAAM,yBAAyB,CAAC;AAEjC,qBAAa,YAAY;;IAIvB,MAAM,CAAC,SAAS,EAAE,aAAa,GAAG,IAAI;IAOhC,OAAO,CAAC,OAAO,EACnB,KAAK,EAAE,QAAQ,EACf,SAAS,EAAE,CAAC,YAAY,EAAE,iBAAiB,KAAK,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,EAC1E,OAAO,CAAC,EAAE;QAAE,QAAQ,CAAC,OAAO,CAAC,EAAE,OAAO,CAAA;KAAE,GACvC,OAAO,CAAC,OAAO,CAAC;CAgBpB"}
@@ -0,0 +1,25 @@
1
+ import { CapabilityIngress, } from './capability-ingress.js';
2
+ export class AgentRuntime {
3
+ #ingress = new CapabilityIngress();
4
+ #snapshots;
5
+ attach(snapshots) {
6
+ if (this.#snapshots && this.#snapshots !== snapshots) {
7
+ throw new Error('AgentRuntime is already attached to another Root');
8
+ }
9
+ this.#snapshots = snapshots;
10
+ }
11
+ async runTurn(owner, operation, options) {
12
+ if (!this.#snapshots)
13
+ throw new Error('AgentRuntime is not attached to a Root');
14
+ const lease = this.#snapshots.acquire();
15
+ let active = true;
16
+ try {
17
+ return await operation(this.#ingress.read(lease.value, owner, () => active, options?.message));
18
+ }
19
+ finally {
20
+ active = false;
21
+ lease.release();
22
+ }
23
+ }
24
+ }
25
+ //# sourceMappingURL=agent-runtime.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agent-runtime.js","sourceRoot":"","sources":["../../src/plugin-runtime/agent-runtime.ts"],"names":[],"mappings":"AAEA,OAAO,EACL,iBAAiB,GAElB,MAAM,yBAAyB,CAAC;AAEjC,MAAM,OAAO,YAAY;IACd,QAAQ,GAAG,IAAI,iBAAiB,EAAE,CAAC;IAC5C,UAAU,CAAiB;IAE3B,MAAM,CAAC,SAAwB;QAC7B,IAAI,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,UAAU,KAAK,SAAS,EAAE,CAAC;YACrD,MAAM,IAAI,KAAK,CAAC,kDAAkD,CAAC,CAAC;QACtE,CAAC;QACD,IAAI,CAAC,UAAU,GAAG,SAAS,CAAC;IAC9B,CAAC;IAED,KAAK,CAAC,OAAO,CACX,KAAe,EACf,SAA0E,EAC1E,OAAwC;QAExC,IAAI,CAAC,IAAI,CAAC,UAAU;YAAE,MAAM,IAAI,KAAK,CAAC,wCAAwC,CAAC,CAAC;QAChF,MAAM,KAAK,GAAG,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,CAAC;QACxC,IAAI,MAAM,GAAG,IAAI,CAAC;QAClB,IAAI,CAAC;YACH,OAAO,MAAM,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CACvC,KAAK,CAAC,KAAK,EACX,KAAK,EACL,GAAG,EAAE,CAAC,MAAM,EACZ,OAAO,EAAE,OAAO,CACjB,CAAC,CAAC;QACL,CAAC;gBAAS,CAAC;YACT,MAAM,GAAG,KAAK,CAAC;YACf,KAAK,CAAC,OAAO,EAAE,CAAC;QAClB,CAAC;IACH,CAAC;CACF"}
@@ -0,0 +1,25 @@
1
+ import type { PluginId, RuntimeSnapshot } from '@zhin.js/plugin-runtime';
2
+ import { type Message } from '@zhin.js/core';
3
+ import { type AgentDescriptor } from '@zhin.js/agent-feature';
4
+ import { type McpDescriptor, type McpToolDescriptor } from '@zhin.js/mcp-feature';
5
+ import { type SkillDescriptor } from '@zhin.js/skill';
6
+ import { type ToolDescriptor } from '@zhin.js/tool';
7
+ export interface ToolCapability extends ToolDescriptor {
8
+ execute<TInput = unknown, TResult = unknown>(input: TInput): Promise<TResult>;
9
+ }
10
+ export interface McpCapability extends McpDescriptor {
11
+ listTools(): Promise<readonly McpToolDescriptor[]>;
12
+ callTool<TResult = unknown>(tool: string, input: unknown): Promise<TResult>;
13
+ }
14
+ export interface AgentCapabilities {
15
+ readonly generation: number;
16
+ readonly owner: PluginId;
17
+ readonly tools: readonly ToolCapability[];
18
+ readonly skills: readonly SkillDescriptor[];
19
+ readonly agents: readonly AgentDescriptor[];
20
+ readonly mcp: readonly McpCapability[];
21
+ }
22
+ export declare class CapabilityIngress {
23
+ read(snapshot: RuntimeSnapshot, owner: PluginId, isActive?: () => boolean, message?: Message): AgentCapabilities;
24
+ }
25
+ //# sourceMappingURL=capability-ingress.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"capability-ingress.d.ts","sourceRoot":"","sources":["../../src/plugin-runtime/capability-ingress.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAa,QAAQ,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AACpF,OAAO,EAAiB,KAAK,OAAO,EAAyB,MAAM,eAAe,CAAC;AACnF,OAAO,EAGL,KAAK,eAAe,EACrB,MAAM,wBAAwB,CAAC;AAChC,OAAO,EAGL,KAAK,aAAa,EAClB,KAAK,iBAAiB,EACvB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAGL,KAAK,eAAe,EACrB,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAGL,KAAK,cAAc,EACpB,MAAM,eAAe,CAAC;AAEvB,MAAM,WAAW,cAAe,SAAQ,cAAc;IACpD,OAAO,CAAC,MAAM,GAAG,OAAO,EAAE,OAAO,GAAG,OAAO,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;CAC/E;AAED,MAAM,WAAW,aAAc,SAAQ,aAAa;IAClD,SAAS,IAAI,OAAO,CAAC,SAAS,iBAAiB,EAAE,CAAC,CAAC;IACnD,QAAQ,CAAC,OAAO,GAAG,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;CAC7E;AAED,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,KAAK,EAAE,QAAQ,CAAC;IACzB,QAAQ,CAAC,KAAK,EAAE,SAAS,cAAc,EAAE,CAAC;IAC1C,QAAQ,CAAC,MAAM,EAAE,SAAS,eAAe,EAAE,CAAC;IAC5C,QAAQ,CAAC,MAAM,EAAE,SAAS,eAAe,EAAE,CAAC;IAC5C,QAAQ,CAAC,GAAG,EAAE,SAAS,aAAa,EAAE,CAAC;CACxC;AAED,qBAAa,iBAAiB;IAC5B,IAAI,CACF,QAAQ,EAAE,eAAe,EACzB,KAAK,EAAE,QAAQ,EACf,QAAQ,GAAE,MAAM,OAAoB,EACpC,OAAO,CAAC,EAAE,OAAO,GAChB,iBAAiB;CAiBrB"}
@@ -0,0 +1,77 @@
1
+ import { canAccessTool } from '@zhin.js/core';
2
+ import { AgentIndex, agentFeatureId, } from '@zhin.js/agent-feature';
3
+ import { McpIndex, mcpFeatureId, } from '@zhin.js/mcp-feature';
4
+ import { SkillIndex, skillFeatureId, } from '@zhin.js/skill';
5
+ import { ToolIndex, toolFeatureId, } from '@zhin.js/tool';
6
+ export class CapabilityIngress {
7
+ read(snapshot, owner, isActive = () => true, message) {
8
+ if (!snapshot.tree.has(owner))
9
+ throw new Error(`Unknown Agent capability owner: ${owner}`);
10
+ const tools = projection(snapshot, toolFeatureId, ToolIndex);
11
+ const mcp = projection(snapshot, mcpFeatureId, McpIndex);
12
+ return Object.freeze({
13
+ generation: snapshot.generation,
14
+ owner,
15
+ tools: bindTools(tools, owner, isActive, message),
16
+ skills: Object.freeze([
17
+ ...(projection(snapshot, skillFeatureId, SkillIndex)?.visible(owner) ?? []),
18
+ ]),
19
+ agents: Object.freeze([
20
+ ...(projection(snapshot, agentFeatureId, AgentIndex)?.visible(owner) ?? []),
21
+ ]),
22
+ mcp: bindMcp(mcp, owner, isActive),
23
+ });
24
+ }
25
+ }
26
+ function bindTools(index, owner, isActive, message) {
27
+ if (!index)
28
+ return Object.freeze([]);
29
+ return Object.freeze(index.visible(owner)
30
+ .filter((descriptor) => !descriptor.hidden && canAccessDescriptor(descriptor, message))
31
+ .map((descriptor) => Object.freeze({
32
+ ...descriptor,
33
+ execute: (input) => {
34
+ assertActive(isActive);
35
+ return index.execute(owner, descriptor.name, input);
36
+ },
37
+ })));
38
+ }
39
+ function canAccessDescriptor(descriptor, message) {
40
+ return canAccessTool({
41
+ name: descriptor.name,
42
+ description: descriptor.description,
43
+ parameters: { type: 'object', properties: {} },
44
+ execute: () => undefined,
45
+ platforms: descriptor.platforms ? [...descriptor.platforms] : undefined,
46
+ scopes: descriptor.scopes ? [...descriptor.scopes] : undefined,
47
+ permissions: descriptor.permissions ? [...descriptor.permissions] : undefined,
48
+ }, message);
49
+ }
50
+ function bindMcp(index, owner, isActive) {
51
+ if (!index)
52
+ return Object.freeze([]);
53
+ return Object.freeze(index.visible(owner).map((descriptor) => Object.freeze({
54
+ ...descriptor,
55
+ listTools: () => {
56
+ assertActive(isActive);
57
+ return index.listTools(owner, descriptor.name);
58
+ },
59
+ callTool: (tool, input) => {
60
+ assertActive(isActive);
61
+ return index.callTool(owner, descriptor.name, tool, input);
62
+ },
63
+ })));
64
+ }
65
+ function assertActive(isActive) {
66
+ if (!isActive())
67
+ throw new Error('Agent capability turn scope has ended');
68
+ }
69
+ function projection(snapshot, id, constructor) {
70
+ const value = snapshot.projections.get(id);
71
+ return value
72
+ && typeof value === 'object'
73
+ && Object.prototype.isPrototypeOf.call(constructor.prototype, value)
74
+ ? value
75
+ : undefined;
76
+ }
77
+ //# sourceMappingURL=capability-ingress.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"capability-ingress.js","sourceRoot":"","sources":["../../src/plugin-runtime/capability-ingress.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ export * from './agent-runtime.js';
2
+ export * from './agent-host-port.js';
3
+ export * from './capability-ingress.js';
4
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/plugin-runtime/index.ts"],"names":[],"mappings":"AAAA,cAAc,oBAAoB,CAAC;AACnC,cAAc,sBAAsB,CAAC;AACrC,cAAc,yBAAyB,CAAC"}
@@ -0,0 +1,4 @@
1
+ export * from './agent-runtime.js';
2
+ export * from './agent-host-port.js';
3
+ export * from './capability-ingress.js';
4
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/plugin-runtime/index.ts"],"names":[],"mappings":"AAAA,cAAc,oBAAoB,CAAC;AACnC,cAAc,sBAAsB,CAAC;AACrC,cAAc,yBAAyB,CAAC"}
@@ -22,6 +22,8 @@ export interface ScheduleManager {
22
22
  previewTask?: (options: TaskExecutionOptions) => Promise<TaskExecutionResult>;
23
23
  }
24
24
  export declare function setScheduleManager(m: ScheduleManager | null): void;
25
+ /** Generation-safe registration; disposing an older owner cannot clear a newer manager. */
26
+ export declare function registerScheduleManager(manager: ScheduleManager): () => void;
25
27
  export declare function getScheduleManager(): ScheduleManager | null;
26
28
  export { generateScheduleJobId };
27
29
  export declare function createScheduleTools(): ZhinTool[];
@@ -1 +1 @@
1
- {"version":3,"file":"schedule-manager.d.ts","sourceRoot":"","sources":["../src/schedule-manager.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,EAAE,QAAQ,EAAU,MAAM,eAAe,CAAC;AAEjD,OAAO,EAEL,qBAAqB,EAEtB,MAAM,qCAAqC,CAAC;AAC7C,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AACnE,OAAO,KAAK,EAAE,oBAAoB,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AAIpF,eAAO,MAAM,sBAAsB,uBAAuB,CAAC;AAE3D,MAAM,WAAW,eAAe;IAC9B,eAAe,EAAE;QACf,SAAS,IAAI,KAAK,CAAC;YACjB,EAAE,EAAE,MAAM,CAAC;YACX,IAAI,EAAE,MAAM,CAAC;YACb,UAAU,CAAC,EAAE,MAAM,CAAC;YACpB,OAAO,EAAE,OAAO,CAAC;YACjB,aAAa,EAAE,IAAI,GAAG,IAAI,CAAC;YAC3B,MAAM,EAAE,MAAM,CAAC;SAChB,CAAC,CAAC;KACJ,CAAC;IACF,MAAM,EAAE,iBAAiB,GAAG,IAAI,CAAC;IACjC,sBAAsB;IACtB,WAAW,CAAC,EAAE,CAAC,OAAO,EAAE,oBAAoB,KAAK,OAAO,CAAC,mBAAmB,CAAC,CAAC;CAC/E;AAID,wBAAgB,kBAAkB,CAAC,CAAC,EAAE,eAAe,GAAG,IAAI,GAAG,IAAI,CAElE;AAED,wBAAgB,kBAAkB,IAAI,eAAe,GAAG,IAAI,CAE3D;AAED,OAAO,EAAE,qBAAqB,EAAE,CAAC;AAEjC,wBAAgB,mBAAmB,IAAI,QAAQ,EAAE,CA4IhD"}
1
+ {"version":3,"file":"schedule-manager.d.ts","sourceRoot":"","sources":["../src/schedule-manager.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,EAAE,QAAQ,EAAa,MAAM,eAAe,CAAC;AAEpD,OAAO,EAEL,qBAAqB,EAEtB,MAAM,qCAAqC,CAAC;AAC7C,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AACnE,OAAO,KAAK,EAAE,oBAAoB,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AAIpF,eAAO,MAAM,sBAAsB,uBAAuB,CAAC;AAE3D,MAAM,WAAW,eAAe;IAC9B,eAAe,EAAE;QACf,SAAS,IAAI,KAAK,CAAC;YACjB,EAAE,EAAE,MAAM,CAAC;YACX,IAAI,EAAE,MAAM,CAAC;YACb,UAAU,CAAC,EAAE,MAAM,CAAC;YACpB,OAAO,EAAE,OAAO,CAAC;YACjB,aAAa,EAAE,IAAI,GAAG,IAAI,CAAC;YAC3B,MAAM,EAAE,MAAM,CAAC;SAChB,CAAC,CAAC;KACJ,CAAC;IACF,MAAM,EAAE,iBAAiB,GAAG,IAAI,CAAC;IACjC,sBAAsB;IACtB,WAAW,CAAC,EAAE,CAAC,OAAO,EAAE,oBAAoB,KAAK,OAAO,CAAC,mBAAmB,CAAC,CAAC;CAC/E;AAKD,wBAAgB,kBAAkB,CAAC,CAAC,EAAE,eAAe,GAAG,IAAI,GAAG,IAAI,CAElE;AAED,2FAA2F;AAC3F,wBAAgB,uBAAuB,CAAC,OAAO,EAAE,eAAe,GAAG,MAAM,IAAI,CAM5E;AAED,wBAAgB,kBAAkB,IAAI,eAAe,GAAG,IAAI,CAG3D;AAED,OAAO,EAAE,qBAAqB,EAAE,CAAC;AAEjC,wBAAgB,mBAAmB,IAAI,QAAQ,EAAE,CA4IhD"}
@@ -1,17 +1,28 @@
1
1
  /**
2
2
  * 持久化调度任务 + AI 工具
3
3
  */
4
- import { ZhinTool, Logger } from '@zhin.js/core';
4
+ import { ZhinTool, getLogger } from '@zhin.js/core';
5
5
  import { captureScheduleJobCreator } from './assistant/job-creator.js';
6
6
  import { addScheduleJob, generateScheduleJobId, parseScheduleAddFromToolArgs, } from './assistant/schedule-job-service.js';
7
- const logger = new Logger(null, 'schedule-manager');
7
+ const logger = getLogger('schedule-manager');
8
8
  export const SCHEDULE_JOBS_FILENAME = 'schedule-jobs.json';
9
9
  let scheduleManager = null;
10
+ const scheduleManagerRegistrations = [];
10
11
  export function setScheduleManager(m) {
11
12
  scheduleManager = m;
12
13
  }
14
+ /** Generation-safe registration; disposing an older owner cannot clear a newer manager. */
15
+ export function registerScheduleManager(manager) {
16
+ scheduleManagerRegistrations.push(manager);
17
+ return () => {
18
+ const index = scheduleManagerRegistrations.lastIndexOf(manager);
19
+ if (index >= 0)
20
+ scheduleManagerRegistrations.splice(index, 1);
21
+ };
22
+ }
13
23
  export function getScheduleManager() {
14
- return scheduleManager;
24
+ return scheduleManagerRegistrations[scheduleManagerRegistrations.length - 1]
25
+ ?? scheduleManager;
15
26
  }
16
27
  export { generateScheduleJobId };
17
28
  export function createScheduleTools() {
@@ -1 +1 @@
1
- {"version":3,"file":"schedule-manager.js","sourceRoot":"","sources":["../src/schedule-manager.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"schedule-manager.js","sourceRoot":"","sources":["../src/schedule-manager.ts"],"names":[],"mappings":"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"}
@@ -59,6 +59,11 @@ export declare class AuditLogger {
59
59
  private eventCount;
60
60
  private sessionEvents;
61
61
  private static readonly MAX_SESSION_EVENTS;
62
+ /** 背压:write() 返回 false 时事件先进有界队列,'drain' 后泄放 */
63
+ private pendingLines;
64
+ private paused;
65
+ private droppedCount;
66
+ private static readonly MAX_PENDING_LINES;
62
67
  constructor(config?: Partial<AuditLoggerConfig>);
63
68
  private initLogFile;
64
69
  /**
@@ -74,9 +79,17 @@ export declare class AuditLogger {
74
79
  */
75
80
  log(event: Omit<AuditEvent, 'id' | 'timestamp'>): void;
76
81
  /**
77
- * 写入日志文件
82
+ * 写入日志文件(含背压处理)
83
+ *
84
+ * write() 返回 false 表示内部缓冲已满:暂停直入、事件行进入有界队列,
85
+ * 'drain' 后泄放;队列超上限(MAX_PENDING_LINES)丢弃并计数,
86
+ * 计数定期以 warn 审计事件落盘。
78
87
  */
79
88
  private writeToFile;
89
+ private enqueueLine;
90
+ /** 首次丢弃及每 1000 条丢弃落一条 warn 审计事件 */
91
+ private maybeLogDropWarn;
92
+ private onDrain;
80
93
  /**
81
94
  * 控制台输出
82
95
  */
@@ -132,6 +145,7 @@ export declare class AuditLogger {
132
145
  totalEvents: number;
133
146
  sessionEvents: number;
134
147
  blockedEvents: number;
148
+ droppedEvents: number;
135
149
  byType: Record<AuditEventType, number>;
136
150
  bySeverity: Record<AuditEventSeverity, number>;
137
151
  };
@@ -140,9 +154,9 @@ export declare class AuditLogger {
140
154
  */
141
155
  clearSessionEvents(): void;
142
156
  /**
143
- * 关闭日志流
157
+ * 关闭日志流:先泄放队列,再等待 'finish'(或 error)确保全部落盘。
144
158
  */
145
- close(): void;
159
+ close(): Promise<void>;
146
160
  }
147
161
  /**
148
162
  * 获取全局审计日志实例
@@ -153,7 +167,7 @@ export declare function getAuditLogger(): AuditLogger;
153
167
  */
154
168
  export declare function initAuditLogger(config: Partial<AuditLoggerConfig>): AuditLogger;
155
169
  /**
156
- * 关闭审计日志
170
+ * 关闭审计日志(等待全部缓冲事件落盘)
157
171
  */
158
- export declare function closeAuditLogger(): void;
172
+ export declare function closeAuditLogger(): Promise<void>;
159
173
  //# sourceMappingURL=audit-logger.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"audit-logger.d.ts","sourceRoot":"","sources":["../../src/security/audit-logger.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"audit-logger.d.ts","sourceRoot":"","sources":["../../src/security/audit-logger.ts"],"names":[],"mappings":"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"}
@@ -172,6 +172,11 @@ export class AuditLogger {
172
172
  eventCount = 0;
173
173
  sessionEvents = [];
174
174
  static MAX_SESSION_EVENTS = 5000;
175
+ /** 背压:write() 返回 false 时事件先进有界队列,'drain' 后泄放 */
176
+ pendingLines = [];
177
+ paused = false;
178
+ droppedCount = 0;
179
+ static MAX_PENDING_LINES = 10000;
175
180
  constructor(config = {}) {
176
181
  this.config = { ...DEFAULT_CONFIG, ...config };
177
182
  this.initLogFile();
@@ -250,19 +255,67 @@ export class AuditLogger {
250
255
  }
251
256
  }
252
257
  /**
253
- * 写入日志文件
258
+ * 写入日志文件(含背压处理)
259
+ *
260
+ * write() 返回 false 表示内部缓冲已满:暂停直入、事件行进入有界队列,
261
+ * 'drain' 后泄放;队列超上限(MAX_PENDING_LINES)丢弃并计数,
262
+ * 计数定期以 warn 审计事件落盘。
254
263
  */
255
264
  writeToFile(event) {
256
265
  if (!this.logStream)
257
266
  return;
258
267
  try {
259
268
  const logLine = JSON.stringify(event) + '\n';
260
- this.logStream.write(logLine);
269
+ if (this.paused) {
270
+ this.enqueueLine(logLine);
271
+ return;
272
+ }
273
+ const ok = this.logStream.write(logLine);
274
+ if (!ok) {
275
+ this.paused = true;
276
+ this.logStream.once('drain', () => this.onDrain());
277
+ }
261
278
  }
262
279
  catch (err) {
263
280
  console.error('[AuditLogger] 写入日志失败:', err);
264
281
  }
265
282
  }
283
+ enqueueLine(logLine) {
284
+ if (this.pendingLines.length >= AuditLogger.MAX_PENDING_LINES) {
285
+ this.droppedCount++;
286
+ this.maybeLogDropWarn();
287
+ return;
288
+ }
289
+ this.pendingLines.push(logLine);
290
+ }
291
+ /** 首次丢弃及每 1000 条丢弃落一条 warn 审计事件 */
292
+ maybeLogDropWarn() {
293
+ if (this.droppedCount === 1 || this.droppedCount % 1000 === 0) {
294
+ this.log({
295
+ type: 'security.violation',
296
+ severity: 'warn',
297
+ message: `审计事件写入队列超限,已丢弃 ${this.droppedCount} 条事件`,
298
+ blocked: true,
299
+ details: { droppedEvents: this.droppedCount },
300
+ });
301
+ }
302
+ }
303
+ onDrain() {
304
+ this.paused = false;
305
+ const stream = this.logStream;
306
+ if (!stream) {
307
+ this.pendingLines.length = 0;
308
+ return;
309
+ }
310
+ while (this.pendingLines.length > 0) {
311
+ const ok = stream.write(this.pendingLines.shift());
312
+ if (!ok) {
313
+ this.paused = true;
314
+ stream.once('drain', () => this.onDrain());
315
+ return;
316
+ }
317
+ }
318
+ }
266
319
  /**
267
320
  * 控制台输出
268
321
  */
@@ -435,6 +488,7 @@ export class AuditLogger {
435
488
  totalEvents: this.eventCount,
436
489
  sessionEvents: this.sessionEvents.length,
437
490
  blockedEvents,
491
+ droppedEvents: this.droppedCount,
438
492
  byType,
439
493
  bySeverity,
440
494
  };
@@ -446,13 +500,35 @@ export class AuditLogger {
446
500
  this.sessionEvents = [];
447
501
  }
448
502
  /**
449
- * 关闭日志流
503
+ * 关闭日志流:先泄放队列,再等待 'finish'(或 error)确保全部落盘。
450
504
  */
451
- close() {
452
- if (this.logStream) {
453
- this.logStream.end();
454
- this.logStream = null;
505
+ async close() {
506
+ const stream = this.logStream;
507
+ if (!stream)
508
+ return;
509
+ this.logStream = null;
510
+ this.paused = false;
511
+ // 泄放背压队列中剩余事件
512
+ while (this.pendingLines.length > 0) {
513
+ try {
514
+ stream.write(this.pendingLines.shift());
515
+ }
516
+ catch {
517
+ // 流已损坏,丢弃剩余队列
518
+ this.pendingLines.length = 0;
519
+ break;
520
+ }
455
521
  }
522
+ await new Promise((resolve) => {
523
+ const done = () => resolve();
524
+ stream.once('error', done);
525
+ try {
526
+ stream.end(done);
527
+ }
528
+ catch {
529
+ done();
530
+ }
531
+ });
456
532
  }
457
533
  }
458
534
  // ── 全局审计日志实例 ──────────────────────────────────────────────────
@@ -478,17 +554,17 @@ export function getAuditLogger() {
478
554
  */
479
555
  export function initAuditLogger(config) {
480
556
  if (globalAuditLogger) {
481
- globalAuditLogger.close();
557
+ void globalAuditLogger.close().catch(() => { });
482
558
  }
483
559
  globalAuditLogger = new AuditLogger(config);
484
560
  return globalAuditLogger;
485
561
  }
486
562
  /**
487
- * 关闭审计日志
563
+ * 关闭审计日志(等待全部缓冲事件落盘)
488
564
  */
489
- export function closeAuditLogger() {
565
+ export async function closeAuditLogger() {
490
566
  if (globalAuditLogger) {
491
- globalAuditLogger.close();
567
+ await globalAuditLogger.close();
492
568
  globalAuditLogger = null;
493
569
  }
494
570
  }