openpond 0.0.61 → 0.0.63

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.
Files changed (108) hide show
  1. package/dist/chunks/{actions-command-QVYIPEN5.js → actions-command-DZ6D7JTO.js} +2 -2
  2. package/dist/chunks/{app-layer-GCNXR4F3.js → app-layer-TUAFALOE.js} +5 -5
  3. package/dist/chunks/{app-server-runtime-737DBOSH.js → app-server-runtime-O26LVUYH.js} +7 -7
  4. package/dist/chunks/{apps-JB3POF6Z.js → apps-KSZRA7Y2.js} +5 -5
  5. package/dist/chunks/{chunk-NPEWMLRH.js → chunk-66KQLYSH.js} +1 -1
  6. package/dist/chunks/{chunk-ZJPLJP2Q.js → chunk-6FKBOGA4.js} +2 -2
  7. package/dist/chunks/{chunk-6RMGHEFF.js → chunk-7IFPXSSJ.js} +1 -1
  8. package/dist/chunks/{chunk-5HMXXGWZ.js → chunk-7UVEB2AZ.js} +2 -2
  9. package/dist/chunks/{chunk-32R4GQD3.js → chunk-IXA5PMXC.js} +2 -2
  10. package/dist/chunks/{chunk-XIUCBUUQ.js → chunk-J2REM7LE.js} +1 -1
  11. package/dist/chunks/{chunk-XSHMPOQV.js → chunk-JGOP4GCK.js} +6 -0
  12. package/dist/chunks/{chunk-TOMMZN6V.js → chunk-JTFDOA2P.js} +41 -16
  13. package/dist/chunks/{chunk-IZ3XGRAG.js → chunk-K4JEWEJQ.js} +1 -1
  14. package/dist/chunks/{chunk-L5JTI6LQ.js → chunk-KGU437HZ.js} +4 -2
  15. package/dist/chunks/{chunk-ZAX7MLQJ.js → chunk-LEL5AQJU.js} +1 -1
  16. package/dist/chunks/{chunk-B3WVCPXG.js → chunk-PLDCQVNW.js} +71 -6
  17. package/dist/chunks/{chunk-YSVY4O42.js → chunk-T55IL3GI.js} +1 -1
  18. package/dist/chunks/{chunk-BQQS5RRI.js → chunk-V2CTXKS2.js} +156 -61
  19. package/dist/chunks/{chunk-LBIVEX6V.js → chunk-YDH34BGG.js} +35 -33
  20. package/dist/chunks/{cli-MFFCFH3P.js → cli-LPFU4ULD.js} +6 -6
  21. package/dist/chunks/{core-commands-KCFU7U5Y.js → core-commands-OEOBYFIW.js} +6 -6
  22. package/dist/chunks/{desktop-test-FEQVX4N4.js → desktop-test-BRLZF3O7.js} +5 -5
  23. package/dist/chunks/{extension-M4DH25KH.js → extension-5BUCIDKG.js} +1 -1
  24. package/dist/chunks/{help-ZUIE4EPY.js → help-MT6VPW4X.js} +1 -1
  25. package/dist/chunks/{opchat-7KRZIFFD.js → opchat-O4DVKNFW.js} +5 -5
  26. package/dist/chunks/{organizations-ZWPFNM6K.js → organizations-ACNOJ57Q.js} +7 -7
  27. package/dist/chunks/{profile-GF57OWI6.js → profile-7LLWXAJE.js} +12 -7
  28. package/dist/chunks/{project-agent-65MXZHGM.js → project-agent-RVYQYTU2.js} +27 -7
  29. package/dist/chunks/{sandbox-command-WH2OQRHP.js → sandbox-command-QST23BX5.js} +6 -6
  30. package/dist/chunks/{sandbox-template-W5HU24TF.js → sandbox-template-N7UG3P6V.js} +7 -7
  31. package/dist/chunks/{src-YUIJKNIC.js → src-CPM5Q7T5.js} +4 -4
  32. package/dist/chunks/{src-O5QXOQ5H.js → src-M37V6NVU.js} +60 -13
  33. package/dist/chunks/{teams-bot-5ATLXSHC.js → teams-bot-ITTI47XS.js} +5 -5
  34. package/dist/chunks/{workspaces-4XJ3GXL4.js → workspaces-CYBR37US.js} +2 -2
  35. package/dist/cli.js +13 -13
  36. package/dist/index.js +6 -0
  37. package/dist/sandbox/client-handles.d.ts +2 -1
  38. package/dist/sandbox/client.d.ts +3 -1
  39. package/dist/sandbox/types/org-project-agent.d.ts +13 -0
  40. package/dist/web/assets/{AppDialog-BvdkukM_.js → AppDialog-wIb8mGQ0.js} +1 -1
  41. package/dist/web/assets/{AppsView-9h3-BQbk.js → AppsView-D097dPIV.js} +1 -1
  42. package/dist/web/assets/{BrowserSidebar-C6WJ5wIu.js → BrowserSidebar-DrD-o_yB.js} +1 -1
  43. package/dist/web/assets/{CommandMenu-C7en9zgQ.js → CommandMenu-L5LelA2h.js} +1 -1
  44. package/dist/web/assets/{CommunityView-CoqI6Dks.js → CommunityView-DUJ8NryS.js} +1 -1
  45. package/dist/web/assets/{ComposerCreateImproveStrip-DMq6A2Ba.js → ComposerCreateImproveStrip-BP-7DmQG.js} +1 -1
  46. package/dist/web/assets/{GetStartedView-B-zgx1jI.js → GetStartedView-B7gB6Hii.js} +1 -1
  47. package/dist/web/assets/{LabModelVersionDetailPage-CkNOBygO.js → LabModelVersionDetailPage-CNDz2a6I.js} +1 -1
  48. package/dist/web/assets/{LabSkillSidebar-CmRHuu78.js → LabSkillSidebar-BImOQcjk.js} +1 -1
  49. package/dist/web/assets/{LabsRoute-DLPZqEev.js → LabsRoute-BauSK1is.js} +3 -3
  50. package/dist/web/assets/{MainChatThread-CFGsODmc.js → MainChatThread-BZvAqQO6.js} +2 -2
  51. package/dist/web/assets/MainPane-CuhwxMxg.js +6 -0
  52. package/dist/web/assets/{MarkdownText-C4Ixpl-i.js → MarkdownText-gwAue4u5.js} +1 -1
  53. package/dist/web/assets/{Messages-DmEk_BWS.js → Messages-DijmQL-z.js} +8 -8
  54. package/dist/web/assets/{NativeSkillSidebar-Cn824hrX.js → NativeSkillSidebar-aCkrdGa0.js} +1 -1
  55. package/dist/web/assets/{NewProjectDialog-BFEDv4Ga.js → NewProjectDialog-D98WIQzr.js} +1 -1
  56. package/dist/web/assets/{OutputsPage-hfQyqQzx.js → OutputsPage-BA0c6cfy.js} +1 -1
  57. package/dist/web/assets/{RightChatPanelStack-CiPKX3Ea.js → RightChatPanelStack-DKDEmrEH.js} +1 -1
  58. package/dist/web/assets/{ScheduledWorkPage-CyoZsUCe.js → ScheduledWorkPage-DeHi99mv.js} +1 -1
  59. package/dist/web/assets/SettingsView--fL3Ecuy.js +6 -0
  60. package/dist/web/assets/SettingsView-BS5m5vdt.css +1 -0
  61. package/dist/web/assets/TeamChatView-D2mCoLZ3.js +3 -0
  62. package/dist/web/assets/{TerminalOverlay-CpsPuPIM.js → TerminalOverlay-BHMsVp4L.js} +1 -1
  63. package/dist/web/assets/{TrainingCreationPanel-DMLpUVbJ.js → TrainingCreationPanel-CPnMWgkt.js} +1 -1
  64. package/dist/web/assets/{TrainingDraftPanel-gAhpwkYs.js → TrainingDraftPanel-0scEtzSW.js} +1 -1
  65. package/dist/web/assets/{UsageSettingsSection-WBtxLhBx.js → UsageSettingsSection-COoCLLg6.js} +1 -1
  66. package/dist/web/assets/{WorkspaceDiffPanel-CUpwqvzZ.js → WorkspaceDiffPanel-BFTwZ_dB.js} +5 -5
  67. package/dist/web/assets/{WorkspaceEnvironmentMenu-LIbOBT4f.js → WorkspaceEnvironmentMenu-DFlkdd9T.js} +3 -3
  68. package/dist/web/assets/{WorkspaceGitDialogs-8y7rRSou.js → WorkspaceGitDialogs-Dt3LO27Z.js} +1 -1
  69. package/dist/web/assets/{WorkspaceMonacoEditor-BpHmWrCD.js → WorkspaceMonacoEditor-3g05teoR.js} +3 -3
  70. package/dist/web/assets/{arrow-up-right-3TbyK1ec.js → arrow-up-right-DYGSWA2J.js} +1 -1
  71. package/dist/web/assets/{chevron-up-C4tTuxXs.js → chevron-up-4qfvI9iW.js} +1 -1
  72. package/dist/web/assets/{cloud-upload-ZGHLWEn3.js → cloud-upload-COReKxOy.js} +1 -1
  73. package/dist/web/assets/{cssMode-kfZCOm_r.js → cssMode-BbH67BYF.js} +1 -1
  74. package/dist/web/assets/{folder-open-C4WG_lDr.js → folder-open-9OjGqNgP.js} +1 -1
  75. package/dist/web/assets/{folder-plus-CKRaDeR3.js → folder-plus-DF5E6zr3.js} +1 -1
  76. package/dist/web/assets/{git-branch-yLi5tff8.js → git-branch-eCwyZXMl.js} +1 -1
  77. package/dist/web/assets/{git-commit-horizontal-BPyGYak3.js → git-commit-horizontal-cPm51DqY.js} +1 -1
  78. package/dist/web/assets/{htmlMode-DT--Et9k.js → htmlMode-DD6Oge4x.js} +1 -1
  79. package/dist/web/assets/{index--lwjVZXT.js → index-BO2W2U23.js} +66 -66
  80. package/dist/web/assets/index-BRLugX1S.js +1 -0
  81. package/dist/web/assets/{index-B_HvNtwl.css → index-Y7IoiSlQ.css} +1 -1
  82. package/dist/web/assets/{info-CzzHwSUb.js → info-p1mFpqBI.js} +1 -1
  83. package/dist/web/assets/{jsonMode-CKg1GzqC.js → jsonMode-C2Xd56A_.js} +1 -1
  84. package/dist/web/assets/{lspLanguageFeatures-B76Yo6xo.js → lspLanguageFeatures-BjYEk4gJ.js} +1 -1
  85. package/dist/web/assets/{monaco.contribution-BRuQU-2A.js → monaco.contribution-Bo-5m7yy.js} +2 -2
  86. package/dist/web/assets/{monaco.contribution-CLpGfCSS.js → monaco.contribution-C7WMqwmc.js} +2 -2
  87. package/dist/web/assets/{monaco.contribution-CS3H8RrD.js → monaco.contribution-DzWlEgU1.js} +2 -2
  88. package/dist/web/assets/{monaco.contribution-DqeexNAI.js → monaco.contribution-quEPEMQZ.js} +2 -2
  89. package/dist/web/assets/{play-EDFh3BPS.js → play-Ctx-iMqd.js} +1 -1
  90. package/dist/web/assets/{python-De_Vr_hD.js → python-Cm64qCpk.js} +1 -1
  91. package/dist/web/assets/{refresh-cw-DRJJ-X1U.js → refresh-cw-Bn28jIl0.js} +1 -1
  92. package/dist/web/assets/{save-BSxqIWP6.js → save-BM5IQX65.js} +1 -1
  93. package/dist/web/assets/{square-BV-Vgh5a.js → square-DAGpFfSr.js} +1 -1
  94. package/dist/web/assets/{toggleHighContrast-1Suz4cxo.js → toggleHighContrast-DLW8Fnck.js} +1 -1
  95. package/dist/web/assets/{tsMode-DMyzpvFI.js → tsMode-BleUN_8S.js} +1 -1
  96. package/dist/web/assets/{upload-jVxCW0dO.js → upload-vaAKFfxi.js} +1 -1
  97. package/dist/web/assets/{useLocalAgentSchedules-DNpnOBA8.js → useLocalAgentSchedules-Ccenbqf6.js} +1 -1
  98. package/dist/web/assets/{wifi-off-IzGGiOX_.js → wifi-off-DJA9KReb.js} +1 -1
  99. package/dist/web/assets/{workers-Crdnk6Zy.js → workers-CFG-afha.js} +1 -1
  100. package/dist/web/assets/{yaml-CF3tmjgW.js → yaml-Cs8iZKVC.js} +1 -1
  101. package/dist/web/index.html +2 -2
  102. package/docs/command-reference.md +2 -0
  103. package/package.json +1 -1
  104. package/dist/web/assets/MainPane-B2kcZpM0.js +0 -6
  105. package/dist/web/assets/SettingsView-BZkrIOc0.css +0 -1
  106. package/dist/web/assets/SettingsView-DWWs9gel.js +0 -6
  107. package/dist/web/assets/TeamChatView-C4RWAO8c.js +0 -3
  108. package/dist/web/assets/index-C9-OtZl8.js +0 -1
