@downcity/plugins 1.0.64 → 1.0.71

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (75) hide show
  1. package/bin/BuiltinPlugins.d.ts +0 -5
  2. package/bin/BuiltinPlugins.d.ts.map +1 -1
  3. package/bin/BuiltinPlugins.js +1 -5
  4. package/bin/BuiltinPlugins.js.map +1 -1
  5. package/bin/index.d.ts +0 -2
  6. package/bin/index.d.ts.map +1 -1
  7. package/bin/index.js +0 -1
  8. package/bin/index.js.map +1 -1
  9. package/bin/task/runtime/TaskRunnerRound.d.ts.map +1 -1
  10. package/bin/task/runtime/TaskRunnerRound.js +7 -2
  11. package/bin/task/runtime/TaskRunnerRound.js.map +1 -1
  12. package/bin/task/runtime/TaskRunnerSession.d.ts.map +1 -1
  13. package/bin/task/runtime/TaskRunnerSession.js +10 -3
  14. package/bin/task/runtime/TaskRunnerSession.js.map +1 -1
  15. package/package.json +4 -3
  16. package/scripts/unrestricted-sandbox-approval.test.mjs +184 -5
  17. package/src/BuiltinPlugins.ts +0 -9
  18. package/src/index.ts +0 -5
  19. package/src/task/runtime/TaskRunnerRound.ts +15 -5
  20. package/src/task/runtime/TaskRunnerSession.ts +11 -4
  21. package/bin/shell/Index.d.ts +0 -9
  22. package/bin/shell/Index.d.ts.map +0 -1
  23. package/bin/shell/Index.js +0 -9
  24. package/bin/shell/Index.js.map +0 -1
  25. package/bin/shell/ShellPlugin.d.ts +0 -65
  26. package/bin/shell/ShellPlugin.d.ts.map +0 -1
  27. package/bin/shell/ShellPlugin.js +0 -175
  28. package/bin/shell/ShellPlugin.js.map +0 -1
  29. package/bin/shell/ShellRuntimeTypes.d.ts +0 -145
  30. package/bin/shell/ShellRuntimeTypes.d.ts.map +0 -1
  31. package/bin/shell/ShellRuntimeTypes.js +0 -10
  32. package/bin/shell/ShellRuntimeTypes.js.map +0 -1
  33. package/bin/shell/runtime/Paths.d.ts +0 -12
  34. package/bin/shell/runtime/Paths.d.ts.map +0 -1
  35. package/bin/shell/runtime/Paths.js +0 -21
  36. package/bin/shell/runtime/Paths.js.map +0 -1
  37. package/bin/shell/runtime/ShellActionResponse.d.ts +0 -52
  38. package/bin/shell/runtime/ShellActionResponse.d.ts.map +0 -1
  39. package/bin/shell/runtime/ShellActionResponse.js +0 -73
  40. package/bin/shell/runtime/ShellActionResponse.js.map +0 -1
  41. package/bin/shell/runtime/ShellActionRuntime.d.ts +0 -70
  42. package/bin/shell/runtime/ShellActionRuntime.d.ts.map +0 -1
  43. package/bin/shell/runtime/ShellActionRuntime.js +0 -587
  44. package/bin/shell/runtime/ShellActionRuntime.js.map +0 -1
  45. package/bin/shell/runtime/ShellActionRuntimeSupport.d.ts +0 -88
  46. package/bin/shell/runtime/ShellActionRuntimeSupport.d.ts.map +0 -1
  47. package/bin/shell/runtime/ShellActionRuntimeSupport.js +0 -353
  48. package/bin/shell/runtime/ShellActionRuntimeSupport.js.map +0 -1
  49. package/bin/shell/runtime/ShellApprovalRuntime.d.ts +0 -57
  50. package/bin/shell/runtime/ShellApprovalRuntime.d.ts.map +0 -1
  51. package/bin/shell/runtime/ShellApprovalRuntime.js +0 -182
  52. package/bin/shell/runtime/ShellApprovalRuntime.js.map +0 -1
  53. package/bin/shell/runtime/ShellProcessEvents.d.ts +0 -22
  54. package/bin/shell/runtime/ShellProcessEvents.d.ts.map +0 -1
  55. package/bin/shell/runtime/ShellProcessEvents.js +0 -41
  56. package/bin/shell/runtime/ShellProcessEvents.js.map +0 -1
  57. package/bin/shell/runtime/ShellRuntimeEnvironment.d.ts +0 -21
  58. package/bin/shell/runtime/ShellRuntimeEnvironment.d.ts.map +0 -1
  59. package/bin/shell/runtime/ShellRuntimeEnvironment.js +0 -70
  60. package/bin/shell/runtime/ShellRuntimeEnvironment.js.map +0 -1
  61. package/bin/shell/types/ShellPluginOptions.d.ts +0 -103
  62. package/bin/shell/types/ShellPluginOptions.d.ts.map +0 -1
  63. package/bin/shell/types/ShellPluginOptions.js +0 -10
  64. package/bin/shell/types/ShellPluginOptions.js.map +0 -1
  65. package/src/shell/Index.ts +0 -9
  66. package/src/shell/ShellPlugin.ts +0 -239
  67. package/src/shell/ShellRuntimeTypes.ts +0 -152
  68. package/src/shell/runtime/Paths.ts +0 -28
  69. package/src/shell/runtime/ShellActionResponse.ts +0 -135
  70. package/src/shell/runtime/ShellActionRuntime.ts +0 -728
  71. package/src/shell/runtime/ShellActionRuntimeSupport.ts +0 -477
  72. package/src/shell/runtime/ShellApprovalRuntime.ts +0 -236
  73. package/src/shell/runtime/ShellProcessEvents.ts +0 -65
  74. package/src/shell/runtime/ShellRuntimeEnvironment.ts +0 -71
  75. package/src/shell/types/ShellPluginOptions.ts +0 -122
