@rudderhq/server 0.7.24-canary.23 → 0.7.24-canary.24

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 (68) hide show
  1. package/dist/bootstrap/register-api-routes.js +4 -4
  2. package/dist/bootstrap/register-api-routes.js.map +1 -1
  3. package/dist/routes/agents.management-routes.d.ts.map +1 -1
  4. package/dist/routes/agents.management-routes.js +80 -142
  5. package/dist/routes/agents.management-routes.js.map +1 -1
  6. package/dist/routes/calendar.d.ts +2 -1
  7. package/dist/routes/calendar.d.ts.map +1 -1
  8. package/dist/routes/calendar.js +34 -148
  9. package/dist/routes/calendar.js.map +1 -1
  10. package/dist/routes/costs.d.ts +2 -1
  11. package/dist/routes/costs.d.ts.map +1 -1
  12. package/dist/routes/costs.js +41 -25
  13. package/dist/routes/costs.js.map +1 -1
  14. package/dist/routes/goals.d.ts +2 -1
  15. package/dist/routes/goals.d.ts.map +1 -1
  16. package/dist/routes/goals.js +52 -106
  17. package/dist/routes/goals.js.map +1 -1
  18. package/dist/routes/messenger.d.ts +2 -1
  19. package/dist/routes/messenger.d.ts.map +1 -1
  20. package/dist/routes/messenger.js +28 -36
  21. package/dist/routes/messenger.js.map +1 -1
  22. package/dist/services/calendar-native-bridge.d.ts +9 -0
  23. package/dist/services/calendar-native-bridge.d.ts.map +1 -0
  24. package/dist/services/calendar-native-bridge.js +10 -0
  25. package/dist/services/calendar-native-bridge.js.map +1 -0
  26. package/dist/services/chat-organization-branding-rust-idempotency.test.js +2 -0
  27. package/dist/services/chat-organization-branding-rust-idempotency.test.js.map +1 -1
  28. package/dist/services/heartbeat-run-reference.d.ts +1 -0
  29. package/dist/services/heartbeat-run-reference.d.ts.map +1 -1
  30. package/dist/services/heartbeat-run-reference.js +6 -4
  31. package/dist/services/heartbeat-run-reference.js.map +1 -1
  32. package/dist/services/messenger-saved-views.js +2 -2
  33. package/dist/services/messenger-saved-views.js.map +1 -1
  34. package/dist/services/messenger-state-bridge.d.ts +60 -0
  35. package/dist/services/messenger-state-bridge.d.ts.map +1 -0
  36. package/dist/services/messenger-state-bridge.js +36 -0
  37. package/dist/services/messenger-state-bridge.js.map +1 -0
  38. package/dist/services/messenger-state-bridge.test.d.ts +2 -0
  39. package/dist/services/messenger-state-bridge.test.d.ts.map +1 -0
  40. package/dist/services/messenger-state-bridge.test.js +21 -0
  41. package/dist/services/messenger-state-bridge.test.js.map +1 -0
  42. package/dist/services/run-read-bridge.d.ts +57 -0
  43. package/dist/services/run-read-bridge.d.ts.map +1 -0
  44. package/dist/services/run-read-bridge.js +51 -0
  45. package/dist/services/run-read-bridge.js.map +1 -0
  46. package/dist/services/run-read-bridge.test.d.ts +2 -0
  47. package/dist/services/run-read-bridge.test.d.ts.map +1 -0
  48. package/dist/services/run-read-bridge.test.js +99 -0
  49. package/dist/services/run-read-bridge.test.js.map +1 -0
  50. package/dist/services/run-reference-visibility.d.ts +2 -0
  51. package/dist/services/run-reference-visibility.d.ts.map +1 -0
  52. package/dist/services/run-reference-visibility.js +52 -0
  53. package/dist/services/run-reference-visibility.js.map +1 -0
  54. package/dist/services/rust-foundation-bridge.d.ts +28 -0
  55. package/dist/services/rust-foundation-bridge.d.ts.map +1 -1
  56. package/dist/services/rust-foundation-bridge.js +191 -0
  57. package/dist/services/rust-foundation-bridge.js.map +1 -1
  58. package/dist/services/rust-foundation-bridge.test.js +41 -2
  59. package/dist/services/rust-foundation-bridge.test.js.map +1 -1
  60. package/package.json +13 -13
  61. package/resources/native/aarch64-apple-darwin/rudder-server-foundation +0 -0
  62. package/resources/native/aarch64-pc-windows-msvc/migration-preflight.exe +0 -0
  63. package/resources/native/aarch64-pc-windows-msvc/rudder-server-foundation.exe +0 -0
  64. package/resources/native/aarch64-unknown-linux-gnu/rudder-server-foundation +0 -0
  65. package/resources/native/x86_64-apple-darwin/rudder-server-foundation +0 -0
  66. package/resources/native/x86_64-pc-windows-msvc/migration-preflight.exe +0 -0
  67. package/resources/native/x86_64-pc-windows-msvc/rudder-server-foundation.exe +0 -0
  68. package/resources/native/x86_64-unknown-linux-gnu/rudder-server-foundation +0 -0
