openpond 0.0.62 → 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 (94) hide show
  1. package/dist/chunks/{app-layer-MSLVVYLM.js → app-layer-TUAFALOE.js} +2 -2
  2. package/dist/chunks/{app-server-runtime-BRG7A5VD.js → app-server-runtime-O26LVUYH.js} +6 -6
  3. package/dist/chunks/{apps-6PAXKTB5.js → apps-KSZRA7Y2.js} +2 -2
  4. package/dist/chunks/{chunk-MBF44RYK.js → chunk-66KQLYSH.js} +1 -1
  5. package/dist/chunks/{chunk-KMBJLBQH.js → chunk-6FKBOGA4.js} +1 -1
  6. package/dist/chunks/{chunk-FYB6ELFM.js → chunk-7IFPXSSJ.js} +1 -1
  7. package/dist/chunks/{chunk-6JT34APP.js → chunk-7UVEB2AZ.js} +2 -2
  8. package/dist/chunks/{chunk-BFAL2CV3.js → chunk-IXA5PMXC.js} +1 -1
  9. package/dist/chunks/{chunk-IY2AW5F3.js → chunk-JTFDOA2P.js} +29 -13
  10. package/dist/chunks/{chunk-T4FMK5GN.js → chunk-KGU437HZ.js} +1 -1
  11. package/dist/chunks/{chunk-64LYEFLR.js → chunk-LEL5AQJU.js} +1 -1
  12. package/dist/chunks/{chunk-4NHAH3MT.js → chunk-V2CTXKS2.js} +70 -47
  13. package/dist/chunks/{chunk-GMX47RLP.js → chunk-YDH34BGG.js} +32 -32
  14. package/dist/chunks/{cli-L25X2EZL.js → cli-LPFU4ULD.js} +5 -5
  15. package/dist/chunks/{core-commands-STKFZZVR.js → core-commands-OEOBYFIW.js} +3 -3
  16. package/dist/chunks/{desktop-test-ACKJN4UV.js → desktop-test-BRLZF3O7.js} +2 -2
  17. package/dist/chunks/{extension-MVWXKSAD.js → extension-5BUCIDKG.js} +1 -1
  18. package/dist/chunks/{help-4MQ4EOIS.js → help-MT6VPW4X.js} +1 -1
  19. package/dist/chunks/{opchat-DUIZT4G6.js → opchat-O4DVKNFW.js} +2 -2
  20. package/dist/chunks/{organizations-ATM4CZII.js → organizations-ACNOJ57Q.js} +4 -4
  21. package/dist/chunks/{profile-5H3GF252.js → profile-7LLWXAJE.js} +2 -2
  22. package/dist/chunks/{project-agent-RSKSO5GT.js → project-agent-RVYQYTU2.js} +2 -2
  23. package/dist/chunks/{sandbox-command-MTYSZR6P.js → sandbox-command-QST23BX5.js} +2 -2
  24. package/dist/chunks/{sandbox-template-RZ5AJ4KB.js → sandbox-template-N7UG3P6V.js} +3 -3
  25. package/dist/chunks/{src-PW337SIJ.js → src-CPM5Q7T5.js} +3 -3
  26. package/dist/chunks/{src-WKH7EP7W.js → src-M37V6NVU.js} +7 -7
  27. package/dist/chunks/{teams-bot-FF3LDAYL.js → teams-bot-ITTI47XS.js} +2 -2
  28. package/dist/chunks/{workspaces-QKADU2A6.js → workspaces-CYBR37US.js} +2 -2
  29. package/dist/cli.js +13 -13
  30. package/dist/web/assets/{AppDialog-1RkKL2v6.js → AppDialog-wIb8mGQ0.js} +1 -1
  31. package/dist/web/assets/{AppsView-B6hDEt-h.js → AppsView-D097dPIV.js} +1 -1
  32. package/dist/web/assets/{BrowserSidebar-CkAMOgiq.js → BrowserSidebar-DrD-o_yB.js} +1 -1
  33. package/dist/web/assets/{CommandMenu-9oAkS4X3.js → CommandMenu-L5LelA2h.js} +1 -1
  34. package/dist/web/assets/{CommunityView-Dyuq5N28.js → CommunityView-DUJ8NryS.js} +1 -1
  35. package/dist/web/assets/{ComposerCreateImproveStrip-D91cw5AT.js → ComposerCreateImproveStrip-BP-7DmQG.js} +1 -1
  36. package/dist/web/assets/{GetStartedView-BZpcZgjB.js → GetStartedView-B7gB6Hii.js} +1 -1
  37. package/dist/web/assets/{LabModelVersionDetailPage-C0jNkciw.js → LabModelVersionDetailPage-CNDz2a6I.js} +1 -1
  38. package/dist/web/assets/{LabSkillSidebar-JGCPqTB1.js → LabSkillSidebar-BImOQcjk.js} +1 -1
  39. package/dist/web/assets/{LabsRoute-Dpv5Haqy.js → LabsRoute-BauSK1is.js} +3 -3
  40. package/dist/web/assets/{MainChatThread-B4_iIn3g.js → MainChatThread-BZvAqQO6.js} +2 -2
  41. package/dist/web/assets/MainPane-CuhwxMxg.js +6 -0
  42. package/dist/web/assets/{MarkdownText-DgS9KdyT.js → MarkdownText-gwAue4u5.js} +1 -1
  43. package/dist/web/assets/{Messages-DjMa9H1T.js → Messages-DijmQL-z.js} +1 -1
  44. package/dist/web/assets/{NativeSkillSidebar-Q3fwLOiO.js → NativeSkillSidebar-aCkrdGa0.js} +1 -1
  45. package/dist/web/assets/{NewProjectDialog-CUb0umRT.js → NewProjectDialog-D98WIQzr.js} +1 -1
  46. package/dist/web/assets/{OutputsPage-DD_1STRQ.js → OutputsPage-BA0c6cfy.js} +1 -1
  47. package/dist/web/assets/{RightChatPanelStack-2dFyjK7Z.js → RightChatPanelStack-DKDEmrEH.js} +1 -1
  48. package/dist/web/assets/{ScheduledWorkPage-DPjweWpP.js → ScheduledWorkPage-DeHi99mv.js} +1 -1
  49. package/dist/web/assets/{SettingsView-DJGgGPL0.js → SettingsView--fL3Ecuy.js} +3 -3
  50. package/dist/web/assets/TeamChatView-D2mCoLZ3.js +3 -0
  51. package/dist/web/assets/{TerminalOverlay-CpjrArXn.js → TerminalOverlay-BHMsVp4L.js} +1 -1
  52. package/dist/web/assets/{TrainingCreationPanel-Tbj3qk8-.js → TrainingCreationPanel-CPnMWgkt.js} +1 -1
  53. package/dist/web/assets/{TrainingDraftPanel-BhggD-hn.js → TrainingDraftPanel-0scEtzSW.js} +1 -1
  54. package/dist/web/assets/{UsageSettingsSection-CXM6LKim.js → UsageSettingsSection-COoCLLg6.js} +1 -1
  55. package/dist/web/assets/{WorkspaceDiffPanel-CoMkI8dY.js → WorkspaceDiffPanel-BFTwZ_dB.js} +3 -3
  56. package/dist/web/assets/{WorkspaceEnvironmentMenu-CZyjk82C.js → WorkspaceEnvironmentMenu-DFlkdd9T.js} +1 -1
  57. package/dist/web/assets/{WorkspaceGitDialogs-DTj3DOsf.js → WorkspaceGitDialogs-Dt3LO27Z.js} +1 -1
  58. package/dist/web/assets/{WorkspaceMonacoEditor-DaNMLEnU.js → WorkspaceMonacoEditor-3g05teoR.js} +3 -3
  59. package/dist/web/assets/{arrow-up-right-wvL_rSwe.js → arrow-up-right-DYGSWA2J.js} +1 -1
  60. package/dist/web/assets/{chevron-up-BbyiUcq_.js → chevron-up-4qfvI9iW.js} +1 -1
  61. package/dist/web/assets/{cloud-upload-Bgv1fA6E.js → cloud-upload-COReKxOy.js} +1 -1
  62. package/dist/web/assets/{cssMode-BG9jdNNX.js → cssMode-BbH67BYF.js} +1 -1
  63. package/dist/web/assets/{folder-open-CRAYp6pW.js → folder-open-9OjGqNgP.js} +1 -1
  64. package/dist/web/assets/{folder-plus-BgsuJVU0.js → folder-plus-DF5E6zr3.js} +1 -1
  65. package/dist/web/assets/{git-branch-CicxCU5U.js → git-branch-eCwyZXMl.js} +1 -1
  66. package/dist/web/assets/{git-commit-horizontal-BRkwl6bp.js → git-commit-horizontal-cPm51DqY.js} +1 -1
  67. package/dist/web/assets/{htmlMode-B69EEM3s.js → htmlMode-DD6Oge4x.js} +1 -1
  68. package/dist/web/assets/{index-Dcpm2LlR.js → index-BO2W2U23.js} +46 -46
  69. package/dist/web/assets/index-BRLugX1S.js +1 -0
  70. package/dist/web/assets/{index-Bt9mPk1q.css → index-Y7IoiSlQ.css} +1 -1
  71. package/dist/web/assets/{info-BxhCcEsF.js → info-p1mFpqBI.js} +1 -1
  72. package/dist/web/assets/{jsonMode-D0tzZkp2.js → jsonMode-C2Xd56A_.js} +1 -1
  73. package/dist/web/assets/{lspLanguageFeatures-DFpYfxMH.js → lspLanguageFeatures-BjYEk4gJ.js} +1 -1
  74. package/dist/web/assets/{monaco.contribution-K53jgqut.js → monaco.contribution-Bo-5m7yy.js} +2 -2
  75. package/dist/web/assets/{monaco.contribution-lS_l56Q7.js → monaco.contribution-C7WMqwmc.js} +2 -2
  76. package/dist/web/assets/{monaco.contribution-BzGRrg8l.js → monaco.contribution-DzWlEgU1.js} +2 -2
  77. package/dist/web/assets/{monaco.contribution-BFP-1c-A.js → monaco.contribution-quEPEMQZ.js} +2 -2
  78. package/dist/web/assets/{play-B8en8HVG.js → play-Ctx-iMqd.js} +1 -1
  79. package/dist/web/assets/{python-DPtRb2z3.js → python-Cm64qCpk.js} +1 -1
  80. package/dist/web/assets/{refresh-cw-CRZeaNu7.js → refresh-cw-Bn28jIl0.js} +1 -1
  81. package/dist/web/assets/{save-oO8erge1.js → save-BM5IQX65.js} +1 -1
  82. package/dist/web/assets/{square-CSULphDY.js → square-DAGpFfSr.js} +1 -1
  83. package/dist/web/assets/{toggleHighContrast-CmDdOtfT.js → toggleHighContrast-DLW8Fnck.js} +1 -1
  84. package/dist/web/assets/{tsMode-B0TCT940.js → tsMode-BleUN_8S.js} +1 -1
  85. package/dist/web/assets/{upload-dz-oCLFE.js → upload-vaAKFfxi.js} +1 -1
  86. package/dist/web/assets/{useLocalAgentSchedules-DPga1Kwi.js → useLocalAgentSchedules-Ccenbqf6.js} +1 -1
  87. package/dist/web/assets/{wifi-off-BZpON33U.js → wifi-off-DJA9KReb.js} +1 -1
  88. package/dist/web/assets/{workers-DXVEq1Aw.js → workers-CFG-afha.js} +1 -1
  89. package/dist/web/assets/{yaml-B8TBCEpi.js → yaml-Cs8iZKVC.js} +1 -1
  90. package/dist/web/index.html +2 -2
  91. package/package.json +1 -1
  92. package/dist/web/assets/MainPane-o4HIxmNz.js +0 -6
  93. package/dist/web/assets/TeamChatView-CZmbzRk7.js +0 -3
  94. package/dist/web/assets/index-BGdmnwp7.js +0 -1
