@shrkcrft/inspector 0.1.0-alpha.17 → 0.1.0-alpha.18
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/agent-instructions.d.ts.map +1 -1
- package/dist/agent-instructions.js +11 -0
- package/dist/check-guardrail-globs.d.ts +16 -0
- package/dist/check-guardrail-globs.d.ts.map +1 -0
- package/dist/check-guardrail-globs.js +38 -0
- package/dist/code-intelligence-doctor.js +25 -5
- package/dist/command-recommender.d.ts.map +1 -1
- package/dist/command-recommender.js +16 -4
- package/dist/contract-file-rule.d.ts +8 -0
- package/dist/contract-file-rule.d.ts.map +1 -1
- package/dist/contract-file-rule.js +8 -3
- package/dist/coverage-report.d.ts.map +1 -1
- package/dist/coverage-report.js +14 -1
- package/dist/delegate-catalog.d.ts +45 -0
- package/dist/delegate-catalog.d.ts.map +1 -0
- package/dist/delegate-catalog.js +50 -0
- package/dist/delegate-doctor.d.ts +15 -0
- package/dist/delegate-doctor.d.ts.map +1 -0
- package/dist/delegate-doctor.js +36 -0
- package/dist/delegate-pack-recipes.d.ts +29 -0
- package/dist/delegate-pack-recipes.d.ts.map +1 -0
- package/dist/delegate-pack-recipes.js +77 -0
- package/dist/impact-analysis.d.ts.map +1 -1
- package/dist/impact-analysis.js +10 -2
- package/dist/index.d.ts +4 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +4 -0
- package/dist/plan-simulation.d.ts +13 -0
- package/dist/plan-simulation.d.ts.map +1 -1
- package/dist/plan-simulation.js +1 -1
- package/dist/sharkcraft-inspector.d.ts.map +1 -1
- package/dist/sharkcraft-inspector.js +7 -0
- package/dist/start-here.d.ts +1 -1
- package/dist/start-here.d.ts.map +1 -1
- package/dist/start-here.js +15 -0
- package/dist/test-impact.d.ts.map +1 -1
- package/dist/test-impact.js +5 -2
- package/package.json +17 -17
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"agent-instructions.d.ts","sourceRoot":"","sources":["../src/agent-instructions.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,kBAAkB,
|
|
1
|
+
{"version":3,"file":"agent-instructions.d.ts","sourceRoot":"","sources":["../src/agent-instructions.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,kBAAkB,QA+BvB,CAAC"}
|
|
@@ -9,6 +9,17 @@ Default behavior:
|
|
|
9
9
|
- For generation, list_templates → get_template → create_generation_plan (dry-run by default).
|
|
10
10
|
- Respect path conventions (list_path_conventions, get_path_convention).
|
|
11
11
|
|
|
12
|
+
Understand existing code before you edit (prefer the graph over grep — it returns path:line truth):
|
|
13
|
+
- Who calls / where is a symbol used? call get_graph_callers or code_find_usages (returns path:line).
|
|
14
|
+
- What breaks if I change this file/symbol? call get_graph_impact.
|
|
15
|
+
- What is the load-bearing code (change carefully / understand first)? call get_graph_hubs — most-referenced symbols + most-imported files.
|
|
16
|
+
- Is code A actually wired to code B? call get_graph_path (shortest import/call/implements path between two files or symbols — the deterministic "is X wired to Y").
|
|
17
|
+
- Is X wired / how does this file connect (incl. subtypes/supertypes)? call get_graph_context (get_graph_search to locate it first).
|
|
18
|
+
- These read an index; if a graph tool reports it's missing or stale, run \`shrk graph index\` once.
|
|
19
|
+
|
|
20
|
+
Save your tokens on MECHANICAL edits — delegate them to a local worker:
|
|
21
|
+
- For a repetitive, deterministically-verifiable edit (add a barrel export, ensure an import, a glob-scoped rename) call delegate_task to get a compact brief + the exact \`shrk delegate run\` command, then run it. The local model produces the edit, the engine verifies it (and auto-reverts on failure), and you pay for the brief + result — not for reading the whole file and writing the edit yourself. \`shrk delegate list\` shows what's delegatable.
|
|
22
|
+
|
|
12
23
|
Safety:
|
|
13
24
|
- Never write files unless the user explicitly asks; always prefer dry-run first.
|
|
14
25
|
- Never overwrite existing files unless the plan resolves all conflicts.
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
export interface IGuardrailGlobResult {
|
|
2
|
+
/** Target paths covered by at least one guardrail glob. */
|
|
3
|
+
allowed: readonly string[];
|
|
4
|
+
/** Target paths covered by NO guardrail glob — these must not be written. */
|
|
5
|
+
refused: readonly string[];
|
|
6
|
+
/** True when every target path is allowed. */
|
|
7
|
+
ok: boolean;
|
|
8
|
+
}
|
|
9
|
+
/**
|
|
10
|
+
* Partition `targetPaths` into allowed / refused against the recipe's
|
|
11
|
+
* `guardrailGlobs` (allow-list). An empty glob list refuses everything — a
|
|
12
|
+
* recipe with no blast-radius fence must not write (the config validator also
|
|
13
|
+
* rejects this, but the check is defensive here too).
|
|
14
|
+
*/
|
|
15
|
+
export declare function checkGuardrailGlobs(targetPaths: readonly string[], guardrailGlobs: readonly string[]): IGuardrailGlobResult;
|
|
16
|
+
//# sourceMappingURL=check-guardrail-globs.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"check-guardrail-globs.d.ts","sourceRoot":"","sources":["../src/check-guardrail-globs.ts"],"names":[],"mappings":"AAmBA,MAAM,WAAW,oBAAoB;IACnC,2DAA2D;IAC3D,OAAO,EAAE,SAAS,MAAM,EAAE,CAAC;IAC3B,6EAA6E;IAC7E,OAAO,EAAE,SAAS,MAAM,EAAE,CAAC;IAC3B,8CAA8C;IAC9C,EAAE,EAAE,OAAO,CAAC;CACb;AAED;;;;;GAKG;AACH,wBAAgB,mBAAmB,CACjC,WAAW,EAAE,SAAS,MAAM,EAAE,EAC9B,cAAc,EAAE,SAAS,MAAM,EAAE,GAChC,oBAAoB,CAWtB"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Guardrail-glob enforcement for the delegate worker.
|
|
3
|
+
*
|
|
4
|
+
* A recipe declares an ALLOW-LIST of globs (`guardrailGlobs`). A worker-emitted
|
|
5
|
+
* target path that matches NONE of them is refused before any write — this is
|
|
6
|
+
* one of the deterministic fences the model cannot influence, layered ON TOP of
|
|
7
|
+
* the generator's `safeResolveTargetPath` floor.
|
|
8
|
+
*
|
|
9
|
+
* CRITICAL: the caller MUST pass the NORMALIZED relative path that will actually
|
|
10
|
+
* be written (the output of `safeResolveTargetPath`), not the raw string a
|
|
11
|
+
* worker emitted — otherwise a `../` traversal whose `**` the glob swallows
|
|
12
|
+
* would pass the fence yet write elsewhere in-root. Matching here is
|
|
13
|
+
* CASE-SENSITIVE (file paths are case-significant on the platforms that matter),
|
|
14
|
+
* so `src/**` does not also grant `SRC/…`.
|
|
15
|
+
*
|
|
16
|
+
* Pure: deterministic glob match; no I/O, no model.
|
|
17
|
+
*/
|
|
18
|
+
import { globToRegex, toPosix } from "./contract-file-rule.js";
|
|
19
|
+
/**
|
|
20
|
+
* Partition `targetPaths` into allowed / refused against the recipe's
|
|
21
|
+
* `guardrailGlobs` (allow-list). An empty glob list refuses everything — a
|
|
22
|
+
* recipe with no blast-radius fence must not write (the config validator also
|
|
23
|
+
* rejects this, but the check is defensive here too).
|
|
24
|
+
*/
|
|
25
|
+
export function checkGuardrailGlobs(targetPaths, guardrailGlobs) {
|
|
26
|
+
const matchers = guardrailGlobs.map((g) => globToRegex(toPosix(g)));
|
|
27
|
+
const allowed = [];
|
|
28
|
+
const refused = [];
|
|
29
|
+
for (const path of targetPaths) {
|
|
30
|
+
const f = toPosix(path);
|
|
31
|
+
const covered = matchers.some((re) => re.test(f));
|
|
32
|
+
if (covered)
|
|
33
|
+
allowed.push(path);
|
|
34
|
+
else
|
|
35
|
+
refused.push(path);
|
|
36
|
+
}
|
|
37
|
+
return { allowed, refused, ok: refused.length === 0 };
|
|
38
|
+
}
|
|
@@ -56,7 +56,7 @@ export function buildCodeIntelligenceChecks(projectRoot, options = {}) {
|
|
|
56
56
|
checks.push(...graphChecks(projectRoot, nowMs, staleDays));
|
|
57
57
|
checks.push(...ruleGraphChecks(projectRoot, nowMs, staleDays));
|
|
58
58
|
checks.push(...apiSurfaceChecks(projectRoot, nowMs, staleDays));
|
|
59
|
-
checks.push(...qualityGateChecks(projectRoot, nowMs));
|
|
59
|
+
checks.push(...qualityGateChecks(projectRoot, nowMs, staleDays));
|
|
60
60
|
checks.push(...migrationChecks(projectRoot));
|
|
61
61
|
checks.push(...architectureChecks(projectRoot, nowMs, staleDays));
|
|
62
62
|
checks.push(...impactRunChecks(projectRoot, nowMs, staleDays));
|
|
@@ -319,7 +319,7 @@ function apiSurfaceChecks(projectRoot, nowMs, staleDays) {
|
|
|
319
319
|
},
|
|
320
320
|
];
|
|
321
321
|
}
|
|
322
|
-
function qualityGateChecks(projectRoot, nowMs) {
|
|
322
|
+
function qualityGateChecks(projectRoot, nowMs, staleDays) {
|
|
323
323
|
const reportPath = nodePath.join(projectRoot, '.sharkcraft', 'quality-gates', 'last.json');
|
|
324
324
|
if (!existsSync(reportPath)) {
|
|
325
325
|
return [];
|
|
@@ -338,6 +338,7 @@ function qualityGateChecks(projectRoot, nowMs) {
|
|
|
338
338
|
}
|
|
339
339
|
const days = ageDays(report.startedAt, nowMs);
|
|
340
340
|
const ageStr = days !== undefined ? ` ${fmtAge(days)}` : '';
|
|
341
|
+
const stale = days !== undefined && days > staleDays;
|
|
341
342
|
const status = report.overall ?? 'unknown';
|
|
342
343
|
const failingGates = (report.gates ?? [])
|
|
343
344
|
.filter((g) => g.status === 'fail')
|
|
@@ -354,15 +355,34 @@ function qualityGateChecks(projectRoot, nowMs) {
|
|
|
354
355
|
];
|
|
355
356
|
}
|
|
356
357
|
if (status === 'fail') {
|
|
358
|
+
const failMsg = failingGates.length > 0
|
|
359
|
+
? `Last gate FAIL${ageStr} — ${failingGates.join(', ')}.`
|
|
360
|
+
: `Last gate FAIL${ageStr}.`;
|
|
361
|
+
// An old FAIL is stale maintenance, not a verified current regression:
|
|
362
|
+
// age it out into a folded advisory that nudges a re-run instead of a
|
|
363
|
+
// hard Warning that masks the (now-unknown) state of the tree. A fresh
|
|
364
|
+
// FAIL stays loud. Mirrors the stale handling in apiSurfaceChecks /
|
|
365
|
+
// architectureChecks so the whole code-intelligence section is consistent.
|
|
366
|
+
if (stale) {
|
|
367
|
+
return [
|
|
368
|
+
{
|
|
369
|
+
id: 'code-intelligence-quality-gate',
|
|
370
|
+
title: 'Quality gate (last run)',
|
|
371
|
+
severity: DoctorSeverity.Info,
|
|
372
|
+
advisory: true,
|
|
373
|
+
category: CATEGORY,
|
|
374
|
+
message: `${failMsg} Stale (>${staleDays}d) — may not reflect the current tree.`,
|
|
375
|
+
fix: 'Re-run `shrk gate` to refresh.',
|
|
376
|
+
},
|
|
377
|
+
];
|
|
378
|
+
}
|
|
357
379
|
return [
|
|
358
380
|
{
|
|
359
381
|
id: 'code-intelligence-quality-gate',
|
|
360
382
|
title: 'Quality gate (last run)',
|
|
361
383
|
severity: DoctorSeverity.Warning,
|
|
362
384
|
category: CATEGORY,
|
|
363
|
-
message:
|
|
364
|
-
? `Last gate FAIL${ageStr} — ${failingGates.join(', ')}.`
|
|
365
|
-
: `Last gate FAIL${ageStr}.`,
|
|
385
|
+
message: failMsg,
|
|
366
386
|
fix: 'Re-run with `shrk gate` and address the failing gate(s).',
|
|
367
387
|
whyThisMatters: 'The quality gate is the one-shot pass/fail the dashboard and CI agents trust — leaving it red hides real regressions.',
|
|
368
388
|
},
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"command-recommender.d.ts","sourceRoot":"","sources":["../src/command-recommender.ts"],"names":[],"mappings":"AASA,OAAO,EAEL,KAAK,kBAAkB,EACxB,MAAM,yBAAyB,CAAC;AACjC,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,2BAA2B,CAAC;AAEvE,eAAO,MAAM,0BAA0B,sCAAsC,CAAC;AAE9E,MAAM,WAAW,sBAAsB;IACrC,OAAO,EAAE,MAAM,CAAC;IAChB,GAAG,EAAE,MAAM,CAAC;IACZ,WAAW,EAAE,WAAW,GAAG,eAAe,GAAG,gBAAgB,GAAG,eAAe,GAAG,YAAY,CAAC;IAC/F,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,4BAA4B;IAC3C,MAAM,EAAE,OAAO,0BAA0B,CAAC;IAC1C,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,eAAe,EAAE,SAAS,sBAAsB,EAAE,CAAC;IACnD,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,SAAS,MAAM,EAAE,CAAC;IAC5B,iEAAiE;IACjE,WAAW,EAAE,kBAAkB,CAAC;CACjC;
|
|
1
|
+
{"version":3,"file":"command-recommender.d.ts","sourceRoot":"","sources":["../src/command-recommender.ts"],"names":[],"mappings":"AASA,OAAO,EAEL,KAAK,kBAAkB,EACxB,MAAM,yBAAyB,CAAC;AACjC,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,2BAA2B,CAAC;AAEvE,eAAO,MAAM,0BAA0B,sCAAsC,CAAC;AAE9E,MAAM,WAAW,sBAAsB;IACrC,OAAO,EAAE,MAAM,CAAC;IAChB,GAAG,EAAE,MAAM,CAAC;IACZ,WAAW,EAAE,WAAW,GAAG,eAAe,GAAG,gBAAgB,GAAG,eAAe,GAAG,YAAY,CAAC;IAC/F,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,4BAA4B;IAC3C,MAAM,EAAE,OAAO,0BAA0B,CAAC;IAC1C,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,eAAe,EAAE,SAAS,sBAAsB,EAAE,CAAC;IACnD,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,SAAS,MAAM,EAAE,CAAC;IAC5B,iEAAiE;IACjE,WAAW,EAAE,kBAAkB,CAAC;CACjC;AAgFD,wBAAsB,iBAAiB,CACrC,UAAU,EAAE,qBAAqB,EACjC,KAAK,EAAE,MAAM,EACb,OAAO,GAAE;IAAE,SAAS,CAAC,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAA;CAAO,GAClD,OAAO,CAAC,4BAA4B,CAAC,CAoFvC"}
|
|
@@ -51,18 +51,30 @@ const RECIPES = [
|
|
|
51
51
|
],
|
|
52
52
|
},
|
|
53
53
|
{
|
|
54
|
-
match: /code[-\s]?intel|code intelligence|code graph|graph status|graph health|import cycle|unresolved import|blast radius|callers|dependents/i,
|
|
54
|
+
match: /code[-\s]?intel|code intelligence|code graph|graph status|graph health|import cycle|unresolved import|blast radius|callers|dependents|who calls|who uses|where is .*\bused|find usages|usages? of|is .*\bwired|wired (up|to)|wire[ds]? .*\bto\b|path (from|between)|reach(es|able)|connected to|who implements|implementations? of|subclass|subtype|load[-\s]?bearing|\bhubs?\b|most[-\s](depended|imported|referenced)|what.*change carefully|important.*\b(code|files?|symbols?)|what breaks if|what calls|call sites?|trace .*\b(symbol|function|usage)/i,
|
|
55
55
|
recommendations: [
|
|
56
|
+
{ command: 'shrk graph callers <symbol>', why: 'Who calls / references a symbol, as path:line — the grep replacement for "who calls X / where is X used".' },
|
|
57
|
+
{ command: 'shrk graph path <from> <to>', why: 'Is code A actually wired to code B? Shortest import/call/implements path between two files or symbols — the deterministic answer to "is X wired to Y".' },
|
|
58
|
+
{ command: 'shrk graph hubs', why: 'The most-depended-on symbols/files (biggest blast radius) — what to change carefully or understand first when onboarding.' },
|
|
59
|
+
{ command: 'shrk graph context <file-or-symbol>', why: 'Inspect one file or symbol with imports, callers, subtypes/supertypes, bridge context, and framework hits — answers "is X wired".' },
|
|
60
|
+
{ command: 'shrk graph impact <file-or-symbol> --full', why: 'What breaks if you change it: graph-backed dependents, caller files, rules, and likely tests.' },
|
|
56
61
|
{ command: 'shrk code-intel', why: 'One-shot health view across the code graph, bridge, and quality gates.' },
|
|
57
62
|
{ command: 'shrk graph status', why: 'Check whether the code graph is present, fresh, and internally consistent.' },
|
|
58
|
-
{ command: 'shrk graph cycles', why: 'List import cycles that inflate blast-radius calculations.' },
|
|
59
63
|
{ command: 'shrk graph unresolved', why: 'Find unresolved imports that undercut graph accuracy.' },
|
|
60
|
-
|
|
61
|
-
|
|
64
|
+
],
|
|
65
|
+
},
|
|
66
|
+
{
|
|
67
|
+
match: /delegate|mechanical (edit|task|change|refactor)|grunt (work|task)|boilerplate|repetitive edit|hand (this|it|off) (off |over )?to (a |the )?(local |worker|model)|add (a |an )?(barrel )?(export|import)\b|local (llm|model) (do|handle|make)/i,
|
|
68
|
+
recommendations: [
|
|
69
|
+
{ command: 'shrk delegate list', why: 'See the MECHANICAL task recipes a local-LLM worker can handle (the engine verifies the result + auto-reverts on failure). Each is fenced to specific files + op kinds.' },
|
|
70
|
+
{ command: 'shrk delegate run "<task>" --recipe <id> --apply', why: 'Hand a mechanical, deterministically-verifiable edit to the LOCAL worker — you pay for a compact brief + result instead of reading the whole file and writing the edit. The edit lands only if it passes the recipe verification.' },
|
|
71
|
+
{ command: 'shrk delegate explain <id>', why: 'Audit a recipe before trusting it: the allowed ops, guardrail globs, and whether its verification is bound.' },
|
|
62
72
|
],
|
|
63
73
|
},
|
|
64
74
|
];
|
|
65
75
|
function safetyLevelFor(command) {
|
|
76
|
+
if (/^shrk delegate run/i.test(command))
|
|
77
|
+
return 'writes-source';
|
|
66
78
|
if (/^shrk (gen|init|apply|import|presets apply --write|packs (sign|new))/i.test(command))
|
|
67
79
|
return 'writes-source';
|
|
68
80
|
if (/^shrk (onboard|brief|dev start|handoff|export|report site|impact|ci scaffold|simulate|orchestrate)/i.test(command))
|
|
@@ -19,6 +19,14 @@ export interface IContractFileRule {
|
|
|
19
19
|
reason?: string;
|
|
20
20
|
severity?: ContractFileRuleSeverity;
|
|
21
21
|
}
|
|
22
|
+
export declare function toPosix(p: string): string;
|
|
23
|
+
/**
|
|
24
|
+
* Translate a deterministic POSIX-style glob to a regex anchored at both ends.
|
|
25
|
+
* Case-sensitive by itself — `matchContractFileRule` lowercases its inputs for
|
|
26
|
+
* the contract use-case, but security-sensitive callers (the delegate guardrail)
|
|
27
|
+
* use this directly to keep file-path case significant.
|
|
28
|
+
*/
|
|
29
|
+
export declare function globToRegex(pattern: string): RegExp;
|
|
22
30
|
/** Pure matcher — returns true when `file` is covered by `rule`. */
|
|
23
31
|
export declare function matchContractFileRule(rule: IContractFileRule, file: string): boolean;
|
|
24
32
|
export interface IContractFileRuleMatch {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"contract-file-rule.d.ts","sourceRoot":"","sources":["../src/contract-file-rule.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,oBAAY,oBAAoB;IAC9B,IAAI,SAAS;IACb,UAAU,gBAAgB;IAC1B,KAAK,UAAU;IACf,QAAQ,aAAa;CACtB;AAED,oBAAY,wBAAwB;IAClC,KAAK,UAAU;IACf,OAAO,YAAY;CACpB;AAED,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,oBAAoB,CAAC;IAC3B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,wBAAwB,CAAC;CACrC;
|
|
1
|
+
{"version":3,"file":"contract-file-rule.d.ts","sourceRoot":"","sources":["../src/contract-file-rule.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,oBAAY,oBAAoB;IAC9B,IAAI,SAAS;IACb,UAAU,gBAAgB;IAC1B,KAAK,UAAU;IACf,QAAQ,aAAa;CACtB;AAED,oBAAY,wBAAwB;IAClC,KAAK,UAAU;IACf,OAAO,YAAY;CACpB;AAED,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,oBAAoB,CAAC;IAC3B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,wBAAwB,CAAC;CACrC;AAED,wBAAgB,OAAO,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,CAEzC;AAMD;;;;;GAKG;AACH,wBAAgB,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CA4BnD;AAED,oEAAoE;AACpE,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,iBAAiB,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAapF;AAED,MAAM,WAAW,sBAAsB;IACrC,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,iBAAiB,CAAC;CACzB;AAED,sEAAsE;AACtE,wBAAgB,sBAAsB,CACpC,KAAK,EAAE,SAAS,iBAAiB,EAAE,EACnC,KAAK,EAAE,SAAS,MAAM,EAAE,GACvB,SAAS,sBAAsB,EAAE,CAQnC;AAED;;;GAGG;AACH,wBAAgB,sBAAsB,CACpC,QAAQ,EAAE,SAAS,MAAM,EAAE,GAC1B,SAAS,iBAAiB,EAAE,CAE9B;AAED,6DAA6D;AAC7D,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,MAAM,GAAG,iBAAiB,CAQxE"}
|
|
@@ -15,14 +15,19 @@ export var ContractFileRuleSeverity;
|
|
|
15
15
|
ContractFileRuleSeverity["Error"] = "error";
|
|
16
16
|
ContractFileRuleSeverity["Warning"] = "warning";
|
|
17
17
|
})(ContractFileRuleSeverity || (ContractFileRuleSeverity = {}));
|
|
18
|
-
function toPosix(p) {
|
|
18
|
+
export function toPosix(p) {
|
|
19
19
|
return p.replace(/\\/g, '/').replace(/^\.\//, '');
|
|
20
20
|
}
|
|
21
21
|
function escapeRegex(s) {
|
|
22
22
|
return s.replace(/[.+^$(){}|\\[\]]/g, '\\$&');
|
|
23
23
|
}
|
|
24
|
-
/**
|
|
25
|
-
|
|
24
|
+
/**
|
|
25
|
+
* Translate a deterministic POSIX-style glob to a regex anchored at both ends.
|
|
26
|
+
* Case-sensitive by itself — `matchContractFileRule` lowercases its inputs for
|
|
27
|
+
* the contract use-case, but security-sensitive callers (the delegate guardrail)
|
|
28
|
+
* use this directly to keep file-path case significant.
|
|
29
|
+
*/
|
|
30
|
+
export function globToRegex(pattern) {
|
|
26
31
|
const p = toPosix(pattern);
|
|
27
32
|
let re = '';
|
|
28
33
|
let i = 0;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"coverage-report.d.ts","sourceRoot":"","sources":["../src/coverage-report.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,2BAA2B,CAAC;AAGvE,MAAM,WAAW,iBAAiB;IAChC,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,yBAAyB;IACzB,KAAK,EAAE,MAAM,CAAC;IACd,+CAA+C;IAC/C,OAAO,EAAE,MAAM,EAAE,CAAC;CACnB;AAED,MAAM,WAAW,eAAe;IAC9B,UAAU,EAAE,iBAAiB,EAAE,CAAC;IAChC,sCAAsC;IACtC,OAAO,EAAE,MAAM,CAAC;IAChB,6BAA6B;IAC7B,WAAW,EAAE,MAAM,EAAE,CAAC;CACvB;AAOD;;;;GAIG;AACH,wBAAgB,mBAAmB,CAAC,UAAU,EAAE,qBAAqB,GAAG,eAAe,
|
|
1
|
+
{"version":3,"file":"coverage-report.d.ts","sourceRoot":"","sources":["../src/coverage-report.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,2BAA2B,CAAC;AAGvE,MAAM,WAAW,iBAAiB;IAChC,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,yBAAyB;IACzB,KAAK,EAAE,MAAM,CAAC;IACd,+CAA+C;IAC/C,OAAO,EAAE,MAAM,EAAE,CAAC;CACnB;AAED,MAAM,WAAW,eAAe;IAC9B,UAAU,EAAE,iBAAiB,EAAE,CAAC;IAChC,sCAAsC;IACtC,OAAO,EAAE,MAAM,CAAC;IAChB,6BAA6B;IAC7B,WAAW,EAAE,MAAM,EAAE,CAAC;CACvB;AAOD;;;;GAIG;AACH,wBAAgB,mBAAmB,CAAC,UAAU,EAAE,qBAAqB,GAAG,eAAe,CA6LtF"}
|
package/dist/coverage-report.js
CHANGED
|
@@ -181,7 +181,20 @@ export function buildCoverageReport(inspection) {
|
|
|
181
181
|
missing,
|
|
182
182
|
});
|
|
183
183
|
}
|
|
184
|
-
|
|
184
|
+
// `overall` measures how well the USER has grounded THIS repo, so two kinds
|
|
185
|
+
// of category must not inflate it:
|
|
186
|
+
// 1. Empty categories (total === 0) — they vacuously score 100 (see `pct`),
|
|
187
|
+
// so a repo that just hasn't configured boundaries/packs would read as
|
|
188
|
+
// perfectly grounded and tell the agent to skip adding rules.
|
|
189
|
+
// 2. `preset-references` — it scores the BUILT-IN preset registry's
|
|
190
|
+
// validity (≈72/72 always), not the user's configuration, so on an
|
|
191
|
+
// otherwise-empty repo it alone would peg the overall at 100.
|
|
192
|
+
// Both stay as displayed categories; they're just out of the average.
|
|
193
|
+
// 0 when nothing user-authored is configured (honest: no coverage to report).
|
|
194
|
+
const scored = categories.filter((c) => c.total > 0 && c.id !== 'preset-references');
|
|
195
|
+
const overall = scored.length > 0
|
|
196
|
+
? Math.round(scored.reduce((s, c) => s + c.score, 0) / scored.length)
|
|
197
|
+
: 0;
|
|
185
198
|
if (overall < 60)
|
|
186
199
|
suggestions.push('Pair every critical rule with action hints + verification commands.');
|
|
187
200
|
if (overall < 80)
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Resolve the delegate-recipe catalog from a loaded config (read-only, NO model).
|
|
3
|
+
*
|
|
4
|
+
* Merges the delegation-level `provider`/`model` defaults into each recipe and
|
|
5
|
+
* checks every `verificationId` against the config's `verificationCommands[]`.
|
|
6
|
+
* A recipe is `delegatable` only when ALL its verification ids are bound — a
|
|
7
|
+
* recipe with an unbound (or empty) verification has no deterministic gate, so
|
|
8
|
+
* `shrk delegate explain` can show an author the fence is real before trusting
|
|
9
|
+
* it. Pack-contributed recipes (Phase 4) will merge in here too.
|
|
10
|
+
*/
|
|
11
|
+
import type { IDelegateRecipe, ISharkCraftConfig } from '@shrkcrft/config';
|
|
12
|
+
export interface IResolvedDelegateRecipe extends IDelegateRecipe {
|
|
13
|
+
/** Provider after applying the delegation-level default (never undefined). */
|
|
14
|
+
resolvedProvider: 'auto' | 'ollama' | 'llamacpp';
|
|
15
|
+
/** Model after applying the delegation-level default (undefined = provider default). */
|
|
16
|
+
resolvedModel?: string;
|
|
17
|
+
/** verificationIds that do NOT resolve to a `verificationCommands[].id`. */
|
|
18
|
+
unboundVerificationIds: readonly string[];
|
|
19
|
+
/** True when every verificationId resolves AND at least one is declared. */
|
|
20
|
+
verificationBound: boolean;
|
|
21
|
+
/** True when the recipe is safe to delegate (verification fully bound). */
|
|
22
|
+
delegatable: boolean;
|
|
23
|
+
/** Where the recipe came from. */
|
|
24
|
+
source: 'config' | 'pack';
|
|
25
|
+
/** Contributing pack, when `source === 'pack'`. */
|
|
26
|
+
packageName?: string;
|
|
27
|
+
}
|
|
28
|
+
/** A pack-contributed recipe (shape from `loadDelegateRecipesFromPacks`). */
|
|
29
|
+
export interface IPackRecipeInput {
|
|
30
|
+
recipe: IDelegateRecipe;
|
|
31
|
+
packageName: string;
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* Resolve the delegate catalog from config + pack-contributed recipes.
|
|
35
|
+
*
|
|
36
|
+
* Merge order: pack recipes first, then INLINE config recipes override a pack
|
|
37
|
+
* recipe of the same id. `recipeOverrides` (by id) then patch model /
|
|
38
|
+
* verificationIds / guardrailGlobs, or drop the recipe (`enabled: false`).
|
|
39
|
+
* Finally each recipe's `verificationIds` are checked against
|
|
40
|
+
* `verificationCommands[]` — `delegatable` only when all are bound.
|
|
41
|
+
*/
|
|
42
|
+
export declare function resolveDelegateCatalog(config: ISharkCraftConfig, packRecipes?: readonly IPackRecipeInput[]): readonly IResolvedDelegateRecipe[];
|
|
43
|
+
/** Look up one resolved recipe by id (config recipes only; no pack loading). */
|
|
44
|
+
export declare function findDelegateRecipe(config: ISharkCraftConfig, recipeId: string): IResolvedDelegateRecipe | undefined;
|
|
45
|
+
//# sourceMappingURL=delegate-catalog.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"delegate-catalog.d.ts","sourceRoot":"","sources":["../src/delegate-catalog.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AACH,OAAO,KAAK,EAAE,eAAe,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AAE3E,MAAM,WAAW,uBAAwB,SAAQ,eAAe;IAC9D,8EAA8E;IAC9E,gBAAgB,EAAE,MAAM,GAAG,QAAQ,GAAG,UAAU,CAAC;IACjD,wFAAwF;IACxF,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,4EAA4E;IAC5E,sBAAsB,EAAE,SAAS,MAAM,EAAE,CAAC;IAC1C,4EAA4E;IAC5E,iBAAiB,EAAE,OAAO,CAAC;IAC3B,2EAA2E;IAC3E,WAAW,EAAE,OAAO,CAAC;IACrB,kCAAkC;IAClC,MAAM,EAAE,QAAQ,GAAG,MAAM,CAAC;IAC1B,mDAAmD;IACnD,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,6EAA6E;AAC7E,MAAM,WAAW,gBAAgB;IAC/B,MAAM,EAAE,eAAe,CAAC;IACxB,WAAW,EAAE,MAAM,CAAC;CACrB;AAED;;;;;;;;GAQG;AACH,wBAAgB,sBAAsB,CACpC,MAAM,EAAE,iBAAiB,EACzB,WAAW,GAAE,SAAS,gBAAgB,EAAO,GAC5C,SAAS,uBAAuB,EAAE,CAkCpC;AAED,gFAAgF;AAChF,wBAAgB,kBAAkB,CAChC,MAAM,EAAE,iBAAiB,EACzB,QAAQ,EAAE,MAAM,GACf,uBAAuB,GAAG,SAAS,CAErC"}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Resolve the delegate catalog from config + pack-contributed recipes.
|
|
3
|
+
*
|
|
4
|
+
* Merge order: pack recipes first, then INLINE config recipes override a pack
|
|
5
|
+
* recipe of the same id. `recipeOverrides` (by id) then patch model /
|
|
6
|
+
* verificationIds / guardrailGlobs, or drop the recipe (`enabled: false`).
|
|
7
|
+
* Finally each recipe's `verificationIds` are checked against
|
|
8
|
+
* `verificationCommands[]` — `delegatable` only when all are bound.
|
|
9
|
+
*/
|
|
10
|
+
export function resolveDelegateCatalog(config, packRecipes = []) {
|
|
11
|
+
const delegation = config.delegation;
|
|
12
|
+
if (!delegation)
|
|
13
|
+
return [];
|
|
14
|
+
const known = new Set((config.verificationCommands ?? []).map((v) => v.id));
|
|
15
|
+
const overrides = delegation.recipeOverrides ?? {};
|
|
16
|
+
const byId = new Map();
|
|
17
|
+
for (const pr of packRecipes)
|
|
18
|
+
byId.set(pr.recipe.id, { recipe: pr.recipe, source: 'pack', packageName: pr.packageName });
|
|
19
|
+
for (const recipe of delegation.recipes ?? [])
|
|
20
|
+
byId.set(recipe.id, { recipe, source: 'config' });
|
|
21
|
+
const out = [];
|
|
22
|
+
for (const { recipe, source, packageName } of byId.values()) {
|
|
23
|
+
const ov = overrides[recipe.id];
|
|
24
|
+
if (ov?.enabled === false)
|
|
25
|
+
continue; // dropped by override
|
|
26
|
+
const merged = {
|
|
27
|
+
...recipe,
|
|
28
|
+
...(ov?.model !== undefined ? { model: ov.model } : {}),
|
|
29
|
+
...(ov?.verificationIds !== undefined ? { verificationIds: ov.verificationIds } : {}),
|
|
30
|
+
...(ov?.guardrailGlobs !== undefined ? { guardrailGlobs: ov.guardrailGlobs } : {}),
|
|
31
|
+
};
|
|
32
|
+
const unbound = (merged.verificationIds ?? []).filter((id) => !known.has(id));
|
|
33
|
+
const verificationBound = unbound.length === 0 && (merged.verificationIds ?? []).length > 0;
|
|
34
|
+
out.push({
|
|
35
|
+
...merged,
|
|
36
|
+
resolvedProvider: merged.provider ?? delegation.provider ?? 'auto',
|
|
37
|
+
...(merged.model ?? delegation.model ? { resolvedModel: merged.model ?? delegation.model } : {}),
|
|
38
|
+
unboundVerificationIds: unbound,
|
|
39
|
+
verificationBound,
|
|
40
|
+
delegatable: verificationBound,
|
|
41
|
+
source,
|
|
42
|
+
...(packageName ? { packageName } : {}),
|
|
43
|
+
});
|
|
44
|
+
}
|
|
45
|
+
return out;
|
|
46
|
+
}
|
|
47
|
+
/** Look up one resolved recipe by id (config recipes only; no pack loading). */
|
|
48
|
+
export function findDelegateRecipe(config, recipeId) {
|
|
49
|
+
return resolveDelegateCatalog(config).find((r) => r.id === recipeId);
|
|
50
|
+
}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `shrk doctor` checks for delegate-worker recipe health.
|
|
3
|
+
*
|
|
4
|
+
* Surfaces recipes that are NOT delegatable — a recipe whose `verificationIds`
|
|
5
|
+
* don't all resolve to `verificationCommands[]` (incl. after `recipeOverrides`)
|
|
6
|
+
* has no deterministic gate, so `shrk delegate run` would refuse it. `runDoctor`
|
|
7
|
+
* has no other surface for this (it doesn't run `validateConfig`), so this is the
|
|
8
|
+
* proactive catch. Sync + config-only (pack-recipe health is `delegate explain`,
|
|
9
|
+
* which can load pack files async); silent when the repo hasn't opted into
|
|
10
|
+
* delegation.
|
|
11
|
+
*/
|
|
12
|
+
import type { ISharkCraftConfig } from '@shrkcrft/config';
|
|
13
|
+
import { type IDoctorCheck } from './doctor-result.js';
|
|
14
|
+
export declare function buildDelegateRecipeChecks(config: ISharkCraftConfig | null): IDoctorCheck[];
|
|
15
|
+
//# sourceMappingURL=delegate-doctor.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"delegate-doctor.d.ts","sourceRoot":"","sources":["../src/delegate-doctor.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AACH,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AAC1D,OAAO,EAAkB,KAAK,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAGvE,wBAAgB,yBAAyB,CAAC,MAAM,EAAE,iBAAiB,GAAG,IAAI,GAAG,YAAY,EAAE,CAiC1F"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import { DoctorSeverity } from "./doctor-result.js";
|
|
2
|
+
import { resolveDelegateCatalog } from "./delegate-catalog.js";
|
|
3
|
+
export function buildDelegateRecipeChecks(config) {
|
|
4
|
+
if (!config?.delegation)
|
|
5
|
+
return []; // not opted in → silent
|
|
6
|
+
const catalog = resolveDelegateCatalog(config);
|
|
7
|
+
if (catalog.length === 0)
|
|
8
|
+
return [];
|
|
9
|
+
const out = [];
|
|
10
|
+
const broken = catalog.filter((r) => !r.delegatable);
|
|
11
|
+
for (const r of broken) {
|
|
12
|
+
const reason = r.unboundVerificationIds.length > 0
|
|
13
|
+
? `verificationIds not in verificationCommands[]: ${r.unboundVerificationIds.join(', ')}`
|
|
14
|
+
: 'no verificationIds declared';
|
|
15
|
+
out.push({
|
|
16
|
+
id: `delegate-recipe-${r.id}`,
|
|
17
|
+
title: `Delegate recipe "${r.id}" is not delegatable`,
|
|
18
|
+
severity: DoctorSeverity.Warning,
|
|
19
|
+
message: `${reason} — \`shrk delegate run --recipe ${r.id}\` would refuse to apply an unverified edit.`,
|
|
20
|
+
category: 'delegate',
|
|
21
|
+
code: 'recipe-unverified',
|
|
22
|
+
recommendedFix: `shrk delegate explain ${r.id}`,
|
|
23
|
+
whyThisMatters: 'A recipe with an unbound verification has no deterministic gate; the worker can only run a VERIFIED edit, so the recipe is unusable until its verificationIds bind to a verificationCommands[] entry.',
|
|
24
|
+
});
|
|
25
|
+
}
|
|
26
|
+
if (broken.length === 0) {
|
|
27
|
+
out.push({
|
|
28
|
+
id: 'delegate-recipes',
|
|
29
|
+
title: 'Delegate recipes',
|
|
30
|
+
severity: DoctorSeverity.Ok,
|
|
31
|
+
message: `${catalog.length} delegate recipe(s) configured, all delegatable.`,
|
|
32
|
+
category: 'delegate',
|
|
33
|
+
});
|
|
34
|
+
}
|
|
35
|
+
return out;
|
|
36
|
+
}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { type IDelegateRecipe } from '@shrkcrft/core';
|
|
2
|
+
import type { ISharkCraftConfig } from '@shrkcrft/config';
|
|
3
|
+
import { type IDiscoveredPack } from '@shrkcrft/packs';
|
|
4
|
+
import { type IResolvedDelegateRecipe } from './delegate-catalog.js';
|
|
5
|
+
export interface IPackDelegateRecipe {
|
|
6
|
+
recipe: IDelegateRecipe;
|
|
7
|
+
packageName: string;
|
|
8
|
+
/** The contributed file's relative path (for diagnostics). */
|
|
9
|
+
sourceFile: string;
|
|
10
|
+
}
|
|
11
|
+
export interface IPackRecipeIssue {
|
|
12
|
+
severity: 'warning' | 'error';
|
|
13
|
+
message: string;
|
|
14
|
+
source?: string;
|
|
15
|
+
}
|
|
16
|
+
export interface ILoadPackRecipesResult {
|
|
17
|
+
recipes: readonly IPackDelegateRecipe[];
|
|
18
|
+
issues: readonly IPackRecipeIssue[];
|
|
19
|
+
}
|
|
20
|
+
export declare function loadDelegateRecipesFromPacks(validPacks: readonly IDiscoveredPack[]): Promise<ILoadPackRecipesResult>;
|
|
21
|
+
/**
|
|
22
|
+
* One-shot: discover packs under `projectRoot`, load their delegate recipes, and
|
|
23
|
+
* resolve the full catalog (pack recipes + config recipes + `recipeOverrides`).
|
|
24
|
+
* Pack discovery is best-effort — a missing/odd `node_modules` degrades to the
|
|
25
|
+
* config-only catalog. Keeps `discoverPacks` inside `inspector` so the cli stays
|
|
26
|
+
* decoupled from `@shrkcrft/packs`.
|
|
27
|
+
*/
|
|
28
|
+
export declare function resolveDelegateCatalogForProject(config: ISharkCraftConfig, projectRoot: string): Promise<readonly IResolvedDelegateRecipe[]>;
|
|
29
|
+
//# sourceMappingURL=delegate-pack-recipes.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"delegate-pack-recipes.d.ts","sourceRoot":"","sources":["../src/delegate-pack-recipes.ts"],"names":[],"mappings":"AAWA,OAAO,EAAyB,KAAK,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAC7E,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AAC1D,OAAO,EAAiB,KAAK,eAAe,EAAE,MAAM,iBAAiB,CAAC;AACtE,OAAO,EAA0B,KAAK,uBAAuB,EAAE,MAAM,uBAAuB,CAAC;AAE7F,MAAM,WAAW,mBAAmB;IAClC,MAAM,EAAE,eAAe,CAAC;IACxB,WAAW,EAAE,MAAM,CAAC;IACpB,8DAA8D;IAC9D,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,EAAE,SAAS,GAAG,OAAO,CAAC;IAC9B,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,sBAAsB;IACrC,OAAO,EAAE,SAAS,mBAAmB,EAAE,CAAC;IACxC,MAAM,EAAE,SAAS,gBAAgB,EAAE,CAAC;CACrC;AAaD,wBAAsB,4BAA4B,CAChD,UAAU,EAAE,SAAS,eAAe,EAAE,GACrC,OAAO,CAAC,sBAAsB,CAAC,CA8BjC;AAED;;;;;;GAMG;AACH,wBAAsB,gCAAgC,CACpD,MAAM,EAAE,iBAAiB,EACzB,WAAW,EAAE,MAAM,GAClB,OAAO,CAAC,SAAS,uBAAuB,EAAE,CAAC,CAY7C"}
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Load delegate-worker recipes contributed by discovered packs.
|
|
3
|
+
*
|
|
4
|
+
* A pack declares `contributions.delegateRecipeFiles[]`, each default-exporting
|
|
5
|
+
* `readonly IDelegateRecipe[]` (via `defineDelegateRecipe`). This loads them
|
|
6
|
+
* read-only (no model, no writes) so `resolveDelegateCatalog(config, packRecipes)`
|
|
7
|
+
* can merge them with the project's inline recipes + `recipeOverrides`. Mirrors
|
|
8
|
+
* the other pack registries (e.g. task-routing-hint-registry).
|
|
9
|
+
*/
|
|
10
|
+
import { existsSync } from 'node:fs';
|
|
11
|
+
import * as nodePath from 'node:path';
|
|
12
|
+
import { importModuleViaLoader } from '@shrkcrft/core';
|
|
13
|
+
import { discoverPacks } from '@shrkcrft/packs';
|
|
14
|
+
import { resolveDelegateCatalog } from "./delegate-catalog.js";
|
|
15
|
+
async function importRecipes(file) {
|
|
16
|
+
const mod = (await importModuleViaLoader(file));
|
|
17
|
+
if (Array.isArray(mod.default))
|
|
18
|
+
return mod.default;
|
|
19
|
+
if (mod.default && typeof mod.default === 'object')
|
|
20
|
+
return [mod.default];
|
|
21
|
+
if (Array.isArray(mod.delegateRecipes))
|
|
22
|
+
return mod.delegateRecipes;
|
|
23
|
+
return [];
|
|
24
|
+
}
|
|
25
|
+
export async function loadDelegateRecipesFromPacks(validPacks) {
|
|
26
|
+
const recipes = [];
|
|
27
|
+
const issues = [];
|
|
28
|
+
for (const pack of validPacks) {
|
|
29
|
+
const files = pack.manifest?.contributions?.delegateRecipeFiles ?? [];
|
|
30
|
+
for (const rel of files) {
|
|
31
|
+
const file = nodePath.resolve(pack.packageRoot, rel);
|
|
32
|
+
if (!existsSync(file)) {
|
|
33
|
+
issues.push({
|
|
34
|
+
severity: 'warning',
|
|
35
|
+
message: `Pack ${pack.packageName} declares ${rel} but the file is missing.`,
|
|
36
|
+
source: file,
|
|
37
|
+
});
|
|
38
|
+
continue;
|
|
39
|
+
}
|
|
40
|
+
try {
|
|
41
|
+
const list = await importRecipes(file);
|
|
42
|
+
for (const recipe of list) {
|
|
43
|
+
recipes.push({ recipe, packageName: pack.packageName, sourceFile: rel });
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
catch (e) {
|
|
47
|
+
issues.push({
|
|
48
|
+
severity: 'warning',
|
|
49
|
+
message: `Pack ${pack.packageName} (${rel}): ${e.message}`,
|
|
50
|
+
source: file,
|
|
51
|
+
});
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
return { recipes, issues };
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* One-shot: discover packs under `projectRoot`, load their delegate recipes, and
|
|
59
|
+
* resolve the full catalog (pack recipes + config recipes + `recipeOverrides`).
|
|
60
|
+
* Pack discovery is best-effort — a missing/odd `node_modules` degrades to the
|
|
61
|
+
* config-only catalog. Keeps `discoverPacks` inside `inspector` so the cli stays
|
|
62
|
+
* decoupled from `@shrkcrft/packs`.
|
|
63
|
+
*/
|
|
64
|
+
export async function resolveDelegateCatalogForProject(config, projectRoot) {
|
|
65
|
+
let packRecipes = [];
|
|
66
|
+
try {
|
|
67
|
+
const disc = await discoverPacks({ projectRoot });
|
|
68
|
+
packRecipes = (await loadDelegateRecipesFromPacks(disc.validPacks)).recipes.map((p) => ({
|
|
69
|
+
recipe: p.recipe,
|
|
70
|
+
packageName: p.packageName,
|
|
71
|
+
}));
|
|
72
|
+
}
|
|
73
|
+
catch {
|
|
74
|
+
// best-effort; configured recipes still resolve
|
|
75
|
+
}
|
|
76
|
+
return resolveDelegateCatalog(config, packRecipes);
|
|
77
|
+
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"impact-analysis.d.ts","sourceRoot":"","sources":["../src/impact-analysis.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"impact-analysis.d.ts","sourceRoot":"","sources":["../src/impact-analysis.ts"],"names":[],"mappings":"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"}
|
package/dist/impact-analysis.js
CHANGED
|
@@ -579,9 +579,17 @@ export async function analyzeImpact(inspection, input) {
|
|
|
579
579
|
const presets = affectedPresets(expandedCtx);
|
|
580
580
|
const constructs = affectedConstructs(expandedCtx);
|
|
581
581
|
const { existing: likelyTests, missing: missingTests } = findLikelyTests(inspection.projectRoot, files);
|
|
582
|
+
// Reverse-import graph: any dependent that is itself a test file genuinely
|
|
583
|
+
// exercises the changed file — including cross-directory tests the filename
|
|
584
|
+
// conventions miss (e.g. src/__tests__/foo.test.ts importing src/sub/foo.ts).
|
|
585
|
+
// So the agent's `tests impact` / `impact` returns the exact minimal set to
|
|
586
|
+
// run instead of falling back to the whole suite.
|
|
587
|
+
const TEST_FILE_RE = /\.(spec|test)\.[jt]sx?$/;
|
|
588
|
+
const dependentTests = unique([...directDependents, ...transitiveDependents].filter((f) => TEST_FILE_RE.test(f)));
|
|
589
|
+
const minimalTests = unique([...likelyTests, ...dependentTests]);
|
|
582
590
|
// Per-target test suggestion (minimal commands).
|
|
583
591
|
const suggestedTestCommands = unique([
|
|
584
|
-
...(
|
|
592
|
+
...(minimalTests.length > 0 ? [`bun test ${minimalTests.slice(0, 12).join(' ')}`] : []),
|
|
585
593
|
'bun test',
|
|
586
594
|
]);
|
|
587
595
|
const suggestedFullTestCommands = unique([
|
|
@@ -669,7 +677,7 @@ export async function analyzeImpact(inspection, input) {
|
|
|
669
677
|
affectedPipelines: pipelines,
|
|
670
678
|
affectedPresets: presets,
|
|
671
679
|
affectedConstructs: constructs,
|
|
672
|
-
likelyTests,
|
|
680
|
+
likelyTests: minimalTests,
|
|
673
681
|
suggestedTestCommands,
|
|
674
682
|
suggestedFullTestCommands,
|
|
675
683
|
suggestedValidationCommands,
|
package/dist/index.d.ts
CHANGED
|
@@ -141,6 +141,10 @@ export * from './product-coherence.js';
|
|
|
141
141
|
export * from './task-risk.js';
|
|
142
142
|
export * from './migration-readiness.js';
|
|
143
143
|
export * from './contract-file-rule.js';
|
|
144
|
+
export * from './check-guardrail-globs.js';
|
|
145
|
+
export * from './delegate-catalog.js';
|
|
146
|
+
export * from './delegate-pack-recipes.js';
|
|
147
|
+
export * from './delegate-doctor.js';
|
|
144
148
|
export * from './agent-contract.js';
|
|
145
149
|
export * from './plan-simulation.js';
|
|
146
150
|
export * from './repo-memory.js';
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -141,6 +141,10 @@ export * from "./product-coherence.js";
|
|
|
141
141
|
export * from "./task-risk.js";
|
|
142
142
|
export * from "./migration-readiness.js";
|
|
143
143
|
export * from "./contract-file-rule.js";
|
|
144
|
+
export * from "./check-guardrail-globs.js";
|
|
145
|
+
export * from "./delegate-catalog.js";
|
|
146
|
+
export * from "./delegate-pack-recipes.js";
|
|
147
|
+
export * from "./delegate-doctor.js";
|
|
144
148
|
export * from "./agent-contract.js";
|
|
145
149
|
export * from "./plan-simulation.js";
|
|
146
150
|
export * from "./repo-memory.js";
|
|
@@ -101,6 +101,19 @@ export interface IPlanSimulationOptions {
|
|
|
101
101
|
/** Maximum lines per diff preview (default 80). */
|
|
102
102
|
maxDiffLines?: number;
|
|
103
103
|
}
|
|
104
|
+
/**
|
|
105
|
+
* Minimal unified-diff renderer for two strings. Not a full LCS — uses a
|
|
106
|
+
* simple longest-common-subsequence on lines via dynamic programming with
|
|
107
|
+
* a guard against huge inputs. For huge inputs falls back to a summary.
|
|
108
|
+
*/
|
|
109
|
+
export declare function unifiedDiff(beforeText: string, afterText: string, opts: {
|
|
110
|
+
context?: number;
|
|
111
|
+
maxLines?: number;
|
|
112
|
+
relativePath: string;
|
|
113
|
+
}): {
|
|
114
|
+
body: string;
|
|
115
|
+
truncated: boolean;
|
|
116
|
+
};
|
|
104
117
|
export declare function simulatePlan(inspection: ISharkcraftInspection, planPath: string, options?: IPlanSimulationOptions): Promise<IPlanSimulationReport>;
|
|
105
118
|
export declare function renderPlanSimulationText(r: IPlanSimulationReport): string;
|
|
106
119
|
export declare function renderPlanSimulationMarkdown(r: IPlanSimulationReport): string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"plan-simulation.d.ts","sourceRoot":"","sources":["../src/plan-simulation.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"plan-simulation.d.ts","sourceRoot":"","sources":["../src/plan-simulation.ts"],"names":[],"mappings":"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"}
|
package/dist/plan-simulation.js
CHANGED
|
@@ -52,7 +52,7 @@ function readExistingFile(projectRoot, relativePath) {
|
|
|
52
52
|
* simple longest-common-subsequence on lines via dynamic programming with
|
|
53
53
|
* a guard against huge inputs. For huge inputs falls back to a summary.
|
|
54
54
|
*/
|
|
55
|
-
function unifiedDiff(beforeText, afterText, opts) {
|
|
55
|
+
export function unifiedDiff(beforeText, afterText, opts) {
|
|
56
56
|
const context = opts.context ?? 3;
|
|
57
57
|
const maxLines = opts.maxLines ?? 80;
|
|
58
58
|
const before = beforeText.split('\n');
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sharkcraft-inspector.d.ts","sourceRoot":"","sources":["../src/sharkcraft-inspector.ts"],"names":[],"mappings":"AAOA,OAAO,EAAoB,KAAK,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAC/E,OAAO,EAAE,KAAK,iBAAiB,EAAqB,MAAM,kBAAkB,CAAC;AAC7E,OAAO,EACL,KAAK,eAAe,EACpB,KAAK,yBAAyB,EAC9B,cAAc,EAIf,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAC9C,OAAO,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAC9C,OAAO,EAAE,KAAK,mBAAmB,EAAyB,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AACxG,OAAO,EAAE,KAAK,mBAAmB,EAAyB,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AACxG,OAAO,EAAiB,KAAK,oBAAoB,EAAE,MAAM,iBAAiB,CAAC;AAC3E,OAAO,EAAwC,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACzF,OAAO,EAAE,gBAAgB,EAA6B,MAAM,sBAAsB,CAAC;AACnF,OAAO,EAAqC,KAAK,aAAa,EAAE,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"sharkcraft-inspector.d.ts","sourceRoot":"","sources":["../src/sharkcraft-inspector.ts"],"names":[],"mappings":"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"}
|
|
@@ -14,6 +14,7 @@ import { BoundaryRegistry, loadBoundaryRulesFromFile } from '@shrkcrft/boundarie
|
|
|
14
14
|
import { DoctorSeverity } from "./doctor-result.js";
|
|
15
15
|
import { diagnoseActionHints } from "./action-hint-diagnostics.js";
|
|
16
16
|
import { buildCodeIntelligenceChecks } from "./code-intelligence-doctor.js";
|
|
17
|
+
import { buildDelegateRecipeChecks } from "./delegate-doctor.js";
|
|
17
18
|
import { computeFileFingerprint, createInspectorCache, } from "./inspector-cache.js";
|
|
18
19
|
import { DEFAULT_SLOW_LOADER_THRESHOLD_MS, LARGE_FILE_THRESHOLD_BYTES, } from "./loader-diagnostics.js";
|
|
19
20
|
import { suggestSurfaceProfile } from "./surface-profile-detect.js";
|
|
@@ -801,6 +802,12 @@ export function runDoctor(inspection) {
|
|
|
801
802
|
for (const c of buildCodeIntelligenceChecks(inspection.projectRoot)) {
|
|
802
803
|
checks.push(c);
|
|
803
804
|
}
|
|
805
|
+
// Delegate-worker recipe health: surface any recipe that isn't safely
|
|
806
|
+
// delegatable (unbound / missing verification). Silent when the repo hasn't
|
|
807
|
+
// opted into a `delegation` block.
|
|
808
|
+
for (const c of buildDelegateRecipeChecks(inspection.config)) {
|
|
809
|
+
checks.push(c);
|
|
810
|
+
}
|
|
804
811
|
const summary = { ok: 0, info: 0, warnings: 0, errors: 0, advisoryCount: 0 };
|
|
805
812
|
for (const c of checks) {
|
|
806
813
|
if (c.severity === DoctorSeverity.Ok)
|
package/dist/start-here.d.ts
CHANGED
|
@@ -12,7 +12,7 @@
|
|
|
12
12
|
*/
|
|
13
13
|
export declare const START_HERE_SCHEMA = "sharkcraft.start-here/v1";
|
|
14
14
|
export declare const PRIMARY_COMMANDS_SCHEMA = "sharkcraft.primary-commands/v1";
|
|
15
|
-
export type StartHereFlow = 'onboard' | 'brief' | 'dev' | 'review' | 'governance' | 'packs' | 'release';
|
|
15
|
+
export type StartHereFlow = 'onboard' | 'investigate' | 'brief' | 'dev' | 'review' | 'governance' | 'packs' | 'release';
|
|
16
16
|
export type SafetyLevel = 'read-only' | 'writes-drafts' | 'writes-source';
|
|
17
17
|
export interface IStartHereFlow {
|
|
18
18
|
id: StartHereFlow;
|
package/dist/start-here.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"start-here.d.ts","sourceRoot":"","sources":["../src/start-here.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,eAAO,MAAM,iBAAiB,6BAA6B,CAAC;AAC5D,eAAO,MAAM,uBAAuB,mCAAmC,CAAC;AAExE,MAAM,MAAM,aAAa,GACrB,SAAS,GACT,OAAO,GACP,KAAK,GACL,QAAQ,GACR,YAAY,GACZ,OAAO,GACP,SAAS,CAAC;AAEd,MAAM,MAAM,WAAW,GAAG,WAAW,GAAG,eAAe,GAAG,eAAe,CAAC;AAE1E,MAAM,WAAW,cAAc;IAC7B,EAAE,EAAE,aAAa,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;IAClB,wBAAwB;IACxB,QAAQ,EAAE,SAAS,MAAM,EAAE,CAAC;IAC5B,MAAM,EAAE,WAAW,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,gBAAgB;IAC/B,MAAM,EAAE,OAAO,iBAAiB,CAAC;IACjC,uBAAuB,EAAE,MAAM,CAAC;IAChC,YAAY,EAAE,SAAS,MAAM,EAAE,CAAC;IAChC,YAAY,EAAE,SAAS,cAAc,EAAE,CAAC;IACxC,aAAa,EAAE,SAAS,cAAc,EAAE,CAAC;IACzC,uBAAuB,EAAE,MAAM,CAAC;CACjC;AAED,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,WAAW,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,sBAAsB;IACrC,MAAM,EAAE,OAAO,uBAAuB,CAAC;IACvC,OAAO,EAAE,SAAS,eAAe,EAAE,CAAC;CACrC;
|
|
1
|
+
{"version":3,"file":"start-here.d.ts","sourceRoot":"","sources":["../src/start-here.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,eAAO,MAAM,iBAAiB,6BAA6B,CAAC;AAC5D,eAAO,MAAM,uBAAuB,mCAAmC,CAAC;AAExE,MAAM,MAAM,aAAa,GACrB,SAAS,GACT,aAAa,GACb,OAAO,GACP,KAAK,GACL,QAAQ,GACR,YAAY,GACZ,OAAO,GACP,SAAS,CAAC;AAEd,MAAM,MAAM,WAAW,GAAG,WAAW,GAAG,eAAe,GAAG,eAAe,CAAC;AAE1E,MAAM,WAAW,cAAc;IAC7B,EAAE,EAAE,aAAa,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;IAClB,wBAAwB;IACxB,QAAQ,EAAE,SAAS,MAAM,EAAE,CAAC;IAC5B,MAAM,EAAE,WAAW,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,gBAAgB;IAC/B,MAAM,EAAE,OAAO,iBAAiB,CAAC;IACjC,uBAAuB,EAAE,MAAM,CAAC;IAChC,YAAY,EAAE,SAAS,MAAM,EAAE,CAAC;IAChC,YAAY,EAAE,SAAS,cAAc,EAAE,CAAC;IACxC,aAAa,EAAE,SAAS,cAAc,EAAE,CAAC;IACzC,uBAAuB,EAAE,MAAM,CAAC;CACjC;AAED,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,WAAW,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,sBAAsB;IACrC,MAAM,EAAE,OAAO,uBAAuB,CAAC;IACvC,OAAO,EAAE,SAAS,eAAe,EAAE,CAAC;CACrC;AAwMD,wBAAgB,oBAAoB,CAAC,IAAI,CAAC,EAAE,aAAa,GAAG,IAAI,GAAG,gBAAgB,CAiBlF;AAED,wBAAgB,0BAA0B,IAAI,sBAAsB,CAEnE;AAED,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,gBAAgB,GAAG,MAAM,CAkCpE;AAED,wBAAgB,yBAAyB,CAAC,MAAM,EAAE,sBAAsB,GAAG,MAAM,CAQhF"}
|
package/dist/start-here.js
CHANGED
|
@@ -27,6 +27,21 @@ const FLOWS_PRIMARY = [
|
|
|
27
27
|
docsLink: 'docs/onboarding.md',
|
|
28
28
|
nextCommand: 'shrk brief "<first task you want the agent to handle>"',
|
|
29
29
|
},
|
|
30
|
+
{
|
|
31
|
+
id: 'investigate',
|
|
32
|
+
title: 'Understand existing code (before you edit)',
|
|
33
|
+
whenToUse: 'You need to know who calls a symbol, where it is used (file:line), what breaks if you change a file, whether code A is wired to code B, or who implements an interface — use the graph instead of grep.',
|
|
34
|
+
commands: [
|
|
35
|
+
'shrk graph index',
|
|
36
|
+
'shrk graph callers <symbol>',
|
|
37
|
+
'shrk graph path <from> <to>',
|
|
38
|
+
'shrk graph context <file-or-symbol>',
|
|
39
|
+
'shrk graph impact <file-or-symbol> --full',
|
|
40
|
+
],
|
|
41
|
+
safety: 'read-only',
|
|
42
|
+
docsLink: 'docs/overview.md',
|
|
43
|
+
nextCommand: 'shrk graph callers <symbol>',
|
|
44
|
+
},
|
|
30
45
|
{
|
|
31
46
|
id: 'brief',
|
|
32
47
|
title: 'Prepare an AI agent brief',
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"test-impact.d.ts","sourceRoot":"","sources":["../src/test-impact.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,2BAA2B,CAAC;AAEvE,eAAO,MAAM,kBAAkB,8BAA8B,CAAC;AAE9D,MAAM,WAAW,gBAAgB;IAC/B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;CAC3B;AAED,MAAM,WAAW,WAAW;IAC1B,MAAM,EAAE,OAAO,kBAAkB,CAAC;IAClC,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,SAAS,MAAM,EAAE,CAAC;IAC9B,eAAe,EAAE,SAAS,MAAM,EAAE,CAAC;IACnC,gBAAgB,EAAE,SAAS,MAAM,EAAE,CAAC;IACpC,YAAY,EAAE,SAAS,MAAM,EAAE,CAAC;IAChC,qEAAqE;IACrE,eAAe,EAAE,SAAS,MAAM,EAAE,CAAC;IACnC,oCAAoC;IACpC,YAAY,EAAE,SAAS,MAAM,EAAE,CAAC;IAChC,oBAAoB,EAAE,SAAS,MAAM,EAAE,CAAC;IACxC,0DAA0D;IAC1D,eAAe,EAAE,SAAS;QAAE,WAAW,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,SAAS,MAAM,EAAE,CAAA;KAAE,EAAE,CAAC;IACjF,SAAS,EAAE,SAAS,MAAM,EAAE,CAAC;IAC7B,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;CACrB;
|
|
1
|
+
{"version":3,"file":"test-impact.d.ts","sourceRoot":"","sources":["../src/test-impact.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,2BAA2B,CAAC;AAEvE,eAAO,MAAM,kBAAkB,8BAA8B,CAAC;AAE9D,MAAM,WAAW,gBAAgB;IAC/B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;CAC3B;AAED,MAAM,WAAW,WAAW;IAC1B,MAAM,EAAE,OAAO,kBAAkB,CAAC;IAClC,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,SAAS,MAAM,EAAE,CAAC;IAC9B,eAAe,EAAE,SAAS,MAAM,EAAE,CAAC;IACnC,gBAAgB,EAAE,SAAS,MAAM,EAAE,CAAC;IACpC,YAAY,EAAE,SAAS,MAAM,EAAE,CAAC;IAChC,qEAAqE;IACrE,eAAe,EAAE,SAAS,MAAM,EAAE,CAAC;IACnC,oCAAoC;IACpC,YAAY,EAAE,SAAS,MAAM,EAAE,CAAC;IAChC,oBAAoB,EAAE,SAAS,MAAM,EAAE,CAAC;IACxC,0DAA0D;IAC1D,eAAe,EAAE,SAAS;QAAE,WAAW,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,SAAS,MAAM,EAAE,CAAA;KAAE,EAAE,CAAC;IACjF,SAAS,EAAE,SAAS,MAAM,EAAE,CAAC;IAC7B,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;CACrB;AAoCD,wBAAgB,iBAAiB,CAC/B,UAAU,EAAE,qBAAqB,EACjC,KAAK,EAAE,gBAAgB,GACtB,WAAW,CAyEb;AAoDD,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAOvD"}
|
package/dist/test-impact.js
CHANGED
|
@@ -7,8 +7,11 @@ const TEST_PATTERNS = [
|
|
|
7
7
|
(f) => f.replace(/^src\//, 'tests/').replace(/\.(ts|tsx|js|jsx)$/, '.test.$1'),
|
|
8
8
|
(f) => f.replace(/\.([tj]s)$/, '.spec.$1'),
|
|
9
9
|
(f) => f.replace(/\.([tj]s)$/, '.test.$1'),
|
|
10
|
-
|
|
11
|
-
|
|
10
|
+
// Guard on `.tsx`: a bare `.replace(/\.tsx$/, …)` is a no-op on a `.ts`
|
|
11
|
+
// file, so it would echo the input source file back as its own "test"
|
|
12
|
+
// (existing on disk → falsely confidence 100%, runs zero tests).
|
|
13
|
+
(f) => (/\.tsx$/.test(f) ? f.replace(/\.tsx$/, '.test.tsx') : null),
|
|
14
|
+
(f) => (/\.tsx$/.test(f) ? f.replace(/\.tsx$/, '.spec.tsx') : null),
|
|
12
15
|
(f) => {
|
|
13
16
|
const parsed = nodePath.parse(f);
|
|
14
17
|
if (!parsed.name)
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@shrkcrft/inspector",
|
|
3
|
-
"version": "0.1.0-alpha.
|
|
3
|
+
"version": "0.1.0-alpha.18",
|
|
4
4
|
"description": "SharkCraft inspector: project overview, doctor checks, AI-agent instructions.",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"author": "SharkCraft contributors",
|
|
@@ -42,22 +42,22 @@
|
|
|
42
42
|
"typecheck": "tsc --noEmit -p tsconfig.json"
|
|
43
43
|
},
|
|
44
44
|
"dependencies": {
|
|
45
|
-
"@shrkcrft/core": "^0.1.0-alpha.
|
|
46
|
-
"@shrkcrft/config": "^0.1.0-alpha.
|
|
47
|
-
"@shrkcrft/workspace": "^0.1.0-alpha.
|
|
48
|
-
"@shrkcrft/knowledge": "^0.1.0-alpha.
|
|
49
|
-
"@shrkcrft/rules": "^0.1.0-alpha.
|
|
50
|
-
"@shrkcrft/paths": "^0.1.0-alpha.
|
|
51
|
-
"@shrkcrft/templates": "^0.1.0-alpha.
|
|
52
|
-
"@shrkcrft/context": "^0.1.0-alpha.
|
|
53
|
-
"@shrkcrft/pipelines": "^0.1.0-alpha.
|
|
54
|
-
"@shrkcrft/packs": "^0.1.0-alpha.
|
|
55
|
-
"@shrkcrft/presets": "^0.1.0-alpha.
|
|
56
|
-
"@shrkcrft/boundaries": "^0.1.0-alpha.
|
|
57
|
-
"@shrkcrft/generator": "^0.1.0-alpha.
|
|
58
|
-
"@shrkcrft/importer": "^0.1.0-alpha.
|
|
59
|
-
"@shrkcrft/plugin-api": "^0.1.0-alpha.
|
|
60
|
-
"@shrkcrft/dashboard-api": "^0.1.0-alpha.
|
|
45
|
+
"@shrkcrft/core": "^0.1.0-alpha.18",
|
|
46
|
+
"@shrkcrft/config": "^0.1.0-alpha.18",
|
|
47
|
+
"@shrkcrft/workspace": "^0.1.0-alpha.18",
|
|
48
|
+
"@shrkcrft/knowledge": "^0.1.0-alpha.18",
|
|
49
|
+
"@shrkcrft/rules": "^0.1.0-alpha.18",
|
|
50
|
+
"@shrkcrft/paths": "^0.1.0-alpha.18",
|
|
51
|
+
"@shrkcrft/templates": "^0.1.0-alpha.18",
|
|
52
|
+
"@shrkcrft/context": "^0.1.0-alpha.18",
|
|
53
|
+
"@shrkcrft/pipelines": "^0.1.0-alpha.18",
|
|
54
|
+
"@shrkcrft/packs": "^0.1.0-alpha.18",
|
|
55
|
+
"@shrkcrft/presets": "^0.1.0-alpha.18",
|
|
56
|
+
"@shrkcrft/boundaries": "^0.1.0-alpha.18",
|
|
57
|
+
"@shrkcrft/generator": "^0.1.0-alpha.18",
|
|
58
|
+
"@shrkcrft/importer": "^0.1.0-alpha.18",
|
|
59
|
+
"@shrkcrft/plugin-api": "^0.1.0-alpha.18",
|
|
60
|
+
"@shrkcrft/dashboard-api": "^0.1.0-alpha.18",
|
|
61
61
|
"typescript": "^5.6.0"
|
|
62
62
|
},
|
|
63
63
|
"publishConfig": {
|