@shrkcrft/inspector 0.1.0-alpha.18 → 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/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/git-helpers.d.ts +15 -0
- package/dist/git-helpers.d.ts.map +1 -1
- package/dist/git-helpers.js +41 -0
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -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/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/task-packet.d.ts.map +1 -1
- package/dist/task-packet.js +13 -1
- package/package.json +17 -17
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ai-readiness.d.ts","sourceRoot":"","sources":["../src/ai-readiness.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,2BAA2B,CAAC;
|
|
1
|
+
{"version":3,"file":"ai-readiness.d.ts","sourceRoot":"","sources":["../src/ai-readiness.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,2BAA2B,CAAC;AAYvE;;;;;;;;;;;;;GAaG;AACH,MAAM,MAAM,kBAAkB,GAAG,MAAM,GAAG,UAAU,GAAG,eAAe,CAAC;AAEvE,MAAM,WAAW,mBAAmB;IAClC,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,kBAAkB;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,8FAA8F;IAC9F,MAAM,EAAE,MAAM,CAAC;IACf,2CAA2C;IAC3C,IAAI,EAAE,MAAM,CAAC;IACb,iEAAiE;IACjE,OAAO,EAAE,kBAAkB,CAAC;IAC5B,4EAA4E;IAC5E,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,MAAM,cAAc,GAAG,WAAW,GAAG,MAAM,GAAG,SAAS,GAAG,MAAM,CAAC;AAEvE;;;;GAIG;AACH,MAAM,WAAW,kBAAkB;IACjC,4DAA4D;IAC5D,mBAAmB,EAAE,OAAO,CAAC;IAC7B,qEAAqE;IACrE,kBAAkB,EAAE,OAAO,CAAC;IAC5B,sDAAsD;IACtD,QAAQ,EAAE,SAAS,MAAM,EAAE,CAAC;CAC7B;AAED,MAAM,WAAW,gBAAgB;IAC/B,8DAA8D;IAC9D,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,cAAc,CAAC;IACtB,UAAU,EAAE,mBAAmB,EAAE,CAAC;IAClC,8EAA8E;IAC9E,kBAAkB,EAAE,MAAM,EAAE,CAAC;IAC7B,mEAAmE;IACnE,QAAQ,EAAE,kBAAkB,CAAC;IAC7B,wEAAwE;IACxE,cAAc,EAAE,eAAe,CAAC;CACjC;AAED;;;GAGG;AACH,MAAM,WAAW,eAAe;IAC9B,qDAAqD;IACrD,KAAK,EAAE,MAAM,CAAC;IACd,8EAA8E;IAC9E,SAAS,EAAE,OAAO,CAAC;IACnB,oEAAoE;IACpE,SAAS,EAAE,OAAO,CAAC;IACnB,8EAA8E;IAC9E,UAAU,EAAE,OAAO,CAAC;IACpB,wHAAwH;IACxH,aAAa,EAAE,OAAO,CAAC;CACxB;AAyED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AACH,wBAAgB,sBAAsB,CAAC,UAAU,EAAE,qBAAqB,GAAG,gBAAgB,CAwV1F"}
|
package/dist/ai-readiness.js
CHANGED
|
@@ -2,6 +2,13 @@ import { KnowledgeType, hasActionHints } from '@shrkcrft/knowledge';
|
|
|
2
2
|
import { WorkspaceProfile } from '@shrkcrft/workspace';
|
|
3
3
|
import { diagnoseActionHints } from "./action-hint-diagnostics.js";
|
|
4
4
|
import { runDoctor } from "./sharkcraft-inspector.js";
|
|
5
|
+
/**
|
|
6
|
+
* Entry types that describe a *location* or a *fact* rather than an action, so
|
|
7
|
+
* they are not expected to carry actionHints and are excluded from the
|
|
8
|
+
* action-hint coverage metric. Mirrors the skip set in
|
|
9
|
+
* `action-hint-diagnostics.ts` (keep the two in sync).
|
|
10
|
+
*/
|
|
11
|
+
const HINT_EXEMPT_TYPES = new Set(['path', 'overview', 'technical']);
|
|
5
12
|
function gradeOf(score) {
|
|
6
13
|
if (score >= 85)
|
|
7
14
|
return 'excellent';
|
|
@@ -217,19 +224,27 @@ export function buildAiReadinessReport(inspection) {
|
|
|
217
224
|
});
|
|
218
225
|
// No recommendation when pipelines is advisory — the old "add a pipeline"
|
|
219
226
|
// exhortation fired on libraries it shouldn't have.
|
|
220
|
-
// 7) Action-hint coverage — fraction of entries that carry
|
|
221
|
-
|
|
222
|
-
|
|
227
|
+
// 7) Action-hint coverage — fraction of HINT-ELIGIBLE entries that carry
|
|
228
|
+
// hints. Path / overview / technical entries describe a location or a fact
|
|
229
|
+
// rather than an action, so the action-hint quality doctor deliberately
|
|
230
|
+
// doesn't grade them (see action-hint-diagnostics). Counting them in the
|
|
231
|
+
// denominator penalised the score for structural non-gaps — an entry that
|
|
232
|
+
// *can't* meaningfully carry action hints isn't a missing one — so they are
|
|
233
|
+
// excluded from both numerator and denominator here too.
|
|
234
|
+
const hintEligible = inspection.knowledgeEntries.filter((e) => !HINT_EXEMPT_TYPES.has(String(e.type).toLowerCase()));
|
|
235
|
+
const eligibleCount = hintEligible.length;
|
|
236
|
+
const withHints = hintEligible.filter((e) => hasActionHints(e)).length;
|
|
237
|
+
const hintsScore = eligibleCount === 0 ? 0 : Math.min(10, Math.round((withHints / eligibleCount) * 20));
|
|
223
238
|
dims.push({
|
|
224
239
|
id: 'action-hints',
|
|
225
240
|
title: 'Entries with action hints',
|
|
226
241
|
weight: 1.2,
|
|
227
242
|
score: hintsScore,
|
|
228
|
-
note: `${withHints} of ${
|
|
243
|
+
note: `${withHints} of ${eligibleCount} hint-eligible entries carry actionHints`,
|
|
229
244
|
applies: 'core',
|
|
230
245
|
});
|
|
231
246
|
if (hintsScore < 7)
|
|
232
|
-
recs.push('Add actionHints to high-priority
|
|
247
|
+
recs.push('Add actionHints to high-priority entries (commands, mcpTools, forbiddenActions, relatedKnowledge).');
|
|
233
248
|
// 8) Verification commands
|
|
234
249
|
const haveVerify = inspection.knowledgeEntries.some((e) => (e.actionHints?.verificationCommands?.length ?? 0) > 0);
|
|
235
250
|
dims.push({
|
|
@@ -54,6 +54,13 @@ export declare function planChangedPreflight(options: {
|
|
|
54
54
|
readonly projectRoot: string;
|
|
55
55
|
readonly changedFiles: ReadonlyArray<string>;
|
|
56
56
|
readonly profile?: PreflightProfile;
|
|
57
|
+
/** Override the test gate command (defaults to `bun test`). Grounded in the
|
|
58
|
+
* project's declared verification commands by the CLI caller. */
|
|
59
|
+
readonly testCommand?: string;
|
|
60
|
+
/** Override the typecheck gate command (defaults to the base-tsconfig run). */
|
|
61
|
+
readonly typecheckCommand?: string;
|
|
62
|
+
/** Extra path prefixes that count as engine source (e.g. config-declared). */
|
|
63
|
+
readonly sourceGlobs?: readonly string[];
|
|
57
64
|
}): IChangedPreflightPlan;
|
|
58
65
|
export declare function renderChangedPreflightText(plan: IChangedPreflightPlan): string;
|
|
59
66
|
//# sourceMappingURL=changed-preflight.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"changed-preflight.d.ts","sourceRoot":"","sources":["../src/changed-preflight.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"changed-preflight.d.ts","sourceRoot":"","sources":["../src/changed-preflight.ts"],"names":[],"mappings":"AAgBA,eAAO,MAAM,wBAAwB,oCAAoC,CAAC;AA6B1E,oBAAY,gBAAgB;IAC1B,KAAK,UAAU;IACf,QAAQ,aAAa;IACrB,MAAM,WAAW;CAClB;AAED,oBAAY,eAAe;IACzB,GAAG,QAAQ;IACX,IAAI,SAAS;IACb,SAAS,cAAc;CACxB;AAED,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,MAAM,EAAE,eAAe,CAAC;IACjC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,kFAAkF;IAClF,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;CAC3B;AAED,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,MAAM,EAAE,IAAI,GAAG,WAAW,CAAC;IACpC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;CAC1B;AAED,MAAM,WAAW,qBAAqB;IACpC,QAAQ,CAAC,MAAM,EAAE,OAAO,wBAAwB,CAAC;IACjD,QAAQ,CAAC,OAAO,EAAE,gBAAgB,CAAC;IACnC,QAAQ,CAAC,YAAY,EAAE,aAAa,CAAC,MAAM,CAAC,CAAC;IAC7C,QAAQ,CAAC,eAAe,EAAE,2BAA2B,CAAC;IACtD,QAAQ,CAAC,KAAK,EAAE,aAAa,CAAC,cAAc,CAAC,CAAC;IAC9C,QAAQ,CAAC,OAAO,EAAE,iBAAiB,CAAC;IACpC,QAAQ,CAAC,YAAY,EAAE,aAAa,CAAC,MAAM,CAAC,CAAC;CAC9C;AAED,MAAM,WAAW,2BAA2B;IAC1C,QAAQ,CAAC,eAAe,EAAE,OAAO,CAAC;IAClC,QAAQ,CAAC,WAAW,EAAE,OAAO,CAAC;IAC9B,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC;IAC3B,QAAQ,CAAC,mBAAmB,EAAE,OAAO,CAAC;IACtC,QAAQ,CAAC,gBAAgB,EAAE,OAAO,CAAC;IACnC,QAAQ,CAAC,cAAc,EAAE,OAAO,CAAC;IACjC,QAAQ,CAAC,mBAAmB,EAAE,OAAO,CAAC;IACtC,QAAQ,CAAC,aAAa,EAAE,OAAO,CAAC;IAChC,QAAQ,CAAC,aAAa,EAAE,OAAO,CAAC;IAChC,QAAQ,CAAC,cAAc,EAAE,OAAO,CAAC;IACjC,QAAQ,CAAC,eAAe,EAAE,OAAO,CAAC;CACnC;AA+DD;;;;;GAKG;AACH,wBAAgB,oBAAoB,CAAC,OAAO,EAAE;IAC5C,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,YAAY,EAAE,aAAa,CAAC,MAAM,CAAC,CAAC;IAC7C,QAAQ,CAAC,OAAO,CAAC,EAAE,gBAAgB,CAAC;IACpC;sEACkE;IAClE,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAC9B,+EAA+E;IAC/E,QAAQ,CAAC,gBAAgB,CAAC,EAAE,MAAM,CAAC;IACnC,8EAA8E;IAC9E,QAAQ,CAAC,WAAW,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;CAC1C,GAAG,qBAAqB,CAmRxB;AAED,wBAAgB,0BAA0B,CAAC,IAAI,EAAE,qBAAqB,GAAG,MAAM,CAiB9E"}
|
|
@@ -11,8 +11,37 @@
|
|
|
11
11
|
* planner is intentionally conservative: a gate's `skip` decision is always
|
|
12
12
|
* accompanied by a reason so the operator can see what was elided.
|
|
13
13
|
*/
|
|
14
|
+
import { existsSync, readFileSync } from 'node:fs';
|
|
14
15
|
import * as nodePath from 'node:path';
|
|
15
16
|
export const CHANGED_PREFLIGHT_SCHEMA = 'sharkcraft.changed-preflight/v1';
|
|
17
|
+
/**
|
|
18
|
+
* Cheap, best-effort probe: does this look like a generic JS/TS monorepo
|
|
19
|
+
* (nx / pnpm workspaces / package.json workspaces / apps+libs)? Used to widen
|
|
20
|
+
* the "engine source changed" detection beyond SharkCraft's own
|
|
21
|
+
* `packages/<package-name>/src/` layout. A couple of stat calls — no full inspect.
|
|
22
|
+
*/
|
|
23
|
+
function isMonorepoLike(projectRoot) {
|
|
24
|
+
try {
|
|
25
|
+
if (existsSync(nodePath.join(projectRoot, 'nx.json')))
|
|
26
|
+
return true;
|
|
27
|
+
if (existsSync(nodePath.join(projectRoot, 'pnpm-workspace.yaml')))
|
|
28
|
+
return true;
|
|
29
|
+
if (existsSync(nodePath.join(projectRoot, 'apps')) ||
|
|
30
|
+
existsSync(nodePath.join(projectRoot, 'libs'))) {
|
|
31
|
+
return true;
|
|
32
|
+
}
|
|
33
|
+
const pkgPath = nodePath.join(projectRoot, 'package.json');
|
|
34
|
+
if (existsSync(pkgPath)) {
|
|
35
|
+
const pkg = JSON.parse(readFileSync(pkgPath, 'utf8'));
|
|
36
|
+
if (pkg.workspaces)
|
|
37
|
+
return true;
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
catch {
|
|
41
|
+
// Best-effort: treat any read/parse failure as "not obviously a monorepo".
|
|
42
|
+
}
|
|
43
|
+
return false;
|
|
44
|
+
}
|
|
16
45
|
export var PreflightProfile;
|
|
17
46
|
(function (PreflightProfile) {
|
|
18
47
|
PreflightProfile["Quick"] = "quick";
|
|
@@ -25,10 +54,23 @@ export var PreflightAction;
|
|
|
25
54
|
PreflightAction["Skip"] = "skip";
|
|
26
55
|
PreflightAction["Recommend"] = "recommend";
|
|
27
56
|
})(PreflightAction || (PreflightAction = {}));
|
|
28
|
-
function classifyChangedFiles(files) {
|
|
57
|
+
function classifyChangedFiles(files, opts = {}) {
|
|
29
58
|
const norm = files.map((f) => f.replace(/\\/g, '/'));
|
|
30
59
|
const match = (re) => norm.some((p) => re.test(p));
|
|
31
|
-
|
|
60
|
+
let anyEngineSource = match(/^packages\/[^/]+\/src\//);
|
|
61
|
+
// Monorepo-aware: on an nx / workspaces / apps+libs repo, source also lives
|
|
62
|
+
// under apps/*/src, libs/*/src, or a project-root src/ — not only
|
|
63
|
+
// SharkCraft's own packages/*/src/. Without this, a large nx change is
|
|
64
|
+
// misclassified as "no engine src changed" and every src-sensitive gate is
|
|
65
|
+
// skipped. Only widen when a monorepo signal is present, so this repo's own
|
|
66
|
+
// classification is unchanged.
|
|
67
|
+
if (!anyEngineSource && opts.projectRoot && isMonorepoLike(opts.projectRoot)) {
|
|
68
|
+
anyEngineSource = match(/^(apps|libs|packages)\/[^/]+\/(src|lib)\//) || match(/^src\//);
|
|
69
|
+
}
|
|
70
|
+
// Caller-supplied source roots (e.g. derived from config) always count.
|
|
71
|
+
if (!anyEngineSource && opts.sourceGlobs?.length) {
|
|
72
|
+
anyEngineSource = norm.some((p) => opts.sourceGlobs.some((g) => p.startsWith(g)));
|
|
73
|
+
}
|
|
32
74
|
const anyPackages = match(/^packages\//);
|
|
33
75
|
const anyTests = match(/__tests__\/|\.test\.ts$|e2e\//);
|
|
34
76
|
const anySharkcraftAssets = match(/^sharkcraft\//);
|
|
@@ -71,7 +113,12 @@ function classifyChangedFiles(files) {
|
|
|
71
113
|
*/
|
|
72
114
|
export function planChangedPreflight(options) {
|
|
73
115
|
const profile = options.profile ?? PreflightProfile.Standard;
|
|
74
|
-
const cls = classifyChangedFiles(options.changedFiles
|
|
116
|
+
const cls = classifyChangedFiles(options.changedFiles, {
|
|
117
|
+
projectRoot: options.projectRoot,
|
|
118
|
+
...(options.sourceGlobs ? { sourceGlobs: options.sourceGlobs } : {}),
|
|
119
|
+
});
|
|
120
|
+
const testCmd = options.testCommand ?? 'bun test';
|
|
121
|
+
const typecheckCmd = options.typecheckCommand ?? 'bun x tsc -p tsconfig.base.json --noEmit';
|
|
75
122
|
const explanations = [];
|
|
76
123
|
const gates = [];
|
|
77
124
|
// 1) Boundary check — needed when engine src changed.
|
|
@@ -249,7 +296,7 @@ export function planChangedPreflight(options) {
|
|
|
249
296
|
gates.push({
|
|
250
297
|
id: 'tests',
|
|
251
298
|
title: 'Bun test suite (focused subset where possible)',
|
|
252
|
-
command:
|
|
299
|
+
command: testCmd,
|
|
253
300
|
action: PreflightAction.Run,
|
|
254
301
|
reason: 'strict profile + engine src changed',
|
|
255
302
|
canFail: false,
|
|
@@ -259,7 +306,7 @@ export function planChangedPreflight(options) {
|
|
|
259
306
|
gates.push({
|
|
260
307
|
id: 'tests',
|
|
261
308
|
title: 'Bun test suite',
|
|
262
|
-
command:
|
|
309
|
+
command: testCmd,
|
|
263
310
|
action: PreflightAction.Recommend,
|
|
264
311
|
reason: 'engine src or tests changed; full suite not auto-run',
|
|
265
312
|
canFail: true,
|
|
@@ -269,7 +316,7 @@ export function planChangedPreflight(options) {
|
|
|
269
316
|
gates.push({
|
|
270
317
|
id: 'tests',
|
|
271
318
|
title: 'Bun test suite',
|
|
272
|
-
command:
|
|
319
|
+
command: testCmd,
|
|
273
320
|
action: PreflightAction.Skip,
|
|
274
321
|
reason: 'no engine src or test changes',
|
|
275
322
|
canFail: true,
|
|
@@ -281,7 +328,7 @@ export function planChangedPreflight(options) {
|
|
|
281
328
|
gates.push({
|
|
282
329
|
id: 'typecheck',
|
|
283
330
|
title: 'TypeScript --noEmit',
|
|
284
|
-
command:
|
|
331
|
+
command: typecheckCmd,
|
|
285
332
|
action: PreflightAction.Recommend,
|
|
286
333
|
reason: 'engine src changed; not auto-run on quick profile',
|
|
287
334
|
canFail: true,
|
|
@@ -291,7 +338,7 @@ export function planChangedPreflight(options) {
|
|
|
291
338
|
gates.push({
|
|
292
339
|
id: 'typecheck',
|
|
293
340
|
title: 'TypeScript --noEmit',
|
|
294
|
-
command:
|
|
341
|
+
command: typecheckCmd,
|
|
295
342
|
action: PreflightAction.Run,
|
|
296
343
|
reason: 'engine src changed',
|
|
297
344
|
canFail: false,
|
|
@@ -302,7 +349,7 @@ export function planChangedPreflight(options) {
|
|
|
302
349
|
gates.push({
|
|
303
350
|
id: 'typecheck',
|
|
304
351
|
title: 'TypeScript --noEmit',
|
|
305
|
-
command:
|
|
352
|
+
command: typecheckCmd,
|
|
306
353
|
action: PreflightAction.Skip,
|
|
307
354
|
reason: 'no engine src changed',
|
|
308
355
|
canFail: true,
|
package/dist/git-helpers.d.ts
CHANGED
|
@@ -22,5 +22,20 @@ export declare function getGitRoot(cwd: string): string | null;
|
|
|
22
22
|
export declare function getGitBranch(cwd: string): string | null;
|
|
23
23
|
export declare function getChangedFiles(cwd: string, opts?: IGitChangedOptions): string[];
|
|
24
24
|
export declare function getStatusSummary(cwd: string): IGitStatusSummary;
|
|
25
|
+
export interface ICommitInfo {
|
|
26
|
+
readonly hash: string;
|
|
27
|
+
readonly shortHash: string;
|
|
28
|
+
readonly subject: string;
|
|
29
|
+
readonly files: readonly string[];
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Commit subjects (and the files each touched) in the range `<since>..HEAD`,
|
|
33
|
+
* newest first. Deterministic (git only; no model). Returns [] outside a git
|
|
34
|
+
* repo or on any git error. Used by `knowledge propose` to annotate drafted
|
|
35
|
+
* entries with the commit that surfaced them ("why this entry now").
|
|
36
|
+
*/
|
|
37
|
+
export declare function getCommitSubjects(cwd: string, opts: {
|
|
38
|
+
since: string;
|
|
39
|
+
}): ICommitInfo[];
|
|
25
40
|
export declare function parseLines(text: string): string[];
|
|
26
41
|
//# sourceMappingURL=git-helpers.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"git-helpers.d.ts","sourceRoot":"","sources":["../src/git-helpers.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,kBAAkB;IACjC,mEAAmE;IACnE,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,8CAA8C;IAC9C,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,gEAAgE;IAChE,eAAe,CAAC,EAAE,OAAO,CAAC;CAC3B;AAED,MAAM,WAAW,iBAAiB;IAChC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IACpB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,OAAO,CAAC;CAChB;AAWD,wBAAgB,SAAS,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAI9C;AAED,wBAAgB,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAKrD;AAED,wBAAgB,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAKvD;AAED,wBAAgB,eAAe,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,GAAE,kBAAuB,GAAG,MAAM,EAAE,CAkBpF;AAED,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,MAAM,GAAG,iBAAiB,CAyC/D;AAED,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE,CAKjD"}
|
|
1
|
+
{"version":3,"file":"git-helpers.d.ts","sourceRoot":"","sources":["../src/git-helpers.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,kBAAkB;IACjC,mEAAmE;IACnE,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,8CAA8C;IAC9C,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,gEAAgE;IAChE,eAAe,CAAC,EAAE,OAAO,CAAC;CAC3B;AAED,MAAM,WAAW,iBAAiB;IAChC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IACpB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,OAAO,CAAC;CAChB;AAWD,wBAAgB,SAAS,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAI9C;AAED,wBAAgB,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAKrD;AAED,wBAAgB,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAKvD;AAED,wBAAgB,eAAe,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,GAAE,kBAAuB,GAAG,MAAM,EAAE,CAkBpF;AAED,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,MAAM,GAAG,iBAAiB,CAyC/D;AAED,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,KAAK,EAAE,SAAS,MAAM,EAAE,CAAC;CACnC;AAED;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE;IAAE,KAAK,EAAE,MAAM,CAAA;CAAE,GAAG,WAAW,EAAE,CA6BrF;AAED,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE,CAKjD"}
|
package/dist/git-helpers.js
CHANGED
|
@@ -102,6 +102,47 @@ export function getStatusSummary(cwd) {
|
|
|
102
102
|
out.staged === 0 && out.modified === 0 && out.untracked === 0 && out.conflicts === 0;
|
|
103
103
|
return out;
|
|
104
104
|
}
|
|
105
|
+
/**
|
|
106
|
+
* Commit subjects (and the files each touched) in the range `<since>..HEAD`,
|
|
107
|
+
* newest first. Deterministic (git only; no model). Returns [] outside a git
|
|
108
|
+
* repo or on any git error. Used by `knowledge propose` to annotate drafted
|
|
109
|
+
* entries with the commit that surfaced them ("why this entry now").
|
|
110
|
+
*/
|
|
111
|
+
export function getCommitSubjects(cwd, opts) {
|
|
112
|
+
if (!isGitRepo(cwd))
|
|
113
|
+
return [];
|
|
114
|
+
const range = `${opts.since}..HEAD`;
|
|
115
|
+
// NUL-delimited records: \0<hash>\t<subject> then one file path per line.
|
|
116
|
+
const r = runGit(cwd, [
|
|
117
|
+
'log',
|
|
118
|
+
'--no-merges',
|
|
119
|
+
'--name-only',
|
|
120
|
+
'--pretty=format:%x00%H%x09%s',
|
|
121
|
+
range,
|
|
122
|
+
]);
|
|
123
|
+
if (!r.ok)
|
|
124
|
+
return [];
|
|
125
|
+
const out = [];
|
|
126
|
+
for (const chunk of r.stdout.split('\0')) {
|
|
127
|
+
if (!chunk.trim())
|
|
128
|
+
continue;
|
|
129
|
+
const lines = chunk.split('\n');
|
|
130
|
+
const header = lines[0] ?? '';
|
|
131
|
+
const tab = header.indexOf('\t');
|
|
132
|
+
if (tab < 0)
|
|
133
|
+
continue;
|
|
134
|
+
const hash = header.slice(0, tab).trim();
|
|
135
|
+
if (!hash)
|
|
136
|
+
continue;
|
|
137
|
+
const subject = header.slice(tab + 1).trim();
|
|
138
|
+
const files = lines
|
|
139
|
+
.slice(1)
|
|
140
|
+
.map((l) => l.trim())
|
|
141
|
+
.filter((l) => l.length > 0);
|
|
142
|
+
out.push({ hash, shortHash: hash.slice(0, 8), subject, files });
|
|
143
|
+
}
|
|
144
|
+
return out;
|
|
145
|
+
}
|
|
105
146
|
export function parseLines(text) {
|
|
106
147
|
return text
|
|
107
148
|
.split('\n')
|
package/dist/index.d.ts
CHANGED
|
@@ -9,6 +9,7 @@ export * from './action-hint-diagnostics.js';
|
|
|
9
9
|
export * from './ai-readiness.js';
|
|
10
10
|
export * from './pack-doctor.js';
|
|
11
11
|
export * from './task-packet.js';
|
|
12
|
+
export * from './resolve-verification-commands.js';
|
|
12
13
|
export * from './reference-lookup.js';
|
|
13
14
|
export * from './task-ranker.js';
|
|
14
15
|
export * from './drift.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":"AAAA,cAAc,oBAAoB,CAAC;AACnC,cAAc,+BAA+B,CAAC;AAC9C,cAAc,uBAAuB,CAAC;AACtC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,sBAAsB,CAAC;AACrC,cAAc,yBAAyB,CAAC;AACxC,cAAc,yBAAyB,CAAC;AACxC,cAAc,8BAA8B,CAAC;AAC7C,cAAc,mBAAmB,CAAC;AAClC,cAAc,kBAAkB,CAAC;AACjC,cAAc,kBAAkB,CAAC;AACjC,cAAc,oCAAoC,CAAC;AACnD,cAAc,uBAAuB,CAAC;AACtC,cAAc,kBAAkB,CAAC;AACjC,cAAc,YAAY,CAAC;AAC3B,cAAc,sBAAsB,CAAC;AACrC,cAAc,wBAAwB,CAAC;AACvC,cAAc,aAAa,CAAC;AAC5B,cAAc,6BAA6B,CAAC;AAC5C,cAAc,sBAAsB,CAAC;AACrC,cAAc,oBAAoB,CAAC;AACnC,cAAc,uBAAuB,CAAC;AACtC,cAAc,kBAAkB,CAAC;AACjC,cAAc,kBAAkB,CAAC;AACjC,cAAc,iBAAiB,CAAC;AAChC,cAAc,wBAAwB,CAAC;AACvC,cAAc,iCAAiC,CAAC;AAChD,cAAc,wBAAwB,CAAC;AACvC,cAAc,sBAAsB,CAAC;AACrC,cAAc,0BAA0B,CAAC;AACzC,cAAc,qBAAqB,CAAC;AACpC,cAAc,yBAAyB,CAAC;AACxC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,+BAA+B,CAAC;AAC9C,cAAc,qBAAqB,CAAC;AACpC,cAAc,qBAAqB,CAAC;AACpC,cAAc,mBAAmB,CAAC;AAClC,cAAc,8BAA8B,CAAC;AAC7C,cAAc,0BAA0B,CAAC;AACzC,cAAc,8BAA8B,CAAC;AAC7C,cAAc,iCAAiC,CAAC;AAChD,cAAc,wBAAwB,CAAC;AACvC,cAAc,mBAAmB,CAAC;AAClC,cAAc,kBAAkB,CAAC;AACjC,cAAc,kBAAkB,CAAC;AACjC,cAAc,8BAA8B,CAAC;AAC7C,cAAc,kBAAkB,CAAC;AACjC,cAAc,yBAAyB,CAAC;AACxC,cAAc,uBAAuB,CAAC;AACtC,cAAc,+BAA+B,CAAC;AAC9C,cAAc,oCAAoC,CAAC;AACnD,cAAc,kBAAkB,CAAC;AACjC,cAAc,8BAA8B,CAAC;AAC7C,cAAc,sBAAsB,CAAC;AACrC,cAAc,qBAAqB,CAAC;AACpC,cAAc,uBAAuB,CAAC;AACtC,cAAc,yBAAyB,CAAC;AACxC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,eAAe,CAAC;AAC9B,cAAc,qBAAqB,CAAC;AACpC,cAAc,qBAAqB,CAAC;AACpC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,sBAAsB,CAAC;AACrC,cAAc,kBAAkB,CAAC;AACjC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,oBAAoB,CAAC;AACnC,cAAc,uBAAuB,CAAC;AACtC,cAAc,qBAAqB,CAAC;AACpC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,2BAA2B,CAAC;AAC1C,cAAc,oBAAoB,CAAC;AACnC,cAAc,oBAAoB,CAAC;AACnC,cAAc,yBAAyB,CAAC;AACxC,cAAc,yBAAyB,CAAC;AACxC,cAAc,yBAAyB,CAAC;AACxC,cAAc,oBAAoB,CAAC;AACnC,cAAc,uBAAuB,CAAC;AACtC,cAAc,wBAAwB,CAAC;AACvC,cAAc,uBAAuB,CAAC;AACtC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,kBAAkB,CAAC;AACjC,cAAc,yBAAyB,CAAC;AACxC,cAAc,0BAA0B,CAAC;AACzC,cAAc,yBAAyB,CAAC;AACxC,cAAc,8BAA8B,CAAC;AAC7C,cAAc,+BAA+B,CAAC;AAC9C,cAAc,0BAA0B,CAAC;AACzC,cAAc,kBAAkB,CAAC;AACjC,cAAc,qBAAqB,CAAC;AACpC,cAAc,kBAAkB,CAAC;AACjC,cAAc,oBAAoB,CAAC;AACnC,cAAc,mBAAmB,CAAC;AAClC,cAAc,wBAAwB,CAAC;AACvC,cAAc,yBAAyB,CAAC;AACxC,cAAc,wBAAwB,CAAC;AACvC,cAAc,sBAAsB,CAAC;AACrC,cAAc,mBAAmB,CAAC;AAClC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,4BAA4B,CAAC;AAC3C,cAAc,kBAAkB,CAAC;AACjC,cAAc,oBAAoB,CAAC;AACnC,cAAc,kBAAkB,CAAC;AACjC,cAAc,oBAAoB,CAAC;AACnC,cAAc,mBAAmB,CAAC;AAClC,cAAc,0BAA0B,CAAC;AACzC,cAAc,kBAAkB,CAAC;AACjC,cAAc,yBAAyB,CAAC;AACxC,cAAc,iBAAiB,CAAC;AAChC,cAAc,oBAAoB,CAAC;AACnC,cAAc,qBAAqB,CAAC;AACpC,cAAc,uBAAuB,CAAC;AACtC,cAAc,iBAAiB,CAAC;AAChC,cAAc,qBAAqB,CAAC;AACpC,cAAc,0BAA0B,CAAC;AACzC,cAAc,oBAAoB,CAAC;AACnC,cAAc,oBAAoB,CAAC;AACnC,cAAc,iBAAiB,CAAC;AAChC,cAAc,oBAAoB,CAAC;AACnC,cAAc,8BAA8B,CAAC;AAC7C,cAAc,uBAAuB,CAAC;AACtC,cAAc,0BAA0B,CAAC;AACzC,cAAc,0BAA0B,CAAC;AACzC,cAAc,uBAAuB,CAAC;AACtC,cAAc,0BAA0B,CAAC;AACzC,cAAc,uBAAuB,CAAC;AACtC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,cAAc,CAAC;AAC7B,cAAc,iBAAiB,CAAC;AAChC,cAAc,0BAA0B,CAAC;AACzC,cAAc,0BAA0B,CAAC;AACzC,cAAc,uBAAuB,CAAC;AACtC,cAAc,oBAAoB,CAAC;AACnC,cAAc,oBAAoB,CAAC;AACnC,cAAc,sBAAsB,CAAC;AACrC,cAAc,wBAAwB,CAAC;AACvC,cAAc,iBAAiB,CAAC;AAChC,cAAc,mBAAmB,CAAC;AAClC,cAAc,0BAA0B,CAAC;AACzC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,uBAAuB,CAAC;AACtC,cAAc,wBAAwB,CAAC;AACvC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,0BAA0B,CAAC;AACzC,cAAc,yBAAyB,CAAC;AACxC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,uBAAuB,CAAC;AACtC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,sBAAsB,CAAC;AACrC,cAAc,qBAAqB,CAAC;AACpC,cAAc,sBAAsB,CAAC;AACrC,cAAc,kBAAkB,CAAC;AACjC,cAAc,mBAAmB,CAAC;AAClC,cAAc,sBAAsB,CAAC;AACrC,cAAc,0BAA0B,CAAC;AACzC,cAAc,wBAAwB,CAAC;AACvC,cAAc,kBAAkB,CAAC;AACjC,cAAc,+BAA+B,CAAC;AAC9C,cAAc,sBAAsB,CAAC;AACrC,cAAc,qBAAqB,CAAC;AACpC,cAAc,qBAAqB,CAAC;AACpC,cAAc,oBAAoB,CAAC;AACnC,cAAc,iCAAiC,CAAC;AAChD,cAAc,oBAAoB,CAAC;AACnC,cAAc,sBAAsB,CAAC;AACrC,cAAc,mBAAmB,CAAC;AAClC,cAAc,oBAAoB,CAAC;AACnC,cAAc,0BAA0B,CAAC;AACzC,cAAc,sBAAsB,CAAC;AACrC,cAAc,uBAAuB,CAAC;AACtC,cAAc,qBAAqB,CAAC;AACpC,cAAc,wBAAwB,CAAC;AACvC,cAAc,qBAAqB,CAAC;AACpC,cAAc,yBAAyB,CAAC;AACxC,cAAc,mBAAmB,CAAC;AAClC,cAAc,mBAAmB,CAAC;AAClC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,wBAAwB,CAAC;AACvC,cAAc,kBAAkB,CAAC;AACjC,cAAc,wBAAwB,CAAC;AACvC,cAAc,sBAAsB,CAAC;AACrC,cAAc,iBAAiB,CAAC;AAChC,cAAc,0BAA0B,CAAC;AACzC,cAAc,kBAAkB,CAAC;AACjC,cAAc,iCAAiC,CAAC;AAChD,cAAc,iCAAiC,CAAC;AAChD,cAAc,uBAAuB,CAAC;AACtC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,mCAAmC,CAAC;AAClD,cAAc,0BAA0B,CAAC;AACzC,cAAc,yBAAyB,CAAC;AAExC,cAAc,4BAA4B,CAAC;AAE3C,cAAc,8BAA8B,CAAC;AAE7C,cAAc,2BAA2B,CAAC;AAE1C,cAAc,wBAAwB,CAAC;AAEvC,cAAc,wBAAwB,CAAC;AACvC,cAAc,uBAAuB,CAAC;AACtC,cAAc,mBAAmB,CAAC;AAClC,cAAc,wBAAwB,CAAC;AACvC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,iCAAiC,CAAC;AAChD,cAAc,iCAAiC,CAAC;AAChD,cAAc,qBAAqB,CAAC;AACpC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,iBAAiB,CAAC;AAChC,cAAc,4BAA4B,CAAC;AAE3C,cAAc,iBAAiB,CAAC;AAChC,cAAc,sBAAsB,CAAC;AACrC,cAAc,yBAAyB,CAAC;AACxC,cAAc,uBAAuB,CAAC;AACtC,cAAc,0BAA0B,CAAC;AACzC,cAAc,oBAAoB,CAAC;AACnC,cAAc,mBAAmB,CAAC;AAClC,cAAc,oBAAoB,CAAC;AACnC,cAAc,qBAAqB,CAAC;AACpC,cAAc,0BAA0B,CAAC;AACzC,cAAc,qBAAqB,CAAC;AACpC,cAAc,kBAAkB,CAAC;AACjC,cAAc,uBAAuB,CAAC;AACtC,cAAc,mBAAmB,CAAC;AAClC,cAAc,yBAAyB,CAAC;AACxC,cAAc,sBAAsB,CAAC;AAErC,cAAc,+BAA+B,CAAC;AAC9C,cAAc,uBAAuB,CAAC;AACtC,cAAc,0BAA0B,CAAC;AAEzC,cAAc,wCAAwC,CAAC;AAEvD,cAAc,gCAAgC,CAAC;AAE/C,cAAc,4BAA4B,CAAC;AAE3C,cAAc,eAAe,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -9,6 +9,7 @@ export * from "./action-hint-diagnostics.js";
|
|
|
9
9
|
export * from "./ai-readiness.js";
|
|
10
10
|
export * from "./pack-doctor.js";
|
|
11
11
|
export * from "./task-packet.js";
|
|
12
|
+
export * from "./resolve-verification-commands.js";
|
|
12
13
|
export * from "./reference-lookup.js";
|
|
13
14
|
export * from "./task-ranker.js";
|
|
14
15
|
export * from "./drift.js";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pack-contributions-inventory.d.ts","sourceRoot":"","sources":["../src/pack-contributions-inventory.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"pack-contributions-inventory.d.ts","sourceRoot":"","sources":["../src/pack-contributions-inventory.ts"],"names":[],"mappings":"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"}
|
|
@@ -598,6 +598,12 @@ function buildPackContributionsInventorySync(inspection, structural) {
|
|
|
598
598
|
const sig = pack.manifest?.signature;
|
|
599
599
|
if (!sig)
|
|
600
600
|
continue;
|
|
601
|
+
// Dev-signed packs are re-staled by every local build and load fine
|
|
602
|
+
// locally, so suppress the stale-signature conflict for them (mirrors the
|
|
603
|
+
// dev-aware downgrade in pack-signature-status.ts). Production signed packs
|
|
604
|
+
// still surface as stale.
|
|
605
|
+
if (sig.dev === true)
|
|
606
|
+
continue;
|
|
601
607
|
// The loader already validates HMAC strictly; we only surface stale
|
|
602
608
|
// when the manifest content has obviously been edited without re-signing.
|
|
603
609
|
// Heuristic: signature timestamp older than any contribution file mtime.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pack-signature-status.d.ts","sourceRoot":"","sources":["../src/pack-signature-status.ts"],"names":[],"mappings":"AAiBA,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,2BAA2B,CAAC;AAEvE,eAAO,MAAM,4BAA4B,wCAAwC,CAAC;AAElF,oBAAY,uBAAuB;IACjC,OAAO,YAAY;IACnB,KAAK,UAAU;IACf,OAAO,YAAY;CACpB;AAED,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;IAChC,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,MAAM,EAAE,uBAAuB,CAAC;IACzC,QAAQ,CAAC,iBAAiB,CAAC,EAAE,MAAM,CAAC;IACpC,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,qBAAqB,CAAC,EAAE,MAAM,CAAC;IACxC,QAAQ,CAAC,sBAAsB,CAAC,EAAE,MAAM,CAAC;IACzC,QAAQ,CAAC,eAAe,EAAE,OAAO,CAAC;IAClC,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAC9B;;;;;OAKG;IACH,QAAQ,CAAC,GAAG,CAAC,EAAE,OAAO,CAAC;CACxB;AAED,MAAM,WAAW,0BAA0B;IACzC,QAAQ,CAAC,MAAM,EAAE,OAAO,4BAA4B,CAAC;IACrD,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,KAAK,EAAE,SAAS,mBAAmB,EAAE,CAAC;IAC/C,QAAQ,CAAC,OAAO,EAAE;QAChB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;QACvB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;QACzB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;QACvB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;QACzB,sEAAsE;QACtE,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;KACtB,CAAC;IACF,QAAQ,CAAC,eAAe,EAAE,OAAO,CAAC;IAClC,QAAQ,CAAC,YAAY,EAAE,SAAS,MAAM,EAAE,CAAC;CAC1C;AA+BD,wBAAgB,8BAA8B,CAC5C,UAAU,EAAE,qBAAqB,GAChC,0BAA0B,
|
|
1
|
+
{"version":3,"file":"pack-signature-status.d.ts","sourceRoot":"","sources":["../src/pack-signature-status.ts"],"names":[],"mappings":"AAiBA,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,2BAA2B,CAAC;AAEvE,eAAO,MAAM,4BAA4B,wCAAwC,CAAC;AAElF,oBAAY,uBAAuB;IACjC,OAAO,YAAY;IACnB,KAAK,UAAU;IACf,OAAO,YAAY;CACpB;AAED,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;IAChC,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,MAAM,EAAE,uBAAuB,CAAC;IACzC,QAAQ,CAAC,iBAAiB,CAAC,EAAE,MAAM,CAAC;IACpC,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,qBAAqB,CAAC,EAAE,MAAM,CAAC;IACxC,QAAQ,CAAC,sBAAsB,CAAC,EAAE,MAAM,CAAC;IACzC,QAAQ,CAAC,eAAe,EAAE,OAAO,CAAC;IAClC,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAC9B;;;;;OAKG;IACH,QAAQ,CAAC,GAAG,CAAC,EAAE,OAAO,CAAC;CACxB;AAED,MAAM,WAAW,0BAA0B;IACzC,QAAQ,CAAC,MAAM,EAAE,OAAO,4BAA4B,CAAC;IACrD,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,KAAK,EAAE,SAAS,mBAAmB,EAAE,CAAC;IAC/C,QAAQ,CAAC,OAAO,EAAE;QAChB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;QACvB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;QACzB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;QACvB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;QACzB,sEAAsE;QACtE,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;KACtB,CAAC;IACF,QAAQ,CAAC,eAAe,EAAE,OAAO,CAAC;IAClC,QAAQ,CAAC,YAAY,EAAE,SAAS,MAAM,EAAE,CAAC;CAC1C;AA+BD,wBAAgB,8BAA8B,CAC5C,UAAU,EAAE,qBAAqB,GAChC,0BAA0B,CA6G5B;AAED;;;;;;;;GAQG;AACH,MAAM,MAAM,yBAAyB,GACjC,OAAO,GACP,UAAU,GACV,OAAO,GACP,SAAS,GACT,gBAAgB,GAChB,cAAc,GACd,SAAS,CAAC;AAEd,MAAM,WAAW,0BAA0B;IACzC,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;IAChC,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,KAAK,EAAE,yBAAyB,CAAC;IAC1C,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;CAC/B;AAED,MAAM,WAAW,2BAA2B;IAC1C,QAAQ,CAAC,MAAM,EAAE,sCAAsC,CAAC;IACxD,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,eAAe,EAAE,OAAO,CAAC;IAClC,QAAQ,CAAC,IAAI,EAAE,UAAU,GAAG,UAAU,CAAC;IACvC,QAAQ,CAAC,KAAK,EAAE,SAAS,0BAA0B,EAAE,CAAC;CACvD;AAED,MAAM,WAAW,kCAAkC;IACjD,iBAAiB,CAAC,EAAE,OAAO,CAAC;CAC7B;AAED,wBAAgB,0BAA0B,CACxC,UAAU,EAAE,qBAAqB,EACjC,OAAO,GAAE,kCAAuC,GAC/C,2BAA2B,CA6D7B"}
|
|
@@ -103,7 +103,24 @@ export function buildPackSignatureStatusReport(inspection) {
|
|
|
103
103
|
if (newerFile)
|
|
104
104
|
break;
|
|
105
105
|
}
|
|
106
|
-
if (newerFile) {
|
|
106
|
+
if (newerFile && sig.dev === true) {
|
|
107
|
+
// Dev packs are signed with the well-known PACK_DEV_SECRET and load fine
|
|
108
|
+
// locally unsigned/dev — every local `npm run build` re-stales them, so a
|
|
109
|
+
// standing "stale" warning is pure noise during pack development. Keep
|
|
110
|
+
// them out of the stale bucket (still counted under summary.dev) and
|
|
111
|
+
// soften the reason. Production (non-dev) signed packs are untouched.
|
|
112
|
+
out.push({
|
|
113
|
+
packageName: pack.packageName,
|
|
114
|
+
packageVersion: pack.packageVersion,
|
|
115
|
+
packageRoot: pack.packageRoot,
|
|
116
|
+
status: PackSignatureStatusKind.Present,
|
|
117
|
+
signatureSignedAt: sig.signedAt,
|
|
118
|
+
secretAvailable: secret,
|
|
119
|
+
dev: true,
|
|
120
|
+
reason: `dev signature re-staled by a local build ("${newerFile}" newer) — dev packs load fine locally; re-sign before release`,
|
|
121
|
+
});
|
|
122
|
+
}
|
|
123
|
+
else if (newerFile) {
|
|
107
124
|
out.push({
|
|
108
125
|
packageName: pack.packageName,
|
|
109
126
|
packageVersion: pack.packageVersion,
|
|
@@ -28,6 +28,14 @@ export interface IProposedKnowledgeEntry {
|
|
|
28
28
|
line: number;
|
|
29
29
|
kind: string;
|
|
30
30
|
};
|
|
31
|
+
/**
|
|
32
|
+
* Recent commits (in the `--since` range) that touched this symbol's file —
|
|
33
|
+
* the "why this entry now". Present only when proposing over a git range.
|
|
34
|
+
*/
|
|
35
|
+
commits?: readonly {
|
|
36
|
+
hash: string;
|
|
37
|
+
subject: string;
|
|
38
|
+
}[];
|
|
31
39
|
}
|
|
32
40
|
export interface IKnowledgeProposeSkip {
|
|
33
41
|
file: string;
|
|
@@ -45,6 +53,8 @@ export interface IKnowledgeProposeReport {
|
|
|
45
53
|
gitChangedOnly: boolean;
|
|
46
54
|
/** Ref used for git-changed scan, when applicable. */
|
|
47
55
|
since?: string;
|
|
56
|
+
/** Number of proposals dropped by `--max` (0/absent when no cap hit). */
|
|
57
|
+
truncated?: number;
|
|
48
58
|
}
|
|
49
59
|
export interface IKnowledgeProposeInput {
|
|
50
60
|
cwd: string;
|
|
@@ -58,6 +68,11 @@ export interface IKnowledgeProposeInput {
|
|
|
58
68
|
* Pass `null` to scan the whole workspace.
|
|
59
69
|
*/
|
|
60
70
|
since?: string | null;
|
|
71
|
+
/**
|
|
72
|
+
* Cap the number of proposals returned (commit-annotated ones first). Guards
|
|
73
|
+
* against a far-back `--since` flooding hundreds of unreviewable stubs.
|
|
74
|
+
*/
|
|
75
|
+
max?: number;
|
|
61
76
|
}
|
|
62
77
|
export declare function proposeKnowledge(input: IKnowledgeProposeInput): Promise<IKnowledgeProposeReport>;
|
|
63
78
|
export declare function renderKnowledgeProposeMarkdown(report: IKnowledgeProposeReport): string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"propose-knowledge.d.ts","sourceRoot":"","sources":["../src/propose-knowledge.ts"],"names":[],"mappings":"AAwBA,eAAO,MAAM,wBAAwB,oCAAoC,CAAC;AAE1E,oBAAY,0BAA0B;IACpC,cAAc,oBAAoB;IAClC,QAAQ,aAAa;IACrB,eAAe,qBAAqB;IACpC,OAAO,2BAA2B;IAClC,WAAW,iBAAiB;CAC7B;AAED,MAAM,WAAW,kBAAkB;IACjC,IAAI,EAAE,MAAM,GAAG,QAAQ,CAAC;IACxB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED,MAAM,WAAW,uBAAuB;IACtC,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,SAAS,MAAM,EAAE,CAAC;IACzB,IAAI,EAAE,SAAS,MAAM,EAAE,CAAC;IACxB,WAAW,EAAE,SAAS,MAAM,EAAE,CAAC;IAC/B,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,SAAS,kBAAkB,EAAE,CAAC;IAC1C,MAAM,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"propose-knowledge.d.ts","sourceRoot":"","sources":["../src/propose-knowledge.ts"],"names":[],"mappings":"AAwBA,eAAO,MAAM,wBAAwB,oCAAoC,CAAC;AAE1E,oBAAY,0BAA0B;IACpC,cAAc,oBAAoB;IAClC,QAAQ,aAAa;IACrB,eAAe,qBAAqB;IACpC,OAAO,2BAA2B;IAClC,WAAW,iBAAiB;CAC7B;AAED,MAAM,WAAW,kBAAkB;IACjC,IAAI,EAAE,MAAM,GAAG,QAAQ,CAAC;IACxB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED,MAAM,WAAW,uBAAuB;IACtC,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,SAAS,MAAM,EAAE,CAAC;IACzB,IAAI,EAAE,SAAS,MAAM,EAAE,CAAC;IACxB,WAAW,EAAE,SAAS,MAAM,EAAE,CAAC;IAC/B,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,SAAS,kBAAkB,EAAE,CAAC;IAC1C,MAAM,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC;IACrD;;;OAGG;IACH,OAAO,CAAC,EAAE,SAAS;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;CACxD;AAED,MAAM,WAAW,qBAAqB;IACpC,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,0BAA0B,CAAC;IACnC,gBAAgB,CAAC,EAAE,MAAM,CAAC;CAC3B;AAED,MAAM,WAAW,uBAAuB;IACtC,MAAM,EAAE,OAAO,wBAAwB,CAAC;IACxC,SAAS,EAAE,SAAS,uBAAuB,EAAE,CAAC;IAC9C,OAAO,EAAE,SAAS,qBAAqB,EAAE,CAAC;IAC1C,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY,EAAE,MAAM,CAAC;IACrB,+DAA+D;IAC/D,cAAc,EAAE,OAAO,CAAC;IACxB,sDAAsD;IACtD,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,yEAAyE;IACzE,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,sBAAsB;IACrC,GAAG,EAAE,MAAM,CAAC;IACZ,6DAA6D;IAC7D,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,8CAA8C;IAC9C,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB;;;;OAIG;IACH,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB;;;OAGG;IACH,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AA+PD,wBAAsB,gBAAgB,CACpC,KAAK,EAAE,sBAAsB,GAC5B,OAAO,CAAC,uBAAuB,CAAC,CAgGlC;AAED,wBAAgB,8BAA8B,CAC5C,MAAM,EAAE,uBAAuB,GAC9B,MAAM,CAkDR"}
|
|
@@ -12,7 +12,7 @@
|
|
|
12
12
|
*/
|
|
13
13
|
import { existsSync, readdirSync, statSync } from 'node:fs';
|
|
14
14
|
import * as nodePath from 'node:path';
|
|
15
|
-
import { getChangedFiles, isGitRepo } from "./git-helpers.js";
|
|
15
|
+
import { getChangedFiles, getCommitSubjects, isGitRepo } from "./git-helpers.js";
|
|
16
16
|
import { inspectSharkcraft } from "./sharkcraft-inspector.js";
|
|
17
17
|
import { buildSymbolIndex, SymbolDeclarationKind, SymbolVisibility, } from "./symbol-index.js";
|
|
18
18
|
export const KNOWLEDGE_PROPOSE_SCHEMA = 'sharkcraft.knowledge-propose/v1';
|
|
@@ -155,7 +155,7 @@ function findCoverage(index, relPath, symbol) {
|
|
|
155
155
|
return index.files.get(relPath);
|
|
156
156
|
return undefined;
|
|
157
157
|
}
|
|
158
|
-
function buildProposalForExport(relPath, entry) {
|
|
158
|
+
function buildProposalForExport(relPath, entry, commits = []) {
|
|
159
159
|
const scopeName = packageOfPath(relPath);
|
|
160
160
|
const feature = nearestFeatureScope(relPath);
|
|
161
161
|
const scope = feature ? [scopeName, feature] : [scopeName];
|
|
@@ -166,6 +166,9 @@ function buildProposalForExport(relPath, entry) {
|
|
|
166
166
|
const content = [
|
|
167
167
|
`Auto-proposed by \`shrk knowledge propose\` for the exported ${klabel}`,
|
|
168
168
|
`\`${entry.name}\` declared at \`${relPath}:${entry.line}\`.`,
|
|
169
|
+
...(commits.length > 0
|
|
170
|
+
? ['', `Surfaced by recent commit(s): ${commits.map((c) => `${c.subject} (${c.hash})`).join('; ')}.`]
|
|
171
|
+
: []),
|
|
169
172
|
'',
|
|
170
173
|
'Replace this body with the *why*: the contract this symbol provides, the',
|
|
171
174
|
'invariants it preserves, and how callers should reach for it.',
|
|
@@ -185,6 +188,7 @@ function buildProposalForExport(relPath, entry) {
|
|
|
185
188
|
{ kind: 'symbol', symbol: entry.name, path: relPath },
|
|
186
189
|
],
|
|
187
190
|
source: { file: relPath, line: entry.line, kind: entry.kind },
|
|
191
|
+
...(commits.length > 0 ? { commits } : {}),
|
|
188
192
|
};
|
|
189
193
|
}
|
|
190
194
|
function gatherWorkspaceFiles(root, inspection) {
|
|
@@ -257,6 +261,21 @@ export async function proposeKnowledge(input) {
|
|
|
257
261
|
const root = inspection.projectRoot;
|
|
258
262
|
const coverage = buildCoverageIndex(inspection.knowledgeEntries);
|
|
259
263
|
const { files, gitChangedOnly, since } = resolveFileSet(input, root, inspection);
|
|
264
|
+
// When proposing over a real git range, map each file to the commit
|
|
265
|
+
// subjects that touched it so each draft says WHY it surfaced (instead of
|
|
266
|
+
// pure boilerplate). `HEAD..HEAD` (the default working-tree compare) yields
|
|
267
|
+
// nothing, so this only annotates `--since <ref>` runs. Deterministic.
|
|
268
|
+
const commitsByFile = new Map();
|
|
269
|
+
if (typeof since === 'string' && since !== 'HEAD' && isGitRepo(root)) {
|
|
270
|
+
for (const c of getCommitSubjects(root, { since })) {
|
|
271
|
+
for (const f of c.files) {
|
|
272
|
+
const arr = commitsByFile.get(f) ?? [];
|
|
273
|
+
if (arr.length < 3)
|
|
274
|
+
arr.push({ hash: c.shortHash, subject: c.subject });
|
|
275
|
+
commitsByFile.set(f, arr);
|
|
276
|
+
}
|
|
277
|
+
}
|
|
278
|
+
}
|
|
260
279
|
const proposals = [];
|
|
261
280
|
const skipped = [];
|
|
262
281
|
let totalExports = 0;
|
|
@@ -307,17 +326,28 @@ export async function proposeKnowledge(input) {
|
|
|
307
326
|
});
|
|
308
327
|
continue;
|
|
309
328
|
}
|
|
310
|
-
proposals.push(buildProposalForExport(relPath, exp));
|
|
329
|
+
proposals.push(buildProposalForExport(relPath, exp, commitsByFile.get(relPath)));
|
|
311
330
|
}
|
|
312
331
|
}
|
|
332
|
+
// --max: cap the flood. Commit-annotated proposals (genuinely touched in the
|
|
333
|
+
// range) lead, so truncation keeps the most relevant drafts.
|
|
334
|
+
let finalProposals = proposals;
|
|
335
|
+
let truncated = 0;
|
|
336
|
+
if (typeof input.max === 'number' && input.max >= 0 && proposals.length > input.max) {
|
|
337
|
+
const annotated = proposals.filter((p) => p.commits && p.commits.length > 0);
|
|
338
|
+
const rest = proposals.filter((p) => !p.commits || p.commits.length === 0);
|
|
339
|
+
truncated = proposals.length - input.max;
|
|
340
|
+
finalProposals = [...annotated, ...rest].slice(0, input.max);
|
|
341
|
+
}
|
|
313
342
|
return {
|
|
314
343
|
schema: KNOWLEDGE_PROPOSE_SCHEMA,
|
|
315
|
-
proposals,
|
|
344
|
+
proposals: finalProposals,
|
|
316
345
|
skipped,
|
|
317
346
|
scannedFiles: files.length,
|
|
318
347
|
totalExports,
|
|
319
348
|
gitChangedOnly,
|
|
320
349
|
...(since !== undefined ? { since } : {}),
|
|
350
|
+
...(truncated > 0 ? { truncated } : {}),
|
|
321
351
|
};
|
|
322
352
|
}
|
|
323
353
|
export function renderKnowledgeProposeMarkdown(report) {
|
|
@@ -332,6 +362,9 @@ export function renderKnowledgeProposeMarkdown(report) {
|
|
|
332
362
|
(report.gitChangedOnly && report.since
|
|
333
363
|
? ` (git-changed only since ${report.since})`
|
|
334
364
|
: ''));
|
|
365
|
+
if (report.truncated && report.truncated > 0) {
|
|
366
|
+
lines.push(`truncated: ${report.truncated} more proposal(s) dropped by --max (commit-annotated ones kept first)`);
|
|
367
|
+
}
|
|
335
368
|
lines.push('');
|
|
336
369
|
if (report.proposals.length === 0) {
|
|
337
370
|
lines.push('No new entries proposed. Every exported binding is either');
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import type { ISharkcraftInspection } from './sharkcraft-inspector.js';
|
|
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 declare function resolveVerificationCommands(inspection: ISharkcraftInspection, options?: {
|
|
23
|
+
readonly pipelineIds?: readonly string[];
|
|
24
|
+
readonly knowledgeDefaults?: readonly string[];
|
|
25
|
+
}): string[];
|
|
26
|
+
//# sourceMappingURL=resolve-verification-commands.d.ts.map
|
|
@@ -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":"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":"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;AAIvE,MAAM,WAAW,8BAA8B;IAC7C,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,uBAAuB;IACtC,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;IACrB,sEAAsE;IACtE,aAAa,EAAE,MAAM,CAAC;IACtB,gDAAgD;IAChD,YAAY,EAAE,MAAM,CAAC;IACrB,wCAAwC;IACxC,iBAAiB,EAAE,SAAS,MAAM,EAAE,CAAC;CACtC;AAED,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,oEAAoE;IACpE,eAAe,EAAE,MAAM,CAAC;IACxB,6BAA6B;IAC7B,gBAAgB,EAAE,SAAS,MAAM,EAAE,CAAC;IACpC,kDAAkD;IAClD,qBAAqB,EAAE,qBAAqB,EAAE,CAAC;IAC/C,kCAAkC;IAClC,oBAAoB,EAAE,8BAA8B,EAAE,CAAC;IACvD,+EAA+E;IAC/E,OAAO,EAAE,cAAc,CAAC;IACxB,iFAAiF;IACjF,aAAa,EAAE,SAAS,KAAK,EAAE,CAAC;IAChC,gEAAgE;IAChE,aAAa,EAAE,SAAS,eAAe,EAAE,CAAC;IAC1C,4BAA4B;IAC5B,iBAAiB,EAAE,SAAS,mBAAmB,EAAE,CAAC;IAClD,2DAA2D;IAC3D,WAAW,EAAE,sBAAsB,CAAC;IACpC,2CAA2C;IAC3C,mBAAmB,EAAE,SAAS,MAAM,EAAE,CAAC;IACvC,8CAA8C;IAC9C,sBAAsB,EAAE,SAAS,MAAM,EAAE,CAAC;IAC1C,oCAAoC;IACpC,gBAAgB,EAAE,SAAS,MAAM,EAAE,CAAC;IACpC,oDAAoD;IACpD,oBAAoB,EAAE,SAAS,MAAM,EAAE,CAAC;IACxC,+EAA+E;IAC/E,iBAAiB,EAAE,SAAS,MAAM,EAAE,CAAC;IACrC,gDAAgD;IAChD,aAAa,EAAE,MAAM,CAAC;IACtB;;;OAGG;IACH,cAAc,CAAC,EAAE;QACf,KAAK,CAAC,EAAE,SAAS;YAAE,EAAE,EAAE,MAAM,CAAC;YAAC,KAAK,EAAE,MAAM,CAAC;YAAC,OAAO,EAAE,SAAS,MAAM,EAAE,CAAA;SAAE,EAAE,CAAC;QAC7E,KAAK,CAAC,EAAE,SAAS;YAAE,EAAE,EAAE,MAAM,CAAC;YAAC,KAAK,EAAE,MAAM,CAAC;YAAC,OAAO,EAAE,SAAS,MAAM,EAAE,CAAA;SAAE,EAAE,CAAC;QAC7E,SAAS,CAAC,EAAE,SAAS;YAAE,EAAE,EAAE,MAAM,CAAC;YAAC,KAAK,EAAE,MAAM,CAAC;YAAC,OAAO,EAAE,SAAS,MAAM,EAAE,CAAA;SAAE,EAAE,CAAC;QACjF,SAAS,CAAC,EAAE,SAAS;YAAE,EAAE,EAAE,MAAM,CAAC;YAAC,KAAK,EAAE,MAAM,CAAC;YAAC,OAAO,EAAE,SAAS,MAAM,EAAE,CAAA;SAAE,EAAE,CAAC;QACjF,OAAO,CAAC,EAAE,SAAS;YAAE,EAAE,EAAE,MAAM,CAAC;YAAC,KAAK,EAAE,MAAM,CAAC;YAAC,OAAO,EAAE,SAAS,MAAM,EAAE,CAAA;SAAE,EAAE,CAAC;KAChF,CAAC;IACF;;;;OAIG;IACH,YAAY,CAAC,EAAE,uBAAuB,CAAC;CACxC;AAED,MAAM,WAAW,uBAAuB;IACtC,mEAAmE;IACnE,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,yDAAyD;IACzD,KAAK,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IAC1B,iEAAiE;IACjE,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB;;;;;;;;;;;OAWG;IACH,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAkED;;;GAGG;AACH,wBAAgB,eAAe,CAC7B,UAAU,EAAE,qBAAqB,EACjC,IAAI,EAAE,MAAM,EACZ,OAAO,GAAE,uBAA4B,GACpC,WAAW,CAyKb"}
|
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
|
};
|
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": {
|