@dzhechkov/harness-core 0.8.10 → 0.8.20

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 (251) hide show
  1. package/.dz-manifest.json +490 -170
  2. package/LICENSE +13 -0
  3. package/README.md +420 -6
  4. package/dist/agents-policy.d.ts +15 -1
  5. package/dist/agents-policy.d.ts.map +1 -1
  6. package/dist/agents-policy.js +27 -1
  7. package/dist/agents-policy.js.map +1 -1
  8. package/dist/amendment-trace.d.ts +72 -0
  9. package/dist/amendment-trace.d.ts.map +1 -1
  10. package/dist/amendment-trace.js +385 -17
  11. package/dist/amendment-trace.js.map +1 -1
  12. package/dist/backlog-public.d.ts +153 -0
  13. package/dist/backlog-public.d.ts.map +1 -0
  14. package/dist/backlog-public.js +415 -0
  15. package/dist/backlog-public.js.map +1 -0
  16. package/dist/backlog-transitions.d.ts +48 -0
  17. package/dist/backlog-transitions.d.ts.map +1 -0
  18. package/dist/backlog-transitions.js +64 -0
  19. package/dist/backlog-transitions.js.map +1 -0
  20. package/dist/backlog.d.ts.map +1 -1
  21. package/dist/backlog.js +13 -0
  22. package/dist/backlog.js.map +1 -1
  23. package/dist/claim-check.d.ts.map +1 -1
  24. package/dist/claim-check.js +24 -2
  25. package/dist/claim-check.js.map +1 -1
  26. package/dist/claude-hooks-assets.d.ts +93 -0
  27. package/dist/claude-hooks-assets.d.ts.map +1 -0
  28. package/dist/claude-hooks-assets.js +208 -0
  29. package/dist/claude-hooks-assets.js.map +1 -0
  30. package/dist/clean-room-smoke.d.ts +83 -0
  31. package/dist/clean-room-smoke.d.ts.map +1 -0
  32. package/dist/clean-room-smoke.js +138 -0
  33. package/dist/clean-room-smoke.js.map +1 -0
  34. package/dist/cmd-usage.d.ts.map +1 -1
  35. package/dist/cmd-usage.js +36 -6
  36. package/dist/cmd-usage.js.map +1 -1
  37. package/dist/codex-hooks-assets.d.ts +25 -7
  38. package/dist/codex-hooks-assets.d.ts.map +1 -1
  39. package/dist/codex-hooks-assets.js +138 -30
  40. package/dist/codex-hooks-assets.js.map +1 -1
  41. package/dist/codex-hooks.d.ts +21 -1
  42. package/dist/codex-hooks.d.ts.map +1 -1
  43. package/dist/codex-hooks.js +21 -1
  44. package/dist/codex-hooks.js.map +1 -1
  45. package/dist/codex-invoke.d.ts +73 -0
  46. package/dist/codex-invoke.d.ts.map +1 -0
  47. package/dist/codex-invoke.js +80 -0
  48. package/dist/codex-invoke.js.map +1 -0
  49. package/dist/course-staleness.d.ts +19 -0
  50. package/dist/course-staleness.d.ts.map +1 -0
  51. package/dist/course-staleness.js +95 -0
  52. package/dist/course-staleness.js.map +1 -0
  53. package/dist/destructive-guard-hook.d.ts +40 -0
  54. package/dist/destructive-guard-hook.d.ts.map +1 -0
  55. package/dist/destructive-guard-hook.js +109 -0
  56. package/dist/destructive-guard-hook.js.map +1 -0
  57. package/dist/destructive-guard.d.ts +27 -0
  58. package/dist/destructive-guard.d.ts.map +1 -0
  59. package/dist/destructive-guard.js +2808 -0
  60. package/dist/destructive-guard.js.map +1 -0
  61. package/dist/discrimination-gate.d.ts +88 -3
  62. package/dist/discrimination-gate.d.ts.map +1 -1
  63. package/dist/discrimination-gate.js +173 -16
  64. package/dist/discrimination-gate.js.map +1 -1
  65. package/dist/event-chain.d.ts +30 -0
  66. package/dist/event-chain.d.ts.map +1 -1
  67. package/dist/event-chain.js +24 -0
  68. package/dist/event-chain.js.map +1 -1
  69. package/dist/feature-adr-routing.d.ts +95 -1
  70. package/dist/feature-adr-routing.d.ts.map +1 -1
  71. package/dist/feature-adr-routing.js +193 -27
  72. package/dist/feature-adr-routing.js.map +1 -1
  73. package/dist/guard.d.ts +98 -0
  74. package/dist/guard.d.ts.map +1 -1
  75. package/dist/guard.js +308 -0
  76. package/dist/guard.js.map +1 -1
  77. package/dist/harness-core-location.d.ts +18 -0
  78. package/dist/harness-core-location.d.ts.map +1 -0
  79. package/dist/harness-core-location.js +42 -0
  80. package/dist/harness-core-location.js.map +1 -0
  81. package/dist/index.d.ts +32 -11
  82. package/dist/index.d.ts.map +1 -1
  83. package/dist/index.js +32 -7
  84. package/dist/index.js.map +1 -1
  85. package/dist/lead-shift-gate.d.ts +95 -0
  86. package/dist/lead-shift-gate.d.ts.map +1 -0
  87. package/dist/lead-shift-gate.js +100 -0
  88. package/dist/lead-shift-gate.js.map +1 -0
  89. package/dist/ledger-backfill.d.ts +11 -1
  90. package/dist/ledger-backfill.d.ts.map +1 -1
  91. package/dist/ledger-backfill.js +19 -0
  92. package/dist/ledger-backfill.js.map +1 -1
  93. package/dist/loop-blobs.generated.d.ts +1 -1
  94. package/dist/loop-blobs.generated.d.ts.map +1 -1
  95. package/dist/loop-blobs.generated.js +12 -3
  96. package/dist/loop-blobs.generated.js.map +1 -1
  97. package/dist/loop-lint.d.ts.map +1 -1
  98. package/dist/loop-lint.js +56 -7
  99. package/dist/loop-lint.js.map +1 -1
  100. package/dist/loop-plan-graph.d.ts +1 -3
  101. package/dist/loop-plan-graph.d.ts.map +1 -1
  102. package/dist/loop-plan-graph.js +70 -1
  103. package/dist/loop-plan-graph.js.map +1 -1
  104. package/dist/loop-trace.d.ts.map +1 -1
  105. package/dist/loop-trace.js +16 -2
  106. package/dist/loop-trace.js.map +1 -1
  107. package/dist/managed-hooks.d.ts +5 -6
  108. package/dist/managed-hooks.d.ts.map +1 -1
  109. package/dist/managed-hooks.js +2 -2
  110. package/dist/managed-hooks.js.map +1 -1
  111. package/dist/model-recommender.d.ts.map +1 -1
  112. package/dist/model-recommender.js +14 -3
  113. package/dist/model-recommender.js.map +1 -1
  114. package/dist/mutation-gate.d.ts +39 -36
  115. package/dist/mutation-gate.d.ts.map +1 -1
  116. package/dist/mutation-gate.js +111 -5
  117. package/dist/mutation-gate.js.map +1 -1
  118. package/dist/operations.d.ts.map +1 -1
  119. package/dist/operations.js +90 -5
  120. package/dist/operations.js.map +1 -1
  121. package/dist/patterns.d.ts +23 -0
  122. package/dist/patterns.d.ts.map +1 -1
  123. package/dist/patterns.js +10 -0
  124. package/dist/patterns.js.map +1 -1
  125. package/dist/plugin.d.ts.map +1 -1
  126. package/dist/plugin.js +27 -5
  127. package/dist/plugin.js.map +1 -1
  128. package/dist/publish.d.ts +11 -0
  129. package/dist/publish.d.ts.map +1 -1
  130. package/dist/publish.js +16 -2
  131. package/dist/publish.js.map +1 -1
  132. package/dist/recommend.d.ts +4 -5
  133. package/dist/recommend.d.ts.map +1 -1
  134. package/dist/recommend.js +110 -45
  135. package/dist/recommend.js.map +1 -1
  136. package/dist/registry.d.ts +32 -1
  137. package/dist/registry.d.ts.map +1 -1
  138. package/dist/registry.js +168 -11
  139. package/dist/registry.js.map +1 -1
  140. package/dist/run-records.d.ts +3 -0
  141. package/dist/run-records.d.ts.map +1 -1
  142. package/dist/run-records.js +18 -0
  143. package/dist/run-records.js.map +1 -1
  144. package/dist/score.d.ts +95 -0
  145. package/dist/score.d.ts.map +1 -1
  146. package/dist/score.js +289 -6
  147. package/dist/score.js.map +1 -1
  148. package/dist/session-retro.d.ts +121 -2
  149. package/dist/session-retro.d.ts.map +1 -1
  150. package/dist/session-retro.js +454 -11
  151. package/dist/session-retro.js.map +1 -1
  152. package/dist/setup.d.ts +28 -0
  153. package/dist/setup.d.ts.map +1 -1
  154. package/dist/setup.js +223 -6
  155. package/dist/setup.js.map +1 -1
  156. package/dist/sign.d.ts.map +1 -1
  157. package/dist/sign.js +18 -1
  158. package/dist/sign.js.map +1 -1
  159. package/dist/skill-selection.d.ts +72 -0
  160. package/dist/skill-selection.d.ts.map +1 -0
  161. package/dist/skill-selection.js +76 -0
  162. package/dist/skill-selection.js.map +1 -0
  163. package/dist/skills-verify.d.ts +34 -1
  164. package/dist/skills-verify.d.ts.map +1 -1
  165. package/dist/skills-verify.js +82 -0
  166. package/dist/skills-verify.js.map +1 -1
  167. package/dist/stage-line.d.ts +68 -0
  168. package/dist/stage-line.d.ts.map +1 -0
  169. package/dist/stage-line.js +129 -0
  170. package/dist/stage-line.js.map +1 -0
  171. package/dist/statusline.d.ts +99 -0
  172. package/dist/statusline.d.ts.map +1 -1
  173. package/dist/statusline.js +310 -44
  174. package/dist/statusline.js.map +1 -1
  175. package/dist/stem.d.ts +12 -0
  176. package/dist/stem.d.ts.map +1 -0
  177. package/dist/stem.js +89 -0
  178. package/dist/stem.js.map +1 -0
  179. package/dist/store-counts.d.ts +26 -0
  180. package/dist/store-counts.d.ts.map +1 -0
  181. package/dist/store-counts.js +125 -0
  182. package/dist/store-counts.js.map +1 -0
  183. package/dist/store-guard.d.ts +106 -0
  184. package/dist/store-guard.d.ts.map +1 -0
  185. package/dist/store-guard.js +294 -0
  186. package/dist/store-guard.js.map +1 -0
  187. package/dist/swarm-brief.d.ts +95 -0
  188. package/dist/swarm-brief.d.ts.map +1 -0
  189. package/dist/swarm-brief.js +660 -0
  190. package/dist/swarm-brief.js.map +1 -0
  191. package/dist/telemetry-vocabulary.d.ts +7 -0
  192. package/dist/telemetry-vocabulary.d.ts.map +1 -1
  193. package/dist/telemetry-vocabulary.js +29 -0
  194. package/dist/telemetry-vocabulary.js.map +1 -1
  195. package/dist/trace-bundle.d.ts +8 -0
  196. package/dist/trace-bundle.d.ts.map +1 -1
  197. package/dist/trace-bundle.js +11 -0
  198. package/dist/trace-bundle.js.map +1 -1
  199. package/package.json +10 -9
  200. package/sbom.json +1033 -233
  201. package/src/agents-policy.ts +46 -2
  202. package/src/amendment-trace.ts +441 -19
  203. package/src/backlog-public.ts +503 -0
  204. package/src/backlog-transitions.ts +77 -0
  205. package/src/backlog.ts +12 -0
  206. package/src/claim-check.ts +25 -2
  207. package/src/claude-hooks-assets.ts +227 -0
  208. package/src/clean-room-smoke.ts +195 -0
  209. package/src/cmd-usage.ts +29 -5
  210. package/src/codex-hooks-assets.ts +140 -30
  211. package/src/codex-hooks.ts +21 -1
  212. package/src/codex-invoke.ts +138 -0
  213. package/src/course-staleness.ts +125 -0
  214. package/src/destructive-guard-hook.ts +151 -0
  215. package/src/destructive-guard.ts +3027 -0
  216. package/src/discrimination-gate.ts +262 -19
  217. package/src/event-chain.ts +41 -0
  218. package/src/feature-adr-routing.ts +220 -22
  219. package/src/guard.ts +358 -0
  220. package/src/harness-core-location.ts +44 -0
  221. package/src/index.ts +121 -7
  222. package/src/lead-shift-gate.ts +145 -0
  223. package/src/ledger-backfill.ts +20 -1
  224. package/src/loop-blobs.generated.ts +12 -3
  225. package/src/loop-lint.ts +52 -7
  226. package/src/loop-plan-graph.ts +66 -1
  227. package/src/loop-trace.ts +13 -1
  228. package/src/managed-hooks.ts +5 -6
  229. package/src/model-recommender.ts +14 -3
  230. package/src/mutation-gate.ts +165 -5
  231. package/src/operations.ts +83 -5
  232. package/src/patterns.ts +33 -0
  233. package/src/plugin.ts +27 -5
  234. package/src/publish.ts +27 -2
  235. package/src/recommend.ts +116 -46
  236. package/src/registry.ts +147 -13
  237. package/src/run-records.ts +23 -0
  238. package/src/score.ts +377 -7
  239. package/src/session-retro.ts +466 -11
  240. package/src/setup.ts +246 -9
  241. package/src/sign.ts +18 -1
  242. package/src/skill-selection.ts +111 -0
  243. package/src/skills-verify.ts +99 -1
  244. package/src/stage-line.ts +151 -0
  245. package/src/statusline.ts +396 -47
  246. package/src/stem.ts +87 -0
  247. package/src/store-counts.ts +154 -0
  248. package/src/store-guard.ts +388 -0
  249. package/src/swarm-brief.ts +661 -0
  250. package/src/telemetry-vocabulary.ts +36 -0
  251. package/src/trace-bundle.ts +10 -0
