@jmanuelcorral/openteam 0.17.2 → 0.17.4

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.es.md CHANGED
@@ -825,7 +825,7 @@ Consulta [docs/compatibility.md](docs/compatibility.md). Resumen verificado el `
825
825
 
826
826
  | Superficie | Versión / contrato |
827
827
  | --- | --- |
828
- | openteam | `0.17.2`; versión actual del paquete |
828
+ | openteam | `0.17.4`; versión actual del paquete |
829
829
  | `@opencode-ai/plugin` | `1.18.19` |
830
830
  | `@opencode-ai/sdk` | `1.18.19` |
831
831
  | Hook de routing | `chat.message`; no `chat.params` para cambiar modelo |
package/README.md CHANGED
@@ -714,7 +714,7 @@ See [docs/compatibility.md](docs/compatibility.md). Verified summary as of `2026
714
714
 
715
715
  | Surface | Version / contract |
716
716
  | --- | --- |
717
- | openteam | `0.17.2`; current package version |
717
+ | openteam | `0.17.4`; current package version |
718
718
  | `@opencode-ai/plugin` | `1.18.19` |
719
719
  | `@opencode-ai/sdk` | `1.18.19` |
720
720
  | Routing hook | `chat.message`; not `chat.params` for model changes |
@@ -34,12 +34,12 @@
34
34
  "idempotent": true
35
35
  },
36
36
  "performance": {
37
- "p95Millis": 0.462524999999971,
37
+ "p95Millis": 0.4406839999999761,
38
38
  "budgetMillis": 50,
39
39
  "samples": 100
40
40
  }
41
41
  },
42
42
  "verdict": "pass",
43
43
  "failedGates": [],
44
- "digest": "1f51bbf60529fba584b0d050615a88ae6456b85bd19b91aca60c80b650161333"
44
+ "digest": "9c59df19809e753d9bc9e42f7a2d7b1a4f0990e24690e397686cf2e82d3e7813"
45
45
  }
@@ -20,7 +20,7 @@
20
20
  "rawFindings": 0
21
21
  },
22
22
  "overhead": {
23
- "p95Millis": 0.35418200000000866,
23
+ "p95Millis": 0.2980590000000234,
24
24
  "budgetMillis": 25,
25
25
  "samples": 1000
26
26
  },
@@ -35,5 +35,5 @@
35
35
  },
36
36
  "verdict": "pass",
37
37
  "failedGates": [],
38
- "digest": "8c2d475944be4285bdb807ad34543e43291724d3e2f695febf20b0704b255b42"
38
+ "digest": "53e500bb21bf136eceef4928f5ad22b440bd89ca720c495e69d6950268dc06c5"
39
39
  }
package/dist/cli.js CHANGED
@@ -6729,13 +6729,28 @@ var NodeSucceededEventSchema = z11.object({
6729
6729
  attemptID: AttemptIDSchema,
6730
6730
  artifact: ContextRefSchema
6731
6731
  }).strict();
6732
+ var NodeFailureClassSchema = z11.enum([
6733
+ "create-rejected",
6734
+ "create-no-id",
6735
+ "prompt-rejected",
6736
+ "prompt-timeout",
6737
+ "prompt-rate-limited",
6738
+ "prompt-auth",
6739
+ "prompt-content-filter",
6740
+ "prompt-context-length",
6741
+ "prompt-validation",
6742
+ "prompt-connection",
6743
+ "prompt-server",
6744
+ "unknown"
6745
+ ]);
6732
6746
  var NodeFailedEventSchema = z11.object({
6733
6747
  ...eventEnvelope,
6734
6748
  type: z11.literal("node.failed"),
6735
6749
  nodeID: NodeIDSchema,
6736
6750
  operationID: OperationIDSchema,
6737
6751
  attemptID: AttemptIDSchema,
6738
- errorClass: ErrorClassSchema
6752
+ errorClass: ErrorClassSchema,
6753
+ failureClass: NodeFailureClassSchema.optional()
6739
6754
  }).strict();