@@ -4,9 +4,9 @@ import {
4
4
  } from "./chunk-J2REM7LE.js";
5
5
  import {
6
6
  CliUsageError
7
- } from "./chunk-64LYEFLR.js";
7
+ } from "./chunk-LEL5AQJU.js";
8
8
  import "./chunk-SMNFI2FU.js";
9
- import "./chunk-GMX47RLP.js";
9
+ import "./chunk-YDH34BGG.js";
10
10
  import "./chunk-K4JEWEJQ.js";
11
11
  import "./chunk-JGOP4GCK.js";
12
12
  import "./chunk-DBHSOTYZ.js";
@@ -2,14 +2,14 @@ import { createRequire as __openpondCreateRequire } from "node:module"; var requ
2
2
  import {
3
3
  APP_SERVER_COMPOSITION,
4
4
  createOpenPondAppServer
5
- } from "./chunk-4NHAH3MT.js";
6
- import "./chunk-MBF44RYK.js";
5
+ } from "./chunk-V2CTXKS2.js";
6
+ import "./chunk-66KQLYSH.js";
7
7
  import "./chunk-OYWTQABY.js";
8
- import "./chunk-FYB6ELFM.js";
9
- import "./chunk-BFAL2CV3.js";
10
- import "./chunk-T4FMK5GN.js";
8
+ import "./chunk-7IFPXSSJ.js";
9
+ import "./chunk-IXA5PMXC.js";
10
+ import "./chunk-KGU437HZ.js";
11
11
  import "./chunk-QETF6ILG.js";
