@synergenius/flow-weaver-pack-weaver 0.9.0 → 0.9.4
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/dist/bot/ai-client.d.ts +22 -2
- package/dist/bot/ai-client.d.ts.map +1 -1
- package/dist/bot/ai-client.js +168 -20
- package/dist/bot/ai-client.js.map +1 -1
- package/dist/bot/ansi.d.ts +13 -0
- package/dist/bot/ansi.d.ts.map +1 -0
- package/dist/bot/ansi.js +13 -0
- package/dist/bot/ansi.js.map +1 -0
- package/dist/bot/assistant-core.d.ts +25 -0
- package/dist/bot/assistant-core.d.ts.map +1 -0
- package/dist/bot/assistant-core.js +272 -0
- package/dist/bot/assistant-core.js.map +1 -0
- package/dist/bot/assistant-tools.d.ts +10 -0
- package/dist/bot/assistant-tools.d.ts.map +1 -0
- package/dist/bot/assistant-tools.js +324 -0
- package/dist/bot/assistant-tools.js.map +1 -0
- package/dist/bot/audit-logger.d.ts.map +1 -1
- package/dist/bot/audit-logger.js +9 -5
- package/dist/bot/audit-logger.js.map +1 -1
- package/dist/bot/bot-manager.d.ts +49 -0
- package/dist/bot/bot-manager.d.ts.map +1 -0
- package/dist/bot/bot-manager.js +279 -0
- package/dist/bot/bot-manager.js.map +1 -0
- package/dist/bot/child-process-tracker.d.ts +6 -0
- package/dist/bot/child-process-tracker.d.ts.map +1 -0
- package/dist/bot/child-process-tracker.js +35 -0
- package/dist/bot/child-process-tracker.js.map +1 -0
- package/dist/bot/cli-provider.d.ts.map +1 -1
- package/dist/bot/cli-provider.js +13 -8
- package/dist/bot/cli-provider.js.map +1 -1
- package/dist/bot/conversation-store.d.ts +40 -0
- package/dist/bot/conversation-store.d.ts.map +1 -0
- package/dist/bot/conversation-store.js +182 -0
- package/dist/bot/conversation-store.js.map +1 -0
- package/dist/bot/error-classifier.d.ts +27 -0
- package/dist/bot/error-classifier.d.ts.map +1 -0
- package/dist/bot/error-classifier.js +71 -0
- package/dist/bot/error-classifier.js.map +1 -0
- package/dist/bot/error-guide.d.ts +5 -0
- package/dist/bot/error-guide.d.ts.map +1 -0
- package/dist/bot/error-guide.js +5 -0
- package/dist/bot/error-guide.js.map +1 -0
- package/dist/bot/knowledge-store.d.ts +17 -0
- package/dist/bot/knowledge-store.d.ts.map +1 -0
- package/dist/bot/knowledge-store.js +53 -0
- package/dist/bot/knowledge-store.js.map +1 -0
- package/dist/bot/paths.d.ts +11 -0
- package/dist/bot/paths.d.ts.map +1 -0
- package/dist/bot/paths.js +26 -0
- package/dist/bot/paths.js.map +1 -0
- package/dist/bot/retry-utils.d.ts +5 -0
- package/dist/bot/retry-utils.d.ts.map +1 -0
- package/dist/bot/retry-utils.js +5 -0
- package/dist/bot/retry-utils.js.map +1 -0
- package/dist/bot/runner.d.ts.map +1 -1
- package/dist/bot/runner.js +12 -1
- package/dist/bot/runner.js.map +1 -1
- package/dist/bot/safety.d.ts +10 -0
- package/dist/bot/safety.d.ts.map +1 -0
- package/dist/bot/safety.js +14 -0
- package/dist/bot/safety.js.map +1 -0
- package/dist/bot/session-state.d.ts.map +1 -1
- package/dist/bot/session-state.js +3 -1
- package/dist/bot/session-state.js.map +1 -1
- package/dist/bot/steering.js +2 -2
- package/dist/bot/steering.js.map +1 -1
- package/dist/bot/step-executor.d.ts +10 -5
- package/dist/bot/step-executor.d.ts.map +1 -1
- package/dist/bot/step-executor.js +252 -3
- package/dist/bot/step-executor.js.map +1 -1
- package/dist/bot/system-prompt.d.ts +1 -1
- package/dist/bot/system-prompt.d.ts.map +1 -1
- package/dist/bot/system-prompt.js +69 -43
- package/dist/bot/system-prompt.js.map +1 -1
- package/dist/bot/task-decomposer.d.ts +24 -0
- package/dist/bot/task-decomposer.d.ts.map +1 -0
- package/dist/bot/task-decomposer.js +75 -0
- package/dist/bot/task-decomposer.js.map +1 -0
- package/dist/bot/task-queue.d.ts +17 -4
- package/dist/bot/task-queue.d.ts.map +1 -1
- package/dist/bot/task-queue.js +83 -5
- package/dist/bot/task-queue.js.map +1 -1
- package/dist/bot/terminal-renderer.d.ts +60 -0
- package/dist/bot/terminal-renderer.d.ts.map +1 -0
- package/dist/bot/terminal-renderer.js +204 -0
- package/dist/bot/terminal-renderer.js.map +1 -0
- package/dist/bot/tool-registry.d.ts +24 -0
- package/dist/bot/tool-registry.d.ts.map +1 -0
- package/dist/bot/tool-registry.js +458 -0
- package/dist/bot/tool-registry.js.map +1 -0
- package/dist/bot/types.d.ts +7 -0
- package/dist/bot/types.d.ts.map +1 -1
- package/dist/bot/weaver-tools.d.ts +18 -0
- package/dist/bot/weaver-tools.d.ts.map +1 -0
- package/dist/bot/weaver-tools.js +124 -0
- package/dist/bot/weaver-tools.js.map +1 -0
- package/dist/cli-bridge.d.ts.map +1 -1
- package/dist/cli-bridge.js +5 -1
- package/dist/cli-bridge.js.map +1 -1
- package/dist/cli-handlers.d.ts +13 -1
- package/dist/cli-handlers.d.ts.map +1 -1
- package/dist/cli-handlers.js +615 -48
- package/dist/cli-handlers.js.map +1 -1
- package/dist/mcp-tools.js +2 -2
- package/dist/mcp-tools.js.map +1 -1
- package/dist/node-types/abort-task.d.ts.map +1 -1
- package/dist/node-types/abort-task.js +4 -3
- package/dist/node-types/abort-task.js.map +1 -1
- package/dist/node-types/agent-execute.d.ts +38 -0
- package/dist/node-types/agent-execute.d.ts.map +1 -0
- package/dist/node-types/agent-execute.js +252 -0
- package/dist/node-types/agent-execute.js.map +1 -0
- package/dist/node-types/bot-report.d.ts +5 -3
- package/dist/node-types/bot-report.d.ts.map +1 -1
- package/dist/node-types/bot-report.js +39 -7
- package/dist/node-types/bot-report.js.map +1 -1
- package/dist/node-types/build-context.d.ts +3 -3
- package/dist/node-types/build-context.d.ts.map +1 -1
- package/dist/node-types/build-context.js +108 -24
- package/dist/node-types/build-context.js.map +1 -1
- package/dist/node-types/detect-provider.d.ts +2 -2
- package/dist/node-types/detect-provider.d.ts.map +1 -1
- package/dist/node-types/detect-provider.js +3 -1
- package/dist/node-types/detect-provider.js.map +1 -1
- package/dist/node-types/exec-validate-retry.d.ts.map +1 -1
- package/dist/node-types/exec-validate-retry.js +43 -6
- package/dist/node-types/exec-validate-retry.js.map +1 -1
- package/dist/node-types/execute-plan.d.ts.map +1 -1
- package/dist/node-types/execute-plan.js +31 -8
- package/dist/node-types/execute-plan.js.map +1 -1
- package/dist/node-types/execute-target.d.ts.map +1 -1
- package/dist/node-types/execute-target.js +3 -1
- package/dist/node-types/execute-target.js.map +1 -1
- package/dist/node-types/fix-errors.d.ts.map +1 -1
- package/dist/node-types/fix-errors.js +21 -5
- package/dist/node-types/fix-errors.js.map +1 -1
- package/dist/node-types/genesis-observe.d.ts.map +1 -1
- package/dist/node-types/genesis-observe.js +3 -1
- package/dist/node-types/genesis-observe.js.map +1 -1
- package/dist/node-types/genesis-report.js +4 -1
- package/dist/node-types/genesis-report.js.map +1 -1
- package/dist/node-types/git-ops.d.ts.map +1 -1
- package/dist/node-types/git-ops.js +98 -4
- package/dist/node-types/git-ops.js.map +1 -1
- package/dist/node-types/index.d.ts +2 -0
- package/dist/node-types/index.d.ts.map +1 -1
- package/dist/node-types/index.js +2 -0
- package/dist/node-types/index.js.map +1 -1
- package/dist/node-types/load-config.d.ts +2 -2
- package/dist/node-types/load-config.d.ts.map +1 -1
- package/dist/node-types/load-config.js.map +1 -1
- package/dist/node-types/plan-task.d.ts.map +1 -1
- package/dist/node-types/plan-task.js +14 -2
- package/dist/node-types/plan-task.js.map +1 -1
- package/dist/node-types/read-workflow.js +8 -2
- package/dist/node-types/read-workflow.js.map +1 -1
- package/dist/node-types/receive-task.d.ts.map +1 -1
- package/dist/node-types/receive-task.js +35 -26
- package/dist/node-types/receive-task.js.map +1 -1
- package/dist/node-types/send-notify.js +2 -1
- package/dist/node-types/send-notify.js.map +1 -1
- package/dist/node-types/validate-gate.d.ts +18 -0
- package/dist/node-types/validate-gate.d.ts.map +1 -0
- package/dist/node-types/validate-gate.js +96 -0
- package/dist/node-types/validate-gate.js.map +1 -0
- package/dist/workflows/genesis-task.d.ts +20 -12
- package/dist/workflows/genesis-task.d.ts.map +1 -1
- package/dist/workflows/genesis-task.js +20 -12
- package/dist/workflows/genesis-task.js.map +1 -1
- package/dist/workflows/weaver-agent.d.ts +35 -0
- package/dist/workflows/weaver-agent.d.ts.map +1 -0
- package/dist/workflows/weaver-agent.js +777 -0
- package/dist/workflows/weaver-agent.js.map +1 -0
- package/dist/workflows/weaver-bot-batch.d.ts +19 -26
- package/dist/workflows/weaver-bot-batch.d.ts.map +1 -1
- package/dist/workflows/weaver-bot-batch.js +1043 -27
- package/dist/workflows/weaver-bot-batch.js.map +1 -1
- package/dist/workflows/weaver-bot.d.ts +21 -35
- package/dist/workflows/weaver-bot.d.ts.map +1 -1
- package/dist/workflows/weaver-bot.js +1119 -36
- package/dist/workflows/weaver-bot.js.map +1 -1
- package/flowweaver.manifest.json +21 -1
- package/package.json +5 -2
- package/src/bot/ai-client.ts +180 -19
- package/src/bot/ansi.ts +12 -0
- package/src/bot/assistant-core.ts +312 -0
- package/src/bot/assistant-tools.ts +318 -0
- package/src/bot/audit-logger.ts +6 -5
- package/src/bot/bot-manager.ts +293 -0
- package/src/bot/child-process-tracker.ts +40 -0
- package/src/bot/cli-provider.ts +13 -8
- package/src/bot/conversation-store.ts +222 -0
- package/src/bot/error-classifier.ts +90 -0
- package/src/bot/error-guide.ts +4 -0
- package/src/bot/knowledge-store.ts +59 -0
- package/src/bot/paths.ts +27 -0
- package/src/bot/retry-utils.ts +4 -0
- package/src/bot/runner.ts +12 -1
- package/src/bot/safety.ts +16 -0
- package/src/bot/session-state.ts +2 -1
- package/src/bot/steering.ts +2 -2
- package/src/bot/step-executor.ts +313 -5
- package/src/bot/system-prompt.ts +70 -47
- package/src/bot/task-decomposer.ts +100 -0
- package/src/bot/task-queue.ts +100 -8
- package/src/bot/terminal-renderer.ts +238 -0
- package/src/bot/tool-registry.ts +477 -0
- package/src/bot/types.ts +8 -0
- package/src/bot/weaver-tools.ts +134 -0
- package/src/cli-bridge.ts +7 -1
- package/src/cli-handlers.ts +624 -48
- package/src/mcp-tools.ts +2 -2
- package/src/node-types/abort-task.ts +5 -4
- package/src/node-types/agent-execute.ts +303 -0
- package/src/node-types/bot-report.ts +40 -9
- package/src/node-types/build-context.ts +112 -25
- package/src/node-types/detect-provider.ts +4 -3
- package/src/node-types/exec-validate-retry.ts +47 -8
- package/src/node-types/execute-plan.ts +32 -8
- package/src/node-types/execute-target.ts +2 -1
- package/src/node-types/fix-errors.ts +20 -5
- package/src/node-types/genesis-observe.ts +2 -1
- package/src/node-types/genesis-report.ts +1 -1
- package/src/node-types/git-ops.ts +93 -4
- package/src/node-types/index.ts +2 -0
- package/src/node-types/load-config.ts +3 -3
- package/src/node-types/plan-task.ts +15 -3
- package/src/node-types/read-workflow.ts +2 -2
- package/src/node-types/receive-task.ts +31 -26
- package/src/node-types/send-notify.ts +1 -1
- package/src/node-types/validate-gate.ts +112 -0
- package/src/workflows/genesis-task.ts +20 -12
- package/src/workflows/weaver-agent.ts +799 -0
- package/src/workflows/weaver-bot-batch.ts +1049 -27
- package/src/workflows/weaver-bot.ts +1123 -36
package/dist/bot/ai-client.d.ts
CHANGED
|
@@ -1,6 +1,12 @@
|
|
|
1
1
|
import type { ProviderInfo } from './types.js';
|
|
2
|
-
export declare function callCli(provider: string, prompt: string, model?: string): string;
|
|
3
|
-
|
|
2
|
+
export declare function callCli(provider: string, prompt: string, model?: string, systemPrompt?: string): string;
|
|
3
|
+
/**
|
|
4
|
+
* Extract the model's response from the claude CLI --output-format json wrapper.
|
|
5
|
+
* With --json-schema: structured_output contains the validated JSON.
|
|
6
|
+
* Without: result contains the raw text.
|
|
7
|
+
*/
|
|
8
|
+
export declare function extractCliJsonResult(raw: string): string;
|
|
9
|
+
export declare function callCliAsync(provider: string, prompt: string, model?: string, systemPrompt?: string): Promise<string>;
|
|
4
10
|
export declare function callApi(apiKey: string, model: string, maxTokens: number, systemPrompt: string, userPrompt: string): Promise<string>;
|
|
5
11
|
/**
|
|
6
12
|
* Call the platform-injected AI proxy (routes through IPC to the host process).
|
|
@@ -12,4 +18,18 @@ export declare function callPlatform(systemPrompt: string, userPrompt: string, m
|
|
|
12
18
|
*/
|
|
13
19
|
export declare function callAI(pInfo: Pick<ProviderInfo, 'type' | 'apiKey' | 'model' | 'maxTokens'>, systemPrompt: string, userPrompt: string, defaultMaxTokens?: number): Promise<string>;
|
|
14
20
|
export declare function parseJsonResponse(text: string): Record<string, unknown>;
|
|
21
|
+
export interface NormalizedPlan {
|
|
22
|
+
steps: Array<{
|
|
23
|
+
id: string;
|
|
24
|
+
operation: string;
|
|
25
|
+
description: string;
|
|
26
|
+
args: Record<string, unknown>;
|
|
27
|
+
}>;
|
|
28
|
+
summary: string;
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Normalize an AI-generated plan into a consistent { steps, summary } shape.
|
|
32
|
+
* Handles: wrapped plans, bare arrays, flat objects, missing fields.
|
|
33
|
+
*/
|
|
34
|
+
export declare function normalizePlan(parsed: unknown): NormalizedPlan;
|
|
15
35
|
//# sourceMappingURL=ai-client.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ai-client.d.ts","sourceRoot":"","sources":["../../src/bot/ai-client.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,YAAY,
|
|
1
|
+
{"version":3,"file":"ai-client.d.ts","sourceRoot":"","sources":["../../src/bot/ai-client.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AA4B/C,wBAAgB,OAAO,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,EAAE,YAAY,CAAC,EAAE,MAAM,GAAG,MAAM,CAOvG;AAED;;;;GAIG;AACH,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAoBxD;AAED,wBAAsB,YAAY,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,EAAE,YAAY,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAqH3H;AAED,wBAAsB,OAAO,CAC3B,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAChD,YAAY,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GACvC,OAAO,CAAC,MAAM,CAAC,CAgBjB;AAED;;;GAGG;AACH,wBAAsB,YAAY,CAChC,YAAY,EAAE,MAAM,EACpB,UAAU,EAAE,MAAM,EAClB,KAAK,CAAC,EAAE,MAAM,EACd,SAAS,CAAC,EAAE,MAAM,GACjB,OAAO,CAAC,MAAM,CAAC,CASjB;AAED;;GAEG;AACH,wBAAsB,MAAM,CAC1B,KAAK,EAAE,IAAI,CAAC,YAAY,EAAE,MAAM,GAAG,QAAQ,GAAG,OAAO,GAAG,WAAW,CAAC,EACpE,YAAY,EAAE,MAAM,EACpB,UAAU,EAAE,MAAM,EAClB,gBAAgB,SAAO,GACtB,OAAO,CAAC,MAAM,CAAC,CAiBjB;AAED,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CASvE;AAMD,MAAM,WAAW,cAAc;IAC7B,KAAK,EAAE,KAAK,CAAC;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;KAAE,CAAC,CAAC;IACpG,OAAO,EAAE,MAAM,CAAC;CACjB;AAED;;;GAGG;AACH,wBAAgB,aAAa,CAAC,MAAM,EAAE,OAAO,GAAG,cAAc,CAoC7D"}
|
package/dist/bot/ai-client.js
CHANGED
|
@@ -1,56 +1,164 @@
|
|
|
1
1
|
import { execSync, spawn } from 'node:child_process';
|
|
2
|
-
import {
|
|
2
|
+
import { trackChild } from './child-process-tracker.js';
|
|
3
3
|
// Strip CLAUDECODE from child env so nested claude CLI invocations work.
|
|
4
4
|
const childEnv = { ...process.env };
|
|
5
5
|
delete childEnv.CLAUDECODE;
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
6
|
+
/** JSON schema for Weaver plan responses — enforced via --json-schema. */
|
|
7
|
+
const PLAN_JSON_SCHEMA = JSON.stringify({
|
|
8
|
+
type: 'object',
|
|
9
|
+
properties: {
|
|
10
|
+
steps: {
|
|
11
|
+
type: 'array',
|
|
12
|
+
items: {
|
|
13
|
+
type: 'object',
|
|
14
|
+
properties: {
|
|
15
|
+
id: { type: 'string' },
|
|
16
|
+
operation: { type: 'string' },
|
|
17
|
+
description: { type: 'string' },
|
|
18
|
+
args: { type: 'object' },
|
|
19
|
+
},
|
|
20
|
+
required: ['id', 'operation', 'description', 'args'],
|
|
21
|
+
},
|
|
22
|
+
},
|
|
23
|
+
summary: { type: 'string' },
|
|
24
|
+
},
|
|
25
|
+
required: ['steps', 'summary'],
|
|
26
|
+
});
|
|
27
|
+
export function callCli(provider, prompt, model, systemPrompt) {
|
|
13
28
|
if (provider === 'copilot-cli') {
|
|
14
29
|
return execSync('copilot -p --silent --allow-all-tools', {
|
|
15
30
|
input: prompt, encoding: 'utf-8', stdio: ['pipe', 'pipe', 'pipe'], timeout: 300_000, env: childEnv,
|
|
16
31
|
}).trim();
|
|
17
32
|
}
|
|
18
|
-
throw new Error(`
|
|
33
|
+
throw new Error(`callCli only supports copilot-cli. Use callCliAsync for claude-cli.`);
|
|
19
34
|
}
|
|
20
|
-
|
|
35
|
+
/**
|
|
36
|
+
* Extract the model's response from the claude CLI --output-format json wrapper.
|
|
37
|
+
* With --json-schema: structured_output contains the validated JSON.
|
|
38
|
+
* Without: result contains the raw text.
|
|
39
|
+
*/
|
|
40
|
+
export function extractCliJsonResult(raw) {
|
|
41
|
+
const trimmed = raw.trim();
|
|
42
|
+
try {
|
|
43
|
+
const wrapper = JSON.parse(trimmed);
|
|
44
|
+
// Prefer structured_output (schema-validated JSON)
|
|
45
|
+
if (wrapper?.structured_output) {
|
|
46
|
+
return JSON.stringify(wrapper.structured_output);
|
|
47
|
+
}
|
|
48
|
+
// Fall back to result field (raw text)
|
|
49
|
+
if (typeof wrapper?.result === 'string' && wrapper.result.trim()) {
|
|
50
|
+
return wrapper.result;
|
|
51
|
+
}
|
|
52
|
+
// If wrapper has type: "result" but empty result, return the whole thing
|
|
53
|
+
if (wrapper?.type === 'result') {
|
|
54
|
+
return trimmed;
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
catch {
|
|
58
|
+
// Not valid JSON wrapper — return raw output
|
|
59
|
+
}
|
|
60
|
+
return trimmed;
|
|
61
|
+
}
|
|
62
|
+
export async function callCliAsync(provider, prompt, model, systemPrompt) {
|
|
21
63
|
if (provider === 'copilot-cli') {
|
|
22
64
|
return callCli(provider, prompt, model);
|
|
23
65
|
}
|
|
24
66
|
if (provider !== 'claude-cli') {
|
|
25
67
|
throw new Error(`Unknown CLI provider: ${provider}`);
|
|
26
68
|
}
|
|
27
|
-
|
|
69
|
+
// Flags matching the platform's proven CLI integration:
|
|
70
|
+
// --verbose + --output-format stream-json + --include-partial-messages for incremental streaming
|
|
71
|
+
// --json-schema for structured JSON output enforcement
|
|
72
|
+
// --dangerously-skip-permissions to prevent permission prompt hangs
|
|
73
|
+
const args = [
|
|
74
|
+
'-p', '--verbose',
|
|
75
|
+
'--output-format', 'stream-json',
|
|
76
|
+
'--include-partial-messages',
|
|
77
|
+
'--json-schema', PLAN_JSON_SCHEMA,
|
|
78
|
+
'--dangerously-skip-permissions',
|
|
79
|
+
];
|
|
28
80
|
if (model)
|
|
29
81
|
args.push('--model', model);
|
|
82
|
+
if (systemPrompt)
|
|
83
|
+
args.push('--system-prompt', systemPrompt);
|
|
30
84
|
const child = spawn('claude', args, {
|
|
31
85
|
stdio: ['pipe', 'pipe', 'pipe'],
|
|
32
86
|
env: childEnv,
|
|
33
87
|
});
|
|
88
|
+
trackChild(child);
|
|
34
89
|
child.stdin.write(prompt);
|
|
35
90
|
child.stdin.end();
|
|
36
91
|
const timeout = setTimeout(() => child.kill('SIGTERM'), 300_000);
|
|
37
|
-
|
|
92
|
+
// Stream parsing — matches platform's proven approach from cli-providers/claude.ts.
|
|
93
|
+
// ONLY content_block_delta is reliable for incremental text.
|
|
94
|
+
// result event contains structured_output for --json-schema responses.
|
|
95
|
+
let resultJson = '';
|
|
38
96
|
let buffer = '';
|
|
97
|
+
let hasStreamedText = false;
|
|
98
|
+
let inThinkingBlock = false;
|
|
39
99
|
try {
|
|
40
100
|
for await (const data of child.stdout) {
|
|
41
101
|
buffer += data.toString();
|
|
42
102
|
const lines = buffer.split('\n');
|
|
43
103
|
buffer = lines.pop();
|
|
44
104
|
for (const line of lines) {
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
105
|
+
if (!line.trim())
|
|
106
|
+
continue;
|
|
107
|
+
try {
|
|
108
|
+
let event = JSON.parse(line);
|
|
109
|
+
// Unwrap stream_event wrapper (--include-partial-messages wraps API events)
|
|
110
|
+
if (event.type === 'stream_event' && event.event) {
|
|
111
|
+
event = event.event;
|
|
112
|
+
}
|
|
113
|
+
// Thinking block start — print indicator once
|
|
114
|
+
if (event.type === 'content_block_start' && event.content_block?.type === 'thinking') {
|
|
115
|
+
inThinkingBlock = true;
|
|
116
|
+
process.stderr.write('\x1b[90m thinking...\x1b[0m');
|
|
117
|
+
}
|
|
118
|
+
// Incremental thinking — dim text, no emoji per token
|
|
119
|
+
else if (event.type === 'content_block_delta' && event.delta?.type === 'thinking_delta' && event.delta?.thinking) {
|
|
120
|
+
// Don't stream every thinking token — just show we're thinking
|
|
121
|
+
}
|
|
122
|
+
// Text block start
|
|
123
|
+
else if (event.type === 'content_block_start' && event.content_block?.type === 'text') {
|
|
124
|
+
if (inThinkingBlock) {
|
|
125
|
+
process.stderr.write('\n');
|
|
126
|
+
inThinkingBlock = false;
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
// Incremental text — stream to stderr (chatbot-like output)
|
|
130
|
+
else if (event.type === 'content_block_delta' && event.delta?.type === 'text_delta' && event.delta?.text) {
|
|
131
|
+
hasStreamedText = true;
|
|
132
|
+
process.stderr.write(`\x1b[36m${event.delta.text}\x1b[0m`);
|
|
133
|
+
}
|
|
134
|
+
// Block boundary — newline
|
|
135
|
+
else if (event.type === 'content_block_stop') {
|
|
136
|
+
if (inThinkingBlock) {
|
|
137
|
+
process.stderr.write('\n');
|
|
138
|
+
inThinkingBlock = false;
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
// Result event — contains structured_output with --json-schema
|
|
142
|
+
else if (event.type === 'result') {
|
|
143
|
+
resultJson = line;
|
|
144
|
+
// Newline after streamed text
|
|
145
|
+
if (hasStreamedText)
|
|
146
|
+
process.stderr.write('\n');
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
catch {
|
|
150
|
+
// Non-JSON line — ignore
|
|
151
|
+
}
|
|
48
152
|
}
|
|
49
153
|
}
|
|
154
|
+
// Process remaining buffer
|
|
50
155
|
if (buffer.trim()) {
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
156
|
+
try {
|
|
157
|
+
const event = JSON.parse(buffer);
|
|
158
|
+
if (event.type === 'result')
|
|
159
|
+
resultJson = buffer;
|
|
160
|
+
}
|
|
161
|
+
catch { /* ignore */ }
|
|
54
162
|
}
|
|
55
163
|
}
|
|
56
164
|
finally {
|
|
@@ -65,7 +173,7 @@ export async function callCliAsync(provider, prompt, model) {
|
|
|
65
173
|
});
|
|
66
174
|
child.on('error', reject);
|
|
67
175
|
});
|
|
68
|
-
return
|
|
176
|
+
return extractCliJsonResult(resultJson || buffer);
|
|
69
177
|
}
|
|
70
178
|
export async function callApi(apiKey, model, maxTokens, systemPrompt, userPrompt) {
|
|
71
179
|
const body = JSON.stringify({
|
|
@@ -109,7 +217,10 @@ export async function callAI(pInfo, systemPrompt, userPrompt, defaultMaxTokens =
|
|
|
109
217
|
if (pInfo.type === 'anthropic') {
|
|
110
218
|
return callApi(pInfo.apiKey, pInfo.model ?? 'claude-sonnet-4-6', pInfo.maxTokens ?? defaultMaxTokens, systemPrompt, userPrompt);
|
|
111
219
|
}
|
|
112
|
-
|
|
220
|
+
// Async-only path: uses spawn() so Ctrl+C can kill child processes.
|
|
221
|
+
// Also uses --output-format json + --json-schema to enforce JSON output
|
|
222
|
+
// (eliminates hallucination entirely — no retry needed).
|
|
223
|
+
return callCliAsync(pInfo.type, userPrompt, pInfo.model, systemPrompt);
|
|
113
224
|
}
|
|
114
225
|
export function parseJsonResponse(text) {
|
|
115
226
|
let cleaned = text.trim();
|
|
@@ -125,4 +236,41 @@ export function parseJsonResponse(text) {
|
|
|
125
236
|
return JSON.parse(match[0]);
|
|
126
237
|
throw new Error(`Failed to parse AI response as JSON: ${text.slice(0, 200)}`);
|
|
127
238
|
}
|
|
239
|
+
/**
|
|
240
|
+
* Normalize an AI-generated plan into a consistent { steps, summary } shape.
|
|
241
|
+
* Handles: wrapped plans, bare arrays, flat objects, missing fields.
|
|
242
|
+
*/
|
|
243
|
+
export function normalizePlan(parsed) {
|
|
244
|
+
const obj = parsed;
|
|
245
|
+
// Case 1: already has steps array
|
|
246
|
+
let steps;
|
|
247
|
+
if (Array.isArray(obj?.steps)) {
|
|
248
|
+
steps = obj.steps;
|
|
249
|
+
}
|
|
250
|
+
// Case 2: wrapped in plan.steps
|
|
251
|
+
else if (obj?.plan && Array.isArray(obj.plan.steps)) {
|
|
252
|
+
steps = obj.plan.steps;
|
|
253
|
+
}
|
|
254
|
+
// Case 3: parsed is itself an array
|
|
255
|
+
else if (Array.isArray(parsed)) {
|
|
256
|
+
steps = parsed;
|
|
257
|
+
}
|
|
258
|
+
if (!steps) {
|
|
259
|
+
return { steps: [], summary: obj?.summary ?? 'No valid steps in AI response' };
|
|
260
|
+
}
|
|
261
|
+
// Normalize each step
|
|
262
|
+
const normalized = steps
|
|
263
|
+
.filter((s) => s != null && typeof s === 'object' && !Array.isArray(s))
|
|
264
|
+
.map((step, idx) => ({
|
|
265
|
+
id: step.id ?? `step-${idx + 1}`,
|
|
266
|
+
operation: step.operation ?? '',
|
|
267
|
+
description: step.description ?? step.operation ?? `Step ${idx + 1}`,
|
|
268
|
+
args: step.args ?? {},
|
|
269
|
+
}))
|
|
270
|
+
.filter(s => s.operation !== ''); // Drop steps with no operation
|
|
271
|
+
return {
|
|
272
|
+
steps: normalized,
|
|
273
|
+
summary: obj?.summary ?? `${normalized.length} steps`,
|
|
274
|
+
};
|
|
275
|
+
}
|
|
128
276
|
//# sourceMappingURL=ai-client.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ai-client.js","sourceRoot":"","sources":["../../src/bot/ai-client.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AACrD,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"ai-client.js","sourceRoot":"","sources":["../../src/bot/ai-client.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shared ANSI color helpers — single source of truth.
|
|
3
|
+
*/
|
|
4
|
+
export declare const c: {
|
|
5
|
+
green: (s: string) => string;
|
|
6
|
+
red: (s: string) => string;
|
|
7
|
+
yellow: (s: string) => string;
|
|
8
|
+
cyan: (s: string) => string;
|
|
9
|
+
dim: (s: string) => string;
|
|
10
|
+
bold: (s: string) => string;
|
|
11
|
+
redBold: (s: string) => string;
|
|
12
|
+
};
|
|
13
|
+
//# sourceMappingURL=ansi.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ansi.d.ts","sourceRoot":"","sources":["../../src/bot/ansi.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,eAAO,MAAM,CAAC;eACD,MAAM;aACR,MAAM;gBACH,MAAM;cACR,MAAM;aACP,MAAM;cACL,MAAM;iBACH,MAAM;CACpB,CAAC"}
|
package/dist/bot/ansi.js
ADDED
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shared ANSI color helpers — single source of truth.
|
|
3
|
+
*/
|
|
4
|
+
export const c = {
|
|
5
|
+
green: (s) => `\x1b[32m${s}\x1b[0m`,
|
|
6
|
+
red: (s) => `\x1b[31m${s}\x1b[0m`,
|
|
7
|
+
yellow: (s) => `\x1b[33m${s}\x1b[0m`,
|
|
8
|
+
cyan: (s) => `\x1b[36m${s}\x1b[0m`,
|
|
9
|
+
dim: (s) => `\x1b[2m${s}\x1b[0m`,
|
|
10
|
+
bold: (s) => `\x1b[1m${s}\x1b[0m`,
|
|
11
|
+
redBold: (s) => `\x1b[1;31m${s}\x1b[0m`,
|
|
12
|
+
};
|
|
13
|
+
//# sourceMappingURL=ansi.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ansi.js","sourceRoot":"","sources":["../../src/bot/ansi.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,CAAC,MAAM,CAAC,GAAG;IACf,KAAK,EAAE,CAAC,CAAS,EAAE,EAAE,CAAC,WAAW,CAAC,SAAS;IAC3C,GAAG,EAAE,CAAC,CAAS,EAAE,EAAE,CAAC,WAAW,CAAC,SAAS;IACzC,MAAM,EAAE,CAAC,CAAS,EAAE,EAAE,CAAC,WAAW,CAAC,SAAS;IAC5C,IAAI,EAAE,CAAC,CAAS,EAAE,EAAE,CAAC,WAAW,CAAC,SAAS;IAC1C,GAAG,EAAE,CAAC,CAAS,EAAE,EAAE,CAAC,UAAU,CAAC,SAAS;IACxC,IAAI,EAAE,CAAC,CAAS,EAAE,EAAE,CAAC,UAAU,CAAC,SAAS;IACzC,OAAO,EAAE,CAAC,CAAS,EAAE,EAAE,CAAC,aAAa,CAAC,SAAS;CAChD,CAAC"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Assistant Core — provider-agnostic conversational loop.
|
|
3
|
+
* The user types, the assistant responds with text and tool calls.
|
|
4
|
+
* UI-agnostic: terminal is one frontend, platform AI chat is another.
|
|
5
|
+
*
|
|
6
|
+
* Supports two provider modes:
|
|
7
|
+
* - CLI provider: tools handled internally via MCP bridge (tool_result events)
|
|
8
|
+
* - API provider: tools collected and executed manually (tool_use_start/end events)
|
|
9
|
+
*/
|
|
10
|
+
import { type AgentProvider, type ToolDefinition, type ToolExecutor } from '@synergenius/flow-weaver/agent';
|
|
11
|
+
export interface AssistantOptions {
|
|
12
|
+
provider: AgentProvider;
|
|
13
|
+
tools: ToolDefinition[];
|
|
14
|
+
executor: ToolExecutor;
|
|
15
|
+
projectDir: string;
|
|
16
|
+
systemPrompt?: string;
|
|
17
|
+
/** Override for testing — provide messages instead of reading stdin */
|
|
18
|
+
inputMessages?: string[];
|
|
19
|
+
/** Resume a specific conversation by ID */
|
|
20
|
+
resumeId?: string;
|
|
21
|
+
/** Always start a fresh conversation */
|
|
22
|
+
newConversation?: boolean;
|
|
23
|
+
}
|
|
24
|
+
export declare function runAssistant(opts: AssistantOptions): Promise<void>;
|
|
25
|
+
//# sourceMappingURL=assistant-core.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"assistant-core.d.ts","sourceRoot":"","sources":["../../src/bot/assistant-core.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAGH,OAAO,EAEL,KAAK,aAAa,EAElB,KAAK,cAAc,EACnB,KAAK,YAAY,EAElB,MAAM,gCAAgC,CAAC;AAMxC,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,EAAE,aAAa,CAAC;IACxB,KAAK,EAAE,cAAc,EAAE,CAAC;IACxB,QAAQ,EAAE,YAAY,CAAC;IACvB,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,uEAAuE;IACvE,aAAa,CAAC,EAAE,MAAM,EAAE,CAAC;IACzB,2CAA2C;IAC3C,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,wCAAwC;IACxC,eAAe,CAAC,EAAE,OAAO,CAAC;CAC3B;AAkCD,wBAAsB,YAAY,CAAC,IAAI,EAAE,gBAAgB,GAAG,OAAO,CAAC,IAAI,CAAC,CAwKxE"}
|