@shrkcrft/inspector 0.1.0-alpha.16 → 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-contract-gate.d.ts.map +1 -1
- package/dist/agent-contract-gate.js +25 -2
- package/dist/agent-instructions.d.ts.map +1 -1
- package/dist/agent-instructions.js +11 -0
- package/dist/area-explore.d.ts.map +1 -1
- package/dist/area-explore.js +3 -1
- 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/construct-inference.d.ts.map +1 -1
- package/dist/construct-inference.js +3 -1
- 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/decision-records.d.ts.map +1 -1
- package/dist/decision-records.js +3 -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/onboarding.js +4 -2
- 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/repo-memory.d.ts.map +1 -1
- package/dist/repo-memory.js +3 -1
- package/dist/repository-intelligence.d.ts.map +1 -1
- package/dist/repository-intelligence.js +7 -2
- package/dist/repository-stats.d.ts.map +1 -1
- package/dist/repository-stats.js +3 -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-contract-gate.d.ts","sourceRoot":"","sources":["../src/agent-contract-gate.ts"],"names":[],"mappings":"AAYA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAE1D,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAOlE,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,2BAA2B,CAAC;AAEvE,eAAO,MAAM,8BAA8B,0CAA0C,CAAC;AACtF,eAAO,MAAM,0BAA0B,sCAAsC,CAAC;AAE9E,MAAM,WAAW,sBAAsB;IACrC,MAAM,EAAE,OAAO,8BAA8B,CAAC;IAC9C,6DAA6D;IAC7D,YAAY,EAAE,MAAM,CAAC;IACrB,kEAAkE;IAClE,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;IACnB,gDAAgD;IAChD,aAAa,EAAE,SAAS,MAAM,EAAE,CAAC;IACjC,uEAAuE;IACvE,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,sEAAsE;IACtE,SAAS,CAAC,EAAE;QACV,IAAI,EAAE,QAAQ,CAAC;QACf,IAAI,EAAE,MAAM,CAAC;QACb,QAAQ,EAAE,MAAM,CAAC;KAClB,CAAC;CACH;AAED,oBAAY,kBAAkB;IAC5B,IAAI,SAAS;IACb,gBAAgB,sBAAsB;IACtC,IAAI,SAAS;IACb,IAAI,SAAS;CACd;AAED,MAAM,WAAW,mBAAmB;IAClC,EAAE,EAAE,MAAM,CAAC;IACX,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,kBAAkB,CAAC;IAC3B,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,oBAAY,4BAA4B;IACtC,KAAK,UAAU;IACf,WAAW,iBAAiB;IAC5B,OAAO,YAAY;IACnB,QAAQ,cAAc;IACtB,MAAM,WAAW;CAClB;AAED,MAAM,WAAW,uBAAuB;IACtC,MAAM,EAAE,4BAA4B,CAAC;IACrC,oGAAoG;IACpG,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,mDAAmD;IACnD,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,wFAAwF;IACxF,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,sFAAsF;IACtF,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED,MAAM,WAAW,oBAAoB;IACnC,MAAM,EAAE,OAAO,0BAA0B,CAAC;IAC1C,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,SAAS,mBAAmB,EAAE,CAAC;IACtC,QAAQ,CAAC,EAAE,sBAAsB,CAAC;IAClC,cAAc,EAAE,QAAQ,GAAG,SAAS,GAAG,SAAS,GAAG,YAAY,GAAG,UAAU,GAAG,UAAU,GAAG,SAAS,CAAC;IACtG,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,+CAA+C;IAC/C,cAAc,CAAC,EAAE,uBAAuB,CAAC;IACzC,IAAI,EAAE,OAAO,CAAC;IACd,aAAa,EAAE,SAAS,MAAM,EAAE,CAAC;IACjC,SAAS,EAAE,SAAS,MAAM,EAAE,CAAC;IAC7B,cAAc,CAAC,EAAE,qBAAqB,CAAC;IACvC,KAAK,EAAE,SAAS,MAAM,EAAE,CAAC;CAC1B;AAED,MAAM,WAAW,qBAAqB;IACpC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,sEAAsE;IACtE,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;
|
|
1
|
+
{"version":3,"file":"agent-contract-gate.d.ts","sourceRoot":"","sources":["../src/agent-contract-gate.ts"],"names":[],"mappings":"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"}
|
|
@@ -31,12 +31,35 @@ export var ContractApprovalExpiryStatus;
|
|
|
31
31
|
ContractApprovalExpiryStatus["Absent"] = "absent";
|
|
32
32
|
})(ContractApprovalExpiryStatus || (ContractApprovalExpiryStatus = {}));
|
|
33
33
|
const APPROVAL_SECRET_ENV_DEFAULT = 'SHARKCRAFT_CONTRACT_SECRET';
|
|
34
|
+
/**
|
|
35
|
+
* Deterministic JSON: keys sorted at EVERY depth, keys/values JSON-quoted.
|
|
36
|
+
* Critically NOT `JSON.stringify(obj, keysArray)` — an array replacer is a key
|
|
37
|
+
* ALLOWLIST applied at every nesting level, which silently DROPS nested-object
|
|
38
|
+
* keys (e.g. `forbiddenFilesDetailed` rule fields) from the hash input, letting
|
|
39
|
+
* a contract be tampered in a nested field without changing its hash and
|
|
40
|
+
* bypassing approval binding.
|
|
41
|
+
*/
|
|
42
|
+
function canonicalJson(value) {
|
|
43
|
+
if (value === null || typeof value !== 'object')
|
|
44
|
+
return JSON.stringify(value);
|
|
45
|
+
if (Array.isArray(value))
|
|
46
|
+
return '[' + value.map((v) => canonicalJson(v)).join(',') + ']';
|
|
47
|
+
const keys = Object.keys(value).sort();
|
|
48
|
+
const parts = [];
|
|
49
|
+
for (const k of keys) {
|
|
50
|
+
const v = value[k];
|
|
51
|
+
if (v === undefined)
|
|
52
|
+
continue;
|
|
53
|
+
parts.push(JSON.stringify(k) + ':' + canonicalJson(v));
|
|
54
|
+
}
|
|
55
|
+
return '{' + parts.join(',') + '}';
|
|
56
|
+
}
|
|
34
57
|
function canonicalContractJson(contract) {
|
|
35
58
|
// Deterministic JSON for hashing — exclude `generatedAt` so hashes stay
|
|
36
59
|
// stable across re-builds of the same task.
|
|
37
60
|
const { generatedAt: _drop, ...rest } = contract;
|
|
38
61
|
void _drop;
|
|
39
|
-
return
|
|
62
|
+
return canonicalJson(rest);
|
|
40
63
|
}
|
|
41
64
|
export function computeContractHash(contract) {
|
|
42
65
|
const h = createHash('sha256');
|
|
@@ -46,7 +69,7 @@ export function computeContractHash(contract) {
|
|
|
46
69
|
function canonicalApprovalJson(a) {
|
|
47
70
|
const { signature: _drop, ...rest } = a;
|
|
48
71
|
void _drop;
|
|
49
|
-
return
|
|
72
|
+
return canonicalJson(rest);
|
|
50
73
|
}
|
|
51
74
|
export function signApproval(a, secret) {
|
|
52
75
|
const hmac = createHmac('sha256', secret);
|
|
@@ -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.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"area-explore.d.ts","sourceRoot":"","sources":["../src/area-explore.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAIH,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,2BAA2B,CAAC;AACvE,OAAO,EAAE,QAAQ,EAAgB,MAAM,eAAe,CAAC;AAEvD,eAAO,MAAM,mBAAmB,+BAA+B,CAAC;AAEhE,MAAM,WAAW,qBAAqB;IACpC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,IAAI,EAAE,QAAQ,GAAG,MAAM,GAAG,KAAK,GAAG,WAAW,GAAG,QAAQ,GAAG,OAAO,CAAC;CAC7E;AAED,MAAM,WAAW,qBAAqB;IACpC,QAAQ,CAAC,IAAI,EACT,iBAAiB,GACjB,aAAa,GACb,cAAc,GACd,cAAc,GACd,gBAAgB,GAChB,mBAAmB,GACnB,UAAU,CAAC;IACf,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,QAAQ,EAAE,MAAM,GAAG,SAAS,CAAC;CACvC;AAED,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,MAAM,EAAE,OAAO,mBAAmB,CAAC;IAC5C,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC;IACzB,QAAQ,CAAC,YAAY,EAAE,QAAQ,CAAC;IAChC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,QAAQ,EAAE,aAAa,CAAC,qBAAqB,CAAC,CAAC;IACxD,QAAQ,CAAC,eAAe,EAAE,aAAa,CAAC,MAAM,CAAC,CAAC;IAChD,QAAQ,CAAC,eAAe,EAAE,aAAa,CAAC,MAAM,CAAC,CAAC;IAChD,QAAQ,CAAC,gBAAgB,EAAE,aAAa,CAAC,MAAM,CAAC,CAAC;IACjD,QAAQ,CAAC,gBAAgB,EAAE,aAAa,CAAC,MAAM,CAAC,CAAC;IACjD,QAAQ,CAAC,eAAe,EAAE,aAAa,CAAC,MAAM,CAAC,CAAC;IAChD,QAAQ,CAAC,iBAAiB,EAAE,aAAa,CAAC,MAAM,CAAC,CAAC;IAClD,QAAQ,CAAC,KAAK,EAAE,aAAa,CAAC,qBAAqB,CAAC,CAAC;IACrD,QAAQ,CAAC,YAAY,EAAE,aAAa,CAAC,MAAM,CAAC,CAAC;CAC9C;AA6LD,MAAM,WAAW,iBAAiB;IAChC,UAAU,EAAE,qBAAqB,CAAC;IAClC,wEAAwE;IACxE,IAAI,EAAE,MAAM,CAAC;IACb,gFAAgF;IAChF,cAAc,CAAC,EAAE,aAAa,CAAC;QAAE,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACpD,mDAAmD;IACnD,YAAY,CAAC,EAAE,aAAa,CAAC,MAAM,CAAC,CAAC;IACrC,8CAA8C;IAC9C,eAAe,CAAC,EAAE,aAAa,CAAC;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACjF,mCAAmC;IACnC,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,wBAAgB,WAAW,CAAC,KAAK,EAAE,iBAAiB,GAAG,kBAAkB,
|
|
1
|
+
{"version":3,"file":"area-explore.d.ts","sourceRoot":"","sources":["../src/area-explore.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAIH,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,2BAA2B,CAAC;AACvE,OAAO,EAAE,QAAQ,EAAgB,MAAM,eAAe,CAAC;AAEvD,eAAO,MAAM,mBAAmB,+BAA+B,CAAC;AAEhE,MAAM,WAAW,qBAAqB;IACpC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,IAAI,EAAE,QAAQ,GAAG,MAAM,GAAG,KAAK,GAAG,WAAW,GAAG,QAAQ,GAAG,OAAO,CAAC;CAC7E;AAED,MAAM,WAAW,qBAAqB;IACpC,QAAQ,CAAC,IAAI,EACT,iBAAiB,GACjB,aAAa,GACb,cAAc,GACd,cAAc,GACd,gBAAgB,GAChB,mBAAmB,GACnB,UAAU,CAAC;IACf,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,QAAQ,EAAE,MAAM,GAAG,SAAS,CAAC;CACvC;AAED,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,MAAM,EAAE,OAAO,mBAAmB,CAAC;IAC5C,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC;IACzB,QAAQ,CAAC,YAAY,EAAE,QAAQ,CAAC;IAChC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,QAAQ,EAAE,aAAa,CAAC,qBAAqB,CAAC,CAAC;IACxD,QAAQ,CAAC,eAAe,EAAE,aAAa,CAAC,MAAM,CAAC,CAAC;IAChD,QAAQ,CAAC,eAAe,EAAE,aAAa,CAAC,MAAM,CAAC,CAAC;IAChD,QAAQ,CAAC,gBAAgB,EAAE,aAAa,CAAC,MAAM,CAAC,CAAC;IACjD,QAAQ,CAAC,gBAAgB,EAAE,aAAa,CAAC,MAAM,CAAC,CAAC;IACjD,QAAQ,CAAC,eAAe,EAAE,aAAa,CAAC,MAAM,CAAC,CAAC;IAChD,QAAQ,CAAC,iBAAiB,EAAE,aAAa,CAAC,MAAM,CAAC,CAAC;IAClD,QAAQ,CAAC,KAAK,EAAE,aAAa,CAAC,qBAAqB,CAAC,CAAC;IACrD,QAAQ,CAAC,YAAY,EAAE,aAAa,CAAC,MAAM,CAAC,CAAC;CAC9C;AA6LD,MAAM,WAAW,iBAAiB;IAChC,UAAU,EAAE,qBAAqB,CAAC;IAClC,wEAAwE;IACxE,IAAI,EAAE,MAAM,CAAC;IACb,gFAAgF;IAChF,cAAc,CAAC,EAAE,aAAa,CAAC;QAAE,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACpD,mDAAmD;IACnD,YAAY,CAAC,EAAE,aAAa,CAAC,MAAM,CAAC,CAAC;IACrC,8CAA8C;IAC9C,eAAe,CAAC,EAAE,aAAa,CAAC;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACjF,mCAAmC;IACnC,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,wBAAgB,WAAW,CAAC,KAAK,EAAE,iBAAiB,GAAG,kBAAkB,CAiJxE;AAED,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,kBAAkB,GAAG,MAAM,CAoDxE;AAED,wBAAgB,yBAAyB,CAAC,MAAM,EAAE,kBAAkB,GAAG,MAAM,CAuC5E"}
|
package/dist/area-explore.js
CHANGED
|
@@ -246,7 +246,9 @@ export function exploreArea(input) {
|
|
|
246
246
|
kind: classifyFileKind(relPath),
|
|
247
247
|
});
|
|
248
248
|
}
|
|
249
|
-
|
|
249
|
+
// Secondary key makes the order TOTAL: same-size files near the cutoff would
|
|
250
|
+
// otherwise be ranked by filesystem order (non-deterministic).
|
|
251
|
+
files.sort((a, b) => b.sizeBytes - a.sizeBytes || a.relPath.localeCompare(b.relPath));
|
|
250
252
|
const areaMap = buildAreaMap(input.inspection);
|
|
251
253
|
const inferredKind = inferKindForPath(relPath, areaMap);
|
|
252
254
|
const role = describeRole(relPath, inferredKind);
|
|
@@ -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))
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"construct-inference.d.ts","sourceRoot":"","sources":["../src/construct-inference.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,2BAA2B,CAAC;AAGvE,eAAO,MAAM,0BAA0B,sCAAsC,CAAC;AAE9E,oBAAY,2BAA2B;IACrC,IAAI,SAAS;IACb,MAAM,WAAW;IACjB,GAAG,QAAQ;CACZ;AAED,MAAM,WAAW,uBAAuB;IACtC,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,kBAAkB;IACjC,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,2BAA2B,CAAC;IACxC,QAAQ,EAAE,SAAS,MAAM,EAAE,CAAC;IAC5B,KAAK,EAAE,SAAS,MAAM,EAAE,CAAC;IACzB,SAAS,EAAE,SAAS,MAAM,EAAE,CAAC;IAC7B,MAAM,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IAC3B,MAAM,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IAC3B,gBAAgB,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IACrC,gBAAgB,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IACrC,sBAAsB,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IAC3C,MAAM,CAAC,EAAE,SAAS,uBAAuB,EAAE,CAAC;IAC5C,sDAAsD;IACtD,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,wBAAwB;IACvC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,aAAa,CAAC,EAAE,2BAA2B,CAAC;IAC5C,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,yBAAyB;IACxC,MAAM,EAAE,OAAO,0BAA0B,CAAC;IAC1C,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,SAAS,kBAAkB,EAAE,CAAC;IAC1C,QAAQ,EAAE,SAAS,MAAM,EAAE,CAAC;CAC7B;AA0OD,wBAAsB,eAAe,CACnC,UAAU,EAAE,qBAAqB,EACjC,KAAK,GAAE,wBAA6B,GACnC,OAAO,CAAC,yBAAyB,CAAC,
|
|
1
|
+
{"version":3,"file":"construct-inference.d.ts","sourceRoot":"","sources":["../src/construct-inference.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,2BAA2B,CAAC;AAGvE,eAAO,MAAM,0BAA0B,sCAAsC,CAAC;AAE9E,oBAAY,2BAA2B;IACrC,IAAI,SAAS;IACb,MAAM,WAAW;IACjB,GAAG,QAAQ;CACZ;AAED,MAAM,WAAW,uBAAuB;IACtC,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,kBAAkB;IACjC,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,2BAA2B,CAAC;IACxC,QAAQ,EAAE,SAAS,MAAM,EAAE,CAAC;IAC5B,KAAK,EAAE,SAAS,MAAM,EAAE,CAAC;IACzB,SAAS,EAAE,SAAS,MAAM,EAAE,CAAC;IAC7B,MAAM,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IAC3B,MAAM,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IAC3B,gBAAgB,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IACrC,gBAAgB,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IACrC,sBAAsB,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IAC3C,MAAM,CAAC,EAAE,SAAS,uBAAuB,EAAE,CAAC;IAC5C,sDAAsD;IACtD,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,wBAAwB;IACvC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,aAAa,CAAC,EAAE,2BAA2B,CAAC;IAC5C,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,yBAAyB;IACxC,MAAM,EAAE,OAAO,0BAA0B,CAAC;IAC1C,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,SAAS,kBAAkB,EAAE,CAAC;IAC1C,QAAQ,EAAE,SAAS,MAAM,EAAE,CAAC;CAC7B;AA0OD,wBAAsB,eAAe,CACnC,UAAU,EAAE,qBAAqB,EACjC,KAAK,GAAE,wBAA6B,GACnC,OAAO,CAAC,yBAAyB,CAAC,CAyJpC;AAED,wBAAgB,2BAA2B,CACzC,MAAM,EAAE,yBAAyB,GAChC,MAAM,CAmBR"}
|
|
@@ -306,7 +306,9 @@ export async function inferConstructs(inspection, input = {}) {
|
|
|
306
306
|
}
|
|
307
307
|
// Pass 3: facet detection (events/tokens).
|
|
308
308
|
for (const b of builders.values()) {
|
|
309
|
-
|
|
309
|
+
// Sort before slicing: the files Set is in readdir order, so an unsorted
|
|
310
|
+
// first-8 would make the inferred events/tokens filesystem-order-dependent.
|
|
311
|
+
for (const f of [...b.files].sort().slice(0, 8)) {
|
|
310
312
|
const abs = nodePath.join(projectRoot, f);
|
|
311
313
|
const facets = scanFacets(abs);
|
|
312
314
|
for (const e of facets.events)
|
|
@@ -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)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"decision-records.d.ts","sourceRoot":"","sources":["../src/decision-records.ts"],"names":[],"mappings":"AAYA,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,2BAA2B,CAAC;AAGvE,eAAO,MAAM,sBAAsB,2BAA2B,CAAC;AAE/D,oBAAY,cAAc;IACxB,QAAQ,aAAa;IACrB,QAAQ,aAAa;IACrB,QAAQ,aAAa;IACrB,UAAU,eAAe;CAC1B;AAED,MAAM,WAAW,eAAe;IAC9B,MAAM,EAAE,OAAO,sBAAsB,CAAC;IACtC,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,cAAc,CAAC;IACvB,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY,EAAE,SAAS,MAAM,EAAE,CAAC;IAChC,eAAe,EAAE,SAAS,MAAM,EAAE,CAAC;IACnC,iBAAiB,EAAE,SAAS,MAAM,EAAE,CAAC;IACrC,YAAY,EAAE,SAAS,MAAM,EAAE,CAAC;IAChC,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,mBAAmB;IAClC,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,cAAc,CAAC;IACxB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,YAAY,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IACjC,eAAe,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IACpC,iBAAiB,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IACtC,YAAY,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IACjC,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AA8CD,wBAAgB,aAAa,CAAC,UAAU,EAAE,qBAAqB,GAAG,SAAS,eAAe,EAAE,
|
|
1
|
+
{"version":3,"file":"decision-records.d.ts","sourceRoot":"","sources":["../src/decision-records.ts"],"names":[],"mappings":"AAYA,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,2BAA2B,CAAC;AAGvE,eAAO,MAAM,sBAAsB,2BAA2B,CAAC;AAE/D,oBAAY,cAAc;IACxB,QAAQ,aAAa;IACrB,QAAQ,aAAa;IACrB,QAAQ,aAAa;IACrB,UAAU,eAAe;CAC1B;AAED,MAAM,WAAW,eAAe;IAC9B,MAAM,EAAE,OAAO,sBAAsB,CAAC;IACtC,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,cAAc,CAAC;IACvB,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY,EAAE,SAAS,MAAM,EAAE,CAAC;IAChC,eAAe,EAAE,SAAS,MAAM,EAAE,CAAC;IACnC,iBAAiB,EAAE,SAAS,MAAM,EAAE,CAAC;IACrC,YAAY,EAAE,SAAS,MAAM,EAAE,CAAC;IAChC,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,mBAAmB;IAClC,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,cAAc,CAAC;IACxB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,YAAY,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IACjC,eAAe,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IACpC,iBAAiB,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IACtC,YAAY,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IACjC,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AA8CD,wBAAgB,aAAa,CAAC,UAAU,EAAE,qBAAqB,GAAG,SAAS,eAAe,EAAE,CA2D3F;AA0BD;;;;GAIG;AACH,wBAAsB,eAAe,CACnC,UAAU,EAAE,qBAAqB,GAChC,OAAO,CAAC,SAAS,eAAe,EAAE,CAAC,CAuCrC;AAaD,wBAAgB,WAAW,CAAC,UAAU,EAAE,qBAAqB,EAAE,EAAE,EAAE,MAAM,GAAG,eAAe,GAAG,SAAS,CAEtG;AAED,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,mBAAmB,GAAG,MAAM,CA0CvE;AAED,wBAAgB,uBAAuB,CAAC,WAAW,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,GAAG,MAAM,CAE/E"}
|
package/dist/decision-records.js
CHANGED
|
@@ -79,7 +79,9 @@ export function listDecisions(inspection) {
|
|
|
79
79
|
continue;
|
|
80
80
|
let entries = [];
|
|
81
81
|
try {
|
|
82
|
-
|
|
82
|
+
// Sort so the decision-record list (and the doctor findings derived from
|
|
83
|
+
// it) is deterministic, not filesystem-order-dependent.
|
|
84
|
+
entries = readdirSync(dir).sort();
|
|
83
85
|
}
|
|
84
86
|
catch {
|
|
85
87
|
continue;
|
|
@@ -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";
|
package/dist/onboarding.js
CHANGED
|
@@ -614,7 +614,8 @@ function listSubDirs(projectRoot) {
|
|
|
614
614
|
try {
|
|
615
615
|
topLevel = readdirSync(projectRoot, { withFileTypes: true })
|
|
616
616
|
.filter((e) => e.isDirectory() && !IGNORE_DIRS.has(e.name))
|
|
617
|
-
.map((e) => e.name)
|
|
617
|
+
.map((e) => e.name)
|
|
618
|
+
.sort(); // readdir order is filesystem-dependent; sort so the monorepo summary is deterministic
|
|
618
619
|
}
|
|
619
620
|
catch {
|
|
620
621
|
return out;
|
|
@@ -624,7 +625,8 @@ function listSubDirs(projectRoot) {
|
|
|
624
625
|
const fullTop = nodePath.join(projectRoot, top);
|
|
625
626
|
const children = readdirSync(fullTop, { withFileTypes: true })
|
|
626
627
|
.filter((e) => e.isDirectory() && !IGNORE_DIRS.has(e.name))
|
|
627
|
-
.map((e) => e.name)
|
|
628
|
+
.map((e) => e.name)
|
|
629
|
+
.sort();
|
|
628
630
|
out.set(top, children);
|
|
629
631
|
}
|
|
630
632
|
catch {
|
|
@@ -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":"repo-memory.d.ts","sourceRoot":"","sources":["../src/repo-memory.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"repo-memory.d.ts","sourceRoot":"","sources":["../src/repo-memory.ts"],"names":[],"mappings":"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"}
|
package/dist/repo-memory.js
CHANGED
|
@@ -89,7 +89,9 @@ function walkJsonFiles(root) {
|
|
|
89
89
|
if (st.isDirectory()) {
|
|
90
90
|
let entries;
|
|
91
91
|
try {
|
|
92
|
-
|
|
92
|
+
// Sort the walk so `shrk memory` topFiles / riskyFilesByLanguage slices
|
|
93
|
+
// are deterministic, not filesystem-order-dependent.
|
|
94
|
+
entries = readdirSync(cur).sort();
|
|
93
95
|
}
|
|
94
96
|
catch {
|
|
95
97
|
continue;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"repository-intelligence.d.ts","sourceRoot":"","sources":["../src/repository-intelligence.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"repository-intelligence.d.ts","sourceRoot":"","sources":["../src/repository-intelligence.ts"],"names":[],"mappings":"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"}
|
|
@@ -71,7 +71,9 @@ function listPackages(projectRoot) {
|
|
|
71
71
|
const root = nodePath.join(projectRoot, top);
|
|
72
72
|
if (!existsSync(root))
|
|
73
73
|
continue;
|
|
74
|
-
|
|
74
|
+
// Sort so package iteration order (and therefore which packages' files land
|
|
75
|
+
// before FILES_CAP truncates) is deterministic, not filesystem-dependent.
|
|
76
|
+
for (const short of readdirSync(root).sort()) {
|
|
75
77
|
const dir = nodePath.join(root, short);
|
|
76
78
|
const pkgJson = nodePath.join(dir, 'package.json');
|
|
77
79
|
if (!existsSync(pkgJson))
|
|
@@ -106,7 +108,10 @@ function walkSourceFiles(packageDir, cap) {
|
|
|
106
108
|
const dir = stack.pop();
|
|
107
109
|
let entries = [];
|
|
108
110
|
try {
|
|
109
|
-
entries
|
|
111
|
+
// Sort entries so the capped walk selects the SAME files every run — the
|
|
112
|
+
// `out.length >= cap` early-break otherwise makes the selected set depend
|
|
113
|
+
// on filesystem order.
|
|
114
|
+
entries = readdirSync(dir).sort();
|
|
110
115
|
}
|
|
111
116
|
catch {
|
|
112
117
|
continue;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"repository-stats.d.ts","sourceRoot":"","sources":["../src/repository-stats.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAKH,eAAO,MAAM,uBAAuB,mCAAmC,CAAC;AAExE,MAAM,WAAW,wBAAwB;IACvC,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,SAAS,MAAM,EAAE,CAAC;IAC9B,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,MAAM,CAAC;IACnB,gBAAgB,EAAE,MAAM,CAAC;IACzB,gBAAgB,EAAE,MAAM,CAAC;IACzB,WAAW,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAAC;CACpE;AAED,MAAM,WAAW,uBAAuB;IACtC,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,sBAAsB;IACrC,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,gBAAgB;IAC/B,MAAM,EAAE,OAAO,uBAAuB,CAAC;IACvC,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,sBAAsB,CAAC;IAC/B,UAAU,EAAE,SAAS,wBAAwB,EAAE,CAAC;IAChD,QAAQ,EAAE,SAAS,uBAAuB,EAAE,CAAC;IAC7C,kBAAkB,EAAE,SAAS,MAAM,EAAE,CAAC;IACtC,SAAS,EAAE,OAAO,CAAC;CACpB;AAED,MAAM,WAAW,4BAA4B;IAC3C,GAAG,EAAE,MAAM,CAAC;IACZ,mDAAmD;IACnD,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,iDAAiD;IACjD,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,uDAAuD;IACvD,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;
|
|
1
|
+
{"version":3,"file":"repository-stats.d.ts","sourceRoot":"","sources":["../src/repository-stats.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAKH,eAAO,MAAM,uBAAuB,mCAAmC,CAAC;AAExE,MAAM,WAAW,wBAAwB;IACvC,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,SAAS,MAAM,EAAE,CAAC;IAC9B,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,MAAM,CAAC;IACnB,gBAAgB,EAAE,MAAM,CAAC;IACzB,gBAAgB,EAAE,MAAM,CAAC;IACzB,WAAW,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAAC;CACpE;AAED,MAAM,WAAW,uBAAuB;IACtC,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,sBAAsB;IACrC,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,gBAAgB;IAC/B,MAAM,EAAE,OAAO,uBAAuB,CAAC;IACvC,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,sBAAsB,CAAC;IAC/B,UAAU,EAAE,SAAS,wBAAwB,EAAE,CAAC;IAChD,QAAQ,EAAE,SAAS,uBAAuB,EAAE,CAAC;IAC7C,kBAAkB,EAAE,SAAS,MAAM,EAAE,CAAC;IACtC,SAAS,EAAE,OAAO,CAAC;CACpB;AAED,MAAM,WAAW,4BAA4B;IAC3C,GAAG,EAAE,MAAM,CAAC;IACZ,mDAAmD;IACnD,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,iDAAiD;IACjD,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,uDAAuD;IACvD,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAiPD,wBAAsB,oBAAoB,CACxC,IAAI,EAAE,4BAA4B,GACjC,OAAO,CAAC,gBAAgB,CAAC,CA8G3B"}
|
package/dist/repository-stats.js
CHANGED
|
@@ -115,7 +115,9 @@ function walkRepository(root, maxFiles) {
|
|
|
115
115
|
const cur = stack.pop();
|
|
116
116
|
let entries;
|
|
117
117
|
try {
|
|
118
|
-
|
|
118
|
+
// Sort the walk so `topFiles` (byte-tie order) and `byLanguage` (tie
|
|
119
|
+
// order) in `shrk stats` are deterministic, not filesystem-dependent.
|
|
120
|
+
entries = readdirSync(cur).sort();
|
|
119
121
|
}
|
|
120
122
|
catch {
|
|
121
123
|
continue;
|
|
@@ -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": {
|