12
- import "./chunk-IY2AW5F3.js";
12
+ import "./chunk-JTFDOA2P.js";
13
13
  import "./chunk-WYDVQOBL.js";
14
14
  import "./chunk-JGOP4GCK.js";
15
15
  import "./chunk-UACZUFIA.js";
@@ -11,12 +11,12 @@ import {
11
11
  pollDeploymentLogs,
12
12
  resolveAppTarget
13
13
  } from "./chunk-J2REM7LE.js";
14
- import "./chunk-64LYEFLR.js";
14
+ import "./chunk-LEL5AQJU.js";
15
15
  import {
16
16
  resolveBaseUrl,
17
17
  resolvePublicApiBaseUrl
18
18
  } from "./chunk-SMNFI2FU.js";
19
- import "./chunk-GMX47RLP.js";
19
+ import "./chunk-YDH34BGG.js";
20
20
  import "./chunk-K4JEWEJQ.js";
21
21
  import "./chunk-JGOP4GCK.js";
22
22
  import {
@@ -1,7 +1,7 @@
1
1
  import { createRequire as __openpondCreateRequire } from "node:module"; var require = __openpondCreateRequire(import.meta.url);
2
2
  import {
3
3
  now
4
- } from "./chunk-FYB6ELFM.js";
4
+ } from "./chunk-7IFPXSSJ.js";
5
5
 
