p-spore 0.1.0

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 (261) hide show
  1. package/README.md +97 -0
  2. package/dist/agents/agent-manager.d.ts +57 -0
  3. package/dist/agents/agent-manager.d.ts.map +1 -0
  4. package/dist/agents/agent-manager.js +559 -0
  5. package/dist/agents/agent-manager.js.map +1 -0
  6. package/dist/agents/agent-tools.d.ts +4 -0
  7. package/dist/agents/agent-tools.d.ts.map +1 -0
  8. package/dist/agents/agent-tools.js +111 -0
  9. package/dist/agents/agent-tools.js.map +1 -0
  10. package/dist/agents/types.d.ts +52 -0
  11. package/dist/agents/types.d.ts.map +1 -0
  12. package/dist/agents/types.js +2 -0
  13. package/dist/agents/types.js.map +1 -0
  14. package/dist/application/agent-application.d.ts +89 -0
  15. package/dist/application/agent-application.d.ts.map +1 -0
  16. package/dist/application/agent-application.js +542 -0
  17. package/dist/application/agent-application.js.map +1 -0
  18. package/dist/automation/automation-tools.d.ts +4 -0
  19. package/dist/automation/automation-tools.d.ts.map +1 -0
  20. package/dist/automation/automation-tools.js +35 -0
  21. package/dist/automation/automation-tools.js.map +1 -0
  22. package/dist/automation/cron-adapter.d.ts +11 -0
  23. package/dist/automation/cron-adapter.d.ts.map +1 -0
  24. package/dist/automation/cron-adapter.js +48 -0
  25. package/dist/automation/cron-adapter.js.map +1 -0
  26. package/dist/automation/daemon-run-executor.d.ts +18 -0
  27. package/dist/automation/daemon-run-executor.d.ts.map +1 -0
  28. package/dist/automation/daemon-run-executor.js +69 -0
  29. package/dist/automation/daemon-run-executor.js.map +1 -0
  30. package/dist/automation/job-store.d.ts +12 -0
  31. package/dist/automation/job-store.d.ts.map +1 -0
  32. package/dist/automation/job-store.js +185 -0
  33. package/dist/automation/job-store.js.map +1 -0
  34. package/dist/automation/run-ledger.d.ts +25 -0
  35. package/dist/automation/run-ledger.d.ts.map +1 -0
  36. package/dist/automation/run-ledger.js +148 -0
  37. package/dist/automation/run-ledger.js.map +1 -0
  38. package/dist/automation/scheduler.d.ts +36 -0
  39. package/dist/automation/scheduler.d.ts.map +1 -0
  40. package/dist/automation/scheduler.js +300 -0
  41. package/dist/automation/scheduler.js.map +1 -0
  42. package/dist/automation/types.d.ts +81 -0
  43. package/dist/automation/types.d.ts.map +1 -0
  44. package/dist/automation/types.js +2 -0
  45. package/dist/automation/types.js.map +1 -0
  46. package/dist/cli/main.d.ts +4 -0
  47. package/dist/cli/main.d.ts.map +1 -0
  48. package/dist/cli/main.js +768 -0
  49. package/dist/cli/main.js.map +1 -0
  50. package/dist/config/config.d.ts +52 -0
  51. package/dist/config/config.d.ts.map +1 -0
  52. package/dist/config/config.js +345 -0
  53. package/dist/config/config.js.map +1 -0
  54. package/dist/daemon/daemon.d.ts +30 -0
  55. package/dist/daemon/daemon.d.ts.map +1 -0
  56. package/dist/daemon/daemon.js +437 -0
  57. package/dist/daemon/daemon.js.map +1 -0
  58. package/dist/daemon/supervisor.d.ts +18 -0
  59. package/dist/daemon/supervisor.d.ts.map +1 -0
  60. package/dist/daemon/supervisor.js +37 -0
  61. package/dist/daemon/supervisor.js.map +1 -0
  62. package/dist/desktop/daemon-bridge.d.ts +32 -0
  63. package/dist/desktop/daemon-bridge.d.ts.map +1 -0
  64. package/dist/desktop/daemon-bridge.js +204 -0
  65. package/dist/desktop/daemon-bridge.js.map +1 -0
  66. package/dist/desktop/daemon-supervisor.d.ts +2 -0
  67. package/dist/desktop/daemon-supervisor.d.ts.map +1 -0
  68. package/dist/desktop/daemon-supervisor.js +2 -0
  69. package/dist/desktop/daemon-supervisor.js.map +1 -0
  70. package/dist/desktop/ipc-contract.d.ts +153 -0
  71. package/dist/desktop/ipc-contract.d.ts.map +1 -0
  72. package/dist/desktop/ipc-contract.js +219 -0
  73. package/dist/desktop/ipc-contract.js.map +1 -0
  74. package/dist/desktop/main.d.ts +2 -0
  75. package/dist/desktop/main.d.ts.map +1 -0
  76. package/dist/desktop/main.js +594 -0
  77. package/dist/desktop/main.js.map +1 -0
  78. package/dist/desktop/preload.cjs +32 -0
  79. package/dist/desktop/renderer/index.html +284 -0
  80. package/dist/desktop/renderer/renderer.d.ts +2 -0
  81. package/dist/desktop/renderer/renderer.d.ts.map +1 -0
  82. package/dist/desktop/renderer/renderer.js +895 -0
  83. package/dist/desktop/renderer/renderer.js.map +1 -0
  84. package/dist/desktop/renderer/store.d.ts +33 -0
  85. package/dist/desktop/renderer/store.d.ts.map +1 -0
  86. package/dist/desktop/renderer/store.js +144 -0
  87. package/dist/desktop/renderer/store.js.map +1 -0
  88. package/dist/desktop/renderer/styles.css +540 -0
  89. package/dist/desktop/security.d.ts +5 -0
  90. package/dist/desktop/security.d.ts.map +1 -0
  91. package/dist/desktop/security.js +49 -0
  92. package/dist/desktop/security.js.map +1 -0
  93. package/dist/desktop/smoke-fixture.d.ts +3 -0
  94. package/dist/desktop/smoke-fixture.d.ts.map +1 -0
  95. package/dist/desktop/smoke-fixture.js +223 -0
  96. package/dist/desktop/smoke-fixture.js.map +1 -0
  97. package/dist/desktop/validation.d.ts +8 -0
  98. package/dist/desktop/validation.d.ts.map +1 -0
  99. package/dist/desktop/validation.js +341 -0
  100. package/dist/desktop/validation.js.map +1 -0
  101. package/dist/domain/runtime.d.ts +116 -0
  102. package/dist/domain/runtime.d.ts.map +1 -0
  103. package/dist/domain/runtime.js +2 -0
  104. package/dist/domain/runtime.js.map +1 -0
  105. package/dist/gateway/local-gateway.d.ts +23 -0
  106. package/dist/gateway/local-gateway.d.ts.map +1 -0
  107. package/dist/gateway/local-gateway.js +265 -0
  108. package/dist/gateway/local-gateway.js.map +1 -0
  109. package/dist/kernel/loop.d.ts +10 -0
  110. package/dist/kernel/loop.d.ts.map +1 -0
  111. package/dist/kernel/loop.js +41 -0
  112. package/dist/kernel/loop.js.map +1 -0
  113. package/dist/kernel/reducer.d.ts +3 -0
  114. package/dist/kernel/reducer.d.ts.map +1 -0
  115. package/dist/kernel/reducer.js +102 -0
  116. package/dist/kernel/reducer.js.map +1 -0
  117. package/dist/kernel/state.d.ts +93 -0
  118. package/dist/kernel/state.d.ts.map +1 -0
  119. package/dist/kernel/state.js +15 -0
  120. package/dist/kernel/state.js.map +1 -0
  121. package/dist/mcp/mcp-manager.d.ts +55 -0
  122. package/dist/mcp/mcp-manager.d.ts.map +1 -0
  123. package/dist/mcp/mcp-manager.js +591 -0
  124. package/dist/mcp/mcp-manager.js.map +1 -0
  125. package/dist/mcp/mcp-tools.d.ts +4 -0
  126. package/dist/mcp/mcp-tools.d.ts.map +1 -0
  127. package/dist/mcp/mcp-tools.js +53 -0
  128. package/dist/mcp/mcp-tools.js.map +1 -0
  129. package/dist/mcp/types.d.ts +73 -0
  130. package/dist/mcp/types.d.ts.map +1 -0
  131. package/dist/mcp/types.js +2 -0
  132. package/dist/mcp/types.js.map +1 -0
  133. package/dist/memory/bm25.d.ts +14 -0
  134. package/dist/memory/bm25.d.ts.map +1 -0
  135. package/dist/memory/bm25.js +40 -0
  136. package/dist/memory/bm25.js.map +1 -0
  137. package/dist/memory/context-loader.d.ts +26 -0
  138. package/dist/memory/context-loader.d.ts.map +1 -0
  139. package/dist/memory/context-loader.js +97 -0
  140. package/dist/memory/context-loader.js.map +1 -0
  141. package/dist/memory/memory-service.d.ts +30 -0
  142. package/dist/memory/memory-service.d.ts.map +1 -0
  143. package/dist/memory/memory-service.js +133 -0
  144. package/dist/memory/memory-service.js.map +1 -0
  145. package/dist/memory/memory-tools.d.ts +4 -0
  146. package/dist/memory/memory-tools.d.ts.map +1 -0
  147. package/dist/memory/memory-tools.js +49 -0
  148. package/dist/memory/memory-tools.js.map +1 -0
  149. package/dist/memory/search-service.d.ts +38 -0
  150. package/dist/memory/search-service.d.ts.map +1 -0
  151. package/dist/memory/search-service.js +463 -0
  152. package/dist/memory/search-service.js.map +1 -0
  153. package/dist/memory/tokenizer.d.ts +5 -0
  154. package/dist/memory/tokenizer.d.ts.map +1 -0
  155. package/dist/memory/tokenizer.js +42 -0
  156. package/dist/memory/tokenizer.js.map +1 -0
  157. package/dist/notifications/notification-service.d.ts +47 -0
  158. package/dist/notifications/notification-service.d.ts.map +1 -0
  159. package/dist/notifications/notification-service.js +163 -0
  160. package/dist/notifications/notification-service.js.map +1 -0
  161. package/dist/notifications/notification-tools.d.ts +4 -0
  162. package/dist/notifications/notification-tools.d.ts.map +1 -0
  163. package/dist/notifications/notification-tools.js +31 -0
  164. package/dist/notifications/notification-tools.js.map +1 -0
  165. package/dist/pi/pi-runtime-adapter.d.ts +38 -0
  166. package/dist/pi/pi-runtime-adapter.d.ts.map +1 -0
  167. package/dist/pi/pi-runtime-adapter.js +483 -0
  168. package/dist/pi/pi-runtime-adapter.js.map +1 -0
  169. package/dist/plugins/extension-manager.d.ts +32 -0
  170. package/dist/plugins/extension-manager.d.ts.map +1 -0
  171. package/dist/plugins/extension-manager.js +562 -0
  172. package/dist/plugins/extension-manager.js.map +1 -0
  173. package/dist/plugins/resource-inspector.d.ts +18 -0
  174. package/dist/plugins/resource-inspector.d.ts.map +1 -0
  175. package/dist/plugins/resource-inspector.js +386 -0
  176. package/dist/plugins/resource-inspector.js.map +1 -0
  177. package/dist/plugins/types.d.ts +96 -0
  178. package/dist/plugins/types.d.ts.map +1 -0
  179. package/dist/plugins/types.js +2 -0
  180. package/dist/plugins/types.js.map +1 -0
  181. package/dist/policy/approval-service.d.ts +68 -0
  182. package/dist/policy/approval-service.d.ts.map +1 -0
  183. package/dist/policy/approval-service.js +349 -0
  184. package/dist/policy/approval-service.js.map +1 -0
  185. package/dist/policy/policy.d.ts +26 -0
  186. package/dist/policy/policy.d.ts.map +1 -0
  187. package/dist/policy/policy.js +228 -0
  188. package/dist/policy/policy.js.map +1 -0
  189. package/dist/protocol/client.d.ts +25 -0
  190. package/dist/protocol/client.d.ts.map +1 -0
  191. package/dist/protocol/client.js +188 -0
  192. package/dist/protocol/client.js.map +1 -0
  193. package/dist/protocol/errors.d.ts +5 -0
  194. package/dist/protocol/errors.d.ts.map +1 -0
  195. package/dist/protocol/errors.js +9 -0
  196. package/dist/protocol/errors.js.map +1 -0
  197. package/dist/protocol/schema.d.ts +71 -0
  198. package/dist/protocol/schema.d.ts.map +1 -0
  199. package/dist/protocol/schema.js +155 -0
  200. package/dist/protocol/schema.js.map +1 -0
  201. package/dist/settings/llm-settings-service.d.ts +9 -0
  202. package/dist/settings/llm-settings-service.d.ts.map +1 -0
  203. package/dist/settings/llm-settings-service.js +199 -0
  204. package/dist/settings/llm-settings-service.js.map +1 -0
  205. package/dist/settings/llm-settings.d.ts +29 -0
  206. package/dist/settings/llm-settings.d.ts.map +1 -0
  207. package/dist/settings/llm-settings.js +113 -0
  208. package/dist/settings/llm-settings.js.map +1 -0
  209. package/dist/shell/shell-service.d.ts +88 -0
  210. package/dist/shell/shell-service.d.ts.map +1 -0
  211. package/dist/shell/shell-service.js +459 -0
  212. package/dist/shell/shell-service.js.map +1 -0
  213. package/dist/storage/atomic.d.ts +4 -0
  214. package/dist/storage/atomic.d.ts.map +1 -0
  215. package/dist/storage/atomic.js +49 -0
  216. package/dist/storage/atomic.js.map +1 -0
  217. package/dist/storage/daemon-lock.d.ts +17 -0
  218. package/dist/storage/daemon-lock.d.ts.map +1 -0
  219. package/dist/storage/daemon-lock.js +97 -0
  220. package/dist/storage/daemon-lock.js.map +1 -0
  221. package/dist/storage/home.d.ts +29 -0
  222. package/dist/storage/home.d.ts.map +1 -0
  223. package/dist/storage/home.js +108 -0
  224. package/dist/storage/home.js.map +1 -0
  225. package/dist/storage/jsonl.d.ts +2 -0
  226. package/dist/storage/jsonl.d.ts.map +1 -0
  227. package/dist/storage/jsonl.js +45 -0
  228. package/dist/storage/jsonl.js.map +1 -0
  229. package/dist/tools/core-tools.d.ts +16 -0
  230. package/dist/tools/core-tools.d.ts.map +1 -0
  231. package/dist/tools/core-tools.js +283 -0
  232. package/dist/tools/core-tools.js.map +1 -0
  233. package/dist/ui/shared/presentation.d.ts +46 -0
  234. package/dist/ui/shared/presentation.d.ts.map +1 -0
  235. package/dist/ui/shared/presentation.js +81 -0
  236. package/dist/ui/shared/presentation.js.map +1 -0
  237. package/dist/ui/shared/protocol-state.d.ts +30 -0
  238. package/dist/ui/shared/protocol-state.d.ts.map +1 -0
  239. package/dist/ui/shared/protocol-state.js +165 -0
  240. package/dist/ui/shared/protocol-state.js.map +1 -0
  241. package/dist/ui/tui/commands.d.ts +2 -0
  242. package/dist/ui/tui/commands.d.ts.map +1 -0
  243. package/dist/ui/tui/commands.js +33 -0
  244. package/dist/ui/tui/commands.js.map +1 -0
  245. package/dist/ui/tui/store.d.ts +32 -0
  246. package/dist/ui/tui/store.d.ts.map +1 -0
  247. package/dist/ui/tui/store.js +62 -0
  248. package/dist/ui/tui/store.js.map +1 -0
  249. package/dist/ui/tui/tui-app.d.ts +21 -0
  250. package/dist/ui/tui/tui-app.d.ts.map +1 -0
  251. package/dist/ui/tui/tui-app.js +643 -0
  252. package/dist/ui/tui/tui-app.js.map +1 -0
  253. package/dist/ui/tui/view.d.ts +29 -0
  254. package/dist/ui/tui/view.d.ts.map +1 -0
  255. package/dist/ui/tui/view.js +255 -0
  256. package/dist/ui/tui/view.js.map +1 -0
  257. package/dist/version.d.ts +5 -0
  258. package/dist/version.d.ts.map +1 -0
  259. package/dist/version.js +5 -0
  260. package/dist/version.js.map +1 -0
  261. package/package.json +62 -0
