@oar-sh/oar 0.9.15 → 0.9.16
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +85 -0
- package/README.md +9 -9
- package/package.json +1 -1
- package/server/claude-worker/claude-remote-relay-tool.mjs +36 -1
- package/server/claude-worker/claude-session-process.mjs +4 -4
- package/server/copilot-worker/copilot-sdk-session-process.mjs +2 -2
- package/server/db-schema.mjs +52 -0
- package/server/migrations/0019-relay-event-subscription-options.mjs +106 -0
- package/server/migrations/0020-conversation-may-create-sessions.mjs +67 -0
- package/server/migrations/0021-conversation-group-agent-marks.mjs +77 -0
- package/server/migrations/0022-relay-schedules.mjs +142 -0
- package/server/migrations/0023-relay-asks.mjs +141 -0
- package/server/public/app/ask-user-view.js +3 -0
- package/server/public/app/bootstrap.js +61 -3
- package/server/public/app/context-usage-view.mjs +17 -0
- package/server/public/app/conversation-group-order.mjs +35 -0
- package/server/public/app/inbox-ui.js +356 -0
- package/server/public/app/inbox-view.mjs +370 -0
- package/server/public/app/journal-view.js +23 -2
- package/server/public/app/relay-event-subscriptions-ui.js +4 -2
- package/server/public/app/relay-event-view.mjs +33 -7
- package/server/public/app/relay-schedule-view.mjs +119 -0
- package/server/public/app/relay-schedules-ui.js +172 -0
- package/server/public/app/socket-handlers.js +27 -3
- package/server/public/app/store.js +18 -5
- package/server/public/index.html +159 -2
- package/server/relay-tools.md +18 -3
- package/server/repositories/conversation-group-repository.mjs +97 -11
- package/server/repositories/remote-relay-repository.mjs +20 -2
- package/server/repositories/session-repository.mjs +7 -1
- package/server/routes/ask-user-routes.mjs +57 -3
- package/server/routes/cache-routes.mjs +6 -0
- package/server/routes/conversation-group-routes.mjs +17 -2
- package/server/routes/messages-routes.mjs +3 -3
- package/server/routes/relay-ask-routes.mjs +387 -0
- package/server/routes/relay-event-routes.mjs +3 -1
- package/server/routes/relay-schedule-routes.mjs +57 -0
- package/server/routes/sessions-routes.mjs +568 -42
- package/server/server-runtime.mjs +80 -1
- package/server/services/cache-rebuild-service.mjs +19 -2
- package/server/services/conversation-preferences-service.mjs +17 -0
- package/server/services/relay-ask-link-service.mjs +174 -0
- package/server/services/relay-ask-service.mjs +604 -0
- package/server/services/relay-event-service.mjs +589 -73
- package/server/services/relay-schedule-service.mjs +596 -0
- package/server/services/remote-relay-caller-context.mjs +89 -20
- package/server/services/remote-relay-dispatcher.mjs +956 -30
- package/shared/relay-asks.mjs +145 -0
- package/shared/relay-events.mjs +268 -18
- package/shared/relay-schedules.mjs +128 -0
- package/shared/remote-relay-contract.mjs +553 -25
- package/shared/remote-relay-tool-core.mjs +16 -5
|
@@ -162,21 +162,32 @@ export async function executeRemoteRelayTool(input, { api, conversationId = '',
|
|
|
162
162
|
}
|
|
163
163
|
const parsed = validateRemoteRelayToolInput(input);
|
|
164
164
|
if (!parsed.ok) return parsed;
|
|
165
|
-
|
|
165
|
+
// Only this check sees what the agent wrote: the relay gets the arguments
|
|
166
|
+
// the action takes, so the ones it does not take are named here.
|
|
167
|
+
const withIgnored = (result) => withIgnoredArguments(result, parsed.ignored);
|
|
168
|
+
if (signal?.aborted) return withIgnored(remoteRelayCancelledResult());
|
|
166
169
|
try {
|
|
167
170
|
const response = await api('POST', REMOTE_RELAY_TOOL_ENDPOINT, {
|
|
168
171
|
conversationId: conversation,
|
|
169
172
|
action: parsed.action,
|
|
170
173
|
args: parsed.args,
|
|
171
174
|
}, { longCall: true, ...(signal ? { signal } : {}) });
|
|
172
|
-
if (response && typeof response === 'object' && !Array.isArray(response)) return response;
|
|
173
|
-
return { ok: true, result: response ?? null };
|
|
175
|
+
if (response && typeof response === 'object' && !Array.isArray(response)) return withIgnored(response);
|
|
176
|
+
return withIgnored({ ok: true, result: response ?? null });
|
|
174
177
|
} catch (error) {
|
|
175
|
-
if (signal?.aborted || isAbortError(error)) return remoteRelayCancelledResult();
|
|
176
|
-
return remoteRelayErrorResult(error);
|
|
178
|
+
if (signal?.aborted || isAbortError(error)) return withIgnored(remoteRelayCancelledResult());
|
|
179
|
+
return withIgnored(remoteRelayErrorResult(error));
|
|
177
180
|
}
|
|
178
181
|
}
|
|
179
182
|
|
|
183
|
+
/** `result` with `ignored` (the arguments the action did not take) merged in. */
|
|
184
|
+
export function withIgnoredArguments(result, ignored) {
|
|
185
|
+
const extra = Array.isArray(ignored) ? ignored.map(toText).filter(Boolean) : [];
|
|
186
|
+
if (!extra.length || !result || typeof result !== 'object' || Array.isArray(result)) return result;
|
|
187
|
+
const known = Array.isArray(result.ignored) ? result.ignored.map(toText).filter(Boolean) : [];
|
|
188
|
+
return { ...result, ignored: [...new Set([...known, ...extra])].sort() };
|
|
189
|
+
}
|
|
190
|
+
|
|
180
191
|
/**
|
|
181
192
|
* Whether a worker should register the tool: at least one remote is paired,
|
|
182
193
|
* or this relay lets agents start and use sessions on it (the local target).
|