@fro.bot/systematic 2.12.2 → 2.12.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -338,7 +338,7 @@ Systematic separates config-source precedence from overlay precedence. Config fi
338
338
 
339
339
  Source category model defaults are primary model choices only — they are not fallback chains. Systematic does not support `fallback_models`, inherited retry semantics, runtime fallback behavior, or fallback to the parent model when a source model is unavailable. Explicit and source model IDs are structurally validated and may still fail at OpenCode runtime if the provider or model is unavailable.
340
340
 
341
- Source category model defaults are now ordered preference arrays per category rather than single strings. At plugin load, Systematic reads OpenCode's authentication state from `auth.json` and selects the first array entry whose provider is authenticated. For example, the `review` category defaults to `['anthropic/claude-opus-4.7', 'openai/gpt-5.5']` — a user authenticated only to OpenAI receives `openai/gpt-5.5` (first match), while a user authenticated to Anthropic (or both) receives the more preferred `anthropic/claude-opus-4.7`. If no array entry's provider is authenticated, the first entry is used as the default. The arrays are an ordered preference list, not a runtime fallback chain — `fallback_models` is still not supported.
341
+ Source category model defaults are now ordered preference arrays per category rather than single strings. At plugin load, Systematic reads OpenCode's authentication state from `auth.json` and selects the first array entry whose provider is authenticated. For example, the `review` category defaults to `['anthropic/claude-sonnet-4-6', 'openai/gpt-5.3-codex']` — a user authenticated only to OpenAI receives `openai/gpt-5.5` (first match), while a user authenticated to Anthropic (or both) receives the more preferred `anthropic/claude-sonnet-4-6`. If no array entry's provider is authenticated, the first entry is used as the default. The arrays are an ordered preference list, not a runtime fallback chain — `fallback_models` is still not supported.
342
342
 
343
343
  If you want to restore OpenCode parent-model inheritance for a bundled agent or category (opting out of the source default), set `"model": null` in high-trust user or `$OPENCODE_CONFIG_DIR/systematic.json` config. Project config cannot use `model: null` — project config cannot set, erase, or shadow `model` at any value.
344
344
 
@@ -346,11 +346,11 @@ The source defaults are:
346
346
 
347
347
  | Category | Default `model` | Rationale |
348
348
  |----------|-----------------|-----------|
349
- | `design` | `openai/gpt-5.5` | High-judgment UX/product/design work benefits from a strong general reasoning model. |
350
- | `docs` | `openai/gpt-5.4-mini` | Documentation and summarization should start cheaper/faster. |
351
- | `document-review` | `anthropic/claude-opus-4.7` | Requirements and plan critique benefit from strongest nuanced reasoning. |
352
- | `research` | `openai/gpt-5.5` | Tool-heavy synthesis and source evaluation benefit from a strong general reasoning model. |
353
- | `review` | `anthropic/claude-opus-4.7` | Code/security/adversarial review benefits from strongest reasoning. |
349
+ | `design` | `github-copilot/gemini-3.1-pro-preview` | High-judgment UX/product/design work benefits from a strong general reasoning model. |
350
+ | `docs` | `github-copilot/gemini-3.1-pro-preview` | Documentation and summarization should start cheaper/faster. |
351
+ | `document-review` | `anthropic/claude-opus-4-7` | Requirements and plan critique benefit from strongest nuanced reasoning. |
352
+ | `research` | `openai/gpt-5.4-mini` | Tool-heavy synthesis and source evaluation benefit from a strong general reasoning model. |
353
+ | `review` | `anthropic/claude-sonnet-4-6` | Code/security/adversarial review benefits from strongest reasoning. |
354
354
  | `workflow` | `openai/gpt-5.4-mini` | Orchestration and bounded implementation should default cheaper/faster. |
355
355
 
356
356
  These defaults are owned by Systematic code and emitted for bundled agents in each category when no stronger high-trust exact or category `model` override exists. Uncategorized bundled agents receive no source default and continue inheriting the parent OpenCode model. Native OpenCode agents with the same emitted key are full replacements and receive no Systematic source model default.
package/dist/cli.js CHANGED
@@ -6,7 +6,7 @@ import {
6
6
  findCommandsInDir,
7
7
  findSkillsInDir,
8
8
  getConfigPaths
9
- } from "./index-b4ht76qd.js";
9
+ } from "./index-gb1v2n3m.js";
10
10
 
11
11
  // src/cli.ts
12
12
  import fs from "fs";
