@synergenius/flowweaver-pack-weaver 0.1.0 → 0.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (88) hide show
  1. package/LICENSE +204 -0
  2. package/dist/bot/agent-provider.d.ts +6 -10
  3. package/dist/bot/agent-provider.d.ts.map +1 -1
  4. package/dist/bot/agent-provider.js +65 -18
  5. package/dist/bot/agent-provider.js.map +1 -1
  6. package/dist/bot/approvals.d.ts +22 -0
  7. package/dist/bot/approvals.d.ts.map +1 -0
  8. package/dist/bot/approvals.js +187 -0
  9. package/dist/bot/approvals.js.map +1 -0
  10. package/dist/bot/bot-agent-channel.d.ts +7 -4
  11. package/dist/bot/bot-agent-channel.d.ts.map +1 -1
  12. package/dist/bot/bot-agent-channel.js +10 -12
  13. package/dist/bot/bot-agent-channel.js.map +1 -1
  14. package/dist/bot/cost-store.d.ts +18 -0
  15. package/dist/bot/cost-store.d.ts.map +1 -0
  16. package/dist/bot/cost-store.js +81 -0
  17. package/dist/bot/cost-store.js.map +1 -0
  18. package/dist/bot/cost-tracker.d.ts +18 -0
  19. package/dist/bot/cost-tracker.d.ts.map +1 -0
  20. package/dist/bot/cost-tracker.js +60 -0
  21. package/dist/bot/cost-tracker.js.map +1 -0
  22. package/dist/bot/cron-parser.d.ts +5 -0
  23. package/dist/bot/cron-parser.d.ts.map +1 -0
  24. package/dist/bot/cron-parser.js +141 -0
  25. package/dist/bot/cron-parser.js.map +1 -0
  26. package/dist/bot/cron-scheduler.d.ts +12 -0
  27. package/dist/bot/cron-scheduler.d.ts.map +1 -0
  28. package/dist/bot/cron-scheduler.js +43 -0
  29. package/dist/bot/cron-scheduler.js.map +1 -0
  30. package/dist/bot/dashboard.d.ts +31 -0
  31. package/dist/bot/dashboard.d.ts.map +1 -0
  32. package/dist/bot/dashboard.js +461 -0
  33. package/dist/bot/dashboard.js.map +1 -0
  34. package/dist/bot/file-watcher.d.ts +24 -0
  35. package/dist/bot/file-watcher.d.ts.map +1 -0
  36. package/dist/bot/file-watcher.js +98 -0
  37. package/dist/bot/file-watcher.js.map +1 -0
  38. package/dist/bot/index.d.ts +17 -3
  39. package/dist/bot/index.d.ts.map +1 -1
  40. package/dist/bot/index.js +17 -0
  41. package/dist/bot/index.js.map +1 -1
  42. package/dist/bot/notifications.d.ts +3 -1
  43. package/dist/bot/notifications.d.ts.map +1 -1
  44. package/dist/bot/notifications.js +78 -25
  45. package/dist/bot/notifications.js.map +1 -1
  46. package/dist/bot/pipeline-runner.d.ts +22 -0
  47. package/dist/bot/pipeline-runner.d.ts.map +1 -0
  48. package/dist/bot/pipeline-runner.js +263 -0
  49. package/dist/bot/pipeline-runner.js.map +1 -0
  50. package/dist/bot/provider-registry.d.ts +26 -0
  51. package/dist/bot/provider-registry.d.ts.map +1 -0
  52. package/dist/bot/provider-registry.js +175 -0
  53. package/dist/bot/provider-registry.js.map +1 -0
  54. package/dist/bot/run-store.d.ts +14 -0
  55. package/dist/bot/run-store.d.ts.map +1 -0
  56. package/dist/bot/run-store.js +105 -0
  57. package/dist/bot/run-store.js.map +1 -0
  58. package/dist/bot/runner.d.ts +5 -1
  59. package/dist/bot/runner.d.ts.map +1 -1
  60. package/dist/bot/runner.js +130 -21
  61. package/dist/bot/runner.js.map +1 -1
  62. package/dist/bot/types.d.ts +223 -4
  63. package/dist/bot/types.d.ts.map +1 -1
  64. package/dist/bot/utils.d.ts +2 -0
  65. package/dist/bot/utils.d.ts.map +1 -0
  66. package/dist/bot/utils.js +20 -0
  67. package/dist/bot/utils.js.map +1 -0
  68. package/dist/bot/watch-daemon.d.ts +19 -0
  69. package/dist/bot/watch-daemon.d.ts.map +1 -0
  70. package/dist/bot/watch-daemon.js +178 -0
  71. package/dist/bot/watch-daemon.js.map +1 -0
  72. package/dist/bot/web-approval.d.ts +19 -0
  73. package/dist/bot/web-approval.d.ts.map +1 -0
  74. package/dist/bot/web-approval.js +207 -0
  75. package/dist/bot/web-approval.js.map +1 -0
  76. package/dist/cli.d.ts +3 -0
  77. package/dist/cli.d.ts.map +1 -0
  78. package/dist/cli.js +725 -0
  79. package/dist/cli.js.map +1 -0
  80. package/dist/index.d.ts +18 -3
  81. package/dist/index.d.ts.map +1 -1
  82. package/dist/index.js +20 -0
  83. package/dist/index.js.map +1 -1
  84. package/dist/templates/weaver-template.d.ts.map +1 -1
  85. package/dist/templates/weaver-template.js +26 -7
  86. package/dist/templates/weaver-template.js.map +1 -1
  87. package/flowweaver.manifest.json +2 -2
  88. package/package.json +17 -5