@@ -79,10 +79,10 @@ export function registerApiRoutes(db, opts, workspacePreview, chatBackgroundRunt
79
79
  api.use(onboardingRoutes(db, rustFoundationBridge));
80
80
  api.use(productAnalyticsRoutes(db));
81
81
  api.use(issueRoutes(db, opts.storageService));
82
- api.use(messengerRoutes(db));
82
+ api.use(messengerRoutes(db, rustFoundationBridge));
83
83
  api.use(chatRoutes(db, opts.storageService, chatBackgroundRuntime, opts.registerNetworkWaitingRunHandler, rustFoundationBridge));
84
84
  api.use(automationRoutes(db));
85
- api.use(calendarRoutes(db));
85
+ api.use(calendarRoutes(db, rustFoundationBridge));
86
86
  api.use(runWorkspaceRoutes(db));
87
87
  api.use(integrationRoutes(db));
88
88
  api.use(managedMcpConnectionRoutes(db, {
@@ -97,11 +97,11 @@ export function registerApiRoutes(db, opts, workspacePreview, chatBackgroundRunt
97
97
  },
98
98
  hostEnv: opts.mcpHostEnv ?? process.env,
99
99
  }));
100
- api.use(goalRoutes(db));
100
+ api.use(goalRoutes(db, rustFoundationBridge));
101
101
  api.use(approvalRoutes(db, rustFoundationBridge));
102
102
  api.use(requestRoutes(db));
103
103
  api.use(secretRoutes(db));
104
- api.use(costRoutes(db));
104
+ api.use(costRoutes(db, rustFoundationBridge));
105
105
  api.use(activityRoutes(db));
106
106
  api.use(runIntelligenceRoutes(db));
107
107
  api.use(dashboardRoutes(db));
@@ -1 +1 @@
1
- {"version":3,"file":"register-api-routes.js","sourceRoot":"","sources":["../../src/bootstrap/register-api-routes.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"register-api-routes.js","sourceRoot":"","sources":["../../src/bootstrap/register-api-routes.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"agents.management-routes.d.ts","sourceRoot":"","sources":["../../src/routes/agents.management-routes.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,cAAc,CAAC;AAmBvC,OAAO,EAAE,MAAM,EAAgB,MAAM,SAAS,CAAC;AAiB/C,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAG1D,KAAK,2BAA2B,GAAG;IACjC,MAAM,EAAE,MAAM,CAAC;IACf,EAAE,EAAE,EAAE,CAAC;IACP,OAAO,CAAC,EAAE,cAAc,CAAC;IACzB,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAC;CACpB,CAAC;AAOF,wBAAgB,6BAA6B,CAAC,GAAG,EAAE,2BAA2B,QA+hD7E"}
1
+ {"version":3,"file":"agents.management-routes.d.ts","sourceRoot":"","sources":["../../src/routes/agents.management-routes.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,cAAc,CAAC;AAiBvC,OAAO,EAAE,MAAM,EAAqC,MAAM,SAAS,CAAC;AAkBpE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAG1D,KAAK,2BAA2B,GAAG;IACjC,MAAM,EAAE,MAAM,CAAC;IACf,EAAE,EAAE,EAAE,CAAC;IACP,OAAO,CAAC,EAAE,cAAc,CAAC;IACzB,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAC;CACpB,CAAC;AAOF,wBAAgB,6BAA6B,CAAC,GAAG,EAAE,2BAA2B,QAo9C7E"}
@@ -1,6 +1,6 @@
1
1
  import { runClaudeLogin } from "@rudderhq/agent-runtime-claude-local/server";
2
- import { agents as agentsTable, organizations } from "@rudderhq/db";
3
- import { createAgentHireSchema, createAgentKeySchema, createAgentSchema, createDelegationRunSchema, toAgentRun, toAgentRuns, toHeartbeatRun, toHeartbeatRuns, updateAgentInstructionsBundleSchema, updateAgentInstructionsPathSchema, updateAgentPermissionsSchema, updateAgentSchema, upsertAgentInstructionsFileSchema, wakeAgentSchema } from "@rudderhq/shared";
2
+ import { agents as agentsTable, heartbeatRuns, organizations } from "@rudderhq/db";
3
+ import { createAgentHireSchema, createAgentKeySchema, createAgentSchema, createDelegationRunSchema, toAgentRun, toHeartbeatRun, updateAgentInstructionsBundleSchema, updateAgentInstructionsPathSchema, updateAgentPermissionsSchema, updateAgentSchema, upsertAgentInstructionsFileSchema, wakeAgentSchema } from "@rudderhq/shared";
4
4
  import { asc, eq } from "drizzle-orm";
5
5
  import multer from "multer";
6
6
  import { randomUUID } from "node:crypto";
@@ -14,9 +14,10 @@ import { delegationRunService } from "../services/delegation-runs.js";
14
14
  import { resolveHeartbeatRunIdReference } from "../services/heartbeat-run-reference.js";
15
15
  import { issueService, logActivity, syncInstructionsBundleConfigFromFilePath } from "../services/index.js";
16
16
  import { sendLiveRunRead } from "../services/live-run-read-bridge.js";
17
+ import { requireRunReadAccess, runReadRedaction, sendRunRead } from "../services/run-read-bridge.js";
17
18
  import { assertBoard, assertCompanyAccess, getActorInfo, getAuthorizedOrgScope } from "./authz.js";
18
19
  export function registerAgentManagementRoutes(ctx) {
19
- const { router, db, storage, rustFoundationBridge, svc, assets, access, approvalsSvc, budgets, heartbeat, issueApprovalsSvc, secretsSvc, instructions, organizationSkills, intelligenceProfiles, intelligenceRuntimeChain, workspaceOperations, instanceSettings, avatarUpload, strictSecretsMode, persistReconciledInstructionsBundle, getCurrentUserRedactionOptions, canCreateAgents, buildAgentAccessState, assertCanCreateAgentsForCompany, parseSourceIssueIds, applyCreateDefaultsByAdapterType, resolveDesiredSkillAssignment, assertAdapterConfigConstraints, assertAgentAvatarAssetBelongsToOrg, materializeDefaultInstructionsBundleForNewAgent, applyDefaultAgentTaskAssignGrant, buildAgentDetail, assertCanUpdateAgent, runSingleFileUpload, AGENT_AVATAR_CONTENT_TYPES, compressAgentAvatar, assertCanManageInstructionsPath, asRecord, asNonEmptyString, resolveInstructionsFilePath, assertCanReadAgent, preserveInstructionsBundleConfig, summarizeAgentUpdateDetails, redactAgentConfiguration, redactAgentForResponse, stripPersistedSkillSyncConfig, withRuntimeSkillEntries, DEFAULT_INSTRUCTIONS_PATH_KEYS, DEFAULT_MANAGED_INSTRUCTIONS_ADAPTER_TYPES, KNOWN_INSTRUCTIONS_PATH_KEYS, KNOWN_INSTRUCTIONS_BUNDLE_KEYS, } = ctx;
20
+ const { router, db, storage, rustFoundationBridge, svc, assets, access, approvalsSvc, budgets, heartbeat, issueApprovalsSvc, secretsSvc, instructions, organizationSkills, intelligenceProfiles, intelligenceRuntimeChain, workspaceOperations, instanceSettings, avatarUpload, strictSecretsMode, persistReconciledInstructionsBundle, getCurrentUserRedactionOptions, getRunReadEnvironment = runReadRedaction, canCreateAgents, buildAgentAccessState, assertCanCreateAgentsForCompany, parseSourceIssueIds, applyCreateDefaultsByAdapterType, resolveDesiredSkillAssignment, assertAdapterConfigConstraints, assertAgentAvatarAssetBelongsToOrg, materializeDefaultInstructionsBundleForNewAgent, applyDefaultAgentTaskAssignGrant, buildAgentDetail, assertCanUpdateAgent, runSingleFileUpload, AGENT_AVATAR_CONTENT_TYPES, compressAgentAvatar, assertCanManageInstructionsPath, asRecord, asNonEmptyString, resolveInstructionsFilePath, assertCanReadAgent, preserveInstructionsBundleConfig, summarizeAgentUpdateDetails, redactAgentConfiguration, redactAgentForResponse, stripPersistedSkillSyncConfig, withRuntimeSkillEntries, DEFAULT_INSTRUCTIONS_PATH_KEYS, DEFAULT_MANAGED_INSTRUCTIONS_ADAPTER_TYPES, KNOWN_INSTRUCTIONS_PATH_KEYS, KNOWN_INSTRUCTIONS_BUNDLE_KEYS, } = ctx;
20
21
  const delegation = delegationRunService(db, { heartbeat, access });
21
22
  async function ensureFirstAgentIntelligenceDefaults(orgId, agent) {
22
23
  const [firstAgent] = await db
@@ -911,48 +912,31 @@ export function registerAgentManagementRoutes(ctx) {
911
912
  });
912
913
  res.json(result);
913
914
  });
914
- router.get("/orgs/:orgId/heartbeat-runs", async (req, res) => {
915
- const orgId = req.params.orgId;
916
- assertCompanyAccess(req, orgId);
917
- const runs = await listRunsForRequest(req, orgId);
918
- res.json(toHeartbeatRuns(runs));
919
- });
920
- router.get("/orgs/:orgId/agent-runs", async (req, res) => {
921
- const orgId = req.params.orgId;
922
- assertCompanyAccess(req, orgId);
923
- const runs = await listRunsForRequest(req, orgId);
924
- res.json(toAgentRuns(runs));
925
- });
915
+ function listRunsForRequest(surface) {
916
+ return async (req, res) => {
917
+ const orgId = req.params.orgId;
918
+ assertCompanyAccess(req, orgId);
919
+ const start = req.query.startDate ? new Date(req.query.startDate) : null;
920
+ const end = req.query.endDate ? new Date(req.query.endDate) : null;
921
+ const startDate = start && Number.isFinite(start.getTime()) ? start.toISOString() : null;
922
+ const endDate = end && Number.isFinite(end.getTime()) ? end.toISOString() : null;
923
+ const limitParam = req.query.limit;
924
+ await sendRunRead(res, rustFoundationBridge, req.actor, orgId, {
925
+ operation: "list", surface,
926
+ agentId: req.query.agentId || null,
927
+ goalId: typeof req.query.goalId === "string" && /^[0-9a-f-]{36}$/i.test(req.query.goalId) ? req.query.goalId : null,
928
+ startDate, endDate,
929
+ limit: limitParam ? Math.max(1, Math.min(1000, parseInt(limitParam, 10) || 100)) : startDate || endDate ? null : 100,
930
+ });
931
+ };
932
+ }
933
+ router.get("/orgs/:orgId/heartbeat-runs", listRunsForRequest("heartbeat"));
934
+ router.get("/orgs/:orgId/agent-runs", listRunsForRequest("agent"));
926
935
  router.get("/orgs/:orgId/agent-runs/overview", async (req, res) => {
927
936
  const orgId = req.params.orgId;
928
937
  assertCompanyAccess(req, orgId);
929
- const overview = await heartbeat.overview(orgId);
930
- res.json({
931
- latestByAgent: toAgentRuns(overview.latestByAgent),
932
- recent: toAgentRuns(overview.recent),
933
- });
938
+ await sendRunRead(res, rustFoundationBridge, req.actor, orgId, { operation: "overview" });
934
939
  });
935
- async function listRunsForRequest(req, orgId) {
936
- const agentId = req.query.agentId;
937
- const limitParam = req.query.limit;
938
- const startDateParam = req.query.startDate;
939
- const endDateParam = req.query.endDate;
940
- const goalIdParam = req.query.goalId;
941
- const startDate = startDateParam ? new Date(startDateParam) : undefined;
942
- const endDate = endDateParam ? new Date(endDateParam) : undefined;
943
- const filters = {
944
- startDate: startDate && Number.isFinite(startDate.getTime()) ? startDate : undefined,
945
- endDate: endDate && Number.isFinite(endDate.getTime()) ? endDate : undefined,
946
- goalId: goalIdParam && /^[0-9a-f-]{36}$/i.test(goalIdParam) ? goalIdParam : undefined,
947
- };
948
- const hasDateRange = Boolean(filters.startDate || filters.endDate);
949
- const limit = limitParam
950
- ? Math.max(1, Math.min(1000, parseInt(limitParam, 10) || 100))
951
- : hasDateRange
952
- ? undefined
953
- : 100;
954
- return heartbeat.list(orgId, agentId, limit, filters);
955
- }
956
940
  router.get("/orgs/:orgId/live-runs", async (req, res) => {
957
941
  const orgId = req.params.orgId;
958
942
  assertCompanyAccess(req, orgId);
@@ -967,24 +951,28 @@ export function registerAgentManagementRoutes(ctx) {
967
951
  minCount,
968
952
  });
969
953
  });
970
- router.get("/heartbeat-runs/:runId", async (req, res) => {
971
- const run = await getAuthorizedRun(req, res, "Heartbeat run not found");
972
- if (!run)
973
- return;
974
- res.json(redactCurrentUserValue(toHeartbeatRun(run), await getCurrentUserRedactionOptions()));
975
- });
976
- router.get("/agent-runs/:runId", async (req, res) => {
977
- const run = await getAuthorizedRun(req, res, "Agent run not found");
978
- if (!run)
979
- return;
980
- res.json(redactCurrentUserValue(toAgentRun(run), await getCurrentUserRedactionOptions()));
981
- });
982
- async function getAuthorizedRun(req, res, notFoundMessage) {
954
+ function detailForRequest(surface, notFoundMessage) {
955
+ return async (req, res) => {
956
+ const run = await getAuthorizedRunReference(req, res, notFoundMessage);
957
+ if (!run)
958
+ return;
959
+ await sendRunRead(res, rustFoundationBridge, req.actor, run.orgId, {
960
+ operation: "detail", surface, runId: run.id,
961
+ redaction: getRunReadEnvironment(),
962
+ });
963
+ };
964
+ }
965
+ router.get("/heartbeat-runs/:runId", detailForRequest("heartbeat", "Heartbeat run not found"));
966
+ router.get("/agent-runs/:runId", detailForRequest("agent", "Agent run not found"));
967
+ async function getAuthorizedRunReference(req, res, notFoundMessage) {
983
968
  const runId = await resolveHeartbeatRunIdReference(db, req.params.runId, {
984
- orgIds: getAuthorizedOrgScope(req),
985
- notFoundMessage,
969
+ sideChatOwnerId: req.actor.type === "board" ? (req.actor.userId ?? "local-board") : null,
970
+ orgIds: getAuthorizedOrgScope(req), notFoundMessage,
986
971
  });
987
- const run = await heartbeat.getRun(runId);
972
+ // Only identity is read here for the existing access check. Native code
973
+ // rereads the org-scoped row and owns every public payload field.
974
+ const [run] = await db.select({ id: heartbeatRuns.id, orgId: heartbeatRuns.orgId })
975
+ .from(heartbeatRuns).where(eq(heartbeatRuns.id, runId)).limit(1);
988
976
  if (!run) {
989
977
  res.status(404).json({ error: notFoundMessage });
990
978
  return null;
@@ -1002,6 +990,7 @@ export function registerAgentManagementRoutes(ctx) {
1002
990
  });
1003
991
  async function cancelRunForRequest(req, notFoundMessage) {
1004
992
  const runId = await resolveHeartbeatRunIdReference(db, req.params.runId, {
993
+ sideChatOwnerId: req.actor.type === "board" ? (req.actor.userId ?? "local-board") : null,
1005
994
  orgIds: getAuthorizedOrgScope(req),
1006
995
  notFoundMessage,
1007
996
  });
@@ -1039,6 +1028,7 @@ export function registerAgentManagementRoutes(ctx) {
1039
1028
  });
1040
1029
  async function retryRunForRequest(req, res, notFoundMessage) {
1041
1030
  const runId = await resolveHeartbeatRunIdReference(db, req.params.runId, {
1031
+ sideChatOwnerId: req.actor.type === "board" ? (req.actor.userId ?? "local-board") : null,
1042
1032
  orgIds: getAuthorizedOrgScope(req),
1043
1033
  notFoundMessage,
1044
1034
  });
@@ -1068,39 +1058,23 @@ export function registerAgentManagementRoutes(ctx) {
1068
1058
  });
1069
1059
  return run;
1070
1060
  }
1071
- router.get("/heartbeat-runs/:runId/events", async (req, res) => {
1072
- const events = await listRunEventsForRequest(req, res, "Heartbeat run not found");
1073
- if (!events)
1074
- return;
1075
- res.json(events);
1076
- });
1077
- router.get("/agent-runs/:runId/events", async (req, res) => {
1078
- const events = await listRunEventsForRequest(req, res, "Agent run not found");
1079
- if (!events)
1080
- return;
1081
- res.json(events);
1082
- });
1083
- async function listRunEventsForRequest(req, res, notFoundMessage) {
1084
- const runId = await resolveHeartbeatRunIdReference(db, req.params.runId, {
1085
- orgIds: getAuthorizedOrgScope(req),
1086
- notFoundMessage,
1087
- });
1088
- const run = await heartbeat.getRun(runId);
1089
- if (!run) {
1090
- res.status(404).json({ error: notFoundMessage });
1091
- return null;
1092
- }
1093
- assertCompanyAccess(req, run.orgId);
1094
- const afterSeq = Number(req.query.afterSeq ?? 0);
1095
- const limit = Number(req.query.limit ?? 200);
1096
- const events = await heartbeat.listEvents(runId, Number.isFinite(afterSeq) ? afterSeq : 0, Number.isFinite(limit) ? limit : 200);
1097
- const currentUserRedactionOptions = await getCurrentUserRedactionOptions();
1098
- const redactedEvents = events.map((event) => redactCurrentUserValue({
1099
- ...event,
1100
- payload: redactEventPayload(event.payload),
1101
- }, currentUserRedactionOptions));
1102
- return redactedEvents;
1061
+ function eventsForRequest(notFoundMessage) {
1062
+ return async (req, res) => {
1063
+ const run = await getAuthorizedRunReference(req, res, notFoundMessage);
1064
+ if (!run)
1065
+ return;
1066
+ const afterSeq = Number(req.query.afterSeq ?? 0);
1067
+ const limit = Number(req.query.limit ?? 200);
1068
+ await sendRunRead(res, rustFoundationBridge, req.actor, run.orgId, {
1069
+ operation: "events", runId: run.id,
1070
+ afterSeq: Number.isFinite(afterSeq) ? afterSeq : 0,
1071
+ limit: Number.isFinite(limit) ? limit : 200,
1072
+ redaction: getRunReadEnvironment(),
1073
+ });
1074
+ };
1103
1075
  }
1076
+ router.get("/heartbeat-runs/:runId/events", eventsForRequest("Heartbeat run not found"));
1077
+ router.get("/agent-runs/:runId/events", eventsForRequest("Agent run not found"));
1104
1078
  router.get("/heartbeat-runs/:runId/log", async (req, res) => {
1105
1079
  const result = await readRunLogForRequest(req, res, "Heartbeat run not found");
1106
1080
  if (!result)
@@ -1117,6 +1091,7 @@ export function registerAgentManagementRoutes(ctx) {
1117
1091
  });
1118
1092
  async function readRunLogForRequest(req, res, notFoundMessage) {
1119
1093
  const runId = await resolveHeartbeatRunIdReference(db, req.params.runId, {
1094
+ sideChatOwnerId: req.actor.type === "board" ? (req.actor.userId ?? "local-board") : null,
1120
1095
  orgIds: getAuthorizedOrgScope(req),
1121
1096
  notFoundMessage,
1122
1097
  });
@@ -1134,34 +1109,19 @@ export function registerAgentManagementRoutes(ctx) {
1134
1109
  });
1135
1110
  return result;
1136
1111
  }
1137
- router.get("/heartbeat-runs/:runId/workspace-operations", async (req, res) => {
1138
- const operations = await listRunWorkspaceOperationsForRequest(req, res, "Heartbeat run not found");
1139
- if (!operations)
1140
- return;
1141
- res.json(operations);
1142
- });
1143
- router.get("/agent-runs/:runId/workspace-operations", async (req, res) => {
1144
- const operations = await listRunWorkspaceOperationsForRequest(req, res, "Agent run not found");
1145
- if (!operations)
1146
- return;
1147
- res.json(operations);
1148
- });
1149
- async function listRunWorkspaceOperationsForRequest(req, res, notFoundMessage) {
1150
- const runId = await resolveHeartbeatRunIdReference(db, req.params.runId, {
1151
- orgIds: getAuthorizedOrgScope(req),
1152
- notFoundMessage,
1153
- });
1154
- const run = await heartbeat.getRun(runId);
1155
- if (!run) {
1156
- res.status(404).json({ error: notFoundMessage });
1157
- return null;
1158
- }
1159
- assertCompanyAccess(req, run.orgId);
1160
- const context = asRecord(run.contextSnapshot);
1161
- const executionWorkspaceId = asNonEmptyString(context?.executionWorkspaceId);
1162
- const operations = await workspaceOperations.listForRun(runId, executionWorkspaceId);
1163
- return redactCurrentUserValue(operations, await getCurrentUserRedactionOptions());
1112
+ function workspaceOperationsForRequest(notFoundMessage) {
1113
+ return async (req, res) => {
1114
+ const run = await getAuthorizedRunReference(req, res, notFoundMessage);
1115
+ if (!run)
1116
+ return;
1117
+ await sendRunRead(res, rustFoundationBridge, req.actor, run.orgId, {
1118
+ operation: "workspaceOperations", runId: run.id,
1119
+ redaction: getRunReadEnvironment(),
1120
+ });
1121
+ };
1164
1122
  }
1123
+ router.get("/heartbeat-runs/:runId/workspace-operations", workspaceOperationsForRequest("Heartbeat run not found"));
1124
+ router.get("/agent-runs/:runId/workspace-operations", workspaceOperationsForRequest("Agent run not found"));
1165
1125
  router.get("/workspace-operations/:operationId/log", async (req, res) => {
1166
1126
  const operationId = req.params.operationId;
1167
1127
  const operation = await workspaceOperations.getById(operationId);
@@ -1170,6 +1130,7 @@ export function registerAgentManagementRoutes(ctx) {
1170
1130
  return;
1171
1131
  }
1172
1132
  assertCompanyAccess(req, operation.orgId);
1133
+ await requireRunReadAccess(rustFoundationBridge, req.actor, operation.orgId, { operation: "workspaceOperationAccess", operationId }, "Workspace operation not found");
1173
1134
  const offset = Number(req.query.offset ?? 0);
1174
1135
  const limitBytes = Number(req.query.limitBytes ?? 256000);
1175
1136
  const result = await workspaceOperations.readLog(operationId, {
@@ -1207,32 +1168,9 @@ export function registerAgentManagementRoutes(ctx) {
1207
1168
  return;
1208
1169
  }
1209
1170
  assertCompanyAccess(req, issue.orgId);
1210
- let run = issue.executionRunId ? await heartbeat.getRun(issue.executionRunId) : null;
1211
- if (run && run.status !== "queued" && run.status !== "running" && !run.terminalEffectsPending) {
1212
- run = null;
1213
- }
1214
- if (!run && issue.assigneeAgentId && issue.status === "in_progress") {
1215
- const candidateRun = await heartbeat.getActiveRunForAgent(issue.assigneeAgentId);
1216
- const candidateContext = asRecord(candidateRun?.contextSnapshot);
1217
- const candidateIssueId = asNonEmptyString(candidateContext?.issueId);
1218
- if (candidateRun && candidateIssueId === issue.id) {
1219
- run = candidateRun;
1220
- }
1221
- }
1222
- if (!run) {
1223
- res.json(null);
1224
- return;
1225
- }
1226
- const agent = await svc.getById(run.agentId);
1227
- if (!agent) {
1228
- res.json(null);
1229
- return;
1230
- }
1231
- res.json({
1232
- ...redactCurrentUserValue(toHeartbeatRun(run), await getCurrentUserRedactionOptions()),
1233
- agentId: agent.id,
1234
- agentName: agent.name,
1235
- agentRuntimeType: agent.agentRuntimeType,
1171
+ await sendRunRead(res, rustFoundationBridge, req.actor, issue.orgId, {
1172
+ operation: "active", issueId: issue.id,
1173
+ redaction: getRunReadEnvironment(),
1236
1174
  });
1237
1175
  });
1238
1176
  }