@zhin.js/agent 0.1.27 → 0.1.29
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 +40 -16
- package/lib/ai-event-bus.d.ts.map +1 -1
- package/lib/ai-event-bus.js +19 -12
- package/lib/ai-event-bus.js.map +1 -1
- package/lib/bootstrap.d.ts +1 -1
- package/lib/bootstrap.d.ts.map +1 -1
- package/lib/bootstrap.js +4 -4
- package/lib/bootstrap.js.map +1 -1
- package/lib/builtin/ask-user-tool.js +8 -8
- package/lib/builtin/ask-user-tool.js.map +1 -1
- package/lib/common-adapter-tools.d.ts.map +1 -1
- package/lib/common-adapter-tools.js +1 -1
- package/lib/common-adapter-tools.js.map +1 -1
- package/lib/discovery/tools.d.ts +1 -1
- package/lib/discovery/tools.d.ts.map +1 -1
- package/lib/discovery/tools.js +7 -7
- package/lib/discovery/tools.js.map +1 -1
- package/lib/index.d.ts +3 -3
- package/lib/index.d.ts.map +1 -1
- package/lib/index.js +2 -2
- package/lib/index.js.map +1 -1
- package/lib/init/activate-ai-database-storage.d.ts +7 -0
- package/lib/init/activate-ai-database-storage.d.ts.map +1 -0
- package/lib/init/activate-ai-database-storage.js +28 -0
- package/lib/init/activate-ai-database-storage.js.map +1 -0
- package/lib/init/create-zhin-agent.d.ts.map +1 -1
- package/lib/init/create-zhin-agent.js +16 -0
- package/lib/init/create-zhin-agent.js.map +1 -1
- package/lib/init/register-ai-trigger.d.ts.map +1 -1
- package/lib/init/register-ai-trigger.js +11 -17
- package/lib/init/register-ai-trigger.js.map +1 -1
- package/lib/init/register-db-models.d.ts.map +1 -1
- package/lib/init/register-db-models.js +3 -5
- package/lib/init/register-db-models.js.map +1 -1
- package/lib/init/register-db-upgrade.d.ts +1 -4
- package/lib/init/register-db-upgrade.d.ts.map +1 -1
- package/lib/init/register-db-upgrade.js +25 -41
- package/lib/init/register-db-upgrade.js.map +1 -1
- package/lib/init/register-management-tools.d.ts +2 -1
- package/lib/init/register-management-tools.d.ts.map +1 -1
- package/lib/init/register-management-tools.js +41 -12
- package/lib/init/register-management-tools.js.map +1 -1
- package/lib/init.d.ts +0 -1
- package/lib/init.d.ts.map +1 -1
- package/lib/init.js +1 -4
- package/lib/init.js.map +1 -1
- package/lib/monitoring/metrics.d.ts +4 -0
- package/lib/monitoring/metrics.d.ts.map +1 -1
- package/lib/monitoring/metrics.js +20 -0
- package/lib/monitoring/metrics.js.map +1 -1
- package/lib/orchestrator/agent-dispatcher.d.ts +14 -2
- package/lib/orchestrator/agent-dispatcher.d.ts.map +1 -1
- package/lib/orchestrator/agent-dispatcher.js +56 -3
- package/lib/orchestrator/agent-dispatcher.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/tool-registry.d.ts +3 -3
- package/lib/orchestrator/tool-registry.d.ts.map +1 -1
- package/lib/orchestrator/tool-registry.js +9 -9
- package/lib/orchestrator/tool-registry.js.map +1 -1
- package/lib/orchestrator/tool-selection.d.ts +1 -6
- package/lib/orchestrator/tool-selection.d.ts.map +1 -1
- package/lib/orchestrator/tool-selection.js +6 -44
- package/lib/orchestrator/tool-selection.js.map +1 -1
- package/lib/orchestrator/types.d.ts +4 -24
- package/lib/orchestrator/types.d.ts.map +1 -1
- package/lib/security/anomaly-detection.d.ts +2 -0
- package/lib/security/anomaly-detection.d.ts.map +1 -1
- package/lib/security/anomaly-detection.js +10 -4
- package/lib/security/anomaly-detection.js.map +1 -1
- package/lib/security/budget-limiter.d.ts +2 -0
- package/lib/security/budget-limiter.d.ts.map +1 -1
- package/lib/security/budget-limiter.js +13 -1
- package/lib/security/budget-limiter.js.map +1 -1
- package/lib/security/dangerous-tool-policy.d.ts.map +1 -1
- package/lib/security/dangerous-tool-policy.js +105 -21
- package/lib/security/dangerous-tool-policy.js.map +1 -1
- package/lib/security/exec-policy.js +4 -4
- package/lib/security/exec-policy.js.map +1 -1
- package/lib/security/file-role-policy.d.ts +11 -20
- package/lib/security/file-role-policy.d.ts.map +1 -1
- package/lib/security/file-role-policy.js +24 -26
- package/lib/security/file-role-policy.js.map +1 -1
- package/lib/security/network-policy.d.ts +2 -0
- package/lib/security/network-policy.d.ts.map +1 -1
- package/lib/security/network-policy.js +11 -1
- package/lib/security/network-policy.js.map +1 -1
- package/lib/security/owner-approve-always-store.d.ts +2 -1
- package/lib/security/owner-approve-always-store.d.ts.map +1 -1
- package/lib/security/owner-approve-always-store.js +32 -30
- package/lib/security/owner-approve-always-store.js.map +1 -1
- package/lib/subagent.d.ts.map +1 -1
- package/lib/subagent.js +7 -0
- package/lib/subagent.js.map +1 -1
- package/lib/zhin-agent/builtin-tools.d.ts +2 -2
- package/lib/zhin-agent/builtin-tools.d.ts.map +1 -1
- package/lib/zhin-agent/builtin-tools.js +33 -46
- package/lib/zhin-agent/builtin-tools.js.map +1 -1
- package/lib/zhin-agent/config.d.ts +0 -1
- package/lib/zhin-agent/config.d.ts.map +1 -1
- package/lib/zhin-agent/config.js +0 -2
- package/lib/zhin-agent/config.js.map +1 -1
- package/lib/zhin-agent/index.d.ts +19 -5
- package/lib/zhin-agent/index.d.ts.map +1 -1
- package/lib/zhin-agent/index.js +68 -9
- package/lib/zhin-agent/index.js.map +1 -1
- package/lib/zhin-agent/prompt-assembly.d.ts.map +1 -1
- package/lib/zhin-agent/prompt-assembly.js +4 -7
- package/lib/zhin-agent/prompt-assembly.js.map +1 -1
- package/lib/zhin-agent/prompt.d.ts +8 -3
- package/lib/zhin-agent/prompt.d.ts.map +1 -1
- package/lib/zhin-agent/prompt.js +191 -135
- package/lib/zhin-agent/prompt.js.map +1 -1
- package/lib/zhin-agent/session-io.d.ts +17 -7
- package/lib/zhin-agent/session-io.d.ts.map +1 -1
- package/lib/zhin-agent/session-io.js +62 -11
- package/lib/zhin-agent/session-io.js.map +1 -1
- package/lib/zhin-agent/task-continuation.d.ts.map +1 -1
- package/lib/zhin-agent/task-continuation.js +8 -2
- package/lib/zhin-agent/task-continuation.js.map +1 -1
- package/lib/zhin-agent/tool-orchestration.d.ts.map +1 -1
- package/lib/zhin-agent/tool-orchestration.js +8 -2
- package/lib/zhin-agent/tool-orchestration.js.map +1 -1
- package/lib/zhin-agent/tool-runtime.d.ts +2 -2
- package/lib/zhin-agent/tool-runtime.d.ts.map +1 -1
- package/lib/zhin-agent/tool-runtime.js +3 -2
- package/lib/zhin-agent/tool-runtime.js.map +1 -1
- package/lib/zhin-agent/turn-pipeline.d.ts.map +1 -1
- package/lib/zhin-agent/turn-pipeline.js +59 -21
- package/lib/zhin-agent/turn-pipeline.js.map +1 -1
- package/lib/zhin-agent/zhin-agent-private.d.ts +5 -2
- package/lib/zhin-agent/zhin-agent-private.d.ts.map +1 -1
- package/lib/zhin-agent/zhin-agent-private.js.map +1 -1
- package/package.json +4 -4
- package/lib/init/register-message-recorder.d.ts +0 -3
- package/lib/init/register-message-recorder.d.ts.map +0 -1
- package/lib/init/register-message-recorder.js +0 -27
- package/lib/init/register-message-recorder.js.map +0 -1
|
@@ -4,7 +4,8 @@
|
|
|
4
4
|
*/
|
|
5
5
|
import type { AIProvider, AgentTool, ContentPart, Usage } from '@zhin.js/ai';
|
|
6
6
|
import type { OutputElement } from '@zhin.js/ai';
|
|
7
|
-
import type {
|
|
7
|
+
import type { ChatHistoryContext } from '@zhin.js/ai';
|
|
8
|
+
import type { IMSessionStore, MemoryIMSessionStore } from '@zhin.js/ai';
|
|
8
9
|
import type { ModelRegistry } from '@zhin.js/ai';
|
|
9
10
|
import type { Plugin } from '@zhin.js/core';
|
|
10
11
|
import type { Tool, ToolContext } from '../orchestrator/types.js';
|
|
@@ -27,7 +28,8 @@ export interface ZhinAgentPrivate {
|
|
|
27
28
|
readonly skillRegistry: SkillRegistry | null;
|
|
28
29
|
readonly orchestrator: AgentOrchestrator | null;
|
|
29
30
|
readonly sessions: SessionManager;
|
|
30
|
-
readonly
|
|
31
|
+
readonly chatHistory: ChatHistoryContext | null;
|
|
32
|
+
readonly imSessionStore: IMSessionStore | MemoryIMSessionStore;
|
|
31
33
|
readonly memory: ConversationMemory;
|
|
32
34
|
readonly externalTools: Map<string, AgentTool>;
|
|
33
35
|
readonly userProfiles: UserProfileStore;
|
|
@@ -43,6 +45,7 @@ export interface ZhinAgentPrivate {
|
|
|
43
45
|
readonly deferredWorkerRunner: DeferredWorkerRunner;
|
|
44
46
|
lastToolSearchDeferredStats?: string;
|
|
45
47
|
readonly turnTracker: TurnTracker;
|
|
48
|
+
waitForMemoryPersistence(): Promise<void>;
|
|
46
49
|
beginActiveTurn(): void;
|
|
47
50
|
finalizeActiveTurn(partial: Omit<ZhinAgentTurnMetrics, 'usage' | 'mainUsage' | 'subagentUsage'> & {
|
|
48
51
|
usage: Usage;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"zhin-agent-private.d.ts","sourceRoot":"","sources":["../../src/zhin-agent/zhin-agent-private.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,KAAK,EAAE,UAAU,EAAE,SAAS,EAAE,WAAW,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AAC7E,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AACjD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"zhin-agent-private.d.ts","sourceRoot":"","sources":["../../src/zhin-agent/zhin-agent-private.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"zhin-agent-private.js","sourceRoot":"","sources":["../../src/zhin-agent/zhin-agent-private.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"zhin-agent-private.js","sourceRoot":"","sources":["../../src/zhin-agent/zhin-agent-private.ts"],"names":[],"mappings":"AAqFA,MAAM,UAAU,SAAS,CAAC,KAAc;IACtC,OAAO,KAAyB,CAAC;AACnC,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@zhin.js/agent",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.29",
|
|
4
4
|
"description": "Zhin AI Agent — session, ZhinAgent, init; composes @zhin.js/core providers and tools",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./lib/index.js",
|
|
@@ -18,9 +18,9 @@
|
|
|
18
18
|
"dependencies": {
|
|
19
19
|
"he": "^1.2.0",
|
|
20
20
|
"js-yaml": "^4.2.0",
|
|
21
|
-
"@zhin.js/
|
|
22
|
-
"@zhin.js/
|
|
23
|
-
"@zhin.js/logger": "0.1.
|
|
21
|
+
"@zhin.js/core": "1.1.31",
|
|
22
|
+
"@zhin.js/ai": "1.1.29",
|
|
23
|
+
"@zhin.js/logger": "0.1.70"
|
|
24
24
|
},
|
|
25
25
|
"peerDependencies": {
|
|
26
26
|
"@modelcontextprotocol/sdk": "^1.29.0"
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"register-message-recorder.d.ts","sourceRoot":"","sources":["../../src/init/register-message-recorder.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAEtD,wBAAgB,uBAAuB,CAAC,IAAI,EAAE,aAAa,GAAG,IAAI,CAuBjE"}
|
|
@@ -1,27 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Register middleware that records messages to the context manager.
|
|
3
|
-
*/
|
|
4
|
-
import { getPlugin } from '@zhin.js/core';
|
|
5
|
-
export function registerMessageRecorder(refs) {
|
|
6
|
-
const plugin = getPlugin();
|
|
7
|
-
const { root } = plugin;
|
|
8
|
-
root.addMiddleware(async (message, next) => {
|
|
9
|
-
await next();
|
|
10
|
-
if (refs.aiService?.contextManager) {
|
|
11
|
-
const record = {
|
|
12
|
-
platform: message.$adapter,
|
|
13
|
-
scene_id: message.$channel?.id || message.$sender.id,
|
|
14
|
-
scene_type: message.$channel?.type || 'private',
|
|
15
|
-
scene_name: message.$channel?.name || '',
|
|
16
|
-
sender_id: message.$sender.id,
|
|
17
|
-
sender_name: message.$sender.name || message.$sender.id,
|
|
18
|
-
message: typeof message.$raw === 'string'
|
|
19
|
-
? message.$raw
|
|
20
|
-
: JSON.stringify(message.$raw),
|
|
21
|
-
time: message.$timestamp || Date.now(),
|
|
22
|
-
};
|
|
23
|
-
refs.aiService.contextManager.recordMessage(record).catch(() => { });
|
|
24
|
-
}
|
|
25
|
-
});
|
|
26
|
-
}
|
|
27
|
-
//# sourceMappingURL=register-message-recorder.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"register-message-recorder.js","sourceRoot":"","sources":["../../src/init/register-message-recorder.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,EAAE,SAAS,EAAW,MAAM,eAAe,CAAC;AAInD,MAAM,UAAU,uBAAuB,CAAC,IAAmB;IACzD,MAAM,MAAM,GAAG,SAAS,EAAE,CAAC;IAC3B,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,CAAC;IAExB,IAAI,CAAC,aAAa,CAAC,KAAK,EAAE,OAAgB,EAAE,IAAyB,EAAE,EAAE;QACvE,MAAM,IAAI,EAAE,CAAC;QACb,IAAI,IAAI,CAAC,SAAS,EAAE,cAAc,EAAE,CAAC;YACnC,MAAM,MAAM,GAAkB;gBAC5B,QAAQ,EAAE,OAAO,CAAC,QAAQ;gBAC1B,QAAQ,EAAE,OAAO,CAAC,QAAQ,EAAE,EAAE,IAAI,OAAO,CAAC,OAAO,CAAC,EAAE;gBACpD,UAAU,EAAE,OAAO,CAAC,QAAQ,EAAE,IAAI,IAAI,SAAS;gBAC/C,UAAU,EAAG,OAAO,CAAC,QAA8B,EAAE,IAAI,IAAI,EAAE;gBAC/D,SAAS,EAAE,OAAO,CAAC,OAAO,CAAC,EAAE;gBAC7B,WAAW,EAAE,OAAO,CAAC,OAAO,CAAC,IAAI,IAAI,OAAO,CAAC,OAAO,CAAC,EAAE;gBACvD,OAAO,EACL,OAAO,OAAO,CAAC,IAAI,KAAK,QAAQ;oBAC9B,CAAC,CAAC,OAAO,CAAC,IAAI;oBACd,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC;gBAClC,IAAI,EAAE,OAAO,CAAC,UAAU,IAAI,IAAI,CAAC,GAAG,EAAE;aACvC,CAAC;YACF,IAAI,CAAC,SAAS,CAAC,cAAc,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;QACtE,CAAC;IACH,CAAC,CAAC,CAAC;AACL,CAAC"}
|