@dzhechkov/harness-core 0.3.19 → 0.3.20

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.
@@ -7,6 +7,7 @@
7
7
  *
8
8
  * @packageDocumentation
9
9
  */
10
+ import { type CostEstimate } from './cost-scoring.js';
10
11
  /** A single benchmark check result. */
11
12
  export interface BenchmarkCheck {
12
13
  readonly id: string;
@@ -23,6 +24,8 @@ export interface BenchmarkScore {
23
24
  readonly total: number;
24
25
  readonly passRate: number;
25
26
  readonly grade: 'A' | 'B' | 'C' | 'D' | 'F';
27
+ /** Static cost band inferred from the skill's declared model usage. */
28
+ readonly cost: CostEstimate;
26
29
  }
27
30
  /** Result of benchmarking one or more skills. */
28
31
  export interface BenchmarkReport {
@@ -1 +1 @@
1
- {"version":3,"file":"benchmark.d.ts","sourceRoot":"","sources":["../src/benchmark.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAKH,uCAAuC;AACvC,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC;IACzB,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CACtC;AAED,0CAA0C;AAC1C,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,MAAM,EAAE,SAAS,cAAc,EAAE,CAAC;IAC3C,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,KAAK,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;CAC7C;AAED,iDAAiD;AACjD,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,MAAM,EAAE,SAAS,cAAc,EAAE,CAAC;IAC3C,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAC;CAClC;AAED,mDAAmD;AACnD,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,MAAM,EAAE,cAAc,CAAC;IAChC,QAAQ,CAAC,MAAM,EAAE,cAAc,CAAC;IAChC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,WAAW,EAAE,SAAS;QAAE,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC;QAAC,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAA;KAAE,EAAE,CAAC;CAC5G;AAUD,gEAAgE;AAChE,wBAAgB,cAAc,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,cAAc,CAsGhF;AAED,iCAAiC;AACjC,wBAAgB,eAAe,CAAC,SAAS,EAAE;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,MAAM,CAAA;CAAE,EAAE,GAAG,eAAe,CAUzF;AAED,uCAAuC;AACvC,wBAAgB,aAAa,CAC3B,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EACnC,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAClC,aAAa,CAiBf"}
1
+ {"version":3,"file":"benchmark.d.ts","sourceRoot":"","sources":["../src/benchmark.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAKH,OAAO,EAAqB,KAAK,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAEzE,uCAAuC;AACvC,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC;IACzB,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CACtC;AAED,0CAA0C;AAC1C,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,MAAM,EAAE,SAAS,cAAc,EAAE,CAAC;IAC3C,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,KAAK,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;IAC5C,uEAAuE;IACvE,QAAQ,CAAC,IAAI,EAAE,YAAY,CAAC;CAC7B;AAED,iDAAiD;AACjD,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,MAAM,EAAE,SAAS,cAAc,EAAE,CAAC;IAC3C,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAC;CAClC;AAED,mDAAmD;AACnD,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,MAAM,EAAE,cAAc,CAAC;IAChC,QAAQ,CAAC,MAAM,EAAE,cAAc,CAAC;IAChC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,WAAW,EAAE,SAAS;QAAE,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC;QAAC,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAA;KAAE,EAAE,CAAC;CAC5G;AAUD,gEAAgE;AAChE,wBAAgB,cAAc,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,cAAc,CAsGhF;AAED,iCAAiC;AACjC,wBAAgB,eAAe,CAAC,SAAS,EAAE;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,MAAM,CAAA;CAAE,EAAE,GAAG,eAAe,CAUzF;AAED,uCAAuC;AACvC,wBAAgB,aAAa,CAC3B,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EACnC,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAClC,aAAa,CAiBf"}
package/dist/benchmark.js CHANGED
@@ -9,6 +9,7 @@
9
9
  */
10
10
  import { existsSync, readFileSync, statSync } from 'node:fs';
11
11
  import { join } from 'node:path';
12
+ import { estimateSkillCost } from './cost-scoring.js';
12
13
  function gradeFromRate(rate) {
13
14
  if (rate >= 90)
14
15
  return 'A';
@@ -30,7 +31,7 @@ export function benchmarkSkill(skillDir, skillId) {
30
31
  if (!skillMdExists) {
31
32
  return {
32
33
  skillId, skillDir, checks, passed: 0, total: checks.length,
33
- passRate: 0, grade: 'F',
34
+ passRate: 0, grade: 'F', cost: estimateSkillCost(''),
34
35
  };
35
36
  }
36
37
  const content = readFileSync(skillMdPath, 'utf-8');
@@ -98,7 +99,7 @@ export function benchmarkSkill(skillDir, skillId) {
98
99
  const passRate = Math.round((passed / checks.length) * 100);
99
100
  return {
100
101
  skillId, skillDir, checks, passed, total: checks.length,
101
- passRate, grade: gradeFromRate(passRate),
102
+ passRate, grade: gradeFromRate(passRate), cost: estimateSkillCost(content),
102
103
  };
103
104
  }
104
105
  /** Benchmark multiple skills. */
@@ -1 +1 @@
1
- {"version":3,"file":"benchmark.js","sourceRoot":"","sources":["../src/benchmark.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"benchmark.js","sourceRoot":"","sources":["../src/benchmark.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,119 @@
1
+ /**
2
+ * Cost-as-first-class-metric for skill benchmarking (BTO).
3
+ *
4
+ * Inspired by Princeton HAL harness (https://github.com/princeton-pli/hal-harness),
5
+ * which treats the cost-performance tradeoff as a first-class evaluation axis
6
+ * rather than scoring accuracy alone.
7
+ *
8
+ * Two layers:
9
+ * 1. Runtime cost accounting — normalize provider token-usage formats into a
10
+ * single shape, price it against a per-token table (with cached-read
11
+ * discounts), and combine with a quality score to get cost-efficiency.
12
+ * 2. Static cost estimation — infer an a-priori cost band from a skill's
13
+ * SKILL.md content (model tiers it invokes, number of LLM layers/judges),
14
+ * so BTO can flag expensive skills before running them.
15
+ *
16
+ * @packageDocumentation
17
+ */
18
+ /** Per-token prices (USD) for a model, split by token role. */
19
+ export interface ModelPricing {
20
+ /** Price per uncached input (prompt) token. */
21
+ readonly prompt: number;
22
+ /** Price per output (completion) token. */
23
+ readonly completion: number;
24
+ /** Price per cached-read input token (typically ~10% of prompt). */
25
+ readonly cachedInput: number;
26
+ /** Price per cache-creation (write) token (typically ~125% of prompt). */
27
+ readonly cacheCreation: number;
28
+ }
29
+ /**
30
+ * Per-token model pricing (USD), normalized to price-per-token (not per-million).
31
+ * Keys are matched case-insensitively against a prefix of the model id, so
32
+ * `claude-opus-4-6-20250...` resolves to the `claude-opus` entry.
33
+ */
34
+ export declare const MODEL_PRICES: Readonly<Record<string, ModelPricing>>;
35
+ /**
36
+ * Resolve a model id to its pricing by longest-prefix match.
37
+ * `bedrock/anthropic.claude-3-opus...` → strips a leading `provider/` segment.
38
+ */
39
+ export declare function pricingFor(modelId: string): ModelPricing;
40
+ /**
41
+ * Provider-agnostic token usage. Cross-provider shapes are normalized into
42
+ * these four buckets (mirrors HAL's `_normalize_usage` 4-tuple).
43
+ */
44
+ export interface NormalizedUsage {
45
+ /** Uncached input (prompt) tokens. */
46
+ readonly promptTokens: number;
47
+ /** Input tokens served from cache (discounted). */
48
+ readonly cachedInputTokens: number;
49
+ /** Input tokens written to cache (premium). */
50
+ readonly cacheCreationTokens: number;
51
+ /** Output (completion) tokens. */
52
+ readonly completionTokens: number;
53
+ }
54
+ /** Raw usage object from any supported provider SDK. */
55
+ export type RawUsage = Record<string, unknown>;
56
+ /**
57
+ * Normalize a provider usage object into {@link NormalizedUsage}.
58
+ *
59
+ * Supported shapes:
60
+ * - OpenAI: `prompt_tokens`, `completion_tokens`,
61
+ * `prompt_tokens_details.cached_tokens`
62
+ * - Anthropic: `input_tokens`, `output_tokens`,
63
+ * `cache_read_input_tokens`, `cache_creation_input_tokens`
64
+ * - Bedrock: `inputTokens`, `outputTokens`
65
+ *
66
+ * Cached/cache-creation tokens are reported by Anthropic *separately* from
67
+ * `input_tokens`, so the prompt bucket is the raw input count as given.
68
+ * For OpenAI, `cached_tokens` is a subset of `prompt_tokens`, so it is
69
+ * subtracted out to avoid double-counting.
70
+ */
71
+ export declare function normalizeUsage(raw: RawUsage): NormalizedUsage;
72
+ /** Dollar cost of a normalized usage against a model's pricing. */
73
+ export declare function usageCost(usage: NormalizedUsage, modelId: string): number;
74
+ /** A single billed LLM call within a skill invocation. */
75
+ export interface CallRecord {
76
+ readonly model: string;
77
+ readonly usage: RawUsage;
78
+ }
79
+ /** Cost breakdown for a full skill invocation (many calls). */
80
+ export interface InvocationCost {
81
+ /** Total USD cost of the invocation. */
82
+ readonly totalUsd: number;
83
+ /** Total tokens (all buckets) across all calls. */
84
+ readonly totalTokens: number;
85
+ /** Number of billed calls. */
86
+ readonly calls: number;
87
+ /** Per-model cost breakdown. */
88
+ readonly byModel: Readonly<Record<string, number>>;
89
+ }
90
+ /** Aggregate cost across all calls of one skill invocation. */
91
+ export declare function invocationCost(records: readonly CallRecord[]): InvocationCost;
92
+ /**
93
+ * Cost-efficiency = quality per dollar.
94
+ *
95
+ * @param qualityScore A 0–10 BTO quality score (L1/L2 average).
96
+ * @param costUsd Dollar cost of the invocation that produced that quality.
97
+ * @returns Quality points per US dollar. `Infinity` when cost is 0 (free path).
98
+ */
99
+ export declare function costEfficiency(qualityScore: number, costUsd: number): number;
100
+ /** Static cost band inferred from a skill's declared model usage. */
101
+ export interface CostEstimate {
102
+ /** Cost level derived from model tiers + LLM layer count. */
103
+ readonly level: 'free' | 'low' | 'medium' | 'high';
104
+ /** Relative cost units (haiku = 1, sonnet = 4, opus = 20) summed across layers. */
105
+ readonly relativeUnits: number;
106
+ /** Detected per-tier call counts. */
107
+ readonly tiers: {
108
+ readonly haiku: number;
109
+ readonly sonnet: number;
110
+ readonly opus: number;
111
+ };
112
+ }
113
+ /**
114
+ * Estimate a skill's cost band from its SKILL.md content by counting how many
115
+ * times it routes work to each model tier. Used by BTO's BENCHMARK layer to
116
+ * flag expensive skills before any LLM call is made.
117
+ */
118
+ export declare function estimateSkillCost(skillContent: string): CostEstimate;
119
+ //# sourceMappingURL=cost-scoring.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cost-scoring.d.ts","sourceRoot":"","sources":["../src/cost-scoring.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAIH,+DAA+D;AAC/D,MAAM,WAAW,YAAY;IAC3B,+CAA+C;IAC/C,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,2CAA2C;IAC3C,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,oEAAoE;IACpE,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,0EAA0E;IAC1E,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;CAChC;AAmBD;;;;GAIG;AACH,eAAO,MAAM,YAAY,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,YAAY,CAAC,CAiB/D,CAAC;AAKF;;;GAGG;AACH,wBAAgB,UAAU,CAAC,OAAO,EAAE,MAAM,GAAG,YAAY,CAYxD;AAID;;;GAGG;AACH,MAAM,WAAW,eAAe;IAC9B,sCAAsC;IACtC,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,mDAAmD;IACnD,QAAQ,CAAC,iBAAiB,EAAE,MAAM,CAAC;IACnC,+CAA+C;IAC/C,QAAQ,CAAC,mBAAmB,EAAE,MAAM,CAAC;IACrC,kCAAkC;IAClC,QAAQ,CAAC,gBAAgB,EAAE,MAAM,CAAC;CACnC;AAED,wDAAwD;AACxD,MAAM,MAAM,QAAQ,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;AAM/C;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,cAAc,CAAC,GAAG,EAAE,QAAQ,GAAG,eAAe,CA6B7D;AAED,mEAAmE;AACnE,wBAAgB,SAAS,CAAC,KAAK,EAAE,eAAe,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,CAQzE;AAID,0DAA0D;AAC1D,MAAM,WAAW,UAAU;IACzB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,KAAK,EAAE,QAAQ,CAAC;CAC1B;AAED,+DAA+D;AAC/D,MAAM,WAAW,cAAc;IAC7B,wCAAwC;IACxC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,mDAAmD;IACnD,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,8BAA8B;IAC9B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,gCAAgC;IAChC,QAAQ,CAAC,OAAO,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;CACpD;AAED,+DAA+D;AAC/D,wBAAgB,cAAc,CAAC,OAAO,EAAE,SAAS,UAAU,EAAE,GAAG,cAAc,CAgB7E;AAED;;;;;;GAMG;AACH,wBAAgB,cAAc,CAAC,YAAY,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,CAG5E;AAID,qEAAqE;AACrE,MAAM,WAAW,YAAY;IAC3B,6DAA6D;IAC7D,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,KAAK,GAAG,QAAQ,GAAG,MAAM,CAAC;IACnD,mFAAmF;IACnF,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,qCAAqC;IACrC,QAAQ,CAAC,KAAK,EAAE;QACd,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;QACvB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;QACxB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;KACvB,CAAC;CACH;AAKD;;;;GAIG;AACH,wBAAgB,iBAAiB,CAAC,YAAY,EAAE,MAAM,GAAG,YAAY,CAsBpE"}
@@ -0,0 +1,191 @@
1
+ /**
2
+ * Cost-as-first-class-metric for skill benchmarking (BTO).
3
+ *
4
+ * Inspired by Princeton HAL harness (https://github.com/princeton-pli/hal-harness),
5
+ * which treats the cost-performance tradeoff as a first-class evaluation axis
6
+ * rather than scoring accuracy alone.
7
+ *
8
+ * Two layers:
9
+ * 1. Runtime cost accounting — normalize provider token-usage formats into a
10
+ * single shape, price it against a per-token table (with cached-read
11
+ * discounts), and combine with a quality score to get cost-efficiency.
12
+ * 2. Static cost estimation — infer an a-priori cost band from a skill's
13
+ * SKILL.md content (model tiers it invokes, number of LLM layers/judges),
14
+ * so BTO can flag expensive skills before running them.
15
+ *
16
+ * @packageDocumentation
17
+ */
18
+ /**
19
+ * Build a {@link ModelPricing} from a base prompt + completion price.
20
+ *
21
+ * @param cacheReadFactor Discount on cached-read input tokens relative to the
22
+ * prompt price. Anthropic ≈ 0.1 (90% off); OpenAI ≈ 0.5 (50% off). Cache-write
23
+ * (creation) premium is an Anthropic concept (125%); OpenAI reports no
24
+ * cache-creation tokens so the multiplier is never exercised there.
25
+ */
26
+ function priced(prompt, completion, cacheReadFactor = 0.1) {
27
+ return {
28
+ prompt,
29
+ completion,
30
+ cachedInput: prompt * cacheReadFactor,
31
+ cacheCreation: prompt * 1.25,
32
+ };
33
+ }
34
+ /**
35
+ * Per-token model pricing (USD), normalized to price-per-token (not per-million).
36
+ * Keys are matched case-insensitively against a prefix of the model id, so
37
+ * `claude-opus-4-6-20250...` resolves to the `claude-opus` entry.
38
+ */
39
+ export const MODEL_PRICES = {
40
+ // Anthropic — Claude 4.x family (USD per token; e.g. Opus $5/$25 per Mtok)
41
+ 'claude-opus': priced(5 / 1e6, 25 / 1e6),
42
+ 'claude-sonnet': priced(3 / 1e6, 15 / 1e6),
43
+ 'claude-haiku': priced(1 / 1e6, 5 / 1e6),
44
+ // OpenAI (cached input is 50% off, not Anthropic's 90% — pass 0.5)
45
+ 'gpt-4o': priced(2.5 / 1e6, 10 / 1e6, 0.5),
46
+ 'gpt-4o-mini': priced(0.15 / 1e6, 0.6 / 1e6, 0.5),
47
+ 'gpt-4.1': priced(2 / 1e6, 8 / 1e6, 0.5),
48
+ 'o3': priced(2 / 1e6, 8 / 1e6, 0.5),
49
+ // Bedrock-hosted Claude 4.x (same list price as first-party)
50
+ 'anthropic.claude-opus': priced(5 / 1e6, 25 / 1e6),
51
+ 'anthropic.claude-sonnet': priced(3 / 1e6, 15 / 1e6),
52
+ 'anthropic.claude-haiku': priced(1 / 1e6, 5 / 1e6),
53
+ // Bedrock-hosted legacy Claude-3 (legacy list price)
54
+ 'anthropic.claude-3-opus': priced(15 / 1e6, 75 / 1e6),
55
+ 'anthropic.claude-3-sonnet': priced(3 / 1e6, 15 / 1e6),
56
+ };
57
+ /** Fallback pricing when a model id matches no known prefix (assume sonnet-class). */
58
+ const FALLBACK_PRICING = priced(3 / 1e6, 15 / 1e6);
59
+ /**
60
+ * Resolve a model id to its pricing by longest-prefix match.
61
+ * `bedrock/anthropic.claude-3-opus...` → strips a leading `provider/` segment.
62
+ */
63
+ export function pricingFor(modelId) {
64
+ // Strip a leading `provider/` segment (e.g. `bedrock/`, `us-east-1/`).
65
+ const id = modelId.toLowerCase().replace(/^[a-z0-9-]+\//, '');
66
+ let best;
67
+ let bestLen = 0;
68
+ for (const [key, price] of Object.entries(MODEL_PRICES)) {
69
+ if (id.startsWith(key) && key.length > bestLen) {
70
+ best = price;
71
+ bestLen = key.length;
72
+ }
73
+ }
74
+ return best ?? FALLBACK_PRICING;
75
+ }
76
+ function num(v) {
77
+ return typeof v === 'number' && Number.isFinite(v) ? v : 0;
78
+ }
79
+ /**
80
+ * Normalize a provider usage object into {@link NormalizedUsage}.
81
+ *
82
+ * Supported shapes:
83
+ * - OpenAI: `prompt_tokens`, `completion_tokens`,
84
+ * `prompt_tokens_details.cached_tokens`
85
+ * - Anthropic: `input_tokens`, `output_tokens`,
86
+ * `cache_read_input_tokens`, `cache_creation_input_tokens`
87
+ * - Bedrock: `inputTokens`, `outputTokens`
88
+ *
89
+ * Cached/cache-creation tokens are reported by Anthropic *separately* from
90
+ * `input_tokens`, so the prompt bucket is the raw input count as given.
91
+ * For OpenAI, `cached_tokens` is a subset of `prompt_tokens`, so it is
92
+ * subtracted out to avoid double-counting.
93
+ */
94
+ export function normalizeUsage(raw) {
95
+ // Anthropic
96
+ if ('input_tokens' in raw || 'output_tokens' in raw) {
97
+ return {
98
+ promptTokens: num(raw.input_tokens),
99
+ cachedInputTokens: num(raw.cache_read_input_tokens),
100
+ cacheCreationTokens: num(raw.cache_creation_input_tokens),
101
+ completionTokens: num(raw.output_tokens),
102
+ };
103
+ }
104
+ // Bedrock
105
+ if ('inputTokens' in raw || 'outputTokens' in raw) {
106
+ return {
107
+ promptTokens: num(raw.inputTokens),
108
+ cachedInputTokens: 0,
109
+ cacheCreationTokens: 0,
110
+ completionTokens: num(raw.outputTokens),
111
+ };
112
+ }
113
+ // OpenAI (default)
114
+ const details = (raw.prompt_tokens_details ?? {});
115
+ const cached = num(details.cached_tokens);
116
+ const prompt = num(raw.prompt_tokens);
117
+ return {
118
+ promptTokens: Math.max(0, prompt - cached),
119
+ cachedInputTokens: cached,
120
+ cacheCreationTokens: 0,
121
+ completionTokens: num(raw.completion_tokens),
122
+ };
123
+ }
124
+ /** Dollar cost of a normalized usage against a model's pricing. */
125
+ export function usageCost(usage, modelId) {
126
+ const p = pricingFor(modelId);
127
+ return (usage.promptTokens * p.prompt +
128
+ usage.cachedInputTokens * p.cachedInput +
129
+ usage.cacheCreationTokens * p.cacheCreation +
130
+ usage.completionTokens * p.completion);
131
+ }
132
+ /** Aggregate cost across all calls of one skill invocation. */
133
+ export function invocationCost(records) {
134
+ const byModel = {};
135
+ let totalUsd = 0;
136
+ let totalTokens = 0;
137
+ for (const rec of records) {
138
+ const usage = normalizeUsage(rec.usage);
139
+ const cost = usageCost(usage, rec.model);
140
+ totalUsd += cost;
141
+ totalTokens +=
142
+ usage.promptTokens +
143
+ usage.cachedInputTokens +
144
+ usage.cacheCreationTokens +
145
+ usage.completionTokens;
146
+ byModel[rec.model] = (byModel[rec.model] ?? 0) + cost;
147
+ }
148
+ return { totalUsd, totalTokens, calls: records.length, byModel };
149
+ }
150
+ /**
151
+ * Cost-efficiency = quality per dollar.
152
+ *
153
+ * @param qualityScore A 0–10 BTO quality score (L1/L2 average).
154
+ * @param costUsd Dollar cost of the invocation that produced that quality.
155
+ * @returns Quality points per US dollar. `Infinity` when cost is 0 (free path).
156
+ */
157
+ export function costEfficiency(qualityScore, costUsd) {
158
+ if (costUsd <= 0)
159
+ return qualityScore > 0 ? Infinity : 0;
160
+ return qualityScore / costUsd;
161
+ }
162
+ /** Relative cost weight per model tier (haiku baseline = 1). */
163
+ const TIER_UNITS = { haiku: 1, sonnet: 4, opus: 20 };
164
+ /**
165
+ * Estimate a skill's cost band from its SKILL.md content by counting how many
166
+ * times it routes work to each model tier. Used by BTO's BENCHMARK layer to
167
+ * flag expensive skills before any LLM call is made.
168
+ */
169
+ export function estimateSkillCost(skillContent) {
170
+ const lower = skillContent.toLowerCase();
171
+ const count = (re) => (lower.match(re) ?? []).length;
172
+ const tiers = {
173
+ haiku: count(/\bhaiku\b/g),
174
+ sonnet: count(/\bsonnet\b/g),
175
+ opus: count(/\bopus\b/g),
176
+ };
177
+ const relativeUnits = tiers.haiku * TIER_UNITS.haiku +
178
+ tiers.sonnet * TIER_UNITS.sonnet +
179
+ tiers.opus * TIER_UNITS.opus;
180
+ let level;
181
+ if (relativeUnits === 0)
182
+ level = 'free';
183
+ else if (relativeUnits <= 8)
184
+ level = 'low';
185
+ else if (relativeUnits <= 40)
186
+ level = 'medium';
187
+ else
188
+ level = 'high';
189
+ return { level, relativeUnits, tiers };
190
+ }
191
+ //# sourceMappingURL=cost-scoring.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cost-scoring.js","sourceRoot":"","sources":["../src/cost-scoring.ts"],"names":[],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -32,6 +32,8 @@ export type { InstalledSkill, UpgradeCheck, UpgradeReport } from './upgrade.js';
32
32
  export type { PublishResult, PublishReport } from './publish.js';
33
33
  export { computeRiskScore } from './risk-scoring.js';
34
34
  export type { RiskScore, RiskThresholds } from './risk-scoring.js';
35
+ export { MODEL_PRICES, pricingFor, normalizeUsage, usageCost, invocationCost, costEfficiency, estimateSkillCost, } from './cost-scoring.js';
36
+ export type { ModelPricing, NormalizedUsage, RawUsage, CallRecord, InvocationCost, CostEstimate, } from './cost-scoring.js';
35
37
  export { importEcc } from './import-ecc.js';
36
38
  export type { ImportEccReport, ImportEccOptions, ImportedSkill } from './import-ecc.js';
37
39
  export type { RegistryEntry, Registry } from './registry.js';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,yDAAyD;AACzD,eAAO,MAAM,oBAAoB,UAAU,CAAC;AAE5C,cAAc,aAAa,CAAC;AAC5B,cAAc,YAAY,CAAC;AAC3B,cAAc,cAAc,CAAC;AAC7B,cAAc,iBAAiB,CAAC;AAChC,cAAc,gBAAgB,CAAC;AAC/B,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,YAAY,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AAC/E,OAAO,EAAE,aAAa,EAAE,gBAAgB,EAAE,sBAAsB,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AAClH,YAAY,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,eAAe,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AACtH,OAAO,EAAE,cAAc,EAAE,eAAe,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAChF,OAAO,EAAE,aAAa,EAAE,cAAc,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AAChF,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAC3C,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AACtC,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAC7C,YAAY,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAClD,YAAY,EAAE,YAAY,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AACvE,YAAY,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAClE,YAAY,EAAE,oBAAoB,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAC;AAChF,OAAO,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AACjE,OAAO,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AACnD,YAAY,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AACxE,OAAO,EAAE,iBAAiB,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAChE,YAAY,EAAE,cAAc,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAChF,YAAY,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AACjE,OAAO,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AACrD,YAAY,EAAE,SAAS,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACnE,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,YAAY,EAAE,eAAe,EAAE,gBAAgB,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AACxF,YAAY,EAAE,aAAa,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAC7D,YAAY,EAAE,cAAc,EAAE,cAAc,EAAE,eAAe,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,yDAAyD;AACzD,eAAO,MAAM,oBAAoB,UAAU,CAAC;AAE5C,cAAc,aAAa,CAAC;AAC5B,cAAc,YAAY,CAAC;AAC3B,cAAc,cAAc,CAAC;AAC7B,cAAc,iBAAiB,CAAC;AAChC,cAAc,gBAAgB,CAAC;AAC/B,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,YAAY,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AAC/E,OAAO,EAAE,aAAa,EAAE,gBAAgB,EAAE,sBAAsB,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AAClH,YAAY,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,eAAe,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AACtH,OAAO,EAAE,cAAc,EAAE,eAAe,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAChF,OAAO,EAAE,aAAa,EAAE,cAAc,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AAChF,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAC3C,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AACtC,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAC7C,YAAY,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAClD,YAAY,EAAE,YAAY,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AACvE,YAAY,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAClE,YAAY,EAAE,oBAAoB,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAC;AAChF,OAAO,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AACjE,OAAO,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AACnD,YAAY,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AACxE,OAAO,EAAE,iBAAiB,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAChE,YAAY,EAAE,cAAc,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAChF,YAAY,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AACjE,OAAO,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AACrD,YAAY,EAAE,SAAS,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACnE,OAAO,EACL,YAAY,EACZ,UAAU,EACV,cAAc,EACd,SAAS,EACT,cAAc,EACd,cAAc,EACd,iBAAiB,GAClB,MAAM,mBAAmB,CAAC;AAC3B,YAAY,EACV,YAAY,EACZ,eAAe,EACf,QAAQ,EACR,UAAU,EACV,cAAc,EACd,YAAY,GACb,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,YAAY,EAAE,eAAe,EAAE,gBAAgB,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AACxF,YAAY,EAAE,aAAa,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAC7D,YAAY,EAAE,cAAc,EAAE,cAAc,EAAE,eAAe,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC"}
package/dist/index.js CHANGED
@@ -22,5 +22,6 @@ export { discoverPackages, publishPackages } from './publish.js';
22
22
  export { fetchAllDownloads } from './downloads.js';
23
23
  export { discoverInstalled, checkUpgrades } from './upgrade.js';
24
24
  export { computeRiskScore } from './risk-scoring.js';
25
+ export { MODEL_PRICES, pricingFor, normalizeUsage, usageCost, invocationCost, costEfficiency, estimateSkillCost, } from './cost-scoring.js';
25
26
  export { importEcc } from './import-ecc.js';
26
27
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,yDAAyD;AACzD,MAAM,CAAC,MAAM,oBAAoB,GAAG,OAAO,CAAC;AAE5C,cAAc,aAAa,CAAC;AAC5B,cAAc,YAAY,CAAC;AAC3B,cAAc,cAAc,CAAC;AAC7B,cAAc,iBAAiB,CAAC;AAChC,cAAc,gBAAgB,CAAC;AAC/B,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAEhD,OAAO,EAAE,aAAa,EAAE,gBAAgB,EAAE,sBAAsB,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AAElH,OAAO,EAAE,cAAc,EAAE,eAAe,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAChF,OAAO,EAAE,aAAa,EAAE,cAAc,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AAChF,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAC3C,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AACtC,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAK7C,OAAO,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AACjE,OAAO,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AAEnD,OAAO,EAAE,iBAAiB,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAGhE,OAAO,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAErD,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,yDAAyD;AACzD,MAAM,CAAC,MAAM,oBAAoB,GAAG,OAAO,CAAC;AAE5C,cAAc,aAAa,CAAC;AAC5B,cAAc,YAAY,CAAC;AAC3B,cAAc,cAAc,CAAC;AAC7B,cAAc,iBAAiB,CAAC;AAChC,cAAc,gBAAgB,CAAC;AAC/B,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAEhD,OAAO,EAAE,aAAa,EAAE,gBAAgB,EAAE,sBAAsB,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AAElH,OAAO,EAAE,cAAc,EAAE,eAAe,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAChF,OAAO,EAAE,aAAa,EAAE,cAAc,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AAChF,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAC3C,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AACtC,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAK7C,OAAO,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AACjE,OAAO,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AAEnD,OAAO,EAAE,iBAAiB,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAGhE,OAAO,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAErD,OAAO,EACL,YAAY,EACZ,UAAU,EACV,cAAc,EACd,SAAS,EACT,cAAc,EACd,cAAc,EACd,iBAAiB,GAClB,MAAM,mBAAmB,CAAC;AAS3B,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC"}
package/dist/setup.d.ts CHANGED
@@ -24,6 +24,8 @@ export interface SetupOptions {
24
24
  readonly noMemory?: boolean | undefined;
25
25
  readonly noPretrain?: boolean | undefined;
26
26
  readonly force?: boolean | undefined;
27
+ /** Also deploy the operating-instructions "driver" skill + agent docs. */
28
+ readonly installDriver?: boolean | undefined;
27
29
  }
28
30
  /** Setup result. */
29
31
  export interface SetupResult {
@@ -38,6 +40,5 @@ export interface SetupStep {
38
40
  readonly status: 'done' | 'skipped' | 'error';
39
41
  readonly detail: string;
40
42
  }
41
- /** Run full environment setup. */
42
43
  export declare function runSetup(opts: SetupOptions): SetupResult;
43
44
  //# sourceMappingURL=setup.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"setup.d.ts","sourceRoot":"","sources":["../src/setup.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAKH,2BAA2B;AAC3B,MAAM,MAAM,aAAa,GAAG,OAAO,GAAG,SAAS,CAAC;AAEhD,qBAAqB;AACrB,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACrC,QAAQ,CAAC,MAAM,CAAC,EAAE,aAAa,GAAG,SAAS,CAAC;IAC5C,QAAQ,CAAC,OAAO,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;IACvC,QAAQ,CAAC,QAAQ,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;IACxC,QAAQ,CAAC,UAAU,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;IAC1C,QAAQ,CAAC,KAAK,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;CACtC;AAED,oBAAoB;AACpB,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,KAAK,EAAE,SAAS,SAAS,EAAE,CAAC;IACrC,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;CAC1B;AAED,2BAA2B;AAC3B,MAAM,WAAW,SAAS;IACxB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,GAAG,OAAO,CAAC;IAC9C,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;CACzB;AA6ED,kCAAkC;AAClC,wBAAgB,QAAQ,CAAC,IAAI,EAAE,YAAY,GAAG,WAAW,CAwJxD"}
1
+ {"version":3,"file":"setup.d.ts","sourceRoot":"","sources":["../src/setup.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAKH,2BAA2B;AAC3B,MAAM,MAAM,aAAa,GAAG,OAAO,GAAG,SAAS,CAAC;AAEhD,qBAAqB;AACrB,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACrC,QAAQ,CAAC,MAAM,CAAC,EAAE,aAAa,GAAG,SAAS,CAAC;IAC5C,QAAQ,CAAC,OAAO,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;IACvC,QAAQ,CAAC,QAAQ,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;IACxC,QAAQ,CAAC,UAAU,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;IAC1C,QAAQ,CAAC,KAAK,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;IACrC,0EAA0E;IAC1E,QAAQ,CAAC,aAAa,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;CAC9C;AAED,oBAAoB;AACpB,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,KAAK,EAAE,SAAS,SAAS,EAAE,CAAC;IACrC,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;CAC1B;AAED,2BAA2B;AAC3B,MAAM,WAAW,SAAS;IACxB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,GAAG,OAAO,CAAC;IAC9C,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;CACzB;AAqMD,wBAAgB,QAAQ,CAAC,IAAI,EAAE,YAAY,GAAG,WAAW,CA8JxD"}
package/dist/setup.js CHANGED
@@ -86,6 +86,123 @@ function isAgentdbAvailable() {
86
86
  }
87
87
  }
88
88
  /** Run full environment setup. */
89
+ /** Marker that brackets the dz-harness section in a shared CLAUDE.md/AGENTS.md. */
90
+ const DRIVER_MARKER_START = '<!-- dz-harness-driver:start -->';
91
+ const DRIVER_MARKER_END = '<!-- dz-harness-driver:end -->';
92
+ /**
93
+ * Operating instructions for a coding agent that should *drive* the dz CLI
94
+ * correctly. Inspired by Visa VVAH `--install-agents`: the toolkit ships its own
95
+ * "how to operate me" doc so agents use the CLI as intended rather than guessing.
96
+ */
97
+ function generateDriverInstructions() {
98
+ return `# Operating dz-harness-hub (CLI driver)
99
+
100
+ You have the \`dz\` CLI (\`@dzhechkov/harness-cli\`) available. It manages cross-platform
101
+ AI skills (the agentskills.io \`SKILL.md\` format) across Claude Code, Codex, OpenCode,
102
+ Hermes, and OpenClaude.
103
+
104
+ ## Core commands
105
+
106
+ | Command | Use it when |
107
+ |---------|-------------|
108
+ | \`dz recommend "<task>"\` | The user describes a task — suggests the right skills/preset/npx package. Start here. |
109
+ | \`dz setup --target <t> [--preset <p>] [--memory agentdb]\` | Bootstrap a project: config, hooks, learning memory. |
110
+ | \`dz init --target <t> [--preset <p>] [--select id,id]\` | Install skills into a project for a platform. |
111
+ | \`dz benchmark <skill-dir>\` | Score a skill (L0 structural checks, grade A–F, cost band). |
112
+ | \`dz pretrain\` | Detect the project's tech stack and pre-load relevant skills. |
113
+ | \`dz scout [--deep]\` | Discover new skill sources across the ecosystem. |
114
+ | \`dz import-ecc\` | Import skills from an ECC repo. |
115
+
116
+ ## Rules for driving this CLI
117
+
118
+ 1. **Do NOT hand-edit \`SKILL.md\` files to make a benchmark pass** — fix the underlying
119
+ structure (missing frontmatter, sections, schema) instead.
120
+ 2. **Do NOT hand-write \`.dz/config.json\`** — run \`dz setup\` and let it generate config.
121
+ 3. **Skills are agentskills.io format** — YAML frontmatter (name, description, trust_tier,
122
+ validation) + a Markdown body with a Protocol and Anti-Patterns section.
123
+ 4. **Presets bundle skills**; prefer \`--preset\` over selecting individual skills unless the
124
+ user wants a minimal install.
125
+ 5. **Trust tiers**: tier 1 (Structured) → run \`/bto-test\` to promote to tier 2 (Validated).
126
+ 6. When unsure which skills fit, run \`dz recommend\` first and follow its output.
127
+
128
+ ## Targets (platform install dirs)
129
+
130
+ claude-code → \`.claude/skills/\` · codex → \`.agents/skills/\` · opencode → \`.opencode/\` ·
131
+ hermes → \`.hermes/\` · openclaude → \`.claude/skills/\`. The SKILL.md format is identical
132
+ across all five — only the directory differs.
133
+ `;
134
+ }
135
+ /** The same instructions packaged as a loadable Claude Code skill. */
136
+ function generateDriverSkill() {
137
+ return `---
138
+ name: dz-harness-driver
139
+ description: >
140
+ Operating instructions for the dz-harness-hub CLI (@dzhechkov/harness-cli). Load this when
141
+ asked to install/manage AI skills, set up a project with dz, benchmark a skill, or pick
142
+ the right preset. Tells you which dz command to run and the rules for driving the toolkit.
143
+ Triggers on: "dz setup", "install skills", "benchmark skill", "which preset", "dz recommend".
144
+ trust_tier: 0
145
+ trust_tier_label: "Reference"
146
+ ---
147
+
148
+ ${generateDriverInstructions()}
149
+ `;
150
+ }
151
+ /**
152
+ * Write the driver docs non-destructively. New files are created; an existing
153
+ * CLAUDE.md/AGENTS.md gets a marked section appended only if not already present.
154
+ * Returns a short detail string for the setup step.
155
+ */
156
+ function installDriverDocs(projectRoot, force) {
157
+ const written = [];
158
+ const skipped = [];
159
+ // 1. The loadable skill (own directory — always safe to write/refresh)
160
+ const skillDir = join(projectRoot, '.claude', 'skills', 'dz-harness-driver');
161
+ const skillPath = join(skillDir, 'SKILL.md');
162
+ if (!existsSync(skillPath) || force) {
163
+ mkdirSync(skillDir, { recursive: true });
164
+ writeFileSync(skillPath, generateDriverSkill());
165
+ written.push('skill');
166
+ }
167
+ else {
168
+ skipped.push('skill');
169
+ }
170
+ // 2. Standalone agent docs — create only if absent (never clobber the user's).
171
+ const instructions = generateDriverInstructions();
172
+ for (const name of ['AGENTS.md', 'GEMINI.md']) {
173
+ const p = join(projectRoot, name);
174
+ if (!existsSync(p)) {
175
+ writeFileSync(p, instructions);
176
+ written.push(name);
177
+ }
178
+ else {
179
+ skipped.push(name);
180
+ }
181
+ }
182
+ // 3. CLAUDE.md — append a marked block if the file lacks one (additive, idempotent).
183
+ const claudePath = join(projectRoot, 'CLAUDE.md');
184
+ const block = `\n${DRIVER_MARKER_START}\n\n${instructions}\n${DRIVER_MARKER_END}\n`;
185
+ if (!existsSync(claudePath)) {
186
+ writeFileSync(claudePath, block.trimStart());
187
+ written.push('CLAUDE.md');
188
+ }
189
+ else {
190
+ const existing = readFileSync(claudePath, 'utf-8');
191
+ if (!existing.includes(DRIVER_MARKER_START)) {
192
+ writeFileSync(claudePath, existing + block);
193
+ written.push('CLAUDE.md(appended)');
194
+ }
195
+ else {
196
+ skipped.push('CLAUDE.md');
197
+ }
198
+ }
199
+ const parts = [];
200
+ if (written.length)
201
+ parts.push(`wrote ${written.join(', ')}`);
202
+ if (skipped.length)
203
+ parts.push(`skipped ${skipped.join(', ')}`);
204
+ return parts.join('; ') || 'no changes';
205
+ }
89
206
  export function runSetup(opts) {
90
207
  const steps = [];
91
208
  const dzDir = join(opts.projectRoot, '.dz');
@@ -239,6 +356,11 @@ export function runSetup(opts) {
239
356
  writeFileSync(gitignorePath, dzIgnoreEntry);
240
357
  steps.push({ name: 'Create .gitignore', status: 'done', detail: 'with .dz entries' });
241
358
  }
359
+ // Step 7: Install the CLI-driver skill + agent docs (--install-driver)
360
+ if (opts.installDriver) {
361
+ const detail = installDriverDocs(opts.projectRoot, opts.force ?? false);
362
+ steps.push({ name: 'Install driver skill', status: 'done', detail });
363
+ }
242
364
  return {
243
365
  steps,
244
366
  totalSteps: steps.length,
package/dist/setup.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"setup.js","sourceRoot":"","sources":["../src/setup.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"setup.js","sourceRoot":"","sources":["../src/setup.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"sync-upstream.d.ts","sourceRoot":"","sources":["../src/sync-upstream.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAKH,uCAAuC;AACvC,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACtC,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACpC,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CACpC;AAED,gCAAgC;AAChC,MAAM,WAAW,UAAU;IACzB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;CAChC;AAED,+BAA+B;AAC/B,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,MAAM,EAAE,UAAU,CAAC;IAC5B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;CAC9C;AAED,qDAAqD;AACrD,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,MAAM,EAAE,YAAY,GAAG,SAAS,GAAG,aAAa,GAAG,eAAe,CAAC;IAC5E,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACzC,QAAQ,CAAC,aAAa,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC5C,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CACrC;AAED,4CAA4C;AAC5C,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,MAAM,EAAE,UAAU,CAAC;IAC5B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,MAAM,EAAE,SAAS,mBAAmB,EAAE,CAAC;CACjD;AAED,yDAAyD;AACzD,wBAAgB,mBAAmB,CAAC,UAAU,EAAE,MAAM,GAAG,eAAe,GAAG,SAAS,CAKnF;AAED,kDAAkD;AAClD,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,MAAM,EAAE,UAAU,CAAC;IAC5B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;CAC7B;AAED,+DAA+D;AAC/D,wBAAgB,sBAAsB,CAAC,YAAY,EAAE,MAAM,GAAG,iBAAiB,EAAE,CAmBhF;AAED,6DAA6D;AAC7D,wBAAsB,gBAAgB,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,kBAAkB,EAAE,CAAC,CAQ1F;AA6BD;;;GAGG;AACH,wBAAsB,aAAa,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,kBAAkB,GAAG,SAAS,CAAC,CAiD/F"}
1
+ {"version":3,"file":"sync-upstream.d.ts","sourceRoot":"","sources":["../src/sync-upstream.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAKH,uCAAuC;AACvC,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACtC,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACpC,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CACpC;AAED,gCAAgC;AAChC,MAAM,WAAW,UAAU;IACzB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;CAChC;AAED,+BAA+B;AAC/B,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,MAAM,EAAE,UAAU,CAAC;IAC5B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;CAC9C;AAED,qDAAqD;AACrD,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,MAAM,EAAE,YAAY,GAAG,SAAS,GAAG,aAAa,GAAG,eAAe,CAAC;IAC5E,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACzC,QAAQ,CAAC,aAAa,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC5C,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CACrC;AAED,4CAA4C;AAC5C,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,MAAM,EAAE,UAAU,CAAC;IAC5B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,MAAM,EAAE,SAAS,mBAAmB,EAAE,CAAC;CACjD;AAED,yDAAyD;AACzD,wBAAgB,mBAAmB,CAAC,UAAU,EAAE,MAAM,GAAG,eAAe,GAAG,SAAS,CASnF;AAED,kDAAkD;AAClD,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,MAAM,EAAE,UAAU,CAAC;IAC5B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;CAC7B;AAED,+DAA+D;AAC/D,wBAAgB,sBAAsB,CAAC,YAAY,EAAE,MAAM,GAAG,iBAAiB,EAAE,CAmBhF;AAED,6DAA6D;AAC7D,wBAAsB,gBAAgB,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,kBAAkB,EAAE,CAAC,CAQ1F;AA6BD;;;GAGG;AACH,wBAAsB,aAAa,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,kBAAkB,GAAG,SAAS,CAAC,CAiD/F"}
@@ -12,7 +12,13 @@ export function loadSourcesManifest(packageDir) {
12
12
  if (!existsSync(sourcesPath))
13
13
  return undefined;
14
14
  const raw = readFileSync(sourcesPath, 'utf-8');
15
- return JSON.parse(raw);
15
+ const parsed = JSON.parse(raw);
16
+ // Only return if it has the expected origin + skills structure
17
+ if (!parsed.origin || typeof parsed.origin !== 'object')
18
+ return undefined;
19
+ if (!parsed.skills || typeof parsed.skills !== 'object')
20
+ return undefined;
21
+ return parsed;
16
22
  }
17
23
  /** Discover all packages with sources.json in the monorepo. */
18
24
  export function discoverSourcePackages(monorepoRoot) {
@@ -1 +1 @@
1
- {"version":3,"file":"sync-upstream.js","sourceRoot":"","sources":["../src/sync-upstream.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAChE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AA8CjC,yDAAyD;AACzD,MAAM,UAAU,mBAAmB,CAAC,UAAkB;IACpD,MAAM,WAAW,GAAG,IAAI,CAAC,UAAU,EAAE,cAAc,CAAC,CAAC;IACrD,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC;QAAE,OAAO,SAAS,CAAC;IAC/C,MAAM,GAAG,GAAG,YAAY,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;IAC/C,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAoB,CAAC;AAC5C,CAAC;AAUD,+DAA+D;AAC/D,MAAM,UAAU,sBAAsB,CAAC,YAAoB;IACzD,MAAM,OAAO,GAAG,IAAI,CAAC,YAAY,EAAE,UAAU,EAAE,YAAY,CAAC,CAAC;IAC7D,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC;QAAE,OAAO,EAAE,CAAC;IAEpC,MAAM,OAAO,GAAwB,EAAE,CAAC;IACxC,KAAK,MAAM,KAAK,IAAI,WAAW,CAAC,OAAO,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC;QAClE,IAAI,CAAC,KAAK,CAAC,WAAW,EAAE;YAAE,SAAS;QACnC,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;QACzC,MAAM,QAAQ,GAAG,mBAAmB,CAAC,MAAM,CAAC,CAAC;QAC7C,IAAI,QAAQ,EAAE,CAAC;YACb,OAAO,CAAC,IAAI,CAAC;gBACX,IAAI,EAAE,KAAK,CAAC,IAAI;gBAChB,GAAG,EAAE,MAAM;gBACX,MAAM,EAAE,QAAQ,CAAC,MAAM;gBACvB,UAAU,EAAE,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,MAAM;aAChD,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,6DAA6D;AAC7D,MAAM,CAAC,KAAK,UAAU,gBAAgB,CAAC,YAAoB;IACzD,MAAM,QAAQ,GAAG,sBAAsB,CAAC,YAAY,CAAC,CAAC;IACtD,MAAM,OAAO,GAAyB,EAAE,CAAC;IACzC,KAAK,MAAM,GAAG,IAAI,QAAQ,EAAE,CAAC;QAC3B,MAAM,MAAM,GAAG,MAAM,aAAa,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAC5C,IAAI,MAAM;YAAE,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IACnC,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,uDAAuD;AACvD,SAAS,MAAM,CAAC,MAAkB,EAAE,SAAiB;IACnD,OAAO,qCAAqC,MAAM,CAAC,IAAI,IAAI,MAAM,CAAC,MAAM,IAAI,SAAS,EAAE,CAAC;AAC1F,CAAC;AAED,kDAAkD;AAClD,KAAK,UAAU,SAAS,CAAC,GAAW,EAAE,YAAoB,KAAK;IAC7D,IAAI,CAAC;QACH,MAAM,UAAU,GAAG,IAAI,eAAe,EAAE,CAAC;QACzC,MAAM,KAAK,GAAG,UAAU,CAAC,GAAG,EAAE,GAAG,UAAU,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC;QACnE,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,EAAE,EAAE,MAAM,EAAE,UAAU,CAAC,MAAM,EAAE,CAAC,CAAC;QACjE,YAAY,CAAC,KAAK,CAAC,CAAC;QACpB,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;YACjB,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE,EAAE,KAAK,EAAE,QAAQ,QAAQ,CAAC,MAAM,EAAE,EAAE,CAAC;QACnE,CAAC;QACD,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;QACnC,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;IAC5B,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE,EAAE,KAAK,EAAE,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC;IAC1F,CAAC;AACH,CAAC;AAED,qCAAqC;AACrC,SAAS,SAAS,CAAC,IAAY;IAC7B,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC;AACjC,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,UAAkB;IACpD,MAAM,QAAQ,GAAG,mBAAmB,CAAC,UAAU,CAAC,CAAC;IACjD,IAAI,CAAC,QAAQ;QAAE,OAAO,SAAS,CAAC;IAEhC,MAAM,OAAO,GAA0B,EAAE,CAAC;IAE1C,KAAK,MAAM,CAAC,OAAO,EAAE,MAAM,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;QAChE,MAAM,YAAY,GAAG,IAAI,CAAC,UAAU,EAAE,OAAO,EAAE,UAAU,CAAC,CAAC;QAE3D,IAAI,CAAC,UAAU,CAAC,YAAY,CAAC,EAAE,CAAC;YAC9B,OAAO,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,eAAe,EAAE,CAAC,CAAC;YAC5E,SAAS;QACX,CAAC;QAED,MAAM,SAAS,GAAG,YAAY,CAAC,YAAY,EAAE,OAAO,CAAC,CAAC;QACtD,MAAM,GAAG,GAAG,MAAM,CAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC;QACjD,MAAM,QAAQ,GAAG,MAAM,SAAS,CAAC,GAAG,CAAC,CAAC;QAEtC,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;YACjB,OAAO,CAAC,IAAI,CAAC;gBACX,OAAO;gBACP,UAAU,EAAE,MAAM,CAAC,IAAI;gBACvB,MAAM,EAAE,aAAa;gBACrB,KAAK,EAAE,QAAQ,CAAC,KAAK;aACtB,CAAC,CAAC;YACH,SAAS;QACX,CAAC;QAED,MAAM,UAAU,GAAG,SAAS,CAAC,SAAS,CAAC,CAAC;QACxC,MAAM,aAAa,GAAG,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;QAC/C,MAAM,OAAO,GAAG,UAAU,KAAK,aAAa,CAAC;QAE7C,OAAO,CAAC,IAAI,CAAC;YACX,OAAO;YACP,UAAU,EAAE,MAAM,CAAC,IAAI;YACvB,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,YAAY;YAC1C,UAAU;YACV,aAAa;SACd,CAAC,CAAC;IACL,CAAC;IAED,OAAO;QACL,MAAM,EAAE,QAAQ,CAAC,MAAM;QACvB,OAAO,EAAE,OAAO,CAAC,MAAM;QACvB,OAAO,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,MAAM;QAC7D,QAAQ,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,YAAY,CAAC,CAAC,MAAM;QACjE,MAAM,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,aAAa,IAAI,CAAC,CAAC,MAAM,KAAK,eAAe,CAAC,CAAC,MAAM;QAChG,MAAM,EAAE,OAAO;KAChB,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"sync-upstream.js","sourceRoot":"","sources":["../src/sync-upstream.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@dzhechkov/harness-core",
3
- "version": "0.3.19",
3
+ "version": "0.3.20",
4
4
  "description": "Shared harness logic - skill loading, additive apply, and the init/sync/verify/doctor operations.",
5
5
  "type": "module",
6
6
  "license": "MIT",
package/src/benchmark.ts CHANGED
@@ -11,6 +11,8 @@
11
11
  import { existsSync, readFileSync, statSync } from 'node:fs';
12
12
  import { join } from 'node:path';
13
13
 
14
+ import { estimateSkillCost, type CostEstimate } from './cost-scoring.js';
15
+
14
16
  /** A single benchmark check result. */
15
17
  export interface BenchmarkCheck {
16
18
  readonly id: string;
@@ -28,6 +30,8 @@ export interface BenchmarkScore {
28
30
  readonly total: number;
29
31
  readonly passRate: number;
30
32
  readonly grade: 'A' | 'B' | 'C' | 'D' | 'F';
33
+ /** Static cost band inferred from the skill's declared model usage. */
34
+ readonly cost: CostEstimate;
31
35
  }
32
36
 
33
37
  /** Result of benchmarking one or more skills. */
@@ -66,7 +70,7 @@ export function benchmarkSkill(skillDir: string, skillId: string): BenchmarkScor
66
70
  if (!skillMdExists) {
67
71
  return {
68
72
  skillId, skillDir, checks, passed: 0, total: checks.length,
69
- passRate: 0, grade: 'F',
73
+ passRate: 0, grade: 'F', cost: estimateSkillCost(''),
70
74
  };
71
75
  }
72
76
 
@@ -155,7 +159,7 @@ export function benchmarkSkill(skillDir: string, skillId: string): BenchmarkScor
155
159
 
156
160
  return {
157
161
  skillId, skillDir, checks, passed, total: checks.length,
158
- passRate, grade: gradeFromRate(passRate),
162
+ passRate, grade: gradeFromRate(passRate), cost: estimateSkillCost(content),
159
163
  };
160
164
  }
161
165
 
@@ -0,0 +1,273 @@
1
+ /**
2
+ * Cost-as-first-class-metric for skill benchmarking (BTO).
3
+ *
4
+ * Inspired by Princeton HAL harness (https://github.com/princeton-pli/hal-harness),
5
+ * which treats the cost-performance tradeoff as a first-class evaluation axis
6
+ * rather than scoring accuracy alone.
7
+ *
8
+ * Two layers:
9
+ * 1. Runtime cost accounting — normalize provider token-usage formats into a
10
+ * single shape, price it against a per-token table (with cached-read
11
+ * discounts), and combine with a quality score to get cost-efficiency.
12
+ * 2. Static cost estimation — infer an a-priori cost band from a skill's
13
+ * SKILL.md content (model tiers it invokes, number of LLM layers/judges),
14
+ * so BTO can flag expensive skills before running them.
15
+ *
16
+ * @packageDocumentation
17
+ */
18
+
19
+ // ── Pricing table ───────────────────────────────────────────
20
+
21
+ /** Per-token prices (USD) for a model, split by token role. */
22
+ export interface ModelPricing {
23
+ /** Price per uncached input (prompt) token. */
24
+ readonly prompt: number;
25
+ /** Price per output (completion) token. */
26
+ readonly completion: number;
27
+ /** Price per cached-read input token (typically ~10% of prompt). */
28
+ readonly cachedInput: number;
29
+ /** Price per cache-creation (write) token (typically ~125% of prompt). */
30
+ readonly cacheCreation: number;
31
+ }
32
+
33
+ /**
34
+ * Build a {@link ModelPricing} from a base prompt + completion price.
35
+ *
36
+ * @param cacheReadFactor Discount on cached-read input tokens relative to the
37
+ * prompt price. Anthropic ≈ 0.1 (90% off); OpenAI ≈ 0.5 (50% off). Cache-write
38
+ * (creation) premium is an Anthropic concept (125%); OpenAI reports no
39
+ * cache-creation tokens so the multiplier is never exercised there.
40
+ */
41
+ function priced(prompt: number, completion: number, cacheReadFactor = 0.1): ModelPricing {
42
+ return {
43
+ prompt,
44
+ completion,
45
+ cachedInput: prompt * cacheReadFactor,
46
+ cacheCreation: prompt * 1.25,
47
+ };
48
+ }
49
+
50
+ /**
51
+ * Per-token model pricing (USD), normalized to price-per-token (not per-million).
52
+ * Keys are matched case-insensitively against a prefix of the model id, so
53
+ * `claude-opus-4-6-20250...` resolves to the `claude-opus` entry.
54
+ */
55
+ export const MODEL_PRICES: Readonly<Record<string, ModelPricing>> = {
56
+ // Anthropic — Claude 4.x family (USD per token; e.g. Opus $5/$25 per Mtok)
57
+ 'claude-opus': priced(5 / 1e6, 25 / 1e6),
58
+ 'claude-sonnet': priced(3 / 1e6, 15 / 1e6),
59
+ 'claude-haiku': priced(1 / 1e6, 5 / 1e6),
60
+ // OpenAI (cached input is 50% off, not Anthropic's 90% — pass 0.5)
61
+ 'gpt-4o': priced(2.5 / 1e6, 10 / 1e6, 0.5),
62
+ 'gpt-4o-mini': priced(0.15 / 1e6, 0.6 / 1e6, 0.5),
63
+ 'gpt-4.1': priced(2 / 1e6, 8 / 1e6, 0.5),
64
+ 'o3': priced(2 / 1e6, 8 / 1e6, 0.5),
65
+ // Bedrock-hosted Claude 4.x (same list price as first-party)
66
+ 'anthropic.claude-opus': priced(5 / 1e6, 25 / 1e6),
67
+ 'anthropic.claude-sonnet': priced(3 / 1e6, 15 / 1e6),
68
+ 'anthropic.claude-haiku': priced(1 / 1e6, 5 / 1e6),
69
+ // Bedrock-hosted legacy Claude-3 (legacy list price)
70
+ 'anthropic.claude-3-opus': priced(15 / 1e6, 75 / 1e6),
71
+ 'anthropic.claude-3-sonnet': priced(3 / 1e6, 15 / 1e6),
72
+ };
73
+
74
+ /** Fallback pricing when a model id matches no known prefix (assume sonnet-class). */
75
+ const FALLBACK_PRICING = priced(3 / 1e6, 15 / 1e6);
76
+
77
+ /**
78
+ * Resolve a model id to its pricing by longest-prefix match.
79
+ * `bedrock/anthropic.claude-3-opus...` → strips a leading `provider/` segment.
80
+ */
81
+ export function pricingFor(modelId: string): ModelPricing {
82
+ // Strip a leading `provider/` segment (e.g. `bedrock/`, `us-east-1/`).
83
+ const id = modelId.toLowerCase().replace(/^[a-z0-9-]+\//, '');
84
+ let best: ModelPricing | undefined;
85
+ let bestLen = 0;
86
+ for (const [key, price] of Object.entries(MODEL_PRICES)) {
87
+ if (id.startsWith(key) && key.length > bestLen) {
88
+ best = price;
89
+ bestLen = key.length;
90
+ }
91
+ }
92
+ return best ?? FALLBACK_PRICING;
93
+ }
94
+
95
+ // ── Usage normalization ─────────────────────────────────────
96
+
97
+ /**
98
+ * Provider-agnostic token usage. Cross-provider shapes are normalized into
99
+ * these four buckets (mirrors HAL's `_normalize_usage` 4-tuple).
100
+ */
101
+ export interface NormalizedUsage {
102
+ /** Uncached input (prompt) tokens. */
103
+ readonly promptTokens: number;
104
+ /** Input tokens served from cache (discounted). */
105
+ readonly cachedInputTokens: number;
106
+ /** Input tokens written to cache (premium). */
107
+ readonly cacheCreationTokens: number;
108
+ /** Output (completion) tokens. */
109
+ readonly completionTokens: number;
110
+ }
111
+
112
+ /** Raw usage object from any supported provider SDK. */
113
+ export type RawUsage = Record<string, unknown>;
114
+
115
+ function num(v: unknown): number {
116
+ return typeof v === 'number' && Number.isFinite(v) ? v : 0;
117
+ }
118
+
119
+ /**
120
+ * Normalize a provider usage object into {@link NormalizedUsage}.
121
+ *
122
+ * Supported shapes:
123
+ * - OpenAI: `prompt_tokens`, `completion_tokens`,
124
+ * `prompt_tokens_details.cached_tokens`
125
+ * - Anthropic: `input_tokens`, `output_tokens`,
126
+ * `cache_read_input_tokens`, `cache_creation_input_tokens`
127
+ * - Bedrock: `inputTokens`, `outputTokens`
128
+ *
129
+ * Cached/cache-creation tokens are reported by Anthropic *separately* from
130
+ * `input_tokens`, so the prompt bucket is the raw input count as given.
131
+ * For OpenAI, `cached_tokens` is a subset of `prompt_tokens`, so it is
132
+ * subtracted out to avoid double-counting.
133
+ */
134
+ export function normalizeUsage(raw: RawUsage): NormalizedUsage {
135
+ // Anthropic
136
+ if ('input_tokens' in raw || 'output_tokens' in raw) {
137
+ return {
138
+ promptTokens: num(raw.input_tokens),
139
+ cachedInputTokens: num(raw.cache_read_input_tokens),
140
+ cacheCreationTokens: num(raw.cache_creation_input_tokens),
141
+ completionTokens: num(raw.output_tokens),
142
+ };
143
+ }
144
+ // Bedrock
145
+ if ('inputTokens' in raw || 'outputTokens' in raw) {
146
+ return {
147
+ promptTokens: num(raw.inputTokens),
148
+ cachedInputTokens: 0,
149
+ cacheCreationTokens: 0,
150
+ completionTokens: num(raw.outputTokens),
151
+ };
152
+ }
153
+ // OpenAI (default)
154
+ const details = (raw.prompt_tokens_details ?? {}) as Record<string, unknown>;
155
+ const cached = num(details.cached_tokens);
156
+ const prompt = num(raw.prompt_tokens);
157
+ return {
158
+ promptTokens: Math.max(0, prompt - cached),
159
+ cachedInputTokens: cached,
160
+ cacheCreationTokens: 0,
161
+ completionTokens: num(raw.completion_tokens),
162
+ };
163
+ }
164
+
165
+ /** Dollar cost of a normalized usage against a model's pricing. */
166
+ export function usageCost(usage: NormalizedUsage, modelId: string): number {
167
+ const p = pricingFor(modelId);
168
+ return (
169
+ usage.promptTokens * p.prompt +
170
+ usage.cachedInputTokens * p.cachedInput +
171
+ usage.cacheCreationTokens * p.cacheCreation +
172
+ usage.completionTokens * p.completion
173
+ );
174
+ }
175
+
176
+ // ── Aggregation across calls ────────────────────────────────
177
+
178
+ /** A single billed LLM call within a skill invocation. */
179
+ export interface CallRecord {
180
+ readonly model: string;
181
+ readonly usage: RawUsage;
182
+ }
183
+
184
+ /** Cost breakdown for a full skill invocation (many calls). */
185
+ export interface InvocationCost {
186
+ /** Total USD cost of the invocation. */
187
+ readonly totalUsd: number;
188
+ /** Total tokens (all buckets) across all calls. */
189
+ readonly totalTokens: number;
190
+ /** Number of billed calls. */
191
+ readonly calls: number;
192
+ /** Per-model cost breakdown. */
193
+ readonly byModel: Readonly<Record<string, number>>;
194
+ }
195
+
196
+ /** Aggregate cost across all calls of one skill invocation. */
197
+ export function invocationCost(records: readonly CallRecord[]): InvocationCost {
198
+ const byModel: Record<string, number> = {};
199
+ let totalUsd = 0;
200
+ let totalTokens = 0;
201
+ for (const rec of records) {
202
+ const usage = normalizeUsage(rec.usage);
203
+ const cost = usageCost(usage, rec.model);
204
+ totalUsd += cost;
205
+ totalTokens +=
206
+ usage.promptTokens +
207
+ usage.cachedInputTokens +
208
+ usage.cacheCreationTokens +
209
+ usage.completionTokens;
210
+ byModel[rec.model] = (byModel[rec.model] ?? 0) + cost;
211
+ }
212
+ return { totalUsd, totalTokens, calls: records.length, byModel };
213
+ }
214
+
215
+ /**
216
+ * Cost-efficiency = quality per dollar.
217
+ *
218
+ * @param qualityScore A 0–10 BTO quality score (L1/L2 average).
219
+ * @param costUsd Dollar cost of the invocation that produced that quality.
220
+ * @returns Quality points per US dollar. `Infinity` when cost is 0 (free path).
221
+ */
222
+ export function costEfficiency(qualityScore: number, costUsd: number): number {
223
+ if (costUsd <= 0) return qualityScore > 0 ? Infinity : 0;
224
+ return qualityScore / costUsd;
225
+ }
226
+
227
+ // ── Static cost estimation (from SKILL.md content) ──────────
228
+
229
+ /** Static cost band inferred from a skill's declared model usage. */
230
+ export interface CostEstimate {
231
+ /** Cost level derived from model tiers + LLM layer count. */
232
+ readonly level: 'free' | 'low' | 'medium' | 'high';
233
+ /** Relative cost units (haiku = 1, sonnet = 4, opus = 20) summed across layers. */
234
+ readonly relativeUnits: number;
235
+ /** Detected per-tier call counts. */
236
+ readonly tiers: {
237
+ readonly haiku: number;
238
+ readonly sonnet: number;
239
+ readonly opus: number;
240
+ };
241
+ }
242
+
243
+ /** Relative cost weight per model tier (haiku baseline = 1). */
244
+ const TIER_UNITS = { haiku: 1, sonnet: 4, opus: 20 } as const;
245
+
246
+ /**
247
+ * Estimate a skill's cost band from its SKILL.md content by counting how many
248
+ * times it routes work to each model tier. Used by BTO's BENCHMARK layer to
249
+ * flag expensive skills before any LLM call is made.
250
+ */
251
+ export function estimateSkillCost(skillContent: string): CostEstimate {
252
+ const lower = skillContent.toLowerCase();
253
+ const count = (re: RegExp): number => (lower.match(re) ?? []).length;
254
+
255
+ const tiers = {
256
+ haiku: count(/\bhaiku\b/g),
257
+ sonnet: count(/\bsonnet\b/g),
258
+ opus: count(/\bopus\b/g),
259
+ };
260
+
261
+ const relativeUnits =
262
+ tiers.haiku * TIER_UNITS.haiku +
263
+ tiers.sonnet * TIER_UNITS.sonnet +
264
+ tiers.opus * TIER_UNITS.opus;
265
+
266
+ let level: CostEstimate['level'];
267
+ if (relativeUnits === 0) level = 'free';
268
+ else if (relativeUnits <= 8) level = 'low';
269
+ else if (relativeUnits <= 40) level = 'medium';
270
+ else level = 'high';
271
+
272
+ return { level, relativeUnits, tiers };
273
+ }
package/src/index.ts CHANGED
@@ -34,6 +34,23 @@ export type { InstalledSkill, UpgradeCheck, UpgradeReport } from './upgrade.js';
34
34
  export type { PublishResult, PublishReport } from './publish.js';
35
35
  export { computeRiskScore } from './risk-scoring.js';
36
36
  export type { RiskScore, RiskThresholds } from './risk-scoring.js';
37
+ export {
38
+ MODEL_PRICES,
39
+ pricingFor,
40
+ normalizeUsage,
41
+ usageCost,
42
+ invocationCost,
43
+ costEfficiency,
44
+ estimateSkillCost,
45
+ } from './cost-scoring.js';
46
+ export type {
47
+ ModelPricing,
48
+ NormalizedUsage,
49
+ RawUsage,
50
+ CallRecord,
51
+ InvocationCost,
52
+ CostEstimate,
53
+ } from './cost-scoring.js';
37
54
  export { importEcc } from './import-ecc.js';
38
55
  export type { ImportEccReport, ImportEccOptions, ImportedSkill } from './import-ecc.js';
39
56
  export type { RegistryEntry, Registry } from './registry.js';
package/src/setup.ts CHANGED
@@ -29,6 +29,8 @@ export interface SetupOptions {
29
29
  readonly noMemory?: boolean | undefined;
30
30
  readonly noPretrain?: boolean | undefined;
31
31
  readonly force?: boolean | undefined;
32
+ /** Also deploy the operating-instructions "driver" skill + agent docs. */
33
+ readonly installDriver?: boolean | undefined;
32
34
  }
33
35
 
34
36
  /** Setup result. */
@@ -122,6 +124,125 @@ function isAgentdbAvailable(): boolean {
122
124
  }
123
125
 
124
126
  /** Run full environment setup. */
127
+ /** Marker that brackets the dz-harness section in a shared CLAUDE.md/AGENTS.md. */
128
+ const DRIVER_MARKER_START = '<!-- dz-harness-driver:start -->';
129
+ const DRIVER_MARKER_END = '<!-- dz-harness-driver:end -->';
130
+
131
+ /**
132
+ * Operating instructions for a coding agent that should *drive* the dz CLI
133
+ * correctly. Inspired by Visa VVAH `--install-agents`: the toolkit ships its own
134
+ * "how to operate me" doc so agents use the CLI as intended rather than guessing.
135
+ */
136
+ function generateDriverInstructions(): string {
137
+ return `# Operating dz-harness-hub (CLI driver)
138
+
139
+ You have the \`dz\` CLI (\`@dzhechkov/harness-cli\`) available. It manages cross-platform
140
+ AI skills (the agentskills.io \`SKILL.md\` format) across Claude Code, Codex, OpenCode,
141
+ Hermes, and OpenClaude.
142
+
143
+ ## Core commands
144
+
145
+ | Command | Use it when |
146
+ |---------|-------------|
147
+ | \`dz recommend "<task>"\` | The user describes a task — suggests the right skills/preset/npx package. Start here. |
148
+ | \`dz setup --target <t> [--preset <p>] [--memory agentdb]\` | Bootstrap a project: config, hooks, learning memory. |
149
+ | \`dz init --target <t> [--preset <p>] [--select id,id]\` | Install skills into a project for a platform. |
150
+ | \`dz benchmark <skill-dir>\` | Score a skill (L0 structural checks, grade A–F, cost band). |
151
+ | \`dz pretrain\` | Detect the project's tech stack and pre-load relevant skills. |
152
+ | \`dz scout [--deep]\` | Discover new skill sources across the ecosystem. |
153
+ | \`dz import-ecc\` | Import skills from an ECC repo. |
154
+
155
+ ## Rules for driving this CLI
156
+
157
+ 1. **Do NOT hand-edit \`SKILL.md\` files to make a benchmark pass** — fix the underlying
158
+ structure (missing frontmatter, sections, schema) instead.
159
+ 2. **Do NOT hand-write \`.dz/config.json\`** — run \`dz setup\` and let it generate config.
160
+ 3. **Skills are agentskills.io format** — YAML frontmatter (name, description, trust_tier,
161
+ validation) + a Markdown body with a Protocol and Anti-Patterns section.
162
+ 4. **Presets bundle skills**; prefer \`--preset\` over selecting individual skills unless the
163
+ user wants a minimal install.
164
+ 5. **Trust tiers**: tier 1 (Structured) → run \`/bto-test\` to promote to tier 2 (Validated).
165
+ 6. When unsure which skills fit, run \`dz recommend\` first and follow its output.
166
+
167
+ ## Targets (platform install dirs)
168
+
169
+ claude-code → \`.claude/skills/\` · codex → \`.agents/skills/\` · opencode → \`.opencode/\` ·
170
+ hermes → \`.hermes/\` · openclaude → \`.claude/skills/\`. The SKILL.md format is identical
171
+ across all five — only the directory differs.
172
+ `;
173
+ }
174
+
175
+ /** The same instructions packaged as a loadable Claude Code skill. */
176
+ function generateDriverSkill(): string {
177
+ return `---
178
+ name: dz-harness-driver
179
+ description: >
180
+ Operating instructions for the dz-harness-hub CLI (@dzhechkov/harness-cli). Load this when
181
+ asked to install/manage AI skills, set up a project with dz, benchmark a skill, or pick
182
+ the right preset. Tells you which dz command to run and the rules for driving the toolkit.
183
+ Triggers on: "dz setup", "install skills", "benchmark skill", "which preset", "dz recommend".
184
+ trust_tier: 0
185
+ trust_tier_label: "Reference"
186
+ ---
187
+
188
+ ${generateDriverInstructions()}
189
+ `;
190
+ }
191
+
192
+ /**
193
+ * Write the driver docs non-destructively. New files are created; an existing
194
+ * CLAUDE.md/AGENTS.md gets a marked section appended only if not already present.
195
+ * Returns a short detail string for the setup step.
196
+ */
197
+ function installDriverDocs(projectRoot: string, force: boolean): string {
198
+ const written: string[] = [];
199
+ const skipped: string[] = [];
200
+
201
+ // 1. The loadable skill (own directory — always safe to write/refresh)
202
+ const skillDir = join(projectRoot, '.claude', 'skills', 'dz-harness-driver');
203
+ const skillPath = join(skillDir, 'SKILL.md');
204
+ if (!existsSync(skillPath) || force) {
205
+ mkdirSync(skillDir, { recursive: true });
206
+ writeFileSync(skillPath, generateDriverSkill());
207
+ written.push('skill');
208
+ } else {
209
+ skipped.push('skill');
210
+ }
211
+
212
+ // 2. Standalone agent docs — create only if absent (never clobber the user's).
213
+ const instructions = generateDriverInstructions();
214
+ for (const name of ['AGENTS.md', 'GEMINI.md']) {
215
+ const p = join(projectRoot, name);
216
+ if (!existsSync(p)) {
217
+ writeFileSync(p, instructions);
218
+ written.push(name);
219
+ } else {
220
+ skipped.push(name);
221
+ }
222
+ }
223
+
224
+ // 3. CLAUDE.md — append a marked block if the file lacks one (additive, idempotent).
225
+ const claudePath = join(projectRoot, 'CLAUDE.md');
226
+ const block = `\n${DRIVER_MARKER_START}\n\n${instructions}\n${DRIVER_MARKER_END}\n`;
227
+ if (!existsSync(claudePath)) {
228
+ writeFileSync(claudePath, block.trimStart());
229
+ written.push('CLAUDE.md');
230
+ } else {
231
+ const existing = readFileSync(claudePath, 'utf-8');
232
+ if (!existing.includes(DRIVER_MARKER_START)) {
233
+ writeFileSync(claudePath, existing + block);
234
+ written.push('CLAUDE.md(appended)');
235
+ } else {
236
+ skipped.push('CLAUDE.md');
237
+ }
238
+ }
239
+
240
+ const parts: string[] = [];
241
+ if (written.length) parts.push(`wrote ${written.join(', ')}`);
242
+ if (skipped.length) parts.push(`skipped ${skipped.join(', ')}`);
243
+ return parts.join('; ') || 'no changes';
244
+ }
245
+
125
246
  export function runSetup(opts: SetupOptions): SetupResult {
126
247
  const steps: SetupStep[] = [];
127
248
  const dzDir = join(opts.projectRoot, '.dz');
@@ -268,6 +389,12 @@ export function runSetup(opts: SetupOptions): SetupResult {
268
389
  steps.push({ name: 'Create .gitignore', status: 'done', detail: 'with .dz entries' });
269
390
  }
270
391
 
392
+ // Step 7: Install the CLI-driver skill + agent docs (--install-driver)
393
+ if (opts.installDriver) {
394
+ const detail = installDriverDocs(opts.projectRoot, opts.force ?? false);
395
+ steps.push({ name: 'Install driver skill', status: 'done', detail });
396
+ }
397
+
271
398
  return {
272
399
  steps,
273
400
  totalSteps: steps.length,
@@ -57,7 +57,11 @@ export function loadSourcesManifest(packageDir: string): SourcesManifest | undef
57
57
  const sourcesPath = join(packageDir, 'sources.json');
58
58
  if (!existsSync(sourcesPath)) return undefined;
59
59
  const raw = readFileSync(sourcesPath, 'utf-8');
60
- return JSON.parse(raw) as SourcesManifest;
60
+ const parsed = JSON.parse(raw) as Record<string, unknown>;
61
+ // Only return if it has the expected origin + skills structure
62
+ if (!parsed.origin || typeof parsed.origin !== 'object') return undefined;
63
+ if (!parsed.skills || typeof parsed.skills !== 'object') return undefined;
64
+ return parsed as unknown as SourcesManifest;
61
65
  }
62
66
 
63
67
  /** Info about a package with external sources. */