@skill-map/cli 0.36.0 → 0.38.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (34) hide show
  1. package/dist/cli/tutorial/sm-tutorial/SKILL.md +100 -13
  2. package/dist/cli.js +2684 -988
  3. package/dist/cli.js.map +1 -1
  4. package/dist/conformance/index.d.ts +4 -4
  5. package/dist/conformance/index.js +48 -2
  6. package/dist/conformance/index.js.map +1 -1
  7. package/dist/index.d.ts +1 -1
  8. package/dist/index.js +256 -25
  9. package/dist/index.js.map +1 -1
  10. package/dist/kernel/index.d.ts +232 -17
  11. package/dist/kernel/index.js +256 -25
  12. package/dist/kernel/index.js.map +1 -1
  13. package/dist/migrations/001_initial.sql +26 -0
  14. package/dist/ui/chunk-47MG5XH2.js +317 -0
  15. package/dist/ui/{chunk-YZ7KCL3G.js → chunk-4CDTW64C.js} +1 -1
  16. package/dist/ui/chunk-4XEJUDPL.js +123 -0
  17. package/dist/ui/{chunk-2QZDJSJN.js → chunk-5AZ5S6JB.js} +1 -1
  18. package/dist/ui/{chunk-TKV6TXTI.js → chunk-AAR3Y55J.js} +3 -3
  19. package/dist/ui/chunk-CR3AANNX.js +3 -0
  20. package/dist/ui/{chunk-UMCC32EJ.js → chunk-G5CKBDBB.js} +1 -1
  21. package/dist/ui/{chunk-5CFY2K3Y.js → chunk-KKOZFBXQ.js} +1 -1
  22. package/dist/ui/{chunk-UK5YFHL3.js → chunk-NTM2J2WO.js} +5 -5
  23. package/dist/ui/{chunk-LTQTJU54.js → chunk-O5N7UH37.js} +13 -13
  24. package/dist/ui/{chunk-FQOZBFJ5.js → chunk-QZM2G474.js} +2 -2
  25. package/dist/ui/chunk-Z4LANJFK.js +1 -0
  26. package/dist/ui/index.html +6 -9
  27. package/dist/ui/main-EO5QNLE4.js +2 -0
  28. package/migrations/001_initial.sql +26 -0
  29. package/package.json +4 -4
  30. package/dist/ui/chunk-5JBW2LUN.js +0 -2
  31. package/dist/ui/chunk-GQ5YNA5Q.js +0 -123
  32. package/dist/ui/chunk-KJQEO6P3.js +0 -1
  33. package/dist/ui/chunk-L3OLNVKI.js +0 -317
  34. package/dist/ui/main-MGFSWAOX.js +0 -2
@@ -1,15 +1,15 @@
1
1
  /**
2
2
  * Extension registry, six kinds, first-class, loaded through a single API.
3
3
  *
4
- * The `Extension` shape is aligned with `spec/schemas/extensions/base.schema.json`.
4
+ * The `IExtension` shape is aligned with `spec/schemas/extensions/base.schema.json`.
5
5
  * Kind-specific manifests (provider / extractor / analyzer / action / formatter /
6
6
  * hook) extend this base structurally; the registry stores the base view
7
7
  * and each kind's code carries its own fuller type where needed.
8
8
  *
9
9
  * **Spec § A.6, qualified ids.** Every extension is keyed in the registry
10
10
  * by `<pluginId>/<id>` (e.g. `core/annotations`, `core/slash`,
11
- * `my-plugin/my-extractor`). `Extension.id` carries the **short** id as authored;
12
- * `Extension.pluginId` carries the namespace; the registry composes the
11
+ * `my-plugin/my-extractor`). `IExtension.id` carries the **short** id as authored;
12
+ * `IExtension.pluginId` carries the namespace; the registry composes the
13
13
  * qualifier internally and exposes lookup APIs that operate on either form
14
14
  * (qualified for direct lookup, kind-scoped listing for enumeration).
15
15
  *
@@ -19,7 +19,7 @@
19
19
  */
