@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.
- package/dist/cli/tutorial/sm-tutorial/SKILL.md +100 -13
- package/dist/cli.js +2684 -988
- package/dist/cli.js.map +1 -1
- package/dist/conformance/index.d.ts +4 -4
- package/dist/conformance/index.js +48 -2
- package/dist/conformance/index.js.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.js +256 -25
- package/dist/index.js.map +1 -1
- package/dist/kernel/index.d.ts +232 -17
- package/dist/kernel/index.js +256 -25
- package/dist/kernel/index.js.map +1 -1
- package/dist/migrations/001_initial.sql +26 -0
- package/dist/ui/chunk-47MG5XH2.js +317 -0
- package/dist/ui/{chunk-YZ7KCL3G.js → chunk-4CDTW64C.js} +1 -1
- package/dist/ui/chunk-4XEJUDPL.js +123 -0
- package/dist/ui/{chunk-2QZDJSJN.js → chunk-5AZ5S6JB.js} +1 -1
- package/dist/ui/{chunk-TKV6TXTI.js → chunk-AAR3Y55J.js} +3 -3
- package/dist/ui/chunk-CR3AANNX.js +3 -0
- package/dist/ui/{chunk-UMCC32EJ.js → chunk-G5CKBDBB.js} +1 -1
- package/dist/ui/{chunk-5CFY2K3Y.js → chunk-KKOZFBXQ.js} +1 -1
- package/dist/ui/{chunk-UK5YFHL3.js → chunk-NTM2J2WO.js} +5 -5
- package/dist/ui/{chunk-LTQTJU54.js → chunk-O5N7UH37.js} +13 -13
- package/dist/ui/{chunk-FQOZBFJ5.js → chunk-QZM2G474.js} +2 -2
- package/dist/ui/chunk-Z4LANJFK.js +1 -0
- package/dist/ui/index.html +6 -9
- package/dist/ui/main-EO5QNLE4.js +2 -0
- package/migrations/001_initial.sql +26 -0
- package/package.json +4 -4
- package/dist/ui/chunk-5JBW2LUN.js +0 -2
- package/dist/ui/chunk-GQ5YNA5Q.js +0 -123
- package/dist/ui/chunk-KJQEO6P3.js +0 -1
- package/dist/ui/chunk-L3OLNVKI.js +0 -317
- package/dist/ui/main-MGFSWAOX.js +0 -2
package/dist/kernel/index.d.ts
CHANGED
|
@@ -1,15 +1,15 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Extension registry, six kinds, first-class, loaded through a single API.
|
|
3
3
|
*
|
|
4
|
-
* The `
|
|
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`). `
|
|
12
|
-
* `
|
|
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
|
|
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:
|
|
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):
|
|
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):
|
|
56
|
-
all(kind: ExtensionKind):
|
|
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
|
-
* `
|
|
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
|
|
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,
|
|
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
|
|
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
|
-
}):
|
|
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,
|
|
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,
|
|
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
|
|
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 };
|