@pfoundation/ocadvisor 26.9.1 → 26.9.2
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/README.md +388 -46
- package/dist/artificialAnalysis.d.ts +4 -0
- package/dist/artificialAnalysis.d.ts.map +1 -0
- package/dist/artificialAnalysis.js +77 -0
- package/dist/artificialAnalysis.js.map +1 -0
- package/dist/benchmarkConfig.d.ts +19 -0
- package/dist/benchmarkConfig.d.ts.map +1 -0
- package/dist/benchmarkConfig.js +58 -0
- package/dist/benchmarkConfig.js.map +1 -0
- package/dist/benchmarkEvidence.d.ts +37 -0
- package/dist/benchmarkEvidence.d.ts.map +1 -0
- package/dist/benchmarkEvidence.js +81 -0
- package/dist/benchmarkEvidence.js.map +1 -0
- package/dist/benchmarkMatch.d.ts +57 -0
- package/dist/benchmarkMatch.d.ts.map +1 -0
- package/dist/benchmarkMatch.js +236 -0
- package/dist/benchmarkMatch.js.map +1 -0
- package/dist/benchmarkStore.d.ts +44 -0
- package/dist/benchmarkStore.d.ts.map +1 -0
- package/dist/benchmarkStore.js +308 -0
- package/dist/benchmarkStore.js.map +1 -0
- package/dist/benchmarkTypes.d.ts +48 -0
- package/dist/benchmarkTypes.d.ts.map +1 -0
- package/dist/benchmarkTypes.js +298 -0
- package/dist/benchmarkTypes.js.map +1 -0
- package/dist/benchmarkUpdate.d.ts +33 -0
- package/dist/benchmarkUpdate.d.ts.map +1 -0
- package/dist/benchmarkUpdate.js +327 -0
- package/dist/benchmarkUpdate.js.map +1 -0
- package/dist/cli.d.ts +13 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +377 -0
- package/dist/cli.js.map +1 -0
- package/dist/data/artificialAnalysis.mappings.json +197 -0
- package/dist/data/artificialAnalysis.snapshot.json +17684 -0
- package/dist/modelProfiles.d.ts +45 -0
- package/dist/modelProfiles.d.ts.map +1 -0
- package/dist/modelProfiles.js +141 -0
- package/dist/modelProfiles.js.map +1 -0
- package/dist/ocAdvisor.d.ts +105 -5
- package/dist/ocAdvisor.d.ts.map +1 -1
- package/dist/ocAdvisor.js +502 -44
- package/dist/ocAdvisor.js.map +1 -1
- package/dist/typesafeGate.d.ts +89 -0
- package/dist/typesafeGate.d.ts.map +1 -0
- package/dist/typesafeGate.js +463 -0
- package/dist/typesafeGate.js.map +1 -0
- package/dist/typesafeState.d.ts +94 -0
- package/dist/typesafeState.d.ts.map +1 -0
- package/dist/typesafeState.js +301 -0
- package/dist/typesafeState.js.map +1 -0
- package/package.json +8 -2
|
@@ -0,0 +1,301 @@
|
|
|
1
|
+
export const TYPESAFE_DEFAULTS = {
|
|
2
|
+
timeoutMs: 3000,
|
|
3
|
+
skipBelow: 0.2,
|
|
4
|
+
minEffortConfidence: 0.6,
|
|
5
|
+
maxStateBytes: 16384,
|
|
6
|
+
efforts: ["high", "xhigh", "max"],
|
|
7
|
+
};
|
|
8
|
+
function parseBoundedPositiveInt(value, name) {
|
|
9
|
+
const parsed = typeof value === "number"
|
|
10
|
+
? value
|
|
11
|
+
: typeof value === "string" && value.trim()
|
|
12
|
+
? Number(value)
|
|
13
|
+
: NaN;
|
|
14
|
+
if (!Number.isFinite(parsed) || !Number.isInteger(parsed) || parsed <= 0) {
|
|
15
|
+
return { error: `typesafe.${name} must be a positive integer` };
|
|
16
|
+
}
|
|
17
|
+
return parsed;
|
|
18
|
+
}
|
|
19
|
+
function parseClosedProbability(value, name) {
|
|
20
|
+
const parsed = typeof value === "number" ? value : Number(value);
|
|
21
|
+
if (!Number.isFinite(parsed) || parsed < 0 || parsed > 1) {
|
|
22
|
+
return { error: `typesafe.${name} must be a number between 0 and 1` };
|
|
23
|
+
}
|
|
24
|
+
return parsed;
|
|
25
|
+
}
|
|
26
|
+
// Normalizes the `typesafe` plugin option. `true`/`null`/omitted mean
|
|
27
|
+
// "enabled with defaults"; `false` is a complete bypass; an object enables
|
|
28
|
+
// the gate and validates its overrides. Invalid explicit values return a
|
|
29
|
+
// validation error instead of silently enabling a different policy.
|
|
30
|
+
export function normalizeTypeSafeOptions(value) {
|
|
31
|
+
if (value === undefined || value === null || value === true) {
|
|
32
|
+
return { disabled: false, overrides: {} };
|
|
33
|
+
}
|
|
34
|
+
if (value === false)
|
|
35
|
+
return { disabled: true };
|
|
36
|
+
if (typeof value !== "object" || Array.isArray(value)) {
|
|
37
|
+
return { error: "typesafe must be true, false, or an options object" };
|
|
38
|
+
}
|
|
39
|
+
const raw = value;
|
|
40
|
+
const overrides = {};
|
|
41
|
+
if (raw.model !== undefined) {
|
|
42
|
+
if (typeof raw.model !== "string" || !raw.model.trim()) {
|
|
43
|
+
return { error: "typesafe.model must be a non-empty string" };
|
|
44
|
+
}
|
|
45
|
+
overrides.model = raw.model.trim();
|
|
46
|
+
}
|
|
47
|
+
for (const key of ["timeoutMs", "maxStateBytes"]) {
|
|
48
|
+
if (raw[key] === undefined)
|
|
49
|
+
continue;
|
|
50
|
+
const parsed = parseBoundedPositiveInt(raw[key], key);
|
|
51
|
+
if (typeof parsed === "object")
|
|
52
|
+
return parsed;
|
|
53
|
+
overrides[key] = parsed;
|
|
54
|
+
}
|
|
55
|
+
for (const key of ["skipBelow", "minEffortConfidence"]) {
|
|
56
|
+
if (raw[key] === undefined)
|
|
57
|
+
continue;
|
|
58
|
+
const parsed = parseClosedProbability(raw[key], key);
|
|
59
|
+
if (typeof parsed === "object")
|
|
60
|
+
return parsed;
|
|
61
|
+
overrides[key] = parsed;
|
|
62
|
+
}
|
|
63
|
+
if (raw.efforts !== undefined) {
|
|
64
|
+
const list = Array.isArray(raw.efforts)
|
|
65
|
+
? raw.efforts
|
|
66
|
+
: typeof raw.efforts === "string" && raw.efforts.trim()
|
|
67
|
+
? raw.efforts.split(",")
|
|
68
|
+
: null;
|
|
69
|
+
if (!list) {
|
|
70
|
+
return { error: "typesafe.efforts must be an array of effort names" };
|
|
71
|
+
}
|
|
72
|
+
const seen = new Set();
|
|
73
|
+
for (const entry of list) {
|
|
74
|
+
if (typeof entry !== "string" || !entry.trim()) {
|
|
75
|
+
return {
|
|
76
|
+
error: "typesafe.efforts must contain non-empty effort names",
|
|
77
|
+
};
|
|
78
|
+
}
|
|
79
|
+
seen.add(entry.trim());
|
|
80
|
+
}
|
|
81
|
+
overrides.efforts = [...seen];
|
|
82
|
+
}
|
|
83
|
+
return { disabled: false, overrides };
|
|
84
|
+
}
|
|
85
|
+
export function resolveTypeSafeSettings(source) {
|
|
86
|
+
if (source.disabled)
|
|
87
|
+
return { ...TYPESAFE_DEFAULTS };
|
|
88
|
+
return { ...TYPESAFE_DEFAULTS, ...source.overrides };
|
|
89
|
+
}
|
|
90
|
+
// `TYPESAFE_API_KEY` (whitespace-only counts as absent) is the SDK's own
|
|
91
|
+
// environment variable. Bypass means no client construction and no network
|
|
92
|
+
// request; a missing key alone never disables the advisor itself.
|
|
93
|
+
export function resolveTypeSafeConfig(source, env = process.env) {
|
|
94
|
+
const key = env.TYPESAFE_API_KEY;
|
|
95
|
+
const keyPresent = typeof key === "string" && key.trim().length > 0;
|
|
96
|
+
if (!source || source.disabled || !keyPresent) {
|
|
97
|
+
// No key means no client and no request; settings stay unconstructed.
|
|
98
|
+
return { enabled: false, settings: null, keyPresent };
|
|
99
|
+
}
|
|
100
|
+
return {
|
|
101
|
+
enabled: true,
|
|
102
|
+
settings: resolveTypeSafeSettings(source),
|
|
103
|
+
keyPresent,
|
|
104
|
+
};
|
|
105
|
+
}
|
|
106
|
+
export const TYPE_SAFE_ENV_KEY = "TYPESAFE_API_KEY";
|
|
107
|
+
const MAX_CHAIN_DEPTH = 10;
|
|
108
|
+
const MAX_MESSAGE_CHARS = 4000;
|
|
109
|
+
// Assembles the decision state shell without reading any session records;
|
|
110
|
+
// the builder below fills `context` from the session chain. Exported so the
|
|
111
|
+
// evaluation and tests can construct representative state directly.
|
|
112
|
+
export function makeDecisionState(options) {
|
|
113
|
+
return {
|
|
114
|
+
request: {
|
|
115
|
+
question: options.question ?? null,
|
|
116
|
+
mode: options.mode,
|
|
117
|
+
trigger: options.trigger,
|
|
118
|
+
explicitEffort: options.explicitEffort ?? null,
|
|
119
|
+
caller: options.caller ?? null,
|
|
120
|
+
directory: options.directory ?? null,
|
|
121
|
+
},
|
|
122
|
+
user: { latestRequest: null },
|
|
123
|
+
context: { messages: [], latestUserIncluded: false },
|
|
124
|
+
history: {
|
|
125
|
+
priorConsultations: options.priorConsultations,
|
|
126
|
+
priorModes: options.priorModes,
|
|
127
|
+
repeatedQuestion: isRepeatedQuestion(options.question ?? null, options.priorQuestions ?? []),
|
|
128
|
+
},
|
|
129
|
+
availability: {
|
|
130
|
+
supportedEfforts: [...options.supportedEfforts],
|
|
131
|
+
defaultEffort: options.defaultEffort ?? null,
|
|
132
|
+
},
|
|
133
|
+
models: options.models ?? null,
|
|
134
|
+
benchmarks: options.benchmarks ?? null,
|
|
135
|
+
coverage: {
|
|
136
|
+
truncated: false,
|
|
137
|
+
droppedMessages: 0,
|
|
138
|
+
includedMessages: 0,
|
|
139
|
+
totalMessages: 0,
|
|
140
|
+
stateBytes: 0,
|
|
141
|
+
maxStateBytes: options.maxStateBytes ?? 0,
|
|
142
|
+
benchmarksOmitted: false,
|
|
143
|
+
},
|
|
144
|
+
};
|
|
145
|
+
}
|
|
146
|
+
function getChainRow(db, sessionId) {
|
|
147
|
+
try {
|
|
148
|
+
return db
|
|
149
|
+
.query("SELECT id, parent_id, title FROM session_v2 WHERE id = ?")
|
|
150
|
+
.get(sessionId);
|
|
151
|
+
}
|
|
152
|
+
catch {
|
|
153
|
+
// Legacy databases without session_v2 have no chain to read.
|
|
154
|
+
return null;
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
// Collects the session and its parents (oldest first) within the same chain
|
|
158
|
+
// cap the advisor transcript uses.
|
|
159
|
+
function collectChain(db, sessionId) {
|
|
160
|
+
const chain = [];
|
|
161
|
+
const visited = new Set();
|
|
162
|
+
let current = sessionId;
|
|
163
|
+
while (current && !visited.has(current) && chain.length < MAX_CHAIN_DEPTH) {
|
|
164
|
+
visited.add(current);
|
|
165
|
+
const row = getChainRow(db, current);
|
|
166
|
+
if (!row)
|
|
167
|
+
break;
|
|
168
|
+
chain.push(row);
|
|
169
|
+
current = row.parent_id;
|
|
170
|
+
}
|
|
171
|
+
return chain.reverse();
|
|
172
|
+
}
|
|
173
|
+
function readChainMessages(db, chain) {
|
|
174
|
+
const out = [];
|
|
175
|
+
for (const session of chain) {
|
|
176
|
+
let rows = [];
|
|
177
|
+
try {
|
|
178
|
+
rows = db
|
|
179
|
+
.query("SELECT type, data FROM session_message WHERE session_id = ? ORDER BY seq ASC LIMIT 400")
|
|
180
|
+
.all(session.id);
|
|
181
|
+
}
|
|
182
|
+
catch {
|
|
183
|
+
rows = [];
|
|
184
|
+
}
|
|
185
|
+
for (const row of rows) {
|
|
186
|
+
try {
|
|
187
|
+
out.push({ type: row.type, data: JSON.parse(row.data) });
|
|
188
|
+
}
|
|
189
|
+
catch { }
|
|
190
|
+
}
|
|
191
|
+
}
|
|
192
|
+
return out;
|
|
193
|
+
}
|
|
194
|
+
function messageText(entry, formatMessage) {
|
|
195
|
+
const formatted = formatMessage(entry.type, entry.data);
|
|
196
|
+
if (!formatted)
|
|
197
|
+
return null;
|
|
198
|
+
return formatted.length > MAX_MESSAGE_CHARS
|
|
199
|
+
? formatted.slice(-MAX_MESSAGE_CHARS)
|
|
200
|
+
: formatted;
|
|
201
|
+
}
|
|
202
|
+
function latestUserRequest(entries) {
|
|
203
|
+
for (let i = entries.length - 1; i >= 0; i--) {
|
|
204
|
+
const entry = entries[i];
|
|
205
|
+
if (entry.type !== "user")
|
|
206
|
+
continue;
|
|
207
|
+
const text = typeof entry.data.text === "string" ? entry.data.text : "";
|
|
208
|
+
if (text.trim())
|
|
209
|
+
return text.slice(-MAX_MESSAGE_CHARS);
|
|
210
|
+
}
|
|
211
|
+
return null;
|
|
212
|
+
}
|
|
213
|
+
function byteLength(value) {
|
|
214
|
+
return Buffer.byteLength(JSON.stringify(value), "utf8");
|
|
215
|
+
}
|
|
216
|
+
// Repeats are only flagged when the current question covers the same ground
|
|
217
|
+
// as a previous one; the gate treats this as context, never as a quota.
|
|
218
|
+
function isRepeatedQuestion(question, priorQuestions) {
|
|
219
|
+
if (!question)
|
|
220
|
+
return false;
|
|
221
|
+
const normalize = (text) => text.toLowerCase().replace(/\s+/g, " ").trim();
|
|
222
|
+
const target = normalize(question);
|
|
223
|
+
if (!target)
|
|
224
|
+
return false;
|
|
225
|
+
return priorQuestions.some((prior) => {
|
|
226
|
+
const candidate = normalize(prior);
|
|
227
|
+
if (!candidate)
|
|
228
|
+
return false;
|
|
229
|
+
return (candidate === target ||
|
|
230
|
+
candidate.includes(target) ||
|
|
231
|
+
target.includes(candidate));
|
|
232
|
+
});
|
|
233
|
+
}
|
|
234
|
+
export function buildDecisionState(db, sessionId, options) {
|
|
235
|
+
const chain = collectChain(db, sessionId);
|
|
236
|
+
const entries = chain.length > 0 ? readChainMessages(db, chain) : [];
|
|
237
|
+
const latestRequest = latestUserRequest(entries);
|
|
238
|
+
const base = makeDecisionState({ ...options, formatMessage: undefined });
|
|
239
|
+
base.user.latestRequest = latestRequest;
|
|
240
|
+
base.context.latestUserIncluded = latestRequest !== null;
|
|
241
|
+
base.coverage.totalMessages = entries.length;
|
|
242
|
+
const maxBytes = options.maxStateBytes ?? Infinity;
|
|
243
|
+
// Verbose benchmark detail yields before task context: score comparisons
|
|
244
|
+
// drop first (identities and match coverage stay), then the whole
|
|
245
|
+
// benchmark block with an explicit omission flag.
|
|
246
|
+
if (base.benchmarks && byteLength(base) > maxBytes) {
|
|
247
|
+
base.benchmarks = { ...base.benchmarks, comparisons: [], omitted: true };
|
|
248
|
+
}
|
|
249
|
+
if (base.benchmarks && byteLength(base) > maxBytes) {
|
|
250
|
+
base.benchmarks = null;
|
|
251
|
+
base.coverage.benchmarksOmitted = true;
|
|
252
|
+
}
|
|
253
|
+
if (!options.formatMessage)
|
|
254
|
+
return base;
|
|
255
|
+
const rendered = entries.map((entry) => messageText(entry, options.formatMessage ?? (() => null)));
|
|
256
|
+
// The latest user request is the intent under review; keep it even when
|
|
257
|
+
// older context must be dropped.
|
|
258
|
+
let latestUserIndex = -1;
|
|
259
|
+
for (let i = entries.length - 1; i >= 0; i--) {
|
|
260
|
+
if (entries[i].type === "user" && rendered[i]) {
|
|
261
|
+
latestUserIndex = i;
|
|
262
|
+
break;
|
|
263
|
+
}
|
|
264
|
+
}
|
|
265
|
+
// Walk backwards from the newest message, stopping at the first message
|
|
266
|
+
// that no longer fits so kept context stays contiguous. The budget counts
|
|
267
|
+
// the serialized state, so the measured value is what the gate sends.
|
|
268
|
+
let dropped = 0;
|
|
269
|
+
const keptIndices = [];
|
|
270
|
+
let blocked = false;
|
|
271
|
+
for (let i = rendered.length - 1; i >= 0; i--) {
|
|
272
|
+
const text = rendered[i];
|
|
273
|
+
if (!text)
|
|
274
|
+
continue;
|
|
275
|
+
if (i === latestUserIndex)
|
|
276
|
+
continue;
|
|
277
|
+
const candidate = [text, ...keptIndices.map((index) => rendered[index])];
|
|
278
|
+
const probe = {
|
|
279
|
+
...base,
|
|
280
|
+
context: { ...base.context, messages: candidate },
|
|
281
|
+
};
|
|
282
|
+
if (blocked || byteLength(probe) > maxBytes) {
|
|
283
|
+
blocked = true;
|
|
284
|
+
dropped++;
|
|
285
|
+
continue;
|
|
286
|
+
}
|
|
287
|
+
keptIndices.unshift(i);
|
|
288
|
+
}
|
|
289
|
+
const withLatest = latestUserIndex >= 0 ? [latestUserIndex, ...keptIndices] : keptIndices;
|
|
290
|
+
withLatest.sort((a, b) => a - b);
|
|
291
|
+
const kept = withLatest.map((index) => rendered[index]);
|
|
292
|
+
base.context.messages = kept;
|
|
293
|
+
base.context.latestUserIncluded =
|
|
294
|
+
latestUserIndex >= 0 && keptIndices.concat(latestUserIndex).length > 0;
|
|
295
|
+
base.coverage.includedMessages = kept.length;
|
|
296
|
+
base.coverage.droppedMessages = dropped;
|
|
297
|
+
base.coverage.truncated = dropped > 0;
|
|
298
|
+
base.coverage.stateBytes = byteLength(base);
|
|
299
|
+
return base;
|
|
300
|
+
}
|
|
301
|
+
//# sourceMappingURL=typesafeState.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"typesafeState.js","sourceRoot":"","sources":["../src/typesafeState.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@pfoundation/ocadvisor",
|
|
3
|
-
"version": "26.9.
|
|
3
|
+
"version": "26.9.2",
|
|
4
4
|
"description": "OpenCode V2 plugin: consult Claude Fable 5.1 as senior advisor via OpenCode session generation",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"license": "MIT",
|
|
@@ -23,6 +23,9 @@
|
|
|
23
23
|
],
|
|
24
24
|
"main": "./dist/index.js",
|
|
25
25
|
"types": "./dist/index.d.ts",
|
|
26
|
+
"bin": {
|
|
27
|
+
"ocadvisor": "./dist/cli.js"
|
|
28
|
+
},
|
|
26
29
|
"exports": {
|
|
27
30
|
".": {
|
|
28
31
|
"types": "./dist/index.d.ts",
|
|
@@ -44,7 +47,7 @@
|
|
|
44
47
|
"scripts": {
|
|
45
48
|
"test": "bun test",
|
|
46
49
|
"typecheck": "tsc --noEmit",
|
|
47
|
-
"build": "tsc -p tsconfig.build.json",
|
|
50
|
+
"build": "tsc -p tsconfig.build.json && bun scripts/copyBenchmarkData.ts && chmod +x dist/cli.js",
|
|
48
51
|
"prepack": "bun run build",
|
|
49
52
|
"prepublishOnly": "bun test && bun run typecheck",
|
|
50
53
|
"report": "bun src/usageReport.ts --days 30"
|
|
@@ -52,5 +55,8 @@
|
|
|
52
55
|
"devDependencies": {
|
|
53
56
|
"bun-types": "^1.4.2",
|
|
54
57
|
"typescript": "^5.7.2"
|
|
58
|
+
},
|
|
59
|
+
"dependencies": {
|
|
60
|
+
"@typesafe-ai/sdk": "^0.6.0"
|
|
55
61
|
}
|
|
56
62
|
}
|