@vextlabs/theron-cli 0.2.0 → 0.3.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 (34) hide show
  1. package/dist/index.js +8 -1
  2. package/dist/index.js.map +1 -1
  3. package/dist/profiles/methodologies/build_domains.d.ts +6 -0
  4. package/dist/profiles/methodologies/build_domains.js +170 -0
  5. package/dist/profiles/methodologies/build_domains.js.map +1 -0
  6. package/dist/profiles/methodologies/regulated_domains.d.ts +6 -0
  7. package/dist/profiles/methodologies/regulated_domains.js +153 -0
  8. package/dist/profiles/methodologies/regulated_domains.js.map +1 -0
  9. package/dist/profiles/methodologies/research_domains.d.ts +8 -0
  10. package/dist/profiles/methodologies/research_domains.js +179 -0
  11. package/dist/profiles/methodologies/research_domains.js.map +1 -0
  12. package/dist/profiles/methodologies/strategy_domains.d.ts +15 -0
  13. package/dist/profiles/methodologies/strategy_domains.js +193 -0
  14. package/dist/profiles/methodologies/strategy_domains.js.map +1 -0
  15. package/dist/profiles/seeds.js +210 -85
  16. package/dist/profiles/seeds.js.map +1 -1
  17. package/dist/update_check.d.ts +4 -0
  18. package/dist/update_check.js +104 -0
  19. package/dist/update_check.js.map +1 -0
  20. package/dist/verifiers/calc_gate.d.ts +2 -0
  21. package/dist/verifiers/calc_gate.js +112 -0
  22. package/dist/verifiers/calc_gate.js.map +1 -0
  23. package/dist/verifiers/citation_gate.d.ts +2 -0
  24. package/dist/verifiers/citation_gate.js +130 -0
  25. package/dist/verifiers/citation_gate.js.map +1 -0
  26. package/dist/verifiers/evidence_gate.d.ts +2 -0
  27. package/dist/verifiers/evidence_gate.js +108 -0
  28. package/dist/verifiers/evidence_gate.js.map +1 -0
  29. package/dist/verifiers/index.js +8 -0
  30. package/dist/verifiers/index.js.map +1 -1
  31. package/dist/verifiers/source_gate.d.ts +2 -0
  32. package/dist/verifiers/source_gate.js +126 -0
  33. package/dist/verifiers/source_gate.js.map +1 -0
  34. package/package.json +6 -3
@@ -19,6 +19,10 @@
19
19
  // The 33 baseline specs map onto the full Vext council (theron-base
20
20
  // + 30 LoRA adapters + 2 newer ones). Order here = order shown in
21
21
  // /mode list.
22
+ import { CODE_METHODOLOGY, CODE_INVARIANT, ENGINEERING_METHODOLOGY, ENGINEERING_INVARIANT, DATA_METHODOLOGY, DATA_INVARIANT, } from "./methodologies/build_domains.js";
23
+ import { LEGAL_METHODOLOGY, LEGAL_INVARIANT, FINANCE_METHODOLOGY, FINANCE_INVARIANT, MEDICAL_METHODOLOGY, MEDICAL_INVARIANT, } from "./methodologies/regulated_domains.js";
24
+ import { SCIENCE_METHODOLOGY, SCIENCE_INVARIANT, RESEARCH_METHODOLOGY, RESEARCH_INVARIANT, MATH_METHODOLOGY, MATH_INVARIANT, EDUCATION_METHODOLOGY, EDUCATION_INVARIANT, } from "./methodologies/research_domains.js";
25
+ import { WRITING_METHODOLOGY, WRITING_INVARIANT, CREATIVE_METHODOLOGY, CREATIVE_INVARIANT, DESIGN_METHODOLOGY, DESIGN_INVARIANT, BUSINESS_METHODOLOGY, BUSINESS_INVARIANT, PRODUCT_METHODOLOGY, PRODUCT_INVARIANT, } from "./methodologies/strategy_domains.js";
22
26
  // ---------------------------------------------------------------------------
23
27
  // Shared building blocks
24
28
  // ---------------------------------------------------------------------------
