@shrkcrft/inspector 0.1.0-alpha.2 → 0.1.0-alpha.21
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/agent-brief.d.ts.map +1 -1
- package/dist/agent-brief.js +59 -10
- package/dist/agent-contract-gate.d.ts.map +1 -1
- package/dist/agent-contract-gate.js +25 -2
- package/dist/agent-instructions.d.ts.map +1 -1
- package/dist/agent-instructions.js +11 -0
- package/dist/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 +181 -35
- 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 +4 -6
- package/dist/area-map.d.ts +0 -5
- package/dist/area-map.d.ts.map +1 -1
- package/dist/area-map.js +0 -10
- 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/changes-summary.d.ts.map +1 -1
- package/dist/changes-summary.js +20 -6
- package/dist/check-guardrail-globs.d.ts +16 -0
- package/dist/check-guardrail-globs.d.ts.map +1 -0
- package/dist/check-guardrail-globs.js +38 -0
- package/dist/code-intelligence-doctor.d.ts +21 -0
- package/dist/code-intelligence-doctor.d.ts.map +1 -0
- package/dist/code-intelligence-doctor.js +985 -0
- package/dist/command-recommender.d.ts.map +1 -1
- package/dist/command-recommender.js +23 -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 +5 -2
- package/dist/construct-registry.d.ts.map +1 -1
- package/dist/construct-registry.js +2 -10
- package/dist/contract-file-rule.d.ts +8 -0
- package/dist/contract-file-rule.d.ts.map +1 -1
- package/dist/contract-file-rule.js +8 -3
- package/dist/contract-template-registry.d.ts.map +1 -1
- package/dist/contract-template-registry.js +2 -10
- package/dist/contradictions.d.ts +8 -1
- package/dist/contradictions.d.ts.map +1 -1
- package/dist/contradictions.js +37 -35
- package/dist/convention-registry.d.ts.map +1 -1
- package/dist/convention-registry.js +2 -10
- package/dist/coverage-report.d.ts.map +1 -1
- package/dist/coverage-report.js +14 -1
- package/dist/dashboard/dashboard-knowledge.d.ts +8 -0
- package/dist/dashboard/dashboard-knowledge.d.ts.map +1 -0
- package/dist/dashboard/dashboard-knowledge.js +259 -0
- package/dist/decision-records.d.ts.map +1 -1
- package/dist/decision-records.js +5 -10
- package/dist/delegate-catalog.d.ts +45 -0
- package/dist/delegate-catalog.d.ts.map +1 -0
- package/dist/delegate-catalog.js +50 -0
- package/dist/delegate-doctor.d.ts +15 -0
- package/dist/delegate-doctor.d.ts.map +1 -0
- package/dist/delegate-doctor.js +36 -0
- package/dist/delegate-pack-recipes.d.ts +29 -0
- package/dist/delegate-pack-recipes.d.ts.map +1 -0
- package/dist/delegate-pack-recipes.js +77 -0
- package/dist/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 +15 -0
- package/dist/git-helpers.d.ts.map +1 -1
- package/dist/git-helpers.js +51 -4
- 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 +14 -7
- package/dist/index.d.ts +8 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +8 -2
- 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-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 +9 -66
- 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 +17 -29
- 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 +18 -2
- package/dist/pack-test-runner.js +2 -10
- package/dist/plan-review.d.ts.map +1 -1
- package/dist/plan-review.js +5 -10
- package/dist/plan-simulation.d.ts +13 -0
- package/dist/plan-simulation.d.ts.map +1 -1
- package/dist/plan-simulation.js +19 -28
- 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/profile-registry.d.ts +0 -1
- package/dist/profile-registry.d.ts.map +1 -1
- package/dist/profile-registry.js +4 -32
- 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/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/registry-lifecycle.d.ts +6 -0
- package/dist/registry-lifecycle.d.ts.map +1 -1
- package/dist/registry-lifecycle.js +137 -10
- package/dist/release-readiness.js +3 -3
- package/dist/repo-memory.d.ts.map +1 -1
- package/dist/repo-memory.js +3 -1
- package/dist/reposet.js +1 -1
- package/dist/repository-intelligence.d.ts.map +1 -1
- package/dist/repository-intelligence.js +7 -2
- package/dist/repository-knowledge-model.d.ts +1 -1
- package/dist/repository-knowledge-model.d.ts.map +1 -1
- package/dist/repository-stats.d.ts.map +1 -1
- package/dist/repository-stats.js +3 -1
- 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/review-packet.d.ts.map +1 -1
- package/dist/review-packet.js +14 -17
- package/dist/rule-drift.d.ts.map +1 -1
- package/dist/rule-drift.js +24 -9
- 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/schema-inventory.d.ts.map +1 -1
- package/dist/schema-inventory.js +3 -1
- 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 +14 -0
- package/dist/sharkcraft-inspector.d.ts.map +1 -1
- package/dist/sharkcraft-inspector.js +103 -1
- package/dist/start-here.d.ts +2 -2
- package/dist/start-here.d.ts.map +1 -1
- package/dist/start-here.js +16 -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 +59 -6
- 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/template-drift.d.ts +7 -0
- package/dist/template-drift.d.ts.map +1 -1
- package/dist/template-drift.js +14 -6
- package/dist/test-impact.d.ts.map +1 -1
- package/dist/test-impact.js +5 -2
- 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/why-file.js +66 -22
- package/package.json +18 -18
- 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":"agent-brief.d.ts","sourceRoot":"","sources":["../src/agent-brief.ts"],"names":[],"mappings":"AAAA,OAAO,EAAiB,KAAK,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAS3E,OAAO,EAAuB,KAAK,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAC3E,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,2BAA2B,CAAC;AAEvE,eAAO,MAAM,kBAAkB,8BAA8B,CAAC;AAE9D,oBAAY,SAAS;IACnB,OAAO,YAAY;IACnB,IAAI,SAAS;IACb,MAAM,WAAW;IACjB,cAAc,mBAAmB;IACjC,OAAO,YAAY;CACpB;AAED,MAAM,WAAW,gBAAgB;IAC/B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,SAAS,CAAC;IACjB,KAAK,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IAC1B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,gEAAgE;IAChE,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,kEAAkE;IAClE,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,2DAA2D;IAC3D,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB;;;OAGG;IACH,cAAc,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACzC;AAED,MAAM,WAAW,kBAAkB;IACjC,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,gBAAgB;IAC/B,kDAAkD;IAClD,IAAI,EAAE,MAAM,CAAC;IACb,8DAA8D;IAC9D,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,2CAA2C;IAC3C,aAAa,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,WAAW;IAC1B,MAAM,EAAE,OAAO,kBAAkB,CAAC;IAClC,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,SAAS,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,SAAS,kBAAkB,EAAE,CAAC;IACxC,2CAA2C;IAC3C,QAAQ,EAAE,MAAM,CAAC;IACjB,mCAAmC;IACnC,iBAAiB,EAAE,SAAS,MAAM,EAAE,CAAC;IACrC,kEAAkE;IAClE,MAAM,CAAC,EAAE,eAAe,CAAC;IACzB,oDAAoD;IACpD,QAAQ,CAAC,EAAE,eAAe,CAAC;IAC3B,8CAA8C;IAC9C,MAAM,EAAE;QACN,KAAK,EAAE,SAAS,MAAM,EAAE,CAAC;QACzB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;QACrB,MAAM,EAAE,OAAO,CAAC;QAChB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;QACxB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;KAC1B,CAAC;IACF,QAAQ,EAAE,SAAS,MAAM,EAAE,CAAC;IAC5B,sEAAsE;IACtE,kBAAkB,EAAE,MAAM,CAAC;IAC3B,iDAAiD;IACjD,MAAM,CAAC,EAAE,SAAS,gBAAgB,EAAE,CAAC;CACtC;
|
|
1
|
+
{"version":3,"file":"agent-brief.d.ts","sourceRoot":"","sources":["../src/agent-brief.ts"],"names":[],"mappings":"AAAA,OAAO,EAAiB,KAAK,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAS3E,OAAO,EAAuB,KAAK,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAC3E,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,2BAA2B,CAAC;AAEvE,eAAO,MAAM,kBAAkB,8BAA8B,CAAC;AAE9D,oBAAY,SAAS;IACnB,OAAO,YAAY;IACnB,IAAI,SAAS;IACb,MAAM,WAAW;IACjB,cAAc,mBAAmB;IACjC,OAAO,YAAY;CACpB;AAED,MAAM,WAAW,gBAAgB;IAC/B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,SAAS,CAAC;IACjB,KAAK,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IAC1B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,gEAAgE;IAChE,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,kEAAkE;IAClE,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,2DAA2D;IAC3D,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB;;;OAGG;IACH,cAAc,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACzC;AAED,MAAM,WAAW,kBAAkB;IACjC,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,gBAAgB;IAC/B,kDAAkD;IAClD,IAAI,EAAE,MAAM,CAAC;IACb,8DAA8D;IAC9D,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,2CAA2C;IAC3C,aAAa,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,WAAW;IAC1B,MAAM,EAAE,OAAO,kBAAkB,CAAC;IAClC,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,SAAS,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,SAAS,kBAAkB,EAAE,CAAC;IACxC,2CAA2C;IAC3C,QAAQ,EAAE,MAAM,CAAC;IACjB,mCAAmC;IACnC,iBAAiB,EAAE,SAAS,MAAM,EAAE,CAAC;IACrC,kEAAkE;IAClE,MAAM,CAAC,EAAE,eAAe,CAAC;IACzB,oDAAoD;IACpD,QAAQ,CAAC,EAAE,eAAe,CAAC;IAC3B,8CAA8C;IAC9C,MAAM,EAAE;QACN,KAAK,EAAE,SAAS,MAAM,EAAE,CAAC;QACzB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;QACrB,MAAM,EAAE,OAAO,CAAC;QAChB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;QACxB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;KAC1B,CAAC;IACF,QAAQ,EAAE,SAAS,MAAM,EAAE,CAAC;IAC5B,sEAAsE;IACtE,kBAAkB,EAAE,MAAM,CAAC;IAC3B,iDAAiD;IACjD,MAAM,CAAC,EAAE,SAAS,gBAAgB,EAAE,CAAC;CACtC;AA+XD,wBAAsB,eAAe,CACnC,UAAU,EAAE,qBAAqB,EACjC,KAAK,EAAE,gBAAgB,GACtB,OAAO,CAAC,WAAW,CAAC,CAyItB"}
|
package/dist/agent-brief.js
CHANGED
|
@@ -149,15 +149,23 @@ function pipelineSection(packet) {
|
|
|
149
149
|
function actionHintsSection(packet) {
|
|
150
150
|
const lines = [];
|
|
151
151
|
const h = packet.actionHints;
|
|
152
|
+
// h.commands is IActionHintCommand[] (objects with .command + optional
|
|
153
|
+
// .purpose); h.mcpTools is IActionHintMcpTool[] (.tool + .purpose).
|
|
154
|
+
// Earlier versions string-interpolated the whole object, producing
|
|
155
|
+
// `- [object Object]` in the rendered brief.
|
|
152
156
|
if (h.commands.length > 0) {
|
|
153
157
|
lines.push('**Commands:**');
|
|
154
|
-
for (const c of h.commands.slice(0, 5))
|
|
155
|
-
|
|
158
|
+
for (const c of h.commands.slice(0, 5)) {
|
|
159
|
+
const purpose = c.purpose ? ` — ${c.purpose}` : '';
|
|
160
|
+
lines.push(`- \`${c.command}\`${purpose}`);
|
|
161
|
+
}
|
|
156
162
|
}
|
|
157
163
|
if (h.mcpTools.length > 0) {
|
|
158
164
|
lines.push('**MCP tools:**');
|
|
159
|
-
for (const m of h.mcpTools.slice(0, 5))
|
|
160
|
-
|
|
165
|
+
for (const m of h.mcpTools.slice(0, 5)) {
|
|
166
|
+
const purpose = m.purpose ? ` — ${m.purpose}` : '';
|
|
167
|
+
lines.push(`- \`${m.tool}\`${purpose}`);
|
|
168
|
+
}
|
|
161
169
|
}
|
|
162
170
|
if (h.verificationCommands.length > 0) {
|
|
163
171
|
lines.push('**Verification:**');
|
|
@@ -233,8 +241,14 @@ function boundarySection(impact) {
|
|
|
233
241
|
}
|
|
234
242
|
return section('boundary', 'Boundary concerns', lines.join('\n'));
|
|
235
243
|
}
|
|
244
|
+
/**
|
|
245
|
+
* Compute the deduplicated suggested-commands list. The result lands
|
|
246
|
+
* in `IAgentBrief.suggestedCommands` (JSON contract preserved); a
|
|
247
|
+
* markdown section is rendered ONLY if the list isn't already
|
|
248
|
+
* covered by action-hints + verification (which it usually is — the
|
|
249
|
+
* duplication was a major source of the ~100-line brief bloat).
|
|
250
|
+
*/
|
|
236
251
|
function suggestedCommandsSection(impact, packet) {
|
|
237
|
-
const lines = [];
|
|
238
252
|
const commands = new Set();
|
|
239
253
|
for (const c of impact?.suggestedTestCommands ?? [])
|
|
240
254
|
commands.add(c);
|
|
@@ -242,10 +256,21 @@ function suggestedCommandsSection(impact, packet) {
|
|
|
242
256
|
commands.add(c);
|
|
243
257
|
for (const c of packet.recommendedCliCommands ?? [])
|
|
244
258
|
commands.add(c);
|
|
245
|
-
|
|
246
|
-
|
|
259
|
+
// Already-shown set: verification commands + action-hint commands
|
|
260
|
+
// that are about to render in the actionHintsSection. Anything in
|
|
261
|
+
// that set should NOT also appear in "Suggested commands".
|
|
262
|
+
const alreadyShown = new Set();
|
|
263
|
+
for (const v of packet.actionHints.verificationCommands ?? [])
|
|
264
|
+
alreadyShown.add(v);
|
|
265
|
+
for (const c of packet.actionHints.commands ?? [])
|
|
266
|
+
alreadyShown.add(c.command);
|
|
267
|
+
const uniqueNew = [...commands].filter((c) => !alreadyShown.has(c));
|
|
268
|
+
if (uniqueNew.length === 0) {
|
|
269
|
+
return { section: null, commands: [...commands] };
|
|
270
|
+
}
|
|
271
|
+
const lines = uniqueNew.slice(0, 10).map((c) => `- \`${c}\``);
|
|
247
272
|
return {
|
|
248
|
-
section: section('suggested-commands', 'Suggested commands', lines.join('\n')
|
|
273
|
+
section: section('suggested-commands', 'Suggested commands (not already listed above)', lines.join('\n')),
|
|
249
274
|
commands: [...commands],
|
|
250
275
|
};
|
|
251
276
|
}
|
|
@@ -313,12 +338,31 @@ async function qualitySection(inspection, baselineFile) {
|
|
|
313
338
|
];
|
|
314
339
|
return section('quality', 'Quality baseline', lines.join('\n'));
|
|
315
340
|
}
|
|
341
|
+
/**
|
|
342
|
+
* Empty-section detector. A section is "empty" when its body is just
|
|
343
|
+
* an italicized placeholder like `_None._` / `_No impact analysis
|
|
344
|
+
* available._` / `_No ownership data._`. Suppressing these compresses
|
|
345
|
+
* the typical brief from ~100 lines to ~40 — Claude doesn't need to
|
|
346
|
+
* read "Policy concerns: _None detected._" to make a decision.
|
|
347
|
+
*/
|
|
348
|
+
function isEmptyBody(body) {
|
|
349
|
+
const trimmed = body.trim();
|
|
350
|
+
if (!trimmed)
|
|
351
|
+
return true;
|
|
352
|
+
// Pure single-line italicized placeholder, e.g. `_None._` / `_No X data._`.
|
|
353
|
+
return /^_[^_]+_$/.test(trimmed);
|
|
354
|
+
}
|
|
316
355
|
function sectionsToMarkdown(task, mode, sections) {
|
|
317
356
|
const lines = [];
|
|
318
357
|
lines.push(`# SharkCraft brief: ${task || '(no task)'}`);
|
|
319
358
|
lines.push('');
|
|
320
|
-
|
|
359
|
+
// Mode only — timestamp adds noise to a "single page Claude reads
|
|
360
|
+
// first" doc. The IAgentBrief.generatedAt field still carries it
|
|
361
|
+
// for tooling that needs the timestamp.
|
|
362
|
+
lines.push(`_Mode: \`${mode}\`_`);
|
|
321
363
|
for (const s of sections) {
|
|
364
|
+
if (isEmptyBody(s.body))
|
|
365
|
+
continue;
|
|
322
366
|
lines.push('');
|
|
323
367
|
lines.push(`## ${s.title}`);
|
|
324
368
|
lines.push('');
|
|
@@ -398,7 +442,12 @@ export async function buildAgentBrief(inspection, input) {
|
|
|
398
442
|
}
|
|
399
443
|
// Always include suggested commands + safety.
|
|
400
444
|
const { section: cmdSection, commands } = suggestedCommandsSection(impact, packet);
|
|
401
|
-
|
|
445
|
+
// Only push when the section returns one — most briefs no longer
|
|
446
|
+
// include this section because everything it would list is already
|
|
447
|
+
// in action-hints / verification. The `commands` array still ships
|
|
448
|
+
// in IAgentBrief.suggestedCommands for tooling that consumes it.
|
|
449
|
+
if (cmdSection)
|
|
450
|
+
sections.push(cmdSection);
|
|
402
451
|
sections.push(safetySection());
|
|
403
452
|
// Apply per-section budgets when requested.
|
|
404
453
|
const trimmedSections = input.sectionBudgets && Object.keys(input.sectionBudgets).length > 0
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"agent-contract-gate.d.ts","sourceRoot":"","sources":["../src/agent-contract-gate.ts"],"names":[],"mappings":"AAYA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAE1D,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAOlE,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,2BAA2B,CAAC;AAEvE,eAAO,MAAM,8BAA8B,0CAA0C,CAAC;AACtF,eAAO,MAAM,0BAA0B,sCAAsC,CAAC;AAE9E,MAAM,WAAW,sBAAsB;IACrC,MAAM,EAAE,OAAO,8BAA8B,CAAC;IAC9C,6DAA6D;IAC7D,YAAY,EAAE,MAAM,CAAC;IACrB,kEAAkE;IAClE,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;IACnB,gDAAgD;IAChD,aAAa,EAAE,SAAS,MAAM,EAAE,CAAC;IACjC,uEAAuE;IACvE,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,sEAAsE;IACtE,SAAS,CAAC,EAAE;QACV,IAAI,EAAE,QAAQ,CAAC;QACf,IAAI,EAAE,MAAM,CAAC;QACb,QAAQ,EAAE,MAAM,CAAC;KAClB,CAAC;CACH;AAED,oBAAY,kBAAkB;IAC5B,IAAI,SAAS;IACb,gBAAgB,sBAAsB;IACtC,IAAI,SAAS;IACb,IAAI,SAAS;CACd;AAED,MAAM,WAAW,mBAAmB;IAClC,EAAE,EAAE,MAAM,CAAC;IACX,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,kBAAkB,CAAC;IAC3B,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,oBAAY,4BAA4B;IACtC,KAAK,UAAU;IACf,WAAW,iBAAiB;IAC5B,OAAO,YAAY;IACnB,QAAQ,cAAc;IACtB,MAAM,WAAW;CAClB;AAED,MAAM,WAAW,uBAAuB;IACtC,MAAM,EAAE,4BAA4B,CAAC;IACrC,oGAAoG;IACpG,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,mDAAmD;IACnD,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,wFAAwF;IACxF,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,sFAAsF;IACtF,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED,MAAM,WAAW,oBAAoB;IACnC,MAAM,EAAE,OAAO,0BAA0B,CAAC;IAC1C,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,SAAS,mBAAmB,EAAE,CAAC;IACtC,QAAQ,CAAC,EAAE,sBAAsB,CAAC;IAClC,cAAc,EAAE,QAAQ,GAAG,SAAS,GAAG,SAAS,GAAG,YAAY,GAAG,UAAU,GAAG,UAAU,GAAG,SAAS,CAAC;IACtG,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,+CAA+C;IAC/C,cAAc,CAAC,EAAE,uBAAuB,CAAC;IACzC,IAAI,EAAE,OAAO,CAAC;IACd,aAAa,EAAE,SAAS,MAAM,EAAE,CAAC;IACjC,SAAS,EAAE,SAAS,MAAM,EAAE,CAAC;IAC7B,cAAc,CAAC,EAAE,qBAAqB,CAAC;IACvC,KAAK,EAAE,SAAS,MAAM,EAAE,CAAC;CAC1B;AAED,MAAM,WAAW,qBAAqB;IACpC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,sEAAsE;IACtE,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;
|
|
1
|
+
{"version":3,"file":"agent-contract-gate.d.ts","sourceRoot":"","sources":["../src/agent-contract-gate.ts"],"names":[],"mappings":"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"}
|
|
@@ -31,12 +31,35 @@ export var ContractApprovalExpiryStatus;
|
|
|
31
31
|
ContractApprovalExpiryStatus["Absent"] = "absent";
|
|
32
32
|
})(ContractApprovalExpiryStatus || (ContractApprovalExpiryStatus = {}));
|
|
33
33
|
const APPROVAL_SECRET_ENV_DEFAULT = 'SHARKCRAFT_CONTRACT_SECRET';
|
|
34
|
+
/**
|
|
35
|
+
* Deterministic JSON: keys sorted at EVERY depth, keys/values JSON-quoted.
|
|
36
|
+
* Critically NOT `JSON.stringify(obj, keysArray)` — an array replacer is a key
|
|
37
|
+
* ALLOWLIST applied at every nesting level, which silently DROPS nested-object
|
|
38
|
+
* keys (e.g. `forbiddenFilesDetailed` rule fields) from the hash input, letting
|
|
39
|
+
* a contract be tampered in a nested field without changing its hash and
|
|
40
|
+
* bypassing approval binding.
|
|
41
|
+
*/
|
|
42
|
+
function canonicalJson(value) {
|
|
43
|
+
if (value === null || typeof value !== 'object')
|
|
44
|
+
return JSON.stringify(value);
|
|
45
|
+
if (Array.isArray(value))
|
|
46
|
+
return '[' + value.map((v) => canonicalJson(v)).join(',') + ']';
|
|
47
|
+
const keys = Object.keys(value).sort();
|
|
48
|
+
const parts = [];
|
|
49
|
+
for (const k of keys) {
|
|
50
|
+
const v = value[k];
|
|
51
|
+
if (v === undefined)
|
|
52
|
+
continue;
|
|
53
|
+
parts.push(JSON.stringify(k) + ':' + canonicalJson(v));
|
|
54
|
+
}
|
|
55
|
+
return '{' + parts.join(',') + '}';
|
|
56
|
+
}
|
|
34
57
|
function canonicalContractJson(contract) {
|
|
35
58
|
// Deterministic JSON for hashing — exclude `generatedAt` so hashes stay
|
|
36
59
|
// stable across re-builds of the same task.
|
|
37
60
|
const { generatedAt: _drop, ...rest } = contract;
|
|
38
61
|
void _drop;
|
|
39
|
-
return
|
|
62
|
+
return canonicalJson(rest);
|
|
40
63
|
}
|
|
41
64
|
export function computeContractHash(contract) {
|
|
42
65
|
const h = createHash('sha256');
|
|
@@ -46,7 +69,7 @@ export function computeContractHash(contract) {
|
|
|
46
69
|
function canonicalApprovalJson(a) {
|
|
47
70
|
const { signature: _drop, ...rest } = a;
|
|
48
71
|
void _drop;
|
|
49
|
-
return
|
|
72
|
+
return canonicalJson(rest);
|
|
50
73
|
}
|
|
51
74
|
export function signApproval(a, secret) {
|
|
52
75
|
const hmac = createHmac('sha256', secret);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"agent-instructions.d.ts","sourceRoot":"","sources":["../src/agent-instructions.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,kBAAkB,
|
|
1
|
+
{"version":3,"file":"agent-instructions.d.ts","sourceRoot":"","sources":["../src/agent-instructions.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,kBAAkB,QA+BvB,CAAC"}
|
|
@@ -9,6 +9,17 @@ Default behavior:
|
|
|
9
9
|
- For generation, list_templates → get_template → create_generation_plan (dry-run by default).
|
|
10
10
|
- Respect path conventions (list_path_conventions, get_path_convention).
|
|
11
11
|
|
|
12
|
+
Understand existing code before you edit (prefer the graph over grep — it returns path:line truth):
|
|
13
|
+
- Who calls / where is a symbol used? call get_graph_callers or code_find_usages (returns path:line).
|
|
14
|
+
- What breaks if I change this file/symbol? call get_graph_impact.
|
|
15
|
+
- What is the load-bearing code (change carefully / understand first)? call get_graph_hubs — most-referenced symbols + most-imported files.
|
|
16
|
+
- Is code A actually wired to code B? call get_graph_path (shortest import/call/implements path between two files or symbols — the deterministic "is X wired to Y").
|
|
17
|
+
- Is X wired / how does this file connect (incl. subtypes/supertypes)? call get_graph_context (get_graph_search to locate it first).
|
|
18
|
+
- These read an index; if a graph tool reports it's missing or stale, run \`shrk graph index\` once.
|
|
19
|
+
|
|
20
|
+
Save your tokens on MECHANICAL edits — delegate them to a local worker:
|
|
21
|
+
- For a repetitive, deterministically-verifiable edit (add a barrel export, ensure an import, a glob-scoped rename) call delegate_task to get a compact brief + the exact \`shrk delegate run\` command, then run it. The local model produces the edit, the engine verifies it (and auto-reverts on failure), and you pay for the brief + result — not for reading the whole file and writing the edit yourself. \`shrk delegate list\` shows what's delegatable.
|
|
22
|
+
|
|
12
23
|
Safety:
|
|
13
24
|
- Never write files unless the user explicitly asks; always prefer dry-run first.
|
|
14
25
|
- Never overwrite existing files unless the plan resolves all conflicts.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"agent-task-prep.d.ts","sourceRoot":"","sources":["../src/agent-task-prep.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"agent-task-prep.d.ts","sourceRoot":"","sources":["../src/agent-task-prep.ts"],"names":[],"mappings":"AAkBA,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,2BAA2B,CAAC;AAEvE,eAAO,MAAM,sBAAsB,kCAAkC,CAAC;AAEtE,MAAM,WAAW,oBAAoB;IACnC,QAAQ,CAAC,MAAM,EAAE,OAAO,sBAAsB,CAAC;IAC/C,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,WAAW,EAAE,SAAS,MAAM,EAAE,CAAC;IACxC,QAAQ,CAAC,UAAU,EAAE,MAAM,GAAG,QAAQ,GAAG,KAAK,CAAC;IAC/C,QAAQ,CAAC,cAAc,EAAE,SAAS,MAAM,EAAE,CAAC;IAC3C,QAAQ,CAAC,eAAe,EAAE,SAAS,MAAM,EAAE,CAAC;IAC5C,QAAQ,CAAC,kBAAkB,EAAE,SAAS,MAAM,EAAE,CAAC;IAC/C,QAAQ,CAAC,kBAAkB,EAAE,SAAS,MAAM,EAAE,CAAC;IAC/C,QAAQ,CAAC,kBAAkB,EAAE,SAAS,MAAM,EAAE,CAAC;IAC/C,QAAQ,CAAC,gBAAgB,EAAE,SAAS;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;IACpE,QAAQ,CAAC,mBAAmB,EAAE,SAAS;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;IACvE,QAAQ,CAAC,YAAY,EAAE,SAAS;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,SAAS,MAAM,EAAE,CAAA;KAAE,EAAE,CAAC;IAC5F,QAAQ,CAAC,WAAW,EAAE,SAAS,MAAM,EAAE,CAAC;IACxC,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;CACjC;AAED,wBAAsB,gBAAgB,CACpC,UAAU,EAAE,qBAAqB,EACjC,IAAI,EAAE,MAAM,GACX,OAAO,CAAC,oBAAoB,CAAC,CAoD/B"}
|
package/dist/agent-task-prep.js
CHANGED
|
@@ -13,7 +13,6 @@
|
|
|
13
13
|
* Read-only. Never writes; never executes commands.
|
|
14
14
|
*/
|
|
15
15
|
import { buildTaskPacket } from "./task-packet.js";
|
|
16
|
-
import { listPluginLifecycleProfiles } from "./plugin-lifecycle-profile-registry.js";
|
|
17
16
|
import { listConventions } from "./convention-registry.js";
|
|
18
17
|
import { listTaskRoutingHints, explainTaskRouting } from "./task-routing-hint-registry.js";
|
|
19
18
|
import { buildUncertaintySummary } from "./uncertainty.js";
|
|
@@ -21,7 +20,6 @@ export const AGENT_TASK_PREP_SCHEMA = 'sharkcraft.agent-task-prep/v1';
|
|
|
21
20
|
export async function prepareAgentTask(inspection, task) {
|
|
22
21
|
const packet = buildTaskPacket(inspection, task);
|
|
23
22
|
const uncertaintyReport = buildUncertaintySummary(packet);
|
|
24
|
-
const lifecycle = await listPluginLifecycleProfiles(inspection);
|
|
25
23
|
const conventions = await listConventions(inspection);
|
|
26
24
|
const routing = await explainTaskRouting(inspection, task);
|
|
27
25
|
await listTaskRoutingHints(inspection); // warm cache
|
|
@@ -60,7 +58,7 @@ export async function prepareAgentTask(inspection, task) {
|
|
|
60
58
|
inspectionCommands,
|
|
61
59
|
generationCommands,
|
|
62
60
|
validationCommands,
|
|
63
|
-
relevantProfiles:
|
|
61
|
+
relevantProfiles: [],
|
|
64
62
|
relevantConventions: conventions.slice(0, 5).map((e) => ({ id: e.convention.id, title: e.convention.title })),
|
|
65
63
|
routingHints: routing.slice(0, 5).map((m) => ({ id: m.hint.id, title: m.hint.title, reasons: m.reasons })),
|
|
66
64
|
safetyNotes: [
|
package/dist/ai-readiness.d.ts
CHANGED
|
@@ -1,30 +1,105 @@
|
|
|
1
1
|
import type { ISharkcraftInspection } from './sharkcraft-inspector.js';
|
|
2
|
+
/**
|
|
3
|
+
* Per-dimension applies-to status.
|
|
4
|
+
*
|
|
5
|
+
* - `core` — dimension applies to this workspace shape; counted in the
|
|
6
|
+
* aggregate score.
|
|
7
|
+
* - `advisory` — dimension applies but is not load-bearing for the
|
|
8
|
+
* shape; shown in output, NOT counted in the aggregate, and does NOT
|
|
9
|
+
* produce a recommendation. Lets the user see "you could add this"
|
|
10
|
+
* without dragging the score down for a perfectly-shaped repo.
|
|
11
|
+
* - `n/a-for-shape` — dimension is irrelevant to this workspace shape
|
|
12
|
+
* (e.g. "templates" for a CLI library that doesn't scaffold
|
|
13
|
+
* anything). Hidden from default output, NOT counted, NO
|
|
14
|
+
* recommendation. Surfaced with `--show-na`.
|
|
15
|
+
*/
|
|
16
|
+
export type DimensionAppliesTo = 'core' | 'advisory' | 'n/a-for-shape';
|
|
2
17
|
export interface IReadinessDimension {
|
|
3
18
|
id: string;
|
|
4
19
|
title: string;
|
|
5
20
|
/** 0–10 score. */
|
|
6
21
|
score: number;
|
|
7
|
-
/** Weight applied to the score in the final aggregate. */
|
|
22
|
+
/** Weight applied to the score in the final aggregate (only used when applies === 'core'). */
|
|
8
23
|
weight: number;
|
|
9
24
|
/** Free-form note explaining the score. */
|
|
10
25
|
note: string;
|
|
26
|
+
/** Does this dimension apply to the detected workspace shape? */
|
|
27
|
+
applies: DimensionAppliesTo;
|
|
28
|
+
/** When applies !== 'core', a one-line reason the dimension was skipped. */
|
|
29
|
+
appliesReason?: string;
|
|
11
30
|
}
|
|
12
31
|
export type ReadinessGrade = 'excellent' | 'good' | 'partial' | 'poor';
|
|
32
|
+
/**
|
|
33
|
+
* One of four binary verdicts surfaced in the doctor output. Replaces
|
|
34
|
+
* the older "look at the 0-100 score" UX with a clear yes/no for the
|
|
35
|
+
* two questions users actually want answered.
|
|
36
|
+
*/
|
|
37
|
+
export interface IReadinessVerdicts {
|
|
38
|
+
/** Can an AI agent rely on shrk to apply changes safely? */
|
|
39
|
+
readyForAgentWrites: boolean;
|
|
40
|
+
/** Can an AI agent use shrk's read-only surface (context / task)? */
|
|
41
|
+
readyForAgentReads: boolean;
|
|
42
|
+
/** Concrete things blocking `readyForAgentWrites`. */
|
|
43
|
+
blockers: readonly string[];
|
|
44
|
+
}
|
|
13
45
|
export interface IReadinessReport {
|
|
14
|
-
/** 0..100 weighted score. */
|
|
46
|
+
/** 0..100 weighted score, counting only `core` dimensions. */
|
|
15
47
|
score: number;
|
|
16
48
|
grade: ReadinessGrade;
|
|
17
49
|
dimensions: IReadinessDimension[];
|
|
18
|
-
/** Up to 5 prioritized actions to improve the score. */
|
|
50
|
+
/** Up to 5 prioritized actions to improve the score (only from core dims). */
|
|
19
51
|
topRecommendations: string[];
|
|
52
|
+
/** Honest binary verdicts that don't depend on softcap scoring. */
|
|
53
|
+
verdicts: IReadinessVerdicts;
|
|
54
|
+
/** Detected workspace shape — drives which dimensions count as core. */
|
|
55
|
+
workspaceShape: IWorkspaceShape;
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* Coarse classification of the workspace, used to decide which readiness
|
|
59
|
+
* dimensions are load-bearing. Derived from `WorkspaceProfile[]`.
|
|
60
|
+
*/
|
|
61
|
+
export interface IWorkspaceShape {
|
|
62
|
+
/** Best-effort one-line description of the shape. */
|
|
63
|
+
label: string;
|
|
64
|
+
/** True if the workspace publishes a library (no user-facing scaffolding). */
|
|
65
|
+
isLibrary: boolean;
|
|
66
|
+
/** True if the workspace runs a service (HTTP / queue / daemon). */
|
|
67
|
+
isService: boolean;
|
|
68
|
+
/** True if the workspace is a monorepo (Nx / Turborepo / pnpm-workspaces). */
|
|
69
|
+
isMonorepo: boolean;
|
|
70
|
+
/** True if the workspace owns end-user code (Angular app / Next.js app / Nest service / generic frontend / backend). */
|
|
71
|
+
isApplication: boolean;
|
|
20
72
|
}
|
|
21
73
|
/**
|
|
22
|
-
* Deterministic
|
|
23
|
-
*
|
|
24
|
-
*
|
|
25
|
-
*
|
|
26
|
-
*
|
|
27
|
-
*
|
|
74
|
+
* Deterministic AI-readiness report.
|
|
75
|
+
*
|
|
76
|
+
* Replaces the original "single 0-100 score" UX with a shape-aware
|
|
77
|
+
* report. Each dimension is classified as:
|
|
78
|
+
*
|
|
79
|
+
* - `core` — counts in the aggregate score; produces a recommendation
|
|
80
|
+
* when below threshold.
|
|
81
|
+
* - `advisory` — shown but doesn't drag the score down; no
|
|
82
|
+
* recommendation. Used for dimensions that are nice-to-have but
|
|
83
|
+
* not load-bearing for the detected workspace shape (e.g. docs in
|
|
84
|
+
* a CLI library).
|
|
85
|
+
* - `n/a-for-shape` — irrelevant to this workspace; hidden by
|
|
86
|
+
* default. Lets a CLI library skip "add templates" without
|
|
87
|
+
* manually suppressing every release.
|
|
88
|
+
*
|
|
89
|
+
* Two binary verdicts ride alongside the score:
|
|
90
|
+
* - `readyForAgentWrites` — every gate an autonomous agent would need
|
|
91
|
+
* before issuing `shrk apply` (config + cli-only safety + clean
|
|
92
|
+
* doctor).
|
|
93
|
+
* - `readyForAgentReads` — every gate a read-only agent (e.g. an MCP
|
|
94
|
+
* context lookup) would need (knowledge entries loaded + doctor
|
|
95
|
+
* clean).
|
|
96
|
+
*
|
|
97
|
+
* Numerical penalties stay explicit:
|
|
98
|
+
* - Quantity-only "stuff a registry full of entries" is capped via softCap.
|
|
99
|
+
* - Duplicate-id warnings reduce data-quality dimension.
|
|
100
|
+
* - Placeholder docs (TODO / TBD / "fill in") reduce docs dimension.
|
|
101
|
+
* - Critical/high workflow entries missing actionHints reduce safety dim.
|
|
102
|
+
* - Doctor health stays a hard gate.
|
|
28
103
|
*/
|
|
29
104
|
export declare function buildAiReadinessReport(inspection: ISharkcraftInspection): IReadinessReport;
|
|
30
105
|
//# sourceMappingURL=ai-readiness.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ai-readiness.d.ts","sourceRoot":"","sources":["../src/ai-readiness.ts"],"names":[],"mappings":"
|
|
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"}
|