claude-flow 3.21.1 → 3.23.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/.claude/helpers/.helpers-version +1 -0
- package/.claude/helpers/auto-memory-hook.mjs +59 -274
- package/.claude/helpers/helpers.manifest.json +12 -0
- package/.claude/helpers/hook-handler.cjs +132 -112
- package/.claude/helpers/intelligence.cjs +992 -196
- package/package.json +1 -1
- package/v3/@claude-flow/cli/dist/src/commands/daemon.js +23 -2
- package/v3/@claude-flow/cli/dist/src/commands/memory-backup.d.ts +11 -0
- package/v3/@claude-flow/cli/dist/src/commands/memory-backup.js +46 -0
- package/v3/@claude-flow/cli/dist/src/commands/memory-distill.d.ts +27 -0
- package/v3/@claude-flow/cli/dist/src/commands/memory-distill.js +374 -0
- package/v3/@claude-flow/cli/dist/src/commands/memory.js +5 -2
- package/v3/@claude-flow/cli/dist/src/index.d.ts +1 -1
- package/v3/@claude-flow/cli/dist/src/index.js +22 -1
- package/v3/@claude-flow/cli/dist/src/init/executor.js +20 -0
- package/v3/@claude-flow/cli/dist/src/init/helper-refresh.d.ts +19 -0
- package/v3/@claude-flow/cli/dist/src/init/helper-refresh.js +175 -0
- package/v3/@claude-flow/cli/dist/src/init/helper-signing.d.ts +30 -0
- package/v3/@claude-flow/cli/dist/src/init/helper-signing.js +60 -0
- package/v3/@claude-flow/cli/dist/src/init/helpers-generator.d.ts +16 -0
- package/v3/@claude-flow/cli/dist/src/init/helpers-generator.js +63 -6
- package/v3/@claude-flow/cli/dist/src/init/statusline-generator.js +18 -7
- package/v3/@claude-flow/cli/dist/src/mcp-client.js +13 -0
- package/v3/@claude-flow/cli/dist/src/mcp-tools/agenticow-speculate-tools.js +9 -2
- package/v3/@claude-flow/cli/dist/src/mcp-tools/browser-intent-tools.d.ts +162 -0
- package/v3/@claude-flow/cli/dist/src/mcp-tools/browser-intent-tools.js +548 -0
- package/v3/@claude-flow/cli/dist/src/mcp-tools/browser-tools.d.ts +9 -1
- package/v3/@claude-flow/cli/dist/src/mcp-tools/browser-tools.js +4 -1
- package/v3/@claude-flow/cli/dist/src/memory/memory-bridge.js +67 -47
- package/v3/@claude-flow/cli/dist/src/memory/memory-initializer.d.ts +71 -0
- package/v3/@claude-flow/cli/dist/src/memory/memory-initializer.js +330 -2
- package/v3/@claude-flow/cli/dist/src/services/distill-tuning.d.ts +111 -0
- package/v3/@claude-flow/cli/dist/src/services/distill-tuning.js +510 -0
- package/v3/@claude-flow/cli/dist/src/services/memory-backup.d.ts +24 -0
- package/v3/@claude-flow/cli/dist/src/services/memory-backup.js +94 -0
- package/v3/@claude-flow/cli/dist/src/services/memory-distillation.d.ts +41 -0
- package/v3/@claude-flow/cli/dist/src/services/memory-distillation.js +277 -0
- package/v3/@claude-flow/cli/dist/src/services/worker-daemon.d.ts +31 -2
- package/v3/@claude-flow/cli/dist/src/services/worker-daemon.js +159 -6
- package/v3/@claude-flow/cli/package.json +5 -2
|
@@ -0,0 +1,162 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Browser Intent MCP Tools — ADR-175 page-agent integration.
|
|
3
|
+
*
|
|
4
|
+
* Adds a natural-language INTENT layer on top of the low-level selector-based
|
|
5
|
+
* `browser_*` tools (browser-tools.ts, driven by the `agent-browser` CLI).
|
|
6
|
+
* `browser_act({ task })` lets a caller say "Click the login button" instead
|
|
7
|
+
* of chaining browser_snapshot + browser_click.
|
|
8
|
+
*
|
|
9
|
+
* Backing library: `page-agent` (npm, MIT, https://github.com/alibaba/page-agent)
|
|
10
|
+
* — in-page injected JS that turns the DOM into text and lets an LLM execute
|
|
11
|
+
* natural-language intents via `agent.execute('Click login')`.
|
|
12
|
+
*
|
|
13
|
+
* ============================================================================
|
|
14
|
+
* VERIFIED API (recorded 2026-07-04 against page-agent@1.11.0 — `npm view
|
|
15
|
+
* page-agent`, the published README, and the actual npm tarball contents).
|
|
16
|
+
* Deviations from the original integration brief are called out inline.
|
|
17
|
+
* ============================================================================
|
|
18
|
+
*
|
|
19
|
+
* - Package layout changed since the brief was written: `page-agent` is now a
|
|
20
|
+
* thin composition of `@page-agent/core` + `@page-agent/llms` +
|
|
21
|
+
* `@page-agent/page-controller` + `@page-agent/ui`. The npm package is
|
|
22
|
+
* ESM-only (`"type":"module"`) and ships two builds:
|
|
23
|
+
* - `dist/esm/page-agent.js` — the Node/bundler ESM entry.
|
|
24
|
+
* - `dist/iife/page-agent.demo.js` — a self-contained browser IIFE that
|
|
25
|
+
* sets `window.PageAgent = <class>` (this is what we inject).
|
|
26
|
+
*
|
|
27
|
+
* - DEVIATION #1 (load-bearing): `await import('page-agent')` is NOT a safe
|
|
28
|
+
* availability probe in Node. Empirically, importing the ESM entry throws
|
|
29
|
+
* `ReferenceError: window is not defined` — even when the package IS
|
|
30
|
+
* correctly installed — because `@page-agent/core`'s module graph touches
|
|
31
|
+
* DOM globals at import time (it's designed to run in a browser, not Node).
|
|
32
|
+
* This differs from the agenticow-loader.ts pattern used elsewhere in this
|
|
33
|
+
* repo (dynamic `import()` + catch `ERR_MODULE_NOT_FOUND`), which only
|
|
34
|
+
* works for pure-Node optional deps. Instead we detect availability via
|
|
35
|
+
* `require.resolve('page-agent')` — path resolution only, never executes
|
|
36
|
+
* module code — the same technique `browser-session-tools.ts` already uses
|
|
37
|
+
* to resolve the local `ruvector` CLI bin without invoking it.
|
|
38
|
+
*
|
|
39
|
+
* - DEVIATION #2: the IIFE bundle unconditionally (also) auto-constructs a
|
|
40
|
+
* DEMO `PageAgent` instance via `setTimeout`, pointed at Alibaba's public
|
|
41
|
+
* sandbox endpoint (`model: 'qwen3.5-plus'`, a `page-ag-testing-*.run`
|
|
42
|
+
* baseURL, `apiKey: 'NA'`) UNLESS the bundle is loaded via a real
|
|
43
|
+
* `<script src="...?autoInit=false">` tag — the guard reads
|
|
44
|
+
* `document.currentScript.src`, which is `null` when the bundle runs via
|
|
45
|
+
* `eval`/CDP (our only injection path through the `agent-browser`
|
|
46
|
+
* primitive set). Left alone, every `browser_act` call would leak page
|
|
47
|
+
* content to Alibaba's test endpoint using a placeholder key. We strip the
|
|
48
|
+
* demo auto-init tail (`stripDemoAutoInit`) before injecting rather than
|
|
49
|
+
* relying on the query-param guard.
|
|
50
|
+
*
|
|
51
|
+
* - Constructor: `new PageAgent({ model, baseURL, apiKey, language })` —
|
|
52
|
+
* `apiKey` is OPTIONAL on the type (`LLMConfig.apiKey?: string`), confirmed
|
|
53
|
+
* in `@page-agent/llms`' `LLMConfig` interface.
|
|
54
|
+
*
|
|
55
|
+
* - `execute(task: string): Promise<ExecutionResult>` where
|
|
56
|
+
* `ExecutionResult = { success: boolean; data: string; history: HistoricalEvent[] }`
|
|
57
|
+
* — DEVIATION #3: NOT `{ success, result, steps }` as sketched in the
|
|
58
|
+
* original brief. We map `data` → `result` and `history.length` → `steps`
|
|
59
|
+
* in the tool's own return shape, and also pass `history` through for
|
|
60
|
+
* callers that want the full step trace.
|
|
61
|
+
*
|
|
62
|
+
* - LLM transport: confirmed via `@page-agent/llms`' `OpenAIClient` — a
|
|
63
|
+
* single non-streaming `POST ${baseURL}/chat/completions` with
|
|
64
|
+
* `Authorization: Bearer ${apiKey}` and OpenAI tool-calling JSON. This is
|
|
65
|
+
* why a bare `ANTHROPIC_API_KEY` cannot be handed to page-agent directly:
|
|
66
|
+
* Anthropic's native API is a different shape (`/v1/messages`, different
|
|
67
|
+
* tool-call format). We require an OpenAI-*compatible* endpoint — reusing
|
|
68
|
+
* this CLI's own Tier-3 fallback ladder from `agent-execute-core.ts`
|
|
69
|
+
* (OpenRouter, then Ollama Cloud), or an explicit override.
|
|
70
|
+
*
|
|
71
|
+
* ARCHITECTURAL CONSTRAINT (mirrors metaharness-tools.ts / agenticow-tools.ts)
|
|
72
|
+
* `page-agent` lives in `optionalDependencies`. Every code path degrades to
|
|
73
|
+
* `{ degraded: true }` — never throws — when the package or an LLM provider
|
|
74
|
+
* isn't available.
|
|
75
|
+
*
|
|
76
|
+
* KEY-SAFETY CONSTRAINT (load-bearing): page-agent's LLM calls happen FROM
|
|
77
|
+
* the browser page context (it's client-side injected JS), so its `apiKey`
|
|
78
|
+
* config field is necessarily visible to whatever we inject into the page.
|
|
79
|
+
* To avoid ever placing a real provider key into a page-context string, we
|
|
80
|
+
* start a short-lived local HTTP proxy (`startLocalLLMProxy`) bound to
|
|
81
|
+
* 127.0.0.1 that holds the REAL key server-side and injects the real
|
|
82
|
+
* `Authorization` header itself; the page only ever sees the proxy's
|
|
83
|
+
* loopback URL plus a constant placeholder string (`PLACEHOLDER_API_KEY`).
|
|
84
|
+
*
|
|
85
|
+
* @module @claude-flow/cli/mcp-tools/browser-intent
|
|
86
|
+
*/
|
|
87
|
+
import type { MCPTool } from './types.js';
|
|
88
|
+
export interface PageAgentBundle {
|
|
89
|
+
/** Package root directory (contains package.json). */
|
|
90
|
+
root: string;
|
|
91
|
+
/** Absolute path to the browser-injectable IIFE bundle. */
|
|
92
|
+
iifePath: string;
|
|
93
|
+
version: string;
|
|
94
|
+
}
|
|
95
|
+
/**
|
|
96
|
+
* Locate the installed `page-agent` package's browser bundle without ever
|
|
97
|
+
* executing its module code. `resolvePkg` is injectable for tests (DI over
|
|
98
|
+
* module mocking, since `vi.mock('page-agent', ...)` cannot simulate absence
|
|
99
|
+
* for a package we deliberately never `import()`).
|
|
100
|
+
*/
|
|
101
|
+
export declare function locatePageAgentBundle(resolvePkg?: (id: string) => string): PageAgentBundle | null;
|
|
102
|
+
export interface ResolvedLLMConfig {
|
|
103
|
+
baseURL: string;
|
|
104
|
+
apiKey: string;
|
|
105
|
+
model: string;
|
|
106
|
+
source: 'explicit' | 'openrouter' | 'ollama';
|
|
107
|
+
}
|
|
108
|
+
export declare function resolvePageAgentLLMConfig(env?: NodeJS.ProcessEnv): ResolvedLLMConfig | null;
|
|
109
|
+
export declare const PLACEHOLDER_API_KEY = "ruflo-proxied-key";
|
|
110
|
+
export interface LLMProxyHandle {
|
|
111
|
+
url: string;
|
|
112
|
+
close: () => void;
|
|
113
|
+
}
|
|
114
|
+
export declare function startLocalLLMProxy(real: {
|
|
115
|
+
baseURL: string;
|
|
116
|
+
apiKey: string;
|
|
117
|
+
}): Promise<LLMProxyHandle>;
|
|
118
|
+
/** Thrown when a bundle still contains a demo/sandbox endpoint after stripping. */
|
|
119
|
+
export declare class DemoLeakError extends Error {
|
|
120
|
+
readonly signature: string;
|
|
121
|
+
constructor(signature: string);
|
|
122
|
+
}
|
|
123
|
+
/** Returns the first demo-leak signature found in `source`, or null if clean. */
|
|
124
|
+
export declare function findDemoLeak(source: string): string | null;
|
|
125
|
+
/**
|
|
126
|
+
* Strip the demo bundle's auto-init tail so injecting it via eval doesn't spin
|
|
127
|
+
* up a second `window.pageAgent` pointed at Alibaba's sandbox endpoint. This is
|
|
128
|
+
* best-effort at the text level; the real guarantee is the fail-closed
|
|
129
|
+
* `findDemoLeak` firewall enforced in `buildPageAgentInjection`, NOT this strip.
|
|
130
|
+
*/
|
|
131
|
+
export declare function stripDemoAutoInit(iifeSource: string): string;
|
|
132
|
+
export declare const BROWSER_ACT_RESULT_GLOBAL = "__ruflo_browser_act_result__";
|
|
133
|
+
export interface PageAgentPageConfig {
|
|
134
|
+
baseURL: string;
|
|
135
|
+
apiKey: string;
|
|
136
|
+
model: string;
|
|
137
|
+
language?: string;
|
|
138
|
+
}
|
|
139
|
+
/**
|
|
140
|
+
* Build the full script to hand to `browser_eval` / `agent-browser eval`:
|
|
141
|
+
* the (demo-stripped) IIFE bundle, followed by our own controlled
|
|
142
|
+
* construction + `execute()` call whose settled result lands on a window
|
|
143
|
+
* global we can poll for.
|
|
144
|
+
*
|
|
145
|
+
* KEY-SAFETY: `pageConfig.apiKey` MUST be `PLACEHOLDER_API_KEY` (or another
|
|
146
|
+
* non-secret placeholder) — callers are responsible for routing the real key
|
|
147
|
+
* through `startLocalLLMProxy` first. This function only assembles strings;
|
|
148
|
+
* it does not itself guarantee key safety, so callers MUST NOT pass a real
|
|
149
|
+
* key here (see `browserIntentTools` handler for the enforced call site).
|
|
150
|
+
*/
|
|
151
|
+
export declare function buildPageAgentInjection(iifeSource: string, pageConfig: PageAgentPageConfig, task: string): string;
|
|
152
|
+
export declare function recordBrowserTrajectory(entry: {
|
|
153
|
+
task: string;
|
|
154
|
+
url?: string;
|
|
155
|
+
success: boolean;
|
|
156
|
+
dataPreview: string;
|
|
157
|
+
steps: number;
|
|
158
|
+
source: string;
|
|
159
|
+
}): Promise<boolean>;
|
|
160
|
+
export declare const browserIntentTools: MCPTool[];
|
|
161
|
+
export default browserIntentTools;
|
|
162
|
+
//# sourceMappingURL=browser-intent-tools.d.ts.map
|