@inhuman.tools/policy 0.1.0 → 0.3.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/LICENSE.md +7 -0
- package/dist/check.d.ts +1 -2
- package/dist/check.d.ts.map +1 -1
- package/dist/check.js +0 -3
- package/dist/check.js.map +1 -1
- package/package.json +8 -8
- package/src/check.ts +0 -10
- package/dist/decide.d.ts +0 -64
- package/dist/decide.d.ts.map +0 -1
- package/dist/decide.js +0 -482
- package/dist/decide.js.map +0 -1
- package/dist/error-with-invariant.d.ts +0 -9
- package/dist/error-with-invariant.d.ts.map +0 -1
- package/dist/error-with-invariant.js +0 -12
- package/dist/error-with-invariant.js.map +0 -1
- package/dist/license-law.d.ts +0 -43
- package/dist/license-law.d.ts.map +0 -1
- package/dist/license-law.js +0 -129
- package/dist/license-law.js.map +0 -1
- package/dist/license.d.ts +0 -3
- package/dist/license.d.ts.map +0 -1
- package/dist/license.js +0 -2
- package/dist/license.js.map +0 -1
- package/dist/peel-cwd.d.ts +0 -8
- package/dist/peel-cwd.d.ts.map +0 -1
- package/dist/peel-cwd.js +0 -120
- package/dist/peel-cwd.js.map +0 -1
- package/dist/prep.d.ts +0 -58
- package/dist/prep.d.ts.map +0 -1
- package/dist/prep.js +0 -690
- package/dist/prep.js.map +0 -1
- package/dist/schemas/tirith.d.ts +0 -58
- package/dist/schemas/tirith.d.ts.map +0 -1
- package/dist/schemas/tirith.js +0 -23
- package/dist/schemas/tirith.js.map +0 -1
- package/dist/tirith-units.d.ts +0 -2
- package/dist/tirith-units.d.ts.map +0 -1
- package/dist/tirith-units.js +0 -227
- package/dist/tirith-units.js.map +0 -1
- package/dist/tirith.d.ts +0 -24
- package/dist/tirith.d.ts.map +0 -1
- package/dist/tirith.js +0 -311
- package/dist/tirith.js.map +0 -1
package/dist/decide.js
DELETED
|
@@ -1,482 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Votes. `complete` returns JSON `{ value }`. Scheme `#f` is an abstain.
|
|
3
|
-
* Sage and Jev build that same object. A thrown error falls back to `complete`;
|
|
4
|
-
* an abort does not. A failure is never an allow. Jev has no sort.
|
|
5
|
-
*/
|
|
6
|
-
import { EnvCapability } from "@inhuman.tools/arrival";
|
|
7
|
-
import { APIUserAbortError, TypeSafeClient, choice as choiceQuestion, noul, score as scoreQuestion, } from "@typesafe-ai/sdk";
|
|
8
|
-
import { SageSDK } from "sage-sdk";
|
|
9
|
-
import { z } from "zod";
|
|
10
|
-
import { ErrorWithInvariant } from "./error-with-invariant.js";
|
|
11
|
-
export class DecideError extends ErrorWithInvariant {
|
|
12
|
-
name = "DecideError";
|
|
13
|
-
}
|
|
14
|
-
const NOT_A_VOTE = "decide: structured answer is not a vote";
|
|
15
|
-
const described = { description: z.string().optional() };
|
|
16
|
-
const decideRequest = z.discriminatedUnion("kind", [
|
|
17
|
-
z.object({ kind: z.literal("yesno"), instructions: z.string() }),
|
|
18
|
-
z.object({
|
|
19
|
-
kind: z.literal("choose"),
|
|
20
|
-
instructions: z.string(),
|
|
21
|
-
options: z.array(z.object({ option: z.string(), ...described })).readonly(),
|
|
22
|
-
}),
|
|
23
|
-
z.object({
|
|
24
|
-
kind: z.literal("scale"),
|
|
25
|
-
instructions: z.string(),
|
|
26
|
-
levels: z.array(z.object({ level: z.number(), ...described })).readonly(),
|
|
27
|
-
}),
|
|
28
|
-
z.object({
|
|
29
|
-
kind: z.literal("gauge"),
|
|
30
|
-
instructions: z.string(),
|
|
31
|
-
start: z.number(),
|
|
32
|
-
end: z.number(),
|
|
33
|
-
step: z.number(),
|
|
34
|
-
}),
|
|
35
|
-
z.object({
|
|
36
|
-
kind: z.literal("tag"),
|
|
37
|
-
instructions: z.string(),
|
|
38
|
-
tags: z.array(z.object({ tag: z.string(), ...described })).readonly(),
|
|
39
|
-
}),
|
|
40
|
-
z.object({
|
|
41
|
-
kind: z.literal("sort"),
|
|
42
|
-
instructions: z.string(),
|
|
43
|
-
items: z.array(z.object({ id: z.string(), content: z.string() })).readonly(),
|
|
44
|
-
}),
|
|
45
|
-
]);
|
|
46
|
-
const decideConfiguration = {
|
|
47
|
-
backend: z.enum(["structured", "sage", "jev"]).default("structured"),
|
|
48
|
-
complete: z
|
|
49
|
-
.function({
|
|
50
|
-
input: [decideRequest],
|
|
51
|
-
output: z.promise(z.unknown()),
|
|
52
|
-
})
|
|
53
|
-
.optional(),
|
|
54
|
-
document: z.string().default(""),
|
|
55
|
-
sageApiKey: z.string().optional(),
|
|
56
|
-
jevApiKey: z.string().optional(),
|
|
57
|
-
sageAsk: z
|
|
58
|
-
.function({
|
|
59
|
-
input: [z.string(), decideRequest],
|
|
60
|
-
output: z.promise(z.unknown()),
|
|
61
|
-
})
|
|
62
|
-
.optional(),
|
|
63
|
-
jevAsk: z
|
|
64
|
-
.function({
|
|
65
|
-
input: [z.string(), decideRequest],
|
|
66
|
-
output: z.promise(z.unknown()),
|
|
67
|
-
})
|
|
68
|
-
.optional(),
|
|
69
|
-
};
|
|
70
|
-
function isRecord(value) {
|
|
71
|
-
return typeof value === "object" && value !== null && !Array.isArray(value);
|
|
72
|
-
}
|
|
73
|
-
function jsonValue(raw) {
|
|
74
|
-
let parsed = raw;
|
|
75
|
-
if (typeof raw === "string") {
|
|
76
|
-
try {
|
|
77
|
-
parsed = JSON.parse(raw);
|
|
78
|
-
}
|
|
79
|
-
catch {
|
|
80
|
-
throw new DecideError(NOT_A_VOTE);
|
|
81
|
-
}
|
|
82
|
-
}
|
|
83
|
-
if (!isRecord(parsed) || !Object.hasOwn(parsed, "value"))
|
|
84
|
-
throw new DecideError(NOT_A_VOTE);
|
|
85
|
-
return parsed.value;
|
|
86
|
-
}
|
|
87
|
-
function ask(complete, request) {
|
|
88
|
-
DecideError.invariant(complete !== undefined, "decide: no structured complete");
|
|
89
|
-
return complete(request);
|
|
90
|
-
}
|
|
91
|
-
function isAbort(error) {
|
|
92
|
-
return (error instanceof Error && error.name === "AbortError") || error instanceof APIUserAbortError;
|
|
93
|
-
}
|
|
94
|
-
function judgedDocument(document, instructions) {
|
|
95
|
-
return document === "" ? instructions : document;
|
|
96
|
-
}
|
|
97
|
-
function nonEmpty(description) {
|
|
98
|
-
return description === undefined || description === "" ? undefined : description;
|
|
99
|
-
}
|
|
100
|
-
function askKey(key) {
|
|
101
|
-
if (key === undefined || key === "")
|
|
102
|
-
throw new DecideError("decide: missing api key");
|
|
103
|
-
return key;
|
|
104
|
-
}
|
|
105
|
-
async function vote(configuration, request) {
|
|
106
|
-
switch (configuration.backend) {
|
|
107
|
-
case "structured":
|
|
108
|
-
return ask(configuration.complete, request);
|
|
109
|
-
case "sage":
|
|
110
|
-
case "jev":
|
|
111
|
-
try {
|
|
112
|
-
const raw = configuration.backend === "sage"
|
|
113
|
-
? await sageVote(configuration, request)
|
|
114
|
-
: await jevVote(configuration, request);
|
|
115
|
-
return { value: jsonValue(raw) };
|
|
116
|
-
}
|
|
117
|
-
catch (error) {
|
|
118
|
-
if (isAbort(error))
|
|
119
|
-
throw error;
|
|
120
|
-
return ask(configuration.complete, request);
|
|
121
|
-
}
|
|
122
|
-
default: {
|
|
123
|
-
const unreachable = configuration.backend;
|
|
124
|
-
return unreachable;
|
|
125
|
-
}
|
|
126
|
-
}
|
|
127
|
-
}
|
|
128
|
-
function chooseOptions(options) {
|
|
129
|
-
const record = {};
|
|
130
|
-
for (const { option, description } of options) {
|
|
131
|
-
const text = nonEmpty(description);
|
|
132
|
-
if (text === undefined) {
|
|
133
|
-
return options.map((row) => {
|
|
134
|
-
const rowText = nonEmpty(row.description);
|
|
135
|
-
return rowText === undefined ? { option: row.option } : { option: row.option, description: rowText };
|
|
136
|
-
});
|
|
137
|
-
}
|
|
138
|
-
record[option] = text;
|
|
139
|
-
}
|
|
140
|
-
return record;
|
|
141
|
-
}
|
|
142
|
-
function sortIds(ranked) {
|
|
143
|
-
if (!Array.isArray(ranked))
|
|
144
|
-
throw new DecideError(NOT_A_VOTE);
|
|
145
|
-
const ids = [];
|
|
146
|
-
for (const item of ranked) {
|
|
147
|
-
if (!isRecord(item) || typeof item.id !== "string")
|
|
148
|
-
throw new DecideError(NOT_A_VOTE);
|
|
149
|
-
ids.push(item.id);
|
|
150
|
-
}
|
|
151
|
-
return ids;
|
|
152
|
-
}
|
|
153
|
-
async function sageScale(sage, request) {
|
|
154
|
-
const levels = request.levels.map((row) => {
|
|
155
|
-
const text = nonEmpty(row.description);
|
|
156
|
-
return text === undefined ? { level: row.level } : { level: row.level, description: text };
|
|
157
|
-
});
|
|
158
|
-
// Older clients may lack scale. Gauge then spans the level numbers.
|
|
159
|
-
const widened = sage;
|
|
160
|
-
if (widened.scale !== undefined) {
|
|
161
|
-
const reading = await sage.scale(request.instructions, levels);
|
|
162
|
-
return { value: reading.value };
|
|
163
|
-
}
|
|
164
|
-
const numbers = request.levels.map((row) => row.level);
|
|
165
|
-
const start = numbers.at(0);
|
|
166
|
-
const end = numbers.at(-1);
|
|
167
|
-
DecideError.invariant(start !== undefined && end !== undefined, NOT_A_VOTE);
|
|
168
|
-
const second = numbers.at(1);
|
|
169
|
-
const step = second === undefined ? 1 : second - start;
|
|
170
|
-
const reading = await sage.gauge(request.instructions, start, end, step);
|
|
171
|
-
return { value: reading.value };
|
|
172
|
-
}
|
|
173
|
-
async function sageVote(configuration, request) {
|
|
174
|
-
const document = judgedDocument(configuration.document, request.instructions);
|
|
175
|
-
if (configuration.sageAsk !== undefined)
|
|
176
|
-
return configuration.sageAsk(document, request);
|
|
177
|
-
const sage = new SageSDK({ apiKey: askKey(configuration.sageApiKey) }).sage(document);
|
|
178
|
-
switch (request.kind) {
|
|
179
|
-
case "yesno": {
|
|
180
|
-
const reading = await sage.yesOrNo(request.instructions);
|
|
181
|
-
return { value: reading.value };
|
|
182
|
-
}
|
|
183
|
-
case "choose": {
|
|
184
|
-
const reading = await sage.choose(request.instructions, chooseOptions(request.options));
|
|
185
|
-
return { value: reading.value };
|
|
186
|
-
}
|
|
187
|
-
case "scale":
|
|
188
|
-
return sageScale(sage, request);
|
|
189
|
-
case "gauge": {
|
|
190
|
-
const reading = await sage.gauge(request.instructions, request.start, request.end, request.step);
|
|
191
|
-
return { value: reading.value };
|
|
192
|
-
}
|
|
193
|
-
case "tag": {
|
|
194
|
-
const reading = await sage.tag(request.instructions, request.tags.map((row) => {
|
|
195
|
-
const text = nonEmpty(row.description);
|
|
196
|
-
return text === undefined ? { tag: row.tag } : { tag: row.tag, description: text };
|
|
197
|
-
}));
|
|
198
|
-
return { value: reading.value };
|
|
199
|
-
}
|
|
200
|
-
case "sort": {
|
|
201
|
-
const reading = await sage.sort(request.instructions, request.items.map((item) => ({ id: item.id, content: item.content })));
|
|
202
|
-
return { value: sortIds(reading.value) };
|
|
203
|
-
}
|
|
204
|
-
default: {
|
|
205
|
-
const unreachable = request;
|
|
206
|
-
return unreachable;
|
|
207
|
-
}
|
|
208
|
-
}
|
|
209
|
-
}
|
|
210
|
-
function noulVote(answer) {
|
|
211
|
-
if (!isRecord(answer) || typeof answer.noul !== "number" || !Number.isFinite(answer.noul))
|
|
212
|
-
return null;
|
|
213
|
-
return answer.noul >= 0.5 ? "yes" : "no";
|
|
214
|
-
}
|
|
215
|
-
/** Jev `ScoreCriteria` indexes from zero. The expectation has to land on our level integers. */
|
|
216
|
-
function levelExpectation(answer, levels) {
|
|
217
|
-
if (!isRecord(answer) || typeof answer.score !== "number" || !Number.isFinite(answer.score)) {
|
|
218
|
-
throw new DecideError(NOT_A_VOTE);
|
|
219
|
-
}
|
|
220
|
-
if (isRecord(answer.probabilities)) {
|
|
221
|
-
const weighted = weightedLevels(answer.probabilities, levels);
|
|
222
|
-
if (weighted !== undefined)
|
|
223
|
-
return weighted;
|
|
224
|
-
}
|
|
225
|
-
return interpolated(answer.score, levels);
|
|
226
|
-
}
|
|
227
|
-
function probabilityAt(probabilities, index) {
|
|
228
|
-
const raw = probabilities[String(index)];
|
|
229
|
-
return typeof raw === "number" && Number.isFinite(raw) ? raw : undefined;
|
|
230
|
-
}
|
|
231
|
-
function weightedLevels(probabilities, levels) {
|
|
232
|
-
let sum = 0;
|
|
233
|
-
let mass = 0;
|
|
234
|
-
for (let index = 0; index < levels.length; index += 1) {
|
|
235
|
-
const level = levels.at(index);
|
|
236
|
-
const probability = probabilityAt(probabilities, index);
|
|
237
|
-
if (level === undefined || probability === undefined)
|
|
238
|
-
return undefined;
|
|
239
|
-
sum += probability * level;
|
|
240
|
-
mass += probability;
|
|
241
|
-
}
|
|
242
|
-
return mass === 0 ? undefined : sum;
|
|
243
|
-
}
|
|
244
|
-
function interpolated(score, levels) {
|
|
245
|
-
const first = levels.at(0);
|
|
246
|
-
DecideError.invariant(first !== undefined, NOT_A_VOTE);
|
|
247
|
-
if (levels.length === 1)
|
|
248
|
-
return first;
|
|
249
|
-
const clamped = Math.min(Math.max(score, 0), levels.length - 1);
|
|
250
|
-
const low = Math.floor(clamped);
|
|
251
|
-
const high = Math.min(low + 1, levels.length - 1);
|
|
252
|
-
const lowLevel = levels.at(low);
|
|
253
|
-
const highLevel = levels.at(high);
|
|
254
|
-
DecideError.invariant(lowLevel !== undefined && highLevel !== undefined, NOT_A_VOTE);
|
|
255
|
-
return lowLevel + (highLevel - lowLevel) * (clamped - low);
|
|
256
|
-
}
|
|
257
|
-
function scoreCriteria(levels) {
|
|
258
|
-
const entries = levels.map((row) => nonEmpty(row.description) ?? String(row.level));
|
|
259
|
-
const first = entries.at(0);
|
|
260
|
-
const second = entries.at(1);
|
|
261
|
-
DecideError.invariant(first !== undefined && second !== undefined, NOT_A_VOTE);
|
|
262
|
-
return [first, second, ...entries.slice(2)];
|
|
263
|
-
}
|
|
264
|
-
function jevClient(configuration) {
|
|
265
|
-
const client = new TypeSafeClient({ apiKey: askKey(configuration.jevApiKey) });
|
|
266
|
-
const method = client.systemOne;
|
|
267
|
-
if (typeof method !== "function")
|
|
268
|
-
throw new DecideError("decide: jev client has no systemOne");
|
|
269
|
-
return client;
|
|
270
|
-
}
|
|
271
|
-
async function jevVote(configuration, request) {
|
|
272
|
-
const document = judgedDocument(configuration.document, request.instructions);
|
|
273
|
-
if (configuration.jevAsk !== undefined)
|
|
274
|
-
return configuration.jevAsk(document, request);
|
|
275
|
-
if (request.kind === "sort")
|
|
276
|
-
throw new DecideError("decide: jev has no sort");
|
|
277
|
-
const client = jevClient(configuration);
|
|
278
|
-
switch (request.kind) {
|
|
279
|
-
case "yesno": {
|
|
280
|
-
const { answers } = await client.systemOne({
|
|
281
|
-
state: document,
|
|
282
|
-
questions: { vote: noul(request.instructions) },
|
|
283
|
-
});
|
|
284
|
-
return { value: noulVote(answers.vote) };
|
|
285
|
-
}
|
|
286
|
-
case "choose": {
|
|
287
|
-
const criteria = {};
|
|
288
|
-
for (const option of request.options)
|
|
289
|
-
criteria[option.option] = nonEmpty(option.description) ?? null;
|
|
290
|
-
const { answers } = await client.systemOne({
|
|
291
|
-
state: document,
|
|
292
|
-
questions: { vote: choiceQuestion(request.instructions, criteria) },
|
|
293
|
-
});
|
|
294
|
-
const chosen = answers.vote;
|
|
295
|
-
const choiceText = isRecord(chosen) && typeof chosen.choice === "string" ? chosen.choice : null;
|
|
296
|
-
return { value: choiceText };
|
|
297
|
-
}
|
|
298
|
-
case "scale":
|
|
299
|
-
case "gauge": {
|
|
300
|
-
const levels = request.kind === "scale"
|
|
301
|
-
? request.levels
|
|
302
|
-
: Array.from({ length: (request.end - request.start) / request.step + 1 }, (_, index) => ({
|
|
303
|
-
level: request.start + index * request.step,
|
|
304
|
-
}));
|
|
305
|
-
const { answers } = await client.systemOne({
|
|
306
|
-
state: document,
|
|
307
|
-
questions: { vote: scoreQuestion(request.instructions, scoreCriteria(levels)) },
|
|
308
|
-
});
|
|
309
|
-
return {
|
|
310
|
-
value: levelExpectation(answers.vote, levels.map((row) => row.level)),
|
|
311
|
-
};
|
|
312
|
-
}
|
|
313
|
-
case "tag": {
|
|
314
|
-
const questions = {};
|
|
315
|
-
for (const row of request.tags) {
|
|
316
|
-
const text = nonEmpty(row.description);
|
|
317
|
-
const instructions = text === undefined ? `${request.instructions}\n${row.tag}` : `${request.instructions}\n${row.tag}: ${text}`;
|
|
318
|
-
questions[row.tag] = noul(instructions);
|
|
319
|
-
}
|
|
320
|
-
const { answers } = await client.systemOne({ state: document, questions });
|
|
321
|
-
const value = {};
|
|
322
|
-
for (const row of request.tags) {
|
|
323
|
-
const word = noulVote(answers[row.tag]);
|
|
324
|
-
value[row.tag] = word === null ? null : word === "yes";
|
|
325
|
-
}
|
|
326
|
-
return { value };
|
|
327
|
-
}
|
|
328
|
-
default: {
|
|
329
|
-
const unreachable = request;
|
|
330
|
-
return unreachable;
|
|
331
|
-
}
|
|
332
|
-
}
|
|
333
|
-
}
|
|
334
|
-
function yesNo(value) {
|
|
335
|
-
if (value === null)
|
|
336
|
-
return false;
|
|
337
|
-
if (value === "yes" || value === "no")
|
|
338
|
-
return value;
|
|
339
|
-
throw new DecideError(NOT_A_VOTE);
|
|
340
|
-
}
|
|
341
|
-
function choice(value, options) {
|
|
342
|
-
if (value === null)
|
|
343
|
-
return false;
|
|
344
|
-
if (typeof value !== "string")
|
|
345
|
-
throw new DecideError(NOT_A_VOTE);
|
|
346
|
-
DecideError.invariant(options.some((row) => row.option === value), "decide: choice outside options");
|
|
347
|
-
return value;
|
|
348
|
-
}
|
|
349
|
-
function expectation(value) {
|
|
350
|
-
DecideError.invariant(typeof value === "number" && Number.isFinite(value), NOT_A_VOTE);
|
|
351
|
-
return value;
|
|
352
|
-
}
|
|
353
|
-
function tagVotes(value, tags) {
|
|
354
|
-
if (!isRecord(value))
|
|
355
|
-
throw new DecideError(NOT_A_VOTE);
|
|
356
|
-
const known = new Set(tags.map((row) => row.tag));
|
|
357
|
-
for (const key of Object.keys(value)) {
|
|
358
|
-
DecideError.invariant(known.has(key), "decide: tag on a missing id");
|
|
359
|
-
}
|
|
360
|
-
return tags.map((row) => {
|
|
361
|
-
DecideError.invariant(Object.hasOwn(value, row.tag), NOT_A_VOTE);
|
|
362
|
-
const applies = value[row.tag];
|
|
363
|
-
if (applies === null || typeof applies === "boolean")
|
|
364
|
-
return [row.tag, applies];
|
|
365
|
-
throw new DecideError(NOT_A_VOTE);
|
|
366
|
-
});
|
|
367
|
-
}
|
|
368
|
-
function permutation(value, items) {
|
|
369
|
-
if (!Array.isArray(value))
|
|
370
|
-
throw new DecideError(NOT_A_VOTE);
|
|
371
|
-
const ids = [];
|
|
372
|
-
for (const id of value) {
|
|
373
|
-
if (typeof id !== "string")
|
|
374
|
-
throw new DecideError(NOT_A_VOTE);
|
|
375
|
-
ids.push(id);
|
|
376
|
-
}
|
|
377
|
-
const counts = new Map();
|
|
378
|
-
for (const item of items)
|
|
379
|
-
counts.set(item.id, (counts.get(item.id) ?? 0) + 1);
|
|
380
|
-
DecideError.invariant(ids.length === items.length, "decide: sort is not a permutation");
|
|
381
|
-
for (const id of ids) {
|
|
382
|
-
const left = counts.get(id) ?? 0;
|
|
383
|
-
DecideError.invariant(left > 0, "decide: sort is not a permutation");
|
|
384
|
-
counts.set(id, left - 1);
|
|
385
|
-
}
|
|
386
|
-
return ids;
|
|
387
|
-
}
|
|
388
|
-
/** Step defaults to 1, or -1 when end < start. The end must land on a step. Count is 2..26. */
|
|
389
|
-
function gaugeStep(start, end, step) {
|
|
390
|
-
DecideError.invariant(Number.isInteger(start), "decide: range start must be an integer");
|
|
391
|
-
DecideError.invariant(Number.isInteger(end), "decide: range end must be an integer");
|
|
392
|
-
const resolved = step ?? (end < start ? -1 : 1);
|
|
393
|
-
DecideError.invariant(Number.isInteger(resolved) && resolved !== 0, "decide: range step must be a non-zero integer");
|
|
394
|
-
DecideError.invariant(start !== end, "decide: gauge must produce 2..26 levels");
|
|
395
|
-
DecideError.invariant((end - start) * resolved > 0, "decide: range step must move from start toward end");
|
|
396
|
-
const count = (end - start) / resolved + 1;
|
|
397
|
-
DecideError.invariant(Number.isInteger(count), "decide: range end must fall on a step");
|
|
398
|
-
DecideError.invariant(count >= 2 && count <= 26, "decide: gauge must produce 2..26 levels");
|
|
399
|
-
return resolved;
|
|
400
|
-
}
|
|
401
|
-
function pairRows(rows, head) {
|
|
402
|
-
return rows.map((row) => {
|
|
403
|
-
if (!Array.isArray(row) || row.length === 0 || row.length > 2)
|
|
404
|
-
throw new DecideError(NOT_A_VOTE);
|
|
405
|
-
const name = row[0];
|
|
406
|
-
if (head === "string" ? typeof name !== "string" : typeof name !== "number")
|
|
407
|
-
throw new DecideError(NOT_A_VOTE);
|
|
408
|
-
if (row.length === 1)
|
|
409
|
-
return [name];
|
|
410
|
-
if (typeof row[1] !== "string")
|
|
411
|
-
throw new DecideError(NOT_A_VOTE);
|
|
412
|
-
return [name, row[1]];
|
|
413
|
-
});
|
|
414
|
-
}
|
|
415
|
-
function itemRows(rows) {
|
|
416
|
-
return rows.map((row) => {
|
|
417
|
-
if (!Array.isArray(row) || row.length !== 2 || typeof row[0] !== "string" || typeof row[1] !== "string") {
|
|
418
|
-
throw new DecideError(NOT_A_VOTE);
|
|
419
|
-
}
|
|
420
|
-
return [row[0], row[1]];
|
|
421
|
-
});
|
|
422
|
-
}
|
|
423
|
-
export const decideCapability = EnvCapability.define("policy/decide", {
|
|
424
|
-
configuration: decideConfiguration,
|
|
425
|
-
symbols: (symbol, sz) => {
|
|
426
|
-
const named = sz.union([sz.list([sz.foldName]), sz.list([sz.foldName, sz.string])]);
|
|
427
|
-
const levels = sz.union([sz.list([sz.integer]), sz.list([sz.integer, sz.string])]);
|
|
428
|
-
// JSON null is scheme #f. Nil would be truthy, so it is not an abstain.
|
|
429
|
-
const textOrFalse = sz.union([sz.string, sz.booleanFalse]);
|
|
430
|
-
const yesOrNo = sz.union([sz.literal("yes"), sz.literal("no"), sz.booleanFalse]);
|
|
431
|
-
// #t / #f / () — null applies stays distinct from false.
|
|
432
|
-
const applies = sz.union([sz.boolean, sz.nil]);
|
|
433
|
-
return {
|
|
434
|
-
"decide/yesno": symbol.rosetta `decide/yesno: yes, no, or #f`({ input: [sz.string], output: [yesOrNo], provenance: "source" }, async function (instructions) {
|
|
435
|
-
return yesNo(jsonValue(await vote(this.configuration, { kind: "yesno", instructions })));
|
|
436
|
-
}),
|
|
437
|
-
"decide/choose": symbol.rosetta `decide/choose: one of the options, or #f`({ input: [sz.string, sz.list(named)], output: [textOrFalse], provenance: "source" }, async function (instructions, rows) {
|
|
438
|
-
const options = pairRows(rows, "string").map(([option, description]) => {
|
|
439
|
-
if (typeof option !== "string")
|
|
440
|
-
throw new DecideError(NOT_A_VOTE);
|
|
441
|
-
return description === undefined ? { option } : { option, description };
|
|
442
|
-
});
|
|
443
|
-
return choice(jsonValue(await vote(this.configuration, { kind: "choose", instructions, options })), options);
|
|
444
|
-
}),
|
|
445
|
-
"decide/scale": symbol.rosetta `decide/scale: expectation on named levels`({ input: [sz.string, sz.list(levels)], output: [sz.number], provenance: "source" }, async function (instructions, rows) {
|
|
446
|
-
const scaleLevels = pairRows(rows, "number").map(([level, description]) => description === undefined ? { level: Number(level) } : { level: Number(level), description });
|
|
447
|
-
return expectation(jsonValue(await vote(this.configuration, { kind: "scale", instructions, levels: scaleLevels })));
|
|
448
|
-
}),
|
|
449
|
-
"decide/gauge": symbol.rosetta `decide/gauge: expectation on an integer range of 2..26 levels`({
|
|
450
|
-
input: [sz.string, sz.integer, sz.integer, sz.integer.optional()],
|
|
451
|
-
output: [sz.number],
|
|
452
|
-
provenance: "source",
|
|
453
|
-
}, async function (instructions, start, end, step) {
|
|
454
|
-
const resolved = gaugeStep(start, end, step);
|
|
455
|
-
return expectation(jsonValue(await vote(this.configuration, {
|
|
456
|
-
kind: "gauge",
|
|
457
|
-
instructions,
|
|
458
|
-
start,
|
|
459
|
-
end,
|
|
460
|
-
step: resolved,
|
|
461
|
-
})));
|
|
462
|
-
}),
|
|
463
|
-
"decide/tag": symbol.rosetta `decide/tag: alist of tag and whether it applies`({ input: [sz.string, sz.list(named)], output: [sz.list(sz.cons(sz.string, applies))], provenance: "source" }, async function (instructions, rows) {
|
|
464
|
-
const tags = pairRows(rows, "string").map(([tag, description]) => {
|
|
465
|
-
if (typeof tag !== "string")
|
|
466
|
-
throw new DecideError(NOT_A_VOTE);
|
|
467
|
-
return description === undefined ? { tag } : { tag, description };
|
|
468
|
-
});
|
|
469
|
-
return tagVotes(jsonValue(await vote(this.configuration, { kind: "tag", instructions, tags })), tags);
|
|
470
|
-
}),
|
|
471
|
-
"decide/sort": symbol.rosetta `decide/sort: permutation of the item ids`({
|
|
472
|
-
input: [sz.string, sz.list(sz.list([sz.foldName, sz.string]))],
|
|
473
|
-
output: [sz.list(sz.string)],
|
|
474
|
-
provenance: "source",
|
|
475
|
-
}, async function (instructions, rows) {
|
|
476
|
-
const items = itemRows(rows).map(([id, content]) => ({ id, content }));
|
|
477
|
-
return permutation(jsonValue(await vote(this.configuration, { kind: "sort", instructions, items })), items);
|
|
478
|
-
}),
|
|
479
|
-
};
|
|
480
|
-
},
|
|
481
|
-
});
|
|
482
|
-
//# sourceMappingURL=decide.js.map
|
package/dist/decide.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"decide.js","sourceRoot":"","sources":["../src/decide.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,9 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Error whose `static invariant` throws `new this(...ctorArgs)`.
|
|
3
|
-
* Not on ErrorConstructor — a receiver with extra constructor args
|
|
4
|
-
* (`(code, message)`) does not fight `(condition, message?)`.
|
|
5
|
-
*/
|
|
6
|
-
export declare class ErrorWithInvariant extends Error {
|
|
7
|
-
static invariant<T extends new (...args: any) => ErrorWithInvariant>(this: T, condition: unknown, ...args: ConstructorParameters<T>): asserts condition;
|
|
8
|
-
}
|
|
9
|
-
//# sourceMappingURL=error-with-invariant.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"error-with-invariant.d.ts","sourceRoot":"","sources":["../src/error-with-invariant.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,qBAAa,kBAAmB,SAAQ,KAAK;IAC3C,MAAM,CAAC,SAAS,CAAC,CAAC,SAAS,KAAK,GAAG,IAAI,EAAE,GAAG,KAAK,kBAAkB,EACjE,IAAI,EAAE,CAAC,EACP,SAAS,EAAE,OAAO,EAClB,GAAG,IAAI,EAAE,qBAAqB,CAAC,CAAC,CAAC,GAChC,OAAO,CAAC,SAAS;CAGrB"}
|
|
@@ -1,12 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Error whose `static invariant` throws `new this(...ctorArgs)`.
|
|
3
|
-
* Not on ErrorConstructor — a receiver with extra constructor args
|
|
4
|
-
* (`(code, message)`) does not fight `(condition, message?)`.
|
|
5
|
-
*/
|
|
6
|
-
export class ErrorWithInvariant extends Error {
|
|
7
|
-
static invariant(condition, ...args) {
|
|
8
|
-
if (!condition)
|
|
9
|
-
throw new this(...args);
|
|
10
|
-
}
|
|
11
|
-
}
|
|
12
|
-
//# sourceMappingURL=error-with-invariant.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"error-with-invariant.js","sourceRoot":"","sources":["../src/error-with-invariant.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,MAAM,OAAO,kBAAmB,SAAQ,KAAK;IAC3C,MAAM,CAAC,SAAS,CAEd,SAAkB,EAClB,GAAG,IAA8B;QAEjC,IAAI,CAAC,SAAS;YAAE,MAAM,IAAI,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC;IAC1C,CAAC;CACF"}
|
package/dist/license-law.d.ts
DELETED
|
@@ -1,43 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Pure license decisions. One `LicenseFacts` bag — no jobs.
|
|
3
|
-
* Short-circuit order is the law. Do not reorder.
|
|
4
|
-
* Job readers stay in harness-model.
|
|
5
|
-
*/
|
|
6
|
-
export type LicenseFacts = {
|
|
7
|
-
readonly humanApprove: boolean | null;
|
|
8
|
-
readonly completed: boolean;
|
|
9
|
-
readonly cancelled: boolean;
|
|
10
|
-
readonly commFirst: boolean;
|
|
11
|
-
readonly fileReadGrant: boolean;
|
|
12
|
-
readonly policy: "manual" | "auto" | "yolo";
|
|
13
|
-
readonly policyResult: "policyApprove" | "deny" | "ask" | "block" | null;
|
|
14
|
-
readonly classifierResult: "allow" | "deny" | null;
|
|
15
|
-
readonly classifierAbstain: string | null;
|
|
16
|
-
readonly hatch: boolean;
|
|
17
|
-
readonly clusterGranted: boolean;
|
|
18
|
-
readonly writeClassifierOff: boolean;
|
|
19
|
-
readonly unattended: boolean;
|
|
20
|
-
readonly coverDeny: boolean;
|
|
21
|
-
};
|
|
22
|
-
/** Stored `allow` and `approve` are the previous positive spellings. */
|
|
23
|
-
export declare function asPolicyResult(value: unknown): LicenseFacts["policyResult"];
|
|
24
|
-
/** Floor `ask` and `deny` share remainder `"ask"`. Ignores hatch. `block` is not remainder. */
|
|
25
|
-
export declare function autoRemainderOf(facts: LicenseFacts): "ask" | null;
|
|
26
|
-
/** Auto floor `ask` that allow-sides: not hatch, cluster already granted. */
|
|
27
|
-
export declare function autoAllowSkip(facts: LicenseFacts): boolean;
|
|
28
|
-
/** Floor ask/deny except auto allow-skip. Floor allow is not remainder. */
|
|
29
|
-
export declare function autoRemainder(facts: LicenseFacts): "ask" | null;
|
|
30
|
-
/**
|
|
31
|
-
* Remainder classifier intern. Not the cover. Ungranted write never
|
|
32
|
-
* classifies, including after a fail message. Deny classifies when
|
|
33
|
-
* unattended, when cover is off, or when the cluster is granted.
|
|
34
|
-
*/
|
|
35
|
-
export declare function autoClassifierPending(facts: LicenseFacts): boolean;
|
|
36
|
-
/** Cover predicate. Not a license bit. */
|
|
37
|
-
export declare function needsHuman(facts: LicenseFacts): boolean;
|
|
38
|
-
/** `true` allow / `false` deny / `null` still waiting. Human first, then the floor. */
|
|
39
|
-
export declare function licenseDecision(facts: LicenseFacts): boolean | null;
|
|
40
|
-
export declare function licenseAllows(facts: LicenseFacts): boolean;
|
|
41
|
-
/** Known-safe leaves. Approved and any judge vote stay visible. */
|
|
42
|
-
export declare function tapeFuse(facts: LicenseFacts): boolean;
|
|
43
|
-
//# sourceMappingURL=license-law.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"license-law.d.ts","sourceRoot":"","sources":["../src/license-law.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,MAAM,MAAM,YAAY,GAAG;IACzB,QAAQ,CAAC,YAAY,EAAE,OAAO,GAAG,IAAI,CAAC;IACtC,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAC;IAC5B,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAC;IAC5B,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAC;IAC5B,QAAQ,CAAC,aAAa,EAAE,OAAO,CAAC;IAChC,QAAQ,CAAC,MAAM,EAAE,QAAQ,GAAG,MAAM,GAAG,MAAM,CAAC;IAC5C,QAAQ,CAAC,YAAY,EAAE,eAAe,GAAG,MAAM,GAAG,KAAK,GAAG,OAAO,GAAG,IAAI,CAAC;IACzE,QAAQ,CAAC,gBAAgB,EAAE,OAAO,GAAG,MAAM,GAAG,IAAI,CAAC;IACnD,QAAQ,CAAC,iBAAiB,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1C,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC;IACxB,QAAQ,CAAC,cAAc,EAAE,OAAO,CAAC;IACjC,QAAQ,CAAC,kBAAkB,EAAE,OAAO,CAAC;IACrC,QAAQ,CAAC,UAAU,EAAE,OAAO,CAAC;IAC7B,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAC;CAC7B,CAAC;AAEF,wEAAwE;AACxE,wBAAgB,cAAc,CAAC,KAAK,EAAE,OAAO,GAAG,YAAY,CAAC,cAAc,CAAC,CAI3E;AAED,+FAA+F;AAC/F,wBAAgB,eAAe,CAAC,KAAK,EAAE,YAAY,GAAG,KAAK,GAAG,IAAI,CAQjE;AAED,6EAA6E;AAC7E,wBAAgB,aAAa,CAAC,KAAK,EAAE,YAAY,GAAG,OAAO,CAS1D;AAED,2EAA2E;AAC3E,wBAAgB,aAAa,CAAC,KAAK,EAAE,YAAY,GAAG,KAAK,GAAG,IAAI,CAO/D;AAED;;;;GAIG;AACH,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,YAAY,GAAG,OAAO,CAYlE;AAED,0CAA0C;AAC1C,wBAAgB,UAAU,CAAC,KAAK,EAAE,YAAY,GAAG,OAAO,CAgBvD;AAED,uFAAuF;AACvF,wBAAgB,eAAe,CAAC,KAAK,EAAE,YAAY,GAAG,OAAO,GAAG,IAAI,CA2BnE;AAED,wBAAgB,aAAa,CAAC,KAAK,EAAE,YAAY,GAAG,OAAO,CAE1D;AAED,mEAAmE;AACnE,wBAAgB,QAAQ,CAAC,KAAK,EAAE,YAAY,GAAG,OAAO,CAerD"}
|