6
6
  // ../server/src/workspace/workspace-command.ts
7
7
  import { spawn, spawnSync } from "node:child_process";
@@ -28,7 +28,7 @@ import {
28
28
  compareSemver,
29
29
  fetchLatestNpmVersion,
30
30
  getInstalledCliVersion
31
- } from "./chunk-GMX47RLP.js";
31
+ } from "./chunk-YDH34BGG.js";
32
32
  import {
33
33
  checkOpenPondApiHealth,
34
34
  createHeadlessApps,
@@ -3,7 +3,7 @@ import { createRequire as __openpondCreateRequire } from "node:module"; var requ
3
3
  // ../server/src/constants.ts
4
4
  var DEFAULT_HOST = "127.0.0.1";
5
5
  var DEFAULT_PORT = 17874;
6
- var VERSION = "0.0.62";
6
+ var VERSION = "0.0.63";
7
7
  var HOSTED_CHAT_SYSTEM_PROMPT = "You are OpenPond Chat. Respond in the user's language. If the user's latest message is language-neutral, ambiguous, or only a short test, respond in English. Be concise and directly answer the latest request. Do not use emojis. Use Markdown when it improves scanability. If you emit reasoning or thinking content, keep it sparse and user-readable: at most one short sentence for major progress, decisions, or blockers. Omit reasoning for routine searches, reads, tool calls, and obvious next steps. Do not restate the user request, narrate every action, or include code blocks, code excerpts, diffs, raw tool payloads, or markdown examples in reasoning. Put necessary code or exact snippets only in the final assistant answer. When the user asks to show or preview an image that is available as a workspace path or signed image URL, use Markdown image syntax like ![description](path-or-url) instead of a bare path or raw HTML. For workspace-backed answers, use a Codex-style shape: brief outcome first, then Changed Files if files changed, then Verification if checks ran. End with a concise final answer that summarizes the result and verification when relevant. Do not mention raw tool JSON, internal repo paths, or origin/remote URLs unless the user explicitly asks for them or they are necessary to explain a git/deploy failure.";
8
8
  var APP_PREFERENCES_CACHE_TYPE = "app_preferences";
9
9
  var APP_PREFERENCES_CACHE_KEY = "global";
@@ -6,11 +6,11 @@ import {
6
6
  DEFAULT_HOST,
7
7
  DEFAULT_PORT,
8
8
  parseListen
9
- } from "./chunk-FYB6ELFM.js";
9
+ } from "./chunk-7IFPXSSJ.js";
10
10
  import {
11
11
  getBundledRuntimeVersion,
12
12
  openUrlWithSystemBrowser
13
- } from "./chunk-BFAL2CV3.js";
13
+ } from "./chunk-IXA5PMXC.js";
14
14
 
15
15
  // ../server/src/cli.ts
16
16
  import { existsSync } from "node:fs";
