systemoneprompts 0.1.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/CHANGELOG.md +12 -0
- package/LICENSE +21 -0
- package/README.md +214 -0
- package/dist/answers.d.ts +21 -0
- package/dist/answers.d.ts.map +1 -0
- package/dist/answers.js +104 -0
- package/dist/answers.js.map +1 -0
- package/dist/cli/cache.d.ts +2 -0
- package/dist/cli/cache.d.ts.map +1 -0
- package/dist/cli/cache.js +26 -0
- package/dist/cli/cache.js.map +1 -0
- package/dist/cli/check.d.ts +2 -0
- package/dist/cli/check.d.ts.map +1 -0
- package/dist/cli/check.js +28 -0
- package/dist/cli/check.js.map +1 -0
- package/dist/cli/env.d.ts +2 -0
- package/dist/cli/env.d.ts.map +1 -0
- package/dist/cli/env.js +29 -0
- package/dist/cli/env.js.map +1 -0
- package/dist/cli/eval.d.ts +18 -0
- package/dist/cli/eval.d.ts.map +1 -0
- package/dist/cli/eval.js +314 -0
- package/dist/cli/eval.js.map +1 -0
- package/dist/cli/generate.d.ts +5 -0
- package/dist/cli/generate.d.ts.map +1 -0
- package/dist/cli/generate.js +93 -0
- package/dist/cli/generate.js.map +1 -0
- package/dist/cli/index.d.ts +3 -0
- package/dist/cli/index.d.ts.map +1 -0
- package/dist/cli/index.js +76 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/cli/io.d.ts +28 -0
- package/dist/cli/io.d.ts.map +1 -0
- package/dist/cli/io.js +88 -0
- package/dist/cli/io.js.map +1 -0
- package/dist/cli/run.d.ts +7 -0
- package/dist/cli/run.d.ts.map +1 -0
- package/dist/cli/run.js +63 -0
- package/dist/cli/run.js.map +1 -0
- package/dist/client.d.ts +65 -0
- package/dist/client.d.ts.map +1 -0
- package/dist/client.js +301 -0
- package/dist/client.js.map +1 -0
- package/dist/cloudflare.d.ts +29 -0
- package/dist/cloudflare.d.ts.map +1 -0
- package/dist/cloudflare.js +159 -0
- package/dist/cloudflare.js.map +1 -0
- package/dist/definition/check.d.ts +9 -0
- package/dist/definition/check.d.ts.map +1 -0
- package/dist/definition/check.js +26 -0
- package/dist/definition/check.js.map +1 -0
- package/dist/definition/diagnostics.d.ts +29 -0
- package/dist/definition/diagnostics.d.ts.map +1 -0
- package/dist/definition/diagnostics.js +74 -0
- package/dist/definition/diagnostics.js.map +1 -0
- package/dist/definition/locate.d.ts +23 -0
- package/dist/definition/locate.d.ts.map +1 -0
- package/dist/definition/locate.js +211 -0
- package/dist/definition/locate.js.map +1 -0
- package/dist/definition/parse.d.ts +15 -0
- package/dist/definition/parse.d.ts.map +1 -0
- package/dist/definition/parse.js +170 -0
- package/dist/definition/parse.js.map +1 -0
- package/dist/definition/schema.d.ts +39 -0
- package/dist/definition/schema.d.ts.map +1 -0
- package/dist/definition/schema.js +11 -0
- package/dist/definition/schema.js.map +1 -0
- package/dist/dev/cache.d.ts +58 -0
- package/dist/dev/cache.d.ts.map +1 -0
- package/dist/dev/cache.js +287 -0
- package/dist/dev/cache.js.map +1 -0
- package/dist/dev/index.d.ts +2 -0
- package/dist/dev/index.d.ts.map +1 -0
- package/dist/dev/index.js +3 -0
- package/dist/dev/index.js.map +1 -0
- package/dist/factors/evaluate.d.ts +21 -0
- package/dist/factors/evaluate.d.ts.map +1 -0
- package/dist/factors/evaluate.js +199 -0
- package/dist/factors/evaluate.js.map +1 -0
- package/dist/factors/graph.d.ts +7 -0
- package/dist/factors/graph.d.ts.map +1 -0
- package/dist/factors/graph.js +39 -0
- package/dist/factors/graph.js.map +1 -0
- package/dist/factors/schema.d.ts +54 -0
- package/dist/factors/schema.d.ts.map +1 -0
- package/dist/factors/schema.js +235 -0
- package/dist/factors/schema.js.map +1 -0
- package/dist/generate/generate.d.ts +16 -0
- package/dist/generate/generate.d.ts.map +1 -0
- package/dist/generate/generate.js +100 -0
- package/dist/generate/generate.js.map +1 -0
- package/dist/generate/types.d.ts +10 -0
- package/dist/generate/types.d.ts.map +1 -0
- package/dist/generate/types.js +126 -0
- package/dist/generate/types.js.map +1 -0
- package/dist/index.d.ts +15 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +13 -0
- package/dist/index.js.map +1 -0
- package/dist/json.d.ts +6 -0
- package/dist/json.d.ts.map +1 -0
- package/dist/json.js +52 -0
- package/dist/json.js.map +1 -0
- package/dist/model.d.ts +9 -0
- package/dist/model.d.ts.map +1 -0
- package/dist/model.js +22 -0
- package/dist/model.js.map +1 -0
- package/dist/native.d.ts +97 -0
- package/dist/native.d.ts.map +1 -0
- package/dist/native.js +2 -0
- package/dist/native.js.map +1 -0
- package/dist/patterns/index.d.ts +3 -0
- package/dist/patterns/index.d.ts.map +1 -0
- package/dist/patterns/index.js +3 -0
- package/dist/patterns/index.js.map +1 -0
- package/dist/patterns/options.d.ts +2 -0
- package/dist/patterns/options.d.ts.map +1 -0
- package/dist/patterns/options.js +7 -0
- package/dist/patterns/options.js.map +1 -0
- package/dist/patterns/run-many.d.ts +41 -0
- package/dist/patterns/run-many.d.ts.map +1 -0
- package/dist/patterns/run-many.js +51 -0
- package/dist/patterns/run-many.js.map +1 -0
- package/dist/patterns/walk-taxonomy.d.ts +37 -0
- package/dist/patterns/walk-taxonomy.d.ts.map +1 -0
- package/dist/patterns/walk-taxonomy.js +81 -0
- package/dist/patterns/walk-taxonomy.js.map +1 -0
- package/dist/questions/references.d.ts +12 -0
- package/dist/questions/references.d.ts.map +1 -0
- package/dist/questions/references.js +76 -0
- package/dist/questions/references.js.map +1 -0
- package/dist/questions/schema.d.ts +18 -0
- package/dist/questions/schema.d.ts.map +1 -0
- package/dist/questions/schema.js +169 -0
- package/dist/questions/schema.js.map +1 -0
- package/dist/state/paths.d.ts +13 -0
- package/dist/state/paths.d.ts.map +1 -0
- package/dist/state/paths.js +70 -0
- package/dist/state/paths.js.map +1 -0
- package/dist/state/requirements.d.ts +25 -0
- package/dist/state/requirements.d.ts.map +1 -0
- package/dist/state/requirements.js +189 -0
- package/dist/state/requirements.js.map +1 -0
- package/docs/SPEC.html +57 -0
- package/docs/skills/systemoneprompts/SKILL.md +239 -0
- package/docs/skills/systemoneprompts/references/application-data.md +79 -0
- package/package.json +94 -0
package/CHANGELOG.md
ADDED
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
# Changelog
|
|
2
|
+
|
|
3
|
+
## Unreleased
|
|
4
|
+
|
|
5
|
+
## 0.1.0
|
|
6
|
+
|
|
7
|
+
- First TypeScript release for TOML decision definitions.
|
|
8
|
+
- Validation, factors, clients, CLI tools, caching, and conformance checks.
|
|
9
|
+
- Documented OpenRouter via `baseURL` / `TYPESAFE_BASE_URL`. Put the OpenRouter
|
|
10
|
+
key in `TYPESAFE_API_KEY`.
|
|
11
|
+
- Cloudflare Workers AI via `cloudflareAccountId` / `CLOUDFLARE_ACCOUNT_ID`
|
|
12
|
+
and `CLOUDFLARE_API_TOKEN`. Exclusive with `TYPESAFE_BASE_URL`.
|
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 svilupp
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
package/README.md
ADDED
|
@@ -0,0 +1,214 @@
|
|
|
1
|
+
# systemoneprompts
|
|
2
|
+
|
|
3
|
+
Define TypeSafe questions, required state, and Boolean factors in TOML.
|
|
4
|
+
Generate typed TypeScript modules and call the System One API.
|
|
5
|
+
|
|
6
|
+
## Quick start
|
|
7
|
+
|
|
8
|
+
Requires Node 20+ or Bun. Set `TYPESAFE_API_KEY` for native TypeSafe API calls.
|
|
9
|
+
OpenRouter and Cloudflare credentials are described under [Providers](#providers).
|
|
10
|
+
|
|
11
|
+
```sh
|
|
12
|
+
npm install systemoneprompts
|
|
13
|
+
# or: bun add systemoneprompts
|
|
14
|
+
```
|
|
15
|
+
|
|
16
|
+
Save as `triage.toml`:
|
|
17
|
+
|
|
18
|
+
```toml
|
|
19
|
+
[requires]
|
|
20
|
+
"ticket.message" = "string"
|
|
21
|
+
|
|
22
|
+
[questions.topic]
|
|
23
|
+
type = "choice"
|
|
24
|
+
instructions = "Which team should handle `ticket.message`?"
|
|
25
|
+
|
|
26
|
+
[questions.topic.criteria]
|
|
27
|
+
billing = "Charges, invoices, refunds"
|
|
28
|
+
orders = "Shipments and deliveries"
|
|
29
|
+
|
|
30
|
+
[factors]
|
|
31
|
+
billing = { ref = "topic", choice = "billing" }
|
|
32
|
+
```
|
|
33
|
+
|
|
34
|
+
```sh
|
|
35
|
+
npx systemoneprompts generate triage.toml
|
|
36
|
+
# or: bunx systemoneprompts generate triage.toml
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
Use the generated module in your TypeScript app:
|
|
40
|
+
|
|
41
|
+
```ts
|
|
42
|
+
import { TypeSafeClient } from "systemoneprompts";
|
|
43
|
+
import { questions, model, assertState, evaluateFactors } from "./triage.generated.js";
|
|
44
|
+
|
|
45
|
+
const state = { ticket: { message: "I was charged twice." } };
|
|
46
|
+
assertState(state);
|
|
47
|
+
const response = await new TypeSafeClient().systemOne({ state, questions, model });
|
|
48
|
+
console.log(evaluateFactors(response.answers).billing);
|
|
49
|
+
```
|
|
50
|
+
|
|
51
|
+
`assertState` validates and narrows the original state. Generated types cover
|
|
52
|
+
state, answers, and factors.
|
|
53
|
+
|
|
54
|
+
## Definitions
|
|
55
|
+
|
|
56
|
+
| Field | Purpose |
|
|
57
|
+
| --- | --- |
|
|
58
|
+
| `title`, `version`, `description` | Optional metadata |
|
|
59
|
+
| `model` | Optional model for API calls |
|
|
60
|
+
| `[requires]` | Required state paths and types |
|
|
61
|
+
| `[questions]` | TypeSafe `noul`, `choice`, or `score` questions |
|
|
62
|
+
| `[factors]` | Boolean results computed from answers |
|
|
63
|
+
| `[data]` | Optional application data, exported as `data` |
|
|
64
|
+
|
|
65
|
+
Requirements accept `string`, `number`, `boolean`, `array`, `object`, `null`,
|
|
66
|
+
and `exists`. Paths support dots, indexes, and wildcards:
|
|
67
|
+
`ticket.message`, `tickets[0].message`, `tickets[].message`.
|
|
68
|
+
An empty array satisfies a wildcard requirement.
|
|
69
|
+
|
|
70
|
+
Questions use TypeSafe's `type`, `instructions`, and `criteria` fields.
|
|
71
|
+
Instructions and criteria entries can be strings, tables, or arrays.
|
|
72
|
+
At least one question is required.
|
|
73
|
+
|
|
74
|
+
Factors use `all`, `any`, `not`, `at_least`, or a `ref` predicate.
|
|
75
|
+
Bare Noul references use a threshold of `0.5`; Choice and Score answers need
|
|
76
|
+
a predicate. Missing answers raise errors, except in a `known`-only predicate.
|
|
77
|
+
|
|
78
|
+
`[data]` holds JSON-compatible application data. Your code defines its schema
|
|
79
|
+
and use; the package preserves it without sending it to the provider.
|
|
80
|
+
|
|
81
|
+
See the [specification](docs/SPEC.html) for the full rules,
|
|
82
|
+
[examples](examples/) for patterns, and the
|
|
83
|
+
[agent guide](docs/skills/systemoneprompts/SKILL.md) for authoring definitions.
|
|
84
|
+
|
|
85
|
+
## API
|
|
86
|
+
|
|
87
|
+
Import core functions from `systemoneprompts`:
|
|
88
|
+
|
|
89
|
+
| Function | Purpose |
|
|
90
|
+
| --- | --- |
|
|
91
|
+
| `parseDefinition(toml)` / `loadDefinition(path)` | Read a definition |
|
|
92
|
+
| `checkDefinition(def)` | Collect validation errors and warnings |
|
|
93
|
+
| `createStateAssert(def.requires)` | Validate state |
|
|
94
|
+
| `createFactorEvaluator(def.factorDefinitions)` | Compute Boolean factors from answers |
|
|
95
|
+
| `generate(toml, { filename })` | Generate TypeScript source |
|
|
96
|
+
| `TypeSafeClient` | Call System One; accepts `apiKey`, `baseURL`, `cloudflareAccountId`, `fetch`, and `timeout` |
|
|
97
|
+
|
|
98
|
+
Invalid TOML throws `SystemOnePromptsError`. Definition errors are returned as
|
|
99
|
+
diagnostics; generation rejects definitions with errors.
|
|
100
|
+
|
|
101
|
+
`systemoneprompts/dev` exports `createCachingFetch` for per-question caching.
|
|
102
|
+
`systemoneprompts/patterns` exports `runMany` for batches and `walkTaxonomy`
|
|
103
|
+
for Choice tree searches.
|
|
104
|
+
|
|
105
|
+
## Providers
|
|
106
|
+
|
|
107
|
+
The client builds System One JSON `{ state, questions, model }` (this is what
|
|
108
|
+
the cache hashes). Where that JSON goes depends on how you construct
|
|
109
|
+
`TypeSafeClient`. In Cloudflare mode the body is rewritten before the network.
|
|
110
|
+
Cloudflare mode and `baseURL` / `TYPESAFE_BASE_URL` cannot be combined.
|
|
111
|
+
|
|
112
|
+
### Native TypeSafe
|
|
113
|
+
|
|
114
|
+
Default. `TYPESAFE_API_KEY` authenticates against `https://api.typesafe.ai`.
|
|
115
|
+
Send TypeSafe model ids such as `jev-1.13.0` or `jev-latest`.
|
|
116
|
+
|
|
117
|
+
```ts
|
|
118
|
+
const client = new TypeSafeClient(); // TYPESAFE_API_KEY
|
|
119
|
+
```
|
|
120
|
+
|
|
121
|
+
### OpenRouter
|
|
122
|
+
|
|
123
|
+
Point `baseURL` at OpenRouter's System One API and pass an OpenRouter key as
|
|
124
|
+
`apiKey`. The client does not read `OPENROUTER_API_KEY`. OpenRouter accepts
|
|
125
|
+
`jev-1.13` or `typesafe/jev-1.13`. Extra response fields such as `id`,
|
|
126
|
+
`provider`, and `usage.cost` are left in place; Python validation strips them.
|
|
127
|
+
|
|
128
|
+
```ts
|
|
129
|
+
const client = new TypeSafeClient({
|
|
130
|
+
apiKey: process.env.TYPESAFE_API_KEY, // OpenRouter key
|
|
131
|
+
baseURL: "https://openrouter.ai/api",
|
|
132
|
+
});
|
|
133
|
+
await client.systemOne({ state, questions, model: "typesafe/jev-1.13" });
|
|
134
|
+
```
|
|
135
|
+
|
|
136
|
+
CLI: `TYPESAFE_BASE_URL=https://openrouter.ai/api` and put the OpenRouter key
|
|
137
|
+
in `TYPESAFE_API_KEY`.
|
|
138
|
+
|
|
139
|
+
### Cloudflare
|
|
140
|
+
|
|
141
|
+
Set `cloudflareAccountId` (or `CLOUDFLARE_ACCOUNT_ID`). The client then treats
|
|
142
|
+
`apiKey` as a Cloudflare token (`CLOUDFLARE_API_TOKEN` when `apiKey` is
|
|
143
|
+
omitted), posts to
|
|
144
|
+
`https://api.cloudflare.com/client/v4/accounts/{id}/ai/run` as
|
|
145
|
+
`{ model: "typesafe/jev", input: { state, questions } }`, and unwraps the
|
|
146
|
+
Workers AI envelope to `{ model, answers, usage }`. TOML `model` and CLI
|
|
147
|
+
`--model` are not sent as the Cloudflare catalog id.
|
|
148
|
+
|
|
149
|
+
```ts
|
|
150
|
+
const client = new TypeSafeClient({
|
|
151
|
+
apiKey: process.env.CLOUDFLARE_API_TOKEN,
|
|
152
|
+
cloudflareAccountId: process.env.CLOUDFLARE_ACCOUNT_ID,
|
|
153
|
+
});
|
|
154
|
+
```
|
|
155
|
+
|
|
156
|
+
CLI: set `CLOUDFLARE_ACCOUNT_ID` and `CLOUDFLARE_API_TOKEN`. Do not also set
|
|
157
|
+
`TYPESAFE_BASE_URL`. The token needs Account → Workers AI → Read. For
|
|
158
|
+
`--cache`, the CLI wraps Cloudflare inside `createCachingFetch` so cache keys
|
|
159
|
+
stay System One JSON. If you pass your own cache as `fetch`, wrap Cloudflare
|
|
160
|
+
inside it first; otherwise the client rejects the combination.
|
|
161
|
+
|
|
162
|
+
| Host | Model to send |
|
|
163
|
+
| --- | --- |
|
|
164
|
+
| `api.typesafe.ai` | `jev-1.13.0` / `jev-latest` |
|
|
165
|
+
| OpenRouter | `jev-1.13` or `typesafe/jev-1.13` |
|
|
166
|
+
| Cloudflare | catalog `typesafe/jev` (set by the client) |
|
|
167
|
+
|
|
168
|
+
## CLI
|
|
169
|
+
|
|
170
|
+
```sh
|
|
171
|
+
npx systemoneprompts check triage.toml --strict
|
|
172
|
+
npx systemoneprompts generate triage.toml --check
|
|
173
|
+
npx systemoneprompts run triage.toml --state state.json --cache --json
|
|
174
|
+
npx systemoneprompts eval triage.toml --cases cases.jsonl --report report.json
|
|
175
|
+
npx systemoneprompts cache stats
|
|
176
|
+
# bunx systemoneprompts works the same way
|
|
177
|
+
```
|
|
178
|
+
|
|
179
|
+
`generate --check` fails if generated files are stale. `run` accepts state from
|
|
180
|
+
stdin when `--state` is omitted. `--cache` reuses per-question answers from
|
|
181
|
+
`.systemoneprompts/cache`.
|
|
182
|
+
|
|
183
|
+
Each eval case has `state` and optional `id`, `labels`, and `factors`.
|
|
184
|
+
Labels are Choice strings, Noul Booleans, or integer Score levels.
|
|
185
|
+
`--sweep <factor>` compares thresholds.
|
|
186
|
+
|
|
187
|
+
CLI model precedence: `--model`, TOML `model`, `TYPESAFE_MODEL`,
|
|
188
|
+
`TYPESAFE_DEFAULT_MODEL`, then `jev-latest`. In Cloudflare mode `--model` does
|
|
189
|
+
not change the catalog id `typesafe/jev`; the reported `response.model` is
|
|
190
|
+
whatever Cloudflare returned.
|
|
191
|
+
|
|
192
|
+
## Development
|
|
193
|
+
|
|
194
|
+
Run from this package directory:
|
|
195
|
+
|
|
196
|
+
```sh
|
|
197
|
+
bun install --frozen-lockfile
|
|
198
|
+
sh scripts/run-quiet.sh "Checks" -- bun run check
|
|
199
|
+
sh scripts/run-quiet.sh "Release checks" -- bun run release:check
|
|
200
|
+
```
|
|
201
|
+
|
|
202
|
+
Checks cover types, lint, tests, examples, and public exports. Release checks
|
|
203
|
+
also pack the npm archive and smoke it from npm and bun consumers under Node
|
|
204
|
+
and Bun. Use `scripts/run-quiet.sh` for focused tests too; it retains full
|
|
205
|
+
logs and prints failures.
|
|
206
|
+
|
|
207
|
+
After editing example definitions, run `bun run examples:generate`.
|
|
208
|
+
Live tests require `TYPESAFE_API_KEY`:
|
|
209
|
+
|
|
210
|
+
```sh
|
|
211
|
+
sh scripts/run-quiet.sh "Live tests" -- bun run test:live
|
|
212
|
+
```
|
|
213
|
+
|
|
214
|
+
After release checks pass, `bun run release:publish` builds and publishes to npm.
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
export declare function isAnswerForQuestion(question: unknown, answer: unknown): boolean;
|
|
2
|
+
export declare function isAnswerShape(answer: unknown): answer is Record<string, unknown>;
|
|
3
|
+
export declare function noulValue(answer: unknown): number | undefined;
|
|
4
|
+
export declare function choiceLabel(answer: unknown): string | undefined;
|
|
5
|
+
export declare function scoreValue(answer: unknown): number | undefined;
|
|
6
|
+
export declare function wireQuestions(questions: Record<string, {
|
|
7
|
+
type: string;
|
|
8
|
+
instructions?: unknown;
|
|
9
|
+
criteria?: unknown;
|
|
10
|
+
[k: string]: unknown;
|
|
11
|
+
}>): Record<string, {
|
|
12
|
+
type: string;
|
|
13
|
+
instructions?: unknown;
|
|
14
|
+
criteria?: unknown;
|
|
15
|
+
}>;
|
|
16
|
+
export declare function partitionAnswers(questions: Record<string, unknown>, answers: unknown): {
|
|
17
|
+
valid: Record<string, unknown>;
|
|
18
|
+
missing: string[];
|
|
19
|
+
malformed: string[];
|
|
20
|
+
};
|
|
21
|
+
//# sourceMappingURL=answers.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"answers.d.ts","sourceRoot":"","sources":["../src/answers.ts"],"names":[],"mappings":"AAEA,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,GAAG,OAAO,CA8B/E;AAED,wBAAgB,aAAa,CAAC,MAAM,EAAE,OAAO,GAAG,MAAM,IAAI,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAqBhF;AAED,wBAAgB,SAAS,CAAC,MAAM,EAAE,OAAO,GAAG,MAAM,GAAG,SAAS,CAI7D;AAED,wBAAgB,WAAW,CAAC,MAAM,EAAE,OAAO,GAAG,MAAM,GAAG,SAAS,CAG/D;AAED,wBAAgB,UAAU,CAAC,MAAM,EAAE,OAAO,GAAG,MAAM,GAAG,SAAS,CAI9D;AAED,wBAAgB,aAAa,CAC3B,SAAS,EAAE,MAAM,CACf,MAAM,EACN;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,YAAY,CAAC,EAAE,OAAO,CAAC;IAAC,QAAQ,CAAC,EAAE,OAAO,CAAC;IAAC,CAAC,CAAC,EAAE,MAAM,GAAG,OAAO,CAAA;CAAE,CACnF,GACA,MAAM,CAAC,MAAM,EAAE;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,YAAY,CAAC,EAAE,OAAO,CAAC;IAAC,QAAQ,CAAC,EAAE,OAAO,CAAA;CAAE,CAAC,CAc9E;AAED,wBAAgB,gBAAgB,CAC9B,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAClC,OAAO,EAAE,OAAO,GACf;IAAE,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAAC,OAAO,EAAE,MAAM,EAAE,CAAC;IAAC,SAAS,EAAE,MAAM,EAAE,CAAA;CAAE,CAe5E"}
|
package/dist/answers.js
ADDED
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
import { isJsonValue, isPlainObject } from "./json.js";
|
|
2
|
+
export function isAnswerForQuestion(question, answer) {
|
|
3
|
+
if (!isPlainObject(question) || !isAnswerShape(answer))
|
|
4
|
+
return false;
|
|
5
|
+
if (question.type !== answer.type)
|
|
6
|
+
return false;
|
|
7
|
+
if (question.type === "choice") {
|
|
8
|
+
if (!isPlainObject(question.criteria) || typeof answer.choice !== "string")
|
|
9
|
+
return false;
|
|
10
|
+
if (!Object.hasOwn(question.criteria, answer.choice))
|
|
11
|
+
return false;
|
|
12
|
+
const probabilities = answer.probabilities;
|
|
13
|
+
if (!isPlainObject(probabilities))
|
|
14
|
+
return false;
|
|
15
|
+
return Object.keys(question.criteria).every((label) => Object.hasOwn(probabilities, label) && isFiniteNumber(probabilities[label]));
|
|
16
|
+
}
|
|
17
|
+
if (question.type === "score") {
|
|
18
|
+
if (!Array.isArray(question.criteria))
|
|
19
|
+
return false;
|
|
20
|
+
const legend = answer.legend;
|
|
21
|
+
const probabilities = answer.probabilities;
|
|
22
|
+
if (!isPlainObject(legend) || !isPlainObject(probabilities))
|
|
23
|
+
return false;
|
|
24
|
+
return question.criteria.every((_, index) => {
|
|
25
|
+
const score = String(index);
|
|
26
|
+
return (Object.hasOwn(legend, score) &&
|
|
27
|
+
Object.hasOwn(probabilities, score) &&
|
|
28
|
+
isFiniteNumber(probabilities[score]));
|
|
29
|
+
});
|
|
30
|
+
}
|
|
31
|
+
return true;
|
|
32
|
+
}
|
|
33
|
+
export function isAnswerShape(answer) {
|
|
34
|
+
if (!isPlainObject(answer) || !isJsonValue(answer))
|
|
35
|
+
return false;
|
|
36
|
+
switch (answer.type) {
|
|
37
|
+
case "noul":
|
|
38
|
+
return isFiniteNumber(answer.noul);
|
|
39
|
+
case "choice":
|
|
40
|
+
return (typeof answer.choice === "string" &&
|
|
41
|
+
isFiniteNumber(answer.confidence) &&
|
|
42
|
+
isPlainObject(answer.probabilities));
|
|
43
|
+
case "score":
|
|
44
|
+
return (isFiniteNumber(answer.score) &&
|
|
45
|
+
isFiniteNumber(answer.confidence) &&
|
|
46
|
+
isPlainObject(answer.legend) &&
|
|
47
|
+
isPlainObject(answer.probabilities));
|
|
48
|
+
default:
|
|
49
|
+
return false;
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
export function noulValue(answer) {
|
|
53
|
+
if (!isAnswerShape(answer) || answer.type !== "noul")
|
|
54
|
+
return undefined;
|
|
55
|
+
const value = answer.noul;
|
|
56
|
+
return isFiniteNumber(value) ? value : undefined;
|
|
57
|
+
}
|
|
58
|
+
export function choiceLabel(answer) {
|
|
59
|
+
if (!isAnswerShape(answer) || answer.type !== "choice")
|
|
60
|
+
return undefined;
|
|
61
|
+
return typeof answer.choice === "string" ? answer.choice : undefined;
|
|
62
|
+
}
|
|
63
|
+
export function scoreValue(answer) {
|
|
64
|
+
if (!isAnswerShape(answer) || answer.type !== "score")
|
|
65
|
+
return undefined;
|
|
66
|
+
const value = answer.score;
|
|
67
|
+
return isFiniteNumber(value) ? value : undefined;
|
|
68
|
+
}
|
|
69
|
+
export function wireQuestions(questions) {
|
|
70
|
+
const wired = Object.create(null);
|
|
71
|
+
for (const [id, question] of Object.entries(questions)) {
|
|
72
|
+
const entry = {
|
|
73
|
+
type: question.type,
|
|
74
|
+
};
|
|
75
|
+
if (question.instructions !== undefined)
|
|
76
|
+
entry.instructions = question.instructions;
|
|
77
|
+
if (question.criteria !== undefined)
|
|
78
|
+
entry.criteria = question.criteria;
|
|
79
|
+
wired[id] = entry;
|
|
80
|
+
}
|
|
81
|
+
return wired;
|
|
82
|
+
}
|
|
83
|
+
export function partitionAnswers(questions, answers) {
|
|
84
|
+
const valid = Object.create(null);
|
|
85
|
+
const missing = [];
|
|
86
|
+
const malformed = [];
|
|
87
|
+
const answersObject = isPlainObject(answers) ? answers : undefined;
|
|
88
|
+
for (const [id, question] of Object.entries(questions)) {
|
|
89
|
+
if (answersObject === undefined || !Object.hasOwn(answersObject, id)) {
|
|
90
|
+
missing.push(id);
|
|
91
|
+
}
|
|
92
|
+
else if (!isAnswerForQuestion(question, answersObject[id])) {
|
|
93
|
+
malformed.push(id);
|
|
94
|
+
}
|
|
95
|
+
else {
|
|
96
|
+
valid[id] = answersObject[id];
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
return { valid, missing, malformed };
|
|
100
|
+
}
|
|
101
|
+
function isFiniteNumber(value) {
|
|
102
|
+
return typeof value === "number" && Number.isFinite(value);
|
|
103
|
+
}
|
|
104
|
+
//# sourceMappingURL=answers.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"answers.js","sourceRoot":"","sources":["../src/answers.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC;AAEvD,MAAM,UAAU,mBAAmB,CAAC,QAAiB,EAAE,MAAe;IACpE,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC;QAAE,OAAO,KAAK,CAAC;IACrE,IAAI,QAAQ,CAAC,IAAI,KAAK,MAAM,CAAC,IAAI;QAAE,OAAO,KAAK,CAAC;IAEhD,IAAI,QAAQ,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;QAC/B,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,OAAO,MAAM,CAAC,MAAM,KAAK,QAAQ;YAAE,OAAO,KAAK,CAAC;QACzF,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC,MAAM,CAAC;YAAE,OAAO,KAAK,CAAC;QACnE,MAAM,aAAa,GAAG,MAAM,CAAC,aAAa,CAAC;QAC3C,IAAI,CAAC,aAAa,CAAC,aAAa,CAAC;YAAE,OAAO,KAAK,CAAC;QAChD,OAAO,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,KAAK,CACzC,CAAC,KAAK,EAAE,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,aAAa,EAAE,KAAK,CAAC,IAAI,cAAc,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC,CACvF,CAAC;IACJ,CAAC;IAED,IAAI,QAAQ,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;QAC9B,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC;YAAE,OAAO,KAAK,CAAC;QACpD,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC;QAC7B,MAAM,aAAa,GAAG,MAAM,CAAC,aAAa,CAAC;QAC3C,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC,aAAa,CAAC;YAAE,OAAO,KAAK,CAAC;QAC1E,OAAO,QAAQ,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,EAAE;YAC1C,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;YAC5B,OAAO,CACL,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC;gBAC5B,MAAM,CAAC,MAAM,CAAC,aAAa,EAAE,KAAK,CAAC;gBACnC,cAAc,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC,CACrC,CAAC;QACJ,CAAC,CAAC,CAAC;IACL,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,MAAe;IAC3C,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC;QAAE,OAAO,KAAK,CAAC;IACjE,QAAQ,MAAM,CAAC,IAAI,EAAE,CAAC;QACpB,KAAK,MAAM;YACT,OAAO,cAAc,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QACrC,KAAK,QAAQ;YACX,OAAO,CACL,OAAO,MAAM,CAAC,MAAM,KAAK,QAAQ;gBACjC,cAAc,CAAC,MAAM,CAAC,UAAU,CAAC;gBACjC,aAAa,CAAC,MAAM,CAAC,aAAa,CAAC,CACpC,CAAC;QACJ,KAAK,OAAO;YACV,OAAO,CACL,cAAc,CAAC,MAAM,CAAC,KAAK,CAAC;gBAC5B,cAAc,CAAC,MAAM,CAAC,UAAU,CAAC;gBACjC,aAAa,CAAC,MAAM,CAAC,MAAM,CAAC;gBAC5B,aAAa,CAAC,MAAM,CAAC,aAAa,CAAC,CACpC,CAAC;QACJ;YACE,OAAO,KAAK,CAAC;IACjB,CAAC;AACH,CAAC;AAED,MAAM,UAAU,SAAS,CAAC,MAAe;IACvC,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,MAAM,CAAC,IAAI,KAAK,MAAM;QAAE,OAAO,SAAS,CAAC;IACvE,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC;IAC1B,OAAO,cAAc,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC;AACnD,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,MAAe;IACzC,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,MAAM,CAAC,IAAI,KAAK,QAAQ;QAAE,OAAO,SAAS,CAAC;IACzE,OAAO,OAAO,MAAM,CAAC,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC;AACvE,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,MAAe;IACxC,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,MAAM,CAAC,IAAI,KAAK,OAAO;QAAE,OAAO,SAAS,CAAC;IACxE,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC;IAC3B,OAAO,cAAc,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC;AACnD,CAAC;AAED,MAAM,UAAU,aAAa,CAC3B,SAGC;IAED,MAAM,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,CAG/B,CAAC;IACF,KAAK,MAAM,CAAC,EAAE,EAAE,QAAQ,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE,CAAC;QACvD,MAAM,KAAK,GAAiE;YAC1E,IAAI,EAAE,QAAQ,CAAC,IAAI;SACpB,CAAC;QACF,IAAI,QAAQ,CAAC,YAAY,KAAK,SAAS;YAAE,KAAK,CAAC,YAAY,GAAG,QAAQ,CAAC,YAAY,CAAC;QACpF,IAAI,QAAQ,CAAC,QAAQ,KAAK,SAAS;YAAE,KAAK,CAAC,QAAQ,GAAG,QAAQ,CAAC,QAAQ,CAAC;QACxE,KAAK,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC;IACpB,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,MAAM,UAAU,gBAAgB,CAC9B,SAAkC,EAClC,OAAgB;IAEhB,MAAM,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,CAA4B,CAAC;IAC7D,MAAM,OAAO,GAAa,EAAE,CAAC;IAC7B,MAAM,SAAS,GAAa,EAAE,CAAC;IAC/B,MAAM,aAAa,GAAG,aAAa,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC;IACnE,KAAK,MAAM,CAAC,EAAE,EAAE,QAAQ,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE,CAAC;QACvD,IAAI,aAAa,KAAK,SAAS,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,aAAa,EAAE,EAAE,CAAC,EAAE,CAAC;YACrE,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACnB,CAAC;aAAM,IAAI,CAAC,mBAAmB,CAAC,QAAQ,EAAE,aAAa,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC;YAC7D,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACrB,CAAC;aAAM,CAAC;YACN,KAAK,CAAC,EAAE,CAAC,GAAG,aAAa,CAAC,EAAE,CAAC,CAAC;QAChC,CAAC;IACH,CAAC;IACD,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,SAAS,EAAE,CAAC;AACvC,CAAC;AAED,SAAS,cAAc,CAAC,KAAc;IACpC,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;AAC7D,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cache.d.ts","sourceRoot":"","sources":["../../src/cli/cache.ts"],"names":[],"mappings":"AAGA,wBAAsB,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC,CAsBxE"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { cacheStats, clearCache, defaultCacheDir } from "../dev/cache.js";
|
|
2
|
+
import { fail } from "./io.js";
|
|
3
|
+
export async function runCache(action) {
|
|
4
|
+
const dir = defaultCacheDir();
|
|
5
|
+
if (action === "clear") {
|
|
6
|
+
await clearCache(dir);
|
|
7
|
+
console.log(`cleared ${dir}`);
|
|
8
|
+
return;
|
|
9
|
+
}
|
|
10
|
+
if (action === "stats" || action == null) {
|
|
11
|
+
const stats = await cacheStats(dir);
|
|
12
|
+
console.log(`dir ${dir}`);
|
|
13
|
+
console.log(`entries ${stats.entries}`);
|
|
14
|
+
for (const [model, count] of Object.entries(stats.models)) {
|
|
15
|
+
console.log(`model ${model} ${count}`);
|
|
16
|
+
}
|
|
17
|
+
for (const row of stats.drift) {
|
|
18
|
+
if (row.requested && row.requested !== row.reported) {
|
|
19
|
+
console.log(`drift ${row.requested} → ${row.reported} ${row.count}`);
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
return;
|
|
23
|
+
}
|
|
24
|
+
fail("systemoneprompts cache stats | clear");
|
|
25
|
+
}
|
|
26
|
+
//# sourceMappingURL=cache.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cache.js","sourceRoot":"","sources":["../../src/cli/cache.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAC1E,OAAO,EAAE,IAAI,EAAE,MAAM,SAAS,CAAC;AAE/B,MAAM,CAAC,KAAK,UAAU,QAAQ,CAAC,MAA0B;IACvD,MAAM,GAAG,GAAG,eAAe,EAAE,CAAC;IAC9B,IAAI,MAAM,KAAK,OAAO,EAAE,CAAC;QACvB,MAAM,UAAU,CAAC,GAAG,CAAC,CAAC;QACtB,OAAO,CAAC,GAAG,CAAC,WAAW,GAAG,EAAE,CAAC,CAAC;QAC9B,OAAO;IACT,CAAC;IACD,IAAI,MAAM,KAAK,OAAO,IAAI,MAAM,IAAI,IAAI,EAAE,CAAC;QACzC,MAAM,KAAK,GAAG,MAAM,UAAU,CAAC,GAAG,CAAC,CAAC;QACpC,OAAO,CAAC,GAAG,CAAC,YAAY,GAAG,EAAE,CAAC,CAAC;QAC/B,OAAO,CAAC,GAAG,CAAC,YAAY,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;QACzC,KAAK,MAAM,CAAC,KAAK,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC;YAC1D,OAAO,CAAC,GAAG,CAAC,YAAY,KAAK,KAAK,KAAK,EAAE,CAAC,CAAC;QAC7C,CAAC;QACD,KAAK,MAAM,GAAG,IAAI,KAAK,CAAC,KAAK,EAAE,CAAC;YAC9B,IAAI,GAAG,CAAC,SAAS,IAAI,GAAG,CAAC,SAAS,KAAK,GAAG,CAAC,QAAQ,EAAE,CAAC;gBACpD,OAAO,CAAC,GAAG,CAAC,YAAY,GAAG,CAAC,SAAS,MAAM,GAAG,CAAC,QAAQ,KAAK,GAAG,CAAC,KAAK,EAAE,CAAC,CAAC;YAC3E,CAAC;QACH,CAAC;QACD,OAAO;IACT,CAAC;IACD,IAAI,CAAC,sCAAsC,CAAC,CAAC;AAC/C,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"check.d.ts","sourceRoot":"","sources":["../../src/cli/check.ts"],"names":[],"mappings":"AAKA,wBAAsB,QAAQ,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE,MAAM,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAkB9E"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { checkDefinition } from "../definition/check.js";
|
|
2
|
+
import { SystemOnePromptsError } from "../definition/diagnostics.js";
|
|
3
|
+
import { parseDefinition } from "../definition/parse.js";
|
|
4
|
+
import { fail, printDiagnostics, readText } from "./io.js";
|
|
5
|
+
export async function runCheck(files, strict) {
|
|
6
|
+
if (files.length === 0)
|
|
7
|
+
fail("systemoneprompts check <files...> [--strict]");
|
|
8
|
+
let errors = 0;
|
|
9
|
+
for (const file of files) {
|
|
10
|
+
try {
|
|
11
|
+
const source = await readText(file);
|
|
12
|
+
const def = parseDefinition(source, { filename: file });
|
|
13
|
+
errors += printDiagnostics(checkDefinition(def), strict);
|
|
14
|
+
}
|
|
15
|
+
catch (error) {
|
|
16
|
+
if (error instanceof SystemOnePromptsError) {
|
|
17
|
+
errors += printDiagnostics(error.diagnostics, strict);
|
|
18
|
+
}
|
|
19
|
+
else {
|
|
20
|
+
errors += 1;
|
|
21
|
+
console.error(`error: ${file}: ${error instanceof Error ? error.message : String(error)}`);
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
if (errors > 0)
|
|
26
|
+
process.exit(1);
|
|
27
|
+
}
|
|
28
|
+
//# sourceMappingURL=check.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"check.js","sourceRoot":"","sources":["../../src/cli/check.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AACzD,OAAO,EAAE,qBAAqB,EAAE,MAAM,8BAA8B,CAAC;AACrE,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AACzD,OAAO,EAAE,IAAI,EAAE,gBAAgB,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAE3D,MAAM,CAAC,KAAK,UAAU,QAAQ,CAAC,KAAe,EAAE,MAAe;IAC7D,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;QAAE,IAAI,CAAC,8CAA8C,CAAC,CAAC;IAC7E,IAAI,MAAM,GAAG,CAAC,CAAC;IACf,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,IAAI,CAAC,CAAC;YACpC,MAAM,GAAG,GAAG,eAAe,CAAC,MAAM,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC;YACxD,MAAM,IAAI,gBAAgB,CAAC,eAAe,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC,CAAC;QAC3D,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,KAAK,YAAY,qBAAqB,EAAE,CAAC;gBAC3C,MAAM,IAAI,gBAAgB,CAAC,KAAK,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC;YACxD,CAAC;iBAAM,CAAC;gBACN,MAAM,IAAI,CAAC,CAAC;gBACZ,OAAO,CAAC,KAAK,CAAC,UAAU,IAAI,KAAK,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;YAC7F,CAAC;QACH,CAAC;IACH,CAAC;IACD,IAAI,MAAM,GAAG,CAAC;QAAE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"env.d.ts","sourceRoot":"","sources":["../../src/cli/env.ts"],"names":[],"mappings":"AAGA,wBAAgB,UAAU,CAAC,GAAG,SAAgB,GAAG,IAAI,CAuBpD"}
|
package/dist/cli/env.js
ADDED
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { readFileSync } from "node:fs";
|
|
2
|
+
import { resolve } from "node:path";
|
|
3
|
+
export function loadDotEnv(cwd = process.cwd()) {
|
|
4
|
+
const path = resolve(cwd, ".env");
|
|
5
|
+
let text;
|
|
6
|
+
try {
|
|
7
|
+
text = readFileSync(path, "utf8");
|
|
8
|
+
}
|
|
9
|
+
catch {
|
|
10
|
+
return;
|
|
11
|
+
}
|
|
12
|
+
for (const line of text.split(/\r?\n/)) {
|
|
13
|
+
const trimmed = line.trim();
|
|
14
|
+
if (!trimmed || trimmed.startsWith("#"))
|
|
15
|
+
continue;
|
|
16
|
+
const eq = trimmed.indexOf("=");
|
|
17
|
+
if (eq <= 0)
|
|
18
|
+
continue;
|
|
19
|
+
const key = trimmed.slice(0, eq).trim();
|
|
20
|
+
let value = trimmed.slice(eq + 1).trim();
|
|
21
|
+
if ((value.startsWith('"') && value.endsWith('"')) ||
|
|
22
|
+
(value.startsWith("'") && value.endsWith("'"))) {
|
|
23
|
+
value = value.slice(1, -1);
|
|
24
|
+
}
|
|
25
|
+
if (process.env[key] === undefined)
|
|
26
|
+
process.env[key] = value;
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
//# sourceMappingURL=env.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"env.js","sourceRoot":"","sources":["../../src/cli/env.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEpC,MAAM,UAAU,UAAU,CAAC,GAAG,GAAG,OAAO,CAAC,GAAG,EAAE;IAC5C,MAAM,IAAI,GAAG,OAAO,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;IAClC,IAAI,IAAY,CAAC;IACjB,IAAI,CAAC;QACH,IAAI,GAAG,YAAY,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;IACpC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO;IACT,CAAC;IACD,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC;QACvC,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;QAC5B,IAAI,CAAC,OAAO,IAAI,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC;YAAE,SAAS;QAClD,MAAM,EAAE,GAAG,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QAChC,IAAI,EAAE,IAAI,CAAC;YAAE,SAAS;QACtB,MAAM,GAAG,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;QACxC,IAAI,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;QACzC,IACE,CAAC,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;YAC9C,CAAC,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,EAC9C,CAAC;YACD,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;QAC7B,CAAC;QACD,IAAI,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,SAAS;YAAE,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;IAC/D,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* One line of `cases.jsonl`. `labels` are expected answers keyed by question id
|
|
3
|
+
* (Choice label, Noul Boolean, or Score level); `factors` are expected factor values.
|
|
4
|
+
*/
|
|
5
|
+
export interface EvalCase {
|
|
6
|
+
id?: string;
|
|
7
|
+
state: unknown;
|
|
8
|
+
labels?: Record<string, unknown>;
|
|
9
|
+
factors?: Record<string, boolean>;
|
|
10
|
+
}
|
|
11
|
+
export declare function runEval(file: string | undefined, options: {
|
|
12
|
+
cases?: string;
|
|
13
|
+
cache?: boolean;
|
|
14
|
+
sweep?: string;
|
|
15
|
+
report?: string;
|
|
16
|
+
model?: string;
|
|
17
|
+
}): Promise<void>;
|
|
18
|
+
//# sourceMappingURL=eval.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"eval.d.ts","sourceRoot":"","sources":["../../src/cli/eval.ts"],"names":[],"mappings":"AASA;;;GAGG;AACH,MAAM,WAAW,QAAQ;IACvB,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,OAAO,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACjC,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACnC;AAuBD,wBAAsB,OAAO,CAC3B,IAAI,EAAE,MAAM,GAAG,SAAS,EACxB,OAAO,EAAE;IAAE,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,OAAO,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,GAC5F,OAAO,CAAC,IAAI,CAAC,CAsHf"}
|