20
20
  type ExtensionKind = 'provider' | 'extractor' | 'analyzer' | 'action' | 'formatter' | 'hook';
21
21
  declare const EXTENSION_KINDS: readonly ExtensionKind[];
22
- interface Extension {
22
+ interface IExtension {
23
23
  /** Short (unqualified) extension id, injected by the loader from the leaf folder name. */
24
24
  id: string;
25
25
  /** Owning plugin namespace, injected by the loader from the plugin folder name. */
@@ -42,18 +42,18 @@ declare class DuplicateExtensionError extends Error {
42
42
  declare class Registry {
43
43
  #private;
44
44
  constructor();
45
- register(ext: Extension): void;
45
+ register(ext: IExtension): void;
46
46
  /**
47
47
  * Lookup by qualified id (`<pluginId>/<id>`). Returns `undefined` when
48
48
  * no extension of that kind is registered under the qualifier.
49
49
  */
50
- get(kind: ExtensionKind, qualifiedId: string): Extension | undefined;
50
+ get(kind: ExtensionKind, qualifiedId: string): IExtension | undefined;
51
51
  /**
52
52
  * Convenience wrapper that composes the qualified id for the caller.
53
53
  * Equivalent to `get(kind, qualifiedExtensionId(pluginId, id))`.
54
54
  */
55
- find(kind: ExtensionKind, pluginId: string, id: string): Extension | undefined;
56
- all(kind: ExtensionKind): Extension[];
55
+ find(kind: ExtensionKind, pluginId: string, id: string): IExtension | undefined;
56
+ all(kind: ExtensionKind): IExtension[];
57
57
  count(kind: ExtensionKind): number;
58
58
  totalCount(): number;
59
59
  }
@@ -207,7 +207,7 @@ interface IRegisteredViewContribution {
207
207
  }
208
208
  /**
209
209
  * Common fields on every setting declaration. The discriminated union
210
- * `ISettingDeclaration` extends one of these per `type` value.
210
+ * `TSettingDeclaration` extends one of these per `type` value.
211
211
  */
212
212
  interface ISettingCommon {
213
213
  /** Required. Short human-readable label. English-only. */
@@ -297,7 +297,7 @@ interface ISetting_KeyValueList extends ISettingCommon {
297
297
  *
298
298
  * Mirror of `input-types.schema.json#/$defs/ISettingDeclaration`.
299
299
  */
300
- type ISettingDeclaration = ISetting_StringList | ISetting_SingleString | ISetting_BooleanFlag | ISetting_Integer | ISetting_EnumPick | ISetting_EnumMultipick | ISetting_PathGlob | ISetting_Regex | ISetting_Secret | ISetting_KeyValueList;
300
+ type TSettingDeclaration = ISetting_StringList | ISetting_SingleString | ISetting_BooleanFlag | ISetting_Integer | ISetting_EnumPick | ISetting_EnumMultipick | ISetting_PathGlob | ISetting_Regex | ISetting_Secret | ISetting_KeyValueList;
301
301
  /**
302
302
  * Runtime value type for a setting, derived from its declaration. The
303
303
  * kernel exposes settings to extractors as `Record<string, TSettingValue>`
@@ -378,7 +378,7 @@ interface IExtensionBase {
378
378
  * `ctx.settings.<settingId>`. Settings are read once at extension
379
379
  * invocation; changing a setting requires `sm scan` to re-emit.
380
380
  */
381
- settings?: Record<string, ISettingDeclaration>;
381
+ settings?: Record<string, TSettingDeclaration>;
382
382
  /**
383
383
  * Resolved values of the settings declared above, populated by the
384
384
  * orchestrator from project config + user overrides. Runtime-only,
@@ -552,6 +552,55 @@ interface LinkLocation {
552
552
  column?: number;
553
553
  offset?: number;
554
554
  }
555
+ /**
556
+ * One syntactic site in the source node's body that contributed to a
557
+ * `Link`. Multiple occurrences accumulate when the same edge is detected
558
+ * by more than one extractor (e.g. `@./foo.md` from `at-directive` and
559
+ * `[label](./foo.md)` from `markdown-link` both resolve to the same
560
+ * target), or when the same extractor walks an extractor-internal
561
+ * dedup boundary. Today the merged edge's `trigger` / `location`
562
+ * mirror the FIRST occurrence; the array carries every site so the
563
+ * `core/redundant-target-reference` analyzer can flag multi-form
564
+ * references and rename operations can find every author surface.
565
+ */
566
+ interface LinkOccurrence {
567
+ /**
568
+ * Extractor id that observed this occurrence. Matches an entry of
569
+ * the parent `Link.sources[]` (extractor + occurrence are not 1:1,
570
+ * the same extractor can produce multiple occurrences when the
571
+ * intra-extractor dedup is relaxed in the future).
572
+ */
573
+ extractor: string;
574
+ /**
575
+ * Original substring as it appeared in the body (`@./real-agent.md`,
576
+ * `[deploy](./deploy.md)`, `/help`, `@team-lead`). Preserves author
577
+ * casing and the leading sigil so the analyzer can surface it
578
+ * verbatim in fix-up messages.
579
+ */
580
+ originalTrigger: string;
581
+ /**
582
+ * Position of the occurrence in the body. Optional, an extractor
583
+ * that does not track line numbers yet (legacy emit paths) omits
584
+ * this field; the analyzer falls back to "unknown line" in messages.
585
+ */
586
+ location?: LinkLocation | null;
587
+ }
588
+ /**
589
+ * External URL referenced from a node's body. Populated by the
590
+ * `core/external-url-counter` extractor and surfaced on the node so
591
+ * the inspector can list every outgoing http(s) reference without
592
+ * re-walking the body. Distinct from internal `Link` (which connects
593
+ * nodes inside the graph), external refs are leaf metadata: no
594
+ * counterparty node, no resolution.
595
+ */
596
+ interface IExternalRef {
597
+ /** Normalised URL (lowercased host, fragment stripped). */
598
+ url: string;
599
+ /** 1-indexed line of the occurrence in the source body, when known. */
600
+ line?: number;
601
+ /** Verbatim author substring (sigil-free; usually equals `url`). */
602
+ originalTrigger?: string;
603
+ }
555
604
  interface Node {
556
605
  path: string;
557
606
  /**
@@ -570,6 +619,15 @@ interface Node {
570
619
  linksOutCount: number;
571
620
  linksInCount: number;
572
621
  externalRefsCount: number;
622
+ /**
623
+ * Distinct external URLs referenced from this node's body, in
624
+ * extractor-order (first-seen wins, dedup is by normalised URL).
625
+ * Empty / absent when the body has no http(s) URLs. The denormalised
626
+ * `externalRefsCount` MUST equal `externalRefs.length` whenever
627
+ * both are present. Surfaced via `/api/nodes` so the inspector can
628
+ * list each URL without an extra round-trip.
629
+ */
630
+ externalRefs?: IExternalRef[];
573
631
  frontmatter?: Record<string, unknown>;
574
632
  tokens?: TripleSplit;
575
633
  /**
@@ -657,6 +715,30 @@ interface Link {
657
715
  sources: string[];
658
716
  trigger?: LinkTrigger | null;
659
717
  location?: LinkLocation | null;
718
+ /**
719
+ * Every syntactic site in the source body that contributed to this
720
+ * edge. Populated by extractors at emit time (one entry per emission)
721
+ * and accumulated by `dedupeLinks` when two extractors converge on the
722
+ * same `(source, target, kind, normalizedTrigger)` key. Empty / absent
723
+ * for legacy emits or for synthetic links (frontmatter-driven
724
+ * references, sidecar annotations) that have no body position. The
725
+ * `core/redundant-target-reference` analyzer walks this array to
726
+ * detect multi-form references to the same target from one body.
727
+ */
728
+ occurrences?: LinkOccurrence[];
729
+ /**
730
+ * Node path the link resolves to, when the post-walk
731
+ * `liftResolvedLinkConfidence` transform succeeded in matching the
732
+ * (trigger-style or path-style) target against the live graph. Equal
733
+ * to `link.target` for path-style links that hit a node directly;
734
+ * different from `link.target` for trigger-style links (a Claude
735
+ * `@real-agent` mention resolves to `.claude/agents/real-agent.md`,
736
+ * but `link.target` keeps the authored trigger). Absent when the
737
+ * link is unresolved (broken). The BFF `/api/links?to=<path>` uses
738
+ * this field to surface incoming edges that reach the node by name,
739
+ * not just by literal path.
740
+ */
741
+ resolvedTarget?: string | null;
660
742
  raw?: string | null;
661
743
  }
662
744
  /**
@@ -677,11 +759,16 @@ type SignalScope = 'body' | 'frontmatter' | 'sidecar';
677
759
  type SignalContext = 'code-block' | 'inline-code' | 'escaped';
678
760
  /**
679
761
  * Byte-range location for a body-scope `Signal`. `start` is inclusive,
680
- * `end` is exclusive (one past the last char).
762
+ * `end` is exclusive (one past the last char). `line` is the optional
763
+ * 1-indexed line number containing `start`, populated by extractors
764
+ * that already compute line tracking via `computeLineStarts` so the
765
+ * resolver's materialised `Link` preserves `link.location.line`
766
+ * without re-walking the body.
681
767
  */
682
768
  interface SignalRange {
683
769
  start: number;
684
770
  end: number;
771
+ line?: number;
685
772
  }
686
773
  /**
687
774
  * One alternative interpretation of a `Signal`. The resolver picks the
@@ -735,6 +822,59 @@ interface Signal {
735
822
  context?: SignalContext | null;
736
823
  /** One or more alternative interpretations. At least one. */
737
824
  candidates: SignalCandidate[];
825
+ /**
826
+ * Resolver outcome annotation, populated by `resolveSignals`. Absent on
827
+ * raw extractor emissions (before the resolver runs). When
828
+ * `outcome === 'materialised'`, `winnerIndex` points into `candidates[]`
829
+ * of the candidate the resolver chose; a corresponding `Link` was added
830
+ * to the graph. When `outcome === 'rejected'`, one of `rejectedBy` /
831
+ * `extractorDisabled` / `belowFloor` is set and no Link materialised.
832
+ * Both materialised and rejected Signals remain on
833
+ * `IAnalyzerContext.signals` so the `core/signal-collision` analyzer can
834
+ * surface losers as `warn` issues. Mirrors
835
+ * `signal.schema.json#/properties/resolution`.
836
+ */
837
+ resolution?: ISignalResolution;
838
+ }
839
+ /**
840
+ * Why the resolver chose to materialise or reject a `Signal`. Populated by
841
+ * `resolveSignals`; carries no meaning before that pass.
842
+ */
843
+ interface ISignalResolution {
844
+ outcome: 'materialised' | 'rejected';
845
+ /** Index into `Signal.candidates[]` of the winner. Set when `outcome === 'materialised'`. */
846
+ winnerIndex?: number;
847
+ /**
848
+ * Set when the Signal lost a cross-extractor range-overlap collision
849
+ * against another Signal at the same `source`. Names the winning Signal
850
+ * so an analyzer (or the operator drilling into the sidecar) can see WHO
851
+ * won and WHY.
852
+ */
853
+ rejectedBy?: {
854
+ source: string;
855
+ range: SignalRange;
856
+ /** Qualified id (`<plugin>/<extractor>`) of the winning candidate's extractor. */
857
+ extractorId: string;
858
+ reason: 'kind-priority' | 'higher-confidence' | 'longer-range' | 'earlier-declaration';
859
+ };
860
+ /**
861
+ * Phase 4+ stub: populated when every candidate of this Signal came from
862
+ * an extractor the operator disabled via
863
+ * `plugins.<id>.extensions.<extId>.enabled`. Today the resolver never
864
+ * sets this; documented so analyzer surfaces can be built when the filter
865
+ * lands.
866
+ */
867
+ extractorDisabled?: {
868
+ extractorId: string;
869
+ };
870
+ /**
871
+ * Phase 4+ stub: populated when every candidate's `confidence` fell below
872
+ * the configured floor. Today the resolver materialises every Signal that
873
+ * survives overlap regardless of confidence.
874
+ */
875
+ belowFloor?: {
876
+ threshold: number;
877
+ };
738
878
  }
739
879
  interface IssueFix {
740
880
  summary?: string;
@@ -1162,7 +1302,7 @@ interface IKvStoreWrapper {
1162
1302
  * `write(table, row)`. Plugin authors narrow at the call site based on
1163
1303
  * the storage mode declared in their `plugin.json`.
1164
1304
  */
1165
- type IPluginStore = IKvStoreWrapper | IDedicatedStoreWrapper;
1305
+ type TPluginStore = IKvStoreWrapper | IDedicatedStoreWrapper;
1166
1306
  declare function makeKvStoreWrapper(opts: {
1167
1307
  pluginId: string;
1168
1308
  schema: IPluginStorageSchema | undefined;
@@ -1198,7 +1338,7 @@ declare function makePluginStore(opts: {
1198
1338
  plugin: IDiscoveredPlugin;
1199
1339
  persistKv?: IKvStorePersist;
1200
1340
  persistDedicated?: IDedicatedStorePersist;
1201
- }): IPluginStore | undefined;
1341
+ }): TPluginStore | undefined;
1202
1342
 
1203
1343
  /**
1204
1344
  * Row-level filter for `port.scans.findNodes(...)` (driven by
@@ -1328,6 +1468,14 @@ interface IIssueRow {
1328
1468
  * - `nodePath`, keeps issues whose `nodeIds` JSON array contains the
1329
1469
  * given path (correlated EXISTS over `json_each`). Absent / null
1330
1470
  * skips the filter.
1471
+ * - `nodePaths`, multi-node variant of `nodePath`: keeps issues
1472
+ * whose `nodeIds` JSON array intersects the given set (correlated
1473
+ * EXISTS over `json_each` with an `IN(...)` predicate). Used by
1474
+ * the linked-nodes panel to fetch issues for the focused node +
1475
+ * its neighbours in one round-trip instead of pulling the whole
1476
+ * table. Empty array matches zero rows; absent skips the filter.
1477
+ * Combines with `nodePath` (intersection); when both are set, the
1478
+ * `nodePath` predicate is AND-ed with `nodePaths`.
1331
1479
  *
1332
1480
  * Pagination is mandatory; the route layer fills the defaults via
1333
1481
  * `parsePagination`. `total` in `IIssueListResult` reports the total
@@ -1345,6 +1493,7 @@ interface IIssueListFilter {
1345
1493
  severities?: readonly string[];
1346
1494
  analyzerIds?: readonly string[];
1347
1495
  nodePath?: string | null;
1496
+ nodePaths?: readonly string[];
1348
1497
  offset: number;
1349
1498
  limit: number;
1350
1499
  }
@@ -1969,6 +2118,34 @@ interface IProvider extends IExtensionBase {
1969
2118
  * confidence-lift contract, which runs against the merged Link graph.
1970
2119
  */
1971
2120
  resolution?: Record<string, string[]>;
2121
+ /**
2122
+ * Lens gating flag for vendor providers. When `true`, this Provider's
2123
+ * `classify()` only runs (and the walker only iterates its territory)
2124
+ * if `provider.id === activeProvider` (the project's active lens).
2125
+ * When `false` or omitted (default), the Provider is universal and
2126
+ * classifies unconditionally, regardless of the active lens.
2127
+ *
2128
+ * Vendor providers (`claude`, `openai`, `antigravity`) MUST set this
2129
+ * to `true`: the actual runtimes never read each other's on-disk
2130
+ * formats (Claude Code does not consume `.codex/`; Codex CLI does not
2131
+ * consume `.claude/`), and offering every file to every provider
2132
+ * fabricates cross-vendor graph edges the runtimes themselves reject.
2133
+ *
2134
+ * Universal providers (the open-standard `agent-skills`, the markdown
2135
+ * fallback `core/markdown`, any future format-based fallback) keep
2136
+ * this `false`: their territory is consumed by every vendor and they
2137
+ * MUST run on every scan, regardless of the active lens.
2138
+ *
2139
+ * When `activeProvider === null` (no lens resolved, e.g. a project
2140
+ * with no provider markers), the walker bypasses the gate entirely
2141
+ * and every gated Provider runs, mirroring the permissive
2142
+ * extractor-side fallback for unlensed projects.
2143
+ *
2144
+ * Default `undefined` ≡ `false` ≡ universal. The field affects
2145
+ * classification ONLY; extractors continue to filter via their own
2146
+ * `precondition.provider` allowlist and are unaffected by this flag.
2147
+ */
2148
+ gatedByActiveLens?: boolean;
1972
2149
  /**
1973
2150
  * Reserved invocation names this Provider's runtime owns for each
1974
2151
  * kind. Maps a `node.kind` to the set of normalised names the runtime
@@ -2004,6 +2181,44 @@ interface IProvider extends IExtensionBase {
2004
2181
  * consumes.
2005
2182
  */
2006
2183
  reservedNames?: Record<string, readonly string[]>;
2184
+ /**
2185
+ * Per-Provider ranking hints consumed by the Signal IR **resolver
2186
+ * phase** (kernel `resolveSignals`). Drives intra-Signal candidate
2187
+ * selection AND cross-Signal range-overlap tiebreaks.
2188
+ *
2189
+ * Optional, when absent the resolver uses the default tiebreak chain:
2190
+ * `confidence` DESC → `range` length DESC → extractor declaration
2191
+ * order. Most Providers do not need to declare this; the default chain
2192
+ * is correct unless the Provider has a kind-specific preference (e.g.
2193
+ * "treat `invokes` edges as more important than `mentions` of the
2194
+ * same range").
2195
+ *
2196
+ * Distinct from the `resolution` field above: `resolverRules` ranks
2197
+ * candidates INSIDE the Signal IR (the candidate that becomes a Link
2198
+ * in the first place); `resolution` ranks Links AFTER they exist
2199
+ * (confidence lift on already-emitted edges). The two surfaces share
2200
+ * no mechanism and intentionally do not compose.
2201
+ */
2202
+ resolverRules?: IResolverRules;
2203
+ }
2204
+ /**
2205
+ * Per-Provider Signal IR resolver ranking hints. Mirrors
2206
+ * `extensions/provider.schema.json#/properties/resolverRules`.
2207
+ */
2208
+ interface IResolverRules {
2209
+ /**
2210
+ * When present, the resolver ranks candidates whose `kind` appears
2211
+ * earlier in this array ABOVE candidates whose `kind` appears later.
2212
+ * Candidates whose `kind` is absent from the array drop to the end
2213
+ * (after every listed kind). Ties inside the same `kindPriority`
2214
+ * bucket fall through to the `confidence` → range-length → declaration
2215
+ * order tiebreaks.
2216
+ *
2217
+ * Example: a Provider that wants `invokes` edges to win against
2218
+ * `mentions` / `references` of the same byte range declares
2219
+ * `['invokes', 'references', 'mentions']`.
2220
+ */
2221
+ kindPriority?: readonly LinkKind[];
2007
2222
  }
2008
2223
  /**
2009
2224
  * Declarative read config a Provider declares via `IProvider.read`.
@@ -2786,7 +3001,7 @@ declare function runExtractorsForNode(opts: {
2786
3001
  * don't track plugin storage can omit it; the resulting `ctx.store`
2787
3002
  * stays `undefined` (the existing contract).
2788
3003
  */
2789
- pluginStores?: ReadonlyMap<string, IPluginStore>;
3004
+ pluginStores?: ReadonlyMap<string, TPluginStore>;
2790
3005
  }): Promise<{
2791
3006
  internalLinks: Link[];
2792
3007
  externalLinks: Link[];
@@ -3051,7 +3266,7 @@ interface RunScanOptions {
3051
3266
  * its own persist callback) and lets tests inject a captured-call
3052
3267
  * mock without spinning up a DB.
3053
3268
  */
3054
- pluginStores?: ReadonlyMap<string, IPluginStore>;
3269
+ pluginStores?: ReadonlyMap<string, TPluginStore>;
3055
3270
  /**
3056
3271
  * Pre-computed absolute paths of orphan job MD files (files under
3057
3272
  * `.skill-map/jobs/` whose absolute path appears nowhere in
@@ -4092,4 +4307,4 @@ interface Kernel {
4092
4307
  }
4093
4308
  declare function createKernel(): Kernel;
4094
4309
 
4095
- export { type Confidence, DuplicateExtensionError, EXTENSION_KINDS, type ExecutionFailureReason, type ExecutionKind, type ExecutionRecord, type ExecutionRunner, type ExecutionStatus, ExportQueryError, type Extension, type ExtensionKind, type FilesystemPort, HOOK_TRIGGERS, type HistoryStats, type HistoryStatsErrorRates, type HistoryStatsExecutionsPerPeriod, type HistoryStatsPerActionRate, type HistoryStatsTokensPerAction, type HistoryStatsTopNode, type HistoryStatsTotals, type IAction, type IActionContext, type IActionPrecondition, type IActionResult, type IAnalyzer, type IAnalyzerContext, type IAnnotationContribution, type ICreateFsWatcherOptions, type IDedicatedStorePersist, type IDedicatedStoreWrapper, type IDiscoveredPlugin, type IEnrichmentRecord, type IExportQuery, type IExportSubset, type IExtensionBase, type IExtractor, type IExtractorCallbacks, type IExtractorContext, type IExtractorRunRecord, type IFormatter, type IFormatterContext, type IFsWatcher, type IHook, type IHookContext, type IHookDispatcher, type IIssueRow, type IKvStorePersist, type IKvStoreWrapper, type ILoadedExtension, type INodeBundle, type INodeChange, type INodeCounts, type INodeFilter, type IPersistOptions, type IPersistedEnrichment, type IPluginManifest, type IPluginStorageSchema, type IPluginStore, type IProvider, type IRawNode, type IRegisteredAnnotationKey, type IRegisteredViewContribution, type IRunOptions, type IRunResult, type IScanDelta, type ISettingDeclaration, type ITransactionalStorage, type IViewContribution, type IWalkOptions, type IWatchBatch, type IWatchEvent, InMemoryProgressEmitter, type Issue, type IssueFix, KV_SCHEMA_KEY, type Kernel, LOG_LEVELS, type Link, type LinkKind, type LinkLocation, type LinkTrigger, type LogRecord, type LoggerPort, type Node, type NodeKind, type NodeStat, type PluginLoaderPort, type ProgressEmitterPort, type ProgressEvent, Registry, type RenameOp, type RunScanOptions, type RunnerPort, type ScanResult, type ScanScannedBy, type ScanStats, type Severity, SilentLogger, type Stability, type StoragePort, type TActionWrite, type TExecutionMode, type TGranularity, type THookFilter, type THookTrigger, type TInputTypeName, type TLogLevel, type TLogMethodLevel, type TNodeChangeReason, type TPluginLoadStatus, type TPluginStorage, type TProgressListener, type TSettingValue, type TSeverity, type TSlotName, type TWatchEventKind, type TripleSplit, applyExportQuery, computeScanDelta, configureLogger, createChokidarWatcher, createKernel, detectRenamesAndOrphans, getActiveLogger, isEmptyDelta, isLogLevel, log, logLevelRank, makeDedicatedStoreWrapper, makeEvent, makeHookDispatcher, makeKvStoreWrapper, makePluginStore, mergeNodeWithEnrichments, parseExportQuery, parseLogLevel, qualifiedExtensionId, resetLogger, runExtractorsForNode, runScan, runScanWithRenames };
4310
+ export { type Confidence, DuplicateExtensionError, EXTENSION_KINDS, type ExecutionFailureReason, type ExecutionKind, type ExecutionRecord, type ExecutionRunner, type ExecutionStatus, ExportQueryError, type ExtensionKind, type FilesystemPort, HOOK_TRIGGERS, type HistoryStats, type HistoryStatsErrorRates, type HistoryStatsExecutionsPerPeriod, type HistoryStatsPerActionRate, type HistoryStatsTokensPerAction, type HistoryStatsTopNode, type HistoryStatsTotals, type IAction, type IActionContext, type IActionPrecondition, type IActionResult, type IAnalyzer, type IAnalyzerContext, type IAnnotationContribution, type ICreateFsWatcherOptions, type IDedicatedStorePersist, type IDedicatedStoreWrapper, type IDiscoveredPlugin, type IEnrichmentRecord, type IExportQuery, type IExportSubset, type IExtension, type IExtensionBase, type IExternalRef, type IExtractor, type IExtractorCallbacks, type IExtractorContext, type IExtractorRunRecord, type IFormatter, type IFormatterContext, type IFsWatcher, type IHook, type IHookContext, type IHookDispatcher, type IIssueRow, type IKvStorePersist, type IKvStoreWrapper, type ILoadedExtension, type INodeBundle, type INodeChange, type INodeCounts, type INodeFilter, type IPersistOptions, type IPersistedEnrichment, type IPluginManifest, type IPluginStorageSchema, type IProvider, type IRawNode, type IRegisteredAnnotationKey, type IRegisteredViewContribution, type IRunOptions, type IRunResult, type IScanDelta, type ITransactionalStorage, type IViewContribution, type IWalkOptions, type IWatchBatch, type IWatchEvent, InMemoryProgressEmitter, type Issue, type IssueFix, KV_SCHEMA_KEY, type Kernel, LOG_LEVELS, type Link, type LinkKind, type LinkLocation, type LinkOccurrence, type LinkTrigger, type LogRecord, type LoggerPort, type Node, type NodeKind, type NodeStat, type PluginLoaderPort, type ProgressEmitterPort, type ProgressEvent, Registry, type RenameOp, type RunScanOptions, type RunnerPort, type ScanResult, type ScanScannedBy, type ScanStats, type Severity, SilentLogger, type Stability, type StoragePort, type TActionWrite, type TExecutionMode, type TGranularity, type THookFilter, type THookTrigger, type TInputTypeName, type TLogLevel, type TLogMethodLevel, type TNodeChangeReason, type TPluginLoadStatus, type TPluginStorage, type TPluginStore, type TProgressListener, type TSettingDeclaration, type TSettingValue, type TSeverity, type TSlotName, type TWatchEventKind, type TripleSplit, applyExportQuery, computeScanDelta, configureLogger, createChokidarWatcher, createKernel, detectRenamesAndOrphans, getActiveLogger, isEmptyDelta, isLogLevel, log, logLevelRank, makeDedicatedStoreWrapper, makeEvent, makeHookDispatcher, makeKvStoreWrapper, makePluginStore, mergeNodeWithEnrichments, parseExportQuery, parseLogLevel, qualifiedExtensionId, resetLogger, runExtractorsForNode, runScan, runScanWithRenames };