wyrm-mcp 7.3.2 → 7.3.3

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 (184) hide show
  1. package/README.md +8 -14
  2. package/dist/activation.js +59 -1
  3. package/dist/agent-daemon.js +281 -4
  4. package/dist/agent-loop.js +332 -7
  5. package/dist/analytics.js +236 -13
  6. package/dist/attribution.js +49 -1
  7. package/dist/audit.js +457 -2
  8. package/dist/auto-capture.js +138 -3
  9. package/dist/auto-orchestrator.js +325 -1
  10. package/dist/autoconfig.d.ts +50 -0
  11. package/dist/autoconfig.d.ts.map +1 -1
  12. package/dist/autoconfig.js +1115 -39
  13. package/dist/autoconfig.js.map +1 -1
  14. package/dist/buddy-runner.js +109 -1
  15. package/dist/buddy.js +564 -14
  16. package/dist/build-flags.js +15 -1
  17. package/dist/capabilities.js +183 -3
  18. package/dist/capture.js +56 -1
  19. package/dist/causality.js +148 -8
  20. package/dist/cli.js +281 -20
  21. package/dist/cloud/cli.js +541 -5
  22. package/dist/cloud/client.js +221 -1
  23. package/dist/cloud/crypto.js +85 -1
  24. package/dist/cloud/machine-id.js +113 -2
  25. package/dist/cloud/recovery.js +60 -1
  26. package/dist/cloud/sync-engine.js +543 -7
  27. package/dist/cloud-backup.js +579 -5
  28. package/dist/cloud-profile.js +138 -1
  29. package/dist/cloud-sync-entrypoint.js +47 -1
  30. package/dist/cloud-sync.js +309 -2
  31. package/dist/connectors/bridge-source.d.ts +46 -0
  32. package/dist/connectors/bridge-source.d.ts.map +1 -0
  33. package/dist/connectors/bridge-source.js +77 -0
  34. package/dist/connectors/bridge-source.js.map +1 -0
  35. package/dist/connectors/index.d.ts +24 -0
  36. package/dist/connectors/index.d.ts.map +1 -0
  37. package/dist/connectors/index.js +69 -0
  38. package/dist/connectors/index.js.map +1 -0
  39. package/dist/connectors/ingest.d.ts +16 -0
  40. package/dist/connectors/ingest.d.ts.map +1 -0
  41. package/dist/connectors/ingest.js +116 -0
  42. package/dist/connectors/ingest.js.map +1 -0
  43. package/dist/connectors/types.d.ts +99 -0
  44. package/dist/connectors/types.d.ts.map +1 -0
  45. package/dist/connectors/types.js +17 -0
  46. package/dist/connectors/types.js.map +1 -0
  47. package/dist/constellation.js +168 -12
  48. package/dist/content-signature.js +45 -1
  49. package/dist/context-build-budgeted.js +144 -4
  50. package/dist/context-ranking.js +69 -1
  51. package/dist/crypto.js +179 -1
  52. package/dist/daemon-write-endpoint.js +290 -1
  53. package/dist/daemon-writer.js +406 -2
  54. package/dist/database.js +1278 -53
  55. package/dist/deprecations.js +162 -2
  56. package/dist/design.js +141 -13
  57. package/dist/event-replication.js +112 -1
  58. package/dist/events-sse.js +43 -7
  59. package/dist/events.js +238 -6
  60. package/dist/failure-patterns.d.ts +107 -0
  61. package/dist/failure-patterns.d.ts.map +1 -1
  62. package/dist/failure-patterns.js +924 -43
  63. package/dist/failure-patterns.js.map +1 -1
  64. package/dist/federation.js +236 -12
  65. package/dist/goals.js +101 -13
  66. package/dist/golden.js +355 -3
  67. package/dist/handlers/agent.js +165 -4
  68. package/dist/handlers/alias-adapters.js +129 -1
  69. package/dist/handlers/aliases.js +171 -1
  70. package/dist/handlers/audit.js +87 -1
  71. package/dist/handlers/boundary.js +221 -1
  72. package/dist/handlers/capture.js +1114 -73
  73. package/dist/handlers/causality.js +119 -9
  74. package/dist/handlers/cloud.js +382 -85
  75. package/dist/handlers/companion.js +459 -28
  76. package/dist/handlers/datalake.js +187 -7
  77. package/dist/handlers/dispatch-context.js +22 -0
  78. package/dist/handlers/entity.js +256 -25
  79. package/dist/handlers/events.js +335 -16
  80. package/dist/handlers/failure.d.ts.map +1 -1
  81. package/dist/handlers/failure.js +408 -13
  82. package/dist/handlers/failure.js.map +1 -1
  83. package/dist/handlers/goals.js +296 -4
  84. package/dist/handlers/intelligence.js +681 -126
  85. package/dist/handlers/invoicing.js +70 -1
  86. package/dist/handlers/mcpclient.js +137 -6
  87. package/dist/handlers/orchestration.js +125 -40
  88. package/dist/handlers/output-schemas.js +24 -1
  89. package/dist/handlers/presence.js +99 -3
  90. package/dist/handlers/project.js +182 -28
  91. package/dist/handlers/prompts.js +157 -6
  92. package/dist/handlers/quest.js +224 -4
  93. package/dist/handlers/recall.js +237 -13
  94. package/dist/handlers/registry.js +167 -1
  95. package/dist/handlers/resources.js +288 -1
  96. package/dist/handlers/review.js +74 -11
  97. package/dist/handlers/run.js +498 -16
  98. package/dist/handlers/search.js +338 -15
  99. package/dist/handlers/session.js +643 -31
  100. package/dist/handlers/share.js +184 -8
  101. package/dist/handlers/shims.js +464 -1
  102. package/dist/handlers/skill.js +449 -67
  103. package/dist/handlers/survivors.js +120 -1
  104. package/dist/handlers/symbols.js +109 -8
  105. package/dist/handlers/syncops.js +302 -4
  106. package/dist/handlers/types.js +27 -1
  107. package/dist/harvest.js +191 -5
  108. package/dist/hours.js +156 -7
  109. package/dist/http-auth.js +321 -3
  110. package/dist/http-fast.js +1302 -22
  111. package/dist/icons.js +47 -1
  112. package/dist/importers.js +268 -1
  113. package/dist/index.js +840 -2
  114. package/dist/indexer.js +145 -4
  115. package/dist/intelligence.js +261 -31
  116. package/dist/internal-dispatch.js +212 -3
  117. package/dist/keyset.js +110 -1
  118. package/dist/knowledge-graph.js +176 -12
  119. package/dist/license.js +441 -2
  120. package/dist/logger.js +199 -2
  121. package/dist/maintenance.js +148 -2
  122. package/dist/mcp-client.js +262 -6
  123. package/dist/memory-artifacts.js +596 -32
  124. package/dist/migrate-prompt.js +124 -2
  125. package/dist/migrations.d.ts.map +1 -1
  126. package/dist/migrations.js +799 -42
  127. package/dist/migrations.js.map +1 -1
  128. package/dist/performance.js +228 -1
  129. package/dist/presence.js +140 -11
  130. package/dist/priority-embed.js +164 -5
  131. package/dist/providers/embedding-provider.js +196 -1
  132. package/dist/readonly-gate.js +29 -1
  133. package/dist/receipt.js +43 -1
  134. package/dist/rehydration.js +157 -9
  135. package/dist/reindex.js +88 -1
  136. package/dist/render-target.js +544 -21
  137. package/dist/render.js +280 -4
  138. package/dist/repl-guard.js +173 -1
  139. package/dist/replication-daemon-entrypoint.js +31 -1
  140. package/dist/replication-daemon.js +262 -2
  141. package/dist/rerank.js +142 -1
  142. package/dist/resilience.js +591 -1
  143. package/dist/reverse-bridge.js +360 -5
  144. package/dist/security.js +244 -1
  145. package/dist/session-seen.js +51 -3
  146. package/dist/setup.js +260 -1
  147. package/dist/skill-author.js +168 -5
  148. package/dist/spec-kit.js +191 -1
  149. package/dist/sqlite-busy.js +154 -1
  150. package/dist/statusline.js +315 -11
  151. package/dist/sub-agent.js +262 -13
  152. package/dist/summarizer.js +139 -13
  153. package/dist/symbols.js +283 -7
  154. package/dist/sync.js +359 -5
  155. package/dist/tasks-dispatch.js +84 -1
  156. package/dist/tasks.js +282 -1
  157. package/dist/token-budget.js +143 -1
  158. package/dist/tool-analytics.js +129 -7
  159. package/dist/tool-annotations.js +365 -1
  160. package/dist/tool-manifest-v2.json +1 -1
  161. package/dist/tool-manifest.json +1 -1
  162. package/dist/tool-profiles.js +75 -1
  163. package/dist/trace-harvest.js +244 -6
  164. package/dist/types.js +30 -1
  165. package/dist/ui-dashboard.js +50 -41
  166. package/dist/ulid.js +81 -1
  167. package/dist/usage-tracker.js +66 -1
  168. package/dist/validate.js +129 -1
  169. package/dist/vault.js +534 -1
  170. package/dist/vector-init.js +67 -1
  171. package/dist/vectors.js +184 -3
  172. package/dist/version-check.js +136 -4
  173. package/dist/visibility.js +155 -19
  174. package/dist/wyrm-cli.js +2845 -101
  175. package/dist/wyrm-cli.js.map +1 -1
  176. package/dist/wyrm-guard.d.ts.map +1 -1
  177. package/dist/wyrm-guard.js +475 -14
  178. package/dist/wyrm-guard.js.map +1 -1
  179. package/dist/wyrm-loop.js +150 -3
  180. package/dist/wyrm-manifest.json +1 -1
  181. package/dist/wyrm-statusline-daemon.js +11 -1
  182. package/dist/wyrm-statusline.js +56 -4
  183. package/dist/wyrm-ui.js +77 -9
  184. package/package.json +1 -1