@@ -12,7 +12,7 @@ import {
12
12
  saveConfig,
13
13
  saveProfileApiKey,
14
14
  setActiveProfile
15
- } from "./chunk-T4FMK5GN.js";
15
+ } from "./chunk-KGU437HZ.js";
16
16
  import {
17
17
  DEFAULT_OPENPOND_API_BASE_URL,
18
18
  DEFAULT_OPENPOND_WEB_BASE_URL,
@@ -2869,10 +2869,22 @@ var HarnessRefinerCapabilitiesSchema = external_exports.object({
2869
2869
  agent: external_exports.boolean()
2870
2870
  }).strict();
2871
2871
  var SourceKindSchema = external_exports.enum(["memory", "instruction", "skill", "agent"]);
2872
+ var RefinerSourceFileSchema = external_exports.object({
2873
+ path: external_exports.string().trim().min(1).max(2e3),
2874
+ kind: SourceKindSchema,
2875
+ content: external_exports.string().max(6e4),
2876
+ loaded: external_exports.boolean()
2877
+ }).strict();
2878
+ var RefinerSourceCatalogEntrySchema = external_exports.object({
2879
+ path: external_exports.string().trim().min(1).max(2e3),
2880
+ kind: SourceKindSchema,
2881
+ loaded: external_exports.boolean()
2882
+ }).strict();
2872
2883
  var LocalHarnessRefinerEvidenceSchema = external_exports.object({
2873
2884
  capabilities: HarnessRefinerCapabilitiesSchema,
2874
2885
  trigger: external_exports.record(external_exports.string(), external_exports.unknown()),
2875
2886
  observations: external_exports.array(external_exports.record(external_exports.string(), external_exports.unknown())).max(20),
2887
+ admissibleEvidenceIds: external_exports.array(external_exports.string().trim().min(1).max(2e3)).max(1e4),
2876
2888
  reviewPacket: external_exports.object({
2877
2889
  currentTurn: external_exports.object({
2878
2890
  id: external_exports.string().trim().min(1).max(2e3),
@@ -2908,17 +2920,15 @@ var LocalHarnessRefinerEvidenceSchema = external_exports.object({
2908
2920
  timelineTruncated: external_exports.boolean()
2909
2921
  }).strict()
2910
2922
  }).strict(),
2911
- sourceFiles: external_exports.array(external_exports.object({
2912
- path: external_exports.string().trim().min(1).max(2e3),
2913
- kind: SourceKindSchema,
2914
- content: external_exports.string().max(6e4),
2915
- loaded: external_exports.boolean()
2916
- }).strict()).max(100),
2917
- sourceCatalog: external_exports.array(external_exports.object({
2918
- path: external_exports.string().trim().min(1).max(2e3),
2919
- kind: SourceKindSchema,
2920
- loaded: external_exports.boolean()
2921
- }).strict()).max(1e3),
2923
+ runtimeActivation: external_exports.object({
2924
+ admittedRelease: ImmutableReleaseRefSchema,
2925
+ currentRelease: ImmutableReleaseRefSchema,
2926
+ rebasedOntoCurrent: external_exports.boolean(),
2927
+ admittedSourceFiles: external_exports.array(RefinerSourceFileSchema).max(100),
2928
+ admittedSourceCatalog: external_exports.array(RefinerSourceCatalogEntrySchema).max(1e3)
2929
+ }).strict(),
2930
+ sourceFiles: external_exports.array(RefinerSourceFileSchema).max(100),
2931
+ sourceCatalog: external_exports.array(RefinerSourceCatalogEntrySchema).max(1e3),
2922
2932
  additionalEvidence: external_exports.unknown().nullable().optional()
2923
2933
  }).strict();
2924
2934
  var DEFAULT_REFINER_TIMEOUT_MS = 6e4;
@@ -2953,6 +2963,7 @@ async function authorLocalHarnessRefinementWithModel(input) {
2953
2963
  "Reject invented recurrence, unsupported evidence references, material counterevidence, unavailable capability layers, task-specific or benchmark content, inferred memory, broad instructions, and workarounds for runtime, product, taskset, or grader defects.",
2954
2964
  "Do not reject a concise correction merely because the deterministic failure appeared once when the mechanism and reusable prevention are clear.",
2955
2965
  "For adaptation cohorts, reject drafts that add work instead of removing the repeated foreground-token cost while preserving quality.",
2966
+ `Copy supportingEvidenceIds only from this exact list: ${JSON.stringify(evidence2.admissibleEvidenceIds)}.`,
2956
2967
  ...draftAdmissionIssues.length ? [`The draft also failed deterministic admission: ${draftAdmissionIssues.join("; ")}. Correct it or return no_action.`] : [],
2957
2968
  draft.decision === "no_action" ? "Return no_action only if you can identify no concrete reusable prevention rule in the supplied recovery evidence. Otherwise return the smallest valid route or proposal." : "Return the complete final JSON decision. Use no_action or route when the proposed Harness edit does not survive this critique."
2958
2969
  ].join("\n")
@@ -3024,10 +3035,12 @@ function refinerMessages(evidence2) {
3024
3035
  "A taskset grade proves only the measured outcome. It does not prove that the root owner is the Harness rather than runtime, product, fixture, grader, taskset, or model behavior.",
3025
3036
  "Optimize future work, not the completed turn. A repeated avoidable strategy is strong evidence, but one high-confidence deterministic failure may justify a small validated correction when the failure mechanism and reusable prevention are both clear. Recurrence strengthens confidence; it is not universally required.",
3026
3037
  "Recovered internal mistakes are not automatically ordinary successful work. A concrete API mismatch, incompatible dependency or format, or repeated command construction error can justify a narrow preventive skill or prompt correction when the trace shows how to avoid it next time.",
3038
+ "runtimeActivation is authoritative about activation timing. admittedSourceFiles describe the exact released source available to the reviewed turn. sourceFiles and sourceCatalog describe the current editable release. When rebasedOntoCurrent is true, do not claim a current-only instruction was loaded by the reviewed turn.",
3027
3039
  "When the supplied trace shows that the model violated an already-loaded Harness instruction before recovering, the instruction's existence is not counterevidence. Treat that as evidence that its current wording, placement, or operational form was ineffective. Evaluate the smallest non-duplicative change that makes the rule actionable at the decision point, such as a concise preflight or checklist. Do not merely restate the existing rule.",
3040
+ "For command, API, or structured-output construction failures, prefer an observable invariant over a vague reminder: name the forbidden combination precisely, state where it is forbidden, remove ambiguous qualifiers, and include one valid alternative when the evidence proves it. A post-activation recurrence should strengthen the operational form rather than duplicate the same wording in another file.",
3028
3041
  crossRunCandidate ? "This is a bounded cross-Work candidate continuation. Verify the supplied candidate, review, authorization, admitted release, independent occurrences, and counterevidence. Use recurrent_independent only; do not reinterpret unrelated wording as recurrence." : "This is an immediate completed-turn review, not an unbounded cross-Work archive review. Use only supplied observations and priorIncidents. Defer ambiguous recurrence to recurring-pattern review.",
3029
3042
  "Every route or proposal must declare evidenceBasis. Use single_deterministic only when a supplied incident exposes an observed deterministic mechanism and reusable prevention rule with no material counterevidence. Use recurrent_independent only for at least two materially independent supplied incidents; similar wording, topic, tool name, or artifact family is not independence.",
3030
- "supportingEvidenceIds must name actual supplied observation or prior-incident IDs. List material counterevidence explicitly. Never invent recurrence or omit contradictory supplied evidence.",
3043
+ "supportingEvidenceIds must copy exact values from admissibleEvidenceIds. Do not synthesize labels from timeline sequences, event names, tools, or descriptions. List material counterevidence explicitly. Never invent recurrence or omit contradictory supplied evidence.",
3031
3044
  "Use no_action for ordinary successful work, conversation-specific facts, or insufficient evidence. High token use alone is not a reason to edit the Harness.",
3032
3045
  "Use route whenever a runtime, product, taskset, or training defect materially prevented the requested outcome. Routing records ownership; it does not blame the agent and does not require recurrence. A good fallback, transparent disclosure, or likely transient outage does not erase the external defect.",
3033
3046
  "For a Harness proposal, encode only the reusable root behavior. Do not copy subject matter, named entities, business facts, requested artifact content, benchmark wording, secrets, raw user data, or transient paths.",
@@ -3098,7 +3111,10 @@ function decisionAdmissionIssues(decision2, evidence2) {
3098
3111
  return issues;
3099
3112
  }
3100
3113
  function suppliedEvidenceIds(evidence2) {
3101
- const ids = /* @__PURE__ */ new Set([evidence2.reviewPacket.currentTurn.id]);
3114
+ const ids = /* @__PURE__ */ new Set([
3115
+ evidence2.reviewPacket.currentTurn.id,
3116
+ ...evidence2.admissibleEvidenceIds
3117
+ ]);
3102
3118
  for (const item of evidence2.observations)
3103
3119
  addRecordId(ids, item);
3104
3120
  for (const item of evidence2.reviewPacket.priorIncidents)
@@ -15,7 +15,7 @@ import {
15
15
  ToolDeclarationSchema,
16
16
  createHarnessAdvanceReceipt,
17
17
  validateConnectedAppToolCallRequest
18
- } from "./chunk-IY2AW5F3.js";
18
+ } from "./chunk-JTFDOA2P.js";
19
19
  import {
20
20
  external_exports,
21
21
  yaml
@@ -4,7 +4,7 @@ import {
4
4
  getAnyCliOptionKind,
5
5
  getCliCommandDefinition,
6
6
  getCliOptionKind
7
- } from "./chunk-GMX47RLP.js";
7
+ } from "./chunk-YDH34BGG.js";
8
8
  import {
9
9
  parseJsonOption
10
10
  } from "./chunk-MUMPWI4O.js";
@@ -11,7 +11,7 @@ import {
11
11
  truncatePatch,
12
12
  uniqueSortedPaths,
13
13
  workspaceImageContentType
14
- } from "./chunk-MBF44RYK.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-FYB6ELFM.js";
38
+ } from "./chunk-7IFPXSSJ.js";
39
39
  import {
40
40
  getBundledRuntimeVersion,
41
41
  loadOpenPondAccountContext,
42
42
  loadOpenPondHostedModels,
43
43
  streamOpenPondHostedChatTurn
44
- } from "./chunk-BFAL2CV3.js";
44
+ } from "./chunk-IXA5PMXC.js";
45
45
  import {
46
46
  AppPreferencesSchema,
47
47
  ApplyCreateImproveRunActionRequestSchema,
@@ -162,7 +162,7 @@ import {
162
162
  runProfileSkillCommand,
163
163
  sidebarFileBookmarkId,
164
164
  workOutputMediaTypesCompatible
165
- } from "./chunk-T4FMK5GN.js";
165
+ } from "./chunk-KGU437HZ.js";
166
166
  import {
167
167
  PROJECT_ACTION_CONFIG_PATH,
168
168
  createLocalActionRunner,
@@ -271,7 +271,7 @@ import {
271
271
  uniqueEventRefs,
272
272
  validateConnectedAppProviderOperationRequest,
273
273
  verifyRequiredOutputs
274
- } from "./chunk-IY2AW5F3.js";
274
+ } from "./chunk-JTFDOA2P.js";
275
275
  import {
276
276
  external_exports
277
277
  } from "./chunk-WYDVQOBL.js";
@@ -7915,7 +7915,6 @@ async function loadLocalHarnessRuntimeFromRelease(input) {
7915
7915
  }))