6740
6755
  var NodeCancelledEventSchema = z11.object({
6741
6756
  ...eventEnvelope,
@@ -7062,6 +7077,7 @@ function projectGraphEvent(event) {
7062
7077
  ..."operationID" in event ? { operationID: event.operationID } : {},
7063
7078
  ..."attemptID" in event ? { attemptID: event.attemptID } : {},
7064
7079
  ..."errorClass" in event ? { errorClass: event.errorClass } : {},
7080
+ ..."failureClass" in event && event.failureClass !== undefined ? { failureClass: event.failureClass } : {},
7065
7081
  ..."specDigest" in event ? { specDigest: event.specDigest } : {},
7066
7082
  ..."artifact" in event ? { artifact: redactedRef(event.artifact) } : {}
7067
7083
  };
@@ -7155,6 +7171,7 @@ function deriveVerdict(status) {
7155
7171
  }
7156
7172
  function indexTelemetry(telemetry) {
7157
7173
  const lastError = new Map;
7174
+ const lastFailure = new Map;
7158
7175
  const lastArtifact = new Map;
7159
7176
  for (const record of telemetry) {
7160
7177
  if (record.nodeID === undefined) {
@@ -7163,17 +7180,21 @@ function indexTelemetry(telemetry) {
7163
7180
  if (record.type === "node.failed" && record.errorClass !== undefined) {
7164
7181
  lastError.set(record.nodeID, record.errorClass);
7165
7182
  }
7183
+ if (record.type === "node.failed" && record.failureClass !== undefined) {
7184
+ lastFailure.set(record.nodeID, record.failureClass);
7185
+ }
7166
7186
  if (record.type === "node.succeeded" && record.artifact !== undefined) {
7167
7187
  lastArtifact.set(record.nodeID, record.artifact);
7168
7188
  }
7169
7189
  }
7170
- return { lastError, lastArtifact };
7190
+ return { lastError, lastFailure, lastArtifact };
7171
7191
  }
7172
- function buildNodeView(node, input, lastError, lastArtifact) {
7192
+ function buildNodeView(node, input, lastError, lastFailure, lastArtifact) {
7173
7193
  const runtime = input.state.nodes[node.id];
7174
7194
  const status = runtime?.status ?? "pending";
7175
7195
  const attempts = runtime?.attempts ?? 0;
7176
7196
  const errorClass = lastError.get(node.id);
7197
+ const failureClass = lastFailure.get(node.id);
7177
7198
  const artifact = lastArtifact.get(node.id);
7178
7199
  const sessionRef = input.sessions?.[node.id];
7179
7200
  const review = node.role === "reviewer" && node.reviews !== undefined ? { verdict: deriveVerdict(status), reassigned: attempts > 1 } : undefined;
@@ -7183,6 +7204,7 @@ function buildNodeView(node, input, lastError, lastArtifact) {
7183
7204
  state: toViewState(node, status, input.state),
7184
7205
  attempts,
7185
7206
  ...errorClass !== undefined ? { lastErrorClass: errorClass } : {},
7207
+ ...failureClass !== undefined ? { lastFailureClass: failureClass } : {},
7186
7208
  ...review !== undefined ? { review } : {},
7187
7209
  ...node.reviews !== undefined ? { revisionOf: node.reviews } : {},
7188
7210
  ...artifact !== undefined ? { artifact } : {},
@@ -7193,8 +7215,8 @@ function buildEdges(spec) {
7193
7215
  return spec.nodes.flatMap((node) => node.dependsOn.map((from) => ({ from, to: node.id })));
7194
7216
  }
7195
7217
  function buildGraphView(input) {
7196
- const { lastError, lastArtifact } = indexTelemetry(input.telemetry);
7197
- const nodes = input.spec.nodes.map((node) => buildNodeView(node, input, lastError, lastArtifact));
7218
+ const { lastError, lastFailure, lastArtifact } = indexTelemetry(input.telemetry);
7219
+ const nodes = input.spec.nodes.map((node) => buildNodeView(node, input, lastError, lastFailure, lastArtifact));
7198
7220
  const projection = {
7199
7221
  version: 1,
7200
7222
  runID: input.spec.runID,
@@ -16467,7 +16489,7 @@ async function buildMemoryRuntimeFromConfig(config, deps, options = {}) {
16467
16489
  // package.json
16468
16490
  var package_default = {
16469
16491
  name: "@jmanuelcorral/openteam",
16470
- version: "0.17.2",
16492
+ version: "0.17.4",
16471
16493
  packageManager: "bun@1.3.14",
16472
16494
  description: "Cost-aware, local-first routing plugin for opencode with cheapest-capable frontier fallback and multi-agent orchestration.",
16473
16495
  license: "MIT",
@@ -98,6 +98,36 @@ export declare const NodeSucceededEventSchema: z.ZodObject<{
98
98
  mediaType: z.ZodOptional<z.ZodString>;
99
99
  }, z.core.$strict>;
100
100
  }, z.core.$strict>;
101
+ /**
102
+ * Bounded failure class carried by `node.failed` (#225).
103
+ *
104
+ * `errorClass` has only three values, and `permanent` alone covers seven
105
+ * distinct causes — measured on a live host, that made a real production
106
+ * failure undiagnosable from the journal alone. The precise class is already
107
+ * computed during shadow synthesis, so recording it is pure gain.
108
+ *
109
+ * Deliberately duplicated from `TelemetryFailureClassSchema` in
110
+ * `src/orchestrator/coordinator.ts`: `src/graph/**` must not import
111
+ * `src/orchestrator/**`. A contract test pins the two lists in sync.
112
+ *
113
+ * Privacy: a closed enum by construction, so no prompt text, URL or provider
114
+ * error string can ever be smuggled through this field.
115
+ */
116
+ export declare const NodeFailureClassSchema: z.ZodEnum<{
117
+ "create-no-id": "create-no-id";
118
+ "create-rejected": "create-rejected";
119
+ "prompt-auth": "prompt-auth";
120
+ "prompt-connection": "prompt-connection";
121
+ "prompt-content-filter": "prompt-content-filter";
122
+ "prompt-context-length": "prompt-context-length";
123
+ "prompt-rate-limited": "prompt-rate-limited";
124
+ "prompt-rejected": "prompt-rejected";
125
+ "prompt-server": "prompt-server";
126
+ "prompt-timeout": "prompt-timeout";
127
+ "prompt-validation": "prompt-validation";
128
+ unknown: "unknown";
129
+ }>;
130
+ export type NodeFailureClass = z.infer<typeof NodeFailureClassSchema>;
101
131
  export declare const NodeFailedEventSchema: z.ZodObject<{
102
132
  v: z.ZodLiteral<1>;
103
133
  seq: z.ZodNumber;
@@ -113,6 +143,20 @@ export declare const NodeFailedEventSchema: z.ZodObject<{
113
143
  transient: "transient";
114
144
  unknown: "unknown";
115
145
  }>;
146
+ failureClass: z.ZodOptional<z.ZodEnum<{
147
+ "create-no-id": "create-no-id";
148
+ "create-rejected": "create-rejected";
149
+ "prompt-auth": "prompt-auth";
150
+ "prompt-connection": "prompt-connection";
151
+ "prompt-content-filter": "prompt-content-filter";
152
+ "prompt-context-length": "prompt-context-length";
153
+ "prompt-rate-limited": "prompt-rate-limited";
154
+ "prompt-rejected": "prompt-rejected";
155
+ "prompt-server": "prompt-server";
156
+ "prompt-timeout": "prompt-timeout";
157
+ "prompt-validation": "prompt-validation";
158
+ unknown: "unknown";
159
+ }>>;
116
160
  }, z.core.$strict>;
117
161
  export declare const NodeCancelledEventSchema: z.ZodObject<{
118
162
  v: z.ZodLiteral<1>;
@@ -183,6 +227,20 @@ export declare const GraphEventV1Schema: z.ZodDiscriminatedUnion<[z.ZodObject<{
183
227
  transient: "transient";
184
228
  unknown: "unknown";
185
229
  }>;
230
+ failureClass: z.ZodOptional<z.ZodEnum<{
231
+ "create-no-id": "create-no-id";
232
+ "create-rejected": "create-rejected";
233
+ "prompt-auth": "prompt-auth";
234
+ "prompt-connection": "prompt-connection";
235
+ "prompt-content-filter": "prompt-content-filter";
236
+ "prompt-context-length": "prompt-context-length";
237
+ "prompt-rate-limited": "prompt-rate-limited";
238
+ "prompt-rejected": "prompt-rejected";
239
+ "prompt-server": "prompt-server";
240
+ "prompt-timeout": "prompt-timeout";
241
+ "prompt-validation": "prompt-validation";
242
+ unknown: "unknown";
243
+ }>>;
186
244
  }, z.core.$strict>, z.ZodObject<{
187
245
  v: z.ZodLiteral<1>;
188
246
  seq: z.ZodNumber;
@@ -1 +1 @@
1
- {"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../src/graph/schema.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAQxB;;;;;;;GAOG;AAEH,eAAO,MAAM,kBAAkB,EAAG,CAAU,CAAC;AAC7C,eAAO,MAAM,mBAAmB,EAAG,CAAU,CAAC;AAE9C,4EAA4E;AAC5E,eAAO,MAAM,YAAY,aAIkC,CAAC;AAC5D,MAAM,MAAM,MAAM,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,YAAY,CAAC,CAAC;AAElD,+CAA+C;AAC/C,eAAO,MAAM,cAAc;;;EAAsC,CAAC;AAClE,MAAM,MAAM,QAAQ,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,cAAc,CAAC,CAAC;AAEtD,8EAA8E;AAC9E,eAAO,MAAM,iBAAiB,aAEsB,CAAC;AACrD,eAAO,MAAM,eAAe,aAEsB,CAAC;AAEnD,yDAAyD;AACzD,eAAO,MAAM,gBAAgB;;;;;;EAM3B,CAAC;AACH,MAAM,MAAM,UAAU,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,gBAAgB,CAAC,CAAC;AAE1D;;;GAGG;AACH,eAAO,MAAM,eAAe;;;;;;;;;;;;kBAQjB,CAAC;AACZ,MAAM,MAAM,SAAS,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,eAAe,CAAC,CAAC;AAExD,uEAAuE;AACvE,eAAO,MAAM,iBAAiB;;;;;;;;;;;;;;;;kBAMnB,CAAC;AACZ,MAAM,MAAM,WAAW,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,iBAAiB,CAAC,CAAC;AAQ5D,eAAO,MAAM,qBAAqB;;;;;;kBAMvB,CAAC;AAEZ,eAAO,MAAM,yBAAyB;;;;;;;;kBAQ3B,CAAC;AAEZ,eAAO,MAAM,wBAAwB;;;;;;;;;;;;;;kBAS1B,CAAC;AAEZ,eAAO,MAAM,qBAAqB;;;;;;;;;;;;;;;kBASvB,CAAC;AAEZ,eAAO,MAAM,wBAAwB;;;;;;kBAM1B,CAAC;AAEZ,eAAO,MAAM,uBAAuB;;;;;kBAEzB,CAAC;AAEZ,eAAO,MAAM,oBAAoB;;;;;kBAEtB,CAAC;AAEZ,eAAO,MAAM,uBAAuB;;;;;kBAEzB,CAAC;AAEZ,gEAAgE;AAChE,eAAO,MAAM,kBAAkB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4BAS7B,CAAC;AACH,MAAM,MAAM,YAAY,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,kBAAkB,CAAC,CAAC;AAC9D,MAAM,MAAM,cAAc,GAAG,YAAY,CAAC,MAAM,CAAC,CAAC;AAElD,mDAAmD;AACnD,qBAAa,gBAAiB,SAAQ,KAAK;IACzC,QAAQ,CAAC,IAAI,EAAE,cAAc,GAAG,eAAe,CAAC;IAChD,QAAQ,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC;IAE1B,YAAY,IAAI,EAAE,cAAc,GAAG,eAAe,EAAE,KAAK,EAAE,CAAC,CAAC,QAAQ,EAKpE;CACF;AAED,6EAA6E;AAC7E,wBAAgB,cAAc,CAAC,KAAK,EAAE,OAAO,GAAG,WAAW,CAM1D;AAED,gFAAgF;AAChF,wBAAgB,eAAe,CAAC,KAAK,EAAE,OAAO,GAAG,YAAY,CAM5D"}
1
+ {"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../src/graph/schema.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAQxB;;;;;;;GAOG;AAEH,eAAO,MAAM,kBAAkB,EAAG,CAAU,CAAC;AAC7C,eAAO,MAAM,mBAAmB,EAAG,CAAU,CAAC;AAE9C,4EAA4E;AAC5E,eAAO,MAAM,YAAY,aAIkC,CAAC;AAC5D,MAAM,MAAM,MAAM,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,YAAY,CAAC,CAAC;AAElD,+CAA+C;AAC/C,eAAO,MAAM,cAAc;;;EAAsC,CAAC;AAClE,MAAM,MAAM,QAAQ,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,cAAc,CAAC,CAAC;AAEtD,8EAA8E;AAC9E,eAAO,MAAM,iBAAiB,aAEsB,CAAC;AACrD,eAAO,MAAM,eAAe,aAEsB,CAAC;AAEnD,yDAAyD;AACzD,eAAO,MAAM,gBAAgB;;;;;;EAM3B,CAAC;AACH,MAAM,MAAM,UAAU,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,gBAAgB,CAAC,CAAC;AAE1D;;;GAGG;AACH,eAAO,MAAM,eAAe;;;;;;;;;;;;kBAQjB,CAAC;AACZ,MAAM,MAAM,SAAS,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,eAAe,CAAC,CAAC;AAExD,uEAAuE;AACvE,eAAO,MAAM,iBAAiB;;;;;;;;;;;;;;;;kBAMnB,CAAC;AACZ,MAAM,MAAM,WAAW,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,iBAAiB,CAAC,CAAC;AAQ5D,eAAO,MAAM,qBAAqB;;;;;;kBAMvB,CAAC;AAEZ,eAAO,MAAM,yBAAyB;;;;;;;;kBAQ3B,CAAC;AAEZ,eAAO,MAAM,wBAAwB;;;;;;;;;;;;;;kBAS1B,CAAC;AAEZ;;;;;;;;;;;;;;GAcG;AACH,eAAO,MAAM,sBAAsB;;;;;;;;;;;;;EAajC,CAAC;AAEH,MAAM,MAAM,gBAAgB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,sBAAsB,CAAC,CAAC;AAEtE,eAAO,MAAM,qBAAqB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;kBAWvB,CAAC;AAEZ,eAAO,MAAM,wBAAwB;;;;;;kBAM1B,CAAC;AAEZ,eAAO,MAAM,uBAAuB;;;;;kBAEzB,CAAC;AAEZ,eAAO,MAAM,oBAAoB;;;;;kBAEtB,CAAC;AAEZ,eAAO,MAAM,uBAAuB;;;;;kBAEzB,CAAC;AAEZ,gEAAgE;AAChE,eAAO,MAAM,kBAAkB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4BAS7B,CAAC;AACH,MAAM,MAAM,YAAY,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,kBAAkB,CAAC,CAAC;AAC9D,MAAM,MAAM,cAAc,GAAG,YAAY,CAAC,MAAM,CAAC,CAAC;AAElD,mDAAmD;AACnD,qBAAa,gBAAiB,SAAQ,KAAK;IACzC,QAAQ,CAAC,IAAI,EAAE,cAAc,GAAG,eAAe,CAAC;IAChD,QAAQ,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC;IAE1B,YAAY,IAAI,EAAE,cAAc,GAAG,eAAe,EAAE,KAAK,EAAE,CAAC,CAAC,QAAQ,EAKpE;CACF;AAED,6EAA6E;AAC7E,wBAAgB,cAAc,CAAC,KAAK,EAAE,OAAO,GAAG,WAAW,CAM1D;AAED,gFAAgF;AAChF,wBAAgB,eAAe,CAAC,KAAK,EAAE,OAAO,GAAG,YAAY,CAM5D"}
package/dist/index.js CHANGED
@@ -869,13 +869,28 @@ var NodeSucceededEventSchema = z5.object({
869
869
  attemptID: AttemptIDSchema,
870
870
  artifact: ContextRefSchema
871
871
  }).strict();
872
+ var NodeFailureClassSchema = z5.enum([
873
+ "create-rejected",
874
+ "create-no-id",
875
+ "prompt-rejected",
876
+ "prompt-timeout",
877
+ "prompt-rate-limited",
878
+ "prompt-auth",
879
+ "prompt-content-filter",
880
+ "prompt-context-length",
881
+ "prompt-validation",
882
+ "prompt-connection",
883
+ "prompt-server",
884
+ "unknown"
885
+ ]);
872
886
  var NodeFailedEventSchema = z5.object({
873
887
  ...eventEnvelope,
874
888
  type: z5.literal("node.failed"),
875
889
  nodeID: NodeIDSchema,
876
890
  operationID: OperationIDSchema,
877
891
  attemptID: AttemptIDSchema,
878
- errorClass: ErrorClassSchema
892
+ errorClass: ErrorClassSchema,
893
+ failureClass: NodeFailureClassSchema.optional()
879
894
  }).strict();
880
895
  var NodeCancelledEventSchema = z5.object({
881
896
  ...eventEnvelope,
@@ -13133,14 +13148,18 @@ function mapTelemetryFailureClassToErrorClass(cls) {
13133
13148
  }
13134
13149
  function classifyShadowNodeError(result) {
13135
13150
  if (result === undefined || result.subsession.success) {
13136
- return "unknown";
13151
+ return { errorClass: "unknown", failureClass: "unknown" };
13137
13152
  }
13138
13153
  const failureReason = result.subsession.failureReason ?? result.record.failureReason;
13139
13154
  const failureStage = result.subsession.failureStage ?? result.record.failureStage;
13140
13155
  if (failureReason !== undefined || failureStage !== undefined) {
13141
- return mapTelemetryFailureClassToErrorClass(classifyFailureForTelemetry(failureReason ?? "", failureStage));
13156
+ const failureClass = classifyFailureForTelemetry(failureReason ?? "", failureStage);
13157
+ return {
13158
+ errorClass: mapTelemetryFailureClassToErrorClass(failureClass),
13159
+ failureClass
13160
+ };
13142
13161
  }
13143
- return "unknown";
13162
+ return { errorClass: "unknown", failureClass: "unknown" };
13144
13163
  }
13145
13164
  function synthesizeJournalEvents(spec, results, cancelled = []) {
13146
13165
  const runID = spec.runID;
@@ -13183,6 +13202,7 @@ function synthesizeJournalEvents(spec, results, cancelled = []) {
13183
13202
  attemptID: attempt
13184
13203
  });
13185
13204
  if (result === undefined || !result.subsession.success) {
13205
+ const classified = classifyShadowNodeError(result);
13186
13206
  events.push({
13187
13207
  v: 1,
13188
13208
  seq: events.length,
@@ -13191,7 +13211,8 @@ function synthesizeJournalEvents(spec, results, cancelled = []) {
13191
13211
  nodeID: node.id,
13192
13212
  operationID: operation,
13193
13213
  attemptID: attempt,
13194
- errorClass: classifyShadowNodeError(result)
13214
+ errorClass: classified.errorClass,
13215
+ failureClass: classified.failureClass
13195
13216
  });
13196
13217
  } else {
13197
13218
  events.push({
@@ -13324,12 +13345,30 @@ async function runShadowProducer(deps, payload, batch) {
13324
13345
  }
13325
13346
  return { ok: true };
13326
13347
  }
13348
+ function assignableRoleIDs(config) {
13349
+ const ids = new Set;
13350
+ for (const roleID of Object.keys(TEAM_ROLES)) {
13351
+ ids.add(roleID);
13352
+ }
13353
+ for (const roleID of Object.keys(config.orchestrator?.roles ?? {})) {
13354
+ ids.add(roleID);
13355
+ }
13356
+ return [...ids].filter((roleID) => !isKnownNonWorkerRole(roleID)).sort();
13357
+ }
13358
+ function orchestrateToolDescription(config) {
13359
+ const roles = assignableRoleIDs(config);
13360
+ return "Distributes work across roster roles via openteam's coordinator. " + "Each assignment spawns a subsession with model selection driven by " + "the role profile and routing config. Use instead of manually spawning " + `tasks when a roster exists.
13361
+
13362
+ ` + `Assignable roles: ${roles.join(", ")}.
13363
+
13364
+ ` + "Emit one assignment per role that has genuinely distinct work, in a " + "single call — that is what parallelises the team. A call carrying only " + "one assignment has delegated nothing and is almost always a mistake " + "unless the task truly belongs to a single role. Use `dependsOn` to " + "sequence roles that must wait for another role's output; independent " + "roles are dispatched concurrently.";
13365
+ }
13327
13366
  function createOrchestrateTool(deps) {
13328
13367
  return tool4({
13329
- description: "Distributes work across roster roles via openteam's coordinator. " + "Each assignment spawns a subsession with model selection driven by " + "the role profile and routing config. Use instead of manually spawning " + "tasks when a roster exists.",
13368
+ description: orchestrateToolDescription(deps.config),
13330
13369
  args: {
13331
13370
  assignments: tool4.schema.array(tool4.schema.object({
13332
- roleID: tool4.schema.string().describe("Role identifier from the roster"),
13371
+ roleID: tool4.schema.string().describe("Role identifier from the roster (see the assignable roles " + "listed in this tool's description)"),
13333
13372
  prompt: tool4.schema.string().describe("Work prompt for this role"),
13334
13373
  title: tool4.schema.string().optional().describe("Human-readable title"),
13335
13374
  dependsOn: tool4.schema.array(tool4.schema.string()).optional().describe("Role IDs this assignment depends on")
@@ -13721,7 +13760,7 @@ var createOtlpSpanExporter = (connection, config) => {
13721
13760
  // package.json
13722
13761
  var package_default = {
13723
13762
  name: "@jmanuelcorral/openteam",
13724
- version: "0.17.2",
13763
+ version: "0.17.4",
13725
13764
  packageManager: "bun@1.3.14",
13726
13765
  description: "Cost-aware, local-first routing plugin for opencode with cheapest-capable frontier fallback and multi-agent orchestration.",
13727
13766
  license: "MIT",
@@ -212,6 +212,24 @@ export type ShadowProducerResult = {
212
212
  readonly ok: false;
213
213
  readonly failureClass: ShadowProducerFailureClass;
214
214
  };
215
+ /**
216
+ * Builds the assignable-role list advertised to the coordinator model.
217
+ *
218
+ * Measured defect (2026-09): the tool asked for a "Role identifier from the
219
+ * roster" but never said which roles exist. A local coordinator model has no
220
+ * other way to learn the roster, so it guessed a single plausible id
221
+ * (`architect`) on every call and the agent tree never fanned out. Listing the
222
+ * ids is what makes delegation reachable at all.
223
+ *
224
+ * Configured roles are merged over the built-ins so a custom roster is
225
+ * advertised too. Known non-worker ids are excluded: they name the coordinator
226
+ * itself, not something it can delegate to.
227
+ */
228
+ export declare function assignableRoleIDs(config: OpenTeamConfig): string[];
229
+ /**
230
+ * Builds the tool description. Dynamic because the roster is config-driven.
231
+ */
232
+ export declare function orchestrateToolDescription(config: OpenTeamConfig): string;
215
233
  /**
216
234
  * Creates the `openteam-orchestrate` tool.
217
235
  *
@@ -1 +1 @@
1
- {"version":3,"file":"orchestrateTool.d.ts","sourceRoot":"","sources":["../../src/plugin/orchestrateTool.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"orchestrateTool.d.ts","sourceRoot":"","sources":["../../src/plugin/orchestrateTool.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- import type { ErrorClass, GraphEventType, GraphEventV1 } from "../graph/schema";
1
+ import type { ErrorClass, GraphEventType, GraphEventV1, NodeFailureClass } from "../graph/schema";
2
2
  /**
3
3
  * **Reference-only** telemetry projection for Graph events (GE-037).
4
4
  *
@@ -19,6 +19,7 @@ export type GraphTelemetryRecord = {
19
19
  readonly operationID?: string;
20
20
  readonly attemptID?: string;
21
21
  readonly errorClass?: ErrorClass;
22
+ readonly failureClass?: NodeFailureClass;
22
23
  readonly specDigest?: string;
23
24
  readonly artifact?: {
24
25
  readonly uri: string;
@@ -1 +1 @@
1
- {"version":3,"file":"graphProjection.d.ts","sourceRoot":"","sources":["../../src/telemetry/graphProjection.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,UAAU,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAEhF;;;;;;;;;GASG;AAEH,oEAAoE;AACpE,MAAM,MAAM,oBAAoB,GAAG;IACjC,QAAQ,CAAC,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,IAAI,EAAE,cAAc,CAAC;IAC9B,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,UAAU,CAAC,EAAE,UAAU,CAAC;IACjC,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,QAAQ,CAAC,EAAE;QAClB,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;QACrB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;QACxB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;KACxB,CAAC;CACH,CAAC;AAEF;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,YAAY,GAAG,oBAAoB,CAe3E"}
1
+ {"version":3,"file":"graphProjection.d.ts","sourceRoot":"","sources":["../../src/telemetry/graphProjection.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,UAAU,EACV,cAAc,EACd,YAAY,EACZ,gBAAgB,EACjB,MAAM,iBAAiB,CAAC;AAEzB;;;;;;;;;GASG;AAEH,oEAAoE;AACpE,MAAM,MAAM,oBAAoB,GAAG;IACjC,QAAQ,CAAC,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,IAAI,EAAE,cAAc,CAAC;IAC9B,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,UAAU,CAAC,EAAE,UAAU,CAAC;IACjC,QAAQ,CAAC,YAAY,CAAC,EAAE,gBAAgB,CAAC;IACzC,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,QAAQ,CAAC,EAAE;QAClB,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;QACrB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;QACxB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;KACxB,CAAC;CACH,CAAC;AAEF;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,YAAY,GAAG,oBAAoB,CAkB3E"}
@@ -1,4 +1,4 @@
1
- import type { ErrorClass, GraphSpecV1 } from "../graph/schema";
1
+ import type { ErrorClass, GraphSpecV1, NodeFailureClass } from "../graph/schema";
2
2
  import type { GraphState } from "../graph/types";
3
3
  import type { GraphTelemetryRecord } from "./graphProjection";
4
4
  /**
@@ -30,6 +30,8 @@ export type GraphNodeView = {
30
30
  readonly state: GraphViewNodeState;
31
31
  readonly attempts: number;
32
32
  readonly lastErrorClass?: ErrorClass;
33
+ /** Precise cause behind lastErrorClass (#225). Absent on pre-#225 journals. */
34
+ readonly lastFailureClass?: NodeFailureClass;
33
35
  readonly review?: {
34
36
  readonly verdict: ReviewVerdict;
35
37
  readonly reassigned: boolean;
@@ -1 +1 @@
1
- {"version":3,"file":"graphView.d.ts","sourceRoot":"","sources":["../../src/telemetry/graphView.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,UAAU,EAAa,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAC1E,OAAO,KAAK,EAAE,UAAU,EAAc,MAAM,gBAAgB,CAAC;AAC7D,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAC;AAE9D;;;;;;;;;;;GAWG;AAEH,iFAAiF;AACjF,MAAM,MAAM,kBAAkB,GAC1B,SAAS,GACT,OAAO,GACP,QAAQ,GACR,WAAW,GACX,QAAQ,GACR,WAAW,CAAC;AAEhB,qCAAqC;AACrC,MAAM,MAAM,aAAa,GAAG,UAAU,GAAG,UAAU,GAAG,cAAc,CAAC;AAErE,2DAA2D;AAC3D,MAAM,MAAM,gBAAgB,GAAG;IAC7B,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;CACxB,CAAC;AAEF,yEAAyE;AACzE,MAAM,MAAM,aAAa,GAAG;IAC1B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,KAAK,EAAE,kBAAkB,CAAC;IACnC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,cAAc,CAAC,EAAE,UAAU,CAAC;IACrC,QAAQ,CAAC,MAAM,CAAC,EAAE;QAChB,QAAQ,CAAC,OAAO,EAAE,aAAa,CAAC;QAChC,QAAQ,CAAC,UAAU,EAAE,OAAO,CAAC;KAC9B,CAAC;IACF,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,QAAQ,CAAC,EAAE,gBAAgB,CAAC;IACrC,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;CAC9B,CAAC;AAEF,4CAA4C;AAC5C,MAAM,MAAM,aAAa,GAAG;IAC1B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;CACrB,CAAC;AAEF,iFAAiF;AACjF,MAAM,MAAM,eAAe,GAAG;IAC5B,QAAQ,CAAC,gBAAgB,EAAE,OAAO,CAAC;IACnC,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;IAChC,QAAQ,CAAC,gBAAgB,EAAE,MAAM,CAAC;IAClC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,UAAU,EAAE,OAAO,CAAC;CAC9B,CAAC;AAEF,0EAA0E;AAC1E,MAAM,MAAM,qBAAqB,GAAG;IAClC,QAAQ,CAAC,OAAO,EAAE,CAAC,CAAC;IACpB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,KAAK,EAAE,SAAS,aAAa,EAAE,CAAC;IACzC,QAAQ,CAAC,KAAK,EAAE,SAAS,aAAa,EAAE,CAAC;IACzC,QAAQ,CAAC,MAAM,EAAE,eAAe,CAAC;CAClC,CAAC;AAEF,kFAAkF;AAClF,MAAM,MAAM,cAAc,GAAG;IAC3B,QAAQ,CAAC,IAAI,EAAE,WAAW,CAAC;IAC3B,QAAQ,CAAC,KAAK,EAAE,UAAU,CAAC;IAC3B,QAAQ,CAAC,SAAS,EAAE,SAAS,oBAAoB,EAAE,CAAC;IACpD,QAAQ,CAAC,MAAM,EAAE,eAAe,CAAC;IACjC,QAAQ,CAAC,QAAQ,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;CACtD,CAAC;AA8FF;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,cAAc,GAAG,qBAAqB,CAgB3E"}
1
+ {"version":3,"file":"graphView.d.ts","sourceRoot":"","sources":["../../src/telemetry/graphView.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@jmanuelcorral/openteam",
3
- "version": "0.17.2",
3
+ "version": "0.17.4",
4
4
  "packageManager": "bun@1.3.14",
5
5
  "description": "Cost-aware, local-first routing plugin for opencode with cheapest-capable frontier fallback and multi-agent orchestration.",
6
6
  "license": "MIT",