crewly 1.5.19 → 1.5.21
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.
- package/config/orchestrator_tasks/prompts/orchestrator-prompt.md +46 -0
- package/config/risk-policies/no-local-browser.policy.md +43 -0
- package/config/sops/xhs-requirement-log.v1.md +238 -0
- package/dist/backend/backend/src/controllers/mission/mission-policy.routes.d.ts.map +1 -1
- package/dist/backend/backend/src/controllers/mission/mission-policy.routes.js +152 -19
- package/dist/backend/backend/src/controllers/mission/mission-policy.routes.js.map +1 -1
- package/dist/backend/backend/src/controllers/task-pool/task-pool.controller.d.ts +23 -0
- package/dist/backend/backend/src/controllers/task-pool/task-pool.controller.d.ts.map +1 -1
- package/dist/backend/backend/src/controllers/task-pool/task-pool.controller.js +89 -0
- package/dist/backend/backend/src/controllers/task-pool/task-pool.controller.js.map +1 -1
- package/dist/backend/backend/src/index.d.ts.map +1 -1
- package/dist/backend/backend/src/index.js +37 -0
- package/dist/backend/backend/src/index.js.map +1 -1
- package/dist/backend/backend/src/scripts/backfill-mission-priority.d.ts +43 -0
- package/dist/backend/backend/src/scripts/backfill-mission-priority.d.ts.map +1 -0
- package/dist/backend/backend/src/scripts/backfill-mission-priority.js +90 -0
- package/dist/backend/backend/src/scripts/backfill-mission-priority.js.map +1 -0
- package/dist/backend/backend/src/services/agent/agent-registration.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/agent/agent-registration.service.js +3 -0
- package/dist/backend/backend/src/services/agent/agent-registration.service.js.map +1 -1
- package/dist/backend/backend/src/services/ai/prompt-modules/prompt-assembly.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/ai/prompt-modules/prompt-assembly.service.js +2 -0
- package/dist/backend/backend/src/services/ai/prompt-modules/prompt-assembly.service.js.map +1 -1
- package/dist/backend/backend/src/services/ai/prompt-modules/team-norms.module.d.ts +16 -3
- package/dist/backend/backend/src/services/ai/prompt-modules/team-norms.module.d.ts.map +1 -1
- package/dist/backend/backend/src/services/ai/prompt-modules/team-norms.module.js +116 -19
- package/dist/backend/backend/src/services/ai/prompt-modules/team-norms.module.js.map +1 -1
- package/dist/backend/backend/src/services/core/storage.service.d.ts +33 -0
- package/dist/backend/backend/src/services/core/storage.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/core/storage.service.js +54 -0
- package/dist/backend/backend/src/services/core/storage.service.js.map +1 -1
- package/dist/backend/backend/src/services/task-pool/task-pool.service.d.ts +28 -3
- package/dist/backend/backend/src/services/task-pool/task-pool.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/task-pool/task-pool.service.js +139 -79
- package/dist/backend/backend/src/services/task-pool/task-pool.service.js.map +1 -1
- package/dist/backend/backend/src/services/template/template.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/template/template.service.js +1 -0
- package/dist/backend/backend/src/services/template/template.service.js.map +1 -1
- package/dist/backend/backend/src/services/v3/service-contract-gate.service.d.ts +88 -0
- package/dist/backend/backend/src/services/v3/service-contract-gate.service.d.ts.map +1 -0
- package/dist/backend/backend/src/services/v3/service-contract-gate.service.js +138 -0
- package/dist/backend/backend/src/services/v3/service-contract-gate.service.js.map +1 -0
- package/dist/backend/backend/src/services/v3/team-trigger-reconciler.service.d.ts +77 -0
- package/dist/backend/backend/src/services/v3/team-trigger-reconciler.service.d.ts.map +1 -0
- package/dist/backend/backend/src/services/v3/team-trigger-reconciler.service.js +177 -0
- package/dist/backend/backend/src/services/v3/team-trigger-reconciler.service.js.map +1 -0
- package/dist/backend/backend/src/types/index.d.ts +28 -0
- package/dist/backend/backend/src/types/index.d.ts.map +1 -1
- package/dist/backend/backend/src/types/index.js.map +1 -1
- package/dist/backend/backend/src/types/team-template.types.d.ts +2 -0
- package/dist/backend/backend/src/types/team-template.types.d.ts.map +1 -1
- package/dist/backend/backend/src/types/team-template.types.js.map +1 -1
- package/dist/backend/backend/src/types/v2/mission.types.d.ts +51 -0
- package/dist/backend/backend/src/types/v2/mission.types.d.ts.map +1 -1
- package/dist/backend/backend/src/types/v2/mission.types.js +66 -0
- package/dist/backend/backend/src/types/v2/mission.types.js.map +1 -1
- package/dist/backend/backend/src/types/v2/trigger.types.d.ts +16 -0
- package/dist/backend/backend/src/types/v2/trigger.types.d.ts.map +1 -1
- package/dist/backend/backend/src/types/v2/trigger.types.js +2 -0
- package/dist/backend/backend/src/types/v2/trigger.types.js.map +1 -1
- package/dist/backend/backend/src/types/v2/work-item.types.d.ts +10 -0
- package/dist/backend/backend/src/types/v2/work-item.types.d.ts.map +1 -1
- package/dist/backend/backend/src/types/v2/work-item.types.js +11 -1
- package/dist/backend/backend/src/types/v2/work-item.types.js.map +1 -1
- package/dist/cli/backend/src/services/core/storage.service.d.ts +33 -0
- package/dist/cli/backend/src/services/core/storage.service.d.ts.map +1 -1
- package/dist/cli/backend/src/services/core/storage.service.js +54 -0
- package/dist/cli/backend/src/services/core/storage.service.js.map +1 -1
- package/dist/cli/backend/src/types/index.d.ts +28 -0
- package/dist/cli/backend/src/types/index.d.ts.map +1 -1
- package/dist/cli/backend/src/types/index.js.map +1 -1
- package/dist/cli/backend/src/types/team-template.types.d.ts +2 -0
- package/dist/cli/backend/src/types/team-template.types.d.ts.map +1 -1
- package/dist/cli/backend/src/types/team-template.types.js.map +1 -1
- package/dist/cli/backend/src/types/v2/trigger.types.d.ts +201 -0
- package/dist/cli/backend/src/types/v2/trigger.types.d.ts.map +1 -0
- package/dist/cli/backend/src/types/v2/trigger.types.js +174 -0
- package/dist/cli/backend/src/types/v2/trigger.types.js.map +1 -0
- package/dist/cli/backend/src/types/v2/work-item.types.d.ts +11 -1
- package/dist/cli/backend/src/types/v2/work-item.types.d.ts.map +1 -1
- package/dist/cli/backend/src/types/v2/work-item.types.js +14 -11
- package/dist/cli/backend/src/types/v2/work-item.types.js.map +1 -1
- package/frontend/dist/assets/index-76d76633.js +5220 -0
- package/frontend/dist/assets/{index-e3de7a8c.css → index-dc92ab64.css} +1 -1
- package/frontend/dist/index.html +2 -2
- package/package.json +1 -1
- package/frontend/dist/assets/index-f6bc685f.js +0 -4924
|
@@ -0,0 +1,201 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* V2 Trigger Type Definitions
|
|
3
|
+
*
|
|
4
|
+
* Triggers unify v1's ScheduledMessage, CronTask, and EventSubscription
|
|
5
|
+
* into a single time/signal/compound mechanism that creates or wakes WorkItems.
|
|
6
|
+
*
|
|
7
|
+
* @module types/v2/trigger.types
|
|
8
|
+
*/
|
|
9
|
+
import type { WorkItem } from './work-item.types.js';
|
|
10
|
+
/**
|
|
11
|
+
* What kind of trigger.
|
|
12
|
+
* - time: Cron expression or one-shot delay (replaces ScheduledMessage + CronTask)
|
|
13
|
+
* - signal: Agent event, webhook, or status change (replaces EventSubscription)
|
|
14
|
+
* - compound: Multiple conditions combined with AND/OR
|
|
15
|
+
*/
|
|
16
|
+
export type TriggerType = 'time' | 'signal' | 'compound';
|
|
17
|
+
/** All valid TriggerType values. */
|
|
18
|
+
export declare const TRIGGER_TYPES: readonly TriggerType[];
|
|
19
|
+
/**
|
|
20
|
+
* Trigger lifecycle statuses.
|
|
21
|
+
*/
|
|
22
|
+
export type TriggerStatus = 'active' | 'paused' | 'exhausted' | 'cancelled';
|
|
23
|
+
/** All valid TriggerStatus values. */
|
|
24
|
+
export declare const TRIGGER_STATUSES: readonly TriggerStatus[];
|
|
25
|
+
/**
|
|
26
|
+
* Time trigger: fires on schedule or after delay.
|
|
27
|
+
* Replaces v1 ScheduledMessage + CronTask.
|
|
28
|
+
*/
|
|
29
|
+
export interface TimeTriggerConfig {
|
|
30
|
+
type: 'time';
|
|
31
|
+
/** Cron expression for recurring (e.g., "0 9 * * 1") */
|
|
32
|
+
cronExpression?: string;
|
|
33
|
+
/** IANA timezone (e.g., "America/New_York") */
|
|
34
|
+
timezone?: string;
|
|
35
|
+
/** One-shot delay in ms from creation */
|
|
36
|
+
delayMs?: number;
|
|
37
|
+
/** Fixed ISO8601 datetime for one-shot */
|
|
38
|
+
fireAt?: string;
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* Signal trigger: fires when an event matches.
|
|
42
|
+
* Replaces v1 EventSubscription.
|
|
43
|
+
*/
|
|
44
|
+
export interface SignalTriggerConfig {
|
|
45
|
+
type: 'signal';
|
|
46
|
+
/** Event type to watch for (e.g., "agent:idle", "task:completed") */
|
|
47
|
+
eventType: string;
|
|
48
|
+
/** Optional filter — only fire if event payload matches */
|
|
49
|
+
filter?: Record<string, unknown>;
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* Compound trigger: combines sub-conditions with AND/OR.
|
|
53
|
+
*/
|
|
54
|
+
export interface CompoundTriggerConfig {
|
|
55
|
+
type: 'compound';
|
|
56
|
+
/** How sub-conditions combine */
|
|
57
|
+
operator: 'and' | 'or';
|
|
58
|
+
/** Sub-trigger configs */
|
|
59
|
+
conditions: (TimeTriggerConfig | SignalTriggerConfig)[];
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* Discriminated union of all trigger configuration types.
|
|
63
|
+
*/
|
|
64
|
+
export type TriggerConfig = TimeTriggerConfig | SignalTriggerConfig | CompoundTriggerConfig;
|
|
65
|
+
/**
|
|
66
|
+
* What happens when a trigger fires. At least one field should be set.
|
|
67
|
+
*/
|
|
68
|
+
export interface TriggerAction {
|
|
69
|
+
/** Create a new WorkItem from this template */
|
|
70
|
+
createWorkItem?: Partial<WorkItem>;
|
|
71
|
+
/** Wake (re-queue) an existing WorkItem by ID */
|
|
72
|
+
wakeWorkItemId?: string;
|
|
73
|
+
/** Send a message to a session */
|
|
74
|
+
sendMessage?: {
|
|
75
|
+
target: string;
|
|
76
|
+
message: string;
|
|
77
|
+
};
|
|
78
|
+
/** Run the Reconciler */
|
|
79
|
+
runReconciler?: boolean;
|
|
80
|
+
}
|
|
81
|
+
/**
|
|
82
|
+
* A Trigger monitors time or signals and produces actions (WorkItems, messages, reconciliation).
|
|
83
|
+
*
|
|
84
|
+
* Triggers are the unified replacement for v1's ScheduledMessage, CronTask,
|
|
85
|
+
* and EventSubscription patterns.
|
|
86
|
+
*/
|
|
87
|
+
export interface Trigger {
|
|
88
|
+
/** UUID v4 */
|
|
89
|
+
id: string;
|
|
90
|
+
/** What kind of trigger */
|
|
91
|
+
type: TriggerType;
|
|
92
|
+
/** Trigger-specific configuration */
|
|
93
|
+
config: TriggerConfig;
|
|
94
|
+
/** What action to take when the trigger fires */
|
|
95
|
+
action: TriggerAction;
|
|
96
|
+
/** Lifecycle status */
|
|
97
|
+
status: TriggerStatus;
|
|
98
|
+
/** Who created this trigger */
|
|
99
|
+
createdBy: 'user' | 'orchestrator' | 'system' | 'mission';
|
|
100
|
+
/** ISO8601 timestamps */
|
|
101
|
+
createdAt: string;
|
|
102
|
+
lastFiredAt?: string;
|
|
103
|
+
nextFireAt?: string;
|
|
104
|
+
/** Number of times this trigger has fired */
|
|
105
|
+
fireCount: number;
|
|
106
|
+
/** Maximum fires before auto-disable (undefined = unlimited) */
|
|
107
|
+
maxFires?: number;
|
|
108
|
+
/** Auto-cancel after N consecutive idle fires (v1 lesson from issue #131) */
|
|
109
|
+
maxIdleFires: number;
|
|
110
|
+
/** Current count of consecutive idle fires */
|
|
111
|
+
consecutiveIdleFires: number;
|
|
112
|
+
/**
|
|
113
|
+
* Owning team, if this trigger was provisioned from a Team's `triggers` spec.
|
|
114
|
+
* Used by {@link TeamTriggerReconciler} to look up and cancel team-scoped
|
|
115
|
+
* triggers without touching user/mission/system triggers.
|
|
116
|
+
*/
|
|
117
|
+
teamId?: string;
|
|
118
|
+
/**
|
|
119
|
+
* Stable name set by the provisioner (e.g. `"youtube-monthly-kickoff"`).
|
|
120
|
+
* The reconciler uses (teamId, name) as the identity key so editing
|
|
121
|
+
* `Team.triggers[].cronExpression` replaces instead of duplicating.
|
|
122
|
+
*/
|
|
123
|
+
name?: string;
|
|
124
|
+
}
|
|
125
|
+
/**
|
|
126
|
+
* Input for creating a new Trigger.
|
|
127
|
+
*/
|
|
128
|
+
export interface CreateTriggerInput {
|
|
129
|
+
type: TriggerType;
|
|
130
|
+
config: TriggerConfig;
|
|
131
|
+
action: TriggerAction;
|
|
132
|
+
createdBy: 'user' | 'orchestrator' | 'system' | 'mission';
|
|
133
|
+
maxFires?: number;
|
|
134
|
+
maxIdleFires?: number;
|
|
135
|
+
/** Optional owning team (team-scoped triggers) */
|
|
136
|
+
teamId?: string;
|
|
137
|
+
/** Optional stable name for reconciliation-by-identity */
|
|
138
|
+
name?: string;
|
|
139
|
+
}
|
|
140
|
+
/** Default max idle fires before auto-cancel. From v1 issue #131 lesson. */
|
|
141
|
+
export declare const DEFAULT_MAX_IDLE_FIRES = 3;
|
|
142
|
+
/**
|
|
143
|
+
* Checks whether a string is a valid TriggerType.
|
|
144
|
+
*
|
|
145
|
+
* @param value - The string to check
|
|
146
|
+
* @returns True if value is a valid TriggerType
|
|
147
|
+
*/
|
|
148
|
+
export declare function isValidTriggerType(value: string): value is TriggerType;
|
|
149
|
+
/**
|
|
150
|
+
* Checks whether a string is a valid TriggerStatus.
|
|
151
|
+
*
|
|
152
|
+
* @param value - The string to check
|
|
153
|
+
* @returns True if value is a valid TriggerStatus
|
|
154
|
+
*/
|
|
155
|
+
export declare function isValidTriggerStatus(value: string): value is TriggerStatus;
|
|
156
|
+
/**
|
|
157
|
+
* Validates that a trigger config's type field matches its parent type.
|
|
158
|
+
*
|
|
159
|
+
* @param config - The config to validate
|
|
160
|
+
* @returns True if the config is internally consistent
|
|
161
|
+
*/
|
|
162
|
+
export declare function isValidTriggerConfig(config: TriggerConfig): boolean;
|
|
163
|
+
/**
|
|
164
|
+
* Validates that an unknown value is structurally a valid Trigger.
|
|
165
|
+
*
|
|
166
|
+
* @param value - Unknown value to validate
|
|
167
|
+
* @returns True if value conforms to the Trigger interface
|
|
168
|
+
*/
|
|
169
|
+
export declare function isTrigger(value: unknown): value is Trigger;
|
|
170
|
+
/**
|
|
171
|
+
* Checks whether a TriggerAction has at least one action defined.
|
|
172
|
+
*
|
|
173
|
+
* @param action - The action to validate
|
|
174
|
+
* @returns True if at least one action field is set
|
|
175
|
+
*/
|
|
176
|
+
export declare function isValidTriggerAction(action: TriggerAction): boolean;
|
|
177
|
+
/**
|
|
178
|
+
* Validates CreateTriggerInput and returns an array of error messages.
|
|
179
|
+
*
|
|
180
|
+
* @param input - The creation input to validate
|
|
181
|
+
* @returns Array of validation error strings (empty = valid)
|
|
182
|
+
*/
|
|
183
|
+
export declare function validateCreateTriggerInput(input: CreateTriggerInput): string[];
|
|
184
|
+
/**
|
|
185
|
+
* Creates a new Trigger with sensible defaults.
|
|
186
|
+
*
|
|
187
|
+
* @param input - Required and optional creation fields
|
|
188
|
+
* @returns A fully populated Trigger object
|
|
189
|
+
*
|
|
190
|
+
* @example
|
|
191
|
+
* ```typescript
|
|
192
|
+
* const trigger = createTrigger({
|
|
193
|
+
* type: 'time',
|
|
194
|
+
* config: { type: 'time', cronExpression: '0 9 * * 1' },
|
|
195
|
+
* action: { runReconciler: true },
|
|
196
|
+
* createdBy: 'system',
|
|
197
|
+
* });
|
|
198
|
+
* ```
|
|
199
|
+
*/
|
|
200
|
+
export declare function createTrigger(input: CreateTriggerInput): Trigger;
|
|
201
|
+
//# sourceMappingURL=trigger.types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"trigger.types.d.ts","sourceRoot":"","sources":["../../../../../../backend/src/types/v2/trigger.types.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,174 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* V2 Trigger Type Definitions
|
|
3
|
+
*
|
|
4
|
+
* Triggers unify v1's ScheduledMessage, CronTask, and EventSubscription
|
|
5
|
+
* into a single time/signal/compound mechanism that creates or wakes WorkItems.
|
|
6
|
+
*
|
|
7
|
+
* @module types/v2/trigger.types
|
|
8
|
+
*/
|
|
9
|
+
import { v4 as uuidv4 } from 'uuid';
|
|
10
|
+
/** All valid TriggerType values. */
|
|
11
|
+
export const TRIGGER_TYPES = ['time', 'signal', 'compound'];
|
|
12
|
+
/** All valid TriggerStatus values. */
|
|
13
|
+
export const TRIGGER_STATUSES = [
|
|
14
|
+
'active',
|
|
15
|
+
'paused',
|
|
16
|
+
'exhausted',
|
|
17
|
+
'cancelled',
|
|
18
|
+
];
|
|
19
|
+
// ---------------------------------------------------------------------------
|
|
20
|
+
// Constants
|
|
21
|
+
// ---------------------------------------------------------------------------
|
|
22
|
+
/** Default max idle fires before auto-cancel. From v1 issue #131 lesson. */
|
|
23
|
+
export const DEFAULT_MAX_IDLE_FIRES = 3;
|
|
24
|
+
// ---------------------------------------------------------------------------
|
|
25
|
+
// Type Guards
|
|
26
|
+
// ---------------------------------------------------------------------------
|
|
27
|
+
/**
|
|
28
|
+
* Checks whether a string is a valid TriggerType.
|
|
29
|
+
*
|
|
30
|
+
* @param value - The string to check
|
|
31
|
+
* @returns True if value is a valid TriggerType
|
|
32
|
+
*/
|
|
33
|
+
export function isValidTriggerType(value) {
|
|
34
|
+
return TRIGGER_TYPES.includes(value);
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* Checks whether a string is a valid TriggerStatus.
|
|
38
|
+
*
|
|
39
|
+
* @param value - The string to check
|
|
40
|
+
* @returns True if value is a valid TriggerStatus
|
|
41
|
+
*/
|
|
42
|
+
export function isValidTriggerStatus(value) {
|
|
43
|
+
return TRIGGER_STATUSES.includes(value);
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* Validates that a trigger config's type field matches its parent type.
|
|
47
|
+
*
|
|
48
|
+
* @param config - The config to validate
|
|
49
|
+
* @returns True if the config is internally consistent
|
|
50
|
+
*/
|
|
51
|
+
export function isValidTriggerConfig(config) {
|
|
52
|
+
if (!config || typeof config !== 'object')
|
|
53
|
+
return false;
|
|
54
|
+
switch (config.type) {
|
|
55
|
+
case 'time':
|
|
56
|
+
return !!(config.cronExpression || config.delayMs || config.fireAt);
|
|
57
|
+
case 'signal':
|
|
58
|
+
return typeof config.eventType === 'string' && config.eventType.length > 0;
|
|
59
|
+
case 'compound':
|
|
60
|
+
return ((config.operator === 'and' || config.operator === 'or') &&
|
|
61
|
+
Array.isArray(config.conditions) &&
|
|
62
|
+
config.conditions.length > 0);
|
|
63
|
+
default:
|
|
64
|
+
return false;
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* Validates that an unknown value is structurally a valid Trigger.
|
|
69
|
+
*
|
|
70
|
+
* @param value - Unknown value to validate
|
|
71
|
+
* @returns True if value conforms to the Trigger interface
|
|
72
|
+
*/
|
|
73
|
+
export function isTrigger(value) {
|
|
74
|
+
if (typeof value !== 'object' || value === null)
|
|
75
|
+
return false;
|
|
76
|
+
const obj = value;
|
|
77
|
+
return (typeof obj.id === 'string' &&
|
|
78
|
+
typeof obj.type === 'string' &&
|
|
79
|
+
isValidTriggerType(obj.type) &&
|
|
80
|
+
typeof obj.status === 'string' &&
|
|
81
|
+
isValidTriggerStatus(obj.status) &&
|
|
82
|
+
typeof obj.createdAt === 'string' &&
|
|
83
|
+
typeof obj.fireCount === 'number' &&
|
|
84
|
+
typeof obj.maxIdleFires === 'number');
|
|
85
|
+
}
|
|
86
|
+
/**
|
|
87
|
+
* Checks whether a TriggerAction has at least one action defined.
|
|
88
|
+
*
|
|
89
|
+
* @param action - The action to validate
|
|
90
|
+
* @returns True if at least one action field is set
|
|
91
|
+
*/
|
|
92
|
+
export function isValidTriggerAction(action) {
|
|
93
|
+
if (!action || typeof action !== 'object')
|
|
94
|
+
return false;
|
|
95
|
+
return !!(action.createWorkItem ||
|
|
96
|
+
action.wakeWorkItemId ||
|
|
97
|
+
action.sendMessage ||
|
|
98
|
+
action.runReconciler);
|
|
99
|
+
}
|
|
100
|
+
// ---------------------------------------------------------------------------
|
|
101
|
+
// Validation
|
|
102
|
+
// ---------------------------------------------------------------------------
|
|
103
|
+
/**
|
|
104
|
+
* Validates CreateTriggerInput and returns an array of error messages.
|
|
105
|
+
*
|
|
106
|
+
* @param input - The creation input to validate
|
|
107
|
+
* @returns Array of validation error strings (empty = valid)
|
|
108
|
+
*/
|
|
109
|
+
export function validateCreateTriggerInput(input) {
|
|
110
|
+
const errors = [];
|
|
111
|
+
if (!input.type || !isValidTriggerType(input.type)) {
|
|
112
|
+
errors.push(`type must be one of: ${TRIGGER_TYPES.join(', ')}`);
|
|
113
|
+
}
|
|
114
|
+
if (!input.config) {
|
|
115
|
+
errors.push('config is required');
|
|
116
|
+
}
|
|
117
|
+
else if (!isValidTriggerConfig(input.config)) {
|
|
118
|
+
errors.push('config is invalid for the given trigger type');
|
|
119
|
+
}
|
|
120
|
+
if (!input.action) {
|
|
121
|
+
errors.push('action is required');
|
|
122
|
+
}
|
|
123
|
+
else if (!isValidTriggerAction(input.action)) {
|
|
124
|
+
errors.push('action must have at least one action field set');
|
|
125
|
+
}
|
|
126
|
+
if (!input.createdBy) {
|
|
127
|
+
errors.push('createdBy is required');
|
|
128
|
+
}
|
|
129
|
+
if (input.maxFires !== undefined && (input.maxFires < 1 || !Number.isInteger(input.maxFires))) {
|
|
130
|
+
errors.push('maxFires must be a positive integer');
|
|
131
|
+
}
|
|
132
|
+
if (input.maxIdleFires !== undefined && (input.maxIdleFires < 1 || !Number.isInteger(input.maxIdleFires))) {
|
|
133
|
+
errors.push('maxIdleFires must be a positive integer');
|
|
134
|
+
}
|
|
135
|
+
return errors;
|
|
136
|
+
}
|
|
137
|
+
// ---------------------------------------------------------------------------
|
|
138
|
+
// Factory
|
|
139
|
+
// ---------------------------------------------------------------------------
|
|
140
|
+
/**
|
|
141
|
+
* Creates a new Trigger with sensible defaults.
|
|
142
|
+
*
|
|
143
|
+
* @param input - Required and optional creation fields
|
|
144
|
+
* @returns A fully populated Trigger object
|
|
145
|
+
*
|
|
146
|
+
* @example
|
|
147
|
+
* ```typescript
|
|
148
|
+
* const trigger = createTrigger({
|
|
149
|
+
* type: 'time',
|
|
150
|
+
* config: { type: 'time', cronExpression: '0 9 * * 1' },
|
|
151
|
+
* action: { runReconciler: true },
|
|
152
|
+
* createdBy: 'system',
|
|
153
|
+
* });
|
|
154
|
+
* ```
|
|
155
|
+
*/
|
|
156
|
+
export function createTrigger(input) {
|
|
157
|
+
const now = new Date().toISOString();
|
|
158
|
+
return {
|
|
159
|
+
id: uuidv4(),
|
|
160
|
+
type: input.type,
|
|
161
|
+
config: input.config,
|
|
162
|
+
action: input.action,
|
|
163
|
+
status: 'active',
|
|
164
|
+
createdBy: input.createdBy,
|
|
165
|
+
createdAt: now,
|
|
166
|
+
fireCount: 0,
|
|
167
|
+
maxFires: input.maxFires,
|
|
168
|
+
maxIdleFires: input.maxIdleFires ?? DEFAULT_MAX_IDLE_FIRES,
|
|
169
|
+
consecutiveIdleFires: 0,
|
|
170
|
+
teamId: input.teamId,
|
|
171
|
+
name: input.name,
|
|
172
|
+
};
|
|
173
|
+
}
|
|
174
|
+
//# sourceMappingURL=trigger.types.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"trigger.types.js","sourceRoot":"","sources":["../../../../../../backend/src/types/v2/trigger.types.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,EAAE,IAAI,MAAM,EAAE,MAAM,MAAM,CAAC;AAepC,oCAAoC;AACpC,MAAM,CAAC,MAAM,aAAa,GAA2B,CAAC,MAAM,EAAE,QAAQ,EAAE,UAAU,CAAU,CAAC;AAW7F,sCAAsC;AACtC,MAAM,CAAC,MAAM,gBAAgB,GAA6B;IACxD,QAAQ;IACR,QAAQ;IACR,WAAW;IACX,WAAW;CACH,CAAC;AAyIX,8EAA8E;AAC9E,YAAY;AACZ,8EAA8E;AAE9E,4EAA4E;AAC5E,MAAM,CAAC,MAAM,sBAAsB,GAAG,CAAC,CAAC;AAExC,8EAA8E;AAC9E,cAAc;AACd,8EAA8E;AAE9E;;;;;GAKG;AACH,MAAM,UAAU,kBAAkB,CAAC,KAAa;IAC9C,OAAQ,aAAmC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;AAC9D,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,oBAAoB,CAAC,KAAa;IAChD,OAAQ,gBAAsC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;AACjE,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,oBAAoB,CAAC,MAAqB;IACxD,IAAI,CAAC,MAAM,IAAI,OAAO,MAAM,KAAK,QAAQ;QAAE,OAAO,KAAK,CAAC;IACxD,QAAQ,MAAM,CAAC,IAAI,EAAE,CAAC;QACpB,KAAK,MAAM;YACT,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,cAAc,IAAI,MAAM,CAAC,OAAO,IAAI,MAAM,CAAC,MAAM,CAAC,CAAC;QACtE,KAAK,QAAQ;YACX,OAAO,OAAO,MAAM,CAAC,SAAS,KAAK,QAAQ,IAAI,MAAM,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC;QAC7E,KAAK,UAAU;YACb,OAAO,CACL,CAAC,MAAM,CAAC,QAAQ,KAAK,KAAK,IAAI,MAAM,CAAC,QAAQ,KAAK,IAAI,CAAC;gBACvD,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,UAAU,CAAC;gBAChC,MAAM,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,CAC7B,CAAC;QACJ;YACE,OAAO,KAAK,CAAC;IACjB,CAAC;AACH,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,SAAS,CAAC,KAAc;IACtC,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI;QAAE,OAAO,KAAK,CAAC;IAC9D,MAAM,GAAG,GAAG,KAAgC,CAAC;IAC7C,OAAO,CACL,OAAO,GAAG,CAAC,EAAE,KAAK,QAAQ;QAC1B,OAAO,GAAG,CAAC,IAAI,KAAK,QAAQ;QAC5B,kBAAkB,CAAC,GAAG,CAAC,IAAI,CAAC;QAC5B,OAAO,GAAG,CAAC,MAAM,KAAK,QAAQ;QAC9B,oBAAoB,CAAC,GAAG,CAAC,MAAM,CAAC;QAChC,OAAO,GAAG,CAAC,SAAS,KAAK,QAAQ;QACjC,OAAO,GAAG,CAAC,SAAS,KAAK,QAAQ;QACjC,OAAO,GAAG,CAAC,YAAY,KAAK,QAAQ,CACrC,CAAC;AACJ,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,oBAAoB,CAAC,MAAqB;IACxD,IAAI,CAAC,MAAM,IAAI,OAAO,MAAM,KAAK,QAAQ;QAAE,OAAO,KAAK,CAAC;IACxD,OAAO,CAAC,CAAC,CACP,MAAM,CAAC,cAAc;QACrB,MAAM,CAAC,cAAc;QACrB,MAAM,CAAC,WAAW;QAClB,MAAM,CAAC,aAAa,CACrB,CAAC;AACJ,CAAC;AAED,8EAA8E;AAC9E,aAAa;AACb,8EAA8E;AAE9E;;;;;GAKG;AACH,MAAM,UAAU,0BAA0B,CAAC,KAAyB;IAClE,MAAM,MAAM,GAAa,EAAE,CAAC;IAC5B,IAAI,CAAC,KAAK,CAAC,IAAI,IAAI,CAAC,kBAAkB,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;QACnD,MAAM,CAAC,IAAI,CAAC,wBAAwB,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAClE,CAAC;IACD,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC;QAClB,MAAM,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAC;IACpC,CAAC;SAAM,IAAI,CAAC,oBAAoB,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC;QAC/C,MAAM,CAAC,IAAI,CAAC,8CAA8C,CAAC,CAAC;IAC9D,CAAC;IACD,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC;QAClB,MAAM,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAC;IACpC,CAAC;SAAM,IAAI,CAAC,oBAAoB,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC;QAC/C,MAAM,CAAC,IAAI,CAAC,gDAAgD,CAAC,CAAC;IAChE,CAAC;IACD,IAAI,CAAC,KAAK,CAAC,SAAS,EAAE,CAAC;QACrB,MAAM,CAAC,IAAI,CAAC,uBAAuB,CAAC,CAAC;IACvC,CAAC;IACD,IAAI,KAAK,CAAC,QAAQ,KAAK,SAAS,IAAI,CAAC,KAAK,CAAC,QAAQ,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC;QAC9F,MAAM,CAAC,IAAI,CAAC,qCAAqC,CAAC,CAAC;IACrD,CAAC;IACD,IAAI,KAAK,CAAC,YAAY,KAAK,SAAS,IAAI,CAAC,KAAK,CAAC,YAAY,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC,EAAE,CAAC;QAC1G,MAAM,CAAC,IAAI,CAAC,yCAAyC,CAAC,CAAC;IACzD,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,8EAA8E;AAC9E,UAAU;AACV,8EAA8E;AAE9E;;;;;;;;;;;;;;;GAeG;AACH,MAAM,UAAU,aAAa,CAAC,KAAyB;IACrD,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IACrC,OAAO;QACL,EAAE,EAAE,MAAM,EAAE;QACZ,IAAI,EAAE,KAAK,CAAC,IAAI;QAChB,MAAM,EAAE,KAAK,CAAC,MAAM;QACpB,MAAM,EAAE,KAAK,CAAC,MAAM;QACpB,MAAM,EAAE,QAAQ;QAChB,SAAS,EAAE,KAAK,CAAC,SAAS;QAC1B,SAAS,EAAE,GAAG;QACd,SAAS,EAAE,CAAC;QACZ,QAAQ,EAAE,KAAK,CAAC,QAAQ;QACxB,YAAY,EAAE,KAAK,CAAC,YAAY,IAAI,sBAAsB;QAC1D,oBAAoB,EAAE,CAAC;QACvB,MAAM,EAAE,KAAK,CAAC,MAAM;QACpB,IAAI,EAAE,KAAK,CAAC,IAAI;KACjB,CAAC;AACJ,CAAC"}
|
|
@@ -60,7 +60,7 @@ export declare const WORK_ITEM_OWNERS: readonly WorkItemOwner[];
|
|
|
60
60
|
* running → done (simple tasks without TL verification)
|
|
61
61
|
* done is terminal (backward compatible with existing pool operations)
|
|
62
62
|
*/
|
|
63
|
-
export type WorkItemStatus = 'queued' | 'scheduled' | '
|
|
63
|
+
export type WorkItemStatus = 'queued' | 'scheduled' | 'proposed' | 'accepted' | 'running' | 'blocked' | 'escalated' | 'done_by_worker' | 'verified' | 'rejected' | 'done' | 'failed' | 'cancelled';
|
|
64
64
|
/** All valid WorkItemStatus values. */
|
|
65
65
|
export declare const WORK_ITEM_STATUSES: readonly WorkItemStatus[];
|
|
66
66
|
/** Terminal statuses — no further transitions allowed. */
|
|
@@ -118,6 +118,14 @@ export interface WorkItem {
|
|
|
118
118
|
cost: number;
|
|
119
119
|
/** Extensible metadata (dependency tracking, skill requirements, etc.) */
|
|
120
120
|
metadata?: Record<string, unknown>;
|
|
121
|
+
/**
|
|
122
|
+
* IDs of upstream WorkItems that must reach terminal success (`done` or
|
|
123
|
+
* `verified`) before this item is allowed to run. When any dep is still
|
|
124
|
+
* pending at creation time, the item starts in `blocked` status and is
|
|
125
|
+
* auto-promoted to `queued` by the TaskPool resolver once every dep
|
|
126
|
+
* completes.
|
|
127
|
+
*/
|
|
128
|
+
dependsOn?: string[];
|
|
121
129
|
}
|
|
122
130
|
/**
|
|
123
131
|
* Input for creating a new WorkItem.
|
|
@@ -136,6 +144,8 @@ export interface CreateWorkItemInput {
|
|
|
136
144
|
projectTaskId?: string;
|
|
137
145
|
missionId?: string;
|
|
138
146
|
metadata?: Record<string, unknown>;
|
|
147
|
+
/** Upstream WorkItem IDs that must reach terminal success before this runs. */
|
|
148
|
+
dependsOn?: string[];
|
|
139
149
|
}
|
|
140
150
|
/**
|
|
141
151
|
* Input for updating an existing WorkItem.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"work-item.types.d.ts","sourceRoot":"","sources":["../../../../../../backend/src/types/v2/work-item.types.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAQH;;GAEG;AACH,MAAM,MAAM,YAAY,GACpB,UAAU,GACV,cAAc,GACd,OAAO,GACP,QAAQ,GACR,UAAU,GACV,QAAQ,GACR,SAAS,GACT,WAAW,CAAC;AAEhB,qCAAqC;AACrC,eAAO,MAAM,eAAe,EAAE,SAAS,YAAY,EASzC,CAAC;AAEX;;GAEG;AACH,MAAM,MAAM,aAAa,GACrB,cAAc,GACd,WAAW,GACX,OAAO,GACP,QAAQ,CAAC;AAEb,sCAAsC;AACtC,eAAO,MAAM,gBAAgB,EAAE,SAAS,aAAa,EAK3C,CAAC;AAEX;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAwCG;AACH,MAAM,MAAM,cAAc,GACtB,QAAQ,GACR,WAAW,GACX,
|
|
1
|
+
{"version":3,"file":"work-item.types.d.ts","sourceRoot":"","sources":["../../../../../../backend/src/types/v2/work-item.types.ts"],"names":[],"mappings":"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"}
|
|
@@ -30,25 +30,21 @@ export const WORK_ITEM_OWNERS = [
|
|
|
30
30
|
export const WORK_ITEM_STATUSES = [
|
|
31
31
|
'queued',
|
|
32
32
|
'scheduled',
|
|
33
|
-
'ready',
|
|
34
33
|
'proposed',
|
|
35
34
|
'accepted',
|
|
36
35
|
'running',
|
|
37
|
-
'waiting_confirmation',
|
|
38
36
|
'blocked',
|
|
39
37
|
'escalated',
|
|
40
38
|
'done_by_worker',
|
|
41
39
|
'verified',
|
|
42
40
|
'rejected',
|
|
43
41
|
'done',
|
|
44
|
-
'completed',
|
|
45
42
|
'failed',
|
|
46
43
|
'cancelled',
|
|
47
44
|
];
|
|
48
45
|
/** Terminal statuses — no further transitions allowed. */
|
|
49
46
|
export const TERMINAL_WORK_ITEM_STATUSES = new Set([
|
|
50
47
|
'done',
|
|
51
|
-
'completed',
|
|
52
48
|
'verified',
|
|
53
49
|
'cancelled',
|
|
54
50
|
]);
|
|
@@ -62,21 +58,18 @@ export const TERMINAL_WORK_ITEM_STATUSES = new Set([
|
|
|
62
58
|
* the extended acceptance/verification flow (proposed→accepted→running→done_by_worker→verified).
|
|
63
59
|
*/
|
|
64
60
|
export const WORK_ITEM_TRANSITIONS = {
|
|
65
|
-
queued: new Set(['
|
|
61
|
+
queued: new Set(['running', 'proposed', 'scheduled', 'cancelled']),
|
|
66
62
|
scheduled: new Set(['queued', 'cancelled']),
|
|
67
|
-
ready: new Set(['running', 'proposed', 'cancelled']),
|
|
68
63
|
proposed: new Set(['accepted', 'rejected', 'cancelled']),
|
|
69
64
|
accepted: new Set(['running', 'cancelled']),
|
|
70
|
-
running: new Set(['
|
|
71
|
-
waiting_confirmation: new Set(['done', 'failed', 'running']),
|
|
65
|
+
running: new Set(['done', 'done_by_worker', 'failed', 'blocked', 'escalated', 'cancelled']),
|
|
72
66
|
blocked: new Set(['queued', 'cancelled']),
|
|
73
67
|
escalated: new Set(['queued', 'cancelled']),
|
|
74
68
|
done_by_worker: new Set(['verified', 'rejected']),
|
|
75
69
|
verified: new Set(),
|
|
76
70
|
rejected: new Set(['queued']),
|
|
77
71
|
done: new Set(),
|
|
78
|
-
|
|
79
|
-
failed: new Set(['queued', 'cancelled']),
|
|
72
|
+
failed: new Set(['queued']),
|
|
80
73
|
cancelled: new Set(),
|
|
81
74
|
};
|
|
82
75
|
// ---------------------------------------------------------------------------
|
|
@@ -244,7 +237,16 @@ export const DEFAULT_MAX_RETRIES = 3;
|
|
|
244
237
|
*/
|
|
245
238
|
export function createWorkItem(input) {
|
|
246
239
|
const now = new Date().toISOString();
|
|
240
|
+
const hasDeps = Array.isArray(input.dependsOn) && input.dependsOn.length > 0;
|
|
247
241
|
const hasSchedule = !!input.scheduledAt;
|
|
242
|
+
// Dep gating wins over schedule — a blocked item should not be queued or
|
|
243
|
+
// fired by a cron. The dependency resolver will promote it to 'queued' once
|
|
244
|
+
// all upstream items reach terminal success.
|
|
245
|
+
const initialStatus = hasDeps
|
|
246
|
+
? 'blocked'
|
|
247
|
+
: hasSchedule
|
|
248
|
+
? 'scheduled'
|
|
249
|
+
: 'queued';
|
|
248
250
|
return {
|
|
249
251
|
id: uuidv4(),
|
|
250
252
|
requestId: input.requestId,
|
|
@@ -254,7 +256,7 @@ export function createWorkItem(input) {
|
|
|
254
256
|
target: input.target,
|
|
255
257
|
title: input.title,
|
|
256
258
|
description: input.description,
|
|
257
|
-
status:
|
|
259
|
+
status: initialStatus,
|
|
258
260
|
scheduledAt: input.scheduledAt,
|
|
259
261
|
createdAt: now,
|
|
260
262
|
retryCount: 0,
|
|
@@ -266,6 +268,7 @@ export function createWorkItem(input) {
|
|
|
266
268
|
outputTokens: 0,
|
|
267
269
|
cost: 0,
|
|
268
270
|
metadata: input.metadata,
|
|
271
|
+
dependsOn: hasDeps ? [...input.dependsOn] : undefined,
|
|
269
272
|
};
|
|
270
273
|
}
|
|
271
274
|
//# sourceMappingURL=work-item.types.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"work-item.types.js","sourceRoot":"","sources":["../../../../../../backend/src/types/v2/work-item.types.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAE,EAAE,IAAI,MAAM,EAAE,MAAM,MAAM,CAAC;AAmBpC,qCAAqC;AACrC,MAAM,CAAC,MAAM,eAAe,GAA4B;IACtD,UAAU;IACV,cAAc;IACd,OAAO;IACP,QAAQ;IACR,UAAU;IACV,QAAQ;IACR,SAAS;IACT,WAAW;CACH,CAAC;AAWX,sCAAsC;AACtC,MAAM,CAAC,MAAM,gBAAgB,GAA6B;IACxD,cAAc;IACd,WAAW;IACX,OAAO;IACP,QAAQ;CACA,CAAC;
|
|
1
|
+
{"version":3,"file":"work-item.types.js","sourceRoot":"","sources":["../../../../../../backend/src/types/v2/work-item.types.ts"],"names":[],"mappings":"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"}
|