@@ -0,0 +1,542 @@
1
+ import { randomUUID } from "node:crypto";
2
+ import { CommandError } from "../protocol/errors.js";
3
+ export class AgentRunBudgetError extends Error {
4
+ constructor(message) {
5
+ super(message);
6
+ this.name = "AgentRunBudgetError";
7
+ }
8
+ }
9
+ export class AgentApplication {
10
+ #runtime;
11
+ #kernel;
12
+ #approvals;
13
+ #notifications;
14
+ #sessionTemplate;
15
+ #modelConfigured;
16
+ #onShutdownRequested;
17
+ #clock;
18
+ #idFactory;
19
+ #sessions = new Set();
20
+ #unsubscribers = new Map();
21
+ #sessionTails = new Map();
22
+ #automation;
23
+ #agents;
24
+ #mcp;
25
+ #resources;
26
+ constructor(options) {
27
+ this.#runtime = options.runtime;
28
+ this.#kernel = options.kernel;
29
+ this.#approvals = options.approvals;
30
+ this.#notifications = options.notifications;
31
+ this.#sessionTemplate = options.sessionTemplate;
32
+ this.#modelConfigured = options.modelConfigured;
33
+ this.#onShutdownRequested = options.onShutdownRequested;
34
+ this.#clock = options.clock ?? (() => new Date());
35
+ this.#idFactory = options.idFactory ?? randomUUID;
36
+ }
37
+ async handleCommand(command) {
38
+ switch (command.type) {
39
+ case "status.get":
40
+ exactPayload(command.payload, [], command.type);
41
+ return this.#kernel.snapshot();
42
+ case "session.snapshot": {
43
+ exactPayload(command.payload, [], command.type);
44
+ const sessionId = requiredSessionId(command);
45
+ return this.#sessions.has(sessionId) ? this.#runtime.snapshot(sessionId) : null;
46
+ }
47
+ case "session.prompt": {
48
+ const payload = exactPayload(command.payload, ["text", "mode"], command.type);
49
+ const text = nonEmptyString(payload["text"], "payload.text");
50
+ const mode = optionalEnum(payload["mode"], ["prompt", "steer", "follow_up"], "payload.mode") ?? "prompt";
51
+ const sessionId = requiredSessionId(command);
52
+ return this.#serializeSession(sessionId, async () => {
53
+ await this.#ensureSession(sessionId);
54
+ const accepted = mode === "steer"
55
+ ? await this.#runtime.steer(sessionId, text)
56
+ : mode === "follow_up"
57
+ ? await this.#runtime.followUp(sessionId, text)
58
+ : await this.#runtime.prompt(sessionId, text);
59
+ setImmediate(() => void this.#agents?.sessionAvailable(sessionId));
60
+ return accepted;
61
+ });
62
+ }
63
+ case "session.abort": {
64
+ const payload = exactPayload(command.payload, ["reason"], command.type);
65
+ const reason = optionalString(payload["reason"], "payload.reason") ?? "user requested abort";
66
+ const sessionId = requiredSessionId(command);
67
+ return this.#serializeSession(sessionId, async () => {
68
+ this.#assertSession(sessionId);
69
+ await this.#approvals.cancelSession(sessionId);
70
+ await this.#agents?.cancelChildren(this.#agents.parentIdForSession(sessionId), reason);
71
+ await this.#runtime.abort(sessionId, reason);
72
+ return { aborted: true };
73
+ });
74
+ }
75
+ case "session.compact": {
76
+ const payload = exactPayload(command.payload, ["instructions"], command.type);
77
+ const instructions = optionalString(payload["instructions"], "payload.instructions");
78
+ const sessionId = requiredSessionId(command);
79
+ return this.#serializeSession(sessionId, async () => {
80
+ this.#assertSession(sessionId);
81
+ if (instructions === undefined)
82
+ await this.#runtime.compact(sessionId);
83
+ else
84
+ await this.#runtime.compact(sessionId, instructions);
85
+ return { compacted: true };
86
+ });
87
+ }
88
+ case "approval.resolve": {
89
+ const payload = exactPayload(command.payload, ["approvalId", "approved", "scope"], command.type);
90
+ const approvalId = nonEmptyString(payload["approvalId"], "payload.approvalId");
91
+ const approved = booleanValue(payload["approved"], "payload.approved");
92
+ const scope = optionalEnum(payload["scope"], ["once", "session", "job"], "payload.scope") ?? "once";
93
+ return this.#approvals.resolve(approvalId, { approved, scope, actor: command.clientId });
94
+ }
95
+ case "jobs.list":
96
+ exactPayload(command.payload, [], command.type);
97
+ return this.#requireAutomation().listJobs();
98
+ case "runs.list":
99
+ exactPayload(command.payload, [], command.type);
100
+ return this.#requireAutomation().listRuns();
101
+ case "notifications.list":
102
+ exactPayload(command.payload, [], command.type);
103
+ return this.#notifications.list();
104
+ case "agents.list":
105
+ exactPayload(command.payload, [], command.type);
106
+ return this.#requireAgents().list();
107
+ case "agent.messages":
108
+ exactPayload(command.payload, [], command.type);
109
+ return this.#requireAgents().listMessages();
110
+ case "agent.spawn": {
111
+ const payload = exactPayload(command.payload, ["parentId", "objective", "cwd", "workspaceMode", "budget"], command.type);
112
+ return this.#requireAgents().spawn({
113
+ parentId: optionalString(payload["parentId"], "payload.parentId") ?? "main",
114
+ objective: nonEmptyString(payload["objective"], "payload.objective"),
115
+ cwd: optionalString(payload["cwd"], "payload.cwd") ?? this.#sessionTemplate.cwd,
116
+ workspaceMode: requiredEnum(payload["workspaceMode"], ["shared-read", "shared-write"], "payload.workspaceMode"),
117
+ budget: parseRunBudget(payload["budget"], "payload.budget"),
118
+ });
119
+ }
120
+ case "agent.send": {
121
+ const payload = exactPayload(command.payload, ["agentId", "message", "mode"], command.type);
122
+ return this.#requireAgents().send({
123
+ senderId: "user",
124
+ recipientId: nonEmptyString(payload["agentId"], "payload.agentId"),
125
+ text: nonEmptyString(payload["message"], "payload.message"),
126
+ mode: requiredEnum(payload["mode"], ["steer", "follow_up", "next"], "payload.mode"),
127
+ priority: "high",
128
+ });
129
+ }
130
+ case "agent.join": {
131
+ const payload = exactPayload(command.payload, ["agentIds", "timeoutMs"], command.type);
132
+ return this.#requireAgents().join(stringArray(payload["agentIds"], "payload.agentIds", 32), positiveIntegerValue(payload["timeoutMs"], "payload.timeoutMs", 600_000));
133
+ }
134
+ case "agent.cancel": {
135
+ const payload = exactPayload(command.payload, ["agentId", "reason"], command.type);
136
+ return this.#requireAgents().cancel(nonEmptyString(payload["agentId"], "payload.agentId"), optionalString(payload["reason"], "payload.reason"));
137
+ }
138
+ case "mcp.servers":
139
+ exactPayload(command.payload, [], command.type);
140
+ return this.#requireMcp().listServers();
141
+ case "mcp.tools":
142
+ exactPayload(command.payload, [], command.type);
143
+ return this.#requireMcp().listTools();
144
+ case "mcp.discover": {
145
+ const payload = exactPayload(command.payload, ["serverId"], command.type);
146
+ return this.#requireMcp().discover(nonEmptyString(payload["serverId"], "payload.serverId"));
147
+ }
148
+ case "mcp.ping": {
149
+ const payload = exactPayload(command.payload, ["serverId"], command.type);
150
+ return this.#requireMcp().ping(nonEmptyString(payload["serverId"], "payload.serverId"));
151
+ }
152
+ case "resources.list":
153
+ exactPayload(command.payload, [], command.type);
154
+ return this.#requireResources().list();
155
+ case "skills.list":
156
+ exactPayload(command.payload, [], command.type);
157
+ return this.#requireResources().list().filter((entry) => entry.record.kind === "skill");
158
+ case "plugins.list":
159
+ exactPayload(command.payload, [], command.type);
160
+ return this.#requireResources().list().filter((entry) => entry.record.kind === "host-plugin");
161
+ case "resources.inspect": {
162
+ const payload = exactPayload(command.payload, ["stagingPath"], command.type);
163
+ return this.#requireResources().inspect(nonEmptyString(payload["stagingPath"], "payload.stagingPath"));
164
+ }
165
+ case "resources.install": {
166
+ const payload = exactPayload(command.payload, ["stagingPath", "expectedDigest"], command.type);
167
+ return this.#requireResources().install(nonEmptyString(payload["stagingPath"], "payload.stagingPath"), sha256Value(payload["expectedDigest"], "payload.expectedDigest"));
168
+ }
169
+ case "resources.disable": {
170
+ const payload = exactPayload(command.payload, ["kind", "name", "expectedDigest"], command.type);
171
+ return this.#requireResources().disable(requiredEnum(payload["kind"], ["skill", "host-plugin"], "payload.kind"), nonEmptyString(payload["name"], "payload.name"), sha256Value(payload["expectedDigest"], "payload.expectedDigest"));
172
+ }
173
+ case "job.put": {
174
+ const payload = exactPayload(command.payload, ["job", "expectedSha256"], command.type);
175
+ return this.#requireAutomation().putJob(payload["job"], nullableSha256(payload["expectedSha256"], "payload.expectedSha256"));
176
+ }
177
+ case "job.run": {
178
+ const payload = exactPayload(command.payload, ["jobId"], command.type);
179
+ return this.#requireAutomation().triggerJob(nonEmptyString(payload["jobId"], "payload.jobId"), this.#clock(), "user");
180
+ }
181
+ case "run.cancel": {
182
+ const payload = exactPayload(command.payload, ["runId", "reason"], command.type);
183
+ return this.#requireAutomation().cancel(nonEmptyString(payload["runId"], "payload.runId"), optionalString(payload["reason"], "payload.reason"));
184
+ }
185
+ case "daemon.shutdown":
186
+ exactPayload(command.payload, [], command.type);
187
+ this.#onShutdownRequested?.();
188
+ return { draining: true };
189
+ default:
190
+ throw new CommandError("unknown_command", `Unknown command type: ${command.type}`);
191
+ }
192
+ }
193
+ setAutomation(automation) {
194
+ if (this.#automation)
195
+ throw new Error("Automation control is already configured");
196
+ this.#automation = automation;
197
+ }
198
+ setAgents(agents) {
199
+ if (this.#agents)
200
+ throw new Error("Agent control is already configured");
201
+ this.#agents = agents;
202
+ }
203
+ setMcp(mcp) {
204
+ if (this.#mcp)
205
+ throw new Error("MCP control is already configured");
206
+ this.#mcp = mcp;
207
+ }
208
+ setResources(resources) {
209
+ if (this.#resources)
210
+ throw new Error("Resource control is already configured");
211
+ this.#resources = resources;
212
+ }
213
+ executeAgentRun(run, signal) {
214
+ const activity = run.activity;
215
+ if (activity.kind !== "agent")
216
+ throw new Error(`Run ${run.id} is not an agent activity`);
217
+ const sessionId = `run:${run.id}`;
218
+ return this.#serializeSession(sessionId, async () => {
219
+ const agentPath = ["automation", run.jobId ?? run.source, run.id];
220
+ this.#agents?.registerRoot({
221
+ id: sessionId,
222
+ budget: run.budget,
223
+ ...(run.jobId === undefined ? {} : { jobId: run.jobId }),
224
+ agentPath,
225
+ });
226
+ let turns = 0;
227
+ let toolCalls = 0;
228
+ let violation;
229
+ const checkBudget = (event) => {
230
+ if (event.type === "run.started")
231
+ turns += 1;
232
+ if (event.type === "tool.started")
233
+ toolCalls += 1;
234
+ const usage = this.#runtime.snapshot(sessionId).usage;
235
+ const reason = budgetViolation(run.budget, { turns, toolCalls, input: usage.input, output: usage.output, cost: usage.costUsd });
236
+ if (!reason || violation)
237
+ return;
238
+ violation = new AgentRunBudgetError(reason);
239
+ void abortSession(reason);
240
+ };
241
+ let unsubscribeBudget = () => undefined;
242
+ let abortTask;
243
+ const abortSession = (reason) => {
244
+ abortTask ??= Promise.allSettled([
245
+ this.#approvals.cancelSession(sessionId),
246
+ this.#runtime.abort(sessionId, reason),
247
+ ]).then(() => undefined);
248
+ return abortTask;
249
+ };
250
+ const abort = () => void abortSession("automation run aborted");
251
+ signal.addEventListener("abort", abort, { once: true });
252
+ try {
253
+ await this.#ensureSession(sessionId, activity.cwd, {
254
+ agentPath,
255
+ runId: run.id,
256
+ ...(run.jobId === undefined ? {} : { jobId: run.jobId }),
257
+ allowedApprovalScopes: run.jobId === undefined ? ["once", "session"] : ["once", "session", "job"],
258
+ });
259
+ unsubscribeBudget = this.#runtime.subscribe(sessionId, checkBudget);
260
+ if (signal.aborted)
261
+ throw signal.reason instanceof Error ? signal.reason : new Error("Automation run aborted");
262
+ await this.#runtime.prompt(sessionId, activity.prompt);
263
+ await this.#runtime.waitForIdle(sessionId);
264
+ if (violation)
265
+ throw violation;
266
+ if (signal.aborted)
267
+ throw signal.reason instanceof Error ? signal.reason : new Error("Automation run aborted");
268
+ const snapshot = this.#runtime.snapshot(sessionId);
269
+ const finalViolation = budgetViolation(run.budget, {
270
+ turns,
271
+ toolCalls,
272
+ input: snapshot.usage.input,
273
+ output: snapshot.usage.output,
274
+ cost: snapshot.usage.costUsd,
275
+ });
276
+ if (finalViolation)
277
+ throw new AgentRunBudgetError(finalViolation);
278
+ return snapshot;
279
+ }
280
+ finally {
281
+ signal.removeEventListener("abort", abort);
282
+ unsubscribeBudget();
283
+ if (abortTask)
284
+ await abortTask;
285
+ await this.#agents?.cancelChildren(sessionId, `automation run ${run.id} stopped`).catch(() => undefined);
286
+ await this.#disposeSession(sessionId);
287
+ this.#agents?.unregisterRoot(sessionId);
288
+ }
289
+ });
290
+ }
291
+ async createAgentSession(sessionId, cwd, authorization) {
292
+ await this.#serializeSession(sessionId, async () => this.#ensureSession(sessionId, cwd, authorization));
293
+ }
294
+ hasAgentSession(sessionId) {
295
+ return this.#sessions.has(sessionId);
296
+ }
297
+ async startAgentPrompt(sessionId, text) {
298
+ await this.#serializeSession(sessionId, async () => {
299
+ this.#assertSession(sessionId);
300
+ await this.#runtime.prompt(sessionId, text);
301
+ });
302
+ await this.#agents?.sessionAvailable(sessionId);
303
+ }
304
+ async sendAgentMessage(sessionId, text, mode) {
305
+ await this.#serializeSession(sessionId, async () => {
306
+ this.#assertSession(sessionId);
307
+ if (mode === "steer")
308
+ await this.#runtime.steer(sessionId, text);
309
+ else if (mode === "follow_up")
310
+ await this.#runtime.followUp(sessionId, text);
311
+ else if (this.#runtime.snapshot(sessionId).status === "running")
312
+ await this.#runtime.followUp(sessionId, text);
313
+ else
314
+ await this.#runtime.prompt(sessionId, text);
315
+ });
316
+ }
317
+ async waitForAgentIdle(sessionId) {
318
+ this.#assertSession(sessionId);
319
+ await this.#runtime.waitForIdle(sessionId);
320
+ }
321
+ async abortAgentSession(sessionId, reason) {
322
+ if (!this.#sessions.has(sessionId))
323
+ return;
324
+ await this.#approvals.cancelSession(sessionId);
325
+ await this.#agents?.cancelChildren(this.#agents.parentIdForSession(sessionId), reason);
326
+ await this.#runtime.abort(sessionId, reason);
327
+ }
328
+ snapshotAgentSession(sessionId) {
329
+ this.#assertSession(sessionId);
330
+ return this.#runtime.snapshot(sessionId);
331
+ }
332
+ subscribeAgentSession(sessionId, sink) {
333
+ this.#assertSession(sessionId);
334
+ return this.#runtime.subscribe(sessionId, sink);
335
+ }
336
+ async closeAgentSession(sessionId) {
337
+ await this.#disposeSession(sessionId);
338
+ }
339
+ async dispose() {
340
+ await Promise.allSettled([...this.#sessionTails.values()]);
341
+ await Promise.all([...this.#sessions].map(async (sessionId) => this.#disposeSession(sessionId)));
342
+ }
343
+ async #ensureSession(sessionId, cwd, authorization) {
344
+ if (this.#sessions.has(sessionId))
345
+ return;
346
+ if (!this.#modelConfigured) {
347
+ throw new CommandError("model_not_configured", "No model is configured. Set config.model.provider, config.model.model, and credentials before prompting.");
348
+ }
349
+ await this.#runtime.create({
350
+ sessionId,
351
+ ...this.#sessionTemplate,
352
+ ...(cwd === undefined ? {} : { cwd }),
353
+ ...(authorization === undefined ? {} : { authorization }),
354
+ });
355
+ this.#sessions.add(sessionId);
356
+ this.#unsubscribers.set(sessionId, this.#runtime.subscribe(sessionId, (event) => this.#onRuntimeEvent(event)));
357
+ await this.#publishSnapshot(this.#runtime.snapshot(sessionId));
358
+ }
359
+ #onRuntimeEvent(event) {
360
+ const snapshot = this.#runtime.snapshot(event.sessionId);
361
+ void this.#kernel.dispatch({
362
+ id: event.id,
363
+ ts: event.ts,
364
+ type: "runtime.received",
365
+ event,
366
+ snapshot,
367
+ });
368
+ }
369
+ async #publishSnapshot(snapshot) {
370
+ await this.#kernel.dispatch({
371
+ id: this.#idFactory(),
372
+ ts: this.#clock().toISOString(),
373
+ type: "session.snapshot",
374
+ snapshot,
375
+ });
376
+ }
377
+ async #disposeSession(sessionId) {
378
+ if (!this.#sessions.has(sessionId))
379
+ return;
380
+ this.#unsubscribers.get(sessionId)?.();
381
+ this.#unsubscribers.delete(sessionId);
382
+ this.#sessions.delete(sessionId);
383
+ let failure;
384
+ try {
385
+ await this.#runtime.dispose(sessionId);
386
+ }
387
+ catch (error) {
388
+ failure = error;
389
+ }
390
+ await this.#kernel.dispatch({
391
+ id: this.#idFactory(),
392
+ ts: this.#clock().toISOString(),
393
+ type: "session.closed",
394
+ sessionId,
395
+ });
396
+ if (failure !== undefined)
397
+ throw failure;
398
+ }
399
+ #assertSession(sessionId) {
400
+ if (!this.#sessions.has(sessionId))
401
+ throw new CommandError("session_not_found", `Session does not exist: ${sessionId}`);
402
+ }
403
+ #requireAutomation() {
404
+ if (!this.#automation)
405
+ throw new CommandError("automation_unavailable", "Scheduler is not initialized");
406
+ return this.#automation;
407
+ }
408
+ #requireAgents() {
409
+ if (!this.#agents)
410
+ throw new CommandError("agents_unavailable", "Agent manager is not initialized");
411
+ return this.#agents;
412
+ }
413
+ #requireMcp() {
414
+ if (!this.#mcp)
415
+ throw new CommandError("mcp_unavailable", "MCP manager is not initialized");
416
+ return this.#mcp;
417
+ }
418
+ #requireResources() {
419
+ if (!this.#resources)
420
+ throw new CommandError("resources_unavailable", "Resource manager is not initialized");
421
+ return this.#resources;
422
+ }
423
+ #serializeSession(sessionId, operation) {
424
+ const previous = this.#sessionTails.get(sessionId) ?? Promise.resolve();
425
+ const result = previous.then(operation, operation);
426
+ const tail = result.then(() => undefined, () => undefined);
427
+ this.#sessionTails.set(sessionId, tail);
428
+ void tail.finally(() => {
429
+ if (this.#sessionTails.get(sessionId) === tail)
430
+ this.#sessionTails.delete(sessionId);
431
+ });
432
+ return result;
433
+ }
434
+ }
435
+ function requiredSessionId(command) {
436
+ if (!command.sessionId)
437
+ throw new CommandError("invalid_command", `${command.type} requires sessionId`);
438
+ return command.sessionId;
439
+ }
440
+ function exactPayload(value, allowed, type) {
441
+ if (typeof value !== "object" || value === null || Array.isArray(value)) {
442
+ throw new CommandError("invalid_command", `${type} payload must be an object`);
443
+ }
444
+ const record = value;
445
+ const accepted = new Set(allowed);
446
+ const unknown = Object.keys(record).filter((key) => !accepted.has(key));
447
+ if (unknown.length > 0) {
448
+ throw new CommandError("invalid_command", `${type} payload contains unknown fields: ${unknown.join(", ")}`);
449
+ }
450
+ return record;
451
+ }
452
+ function nonEmptyString(value, path) {
453
+ if (typeof value !== "string" || !value.trim())
454
+ throw new CommandError("invalid_command", `${path} must be non-empty`);
455
+ return value;
456
+ }
457
+ function optionalString(value, path) {
458
+ if (value === undefined)
459
+ return undefined;
460
+ return nonEmptyString(value, path);
461
+ }
462
+ function optionalEnum(value, allowed, path) {
463
+ if (value === undefined)
464
+ return undefined;
465
+ if (typeof value !== "string" || !allowed.includes(value)) {
466
+ throw new CommandError("invalid_command", `${path} must be one of: ${allowed.join(", ")}`);
467
+ }
468
+ return value;
469
+ }
470
+ function requiredEnum(value, allowed, path) {
471
+ const parsed = optionalEnum(value, allowed, path);
472
+ if (parsed === undefined)
473
+ throw new CommandError("invalid_command", `${path} is required`);
474
+ return parsed;
475
+ }
476
+ function booleanValue(value, path) {
477
+ if (typeof value !== "boolean")
478
+ throw new CommandError("invalid_command", `${path} must be boolean`);
479
+ return value;
480
+ }
481
+ function nullableSha256(value, path) {
482
+ if (value === null)
483
+ return null;
484
+ if (typeof value !== "string" || !/^[a-f0-9]{64}$/i.test(value)) {
485
+ throw new CommandError("invalid_command", `${path} must be null or a 64-character SHA-256`);
486
+ }
487
+ return value.toLowerCase();
488
+ }
489
+ function sha256Value(value, path) {
490
+ const parsed = nullableSha256(value, path);
491
+ if (parsed === null)
492
+ throw new CommandError("invalid_command", `${path} must be a 64-character SHA-256`);
493
+ return parsed;
494
+ }
495
+ function parseRunBudget(value, path) {
496
+ const budget = exactPayload(value, ["maxTurns", "maxToolCalls", "maxInputTokens", "maxOutputTokens", "maxChildren", "maxCostUsd"], path);
497
+ const maxCostUsd = budget["maxCostUsd"];
498
+ if (maxCostUsd !== undefined && (typeof maxCostUsd !== "number" || !Number.isFinite(maxCostUsd) || maxCostUsd <= 0)) {
499
+ throw new CommandError("invalid_command", `${path}.maxCostUsd must be positive`);
500
+ }
501
+ return {
502
+ maxTurns: positiveIntegerValue(budget["maxTurns"], `${path}.maxTurns`, 10_000),
503
+ maxToolCalls: positiveIntegerValue(budget["maxToolCalls"], `${path}.maxToolCalls`, 100_000),
504
+ maxInputTokens: positiveIntegerValue(budget["maxInputTokens"], `${path}.maxInputTokens`, 100_000_000),
505
+ maxOutputTokens: positiveIntegerValue(budget["maxOutputTokens"], `${path}.maxOutputTokens`, 100_000_000),
506
+ maxChildren: nonNegativeIntegerValue(budget["maxChildren"], `${path}.maxChildren`, 1_000),
507
+ ...(maxCostUsd === undefined ? {} : { maxCostUsd }),
508
+ };
509
+ }
510
+ function stringArray(value, path, maximum) {
511
+ if (!Array.isArray(value) || value.length === 0 || value.length > maximum) {
512
+ throw new CommandError("invalid_command", `${path} must contain between 1 and ${maximum} strings`);
513
+ }
514
+ return value.map((item, index) => nonEmptyString(item, `${path}[${index}]`));
515
+ }
516
+ function positiveIntegerValue(value, path, maximum) {
517
+ if (!Number.isSafeInteger(value) || Number(value) < 1 || Number(value) > maximum) {
518
+ throw new CommandError("invalid_command", `${path} must be an integer between 1 and ${maximum}`);
519
+ }
520
+ return Number(value);
521
+ }
522
+ function nonNegativeIntegerValue(value, path, maximum) {
523
+ if (!Number.isSafeInteger(value) || Number(value) < 0 || Number(value) > maximum) {
524
+ throw new CommandError("invalid_command", `${path} must be an integer between 0 and ${maximum}`);
525
+ }
526
+ return Number(value);
527
+ }
528
+ function budgetViolation(budget, usage) {
529
+ if (usage.turns > budget.maxTurns)
530
+ return `maxTurns exceeded: ${usage.turns}/${budget.maxTurns}`;
531
+ if (usage.toolCalls > budget.maxToolCalls)
532
+ return `maxToolCalls exceeded: ${usage.toolCalls}/${budget.maxToolCalls}`;
533
+ if (usage.input > budget.maxInputTokens)
534
+ return `maxInputTokens exceeded: ${usage.input}/${budget.maxInputTokens}`;
535
+ if (usage.output > budget.maxOutputTokens)
536
+ return `maxOutputTokens exceeded: ${usage.output}/${budget.maxOutputTokens}`;
537
+ if (budget.maxCostUsd !== undefined && usage.cost > budget.maxCostUsd) {
538
+ return `maxCostUsd exceeded: ${usage.cost}/${budget.maxCostUsd}`;
539
+ }
540
+ return undefined;
541
+ }
542
+ //# sourceMappingURL=agent-application.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agent-application.js","sourceRoot":"","sources":["../../src/application/agent-application.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ import { type ToolDefinition } from "@earendil-works/pi-coding-agent";
2
+ import type { AutomationControl } from "../application/agent-application.js";
3
+ export declare function createAutomationTools(control: () => AutomationControl): readonly ToolDefinition[];
4
+ //# sourceMappingURL=automation-tools.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"automation-tools.d.ts","sourceRoot":"","sources":["../../src/automation/automation-tools.ts"],"names":[],"mappings":"AAAA,OAAO,EAAc,KAAK,cAAc,EAAE,MAAM,iCAAiC,CAAC;AAGlF,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,qCAAqC,CAAC;AAY7E,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,MAAM,iBAAiB,GAAG,SAAS,cAAc,EAAE,CA0BjG"}
@@ -0,0 +1,35 @@
1
+ import { defineTool } from "@earendil-works/pi-coding-agent";
2
+ import { Type } from "typebox";
3
+ const parameters = Type.Object({
4
+ action: Type.Union([Type.Literal("list"), Type.Literal("put")]),
5
+ job: Type.Optional(Type.Unknown()),
6
+ expectedSha256: Type.Optional(Type.Union([Type.Null(), Type.String({ minLength: 64, maxLength: 64 })])),
7
+ }, { additionalProperties: false });
8
+ export function createAutomationTools(control) {
9
+ return [
10
+ defineTool({
11
+ name: "schedule",
12
+ label: "Schedule",
13
+ description: "List cron jobs or atomically create/update one using its source SHA-256. List first; use null only for a new job.",
14
+ parameters,
15
+ executionMode: "sequential",
16
+ execute: async (_toolCallId, params, signal) => {
17
+ if (signal?.aborted)
18
+ throw signal.reason instanceof Error ? signal.reason : new Error("Schedule operation aborted");
19
+ if (params.action === "list") {
20
+ if (params.job !== undefined || params.expectedSha256 !== undefined) {
21
+ throw new Error("schedule list does not accept job or expectedSha256");
22
+ }
23
+ const jobs = control().listJobs();
24
+ return { content: [{ type: "text", text: JSON.stringify(jobs, null, 2) }], details: { jobs } };
25
+ }
26
+ if (params.job === undefined || params.expectedSha256 === undefined) {
27
+ throw new Error("schedule put requires job and expectedSha256 (null for create)");
28
+ }
29
+ const job = await control().putJob(params.job, params.expectedSha256);
30
+ return { content: [{ type: "text", text: JSON.stringify(job, null, 2) }], details: { job } };
31
+ },
32
+ }),
33
+ ];
34
+ }
35
+ //# sourceMappingURL=automation-tools.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"automation-tools.js","sourceRoot":"","sources":["../../src/automation/automation-tools.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAuB,MAAM,iCAAiC,CAAC;AAClF,OAAO,EAAE,IAAI,EAAE,MAAM,SAAS,CAAC;AAK/B,MAAM,UAAU,GAAG,IAAI,CAAC,MAAM,CAC5B;IACE,MAAM,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC;IAC/D,GAAG,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;IAClC,cAAc,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,IAAI,CAAC,MAAM,CAAC,EAAE,SAAS,EAAE,EAAE,EAAE,SAAS,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC;CACxG,EACD,EAAE,oBAAoB,EAAE,KAAK,EAAE,CAChC,CAAC;AAEF,MAAM,UAAU,qBAAqB,CAAC,OAAgC;IACpE,OAAO;QACL,UAAU,CAAqE;YAC7E,IAAI,EAAE,UAAU;YAChB,KAAK,EAAE,UAAU;YACjB,WAAW,EACT,mHAAmH;YACrH,UAAU;YACV,aAAa,EAAE,YAAY;YAC3B,OAAO,EAAE,KAAK,EAAE,WAAW,EAAE,MAAM,EAAE,MAAM,EAAE,EAAE;gBAC7C,IAAI,MAAM,EAAE,OAAO;oBAAE,MAAM,MAAM,CAAC,MAAM,YAAY,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,4BAA4B,CAAC,CAAC;gBACpH,IAAI,MAAM,CAAC,MAAM,KAAK,MAAM,EAAE,CAAC;oBAC7B,IAAI,MAAM,CAAC,GAAG,KAAK,SAAS,IAAI,MAAM,CAAC,cAAc,KAAK,SAAS,EAAE,CAAC;wBACpE,MAAM,IAAI,KAAK,CAAC,qDAAqD,CAAC,CAAC;oBACzE,CAAC;oBACD,MAAM,IAAI,GAAG,OAAO,EAAE,CAAC,QAAQ,EAAE,CAAC;oBAClC,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,OAAO,EAAE,EAAE,IAAI,EAAE,EAAE,CAAC;gBACjG,CAAC;gBACD,IAAI,MAAM,CAAC,GAAG,KAAK,SAAS,IAAI,MAAM,CAAC,cAAc,KAAK,SAAS,EAAE,CAAC;oBACpE,MAAM,IAAI,KAAK,CAAC,gEAAgE,CAAC,CAAC;gBACpF,CAAC;gBACD,MAAM,GAAG,GAAG,MAAM,OAAO,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,EAAE,MAAM,CAAC,cAAc,CAAC,CAAC;gBACtE,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,OAAO,EAAE,EAAE,GAAG,EAAE,EAAE,CAAC;YAC/F,CAAC;SACF,CAAC;KACH,CAAC;AACJ,CAAC"}
@@ -0,0 +1,11 @@
1
+ export declare function validateFiveFieldCron(pattern: string, timezone: string): void;
2
+ export declare class CronSchedule {
3
+ #private;
4
+ constructor(pattern: string, timezone: string);
5
+ next(after: Date): Date | null;
6
+ previous(before: Date): Date | null;
7
+ nextMany(count: number, after: Date): Date[];
8
+ stop(): void;
9
+ }
10
+ export declare function validateTimeZone(timezone: string): void;
11
+ //# sourceMappingURL=cron-adapter.d.ts.map