@auxiora/workflows 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,45 @@
1
+ import type { HumanWorkflow, WorkflowEvent, ReminderConfig, EscalationPolicy, AutonomousAction } from './types.js';
2
+ export interface CreateWorkflowOptions {
3
+ name: string;
4
+ description: string;
5
+ createdBy: string;
6
+ steps: Array<{
7
+ name: string;
8
+ description: string;
9
+ assigneeId: string;
10
+ dependsOn?: string[];
11
+ action?: AutonomousAction;
12
+ }>;
13
+ reminder?: Partial<ReminderConfig>;
14
+ escalation?: Partial<EscalationPolicy>;
15
+ autonomous?: boolean;
16
+ }
17
+ export declare class WorkflowEngine {
18
+ private filePath;
19
+ constructor(options?: {
20
+ dir?: string;
21
+ });
22
+ createWorkflow(options: CreateWorkflowOptions): Promise<HumanWorkflow>;
23
+ startWorkflow(workflowId: string): Promise<HumanWorkflow | undefined>;
24
+ completeStep(workflowId: string, stepId: string, completedBy: string, result?: string): Promise<HumanWorkflow | undefined>;
25
+ failStep(workflowId: string, stepId: string, reason: string): Promise<HumanWorkflow | undefined>;
26
+ cancelWorkflow(workflowId: string): Promise<boolean>;
27
+ getWorkflow(workflowId: string): Promise<HumanWorkflow | undefined>;
28
+ getStatus(workflowId: string): Promise<{
29
+ workflow: HumanWorkflow;
30
+ progress: number;
31
+ } | undefined>;
32
+ listActive(): Promise<HumanWorkflow[]>;
33
+ listAll(): Promise<HumanWorkflow[]>;
34
+ addEvent(workflowId: string, type: WorkflowEvent['type'], extra?: {
35
+ stepId?: string;
36
+ userId?: string;
37
+ details?: string;
38
+ }): Promise<boolean>;
39
+ listByUser(userId: string): Promise<HumanWorkflow[]>;
40
+ private advanceWorkflow;
41
+ private createEvent;
42
+ private readFile;
43
+ private writeFile;
44
+ }
45
+ //# sourceMappingURL=engine.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"engine.d.ts","sourceRoot":"","sources":["../src/engine.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EACV,aAAa,EAGb,aAAa,EACb,cAAc,EACd,gBAAgB,EAChB,gBAAgB,EACjB,MAAM,YAAY,CAAC;AAIpB,MAAM,WAAW,qBAAqB;IACpC,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,KAAK,CAAC;QACX,IAAI,EAAE,MAAM,CAAC;QACb,WAAW,EAAE,MAAM,CAAC;QACpB,UAAU,EAAE,MAAM,CAAC;QACnB,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;QACrB,MAAM,CAAC,EAAE,gBAAgB,CAAC;KAC3B,CAAC,CAAC;IACH,QAAQ,CAAC,EAAE,OAAO,CAAC,cAAc,CAAC,CAAC;IACnC,UAAU,CAAC,EAAE,OAAO,CAAC,gBAAgB,CAAC,CAAC;IACvC,UAAU,CAAC,EAAE,OAAO,CAAC;CACtB;AAeD,qBAAa,cAAc;IACzB,OAAO,CAAC,QAAQ,CAAS;gBAEb,OAAO,CAAC,EAAE;QAAE,GAAG,CAAC,EAAE,MAAM,CAAA;KAAE;IAKhC,cAAc,CAAC,OAAO,EAAE,qBAAqB,GAAG,OAAO,CAAC,aAAa,CAAC;IAuCtE,aAAa,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,GAAG,SAAS,CAAC;IAoBrE,YAAY,CAChB,UAAU,EAAE,MAAM,EAClB,MAAM,EAAE,MAAM,EACd,WAAW,EAAE,MAAM,EACnB,MAAM,CAAC,EAAE,MAAM,GACd,OAAO,CAAC,aAAa,GAAG,SAAS,CAAC;IA8B/B,QAAQ,CACZ,UAAU,EAAE,MAAM,EAClB,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,MAAM,GACb,OAAO,CAAC,aAAa,GAAG,SAAS,CAAC;IAwB/B,cAAc,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAcpD,WAAW,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,GAAG,SAAS,CAAC;IAKnE,SAAS,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC;QAAE,QAAQ,EAAE,aAAa,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAE,GAAG,SAAS,CAAC;IAUjG,UAAU,IAAI,OAAO,CAAC,aAAa,EAAE,CAAC;IAKtC,OAAO,IAAI,OAAO,CAAC,aAAa,EAAE,CAAC;IAInC,QAAQ,CACZ,UAAU,EAAE,MAAM,EAClB,IAAI,EAAE,aAAa,CAAC,MAAM,CAAC,EAC3B,KAAK,CAAC,EAAE;QAAE,MAAM,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAA;KAAE,GAC7D,OAAO,CAAC,OAAO,CAAC;IAWb,UAAU,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,EAAE,CAAC;IAO1D,OAAO,CAAC,eAAe;IAyBvB,OAAO,CAAC,WAAW;YAgBL,QAAQ;YAYR,SAAS;CAKxB"}
package/dist/engine.js ADDED
@@ -0,0 +1,211 @@
1
+ import * as fs from 'node:fs/promises';
2
+ import * as path from 'node:path';
3
+ import * as crypto from 'node:crypto';
4
+ import { getLogger } from '@auxiora/logger';
5
+ import { audit } from '@auxiora/audit';
6
+ import { getAuxioraDir } from '@auxiora/core';
7
+ const logger = getLogger('workflows:engine');
8
+ const DEFAULT_REMINDER = {
9
+ enabled: false,
10
+ intervalMs: 3600_000, // 1 hour
11
+ maxReminders: 3,
12
+ };
13
+ const DEFAULT_ESCALATION = {
14
+ enabled: false,
15
+ escalateAfterMs: 86400_000, // 24 hours
16
+ escalateToUserId: '',
17
+ maxEscalations: 1,
18
+ };
19
+ export class WorkflowEngine {
20
+ filePath;
21
+ constructor(options) {
22
+ const dir = options?.dir ?? path.join(getAuxioraDir(), 'workflows');
23
+ this.filePath = path.join(dir, 'workflows.json');
24
+ }
25
+ async createWorkflow(options) {
26
+ const workflows = await this.readFile();
27
+ const now = Date.now();
28
+ const workflowId = `wf-${crypto.randomUUID().slice(0, 8)}`;
29
+ const steps = options.steps.map((s, i) => ({
30
+ id: `step-${i + 1}`,
31
+ name: s.name,
32
+ description: s.description,
33
+ assigneeId: s.assigneeId,
34
+ status: 'pending',
35
+ dependsOn: s.dependsOn ?? [],
36
+ ...(s.action ? { action: s.action } : {}),
37
+ }));
38
+ const workflow = {
39
+ id: workflowId,
40
+ name: options.name,
41
+ description: options.description,
42
+ createdBy: options.createdBy,
43
+ status: 'pending',
44
+ steps,
45
+ reminder: { ...DEFAULT_REMINDER, ...options.reminder },
46
+ escalation: { ...DEFAULT_ESCALATION, ...options.escalation },
47
+ events: [],
48
+ createdAt: now,
49
+ updatedAt: now,
50
+ ...(options.autonomous ? { autonomous: true } : {}),
51
+ };
52
+ workflow.events.push(this.createEvent(workflowId, 'created', { userId: options.createdBy }));
53
+ workflows.push(workflow);
54
+ await this.writeFile(workflows);
55
+ void audit('workflow.created', { id: workflowId, name: options.name });
56
+ logger.debug('Created workflow', { id: workflowId });
57
+ return workflow;
58
+ }
59
+ async startWorkflow(workflowId) {
60
+ const workflows = await this.readFile();
61
+ const workflow = workflows.find(w => w.id === workflowId);
62
+ if (!workflow || workflow.status !== 'pending')
63
+ return undefined;
64
+ workflow.status = 'active';
65
+ workflow.updatedAt = Date.now();
66
+ // Activate steps with no dependencies
67
+ for (const step of workflow.steps) {
68
+ if (step.dependsOn.length === 0) {
69
+ step.status = 'active';
70
+ }
71
+ }
72
+ await this.writeFile(workflows);
73
+ void audit('workflow.started', { id: workflowId });
74
+ return workflow;
75
+ }
76
+ async completeStep(workflowId, stepId, completedBy, result) {
77
+ const workflows = await this.readFile();
78
+ const workflow = workflows.find(w => w.id === workflowId);
79
+ if (!workflow || workflow.status !== 'active')
80
+ return undefined;
81
+ const step = workflow.steps.find(s => s.id === stepId);
82
+ if (!step || step.status !== 'active')
83
+ return undefined;
84
+ step.status = 'completed';
85
+ step.completedAt = Date.now();
86
+ step.completedBy = completedBy;
87
+ step.result = result;
88
+ workflow.events.push(this.createEvent(workflowId, 'step_completed', {
89
+ stepId,
90
+ userId: completedBy,
91
+ details: result,
92
+ }));
93
+ // Advance: activate any steps whose dependencies are now met
94
+ this.advanceWorkflow(workflow);
95
+ workflow.updatedAt = Date.now();
96
+ await this.writeFile(workflows);
97
+ void audit('workflow.step_completed', { workflowId, stepId, completedBy });
98
+ return workflow;
99
+ }
100
+ async failStep(workflowId, stepId, reason) {
101
+ const workflows = await this.readFile();
102
+ const workflow = workflows.find(w => w.id === workflowId);
103
+ if (!workflow || workflow.status !== 'active')
104
+ return undefined;
105
+ const step = workflow.steps.find(s => s.id === stepId);
106
+ if (!step || step.status !== 'active')
107
+ return undefined;
108
+ step.status = 'failed';
109
+ workflow.events.push(this.createEvent(workflowId, 'step_failed', { stepId, details: reason }));
110
+ // Check if workflow should fail
111
+ const hasActiveSteps = workflow.steps.some(s => s.status === 'active' || s.status === 'pending');
112
+ if (!hasActiveSteps) {
113
+ workflow.status = 'failed';
114
+ }
115
+ workflow.updatedAt = Date.now();
116
+ await this.writeFile(workflows);
117
+ return workflow;
118
+ }
119
+ async cancelWorkflow(workflowId) {
120
+ const workflows = await this.readFile();
121
+ const workflow = workflows.find(w => w.id === workflowId);
122
+ if (!workflow || workflow.status === 'completed' || workflow.status === 'cancelled')
123
+ return false;
124
+ workflow.status = 'cancelled';
125
+ workflow.updatedAt = Date.now();
126
+ workflow.events.push(this.createEvent(workflowId, 'cancelled'));
127
+ await this.writeFile(workflows);
128
+ void audit('workflow.cancelled', { id: workflowId });
129
+ return true;
130
+ }
131
+ async getWorkflow(workflowId) {
132
+ const workflows = await this.readFile();
133
+ return workflows.find(w => w.id === workflowId);
134
+ }
135
+ async getStatus(workflowId) {
136
+ const workflow = await this.getWorkflow(workflowId);
137
+ if (!workflow)
138
+ return undefined;
139
+ const completed = workflow.steps.filter(s => s.status === 'completed').length;
140
+ const progress = workflow.steps.length > 0 ? completed / workflow.steps.length : 0;
141
+ return { workflow, progress };
142
+ }
143
+ async listActive() {
144
+ const workflows = await this.readFile();
145
+ return workflows.filter(w => w.status === 'active' || w.status === 'pending');
146
+ }
147
+ async listAll() {
148
+ return this.readFile();
149
+ }
150
+ async addEvent(workflowId, type, extra) {
151
+ const workflows = await this.readFile();
152
+ const workflow = workflows.find(w => w.id === workflowId);
153
+ if (!workflow)
154
+ return false;
155
+ workflow.events.push(this.createEvent(workflowId, type, extra));
156
+ workflow.updatedAt = Date.now();
157
+ await this.writeFile(workflows);
158
+ return true;
159
+ }
160
+ async listByUser(userId) {
161
+ const workflows = await this.readFile();
162
+ return workflows.filter(w => w.createdBy === userId || w.steps.some(s => s.assigneeId === userId));
163
+ }
164
+ advanceWorkflow(workflow) {
165
+ const completedIds = new Set(workflow.steps.filter(s => s.status === 'completed').map(s => s.id));
166
+ for (const step of workflow.steps) {
167
+ if (step.status !== 'pending')
168
+ continue;
169
+ const depsComplete = step.dependsOn.every(dep => completedIds.has(dep));
170
+ if (depsComplete) {
171
+ step.status = 'active';
172
+ }
173
+ }
174
+ // Check if all steps are completed
175
+ const allDone = workflow.steps.every(s => s.status === 'completed' || s.status === 'skipped');
176
+ if (allDone) {
177
+ workflow.status = 'completed';
178
+ workflow.completedAt = Date.now();
179
+ workflow.events.push(this.createEvent(workflow.id, 'completed'));
180
+ }
181
+ }
182
+ createEvent(workflowId, type, extra) {
183
+ return {
184
+ id: `evt-${crypto.randomUUID().slice(0, 8)}`,
185
+ workflowId,
186
+ type,
187
+ stepId: extra?.stepId,
188
+ userId: extra?.userId,
189
+ details: extra?.details,
190
+ timestamp: Date.now(),
191
+ };
192
+ }
193
+ async readFile() {
194
+ try {
195
+ const content = await fs.readFile(this.filePath, 'utf-8');
196
+ return JSON.parse(content);
197
+ }
198
+ catch (error) {
199
+ if (error.code === 'ENOENT') {
200
+ return [];
201
+ }
202
+ throw error;
203
+ }
204
+ }
205
+ async writeFile(workflows) {
206
+ const dir = path.dirname(this.filePath);
207
+ await fs.mkdir(dir, { recursive: true });
208
+ await fs.writeFile(this.filePath, JSON.stringify(workflows, null, 2), 'utf-8');
209
+ }
210
+ }
211
+ //# sourceMappingURL=engine.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"engine.js","sourceRoot":"","sources":["../src/engine.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ export type { HumanWorkflow, WorkflowStep, WorkflowStatus, StepStatus, ReminderConfig, EscalationPolicy, WorkflowEvent, AutonomousAction, } from './types.js';
2
+ export { WorkflowEngine } from './engine.js';
3
+ export type { CreateWorkflowOptions } from './engine.js';
4
+ export { ReminderService } from './reminder.js';
5
+ export type { ReminderTarget, ReminderSender } from './reminder.js';
6
+ export { ApprovalManager } from './approval.js';
7
+ export type { ApprovalRequest, ApprovalStatus } from './approval.js';
8
+ export { AutonomousExecutor, type AutonomousExecutorDeps, type TickResult, type ToolResult as AutonomousToolResult, type GateCheckResult, } from './autonomous-executor.js';
9
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,YAAY,EACV,aAAa,EACb,YAAY,EACZ,cAAc,EACd,UAAU,EACV,cAAc,EACd,gBAAgB,EAChB,aAAa,EACb,gBAAgB,GACjB,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAC7C,YAAY,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAC;AACzD,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAChD,YAAY,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AACpE,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAChD,YAAY,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AACrE,OAAO,EACL,kBAAkB,EAClB,KAAK,sBAAsB,EAC3B,KAAK,UAAU,EACf,KAAK,UAAU,IAAI,oBAAoB,EACvC,KAAK,eAAe,GACrB,MAAM,0BAA0B,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,5 @@
1
+ export { WorkflowEngine } from './engine.js';
2
+ export { ReminderService } from './reminder.js';
3
+ export { ApprovalManager } from './approval.js';
4
+ export { AutonomousExecutor, } from './autonomous-executor.js';
5
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAUA,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAE7C,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAEhD,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAEhD,OAAO,EACL,kBAAkB,GAKnB,MAAM,0BAA0B,CAAC"}
@@ -0,0 +1,23 @@
1
+ import type { HumanWorkflow, ReminderConfig } from './types.js';
2
+ export interface ReminderTarget {
3
+ userId: string;
4
+ workflowId: string;
5
+ stepId: string;
6
+ stepName: string;
7
+ workflowName: string;
8
+ }
9
+ export interface ReminderSender {
10
+ sendReminder(target: ReminderTarget, channelType?: string): Promise<void>;
11
+ }
12
+ export declare class ReminderService {
13
+ private reminders;
14
+ private sender?;
15
+ setSender(sender: ReminderSender): void;
16
+ scheduleReminder(workflow: HumanWorkflow, stepId: string, config?: Partial<ReminderConfig>): void;
17
+ cancelReminder(workflowId: string, stepId: string): void;
18
+ cancelAllForWorkflow(workflowId: string): void;
19
+ shutdown(): void;
20
+ getActiveCount(): number;
21
+ private sendReminder;
22
+ }
23
+ //# sourceMappingURL=reminder.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"reminder.d.ts","sourceRoot":"","sources":["../src/reminder.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAIhE,MAAM,WAAW,cAAc;IAC7B,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,cAAc;IAC7B,YAAY,CAAC,MAAM,EAAE,cAAc,EAAE,WAAW,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CAC3E;AAUD,qBAAa,eAAe;IAC1B,OAAO,CAAC,SAAS,CAAwC;IACzD,OAAO,CAAC,MAAM,CAAC,CAAiB;IAEhC,SAAS,CAAC,MAAM,EAAE,cAAc,GAAG,IAAI;IAIvC,gBAAgB,CACd,QAAQ,EAAE,aAAa,EACvB,MAAM,EAAE,MAAM,EACd,MAAM,CAAC,EAAE,OAAO,CAAC,cAAc,CAAC,GAC/B,IAAI;IAwBP,cAAc,CAAC,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI;IAUxD,oBAAoB,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI;IAS9C,QAAQ,IAAI,IAAI;IAOhB,cAAc,IAAI,MAAM;YAIV,YAAY;CAqC3B"}
@@ -0,0 +1,88 @@
1
+ import { getLogger } from '@auxiora/logger';
2
+ const logger = getLogger('workflows:reminder');
3
+ export class ReminderService {
4
+ reminders = new Map();
5
+ sender;
6
+ setSender(sender) {
7
+ this.sender = sender;
8
+ }
9
+ scheduleReminder(workflow, stepId, config) {
10
+ const key = `${workflow.id}:${stepId}`;
11
+ if (this.reminders.has(key))
12
+ return;
13
+ const step = workflow.steps.find(s => s.id === stepId);
14
+ if (!step)
15
+ return;
16
+ const intervalMs = config?.intervalMs ?? workflow.reminder.intervalMs;
17
+ const maxReminders = config?.maxReminders ?? workflow.reminder.maxReminders;
18
+ const scheduled = {
19
+ workflowId: workflow.id,
20
+ stepId,
21
+ count: 0,
22
+ maxReminders,
23
+ timer: setInterval(() => {
24
+ void this.sendReminder(workflow, stepId, scheduled);
25
+ }, intervalMs),
26
+ };
27
+ this.reminders.set(key, scheduled);
28
+ logger.debug('Scheduled reminder', { workflowId: workflow.id, stepId, intervalMs });
29
+ }
30
+ cancelReminder(workflowId, stepId) {
31
+ const key = `${workflowId}:${stepId}`;
32
+ const reminder = this.reminders.get(key);
33
+ if (reminder) {
34
+ clearInterval(reminder.timer);
35
+ this.reminders.delete(key);
36
+ logger.debug('Cancelled reminder', { workflowId, stepId });
37
+ }
38
+ }
39
+ cancelAllForWorkflow(workflowId) {
40
+ for (const [key, reminder] of this.reminders) {
41
+ if (reminder.workflowId === workflowId) {
42
+ clearInterval(reminder.timer);
43
+ this.reminders.delete(key);
44
+ }
45
+ }
46
+ }
47
+ shutdown() {
48
+ for (const [, reminder] of this.reminders) {
49
+ clearInterval(reminder.timer);
50
+ }
51
+ this.reminders.clear();
52
+ }
53
+ getActiveCount() {
54
+ return this.reminders.size;
55
+ }
56
+ async sendReminder(workflow, stepId, scheduled) {
57
+ scheduled.count++;
58
+ if (scheduled.count > scheduled.maxReminders) {
59
+ this.cancelReminder(workflow.id, stepId);
60
+ return;
61
+ }
62
+ const step = workflow.steps.find(s => s.id === stepId);
63
+ if (!step || step.status !== 'active') {
64
+ this.cancelReminder(workflow.id, stepId);
65
+ return;
66
+ }
67
+ if (this.sender) {
68
+ try {
69
+ await this.sender.sendReminder({
70
+ userId: step.assigneeId,
71
+ workflowId: workflow.id,
72
+ stepId,
73
+ stepName: step.name,
74
+ workflowName: workflow.name,
75
+ });
76
+ logger.debug('Sent reminder', {
77
+ workflowId: workflow.id,
78
+ stepId,
79
+ count: scheduled.count,
80
+ });
81
+ }
82
+ catch (error) {
83
+ logger.debug('Failed to send reminder', { error: error });
84
+ }
85
+ }
86
+ }
87
+ }
88
+ //# sourceMappingURL=reminder.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"reminder.js","sourceRoot":"","sources":["../src/reminder.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,68 @@
1
+ export type WorkflowStatus = 'pending' | 'active' | 'completed' | 'failed' | 'cancelled';
2
+ export type StepStatus = 'pending' | 'active' | 'completed' | 'failed' | 'skipped';
3
+ /** An action that can be auto-executed by the AutonomousExecutor. */
4
+ export interface AutonomousAction {
5
+ /** Tool name to execute (e.g. 'file_read', 'bash', 'email_compose'). */
6
+ tool: string;
7
+ /** Parameters to pass to the tool. */
8
+ params: Record<string, unknown>;
9
+ /** Trust domain for gate checking (e.g. 'files', 'shell', 'email'). */
10
+ trustDomain: string;
11
+ /** Minimum trust level required (0-4). */
12
+ trustRequired: number;
13
+ /** Optional tool to call for rollback on failure. */
14
+ rollbackTool?: string;
15
+ /** Optional params for the rollback tool. */
16
+ rollbackParams?: Record<string, unknown>;
17
+ }
18
+ export interface WorkflowStep {
19
+ id: string;
20
+ name: string;
21
+ description: string;
22
+ assigneeId: string;
23
+ status: StepStatus;
24
+ dependsOn: string[];
25
+ completedAt?: number;
26
+ completedBy?: string;
27
+ result?: string;
28
+ /** If present, step can be auto-executed by AutonomousExecutor. */
29
+ action?: AutonomousAction;
30
+ }
31
+ export interface ReminderConfig {
32
+ enabled: boolean;
33
+ intervalMs: number;
34
+ maxReminders: number;
35
+ channelType?: string;
36
+ }
37
+ export interface EscalationPolicy {
38
+ enabled: boolean;
39
+ escalateAfterMs: number;
40
+ escalateToUserId: string;
41
+ maxEscalations: number;
42
+ }
43
+ export interface WorkflowEvent {
44
+ id: string;
45
+ workflowId: string;
46
+ type: 'created' | 'step_completed' | 'step_failed' | 'step_trust_denied' | 'step_rolled_back' | 'reminder_sent' | 'escalated' | 'completed' | 'cancelled' | 'approval_requested' | 'approved' | 'rejected';
47
+ stepId?: string;
48
+ userId?: string;
49
+ details?: string;
50
+ timestamp: number;
51
+ }
52
+ export interface HumanWorkflow {
53
+ id: string;
54
+ name: string;
55
+ description: string;
56
+ createdBy: string;
57
+ status: WorkflowStatus;
58
+ steps: WorkflowStep[];
59
+ reminder: ReminderConfig;
60
+ escalation: EscalationPolicy;
61
+ events: WorkflowEvent[];
62
+ createdAt: number;
63
+ updatedAt: number;
64
+ completedAt?: number;
65
+ /** If true, steps with actions are auto-executed by AutonomousExecutor. */
66
+ autonomous?: boolean;
67
+ }
68
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,cAAc,GAAG,SAAS,GAAG,QAAQ,GAAG,WAAW,GAAG,QAAQ,GAAG,WAAW,CAAC;AACzF,MAAM,MAAM,UAAU,GAAG,SAAS,GAAG,QAAQ,GAAG,WAAW,GAAG,QAAQ,GAAG,SAAS,CAAC;AAEnF,qEAAqE;AACrE,MAAM,WAAW,gBAAgB;IAC/B,wEAAwE;IACxE,IAAI,EAAE,MAAM,CAAC;IACb,sCAAsC;IACtC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAChC,uEAAuE;IACvE,WAAW,EAAE,MAAM,CAAC;IACpB,0CAA0C;IAC1C,aAAa,EAAE,MAAM,CAAC;IACtB,qDAAqD;IACrD,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,6CAA6C;IAC7C,cAAc,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAC1C;AAED,MAAM,WAAW,YAAY;IAC3B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,UAAU,CAAC;IACnB,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,mEAAmE;IACnE,MAAM,CAAC,EAAE,gBAAgB,CAAC;CAC3B;AAED,MAAM,WAAW,cAAc;IAC7B,OAAO,EAAE,OAAO,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;IACrB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,gBAAgB;IAC/B,OAAO,EAAE,OAAO,CAAC;IACjB,eAAe,EAAE,MAAM,CAAC;IACxB,gBAAgB,EAAE,MAAM,CAAC;IACzB,cAAc,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,WAAW,aAAa;IAC5B,EAAE,EAAE,MAAM,CAAC;IACX,UAAU,EAAE,MAAM,CAAC;IACnB,IAAI,EAAE,SAAS,GAAG,gBAAgB,GAAG,aAAa,GAAG,mBAAmB,GAAG,kBAAkB,GAAG,eAAe,GAAG,WAAW,GAAG,WAAW,GAAG,WAAW,GAAG,oBAAoB,GAAG,UAAU,GAAG,UAAU,CAAC;IAC3M,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,aAAa;IAC5B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,cAAc,CAAC;IACvB,KAAK,EAAE,YAAY,EAAE,CAAC;IACtB,QAAQ,EAAE,cAAc,CAAC;IACzB,UAAU,EAAE,gBAAgB,CAAC;IAC7B,MAAM,EAAE,aAAa,EAAE,CAAC;IACxB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,2EAA2E;IAC3E,UAAU,CAAC,EAAE,OAAO,CAAC;CACtB"}
package/dist/types.js ADDED
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":""}
package/package.json ADDED
@@ -0,0 +1,27 @@
1
+ {
2
+ "name": "@auxiora/workflows",
3
+ "version": "1.0.0",
4
+ "description": "Cross-person workflow orchestration with approvals, reminders, and escalation",
5
+ "type": "module",
6
+ "main": "dist/index.js",
7
+ "types": "dist/index.d.ts",
8
+ "exports": {
9
+ ".": {
10
+ "types": "./dist/index.d.ts",
11
+ "import": "./dist/index.js"
12
+ }
13
+ },
14
+ "dependencies": {
15
+ "@auxiora/logger": "1.0.0",
16
+ "@auxiora/core": "1.0.0",
17
+ "@auxiora/audit": "1.0.0"
18
+ },
19
+ "engines": {
20
+ "node": ">=22.0.0"
21
+ },
22
+ "scripts": {
23
+ "build": "tsc",
24
+ "clean": "rm -rf dist",
25
+ "typecheck": "tsc --noEmit"
26
+ }
27
+ }