@claude-flow/cli 3.38.19 → 3.38.21

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.
Files changed (139) hide show
  1. package/.claude/helpers/.helpers-version +1 -1
  2. package/.claude/helpers/helpers.manifest.json +3 -3
  3. package/.claude/helpers/statusline.cjs +71 -4
  4. package/catalog-manifest.json +4 -4
  5. package/dist/src/commands/proxy-lifecycle.js +6 -5
  6. package/dist/src/log-filters.d.ts +3 -3
  7. package/dist/src/memory/memory-initializer.js +28 -8
  8. package/dist/src/proxy/activation.d.ts +14 -0
  9. package/dist/src/proxy/activation.js +210 -0
  10. package/dist/src/proxy/install.js +3 -0
  11. package/dist/src/proxy/paths.d.ts +2 -0
  12. package/dist/src/proxy/paths.js +4 -0
  13. package/node_modules/@claude-flow/security/dist/input-validator.d.ts +6 -6
  14. package/package.json +1 -1
  15. package/dist/src/ruvector/lattice-wasm.d.ts +0 -14
  16. package/dist/src/ruvector/lattice-wasm.js +0 -144
  17. package/plugins/ruflo-metaharness/.claude-flow/daemon-state.json +0 -178
  18. package/plugins/ruflo-metaharness/.claude-flow/daemon.pid +0 -1
  19. package/plugins/ruflo-metaharness/.claude-flow/data/pending-insights.jsonl +0 -5
  20. package/plugins/ruflo-metaharness/.claude-flow/logs/daemon.log +0 -269
  21. package/plugins/ruflo-metaharness/.claude-flow/logs/headless/audit_1783604774864_ozbujc_prompt.log +0 -19
  22. package/plugins/ruflo-metaharness/.claude-flow/logs/headless/audit_1783604774864_ozbujc_result.log +0 -108
  23. package/plugins/ruflo-metaharness/.claude-flow/logs/headless/audit_1783605513587_ulvmpb_prompt.log +0 -19
  24. package/plugins/ruflo-metaharness/.claude-flow/logs/headless/audit_1783605513587_ulvmpb_result.log +0 -209
  25. package/plugins/ruflo-metaharness/.claude-flow/logs/headless/audit_1783606368867_ahysui_prompt.log +0 -19
  26. package/plugins/ruflo-metaharness/.claude-flow/logs/headless/audit_1783606368867_ahysui_result.log +0 -192
  27. package/plugins/ruflo-metaharness/.claude-flow/logs/headless/audit_1783607120257_lh05rb_prompt.log +0 -19
  28. package/plugins/ruflo-metaharness/.claude-flow/logs/headless/audit_1783607120257_lh05rb_result.log +0 -13
  29. package/plugins/ruflo-metaharness/.claude-flow/logs/headless/audit_1783608020362_j3096j_prompt.log +0 -19
  30. package/plugins/ruflo-metaharness/.claude-flow/logs/headless/audit_1783608020362_j3096j_result.log +0 -120
  31. package/plugins/ruflo-metaharness/.claude-flow/logs/headless/audit_1783608776347_261b61_prompt.log +0 -19
  32. package/plugins/ruflo-metaharness/.claude-flow/logs/headless/audit_1783608776347_261b61_result.log +0 -85
  33. package/plugins/ruflo-metaharness/.claude-flow/logs/headless/audit_1783609621359_s5i6ye_prompt.log +0 -19
  34. package/plugins/ruflo-metaharness/.claude-flow/logs/headless/audit_1783609621359_s5i6ye_result.log +0 -13
  35. package/plugins/ruflo-metaharness/.claude-flow/logs/headless/audit_1783610087998_qihv9v_prompt.log +0 -19
  36. package/plugins/ruflo-metaharness/.claude-flow/logs/headless/audit_1783610087998_qihv9v_result.log +0 -17
  37. package/plugins/ruflo-metaharness/.claude-flow/logs/headless/audit_1783610773920_qlzmxo_prompt.log +0 -19
  38. package/plugins/ruflo-metaharness/.claude-flow/logs/headless/audit_1783610773920_qlzmxo_result.log +0 -17
  39. package/plugins/ruflo-metaharness/.claude-flow/logs/headless/audit_1783611376090_xpqf1z_prompt.log +0 -19
  40. package/plugins/ruflo-metaharness/.claude-flow/logs/headless/audit_1783611376090_xpqf1z_result.log +0 -16
  41. package/plugins/ruflo-metaharness/.claude-flow/logs/headless/audit_1783612097184_9rqfor_prompt.log +0 -19
  42. package/plugins/ruflo-metaharness/.claude-flow/logs/headless/audit_1783612097184_9rqfor_result.log +0 -138
  43. package/plugins/ruflo-metaharness/.claude-flow/logs/headless/audit_1783612811574_4u602j_prompt.log +0 -19
  44. package/plugins/ruflo-metaharness/.claude-flow/logs/headless/audit_1783612811574_4u602j_result.log +0 -16
  45. package/plugins/ruflo-metaharness/.claude-flow/logs/headless/audit_1783613750487_a46ttn_prompt.log +0 -19
  46. package/plugins/ruflo-metaharness/.claude-flow/logs/headless/audit_1783613750487_a46ttn_result.log +0 -107
  47. package/plugins/ruflo-metaharness/.claude-flow/logs/headless/audit_1783614289360_figwc0_prompt.log +0 -19
  48. package/plugins/ruflo-metaharness/.claude-flow/logs/headless/audit_1783614289360_figwc0_result.log +0 -200
  49. package/plugins/ruflo-metaharness/.claude-flow/logs/headless/audit_1783615067640_l7tm6a_prompt.log +0 -19
  50. package/plugins/ruflo-metaharness/.claude-flow/logs/headless/audit_1783615067640_l7tm6a_result.log +0 -54
  51. package/plugins/ruflo-metaharness/.claude-flow/logs/headless/audit_1783615825308_44nor5_prompt.log +0 -19
  52. package/plugins/ruflo-metaharness/.claude-flow/logs/headless/audit_1783615825308_44nor5_result.log +0 -85
  53. package/plugins/ruflo-metaharness/.claude-flow/logs/headless/audit_1783616524771_ut1ftw_prompt.log +0 -19
  54. package/plugins/ruflo-metaharness/.claude-flow/logs/headless/audit_1783616524771_ut1ftw_result.log +0 -266
  55. package/plugins/ruflo-metaharness/.claude-flow/logs/headless/audit_1783617323039_fs3x5a_prompt.log +0 -19
  56. package/plugins/ruflo-metaharness/.claude-flow/logs/headless/audit_1783617323039_fs3x5a_result.log +0 -56
  57. package/plugins/ruflo-metaharness/.claude-flow/logs/headless/audit_1783618049184_1f4yah_prompt.log +0 -19
  58. package/plugins/ruflo-metaharness/.claude-flow/logs/headless/audit_1783618049184_1f4yah_result.log +0 -96
  59. package/plugins/ruflo-metaharness/.claude-flow/logs/headless/audit_1783618793925_4ee7tf_prompt.log +0 -19
  60. package/plugins/ruflo-metaharness/.claude-flow/logs/headless/audit_1783618793925_4ee7tf_result.log +0 -481
  61. package/plugins/ruflo-metaharness/.claude-flow/logs/headless/audit_1783619642574_yjr4mm_prompt.log +0 -19
  62. package/plugins/ruflo-metaharness/.claude-flow/logs/headless/audit_1783619642574_yjr4mm_result.log +0 -104
  63. package/plugins/ruflo-metaharness/.claude-flow/logs/headless/audit_1783620392771_oduto0_prompt.log +0 -19
  64. package/plugins/ruflo-metaharness/.claude-flow/logs/headless/audit_1783620392771_oduto0_result.log +0 -148
  65. package/plugins/ruflo-metaharness/.claude-flow/logs/headless/audit_1783621183670_gd0p1x_prompt.log +0 -19
  66. package/plugins/ruflo-metaharness/.claude-flow/logs/headless/audit_1783621183670_gd0p1x_result.log +0 -111
  67. package/plugins/ruflo-metaharness/.claude-flow/logs/headless/audit_1783621738388_z4k48b_prompt.log +0 -19
  68. package/plugins/ruflo-metaharness/.claude-flow/logs/headless/audit_1783621738388_z4k48b_result.log +0 -89
  69. package/plugins/ruflo-metaharness/.claude-flow/logs/headless/audit_1783622493677_zwc35w_prompt.log +0 -19
  70. package/plugins/ruflo-metaharness/.claude-flow/logs/headless/audit_1783622493677_zwc35w_result.log +0 -207
  71. package/plugins/ruflo-metaharness/.claude-flow/logs/headless/optimize_1783604894861_v6n3ut_prompt.log +0 -14
  72. package/plugins/ruflo-metaharness/.claude-flow/logs/headless/optimize_1783604894861_v6n3ut_result.log +0 -66
  73. package/plugins/ruflo-metaharness/.claude-flow/logs/headless/optimize_1783605934532_9h8ikb_prompt.log +0 -14
  74. package/plugins/ruflo-metaharness/.claude-flow/logs/headless/optimize_1783605934532_9h8ikb_result.log +0 -68
  75. package/plugins/ruflo-metaharness/.claude-flow/logs/headless/optimize_1783607181736_t12f4y_prompt.log +0 -14
  76. package/plugins/ruflo-metaharness/.claude-flow/logs/headless/optimize_1783607181736_t12f4y_result.log +0 -78
  77. package/plugins/ruflo-metaharness/.claude-flow/logs/headless/optimize_1783608341266_zhk0fl_prompt.log +0 -14
  78. package/plugins/ruflo-metaharness/.claude-flow/logs/headless/optimize_1783608341266_zhk0fl_result.log +0 -68
  79. package/plugins/ruflo-metaharness/.claude-flow/logs/headless/optimize_1783609420180_7xw817_prompt.log +0 -14
  80. package/plugins/ruflo-metaharness/.claude-flow/logs/headless/optimize_1783609420180_7xw817_result.log +0 -72
  81. package/plugins/ruflo-metaharness/.claude-flow/logs/headless/optimize_1783610535307_2pxofp_prompt.log +0 -14
  82. package/plugins/ruflo-metaharness/.claude-flow/logs/headless/optimize_1783610535307_2pxofp_result.log +0 -17
  83. package/plugins/ruflo-metaharness/.claude-flow/logs/headless/optimize_1783611437445_ofwnpb_prompt.log +0 -14
  84. package/plugins/ruflo-metaharness/.claude-flow/logs/headless/optimize_1783611437445_ofwnpb_result.log +0 -60
  85. package/plugins/ruflo-metaharness/.claude-flow/logs/headless/optimize_1783612556827_1cb112_prompt.log +0 -14
  86. package/plugins/ruflo-metaharness/.claude-flow/logs/headless/optimize_1783612556827_1cb112_result.log +0 -56
  87. package/plugins/ruflo-metaharness/.claude-flow/logs/headless/optimize_1783613579531_18xiax_prompt.log +0 -14
  88. package/plugins/ruflo-metaharness/.claude-flow/logs/headless/optimize_1783613579531_18xiax_result.log +0 -74
  89. package/plugins/ruflo-metaharness/.claude-flow/logs/headless/optimize_1783614650481_2zdz7w_prompt.log +0 -14
  90. package/plugins/ruflo-metaharness/.claude-flow/logs/headless/optimize_1783614650481_2zdz7w_result.log +0 -68
  91. package/plugins/ruflo-metaharness/.claude-flow/logs/headless/optimize_1783615742328_rjj69d_prompt.log +0 -14
  92. package/plugins/ruflo-metaharness/.claude-flow/logs/headless/optimize_1783615742328_rjj69d_result.log +0 -65
  93. package/plugins/ruflo-metaharness/.claude-flow/logs/headless/optimize_1783616767230_1iad99_prompt.log +0 -14
  94. package/plugins/ruflo-metaharness/.claude-flow/logs/headless/optimize_1783616767230_1iad99_result.log +0 -68
  95. package/plugins/ruflo-metaharness/.claude-flow/logs/headless/optimize_1783617783537_rqagku_prompt.log +0 -14
  96. package/plugins/ruflo-metaharness/.claude-flow/logs/headless/optimize_1783617783537_rqagku_result.log +0 -56
  97. package/plugins/ruflo-metaharness/.claude-flow/logs/headless/optimize_1783618817343_r1lbhr_prompt.log +0 -14
  98. package/plugins/ruflo-metaharness/.claude-flow/logs/headless/optimize_1783618817343_r1lbhr_result.log +0 -65
  99. package/plugins/ruflo-metaharness/.claude-flow/logs/headless/optimize_1783619907773_8msfw3_prompt.log +0 -14
  100. package/plugins/ruflo-metaharness/.claude-flow/logs/headless/optimize_1783619907773_8msfw3_result.log +0 -77
  101. package/plugins/ruflo-metaharness/.claude-flow/logs/headless/optimize_1783621009302_hybdum_prompt.log +0 -14
  102. package/plugins/ruflo-metaharness/.claude-flow/logs/headless/optimize_1783621009302_hybdum_result.log +0 -64
  103. package/plugins/ruflo-metaharness/.claude-flow/logs/headless/optimize_1783622083681_nznpnx_prompt.log +0 -14
  104. package/plugins/ruflo-metaharness/.claude-flow/logs/headless/optimize_1783622083681_nznpnx_result.log +0 -56
  105. package/plugins/ruflo-metaharness/.claude-flow/logs/headless/optimize_1783623208340_olsbaw_prompt.log +0 -14
  106. package/plugins/ruflo-metaharness/.claude-flow/logs/headless/testgaps_1783605134860_9jssz9_prompt.log +0 -14
  107. package/plugins/ruflo-metaharness/.claude-flow/logs/headless/testgaps_1783605134860_9jssz9_result.log +0 -69
  108. package/plugins/ruflo-metaharness/.claude-flow/logs/headless/testgaps_1783606516743_zftbaa_prompt.log +0 -14
  109. package/plugins/ruflo-metaharness/.claude-flow/logs/headless/testgaps_1783606516743_zftbaa_result.log +0 -92
  110. package/plugins/ruflo-metaharness/.claude-flow/logs/headless/testgaps_1783608038317_jrd66e_prompt.log +0 -14
  111. package/plugins/ruflo-metaharness/.claude-flow/logs/headless/testgaps_1783608038317_jrd66e_result.log +0 -92
  112. package/plugins/ruflo-metaharness/.claude-flow/logs/headless/testgaps_1783609388416_mc3zoe_prompt.log +0 -14
  113. package/plugins/ruflo-metaharness/.claude-flow/logs/headless/testgaps_1783609388416_mc3zoe_result.log +0 -82
  114. package/plugins/ruflo-metaharness/.claude-flow/logs/headless/testgaps_1783610821384_tzqvlb_prompt.log +0 -14
  115. package/plugins/ruflo-metaharness/.claude-flow/logs/headless/testgaps_1783610821384_tzqvlb_result.log +0 -17
  116. package/plugins/ruflo-metaharness/.claude-flow/logs/headless/testgaps_1783612023285_buygpo_prompt.log +0 -14
  117. package/plugins/ruflo-metaharness/.claude-flow/logs/headless/testgaps_1783612023285_buygpo_result.log +0 -57
  118. package/plugins/ruflo-metaharness/.claude-flow/logs/headless/testgaps_1783613599301_6f78cw_prompt.log +0 -14
  119. package/plugins/ruflo-metaharness/.claude-flow/logs/headless/testgaps_1783613599301_6f78cw_result.log +0 -60
  120. package/plugins/ruflo-metaharness/.claude-flow/logs/headless/testgaps_1783615000844_v95ues_prompt.log +0 -14
  121. package/plugins/ruflo-metaharness/.claude-flow/logs/headless/testgaps_1783615000844_v95ues_result.log +0 -69
  122. package/plugins/ruflo-metaharness/.claude-flow/logs/headless/testgaps_1783616341693_bl5d9o_prompt.log +0 -14
  123. package/plugins/ruflo-metaharness/.claude-flow/logs/headless/testgaps_1783616341693_bl5d9o_result.log +0 -64
  124. package/plugins/ruflo-metaharness/.claude-flow/logs/headless/testgaps_1783617832831_ha6s8d_prompt.log +0 -14
  125. package/plugins/ruflo-metaharness/.claude-flow/logs/headless/testgaps_1783617832831_ha6s8d_result.log +0 -42
  126. package/plugins/ruflo-metaharness/.claude-flow/logs/headless/testgaps_1783619384959_s5iiwf_prompt.log +0 -14
  127. package/plugins/ruflo-metaharness/.claude-flow/logs/headless/testgaps_1783619384959_s5iiwf_result.log +0 -47
  128. package/plugins/ruflo-metaharness/.claude-flow/logs/headless/testgaps_1783620946263_d7ovai_prompt.log +0 -14
  129. package/plugins/ruflo-metaharness/.claude-flow/logs/headless/testgaps_1783620946263_d7ovai_result.log +0 -52
  130. package/plugins/ruflo-metaharness/.claude-flow/logs/headless/testgaps_1783622473846_t839e5_prompt.log +0 -14
  131. package/plugins/ruflo-metaharness/.claude-flow/logs/headless/testgaps_1783622473846_t839e5_result.log +0 -96
  132. package/plugins/ruflo-metaharness/.claude-flow/metrics/backup.json +0 -7
  133. package/plugins/ruflo-metaharness/.claude-flow/metrics/codebase-map.json +0 -11
  134. package/plugins/ruflo-metaharness/.claude-flow/metrics/consolidation.json +0 -16
  135. package/plugins/ruflo-metaharness/.claude-flow/metrics/harness-loop.json +0 -83
  136. package/plugins/ruflo-metaharness/.claude-flow/metrics/performance.json +0 -55
  137. package/plugins/ruflo-metaharness/.claude-flow/metrics/security-audit.json +0 -206
  138. package/plugins/ruflo-metaharness/.claude-flow/metrics/test-gaps.json +0 -95
  139. package/plugins/ruflo-metaharness/.claude-flow/neural/stats.json +0 -6
