@garygentry/system1-core 0.3.2 → 0.4.1

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 (93) hide show
  1. package/dist/config/load.d.ts +11 -0
  2. package/dist/config/load.d.ts.map +1 -1
  3. package/dist/config/load.js +34 -5
  4. package/dist/config/load.js.map +1 -1
  5. package/dist/egress/scrub.d.ts.map +1 -1
  6. package/dist/egress/scrub.js +16 -0
  7. package/dist/egress/scrub.js.map +1 -1
  8. package/dist/index.d.ts +11 -1
  9. package/dist/index.d.ts.map +1 -1
  10. package/dist/index.js +6 -1
  11. package/dist/index.js.map +1 -1
  12. package/dist/model/schema.d.ts +22 -0
  13. package/dist/model/schema.d.ts.map +1 -0
  14. package/dist/model/schema.js +26 -0
  15. package/dist/model/schema.js.map +1 -0
  16. package/dist/opportunities/backlog.d.ts +280 -0
  17. package/dist/opportunities/backlog.d.ts.map +1 -0
  18. package/dist/opportunities/backlog.js +393 -0
  19. package/dist/opportunities/backlog.js.map +1 -0
  20. package/dist/prepare.d.ts +8 -0
  21. package/dist/prepare.d.ts.map +1 -1
  22. package/dist/prepare.js +42 -6
  23. package/dist/prepare.js.map +1 -1
  24. package/dist/project/project.d.ts +36 -0
  25. package/dist/project/project.d.ts.map +1 -1
  26. package/dist/project/project.js +64 -18
  27. package/dist/project/project.js.map +1 -1
  28. package/dist/sources/filter.d.ts +19 -0
  29. package/dist/sources/filter.d.ts.map +1 -0
  30. package/dist/sources/filter.js +30 -0
  31. package/dist/sources/filter.js.map +1 -0
  32. package/dist/sources/read.d.ts +10 -0
  33. package/dist/sources/read.d.ts.map +1 -1
  34. package/dist/sources/read.js +7 -2
  35. package/dist/sources/read.js.map +1 -1
  36. package/dist/sources/types.d.ts +2 -2
  37. package/dist/sources/types.d.ts.map +1 -1
  38. package/dist/spec/lint.d.ts +35 -0
  39. package/dist/spec/lint.d.ts.map +1 -0
  40. package/dist/spec/lint.js +174 -0
  41. package/dist/spec/lint.js.map +1 -0
  42. package/dist/spec/spec.d.ts +2 -0
  43. package/dist/spec/spec.d.ts.map +1 -1
  44. package/dist/spec/spec.js +3 -1
  45. package/dist/spec/spec.js.map +1 -1
  46. package/dist/tools/ask.d.ts.map +1 -1
  47. package/dist/tools/ask.js +10 -13
  48. package/dist/tools/ask.js.map +1 -1
  49. package/dist/tools/context.d.ts +5 -0
  50. package/dist/tools/context.d.ts.map +1 -1
  51. package/dist/tools/context.js +24 -0
  52. package/dist/tools/context.js.map +1 -1
  53. package/dist/tools/doctor.d.ts +3 -1
  54. package/dist/tools/doctor.d.ts.map +1 -1
  55. package/dist/tools/doctor.js +57 -10
  56. package/dist/tools/doctor.js.map +1 -1
  57. package/dist/tools/many.d.ts.map +1 -1
  58. package/dist/tools/many.js +3 -0
  59. package/dist/tools/many.js.map +1 -1
  60. package/dist/tools/opportunities.d.ts +33 -0
  61. package/dist/tools/opportunities.d.ts.map +1 -0
  62. package/dist/tools/opportunities.js +74 -0
  63. package/dist/tools/opportunities.js.map +1 -0
  64. package/dist/tools/schemas.d.ts +155 -12
  65. package/dist/tools/schemas.d.ts.map +1 -1
  66. package/dist/tools/schemas.js +32 -25
  67. package/dist/tools/schemas.js.map +1 -1
  68. package/dist/tools/spec-check.d.ts +6 -0
  69. package/dist/tools/spec-check.d.ts.map +1 -1
  70. package/dist/tools/spec-check.js +3 -0
  71. package/dist/tools/spec-check.js.map +1 -1
  72. package/dist/tools/spec-lint.d.ts +31 -0
  73. package/dist/tools/spec-lint.d.ts.map +1 -0
  74. package/dist/tools/spec-lint.js +53 -0
  75. package/dist/tools/spec-lint.js.map +1 -0
  76. package/dist/transport/openrouter.d.ts +4 -1
  77. package/dist/transport/openrouter.d.ts.map +1 -1
  78. package/dist/transport/openrouter.js +5 -2
  79. package/dist/transport/openrouter.js.map +1 -1
  80. package/dist/version.d.ts +1 -1
  81. package/dist/version.js +1 -1
  82. package/dist/wiring.d.ts.map +1 -1
  83. package/dist/wiring.js +11 -2
  84. package/dist/wiring.js.map +1 -1
  85. package/package.json +2 -2
  86. package/dist/config.d.ts +0 -28
  87. package/dist/config.d.ts.map +0 -1
  88. package/dist/config.js +0 -64
  89. package/dist/config.js.map +0 -1
  90. package/dist/testdata/index.d.ts +0 -5
  91. package/dist/testdata/index.d.ts.map +0 -1
  92. package/dist/testdata/index.js +0 -6
  93. package/dist/testdata/index.js.map +0 -1