@@ -1,15 +1,476 @@
1
1
  #!/usr/bin/env node
2
- import S from"better-sqlite3";import{readFileSync as D,realpathSync as I}from"node:fs";import{homedir as L}from"node:os";import{basename as W,dirname as T,isAbsolute as k,join as O,relative as j,resolve as $,sep as U}from"node:path";import{fileURLToPath as G}from"node:url";import{FailurePatterns as A,normalizeIdentity as E}from"./failure-patterns.js";import{LEGACY_ENVELOPE as Y,runWithActor as B,sanitizeActorId as P}from"./handlers/boundary.js";const g={exitCode:0,stdout:"",stderr:""},V=new Set(["Edit","Write","MultiEdit","NotebookEdit"]),F=3,H=10;function p(t){return typeof t=="string"&&t.length>0?t:null}function a(t,e){return t?t.replace(/[\x00-\x1f\x7f]/g," ").replace(/\s+/g," ").trim().slice(0,e):""}function J(t){const e=t.hook_event_name;if(e!==void 0&&e!=="PreToolUse")return null;const i=t.tool_name,s=t.tool_input;if(typeof i!="string"||typeof s!="object"||s===null)return null;const o=s,r=p(t.cwd);if(i==="Bash"){const c=p(o.command)?.trim();if(!c)return null;const d=c.slice(0,1e3);return{scopes:["command"],probeTarget:d,identity:[c],display:a(d,80),startDir:r,absPath:null}}if(V.has(i)){const c=p(o.file_path)??p(o.notebook_path);if(!c)return null;const d=o.edits,m=p(o.new_string)??p(o.content)??p(o.new_source)??(Array.isArray(d)?d.map(h=>p(h?.new_string)??"").join(" "):""),f=k(c)?$(c):r&&k(r)?$(r,c):null;return{scopes:["file","edit"],probeTarget:W(c).slice(0,200),identity:C([c,...f?[f]:[]]),display:a(c,80),startDir:f?T(f):r,absPath:f,content:m}}return null}function C(t){const e=new Set,i=[];for(const s of t){const o=E(s);o.length===0||e.has(o)||(e.add(o),i.push(s))}return i}function K(t,e){if(!e)return{id:null,root:null};const i=t.prepare("SELECT id FROM projects WHERE path = ?");let s=$(e);for(let o=0;o<H;o++){const r=i.get(s);if(r)return{id:r.id,root:s};const c=T(s);if(c===s)break;s=c}return{id:null,root:null}}function q(t){if(t.recorded_by_agent==="legacy"&&t.run_id===null)return"";const e=t.run_id?` (run ${a(t.run_id,32)}${t.quarantine_scope==="run"?", run-quarantined":""})`:"";return` recorded by: ${a(t.recorded_by_agent,64)}${e}
3
- `}function z(t,e,i){const s=t.description?` description: ${a(t.description,200)}
4
- `:"",o=t.why_failed?` failed because: ${a(t.why_failed,300)}
5
- `:"";return`wyrm-guard: BLOCKED \u2014 ${e==="exact"?"this exact action is a recorded unresolved failure":e==="content"?"this edit re-introduces the code of a recorded unresolved failure":"this exact target previously failed and the failure is unresolved"} (deterministic ${e} match).
6
- failure #${t.id} [${t.severity}/${t.scope}] seen ${t.occurrences}x, last ${a(t.last_seen,32)}
7
- target: ${a(t.target,120)}
8
- `+s+o+q(t)+`Do NOT retry the same action \u2014 pick a different approach. If the underlying
9
- issue is truly fixed, resolve the failure first (wyrm_failure_resolve id=${t.id})
10
- and then retry.
11
- `+(i>0?`(+${i} more recorded match${i===1?"":"es"} \u2014 wyrm_failure_list)
12
- `:"")}function Q(t,e){const i=t.slice(0,F),s=i.map(r=>{const c=r.why_failed??r.description;return`- #${r.id} [${r.severity}/${r.scope}] ${a(r.target,80)} (seen ${r.occurrences}x, confidence ${r.confidence}): ${a(c,160)}`}),o=t.length-i.length;return["<wyrm-memory>",`wyrm-guard: ${t.length} recorded unresolved failure(s) look similar to \`${e}\` \u2014 check before proceeding:`,...s,...o>0?[`(+${o} more \u2014 wyrm_failure_list)`]:[],"If one applies, do not repeat it \u2014 adjust the approach or resolve it first (wyrm_failure_resolve).","</wyrm-memory>"].join(`
13
- `)}function X(t,e){const i={hookSpecificOutput:{hookEventName:"PreToolUse",additionalContext:Q(t,e)}};return{exitCode:0,stdout:JSON.stringify(i)+`
14
- `,stderr:""}}function Z(t,e=process.env){let i=null;try{const s=(e.WYRM_GUARD_MODE??"block").toLowerCase();if(s==="off"||!t||!t.trim())return g;const o=JSON.parse(t);if(typeof o!="object"||o===null)return g;const r=J(o);if(!r)return g;const c=e.WYRM_DB_PATH??O(L(),".wyrm","wyrm.db");i=new S(c,{readonly:!0,fileMustExist:!0}),i.pragma("busy_timeout = 100");const{id:d,root:m}=K(i,r.startDir),f=[...r.identity];m&&r.absPath&&r.absPath.startsWith(m+U)&&f.push(j(m,r.absPath));const h=P(e.WYRM_RUN_ID)??null,w=new A(i),y=new Set,_=[],R=C(f);for(const n of r.scopes)try{const u=w.checkVerdict(n,r.probeTarget,"",d,{callerRunId:h});for(const l of u.matches)y.has(l.id)||(y.add(l.id),_.push(l))}catch{}for(const n of r.scopes)for(const u of R)try{for(const l of w.targetIdentityMatches(n,u,d,{callerRunId:h}))y.has(l.id)||(y.add(l.id),_.push(w.toVerdictMatch(l,"target")))}catch{}let b=null;if(r.content&&r.scopes.includes("edit")&&/^(1|true|yes|on)$/i.test(e.WYRM_GUARD_CONTENT??""))try{const n=w.contentMatch(r.content,"edit",d);n&&!y.has(n.id)&&(y.add(n.id),b=w.toVerdictMatch(n,"target"))}catch{}if(_.length===0&&!b)return g;const N=new Set(R.map(n=>E(n))),v={exact:0,target:1,content:2},M=[..._.map(n=>({m:n,reason:n.match==="exact"?"exact":n.match==="target"||N.has(E(n.target))?"target":null})).filter(n=>n.reason!==null),...b?[{m:b,reason:"content"}]:[]].sort((n,u)=>v[n.reason]-v[u.reason]);if(M.length>0&&s!=="warn"){const n=M[0];try{const u=new S(c,{fileMustExist:!0});try{u.pragma("busy_timeout = 50");const l=P(e.WYRM_AGENT_ID);B(l!==null||h!==null?{agent_id:l,run_id:h,source:"env"}:Y,()=>new A(u).recordBlock({blocked:!0,matches:[n.m],recorded_by_agent:n.m.recorded_by_agent,run_id:n.m.run_id,confidence:n.m.confidence},d))}finally{u.close()}}catch{}return{exitCode:2,stdout:"",stderr:z(n.m,n.reason,_.length-1)}}return X(_,r.display)}catch(s){if(e.WYRM_GUARD_DEBUG==="1"){const o=s instanceof Error?s.message:String(s);return{exitCode:0,stdout:"",stderr:`wyrm-guard: internal error (fail-open): ${a(o,200)}
15
- `}}return g}finally{try{i?.close()}catch{}}}const tt=G(import.meta.url);let x=!1;try{x=typeof process.argv[1]=="string"&&I(process.argv[1])===tt}catch{x=!1}if(x){let t="";try{t=D(0,"utf-8")}catch{t=""}const e=Z(t);e.stdout&&process.stdout.write(e.stdout),e.stderr&&process.stderr.write(e.stderr),process.exit(e.exitCode)}export{Z as runGuard};
2
+ /**
3
+ * wyrm-guard — deterministic PreToolUse hook bin (v7 F2, T016; spec FR-2/G2).
4
+ *
5
+ * Harness-side negative learning: Claude Code pipes the PreToolUse payload for
6
+ * Bash/Edit/Write(/MultiEdit/NotebookEdit) to this bin; the bin runs the SAME
7
+ * deterministic failure_check the MCP tool runs (FailurePatterns.checkVerdict —
8
+ * Article III: bm25/match-tier arithmetic, zero LLM calls, zero network)
9
+ * against the LOCAL SQLite DB opened READ-ONLY, and answers on the Claude Code
10
+ * hook contract:
11
+ *
12
+ * BLOCK — exit 2, the failure pattern on stderr (Claude Code feeds stderr
13
+ * back to the model and does not execute the tool call).
14
+ * The deterministic block rule identity blocks, similarity warns:
15
+ * · an EXACT signature match (checkVerdict tier 'exact'), or
16
+ * · a TARGET-IDENTITY match: a stored failure whose scope+target
17
+ * normalize identical to the probed command / file path under
18
+ * normalizeIdentity — the FULL, UNCAPPED form of the signature
19
+ * normalization. Identity spans the whole command/path: the
20
+ * 200-char signature cap is range-scan recall only, so two
21
+ * long actions differing only past it never alias into one
22
+ * block, and the lookup filters identity BEFORE its result
23
+ * cap, so same-prefix cousins can never crowd an
24
+ * identical-target row out. v7 F2 review fix: this tier runs
25
+ * as a DEDICATED signature-prefix lookup
26
+ * (FailurePatterns.targetIdentityMatches) — production rows
27
+ * always carry a non-empty description, so full-signature
28
+ * equality against this bin's empty-description probe could
29
+ * never fire, and a block never depends on FTS recall.
30
+ * WARN — exit 0, hookSpecificOutput.additionalContext JSON on stdout
31
+ * (non-blocking context injection — the wyrm-push.py shape) for any
32
+ * other match.
33
+ * SILENT — exit 0, no output, when clean.
34
+ *
35
+ * Run/scope semantics (T014/T015): the caller's run identity comes from
36
+ * WYRM_RUN_ID (the F2 fleet convention — the orchestrator exports it once for
37
+ * the whole fleet) and is passed EXPLICITLY to checkVerdict, so same-run
38
+ * quarantined failures bite instantly while runless callers only ever see the
39
+ * project/global tiers. Project scoping: the payload `cwd` (or the edited
40
+ * file's directory) is walked up against projects.path — unenrolled paths
41
+ * still check the global (project-NULL) failures.
42
+ *
43
+ * Probe construction (recall under FTS5 implicit-AND, see query() in
44
+ * failure-patterns.ts):
45
+ * · Bash → scope 'command', probe target = the command string.
46
+ * · Files → scopes 'file' + 'edit', probe target = the BASENAME (a full path
47
+ * would AND-in every directory token and miss relpath-keyed rows); the
48
+ * identity rule then compares the stored target against the absolute,
49
+ * project-relative, and as-given path forms — equality on any blocks.
50
+ * The edit content signal is extracted/validated but NOT fed to the FTS
51
+ * probe: under implicit-AND it strictly narrows recall, and it can never
52
+ * produce an exact signature against recorder-authored descriptions.
53
+ *
54
+ * Budget (the wyrm-push.py ~200ms discipline): readonly open + fileMustExist,
55
+ * busy_timeout=100ms (a locked DB fails open instead of hanging the harness),
56
+ * a small fixed number of prepared statements per scope (the two checkVerdict
57
+ * stages + one identity range-probe per identity candidate), no migrations,
58
+ * no index work. Measured by bench/guard-budget.mjs (Article VIII).
59
+ *
60
+ * Analytics (v7 F2 review fix): a BLOCK files one failure_blocks row — the
61
+ * prevented-repeat ROI counter behind `wyrm_stats view=failures` — via a
62
+ * separate short-lived RW connection (busy_timeout=50ms). Strictly
63
+ * best-effort and fail-open: the CHECK connection stays readonly, and any
64
+ * ledger failure is swallowed without affecting the verdict. Blocks are rare
65
+ * (they abort the tool call), so the extra write never touches the hot path.
66
+ *
67
+ * A broken guard must NEVER block the operator's harness: ANY internal error →
68
+ * silent exit 0 (fail-open). Set WYRM_GUARD_DEBUG=1 to surface the swallowed
69
+ * reason on stderr (still exit 0 — debug output never blocks).
70
+ *
71
+ * Operator escape hatch: WYRM_GUARD_MODE=warn (downgrade blocks to warns) |
72
+ * off (disable entirely). Article I: fully offline, local DB only. Article
73
+ * VII: read-only handle, every value a bound parameter (inside
74
+ * FailurePatterns), stored text control-char-stripped + length-capped before
75
+ * it is rendered into hook output.
76
+ *
77
+ * Install: scripts/hooks/install.sh wires the PreToolUse matchers
78
+ * (`Bash` and `Edit|Write|MultiEdit|NotebookEdit`) into ~/.claude/settings.json.
79
+ *
80
+ * @copyright 2026 Ghost Protocol (Pvt) Ltd.
81
+ * @license Proprietary — (c) 2026 Ghost Protocol (Pvt) Ltd. All rights reserved. See LICENSE.
82
+ */
83
+ import Database from 'better-sqlite3';
84
+ import { readFileSync, realpathSync } from 'node:fs';
85
+ import { homedir } from 'node:os';
86
+ import { basename, dirname, isAbsolute, join, relative, resolve, sep } from 'node:path';
87
+ import { fileURLToPath } from 'node:url';
88
+ import { FailurePatterns, normalizeIdentity, STALE_ANCHOR_FLAG, } from './failure-patterns.js';
89
+ import { LEGACY_ENVELOPE, runWithActor, sanitizeActorId } from './handlers/boundary.js';
90
+ const SILENT = { exitCode: 0, stdout: '', stderr: '' };
91
+ /** Tools whose signal is a file path (+ content). Mirrors wyrm-push.py. */
92
+ const FILE_TOOLS = new Set(['Edit', 'Write', 'MultiEdit', 'NotebookEdit']);
93
+ /** How many warn-context matches to render at most. */
94
+ const WARN_MATCH_CAP = 3;
95
+ /** Max levels walked up when resolving cwd → projects.path. */
96
+ const PROJECT_WALK_LEVELS = 10;
97
+ // ── small helpers (all pure) ────────────────────────────────────────────────
98
+ function asString(v) {
99
+ return typeof v === 'string' && v.length > 0 ? v : null;
100
+ }
101
+ /** Strip control chars + cap length before stored text reaches hook output. */
102
+ function clean(s, max) {
103
+ if (!s)
104
+ return '';
105
+ // eslint-disable-next-line no-control-regex
106
+ return s.replace(/[\x00-\x1f\x7f]/g, ' ').replace(/\s+/g, ' ').trim().slice(0, max);
107
+ }
108
+ /** Extract the deterministic check signal from a PreToolUse payload, or null
109
+ * when the payload is not ours to judge (wrong event/tool/shape → SILENT). */
110
+ function extractSignal(payload) {
111
+ const event = payload['hook_event_name'];
112
+ if (event !== undefined && event !== 'PreToolUse')
113
+ return null;
114
+ const toolName = payload['tool_name'];
115
+ const input = payload['tool_input'];
116
+ if (typeof toolName !== 'string' || typeof input !== 'object' || input === null)
117
+ return null;
118
+ const toolInput = input;
119
+ const cwd = asString(payload['cwd']);
120
+ if (toolName === 'Bash') {
121
+ const command = asString(toolInput['command'])?.trim();
122
+ if (!command)
123
+ return null;
124
+ const capped = command.slice(0, 1000); // FTS probe + display stay bounded
125
+ return {
126
+ scopes: ['command'],
127
+ probeTarget: capped,
128
+ // Identity is the FULL command, uncapped: commands differing only past
129
+ // any cap are DIFFERENT actions, and the comparison cost is one linear
130
+ // normalize pass — the cap above bounds only the recall/display paths.
131
+ identity: [command],
132
+ display: clean(capped, 80),
133
+ startDir: cwd,
134
+ absPath: null,
135
+ };
136
+ }
137
+ if (FILE_TOOLS.has(toolName)) {
138
+ const filePath = asString(toolInput['file_path']) ?? asString(toolInput['notebook_path']);
139
+ if (!filePath)
140
+ return null;
141
+ // Content signal — extracted/shape-checked (see header for why it is not
142
+ // fed to the FTS probe).
143
+ const edits = toolInput['edits'];
144
+ const content = asString(toolInput['new_string'])
145
+ ?? asString(toolInput['content'])
146
+ ?? asString(toolInput['new_source'])
147
+ ?? (Array.isArray(edits)
148
+ ? edits.map((e) => asString(e?.['new_string']) ?? '').join(' ')
149
+ : '');
150
+ const abs = isAbsolute(filePath)
151
+ ? resolve(filePath)
152
+ : cwd && isAbsolute(cwd) ? resolve(cwd, filePath) : null;
153
+ return {
154
+ scopes: ['file', 'edit'],
155
+ probeTarget: basename(filePath).slice(0, 200),
156
+ // identity candidates: as-given + absolute, RAW and uncapped (same
157
+ // full-identity rule as the Bash candidate — deep paths must not alias
158
+ // at a truncation boundary); the project-relative form is appended in
159
+ // runGuard once the project root is known.
160
+ identity: dedupe([filePath, ...(abs ? [abs] : [])]),
161
+ display: clean(filePath, 80),
162
+ startDir: abs ? dirname(abs) : cwd,
163
+ absPath: abs,
164
+ content,
165
+ };
166
+ }
167
+ return null;
168
+ }
169
+ /** Dedupe identity candidates by their normalizeIdentity image (the form
170
+ * every identity comparison uses), keeping the first raw spelling. */
171
+ function dedupe(xs) {
172
+ const seen = new Set();
173
+ const out = [];
174
+ for (const x of xs) {
175
+ const key = normalizeIdentity(x);
176
+ if (key.length === 0 || seen.has(key))
177
+ continue;
178
+ seen.add(key);
179
+ out.push(x);
180
+ }
181
+ return out;
182
+ }
183
+ /** Walk up from startDir matching projects.path (indexed UNIQUE lookup per
184
+ * level, ≤PROJECT_WALK_LEVELS). Unenrolled → null (global failures still apply). */
185
+ function resolveProject(db, startDir) {
186
+ if (!startDir)
187
+ return { id: null, root: null };
188
+ const stmt = db.prepare('SELECT id FROM projects WHERE path = ?');
189
+ let p = resolve(startDir);
190
+ for (let i = 0; i < PROJECT_WALK_LEVELS; i++) {
191
+ const row = stmt.get(p);
192
+ if (row)
193
+ return { id: row.id, root: p };
194
+ const parent = dirname(p);
195
+ if (parent === p)
196
+ break;
197
+ p = parent;
198
+ }
199
+ return { id: null, root: null };
200
+ }
201
+ // ── rendering (plain ASCII — spec FR-3 renderer discipline) ─────────────────
202
+ function attributionLine(m) {
203
+ if (m.recorded_by_agent === 'legacy' && m.run_id === null)
204
+ return '';
205
+ const run = m.run_id
206
+ ? ` (run ${clean(m.run_id, 32)}${m.quarantine_scope === 'run' ? ', run-quarantined' : ''})`
207
+ : '';
208
+ return ` recorded by: ${clean(m.recorded_by_agent, 64)}${run}\n`;
209
+ }
210
+ function renderBlock(m, reason, extra) {
211
+ const desc = m.description ? ` description: ${clean(m.description, 200)}\n` : '';
212
+ const why = m.why_failed ? ` failed because: ${clean(m.why_failed, 300)}\n` : '';
213
+ const reasonText = reason === 'exact'
214
+ ? 'this exact action is a recorded unresolved failure'
215
+ : reason === 'content'
216
+ ? 'this edit re-introduces the code of a recorded unresolved failure'
217
+ : 'this exact target previously failed and the failure is unresolved';
218
+ return (`wyrm-guard: BLOCKED — ${reasonText} (deterministic ${reason} match).\n` +
219
+ ` failure #${m.id} [${m.severity}/${m.scope}] seen ${m.occurrences}x, last ${clean(m.last_seen, 32)}\n` +
220
+ ` target: ${clean(m.target, 120)}\n` +
221
+ desc +
222
+ why +
223
+ attributionLine(m) +
224
+ 'Do NOT retry the same action — pick a different approach. If the underlying\n' +
225
+ `issue is truly fixed, resolve the failure first (wyrm_failure_resolve id=${m.id})\n` +
226
+ 'and then retry.\n' +
227
+ (extra > 0 ? `(+${extra} more recorded match${extra === 1 ? '' : 'es'} — wyrm_failure_list)\n` : ''));
228
+ }
229
+ function renderWarn(matches, display) {
230
+ const shown = matches.slice(0, WARN_MATCH_CAP);
231
+ const lines = shown.map((m) => {
232
+ const why = m.why_failed ?? m.description;
233
+ return `- #${m.id} [${m.severity}/${m.scope}] ${clean(m.target, 80)} ` +
234
+ `(seen ${m.occurrences}x, confidence ${m.confidence}): ${clean(why, 160)}` +
235
+ // Staleness oracle: a downgraded block surfaces here as a WARN carrying
236
+ // the SAME flag text the MCP verdict emits (stale_anchor).
237
+ (m.stale_anchor ? `\n stale_anchor: ${m.stale_anchor}` : '');
238
+ });
239
+ const extra = matches.length - shown.length;
240
+ return [
241
+ '<wyrm-memory>',
242
+ `wyrm-guard: ${matches.length} recorded unresolved failure(s) look similar to \`${display}\` — check before proceeding:`,
243
+ ...lines,
244
+ ...(extra > 0 ? [`(+${extra} more — wyrm_failure_list)`] : []),
245
+ 'If one applies, do not repeat it — adjust the approach or resolve it first (wyrm_failure_resolve).',
246
+ '</wyrm-memory>',
247
+ ].join('\n');
248
+ }
249
+ function warnResult(matches, display) {
250
+ const body = {
251
+ hookSpecificOutput: {
252
+ hookEventName: 'PreToolUse',
253
+ additionalContext: renderWarn(matches, display),
254
+ },
255
+ };
256
+ return { exitCode: 0, stdout: JSON.stringify(body) + '\n', stderr: '' };
257
+ }
258
+ // ── the guard ───────────────────────────────────────────────────────────────
259
+ /**
260
+ * The whole guard as a pure-ish function of (stdin, env) — exported so tests
261
+ * exercise every path in-process. NEVER throws: any internal error returns
262
+ * SILENT (fail-open — a broken guard must never block the operator's harness).
263
+ */
264
+ export function runGuard(stdinText, env = process.env) {
265
+ let db = null;
266
+ try {
267
+ const mode = (env.WYRM_GUARD_MODE ?? 'block').toLowerCase();
268
+ if (mode === 'off')
269
+ return SILENT;
270
+ if (!stdinText || !stdinText.trim())
271
+ return SILENT;
272
+ const parsed = JSON.parse(stdinText);
273
+ if (typeof parsed !== 'object' || parsed === null)
274
+ return SILENT;
275
+ const signal = extractSignal(parsed);
276
+ if (!signal)
277
+ return SILENT;
278
+ const dbPath = env.WYRM_DB_PATH ?? join(homedir(), '.wyrm', 'wyrm.db');
279
+ db = new Database(dbPath, { readonly: true, fileMustExist: true });
280
+ db.pragma('busy_timeout = 100'); // a locked DB fails open, never hangs the harness
281
+ const { id: projectId, root } = resolveProject(db, signal.startDir);
282
+ // Project-relative identity candidate for file probes (recorders commonly
283
+ // key file failures by relpath). RAW like every identity candidate.
284
+ const identity = [...signal.identity];
285
+ if (root && signal.absPath && signal.absPath.startsWith(root + sep)) {
286
+ identity.push(relative(root, signal.absPath));
287
+ }
288
+ // The caller's run identity — explicit (deterministic in (stdin, env)),
289
+ // honoring the same WYRM_RUN_ID convention the ambient envelope uses.
290
+ const callerRunId = sanitizeActorId(env.WYRM_RUN_ID) ?? null;
291
+ const failures = new FailurePatterns(db);
292
+ const seen = new Set();
293
+ const matches = [];
294
+ const identityCandidates = dedupe(identity);
295
+ // (a) The checkVerdict stages: the exact-signature tier + FTS fuzzy
296
+ // recall for the WARN context. Runs first so a genuine full-signature
297
+ // match keeps its 'exact' classification.
298
+ for (const scope of signal.scopes) {
299
+ try {
300
+ const verdict = failures.checkVerdict(scope, signal.probeTarget, '', projectId, { callerRunId });
301
+ for (const m of verdict.matches) {
302
+ if (!seen.has(m.id)) {
303
+ seen.add(m.id);
304
+ matches.push(m);
305
+ }
306
+ }
307
+ }
308
+ catch {
309
+ // e.g. a probe that sanitizes to an empty FTS query — skip this scope
310
+ }
311
+ }
312
+ // (b) The deterministic TARGET-IDENTITY tier (v7 F2 review fix): a
313
+ // dedicated description-independent signature-prefix lookup per identity
314
+ // candidate — production rows (whose descriptions are never empty) block
315
+ // on it. Candidates go in RAW: identity equality runs over the FULL
316
+ // normalizeIdentity forms, and the lookup filters identity before its
317
+ // result cap — so neither the 200-char signature cap nor higher-ranked
318
+ // same-prefix cousins (colon-extended npm scripts, URLs, host:port) can
319
+ // alias or crowd out an identical-target row. Stage (a)'s FTS LIMIT 5
320
+ // can still be crowded, but it only feeds WARN context — a block never
321
+ // depends on FTS recall.
322
+ for (const scope of signal.scopes) {
323
+ for (const cand of identityCandidates) {
324
+ try {
325
+ for (const row of failures.targetIdentityMatches(scope, cand, projectId, { callerRunId })) {
326
+ if (!seen.has(row.id)) {
327
+ seen.add(row.id);
328
+ matches.push(failures.toVerdictMatch(row, 'target'));
329
+ }
330
+ }
331
+ }
332
+ catch {
333
+ // identity probe failure is never fatal — the other stages still ran
334
+ }
335
+ }
336
+ }
337
+ // (c) v7 Failure Firewall v2 — CONTENT tier (opt-in WYRM_GUARD_CONTENT): an
338
+ // Edit/Write whose code re-introduces a recorded failed pattern blocks even
339
+ // when the target path differs. Precision-gated in contentMatch; readonly;
340
+ // any error degrades to the path tiers above.
341
+ let contentHit = null;
342
+ if (signal.content && signal.scopes.includes('edit') &&
343
+ /^(1|true|yes|on)$/i.test(env.WYRM_GUARD_CONTENT ?? '')) {
344
+ try {
345
+ const row = failures.contentMatch(signal.content, 'edit', projectId);
346
+ if (row && !seen.has(row.id)) {
347
+ seen.add(row.id);
348
+ contentHit = failures.toVerdictMatch(row, 'target');
349
+ }
350
+ }
351
+ catch { /* content probe failure is never fatal */ }
352
+ }
353
+ if (matches.length === 0 && !contentHit)
354
+ return SILENT;
355
+ // Fuzzy→target upgrade set: FULL normalized identity forms — same truth
356
+ // predicate as targetIdentityMatches, so a fuzzy-recalled row upgrades to
357
+ // a block only on whole-string identity, never on a shared capped prefix.
358
+ const identitySet = new Set(identityCandidates.map((c) => normalizeIdentity(c)));
359
+ const RANK = { exact: 0, target: 1, content: 2 };
360
+ const blockers = [
361
+ ...matches
362
+ .map((m) => ({
363
+ m,
364
+ reason: m.match === 'exact'
365
+ ? 'exact'
366
+ : m.match === 'target' || identitySet.has(normalizeIdentity(m.target))
367
+ ? 'target' : null,
368
+ }))
369
+ .filter((x) => x.reason !== null),
370
+ ...(contentHit ? [{ m: contentHit, reason: 'content' }] : []),
371
+ ]
372
+ // exact identity outranks target, target outranks content
373
+ .sort((a, b) => RANK[a.reason] - RANK[b.reason]);
374
+ // STALENESS ORACLE (migration 30, PROTOCOL.md §10.2.5) — the SAME shared
375
+ // helper the MCP failure_check handler calls (FailurePatterns.
376
+ // staleAnchorIds), so the two surfaces cannot drift: a file/symbol-scoped
377
+ // blocker whose anchored source has POSITIVELY drifted since its failure
378
+ // was recorded downgrades from BLOCK to WARN, carrying the stale_anchor
379
+ // flag. An exact-signature match keeps its block, and so does every
380
+ // command/edit-attempt match (code moving on does not unprove a command
381
+ // failure) — both enforced inside the helper. Latency: evaluated ONLY
382
+ // when blockers exist (blocks are rare and abort the tool call anyway),
383
+ // stat-only fast path per anchor, readonly handle — the clean/hot path
384
+ // does not change. Fail-open: no root / missing files / any error ⇒
385
+ // empty set ⇒ verdict unchanged.
386
+ let firmBlockers = blockers;
387
+ let warnMatches = matches;
388
+ if (blockers.length > 0 && root) {
389
+ try {
390
+ const stale = failures.staleAnchorIds(blockers.map((b) => b.m), root);
391
+ if (stale.size > 0) {
392
+ firmBlockers = blockers.filter((b) => !stale.has(b.m.id));
393
+ warnMatches = matches.map((m) => stale.has(m.id) ? { ...m, stale_anchor: STALE_ANCHOR_FLAG } : m);
394
+ }
395
+ }
396
+ catch {
397
+ // staleness is advisory — an oracle error never changes the verdict
398
+ }
399
+ }
400
+ if (firmBlockers.length > 0 && mode !== 'warn') {
401
+ const top = firmBlockers[0];
402
+ // v7 F2 review fix: count the prevented repeat (the FR-2 ROI number).
403
+ // The check connection stays READONLY; the block row rides a separate
404
+ // short-lived RW connection — strictly best-effort and fail-open.
405
+ try {
406
+ const rw = new Database(dbPath, { fileMustExist: true });
407
+ try {
408
+ rw.pragma('busy_timeout = 50'); // a contended ledger is dropped, never waited on
409
+ const agentId = sanitizeActorId(env.WYRM_AGENT_ID);
410
+ const envelope = agentId !== null || callerRunId !== null
411
+ ? { agent_id: agentId, run_id: callerRunId, source: 'env' }
412
+ : LEGACY_ENVELOPE;
413
+ runWithActor(envelope, () => new FailurePatterns(rw).recordBlock({
414
+ blocked: true,
415
+ matches: [top.m],
416
+ recorded_by_agent: top.m.recorded_by_agent,
417
+ run_id: top.m.run_id,
418
+ confidence: top.m.confidence,
419
+ }, projectId));
420
+ }
421
+ finally {
422
+ rw.close();
423
+ }
424
+ }
425
+ catch {
426
+ // fail-open: analytics must never affect the block verdict
427
+ }
428
+ return {
429
+ exitCode: 2,
430
+ stdout: '',
431
+ stderr: renderBlock(top.m, top.reason, matches.length - 1),
432
+ };
433
+ }
434
+ return warnResult(warnMatches, signal.display);
435
+ }
436
+ catch (err) {
437
+ if (env.WYRM_GUARD_DEBUG === '1') {
438
+ const msg = err instanceof Error ? err.message : String(err);
439
+ return { exitCode: 0, stdout: '', stderr: `wyrm-guard: internal error (fail-open): ${clean(msg, 200)}\n` };
440
+ }
441
+ return SILENT;
442
+ }
443
+ finally {
444
+ try {
445
+ db?.close();
446
+ }
447
+ catch { /* readonly close failure is irrelevant */ }
448
+ }
449
+ }
450
+ // ── bin entry ───────────────────────────────────────────────────────────────
451
+ // realpathSync so the npm bin symlink (wyrm-guard → dist/wyrm-guard.js) still
452
+ // counts as "run directly"; importing this module (tests) never reads stdin.
453
+ const __filename = fileURLToPath(import.meta.url);
454
+ let isMain = false;
455
+ try {
456
+ isMain = typeof process.argv[1] === 'string' && realpathSync(process.argv[1]) === __filename;
457
+ }
458
+ catch {
459
+ isMain = false;
460
+ }
461
+ if (isMain) {
462
+ let stdinText = '';
463
+ try {
464
+ stdinText = readFileSync(0, 'utf-8'); // fd 0 — blocks to EOF, like wyrm-push.py
465
+ }
466
+ catch {
467
+ stdinText = '';
468
+ }
469
+ const result = runGuard(stdinText);
470
+ if (result.stdout)
471
+ process.stdout.write(result.stdout);
472
+ if (result.stderr)
473
+ process.stderr.write(result.stderr);
474
+ process.exit(result.exitCode);
475
+ }
476
+ //# sourceMappingURL=wyrm-guard.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"wyrm-guard.js","sourceRoot":"","sources":["../src/wyrm-guard.ts"],"names":[],"mappings":";AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgFG;AAEH,OAAO,QAAQ,MAAM,gBAAgB,CAAC;AACtC,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACrD,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,UAAU,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,GAAG,EAAE,MAAM,WAAW,CAAC;AACxF,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EACL,eAAe,EACf,iBAAiB,GAGlB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,eAAe,EAAE,YAAY,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAaxF,MAAM,MAAM,GAAgB,EAAE,QAAQ,EAAE,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC;AAEpE,2EAA2E;AAC3E,MAAM,UAAU,GAAG,IAAI,GAAG,CAAC,CAAC,MAAM,EAAE,OAAO,EAAE,WAAW,EAAE,cAAc,CAAC,CAAC,CAAC;AAE3E,uDAAuD;AACvD,MAAM,cAAc,GAAG,CAAC,CAAC;AACzB,+DAA+D;AAC/D,MAAM,mBAAmB,GAAG,EAAE,CAAC;AAuB/B,+EAA+E;AAE/E,SAAS,QAAQ,CAAC,CAAU;IAC1B,OAAO,OAAO,CAAC,KAAK,QAAQ,IAAI,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;AAC1D,CAAC;AAED,+EAA+E;AAC/E,SAAS,KAAK,CAAC,CAA4B,EAAE,GAAW;IACtD,IAAI,CAAC,CAAC;QAAE,OAAO,EAAE,CAAC;IAClB,4CAA4C;IAC5C,OAAO,CAAC,CAAC,OAAO,CAAC,kBAAkB,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;AACtF,CAAC;AAED;8EAC8E;AAC9E,SAAS,aAAa,CAAC,OAAgC;IACrD,MAAM,KAAK,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAAC;IACzC,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,YAAY;QAAE,OAAO,IAAI,CAAC;IAC/D,MAAM,QAAQ,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC;IACtC,MAAM,KAAK,GAAG,OAAO,CAAC,YAAY,CAAC,CAAC;IACpC,IAAI,OAAO,QAAQ,KAAK,QAAQ,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI;QAAE,OAAO,IAAI,CAAC;IAC7F,MAAM,SAAS,GAAG,KAAgC,CAAC;IACnD,MAAM,GAAG,GAAG,QAAQ,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC;IAErC,IAAI,QAAQ,KAAK,MAAM,EAAE,CAAC;QACxB,MAAM,OAAO,GAAG,QAAQ,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC;QACvD,IAAI,CAAC,OAAO;YAAE,OAAO,IAAI,CAAC;QAC1B,MAAM,MAAM,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,mCAAmC;QAC1E,OAAO;YACL,MAAM,EAAE,CAAC,SAAS,CAAC;YACnB,WAAW,EAAE,MAAM;YACnB,uEAAuE;YACvE,uEAAuE;YACvE,uEAAuE;YACvE,QAAQ,EAAE,CAAC,OAAO,CAAC;YACnB,OAAO,EAAE,KAAK,CAAC,MAAM,EAAE,EAAE,CAAC;YAC1B,QAAQ,EAAE,GAAG;YACb,OAAO,EAAE,IAAI;SACd,CAAC;IACJ,CAAC;IAED,IAAI,UAAU,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC7B,MAAM,QAAQ,GAAG,QAAQ,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC,IAAI,QAAQ,CAAC,SAAS,CAAC,eAAe,CAAC,CAAC,CAAC;QAC1F,IAAI,CAAC,QAAQ;YAAE,OAAO,IAAI,CAAC;QAC3B,yEAAyE;QACzE,yBAAyB;QACzB,MAAM,KAAK,GAAG,SAAS,CAAC,OAAO,CAAC,CAAC;QACjC,MAAM,OAAO,GACX,QAAQ,CAAC,SAAS,CAAC,YAAY,CAAC,CAAC;eAC9B,QAAQ,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC;eAC9B,QAAQ,CAAC,SAAS,CAAC,YAAY,CAAC,CAAC;eACjC,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;gBACtB,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,QAAQ,CAAE,CAAoC,EAAE,CAAC,YAAY,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC;gBACnG,CAAC,CAAC,EAAE,CAAC,CAAC;QACV,MAAM,GAAG,GAAG,UAAU,CAAC,QAAQ,CAAC;YAC9B,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC;YACnB,CAAC,CAAC,GAAG,IAAI,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;QAC3D,OAAO;YACL,MAAM,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC;YACxB,WAAW,EAAE,QAAQ,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC;YAC7C,mEAAmE;YACnE,uEAAuE;YACvE,sEAAsE;YACtE,2CAA2C;YAC3C,QAAQ,EAAE,MAAM,CAAC,CAAC,QAAQ,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;YACnD,OAAO,EAAE,KAAK,CAAC,QAAQ,EAAE,EAAE,CAAC;YAC5B,QAAQ,EAAE,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG;YAClC,OAAO,EAAE,GAAG;YACZ,OAAO;SACR,CAAC;IACJ,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC;AAED;sEACsE;AACtE,SAAS,MAAM,CAAC,EAAY;IAC1B,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAC;IAC/B,MAAM,GAAG,GAAa,EAAE,CAAC;IACzB,KAAK,MAAM,CAAC,IAAI,EAAE,EAAE,CAAC;QACnB,MAAM,GAAG,GAAG,iBAAiB,CAAC,CAAC,CAAC,CAAC;QACjC,IAAI,GAAG,CAAC,MAAM,KAAK,CAAC,IAAI,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC;YAAE,SAAS;QAChD,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QACd,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACd,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAED;oFACoF;AACpF,SAAS,cAAc,CACrB,EAAqB,EACrB,QAAuB;IAEvB,IAAI,CAAC,QAAQ;QAAE,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;IAC/C,MAAM,IAAI,GAAG,EAAE,CAAC,OAAO,CAAC,wCAAwC,CAAC,CAAC;IAClE,IAAI,CAAC,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC;IAC1B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,mBAAmB,EAAE,CAAC,EAAE,EAAE,CAAC;QAC7C,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAA+B,CAAC;QACtD,IAAI,GAAG;YAAE,OAAO,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC;QACxC,MAAM,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;QAC1B,IAAI,MAAM,KAAK,CAAC;YAAE,MAAM;QACxB,CAAC,GAAG,MAAM,CAAC;IACb,CAAC;IACD,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;AAClC,CAAC;AAED,+EAA+E;AAE/E,SAAS,eAAe,CAAC,CAAsB;IAC7C,IAAI,CAAC,CAAC,iBAAiB,KAAK,QAAQ,IAAI,CAAC,CAAC,MAAM,KAAK,IAAI;QAAE,OAAO,EAAE,CAAC;IACrE,MAAM,GAAG,GAAG,CAAC,CAAC,MAAM;QAClB,CAAC,CAAC,SAAS,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,gBAAgB,KAAK,KAAK,CAAC,CAAC,CAAC,mBAAmB,CAAC,CAAC,CAAC,EAAE,GAAG;QAC3F,CAAC,CAAC,EAAE,CAAC;IACP,OAAO,kBAAkB,KAAK,CAAC,CAAC,CAAC,iBAAiB,EAAE,EAAE,CAAC,GAAG,GAAG,IAAI,CAAC;AACpE,CAAC;AAED,SAAS,WAAW,CAAC,CAAsB,EAAE,MAAsC,EAAE,KAAa;IAChG,MAAM,IAAI,GAAG,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,kBAAkB,KAAK,CAAC,CAAC,CAAC,WAAW,EAAE,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC;IAClF,MAAM,GAAG,GAAG,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,qBAAqB,KAAK,CAAC,CAAC,CAAC,UAAU,EAAE,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC;IAClF,MAAM,UAAU,GAAG,MAAM,KAAK,OAAO;QACnC,CAAC,CAAC,oDAAoD;QACtD,CAAC,CAAC,MAAM,KAAK,SAAS;YACpB,CAAC,CAAC,mEAAmE;YACrE,CAAC,CAAC,mEAAmE,CAAC;IAC1E,OAAO,CACL,yBAAyB,UAAU,mBAAmB,MAAM,YAAY;QACxE,cAAc,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,QAAQ,IAAI,CAAC,CAAC,KAAK,UAAU,CAAC,CAAC,WAAW,WAAW,KAAK,CAAC,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,IAAI;QACxG,aAAa,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,GAAG,CAAC,IAAI;QACrC,IAAI;QACJ,GAAG;QACH,eAAe,CAAC,CAAC,CAAC;QAClB,+EAA+E;QAC/E,4EAA4E,CAAC,CAAC,EAAE,KAAK;QACrF,mBAAmB;QACnB,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,KAAK,uBAAuB,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,yBAAyB,CAAC,CAAC,CAAC,EAAE,CAAC,CACrG,CAAC;AACJ,CAAC;AAED,SAAS,UAAU,CAAC,OAA8B,EAAE,OAAe;IACjE,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,cAAc,CAAC,CAAC;IAC/C,MAAM,KAAK,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE;QAC5B,MAAM,GAAG,GAAG,CAAC,CAAC,UAAU,IAAI,CAAC,CAAC,WAAW,CAAC;QAC1C,OAAO,MAAM,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,QAAQ,IAAI,CAAC,CAAC,KAAK,KAAK,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,GAAG;YACpE,SAAS,CAAC,CAAC,WAAW,iBAAiB,CAAC,CAAC,UAAU,MAAM,KAAK,CAAC,GAAG,EAAE,GAAG,CAAC,EAAE,CAAC;IAC/E,CAAC,CAAC,CAAC;IACH,MAAM,KAAK,GAAG,OAAO,CAAC,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC;IAC5C,OAAO;QACL,eAAe;QACf,eAAe,OAAO,CAAC,MAAM,qDAAqD,OAAO,+BAA+B;QACxH,GAAG,KAAK;QACR,GAAG,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,KAAK,4BAA4B,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QAC9D,oGAAoG;QACpG,gBAAgB;KACjB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACf,CAAC;AAED,SAAS,UAAU,CAAC,OAA8B,EAAE,OAAe;IACjE,MAAM,IAAI,GAAG;QACX,kBAAkB,EAAE;YAClB,aAAa,EAAE,YAAY;YAC3B,iBAAiB,EAAE,UAAU,CAAC,OAAO,EAAE,OAAO,CAAC;SAChD;KACF,CAAC;IACF,OAAO,EAAE,QAAQ,EAAE,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,GAAG,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC;AAC1E,CAAC;AAED,+EAA+E;AAE/E;;;;GAIG;AACH,MAAM,UAAU,QAAQ,CACtB,SAAiB,EACjB,MAAyB,OAAO,CAAC,GAAG;IAEpC,IAAI,EAAE,GAA6B,IAAI,CAAC;IACxC,IAAI,CAAC;QACH,MAAM,IAAI,GAAG,CAAC,GAAG,CAAC,eAAe,IAAI,OAAO,CAAC,CAAC,WAAW,EAAE,CAAC;QAC5D,IAAI,IAAI,KAAK,KAAK;YAAE,OAAO,MAAM,CAAC;QAClC,IAAI,CAAC,SAAS,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE;YAAE,OAAO,MAAM,CAAC;QAEnD,MAAM,MAAM,GAAY,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;QAC9C,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,MAAM,KAAK,IAAI;YAAE,OAAO,MAAM,CAAC;QACjE,MAAM,MAAM,GAAG,aAAa,CAAC,MAAiC,CAAC,CAAC;QAChE,IAAI,CAAC,MAAM;YAAE,OAAO,MAAM,CAAC;QAE3B,MAAM,MAAM,GAAG,GAAG,CAAC,YAAY,IAAI,IAAI,CAAC,OAAO,EAAE,EAAE,OAAO,EAAE,SAAS,CAAC,CAAC;QACvE,EAAE,GAAG,IAAI,QAAQ,CAAC,MAAM,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC;QACnE,EAAE,CAAC,MAAM,CAAC,oBAAoB,CAAC,CAAC,CAAC,kDAAkD;QAEnF,MAAM,EAAE,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,GAAG,cAAc,CAAC,EAAE,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAC;QACpE,0EAA0E;QAC1E,oEAAoE;QACpE,MAAM,QAAQ,GAAG,CAAC,GAAG,MAAM,CAAC,QAAQ,CAAC,CAAC;QACtC,IAAI,IAAI,IAAI,MAAM,CAAC,OAAO,IAAI,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC,IAAI,GAAG,GAAG,CAAC,EAAE,CAAC;YACpE,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC;QAChD,CAAC;QAED,wEAAwE;QACxE,sEAAsE;QACtE,MAAM,WAAW,GAAG,eAAe,CAAC,GAAG,CAAC,WAAW,CAAC,IAAI,IAAI,CAAC;QAE7D,MAAM,QAAQ,GAAG,IAAI,eAAe,CAAC,EAAE,CAAC,CAAC;QACzC,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAC;QAC/B,MAAM,OAAO,GAA0B,EAAE,CAAC;QAC1C,MAAM,kBAAkB,GAAG,MAAM,CAAC,QAAQ,CAAC,CAAC;QAE5C,oEAAoE;QACpE,sEAAsE;QACtE,0CAA0C;QAC1C,KAAK,MAAM,KAAK,IAAI,MAAM,CAAC,MAAM,EAAE,CAAC;YAClC,IAAI,CAAC;gBACH,MAAM,OAAO,GAAG,QAAQ,CAAC,YAAY,CAAC,KAAK,EAAE,MAAM,CAAC,WAAW,EAAE,EAAE,EAAE,SAAS,EAAE,EAAE,WAAW,EAAE,CAAC,CAAC;gBACjG,KAAK,MAAM,CAAC,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;oBAChC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC;wBAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;wBAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;oBAAC,CAAC;gBAC3D,CAAC;YACH,CAAC;YAAC,MAAM,CAAC;gBACP,sEAAsE;YACxE,CAAC;QACH,CAAC;QAED,mEAAmE;QACnE,yEAAyE;QACzE,yEAAyE;QACzE,oEAAoE;QACpE,sEAAsE;QACtE,uEAAuE;QACvE,wEAAwE;QACxE,sEAAsE;QACtE,uEAAuE;QACvE,yBAAyB;QACzB,KAAK,MAAM,KAAK,IAAI,MAAM,CAAC,MAAM,EAAE,CAAC;YAClC,KAAK,MAAM,IAAI,IAAI,kBAAkB,EAAE,CAAC;gBACtC,IAAI,CAAC;oBACH,KAAK,MAAM,GAAG,IAAI,QAAQ,CAAC,qBAAqB,CAAC,KAAK,EAAE,IAAI,EAAE,SAAS,EAAE,EAAE,WAAW,EAAE,CAAC,EAAE,CAAC;wBAC1F,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC;4BAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;4BAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC,CAAC;wBAAC,CAAC;oBACpG,CAAC;gBACH,CAAC;gBAAC,MAAM,CAAC;oBACP,qEAAqE;gBACvE,CAAC;YACH,CAAC;QACH,CAAC;QACD,4EAA4E;QAC5E,4EAA4E;QAC5E,2EAA2E;QAC3E,8CAA8C;QAC9C,IAAI,UAAU,GAA+B,IAAI,CAAC;QAClD,IAAI,MAAM,CAAC,OAAO,IAAI,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC;YAChD,oBAAoB,CAAC,IAAI,CAAC,GAAG,CAAC,kBAAkB,IAAI,EAAE,CAAC,EAAE,CAAC;YAC5D,IAAI,CAAC;gBACH,MAAM,GAAG,GAAG,QAAQ,CAAC,YAAY,CAAC,MAAM,CAAC,OAAO,EAAE,MAAM,EAAE,SAAS,CAAC,CAAC;gBACrE,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC;oBAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;oBAAC,UAAU,GAAG,QAAQ,CAAC,cAAc,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;gBAAC,CAAC;YAC1G,CAAC;YAAC,MAAM,CAAC,CAAC,0CAA0C,CAAC,CAAC;QACxD,CAAC;QAED,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,IAAI,CAAC,UAAU;YAAE,OAAO,MAAM,CAAC;QAEvD,wEAAwE;QACxE,0EAA0E;QAC1E,0EAA0E;QAC1E,MAAM,WAAW,GAAG,IAAI,GAAG,CAAC,kBAAkB,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACjF,MAAM,IAAI,GAAG,EAAE,KAAK,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAW,CAAC;QAC1D,MAAM,QAAQ,GAAG;YACf,GAAG,OAAO;iBACP,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;gBACX,CAAC;gBACD,MAAM,EAAE,CAAC,CAAC,KAAK,KAAK,OAAO;oBACzB,CAAC,CAAE,OAAiB;oBACpB,CAAC,CAAC,CAAC,CAAC,KAAK,KAAK,QAAQ,IAAI,WAAW,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;wBACpE,CAAC,CAAE,QAAkB,CAAC,CAAC,CAAC,IAAI;aACjC,CAAC,CAAC;iBACF,MAAM,CAAC,CAAC,CAAC,EAA+D,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,IAAI,CAAC;YAChG,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,UAAU,EAAE,MAAM,EAAE,SAAkB,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;SACvE;YACC,0DAA0D;aACzD,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC;QAEnD,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,IAAI,IAAI,KAAK,MAAM,EAAE,CAAC;YAC3C,MAAM,GAAG,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;YACxB,sEAAsE;YACtE,sEAAsE;YACtE,kEAAkE;YAClE,IAAI,CAAC;gBACH,MAAM,EAAE,GAAG,IAAI,QAAQ,CAAC,MAAM,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC;gBACzD,IAAI,CAAC;oBACH,EAAE,CAAC,MAAM,CAAC,mBAAmB,CAAC,CAAC,CAAC,iDAAiD;oBACjF,MAAM,OAAO,GAAG,eAAe,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;oBACnD,MAAM,QAAQ,GAAG,OAAO,KAAK,IAAI,IAAI,WAAW,KAAK,IAAI;wBACvD,CAAC,CAAC,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,KAAc,EAAE;wBACpE,CAAC,CAAC,eAAe,CAAC;oBACpB,YAAY,CAAC,QAAQ,EAAE,GAAG,EAAE,CAAC,IAAI,eAAe,CAAC,EAAE,CAAC,CAAC,WAAW,CAC9D;wBACE,OAAO,EAAE,IAAI;wBACb,OAAO,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;wBAChB,iBAAiB,EAAE,GAAG,CAAC,CAAC,CAAC,iBAAiB;wBAC1C,MAAM,EAAE,GAAG,CAAC,CAAC,CAAC,MAAM;wBACpB,UAAU,EAAE,GAAG,CAAC,CAAC,CAAC,UAAU;qBAC7B,EACD,SAAS,CACV,CAAC,CAAC;gBACL,CAAC;wBAAS,CAAC;oBACT,EAAE,CAAC,KAAK,EAAE,CAAC;gBACb,CAAC;YACH,CAAC;YAAC,MAAM,CAAC;gBACP,2DAA2D;YAC7D,CAAC;YACD,OAAO;gBACL,QAAQ,EAAE,CAAC;gBACX,MAAM,EAAE,EAAE;gBACV,MAAM,EAAE,WAAW,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC;aAC3D,CAAC;QACJ,CAAC;QACD,OAAO,UAAU,CAAC,OAAO,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC;IAC7C,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,IAAI,GAAG,CAAC,gBAAgB,KAAK,GAAG,EAAE,CAAC;YACjC,MAAM,GAAG,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;YAC7D,OAAO,EAAE,QAAQ,EAAE,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,2CAA2C,KAAK,CAAC,GAAG,EAAE,GAAG,CAAC,IAAI,EAAE,CAAC;QAC7G,CAAC;QACD,OAAO,MAAM,CAAC;IAChB,CAAC;YAAS,CAAC;QACT,IAAI,CAAC;YAAC,EAAE,EAAE,KAAK,EAAE,CAAC;QAAC,CAAC;QAAC,MAAM,CAAC,CAAC,0CAA0C,CAAC,CAAC;IAC3E,CAAC;AACH,CAAC;AAED,+EAA+E;AAC/E,8EAA8E;AAC9E,6EAA6E;AAE7E,MAAM,UAAU,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAClD,IAAI,MAAM,GAAG,KAAK,CAAC;AACnB,IAAI,CAAC;IACH,MAAM,GAAG,OAAO,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,QAAQ,IAAI,YAAY,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,UAAU,CAAC;AAC/F,CAAC;AAAC,MAAM,CAAC;IACP,MAAM,GAAG,KAAK,CAAC;AACjB,CAAC;AAED,IAAI,MAAM,EAAE,CAAC;IACX,IAAI,SAAS,GAAG,EAAE,CAAC;IACnB,IAAI,CAAC;QACH,SAAS,GAAG,YAAY,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC,0CAA0C;IAClF,CAAC;IAAC,MAAM,CAAC;QACP,SAAS,GAAG,EAAE,CAAC;IACjB,CAAC;IACD,MAAM,MAAM,GAAG,QAAQ,CAAC,SAAS,CAAC,CAAC;IACnC,IAAI,MAAM,CAAC,MAAM;QAAE,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IACvD,IAAI,MAAM,CAAC,MAAM;QAAE,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IACvD,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;AAChC,CAAC"}
1
+ {"version":3,"file":"wyrm-guard.js","sourceRoot":"","sources":["../src/wyrm-guard.ts"],"names":[],"mappings":"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"}