@aeptus/aexeo-emdash 0.8.18 → 0.8.19

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 (77) hide show
  1. package/CHANGELOG.md +104 -6
  2. package/INSTALL.md +13 -4
  3. package/LICENSE +0 -0
  4. package/README.md +0 -0
  5. package/dist/adapter.d.ts +0 -0
  6. package/dist/adapter.d.ts.map +0 -0
  7. package/dist/admin/Absorbability.d.ts +0 -0
  8. package/dist/admin/Absorbability.d.ts.map +0 -0
  9. package/dist/admin/Accessibility.d.ts +0 -0
  10. package/dist/admin/Accessibility.d.ts.map +0 -0
  11. package/dist/admin/Citability.d.ts +0 -0
  12. package/dist/admin/Citability.d.ts.map +0 -0
  13. package/dist/admin/EntityLegitimacy.d.ts +0 -0
  14. package/dist/admin/EntityLegitimacy.d.ts.map +0 -0
  15. package/dist/admin/EntityPresence.d.ts +0 -0
  16. package/dist/admin/EntityPresence.d.ts.map +0 -0
  17. package/dist/admin/Facts.d.ts +0 -0
  18. package/dist/admin/Facts.d.ts.map +0 -0
  19. package/dist/admin/Findings.d.ts +0 -0
  20. package/dist/admin/Findings.d.ts.map +0 -0
  21. package/dist/admin/PillarView.d.ts +0 -0
  22. package/dist/admin/PillarView.d.ts.map +0 -0
  23. package/dist/admin/Retrievability.d.ts +0 -0
  24. package/dist/admin/Retrievability.d.ts.map +0 -0
  25. package/dist/admin.d.ts +0 -0
  26. package/dist/admin.d.ts.map +0 -0
  27. package/dist/admin.js +0 -0
  28. package/dist/configured.d.ts +0 -0
  29. package/dist/configured.d.ts.map +1 -1
  30. package/dist/configured.js +331 -283
  31. package/dist/data-route.d.ts +0 -0
  32. package/dist/data-route.d.ts.map +0 -0
  33. package/dist/evaluator-sandbox.d.ts +0 -0
  34. package/dist/evaluator-sandbox.d.ts.map +0 -0
  35. package/dist/evaluator.d.ts +0 -0
  36. package/dist/evaluator.d.ts.map +0 -0
  37. package/dist/facts-route.d.ts +0 -0
  38. package/dist/facts-route.d.ts.map +0 -0
  39. package/dist/findings-view.d.ts +136 -0
  40. package/dist/findings-view.d.ts.map +1 -0
  41. package/dist/index.d.ts +0 -0
  42. package/dist/index.d.ts.map +0 -0
  43. package/dist/index.js +13 -2
  44. package/dist/plugin.d.ts +22 -2
  45. package/dist/plugin.d.ts.map +1 -1
  46. package/dist/presence-check.d.ts +0 -0
  47. package/dist/presence-check.d.ts.map +0 -0
  48. package/dist/presence-route.d.ts +0 -0
  49. package/dist/presence-route.d.ts.map +0 -0
  50. package/dist/sandbox-entry.d.ts +2 -22
  51. package/dist/sandbox-entry.d.ts.map +1 -1
  52. package/dist/sandbox-entry.js +410 -353
  53. package/dist/sandbox.d.ts +2 -0
  54. package/dist/sandbox.d.ts.map +1 -1
  55. package/dist/sidecar-url.d.ts +18 -0
  56. package/dist/sidecar-url.d.ts.map +1 -0
  57. package/dist/sidecar.d.ts +0 -0
  58. package/dist/sidecar.d.ts.map +0 -0
  59. package/dist/suppressions.d.ts +0 -0
  60. package/dist/suppressions.d.ts.map +0 -0
  61. package/dist/types.d.ts +0 -0
  62. package/dist/types.d.ts.map +0 -0
  63. package/dist/version.d.ts +1 -1
  64. package/dist/version.d.ts.map +0 -0
  65. package/dist/wasm-init.d.ts +0 -0
  66. package/dist/wasm-init.d.ts.map +0 -0
  67. package/package.json +4 -2
  68. package/wasm/aexeo_emdash_bridge.d.ts +0 -0
  69. package/wasm/aexeo_emdash_bridge.js +0 -0
  70. package/wasm/aexeo_emdash_bridge_bg.d.ts +0 -0
  71. package/wasm/aexeo_emdash_bridge_bg.js +0 -0
  72. package/wasm/aexeo_emdash_bridge_bg.wasm +0 -0
  73. package/wasm/aexeo_emdash_bridge_bg.wasm.d.ts +0 -0
  74. package/dist/indexnow.d.ts +0 -15
  75. package/dist/indexnow.d.ts.map +0 -1
  76. package/dist/mcp.d.ts +0 -28
  77. package/dist/mcp.d.ts.map +0 -1