@@ -60,23 +64,16 @@ const CORE_SIX = [
60
64
  slug: "code",
61
65
  label: "Code",
62
66
  description: "Read-first, edit-precisely, verify-after. The default Theron mode.",
63
- welcome: "Code mode — I'll read before editing, run tests after, and ship small changes.",
67
+ welcome: `Code mode — ${CODE_INVARIANT}`,
64
68
  accentHex: "#FFAE00",
65
69
  systemPromptAppend: [
66
70
  BASE_VOICE,
67
71
  ``,
68
- `CODE-SPECIFIC BEHAVIOR:`,
69
- `- Always Read a file before Editing it. Match the exact existing indentation, casing, and import style.`,
70
- `- After any Write/Edit on a .ts/.tsx/.js/.jsx file, run \`tsc --noEmit\` (or the project's typecheck script). Surface failures inline.`,
71
- `- After any Write/Edit on a .py file, run \`pytest -q\` if a tests/ dir exists.`,
72
- `- Prefer Edit (one substring swap) over Write (whole-file rewrite). Use Write only for new files or full rewrites.`,
73
- `- Call multiple tools in parallel when they're independent (Read three files at once, not one at a time).`,
74
- `- No comments unless the WHY is non-obvious. Don't restate what the code does.`,
75
- `- For diffs in chat, use real unified-diff format (@@ headers) — the CLI colors it.`,
72
+ CODE_METHODOLOGY,
76
73
  ].join("\n"),
77
74
  toolAllow: TOOLS.CODE_AND_RUN,
78
75
  hiveSpecs: ["code"],
79
- verifiers: VERIFIERS.CODE,
76
+ verifiers: ["test_smoke", "typecheck"],
80
77
  promptStarters: [
81
78
  "fix the failing test in <file>",
82
79
  "refactor <fn> to use async/await",
@@ -88,23 +85,17 @@ const CORE_SIX = [
88
85
  slug: "legal",
89
86
  label: "Legal",
90
87
  description: "Cite source clauses verbatim; never invent citations.",
91
- welcome: "Legal mode — I'll cite source clauses verbatim, mark every assumption, and never invent case law.",
88
+ welcome: `Legal mode — ${LEGAL_INVARIANT}`,
92
89
  accentHex: "#A78BFA",
93
90
  systemPromptAppend: [
94
91
  BASE_VOICE,
95
92
  ``,
96
- `LEGAL-SPECIFIC BEHAVIOR:`,
97
- `- Citations: every legal claim must point to a specific clause, statute, or case. Use the format [Source §X.Y or Case Name v. X, 123 U.S. 456 (1900)]. Never invent citations — if the source isn't in the conversation or the workspace, say "I don't have access to that source — point me at the document."`,
98
- `- Assumptions: every conclusion that depends on a fact not stated by the user gets marked "Assumption: ...". Don't hide assumptions in prose.`,
99
- `- Don't give legal advice. You're a research assistant. End every substantive response with one line: "Have a licensed attorney in {{jurisdiction}} review before relying on this."`,
100
- `- For contract review: read the document FIRST (Read), then mark each clause as Standard / Negotiable / Red-flag with a one-line reason.`,
101
- `- For statute / case research: prefer Grep over Bash. Never run untrusted code on the user's machine for legal work.`,
102
- `- Tone: precise, neutral, exhaustive. No marketing language.`,
93
+ LEGAL_METHODOLOGY,
103
94
  ].join("\n"),
104
95
  toolAllow: TOOLS.READ_AND_WRITE,
105
96
  toolDeny: ["Bash"],
106
97
  hiveSpecs: ["legal", "research"],
107
- verifiers: [...VERIFIERS.CITED, "assumption_marked", "advice_disclaimer"],
98
+ verifiers: ["citation_gate"],
108
99
  promptStarters: [
109
100
  "review this NDA — flag red-flag clauses",
110
101
  "compare these two privacy policies side by side",
@@ -116,23 +107,16 @@ const CORE_SIX = [
116
107
  slug: "finance",
117
108
  label: "Finance",
118
109
  description: "Show every arithmetic step; never round silently.",
119
- welcome: "Finance mode — I'll show every arithmetic step, mark assumptions, and double-check totals.",
110
+ welcome: `Finance mode — ${FINANCE_INVARIANT}`,
120
111
  accentHex: "#34D399",
121
112
  systemPromptAppend: [
122
113
  BASE_VOICE,
123
114
  ``,
124
- `FINANCE-SPECIFIC BEHAVIOR:`,
125
- `- Show every arithmetic step. Never round silently. If you round, state the precision explicitly ("rounded to nearest $1,000").`,
126
- `- Units: always include currency, units, and time periods. "$1.2M ARR" not "$1.2M". "12% YoY" not "12%".`,
127
- `- Assumptions: every projection or estimate gets a "Assumptions: discount rate 10%, growth rate 15% YoY for 5 years" block. No hidden inputs.`,
128
- `- For models: prefer creating/editing a CSV or markdown table. After any numeric table, re-add the column totals and verify they match.`,
129
- `- For analysis: end with one line stating the headline number AND the 1-2 inputs it's most sensitive to.`,
130
- `- Bash is OK but limit it to \`python3 -c "..."\` style calculator calls (no destructive ops).`,
131
- `- Tone: rigorous, decisive, no hedging on math. "The IRR is 14.3%" not "The IRR is approximately 14%-ish".`,
115
+ FINANCE_METHODOLOGY,
132
116
  ].join("\n"),
133
117
  toolAllow: TOOLS.CODE_AND_RUN,
134
118
  hiveSpecs: ["finance", "data"],
135
- verifiers: [...VERIFIERS.NUMERIC, "assumption_marked"],
119
+ verifiers: ["citation_gate", "calc_gate"],
136
120
  promptStarters: [
137
121
  "build a 3-year ARR projection at 15% YoY growth, 80% gross margin",
138
122
  "what's the LTV/CAC for a $50/mo SaaS with 4% monthly churn and $300 CAC?",
@@ -144,21 +128,16 @@ const CORE_SIX = [
144
128
  slug: "design",
145
129
  label: "Design",
146
130
  description: "Specify component, props, tokens, states. Produce TSX or Figma-spec markdown.",
147
- welcome: "Design mode — I'll spec components with all required states and produce TSX or Figma-ready markdown.",
131
+ welcome: `Design mode — ${DESIGN_INVARIANT}`,
148
132
  accentHex: "#F472B6",
149
133
  systemPromptAppend: [
150
134
  BASE_VOICE,
151
135
  ``,
152
- `DESIGN-SPECIFIC BEHAVIOR:`,
153
- `- For component specs: ALWAYS include all required states — default, hover, focus, focus-visible, active, disabled, error, loading. A spec that's missing a state is incomplete.`,
154
- `- Tokens, not raw values. Use design tokens (theme.colors.amber.500, theme.spacing.4) not hex codes or px values, unless the user is asking you to define tokens.`,
155
- `- Accessibility: every interactive component spec MUST include keyboard behavior (tab order, focus ring, Enter/Space/Escape) and an ARIA role/label.`,
156
- `- For TSX output: use the existing component library if you can see it in the repo (Read shadcn or whatever exists). Don't reinvent.`,
157
- `- Voice: precise design language. "Pill button — 40px height, 16px horizontal padding, 8px gap to icon, amber-500 fill, white text, 6px border-radius." Not "make a button that looks nice."`,
136
+ DESIGN_METHODOLOGY,
158
137
  ].join("\n"),
159
138
  toolAllow: TOOLS.READ_AND_WRITE,
160
139
  hiveSpecs: ["design"],
161
- verifiers: VERIFIERS.DESIGN,
140
+ verifiers: ["source_gate"],
162
141
  promptStarters: [
163
142
  "spec a primary-button component with all states",
164
143
  "audit this component for missing focus / disabled states",
@@ -170,21 +149,16 @@ const CORE_SIX = [
170
149
  slug: "research",
171
150
  label: "Research",
172
151
  description: "Cite sources, mark confidence, separate established from speculative.",
173
- welcome: "Research mode — I'll cite sources, mark confidence levels, and separate fact from speculation.",
152
+ welcome: `Research mode — ${RESEARCH_INVARIANT}`,
174
153
  accentHex: "#60A5FA",
175
154
  systemPromptAppend: [
176
155
  BASE_VOICE,
177
156
  ``,
178
- `RESEARCH-SPECIFIC BEHAVIOR:`,
179
- `- Every factual claim gets a source. Format: [Author Year] or a URL. If the source isn't in the conversation or your training data, mark it [unsourced — verify before relying on this].`,
180
- `- Confidence levels: every section ends with a 1-line confidence note. "[Confidence: high — established consensus]" / "[Confidence: medium — recent finding, 1-2 papers]" / "[Confidence: low — speculative, mark as such]".`,
181
- `- Separate STRUCTURE: open with what's established → what's actively debated → what's speculative. Never blur the three.`,
182
- `- For literature reviews: prefer WebFetch for primary sources, Grep on local files for prior notes.`,
183
- `- Tone: scholarly, qualified, honest about gaps. "We don't yet know X" beats fabricating an answer.`,
157
+ RESEARCH_METHODOLOGY,
184
158
  ].join("\n"),
185
159
  toolAllow: TOOLS.READ_AND_WRITE,
186
160
  hiveSpecs: ["research"],
187
- verifiers: [...VERIFIERS.CITED, "confidence_marked"],
161
+ verifiers: ["citation_gate", "source_gate"],
188
162
  promptStarters: [
189
163
  "what does the literature say about <topic>?",
190
164
  "summarize the state of the art in <field> in the last 18 months",
@@ -196,23 +170,16 @@ const CORE_SIX = [
196
170
  slug: "writing",
197
171
  label: "Writing",
198
172
  description: "Match the voice; never AI-isms; never em-dashes.",
199
- welcome: "Writing mode — I'll match the existing voice, avoid AI-isms, and never use em-dashes.",
173
+ welcome: `Writing mode — ${WRITING_INVARIANT}`,
200
174
  accentHex: "#FCD34D",
201
175
  systemPromptAppend: [
202
176
  BASE_VOICE,
203
177
  ``,
204
- `WRITING-SPECIFIC BEHAVIOR:`,
205
- `- NEVER use em-dashes (—). Use a period, comma, parenthesis, or "but" instead. AI-generated text is identified by em-dashes more than any other signal.`,
206
- `- Avoid AI-isms: "delve", "tapestry", "elevate", "navigate the complexities", "robust", "comprehensive", "leverages", "in today's fast-paced world". Use plain language.`,
207
- `- Match the voice. If the user provides examples of their existing writing (or a doc in the repo), Read it first and explicitly identify the voice (sentence length variance, vocabulary register, punctuation habits, openers). Then write in that voice.`,
208
- `- Sentence-length variance. Mix short. With longer ones that develop a thought. Then short again. Predictable rhythm reads as machine-generated.`,
209
- `- Active voice unless passive is genuinely better.`,
210
- `- One concrete detail beats five abstract ones. "She left at 4:47 AM" beats "She left in the early morning hours."`,
211
- `- For long-form: outline first as a markdown list, get user approval, then draft.`,
178
+ WRITING_METHODOLOGY,
212
179
  ].join("\n"),
213
180
  toolAllow: TOOLS.READ_AND_WRITE,
214
181
  hiveSpecs: ["language"],
215
- verifiers: [...VERIFIERS.WRITING, "em_dash_check", "sentence_variance"],
182
+ verifiers: ["ai_ism_check", "em_dash_check", "style_lint"],
216
183
  promptStarters: [
217
184
  "draft a launch announcement for <product> in the voice of <doc>",
218
185
  "edit this draft for em-dashes and AI-isms",
@@ -221,6 +188,114 @@ const CORE_SIX = [
221
188
  ],
222
189
  },
223
190
  ];
191
+ // ---------------------------------------------------------------------------
192
+ // Pentest / security methodology — the disciplined, evidence-first,
193
+ // AUTHORIZED-ONLY workflow shared by the `pentest` and `security`
194
+ // profiles. Encoded as a system-prompt block so Theron operates like a
195
+ // senior pentester: scope first, recon as a tracked checklist, baseline
196
+ // before perturbing, confirm with concrete evidence before claiming,
197
+ // exploit minimally, then report with severity + remediation.
198
+ //
199
+ // This is OWASP-aligned (WSTG phases) and NON-DESTRUCTIVE by contract.
200
+ // The hard guardrails below are load-bearing: they bound Theron to
201
+ // explicitly-authorized, in-scope targets and forbid anything that
202
+ // could harm the target or third parties. The canonical training target
203
+ // is OWASP Juice Shop — a deliberately-vulnerable app built for this.
204
+ // ---------------------------------------------------------------------------
205
+ // The one-line behavioral contract surfaced in the welcome + asserted by
206
+ // the evidence_gate verifier. Keep these two in sync.
207
+ const PENTEST_INVARIANT = "Confirm every vulnerability with concrete evidence (the exact request + the proving response/error) BEFORE claiming it; only test authorized in-scope targets; never destructive.";
208
+ const PENTEST_METHODOLOGY = [
209
+ `AUTHORIZED PENETRATION-TESTING METHODOLOGY (OWASP-aligned, evidence-first, non-destructive).`,
210
+ `You operate like a disciplined senior pentester. Work the phases IN ORDER. Be methodical, plan-driven, and never claim a finding you have not proven.`,
211
+ ``,
212
+ `═══ HARD GUARDRAILS (non-negotiable — these bound everything below) ═══`,
213
+ `- AUTHORIZED + IN-SCOPE ONLY. Test a target ONLY if the user has explicitly confirmed it is authorized and in scope. If scope is unclear, ambiguous, or unstated, STOP and ask "What is the exact authorized target and scope?" before any active testing. Do not guess scope.`,
214
+ `- NEVER DESTRUCTIVE. No denial-of-service or resource-exhaustion (no load/stress/flood, no fork bombs, no fuzzing that degrades the service). No deletion, corruption, or modification of data you don't own. No exfiltration of real users' personal data. No persistence, backdoors, planted accounts, or detection-evasion intended to harm. No pivoting to or scanning third-party / out-of-scope systems.`,
215
+ `- MINIMAL-IMPACT PROOF-OF-CONCEPT ONLY. Prove a vulnerability with the smallest possible evidence (one error, one extracted non-sensitive row, one token decode). Do not mass-extract, do not weaponize, do not chain into real damage.`,
216
+ `- STOP-AND-REPORT on surprise. If you discover something outside the authorized scope (another tenant's data, an adjacent host, a real production secret), STOP, do not explore further, and report it to the user immediately.`,
217
+ `- The canonical practice target is OWASP Juice Shop (a deliberately-vulnerable training app). Treat any real-world target with the same guardrails — authorization is what makes this legal, not the tooling.`,
218
+ ``,
219
+ `═══ PHASE A — SCOPE FIRST ═══`,
220
+ `- Restate the authorized target (URL/host), the in-scope surface, and any explicit out-of-scope carve-outs back to the user in one line before touching anything.`,
221
+ `- If you cannot point to an explicit authorization, you are in SCOPING mode only: ask for it. No active requests until confirmed.`,
222
+ ``,
223
+ `═══ PHASE B — RECON (track it as a CHECKLIST) ═══`,
224
+ `- Enumerate the attack surface as an explicit, tracked checklist: endpoints, parameters, auth mechanism, roles, object references. Write it down (recon/ notes) and keep it visible.`,
225
+ `- Map candidate test cases against OWASP categories: injection (SQLi/NoSQLi/command), broken auth (login bypass, weak JWT), access control (IDOR/BOLA, forced browsing), sensitive-data exposure, security misconfig, etc.`,
226
+ `- Example surface for a typical web app: SQLi on a search endpoint, auth bypass on login, JWT/admin-token inspection, file-access filter bypass, IDOR/BOLA sweep over object IDs.`,
227
+ ``,
228
+ `═══ PHASE C — BASELINE every endpoint/param BEFORE perturbing ═══`,
229
+ `- Capture the normal, expected behavior first. e.g. \`?q=apple\` returns 3 rows, \`/login\` with valid creds returns 200 + a token, \`/api/users/2\` returns user 2 for user 2.`,
230
+ `- You cannot recognize an anomaly without the baseline. Record it.`,
231
+ ``,
232
+ `═══ PHASE D — CONFIRM WITH EVIDENCE (the gate — do not skip) ═══`,
233
+ `- NEVER claim a vulnerability without the EXACT request that triggers it AND the response/error that proves it. "SQLi confirmed — \`?q=qwert'))\` triggers SQLITE_ERROR: near ... syntax error" — show the request and the proving response.`,
234
+ `- A claim without both halves of the evidence is not a finding; it's a hypothesis. State hypotheses as hypotheses until proven.`,
235
+ ``,
236
+ `═══ PHASE E — EXPLOIT systematically + minimally ═══`,
237
+ `- SQLi: baseline → trigger an error → READ the error to enumerate UNION column count → targeted extract of the minimum needed to prove impact. Stop at proof.`,
238
+ `- Auth: analyze the token (decode the JWT header/payload, check the alg, check signature trust), test login bypass with one crafted request.`,
239
+ `- IDOR/BOLA: enumerate a small number of object references as a low-privilege user; confirm you can read one object you shouldn't. Don't sweep the whole table.`,
240
+ `- Always: smallest request that proves the point. Never escalate into real damage.`,
241
+ ``,
242
+ `═══ PHASE F — REPORT ═══`,
243
+ `- Write STRUCTURED findings (a findings/ dir + recon/ notes). Each finding has: Title, Severity (Critical / High / Medium / Low), the exact reproduction request(s), the proving response/evidence, Impact (what an attacker gains), and Remediation (the concrete fix — parameterized queries, signature verification, server-side authz check).`,
244
+ `- Track progress against the recon checklist so the user can see what's tested, confirmed, and outstanding.`,
245
+ ``,
246
+ `KEY INVARIANT: ${PENTEST_INVARIANT}`,
247
+ ].join("\n");
248
+ const SECURITY_PROFILES = [
249
+ {
250
+ slug: "pentest",
251
+ label: "Pentest",
252
+ description: "Authorized, methodical web/app penetration testing — scope, recon, baseline, confirm-with-evidence, exploit minimally, report.",
253
+ welcome: `Pentest mode — authorized targets only. ${PENTEST_INVARIANT}`,
254
+ accentHex: "#EF4444",
255
+ systemPromptAppend: [
256
+ BASE_VOICE,
257
+ ``,
258
+ PENTEST_METHODOLOGY,
259
+ ].join("\n"),
260
+ toolAllow: TOOLS.CODE_AND_RUN, // needs Bash to run curl / tooling
261
+ hiveSpecs: ["cyber", "code"],
262
+ verifiers: ["evidence_gate", "typecheck", "lint"],
263
+ promptStarters: [
264
+ "pentest the authorized target at <URL> — start by mapping the attack surface",
265
+ "test <endpoint> for SQLi with evidence (baseline first, then prove it)",
266
+ "enumerate the attack surface and give me a tracked plan + a findings/ structure",
267
+ "inspect the JWT / admin token from <login endpoint> and tell me what's trust-broken",
268
+ "IDOR/BOLA sweep <object endpoint> as a low-priv user — confirm one read you shouldn't have",
269
+ ],
270
+ },
271
+ {
272
+ slug: "security",
273
+ label: "Security",
274
+ description: "Application + cloud security review — threat-model, code review, secrets-hygiene, OWASP, and authorized pentest methodology.",
275
+ welcome: `Security mode — findings get a severity + exact file:line; live testing is authorized-only. ${PENTEST_INVARIANT}`,
276
+ accentHex: "#EF4444",
277
+ systemPromptAppend: [
278
+ BASE_VOICE,
279
+ ``,
280
+ `SECURITY DOMAIN: application + cloud security review, threat modeling, secrets hygiene, OWASP top-10.`,
281
+ ``,
282
+ `For STATIC review (code / config / threat model): every finding gets a severity (Critical / High / Medium / Low) and an exact file:line. No hand-waving — point at the line.`,
283
+ ``,
284
+ `For LIVE / ACTIVE testing of a running target, follow the authorized penetration-testing methodology below. The same evidence-first, non-destructive, authorized-only discipline applies.`,
285
+ ``,
286
+ PENTEST_METHODOLOGY,
287
+ ].join("\n"),
288
+ toolAllow: TOOLS.CODE_AND_RUN,
289
+ hiveSpecs: ["cyber", "code"],
290
+ verifiers: ["evidence_gate", "typecheck", "lint"],
291
+ promptStarters: [
292
+ "audit this auth flow for OWASP top-10",
293
+ "review this Dockerfile for hardening",
294
+ "check for secrets in this repo",
295
+ "pentest the authorized target at <URL> — map the attack surface first",
296
+ ],
297
+ },
298
+ ];
224
299
  const BASELINE_SEEDS = [
225
300
  {
226
301
  slug: "general",
@@ -231,33 +306,64 @@ const BASELINE_SEEDS = [
231
306
  domainClass: "GENERAL",
232
307
  starters: ["help me think through <X>", "summarize <thing>", "what's the best way to <do Y>?"],
233
308
  },
234
- {
235
- slug: "security",
236
- label: "Security",
237
- domain: "application + cloud security review",
238
- description: "Threat-model, code review, secrets-hygiene, OWASP top-10.",
239
- invariant: "Every finding gets a severity (Critical / High / Med / Low) and an exact file:line.",
240
- domainClass: "CODE",
241
- starters: ["audit this auth flow for OWASP top-10", "review this Dockerfile for hardening", "check for secrets in this repo"],
242
- hiveSpecs: ["cyber", "code"],
243
- },
244
309
  {
245
310
  slug: "data",
246
311
  label: "Data",
247
312
  domain: "data analysis, SQL, pandas, statistics",
248
313
  description: "EDA, regression, segment analysis, BI queries.",
249
- invariant: "Show the query AND a 3-line interpretation of the result. Don't dump raw tables without a takeaway.",
314
+ invariant: DATA_INVARIANT,
250
315
  domainClass: "NUMERIC",
251
316
  toolKey: "CODE_AND_RUN",
317
+ methodology: DATA_METHODOLOGY,
318
+ verifiers: ["calc_gate"],
252
319
  starters: ["analyze this CSV — what jumps out?", "write the SQL to compute <metric>", "build a feature for this regression"],
253
320
  },
321
+ {
322
+ slug: "science",
323
+ label: "Science",
324
+ domain: "empirical science — physics, chemistry, biology, methods, evidence appraisal",
325
+ description: "Hypothesis-driven, source-bound, reproducible analysis of empirical questions.",
326
+ invariant: SCIENCE_INVARIANT,
327
+ domainClass: "CITED",
328
+ methodology: SCIENCE_METHODOLOGY,
329
+ verifiers: ["citation_gate", "source_gate"],
330
+ hiveSpecs: ["science"],
331
+ starters: ["what does the evidence say about <claim>?", "design an experiment to test <hypothesis>", "critique the methodology of this study"],
332
+ },
333
+ {
334
+ slug: "math",
335
+ label: "Math",
336
+ domain: "pure + applied math — proofs, derivations, statistics, formal reasoning",
337
+ description: "Rigorous derivations and proofs — every step shown, every assumption named.",
338
+ invariant: MATH_INVARIANT,
339
+ domainClass: "NUMERIC",
340
+ toolKey: "CODE_AND_RUN",
341
+ methodology: MATH_METHODOLOGY,
342
+ verifiers: ["calc_gate"],
343
+ hiveSpecs: ["math"],
344
+ starters: ["prove that <statement>", "derive <result> step by step", "solve this and show every step"],
345
+ },
346
+ {
347
+ slug: "business",
348
+ label: "Business",
349
+ domain: "business strategy, market analysis, competitive positioning, operating decisions",
350
+ description: "Evidence-led strategy — recommendations grounded in data, counterarguments named.",
351
+ invariant: BUSINESS_INVARIANT,
352
+ domainClass: "STRATEGY",
353
+ methodology: BUSINESS_METHODOLOGY,
354
+ verifiers: ["source_gate"],
355
+ hiveSpecs: ["business"],
356
+ starters: ["should we enter <market>?", "build the business case for <initiative>", "competitive teardown of <competitor>"],
357
+ },
254
358
  {
255
359
  slug: "product",
256
360
  label: "Product",
257
361
  domain: "product strategy, PRDs, user research",
258
362
  description: "PRDs, roadmaps, user-research synthesis, prioritization frameworks.",
259
- invariant: "Every recommendation cites the user need it serves. No HiPPO-style 'I think...'.",
363
+ invariant: PRODUCT_INVARIANT,
260
364
  domainClass: "STRATEGY",
365
+ methodology: PRODUCT_METHODOLOGY,
366
+ verifiers: ["source_gate"],
261
367
  starters: ["draft a PRD for <feature>", "prioritize this backlog using RICE", "synthesize these user interviews"],
262
368
  },
263
369
  {
@@ -328,8 +434,10 @@ const BASELINE_SEEDS = [
328
434
  label: "Creative",
329
435
  domain: "fiction, poetry, narrative copy",
330
436
  description: "Short fiction, poetry, screenplays, narrative-driven copy.",
331
- invariant: "Trust the reader. Show, don't tell. No adverbs unless the verb genuinely needs one.",
437
+ invariant: CREATIVE_INVARIANT,
332
438
  domainClass: "WRITING",
439
+ methodology: CREATIVE_METHODOLOGY,
440
+ verifiers: ["ai_ism_check", "em_dash_check", "style_lint"],
333
441
  starters: ["write a 500-word short story about <prompt>", "rewrite this in a noir voice", "draft a screenplay scene for <setting>"],
334
442
  },
335
443
  {
@@ -355,8 +463,11 @@ const BASELINE_SEEDS = [
355
463
  label: "Tutor",
356
464
  domain: "teaching, explanation, curriculum design",
357
465
  description: "Adaptive explanations, exercises, curriculum.",
358
- invariant: "Check understanding after each concept — don't lecture for 5 paragraphs without a question.",
466
+ invariant: EDUCATION_INVARIANT,
359
467
  domainClass: "WRITING",
468
+ hiveSpecs: ["education"],
469
+ methodology: EDUCATION_METHODOLOGY,
470
+ verifiers: ["citation_gate", "source_gate"],
360
471
  starters: ["teach me <concept> like I'm a beginner", "design a 4-week curriculum for <skill>", "give me 5 practice problems on <topic>"],
361
472
  },
362
473
  {
@@ -364,9 +475,11 @@ const BASELINE_SEEDS = [
364
475
  label: "Medical",
365
476
  domain: "medical literature review, clinical guidelines (educational)",
366
477
  description: "Lit review, guideline summaries. NOT a substitute for a physician.",
367
- invariant: "Every response ends with 'This is educational, not medical advice. Consult a licensed physician.' No exceptions.",
478
+ invariant: MEDICAL_INVARIANT,
368
479
  domainClass: "CITED",
369
480
  toolKey: "READ_ONLY",
481
+ methodology: MEDICAL_METHODOLOGY,
482
+ verifiers: ["citation_gate"],
370
483
  starters: ["summarize the latest research on <condition>", "compare treatment guidelines for <X>", "what are the contraindications for <drug class>?"],
371
484
  },
372
485
  {
@@ -400,10 +513,13 @@ const BASELINE_SEEDS = [
400
513
  {
401
514
  slug: "engineer",
402
515
  label: "Engineer",
403
- domain: "mechanical / electrical / civil engineering",
404
- description: "Calculations, FBDs, circuit analysis, structural specs.",
405
- invariant: "Units in EVERY calculation. Symbol → SI value → result with unit. No bare numbers.",
516
+ domain: "mechanical / electrical / civil / systems engineering",
517
+ description: "Calculations, FBDs, circuit analysis, structural specs, systems design.",
518
+ invariant: ENGINEERING_INVARIANT,
406
519
  domainClass: "NUMERIC",
520
+ toolKey: "CODE_AND_RUN",
521
+ methodology: ENGINEERING_METHODOLOGY,
522
+ verifiers: ["test_smoke", "typecheck"],
407
523
  starters: ["calc the deflection of this beam under <load>", "design a voltage divider for <Vin Vout>", "size the bolts for this connection"],
408
524
  },
409
525
  {
@@ -470,31 +586,40 @@ const BASELINE_SEEDS = [
470
586
  starters: ["write a 280-char tweet about <topic>", "design a 30-day content calendar", "what's a hook for a thread on <topic>?"],
471
587
  },
472
588
  ];
473
- // Build the auto-generated profiles from the baseline seeds.
589
+ // Build the auto-generated profiles from the baseline seeds. A seed that
590
+ // carries a hand-authored `methodology` swaps the generic baseline prompt
591
+ // for the full multi-phase block (the pentest-template pattern); its
592
+ // explicit `verifiers` then carry the gate list that asserts the invariant.
474
593
  const AUTO_PROFILES = BASELINE_SEEDS.map((s) => ({
475
594
  slug: s.slug,
476
595
  label: s.label,
477
596
  description: s.description,
478
597
  welcome: `${s.label} mode — ${s.invariant}`,
479
- systemPromptAppend: [
480
- BASE_VOICE,
481
- ``,
482
- `${s.label.toUpperCase()} DOMAIN: ${s.domain}.`,
483
- ``,
484
- `KEY INVARIANT: ${s.invariant}`,
485
- ``,
486
- `Apply the rigor expected of a senior practitioner in this domain. Cite when you cite, calculate when you calculate, and refuse to fake confidence you don't have.`,
487
- ].join("\n"),
598
+ systemPromptAppend: s.methodology
599
+ ? [BASE_VOICE, ``, s.methodology].join("\n")
600
+ : [
601
+ BASE_VOICE,
602
+ ``,
603
+ `${s.label.toUpperCase()} DOMAIN: ${s.domain}.`,
604
+ ``,
605
+ `KEY INVARIANT: ${s.invariant}`,
606
+ ``,
607
+ `Apply the rigor expected of a senior practitioner in this domain. Cite when you cite, calculate when you calculate, and refuse to fake confidence you don't have.`,
608
+ ].join("\n"),
488
609
  toolAllow: TOOLS[s.toolKey ?? "ALL_FILE"],
489
610
  hiveSpecs: s.hiveSpecs ?? [s.slug],
490
- verifiers: VERIFIERS[s.domainClass] ? [...VERIFIERS[s.domainClass]] : [...VERIFIERS.GENERAL],
611
+ verifiers: s.verifiers
612
+ ? [...s.verifiers]
613
+ : VERIFIERS[s.domainClass]
614
+ ? [...VERIFIERS[s.domainClass]]
615
+ : [...VERIFIERS.GENERAL],
491
616
  promptStarters: s.starters,
492
617
  accentHex: "#FFAE00",
493
618
  }));
494
619
  // ---------------------------------------------------------------------------
495
620
  // Combined export — the 33-spec roster the CLI ships with.
496
621
  // ---------------------------------------------------------------------------
497
- export const SEED_PROFILES = [...CORE_SIX, ...AUTO_PROFILES];
622
+ export const SEED_PROFILES = [...CORE_SIX, ...SECURITY_PROFILES, ...AUTO_PROFILES];
498
623
  /** Default profile slug used when the user hasn't picked one. */
499
624
  export const DEFAULT_PROFILE_SLUG = "code";
500
625
  //# sourceMappingURL=seeds.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"seeds.js","sourceRoot":"","sources":["../../src/profiles/seeds.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"seeds.js","sourceRoot":"","sources":["../../src/profiles/seeds.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ /** Print an update notice (from cache — instant) and refresh the cache in the
2
+ * background. Safe to call unconditionally: self-gates on TTY + opt-out env,
3
+ * never throws, never blocks the hot path. */
4
+ export declare function maybeNotifyUpdate(currentVersion: string): void;
@@ -0,0 +1,104 @@
1
+ // update_check.ts — a non-blocking "an update is available" notice.
2
+ //
3
+ // Pattern (mirrors the npm `update-notifier` package): print from a CACHED
4
+ // latest-version value so startup is INSTANT (no network on the hot path),
5
+ // and refresh that cache in the BACKGROUND for the next launch. Fail-open
6
+ // and silent on any error — an update check must never block, slow, or
7
+ // crash the CLI. Prints to STDERR so it never pollutes stdout / -p json.
8
+ //
9
+ // Opt out with THERON_NO_UPDATE_CHECK=1 (also skipped under CI and when
10
+ // stderr is not a TTY, e.g. piped / headless).
11
+ import fs from "node:fs";
12
+ import os from "node:os";
13
+ import path from "node:path";
14
+ const PKG = "@vextlabs/theron-cli";
15
+ const REGISTRY = `https://registry.npmjs.org/${encodeURIComponent(PKG)}/latest`;
16
+ const CACHE_DIR = path.join(os.homedir(), ".theron");
17
+ const CACHE_FILE = path.join(CACHE_DIR, "update-check.json");
18
+ const CHECK_INTERVAL_MS = 24 * 60 * 60 * 1000; // refresh the cache at most once/day
19
+ const FETCH_TIMEOUT_MS = 1500;
20
+ function readCache() {
21
+ try {
22
+ const c = JSON.parse(fs.readFileSync(CACHE_FILE, "utf8"));
23
+ return {
24
+ lastCheck: typeof c.lastCheck === "number" ? c.lastCheck : 0,
25
+ latest: typeof c.latest === "string" ? c.latest : null,
26
+ };
27
+ }
28
+ catch {
29
+ return { lastCheck: 0, latest: null };
30
+ }
31
+ }
32
+ function writeCache(c) {
33
+ try {
34
+ fs.mkdirSync(CACHE_DIR, { recursive: true });
35
+ fs.writeFileSync(CACHE_FILE, JSON.stringify(c), "utf8");
36
+ }
37
+ catch {
38
+ /* fail-open — caching is best-effort */
39
+ }
40
+ }
41
+ /** Split "a.b.c" into numbers; a non-numeric part becomes -1 so a malformed
42
+ * string never beats a real version. Ignores pre-release tags. */
43
+ function parts(v) {
44
+ return v
45
+ .split("-")[0]
46
+ .split(".")
47
+ .map((x) => {
48
+ const n = parseInt(x, 10);
49
+ return Number.isFinite(n) ? n : -1;
50
+ });
51
+ }
52
+ /** True if `latest` is strictly greater than `current` (numeric, semver-ish). */
53
+ function isNewer(latest, current) {
54
+ const a = parts(latest);
55
+ const b = parts(current);
56
+ for (let i = 0; i < Math.max(a.length, b.length); i++) {
57
+ const x = a[i] ?? 0;
58
+ const y = b[i] ?? 0;
59
+ if (x > y)
60
+ return true;
61
+ if (x < y)
62
+ return false;
63
+ }
64
+ return false;
65
+ }
66
+ async function fetchLatest() {
67
+ try {
68
+ const ctrl = new AbortController();
69
+ const t = setTimeout(() => ctrl.abort(), FETCH_TIMEOUT_MS);
70
+ const r = await fetch(REGISTRY, { signal: ctrl.signal, headers: { accept: "application/json" } });
71
+ clearTimeout(t);
72
+ if (!r.ok)
73
+ return null;
74
+ const j = (await r.json());
75
+ return typeof j.version === "string" ? j.version : null;
76
+ }
77
+ catch {
78
+ return null;
79
+ }
80
+ }
81
+ /** Print an update notice (from cache — instant) and refresh the cache in the
82
+ * background. Safe to call unconditionally: self-gates on TTY + opt-out env,
83
+ * never throws, never blocks the hot path. */
84
+ export function maybeNotifyUpdate(currentVersion) {
85
+ if (process.env.CI || process.env.THERON_NO_UPDATE_CHECK || !process.stderr.isTTY)
86
+ return;
87
+ const cache = readCache();
88
+ // Notify from the cached latest — no network on the launch path, so the
89
+ // notice appears starting the launch AFTER a new version is published.
90
+ if (cache.latest && isNewer(cache.latest, currentVersion)) {
91
+ process.stderr.write(`\n Update available ${currentVersion} → ${cache.latest}\n` +
92
+ ` Run npm i -g ${PKG}@latest\n\n`);
93
+ }
94
+ // Refresh the cache for next launch, at most once/day. Fire-and-forget:
95
+ // we never await it, so it cannot delay startup.
96
+ if (Date.now() - cache.lastCheck > CHECK_INTERVAL_MS) {
97
+ void fetchLatest()
98
+ .then((latest) => writeCache({ lastCheck: Date.now(), latest: latest ?? cache.latest }))
99
+ .catch(() => {
100
+ /* fail-open */
101
+ });
102
+ }
103
+ }
104
+ //# sourceMappingURL=update_check.js.map