@lcv-ideas-software/cross-review 4.0.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.
Files changed (122) hide show
  1. package/CHANGELOG.md +2568 -0
  2. package/LICENSE +201 -0
  3. package/NOTICE +26 -0
  4. package/README.md +208 -0
  5. package/SECURITY.md +52 -0
  6. package/dist/scripts/api-streaming-smoke.d.ts +1 -0
  7. package/dist/scripts/api-streaming-smoke.js +78 -0
  8. package/dist/scripts/api-streaming-smoke.js.map +1 -0
  9. package/dist/scripts/runtime-default-smoke.d.ts +1 -0
  10. package/dist/scripts/runtime-default-smoke.js +88 -0
  11. package/dist/scripts/runtime-default-smoke.js.map +1 -0
  12. package/dist/scripts/runtime-smoke.d.ts +1 -0
  13. package/dist/scripts/runtime-smoke.js +148 -0
  14. package/dist/scripts/runtime-smoke.js.map +1 -0
  15. package/dist/scripts/smoke.d.ts +1 -0
  16. package/dist/scripts/smoke.js +6156 -0
  17. package/dist/scripts/smoke.js.map +1 -0
  18. package/dist/src/core/cache-manifest.d.ts +22 -0
  19. package/dist/src/core/cache-manifest.js +133 -0
  20. package/dist/src/core/cache-manifest.js.map +1 -0
  21. package/dist/src/core/caller-tokens.d.ts +32 -0
  22. package/dist/src/core/caller-tokens.js +240 -0
  23. package/dist/src/core/caller-tokens.js.map +1 -0
  24. package/dist/src/core/config.d.ts +9 -0
  25. package/dist/src/core/config.js +643 -0
  26. package/dist/src/core/config.js.map +1 -0
  27. package/dist/src/core/convergence.d.ts +5 -0
  28. package/dist/src/core/convergence.js +186 -0
  29. package/dist/src/core/convergence.js.map +1 -0
  30. package/dist/src/core/cost.d.ts +59 -0
  31. package/dist/src/core/cost.js +359 -0
  32. package/dist/src/core/cost.js.map +1 -0
  33. package/dist/src/core/file-config.d.ts +316 -0
  34. package/dist/src/core/file-config.js +490 -0
  35. package/dist/src/core/file-config.js.map +1 -0
  36. package/dist/src/core/orchestrator.d.ts +199 -0
  37. package/dist/src/core/orchestrator.js +3430 -0
  38. package/dist/src/core/orchestrator.js.map +1 -0
  39. package/dist/src/core/prompt-parts.d.ts +58 -0
  40. package/dist/src/core/prompt-parts.js +122 -0
  41. package/dist/src/core/prompt-parts.js.map +1 -0
  42. package/dist/src/core/relator-lottery.d.ts +23 -0
  43. package/dist/src/core/relator-lottery.js +112 -0
  44. package/dist/src/core/relator-lottery.js.map +1 -0
  45. package/dist/src/core/reports.d.ts +2 -0
  46. package/dist/src/core/reports.js +82 -0
  47. package/dist/src/core/reports.js.map +1 -0
  48. package/dist/src/core/session-store.d.ts +149 -0
  49. package/dist/src/core/session-store.js +1923 -0
  50. package/dist/src/core/session-store.js.map +1 -0
  51. package/dist/src/core/status.d.ts +61 -0
  52. package/dist/src/core/status.js +249 -0
  53. package/dist/src/core/status.js.map +1 -0
  54. package/dist/src/core/timeouts.d.ts +2 -0
  55. package/dist/src/core/timeouts.js +3 -0
  56. package/dist/src/core/timeouts.js.map +1 -0
  57. package/dist/src/core/types.d.ts +604 -0
  58. package/dist/src/core/types.js +36 -0
  59. package/dist/src/core/types.js.map +1 -0
  60. package/dist/src/dashboard/server.d.ts +2 -0
  61. package/dist/src/dashboard/server.js +339 -0
  62. package/dist/src/dashboard/server.js.map +1 -0
  63. package/dist/src/mcp/server.d.ts +54 -0
  64. package/dist/src/mcp/server.js +1584 -0
  65. package/dist/src/mcp/server.js.map +1 -0
  66. package/dist/src/observability/logger.d.ts +9 -0
  67. package/dist/src/observability/logger.js +24 -0
  68. package/dist/src/observability/logger.js.map +1 -0
  69. package/dist/src/peers/anthropic.d.ts +14 -0
  70. package/dist/src/peers/anthropic.js +290 -0
  71. package/dist/src/peers/anthropic.js.map +1 -0
  72. package/dist/src/peers/base.d.ts +72 -0
  73. package/dist/src/peers/base.js +416 -0
  74. package/dist/src/peers/base.js.map +1 -0
  75. package/dist/src/peers/deepseek.d.ts +12 -0
  76. package/dist/src/peers/deepseek.js +246 -0
  77. package/dist/src/peers/deepseek.js.map +1 -0
  78. package/dist/src/peers/errors.d.ts +2 -0
  79. package/dist/src/peers/errors.js +185 -0
  80. package/dist/src/peers/errors.js.map +1 -0
  81. package/dist/src/peers/gemini.d.ts +13 -0
  82. package/dist/src/peers/gemini.js +215 -0
  83. package/dist/src/peers/gemini.js.map +1 -0
  84. package/dist/src/peers/grok.d.ts +17 -0
  85. package/dist/src/peers/grok.js +346 -0
  86. package/dist/src/peers/grok.js.map +1 -0
  87. package/dist/src/peers/model-selection.d.ts +4 -0
  88. package/dist/src/peers/model-selection.js +260 -0
  89. package/dist/src/peers/model-selection.js.map +1 -0
  90. package/dist/src/peers/openai.d.ts +14 -0
  91. package/dist/src/peers/openai.js +299 -0
  92. package/dist/src/peers/openai.js.map +1 -0
  93. package/dist/src/peers/perplexity.d.ts +18 -0
  94. package/dist/src/peers/perplexity.js +375 -0
  95. package/dist/src/peers/perplexity.js.map +1 -0
  96. package/dist/src/peers/registry.d.ts +3 -0
  97. package/dist/src/peers/registry.js +77 -0
  98. package/dist/src/peers/registry.js.map +1 -0
  99. package/dist/src/peers/retry.d.ts +2 -0
  100. package/dist/src/peers/retry.js +36 -0
  101. package/dist/src/peers/retry.js.map +1 -0
  102. package/dist/src/peers/stub.d.ts +13 -0
  103. package/dist/src/peers/stub.js +344 -0
  104. package/dist/src/peers/stub.js.map +1 -0
  105. package/dist/src/peers/text.d.ts +18 -0
  106. package/dist/src/peers/text.js +39 -0
  107. package/dist/src/peers/text.js.map +1 -0
  108. package/dist/src/security/redact.d.ts +2 -0
  109. package/dist/src/security/redact.js +128 -0
  110. package/dist/src/security/redact.js.map +1 -0
  111. package/docs/api-keys.md +34 -0
  112. package/docs/architecture.md +118 -0
  113. package/docs/caching.md +135 -0
  114. package/docs/costs.md +40 -0
  115. package/docs/evidence-preflight.md +88 -0
  116. package/docs/github-security-baseline.md +32 -0
  117. package/docs/model-selection.md +105 -0
  118. package/docs/reports/cross-review-v2-api-capability-smoke-2026-04-30.md +354 -0
  119. package/docs/reports/cross-review-v2-format-recovery-findings-2026-04-28.md +223 -0
  120. package/docs/reports/cross-review-v2-official-provider-docs-refresh-2026-05-05.md +60 -0
  121. package/docs/reports/cross-review-v2-token-streaming-smoke-2026-04-30.md +119 -0
  122. package/package.json +88 -0
