@downcity/agent 1.1.129 → 1.1.148
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 +2 -2
- package/bin/agent/local/Agent.d.ts +40 -26
- package/bin/agent/local/Agent.d.ts.map +1 -1
- package/bin/agent/local/Agent.js +65 -41
- package/bin/agent/local/Agent.js.map +1 -1
- package/bin/agent/local/ProjectSetup.js +2 -2
- package/bin/agent/local/ProjectSetup.js.map +1 -1
- package/bin/agent/local/services/AgentAssemblyService.d.ts +2 -7
- package/bin/agent/local/services/AgentAssemblyService.d.ts.map +1 -1
- package/bin/agent/local/services/AgentAssemblyService.js +34 -22
- package/bin/agent/local/services/AgentAssemblyService.js.map +1 -1
- package/bin/agent/local/services/AgentBackgroundService.d.ts +55 -0
- package/bin/agent/local/services/AgentBackgroundService.d.ts.map +1 -0
- package/bin/agent/local/services/AgentBackgroundService.js +86 -0
- package/bin/agent/local/services/AgentBackgroundService.js.map +1 -0
- package/bin/agent/local/services/AgentSessionManager.d.ts +16 -7
- package/bin/agent/local/services/AgentSessionManager.d.ts.map +1 -1
- package/bin/agent/local/services/AgentSessionManager.js +83 -8
- package/bin/agent/local/services/AgentSessionManager.js.map +1 -1
- package/bin/agent/remote/RemoteAgent.d.ts +9 -13
- package/bin/agent/remote/RemoteAgent.d.ts.map +1 -1
- package/bin/agent/remote/RemoteAgent.js +23 -24
- package/bin/agent/remote/RemoteAgent.js.map +1 -1
- package/bin/agent/remote/RemoteSession.d.ts +11 -4
- package/bin/agent/remote/RemoteSession.d.ts.map +1 -1
- package/bin/agent/remote/RemoteSession.js +15 -3
- package/bin/agent/remote/RemoteSession.js.map +1 -1
- package/bin/agent/remote/RemoteTransport.d.ts +9 -1
- package/bin/agent/remote/RemoteTransport.d.ts.map +1 -1
- package/bin/agent/remote/transports/HttpRemoteAgentTransport.d.ts +7 -3
- package/bin/agent/remote/transports/HttpRemoteAgentTransport.d.ts.map +1 -1
- package/bin/agent/remote/transports/HttpRemoteAgentTransport.js +65 -2
- package/bin/agent/remote/transports/HttpRemoteAgentTransport.js.map +1 -1
- package/bin/agent/remote/transports/RpcRemoteAgentTransport.d.ts +5 -1
- package/bin/agent/remote/transports/RpcRemoteAgentTransport.d.ts.map +1 -1
- package/bin/agent/remote/transports/RpcRemoteAgentTransport.js +12 -0
- package/bin/agent/remote/transports/RpcRemoteAgentTransport.js.map +1 -1
- package/bin/config/AgentInitializer.d.ts +2 -2
- package/bin/config/AgentInitializer.js +2 -2
- package/bin/executor/Executor.d.ts +5 -0
- package/bin/executor/Executor.d.ts.map +1 -1
- package/bin/executor/Executor.js +34 -0
- package/bin/executor/Executor.js.map +1 -1
- package/bin/executor/composer/system/default/InitPrompts.d.ts +1 -1
- package/bin/executor/composer/system/default/InitPrompts.js +1 -1
- package/bin/executor/composer/system/default/SystemDomain.js +2 -2
- package/bin/executor/composer/system/default/SystemDomain.js.map +1 -1
- package/bin/executor/core-engine/CoreEngineRunner.d.ts.map +1 -1
- package/bin/executor/core-engine/CoreEngineRunner.js +16 -0
- package/bin/executor/core-engine/CoreEngineRunner.js.map +1 -1
- package/bin/executor/messages/ChatMessageMarkupTypes.d.ts +1 -1
- package/bin/executor/messages/ChatMessageMarkupTypes.js +1 -1
- package/bin/executor/store/history/jsonl/JsonlSessionHistoryStore.d.ts +8 -0
- package/bin/executor/store/history/jsonl/JsonlSessionHistoryStore.d.ts.map +1 -1
- package/bin/executor/store/history/jsonl/JsonlSessionHistoryStore.js +22 -0
- package/bin/executor/store/history/jsonl/JsonlSessionHistoryStore.js.map +1 -1
- package/bin/executor/types/SessionExecutor.d.ts +8 -0
- package/bin/executor/types/SessionExecutor.d.ts.map +1 -1
- package/bin/index.d.ts +4 -4
- package/bin/index.d.ts.map +1 -1
- package/bin/index.js +1 -2
- package/bin/index.js.map +1 -1
- package/bin/plugin/core/Activation.d.ts +0 -2
- package/bin/plugin/core/Activation.d.ts.map +1 -1
- package/bin/plugin/core/Activation.js +1 -1
- package/bin/plugin/core/Activation.js.map +1 -1
- package/bin/plugin/core/PluginCommandRequest.d.ts +1 -1
- package/bin/plugin/core/PluginCommandRequest.js +1 -1
- package/bin/plugin/core/PluginStateController.d.ts +0 -5
- package/bin/plugin/core/PluginStateController.d.ts.map +1 -1
- package/bin/plugin/core/PluginStateController.js +1 -5
- package/bin/plugin/core/PluginStateController.js.map +1 -1
- package/bin/plugin/types/PluginApi.d.ts +1 -1
- package/bin/plugin/types/PluginApi.js +1 -1
- package/bin/rpc/Client.d.ts +17 -1
- package/bin/rpc/Client.d.ts.map +1 -1
- package/bin/rpc/Client.js +47 -0
- package/bin/rpc/Client.js.map +1 -1
- package/bin/session/Session.d.ts +5 -0
- package/bin/session/Session.d.ts.map +1 -1
- package/bin/session/Session.js +7 -0
- package/bin/session/Session.js.map +1 -1
- package/bin/session/browse/Browse.d.ts +9 -1
- package/bin/session/browse/Browse.d.ts.map +1 -1
- package/bin/session/browse/Browse.js +81 -3
- package/bin/session/browse/Browse.js.map +1 -1
- package/bin/session/index.d.ts +3 -3
- package/bin/session/index.d.ts.map +1 -1
- package/bin/session/index.js +3 -3
- package/bin/session/index.js.map +1 -1
- package/bin/session/runtime/SessionPromptRuntime.d.ts +13 -0
- package/bin/session/runtime/SessionPromptRuntime.d.ts.map +1 -1
- package/bin/session/runtime/SessionPromptRuntime.js +82 -5
- package/bin/session/runtime/SessionPromptRuntime.js.map +1 -1
- package/bin/session/services/SessionTurnService.d.ts +5 -0
- package/bin/session/services/SessionTurnService.d.ts.map +1 -1
- package/bin/session/services/SessionTurnService.js +10 -1
- package/bin/session/services/SessionTurnService.js.map +1 -1
- package/bin/session/services/SessionViewService.d.ts.map +1 -1
- package/bin/session/services/SessionViewService.js +1 -7
- package/bin/session/services/SessionViewService.js.map +1 -1
- package/bin/session/storage/Metadata.d.ts +15 -0
- package/bin/session/storage/Metadata.d.ts.map +1 -1
- package/bin/session/storage/Metadata.js +15 -1
- package/bin/session/storage/Metadata.js.map +1 -1
- package/bin/session/storage/Paths.d.ts +24 -0
- package/bin/session/storage/Paths.d.ts.map +1 -1
- package/bin/session/storage/Paths.js +34 -0
- package/bin/session/storage/Paths.js.map +1 -1
- package/bin/session/storage/RuntimeSessionPort.d.ts +5 -0
- package/bin/session/storage/RuntimeSessionPort.d.ts.map +1 -1
- package/bin/session/storage/RuntimeSessionPort.js +4 -0
- package/bin/session/storage/RuntimeSessionPort.js.map +1 -1
- package/bin/types/agent/AgentOptions.d.ts +0 -63
- package/bin/types/agent/AgentOptions.d.ts.map +1 -1
- package/bin/types/agent/AgentTypes.d.ts +3 -2
- package/bin/types/agent/AgentTypes.d.ts.map +1 -1
- package/bin/types/agent/SessionActor.d.ts +13 -4
- package/bin/types/agent/SessionActor.d.ts.map +1 -1
- package/bin/types/agent/SessionTypes.d.ts +62 -0
- package/bin/types/agent/SessionTypes.d.ts.map +1 -1
- package/bin/types/config/DowncityConfig.d.ts +1 -1
- package/bin/types/executor/SessionRunContext.d.ts +8 -0
- package/bin/types/executor/SessionRunContext.d.ts.map +1 -1
- package/bin/types/platform/Store.d.ts +2 -2
- package/bin/types/platform/Store.js +2 -2
- package/bin/types/rpc/RpcProtocol.d.ts +37 -5
- package/bin/types/rpc/RpcProtocol.d.ts.map +1 -1
- package/bin/types/rpc/RpcProtocol.js +1 -1
- package/bin/types/runtime/agent/AgentContext.d.ts +92 -43
- package/bin/types/runtime/agent/AgentContext.d.ts.map +1 -1
- package/bin/types/runtime/agent/AgentContext.js +97 -5
- package/bin/types/runtime/agent/AgentContext.js.map +1 -1
- package/bin/types/runtime/platform/Platform.d.ts +8 -8
- package/bin/types/runtime/platform/PlatformGateway.d.ts +2 -2
- package/bin/types/sdk/AgentSessionStop.d.ts +36 -0
- package/bin/types/sdk/AgentSessionStop.d.ts.map +1 -0
- package/bin/types/sdk/AgentSessionStop.js +9 -0
- package/bin/types/sdk/AgentSessionStop.js.map +1 -0
- package/package.json +3 -3
- package/scripts/city-model-tool-loop.test.mjs +2 -2
- package/scripts/session-prompt-runtime.test.mjs +59 -0
- package/src/agent/local/Agent.ts +66 -55
- package/src/agent/local/ProjectSetup.ts +2 -2
- package/src/agent/local/services/AgentAssemblyService.ts +41 -35
- package/src/agent/local/services/AgentBackgroundService.ts +116 -0
- package/src/agent/local/services/AgentSessionManager.ts +127 -13
- package/src/agent/remote/RemoteAgent.ts +25 -34
- package/src/agent/remote/RemoteSession.ts +21 -6
- package/src/agent/remote/RemoteTransport.ts +14 -0
- package/src/agent/remote/transports/HttpRemoteAgentTransport.ts +100 -2
- package/src/agent/remote/transports/RpcRemoteAgentTransport.ts +26 -0
- package/src/config/AgentInitializer.ts +2 -2
- package/src/executor/Executor.ts +33 -0
- package/src/executor/composer/system/default/InitPrompts.ts +1 -1
- package/src/executor/composer/system/default/SystemDomain.ts +2 -2
- package/src/executor/core-engine/CoreEngineRunner.ts +21 -0
- package/src/executor/messages/ChatMessageMarkupTypes.ts +1 -1
- package/src/executor/store/history/jsonl/JsonlSessionHistoryStore.ts +22 -0
- package/src/executor/types/SessionExecutor.ts +2 -1
- package/src/index.ts +8 -10
- package/src/plugin/core/Activation.ts +1 -3
- package/src/plugin/core/PluginCommandRequest.ts +1 -1
- package/src/plugin/core/PluginStateController.ts +1 -10
- package/src/plugin/types/PluginApi.ts +1 -1
- package/src/rpc/Client.ts +61 -0
- package/src/session/Session.ts +9 -0
- package/src/session/browse/Browse.ts +103 -3
- package/src/session/index.ts +7 -0
- package/src/session/runtime/SessionPromptRuntime.ts +100 -5
- package/src/session/services/SessionTurnService.ts +13 -1
- package/src/session/services/SessionViewService.ts +1 -7
- package/src/session/storage/Metadata.ts +23 -1
- package/src/session/storage/Paths.ts +70 -0
- package/src/session/storage/RuntimeSessionPort.ts +9 -0
- package/src/types/agent/AgentOptions.ts +0 -69
- package/src/types/agent/AgentTypes.ts +6 -5
- package/src/types/agent/SessionActor.ts +21 -3
- package/src/types/agent/SessionTypes.ts +68 -0
- package/src/types/config/DowncityConfig.ts +1 -1
- package/src/types/executor/SessionRunContext.ts +9 -0
- package/src/types/platform/Store.ts +2 -2
- package/src/types/rpc/RpcProtocol.ts +46 -4
- package/src/types/runtime/agent/AgentContext.ts +132 -45
- package/src/types/runtime/platform/Platform.ts +8 -8
- package/src/types/runtime/platform/PlatformGateway.ts +2 -2
- package/src/types/sdk/AgentSessionStop.ts +39 -0
- package/tsconfig.tsbuildinfo +1 -1
- package/bin/agent/local/AgentRuntimeFactory.d.ts +0 -72
- package/bin/agent/local/AgentRuntimeFactory.d.ts.map +0 -1
- package/bin/agent/local/AgentRuntimeFactory.js +0 -73
- package/bin/agent/local/AgentRuntimeFactory.js.map +0 -1
- package/bin/agent/local/services/AgentLifecycleService.d.ts +0 -65
- package/bin/agent/local/services/AgentLifecycleService.d.ts.map +0 -1
- package/bin/agent/local/services/AgentLifecycleService.js +0 -140
- package/bin/agent/local/services/AgentLifecycleService.js.map +0 -1
- package/bin/rpc/Server.d.ts +0 -31
- package/bin/rpc/Server.d.ts.map +0 -1
- package/bin/rpc/Server.js +0 -106
- package/bin/rpc/Server.js.map +0 -1
- package/bin/rpc/server/InternalHandlers.d.ts +0 -21
- package/bin/rpc/server/InternalHandlers.d.ts.map +0 -1
- package/bin/rpc/server/InternalHandlers.js +0 -244
- package/bin/rpc/server/InternalHandlers.js.map +0 -1
- package/bin/rpc/server/RequestDispatcher.d.ts +0 -27
- package/bin/rpc/server/RequestDispatcher.d.ts.map +0 -1
- package/bin/rpc/server/RequestDispatcher.js +0 -38
- package/bin/rpc/server/RequestDispatcher.js.map +0 -1
- package/bin/rpc/server/SdkSessionHandlers.d.ts +0 -25
- package/bin/rpc/server/SdkSessionHandlers.d.ts.map +0 -1
- package/bin/rpc/server/SdkSessionHandlers.js +0 -86
- package/bin/rpc/server/SdkSessionHandlers.js.map +0 -1
- package/bin/rpc/server/ServerTypes.d.ts +0 -64
- package/bin/rpc/server/ServerTypes.d.ts.map +0 -1
- package/bin/rpc/server/ServerTypes.js +0 -9
- package/bin/rpc/server/ServerTypes.js.map +0 -1
- package/bin/types/runtime/agent/AgentRuntime.d.ts +0 -79
- package/bin/types/runtime/agent/AgentRuntime.d.ts.map +0 -1
- package/bin/types/runtime/agent/AgentRuntime.js +0 -13
- package/bin/types/runtime/agent/AgentRuntime.js.map +0 -1
- package/src/agent/local/AgentRuntimeFactory.ts +0 -152
- package/src/agent/local/services/AgentLifecycleService.ts +0 -198
- package/src/rpc/Server.ts +0 -143
- package/src/rpc/server/InternalHandlers.ts +0 -285
- package/src/rpc/server/RequestDispatcher.ts +0 -67
- package/src/rpc/server/SdkSessionHandlers.ts +0 -106
- package/src/rpc/server/ServerTypes.ts +0 -70
- package/src/types/runtime/agent/AgentRuntime.ts +0 -84
|
@@ -3,11 +3,103 @@
|
|
|
3
3
|
*
|
|
4
4
|
* 职责说明(中文)
|
|
5
5
|
* - 这里定义 plugin runtime、plugin、prompt system 共用的统一执行上下文。
|
|
6
|
-
* - `AgentContext`
|
|
6
|
+
* - `AgentContext` 是一个 class,表达"当前一次执行可见的能力面",不是宿主状态本体。
|
|
7
|
+
* - 同一 agent 实例全程共享同一个 context;plugin、session、executor 都基于它读写状态。
|
|
8
|
+
*/
|
|
9
|
+
/**
|
|
10
|
+
* 统一执行上下文。
|
|
7
11
|
*
|
|
8
|
-
*
|
|
9
|
-
* -
|
|
10
|
-
* -
|
|
12
|
+
* 关键点(中文)
|
|
13
|
+
* - 字段全部 readonly,构造一次后语义稳定,避免 plugin 误改。
|
|
14
|
+
* - `env` 引用 agent 级共享 mutable 对象,`...ctx.env` / `ctx.env.FOO` 直接可用。
|
|
15
|
+
* - `invoke` 是构造期组装的 plugin 调用端口,对外仍以 `InvokePluginPort` 形态暴露。
|
|
11
16
|
*/
|
|
12
|
-
export {
|
|
17
|
+
export class AgentContext {
|
|
18
|
+
/** 当前命令工作目录。 */
|
|
19
|
+
cwd;
|
|
20
|
+
/** 当前项目根目录。 */
|
|
21
|
+
rootPath;
|
|
22
|
+
/** 统一日志器。 */
|
|
23
|
+
logger;
|
|
24
|
+
/** 当前运行时已解析配置。 */
|
|
25
|
+
config;
|
|
26
|
+
/** 当前项目环境变量共享视图。 */
|
|
27
|
+
env;
|
|
28
|
+
/** 当前生效的 system 文本集合。 */
|
|
29
|
+
systems;
|
|
30
|
+
/** 当前可见的路径能力集合。 */
|
|
31
|
+
paths;
|
|
32
|
+
/** 当前可见的 plugin 配置持久化能力集合。 */
|
|
33
|
+
pluginConfig;
|
|
34
|
+
/** 当前 agent 持有的插件实例集合。 */
|
|
35
|
+
pluginInstances;
|
|
36
|
+
/** Session 能力入口。 */
|
|
37
|
+
session;
|
|
38
|
+
/** Plugin 调用入口。 */
|
|
39
|
+
plugins;
|
|
40
|
+
/** 跨 plugin runtime 调用主入口。 */
|
|
41
|
+
invoke;
|
|
42
|
+
constructor(options) {
|
|
43
|
+
this.cwd = options.cwd;
|
|
44
|
+
this.rootPath = options.rootPath;
|
|
45
|
+
this.logger = options.logger;
|
|
46
|
+
this.config = options.config;
|
|
47
|
+
this.env = options.env;
|
|
48
|
+
this.systems = options.systems;
|
|
49
|
+
this.paths = options.paths;
|
|
50
|
+
this.pluginConfig = options.pluginConfig;
|
|
51
|
+
this.pluginInstances = options.pluginInstances;
|
|
52
|
+
this.session = options.session;
|
|
53
|
+
this.plugins = options.plugins;
|
|
54
|
+
this.invoke = {
|
|
55
|
+
invoke: (params) => this.invoke_plugin_action(params),
|
|
56
|
+
};
|
|
57
|
+
}
|
|
58
|
+
/**
|
|
59
|
+
* 读取指定 sessionId 对应的 session 端口。
|
|
60
|
+
*
|
|
61
|
+
* 关键点(中文)
|
|
62
|
+
* - 返回值是统一的 `SessionPort`,而不是裸 `Executor`。
|
|
63
|
+
* - 这样 HTTP / plugin runtime / chat queue / contact 等入口都能复用同一层会话装配与执行兜底。
|
|
64
|
+
*/
|
|
65
|
+
getSession(sessionId) {
|
|
66
|
+
return this.session.get(sessionId);
|
|
67
|
+
}
|
|
68
|
+
/**
|
|
69
|
+
* 返回当前执行中的 sessionId 列表。
|
|
70
|
+
*/
|
|
71
|
+
listExecutingSessionIds() {
|
|
72
|
+
return this.session.listExecutingSessionIds();
|
|
73
|
+
}
|
|
74
|
+
/**
|
|
75
|
+
* 返回当前执行中的 session 数量。
|
|
76
|
+
*/
|
|
77
|
+
getExecutingSessionCount() {
|
|
78
|
+
return this.session.getExecutingSessionCount();
|
|
79
|
+
}
|
|
80
|
+
/**
|
|
81
|
+
* 跨 plugin runtime 调用 action 的内部实现。
|
|
82
|
+
*
|
|
83
|
+
* 关键点(中文)
|
|
84
|
+
* - 统一把 `runAction` 的成功/失败结果归一化为 `InvokePluginResult`。
|
|
85
|
+
* - 这里替代了原 `createAgentContext` 工厂里的胶水匿名函数。
|
|
86
|
+
*/
|
|
87
|
+
async invoke_plugin_action(params) {
|
|
88
|
+
const result = await this.plugins.runAction({
|
|
89
|
+
plugin: params.plugin,
|
|
90
|
+
action: params.action,
|
|
91
|
+
...(params.payload !== undefined ? { payload: params.payload } : {}),
|
|
92
|
+
});
|
|
93
|
+
if (!result.success) {
|
|
94
|
+
return {
|
|
95
|
+
success: false,
|
|
96
|
+
error: result.error || result.message || "plugin action failed",
|
|
97
|
+
};
|
|
98
|
+
}
|
|
99
|
+
return {
|
|
100
|
+
success: true,
|
|
101
|
+
...(result.data !== undefined ? { data: result.data } : {}),
|
|
102
|
+
};
|
|
103
|
+
}
|
|
104
|
+
}
|
|
13
105
|
//# sourceMappingURL=AgentContext.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AgentContext.js","sourceRoot":"","sources":["../../../../src/types/runtime/agent/AgentContext.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"AgentContext.js","sourceRoot":"","sources":["../../../../src/types/runtime/agent/AgentContext.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AA2PH;;;;;;;GAOG;AACH,MAAM,OAAO,YAAY;IACvB,gBAAgB;IACP,GAAG,CAAS;IACrB,eAAe;IACN,QAAQ,CAAS;IAC1B,aAAa;IACJ,MAAM,CAAS;IACxB,kBAAkB;IACT,MAAM,CAAiB;IAChC,oBAAoB;IACX,GAAG,CAAyB;IACrC,yBAAyB;IAChB,OAAO,CAAW;IAC3B,mBAAmB;IACV,KAAK,CAAmB;IACjC,8BAA8B;IACrB,YAAY,CAA2B;IAChD,0BAA0B;IACjB,eAAe,CAA0B;IAClD,oBAAoB;IACX,OAAO,CAAwB;IACxC,mBAAmB;IACV,OAAO,CAAe;IAC/B,8BAA8B;IACrB,MAAM,CAAmB;IAElC,YAAY,OAA4B;QACtC,IAAI,CAAC,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC;QACvB,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC;QACjC,IAAI,CAAC,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;QAC7B,IAAI,CAAC,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;QAC7B,IAAI,CAAC,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC;QACvB,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC;QAC/B,IAAI,CAAC,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC;QAC3B,IAAI,CAAC,YAAY,GAAG,OAAO,CAAC,YAAY,CAAC;QACzC,IAAI,CAAC,eAAe,GAAG,OAAO,CAAC,eAAe,CAAC;QAC/C,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC;QAC/B,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC;QAC/B,IAAI,CAAC,MAAM,GAAG;YACZ,MAAM,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,IAAI,CAAC,oBAAoB,CAAC,MAAM,CAAC;SACtD,CAAC;IACJ,CAAC;IAED;;;;;;OAMG;IACH,UAAU,CAAC,SAAiB;QAC1B,OAAO,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;IACrC,CAAC;IAED;;OAEG;IACH,uBAAuB;QACrB,OAAO,IAAI,CAAC,OAAO,CAAC,uBAAuB,EAAE,CAAC;IAChD,CAAC;IAED;;OAEG;IACH,wBAAwB;QACtB,OAAO,IAAI,CAAC,OAAO,CAAC,wBAAwB,EAAE,CAAC;IACjD,CAAC;IAED;;;;;;OAMG;IACK,KAAK,CAAC,oBAAoB,CAChC,MAA0B;QAE1B,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC;YAC1C,MAAM,EAAE,MAAM,CAAC,MAAM;YACrB,MAAM,EAAE,MAAM,CAAC,MAAM;YACrB,GAAG,CAAC,MAAM,CAAC,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SACrE,CAAC,CAAC;QACH,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;YACpB,OAAO;gBACL,OAAO,EAAE,KAAK;gBACd,KAAK,EAAE,MAAM,CAAC,KAAK,IAAI,MAAM,CAAC,OAAO,IAAI,sBAAsB;aAChE,CAAC;QACJ,CAAC;QACD,OAAO;YACL,OAAO,EAAE,IAAI;YACb,GAAG,CAAC,MAAM,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SAC5D,CAAC;IACJ,CAAC;CACF"}
|
|
@@ -23,7 +23,7 @@ export interface PlatformAgentOption {
|
|
|
23
23
|
*/
|
|
24
24
|
projectRoot: string;
|
|
25
25
|
/**
|
|
26
|
-
* 当前
|
|
26
|
+
* 当前 downcity 托管的 Agent 进程是否存活。
|
|
27
27
|
*/
|
|
28
28
|
running: boolean;
|
|
29
29
|
/**
|
|
@@ -51,11 +51,11 @@ export interface PlatformAgentOption {
|
|
|
51
51
|
*/
|
|
52
52
|
stoppedAt?: string;
|
|
53
53
|
/**
|
|
54
|
-
* 当前读取到的
|
|
54
|
+
* 当前读取到的 downcity 托管进程 pid(仅 running=true 时有值)。
|
|
55
55
|
*/
|
|
56
56
|
daemonPid?: number;
|
|
57
57
|
/**
|
|
58
|
-
*
|
|
58
|
+
* downcity 托管进程日志路径(用于排障展示)。
|
|
59
59
|
*/
|
|
60
60
|
logPath?: string;
|
|
61
61
|
/**
|
|
@@ -141,7 +141,7 @@ export interface PlatformAgentDirectoryInspection {
|
|
|
141
141
|
/** 该目录是否已出现在 managed agent registry 中。 */
|
|
142
142
|
knownAgent: boolean;
|
|
143
143
|
/**
|
|
144
|
-
* 若已登记,当前
|
|
144
|
+
* 若已登记,当前 downcity 托管进程是否运行中。
|
|
145
145
|
*/
|
|
146
146
|
running: boolean;
|
|
147
147
|
/**
|
|
@@ -297,7 +297,7 @@ export interface ManagedAgentRegistryEntry {
|
|
|
297
297
|
*/
|
|
298
298
|
projectRoot: string;
|
|
299
299
|
/**
|
|
300
|
-
* registry 最近一次记录的
|
|
300
|
+
* registry 最近一次记录的 downcity 托管进程 pid。
|
|
301
301
|
*/
|
|
302
302
|
pid: number;
|
|
303
303
|
/**
|
|
@@ -335,7 +335,7 @@ export interface ManagedAgentRegistryV1 {
|
|
|
335
335
|
agents: ManagedAgentRegistryEntry[];
|
|
336
336
|
}
|
|
337
337
|
/**
|
|
338
|
-
* `
|
|
338
|
+
* `downcity agent list --running` 输出可复用的受管 agent 运行态视图。
|
|
339
339
|
*/
|
|
340
340
|
export interface ManagedAgentProcessView {
|
|
341
341
|
/**
|
|
@@ -347,7 +347,7 @@ export interface ManagedAgentProcessView {
|
|
|
347
347
|
*/
|
|
348
348
|
registeredPid: number;
|
|
349
349
|
/**
|
|
350
|
-
* 当前实际存活的
|
|
350
|
+
* 当前实际存活的 downcity 托管进程 pid。
|
|
351
351
|
*/
|
|
352
352
|
daemonPid: number;
|
|
353
353
|
/**
|
|
@@ -363,7 +363,7 @@ export interface ManagedAgentProcessView {
|
|
|
363
363
|
*/
|
|
364
364
|
updatedAt: string;
|
|
365
365
|
/**
|
|
366
|
-
*
|
|
366
|
+
* downcity 托管进程日志文件路径。
|
|
367
367
|
*/
|
|
368
368
|
logPath: string;
|
|
369
369
|
}
|
|
@@ -96,11 +96,11 @@ export interface PlatformAgentShipPluginsConfig {
|
|
|
96
96
|
*/
|
|
97
97
|
export interface PlatformAgentShipStartConfig {
|
|
98
98
|
/**
|
|
99
|
-
*
|
|
99
|
+
* downcity Agent HTTP gateway host。
|
|
100
100
|
*/
|
|
101
101
|
host?: unknown;
|
|
102
102
|
/**
|
|
103
|
-
*
|
|
103
|
+
* downcity Agent HTTP gateway port。
|
|
104
104
|
*/
|
|
105
105
|
port?: unknown;
|
|
106
106
|
}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Agent Session stop 类型定义。
|
|
3
|
+
*
|
|
4
|
+
* 关键点(中文)
|
|
5
|
+
* - `session.stop()` 用于停止当前正在执行的 turn。
|
|
6
|
+
* - 尚未被当前 turn 吸收的排队 prompt 会被取消,不会自动开启下一轮。
|
|
7
|
+
*/
|
|
8
|
+
/**
|
|
9
|
+
* Session stop 的最终结果。
|
|
10
|
+
*/
|
|
11
|
+
export interface AgentSessionStopResult {
|
|
12
|
+
/**
|
|
13
|
+
* 本次调用是否实际停止了活跃 turn 或取消了排队 prompt。
|
|
14
|
+
*/
|
|
15
|
+
stopped: boolean;
|
|
16
|
+
/**
|
|
17
|
+
* 被停止的当前 turn 标识。
|
|
18
|
+
*
|
|
19
|
+
* 说明(中文)
|
|
20
|
+
* - 当前没有活跃 turn 时不会返回该字段。
|
|
21
|
+
* - 如果只是清空尚未启动的队列,也不会返回该字段。
|
|
22
|
+
*/
|
|
23
|
+
turnId?: string;
|
|
24
|
+
/**
|
|
25
|
+
* 本次 stop 取消的未绑定 prompt 数量。
|
|
26
|
+
*
|
|
27
|
+
* 说明(中文)
|
|
28
|
+
* - 已经被当前 turn 吸收的 prompt 不计入这里,它们会随当前 turn 一起结束。
|
|
29
|
+
*/
|
|
30
|
+
cancelledQueuedPrompts: number;
|
|
31
|
+
/**
|
|
32
|
+
* 本次 stop 的归因。
|
|
33
|
+
*/
|
|
34
|
+
reason: "stopped" | "idle";
|
|
35
|
+
}
|
|
36
|
+
//# sourceMappingURL=AgentSessionStop.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AgentSessionStop.d.ts","sourceRoot":"","sources":["../../../src/types/sdk/AgentSessionStop.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH;;GAEG;AACH,MAAM,WAAW,sBAAsB;IACrC;;OAEG;IACH,OAAO,EAAE,OAAO,CAAC;IAEjB;;;;;;OAMG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC;IAEhB;;;;;OAKG;IACH,sBAAsB,EAAE,MAAM,CAAC;IAE/B;;OAEG;IACH,MAAM,EAAE,SAAS,GAAG,MAAM,CAAC;CAC5B"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AgentSessionStop.js","sourceRoot":"","sources":["../../../src/types/sdk/AgentSessionStop.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@downcity/agent",
|
|
3
|
-
"version": "1.1.
|
|
3
|
+
"version": "1.1.148",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"description": "Downcity Agent 运行时 — 单 Agent 执行壳与本机 RPC 能力",
|
|
6
6
|
"main": "./bin/index.js",
|
|
@@ -17,8 +17,8 @@
|
|
|
17
17
|
},
|
|
18
18
|
"dependencies": {
|
|
19
19
|
"@ai-sdk/openai-compatible": "^2.0.48",
|
|
20
|
-
"@downcity/shell": "^0.1.
|
|
21
|
-
"@downcity/type": "0.1.
|
|
20
|
+
"@downcity/shell": "^0.1.28",
|
|
21
|
+
"@downcity/type": "0.1.62",
|
|
22
22
|
"@larksuiteoapi/node-sdk": "^1.66.0",
|
|
23
23
|
"ai": "^6.0.193",
|
|
24
24
|
"commander": "^15.0.0",
|
|
@@ -230,7 +230,7 @@ test("CityModel uses direct LanguageModel path and sends tool result back", asyn
|
|
|
230
230
|
const city = new City({
|
|
231
231
|
role: "user",
|
|
232
232
|
city_url: `http://127.0.0.1:${String(address.port)}`,
|
|
233
|
-
|
|
233
|
+
city_id: "city_demo",
|
|
234
234
|
user_token: "ub_test",
|
|
235
235
|
});
|
|
236
236
|
const catalog = await city.ai.listModels();
|
|
@@ -266,7 +266,7 @@ test("CityModel uses direct LanguageModel path and sends tool result back", asyn
|
|
|
266
266
|
assert.equal(tool_executed, true);
|
|
267
267
|
assert.equal(stream_requests, 0);
|
|
268
268
|
assert.equal(agent_requests.length, 2);
|
|
269
|
-
assert.equal(requests.every((request) => request?.
|
|
269
|
+
assert.equal(requests.every((request) => request?.city_id === "city_demo"), true);
|
|
270
270
|
assert.equal(agent_requests[0]?.model, "mock-model");
|
|
271
271
|
|
|
272
272
|
const second_request_messages = Array.isArray(agent_requests[1]?.messages)
|
|
@@ -98,6 +98,7 @@ test("SessionPromptRuntime merges queued prompts at the next step boundary", asy
|
|
|
98
98
|
assistantMessage: createAssistantMessage("done", 1),
|
|
99
99
|
};
|
|
100
100
|
},
|
|
101
|
+
stopTurn: () => false,
|
|
101
102
|
});
|
|
102
103
|
|
|
103
104
|
const firstTurn = await runtime.prompt({ query: "first" });
|
|
@@ -159,6 +160,7 @@ test("SessionPromptRuntime moves unmerged prompts into the next turn", async ()
|
|
|
159
160
|
),
|
|
160
161
|
};
|
|
161
162
|
},
|
|
163
|
+
stopTurn: () => false,
|
|
162
164
|
});
|
|
163
165
|
|
|
164
166
|
const firstTurn = await runtime.prompt({ query: "first" });
|
|
@@ -185,3 +187,60 @@ test("SessionPromptRuntime moves unmerged prompts into the next turn", async ()
|
|
|
185
187
|
["turn-start", "turn-finish", "turn-start", "turn-finish"],
|
|
186
188
|
);
|
|
187
189
|
});
|
|
190
|
+
|
|
191
|
+
test("SessionPromptRuntime stops current turn and cancels unmerged queued prompts", async () => {
|
|
192
|
+
const events = [];
|
|
193
|
+
const executionFinished = createDeferred();
|
|
194
|
+
let stopRequested = false;
|
|
195
|
+
|
|
196
|
+
const runtime = new SessionPromptRuntime({
|
|
197
|
+
sessionId: "test",
|
|
198
|
+
publish: (event) => {
|
|
199
|
+
events.push(event);
|
|
200
|
+
},
|
|
201
|
+
createAndPersistUserMessage: async (input) => {
|
|
202
|
+
return createUserMessage(input.query, events.length + 1);
|
|
203
|
+
},
|
|
204
|
+
executeTurn: async (input) => {
|
|
205
|
+
await new Promise((resolve) => {
|
|
206
|
+
input.abortSignal.addEventListener("abort", resolve, { once: true });
|
|
207
|
+
});
|
|
208
|
+
await executionFinished.promise;
|
|
209
|
+
return {
|
|
210
|
+
text: "should-not-succeed",
|
|
211
|
+
success: true,
|
|
212
|
+
assistantMessage: createAssistantMessage("should-not-succeed", 1),
|
|
213
|
+
};
|
|
214
|
+
},
|
|
215
|
+
stopTurn: () => {
|
|
216
|
+
stopRequested = true;
|
|
217
|
+
executionFinished.resolve();
|
|
218
|
+
return true;
|
|
219
|
+
},
|
|
220
|
+
});
|
|
221
|
+
|
|
222
|
+
const firstTurn = await runtime.prompt({ query: "first" });
|
|
223
|
+
const secondTurnPromise = runtime.prompt({ query: "second" });
|
|
224
|
+
await waitUntil(() => runtime.isActive());
|
|
225
|
+
|
|
226
|
+
const stopResult = runtime.stop();
|
|
227
|
+
const secondTurn = await secondTurnPromise;
|
|
228
|
+
const firstResult = await firstTurn.finished;
|
|
229
|
+
const secondResult = await secondTurn.finished;
|
|
230
|
+
|
|
231
|
+
assert.equal(stopRequested, true);
|
|
232
|
+
assert.equal(stopResult.stopped, true);
|
|
233
|
+
assert.equal(stopResult.turnId, firstTurn.id);
|
|
234
|
+
assert.equal(stopResult.cancelledQueuedPrompts, 1);
|
|
235
|
+
assert.equal(firstResult.success, false);
|
|
236
|
+
assert.equal(firstResult.error, "Turn stopped");
|
|
237
|
+
assert.equal(secondResult.success, false);
|
|
238
|
+
assert.equal(
|
|
239
|
+
secondResult.error,
|
|
240
|
+
"Prompt cancelled because session was stopped",
|
|
241
|
+
);
|
|
242
|
+
assert.deepEqual(
|
|
243
|
+
events.map((event) => event.type),
|
|
244
|
+
["turn-start", "turn-start", "turn-finish", "turn-finish"],
|
|
245
|
+
);
|
|
246
|
+
});
|
package/src/agent/local/Agent.ts
CHANGED
|
@@ -9,20 +9,12 @@
|
|
|
9
9
|
|
|
10
10
|
import type { Tool } from "ai";
|
|
11
11
|
import type { AgentContext } from "@/types/runtime/agent/AgentContext.js";
|
|
12
|
-
import type { AgentRuntime } from "@/types/runtime/agent/AgentRuntime.js";
|
|
13
12
|
import type { DowncityConfig } from "@/types/config/DowncityConfig.js";
|
|
14
13
|
import type { AgentPlugins } from "@/plugin/types/Plugin.js";
|
|
15
14
|
import type {
|
|
16
|
-
AgentCreateSessionInput,
|
|
17
|
-
AgentListSessionsInput,
|
|
18
15
|
AgentModel,
|
|
19
16
|
AgentOptions,
|
|
20
|
-
AgentSession,
|
|
21
17
|
AgentSessionCollection,
|
|
22
|
-
AgentSessionSummaryPage,
|
|
23
|
-
AgentStartOptions,
|
|
24
|
-
AgentStartResult,
|
|
25
|
-
AgentStopResult,
|
|
26
18
|
} from "@/types/agent/AgentTypes.js";
|
|
27
19
|
import type {
|
|
28
20
|
ShellApprovalMode,
|
|
@@ -41,7 +33,7 @@ import {
|
|
|
41
33
|
type AgentAssemblyResult,
|
|
42
34
|
} from "@/agent/local/services/AgentAssemblyService.js";
|
|
43
35
|
import { AgentSessionManager } from "@/agent/local/services/AgentSessionManager.js";
|
|
44
|
-
import {
|
|
36
|
+
import { AgentBackgroundService } from "@/agent/local/services/AgentBackgroundService.js";
|
|
45
37
|
|
|
46
38
|
/**
|
|
47
39
|
* SDK 本地 Agent。
|
|
@@ -53,7 +45,6 @@ export class Agent {
|
|
|
53
45
|
readonly plugins: AgentPlugins;
|
|
54
46
|
|
|
55
47
|
private readonly logger: Logger;
|
|
56
|
-
private readonly runtime: AgentRuntime;
|
|
57
48
|
private readonly agentContext: AgentContext;
|
|
58
49
|
private readonly pluginRegistry: PluginRegistry;
|
|
59
50
|
private readonly config: DowncityConfig;
|
|
@@ -61,7 +52,7 @@ export class Agent {
|
|
|
61
52
|
private readonly defaultModel?: AgentModel;
|
|
62
53
|
private readonly SessionClass: AgentOptions["Session"];
|
|
63
54
|
private readonly sessionManager: AgentSessionManager;
|
|
64
|
-
private readonly
|
|
55
|
+
private readonly backgroundService: AgentBackgroundService;
|
|
65
56
|
private readonly shell?: AgentOptions["shell"];
|
|
66
57
|
|
|
67
58
|
private instruction: string[];
|
|
@@ -92,7 +83,6 @@ export class Agent {
|
|
|
92
83
|
this.tools = assembly.tools;
|
|
93
84
|
this.plugins = assembly.plugins;
|
|
94
85
|
this.logger = assembly.logger;
|
|
95
|
-
this.runtime = assembly.runtime;
|
|
96
86
|
this.agentContext = assembly.agent_context;
|
|
97
87
|
this.pluginRegistry = assembly.plugin_registry;
|
|
98
88
|
this.config = assembly.config;
|
|
@@ -102,50 +92,34 @@ export class Agent {
|
|
|
102
92
|
|
|
103
93
|
this.sessionManager = this.create_session_manager(assembly);
|
|
104
94
|
session_manager_ref = this.sessionManager;
|
|
105
|
-
|
|
95
|
+
// 关键点(中文):构造完成即触发后台能力启动;调用方可 `await agent.ready()` 等待。
|
|
96
|
+
this.backgroundService = new AgentBackgroundService({
|
|
106
97
|
logger: this.logger,
|
|
107
98
|
agent_context: this.agentContext,
|
|
108
|
-
session_collection: this.sessionManager.get_session_collection(),
|
|
109
|
-
get_runtime: () => this.runtime,
|
|
110
99
|
get_shell: () => this.shell,
|
|
111
100
|
});
|
|
112
101
|
}
|
|
113
102
|
|
|
114
103
|
/**
|
|
115
|
-
*
|
|
104
|
+
* 等待 Agent 后台能力启动完成。
|
|
105
|
+
*
|
|
106
|
+
* 关键点(中文)
|
|
107
|
+
* - Agent 构造完成即开始启动 plugin lifecycle 与 ActionSchedule。
|
|
108
|
+
* - 调用方在需要确认后台能力就绪时使用,例如启动后立刻读取 plugin 状态。
|
|
116
109
|
*/
|
|
117
|
-
async
|
|
118
|
-
|
|
110
|
+
async ready(): Promise<void> {
|
|
111
|
+
await this.backgroundService.ready();
|
|
119
112
|
}
|
|
120
113
|
|
|
121
114
|
/**
|
|
122
|
-
*
|
|
115
|
+
* 释放当前 Agent 的后台能力。
|
|
116
|
+
*
|
|
117
|
+
* 关键点(中文)
|
|
118
|
+
* - 关闭 plugin lifecycle、ActionSchedule、shell 等后台资源。
|
|
119
|
+
* - 不负责任何 transport(RPC / HTTP);transport 由 `@downcity/server` 自行管理。
|
|
123
120
|
*/
|
|
124
|
-
async
|
|
125
|
-
|
|
126
|
-
}
|
|
127
|
-
|
|
128
|
-
/**
|
|
129
|
-
* 列出当前 agent 的 session 摘要页。
|
|
130
|
-
*/
|
|
131
|
-
async listSessions(
|
|
132
|
-
input?: AgentListSessionsInput,
|
|
133
|
-
): Promise<AgentSessionSummaryPage> {
|
|
134
|
-
return await this.sessionManager.list_sessions(input);
|
|
135
|
-
}
|
|
136
|
-
|
|
137
|
-
/**
|
|
138
|
-
* 启动当前 agent 实例的长期运行能力。
|
|
139
|
-
*/
|
|
140
|
-
async start(options?: AgentStartOptions): Promise<AgentStartResult> {
|
|
141
|
-
return await this.lifecycleService.start(options);
|
|
142
|
-
}
|
|
143
|
-
|
|
144
|
-
/**
|
|
145
|
-
* 停止当前 agent 实例的长期运行能力。
|
|
146
|
-
*/
|
|
147
|
-
async stop(): Promise<AgentStopResult> {
|
|
148
|
-
return await this.lifecycleService.stop();
|
|
121
|
+
async dispose(): Promise<void> {
|
|
122
|
+
await this.backgroundService.dispose();
|
|
149
123
|
}
|
|
150
124
|
|
|
151
125
|
/**
|
|
@@ -204,6 +178,51 @@ export class Agent {
|
|
|
204
178
|
this.instruction = normalizeInstructionInput(input);
|
|
205
179
|
}
|
|
206
180
|
|
|
181
|
+
/**
|
|
182
|
+
* 返回当前 agent env 的浅拷贝快照。
|
|
183
|
+
*
|
|
184
|
+
* 关键点(中文)
|
|
185
|
+
* - 返回的是拷贝,调用方修改它不会影响 agent 真实状态。
|
|
186
|
+
* - 想改 env 请使用 `setEnv` / `patchEnv`。
|
|
187
|
+
*/
|
|
188
|
+
getEnv(): Record<string, string> {
|
|
189
|
+
return { ...this.env };
|
|
190
|
+
}
|
|
191
|
+
|
|
192
|
+
/**
|
|
193
|
+
* 整体覆盖 agent env。
|
|
194
|
+
*
|
|
195
|
+
* 关键点(中文)
|
|
196
|
+
* - 直接清空当前共享 env 对象,再写入新值,保证 plugin / runtime / shell 看到的是同一引用。
|
|
197
|
+
* - 仅写入字符串值,`null` / `undefined` 表示删除该 key。
|
|
198
|
+
*/
|
|
199
|
+
setEnv(next: Record<string, string | null | undefined>): void {
|
|
200
|
+
for (const key of Object.keys(this.env)) {
|
|
201
|
+
delete this.env[key];
|
|
202
|
+
}
|
|
203
|
+
this.patchEnv(next);
|
|
204
|
+
}
|
|
205
|
+
|
|
206
|
+
/**
|
|
207
|
+
* 增量合并 agent env。
|
|
208
|
+
*
|
|
209
|
+
* 关键点(中文)
|
|
210
|
+
* - `null` / `undefined` 表示删除该 key;其他值会强制转字符串后写入。
|
|
211
|
+
* - 修改原地生效,所有持有 `context.env` 引用的模块立即可见。
|
|
212
|
+
*/
|
|
213
|
+
patchEnv(patch: Record<string, string | null | undefined>): void {
|
|
214
|
+
if (!patch || typeof patch !== "object") return;
|
|
215
|
+
for (const [raw_key, raw_value] of Object.entries(patch)) {
|
|
216
|
+
const key = String(raw_key || "").trim();
|
|
217
|
+
if (!key) continue;
|
|
218
|
+
if (raw_value === null || raw_value === undefined) {
|
|
219
|
+
delete this.env[key];
|
|
220
|
+
continue;
|
|
221
|
+
}
|
|
222
|
+
this.env[key] = String(raw_value);
|
|
223
|
+
}
|
|
224
|
+
}
|
|
225
|
+
|
|
207
226
|
/**
|
|
208
227
|
* 返回当前项目根目录解析后的配置快照。
|
|
209
228
|
*/
|
|
@@ -218,13 +237,6 @@ export class Agent {
|
|
|
218
237
|
return this.logger;
|
|
219
238
|
}
|
|
220
239
|
|
|
221
|
-
/**
|
|
222
|
-
* 返回当前 agent runtime。
|
|
223
|
-
*/
|
|
224
|
-
getRuntime(): AgentRuntime {
|
|
225
|
-
return this.runtime;
|
|
226
|
-
}
|
|
227
|
-
|
|
228
240
|
/**
|
|
229
241
|
* 返回当前 agent context。
|
|
230
242
|
*/
|
|
@@ -233,9 +245,9 @@ export class Agent {
|
|
|
233
245
|
}
|
|
234
246
|
|
|
235
247
|
/**
|
|
236
|
-
* 返回当前 session collection
|
|
248
|
+
* 返回当前 session collection 入口。
|
|
237
249
|
*/
|
|
238
|
-
|
|
250
|
+
session_collection(): AgentSessionCollection {
|
|
239
251
|
return this.sessionManager.get_session_collection();
|
|
240
252
|
}
|
|
241
253
|
|
|
@@ -254,8 +266,7 @@ export class Agent {
|
|
|
254
266
|
project_root: this.path || assembly.path,
|
|
255
267
|
tools: this.tools || assembly.tools,
|
|
256
268
|
logger: this.logger || assembly.logger,
|
|
257
|
-
|
|
258
|
-
get_agent_context: () => this.agentContext || assembly.agent_context,
|
|
269
|
+
get_agent_context: () => this.agentContext ?? assembly.agent_context,
|
|
259
270
|
get_instruction: () => this.instruction,
|
|
260
271
|
plugin_instances: assembly.plugin_instances,
|
|
261
272
|
default_model: this.defaultModel,
|
|
@@ -30,14 +30,14 @@ function ensureContextFiles(projectRoot: string): void {
|
|
|
30
30
|
// Check if initialized(启动入口一次性确认工程根目录与关键文件)
|
|
31
31
|
if (!fs.existsSync(getProfileMdPath(projectRoot))) {
|
|
32
32
|
console.error(
|
|
33
|
-
'❌ Project not initialized. Please run "
|
|
33
|
+
'❌ Project not initialized. Please run "downcity agent create" first',
|
|
34
34
|
);
|
|
35
35
|
process.exit(1);
|
|
36
36
|
}
|
|
37
37
|
|
|
38
38
|
if (!fs.existsSync(getDowncityJsonPath(projectRoot))) {
|
|
39
39
|
console.error(
|
|
40
|
-
'❌ downcity.json does not exist. Please run "
|
|
40
|
+
'❌ downcity.json does not exist. Please run "downcity agent create" first',
|
|
41
41
|
);
|
|
42
42
|
process.exit(1);
|
|
43
43
|
}
|