@garygentry/system1-core 0.3.2 → 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 (78) hide show
  1. package/dist/egress/scrub.d.ts.map +1 -1
  2. package/dist/egress/scrub.js +16 -0
  3. package/dist/egress/scrub.js.map +1 -1
  4. package/dist/index.d.ts +11 -1
  5. package/dist/index.d.ts.map +1 -1
  6. package/dist/index.js +6 -1
  7. package/dist/index.js.map +1 -1
  8. package/dist/model/schema.d.ts +22 -0
  9. package/dist/model/schema.d.ts.map +1 -0
  10. package/dist/model/schema.js +26 -0
  11. package/dist/model/schema.js.map +1 -0
  12. package/dist/opportunities/backlog.d.ts +280 -0
  13. package/dist/opportunities/backlog.d.ts.map +1 -0
  14. package/dist/opportunities/backlog.js +393 -0
  15. package/dist/opportunities/backlog.js.map +1 -0
  16. package/dist/prepare.d.ts +8 -0
  17. package/dist/prepare.d.ts.map +1 -1
  18. package/dist/prepare.js +42 -6
  19. package/dist/prepare.js.map +1 -1
  20. package/dist/project/project.d.ts +36 -0
  21. package/dist/project/project.d.ts.map +1 -1
  22. package/dist/project/project.js +64 -18
  23. package/dist/project/project.js.map +1 -1
  24. package/dist/sources/filter.d.ts +19 -0
  25. package/dist/sources/filter.d.ts.map +1 -0
  26. package/dist/sources/filter.js +30 -0
  27. package/dist/sources/filter.js.map +1 -0
  28. package/dist/sources/read.d.ts +10 -0
  29. package/dist/sources/read.d.ts.map +1 -1
  30. package/dist/sources/read.js +7 -2
  31. package/dist/sources/read.js.map +1 -1
  32. package/dist/sources/types.d.ts +2 -2
  33. package/dist/sources/types.d.ts.map +1 -1
  34. package/dist/spec/lint.d.ts +35 -0
  35. package/dist/spec/lint.d.ts.map +1 -0
  36. package/dist/spec/lint.js +175 -0
  37. package/dist/spec/lint.js.map +1 -0
  38. package/dist/spec/spec.d.ts +2 -0
  39. package/dist/spec/spec.d.ts.map +1 -1
  40. package/dist/spec/spec.js +3 -1
  41. package/dist/spec/spec.js.map +1 -1
  42. package/dist/tools/ask.d.ts.map +1 -1
  43. package/dist/tools/ask.js +10 -13
  44. package/dist/tools/ask.js.map +1 -1
  45. package/dist/tools/context.d.ts +5 -0
  46. package/dist/tools/context.d.ts.map +1 -1
  47. package/dist/tools/context.js +24 -0
  48. package/dist/tools/context.js.map +1 -1
  49. package/dist/tools/doctor.d.ts +1 -1
  50. package/dist/tools/doctor.d.ts.map +1 -1
  51. package/dist/tools/doctor.js +33 -1
  52. package/dist/tools/doctor.js.map +1 -1
  53. package/dist/tools/many.d.ts.map +1 -1
  54. package/dist/tools/many.js +3 -0
  55. package/dist/tools/many.js.map +1 -1
  56. package/dist/tools/opportunities.d.ts +33 -0
  57. package/dist/tools/opportunities.d.ts.map +1 -0
  58. package/dist/tools/opportunities.js +74 -0
  59. package/dist/tools/opportunities.js.map +1 -0
  60. package/dist/tools/schemas.d.ts +155 -12
  61. package/dist/tools/schemas.d.ts.map +1 -1
  62. package/dist/tools/schemas.js +32 -25
  63. package/dist/tools/schemas.js.map +1 -1
  64. package/dist/tools/spec-check.d.ts +6 -0
  65. package/dist/tools/spec-check.d.ts.map +1 -1
  66. package/dist/tools/spec-check.js +3 -0
  67. package/dist/tools/spec-check.js.map +1 -1
  68. package/dist/tools/spec-lint.d.ts +31 -0
  69. package/dist/tools/spec-lint.d.ts.map +1 -0
  70. package/dist/tools/spec-lint.js +53 -0
  71. package/dist/tools/spec-lint.js.map +1 -0
  72. package/dist/transport/openrouter.d.ts +4 -1
  73. package/dist/transport/openrouter.d.ts.map +1 -1
  74. package/dist/transport/openrouter.js +5 -2
  75. package/dist/transport/openrouter.js.map +1 -1
  76. package/dist/version.d.ts +1 -1
  77. package/dist/version.js +1 -1
  78. package/package.json +1 -1
@@ -6,17 +6,14 @@ export declare const AskInput: Type.TObject<{
6
6
  questions: Type.TOptional<Type.TRecord<"^.*$", Type.TUnion<[Type.TObject<{
7
7
  type: Type.TLiteral<"noul">;
8
8
  instructions: Type.TString;
9
- /** Optional `true`/`false` criteria that sharpen an ambiguous statement. */
10
9
  criteria: Type.TOptional<Type.TRecord<"^.*$", Type.TString>>;
11
10
  }>, Type.TObject<{
12
11
  type: Type.TLiteral<"choice">;
13
12
  instructions: Type.TString;
14
- /** Option key to when it applies. At least two, including a way out. */
15
13
  criteria: Type.TRecord<"^.*$", Type.TString>;
16
14
  }>, Type.TObject<{
17
15
  type: Type.TLiteral<"score">;
18
16
  instructions: Type.TString;
19
- /** Levels, lowest first and 0-indexed. */
20
17
  criteria: Type.TArray<Type.TString>;
21
18
  }>]>>>;
22
19
  /** Where the content comes from. Defaults to the spec's `source`. */
@@ -46,10 +43,17 @@ export declare const AskInput: Type.TObject<{
46
43
  staged: Type.TOptional<Type.TBoolean>;
47
44
  paths: Type.TOptional<Type.TArray<Type.TString>>;
48
45
  }>]>>>;
