sortie-dogs 0.2.7 → 0.2.8

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
@@ -60,8 +60,9 @@ to the `plugin` array of the OpenCode configuration the agents run under —
60
60
  Restart OpenCode afterwards. A `plugin` entry must name the package, not a
61
61
  subpath: `sortie-dogs/plugin` is an import specifier, not a plugin specifier.
62
62
 
63
- `dog-coordinator` and `dog-scout` default to `openai/gpt-5.6-luna`. To use a
64
- different model for both roles, save this as `.opencode/sortie-dogs.json`:
63
+ `dog-coordinator` keeps whichever model you select for the session. `dog-scout`
64
+ defaults to `openai/gpt-5.6-luna`. To pin either role to another model, save this
65
+ as `.opencode/sortie-dogs.json`:
65
66
 
66
67
  ```json
67
68
  {
@@ -263,13 +264,17 @@ published cost curves put a cheap model at high effort above an expensive model
263
264
  at mid effort on both solve rate and price. Sortie-dogs therefore buys effort,
264
265
  not model tiers, wherever the work allows it.
265
266
 
266
- `dog-coordinator` defaults to `openai/gpt-5.6-luna` with the `max` variant. The
267
- coordinator produces dispatches rather than code, and one malformed dispatch
268
- discards an entire worker session, so top effort here costs less than the work it
269
- protects. `dog-scout` defaults to the same model with the `high` variant, since
267
+ `dog-coordinator` has no built-in route. It is the one agent you drive directly
268
+ and pick a model for in the session, so it keeps the model you selected; a
269
+ shipped default there would silently revert your choice instead of filling an
270
+ absent one. Declare `modelRouting` for `dog-coordinator` if you do want a fixed
271
+ coordinator model.
272
+
273
+ `dog-scout` defaults to `openai/gpt-5.6-luna` with the `high` variant, since
270
274
  gathering bounded evidence is retrieval rather than reasoning and that tier is
271
- where the curve gives the most per unit of cost. Project-local routing can
272
- override either default.
275
+ where the curve gives the most per unit of cost. Nobody selects a model for a
276
+ session the loop spawns, which is why delegated roles carry defaults and the
277
+ coordinator does not. Project-local routing can override this default.
273
278
 
274
279
  The `implementation`, `remediation`, `blocker-resolution`, and `dog-worker`
275
280
  roles always use the dedicated worker target, `openai/gpt-5.6-luna` with the
@@ -39,15 +39,17 @@ export declare const DEDICATED_WORKER_ROUTING: ModelRoutingConfig;
39
39
  export declare const FIXED_MODEL_ROUTING: ModelRoutingConfig;
40
40
  export declare const RECOMMENDED_LUNA_MODEL = "openai/gpt-5.6-luna";
41
41
  /**
42
- * Dispatch quality, not code output, is what the coordinator spends effort on, and one malformed
43
- * dispatch discards an entire worker session, so the coordinator runs at the top of the cheap model's
44
- * range where that whole session costs less than the work it protects. Evidence gathering is retrieval
45
- * rather than reasoning, so the scout sits one tier lower where the cost curve is steepest per point.
42
+ * The coordinator has no built-in route on purpose. It is the one agent the user drives directly and
43
+ * picks a model for in the session, so a shipped default here does not choose between models for an
44
+ * undecided user: it silently discards a choice the user already made and cannot see being reverted.
45
+ * Delegated roles are the opposite, because nobody selects a model for a session the loop spawns.
46
+ * A host that does want a fixed coordinator model still declares one through modelRouting.
47
+ *
48
+ * Evidence gathering is retrieval rather than reasoning, so the scout sits one effort tier below the
49
+ * worker, where the published cost curve returns the most per unit of cost.
46
50
  */
47
- export declare const RECOMMENDED_COORDINATOR_VARIANT = "max";
48
51
  export declare const RECOMMENDED_SCOUT_VARIANT = "high";
49
52
  export declare const RECOMMENDED_LUNA_ROLE_VARIANTS: Readonly<{
50
- readonly "dog-coordinator": "max";
51
53
  readonly "dog-scout": "high";
52
54
  }>;
53
55
  export declare const RECOMMENDED_LUNA_ROLES: readonly string[];
@@ -53,15 +53,17 @@ export const FIXED_MODEL_ROUTING = DEDICATED_WORKER_ROUTING;
53
53
  const fixedModelRoleSet = new Set(Object.keys(FIXED_MODEL_ROUTING));
54
54
  export const RECOMMENDED_LUNA_MODEL = "openai/gpt-5.6-luna";
55
55
  /**
56
- * Dispatch quality, not code output, is what the coordinator spends effort on, and one malformed
57
- * dispatch discards an entire worker session, so the coordinator runs at the top of the cheap model's
58
- * range where that whole session costs less than the work it protects. Evidence gathering is retrieval
59
- * rather than reasoning, so the scout sits one tier lower where the cost curve is steepest per point.
56
+ * The coordinator has no built-in route on purpose. It is the one agent the user drives directly and
57
+ * picks a model for in the session, so a shipped default here does not choose between models for an
58
+ * undecided user: it silently discards a choice the user already made and cannot see being reverted.
59
+ * Delegated roles are the opposite, because nobody selects a model for a session the loop spawns.
60
+ * A host that does want a fixed coordinator model still declares one through modelRouting.
61
+ *
62
+ * Evidence gathering is retrieval rather than reasoning, so the scout sits one effort tier below the
63
+ * worker, where the published cost curve returns the most per unit of cost.
60
64
  */
61
- export const RECOMMENDED_COORDINATOR_VARIANT = "max";
62
65
  export const RECOMMENDED_SCOUT_VARIANT = "high";
63
66
  export const RECOMMENDED_LUNA_ROLE_VARIANTS = Object.freeze({
64
- "dog-coordinator": RECOMMENDED_COORDINATOR_VARIANT,
65
67
  "dog-scout": RECOMMENDED_SCOUT_VARIANT,
66
68
  });
67
69
  export const RECOMMENDED_LUNA_ROLES = Object.freeze(Object.keys(RECOMMENDED_LUNA_ROLE_VARIANTS));
@@ -137,11 +139,8 @@ export const BUILT_IN_MODEL_CATALOG = Object.freeze({
137
139
  global: Object.freeze([
138
140
  Object.freeze({
139
141
  model: DEDICATED_WORKER_MODEL,
140
- variants: Object.freeze([
141
- DEDICATED_WORKER_VARIANT,
142
- RECOMMENDED_COORDINATOR_VARIANT,
143
- RECOMMENDED_SCOUT_VARIANT,
144
- ].filter((variant, index, all) => all.indexOf(variant) === index)),
142
+ variants: Object.freeze([DEDICATED_WORKER_VARIANT, RECOMMENDED_SCOUT_VARIANT]
143
+ .filter((variant, index, all) => all.indexOf(variant) === index)),
145
144
  }),
146
145
  Object.freeze({
147
146
  model: ESCALATION_WORKER_MODEL,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "sortie-dogs",
3
- "version": "0.2.7",
3
+ "version": "0.2.8",
4
4
  "description": "Bounded, validated orchestration loop plugin for OpenCode",
5
5
  "keywords": [
6
6
  "opencode",