package/CHANGELOG.md CHANGED
@@ -4,16 +4,73 @@ All notable changes to `@aeptus/aexeo-emdash` are listed here.
4
4
  The format follows [Keep a Changelog](https://keepachangelog.com/),
5
5
  and the project follows [Semantic Versioning](https://semver.org/).
6
6
 
7
- ## [Unreleased]
8
-
9
- ## [0.8.18] - 2026-09-27
7
+ ## [0.8.19] - 2026-09-29
10
8
 
11
- Updates the EmDash integration to the current plugin and content APIs.
9
+ Updates the EmDash integration to the current plugin and content APIs, and
10
+ closes three security findings. Everything since 0.8.18 ships in this one
11
+ version, since 0.8.19 had never been published.
12
12
 
13
13
  **Compatibility target:** EmDash `>=0.41.0 <0.42.0`.
14
14
 
15
+ ### Security
16
+
17
+ - **EVAL_TOKEN is stored through the host's encrypted plugin settings.**
18
+ The sidecar bearer token was written as plaintext into the plugin's KV
19
+ namespace. EmDash provides `PluginContext.settings` with host-side
20
+ encryption for fields declared `type: "secret"` in a plugin's
21
+ `settingsSchema`, which is exactly this case; the descriptor now declares
22
+ that schema and the token is written there. Installs that predate the
23
+ change have their plaintext KV copy deleted on the next write, so the
24
+ credential is not sitting in the database twice. Hosts without
25
+ `EMDASH_ENCRYPTION_KEY` configured fall back to the previous KV path with
26
+ a warning that names the missing environment variable and never the
27
+ token, so the Setup page keeps working instead of failing closed.
28
+ - **Sidecar URL validation is allowlist-backed and HTTPS-only.**
29
+ `handleSetupSubmit` accepted `http:`, which sent the bearer token in
30
+ cleartext, and rejected only `localhost` and `127.*` — leaving
31
+ `0.0.0.0`, `[::1]`, RFC1918, CGNAT, and the `169.254.169.254` cloud
32
+ metadata address reachable. It now requires HTTPS, rejects the private,
33
+ loopback, link-local, multicast, and IPv4-mapped-IPv6 ranges, and
34
+ compares the submitted host against the `allowedHosts` list the plugin
35
+ already computes at build time, so the form cannot store a URL the
36
+ plugin's own allowlist would reject later.
37
+ - **Unauthenticated crawl-artifact routes removed from
38
+ `packages/aexeo-crawl-worker`.** `GET /findings/latest` returned the full
39
+ body of the customer's `aexeo-cli crawl` artifact and
40
+ `GET /findings/list` returned R2 key names, timestamps, and sizes.
41
+ Neither was behind the bearer-token check that guarded `/evaluate`, and
42
+ neither had any caller in this repository. CORS is not access control, so
43
+ anyone who learned the worker hostname could read the whole crawl
44
+ artifact. Both routes, the R2 binding, and the `examples/github-actions.yml`
45
+ R2 upload workflow that existed only to feed them are gone.
46
+
47
+ ### Removed
48
+
49
+ - **`src/mcp.ts` and `src/indexnow.ts`.** Both were unreachable. The host
50
+ reads `PluginDefinition.mcp` as a `Record` of tool definitions keyed by
51
+ name; the code attached an `mcpTools` array with a different container and
52
+ a different per-entry shape, and `configured.ts` never attached it at
53
+ all. No MCP tool this package offered could ever have been invoked.
54
+
15
55
  ### Fixed
16
56
 
57
+ - **Suppressions ignored by the Block Kit Refresh button.** In configured
58
+ mode the /findings "Refresh" button called the sweep without the
59
+ compiled `suppressionFilter`, so it re-persisted findings the editor
60
+ had explicitly silenced. The React `/refresh` route always applied
61
+ them, so the two surfaces disagreed and the documented guarantee
62
+ ("suppressed findings never reach the dashboard, /findings, or the
63
+ per-document panel") did not hold on the Block Kit path.
64
+ Root cause: `configured.ts` and `sandbox-entry.ts` each carried their
65
+ own near-verbatim copy of the interaction normalizer, the findings
66
+ page, the score widget, the document panel, and the refresh handler.
67
+ The copies had already drifted — this missing argument was one of the
68
+ drifts. Fix: the whole block now lives once in `src/findings-view.ts`,
69
+ and `RefreshOptions.suppressionFilter` is a **required** property, so a
70
+ caller cannot silently omit it again.
71
+ - **`/evaluate` no longer 500s when `EVAL_TOKEN` is unset.** The check read
72
+ `env.EVAL_TOKEN.length` without a guard, so a worker deployed without the
73
+ secret threw a `TypeError` on every request instead of rejecting it.
17
74
  - **Sandbox access declaration:** replace obsolete capability strings with
18
75
  `content:read` and conditional `network:request`, scoped to the configured
19
76
  evaluator host. Remove unused schema, artifact, KV, and IndexNow host grants.
@@ -32,10 +89,51 @@ Updates the EmDash integration to the current plugin and content APIs.
32
89
 
33
90
  ### Changed
34
91
 
92
+ - Extract the shared Block Kit view layer (`normalizeInteraction`,
93
+ `BlockInteraction`, `BlockResponse`, the findings page, the score
94
+ widget, the document panel, and the refresh sweep) out of
95
+ `configured.ts` and `sandbox-entry.ts` into `src/findings-view.ts`.
96
+ Behaviour is unchanged apart from the suppression fix above; the two
97
+ entrypoints keep their own dispatch and their own copy of the three
98
+ strings that legitimately differ (empty-state copy, score-widget
99
+ empty copy, hard-refresh banner variant), passed in through
100
+ `AdminViewTuning`. `BlockInteraction` and `BlockResponse` are
101
+ re-exported from `sandbox-entry.ts`, so the `./sandbox` entry's
102
+ public type surface is unchanged.
35
103
  - Bump the EmDash peer and development ranges to `0.41.x`; update the README
36
104
  and install guide to name the supported range and sandbox save behavior.
37
- - Add Vitest coverage using EmDash's official plugin runtime test host for
38
- sandbox hooks, blocks extraction, resolved URLs, and translation alternates.
105
+ - Add regression tests for `normalizeInteraction` — the ten edge cases
106
+ the 0.8.17 changelog claimed to have verified but never did — plus
107
+ entrypoint parity tests that drive both admin routes with the same
108
+ malformed bodies, and a test that the configured Block Kit refresh and
109
+ the React `/refresh` route agree on suppressed findings. Vitest coverage
110
+ now runs against EmDash's official plugin runtime test host for sandbox
111
+ hooks, blocks extraction, resolved URLs, and translation alternates.
112
+ - Add `tsconfig.test.json` and a `typecheck:tests` script so `tests/`
113
+ and `vitest.config.ts` are typechecked. `tsconfig.json`'s `include`
114
+ covered `src/**` only, which meant the suite guarding the 0.8.17
115
+ production hotfix and the emdash test-host fixture plugin were both
116
+ unchecked. `npm run typecheck` now runs `typecheck:src` and
117
+ `typecheck:tests`.
118
+ - `packages/aexeo-crawl-worker` no longer commits its build artifacts. The
119
+ checked-in `aexeo_emdash_bridge_bg.wasm` and its glue were several
120
+ releases behind the bridge the plugin actually calls — missing
121
+ `generateFactsPrompt`, `validateFactsManifest`, the manifest argument on
122
+ `scoreIntelligence`, and the `__wbg_*` bindings — and nothing in the
123
+ repository could regenerate them. The hand-written `.d.ts` files had been
124
+ updated to match the stale binary, which is why it went unnoticed. The
125
+ binary is now produced by `npm run build:wasm`, chained into `dev` and
126
+ `deploy`, and only the two declaration files remain tracked. The package
127
+ also gains a README, which it did not have.
128
+
129
+ ## [Unreleased]
130
+
131
+ ## [0.8.18] - 2026-09-28
132
+
133
+ ### Added
134
+
135
+ - Include deterministic editorial-policy rules EDT001–EDT003 in the bundled Rust/WASM evaluator. Configured answer summaries, target questions, and evidence-marked claims can now be checked through the serialized Aexeo config.
136
+
39
137
 
40
138
  ## [0.8.17] - 2026-05-29
41
139
 
package/INSTALL.md CHANGED
@@ -266,16 +266,25 @@ in this repo. Per-site deploy:
266
266
 
267
267
  ```bash
268
268
  cd aexeo-crawl-worker
269
- # Edit wrangler.toml: name, R2 bucket name, SITE_URL
269
+ npm ci
270
+ # Edit wrangler.toml: name, SITE_URL
270
271
  npx wrangler login
271
- npx wrangler r2 bucket create <bucket-name>
272
- npx wrangler deploy
272
+ npm run deploy # builds the WASM bridge, then deploys
273
273
  echo "$(openssl rand -hex 32)" | npx wrangler secret put EVAL_TOKEN
274
274
  ```
275
275
 
276
+ The Worker's WASM is generated, not committed — `npm run deploy` runs
277
+ `npm run build:wasm` first, which needs the Rust toolchain and
278
+ `wasm-bindgen`. See the template's README.
279
+
276
280
  Then in the admin UI, visit
277
281
  `/admin/plugins/aexeo-emdash/setup` and paste the deployed URL +
278
- the same token.
282
+ the same token. The URL must be `https`, must not point at a
283
+ loopback, private, or link-local address, and must be the host in
284
+ `evaluatorHost` above — the emdash sandbox rejects any other outbound
285
+ host, so the form checks it before storing. The token is written
286
+ through the host's encrypted plugin settings (`admin.settingsSchema`
287
+ declares it `secret`), not to plugin KV.
279
288
 
280
289
  ## Alternative install sources
281
290
 
package/LICENSE CHANGED
File without changes
package/README.md CHANGED
File without changes
package/dist/adapter.d.ts CHANGED
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
package/dist/admin.d.ts CHANGED
File without changes
File without changes
package/dist/admin.js CHANGED
File without changes
File without changes
@@ -1 +1 @@
1
- {"version":3,"file":"configured.d.ts","sourceRoot":"","sources":["../src/configured.ts"],"names":[],"mappings":"AAgCA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AA0HrD,MAAM,WAAW,uBAAuB;IACtC;;;OAGG;IACH,WAAW,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IAEhC;;;OAGG;IACH,kBAAkB,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IAEvC;;;OAGG;IACH,kBAAkB,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IAEvC;;;;;OAKG;IACH,YAAY,CAAC,EAAE,SAAS,WAAW,EAAE,CAAC;CACvC;AAED,wBAAgB,YAAY,CAAC,OAAO,GAAE,uBAA4B,GAAG,OAAO,CA0H3E;AAID,eAAe,YAAY,CAAC"}
1
+ {"version":3,"file":"configured.d.ts","sourceRoot":"","sources":["../src/configured.ts"],"names":[],"mappings":"AAqCA,OAAO,KAAK,EAAE,WAAW,EAAqB,MAAM,mBAAmB,CAAC;AA0HxE,MAAM,WAAW,uBAAuB;IACtC;;;OAGG;IACH,WAAW,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IAEhC;;;OAGG;IACH,kBAAkB,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IAEvC;;;OAGG;IACH,kBAAkB,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IAEvC;;;;;OAKG;IACH,YAAY,CAAC,EAAE,SAAS,WAAW,EAAE,CAAC;CACvC;AAED,wBAAgB,YAAY,CAAC,OAAO,GAAE,uBAA4B,GAAG,OAAO,CA2H3E;AAID,eAAe,YAAY,CAAC"}