@downcity/plugins 1.0.60 → 1.0.64

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 (98) hide show
  1. package/bin/BuiltinPlugins.d.ts +15 -0
  2. package/bin/BuiltinPlugins.d.ts.map +1 -1
  3. package/bin/BuiltinPlugins.js +7 -1
  4. package/bin/BuiltinPlugins.js.map +1 -1
  5. package/bin/index.d.ts +6 -0
  6. package/bin/index.d.ts.map +1 -1
  7. package/bin/index.js +3 -0
  8. package/bin/index.js.map +1 -1
  9. package/bin/memory/Action.d.ts +15 -10
  10. package/bin/memory/Action.d.ts.map +1 -1
  11. package/bin/memory/Action.js +233 -16
  12. package/bin/memory/Action.js.map +1 -1
  13. package/bin/memory/MemoryPlugin.d.ts +10 -4
  14. package/bin/memory/MemoryPlugin.d.ts.map +1 -1
  15. package/bin/memory/MemoryPlugin.js +79 -37
  16. package/bin/memory/MemoryPlugin.js.map +1 -1
  17. package/bin/memory/runtime/Search.d.ts +1 -1
  18. package/bin/memory/runtime/Search.d.ts.map +1 -1
  19. package/bin/memory/runtime/Search.js +11 -7
  20. package/bin/memory/runtime/Search.js.map +1 -1
  21. package/bin/memory/runtime/Store.d.ts +8 -23
  22. package/bin/memory/runtime/Store.d.ts.map +1 -1
  23. package/bin/memory/runtime/Store.js +28 -43
  24. package/bin/memory/runtime/Store.js.map +1 -1
  25. package/bin/memory/runtime/SystemProvider.d.ts +4 -8
  26. package/bin/memory/runtime/SystemProvider.d.ts.map +1 -1
  27. package/bin/memory/runtime/SystemProvider.js +55 -62
  28. package/bin/memory/runtime/SystemProvider.js.map +1 -1
  29. package/bin/memory/runtime/Writer.d.ts +48 -10
  30. package/bin/memory/runtime/Writer.d.ts.map +1 -1
  31. package/bin/memory/runtime/Writer.js +197 -60
  32. package/bin/memory/runtime/Writer.js.map +1 -1
  33. package/bin/memory/types/Memory.d.ts +222 -33
  34. package/bin/memory/types/Memory.d.ts.map +1 -1
  35. package/bin/memory/types/Memory.js +4 -3
  36. package/bin/memory/types/Memory.js.map +1 -1
  37. package/bin/shell/ShellPlugin.d.ts +2 -1
  38. package/bin/shell/ShellPlugin.d.ts.map +1 -1
  39. package/bin/shell/ShellPlugin.js +41 -4
  40. package/bin/shell/ShellPlugin.js.map +1 -1
  41. package/bin/shell/ShellRuntimeTypes.d.ts +57 -3
  42. package/bin/shell/ShellRuntimeTypes.d.ts.map +1 -1
  43. package/bin/shell/runtime/ShellActionRuntime.d.ts +21 -0
  44. package/bin/shell/runtime/ShellActionRuntime.d.ts.map +1 -1
  45. package/bin/shell/runtime/ShellActionRuntime.js +142 -6
  46. package/bin/shell/runtime/ShellActionRuntime.js.map +1 -1
  47. package/bin/shell/runtime/ShellActionRuntimeSupport.d.ts +14 -5
  48. package/bin/shell/runtime/ShellActionRuntimeSupport.d.ts.map +1 -1
  49. package/bin/shell/runtime/ShellActionRuntimeSupport.js +61 -22
  50. package/bin/shell/runtime/ShellActionRuntimeSupport.js.map +1 -1
  51. package/bin/shell/runtime/ShellApprovalRuntime.d.ts +57 -0
  52. package/bin/shell/runtime/ShellApprovalRuntime.d.ts.map +1 -0
  53. package/bin/shell/runtime/ShellApprovalRuntime.js +182 -0
  54. package/bin/shell/runtime/ShellApprovalRuntime.js.map +1 -0
  55. package/bin/shell/runtime/ShellProcessEvents.js +3 -3
  56. package/bin/shell/runtime/ShellProcessEvents.js.map +1 -1
  57. package/bin/shell/types/ShellPluginOptions.d.ts +103 -0
  58. package/bin/shell/types/ShellPluginOptions.d.ts.map +1 -0
  59. package/bin/shell/types/ShellPluginOptions.js +10 -0
  60. package/bin/shell/types/ShellPluginOptions.js.map +1 -0
  61. package/bin/task/Scheduler.d.ts +8 -0
  62. package/bin/task/Scheduler.d.ts.map +1 -1
  63. package/bin/task/Scheduler.js +7 -9
  64. package/bin/task/Scheduler.js.map +1 -1
  65. package/bin/task/TaskPlugin.d.ts +18 -1
  66. package/bin/task/TaskPlugin.d.ts.map +1 -1
  67. package/bin/task/TaskPlugin.js +23 -1
  68. package/bin/task/TaskPlugin.js.map +1 -1
  69. package/bin/task/types/TaskPluginOptions.d.ts +22 -0
  70. package/bin/task/types/TaskPluginOptions.d.ts.map +1 -0
  71. package/bin/task/types/TaskPluginOptions.js +9 -0
  72. package/bin/task/types/TaskPluginOptions.js.map +1 -0
  73. package/package.json +2 -2
  74. package/scripts/unrestricted-sandbox-approval.test.mjs +156 -0
  75. package/src/BuiltinPlugins.ts +27 -1
  76. package/src/index.ts +35 -0
  77. package/src/memory/Action.ts +292 -25
  78. package/src/memory/MemoryPlugin.ts +82 -40
  79. package/src/memory/runtime/Search.ts +16 -9
  80. package/src/memory/runtime/Store.ts +52 -49
  81. package/src/memory/runtime/SystemProvider.ts +55 -69
  82. package/src/memory/runtime/Writer.ts +262 -81
  83. package/src/memory/types/Memory.ts +296 -35
  84. package/src/shell/ShellPlugin.ts +44 -3
  85. package/src/shell/ShellRuntimeTypes.ts +61 -3
  86. package/src/shell/runtime/ShellActionRuntime.ts +182 -9
  87. package/src/shell/runtime/ShellActionRuntimeSupport.ts +112 -21
  88. package/src/shell/runtime/ShellApprovalRuntime.ts +236 -0
  89. package/src/shell/runtime/ShellProcessEvents.ts +3 -3
  90. package/src/shell/types/ShellPluginOptions.ts +122 -0
  91. package/src/task/Scheduler.ts +15 -9
  92. package/src/task/TaskPlugin.ts +27 -1
  93. package/src/task/types/TaskPluginOptions.ts +22 -0
  94. package/bin/memory/runtime/Flush.d.ts +0 -15
  95. package/bin/memory/runtime/Flush.d.ts.map +0 -1
  96. package/bin/memory/runtime/Flush.js +0 -63
  97. package/bin/memory/runtime/Flush.js.map +0 -1
  98. package/src/memory/runtime/Flush.ts +0 -83