@@ -9,7 +9,7 @@
9
9
  */
10
10
 
11
11
  import path from "node:path";
12
- import type { LanguageModel } from "ai";
12
+ import type { LanguageModel, Tool } from "ai";
13
13
  import type { AgentContext } from "@downcity/agent/internal/types/runtime/agent/AgentContext.js";
14
14
  import { Executor } from "@downcity/agent/internal/executor/Executor.js";
15
15
  import type { SessionRunResult } from "@downcity/agent/internal/executor/types/SessionRun.js";
@@ -20,7 +20,7 @@ import { JsonlSessionHistoryStore } from "@downcity/agent/internal/executor/stor
20
20
  import { JsonlSessionCompactionComposer } from "@downcity/agent/internal/executor/composer/compaction/jsonl/JsonlSessionCompactionComposer.js";
21
21
  import { LocalSessionContextComposer } from "@downcity/agent/internal/executor/composer/context/LocalSessionContextComposer.js";
22
22
  import { DefaultSessionSystemComposer } from "@downcity/agent/internal/executor/composer/system/default/DefaultSessionSystemComposer.js";
23
- import { shellTools } from "@downcity/agent/internal/executor/tools/shell/ShellToolDefinition.js";
23
+ import { Shell } from "@downcity/shell";
24
24
  import type { SessionExecutor } from "@downcity/agent/internal/executor/types/SessionExecutor.js";
25
25
 