@@ -15224,7 +15224,7 @@ var AgentOverlaySchema = exports_external.object({
15224
15224
  description: "Per-agent configuration overlay",
15225
15225
  examples: [
15226
15226
  {
15227
- model: "anthropic/claude-opus-4.7",
15227
+ model: "anthropic/claude-opus-4-7",
15228
15228
  temperature: 0.1,
15229
15229
  mode: "subagent"
15230
15230
  }
@@ -15243,7 +15243,7 @@ var CategoryOverlaySchema = exports_external.object({
15243
15243
  permission: trustProtected(permissionSchema).optional()
15244
15244
  }).strict().meta({
15245
15245
  description: "Per-category configuration overlay (same fields as agent minus disable)",
15246
- examples: [{ model: "anthropic/claude-opus-4.7", temperature: 0.1 }]
15246
+ examples: [{ model: "anthropic/claude-opus-4-7", temperature: 0.1 }]
15247
15247
  });
15248
15248
  var BootstrapSchema = exports_external.object({
15249
15249
  enabled: exports_external.boolean().default(true).meta({
@@ -15271,7 +15271,7 @@ var SystematicConfigSchema = exports_external.object({
15271
15271
  }),
15272
15272
  categories: exports_external.record(exports_external.string(), CategoryOverlaySchema).default({}).meta({
15273
15273
  description: "Per-category configuration overlays keyed by category name",
15274
- examples: [{ review: { model: "anthropic/claude-opus-4.7" } }, {}]
15274
+ examples: [{ review: { model: "anthropic/claude-opus-4-7" } }, {}]
15275
15275
  }),
15276
15276
  disabled_skills: exports_external.array(exports_external.string()).default([]).meta({
15277
15277
  description: "Array of skill names to disable globally",
@@ -15298,7 +15298,7 @@ var SystematicConfigSchema = exports_external.object({
15298
15298
  });
15299
15299
  var SourceCategoryModelDefaultsSchema = exports_external.record(exports_external.string(), exports_external.array(exports_external.string().min(1).regex(MODEL_FORMAT_REGEX, MODEL_FORMAT_MESSAGE)).min(1)).meta({
15300
15300
  description: "Validates source category model defaults shape",
15301
- examples: [{ design: ["openai/gpt-5.5", "anthropic/claude-opus-4.7"] }]
15301
+ examples: [{ design: ["openai/gpt-5.5", "anthropic/claude-opus-4-7"] }]
15302
15302
  });
15303
15303
  function assertSourceCategoryModelDefaults(defaults) {
15304
15304
  SourceCategoryModelDefaultsSchema.parse(defaults);
package/dist/index.js CHANGED
@@ -13,7 +13,7 @@ import {
13
13
  loadConfig,
14
14
  loadConfigWithSources,
15
15
  parseFrontmatter
16
- } from "./index-b4ht76qd.js";
16
+ } from "./index-gb1v2n3m.js";
17
17
 
18
18
  // src/index.ts
19
19
  import fs4 from "fs";
@@ -110,12 +110,20 @@ import fs2 from "fs";
110
110
  import os2 from "os";
111
111
  import path2 from "path";
112
112
  var SOURCE_CATEGORY_MODEL_DEFAULTS = {
113
- design: ["openai/gpt-5.5", "anthropic/claude-opus-4.7"],
114
- docs: ["openai/gpt-5.4-mini", "anthropic/claude-haiku-4-5"],
115
- "document-review": ["anthropic/claude-opus-4.7", "openai/gpt-5.5"],
116
- research: ["openai/gpt-5.5", "anthropic/claude-opus-4.7"],
117
- review: ["anthropic/claude-opus-4.7", "openai/gpt-5.5"],
118
- workflow: ["openai/gpt-5.4-mini", "anthropic/claude-haiku-4-5"]
113
+ design: [
114
+ "github-copilot/gemini-3.1-pro-preview",
115
+ "openai/gpt-5.5",
116
+ "anthropic/claude-opus-4-7"
117
+ ],
118
+ docs: [
119
+ "github-copilot/gemini-3.1-pro-preview",
120
+ "openai/gpt-5.4-mini",
121
+ "anthropic/claude-haiku-4-5"
122
+ ],
123
+ "document-review": ["anthropic/claude-sonnet-4-6", "openai/gpt-5.4-mini"],
124
+ research: ["openai/gpt-5.4-mini", "anthropic/claude-sonnet-4-6"],
125
+ review: ["anthropic/claude-sonnet-4-6", "openai/gpt-5.3-codex"],
126
+ workflow: ["openai/gpt-5.4-mini", "anthropic/claude-sonnet-4-6"]
119
127
  };
120
128
  function buildBundledAgentInventory(agentsDir, disabledAgents) {
121
129
  const categories = readCategoryDirs(agentsDir);
@@ -161,7 +161,7 @@
161
161
  "description": "Per-agent configuration overlay",
162
162
  "examples": [
163
163
  {
164
- "model": "anthropic/claude-opus-4.7",
164
+ "model": "anthropic/claude-opus-4-7",
165
165
  "temperature": 0.1,
166
166
  "mode": "subagent"
167
167
  }
@@ -174,7 +174,7 @@
174
174
  "examples": [
175
175
  {
176
176
  "review": {
177
- "model": "anthropic/claude-opus-4.7"
177
+ "model": "anthropic/claude-opus-4-7"
178
178
  }
179
179
  },
180
180
  {}
@@ -314,7 +314,7 @@
314
314
  "description": "Per-category configuration overlay (same fields as agent minus disable)",
315
315
  "examples": [
316
316
  {
317
- "model": "anthropic/claude-opus-4.7",
317
+ "model": "anthropic/claude-opus-4-7",
318
318
  "temperature": 0.1
319
319
  }
320
320
  ]
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@fro.bot/systematic",
3
- "version": "2.12.2",
3
+ "version": "2.12.3",
4
4
  "description": "Structured engineering workflows for OpenCode",
5
5
  "type": "module",
6
6
  "homepage": "https://fro.bot/systematic",
@@ -69,8 +69,8 @@
69
69
  "@types/bun": "latest",
70
70
  "@types/js-yaml": "4.0.9",
71
71
  "@types/node": "24.12.3",
72
- "ajv": "^8.20.0",
73
- "ajv-formats": "^3.0.1",
72
+ "ajv": "8.20.0",
73
+ "ajv-formats": "3.0.1",
74
74
  "conventional-changelog-conventionalcommits": "9.3.1",
75
75
  "markdownlint-cli": "0.48.0",
76
76
  "rimraf": "6.1.3",