orizu 0.5.26 → 0.5.28
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 +19 -0
- package/dist/artifacts-git-runtime.d.ts +34 -0
- package/dist/artifacts-git-runtime.d.ts.map +1 -0
- package/dist/artifacts-git-runtime.js +312 -0
- package/dist/cloudflare-artifacts-git-remote.d.ts +5 -0
- package/dist/cloudflare-artifacts-git-remote.d.ts.map +1 -0
- package/dist/cloudflare-artifacts-git-remote.js +21 -0
- package/dist/dataset-transfer-download.d.ts +2 -0
- package/dist/dataset-transfer-download.d.ts.map +1 -0
- package/dist/dataset-transfer-download.js +66 -0
- package/dist/dataset-transfer-policy.d.ts +2 -0
- package/dist/dataset-transfer-policy.d.ts.map +1 -0
- package/dist/dataset-transfer-policy.js +8 -0
- package/dist/dataset-transfer-upload.d.ts +42 -0
- package/dist/dataset-transfer-upload.d.ts.map +1 -0
- package/dist/dataset-transfer-upload.js +110 -0
- package/dist/git-credential.d.ts.map +1 -1
- package/dist/git-credential.js +1 -1
- package/dist/git-recovery-environment.d.ts +1 -0
- package/dist/git-recovery-environment.d.ts.map +1 -1
- package/dist/git-recovery-environment.js +1 -1
- package/dist/help.d.ts.map +1 -1
- package/dist/help.js +44 -11
- package/dist/hosted-boot.d.ts +75 -2
- package/dist/hosted-boot.d.ts.map +1 -1
- package/dist/hosted-boot.js +585 -102
- package/dist/hosted-bootstrap.d.ts +2 -0
- package/dist/hosted-bootstrap.d.ts.map +1 -1
- package/dist/hosted-bootstrap.js +12 -3
- package/dist/hosted-harness-opencode.d.ts +8 -9
- package/dist/hosted-harness-opencode.d.ts.map +1 -1
- package/dist/hosted-harness-opencode.js +126 -24
- package/dist/hosted-harness.d.ts +3 -0
- package/dist/hosted-harness.d.ts.map +1 -1
- package/dist/hosted-harness.js +4 -1
- package/dist/hosted-harvest.d.ts +30 -9
- package/dist/hosted-harvest.d.ts.map +1 -1
- package/dist/hosted-harvest.js +222 -28
- package/dist/hosted-loop-lifecycle.d.ts +15 -3
- package/dist/hosted-loop-lifecycle.d.ts.map +1 -1
- package/dist/hosted-loop-lifecycle.js +6 -4
- package/dist/hosted-loop.d.ts +47 -7
- package/dist/hosted-loop.d.ts.map +1 -1
- package/dist/hosted-loop.js +310 -64
- package/dist/hosted-question-limits.d.ts +7 -0
- package/dist/hosted-question-limits.d.ts.map +1 -0
- package/dist/hosted-question-limits.js +6 -0
- package/dist/hosted-question.d.ts +27 -0
- package/dist/hosted-question.d.ts.map +1 -0
- package/dist/hosted-question.js +118 -0
- package/dist/hosted-run-event-sink.d.ts +10 -5
- package/dist/hosted-run-event-sink.d.ts.map +1 -1
- package/dist/hosted-run-event-sink.js +12 -8
- package/dist/hosted-runtime-assets.d.ts +16 -7
- package/dist/hosted-runtime-assets.d.ts.map +1 -1
- package/dist/hosted-runtime-assets.js +40 -12
- package/dist/hosted-session-cli.d.ts.map +1 -1
- package/dist/hosted-session-cli.js +10 -19
- package/dist/http.d.ts +1 -1
- package/dist/http.d.ts.map +1 -1
- package/dist/http.js +10 -4
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +113 -92
- package/dist/instruction-set-gepa-launch.d.ts +1 -1
- package/dist/instruction-set-gepa-launch.d.ts.map +1 -1
- package/dist/instruction-set-gepa-launch.js +5 -3
- package/dist/instruction-set-loader.d.ts.map +1 -1
- package/dist/instruction-set-loader.js +63 -2
- package/dist/instruction-set-lock/index.d.ts +51 -0
- package/dist/instruction-set-lock/index.d.ts.map +1 -0
- package/dist/instruction-set-lock/index.js +459 -0
- package/dist/instruction-set-lock/schema.v1.d.ts +136 -0
- package/dist/instruction-set-lock/schema.v1.d.ts.map +1 -0
- package/dist/instruction-set-lock/schema.v1.js +155 -0
- package/dist/instruction-set-provenance.d.ts +26 -0
- package/dist/instruction-set-provenance.d.ts.map +1 -0
- package/dist/instruction-set-provenance.js +68 -0
- package/dist/instruction-set-sync/helpers.d.ts +22 -0
- package/dist/instruction-set-sync/helpers.d.ts.map +1 -0
- package/dist/instruction-set-sync/helpers.js +677 -0
- package/dist/instruction-set-sync/index.d.ts +60 -0
- package/dist/instruction-set-sync/index.d.ts.map +1 -0
- package/dist/instruction-set-sync/index.js +689 -0
- package/dist/instruction-set-update/index.d.ts +42 -0
- package/dist/instruction-set-update/index.d.ts.map +1 -0
- package/dist/instruction-set-update/index.js +445 -0
- package/dist/instruction-set-verify/index.d.ts +27 -0
- package/dist/instruction-set-verify/index.d.ts.map +1 -0
- package/dist/instruction-set-verify/index.js +865 -0
- package/dist/instruction-sets-cli.d.ts +1 -4
- package/dist/instruction-sets-cli.d.ts.map +1 -1
- package/dist/instruction-sets-cli.js +220 -109
- package/dist/model-config-fields.d.ts +35 -0
- package/dist/model-config-fields.d.ts.map +1 -0
- package/dist/model-config-fields.js +28 -0
- package/dist/optimizations-list-cli.d.ts.map +1 -1
- package/dist/optimizations-list-cli.js +7 -4
- package/dist/score-format.d.ts +2 -0
- package/dist/score-format.d.ts.map +1 -0
- package/dist/score-format.js +18 -0
- package/dist/workbench-repo-contract.d.ts +65 -0
- package/dist/workbench-repo-contract.d.ts.map +1 -0
- package/dist/workbench-repo-contract.js +250 -0
- package/dist/workspace-bootstrap-job.d.ts +45 -0
- package/dist/workspace-bootstrap-job.d.ts.map +1 -0
- package/dist/workspace-bootstrap-job.js +431 -0
- package/dist/workspace-bootstrap-seed.d.ts +74 -0
- package/dist/workspace-bootstrap-seed.d.ts.map +1 -0
- package/dist/workspace-bootstrap-seed.js +209 -0
- package/package.json +4 -3
- package/src/artifacts-git-runtime.ts +360 -0
- package/src/cloudflare-artifacts-git-remote.ts +24 -0
- package/src/dataset-transfer-download.ts +61 -0
- package/src/dataset-transfer-policy.ts +8 -0
- package/src/dataset-transfer-upload.ts +145 -0
- package/src/git-credential.ts +1 -2
- package/src/git-recovery-environment.ts +1 -1
- package/src/help.ts +44 -11
- package/src/hosted-boot.ts +644 -109
- package/src/hosted-bootstrap.ts +14 -3
- package/src/hosted-harness-opencode.ts +130 -28
- package/src/hosted-harness.ts +4 -1
- package/src/hosted-harvest.ts +258 -33
- package/src/hosted-loop-lifecycle.ts +19 -5
- package/src/hosted-loop.ts +340 -68
- package/src/hosted-question-limits.ts +6 -0
- package/src/hosted-question.ts +145 -0
- package/src/hosted-run-event-sink.ts +24 -12
- package/src/hosted-runtime-assets.ts +51 -11
- package/src/hosted-session-cli.ts +10 -24
- package/src/http.ts +10 -4
- package/src/index.ts +108 -134
- package/src/instruction-set-gepa-launch.ts +4 -4
- package/src/instruction-set-loader.ts +53 -2
- package/src/instruction-set-lock/index.ts +561 -0
- package/src/instruction-set-lock/schema.v1.json +141 -0
- package/src/instruction-set-lock/schema.v1.ts +155 -0
- package/src/instruction-set-provenance.ts +89 -0
- package/src/instruction-set-sync/helpers.ts +707 -0
- package/src/instruction-set-sync/index.ts +791 -0
- package/src/instruction-set-update/index.ts +488 -0
- package/src/instruction-set-verify/index.ts +1067 -0
- package/src/instruction-sets-cli.ts +226 -114
- package/src/model-config-fields.ts +31 -0
- package/src/optimizations-list-cli.ts +7 -4
- package/src/score-format.ts +16 -0
- package/src/workbench-repo-contract.ts +314 -0
- package/src/workspace-bootstrap-job.ts +611 -0
- package/src/workspace-bootstrap-seed.ts +350 -0
- package/vendor/orizu-gepa/src/orizu_gepa_connector/instruction_set_loader.py +46 -2
- package/vendor/skills/orizu/SKILL.md +4 -2
- package/vendor/skills/orizu/flows/promote.md +4 -0
- package/vendor/skills/orizu/references/assess-and-plan.md +1 -1
- package/vendor/skills/orizu/references/authority-map.md +1 -1
- package/vendor/skills/orizu/references/cli-reference.md +151 -35
- package/vendor/skills/orizu/references/instructions-after-prompts.md +3 -3
- package/vendor/skills/orizu/references/migrate-existing-gepa-setup.md +5 -6
- package/vendor/skills/orizu/references/migrate-hand-rolled-instruction-layout.md +252 -0
- package/vendor/skills/orizu/references/optimization-reports.md +5 -4
- package/vendor/skills/orizu/references/optimization-with-gepa.md +1 -1
- package/vendor/skills/orizu/references/orizu-in-your-codebase.md +195 -0
- package/vendor/skills/orizu/references/primer.md +4 -2
- package/vendor/skills/orizu/references/prompt-control-plane.md +33 -29
- package/vendor/skills/orizu/references/vocabulary.md +1 -1
package/dist/index.js
CHANGED
|
@@ -16,13 +16,13 @@ import { parseDatasetFile } from './file-parser.js';
|
|
|
16
16
|
import { streamJsonlRowChunks } from './jsonl-stream.js';
|
|
17
17
|
import { parseDatasetReference } from './dataset-download.js';
|
|
18
18
|
import { editDatasetRows as runEditDatasetRows } from './dataset-edit-rows.js';
|
|
19
|
-
import { ensureDatasetUploadSnapshot } from './dataset-upload-snapshot.js';
|
|
20
19
|
import { extractErrorMessage } from './error-response.js';
|
|
21
20
|
import { describeLogoutHttpFailure, describeLogoutTransportFailure, } from './logout-diagnostic.js';
|
|
22
21
|
import { parseGlobalFlags } from './global-flags.js';
|
|
23
22
|
import { shouldUseHeadlessLogin, waitForHeadlessAuthorization } from './headless-login.js';
|
|
24
23
|
import { getCapabilities, renderHelpForArgs, renderRootHelp } from './help.js';
|
|
25
24
|
import { runLocalAppPreview } from './preview-runtime.js';
|
|
25
|
+
import { formatScoreForCli } from './score-format.js';
|
|
26
26
|
import { readAssignmentManifestJsonlFile } from './task-assignment-manifest.js';
|
|
27
27
|
import { assertSecureTokenTransport, authedFetch, captureAuthenticatedRequestContext, credentialRequestRedirectPolicy, getBaseUrl, resolveLoginBaseUrl, setGlobalFlags, } from './http.js';
|
|
28
28
|
import { computeSkillContentHash, getSkillInstallPath, getSkillTargetStatus, getTargetForAgent, installSkillTarget, isSkillInstallAgent, isSkillInstallTarget, resolveSkillSource, SKILL_INSTALL_AGENTS, SKILL_INSTALL_TARGETS, targetNeedsOverwrite, } from './skill-installer.js';
|
|
@@ -54,6 +54,7 @@ import { workspaceSyncCommand } from './workspace-sync.js';
|
|
|
54
54
|
import { runGitCredentialInvocation } from './git-credential.js';
|
|
55
55
|
import { instructionSetsCommand, syncToDisk } from './instruction-sets-cli.js';
|
|
56
56
|
export { loadInstructionSet } from './instruction-set-loader.js';
|
|
57
|
+
import { noSubmitScorerOutput, provenanceRequestFields, resolveInstructionSetProvenance } from './instruction-set-provenance.js';
|
|
57
58
|
import { runnerInputInstructionSet, runnerInputPrompt, runnerInstructionSetSyncSet } from './runner-instruction-set-contract.js';
|
|
58
59
|
import { pushPromptDraft } from './prompt-draft-push.js';
|
|
59
60
|
import { readMarkdownReportInput } from './markdown-report-input.js';
|
|
@@ -130,6 +131,31 @@ function getArg(name) {
|
|
|
130
131
|
}
|
|
131
132
|
return cliArgs[index + 1];
|
|
132
133
|
}
|
|
134
|
+
function instructionSetProvenanceFields(project) {
|
|
135
|
+
for (const flag of ['--instructions', '--instructions-root']) {
|
|
136
|
+
if (cliArgs.some(argument => argument.startsWith(`${flag}=`))) {
|
|
137
|
+
throw new Error(`instruction_set_option_equals_form:${flag}`);
|
|
138
|
+
}
|
|
139
|
+
const index = cliArgs.indexOf(flag);
|
|
140
|
+
if (index !== -1) {
|
|
141
|
+
const value = cliArgs[index + 1];
|
|
142
|
+
if (!value || value.startsWith('-')) {
|
|
143
|
+
throw new Error(`instruction_set_option_value_missing:${flag}`);
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
const specifier = getArg('--instructions');
|
|
148
|
+
const root = getArg('--instructions-root');
|
|
149
|
+
if (root && !specifier)
|
|
150
|
+
throw new Error('instruction_set_option_orphan_root:--instructions-root');
|
|
151
|
+
if (!specifier)
|
|
152
|
+
return {};
|
|
153
|
+
return provenanceRequestFields(resolveInstructionSetProvenance({
|
|
154
|
+
specifier,
|
|
155
|
+
root: root || '.',
|
|
156
|
+
project,
|
|
157
|
+
}));
|
|
158
|
+
}
|
|
133
159
|
function getArchiveListStatus(command) {
|
|
134
160
|
const status = getArg('--status') || 'active';
|
|
135
161
|
if (!['active', 'archived', 'all'].includes(status)) {
|
|
@@ -880,9 +906,13 @@ async function showScorerDetail() {
|
|
|
880
906
|
const scorerId = getPositionalArg(2);
|
|
881
907
|
const project = getArg('--project') || await resolveProjectSlug(null);
|
|
882
908
|
if (!scorerId) {
|
|
883
|
-
throw new Error('Usage: orizu scorers detail <scorer-id-or-name> --project <team/project> [--json]');
|
|
909
|
+
throw new Error('Usage: orizu scorers detail <scorer-id-or-name> --project <team/project> [--profile-version <id>] [--json]');
|
|
884
910
|
}
|
|
885
|
-
const
|
|
911
|
+
const scorerParams = new URLSearchParams({ project });
|
|
912
|
+
const profileVersionId = getArg('--profile-version');
|
|
913
|
+
if (profileVersionId)
|
|
914
|
+
scorerParams.set('profileVersionId', profileVersionId);
|
|
915
|
+
const response = await authedFetch(`/api/cli/scorers/${encodeURIComponent(scorerId)}?${scorerParams.toString()}`);
|
|
886
916
|
if (!response.ok) {
|
|
887
917
|
throw new Error(`Failed to fetch scorer: ${await response.text()}`);
|
|
888
918
|
}
|
|
@@ -894,6 +924,44 @@ async function showScorerDetail() {
|
|
|
894
924
|
const scorer = data.scorer;
|
|
895
925
|
printLine(`${sanitizeTerminalText(String(scorer?.name || scorerId))}`);
|
|
896
926
|
printLine(`Metric: ${sanitizeTerminalText(String(scorer?.metricLabel || 'Score'))}`);
|
|
927
|
+
const scoreRuns = Array.isArray(scorer?.scoreRuns) ? scorer.scoreRuns : [];
|
|
928
|
+
for (const value of scoreRuns) {
|
|
929
|
+
if (!value || typeof value !== 'object')
|
|
930
|
+
continue;
|
|
931
|
+
const scoreRun = value;
|
|
932
|
+
const formattedScore = formatScoreForCli(scoreRun.scoreValue, scoreRun.scoreFormat);
|
|
933
|
+
printLine(`Score run ${sanitizeTerminalText(String(scoreRun.id || '?'))}: ${sanitizeTerminalText(formattedScore)} (Profile Version ${sanitizeTerminalText(String(scoreRun.profileVersionId || '—'))})`);
|
|
934
|
+
}
|
|
935
|
+
}
|
|
936
|
+
async function listRuns() {
|
|
937
|
+
const project = getArg('--project') || await resolveProjectSlug(null);
|
|
938
|
+
const params = new URLSearchParams({ project });
|
|
939
|
+
const profileVersionId = getArg('--profile-version');
|
|
940
|
+
const promptVersionId = getArg('--prompt-version');
|
|
941
|
+
const limit = getArg('--limit');
|
|
942
|
+
if (profileVersionId)
|
|
943
|
+
params.set('profileVersionId', profileVersionId);
|
|
944
|
+
if (promptVersionId)
|
|
945
|
+
params.set('promptVersionId', promptVersionId);
|
|
946
|
+
if (limit)
|
|
947
|
+
params.set('limit', limit);
|
|
948
|
+
const response = await authedFetch(`/api/cli/runs?${params.toString()}`);
|
|
949
|
+
if (!response.ok)
|
|
950
|
+
throw new Error(`Failed to fetch runs: ${await response.text()}`);
|
|
951
|
+
const data = await parseJsonResponse(response, 'Runs list');
|
|
952
|
+
if (hasJsonFlag()) {
|
|
953
|
+
printJson(data);
|
|
954
|
+
return;
|
|
955
|
+
}
|
|
956
|
+
for (const run of data.runs) {
|
|
957
|
+
printLine([
|
|
958
|
+
sanitizeTerminalText(String(run.id ?? '?')),
|
|
959
|
+
`prompt ${sanitizeTerminalText(String(run.promptVersionId ?? '—'))}`,
|
|
960
|
+
`split ${sanitizeTerminalText(String(run.splitName ?? '—'))}`,
|
|
961
|
+
`score ${sanitizeTerminalText(formatScoreForCli(run.aggregateScore, 'number'))}`,
|
|
962
|
+
`Profile Version ${sanitizeTerminalText(String(run.profileVersionId ?? '—'))}`,
|
|
963
|
+
].join(' | '));
|
|
964
|
+
}
|
|
897
965
|
}
|
|
898
966
|
async function setScorerLabel() {
|
|
899
967
|
const scorerName = getPositionalArg(3);
|
|
@@ -1300,6 +1368,7 @@ async function submitRunResults() {
|
|
|
1300
1368
|
judgeVersionId: getArg('--judge-version') || undefined,
|
|
1301
1369
|
judgeRunnerVersionId: getArg('--judge-runner-version') || undefined,
|
|
1302
1370
|
resultsJsonl,
|
|
1371
|
+
...instructionSetProvenanceFields(project),
|
|
1303
1372
|
}),
|
|
1304
1373
|
});
|
|
1305
1374
|
if (!response.ok) {
|
|
@@ -1338,6 +1407,7 @@ async function submitScoreResults() {
|
|
|
1338
1407
|
headers: { 'Content-Type': 'application/json' },
|
|
1339
1408
|
body: JSON.stringify({
|
|
1340
1409
|
...aggregatePayload,
|
|
1410
|
+
...instructionSetProvenanceFields(project),
|
|
1341
1411
|
scorerVersionId,
|
|
1342
1412
|
subjectPromptVersionId: subjectPromptVersionId || undefined,
|
|
1343
1413
|
datasetVersionId: getArg('--dataset-version') || undefined,
|
|
@@ -1458,6 +1528,8 @@ async function execScorer() {
|
|
|
1458
1528
|
!splitName) {
|
|
1459
1529
|
throw new Error('Usage: orizu scorers exec --scorer-version <id> (--subject-version <prompt-version-id> | --optimization-run <id> --candidate <id>) --dataset-version <id> --split-set <id> --split <name> [--subject-results <jsonl>] [--dependency-score-run <alias=id>] [--dependency-results <alias=path>] [--no-submit] [--out <score.json>] [--project <team/project>] [--json]');
|
|
1460
1530
|
}
|
|
1531
|
+
const instructionSetProvenance = instructionSetProvenanceFields(project);
|
|
1532
|
+
const isNoSubmit = hasArg('--no-submit');
|
|
1461
1533
|
const response = await authedFetch(`/api/cli/scorers/exec?project=${encodeURIComponent(project)}`, {
|
|
1462
1534
|
method: 'POST',
|
|
1463
1535
|
headers: { 'Content-Type': 'application/json' },
|
|
@@ -1469,22 +1541,28 @@ async function execScorer() {
|
|
|
1469
1541
|
datasetVersionId,
|
|
1470
1542
|
splitSetId,
|
|
1471
1543
|
splitName,
|
|
1472
|
-
submit: !
|
|
1544
|
+
submit: !isNoSubmit,
|
|
1473
1545
|
reuseExisting: !hasArg('--no-reuse-existing'),
|
|
1474
1546
|
subjectResultsJsonl: readOptionalJsonlFile(getArg('--subject-results') || getArg('--outputs')),
|
|
1475
1547
|
dependencyScoreRunIds: parseAliasAssignments(getArg('--dependency-score-run') || getArg('--dependency-score-runs')),
|
|
1476
1548
|
dependencyResultsJsonl: readDependencyResultAssignments(getArg('--dependency-results')),
|
|
1549
|
+
...instructionSetProvenance,
|
|
1477
1550
|
}),
|
|
1478
1551
|
});
|
|
1479
1552
|
if (!response.ok) {
|
|
1480
1553
|
throw new Error(`Failed to execute scorer: ${await response.text()}`);
|
|
1481
1554
|
}
|
|
1482
1555
|
const data = await parseJsonResponse(response, 'Scorer exec');
|
|
1556
|
+
const noSubmitOutput = isNoSubmit
|
|
1557
|
+
? noSubmitScorerOutput(data, instructionSetProvenance)
|
|
1558
|
+
: null;
|
|
1483
1559
|
if (outPath) {
|
|
1484
|
-
|
|
1560
|
+
const output = noSubmitOutput ?? data.scoreResult ?? data;
|
|
1561
|
+
writeFileSync(expandHomePath(outPath), `${JSON.stringify(output, null, 2)}\n`);
|
|
1485
1562
|
}
|
|
1486
1563
|
if (hasJsonFlag()) {
|
|
1487
|
-
|
|
1564
|
+
const output = noSubmitOutput ?? data;
|
|
1565
|
+
printJson(output);
|
|
1488
1566
|
return;
|
|
1489
1567
|
}
|
|
1490
1568
|
const scoreRun = isRecord(data.scoreRun) ? data.scoreRun : null;
|
|
@@ -1512,6 +1590,9 @@ async function execScorer() {
|
|
|
1512
1590
|
else {
|
|
1513
1591
|
printLine(`Executed scorer ${sanitizeTerminalText(scorerVersionId)} (${formatPercent(numberFromUnknown(scoreValue))})${provenanceSuffix}`);
|
|
1514
1592
|
}
|
|
1593
|
+
if (isNoSubmit && Object.keys(instructionSetProvenance).length > 0) {
|
|
1594
|
+
printLine(`Provenance: ${sanitizeTerminalText(String(instructionSetProvenance['orizu.instruction_set.id']))} / ${sanitizeTerminalText(String(instructionSetProvenance['orizu.profile_version.id']))} / ${sanitizeTerminalText(String(instructionSetProvenance['orizu.instruction_set.digest']))}`);
|
|
1595
|
+
}
|
|
1515
1596
|
if (outPath) {
|
|
1516
1597
|
printLine(`Wrote scorer result to ${sanitizeTerminalText(outPath)}`);
|
|
1517
1598
|
}
|
|
@@ -3849,88 +3930,22 @@ async function changeTeamMemberRole() {
|
|
|
3849
3930
|
}
|
|
3850
3931
|
printLine(`Updated ${sanitizeTerminalText(member.email)} role to ${sanitizeTerminalText(role)}`);
|
|
3851
3932
|
}
|
|
3852
|
-
async function createDatasetFromRows(project, name, sourceType, rows, readmeMarkdown = null) {
|
|
3853
|
-
const response = await authedFetch('/api/cli/datasets/upload', {
|
|
3854
|
-
method: 'POST',
|
|
3855
|
-
headers: {
|
|
3856
|
-
'Content-Type': 'application/json',
|
|
3857
|
-
},
|
|
3858
|
-
body: JSON.stringify({
|
|
3859
|
-
projectSlug: project,
|
|
3860
|
-
name,
|
|
3861
|
-
rows,
|
|
3862
|
-
sourceType,
|
|
3863
|
-
...(readmeMarkdown !== null ? { readmeMarkdown } : {}),
|
|
3864
|
-
}),
|
|
3865
|
-
});
|
|
3866
|
-
if (!response.ok) {
|
|
3867
|
-
const body = await parseJsonResponse(response, 'Dataset upload');
|
|
3868
|
-
throw new Error(`Upload failed: ${body.error}`);
|
|
3869
|
-
}
|
|
3870
|
-
return parseJsonResponse(response, 'Dataset upload');
|
|
3871
|
-
}
|
|
3872
3933
|
async function uploadJsonlDatasetInChunks(file, project, datasetName, readmeMarkdown = null) {
|
|
3873
|
-
|
|
3874
|
-
|
|
3875
|
-
|
|
3876
|
-
|
|
3877
|
-
|
|
3878
|
-
|
|
3879
|
-
|
|
3880
|
-
|
|
3881
|
-
|
|
3882
|
-
catch (error) {
|
|
3883
|
-
const message = error instanceof Error ? error.message : String(error);
|
|
3884
|
-
if (!dataset) {
|
|
3885
|
-
throw new Error(message);
|
|
3886
|
-
}
|
|
3887
|
-
throw new Error(`Upload stopped while reading the next JSONL chunk: ${message}\n` +
|
|
3888
|
-
`Dataset ${sanitizeTerminalText(dataset.name)} (${sanitizeTerminalText(dataset.id)}) was created and ${totalUploaded} rows were uploaded. ` +
|
|
3889
|
-
`Fix the file, remove the first ${totalUploaded} rows, and run ` +
|
|
3890
|
-
`orizu datasets append --dataset ${dataset.id} --file <remaining-file>.`);
|
|
3891
|
-
}
|
|
3892
|
-
if (nextChunk.done) {
|
|
3893
|
-
break;
|
|
3894
|
-
}
|
|
3895
|
-
const chunk = nextChunk.value;
|
|
3896
|
-
chunkIndex += 1;
|
|
3897
|
-
printLine(`Uploading chunk ${chunkIndex} (${chunk.length} rows)...`);
|
|
3898
|
-
try {
|
|
3899
|
-
if (!dataset) {
|
|
3900
|
-
const data = await createDatasetFromRows(project, datasetName, 'jsonl', chunk, readmeMarkdown);
|
|
3901
|
-
dataset = data.dataset;
|
|
3902
|
-
totalUploaded = data.dataset.rowCount;
|
|
3903
|
-
continue;
|
|
3904
|
-
}
|
|
3905
|
-
const data = await appendChunk(dataset.id, chunk);
|
|
3906
|
-
totalUploaded += data.appendedCount;
|
|
3907
|
-
dataset = {
|
|
3908
|
-
...dataset,
|
|
3909
|
-
rowCount: data.dataset.rowCount,
|
|
3910
|
-
};
|
|
3911
|
-
}
|
|
3912
|
-
catch (error) {
|
|
3913
|
-
const message = error instanceof Error ? error.message : String(error);
|
|
3914
|
-
if (!dataset) {
|
|
3915
|
-
throw new Error(message);
|
|
3916
|
-
}
|
|
3917
|
-
throw new Error(`Chunk ${chunkIndex} failed: ${message}\n` +
|
|
3918
|
-
`Dataset ${dataset.name} (${dataset.id}) was created and ${totalUploaded} rows were uploaded. ` +
|
|
3919
|
-
`To retry, remove the first ${totalUploaded} rows from your file and run ` +
|
|
3920
|
-
`orizu datasets append --dataset ${dataset.id} --file <remaining-file>.`);
|
|
3921
|
-
}
|
|
3922
|
-
}
|
|
3923
|
-
if (!dataset) {
|
|
3924
|
-
throw new Error('Dataset file contains no rows');
|
|
3925
|
-
}
|
|
3926
|
-
const version = await ensureDatasetUploadSnapshot(dataset, hasJsonFlag(), requestDatasetVersionSnapshot);
|
|
3934
|
+
const { transferDatasetUpload } = await import('./dataset-transfer-upload.js');
|
|
3935
|
+
const { data, version } = await transferDatasetUpload({
|
|
3936
|
+
project, name: datasetName, source: { kind: 'jsonl', file }, readmeMarkdown,
|
|
3937
|
+
json: hasJsonFlag(),
|
|
3938
|
+
// JSON mode reserves stderr for structured recovery failures as well.
|
|
3939
|
+
onChunk: (index, count) => { if (!hasJsonFlag())
|
|
3940
|
+
printLine(`Uploading chunk ${index} (${count} rows)...`); },
|
|
3941
|
+
});
|
|
3942
|
+
const dataset = data.dataset;
|
|
3927
3943
|
if (hasJsonFlag())
|
|
3928
3944
|
return printJson({ dataset_id: dataset.id, dataset, dataset_version_id: version.datasetVersion.id });
|
|
3929
3945
|
printLine(`Uploaded dataset ${sanitizeTerminalText(dataset.name)} (${sanitizeTerminalText(dataset.id)}) with ${dataset.rowCount} rows.`);
|
|
3930
3946
|
printLine(`Created dataset version ${sanitizeTerminalText(version.datasetVersion.id)}.`);
|
|
3931
|
-
if (dataset.url)
|
|
3947
|
+
if (dataset.url)
|
|
3932
3948
|
printLine(`View dataset: ${formatTerminalLink(dataset.url)}`);
|
|
3933
|
-
}
|
|
3934
3949
|
}
|
|
3935
3950
|
async function uploadDataset() {
|
|
3936
3951
|
const projectArg = getArg('--project');
|
|
@@ -3949,8 +3964,11 @@ async function uploadDataset() {
|
|
|
3949
3964
|
return;
|
|
3950
3965
|
}
|
|
3951
3966
|
const { rows, sourceType } = parseDatasetFile(file);
|
|
3952
|
-
const
|
|
3953
|
-
const version = await
|
|
3967
|
+
const { transferDatasetUpload } = await import('./dataset-transfer-upload.js');
|
|
3968
|
+
const { data, version } = await transferDatasetUpload({
|
|
3969
|
+
project, name: datasetName, source: { kind: 'rows', rows, sourceType }, readmeMarkdown,
|
|
3970
|
+
json: hasJsonFlag(), onChunk: () => { },
|
|
3971
|
+
});
|
|
3954
3972
|
if (hasJsonFlag())
|
|
3955
3973
|
return printJson({ dataset_id: data.dataset.id, dataset: data.dataset, dataset_version_id: version.datasetVersion.id });
|
|
3956
3974
|
printLine(`Uploaded dataset ${sanitizeTerminalText(data.dataset.name)} (${sanitizeTerminalText(data.dataset.id)}) with ${data.dataset.rowCount} rows.`);
|
|
@@ -3972,8 +3990,11 @@ async function pushDataset() {
|
|
|
3972
3990
|
const project = await resolveProjectSlug(projectArg);
|
|
3973
3991
|
const datasetName = name || basename(file);
|
|
3974
3992
|
const { rows, sourceType } = parseDatasetFile(file);
|
|
3975
|
-
const
|
|
3976
|
-
const version = await
|
|
3993
|
+
const { transferDatasetUpload } = await import('./dataset-transfer-upload.js');
|
|
3994
|
+
const { data, version } = await transferDatasetUpload({
|
|
3995
|
+
project, name: datasetName, source: { kind: 'rows', rows, sourceType }, readmeMarkdown,
|
|
3996
|
+
json: hasJsonFlag(), onChunk: () => { },
|
|
3997
|
+
});
|
|
3977
3998
|
if (hasJsonFlag()) {
|
|
3978
3999
|
const payload = {
|
|
3979
4000
|
dataset_id: data.dataset.id,
|
|
@@ -4052,15 +4073,11 @@ async function downloadDataset() {
|
|
|
4052
4073
|
const selected = await selectDatasetInteractively(projectArg);
|
|
4053
4074
|
datasetId = selected.datasetId;
|
|
4054
4075
|
}
|
|
4055
|
-
const response = await authedFetch(`/api/cli/datasets/${encodeURIComponent(datasetId)}/download?format=${encodeURIComponent(format)}`);
|
|
4056
|
-
if (!response.ok) {
|
|
4057
|
-
throw new Error(`Download failed: ${await response.text()}`);
|
|
4058
|
-
}
|
|
4059
4076
|
const filename = outPathArg
|
|
4060
4077
|
? expandHomePath(outPathArg)
|
|
4061
4078
|
: `${datasetId}.${format}`;
|
|
4062
|
-
const
|
|
4063
|
-
|
|
4079
|
+
const { transferDatasetDownload } = await import('./dataset-transfer-download.js');
|
|
4080
|
+
await transferDatasetDownload(datasetId, format, filename);
|
|
4064
4081
|
if (hasJsonFlag()) {
|
|
4065
4082
|
printJson({ datasetId, format, savedTo: filename });
|
|
4066
4083
|
return;
|
|
@@ -4837,6 +4854,10 @@ export async function main(rawArgs = process.argv.slice(2)) {
|
|
|
4837
4854
|
await submitRunResults();
|
|
4838
4855
|
return;
|
|
4839
4856
|
}
|
|
4857
|
+
if (command === 'runs' && subcommand === 'list') {
|
|
4858
|
+
await listRuns();
|
|
4859
|
+
return;
|
|
4860
|
+
}
|
|
4840
4861
|
if (command === 'scores' && subcommand === 'submit') {
|
|
4841
4862
|
await submitScoreResults();
|
|
4842
4863
|
return;
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
/** Resolve the
|
|
1
|
+
/** Resolve the requested Profile's Production tuple for optimization. */
|
|
2
2
|
export declare function resolveGepaInstructionSetProfileVersion(instructionSetName: string, modelConfigIdentity: string, project: string): Promise<string>;
|
|
3
3
|
//# sourceMappingURL=instruction-set-gepa-launch.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"instruction-set-gepa-launch.d.ts","sourceRoot":"","sources":["../src/instruction-set-gepa-launch.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"instruction-set-gepa-launch.d.ts","sourceRoot":"","sources":["../src/instruction-set-gepa-launch.ts"],"names":[],"mappings":"AAYA,yEAAyE;AACzE,wBAAsB,uCAAuC,CAC3D,kBAAkB,EAAE,MAAM,EAC1B,mBAAmB,EAAE,MAAM,EAC3B,OAAO,EAAE,MAAM,GACd,OAAO,CAAC,MAAM,CAAC,CAUjB"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { authedFetch } from './http.js';
|
|
2
2
|
import { parseJsonResponse } from './json-response.js';
|
|
3
|
-
/** Resolve the
|
|
3
|
+
/** Resolve the requested Profile's Production tuple for optimization. */
|
|
4
4
|
export async function resolveGepaInstructionSetProfileVersion(instructionSetName, modelConfigIdentity, project) {
|
|
5
5
|
const response = await authedFetch(`/api/cli/instruction-sets/${encodeURIComponent(instructionSetName)}?project=${encodeURIComponent(project)}`);
|
|
6
6
|
if (!response.ok)
|
|
@@ -8,8 +8,10 @@ export async function resolveGepaInstructionSetProfileVersion(instructionSetName
|
|
|
8
8
|
const payload = await parseJsonResponse(response, 'Instruction set resolution');
|
|
9
9
|
const instructionSet = payload.instructionSet;
|
|
10
10
|
const profile = instructionSet?.profiles?.find(candidate => candidate.modelConfigIdentity === modelConfigIdentity);
|
|
11
|
-
|
|
11
|
+
if (!profile)
|
|
12
|
+
throw new Error(`instruction_set_profile_not_found: ${modelConfigIdentity}`);
|
|
13
|
+
const profileVersionId = profile.production?.profileVersionId;
|
|
12
14
|
if (!profileVersionId)
|
|
13
|
-
throw new Error(
|
|
15
|
+
throw new Error(`instruction_set_profile_not_promoted: ${modelConfigIdentity}`);
|
|
14
16
|
return profileVersionId;
|
|
15
17
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"instruction-set-loader.d.ts","sourceRoot":"","sources":["../src/instruction-set-loader.ts"],"names":[],"mappings":"AAGA,qBAAa,yBAA0B,SAAQ,KAAK;IACtC,QAAQ,CAAC,IAAI,EAAE,MAAM;gBAAZ,IAAI,EAAE,MAAM;CAClC;
|
|
1
|
+
{"version":3,"file":"instruction-set-loader.d.ts","sourceRoot":"","sources":["../src/instruction-set-loader.ts"],"names":[],"mappings":"AAGA,qBAAa,yBAA0B,SAAQ,KAAK;IACtC,QAAQ,CAAC,IAAI,EAAE,MAAM;gBAAZ,IAAI,EAAE,MAAM;CAClC;AA2GD,wBAAgB,kBAAkB,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,mBAAmB,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAyBvH"}
|
|
@@ -8,6 +8,7 @@ export class InstructionSetLoaderError extends Error {
|
|
|
8
8
|
this.name = 'InstructionSetLoaderError';
|
|
9
9
|
}
|
|
10
10
|
}
|
|
11
|
+
const LEGACY_LOADER_RETIRED = 'instruction_set_legacy_loader_retired: this tree was synced by the paved path; see docs/cli.md#migrating-the-legacy-sync-layout';
|
|
11
12
|
function inside(root, candidate) { return candidate === root || candidate.startsWith(`${root}${sep}`); }
|
|
12
13
|
function manifestMatchesReference(candidate, reference) {
|
|
13
14
|
try {
|
|
@@ -18,6 +19,46 @@ function manifestMatchesReference(candidate, reference) {
|
|
|
18
19
|
return false;
|
|
19
20
|
}
|
|
20
21
|
}
|
|
22
|
+
function pavedTreeMatchesDisplayName(directoryRoot, reference) {
|
|
23
|
+
const setsRoots = [
|
|
24
|
+
resolve(directoryRoot, 'orizu', 'instruction-sets'),
|
|
25
|
+
resolve(directoryRoot, 'instruction-sets'),
|
|
26
|
+
];
|
|
27
|
+
for (const setsRoot of setsRoots) {
|
|
28
|
+
try {
|
|
29
|
+
for (const setEntry of readdirSync(setsRoot, { withFileTypes: true })) {
|
|
30
|
+
if (!setEntry.isDirectory())
|
|
31
|
+
continue;
|
|
32
|
+
const setRoot = realpathSync(resolve(setsRoot, setEntry.name));
|
|
33
|
+
if (!inside(directoryRoot, setRoot))
|
|
34
|
+
continue;
|
|
35
|
+
for (const profileEntry of readdirSync(setRoot, { withFileTypes: true })) {
|
|
36
|
+
if (!profileEntry.isDirectory())
|
|
37
|
+
continue;
|
|
38
|
+
const profileRoot = realpathSync(resolve(setRoot, profileEntry.name));
|
|
39
|
+
if (!inside(directoryRoot, profileRoot))
|
|
40
|
+
continue;
|
|
41
|
+
for (const versionEntry of readdirSync(profileRoot, { withFileTypes: true })) {
|
|
42
|
+
if (!versionEntry.isDirectory() || !/^v[1-9][0-9]*$/u.test(versionEntry.name))
|
|
43
|
+
continue;
|
|
44
|
+
try {
|
|
45
|
+
const manifest = JSON.parse(readFileSync(resolve(profileRoot, versionEntry.name, 'manifest.json'), 'utf8'));
|
|
46
|
+
if (manifest.instructionSetName === reference || manifest.instructionSetSlug === reference)
|
|
47
|
+
return true;
|
|
48
|
+
}
|
|
49
|
+
catch {
|
|
50
|
+
// Inspect another paved Version.
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
catch {
|
|
57
|
+
// Inspect the other paved root.
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
return false;
|
|
61
|
+
}
|
|
21
62
|
function resolveSetRoot(directory, reference) {
|
|
22
63
|
let directoryRoot;
|
|
23
64
|
try {
|
|
@@ -26,6 +67,21 @@ function resolveSetRoot(directory, reference) {
|
|
|
26
67
|
catch {
|
|
27
68
|
throw new InstructionSetLoaderError('instruction_set_not_synced');
|
|
28
69
|
}
|
|
70
|
+
const pavedCandidates = [
|
|
71
|
+
resolve(directoryRoot, 'orizu', 'instruction-sets', reference),
|
|
72
|
+
resolve(directoryRoot, 'instruction-sets', reference),
|
|
73
|
+
];
|
|
74
|
+
if (pavedCandidates.some(candidate => {
|
|
75
|
+
try {
|
|
76
|
+
return inside(directoryRoot, realpathSync(candidate)) && statSync(candidate).isDirectory();
|
|
77
|
+
}
|
|
78
|
+
catch {
|
|
79
|
+
return false;
|
|
80
|
+
}
|
|
81
|
+
}) || (!/^[a-z0-9]+(?:-[a-z0-9]+)*$/u.test(reference)
|
|
82
|
+
&& pavedTreeMatchesDisplayName(directoryRoot, reference))) {
|
|
83
|
+
throw new InstructionSetLoaderError(LEGACY_LOADER_RETIRED);
|
|
84
|
+
}
|
|
29
85
|
const direct = resolve(directoryRoot, reference);
|
|
30
86
|
try {
|
|
31
87
|
if (inside(directoryRoot, direct) && existsSync(direct) && statSync(direct).isDirectory()) {
|
|
@@ -80,8 +136,13 @@ export function loadInstructionSet(directory, name, modelConfigIdentity) {
|
|
|
80
136
|
throw new InstructionSetLoaderError('instruction_set_manifest_version_unsupported');
|
|
81
137
|
if (manifest.filteredTo && !manifest.filteredTo.includes(modelConfigIdentity))
|
|
82
138
|
throw new InstructionSetLoaderError('instruction_set_profile_not_synced');
|
|
83
|
-
const
|
|
84
|
-
|
|
139
|
+
const profile = manifest.profiles.find(profile => profile.modelConfigIdentity === modelConfigIdentity);
|
|
140
|
+
if (!profile)
|
|
141
|
+
throw new InstructionSetLoaderError('instruction_set_profile_not_found');
|
|
142
|
+
if (!profile.production)
|
|
143
|
+
throw new InstructionSetLoaderError('instruction_set_profile_not_promoted');
|
|
144
|
+
const selected = profile.production;
|
|
145
|
+
const result = Object.create(null);
|
|
85
146
|
for (const key of manifest.shape) {
|
|
86
147
|
if (selected.pinnedComponents?.[key])
|
|
87
148
|
throw new InstructionSetLoaderError('instruction_set_component_unavailable');
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
export interface SyncedVersionLock {
|
|
2
|
+
profileVersionId: string;
|
|
3
|
+
versionNumber: number;
|
|
4
|
+
digest: string;
|
|
5
|
+
components: Record<string, string>;
|
|
6
|
+
syncedAt: string;
|
|
7
|
+
}
|
|
8
|
+
export interface ProfileLock {
|
|
9
|
+
modelConfigIdentity?: string;
|
|
10
|
+
production: string | null;
|
|
11
|
+
versions: Record<string, SyncedVersionLock>;
|
|
12
|
+
}
|
|
13
|
+
export interface InstructionSetLock {
|
|
14
|
+
instructionSetId: string;
|
|
15
|
+
default: string;
|
|
16
|
+
profiles: Record<string, ProfileLock>;
|
|
17
|
+
}
|
|
18
|
+
export interface InstructionSetLockV1 {
|
|
19
|
+
lockfileVersion: 1;
|
|
20
|
+
project: string;
|
|
21
|
+
instructionSets: Record<string, InstructionSetLock>;
|
|
22
|
+
helpers?: Record<string, string>;
|
|
23
|
+
pins?: string[];
|
|
24
|
+
}
|
|
25
|
+
export type LockParseErrorCode = 'lock_invalid_json' | 'lock_unsupported_version' | 'lock_production_not_a_version' | `lock_component_key_unsafe:${string}` | `lock_component_key_reserved:${string}` | `lock_helper_path_invalid:${string}` | `lock_set_slug_invalid:${string}` | `lock_profile_slug_invalid:${string}` | `lock_default_slug_invalid:${string}` | `lock_instruction_set_id_duplicate:${string}` | `lock_profile_version_id_duplicate:${string}` | `instruction_set_lock_component_key_collision:${string},${string}` | `instruction_set_lock_helper_path_collision:${string},${string}` | `lock_schema_violation:${string}` | `lock_pin_invalid:${string}:${SpecifierParseErrorCode}`;
|
|
26
|
+
export declare class LockParseError extends Error {
|
|
27
|
+
readonly code: LockParseErrorCode;
|
|
28
|
+
readonly path?: string;
|
|
29
|
+
constructor(code: LockParseErrorCode, path?: string);
|
|
30
|
+
}
|
|
31
|
+
export type SpecifierParseErrorCode = 'specifier_empty' | 'specifier_invalid_set' | 'specifier_profile_missing' | 'specifier_invalid_profile' | 'specifier_version_without_profile' | 'specifier_invalid_version';
|
|
32
|
+
export declare class SpecifierParseError extends Error {
|
|
33
|
+
readonly code: SpecifierParseErrorCode;
|
|
34
|
+
constructor(code: SpecifierParseErrorCode);
|
|
35
|
+
}
|
|
36
|
+
export interface ParsedSpecifier {
|
|
37
|
+
set: string;
|
|
38
|
+
profile?: string;
|
|
39
|
+
versionNumber?: number;
|
|
40
|
+
}
|
|
41
|
+
export declare const INSTRUCTION_SET_SLUG: RegExp;
|
|
42
|
+
export declare const INSTRUCTION_SET_PROFILE_SLUG: RegExp;
|
|
43
|
+
export declare const INSTRUCTION_SET_COMPONENT_KEY: RegExp;
|
|
44
|
+
export declare const INSTRUCTION_SET_HELPER_PATH: RegExp;
|
|
45
|
+
export declare const MAX_VERSION_NUMBER = 2147483647;
|
|
46
|
+
export declare function windowsPathIdentity(value: string): string;
|
|
47
|
+
export declare function validateInstructionSetComponentKeys(componentKeys: string[], pathPrefix?: string, rejectWindowsReserved?: boolean): void;
|
|
48
|
+
export declare function parseLock(text: string): InstructionSetLockV1;
|
|
49
|
+
export declare function serializeLock(lock: InstructionSetLockV1): string;
|
|
50
|
+
export declare function parseSpecifier(text: string): ParsedSpecifier;
|
|
51
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/instruction-set-lock/index.ts"],"names":[],"mappings":"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"}
|