@vextlabs/theron-cli 0.3.0 → 0.4.0

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.
Files changed (169) hide show
  1. package/dist/api.d.ts +8 -0
  2. package/dist/api.js +3 -0
  3. package/dist/api.js.map +1 -1
  4. package/dist/auth.js +51 -1
  5. package/dist/auth.js.map +1 -1
  6. package/dist/banner.js +3 -2
  7. package/dist/banner.js.map +1 -1
  8. package/dist/checkpoints.d.ts +32 -0
  9. package/dist/checkpoints.js +61 -0
  10. package/dist/checkpoints.js.map +1 -0
  11. package/dist/index.js +59 -4
  12. package/dist/index.js.map +1 -1
  13. package/dist/input.d.ts +61 -0
  14. package/dist/input.js +574 -0
  15. package/dist/input.js.map +1 -0
  16. package/dist/profiles/index.js +5 -0
  17. package/dist/profiles/index.js.map +1 -1
  18. package/dist/profiles/methodologies/operate_domains.d.ts +8 -0
  19. package/dist/profiles/methodologies/operate_domains.js +1239 -0
  20. package/dist/profiles/methodologies/operate_domains.js.map +1 -0
  21. package/dist/profiles/seeds.js +57 -36
  22. package/dist/profiles/seeds.js.map +1 -1
  23. package/dist/receipt.d.ts +17 -0
  24. package/dist/receipt.js +46 -0
  25. package/dist/receipt.js.map +1 -0
  26. package/dist/render.d.ts +4 -1
  27. package/dist/render.js +95 -28
  28. package/dist/render.js.map +1 -1
  29. package/dist/repl.d.ts +8 -1
  30. package/dist/repl.js +420 -62
  31. package/dist/repl.js.map +1 -1
  32. package/dist/sessions.d.ts +14 -0
  33. package/dist/sessions.js +100 -0
  34. package/dist/sessions.js.map +1 -1
  35. package/dist/ship.d.ts +2 -0
  36. package/dist/ship.js +62 -0
  37. package/dist/ship.js.map +1 -0
  38. package/dist/skills/catalog.d.ts +13 -0
  39. package/dist/skills/catalog.js +86 -0
  40. package/dist/skills/catalog.js.map +1 -0
  41. package/dist/tools/bash.js +81 -14
  42. package/dist/tools/bash.js.map +1 -1
  43. package/dist/tools/edit.js +21 -1
  44. package/dist/tools/edit.js.map +1 -1
  45. package/dist/tools/glob.js +4 -1
  46. package/dist/tools/glob.js.map +1 -1
  47. package/dist/tools/grep.d.ts +5 -0
  48. package/dist/tools/grep.js +101 -2
  49. package/dist/tools/grep.js.map +1 -1
  50. package/dist/tools/index.d.ts +22 -0
  51. package/dist/tools/index.js +177 -41
  52. package/dist/tools/index.js.map +1 -1
  53. package/dist/tools/ls.d.ts +3 -0
  54. package/dist/tools/ls.js +23 -12
  55. package/dist/tools/ls.js.map +1 -1
  56. package/dist/tools/multiedit.d.ts +12 -0
  57. package/dist/tools/multiedit.js +79 -0
  58. package/dist/tools/multiedit.js.map +1 -0
  59. package/dist/tools/stoa.d.ts +1 -1
  60. package/dist/tools/stoa.js +7 -3
  61. package/dist/tools/stoa.js.map +1 -1
  62. package/dist/tools/task.d.ts +9 -0
  63. package/dist/tools/task.js +166 -0
  64. package/dist/tools/task.js.map +1 -0
  65. package/dist/tools/todowrite.d.ts +12 -0
  66. package/dist/tools/todowrite.js +38 -0
  67. package/dist/tools/todowrite.js.map +1 -0
  68. package/dist/tools/webfetch.d.ts +6 -0
  69. package/dist/tools/webfetch.js +98 -0
  70. package/dist/tools/webfetch.js.map +1 -0
  71. package/dist/tools/websearch.d.ts +7 -0
  72. package/dist/tools/websearch.js +83 -0
  73. package/dist/tools/websearch.js.map +1 -0
  74. package/dist/tools/write.js +17 -1
  75. package/dist/tools/write.js.map +1 -1
  76. package/dist/verifiers/confidence_marked.d.ts +2 -0
  77. package/dist/verifiers/confidence_marked.js +49 -0
  78. package/dist/verifiers/confidence_marked.js.map +1 -0
  79. package/dist/verifiers/disclaimer_gate.d.ts +2 -0
  80. package/dist/verifiers/disclaimer_gate.js +57 -0
  81. package/dist/verifiers/disclaimer_gate.js.map +1 -0
  82. package/dist/verifiers/index.d.ts +5 -0
  83. package/dist/verifiers/index.js +20 -7
  84. package/dist/verifiers/index.js.map +1 -1
  85. package/dist/verifiers/lint.js +4 -3
  86. package/dist/verifiers/lint.js.map +1 -1
  87. package/dist/verifiers/promoted_kernels.d.ts +8 -0
  88. package/dist/verifiers/promoted_kernels.js +190 -0
  89. package/dist/verifiers/promoted_kernels.js.map +1 -0
  90. package/dist/verifiers/source_gate.js +2 -3
  91. package/dist/verifiers/source_gate.js.map +1 -1
  92. package/dist/verifiers/test_smoke.js +30 -0
  93. package/dist/verifiers/test_smoke.js.map +1 -1
  94. package/dist/verifiers/types.d.ts +3 -0
  95. package/package.json +4 -2
  96. package/skills/README.md +123 -0
  97. package/skills/ab-test.md +89 -0
  98. package/skills/api-design.md +175 -0
  99. package/skills/architecture-design.md +185 -0
  100. package/skills/business-case.md +77 -0
  101. package/skills/causal-inference.md +77 -0
  102. package/skills/clinical-guideline.md +98 -0
  103. package/skills/code-review.md +98 -0
  104. package/skills/cold-outreach.md +268 -0
  105. package/skills/competitive-teardown.md +223 -0
  106. package/skills/component-spec.md +121 -0
  107. package/skills/content-calendar.md +280 -0
  108. package/skills/contract-review.md +155 -0
  109. package/skills/data-analysis.md +187 -0
  110. package/skills/debug.md +91 -0
  111. package/skills/design-audit.md +121 -0
  112. package/skills/differential-diagnosis.md +79 -0
  113. package/skills/discovery-call.md +206 -0
  114. package/skills/edit-pass.md +80 -0
  115. package/skills/engineering-calc.md +101 -0
  116. package/skills/estimate.md +70 -0
  117. package/skills/experiment-design.md +105 -0
  118. package/skills/fact-check.md +82 -0
  119. package/skills/financial-model.md +104 -0
  120. package/skills/grant-proposal.md +93 -0
  121. package/skills/harmony-analysis.md +93 -0
  122. package/skills/hypothesis-generation.md +99 -0
  123. package/skills/incident-response.md +134 -0
  124. package/skills/interview-loop.md +62 -0
  125. package/skills/job-scorecard.md +92 -0
  126. package/skills/kb-article.md +174 -0
  127. package/skills/launch-plan.md +85 -0
  128. package/skills/lease-review.md +93 -0
  129. package/skills/lesson-plan.md +198 -0
  130. package/skills/literature-review.md +69 -0
  131. package/skills/market-entry.md +137 -0
  132. package/skills/market-sizing.md +159 -0
  133. package/skills/meta-analysis.md +140 -0
  134. package/skills/migrate.md +117 -0
  135. package/skills/optimize.md +88 -0
  136. package/skills/options-strategy.md +166 -0
  137. package/skills/peer-review.md +96 -0
  138. package/skills/pentest-plan.md +193 -0
  139. package/skills/pitch-review.md +132 -0
  140. package/skills/plan.md +88 -0
  141. package/skills/policy-brief.md +124 -0
  142. package/skills/positioning.md +192 -0
  143. package/skills/postmortem.md +168 -0
  144. package/skills/prd.md +105 -0
  145. package/skills/prioritize.md +162 -0
  146. package/skills/proof.md +91 -0
  147. package/skills/property-underwrite.md +159 -0
  148. package/skills/recipe-develop.md +109 -0
  149. package/skills/red-team.md +142 -0
  150. package/skills/refactor.md +58 -0
  151. package/skills/reflection-session.md +115 -0
  152. package/skills/regulatory-compliance.md +136 -0
  153. package/skills/reproduce.md +87 -0
  154. package/skills/runbook.md +344 -0
  155. package/skills/security-audit.md +154 -0
  156. package/skills/seo-brief.md +201 -0
  157. package/skills/sql-query.md +161 -0
  158. package/skills/story-craft.md +163 -0
  159. package/skills/tdd.md +59 -0
  160. package/skills/term-sheet.md +298 -0
  161. package/skills/theory-of-change.md +88 -0
  162. package/skills/threat-model.md +104 -0
  163. package/skills/ticket-triage.md +200 -0
  164. package/skills/tolerance-analysis.md +149 -0
  165. package/skills/training-program.md +151 -0
  166. package/skills/translate.md +64 -0
  167. package/skills/unit-economics.md +238 -0
  168. package/skills/valuation.md +112 -0
  169. package/skills/write-tests.md +77 -0
