jiva-core 0.3.47 → 0.3.48-dev.3254e6a

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 (111) hide show
  1. package/README.md +31 -1
  2. package/dist/code/agent.d.ts +13 -0
  3. package/dist/code/agent.d.ts.map +1 -1
  4. package/dist/code/agent.js +129 -13
  5. package/dist/code/agent.js.map +1 -1
  6. package/dist/code/benchmark/agent-factory.d.ts +18 -0
  7. package/dist/code/benchmark/agent-factory.d.ts.map +1 -0
  8. package/dist/code/benchmark/agent-factory.js +21 -0
  9. package/dist/code/benchmark/agent-factory.js.map +1 -0
  10. package/dist/code/benchmark/fixtures.d.ts +28 -0
  11. package/dist/code/benchmark/fixtures.d.ts.map +1 -0
  12. package/dist/code/benchmark/fixtures.js +177 -0
  13. package/dist/code/benchmark/fixtures.js.map +1 -0
  14. package/dist/code/benchmark/index.d.ts +16 -0
  15. package/dist/code/benchmark/index.d.ts.map +1 -0
  16. package/dist/code/benchmark/index.js +14 -0
  17. package/dist/code/benchmark/index.js.map +1 -0
  18. package/dist/code/benchmark/microcrm/assets/api.test.mjs +254 -0
  19. package/dist/code/benchmark/microcrm/assets/app.full.reference.mjs +267 -0
  20. package/dist/code/benchmark/microcrm/assets/app.reference.mjs +191 -0
  21. package/dist/code/benchmark/microcrm/assets/bulk.test.mjs +63 -0
  22. package/dist/code/benchmark/microcrm/assets/idempotency.test.mjs +64 -0
  23. package/dist/code/benchmark/microcrm/assets/query.test.mjs +96 -0
  24. package/dist/code/benchmark/microcrm/assets/stats.test.mjs +67 -0
  25. package/dist/code/benchmark/microcrm/index.d.ts +23 -0
  26. package/dist/code/benchmark/microcrm/index.d.ts.map +1 -0
  27. package/dist/code/benchmark/microcrm/index.js +72 -0
  28. package/dist/code/benchmark/microcrm/index.js.map +1 -0
  29. package/dist/code/benchmark/microcrm/spec.d.ts +13 -0
  30. package/dist/code/benchmark/microcrm/spec.d.ts.map +1 -0
  31. package/dist/code/benchmark/microcrm/spec.js +115 -0
  32. package/dist/code/benchmark/microcrm/spec.js.map +1 -0
  33. package/dist/code/benchmark/orchestrator-factory.d.ts +36 -0
  34. package/dist/code/benchmark/orchestrator-factory.d.ts.map +1 -0
  35. package/dist/code/benchmark/orchestrator-factory.js +57 -0
  36. package/dist/code/benchmark/orchestrator-factory.js.map +1 -0
  37. package/dist/code/benchmark/report.d.ts +8 -0
  38. package/dist/code/benchmark/report.d.ts.map +1 -0
  39. package/dist/code/benchmark/report.js +103 -0
  40. package/dist/code/benchmark/report.js.map +1 -0
  41. package/dist/code/benchmark/runner.d.ts +29 -0
  42. package/dist/code/benchmark/runner.d.ts.map +1 -0
  43. package/dist/code/benchmark/runner.js +219 -0
  44. package/dist/code/benchmark/runner.js.map +1 -0
  45. package/dist/code/benchmark/suites.d.ts +19 -0
  46. package/dist/code/benchmark/suites.d.ts.map +1 -0
  47. package/dist/code/benchmark/suites.js +48 -0
  48. package/dist/code/benchmark/suites.js.map +1 -0
  49. package/dist/code/benchmark/tasks.d.ts +16 -0
  50. package/dist/code/benchmark/tasks.d.ts.map +1 -0
  51. package/dist/code/benchmark/tasks.js +153 -0
  52. package/dist/code/benchmark/tasks.js.map +1 -0
  53. package/dist/code/benchmark/tests.d.ts +17 -0
  54. package/dist/code/benchmark/tests.d.ts.map +1 -0
  55. package/dist/code/benchmark/tests.js +234 -0
  56. package/dist/code/benchmark/tests.js.map +1 -0
  57. package/dist/code/benchmark/types.d.ts +161 -0
  58. package/dist/code/benchmark/types.d.ts.map +1 -0
  59. package/dist/code/benchmark/types.js +11 -0
  60. package/dist/code/benchmark/types.js.map +1 -0
  61. package/dist/code/benchmark/verify.d.ts +21 -0
  62. package/dist/code/benchmark/verify.d.ts.map +1 -0
  63. package/dist/code/benchmark/verify.js +108 -0
  64. package/dist/code/benchmark/verify.js.map +1 -0
  65. package/dist/code/tools/edit.d.ts.map +1 -1
  66. package/dist/code/tools/edit.js +12 -3
  67. package/dist/code/tools/edit.js.map +1 -1
  68. package/dist/code/tools/write.d.ts.map +1 -1
  69. package/dist/code/tools/write.js +13 -3
  70. package/dist/code/tools/write.js.map +1 -1
  71. package/dist/core/agent-interface.d.ts +5 -0
  72. package/dist/core/agent-interface.d.ts.map +1 -1
  73. package/dist/core/config.d.ts +48 -0
  74. package/dist/core/config.d.ts.map +1 -1
  75. package/dist/core/config.js +7 -0
  76. package/dist/core/config.js.map +1 -1
  77. package/dist/core/manager-agent.d.ts +5 -0
  78. package/dist/core/manager-agent.d.ts.map +1 -1
  79. package/dist/core/manager-agent.js +8 -8
  80. package/dist/core/manager-agent.js.map +1 -1
  81. package/dist/interfaces/cli/index.js +129 -0
  82. package/dist/interfaces/cli/index.js.map +1 -1
  83. package/dist/interfaces/cli/repl.d.ts.map +1 -1
  84. package/dist/interfaces/cli/repl.js +41 -15
  85. package/dist/interfaces/cli/repl.js.map +1 -1
  86. package/dist/interfaces/cli/setup-wizard.d.ts.map +1 -1
  87. package/dist/interfaces/cli/setup-wizard.js +2 -1
  88. package/dist/interfaces/cli/setup-wizard.js.map +1 -1
  89. package/dist/interfaces/http/index.d.ts.map +1 -1
  90. package/dist/interfaces/http/index.js +2 -0
  91. package/dist/interfaces/http/index.js.map +1 -1
  92. package/dist/interfaces/http/routes/benchmark.d.ts +14 -0
  93. package/dist/interfaces/http/routes/benchmark.d.ts.map +1 -0
  94. package/dist/interfaces/http/routes/benchmark.js +130 -0
  95. package/dist/interfaces/http/routes/benchmark.js.map +1 -0
  96. package/dist/interfaces/http/session-manager.d.ts.map +1 -1
  97. package/dist/interfaces/http/session-manager.js +1 -0
  98. package/dist/interfaces/http/session-manager.js.map +1 -1
  99. package/dist/models/base.d.ts +8 -0
  100. package/dist/models/base.d.ts.map +1 -1
  101. package/dist/models/model-client.d.ts +10 -1
  102. package/dist/models/model-client.d.ts.map +1 -1
  103. package/dist/models/model-client.js +3 -1
  104. package/dist/models/model-client.js.map +1 -1
  105. package/dist/models/orchestrator.d.ts +16 -3
  106. package/dist/models/orchestrator.d.ts.map +1 -1
  107. package/dist/models/orchestrator.js +32 -5
  108. package/dist/models/orchestrator.js.map +1 -1
  109. package/package.json +2 -2
  110. package/scripts/bench-selftest.mjs +112 -0
  111. package/scripts/copy-benchmark-assets.mjs +17 -0
