@polycode-projects/seonix 0.8.0 → 0.9.1

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/README.md CHANGED
@@ -325,7 +325,7 @@ set `SEONIX_GRAPH_FORMAT=1` to opt back out to the legacy v1 form.
325
325
  An optional `seonix.toml` at a repo (or estate) root steers indexing and
326
326
  scoring. Absent file = shipped defaults, byte-for-byte today's behaviour.
327
327
  `seonix init` (or `seonix init --dotnet` for an estate) seeds a commented
328
- template — see `packages/seonix/templates/seonix.toml` and
328
+ template — see `templates/seonix.toml` and
329
329
  `templates/seonix-dotnet.toml` for the full annotated reference.
330
330
 
331
331
  - **`repositories`** — the repo set for an estate config: an inline array of
package/bin/cli.mjs CHANGED
@@ -353,6 +353,10 @@ async function main() {
353
353
  extraIgnores = compileGlobs([...(toml.index.exclude || []), ...(toml.index.secretExclude || [])]);
354
354
  tomlLanguages = toml.index.languages;
355
355
  }
356
+ // [interfaces] → gated route↔handler `serves` edges (PLAN_UNTYPED_INTERFACES.md). Only read
357
+ // from a repo's seonix.toml, so config:false (the bench-immunity flag) keeps it null; a bench
358
+ // arm opts in via the SEONIX_INTERFACES env instead (resolved in extract.mjs assembleAndWrite).
359
+ const tomlInterfaces = toml && toml.interfaces ? toml.interfaces : null;
356
360
  // A7: `"sync":true` on a multi_root routes through the SAME incremental-sync code
357
361
  // path as `cli sync` — fingerprint the estate, re-extract only changed members.
