@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.
- package/.dz-manifest.json +490 -170
- package/LICENSE +13 -0
- package/README.md +420 -6
- package/dist/agents-policy.d.ts +15 -1
- package/dist/agents-policy.d.ts.map +1 -1
- package/dist/agents-policy.js +27 -1
- package/dist/agents-policy.js.map +1 -1
- package/dist/amendment-trace.d.ts +72 -0
- package/dist/amendment-trace.d.ts.map +1 -1
- package/dist/amendment-trace.js +385 -17
- package/dist/amendment-trace.js.map +1 -1
- package/dist/backlog-public.d.ts +153 -0
- package/dist/backlog-public.d.ts.map +1 -0
- package/dist/backlog-public.js +415 -0
- package/dist/backlog-public.js.map +1 -0
- package/dist/backlog-transitions.d.ts +48 -0
- package/dist/backlog-transitions.d.ts.map +1 -0
- package/dist/backlog-transitions.js +64 -0
- package/dist/backlog-transitions.js.map +1 -0
- package/dist/backlog.d.ts.map +1 -1
- package/dist/backlog.js +13 -0
- package/dist/backlog.js.map +1 -1
- package/dist/claim-check.d.ts.map +1 -1
- package/dist/claim-check.js +24 -2
- package/dist/claim-check.js.map +1 -1
- package/dist/claude-hooks-assets.d.ts +93 -0
- package/dist/claude-hooks-assets.d.ts.map +1 -0
- package/dist/claude-hooks-assets.js +208 -0
- package/dist/claude-hooks-assets.js.map +1 -0
- package/dist/clean-room-smoke.d.ts +83 -0
- package/dist/clean-room-smoke.d.ts.map +1 -0
- package/dist/clean-room-smoke.js +138 -0
- package/dist/clean-room-smoke.js.map +1 -0
- package/dist/cmd-usage.d.ts.map +1 -1
- package/dist/cmd-usage.js +36 -6
- package/dist/cmd-usage.js.map +1 -1
- package/dist/codex-hooks-assets.d.ts +25 -7
- package/dist/codex-hooks-assets.d.ts.map +1 -1
- package/dist/codex-hooks-assets.js +138 -30
- package/dist/codex-hooks-assets.js.map +1 -1
- package/dist/codex-hooks.d.ts +21 -1
- package/dist/codex-hooks.d.ts.map +1 -1
- package/dist/codex-hooks.js +21 -1
- package/dist/codex-hooks.js.map +1 -1
- package/dist/codex-invoke.d.ts +73 -0
- package/dist/codex-invoke.d.ts.map +1 -0
- package/dist/codex-invoke.js +80 -0
- package/dist/codex-invoke.js.map +1 -0
- package/dist/course-staleness.d.ts +19 -0
- package/dist/course-staleness.d.ts.map +1 -0
- package/dist/course-staleness.js +95 -0
- package/dist/course-staleness.js.map +1 -0
- package/dist/destructive-guard-hook.d.ts +40 -0
- package/dist/destructive-guard-hook.d.ts.map +1 -0
- package/dist/destructive-guard-hook.js +109 -0
- package/dist/destructive-guard-hook.js.map +1 -0
- package/dist/destructive-guard.d.ts +27 -0
- package/dist/destructive-guard.d.ts.map +1 -0
- package/dist/destructive-guard.js +2808 -0
- package/dist/destructive-guard.js.map +1 -0
- package/dist/discrimination-gate.d.ts +88 -3
- package/dist/discrimination-gate.d.ts.map +1 -1
- package/dist/discrimination-gate.js +173 -16
- package/dist/discrimination-gate.js.map +1 -1
- package/dist/event-chain.d.ts +30 -0
- package/dist/event-chain.d.ts.map +1 -1
- package/dist/event-chain.js +24 -0
- package/dist/event-chain.js.map +1 -1
- package/dist/feature-adr-routing.d.ts +95 -1
- package/dist/feature-adr-routing.d.ts.map +1 -1
- package/dist/feature-adr-routing.js +193 -27
- package/dist/feature-adr-routing.js.map +1 -1
- package/dist/guard.d.ts +98 -0
- package/dist/guard.d.ts.map +1 -1
- package/dist/guard.js +308 -0
- package/dist/guard.js.map +1 -1
- package/dist/harness-core-location.d.ts +18 -0
- package/dist/harness-core-location.d.ts.map +1 -0
- package/dist/harness-core-location.js +42 -0
- package/dist/harness-core-location.js.map +1 -0
- package/dist/index.d.ts +32 -11
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +32 -7
- package/dist/index.js.map +1 -1
- package/dist/lead-shift-gate.d.ts +95 -0
- package/dist/lead-shift-gate.d.ts.map +1 -0
- package/dist/lead-shift-gate.js +100 -0
- package/dist/lead-shift-gate.js.map +1 -0
- package/dist/ledger-backfill.d.ts +11 -1
- package/dist/ledger-backfill.d.ts.map +1 -1
- package/dist/ledger-backfill.js +19 -0
- package/dist/ledger-backfill.js.map +1 -1
- package/dist/loop-blobs.generated.d.ts +1 -1
- package/dist/loop-blobs.generated.d.ts.map +1 -1
- package/dist/loop-blobs.generated.js +12 -3
- package/dist/loop-blobs.generated.js.map +1 -1
- package/dist/loop-lint.d.ts.map +1 -1
- package/dist/loop-lint.js +56 -7
- package/dist/loop-lint.js.map +1 -1
- package/dist/loop-plan-graph.d.ts +1 -3
- package/dist/loop-plan-graph.d.ts.map +1 -1
- package/dist/loop-plan-graph.js +70 -1
- package/dist/loop-plan-graph.js.map +1 -1
- package/dist/loop-trace.d.ts.map +1 -1
- package/dist/loop-trace.js +16 -2
- package/dist/loop-trace.js.map +1 -1
- package/dist/managed-hooks.d.ts +5 -6
- package/dist/managed-hooks.d.ts.map +1 -1
- package/dist/managed-hooks.js +2 -2
- package/dist/managed-hooks.js.map +1 -1
- package/dist/model-recommender.d.ts.map +1 -1
- package/dist/model-recommender.js +14 -3
- package/dist/model-recommender.js.map +1 -1
- package/dist/mutation-gate.d.ts +39 -36
- package/dist/mutation-gate.d.ts.map +1 -1
- package/dist/mutation-gate.js +111 -5
- package/dist/mutation-gate.js.map +1 -1
- package/dist/operations.d.ts.map +1 -1
- package/dist/operations.js +90 -5
- package/dist/operations.js.map +1 -1
- package/dist/patterns.d.ts +23 -0
- package/dist/patterns.d.ts.map +1 -1
- package/dist/patterns.js +10 -0
- package/dist/patterns.js.map +1 -1
- package/dist/plugin.d.ts.map +1 -1
- package/dist/plugin.js +27 -5
- package/dist/plugin.js.map +1 -1
- package/dist/publish.d.ts +11 -0
- package/dist/publish.d.ts.map +1 -1
- package/dist/publish.js +16 -2
- package/dist/publish.js.map +1 -1
- package/dist/recommend.d.ts +4 -5
- package/dist/recommend.d.ts.map +1 -1
- package/dist/recommend.js +110 -45
- package/dist/recommend.js.map +1 -1
- package/dist/registry.d.ts +32 -1
- package/dist/registry.d.ts.map +1 -1
- package/dist/registry.js +168 -11
- package/dist/registry.js.map +1 -1
- package/dist/run-records.d.ts +3 -0
- package/dist/run-records.d.ts.map +1 -1
- package/dist/run-records.js +18 -0
- package/dist/run-records.js.map +1 -1
- package/dist/score.d.ts +95 -0
- package/dist/score.d.ts.map +1 -1
- package/dist/score.js +289 -6
- package/dist/score.js.map +1 -1
- package/dist/session-retro.d.ts +121 -2
- package/dist/session-retro.d.ts.map +1 -1
- package/dist/session-retro.js +454 -11
- package/dist/session-retro.js.map +1 -1
- package/dist/setup.d.ts +28 -0
- package/dist/setup.d.ts.map +1 -1
- package/dist/setup.js +223 -6
- package/dist/setup.js.map +1 -1
- package/dist/sign.d.ts.map +1 -1
- package/dist/sign.js +18 -1
- package/dist/sign.js.map +1 -1
- package/dist/skill-selection.d.ts +72 -0
- package/dist/skill-selection.d.ts.map +1 -0
- package/dist/skill-selection.js +76 -0
- package/dist/skill-selection.js.map +1 -0
- package/dist/skills-verify.d.ts +34 -1
- package/dist/skills-verify.d.ts.map +1 -1
- package/dist/skills-verify.js +82 -0
- package/dist/skills-verify.js.map +1 -1
- package/dist/stage-line.d.ts +68 -0
- package/dist/stage-line.d.ts.map +1 -0
- package/dist/stage-line.js +129 -0
- package/dist/stage-line.js.map +1 -0
- package/dist/statusline.d.ts +99 -0
- package/dist/statusline.d.ts.map +1 -1
- package/dist/statusline.js +310 -44
- package/dist/statusline.js.map +1 -1
- package/dist/stem.d.ts +12 -0
- package/dist/stem.d.ts.map +1 -0
- package/dist/stem.js +89 -0
- package/dist/stem.js.map +1 -0
- package/dist/store-counts.d.ts +26 -0
- package/dist/store-counts.d.ts.map +1 -0
- package/dist/store-counts.js +125 -0
- package/dist/store-counts.js.map +1 -0
- package/dist/store-guard.d.ts +106 -0
- package/dist/store-guard.d.ts.map +1 -0
- package/dist/store-guard.js +294 -0
- package/dist/store-guard.js.map +1 -0
- package/dist/swarm-brief.d.ts +95 -0
- package/dist/swarm-brief.d.ts.map +1 -0
- package/dist/swarm-brief.js +660 -0
- package/dist/swarm-brief.js.map +1 -0
- package/dist/telemetry-vocabulary.d.ts +7 -0
- package/dist/telemetry-vocabulary.d.ts.map +1 -1
- package/dist/telemetry-vocabulary.js +29 -0
- package/dist/telemetry-vocabulary.js.map +1 -1
- package/dist/trace-bundle.d.ts +8 -0
- package/dist/trace-bundle.d.ts.map +1 -1
- package/dist/trace-bundle.js +11 -0
- package/dist/trace-bundle.js.map +1 -1
- package/package.json +10 -9
- package/sbom.json +1033 -233
- package/src/agents-policy.ts +46 -2
- package/src/amendment-trace.ts +441 -19
- package/src/backlog-public.ts +503 -0
- package/src/backlog-transitions.ts +77 -0
- package/src/backlog.ts +12 -0
- package/src/claim-check.ts +25 -2
- package/src/claude-hooks-assets.ts +227 -0
- package/src/clean-room-smoke.ts +195 -0
- package/src/cmd-usage.ts +29 -5
- package/src/codex-hooks-assets.ts +140 -30
- package/src/codex-hooks.ts +21 -1
- package/src/codex-invoke.ts +138 -0
- package/src/course-staleness.ts +125 -0
- package/src/destructive-guard-hook.ts +151 -0
- package/src/destructive-guard.ts +3027 -0
- package/src/discrimination-gate.ts +262 -19
- package/src/event-chain.ts +41 -0
- package/src/feature-adr-routing.ts +220 -22
- package/src/guard.ts +358 -0
- package/src/harness-core-location.ts +44 -0
- package/src/index.ts +121 -7
- package/src/lead-shift-gate.ts +145 -0
- package/src/ledger-backfill.ts +20 -1
- package/src/loop-blobs.generated.ts +12 -3
- package/src/loop-lint.ts +52 -7
- package/src/loop-plan-graph.ts +66 -1
- package/src/loop-trace.ts +13 -1
- package/src/managed-hooks.ts +5 -6
- package/src/model-recommender.ts +14 -3
- package/src/mutation-gate.ts +165 -5
- package/src/operations.ts +83 -5
- package/src/patterns.ts +33 -0
- package/src/plugin.ts +27 -5
- package/src/publish.ts +27 -2
- package/src/recommend.ts +116 -46
- package/src/registry.ts +147 -13
- package/src/run-records.ts +23 -0
- package/src/score.ts +377 -7
- package/src/session-retro.ts +466 -11
- package/src/setup.ts +246 -9
- package/src/sign.ts +18 -1
- package/src/skill-selection.ts +111 -0
- package/src/skills-verify.ts +99 -1
- package/src/stage-line.ts +151 -0
- package/src/statusline.ts +396 -47
- package/src/stem.ts +87 -0
- package/src/store-counts.ts +154 -0
- package/src/store-guard.ts +388 -0
- package/src/swarm-brief.ts +661 -0
- package/src/telemetry-vocabulary.ts +36 -0
- package/src/trace-bundle.ts +10 -0
package/dist/statusline.js
CHANGED
|
@@ -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.
|
|
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 =
|
|
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
|
-
*
|
|
58
|
-
*
|
|
59
|
-
*
|
|
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
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
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 =
|
|
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
|
-
|
|
287
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
package/dist/statusline.js.map
CHANGED
|
@@ -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":"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"}
|
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
|
package/dist/stem.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stem.js","sourceRoot":"","sources":["../src/stem.ts"],"names":[],"mappings":"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"}
|