@@ -0,0 +1,112 @@
1
+ /**
2
+ * Self-test for the benchmark harness — validates the fixtures and verifier
3
+ * without any LLM. For each tier it asserts:
4
+ * 1. The canonical golden solution PASSES the tier's tests.
5
+ * 2. The scaffolded starting state (missing function / planted bug) FAILS.
6
+ * 3. Tampering with a test file is detected (tests-modified).
7
+ *
8
+ * Run after `npm run build`: node scripts/bench-selftest.mjs
9
+ */
10
+
11
+ import { mkdtemp, mkdir, writeFile, rm } from 'fs/promises';
12
+ import { tmpdir } from 'os';
13
+ import { join, dirname } from 'path';
14
+
15
+ const { goldenSrcAfter, scaffoldSrc, PACKAGE_JSON } = await import('../dist/code/benchmark/fixtures.js');
16
+ const { cumulativeTests, cumulativeTestPaths } = await import('../dist/code/benchmark/tests.js');
17
+ const { runNodeTests } = await import('../dist/code/benchmark/verify.js');
18
+ const { MICROCRM_TASKS, microcrmReferenceFor } = await import('../dist/code/benchmark/microcrm/index.js');
19
+
20
+ async function writeAll(dir, files) {
21
+ for (const [rel, content] of Object.entries(files)) {
22
+ const abs = join(dir, rel);
23
+ await mkdir(dirname(abs), { recursive: true });
24
+ await writeFile(abs, content, 'utf-8');
25
+ }
26
+ }
27
+
28
+ function protectedMap(tier) {
29
+ const tests = cumulativeTests(tier);
30
+ const map = {};
31
+ for (const p of cumulativeTestPaths(tier)) map[p] = tests[p];
32
+ return map;
33
+ }
34
+
35
+ let failures = 0;
36
+ const ok = (cond, msg) => {
37
+ console.log(`${cond ? ' ✓' : ' ✗'} ${msg}`);
38
+ if (!cond) failures++;
39
+ };
40
+
41
+ for (let tier = 1; tier <= 8; tier++) {
42
+ console.log(`\nTier ${tier}`);
43
+
44
+ // 1. Golden solution passes.
45
+ {
46
+ const dir = await mkdtemp(join(tmpdir(), `bench-golden-${tier}-`));
47
+ await writeAll(dir, { 'package.json': PACKAGE_JSON, ...goldenSrcAfter(tier), ...cumulativeTests(tier) });
48
+ const r = await runNodeTests(dir, protectedMap(tier), 60000);
49
+ ok(r.passed, `golden passes (pass=${r.testsPassed} fail=${r.testsFailed}${r.reason ? ' reason=' + r.reason : ''})`);
50
+ if (!r.passed) console.log(r.output.split('\n').slice(-12).join('\n'));
51
+ await rm(dir, { recursive: true, force: true });
52
+ }
53
+
54
+ // 2. Scaffold fails (the agent has work to do).
55
+ {
56
+ const dir = await mkdtemp(join(tmpdir(), `bench-scaffold-${tier}-`));
57
+ await writeAll(dir, { 'package.json': PACKAGE_JSON, ...scaffoldSrc(tier), ...cumulativeTests(tier) });
58
+ const r = await runNodeTests(dir, protectedMap(tier), 60000);
59
+ ok(!r.passed, `scaffold fails as expected (pass=${r.testsPassed} fail=${r.testsFailed})`);
60
+ await rm(dir, { recursive: true, force: true });
61
+ }
62
+
63
+ // 3. Tamper detection on the newest test file.
64
+ {
65
+ const dir = await mkdtemp(join(tmpdir(), `bench-tamper-${tier}-`));
66
+ await writeAll(dir, { 'package.json': PACKAGE_JSON, ...goldenSrcAfter(tier), ...cumulativeTests(tier) });
67
+ const newest = cumulativeTestPaths(tier).slice(-1)[0];
68
+ await writeFile(join(dir, newest), '// tampered\n', 'utf-8');
69
+ const r = await runNodeTests(dir, protectedMap(tier), 60000);
70
+ ok(!r.passed && r.reason === 'tests-modified', `tamper detected on ${newest}`);
71
+ await rm(dir, { recursive: true, force: true });
72
+ }
73
+ }
74
+
75
+ // ── micro-CRM suite (scored, building) ────────────────────────────────────────
76
+ for (const task of MICROCRM_TASKS) {
77
+ console.log(`\nmicrocrm · ${task.id}`);
78
+ const protectedFiles = {};
79
+ for (const p of task.protectedPaths) protectedFiles[p] = task.scaffold[p];
80
+
81
+ // 1. Reference (base for crm-build, full for extends) passes the task's tests.
82
+ {
83
+ const dir = await mkdtemp(join(tmpdir(), `bench-${task.id}-ref-`));
84
+ await writeAll(dir, microcrmReferenceFor(task));
85
+ const r = await runNodeTests(dir, protectedFiles, 120000);
86
+ ok(r.passed, `reference passes (pass=${r.testsPassed} fail=${r.testsFailed}${r.reason ? ' reason=' + r.reason : ''})`);
87
+ if (!r.passed) console.log(r.output.split('\n').slice(-15).join('\n'));
88
+ await rm(dir, { recursive: true, force: true });
89
+ }
90
+
91
+ // 2. Scaffold (no work done yet) fails — the agent has the feature to build.
92
+ {
93
+ const dir = await mkdtemp(join(tmpdir(), `bench-${task.id}-scaffold-`));
94
+ await writeAll(dir, task.scaffold);
95
+ const r = await runNodeTests(dir, protectedFiles, 120000);
96
+ ok(!r.passed, `scaffold fails as expected (reason=${r.reason})`);
97
+ await rm(dir, { recursive: true, force: true });
98
+ }
99
+
100
+ // 3. Tamper detection on the spec test file.
101
+ {
102
+ const dir = await mkdtemp(join(tmpdir(), `bench-${task.id}-tamper-`));
103
+ await writeAll(dir, microcrmReferenceFor(task));
104
+ await writeFile(join(dir, task.protectedPaths[0]), '// tampered\n', 'utf-8');
105
+ const r = await runNodeTests(dir, protectedFiles, 120000);
106
+ ok(!r.passed && r.reason === 'tests-modified', `tamper detected on ${task.protectedPaths[0]}`);
107
+ await rm(dir, { recursive: true, force: true });
108
+ }
109
+ }
110
+
111
+ console.log(`\n${failures === 0 ? 'ALL GOOD' : failures + ' FAILURE(S)'}`);
112
+ process.exit(failures === 0 ? 0 : 1);
@@ -0,0 +1,17 @@
1
+ /**
2
+ * Copy non-TypeScript benchmark assets (the micro-CRM test + reference `.mjs`
3
+ * files) into dist, since `tsc` only emits compiled TypeScript. Run after `tsc`.
4
+ */
5
+ import { cpSync, existsSync, mkdirSync } from 'fs';
6
+ import { dirname } from 'path';
7
+
8
+ const copies = [
9
+ ['src/code/benchmark/microcrm/assets', 'dist/code/benchmark/microcrm/assets'],
10
+ ];
11
+
12
+ for (const [src, dst] of copies) {
13
+ if (!existsSync(src)) continue;
14
+ mkdirSync(dirname(dst), { recursive: true });
15
+ cpSync(src, dst, { recursive: true });
16
+ console.log(`[copy-benchmark-assets] ${src} -> ${dst}`);
17
+ }