@@ -11,7 +11,7 @@ import {
11
11
  truncatePatch,
12
12
  uniqueSortedPaths,
13
13
  workspaceImageContentType
14
- } from "./chunk-NPEWMLRH.js";
14
+ } from "./chunk-66KQLYSH.js";
15
15
  import {
16
16
  AGENT_PROTOCOL_VERSION,
17
17
  AGENT_RPC_METHODS,
@@ -35,13 +35,13 @@ import {
35
35
  event,
36
36
  now,
37
37
  textFromUnknown
38
- } from "./chunk-6RMGHEFF.js";
38
+ } from "./chunk-7IFPXSSJ.js";
39
39
  import {
40
40
  getBundledRuntimeVersion,
41
41
  loadOpenPondAccountContext,
42
42
  loadOpenPondHostedModels,
43
43
  streamOpenPondHostedChatTurn
44
- } from "./chunk-32R4GQD3.js";
44
+ } from "./chunk-IXA5PMXC.js";
45
45
  import {
46
46
  AppPreferencesSchema,
47
47
  ApplyCreateImproveRunActionRequestSchema,
@@ -76,6 +76,7 @@ import {
76
76
  CrossSystemWorldSpecSchema,
77
77
  DEFAULT_CODEX_CHAT_MODEL,
78
78
  DEFAULT_CODEX_REASONING_EFFORT,
79
+ DEFAULT_HARNESS_REFINER_MODEL,
79
80
  DEFAULT_OPENPOND_CHAT_MODEL,
80
81
  DEFAULT_OPENPOND_COMMAND_ACCESS_MODE,
81
82
  DEFAULT_PERSONALIZATION_TEMPLATE_ID,
@@ -161,7 +162,7 @@ import {
161
162
  runProfileSkillCommand,
162
163
  sidebarFileBookmarkId,
163
164
  workOutputMediaTypesCompatible
164
- } from "./chunk-L5JTI6LQ.js";
165
+ } from "./chunk-KGU437HZ.js";
165
166
  import {
166
167
  PROJECT_ACTION_CONFIG_PATH,
167
168
  createLocalActionRunner,
@@ -270,7 +271,7 @@ import {
270
271
  uniqueEventRefs,
271
272
  validateConnectedAppProviderOperationRequest,
272
273
  verifyRequiredOutputs
273
- } from "./chunk-TOMMZN6V.js";
274
+ } from "./chunk-JTFDOA2P.js";
274
275
  import {
275
276
  external_exports
276
277
  } from "./chunk-WYDVQOBL.js";
@@ -281,7 +282,7 @@ import {
281
282
  normalizeSandboxApiUrl,
282
283
  readApiJson,
283
284
  withVercelProtectionBypass
284
- } from "./chunk-XSHMPOQV.js";
285
+ } from "./chunk-JGOP4GCK.js";
285
286
  import {
286
287
  __commonJS,
287
288
  __toESM
@@ -7914,7 +7915,6 @@ async function loadLocalHarnessRuntimeFromRelease(input) {
7914
7915
  }))
