@claude-flow/cli 3.38.12 → 3.38.14
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/.proven-config-version +1 -0
- package/.claude/helpers/.helpers-version +1 -1
- package/.claude/helpers/helpers.manifest.json +2 -2
- package/.claude/helpers/statusline.cjs +0 -0
- package/.claude/proven-config.json +42 -0
- package/catalog-manifest.json +4 -4
- package/dist/src/mcp-tools/hooks-tools.js +6 -1
- package/dist/src/memory/memory-bridge.js +13 -2
- package/dist/src/ruvector/lattice-wasm.d.ts +14 -0
- package/dist/src/ruvector/lattice-wasm.js +144 -0
- package/dist/src/services/flywheel-receipt.d.ts +10 -0
- package/dist/src/services/flywheel-receipt.js +82 -7
- package/dist/src/services/flywheel-transaction.js +10 -1
- package/node_modules/@claude-flow/codex/dist/cli.js +0 -0
- package/node_modules/@claude-flow/plugin-agent-federation/dist/bin.js +0 -0
- package/node_modules/@claude-flow/security/dist/input-validator.d.ts +6 -6
- package/package.json +1 -1
- package/plugins/ruflo-metaharness/.claude-flow/daemon-state.json +178 -0
- package/plugins/ruflo-metaharness/.claude-flow/daemon.pid +1 -0
- package/plugins/ruflo-metaharness/.claude-flow/data/pending-insights.jsonl +5 -0
- package/plugins/ruflo-metaharness/.claude-flow/logs/daemon.log +269 -0
- package/plugins/ruflo-metaharness/.claude-flow/logs/headless/audit_1783604774864_ozbujc_prompt.log +19 -0
- package/plugins/ruflo-metaharness/.claude-flow/logs/headless/audit_1783604774864_ozbujc_result.log +108 -0
- package/plugins/ruflo-metaharness/.claude-flow/logs/headless/audit_1783605513587_ulvmpb_prompt.log +19 -0
- package/plugins/ruflo-metaharness/.claude-flow/logs/headless/audit_1783605513587_ulvmpb_result.log +209 -0
- package/plugins/ruflo-metaharness/.claude-flow/logs/headless/audit_1783606368867_ahysui_prompt.log +19 -0
- package/plugins/ruflo-metaharness/.claude-flow/logs/headless/audit_1783606368867_ahysui_result.log +192 -0
- package/plugins/ruflo-metaharness/.claude-flow/logs/headless/audit_1783607120257_lh05rb_prompt.log +19 -0
- package/plugins/ruflo-metaharness/.claude-flow/logs/headless/audit_1783607120257_lh05rb_result.log +13 -0
- package/plugins/ruflo-metaharness/.claude-flow/logs/headless/audit_1783608020362_j3096j_prompt.log +19 -0
- package/plugins/ruflo-metaharness/.claude-flow/logs/headless/audit_1783608020362_j3096j_result.log +120 -0
- package/plugins/ruflo-metaharness/.claude-flow/logs/headless/audit_1783608776347_261b61_prompt.log +19 -0
- package/plugins/ruflo-metaharness/.claude-flow/logs/headless/audit_1783608776347_261b61_result.log +85 -0
- package/plugins/ruflo-metaharness/.claude-flow/logs/headless/audit_1783609621359_s5i6ye_prompt.log +19 -0
- package/plugins/ruflo-metaharness/.claude-flow/logs/headless/audit_1783609621359_s5i6ye_result.log +13 -0
- package/plugins/ruflo-metaharness/.claude-flow/logs/headless/audit_1783610087998_qihv9v_prompt.log +19 -0
- package/plugins/ruflo-metaharness/.claude-flow/logs/headless/audit_1783610087998_qihv9v_result.log +17 -0
- package/plugins/ruflo-metaharness/.claude-flow/logs/headless/audit_1783610773920_qlzmxo_prompt.log +19 -0
- package/plugins/ruflo-metaharness/.claude-flow/logs/headless/audit_1783610773920_qlzmxo_result.log +17 -0
- package/plugins/ruflo-metaharness/.claude-flow/logs/headless/audit_1783611376090_xpqf1z_prompt.log +19 -0
- package/plugins/ruflo-metaharness/.claude-flow/logs/headless/audit_1783611376090_xpqf1z_result.log +16 -0
- package/plugins/ruflo-metaharness/.claude-flow/logs/headless/audit_1783612097184_9rqfor_prompt.log +19 -0
- package/plugins/ruflo-metaharness/.claude-flow/logs/headless/audit_1783612097184_9rqfor_result.log +138 -0
- package/plugins/ruflo-metaharness/.claude-flow/logs/headless/audit_1783612811574_4u602j_prompt.log +19 -0
- package/plugins/ruflo-metaharness/.claude-flow/logs/headless/audit_1783612811574_4u602j_result.log +16 -0
- package/plugins/ruflo-metaharness/.claude-flow/logs/headless/audit_1783613750487_a46ttn_prompt.log +19 -0
- package/plugins/ruflo-metaharness/.claude-flow/logs/headless/audit_1783613750487_a46ttn_result.log +107 -0
- package/plugins/ruflo-metaharness/.claude-flow/logs/headless/audit_1783614289360_figwc0_prompt.log +19 -0
- package/plugins/ruflo-metaharness/.claude-flow/logs/headless/audit_1783614289360_figwc0_result.log +200 -0
- package/plugins/ruflo-metaharness/.claude-flow/logs/headless/audit_1783615067640_l7tm6a_prompt.log +19 -0
- package/plugins/ruflo-metaharness/.claude-flow/logs/headless/audit_1783615067640_l7tm6a_result.log +54 -0
- package/plugins/ruflo-metaharness/.claude-flow/logs/headless/audit_1783615825308_44nor5_prompt.log +19 -0
- package/plugins/ruflo-metaharness/.claude-flow/logs/headless/audit_1783615825308_44nor5_result.log +85 -0
- package/plugins/ruflo-metaharness/.claude-flow/logs/headless/audit_1783616524771_ut1ftw_prompt.log +19 -0
- package/plugins/ruflo-metaharness/.claude-flow/logs/headless/audit_1783616524771_ut1ftw_result.log +266 -0
- package/plugins/ruflo-metaharness/.claude-flow/logs/headless/audit_1783617323039_fs3x5a_prompt.log +19 -0
- package/plugins/ruflo-metaharness/.claude-flow/logs/headless/audit_1783617323039_fs3x5a_result.log +56 -0
- package/plugins/ruflo-metaharness/.claude-flow/logs/headless/audit_1783618049184_1f4yah_prompt.log +19 -0
- package/plugins/ruflo-metaharness/.claude-flow/logs/headless/audit_1783618049184_1f4yah_result.log +96 -0
- package/plugins/ruflo-metaharness/.claude-flow/logs/headless/audit_1783618793925_4ee7tf_prompt.log +19 -0
- package/plugins/ruflo-metaharness/.claude-flow/logs/headless/audit_1783618793925_4ee7tf_result.log +481 -0
- package/plugins/ruflo-metaharness/.claude-flow/logs/headless/audit_1783619642574_yjr4mm_prompt.log +19 -0
- package/plugins/ruflo-metaharness/.claude-flow/logs/headless/audit_1783619642574_yjr4mm_result.log +104 -0
- package/plugins/ruflo-metaharness/.claude-flow/logs/headless/audit_1783620392771_oduto0_prompt.log +19 -0
- package/plugins/ruflo-metaharness/.claude-flow/logs/headless/audit_1783620392771_oduto0_result.log +148 -0
- package/plugins/ruflo-metaharness/.claude-flow/logs/headless/audit_1783621183670_gd0p1x_prompt.log +19 -0
- package/plugins/ruflo-metaharness/.claude-flow/logs/headless/audit_1783621183670_gd0p1x_result.log +111 -0
- package/plugins/ruflo-metaharness/.claude-flow/logs/headless/audit_1783621738388_z4k48b_prompt.log +19 -0
- package/plugins/ruflo-metaharness/.claude-flow/logs/headless/audit_1783621738388_z4k48b_result.log +89 -0
- package/plugins/ruflo-metaharness/.claude-flow/logs/headless/audit_1783622493677_zwc35w_prompt.log +19 -0
- package/plugins/ruflo-metaharness/.claude-flow/logs/headless/audit_1783622493677_zwc35w_result.log +207 -0
- package/plugins/ruflo-metaharness/.claude-flow/logs/headless/optimize_1783604894861_v6n3ut_prompt.log +14 -0
- package/plugins/ruflo-metaharness/.claude-flow/logs/headless/optimize_1783604894861_v6n3ut_result.log +66 -0
- package/plugins/ruflo-metaharness/.claude-flow/logs/headless/optimize_1783605934532_9h8ikb_prompt.log +14 -0
- package/plugins/ruflo-metaharness/.claude-flow/logs/headless/optimize_1783605934532_9h8ikb_result.log +68 -0
- package/plugins/ruflo-metaharness/.claude-flow/logs/headless/optimize_1783607181736_t12f4y_prompt.log +14 -0
- package/plugins/ruflo-metaharness/.claude-flow/logs/headless/optimize_1783607181736_t12f4y_result.log +78 -0
- package/plugins/ruflo-metaharness/.claude-flow/logs/headless/optimize_1783608341266_zhk0fl_prompt.log +14 -0
- package/plugins/ruflo-metaharness/.claude-flow/logs/headless/optimize_1783608341266_zhk0fl_result.log +68 -0
- package/plugins/ruflo-metaharness/.claude-flow/logs/headless/optimize_1783609420180_7xw817_prompt.log +14 -0
- package/plugins/ruflo-metaharness/.claude-flow/logs/headless/optimize_1783609420180_7xw817_result.log +72 -0
- package/plugins/ruflo-metaharness/.claude-flow/logs/headless/optimize_1783610535307_2pxofp_prompt.log +14 -0
- package/plugins/ruflo-metaharness/.claude-flow/logs/headless/optimize_1783610535307_2pxofp_result.log +17 -0
- package/plugins/ruflo-metaharness/.claude-flow/logs/headless/optimize_1783611437445_ofwnpb_prompt.log +14 -0
- package/plugins/ruflo-metaharness/.claude-flow/logs/headless/optimize_1783611437445_ofwnpb_result.log +60 -0
- package/plugins/ruflo-metaharness/.claude-flow/logs/headless/optimize_1783612556827_1cb112_prompt.log +14 -0
- package/plugins/ruflo-metaharness/.claude-flow/logs/headless/optimize_1783612556827_1cb112_result.log +56 -0
- package/plugins/ruflo-metaharness/.claude-flow/logs/headless/optimize_1783613579531_18xiax_prompt.log +14 -0
- package/plugins/ruflo-metaharness/.claude-flow/logs/headless/optimize_1783613579531_18xiax_result.log +74 -0
- package/plugins/ruflo-metaharness/.claude-flow/logs/headless/optimize_1783614650481_2zdz7w_prompt.log +14 -0
- package/plugins/ruflo-metaharness/.claude-flow/logs/headless/optimize_1783614650481_2zdz7w_result.log +68 -0
- package/plugins/ruflo-metaharness/.claude-flow/logs/headless/optimize_1783615742328_rjj69d_prompt.log +14 -0
- package/plugins/ruflo-metaharness/.claude-flow/logs/headless/optimize_1783615742328_rjj69d_result.log +65 -0
- package/plugins/ruflo-metaharness/.claude-flow/logs/headless/optimize_1783616767230_1iad99_prompt.log +14 -0
- package/plugins/ruflo-metaharness/.claude-flow/logs/headless/optimize_1783616767230_1iad99_result.log +68 -0
- package/plugins/ruflo-metaharness/.claude-flow/logs/headless/optimize_1783617783537_rqagku_prompt.log +14 -0
- package/plugins/ruflo-metaharness/.claude-flow/logs/headless/optimize_1783617783537_rqagku_result.log +56 -0
- package/plugins/ruflo-metaharness/.claude-flow/logs/headless/optimize_1783618817343_r1lbhr_prompt.log +14 -0
- package/plugins/ruflo-metaharness/.claude-flow/logs/headless/optimize_1783618817343_r1lbhr_result.log +65 -0
- package/plugins/ruflo-metaharness/.claude-flow/logs/headless/optimize_1783619907773_8msfw3_prompt.log +14 -0
- package/plugins/ruflo-metaharness/.claude-flow/logs/headless/optimize_1783619907773_8msfw3_result.log +77 -0
- package/plugins/ruflo-metaharness/.claude-flow/logs/headless/optimize_1783621009302_hybdum_prompt.log +14 -0
- package/plugins/ruflo-metaharness/.claude-flow/logs/headless/optimize_1783621009302_hybdum_result.log +64 -0
- package/plugins/ruflo-metaharness/.claude-flow/logs/headless/optimize_1783622083681_nznpnx_prompt.log +14 -0
- package/plugins/ruflo-metaharness/.claude-flow/logs/headless/optimize_1783622083681_nznpnx_result.log +56 -0
- package/plugins/ruflo-metaharness/.claude-flow/logs/headless/optimize_1783623208340_olsbaw_prompt.log +14 -0
- package/plugins/ruflo-metaharness/.claude-flow/logs/headless/testgaps_1783605134860_9jssz9_prompt.log +14 -0
- package/plugins/ruflo-metaharness/.claude-flow/logs/headless/testgaps_1783605134860_9jssz9_result.log +69 -0
- package/plugins/ruflo-metaharness/.claude-flow/logs/headless/testgaps_1783606516743_zftbaa_prompt.log +14 -0
- package/plugins/ruflo-metaharness/.claude-flow/logs/headless/testgaps_1783606516743_zftbaa_result.log +92 -0
- package/plugins/ruflo-metaharness/.claude-flow/logs/headless/testgaps_1783608038317_jrd66e_prompt.log +14 -0
- package/plugins/ruflo-metaharness/.claude-flow/logs/headless/testgaps_1783608038317_jrd66e_result.log +92 -0
- package/plugins/ruflo-metaharness/.claude-flow/logs/headless/testgaps_1783609388416_mc3zoe_prompt.log +14 -0
- package/plugins/ruflo-metaharness/.claude-flow/logs/headless/testgaps_1783609388416_mc3zoe_result.log +82 -0
- package/plugins/ruflo-metaharness/.claude-flow/logs/headless/testgaps_1783610821384_tzqvlb_prompt.log +14 -0
- package/plugins/ruflo-metaharness/.claude-flow/logs/headless/testgaps_1783610821384_tzqvlb_result.log +17 -0
- package/plugins/ruflo-metaharness/.claude-flow/logs/headless/testgaps_1783612023285_buygpo_prompt.log +14 -0
- package/plugins/ruflo-metaharness/.claude-flow/logs/headless/testgaps_1783612023285_buygpo_result.log +57 -0
- package/plugins/ruflo-metaharness/.claude-flow/logs/headless/testgaps_1783613599301_6f78cw_prompt.log +14 -0
- package/plugins/ruflo-metaharness/.claude-flow/logs/headless/testgaps_1783613599301_6f78cw_result.log +60 -0
- package/plugins/ruflo-metaharness/.claude-flow/logs/headless/testgaps_1783615000844_v95ues_prompt.log +14 -0
- package/plugins/ruflo-metaharness/.claude-flow/logs/headless/testgaps_1783615000844_v95ues_result.log +69 -0
- package/plugins/ruflo-metaharness/.claude-flow/logs/headless/testgaps_1783616341693_bl5d9o_prompt.log +14 -0
- package/plugins/ruflo-metaharness/.claude-flow/logs/headless/testgaps_1783616341693_bl5d9o_result.log +64 -0
- package/plugins/ruflo-metaharness/.claude-flow/logs/headless/testgaps_1783617832831_ha6s8d_prompt.log +14 -0
- package/plugins/ruflo-metaharness/.claude-flow/logs/headless/testgaps_1783617832831_ha6s8d_result.log +42 -0
- package/plugins/ruflo-metaharness/.claude-flow/logs/headless/testgaps_1783619384959_s5iiwf_prompt.log +14 -0
- package/plugins/ruflo-metaharness/.claude-flow/logs/headless/testgaps_1783619384959_s5iiwf_result.log +47 -0
- package/plugins/ruflo-metaharness/.claude-flow/logs/headless/testgaps_1783620946263_d7ovai_prompt.log +14 -0
- package/plugins/ruflo-metaharness/.claude-flow/logs/headless/testgaps_1783620946263_d7ovai_result.log +52 -0
- package/plugins/ruflo-metaharness/.claude-flow/logs/headless/testgaps_1783622473846_t839e5_prompt.log +14 -0
- package/plugins/ruflo-metaharness/.claude-flow/logs/headless/testgaps_1783622473846_t839e5_result.log +96 -0
- package/plugins/ruflo-metaharness/.claude-flow/metrics/backup.json +7 -0
- package/plugins/ruflo-metaharness/.claude-flow/metrics/codebase-map.json +11 -0
- package/plugins/ruflo-metaharness/.claude-flow/metrics/consolidation.json +16 -0
- package/plugins/ruflo-metaharness/.claude-flow/metrics/harness-loop.json +83 -0
- package/plugins/ruflo-metaharness/.claude-flow/metrics/performance.json +55 -0
- package/plugins/ruflo-metaharness/.claude-flow/metrics/security-audit.json +206 -0
- package/plugins/ruflo-metaharness/.claude-flow/metrics/test-gaps.json +95 -0
- package/plugins/ruflo-metaharness/.claude-flow/neural/stats.json +6 -0
- package/plugins/ruflo-metaharness/skills/harness-gepa/SKILL.md +1 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
sha256:6141a8ea990c5063b77e090ae8f37f9c539d8aa8f58dcceb30f3a82f97e57319
|
|
@@ -1 +1 @@
|
|
|
1
|
-
3.38.
|
|
1
|
+
3.38.14
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"manifest": {
|
|
3
|
-
"version": "3.38.
|
|
3
|
+
"version": "3.38.14",
|
|
4
4
|
"files": {
|
|
5
5
|
"auto-memory-hook.mjs": "85fe05c757421c52137c0bc8545a0896bab6b4714538c2a11d1d0835bfcc8c1c",
|
|
6
6
|
"hook-handler.cjs": "dae295fb9ae2626b89899c19a20cc911541af82b52d2eeb9b214d618b96e9a86",
|
|
@@ -8,6 +8,6 @@
|
|
|
8
8
|
"statusline.cjs": "0457fe53f8cd2c56458ff178392536a5868efd1a573665fa43bc01d2d95ca677"
|
|
9
9
|
}
|
|
10
10
|
},
|
|
11
|
-
"signature": "
|
|
11
|
+
"signature": "HkAB4ZAhg/nQ7kKEyKXmCGeH+fx5op+LMEUdrjLcrVuuIxN6j9fFadcPslwN+zeOCzff+RTrU3mOBfYKJO6lDg==",
|
|
12
12
|
"algorithm": "ed25519"
|
|
13
13
|
}
|
|
File without changes
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
{
|
|
2
|
+
"adoptedAt": 1787321045267,
|
|
3
|
+
"championId": "sha256:6141a8ea990c5063b77e090ae8f37f9c539d8aa8f58dcceb30f3a82f97e57319",
|
|
4
|
+
"manifest": {
|
|
5
|
+
"schema": "ruflo.proven-config/v1",
|
|
6
|
+
"policy": {
|
|
7
|
+
"ref": "sha256:6141a8ea990c5063b77e090ae8f37f9c539d8aa8f58dcceb30f3a82f97e57319",
|
|
8
|
+
"value": {
|
|
9
|
+
"alpha": 0.3,
|
|
10
|
+
"subjectWeight": 1,
|
|
11
|
+
"mmrLambda": 0.5,
|
|
12
|
+
"bodyWeight": 1.5,
|
|
13
|
+
"typePenaltyFactor": 0.5
|
|
14
|
+
}
|
|
15
|
+
},
|
|
16
|
+
"layer": "framework/node-cli",
|
|
17
|
+
"compatibility": {
|
|
18
|
+
"ruflo": ">=3.24.0"
|
|
19
|
+
},
|
|
20
|
+
"benchmark": {
|
|
21
|
+
"corpus": "ADR-081-labelled-v1",
|
|
22
|
+
"corpusHash": "sha256:2f700b5c363e20a3bd88ce2bc9b87bbbbaa61732c6177894c6ec37890f888982"
|
|
23
|
+
},
|
|
24
|
+
"receipt": {
|
|
25
|
+
"heldOutDelta": 0.07381404928570845,
|
|
26
|
+
"redblue": "PASS",
|
|
27
|
+
"drift": 0,
|
|
28
|
+
"canary": {
|
|
29
|
+
"rollbackRate": 0,
|
|
30
|
+
"latencyP95": 244.612458000076,
|
|
31
|
+
"costPerTask": 0
|
|
32
|
+
},
|
|
33
|
+
"receiptCoverage": 1
|
|
34
|
+
},
|
|
35
|
+
"platform": [
|
|
36
|
+
"linux",
|
|
37
|
+
"macOS",
|
|
38
|
+
"windows"
|
|
39
|
+
]
|
|
40
|
+
},
|
|
41
|
+
"previous": ""
|
|
42
|
+
}
|
package/catalog-manifest.json
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
{
|
|
2
2
|
"schemaVersion": 1,
|
|
3
|
-
"generation":
|
|
4
|
-
"generatedAt": "2026-08-
|
|
5
|
-
"gitSha": "
|
|
3
|
+
"generation": 5,
|
|
4
|
+
"generatedAt": "2026-08-21T14:30:26.881Z",
|
|
5
|
+
"gitSha": "703e7741",
|
|
6
6
|
"catalog": {
|
|
7
|
-
"agents":
|
|
7
|
+
"agents": 165,
|
|
8
8
|
"tools": 397,
|
|
9
9
|
"skills": 34
|
|
10
10
|
},
|
|
@@ -1412,7 +1412,12 @@ export const hooksPostTask = {
|
|
|
1412
1412
|
const taskText = params.task || '';
|
|
1413
1413
|
const outcomeKeywords = extractKeywords(taskText);
|
|
1414
1414
|
let outcomePersisted = false;
|
|
1415
|
-
|
|
1415
|
+
// #3064 — the previous ad-hoc regex `/^[a-zA-Z0-9_-]+$/` silently dropped
|
|
1416
|
+
// colon-namespaced plugin agents (`ruflo-core:reviewer`, etc.) — i.e. every
|
|
1417
|
+
// Claude Code plugin agent. Colons are already allowed by the canonical
|
|
1418
|
+
// validateIdentifier() check on line 1456 above (IDENTIFIER_RE includes ':'
|
|
1419
|
+
// and '.'), so no additional charset gating is needed here.
|
|
1420
|
+
if (taskText && agent) {
|
|
1416
1421
|
try {
|
|
1417
1422
|
const outcomes = loadRoutingOutcomes();
|
|
1418
1423
|
outcomes.push({
|
|
@@ -936,11 +936,22 @@ export async function bridgeStoreEntry(options) {
|
|
|
936
936
|
persistWarning = `sql.js fallback driver in use — this write may not be durably persisted to disk (${msg}). Install better-sqlite3's native binding to restore durable writes (see issue #2968: npm rebuild better-sqlite3, or reinstall with install scripts enabled).`;
|
|
937
937
|
}
|
|
938
938
|
}
|
|
939
|
-
// Phase 2:
|
|
939
|
+
// Phase 2: Invalidate cache so the next read fetches the fresh row.
|
|
940
|
+
//
|
|
941
|
+
// #3051 — this used to be a write-through with a partial payload
|
|
942
|
+
// (`{ id, key, namespace, content, embedding }` — missing `tags`,
|
|
943
|
+
// access_count, timestamps, metadata, provenance_type). Any read that
|
|
944
|
+
// hit the cache then returned `tags: cached.tags || []` = `[]` for the
|
|
945
|
+
// very entry that had just been written with real tags, so
|
|
946
|
+
// `memory_store({ tags })` → `memory_retrieve()` looked like it silently
|
|
947
|
+
// dropped tags. Invalidating instead of partial-cache-set forces the
|
|
948
|
+
// next `bridgeGetEntry` to load the authoritative row (which correctly
|
|
949
|
+
// parses tags/metadata from the JSON columns) and repopulate the cache
|
|
950
|
+
// from that full shape.
|
|
940
951
|
const safeNs = String(namespace).replace(/:/g, '_');
|
|
941
952
|
const safeKey = String(key).replace(/:/g, '_');
|
|
942
953
|
const cacheKey = `entry:${safeNs}:${safeKey}`;
|
|
943
|
-
await
|
|
954
|
+
await cacheInvalidate(registry, cacheKey);
|
|
944
955
|
// Phase 4: AttestationLog write audit
|
|
945
956
|
await logAttestation(registry, 'store', id, { key, namespace, hasEmbedding: !!embeddingJson });
|
|
946
957
|
return {
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/** Default package name (ruvnet WASM convention); override with RUFLO_LATTICE_WASM_PKG. */
|
|
2
|
+
export declare const LATTICE_WASM_PKG: string;
|
|
3
|
+
export type LatticeModel = 'minilm' | 'bge' | 'paraphrase-minilm' | 'qwen3-0.6b' | string;
|
|
4
|
+
export declare const DEFAULT_LATTICE_MODEL: LatticeModel;
|
|
5
|
+
/** Is the Lattice WASM embedder installed + initializable? Cached; never throws. */
|
|
6
|
+
export declare function latticeAvailable(): Promise<boolean>;
|
|
7
|
+
/** The models Lattice reports (empty until availability is probed). */
|
|
8
|
+
export declare function latticeModels(): LatticeModel[];
|
|
9
|
+
/**
|
|
10
|
+
* Embed `text` with `model` via Lattice WASM. Returns null on any failure so the
|
|
11
|
+
* caller can fall through to the next tier. Never throws.
|
|
12
|
+
*/
|
|
13
|
+
export declare function latticeEmbed(text: string, model?: LatticeModel): Promise<number[] | null>;
|
|
14
|
+
//# sourceMappingURL=lattice-wasm.d.ts.map
|
|
@@ -0,0 +1,144 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Lattice WASM embedder adapter — the primary embedding tier (ADR: embedding
|
|
3
|
+
* substrate upgrade). Replaces hash placeholders with real semantic embeddings
|
|
4
|
+
* and adds multiple models (miniLM, bge, multi-paraphrase-miniLM, GPU qwen3-0.6B).
|
|
5
|
+
*
|
|
6
|
+
* Built on the proven `@ruvector/ruvllm-wasm` optional-dependency convention:
|
|
7
|
+
* - dynamically imported (never a hard dependency),
|
|
8
|
+
* - WASM initialized from bundled bytes,
|
|
9
|
+
* - fully FAIL-CLOSED: if the package is absent, the WASM fails to init, or the
|
|
10
|
+
* embed API differs, `latticeAvailable()` returns false and callers fall
|
|
11
|
+
* through to the existing ruvector-ONNX → hash tiers with ZERO regression.
|
|
12
|
+
*
|
|
13
|
+
* The package specifier is configurable (`RUFLO_LATTICE_WASM_PKG`) so the exact
|
|
14
|
+
* published name can be set without a code change; the API is probed tolerantly.
|
|
15
|
+
* Opt-in for the GPU model: qwen3 is only selected when explicitly requested.
|
|
16
|
+
*/
|
|
17
|
+
import { createRequire } from 'module';
|
|
18
|
+
import { readFileSync } from 'fs';
|
|
19
|
+
const require_ = createRequire(import.meta.url);
|
|
20
|
+
/** Default package name (ruvnet WASM convention); override with RUFLO_LATTICE_WASM_PKG. */
|
|
21
|
+
export const LATTICE_WASM_PKG = process.env.RUFLO_LATTICE_WASM_PKG || '@ruvector/lattice-wasm';
|
|
22
|
+
export const DEFAULT_LATTICE_MODEL = process.env.RUFLO_EMBED_MODEL || 'minilm';
|
|
23
|
+
/* eslint-disable @typescript-eslint/no-explicit-any */
|
|
24
|
+
let _mod = null;
|
|
25
|
+
let _ready = false;
|
|
26
|
+
let _probed = false;
|
|
27
|
+
let _available = false;
|
|
28
|
+
let _models = [];
|
|
29
|
+
async function loadModule() {
|
|
30
|
+
if (_mod)
|
|
31
|
+
return _mod;
|
|
32
|
+
const spec = LATTICE_WASM_PKG;
|
|
33
|
+
_mod = await import(spec).catch(() => null); // optional — absent ⇒ null ⇒ unavailable
|
|
34
|
+
return _mod;
|
|
35
|
+
}
|
|
36
|
+
async function ensureInit() {
|
|
37
|
+
if (_ready)
|
|
38
|
+
return true;
|
|
39
|
+
const mod = await loadModule();
|
|
40
|
+
if (!mod)
|
|
41
|
+
return false;
|
|
42
|
+
try {
|
|
43
|
+
// ruvnet WASM convention: initSync({ module: <wasm bytes> }); tolerate variants.
|
|
44
|
+
if (!_ready && typeof mod.initSync === 'function') {
|
|
45
|
+
let wasmBytes;
|
|
46
|
+
for (const cand of ['lattice_wasm_bg.wasm', 'lattice_bg.wasm', 'index_bg.wasm']) {
|
|
47
|
+
try {
|
|
48
|
+
wasmBytes = readFileSync(require_.resolve(`${LATTICE_WASM_PKG}/${cand}`));
|
|
49
|
+
break;
|
|
50
|
+
}
|
|
51
|
+
catch { /* try next */ }
|
|
52
|
+
}
|
|
53
|
+
mod.initSync(wasmBytes ? { module: wasmBytes } : undefined);
|
|
54
|
+
}
|
|
55
|
+
else if (typeof mod.default === 'function') {
|
|
56
|
+
await mod.default(); // some wasm-bindgen builds export an async default init
|
|
57
|
+
}
|
|
58
|
+
_ready = true;
|
|
59
|
+
return true;
|
|
60
|
+
}
|
|
61
|
+
catch {
|
|
62
|
+
return false; // init failed ⇒ fail closed
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
/** Extract a plain number[] from whatever shape the module's embed returns. */
|
|
66
|
+
function toVec(r) {
|
|
67
|
+
const v = (r && typeof r === 'object' && 'embedding' in r) ? r.embedding : r;
|
|
68
|
+
if (!v)
|
|
69
|
+
return null;
|
|
70
|
+
if (Array.isArray(v))
|
|
71
|
+
return v;
|
|
72
|
+
if (v.length !== undefined)
|
|
73
|
+
return Array.from(v);
|
|
74
|
+
return null;
|
|
75
|
+
}
|
|
76
|
+
/** Is the Lattice WASM embedder installed + initializable? Cached; never throws. */
|
|
77
|
+
export async function latticeAvailable() {
|
|
78
|
+
if (_probed)
|
|
79
|
+
return _available;
|
|
80
|
+
_probed = true;
|
|
81
|
+
try {
|
|
82
|
+
if (!(await ensureInit())) {
|
|
83
|
+
_available = false;
|
|
84
|
+
return false;
|
|
85
|
+
}
|
|
86
|
+
const mod = _mod;
|
|
87
|
+
// discover models (tolerant): listModels() / models / MODELS
|
|
88
|
+
try {
|
|
89
|
+
const list = typeof mod.listModels === 'function' ? mod.listModels() : (mod.models ?? mod.MODELS);
|
|
90
|
+
if (Array.isArray(list) && list.length)
|
|
91
|
+
_models = list;
|
|
92
|
+
}
|
|
93
|
+
catch { /* leave default */ }
|
|
94
|
+
if (!_models.length)
|
|
95
|
+
_models = [DEFAULT_LATTICE_MODEL];
|
|
96
|
+
// verify an actual embed succeeds (the ADR-086 "loads but runtime-fails" trap).
|
|
97
|
+
const probe = await latticeEmbedRaw('probe', DEFAULT_LATTICE_MODEL);
|
|
98
|
+
_available = !!probe && probe.length > 0;
|
|
99
|
+
return _available;
|
|
100
|
+
}
|
|
101
|
+
catch {
|
|
102
|
+
_available = false;
|
|
103
|
+
return false;
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
/** The models Lattice reports (empty until availability is probed). */
|
|
107
|
+
export function latticeModels() { return [..._models]; }
|
|
108
|
+
async function latticeEmbedRaw(text, model) {
|
|
109
|
+
const mod = _mod;
|
|
110
|
+
if (!mod)
|
|
111
|
+
return null;
|
|
112
|
+
// tolerant API probing across plausible wasm-bindgen surfaces.
|
|
113
|
+
const attempts = [
|
|
114
|
+
() => typeof mod.embed === 'function' ? mod.embed(text, model) : undefined,
|
|
115
|
+
() => typeof mod.embed === 'function' ? mod.embed(text) : undefined,
|
|
116
|
+
() => typeof mod.embedText === 'function' ? mod.embedText(text, model) : undefined,
|
|
117
|
+
() => typeof mod.Embedder === 'function' ? new mod.Embedder(model).embed(text) : undefined,
|
|
118
|
+
];
|
|
119
|
+
for (const a of attempts) {
|
|
120
|
+
try {
|
|
121
|
+
const r = await a();
|
|
122
|
+
const v = toVec(r);
|
|
123
|
+
if (v)
|
|
124
|
+
return v;
|
|
125
|
+
}
|
|
126
|
+
catch { /* try next surface */ }
|
|
127
|
+
}
|
|
128
|
+
return null;
|
|
129
|
+
}
|
|
130
|
+
/**
|
|
131
|
+
* Embed `text` with `model` via Lattice WASM. Returns null on any failure so the
|
|
132
|
+
* caller can fall through to the next tier. Never throws.
|
|
133
|
+
*/
|
|
134
|
+
export async function latticeEmbed(text, model = DEFAULT_LATTICE_MODEL) {
|
|
135
|
+
try {
|
|
136
|
+
if (!(await latticeAvailable()))
|
|
137
|
+
return null;
|
|
138
|
+
return await latticeEmbedRaw(text, model);
|
|
139
|
+
}
|
|
140
|
+
catch {
|
|
141
|
+
return null;
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
//# sourceMappingURL=lattice-wasm.js.map
|
|
@@ -123,6 +123,16 @@ export interface CreateReceiptInput {
|
|
|
123
123
|
publicKeyPem?: string;
|
|
124
124
|
bootstrapIterations?: number;
|
|
125
125
|
}
|
|
126
|
+
/** Names present on `value` that the contract does not define, as `unknown field: <path>`. */
|
|
127
|
+
export declare function collectUnknownFields(value: unknown, allowed: readonly string[], path: string): string[];
|
|
128
|
+
/**
|
|
129
|
+
* ADR-322C: unknown fields fail verification for a given schema version.
|
|
130
|
+
* Enforced here rather than delegated to out-of-band schema validation, because
|
|
131
|
+
* a signature is valid over whatever the producer canonicalized — including
|
|
132
|
+
* fields the contract never defined — so a permissive verifier lets a producer
|
|
133
|
+
* attach arbitrary signed data that still verifies cleanly.
|
|
134
|
+
*/
|
|
135
|
+
export declare function collectUnknownReceiptFields(receipt: FlywheelEvaluationReceipt): string[];
|
|
126
136
|
/**
|
|
127
137
|
* RFC-8785-compatible for the JSON domain accepted above: ECMAScript primitive
|
|
128
138
|
* serialization plus recursively sorted UTF-16 property names.
|
|
@@ -11,6 +11,72 @@ import { checkPairedOutcomesConsistency } from './flywheel-sequential-evidence.j
|
|
|
11
11
|
export const RECEIPT_SCHEMA = 'ruflo.flywheel-receipt/v1';
|
|
12
12
|
export const RECEIPT_DOMAIN = 'ruflo/flywheel-receipt/v1';
|
|
13
13
|
export const GENESIS_LEDGER_HEAD = `sha256:${'0'.repeat(64)}`;
|
|
14
|
+
/**
|
|
15
|
+
* Closed field sets for ADR-322C strict verification. Three objects stay open by
|
|
16
|
+
* contract: `candidatePolicy` is owned by `policySchemaVersion`, `gates` is a
|
|
17
|
+
* caller-named term map, and `evidence.verification` / `evidence.canary` carry
|
|
18
|
+
* evidence-specific payloads.
|
|
19
|
+
*/
|
|
20
|
+
const RECEIPT_FIELDS = {
|
|
21
|
+
root: ['payload', 'signature'],
|
|
22
|
+
payload: [
|
|
23
|
+
'schemaVersion', 'receiptId', 'lineageId', 'candidateId', 'evaluationRunId',
|
|
24
|
+
'baselineRef', 'expectedLedgerHead', 'candidatePolicy', 'gateVersion',
|
|
25
|
+
'policySchemaVersion', 'safetyEnvelopeRef', 'anchorRef', 'requestedProposer',
|
|
26
|
+
'effectiveProposer', 'proposerSubstitution', 'corpusVersion', 'corpusHash',
|
|
27
|
+
'baselineScore', 'candidateScore', 'heldOutDeltas', 'pairedOutcomes',
|
|
28
|
+
'statistics', 'gates', 'resourceEvidence', 'evidence', 'termVerification',
|
|
29
|
+
'decision', 'issuedAt', 'expiresAt',
|
|
30
|
+
],
|
|
31
|
+
signature: ['algorithm', 'domain', 'publicKeyPem', 'signatureBase64'],
|
|
32
|
+
statistics: [
|
|
33
|
+
'ruleVersion', 'relativeLift', 'pairedBootstrapProbability',
|
|
34
|
+
'pairedBootstrapDeltaCILow95', 'frozenAnchorRegression', 'iterations',
|
|
35
|
+
'seedHex', 'significant', 'accepted',
|
|
36
|
+
],
|
|
37
|
+
resourceEvidence: [
|
|
38
|
+
'p95LatencyMicros', 'costMicrosPerTask', 'tokensPerTask', 'failureRate',
|
|
39
|
+
'evaluationCostMicros', 'energyMicrojoules', 'currency',
|
|
40
|
+
],
|
|
41
|
+
evidence: ['corpusRoles', 'verification', 'canary'],
|
|
42
|
+
corpusRoles: ['selectionTaskIds', 'promotionHoldoutTaskIds', 'guardTaskIds'],
|
|
43
|
+
pairedOutcome: ['taskId', 'baselineScore', 'candidateScore'],
|
|
44
|
+
termVerification: ['term', 'verification', 'evidenceRef', 'attestor'],
|
|
45
|
+
};
|
|
46
|
+
/** Names present on `value` that the contract does not define, as `unknown field: <path>`. */
|
|
47
|
+
export function collectUnknownFields(value, allowed, path) {
|
|
48
|
+
if (!value || typeof value !== 'object' || Array.isArray(value))
|
|
49
|
+
return [];
|
|
50
|
+
return Object.keys(value)
|
|
51
|
+
.filter((key) => !allowed.includes(key))
|
|
52
|
+
.map((key) => `unknown field: ${path}.${key}`);
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* ADR-322C: unknown fields fail verification for a given schema version.
|
|
56
|
+
* Enforced here rather than delegated to out-of-band schema validation, because
|
|
57
|
+
* a signature is valid over whatever the producer canonicalized — including
|
|
58
|
+
* fields the contract never defined — so a permissive verifier lets a producer
|
|
59
|
+
* attach arbitrary signed data that still verifies cleanly.
|
|
60
|
+
*/
|
|
61
|
+
export function collectUnknownReceiptFields(receipt) {
|
|
62
|
+
const errors = collectUnknownFields(receipt, RECEIPT_FIELDS.root, 'receipt');
|
|
63
|
+
const payload = receipt.payload;
|
|
64
|
+
if (!payload || typeof payload !== 'object')
|
|
65
|
+
return errors;
|
|
66
|
+
const evidence = payload.evidence;
|
|
67
|
+
errors.push(...collectUnknownFields(payload, RECEIPT_FIELDS.payload, 'payload'), ...collectUnknownFields(receipt.signature, RECEIPT_FIELDS.signature, 'signature'), ...collectUnknownFields(payload.statistics, RECEIPT_FIELDS.statistics, 'payload.statistics'), ...collectUnknownFields(payload.resourceEvidence, RECEIPT_FIELDS.resourceEvidence, 'payload.resourceEvidence'), ...collectUnknownFields(evidence, RECEIPT_FIELDS.evidence, 'payload.evidence'), ...collectUnknownFields(evidence?.corpusRoles, RECEIPT_FIELDS.corpusRoles, 'payload.evidence.corpusRoles'));
|
|
68
|
+
if (Array.isArray(payload.pairedOutcomes)) {
|
|
69
|
+
payload.pairedOutcomes.forEach((outcome, i) => {
|
|
70
|
+
errors.push(...collectUnknownFields(outcome, RECEIPT_FIELDS.pairedOutcome, `payload.pairedOutcomes[${i}]`));
|
|
71
|
+
});
|
|
72
|
+
}
|
|
73
|
+
if (Array.isArray(payload.termVerification)) {
|
|
74
|
+
payload.termVerification.forEach((term, i) => {
|
|
75
|
+
errors.push(...collectUnknownFields(term, RECEIPT_FIELDS.termVerification, `payload.termVerification[${i}]`));
|
|
76
|
+
});
|
|
77
|
+
}
|
|
78
|
+
return errors;
|
|
79
|
+
}
|
|
14
80
|
function assertJsonValue(value, path = '$') {
|
|
15
81
|
if (value === null || typeof value === 'string' || typeof value === 'boolean')
|
|
16
82
|
return;
|
|
@@ -184,11 +250,19 @@ export function createFlywheelReceipt(input) {
|
|
|
184
250
|
const evaluationRunId = input.evaluationRunId ?? uuidV7(now);
|
|
185
251
|
const lineageId = input.lineageId ?? uuidV7(now);
|
|
186
252
|
const candidateId = policyCandidateId(input.candidatePolicy);
|
|
253
|
+
// Verifiers recompute the statistics from the payload's scale-12 decimal
|
|
254
|
+
// strings — the only values they ever have. The encoded values are therefore
|
|
255
|
+
// the statistical inputs of record: compute the decision from them, not from
|
|
256
|
+
// full-precision intermediates, or any input that does not terminate within
|
|
257
|
+
// twelve decimals produces an honest receipt that fails its own verification.
|
|
258
|
+
const encodedBaselineScore = decimal(input.baselineScore);
|
|
259
|
+
const encodedCandidateScore = decimal(input.candidateScore);
|
|
260
|
+
const encodedHeldOutDeltas = input.heldOutDeltas.map((v) => decimal(v));
|
|
187
261
|
const statistics = computePromotionStatistics({
|
|
188
|
-
baselineScore:
|
|
189
|
-
candidateScore:
|
|
190
|
-
heldOutDeltas:
|
|
191
|
-
frozenAnchorRegression: input.frozenAnchorRegression,
|
|
262
|
+
baselineScore: Number(encodedBaselineScore),
|
|
263
|
+
candidateScore: Number(encodedCandidateScore),
|
|
264
|
+
heldOutDeltas: encodedHeldOutDeltas.map(Number),
|
|
265
|
+
frozenAnchorRegression: Number(decimal(input.frozenAnchorRegression)),
|
|
192
266
|
corpusHash: input.corpusHash,
|
|
193
267
|
candidateId,
|
|
194
268
|
baselineRef: input.baselineRef,
|
|
@@ -213,9 +287,9 @@ export function createFlywheelReceipt(input) {
|
|
|
213
287
|
...(input.proposerSubstitution ? { proposerSubstitution: input.proposerSubstitution } : {}),
|
|
214
288
|
corpusVersion: input.corpusVersion,
|
|
215
289
|
corpusHash: input.corpusHash,
|
|
216
|
-
baselineScore:
|
|
217
|
-
candidateScore:
|
|
218
|
-
heldOutDeltas:
|
|
290
|
+
baselineScore: encodedBaselineScore,
|
|
291
|
+
candidateScore: encodedCandidateScore,
|
|
292
|
+
heldOutDeltas: encodedHeldOutDeltas,
|
|
219
293
|
...(input.pairedOutcomes
|
|
220
294
|
? {
|
|
221
295
|
pairedOutcomes: input.pairedOutcomes.map((o) => ({
|
|
@@ -272,6 +346,7 @@ export function verifyFlywheelReceipt(receipt, trustedPublicKeys) {
|
|
|
272
346
|
try {
|
|
273
347
|
if (receipt.payload.schemaVersion !== RECEIPT_SCHEMA)
|
|
274
348
|
errors.push('unsupported receipt schema');
|
|
349
|
+
errors.push(...collectUnknownReceiptFields(receipt));
|
|
275
350
|
const { receiptId: _receiptId, ...base } = receipt.payload;
|
|
276
351
|
const expectedId = sha256Ref(canonicalizeJcs(receiptIdentityPayload(base)));
|
|
277
352
|
if (expectedId !== receipt.payload.receiptId)
|
|
@@ -9,7 +9,7 @@
|
|
|
9
9
|
import * as fs from 'node:fs';
|
|
10
10
|
import * as path from 'node:path';
|
|
11
11
|
import { applyChampionParams } from '../config/harness-feedback-applier.js';
|
|
12
|
-
import { GENESIS_LEDGER_HEAD, canonicalizeJcs, sha256Ref, uuidV7, verifyFlywheelReceipt, } from './flywheel-receipt.js';
|
|
12
|
+
import { GENESIS_LEDGER_HEAD, canonicalizeJcs, collectUnknownFields, sha256Ref, uuidV7, verifyFlywheelReceipt, } from './flywheel-receipt.js';
|
|
13
13
|
import { DEFAULT_ALPHA_TOTAL, DEFAULT_LAMBDA, minInformativePairsToClear, sequentialEvidenceVerdict, } from './flywheel-sequential-evidence.js';
|
|
14
14
|
const STATE_VERSION = 1;
|
|
15
15
|
const STATE_DIR = ['.claude-flow', 'flywheel-v1'];
|
|
@@ -18,6 +18,11 @@ const LOCK_FILE = 'transaction-state.lock';
|
|
|
18
18
|
const RECEIPTS_DIR = 'receipts';
|
|
19
19
|
const LOCK_TIMEOUT_MS = 10_000;
|
|
20
20
|
const LOCK_STALE_MS = 60_000;
|
|
21
|
+
const COMMIT_FIELDS = [
|
|
22
|
+
'commitId', 'transactionId', 'receiptId', 'lineageId', 'sequence',
|
|
23
|
+
'previousLedgerHead', 'baselineRef', 'candidateId', 'servingEpoch',
|
|
24
|
+
'proposer', 'proposerSubstitution', 'promotedAt',
|
|
25
|
+
];
|
|
21
26
|
const delay = (ms) => new Promise((resolve) => setTimeout(resolve, ms));
|
|
22
27
|
function stateDir(root) {
|
|
23
28
|
return path.join(root, ...STATE_DIR);
|
|
@@ -481,6 +486,10 @@ export function verifyFlywheelLedger(root) {
|
|
|
481
486
|
for (let i = 0; i < state.commits.length; i++) {
|
|
482
487
|
const commit = state.commits[i];
|
|
483
488
|
const { commitId, ...core } = commit;
|
|
489
|
+
// Same ADR-322C strictness as the receipt path: a commit hashes consistently
|
|
490
|
+
// over whatever fields it carries, so an undefined field would otherwise
|
|
491
|
+
// chain cleanly (ruflo#3068).
|
|
492
|
+
errors.push(...collectUnknownFields(commit, COMMIT_FIELDS, `commits[${i}]`));
|
|
484
493
|
if (commit.sequence !== i + 1)
|
|
485
494
|
errors.push(`sequence mismatch at ${i + 1}`);
|
|
486
495
|
if (commit.previousLedgerHead !== head)
|
|
File without changes
|
|
File without changes
|
|
@@ -159,14 +159,14 @@ export declare const SpawnAgentSchema: z.ZodObject<{
|
|
|
159
159
|
timeout: z.ZodOptional<z.ZodNumber>;
|
|
160
160
|
}, "strip", z.ZodTypeAny, {
|
|
161
161
|
type: "coder" | "reviewer" | "tester" | "planner" | "researcher" | "security-architect" | "security-auditor" | "memory-specialist" | "swarm-specialist" | "integration-architect" | "performance-engineer" | "core-architect" | "test-architect" | "queen-coordinator" | "project-coordinator";
|
|
162
|
+
id?: string | undefined;
|
|
162
163
|
config?: Record<string, unknown> | undefined;
|
|
163
164
|
timeout?: number | undefined;
|
|
164
|
-
id?: string | undefined;
|
|
165
165
|
}, {
|
|
166
166
|
type: "coder" | "reviewer" | "tester" | "planner" | "researcher" | "security-architect" | "security-auditor" | "memory-specialist" | "swarm-specialist" | "integration-architect" | "performance-engineer" | "core-architect" | "test-architect" | "queen-coordinator" | "project-coordinator";
|
|
167
|
+
id?: string | undefined;
|
|
167
168
|
config?: Record<string, unknown> | undefined;
|
|
168
169
|
timeout?: number | undefined;
|
|
169
|
-
id?: string | undefined;
|
|
170
170
|
}>;
|
|
171
171
|
/**
|
|
172
172
|
* Task input schema
|
|
@@ -181,13 +181,13 @@ export declare const TaskInputSchema: z.ZodObject<{
|
|
|
181
181
|
taskId: string;
|
|
182
182
|
content: string;
|
|
183
183
|
agentType: "coder" | "reviewer" | "tester" | "planner" | "researcher" | "security-architect" | "security-auditor" | "memory-specialist" | "swarm-specialist" | "integration-architect" | "performance-engineer" | "core-architect" | "test-architect" | "queen-coordinator" | "project-coordinator";
|
|
184
|
-
priority?: "
|
|
184
|
+
priority?: "low" | "medium" | "high" | "critical" | undefined;
|
|
185
185
|
metadata?: Record<string, unknown> | undefined;
|
|
186
186
|
}, {
|
|
187
187
|
taskId: string;
|
|
188
188
|
content: string;
|
|
189
189
|
agentType: "coder" | "reviewer" | "tester" | "planner" | "researcher" | "security-architect" | "security-auditor" | "memory-specialist" | "swarm-specialist" | "integration-architect" | "performance-engineer" | "core-architect" | "test-architect" | "queen-coordinator" | "project-coordinator";
|
|
190
|
-
priority?: "
|
|
190
|
+
priority?: "low" | "medium" | "high" | "critical" | undefined;
|
|
191
191
|
metadata?: Record<string, unknown> | undefined;
|
|
192
192
|
}>;
|
|
193
193
|
/**
|
|
@@ -234,16 +234,16 @@ export declare const ExecutorConfigSchema: z.ZodObject<{
|
|
|
234
234
|
cwd: z.ZodOptional<z.ZodEffects<z.ZodEffects<z.ZodString, string, string>, string, string>>;
|
|
235
235
|
allowSudo: z.ZodDefault<z.ZodBoolean>;
|
|
236
236
|
}, "strip", z.ZodTypeAny, {
|
|
237
|
-
allowedCommands: string[];
|
|
238
237
|
timeout: number;
|
|
238
|
+
allowedCommands: string[];
|
|
239
239
|
maxBuffer: number;
|
|
240
240
|
allowSudo: boolean;
|
|
241
241
|
blockedPatterns?: string[] | undefined;
|
|
242
242
|
cwd?: string | undefined;
|
|
243
243
|
}, {
|
|
244
244
|
allowedCommands: string[];
|
|
245
|
-
blockedPatterns?: string[] | undefined;
|
|
246
245
|
timeout?: number | undefined;
|
|
246
|
+
blockedPatterns?: string[] | undefined;
|
|
247
247
|
maxBuffer?: number | undefined;
|
|
248
248
|
cwd?: string | undefined;
|
|
249
249
|
allowSudo?: boolean | undefined;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@claude-flow/cli",
|
|
3
|
-
"version": "3.38.
|
|
3
|
+
"version": "3.38.14",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"description": "Ruflo CLI - Enterprise AI agent orchestration with 60+ specialized agents, swarm coordination, MCP server, self-learning hooks, and vector memory for Claude Code",
|
|
6
6
|
"main": "dist/src/index.js",
|