@@ -1,96 +0,0 @@
1
- [2026-07-09T17:29:53.962Z] RESULT
2
- ============================================================
3
- {
4
- "success": true,
5
- "output": "Based on my comprehensive security analysis of the ruflo-metaharness plugin codebase, here is the security audit report:\n\n```json\n{\n \"vulnerabilities\": [\n {\n \"severity\": \"low\",\n \"file\": \"scripts/test-with-openrouter.mjs\",\n \"line\": 109,\n \"description\": \"Use of @latest version specifier with npx (supply chain risk). The script spawns `npx -y -p metaharness@latest` which could execute arbitrary code if the npm registry is compromised. While this is a test file, it contradicts the security practice of version pinning used in production code (_harness.mjs uses ~0.3.0 pinned ranges).\"\n },\n {\n \"severity\": \"low\",\n \"file\": \"scripts/oia-audit.mjs\",\n \"line\": 38,\n \"description\": \"Hardcoded @latest version reference in CLI_PKG variable. Uses '@claude-flow/cli@latest' for memory store operations. While not directly executed as code, this could be vulnerable if the package source is compromised. Should use pinned semver range.\"\n },\n {\n \"severity\": \"low\",\n \"file\": \"scripts/_invoke.mjs\",\n \"line\": 177,\n \"description\": \"Shell enabled on Windows platform (shell: process.platform === 'win32'). Although arguments are passed as arrays (preventing direct injection), using shell on Windows can introduce subtle escaping issues. Consider using a Windows-safe wrapper or disabling shell entirely with proper escaping.\"\n },\n {\n \"severity\": \"low\",\n \"file\": \"scripts/test-with-openrouter.mjs\",\n \"line\": 132,\n \"description\": \"Potential unvalidated GCP credential handling. The `fetchSecretFromGcp` function executes `gcloud secrets` without validating the response length or format before returning. While this is test code with proper error handling, production credential flows should have stricter validation.\"\n }\n ],\n \"riskScore\": 18,\n \"security_strengths\": [\n \"Strong version pinning strategy in production code (uses ~X.Y.Z ranges instead of @latest) prevents supply chain attacks\",\n \"Consistent use of shell: false in spawnSync/spawn calls prevents shell injection attacks\",\n \"Arguments passed as arrays rather than shell command strings throughout the codebase\",\n \"Graceful degradation pattern ensures plugin fails safely when upstream packages are unavailable\",\n \"No eval(), Function(), or dynamic code execution patterns found\",\n \"Proper subprocess timeout management (60s default) prevents resource exhaustion\",\n \"Input validation on file paths and argument parsing\",\n \"Upstream safety boundaries documented and preserved (no shell, no eval, no arbitrary network in redblue/darwin)\",\n \"No hardcoded API keys or credentials in source code (uses environment variables via process.env)\"\n ],\n \"recommendations\": [\n \"Replace @latest version references in test-with-openrouter.mjs (lines 109, 118) with pinned semver ranges matching production standards. Example: 'metaharness@~0.3.0'\",\n \"Update oia-audit.mjs line 38 to use pinned version: Change '@claude-flow/cli@latest' to '@claude-flow/cli@~3.0.0' (or appropriate stable version)\",\n \"For the test file's GCP integration, add response validation: Check that fetched secrets are within expected length bounds (20-500 chars) before returning\",\n \"Consider adding a Windows-specific spawnSync wrapper that doesn't rely on shell parameter for better cross-platform consistency\",\n \"Add an ADR or security-policy document explaining why test files use @latest while production uses pinned versions, and migrate tests to pinned versions for consistency\",\n \"Implement dependency scanning in CI to detect known vulnerabilities in optionalDependencies (@metaharness/*, @claude-flow/*)\",\n \"Verify that all external package.json references are resolved through the safe node_modules resolution path in _invoke.mjs\",\n \"Document the graceful degradation security model as a design principle in the README\"\n ],\n \"owasp_coverage\": {\n \"A1_Injection\": \"✓ PASS — No SQL/command injection risks. Shell disabled, arguments as arrays, no eval/Function\",\n \"A2_Authentication\": \"✓ PASS — No auth logic in this plugin; delegates to upstream\",\n \"A3_Sensitive_Data_Exposure\": \"✓ PASS — No hardcoded secrets. Uses process.env for credentials\",\n \"A4_XXE\": \"✓ PASS — No XML parsing; JSON parsing only\",\n \"A5_Access_Control\": \"⚠ PARTIAL — Plugin relies on upstream access control; no internal access validation\",\n \"A6_Security_Misconfiguration\": \"⚠ LOW RISK — Test file uses @latest (should use pinned), but isolated to test code\",\n \"A7_XSS\": \"✓ PASS — No web/UI code; CLI only\",\n \"A8_Insecure_Deserialization\": \"✓ PASS — Strict JSON.parse() with try-catch, no untrusted object deserialization\",\n \"A9_Vulnerable_Dependencies\": \"⚠ REVIEW — optionalDependencies should be scanned; version pins are present\",\n \"A10_Logging_Monitoring\": \"⚠ PARTIAL — Logs to stdout/stderr; no security-specific audit logging\"\n },\n \"compliance_notes\": {\n \"ADR-150_adherence\": \"✓ PASS — Architectural constraint 'MetaHarness must remain removable' is enforced. Graceful degradation on missing packages.\",\n \"version_pinning\": \"⚠ PARTIAL — Production code follows tilde-range pinning; test code uses @latest\",\n \"subprocess_safety\": \"✓ PASS — All subprocess invocations use shell:false with array arguments\",\n \"error_handling\": \"✓ PASS — Consistent degraded result handling across the codebase\"\n },\n \"tested_files\": [\n \"scripts/_harness.mjs\",\n \"scripts/_redblue.mjs\",\n \"scripts/_invoke.mjs\",\n \"scripts/oia-audit.mjs\",\n \"scripts/learn.mjs\",\n \"scripts/evolve.mjs\",\n \"scripts/test-with-openrouter.mjs\",\n \"scripts/test-similarity.mjs\",\n \"scripts/redblue.mjs\",\n \".claude-plugin/plugin.json\"\n ],\n \"scan_date\": \"2025-07-09\",\n \"scanner\": \"Claude Code Security Auditor\",\n \"project_type\": \"Node.js CLI Plugin\",\n \"summary\": \"The ruflo-metaharness plugin demonstrates strong security practices with consistent version pinning, proper subprocess isolation, and graceful degradation patterns. Security risks are minimal and primarily limited to test code that uses @latest version specifiers. No critical vulnerabilities were found. The plugin correctly implements ADR-150's architectural constraint of remaining an optional augmentation. Recommended remediation focuses on aligning test code practices with production standards and adding minor validation improvements.\"\n}\n```\n\n## Key Security Findings\n\n**Risk Score: 18/100 (Low Risk)**\n\n### Strengths:\n- ✅ **Version Pinning**: Production code uses `~X.Y.Z` ranges, preventing supply chain attacks from @latest compromises\n- ✅ **Safe Subprocess Execution**: Consistent use of `shell: false` with array arguments prevents shell injection\n- ✅ **No Dynamic Code Execution**: Zero instances of `eval()`, `Function()`, or dynamic imports\n- ✅ **Graceful Degradation**: Properly handles missing optional dependencies without crashing\n- ✅ **No Hardcoded Secrets**: All credentials fetched from `process.env`\n\n### Vulnerabilities:\n1. **Test File @latest Usage** (Low) - `test-with-openrouter.mjs` uses `@latest` version specifiers\n2. **Hardcoded @latest in CLI_PKG** (Low) - `oia-audit.mjs` references `@claude-flow/cli@latest`\n3. **Windows Shell Usage** (Low) - `_invoke.mjs` enables shell on Windows platform\n4. **Minimal Input Validation** (Low) - GCP credential fetching lacks response length validation\n\nAll vulnerabilities are **low severity** and primarily affect test/non-critical code paths.\n",
6
- "parsedOutput": {
7
- "vulnerabilities": [
8
- {
9
- "severity": "low",
10
- "file": "scripts/test-with-openrouter.mjs",
11
- "line": 109,
12
- "description": "Use of @latest version specifier with npx (supply chain risk). The script spawns `npx -y -p metaharness@latest` which could execute arbitrary code if the npm registry is compromised. While this is a test file, it contradicts the security practice of version pinning used in production code (_harness.mjs uses ~0.3.0 pinned ranges)."
13
- },
14
- {
15
- "severity": "low",
16
- "file": "scripts/oia-audit.mjs",
17
- "line": 38,
18
- "description": "Hardcoded @latest version reference in CLI_PKG variable. Uses '@claude-flow/cli@latest' for memory store operations. While not directly executed as code, this could be vulnerable if the package source is compromised. Should use pinned semver range."
19
- },
20
- {
21
- "severity": "low",
22
- "file": "scripts/_invoke.mjs",
23
- "line": 177,
24
- "description": "Shell enabled on Windows platform (shell: process.platform === 'win32'). Although arguments are passed as arrays (preventing direct injection), using shell on Windows can introduce subtle escaping issues. Consider using a Windows-safe wrapper or disabling shell entirely with proper escaping."
25
- },
26
- {
27
- "severity": "low",
28
- "file": "scripts/test-with-openrouter.mjs",
29
- "line": 132,
30
- "description": "Potential unvalidated GCP credential handling. The `fetchSecretFromGcp` function executes `gcloud secrets` without validating the response length or format before returning. While this is test code with proper error handling, production credential flows should have stricter validation."
31
- }
32
- ],
33
- "riskScore": 18,
34
- "security_strengths": [
35
- "Strong version pinning strategy in production code (uses ~X.Y.Z ranges instead of @latest) prevents supply chain attacks",
36
- "Consistent use of shell: false in spawnSync/spawn calls prevents shell injection attacks",
37
- "Arguments passed as arrays rather than shell command strings throughout the codebase",
38
- "Graceful degradation pattern ensures plugin fails safely when upstream packages are unavailable",
39
- "No eval(), Function(), or dynamic code execution patterns found",
40
- "Proper subprocess timeout management (60s default) prevents resource exhaustion",
41
- "Input validation on file paths and argument parsing",
42
- "Upstream safety boundaries documented and preserved (no shell, no eval, no arbitrary network in redblue/darwin)",
43
- "No hardcoded API keys or credentials in source code (uses environment variables via process.env)"
44
- ],
45
- "recommendations": [
46
- "Replace @latest version references in test-with-openrouter.mjs (lines 109, 118) with pinned semver ranges matching production standards. Example: 'metaharness@~0.3.0'",
47
- "Update oia-audit.mjs line 38 to use pinned version: Change '@claude-flow/cli@latest' to '@claude-flow/cli@~3.0.0' (or appropriate stable version)",
48
- "For the test file's GCP integration, add response validation: Check that fetched secrets are within expected length bounds (20-500 chars) before returning",
49
- "Consider adding a Windows-specific spawnSync wrapper that doesn't rely on shell parameter for better cross-platform consistency",
50
- "Add an ADR or security-policy document explaining why test files use @latest while production uses pinned versions, and migrate tests to pinned versions for consistency",
51
- "Implement dependency scanning in CI to detect known vulnerabilities in optionalDependencies (@metaharness/*, @claude-flow/*)",
52
- "Verify that all external package.json references are resolved through the safe node_modules resolution path in _invoke.mjs",
53
- "Document the graceful degradation security model as a design principle in the README"
54
- ],
55
- "owasp_coverage": {
56
- "A1_Injection": "✓ PASS — No SQL/command injection risks. Shell disabled, arguments as arrays, no eval/Function",
57
- "A2_Authentication": "✓ PASS — No auth logic in this plugin; delegates to upstream",
58
- "A3_Sensitive_Data_Exposure": "✓ PASS — No hardcoded secrets. Uses process.env for credentials",
59
- "A4_XXE": "✓ PASS — No XML parsing; JSON parsing only",
60
- "A5_Access_Control": "⚠ PARTIAL — Plugin relies on upstream access control; no internal access validation",
61
- "A6_Security_Misconfiguration": "⚠ LOW RISK — Test file uses @latest (should use pinned), but isolated to test code",
62
- "A7_XSS": "✓ PASS — No web/UI code; CLI only",
63
- "A8_Insecure_Deserialization": "✓ PASS — Strict JSON.parse() with try-catch, no untrusted object deserialization",
64
- "A9_Vulnerable_Dependencies": "⚠ REVIEW — optionalDependencies should be scanned; version pins are present",
65
- "A10_Logging_Monitoring": "⚠ PARTIAL — Logs to stdout/stderr; no security-specific audit logging"
66
- },
67
- "compliance_notes": {
68
- "ADR-150_adherence": "✓ PASS — Architectural constraint 'MetaHarness must remain removable' is enforced. Graceful degradation on missing packages.",
69
- "version_pinning": "⚠ PARTIAL — Production code follows tilde-range pinning; test code uses @latest",
70
- "subprocess_safety": "✓ PASS — All subprocess invocations use shell:false with array arguments",
71
- "error_handling": "✓ PASS — Consistent degraded result handling across the codebase"
72
- },
73
- "tested_files": [
74
- "scripts/_harness.mjs",
75
- "scripts/_redblue.mjs",
76
- "scripts/_invoke.mjs",
77
- "scripts/oia-audit.mjs",
78
- "scripts/learn.mjs",
79
- "scripts/evolve.mjs",
80
- "scripts/test-with-openrouter.mjs",
81
- "scripts/test-similarity.mjs",
82
- "scripts/redblue.mjs",
83
- ".claude-plugin/plugin.json"
84
- ],
85
- "scan_date": "2025-07-09",
86
- "scanner": "Claude Code Security Auditor",
87
- "project_type": "Node.js CLI Plugin",
88
- "summary": "The ruflo-metaharness plugin demonstrates strong security practices with consistent version pinning, proper subprocess isolation, and graceful degradation patterns. Security risks are minimal and primarily limited to test code that uses @latest version specifiers. No critical vulnerabilities were found. The plugin correctly implements ADR-150's architectural constraint of remaining an optional augmentation. Recommended remediation focuses on aligning test code practices with production standards and adding minor validation improvements."
89
- },
90
- "durationMs": 144778,
91
- "model": "haiku",
92
- "sandboxMode": "strict",
93
- "workerType": "audit",
94
- "timestamp": "2026-07-09T17:29:53.962Z",
95
- "executionId": "audit_1783618049184_1f4yah"
96
- }
@@ -1,19 +0,0 @@
1
- [2026-07-09T17:39:53.947Z] PROMPT
2
- ============================================================
3
- Analyze this codebase for security vulnerabilities:
4
- - Check for hardcoded secrets (API keys, passwords)
5
- - Identify SQL injection risks
6
- - Find XSS vulnerabilities
7
- - Check for insecure dependencies
8
- - Identify authentication/authorization issues
9
-
10
- Provide a JSON report with:
11
- {
12
- "vulnerabilities": [{ "severity": "high|medium|low", "file": "...", "line": N, "description": "..." }],
13
- "riskScore": 0-100,
14
- "recommendations": ["..."]
15
- }
16
-
17
- ## Instructions
18
-
19
- Analyze the codebase and provide your response following the format specified in the task.