@synergenius/flow-weaver-pack-weaver 0.9.111 → 0.9.112
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.
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"approval-gate.d.ts","sourceRoot":"","sources":["../../src/node-types/approval-gate.ts"],"names":[],"mappings":"AAuDA;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,wBAAsB,kBAAkB,CACtC,OAAO,EAAE,OAAO,EAChB,GAAG,EAAE,MAAM,GACV,OAAO,CAAC;IACT,SAAS,EAAE,OAAO,CAAC;IAAC,SAAS,EAAE,OAAO,CAAC;IACvC,GAAG,EAAE,MAAM,CAAC;CACb,CAAC,
|
|
1
|
+
{"version":3,"file":"approval-gate.d.ts","sourceRoot":"","sources":["../../src/node-types/approval-gate.ts"],"names":[],"mappings":"AAuDA;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,wBAAsB,kBAAkB,CACtC,OAAO,EAAE,OAAO,EAChB,GAAG,EAAE,MAAM,GACV,OAAO,CAAC;IACT,SAAS,EAAE,OAAO,CAAC;IAAC,SAAS,EAAE,OAAO,CAAC;IACvC,GAAG,EAAE,MAAM,CAAC;CACb,CAAC,CAgJD"}
|
|
@@ -61,127 +61,142 @@ const approvalRegistryLocal = {
|
|
|
61
61
|
* @output onFailure [order:-1] - On Failure
|
|
62
62
|
*/
|
|
63
63
|
export async function weaverApprovalGate(execute, ctx) {
|
|
64
|
-
|
|
65
|
-
if (!execute) {
|
|
66
|
-
context.rejectionReason = '';
|
|
67
|
-
return { onSuccess: true, onFailure: false, ctx: JSON.stringify(context) };
|
|
68
|
-
}
|
|
69
|
-
// Check for autoApprove in task options
|
|
70
|
-
const task = JSON.parse(context.taskJson);
|
|
71
|
-
const { env } = context;
|
|
72
|
-
const { config } = env;
|
|
73
|
-
const approvalMode = typeof config.approval === 'string'
|
|
74
|
-
? config.approval
|
|
75
|
-
: config.approval?.mode ?? (process.stdin?.isTTY ? 'prompt' : 'timeout-auto');
|
|
76
|
-
if (task.options?.autoApprove || approvalMode === 'auto') {
|
|
77
|
-
console.log('\x1b[36m→ Auto-approved\x1b[0m');
|
|
78
|
-
auditEmit('approval-decision', { approved: true, mode: 'auto' });
|
|
79
|
-
context.rejectionReason = '';
|
|
80
|
-
return { onSuccess: true, onFailure: false, ctx: JSON.stringify(context) };
|
|
81
|
-
}
|
|
82
|
-
// Parse and display the plan
|
|
83
|
-
let plan;
|
|
64
|
+
let context;
|
|
84
65
|
try {
|
|
85
|
-
|
|
86
|
-
}
|
|
87
|
-
catch {
|
|
88
|
-
plan = { steps: [], summary: 'Plan could not be parsed' };
|
|
66
|
+
context = JSON.parse(ctx);
|
|
89
67
|
}
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
console.log(`\x1b[1m│\x1b[0m Summary: ${summary}`);
|
|
94
|
-
console.log(`\x1b[1m│\x1b[0m Steps: ${steps.length}`);
|
|
95
|
-
for (const step of steps) {
|
|
96
|
-
console.log(`\x1b[1m│\x1b[0m ${step.id ?? '?'}: [${step.operation ?? '?'}] ${step.description ?? ''}`);
|
|
68
|
+
catch (err) {
|
|
69
|
+
console.error(`[approval-gate] Failed to parse context: ${err instanceof Error ? err.message : err}`);
|
|
70
|
+
return { onSuccess: false, onFailure: true, ctx: JSON.stringify({ rejectionReason: 'Invalid context' }) };
|
|
97
71
|
}
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
const timeoutMs = approvalCfg?.timeoutMs ?? ((approvalCfg?.timeoutSeconds ?? 300) * 1000);
|
|
102
|
-
// Use the run ID as the approval key if available, otherwise a unique key.
|
|
103
|
-
// fw_weaver_approve resolves the most recent pending, so the exact key
|
|
104
|
-
// doesn't matter for single-approval scenarios.
|
|
105
|
-
const approvalKey = context.runId ?? `approval-${Date.now()}`;
|
|
106
|
-
console.log(`\x1b[36m→ Waiting ${timeoutMs / 1000}s for approval (via UI, agent, file, or timeout)...\x1b[0m`);
|
|
107
|
-
// Multiple concurrent producers race — whichever resolves first wins.
|
|
108
|
-
// The simplest globalThis mechanism: put the resolve function directly
|
|
109
|
-
// on globalThis so fw_weaver_approve can call it from any module context.
|
|
110
|
-
const channel = globalThis.__fw_agent_channel__;
|
|
111
|
-
if (channel) {
|
|
112
|
-
channel.request({
|
|
113
|
-
agentId: 'weaver-approval',
|
|
114
|
-
context: { plan: { steps }, summary },
|
|
115
|
-
prompt: `Review and approve/reject this plan with ${steps.length} steps.`,
|
|
116
|
-
}).then((result) => {
|
|
117
|
-
const approved = result.approved !== false;
|
|
118
|
-
approvalRegistryLocal.resolve(approvalKey, {
|
|
119
|
-
approved,
|
|
120
|
-
reason: approved ? undefined : (result.reason || 'rejected by agent'),
|
|
121
|
-
mode: 'agent',
|
|
122
|
-
});
|
|
123
|
-
}).catch(() => { });
|
|
72
|
+
if (!execute) {
|
|
73
|
+
context.rejectionReason = '';
|
|
74
|
+
return { onSuccess: true, onFailure: false, ctx: JSON.stringify(context) };
|
|
124
75
|
}
|
|
125
|
-
// File polling producer — polls for approval-decision.json every 500ms
|
|
126
|
-
const weaverDir = process.env.WEAVER_HISTORY_DIR ?? nodePath.join(os.homedir(), '.weaver');
|
|
127
|
-
const decisionPath = nodePath.join(weaverDir, 'approval-decision.json');
|
|
128
|
-
// Write pending approval file for UI to discover
|
|
129
76
|
try {
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
}
|
|
134
|
-
|
|
135
|
-
|
|
77
|
+
// Check for autoApprove in task options
|
|
78
|
+
const task = JSON.parse(context.taskJson ?? '{}');
|
|
79
|
+
const { env } = context;
|
|
80
|
+
const { config } = env;
|
|
81
|
+
const approvalMode = typeof config.approval === 'string'
|
|
82
|
+
? config.approval
|
|
83
|
+
: config.approval?.mode ?? (process.stdin?.isTTY ? 'prompt' : 'timeout-auto');
|
|
84
|
+
if (task.options?.autoApprove || approvalMode === 'auto') {
|
|
85
|
+
console.log('\x1b[36m→ Auto-approved\x1b[0m');
|
|
86
|
+
auditEmit('approval-decision', { approved: true, mode: 'auto' });
|
|
87
|
+
context.rejectionReason = '';
|
|
88
|
+
return { onSuccess: true, onFailure: false, ctx: JSON.stringify(context) };
|
|
136
89
|
}
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
catch { /* non-fatal */ }
|
|
140
|
-
let filePollingActive = true;
|
|
141
|
-
const filePollInterval = setInterval(() => {
|
|
90
|
+
// Parse and display the plan
|
|
91
|
+
let plan;
|
|
142
92
|
try {
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
93
|
+
plan = JSON.parse(context.planJson);
|
|
94
|
+
}
|
|
95
|
+
catch {
|
|
96
|
+
plan = { steps: [], summary: 'Plan could not be parsed' };
|
|
97
|
+
}
|
|
98
|
+
const steps = Array.isArray(plan.steps) ? plan.steps : [];
|
|
99
|
+
const summary = plan.summary ?? 'No summary';
|
|
100
|
+
console.log('\n\x1b[1m┌─ Bot Plan ─────────────────────────────┐\x1b[0m');
|
|
101
|
+
console.log(`\x1b[1m│\x1b[0m Summary: ${summary}`);
|
|
102
|
+
console.log(`\x1b[1m│\x1b[0m Steps: ${steps.length}`);
|
|
103
|
+
for (const step of steps) {
|
|
104
|
+
console.log(`\x1b[1m│\x1b[0m ${step.id ?? '?'}: [${step.operation ?? '?'}] ${step.description ?? ''}`);
|
|
105
|
+
}
|
|
106
|
+
console.log('\x1b[1m└────────────────────────────────────────┘\x1b[0m\n');
|
|
107
|
+
// Determine timeout
|
|
108
|
+
const approvalCfg = config.approval;
|
|
109
|
+
const timeoutMs = approvalCfg?.timeoutMs ?? ((approvalCfg?.timeoutSeconds ?? 300) * 1000);
|
|
110
|
+
// Use the run ID as the approval key if available, otherwise a unique key.
|
|
111
|
+
// fw_weaver_approve resolves the most recent pending, so the exact key
|
|
112
|
+
// doesn't matter for single-approval scenarios.
|
|
113
|
+
const approvalKey = context.runId ?? `approval-${Date.now()}`;
|
|
114
|
+
console.log(`\x1b[36m→ Waiting ${timeoutMs / 1000}s for approval (via UI, agent, file, or timeout)...\x1b[0m`);
|
|
115
|
+
// Multiple concurrent producers race — whichever resolves first wins.
|
|
116
|
+
// The simplest globalThis mechanism: put the resolve function directly
|
|
117
|
+
// on globalThis so fw_weaver_approve can call it from any module context.
|
|
118
|
+
const channel = globalThis.__fw_agent_channel__;
|
|
119
|
+
if (channel) {
|
|
120
|
+
channel.request({
|
|
121
|
+
agentId: 'weaver-approval',
|
|
122
|
+
context: { plan: { steps }, summary },
|
|
123
|
+
prompt: `Review and approve/reject this plan with ${steps.length} steps.`,
|
|
124
|
+
}).then((result) => {
|
|
125
|
+
const approved = result.approved !== false;
|
|
147
126
|
approvalRegistryLocal.resolve(approvalKey, {
|
|
148
|
-
approved
|
|
149
|
-
reason:
|
|
150
|
-
mode: '
|
|
127
|
+
approved,
|
|
128
|
+
reason: approved ? undefined : (result.reason || 'rejected by agent'),
|
|
129
|
+
mode: 'agent',
|
|
151
130
|
});
|
|
131
|
+
}).catch(() => { });
|
|
132
|
+
}
|
|
133
|
+
// File polling producer — polls for approval-decision.json every 500ms
|
|
134
|
+
const weaverDir = process.env.WEAVER_HISTORY_DIR ?? nodePath.join(os.homedir(), '.weaver');
|
|
135
|
+
const decisionPath = nodePath.join(weaverDir, 'approval-decision.json');
|
|
136
|
+
// Write pending approval file for UI to discover
|
|
137
|
+
try {
|
|
138
|
+
fs.mkdirSync(weaverDir, { recursive: true });
|
|
139
|
+
fs.writeFileSync(nodePath.join(weaverDir, 'pending-approval.json'), JSON.stringify({
|
|
140
|
+
plan, summary: plan.summary, stepCount: plan.steps?.length ?? 0, timestamp: Date.now(),
|
|
141
|
+
}), 'utf-8');
|
|
142
|
+
try {
|
|
143
|
+
fs.unlinkSync(decisionPath);
|
|
152
144
|
}
|
|
145
|
+
catch { /* clean stale */ }
|
|
146
|
+
}
|
|
147
|
+
catch { /* non-fatal */ }
|
|
148
|
+
let filePollingActive = true;
|
|
149
|
+
const filePollInterval = setInterval(() => {
|
|
150
|
+
try {
|
|
151
|
+
if (fs.existsSync(decisionPath)) {
|
|
152
|
+
const raw = fs.readFileSync(decisionPath, 'utf-8');
|
|
153
|
+
fs.unlinkSync(decisionPath);
|
|
154
|
+
const d = JSON.parse(raw);
|
|
155
|
+
approvalRegistryLocal.resolve(approvalKey, {
|
|
156
|
+
approved: !!d.approved,
|
|
157
|
+
reason: d.reason,
|
|
158
|
+
mode: 'file',
|
|
159
|
+
});
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
catch { /* retry */ }
|
|
163
|
+
}, 500);
|
|
164
|
+
// Also put the resolve function directly on globalThis as the most direct path.
|
|
165
|
+
// fw_weaver_approve checks this first before trying the registry or file.
|
|
166
|
+
const registryWait = approvalRegistryLocal.wait(approvalKey, timeoutMs);
|
|
167
|
+
const directResolve = new Promise((resolve) => {
|
|
168
|
+
globalThis.__fw_pending_approval_resolve__ = (d) => {
|
|
169
|
+
resolve(d);
|
|
170
|
+
};
|
|
171
|
+
});
|
|
172
|
+
const decision = await Promise.race([registryWait, directResolve]);
|
|
173
|
+
// Cleanup
|
|
174
|
+
delete globalThis.__fw_pending_approval_resolve__;
|
|
175
|
+
clearInterval(filePollInterval);
|
|
176
|
+
try {
|
|
177
|
+
fs.unlinkSync(nodePath.join(weaverDir, 'pending-approval.json'));
|
|
178
|
+
}
|
|
179
|
+
catch { /* ignore */ }
|
|
180
|
+
// Log the decision
|
|
181
|
+
const mode = decision.mode ?? 'unknown';
|
|
182
|
+
if (decision.approved) {
|
|
183
|
+
console.log(`\x1b[32m→ Plan approved (${mode})\x1b[0m`);
|
|
184
|
+
auditEmit('approval-decision', { approved: true, mode });
|
|
185
|
+
context.rejectionReason = '';
|
|
186
|
+
return { onSuccess: true, onFailure: false, ctx: JSON.stringify(context) };
|
|
187
|
+
}
|
|
188
|
+
else {
|
|
189
|
+
const reason = decision.reason || 'rejected';
|
|
190
|
+
console.log(`\x1b[33m→ Plan rejected: ${reason} (${mode})\x1b[0m`);
|
|
191
|
+
auditEmit('approval-decision', { approved: false, reason, mode });
|
|
192
|
+
context.rejectionReason = reason;
|
|
193
|
+
return { onSuccess: false, onFailure: true, ctx: JSON.stringify(context) };
|
|
153
194
|
}
|
|
154
|
-
catch { /* retry */ }
|
|
155
|
-
}, 500);
|
|
156
|
-
// Also put the resolve function directly on globalThis as the most direct path.
|
|
157
|
-
// fw_weaver_approve checks this first before trying the registry or file.
|
|
158
|
-
const registryWait = approvalRegistryLocal.wait(approvalKey, timeoutMs);
|
|
159
|
-
const directResolve = new Promise((resolve) => {
|
|
160
|
-
globalThis.__fw_pending_approval_resolve__ = (d) => {
|
|
161
|
-
resolve(d);
|
|
162
|
-
};
|
|
163
|
-
});
|
|
164
|
-
const decision = await Promise.race([registryWait, directResolve]);
|
|
165
|
-
// Cleanup
|
|
166
|
-
delete globalThis.__fw_pending_approval_resolve__;
|
|
167
|
-
clearInterval(filePollInterval);
|
|
168
|
-
try {
|
|
169
|
-
fs.unlinkSync(nodePath.join(weaverDir, 'pending-approval.json'));
|
|
170
|
-
}
|
|
171
|
-
catch { /* ignore */ }
|
|
172
|
-
// Log the decision
|
|
173
|
-
const mode = decision.mode ?? 'unknown';
|
|
174
|
-
if (decision.approved) {
|
|
175
|
-
console.log(`\x1b[32m→ Plan approved (${mode})\x1b[0m`);
|
|
176
|
-
auditEmit('approval-decision', { approved: true, mode });
|
|
177
|
-
context.rejectionReason = '';
|
|
178
|
-
return { onSuccess: true, onFailure: false, ctx: JSON.stringify(context) };
|
|
179
195
|
}
|
|
180
|
-
|
|
181
|
-
const
|
|
182
|
-
console.
|
|
183
|
-
|
|
184
|
-
context.rejectionReason = reason;
|
|
196
|
+
catch (err) {
|
|
197
|
+
const msg = err instanceof Error ? err.stack ?? err.message : String(err);
|
|
198
|
+
console.error(`[approval-gate] Unhandled error: ${msg}`);
|
|
199
|
+
context.rejectionReason = `Approval gate error: ${err instanceof Error ? err.message : String(err)}`;
|
|
185
200
|
return { onSuccess: false, onFailure: true, ctx: JSON.stringify(context) };
|
|
186
201
|
}
|
|
187
202
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"approval-gate.js","sourceRoot":"","sources":["../../src/node-types/approval-gate.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;AAC9B,OAAO,KAAK,QAAQ,MAAM,WAAW,CAAC;AACtC,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;AAE9B,OAAO,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AAcnD,MAAM,YAAY,GAAG,0BAA0B,CAAC;AAChD,SAAS,mBAAmB;IAC1B,IAAI,GAAG,GAAI,UAAsC,CAAC,YAAY,CAA6C,CAAC;IAC5G,IAAI,CAAC,GAAG,EAAE,CAAC;QACT,GAAG,GAAG,IAAI,GAAG,EAAE,CAAC;QACf,UAAsC,CAAC,YAAY,CAAC,GAAG,GAAG,CAAC;IAC9D,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AACD,MAAM,qBAAqB,GAAG;IAC5B,IAAI,CAAC,GAAW,EAAE,SAAiB;QACjC,MAAM,OAAO,GAAG,mBAAmB,EAAE,CAAC;QACtC,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAClC,IAAI,QAAQ,EAAE,CAAC;YACb,YAAY,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;YAC7B,QAAQ,CAAC,OAAO,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC,CAAC;YACtD,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QACtB,CAAC;QACD,OAAO,IAAI,OAAO,CAAmB,CAAC,OAAO,EAAE,EAAE;YAC/C,MAAM,KAAK,GAAG,UAAU,CAAC,GAAG,EAAE;gBAC5B,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;gBACpB,OAAO,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC,CAAC;YAC/C,CAAC,EAAE,SAAS,CAAC,CAAC;YACd,OAAO,CAAC,GAAG,CAAC,GAAG,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,CAAC;QACvC,CAAC,CAAC,CAAC;IACL,CAAC;IACD,OAAO,CAAC,GAAW,EAAE,QAA0B;QAC7C,MAAM,OAAO,GAAG,mBAAmB,EAAE,CAAC;QACtC,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAC/B,IAAI,CAAC,KAAK;YAAE,OAAO,KAAK,CAAC;QACzB,YAAY,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QAC1B,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QACpB,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;QACxB,OAAO,IAAI,CAAC;IACd,CAAC;CACF,CAAC;AAEF;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,MAAM,CAAC,KAAK,UAAU,kBAAkB,CACtC,OAAgB,EAChB,GAAW;IAKX,
|
|
1
|
+
{"version":3,"file":"approval-gate.js","sourceRoot":"","sources":["../../src/node-types/approval-gate.ts"],"names":[],"mappings":"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"}
|
package/flowweaver.manifest.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"manifestVersion": 2,
|
|
3
3
|
"name": "@synergenius/flow-weaver-pack-weaver",
|
|
4
|
-
"version": "0.9.
|
|
4
|
+
"version": "0.9.112",
|
|
5
5
|
"description": "AI bot for Flow Weaver. Execute tasks, run workflows, evolve autonomously.",
|
|
6
6
|
"engineVersion": ">=0.22.10",
|
|
7
7
|
"categories": [
|
package/package.json
CHANGED
|
@@ -81,15 +81,22 @@ export async function weaverApprovalGate(
|
|
|
81
81
|
onSuccess: boolean; onFailure: boolean;
|
|
82
82
|
ctx: string;
|
|
83
83
|
}> {
|
|
84
|
-
|
|
84
|
+
let context: WeaverContext;
|
|
85
|
+
try {
|
|
86
|
+
context = JSON.parse(ctx) as WeaverContext;
|
|
87
|
+
} catch (err) {
|
|
88
|
+
console.error(`[approval-gate] Failed to parse context: ${err instanceof Error ? err.message : err}`);
|
|
89
|
+
return { onSuccess: false, onFailure: true, ctx: JSON.stringify({ rejectionReason: 'Invalid context' }) };
|
|
90
|
+
}
|
|
85
91
|
|
|
86
92
|
if (!execute) {
|
|
87
93
|
context.rejectionReason = '';
|
|
88
94
|
return { onSuccess: true, onFailure: false, ctx: JSON.stringify(context) };
|
|
89
95
|
}
|
|
90
96
|
|
|
97
|
+
try {
|
|
91
98
|
// Check for autoApprove in task options
|
|
92
|
-
const task = JSON.parse(context.taskJson
|
|
99
|
+
const task = JSON.parse(context.taskJson ?? '{}') as { options?: { autoApprove?: boolean } };
|
|
93
100
|
const { env } = context;
|
|
94
101
|
const { config } = env;
|
|
95
102
|
const approvalMode = typeof config.approval === 'string'
|
|
@@ -211,4 +218,10 @@ export async function weaverApprovalGate(
|
|
|
211
218
|
context.rejectionReason = reason;
|
|
212
219
|
return { onSuccess: false, onFailure: true, ctx: JSON.stringify(context) };
|
|
213
220
|
}
|
|
221
|
+
} catch (err) {
|
|
222
|
+
const msg = err instanceof Error ? err.stack ?? err.message : String(err);
|
|
223
|
+
console.error(`[approval-gate] Unhandled error: ${msg}`);
|
|
224
|
+
context.rejectionReason = `Approval gate error: ${err instanceof Error ? err.message : String(err)}`;
|
|
225
|
+
return { onSuccess: false, onFailure: true, ctx: JSON.stringify(context) };
|
|
226
|
+
}
|
|
214
227
|
}
|