@@ -0,0 +1,119 @@
1
+ # Cross Review v2 - Token Streaming Smoke
2
+
3
+ Date: 2026-04-30, America/Sao_Paulo
4
+ Runtime under test: local `cross-review-v2` source, package version `2.2.0`
5
+
6
+ ## Purpose
7
+
8
+ This report records a real provider token-streaming smoke test for
9
+ `cross-review-v2`. It verifies that the four peer adapters use provider-native
10
+ streaming APIs and emit session token-progress events.
11
+
12
+ No API key, prompt body or raw provider response text was printed or written to
13
+ this report.
14
+
15
+ ## Command
16
+
17
+ ```powershell
18
+ npm run api-streaming-smoke
19
+ ```
20
+
21
+ ## Result
22
+
23
+ The command completed successfully.
24
+
25
+ ```json
26
+ {
27
+ "ok": true,
28
+ "streaming_tokens": true,
29
+ "streaming_text": false,
30
+ "results": [
31
+ {
32
+ "peer": "codex",
33
+ "provider": "openai",
34
+ "requested_model": "gpt-5.5",
35
+ "reported_model": "gpt-5.5-2026-04-23",
36
+ "status": "NEEDS_EVIDENCE",
37
+ "decision_quality": "clean",
38
+ "delta_events": 126,
39
+ "streamed_chars": 681,
40
+ "usage": {
41
+ "input_tokens": 471,
42
+ "output_tokens": 653,
43
+ "total_tokens": 1124,
44
+ "reasoning_tokens": 516
45
+ }
46
+ },
47
+ {
48
+ "peer": "claude",
49
+ "provider": "anthropic",
50
+ "requested_model": "claude-opus-4-7",
51
+ "reported_model": "claude-opus-4-7",
52
+ "status": "READY",
53
+ "decision_quality": "clean",
54
+ "delta_events": 14,
55
+ "streamed_chars": 890,
56
+ "usage": {
57
+ "input_tokens": 1094,
58
+ "output_tokens": 308,
59
+ "total_tokens": 1402
60
+ }
61
+ },
62
+ {
63
+ "peer": "gemini",
64
+ "provider": "google",
65
+ "requested_model": "gemini-3.1-pro-preview",
66
+ "reported_model": "gemini-3.1-pro-preview",
67
+ "status": "READY",
68
+ "decision_quality": "clean",
69
+ "delta_events": 3,
70
+ "streamed_chars": 282,
71
+ "usage": {
72
+ "input_tokens": 391,
73
+ "output_tokens": 59,
74
+ "total_tokens": 1182,
75
+ "reasoning_tokens": 732
76
+ }
77
+ },
78
+ {
79
+ "peer": "deepseek",
80
+ "provider": "deepseek",
81
+ "requested_model": "deepseek-v4-pro",
82
+ "reported_model": "deepseek-v4-pro",
83
+ "status": "NEEDS_EVIDENCE",
84
+ "decision_quality": "clean",
85
+ "delta_events": 88,
86
+ "streamed_chars": 430,
87
+ "usage": {
88
+ "input_tokens": 402,
89
+ "output_tokens": 1561,
90
+ "total_tokens": 1963,
91
+ "reasoning_tokens": 1473
92
+ }
93
+ }
94
+ ]
95
+ }
96
+ ```
97
+
98
+ `NEEDS_EVIDENCE` in this smoke is not a failure. The prompt is intentionally
99
+ minimal and artificial; the release criterion here is that each adapter streams
100
+ provider output, emits token events, returns a parseable decision and reports
101
+ usage/model metadata without leaking sensitive data.
102
+
103
+ The default token-event mode records progress counts rather than raw provider
104
+ text. `CROSS_REVIEW_V2_STREAM_TEXT=1` is available only as a trusted local
105
+ diagnostic mode and still applies redaction before persistence.
106
+
107
+ ## Release Implications
108
+
109
+ - `CROSS_REVIEW_V2_STREAM_TOKENS=1` is validated against real provider calls.
110
+ - `CROSS_REVIEW_V2_STREAM_TOKENS=0` was validated through `npm run
111
+ runtime-smoke`; `server_info.capabilities.token_streaming` and
112
+ `runtime_capabilities.capabilities.token_streaming` both reported `false`.
113
+ - Token streaming is a real provider-output path, not simulated progress.
114
+ - Existing final-result parsing remains active after streamed text is
115
+ accumulated.
116
+ - Stub regression coverage verifies that summed streamed character counts match
117
+ the final parsed result text length.
118
+ - The event stream can be consumed by MCP hosts and future UI layers to show
119
+ progress during slow reviews.
package/package.json ADDED
@@ -0,0 +1,88 @@
1
+ {
2
+ "name": "@lcv-ideas-software/cross-review",
3
+ "version": "4.0.0",
4
+ "description": "API-first MCP server for multi-model cross-review with unanimous convergence gates.",
5
+ "type": "module",
6
+ "main": "dist/src/mcp/server.js",
7
+ "bin": {
8
+ "cross-review": "dist/src/mcp/server.js",
9
+ "cross-review-dashboard": "dist/src/dashboard/server.js"
10
+ },
11
+ "files": [
12
+ "dist/",
13
+ "docs/",
14
+ "README.md",
15
+ "LICENSE",
16
+ "NOTICE",
17
+ "SECURITY.md",
18
+ "CHANGELOG.md"
19
+ ],
20
+ "scripts": {
21
+ "build": "tsc -p tsconfig.json",
22
+ "clean": "node scripts/clean.mjs",
23
+ "prepack": "npm run clean && npm run build",
24
+ "dev": "tsx src/mcp/server.ts",
25
+ "dashboard": "tsx src/dashboard/server.ts",
26
+ "smoke": "tsx scripts/smoke.ts",
27
+ "runtime-smoke": "npm run build && tsx scripts/runtime-smoke.ts",
28
+ "runtime-default-smoke": "tsx scripts/runtime-default-smoke.ts",
29
+ "api-streaming-smoke": "tsx scripts/api-streaming-smoke.ts",
30
+ "test": "npm run build && npm run smoke && npm run runtime-smoke",
31
+ "lint": "eslint . --max-warnings=0",
32
+ "format": "prettier --write .",
33
+ "format:check": "prettier --check .",
34
+ "typecheck": "tsc -p tsconfig.json --noEmit",
35
+ "format:public": "prettier --write \"**/index.html\"",
36
+ "format:public:check": "prettier --check \"**/index.html\""
37
+ },
38
+ "dependencies": {
39
+ "@anthropic-ai/sdk": "^0.96.0",
40
+ "@google/genai": "^2.0.0",
41
+ "@modelcontextprotocol/sdk": "^1.29.0",
42
+ "openai": "^6.35.0",
43
+ "pino": "^10.3.1",
44
+ "zod": "^4.3.6"
45
+ },
46
+ "overrides": {
47
+ "ip-address": ">=10.1.1",
48
+ "hono": ">=4.12.16"
49
+ },
50
+ "devDependencies": {
51
+ "@eslint/js": "^10.0.1",
52
+ "@types/node": "^25.6.0",
53
+ "eslint": "^10.2.1",
54
+ "prettier": "^3.8.3",
55
+ "tsx": "^4.21.0",
56
+ "typescript": "^6.0.3",
57
+ "typescript-eslint": "^8.59.1"
58
+ },
59
+ "engines": {
60
+ "node": ">=22"
61
+ },
62
+ "publishConfig": {
63
+ "access": "public"
64
+ },
65
+ "license": "Apache-2.0",
66
+ "author": "LCV Ideas & Software",
67
+ "repository": {
68
+ "type": "git",
69
+ "url": "git+https://github.com/LCV-Ideas-Software/cross-review.git"
70
+ },
71
+ "bugs": {
72
+ "url": "https://github.com/LCV-Ideas-Software/cross-review/issues"
73
+ },
74
+ "homepage": "https://cross-review.lcv.dev/",
75
+ "keywords": [
76
+ "mcp",
77
+ "model-context-protocol",
78
+ "cross-review",
79
+ "multi-agent",
80
+ "openai",
81
+ "anthropic",
82
+ "gemini",
83
+ "deepseek",
84
+ "grok",
85
+ "xai",
86
+ "api"
87
+ ]
88
+ }