@@ -0,0 +1,57 @@
1
+ /**
2
+ * Shell unrestricted sandbox 审批运行时。
3
+ *
4
+ * 关键点(中文)
5
+ * - agent 只能通过 shell tool 请求 unrestricted sandbox;真正执行前必须等待用户确认。
6
+ * - 审批结果最终回到原 tool result;session event 只用于 UI/CLI/Console 展示和操作。
7
+ * - V1 授权粒度固定为单次命令或单次 shell_start 创建的命令会话。
8
+ */
9
+ import type { AgentContext } from "@downcity/agent/internal/types/runtime/agent/AgentContext.js";
10
+ import type { ShellApprovalStatus } from "@downcity/agent/internal/executor/tools/shell/types/ShellPlugin.js";
11
+ import type { ShellPluginState } from "../../shell/ShellRuntimeTypes.js";
12
+ /**
13
+ * 校验 unrestricted sandbox 请求。
14
+ */
15
+ export declare function validateUnrestrictedRequest(params: {
16
+ cmd: string;
17
+ reason?: string;
18
+ }): string | null;
19
+ /**
20
+ * 请求用户批准 unrestricted sandbox 执行。
21
+ */
22
+ export declare function requestUnrestrictedApproval(params: {
23
+ state: ShellPluginState;
24
+ context: AgentContext;
25
+ shellId: string;
26
+ toolName: "shell_exec" | "shell_start";
27
+ cmd: string;
28
+ cwd: string;
29
+ reason: string;
30
+ ownerContextId?: string;
31
+ }): Promise<{
32
+ approvalId: string;
33
+ status: ShellApprovalStatus;
34
+ }>;
35
+ /**
36
+ * 兑现 unrestricted sandbox 审批。
37
+ */
38
+ export declare function resolveApproval(params: {
39
+ state: ShellPluginState;
40
+ context: AgentContext;
41
+ approvalId: string;
42
+ decision: ShellApprovalStatus;
43
+ }): Promise<boolean>;
44
+ /**
45
+ * 列出 pending unrestricted sandbox 审批。
46
+ */
47
+ export declare function listPendingApprovals(state: ShellPluginState): Array<{
48
+ approvalId: string;
49
+ shellId: string;
50
+ ownerContextId?: string;
51
+ toolName: "shell_exec" | "shell_start";
52
+ cmd: string;
53
+ cwd: string;
54
+ reason: string;
55
+ createdAt: number;
56
+ }>;
57
+ //# sourceMappingURL=ShellApprovalRuntime.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ShellApprovalRuntime.d.ts","sourceRoot":"","sources":["../../../src/shell/runtime/ShellApprovalRuntime.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAMH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,8DAA8D,CAAC;AACjG,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,oEAAoE,CAAC;AAC9G,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,8BAA8B,CAAC;AAsDrE;;GAEG;AACH,wBAAgB,2BAA2B,CAAC,MAAM,EAAE;IAClD,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB,GAAG,MAAM,GAAG,IAAI,CAShB;AAED;;GAEG;AACH,wBAAsB,2BAA2B,CAAC,MAAM,EAAE;IACxD,KAAK,EAAE,gBAAgB,CAAC;IACxB,OAAO,EAAE,YAAY,CAAC;IACtB,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,YAAY,GAAG,aAAa,CAAC;IACvC,GAAG,EAAE,MAAM,CAAC;IACZ,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,MAAM,CAAC;IACf,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB,GAAG,OAAO,CAAC;IACV,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,mBAAmB,CAAC;CAC7B,CAAC,CAkED;AAED;;GAEG;AACH,wBAAsB,eAAe,CAAC,MAAM,EAAE;IAC5C,KAAK,EAAE,gBAAgB,CAAC;IACxB,OAAO,EAAE,YAAY,CAAC;IACtB,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,mBAAmB,CAAC;CAC/B,GAAG,OAAO,CAAC,OAAO,CAAC,CAiCnB;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,gBAAgB,GAAG,KAAK,CAAC;IACnE,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;IAChB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,QAAQ,EAAE,YAAY,GAAG,aAAa,CAAC;IACvC,GAAG,EAAE,MAAM,CAAC;IACZ,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;CACnB,CAAC,CAWD"}
@@ -0,0 +1,182 @@
1
+ /**
2
+ * Shell unrestricted sandbox 审批运行时。
3
+ *
4
+ * 关键点(中文)
5
+ * - agent 只能通过 shell tool 请求 unrestricted sandbox;真正执行前必须等待用户确认。
6
+ * - 审批结果最终回到原 tool result;session event 只用于 UI/CLI/Console 展示和操作。
7
+ * - V1 授权粒度固定为单次命令或单次 shell_start 创建的命令会话。
8
+ */
9
+ import fs from "fs-extra";
10
+ import path from "node:path";
11
+ import { generateId } from "@downcity/agent/internal/utils/Id.js";
12
+ import { getSessionRunContext } from "@downcity/agent/internal/executor/SessionRunScope.js";
13
+ import { nowMs } from "./ShellActionRuntimeSupport.js";
14
+ const DANGEROUS_COMMAND_PATTERNS = [
15
+ /\bsudo\b/,
16
+ /\brm\s+-[^&|;\n]*r[^&|;\n]*f\s+\/(?:\s|$)/,
17
+ /\bchmod\s+-R\s+777\s+\/(?:\s|$)/,
18
+ /\bssh-keygen\b/,
19
+ /\bsecurity\s+(?:add|delete|unlock|set|import|export)-/i,
20
+ /(?:^|[\s;&|])(?:nohup\s+)?[^;&|\n]*(?:&)\s*$/,
21
+ ];
22
+ function isDangerousCommand(cmd) {
23
+ return DANGEROUS_COMMAND_PATTERNS.some((pattern) => pattern.test(cmd));
24
+ }
25
+ function resolveAuditPath(context) {
26
+ return path.join(context.rootPath, ".downcity", "logs", "unrestricted-sandbox-audit.jsonl");
27
+ }
28
+ async function appendAudit(params) {
29
+ const filePath = resolveAuditPath(params.context);
30
+ await fs.ensureDir(path.dirname(filePath));
31
+ await fs.appendFile(filePath, `${JSON.stringify(params.record)}\n`, "utf-8");
32
+ }
33
+ function publishApprovalResult(params) {
34
+ const sessionId = String(params.ownerContextId || "").trim();
35
+ if (!sessionId)
36
+ return;
37
+ const turnId = String(getSessionRunContext()?.turnId || sessionId).trim();
38
+ try {
39
+ params.context.session.get(sessionId).publishEvent({
40
+ type: "tool-approval-result",
41
+ turnId,
42
+ toolCallId: params.shellId,
43
+ toolName: params.toolName,
44
+ approvalId: params.approvalId,
45
+ decision: params.decision,
46
+ });
47
+ }
48
+ catch {
49
+ // ignore event delivery failures
50
+ }
51
+ }
52
+ /**
53
+ * 校验 unrestricted sandbox 请求。
54
+ */
55
+ export function validateUnrestrictedRequest(params) {
56
+ const reason = String(params.reason || "").trim();
57
+ if (!reason) {
58
+ return "unrestricted sandbox requires a non-empty reason";
59
+ }
60
+ if (isDangerousCommand(params.cmd)) {
61
+ return "unrestricted sandbox rejected a dangerous command";
62
+ }
63
+ return null;
64
+ }
65
+ /**
66
+ * 请求用户批准 unrestricted sandbox 执行。
67
+ */
68
+ export async function requestUnrestrictedApproval(params) {
69
+ const approvalId = `ap_${generateId()}`;
70
+ const createdAt = nowMs();
71
+ const ownerContextId = String(params.ownerContextId || "").trim() || undefined;
72
+ const status = await new Promise((resolve) => {
73
+ const timer = setTimeout(() => {
74
+ resolveApproval({
75
+ state: params.state,
76
+ context: params.context,
77
+ approvalId,
78
+ decision: "expired",
79
+ }).catch(() => undefined);
80
+ }, params.state.options.defaultApprovalTimeoutMs);
81
+ if (typeof timer.unref === "function")
82
+ timer.unref();
83
+ params.state.approvals.set(approvalId, {
84
+ approvalId,
85
+ shellId: params.shellId,
86
+ ...(ownerContextId ? { ownerContextId } : {}),
87
+ toolName: params.toolName,
88
+ cmd: params.cmd,
89
+ cwd: params.cwd,
90
+ reason: params.reason,
91
+ createdAt,
92
+ timer,
93
+ resolve,
94
+ });
95
+ if (ownerContextId) {
96
+ const turnId = String(getSessionRunContext()?.turnId || ownerContextId).trim();
97
+ try {
98
+ params.context.session.get(ownerContextId).publishEvent({
99
+ type: "tool-approval-request",
100
+ turnId,
101
+ toolCallId: params.shellId,
102
+ toolName: params.toolName,
103
+ approvalId,
104
+ sandbox: "unrestricted",
105
+ cmd: params.cmd,
106
+ cwd: params.cwd,
107
+ reason: params.reason,
108
+ status: "pending",
109
+ });
110
+ }
111
+ catch {
112
+ // ignore event delivery failures
113
+ }
114
+ }
115
+ appendAudit({
116
+ context: params.context,
117
+ record: {
118
+ event: "approval_requested",
119
+ approval_id: approvalId,
120
+ session_id: ownerContextId || null,
121
+ tool_call_id: params.shellId,
122
+ agent_id: params.context.config?.id || null,
123
+ cmd: params.cmd,
124
+ cwd: params.cwd,
125
+ reason: params.reason,
126
+ created_at: new Date(createdAt).toISOString(),
127
+ },
128
+ }).catch(() => undefined);
129
+ });
130
+ return { approvalId, status };
131
+ }
132
+ /**
133
+ * 兑现 unrestricted sandbox 审批。
134
+ */
135
+ export async function resolveApproval(params) {
136
+ const approval = params.state.approvals.get(params.approvalId);
137
+ if (!approval)
138
+ return false;
139
+ params.state.approvals.delete(params.approvalId);
140
+ clearTimeout(approval.timer);
141
+ approval.resolve(params.decision);
142
+ publishApprovalResult({
143
+ context: params.context,
144
+ ownerContextId: approval.ownerContextId,
145
+ approvalId: approval.approvalId,
146
+ shellId: approval.shellId,
147
+ toolName: approval.toolName,
148
+ decision: params.decision,
149
+ });
150
+ await appendAudit({
151
+ context: params.context,
152
+ record: {
153
+ event: "approval_resolved",
154
+ approval_id: approval.approvalId,
155
+ session_id: approval.ownerContextId || null,
156
+ tool_call_id: approval.shellId,
157
+ agent_id: params.context.config?.id || null,
158
+ cmd: approval.cmd,
159
+ cwd: approval.cwd,
160
+ reason: approval.reason,
161
+ decision: params.decision,
162
+ resolved_at: new Date(nowMs()).toISOString(),
163
+ },
164
+ }).catch(() => undefined);
165
+ return true;
166
+ }
167
+ /**
168
+ * 列出 pending unrestricted sandbox 审批。
169
+ */
170
+ export function listPendingApprovals(state) {
171
+ return Array.from(state.approvals.values()).map((approval) => ({
172
+ approvalId: approval.approvalId,
173
+ shellId: approval.shellId,
174
+ ...(approval.ownerContextId ? { ownerContextId: approval.ownerContextId } : {}),
175
+ toolName: approval.toolName,
176
+ cmd: approval.cmd,
177
+ cwd: approval.cwd,
178
+ reason: approval.reason,
179
+ createdAt: approval.createdAt,
180
+ }));
181
+ }
182
+ //# sourceMappingURL=ShellApprovalRuntime.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ShellApprovalRuntime.js","sourceRoot":"","sources":["../../../src/shell/runtime/ShellApprovalRuntime.ts"],"names":[],"mappings":"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"}
@@ -25,13 +25,13 @@ export function attachShellProcessEventHandlers(params) {
25
25
  const { state, session } = params;
26
26
  const { child } = session;
27
27
  child.stdout.on("data", (chunk) => {
28
- void appendSessionOutput(session, String(chunk ?? "")).catch(() => undefined);
28
+ void appendSessionOutput(state, session, String(chunk ?? "")).catch(() => undefined);
29
29
  });
30
30
  child.stderr.on("data", (chunk) => {
31
- void appendSessionOutput(session, String(chunk ?? "")).catch(() => undefined);
31
+ void appendSessionOutput(state, session, String(chunk ?? "")).catch(() => undefined);
32
32
  });
33
33
  child.on("error", (error) => {
34
- void appendSessionOutput(session, `\n[process error] ${String(error)}\n`).catch(() => undefined);
34
+ void appendSessionOutput(state, session, `\n[process error] ${String(error)}\n`).catch(() => undefined);
35
35
  void finalizeExitAfterOutputDrain(state, session, -1).catch(() => undefined);
36
36
  });
37
37
  child.on("close", (code) => {
@@ -1 +1 @@
1
- {"version":3,"file":"ShellProcessEvents.js","sourceRoot":"","sources":["../../../src/shell/runtime/ShellProcessEvents.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAGH,OAAO,EACL,mBAAmB,EACnB,YAAY,GACb,MAAM,gCAAgC,CAAC;AAExC,KAAK,UAAU,4BAA4B,CACzC,KAAuB,EACvB,OAAiC,EACjC,QAAgB;IAEhB,UAAU;IACV,wDAAwD;IACxD,+DAA+D;IAC/D,MAAM,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,EAAE;QAClC,MAAM,KAAK,GAAG,YAAY,CAAC,OAAO,CAAC,CAAC;QACpC,IAAI,OAAO,KAAK,CAAC,KAAK,KAAK,UAAU;YAAE,KAAK,CAAC,KAAK,EAAE,CAAC;IACvD,CAAC,CAAC,CAAC;IACH,MAAM,OAAO,CAAC,UAAU,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC;IAChD,MAAM,YAAY,CAAC,KAAK,EAAE,OAAO,EAAE,QAAQ,CAAC,CAAC;AAC/C,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,+BAA+B,CAAC,MAS/C;IACC,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,GAAG,MAAM,CAAC;IAClC,MAAM,EAAE,KAAK,EAAE,GAAG,OAAO,CAAC;IAC1B,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,KAAsB,EAAE,EAAE;QACjD,KAAK,mBAAmB,CAAC,OAAO,EAAE,MAAM,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC;IAChF,CAAC,CAAC,CAAC;IACH,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,KAAsB,EAAE,EAAE;QACjD,KAAK,mBAAmB,CAAC,OAAO,EAAE,MAAM,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC;IAChF,CAAC,CAAC,CAAC;IACH,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,KAAY,EAAE,EAAE;QACjC,KAAK,mBAAmB,CAAC,OAAO,EAAE,qBAAqB,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,KAAK,CAC7E,GAAG,EAAE,CAAC,SAAS,CAChB,CAAC;QACF,KAAK,4BAA4B,CAAC,KAAK,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC;IAC/E,CAAC,CAAC,CAAC;IACH,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,IAAmB,EAAE,EAAE;QACxC,KAAK,4BAA4B,CAC/B,KAAK,EACL,OAAO,EACP,OAAO,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CACrC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC;IAC3B,CAAC,CAAC,CAAC;AACL,CAAC"}
1
+ {"version":3,"file":"ShellProcessEvents.js","sourceRoot":"","sources":["../../../src/shell/runtime/ShellProcessEvents.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAGH,OAAO,EACL,mBAAmB,EACnB,YAAY,GACb,MAAM,gCAAgC,CAAC;AAExC,KAAK,UAAU,4BAA4B,CACzC,KAAuB,EACvB,OAAiC,EACjC,QAAgB;IAEhB,UAAU;IACV,wDAAwD;IACxD,+DAA+D;IAC/D,MAAM,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,EAAE;QAClC,MAAM,KAAK,GAAG,YAAY,CAAC,OAAO,CAAC,CAAC;QACpC,IAAI,OAAO,KAAK,CAAC,KAAK,KAAK,UAAU;YAAE,KAAK,CAAC,KAAK,EAAE,CAAC;IACvD,CAAC,CAAC,CAAC;IACH,MAAM,OAAO,CAAC,UAAU,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC;IAChD,MAAM,YAAY,CAAC,KAAK,EAAE,OAAO,EAAE,QAAQ,CAAC,CAAC;AAC/C,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,+BAA+B,CAAC,MAS/C;IACC,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,GAAG,MAAM,CAAC;IAClC,MAAM,EAAE,KAAK,EAAE,GAAG,OAAO,CAAC;IAC1B,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,KAAsB,EAAE,EAAE;QACjD,KAAK,mBAAmB,CAAC,KAAK,EAAE,OAAO,EAAE,MAAM,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC;IACvF,CAAC,CAAC,CAAC;IACH,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,KAAsB,EAAE,EAAE;QACjD,KAAK,mBAAmB,CAAC,KAAK,EAAE,OAAO,EAAE,MAAM,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC;IACvF,CAAC,CAAC,CAAC;IACH,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,KAAY,EAAE,EAAE;QACjC,KAAK,mBAAmB,CAAC,KAAK,EAAE,OAAO,EAAE,qBAAqB,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,KAAK,CACpF,GAAG,EAAE,CAAC,SAAS,CAChB,CAAC;QACF,KAAK,4BAA4B,CAAC,KAAK,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC;IAC/E,CAAC,CAAC,CAAC;IACH,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,IAAmB,EAAE,EAAE;QACxC,KAAK,4BAA4B,CAC/B,KAAK,EACL,OAAO,EACP,OAAO,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CACrC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC;IAC3B,CAAC,CAAC,CAAC;AACL,CAAC"}
@@ -0,0 +1,103 @@
1
+ /**
2
+ * ShellPlugin constructor 参数类型。
3
+ *
4
+ * 关键点(中文)
5
+ * - 所有字段都是可选 runtime 调参。
6
+ * - 不传参数时保持 ShellPlugin 既有硬编码默认行为。
7
+ * - 这些参数只影响 shell plugin runtime,不改变 sandbox 权限模型。
8
+ */
9
+ /**
10
+ * ShellPlugin 可选运行参数。
11
+ */
12
+ export interface ShellPluginOptions {
13
+ /**
14
+ * 最大 in-memory shell session 数量。
15
+ *
16
+ * 超过该数量时,runtime 会优先清理已经结束的旧 session;如果仍然超限则拒绝启动新 shell。
17
+ */
18
+ maxActiveShells?: number;
19
+ /**
20
+ * 终态 shell session 在内存中保留多久后自动清理,单位毫秒。
21
+ */
22
+ cleanupDelayMs?: number;
23
+ /**
24
+ * 单个 shell session 在内存中保留的最大输出字符数。
25
+ *
26
+ * 超出的历史输出仍会写入持久化输出文件,但内存快照只保留尾部内容。
27
+ */
28
+ maxInMemoryOutputChars?: number;
29
+ /**
30
+ * shell 输出预览保留的最大字符数。
31
+ */
32
+ outputPreviewChars?: number;
33
+ /**
34
+ * wait/timeout 参数允许的最小毫秒数。
35
+ */
36
+ minWaitMs?: number;
37
+ /**
38
+ * wait/timeout 参数允许的最大毫秒数。
39
+ */
40
+ maxWaitMs?: number;
41
+ /**
42
+ * `shell.start` 默认内联等待时间,单位毫秒。
43
+ */
44
+ defaultInlineWaitMs?: number;
45
+ /**
46
+ * `shell.wait` 默认等待超时,单位毫秒。
47
+ */
48
+ defaultWaitTimeoutMs?: number;
49
+ /**
50
+ * `shell.exec` 默认总超时,单位毫秒。
51
+ */
52
+ defaultExecTimeoutMs?: number;
53
+ /**
54
+ * unrestricted sandbox 审批默认超时时间,单位毫秒。
55
+ */
56
+ defaultApprovalTimeoutMs?: number;
57
+ }
58
+ /**
59
+ * ShellPlugin 归一化后的运行参数。
60
+ */
61
+ export interface ResolvedShellPluginOptions {
62
+ /**
63
+ * 最大 in-memory shell session 数量。
64
+ */
65
+ maxActiveShells: number;
66
+ /**
67
+ * 终态 shell session 在内存中保留多久后自动清理,单位毫秒。
68
+ */
69
+ cleanupDelayMs: number;
70
+ /**
71
+ * 单个 shell session 在内存中保留的最大输出字符数。
72
+ */
73
+ maxInMemoryOutputChars: number;
74
+ /**
75
+ * shell 输出预览保留的最大字符数。
76
+ */
77
+ outputPreviewChars: number;
78
+ /**
79
+ * wait/timeout 参数允许的最小毫秒数。
80
+ */
81
+ minWaitMs: number;
82
+ /**
83
+ * wait/timeout 参数允许的最大毫秒数。
84
+ */
85
+ maxWaitMs: number;
86
+ /**
87
+ * `shell.start` 默认内联等待时间,单位毫秒。
88
+ */
89
+ defaultInlineWaitMs: number;
90
+ /**
91
+ * `shell.wait` 默认等待超时,单位毫秒。
92
+ */
93
+ defaultWaitTimeoutMs: number;
94
+ /**
95
+ * `shell.exec` 默认总超时,单位毫秒。
96
+ */
97
+ defaultExecTimeoutMs: number;
98
+ /**
99
+ * unrestricted sandbox 审批默认超时时间,单位毫秒。
100
+ */
101
+ defaultApprovalTimeoutMs: number;
102
+ }
103
+ //# sourceMappingURL=ShellPluginOptions.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ShellPluginOptions.d.ts","sourceRoot":"","sources":["../../../src/shell/types/ShellPluginOptions.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC;;;;OAIG;IACH,eAAe,CAAC,EAAE,MAAM,CAAC;IAEzB;;OAEG;IACH,cAAc,CAAC,EAAE,MAAM,CAAC;IAExB;;;;OAIG;IACH,sBAAsB,CAAC,EAAE,MAAM,CAAC;IAEhC;;OAEG;IACH,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAE5B;;OAEG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;IAEnB;;OAEG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;IAEnB;;OAEG;IACH,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAE7B;;OAEG;IACH,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAE9B;;OAEG;IACH,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAE9B;;OAEG;IACH,wBAAwB,CAAC,EAAE,MAAM,CAAC;CACnC;AAED;;GAEG;AACH,MAAM,WAAW,0BAA0B;IACzC;;OAEG;IACH,eAAe,EAAE,MAAM,CAAC;IAExB;;OAEG;IACH,cAAc,EAAE,MAAM,CAAC;IAEvB;;OAEG;IACH,sBAAsB,EAAE,MAAM,CAAC;IAE/B;;OAEG;IACH,kBAAkB,EAAE,MAAM,CAAC;IAE3B;;OAEG;IACH,SAAS,EAAE,MAAM,CAAC;IAElB;;OAEG;IACH,SAAS,EAAE,MAAM,CAAC;IAElB;;OAEG;IACH,mBAAmB,EAAE,MAAM,CAAC;IAE5B;;OAEG;IACH,oBAAoB,EAAE,MAAM,CAAC;IAE7B;;OAEG;IACH,oBAAoB,EAAE,MAAM,CAAC;IAE7B;;OAEG;IACH,wBAAwB,EAAE,MAAM,CAAC;CAClC"}
@@ -0,0 +1,10 @@
1
+ /**
2
+ * ShellPlugin constructor 参数类型。
3
+ *
4
+ * 关键点(中文)
5
+ * - 所有字段都是可选 runtime 调参。
6
+ * - 不传参数时保持 ShellPlugin 既有硬编码默认行为。
7
+ * - 这些参数只影响 shell plugin runtime,不改变 sandbox 权限模型。
8
+ */
9
+ export {};
10
+ //# sourceMappingURL=ShellPluginOptions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ShellPluginOptions.js","sourceRoot":"","sources":["../../../src/shell/types/ShellPluginOptions.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG"}
@@ -10,6 +10,14 @@ import { TaskCronEngine } from "./types/Cron.js";
10
10
  export declare function registerTaskCronJobs(params: {
11
11
  context: AgentContext;
12
12
  engine: TaskCronEngine;
13
+ /**
14
+ * cron 表达式使用的 IANA 时区。
15
+ */
16
+ timezone: string;
17
+ /**
18
+ * 当前 TaskPlugin 实例持有的运行中 task 锁。
19
+ */
20
+ runningTaskIds: Set<string>;
13
21
  }): Promise<{
14
22
  tasksFound: number;
15
23
  jobsScheduled: number;
@@ -1 +1 @@
1
- {"version":3,"file":"Scheduler.d.ts","sourceRoot":"","sources":["../../src/task/Scheduler.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,8DAA8D,CAAC;AAQjG,OAAO,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AASjD,wBAAsB,oBAAoB,CAAC,MAAM,EAAE;IACjD,OAAO,EAAE,YAAY,CAAC;IACtB,MAAM,EAAE,cAAc,CAAC;CACxB,GAAG,OAAO,CAAC;IAAE,UAAU,EAAE,MAAM,CAAC;IAAC,aAAa,EAAE,MAAM,CAAA;CAAE,CAAC,CAwNzD"}
1
+ {"version":3,"file":"Scheduler.d.ts","sourceRoot":"","sources":["../../src/task/Scheduler.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,8DAA8D,CAAC;AAQjG,OAAO,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAQjD,wBAAsB,oBAAoB,CAAC,MAAM,EAAE;IACjD,OAAO,EAAE,YAAY,CAAC;IACtB,MAAM,EAAE,cAAc,CAAC;IACvB;;OAEG;IACH,QAAQ,EAAE,MAAM,CAAC;IACjB;;OAEG;IACH,cAAc,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;CAC7B,GAAG,OAAO,CAAC;IAAE,UAAU,EAAE,MAAM,CAAC;IAAC,aAAa,EAAE,MAAM,CAAA;CAAE,CAAC,CAuNzD"}
@@ -8,7 +8,6 @@
8
8
  import { isTaskWhenManual, resolveTaskWhenCronExpression, resolveTaskWhenOneShotMs, } from "./runtime/Model.js";
9
9
  import { listTasks, readTask, writeTask } from "./runtime/Store.js";
10
10
  import { runTaskNow } from "./runtime/Runner.js";
11
- import { resolveRuntimeTimezone } from "@downcity/agent/internal/utils/Time.js";
12
11
  const TASK_LOG_PREFIX = "[TASK]";
13
12
  function formatTaskLogMessage(message) {
14
13
  return `${TASK_LOG_PREFIX} ${message}`;
@@ -17,8 +16,7 @@ export async function registerTaskCronJobs(params) {
17
16
  const context = params.context;
18
17
  const logger = context.logger;
19
18
  const tasks = await listTasks(context.rootPath);
20
- const runtimeTimezone = resolveRuntimeTimezone();
21
- const runningByTaskId = new Set();
19
+ const runtimeTimezone = params.timezone;
22
20
  let jobsScheduled = 0;
23
21
  for (const item of tasks) {
24
22
  if (String(item.status).toLowerCase() !== "enabled")
@@ -44,14 +42,14 @@ export async function registerTaskCronJobs(params) {
44
42
  if (!taskId)
45
43
  return;
46
44
  // 关键点(中文):同一 taskId 串行;重叠触发时跳过,避免并发执行污染 run 目录。
47
- if (runningByTaskId.has(taskId)) {
45
+ if (params.runningTaskIds.has(taskId)) {
48
46
  void logger.log("warn", formatTaskLogMessage("Task skipped (already running)"), {
49
47
  taskId,
50
48
  via: "cron",
51
49
  });
52
50
  return;
53
51
  }
54
- runningByTaskId.add(taskId);
52
+ params.runningTaskIds.add(taskId);
55
53
  try {
56
54
  // 关键点(中文):触发瞬间复查最新 task.md,避免 status/when 变更后仍沿用旧注册状态。
57
55
  const latest = await readTask({
@@ -94,7 +92,7 @@ export async function registerTaskCronJobs(params) {
94
92
  });
95
93
  }
96
94
  finally {
97
- runningByTaskId.delete(taskId);
95
+ params.runningTaskIds.delete(taskId);
98
96
  }
99
97
  },
100
98
  });
@@ -130,7 +128,7 @@ export async function registerTaskCronJobs(params) {
130
128
  if (Date.now() < plannedTimeMs)
131
129
  return;
132
130
  // 关键点(中文):同一 taskId 串行;重叠触发时跳过,避免并发执行污染 run 目录。
133
- if (runningByTaskId.has(taskId)) {
131
+ if (params.runningTaskIds.has(taskId)) {
134
132
  void logger.log("warn", formatTaskLogMessage("Task skipped (already running)"), {
135
133
  taskId,
136
134
  via: "time",
@@ -138,7 +136,7 @@ export async function registerTaskCronJobs(params) {
138
136
  return;
139
137
  }
140
138
  let shouldDeactivateOneShot = false;
141
- runningByTaskId.add(taskId);
139
+ params.runningTaskIds.add(taskId);
142
140
  try {
143
141
  const latest = await readTask({
144
142
  taskId,
@@ -210,7 +208,7 @@ export async function registerTaskCronJobs(params) {
210
208
  });
211
209
  }
212
210
  }
213
- runningByTaskId.delete(taskId);
211
+ params.runningTaskIds.delete(taskId);
214
212
  }
215
213
  },
216
214
  });
@@ -1 +1 @@
1
- {"version":3,"file":"Scheduler.js","sourceRoot":"","sources":["../../src/task/Scheduler.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"Scheduler.js","sourceRoot":"","sources":["../../src/task/Scheduler.ts"],"names":[],"mappings":"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"}
@@ -10,6 +10,7 @@ import { BasePlugin } from "@downcity/agent/internal/plugin/core/BasePlugin.js";
10
10
  import type { PluginActions } from "@downcity/agent/internal/plugin/types/Plugin.js";
11
11
  import type { AgentContext } from "@downcity/agent/internal/types/runtime/agent/AgentContext.js";
12
12
  import type { TaskCronRegisterResult } from "../task/types/TaskPluginTypes.js";
13
+ import type { TaskPluginOptions } from "../task/types/TaskPluginOptions.js";
13
14
  import { TaskCronTriggerEngine } from "../task/runtime/CronTrigger.js";
14
15
  /**
15
16
  * task plugin 类实现。
@@ -27,6 +28,10 @@ export declare class TaskPlugin extends BasePlugin {
27
28
  * task plugin 的 action 定义表。
28
29
  */
29
30
  readonly actions: PluginActions;
31
+ /**
32
+ * 当前实例持有的显式配置。
33
+ */
34
+ readonly options: TaskPluginOptions;
30
35
  /**
31
36
  * 当前实例持有的 cron engine。
32
37
  *
@@ -35,7 +40,15 @@ export declare class TaskPlugin extends BasePlugin {
35
40
  * - 不再复用 module-global 单例。
36
41
  */
37
42
  cronEngine: TaskCronTriggerEngine | null;
38
- constructor();
43
+ /**
44
+ * 当前实例持有的运行中 task 锁。
45
+ *
46
+ * 关键点(中文)
47
+ * - scheduler reload 会替换 cron engine。
48
+ * - 锁必须挂在 plugin 实例上,避免 reload 后同一 task 被新旧调度器并发触发。
49
+ */
50
+ private readonly runningTaskIds;
51
+ constructor(options?: TaskPluginOptions);
39
52
  /**
40
53
  * 启动当前实例的 cron runtime。
41
54
  */
@@ -52,5 +65,9 @@ export declare class TaskPlugin extends BasePlugin {
52
65
  * 任务定义变更后重载 scheduler。
53
66
  */
54
67
  private reloadSchedulerAfterMutation;
68
+ /**
69
+ * 解析当前 task cron 使用的时区。
70
+ */
71
+ private resolveTimezone;
55
72
  }
56
73
  //# sourceMappingURL=TaskPlugin.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"TaskPlugin.d.ts","sourceRoot":"","sources":["../../src/task/TaskPlugin.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,EACV,sBAAsB,EAEvB,MAAM,iCAAiC,CAAC;AACzC,OAAO,EAAE,qBAAqB,EAAE,MAAM,+BAA+B,CAAC;AAgBtE;;GAEG;AACH,qBAAa,UAAW,SAAQ,UAAU;IACxC;;OAEG;IACH,QAAQ,CAAC,IAAI,UAAU;IAEvB;;OAEG;IACH,QAAQ,CAAC,MAAM,QAAO,MAAM,CAAuB;IAEnD;;OAEG;IACH,QAAQ,CAAC,OAAO,EAAE,aAAa,CAAC;IAEhC;;;;;;OAMG;IACI,UAAU,EAAE,qBAAqB,GAAG,IAAI,CAAQ;;IA+CvD;;OAEG;IACG,gBAAgB,CACpB,OAAO,EAAE,YAAY,GACpB,OAAO,CAAC,sBAAsB,GAAG,IAAI,CAAC;IAazC;;OAEG;IACG,eAAe,IAAI,OAAO,CAAC,OAAO,CAAC;IAQzC;;OAEG;IACG,kBAAkB,CACtB,OAAO,EAAE,YAAY,GACpB,OAAO,CAAC,sBAAsB,CAAC;IAWlC;;OAEG;YACW,4BAA4B;CAY3C"}
1
+ {"version":3,"file":"TaskPlugin.d.ts","sourceRoot":"","sources":["../../src/task/TaskPlugin.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,EACV,sBAAsB,EAEvB,MAAM,iCAAiC,CAAC;AACzC,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,mCAAmC,CAAC;AAC3E,OAAO,EAAE,qBAAqB,EAAE,MAAM,+BAA+B,CAAC;AAiBtE;;GAEG;AACH,qBAAa,UAAW,SAAQ,UAAU;IACxC;;OAEG;IACH,QAAQ,CAAC,IAAI,UAAU;IAEvB;;OAEG;IACH,QAAQ,CAAC,MAAM,QAAO,MAAM,CAAuB;IAEnD;;OAEG;IACH,QAAQ,CAAC,OAAO,EAAE,aAAa,CAAC;IAEhC;;OAEG;IACH,SAAgB,OAAO,EAAE,iBAAiB,CAAC;IAE3C;;;;;;OAMG;IACI,UAAU,EAAE,qBAAqB,GAAG,IAAI,CAAQ;IAEvD;;;;;;OAMG;IACH,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAqB;gBAExC,OAAO,CAAC,EAAE,iBAAiB;IA8CvC;;OAEG;IACG,gBAAgB,CACpB,OAAO,EAAE,YAAY,GACpB,OAAO,CAAC,sBAAsB,GAAG,IAAI,CAAC;IAezC;;OAEG;IACG,eAAe,IAAI,OAAO,CAAC,OAAO,CAAC;IAQzC;;OAEG;IACG,kBAAkB,CACtB,OAAO,EAAE,YAAY,GACpB,OAAO,CAAC,sBAAsB,CAAC;IAWlC;;OAEG;YACW,4BAA4B;IAa1C;;OAEG;IACH,OAAO,CAAC,eAAe;CAGxB"}
@@ -12,6 +12,7 @@ import { registerTaskCronJobs } from "../task/Scheduler.js";
12
12
  import { createTaskPluginActions, } from "../task/runtime/TaskPluginActions.js";
13
13
  import { reloadTaskSchedulerAfterMutation, } from "../task/runtime/TaskActionExecution.js";
14
14
  import { TASK_PLUGIN_PROMPT } from "../task/runtime/TaskPluginSystem.js";
15
+ import { resolveRuntimeTimezone } from "@downcity/agent/internal/utils/Time.js";
15
16
  const TASK_LOG_PREFIX = "[TASK]";
16
17
  function formatTaskLogMessage(message) {
17
18
  return `${TASK_LOG_PREFIX} ${message}`;
@@ -32,6 +33,10 @@ export class TaskPlugin extends BasePlugin {
32
33
  * task plugin 的 action 定义表。
33
34
  */
34
35
  actions;
36
+ /**
37
+ * 当前实例持有的显式配置。
38
+ */
39
+ options;
35
40
  /**
36
41
  * 当前实例持有的 cron engine。
37
42
  *
@@ -40,8 +45,17 @@ export class TaskPlugin extends BasePlugin {
40
45
  * - 不再复用 module-global 单例。
41
46
  */
42
47
  cronEngine = null;
43
- constructor() {
48
+ /**
49
+ * 当前实例持有的运行中 task 锁。
50
+ *
51
+ * 关键点(中文)
52
+ * - scheduler reload 会替换 cron engine。
53
+ * - 锁必须挂在 plugin 实例上,避免 reload 后同一 task 被新旧调度器并发触发。
54
+ */
55
+ runningTaskIds = new Set();
56
+ constructor(options) {
44
57
  super();
58
+ this.options = options || {};
45
59
  this.actions = createTaskPluginActions({
46
60
  reloadSchedulerAfterMutation: async (params) => this.reloadSchedulerAfterMutation(params),
47
61
  });
@@ -84,6 +98,8 @@ export class TaskPlugin extends BasePlugin {
84
98
  const registerResult = await registerTaskCronJobs({
85
99
  context,
86
100
  engine,
101
+ timezone: this.resolveTimezone(),
102
+ runningTaskIds: this.runningTaskIds,
87
103
  });
88
104
  await engine.start();
89
105
  this.cronEngine = engine;
@@ -122,5 +138,11 @@ export class TaskPlugin extends BasePlugin {
122
138
  reloadScheduler: async (context) => this.restartCronRuntime(context),
123
139
  });
124
140
  }
141
+ /**
142
+ * 解析当前 task cron 使用的时区。
143
+ */
144
+ resolveTimezone() {
145
+ return String(this.options.timezone || "").trim() || resolveRuntimeTimezone();
146
+ }
125
147
  }
126
148
  //# sourceMappingURL=TaskPlugin.js.map