358
362
  if (args.multi_root && args.sync === true) {
@@ -373,7 +377,7 @@ async function main() {
373
377
  };
374
378
 
375
379
  if (args.repo_path) {
376
- const { graphFile, counts, summary } = await indexRepository(args.repo_path, { ignores: args.ignores !== false, historyDepth, extraIgnores, languages: tomlLanguages });
380
+ const { graphFile, counts, summary } = await indexRepository(args.repo_path, { ignores: args.ignores !== false, historyDepth, extraIgnores, languages: tomlLanguages, interfaces: tomlInterfaces });
377
381
  emitSummary(graphFile, counts, "");
378
382
  // A1: the human summary MD goes to STDOUT (bench ignores index stdout — safe;
379
383
  // the machine-readable counts stay on stderr above).
@@ -408,6 +412,7 @@ async function main() {
408
412
  historyDepth,
409
413
  extraIgnores,
410
414
  languages: tomlLanguages,
415
+ interfaces: tomlInterfaces,
411
416
  skipped: skippedRows,
412
417
  log: (line) => process.stderr.write(`seonix: ${line}\n`),
413
418
  });
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@polycode-projects/seonix",
3
- "version": "0.8.0",
3
+ "version": "0.9.1",
4
4
  "private": false,
5
5
  "type": "module",
6
6
  "description": "SEONIX — a deterministic, offline, $0 code-graph tool that makes a cheap coding agent edit like an expensive one. Indexes a repo with Python ast + git (zero model calls) and renders a bounded edit-digest.",
@@ -9,8 +9,7 @@
9
9
  "homepage": "https://seonix.polycode.co.uk",
10
10
  "repository": {
11
11
  "type": "git",
12
- "url": "git+https://gitlab.com/polycode-projects/seonix.git",
13
- "directory": "packages/seonix"
12
+ "url": "git+https://gitlab.com/polycode-projects/seonix.git"
14
13
  },
15
14
  "bugs": {
16
15
  "url": "https://gitlab.com/polycode-projects/seonix/-/issues"
@@ -42,9 +41,58 @@
42
41
  "publishConfig": {
43
42
  "access": "public"
44
43
  },
44
+ "workspaces": [
45
+ "infra"
46
+ ],
47
+ "scripts": {
48
+ "setup": "node scripts/setup.mjs",
49
+ "bench": "node bench/run.mjs",
50
+ "bench:quick": "node bench/run.mjs --instances 1 --runs 1",
51
+ "join:telemetry": "node scripts/join-telemetry.mjs",
52
+ "bench:lite": "node bench/run.mjs --suite lite",
53
+ "bench:seonix": "node bench/run.mjs --suite django-lh --arms seonix,seonix-min --runs 5",
54
+ "bench:b010": "node bench/run.mjs --suite django-lh --arms otb,seonix,seonix-min,seonix-b010 --models claude-opus-4-8,claude-sonnet-4-6 --runs 5 --concurrency 10",
55
+ "bench:b011": "node bench/run.mjs --suite django-lh --arms seonix,seonix-min --models claude-opus-4-8,claude-sonnet-4-6,claude-haiku-4-5 --runs 5 --concurrency 15",
56
+ "bench:b011-haiku-refs": "node bench/run.mjs --suite django-lh --arms otb,seonix-b010 --models claude-haiku-4-5 --runs 5 --concurrency 10",
57
+ "bench:b015": "node scripts/bench-b015.mjs",
58
+ "bench:b016p1": "node scripts/bench-b016-p1.mjs",
59
+ "bench:b016h": "node scripts/bench-b016-h.mjs",
60
+ "bench:b016p2": "node scripts/bench-b016-p2.mjs",
61
+ "bench:baseline": "node scripts/use-baseline.mjs",
62
+ "proof": "node scripts/proof-demo.mjs",
63
+ "smoke": "node bench/smoke.mjs --suite django-lh",
64
+ "report": "node bench/report.mjs",
65
+ "all": "npm run setup && npm run bench && npm run report",
66
+ "clean": "node scripts/clean.mjs",
67
+ "verify:counts": "node scripts/verify-counts.mjs",
68
+ "verify:sanity": "node scripts/verify-sanity.mjs",
69
+ "verify:index": "node scripts/verify-index.mjs",
70
+ "verify:query": "node scripts/verify-query.mjs",
71
+ "verify:review": "node scripts/verify-review.mjs",
72
+ "verify:loop": "node scripts/verify-loop.mjs",
73
+ "refs": "node scripts/fetch-references.mjs",
74
+ "refs:embeddings": "node scripts/fetch-embeddings.mjs",
75
+ "audit": "npm audit --audit-level=high",
76
+ "audit:fix": "npm audit fix",
77
+ "test:root": "node --test \"test/**/*.test.mjs\"",
78
+ "test": "npm run test:root && npm run chrono:test",
79
+ "chrono:build": "node chronograph/build.mjs",
80
+ "chrono:serve": "node chronograph/serve.mjs",
81
+ "chrono:test": "node --test \"chronograph/test/**/*.test.mjs\"",
82
+ "test:all": "npm run test",
83
+ "seonix": "node bin/cli.mjs",
84
+ "seonix:viz": "node bin/cli.mjs viz --",
85
+ "e2e:install": "npx playwright install chromium --with-deps",
86
+ "e2e": "playwright test",
87
+ "e2e:site": "playwright test site.behaviour.test.js",
88
+ "e2e:prod": "SEONIX_E2E_BASE_URL=https://seonix.polycode.co.uk playwright test site.behaviour.test.js",
89
+ "site:prompts": "node scripts/site-prompts.mjs",
90
+ "build:ask-bundle": "node scripts/build-ask-bundle.mjs",
91
+ "site:gen": "npm run build:ask-bundle && node bin/cli.mjs viz --focus buildContextBundle --depth 2 --repo-url https://gitlab.com/polycode-projects/seonix --site-nav --out site/seonix-graph.html --data-out site/seonix-graph-data.json --browser-out site/code-browser.html --browser-data-out site/code-browser-data.json --timeline-out site/timeline.html && npm run site:prompts"
92
+ },
45
93
  "dependencies": {
46
94
  "@modelcontextprotocol/sdk": "^1.29.0",
47
- "@polycode-projects/the-mechanical-code-talker": "^0.6.0",
95
+ "@polycode-projects/the-mechanical-code-talker": "^0.8.1",
48
96
  "cytoscape": "^3.30.0",
49
97
  "smol-toml": "^1.7.0",
50
98
  "tree-sitter": "^0.21.1",
@@ -52,8 +100,8 @@
52
100
  "tree-sitter-java": "^0.21.0",
53
101
  "typescript": "~5.6.2"
54
102
  },
55
- "scripts": {
56
- "test": "node --test \"test/**/*.test.mjs\"",
57
- "viz": "node bin/cli.mjs viz"
103
+ "devDependencies": {
104
+ "@playwright/test": "^1.56.0",
105
+ "esbuild": "^0.28.1"
58
106
  }
59
107
  }