46
+ /**
47
+ * Leave out paths matching these globs (repo-relative, like `glob`). A per-call
48
+ * choice, reported as `filtered`; egress excludes still apply on top.
49
+ */
50
+ exclude: Type.TOptional<Type.TArray<Type.TString>>;
49
51
  /** `file` | `hunk` | `row` | `lines:N[/overlap]`. */
50
52
  split: Type.TOptional<Type.TString>;
51
53
  /** Filters, ANDed: `relevant>=0.7`, `kind in fix,feature`. */
52
54
  keep: Type.TOptional<Type.TArray<Type.TString>>;
55
+ /** Kept when any of these matches (and every `keep` does): `a>=0.3`, `b>=0.3`. */
56
+ keepAny: Type.TOptional<Type.TArray<Type.TString>>;
53
57
  mode: Type.TOptional<Type.TUnion<[Type.TLiteral<"auto">, Type.TLiteral<"live">, Type.TLiteral<"record">, Type.TLiteral<"replay">]>>;
54
58
  model: Type.TOptional<Type.TString>;
55
59
  /**
@@ -65,17 +69,14 @@ export declare const ManyInput: Type.TObject<{
65
69
  questions: Type.TOptional<Type.TRecord<"^.*$", Type.TUnion<[Type.TObject<{
66
70
  type: Type.TLiteral<"noul">;
67
71
  instructions: Type.TString;
68
- /** Optional `true`/`false` criteria that sharpen an ambiguous statement. */
69
72
  criteria: Type.TOptional<Type.TRecord<"^.*$", Type.TString>>;
70
73
  }>, Type.TObject<{
71
74
  type: Type.TLiteral<"choice">;
72
75
  instructions: Type.TString;
73
- /** Option key to when it applies. At least two, including a way out. */
74
76
  criteria: Type.TRecord<"^.*$", Type.TString>;
75
77
  }>, Type.TObject<{
76
78
  type: Type.TLiteral<"score">;
77
79
  instructions: Type.TString;
78
- /** Levels, lowest first and 0-indexed. */
79
80
  criteria: Type.TArray<Type.TString>;
80
81
  }>]>>>;
81
82
  /** Where the content comes from. Defaults to the spec's `source`. */
@@ -105,10 +106,17 @@ export declare const ManyInput: Type.TObject<{
105
106
  staged: Type.TOptional<Type.TBoolean>;
106
107
  paths: Type.TOptional<Type.TArray<Type.TString>>;
107
108
  }>]>>>;
109
+ /**
110
+ * Leave out paths matching these globs (repo-relative, like `glob`). A per-call
111
+ * choice, reported as `filtered`; egress excludes still apply on top.
112
+ */
113
+ exclude: Type.TOptional<Type.TArray<Type.TString>>;
108
114
  /** `file` | `hunk` | `row` | `lines:N[/overlap]`. */
109
115
  split: Type.TOptional<Type.TString>;
110
116
  /** Filters, ANDed: `relevant>=0.7`, `kind in fix,feature`. */
111
117
  keep: Type.TOptional<Type.TArray<Type.TString>>;
118
+ /** Kept when any of these matches (and every `keep` does): `a>=0.3`, `b>=0.3`. */
119
+ keepAny: Type.TOptional<Type.TArray<Type.TString>>;
112
120
  mode: Type.TOptional<Type.TUnion<[Type.TLiteral<"auto">, Type.TLiteral<"live">, Type.TLiteral<"record">, Type.TLiteral<"replay">]>>;
113
121
  model: Type.TOptional<Type.TString>;
114
122
  /**
@@ -141,6 +149,68 @@ export declare const SpecCheckInput: Type.TObject<{
141
149
  /** Proceed past the spend guard. */
142
150
  confirm: Type.TOptional<Type.TBoolean>;
143
151
  }>;
