orizu 0.5.43 → 0.5.44

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.
@@ -1,3 +1,9 @@
1
1
  export declare const HOSTED_AGENT_NAME = "orizu";
2
2
  export declare const HOSTED_AGENT_PROMPT: string;
3
+ /**
4
+ * The prompt for one session. Every project of an approved team shares the
5
+ * team's repository (ORI-2601; ADR-041, added in PR #2292), which starts with one project's folder, so the
6
+ * agent is told which project this session is for (ORI-2601).
7
+ */
8
+ export declare function hostedAgentPrompt(projectId?: string | null): string;
3
9
  //# sourceMappingURL=hosted-agent-prompt.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"hosted-agent-prompt.d.ts","sourceRoot":"","sources":["../src/hosted-agent-prompt.ts"],"names":[],"mappings":"AAaA,eAAO,MAAM,iBAAiB,UAAU,CAAA;AAExC,eAAO,MAAM,mBAAmB,QAK4Z,CAAA"}
1
+ {"version":3,"file":"hosted-agent-prompt.d.ts","sourceRoot":"","sources":["../src/hosted-agent-prompt.ts"],"names":[],"mappings":"AAaA,eAAO,MAAM,iBAAiB,UAAU,CAAA;AAExC,eAAO,MAAM,mBAAmB,QAK4Z,CAAA;AAE5b;;;;GAIG;AACH,wBAAgB,iBAAiB,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,GAAG,MAAM,CAInE"}
@@ -17,3 +17,14 @@ export const HOSTED_AGENT_PROMPT = `You are the Orizu agent. You work in the per
17
17
  - Keep answers short and plain. Say what you did and what the person needs to know next.
18
18
  - Follow the repository's own conventions and any instructions in its AGENTS.md.
19
19
  - An Orizu app's page link is <Orizu server>${appPagePath('<app id>')}, where <Orizu server> is the server the orizu CLI talks to (https://app.orizu.ai by default). To give someone an app's link, run \`orizu projects list\` to get the \`<team>/<project>\` slug, then \`orizu apps list --project <team>/<project>\`: it prints each app's full link. The --project flag is required here: prompts cannot run in this environment. Never guess a link.`;
