@shrkcrft/inspector 0.1.0-alpha.17 → 0.1.0-alpha.19
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/ai-readiness.d.ts.map +1 -1
- package/dist/ai-readiness.js +20 -5
- package/dist/changed-preflight.d.ts +7 -0
- package/dist/changed-preflight.d.ts.map +1 -1
- package/dist/changed-preflight.js +56 -9
- 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/git-helpers.d.ts +15 -0
- package/dist/git-helpers.d.ts.map +1 -1
- package/dist/git-helpers.js +41 -0
- package/dist/impact-analysis.d.ts.map +1 -1
- package/dist/impact-analysis.js +10 -2
- package/dist/index.d.ts +5 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +5 -0
- package/dist/pack-contributions-inventory.d.ts.map +1 -1
- package/dist/pack-contributions-inventory.js +6 -0
- package/dist/pack-signature-status.d.ts.map +1 -1
- package/dist/pack-signature-status.js +18 -1
- 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/propose-knowledge.d.ts +15 -0
- package/dist/propose-knowledge.d.ts.map +1 -1
- package/dist/propose-knowledge.js +37 -4
- package/dist/resolve-verification-commands.d.ts +26 -0
- package/dist/resolve-verification-commands.d.ts.map +1 -0
- package/dist/resolve-verification-commands.js +55 -0
- package/dist/rule-drift.d.ts.map +1 -1
- package/dist/rule-drift.js +24 -9
- 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/task-packet.d.ts.map +1 -1
- package/dist/task-packet.js +13 -1
- package/dist/test-impact.d.ts.map +1 -1
- package/dist/test-impact.js +5 -2
- package/package.json +17 -17
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"resolve-verification-commands.d.ts","sourceRoot":"","sources":["../src/resolve-verification-commands.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,2BAA2B,CAAC;AAEvE;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAgB,2BAA2B,CACzC,UAAU,EAAE,qBAAqB,EACjC,OAAO,GAAE;IACP,QAAQ,CAAC,WAAW,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IACzC,QAAQ,CAAC,iBAAiB,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;CAC3C,GACL,MAAM,EAAE,CA2BV"}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
import { PipelineStepType } from '@shrkcrft/pipelines';
|
|
2
|
+
/**
|
|
3
|
+
* Resolve the verification commands an agent should run after a task, grounded
|
|
4
|
+
* in the pack rather than a generic default. Precedence (first non-empty wins):
|
|
5
|
+
*
|
|
6
|
+
* 1. The matched pipeline's command-type gate steps — the gates the pipeline
|
|
7
|
+
* author actually declared for this class of work (e.g. the engine
|
|
8
|
+
* `feature-dev` pipeline's `bun x tsc … --noEmit` + `bun test`).
|
|
9
|
+
* 2. The project's `sharkcraft.config.ts verificationCommands[]` — the
|
|
10
|
+
* trusted, repo-wide gate set (the same source `apply --validate` runs).
|
|
11
|
+
* 3. The caller-supplied knowledge action-hint defaults — today's behaviour,
|
|
12
|
+
* used only when neither of the above declares anything.
|
|
13
|
+
*
|
|
14
|
+
* A pipeline gate is a `command`-type step that is required and carries a
|
|
15
|
+
* concrete command (no `<placeholder>` tokens) — this excludes optional review
|
|
16
|
+
* steps, context builds, and generative/spec steps (which take arguments) while
|
|
17
|
+
* keeping the real post-change gates. Rules carry no verification field, so
|
|
18
|
+
* they are intentionally not a source here.
|
|
19
|
+
*
|
|
20
|
+
* Deterministic, order-preserving, deduped. No commands are executed.
|
|
21
|
+
*/
|
|
22
|
+
export function resolveVerificationCommands(inspection, options = {}) {
|
|
23
|
+
const fromPipelines = [];
|
|
24
|
+
for (const id of options.pipelineIds ?? []) {
|
|
25
|
+
const pipeline = inspection.pipelineRegistry.get(id);
|
|
26
|
+
if (!pipeline)
|
|
27
|
+
continue;
|
|
28
|
+
for (const step of pipeline.steps) {
|
|
29
|
+
if (step.type !== PipelineStepType.Command)
|
|
30
|
+
continue;
|
|
31
|
+
if (step.required === false)
|
|
32
|
+
continue;
|
|
33
|
+
for (const raw of step.cliCommands ?? []) {
|
|
34
|
+
const cmd = raw.trim();
|
|
35
|
+
if (cmd.length > 0 && !cmd.includes('<'))
|
|
36
|
+
fromPipelines.push(cmd);
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
if (fromPipelines.length > 0)
|
|
41
|
+
return dedupe(fromPipelines);
|
|
42
|
+
const cfg = inspection.config;
|
|
43
|
+
const fromConfig = [];
|
|
44
|
+
for (const vc of cfg?.verificationCommands ?? []) {
|
|
45
|
+
const cmd = vc?.command?.trim();
|
|
46
|
+
if (cmd && cmd.length > 0)
|
|
47
|
+
fromConfig.push(cmd);
|
|
48
|
+
}
|
|
49
|
+
if (fromConfig.length > 0)
|
|
50
|
+
return dedupe(fromConfig);
|
|
51
|
+
return dedupe(options.knowledgeDefaults ?? []);
|
|
52
|
+
}
|
|
53
|
+
function dedupe(items) {
|
|
54
|
+
return [...new Set(items)];
|
|
55
|
+
}
|
package/dist/rule-drift.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"rule-drift.d.ts","sourceRoot":"","sources":["../src/rule-drift.ts"],"names":[],"mappings":"AAYA,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,2BAA2B,CAAC;AAEvE,eAAO,MAAM,iBAAiB,6BAA6B,CAAC;AAE5D,oBAAY,oBAAoB;IAC9B,QAAQ,aAAa;IACrB,iBAAiB,uBAAuB;IACxC,UAAU,gBAAgB;IAC1B,YAAY,iBAAiB;IAC7B,KAAK,UAAU;IACf,OAAO,YAAY;CACpB;AAED,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,KAAK,EAAE,oBAAoB,CAAC;IACrC,0DAA0D;IAC1D,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,kDAAkD;IAClD,QAAQ,CAAC,4BAA4B,EAAE,SAAS,MAAM,EAAE,CAAC;IACzD,sEAAsE;IACtE,QAAQ,CAAC,4BAA4B,EAAE,SAAS,MAAM,EAAE,CAAC;IACzD,4EAA4E;IAC5E,QAAQ,CAAC,cAAc,EAAE,OAAO,CAAC;IACjC,4EAA4E;IAC5E,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC;IAC3B,wCAAwC;IACxC,QAAQ,CAAC,MAAM,EAAE;QAAE,QAAQ,CAAC,IAAI,EAAE,OAAO,GAAG,MAAM,CAAC;QAAC,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;CACrF;AAED,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,MAAM,EAAE,OAAO,iBAAiB,CAAC;IAC1C,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,OAAO,EAAE,SAAS,eAAe,EAAE,CAAC;IAC7C,QAAQ,CAAC,OAAO,EAAE,QAAQ,CAAC,MAAM,CAAC,oBAAoB,EAAE,MAAM,CAAC,CAAC,CAAC;IACjE,6DAA6D;IAC7D,QAAQ,CAAC,YAAY,EAAE,SAAS,MAAM,EAAE,CAAC;CAC1C;
|
|
1
|
+
{"version":3,"file":"rule-drift.d.ts","sourceRoot":"","sources":["../src/rule-drift.ts"],"names":[],"mappings":"AAYA,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,2BAA2B,CAAC;AAEvE,eAAO,MAAM,iBAAiB,6BAA6B,CAAC;AAE5D,oBAAY,oBAAoB;IAC9B,QAAQ,aAAa;IACrB,iBAAiB,uBAAuB;IACxC,UAAU,gBAAgB;IAC1B,YAAY,iBAAiB;IAC7B,KAAK,UAAU;IACf,OAAO,YAAY;CACpB;AAED,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,KAAK,EAAE,oBAAoB,CAAC;IACrC,0DAA0D;IAC1D,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,kDAAkD;IAClD,QAAQ,CAAC,4BAA4B,EAAE,SAAS,MAAM,EAAE,CAAC;IACzD,sEAAsE;IACtE,QAAQ,CAAC,4BAA4B,EAAE,SAAS,MAAM,EAAE,CAAC;IACzD,4EAA4E;IAC5E,QAAQ,CAAC,cAAc,EAAE,OAAO,CAAC;IACjC,4EAA4E;IAC5E,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC;IAC3B,wCAAwC;IACxC,QAAQ,CAAC,MAAM,EAAE;QAAE,QAAQ,CAAC,IAAI,EAAE,OAAO,GAAG,MAAM,CAAC;QAAC,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;CACrF;AAED,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,MAAM,EAAE,OAAO,iBAAiB,CAAC;IAC1C,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,OAAO,EAAE,SAAS,eAAe,EAAE,CAAC;IAC7C,QAAQ,CAAC,OAAO,EAAE,QAAQ,CAAC,MAAM,CAAC,oBAAoB,EAAE,MAAM,CAAC,CAAC,CAAC;IACjE,6DAA6D;IAC7D,QAAQ,CAAC,YAAY,EAAE,SAAS,MAAM,EAAE,CAAC;CAC1C;AA6DD,wBAAgB,iBAAiB,CAC/B,UAAU,EAAE,qBAAqB,GAChC,gBAAgB,CAyFlB"}
|
package/dist/rule-drift.js
CHANGED
|
@@ -20,14 +20,27 @@ export var RuleEnforcementState;
|
|
|
20
20
|
RuleEnforcementState["Stale"] = "stale";
|
|
21
21
|
RuleEnforcementState["Unknown"] = "unknown";
|
|
22
22
|
})(RuleEnforcementState || (RuleEnforcementState = {}));
|
|
23
|
-
|
|
23
|
+
/**
|
|
24
|
+
* The set of verification references a rule can match against to count as
|
|
25
|
+
* "wired" in `sharkcraft.config.ts`. A rule declares its verification commands
|
|
26
|
+
* as runnable command strings (e.g. `bun test`), while the config declares
|
|
27
|
+
* them as `{ id, command }` records (e.g. `{ id: 'unit-tests', command: 'bun
|
|
28
|
+
* test' }`). A rule is enforced when its declared command matches the config
|
|
29
|
+
* BY id OR BY command string, so we collect both — otherwise a rule that ships
|
|
30
|
+
* a genuinely-runnable, genuinely-wired command (matching by `command`) is
|
|
31
|
+
* mis-classified as unenforced just because it doesn't reference the config's
|
|
32
|
+
* short id.
|
|
33
|
+
*/
|
|
34
|
+
function configuredVerificationRefs(inspection) {
|
|
24
35
|
const cfg = inspection.config;
|
|
25
|
-
const
|
|
36
|
+
const refs = new Set();
|
|
26
37
|
for (const entry of cfg?.verificationCommands ?? []) {
|
|
27
38
|
if (entry?.id)
|
|
28
|
-
|
|
39
|
+
refs.add(entry.id.trim());
|
|
40
|
+
if (entry?.command)
|
|
41
|
+
refs.add(entry.command.trim());
|
|
29
42
|
}
|
|
30
|
-
return
|
|
43
|
+
return refs;
|
|
31
44
|
}
|
|
32
45
|
function isRule(entry) {
|
|
33
46
|
return entry.type === KnowledgeType.Rule;
|
|
@@ -60,13 +73,15 @@ function staleReason(entry, inspection) {
|
|
|
60
73
|
return null;
|
|
61
74
|
}
|
|
62
75
|
export function classifyRuleDrift(inspection) {
|
|
63
|
-
const
|
|
76
|
+
const wiredRefs = configuredVerificationRefs(inspection);
|
|
64
77
|
const entries = [];
|
|
65
78
|
for (const entry of inspection.knowledgeEntries) {
|
|
66
79
|
if (!isRule(entry))
|
|
67
80
|
continue;
|
|
68
81
|
const declared = entry.actionHints?.verificationCommands ?? [];
|
|
69
|
-
|
|
82
|
+
// A declared command counts as enforced when it is wired in the config
|
|
83
|
+
// BY id OR BY command string (the config carries both).
|
|
84
|
+
const enforced = declared.filter((ref) => wiredRefs.has(ref.trim()));
|
|
70
85
|
const advisory = isAdvisory(entry);
|
|
71
86
|
const stale = staleReason(entry, inspection);
|
|
72
87
|
const hasHints = hasMeaningfulActionHints(entry);
|
|
@@ -82,15 +97,15 @@ export function classifyRuleDrift(inspection) {
|
|
|
82
97
|
}
|
|
83
98
|
else if (declared.length > 0 && enforced.length === declared.length) {
|
|
84
99
|
state = RuleEnforcementState.Enforced;
|
|
85
|
-
reason = `all ${declared.length} verification command(s) wired in sharkcraft.config.ts`;
|
|
100
|
+
reason = `all ${declared.length} verification command(s) wired (by id or command) in sharkcraft.config.ts`;
|
|
86
101
|
}
|
|
87
102
|
else if (declared.length > 0 && enforced.length > 0) {
|
|
88
103
|
state = RuleEnforcementState.PartiallyEnforced;
|
|
89
|
-
reason = `${enforced.length}/${declared.length} verification command(s) wired in sharkcraft.config.ts`;
|
|
104
|
+
reason = `${enforced.length}/${declared.length} verification command(s) wired (by id or command) in sharkcraft.config.ts`;
|
|
90
105
|
}
|
|
91
106
|
else if (declared.length > 0) {
|
|
92
107
|
state = RuleEnforcementState.PartiallyEnforced;
|
|
93
|
-
reason = `${declared.length} verification command(s) declared but none wired in sharkcraft.config.ts`;
|
|
108
|
+
reason = `${declared.length} verification command(s) declared but none wired (by id or command) in sharkcraft.config.ts`;
|
|
94
109
|
}
|
|
95
110
|
else if (hasHints) {
|
|
96
111
|
state = RuleEnforcementState.ManualOnly;
|
|
@@ -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":"task-packet.d.ts","sourceRoot":"","sources":["../src/task-packet.ts"],"names":[],"mappings":"AAAA,OAAO,EAAgB,KAAK,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACtE,OAAO,EAEL,KAAK,sBAAsB,EAC3B,KAAK,eAAe,EACrB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,iBAAiB,CAAC;AAG7C,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAC/D,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,mBAAmB,CAAC;AAG/D,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,2BAA2B,CAAC;
|
|
1
|
+
{"version":3,"file":"task-packet.d.ts","sourceRoot":"","sources":["../src/task-packet.ts"],"names":[],"mappings":"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"}
|
package/dist/task-packet.js
CHANGED
|
@@ -2,6 +2,7 @@ import { buildContext } from '@shrkcrft/context';
|
|
|
2
2
|
import { aggregateActionHints, } from '@shrkcrft/knowledge';
|
|
3
3
|
import { rankAll } from "./task-ranker.js";
|
|
4
4
|
import { buildProjectOverview, renderOverviewText } from "./project-overview.js";
|
|
5
|
+
import { resolveVerificationCommands } from "./resolve-verification-commands.js";
|
|
5
6
|
/**
|
|
6
7
|
* Per-field caps applied to the packet when `compact: true`.
|
|
7
8
|
* Keeps the JSON small while still covering the highest-signal hits.
|
|
@@ -130,6 +131,17 @@ export function buildTaskPacket(inspection, task, options = {}) {
|
|
|
130
131
|
confidence: (r.score >= 15 ? 'high' : r.score >= 9 ? 'medium' : 'low'),
|
|
131
132
|
reasons: r.reasons,
|
|
132
133
|
}));
|
|
134
|
+
// Verification commands: prefer the matched pipeline's declared gates, then
|
|
135
|
+
// the config's trusted gate set, then the knowledge action-hint defaults —
|
|
136
|
+
// so the packet tells the agent to run the gates the pack actually declares
|
|
137
|
+
// (e.g. `bun test` / `bun x tsc … --noEmit`) instead of a generic fallback.
|
|
138
|
+
const resolvedVerification = resolveVerificationCommands(inspection, {
|
|
139
|
+
pipelineIds: recommendedPipelines.map((p) => p.pipelineId),
|
|
140
|
+
knowledgeDefaults: actionHints.verificationCommands,
|
|
141
|
+
});
|
|
142
|
+
const verificationCommands = compact
|
|
143
|
+
? resolvedVerification.slice(0, COMPACT_CAPS.verificationCommands)
|
|
144
|
+
: resolvedVerification;
|
|
133
145
|
const tokenEstimate = contextResult.totalTokens +
|
|
134
146
|
Math.ceil((actionHints.commands.length + actionHints.mcpTools.length + actionHints.verificationCommands.length) *
|
|
135
147
|
4);
|
|
@@ -185,7 +197,7 @@ export function buildTaskPacket(inspection, task, options = {}) {
|
|
|
185
197
|
recommendedMcpTools: actionHints.mcpTools.map((t) => t.tool),
|
|
186
198
|
recommendedCliCommands: actionHints.commands.map((c) => typeof c === 'string' ? c : c.command),
|
|
187
199
|
forbiddenActions: actionHints.forbiddenActions,
|
|
188
|
-
verificationCommands
|
|
200
|
+
verificationCommands,
|
|
189
201
|
humanReviewPoints,
|
|
190
202
|
tokenEstimate,
|
|
191
203
|
};
|
|
@@ -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.19",
|
|
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.19",
|
|
46
|
+
"@shrkcrft/config": "^0.1.0-alpha.19",
|
|
47
|
+
"@shrkcrft/workspace": "^0.1.0-alpha.19",
|
|
48
|
+
"@shrkcrft/knowledge": "^0.1.0-alpha.19",
|
|
49
|
+
"@shrkcrft/rules": "^0.1.0-alpha.19",
|
|
50
|
+
"@shrkcrft/paths": "^0.1.0-alpha.19",
|
|
51
|
+
"@shrkcrft/templates": "^0.1.0-alpha.19",
|
|
52
|
+
"@shrkcrft/context": "^0.1.0-alpha.19",
|
|
53
|
+
"@shrkcrft/pipelines": "^0.1.0-alpha.19",
|
|
54
|
+
"@shrkcrft/packs": "^0.1.0-alpha.19",
|
|
55
|
+
"@shrkcrft/presets": "^0.1.0-alpha.19",
|
|
56
|
+
"@shrkcrft/boundaries": "^0.1.0-alpha.19",
|
|
57
|
+
"@shrkcrft/generator": "^0.1.0-alpha.19",
|
|
58
|
+
"@shrkcrft/importer": "^0.1.0-alpha.19",
|
|
59
|
+
"@shrkcrft/plugin-api": "^0.1.0-alpha.19",
|
|
60
|
+
"@shrkcrft/dashboard-api": "^0.1.0-alpha.19",
|
|
61
61
|
"typescript": "^5.6.0"
|
|
62
62
|
},
|
|
63
63
|
"publishConfig": {
|