7916
7916
  );
7917
7917
  const skills = [];
7918
- const skillContexts = [];
7919
7918
  const readers = /* @__PURE__ */ new Map();
7920
7919
  for (const asset3 of release.agentSnapshot.skills) {
7921
7920
  const markdown = await readVerifiedAsset(sourceRoot, asset3.path, asset3.contentHash);
@@ -7942,11 +7941,6 @@ async function loadLocalHarnessRuntimeFromRelease(input) {
7942
7941
  resourceFiles
7943
7942
  };
7944
7943
  skills.push(skill);
7945
- skillContexts.push([
7946
- `Harness Skill (${asset3.path}, ${parsed.name}):`,
7947
- parsed.description,
7948
- parsed.body.trim()
7949
- ].filter(Boolean).join("\n"));
7950
7944
  readers.set(skill.name, async () => {
7951
7945
  const currentMarkdown = await readVerifiedAsset(sourceRoot, asset3.path, asset3.contentHash);
7952
7946
  const current = parseProfileSkillMarkdown(currentMarkdown);
@@ -7975,20 +7969,10 @@ async function loadLocalHarnessRuntimeFromRelease(input) {
7975
7969
  return read();
7976
7970
  } : null
7977
7971
  };
7978
- const agents = await Promise.all(
7979
- release.agentSnapshot.agents.map(async (asset3) => ({
7980
- path: asset3.path,
7981
- content: await readVerifiedAsset(sourceRoot, asset3.path, asset3.contentHash)
7982
- }))
7983
- );
7984
7972
  const instructionSections = instructions.sort((left, right) => left.path.localeCompare(right.path)).map(({ path: instructionPath, content }) => [
7985
- `Harness instruction (${instructionPath}):`,
7973
+ `Active Harness instruction (${instructionPath}):`,
7986
7974
  content.trim()
7987
7975
  ].join("\n")).filter((content) => content.trim().length > 0);
7988
- const agentSections = agents.sort((left, right) => left.path.localeCompare(right.path)).map(({ path: agentPath, content }) => [
7989
- `Harness Agent (${agentPath}):`,
7990
- content.trim()
7991
- ].join("\n"));
7992
7976
  const capabilityReceipt = [
7993
7977
  "Harness capability receipt:",
7994
7978
  JSON.stringify({
@@ -8011,11 +7995,14 @@ async function loadLocalHarnessRuntimeFromRelease(input) {
8011
7995
  })
8012
7996
  ].join("\n");
8013
7997
  const instructionContext = [
8014
- ...instructionSections,
8015
- ...skillContexts.sort(),
8016
- ...agentSections,
8017
- capabilityReceipt
8018
- ].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");
8019
8006
  return { workspace, release, instructionContext, skillRuntime };
8020
8007
  }
8021
8008
  async function readVerifiedAsset(sourceRoot, relativePath, expectedHash) {
@@ -8676,8 +8663,10 @@ async function loadExactObservations(store, workspaceId, trigger) {
8676
8663
  return observation;
8677
8664
  });
8678
8665
  }
8679
- async function readBoundedRefinerSource(bundlePath, trigger) {
8666
+ async function readBoundedRefinerSource(bundlePath, trigger, options = {}) {
8680
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)));
8681
8670
  const sourceRoot = path7.resolve(bundlePath, "source");
