devchain-cli 0.2.2 → 0.3.1

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 (146) hide show
  1. package/README.md +2 -0
  2. package/dist/drizzle/0018_whole_zodiak.sql +43 -0
  3. package/dist/drizzle/0019_flat_avengers.sql +3 -0
  4. package/dist/drizzle/0020_statuses_mcp_hidden.sql +1 -0
  5. package/dist/drizzle/meta/0018_snapshot.json +2920 -0
  6. package/dist/drizzle/meta/0019_snapshot.json +2943 -0
  7. package/dist/drizzle/meta/0020_snapshot.json +2951 -0
  8. package/dist/drizzle/meta/_journal.json +21 -0
  9. package/dist/server/app.module.js +11 -1
  10. package/dist/server/app.module.js.map +1 -1
  11. package/dist/server/common/config/env.config.d.ts +1 -0
  12. package/dist/server/common/config/env.config.js +4 -0
  13. package/dist/server/common/config/env.config.js.map +1 -1
  14. package/dist/server/common/filters/http-exception.filter.js +24 -1
  15. package/dist/server/common/filters/http-exception.filter.js.map +1 -1
  16. package/dist/server/common/logging/logger.js +4 -3
  17. package/dist/server/common/logging/logger.js.map +1 -1
  18. package/dist/server/main.js +0 -3
  19. package/dist/server/main.js.map +1 -1
  20. package/dist/server/modules/agents/agents.module.js +2 -1
  21. package/dist/server/modules/agents/agents.module.js.map +1 -1
  22. package/dist/server/modules/agents/controllers/agents.controller.d.ts +17 -2
  23. package/dist/server/modules/agents/controllers/agents.controller.js +84 -3
  24. package/dist/server/modules/agents/controllers/agents.controller.js.map +1 -1
  25. package/dist/server/modules/chat/dtos/chat.dto.d.ts +18 -18
  26. package/dist/server/modules/chat/services/invite-template.util.js +1 -1
  27. package/dist/server/modules/chat/services/invite-template.util.js.map +1 -1
  28. package/dist/server/modules/events/catalog/index.d.ts +40 -0
  29. package/dist/server/modules/events/catalog/index.js +2 -0
  30. package/dist/server/modules/events/catalog/index.js.map +1 -1
  31. package/dist/server/modules/events/catalog/terminal.watcher.triggered.d.ts +45 -0
  32. package/dist/server/modules/events/catalog/terminal.watcher.triggered.js +22 -0
  33. package/dist/server/modules/events/catalog/terminal.watcher.triggered.js.map +1 -0
  34. package/dist/server/modules/events/subscribers/chat-message-delivery.subscriber.d.ts +1 -0
  35. package/dist/server/modules/events/subscribers/chat-message-delivery.subscriber.js +30 -12
  36. package/dist/server/modules/events/subscribers/chat-message-delivery.subscriber.js.map +1 -1
  37. package/dist/server/modules/mcp/constants.js +5 -1
  38. package/dist/server/modules/mcp/constants.js.map +1 -1
  39. package/dist/server/modules/mcp/controllers/mcp-http.controller.js +78 -77
  40. package/dist/server/modules/mcp/controllers/mcp-http.controller.js.map +1 -1
  41. package/dist/server/modules/mcp/controllers/mcp-sdk.controller.js +78 -77
  42. package/dist/server/modules/mcp/controllers/mcp-sdk.controller.js.map +1 -1
  43. package/dist/server/modules/mcp/dtos/mcp.dto.d.ts +125 -97
  44. package/dist/server/modules/mcp/dtos/mcp.dto.js +23 -26
  45. package/dist/server/modules/mcp/dtos/mcp.dto.js.map +1 -1
  46. package/dist/server/modules/mcp/services/instructions-resolver.d.ts +3 -0
  47. package/dist/server/modules/mcp/services/instructions-resolver.js +83 -2
  48. package/dist/server/modules/mcp/services/instructions-resolver.js.map +1 -1
  49. package/dist/server/modules/mcp/services/mcp.service.d.ts +3 -2
  50. package/dist/server/modules/mcp/services/mcp.service.js +549 -263
  51. package/dist/server/modules/mcp/services/mcp.service.js.map +1 -1
  52. package/dist/server/modules/projects/controllers/projects.controller.d.ts +41 -0
  53. package/dist/server/modules/projects/projects.module.js +2 -1
  54. package/dist/server/modules/projects/projects.module.js.map +1 -1
  55. package/dist/server/modules/projects/services/projects.service.d.ts +46 -1
  56. package/dist/server/modules/projects/services/projects.service.js +243 -18
  57. package/dist/server/modules/projects/services/projects.service.js.map +1 -1
  58. package/dist/server/modules/prompts/controllers/prompts.controller.d.ts +1 -1
  59. package/dist/server/modules/prompts/controllers/prompts.controller.js +26 -4
  60. package/dist/server/modules/prompts/controllers/prompts.controller.js.map +1 -1
  61. package/dist/server/modules/sessions/utils/template-renderer.js +1 -0
  62. package/dist/server/modules/sessions/utils/template-renderer.js.map +1 -1
  63. package/dist/server/modules/statuses/controllers/statuses.controller.js +2 -0
  64. package/dist/server/modules/statuses/controllers/statuses.controller.js.map +1 -1
  65. package/dist/server/modules/storage/db/schema.d.ts +613 -0
  66. package/dist/server/modules/storage/db/schema.js +50 -1
  67. package/dist/server/modules/storage/db/schema.js.map +1 -1
  68. package/dist/server/modules/storage/interfaces/storage.interface.d.ts +40 -2
  69. package/dist/server/modules/storage/interfaces/storage.interface.js.map +1 -1
  70. package/dist/server/modules/storage/local/local-storage.service.d.ts +18 -3
  71. package/dist/server/modules/storage/local/local-storage.service.js +407 -11
  72. package/dist/server/modules/storage/local/local-storage.service.js.map +1 -1
  73. package/dist/server/modules/storage/models/domain.models.d.ts +59 -1
  74. package/dist/server/modules/subscribers/actions/action.interface.d.ts +67 -0
  75. package/dist/server/modules/subscribers/actions/action.interface.js +3 -0
  76. package/dist/server/modules/subscribers/actions/action.interface.js.map +1 -0
  77. package/dist/server/modules/subscribers/actions/actions.registry.d.ts +7 -0
  78. package/dist/server/modules/subscribers/actions/actions.registry.js +37 -0
  79. package/dist/server/modules/subscribers/actions/actions.registry.js.map +1 -0
  80. package/dist/server/modules/subscribers/actions/restart-agent.action.d.ts +8 -0
  81. package/dist/server/modules/subscribers/actions/restart-agent.action.js +119 -0
  82. package/dist/server/modules/subscribers/actions/restart-agent.action.js.map +1 -0
  83. package/dist/server/modules/subscribers/actions/send-message.action.d.ts +2 -0
  84. package/dist/server/modules/subscribers/actions/send-message.action.js +83 -0
  85. package/dist/server/modules/subscribers/actions/send-message.action.js.map +1 -0
  86. package/dist/server/modules/subscribers/controllers/actions.controller.d.ts +6 -0
  87. package/dist/server/modules/subscribers/controllers/actions.controller.js +51 -0
  88. package/dist/server/modules/subscribers/controllers/actions.controller.js.map +1 -0
  89. package/dist/server/modules/subscribers/controllers/subscribers.controller.d.ts +17 -0
  90. package/dist/server/modules/subscribers/controllers/subscribers.controller.js +178 -0
  91. package/dist/server/modules/subscribers/controllers/subscribers.controller.js.map +1 -0
  92. package/dist/server/modules/subscribers/dtos/subscriber.dto.d.ts +251 -0
  93. package/dist/server/modules/subscribers/dtos/subscriber.dto.js +68 -0
  94. package/dist/server/modules/subscribers/dtos/subscriber.dto.js.map +1 -0
  95. package/dist/server/modules/subscribers/events/event-fields-catalog.d.ts +19 -0
  96. package/dist/server/modules/subscribers/events/event-fields-catalog.js +98 -0
  97. package/dist/server/modules/subscribers/events/event-fields-catalog.js.map +1 -0
  98. package/dist/server/modules/subscribers/services/automation-scheduler.service.d.ts +49 -0
  99. package/dist/server/modules/subscribers/services/automation-scheduler.service.js +300 -0
  100. package/dist/server/modules/subscribers/services/automation-scheduler.service.js.map +1 -0
  101. package/dist/server/modules/subscribers/services/subscriber-executor.service.d.ts +77 -0
  102. package/dist/server/modules/subscribers/services/subscriber-executor.service.js +576 -0
  103. package/dist/server/modules/subscribers/services/subscriber-executor.service.js.map +1 -0
  104. package/dist/server/modules/subscribers/services/subscribers.service.d.ts +14 -0
  105. package/dist/server/modules/subscribers/services/subscribers.service.js +70 -0
  106. package/dist/server/modules/subscribers/services/subscribers.service.js.map +1 -0
  107. package/dist/server/modules/subscribers/subscribers.module.d.ts +2 -0
  108. package/dist/server/modules/subscribers/subscribers.module.js +36 -0
  109. package/dist/server/modules/subscribers/subscribers.module.js.map +1 -0
  110. package/dist/server/modules/terminal/services/tmux.service.js +9 -6
  111. package/dist/server/modules/terminal/services/tmux.service.js.map +1 -1
  112. package/dist/server/modules/watchers/controllers/watchers.controller.d.ts +16 -0
  113. package/dist/server/modules/watchers/controllers/watchers.controller.js +180 -0
  114. package/dist/server/modules/watchers/controllers/watchers.controller.js.map +1 -0
  115. package/dist/server/modules/watchers/dtos/watcher.dto.d.ts +206 -0
  116. package/dist/server/modules/watchers/dtos/watcher.dto.js +54 -0
  117. package/dist/server/modules/watchers/dtos/watcher.dto.js.map +1 -0
  118. package/dist/server/modules/watchers/services/watcher-runner.service.d.ts +68 -0
  119. package/dist/server/modules/watchers/services/watcher-runner.service.js +477 -0
  120. package/dist/server/modules/watchers/services/watcher-runner.service.js.map +1 -0
  121. package/dist/server/modules/watchers/services/watchers.service.d.ts +29 -0
  122. package/dist/server/modules/watchers/services/watchers.service.js +98 -0
  123. package/dist/server/modules/watchers/services/watchers.service.js.map +1 -0
  124. package/dist/server/modules/watchers/watchers.module.d.ts +2 -0
  125. package/dist/server/modules/watchers/watchers.module.js +34 -0
  126. package/dist/server/modules/watchers/watchers.module.js.map +1 -0
  127. package/dist/server/templates/claude-codex-advanced.json +377 -0
  128. package/dist/server/templates/claude-opus.json +29 -25
  129. package/dist/server/templates/simple-codex.json +29 -25
  130. package/dist/server/test-setup-node.d.ts +1 -0
  131. package/dist/server/test-setup-node.js +8 -0
  132. package/dist/server/test-setup-node.js.map +1 -0
  133. package/dist/server/test-setup.js +2 -0
  134. package/dist/server/test-setup.js.map +1 -1
  135. package/dist/server/tsconfig.tsbuildinfo +1 -1
  136. package/dist/server/ui/assets/index-C9GXCjnF.js +700 -0
  137. package/dist/server/ui/assets/index-o0FbZg-1.css +32 -0
  138. package/dist/server/ui/index.html +2 -2
  139. package/dist/templates/claude-codex-advanced.json +377 -0
  140. package/dist/templates/claude-opus.json +29 -25
  141. package/dist/templates/simple-codex.json +29 -25
  142. package/package.json +41 -27
  143. package/dist/server/templates/codex-claude.json +0 -178
  144. package/dist/server/ui/assets/index-CbYIbCQV.css +0 -32
  145. package/dist/server/ui/assets/index-sfYpjMjv.js +0 -641
  146. package/dist/templates/codex-claude.json +0 -178
