orizu 0.5.39 → 0.5.41
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 +77 -0
- package/dist/dataset-clone-workflow.d.ts +11 -0
- package/dist/dataset-clone-workflow.d.ts.map +1 -0
- package/dist/dataset-clone-workflow.js +100 -0
- package/dist/dataset-commands.d.ts +3 -1
- package/dist/dataset-commands.d.ts.map +1 -1
- package/dist/dataset-commands.js +107 -91
- package/dist/dataset-delete-workflow.d.ts +4 -0
- package/dist/dataset-delete-workflow.d.ts.map +1 -0
- package/dist/dataset-delete-workflow.js +75 -0
- package/dist/dataset-lock-workflow.d.ts +12 -0
- package/dist/dataset-lock-workflow.d.ts.map +1 -0
- package/dist/dataset-lock-workflow.js +76 -0
- package/dist/dataset-readme-workflow.d.ts +13 -0
- package/dist/dataset-readme-workflow.d.ts.map +1 -0
- package/dist/dataset-readme-workflow.js +82 -0
- package/dist/dataset-row-workflow.d.ts +14 -0
- package/dist/dataset-row-workflow.d.ts.map +1 -0
- package/dist/dataset-row-workflow.js +202 -0
- package/dist/dataset-split-reads.d.ts +28 -0
- package/dist/dataset-split-reads.d.ts.map +1 -0
- package/dist/dataset-split-reads.js +47 -0
- package/dist/dataset-transfer-upload.d.ts +2 -6
- package/dist/dataset-transfer-upload.d.ts.map +1 -1
- package/dist/dataset-transfer-upload.js +9 -2
- package/dist/dataset-upload-snapshot.d.ts.map +1 -1
- package/dist/dataset-upload-snapshot.js +7 -1
- package/dist/dataset-version-workflow.d.ts +24 -0
- package/dist/dataset-version-workflow.d.ts.map +1 -0
- package/dist/dataset-version-workflow.js +99 -0
- package/dist/feedback-cli.js +3 -3
- package/dist/help.d.ts.map +1 -1
- package/dist/help.js +29 -3
- package/dist/hosted-boot.d.ts +1 -0
- package/dist/hosted-boot.d.ts.map +1 -1
- package/dist/hosted-boot.js +17 -0
- package/dist/hosted-harness-opencode.d.ts +5 -6
- package/dist/hosted-harness-opencode.d.ts.map +1 -1
- package/dist/hosted-harness-opencode.js +73 -59
- package/dist/hosted-loop-lifecycle.d.ts +6 -11
- package/dist/hosted-loop-lifecycle.d.ts.map +1 -1
- package/dist/hosted-loop-lifecycle.js +6 -11
- package/dist/hosted-loop.d.ts +9 -0
- package/dist/hosted-loop.d.ts.map +1 -1
- package/dist/hosted-loop.js +19 -10
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +11 -3
- package/dist/instruction-delivery.d.ts +14 -0
- package/dist/instruction-delivery.d.ts.map +1 -0
- package/dist/instruction-delivery.js +103 -0
- package/dist/instruction-set-sync/index.d.ts +17 -0
- package/dist/instruction-set-sync/index.d.ts.map +1 -1
- package/dist/instruction-set-sync/index.js +44 -17
- package/dist/instruction-set-update/index.d.ts +2 -2
- package/dist/instruction-set-update/index.d.ts.map +1 -1
- package/dist/instruction-set-update/index.js +2 -2
- package/dist/instruction-sets-cli.d.ts.map +1 -1
- package/dist/instruction-sets-cli.js +19 -27
- package/dist/json-response.d.ts +1 -0
- package/dist/json-response.d.ts.map +1 -1
- package/dist/json-response.js +7 -0
- package/dist/last-error-record.d.ts +4 -2
- package/dist/last-error-record.d.ts.map +1 -1
- package/dist/last-error-record.js +10 -68
- package/dist/last-error-workflow.d.ts +4 -0
- package/dist/last-error-workflow.d.ts.map +1 -0
- package/dist/last-error-workflow.js +78 -0
- package/dist/preview-runtime.d.ts +2 -2
- package/dist/preview-runtime.d.ts.map +1 -1
- package/dist/preview-runtime.js +37 -7
- package/dist/task-commands.d.ts.map +1 -1
- package/dist/task-commands.js +9 -16
- package/dist/task-export-workflow.d.ts +4 -0
- package/dist/task-export-workflow.d.ts.map +1 -0
- package/dist/task-export-workflow.js +46 -0
- package/dist/task-report-workflow.d.ts +47 -0
- package/dist/task-report-workflow.d.ts.map +1 -0
- package/dist/task-report-workflow.js +160 -0
- package/dist/workbench-cli.js +1 -1
- package/package.json +1 -1
- package/src/dataset-clone-workflow.ts +100 -0
- package/src/dataset-commands.ts +95 -142
- package/src/dataset-delete-workflow.ts +72 -0
- package/src/dataset-lock-workflow.ts +74 -0
- package/src/dataset-readme-workflow.ts +80 -0
- package/src/dataset-row-workflow.ts +248 -0
- package/src/dataset-split-reads.ts +43 -0
- package/src/dataset-transfer-upload.ts +12 -5
- package/src/dataset-upload-snapshot.ts +8 -1
- package/src/dataset-version-workflow.ts +105 -0
- package/src/feedback-cli.ts +4 -4
- package/src/help.ts +29 -3
- package/src/hosted-boot.ts +16 -1
- package/src/hosted-harness-opencode.ts +74 -72
- package/src/hosted-loop-lifecycle.ts +6 -11
- package/src/hosted-loop.ts +20 -10
- package/src/hosted-model-cache.d.mts +2 -0
- package/src/hosted-model-cache.mjs +53 -0
- package/src/index.ts +12 -2
- package/src/instruction-delivery.ts +123 -0
- package/src/instruction-set-sync/index.ts +61 -14
- package/src/instruction-set-update/index.ts +4 -3
- package/src/instruction-sets-cli.ts +19 -27
- package/src/json-response.ts +8 -0
- package/src/last-error-record.ts +11 -85
- package/src/last-error-workflow.ts +121 -0
- package/src/preview-runtime.ts +40 -10
- package/src/task-commands.ts +9 -43
- package/src/task-export-workflow.ts +56 -0
- package/src/task-report-workflow.ts +179 -0
- package/src/workbench-cli.ts +1 -1
- package/vendor/skills/orizu/references/cli-reference.md +34 -0
- package/vendor/skills/orizu/references/dataset-design.md +1 -1
- package/dist/dataset-edit-rows.d.ts +0 -10
- package/dist/dataset-edit-rows.d.ts.map +0 -1
- package/dist/dataset-edit-rows.js +0 -90
- package/src/dataset-edit-rows.ts +0 -124
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
import { Cause, Effect, Exit, Result, Schema } from 'effect';
|
|
2
|
+
import { datasetTransferTimeoutMs } from './dataset-transfer-policy.js';
|
|
3
|
+
import { extractErrorMessage, isJsonErrorResponsePayload } from './error-response.js';
|
|
4
|
+
import { authedFetch } from './http.js';
|
|
5
|
+
import { parseJsonResponse } from './json-response.js';
|
|
6
|
+
// Loaded only through `await import(...)`, like the README and delete workflows.
|
|
7
|
+
export const VERSION_MAY_BE_CREATED = "The version may already be created: check the dataset's versions in the web app before creating it again.";
|
|
8
|
+
// What the server says when it cannot tell whether the version was saved.
|
|
9
|
+
const SERVER_MAY_BE_CREATED = 'Dataset version may already be created';
|
|
10
|
+
const CreateReply = Schema.Struct({
|
|
11
|
+
datasetVersion: Schema.Struct({
|
|
12
|
+
id: Schema.NonEmptyString,
|
|
13
|
+
rowCount: Schema.Number,
|
|
14
|
+
artifactFormat: Schema.optional(Schema.String),
|
|
15
|
+
artifactStoragePath: Schema.optional(Schema.String),
|
|
16
|
+
}),
|
|
17
|
+
});
|
|
18
|
+
// The version may exist when the server says so, when the reply was lost or
|
|
19
|
+
// unreadable after the request was sent, or when a 5xx did not come from the
|
|
20
|
+
// app (a gateway giving up while the app kept working). Any other error reply
|
|
21
|
+
// is a clear refusal.
|
|
22
|
+
export class DatasetVersionFailure extends Error {
|
|
23
|
+
mayBeCreated;
|
|
24
|
+
_tag = 'DatasetVersionFailure';
|
|
25
|
+
constructor(message, mayBeCreated) {
|
|
26
|
+
super(message);
|
|
27
|
+
this.mayBeCreated = mayBeCreated;
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
async function appErrorOf(response) {
|
|
31
|
+
try {
|
|
32
|
+
const payload = await response.json();
|
|
33
|
+
return isJsonErrorResponsePayload(response, payload) ? payload.error : null;
|
|
34
|
+
}
|
|
35
|
+
catch {
|
|
36
|
+
return null;
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
// One request, never retried: a retry after an unknown outcome could add a
|
|
40
|
+
// second version.
|
|
41
|
+
export function datasetVersionSnapshot(datasetId, options, timeoutMs) {
|
|
42
|
+
return Effect.suspend(() => {
|
|
43
|
+
let sent = false;
|
|
44
|
+
let timedOut = false;
|
|
45
|
+
return Effect.tryPromise({
|
|
46
|
+
try: async (signal) => {
|
|
47
|
+
const request = new AbortController();
|
|
48
|
+
const abort = () => request.abort();
|
|
49
|
+
const timer = setTimeout(() => { timedOut = true; request.abort(); }, timeoutMs);
|
|
50
|
+
if (signal.aborted)
|
|
51
|
+
abort();
|
|
52
|
+
else
|
|
53
|
+
signal.addEventListener('abort', abort, { once: true });
|
|
54
|
+
try {
|
|
55
|
+
const response = await authedFetch(`/api/cli/datasets/${encodeURIComponent(datasetId)}/versions`, {
|
|
56
|
+
method: 'POST',
|
|
57
|
+
headers: { 'Content-Type': 'application/json' },
|
|
58
|
+
body: JSON.stringify({
|
|
59
|
+
...(options.versionLabel ? { versionLabel: options.versionLabel } : {}),
|
|
60
|
+
...(options.readmeMarkdown !== undefined && options.readmeMarkdown !== null
|
|
61
|
+
? { readmeMarkdown: options.readmeMarkdown }
|
|
62
|
+
: {}),
|
|
63
|
+
}),
|
|
64
|
+
signal: request.signal,
|
|
65
|
+
}, () => { sent = true; });
|
|
66
|
+
if (!response.ok) {
|
|
67
|
+
const serverError = await appErrorOf(response.clone());
|
|
68
|
+
const message = `Failed to create dataset version: ${await extractErrorMessage(response)}`;
|
|
69
|
+
throw new DatasetVersionFailure(message, response.status < 400 || serverError === SERVER_MAY_BE_CREATED || (response.status >= 500 && serverError === null));
|
|
70
|
+
}
|
|
71
|
+
const data = await parseJsonResponse(response, 'Dataset version create');
|
|
72
|
+
const decoded = Schema.decodeUnknownResult(CreateReply)(data);
|
|
73
|
+
if (Result.isFailure(decoded)) {
|
|
74
|
+
throw new DatasetVersionFailure(`Dataset version create returned an unexpected response (status ${response.status}).`, true);
|
|
75
|
+
}
|
|
76
|
+
return decoded.success;
|
|
77
|
+
}
|
|
78
|
+
finally {
|
|
79
|
+
clearTimeout(timer);
|
|
80
|
+
signal.removeEventListener('abort', abort);
|
|
81
|
+
request.abort();
|
|
82
|
+
}
|
|
83
|
+
},
|
|
84
|
+
catch: cause => {
|
|
85
|
+
if (timedOut)
|
|
86
|
+
return new DatasetVersionFailure('DATASET_TRANSFER_TIMEOUT: Dataset version create exceeded its deadline', sent);
|
|
87
|
+
if (cause instanceof DatasetVersionFailure)
|
|
88
|
+
return cause;
|
|
89
|
+
return new DatasetVersionFailure(cause instanceof Error ? cause.message : String(cause), sent);
|
|
90
|
+
},
|
|
91
|
+
});
|
|
92
|
+
});
|
|
93
|
+
}
|
|
94
|
+
export async function createDatasetVersionSnapshot(datasetId, options) {
|
|
95
|
+
const exit = await Effect.runPromiseExit(datasetVersionSnapshot(datasetId, options, datasetTransferTimeoutMs()).pipe(Effect.mapError(failure => new Error(failure.mayBeCreated ? `${failure.message}\n${VERSION_MAY_BE_CREATED}` : failure.message))));
|
|
96
|
+
if (Exit.isSuccess(exit))
|
|
97
|
+
return exit.value;
|
|
98
|
+
throw Cause.squash(exit.cause);
|
|
99
|
+
}
|
package/dist/feedback-cli.js
CHANGED
|
@@ -307,8 +307,8 @@ function resolveProjectContext(explicitProject, workspaceRoot) {
|
|
|
307
307
|
: existingWorkspaceTeamSlug(workspaceRoot);
|
|
308
308
|
return { teamSlug: workspaceTeam, projectSlug: null };
|
|
309
309
|
}
|
|
310
|
-
function lastErrorForContext(configDirectory, serverBaseUrl, teamSlug, now, printErr, scrubNotice) {
|
|
311
|
-
const record = readLastErrorRecord(configDirectory);
|
|
310
|
+
async function lastErrorForContext(configDirectory, serverBaseUrl, teamSlug, now, printErr, scrubNotice) {
|
|
311
|
+
const record = await readLastErrorRecord(configDirectory);
|
|
312
312
|
if (!record || !isLastErrorRecordShape(record))
|
|
313
313
|
return null;
|
|
314
314
|
if (teamSlug === null) {
|
|
@@ -482,7 +482,7 @@ export async function feedbackCommand(args, io) {
|
|
|
482
482
|
const values = { ...fromFile, ...parsed.values };
|
|
483
483
|
const lastError = parsed.suppressLastError
|
|
484
484
|
? null
|
|
485
|
-
: lastErrorForContext(configDirectory, baseUrl, projectContext.teamSlug, now(), io.printErr, scrubNotice);
|
|
485
|
+
: await lastErrorForContext(configDirectory, baseUrl, projectContext.teamSlug, now(), io.printErr, scrubNotice);
|
|
486
486
|
const scrubOptions = { reporterEmail: null, homeDir: homeDirectory, secrets };
|
|
487
487
|
const scrubbedFields = scrubFeedbackValue({
|
|
488
488
|
category: values.category,
|
package/dist/help.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"help.d.ts","sourceRoot":"","sources":["../src/help.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,EAAE,MAAM,CAAA;IACZ,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,UAAU,CAAC,EAAE,OAAO,CAAA;IACpB,OAAO,CAAC,EAAE,MAAM,EAAE,CAAA;CACnB;AAED,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,EAAE,CAAA;IACd,KAAK,EAAE,MAAM,CAAA;IACb,OAAO,EAAE,MAAM,CAAA;IACf,KAAK,EAAE,MAAM,CAAA;IACb,OAAO,CAAC,EAAE,MAAM,EAAE,EAAE,CAAA;IACpB,OAAO,CAAC,EAAE,YAAY,EAAE,CAAA;IACxB,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAA;CACpB;AA0CD,eAAO,MAAM,YAAY,EAAE,aAAa,
|
|
1
|
+
{"version":3,"file":"help.d.ts","sourceRoot":"","sources":["../src/help.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,EAAE,MAAM,CAAA;IACZ,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,UAAU,CAAC,EAAE,OAAO,CAAA;IACpB,OAAO,CAAC,EAAE,MAAM,EAAE,CAAA;CACnB;AAED,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,EAAE,CAAA;IACd,KAAK,EAAE,MAAM,CAAA;IACb,OAAO,EAAE,MAAM,CAAA;IACf,KAAK,EAAE,MAAM,CAAA;IACb,OAAO,CAAC,EAAE,MAAM,EAAE,EAAE,CAAA;IACpB,OAAO,CAAC,EAAE,YAAY,EAAE,CAAA;IACxB,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAA;CACpB;AA0CD,eAAO,MAAM,YAAY,EAAE,aAAa,EAkyCvC,CAAA;AAUD,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,aAAa,GAAG,SAAS,CAMxE;AAED,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,aAAa,EAAE,CAWrE;AAOD,wBAAgB,cAAc,IAAI,MAAM,CA0CvC;AAED,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,MAAM,CAoBtD;AAED,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,aAAa,GAAG,MAAM,CA4B5D;AAED,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,MAAM,CAgBxD;AAED,wBAAgB,eAAe,CAAC,OAAO,EAAE,MAAM;;;;;;;;;;;;;;;;;;;;;EAoB9C"}
|
package/dist/help.js
CHANGED
|
@@ -921,17 +921,43 @@ export const COMMAND_DOCS = [
|
|
|
921
921
|
summary: 'Create a dataset version.',
|
|
922
922
|
group: 'Datasets',
|
|
923
923
|
},
|
|
924
|
+
{
|
|
925
|
+
path: ['datasets', 'splits', 'list'],
|
|
926
|
+
usage: 'orizu datasets splits list <datasetVersionId> [--json]',
|
|
927
|
+
summary: 'Discover saved split sets, partition names and row counts for an immutable dataset version.',
|
|
928
|
+
group: 'Datasets',
|
|
929
|
+
options: [{ name: '--json', help: 'Print saved split sets and partition row counts as JSON.' }],
|
|
930
|
+
examples: ['orizu datasets splits list DATASET_VERSION_ID --json'],
|
|
931
|
+
},
|
|
932
|
+
{
|
|
933
|
+
path: ['datasets', 'splits', 'show'],
|
|
934
|
+
usage: 'orizu datasets splits show <splitSetId> [--json]',
|
|
935
|
+
summary: 'Inspect the pinned version, set identity and exact ordered row membership of every partition, including empty splits.',
|
|
936
|
+
group: 'Datasets',
|
|
937
|
+
options: [{ name: '--json', help: 'Export reusable assignments: name, strategy, seed, metadata and partitions [{name, row_ids}], with source identity for inspection. Import uses the explicit target version.' }],
|
|
938
|
+
examples: ['orizu datasets splits show SPLIT_SET_ID --json > split.json', 'orizu datasets splits create TARGET_DATASET_VERSION_ID --from-file split.json --json'],
|
|
939
|
+
},
|
|
924
940
|
{
|
|
925
941
|
path: ['datasets', 'splits', 'create'],
|
|
926
942
|
usage: 'orizu datasets splits create <datasetVersionId> [--from-file <split.json>] [--json]',
|
|
927
|
-
summary: 'Create a split set for
|
|
943
|
+
summary: 'Create a split set for the explicit target dataset version. --from-file accepts splits show JSON; canonical row IDs must exist in the target.',
|
|
928
944
|
group: 'Datasets',
|
|
929
945
|
},
|
|
930
946
|
{
|
|
931
947
|
path: ['datasets', 'download'],
|
|
932
|
-
usage: 'orizu datasets download [--dataset <datasetId|datasetUrl>] [--project <team/project>] [--format <csv|json|jsonl>] [--out <path>]',
|
|
933
|
-
summary: 'Download
|
|
948
|
+
usage: 'orizu datasets download [--dataset <datasetId|datasetUrl>] [--project <team/project>] [--dataset-version <id> --split-set <id> --split <name>] [--format <csv|json|jsonl>] [--out <path>]',
|
|
949
|
+
summary: 'Download live dataset rows, or one named split from an immutable version with canonical row IDs and existing fields in partition order. Pinned reads require all three selectors and JSON or JSONL; incomplete artifacts fail without falling back to live rows.',
|
|
934
950
|
group: 'Datasets',
|
|
951
|
+
options: [
|
|
952
|
+
{ name: '--dataset <datasetId|datasetUrl>', help: 'Dataset for an existing live download.' },
|
|
953
|
+
{ name: '--project <team/project>', help: 'Project scope for live dataset selection.' },
|
|
954
|
+
{ name: '--dataset-version <id>', help: 'Immutable version for a pinned split download; requires --split-set and --split.' },
|
|
955
|
+
{ name: '--split-set <id>', help: 'Saved assignment set belonging to the selected version.' },
|
|
956
|
+
{ name: '--split <name>', help: 'Exact partition name, for example validation. For names beginning with --, use --split=--validation (also --split=--json or --split=--help).' },
|
|
957
|
+
{ name: '--format <csv|json|jsonl>', help: 'Output format. Pinned split downloads support json and jsonl only.' },
|
|
958
|
+
{ name: '--out <path>', help: 'Write rows to a file.' },
|
|
959
|
+
],
|
|
960
|
+
examples: ['orizu datasets download --dataset-version DATASET_VERSION_ID --split-set SPLIT_SET_ID --split validation --format jsonl --out validation.jsonl', 'orizu datasets download --dataset DATASET_ID --format jsonl --out dataset.jsonl'],
|
|
935
961
|
},
|
|
936
962
|
{
|
|
937
963
|
path: ['datasets', 'append'],
|
package/dist/hosted-boot.d.ts
CHANGED
|
@@ -61,6 +61,7 @@ export declare function resolveHostedBootEnv(env: Record<string, string | undefi
|
|
|
61
61
|
/** The boot-status route is the agent-token route's sibling; swap the trailing
|
|
62
62
|
* path segment. Falls back to appending when the shape is unexpected. */
|
|
63
63
|
export declare function deriveBootStatusUrl(agentTokenUrl: string): string;
|
|
64
|
+
export declare const HOSTED_TURN_PROGRESS_REPORT_MS: number;
|
|
64
65
|
/** Best-effort scrub + truncate for a reported failure reason: never leak the
|
|
65
66
|
* boot secret (the one credential the boot always holds), and keep it short. */
|
|
66
67
|
export declare function redactBootReason(reason: string, bootSecret: string): string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hosted-boot.d.ts","sourceRoot":"","sources":["../src/hosted-boot.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AAkBH,OAAO,EAML,KAAK,iBAAiB,EACtB,KAAK,gBAAgB,EAEtB,MAAM,kBAAkB,CAAA;AAMzB,MAAM,MAAM,SAAS,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,WAAW,KAAK,OAAO,CAAC,QAAQ,CAAC,CAAA;AAW9E,eAAO,MAAM,sBAAsB,uHAMzB,CAAA;AAEV,MAAM,WAAW,aAAa;IAC5B,UAAU,EAAE,MAAM,CAAA;IAClB,aAAa,EAAE,MAAM,CAAA;IACrB;wEACoE;IACpE,aAAa,EAAE,MAAM,CAAA;IACrB,YAAY,EAAE,MAAM,CAAA;IACpB,OAAO,EAAE,MAAM,CAAA;IACf,SAAS,EAAE,MAAM,CAAA;IACjB,gFAAgF;IAChF,KAAK,EAAE,MAAM,GAAG,IAAI,CAAA;IACpB;wCACoC;IACpC,WAAW,EAAE,MAAM,GAAG,IAAI,CAAA;IAC1B,2EAA2E;IAC3E,iBAAiB,EAAE,MAAM,GAAG,IAAI,CAAA;CACjC;AAED;iFACiF;AACjF,wBAAgB,oBAAoB,CAClC,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,GACtC;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,KAAK,EAAE,aAAa,CAAA;CAAE,GAAG;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,OAAO,EAAE,MAAM,EAAE,CAAA;CAAE,CA8BvE;AAED;0EAC0E;AAC1E,wBAAgB,mBAAmB,CAAC,aAAa,EAAE,MAAM,GAAG,MAAM,CAKjE;
|
|
1
|
+
{"version":3,"file":"hosted-boot.d.ts","sourceRoot":"","sources":["../src/hosted-boot.ts"],"names":[],"mappings":"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"}
|
package/dist/hosted-boot.js
CHANGED
|
@@ -102,6 +102,7 @@ export function deriveBootStatusUrl(agentTokenUrl) {
|
|
|
102
102
|
* secret defensively before sending. */
|
|
103
103
|
const MAX_BOOT_REASON_CHARS = 800;
|
|
104
104
|
const TURN_STATUS_ATTEMPT_TIMEOUT_MS = 10_000;
|
|
105
|
+
export const HOSTED_TURN_PROGRESS_REPORT_MS = 5 * 60_000;
|
|
105
106
|
function resolveTestPositiveInteger(processEnv, name, maximum = Number.MAX_SAFE_INTEGER) {
|
|
106
107
|
const configured = processEnv.NODE_ENV === 'test' ? processEnv[name] : undefined;
|
|
107
108
|
if (!configured || !/^\d+$/u.test(configured))
|
|
@@ -982,6 +983,7 @@ export async function runHostedBoot(opts) {
|
|
|
982
983
|
minimumDelayMs: bearerRotationMinimumDelayMs,
|
|
983
984
|
});
|
|
984
985
|
const promptInterruptController = new AbortController();
|
|
986
|
+
let nextProgressAt = now();
|
|
985
987
|
const interruptPollController = new AbortController();
|
|
986
988
|
const interruptPoll = pollHostedSessionDuringTurn({
|
|
987
989
|
baseUrl: env.baseUrl,
|
|
@@ -1008,6 +1010,21 @@ export async function runHostedBoot(opts) {
|
|
|
1008
1010
|
bearerProvider: () => readFile(bearerFileAbs).trim(),
|
|
1009
1011
|
interruptSignal: promptInterruptController.signal,
|
|
1010
1012
|
onDiagnostic: log,
|
|
1013
|
+
onProgress: async () => {
|
|
1014
|
+
if (now() < nextProgressAt)
|
|
1015
|
+
return;
|
|
1016
|
+
nextProgressAt = now() + HOSTED_TURN_PROGRESS_REPORT_MS;
|
|
1017
|
+
try {
|
|
1018
|
+
await postTurnStatus({
|
|
1019
|
+
bootStatusUrl: env.bootStatusUrl, bootSecret: env.bootSecret,
|
|
1020
|
+
status: 'turn_progress', runId: current.runId, fetchImpl, sleep,
|
|
1021
|
+
attemptTimeoutMs: turnStatusAttemptTimeoutMs,
|
|
1022
|
+
});
|
|
1023
|
+
}
|
|
1024
|
+
catch {
|
|
1025
|
+
log('turn progress acknowledgement unavailable');
|
|
1026
|
+
}
|
|
1027
|
+
},
|
|
1011
1028
|
});
|
|
1012
1029
|
}
|
|
1013
1030
|
finally {
|
|
@@ -49,7 +49,7 @@
|
|
|
49
49
|
* would break both ports and must be re-verified.
|
|
50
50
|
*/
|
|
51
51
|
import type { AgentHarness } from './hosted-harness.js';
|
|
52
|
-
export declare const OPENCODE_PINNED_VERSION = "1.
|
|
52
|
+
export declare const OPENCODE_PINNED_VERSION = "1.18.35";
|
|
53
53
|
export declare const DEFAULT_PROMPT_MAX_DURATION_MS = 5400000;
|
|
54
54
|
export type HarnessFetch = (url: string, init?: RequestInit) => Promise<Response>;
|
|
55
55
|
export interface OpenCodeHarnessOptions {
|
|
@@ -128,10 +128,9 @@ export interface AwaitModelResolvableOptions {
|
|
|
128
128
|
model: string;
|
|
129
129
|
fetchImpl?: HarnessFetch;
|
|
130
130
|
/**
|
|
131
|
-
*
|
|
132
|
-
*
|
|
133
|
-
*
|
|
134
|
-
* bridges that window instead of failing a run the refresh would have fixed.
|
|
131
|
+
* Budget for catalog readiness and transient server reads. Hosted startup
|
|
132
|
+
* finishes its validated refresh before spawn; this polling remains a
|
|
133
|
+
* compatibility guard for other callers and startup endpoint delays.
|
|
135
134
|
*/
|
|
136
135
|
timeoutMs?: number;
|
|
137
136
|
pollMs?: number;
|
|
@@ -140,7 +139,7 @@ export interface AwaitModelResolvableOptions {
|
|
|
140
139
|
}
|
|
141
140
|
/**
|
|
142
141
|
* Decide whether the requested model is resolvable by the RUNNING opencode,
|
|
143
|
-
* polling briefly
|
|
142
|
+
* polling briefly for catalog readiness or transient server failures.
|
|
144
143
|
* Fail-open on validator infrastructure, with a DELIBERATE asymmetry on null
|
|
145
144
|
* catalog reads:
|
|
146
145
|
* - null BEFORE any successful read → `skipped` immediately (dead/absent
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hosted-harness-opencode.d.ts","sourceRoot":"","sources":["../src/hosted-harness-opencode.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiDG;
|
|
1
|
+
{"version":3,"file":"hosted-harness-opencode.d.ts","sourceRoot":"","sources":["../src/hosted-harness-opencode.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiDG;AAUH,OAAO,KAAK,EACV,YAAY,EAKb,MAAM,qBAAqB,CAAA;AAS5B,eAAO,MAAM,uBAAuB,YAAY,CAAA;AAUhD,eAAO,MAAM,8BAA8B,UAAY,CAAA;AAQvD,MAAM,MAAM,YAAY,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,WAAW,KAAK,OAAO,CAAC,QAAQ,CAAC,CAAA;AAEjF,MAAM,WAAW,sBAAsB;IACrC,4EAA4E;IAC5E,OAAO,EAAE,MAAM,CAAA;IACf,SAAS,CAAC,EAAE,YAAY,CAAA;IACxB,uEAAuE;IACvE,eAAe,CAAC,EAAE,MAAM,CAAA;IACxB,uEAAuE;IACvE,gBAAgB,CAAC,EAAE,MAAM,CAAA;IACzB,8EAA8E;IAC9E,mBAAmB,CAAC,EAAE,MAAM,CAAA;IAC5B,GAAG,CAAC,EAAE,MAAM,MAAM,CAAA;CACnB;AAED;wEACwE;AACxE,eAAO,MAAM,yBAAyB,iCAAiC,CAAA;AAkCvE,wBAAgB,WAAW,CAAC,MAAM,EAAE,KAAK,GAAG,KAAK,GAAG,KAAK,EAAE,KAAK,GAAE,MAAmB,GAAG,MAAM,CAW7F;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,MAAM,GAAG;IAAE,UAAU,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAGzF;AAED,wBAAgB,sBAAsB,CACpC,OAAO,EAAE,MAAM,EACf,KAAK,EAAE,MAAM,GAAG,SAAS,EACzB,iBAAiB,EAAE,MAAM,EACzB,eAAe,EAAE,MAAM,GAAG,SAAS,GAClC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAmBzB;AA2GD,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,sBAAsB,GAAG,YAAY,CA8kBnF;AAuBD,yEAAyE;AACzE,MAAM,MAAM,oBAAoB,GAAG,WAAW,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,CAAC,CAAA;AAIzE;;;;;GAKG;AACH,wBAAsB,yBAAyB,CAC7C,OAAO,EAAE,MAAM,EACf,SAAS,GAAE,YAA+C,EAC1D,SAAS,GAAE,MAAyC,GACnD,OAAO,CAAC,oBAAoB,GAAG,IAAI,CAAC,CAuBtC;AASD;;;oEAGoE;AACpE,wBAAgB,qBAAqB,CACnC,SAAS,EAAE,MAAM,EACjB,UAAU,EAAE,SAAS,MAAM,EAAE,EAC7B,KAAK,SAAI,GACR,MAAM,EAAE,CAOV;AAED,MAAM,MAAM,sBAAsB,GAC9B;IAAE,IAAI,EAAE,YAAY,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,GACxC;IACE,IAAI,EAAE,cAAc,CAAA;IACpB,4EAA4E;IAC5E,SAAS,EAAE,MAAM,CAAA;IACjB,gEAAgE;IAChE,YAAY,EAAE,MAAM,EAAE,CAAA;IACtB,gEAAgE;IAChE,aAAa,EAAE,OAAO,CAAA;IACtB,QAAQ,EAAE,MAAM,CAAA;CACjB,GACD;IAAE,IAAI,EAAE,SAAS,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAA;AAEvC,MAAM,WAAW,2BAA2B;IAC1C,gDAAgD;IAChD,OAAO,EAAE,MAAM,CAAA;IACf,wEAAwE;IACxE,KAAK,EAAE,MAAM,CAAA;IACb,SAAS,CAAC,EAAE,YAAY,CAAA;IACxB;;;;OAIG;IACH,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,KAAK,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;IACrC,GAAG,CAAC,EAAE,MAAM,MAAM,CAAA;CACnB;AAKD;;;;;;;;;;;;;;GAcG;AACH,wBAAsB,4BAA4B,CAChD,IAAI,EAAE,2BAA2B,GAChC,OAAO,CAAC,sBAAsB,CAAC,CAqDjC;AAID,MAAM,WAAW,qBAAqB;IACpC,yEAAyE;IACzE,KAAK,EAAE,MAAM,CAAA;IACb;qEACiE;IACjE,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;CACrC;AAED;;;;;;;GAOG;AACH,eAAO,MAAM,qBAAqB,uBAAwB,CAAA;AAE1D;iDACiD;AACjD,wBAAgB,yBAAyB,IAAI,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAInE;AAED,gFAAgF;AAChF,wBAAgB,mBAAmB,CAAC,MAAM,CAAC,EAAE,YAAY,GAAG,KAAK,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAG1F;AAED;;;;GAIG;AACH,wBAAgB,0BAA0B,CAAC,IAAI,EAAE,qBAAqB,GAAG,MAAM,CAO9E;AAED,MAAM,WAAW,oBAAqB,SAAQ,qBAAqB;IACjE,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,yDAAyD;IACzD,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,0DAA0D;IAC1D,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IAC5B,8EAA8E;IAC9E,KAAK,CAAC,EAAE,CACN,GAAG,EAAE,MAAM,EAAE,EACb,IAAI,EAAE;QAAE,GAAG,CAAC,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAA;KAAE,KAClE;QAAE,IAAI,EAAE,MAAM,IAAI,CAAA;KAAE,CAAA;IACzB;;sDAEkD;IAClD,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB;;6CAEyC;IACzC,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB,4DAA4D;IAC5D,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,oEAAoE;IACpE,MAAM,CAAC,EAAE,WAAW,CAAA;IACpB,uEAAuE;IACvE,SAAS,CAAC,EAAE,OAAO,KAAK,CAAA;CACzB;AAED,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,MAAM,CAAA;IACf,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,EAAE,MAAM,IAAI,CAAA;IAChB;8DAC0D;IAC1D,YAAY,CAAC,EAAE,MAAM,CAAA;CACtB;AAkBD;;;;;;;;;GASG;AACH,wBAAsB,aAAa,CAAC,IAAI,EAAE,oBAAoB,GAAG,OAAO,CAAC,eAAe,CAAC,CAmExF"}
|
|
@@ -49,17 +49,18 @@
|
|
|
49
49
|
* would break both ports and must be re-verified.
|
|
50
50
|
*/
|
|
51
51
|
import { readFileSync } from 'fs';
|
|
52
|
+
import { refreshHostedModels } from '../src/hosted-model-cache.mjs';
|
|
52
53
|
import { HOSTED_AGENT_NAME, HOSTED_AGENT_PROMPT } from './hosted-agent-prompt.js';
|
|
53
|
-
import {
|
|
54
|
+
import { parseModelIdentity } from './provider-registry.js';
|
|
54
55
|
import { HARNESS_NAMES } from './hosted-harness.js';
|
|
55
56
|
// OpenCode is HARD-PINNED to this version everywhere it is installed/launched.
|
|
56
|
-
//
|
|
57
|
-
//
|
|
58
|
-
//
|
|
59
|
-
//
|
|
60
|
-
//
|
|
61
|
-
//
|
|
62
|
-
export const OPENCODE_PINNED_VERSION = '1.
|
|
57
|
+
// The event model rides OpenCode's undocumented `/event` SSE part schema
|
|
58
|
+
// (`message.part.updated`, `session.idle`, `session.error`, `session.updated`,
|
|
59
|
+
// ...), so every bump must pass test/cli/hosted-opencode-contract-real.test.ts
|
|
60
|
+
// against the real binary (the path-gated `opencode-real` CI job runs it when
|
|
61
|
+
// this pin changes). 1.14.41 → 1.18.35 was measured and checked that way
|
|
62
|
+
// (ORI-2523). The AgentHarness seam remains the mitigation of last resort.
|
|
63
|
+
export const OPENCODE_PINNED_VERSION = '1.18.35';
|
|
63
64
|
const DEFAULT_OPENCODE_PORT = 4096;
|
|
64
65
|
const DEFAULT_SSE_INACTIVITY_MS = 120_000;
|
|
65
66
|
const DEFAULT_REQUEST_TIMEOUT_MS = 30_000;
|
|
@@ -116,16 +117,6 @@ export function ascendingId(prefix, nowMs = Date.now()) {
|
|
|
116
117
|
const hex = encoded.toString(16).padStart(12, '0');
|
|
117
118
|
return `${prefix}_${hex}${randomBase62(14)}`;
|
|
118
119
|
}
|
|
119
|
-
// -- Anthropic / OpenAI reasoning-effort mapping (port of bridge.py) ---------
|
|
120
|
-
const ANTHROPIC_THINKING_BUDGETS = { high: 16_000, max: 31_999 };
|
|
121
|
-
const ANTHROPIC_ADAPTIVE_THINKING_MODELS = new Set([
|
|
122
|
-
'claude-fable-5',
|
|
123
|
-
'claude-opus-4-6',
|
|
124
|
-
'claude-opus-4-7',
|
|
125
|
-
'claude-opus-4-8',
|
|
126
|
-
'claude-sonnet-4-6',
|
|
127
|
-
]);
|
|
128
|
-
const ANTHROPIC_ADAPTIVE_EFFORTS = new Set(['low', 'medium', 'high', 'xhigh', 'max']);
|
|
129
120
|
/**
|
|
130
121
|
* Split a possibly provider-qualified model string into provider + model id,
|
|
131
122
|
* through THE registry parse (`parseModelIdentity`, ORI-2031): the provider is
|
|
@@ -158,35 +149,14 @@ export function buildPromptRequestBody(content, model, opencodeMessageId, reason
|
|
|
158
149
|
// Shared parse (see qualifyHostedModel): keeps the prompt path and the
|
|
159
150
|
// ALI-1086 pre-prompt validation in lockstep by construction.
|
|
160
151
|
const { providerId, modelId } = qualifyHostedModel(model);
|
|
161
|
-
|
|
162
|
-
// Reasoning
|
|
163
|
-
//
|
|
164
|
-
//
|
|
165
|
-
//
|
|
166
|
-
//
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
if (reasoningEffort) {
|
|
170
|
-
if (protocol === 'anthropic-messages') {
|
|
171
|
-
if (ANTHROPIC_ADAPTIVE_THINKING_MODELS.has(modelId)) {
|
|
172
|
-
const options = { thinking: { type: 'adaptive' } };
|
|
173
|
-
if (ANTHROPIC_ADAPTIVE_EFFORTS.has(reasoningEffort)) {
|
|
174
|
-
options.outputConfig = { effort: reasoningEffort };
|
|
175
|
-
}
|
|
176
|
-
modelSpec.options = options;
|
|
177
|
-
}
|
|
178
|
-
else {
|
|
179
|
-
const budget = ANTHROPIC_THINKING_BUDGETS[reasoningEffort];
|
|
180
|
-
if (budget !== undefined) {
|
|
181
|
-
modelSpec.options = { thinking: { type: 'enabled', budgetTokens: budget } };
|
|
182
|
-
}
|
|
183
|
-
}
|
|
184
|
-
}
|
|
185
|
-
else if (protocol === 'openai-responses') {
|
|
186
|
-
modelSpec.options = { reasoningEffort, reasoningSummary: 'auto' };
|
|
187
|
-
}
|
|
188
|
-
}
|
|
189
|
-
body.model = modelSpec;
|
|
152
|
+
body.model = { providerID: providerId, modelID: modelId };
|
|
153
|
+
// Reasoning effort travels as the top-level `variant` (ORI-2526). OpenCode's
|
|
154
|
+
// prompt body accepts only providerID/modelID inside `model` and silently
|
|
155
|
+
// dropped the options we used to send there. Each model's variants map the
|
|
156
|
+
// effort onto its own request fields; an effort the model has no variant for
|
|
157
|
+
// is ignored by OpenCode, so no per-provider mapping lives here.
|
|
158
|
+
if (reasoningEffort)
|
|
159
|
+
body.variant = reasoningEffort;
|
|
190
160
|
return body;
|
|
191
161
|
}
|
|
192
162
|
// -- OpenCode part → HarnessEvent transform (port of _transform_part_to_event) -
|
|
@@ -506,6 +476,8 @@ export function createOpenCodeHarness(options) {
|
|
|
506
476
|
const userMessageIds = new Set([opencodeMessageId]);
|
|
507
477
|
const pendingParts = new Map();
|
|
508
478
|
const emittedToolStates = new Set();
|
|
479
|
+
const partTypes = new Map();
|
|
480
|
+
const untypedDeltas = new Map();
|
|
509
481
|
const handlePart = (part, delta) => {
|
|
510
482
|
const partType = typeof part.type === 'string' ? part.type : '';
|
|
511
483
|
const partId = typeof part.id === 'string' ? part.id : '';
|
|
@@ -710,18 +682,56 @@ export function createOpenCodeHarness(options) {
|
|
|
710
682
|
}
|
|
711
683
|
}
|
|
712
684
|
}
|
|
713
|
-
else if (eventType === 'message.part.updated') {
|
|
714
|
-
|
|
715
|
-
|
|
716
|
-
|
|
717
|
-
|
|
718
|
-
|
|
719
|
-
|
|
685
|
+
else if (eventType === 'message.part.updated' || eventType === 'message.part.delta') {
|
|
686
|
+
// Word-by-word text arrives as `message.part.delta` (ORI-2525), which
|
|
687
|
+
// names the part but not its type. Reasoning parts send deltas too,
|
|
688
|
+
// so a delta streams only once its part is known to be text. A delta
|
|
689
|
+
// can overtake its part's announcement (opencode #26924); it waits
|
|
690
|
+
// here until the announcement says what the part is.
|
|
691
|
+
const updates = [];
|
|
692
|
+
if (eventType === 'message.part.updated') {
|
|
693
|
+
const part = asRecord(props.part);
|
|
694
|
+
const partId = typeof part.id === 'string' ? part.id : '';
|
|
695
|
+
updates.push({ part, delta: props.delta });
|
|
696
|
+
if (partId && typeof part.type === 'string')
|
|
697
|
+
partTypes.set(partId, part.type);
|
|
698
|
+
const early = untypedDeltas.get(partId);
|
|
699
|
+
if (early) {
|
|
700
|
+
untypedDeltas.delete(partId);
|
|
701
|
+
const announced = typeof part.text === 'string' ? part.text : '';
|
|
702
|
+
// Replay unless the announced text already includes them.
|
|
703
|
+
if (part.type === 'text' && !announced.startsWith(early.join(''))) {
|
|
704
|
+
for (const delta of early) {
|
|
705
|
+
updates.push({ part: { type: 'text', id: partId, messageID: part.messageID }, delta });
|
|
706
|
+
}
|
|
707
|
+
}
|
|
708
|
+
}
|
|
720
709
|
}
|
|
721
|
-
else
|
|
722
|
-
const
|
|
723
|
-
|
|
724
|
-
|
|
710
|
+
else {
|
|
711
|
+
const partId = typeof props.partID === 'string' ? props.partID : '';
|
|
712
|
+
const delta = props.delta;
|
|
713
|
+
if (props.field !== 'text' || !partId || typeof delta !== 'string')
|
|
714
|
+
continue;
|
|
715
|
+
const partType = partTypes.get(partId);
|
|
716
|
+
if (partType === undefined) {
|
|
717
|
+
untypedDeltas.set(partId, [...(untypedDeltas.get(partId) ?? []), delta]);
|
|
718
|
+
continue;
|
|
719
|
+
}
|
|
720
|
+
if (partType !== 'text')
|
|
721
|
+
continue;
|
|
722
|
+
updates.push({ part: { type: 'text', id: partId, messageID: props.messageID }, delta });
|
|
723
|
+
}
|
|
724
|
+
for (const { part, delta } of updates) {
|
|
725
|
+
const ocMsgId = typeof part.messageID === 'string' ? part.messageID : '';
|
|
726
|
+
if (allowedAssistantMsgIds.has(ocMsgId)) {
|
|
727
|
+
for (const ev of handlePart(part, delta))
|
|
728
|
+
yield ev;
|
|
729
|
+
}
|
|
730
|
+
else if (ocMsgId) {
|
|
731
|
+
const list = pendingParts.get(ocMsgId) ?? [];
|
|
732
|
+
list.push({ part, delta });
|
|
733
|
+
pendingParts.set(ocMsgId, list);
|
|
734
|
+
}
|
|
725
735
|
}
|
|
726
736
|
}
|
|
727
737
|
else if (eventType === 'session.compacted') {
|
|
@@ -895,7 +905,7 @@ const MODEL_RESOLVE_TIMEOUT_MS = 30_000;
|
|
|
895
905
|
const MODEL_RESOLVE_POLL_MS = 2_000;
|
|
896
906
|
/**
|
|
897
907
|
* Decide whether the requested model is resolvable by the RUNNING opencode,
|
|
898
|
-
* polling briefly
|
|
908
|
+
* polling briefly for catalog readiness or transient server failures.
|
|
899
909
|
* Fail-open on validator infrastructure, with a DELIBERATE asymmetry on null
|
|
900
910
|
* catalog reads:
|
|
901
911
|
* - null BEFORE any successful read → `skipped` immediately (dead/absent
|
|
@@ -1029,7 +1039,11 @@ export async function spawnOpenCode(opts) {
|
|
|
1029
1039
|
const env = {
|
|
1030
1040
|
OPENCODE_CONFIG_CONTENT: buildOpenCodeConfigContent(opts),
|
|
1031
1041
|
...(opts.env ?? {}),
|
|
1042
|
+
OPENCODE_DISABLE_MODELS_FETCH: '1',
|
|
1032
1043
|
};
|
|
1044
|
+
const model = qualifyHostedModel(opts.model);
|
|
1045
|
+
env.OPENCODE_MODELS_PATH = await refreshHostedModels({ env: { ...process.env, ...env }, required: [`${model.providerId}/${model.modelId}`], fetchImpl: opts.fetchImpl, signal: opts.signal });
|
|
1046
|
+
opts.signal?.throwIfAborted();
|
|
1033
1047
|
const cmd = ['opencode', 'serve', '--port', String(port)];
|
|
1034
1048
|
const spawnImpl = opts.spawn ??
|
|
1035
1049
|
((command, spawnOpts) => {
|
|
@@ -30,17 +30,12 @@ import type { HostedSessionOrigin } from './hosted-runtime-assets.js';
|
|
|
30
30
|
* re-inline it.
|
|
31
31
|
*
|
|
32
32
|
* PIN CONSTRAINT: the hosted OpenCode runtime is HARD-PINNED to
|
|
33
|
-
* `opencode-ai@1.
|
|
34
|
-
*
|
|
35
|
-
*
|
|
36
|
-
*
|
|
37
|
-
*
|
|
38
|
-
*
|
|
39
|
-
* allowlist (#1392, `ORIZU_HOSTED_EGRESS_ALLOWLIST`) this id resolves in new
|
|
40
|
-
* sandboxes. If the catalog fetch is blocked/stale anyway, the loop's
|
|
41
|
-
* pre-prompt validation (`awaitOpenCodeModelResolvable`) fails the run fast,
|
|
42
|
-
* naming the resolvable alternatives. The durable fix for the stale bundled
|
|
43
|
-
* catalog is the ALI-929 harness swap.
|
|
33
|
+
* `OPENCODE_PINNED_VERSION` (opencode-ai@1.18.35, whose bundled catalog
|
|
34
|
+
* includes this model; bumps are checked by the real-binary contract test,
|
|
35
|
+
* ORI-2523). Images also bake a validated models.dev
|
|
36
|
+
* list into the runtime user's cache. Orizu refreshes that cache before spawning
|
|
37
|
+
* OpenCode, preserving baked models on failure; the native unchecked writer is
|
|
38
|
+
* disabled (ORI-2513). Pre-prompt validation still checks the running server.
|
|
44
39
|
*/
|
|
45
40
|
export declare const DEFAULT_HOSTED_MODEL = "anthropic/claude-opus-4-8";
|
|
46
41
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hosted-loop-lifecycle.d.ts","sourceRoot":"","sources":["../src/hosted-loop-lifecycle.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAA;AACvD,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAA;AAErE
|
|
1
|
+
{"version":3,"file":"hosted-loop-lifecycle.d.ts","sourceRoot":"","sources":["../src/hosted-loop-lifecycle.ts"],"names":[],"mappings":"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"}
|
|
@@ -28,17 +28,12 @@
|
|
|
28
28
|
* re-inline it.
|
|
29
29
|
*
|
|
30
30
|
* PIN CONSTRAINT: the hosted OpenCode runtime is HARD-PINNED to
|
|
31
|
-
* `opencode-ai@1.
|
|
32
|
-
*
|
|
33
|
-
*
|
|
34
|
-
*
|
|
35
|
-
*
|
|
36
|
-
*
|
|
37
|
-
* allowlist (#1392, `ORIZU_HOSTED_EGRESS_ALLOWLIST`) this id resolves in new
|
|
38
|
-
* sandboxes. If the catalog fetch is blocked/stale anyway, the loop's
|
|
39
|
-
* pre-prompt validation (`awaitOpenCodeModelResolvable`) fails the run fast,
|
|
40
|
-
* naming the resolvable alternatives. The durable fix for the stale bundled
|
|
41
|
-
* catalog is the ALI-929 harness swap.
|
|
31
|
+
* `OPENCODE_PINNED_VERSION` (opencode-ai@1.18.35, whose bundled catalog
|
|
32
|
+
* includes this model; bumps are checked by the real-binary contract test,
|
|
33
|
+
* ORI-2523). Images also bake a validated models.dev
|
|
34
|
+
* list into the runtime user's cache. Orizu refreshes that cache before spawning
|
|
35
|
+
* OpenCode, preserving baked models on failure; the native unchecked writer is
|
|
36
|
+
* disabled (ORI-2513). Pre-prompt validation still checks the running server.
|
|
42
37
|
*/
|
|
43
38
|
export const DEFAULT_HOSTED_MODEL = 'anthropic/claude-opus-4-8';
|
|
44
39
|
/**
|
package/dist/hosted-loop.d.ts
CHANGED
|
@@ -159,6 +159,8 @@ export interface RunHostedLoopOptions {
|
|
|
159
159
|
/** Value-free local diagnostics shared with the event sink. Production routes
|
|
160
160
|
* this through hosted-boot's stderr seam; consumer failures are ignored. */
|
|
161
161
|
onDiagnostic?: (message: string) => void;
|
|
162
|
+
/** Report genuine harness activity to the session's progress watchdog. */
|
|
163
|
+
onProgress?: () => Promise<void>;
|
|
162
164
|
}
|
|
163
165
|
export interface HostedLoopResult {
|
|
164
166
|
status: TerminalStatus;
|
|
@@ -190,6 +192,13 @@ export declare const TERMINAL_DELIVERY_RETRY_DELAYS_MS: readonly number[];
|
|
|
190
192
|
* (model key + connector credentials) lands on the run-event redaction list.
|
|
191
193
|
*/
|
|
192
194
|
export { INJECTED_ENV_VARS_ENV } from './hosted-environment.js';
|
|
195
|
+
/** Best-effort global install of the pinned opencode. Non-fatal: a failure is
|
|
196
|
+
* recorded and the run finishes cleanly when the subsequent connect fails.
|
|
197
|
+
* From 1.18 opencode's postinstall script writes the `opencode` command, and
|
|
198
|
+
* npm 12 blocks it unless allowed, leaving a placeholder that exits 1; so npm
|
|
199
|
+
* allows that one script and the result must print the pinned version
|
|
200
|
+
* (ORI-2523). `env` exists for tests. */
|
|
201
|
+
export declare function installOpenCodePinned(version: string, env?: NodeJS.ProcessEnv): InstallResult;
|
|
193
202
|
export declare function runHostedLoop(opts: RunHostedLoopOptions): Promise<HostedLoopResult>;
|
|
194
203
|
export declare function startHostedLoopSession(context: HostedLoopSessionContext): Promise<HostedLoopSessionHandle>;
|
|
195
204
|
export declare function runHostedLoopTurn(session: HostedLoopSessionHandle, turn: HostedLoopTurnContext, options: Omit<RunHostedLoopOptions, 'context' | 'taskPrompt' | 'sharedRuntime'> & {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hosted-loop.d.ts","sourceRoot":"","sources":["../src/hosted-loop.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"hosted-loop.d.ts","sourceRoot":"","sources":["../src/hosted-loop.ts"],"names":[],"mappings":"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"}
|