152
+ export declare const SpecLintInput: Type.TObject<{
153
+ /** Spec name (repo → user → bundled) or path. Omitted: every spec in reach. */
154
+ spec: Type.TOptional<Type.TString>;
155
+ }>;
156
+ export declare const OpportunitiesAddInput: Type.TObject<{
157
+ /** Candidates to merge into `.system1/opportunities.json`. */
158
+ candidates: Type.TArray<Type.TObject<{
159
+ mode: Type.TUnion<[Type.TLiteral<"code">, Type.TLiteral<"agents">]>;
160
+ location: Type.TObject<{
161
+ path: Type.TString;
162
+ lines: Type.TOptional<Type.TObject<{
163
+ start: Type.TInteger;
164
+ end: Type.TInteger;
165
+ }>>;
166
+ }>;
167
+ mechanism: Type.TString;
168
+ shape: Type.TUnion<[Type.TLiteral<"single">, Type.TLiteral<"fanout">, Type.TLiteral<"cascade">, Type.TLiteral<"pairwise">]>;
169
+ evidence: Type.TString;
170
+ questions: Type.TRecord<"^.*$", Type.TUnion<[Type.TObject<{
171
+ type: Type.TLiteral<"noul">;
172
+ instructions: Type.TString;
173
+ criteria: Type.TOptional<Type.TRecord<"^.*$", Type.TString>>;
174
+ }>, Type.TObject<{
175
+ type: Type.TLiteral<"choice">;
176
+ instructions: Type.TString;
177
+ criteria: Type.TRecord<"^.*$", Type.TString>;
178
+ }>, Type.TObject<{
179
+ type: Type.TLiteral<"score">;
180
+ instructions: Type.TString;
181
+ criteria: Type.TArray<Type.TString>;
182
+ }>]>>;
183
+ benefit: Type.TUnion<[Type.TLiteral<"cost">, Type.TLiteral<"quality">, Type.TLiteral<"latency">]>;
184
+ projected: Type.TObject<{
185
+ volume: Type.TNumber;
186
+ per: Type.TString;
187
+ currentCostPerItemUsd: Type.TNumber;
188
+ decisionCostPerItemUsd: Type.TNumber;
189
+ note: Type.TOptional<Type.TString>;
190
+ }>;
191
+ risk: Type.TObject<{
192
+ level: Type.TUnion<[Type.TLiteral<"low">, Type.TLiteral<"medium">, Type.TLiteral<"high">]>;
193
+ note: Type.TString;
194
+ }>;
195
+ next: Type.TString;
196
+ status: Type.TOptional<Type.TUnion<[Type.TLiteral<"new">, Type.TLiteral<"stale">, Type.TLiteral<"adopted">, Type.TLiteral<"rejected">]>>;
197
+ statusReason: Type.TOptional<Type.TString>;
198
+ source: Type.TObject<{
199
+ sweep: Type.TString;
200
+ answers: Type.TUnion<[Type.TLiteral<"live">, Type.TLiteral<"replay">]>;
201
+ }>;
202
+ }>>;
203
+ }>;
204
+ export declare const OpportunitiesListInput: Type.TObject<{
205
+ /** Record filters, ANDed: `status=new`, `risk in medium,high`, `projected>=0.01`. */
206
+ keep: Type.TOptional<Type.TArray<Type.TString>>;
207
+ /** `projected:desc` (the default), `seenAt:asc`, … */
208
+ sort: Type.TOptional<Type.TString>;
209
+ limit: Type.TOptional<Type.TInteger>;
210
+ /** Top-level fields to include per entry; `id` always is. */
211
+ fields: Type.TOptional<Type.TArray<Type.TString>>;
212
+ }>;
213
+ export declare const OpportunitiesCheckInput: Type.TObject<{}>;
144
214
  export declare const RouteInput: Type.TObject<{
145
215
  /** The user's prompt, as the harness hook received it. */
146
216
  prompt: Type.TString;
@@ -150,6 +220,9 @@ export type ManyInput = Static<typeof ManyInput>;
150
220
  export type UsageInput = Static<typeof UsageInput>;
151
221
  export type SpecCheckInput = Static<typeof SpecCheckInput>;
152
222
  export type RouteInput = Static<typeof RouteInput>;
223
+ export type SpecLintInput = Static<typeof SpecLintInput>;
224
+ export type OpportunitiesAddInput = Static<typeof OpportunitiesAddInput>;
225
+ export type OpportunitiesListInput = Static<typeof OpportunitiesListInput>;
153
226
  export declare const TOOL_SCHEMAS: {
154
227
  readonly ask: Type.TObject<{
155
228
  /** A saved spec: name (repo → user → bundled) or path. */
@@ -158,17 +231,14 @@ export declare const TOOL_SCHEMAS: {
158
231
  questions: Type.TOptional<Type.TRecord<"^.*$", Type.TUnion<[Type.TObject<{
159
232
  type: Type.TLiteral<"noul">;
160
233
  instructions: Type.TString;
161
- /** Optional `true`/`false` criteria that sharpen an ambiguous statement. */
162
234
  criteria: Type.TOptional<Type.TRecord<"^.*$", Type.TString>>;
163
235
  }>, Type.TObject<{
164
236
  type: Type.TLiteral<"choice">;
165
237
  instructions: Type.TString;
166
- /** Option key to when it applies. At least two, including a way out. */
167
238
  criteria: Type.TRecord<"^.*$", Type.TString>;
168
239
  }>, Type.TObject<{
169
240
  type: Type.TLiteral<"score">;
170
241
  instructions: Type.TString;
171
- /** Levels, lowest first and 0-indexed. */
172
242
  criteria: Type.TArray<Type.TString>;
173
243
  }>]>>>;
174
244
  /** Where the content comes from. Defaults to the spec's `source`. */
@@ -198,10 +268,17 @@ export declare const TOOL_SCHEMAS: {
198
268
  staged: Type.TOptional<Type.TBoolean>;
199
269
  paths: Type.TOptional<Type.TArray<Type.TString>>;
200
270
  }>]>>>;
271
+ /**
272
+ * Leave out paths matching these globs (repo-relative, like `glob`). A per-call
273
+ * choice, reported as `filtered`; egress excludes still apply on top.
274
+ */
275
+ exclude: Type.TOptional<Type.TArray<Type.TString>>;
201
276
  /** `file` | `hunk` | `row` | `lines:N[/overlap]`. */
202
277
  split: Type.TOptional<Type.TString>;
203
278
  /** Filters, ANDed: `relevant>=0.7`, `kind in fix,feature`. */
204
279
  keep: Type.TOptional<Type.TArray<Type.TString>>;
280
+ /** Kept when any of these matches (and every `keep` does): `a>=0.3`, `b>=0.3`. */
281
+ keepAny: Type.TOptional<Type.TArray<Type.TString>>;
205
282
  mode: Type.TOptional<Type.TUnion<[Type.TLiteral<"auto">, Type.TLiteral<"live">, Type.TLiteral<"record">, Type.TLiteral<"replay">]>>;
206
283
  model: Type.TOptional<Type.TString>;
207
284
  /**
@@ -217,17 +294,14 @@ export declare const TOOL_SCHEMAS: {
217
294
  questions: Type.TOptional<Type.TRecord<"^.*$", Type.TUnion<[Type.TObject<{
218
295
  type: Type.TLiteral<"noul">;
219
296
  instructions: Type.TString;
220
- /** Optional `true`/`false` criteria that sharpen an ambiguous statement. */
221
297
  criteria: Type.TOptional<Type.TRecord<"^.*$", Type.TString>>;
222
298
  }>, Type.TObject<{
223
299
  type: Type.TLiteral<"choice">;
224
300
  instructions: Type.TString;
225
- /** Option key to when it applies. At least two, including a way out. */
226
301
  criteria: Type.TRecord<"^.*$", Type.TString>;
227
302
  }>, Type.TObject<{
228
303
  type: Type.TLiteral<"score">;
229
304
  instructions: Type.TString;
230
- /** Levels, lowest first and 0-indexed. */
231
305
  criteria: Type.TArray<Type.TString>;
232
306
  }>]>>>;
233
307
  /** Where the content comes from. Defaults to the spec's `source`. */
@@ -257,10 +331,17 @@ export declare const TOOL_SCHEMAS: {
257
331
  staged: Type.TOptional<Type.TBoolean>;
258
332
  paths: Type.TOptional<Type.TArray<Type.TString>>;
259
333
  }>]>>>;
334
+ /**
335
+ * Leave out paths matching these globs (repo-relative, like `glob`). A per-call
336
+ * choice, reported as `filtered`; egress excludes still apply on top.
337
+ */
338
+ exclude: Type.TOptional<Type.TArray<Type.TString>>;
260
339
  /** `file` | `hunk` | `row` | `lines:N[/overlap]`. */
