@garygentry/system1-core 0.3.1 → 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/config/consent.d.ts.map +1 -1
- package/dist/config/consent.js +4 -2
- package/dist/config/consent.js.map +1 -1
- package/dist/config/load.d.ts +11 -1
- package/dist/config/load.d.ts.map +1 -1
- package/dist/config/load.js +139 -28
- package/dist/config/load.js.map +1 -1
- 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/egress/size.d.ts +5 -0
- package/dist/egress/size.d.ts.map +1 -1
- package/dist/egress/size.js +5 -0
- package/dist/egress/size.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/profiles.d.ts +19 -1
- package/dist/model/profiles.d.ts.map +1 -1
- package/dist/model/profiles.js +16 -2
- package/dist/model/profiles.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/model/validate.d.ts.map +1 -1
- package/dist/model/validate.js +6 -0
- package/dist/model/validate.js.map +1 -1
- 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/run/budget.d.ts +10 -0
- package/dist/run/budget.d.ts.map +1 -1
- package/dist/run/budget.js +20 -1
- package/dist/run/budget.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 +11 -9
- 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 +9 -1
- 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 +46 -3
- 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 +6 -3
- 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/dist/wiring.d.ts +1 -1
- package/dist/wiring.d.ts.map +1 -1
- package/dist/wiring.js +1 -1
- package/dist/wiring.js.map +1 -1
- package/package.json +1 -1
package/dist/model/profiles.d.ts
CHANGED
|
@@ -14,6 +14,11 @@ export interface ModelProfile {
|
|
|
14
14
|
maxStateTokens: number;
|
|
15
15
|
/** Most options one choice question may have (the provider refuses more). */
|
|
16
16
|
maxChoices: number;
|
|
17
|
+
/**
|
|
18
|
+
* Input tokens the provider bills on every call on top of the state and the
|
|
19
|
+
* questions (its own prompt around them). Used only for *projected* costs.
|
|
20
|
+
*/
|
|
21
|
+
callOverheadTokens: number;
|
|
17
22
|
/** Listed price, USD per input token. Used only for *projected* costs. */
|
|
18
23
|
usdPerInputToken: number;
|
|
19
24
|
usdPerOutputToken: number;
|
|
@@ -24,6 +29,15 @@ export interface ModelProfile {
|
|
|
24
29
|
/** Whether the probabilities are calibrated (an emulated model's are not). */
|
|
25
30
|
calibrated: boolean;
|
|
26
31
|
}
|
|
32
|
+
/**
|
|
33
|
+
* Jev's per-call overhead. Measured 2026-09-24: a 1-character state with one
|
|
34
|
+
* noul question billed 273 input tokens where the estimate was 23 (250 more),
|
|
35
|
+
* and with a four-option choice 339 where it was 48 (291 more). 300 covers
|
|
36
|
+
* both, so a projection errs slightly high for these; much larger choice sets
|
|
37
|
+
* can still come in above it. Without any overhead, a dry run over 300 short
|
|
38
|
+
* tickets projected $0.0026 and the live run measured $0.0055.
|
|
39
|
+
*/
|
|
40
|
+
export declare const JEV_CALL_OVERHEAD_TOKENS = 300;
|
|
27
41
|
export declare const PROFILES: readonly ModelProfile[];
|
|
28
42
|
export declare const DEFAULT_MODEL_ID = "typesafe/jev-1.13";
|
|
29
43
|
/**
|
|
@@ -34,6 +48,10 @@ export declare const DEFAULT_MODEL_ID = "typesafe/jev-1.13";
|
|
|
34
48
|
* @throws DecisionsError `unknown-model` when nothing matches.
|
|
35
49
|
*/
|
|
36
50
|
export declare function resolveProfile(id: string, profiles?: readonly ModelProfile[]): ModelProfile;
|
|
37
|
-
/**
|
|
51
|
+
/**
|
|
52
|
+
* Projected cost of `calls` decisions whose state and questions come to about
|
|
53
|
+
* `tokensPerCall` input tokens, plus the profile's per-call overhead. Never a
|
|
54
|
+
* measurement.
|
|
55
|
+
*/
|
|
38
56
|
export declare function projectCost(profile: ModelProfile, calls: number, tokensPerCall: number): number;
|
|
39
57
|
//# sourceMappingURL=profiles.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"profiles.d.ts","sourceRoot":"","sources":["../../src/model/profiles.ts"],"names":[],"mappings":"AAGA;;;;;;GAMG;AACH,MAAM,WAAW,YAAY;IAC3B,+BAA+B;IAC/B,EAAE,EAAE,MAAM,CAAA;IACV,WAAW,EAAE,MAAM,CAAA;IACnB,SAAS,EAAE,sBAAsB,CAAA;IACjC,4EAA4E;IAC5E,cAAc,EAAE,MAAM,CAAA;IACtB,6EAA6E;IAC7E,UAAU,EAAE,MAAM,CAAA;IAClB,0EAA0E;IAC1E,gBAAgB,EAAE,MAAM,CAAA;IACxB,iBAAiB,EAAE,MAAM,CAAA;IACzB,gFAAgF;IAChF,SAAS,EAAE,MAAM,CAAA;IACjB,sEAAsE;IACtE,cAAc,EAAE,MAAM,CAAA;IACtB,8EAA8E;IAC9E,UAAU,EAAE,OAAO,CAAA;CACpB;AAED,eAAO,MAAM,QAAQ,EAAE,SAAS,YAAY,
|
|
1
|
+
{"version":3,"file":"profiles.d.ts","sourceRoot":"","sources":["../../src/model/profiles.ts"],"names":[],"mappings":"AAGA;;;;;;GAMG;AACH,MAAM,WAAW,YAAY;IAC3B,+BAA+B;IAC/B,EAAE,EAAE,MAAM,CAAA;IACV,WAAW,EAAE,MAAM,CAAA;IACnB,SAAS,EAAE,sBAAsB,CAAA;IACjC,4EAA4E;IAC5E,cAAc,EAAE,MAAM,CAAA;IACtB,6EAA6E;IAC7E,UAAU,EAAE,MAAM,CAAA;IAClB;;;OAGG;IACH,kBAAkB,EAAE,MAAM,CAAA;IAC1B,0EAA0E;IAC1E,gBAAgB,EAAE,MAAM,CAAA;IACxB,iBAAiB,EAAE,MAAM,CAAA;IACzB,gFAAgF;IAChF,SAAS,EAAE,MAAM,CAAA;IACjB,sEAAsE;IACtE,cAAc,EAAE,MAAM,CAAA;IACtB,8EAA8E;IAC9E,UAAU,EAAE,OAAO,CAAA;CACpB;AAED;;;;;;;GAOG;AACH,eAAO,MAAM,wBAAwB,MAAM,CAAA;AAE3C,eAAO,MAAM,QAAQ,EAAE,SAAS,YAAY,EAe3C,CAAA;AAED,eAAO,MAAM,gBAAgB,sBAAsB,CAAA;AAEnD;;;;;;GAMG;AACH,wBAAgB,cAAc,CAC5B,EAAE,EAAE,MAAM,EACV,QAAQ,GAAE,SAAS,YAAY,EAAa,GAC3C,YAAY,CAUd;AAED;;;;GAIG;AACH,wBAAgB,WAAW,CAAC,OAAO,EAAE,YAAY,EAAE,KAAK,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,GAAG,MAAM,CAE/F"}
|
package/dist/model/profiles.js
CHANGED
|
@@ -1,5 +1,14 @@
|
|
|
1
1
|
import { DecisionsError } from "../errors.js";
|
|
2
2
|
import { DEFAULT_UNDECIDED_FLOOR } from "./answers.js";
|
|
3
|
+
/**
|
|
4
|
+
* Jev's per-call overhead. Measured 2026-09-24: a 1-character state with one
|
|
5
|
+
* noul question billed 273 input tokens where the estimate was 23 (250 more),
|
|
6
|
+
* and with a four-option choice 339 where it was 48 (291 more). 300 covers
|
|
7
|
+
* both, so a projection errs slightly high for these; much larger choice sets
|
|
8
|
+
* can still come in above it. Without any overhead, a dry run over 300 short
|
|
9
|
+
* tickets projected $0.0026 and the live run measured $0.0055.
|
|
10
|
+
*/
|
|
11
|
+
export const JEV_CALL_OVERHEAD_TOKENS = 300;
|
|
3
12
|
export const PROFILES = [
|
|
4
13
|
{
|
|
5
14
|
id: "typesafe/jev-1.13",
|
|
@@ -8,6 +17,7 @@ export const PROFILES = [
|
|
|
8
17
|
maxStateTokens: 32_000,
|
|
9
18
|
// Measured 2026-09-22: 400 options is refused upstream with "at most 255 choices".
|
|
10
19
|
maxChoices: 255,
|
|
20
|
+
callOverheadTokens: JEV_CALL_OVERHEAD_TOKENS,
|
|
11
21
|
usdPerInputToken: 0.042 / 1_000_000,
|
|
12
22
|
usdPerOutputToken: 0,
|
|
13
23
|
priceAsOf: "2026-09-19",
|
|
@@ -32,9 +42,13 @@ export function resolveProfile(id, profiles = PROFILES) {
|
|
|
32
42
|
return { ...family, id };
|
|
33
43
|
throw new DecisionsError("unknown-model", `No profile for model "${id}". Known: ${profiles.map((p) => p.id).join(", ")}.`, { model: id, known: profiles.map((p) => p.id) });
|
|
34
44
|
}
|
|
35
|
-
/**
|
|
45
|
+
/**
|
|
46
|
+
* Projected cost of `calls` decisions whose state and questions come to about
|
|
47
|
+
* `tokensPerCall` input tokens, plus the profile's per-call overhead. Never a
|
|
48
|
+
* measurement.
|
|
49
|
+
*/
|
|
36
50
|
export function projectCost(profile, calls, tokensPerCall) {
|
|
37
|
-
return calls * tokensPerCall * profile.usdPerInputToken;
|
|
51
|
+
return calls * (tokensPerCall + profile.callOverheadTokens) * profile.usdPerInputToken;
|
|
38
52
|
}
|
|
39
53
|
function escapeRegExp(text) {
|
|
40
54
|
return text.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"profiles.js","sourceRoot":"","sources":["../../src/model/profiles.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAA;AAC7C,OAAO,EAAE,uBAAuB,EAAE,MAAM,cAAc,CAAA;
|
|
1
|
+
{"version":3,"file":"profiles.js","sourceRoot":"","sources":["../../src/model/profiles.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAA;AAC7C,OAAO,EAAE,uBAAuB,EAAE,MAAM,cAAc,CAAA;AAkCtD;;;;;;;GAOG;AACH,MAAM,CAAC,MAAM,wBAAwB,GAAG,GAAG,CAAA;AAE3C,MAAM,CAAC,MAAM,QAAQ,GAA4B;IAC/C;QACE,EAAE,EAAE,mBAAmB;QACvB,WAAW,EAAE,mBAAmB;QAChC,SAAS,EAAE,sBAAsB;QACjC,cAAc,EAAE,MAAM;QACtB,mFAAmF;QACnF,UAAU,EAAE,GAAG;QACf,kBAAkB,EAAE,wBAAwB;QAC5C,gBAAgB,EAAE,KAAK,GAAG,SAAS;QACnC,iBAAiB,EAAE,CAAC;QACpB,SAAS,EAAE,YAAY;QACvB,cAAc,EAAE,uBAAuB;QACvC,UAAU,EAAE,IAAI;KACjB;CACF,CAAA;AAED,MAAM,CAAC,MAAM,gBAAgB,GAAG,mBAAmB,CAAA;AAEnD;;;;;;GAMG;AACH,MAAM,UAAU,cAAc,CAC5B,EAAU,EACV,QAAQ,GAA4B,QAAQ;IAE5C,MAAM,KAAK,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAA;IAC/C,IAAI,KAAK;QAAE,OAAO,KAAK,CAAA;IACvB,MAAM,MAAM,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,MAAM,CAAC,IAAI,YAAY,CAAC,CAAC,CAAC,EAAE,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAA;IAC1F,IAAI,MAAM;QAAE,OAAO,EAAE,GAAG,MAAM,EAAE,EAAE,EAAE,CAAA;IACpC,MAAM,IAAI,cAAc,CACtB,eAAe,EACf,yBAAyB,EAAE,aAAa,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAC/E,EAAE,KAAK,EAAE,EAAE,EAAE,KAAK,EAAE,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAChD,CAAA;AACH,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,WAAW,CAAC,OAAqB,EAAE,KAAa,EAAE,aAAqB;IACrF,OAAO,KAAK,GAAG,CAAC,aAAa,GAAG,OAAO,CAAC,kBAAkB,CAAC,GAAG,OAAO,CAAC,gBAAgB,CAAA;AACxF,CAAC;AAED,SAAS,YAAY,CAAC,IAAY;IAChC,OAAO,IAAI,CAAC,OAAO,CAAC,qBAAqB,EAAE,MAAM,CAAC,CAAA;AACpD,CAAC"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { Type } from "typebox";
|
|
2
|
+
/**
|
|
3
|
+
* A question, as it goes on the wire. Spelled out here (rather than an opaque
|
|
4
|
+
* record) so `decide schema <tool>` describes what a valid question is.
|
|
5
|
+
*/
|
|
6
|
+
export declare const QuestionSchema: Type.TUnion<[Type.TObject<{
|
|
7
|
+
type: Type.TLiteral<"noul">;
|
|
8
|
+
instructions: Type.TString;
|
|
9
|
+
/** Optional `true`/`false` criteria that sharpen an ambiguous statement. */
|
|
10
|
+
criteria: Type.TOptional<Type.TRecord<"^.*$", Type.TString>>;
|
|
11
|
+
}>, Type.TObject<{
|
|
12
|
+
type: Type.TLiteral<"choice">;
|
|
13
|
+
instructions: Type.TString;
|
|
14
|
+
/** Option key to when it applies. At least two, including a way out. */
|
|
15
|
+
criteria: Type.TRecord<"^.*$", Type.TString>;
|
|
16
|
+
}>, Type.TObject<{
|
|
17
|
+
type: Type.TLiteral<"score">;
|
|
18
|
+
instructions: Type.TString;
|
|
19
|
+
/** Levels, lowest first and 0-indexed. */
|
|
20
|
+
criteria: Type.TArray<Type.TString>;
|
|
21
|
+
}>]>;
|
|
22
|
+
//# sourceMappingURL=schema.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../src/model/schema.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,SAAS,CAAA;AAE9B;;;GAGG;AACH,eAAO,MAAM,cAAc;;;IAKrB,4EAA4E;;;;;IAS5E,wEAAwE;;;;;IASxE,0CAA0C;;IAK9C,CAAA"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { Type } from "typebox";
|
|
2
|
+
/**
|
|
3
|
+
* A question, as it goes on the wire. Spelled out here (rather than an opaque
|
|
4
|
+
* record) so `decide schema <tool>` describes what a valid question is.
|
|
5
|
+
*/
|
|
6
|
+
export const QuestionSchema = Type.Union([
|
|
7
|
+
Type.Object({
|
|
8
|
+
type: Type.Literal("noul"),
|
|
9
|
+
instructions: Type.String({ minLength: 1 }),
|
|
10
|
+
/** Optional `true`/`false` criteria that sharpen an ambiguous statement. */
|
|
11
|
+
criteria: Type.Optional(Type.Record(Type.String(), Type.String())),
|
|
12
|
+
}, { additionalProperties: false }),
|
|
13
|
+
Type.Object({
|
|
14
|
+
type: Type.Literal("choice"),
|
|
15
|
+
instructions: Type.String({ minLength: 1 }),
|
|
16
|
+
/** Option key to when it applies. At least two, including a way out. */
|
|
17
|
+
criteria: Type.Record(Type.String(), Type.String(), { minProperties: 2 }),
|
|
18
|
+
}, { additionalProperties: false }),
|
|
19
|
+
Type.Object({
|
|
20
|
+
type: Type.Literal("score"),
|
|
21
|
+
instructions: Type.String({ minLength: 1 }),
|
|
22
|
+
/** Levels, lowest first and 0-indexed. */
|
|
23
|
+
criteria: Type.Array(Type.String(), { minItems: 2 }),
|
|
24
|
+
}, { additionalProperties: false }),
|
|
25
|
+
]);
|
|
26
|
+
//# sourceMappingURL=schema.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"schema.js","sourceRoot":"","sources":["../../src/model/schema.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,SAAS,CAAA;AAE9B;;;GAGG;AACH,MAAM,CAAC,MAAM,cAAc,GAAG,IAAI,CAAC,KAAK,CAAC;IACvC,IAAI,CAAC,MAAM,CACT;QACE,IAAI,EAAE,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC;QAC1B,YAAY,EAAE,IAAI,CAAC,MAAM,CAAC,EAAE,SAAS,EAAE,CAAC,EAAE,CAAC;QAC3C,4EAA4E;QAC5E,QAAQ,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;KACnE,EACD,EAAE,oBAAoB,EAAE,KAAK,EAAE,CAChC;IACD,IAAI,CAAC,MAAM,CACT;QACE,IAAI,EAAE,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC;QAC5B,YAAY,EAAE,IAAI,CAAC,MAAM,CAAC,EAAE,SAAS,EAAE,CAAC,EAAE,CAAC;QAC3C,wEAAwE;QACxE,QAAQ,EAAE,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,IAAI,CAAC,MAAM,EAAE,EAAE,EAAE,aAAa,EAAE,CAAC,EAAE,CAAC;KAC1E,EACD,EAAE,oBAAoB,EAAE,KAAK,EAAE,CAChC;IACD,IAAI,CAAC,MAAM,CACT;QACE,IAAI,EAAE,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC;QAC3B,YAAY,EAAE,IAAI,CAAC,MAAM,CAAC,EAAE,SAAS,EAAE,CAAC,EAAE,CAAC;QAC3C,0CAA0C;QAC1C,QAAQ,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,EAAE,QAAQ,EAAE,CAAC,EAAE,CAAC;KACrD,EACD,EAAE,oBAAoB,EAAE,KAAK,EAAE,CAChC;CACF,CAAC,CAAA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"validate.d.ts","sourceRoot":"","sources":["../../src/model/validate.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAmB,gBAAgB,EAAE,WAAW,EAAS,MAAM,YAAY,CAAA;
|
|
1
|
+
{"version":3,"file":"validate.d.ts","sourceRoot":"","sources":["../../src/model/validate.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAmB,gBAAgB,EAAE,WAAW,EAAS,MAAM,YAAY,CAAA;AAIvF;;;;GAIG;AACH,wBAAgB,iBAAiB,CAAC,SAAS,EAAE,OAAO,GAAG,OAAO,CAAC,SAAS,IAAI,WAAW,CA+DtF;AAED;;;;;;;GAOG;AACH,wBAAgB,qBAAqB,CACnC,GAAG,EAAE,OAAO,EACZ,SAAS,EAAE,WAAW,EACtB,cAAc,EAAE,MAAM,GACrB,gBAAgB,CA2BlB"}
|
package/dist/model/validate.js
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { DecisionsError, ProviderError } from "../errors.js";
|
|
2
|
+
const QUESTION_KEYS = ["type", "instructions", "criteria"];
|
|
2
3
|
/**
|
|
3
4
|
* Reject a malformed question set before it costs a call.
|
|
4
5
|
*
|
|
@@ -14,6 +15,11 @@ export function assertQuestionSet(questions) {
|
|
|
14
15
|
problems.push(`${name}: must be an object`);
|
|
15
16
|
continue;
|
|
16
17
|
}
|
|
18
|
+
// A misspelled key (`critera:`) would otherwise drop the criteria silently.
|
|
19
|
+
const extra = Object.keys(q).filter((k) => !QUESTION_KEYS.includes(k));
|
|
20
|
+
if (extra.length > 0) {
|
|
21
|
+
problems.push(`${name}: unknown key(s) ${extra.join(", ")} (a question has type, instructions, criteria)`);
|
|
22
|
+
}
|
|
17
23
|
if (typeof q.instructions !== "string" || q.instructions.trim() === "") {
|
|
18
24
|
problems.push(`${name}: instructions must be a non-empty string`);
|
|
19
25
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"validate.js","sourceRoot":"","sources":["../../src/model/validate.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"validate.js","sourceRoot":"","sources":["../../src/model/validate.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,280 @@
|
|
|
1
|
+
import { type Static, Type } from "typebox";
|
|
2
|
+
import { type Op } from "../project/project.js";
|
|
3
|
+
/**
|
|
4
|
+
* The scout backlog: places where an LLM call, a hand-written heuristic or an
|
|
5
|
+
* agent fan-out is doing a decision model's job. The `scout` skill decides what
|
|
6
|
+
* counts; this module validates and persists it, so the backlog is a typed
|
|
7
|
+
* artifact rather than prose in a transcript. Every saving in it is projected
|
|
8
|
+
* (arithmetic over the inputs shown beside it), never measured.
|
|
9
|
+
*/
|
|
10
|
+
export declare const BACKLOG_FORMAT = 1;
|
|
11
|
+
export declare const CandidateSchema: Type.TObject<{
|
|
12
|
+
/** `code`: a codebase (Mode A). `agents`: skills, hooks, agent configuration (Mode B). */
|
|
13
|
+
mode: Type.TUnion<[Type.TLiteral<"code">, Type.TLiteral<"agents">]>;
|
|
14
|
+
location: Type.TObject<{
|
|
15
|
+
path: Type.TString;
|
|
16
|
+
lines: Type.TOptional<Type.TObject<{
|
|
17
|
+
start: Type.TInteger;
|
|
18
|
+
end: Type.TInteger;
|
|
19
|
+
}>>;
|
|
20
|
+
}>;
|
|
21
|
+
/** What does the job today, e.g. "gpt-4o call parsed to an enum". */
|
|
22
|
+
mechanism: Type.TString;
|
|
23
|
+
shape: Type.TUnion<[Type.TLiteral<"single">, Type.TLiteral<"fanout">, Type.TLiteral<"cascade">, Type.TLiteral<"pairwise">]>;
|
|
24
|
+
/**
|
|
25
|
+
* The text that triggered it, taken verbatim from the screened item. The id is
|
|
26
|
+
* derived from it, so it must be copied, not paraphrased.
|
|
27
|
+
*/
|
|
28
|
+
evidence: Type.TString;
|
|
29
|
+
/** A draft question set that would replace the mechanism. */
|
|
30
|
+
questions: Type.TRecord<"^.*$", Type.TUnion<[Type.TObject<{
|
|
31
|
+
type: Type.TLiteral<"noul">;
|
|
32
|
+
instructions: Type.TString;
|
|
33
|
+
criteria: Type.TOptional<Type.TRecord<"^.*$", Type.TString>>;
|
|
34
|
+
}>, Type.TObject<{
|
|
35
|
+
type: Type.TLiteral<"choice">;
|
|
36
|
+
instructions: Type.TString;
|
|
37
|
+
criteria: Type.TRecord<"^.*$", Type.TString>;
|
|
38
|
+
}>, Type.TObject<{
|
|
39
|
+
type: Type.TLiteral<"score">;
|
|
40
|
+
instructions: Type.TString;
|
|
41
|
+
criteria: Type.TArray<Type.TString>;
|
|
42
|
+
}>]>>;
|
|
43
|
+
/**
|
|
44
|
+
* What replacing the mechanism would mainly buy. `cost`: cheaper calls.
|
|
45
|
+
* `quality`: better or more consistent verdicts (a regex or heuristic that
|
|
46
|
+
* costs nothing today, so its `savingUsd` can be negative). `latency`:
|
|
47
|
+
* faster answers. Rank within a benefit, not across them.
|
|
48
|
+
*/
|
|
49
|
+
benefit: Type.TUnion<[Type.TLiteral<"cost">, Type.TLiteral<"quality">, Type.TLiteral<"latency">]>;
|
|
50
|
+
/** The inputs of the projected saving. The saving itself is computed here. */
|
|
51
|
+
projected: Type.TObject<{
|
|
52
|
+
volume: Type.TNumber;
|
|
53
|
+
/** What `volume` counts per, e.g. "day", "PR", "run". */
|
|
54
|
+
per: Type.TString;
|
|
55
|
+
currentCostPerItemUsd: Type.TNumber;
|
|
56
|
+
decisionCostPerItemUsd: Type.TNumber;
|
|
57
|
+
/** Where the figures came from. */
|
|
58
|
+
note: Type.TOptional<Type.TString>;
|
|
59
|
+
}>;
|
|
60
|
+
risk: Type.TObject<{
|
|
61
|
+
level: Type.TUnion<[Type.TLiteral<"low">, Type.TLiteral<"medium">, Type.TLiteral<"high">]>;
|
|
62
|
+
/** What would go wrong if the replacement erred. */
|
|
63
|
+
note: Type.TString;
|
|
64
|
+
}>;
|
|
65
|
+
/** The next step, e.g. "save the spec with design, then adopt". */
|
|
66
|
+
next: Type.TString;
|
|
67
|
+
/** Defaults to `new`. `rejected` needs a `statusReason`. */
|
|
68
|
+
status: Type.TOptional<Type.TUnion<[Type.TLiteral<"new">, Type.TLiteral<"stale">, Type.TLiteral<"adopted">, Type.TLiteral<"rejected">]>>;
|
|
69
|
+
statusReason: Type.TOptional<Type.TString>;
|
|
70
|
+
/** Which sweep produced it, and whether its screening answers were live or replayed. */
|
|
71
|
+
source: Type.TObject<{
|
|
72
|
+
sweep: Type.TString;
|
|
73
|
+
answers: Type.TUnion<[Type.TLiteral<"live">, Type.TLiteral<"replay">]>;
|
|
74
|
+
}>;
|
|
75
|
+
}>;
|
|
76
|
+
export declare const OpportunitySchema: Type.TObject<{
|
|
77
|
+
/** `code`: a codebase (Mode A). `agents`: skills, hooks, agent configuration (Mode B). */
|
|
78
|
+
mode: Type.TUnion<[Type.TLiteral<"code">, Type.TLiteral<"agents">]>;
|
|
79
|
+
location: Type.TObject<{
|
|
80
|
+
path: Type.TString;
|
|
81
|
+
lines: Type.TOptional<Type.TObject<{
|
|
82
|
+
start: Type.TInteger;
|
|
83
|
+
end: Type.TInteger;
|
|
84
|
+
}>>;
|
|
85
|
+
}>;
|
|
86
|
+
/** What does the job today, e.g. "gpt-4o call parsed to an enum". */
|
|
87
|
+
mechanism: Type.TString;
|
|
88
|
+
shape: Type.TUnion<[Type.TLiteral<"single">, Type.TLiteral<"fanout">, Type.TLiteral<"cascade">, Type.TLiteral<"pairwise">]>;
|
|
89
|
+
/**
|
|
90
|
+
* The text that triggered it, taken verbatim from the screened item. The id is
|
|
91
|
+
* derived from it, so it must be copied, not paraphrased.
|
|
92
|
+
*/
|
|
93
|
+
evidence: Type.TString;
|
|
94
|
+
/** A draft question set that would replace the mechanism. */
|
|
95
|
+
questions: Type.TRecord<"^.*$", Type.TUnion<[Type.TObject<{
|
|
96
|
+
type: Type.TLiteral<"noul">;
|
|
97
|
+
instructions: Type.TString;
|
|
98
|
+
criteria: Type.TOptional<Type.TRecord<"^.*$", Type.TString>>;
|
|
99
|
+
}>, Type.TObject<{
|
|
100
|
+
type: Type.TLiteral<"choice">;
|
|
101
|
+
instructions: Type.TString;
|
|
102
|
+
criteria: Type.TRecord<"^.*$", Type.TString>;
|
|
103
|
+
}>, Type.TObject<{
|
|
104
|
+
type: Type.TLiteral<"score">;
|
|
105
|
+
instructions: Type.TString;
|
|
106
|
+
criteria: Type.TArray<Type.TString>;
|
|
107
|
+
}>]>>;
|
|
108
|
+
/**
|
|
109
|
+
* What replacing the mechanism would mainly buy. `cost`: cheaper calls.
|
|
110
|
+
* `quality`: better or more consistent verdicts (a regex or heuristic that
|
|
111
|
+
* costs nothing today, so its `savingUsd` can be negative). `latency`:
|
|
112
|
+
* faster answers. Rank within a benefit, not across them.
|
|
113
|
+
*/
|
|
114
|
+
benefit: Type.TUnion<[Type.TLiteral<"cost">, Type.TLiteral<"quality">, Type.TLiteral<"latency">]>;
|
|
115
|
+
risk: Type.TObject<{
|
|
116
|
+
level: Type.TUnion<[Type.TLiteral<"low">, Type.TLiteral<"medium">, Type.TLiteral<"high">]>;
|
|
117
|
+
/** What would go wrong if the replacement erred. */
|
|
118
|
+
note: Type.TString;
|
|
119
|
+
}>;
|
|
120
|
+
/** The next step, e.g. "save the spec with design, then adopt". */
|
|
121
|
+
next: Type.TString;
|
|
122
|
+
statusReason: Type.TOptional<Type.TString>;
|
|
123
|
+
/** Which sweep produced it, and whether its screening answers were live or replayed. */
|
|
124
|
+
source: Type.TObject<{
|
|
125
|
+
sweep: Type.TString;
|
|
126
|
+
answers: Type.TUnion<[Type.TLiteral<"live">, Type.TLiteral<"replay">]>;
|
|
127
|
+
}>;
|
|
128
|
+
id: Type.TString;
|
|
129
|
+
status: Type.TUnion<[Type.TLiteral<"new">, Type.TLiteral<"stale">, Type.TLiteral<"adopted">, Type.TLiteral<"rejected">]>;
|
|
130
|
+
projected: Type.TObject<{
|
|
131
|
+
volume: Type.TNumber;
|
|
132
|
+
/** What `volume` counts per, e.g. "day", "PR", "run". */
|
|
133
|
+
per: Type.TString;
|
|
134
|
+
currentCostPerItemUsd: Type.TNumber;
|
|
135
|
+
decisionCostPerItemUsd: Type.TNumber;
|
|
136
|
+
/** Where the figures came from. */
|
|
137
|
+
note: Type.TOptional<Type.TString>;
|
|
138
|
+
basis: Type.TLiteral<"projected">;
|
|
139
|
+
/** volume × (current − decision), per `per`. Negative means it would cost more. */
|
|
140
|
+
savingUsd: Type.TNumber;
|
|
141
|
+
}>;
|
|
142
|
+
firstSeenAt: Type.TString;
|
|
143
|
+
seenAt: Type.TString;
|
|
144
|
+
}>;
|
|
145
|
+
export declare const BacklogSchema: Type.TObject<{
|
|
146
|
+
version: Type.TLiteral<1>;
|
|
147
|
+
opportunities: Type.TArray<Type.TObject<{
|
|
148
|
+
/** `code`: a codebase (Mode A). `agents`: skills, hooks, agent configuration (Mode B). */
|
|
149
|
+
mode: Type.TUnion<[Type.TLiteral<"code">, Type.TLiteral<"agents">]>;
|
|
150
|
+
location: Type.TObject<{
|
|
151
|
+
path: Type.TString;
|
|
152
|
+
lines: Type.TOptional<Type.TObject<{
|
|
153
|
+
start: Type.TInteger;
|
|
154
|
+
end: Type.TInteger;
|
|
155
|
+
}>>;
|
|
156
|
+
}>;
|
|
157
|
+
/** What does the job today, e.g. "gpt-4o call parsed to an enum". */
|
|
158
|
+
mechanism: Type.TString;
|
|
159
|
+
shape: Type.TUnion<[Type.TLiteral<"single">, Type.TLiteral<"fanout">, Type.TLiteral<"cascade">, Type.TLiteral<"pairwise">]>;
|
|
160
|
+
/**
|
|
161
|
+
* The text that triggered it, taken verbatim from the screened item. The id is
|
|
162
|
+
* derived from it, so it must be copied, not paraphrased.
|
|
163
|
+
*/
|
|
164
|
+
evidence: Type.TString;
|
|
165
|
+
/** A draft question set that would replace the mechanism. */
|
|
166
|
+
questions: Type.TRecord<"^.*$", Type.TUnion<[Type.TObject<{
|
|
167
|
+
type: Type.TLiteral<"noul">;
|
|
168
|
+
instructions: Type.TString;
|
|
169
|
+
criteria: Type.TOptional<Type.TRecord<"^.*$", Type.TString>>;
|
|
170
|
+
}>, Type.TObject<{
|
|
171
|
+
type: Type.TLiteral<"choice">;
|
|
172
|
+
instructions: Type.TString;
|
|
173
|
+
criteria: Type.TRecord<"^.*$", Type.TString>;
|
|
174
|
+
}>, Type.TObject<{
|
|
175
|
+
type: Type.TLiteral<"score">;
|
|
176
|
+
instructions: Type.TString;
|
|
177
|
+
criteria: Type.TArray<Type.TString>;
|
|
178
|
+
}>]>>;
|
|
179
|
+
/**
|
|
180
|
+
* What replacing the mechanism would mainly buy. `cost`: cheaper calls.
|
|
181
|
+
* `quality`: better or more consistent verdicts (a regex or heuristic that
|
|
182
|
+
* costs nothing today, so its `savingUsd` can be negative). `latency`:
|
|
183
|
+
* faster answers. Rank within a benefit, not across them.
|
|
184
|
+
*/
|
|
185
|
+
benefit: Type.TUnion<[Type.TLiteral<"cost">, Type.TLiteral<"quality">, Type.TLiteral<"latency">]>;
|
|
186
|
+
risk: Type.TObject<{
|
|
187
|
+
level: Type.TUnion<[Type.TLiteral<"low">, Type.TLiteral<"medium">, Type.TLiteral<"high">]>;
|
|
188
|
+
/** What would go wrong if the replacement erred. */
|
|
189
|
+
note: Type.TString;
|
|
190
|
+
}>;
|
|
191
|
+
/** The next step, e.g. "save the spec with design, then adopt". */
|
|
192
|
+
next: Type.TString;
|
|
193
|
+
statusReason: Type.TOptional<Type.TString>;
|
|
194
|
+
/** Which sweep produced it, and whether its screening answers were live or replayed. */
|
|
195
|
+
source: Type.TObject<{
|
|
196
|
+
sweep: Type.TString;
|
|
197
|
+
answers: Type.TUnion<[Type.TLiteral<"live">, Type.TLiteral<"replay">]>;
|
|
198
|
+
}>;
|
|
199
|
+
id: Type.TString;
|
|
200
|
+
status: Type.TUnion<[Type.TLiteral<"new">, Type.TLiteral<"stale">, Type.TLiteral<"adopted">, Type.TLiteral<"rejected">]>;
|
|
201
|
+
projected: Type.TObject<{
|
|
202
|
+
volume: Type.TNumber;
|
|
203
|
+
/** What `volume` counts per, e.g. "day", "PR", "run". */
|
|
204
|
+
per: Type.TString;
|
|
205
|
+
currentCostPerItemUsd: Type.TNumber;
|
|
206
|
+
decisionCostPerItemUsd: Type.TNumber;
|
|
207
|
+
/** Where the figures came from. */
|
|
208
|
+
note: Type.TOptional<Type.TString>;
|
|
209
|
+
basis: Type.TLiteral<"projected">;
|
|
210
|
+
/** volume × (current − decision), per `per`. Negative means it would cost more. */
|
|
211
|
+
savingUsd: Type.TNumber;
|
|
212
|
+
}>;
|
|
213
|
+
firstSeenAt: Type.TString;
|
|
214
|
+
seenAt: Type.TString;
|
|
215
|
+
}>>;
|
|
216
|
+
}>;
|
|
217
|
+
export type Candidate = Static<typeof CandidateSchema>;
|
|
218
|
+
export type Opportunity = Static<typeof OpportunitySchema>;
|
|
219
|
+
export type Backlog = Static<typeof BacklogSchema>;
|
|
220
|
+
export type OpportunityStatus = Opportunity["status"];
|
|
221
|
+
export declare function backlogPath(repoRoot: string): string;
|
|
222
|
+
/**
|
|
223
|
+
* Stable across re-runs and file moves: the mode and the evidence, with
|
|
224
|
+
* whitespace collapsed. Not the path (a moved file keeps its id) and nothing
|
|
225
|
+
* the agent paraphrases.
|
|
226
|
+
*/
|
|
227
|
+
export declare function opportunityId(mode: Candidate["mode"], evidence: string): string;
|
|
228
|
+
export declare function projectedSaving(p: Candidate["projected"]): number;
|
|
229
|
+
/** Every problem with a backlog value, as `path message` lines. Empty when valid. */
|
|
230
|
+
export declare function backlogProblems(value: unknown): string[];
|
|
231
|
+
/**
|
|
232
|
+
* Read the backlog. A missing file is an empty backlog; a malformed one is an
|
|
233
|
+
* error, and is never repaired or overwritten.
|
|
234
|
+
*/
|
|
235
|
+
export declare function readBacklog(file: string): Backlog;
|
|
236
|
+
/**
|
|
237
|
+
* Run `body` holding the backlog's lock, so concurrent `add`s (two sweeps, or
|
|
238
|
+
* a sweep run in parallel) serialise instead of losing each other's entries.
|
|
239
|
+
* A lock older than 30 s is from a crashed run and is taken over.
|
|
240
|
+
*/
|
|
241
|
+
export declare function withBacklogLock<T>(file: string, body: () => T): T;
|
|
242
|
+
/** Written whole, through a temp file, so a crash never leaves half a backlog. */
|
|
243
|
+
export declare function writeBacklog(file: string, backlog: Backlog): void;
|
|
244
|
+
export interface MergeResult {
|
|
245
|
+
backlog: Backlog;
|
|
246
|
+
added: string[];
|
|
247
|
+
updated: string[];
|
|
248
|
+
/** Entries at a path this add covered, not seen again, and so superseded. */
|
|
249
|
+
staled: string[];
|
|
250
|
+
}
|
|
251
|
+
/**
|
|
252
|
+
* Merge candidates into a backlog.
|
|
253
|
+
*
|
|
254
|
+
* - A candidate whose id exists updates that entry (location, draft, figures,
|
|
255
|
+
* `seenAt`), keeping `firstSeenAt`. Its status changes only when the
|
|
256
|
+
* candidate gives one, so a rejection survives a re-sweep.
|
|
257
|
+
* - A new id is added with status `new` unless the candidate says otherwise.
|
|
258
|
+
* - A `new` entry that this add's sweep produced before, at a path the add
|
|
259
|
+
* covers, in the same mode, and that the add didn't see again is marked
|
|
260
|
+
* `stale`: its evidence changed. It is never deleted. A stale entry seen again
|
|
261
|
+
* is `new` again.
|
|
262
|
+
*/
|
|
263
|
+
export declare function mergeCandidates(backlog: Backlog, candidates: readonly Candidate[], now: string): MergeResult;
|
|
264
|
+
/** Top-level fields of an entry, for `--fields`. */
|
|
265
|
+
export declare const ENTRY_FIELDS: readonly string[];
|
|
266
|
+
export interface RecordFilter {
|
|
267
|
+
field: string;
|
|
268
|
+
op: Op;
|
|
269
|
+
value: number | string | string[];
|
|
270
|
+
source: string;
|
|
271
|
+
}
|
|
272
|
+
/** `status=new`, `risk in medium,high`, `projected>=0.5`, `location.path=src/a.ts`. */
|
|
273
|
+
export declare function parseRecordFilter(text: string): RecordFilter;
|
|
274
|
+
export declare function parseRecordSort(text: string): {
|
|
275
|
+
field: string;
|
|
276
|
+
direction: "asc" | "desc";
|
|
277
|
+
};
|
|
278
|
+
export declare function readField(o: Opportunity, field: string): unknown;
|
|
279
|
+
export declare function recordMatches(o: Opportunity, f: RecordFilter): boolean;
|
|
280
|
+
//# sourceMappingURL=backlog.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"backlog.d.ts","sourceRoot":"","sources":["../../src/opportunities/backlog.ts"],"names":[],"mappings":"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"}
|