@bevel-software/platform-core-backend 0.19.0 → 0.20.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 (255) hide show
  1. package/dist/core/create-core-server.d.ts.map +1 -1
  2. package/dist/core/create-core-server.js +22 -0
  3. package/dist/core/create-core-server.js.map +1 -1
  4. package/dist/core/create-core-services.d.ts +3 -0
  5. package/dist/core/create-core-services.d.ts.map +1 -1
  6. package/dist/core/create-core-services.js +10 -1
  7. package/dist/core/create-core-services.js.map +1 -1
  8. package/dist/modules/audit/agent-audit.service.d.ts +54 -0
  9. package/dist/modules/audit/agent-audit.service.d.ts.map +1 -0
  10. package/dist/modules/audit/agent-audit.service.js +290 -0
  11. package/dist/modules/audit/agent-audit.service.js.map +1 -0
  12. package/dist/modules/audit/agent-rest-audit.middleware.d.ts +40 -0
  13. package/dist/modules/audit/agent-rest-audit.middleware.d.ts.map +1 -0
  14. package/dist/modules/audit/agent-rest-audit.middleware.js +75 -0
  15. package/dist/modules/audit/agent-rest-audit.middleware.js.map +1 -0
  16. package/dist/modules/audit/audit.contract.d.ts +145 -0
  17. package/dist/modules/audit/audit.contract.d.ts.map +1 -0
  18. package/dist/modules/audit/audit.contract.js +35 -0
  19. package/dist/modules/audit/audit.contract.js.map +1 -0
  20. package/dist/modules/audit/audit.routes.d.ts +21 -0
  21. package/dist/modules/audit/audit.routes.d.ts.map +1 -0
  22. package/dist/modules/audit/audit.routes.js +157 -0
  23. package/dist/modules/audit/audit.routes.js.map +1 -0
  24. package/dist/modules/audit/event-classifier.d.ts +52 -0
  25. package/dist/modules/audit/event-classifier.d.ts.map +1 -0
  26. package/dist/modules/audit/event-classifier.js +123 -0
  27. package/dist/modules/audit/event-classifier.js.map +1 -0
  28. package/dist/modules/audit/index.d.ts +7 -0
  29. package/dist/modules/audit/index.d.ts.map +1 -0
  30. package/dist/modules/audit/index.js +7 -0
  31. package/dist/modules/audit/index.js.map +1 -0
  32. package/dist/modules/audit/request-audit.d.ts +57 -0
  33. package/dist/modules/audit/request-audit.d.ts.map +1 -0
  34. package/dist/modules/audit/request-audit.js +117 -0
  35. package/dist/modules/audit/request-audit.js.map +1 -0
  36. package/dist/modules/database/core-schema.d.ts +414 -0
  37. package/dist/modules/database/core-schema.d.ts.map +1 -1
  38. package/dist/modules/database/core-schema.js +99 -0
  39. package/dist/modules/database/core-schema.js.map +1 -1
  40. package/dist/modules/diff/diff.service.d.ts.map +1 -1
  41. package/dist/modules/diff/diff.service.js +6 -1
  42. package/dist/modules/diff/diff.service.js.map +1 -1
  43. package/dist/modules/kb-fs/git-guarded-filesystem.d.ts +9 -1
  44. package/dist/modules/kb-fs/git-guarded-filesystem.d.ts.map +1 -1
  45. package/dist/modules/kb-fs/git-guarded-filesystem.js +16 -3
  46. package/dist/modules/kb-fs/git-guarded-filesystem.js.map +1 -1
  47. package/dist/modules/mcp/mcp-auth.middleware.d.ts +1 -0
  48. package/dist/modules/mcp/mcp-auth.middleware.d.ts.map +1 -1
  49. package/dist/modules/mcp/mcp-auth.middleware.js +32 -0
  50. package/dist/modules/mcp/mcp-auth.middleware.js.map +1 -1
  51. package/dist/modules/mcp/mcp.routes.d.ts.map +1 -1
  52. package/dist/modules/mcp/mcp.routes.js +8 -1
  53. package/dist/modules/mcp/mcp.routes.js.map +1 -1
  54. package/dist/modules/mcp/mcp.service.d.ts +9 -1
  55. package/dist/modules/mcp/mcp.service.d.ts.map +1 -1
  56. package/dist/modules/mcp/mcp.service.js +48 -5
  57. package/dist/modules/mcp/mcp.service.js.map +1 -1
  58. package/dist/modules/mcp/oauth/bevel-oauth-provider.d.ts +59 -0
  59. package/dist/modules/mcp/oauth/bevel-oauth-provider.d.ts.map +1 -1
  60. package/dist/modules/mcp/oauth/bevel-oauth-provider.js +180 -8
  61. package/dist/modules/mcp/oauth/bevel-oauth-provider.js.map +1 -1
  62. package/dist/modules/settings/deployment-settings.service.d.ts +10 -2
  63. package/dist/modules/settings/deployment-settings.service.d.ts.map +1 -1
  64. package/dist/modules/settings/deployment-settings.service.js +32 -6
  65. package/dist/modules/settings/deployment-settings.service.js.map +1 -1
  66. package/dist/modules/tool-auth/external-api-key.interface.d.ts +21 -5
  67. package/dist/modules/tool-auth/external-api-key.interface.d.ts.map +1 -1
  68. package/dist/modules/tool-auth/external-api-key.interface.js.map +1 -1
  69. package/dist/modules/tool-auth/external-api-key.service.d.ts +1 -0
  70. package/dist/modules/tool-auth/external-api-key.service.d.ts.map +1 -1
  71. package/dist/modules/tool-auth/external-api-key.service.js +22 -9
  72. package/dist/modules/tool-auth/external-api-key.service.js.map +1 -1
  73. package/dist/modules/tool-auth/internal-token.service.d.ts +10 -0
  74. package/dist/modules/tool-auth/internal-token.service.d.ts.map +1 -1
  75. package/dist/modules/tool-auth/internal-token.service.js +1 -0
  76. package/dist/modules/tool-auth/internal-token.service.js.map +1 -1
  77. package/dist/modules/tool-auth/tool-auth.middleware.d.ts +8 -0
  78. package/dist/modules/tool-auth/tool-auth.middleware.d.ts.map +1 -1
  79. package/dist/modules/tool-auth/tool-auth.middleware.js +9 -1
  80. package/dist/modules/tool-auth/tool-auth.middleware.js.map +1 -1
  81. package/dist/modules/workspace/workspace.service.d.ts +8 -0
  82. package/dist/modules/workspace/workspace.service.d.ts.map +1 -1
  83. package/dist/modules/workspace/workspace.service.js +9 -0
  84. package/dist/modules/workspace/workspace.service.js.map +1 -1
  85. package/dist/modules/workspace/workspace.tools.d.ts.map +1 -1
  86. package/dist/modules/workspace/workspace.tools.js +49 -13
  87. package/dist/modules/workspace/workspace.tools.js.map +1 -1
  88. package/dist/shared/git-internals.d.ts +7 -1
  89. package/dist/shared/git-internals.d.ts.map +1 -1
  90. package/dist/shared/git-internals.js +67 -9
  91. package/dist/shared/git-internals.js.map +1 -1
  92. package/migrations/0012_agent_audit.sql +41 -0
  93. package/migrations/0013_agent_identity_and_key_soft_delete.sql +29 -0
  94. package/migrations/meta/0012_snapshot.json +2247 -0
  95. package/migrations/meta/0013_snapshot.json +2259 -0
  96. package/migrations/meta/_journal.json +14 -0
  97. package/package.json +4 -4
  98. package/src/core/create-core-server.ts +28 -0
  99. package/src/core/create-core-services.ts +13 -0
  100. package/src/modules/audit/__tests__/agent-audit.service.test.ts +370 -0
  101. package/src/modules/audit/__tests__/agent-rest-audit.middleware.test.ts +113 -0
  102. package/src/modules/audit/__tests__/audit.routes.test.ts +201 -0
  103. package/src/modules/audit/__tests__/event-classifier.test.ts +121 -0
  104. package/src/modules/audit/agent-audit.service.ts +316 -0
  105. package/src/modules/audit/agent-rest-audit.middleware.ts +83 -0
  106. package/src/modules/audit/audit.contract.ts +164 -0
  107. package/src/modules/audit/audit.routes.ts +168 -0
  108. package/src/modules/audit/event-classifier.ts +155 -0
  109. package/src/modules/audit/index.ts +14 -0
  110. package/src/modules/audit/request-audit.ts +141 -0
  111. package/src/modules/database/core-schema.ts +104 -0
  112. package/src/modules/diff/diff.service.ts +6 -1
  113. package/src/modules/kb-fs/git-guarded-filesystem.ts +16 -3
  114. package/src/modules/mcp/__tests__/bevel-oauth-provider.test.ts +183 -13
  115. package/src/modules/mcp/__tests__/mcp-auth.middleware.test.ts +60 -2
  116. package/src/modules/mcp/__tests__/mcp.routes.local-token.test.ts +24 -4
  117. package/src/modules/mcp/__tests__/mcp.routes.stateless.test.ts +1 -1
  118. package/src/modules/mcp/__tests__/mcp.service.test.ts +120 -3
  119. package/src/modules/mcp/mcp-auth.middleware.ts +31 -0
  120. package/src/modules/mcp/mcp.routes.ts +11 -1
  121. package/src/modules/mcp/mcp.service.ts +62 -4
  122. package/src/modules/mcp/oauth/bevel-oauth-provider.ts +184 -6
  123. package/src/modules/settings/__tests__/deployment-settings.service.test.ts +35 -0
  124. package/src/modules/settings/deployment-settings.service.ts +47 -8
  125. package/src/modules/tool-auth/__tests__/external-api-key.service.test.ts +29 -8
  126. package/src/modules/tool-auth/__tests__/internal-token.service.test.ts +6 -0
  127. package/src/modules/tool-auth/external-api-key.interface.ts +22 -5
  128. package/src/modules/tool-auth/external-api-key.service.ts +25 -8
  129. package/src/modules/tool-auth/internal-token.service.ts +11 -0
  130. package/src/modules/tool-auth/tool-auth.middleware.ts +17 -1
  131. package/src/modules/workspace/__tests__/git-internals.security.test.ts +135 -44
  132. package/src/modules/workspace/workspace.service.ts +9 -0
  133. package/src/modules/workspace/workspace.tools.ts +47 -11
  134. package/src/shared/__tests__/git-internals.test.ts +41 -0
  135. package/src/shared/git-internals.ts +61 -6
  136. package/dist/modules/access/access-errors.d.ts +0 -34
  137. package/dist/modules/access/access-errors.d.ts.map +0 -1
  138. package/dist/modules/access/access-errors.js +0 -40
  139. package/dist/modules/access/access-errors.js.map +0 -1
  140. package/dist/modules/access/access-splice.d.ts +0 -140
  141. package/dist/modules/access/access-splice.d.ts.map +0 -1
  142. package/dist/modules/access/access-splice.js +0 -389
  143. package/dist/modules/access/access-splice.js.map +0 -1
  144. package/dist/modules/access/group-files.d.ts +0 -83
  145. package/dist/modules/access/group-files.d.ts.map +0 -1
  146. package/dist/modules/access/group-files.js +0 -167
  147. package/dist/modules/access/group-files.js.map +0 -1
  148. package/dist/modules/access/kb-read-filter.d.ts +0 -41
  149. package/dist/modules/access/kb-read-filter.d.ts.map +0 -1
  150. package/dist/modules/access/kb-read-filter.js +0 -60
  151. package/dist/modules/access/kb-read-filter.js.map +0 -1
  152. package/dist/modules/access/render-roles-yaml.d.ts +0 -22
  153. package/dist/modules/access/render-roles-yaml.d.ts.map +0 -1
  154. package/dist/modules/access/render-roles-yaml.js +0 -56
  155. package/dist/modules/access/render-roles-yaml.js.map +0 -1
  156. package/dist/modules/access/roles-yaml-guard.d.ts +0 -56
  157. package/dist/modules/access/roles-yaml-guard.d.ts.map +0 -1
  158. package/dist/modules/access/roles-yaml-guard.js +0 -79
  159. package/dist/modules/access/roles-yaml-guard.js.map +0 -1
  160. package/dist/modules/diff/diff-paths.d.ts +0 -2
  161. package/dist/modules/diff/diff-paths.d.ts.map +0 -1
  162. package/dist/modules/diff/diff-paths.js +0 -9
  163. package/dist/modules/diff/diff-paths.js.map +0 -1
  164. package/dist/modules/groups/group-provision.service.d.ts +0 -130
  165. package/dist/modules/groups/group-provision.service.d.ts.map +0 -1
  166. package/dist/modules/groups/group-provision.service.js +0 -288
  167. package/dist/modules/groups/group-provision.service.js.map +0 -1
  168. package/dist/modules/groups/groups.contract.d.ts +0 -106
  169. package/dist/modules/groups/groups.contract.d.ts.map +0 -1
  170. package/dist/modules/groups/groups.contract.js +0 -36
  171. package/dist/modules/groups/groups.contract.js.map +0 -1
  172. package/dist/modules/groups/groups.routes.d.ts +0 -42
  173. package/dist/modules/groups/groups.routes.d.ts.map +0 -1
  174. package/dist/modules/groups/groups.routes.js +0 -379
  175. package/dist/modules/groups/groups.routes.js.map +0 -1
  176. package/dist/modules/groups/groups.service.d.ts +0 -60
  177. package/dist/modules/groups/groups.service.d.ts.map +0 -1
  178. package/dist/modules/groups/groups.service.js +0 -172
  179. package/dist/modules/groups/groups.service.js.map +0 -1
  180. package/dist/modules/groups/index.d.ts +0 -7
  181. package/dist/modules/groups/index.d.ts.map +0 -1
  182. package/dist/modules/groups/index.js +0 -6
  183. package/dist/modules/groups/index.js.map +0 -1
  184. package/dist/modules/groups/join-proposals.d.ts +0 -53
  185. package/dist/modules/groups/join-proposals.d.ts.map +0 -1
  186. package/dist/modules/groups/join-proposals.js +0 -67
  187. package/dist/modules/groups/join-proposals.js.map +0 -1
  188. package/dist/modules/groups/join-requests.service.d.ts +0 -81
  189. package/dist/modules/groups/join-requests.service.d.ts.map +0 -1
  190. package/dist/modules/groups/join-requests.service.js +0 -135
  191. package/dist/modules/groups/join-requests.service.js.map +0 -1
  192. package/dist/modules/mcp/mcp-session-store.d.ts +0 -74
  193. package/dist/modules/mcp/mcp-session-store.d.ts.map +0 -1
  194. package/dist/modules/mcp/mcp-session-store.js +0 -131
  195. package/dist/modules/mcp/mcp-session-store.js.map +0 -1
  196. package/dist/modules/workflow/file-change-notifier.d.ts +0 -38
  197. package/dist/modules/workflow/file-change-notifier.d.ts.map +0 -1
  198. package/dist/modules/workflow/file-change-notifier.js +0 -22
  199. package/dist/modules/workflow/file-change-notifier.js.map +0 -1
  200. package/dist/modules/workflow/git/branch-name.d.ts +0 -10
  201. package/dist/modules/workflow/git/branch-name.d.ts.map +0 -1
  202. package/dist/modules/workflow/git/branch-name.js +0 -76
  203. package/dist/modules/workflow/git/branch-name.js.map +0 -1
  204. package/dist/modules/workflow/git/clone-config.d.ts +0 -61
  205. package/dist/modules/workflow/git/clone-config.d.ts.map +0 -1
  206. package/dist/modules/workflow/git/clone-config.js +0 -69
  207. package/dist/modules/workflow/git/clone-config.js.map +0 -1
  208. package/dist/modules/workflow/git/mutex.d.ts +0 -11
  209. package/dist/modules/workflow/git/mutex.d.ts.map +0 -1
  210. package/dist/modules/workflow/git/mutex.js +0 -23
  211. package/dist/modules/workflow/git/mutex.js.map +0 -1
  212. package/dist/modules/workflow/locking-filesystem.d.ts +0 -137
  213. package/dist/modules/workflow/locking-filesystem.d.ts.map +0 -1
  214. package/dist/modules/workflow/locking-filesystem.js +0 -553
  215. package/dist/modules/workflow/locking-filesystem.js.map +0 -1
  216. package/dist/modules/workflow/read-only-filesystem.d.ts +0 -24
  217. package/dist/modules/workflow/read-only-filesystem.d.ts.map +0 -1
  218. package/dist/modules/workflow/read-only-filesystem.js +0 -39
  219. package/dist/modules/workflow/read-only-filesystem.js.map +0 -1
  220. package/dist/modules/workflow/workflow.errors.d.ts +0 -197
  221. package/dist/modules/workflow/workflow.errors.d.ts.map +0 -1
  222. package/dist/modules/workflow/workflow.errors.js +0 -298
  223. package/dist/modules/workflow/workflow.errors.js.map +0 -1
  224. package/dist/modules/workspace/bevel-ignore.d.ts +0 -30
  225. package/dist/modules/workspace/bevel-ignore.d.ts.map +0 -1
  226. package/dist/modules/workspace/bevel-ignore.js +0 -61
  227. package/dist/modules/workspace/bevel-ignore.js.map +0 -1
  228. package/dist/modules/workspace/kb-seed.interface.d.ts +0 -36
  229. package/dist/modules/workspace/kb-seed.interface.d.ts.map +0 -1
  230. package/dist/modules/workspace/kb-seed.interface.js +0 -2
  231. package/dist/modules/workspace/kb-seed.interface.js.map +0 -1
  232. package/dist/modules/workspace/kb-seed.service.d.ts +0 -125
  233. package/dist/modules/workspace/kb-seed.service.d.ts.map +0 -1
  234. package/dist/modules/workspace/kb-seed.service.js +0 -535
  235. package/dist/modules/workspace/kb-seed.service.js.map +0 -1
  236. package/dist/modules/workspace/plugins-migration.d.ts +0 -50
  237. package/dist/modules/workspace/plugins-migration.d.ts.map +0 -1
  238. package/dist/modules/workspace/plugins-migration.js +0 -379
  239. package/dist/modules/workspace/plugins-migration.js.map +0 -1
  240. package/dist/shared/fs-errors.d.ts +0 -8
  241. package/dist/shared/fs-errors.d.ts.map +0 -1
  242. package/dist/shared/fs-errors.js +0 -11
  243. package/dist/shared/fs-errors.js.map +0 -1
  244. package/dist/shared/fs-walk.d.ts +0 -23
  245. package/dist/shared/fs-walk.d.ts.map +0 -1
  246. package/dist/shared/fs-walk.js +0 -42
  247. package/dist/shared/fs-walk.js.map +0 -1
  248. package/dist/shared/hash-email.d.ts +0 -11
  249. package/dist/shared/hash-email.d.ts.map +0 -1
  250. package/dist/shared/hash-email.js +0 -14
  251. package/dist/shared/hash-email.js.map +0 -1
  252. package/dist/shared/kb-walk.d.ts +0 -52
  253. package/dist/shared/kb-walk.d.ts.map +0 -1
  254. package/dist/shared/kb-walk.js +0 -76
  255. package/dist/shared/kb-walk.js.map +0 -1