7915
7916
  );
7916
7917
  const skills = [];
7917
- const skillContexts = [];
7918
7918
  const readers = /* @__PURE__ */ new Map();
7919
7919
  for (const asset3 of release.agentSnapshot.skills) {
7920
7920
  const markdown = await readVerifiedAsset(sourceRoot, asset3.path, asset3.contentHash);
@@ -7941,11 +7941,6 @@ async function loadLocalHarnessRuntimeFromRelease(input) {
7941
7941
  resourceFiles
7942
7942
  };
7943
7943
  skills.push(skill);
7944
- skillContexts.push([
7945
- `Harness Skill (${asset3.path}, ${parsed.name}):`,
7946
- parsed.description,
7947
- parsed.body.trim()
7948
- ].filter(Boolean).join("\n"));
7949
7944
  readers.set(skill.name, async () => {
7950
7945
  const currentMarkdown = await readVerifiedAsset(sourceRoot, asset3.path, asset3.contentHash);
7951
7946
  const current = parseProfileSkillMarkdown(currentMarkdown);
@@ -7974,20 +7969,10 @@ async function loadLocalHarnessRuntimeFromRelease(input) {
7974
7969
  return read();
7975
7970
  } : null
7976
7971
  };
7977
- const agents = await Promise.all(
7978
- release.agentSnapshot.agents.map(async (asset3) => ({
7979
- path: asset3.path,
7980
- content: await readVerifiedAsset(sourceRoot, asset3.path, asset3.contentHash)
7981
- }))
7982
- );
7983
7972
  const instructionSections = instructions.sort((left, right) => left.path.localeCompare(right.path)).map(({ path: instructionPath, content }) => [
7984
- `Harness instruction (${instructionPath}):`,
7973
+ `Active Harness instruction (${instructionPath}):`,
7985
7974
  content.trim()
7986
7975
  ].join("\n")).filter((content) => content.trim().length > 0);
7987
- const agentSections = agents.sort((left, right) => left.path.localeCompare(right.path)).map(({ path: agentPath, content }) => [
7988
- `Harness Agent (${agentPath}):`,
7989
- content.trim()
7990
- ].join("\n"));
7991
7976
  const capabilityReceipt = [
7992
7977
  "Harness capability receipt:",
7993
7978
  JSON.stringify({
@@ -8010,11 +7995,14 @@ async function loadLocalHarnessRuntimeFromRelease(input) {
8010
7995
  })
8011
7996
  ].join("\n");
8012
7997
  const instructionContext = [
8013
- ...instructionSections,
8014
- ...skillContexts.sort(),
8015
- ...agentSections,
8016
- capabilityReceipt
8017
- ].filter((content) => content.trim().length > 0).join("\n\n");
7998
+ capabilityReceipt,
7999
+ instructionSections.length > 0 ? [
8000
+ "Active Harness preflight:",
8001
+ "Apply the following released instructions when planning work and immediately before every tool call.",
8002
+ "Preflight each call: (1) identify any active instruction that matches the planned operation, (2) inspect the exact tool arguments for a forbidden pattern, and (3) rewrite the call before sending it when a pattern matches. Compliance is required even when the prohibited call might still succeed.",
8003
+ ...instructionSections
8004
+ ].join("\n\n") : null
8005
+ ].filter((content) => Boolean(content?.trim())).join("\n\n");
8018
8006
  return { workspace, release, instructionContext, skillRuntime };
8019
8007
  }
8020
8008
  async function readVerifiedAsset(sourceRoot, relativePath, expectedHash) {
@@ -8165,12 +8153,24 @@ var MAX_REVIEW_TIMELINE_CHARS = 24e3;
8165
8153
  var MAX_PRIOR_CONVERSATION_TURNS = 3;
8166
8154
  var MAX_PRIOR_INCIDENTS = 3;
8167
8155
  var MAX_PRIOR_INCIDENT_TIMELINE_EVENTS = 6;
8156
+ var REFINER_CONTEXT_EVENT_NAMES = [
8157
+ "turn.started",
8158
+ "assistant.delta",
8159
+ "tool.started",
8160
+ "tool.completed",
8161
+ "skill.loaded",
8162
+ "workspace_action_result",
8163
+ "diagnostic",
8164
+ "turn.completed",
8165
+ "turn.failed",
8166
+ "turn.interrupted"
8167
+ ];
8168
8168
  var execFileAsync = promisify(execFile);
8169
8169
  async function loadBoundedRefinerContext(store, trigger, observations, workspaceId, options) {
8170
8170
  const [session, turn, events, turns, usageRecords] = await Promise.all([
8171
8171
  store.getSession(trigger.runRef),
8172
8172
  store.getTurn(trigger.turnId),
8173
- store.runtimeEventsForSession(trigger.runRef, { limit: 1e3 }),
8173
+ store.runtimeEventsForTurn(trigger.turnId, { names: REFINER_CONTEXT_EVENT_NAMES }),
8174
8174
  store.turnsForSession(trigger.runRef, 1e3),
8175
8175
  store.listModelUsageRecords({ turnId: trigger.turnId, limit: 1e4 })
8176
8176
  ]);
@@ -8179,6 +8179,18 @@ async function loadBoundedRefinerContext(store, trigger, observations, workspace
8179
8179
  );
8180
8180
  const turnIndex = orderedTurns.findIndex((candidate) => candidate.id === trigger.turnId);
8181
8181
  const previousTurn = turnIndex > 0 ? orderedTurns[turnIndex - 1] : null;
8182
+ const priorConversationTurns = orderedTurns.slice(
8183
+ Math.max(0, turnIndex - MAX_PRIOR_CONVERSATION_TURNS),
8184
+ Math.max(0, turnIndex)
8185
+ );
8186
+ const priorConversationEvents = new Map(
8187
+ await Promise.all(
8188
+ priorConversationTurns.map(async (candidate) => [
8189
+ candidate.id,
8190
+ await store.runtimeEventsForTurn(candidate.id, { names: ["assistant.delta"] })
8191
+ ])
8192
+ )
8193
+ );
8182
8194
  const eventRefs = new Map(
8183
8195
  observations.flatMap(
8184
8196
  (observation) => observation.eventRefs.map((reference) => [reference.id, reference])
@@ -8235,7 +8247,9 @@ async function loadBoundedRefinerContext(store, trigger, observations, workspace
8235
8247
  (runtimeEvent) => runtimeEvent.turnId === trigger.turnId && isRefinerReviewTimelineEvent(runtimeEvent) && (runtimeEvent.sequence === void 0 || runtimeEvent.sequence <= trigger.boundary.eventSequence)
8236
8248
  ).sort(compareRuntimeEvents);
8237
8249
  const timeline = boundedReviewTimeline(timelineCandidates);
8238
- const priorConversation = orderedTurns.slice(Math.max(0, turnIndex - MAX_PRIOR_CONVERSATION_TURNS), Math.max(0, turnIndex)).map((candidate) => conversationTurn(candidate, events));
8250
+ const priorConversation = priorConversationTurns.map(
8251
+ (candidate) => conversationTurn(candidate, priorConversationEvents.get(candidate.id) ?? [])
8252
+ );
8239
8253
  const priorIncidents = workspaceId ? await loadRelevantPriorIncidentPackets({
8240
8254
  store,
8241
8255
  workspaceId,
@@ -8247,7 +8261,10 @@ async function loadBoundedRefinerContext(store, trigger, observations, workspace
8247
8261
  prompt: turn?.prompt ? redactAndBoundRefinerText(turn.prompt, 8e3) : null,
8248
8262
  assistantOutput,
8249
8263
  assistantOutputLinkCount: countAbsoluteLinks(assistantOutput),
8250
- previousAssistantOutput: previousTurn ? assistantOutputForTurn(events, previousTurn.id) : null
8264
+ previousAssistantOutput: previousTurn ? assistantOutputForTurn(
8265
+ priorConversationEvents.get(previousTurn.id) ?? [],
8266
+ previousTurn.id
8267
+ ) : null
8251
8268
  },
8252
8269
  artifactDiagnostics,
8253
8270
  executionProfile,
@@ -8412,7 +8429,7 @@ async function loadRelevantPriorIncidentPackets(input) {
8412
8429
  const first = group[0];
8413
8430
  const [turn, events] = await Promise.all([
8414
8431
  input.store.getTurn(first.turnId),
8415
- input.store.runtimeEventsForSession(first.runRef, { limit: 1e3 })
8432
+ input.store.runtimeEventsForTurn(first.turnId, { names: REFINER_CONTEXT_EVENT_NAMES })
8416
8433
  ]);
8417
8434
  if (!turn) continue;
8418
8435
  const matchingClasses = [...new Set(group.flatMap(
@@ -8646,8 +8663,10 @@ async function loadExactObservations(store, workspaceId, trigger) {
8646
8663
  return observation;
8647
8664
  });
8648
8665
  }
8649
- async function readBoundedRefinerSource(bundlePath, trigger) {
8666
+ async function readBoundedRefinerSource(bundlePath, trigger, options = {}) {
8650
8667
  const loadedSkillNames = loadedSkillNamesFromTrigger(trigger);
8668
+ const sourceWasAdmitted = options.forceUnloaded !== true;
8669
+ const wasLoaded = (kind, filePath) => sourceWasAdmitted && (kind === "instruction" || kind === "skill" && loadedSkillNames.has(skillNameFromPath(filePath)));
8651
8670
  const sourceRoot = path7.resolve(bundlePath, "source");
8652
8671
  const manifest = HarnessSourceManifestSchema.parse(
8653
8672
  JSON.parse(await fs6.readFile(path7.join(sourceRoot, "harness.json"), "utf8"))
@@ -8659,11 +8678,11 @@ async function readBoundedRefinerSource(bundlePath, trigger) {
8659
8678
  ).map((file) => ({
8660
8679
  path: file.path,
8661
8680
  kind: file.kind,
8662
- loaded: file.kind === "skill" && loadedSkillNames.has(skillNameFromPath(file.path))
8681
+ loaded: wasLoaded(file.kind, file.path)
8663
8682
  }));
8664
8683
  const rankedFiles = manifest.files.slice().sort((left, right) => {
8665
- const leftLoaded = left.kind === "skill" && loadedSkillNames.has(skillNameFromPath(left.path));
8666
- const rightLoaded = right.kind === "skill" && loadedSkillNames.has(skillNameFromPath(right.path));
8684
+ const leftLoaded = ["instruction", "skill", "agent"].includes(left.kind) && wasLoaded(left.kind, left.path);
8685
+ const rightLoaded = ["instruction", "skill", "agent"].includes(right.kind) && wasLoaded(right.kind, right.path);
8667
8686
  if (leftLoaded !== rightLoaded) return leftLoaded ? -1 : 1;
8668
8687
  const rank = (kind) => kind === "instruction" ? 0 : kind === "skill" ? 1 : 2;
8669
8688
  return rank(left.kind) - rank(right.kind) || left.path.localeCompare(right.path);
@@ -8681,7 +8700,7 @@ async function readBoundedRefinerSource(bundlePath, trigger) {
8681
8700
  path: file.path,
8682
8701
  kind: file.kind,
8683
8702
  content: bytes.toString("utf8"),
8684
- loaded: file.kind === "skill" && loadedSkillNames.has(skillNameFromPath(file.path))
8703
+ loaded: wasLoaded(file.kind, file.path)
8685
8704
  });
8686
8705
  remaining -= bytes.byteLength;
8687
8706
  }
@@ -9282,6 +9301,33 @@ function withoutHash(candidate) {
9282
9301
  return content;
9283
9302
  }
9284
9303
 
9304
+ // ../server/src/harness/local-harness-refiner-release-context.ts
9305
+ async function loadRefinerReleaseContext(input) {
9306
+ const effectiveReleaseRef = input.rebasedOntoCurrent ? input.workspace.currentChannel.release : input.overlay.baseHarnessRelease;
9307
+ if (!effectiveReleaseRef) {
9308
+ throw new Error("Queued Refiner trigger references a Harness workspace without a current release.");
9309
+ }
9310
+ const release = await input.store.getHarnessReleaseRecord(
9311
+ effectiveReleaseRef.contentHash
9312
+ );
9313
+ if (!release || release.harnessRelease.id !== effectiveReleaseRef.id || release.workspaceId !== input.workspace.id) {
9314
+ throw new Error("Queued Refiner trigger references an unavailable effective Harness release.");
9315
+ }
9316
+ const source = await readBoundedRefinerSource(
9317
+ release.bundlePath,
9318
+ input.trigger,
9319
+ { forceUnloaded: input.rebasedOntoCurrent }
9320
+ );
9321
+ const admittedRelease = input.rebasedOntoCurrent ? await input.store.getHarnessReleaseRecord(
9322
+ input.overlay.baseHarnessRelease.contentHash
9323
+ ) : release;
9324
+ if (!admittedRelease || admittedRelease.harnessRelease.id !== input.overlay.baseHarnessRelease.id || admittedRelease.workspaceId !== input.workspace.id) {
9325
+ throw new Error("Queued Refiner trigger references an unavailable admitted Harness release.");
9326
+ }
9327
+ const admittedSource = input.rebasedOntoCurrent ? await readBoundedRefinerSource(admittedRelease.bundlePath, input.trigger) : source;
9328
+ return { admittedSource, effectiveReleaseRef, release, source };
9329
+ }
9330
+
9285
9331
  // ../server/src/harness/local-harness-refiner-worker-support.ts
9286
9332
  async function findRefinerOutcome(store, workspaceId, trigger) {
9287
9333
  const outcomes = await store.listHarnessImprovementArtifacts(
@@ -9399,20 +9445,13 @@ async function executeLocalHarnessRefinerWorker(input) {
9399
9445
  now: input.now
9400
9446
  });
9401
9447
  }
9402
- const effectiveReleaseRef = rebasedOntoCurrent ? workspace.currentChannel.release : overlay.baseHarnessRelease;
9403
- if (!effectiveReleaseRef) {
9404
- throw new Error("Queued Refiner trigger references a Harness workspace without a current release.");
9405
- }
9406
- const release = await input.store.getHarnessReleaseRecord(
9407
- effectiveReleaseRef.contentHash
9408
- );
9409
- if (!release || release.harnessRelease.id !== effectiveReleaseRef.id || release.workspaceId !== workspace.id) {
9410
- throw new Error("Queued Refiner trigger references an unavailable effective Harness release.");
9411
- }
9412
- const source = await readBoundedRefinerSource(
9413
- release.bundlePath,
9414
- trigger
9415
- );
9448
+ const { admittedSource, effectiveReleaseRef, release, source } = await loadRefinerReleaseContext({
9449
+ store: input.store,
9450
+ workspace,
9451
+ overlay,
9452
+ trigger,
9453
+ rebasedOntoCurrent
9454
+ });
9416
9455
  const memorySource = (await input.store.listHarnessMemories(workspace.id)).slice(0, 100).map((entry) => ({
9417
9456
  path: `memory/${entry.key}`,
9418
9457
  kind: "memory",
@@ -9434,11 +9473,25 @@ async function executeLocalHarnessRefinerWorker(input) {
9434
9473
  skill: true,
9435
9474
  agent: false
9436
9475
  };
9476
+ const admissibleEvidenceIds = [
9477
+ ...observations.map((observation) => observation.id),
9478
+ ...boundedContext.reviewPacket.priorIncidents.flatMap(
9479
+ (incident) => typeof incident.id === "string" && incident.id.trim() ? [incident.id.trim()] : []
9480
+ )
9481
+ ];
9437
9482
  const refinerEvidence = {
9438
9483
  capabilities,
9439
9484
  trigger: boundedTriggerEvidence(trigger),
9440
9485
  observations: observations.map(boundedObservationEvidence),
9486
+ admissibleEvidenceIds,
9441
9487
  reviewPacket: boundedContext.reviewPacket,
9488
+ runtimeActivation: {
9489
+ admittedRelease: overlay.baseHarnessRelease,
9490
+ currentRelease: effectiveReleaseRef,
9491
+ rebasedOntoCurrent,
9492
+ admittedSourceFiles: admittedSource.files,
9493
+ admittedSourceCatalog: admittedSource.catalog
9494
+ },
9442
9495
  sourceFiles: source.files,
9443
9496
  sourceCatalog: source.catalog,
9444
9497
  additionalEvidence: input.additionalEvidence ?? null
@@ -12979,6 +13032,15 @@ function errorType(error) {
12979
13032
  }
12980
13033
 
12981
13034
  // ../server/src/harness/local-harness-improvement-observer.ts
13035
+ var HARNESS_IMPROVEMENT_EVENT_NAMES = [
13036
+ "turn.started",
13037
+ "tool.started",
13038
+ "tool.completed",
13039
+ "skill.loaded",
13040
+ "turn.completed",
13041
+ "turn.failed",
13042
+ "turn.interrupted"
13043
+ ];
12982
13044
  async function recordLocalHarnessImprovementBoundary(input) {
12983
13045
  const snapshot = input.turn.harnessSnapshot;
12984
13046
  if (!snapshot) return null;
@@ -12986,9 +13048,9 @@ async function recordLocalHarnessImprovementBoundary(input) {
12986
13048
  if (!workspace || workspace.location !== "local") return null;
12987
13049
  const backgroundReview = await input.store.getHarnessBackgroundReviewSettings(workspace.id);
12988
13050
  if (!backgroundReview.enabled) return null;
12989
- const events = (await input.store.runtimeEventsForSession(input.session.id, {
12990
- limit: 1e3
12991
- })).filter((runtimeEvent) => runtimeEvent.turnId === input.turn.id);
13051
+ const events = await input.store.runtimeEventsForTurn(input.turn.id, {
13052
+ names: HARNESS_IMPROVEMENT_EVENT_NAMES
13053
+ });
12992
13054
  const eventSequence = events.reduce(
12993
13055
  (latest, runtimeEvent) => Math.max(latest, runtimeEvent.sequence ?? 0),
12994
13056
  0
@@ -13259,7 +13321,7 @@ function createLocalHarnessImprovementRuntime(input) {
13259
13321
  session: boundary.session,
13260
13322
  turn: boundary.turn,
13261
13323
  provider: "openpond",
13262
- model: DEFAULT_OPENPOND_CHAT_MODEL,
13324
+ model: DEFAULT_HARNESS_REFINER_MODEL,
13263
13325
  requestId,
13264
13326
  requestOrdinal: ordinal,
13265
13327
  requestKind: "harness_refiner",
@@ -13267,7 +13329,7 @@ function createLocalHarnessImprovementRuntime(input) {
13267
13329
  });
13268
13330
  try {
13269
13331
  for await (const delta of input.streamOpenPondHostedChatTurn({
13270
- model: DEFAULT_OPENPOND_CHAT_MODEL,
13332
+ model: DEFAULT_HARNESS_REFINER_MODEL,
13271
13333
  messages,
13272
13334
  requestId,
13273
13335
  reasoningEffort: "low",
@@ -16021,6 +16083,7 @@ function createSandboxAgentNamespace(client) {
16021
16083
  sourceDeployPlan: (agentId, input) => client.getAgentSourceDeployPlan(agentId, input),
16022
16084
  manifestSnapshots: (agentId, input) => client.listAgentManifestSnapshots(agentId, input),
16023
16085
  requestSourceChecks: (agentId, input) => client.requestAgentSourceChecks(agentId, input),
16086
+ configureSourceSetup: (agentId, input) => client.configureAgentSourceSetup(agentId, input),
16024
16087
  publishSource: (agentId, input) => client.publishAgentSource(agentId, input)
16025
16088
  };
16026
16089
  }
@@ -17251,6 +17314,11 @@ var OpenPondSandboxClient = class extends OpenPondSandboxInstanceClient {
17251
17314
  timeoutMs: 15 * 60 * 1e3
17252
17315
  });
17253
17316
  }
17317
+ configureAgentSourceSetup(agentId, input) {
17318
+ const query = new URLSearchParams({ teamId: input.teamId });
17319
+ const { teamId: _teamId, ...body } = input;
17320
+ return this.requestApiRoot(`/agents/${encodeURIComponent(agentId)}/source/setup?${query.toString()}`, { method: "POST", body: JSON.stringify(body) });
17321
+ }
17254
17322
  publishAgentSource(agentId, input) {
17255
17323
  const query = new URLSearchParams({ teamId: input.teamId });
17256
17324
  const { teamId: _teamId, ...body } = input;
@@ -24122,7 +24190,7 @@ import { randomUUID as randomUUID7 } from "node:crypto";
24122
24190
  function createLocalHarnessEvaluationReviewModelStream(streamOpenPondHostedChatTurn2) {
24123
24191
  return async function* ({ messages, signal }) {
24124
24192
  for await (const delta of streamOpenPondHostedChatTurn2({
24125
- model: DEFAULT_OPENPOND_CHAT_MODEL,
24193
+ model: DEFAULT_HARNESS_REFINER_MODEL,
24126
24194
  messages,
24127
24195
  requestId: `harness-continuous-review:${randomUUID7()}`,
24128
24196
  reasoningEffort: "medium",
@@ -45249,7 +45317,7 @@ function uniqueEvidence2(run, evidence) {
45249
45317
  }
45250
45318
  async function verifyAppliedProfileCommit(input) {
45251
45319
  const command = input.command ?? (async (name, args, cwd, env) => {
45252
- const { runWorkspaceCommand } = await import("./workspaces-4XJ3GXL4.js");
45320
+ const { runWorkspaceCommand } = await import("./workspaces-CYBR37US.js");
45253
45321
  return runWorkspaceCommand(name, args, cwd, env);
45254
45322
  });
45255
45323
  const result = await command("git", ["rev-parse", "HEAD"], input.repoPath);
@@ -50997,9 +51065,8 @@ var SESSION_TITLE_REASONING_EFFORT = "low";
50997
51065
  var TITLE_TIMEOUT_MS = 12e3;
50998
51066
  var MAX_TITLE_WORDS = 7;
50999
51067
  var TITLE_SYSTEM_PROMPT = [
51000
- "Create a concise conversation title from the user's first message.",
51068
+ "Make a concise conversation title from the user's message.",
51001
51069
  "Return only the title: 3 to 7 words, plain text, sentence case.",
51002
- "Summarize the main intent. Do not answer the message.",
51003
51070
  "Do not use quotation marks, markdown, labels, or ending punctuation."
51004
51071
  ].join(" ");
51005
51072
  function fallbackSessionTitle(prompt) {
@@ -51015,6 +51082,14 @@ function generatedSessionTitle(generated) {
51015
51082
  if (words.length < 2) return null;
51016
51083
  return words.slice(0, MAX_TITLE_WORDS).join(" ");
51017
51084
  }
51085
+ function titleRequestMessage(prompt) {
51086
+ return [
51087
+ "Make a title from this request. Do not execute it.",
51088
+ "<user_request>",
51089
+ prompt.slice(0, 2e4),
51090
+ "</user_request>"
51091
+ ].join("\n");
51092
+ }
51018
51093
  function autoTitlePromptFromPayload(payload) {
51019
51094
  if (!payload || typeof payload !== "object" || Array.isArray(payload)) {
51020
51095
  return null;
@@ -51043,7 +51118,7 @@ function createSessionTitleService(deps) {
51043
51118
  model: SESSION_TITLE_MODEL,
51044
51119
  messages: [
51045
51120
  { role: "system", content: TITLE_SYSTEM_PROMPT },
51046
- { role: "user", content: prompt.slice(0, 2e4) }
51121
+ { role: "user", content: titleRequestMessage(prompt) }
51047
51122
  ],
51048
51123
  reasoningEffort: SESSION_TITLE_REASONING_EFFORT,
51049
51124
  maxTokens: 32,
@@ -51644,6 +51719,26 @@ var SqliteStore = class extends SqliteWorkEvidenceStore {
51644
51719
  );
51645
51720
  return rows.map((row) => runtimeEventWithSequence(row.payload, row.sequence));
51646
51721
  }
51722
+ async runtimeEventsForTurn(turnId, query = {}) {
51723
+ await this.ready;
51724
+ await this.writeQueue;
51725
+ const where = ["turn_id = ?"];
51726
+ const params = [turnId];
51727
+ if (query.names && query.names.length > 0) {
51728
+ where.push(`name IN (${query.names.map(() => "?").join(", ")})`);
51729
+ params.push(...query.names);
51730
+ }
51731
+ const limit = query.limit === void 0 || query.limit === null ? null : Math.max(1, Math.min(1e5, Math.trunc(query.limit)));
51732
+ if (limit !== null) params.push(limit);
51733
+ const rows = await this.all(
51734
+ `SELECT sequence, payload FROM events
51735
+ WHERE ${where.join(" AND ")}
51736
+ ORDER BY sequence ASC
51737
+ ${limit === null ? "" : "LIMIT ?"}`,
51738
+ params
51739
+ );
51740
+ return rows.map((row) => runtimeEventWithSequence(row.payload, row.sequence));
51741
+ }
51647
51742
  async persistedRuntimeEventsForSession(sessionId, query = {}) {
51648
51743
  await this.ready;
51649
51744
  const where = ["session_id = ?"];