@@ -1,12 +1,42 @@
1
- export type ProviderName = 'anthropic' | 'claude-cli' | 'copilot-cli';
1
+ export type ProviderName = 'anthropic' | 'claude-cli' | 'copilot-cli' | (string & {});
2
2
  export interface BotProviderConfig {
3
3
  name: ProviderName;
4
4
  model?: string;
5
5
  maxTokens?: number;
6
+ module?: string;
7
+ options?: Record<string, unknown>;
6
8
  }
9
+ export interface ProviderMetadata {
10
+ displayName: string;
11
+ description?: string;
12
+ source: 'built-in' | 'npm' | 'local';
13
+ requiredEnvVars?: string[];
14
+ detectCliCommand?: string;
15
+ }
16
+ export interface ProviderFactoryConfig {
17
+ model?: string;
18
+ maxTokens?: number;
19
+ options?: Record<string, unknown>;
20
+ }
21
+ export type ProviderFactory = (config: ProviderFactoryConfig) => BotAgentProvider | Promise<BotAgentProvider>;
22
+ export interface ProviderModule {
23
+ createProvider: ProviderFactory;
24
+ metadata?: ProviderMetadata;
25
+ }
26
+ export interface BotAgentProvider {
27
+ decide(request: {
28
+ agentId: string;
29
+ context: Record<string, unknown>;
30
+ prompt: string;
31
+ }): Promise<Record<string, unknown>>;
32
+ }
33
+ export type ApprovalMode = 'auto' | 'prompt' | 'webhook' | 'timeout-auto' | 'web';
7
34
  export interface BotApprovalConfig {
8
- mode: 'auto' | 'timeout-auto';
35
+ mode: ApprovalMode;
9
36
  timeoutSeconds?: number;
37
+ webhookUrl?: string;
38
+ webPort?: number;
39
+ webOpen?: boolean;
10
40
  }