@@ -13,11 +13,15 @@
13
13
  *
14
14
  * @packageDocumentation
15
15
  */
16
- import { existsSync, mkdirSync, readFileSync, readdirSync, statSync, unlinkSync, writeFileSync } from 'node:fs';
17
- import { join, resolve } from 'node:path';
16
+ import { appendFileSync, existsSync, mkdirSync, readFileSync, readdirSync, statSync, unlinkSync, writeFileSync } from 'node:fs';
17
+ import { basename, join, resolve } from 'node:path';
18
18
  import { createRequire } from 'node:module';
19
19
  import { listBrain } from './brain.js';
20
+ import { withNamedLockSync } from './named-lock.js';
20
21
  import { RECALL_USAGE_LOG_RELATIVE, aggregateRecallUsage, parseRecallUsageLog } from './recall-usage.js';
22
+ import { countLearningStoreRowsReadonly, countSqliteRowsReadonly } from './store-counts.js';
23
+ import { checkStoreHealth, readStoreMark, storeSnapshotPath, } from './store-guard.js';
24
+ const QUARANTINE_TIER_DRIFT_TOLERANCE = 5;
21
25
  /** Path of the SQLite pattern store (the Tier-3 backend). */
22
26
  function sqlitePatternPath(projectRoot) {
23
27
  return join(projectRoot, '.dz', 'memory', 'patterns.sqlite');
@@ -50,33 +54,29 @@ export function featureAdrStatePath(projectRoot, slug) {
50
54
  }
51
55
  /**
52
56
  * Freshness window for the `/feature-adr` panel: a run older than this is considered finished, so
53
- * its state must NOT keep showing a stale panel in the status bar. 30 minutes (in ms).
57
+ * its state must NOT keep showing a stale panel in the status bar. 90 minutes (in ms).
58
+ *
59
+ * fa-phase-statusline (ADR-001 D4): extended 30→90 min as an EXPLICIT behaviour change so the phase
60
+ * line can fade in stages — the renderer shows `⚠ <N>м без отчёта` from 30 min of slot silence and
61
+ * nothing at all from 90. One window for the reader; the staging lives in
62
+ * {@link renderFeatureAdrPhaseLine}.
54
63
  */
55
- const FEATURE_ADR_FRESH_MS = 30 * 60 * 1_000;
64
+ const FEATURE_ADR_FRESH_MS = 90 * 60 * 1_000;
65
+ /** Slot silence (ms) after which the phase line renders `⚠ <N>м без отчёта` instead of progress. */
66
+ const FEATURE_ADR_WARN_MS = 30 * 60 * 1_000;
67
+ /** Valid complexity tiers for the phase line — anything else renders as `[?]` with `?/?`. */
68
+ const FEATURE_ADR_TIERS = new Set(['S', 'M', 'L', 'XL']);
56
69
  /**
57
- * Count learned patterns via a direct **readonly** `COUNT(*)` with a short
58
- * `busy_timeout` no FTS rebuild, no schema write, no waiting on a live writer.
59
- * Returns `undefined` (not `0`) when the fast path is unavailable so the caller
60
- * can fall back to a readonly jsonl line-count; any error → `undefined`.
70
+ * Active-step lists per tier (mirrors the Step-0 router bands in the /feature-adr SKILL):
71
+ * done/total on the phase line is the label's step-number POSITION in its tier's list. A label
72
+ * whose number is not in the list renders `?/?` the panel never guesses progress.
61
73
  */
62
- function countSqlitePatternsReadonly(sqlitePath) {
63
- try {
64
- const require = createRequire(import.meta.url);
65
- const Database = require('better-sqlite3');
66
- const db = new Database(sqlitePath, { readonly: true });
67
- try {
68
- db.pragma('busy_timeout = 100'); // back off fast — never block the 300ms refresh on a write lock
69
- const row = db.prepare('SELECT COUNT(*) as cnt FROM memory_records').get();
70
- return typeof row?.cnt === 'number' ? row.cnt : undefined;
71
- }
72
- finally {
73
- db.close();
74
- }
75
- }
76
- catch {
77
- return undefined;
78
- }
79
- }
74
+ const FEATURE_ADR_ACTIVE_STEPS = {
75
+ S: [0, 1, 6, 7, 8],
76
+ M: [0, 1, 3, 3.5, 5, 6, 7, 8],
77
+ L: [0, 1, 2, 3, 3.5, 4, 5, 6, 7, 8, 9],
78
+ XL: [0, 1, 2, 3, 3.5, 4, 5, 6, 7, 8, 9],
79
+ };
80
80
  /**
81
81
  * Count the legacy/default `.dz/patterns.jsonl` store by reading the FILE directly — READONLY, no
82
82
  * backend open, no FTS rebuild, no schema write. Used only when the SQLite readonly COUNT is
@@ -103,7 +103,7 @@ function countJsonlPatternsReadonly(projectRoot) {
103
103
  function countLearnedPatterns(projectRoot) {
104
104
  const sqlitePath = sqlitePatternPath(projectRoot);
105
105
  if (existsSync(sqlitePath)) {
106
- const fast = countSqlitePatternsReadonly(sqlitePath);
106
+ const fast = countSqliteRowsReadonly(sqlitePath, 'memory_records');
107
107
  if (fast !== undefined)
108
108
  return fast;
109
109
  }
@@ -193,6 +193,8 @@ export function readFeatureAdrState(projectRoot, now = Date.now()) {
193
193
  return undefined;
194
194
  if (typeof parsed.step !== 'string' || parsed.step.length === 0)
195
195
  return undefined;
196
+ if (parsed.step.trim() === 'done')
197
+ return undefined; // terminal slots never enter arbitration
196
198
  if (typeof parsed.ts !== 'string')
197
199
  return undefined;
198
200
  const tsMs = Date.parse(parsed.ts);
@@ -215,7 +217,11 @@ export function readFeatureAdrState(projectRoot, now = Date.now()) {
215
217
  stored: num(parsed.stored),
216
218
  ...(num(parsed.reinforced) > 0 ? { reinforced: num(parsed.reinforced) } : {}),
217
219
  ts: parsed.ts,
220
+ ...(typeof parsed.runId === 'string' && parsed.runId.trim() !== '' ? { runId: parsed.runId } : {}),
218
221
  ...(typeof parsed.mode === 'string' && parsed.mode.length > 0 ? { mode: parsed.mode } : {}),
222
+ ...(typeof parsed.tier === 'string' && FEATURE_ADR_TIERS.has(parsed.tier) ? { tier: parsed.tier } : {}),
223
+ ...(typeof parsed.phaseStartTs === 'string' && !Number.isNaN(Date.parse(parsed.phaseStartTs))
224
+ ? { phaseStartTs: parsed.phaseStartTs } : {}),
219
225
  };
220
226
  return { state, tsMs, rank: kind === 'feature-adr' ? 1 : 0 };
221
227
  }
@@ -236,6 +242,56 @@ export function readFeatureAdrState(projectRoot, now = Date.now()) {
236
242
  }
237
243
  return winner?.state;
238
244
  }
245
+ /**
246
+ * Read ONE slot file raw (no freshness window, no arbitration) — the write path's "previous state".
247
+ * Best-effort: absent/corrupt → `undefined`.
248
+ */
249
+ function readPreviousSlot(root, slug) {
250
+ try {
251
+ const parsed = JSON.parse(readFileSync(featureAdrStatePath(root, slug), 'utf-8'));
252
+ if (typeof parsed.step !== 'string' || typeof parsed.ts !== 'string')
253
+ return undefined;
254
+ return parsed;
255
+ }
256
+ catch {
257
+ return undefined;
258
+ }
259
+ }
260
+ /**
261
+ * fa-phase-statusline (ADR-001 D3): when a step label CHANGES, the phase that just ended leaves one
262
+ * telemetry row in the EXISTING `.dz/feature-adr/run-cost-ledger.jsonl`:
263
+ * `{"_schema":"feature-adr-phase/1","kind":"phase",slug,tier,mode,step,wallSec,ts}`.
264
+ * DELIBERATE field choices, both load-bearing:
265
+ * - `ts`, never `date` — cadence.ts skips ledger rows without a string `date`, so shipment dating
266
+ * is untouched by construction (pinned in cadence.test.ts);
267
+ * - `wallSec` (wall seconds of the ended phase), never `minutes` — 1-3 minute phases keep resolution.
268
+ * The ledger is NEVER created here: phase rows enrich the existing witness file, they are not a new
269
+ * store. Append-only (`appendFileSync`, one line) — not a read-modify-write, so no named lock owed.
270
+ * Best-effort: any failure is swallowed (the panel write must never break the pipeline).
271
+ */
272
+ function appendPhaseRow(root, prev, resolved, now) {
273
+ try {
274
+ const ledger = join(root, '.dz', 'feature-adr', 'run-cost-ledger.jsonl');
275
+ if (!existsSync(ledger))
276
+ return; // append to the EXISTING ledger only — never create one
277
+ const startedMs = Date.parse(prev.phaseStartTs ?? prev.ts ?? '');
278
+ if (Number.isNaN(startedMs))
279
+ return; // an unmeasurable phase leaves no row — never a guess
280
+ const wallSec = Math.max(0, Math.round((now - startedMs) / 1000));
281
+ const row = {
282
+ _schema: 'feature-adr-phase/1',
283
+ kind: 'phase',
284
+ slug: resolved.slug,
285
+ tier: resolved.tier ?? null,
286
+ mode: prev.mode ?? resolved.mode ?? null,
287
+ step: prev.step,
288
+ wallSec,
289
+ ts: new Date(now).toISOString(),
290
+ };
291
+ appendFileSync(ledger, `${JSON.stringify(row)}\n`);
292
+ }
293
+ catch { /* best-effort telemetry — never blocks the slot write */ }
294
+ }
239
295
  /**
240
296
  * Record the live `/feature-adr` learning state — called by the pipeline at Steps 0/8/9. Computes
241
297
  * `pool` as the total learned-pattern count (via the same readonly {@link countLearnedPatterns} the
@@ -245,7 +301,17 @@ export function readFeatureAdrState(projectRoot, now = Date.now()) {
245
301
  * @param now Injectable clock (epoch ms) for the write timestamp — defaults to `Date.now()`.
246
302
  */
247
303
  export function writeFeatureAdrState(projectRoot, input, now = Date.now()) {
304
+ return writeFeatureAdrStateDetailed(projectRoot, input, now).state;
305
+ }
306
+ /**
307
+ * The same write as {@link writeFeatureAdrState}, but it SAYS WHY it did not complete and what is
308
+ * known about its disk effect. A refusal before the transition returns `refusedEffect:'none'`; once
309
+ * the callback begins, a refusal returns `refusedEffect:'unknown'` because an append or slot write
310
+ * may already have landed. The pipeline still never breaks — the caller decides, this never throws.
311
+ */
312
+ export function writeFeatureAdrStateDetailed(projectRoot, input, now = Date.now()) {
248
313
  const root = resolve(projectRoot);
314
+ let transactionStarted = false;
249
315
  let pool = 0;
250
316
  try {
251
317
  pool = countLearnedPatterns(root);
@@ -253,22 +319,12 @@ export function writeFeatureAdrState(projectRoot, input, now = Date.now()) {
253
319
  catch {
254
320
  pool = 0;
255
321
  }
256
- const state = {
257
- kind: input.kind === 'loop' ? 'loop' : 'feature-adr',
258
- slug: input.slug,
259
- step: input.step,
260
- pool,
261
- recalled: Number.isFinite(input.recalled) ? input.recalled : 0,
262
- stored: Number.isFinite(input.stored) ? input.stored : 0,
263
- ...(input.reinforced !== undefined && Number.isFinite(input.reinforced) ? { reinforced: input.reinforced } : {}),
264
- ts: new Date(now).toISOString(),
265
- ...(input.mode !== undefined && input.mode.length > 0 ? { mode: input.mode } : {}),
266
- };
267
322
  try {
268
323
  const dir = featureAdrStateDir(root);
269
324
  mkdirSync(dir, { recursive: true });
270
325
  // Housekeeping belongs only on this write path, never the ~300ms render path. Every file is
271
326
  // independently guarded so an unreadable/racing entry cannot prevent the live state write.
327
+ // Kept OUTSIDE the lock below: it is per-file guarded and takes no part in the transition race.
272
328
  try {
273
329
  const cutoff = Date.now() - 24 * 60 * 60 * 1_000;
274
330
  for (const name of readdirSync(dir)) {
@@ -283,13 +339,99 @@ export function writeFeatureAdrState(projectRoot, input, now = Date.now()) {
283
339
  }
284
340
  }
285
341
  catch { /* best-effort directory cleanup */ }
286
- const path = featureAdrStatePath(root, input.slug);
287
- writeFileSync(path, `${JSON.stringify(state, null, 2)}\n`);
342
+ // fa-phase-statusline QE fix (P2, cross-family review of 656d6903): read/compare/append/write
343
+ // is a read-modify-write over a shared slot — two concurrent design-sibling ckpt agents both
344
+ // read the same previous slot, both see a label change, and both append a phase row, breaking
345
+ // the one-row-per-transition promise. So the whole transaction runs under the repo's named
346
+ // per-store lock (cross-runtime-concurrency rule) — a short, fully synchronous critical
347
+ // section, no subprocess, no model turn. A lock timeout throws → the outer catch refuses the
348
+ // write (returns undefined): no new claim rather than a raced one.
349
+ const transition = () => {
350
+ transactionStarted = true;
351
+ // ADR-001 D3/D5: the previous slot is the phase clock. Same step label → the phase start
352
+ // carries forward; a CHANGED label ends the previous phase (one telemetry row) and starts a
353
+ // new one now. Tier is stored state, carried forward when a record omits it.
354
+ const prev = readPreviousSlot(root, input.slug);
355
+ const tier = typeof input.tier === 'string' && FEATURE_ADR_TIERS.has(input.tier)
356
+ ? input.tier
357
+ : (typeof prev?.tier === 'string' && FEATURE_ADR_TIERS.has(prev.tier) ? prev.tier : undefined);
358
+ const nowIso = new Date(now).toISOString();
359
+ const prevRunId = typeof prev?.runId === 'string' && prev.runId.trim() !== '' ? prev.runId.trim() : undefined;
360
+ const runId = typeof input.runId === 'string' && input.runId.trim() !== '' ? input.runId.trim() : undefined;
361
+ const sameRun = prevRunId !== undefined && runId !== undefined && prevRunId === runId;
362
+ const legacyRunScope = prevRunId === undefined && runId === undefined;
363
+ const sameRunScope = sameRun || legacyRunScope;
364
+ // MONOTONIC STEP GUARD (P1, cross-family review of 656d6903): the pipeline's pre-existing
365
+ // fallback recorder fires AFTER the router checkpoint, so "Step 0 recall" used to overwrite
366
+ // "Step 1 Design" and the panel deterministically regressed to Step 0 for the whole design
367
+ // fan (with the design time mis-attributed to Step 0 in telemetry). A plain step label whose
368
+ // number goes BACKWARDS within the SAME identified invocation is a stale duplicate of an
369
+ // earlier step: its counters/tier/mode/ts are absorbed, but the step and phase clock stand,
370
+ // and no phase row is written. Two absent identities retain the legacy fresh-slot behavior.
371
+ // Distinct identities, a one-sided identity, an explicit gate/waiting label (⛔/⏸), or an
372
+ // unparseable label never authorizes the guard to cross an unproven run boundary.
373
+ let step = input.step;
374
+ const isGateLabel = input.step.trimStart().startsWith('⛔') || input.step.trimStart().startsWith('⏸');
375
+ if (prev !== undefined && input.kind !== 'loop' && prev.kind !== 'loop' && !isGateLabel) {
376
+ const prevTsMs = Date.parse(prev.ts ?? '');
377
+ const prevFresh = !Number.isNaN(prevTsMs) && now - prevTsMs <= FEATURE_ADR_FRESH_MS;
378
+ const prevNum = parseStepNumber(prev.step ?? '');
379
+ const newNum = parseStepNumber(input.step);
380
+ const guardThisRun = sameRun || (legacyRunScope && prevFresh);
381
+ if (guardThisRun && prevNum !== undefined && newNum !== undefined && newNum < prevNum) {
382
+ step = prev.step; // stale duplicate — the run is further along than this record
383
+ }
384
+ }
385
+ // TEST-ONLY hold (see WriteFeatureAdrStateInput._unsafeHoldMs): widens the read→write window
386
+ // so the lost update is deterministic instead of lucky. Zero cost when unset.
387
+ if (typeof input._unsafeHoldMs === 'number' && input._unsafeHoldMs > 0) {
388
+ const until = Date.now() + input._unsafeHoldMs;
389
+ while (Date.now() < until) { /* deliberate busy hold — test seam only */ }
390
+ }
391
+ const samePhase = prev !== undefined && sameRunScope && prev.step === step;
392
+ const phaseStartTs = samePhase ? (prev.phaseStartTs ?? prev.ts ?? nowIso) : nowIso;
393
+ // Phase telemetry is a /feature-adr concept — loop slots never leave phase rows in the ledger.
394
+ if (prev !== undefined && sameRunScope && !samePhase && input.kind !== 'loop' && prev.kind !== 'loop') {
395
+ appendPhaseRow(root, prev, { slug: input.slug, ...(tier !== undefined ? { tier } : {}), ...(input.mode !== undefined && input.mode.length > 0 ? { mode: input.mode } : {}) }, now);
396
+ }
397
+ const state = {
398
+ kind: input.kind === 'loop' ? 'loop' : 'feature-adr',
399
+ slug: input.slug,
400
+ step,
401
+ pool,
402
+ recalled: Number.isFinite(input.recalled) ? input.recalled : 0,
403
+ stored: Number.isFinite(input.stored) ? input.stored : 0,
404
+ ...(input.reinforced !== undefined && Number.isFinite(input.reinforced) ? { reinforced: input.reinforced } : {}),
405
+ ts: nowIso,
406
+ ...(runId !== undefined ? { runId } : {}),
407
+ ...(input.mode !== undefined && input.mode.length > 0 ? { mode: input.mode } : {}),
408
+ ...(tier !== undefined ? { tier } : {}),
409
+ phaseStartTs,
410
+ };
411
+ if (input._unsafeFailSlotWrite === true) {
412
+ throw new Error('test-only slot write failure after phase append');
413
+ }
414
+ writeFileSync(featureAdrStatePath(root, input.slug), `${JSON.stringify(state, null, 2)}\n`);
415
+ return state;
416
+ };
417
+ // The seam is TEST-ONLY (see WriteFeatureAdrStateInput._unsafeSkipLock): it exists so the RED
418
+ // half of the lock test can reproduce the lost update. Shipped callers never pass it.
419
+ const written = input._unsafeSkipLock === true
420
+ ? transition()
421
+ : withNamedLockSync(root, 'fa-phase-slot', transition);
422
+ return { state: written };
288
423
  }
289
- catch {
290
- return undefined;
424
+ catch (err) {
425
+ // A refusal is REPORTED, never mistaken for success. A lock timeout before the callback proves
426
+ // effect `none`; once the callback began, append/write progress is unknowable after an error.
427
+ const reason = err instanceof Error && err.message.trim() !== '' ? err.message : String(err);
428
+ return { refused: reason, refusedEffect: transactionStarted ? 'unknown' : 'none' };
291
429
  }
292
- return state;
430
+ }
431
+ /** First `Step <n>` number in a label, or `undefined` — shared by the guard and the renderer. */
432
+ function parseStepNumber(label) {
433
+ const m = /Step\s+(\d+(?:\.\d+)?)/.exec(label);
434
+ return m !== null ? Number(m[1]) : undefined;
293
435
  }
294
436
  /**
295
437
  * Gather dz's self-learning counts for one project. FAST + best-effort: every read
@@ -302,12 +444,85 @@ export function writeFeatureAdrState(projectRoot, input, now = Date.now()) {
302
444
  export function statuslineData(projectRoot, now = Date.now()) {
303
445
  const root = resolve(projectRoot);
304
446
  let patterns = 0;
447
+ let storeRows;
305
448
  try {
306
- patterns = countLearnedPatterns(root);
449
+ storeRows = countLearningStoreRowsReadonly(root);
450
+ patterns = typeof storeRows.lexicalRows === 'number'
451
+ ? storeRows.lexicalRows
452
+ : countJsonlPatternsReadonly(root);
307
453
  }
308
454
  catch {
309
455
  patterns = 0;
310
456
  }
457
+ let storeHealth;
458
+ try {
459
+ if (storeRows === undefined)
460
+ throw new Error('store row counts unavailable');
461
+ const rows = storeRows;
462
+ const mark = readStoreMark(root);
463
+ const health = checkStoreHealth({
464
+ projectRoot: root,
465
+ lexicalRows: rows.lexicalRows,
466
+ lexicalSource: rows.lexicalSource,
467
+ vectorRows: rows.vectorRows,
468
+ mark,
469
+ });
470
+ if (health.verdict === 'collapsed') {
471
+ const vectorAffected = health.reason.startsWith('vector ');
472
+ const previousMax = vectorAffected ? mark?.vectorMax : mark?.lexicalMax;
473
+ storeHealth = {
474
+ verdict: health.verdict,
475
+ ...(previousMax === undefined ? {} : { previousMax }),
476
+ };
477
+ }
478
+ else if (health.verdict === 'cold-start-over-existing') {
479
+ const previousMax = mark === undefined
480
+ ? undefined
481
+ : rows.lexicalRows === 0 && mark.lexicalMax > 0 ? mark.lexicalMax : mark.vectorMax;
482
+ storeHealth = {
483
+ verdict: health.verdict,
484
+ ...(previousMax === undefined ? {} : { previousMax }),
485
+ snapshotPath: storeSnapshotPath(root),
486
+ };
487
+ }
488
+ else if (health.verdict === 'unreadable') {
489
+ storeHealth = {
490
+ verdict: health.verdict,
491
+ unreadableFiles: [
492
+ ...(rows.lexicalRows === 'unreadable' ? [basename(rows.lexicalSourcePath)] : []),
493
+ ...(rows.vectorRows === 'unreadable' && rows.vectorSourcePath !== undefined
494
+ ? [basename(rows.vectorSourcePath)] : []),
495
+ ],
496
+ };
497
+ }
498
+ else if (health.verdict === 'source-changed') {
499
+ storeHealth = { verdict: health.verdict };
500
+ }
501
+ }
502
+ catch {
503
+ storeHealth = undefined;
504
+ }
505
+ let patternBreakdown;
506
+ try {
507
+ if (storeRows !== undefined
508
+ && typeof storeRows.lexicalRows === 'number'
509
+ && typeof storeRows.lexicalQuarantinedRows === 'number') {
510
+ const quarantined = storeRows.lexicalQuarantinedRows;
511
+ const tierDelta = typeof storeRows.vectorQuarantinedRows === 'number'
512
+ ? Math.abs(quarantined - storeRows.vectorQuarantinedRows)
513
+ : undefined;
514
+ patternBreakdown = {
515
+ source: 'lexical',
516
+ active: storeRows.lexicalRows - quarantined,
517
+ quarantined,
518
+ attention: quarantined > 0 && quarantined * 3 >= storeRows.lexicalRows,
519
+ ...(tierDelta !== undefined && tierDelta > QUARANTINE_TIER_DRIFT_TOLERANCE ? { tierDelta } : {}),
520
+ };
521
+ }
522
+ }
523
+ catch {
524
+ patternBreakdown = undefined;
525
+ }
311
526
  let brainSources = 0;
312
527
  try {
313
528
  brainSources = listBrain().length;
@@ -333,10 +548,61 @@ export function statuslineData(projectRoot, now = Date.now()) {
333
548
  }
334
549
  return {
335
550
  patterns,
551
+ ...(patternBreakdown !== undefined ? { patternBreakdown } : {}),
336
552
  ...(usedPatterns !== undefined ? { usedPatterns } : {}),
337
553
  brainSources,
338
554
  ...(ageH !== undefined ? { consolidatedAgeH: ageH } : {}),
339
555
  ...(featureAdr !== undefined ? { featureAdr } : {}),
556
+ ...(storeHealth !== undefined ? { storeHealth } : {}),
340
557
  };
341
558
  }
559
+ /**
560
+ * Render the /feature-adr PHASE line (line format B, fa-phase-statusline ADR-001) — the second
561
+ * status-bar line:
562
+ *
563
+ * `📐 <slug> [<tier>] <done>/<total> ▶ <step label> · <N>м/—`
564
+ *
565
+ * States, in precedence order:
566
+ * - `undefined` (no line): a loop slot, the terminal label `done`, or ≥90 min of slot silence;
567
+ * - `⚠ <N>м без отчёта` from 30 min of slot silence (counted from the last report `ts`);
568
+ * - a label starting `⛔` or `⏸` replaces the `▶ <label>` portion VERBATIM (failure/waiting states
569
+ * are reported by the pipeline through the label itself, never synthesised here);
570
+ * - otherwise `▶ <label>` with elapsed minutes counted from the PHASE start (`phaseStartTs`).
571
+ *
572
+ * done/total is the label's step-number position in its tier's active-step list; an unknown tier,
573
+ * an unparseable label, or a number outside the list renders `?/?` — the panel never guesses.
574
+ * The estimate slot is fixed-width at the tail: v1 defers estimates entirely, so it is always `/—`
575
+ * (a future median would be computed on the WRITE path and stored in the slot as a ready number —
576
+ * this render path stays a pure function over the slot, no DB, no subprocess, no features/* sweep).
577
+ *
578
+ * @param state A fresh slot from {@link readFeatureAdrState} (the ONLY source of "in progress").
579
+ * @param now Injectable clock (epoch ms) — defaults to `Date.now()`.
580
+ */
581
+ export function renderFeatureAdrPhaseLine(state, now = Date.now()) {
582
+ if (state.kind === 'loop')
583
+ return undefined;
584
+ const label = state.step.trim();
585
+ if (label === 'done')
586
+ return undefined; // a finished run leaves the bar immediately
587
+ const tsMs = Date.parse(state.ts);
588
+ if (Number.isNaN(tsMs))
589
+ return undefined;
590
+ const silenceMs = now - tsMs;
591
+ const silenceMin = Math.floor(silenceMs / 60_000);
592
+ if (silenceMs >= FEATURE_ADR_FRESH_MS)
593
+ return undefined; // fully faded (90 min)
594
+ const tier = state.tier !== undefined && FEATURE_ADR_TIERS.has(state.tier) ? state.tier : undefined;
595
+ const steps = tier !== undefined ? FEATURE_ADR_ACTIVE_STEPS[tier] : undefined;
596
+ const stepNum = parseStepNumber(label);
597
+ const idx = steps !== undefined && stepNum !== undefined ? steps.indexOf(stepNum) : -1;
598
+ const ratio = idx >= 0 && steps !== undefined ? `${idx}/${steps.length}` : '?/?';
599
+ const head = `📐 ${state.slug} [${tier ?? '?'}] ${ratio}`;
600
+ if (silenceMs >= FEATURE_ADR_WARN_MS)
601
+ return `${head} ⚠ ${silenceMin}м без отчёта`;
602
+ const phaseStartMs = Date.parse(state.phaseStartTs ?? state.ts);
603
+ const elapsedMin = Number.isNaN(phaseStartMs) ? 0 : Math.max(0, Math.floor((now - phaseStartMs) / 60_000));
604
+ // ⛔ (a gate failure) and ⏸ (a waiting state) labels carry their own marker — verbatim, no ▶.
605
+ const stepPart = label.startsWith('⛔') || label.startsWith('⏸') ? label : `▶ ${label}`;
606
+ return `${head} ${stepPart} · ${elapsedMin}м/—`;
607
+ }
342
608
  //# sourceMappingURL=statusline.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"statusline.js","sourceRoot":"","sources":["../src/statusline.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"statusline.js","sourceRoot":"","sources":["../src/statusline.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,EAAE,cAAc,EAAE,UAAU,EAAE,SAAS,EAAE,YAAY,EAAE,WAAW,EAAE,QAAQ,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAChI,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpD,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAE5C,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AACvC,OAAO,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AACpD,OAAO,EAAE,yBAAyB,EAAE,oBAAoB,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AACzG,OAAO,EAAE,8BAA8B,EAAE,uBAAuB,EAAE,MAAM,mBAAmB,CAAC;AAC5F,OAAO,EACL,gBAAgB,EAChB,aAAa,EACb,iBAAiB,GAElB,MAAM,kBAAkB,CAAC;AA0E1B,MAAM,+BAA+B,GAAG,CAAC,CAAC;AAE1C,6DAA6D;AAC7D,SAAS,iBAAiB,CAAC,WAAmB;IAC5C,OAAO,IAAI,CAAC,WAAW,EAAE,KAAK,EAAE,QAAQ,EAAE,iBAAiB,CAAC,CAAC;AAC/D,CAAC;AAED,2EAA2E;AAC3E,SAAS,wBAAwB,CAAC,WAAmB;IACnD,OAAO,IAAI,CAAC,WAAW,EAAE,KAAK,EAAE,QAAQ,EAAE,kBAAkB,CAAC,CAAC;AAChE,CAAC;AAED,0EAA0E;AAC1E,MAAM,UAAU,kBAAkB,CAAC,WAAmB;IACpD,OAAO,IAAI,CAAC,WAAW,EAAE,KAAK,EAAE,aAAa,EAAE,gBAAgB,CAAC,CAAC;AACnE,CAAC;AAED,iGAAiG;AACjG,SAAS,mBAAmB,CAAC,IAAY;IACvC,MAAM,IAAI,GAAG,IAAI;SACd,OAAO,CAAC,kBAAkB,EAAE,GAAG,CAAC;SAChC,OAAO,CAAC,QAAQ,EAAE,GAAG,CAAC;SACtB,OAAO,CAAC,SAAS,EAAE,GAAG,CAAC;SACvB,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IAChB,OAAO,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,UAAU,CAAC;AAC7C,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,mBAAmB,CAAC,WAAmB,EAAE,IAAa;IACpE,OAAO,IAAI,KAAK,SAAS;QACvB,CAAC,CAAC,IAAI,CAAC,WAAW,EAAE,KAAK,EAAE,aAAa,EAAE,qBAAqB,CAAC;QAChE,CAAC,CAAC,IAAI,CAAC,kBAAkB,CAAC,WAAW,CAAC,EAAE,GAAG,mBAAmB,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;AACjF,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,oBAAoB,GAAG,EAAE,GAAG,EAAE,GAAG,KAAK,CAAC;AAE7C,oGAAoG;AACpG,MAAM,mBAAmB,GAAG,EAAE,GAAG,EAAE,GAAG,KAAK,CAAC;AAE5C,6FAA6F;AAC7F,MAAM,iBAAiB,GAAG,IAAI,GAAG,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,CAAC,CAAC,CAAC;AAEzD;;;;GAIG;AACH,MAAM,wBAAwB,GAAsC;IAClE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;IAClB,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;IAC7B,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;IACtC,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;CACxC,CAAC;AAEF;;;;GAIG;AACH,SAAS,0BAA0B,CAAC,WAAmB;IACrD,MAAM,IAAI,GAAG,IAAI,CAAC,WAAW,EAAE,KAAK,EAAE,gBAAgB,CAAC,CAAC;IACxD,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC;QAAE,OAAO,CAAC,CAAC;IAChC,IAAI,CAAC;QACH,OAAO,YAAY,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC,MAAM,CAAC;IACvF,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,CAAC,CAAC;IACX,CAAC;AACH,CAAC;AAED;;;;;;GAMG;AACH,SAAS,oBAAoB,CAAC,WAAmB;IAC/C,MAAM,UAAU,GAAG,iBAAiB,CAAC,WAAW,CAAC,CAAC;IAClD,IAAI,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;QAC3B,MAAM,IAAI,GAAG,uBAAuB,CAAC,UAAU,EAAE,gBAAgB,CAAC,CAAC;QACnE,IAAI,IAAI,KAAK,SAAS;YAAE,OAAO,IAAI,CAAC;IACtC,CAAC;IACD,OAAO,0BAA0B,CAAC,WAAW,CAAC,CAAC;AACjD,CAAC;AAED,SAAS,yBAAyB,CAAC,WAAmB;IACpD,MAAM,IAAI,GAAG,IAAI,CAAC,WAAW,EAAE,yBAAyB,CAAC,CAAC;IAC1D,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC;QAAE,OAAO,SAAS,CAAC;IACxC,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,mBAAmB,CAAC,YAAY,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC;QAChE,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,SAAS,CAAC;QAClD,OAAO,oBAAoB,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC;IACrD,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,SAAS,CAAC;IACnB,CAAC;AACH,CAAC;AAED,+FAA+F;AAC/F,SAAS,oBAAoB,CAAC,WAAmB,EAAE,GAAW;IAC5D,MAAM,IAAI,GAAG,wBAAwB,CAAC,WAAW,CAAC,CAAC;IACnD,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC;QAAE,OAAO,SAAS,CAAC;IACxC,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,EAAE,OAAO,CAAC,CAAqC,CAAC;QAC3F,MAAM,EAAE,GAAG,OAAO,MAAM,CAAC,kBAAkB,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,kBAAkB,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC;QAC9G,IAAI,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC;YAAE,OAAO,SAAS,CAAC;QACvC,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,GAAG,EAAE,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC;IACzD,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,SAAS,CAAC;IACnB,CAAC;AACH,CAAC;AAED;;;;;;;;;;;;GAYG;AACH,MAAM,UAAU,mBAAmB,CAAC,WAAmB,EAAE,MAAc,IAAI,CAAC,GAAG,EAAE;IAC/E,MAAM,IAAI,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC;IAClC,MAAM,UAAU,GAAa,EAAE,CAAC;IAEhC,gGAAgG;IAChG,+FAA+F;IAC/F,kFAAkF;IAClF,IAAI,CAAC;QACH,MAAM,UAAU,GAAG,mBAAmB,CAAC,IAAI,CAAC,CAAC;QAC7C,IAAI,UAAU,CAAC,UAAU,CAAC;YAAE,UAAU,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;IAC1D,CAAC;IAAC,MAAM,CAAC,CAAC,qCAAqC,CAAC,CAAC;IACjD,IAAI,CAAC;QACH,MAAM,SAAS,GAAG,EAAE,GAAG,UAAU,CAAC,MAAM,CAAC;QACzC,IAAI,SAAS,GAAG,CAAC,EAAE,CAAC;YAClB,MAAM,GAAG,GAAG,kBAAkB,CAAC,IAAI,CAAC,CAAC;YACrC,MAAM,KAAK,GAAG,WAAW,CAAC,GAAG,CAAC;iBAC3B,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;iBACxC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE;gBACZ,IAAI,OAAO,GAAG,CAAC,QAAQ,CAAC;gBACxB,IAAI,CAAC;oBACH,OAAO,GAAG,QAAQ,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC;gBAC9C,CAAC;gBAAC,MAAM,CAAC,CAAC,gDAAgD,CAAC,CAAC;gBAC5D,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC;YAC3B,CAAC,CAAC;gBACF,wGAAwG;iBACvG,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,GAAG,CAAC,CAAC,OAAO,CAAC;iBACrC,KAAK,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC;YACvB,KAAK,MAAM,EAAE,IAAI,EAAE,IAAI,KAAK;gBAAE,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC,CAAC;QACjE,CAAC;IACH,CAAC;IAAC,MAAM,CAAC,CAAC,oDAAoD,CAAC,CAAC;IAEhE,MAAM,cAAc,GAAG,CAAC,IAAY,EAAsE,EAAE;QAC1G,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,EAAE,OAAO,CAAC,CAA6B,CAAC;YACnF,IAAI,OAAO,MAAM,CAAC,IAAI,KAAK,QAAQ,IAAI,MAAM,CAAC,IAAI,CAAC,MAAM,KAAK,CAAC;gBAAE,OAAO,SAAS,CAAC;YAClF,IAAI,OAAO,MAAM,CAAC,IAAI,KAAK,QAAQ,IAAI,MAAM,CAAC,IAAI,CAAC,MAAM,KAAK,CAAC;gBAAE,OAAO,SAAS,CAAC;YAClF,IAAI,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,MAAM;gBAAE,OAAO,SAAS,CAAC,CAAC,yCAAyC;YAC9F,IAAI,OAAO,MAAM,CAAC,EAAE,KAAK,QAAQ;gBAAE,OAAO,SAAS,CAAC;YACpD,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;YACnC,IAAI,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC;gBAAE,OAAO,SAAS,CAAC;YACzC,IAAI,GAAG,GAAG,IAAI,GAAG,oBAAoB;gBAAE,OAAO,SAAS,CAAC,CAAC,qCAAqC;YAC9F,MAAM,GAAG,GAAG,CAAC,CAAU,EAAU,EAAE,CAAC,CAAC,OAAO,CAAC,KAAK,QAAQ,IAAI,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YAC1F,4FAA4F;YAC5F,6FAA6F;YAC7F,4FAA4F;YAC5F,6FAA6F;YAC7F,MAAM,IAAI,GAA2B,MAAM,CAAC,IAAI,KAAK,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,aAAa,CAAC;YACrF,MAAM,KAAK,GAAoB;gBAC7B,IAAI;gBACJ,IAAI,EAAE,MAAM,CAAC,IAAI;gBACjB,IAAI,EAAE,MAAM,CAAC,IAAI;gBACjB,IAAI,EAAE,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC;gBACtB,QAAQ,EAAE,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC;gBAC9B,MAAM,EAAE,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC;gBAC1B,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,GAAG,CAAC,MAAM,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBAC7E,EAAE,EAAE,MAAM,CAAC,EAAE;gBACb,GAAG,CAAC,OAAO,MAAM,CAAC,KAAK,KAAK,QAAQ,IAAI,MAAM,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBAClG,GAAG,CAAC,OAAO,MAAM,CAAC,IAAI,KAAK,QAAQ,IAAI,MAAM,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBAC3F,GAAG,CAAC,OAAO,MAAM,CAAC,IAAI,KAAK,QAAQ,IAAI,iBAAiB,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBACvG,GAAG,CAAC,OAAO,MAAM,CAAC,YAAY,KAAK,QAAQ,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;oBAC3F,CAAC,CAAC,EAAE,YAAY,EAAE,MAAM,CAAC,YAAY,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;aAChD,CAAC;YACF,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,KAAK,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QAC/D,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,SAAS,CAAC;QACnB,CAAC;IACH,CAAC,CAAC;IAEF,IAAI,MAAyC,CAAC;IAC9C,KAAK,MAAM,IAAI,IAAI,UAAU,EAAE,CAAC;QAC9B,MAAM,SAAS,GAAG,cAAc,CAAC,IAAI,CAAC,CAAC;QACvC,IAAI,SAAS,KAAK,SAAS;YAAE,SAAS;QACtC,IAAI,MAAM,KAAK,SAAS;eACnB,SAAS,CAAC,IAAI,GAAG,MAAM,CAAC,IAAI;eAC5B,CAAC,SAAS,CAAC,IAAI,KAAK,MAAM,CAAC,IAAI,IAAI,SAAS,CAAC,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC;YACtE,MAAM,GAAG,SAAS,CAAC;QACrB,CAAC;IACH,CAAC;IACD,OAAO,MAAM,EAAE,KAAK,CAAC;AACvB,CAAC;AAoDD;;;GAGG;AACH,SAAS,gBAAgB,CAAC,IAAY,EAAE,IAAY;IAClD,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,mBAAmB,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,OAAO,CAAC,CAA6B,CAAC;QAC9G,IAAI,OAAO,MAAM,CAAC,IAAI,KAAK,QAAQ,IAAI,OAAO,MAAM,CAAC,EAAE,KAAK,QAAQ;YAAE,OAAO,SAAS,CAAC;QACvF,OAAO,MAAM,CAAC;IAChB,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,SAAS,CAAC;IACnB,CAAC;AACH,CAAC;AAED;;;;;;;;;;;GAWG;AACH,SAAS,cAAc,CACrB,IAAY,EACZ,IAA8B,EAC9B,QAAwD,EACxD,GAAW;IAEX,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE,aAAa,EAAE,uBAAuB,CAAC,CAAC;QACzE,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC;YAAE,OAAO,CAAC,wDAAwD;QACzF,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,YAAY,IAAI,IAAI,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC;QACjE,IAAI,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC;YAAE,OAAO,CAAC,sDAAsD;QAC3F,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,GAAG,SAAS,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC;QAClE,MAAM,GAAG,GAAG;YACV,OAAO,EAAE,qBAAqB;YAC9B,IAAI,EAAE,OAAO;YACb,IAAI,EAAE,QAAQ,CAAC,IAAI;YACnB,IAAI,EAAE,QAAQ,CAAC,IAAI,IAAI,IAAI;YAC3B,IAAI,EAAE,IAAI,CAAC,IAAI,IAAI,QAAQ,CAAC,IAAI,IAAI,IAAI;YACxC,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,OAAO;YACP,EAAE,EAAE,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC,WAAW,EAAE;SAChC,CAAC;QACF,cAAc,CAAC,MAAM,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IACrD,CAAC;IAAC,MAAM,CAAC,CAAC,yDAAyD,CAAC,CAAC;AACvE,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,oBAAoB,CAClC,WAAmB,EACnB,KAAgC,EAChC,MAAc,IAAI,CAAC,GAAG,EAAE;IAExB,OAAO,4BAA4B,CAAC,WAAW,EAAE,KAAK,EAAE,GAAG,CAAC,CAAC,KAAK,CAAC;AACrE,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,4BAA4B,CAC1C,WAAmB,EACnB,KAAgC,EAChC,MAAc,IAAI,CAAC,GAAG,EAAE;IAExB,MAAM,IAAI,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC;IAClC,IAAI,kBAAkB,GAAG,KAAK,CAAC;IAC/B,IAAI,IAAI,GAAG,CAAC,CAAC;IACb,IAAI,CAAC;QACH,IAAI,GAAG,oBAAoB,CAAC,IAAI,CAAC,CAAC;IACpC,CAAC;IAAC,MAAM,CAAC;QACP,IAAI,GAAG,CAAC,CAAC;IACX,CAAC;IAED,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,kBAAkB,CAAC,IAAI,CAAC,CAAC;QACrC,SAAS,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAEpC,4FAA4F;QAC5F,2FAA2F;QAC3F,gGAAgG;QAChG,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,KAAK,CAAC;YACjD,KAAK,MAAM,IAAI,IAAI,WAAW,CAAC,GAAG,CAAC,EAAE,CAAC;gBACpC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC;oBAAE,SAAS;gBACtC,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;gBAClC,IAAI,CAAC;oBACH,IAAI,QAAQ,CAAC,SAAS,CAAC,CAAC,OAAO,GAAG,MAAM;wBAAE,UAAU,CAAC,SAAS,CAAC,CAAC;gBAClE,CAAC;gBAAC,MAAM,CAAC,CAAC,kCAAkC,CAAC,CAAC;YAChD,CAAC;QACH,CAAC;QAAC,MAAM,CAAC,CAAC,mCAAmC,CAAC,CAAC;QAE/C,8FAA8F;QAC9F,6FAA6F;QAC7F,8FAA8F;QAC9F,2FAA2F;QAC3F,wFAAwF;QACxF,6FAA6F;QAC7F,mEAAmE;QACnE,MAAM,UAAU,GAAG,GAAoB,EAAE;YACvC,kBAAkB,GAAG,IAAI,CAAC;YAC1B,yFAAyF;YACzF,4FAA4F;YAC5F,6EAA6E;YAC7E,MAAM,IAAI,GAAG,gBAAgB,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;YAChD,MAAM,IAAI,GAAG,OAAO,KAAK,CAAC,IAAI,KAAK,QAAQ,IAAI,iBAAiB,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC;gBAC9E,CAAC,CAAC,KAAK,CAAC,IAAI;gBACZ,CAAC,CAAC,CAAC,OAAO,IAAI,EAAE,IAAI,KAAK,QAAQ,IAAI,iBAAiB,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;YACjG,MAAM,MAAM,GAAG,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC,WAAW,EAAE,CAAC;YAC3C,MAAM,SAAS,GAAG,OAAO,IAAI,EAAE,KAAK,KAAK,QAAQ,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;YAC9G,MAAM,KAAK,GAAG,OAAO,KAAK,CAAC,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;YAC5G,MAAM,OAAO,GAAG,SAAS,KAAK,SAAS,IAAI,KAAK,KAAK,SAAS,IAAI,SAAS,KAAK,KAAK,CAAC;YACtF,MAAM,cAAc,GAAG,SAAS,KAAK,SAAS,IAAI,KAAK,KAAK,SAAS,CAAC;YACtE,MAAM,YAAY,GAAG,OAAO,IAAI,cAAc,CAAC;YAE/C,0FAA0F;YAC1F,4FAA4F;YAC5F,2FAA2F;YAC3F,6FAA6F;YAC7F,yFAAyF;YACzF,4FAA4F;YAC5F,4FAA4F;YAC5F,yFAAyF;YACzF,kFAAkF;YAClF,IAAI,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC;YACtB,MAAM,WAAW,GAAG,KAAK,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,KAAK,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;YACrG,IAAI,IAAI,KAAK,SAAS,IAAI,KAAK,CAAC,IAAI,KAAK,MAAM,IAAI,IAAI,CAAC,IAAI,KAAK,MAAM,IAAI,CAAC,WAAW,EAAE,CAAC;gBACxF,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC;gBAC3C,MAAM,SAAS,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,GAAG,GAAG,QAAQ,IAAI,oBAAoB,CAAC;gBACpF,MAAM,OAAO,GAAG,eAAe,CAAC,IAAI,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC;gBACjD,MAAM,MAAM,GAAG,eAAe,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;gBAC3C,MAAM,YAAY,GAAG,OAAO,IAAI,CAAC,cAAc,IAAI,SAAS,CAAC,CAAC;gBAC9D,IAAI,YAAY,IAAI,OAAO,KAAK,SAAS,IAAI,MAAM,KAAK,SAAS,IAAI,MAAM,GAAG,OAAO,EAAE,CAAC;oBACtF,IAAI,GAAG,IAAI,CAAC,IAAc,CAAC,CAAC,8DAA8D;gBAC5F,CAAC;YACH,CAAC;YAED,6FAA6F;YAC7F,8EAA8E;YAC9E,IAAI,OAAO,KAAK,CAAC,aAAa,KAAK,QAAQ,IAAI,KAAK,CAAC,aAAa,GAAG,CAAC,EAAE,CAAC;gBACvE,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,KAAK,CAAC,aAAa,CAAC;gBAC/C,OAAO,IAAI,CAAC,GAAG,EAAE,GAAG,KAAK,EAAE,CAAC,CAAC,2CAA2C,CAAC,CAAC;YAC5E,CAAC;YAED,MAAM,SAAS,GAAG,IAAI,KAAK,SAAS,IAAI,YAAY,IAAI,IAAI,CAAC,IAAI,KAAK,IAAI,CAAC;YAC3E,MAAM,YAAY,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,YAAY,IAAI,IAAI,CAAC,EAAE,IAAI,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;YACnF,+FAA+F;YAC/F,IAAI,IAAI,KAAK,SAAS,IAAI,YAAY,IAAI,CAAC,SAAS,IAAI,KAAK,CAAC,IAAI,KAAK,MAAM,IAAI,IAAI,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;gBACtG,cAAc,CAAC,IAAI,EAAE,IAAI,EAAE,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,GAAG,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,KAAK,CAAC,IAAI,KAAK,SAAS,IAAI,KAAK,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC;YACrL,CAAC;YAED,MAAM,KAAK,GAAoB;gBAC7B,IAAI,EAAE,KAAK,CAAC,IAAI,KAAK,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,aAAa;gBACpD,IAAI,EAAE,KAAK,CAAC,IAAI;gBAChB,IAAI;gBACJ,IAAI;gBACJ,QAAQ,EAAE,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;gBAC9D,MAAM,EAAE,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;gBACxD,GAAG,CAAC,KAAK,CAAC,UAAU,KAAK,SAAS,IAAI,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,KAAK,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBAChH,EAAE,EAAE,MAAM;gBACV,GAAG,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBACzC,GAAG,CAAC,KAAK,CAAC,IAAI,KAAK,SAAS,IAAI,KAAK,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBAClF,GAAG,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBACvC,YAAY;aACb,CAAC;YACF,IAAI,KAAK,CAAC,oBAAoB,KAAK,IAAI,EAAE,CAAC;gBACxC,MAAM,IAAI,KAAK,CAAC,iDAAiD,CAAC,CAAC;YACrE,CAAC;YACD,aAAa,CAAC,mBAAmB,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC;YAC5F,OAAO,KAAK,CAAC;QACf,CAAC,CAAC;QAEF,8FAA8F;QAC9F,sFAAsF;QACtF,MAAM,OAAO,GAAG,KAAK,CAAC,eAAe,KAAK,IAAI;YAC5C,CAAC,CAAC,UAAU,EAAE;YACd,CAAC,CAAC,iBAAiB,CAAC,IAAI,EAAE,eAAe,EAAE,UAAU,CAAC,CAAC;QACzD,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC;IAC5B,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,+FAA+F;QAC/F,8FAA8F;QAC9F,MAAM,MAAM,GAAG,GAAG,YAAY,KAAK,IAAI,GAAG,CAAC,OAAO,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QAC7F,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,aAAa,EAAE,kBAAkB,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;IACrF,CAAC;AACH,CAAC;AAED,iGAAiG;AACjG,SAAS,eAAe,CAAC,KAAa;IACpC,MAAM,CAAC,GAAG,wBAAwB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAC/C,OAAO,CAAC,KAAK,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;AAC/C,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,cAAc,CAAC,WAAmB,EAAE,MAAc,IAAI,CAAC,GAAG,EAAE;IAC1E,MAAM,IAAI,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC;IAElC,IAAI,QAAQ,GAAG,CAAC,CAAC;IACjB,IAAI,SAAwE,CAAC;IAC7E,IAAI,CAAC;QACH,SAAS,GAAG,8BAA8B,CAAC,IAAI,CAAC,CAAC;QACjD,QAAQ,GAAG,OAAO,SAAS,CAAC,WAAW,KAAK,QAAQ;YAClD,CAAC,CAAC,SAAS,CAAC,WAAW;YACvB,CAAC,CAAC,0BAA0B,CAAC,IAAI,CAAC,CAAC;IACvC,CAAC;IAAC,MAAM,CAAC;QACP,QAAQ,GAAG,CAAC,CAAC;IACf,CAAC;IAED,IAAI,WAA8C,CAAC;IACnD,IAAI,CAAC;QACH,IAAI,SAAS,KAAK,SAAS;YAAE,MAAM,IAAI,KAAK,CAAC,8BAA8B,CAAC,CAAC;QAC7E,MAAM,IAAI,GAAG,SAAS,CAAC;QACvB,MAAM,IAAI,GAAG,aAAa,CAAC,IAAI,CAAC,CAAC;QACjC,MAAM,MAAM,GAAG,gBAAgB,CAAC;YAC9B,WAAW,EAAE,IAAI;YACjB,WAAW,EAAE,IAAI,CAAC,WAAW;YAC7B,aAAa,EAAE,IAAI,CAAC,aAAa;YACjC,UAAU,EAAE,IAAI,CAAC,UAAU;YAC3B,IAAI;SACL,CAAC,CAAC;QACH,IAAI,MAAM,CAAC,OAAO,KAAK,WAAW,EAAE,CAAC;YACnC,MAAM,cAAc,GAAG,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC;YAC3D,MAAM,WAAW,GAAG,cAAc,CAAC,CAAC,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC,CAAC,IAAI,EAAE,UAAU,CAAC;YACxE,WAAW,GAAG;gBACZ,OAAO,EAAE,MAAM,CAAC,OAAO;gBACvB,GAAG,CAAC,WAAW,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,CAAC;aACtD,CAAC;QACJ,CAAC;aAAM,IAAI,MAAM,CAAC,OAAO,KAAK,0BAA0B,EAAE,CAAC;YACzD,MAAM,WAAW,GAAG,IAAI,KAAK,SAAS;gBACpC,CAAC,CAAC,SAAS;gBACX,CAAC,CAAC,IAAI,CAAC,WAAW,KAAK,CAAC,IAAI,IAAI,CAAC,UAAU,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC;YACrF,WAAW,GAAG;gBACZ,OAAO,EAAE,MAAM,CAAC,OAAO;gBACvB,GAAG,CAAC,WAAW,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,CAAC;gBACrD,YAAY,EAAE,iBAAiB,CAAC,IAAI,CAAC;aACtC,CAAC;QACJ,CAAC;aAAM,IAAI,MAAM,CAAC,OAAO,KAAK,YAAY,EAAE,CAAC;YAC3C,WAAW,GAAG;gBACZ,OAAO,EAAE,MAAM,CAAC,OAAO;gBACvB,eAAe,EAAE;oBACf,GAAG,CAAC,IAAI,CAAC,WAAW,KAAK,YAAY,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;oBAChF,GAAG,CAAC,IAAI,CAAC,UAAU,KAAK,YAAY,IAAI,IAAI,CAAC,gBAAgB,KAAK,SAAS;wBACzE,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;iBAC5C;aACF,CAAC;QACJ,CAAC;aAAM,IAAI,MAAM,CAAC,OAAO,KAAK,gBAAgB,EAAE,CAAC;YAC/C,WAAW,GAAG,EAAE,OAAO,EAAE,MAAM,CAAC,OAAO,EAAE,CAAC;QAC5C,CAAC;IACH,CAAC;IAAC,MAAM,CAAC;QACP,WAAW,GAAG,SAAS,CAAC;IAC1B,CAAC;IAED,IAAI,gBAAoD,CAAC;IACzD,IAAI,CAAC;QACH,IAAI,SAAS,KAAK,SAAS;eACtB,OAAO,SAAS,CAAC,WAAW,KAAK,QAAQ;eACzC,OAAO,SAAS,CAAC,sBAAsB,KAAK,QAAQ,EAAE,CAAC;YAC1D,MAAM,WAAW,GAAG,SAAS,CAAC,sBAAsB,CAAC;YACrD,MAAM,SAAS,GAAG,OAAO,SAAS,CAAC,qBAAqB,KAAK,QAAQ;gBACnE,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,WAAW,GAAG,SAAS,CAAC,qBAAqB,CAAC;gBACzD,CAAC,CAAC,SAAS,CAAC;YACd,gBAAgB,GAAG;gBACjB,MAAM,EAAE,SAAS;gBACjB,MAAM,EAAE,SAAS,CAAC,WAAW,GAAG,WAAW;gBAC3C,WAAW;gBACX,SAAS,EAAE,WAAW,GAAG,CAAC,IAAI,WAAW,GAAG,CAAC,IAAI,SAAS,CAAC,WAAW;gBACtE,GAAG,CAAC,SAAS,KAAK,SAAS,IAAI,SAAS,GAAG,+BAA+B,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;aACjG,CAAC;QACJ,CAAC;IACH,CAAC;IAAC,MAAM,CAAC;QACP,gBAAgB,GAAG,SAAS,CAAC;IAC/B,CAAC;IAED,IAAI,YAAY,GAAG,CAAC,CAAC;IACrB,IAAI,CAAC;QACH,YAAY,GAAG,SAAS,EAAE,CAAC,MAAM,CAAC;IACpC,CAAC;IAAC,MAAM,CAAC;QACP,YAAY,GAAG,CAAC,CAAC;IACnB,CAAC;IAED,IAAI,YAAgC,CAAC;IACrC,IAAI,CAAC;QACH,YAAY,GAAG,yBAAyB,CAAC,IAAI,CAAC,CAAC;IACjD,CAAC;IAAC,MAAM,CAAC;QACP,YAAY,GAAG,SAAS,CAAC;IAC3B,CAAC;IAED,MAAM,IAAI,GAAG,oBAAoB,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;IAE7C,kGAAkG;IAClG,IAAI,UAAuC,CAAC;IAC5C,IAAI,CAAC;QACH,UAAU,GAAG,mBAAmB,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;IAC9C,CAAC;IAAC,MAAM,CAAC;QACP,UAAU,GAAG,SAAS,CAAC;IACzB,CAAC;IAED,OAAO;QACL,QAAQ;QACR,GAAG,CAAC,gBAAgB,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,gBAAgB,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC/D,GAAG,CAAC,YAAY,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,YAAY,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACvD,YAAY;QACZ,GAAG,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,gBAAgB,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACzD,GAAG,CAAC,UAAU,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACnD,GAAG,CAAC,WAAW,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KACtD,CAAC;AACJ,CAAC;AAED;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,MAAM,UAAU,yBAAyB,CAAC,KAAsB,EAAE,MAAc,IAAI,CAAC,GAAG,EAAE;IACxF,IAAI,KAAK,CAAC,IAAI,KAAK,MAAM;QAAE,OAAO,SAAS,CAAC;IAC5C,MAAM,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;IAChC,IAAI,KAAK,KAAK,MAAM;QAAE,OAAO,SAAS,CAAC,CAAC,4CAA4C;IAEpF,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;IAClC,IAAI,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC;QAAE,OAAO,SAAS,CAAC;IACzC,MAAM,SAAS,GAAG,GAAG,GAAG,IAAI,CAAC;IAC7B,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,GAAG,MAAM,CAAC,CAAC;IAClD,IAAI,SAAS,IAAI,oBAAoB;QAAE,OAAO,SAAS,CAAC,CAAC,uBAAuB;IAEhF,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,KAAK,SAAS,IAAI,iBAAiB,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC;IACpG,MAAM,KAAK,GAAG,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,wBAAwB,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IAC9E,MAAM,OAAO,GAAG,eAAe,CAAC,KAAK,CAAC,CAAC;IACvC,MAAM,GAAG,GAAG,KAAK,KAAK,SAAS,IAAI,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACvF,MAAM,KAAK,GAAG,GAAG,IAAI,CAAC,IAAI,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,GAAG,GAAG,IAAI,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC;IACjF,MAAM,IAAI,GAAG,MAAM,KAAK,CAAC,IAAI,KAAK,IAAI,IAAI,GAAG,KAAK,KAAK,EAAE,CAAC;IAE1D,IAAI,SAAS,IAAI,mBAAmB;QAAE,OAAO,GAAG,IAAI,MAAM,UAAU,cAAc,CAAC;IAEnF,MAAM,YAAY,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,YAAY,IAAI,KAAK,CAAC,EAAE,CAAC,CAAC;IAChE,MAAM,UAAU,GAAG,MAAM,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,GAAG,YAAY,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC;IAC3G,6FAA6F;IAC7F,MAAM,QAAQ,GAAG,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,KAAK,EAAE,CAAC;IACvF,OAAO,GAAG,IAAI,IAAI,QAAQ,MAAM,UAAU,KAAK,CAAC;AAClD,CAAC"}
package/dist/stem.d.ts ADDED
@@ -0,0 +1,12 @@
1
+ /**
2
+ * Dependency-free lexical normalization shared by registry search and recommend.
3
+ * It deliberately handles only the measured RU/EN inflection cases; semantic
4
+ * similarity and paraphrases belong to the separate recall/advisor tier.
5
+ */
6
+ /** Unicode-aware word split without JavaScript's ASCII-only word-boundary escape. */
7
+ export declare function tokenize(text: string): string[];
8
+ /** Lowercase one token and remove at most one conservative inflectional suffix. */
9
+ export declare function stemToken(token: string): string;
10
+ /** Tokenize and stem a text with the shared RU/EN rules. */
11
+ export declare function stems(text: string): string[];
12
+ //# sourceMappingURL=stem.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stem.d.ts","sourceRoot":"","sources":["../src/stem.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAiBH,qFAAqF;AACrF,wBAAgB,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE,CAE/C;AAmDD,mFAAmF;AACnF,wBAAgB,SAAS,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAK/C;AAED,4DAA4D;AAC5D,wBAAgB,KAAK,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE,CAE5C"}
package/dist/stem.js ADDED
@@ -0,0 +1,89 @@
1
+ /**
2
+ * Dependency-free lexical normalization shared by registry search and recommend.
3
+ * It deliberately handles only the measured RU/EN inflection cases; semantic
4
+ * similarity and paraphrases belong to the separate recall/advisor tier.
5
+ */
6
+ const CYRILLIC_TOKEN = /^\p{Script=Cyrillic}+$/u;
7
+ const LATIN_TOKEN = /^\p{Script=Latin}+$/u;
8
+ const CYRILLIC_SUFFIXES = [
9
+ 'иями',
10
+ 'иях', 'иям', 'ией', 'ями', 'ами', 'ого', 'его', 'ому', 'ему', 'ыми', 'ими',
11
+ 'ях', 'ах', 'ой', 'ей', 'ий', 'ый', 'ая', 'яя', 'ое', 'ее', 'ие', 'ые',
12
+ 'ом', 'ем', 'ам', 'ям', 'ов', 'ев', 'ью', 'ья', 'ье', 'ия', 'ии',
13
+ 'и', 'ы', 'а', 'я', 'о', 'е', 'у', 'ю', 'ь',
14
+ ];
15
+ function canonicalize(text) {
16
+ return text.normalize('NFC').toLowerCase().replaceAll('ё', 'е');
17
+ }
18
+ /** Unicode-aware word split without JavaScript's ASCII-only word-boundary escape. */
19
+ export function tokenize(text) {
20
+ return canonicalize(text).split(/[^\p{L}\p{N}]+/u).filter(Boolean);
21
+ }
22
+ function stemCyrillic(token) {
23
+ for (const suffix of CYRILLIC_SUFFIXES) {
24
+ if (!token.endsWith(suffix))
25
+ continue;
26
+ const candidate = token.slice(0, -suffix.length);
27
+ if (candidate.length < 3)
28
+ continue;
29
+ // Short nouns ending in a base vowel are the precision trap behind тест/тесто
30
+ // and права/правка. Plural и/ы still normalize тесты→тест, while a one-letter
31
+ // case/gender tail is stripped only from a longer lexical base.
32
+ if (suffix.length === 1 && suffix !== 'и' && suffix !== 'ы' && suffix !== 'ь'
33
+ && candidate.length < 5)
34
+ continue;
35
+ return candidate;
36
+ }
37
+ return token;
38
+ }
39
+ function replaceSuffix(token, suffix, replacement) {
40
+ if (!token.endsWith(suffix))
41
+ return undefined;
42
+ const candidate = token.slice(0, -suffix.length) + replacement;
43
+ return candidate.length >= 3 ? candidate : undefined;
44
+ }
45
+ function stemLatin(token) {
46
+ const ies = replaceSuffix(token, 'ies', 'y');
47
+ if (ies !== undefined)
48
+ return ies;
49
+ const sses = replaceSuffix(token, 'sses', 'ss');
50
+ if (sses !== undefined)
51
+ return sses;
52
+ const sis = replaceSuffix(token, 'sis', 's');
53
+ if (sis !== undefined)
54
+ return sis;
55
+ const ses = replaceSuffix(token, 'ses', 's');
56
+ if (ses !== undefined)
57
+ return ses;
58
+ if (token.endsWith('es')) {
59
+ const preceding = token.at(-3);
60
+ if (preceding !== 'i' && preceding !== 's') {
61
+ const es = replaceSuffix(token, 'es', '');
62
+ if (es !== undefined)
63
+ return es;
64
+ }
65
+ }
66
+ if (token.endsWith('s')) {
67
+ const preceding = token.at(-2);
68
+ if (preceding !== 's' && preceding !== 'u' && preceding !== 'i' && preceding !== 'y') {
69
+ const s = replaceSuffix(token, 's', '');
70
+ if (s !== undefined)
71
+ return s;
72
+ }
73
+ }
74
+ return token;
75
+ }
76
+ /** Lowercase one token and remove at most one conservative inflectional suffix. */
77
+ export function stemToken(token) {
78
+ const normalized = canonicalize(token);
79
+ if (CYRILLIC_TOKEN.test(normalized))
80
+ return stemCyrillic(normalized);
81
+ if (LATIN_TOKEN.test(normalized))
82
+ return stemLatin(normalized);
83
+ return normalized;
84
+ }
85
+ /** Tokenize and stem a text with the shared RU/EN rules. */
86
+ export function stems(text) {
87
+ return tokenize(text).map(stemToken);
88
+ }
89
+ //# sourceMappingURL=stem.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stem.js","sourceRoot":"","sources":["../src/stem.ts"],"names":[],"mappings":"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"}