20
+ /**
21
+ * The prompt for one session. Every project of an approved team shares the
22
+ * team's repository (ORI-2601; ADR-041, added in PR #2292), which starts with one project's folder, so the
23
+ * agent is told which project this session is for (ORI-2601).
24
+ */
25
+ export function hostedAgentPrompt(projectId) {
26
+ if (!projectId)
27
+ return HOSTED_AGENT_PROMPT;
28
+ return `${HOSTED_AGENT_PROMPT}
29
+ - This session is for the Orizu project whose id is ${projectId}. Run \`orizu projects list --json\` to find its \`<team>/<project>\` slug, and pass that whole slug as \`--project <team>/<project>\` to orizu commands. In this repository the project's files live in the folder \`projects/<project>/\`, named by the part after the slash only (for \`acme/support-bot\`, the folder is \`projects/support-bot/\`). If that folder is missing, do not create it by hand: Orizu writes a project folder with its own files (\`orizu.project.json\`, \`README.md\`, \`memory.md\`). Tell the person this project's folder is not in the workspace yet, and keep working on what they asked. Do not change another project's folder unless the person asks.`;
30
+ }
@@ -54,6 +54,8 @@ export interface HostedBootstrapRehearsal {
54
54
  sessionId: string;
55
55
  runId: string;
56
56
  sessionBranch: string;
57
+ /** The project the fake /sessions endpoint reports for the session. */
58
+ projectId: string;
57
59
  repoFullName: string;
58
60
  provider: SandboxProvider;
59
61
  resolveCloneUrl: (repo: string) => string;
@@ -1 +1 @@
1
- {"version":3,"file":"hosted-bootstrap-rehearsal.d.ts","sourceRoot":"","sources":["../src/hosted-bootstrap-rehearsal.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AASH,OAAO,EAA0B,KAAK,eAAe,EAAE,MAAM,uBAAuB,CAAA;AACpF,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAA;AAC7D,OAAO,EAAc,KAAK,aAAa,EAAE,MAAM,6BAA6B,CAAA;AAuC5E,MAAM,WAAW,aAAa;IAC5B,UAAU,EAAE,MAAM,CAAA;IAClB,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,EAAE,MAAM,IAAI,CAAA;CACjB;AAED;;GAEG;AACH,wBAAgB,SAAS,CAAC,MAAM,EAAE,YAAY,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAkBtE;AAED;;;GAGG;AACH,wBAAsB,kBAAkB,CAAC,MAAM,EAAE,YAAY,GAAG,OAAO,CAAC,aAAa,CAAC,CA0BrF;AAED,MAAM,WAAW,oBAAoB;IACnC,OAAO,EAAE,MAAM,CAAA;IACf,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,EAAE,MAAM,IAAI,CAAA;CACjB;AAED;;;;GAIG;AACH,wBAAsB,mBAAmB,CAAC,MAAM,EAAE,aAAa,GAAG,OAAO,CAAC,oBAAoB,CAAC,CA0B9F;AAID,MAAM,WAAW,sBAAsB;IACrC,KAAK,EAAE,MAAM,CAAA;IACb,OAAO,EAAE,MAAM,CAAA;IACf,QAAQ,EAAE,MAAM,CAAA;IAChB,SAAS,EAAE,MAAM,CAAA;IACjB,OAAO,EAAE,OAAO,CAAA;CACjB;AAED,MAAM,WAAW,wBAAwB;IACvC,UAAU,EAAE,MAAM,CAAA;IAClB,MAAM,EAAE,MAAM,CAAA;IACd,WAAW,EAAE,MAAM,CAAA;IACnB,SAAS,EAAE,MAAM,CAAA;IACjB,KAAK,EAAE,MAAM,CAAA;IACb,aAAa,EAAE,MAAM,CAAA;IACrB,YAAY,EAAE,MAAM,CAAA;IACpB,QAAQ,EAAE,eAAe,CAAA;IACzB,eAAe,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,MAAM,CAAA;IACzC,kEAAkE;IAClE,IAAI,EAAE,MAAM,CAAA;IACZ,4EAA4E;IAC5E,iBAAiB,EAAE,SAAS,MAAM,EAAE,CAAA;IACpC,4DAA4D;IAC5D,MAAM,EAAE,MAAM,sBAAsB,EAAE,CAAA;IACtC,0EAA0E;IAC1E,YAAY,EAAE,MAAM,MAAM,EAAE,CAAA;IAC5B,mFAAmF;IACnF,kBAAkB,EAAE,MAAM,MAAM,EAAE,CAAA;IAClC,OAAO,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAA;CAC7B;AAED,MAAM,WAAW,gBAAgB;IAC/B,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,IAAI,CAAC,EAAE,OAAO,CAAA;IACd;mFAC+E;IAC/E,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB,+EAA+E;IAC/E,eAAe,CAAC,EAAE,MAAM,CAAA;IACxB,wEAAwE;IACxE,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,wEAAwE;IACxE,UAAU,CAAC,EAAE,OAAO,CAAA;CACrB;AAuBD,wBAAsB,8BAA8B,CAClD,OAAO,GAAE,gBAAqB,GAC7B,OAAO,CAAC,wBAAwB,CAAC,CAqFnC"}
1
+ {"version":3,"file":"hosted-bootstrap-rehearsal.d.ts","sourceRoot":"","sources":["../src/hosted-bootstrap-rehearsal.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AASH,OAAO,EAA0B,KAAK,eAAe,EAAE,MAAM,uBAAuB,CAAA;AACpF,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAA;AAC7D,OAAO,EAAc,KAAK,aAAa,EAAE,MAAM,6BAA6B,CAAA;AAuC5E,MAAM,WAAW,aAAa;IAC5B,UAAU,EAAE,MAAM,CAAA;IAClB,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,EAAE,MAAM,IAAI,CAAA;CACjB;AAED;;GAEG;AACH,wBAAgB,SAAS,CAAC,MAAM,EAAE,YAAY,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAmBtE;AAED;;;GAGG;AACH,wBAAsB,kBAAkB,CAAC,MAAM,EAAE,YAAY,GAAG,OAAO,CAAC,aAAa,CAAC,CA0BrF;AAED,MAAM,WAAW,oBAAoB;IACnC,OAAO,EAAE,MAAM,CAAA;IACf,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,EAAE,MAAM,IAAI,CAAA;CACjB;AAED;;;;GAIG;AACH,wBAAsB,mBAAmB,CAAC,MAAM,EAAE,aAAa,GAAG,OAAO,CAAC,oBAAoB,CAAC,CA0B9F;AAID,MAAM,WAAW,sBAAsB;IACrC,KAAK,EAAE,MAAM,CAAA;IACb,OAAO,EAAE,MAAM,CAAA;IACf,QAAQ,EAAE,MAAM,CAAA;IAChB,SAAS,EAAE,MAAM,CAAA;IACjB,OAAO,EAAE,OAAO,CAAA;CACjB;AAED,MAAM,WAAW,wBAAwB;IACvC,UAAU,EAAE,MAAM,CAAA;IAClB,MAAM,EAAE,MAAM,CAAA;IACd,WAAW,EAAE,MAAM,CAAA;IACnB,SAAS,EAAE,MAAM,CAAA;IACjB,KAAK,EAAE,MAAM,CAAA;IACb,aAAa,EAAE,MAAM,CAAA;IACrB,uEAAuE;IACvE,SAAS,EAAE,MAAM,CAAA;IACjB,YAAY,EAAE,MAAM,CAAA;IACpB,QAAQ,EAAE,eAAe,CAAA;IACzB,eAAe,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,MAAM,CAAA;IACzC,kEAAkE;IAClE,IAAI,EAAE,MAAM,CAAA;IACZ,4EAA4E;IAC5E,iBAAiB,EAAE,SAAS,MAAM,EAAE,CAAA;IACpC,4DAA4D;IAC5D,MAAM,EAAE,MAAM,sBAAsB,EAAE,CAAA;IACtC,0EAA0E;IAC1E,YAAY,EAAE,MAAM,MAAM,EAAE,CAAA;IAC5B,mFAAmF;IACnF,kBAAkB,EAAE,MAAM,MAAM,EAAE,CAAA;IAClC,OAAO,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAA;CAC7B;AAED,MAAM,WAAW,gBAAgB;IAC/B,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,IAAI,CAAC,EAAE,OAAO,CAAA;IACd;mFAC+E;IAC/E,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB,+EAA+E;IAC/E,eAAe,CAAC,EAAE,MAAM,CAAA;IACxB,wEAAwE;IACxE,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,wEAAwE;IACxE,UAAU,CAAC,EAAE,OAAO,CAAA;CACrB;AAuBD,wBAAsB,8BAA8B,CAClD,OAAO,GAAE,gBAAqB,GAC7B,OAAO,CAAC,wBAAwB,CAAC,CAwFnC"}
@@ -63,6 +63,8 @@ export function brokerEnv(config) {
63
63
  env.HB_SESSION_ID = config.sessionId;
64
64
  if (config.sessionBranch)
65
65
  env.HB_SESSION_BRANCH = config.sessionBranch;
66
+ if (config.projectId)
67
+ env.HB_PROJECT_ID = config.projectId;
66
68
  if (config.repoTokenStatus)
67
69
  env.HB_REPO_TOKEN_STATUS = String(config.repoTokenStatus);
68
70
  if (config.eventsStatus)
@@ -173,6 +175,7 @@ export async function createHostedBootstrapRehearsal(options = {}) {
173
175
  });
174
176
  const workspaceId = 'ws-hosted-1';
175
177
  const sessionId = 'sess-hosted-1';
178
+ const projectId = '6f1c2d3e-4b5a-4c6d-8e7f-901a2b3c4d5e';
176
179
  const runId = 'run-hosted-1';
177
180
  const sessionBranch = `orizu/session-${sessionId}`;
178
181
  // Cut the session branch off main on the real bare repo.
@@ -207,6 +210,7 @@ export async function createHostedBootstrapRehearsal(options = {}) {
207
210
  fullRunApi: options.fullRunApi,
208
211
  sessionId,
209
212
  sessionBranch,
213
+ projectId,
210
214
  });
211
215
  // Real authenticated smart-HTTP git server on loopback: this is what makes the
212
216
  // clone go git → credential helper → broker → token → Basic auth → served repo,
@@ -225,6 +229,7 @@ export async function createHostedBootstrapRehearsal(options = {}) {
225
229
  sessionId,
226
230
  runId,
227
231
  sessionBranch,
232
+ projectId,
228
233
  repoFullName: repo.repoFullName,
229
234
  provider,
230
235
  resolveCloneUrl: () => cloneUrl,
@@ -41,6 +41,8 @@ export interface BrokerConfig {
41
41
  * a pre-seeded session branch on the local bare repo). */
42
42
  sessionId?: string;
43
43
  sessionBranch?: string;
44
+ /** E2E: the project the /sessions endpoint reports, as the real route does. */
45
+ projectId?: string;
44
46
  }
45
47
  export declare function readBrokerConfigFromEnv(env: NodeJS.ProcessEnv): BrokerConfig;
46
48
  export declare function startBrokerServer(config: BrokerConfig): {
@@ -1 +1 @@
1
- {"version":3,"file":"hosted-broker-server.d.ts","sourceRoot":"","sources":["../src/hosted-broker-server.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AA8BH,MAAM,WAAW,YAAY;IAC3B,MAAM,EAAE,MAAM,CAAA;IACd,IAAI,EAAE,MAAM,CAAA;IACZ,4EAA4E;IAC5E,eAAe,CAAC,EAAE,MAAM,CAAA;IACxB,mEAAmE;IACnE,kBAAkB,CAAC,EAAE,MAAM,CAAA;IAC3B,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,eAAe,CAAC,EAAE,MAAM,CAAA;IACxB,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,SAAS,CAAC,EAAE,OAAO,CAAA;IACnB,IAAI,CAAC,EAAE,MAAM,CAAA;IACb;;;;;;OAMG;IACH,UAAU,CAAC,EAAE,OAAO,CAAA;IACpB;+DAC2D;IAC3D,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,aAAa,CAAC,EAAE,MAAM,CAAA;CACvB;AAED,wBAAgB,uBAAuB,CAAC,GAAG,EAAE,MAAM,CAAC,UAAU,GAAG,YAAY,CAgB5E;AASD,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,YAAY,GAAG;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,CAAC,KAAK,CAAC,EAAE,OAAO,KAAK,IAAI,CAAA;CAAE,CA6LzG"}
1
+ {"version":3,"file":"hosted-broker-server.d.ts","sourceRoot":"","sources":["../src/hosted-broker-server.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AA8BH,MAAM,WAAW,YAAY;IAC3B,MAAM,EAAE,MAAM,CAAA;IACd,IAAI,EAAE,MAAM,CAAA;IACZ,4EAA4E;IAC5E,eAAe,CAAC,EAAE,MAAM,CAAA;IACxB,mEAAmE;IACnE,kBAAkB,CAAC,EAAE,MAAM,CAAA;IAC3B,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,eAAe,CAAC,EAAE,MAAM,CAAA;IACxB,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,SAAS,CAAC,EAAE,OAAO,CAAA;IACnB,IAAI,CAAC,EAAE,MAAM,CAAA;IACb;;;;;;OAMG;IACH,UAAU,CAAC,EAAE,OAAO,CAAA;IACpB;+DAC2D;IAC3D,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB,+EAA+E;IAC/E,SAAS,CAAC,EAAE,MAAM,CAAA;CACnB;AAED,wBAAgB,uBAAuB,CAAC,GAAG,EAAE,MAAM,CAAC,UAAU,GAAG,YAAY,CAiB5E;AASD,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,YAAY,GAAG;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,CAAC,KAAK,CAAC,EAAE,OAAO,KAAK,IAAI,CAAA;CAAE,CA8LzG"}
@@ -47,6 +47,7 @@ export function readBrokerConfigFromEnv(env) {
47
47
  fullRunApi: env.HB_FULL_RUN_API === '1',
48
48
  sessionId: env.HB_SESSION_ID,
49
49
  sessionBranch: env.HB_SESSION_BRANCH,
50
+ projectId: env.HB_PROJECT_ID,
50
51
  };
51
52
  }
52
53
  export function startBrokerServer(config) {
@@ -93,7 +94,9 @@ export function startBrokerServer(config) {
93
94
  sessions += 1;
94
95
  const id = config.sessionId ?? `sess-e2e-${sessions}`;
95
96
  const repoBranch = config.sessionBranch ?? `orizu/session-${id}`;
96
- return json({ session: { id, workspaceId: sessionsMatch[1], repoBranch, status: 'active' } }, 201);
97
+ return json(
98
+ // Like the real route, a session has a project only when the request names one.
99
+ { session: { id, workspaceId: sessionsMatch[1], projectId: typeof body.projectSlug === 'string' ? config.projectId ?? null : null, repoBranch, status: 'active' } }, 201);
97
100
  }
98
101
  const agentTokenMatch = url.pathname.match(/^\/api\/cli\/sessions\/([^/]+)\/agent-token$/);
99
102
  if (method === 'POST' && agentTokenMatch) {
@@ -159,6 +159,8 @@ export interface OpenCodeConfigOptions {
159
159
  /** OpenCode permission map; defaults to allow-all EXCEPT the headless-denied
160
160
  * tools below (sandbox is the boundary for everything else). */
161
161
  permission?: Record<string, unknown>;
162
+ /** The session's Orizu project, named in the agent's prompt (ORI-2601). */
163
+ projectId?: string | null;
162
164
  }
163
165
  /**
164
166
  * Tools denied for CLI-origin headless runs (ALI-1037). OpenCode 1.14.41 removes
@@ -1 +1 @@
1
- {"version":3,"file":"hosted-harness-opencode.d.ts","sourceRoot":"","sources":["../src/hosted-harness-opencode.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"hosted-harness-opencode.d.ts","sourceRoot":"","sources":["../src/hosted-harness-opencode.ts"],"names":[],"mappings":"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"}
@@ -50,7 +50,7 @@
50
50
  */
51
51
  import { readFileSync } from 'fs';
52
52
  import { refreshHostedModels } from '../src/hosted-model-cache.mjs';
53
- import { HOSTED_AGENT_NAME, HOSTED_AGENT_PROMPT } from './hosted-agent-prompt.js';
53
+ import { HOSTED_AGENT_NAME, hostedAgentPrompt } from './hosted-agent-prompt.js';
54
54
  import { parseModelIdentity } from './provider-registry.js';
55
55
  import { HARNESS_NAMES } from './hosted-harness.js';
56
56
  // OpenCode is HARD-PINNED to this version everywhere it is installed/launched.
@@ -1004,7 +1004,7 @@ export function buildOpenCodeConfigContent(opts) {
1004
1004
  model: opts.model,
1005
1005
  permission: opts.permission ?? defaultHeadlessPermission(),
1006
1006
  // Replaces OpenCode's built-in "You are opencode…" prompt (ORI-2207).
1007
- agent: { [HOSTED_AGENT_NAME]: { mode: 'primary', prompt: HOSTED_AGENT_PROMPT } },
1007
+ agent: { [HOSTED_AGENT_NAME]: { mode: 'primary', prompt: hostedAgentPrompt(opts.projectId) } },
1008
1008
  });
1009
1009
  }
1010
1010
  const OPENCODE_READY_TIMEOUT_MS = 180_000;
@@ -52,6 +52,8 @@ export interface HostedLoopContext {
52
52
  taskFile: string;
53
53
  /** Directory the agent operates in (the cloned session-branch workspace). */
54
54
  workspaceDir: string;
55
+ /** The session's Orizu project, named in the agent's prompt (ORI-2601). */
56
+ projectId?: string | null;
55
57
  /** Validated destination branch for the CLI-owned checkpoint push. */
56
58
  sessionBranch: string;
57
59
  /** Credential-free repository locator established by bootstrap. */
@@ -1 +1 @@
1
- {"version":3,"file":"hosted-loop-lifecycle.d.ts","sourceRoot":"","sources":["../src/hosted-loop-lifecycle.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"hosted-loop-lifecycle.d.ts","sourceRoot":"","sources":["../src/hosted-loop-lifecycle.ts"],"names":[],"mappings":"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"}
@@ -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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"}
@@ -498,6 +498,7 @@ export async function runHostedLoop(opts) {
498
498
  spawned = await spawnImpl({
499
499
  model: context.model,
500
500
  permission: permissionForOrigin(context.sessionOrigin),
501
+ projectId: context.projectId,
501
502
  cwd: context.workspaceDir,
502
503
  port: context.opencodePort,
503
504
  env: buildOpenCodeSpawnEnv(context),
@@ -882,6 +883,8 @@ function validateHostedLoopContext(value) {
882
883
  for (const name of OPTIONAL_CONTEXT_STRINGS)
883
884
  if (record[name] !== undefined && typeof record[name] !== 'string')
884
885
  fields.push(name);
886
+ if (record.projectId !== undefined && record.projectId !== null && !isNonemptyString(record.projectId))
887
+ fields.push('projectId');
885
888
  for (const name of ['prebaked', 'runSetupHook'])
886
889
  if (record[name] !== undefined && typeof record[name] !== 'boolean')
887
890
  fields.push(name);
@@ -1 +1 @@
1
- {"version":3,"file":"hosted-session-cli.d.ts","sourceRoot":"","sources":["../src/hosted-session-cli.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"hosted-session-cli.d.ts","sourceRoot":"","sources":["../src/hosted-session-cli.ts"],"names":[],"mappings":"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"}
@@ -428,6 +428,7 @@ export async function startHostedSession(opts) {
428
428
  });
429
429
  const session = sessionResp.session;
430
430
  const sessionId = requireString(session?.id, 'session id');
431
+ const sessionProjectId = typeof session?.projectId === 'string' && session.projectId ? session.projectId : undefined;
431
432
  const sessionBranch = requireString(session?.repoBranch, 'session repoBranch');
432
433
  log(`session ${sessionId} on ${sessionBranch}`);
433
434
  // (b) mint the session-scoped agent token (the sandbox's Orizu bearer).
@@ -558,6 +559,7 @@ export async function startHostedSession(opts) {
558
559
  taskFile: `${paths.runDirAbs}/task.txt`,
559
560
  workspaceDir: paths.repoDirRel,
560
561
  sessionBranch,
562
+ projectId: sessionProjectId,
561
563
  repositoryRemote: repo.cloneUrl,
562
564
  repositoryCredentialHelper: bootstrap.credentialHelper,
563
565
  model,
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAwLA,OAAO,EAAE,kBAAkB,EAAE,MAAM,6BAA6B,CAAA;AAEhE,eAAO,MAAM,wBAAwB,GAAI,iBAAiB,MAAM;;;EACJ,CAAA;AAE5D,OAAO,EAAE,iBAAiB,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAA;AAC5E,OAAO,EAAE,oBAAoB,EAAE,MAAM,iBAAiB,CAAA;AAwtCtD,wBAAgB,kBAAkB,CAAC,SAAS,EAAE,MAAM,GAAG;IAAE,OAAO,EAAE,MAAM,EAAE,CAAC;IAAC,kBAAkB,CAAC,EAAE,MAAM,EAAE,CAAA;CAAE,CA0B1G;AAED,eAAO,MAAM,iBAAiB,SAAU,CAAA;AACxC,eAAO,MAAM,uBAAuB,QAAkB,CAAA;AACtD,wBAAgB,mBAAmB,CAAC,SAAS,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,iBAAiB,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC,UAAU,CAexH;AAmMD,wBAAsB,IAAI,CAAC,OAAO,WAAwB,iBAiiBzD;AA6DD,OAAO,EAAE,kBAAkB,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAA;AAEhF,OAAO,EAAE,mBAAmB,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAwLA,OAAO,EAAE,kBAAkB,EAAE,MAAM,6BAA6B,CAAA;AAEhE,eAAO,MAAM,wBAAwB,GAAI,iBAAiB,MAAM;;;EACJ,CAAA;AAE5D,OAAO,EAAE,iBAAiB,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAA;AAC5E,OAAO,EAAE,oBAAoB,EAAE,MAAM,iBAAiB,CAAA;AAstCtD,wBAAgB,kBAAkB,CAAC,SAAS,EAAE,MAAM,GAAG;IAAE,OAAO,EAAE,MAAM,EAAE,CAAC;IAAC,kBAAkB,CAAC,EAAE,MAAM,EAAE,CAAA;CAAE,CA0B1G;AAED,eAAO,MAAM,iBAAiB,SAAU,CAAA;AACxC,eAAO,MAAM,uBAAuB,QAAkB,CAAA;AACtD,wBAAgB,mBAAmB,CAAC,SAAS,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,iBAAiB,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC,UAAU,CAexH;AAmMD,wBAAsB,IAAI,CAAC,OAAO,WAAwB,iBAiiBzD;AA6DD,OAAO,EAAE,kBAAkB,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAA;AAEhF,OAAO,EAAE,mBAAmB,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAA"}
package/dist/index.js CHANGED
@@ -532,9 +532,13 @@ async function submitRunResults() {
532
532
  const resultsJsonl = resultsPath.endsWith('.gz')
533
533
  ? gunzipSync(resultBytes).toString('utf8')
534
534
  : resultBytes.toString('utf8');
535
- const response = await authedFetch(`/api/cli/runs/submit?project=${encodeURIComponent(project)}`, {
536
- method: 'POST',
537
- headers: { 'Content-Type': 'application/json' },
535
+ const { sendScoreSave } = await import('./score-save-workflow.js');
536
+ const data = await sendScoreSave({
537
+ command: 'run',
538
+ path: `/api/cli/runs/submit?project=${encodeURIComponent(project)}`,
539
+ project,
540
+ promptVersionId,
541
+ saves: true,
538
542
  body: JSON.stringify({
539
543
  promptVersionId,
540
544
  runnerVersionId,
@@ -546,11 +550,7 @@ async function submitRunResults() {
546
550
  resultsJsonl,
547
551
  ...instructionSetProvenanceFields(project),
548
552
  }),
549
- });
550
- if (!response.ok) {
551
- throw new Error(`Failed to submit run: ${await response.text()}`);
552
- }
553
- const data = await parseJsonResponse(response, 'Run submit');
553
+ }, authedFetch);
554
554
  if (hasJsonFlag()) {
555
555
  printJson({ run: data.run });
556
556
  return;
@@ -1,26 +1,22 @@
1
- declare const COMMANDS: {
2
- readonly submit: {
3
- readonly label: "Score submit";
4
- readonly failed: "Failed to submit score";
5
- };
6
- readonly exec: {
7
- readonly label: "Scorer exec";
8
- readonly failed: "Failed to execute scorer";
9
- };
10
- };
11
- export interface ScoreSave {
12
- command: keyof typeof COMMANDS;
1
+ interface SaveRequest {
13
2
  /** The route path with its query, as sent. */
14
3
  path: string;
15
4
  body: string;
16
5
  project: string;
17
- scorerVersionId: string;
18
6
  /** False for `scorers exec --no-submit`, which saves nothing. */
19
7
  saves: boolean;
20
8
  }
9
+ /** `scores submit` and `scorers exec`, or `runs submit` (ORI-1097 S3b). */
10
+ export type ScoreSave = SaveRequest & {
11
+ command: 'submit' | 'exec';
12
+ scorerVersionId: string;
13
+ } | SaveRequest & {
14
+ command: 'run';
15
+ promptVersionId: string;
16
+ };
21
17
  /** Sends one request; calls `onRequestStart` just before anything goes out. */
22
18
  export type ScoreSaveRequest = (path: string, init: RequestInit, onRequestStart?: () => void) => Promise<Response>;
23
- /** `orizu scores submit` and `orizu scorers exec`: the reply, or an error saying whether the score may be saved. */
19
+ /** `orizu scores submit`, `orizu scorers exec` and `orizu runs submit`: the reply, or an error saying whether the save may have happened. */
24
20
  export declare function sendScoreSave(save: ScoreSave, request: ScoreSaveRequest): Promise<Record<string, unknown>>;
25
21
  export {};
26
22
  //# sourceMappingURL=score-save-workflow.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"score-save-workflow.d.ts","sourceRoot":"","sources":["../src/score-save-workflow.ts"],"names":[],"mappings":"AAUA,QAAA,MAAM,QAAQ;;;;;;;;;CAGJ,CAAA;AASV,MAAM,WAAW,SAAS;IACxB,OAAO,EAAE,MAAM,OAAO,QAAQ,CAAA;IAC9B,8CAA8C;IAC9C,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,EAAE,MAAM,CAAA;IACZ,OAAO,EAAE,MAAM,CAAA;IACf,eAAe,EAAE,MAAM,CAAA;IACvB,iEAAiE;IACjE,KAAK,EAAE,OAAO,CAAA;CACf;AAED,+EAA+E;AAC/E,MAAM,MAAM,gBAAgB,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,WAAW,EAAE,cAAc,CAAC,EAAE,MAAM,IAAI,KAAK,OAAO,CAAC,QAAQ,CAAC,CAAA;AA0FlH,oHAAoH;AACpH,wBAAsB,aAAa,CAAC,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,gBAAgB,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAMhH"}
1
+ {"version":3,"file":"score-save-workflow.d.ts","sourceRoot":"","sources":["../src/score-save-workflow.ts"],"names":[],"mappings":"AAuBA,UAAU,WAAW;IACnB,8CAA8C;IAC9C,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,EAAE,MAAM,CAAA;IACZ,OAAO,EAAE,MAAM,CAAA;IACf,iEAAiE;IACjE,KAAK,EAAE,OAAO,CAAA;CACf;AAED,2EAA2E;AAC3E,MAAM,MAAM,SAAS,GACjB,WAAW,GAAG;IAAE,OAAO,EAAE,QAAQ,GAAG,MAAM,CAAC;IAAC,eAAe,EAAE,MAAM,CAAA;CAAE,GACrE,WAAW,GAAG;IAAE,OAAO,EAAE,KAAK,CAAC;IAAC,eAAe,EAAE,MAAM,CAAA;CAAE,CAAA;AAE7D,+EAA+E;AAC/E,MAAM,MAAM,gBAAgB,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,WAAW,EAAE,cAAc,CAAC,EAAE,MAAM,IAAI,KAAK,OAAO,CAAC,QAAQ,CAAC,CAAA;AA2FlH,6IAA6I;AAC7I,wBAAsB,aAAa,CAAC,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,gBAAgB,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAMhH"}
@@ -4,16 +4,19 @@ import { datasetTransferTimeoutMs } from './dataset-transfer-policy.js';
4
4
  import { extractErrorMessage } from './error-response.js';
5
5
  import { appErrorOf, unreachedCode } from './request-outcome.js';
6
6
  // Loaded only through `await import(...)`, like the dataset workflows.
7
+ const SavedScore = Schema.Struct({ scoreRun: Schema.Struct({ id: Schema.NonEmptyString }) });
8
+ const SavedRun = Schema.Struct({ run: Schema.Struct({ id: Schema.NonEmptyString }) });
9
+ // `serverMayBeSaved` is what the route says when it cannot tell whether the run was saved.
7
10
  const COMMANDS = {
8
- submit: { label: 'Score submit', failed: 'Failed to submit score' },
9
- exec: { label: 'Scorer exec', failed: 'Failed to execute scorer' },
11
+ submit: { label: 'Score submit', failed: 'Failed to submit score', serverMayBeSaved: 'Score run may already be saved', saved: SavedScore },
12
+ exec: { label: 'Scorer exec', failed: 'Failed to execute scorer', serverMayBeSaved: 'Score run may already be saved', saved: SavedScore },
13
+ run: { label: 'Run submit', failed: 'Failed to submit run', serverMayBeSaved: 'Run may already be saved', saved: SavedRun },
10
14
  };
11
- // What the server says when it cannot tell whether the run was saved.
12
- const SERVER_MAY_BE_SAVED = 'Score run may already be saved';
13
15
  // Node's fetch publishes this once a request's whole body has been written.
14
16
  const BODY_SENT = 'undici:request:bodySent';
15
- const SavedReply = Schema.Struct({ scoreRun: Schema.Struct({ id: Schema.NonEmptyString }) });
16
- const scoreMayBeSaved = (save) => `The score may already be saved: run \`orizu scorers detail ${save.scorerVersionId} --project ${save.project}\` and check its newest score runs before running this again.`;
17
+ const mayBeSaved = (save) => save.command === 'run'
18
+ ? `The run may already be saved: run \`orizu runs list --project ${save.project} --prompt-version ${save.promptVersionId}\` and check its newest runs before running this again.`
19
+ : `The score may already be saved: run \`orizu scorers detail ${save.scorerVersionId} --project ${save.project}\` and check its newest score runs before running this again.`;
17
20
  // The run may be saved when the server says so, when the reply was lost, late
18
21
  // or unreadable after the request was sent, when a 5xx did not come from the
19
22
  // app (a gateway giving up while the app kept working), or when the reply has
@@ -30,7 +33,7 @@ class ScoreSaveFailure extends Error {
30
33
  // second run. The deadline starts once the whole body has been sent, so a
31
34
  // large upload on a slow link takes as long as it did before.
32
35
  function scoreSave(save, request, timeoutMs) {
33
- const { label, failed } = COMMANDS[save.command];
36
+ const { label, failed, serverMayBeSaved, saved } = COMMANDS[save.command];
34
37
  return Effect.suspend(() => {
35
38
  let sent = false;
36
39
  let timedOut = false;
@@ -62,7 +65,7 @@ function scoreSave(save, request, timeoutMs) {
62
65
  if (!response.ok) {
63
66
  const appError = await appErrorOf(response.clone());
64
67
  const detail = await extractErrorMessage(response);
65
- if (appError === SERVER_MAY_BE_SAVED)
68
+ if (appError === serverMayBeSaved)
66
69
  throw new ScoreSaveFailure(appError, true);
67
70
  if (response.status < 400 || (response.status >= 500 && appError === null)) {
68
71
  throw new ScoreSaveFailure(`${label} got no clear answer (status ${response.status}).`, true);
@@ -79,7 +82,7 @@ function scoreSave(save, request, timeoutMs) {
79
82
  data = undefined;
80
83
  }
81
84
  const usable = save.saves
82
- ? Result.isSuccess(Schema.decodeUnknownResult(SavedReply)(data))
85
+ ? Result.isSuccess(Schema.decodeUnknownResult(saved)(data))
83
86
  : typeof data === 'object' && data !== null && !Array.isArray(data);
84
87
  if (!usable) {
85
88
  throw new ScoreSaveFailure(`${label} returned an unexpected response (status ${response.status}).`, true);
@@ -111,9 +114,9 @@ function scoreSave(save, request, timeoutMs) {
111
114
  });
112
115
  });
113
116
  }
114
- /** `orizu scores submit` and `orizu scorers exec`: the reply, or an error saying whether the score may be saved. */
117
+ /** `orizu scores submit`, `orizu scorers exec` and `orizu runs submit`: the reply, or an error saying whether the save may have happened. */
115
118
  export async function sendScoreSave(save, request) {
116
- const exit = await Effect.runPromiseExit(scoreSave(save, request, datasetTransferTimeoutMs()).pipe(Effect.mapError(failure => new Error(failure.mayBeSaved && save.saves ? `${failure.message}\n${scoreMayBeSaved(save)}` : failure.message))));
119
+ const exit = await Effect.runPromiseExit(scoreSave(save, request, datasetTransferTimeoutMs()).pipe(Effect.mapError(failure => new Error(failure.mayBeSaved && save.saves ? `${failure.message}\n${mayBeSaved(save)}` : failure.message))));
117
120
  if (Exit.isSuccess(exit))
118
121
  return exit.value;
119
122
  throw Cause.squash(exit.cause);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "orizu",
3
- "version": "0.5.43",
3
+ "version": "0.5.44",
4
4
  "private": false,
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
@@ -19,3 +19,14 @@ export const HOSTED_AGENT_PROMPT = `You are the Orizu agent. You work in the per
19
19
  - Keep answers short and plain. Say what you did and what the person needs to know next.
20
20
  - Follow the repository's own conventions and any instructions in its AGENTS.md.
21
21
  - An Orizu app's page link is <Orizu server>${appPagePath('<app id>')}, where <Orizu server> is the server the orizu CLI talks to (https://app.orizu.ai by default). To give someone an app's link, run \`orizu projects list\` to get the \`<team>/<project>\` slug, then \`orizu apps list --project <team>/<project>\`: it prints each app's full link. The --project flag is required here: prompts cannot run in this environment. Never guess a link.`
22
+
23
+ /**
24
+ * The prompt for one session. Every project of an approved team shares the
25
+ * team's repository (ORI-2601; ADR-041, added in PR #2292), which starts with one project's folder, so the
26
+ * agent is told which project this session is for (ORI-2601).
27
+ */
28
+ export function hostedAgentPrompt(projectId?: string | null): string {
29
+ if (!projectId) return HOSTED_AGENT_PROMPT
30
+ return `${HOSTED_AGENT_PROMPT}
31
+ - This session is for the Orizu project whose id is ${projectId}. Run \`orizu projects list --json\` to find its \`<team>/<project>\` slug, and pass that whole slug as \`--project <team>/<project>\` to orizu commands. In this repository the project's files live in the folder \`projects/<project>/\`, named by the part after the slash only (for \`acme/support-bot\`, the folder is \`projects/support-bot/\`). If that folder is missing, do not create it by hand: Orizu writes a project folder with its own files (\`orizu.project.json\`, \`README.md\`, \`memory.md\`). Tell the person this project's folder is not in the workspace yet, and keep working on what they asked. Do not change another project's folder unless the person asks.`
32
+ }
@@ -82,6 +82,7 @@ export function brokerEnv(config: BrokerConfig): Record<string, string> {
82
82
  if (config.tokensFile) env.HB_TOKENS_FILE = config.tokensFile
83
83
  if (config.sessionId) env.HB_SESSION_ID = config.sessionId
84
84
  if (config.sessionBranch) env.HB_SESSION_BRANCH = config.sessionBranch
85
+ if (config.projectId) env.HB_PROJECT_ID = config.projectId
85
86
  if (config.repoTokenStatus) env.HB_REPO_TOKEN_STATUS = String(config.repoTokenStatus)
86
87
  if (config.eventsStatus) env.HB_EVENTS_STATUS = String(config.eventsStatus)
87
88
  if (config.denyWrite) env.HB_DENY_WRITE = '1'
@@ -178,6 +179,8 @@ export interface HostedBootstrapRehearsal {
178
179
  sessionId: string
179
180
  runId: string
180
181
  sessionBranch: string
182
+ /** The project the fake /sessions endpoint reports for the session. */
183
+ projectId: string
181
184
  repoFullName: string
182
185
  provider: SandboxProvider
183
186
  resolveCloneUrl: (repo: string) => string
@@ -242,6 +245,7 @@ export async function createHostedBootstrapRehearsal(
242
245
 
243
246
  const workspaceId = 'ws-hosted-1'
244
247
  const sessionId = 'sess-hosted-1'
248
+ const projectId = '6f1c2d3e-4b5a-4c6d-8e7f-901a2b3c4d5e'
245
249
  const runId = 'run-hosted-1'
246
250
  const sessionBranch = `orizu/session-${sessionId}`
247
251
 
@@ -280,6 +284,7 @@ export async function createHostedBootstrapRehearsal(
280
284
  fullRunApi: options.fullRunApi,
281
285
  sessionId,
282
286
  sessionBranch,
287
+ projectId,
283
288
  })
284
289
 
285
290
  // Real authenticated smart-HTTP git server on loopback: this is what makes the
@@ -301,6 +306,7 @@ export async function createHostedBootstrapRehearsal(
301
306
  sessionId,
302
307
  runId,
303
308
  sessionBranch,
309
+ projectId,
304
310
  repoFullName: repo.repoFullName,
305
311
  provider,
306
312
  resolveCloneUrl: () => cloneUrl,
@@ -70,6 +70,8 @@ export interface BrokerConfig {
70
70
  * a pre-seeded session branch on the local bare repo). */
71
71
  sessionId?: string
72
72
  sessionBranch?: string
73
+ /** E2E: the project the /sessions endpoint reports, as the real route does. */
74
+ projectId?: string
73
75
  }
74
76
 
75
77
  export function readBrokerConfigFromEnv(env: NodeJS.ProcessEnv): BrokerConfig {
@@ -87,6 +89,7 @@ export function readBrokerConfigFromEnv(env: NodeJS.ProcessEnv): BrokerConfig {
87
89
  fullRunApi: env.HB_FULL_RUN_API === '1',
88
90
  sessionId: env.HB_SESSION_ID,
89
91
  sessionBranch: env.HB_SESSION_BRANCH,
92
+ projectId: env.HB_PROJECT_ID,
90
93
  }
91
94
  }
92
95
 
@@ -151,7 +154,8 @@ export function startBrokerServer(config: BrokerConfig): { port: number; stop: (
151
154
  const id = config.sessionId ?? `sess-e2e-${sessions}`
152
155
  const repoBranch = config.sessionBranch ?? `orizu/session-${id}`
153
156
  return json(
154
- { session: { id, workspaceId: sessionsMatch[1], repoBranch, status: 'active' } },
157
+ // Like the real route, a session has a project only when the request names one.
158
+ { session: { id, workspaceId: sessionsMatch[1], projectId: typeof body.projectSlug === 'string' ? config.projectId ?? null : null, repoBranch, status: 'active' } },
155
159
  201
156
160
  )
157
161
  }
@@ -53,7 +53,7 @@ import { readFileSync } from 'fs'
53
53
 
54
54
  import { refreshHostedModels } from '../src/hosted-model-cache.mjs'
55
55
 
56
- import { HOSTED_AGENT_NAME, HOSTED_AGENT_PROMPT } from './hosted-agent-prompt.js'
56
+ import { HOSTED_AGENT_NAME, hostedAgentPrompt } from './hosted-agent-prompt.js'
57
57
  import { parseModelIdentity } from './provider-registry.js'
58
58
 
59
59
  import { HARNESS_NAMES } from './hosted-harness.js'
@@ -1098,6 +1098,8 @@ export interface OpenCodeConfigOptions {
1098
1098
  /** OpenCode permission map; defaults to allow-all EXCEPT the headless-denied
1099
1099
  * tools below (sandbox is the boundary for everything else). */
1100
1100
  permission?: Record<string, unknown>
1101
+ /** The session's Orizu project, named in the agent's prompt (ORI-2601). */
1102
+ projectId?: string | null
1101
1103
  }
1102
1104
 
1103
1105
  /**
@@ -1134,7 +1136,7 @@ export function buildOpenCodeConfigContent(opts: OpenCodeConfigOptions): string
1134
1136
  model: opts.model,
1135
1137
  permission: opts.permission ?? defaultHeadlessPermission(),
1136
1138
  // Replaces OpenCode's built-in "You are opencode…" prompt (ORI-2207).
1137
- agent: { [HOSTED_AGENT_NAME]: { mode: 'primary', prompt: HOSTED_AGENT_PROMPT } },
1139
+ agent: { [HOSTED_AGENT_NAME]: { mode: 'primary', prompt: hostedAgentPrompt(opts.projectId) } },
1138
1140
  })
1139
1141
  }
1140
1142
 
@@ -55,6 +55,8 @@ export interface HostedLoopContext {
55
55
  taskFile: string
56
56
  /** Directory the agent operates in (the cloned session-branch workspace). */
57
57
  workspaceDir: string
58
+ /** The session's Orizu project, named in the agent's prompt (ORI-2601). */
59
+ projectId?: string | null
58
60
  /** Validated destination branch for the CLI-owned checkpoint push. */
59
61
  sessionBranch: string
60
62
  /** Credential-free repository locator established by bootstrap. */
@@ -674,6 +674,7 @@ export async function runHostedLoop(opts: RunHostedLoopOptions): Promise<HostedL
674
674
  spawned = await spawnImpl({
675
675
  model: context.model,
676
676
  permission: permissionForOrigin(context.sessionOrigin),
677
+ projectId: context.projectId,
677
678
  cwd: context.workspaceDir,
678
679
  port: context.opencodePort,
679
680
  env: buildOpenCodeSpawnEnv(context),
@@ -1063,6 +1064,7 @@ function validateHostedLoopContext(value: unknown): { context: HostedLoopContext
1063
1064
  if (record.sandboxBudgetMs !== undefined && (typeof record.sandboxBudgetMs !== 'number' || !Number.isFinite(record.sandboxBudgetMs) || record.sandboxBudgetMs <= 0)) fields.push('sandboxBudgetMs')
1064
1065
  if (record.opencodePort !== undefined && (typeof record.opencodePort !== 'number' || !Number.isInteger(record.opencodePort) || record.opencodePort <= 0 || record.opencodePort > 65_535)) fields.push('opencodePort')
1065
1066
  for (const name of OPTIONAL_CONTEXT_STRINGS) if (record[name] !== undefined && typeof record[name] !== 'string') fields.push(name)
1067
+ if (record.projectId !== undefined && record.projectId !== null && !isNonemptyString(record.projectId)) fields.push('projectId')
1066
1068
  for (const name of ['prebaked', 'runSetupHook'] as const) if (record[name] !== undefined && typeof record[name] !== 'boolean') fields.push(name)
1067
1069
  return { context: fields.length === 0 ? value as HostedLoopContext : null, fields: [...new Set(fields)] }
1068
1070
  }
@@ -678,8 +678,9 @@ export async function startHostedSession(
678
678
  }),
679
679
  }
680
680
  )
681
- const session = sessionResp.session as { id?: unknown; repoBranch?: unknown } | undefined
681
+ const session = sessionResp.session as { id?: unknown; repoBranch?: unknown; projectId?: unknown } | undefined
682
682
  const sessionId = requireString(session?.id, 'session id')
683
+ const sessionProjectId = typeof session?.projectId === 'string' && session.projectId ? session.projectId : undefined
683
684
  const sessionBranch = requireString(session?.repoBranch, 'session repoBranch')
684
685
  log(`session ${sessionId} on ${sessionBranch}`)
685
686
 
@@ -821,6 +822,7 @@ export async function startHostedSession(
821
822
  taskFile: `${paths.runDirAbs}/task.txt`,
822
823
  workspaceDir: paths.repoDirRel,
823
824
  sessionBranch,
825
+ projectId: sessionProjectId,
824
826
  repositoryRemote: repo.cloneUrl,
825
827
  repositoryCredentialHelper: bootstrap.credentialHelper,
826
828
  model,
package/src/index.ts CHANGED
@@ -796,9 +796,13 @@ async function submitRunResults() {
796
796
  const resultsJsonl = resultsPath.endsWith('.gz')
797
797
  ? gunzipSync(resultBytes).toString('utf8')
798
798
  : resultBytes.toString('utf8')
799
- const response = await authedFetch(`/api/cli/runs/submit?project=${encodeURIComponent(project)}`, {
800
- method: 'POST',
801
- headers: { 'Content-Type': 'application/json' },
799
+ const { sendScoreSave } = await import('./score-save-workflow.js')
800
+ const data = await sendScoreSave({
801
+ command: 'run',
802
+ path: `/api/cli/runs/submit?project=${encodeURIComponent(project)}`,
803
+ project,
804
+ promptVersionId,
805
+ saves: true,
802
806
  body: JSON.stringify({
803
807
  promptVersionId,
804
808
  runnerVersionId,
@@ -810,19 +814,13 @@ async function submitRunResults() {
810
814
  resultsJsonl,
811
815
  ...instructionSetProvenanceFields(project),
812
816
  }),
813
- })
814
-
815
- if (!response.ok) {
816
- throw new Error(`Failed to submit run: ${await response.text()}`)
817
- }
818
-
819
- const data = await parseJsonResponse<{
817
+ }, authedFetch) as {
820
818
  run: {
821
819
  id: string
822
820
  aggregateScore: number | null
823
821
  perRowResultsStoragePath: string
824
822
  }
825
- }>(response, 'Run submit')
823
+ }
826
824
  if (hasJsonFlag()) {
827
825
  printJson({ run: data.run })
828
826
  return
@@ -8,34 +8,39 @@ import { appErrorOf, unreachedCode } from './request-outcome.js'
8
8
 
9
9
  // Loaded only through `await import(...)`, like the dataset workflows.
10
10
 
11
+ const SavedScore = Schema.Struct({ scoreRun: Schema.Struct({ id: Schema.NonEmptyString }) })
12
+ const SavedRun = Schema.Struct({ run: Schema.Struct({ id: Schema.NonEmptyString }) })
13
+
14
+ // `serverMayBeSaved` is what the route says when it cannot tell whether the run was saved.
11
15
  const COMMANDS = {
12
- submit: { label: 'Score submit', failed: 'Failed to submit score' },
13
- exec: { label: 'Scorer exec', failed: 'Failed to execute scorer' },
16
+ submit: { label: 'Score submit', failed: 'Failed to submit score', serverMayBeSaved: 'Score run may already be saved', saved: SavedScore },
17
+ exec: { label: 'Scorer exec', failed: 'Failed to execute scorer', serverMayBeSaved: 'Score run may already be saved', saved: SavedScore },
18
+ run: { label: 'Run submit', failed: 'Failed to submit run', serverMayBeSaved: 'Run may already be saved', saved: SavedRun },
14
19
  } as const
15
20
 
16
- // What the server says when it cannot tell whether the run was saved.
17
- const SERVER_MAY_BE_SAVED = 'Score run may already be saved'
18
21
  // Node's fetch publishes this once a request's whole body has been written.
19
22
  const BODY_SENT = 'undici:request:bodySent'
20
23
 
21
- const SavedReply = Schema.Struct({ scoreRun: Schema.Struct({ id: Schema.NonEmptyString }) })
22
-
23
- export interface ScoreSave {
24
- command: keyof typeof COMMANDS
24
+ interface SaveRequest {
25
25
  /** The route path with its query, as sent. */
26
26
  path: string
27
27
  body: string
28
28
  project: string
29
- scorerVersionId: string
30
29
  /** False for `scorers exec --no-submit`, which saves nothing. */
31
30
  saves: boolean
32
31
  }
33
32
 
33
+ /** `scores submit` and `scorers exec`, or `runs submit` (ORI-1097 S3b). */
34
+ export type ScoreSave =
35
+ | SaveRequest & { command: 'submit' | 'exec'; scorerVersionId: string }
36
+ | SaveRequest & { command: 'run'; promptVersionId: string }
37
+
34
38
  /** Sends one request; calls `onRequestStart` just before anything goes out. */
35
39
  export type ScoreSaveRequest = (path: string, init: RequestInit, onRequestStart?: () => void) => Promise<Response>
36
40
 
37
- const scoreMayBeSaved = (save: ScoreSave) =>
38
- `The score may already be saved: run \`orizu scorers detail ${save.scorerVersionId} --project ${save.project}\` and check its newest score runs before running this again.`
41
+ const mayBeSaved = (save: ScoreSave) => save.command === 'run'
42
+ ? `The run may already be saved: run \`orizu runs list --project ${save.project} --prompt-version ${save.promptVersionId}\` and check its newest runs before running this again.`
43
+ : `The score may already be saved: run \`orizu scorers detail ${save.scorerVersionId} --project ${save.project}\` and check its newest score runs before running this again.`
39
44
 
40
45
  // The run may be saved when the server says so, when the reply was lost, late
41
46
  // or unreadable after the request was sent, when a 5xx did not come from the
@@ -50,7 +55,7 @@ class ScoreSaveFailure extends Error {
50
55
  // second run. The deadline starts once the whole body has been sent, so a
51
56
  // large upload on a slow link takes as long as it did before.
52
57
  function scoreSave(save: ScoreSave, request: ScoreSaveRequest, timeoutMs: number): Effect.Effect<Record<string, unknown>, ScoreSaveFailure> {
53
- const { label, failed } = COMMANDS[save.command]
58
+ const { label, failed, serverMayBeSaved, saved } = COMMANDS[save.command]
54
59
  return Effect.suspend(() => {
55
60
  let sent = false
56
61
  let timedOut = false
@@ -79,7 +84,7 @@ function scoreSave(save: ScoreSave, request: ScoreSaveRequest, timeoutMs: number
79
84
  if (!response.ok) {
80
85
  const appError = await appErrorOf(response.clone())
81
86
  const detail = await extractErrorMessage(response)
82
- if (appError === SERVER_MAY_BE_SAVED) throw new ScoreSaveFailure(appError, true)
87
+ if (appError === serverMayBeSaved) throw new ScoreSaveFailure(appError, true)
83
88
  if (response.status < 400 || (response.status >= 500 && appError === null)) {
84
89
  throw new ScoreSaveFailure(`${label} got no clear answer (status ${response.status}).`, true)
85
90
  }
@@ -94,7 +99,7 @@ function scoreSave(save: ScoreSave, request: ScoreSaveRequest, timeoutMs: number
94
99
  data = undefined
95
100
  }
96
101
  const usable = save.saves
97
- ? Result.isSuccess(Schema.decodeUnknownResult(SavedReply)(data))
102
+ ? Result.isSuccess(Schema.decodeUnknownResult(saved)(data))
98
103
  : typeof data === 'object' && data !== null && !Array.isArray(data)
99
104
  if (!usable) {
100
105
  throw new ScoreSaveFailure(`${label} returned an unexpected response (status ${response.status}).`, true)
@@ -122,10 +127,10 @@ function scoreSave(save: ScoreSave, request: ScoreSaveRequest, timeoutMs: number
122
127
  })
123
128
  }
124
129
 
125
- /** `orizu scores submit` and `orizu scorers exec`: the reply, or an error saying whether the score may be saved. */
130
+ /** `orizu scores submit`, `orizu scorers exec` and `orizu runs submit`: the reply, or an error saying whether the save may have happened. */
126
131
  export async function sendScoreSave(save: ScoreSave, request: ScoreSaveRequest): Promise<Record<string, unknown>> {
127
132
  const exit = await Effect.runPromiseExit(scoreSave(save, request, datasetTransferTimeoutMs()).pipe(
128
- Effect.mapError(failure => new Error(failure.mayBeSaved && save.saves ? `${failure.message}\n${scoreMayBeSaved(save)}` : failure.message)),
133
+ Effect.mapError(failure => new Error(failure.mayBeSaved && save.saves ? `${failure.message}\n${mayBeSaved(save)}` : failure.message)),
129
134
  ))
130
135
  if (Exit.isSuccess(exit)) return exit.value
131
136
  throw Cause.squash(exit.cause)