@@ -1 +0,0 @@
1
- {"version":3,"file":"kb-seed.service.js","sourceRoot":"","sources":["../../../src/modules/workspace/kb-seed.service.ts"],"names":[],"mappings":"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"}
@@ -1,50 +0,0 @@
1
- /**
2
- * One-way migration of a knowledge base from `Groups/` to the Agent Plugins
3
- * layout under `Plugins/` (https://agent-plugins.org, v1.0.0).
4
- *
5
- * Runs from the seed top-up, so every deployment self-heals on the next load of
6
- * a protected branch. Idempotent: a KB already on the new layout is untouched,
7
- * and a half-finished run is completed by the next one.
8
- *
9
- * What moves — and what CONVERTS:
10
- *
11
- * Groups/GTM/access.md → Plugins/GTM/access.md (stays put)
12
- * Groups/GTM/deploy/SKILL.md → Plugins/GTM/skills/deploy/SKILL.md
13
- * Groups/GTM/web-search.tool → Plugins/GTM/software.bevel.hexis/tools/web-search.tool
14
- * Groups/GTM/notion.tool (mcp) → an entry in Plugins/GTM/mcp.json, and the
15
- * `.tool` file is DELETED — mcp.json is
16
- * authoritative for MCP servers now.
17
- * Plugins/GTM/plugin.json (written)
18
- *
19
- * The mcp.json entry is keyed by the `.tool`'s manual id: that id is the
20
- * namespace vault secrets bind to (`<id>_<VAR>`), so keeping it is what keeps
21
- * every configured secret and completed OAuth grant bound. What mcp.json
22
- * cannot carry — auth headers with `${VAR}` references, variable declarations,
23
- * the local-only flag — moves into `plugin.json`'s
24
- * `extensions["software.bevel.hexis"].mcpServers[<id>]` block, the reverse-DNS
25
- * namespace the spec reserves for client-specific data. `http`/`inline`
26
- * manuals still MOVE as `.tool` files: nothing but this platform can run them.
27
- */
28
- export interface PluginsMigrationResult {
29
- /**
30
- * Whether this run CHANGED FILES. Notes alone (a manual that could not be
31
- * converted, say) do not set it — the caller stages and commits on this
32
- * flag, and a note-only run has nothing to commit.
33
- */
34
- migrated: boolean;
35
- /** Whether the `Groups/` → `Plugins/` root rename itself happened this run. */
36
- renamed: boolean;
37
- /** Whether the KB's own `.bevelignore` had its `Groups/` rule rewritten (a repo-root file, staged separately). */
38
- ignoreRewritten: boolean;
39
- /** Human-readable summary lines (plugin names, tool moves) for the seed log. */
40
- notes: string[];
41
- }
42
- /**
43
- * Migrate `repoDir` in place. Safe to call on every top-up.
44
- *
45
- * Returns `migrated: false` when no FILE changed — which is the steady state,
46
- * so the caller commits nothing. Advisory `notes` may still be present (a
47
- * manual that refuses to convert reports itself every run) and set nothing.
48
- */
49
- export declare function migrateGroupsToPlugins(repoDir: string): Promise<PluginsMigrationResult>;
50
- //# sourceMappingURL=plugins-migration.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"plugins-migration.d.ts","sourceRoot":"","sources":["../../../src/modules/workspace/plugins-migration.ts"],"names":[],"mappings":"AAmBA;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AAEH,MAAM,WAAW,sBAAsB;IACrC;;;;OAIG;IACH,QAAQ,EAAE,OAAO,CAAC;IAClB,+EAA+E;IAC/E,OAAO,EAAE,OAAO,CAAC;IACjB,kHAAkH;IAClH,eAAe,EAAE,OAAO,CAAC;IACzB,gFAAgF;IAChF,KAAK,EAAE,MAAM,EAAE,CAAC;CACjB;AA8WD;;;;;;GAMG;AACH,wBAAsB,sBAAsB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,sBAAsB,CAAC,CA6C7F"}
@@ -1,379 +0,0 @@
1
- import fs from 'node:fs/promises';
2
- import path from 'node:path';
3
- import { HEXIS_EXTENSION_NS, HEXIS_TOOLS_DIR, LEGACY_GROUPS_DIR, PLUGINS_DIR, PLUGIN_MANIFEST_FILE, PLUGIN_MCP_FILE, PLUGIN_MCP_SCHEMA, PLUGIN_SKILLS_DIR, renderPluginManifest, } from '@bevel-software/platform-shared';
4
- import { normalizeToolManual } from '../tool-manuals/tool-manuals.service.js';
5
- import { parseOwnAccessEntries } from '../access/access-control.service.js';
6
- import { containsVariableReference } from '../../shared/variable-refs.js';
7
- import { IGNORE_FILENAME } from './bevel-ignore.js';
8
- // lstat, both helpers: SYMLINKS ARE NOT SUPPORTED IN PLUGINS, anywhere, so a
9
- // link never counts as the thing it points at — following one here would let
10
- // a symlinked directory pull files from outside the plugin into the sweep
11
- // (and delete them from wherever they really live).
12
- async function exists(p) {
13
- try {
14
- await fs.lstat(p);
15
- return true;
16
- }
17
- catch {
18
- return false;
19
- }
20
- }
21
- async function isDir(p) {
22
- try {
23
- return (await fs.lstat(p)).isDirectory();
24
- }
25
- catch {
26
- return false;
27
- }
28
- }
29
- /**
30
- * Move `from` to `to`, creating the parent. Never overwrites: a destination
31
- * that already exists means a previous run got there first (or a human did),
32
- * and clobbering it would destroy the newer copy.
33
- */
34
- async function moveIfAbsent(from, to) {
35
- if (await exists(to))
36
- return false;
37
- await fs.mkdir(path.dirname(to), { recursive: true });
38
- await fs.rename(from, to);
39
- return true;
40
- }
41
- /**
42
- * A header value referencing a vault variable rather than carrying a literal.
43
- * The substitutor's own grammar decides (shared/variable-refs.ts): both
44
- * spellings it expands — `${VAR}` and bare `$VAR`, digit-leading names
45
- * included — count, because either one copied into mcp.json would be
46
- * transmitted verbatim by a conformant client. That means a prose `$5` in a
47
- * header routes to the non-portable half too: over-classifying costs a header
48
- * its portability, under-classifying leaks whatever `$5TOKEN` expands to.
49
- */
50
- const isCredentialReference = containsVariableReference;
51
- /** Split a manual's headers into what mcp.json may carry and what may not. */
52
- function splitHeaders(headers) {
53
- const literal = {};
54
- const credential = {};
55
- for (const [k, v] of Object.entries(headers ?? {})) {
56
- (isCredentialReference(v) ? credential : literal)[k] = v;
57
- }
58
- return { literal, credential };
59
- }
60
- /** Read+parse a JSON file, or `null` when absent or unparsable. */
61
- async function readJson(p) {
62
- try {
63
- const parsed = JSON.parse(await fs.readFile(p, 'utf-8'));
64
- return typeof parsed === 'object' && parsed !== null && !Array.isArray(parsed)
65
- ? parsed
66
- : null;
67
- }
68
- catch {
69
- return null;
70
- }
71
- }
72
- async function foldIntoPluginFiles(pluginDir, folderName, manuals, notes) {
73
- if (manuals.length === 0)
74
- return false;
75
- const mcpPath = path.join(pluginDir, PLUGIN_MCP_FILE);
76
- const mcp = (await readJson(mcpPath)) ?? { $schema: PLUGIN_MCP_SCHEMA, mcpServers: {} };
77
- // An array (or any non-object) here would take property assignments and then
78
- // drop them at stringify — normalize to an object before merging into it.
79
- if (typeof mcp.mcpServers !== 'object' || mcp.mcpServers === null || Array.isArray(mcp.mcpServers)) {
80
- mcp.mcpServers = {};
81
- }
82
- const servers = mcp.mcpServers;
83
- const manifestPath = path.join(pluginDir, PLUGIN_MANIFEST_FILE);
84
- const manifest = await readJson(manifestPath);
85
- if (manifest === null) {
86
- console.warn(`[plugins-migration] ${folderName}/${PLUGIN_MANIFEST_FILE} is missing or unparsable — ` +
87
- 'mcp manuals convert only when they carry NOTHING for the extensions block; any ' +
88
- 'non-portable half (auth headers, variables, a description, or the local-only flag) ' +
89
- 'keeps the manual a `.tool` until the manifest is fixed.');
90
- }
91
- let wroteMcp = false;
92
- let wroteManifest = false;
93
- const folded = [];
94
- for (const item of manuals.sort((a, b) => a.manual.name.localeCompare(b.manual.name))) {
95
- const m = item.manual;
96
- const { literal, credential } = splitHeaders(m.headers);
97
- // A manual whose non-portable half (auth headers, variables, local flag)
98
- // has nowhere to go — the manifest is missing or unparsable — is NOT
99
- // converted at all: writing only its portable half and deleting the
100
- // source would silently discard the credential wiring. It stays a
101
- // `.tool` until the manifest is fixed.
102
- const extEntryPreview = {
103
- ...(Object.keys(credential).length > 0 ? { headers: credential } : {}),
104
- ...(m.variables && m.variables.length > 0 ? { variables: m.variables } : {}),
105
- ...(typeof m.description === 'string' ? { description: m.description } : {}),
106
- ...(m.remote === false ? { local: true } : {}),
107
- };
108
- if (manifest === null && Object.keys(extEntryPreview).length > 0) {
109
- notes.push(`${folderName}: ${item.note} NOT converted — ${PLUGIN_MANIFEST_FILE} is missing/unparsable ` +
110
- 'and the manual carries declarations (auth headers, variables, a description, or the ' +
111
- 'local-only flag) that would be lost; fix the manifest first.');
112
- continue;
113
- }
114
- folded.push(item);
115
- // Own-property check: `in` sees `constructor` and friends on the prototype,
116
- // which would silently skip a legitimately named server.
117
- if (!Object.prototype.hasOwnProperty.call(servers, m.name)) {
118
- servers[m.name] = {
119
- type: 'streamable-http',
120
- url: m.url,
121
- ...(Object.keys(literal).length > 0 ? { headers: literal } : {}),
122
- };
123
- wroteMcp = true;
124
- notes.push(`${folderName}: ${m.name} → ${PLUGIN_MCP_FILE}`);
125
- }
126
- // The non-portable half: auth headers, variable declarations, local-only.
127
- const extEntry = extEntryPreview;
128
- if (manifest !== null && Object.keys(extEntry).length > 0) {
129
- // Normalize each level: a parseable manifest can still carry a string or
130
- // array where an object belongs, and mutating that would throw mid-run.
131
- if (typeof manifest.extensions !== 'object' || manifest.extensions === null || Array.isArray(manifest.extensions)) {
132
- manifest.extensions = {};
133
- }
134
- const ext = manifest.extensions;
135
- if (typeof ext[HEXIS_EXTENSION_NS] !== 'object' || ext[HEXIS_EXTENSION_NS] === null || Array.isArray(ext[HEXIS_EXTENSION_NS])) {
136
- ext[HEXIS_EXTENSION_NS] = {};
137
- }
138
- const ns = ext[HEXIS_EXTENSION_NS];
139
- if (typeof ns.mcpServers !== 'object' || ns.mcpServers === null || Array.isArray(ns.mcpServers)) {
140
- ns.mcpServers = {};
141
- }
142
- const extServers = ns.mcpServers;
143
- if (!Object.prototype.hasOwnProperty.call(extServers, m.name)) {
144
- extServers[m.name] = extEntry;
145
- wroteManifest = true;
146
- }
147
- }
148
- }
149
- if (wroteMcp)
150
- await fs.writeFile(mcpPath, `${JSON.stringify(mcp, null, 2)}\n`, 'utf8');
151
- if (wroteManifest) {
152
- await fs.writeFile(manifestPath, `${JSON.stringify(manifest, null, 2)}\n`, 'utf8');
153
- notes.push(`${folderName}: wrote mcp-server declarations into ${PLUGIN_MANIFEST_FILE}`);
154
- }
155
- // Sources go LAST, once everything they carried is on disk elsewhere. A
156
- // failure anywhere above leaves every `.tool` in place for the next run —
157
- // which re-converts idempotently, since the fold never clobbers a key.
158
- for (const item of folded) {
159
- await fs.rm(item.abs, { force: true });
160
- notes.push(`${folderName}: ${item.note} converted to an ${PLUGIN_MCP_FILE} entry`);
161
- }
162
- return wroteMcp || wroteManifest || folded.length > 0;
163
- }
164
- /**
165
- * Parse a `.tool`; a convertible MCP manual (has a url) parses to a
166
- * descriptor. A non-candidate (other types, a file that will not parse)
167
- * is `null` and moves as a plain `.tool`; an MCP manual REFUSED conversion
168
- * comes back as the reason string, so the migration log distinguishes a
169
- * deliberately-retained integration from one that silently failed — the
170
- * same courtesy the manifest-missing refusal already extends.
171
- */
172
- async function asMcpManual(abs, repoRel) {
173
- try {
174
- const content = await fs.readFile(abs, 'utf-8');
175
- const d = normalizeToolManual(path.basename(abs).replace(/\.tool$/i, ''), repoRel, content);
176
- // The mcp.json loader accepts only names it can serve as a namespace and
177
- // route slug — converting a manual whose id fails that shape would DELETE
178
- // a working integration and write an entry discovery then skips. Such a
179
- // manual stays a `.tool`.
180
- if (d.type !== 'mcp' || !d.url)
181
- return null;
182
- if (!/^[a-z0-9][a-z0-9_-]*$/.test(d.name)) {
183
- return `its id "${d.name}" is not a valid mcp.json server name`;
184
- }
185
- // Same refusal for the url: the mcp.json loader accepts only a directly
186
- // parseable http(s) url, so a templated one (`${BASE}/mcp` — legal in a
187
- // `.tool`, where the substitutor expands it) would convert into an entry
188
- // discovery then skips, with the source already deleted. And a parseable
189
- // url carrying `user:pass@` may not land in the PORTABLE file at all —
190
- // stripping it would break the server, so the manual keeps its `.tool`
191
- // form, where the credential stays platform-internal.
192
- let url;
193
- try {
194
- url = new URL(d.url);
195
- }
196
- catch {
197
- return 'its url is not directly parseable (a templated url only a .tool can carry)';
198
- }
199
- if (url.protocol !== 'http:' && url.protocol !== 'https:') {
200
- return `its url scheme "${url.protocol}" cannot land in mcp.json (http(s) only)`;
201
- }
202
- if (url.username || url.password) {
203
- return 'its url embeds credentials, which may not land in the portable mcp.json';
204
- }
205
- // A `.tool` can gate ITSELF with frontmatter access verbs, read by the
206
- // access resolver from the file's own path. An mcp.json entry has no
207
- // per-server home for those — the file's ACL governs every server in it —
208
- // so converting would silently widen who may configure and run the
209
- // server. Such a manual stays a `.tool`, verbs and all.
210
- if (parseOwnAccessEntries(content) !== null) {
211
- return 'it gates itself with frontmatter access verbs, which mcp.json cannot carry';
212
- }
213
- return d;
214
- }
215
- catch {
216
- return null;
217
- }
218
- }
219
- /** Reorganise ONE plugin folder in place. Returns notes + whether files changed. */
220
- async function migratePluginFolder(pluginDir, folderName) {
221
- const notes = [];
222
- let changed = false;
223
- if (!(await exists(path.join(pluginDir, PLUGIN_MANIFEST_FILE)))) {
224
- await fs.writeFile(path.join(pluginDir, PLUGIN_MANIFEST_FILE), renderPluginManifest(folderName), 'utf8');
225
- notes.push(`${folderName}: wrote ${PLUGIN_MANIFEST_FILE}`);
226
- changed = true;
227
- }
228
- const entries = await fs.readdir(pluginDir, { withFileTypes: true });
229
- const converted = [];
230
- const convertOrMove = async (abs, name, note) => {
231
- const manual = await asMcpManual(abs, `${PLUGINS_DIR}/${folderName}/${name}`);
232
- if (manual !== null && typeof manual !== 'string') {
233
- // QUEUED for conversion — the `.tool` is deleted only AFTER its entry
234
- // has actually landed in the output files (see foldIntoPluginFiles).
235
- // Deleting first left a window where a failed fold stranded the
236
- // non-portable half (auth headers, variables) with no source to retry
237
- // from: the file IS the recovery path until the fold succeeds.
238
- converted.push({ manual, abs, note });
239
- return;
240
- }
241
- if (typeof manual === 'string') {
242
- // The operator's answer to "why is this integration not in mcp.json":
243
- // a refused conversion must read as the deliberate retention it is.
244
- notes.push(`${folderName}: ${note} NOT converted — ${manual}; kept as a .tool`);
245
- }
246
- const dest = path.join(pluginDir, ...HEXIS_TOOLS_DIR.split('/'), path.basename(abs));
247
- if (abs !== dest && (await moveIfAbsent(abs, dest))) {
248
- notes.push(`${folderName}: ${note} → ${HEXIS_TOOLS_DIR}/${path.basename(abs)}`);
249
- changed = true;
250
- }
251
- };
252
- for (const entry of entries) {
253
- if (entry.name.startsWith('.'))
254
- continue;
255
- if (entry.name === PLUGIN_SKILLS_DIR || entry.name === PLUGIN_MANIFEST_FILE)
256
- continue;
257
- if (entry.name === PLUGIN_MCP_FILE || entry.name === 'access.md')
258
- continue;
259
- if (entry.name === HEXIS_TOOLS_DIR.split('/')[0])
260
- continue;
261
- const abs = path.join(pluginDir, entry.name);
262
- // A skill is a folder carrying SKILL.md — the same rule the catalog uses.
263
- if (entry.isDirectory() && (await exists(path.join(abs, 'SKILL.md')))) {
264
- const dest = path.join(pluginDir, PLUGIN_SKILLS_DIR, entry.name);
265
- if (await moveIfAbsent(abs, dest)) {
266
- notes.push(`${folderName}: ${entry.name}/ → ${PLUGIN_SKILLS_DIR}/${entry.name}/`);
267
- changed = true;
268
- }
269
- continue;
270
- }
271
- if (entry.isFile() && entry.name.toLowerCase().endsWith('.tool')) {
272
- await convertOrMove(abs, entry.name, entry.name);
273
- }
274
- }
275
- // Second sweep: mcp `.tool`s an EARLIER run moved into the extension dir
276
- // (when mcp.json was a projection, not the authority). Converting them here
277
- // is what makes the migration complete itself rather than strand a twin.
278
- // `isDir` is lstat-based, so a SYMLINK planted at this path is not swept:
279
- // this sweep DELETES what it converts, and following a link would delete
280
- // `.tool` files from wherever the link really points.
281
- const extToolsDir = path.join(pluginDir, ...HEXIS_TOOLS_DIR.split('/'));
282
- if (await isDir(extToolsDir)) {
283
- for (const entry of await fs.readdir(extToolsDir, { withFileTypes: true })) {
284
- if (!entry.isFile() || !entry.name.toLowerCase().endsWith('.tool'))
285
- continue;
286
- const abs = path.join(extToolsDir, entry.name);
287
- const manual = await asMcpManual(abs, `${PLUGINS_DIR}/${folderName}/${HEXIS_TOOLS_DIR}/${entry.name}`);
288
- // A refusal reason here is a SETTLED resident of the tools dir — it
289
- // was named the run it moved in, and this sweep repeats every boot,
290
- // so re-noting it would be log spam. Only a convertible manual queues.
291
- if (manual !== null && typeof manual !== 'string') {
292
- converted.push({ manual, abs, note: `${HEXIS_TOOLS_DIR}/${entry.name}` });
293
- }
294
- }
295
- }
296
- changed = (await foldIntoPluginFiles(pluginDir, folderName, converted, notes)) || changed;
297
- return { notes, changed };
298
- }
299
- /**
300
- * Rewrite the KB's `.bevelignore` rule for the renamed root: the exact line
301
- * `Groups/` becomes `Plugins/`. Without this a migrated KB is left with a
302
- * stale rule for a folder that no longer exists and NO rule for the new one,
303
- * so plugin internals start showing up in the file tree and agent view.
304
- *
305
- * The file is the operator's — this touches ONE line, the one the platform's
306
- * own rename invalidated, and only when `Plugins/` is not already listed
307
- * (in which case the stale line is harmlessly dead and left alone).
308
- */
309
- async function rewriteIgnoreRootRule(repoDir, notes) {
310
- const ignorePath = path.join(repoDir, IGNORE_FILENAME);
311
- let current;
312
- try {
313
- current = await fs.readFile(ignorePath, 'utf-8');
314
- }
315
- catch {
316
- return false; // no ignore file — nothing went stale
317
- }
318
- const legacyRule = `${LEGACY_GROUPS_DIR}/`;
319
- const newRule = `${PLUGINS_DIR}/`;
320
- const lines = current.split('\n');
321
- if (lines.some((l) => l.trim() === newRule))
322
- return false;
323
- const idx = lines.findIndex((l) => l.trim() === legacyRule);
324
- if (idx === -1)
325
- return false;
326
- lines[idx] = newRule;
327
- await fs.writeFile(ignorePath, lines.join('\n'), 'utf-8');
328
- notes.push(`${IGNORE_FILENAME}: ${legacyRule} → ${newRule}`);
329
- return true;
330
- }
331
- /**
332
- * Migrate `repoDir` in place. Safe to call on every top-up.
333
- *
334
- * Returns `migrated: false` when no FILE changed — which is the steady state,
335
- * so the caller commits nothing. Advisory `notes` may still be present (a
336
- * manual that refuses to convert reports itself every run) and set nothing.
337
- */
338
- export async function migrateGroupsToPlugins(repoDir) {
339
- const legacyDir = path.join(repoDir, LEGACY_GROUPS_DIR);
340
- const pluginsDir = path.join(repoDir, PLUGINS_DIR);
341
- const notes = [];
342
- const hasLegacy = await isDir(legacyDir);
343
- const hasPlugins = await isDir(pluginsDir);
344
- if (hasLegacy && hasPlugins) {
345
- // Both present: somebody is mid-migration by hand, or two branches merged
346
- // badly. Merging them here would guess at which copy of a same-named
347
- // plugin wins, so we refuse and say so — loudly, because the KB is in a
348
- // state a human needs to look at.
349
- console.warn(`[plugins-migration] both ${LEGACY_GROUPS_DIR}/ and ${PLUGINS_DIR}/ exist — leaving both alone. ` +
350
- `Merge ${LEGACY_GROUPS_DIR}/ into ${PLUGINS_DIR}/ by hand; nothing is being migrated automatically.`);
351
- return { migrated: false, renamed: false, ignoreRewritten: false, notes };
352
- }
353
- let renamed = false;
354
- let ignoreRewritten = false;
355
- if (hasLegacy) {
356
- await fs.rename(legacyDir, pluginsDir);
357
- renamed = true;
358
- notes.push(`${LEGACY_GROUPS_DIR}/ → ${PLUGINS_DIR}/`);
359
- // Rides WITH the rename, not on every run: the rename is what turned the
360
- // ignore rule stale, so the run that renames is the run that heals it.
361
- ignoreRewritten = await rewriteIgnoreRootRule(repoDir, notes);
362
- }
363
- else if (!hasPlugins) {
364
- return { migrated: false, renamed: false, ignoreRewritten: false, notes };
365
- }
366
- // Runs whether or not the rename just happened, so a KB already on
367
- // `Plugins/` still gets missing manifests and any half-done reorganisation
368
- // finished. That is what makes this idempotent rather than once-only.
369
- let changed = renamed || ignoreRewritten;
370
- for (const entry of await fs.readdir(pluginsDir, { withFileTypes: true })) {
371
- if (!entry.isDirectory() || entry.name.startsWith('.'))
372
- continue;
373
- const folder = await migratePluginFolder(path.join(pluginsDir, entry.name), entry.name);
374
- notes.push(...folder.notes);
375
- changed = changed || folder.changed;
376
- }
377
- return { migrated: changed, renamed, ignoreRewritten, notes };
378
- }
379
- //# sourceMappingURL=plugins-migration.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"plugins-migration.js","sourceRoot":"","sources":["../../../src/modules/workspace/plugins-migration.ts"],"names":[],"mappings":"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"}
@@ -1,8 +0,0 @@
1
- /**
2
- * Whether a filesystem error means "there is no such path" — the one failure
3
- * a reader may treat as an ordinary answer. Everything else (permissions,
4
- * I/O, a loop) is a failure to READ what is there, and a caller that folds
5
- * it into absence turns an outage into a wrong answer.
6
- */
7
- export declare function isAbsence(err: unknown): boolean;
8
- //# sourceMappingURL=fs-errors.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"fs-errors.d.ts","sourceRoot":"","sources":["../../src/shared/fs-errors.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,wBAAgB,SAAS,CAAC,GAAG,EAAE,OAAO,GAAG,OAAO,CAG/C"}
@@ -1,11 +0,0 @@
1
- /**
2
- * Whether a filesystem error means "there is no such path" — the one failure
3
- * a reader may treat as an ordinary answer. Everything else (permissions,
4
- * I/O, a loop) is a failure to READ what is there, and a caller that folds
5
- * it into absence turns an outage into a wrong answer.
6
- */
7
- export function isAbsence(err) {
8
- const code = err?.code;
9
- return code === 'ENOENT' || code === 'ENOTDIR';
10
- }
11
- //# sourceMappingURL=fs-errors.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"fs-errors.js","sourceRoot":"","sources":["../../src/shared/fs-errors.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,MAAM,UAAU,SAAS,CAAC,GAAY;IACpC,MAAM,IAAI,GAAI,GAAiC,EAAE,IAAI,CAAC;IACtD,OAAO,IAAI,KAAK,QAAQ,IAAI,IAAI,KAAK,SAAS,CAAC;AACjD,CAAC"}
@@ -1,23 +0,0 @@
1
- import { isSkippedEntry } from './kb-walk.js';
2
- export { isSkippedEntry };
3
- /**
4
- * The file listing catalog scanners want, on top of {@link walkKb}: relative
5
- * (`/`-separated, sorted) paths of files under `root` whose basename matches.
6
- * A missing root yields `[]`; skipped entries are never entered.
7
- *
8
- * A directory that cannot be listed is SKIPPED by default — right for a
9
- * catalog, which shows what it can. A caller that must see EVERYTHING or
10
- * nothing passes `strict`, and the listing throws a {@link WalkError} naming
11
- * the directory instead: a list with a hole in it is not a list of every
12
- * file, and the caller can say WHICH hole rather than pass a raw errno up.
13
- */
14
- export declare function walkFiles(root: string, match: (basename: string) => boolean, opts?: {
15
- strict?: boolean;
16
- }): Promise<string[]>;
17
- /** A strict listing's refusal: the directory (relative to the root, `''` for the root itself) it could not list. */
18
- export declare class WalkError extends Error {
19
- readonly relDir: string;
20
- readonly cause: unknown;
21
- constructor(relDir: string, cause: unknown);
22
- }
23
- //# sourceMappingURL=fs-walk.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"fs-walk.d.ts","sourceRoot":"","sources":["../../src/shared/fs-walk.ts"],"names":[],"mappings":"AAAA,OAAO,EAAU,cAAc,EAAE,MAAM,cAAc,CAAC;AAEtD,OAAO,EAAE,cAAc,EAAE,CAAC;AAE1B;;;;;;;;;;GAUG;AACH,wBAAsB,SAAS,CAC7B,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,OAAO,EACpC,IAAI,GAAE;IAAE,MAAM,CAAC,EAAE,OAAO,CAAA;CAAO,GAC9B,OAAO,CAAC,MAAM,EAAE,CAAC,CAcnB;AAED,oHAAoH;AACpH,qBAAa,SAAU,SAAQ,KAAK;IAEhC,QAAQ,CAAC,MAAM,EAAE,MAAM;IACvB,QAAQ,CAAC,KAAK,EAAE,OAAO;gBADd,MAAM,EAAE,MAAM,EACd,KAAK,EAAE,OAAO;CAK1B"}
@@ -1,42 +0,0 @@
1
- import { walkKb, isSkippedEntry } from './kb-walk.js';
2
- export { isSkippedEntry };
3
- /**
4
- * The file listing catalog scanners want, on top of {@link walkKb}: relative
5
- * (`/`-separated, sorted) paths of files under `root` whose basename matches.
6
- * A missing root yields `[]`; skipped entries are never entered.
7
- *
8
- * A directory that cannot be listed is SKIPPED by default — right for a
9
- * catalog, which shows what it can. A caller that must see EVERYTHING or
10
- * nothing passes `strict`, and the listing throws a {@link WalkError} naming
11
- * the directory instead: a list with a hole in it is not a list of every
12
- * file, and the caller can say WHICH hole rather than pass a raw errno up.
13
- */
14
- export async function walkFiles(root, match, opts = {}) {
15
- const out = [];
16
- await walkKb(root, [
17
- {
18
- onFile(dir, name) {
19
- if (match(name))
20
- out.push(dir ? `${dir}/${name}` : name);
21
- },
22
- onHole(rel, err) {
23
- if (opts.strict)
24
- throw new WalkError(rel, err);
25
- },
26
- },
27
- ]);
28
- out.sort();
29
- return out;
30
- }
31
- /** A strict listing's refusal: the directory (relative to the root, `''` for the root itself) it could not list. */
32
- export class WalkError extends Error {
33
- relDir;
34
- cause;
35
- constructor(relDir, cause) {
36
- super(`${relDir || '.'} could not be listed — ${cause instanceof Error ? cause.message : String(cause)}`);
37
- this.relDir = relDir;
38
- this.cause = cause;
39
- this.name = 'WalkError';
40
- }
41
- }
42
- //# sourceMappingURL=fs-walk.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"fs-walk.js","sourceRoot":"","sources":["../../src/shared/fs-walk.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAEtD,OAAO,EAAE,cAAc,EAAE,CAAC;AAE1B;;;;;;;;;;GAUG;AACH,MAAM,CAAC,KAAK,UAAU,SAAS,CAC7B,IAAY,EACZ,KAAoC,EACpC,OAA6B,EAAE;IAE/B,MAAM,GAAG,GAAa,EAAE,CAAC;IACzB,MAAM,MAAM,CAAC,IAAI,EAAE;QACjB;YACE,MAAM,CAAC,GAAG,EAAE,IAAI;gBACd,IAAI,KAAK,CAAC,IAAI,CAAC;oBAAE,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;YAC3D,CAAC;YACD,MAAM,CAAC,GAAG,EAAE,GAAG;gBACb,IAAI,IAAI,CAAC,MAAM;oBAAE,MAAM,IAAI,SAAS,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;YACjD,CAAC;SACF;KACF,CAAC,CAAC;IACH,GAAG,CAAC,IAAI,EAAE,CAAC;IACX,OAAO,GAAG,CAAC;AACb,CAAC;AAED,oHAAoH;AACpH,MAAM,OAAO,SAAU,SAAQ,KAAK;IAEvB;IACA;IAFX,YACW,MAAc,EACd,KAAc;QAEvB,KAAK,CAAC,GAAG,MAAM,IAAI,GAAG,0BAA0B,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QAHjG,WAAM,GAAN,MAAM,CAAQ;QACd,UAAK,GAAL,KAAK,CAAS;QAGvB,IAAI,CAAC,IAAI,GAAG,WAAW,CAAC;IAC1B,CAAC;CACF"}
@@ -1,11 +0,0 @@
1
- /**
2
- * Canonical user-identity hash: SHA-256 over the trimmed, lowercased email,
3
- * returned as hex. Used wherever Bevel needs a stable email-derived identifier
4
- * without storing the raw email — PR author-id markers, self-approval
5
- * detection, etc. All callers MUST use this single function; a drift in the
6
- * normalization (case, whitespace) would silently de-attribute every PR the
7
- * bot opens because the hash embedded in the PR body would no longer match
8
- * the hash computed at lookup time.
9
- */
10
- export declare function hashEmail(email: string): string;
11
- //# sourceMappingURL=hash-email.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"hash-email.d.ts","sourceRoot":"","sources":["../../src/shared/hash-email.ts"],"names":[],"mappings":"AAEA;;;;;;;;GAQG;AACH,wBAAgB,SAAS,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAE/C"}
@@ -1,14 +0,0 @@
1
- import { createHash } from 'node:crypto';
2
- /**
3
- * Canonical user-identity hash: SHA-256 over the trimmed, lowercased email,
4
- * returned as hex. Used wherever Bevel needs a stable email-derived identifier
5
- * without storing the raw email — PR author-id markers, self-approval
6
- * detection, etc. All callers MUST use this single function; a drift in the
7
- * normalization (case, whitespace) would silently de-attribute every PR the
8
- * bot opens because the hash embedded in the PR body would no longer match
9
- * the hash computed at lookup time.
10
- */
11
- export function hashEmail(email) {
12
- return createHash('sha256').update(email.trim().toLowerCase()).digest('hex');
13
- }
14
- //# sourceMappingURL=hash-email.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"hash-email.js","sourceRoot":"","sources":["../../src/shared/hash-email.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAEzC;;;;;;;;GAQG;AACH,MAAM,UAAU,SAAS,CAAC,KAAa;IACrC,OAAO,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AAC/E,CAAC"}