8682
8671
  const manifest = HarnessSourceManifestSchema.parse(
8683
8672
  JSON.parse(await fs6.readFile(path7.join(sourceRoot, "harness.json"), "utf8"))
@@ -8689,11 +8678,11 @@ async function readBoundedRefinerSource(bundlePath, trigger) {
8689
8678
  ).map((file) => ({
8690
8679
  path: file.path,
8691
8680
  kind: file.kind,
8692
- loaded: file.kind === "skill" && loadedSkillNames.has(skillNameFromPath(file.path))
8681
+ loaded: wasLoaded(file.kind, file.path)
8693
8682
  }));
8694
8683
  const rankedFiles = manifest.files.slice().sort((left, right) => {
8695
- const leftLoaded = left.kind === "skill" && loadedSkillNames.has(skillNameFromPath(left.path));
8696
- 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);
8697
8686
  if (leftLoaded !== rightLoaded) return leftLoaded ? -1 : 1;
8698
8687
  const rank = (kind) => kind === "instruction" ? 0 : kind === "skill" ? 1 : 2;
8699
8688
  return rank(left.kind) - rank(right.kind) || left.path.localeCompare(right.path);
@@ -8711,7 +8700,7 @@ async function readBoundedRefinerSource(bundlePath, trigger) {
8711
8700
  path: file.path,
8712
8701
  kind: file.kind,
8713
8702
  content: bytes.toString("utf8"),
8714
- loaded: file.kind === "skill" && loadedSkillNames.has(skillNameFromPath(file.path))
8703
+ loaded: wasLoaded(file.kind, file.path)
8715
8704
  });
8716
8705
  remaining -= bytes.byteLength;
8717
8706
  }