@@ -23,6 +23,9 @@ import { evidenceGateKernel } from "./evidence_gate.js";
23
23
  import { citationGateKernel } from "./citation_gate.js";
24
24
  import { calcGateKernel } from "./calc_gate.js";
25
25
  import { sourceGateKernel } from "./source_gate.js";
26
+ import { disclaimerGateKernel } from "./disclaimer_gate.js";
27
+ import { confidenceMarkedKernel } from "./confidence_marked.js";
28
+ import { PROMOTED_KERNELS } from "./promoted_kernels.js";
26
29
  // Map slug → kernel. Profiles reference these via Profile.verifiers[].
27
30
  const REGISTRY = new Map();
28
31
  function register(v) { REGISTRY.set(v.slug, v); }
@@ -38,19 +41,22 @@ register(evidenceGateKernel);
38
41
  register(citationGateKernel);
39
42
  register(calcGateKernel);
40
43
  register(sourceGateKernel);
44
+ register(disclaimerGateKernel);
45
+ register(confidenceMarkedKernel);
46
+ // Promoted real kernels (claim_grounding, assumption_marked, unit_consistency,
47
+ // sentence_variance, component_states_complete, token_lint) — previously inert
48
+ // style_lint aliases, now each with conservative warn-level domain logic.
49
+ for (const k of PROMOTED_KERNELS)
50
+ register(k);
41
51
  // Aliases for verifier slugs referenced in seeds.ts that share a kernel
