@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.
- package/README.md +26 -0
- package/lib/activity-feedback/ai-bus.d.ts +20 -0
- package/lib/activity-feedback/ai-bus.d.ts.map +1 -0
- package/lib/activity-feedback/ai-bus.js +42 -0
- package/lib/activity-feedback/ai-bus.js.map +1 -0
- package/lib/activity-feedback/config-resolver.d.ts.map +1 -1
- package/lib/activity-feedback/config-resolver.js +34 -5
- package/lib/activity-feedback/config-resolver.js.map +1 -1
- package/lib/activity-feedback/index.d.ts +1 -0
- package/lib/activity-feedback/index.d.ts.map +1 -1
- package/lib/activity-feedback/index.js +1 -0
- package/lib/activity-feedback/index.js.map +1 -1
- package/lib/agent-prompt/registry.d.ts.map +1 -1
- package/lib/agent-prompt/registry.js +2 -2
- package/lib/agent-prompt/registry.js.map +1 -1
- package/lib/agent-prompt/resolver.d.ts.map +1 -1
- package/lib/agent-prompt/resolver.js +2 -2
- package/lib/agent-prompt/resolver.js.map +1 -1
- package/lib/ai-event-subscriber.d.ts +10 -0
- package/lib/ai-event-subscriber.d.ts.map +1 -1
- package/lib/ai-event-subscriber.js +32 -6
- package/lib/ai-event-subscriber.js.map +1 -1
- package/lib/ai-hook-handlers.d.ts +8 -0
- package/lib/ai-hook-handlers.d.ts.map +1 -0
- package/lib/ai-hook-handlers.js +46 -0
- package/lib/ai-hook-handlers.js.map +1 -0
- package/lib/ai-hook-runtime-bus.d.ts +19 -0
- package/lib/ai-hook-runtime-bus.d.ts.map +1 -0
- package/lib/ai-hook-runtime-bus.js +41 -0
- package/lib/ai-hook-runtime-bus.js.map +1 -0
- package/lib/aop/index.d.ts +7 -5
- package/lib/aop/index.d.ts.map +1 -1
- package/lib/aop/index.js +6 -5
- package/lib/aop/index.js.map +1 -1
- package/lib/assistant/domains/home-assistant.js +2 -2
- package/lib/assistant/domains/home-assistant.js.map +1 -1
- package/lib/assistant/event-ingress.js +2 -2
- package/lib/assistant/event-ingress.js.map +1 -1
- package/lib/assistant/index.d.ts +1 -1
- package/lib/assistant/index.d.ts.map +1 -1
- package/lib/assistant/index.js +1 -1
- package/lib/assistant/index.js.map +1 -1
- package/lib/assistant/job-engine.js +2 -2
- package/lib/assistant/job-engine.js.map +1 -1
- package/lib/assistant/job-store.js +2 -2
- package/lib/assistant/job-store.js.map +1 -1
- package/lib/assistant/job-worker.js +2 -2
- package/lib/assistant/job-worker.js.map +1 -1
- package/lib/assistant/notification-router.d.ts.map +1 -1
- package/lib/assistant/notification-router.js +2 -2
- package/lib/assistant/notification-router.js.map +1 -1
- package/lib/assistant/runtime-registry.d.ts +2 -0
- package/lib/assistant/runtime-registry.d.ts.map +1 -1
- package/lib/assistant/runtime-registry.js +19 -5
- package/lib/assistant/runtime-registry.js.map +1 -1
- package/lib/assistant/schedule-tool-runtime.js +2 -2
- package/lib/assistant/schedule-tool-runtime.js.map +1 -1
- package/lib/authoring/define-tool.d.ts +12 -2
- package/lib/authoring/define-tool.d.ts.map +1 -1
- package/lib/authoring/define-tool.js +11 -1
- package/lib/authoring/define-tool.js.map +1 -1
- package/lib/authoring/entries/tools.d.ts +2 -2
- package/lib/authoring/entries/tools.d.ts.map +1 -1
- package/lib/authoring/entries/tools.js +1 -1
- package/lib/authoring/entries/tools.js.map +1 -1
- package/lib/authoring/index.d.ts +2 -2
- package/lib/authoring/index.d.ts.map +1 -1
- package/lib/authoring/index.js +1 -1
- package/lib/authoring/index.js.map +1 -1
- package/lib/bootstrap.js +2 -2
- package/lib/bootstrap.js.map +1 -1
- package/lib/builtin/analyze-media-tool.d.ts.map +1 -1
- package/lib/builtin/analyze-media-tool.js +18 -19
- package/lib/builtin/analyze-media-tool.js.map +1 -1
- package/lib/builtin/bash-tool.d.ts.map +1 -1
- package/lib/builtin/bash-tool.js +7 -21
- package/lib/builtin/bash-tool.js.map +1 -1
- package/lib/builtin/edit-file-tool.d.ts.map +1 -1
- package/lib/builtin/edit-file-tool.js +13 -43
- package/lib/builtin/edit-file-tool.js.map +1 -1
- package/lib/builtin/glob-tool.d.ts.map +1 -1
- package/lib/builtin/glob-tool.js +5 -13
- package/lib/builtin/glob-tool.js.map +1 -1
- package/lib/builtin/grep-tool.d.ts.map +1 -1
- package/lib/builtin/grep-tool.js +5 -13
- package/lib/builtin/grep-tool.js.map +1 -1
- package/lib/builtin/install-skill-tool.d.ts.map +1 -1
- package/lib/builtin/install-skill-tool.js +2 -2
- package/lib/builtin/install-skill-tool.js.map +1 -1
- package/lib/builtin/list-dir-tool.d.ts.map +1 -1
- package/lib/builtin/list-dir-tool.js +5 -13
- package/lib/builtin/list-dir-tool.js.map +1 -1
- package/lib/builtin/read-file-tool.d.ts.map +1 -1
- package/lib/builtin/read-file-tool.js +20 -26
- package/lib/builtin/read-file-tool.js.map +1 -1
- package/lib/builtin/web-fetch-tool.d.ts.map +1 -1
- package/lib/builtin/web-fetch-tool.js +5 -8
- package/lib/builtin/web-fetch-tool.js.map +1 -1
- package/lib/builtin/write-file-tool.d.ts.map +1 -1
- package/lib/builtin/write-file-tool.js +12 -44
- package/lib/builtin/write-file-tool.js.map +1 -1
- package/lib/collaboration/collaboration-delegation.d.ts.map +1 -1
- package/lib/collaboration/collaboration-delegation.js +35 -6
- package/lib/collaboration/collaboration-delegation.js.map +1 -1
- package/lib/collaboration/inbound-turn-route.d.ts.map +1 -1
- package/lib/collaboration/inbound-turn-route.js +35 -18
- package/lib/collaboration/inbound-turn-route.js.map +1 -1
- package/lib/collaboration/index.d.ts +2 -0
- package/lib/collaboration/index.d.ts.map +1 -1
- package/lib/collaboration/index.js +1 -0
- package/lib/collaboration/index.js.map +1 -1
- package/lib/collaboration/runtime-inbound-gate.d.ts +35 -0
- package/lib/collaboration/runtime-inbound-gate.d.ts.map +1 -0
- package/lib/collaboration/runtime-inbound-gate.js +111 -0
- package/lib/collaboration/runtime-inbound-gate.js.map +1 -0
- package/lib/collaboration/runtime-registry.d.ts +2 -2
- package/lib/collaboration/runtime-registry.d.ts.map +1 -1
- package/lib/collaboration/runtime-registry.js +12 -7
- package/lib/collaboration/runtime-registry.js.map +1 -1
- package/lib/core/agent-core-run.d.ts.map +1 -1
- package/lib/core/agent-core-run.js +10 -5
- package/lib/core/agent-core-run.js.map +1 -1
- package/lib/core/agent-loop-standalone.js +2 -2
- package/lib/core/agent-loop-standalone.js.map +1 -1
- package/lib/deferred-worker-runner.d.ts.map +1 -1
- package/lib/deferred-worker-runner.js +2 -2
- package/lib/deferred-worker-runner.js.map +1 -1
- package/lib/discovery/agent-surface.d.ts.map +1 -1
- package/lib/discovery/agent-surface.js +2 -2
- package/lib/discovery/agent-surface.js.map +1 -1
- package/lib/discovery/agents.d.ts +1 -1
- package/lib/discovery/agents.d.ts.map +1 -1
- package/lib/discovery/agents.js +6 -6
- package/lib/discovery/agents.js.map +1 -1
- package/lib/discovery/register-agent-surface.d.ts +8 -2
- package/lib/discovery/register-agent-surface.d.ts.map +1 -1
- package/lib/discovery/register-agent-surface.js +22 -7
- package/lib/discovery/register-agent-surface.js.map +1 -1
- package/lib/discovery/skills.d.ts.map +1 -1
- package/lib/discovery/skills.js +2 -2
- package/lib/discovery/skills.js.map +1 -1
- package/lib/discovery/tools.d.ts.map +1 -1
- package/lib/discovery/tools.js +2 -2
- package/lib/discovery/tools.js.map +1 -1
- package/lib/event/event-emitter.d.ts.map +1 -1
- package/lib/event/event-emitter.js +7 -2
- package/lib/event/event-emitter.js.map +1 -1
- package/lib/event/event-system.js +2 -2
- package/lib/event/event-system.js.map +1 -1
- package/lib/event/logging-middleware.js +2 -2
- package/lib/event/logging-middleware.js.map +1 -1
- package/lib/features/agent-feature.d.ts +23 -0
- package/lib/features/agent-feature.d.ts.map +1 -0
- package/lib/features/agent-feature.js +51 -0
- package/lib/features/agent-feature.js.map +1 -0
- package/lib/features/index.d.ts +3 -0
- package/lib/features/index.d.ts.map +1 -0
- package/lib/features/index.js +3 -0
- package/lib/features/index.js.map +1 -0
- package/lib/features/mcp-feature.d.ts +25 -0
- package/lib/features/mcp-feature.d.ts.map +1 -0
- package/lib/features/mcp-feature.js +52 -0
- package/lib/features/mcp-feature.js.map +1 -0
- package/lib/hooks.d.ts +3 -2
- package/lib/hooks.d.ts.map +1 -1
- package/lib/hooks.js +8 -36
- package/lib/hooks.js.map +1 -1
- package/lib/index.d.ts +28 -10
- package/lib/index.d.ts.map +1 -1
- package/lib/index.js +18 -7
- package/lib/index.js.map +1 -1
- package/lib/ingress/capability-ingress.d.ts +75 -0
- package/lib/ingress/capability-ingress.d.ts.map +1 -0
- package/lib/ingress/capability-ingress.js +266 -0
- package/lib/ingress/capability-ingress.js.map +1 -0
- package/lib/ingress/index.d.ts +2 -0
- package/lib/ingress/index.d.ts.map +1 -0
- package/lib/ingress/index.js +2 -0
- package/lib/ingress/index.js.map +1 -0
- package/lib/init/activate-ai-database-storage.d.ts +2 -1
- package/lib/init/activate-ai-database-storage.d.ts.map +1 -1
- package/lib/init/activate-ai-database-storage.js +3 -3
- package/lib/init/activate-ai-database-storage.js.map +1 -1
- package/lib/init/configure-zhin-agent.js +2 -2
- package/lib/init/configure-zhin-agent.js.map +1 -1
- package/lib/init/define-ai-database-models.d.ts +4 -0
- package/lib/init/define-ai-database-models.d.ts.map +1 -0
- package/lib/init/define-ai-database-models.js +33 -0
- package/lib/init/define-ai-database-models.js.map +1 -0
- package/lib/init/register-ai-service.d.ts.map +1 -1
- package/lib/init/register-ai-service.js +3 -0
- package/lib/init/register-ai-service.js.map +1 -1
- package/lib/init/register-builtin-tools.d.ts.map +1 -1
- package/lib/init/register-builtin-tools.js +40 -22
- package/lib/init/register-builtin-tools.js.map +1 -1
- package/lib/init/register-capability-features.d.ts +2 -0
- package/lib/init/register-capability-features.d.ts.map +1 -0
- package/lib/init/register-capability-features.js +28 -0
- package/lib/init/register-capability-features.js.map +1 -0
- package/lib/init/register-db-models.d.ts.map +1 -1
- package/lib/init/register-db-models.js +3 -20
- package/lib/init/register-db-models.js.map +1 -1
- package/lib/init/register-mcp-from-config.d.ts.map +1 -1
- package/lib/init/register-mcp-from-config.js +8 -6
- package/lib/init/register-mcp-from-config.js.map +1 -1
- package/lib/init/types.d.ts +7 -0
- package/lib/init/types.d.ts.map +1 -1
- package/lib/init.d.ts.map +1 -1
- package/lib/init.js +3 -1
- package/lib/init.js.map +1 -1
- package/lib/internal/phase-trace.js +2 -2
- package/lib/internal/phase-trace.js.map +1 -1
- package/lib/internal/prompt-trace.js +2 -2
- package/lib/internal/prompt-trace.js.map +1 -1
- package/lib/memory-layers.d.ts.map +1 -1
- package/lib/memory-layers.js +2 -2
- package/lib/memory-layers.js.map +1 -1
- package/lib/orchestration-runtime-registry.d.ts +1 -1
- package/lib/orchestrator/hook-registry.js +2 -2
- package/lib/orchestrator/hook-registry.js.map +1 -1
- package/lib/orchestrator/index.d.ts +1 -1
- package/lib/orchestrator/index.d.ts.map +1 -1
- package/lib/orchestrator/index.js +1 -1
- package/lib/orchestrator/index.js.map +1 -1
- package/lib/orchestrator/mcp-registry.js +2 -2
- package/lib/orchestrator/mcp-registry.js.map +1 -1
- package/lib/orchestrator/orchestration-repository.js +3 -3
- package/lib/orchestrator/orchestration-repository.js.map +1 -1
- package/lib/orchestrator/orchestration-service.d.ts +3 -1
- package/lib/orchestrator/orchestration-service.d.ts.map +1 -1
- package/lib/orchestrator/orchestration-service.js +25 -6
- package/lib/orchestrator/orchestration-service.js.map +1 -1
- package/lib/orchestrator/remote-agent-registry.js +2 -2
- package/lib/orchestrator/remote-agent-registry.js.map +1 -1
- package/lib/orchestrator/remote-task-poller.js +2 -2
- package/lib/orchestrator/remote-task-poller.js.map +1 -1
- package/lib/orchestrator/tool-registry.d.ts.map +1 -1
- package/lib/orchestrator/tool-registry.js +2 -2
- package/lib/orchestrator/tool-registry.js.map +1 -1
- package/lib/orchestrator/tool-selection.d.ts.map +1 -1
- package/lib/orchestrator/tool-selection.js +2 -2
- package/lib/orchestrator/tool-selection.js.map +1 -1
- package/lib/plugin-ai-hook-bus.d.ts +8 -0
- package/lib/plugin-ai-hook-bus.d.ts.map +1 -1
- package/lib/plugin-ai-hook-bus.js +20 -1
- package/lib/plugin-ai-hook-bus.js.map +1 -1
- package/lib/plugin-runtime/agent-host-port.d.ts +11 -0
- package/lib/plugin-runtime/agent-host-port.d.ts.map +1 -0
- package/lib/plugin-runtime/agent-host-port.js +3 -0
- package/lib/plugin-runtime/agent-host-port.js.map +1 -0
- package/lib/plugin-runtime/agent-runtime.d.ts +11 -0
- package/lib/plugin-runtime/agent-runtime.d.ts.map +1 -0
- package/lib/plugin-runtime/agent-runtime.js +25 -0
- package/lib/plugin-runtime/agent-runtime.js.map +1 -0
- package/lib/plugin-runtime/capability-ingress.d.ts +25 -0
- package/lib/plugin-runtime/capability-ingress.d.ts.map +1 -0
- package/lib/plugin-runtime/capability-ingress.js +77 -0
- package/lib/plugin-runtime/capability-ingress.js.map +1 -0
- package/lib/plugin-runtime/index.d.ts +4 -0
- package/lib/plugin-runtime/index.d.ts.map +1 -0
- package/lib/plugin-runtime/index.js +4 -0
- package/lib/plugin-runtime/index.js.map +1 -0
- package/lib/schedule-manager.d.ts +2 -0
- package/lib/schedule-manager.d.ts.map +1 -1
- package/lib/schedule-manager.js +14 -3
- package/lib/schedule-manager.js.map +1 -1
- package/lib/security/audit-logger.d.ts +19 -5
- package/lib/security/audit-logger.d.ts.map +1 -1
- package/lib/security/audit-logger.js +87 -11
- package/lib/security/audit-logger.js.map +1 -1
- package/lib/security/exec-policy.d.ts +7 -1
- package/lib/security/exec-policy.d.ts.map +1 -1
- package/lib/security/exec-policy.js +92 -4
- package/lib/security/exec-policy.js.map +1 -1
- package/lib/security/index.d.ts +1 -0
- package/lib/security/index.d.ts.map +1 -1
- package/lib/security/index.js +1 -0
- package/lib/security/index.js.map +1 -1
- package/lib/security/owner-approve-always-store.d.ts +20 -15
- package/lib/security/owner-approve-always-store.d.ts.map +1 -1
- package/lib/security/owner-approve-always-store.js +131 -19
- package/lib/security/owner-approve-always-store.js.map +1 -1
- package/lib/security/policy-facade.d.ts +86 -0
- package/lib/security/policy-facade.d.ts.map +1 -0
- package/lib/security/policy-facade.js +230 -0
- package/lib/security/policy-facade.js.map +1 -0
- package/lib/stability/memory-pressure.d.ts.map +1 -1
- package/lib/stability/memory-pressure.js +2 -2
- package/lib/stability/memory-pressure.js.map +1 -1
- package/lib/subagent/subagent-runtime.d.ts.map +1 -1
- package/lib/subagent/subagent-runtime.js +2 -2
- package/lib/subagent/subagent-runtime.js.map +1 -1
- package/lib/subagent/subagent-system-init.js +2 -2
- package/lib/subagent/subagent-system-init.js.map +1 -1
- package/lib/task-executor.d.ts.map +1 -1
- package/lib/task-executor.js +2 -2
- package/lib/task-executor.js.map +1 -1
- package/lib/tool/sources.d.ts.map +1 -1
- package/lib/tool/sources.js +2 -10
- package/lib/tool/sources.js.map +1 -1
- package/lib/turn/auto-continue.js +2 -2
- package/lib/turn/auto-continue.js.map +1 -1
- package/lib/turn/turn-pipeline.js +2 -2
- package/lib/turn/turn-pipeline.js.map +1 -1
- package/lib/typing-indicator/index.d.ts.map +1 -1
- package/lib/typing-indicator/index.js +8 -1
- package/lib/typing-indicator/index.js.map +1 -1
- package/lib/user-profile.js +2 -2
- package/lib/user-profile.js.map +1 -1
- package/lib/zhin-agent/index.d.ts +14 -1
- package/lib/zhin-agent/index.d.ts.map +1 -1
- package/lib/zhin-agent/index.js +21 -2
- package/lib/zhin-agent/index.js.map +1 -1
- package/package.json +16 -6
- package/lib/aop/coordination/index.d.ts +0 -7
- package/lib/aop/coordination/index.d.ts.map +0 -1
- package/lib/aop/coordination/index.js +0 -7
- package/lib/aop/coordination/index.js.map +0 -1
- package/lib/aop/inbound/index.d.ts +0 -7
- package/lib/aop/inbound/index.d.ts.map +0 -1
- package/lib/aop/inbound/index.js +0 -6
- 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;
|
|
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 @@
|
|
|
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 @@
|
|
|
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 @@
|
|
|
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,
|
|
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"}
|
package/lib/schedule-manager.js
CHANGED
|
@@ -1,17 +1,28 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* 持久化调度任务 + AI 工具
|
|
3
3
|
*/
|
|
4
|
-
import { ZhinTool,
|
|
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 =
|
|
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
|
|
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":"AAAA;;GAEG;AACH,OAAO,EAAE,QAAQ,EAAE,
|
|
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":"AAAA;;;;;;GAMG;AAQH,MAAM,MAAM,cAAc,GACtB,cAAc,GACd,aAAa,GACb,eAAe,GACf,aAAa,GACb,aAAa,GACb,oBAAoB,GACpB,eAAe,GACf,YAAY,GACZ,eAAe,GACf,aAAa,CAAC;AAElB,MAAM,MAAM,kBAAkB,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,UAAU,CAAC;AAIxE,MAAM,WAAW,UAAU;IACzB,YAAY;IACZ,EAAE,EAAE,MAAM,CAAC;IACX,WAAW;IACX,IAAI,EAAE,cAAc,CAAC;IACrB,WAAW;IACX,QAAQ,EAAE,kBAAkB,CAAC;IAC7B,UAAU;IACV,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY;IACZ,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,YAAY;IACZ,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,kBAAkB;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,SAAS;IACT,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,WAAW;IACX,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,eAAe;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,WAAW;IACX,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,WAAW;IACX,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW;IACX,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAClC,YAAY;IACZ,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,WAAW;IACX,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAID,MAAM,WAAW,iBAAiB;IAChC,eAAe;IACf,OAAO,EAAE,OAAO,CAAC;IACjB,aAAa;IACb,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,aAAa;IACb,WAAW,CAAC,EAAE,kBAAkB,CAAC;IACjC,sBAAsB;IACtB,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,aAAa;IACb,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,mBAAmB;IACnB,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAqKD,qBAAa,WAAW;IACtB,OAAO,CAAC,MAAM,CAAoB;IAClC,OAAO,CAAC,SAAS,CAA+B;IAChD,OAAO,CAAC,UAAU,CAAK;IACvB,OAAO,CAAC,aAAa,CAAoB;IACzC,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,kBAAkB,CAAQ;gBAEtC,MAAM,GAAE,OAAO,CAAC,iBAAiB,CAAM;IAKnD,OAAO,CAAC,WAAW;IAsBnB;;OAEG;IACH,OAAO,CAAC,eAAe;IAIvB;;OAEG;IACH,OAAO,CAAC,SAAS;IAcjB;;OAEG;IACH,GAAG,CAAC,KAAK,EAAE,IAAI,CAAC,UAAU,EAAE,IAAI,GAAG,WAAW,CAAC,GAAG,IAAI;IAkCtD
|
|
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.
|
|
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
|
-
|
|
453
|
-
|
|
454
|
-
|
|
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
|
}
|