261
340
  split: Type.TOptional<Type.TString>;
262
341
  /** Filters, ANDed: `relevant>=0.7`, `kind in fix,feature`. */
263
342
  keep: Type.TOptional<Type.TArray<Type.TString>>;
343
+ /** Kept when any of these matches (and every `keep` does): `a>=0.3`, `b>=0.3`. */
344
+ keepAny: Type.TOptional<Type.TArray<Type.TString>>;
264
345
  mode: Type.TOptional<Type.TUnion<[Type.TLiteral<"auto">, Type.TLiteral<"live">, Type.TLiteral<"record">, Type.TLiteral<"replay">]>>;
265
346
  model: Type.TOptional<Type.TString>;
266
347
  /**
@@ -293,6 +374,68 @@ export declare const TOOL_SCHEMAS: {
293
374
  /** Proceed past the spend guard. */
294
375
  confirm: Type.TOptional<Type.TBoolean>;
295
376
  }>;
377
+ readonly "spec-lint": Type.TObject<{
378
+ /** Spec name (repo → user → bundled) or path. Omitted: every spec in reach. */
379
+ spec: Type.TOptional<Type.TString>;
380
+ }>;
381
+ readonly "opportunities-add": Type.TObject<{
382
+ /** Candidates to merge into `.system1/opportunities.json`. */
383
+ candidates: Type.TArray<Type.TObject<{
384
+ mode: Type.TUnion<[Type.TLiteral<"code">, Type.TLiteral<"agents">]>;
385
+ location: Type.TObject<{
386
+ path: Type.TString;
387
+ lines: Type.TOptional<Type.TObject<{
388
+ start: Type.TInteger;
389
+ end: Type.TInteger;
390
+ }>>;
391
+ }>;
392
+ mechanism: Type.TString;
393
+ shape: Type.TUnion<[Type.TLiteral<"single">, Type.TLiteral<"fanout">, Type.TLiteral<"cascade">, Type.TLiteral<"pairwise">]>;
394
+ evidence: Type.TString;
395
+ questions: Type.TRecord<"^.*$", Type.TUnion<[Type.TObject<{
396
+ type: Type.TLiteral<"noul">;
397
+ instructions: Type.TString;
398
+ criteria: Type.TOptional<Type.TRecord<"^.*$", Type.TString>>;
399
+ }>, Type.TObject<{
400
+ type: Type.TLiteral<"choice">;
401
+ instructions: Type.TString;
402
+ criteria: Type.TRecord<"^.*$", Type.TString>;
403
+ }>, Type.TObject<{
404
+ type: Type.TLiteral<"score">;
405
+ instructions: Type.TString;
406
+ criteria: Type.TArray<Type.TString>;
407
+ }>]>>;
408
+ benefit: Type.TUnion<[Type.TLiteral<"cost">, Type.TLiteral<"quality">, Type.TLiteral<"latency">]>;
409
+ projected: Type.TObject<{
410
+ volume: Type.TNumber;
411
+ per: Type.TString;
412
+ currentCostPerItemUsd: Type.TNumber;
413
+ decisionCostPerItemUsd: Type.TNumber;
414
+ note: Type.TOptional<Type.TString>;
415
+ }>;
416
+ risk: Type.TObject<{
417
+ level: Type.TUnion<[Type.TLiteral<"low">, Type.TLiteral<"medium">, Type.TLiteral<"high">]>;
418
+ note: Type.TString;
419
+ }>;
420
+ next: Type.TString;
421
+ status: Type.TOptional<Type.TUnion<[Type.TLiteral<"new">, Type.TLiteral<"stale">, Type.TLiteral<"adopted">, Type.TLiteral<"rejected">]>>;
422
+ statusReason: Type.TOptional<Type.TString>;
423
+ source: Type.TObject<{
424
+ sweep: Type.TString;
425
+ answers: Type.TUnion<[Type.TLiteral<"live">, Type.TLiteral<"replay">]>;
426
+ }>;
427
+ }>>;
428
+ }>;
429
+ readonly "opportunities-list": Type.TObject<{
430
+ /** Record filters, ANDed: `status=new`, `risk in medium,high`, `projected>=0.01`. */
431
+ keep: Type.TOptional<Type.TArray<Type.TString>>;
432
+ /** `projected:desc` (the default), `seenAt:asc`, … */
433
+ sort: Type.TOptional<Type.TString>;
434
+ limit: Type.TOptional<Type.TInteger>;
435
+ /** Top-level fields to include per entry; `id` always is. */
436
+ fields: Type.TOptional<Type.TArray<Type.TString>>;
437
+ }>;
438
+ readonly "opportunities-check": Type.TObject<{}>;
296
439
  readonly route: Type.TObject<{
297
440
  /** The user's prompt, as the harness hook received it. */
298
441
  prompt: Type.TString;
@@ -1 +1 @@
1
- {"version":3,"file":"schemas.d.ts","sourceRoot":"","sources":["../../src/tools/schemas.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,MAAM,EAAE,IAAI,EAAE,MAAM,SAAS,CAAA;AA8F3C,eAAO,MAAM,QAAQ;IAtBnB,0DAA0D;;IAE1D,8DAA8D;;;;QAnC1D,4EAA4E;;;;;QAS5E,wEAAwE;;;;;QASxE,0CAA0C;;;IAmB9C,qEAAqE;;;;;;;;;;;;;;;;;;;;;;;;;;;IAErE,qDAAqD;;IAErD,8DAA8D;;;;IAI9D;;;OAGG;;EAO8C,CAAA;AAEnD,eAAO,MAAM,SAAS;IAxBpB,0DAA0D;;IAE1D,8DAA8D;;;;QAnC1D,4EAA4E;;;;;QAS5E,wEAAwE;;;;;QASxE,0CAA0C;;;IAmB9C,qEAAqE;;;;;;;;;;;;;;;;;;;;;;;;;;;IAErE,qDAAqD;;IAErD,8DAA8D;;;;IAI9D;;;OAGG;;;;IAcD,2CAA2C;;IAE3C,8DAA8D;;IAE9D,oCAAoC;;;EAKvC,CAAA;AAED,eAAO,MAAM,UAAU;IAEnB,oEAAoE;;IAEpE,6BAA6B;;EAIhC,CAAA;AAED,eAAO,MAAM,cAAc;IAEvB,iDAAiD;;IAEjD,6FAA6F;;;IAG7F,oCAAoC;;EAIvC,CAAA;AAED,eAAO,MAAM,UAAU;IAEnB,0DAA0D;;EAI7D,CAAA;AAED,MAAM,MAAM,QAAQ,GAAG,MAAM,CAAC,OAAO,QAAQ,CAAC,CAAA;AAC9C,MAAM,MAAM,SAAS,GAAG,MAAM,CAAC,OAAO,SAAS,CAAC,CAAA;AAChD,MAAM,MAAM,UAAU,GAAG,MAAM,CAAC,OAAO,UAAU,CAAC,CAAA;AAClD,MAAM,MAAM,cAAc,GAAG,MAAM,CAAC,OAAO,cAAc,CAAC,CAAA;AAC1D,MAAM,MAAM,UAAU,GAAG,MAAM,CAAC,OAAO,UAAU,CAAC,CAAA;AAElD,eAAO,MAAM,YAAY;aACvB,GAAG;QA9EH,0DAA0D;;QAE1D,8DAA8D;;;;YAnC1D,4EAA4E;;;;;YAS5E,wEAAwE;;;;;YASxE,0CAA0C;;;QAmB9C,qEAAqE;;;;;;;;;;;;;;;;;;;;;;;;;;;QAErE,qDAAqD;;QAErD,8DAA8D;;;;QAI9D;;;WAGG;;;aAgEH,IAAI;QA/EJ,0DAA0D;;QAE1D,8DAA8D;;;;YAnC1D,4EAA4E;;;;;YAS5E,wEAAwE;;;;;YASxE,0CAA0C;;;QAmB9C,qEAAqE;;;;;;;;;;;;;;;;;;;;;;;;;;;QAErE,qDAAqD;;QAErD,8DAA8D;;;;QAI9D;;;WAGG;;;;QAcD,2CAA2C;;QAE3C,8DAA8D;;QAE9D,oCAAoC;;;;aA+CtC,KAAK;QAtCH,oEAAoE;;QAEpE,6BAA6B;;;aAqC/B,YAAY;QA7BV,iDAAiD;;QAEjD,6FAA6F;;;QAG7F,oCAAoC;;;aAyBtC,KAAK;QAjBH,0DAA0D;;;CAkBpD,CAAA;AACV,MAAM,MAAM,QAAQ,GAAG,MAAM,OAAO,YAAY,CAAA"}
1
+ {"version":3,"file":"schemas.d.ts","sourceRoot":"","sources":["../../src/tools/schemas.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,6 @@
1
1
  import { Type } from "typebox";
2
+ import { QuestionSchema } from "../model/schema.js";
3
+ import { CandidateSchema } from "../opportunities/backlog.js";
2
4
  /**
3
5
  * Tool inputs, defined once. The CLI builds these from argv. A future MCP or Pi
4
6
  * adapter would take them directly, and `decide schema <tool>` prints them.
@@ -24,30 +26,6 @@ const Source = Type.Union([
24
26
  paths: Type.Optional(Type.Array(Type.String())),
25
27
  }),
26
28
  ]);
27
- /**
28
- * A question, as it goes on the wire. Spelled out here (rather than an opaque
29
- * record) so `decide schema <tool>` describes what a valid question is.
30
- */
31
- const Question = Type.Union([
32
- Type.Object({
33
- type: Type.Literal("noul"),
34
- instructions: Type.String({ minLength: 1 }),
35
- /** Optional `true`/`false` criteria that sharpen an ambiguous statement. */
36
- criteria: Type.Optional(Type.Record(Type.String(), Type.String())),
37
- }, { additionalProperties: false }),
38
- Type.Object({
39
- type: Type.Literal("choice"),
40
- instructions: Type.String({ minLength: 1 }),
41
- /** Option key to when it applies. At least two, including a way out. */
42
- criteria: Type.Record(Type.String(), Type.String(), { minProperties: 2 }),
43
- }, { additionalProperties: false }),
44
- Type.Object({
45
- type: Type.Literal("score"),
46
- instructions: Type.String({ minLength: 1 }),
47
- /** Levels, lowest first and 0-indexed. */
48
- criteria: Type.Array(Type.String(), { minItems: 2 }),
49
- }, { additionalProperties: false }),
50
- ]);
51
29
  const Mode = Type.Union([
52
30
  Type.Literal("auto"),
53
31
  Type.Literal("live"),
@@ -58,13 +36,20 @@ const Common = {
58
36
  /** A saved spec: name (repo → user → bundled) or path. */
59
37
  spec: Type.Optional(Type.String()),
60
38
  /** An inline question set; mutually exclusive with `spec`. */
61
- questions: Type.Optional(Type.Record(Type.String(), Question)),
39
+ questions: Type.Optional(Type.Record(Type.String(), QuestionSchema)),
62
40
  /** Where the content comes from. Defaults to the spec's `source`. */
63
41
  sources: Type.Optional(Type.Array(Source)),
42
+ /**
43
+ * Leave out paths matching these globs (repo-relative, like `glob`). A per-call
44
+ * choice, reported as `filtered`; egress excludes still apply on top.
45
+ */
46
+ exclude: Type.Optional(Type.Array(Type.String({ minLength: 1 }))),
64
47
  /** `file` | `hunk` | `row` | `lines:N[/overlap]`. */
65
48
  split: Type.Optional(Type.String()),
66
49
  /** Filters, ANDed: `relevant>=0.7`, `kind in fix,feature`. */
67
50
  keep: Type.Optional(Type.Array(Type.String())),
51
+ /** Kept when any of these matches (and every `keep` does): `a>=0.3`, `b>=0.3`. */
52
+ keepAny: Type.Optional(Type.Array(Type.String())),
68
53
  mode: Type.Optional(Mode),
69
54
  model: Type.Optional(Type.String()),
70
55
  /**
@@ -103,6 +88,24 @@ export const SpecCheckInput = Type.Object({
103
88
  /** Proceed past the spend guard. */
104
89
  confirm: Type.Optional(Type.Boolean()),
105
90
  }, strict);
91
+ export const SpecLintInput = Type.Object({
92
+ /** Spec name (repo → user → bundled) or path. Omitted: every spec in reach. */
93
+ spec: Type.Optional(Type.String({ minLength: 1 })),
94
+ }, strict);
95
+ export const OpportunitiesAddInput = Type.Object({
96
+ /** Candidates to merge into `.system1/opportunities.json`. */
97
+ candidates: Type.Array(CandidateSchema, { minItems: 1 }),
98
+ }, strict);
99
+ export const OpportunitiesListInput = Type.Object({
100
+ /** Record filters, ANDed: `status=new`, `risk in medium,high`, `projected>=0.01`. */
101
+ keep: Type.Optional(Type.Array(Type.String())),
102
+ /** `projected:desc` (the default), `seenAt:asc`, … */
103
+ sort: Type.Optional(Type.String()),
104
+ limit: Type.Optional(Type.Integer({ minimum: 0 })),
105
+ /** Top-level fields to include per entry; `id` always is. */
106
+ fields: Type.Optional(Type.Array(Type.String())),
107
+ }, strict);
108
+ export const OpportunitiesCheckInput = Type.Object({}, strict);
106
109
  export const RouteInput = Type.Object({
107
110
  /** The user's prompt, as the harness hook received it. */
108
111
  prompt: Type.String(),
@@ -112,6 +115,10 @@ export const TOOL_SCHEMAS = {
112
115
  many: ManyInput,
113
116
  usage: UsageInput,
114
117
  "spec-check": SpecCheckInput,
118
+ "spec-lint": SpecLintInput,
119
+ "opportunities-add": OpportunitiesAddInput,
120
+ "opportunities-list": OpportunitiesListInput,
121
+ "opportunities-check": OpportunitiesCheckInput,
115
122
  route: RouteInput,
116
123
  };
117
124
  //# sourceMappingURL=schemas.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"schemas.js","sourceRoot":"","sources":["../../src/tools/schemas.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"schemas.js","sourceRoot":"","sources":["../../src/tools/schemas.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,6 @@
1
1
  import type { Answers, Usage } from "../model/types.js";
2
2
  import { type AnswerSource } from "../run/spend.js";
3
+ import { type LintFinding } from "../spec/lint.js";
3
4
  import { type ToolContext } from "./context.js";
4
5
  import { type SkippedSummary } from "./many.js";
5
6
  export type ExampleStatus = "pass" | "fail" | "undecided" | "captured" | "withheld";
@@ -35,6 +36,11 @@ export interface SpecCheckResult {
35
36
  examples: ExampleResult[];
36
37
  usage: Usage;
37
38
  skipped: SkippedSummary;
39
+ /**
40
+ * `spec lint` findings, run first and offline. Reported only: `passed` and
41
+ * `--strict` still judge the examples alone.
42
+ */
43
+ lint: LintFinding[];
38
44
  }
39
45
  /**
40
46
  * Run a spec's examples and compare each against its `expect`. Replay by
@@ -1 +1 @@
1
- {"version":3,"file":"spec-check.d.ts","sourceRoot":"","sources":["../../src/tools/spec-check.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAA;AAGvD,OAAO,EAAE,KAAK,YAAY,EAAY,MAAM,iBAAiB,CAAA;AAM7D,OAAO,EAA0B,KAAK,WAAW,EAAE,MAAM,cAAc,CAAA;AACvE,OAAO,EAAE,KAAK,cAAc,EAAoB,MAAM,WAAW,CAAA;AAGjE,MAAM,MAAM,aAAa,GAAG,MAAM,GAAG,MAAM,GAAG,WAAW,GAAG,UAAU,GAAG,UAAU,CAAA;AAEnF,MAAM,WAAW,aAAa;IAC5B,EAAE,EAAE,MAAM,CAAA;IACV;;;;;;OAMG;IACH,MAAM,EAAE,aAAa,CAAA;IACrB,uEAAuE;IACvE,OAAO,CAAC,EAAE,OAAO,CAAA;IACjB,QAAQ,CAAC,EAAE,KAAK,CAAC;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;IACxD,SAAS,CAAC,EAAE,MAAM,EAAE,CAAA;IACpB,MAAM,CAAC,EAAE,MAAM,CAAA;CAChB;AAED,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,EAAE,MAAM,CAAA;IACZ,KAAK,EAAE,MAAM,CAAA;IACb,MAAM,EAAE,YAAY,CAAA;IACpB,6EAA6E;IAC7E,MAAM,EAAE,OAAO,CAAA;IACf,MAAM,EAAE,MAAM,CAAC,aAAa,EAAE,MAAM,CAAC,GAAG;QAAE,QAAQ,EAAE,MAAM,CAAA;KAAE,CAAA;IAC5D,QAAQ,EAAE,aAAa,EAAE,CAAA;IACzB,KAAK,EAAE,KAAK,CAAA;IACZ,OAAO,EAAE,cAAc,CAAA;CACxB;AAED;;;;;;;GAOG;AACH,wBAAsB,YAAY,CAAC,GAAG,EAAE,WAAW,EAAE,QAAQ,EAAE,OAAO,GAAG,OAAO,CAAC,eAAe,CAAC,CA4HhG"}
1
+ {"version":3,"file":"spec-check.d.ts","sourceRoot":"","sources":["../../src/tools/spec-check.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAA;AAGvD,OAAO,EAAE,KAAK,YAAY,EAAY,MAAM,iBAAiB,CAAA;AAI7D,OAAO,EAAE,KAAK,WAAW,EAAY,MAAM,iBAAiB,CAAA;AAG5D,OAAO,EAA0B,KAAK,WAAW,EAAE,MAAM,cAAc,CAAA;AACvE,OAAO,EAAE,KAAK,cAAc,EAAoB,MAAM,WAAW,CAAA;AAGjE,MAAM,MAAM,aAAa,GAAG,MAAM,GAAG,MAAM,GAAG,WAAW,GAAG,UAAU,GAAG,UAAU,CAAA;AAEnF,MAAM,WAAW,aAAa;IAC5B,EAAE,EAAE,MAAM,CAAA;IACV;;;;;;OAMG;IACH,MAAM,EAAE,aAAa,CAAA;IACrB,uEAAuE;IACvE,OAAO,CAAC,EAAE,OAAO,CAAA;IACjB,QAAQ,CAAC,EAAE,KAAK,CAAC;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;IACxD,SAAS,CAAC,EAAE,MAAM,EAAE,CAAA;IACpB,MAAM,CAAC,EAAE,MAAM,CAAA;CAChB;AAED,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,EAAE,MAAM,CAAA;IACZ,KAAK,EAAE,MAAM,CAAA;IACb,MAAM,EAAE,YAAY,CAAA;IACpB,6EAA6E;IAC7E,MAAM,EAAE,OAAO,CAAA;IACf,MAAM,EAAE,MAAM,CAAC,aAAa,EAAE,MAAM,CAAC,GAAG;QAAE,QAAQ,EAAE,MAAM,CAAA;KAAE,CAAA;IAC5D,QAAQ,EAAE,aAAa,EAAE,CAAA;IACzB,KAAK,EAAE,KAAK,CAAA;IACZ,OAAO,EAAE,cAAc,CAAA;IACvB;;;OAGG;IACH,IAAI,EAAE,WAAW,EAAE,CAAA;CACpB;AAED;;;;;;;GAOG;AACH,wBAAsB,YAAY,CAAC,GAAG,EAAE,WAAW,EAAE,QAAQ,EAAE,OAAO,GAAG,OAAO,CAAC,eAAe,CAAC,CA8HhG"}
@@ -7,6 +7,7 @@ import { checkBudget, combineProjections } from "../run/budget.js";
7
7
  import { sumUsage } from "../run/spend.js";
8
8
  import { parseFileRef } from "../sources/read.js";
9
9
  import { describeExpectation, meets, parseExpect } from "../spec/expect.js";
10
+ import { lintSpec } from "../spec/lint.js";
10
11
  import { assertExamples, exampleFileProblem, loadSpec } from "../spec/spec.js";
11
12
  import { parseSplit } from "../split/split.js";
12
13
  import { checkInput, deciderFor } from "./context.js";
@@ -22,6 +23,7 @@ import { summariseSkipped } from "./many.js";
22
23
  export async function runSpecCheck(ctx, rawInput) {
23
24
  const input = checkInput("spec-check", rawInput);
24
25
  const spec = loadSpec(input.spec, ctx.specDirs, ctx.cwd);
26
+ const lint = lintSpec(spec);
25
27
  const examples = spec.examples ?? [];
26
28
  if (examples.length === 0) {
27
29
  throw new DecisionsError("invalid-request", `Spec "${spec.name}" has no examples to check. Add some under examples: (id, state or file, expect).`);
@@ -129,6 +131,7 @@ export async function runSpecCheck(ctx, rawInput) {
129
131
  examples: results,
130
132
  usage: sumUsage(usages),
131
133
  skipped: summariseSkipped(prepared.flatMap((p) => p.prep?.skipped ?? [])),
134
+ lint,
132
135
  };
133
136
  }
134
137
  function judge(id, answers, flat, expect) {
@@ -1 +1 @@
1
- {"version":3,"file":"spec-check.js","sourceRoot":"","sources":["../../src/tools/spec-check.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"spec-check.js","sourceRoot":"","sources":["../../src/tools/spec-check.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,31 @@
1
+ import { type LintFinding } from "../spec/lint.js";
2
+ import { type Spec } from "../spec/spec.js";
3
+ import { type ToolContext } from "./context.js";
4
+ export interface SpecLintEntry {
5
+ name: string;
6
+ file: string;
7
+ origin: Spec["origin"];
8
+ findings: LintFinding[];
9
+ /** Set when the spec doesn't parse: it can't be linted until it does. */
10
+ invalid?: string;
11
+ }
12
+ export interface SpecLintResult {
13
+ specs: SpecLintEntry[];
14
+ counts: {
15
+ specs: number;
16
+ errors: number;
17
+ warnings: number;
18
+ invalid: number;
19
+ };
20
+ /**
21
+ * No errors and no invalid specs. Warnings don't fail it; `--strict` makes
22
+ * them fail too (exit 7).
23
+ */
24
+ passed: boolean;
25
+ }
26
+ /**
27
+ * Lint one spec, or every spec in reach (repo, user, bundled). Offline: no key,
28
+ * no consent, no egress. A finding is a result, not an error.
29
+ */
30
+ export declare function runSpecLint(ctx: ToolContext, rawInput?: unknown): SpecLintResult;
31
+ //# sourceMappingURL=spec-lint.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"spec-lint.d.ts","sourceRoot":"","sources":["../../src/tools/spec-lint.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,WAAW,EAAY,MAAM,iBAAiB,CAAA;AAC5D,OAAO,EAAuB,KAAK,IAAI,EAAE,MAAM,iBAAiB,CAAA;AAChE,OAAO,EAAc,KAAK,WAAW,EAAE,MAAM,cAAc,CAAA;AAG3D,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,EAAE,MAAM,CAAA;IACZ,MAAM,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAA;IACtB,QAAQ,EAAE,WAAW,EAAE,CAAA;IACvB,yEAAyE;IACzE,OAAO,CAAC,EAAE,MAAM,CAAA;CACjB;AAED,MAAM,WAAW,cAAc;IAC7B,KAAK,EAAE,aAAa,EAAE,CAAA;IACtB,MAAM,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAA;IAC5E;;;OAGG;IACH,MAAM,EAAE,OAAO,CAAA;CAChB;AAED;;;GAGG;AACH,wBAAgB,WAAW,CAAC,GAAG,EAAE,WAAW,EAAE,QAAQ,GAAE,OAAY,GAAG,cAAc,CAoBpF"}
@@ -0,0 +1,53 @@
1
+ import { basename, extname } from "node:path";
2
+ import { isDecisionsError } from "../errors.js";
3
+ import { lintSpec } from "../spec/lint.js";
4
+ import { listSpecs, loadSpec } from "../spec/spec.js";
5
+ import { checkInput } from "./context.js";
6
+ /**
7
+ * Lint one spec, or every spec in reach (repo, user, bundled). Offline: no key,
8
+ * no consent, no egress. A finding is a result, not an error.
9
+ */
10
+ export function runSpecLint(ctx, rawInput = {}) {
11
+ const input = checkInput("spec-lint", rawInput);
12
+ const specs = input.spec
13
+ ? [named(ctx, input.spec)]
14
+ : listSpecs(ctx.specDirs)
15
+ .filter((s) => !s.shadowed)
16
+ .map((s) => s.error
17
+ ? { name: s.name, file: s.file, origin: s.origin, findings: [], invalid: s.error }
18
+ : // Loaded by path, so keep the layer it was listed from.
19
+ { ...entry(loadSpec(s.file, ctx.specDirs, ctx.cwd)), origin: s.origin });
20
+ const all = specs.flatMap((s) => s.findings);
21
+ const counts = {
22
+ specs: specs.length,
23
+ errors: all.filter((f) => f.severity === "error").length,
24
+ warnings: all.filter((f) => f.severity === "warning").length,
25
+ invalid: specs.filter((s) => s.invalid).length,
26
+ };
27
+ return { specs, counts, passed: counts.errors === 0 && counts.invalid === 0 };
28
+ }
29
+ /**
30
+ * A named spec that exists but doesn't parse is an `invalid` entry (exit 7),
31
+ * as it is when linting every spec. One that can't be found is still an error.
32
+ */
33
+ function named(ctx, ref) {
34
+ try {
35
+ return entry(loadSpec(ref, ctx.specDirs, ctx.cwd));
36
+ }
37
+ catch (error) {
38
+ const file = isDecisionsError(error) ? error.details?.file : undefined;
39
+ if (typeof file !== "string")
40
+ throw error;
41
+ return {
42
+ name: basename(file, extname(file)),
43
+ file,
44
+ origin: "path",
45
+ findings: [],
46
+ invalid: error.message,
47
+ };
48
+ }
49
+ }
50
+ function entry(spec) {
51
+ return { name: spec.name, file: spec.file, origin: spec.origin, findings: lintSpec(spec) };
52
+ }
53
+ //# sourceMappingURL=spec-lint.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"spec-lint.js","sourceRoot":"","sources":["../../src/tools/spec-lint.ts"],"names":[],"mappings":"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"}
@@ -1,7 +1,10 @@
1
1
  import type { DecisionRequest, DecisionResponse } from "../model/types.js";
2
2
  export declare const DEFAULT_ENDPOINT = "https://openrouter.ai/api/alpha/decisions";
3
3
  export declare const DEFAULT_TIMEOUT_MS = 5000;
4
- /** Statuses worth another attempt: timeouts, rate limits and upstream hiccups. */
4
+ /**
5
+ * Statuses worth another attempt: timeouts, rate limits and upstream hiccups.
6
+ * 529 is the provider's `system_overloaded`, seen on 2.9% of a 385-item sweep.
7
+ */
5
8
  export declare const RETRY_STATUSES: ReadonlySet<number>;
6
9
  export interface TransportOptions {
7
10
  /** OpenRouter's decisions endpoint. An alpha path, so overridable. */
@@ -1 +1 @@
1
- {"version":3,"file":"openrouter.d.ts","sourceRoot":"","sources":["../../src/transport/openrouter.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAA;AAG1E,eAAO,MAAM,gBAAgB,8CAA8C,CAAA;AAE3E,eAAO,MAAM,kBAAkB,OAAQ,CAAA;AAEvC,kFAAkF;AAClF,eAAO,MAAM,cAAc,EAAE,WAAW,CAAC,MAAM,CAE7C,CAAA;AAEF,MAAM,WAAW,gBAAgB;IAC/B,sEAAsE;IACtE,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,MAAM,EAAE,MAAM,CAAA;IACd;;;;;OAKG;IACH,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,4CAA4C;IAC5C,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,KAAK,CAAC,EAAE,OAAO,KAAK,CAAA;IACpB,KAAK,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;CACtC;AAED,MAAM,WAAW,eAAe;IAC9B,QAAQ,EAAE,gBAAgB,CAAA;IAC1B,+CAA+C;IAC/C,SAAS,EAAE,MAAM,CAAA;IACjB,QAAQ,EAAE,MAAM,CAAA;CACjB;AAED,MAAM,WAAW,SAAS;IACxB,MAAM,CAAC,OAAO,EAAE,eAAe,EAAE,MAAM,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,eAAe,CAAC,CAAA;CACjF;AAID;;;;GAIG;AACH,wBAAgB,yBAAyB,CAAC,OAAO,EAAE,gBAAgB,GAAG,SAAS,CA6E9E"}
1
+ {"version":3,"file":"openrouter.d.ts","sourceRoot":"","sources":["../../src/transport/openrouter.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAA;AAG1E,eAAO,MAAM,gBAAgB,8CAA8C,CAAA;AAE3E,eAAO,MAAM,kBAAkB,OAAQ,CAAA;AAEvC;;;GAGG;AACH,eAAO,MAAM,cAAc,EAAE,WAAW,CAAC,MAAM,CAE7C,CAAA;AAEF,MAAM,WAAW,gBAAgB;IAC/B,sEAAsE;IACtE,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,MAAM,EAAE,MAAM,CAAA;IACd;;;;;OAKG;IACH,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,4CAA4C;IAC5C,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,KAAK,CAAC,EAAE,OAAO,KAAK,CAAA;IACpB,KAAK,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;CACtC;AAED,MAAM,WAAW,eAAe;IAC9B,QAAQ,EAAE,gBAAgB,CAAA;IAC1B,+CAA+C;IAC/C,SAAS,EAAE,MAAM,CAAA;IACjB,QAAQ,EAAE,MAAM,CAAA;CACjB;AAED,MAAM,WAAW,SAAS;IACxB,MAAM,CAAC,OAAO,EAAE,eAAe,EAAE,MAAM,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,eAAe,CAAC,CAAA;CACjF;AAID;;;;GAIG;AACH,wBAAgB,yBAAyB,CAAC,OAAO,EAAE,gBAAgB,GAAG,SAAS,CA6E9E"}