@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.
- package/dist/egress/scrub.d.ts.map +1 -1
- package/dist/egress/scrub.js +16 -0
- package/dist/egress/scrub.js.map +1 -1
- package/dist/index.d.ts +11 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +6 -1
- package/dist/index.js.map +1 -1
- package/dist/model/schema.d.ts +22 -0
- package/dist/model/schema.d.ts.map +1 -0
- package/dist/model/schema.js +26 -0
- package/dist/model/schema.js.map +1 -0
- package/dist/opportunities/backlog.d.ts +280 -0
- package/dist/opportunities/backlog.d.ts.map +1 -0
- package/dist/opportunities/backlog.js +393 -0
- package/dist/opportunities/backlog.js.map +1 -0
- package/dist/prepare.d.ts +8 -0
- package/dist/prepare.d.ts.map +1 -1
- package/dist/prepare.js +42 -6
- package/dist/prepare.js.map +1 -1
- package/dist/project/project.d.ts +36 -0
- package/dist/project/project.d.ts.map +1 -1
- package/dist/project/project.js +64 -18
- package/dist/project/project.js.map +1 -1
- package/dist/sources/filter.d.ts +19 -0
- package/dist/sources/filter.d.ts.map +1 -0
- package/dist/sources/filter.js +30 -0
- package/dist/sources/filter.js.map +1 -0
- package/dist/sources/read.d.ts +10 -0
- package/dist/sources/read.d.ts.map +1 -1
- package/dist/sources/read.js +7 -2
- package/dist/sources/read.js.map +1 -1
- package/dist/sources/types.d.ts +2 -2
- package/dist/sources/types.d.ts.map +1 -1
- package/dist/spec/lint.d.ts +35 -0
- package/dist/spec/lint.d.ts.map +1 -0
- package/dist/spec/lint.js +175 -0
- package/dist/spec/lint.js.map +1 -0
- package/dist/spec/spec.d.ts +2 -0
- package/dist/spec/spec.d.ts.map +1 -1
- package/dist/spec/spec.js +3 -1
- package/dist/spec/spec.js.map +1 -1
- package/dist/tools/ask.d.ts.map +1 -1
- package/dist/tools/ask.js +10 -13
- package/dist/tools/ask.js.map +1 -1
- package/dist/tools/context.d.ts +5 -0
- package/dist/tools/context.d.ts.map +1 -1
- package/dist/tools/context.js +24 -0
- package/dist/tools/context.js.map +1 -1
- package/dist/tools/doctor.d.ts +1 -1
- package/dist/tools/doctor.d.ts.map +1 -1
- package/dist/tools/doctor.js +33 -1
- package/dist/tools/doctor.js.map +1 -1
- package/dist/tools/many.d.ts.map +1 -1
- package/dist/tools/many.js +3 -0
- package/dist/tools/many.js.map +1 -1
- package/dist/tools/opportunities.d.ts +33 -0
- package/dist/tools/opportunities.d.ts.map +1 -0
- package/dist/tools/opportunities.js +74 -0
- package/dist/tools/opportunities.js.map +1 -0
- package/dist/tools/schemas.d.ts +155 -12
- package/dist/tools/schemas.d.ts.map +1 -1
- package/dist/tools/schemas.js +32 -25
- package/dist/tools/schemas.js.map +1 -1
- package/dist/tools/spec-check.d.ts +6 -0
- package/dist/tools/spec-check.d.ts.map +1 -1
- package/dist/tools/spec-check.js +3 -0
- package/dist/tools/spec-check.js.map +1 -1
- package/dist/tools/spec-lint.d.ts +31 -0
- package/dist/tools/spec-lint.d.ts.map +1 -0
- package/dist/tools/spec-lint.js +53 -0
- package/dist/tools/spec-lint.js.map +1 -0
- package/dist/transport/openrouter.d.ts +4 -1
- package/dist/transport/openrouter.d.ts.map +1 -1
- package/dist/transport/openrouter.js +5 -2
- package/dist/transport/openrouter.js.map +1 -1
- package/dist/version.d.ts +1 -1
- package/dist/version.js +1 -1
- package/package.json +1 -1
package/dist/tools/schemas.d.ts
CHANGED
|
@@ -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;
|
|
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;AAqE3C,eAAO,MAAM,QAAQ;IA7BnB,0DAA0D;;IAE1D,8DAA8D;;;;;;;;;;;;;;IAE9D,qEAAqE;;;;;;;;;;;;;;;;;;;;;;;;;;;IAErE;;;OAGG;;IAEH,qDAAqD;;IAErD,8DAA8D;;IAE9D,kFAAkF;;;;IAIlF;;;OAGG;;EAO8C,CAAA;AAEnD,eAAO,MAAM,SAAS;IA/BpB,0DAA0D;;IAE1D,8DAA8D;;;;;;;;;;;;;;IAE9D,qEAAqE;;;;;;;;;;;;;;;;;;;;;;;;;;;IAErE;;;OAGG;;IAEH,qDAAqD;;IAErD,8DAA8D;;IAE9D,kFAAkF;;;;IAIlF;;;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,aAAa;IAEtB,+EAA+E;;EAIlF,CAAA;AAED,eAAO,MAAM,qBAAqB;IAE9B,8DAA8D;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAIjE,CAAA;AAED,eAAO,MAAM,sBAAsB;IAE/B,qFAAqF;;IAErF,sDAAsD;;;IAGtD,6DAA6D;;EAIhE,CAAA;AAED,eAAO,MAAM,uBAAuB,kBAA0B,CAAA;AAE9D,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;AAClD,MAAM,MAAM,aAAa,GAAG,MAAM,CAAC,OAAO,aAAa,CAAC,CAAA;AACxD,MAAM,MAAM,qBAAqB,GAAG,MAAM,CAAC,OAAO,qBAAqB,CAAC,CAAA;AACxE,MAAM,MAAM,sBAAsB,GAAG,MAAM,CAAC,OAAO,sBAAsB,CAAC,CAAA;AAE1E,eAAO,MAAM,YAAY;aACvB,GAAG;QAvHH,0DAA0D;;QAE1D,8DAA8D;;;;;;;;;;;;;;QAE9D,qEAAqE;;;;;;;;;;;;;;;;;;;;;;;;;;;QAErE;;;WAGG;;QAEH,qDAAqD;;QAErD,8DAA8D;;QAE9D,kFAAkF;;;;QAIlF;;;WAGG;;;aAkGH,IAAI;QAxHJ,0DAA0D;;QAE1D,8DAA8D;;;;;;;;;;;;;;QAE9D,qEAAqE;;;;;;;;;;;;;;;;;;;;;;;;;;;QAErE;;;WAGG;;QAEH,qDAAqD;;QAErD,8DAA8D;;QAE9D,kFAAkF;;;;QAIlF;;;WAGG;;;;QAcD,2CAA2C;;QAE3C,8DAA8D;;QAE9D,oCAAoC;;;;aAiFtC,KAAK;QAxEH,oEAAoE;;QAEpE,6BAA6B;;;aAuE/B,YAAY;QA/DV,iDAAiD;;QAEjD,6FAA6F;;;QAG7F,oCAAoC;;;aA2DtC,WAAW;QAnDT,+EAA+E;;;aAoDjF,mBAAmB;QA5CjB,8DAA8D;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;aA6ChE,oBAAoB;QArClB,qFAAqF;;QAErF,sDAAsD;;;QAGtD,6DAA6D;;;aAiC/D,qBAAqB;aACrB,KAAK;QAxBH,0DAA0D;;;CAyBpD,CAAA;AACV,MAAM,MAAM,QAAQ,GAAG,MAAM,OAAO,YAAY,CAAA"}
|
package/dist/tools/schemas.js
CHANGED
|
@@ -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(),
|
|
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":"AAAA,OAAO,EAAe,IAAI,EAAE,MAAM,SAAS,CAAA;
|
|
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;
|
|
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"}
|
package/dist/tools/spec-check.js
CHANGED
|
@@ -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":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAA;AACpD,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAA;AAC/C,OAAO,EAAE,cAAc,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAA;AAC/D,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAA;AAErD,OAAO,EAAiB,OAAO,EAAE,MAAM,eAAe,CAAA;AACtD,OAAO,EAAE,WAAW,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAA;AAClE,OAAO,EAAqB,QAAQ,EAAE,MAAM,iBAAiB,CAAA;AAC7D,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAA;AAEjD,OAAO,EAAE,mBAAmB,EAAoB,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAA;AAC7F,OAAO,EAAE,cAAc,EAAE,kBAAkB,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAA;AAC9E,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAA;AAC9C,OAAO,EAAE,UAAU,EAAE,UAAU,EAAoB,MAAM,cAAc,CAAA;AACvE,OAAO,EAAuB,gBAAgB,EAAE,MAAM,WAAW,CAAA;
|
|
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
|
-
/**
|
|
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
|
|
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"}
|