26
26
  /**
@@ -83,6 +83,13 @@ export function createTaskSessionRuntimePort(params: {
83
83
  const historyStoresBySessionId = new Map<string, JsonlSessionHistoryStore>();
84
84
  const historyComposersBySessionId = new Map<string, JsonlSessionHistoryComposer>();
85
85
  const runtimesBySessionId = new Map<string, SessionExecutor>();
86
+ const shell = new Shell({
87
+ root_path: context.rootPath,
88
+ env: context.env,
89
+ sandbox: context.config.sandbox,
90
+ logger: context.logger,
91
+ });
92
+ const shell_tools = shell.tools as unknown as Record<string, Tool>;
86
93
 
87
94
  const resolveTaskHistoryStore = (sessionId: string): JsonlSessionHistoryStore => {
88
95
  const existing = historyStoresBySessionId.get(sessionId);
@@ -145,7 +152,7 @@ export function createTaskSessionRuntimePort(params: {
145
152
  const historyComposer = resolveTaskHistoryComposer(key);
146
153
  const contextComposer = new LocalSessionContextComposer({
147
154
  sessionId: key,
148
- getTools: () => shellTools,
155
+ getTools: () => shell_tools,
149
156
  });
150
157
  const created = new Executor({
151
158
  sessionId: key,
@@ -156,7 +163,7 @@ export function createTaskSessionRuntimePort(params: {
156
163
  compactionComposer,
157
164
  contextComposer,
158
165
  systemComposer,
159
- getTools: () => shellTools,
166
+ getTools: () => shell_tools,
160
167
  });
161
168
  runtimesBySessionId.set(key, created);
162
169
  return created;
@@ -1,9 +0,0 @@
1
- /**
2
- * Shell Plugin 导出入口。
3
- *
4
- * 关键点(中文)
5
- * - Index 只负责导出类实现。
6
- * - 真正运行时的 per-agent 实例由宿主显式创建并传给 Agent。
7
- */
8
- export { ShellPlugin } from "./ShellPlugin.js";
9
- //# sourceMappingURL=Index.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"Index.d.ts","sourceRoot":"","sources":["../../src/shell/Index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC"}
@@ -1,9 +0,0 @@
1
- /**
2
- * Shell Plugin 导出入口。
3
- *
4
- * 关键点(中文)
5
- * - Index 只负责导出类实现。
6
- * - 真正运行时的 per-agent 实例由宿主显式创建并传给 Agent。
7
- */
8
- export { ShellPlugin } from "./ShellPlugin.js";
9
- //# sourceMappingURL=Index.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"Index.js","sourceRoot":"","sources":["../../src/shell/Index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC"}
@@ -1,65 +0,0 @@
1
- /**
2
- * ShellPlugin:shell plugin 的类实现。
3
- *
4
- * 关键点(中文)
5
- * - shell session map 与 bound runtime 都归属于 plugin 实例。
6
- * - agent 持有 ShellPlugin 实例,从而形成 per-agent shell 状态边界。
7
- * - ShellActionRuntime 只保留纯运行时流程,不再承载模块级单例状态。
8
- */
9
- import { BasePlugin } from "@downcity/agent/internal/plugin/core/BasePlugin.js";
10
- import type { PluginActions } from "@downcity/agent/internal/plugin/types/Plugin.js";
11
- import type { AgentContext } from "@downcity/agent/internal/types/runtime/agent/AgentContext.js";
12
- import type { ShellSessionRuntimeState } from "../shell/ShellRuntimeTypes.js";
13
- import type { ShellPluginOptions } from "../shell/types/ShellPluginOptions.js";
14
- import type { ShellCloseRequest, ShellExecRequest, ShellQueryRequest, ShellReadRequest, ShellStartRequest, ShellWaitRequest, ShellWriteRequest } from "@downcity/agent/internal/executor/tools/shell/types/ShellPlugin.js";
15
- /**
16
- * Shell plugin 类实现。
17
- */
18
- export declare class ShellPlugin extends BasePlugin {
19
- /**
20
- * plugin 名称。
21
- */
22
- readonly name = "shell";
23
- /**
24
- * 当前实例持有的 shell 状态对象。
25
- */
26
- private readonly state;
27
- /**
28
- * 当前实例暴露的 action 定义表。
29
- */
30
- readonly actions: PluginActions;
31
- /**
32
- * 当前实例持有的 in-memory shell sessions。
33
- */
34
- readonly sessions: Map<string, ShellSessionRuntimeState>;
35
- constructor(options?: ShellPluginOptions);
36
- /**
37
- * 启动一个 shell session。
38
- */
39
- start(context: AgentContext, request: ShellStartRequest): Promise<import("@downcity/agent/internal/executor/tools/shell/types/ShellPlugin.js").ShellActionResponse>;
40
- /**
41
- * 查询 shell session 状态。
42
- */
43
- status(context: AgentContext, request: ShellQueryRequest): Promise<import("@downcity/agent/internal/executor/tools/shell/types/ShellPlugin.js").ShellActionResponse>;
44
- /**
45
- * 读取 shell session 输出。
46
- */
47
- read(context: AgentContext, request: ShellReadRequest): Promise<import("@downcity/agent/internal/executor/tools/shell/types/ShellPlugin.js").ShellActionResponse>;
48
- /**
49
- * 向 shell session 写入 stdin。
50
- */
51
- write(context: AgentContext, request: ShellWriteRequest): Promise<import("@downcity/agent/internal/executor/tools/shell/types/ShellPlugin.js").ShellActionResponse>;
52
- /**
53
- * 等待 shell session 状态变化。
54
- */
55
- wait(context: AgentContext, request: ShellWaitRequest): Promise<import("@downcity/agent/internal/executor/tools/shell/types/ShellPlugin.js").ShellActionResponse>;
56
- /**
57
- * 关闭 shell session。
58
- */
59
- close(context: AgentContext, request: ShellCloseRequest): Promise<import("@downcity/agent/internal/executor/tools/shell/types/ShellPlugin.js").ShellActionResponse>;
60
- /**
61
- * 执行一次 one-shot shell command。
62
- */
63
- exec(context: AgentContext, request: ShellExecRequest): Promise<import("@downcity/agent/internal/executor/tools/shell/types/ShellPlugin.js").ShellActionResponse>;
64
- }
65
- //# sourceMappingURL=ShellPlugin.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"ShellPlugin.d.ts","sourceRoot":"","sources":["../../src/shell/ShellPlugin.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,oDAAoD,CAAC;AAChF,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,iDAAiD,CAAC;AACrF,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,8DAA8D,CAAC;AACjG,OAAO,KAAK,EAEV,wBAAwB,EACzB,MAAM,8BAA8B,CAAC;AACtC,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,qCAAqC,CAAC;AAC9E,OAAO,KAAK,EACV,iBAAiB,EACjB,gBAAgB,EAChB,iBAAiB,EACjB,gBAAgB,EAChB,iBAAiB,EACjB,gBAAgB,EAChB,iBAAiB,EAClB,MAAM,oEAAoE,CAAC;AAiB5E;;GAEG;AACH,qBAAa,WAAY,SAAQ,UAAU;IACzC;;OAEG;IACH,QAAQ,CAAC,IAAI,WAAW;IAExB;;OAEG;IACH,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAmB;IAEzC;;OAEG;IACH,QAAQ,CAAC,OAAO,EAAE,aAAa,CAAC;IAEhC;;OAEG;IACH,SAAgB,QAAQ,EAAE,GAAG,CAAC,MAAM,EAAE,wBAAwB,CAAC,CAAC;gBAEpD,OAAO,GAAE,kBAAuB;IAuG5C;;OAEG;IACG,KAAK,CACT,OAAO,EAAE,YAAY,EACrB,OAAO,EAAE,iBAAiB;IAK5B;;OAEG;IACG,MAAM,CACV,OAAO,EAAE,YAAY,EACrB,OAAO,EAAE,iBAAiB;IAK5B;;OAEG;IACG,IAAI,CACR,OAAO,EAAE,YAAY,EACrB,OAAO,EAAE,gBAAgB;IAK3B;;OAEG;IACG,KAAK,CACT,OAAO,EAAE,YAAY,EACrB,OAAO,EAAE,iBAAiB;IAK5B;;OAEG;IACG,IAAI,CACR,OAAO,EAAE,YAAY,EACrB,OAAO,EAAE,gBAAgB;IAK3B;;OAEG;IACG,KAAK,CACT,OAAO,EAAE,YAAY,EACrB,OAAO,EAAE,iBAAiB;IAK5B;;OAEG;IACG,IAAI,CACR,OAAO,EAAE,YAAY,EACrB,OAAO,EAAE,gBAAgB;CAI5B"}
@@ -1,175 +0,0 @@
1
- /**
2
- * ShellPlugin:shell plugin 的类实现。
3
- *
4
- * 关键点(中文)
5
- * - shell session map 与 bound runtime 都归属于 plugin 实例。
6
- * - agent 持有 ShellPlugin 实例,从而形成 per-agent shell 状态边界。
7
- * - ShellActionRuntime 只保留纯运行时流程,不再承载模块级单例状态。
8
- */
9
- import { BasePlugin } from "@downcity/agent/internal/plugin/core/BasePlugin.js";
10
- import { bindShellRuntime, closeAllShellSessions, closeShellSession, createShellPluginState, approveShellApproval, denyShellApproval, execShellCommand, getShellSessionStatus, listShellApprovals, readShellSession, startShellSession, waitShellSession, writeShellSession, } from "./runtime/ShellActionRuntime.js";
11
- /**
12
- * Shell plugin 类实现。
13
- */
14
- export class ShellPlugin extends BasePlugin {
15
- /**
16
- * plugin 名称。
17
- */
18
- name = "shell";
19
- /**
20
- * 当前实例持有的 shell 状态对象。
21
- */
22
- state;
23
- /**
24
- * 当前实例暴露的 action 定义表。
25
- */
26
- actions;
27
- /**
28
- * 当前实例持有的 in-memory shell sessions。
29
- */
30
- sessions;
31
- constructor(options = {}) {
32
- super();
33
- this.state = createShellPluginState(options);
34
- this.sessions = this.state.sessions;
35
- this.actions = {
36
- exec: {
37
- execute: async (params) => ({
38
- success: true,
39
- data: await this.exec(params.context, params.payload),
40
- }),
41
- },
42
- start: {
43
- execute: async (params) => ({
44
- success: true,
45
- data: await this.start(params.context, params.payload),
46
- }),
47
- },
48
- status: {
49
- execute: async (params) => ({
50
- success: true,
51
- data: await this.status(params.context, params.payload),
52
- }),
53
- },
54
- read: {
55
- execute: async (params) => ({
56
- success: true,
57
- data: await this.read(params.context, params.payload),
58
- }),
59
- },
60
- write: {
61
- execute: async (params) => ({
62
- success: true,
63
- data: await this.write(params.context, params.payload),
64
- }),
65
- },
66
- wait: {
67
- execute: async (params) => ({
68
- success: true,
69
- data: await this.wait(params.context, params.payload),
70
- }),
71
- },
72
- close: {
73
- execute: async (params) => ({
74
- success: true,
75
- data: await this.close(params.context, params.payload),
76
- }),
77
- },
78
- approvals: {
79
- execute: async () => ({
80
- success: true,
81
- data: { approvals: listShellApprovals(this.state) },
82
- }),
83
- },
84
- approve: {
85
- execute: async (params) => {
86
- const payload = params.payload;
87
- const approvalId = String(payload?.approvalId || payload?.approval_id || "").trim();
88
- if (!approvalId) {
89
- return { success: false, error: "approvalId is required" };
90
- }
91
- const ok = await approveShellApproval(this.state, params.context, approvalId);
92
- return {
93
- success: ok,
94
- data: { approvalId, approved: ok },
95
- ...(ok ? {} : { error: "approval request not found" }),
96
- };
97
- },
98
- },
99
- deny: {
100
- execute: async (params) => {
101
- const payload = params.payload;
102
- const approvalId = String(payload?.approvalId || payload?.approval_id || "").trim();
103
- if (!approvalId) {
104
- return { success: false, error: "approvalId is required" };
105
- }
106
- const ok = await denyShellApproval(this.state, params.context, approvalId);
107
- return {
108
- success: ok,
109
- data: { approvalId, denied: ok },
110
- ...(ok ? {} : { error: "approval request not found" }),
111
- };
112
- },
113
- },
114
- };
115
- this.lifecycle = {
116
- start: async (context) => {
117
- bindShellRuntime(this.state, context);
118
- },
119
- stop: async () => {
120
- await closeAllShellSessions(this.state, true);
121
- for (const session of this.state.sessions.values()) {
122
- if (session.cleanupTimer) {
123
- clearTimeout(session.cleanupTimer);
124
- }
125
- }
126
- this.state.sessions.clear();
127
- this.state.approvals.clear();
128
- this.state.context = null;
129
- },
130
- };
131
- }
132
- /**
133
- * 启动一个 shell session。
134
- */
135
- async start(context, request) {
136
- return await startShellSession(this.state, context, request);
137
- }
138
- /**
139
- * 查询 shell session 状态。
140
- */
141
- async status(context, request) {
142
- return await getShellSessionStatus(this.state, context, request);
143
- }
144
- /**
145
- * 读取 shell session 输出。
146
- */
147
- async read(context, request) {
148
- return await readShellSession(this.state, context, request);
149
- }
150
- /**
151
- * 向 shell session 写入 stdin。
152
- */
153
- async write(context, request) {
154
- return await writeShellSession(this.state, context, request);
155
- }
156
- /**
157
- * 等待 shell session 状态变化。
158
- */
159
- async wait(context, request) {
160
- return await waitShellSession(this.state, context, request);
161
- }
162
- /**
163
- * 关闭 shell session。
164
- */
165
- async close(context, request) {
166
- return await closeShellSession(this.state, context, request);
167
- }
168
- /**
169
- * 执行一次 one-shot shell command。
170
- */
171
- async exec(context, request) {
172
- return await execShellCommand(this.state, context, request);
173
- }
174
- }
175
- //# sourceMappingURL=ShellPlugin.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"ShellPlugin.js","sourceRoot":"","sources":["../../src/shell/ShellPlugin.ts"],"names":[],"mappings":"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"}
@@ -1,145 +0,0 @@
1
- /**
2
- * ShellRuntime 类型定义。
3
- *
4
- * 关键点(中文)
5
- * - 这些类型描述 shell plugin runtime 的实例级运行态。
6
- * - 状态所有权归属于 `ShellPlugin` 实例,而不是模块级单例。
7
- * - 统一归档到 `src/shell/` 相邻层级,避免继续分散在跨域目录里。
8
- */
9
- import type { ChildProcessWithoutNullStreams } from "node:child_process";
10
- import type { AgentContext } from "@downcity/agent/internal/types/runtime/agent/AgentContext.js";
11
- import type { ShellApprovalStatus, ShellSessionSnapshot } from "@downcity/agent/internal/executor/tools/shell/types/ShellPlugin.js";
12
- import type { ResolvedShellPluginOptions } from "../shell/types/ShellPluginOptions.js";
13
- /**
14
- * unrestricted sandbox 审批运行态。
15
- */
16
- export type ShellApprovalRuntimeState = {
17
- /**
18
- * 当前审批请求 ID。
19
- */
20
- approvalId: string;
21
- /**
22
- * 关联的 shell_id。
23
- */
24
- shellId: string;
25
- /**
26
- * 所属 session/聊天上下文。
27
- */
28
- ownerContextId?: string;
29
- /**
30
- * 关联工具名。
31
- */
32
- toolName: "shell_exec" | "shell_start";
33
- /**
34
- * 申请执行的命令。
35
- */
36
- cmd: string;
37
- /**
38
- * 命令执行目录。
39
- */
40
- cwd: string;
41
- /**
42
- * 申请原因。
43
- */
44
- reason: string;
45
- /**
46
- * 当前审批创建时间。
47
- */
48
- createdAt: number;
49
- /**
50
- * 审批超时定时器。
51
- */
52
- timer: NodeJS.Timeout;
53
- /**
54
- * 兑现审批结果。
55
- */
56
- resolve: (status: ShellApprovalStatus) => void;
57
- };
58
- /**
59
- * 单个 shell wait 调用挂起时注册的 waiter。
60
- */
61
- export type ShellSessionWaiter = {
62
- /**
63
- * 当前等待完成后的唤醒回调。
64
- */
65
- resolve: () => void;
66
- /**
67
- * 当前 waiter 对应的超时定时器。
68
- */
69
- timer: NodeJS.Timeout;
70
- };
71
- /**
72
- * 单个 shell session 的内存运行态。
73
- */
74
- export type ShellSessionRuntimeState = {
75
- /**
76
- * 当前 shell session 的对外快照。
77
- */
78
- snapshot: ShellSessionSnapshot;
79
- /**
80
- * 当前 shell session 对应的子进程句柄。
81
- */
82
- child: ChildProcessWithoutNullStreams;
83
- /**
84
- * 当前已缓存的标准输出与标准错误文本。
85
- */
86
- outputText: string;
87
- /**
88
- * 当前输出持久化文件路径。
89
- */
90
- outputFilePath: string;
91
- /**
92
- * 当前快照持久化文件路径。
93
- */
94
- snapshotFilePath: string;
95
- /**
96
- * 串行化文件写入链,避免并发 append 乱序。
97
- */
98
- writeChain: Promise<void>;
99
- /**
100
- * 终态后的延迟清理定时器。
101
- */
102
- cleanupTimer: NodeJS.Timeout | null;
103
- /**
104
- * 当前挂起等待该 session 状态变化的 waiter 集合。
105
- */
106
- waiters: Set<ShellSessionWaiter>;
107
- /**
108
- * 当前 shell 进入终态后的完成 promise。
109
- *
110
- * 关键点(中文)
111
- * - 供 `shell.exec` 这类 one-shot 路径直接等待进程结束。
112
- * - 这样可以减少对版本轮询的依赖,降低瞬时命令的竞态超时。
113
- */
114
- completionPromise: Promise<void>;
115
- /**
116
- * 当前 shell 进入终态时触发的完成回调。
117
- */
118
- resolveCompletion: () => void;
119
- };
120
- /**
121
- * `ShellPlugin` 实例级状态。
122
- */
123
- export type ShellPluginState = {
124
- /**
125
- * 当前 shell plugin 归一化后的运行参数。
126
- */
127
- options: ResolvedShellPluginOptions;
128
- /**
129
- * 当前实例持有的全部 in-memory shell session。
130
- */
131
- sessions: Map<string, ShellSessionRuntimeState>;
132
- /**
133
- * 当前实例持有的全部 pending unrestricted sandbox 审批。
134
- */
135
- approvals: Map<string, ShellApprovalRuntimeState>;
136
- /**
137
- * 当前实例最近一次启动时绑定的 agent context。
138
- *
139
- * 关键点(中文)
140
- * - 仅用于 shell 自动通知 chat 的回调路径。
141
- * - 这是实例字段,不再是模块级全局变量。
142
- */
143
- context: AgentContext | null;
144
- };
145
- //# sourceMappingURL=ShellRuntimeTypes.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"ShellRuntimeTypes.d.ts","sourceRoot":"","sources":["../../src/shell/ShellRuntimeTypes.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,8BAA8B,EAAE,MAAM,oBAAoB,CAAC;AACzE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,8DAA8D,CAAC;AACjG,OAAO,KAAK,EACV,mBAAmB,EACnB,oBAAoB,EACrB,MAAM,oEAAoE,CAAC;AAC5E,OAAO,KAAK,EAAE,0BAA0B,EAAE,MAAM,qCAAqC,CAAC;AAEtF;;GAEG;AACH,MAAM,MAAM,yBAAyB,GAAG;IACtC;;OAEG;IACH,UAAU,EAAE,MAAM,CAAC;IACnB;;OAEG;IACH,OAAO,EAAE,MAAM,CAAC;IAChB;;OAEG;IACH,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB;;OAEG;IACH,QAAQ,EAAE,YAAY,GAAG,aAAa,CAAC;IACvC;;OAEG;IACH,GAAG,EAAE,MAAM,CAAC;IACZ;;OAEG;IACH,GAAG,EAAE,MAAM,CAAC;IACZ;;OAEG;IACH,MAAM,EAAE,MAAM,CAAC;IACf;;OAEG;IACH,SAAS,EAAE,MAAM,CAAC;IAClB;;OAEG;IACH,KAAK,EAAE,MAAM,CAAC,OAAO,CAAC;IACtB;;OAEG;IACH,OAAO,EAAE,CAAC,MAAM,EAAE,mBAAmB,KAAK,IAAI,CAAC;CAChD,CAAC;AAEF;;GAEG;AACH,MAAM,MAAM,kBAAkB,GAAG;IAC/B;;OAEG;IACH,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB;;OAEG;IACH,KAAK,EAAE,MAAM,CAAC,OAAO,CAAC;CACvB,CAAC;AAEF;;GAEG;AACH,MAAM,MAAM,wBAAwB,GAAG;IACrC;;OAEG;IACH,QAAQ,EAAE,oBAAoB,CAAC;IAC/B;;OAEG;IACH,KAAK,EAAE,8BAA8B,CAAC;IACtC;;OAEG;IACH,UAAU,EAAE,MAAM,CAAC;IACnB;;OAEG;IACH,cAAc,EAAE,MAAM,CAAC;IACvB;;OAEG;IACH,gBAAgB,EAAE,MAAM,CAAC;IACzB;;OAEG;IACH,UAAU,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC;IAC1B;;OAEG;IACH,YAAY,EAAE,MAAM,CAAC,OAAO,GAAG,IAAI,CAAC;IACpC;;OAEG;IACH,OAAO,EAAE,GAAG,CAAC,kBAAkB,CAAC,CAAC;IACjC;;;;;;OAMG;IACH,iBAAiB,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC;IACjC;;OAEG;IACH,iBAAiB,EAAE,MAAM,IAAI,CAAC;CAC/B,CAAC;AAEF;;GAEG;AACH,MAAM,MAAM,gBAAgB,GAAG;IAC7B;;OAEG;IACH,OAAO,EAAE,0BAA0B,CAAC;IACpC;;OAEG;IACH,QAAQ,EAAE,GAAG,CAAC,MAAM,EAAE,wBAAwB,CAAC,CAAC;IAChD;;OAEG;IACH,SAAS,EAAE,GAAG,CAAC,MAAM,EAAE,yBAAyB,CAAC,CAAC;IAClD;;;;;;OAMG;IACH,OAAO,EAAE,YAAY,GAAG,IAAI,CAAC;CAC9B,CAAC"}
@@ -1,10 +0,0 @@
1
- /**
2
- * ShellRuntime 类型定义。
3
- *
4
- * 关键点(中文)
5
- * - 这些类型描述 shell plugin runtime 的实例级运行态。
6
- * - 状态所有权归属于 `ShellPlugin` 实例,而不是模块级单例。
7
- * - 统一归档到 `src/shell/` 相邻层级,避免继续分散在跨域目录里。
8
- */
9
- export {};
10
- //# sourceMappingURL=ShellRuntimeTypes.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"ShellRuntimeTypes.js","sourceRoot":"","sources":["../../src/shell/ShellRuntimeTypes.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG"}
@@ -1,12 +0,0 @@
1
- /**
2
- * Shell service 路径工具。
3
- *
4
- * 关键点(中文)
5
- * - shell 运行产物统一落在 `.downcity/shell/<shellId>/`。
6
- * - 目录结构简单稳定,便于调试与后续恢复。
7
- */
8
- export declare function getShellRootDir(projectRoot: string): string;
9
- export declare function getShellDir(projectRoot: string, shellId: string): string;
10
- export declare function getShellSnapshotPath(projectRoot: string, shellId: string): string;
11
- export declare function getShellOutputPath(projectRoot: string, shellId: string): string;
12
- //# sourceMappingURL=Paths.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"Paths.d.ts","sourceRoot":"","sources":["../../../src/shell/runtime/Paths.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAIH,wBAAgB,eAAe,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,CAE3D;AAED,wBAAgB,WAAW,CAAC,WAAW,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,CAExE;AAED,wBAAgB,oBAAoB,CAClC,WAAW,EAAE,MAAM,EACnB,OAAO,EAAE,MAAM,GACd,MAAM,CAER;AAED,wBAAgB,kBAAkB,CAAC,WAAW,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,CAE/E"}
@@ -1,21 +0,0 @@
1
- /**
2
- * Shell service 路径工具。
3
- *
4
- * 关键点(中文)
5
- * - shell 运行产物统一落在 `.downcity/shell/<shellId>/`。
6
- * - 目录结构简单稳定,便于调试与后续恢复。
7
- */
8
- import path from "node:path";
9
- export function getShellRootDir(projectRoot) {
10
- return path.join(projectRoot, ".downcity", "shell");
11
- }
12
- export function getShellDir(projectRoot, shellId) {
13
- return path.join(getShellRootDir(projectRoot), String(shellId || "").trim());
14
- }
15
- export function getShellSnapshotPath(projectRoot, shellId) {
16
- return path.join(getShellDir(projectRoot, shellId), "snapshot.json");
17
- }
18
- export function getShellOutputPath(projectRoot, shellId) {
19
- return path.join(getShellDir(projectRoot, shellId), "output.log");
20
- }
21
- //# sourceMappingURL=Paths.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"Paths.js","sourceRoot":"","sources":["../../../src/shell/runtime/Paths.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,IAAI,MAAM,WAAW,CAAC;AAE7B,MAAM,UAAU,eAAe,CAAC,WAAmB;IACjD,OAAO,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,WAAW,EAAE,OAAO,CAAC,CAAC;AACtD,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,WAAmB,EAAE,OAAe;IAC9D,OAAO,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;AAC/E,CAAC;AAED,MAAM,UAAU,oBAAoB,CAClC,WAAmB,EACnB,OAAe;IAEf,OAAO,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,WAAW,EAAE,OAAO,CAAC,EAAE,eAAe,CAAC,CAAC;AACvE,CAAC;AAED,MAAM,UAAU,kBAAkB,CAAC,WAAmB,EAAE,OAAe;IACrE,OAAO,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,WAAW,EAAE,OAAO,CAAC,EAAE,YAAY,CAAC,CAAC;AACpE,CAAC"}
@@ -1,52 +0,0 @@
1
- /**
2
- * Shell action 返回结构辅助。
3
- *
4
- * 关键点(中文)
5
- * - 集中处理输出游标、token 近似裁剪与标准 action response。
6
- * - 这里不读取文件、不修改 session,只基于传入文本构造返回对象。
7
- */
8
- import type { AgentContext } from "@downcity/agent/internal/types/runtime/agent/AgentContext.js";
9
- import type { ShellActionResponse, ShellOutputChunk, ShellSessionSnapshot } from "@downcity/agent/internal/executor/tools/shell/types/ShellPlugin.js";
10
- /**
11
- * 根据游标与 token 限制构造输出块。
12
- */
13
- export declare function createOutputChunk(params: {
14
- /**
15
- * 当前 shell session 标识。
16
- */
17
- shellId: string;
18
- /**
19
- * 当前完整输出文本。
20
- */
21
- outputText: string;
22
- /**
23
- * 本次读取起始游标。
24
- */
25
- fromCursor?: number;
26
- /**
27
- * 当前 Agent 执行上下文。
28
- */
29
- context: AgentContext;
30
- /**
31
- * 输出 token 近似上限。
32
- */
33
- maxOutputTokens?: number;
34
- }): ShellOutputChunk;
35
- /**
36
- * 构造 shell action 标准返回。
37
- */
38
- export declare function buildActionResponse(params: {
39
- /**
40
- * 当前 shell 快照。
41
- */
42
- shell: ShellSessionSnapshot;
43
- /**
44
- * 可选输出块。
45
- */
46
- chunk?: ShellOutputChunk;
47
- /**
48
- * 可选人类可读提示。
49
- */
50
- note?: string;
51
- }): ShellActionResponse;
52
- //# sourceMappingURL=ShellActionResponse.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"ShellActionResponse.d.ts","sourceRoot":"","sources":["../../../src/shell/runtime/ShellActionResponse.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,8DAA8D,CAAC;AACjG,OAAO,KAAK,EACV,mBAAmB,EACnB,gBAAgB,EAChB,oBAAoB,EACrB,MAAM,oEAAoE,CAAC;AA+C5E;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,EAAE;IACxC;;OAEG;IACH,OAAO,EAAE,MAAM,CAAC;IAChB;;OAEG;IACH,UAAU,EAAE,MAAM,CAAC;IACnB;;OAEG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB;;OAEG;IACH,OAAO,EAAE,YAAY,CAAC;IACtB;;OAEG;IACH,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B,GAAG,gBAAgB,CA0BnB;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,MAAM,EAAE;IAC1C;;OAEG;IACH,KAAK,EAAE,oBAAoB,CAAC;IAC5B;;OAEG;IACH,KAAK,CAAC,EAAE,gBAAgB,CAAC;IACzB;;OAEG;IACH,IAAI,CAAC,EAAE,MAAM,CAAC;CACf,GAAG,mBAAmB,CAMtB"}