11
41
  export interface BotNotifyConfig {
12
42
  channel: 'discord' | 'slack' | 'webhook';
@@ -14,7 +44,7 @@ export interface BotNotifyConfig {
14
44
  events?: NotificationEventType[];
15
45
  headers?: Record<string, string>;
16
46
  }
17
- export type NotificationEventType = 'workflow-start' | 'workflow-complete' | 'cycle-start' | 'cycle-complete' | 'approval-needed' | 'error';
47
+ export type NotificationEventType = 'workflow-start' | 'workflow-complete' | 'cycle-start' | 'cycle-complete' | 'approval-needed' | 'error' | 'pipeline-start' | 'pipeline-complete' | 'stage-start' | 'stage-complete';
18
48
  export interface NotificationEvent {
19
49
  type: NotificationEventType;
20
50
  workflowFile?: string;
@@ -25,10 +55,23 @@ export interface NotificationEvent {
25
55
  diff?: Record<string, unknown>;
26
56
  outcome?: string;
27
57
  error?: string;
58
+ pipelineName?: string;
59
+ stageId?: string;
60
+ completedStages?: number;
61
+ totalStages?: number;
62
+ }
63
+ export type ExecutionEventType = 'node-start' | 'node-complete' | 'node-error';
64
+ export interface ExecutionEvent {
65
+ type: ExecutionEventType;
66
+ nodeId: string;
67
+ nodeType?: string;
68
+ timestamp: number;
69
+ durationMs?: number;
70
+ error?: string;
28
71
  }
29
72
  export interface BotConfig {
30
73
  provider: 'auto' | ProviderName | BotProviderConfig;
31
- approval?: 'auto' | 'timeout-auto' | BotApprovalConfig;
74
+ approval?: 'auto' | 'prompt' | 'webhook' | 'timeout-auto' | 'web' | BotApprovalConfig;
32
75
  notify?: BotNotifyConfig | BotNotifyConfig[];
33
76
  target?: string;
34
77
  }
@@ -40,5 +83,181 @@ export interface WorkflowResult {
40
83
  outcome: string;
41
84
  functionName?: string;
42
85
  executionTime?: number;
86
+ cost?: RunCostSummary;
87
+ }
88
+ export type RunOutcome = 'completed' | 'failed' | 'error' | 'skipped';
89
+ export interface RunRecord {
90
+ id: string;
91
+ workflowFile: string;
92
+ startedAt: string;
93
+ finishedAt: string;
94
+ durationMs: number;
95
+ success: boolean;
96
+ outcome: RunOutcome;
97
+ summary: string;
98
+ functionName?: string;
99
+ executionTime?: number;
100
+ params?: Record<string, unknown>;
101
+ dryRun: boolean;
102
+ provider?: string;
103
+ pipelineName?: string;
104
+ stageName?: string;
105
+ }
106
+ export interface RunFilter {
107
+ workflowFile?: string;
108
+ outcome?: RunOutcome;
109
+ success?: boolean;
110
+ since?: string;
111
+ before?: string;
112
+ limit?: number;
113
+ }
114
+ export interface RetentionPolicy {
115
+ maxRecords?: number;
116
+ maxAgeDays?: number;
117
+ }
118
+ export interface TokenUsage {
119
+ inputTokens: number;
120
+ outputTokens: number;
121
+ cacheCreationInputTokens?: number;
122
+ cacheReadInputTokens?: number;
123
+ }
124
+ export type OnUsageCallback = (step: string, model: string, usage: TokenUsage) => void;
125
+ export interface RunCostEntry {
126
+ step: string;
127
+ model: string;
128
+ usage: TokenUsage;
129
+ estimatedCost: number;
130
+ timestamp: number;
131
+ }
132
+ export interface RunCostSummary {
133
+ entries: RunCostEntry[];
134
+ totalInputTokens: number;
135
+ totalOutputTokens: number;
136
+ totalCost: number;
137
+ model: string;
138
+ provider: string;
139
+ }
140
+ export interface CostRecord {
141
+ timestamp: number;
142
+ workflowFile: string;
143
+ provider: string;
144
+ model: string;
145
+ inputTokens: number;
146
+ outputTokens: number;
147
+ estimatedCost: number;
148
+ steps: number;
149
+ }
150
+ export interface CostSummary {
151
+ totalCost: number;
152
+ totalInputTokens: number;
153
+ totalOutputTokens: number;
154
+ totalRuns: number;
155
+ byModel: Record<string, {
156
+ runs: number;
157
+ inputTokens: number;
158
+ outputTokens: number;
159
+ cost: number;
160
+ }>;
161
+ }
162
+ export type CronExpression = string;
163
+ export interface ParsedCron {
164
+ minute: CronField;
165
+ hour: CronField;
166
+ dayOfMonth: CronField;
167
+ month: CronField;
168
+ dayOfWeek: CronField;
169
+ source: string;
170
+ }
171
+ export interface CronField {
172
+ type: 'wildcard' | 'list';
173
+ values: number[];
174
+ }
175
+ export type TriggerSource = 'file-change' | 'cron';
176
+ export interface WatchDaemonOptions {
177
+ filePath: string;
178
+ watchFile: boolean;
179
+ cron?: CronExpression;
180
+ debounceMs: number;
181
+ logFile?: string;
182
+ verbose: boolean;
183
+ params?: Record<string, unknown>;
184
+ config?: WeaverConfig;
185
+ quiet: boolean;
186
+ }
187
+ export interface WatchDaemonState {
188
+ running: boolean;
189
+ lastRun: Date | null;
190
+ lastTrigger: TriggerSource | null;
191
+ lastResult: WorkflowResult | null;
192
+ runCount: number;
193
+ errorCount: number;
194
+ startedAt: Date;
195
+ queued: boolean;
196
+ }
197
+ export type StageCondition = 'on-success' | 'on-failure' | 'always';
198
+ export type StageStatus = 'pending' | 'running' | 'completed' | 'failed' | 'skipped' | 'cancelled';
199
+ export interface PipelineStage {
200
+ id: string;
201
+ workflow: string;
202
+ label?: string;
203
+ dependsOn?: string[];
204
+ condition?: StageCondition;
205
+ params?: Record<string, unknown>;
206
+ timeoutSeconds?: number;
207
+ }
208
+ export interface PipelineConfig {
209
+ version: 1;
210
+ name: string;
211
+ description?: string;
212
+ stages: PipelineStage[];
213
+ failFast?: boolean;
214
+ defaultTimeoutSeconds?: number;
215
+ config?: WeaverConfig;
216
+ }
217
+ export interface StageResult {
218
+ id: string;
219
+ status: StageStatus;
220
+ workflowResult: WorkflowResult | null;
221
+ durationMs: number;
222
+ error?: string;
223
+ wave: number;
224
+ }
225
+ export interface PipelineResult {
226
+ success: boolean;
227
+ outcome: string;
228
+ durationMs: number;
229
+ stages: Record<string, StageResult>;
230
+ stageOrder: string[];
231
+ }
232
+ export type DashboardEventType = ExecutionEventType | 'workflow-start' | 'workflow-complete' | 'workflow-error' | 'approval-pending' | 'approval-resolved';
233
+ export type DashboardNodeStatus = 'pending' | 'running' | 'succeeded' | 'failed';
234
+ export interface DashboardEvent {
235
+ type: DashboardEventType;
236
+ timestamp: number;
237
+ nodeId?: string;
238
+ nodeType?: string;
239
+ durationMs?: number;
240
+ error?: string;
241
+ summary?: string;
242
+ approval?: {
243
+ id: string;
244
+ prompt: string;
245
+ context: Record<string, unknown>;
246
+ };
247
+ }
248
+ export interface DashboardNodeState {
249
+ nodeId: string;
250
+ nodeType?: string;
251
+ status: DashboardNodeStatus;
252
+ startedAt?: number;
253
+ completedAt?: number;
254
+ durationMs?: number;
255
+ error?: string;
256
+ }
257
+ export interface DashboardServerOptions {
258
+ port: number;
259
+ open: boolean;
260
+ keepAlive: boolean;
261
+ keepAliveSeconds: number;
43
262
  }
44
263
  //# sourceMappingURL=types.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/bot/types.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,YAAY,GAAG,WAAW,GAAG,YAAY,GAAG,aAAa,CAAC;AAEtE,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,YAAY,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,MAAM,GAAG,cAAc,CAAC;IAC9B,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAED,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,SAAS,GAAG,OAAO,GAAG,SAAS,CAAC;IACzC,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,CAAC,EAAE,qBAAqB,EAAE,CAAC;IACjC,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAClC;AAED,MAAM,MAAM,qBAAqB,GAC7B,gBAAgB,GAChB,mBAAmB,GACnB,aAAa,GACb,gBAAgB,GAChB,iBAAiB,GACjB,OAAO,CAAC;AAEZ,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,qBAAqB,CAAC;IAC5B,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACnC,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC/B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,SAAS;IACxB,QAAQ,EAAE,MAAM,GAAG,YAAY,GAAG,iBAAiB,CAAC;IACpD,QAAQ,CAAC,EAAE,MAAM,GAAG,cAAc,GAAG,iBAAiB,CAAC;IACvD,MAAM,CAAC,EAAE,eAAe,GAAG,eAAe,EAAE,CAAC;IAC7C,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,gFAAgF;AAChF,MAAM,MAAM,YAAY,GAAG,SAAS,CAAC;AAErC,MAAM,WAAW,cAAc;IAC7B,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/bot/types.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export declare function openBrowser(url: string): void;
2
+ //# sourceMappingURL=utils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../src/bot/utils.ts"],"names":[],"mappings":"AAEA,wBAAgB,WAAW,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAc7C"}
@@ -0,0 +1,20 @@
1
+ import { exec } from 'node:child_process';
2
+ export function openBrowser(url) {
3
+ let cmd;
4
+ if (process.platform === 'darwin') {
5
+ cmd = `open "${url}"`;
6
+ }
7
+ else if (process.platform === 'win32') {
8
+ // Windows 'start' treats the first quoted string as a window title,
9
+ // so we pass an empty title before the URL
10
+ cmd = `start "" "${url}"`;
11
+ }
12
+ else {
13
+ cmd = `xdg-open "${url}"`;
14
+ }
15
+ exec(cmd, (err) => {
16
+ if (err)
17
+ console.log(`[weaver] Could not open browser. Visit: ${url}`);
18
+ });
19
+ }
20
+ //# sourceMappingURL=utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../src/bot/utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,oBAAoB,CAAC;AAE1C,MAAM,UAAU,WAAW,CAAC,GAAW;IACrC,IAAI,GAAW,CAAC;IAChB,IAAI,OAAO,CAAC,QAAQ,KAAK,QAAQ,EAAE,CAAC;QAClC,GAAG,GAAG,SAAS,GAAG,GAAG,CAAC;IACxB,CAAC;SAAM,IAAI,OAAO,CAAC,QAAQ,KAAK,OAAO,EAAE,CAAC;QACxC,oEAAoE;QACpE,2CAA2C;QAC3C,GAAG,GAAG,aAAa,GAAG,GAAG,CAAC;IAC5B,CAAC;SAAM,CAAC;QACN,GAAG,GAAG,aAAa,GAAG,GAAG,CAAC;IAC5B,CAAC;IACD,IAAI,CAAC,GAAG,EAAE,CAAC,GAAG,EAAE,EAAE;QAChB,IAAI,GAAG;YAAE,OAAO,CAAC,GAAG,CAAC,2CAA2C,GAAG,EAAE,CAAC,CAAC;IACzE,CAAC,CAAC,CAAC;AACL,CAAC"}
@@ -0,0 +1,19 @@
1
+ import type { WatchDaemonOptions } from './types.js';
2
+ export declare class WatchDaemon {
3
+ private options;
4
+ private fileWatcher;
5
+ private cronScheduler;
6
+ private logStream;
7
+ private state;
8
+ private stopping;
9
+ private forceExit;
10
+ constructor(options: WatchDaemonOptions);
11
+ start(): Promise<void>;
12
+ private onTrigger;
13
+ private executeRun;
14
+ private setupSignalHandlers;
15
+ private printSummary;
16
+ private log;
17
+ private cleanup;
18
+ }
19
+ //# sourceMappingURL=watch-daemon.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"watch-daemon.d.ts","sourceRoot":"","sources":["../../src/bot/watch-daemon.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAiB,kBAAkB,EAAoD,MAAM,YAAY,CAAC;AAMtH,qBAAa,WAAW;IACtB,OAAO,CAAC,OAAO,CAAqB;IACpC,OAAO,CAAC,WAAW,CAA4B;IAC/C,OAAO,CAAC,aAAa,CAA8B;IACnD,OAAO,CAAC,SAAS,CAA+B;IAChD,OAAO,CAAC,KAAK,CAAmB;IAChC,OAAO,CAAC,QAAQ,CAAS;IACzB,OAAO,CAAC,SAAS,CAAS;gBAEd,OAAO,EAAE,kBAAkB;IAcjC,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IA6C5B,OAAO,CAAC,SAAS;YAYH,UAAU;IAiDxB,OAAO,CAAC,mBAAmB;IAyC3B,OAAO,CAAC,YAAY;IASpB,OAAO,CAAC,GAAG;IASX,OAAO,CAAC,OAAO;CAMhB"}
@@ -0,0 +1,178 @@
1
+ import * as fs from 'node:fs';
2
+ import * as path from 'node:path';
3
+ import { runWorkflow } from './runner.js';
4
+ import { parseCron } from './cron-parser.js';
5
+ import { FileWatcher } from './file-watcher.js';
6
+ import { CronScheduler } from './cron-scheduler.js';
7
+ export class WatchDaemon {
8
+ options;
9
+ fileWatcher = null;
10
+ cronScheduler = null;
11
+ logStream = null;
12
+ state;
13
+ stopping = false;
14
+ forceExit = false;
15
+ constructor(options) {
16
+ this.options = options;
17
+ this.state = {
18
+ running: false,
19
+ lastRun: null,
20
+ lastTrigger: null,
21
+ lastResult: null,
22
+ runCount: 0,
23
+ errorCount: 0,
24
+ startedAt: new Date(),
25
+ queued: false,
26
+ };
27
+ }
28
+ async start() {
29
+ const absPath = path.resolve(this.options.filePath);
30
+ if (!fs.existsSync(absPath)) {
31
+ throw new Error(`Workflow file not found: ${absPath}`);
32
+ }
33
+ if (this.options.logFile) {
34
+ this.logStream = fs.createWriteStream(this.options.logFile, { flags: 'a' });
35
+ }
36
+ this.log(`Watching ${absPath}`);
37
+ if (this.options.watchFile) {
38
+ this.fileWatcher = new FileWatcher({
39
+ filePath: absPath,
40
+ debounceMs: this.options.debounceMs,
41
+ });
42
+ this.fileWatcher.on('change', () => this.onTrigger('file-change'));
43
+ this.fileWatcher.start();
44
+ this.log('File watcher started');
45
+ }
46
+ if (this.options.cron) {
47
+ const parsed = parseCron(this.options.cron);
48
+ this.cronScheduler = new CronScheduler(parsed);
49
+ this.cronScheduler.on('tick', () => this.onTrigger('cron'));
50
+ this.cronScheduler.start();
51
+ this.log(`Cron scheduler started: ${this.options.cron}`);
52
+ }
53
+ this.setupSignalHandlers();
54
+ // Keep alive
55
+ await new Promise((resolve) => {
56
+ const check = setInterval(() => {
57
+ if (this.forceExit) {
58
+ clearInterval(check);
59
+ resolve();
60
+ }
61
+ }, 500);
62
+ });
63
+ this.cleanup();
64
+ }
65
+ onTrigger(source) {
66
+ if (this.stopping)
67
+ return;
68
+ if (this.state.running) {
69
+ this.state.queued = true;
70
+ this.log(`Run in progress, queuing trigger (${source})`);
71
+ return;
72
+ }
73
+ this.executeRun(source);
74
+ }
75
+ async executeRun(source) {
76
+ this.state.running = true;
77
+ this.state.queued = false;
78
+ const runNum = this.state.runCount + 1;
79
+ this.log(`\nRun #${runNum} triggered by ${source}`);
80
+ const onEvent = this.options.quiet
81
+ ? undefined
82
+ : (event) => {
83
+ if (event.type === 'node-complete') {
84
+ this.log(` + ${event.nodeId}${event.nodeType ? ` (${event.nodeType})` : ''}`);
85
+ }
86
+ else if (event.type === 'node-error') {
87
+ this.log(` x ${event.nodeId}: ${event.error ?? 'unknown error'}`);
88
+ }
89
+ };
90
+ try {
91
+ const result = await runWorkflow(path.resolve(this.options.filePath), {
92
+ params: this.options.params,
93
+ verbose: this.options.verbose,
94
+ config: this.options.config,
95
+ onEvent,
96
+ });
97
+ this.state.lastResult = result;
98
+ this.state.runCount++;
99
+ this.state.lastRun = new Date();
100
+ this.state.lastTrigger = source;
101
+ if (!result.success)
102
+ this.state.errorCount++;
103
+ const statusColor = result.success ? '\x1b[32m' : '\x1b[31m';
104
+ this.log(`${statusColor}Run #${runNum}: ${result.outcome}\x1b[0m - ${result.summary}`);
105
+ }
106
+ catch (err) {
107
+ const msg = err instanceof Error ? err.message : String(err);
108
+ this.state.errorCount++;
109
+ this.state.runCount++;
110
+ this.state.lastRun = new Date();
111
+ this.log(`\x1b[31mRun #${runNum}: fatal error\x1b[0m - ${msg}`);
112
+ }
113
+ this.state.running = false;
114
+ if (this.state.queued && !this.stopping) {
115
+ this.executeRun(source);
116
+ }
117
+ }
118
+ setupSignalHandlers() {
119
+ const handler = () => {
120
+ if (this.stopping) {
121
+ // Second signal: force exit after 2s
122
+ this.log('\nForce exit in 2s...');
123
+ setTimeout(() => {
124
+ this.forceExit = true;
125
+ }, 2000);
126
+ return;
127
+ }
128
+ this.stopping = true;
129
+ this.log('\nStopping daemon...');
130
+ if (this.fileWatcher)
131
+ this.fileWatcher.stop();
132
+ if (this.cronScheduler)
133
+ this.cronScheduler.stop();
134
+ if (this.state.running) {
135
+ this.log('Waiting for current run to finish (30s timeout, Ctrl+C to force)...');
136
+ const timeout = setTimeout(() => {
137
+ this.forceExit = true;
138
+ }, 30_000);
139
+ const check = setInterval(() => {
140
+ if (!this.state.running) {
141
+ clearTimeout(timeout);
142
+ clearInterval(check);
143
+ this.printSummary();
144
+ this.forceExit = true;
145
+ }
146
+ }, 500);
147
+ }
148
+ else {
149
+ this.printSummary();
150
+ this.forceExit = true;
151
+ }
152
+ };
153
+ process.on('SIGINT', handler);
154
+ process.on('SIGTERM', handler);
155
+ }
156
+ printSummary() {
157
+ const uptime = Date.now() - this.state.startedAt.getTime();
158
+ const uptimeStr = uptime < 60_000
159
+ ? `${(uptime / 1000).toFixed(0)}s`
160
+ : `${(uptime / 60_000).toFixed(1)}m`;
161
+ this.log(`\nDaemon summary: ${this.state.runCount} runs, ${this.state.errorCount} errors, uptime ${uptimeStr}`);
162
+ }
163
+ log(msg) {
164
+ const ts = new Date().toISOString().slice(11, 19);
165
+ const line = `[${ts}] ${msg}`;
166
+ console.log(line);
167
+ if (this.logStream) {
168
+ this.logStream.write(line + '\n');
169
+ }
170
+ }
171
+ cleanup() {
172
+ if (this.logStream) {
173
+ this.logStream.end();
174
+ this.logStream = null;
175
+ }
176
+ }
177
+ }
178
+ //# sourceMappingURL=watch-daemon.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"watch-daemon.js","sourceRoot":"","sources":["../../src/bot/watch-daemon.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,19 @@
1
+ import type { NotificationEvent } from './types.js';
2
+ import type { ApprovalHandler, ApprovalRequest, ApprovalResult } from './approvals.js';
3
+ import type { DashboardServer } from './dashboard.js';
4
+ export declare class WebApprovalHandler implements ApprovalHandler {
5
+ private timeoutSeconds;
6
+ private shouldOpen;
7
+ private notifier;
8
+ private dashboardServer?;
9
+ constructor(options: {
10
+ timeoutSeconds: number;
11
+ open?: boolean;
12
+ notifier: (event: NotificationEvent) => Promise<void>;
13
+ dashboardServer?: DashboardServer;
14
+ });
15
+ handle(request: ApprovalRequest, event: NotificationEvent): Promise<ApprovalResult>;
16
+ private handleViaDashboard;
17
+ private handleStandalone;
18
+ }
19
+ //# sourceMappingURL=web-approval.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"web-approval.d.ts","sourceRoot":"","sources":["../../src/bot/web-approval.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AACpD,OAAO,KAAK,EAAE,eAAe,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AACvF,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAGtD,qBAAa,kBAAmB,YAAW,eAAe;IACxD,OAAO,CAAC,cAAc,CAAS;IAC/B,OAAO,CAAC,UAAU,CAAU;IAC5B,OAAO,CAAC,QAAQ,CAA8C;IAC9D,OAAO,CAAC,eAAe,CAAC,CAAkB;gBAE9B,OAAO,EAAE;QACnB,cAAc,EAAE,MAAM,CAAC;QACvB,IAAI,CAAC,EAAE,OAAO,CAAC;QACf,QAAQ,EAAE,CAAC,KAAK,EAAE,iBAAiB,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;QACtD,eAAe,CAAC,EAAE,eAAe,CAAC;KACnC;IAOK,MAAM,CACV,OAAO,EAAE,eAAe,EACxB,KAAK,EAAE,iBAAiB,GACvB,OAAO,CAAC,cAAc,CAAC;IAY1B,OAAO,CAAC,kBAAkB;IAmC1B,OAAO,CAAC,gBAAgB;CAkEzB"}