@synergenius/flow-weaver-pack-weaver 0.8.2 → 0.9.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.
- package/LICENSE +23 -0
- package/dist/bot/audit-store.d.ts.map +1 -1
- package/dist/bot/audit-store.js +3 -11
- package/dist/bot/audit-store.js.map +1 -1
- package/dist/bot/cost-store.d.ts.map +1 -1
- package/dist/bot/cost-store.js +10 -14
- package/dist/bot/cost-store.js.map +1 -1
- package/dist/bot/genesis-store.d.ts.map +1 -1
- package/dist/bot/genesis-store.js +11 -20
- package/dist/bot/genesis-store.js.map +1 -1
- package/dist/bot/index.d.ts +3 -0
- package/dist/bot/index.d.ts.map +1 -1
- package/dist/bot/index.js +3 -0
- package/dist/bot/index.js.map +1 -1
- package/dist/bot/pipeline-runner.d.ts.map +1 -1
- package/dist/bot/pipeline-runner.js +8 -1
- package/dist/bot/pipeline-runner.js.map +1 -1
- package/dist/bot/run-store.d.ts.map +1 -1
- package/dist/bot/run-store.js +2 -10
- package/dist/bot/run-store.js.map +1 -1
- package/dist/bot/runner.d.ts.map +1 -1
- package/dist/bot/runner.js +12 -2
- package/dist/bot/runner.js.map +1 -1
- package/dist/bot/safe-json.d.ts +32 -0
- package/dist/bot/safe-json.d.ts.map +1 -0
- package/dist/bot/safe-json.js +56 -0
- package/dist/bot/safe-json.js.map +1 -0
- package/dist/bot/safe-path.d.ts +18 -0
- package/dist/bot/safe-path.d.ts.map +1 -0
- package/dist/bot/safe-path.js +40 -0
- package/dist/bot/safe-path.js.map +1 -0
- package/dist/bot/task-queue.d.ts.map +1 -1
- package/dist/bot/task-queue.js +7 -10
- package/dist/bot/task-queue.js.map +1 -1
- package/dist/cli-bridge.d.ts.map +1 -1
- package/dist/cli-bridge.js +6 -3
- package/dist/cli-bridge.js.map +1 -1
- package/dist/cli-handlers.d.ts +3 -1
- package/dist/cli-handlers.d.ts.map +1 -1
- package/dist/cli-handlers.js +146 -0
- package/dist/cli-handlers.js.map +1 -1
- package/dist/handlers/on-bot-completed.d.ts +21 -0
- package/dist/handlers/on-bot-completed.d.ts.map +1 -0
- package/dist/handlers/on-bot-completed.js +28 -0
- package/dist/handlers/on-bot-completed.js.map +1 -0
- package/dist/handlers/on-execution-failure.d.ts +23 -0
- package/dist/handlers/on-execution-failure.d.ts.map +1 -0
- package/dist/handlers/on-execution-failure.js +28 -0
- package/dist/handlers/on-execution-failure.js.map +1 -0
- package/dist/handlers/scheduled-run.d.ts +24 -0
- package/dist/handlers/scheduled-run.d.ts.map +1 -0
- package/dist/handlers/scheduled-run.js +25 -0
- package/dist/handlers/scheduled-run.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +4 -0
- package/dist/index.js.map +1 -1
- package/flowweaver.manifest.json +93 -2
- package/package.json +1 -1
- package/src/bot/audit-store.ts +3 -12
- package/src/bot/cost-store.ts +11 -12
- package/src/bot/genesis-store.ts +11 -17
- package/src/bot/index.ts +5 -0
- package/src/bot/pipeline-runner.ts +7 -1
- package/src/bot/run-store.ts +2 -11
- package/src/bot/runner.ts +14 -2
- package/src/bot/safe-json.ts +76 -0
- package/src/bot/safe-path.ts +44 -0
- package/src/bot/task-queue.ts +6 -8
- package/src/cli-bridge.ts +8 -3
- package/src/cli-handlers.ts +155 -1
- package/src/handlers/on-bot-completed.ts +48 -0
- package/src/handlers/on-execution-failure.ts +42 -0
- package/src/handlers/scheduled-run.ts +42 -0
- package/src/index.ts +5 -0
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Safe JSON parsing utilities.
|
|
3
|
+
*
|
|
4
|
+
* Wraps JSON.parse with proper error handling and optional context for
|
|
5
|
+
* meaningful error messages. Prevents crashes from malformed config files,
|
|
6
|
+
* corrupt NDJSON lines, or unexpected AI output.
|
|
7
|
+
*/
|
|
8
|
+
/**
|
|
9
|
+
* Parse JSON safely, returning a discriminated result instead of throwing.
|
|
10
|
+
*/
|
|
11
|
+
export function safeJsonParse(text, context) {
|
|
12
|
+
try {
|
|
13
|
+
return { ok: true, value: JSON.parse(text) };
|
|
14
|
+
}
|
|
15
|
+
catch (err) {
|
|
16
|
+
const msg = err instanceof Error ? err.message : String(err);
|
|
17
|
+
const prefix = context ? `${context}: ` : '';
|
|
18
|
+
return { ok: false, error: `${prefix}Invalid JSON — ${msg}` };
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Parse JSON or return a fallback value on failure.
|
|
23
|
+
* Optionally logs a warning when parsing fails.
|
|
24
|
+
*/
|
|
25
|
+
export function jsonParseOr(text, fallback, context) {
|
|
26
|
+
const result = safeJsonParse(text, context);
|
|
27
|
+
if (result.ok)
|
|
28
|
+
return result.value;
|
|
29
|
+
if (context) {
|
|
30
|
+
console.error(`[weaver] ${result.error}`);
|
|
31
|
+
}
|
|
32
|
+
return fallback;
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* Parse NDJSON (newline-delimited JSON) safely.
|
|
36
|
+
* Skips corrupt lines and optionally reports them.
|
|
37
|
+
*/
|
|
38
|
+
export function parseNdjson(content, context) {
|
|
39
|
+
const lines = content.split('\n').filter((line) => line.trim().length > 0);
|
|
40
|
+
const records = [];
|
|
41
|
+
let errors = 0;
|
|
42
|
+
for (const line of lines) {
|
|
43
|
+
const result = safeJsonParse(line);
|
|
44
|
+
if (result.ok) {
|
|
45
|
+
records.push(result.value);
|
|
46
|
+
}
|
|
47
|
+
else {
|
|
48
|
+
errors++;
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
if (errors > 0 && context) {
|
|
52
|
+
console.error(`[weaver] ${context}: skipped ${errors} corrupt line(s)`);
|
|
53
|
+
}
|
|
54
|
+
return { records, errors };
|
|
55
|
+
}
|
|
56
|
+
//# sourceMappingURL=safe-json.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"safe-json.js","sourceRoot":"","sources":["../../src/bot/safe-json.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAUH;;GAEG;AACH,MAAM,UAAU,aAAa,CAC3B,IAAY,EACZ,OAAgB;IAEhB,IAAI,CAAC;QACH,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAM,EAAE,CAAC;IACpD,CAAC;IAAC,OAAO,GAAY,EAAE,CAAC;QACtB,MAAM,GAAG,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QAC7D,MAAM,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC;QAC7C,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,MAAM,kBAAkB,GAAG,EAAE,EAAE,CAAC;IAChE,CAAC;AACH,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,WAAW,CACzB,IAAY,EACZ,QAAW,EACX,OAAgB;IAEhB,MAAM,MAAM,GAAG,aAAa,CAAI,IAAI,EAAE,OAAO,CAAC,CAAC;IAC/C,IAAI,MAAM,CAAC,EAAE;QAAE,OAAO,MAAM,CAAC,KAAK,CAAC;IACnC,IAAI,OAAO,EAAE,CAAC;QACZ,OAAO,CAAC,KAAK,CAAC,YAAY,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC;IAC5C,CAAC;IACD,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,WAAW,CACzB,OAAe,EACf,OAAgB;IAEhB,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IAC3E,MAAM,OAAO,GAAQ,EAAE,CAAC;IACxB,IAAI,MAAM,GAAG,CAAC,CAAC;IAEf,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,MAAM,MAAM,GAAG,aAAa,CAAI,IAAI,CAAC,CAAC;QACtC,IAAI,MAAM,CAAC,EAAE,EAAE,CAAC;YACd,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QAC7B,CAAC;aAAM,CAAC;YACN,MAAM,EAAE,CAAC;QACX,CAAC;IACH,CAAC;IAED,IAAI,MAAM,GAAG,CAAC,IAAI,OAAO,EAAE,CAAC;QAC1B,OAAO,CAAC,KAAK,CAAC,YAAY,OAAO,aAAa,MAAM,kBAAkB,CAAC,CAAC;IAC1E,CAAC;IAED,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC;AAC7B,CAAC"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Path safety utilities.
|
|
3
|
+
*
|
|
4
|
+
* Prevents path traversal attacks and ensures file operations stay within
|
|
5
|
+
* expected boundaries. Critical for any code that constructs paths from
|
|
6
|
+
* user input, AI output, or external configuration.
|
|
7
|
+
*/
|
|
8
|
+
/**
|
|
9
|
+
* Validate that a relative path does not escape the base directory.
|
|
10
|
+
* Returns the resolved absolute path if safe, or null if the path
|
|
11
|
+
* attempts traversal.
|
|
12
|
+
*/
|
|
13
|
+
export declare function safePath(baseDir: string, relativePath: string): string | null;
|
|
14
|
+
/**
|
|
15
|
+
* Validate and resolve a path, throwing a descriptive error on traversal.
|
|
16
|
+
*/
|
|
17
|
+
export declare function safePathOrThrow(baseDir: string, relativePath: string, context?: string): string;
|
|
18
|
+
//# sourceMappingURL=safe-path.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"safe-path.d.ts","sourceRoot":"","sources":["../../src/bot/safe-path.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAIH;;;;GAIG;AACH,wBAAgB,QAAQ,CAAC,OAAO,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAgB7E;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,OAAO,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,MAAM,CAO/F"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Path safety utilities.
|
|
3
|
+
*
|
|
4
|
+
* Prevents path traversal attacks and ensures file operations stay within
|
|
5
|
+
* expected boundaries. Critical for any code that constructs paths from
|
|
6
|
+
* user input, AI output, or external configuration.
|
|
7
|
+
*/
|
|
8
|
+
import * as path from 'node:path';
|
|
9
|
+
/**
|
|
10
|
+
* Validate that a relative path does not escape the base directory.
|
|
11
|
+
* Returns the resolved absolute path if safe, or null if the path
|
|
12
|
+
* attempts traversal.
|
|
13
|
+
*/
|
|
14
|
+
export function safePath(baseDir, relativePath) {
|
|
15
|
+
const normalized = path.normalize(relativePath);
|
|
16
|
+
// Reject absolute paths and explicit traversal
|
|
17
|
+
if (path.isAbsolute(normalized))
|
|
18
|
+
return null;
|
|
19
|
+
if (normalized.startsWith('..'))
|
|
20
|
+
return null;
|
|
21
|
+
const resolved = path.resolve(baseDir, normalized);
|
|
22
|
+
const resolvedBase = path.resolve(baseDir);
|
|
23
|
+
// Ensure resolved path is within baseDir
|
|
24
|
+
if (!resolved.startsWith(resolvedBase + path.sep) && resolved !== resolvedBase) {
|
|
25
|
+
return null;
|
|
26
|
+
}
|
|
27
|
+
return resolved;
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* Validate and resolve a path, throwing a descriptive error on traversal.
|
|
31
|
+
*/
|
|
32
|
+
export function safePathOrThrow(baseDir, relativePath, context) {
|
|
33
|
+
const resolved = safePath(baseDir, relativePath);
|
|
34
|
+
if (resolved === null) {
|
|
35
|
+
const prefix = context ? `${context}: ` : '';
|
|
36
|
+
throw new Error(`${prefix}Unsafe file path rejected: "${relativePath}"`);
|
|
37
|
+
}
|
|
38
|
+
return resolved;
|
|
39
|
+
}
|
|
40
|
+
//# sourceMappingURL=safe-path.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"safe-path.js","sourceRoot":"","sources":["../../src/bot/safe-path.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAElC;;;;GAIG;AACH,MAAM,UAAU,QAAQ,CAAC,OAAe,EAAE,YAAoB;IAC5D,MAAM,UAAU,GAAG,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC,CAAC;IAEhD,+CAA+C;IAC/C,IAAI,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC;QAAE,OAAO,IAAI,CAAC;IAC7C,IAAI,UAAU,CAAC,UAAU,CAAC,IAAI,CAAC;QAAE,OAAO,IAAI,CAAC;IAE7C,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC;IACnD,MAAM,YAAY,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;IAE3C,yCAAyC;IACzC,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,YAAY,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,QAAQ,KAAK,YAAY,EAAE,CAAC;QAC/E,OAAO,IAAI,CAAC;IACd,CAAC;IAED,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,eAAe,CAAC,OAAe,EAAE,YAAoB,EAAE,OAAgB;IACrF,MAAM,QAAQ,GAAG,QAAQ,CAAC,OAAO,EAAE,YAAY,CAAC,CAAC;IACjD,IAAI,QAAQ,KAAK,IAAI,EAAE,CAAC;QACtB,MAAM,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC;QAC7C,MAAM,IAAI,KAAK,CAAC,GAAG,MAAM,+BAA+B,YAAY,GAAG,CAAC,CAAC;IAC3E,CAAC;IACD,OAAO,QAAQ,CAAC;AAClB,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"task-queue.d.ts","sourceRoot":"","sources":["../../src/bot/task-queue.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"task-queue.d.ts","sourceRoot":"","sources":["../../src/bot/task-queue.ts"],"names":[],"mappings":"AAOA,MAAM,WAAW,UAAU;IACzB,EAAE,EAAE,MAAM,CAAC;IACX,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,CAAC,EAAE,QAAQ,GAAG,QAAQ,GAAG,MAAM,GAAG,OAAO,CAAC;IAC9C,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAClC,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,SAAS,GAAG,SAAS,GAAG,WAAW,GAAG,QAAQ,GAAG,WAAW,CAAC;CACtE;AAED,qBAAa,SAAS;IACpB,OAAO,CAAC,QAAQ,CAAS;gBAEb,GAAG,CAAC,EAAE,MAAM;IAKlB,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,UAAU,EAAE,IAAI,GAAG,SAAS,GAAG,QAAQ,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC;IAezE,IAAI,IAAI,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC;IAQlC,IAAI,IAAI,OAAO,CAAC,UAAU,EAAE,CAAC;IAI7B,MAAM,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAUpC,KAAK,IAAI,OAAO,CAAC,MAAM,CAAC;IASxB,WAAW,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAItC,YAAY,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAIvC,UAAU,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;YAI7B,YAAY;IAW1B,OAAO,CAAC,OAAO;IAQf,OAAO,CAAC,QAAQ;CAKjB"}
|
package/dist/bot/task-queue.js
CHANGED
|
@@ -3,6 +3,7 @@ import * as path from 'node:path';
|
|
|
3
3
|
import * as os from 'node:os';
|
|
4
4
|
import * as crypto from 'node:crypto';
|
|
5
5
|
import { withFileLock } from './file-lock.js';
|
|
6
|
+
import { parseNdjson } from './safe-json.js';
|
|
6
7
|
export class TaskQueue {
|
|
7
8
|
filePath;
|
|
8
9
|
constructor(dir) {
|
|
@@ -76,17 +77,13 @@ export class TaskQueue {
|
|
|
76
77
|
});
|
|
77
78
|
}
|
|
78
79
|
readAll() {
|
|
79
|
-
|
|
80
|
-
if (!fs.existsSync(this.filePath))
|
|
81
|
-
return [];
|
|
82
|
-
const content = fs.readFileSync(this.filePath, 'utf-8').trim();
|
|
83
|
-
if (!content)
|
|
84
|
-
return [];
|
|
85
|
-
return content.split('\n').map(line => JSON.parse(line));
|
|
86
|
-
}
|
|
87
|
-
catch {
|
|
80
|
+
if (!fs.existsSync(this.filePath))
|
|
88
81
|
return [];
|
|
89
|
-
|
|
82
|
+
const content = fs.readFileSync(this.filePath, 'utf-8').trim();
|
|
83
|
+
if (!content)
|
|
84
|
+
return [];
|
|
85
|
+
const { records } = parseNdjson(content, 'task-queue');
|
|
86
|
+
return records;
|
|
90
87
|
}
|
|
91
88
|
writeAll(tasks) {
|
|
92
89
|
const dir = path.dirname(this.filePath);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"task-queue.js","sourceRoot":"","sources":["../../src/bot/task-queue.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;AAC9B,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAClC,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;AAC9B,OAAO,KAAK,MAAM,MAAM,aAAa,CAAC;AACtC,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"task-queue.js","sourceRoot":"","sources":["../../src/bot/task-queue.ts"],"names":[],"mappings":"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"}
|
package/dist/cli-bridge.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli-bridge.d.ts","sourceRoot":"","sources":["../src/cli-bridge.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"cli-bridge.d.ts","sourceRoot":"","sources":["../src/cli-bridge.ts"],"names":[],"mappings":"AA2BA,wBAAsB,aAAa,CACjC,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,EAAE,GACb,OAAO,CAAC,IAAI,CAAC,CAef"}
|
package/dist/cli-bridge.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { handleRun, handleHistory, handleCosts, handleWatch, handleCron, handlePipeline, handleDashboard, handleProviders, handleEject, handleBot, handleSession, handleSteer, handleQueue, handleGenesis, handleAudit, } from './cli-handlers.js';
|
|
1
|
+
import { handleRun, handleHistory, handleCosts, handleWatch, handleCron, handlePipeline, handleDashboard, handleProviders, handleEject, handleBot, handleSession, handleSteer, handleQueue, handleGenesis, handleAudit, handleInit, printHelp, } from './cli-handlers.js';
|
|
2
2
|
const handlers = {
|
|
3
3
|
run: handleRun,
|
|
4
4
|
history: handleHistory,
|
|
@@ -15,16 +15,19 @@ const handlers = {
|
|
|
15
15
|
queue: handleQueue,
|
|
16
16
|
genesis: handleGenesis,
|
|
17
17
|
audit: handleAudit,
|
|
18
|
+
init: handleInit,
|
|
18
19
|
};
|
|
19
20
|
export async function handleCommand(name, args) {
|
|
20
21
|
const handler = handlers[name];
|
|
21
22
|
if (!handler) {
|
|
22
23
|
throw new Error(`Unknown weaver command: ${name}`);
|
|
23
24
|
}
|
|
24
|
-
// Import parseArgs to handle the remaining flags
|
|
25
25
|
const { parseArgs } = await import('./cli-handlers.js');
|
|
26
|
-
// Prepend dummy entries so parseArgs skips argv[0] and argv[1]
|
|
27
26
|
const opts = parseArgs(['node', 'weaver', name, ...args]);
|
|
27
|
+
if (opts.showHelp) {
|
|
28
|
+
printHelp(name);
|
|
29
|
+
return;
|
|
30
|
+
}
|
|
28
31
|
await handler(opts);
|
|
29
32
|
}
|
|
30
33
|
//# sourceMappingURL=cli-bridge.js.map
|
package/dist/cli-bridge.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli-bridge.js","sourceRoot":"","sources":["../src/cli-bridge.ts"],"names":[],"mappings":"AACA,OAAO,EACL,SAAS,EAAE,aAAa,EAAE,WAAW,EAAE,WAAW,EAClD,UAAU,EAAE,cAAc,EAAE,eAAe,EAAE,eAAe,EAC5D,WAAW,EAAE,SAAS,EAAE,aAAa,EAAE,WAAW,EAAE,WAAW,EAC/D,aAAa,EAAE,WAAW,
|
|
1
|
+
{"version":3,"file":"cli-bridge.js","sourceRoot":"","sources":["../src/cli-bridge.ts"],"names":[],"mappings":"AACA,OAAO,EACL,SAAS,EAAE,aAAa,EAAE,WAAW,EAAE,WAAW,EAClD,UAAU,EAAE,cAAc,EAAE,eAAe,EAAE,eAAe,EAC5D,WAAW,EAAE,SAAS,EAAE,aAAa,EAAE,WAAW,EAAE,WAAW,EAC/D,aAAa,EAAE,WAAW,EAAE,UAAU,EAAE,SAAS,GAClD,MAAM,mBAAmB,CAAC;AAE3B,MAAM,QAAQ,GAAwD;IACpE,GAAG,EAAE,SAAS;IACd,OAAO,EAAE,aAAa;IACtB,KAAK,EAAE,WAAW;IAClB,KAAK,EAAE,WAAW;IAClB,IAAI,EAAE,UAAU;IAChB,QAAQ,EAAE,cAAc;IACxB,SAAS,EAAE,eAAe;IAC1B,SAAS,EAAE,eAAe;IAC1B,KAAK,EAAE,WAAW;IAClB,GAAG,EAAE,SAAS;IACd,OAAO,EAAE,aAAa;IACtB,KAAK,EAAE,WAAW;IAClB,KAAK,EAAE,WAAW;IAClB,OAAO,EAAE,aAAa;IACtB,KAAK,EAAE,WAAW;IAClB,IAAI,EAAE,UAAU;CACjB,CAAC;AAEF,MAAM,CAAC,KAAK,UAAU,aAAa,CACjC,IAAY,EACZ,IAAc;IAEd,MAAM,OAAO,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC;IAC/B,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,MAAM,IAAI,KAAK,CAAC,2BAA2B,IAAI,EAAE,CAAC,CAAC;IACrD,CAAC;IAED,MAAM,EAAE,SAAS,EAAE,GAAG,MAAM,MAAM,CAAC,mBAAmB,CAAC,CAAC;IACxD,MAAM,IAAI,GAAG,SAAS,CAAC,CAAC,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE,GAAG,IAAI,CAAC,CAAC,CAAC;IAE1D,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;QAClB,SAAS,CAAC,IAAI,CAAC,CAAC;QAChB,OAAO;IACT,CAAC;IAED,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;AACtB,CAAC"}
|
package/dist/cli-handlers.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
export interface ParsedArgs {
|
|
2
|
-
command: 'run' | 'history' | 'costs' | 'providers' | 'watch' | 'cron' | 'pipeline' | 'dashboard' | 'eject' | 'bot' | 'session' | 'steer' | 'queue' | 'genesis' | 'audit';
|
|
2
|
+
command: 'run' | 'history' | 'costs' | 'providers' | 'watch' | 'cron' | 'pipeline' | 'dashboard' | 'eject' | 'bot' | 'session' | 'steer' | 'queue' | 'genesis' | 'audit' | 'init';
|
|
3
3
|
file?: string;
|
|
4
4
|
verbose: boolean;
|
|
5
5
|
dryRun: boolean;
|
|
@@ -76,4 +76,6 @@ export declare function handleSteer(opts: ParsedArgs): Promise<void>;
|
|
|
76
76
|
export declare function handleQueue(opts: ParsedArgs): Promise<void>;
|
|
77
77
|
export declare function handleGenesis(opts: ParsedArgs): Promise<void>;
|
|
78
78
|
export declare function handleAudit(opts: ParsedArgs): Promise<void>;
|
|
79
|
+
export declare function printHelp(command?: string): void;
|
|
80
|
+
export declare function handleInit(opts: ParsedArgs): Promise<void>;
|
|
79
81
|
//# sourceMappingURL=cli-handlers.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli-handlers.d.ts","sourceRoot":"","sources":["../src/cli-handlers.ts"],"names":[],"mappings":"AAcA,MAAM,WAAW,UAAU;IACzB,OAAO,EAAE,KAAK,GAAG,SAAS,GAAG,OAAO,GAAG,WAAW,GAAG,OAAO,GAAG,MAAM,GAAG,UAAU,GAAG,WAAW,GAAG,OAAO,GAAG,KAAK,GAAG,SAAS,GAAG,OAAO,GAAG,OAAO,GAAG,SAAS,GAAG,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"cli-handlers.d.ts","sourceRoot":"","sources":["../src/cli-handlers.ts"],"names":[],"mappings":"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"}
|
package/dist/cli-handlers.js
CHANGED
|
@@ -228,6 +228,9 @@ export function parseArgs(argv) {
|
|
|
228
228
|
else if (arg === 'genesis') {
|
|
229
229
|
result.command = 'genesis';
|
|
230
230
|
}
|
|
231
|
+
else if (arg === 'init') {
|
|
232
|
+
result.command = 'init';
|
|
233
|
+
}
|
|
231
234
|
else if (arg === '--init') {
|
|
232
235
|
result.genesisInit = true;
|
|
233
236
|
}
|
|
@@ -1332,4 +1335,147 @@ function printAuditEvents(events, json) {
|
|
|
1332
1335
|
console.log(`${time} [${e.type}]${dataStr}`);
|
|
1333
1336
|
}
|
|
1334
1337
|
}
|
|
1338
|
+
// --- Help ---
|
|
1339
|
+
const COMMAND_HELP = {
|
|
1340
|
+
run: 'run <workflow.ts> Execute a workflow with AI agent channel',
|
|
1341
|
+
bot: 'bot "task description" Create or modify a workflow from a task',
|
|
1342
|
+
init: 'init Create a .weaver.json config file',
|
|
1343
|
+
history: 'history [id] [--limit N] Show execution history',
|
|
1344
|
+
costs: 'costs [--since 7d] Show AI token usage and costs',
|
|
1345
|
+
providers: 'providers List available AI providers',
|
|
1346
|
+
watch: 'watch <workflow.ts> Re-run on file changes',
|
|
1347
|
+
cron: 'cron "*/5 * * * *" <file> Schedule workflow execution',
|
|
1348
|
+
pipeline: 'pipeline <config.json> Run multi-stage pipeline',
|
|
1349
|
+
dashboard: 'dashboard <file> [--port N] Start live execution dashboard',
|
|
1350
|
+
session: 'session Start continuous task queue processing',
|
|
1351
|
+
queue: 'queue <add|list|clear> [task] Manage task queue',
|
|
1352
|
+
steer: 'steer <pause|resume|cancel> Control a running session',
|
|
1353
|
+
genesis: 'genesis [--init] [--watch] Run self-evolution cycle',
|
|
1354
|
+
eject: 'eject [--workflow bot|genesis] Export managed workflows',
|
|
1355
|
+
audit: 'audit [runId] [--limit N] View audit log',
|
|
1356
|
+
};
|
|
1357
|
+
export function printHelp(command) {
|
|
1358
|
+
if (command && command !== 'help' && COMMAND_HELP[command]) {
|
|
1359
|
+
console.log(`\nUsage: flow-weaver weaver ${COMMAND_HELP[command]}\n`);
|
|
1360
|
+
printCommandHelp(command);
|
|
1361
|
+
return;
|
|
1362
|
+
}
|
|
1363
|
+
console.log(`
|
|
1364
|
+
Weaver — AI-powered workflow automation for Flow Weaver
|
|
1365
|
+
|
|
1366
|
+
Usage: flow-weaver weaver <command> [options]
|
|
1367
|
+
|
|
1368
|
+
Commands:
|
|
1369
|
+
${Object.values(COMMAND_HELP).join('\n ')}
|
|
1370
|
+
|
|
1371
|
+
Global options:
|
|
1372
|
+
-h, --help Show help
|
|
1373
|
+
-v, --verbose Show detailed output
|
|
1374
|
+
-n, --dry-run Preview without executing
|
|
1375
|
+
--quiet Suppress output
|
|
1376
|
+
-p, --params <json> Input parameters as JSON
|
|
1377
|
+
-c, --config <path> Path to .weaver.json config
|
|
1378
|
+
--approval <mode> Override approval mode (auto|prompt|web|timeout-auto)
|
|
1379
|
+
|
|
1380
|
+
Quick start:
|
|
1381
|
+
flow-weaver weaver init # create .weaver.json
|
|
1382
|
+
flow-weaver weaver providers # check available AI providers
|
|
1383
|
+
flow-weaver weaver bot "Create a hello world workflow" # create your first workflow
|
|
1384
|
+
`);
|
|
1385
|
+
}
|
|
1386
|
+
function printCommandHelp(command) {
|
|
1387
|
+
const help = {
|
|
1388
|
+
run: `Options:
|
|
1389
|
+
--dashboard Enable live dashboard
|
|
1390
|
+
--port <n> Dashboard port (default: 4242)`,
|
|
1391
|
+
bot: `Options:
|
|
1392
|
+
--file <path> Target file for modification (switches to modify mode)
|
|
1393
|
+
--template <name> Use a template for scaffolding
|
|
1394
|
+
--batch <n> Process multiple tasks
|
|
1395
|
+
--auto-approve Skip approval gate
|
|
1396
|
+
--dashboard Enable live dashboard`,
|
|
1397
|
+
history: `Options:
|
|
1398
|
+
--limit <n> Number of records (default: 20)
|
|
1399
|
+
--outcome <type> Filter: completed, failed, error, skipped
|
|
1400
|
+
--workflow <path> Filter by workflow file
|
|
1401
|
+
--since <range> Time range: 7d, 2h, or ISO date
|
|
1402
|
+
--json Output as JSON
|
|
1403
|
+
--prune Remove old records
|
|
1404
|
+
--clear Delete all history`,
|
|
1405
|
+
costs: `Options:
|
|
1406
|
+
--since <range> Time range: 7d, 30d, or ISO date
|
|
1407
|
+
--model <name> Filter by model`,
|
|
1408
|
+
genesis: `Options:
|
|
1409
|
+
--init Initialize .genesis/config.json
|
|
1410
|
+
--watch Run multiple evolution cycles
|
|
1411
|
+
--project-dir <p> Project directory`,
|
|
1412
|
+
watch: `Options:
|
|
1413
|
+
--debounce <ms> Debounce interval (default: 500)
|
|
1414
|
+
--log <path> Log file for daemon output`,
|
|
1415
|
+
pipeline: `Options:
|
|
1416
|
+
--stage <id> Run a specific stage only`,
|
|
1417
|
+
queue: `Actions:
|
|
1418
|
+
add "task" Add task to queue
|
|
1419
|
+
list Show queue contents
|
|
1420
|
+
clear Remove all tasks
|
|
1421
|
+
remove <id> Remove a specific task`,
|
|
1422
|
+
steer: `Commands:
|
|
1423
|
+
pause Pause current execution
|
|
1424
|
+
resume Resume paused execution
|
|
1425
|
+
cancel Cancel current execution
|
|
1426
|
+
redirect "task" Switch to a different task
|
|
1427
|
+
queue "task" Add task to queue from steer`,
|
|
1428
|
+
};
|
|
1429
|
+
if (help[command]) {
|
|
1430
|
+
console.log(help[command]);
|
|
1431
|
+
console.log('');
|
|
1432
|
+
}
|
|
1433
|
+
}
|
|
1434
|
+
// --- Init ---
|
|
1435
|
+
export async function handleInit(opts) {
|
|
1436
|
+
const dir = opts.file ? path.resolve(opts.file) : process.cwd();
|
|
1437
|
+
const configPath = path.join(dir, '.weaver.json');
|
|
1438
|
+
if (fs.existsSync(configPath)) {
|
|
1439
|
+
console.log(`[weaver] Config already exists: ${configPath}`);
|
|
1440
|
+
console.log(' Edit it directly or delete it to regenerate.');
|
|
1441
|
+
return;
|
|
1442
|
+
}
|
|
1443
|
+
// Detect best available provider
|
|
1444
|
+
let provider = 'auto';
|
|
1445
|
+
try {
|
|
1446
|
+
if (process.env.ANTHROPIC_API_KEY) {
|
|
1447
|
+
provider = 'anthropic';
|
|
1448
|
+
}
|
|
1449
|
+
else {
|
|
1450
|
+
const { execFileSync } = await import('node:child_process');
|
|
1451
|
+
try {
|
|
1452
|
+
execFileSync('claude', ['--version'], { stdio: 'pipe' });
|
|
1453
|
+
provider = 'claude-cli';
|
|
1454
|
+
}
|
|
1455
|
+
catch {
|
|
1456
|
+
try {
|
|
1457
|
+
execFileSync('copilot', ['--version'], { stdio: 'pipe' });
|
|
1458
|
+
provider = 'copilot-cli';
|
|
1459
|
+
}
|
|
1460
|
+
catch {
|
|
1461
|
+
// Stay with auto
|
|
1462
|
+
}
|
|
1463
|
+
}
|
|
1464
|
+
}
|
|
1465
|
+
}
|
|
1466
|
+
catch {
|
|
1467
|
+
// Stay with auto
|
|
1468
|
+
}
|
|
1469
|
+
const config = {
|
|
1470
|
+
provider: provider === 'auto' ? 'auto' : { name: provider },
|
|
1471
|
+
approval: 'auto',
|
|
1472
|
+
};
|
|
1473
|
+
fs.writeFileSync(configPath, JSON.stringify(config, null, 2) + '\n', 'utf-8');
|
|
1474
|
+
console.log(`\x1b[32m✓\x1b[0m Created ${configPath}`);
|
|
1475
|
+
console.log(` Provider: ${provider}`);
|
|
1476
|
+
console.log('');
|
|
1477
|
+
console.log('Next steps:');
|
|
1478
|
+
console.log(' flow-weaver weaver providers # verify provider detection');
|
|
1479
|
+
console.log(' flow-weaver weaver bot "Create a ..." # create your first workflow');
|
|
1480
|
+
}
|
|
1335
1481
|
//# sourceMappingURL=cli-handlers.js.map
|