@@ -9312,6 +9301,33 @@ function withoutHash(candidate) {
9312
9301
  return content;
9313
9302
  }
9314
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
+
9315
9331
  // ../server/src/harness/local-harness-refiner-worker-support.ts
9316
9332
  async function findRefinerOutcome(store, workspaceId, trigger) {
9317
9333
  const outcomes = await store.listHarnessImprovementArtifacts(
@@ -9429,20 +9445,13 @@ async function executeLocalHarnessRefinerWorker(input) {
9429
9445
  now: input.now
9430
9446
  });
9431
9447
  }
9432
- const effectiveReleaseRef = rebasedOntoCurrent ? workspace.currentChannel.release : overlay.baseHarnessRelease;
9433
- if (!effectiveReleaseRef) {
9434
- throw new Error("Queued Refiner trigger references a Harness workspace without a current release.");
9435
- }
9436
- const release = await input.store.getHarnessReleaseRecord(
9437
- effectiveReleaseRef.contentHash
9438
- );
9439
- if (!release || release.harnessRelease.id !== effectiveReleaseRef.id || release.workspaceId !== workspace.id) {
9440
- throw new Error("Queued Refiner trigger references an unavailable effective Harness release.");
9441
- }
9442
- const source = await readBoundedRefinerSource(
9443
- release.bundlePath,
9444
- trigger
9445
- );
9448
+ const { admittedSource, effectiveReleaseRef, release, source } = await loadRefinerReleaseContext({
9449
+ store: input.store,
9450
+ workspace,
9451
+ overlay,
9452
+ trigger,
9453
+ rebasedOntoCurrent
9454
+ });
9446
9455
  const memorySource = (await input.store.listHarnessMemories(workspace.id)).slice(0, 100).map((entry) => ({
9447
9456
  path: `memory/${entry.key}`,
9448
9457
  kind: "memory",
@@ -9464,11 +9473,25 @@ async function executeLocalHarnessRefinerWorker(input) {
9464
9473
  skill: true,
9465
9474
  agent: false
9466
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
+ ];
9467
9482
  const refinerEvidence = {
9468
9483
  capabilities,
9469
9484
  trigger: boundedTriggerEvidence(trigger),
9470
9485
  observations: observations.map(boundedObservationEvidence),
9486
+ admissibleEvidenceIds,
9471
9487
  reviewPacket: boundedContext.reviewPacket,
9488
+ runtimeActivation: {
9489
+ admittedRelease: overlay.baseHarnessRelease,
9490
+ currentRelease: effectiveReleaseRef,
9491
+ rebasedOntoCurrent,
9492
+ admittedSourceFiles: admittedSource.files,
9493
+ admittedSourceCatalog: admittedSource.catalog
9494
+ },
9472
9495
  sourceFiles: source.files,
9473
9496
  sourceCatalog: source.catalog,
9474
9497
  additionalEvidence: input.additionalEvidence ?? null
@@ -45294,7 +45317,7 @@ function uniqueEvidence2(run, evidence) {
45294
45317
  }
45295
45318
  async function verifyAppliedProfileCommit(input) {
45296
45319
  const command = input.command ?? (async (name, args, cwd, env) => {
45297
- const { runWorkspaceCommand } = await import("./workspaces-QKADU2A6.js");
45320
+ const { runWorkspaceCommand } = await import("./workspaces-CYBR37US.js");
45298
45321
  return runWorkspaceCommand(name, args, cwd, env);
45299
45322
  });
45300
45323
  const result = await command("git", ["rev-parse", "HEAD"], input.repoPath);