@getpaseo/server 0.1.35 → 0.1.37

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 (153) hide show
  1. package/dist/scripts/daemon-runner.js +31 -1
  2. package/dist/scripts/daemon-runner.js.map +1 -1
  3. package/dist/scripts/supervisor.js +16 -6
  4. package/dist/scripts/supervisor.js.map +1 -1
  5. package/dist/server/client/daemon-client.d.ts +175 -0
  6. package/dist/server/client/daemon-client.d.ts.map +1 -1
  7. package/dist/server/client/daemon-client.js +235 -0
  8. package/dist/server/client/daemon-client.js.map +1 -1
  9. package/dist/server/server/agent/agent-manager.d.ts +13 -0
  10. package/dist/server/server/agent/agent-manager.d.ts.map +1 -1
  11. package/dist/server/server/agent/agent-manager.js +53 -0
  12. package/dist/server/server/agent/agent-manager.js.map +1 -1
  13. package/dist/server/server/agent/agent-storage.d.ts +10 -10
  14. package/dist/server/server/agent/agent-storage.js +9 -4
  15. package/dist/server/server/agent/agent-storage.js.map +1 -1
  16. package/dist/server/server/agent/provider-launch-config.d.ts.map +1 -1
  17. package/dist/server/server/agent/provider-launch-config.js +38 -1
  18. package/dist/server/server/agent/provider-launch-config.js.map +1 -1
  19. package/dist/server/server/agent/providers/claude-agent.d.ts.map +1 -1
  20. package/dist/server/server/agent/providers/claude-agent.js +24 -5
  21. package/dist/server/server/agent/providers/claude-agent.js.map +1 -1
  22. package/dist/server/server/agent-attention-policy.d.ts +1 -1
  23. package/dist/server/server/agent-attention-policy.d.ts.map +1 -1
  24. package/dist/server/server/bootstrap.d.ts.map +1 -1
  25. package/dist/server/server/bootstrap.js +57 -18
  26. package/dist/server/server/bootstrap.js.map +1 -1
  27. package/dist/server/server/chat/chat-mentions.d.ts +31 -0
  28. package/dist/server/server/chat/chat-mentions.d.ts.map +1 -0
  29. package/dist/server/server/chat/chat-mentions.js +71 -0
  30. package/dist/server/server/chat/chat-mentions.js.map +1 -0
  31. package/dist/server/server/chat/chat-rpc-schemas.d.ts +728 -0
  32. package/dist/server/server/chat/chat-rpc-schemas.d.ts.map +1 -0
  33. package/dist/server/server/chat/chat-rpc-schemas.js +103 -0
  34. package/dist/server/server/chat/chat-rpc-schemas.js.map +1 -0
  35. package/dist/server/server/chat/chat-service.d.ts +74 -0
  36. package/dist/server/server/chat/chat-service.d.ts.map +1 -0
  37. package/dist/server/server/chat/chat-service.js +330 -0
  38. package/dist/server/server/chat/chat-service.js.map +1 -0
  39. package/dist/server/server/chat/chat-types.d.ts +75 -0
  40. package/dist/server/server/chat/chat-types.d.ts.map +1 -0
  41. package/dist/server/server/chat/chat-types.js +22 -0
  42. package/dist/server/server/chat/chat-types.js.map +1 -0
  43. package/dist/server/server/checkout-diff-manager.d.ts +41 -0
  44. package/dist/server/server/checkout-diff-manager.d.ts.map +1 -0
  45. package/dist/server/server/checkout-diff-manager.js +272 -0
  46. package/dist/server/server/checkout-diff-manager.js.map +1 -0
  47. package/dist/server/server/checkout-git-utils.d.ts +9 -0
  48. package/dist/server/server/checkout-git-utils.d.ts.map +1 -0
  49. package/dist/server/server/checkout-git-utils.js +37 -0
  50. package/dist/server/server/checkout-git-utils.js.map +1 -0
  51. package/dist/server/server/loop/rpc-schemas.d.ts +2937 -0
  52. package/dist/server/server/loop/rpc-schemas.d.ts.map +1 -0
  53. package/dist/server/server/loop/rpc-schemas.js +159 -0
  54. package/dist/server/server/loop/rpc-schemas.js.map +1 -0
  55. package/dist/server/server/loop-service.d.ts +520 -0
  56. package/dist/server/server/loop-service.d.ts.map +1 -0
  57. package/dist/server/server/loop-service.js +741 -0
  58. package/dist/server/server/loop-service.js.map +1 -0
  59. package/dist/server/server/persisted-config.d.ts +10 -10
  60. package/dist/server/server/schedule/cron.d.ts +4 -0
  61. package/dist/server/server/schedule/cron.d.ts.map +1 -0
  62. package/dist/server/server/schedule/cron.js +103 -0
  63. package/dist/server/server/schedule/cron.js.map +1 -0
  64. package/dist/server/server/schedule/rpc-schemas.d.ts +2773 -0
  65. package/dist/server/server/schedule/rpc-schemas.d.ts.map +1 -0
  66. package/dist/server/server/schedule/rpc-schemas.js +112 -0
  67. package/dist/server/server/schedule/rpc-schemas.js.map +1 -0
  68. package/dist/server/server/schedule/service.d.ts +39 -0
  69. package/dist/server/server/schedule/service.d.ts.map +1 -0
  70. package/dist/server/server/schedule/service.js +397 -0
  71. package/dist/server/server/schedule/service.js.map +1 -0
  72. package/dist/server/server/schedule/store.d.ts +13 -0
  73. package/dist/server/server/schedule/store.d.ts.map +1 -0
  74. package/dist/server/server/schedule/store.js +56 -0
  75. package/dist/server/server/schedule/store.js.map +1 -0
  76. package/dist/server/server/schedule/types.d.ts +710 -0
  77. package/dist/server/server/schedule/types.d.ts.map +1 -0
  78. package/dist/server/server/schedule/types.js +73 -0
  79. package/dist/server/server/schedule/types.js.map +1 -0
  80. package/dist/server/server/session.d.ts +40 -19
  81. package/dist/server/server/session.d.ts.map +1 -1
  82. package/dist/server/server/session.js +778 -567
  83. package/dist/server/server/session.js.map +1 -1
  84. package/dist/server/server/speech/providers/local/sherpa/sherpa-runtime-env.d.ts.map +1 -1
  85. package/dist/server/server/speech/providers/local/sherpa/sherpa-runtime-env.js +19 -3
  86. package/dist/server/server/speech/providers/local/sherpa/sherpa-runtime-env.js.map +1 -1
  87. package/dist/server/server/websocket-server.d.ts +12 -1
  88. package/dist/server/server/websocket-server.d.ts.map +1 -1
  89. package/dist/server/server/websocket-server.js +71 -14
  90. package/dist/server/server/websocket-server.js.map +1 -1
  91. package/dist/server/shared/messages.d.ts +37933 -16895
  92. package/dist/server/shared/messages.d.ts.map +1 -1
  93. package/dist/server/shared/messages.js +41 -0
  94. package/dist/server/shared/messages.js.map +1 -1
  95. package/dist/server/terminal/terminal-manager.js +2 -2
  96. package/dist/server/terminal/terminal-manager.js.map +1 -1
  97. package/dist/server/utils/checkout-git.d.ts +12 -0
  98. package/dist/server/utils/checkout-git.d.ts.map +1 -1
  99. package/dist/server/utils/checkout-git.js +73 -3
  100. package/dist/server/utils/checkout-git.js.map +1 -1
  101. package/dist/server/utils/directory-suggestions.js +20 -4
  102. package/dist/server/utils/directory-suggestions.js.map +1 -1
  103. package/dist/src/server/agent/agent-manager.js +53 -0
  104. package/dist/src/server/agent/agent-manager.js.map +1 -1
  105. package/dist/src/server/agent/agent-storage.js +9 -4
  106. package/dist/src/server/agent/agent-storage.js.map +1 -1
  107. package/dist/src/server/agent/provider-launch-config.js +38 -1
  108. package/dist/src/server/agent/provider-launch-config.js.map +1 -1
  109. package/dist/src/server/agent/providers/claude-agent.js +24 -5
  110. package/dist/src/server/agent/providers/claude-agent.js.map +1 -1
  111. package/dist/src/server/bootstrap.js +57 -18
  112. package/dist/src/server/bootstrap.js.map +1 -1
  113. package/dist/src/server/chat/chat-mentions.js +71 -0
  114. package/dist/src/server/chat/chat-mentions.js.map +1 -0
  115. package/dist/src/server/chat/chat-rpc-schemas.js +103 -0
  116. package/dist/src/server/chat/chat-rpc-schemas.js.map +1 -0
  117. package/dist/src/server/chat/chat-service.js +330 -0
  118. package/dist/src/server/chat/chat-service.js.map +1 -0
  119. package/dist/src/server/chat/chat-types.js +22 -0
  120. package/dist/src/server/chat/chat-types.js.map +1 -0
  121. package/dist/src/server/checkout-diff-manager.js +272 -0
  122. package/dist/src/server/checkout-diff-manager.js.map +1 -0
  123. package/dist/src/server/checkout-git-utils.js +37 -0
  124. package/dist/src/server/checkout-git-utils.js.map +1 -0
  125. package/dist/src/server/loop/rpc-schemas.js +159 -0
  126. package/dist/src/server/loop/rpc-schemas.js.map +1 -0
  127. package/dist/src/server/loop-service.js +741 -0
  128. package/dist/src/server/loop-service.js.map +1 -0
  129. package/dist/src/server/schedule/cron.js +103 -0
  130. package/dist/src/server/schedule/cron.js.map +1 -0
  131. package/dist/src/server/schedule/rpc-schemas.js +112 -0
  132. package/dist/src/server/schedule/rpc-schemas.js.map +1 -0
  133. package/dist/src/server/schedule/service.js +397 -0
  134. package/dist/src/server/schedule/service.js.map +1 -0
  135. package/dist/src/server/schedule/store.js +56 -0
  136. package/dist/src/server/schedule/store.js.map +1 -0
  137. package/dist/src/server/schedule/types.js +73 -0
  138. package/dist/src/server/schedule/types.js.map +1 -0
  139. package/dist/src/server/session.js +778 -567
  140. package/dist/src/server/session.js.map +1 -1
  141. package/dist/src/server/speech/providers/local/sherpa/sherpa-runtime-env.js +19 -3
  142. package/dist/src/server/speech/providers/local/sherpa/sherpa-runtime-env.js.map +1 -1
  143. package/dist/src/server/websocket-server.js +71 -14
  144. package/dist/src/server/websocket-server.js.map +1 -1
  145. package/dist/src/shared/messages.js +41 -0
  146. package/dist/src/shared/messages.js.map +1 -1
  147. package/dist/src/terminal/terminal-manager.js +2 -2
  148. package/dist/src/terminal/terminal-manager.js.map +1 -1
  149. package/dist/src/utils/checkout-git.js +73 -3
  150. package/dist/src/utils/checkout-git.js.map +1 -1
  151. package/dist/src/utils/directory-suggestions.js +20 -4
  152. package/dist/src/utils/directory-suggestions.js.map +1 -1
  153. package/package.json +4 -3
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rpc-schemas.d.ts","sourceRoot":"","sources":["../../../../src/server/schedule/rpc-schemas.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAwBxB,eAAO,MAAM,2BAA2B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAStC,CAAC;AAEH,eAAO,MAAM,yBAAyB;;;;;;;;;EAGpC,CAAC;AAEH,eAAO,MAAM,4BAA4B;;;;;;;;;;;;EAIvC,CAAC;AAEH,eAAO,MAAM,yBAAyB;;;;;;;;;;;;EAIpC,CAAC;AAEH,eAAO,MAAM,0BAA0B;;;;;;;;;;;;EAIrC,CAAC;AAEH,eAAO,MAAM,2BAA2B;;;;;;;;;;;;EAItC,CAAC;AAEH,eAAO,MAAM,2BAA2B;;;;;;;;;;;;EAItC,CAAC;AAEH,eAAO,MAAM,4BAA4B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAOvC,CAAC;AAEH,eAAO,MAAM,0BAA0B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAOrC,CAAC;AAEH,eAAO,MAAM,6BAA6B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAOxC,CAAC;AAEH,eAAO,MAAM,0BAA0B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAOrC,CAAC;AAEH,eAAO,MAAM,2BAA2B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAOtC,CAAC;AAEH,eAAO,MAAM,4BAA4B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAOvC,CAAC;AAEH,eAAO,MAAM,4BAA4B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAOvC,CAAC"}
@@ -0,0 +1,112 @@
1
+ import { z } from "zod";
2
+ import { ScheduleCadenceSchema, ScheduleRunSchema, ScheduleSummarySchema, StoredScheduleSchema, ScheduleTargetSchema, } from "./types.js";
3
+ const ScheduleCreateTargetSchema = z.discriminatedUnion("type", [
4
+ z.object({
5
+ type: z.literal("self"),
6
+ agentId: z.string().uuid(),
7
+ }),
8
+ z.object({
9
+ type: z.literal("agent"),
10
+ agentId: z.string().uuid(),
11
+ }),
12
+ z.object({
13
+ type: z.literal("new-agent"),
14
+ config: ScheduleTargetSchema.options[1].shape.config,
15
+ }),
16
+ ]);
17
+ export const ScheduleCreateRequestSchema = z.object({
18
+ type: z.literal("schedule/create"),
19
+ requestId: z.string(),
20
+ prompt: z.string().min(1),
21
+ name: z.string().optional(),
22
+ cadence: ScheduleCadenceSchema,
23
+ target: ScheduleCreateTargetSchema,
24
+ maxRuns: z.number().int().positive().optional(),
25
+ expiresAt: z.string().optional(),
26
+ });
27
+ export const ScheduleListRequestSchema = z.object({
28
+ type: z.literal("schedule/list"),
29
+ requestId: z.string(),
30
+ });
31
+ export const ScheduleInspectRequestSchema = z.object({
32
+ type: z.literal("schedule/inspect"),
33
+ requestId: z.string(),
34
+ scheduleId: z.string(),
35
+ });
36
+ export const ScheduleLogsRequestSchema = z.object({
37
+ type: z.literal("schedule/logs"),
38
+ requestId: z.string(),
39
+ scheduleId: z.string(),
40
+ });
41
+ export const SchedulePauseRequestSchema = z.object({
42
+ type: z.literal("schedule/pause"),
43
+ requestId: z.string(),
44
+ scheduleId: z.string(),
45
+ });
46
+ export const ScheduleResumeRequestSchema = z.object({
47
+ type: z.literal("schedule/resume"),
48
+ requestId: z.string(),
49
+ scheduleId: z.string(),
50
+ });
51
+ export const ScheduleDeleteRequestSchema = z.object({
52
+ type: z.literal("schedule/delete"),
53
+ requestId: z.string(),
54
+ scheduleId: z.string(),
55
+ });
56
+ export const ScheduleCreateResponseSchema = z.object({
57
+ type: z.literal("schedule/create/response"),
58
+ payload: z.object({
59
+ requestId: z.string(),
60
+ schedule: ScheduleSummarySchema.nullable(),
61
+ error: z.string().nullable(),
62
+ }),
63
+ });
64
+ export const ScheduleListResponseSchema = z.object({
65
+ type: z.literal("schedule/list/response"),
66
+ payload: z.object({
67
+ requestId: z.string(),
68
+ schedules: z.array(ScheduleSummarySchema),
69
+ error: z.string().nullable(),
70
+ }),
71
+ });
72
+ export const ScheduleInspectResponseSchema = z.object({
73
+ type: z.literal("schedule/inspect/response"),
74
+ payload: z.object({
75
+ requestId: z.string(),
76
+ schedule: StoredScheduleSchema.nullable(),
77
+ error: z.string().nullable(),
78
+ }),
79
+ });
80
+ export const ScheduleLogsResponseSchema = z.object({
81
+ type: z.literal("schedule/logs/response"),
82
+ payload: z.object({
83
+ requestId: z.string(),
84
+ runs: z.array(ScheduleRunSchema),
85
+ error: z.string().nullable(),
86
+ }),
87
+ });
88
+ export const SchedulePauseResponseSchema = z.object({
89
+ type: z.literal("schedule/pause/response"),
90
+ payload: z.object({
91
+ requestId: z.string(),
92
+ schedule: ScheduleSummarySchema.nullable(),
93
+ error: z.string().nullable(),
94
+ }),
95
+ });
96
+ export const ScheduleResumeResponseSchema = z.object({
97
+ type: z.literal("schedule/resume/response"),
98
+ payload: z.object({
99
+ requestId: z.string(),
100
+ schedule: ScheduleSummarySchema.nullable(),
101
+ error: z.string().nullable(),
102
+ }),
103
+ });
104
+ export const ScheduleDeleteResponseSchema = z.object({
105
+ type: z.literal("schedule/delete/response"),
106
+ payload: z.object({
107
+ requestId: z.string(),
108
+ scheduleId: z.string(),
109
+ error: z.string().nullable(),
110
+ }),
111
+ });
112
+ //# sourceMappingURL=rpc-schemas.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rpc-schemas.js","sourceRoot":"","sources":["../../../../src/server/schedule/rpc-schemas.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,39 @@
1
+ import type { Logger } from "pino";
2
+ import { AgentManager } from "../agent/agent-manager.js";
3
+ import { AgentStorage } from "../agent/agent-storage.js";
4
+ import type { CreateScheduleInput, ScheduleExecutionResult, ScheduleRun, StoredSchedule } from "./types.js";
5
+ export interface ScheduleServiceOptions {
6
+ paseoHome: string;
7
+ logger: Logger;
8
+ agentManager: AgentManager;
9
+ agentStorage: AgentStorage;
10
+ now?: () => Date;
11
+ runner?: (schedule: StoredSchedule) => Promise<ScheduleExecutionResult>;
12
+ }
13
+ export declare class ScheduleService {
14
+ private readonly store;
15
+ private readonly logger;
16
+ private readonly agentManager;
17
+ private readonly agentStorage;
18
+ private readonly now;
19
+ private readonly runner;
20
+ private readonly runningScheduleIds;
21
+ private tickTimer;
22
+ constructor(options: ScheduleServiceOptions);
23
+ start(): Promise<void>;
24
+ stop(): Promise<void>;
25
+ create(input: CreateScheduleInput): Promise<StoredSchedule>;
26
+ list(): Promise<StoredSchedule[]>;
27
+ inspect(id: string): Promise<StoredSchedule>;
28
+ logs(id: string): Promise<ScheduleRun[]>;
29
+ pause(id: string): Promise<StoredSchedule>;
30
+ resume(id: string): Promise<StoredSchedule>;
31
+ delete(id: string): Promise<void>;
32
+ tick(): Promise<void>;
33
+ private recoverInterruptedRuns;
34
+ private runSchedule;
35
+ private finishRun;
36
+ private executeSchedule;
37
+ private ensureAgentLoaded;
38
+ }
39
+ //# sourceMappingURL=service.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"service.d.ts","sourceRoot":"","sources":["../../../../src/server/schedule/service.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,MAAM,CAAC;AACnC,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AAEzD,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AASzD,OAAO,KAAK,EACV,mBAAmB,EACnB,uBAAuB,EACvB,WAAW,EACX,cAAc,EACf,MAAM,YAAY,CAAC;AA4EpB,MAAM,WAAW,sBAAsB;IACrC,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,YAAY,EAAE,YAAY,CAAC;IAC3B,YAAY,EAAE,YAAY,CAAC;IAC3B,GAAG,CAAC,EAAE,MAAM,IAAI,CAAC;IACjB,MAAM,CAAC,EAAE,CAAC,QAAQ,EAAE,cAAc,KAAK,OAAO,CAAC,uBAAuB,CAAC,CAAC;CACzE;AAED,qBAAa,eAAe;IAC1B,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAgB;IACtC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAS;IAChC,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAe;IAC5C,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAe;IAC5C,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAa;IACjC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAiE;IACxF,OAAO,CAAC,QAAQ,CAAC,kBAAkB,CAAqB;IACxD,OAAO,CAAC,SAAS,CAA+C;gBAEpD,OAAO,EAAE,sBAAsB;IASrC,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IActB,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAOrB,MAAM,CAAC,KAAK,EAAE,mBAAmB,GAAG,OAAO,CAAC,cAAc,CAAC;IAsB3D,IAAI,IAAI,OAAO,CAAC,cAAc,EAAE,CAAC;IAIjC,OAAO,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC;IAQ5C,IAAI,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC;IAKxC,KAAK,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC;IAoB1C,MAAM,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC;IAoB3C,MAAM,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAIjC,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;YAqBb,sBAAsB;YAwBtB,WAAW;YA4CX,SAAS;YAmDT,eAAe;YAoDf,iBAAiB;CAoDhC"}
@@ -0,0 +1,397 @@
1
+ import { randomUUID } from "node:crypto";
2
+ import { join } from "node:path";
3
+ import { curateAgentActivity } from "../agent/activity-curator.js";
4
+ import { buildConfigOverrides, buildSessionConfig, extractTimestamps } from "../persistence-hooks.js";
5
+ import { ScheduleStore } from "./store.js";
6
+ import { computeNextRunAt, validateScheduleCadence } from "./cron.js";
7
+ const SCHEDULE_TICK_INTERVAL_MS = 1000;
8
+ const pendingAgentInitializations = new Map();
9
+ function trimOptionalName(value) {
10
+ if (typeof value !== "string") {
11
+ return null;
12
+ }
13
+ const trimmed = value.trim();
14
+ return trimmed.length > 0 ? trimmed : null;
15
+ }
16
+ function normalizePrompt(prompt) {
17
+ const trimmed = prompt.trim();
18
+ if (!trimmed) {
19
+ throw new Error("Schedule prompt is required");
20
+ }
21
+ return trimmed;
22
+ }
23
+ function normalizeMaxRuns(value) {
24
+ if (value == null) {
25
+ return null;
26
+ }
27
+ if (!Number.isInteger(value) || value <= 0) {
28
+ throw new Error("maxRuns must be a positive integer");
29
+ }
30
+ return value;
31
+ }
32
+ function countCompletedRuns(schedule) {
33
+ return schedule.runs.filter((run) => run.status !== "running").length;
34
+ }
35
+ function shouldCompleteSchedule(schedule, now) {
36
+ if (schedule.expiresAt && new Date(schedule.expiresAt).getTime() <= now.getTime()) {
37
+ return true;
38
+ }
39
+ if (schedule.maxRuns == null) {
40
+ return false;
41
+ }
42
+ return countCompletedRuns(schedule) >= schedule.maxRuns;
43
+ }
44
+ function completeSchedule(schedule, now) {
45
+ return {
46
+ ...schedule,
47
+ status: "completed",
48
+ nextRunAt: null,
49
+ pausedAt: null,
50
+ updatedAt: now.toISOString(),
51
+ };
52
+ }
53
+ function buildRunOutput(params) {
54
+ if (params.output && params.output.trim().length > 0) {
55
+ return params.output;
56
+ }
57
+ if (params.finalText.trim().length > 0) {
58
+ return params.finalText.trim();
59
+ }
60
+ if (params.timelineText.trim().length > 0) {
61
+ return params.timelineText.trim();
62
+ }
63
+ return null;
64
+ }
65
+ function buildAgentPrompt(text) {
66
+ return text;
67
+ }
68
+ export class ScheduleService {
69
+ constructor(options) {
70
+ this.runningScheduleIds = new Set();
71
+ this.tickTimer = null;
72
+ this.store = new ScheduleStore(join(options.paseoHome, "schedules"));
73
+ this.logger = options.logger.child({ module: "schedule-service" });
74
+ this.agentManager = options.agentManager;
75
+ this.agentStorage = options.agentStorage;
76
+ this.now = options.now ?? (() => new Date());
77
+ this.runner = options.runner ?? ((schedule) => this.executeSchedule(schedule));
78
+ }
79
+ async start() {
80
+ await this.recoverInterruptedRuns();
81
+ if (this.tickTimer) {
82
+ return;
83
+ }
84
+ const timer = setInterval(() => {
85
+ void this.tick().catch((error) => {
86
+ this.logger.error({ err: error }, "Failed to process schedule tick");
87
+ });
88
+ }, SCHEDULE_TICK_INTERVAL_MS);
89
+ timer.unref?.();
90
+ this.tickTimer = timer;
91
+ }
92
+ async stop() {
93
+ if (this.tickTimer) {
94
+ clearInterval(this.tickTimer);
95
+ this.tickTimer = null;
96
+ }
97
+ }
98
+ async create(input) {
99
+ const now = this.now();
100
+ const prompt = normalizePrompt(input.prompt);
101
+ validateScheduleCadence(input.cadence);
102
+ const schedule = await this.store.create({
103
+ name: trimOptionalName(input.name),
104
+ prompt,
105
+ cadence: input.cadence,
106
+ target: input.target,
107
+ status: "active",
108
+ createdAt: now.toISOString(),
109
+ updatedAt: now.toISOString(),
110
+ nextRunAt: computeNextRunAt(input.cadence, now).toISOString(),
111
+ lastRunAt: null,
112
+ pausedAt: null,
113
+ expiresAt: input.expiresAt ?? null,
114
+ maxRuns: normalizeMaxRuns(input.maxRuns),
115
+ runs: [],
116
+ });
117
+ return schedule;
118
+ }
119
+ async list() {
120
+ return this.store.list();
121
+ }
122
+ async inspect(id) {
123
+ const schedule = await this.store.get(id);
124
+ if (!schedule) {
125
+ throw new Error(`Schedule not found: ${id}`);
126
+ }
127
+ return schedule;
128
+ }
129
+ async logs(id) {
130
+ const schedule = await this.inspect(id);
131
+ return [...schedule.runs].sort((left, right) => left.startedAt.localeCompare(right.startedAt));
132
+ }
133
+ async pause(id) {
134
+ const schedule = await this.inspect(id);
135
+ if (schedule.status === "completed") {
136
+ throw new Error(`Schedule ${id} is already completed`);
137
+ }
138
+ if (schedule.status === "paused") {
139
+ return schedule;
140
+ }
141
+ const now = this.now();
142
+ const paused = {
143
+ ...schedule,
144
+ status: "paused",
145
+ nextRunAt: null,
146
+ pausedAt: now.toISOString(),
147
+ updatedAt: now.toISOString(),
148
+ };
149
+ await this.store.put(paused);
150
+ return paused;
151
+ }
152
+ async resume(id) {
153
+ const schedule = await this.inspect(id);
154
+ if (schedule.status === "completed") {
155
+ throw new Error(`Schedule ${id} is already completed`);
156
+ }
157
+ if (schedule.status === "active") {
158
+ return schedule;
159
+ }
160
+ const now = this.now();
161
+ const resumed = {
162
+ ...schedule,
163
+ status: "active",
164
+ pausedAt: null,
165
+ nextRunAt: computeNextRunAt(schedule.cadence, now).toISOString(),
166
+ updatedAt: now.toISOString(),
167
+ };
168
+ await this.store.put(resumed);
169
+ return resumed;
170
+ }
171
+ async delete(id) {
172
+ await this.store.delete(id);
173
+ }
174
+ async tick() {
175
+ const now = this.now();
176
+ const schedules = await this.store.list();
177
+ for (const schedule of schedules) {
178
+ if (schedule.status !== "active" || !schedule.nextRunAt) {
179
+ continue;
180
+ }
181
+ if (this.runningScheduleIds.has(schedule.id)) {
182
+ continue;
183
+ }
184
+ if (shouldCompleteSchedule(schedule, now)) {
185
+ await this.store.put(completeSchedule(schedule, now));
186
+ continue;
187
+ }
188
+ if (new Date(schedule.nextRunAt).getTime() > now.getTime()) {
189
+ continue;
190
+ }
191
+ await this.runSchedule(schedule, now);
192
+ }
193
+ }
194
+ async recoverInterruptedRuns() {
195
+ const schedules = await this.store.list();
196
+ const now = this.now();
197
+ for (const schedule of schedules) {
198
+ const runningIndex = schedule.runs.findIndex((run) => run.status === "running");
199
+ if (runningIndex === -1) {
200
+ continue;
201
+ }
202
+ const runs = [...schedule.runs];
203
+ runs[runningIndex] = {
204
+ ...runs[runningIndex],
205
+ status: "failed",
206
+ endedAt: now.toISOString(),
207
+ error: "Daemon restarted before the scheduled run completed",
208
+ };
209
+ const nextSchedule = {
210
+ ...schedule,
211
+ runs,
212
+ updatedAt: now.toISOString(),
213
+ };
214
+ await this.store.put(nextSchedule);
215
+ }
216
+ }
217
+ async runSchedule(schedule, now) {
218
+ this.runningScheduleIds.add(schedule.id);
219
+ const runId = randomUUID();
220
+ const runningRun = {
221
+ id: runId,
222
+ scheduledFor: schedule.nextRunAt ?? now.toISOString(),
223
+ startedAt: now.toISOString(),
224
+ endedAt: null,
225
+ status: "running",
226
+ agentId: null,
227
+ output: null,
228
+ error: null,
229
+ };
230
+ const scheduleWithRun = {
231
+ ...schedule,
232
+ updatedAt: now.toISOString(),
233
+ runs: [...schedule.runs, runningRun],
234
+ };
235
+ await this.store.put(scheduleWithRun);
236
+ try {
237
+ const result = await this.runner(scheduleWithRun);
238
+ await this.finishRun({
239
+ scheduleId: schedule.id,
240
+ runId,
241
+ status: "succeeded",
242
+ agentId: result.agentId,
243
+ output: result.output,
244
+ error: null,
245
+ });
246
+ }
247
+ catch (error) {
248
+ await this.finishRun({
249
+ scheduleId: schedule.id,
250
+ runId,
251
+ status: "failed",
252
+ agentId: null,
253
+ output: null,
254
+ error: error instanceof Error ? error.message : String(error),
255
+ });
256
+ }
257
+ finally {
258
+ this.runningScheduleIds.delete(schedule.id);
259
+ }
260
+ }
261
+ async finishRun(params) {
262
+ const schedule = await this.inspect(params.scheduleId);
263
+ const now = this.now();
264
+ const completedRuns = schedule.runs.map((run) => run.id === params.runId
265
+ ? {
266
+ ...run,
267
+ status: params.status,
268
+ endedAt: now.toISOString(),
269
+ agentId: params.agentId,
270
+ output: params.output,
271
+ error: params.error,
272
+ }
273
+ : run);
274
+ let updated = {
275
+ ...schedule,
276
+ runs: completedRuns,
277
+ lastRunAt: now.toISOString(),
278
+ updatedAt: now.toISOString(),
279
+ };
280
+ if (shouldCompleteSchedule(updated, now)) {
281
+ updated = completeSchedule(updated, now);
282
+ }
283
+ else if (updated.status === "paused") {
284
+ updated = {
285
+ ...updated,
286
+ nextRunAt: null,
287
+ };
288
+ }
289
+ else {
290
+ const after = new Date(schedule.nextRunAt ?? now.toISOString());
291
+ let nextRunAt = computeNextRunAt(updated.cadence, after);
292
+ while (nextRunAt.getTime() <= now.getTime()) {
293
+ nextRunAt = computeNextRunAt(updated.cadence, nextRunAt);
294
+ }
295
+ updated = {
296
+ ...updated,
297
+ nextRunAt: nextRunAt.toISOString(),
298
+ };
299
+ }
300
+ await this.store.put(updated);
301
+ }
302
+ async executeSchedule(schedule) {
303
+ if (schedule.target.type === "agent") {
304
+ const agent = await this.ensureAgentLoaded(schedule.target.agentId);
305
+ if (this.agentManager.hasInFlightRun(agent.id)) {
306
+ throw new Error(`Agent ${agent.id} already has an active run`);
307
+ }
308
+ this.agentManager.recordUserMessage(agent.id, schedule.prompt, { emitState: false });
309
+ const result = await this.agentManager.runAgent(agent.id, buildAgentPrompt(schedule.prompt));
310
+ const timelineText = curateAgentActivity(result.timeline);
311
+ return {
312
+ agentId: agent.id,
313
+ output: buildRunOutput({
314
+ output: null,
315
+ timelineText,
316
+ finalText: result.finalText,
317
+ }),
318
+ };
319
+ }
320
+ const config = {
321
+ provider: schedule.target.config.provider,
322
+ cwd: schedule.target.config.cwd,
323
+ modeId: schedule.target.config.modeId,
324
+ model: schedule.target.config.model,
325
+ thinkingOptionId: schedule.target.config.thinkingOptionId,
326
+ title: schedule.target.config.title,
327
+ approvalPolicy: schedule.target.config.approvalPolicy,
328
+ sandboxMode: schedule.target.config.sandboxMode,
329
+ networkAccess: schedule.target.config.networkAccess,
330
+ webSearch: schedule.target.config.webSearch,
331
+ extra: schedule.target.config.extra,
332
+ systemPrompt: schedule.target.config.systemPrompt,
333
+ mcpServers: schedule.target.config.mcpServers,
334
+ };
335
+ const labels = {
336
+ "paseo.schedule-id": schedule.id,
337
+ "paseo.schedule-run": randomUUID(),
338
+ };
339
+ const agent = await this.agentManager.createAgent(config, undefined, { labels });
340
+ this.agentManager.recordUserMessage(agent.id, schedule.prompt, { emitState: false });
341
+ const result = await this.agentManager.runAgent(agent.id, buildAgentPrompt(schedule.prompt));
342
+ const timelineText = curateAgentActivity(result.timeline);
343
+ return {
344
+ agentId: agent.id,
345
+ output: buildRunOutput({
346
+ output: null,
347
+ timelineText,
348
+ finalText: result.finalText,
349
+ }),
350
+ };
351
+ }
352
+ async ensureAgentLoaded(agentId) {
353
+ const existing = this.agentManager.getAgent(agentId);
354
+ if (existing) {
355
+ return existing;
356
+ }
357
+ const inflight = pendingAgentInitializations.get(agentId);
358
+ if (inflight) {
359
+ return inflight;
360
+ }
361
+ const initPromise = (async () => {
362
+ const record = await this.agentStorage.get(agentId);
363
+ if (!record) {
364
+ throw new Error(`Agent not found: ${agentId}`);
365
+ }
366
+ if (record.archivedAt) {
367
+ throw new Error(`Agent ${agentId} is archived`);
368
+ }
369
+ let snapshot;
370
+ if (record.persistence?.provider && record.persistence?.sessionId) {
371
+ snapshot = await this.agentManager.resumeAgentFromPersistence({
372
+ provider: record.persistence.provider,
373
+ sessionId: record.persistence.sessionId,
374
+ nativeHandle: record.persistence.nativeHandle,
375
+ metadata: record.persistence.metadata,
376
+ }, buildConfigOverrides(record), agentId, extractTimestamps(record));
377
+ }
378
+ else {
379
+ snapshot = await this.agentManager.createAgent(buildSessionConfig(record), agentId, {
380
+ labels: record.labels,
381
+ });
382
+ }
383
+ await this.agentManager.hydrateTimelineFromProvider(agentId);
384
+ return this.agentManager.getAgent(agentId) ?? snapshot;
385
+ })();
386
+ pendingAgentInitializations.set(agentId, initPromise);
387
+ try {
388
+ return await initPromise;
389
+ }
390
+ finally {
391
+ if (pendingAgentInitializations.get(agentId) === initPromise) {
392
+ pendingAgentInitializations.delete(agentId);
393
+ }
394
+ }
395
+ }
396
+ }
397
+ //# sourceMappingURL=service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"service.js","sourceRoot":"","sources":["../../../../src/server/schedule/service.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ import { type StoredSchedule } from "./types.js";
2
+ export declare class ScheduleStore {
3
+ private readonly dir;
4
+ constructor(dir: string);
5
+ private filePath;
6
+ private ensureDir;
7
+ list(): Promise<StoredSchedule[]>;
8
+ get(id: string): Promise<StoredSchedule | null>;
9
+ create(schedule: Omit<StoredSchedule, "id">): Promise<StoredSchedule>;
10
+ put(schedule: StoredSchedule): Promise<void>;
11
+ delete(id: string): Promise<void>;
12
+ }
13
+ //# sourceMappingURL=store.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"store.d.ts","sourceRoot":"","sources":["../../../../src/server/schedule/store.ts"],"names":[],"mappings":"AAGA,OAAO,EAAwB,KAAK,cAAc,EAAE,MAAM,YAAY,CAAC;AAMvE,qBAAa,aAAa;IACZ,OAAO,CAAC,QAAQ,CAAC,GAAG;gBAAH,GAAG,EAAE,MAAM;IAExC,OAAO,CAAC,QAAQ;YAIF,SAAS;IAIjB,IAAI,IAAI,OAAO,CAAC,cAAc,EAAE,CAAC;IAcjC,GAAG,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,GAAG,IAAI,CAAC;IAa/C,MAAM,CAAC,QAAQ,EAAE,IAAI,CAAC,cAAc,EAAE,IAAI,CAAC,GAAG,OAAO,CAAC,cAAc,CAAC;IAMrE,GAAG,CAAC,QAAQ,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC;IAK5C,MAAM,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;CAIxC"}
@@ -0,0 +1,56 @@
1
+ import { randomBytes } from "node:crypto";
2
+ import { mkdir, readFile, readdir, rm, writeFile } from "node:fs/promises";
3
+ import { join } from "node:path";
4
+ import { StoredScheduleSchema } from "./types.js";
5
+ function generateScheduleId() {
6
+ return randomBytes(4).toString("hex");
7
+ }
8
+ export class ScheduleStore {
9
+ constructor(dir) {
10
+ this.dir = dir;
11
+ }
12
+ filePath(id) {
13
+ return join(this.dir, `${id}.json`);
14
+ }
15
+ async ensureDir() {
16
+ await mkdir(this.dir, { recursive: true });
17
+ }
18
+ async list() {
19
+ await this.ensureDir();
20
+ const entries = await readdir(this.dir, { withFileTypes: true });
21
+ const schedules = await Promise.all(entries
22
+ .filter((entry) => entry.isFile() && entry.name.endsWith(".json"))
23
+ .map(async (entry) => {
24
+ const content = await readFile(join(this.dir, entry.name), "utf-8");
25
+ return StoredScheduleSchema.parse(JSON.parse(content));
26
+ }));
27
+ return schedules.sort((left, right) => left.createdAt.localeCompare(right.createdAt));
28
+ }
29
+ async get(id) {
30
+ await this.ensureDir();
31
+ try {
32
+ const content = await readFile(this.filePath(id), "utf-8");
33
+ return StoredScheduleSchema.parse(JSON.parse(content));
34
+ }
35
+ catch (error) {
36
+ if (error.code === "ENOENT") {
37
+ return null;
38
+ }
39
+ throw error;
40
+ }
41
+ }
42
+ async create(schedule) {
43
+ const created = { ...schedule, id: generateScheduleId() };
44
+ await this.put(created);
45
+ return created;
46
+ }
47
+ async put(schedule) {
48
+ await this.ensureDir();
49
+ await writeFile(this.filePath(schedule.id), JSON.stringify(schedule, null, 2), "utf-8");
50
+ }
51
+ async delete(id) {
52
+ await this.ensureDir();
53
+ await rm(this.filePath(id), { force: true });
54
+ }
55
+ }
56
+ //# sourceMappingURL=store.js.map