@@ -0,0 +1,251 @@
1
+ import { z } from 'zod';
2
+ export declare const ActionInputSchema: z.ZodEffects<z.ZodObject<{
3
+ source: z.ZodEnum<["event_field", "custom"]>;
4
+ eventField: z.ZodOptional<z.ZodString>;
5
+ customValue: z.ZodOptional<z.ZodString>;
6
+ }, "strip", z.ZodTypeAny, {
7
+ source: "event_field" | "custom";
8
+ eventField?: string | undefined;
9
+ customValue?: string | undefined;
10
+ }, {
11
+ source: "event_field" | "custom";
12
+ eventField?: string | undefined;
13
+ customValue?: string | undefined;
14
+ }>, {
15
+ source: "event_field" | "custom";
16
+ eventField?: string | undefined;
17
+ customValue?: string | undefined;
18
+ }, {
19
+ source: "event_field" | "custom";
20
+ eventField?: string | undefined;
21
+ customValue?: string | undefined;
22
+ }>;
23
+ export type ActionInput = z.infer<typeof ActionInputSchema>;
24
+ export declare const EventFilterSchema: z.ZodNullable<z.ZodObject<{
25
+ field: z.ZodString;
26
+ operator: z.ZodEnum<["equals", "contains", "regex"]>;
27
+ value: z.ZodString;
28
+ }, "strip", z.ZodTypeAny, {
29
+ value: string;
30
+ field: string;
31
+ operator: "contains" | "regex" | "equals";
32
+ }, {
33
+ value: string;
34
+ field: string;
35
+ operator: "contains" | "regex" | "equals";
36
+ }>>;
37
+ export type EventFilter = z.infer<typeof EventFilterSchema>;
38
+ export declare const CreateSubscriberSchema: z.ZodObject<{
39
+ projectId: z.ZodString;
40
+ name: z.ZodString;
41
+ description: z.ZodOptional<z.ZodString>;
42
+ enabled: z.ZodDefault<z.ZodOptional<z.ZodBoolean>>;
43
+ eventName: z.ZodString;
44
+ eventFilter: z.ZodOptional<z.ZodNullable<z.ZodObject<{
45
+ field: z.ZodString;
46
+ operator: z.ZodEnum<["equals", "contains", "regex"]>;
47
+ value: z.ZodString;
48
+ }, "strip", z.ZodTypeAny, {
49
+ value: string;
50
+ field: string;
51
+ operator: "contains" | "regex" | "equals";
52
+ }, {
53
+ value: string;
54
+ field: string;
55
+ operator: "contains" | "regex" | "equals";
56
+ }>>>;
57
+ actionType: z.ZodString;
58
+ actionInputs: z.ZodRecord<z.ZodString, z.ZodEffects<z.ZodObject<{
59
+ source: z.ZodEnum<["event_field", "custom"]>;
60
+ eventField: z.ZodOptional<z.ZodString>;
61
+ customValue: z.ZodOptional<z.ZodString>;
62
+ }, "strip", z.ZodTypeAny, {
63
+ source: "event_field" | "custom";
64
+ eventField?: string | undefined;
65
+ customValue?: string | undefined;
66
+ }, {
67
+ source: "event_field" | "custom";
68
+ eventField?: string | undefined;
69
+ customValue?: string | undefined;
70
+ }>, {
71
+ source: "event_field" | "custom";
72
+ eventField?: string | undefined;
73
+ customValue?: string | undefined;
74
+ }, {
75
+ source: "event_field" | "custom";
76
+ eventField?: string | undefined;
77
+ customValue?: string | undefined;
78
+ }>>;
79
+ delayMs: z.ZodDefault<z.ZodOptional<z.ZodNumber>>;
80
+ cooldownMs: z.ZodDefault<z.ZodOptional<z.ZodNumber>>;
81
+ retryOnError: z.ZodDefault<z.ZodOptional<z.ZodBoolean>>;
82
+ groupName: z.ZodOptional<z.ZodNullable<z.ZodString>>;
83
+ position: z.ZodDefault<z.ZodOptional<z.ZodNumber>>;
84
+ priority: z.ZodDefault<z.ZodOptional<z.ZodNumber>>;
85
+ }, "strip", z.ZodTypeAny, {
86
+ name: string;
87
+ projectId: string;
88
+ position: number;
89
+ enabled: boolean;
90
+ cooldownMs: number;
91
+ eventName: string;
92
+ actionType: string;
93
+ actionInputs: Record<string, {
94
+ source: "event_field" | "custom";
95
+ eventField?: string | undefined;
96
+ customValue?: string | undefined;
97
+ }>;
98
+ delayMs: number;
99
+ retryOnError: boolean;
100
+ priority: number;
101
+ description?: string | undefined;
102
+ eventFilter?: {
103
+ value: string;
104
+ field: string;
105
+ operator: "contains" | "regex" | "equals";
106
+ } | null | undefined;
107
+ groupName?: string | null | undefined;
108
+ }, {
109
+ name: string;
110
+ projectId: string;
111
+ eventName: string;
112
+ actionType: string;
113
+ actionInputs: Record<string, {
114
+ source: "event_field" | "custom";
115
+ eventField?: string | undefined;
116
+ customValue?: string | undefined;
117
+ }>;
118
+ description?: string | undefined;
119
+ position?: number | undefined;
120
+ enabled?: boolean | undefined;
121
+ cooldownMs?: number | undefined;
122
+ eventFilter?: {
123
+ value: string;
124
+ field: string;
125
+ operator: "contains" | "regex" | "equals";
126
+ } | null | undefined;
127
+ delayMs?: number | undefined;
128
+ retryOnError?: boolean | undefined;
129
+ groupName?: string | null | undefined;
130
+ priority?: number | undefined;
131
+ }>;
132
+ export type CreateSubscriberData = z.infer<typeof CreateSubscriberSchema>;
133
+ export declare const UpdateSubscriberSchema: z.ZodObject<{
134
+ name: z.ZodOptional<z.ZodString>;
135
+ description: z.ZodNullable<z.ZodOptional<z.ZodString>>;
136
+ enabled: z.ZodOptional<z.ZodBoolean>;
137
+ eventName: z.ZodOptional<z.ZodString>;
138
+ eventFilter: z.ZodOptional<z.ZodNullable<z.ZodObject<{
139
+ field: z.ZodString;
140
+ operator: z.ZodEnum<["equals", "contains", "regex"]>;
141
+ value: z.ZodString;
142
+ }, "strip", z.ZodTypeAny, {
143
+ value: string;
144
+ field: string;
145
+ operator: "contains" | "regex" | "equals";
146
+ }, {
147
+ value: string;
148
+ field: string;
149
+ operator: "contains" | "regex" | "equals";
150
+ }>>>;
151
+ actionType: z.ZodOptional<z.ZodString>;
152
+ actionInputs: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodEffects<z.ZodObject<{
153
+ source: z.ZodEnum<["event_field", "custom"]>;
154
+ eventField: z.ZodOptional<z.ZodString>;
155
+ customValue: z.ZodOptional<z.ZodString>;
156
+ }, "strip", z.ZodTypeAny, {
157
+ source: "event_field" | "custom";
158
+ eventField?: string | undefined;
159
+ customValue?: string | undefined;
160
+ }, {
161
+ source: "event_field" | "custom";
162
+ eventField?: string | undefined;
163
+ customValue?: string | undefined;
164
+ }>, {
165
+ source: "event_field" | "custom";
166
+ eventField?: string | undefined;
167
+ customValue?: string | undefined;
168
+ }, {
169
+ source: "event_field" | "custom";
170
+ eventField?: string | undefined;
171
+ customValue?: string | undefined;
172
+ }>>>;
173
+ delayMs: z.ZodOptional<z.ZodNumber>;
174
+ cooldownMs: z.ZodOptional<z.ZodNumber>;
175
+ retryOnError: z.ZodOptional<z.ZodBoolean>;
176
+ groupName: z.ZodOptional<z.ZodNullable<z.ZodString>>;
177
+ position: z.ZodOptional<z.ZodNumber>;
178
+ priority: z.ZodOptional<z.ZodNumber>;
179
+ }, "strip", z.ZodTypeAny, {
180
+ description?: string | null | undefined;
181
+ name?: string | undefined;
182
+ position?: number | undefined;
183
+ enabled?: boolean | undefined;
184
+ cooldownMs?: number | undefined;
185
+ eventName?: string | undefined;
186
+ eventFilter?: {
187
+ value: string;
188
+ field: string;
189
+ operator: "contains" | "regex" | "equals";
190
+ } | null | undefined;
191
+ actionType?: string | undefined;
192
+ actionInputs?: Record<string, {
193
+ source: "event_field" | "custom";
194
+ eventField?: string | undefined;
195
+ customValue?: string | undefined;
196
+ }> | undefined;
197
+ delayMs?: number | undefined;
198
+ retryOnError?: boolean | undefined;
199
+ groupName?: string | null | undefined;
200
+ priority?: number | undefined;
201
+ }, {
202
+ description?: string | null | undefined;
203
+ name?: string | undefined;
204
+ position?: number | undefined;
205
+ enabled?: boolean | undefined;
206
+ cooldownMs?: number | undefined;
207
+ eventName?: string | undefined;
208
+ eventFilter?: {
209
+ value: string;
210
+ field: string;
211
+ operator: "contains" | "regex" | "equals";
212
+ } | null | undefined;
213
+ actionType?: string | undefined;
214
+ actionInputs?: Record<string, {
215
+ source: "event_field" | "custom";
216
+ eventField?: string | undefined;
217
+ customValue?: string | undefined;
218
+ }> | undefined;
219
+ delayMs?: number | undefined;
220
+ retryOnError?: boolean | undefined;
221
+ groupName?: string | null | undefined;
222
+ priority?: number | undefined;
223
+ }>;
224
+ export type UpdateSubscriberData = z.infer<typeof UpdateSubscriberSchema>;
225
+ export declare const ToggleSubscriberSchema: z.ZodObject<{
226
+ enabled: z.ZodBoolean;
227
+ }, "strip", z.ZodTypeAny, {
228
+ enabled: boolean;
229
+ }, {
230
+ enabled: boolean;
231
+ }>;
232
+ export type ToggleSubscriberData = z.infer<typeof ToggleSubscriberSchema>;
233
+ export interface SubscriberDto {
234
+ id: string;
235
+ projectId: string;
236
+ name: string;
237
+ description: string | null;
238
+ enabled: boolean;
239
+ eventName: string;
240
+ eventFilter: EventFilter | null;
241
+ actionType: string;
242
+ actionInputs: Record<string, ActionInput>;
243
+ delayMs: number;
244
+ cooldownMs: number;
245
+ retryOnError: boolean;
246
+ groupName: string | null;
247
+ position: number;
248
+ priority: number;
249
+ createdAt: string;
250
+ updatedAt: string;
251
+ }
@@ -0,0 +1,68 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ToggleSubscriberSchema = exports.UpdateSubscriberSchema = exports.CreateSubscriberSchema = exports.EventFilterSchema = exports.ActionInputSchema = void 0;
4
+ const zod_1 = require("zod");
5
+ exports.ActionInputSchema = zod_1.z
6
+ .object({
7
+ source: zod_1.z.enum(['event_field', 'custom']),
8
+ eventField: zod_1.z.string().optional(),
9
+ customValue: zod_1.z.string().optional(),
10
+ })
11
+ .superRefine((data, ctx) => {
12
+ if (data.source === 'event_field' && !data.eventField) {
13
+ ctx.addIssue({
14
+ code: zod_1.z.ZodIssueCode.custom,
15
+ message: 'eventField is required when source is "event_field"',
16
+ path: ['eventField'],
17
+ });
18
+ }
19
+ if (data.source === 'custom' && data.customValue === undefined) {
20
+ ctx.addIssue({
21
+ code: zod_1.z.ZodIssueCode.custom,
22
+ message: 'customValue is required when source is "custom"',
23
+ path: ['customValue'],
24
+ });
25
+ }
26
+ });
27
+ exports.EventFilterSchema = zod_1.z
28
+ .object({
29
+ field: zod_1.z.string().min(1),
30
+ operator: zod_1.z.enum(['equals', 'contains', 'regex']),
31
+ value: zod_1.z.string(),
32
+ })
33
+ .nullable();
34
+ exports.CreateSubscriberSchema = zod_1.z.object({
35
+ projectId: zod_1.z.string().uuid(),
36
+ name: zod_1.z.string().min(1).max(100),
37
+ description: zod_1.z.string().max(500).optional(),
38
+ enabled: zod_1.z.boolean().optional().default(true),
39
+ eventName: zod_1.z.string().min(1).max(100),
40
+ eventFilter: exports.EventFilterSchema.optional(),
41
+ actionType: zod_1.z.string().min(1).max(50),
42
+ actionInputs: zod_1.z.record(zod_1.z.string(), exports.ActionInputSchema),
43
+ delayMs: zod_1.z.number().int().min(0).max(30000).optional().default(0),
44
+ cooldownMs: zod_1.z.number().int().min(0).max(60000).optional().default(5000),
45
+ retryOnError: zod_1.z.boolean().optional().default(false),
46
+ groupName: zod_1.z.string().max(100).nullable().optional(),
47
+ position: zod_1.z.number().int().min(0).optional().default(0),
48
+ priority: zod_1.z.number().int().min(-100).max(100).optional().default(0),
49
+ });
50
+ exports.UpdateSubscriberSchema = zod_1.z.object({
51
+ name: zod_1.z.string().min(1).max(100).optional(),
52
+ description: zod_1.z.string().max(500).optional().nullable(),
53
+ enabled: zod_1.z.boolean().optional(),
54
+ eventName: zod_1.z.string().min(1).max(100).optional(),
55
+ eventFilter: exports.EventFilterSchema.optional(),
56
+ actionType: zod_1.z.string().min(1).max(50).optional(),
57
+ actionInputs: zod_1.z.record(zod_1.z.string(), exports.ActionInputSchema).optional(),
58
+ delayMs: zod_1.z.number().int().min(0).max(30000).optional(),
59
+ cooldownMs: zod_1.z.number().int().min(0).max(60000).optional(),
60
+ retryOnError: zod_1.z.boolean().optional(),
61
+ groupName: zod_1.z.string().max(100).nullable().optional(),
62
+ position: zod_1.z.number().int().min(0).optional(),
63
+ priority: zod_1.z.number().int().min(-100).max(100).optional(),
64
+ });
65
+ exports.ToggleSubscriberSchema = zod_1.z.object({
66
+ enabled: zod_1.z.boolean(),
67
+ });
68
+ //# sourceMappingURL=subscriber.dto.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"subscriber.dto.js","sourceRoot":"","sources":["../../../../src/modules/subscribers/dtos/subscriber.dto.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,19 @@
1
+ export interface EventFieldDefinition {
2
+ field: string;
3
+ label: string;
4
+ type: 'string' | 'number' | 'boolean';
5
+ nullable?: boolean;
6
+ }
7
+ export interface SubscribableEventDefinition {
8
+ name: string;
9
+ label: string;
10
+ description: string;
11
+ category: 'terminal' | 'session' | 'epic' | 'chat';
12
+ fields: EventFieldDefinition[];
13
+ }
14
+ export declare const EVENT_FIELDS_CATALOG: Record<string, SubscribableEventDefinition>;
15
+ export declare function getSubscribableEvents(): string[];
16
+ export declare function getEventDefinition(eventName: string): SubscribableEventDefinition | undefined;
17
+ export declare function getEventFields(eventName: string): EventFieldDefinition[];
18
+ export declare function isSubscribableEvent(eventName: string): boolean;
19
+ export declare function getEventsByCategory(): Map<string, SubscribableEventDefinition[]>;
@@ -0,0 +1,98 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.EVENT_FIELDS_CATALOG = void 0;
4
+ exports.getSubscribableEvents = getSubscribableEvents;
5
+ exports.getEventDefinition = getEventDefinition;
6
+ exports.getEventFields = getEventFields;
7
+ exports.isSubscribableEvent = isSubscribableEvent;
8
+ exports.getEventsByCategory = getEventsByCategory;
9
+ exports.EVENT_FIELDS_CATALOG = {
10
+ 'terminal.watcher.triggered': {
11
+ name: 'terminal.watcher.triggered',
12
+ label: 'Terminal Watcher Triggered',
13
+ description: 'Fired when a terminal watcher matches content in the viewport',
14
+ category: 'terminal',
15
+ fields: [
16
+ { field: 'watcherId', label: 'Watcher ID', type: 'string' },
17
+ { field: 'watcherName', label: 'Watcher Name', type: 'string' },
18
+ { field: 'customEventName', label: 'Custom Event Name', type: 'string' },
19
+ { field: 'sessionId', label: 'Session ID', type: 'string' },
20
+ { field: 'agentId', label: 'Agent ID', type: 'string', nullable: true },
21
+ { field: 'agentName', label: 'Agent Name', type: 'string', nullable: true },
22
+ { field: 'projectId', label: 'Project ID', type: 'string' },
23
+ { field: 'viewportSnippet', label: 'Viewport Snippet', type: 'string' },
24
+ { field: 'viewportHash', label: 'Viewport Hash', type: 'string' },
25
+ { field: 'matchedPattern', label: 'Matched Pattern', type: 'string', nullable: true },
26
+ { field: 'triggerCount', label: 'Trigger Count', type: 'number' },
27
+ { field: 'triggeredAt', label: 'Triggered At', type: 'string' },
28
+ ],
29
+ },
30
+ 'epic.assigned': {
31
+ name: 'epic.assigned',
32
+ label: 'Epic Assigned',
33
+ description: 'Fired when an epic is assigned to an agent',
34
+ category: 'epic',
35
+ fields: [
36
+ { field: 'epicId', label: 'Epic ID', type: 'string' },
37
+ { field: 'agentId', label: 'Agent ID', type: 'string' },
38
+ { field: 'projectId', label: 'Project ID', type: 'string' },
39
+ { field: 'assignedBy', label: 'Assigned By', type: 'string', nullable: true },
40
+ { field: 'epicTitle', label: 'Epic Title', type: 'string', nullable: true },
41
+ { field: 'agentName', label: 'Agent Name', type: 'string', nullable: true },
42
+ { field: 'projectName', label: 'Project Name', type: 'string', nullable: true },
43
+ { field: 'previousAgentId', label: 'Previous Agent ID', type: 'string', nullable: true },
44
+ { field: 'triggeredBy', label: 'Triggered By', type: 'string', nullable: true },
45
+ ],
46
+ },
47
+ 'session.started': {
48
+ name: 'session.started',
49
+ label: 'Session Started',
50
+ description: 'Fired when a new session is started',
51
+ category: 'session',
52
+ fields: [
53
+ { field: 'sessionId', label: 'Session ID', type: 'string' },
54
+ { field: 'epicId', label: 'Epic ID', type: 'string', nullable: true },
55
+ { field: 'agentId', label: 'Agent ID', type: 'string' },
56
+ { field: 'tmuxSessionName', label: 'Tmux Session Name', type: 'string' },
57
+ ],
58
+ },
59
+ 'session.stopped': {
60
+ name: 'session.stopped',
61
+ label: 'Session Stopped',
62
+ description: 'Fired when a session is stopped',
63
+ category: 'session',
64
+ fields: [{ field: 'sessionId', label: 'Session ID', type: 'string' }],
65
+ },
66
+ 'session.crashed': {
67
+ name: 'session.crashed',
68
+ label: 'Session Crashed',
69
+ description: 'Fired when a session crashes unexpectedly',
70
+ category: 'session',
71
+ fields: [
72
+ { field: 'sessionId', label: 'Session ID', type: 'string' },
73
+ { field: 'sessionName', label: 'Session Name', type: 'string' },
74
+ ],
75
+ },
76
+ };
77
+ function getSubscribableEvents() {
78
+ return Object.keys(exports.EVENT_FIELDS_CATALOG);
79
+ }
80
+ function getEventDefinition(eventName) {
81
+ return exports.EVENT_FIELDS_CATALOG[eventName];
82
+ }
83
+ function getEventFields(eventName) {
84
+ return exports.EVENT_FIELDS_CATALOG[eventName]?.fields || [];
85
+ }
86
+ function isSubscribableEvent(eventName) {
87
+ return eventName in exports.EVENT_FIELDS_CATALOG;
88
+ }
89
+ function getEventsByCategory() {
90
+ const byCategory = new Map();
91
+ for (const event of Object.values(exports.EVENT_FIELDS_CATALOG)) {
92
+ const existing = byCategory.get(event.category) || [];
93
+ existing.push(event);
94
+ byCategory.set(event.category, existing);
95
+ }
96
+ return byCategory;
97
+ }
98
+ //# sourceMappingURL=event-fields-catalog.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"event-fields-catalog.js","sourceRoot":"","sources":["../../../../src/modules/subscribers/events/event-fields-catalog.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,49 @@
1
+ import { OnModuleDestroy } from '@nestjs/common';
2
+ import type { SubscriberExecutionResult } from './subscriber-executor.service';
3
+ export interface ScheduledTask {
4
+ taskId: string;
5
+ subscriberId: string;
6
+ eventId?: string;
7
+ runAt: number;
8
+ priority: number;
9
+ position: number;
10
+ createdAt: string;
11
+ agentId?: string;
12
+ groupKey: string;
13
+ execute: () => Promise<SubscriberExecutionResult>;
14
+ }
15
+ export interface ConcurrencyConfig {
16
+ maxGlobal: number;
17
+ maxPerAgent: number;
18
+ maxPerGroup: number;
19
+ }
20
+ export declare function compareScheduledTasks(a: ScheduledTask, b: ScheduledTask): number;
21
+ export declare class AutomationSchedulerService implements OnModuleDestroy {
22
+ private queue;
23
+ private wakeTimer;
24
+ private executingTasks;
25
+ private executingByAgent;
26
+ private executingByGroup;
27
+ private concurrency;
28
+ private isShuttingDown;
29
+ constructor();
30
+ onModuleDestroy(): void;
31
+ setConcurrency(config: Partial<ConcurrencyConfig>): void;
32
+ getConcurrency(): ConcurrencyConfig;
33
+ schedule(task: ScheduledTask): void;
34
+ cancel(taskId: string): boolean;
35
+ cancelBySubscriber(subscriberId: string): number;
36
+ getQueueLength(): number;
37
+ getExecutingCount(): number;
38
+ isExecuting(taskId: string): boolean;
39
+ private insertSorted;
40
+ private clearWakeTimer;
41
+ private scheduleNextWake;
42
+ private processDueTasks;
43
+ private canExecute;
44
+ private executeTask;
45
+ private releaseTask;
46
+ _getQueue(): ScheduledTask[];
47
+ _processDueTasks(): void;
48
+ _hasWakeTimer(): boolean;
49
+ }