42
52
  // (e.g. assumption_marked / advice_disclaimer / confidence_marked all
43
53
  // run via style_lint with a different config — the verifier reads the
44
54
  // active profile slug to know what to look for).
45
55
  for (const alias of [
46
- "claim_grounding",
47
- "assumption_marked",
56
+ // The only remaining style_lint alias. The rest (claim_grounding,
57
+ // assumption_marked, confidence_marked, sentence_variance, unit_consistency,
58
+ // component_states_complete, token_lint) are now real kernels.
48
59
  "advice_disclaimer",
49
- "confidence_marked",
50
- "sentence_variance",
51
- "unit_consistency",
52
- "component_states_complete",
53
- "token_lint",
54
60
  ]) {
55
61
  // Default these aliases to the style_lint kernel for now — they're
56
62
  // surfaced as the kernel name in issue.kernel so the user still sees
@@ -58,6 +64,13 @@ for (const alias of [
58
64
  // of "auto-baseline" into "hand-crafted."
59
65
  REGISTRY.set(alias, { ...styleLintKernel, slug: alias });
60
66
  }
67
+ /** All registered verifier slugs (real kernels + aliases). Used by the
68
+ * integrity test to catch a profile referencing a slug that doesn't resolve
69
+ * to a kernel (runVerifiers silently drops unknown slugs, so without this a
70
+ * typo'd verifier slug would be an invisible no-op). */
71
+ export function listVerifierSlugs() {
72
+ return [...REGISTRY.keys()];
73
+ }
61
74
  /** Run the kernels for the active profile in parallel. Each kernel
62
75
  * has its own 5s timeout — slow kernels return [] rather than block
63
76
  * the loop. Total wall time bounded by max(per-kernel time, 5s). */
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/verifiers/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/verifiers/index.ts"],"names":[],"mappings":"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"}
@@ -69,6 +69,7 @@ export const lintKernel = {
69
69
  continue;
70
70
  let m;
71
71
  rule.pattern.lastIndex = 0;
72
+ let ruleCount = 0;
72
73
  while ((m = rule.pattern.exec(content))) {
73
74
  const lineNo = content.slice(0, m.index).split("\n").length;
74
75
  issues.push({
@@ -77,9 +78,9 @@ export const lintKernel = {
77
78
  message: rule.message(m),
78
79
  location: `${path.relative(ctx.cwd, abs)}:${lineNo}`,
79
80
  });
80
- // Cap repetitions of the same rule per file at 5 — saves us
81
- // from spamming 200 "console.log" warnings.
82
- if ((issues.filter((i) => i.kernel === rule.kernel).length) > 5)
81
+ ruleCount++;
82
+ // Cap repetitions of the same rule per file at 5.
83
+ if (ruleCount >= 5)
83
84
  break;
84
85
  }
85
86
  }
@@ -1 +1 @@
1
- {"version":3,"file":"lint.js","sourceRoot":"","sources":["../../src/verifiers/lint.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"lint.js","sourceRoot":"","sources":["../../src/verifiers/lint.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ import type { Verifier } from "./types.js";
2
+ export declare const claimGroundingKernel: Verifier;
3
+ export declare const assumptionMarkedKernel: Verifier;
4
+ export declare const unitConsistencyKernel: Verifier;
5
+ export declare const sentenceVarianceKernel: Verifier;
6
+ export declare const componentStatesCompleteKernel: Verifier;
7
+ export declare const tokenLintKernel: Verifier;
8
+ export declare const PROMOTED_KERNELS: Verifier[];
@@ -0,0 +1,190 @@
1
+ // Promoted kernels — the remaining verifier slugs that used to be inert aliases
2
+ // of style_lint, now given real, domain-specific logic. All are WARN-level
3
+ // (quality nudges surfaced after the turn, never hard blocks) and deliberately
4
+ // conservative: each fires only on a clear, high-signal violation so it never
5
+ // punishes already-good output. They read ctx.profile to scope themselves.
6
+ const has = (re, s) => re.test(s);
7
+ const SUBSTANTIVE = 240;
8
+ // ── claim_grounding ─────────────────────────────────────────────────────────
9
+ // Absolute claims ("always", "proven", "guarantees") should be qualified or
10
+ // cited. Fires when an absolute claim appears with neither a citation nor a
11
+ // hedge anywhere in its sentence.
12
+ const CLAIM_PROFILES = new Set(["research", "academic", "policy", "medical", "science", "business", "legal", "strategy"]);
13
+ const ABSOLUTE = /\b(always|never|guarantees?|guaranteed|proven|proves|certainly|undeniably|definitely|undoubtedly|everyone|no one|nobody|impossible|all\s+\w+\s+are|every\s+\w+\s+(is|are))\b/i;
14
+ const GROUNDING = /(https?:\/\/|\bdoi\b|\[\d+\]|§|\baccording to\b|\bper\b\s|\bcites?\b|\(\d{4}\)|\bevidence\b|\bstud(y|ies)\b|\bdata\b)/i;
15
+ const HEDGE = /\b(likely|probabl|may|might|could|tends? to|generally|often|usually|in most|appears?|suggests?|typically|can\b)\b/i;
16
+ export const claimGroundingKernel = {
17
+ slug: "claim_grounding",
18
+ describe: "Flag absolute claims that carry neither a citation nor a qualifier",
19
+ async run(ctx) {
20
+ if (!CLAIM_PROFILES.has(ctx.profile))
21
+ return [];
22
+ const text = ctx.assistantText ?? "";
23
+ if (text.trim().length < SUBSTANTIVE)
24
+ return [];
25
+ for (const sentence of text.split(/(?<=[.!?])\s+/)) {
26
+ if (ABSOLUTE.test(sentence) && !GROUNDING.test(sentence) && !HEDGE.test(sentence)) {
27
+ return [{
28
+ severity: "warn",
29
+ kernel: "claim_grounding",
30
+ message: `Absolute claim without grounding: "${sentence.trim().slice(0, 90)}…". Cite a source or qualify it (scope/conditions/likelihood).`,
31
+ }];
32
+ }
33
+ }
34
+ return [];
35
+ },
36
+ };
37
+ // ── assumption_marked ───────────────────────────────────────────────────────
38
+ // Quantitative conclusions (projections, valuations, computed results) must
39
+ // state their assumptions. Fires when a computed conclusion appears with no
40
+ // assumptions block anywhere.
41
+ const ASSUMP_PROFILES = new Set(["finance", "data", "realtor", "engineer", "strategy", "investor", "trader", "business"]);
42
+ const COMPUTED = /\b(projection|forecast|estimat|valuation|NPV|IRR|ROI|LTV|CAC|cap rate|cash[- ]on[- ]cash|DSCR|TAM|SAM|SOM|breakeven|payback|runway|burn|multiple)\b/i;
43
+ // Prefix matches (assum→assuming, hypothes→hypotheses) — leading \b only, NO
44
+ // trailing \b (a trailing boundary would break "Assuming"/"hypotheses").
45
+ const ASSUMPTIONS = /\b(assum|given|inputs?|hypothes|all else equal|ceteris paribus|baseline|scenario|holding|we take|at\s+\d+\s*%|with\s+[\$]?\d)/i;
46
+ // An explicit worked derivation (an equation with numbers, or several figures)
47
+ // already exposes its inputs — don't double-flag a shown calculation.
48
+ const DERIVATION = /=\s*[-$€£]?\d/;
49
+ const numberCount = (s) => (s.match(/\d/g) ?? []).length;
50
+ export const assumptionMarkedKernel = {
51
+ slug: "assumption_marked",
52
+ describe: "Flag quantitative conclusions stated without inputs/assumptions or a shown derivation",
53
+ async run(ctx) {
54
+ if (!ASSUMP_PROFILES.has(ctx.profile))
55
+ return [];
56
+ const text = ctx.assistantText ?? "";
57
+ if (text.trim().length < SUBSTANTIVE)
58
+ return [];
59
+ const shownWork = has(DERIVATION, text) || numberCount(text) >= 4;
60
+ if (has(COMPUTED, text) && !has(ASSUMPTIONS, text) && !shownWork) {
61
+ return [{
62
+ severity: "warn",
63
+ kernel: "assumption_marked",
64
+ message: "A quantitative conclusion is given without stating its inputs/assumptions or showing the derivation. List the inputs (growth, rate, vacancy, churn, etc.) so the number is auditable.",
65
+ }];
66
+ }
67
+ return [];
68
+ },
69
+ };
70
+ // ── unit_consistency ────────────────────────────────────────────────────────
71
+ // In quantitative/physical domains a measurement noun followed by a bare number
72
+ // (no unit, %, or currency) is usually a missing unit. High-signal: requires the
73
+ // measurement noun adjacent to the bare number.
74
+ const UNIT_PROFILES = new Set(["engineer", "data", "realtor", "math", "science", "trader", "finance"]);
75
+ const MEASURE_BARE = /\b(temperature|distance|length|width|height|depth|weight|mass|force|pressure|voltage|current|power|speed|velocity|area|volume|frequency|energy|torque|density|wavelength|load)\b[^.\n]{0,18}?\b(\d+(?:\.\d+)?)\b(?!\s*(?:%|°|[a-zA-Zµ°Ω$€£/]))/i;
76
+ export const unitConsistencyKernel = {
77
+ slug: "unit_consistency",
78
+ describe: "Flag a physical quantity stated as a bare number with no unit",
79
+ async run(ctx) {
80
+ if (!UNIT_PROFILES.has(ctx.profile))
81
+ return [];
82
+ const text = ctx.assistantText ?? "";
83
+ if (text.trim().length < SUBSTANTIVE)
84
+ return [];
85
+ const m = text.match(MEASURE_BARE);
86
+ if (m) {
87
+ return [{
88
+ severity: "warn",
89
+ kernel: "unit_consistency",
90
+ message: `A measured quantity appears without a unit near "${m[0].trim().slice(0, 50)}". Attach units (and keep them consistent) for every physical/financial quantity.`,
91
+ }];
92
+ }
93
+ return [];
94
+ },
95
+ };
96
+ // ── sentence_variance ───────────────────────────────────────────────────────
97
+ // Uniform sentence length reads as monotone, machine-generated prose. Fires when
98
+ // many sentences have a very low length coefficient-of-variation.
99
+ const PROSE_PROFILES = new Set(["writing", "creative", "marketing", "influencer", "sales"]);
100
+ export const sentenceVarianceKernel = {
101
+ slug: "sentence_variance",
102
+ describe: "Flag monotone, uniform-length sentences (a machine-text tell)",
103
+ async run(ctx) {
104
+ if (!PROSE_PROFILES.has(ctx.profile))
105
+ return [];
106
+ const text = ctx.assistantText ?? "";
107
+ const lens = text
108
+ .split(/(?<=[.!?])\s+/)
109
+ .map((s) => s.trim().split(/\s+/).filter(Boolean).length)
110
+ .filter((n) => n >= 3);
111
+ if (lens.length < 6)
112
+ return [];
113
+ const mean = lens.reduce((a, b) => a + b, 0) / lens.length;
114
+ if (mean < 5)
115
+ return [];
116
+ const sd = Math.sqrt(lens.reduce((a, b) => a + (b - mean) ** 2, 0) / lens.length);
117
+ const cv = sd / mean;
118
+ if (cv < 0.28) {
119
+ return [{
120
+ severity: "warn",
121
+ kernel: "sentence_variance",
122
+ message: `Sentences are uniform in length (low rhythm variance). Mix short and long sentences — vary the cadence so it doesn't read as machine-generated.`,
123
+ }];
124
+ }
125
+ return [];
126
+ },
127
+ };
128
+ // ── component_states_complete ───────────────────────────────────────────────
129
+ // A UI component spec that lists some interaction states but omits the
130
+ // accessibility-critical focus/disabled states is incomplete.
131
+ const DESIGN_PROFILES = new Set(["design"]);
132
+ const COMPONENT = /\b(component|button|input|field|modal|dropdown|toggle|checkbox|radio|menu|card|form|tab|slider|switch)\b/i;
133
+ export const componentStatesCompleteKernel = {
134
+ slug: "component_states_complete",
135
+ describe: "Flag a component spec missing focus/disabled (or other) states",
136
+ async run(ctx) {
137
+ if (!DESIGN_PROFILES.has(ctx.profile))
138
+ return [];
139
+ const text = ctx.assistantText ?? "";
140
+ if (text.trim().length < SUBSTANTIVE || !COMPONENT.test(text))
141
+ return [];
142
+ const states = ["default", "hover", "focus", "active", "disabled", "loading", "error", "selected", "pressed"];
143
+ const present = states.filter((s) => new RegExp(`\\b${s}\\b`, "i").test(text));
144
+ if (present.length === 0)
145
+ return []; // not a state-level spec at all
146
+ const missing = ["focus", "disabled"].filter((s) => !present.includes(s));
147
+ if (missing.length) {
148
+ return [{
149
+ severity: "warn",
150
+ kernel: "component_states_complete",
151
+ message: `Component spec lists states (${present.join(", ")}) but is missing: ${missing.join(", ")}. Enumerate every interaction state — focus + disabled are accessibility-critical.`,
152
+ }];
153
+ }
154
+ return [];
155
+ },
156
+ };
157
+ // ── token_lint ──────────────────────────────────────────────────────────────
158
+ // Design output should reference design tokens, not hardcoded colors/sizes.
159
+ const HARDCODED_HEX = /#[0-9a-fA-F]{3,8}\b/g;
160
+ export const tokenLintKernel = {
161
+ slug: "token_lint",
162
+ describe: "Flag hardcoded colors/sizes in design output (use tokens)",
163
+ async run(ctx) {
164
+ if (!DESIGN_PROFILES.has(ctx.profile))
165
+ return [];
166
+ const text = ctx.assistantText ?? "";
167
+ if (text.trim().length < SUBSTANTIVE)
168
+ return [];
169
+ const hexes = text.match(HARDCODED_HEX) ?? [];
170
+ // Allow a stray reference; flag when there are several raw hex values AND
171
+ // no token usage at all.
172
+ if (hexes.length >= 2 && !/var\(--|tokens?\.|\$[a-z-]+\b/i.test(text)) {
173
+ return [{
174
+ severity: "warn",
175
+ kernel: "token_lint",
176
+ message: `Found ${hexes.length} hardcoded colors (${[...new Set(hexes)].slice(0, 3).join(", ")}…) and no design-token usage. Reference tokens (e.g. var(--color-...)) instead of literals.`,
177
+ }];
178
+ }
179
+ return [];
180
+ },
181
+ };
182
+ export const PROMOTED_KERNELS = [
183
+ claimGroundingKernel,
184
+ assumptionMarkedKernel,
185
+ unitConsistencyKernel,
186
+ sentenceVarianceKernel,
187
+ componentStatesCompleteKernel,
188
+ tokenLintKernel,
189
+ ];
190
+ //# sourceMappingURL=promoted_kernels.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"promoted_kernels.js","sourceRoot":"","sources":["../../src/verifiers/promoted_kernels.ts"],"names":[],"mappings":"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"}
@@ -104,9 +104,8 @@ export const sourceGateKernel = {
104
104
  const claimMatch = CLAIM_PATTERNS.map((re) => re.exec(text)).find(Boolean);
105
105
  if (!claimMatch)
106
106
  return [];
107
- // If the model READ a file this turn (Read/Edit on a real file), the
108
- // source was consulted by definition don't warn.
109
- if (ctx.touchedFiles && ctx.touchedFiles.length > 0)
107
+ // If the model READ a file this turn, the source was consulted by definition — don't warn.
108
+ if ((ctx.readFiles && ctx.readFiles.length > 0) || (ctx.touchedFiles && ctx.touchedFiles.length > 0))
110
109
  return [];
111
110
  // Did the text itself show the source was consulted (quote / link /
112
111
  // filename / "I read the file")?
@@ -1 +1 @@
1
- {"version":3,"file":"source_gate.js","sourceRoot":"","sources":["../../src/verifiers/source_gate.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"source_gate.js","sourceRoot":"","sources":["../../src/verifiers/source_gate.ts"],"names":[],"mappings":"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"}
@@ -71,6 +71,36 @@ export const testSmokeKernel = {
71
71
  }
72
72
  }
73
73
  catch { /* fall through */ }
74
+ // Vitest or Jest detection: find the touched test files and run against them.
75
+ const vitestConfig = findUpward(ctx.cwd, ["vitest.config.ts", "vitest.config.js", "vitest.config.mjs"]);
76
+ const jestConfig = findUpward(ctx.cwd, ["jest.config.ts", "jest.config.js", "jest.config.cjs", "jest.config.mjs"]);
77
+ const testFiles = ctx.touchedFiles.filter((p) => /\.(test|spec)\.(ts|tsx|js|jsx|mjs)$/.test(p));
78
+ if (vitestConfig && testFiles.length > 0) {
79
+ const rootDir = path.dirname(vitestConfig);
80
+ const res = await runCmd("npx", ["vitest", "run", "--bail=1", ...testFiles], rootDir, 5000);
81
+ if (res.code !== 0 && res.code !== -1) {
82
+ return [{
83
+ severity: "block",
84
+ kernel: "test_smoke",
85
+ message: `vitest failed (exit ${res.code}): ${res.out.slice(0, 300)}`,
86
+ location: path.relative(ctx.cwd, vitestConfig),
87
+ }];
88
+ }
89
+ return [];
90
+ }
91
+ if (jestConfig && testFiles.length > 0) {
92
+ const rootDir = path.dirname(jestConfig);
93
+ const res = await runCmd("npx", ["jest", "--bail", "--passWithNoTests", ...testFiles], rootDir, 5000);
94
+ if (res.code !== 0 && res.code !== -1) {
95
+ return [{
96
+ severity: "block",
97
+ kernel: "test_smoke",
98
+ message: `jest failed (exit ${res.code}): ${res.out.slice(0, 300)}`,
99
+ location: path.relative(ctx.cwd, jestConfig),
100
+ }];
101
+ }
102
+ return [];
103
+ }
74
104
  }
75
105
  // Python: look for pytest + tests/ dir + touched .py files.
76
106
  const pyTouched = ctx.touchedFiles.filter((p) => p.endsWith(".py"));
@@ -1 +1 @@
1
- {"version":3,"file":"test_smoke.js","sourceRoot":"","sources":["../../src/verifiers/test_smoke.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"test_smoke.js","sourceRoot":"","sources":["../../src/verifiers/test_smoke.ts"],"names":[],"mappings":"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"}
@@ -17,6 +17,9 @@ export interface VerifierContext {
17
17
  * Write or Edit). Verifiers focus their work on these to keep
18
18
  * latency low. */
19
19
  touchedFiles: string[];
20
+ /** Files the assistant READ this turn (paths passed to Read). Used by
21
+ * source_gate to confirm a source was consulted rather than recited. */
22
+ readFiles?: string[];
20
23
  /** Profile slug active during this turn. */
21
24
  profile: string;
22
25
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@vextlabs/theron-cli",
3
- "version": "0.3.0",
3
+ "version": "0.4.0",
4
4
  "description": "Theron CLI — an agentic coding assistant that verifies its own output. Runs an agentic tool loop in your terminal, then runs post-turn checks (types, tests, lint, arithmetic, citations) over the files it touched; blocking failures feed the next turn so it self-corrects. Across a 33-profile domain council. From Vext Labs.",
5
5
  "author": "Vext Labs Inc.",
6
6
  "license": "Apache-2.0",
@@ -16,6 +16,7 @@
16
16
  "files": [
17
17
  "bin",
18
18
  "dist",
19
+ "skills",
19
20
  "README.md",
20
21
  "LICENSE.txt"
21
22
  ],
@@ -29,7 +30,7 @@
29
30
  "build": "tsc -p .",
30
31
  "dev": "tsc -p . --watch",
31
32
  "start": "node ./bin/theron.js",
32
- "test": "npm run build && node test/sweep.mjs && node test/pentest.unit.test.mjs && node test/verifiers.unit.test.mjs",
33
+ "test": "npm run build && node test/sweep.mjs && node test/pentest.unit.test.mjs && node test/verifiers.unit.test.mjs && node test/input.unit.test.mjs && node test/integrity.unit.test.mjs",
33
34
  "test:integration": "npm run build && THERON_RUN_INTEGRATION=1 node test/integration.mjs",
34
35
  "prepublishOnly": "npm run build",
35
36
  "release": "npm version patch && npm publish",
@@ -38,6 +39,7 @@
38
39
  },
39
40
  "dependencies": {
40
41
  "@types/node": "^20.0.0",
42
+ "@vextlabs/theron-agent-sdk": "^0.3.1",
41
43
  "chalk": "^5.3.0",
42
44
  "fast-glob": "^3.3.2",
43
45
  "marked": "^12.0.0",