@@ -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"}
@@ -2,9 +2,12 @@ import { ProviderError } from "../errors.js";
2
2
  import { parseDecisionResponse } from "../model/validate.js";
3
3
  export const DEFAULT_ENDPOINT = "https://openrouter.ai/api/alpha/decisions";
4
4
  export const DEFAULT_TIMEOUT_MS = 5_000;
5
- /** Statuses worth another attempt: timeouts, rate limits and upstream hiccups. */
5
+ /**
6
+ * Statuses worth another attempt: timeouts, rate limits and upstream hiccups.
7
+ * 529 is the provider's `system_overloaded`, seen on 2.9% of a 385-item sweep.
8
+ */
6
9
  export const RETRY_STATUSES = new Set([
7
- 408, 429, 500, 502, 503, 504, 520, 521, 522, 524,
10
+ 408, 429, 500, 502, 503, 504, 520, 521, 522, 524, 529,
8
11
  ]);
9
12
  const defaultSleep = (ms) => new Promise((resolve) => setTimeout(resolve, ms));
10
13
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"openrouter.js","sourceRoot":"","sources":["../../src/transport/openrouter.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"openrouter.js","sourceRoot":"","sources":["../../src/transport/openrouter.ts"],"names":[],"mappings":"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"}
package/dist/version.d.ts CHANGED
@@ -1,4 +1,4 @@
1
- export declare const VERSION = "0.3.2";
1
+ export declare const VERSION = "0.4.1";
2
2
  /** The npm package that provides `decide`. */
3
3
  export declare const CLI_PACKAGE = "@garygentry/system1";
4
4
  //# sourceMappingURL=version.d.ts.map
package/dist/version.js CHANGED
@@ -1,5 +1,5 @@
1
1
  // GENERATED — DO NOT EDIT (source: catalog.yaml, via tools/generate.ts)
2
- export const VERSION = "0.3.2";
2
+ export const VERSION = "0.4.1";
3
3
  /** The npm package that provides `decide`. */
4
4
  export const CLI_PACKAGE = "@garygentry/system1";
5
5
  //# sourceMappingURL=version.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"wiring.d.ts","sourceRoot":"","sources":["../src/wiring.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,KAAK,EAAE,UAAU,EAAE,OAAO,EAAE,MAAM,aAAa,CAAA;AAKtD,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAA;AAC3C,OAAO,EAAE,gBAAgB,EAAE,MAAM,2BAA2B,CAAA;AAC5D,eAAO,MAAM,aAAa,sBAAmB,CAAA;AAE7C,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,EAAE,MAAM,CAAA;IAChB,KAAK,EAAE,MAAM,CAAA;IACb,yDAAyD;IACzD,MAAM,EAAE,MAAM,GAAG,SAAS,CAAA;IAC1B,iEAAiE;IACjE,MAAM,EAAE,OAAO,CAAA;CAChB;AAED,kGAAkG;AAClG,wBAAgB,iBAAiB,CAAC,GAAG,GAAE,MAAM,CAAC,UAAwB,GAAG,gBAAgB,CAOxF;AAED,MAAM,WAAW,iBAAiB;IAChC,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,CAAA;IACvB,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,IAAI,CAAC,EAAE,UAAU,CAAA;IACjB,KAAK,CAAC,EAAE,OAAO,KAAK,CAAA;CACrB;AAED,6DAA6D;AAC7D,wBAAgB,oBAAoB,CAAC,OAAO,GAAE,iBAAsB,GAAG,OAAO,CAG7E"}
1
+ {"version":3,"file":"wiring.d.ts","sourceRoot":"","sources":["../src/wiring.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,KAAK,EAAE,UAAU,EAAE,OAAO,EAAE,MAAM,aAAa,CAAA;AAKtD,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAA;AAC3C,OAAO,EAAE,gBAAgB,EAAE,MAAM,2BAA2B,CAAA;AAC5D,eAAO,MAAM,aAAa,sBAAmB,CAAA;AAE7C,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,EAAE,MAAM,CAAA;IAChB,KAAK,EAAE,MAAM,CAAA;IACb,yDAAyD;IACzD,MAAM,EAAE,MAAM,GAAG,SAAS,CAAA;IAC1B,iEAAiE;IACjE,MAAM,EAAE,OAAO,CAAA;CAChB;AAED,kGAAkG;AAClG,wBAAgB,iBAAiB,CAAC,GAAG,GAAE,MAAM,CAAC,UAAwB,GAAG,gBAAgB,CAOxF;AAWD,MAAM,WAAW,iBAAiB;IAChC,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,CAAA;IACvB,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,IAAI,CAAC,EAAE,UAAU,CAAA;IACjB,KAAK,CAAC,EAAE,OAAO,KAAK,CAAA;CACrB;AAED,6DAA6D;AAC7D,wBAAgB,oBAAoB,CAAC,OAAO,GAAE,iBAAsB,GAAG,OAAO,CAG7E"}
package/dist/wiring.js CHANGED
@@ -4,7 +4,7 @@
4
4
  * The engine never reads a `.env` file: a project's `.env` belongs to that
5
5
  * project, not to us.
6
6
  */
7
- import { allProfiles } from "./config/load.js";
7
+ import { allProfiles, unquoteKey } from "./config/load.js";
8
8
  import { DEFAULT_MODEL_ID, resolveProfile } from "./model/profiles.js";
9
9
  import { createContext, deciderFor } from "./tools/context.js";
10
10
  import { DEFAULT_ENDPOINT } from "./transport/openrouter.js";
@@ -16,10 +16,19 @@ export function resolveConnection(env = process.env) {
16
16
  return {
17
17
  endpoint: nonEmpty(env.SYSTEM1_ENDPOINT) ?? DEFAULT_ENDPOINT,
18
18
  model: nonEmpty(env.SYSTEM1_MODEL) ?? DEFAULT_MODEL,
19
- apiKey: nonEmpty(env.OPENROUTER_API_KEY),
19
+ apiKey: envKey(env),
20
20
  replay: /^(1|true|yes)$/i.test(env.SYSTEM1_REPLAY ?? ""),
21
21
  };
22
22
  }
23
+ /** As `loadConfig` reads it; a key it would refuse counts as absent here (the config error is reported). */
24
+ function envKey(env) {
25
+ try {
26
+ return unquoteKey(env.OPENROUTER_API_KEY)?.value;
27
+ }
28
+ catch {
29
+ return undefined;
30
+ }
31
+ }
23
32
  /** A decider from layered config, as the tools build one. */
24
33
  export function createDeciderFromEnv(options = {}) {
25
34
  const ctx = createContext(options);
@@ -1 +1 @@
1
- {"version":3,"file":"wiring.js","sourceRoot":"","sources":["../src/wiring.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAA;AAE9C,OAAO,EAAE,gBAAgB,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAA;AACtE,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAA;AAC9D,OAAO,EAAE,gBAAgB,EAAE,MAAM,2BAA2B,CAAA;AAE5D,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAA;AAC3C,OAAO,EAAE,gBAAgB,EAAE,MAAM,2BAA2B,CAAA;AAC5D,MAAM,CAAC,MAAM,aAAa,GAAG,gBAAgB,CAAA;AAW7C,kGAAkG;AAClG,MAAM,UAAU,iBAAiB,CAAC,GAAG,GAAsB,OAAO,CAAC,GAAG;IACpE,OAAO;QACL,QAAQ,EAAE,QAAQ,CAAC,GAAG,CAAC,gBAAgB,CAAC,IAAI,gBAAgB;QAC5D,KAAK,EAAE,QAAQ,CAAC,GAAG,CAAC,aAAa,CAAC,IAAI,aAAa;QACnD,MAAM,EAAE,QAAQ,CAAC,GAAG,CAAC,kBAAkB,CAAC;QACxC,MAAM,EAAE,iBAAiB,CAAC,IAAI,CAAC,GAAG,CAAC,cAAc,IAAI,EAAE,CAAC;KACzD,CAAA;AACH,CAAC;AAUD,6DAA6D;AAC7D,MAAM,UAAU,oBAAoB,CAAC,OAAO,GAAsB,EAAE;IAClE,MAAM,GAAG,GAAG,aAAa,CAAC,OAAO,CAAC,CAAA;IAClC,OAAO,UAAU,CAAC,GAAG,EAAE,cAAc,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,EAAE,WAAW,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,EAAE,OAAO,CAAC,IAAI,CAAC,CAAA;AACjG,CAAC;AAED,SAAS,QAAQ,CAAC,KAAyB;IACzC,OAAO,KAAK,KAAK,SAAS,IAAI,KAAK,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,EAAE,CAAA;AAC9E,CAAC"}
1
+ {"version":3,"file":"wiring.js","sourceRoot":"","sources":["../src/wiring.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAA;AAE1D,OAAO,EAAE,gBAAgB,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAA;AACtE,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAA;AAC9D,OAAO,EAAE,gBAAgB,EAAE,MAAM,2BAA2B,CAAA;AAE5D,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAA;AAC3C,OAAO,EAAE,gBAAgB,EAAE,MAAM,2BAA2B,CAAA;AAC5D,MAAM,CAAC,MAAM,aAAa,GAAG,gBAAgB,CAAA;AAW7C,kGAAkG;AAClG,MAAM,UAAU,iBAAiB,CAAC,GAAG,GAAsB,OAAO,CAAC,GAAG;IACpE,OAAO;QACL,QAAQ,EAAE,QAAQ,CAAC,GAAG,CAAC,gBAAgB,CAAC,IAAI,gBAAgB;QAC5D,KAAK,EAAE,QAAQ,CAAC,GAAG,CAAC,aAAa,CAAC,IAAI,aAAa;QACnD,MAAM,EAAE,MAAM,CAAC,GAAG,CAAC;QACnB,MAAM,EAAE,iBAAiB,CAAC,IAAI,CAAC,GAAG,CAAC,cAAc,IAAI,EAAE,CAAC;KACzD,CAAA;AACH,CAAC;AAED,4GAA4G;AAC5G,SAAS,MAAM,CAAC,GAAsB;IACpC,IAAI,CAAC;QACH,OAAO,UAAU,CAAC,GAAG,CAAC,kBAAkB,CAAC,EAAE,KAAK,CAAA;IAClD,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,SAAS,CAAA;IAClB,CAAC;AACH,CAAC;AAUD,6DAA6D;AAC7D,MAAM,UAAU,oBAAoB,CAAC,OAAO,GAAsB,EAAE;IAClE,MAAM,GAAG,GAAG,aAAa,CAAC,OAAO,CAAC,CAAA;IAClC,OAAO,UAAU,CAAC,GAAG,EAAE,cAAc,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,EAAE,WAAW,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,EAAE,OAAO,CAAC,IAAI,CAAC,CAAA;AACjG,CAAC;AAED,SAAS,QAAQ,CAAC,KAAyB;IACzC,OAAO,KAAK,KAAK,SAAS,IAAI,KAAK,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,EAAE,CAAA;AAC9E,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@garygentry/system1-core",
3
- "version": "0.3.2",
3
+ "version": "0.4.1",
4
4
  "description": "Engine for decision-model calls: model profiles, transport, sources, fixtures, spend.",
5
5
  "type": "module",
6
6
  "sideEffects": false,
@@ -21,7 +21,7 @@
21
21
  ],
22
22
  "repository": {
23
23
  "type": "git",
24
- "url": "https://github.com/garygentry/system1",
24
+ "url": "git+https://github.com/garygentry/system1.git",
25
25
  "directory": "packages/core"
26
26
  },
27
27
  "engines": {
package/dist/config.d.ts DELETED
@@ -1,28 +0,0 @@
1
- import { type DecideMode, type Decider } from "./decide.js";
2
- export { DEFAULT_ENDPOINT } from "./transport/openrouter.js";
3
- export declare const DEFAULT_MODEL = "typesafe/jev-1.13";
4
- export interface ConnectionConfig {
5
- endpoint: string;
6
- model: string;
7
- /** Never printed; only its presence is ever reported. */
8
- apiKey: string | undefined;
9
- /** `DECISIONS_REPLAY` forces replay even when a key is present. */
10
- replay: boolean;
11
- }
12
- export declare function resolveConnection(env?: NodeJS.ProcessEnv): ConnectionConfig;
13
- /** Where a repo keeps its decisions state. */
14
- export declare function stateDir(cwd: string): string;
15
- export interface EnvDeciderOptions {
16
- cwd?: string;
17
- env?: NodeJS.ProcessEnv;
18
- home?: string;
19
- mode?: DecideMode;
20
- fetch?: typeof fetch;
21
- }
22
- /**
23
- * The standard wiring from layered config: profile, a transport only when a
24
- * key exists, the repo's egress consent, fixtures under `.decisions/fixtures`,
25
- * and spend appended to `.decisions/usage.jsonl`.
26
- */
27
- export declare function createDeciderFromEnv(options?: EnvDeciderOptions): Decider;
28
- //# sourceMappingURL=config.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAQA,OAAO,EAAiB,KAAK,UAAU,EAAE,KAAK,OAAO,EAAE,MAAM,aAAa,CAAA;AAO1E,OAAO,EAAE,gBAAgB,EAAE,MAAM,2BAA2B,CAAA;AAC5D,eAAO,MAAM,aAAa,sBAAmB,CAAA;AAE7C,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,EAAE,MAAM,CAAA;IAChB,KAAK,EAAE,MAAM,CAAA;IACb,yDAAyD;IACzD,MAAM,EAAE,MAAM,GAAG,SAAS,CAAA;IAC1B,mEAAmE;IACnE,MAAM,EAAE,OAAO,CAAA;CAChB;AAED,wBAAgB,iBAAiB,CAAC,GAAG,GAAE,MAAM,CAAC,UAAwB,GAAG,gBAAgB,CAOxF;AAED,8CAA8C;AAC9C,wBAAgB,QAAQ,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAE5C;AAED,MAAM,WAAW,iBAAiB;IAChC,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,CAAA;IACvB,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,IAAI,CAAC,EAAE,UAAU,CAAA;IACjB,KAAK,CAAC,EAAE,OAAO,KAAK,CAAA;CACrB;AAED;;;;GAIG;AACH,wBAAgB,oBAAoB,CAAC,OAAO,GAAE,iBAAsB,GAAG,OAAO,CA0B7E"}
package/dist/config.js DELETED
@@ -1,64 +0,0 @@
1
- /**
2
- * Connection settings, resolved from the environment.
3
- *
4
- * The M1 subset. Layered config files (user, then repo) arrive with egress
5
- * consent in M2, and env always wins over them. The engine never reads a
6
- * `.env` file: a project's `.env` belongs to that project, not to us.
7
- */
8
- import { join } from "node:path";
9
- import { createDecider } from "./decide.js";
10
- import { FixtureStore } from "./fixtures/store.js";
11
- import { allProfiles, loadConfig } from "./config/load.js";
12
- import { DEFAULT_MODEL_ID, resolveProfile } from "./model/profiles.js";
13
- import { SpendLedger } from "./run/spend.js";
14
- import { createOpenRouterTransport, DEFAULT_ENDPOINT } from "./transport/openrouter.js";
15
- export { DEFAULT_ENDPOINT } from "./transport/openrouter.js";
16
- export const DEFAULT_MODEL = DEFAULT_MODEL_ID;
17
- export function resolveConnection(env = process.env) {
18
- return {
19
- endpoint: nonEmpty(env.DECISIONS_ENDPOINT) ?? DEFAULT_ENDPOINT,
20
- model: nonEmpty(env.DECISIONS_MODEL) ?? DEFAULT_MODEL,
21
- apiKey: nonEmpty(env.OPENROUTER_API_KEY),
22
- replay: /^(1|true|yes)$/i.test(env.DECISIONS_REPLAY ?? ""),
23
- };
24
- }
25
- /** Where a repo keeps its decisions state. */
26
- export function stateDir(cwd) {
27
- return join(cwd, ".decisions");
28
- }
29
- /**
30
- * The standard wiring from layered config: profile, a transport only when a
31
- * key exists, the repo's egress consent, fixtures under `.decisions/fixtures`,
32
- * and spend appended to `.decisions/usage.jsonl`.
33
- */
34
- export function createDeciderFromEnv(options = {}) {
35
- const config = loadConfig({
36
- ...(options.cwd ? { cwd: options.cwd } : {}),
37
- ...(options.env ? { env: options.env } : {}),
38
- ...(options.home ? { home: options.home } : {}),
39
- });
40
- const profile = resolveProfile(config.model, allProfiles(config));
41
- const dir = stateDir(config.repoRoot);
42
- return createDecider({
43
- profile,
44
- egressConsent: config.egress.consent.granted,
45
- repoRoot: config.repoRoot,
46
- ...(config.apiKey
47
- ? {
48
- transport: createOpenRouterTransport({
49
- endpoint: config.endpoint,
50
- apiKey: config.apiKey,
51
- ...(options.fetch ? { fetch: options.fetch } : {}),
52
- }),
53
- }
54
- : {}),
55
- fixtures: new FixtureStore(join(dir, "fixtures")),
56
- ledger: new SpendLedger(join(dir, "usage.jsonl")),
57
- mode: config.replay ? "replay" : (options.mode ?? "auto"),
58
- ...(config.session ? { session: config.session } : {}),
59
- });
60
- }
61
- function nonEmpty(value) {
62
- return value === undefined || value.trim() === "" ? undefined : value.trim();
63
- }
64
- //# sourceMappingURL=config.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
@@ -1,5 +0,0 @@
1
- import type { QuestionSet } from "../model/types.js";
2
- /** A real recorded Jev response and the question set it answered. */
3
- export declare const guardrailQuestions: () => QuestionSet;
4
- export declare const guardrailResponse: () => Record<string, unknown>;
5
- //# sourceMappingURL=index.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/testdata/index.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAA;AAIpD,qEAAqE;AACrE,eAAO,MAAM,kBAAkB,QAAO,WAAiD,CAAA;AACvF,eAAO,MAAM,iBAAiB,QAAO,MAAM,CAAC,MAAM,EAAE,OAAO,CAAyC,CAAA"}
@@ -1,6 +0,0 @@
1
- import { readFileSync } from "node:fs";
2
- const read = (name) => JSON.parse(readFileSync(new URL(name, import.meta.url), "utf8"));
3
- /** A real recorded Jev response and the question set it answered. */
4
- export const guardrailQuestions = () => read("./guardrail.questions.json");
5
- export const guardrailResponse = () => read("./guardrail-ls.response.json");
6
- //# sourceMappingURL=index.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/testdata/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAA;AAGtC,MAAM,IAAI,GAAG,CAAC,IAAY,EAAE,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,GAAG,CAAC,IAAI,EAAE,OAAO,IAAI,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC,CAAC,CAAA;AAE/F,qEAAqE;AACrE,MAAM,CAAC,MAAM,kBAAkB,GAAG,GAAgB,EAAE,CAAC,IAAI,CAAC,4BAA4B,CAAC,CAAA;AACvF,MAAM,CAAC,MAAM,iBAAiB,GAAG,GAA4B,EAAE,CAAC,IAAI,CAAC,8BAA8B,CAAC,CAAA"}