@shrkcrft/inspector 0.1.0-alpha.1 → 0.1.0-alpha.10
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/README.md +1 -1
- package/dist/adoption-state.js +1 -1
- package/dist/agent-brief.d.ts.map +1 -1
- package/dist/agent-brief.js +59 -10
- package/dist/agent-task-prep.d.ts.map +1 -1
- package/dist/agent-task-prep.js +1 -3
- package/dist/ai-readiness.d.ts +84 -9
- package/dist/ai-readiness.d.ts.map +1 -1
- package/dist/ai-readiness.js +161 -30
- package/dist/apply-dispatch-trace.d.ts +1 -2
- package/dist/apply-dispatch-trace.d.ts.map +1 -1
- package/dist/apply-dispatch-trace.js +0 -9
- package/dist/area-explore.d.ts.map +1 -1
- package/dist/area-explore.js +1 -5
- package/dist/area-map.d.ts +0 -19
- package/dist/area-map.d.ts.map +1 -1
- package/dist/area-map.js +0 -27
- package/dist/ci-permissions-fix.d.ts +1 -1
- package/dist/ci-permissions-fix.d.ts.map +1 -1
- package/dist/ci-permissions-fix.js +1 -182
- package/dist/code-intelligence-doctor.d.ts +21 -0
- package/dist/code-intelligence-doctor.d.ts.map +1 -0
- package/dist/code-intelligence-doctor.js +965 -0
- package/dist/compliance-profiles.js +1 -1
- package/dist/construct-adoption-diff.d.ts.map +1 -1
- package/dist/construct-adoption-diff.js +2 -1
- package/dist/construct-adoption.d.ts.map +1 -1
- package/dist/construct-adoption.js +10 -11
- package/dist/construct-inference.d.ts.map +1 -1
- package/dist/construct-inference.js +2 -1
- package/dist/construct-registry.d.ts.map +1 -1
- package/dist/construct-registry.js +2 -10
- package/dist/contract-template-registry.d.ts.map +1 -1
- package/dist/contract-template-registry.js +2 -10
- package/dist/convention-registry.d.ts.map +1 -1
- package/dist/convention-registry.js +2 -10
- package/dist/decision-records.d.ts.map +1 -1
- package/dist/decision-records.js +2 -9
- package/dist/demo-script.d.ts +0 -1
- package/dist/demo-script.d.ts.map +1 -1
- package/dist/demo-script.js +0 -43
- package/dist/docs-check.js +1 -1
- package/dist/drift-baseline.d.ts.map +1 -1
- package/dist/drift-baseline.js +5 -2
- package/dist/feedback-ingestion.d.ts.map +1 -1
- package/dist/feedback-ingestion.js +2 -16
- package/dist/git-helpers.d.ts +0 -12
- package/dist/git-helpers.d.ts.map +1 -1
- package/dist/git-helpers.js +0 -63
- package/dist/helper-registry.d.ts +27 -54
- package/dist/helper-registry.d.ts.map +1 -1
- package/dist/helper-registry.js +16 -517
- package/dist/impact-analysis.d.ts.map +1 -1
- package/dist/impact-analysis.js +4 -5
- package/dist/impact-render.d.ts.map +1 -1
- package/dist/impact-render.js +0 -9
- package/dist/index.d.ts +2 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -3
- package/dist/ingest-drafts.js +8 -4
- package/dist/migration-profile-registry.d.ts.map +1 -1
- package/dist/migration-profile-registry.js +2 -10
- package/dist/monorepo-onboarding.js +2 -2
- package/dist/onboarding-drafts.d.ts +0 -14
- package/dist/onboarding-drafts.d.ts.map +1 -1
- package/dist/onboarding-drafts.js +5 -39
- package/dist/onboarding-report.d.ts.map +1 -1
- package/dist/onboarding-report.js +5 -1
- package/dist/onboarding.d.ts +1 -1
- package/dist/onboarding.d.ts.map +1 -1
- package/dist/onboarding.js +5 -64
- package/dist/ownership.js +2 -10
- package/dist/pack-contributions-inventory.d.ts +0 -1
- package/dist/pack-contributions-inventory.d.ts.map +1 -1
- package/dist/pack-contributions-inventory.js +0 -24
- package/dist/pack-helper-registry.d.ts.map +1 -1
- package/dist/pack-helper-registry.js +2 -10
- package/dist/pack-release-check.d.ts.map +1 -1
- package/dist/pack-release-check.js +4 -11
- package/dist/pack-signature-status.d.ts.map +1 -1
- package/dist/pack-signature-status.js +0 -1
- package/dist/pack-symbol-compat.d.ts +4 -17
- package/dist/pack-symbol-compat.d.ts.map +1 -1
- package/dist/pack-symbol-compat.js +7 -155
- package/dist/pack-test-runner.js +2 -10
- package/dist/plan-simulation.d.ts.map +1 -1
- package/dist/plan-simulation.js +3 -20
- package/dist/playbook-registry.d.ts.map +1 -1
- package/dist/playbook-registry.js +2 -10
- package/dist/policy-engine.d.ts.map +1 -1
- package/dist/policy-engine.js +3 -11
- package/dist/policy-test.js +3 -11
- package/dist/product-coherence.js +5 -5
- package/dist/profile-registry.d.ts +0 -1
- package/dist/profile-registry.d.ts.map +1 -1
- package/dist/profile-registry.js +4 -32
- package/dist/quality-baseline.d.ts.map +1 -1
- package/dist/quality-baseline.js +3 -1
- package/dist/ranker-explainability.d.ts.map +1 -1
- package/dist/ranker-explainability.js +3 -9
- package/dist/registration-hint-registry.d.ts.map +1 -1
- package/dist/registration-hint-registry.js +2 -10
- package/dist/release-readiness.js +5 -5
- package/dist/reposet.js +1 -1
- package/dist/repository-knowledge-model.d.ts +1 -1
- package/dist/repository-knowledge-model.d.ts.map +1 -1
- package/dist/review-packet-v2.d.ts.map +1 -1
- package/dist/review-packet-v2.js +3 -13
- package/dist/rule-scaffold.d.ts.map +1 -1
- package/dist/rule-scaffold.js +12 -4
- package/dist/scaffold-patterns.js +2 -10
- package/dist/search-tuning-registry.d.ts.map +1 -1
- package/dist/search-tuning-registry.js +2 -10
- package/dist/self-config-doctor-v2.d.ts +1 -1
- package/dist/self-config-doctor-v2.d.ts.map +1 -1
- package/dist/self-config-doctor-v2.js +6 -10
- package/dist/self-config-doctor.d.ts.map +1 -1
- package/dist/self-config-doctor.js +7 -13
- package/dist/sharkcraft-inspector.d.ts.map +1 -1
- package/dist/sharkcraft-inspector.js +9 -0
- package/dist/start-here.d.ts +1 -1
- package/dist/start-here.js +1 -1
- package/dist/synthesize-from-onboarding.d.ts +68 -0
- package/dist/synthesize-from-onboarding.d.ts.map +1 -0
- package/dist/synthesize-from-onboarding.js +508 -0
- package/dist/task-packet.d.ts +13 -0
- package/dist/task-packet.d.ts.map +1 -1
- package/dist/task-packet.js +46 -5
- package/dist/task-ranker.d.ts.map +1 -1
- package/dist/task-ranker.js +1 -31
- package/dist/task-routing-hint-registry.d.ts.map +1 -1
- package/dist/task-routing-hint-registry.js +2 -10
- package/dist/test-runner.d.ts.map +1 -1
- package/dist/test-runner.js +12 -17
- package/dist/universal-search.d.ts +0 -1
- package/dist/universal-search.d.ts.map +1 -1
- package/dist/universal-search.js +0 -12
- package/dist/upgrade-advisor.js +1 -1
- package/package.json +22 -21
- package/dist/onboarding-drafts-merge.d.ts +0 -71
- package/dist/onboarding-drafts-merge.d.ts.map +0 -1
- package/dist/onboarding-drafts-merge.js +0 -174
- package/dist/plugin-lifecycle-profile-registry.d.ts +0 -52
- package/dist/plugin-lifecycle-profile-registry.d.ts.map +0 -1
- package/dist/plugin-lifecycle-profile-registry.js +0 -202
- package/dist/plugin-lifecycle.d.ts +0 -132
- package/dist/plugin-lifecycle.d.ts.map +0 -1
- package/dist/plugin-lifecycle.js +0 -477
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"task-packet.d.ts","sourceRoot":"","sources":["../src/task-packet.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"task-packet.d.ts","sourceRoot":"","sources":["../src/task-packet.ts"],"names":[],"mappings":"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"}
|
package/dist/task-packet.js
CHANGED
|
@@ -2,6 +2,22 @@ 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
|
+
/**
|
|
6
|
+
* Per-field caps applied to the packet when `compact: true`.
|
|
7
|
+
* Keeps the JSON small while still covering the highest-signal hits.
|
|
8
|
+
*/
|
|
9
|
+
const COMPACT_CAPS = {
|
|
10
|
+
rules: 5,
|
|
11
|
+
paths: 5,
|
|
12
|
+
templates: 3,
|
|
13
|
+
commands: 5,
|
|
14
|
+
mcpTools: 5,
|
|
15
|
+
forbiddenActions: 5,
|
|
16
|
+
verificationCommands: 5,
|
|
17
|
+
safetyNotes: 5,
|
|
18
|
+
relatedTemplates: 5,
|
|
19
|
+
relatedPathConventions: 5,
|
|
20
|
+
};
|
|
5
21
|
function findPipelinesByTags(pipelines, ...tags) {
|
|
6
22
|
return pipelines.filter((p) => p.tags?.some((t) => tags.includes(t.toLowerCase())));
|
|
7
23
|
}
|
|
@@ -46,6 +62,7 @@ function pickPipelines(pipelines, task) {
|
|
|
46
62
|
*/
|
|
47
63
|
export function buildTaskPacket(inspection, task, options = {}) {
|
|
48
64
|
const maxTokens = options.maxTokens ?? 3500;
|
|
65
|
+
const compact = options.compact !== false;
|
|
49
66
|
const overview = buildProjectOverview(inspection.workspace, inspection.config?.projectName);
|
|
50
67
|
const overviewText = renderOverviewText(overview);
|
|
51
68
|
const contextResult = buildContext(inspection.knowledgeEntries, {
|
|
@@ -55,17 +72,41 @@ export function buildTaskPacket(inspection, task, options = {}) {
|
|
|
55
72
|
projectOverview: overviewText,
|
|
56
73
|
});
|
|
57
74
|
// ── Deterministic ranker — replaces the old substring search ─────────
|
|
58
|
-
|
|
59
|
-
const
|
|
60
|
-
const
|
|
61
|
-
const
|
|
75
|
+
// Compact mode requests top-5; full mode requests top-10 (the original).
|
|
76
|
+
const rankN = compact ? 8 : 10;
|
|
77
|
+
const ranking = rankAll(inspection, task, rankN);
|
|
78
|
+
const relevantRules = compact
|
|
79
|
+
? ranking.rules.slice(0, COMPACT_CAPS.rules).map((r) => r.item)
|
|
80
|
+
: ranking.rules.map((r) => r.item);
|
|
81
|
+
const relevantPaths = compact
|
|
82
|
+
? ranking.paths.slice(0, COMPACT_CAPS.paths).map((r) => r.item)
|
|
83
|
+
: ranking.paths.map((r) => r.item);
|
|
84
|
+
const relevantTemplates = compact
|
|
85
|
+
? ranking.templates.slice(0, COMPACT_CAPS.templates).map((r) => r.item)
|
|
86
|
+
: ranking.templates.map((r) => r.item);
|
|
62
87
|
// Aggregate hints from the *ranked* knowledge so unrelated entries don't
|
|
63
88
|
// leak into the action-hints surface.
|
|
64
89
|
const hintCorpus = [
|
|
65
90
|
...ranking.rules.slice(0, 8).map((r) => r.item),
|
|
66
91
|
...inspection.knowledgeEntries.filter((e) => e.priority === 'critical' || e.priority === 'high'),
|
|
67
92
|
];
|
|
68
|
-
const
|
|
93
|
+
const actionHintsRaw = aggregateActionHints(hintCorpus);
|
|
94
|
+
// Cap each per-field aggregate when compact. Aggregator already
|
|
95
|
+
// priority-sorts entries, so the top-N kept here is the highest-signal
|
|
96
|
+
// slice of each field. `requiresHumanReview` / `writePolicy` /
|
|
97
|
+
// `preferredFlow` / `contributingEntries` are unchanged.
|
|
98
|
+
const actionHints = compact
|
|
99
|
+
? {
|
|
100
|
+
...actionHintsRaw,
|
|
101
|
+
commands: actionHintsRaw.commands.slice(0, COMPACT_CAPS.commands),
|
|
102
|
+
mcpTools: actionHintsRaw.mcpTools.slice(0, COMPACT_CAPS.mcpTools),
|
|
103
|
+
forbiddenActions: actionHintsRaw.forbiddenActions.slice(0, COMPACT_CAPS.forbiddenActions),
|
|
104
|
+
verificationCommands: actionHintsRaw.verificationCommands.slice(0, COMPACT_CAPS.verificationCommands),
|
|
105
|
+
safetyNotes: actionHintsRaw.safetyNotes.slice(0, COMPACT_CAPS.safetyNotes),
|
|
106
|
+
relatedTemplates: actionHintsRaw.relatedTemplates.slice(0, COMPACT_CAPS.relatedTemplates),
|
|
107
|
+
relatedPathConventions: actionHintsRaw.relatedPathConventions.slice(0, COMPACT_CAPS.relatedPathConventions),
|
|
108
|
+
}
|
|
109
|
+
: actionHintsRaw;
|
|
69
110
|
// Pipelines: prefer ranker output, then verb fallback for context-only.
|
|
70
111
|
const rankedPipelines = ranking.pipelines.slice(0, 3).map((p) => ({
|
|
71
112
|
pipelineId: p.item.id,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"task-ranker.d.ts","sourceRoot":"","sources":["../src/task-ranker.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAC3D,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAC/D,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAC/D,OAAO,KAAK,EAAE,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAElE;;;;;;;;GAQG;AAEH,MAAM,WAAW,WAAW,CAAC,CAAC;IAC5B,IAAI,EAAE,CAAC,CAAC;IACR,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,EAAE,CAAC;CACnB;
|
|
1
|
+
{"version":3,"file":"task-ranker.d.ts","sourceRoot":"","sources":["../src/task-ranker.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAC3D,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAC/D,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAC/D,OAAO,KAAK,EAAE,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAElE;;;;;;;;GAQG;AAEH,MAAM,WAAW,WAAW,CAAC,CAAC;IAC5B,IAAI,EAAE,CAAC,CAAC;IACR,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,EAAE,CAAC;CACnB;AAmOD,wBAAgB,oBAAoB,CAClC,OAAO,EAAE,SAAS,eAAe,EAAE,EACnC,IAAI,EAAE,MAAM,GACX,WAAW,CAAC,eAAe,CAAC,EAAE,CAqBhC;AAGD,wBAAgB,aAAa,CAC3B,SAAS,EAAE,SAAS,mBAAmB,EAAE,EACzC,IAAI,EAAE,MAAM,GACX,WAAW,CAAC,mBAAmB,CAAC,EAAE,CAiBpC;AAGD,wBAAgB,mBAAmB,CACjC,KAAK,EAAE,SAAS,eAAe,EAAE,EACjC,IAAI,EAAE,MAAM,GACX,WAAW,CAAC,eAAe,CAAC,EAAE,CAEhC;AAGD,wBAAgB,aAAa,CAC3B,SAAS,EAAE,SAAS,mBAAmB,EAAE,EACzC,IAAI,EAAE,MAAM,GACX,WAAW,CAAC,mBAAmB,CAAC,EAAE,CAkCpC;AAGD,wBAAgB,WAAW,CACzB,OAAO,EAAE,SAAS,OAAO,EAAE,EAC3B,IAAI,EAAE,MAAM,EACZ,gBAAgB,EAAE,SAAS,MAAM,EAAE,GAClC,WAAW,CAAC,OAAO,CAAC,EAAE,CAgCxB;AAGD,MAAM,WAAW,cAAc;IAC7B,KAAK,EAAE,WAAW,CAAC,eAAe,CAAC,EAAE,CAAC;IACtC,KAAK,EAAE,WAAW,CAAC,eAAe,CAAC,EAAE,CAAC;IACtC,SAAS,EAAE,WAAW,CAAC,mBAAmB,CAAC,EAAE,CAAC;IAC9C,SAAS,EAAE,WAAW,CAAC,mBAAmB,CAAC,EAAE,CAAC;IAC9C,OAAO,EAAE,WAAW,CAAC,OAAO,CAAC,EAAE,CAAC;CACjC;AAED,wBAAgB,OAAO,CACrB,UAAU,EAAE;IACV,gBAAgB,EAAE,SAAS,eAAe,EAAE,CAAC;IAC7C,SAAS,EAAE,SAAS,mBAAmB,EAAE,CAAC;IAC1C,SAAS,EAAE,SAAS,mBAAmB,EAAE,CAAC;IAC1C,cAAc,EAAE;QAAE,IAAI,EAAE,MAAM,SAAS,OAAO,EAAE,CAAA;KAAE,CAAC;IACnD,SAAS,EAAE;QAAE,QAAQ,EAAE,SAAS,MAAM,EAAE,CAAA;KAAE,CAAC;IAC3C,WAAW,EAAE;QAAE,IAAI,EAAE,MAAM,SAAS,eAAe,EAAE,CAAA;KAAE,CAAC;IACxD,WAAW,EAAE;QAAE,IAAI,EAAE,MAAM,SAAS,eAAe,EAAE,CAAA;KAAE,CAAC;CACzD,EACD,IAAI,EAAE,MAAM,EACZ,KAAK,GAAE,MAAW,GACjB,cAAc,CAiEhB;AAGD,wBAAgB,aAAa,CAAC,CAAC,EAC7B,KAAK,EAAE,SAAS,WAAW,CAAC,CAAC,CAAC,EAAE,EAChC,QAAQ,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK,MAAM,EAC7B,KAAK,GAAE,MAAU,GAChB,MAAM,CAKR;AAED,uFAAuF;AACvF,YAAY,EAAE,eAAe,EAAE,CAAC"}
|
package/dist/task-ranker.js
CHANGED
|
@@ -29,33 +29,8 @@ const VERB_HINTS = [
|
|
|
29
29
|
// ── Domain hints (what *kind of thing* is being worked on) ──────────────
|
|
30
30
|
// These boost rules/templates/pipelines whose own `appliesWhen` or `tags`
|
|
31
31
|
// declare the same domain — much higher signal than verb hints alone for
|
|
32
|
-
// "create a
|
|
32
|
+
// "create a *service*" vs "add a *utility*".
|
|
33
33
|
const DOMAIN_HINTS = [
|
|
34
|
-
{
|
|
35
|
-
token: 'plugin',
|
|
36
|
-
appliesWhen: ['create-plugin', 'generate-plugin', 'plugin-dev', 'register-plugin'],
|
|
37
|
-
tags: ['plugin'],
|
|
38
|
-
},
|
|
39
|
-
{
|
|
40
|
-
token: 'defaults',
|
|
41
|
-
appliesWhen: ['register-defaults', 'create-defaults', 'plugin-defaults'],
|
|
42
|
-
tags: ['defaults'],
|
|
43
|
-
},
|
|
44
|
-
{
|
|
45
|
-
token: 'capability',
|
|
46
|
-
appliesWhen: ['create-capability', 'generate-capability'],
|
|
47
|
-
tags: ['capability'],
|
|
48
|
-
},
|
|
49
|
-
{
|
|
50
|
-
token: 'policy',
|
|
51
|
-
appliesWhen: ['create-policy', 'generate-policy'],
|
|
52
|
-
tags: ['policy'],
|
|
53
|
-
},
|
|
54
|
-
{
|
|
55
|
-
token: 'adapter',
|
|
56
|
-
appliesWhen: ['create-adapter', 'generate-adapter'],
|
|
57
|
-
tags: ['adapter'],
|
|
58
|
-
},
|
|
59
34
|
{
|
|
60
35
|
token: 'service',
|
|
61
36
|
appliesWhen: ['generate-service'],
|
|
@@ -81,11 +56,6 @@ const DOMAIN_HINTS = [
|
|
|
81
56
|
appliesWhen: ['generate-route'],
|
|
82
57
|
tags: ['http', 'routes', 'api'],
|
|
83
58
|
},
|
|
84
|
-
{
|
|
85
|
-
token: 'kernel',
|
|
86
|
-
appliesWhen: ['create-kernel-service'],
|
|
87
|
-
tags: ['kernel'],
|
|
88
|
-
},
|
|
89
59
|
];
|
|
90
60
|
function tokenize(s) {
|
|
91
61
|
return s
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"task-routing-hint-registry.d.ts","sourceRoot":"","sources":["../src/task-routing-hint-registry.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"task-routing-hint-registry.d.ts","sourceRoot":"","sources":["../src/task-routing-hint-registry.ts"],"names":[],"mappings":"AASA,OAAO,EAEL,KAAK,gBAAgB,EACtB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,2BAA2B,CAAC;AAGvE,eAAO,MAAM,iCAAiC,6CAA6C,CAAC;AAE5F,oBAAY,qBAAqB;IAC/B,KAAK,UAAU;IACf,IAAI,SAAS;IACb,OAAO,YAAY;CACpB;AAED,MAAM,WAAW,qBAAqB;IACpC,QAAQ,CAAC,IAAI,EAAE,gBAAgB,CAAC;IAChC,QAAQ,CAAC,MAAM,EAAE,qBAAqB,CAAC;IACvC,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;CAC7B;AAED,MAAM,WAAW,2BAA2B;IAC1C,QAAQ,CAAC,QAAQ,EAAE,MAAM,GAAG,SAAS,GAAG,OAAO,CAAC;IAChD,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;CAC1B;AA4BD,wBAAsB,oBAAoB,CACxC,UAAU,EAAE,qBAAqB,GAChC,OAAO,CAAC;IAAE,OAAO,EAAE,SAAS,qBAAqB,EAAE,CAAC;IAAC,MAAM,EAAE,SAAS,2BAA2B,EAAE,CAAA;CAAE,CAAC,CAoFxG;AAED,wBAAsB,oBAAoB,CACxC,UAAU,EAAE,qBAAqB,GAChC,OAAO,CAAC,SAAS,qBAAqB,EAAE,CAAC,CAG3C;AAED,wBAAsB,yBAAyB,CAC7C,UAAU,EAAE,qBAAqB,GAChC,OAAO,CAAC,SAAS,2BAA2B,EAAE,CAAC,CAGjD;AAED,MAAM,WAAW,uBAAuB;IACtC,QAAQ,CAAC,IAAI,EAAE,gBAAgB,CAAC;IAChC,QAAQ,CAAC,MAAM,EAAE,qBAAqB,CAAC;IACvC,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,OAAO,EAAE,SAAS,MAAM,EAAE,CAAC;CACrC;AAED,wBAAsB,kBAAkB,CACtC,UAAU,EAAE,qBAAqB,EACjC,IAAI,EAAE,MAAM,GACX,OAAO,CAAC,SAAS,uBAAuB,EAAE,CAAC,CA0C7C"}
|
|
@@ -1,11 +1,3 @@
|
|
|
1
|
-
var __rewriteRelativeImportExtension = (this && this.__rewriteRelativeImportExtension) || function (path, preserveJsx) {
|
|
2
|
-
if (typeof path === "string" && /^\.\.?\//.test(path)) {
|
|
3
|
-
return path.replace(/\.(tsx)$|((?:\.d)?)((?:\.[^./]+?)?)\.([cm]?)ts$/i, function (m, tsx, d, ext, cm) {
|
|
4
|
-
return tsx ? preserveJsx ? ".jsx" : ".js" : d && (!ext || !cm) ? m : (d + ext + "." + cm.toLowerCase() + "js");
|
|
5
|
-
});
|
|
6
|
-
}
|
|
7
|
-
return path;
|
|
8
|
-
};
|
|
9
1
|
/**
|
|
10
2
|
* Task routing hint registry. Pack- and local-contributed task
|
|
11
3
|
* routing hints bias the recommender output toward project-specific
|
|
@@ -15,8 +7,8 @@ var __rewriteRelativeImportExtension = (this && this.__rewriteRelativeImportExte
|
|
|
15
7
|
*/
|
|
16
8
|
import { existsSync } from 'node:fs';
|
|
17
9
|
import * as nodePath from 'node:path';
|
|
18
|
-
import { pathToFileURL } from 'node:url';
|
|
19
10
|
import { validateTaskRoutingHint, } from '@shrkcrft/plugin-api';
|
|
11
|
+
import { importModuleViaLoader } from '@shrkcrft/core';
|
|
20
12
|
export const TASK_ROUTING_HINT_REGISTRY_SCHEMA = 'sharkcraft.task-routing-hint-registry/v1';
|
|
21
13
|
export var TaskRoutingHintSource;
|
|
22
14
|
(function (TaskRoutingHintSource) {
|
|
@@ -25,7 +17,7 @@ export var TaskRoutingHintSource;
|
|
|
25
17
|
TaskRoutingHintSource["Fixture"] = "fixture";
|
|
26
18
|
})(TaskRoutingHintSource || (TaskRoutingHintSource = {}));
|
|
27
19
|
async function importDefault(file) {
|
|
28
|
-
const mod = (await
|
|
20
|
+
const mod = (await importModuleViaLoader(file));
|
|
29
21
|
if (Array.isArray(mod.default))
|
|
30
22
|
return mod.default;
|
|
31
23
|
if (mod.default && typeof mod.default === 'object')
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"test-runner.d.ts","sourceRoot":"","sources":["../src/test-runner.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"test-runner.d.ts","sourceRoot":"","sources":["../src/test-runner.ts"],"names":[],"mappings":"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"}
|
package/dist/test-runner.js
CHANGED
|
@@ -1,24 +1,16 @@
|
|
|
1
|
-
var __rewriteRelativeImportExtension = (this && this.__rewriteRelativeImportExtension) || function (path, preserveJsx) {
|
|
2
|
-
if (typeof path === "string" && /^\.\.?\//.test(path)) {
|
|
3
|
-
return path.replace(/\.(tsx)$|((?:\.d)?)((?:\.[^./]+?)?)\.([cm]?)ts$/i, function (m, tsx, d, ext, cm) {
|
|
4
|
-
return tsx ? preserveJsx ? ".jsx" : ".js" : d && (!ext || !cm) ? m : (d + ext + "." + cm.toLowerCase() + "js");
|
|
5
|
-
});
|
|
6
|
-
}
|
|
7
|
-
return path;
|
|
8
|
-
};
|
|
9
1
|
import { existsSync } from 'node:fs';
|
|
10
2
|
import * as nodePath from 'node:path';
|
|
11
|
-
import { pathToFileURL } from 'node:url';
|
|
12
3
|
import { buildContext } from '@shrkcrft/context';
|
|
13
4
|
import { buildTaskPacket } from "./task-packet.js";
|
|
14
5
|
import { rankKnowledgeEntries } from "./task-ranker.js";
|
|
15
6
|
import { buildProjectOverview, renderOverviewText } from "./project-overview.js";
|
|
16
7
|
import { HELPERS } from "./helper-registry.js";
|
|
8
|
+
import { importModuleViaLoader } from '@shrkcrft/core';
|
|
17
9
|
async function importDefaultArray(absPath) {
|
|
18
10
|
if (!existsSync(absPath))
|
|
19
11
|
return [];
|
|
20
12
|
try {
|
|
21
|
-
const mod = (await
|
|
13
|
+
const mod = (await importModuleViaLoader(absPath));
|
|
22
14
|
return Array.isArray(mod.default) ? mod.default : [];
|
|
23
15
|
}
|
|
24
16
|
catch {
|
|
@@ -152,14 +144,17 @@ function buildMissingIncludeSuggestions(id, existsInRegistry, task) {
|
|
|
152
144
|
}
|
|
153
145
|
return [
|
|
154
146
|
`Entry "${id}" exists but did not make the context for task "${task}".`,
|
|
155
|
-
`Try adding domain-aligned appliesWhen values (
|
|
156
|
-
`Add task-relevant tags (
|
|
147
|
+
`Try adding domain-aligned appliesWhen values (generate-service / generate-utility / create-pipeline / …).`,
|
|
148
|
+
`Add task-relevant tags (service / utility / route / …).`,
|
|
157
149
|
`Reference the entry from a preset's includes.knowledgeIds / ruleIds so it ranks higher.`,
|
|
158
150
|
`Or raise its priority / shorten the title to include task-relevant tokens.`,
|
|
159
151
|
];
|
|
160
152
|
}
|
|
161
153
|
export function runAgentContractTest(inspection, test, registries) {
|
|
162
|
-
|
|
154
|
+
// Self-tests assert specific rules/templates appear for a task — they
|
|
155
|
+
// test semantics, not packet size. Opt out of the compact cap so the
|
|
156
|
+
// assertions see the full ranking.
|
|
157
|
+
const packet = buildTaskPacket(inspection, test.task, { maxTokens: 3500, compact: false });
|
|
163
158
|
const actualPipelines = packet.recommendedPipelines.map((p) => p.pipelineId);
|
|
164
159
|
const missingTemplates = (test.expectedTemplates ?? []).filter((id) => !packet.relevantTemplates.some((t) => t.id === id));
|
|
165
160
|
const missingRules = (test.expectedRules ?? []).filter((id) => !packet.relevantRules.some((r) => r.id === id));
|
|
@@ -227,7 +222,7 @@ export function runAgentContractTest(inspection, test, registries) {
|
|
|
227
222
|
suggestions: exists
|
|
228
223
|
? [
|
|
229
224
|
`Template "${id}" exists but the ranker did not place it in the top results.`,
|
|
230
|
-
'Add task-aligned tags/appliesWhen to the template (e.g. tags:["
|
|
225
|
+
'Add task-aligned tags/appliesWhen to the template (e.g. tags:["service"], appliesWhen:["generate-service"]).',
|
|
231
226
|
'Reference the template from a preset that matches the task profile (includes.templateIds).',
|
|
232
227
|
'Reference it from a pipeline step (`step.references`).',
|
|
233
228
|
]
|
|
@@ -245,8 +240,8 @@ export function runAgentContractTest(inspection, test, registries) {
|
|
|
245
240
|
suggestions: exists
|
|
246
241
|
? [
|
|
247
242
|
`Rule "${id}" exists but the ranker did not surface it for "${test.task}".`,
|
|
248
|
-
'Align its appliesWhen with the domain (e.g.
|
|
249
|
-
'Add domain tags (
|
|
243
|
+
'Align its appliesWhen with the domain (e.g. generate-service / generate-utility / create-pipeline).',
|
|
244
|
+
'Add domain tags (service / utility / route / pipeline).',
|
|
250
245
|
'Reference it from actionHints.relatedTemplates on a rule that *is* ranking, or include it in a preset.',
|
|
251
246
|
]
|
|
252
247
|
: [
|
|
@@ -477,7 +472,7 @@ async function importDefaultIdsArray(absPath) {
|
|
|
477
472
|
if (!existsSync(absPath))
|
|
478
473
|
return [];
|
|
479
474
|
try {
|
|
480
|
-
const mod = (await
|
|
475
|
+
const mod = (await importModuleViaLoader(absPath));
|
|
481
476
|
return Array.isArray(mod.default) ? mod.default : [];
|
|
482
477
|
}
|
|
483
478
|
catch {
|
|
@@ -17,7 +17,6 @@ export declare enum SearchResultKind {
|
|
|
17
17
|
ScaffoldPattern = "scaffold-pattern",
|
|
18
18
|
ContractTemplate = "contract-template",
|
|
19
19
|
MigrationProfile = "migration-profile",
|
|
20
|
-
PluginLifecycleProfile = "plugin-lifecycle-profile",
|
|
21
20
|
FeedbackRule = "feedback-rule",
|
|
22
21
|
TaskRoutingHint = "task-routing-hint",
|
|
23
22
|
Docs = "docs",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"universal-search.d.ts","sourceRoot":"","sources":["../src/universal-search.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"universal-search.d.ts","sourceRoot":"","sources":["../src/universal-search.ts"],"names":[],"mappings":"AAmBA,OAAO,EAAgC,KAAK,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAGhG,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,2BAA2B,CAAC;AAEvE,eAAO,MAAM,uBAAuB,mCAAmC,CAAC;AAExE,oBAAY,gBAAgB;IAC1B,OAAO,YAAY;IACnB,OAAO,aAAa;IACpB,SAAS,cAAc;IACvB,IAAI,SAAS;IACb,IAAI,SAAS;IACb,UAAU,eAAe;IACzB,QAAQ,aAAa;IACrB,MAAM,WAAW;IACjB,QAAQ,aAAa;IACrB,SAAS,cAAc;IACvB,MAAM,WAAW;IACjB,QAAQ,aAAa;IACrB,eAAe,qBAAqB;IACpC,gBAAgB,sBAAsB;IACtC,gBAAgB,sBAAsB;IACtC,YAAY,kBAAkB;IAC9B,eAAe,sBAAsB;IACrC,IAAI,SAAS;IACb,MAAM,WAAW;IACjB,MAAM,WAAW;CAClB;AAED,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,IAAI,EAAE,gBAAgB,CAAC;IAChC,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,MAAM,EAAE,SAAS,GAAG,OAAO,GAAG,MAAM,GAAG,SAAS,CAAC;IAC1D,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,OAAO,EAAE,SAAS,MAAM,EAAE,CAAC;IACpC,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;CAC/B;AAED,MAAM,WAAW,wBAAwB;IACvC,QAAQ,CAAC,WAAW,EAAE,SAAS,mBAAmB,EAAE,CAAC;IACrD,QAAQ,CAAC,QAAQ,EAAE,SAAS,mBAAmB,EAAE,CAAC;IAClD,QAAQ,CAAC,aAAa,EAAE,SAAS,mBAAmB,EAAE,CAAC;IACvD,QAAQ,CAAC,SAAS,EAAE,SAAS,mBAAmB,EAAE,CAAC;IACnD,QAAQ,CAAC,UAAU,EAAE,SAAS,mBAAmB,EAAE,CAAC;CACrD;AAED,MAAM,WAAW,sBAAsB;IACrC,QAAQ,CAAC,MAAM,EAAE,OAAO,uBAAuB,CAAC;IAChD,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,QAAQ,EAAE,wBAAwB,CAAC;IAC5C,QAAQ,CAAC,WAAW,EAAE,kBAAkB,CAAC;IACzC,QAAQ,CAAC,cAAc,EAAE,SAAS,MAAM,EAAE,CAAC;IAC3C,QAAQ,CAAC,eAAe,EAAE,SAAS,MAAM,EAAE,CAAC;CAC7C;AAED,MAAM,WAAW,uBAAuB;IACtC,QAAQ,CAAC,IAAI,CAAC,EAAE,gBAAgB,CAAC;IACjC,QAAQ,CAAC,MAAM,CAAC,EAAE,SAAS,GAAG,OAAO,GAAG,MAAM,GAAG,SAAS,CAAC;IAC3D,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,YAAY,CAAC,EAAE,OAAO,CAAC;IAChC,QAAQ,CAAC,WAAW,CAAC,EAAE,OAAO,CAAC;CAChC;AA+CD,wBAAsB,oBAAoB,CACxC,UAAU,EAAE,qBAAqB,EACjC,KAAK,EAAE,MAAM,EACb,OAAO,GAAE,uBAA4B,GACpC,OAAO,CAAC,sBAAsB,CAAC,CA4NjC;AAED,wBAAgB,yBAAyB,CAAC,MAAM,EAAE,sBAAsB,GAAG,MAAM,CAmDhF;AAED,wBAAgB,6BAA6B,CAAC,MAAM,EAAE,sBAAsB,GAAG,MAAM,CA8BpF"}
|
package/dist/universal-search.js
CHANGED
|
@@ -17,7 +17,6 @@ import { buildPackContributionsInventory } from "./pack-contributions-inventory.
|
|
|
17
17
|
import { listConventions } from "./convention-registry.js";
|
|
18
18
|
import { listPackHelpers } from "./pack-helper-registry.js";
|
|
19
19
|
import { explainTaskRouting } from "./task-routing-hint-registry.js";
|
|
20
|
-
import { listPluginLifecycleProfiles } from "./plugin-lifecycle-profile-registry.js";
|
|
21
20
|
import { uncertaintyReportFromSummary } from "./uncertainty-report.js";
|
|
22
21
|
import { buildUncertaintySummary } from "./uncertainty.js";
|
|
23
22
|
import { buildTaskPacket } from "./task-packet.js";
|
|
@@ -39,7 +38,6 @@ export var SearchResultKind;
|
|
|
39
38
|
SearchResultKind["ScaffoldPattern"] = "scaffold-pattern";
|
|
40
39
|
SearchResultKind["ContractTemplate"] = "contract-template";
|
|
41
40
|
SearchResultKind["MigrationProfile"] = "migration-profile";
|
|
42
|
-
SearchResultKind["PluginLifecycleProfile"] = "plugin-lifecycle-profile";
|
|
43
41
|
SearchResultKind["FeedbackRule"] = "feedback-rule";
|
|
44
42
|
SearchResultKind["TaskRoutingHint"] = "task-routing-hint";
|
|
45
43
|
SearchResultKind["Docs"] = "docs";
|
|
@@ -89,7 +87,6 @@ export async function buildUniversalSearch(inspection, query, options = {}) {
|
|
|
89
87
|
const conventions = await listConventions(inspection);
|
|
90
88
|
const helpers = await listPackHelpers(inspection);
|
|
91
89
|
const routing = await explainTaskRouting(inspection, q);
|
|
92
|
-
const lifecycle = await listPluginLifecycleProfiles(inspection);
|
|
93
90
|
const knowledgeEntries = inspection.knowledgeEntries;
|
|
94
91
|
const allHits = [];
|
|
95
92
|
// Knowledge
|
|
@@ -113,13 +110,6 @@ export async function buildUniversalSearch(inspection, query, options = {}) {
|
|
|
113
110
|
allHits.push(makeHit(SearchResultKind.Helper, h.helper.id, h.helper.title, h.source === 'pack' ? 'pack' : 'local', h.packageName, s, `shrk helper plan ${h.helper.id}`));
|
|
114
111
|
}
|
|
115
112
|
}
|
|
116
|
-
// Plugin lifecycle profiles
|
|
117
|
-
for (const p of lifecycle) {
|
|
118
|
-
const s = score(`${p.profile.id} ${p.profile.title} ${(p.profile.tags ?? []).join(' ')}`, q);
|
|
119
|
-
if (s.score > 0) {
|
|
120
|
-
allHits.push(makeHit(SearchResultKind.PluginLifecycleProfile, p.profile.id, p.profile.title, p.source === 'pack' ? 'pack' : 'local', p.packageName, s, `shrk plugin lifecycle profile ${p.profile.id}`));
|
|
121
|
-
}
|
|
122
|
-
}
|
|
123
113
|
// Pack contributions (catch-all for kinds we didn't iterate above)
|
|
124
114
|
for (const e of inv.entries) {
|
|
125
115
|
if (allHits.find((h) => h.id === e.id && String(h.kind) === e.kind))
|
|
@@ -140,7 +130,6 @@ export async function buildUniversalSearch(inspection, query, options = {}) {
|
|
|
140
130
|
decision: SearchResultKind.Decision,
|
|
141
131
|
'contract-template': SearchResultKind.ContractTemplate,
|
|
142
132
|
'migration-profile': SearchResultKind.MigrationProfile,
|
|
143
|
-
'plugin-lifecycle-profile': SearchResultKind.PluginLifecycleProfile,
|
|
144
133
|
'feedback-rule': SearchResultKind.FeedbackRule,
|
|
145
134
|
'task-routing-hint': SearchResultKind.TaskRoutingHint,
|
|
146
135
|
helper: SearchResultKind.Helper,
|
|
@@ -184,7 +173,6 @@ export async function buildUniversalSearch(inspection, query, options = {}) {
|
|
|
184
173
|
SearchResultKind.Policy,
|
|
185
174
|
SearchResultKind.ContractTemplate,
|
|
186
175
|
SearchResultKind.MigrationProfile,
|
|
187
|
-
SearchResultKind.PluginLifecycleProfile,
|
|
188
176
|
SearchResultKind.ScaffoldPattern,
|
|
189
177
|
SearchResultKind.FeedbackRule,
|
|
190
178
|
SearchResultKind.TaskRoutingHint,
|
package/dist/upgrade-advisor.js
CHANGED
|
@@ -60,7 +60,7 @@ function walkSchemas(dir, max) {
|
|
|
60
60
|
export function buildUpgradeAdvice(inspection, options = {}) {
|
|
61
61
|
const findings = [];
|
|
62
62
|
const detected = walkSchemas(nodePath.join(inspection.projectRoot, '.sharkcraft'), 600);
|
|
63
|
-
const fromVersion = options.from ?? '0.1.0-alpha.
|
|
63
|
+
const fromVersion = options.from ?? '0.1.0-alpha.2';
|
|
64
64
|
const toVersion = options.to ?? 'current';
|
|
65
65
|
// Heuristics: surface known evolving schemas.
|
|
66
66
|
if (detected['sharkcraft.repository-map/v1']) {
|
package/package.json
CHANGED
|
@@ -1,15 +1,16 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@shrkcrft/inspector",
|
|
3
|
-
"version": "0.1.0-alpha.
|
|
3
|
+
"version": "0.1.0-alpha.10",
|
|
4
4
|
"description": "SharkCraft inspector: project overview, doctor checks, AI-agent instructions.",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"author": "SharkCraft contributors",
|
|
7
7
|
"type": "module",
|
|
8
8
|
"main": "./dist/index.js",
|
|
9
|
-
"types": "./dist/index.d.ts",
|
|
9
|
+
"types": "./dist/index.d.d.ts",
|
|
10
10
|
"exports": {
|
|
11
11
|
".": {
|
|
12
12
|
"types": "./dist/index.d.ts",
|
|
13
|
+
"bun": "./src/index.ts",
|
|
13
14
|
"import": "./dist/index.js",
|
|
14
15
|
"default": "./dist/index.js"
|
|
15
16
|
}
|
|
@@ -21,12 +22,12 @@
|
|
|
21
22
|
],
|
|
22
23
|
"repository": {
|
|
23
24
|
"type": "git",
|
|
24
|
-
"url": "git+https://github.com/
|
|
25
|
+
"url": "git+https://github.com/shrkcrft/sharkcraft.git",
|
|
25
26
|
"directory": "packages/inspector"
|
|
26
27
|
},
|
|
27
|
-
"homepage": "https://github.com/
|
|
28
|
+
"homepage": "https://github.com/shrkcrft/sharkcraft",
|
|
28
29
|
"bugs": {
|
|
29
|
-
"url": "https://github.com/
|
|
30
|
+
"url": "https://github.com/shrkcrft/sharkcraft/issues"
|
|
30
31
|
},
|
|
31
32
|
"keywords": [
|
|
32
33
|
"sharkcraft",
|
|
@@ -41,22 +42,22 @@
|
|
|
41
42
|
"typecheck": "tsc --noEmit -p tsconfig.json"
|
|
42
43
|
},
|
|
43
44
|
"dependencies": {
|
|
44
|
-
"@shrkcrft/core": "^0.1.0-alpha.
|
|
45
|
-
"@shrkcrft/config": "^0.1.0-alpha.
|
|
46
|
-
"@shrkcrft/workspace": "^0.1.0-alpha.
|
|
47
|
-
"@shrkcrft/knowledge": "^0.1.0-alpha.
|
|
48
|
-
"@shrkcrft/rules": "^0.1.0-alpha.
|
|
49
|
-
"@shrkcrft/paths": "^0.1.0-alpha.
|
|
50
|
-
"@shrkcrft/templates": "^0.1.0-alpha.
|
|
51
|
-
"@shrkcrft/context": "^0.1.0-alpha.
|
|
52
|
-
"@shrkcrft/pipelines": "^0.1.0-alpha.
|
|
53
|
-
"@shrkcrft/packs": "^0.1.0-alpha.
|
|
54
|
-
"@shrkcrft/presets": "^0.1.0-alpha.
|
|
55
|
-
"@shrkcrft/boundaries": "^0.1.0-alpha.
|
|
56
|
-
"@shrkcrft/generator": "^0.1.0-alpha.
|
|
57
|
-
"@shrkcrft/importer": "^0.1.0-alpha.
|
|
58
|
-
"@shrkcrft/plugin-api": "^0.1.0-alpha.
|
|
59
|
-
"@shrkcrft/dashboard-api": "^0.1.0-alpha.
|
|
45
|
+
"@shrkcrft/core": "^0.1.0-alpha.10",
|
|
46
|
+
"@shrkcrft/config": "^0.1.0-alpha.10",
|
|
47
|
+
"@shrkcrft/workspace": "^0.1.0-alpha.10",
|
|
48
|
+
"@shrkcrft/knowledge": "^0.1.0-alpha.10",
|
|
49
|
+
"@shrkcrft/rules": "^0.1.0-alpha.10",
|
|
50
|
+
"@shrkcrft/paths": "^0.1.0-alpha.10",
|
|
51
|
+
"@shrkcrft/templates": "^0.1.0-alpha.10",
|
|
52
|
+
"@shrkcrft/context": "^0.1.0-alpha.10",
|
|
53
|
+
"@shrkcrft/pipelines": "^0.1.0-alpha.10",
|
|
54
|
+
"@shrkcrft/packs": "^0.1.0-alpha.10",
|
|
55
|
+
"@shrkcrft/presets": "^0.1.0-alpha.10",
|
|
56
|
+
"@shrkcrft/boundaries": "^0.1.0-alpha.10",
|
|
57
|
+
"@shrkcrft/generator": "^0.1.0-alpha.10",
|
|
58
|
+
"@shrkcrft/importer": "^0.1.0-alpha.10",
|
|
59
|
+
"@shrkcrft/plugin-api": "^0.1.0-alpha.10",
|
|
60
|
+
"@shrkcrft/dashboard-api": "^0.1.0-alpha.10",
|
|
60
61
|
"typescript": "^5.6.0"
|
|
61
62
|
},
|
|
62
63
|
"publishConfig": {
|
|
@@ -1,71 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Three-way merge for onboarding drafts.
|
|
3
|
-
*
|
|
4
|
-
* When `shrk onboard --write-drafts` re-runs against a project that has
|
|
5
|
-
* hand-edited drafts, the safe behaviour is to merge the new proposal
|
|
6
|
-
* against the user's current file and the snapshot we wrote last time:
|
|
7
|
-
*
|
|
8
|
-
* - base : `.sharkcraft/onboarding-drafts-snapshots/<file>` (what we
|
|
9
|
-
* wrote last). When absent, the merge degrades to a strict
|
|
10
|
-
* "matches proposal → no-op, otherwise conflict" rule.
|
|
11
|
-
* - ours : the current `sharkcraft/onboarding/<file>` content.
|
|
12
|
-
* - theirs : the freshly rendered proposal we are about to write.
|
|
13
|
-
*
|
|
14
|
-
* The merge always returns an intended `body`. The caller decides whether
|
|
15
|
-
* to write it (e.g. `abortOnConflict` keeps the file unchanged).
|
|
16
|
-
*/
|
|
17
|
-
export declare enum DraftMergeStatus {
|
|
18
|
-
/** File did not exist; the proposal was written verbatim. */
|
|
19
|
-
Created = "created",
|
|
20
|
-
/** Current file already matches the proposal — nothing to do. */
|
|
21
|
-
Unchanged = "unchanged",
|
|
22
|
-
/** Current file matches the snapshot; the proposal was applied. */
|
|
23
|
-
CleanUpdate = "clean-update",
|
|
24
|
-
/** Proposal matches the snapshot; the user's edits were kept. */
|
|
25
|
-
UserKept = "user-kept",
|
|
26
|
-
/** Disjoint single-region edits on both sides; auto-merged. */
|
|
27
|
-
AutoMerged = "auto-merged",
|
|
28
|
-
/** Both sides changed the same region — conflict markers emitted. */
|
|
29
|
-
Conflict = "conflict",
|
|
30
|
-
/** Both sides changed but `abortOnConflict` was set — file untouched. */
|
|
31
|
-
Aborted = "aborted"
|
|
32
|
-
}
|
|
33
|
-
export interface IDraftMergeOptions {
|
|
34
|
-
/** When true, return status=Aborted and leave the file unchanged on conflict. */
|
|
35
|
-
abortOnConflict?: boolean;
|
|
36
|
-
/** Header line in the `<<<<<<< ours` marker. Default 'ours'. */
|
|
37
|
-
oursLabel?: string;
|
|
38
|
-
/** Header line in the `>>>>>>> theirs` marker. Default 'incoming proposal'. */
|
|
39
|
-
theirsLabel?: string;
|
|
40
|
-
}
|
|
41
|
-
export interface IDraftMergeResult {
|
|
42
|
-
status: DraftMergeStatus;
|
|
43
|
-
/** What should be written. For Aborted, this is the unchanged `ours`. */
|
|
44
|
-
body: string;
|
|
45
|
-
/** Number of conflict regions in `body` (0 unless status=Conflict). */
|
|
46
|
-
conflictRegions: number;
|
|
47
|
-
}
|
|
48
|
-
/**
|
|
49
|
-
* Resolve the snapshot path for a given draft file.
|
|
50
|
-
*
|
|
51
|
-
* @param projectRoot Absolute repo root.
|
|
52
|
-
* @param draftPath Absolute path of the draft file.
|
|
53
|
-
*/
|
|
54
|
-
export declare function snapshotPathFor(projectRoot: string, draftPath: string): string;
|
|
55
|
-
export declare function readSnapshot(snapshotPath: string): string | null;
|
|
56
|
-
export declare function writeSnapshot(snapshotPath: string, body: string): void;
|
|
57
|
-
/**
|
|
58
|
-
* Three-way merge a single draft file.
|
|
59
|
-
*
|
|
60
|
-
* Truth table:
|
|
61
|
-
* - !exists(ours) → Created (body = theirs)
|
|
62
|
-
* - ours === theirs → Unchanged
|
|
63
|
-
* - base === null:
|
|
64
|
-
* - ours === theirs → Unchanged
|
|
65
|
-
* - otherwise → Conflict (or Aborted)
|
|
66
|
-
* - ours === base → CleanUpdate (body = theirs)
|
|
67
|
-
* - theirs === base → UserKept (body = ours)
|
|
68
|
-
* - otherwise → diff3Lines → AutoMerged | Conflict | Aborted
|
|
69
|
-
*/
|
|
70
|
-
export declare function threeWayMergeDraft(base: string | null, ours: string | null, theirs: string, options?: IDraftMergeOptions): IDraftMergeResult;
|
|
71
|
-
//# sourceMappingURL=onboarding-drafts-merge.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"onboarding-drafts-merge.d.ts","sourceRoot":"","sources":["../src/onboarding-drafts-merge.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAKH,oBAAY,gBAAgB;IAC1B,6DAA6D;IAC7D,OAAO,YAAY;IACnB,iEAAiE;IACjE,SAAS,cAAc;IACvB,mEAAmE;IACnE,WAAW,iBAAiB;IAC5B,iEAAiE;IACjE,QAAQ,cAAc;IACtB,+DAA+D;IAC/D,UAAU,gBAAgB;IAC1B,qEAAqE;IACrE,QAAQ,aAAa;IACrB,yEAAyE;IACzE,OAAO,YAAY;CACpB;AAED,MAAM,WAAW,kBAAkB;IACjC,iFAAiF;IACjF,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,gEAAgE;IAChE,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,+EAA+E;IAC/E,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,iBAAiB;IAChC,MAAM,EAAE,gBAAgB,CAAC;IACzB,yEAAyE;IACzE,IAAI,EAAE,MAAM,CAAC;IACb,uEAAuE;IACvE,eAAe,EAAE,MAAM,CAAC;CACzB;AAED;;;;;GAKG;AACH,wBAAgB,eAAe,CAAC,WAAW,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM,CAG9E;AAED,wBAAgB,YAAY,CAAC,YAAY,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAOhE;AAED,wBAAgB,aAAa,CAAC,YAAY,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI,CAGtE;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,kBAAkB,CAChC,IAAI,EAAE,MAAM,GAAG,IAAI,EACnB,IAAI,EAAE,MAAM,GAAG,IAAI,EACnB,MAAM,EAAE,MAAM,EACd,OAAO,GAAE,kBAAuB,GAC/B,iBAAiB,CAiBnB"}
|