@monoes/monomindcli 2.10.30 → 2.10.31
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/.claude/helpers/graphify-freshen.cjs +11 -12
- package/.claude/helpers/handlers/capture-handler.cjs +1 -1
- package/dist/src/commands/analyze-diff.d.ts.map +1 -1
- package/dist/src/commands/analyze-diff.js +6 -0
- package/dist/src/commands/analyze-diff.js.map +1 -1
- package/dist/src/commands/doctor-project-checks.d.ts.map +1 -1
- package/dist/src/commands/doctor-project-checks.js +2 -2
- package/dist/src/commands/doctor-project-checks.js.map +1 -1
- package/dist/src/commands/init.d.ts.map +1 -1
- package/dist/src/commands/init.js.map +1 -1
- package/dist/src/commands/mcp.d.ts.map +1 -1
- package/dist/src/commands/mcp.js.map +1 -1
- package/dist/src/commands/org-observe.d.ts +15 -7
- package/dist/src/commands/org-observe.d.ts.map +1 -1
- package/dist/src/commands/org-observe.js +208 -63
- package/dist/src/commands/org-observe.js.map +1 -1
- package/dist/src/commands/org.d.ts.map +1 -1
- package/dist/src/commands/org.js +57 -4
- package/dist/src/commands/org.js.map +1 -1
- package/dist/src/commands/status.d.ts.map +1 -1
- package/dist/src/commands/status.js +11 -2
- package/dist/src/commands/status.js.map +1 -1
- package/dist/src/mcp-tools/system-tools.d.ts.map +1 -1
- package/dist/src/mcp-tools/system-tools.js.map +1 -1
- package/dist/src/memory/memory-kg.d.ts.map +1 -1
- package/dist/src/memory/memory-kg.js +10 -2
- package/dist/src/memory/memory-kg.js.map +1 -1
- package/dist/src/orgrt/agent-exec.d.ts.map +1 -1
- package/dist/src/orgrt/agent-exec.js +7 -3
- package/dist/src/orgrt/agent-exec.js.map +1 -1
- package/dist/src/orgrt/antigravity-runner.d.ts.map +1 -1
- package/dist/src/orgrt/antigravity-runner.js +6 -2
- package/dist/src/orgrt/antigravity-runner.js.map +1 -1
- package/dist/src/orgrt/approvals.d.ts +15 -1
- package/dist/src/orgrt/approvals.d.ts.map +1 -1
- package/dist/src/orgrt/approvals.js +76 -11
- package/dist/src/orgrt/approvals.js.map +1 -1
- package/dist/src/orgrt/broker.d.ts +10 -2
- package/dist/src/orgrt/broker.d.ts.map +1 -1
- package/dist/src/orgrt/broker.js +20 -5
- package/dist/src/orgrt/broker.js.map +1 -1
- package/dist/src/orgrt/checkpoint.d.ts.map +1 -1
- package/dist/src/orgrt/checkpoint.js.map +1 -1
- package/dist/src/orgrt/cross-org.d.ts +15 -2
- package/dist/src/orgrt/cross-org.d.ts.map +1 -1
- package/dist/src/orgrt/cross-org.js +169 -16
- package/dist/src/orgrt/cross-org.js.map +1 -1
- package/dist/src/orgrt/daemon.d.ts +31 -3
- package/dist/src/orgrt/daemon.d.ts.map +1 -1
- package/dist/src/orgrt/daemon.js +132 -21
- package/dist/src/orgrt/daemon.js.map +1 -1
- package/dist/src/orgrt/decisions.d.ts.map +1 -1
- package/dist/src/orgrt/decisions.js +13 -1
- package/dist/src/orgrt/decisions.js.map +1 -1
- package/dist/src/orgrt/endpoint-roles.d.ts +86 -0
- package/dist/src/orgrt/endpoint-roles.d.ts.map +1 -0
- package/dist/src/orgrt/endpoint-roles.js +364 -0
- package/dist/src/orgrt/endpoint-roles.js.map +1 -0
- package/dist/src/orgrt/inbox.d.ts +18 -0
- package/dist/src/orgrt/inbox.d.ts.map +1 -1
- package/dist/src/orgrt/inbox.js +73 -0
- package/dist/src/orgrt/inbox.js.map +1 -1
- package/dist/src/orgrt/migrate.d.ts.map +1 -1
- package/dist/src/orgrt/migrate.js +3 -0
- package/dist/src/orgrt/migrate.js.map +1 -1
- package/dist/src/orgrt/opencode-runner.d.ts.map +1 -1
- package/dist/src/orgrt/opencode-runner.js +2 -1
- package/dist/src/orgrt/opencode-runner.js.map +1 -1
- package/dist/src/orgrt/pi-rpc-runner.d.ts.map +1 -1
- package/dist/src/orgrt/pi-rpc-runner.js +6 -2
- package/dist/src/orgrt/pi-rpc-runner.js.map +1 -1
- package/dist/src/orgrt/policy.d.ts +22 -1
- package/dist/src/orgrt/policy.d.ts.map +1 -1
- package/dist/src/orgrt/policy.js +36 -4
- package/dist/src/orgrt/policy.js.map +1 -1
- package/dist/src/orgrt/questions.d.ts +3 -1
- package/dist/src/orgrt/questions.d.ts.map +1 -1
- package/dist/src/orgrt/questions.js +19 -3
- package/dist/src/orgrt/questions.js.map +1 -1
- package/dist/src/orgrt/qwen-rpc-runner.d.ts.map +1 -1
- package/dist/src/orgrt/qwen-rpc-runner.js +3 -1
- package/dist/src/orgrt/qwen-rpc-runner.js.map +1 -1
- package/dist/src/orgrt/role-slot.d.ts +1 -2
- package/dist/src/orgrt/role-slot.d.ts.map +1 -1
- package/dist/src/orgrt/role-slot.js +2 -1
- package/dist/src/orgrt/role-slot.js.map +1 -1
- package/dist/src/orgrt/scheduler-integration.d.ts.map +1 -1
- package/dist/src/orgrt/scheduler-integration.js +8 -1
- package/dist/src/orgrt/scheduler-integration.js.map +1 -1
- package/dist/src/orgrt/server.d.ts.map +1 -1
- package/dist/src/orgrt/server.js +43 -8
- package/dist/src/orgrt/server.js.map +1 -1
- package/dist/src/orgrt/session.d.ts +12 -1
- package/dist/src/orgrt/session.d.ts.map +1 -1
- package/dist/src/orgrt/session.js +20 -3
- package/dist/src/orgrt/session.js.map +1 -1
- package/dist/src/orgrt/tool-providers.d.ts +110 -0
- package/dist/src/orgrt/tool-providers.d.ts.map +1 -0
- package/dist/src/orgrt/tool-providers.js +617 -0
- package/dist/src/orgrt/tool-providers.js.map +1 -0
- package/dist/src/orgrt/types.d.ts +72 -0
- package/dist/src/orgrt/types.d.ts.map +1 -1
- package/dist/src/orgrt/types.js +56 -0
- package/dist/src/orgrt/types.js.map +1 -1
- package/dist/src/protocol-capabilities.d.ts +7 -1
- package/dist/src/protocol-capabilities.d.ts.map +1 -1
- package/dist/src/protocol-capabilities.js +15 -1
- package/dist/src/protocol-capabilities.js.map +1 -1
- package/dist/src/ui/routes-org.mjs +9 -7
- package/dist/src/utils/native-error.d.ts.map +1 -1
- package/dist/src/utils/native-error.js +9 -5
- package/dist/src/utils/native-error.js.map +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +2 -2
|
@@ -0,0 +1,364 @@
|
|
|
1
|
+
// packages/@monomind/cli/src/orgrt/endpoint-roles.ts
|
|
2
|
+
/**
|
|
3
|
+
* Endpoint roles (M2, capability `org-endpoint-roles`).
|
|
4
|
+
*
|
|
5
|
+
* A role with `kind: "endpoint"` is not an agent: it has no session, mailbox,
|
|
6
|
+
* policy engine, slot or budget. A message addressed to it is POSTed to
|
|
7
|
+
* `endpoint.url` (an automation — e.g. a mono-agent workflow), which replies
|
|
8
|
+
* later through `/api/xdeliver` as `<org>:<role>`.
|
|
9
|
+
*
|
|
10
|
+
* POST <endpoint.url>
|
|
11
|
+
* content-type: application/json
|
|
12
|
+
* authorization: Bearer <credential_file contents> (only if credential_file)
|
|
13
|
+
* {"orgName","run","from","to","subject","body","messageId"}
|
|
14
|
+
*
|
|
15
|
+
* 2xx = delivered. Anything else queues the message (`inbox.jsonl`,
|
|
16
|
+
* `endpoint: true`) and retries after 1 s, 5 s and 15 s; after the third
|
|
17
|
+
* failure an `endpoint-unreachable` audit event is emitted and the message
|
|
18
|
+
* stays queued. While the org runs, queued endpoint entries are re-attempted
|
|
19
|
+
* every 60 s, and `startOrg`'s drain delivers them too.
|
|
20
|
+
*/
|
|
21
|
+
import { readFileSync, statSync } from 'node:fs';
|
|
22
|
+
import { isAbsolute } from 'node:path';
|
|
23
|
+
import { newMessageId, peekInbox, queueMessage, takeQueued } from './inbox.js';
|
|
24
|
+
export const ENDPOINT_POST_TIMEOUT_MS = 15_000;
|
|
25
|
+
export const DEFAULT_ENDPOINT_WAIT_MS = 600_000;
|
|
26
|
+
export const ENDPOINT_RETRY_MS = [1_000, 5_000, 15_000];
|
|
27
|
+
export const ENDPOINT_PERIODIC_RETRY_MS = 60_000;
|
|
28
|
+
/** Keys an endpoint role may not carry (it is not an agent). */
|
|
29
|
+
export const ENDPOINT_FORBIDDEN_KEYS = [
|
|
30
|
+
'policy',
|
|
31
|
+
'runtime',
|
|
32
|
+
'adapter_config',
|
|
33
|
+
'budget_tokens',
|
|
34
|
+
'budget_usd',
|
|
35
|
+
'tool_providers',
|
|
36
|
+
];
|
|
37
|
+
export function isEndpointRole(role) {
|
|
38
|
+
return role?.kind === 'endpoint';
|
|
39
|
+
}
|
|
40
|
+
/** Roles that get sessions — everything except endpoint roles. */
|
|
41
|
+
export function agentRoles(roles) {
|
|
42
|
+
return roles.filter((r) => !isEndpointRole(r));
|
|
43
|
+
}
|
|
44
|
+
export function findEndpointRole(def, roleId) {
|
|
45
|
+
const role = def?.roles.find((r) => r.id === roleId);
|
|
46
|
+
return role && isEndpointRole(role) ? role : undefined;
|
|
47
|
+
}
|
|
48
|
+
/** `org validate` rules for endpoint roles. */
|
|
49
|
+
export function endpointStructureErrors(def) {
|
|
50
|
+
const errors = [];
|
|
51
|
+
for (const r of def.roles) {
|
|
52
|
+
if (!isEndpointRole(r))
|
|
53
|
+
continue;
|
|
54
|
+
const rec = r;
|
|
55
|
+
if (r.reports_to === null)
|
|
56
|
+
errors.push(`endpoint role "${r.id}" may not be the root role`);
|
|
57
|
+
if (!r.endpoint?.url)
|
|
58
|
+
errors.push(`endpoint role "${r.id}" needs endpoint.url`);
|
|
59
|
+
for (const k of ENDPOINT_FORBIDDEN_KEYS)
|
|
60
|
+
if (rec[k] !== undefined)
|
|
61
|
+
errors.push(`endpoint role "${r.id}" may not have "${k}"`);
|
|
62
|
+
const cred = r.endpoint?.credential_file;
|
|
63
|
+
if (cred !== undefined && !isAbsolute(cred))
|
|
64
|
+
errors.push(`endpoint role "${r.id}": endpoint.credential_file must be an absolute path`);
|
|
65
|
+
}
|
|
66
|
+
return errors;
|
|
67
|
+
}
|
|
68
|
+
/** Boss briefing: one line per endpoint role. */
|
|
69
|
+
export function endpointBriefingLines(def) {
|
|
70
|
+
if (!def)
|
|
71
|
+
return [];
|
|
72
|
+
return def.roles.filter(isEndpointRole).map((r) => {
|
|
73
|
+
const hint = r.endpoint?.input_hint?.trim();
|
|
74
|
+
return `- ${r.id} (${r.title || r.type}) is an automation, not an agent. Message it with org_send; it replies with its result.${hint ? ` ${hint}` : ''}`;
|
|
75
|
+
});
|
|
76
|
+
}
|
|
77
|
+
/** Read `credential_file` at delivery time (rotation needs no restart). It
|
|
78
|
+
* must be absolute, mode 0600 and owned by the daemon's user. */
|
|
79
|
+
export function readEndpointCredential(file) {
|
|
80
|
+
if (!file)
|
|
81
|
+
return { ok: true };
|
|
82
|
+
if (!isAbsolute(file))
|
|
83
|
+
return { ok: false, insecure: true, error: `credential_file ${file} is not an absolute path` };
|
|
84
|
+
let st;
|
|
85
|
+
try {
|
|
86
|
+
st = statSync(file);
|
|
87
|
+
}
|
|
88
|
+
catch (err) {
|
|
89
|
+
return {
|
|
90
|
+
ok: false,
|
|
91
|
+
insecure: false,
|
|
92
|
+
error: `credential_file unreadable: ${err instanceof Error ? err.message : String(err)}`,
|
|
93
|
+
};
|
|
94
|
+
}
|
|
95
|
+
if (process.platform !== 'win32') {
|
|
96
|
+
const mode = Number(st.mode) & 0o777;
|
|
97
|
+
if (mode !== 0o600)
|
|
98
|
+
return {
|
|
99
|
+
ok: false,
|
|
100
|
+
insecure: true,
|
|
101
|
+
error: `credential_file ${file} has mode ${mode.toString(8).padStart(4, '0')} (must be 0600)`,
|
|
102
|
+
};
|
|
103
|
+
const uid = typeof process.getuid === 'function' ? process.getuid() : undefined;
|
|
104
|
+
if (uid !== undefined && Number(st.uid) !== uid)
|
|
105
|
+
return {
|
|
106
|
+
ok: false,
|
|
107
|
+
insecure: true,
|
|
108
|
+
error: `credential_file ${file} is owned by uid ${st.uid}, not the daemon user (${uid})`,
|
|
109
|
+
};
|
|
110
|
+
}
|
|
111
|
+
try {
|
|
112
|
+
const value = readFileSync(file, 'utf8').trim();
|
|
113
|
+
return { ok: true, token: value };
|
|
114
|
+
}
|
|
115
|
+
catch (err) {
|
|
116
|
+
return {
|
|
117
|
+
ok: false,
|
|
118
|
+
insecure: false,
|
|
119
|
+
error: `credential_file unreadable: ${err instanceof Error ? err.message : String(err)}`,
|
|
120
|
+
};
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
export async function postToEndpoint(role, payload, timeoutMs = ENDPOINT_POST_TIMEOUT_MS) {
|
|
124
|
+
const url = role.endpoint?.url;
|
|
125
|
+
if (!url)
|
|
126
|
+
return { ok: false, error: `role "${role.id}" has no endpoint.url` };
|
|
127
|
+
const cred = readEndpointCredential(role.endpoint?.credential_file);
|
|
128
|
+
if (!cred.ok)
|
|
129
|
+
return cred;
|
|
130
|
+
try {
|
|
131
|
+
const res = await fetch(url, {
|
|
132
|
+
method: 'POST',
|
|
133
|
+
headers: {
|
|
134
|
+
'content-type': 'application/json',
|
|
135
|
+
...(cred.token ? { authorization: `Bearer ${cred.token}` } : {}),
|
|
136
|
+
},
|
|
137
|
+
body: JSON.stringify(payload),
|
|
138
|
+
signal: AbortSignal.timeout(timeoutMs),
|
|
139
|
+
});
|
|
140
|
+
// Drain the body so the connection is released.
|
|
141
|
+
await res.text().catch(() => '');
|
|
142
|
+
if (res.status >= 200 && res.status < 300)
|
|
143
|
+
return { ok: true, status: res.status };
|
|
144
|
+
return { ok: false, error: `HTTP ${res.status}` };
|
|
145
|
+
}
|
|
146
|
+
catch (err) {
|
|
147
|
+
return { ok: false, error: err instanceof Error ? err.message : String(err) };
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
export function recordEndpointWait(org, role, messageId) {
|
|
151
|
+
if (!org.endpointWaits)
|
|
152
|
+
org.endpointWaits = [];
|
|
153
|
+
org.endpointWaits.push({
|
|
154
|
+
role: role.id,
|
|
155
|
+
messageId,
|
|
156
|
+
until: Date.now() + (role.endpoint?.timeout_ms ?? DEFAULT_ENDPOINT_WAIT_MS),
|
|
157
|
+
});
|
|
158
|
+
}
|
|
159
|
+
/** A message from `<org>:<endpointRole>` (or `<endpointRole>`) clears that
|
|
160
|
+
* role's oldest wait. */
|
|
161
|
+
export function clearEndpointWait(org, orgName, from) {
|
|
162
|
+
const waits = org.endpointWaits;
|
|
163
|
+
if (!waits?.length)
|
|
164
|
+
return;
|
|
165
|
+
const role = from.startsWith(`${orgName}:`) ? from.slice(orgName.length + 1) : from;
|
|
166
|
+
const idx = waits.findIndex((w) => w.role === role);
|
|
167
|
+
if (idx !== -1)
|
|
168
|
+
waits.splice(idx, 1);
|
|
169
|
+
}
|
|
170
|
+
/** True while any endpoint wait is unexpired (expired ones are pruned). */
|
|
171
|
+
export function hasActiveEndpointWait(org, now = Date.now()) {
|
|
172
|
+
if (!org.endpointWaits?.length)
|
|
173
|
+
return false;
|
|
174
|
+
org.endpointWaits = org.endpointWaits.filter((w) => w.until > now);
|
|
175
|
+
return org.endpointWaits.length > 0;
|
|
176
|
+
}
|
|
177
|
+
const retryStates = new WeakMap();
|
|
178
|
+
function stateFor(daemon, org) {
|
|
179
|
+
let byOrg = retryStates.get(daemon);
|
|
180
|
+
if (!byOrg) {
|
|
181
|
+
byOrg = new Map();
|
|
182
|
+
retryStates.set(daemon, byOrg);
|
|
183
|
+
}
|
|
184
|
+
let st = byOrg.get(org);
|
|
185
|
+
if (!st) {
|
|
186
|
+
st = { timers: new Set(), scheduled: new Set(), insecureReported: new Set() };
|
|
187
|
+
byOrg.set(org, st);
|
|
188
|
+
}
|
|
189
|
+
return st;
|
|
190
|
+
}
|
|
191
|
+
function toQualified(orgName, roleId) {
|
|
192
|
+
return `${orgName}:${roleId}`;
|
|
193
|
+
}
|
|
194
|
+
/** One POST attempt; on success emits the delivery event(s) and records the
|
|
195
|
+
* watchdog wait; on an insecure credential emits the audit event. */
|
|
196
|
+
async function attempt(daemon, orgName, org, role, msg, emitTo, eventTo) {
|
|
197
|
+
const result = await postToEndpoint(role, {
|
|
198
|
+
orgName,
|
|
199
|
+
run: org.run,
|
|
200
|
+
from: msg.from,
|
|
201
|
+
to: toQualified(orgName, role.id),
|
|
202
|
+
subject: msg.subject,
|
|
203
|
+
body: msg.body,
|
|
204
|
+
messageId: msg.messageId,
|
|
205
|
+
}, daemon.opts.endpointPostTimeoutMs);
|
|
206
|
+
if (result.ok) {
|
|
207
|
+
const cross = msg.from.includes(':') && !msg.from.startsWith(`${orgName}:`);
|
|
208
|
+
for (const target of emitTo) {
|
|
209
|
+
target.bus.emit({
|
|
210
|
+
type: cross ? 'xorg' : 'message',
|
|
211
|
+
from: msg.from,
|
|
212
|
+
to: eventTo,
|
|
213
|
+
subject: msg.subject,
|
|
214
|
+
msg: msg.body,
|
|
215
|
+
data: { messageId: msg.messageId, endpoint: true },
|
|
216
|
+
});
|
|
217
|
+
}
|
|
218
|
+
recordEndpointWait(org, role, msg.messageId);
|
|
219
|
+
return result;
|
|
220
|
+
}
|
|
221
|
+
if (result.insecure) {
|
|
222
|
+
const st = stateFor(daemon, orgName);
|
|
223
|
+
if (!st.insecureReported.has(msg.messageId)) {
|
|
224
|
+
st.insecureReported.add(msg.messageId);
|
|
225
|
+
org.bus.emit({
|
|
226
|
+
type: 'audit',
|
|
227
|
+
from: role.id,
|
|
228
|
+
reason: 'endpoint-credential-insecure',
|
|
229
|
+
msg: `endpoint role "${role.id}": ${result.error} — not delivering, message queued`,
|
|
230
|
+
data: { role: role.id, messageId: msg.messageId, error: result.error },
|
|
231
|
+
});
|
|
232
|
+
}
|
|
233
|
+
}
|
|
234
|
+
return result;
|
|
235
|
+
}
|
|
236
|
+
/** deliver()/receiveRemote() leg for a target that is an endpoint role. */
|
|
237
|
+
export async function deliverToEndpoint(daemon, args) {
|
|
238
|
+
const { orgName, org, role, messageId } = args;
|
|
239
|
+
const to = toQualified(orgName, role.id);
|
|
240
|
+
const emitTo = args.src && args.src !== org ? [args.src, org] : [org];
|
|
241
|
+
const result = await attempt(daemon, orgName, org, role, { from: args.from, subject: args.subject, body: args.body, messageId }, emitTo, args.eventTo ?? to);
|
|
242
|
+
if (result.ok)
|
|
243
|
+
return `delivered to ${to} (endpoint)`;
|
|
244
|
+
const queued = queueMessage(daemon.root, orgName, {
|
|
245
|
+
fromQualified: args.from,
|
|
246
|
+
toRole: role.id,
|
|
247
|
+
subject: args.subject,
|
|
248
|
+
body: args.body,
|
|
249
|
+
ts: Date.now(),
|
|
250
|
+
messageId,
|
|
251
|
+
endpoint: true,
|
|
252
|
+
});
|
|
253
|
+
if (!queued)
|
|
254
|
+
return `ERROR: could not queue message for ${to} (disk full or permissions)`;
|
|
255
|
+
if (result.insecure)
|
|
256
|
+
return `queued for ${to} (endpoint credential insecure: ${result.error} — not delivered)`;
|
|
257
|
+
scheduleEndpointRetries(daemon, orgName, messageId, role.id);
|
|
258
|
+
return `queued for ${to} (endpoint unreachable: ${result.error} — retrying)`;
|
|
259
|
+
}
|
|
260
|
+
/** Take matching queued endpoint entries and POST them; failures are
|
|
261
|
+
* re-queued. Returns the last error per messageId that stayed queued. */
|
|
262
|
+
export async function retryQueuedEndpoints(daemon, orgName, predicate = () => true) {
|
|
263
|
+
const delivered = [];
|
|
264
|
+
const failed = new Map();
|
|
265
|
+
const org = daemon.orgs.get(orgName);
|
|
266
|
+
if (!org)
|
|
267
|
+
return { delivered, failed };
|
|
268
|
+
const isTarget = (m) => !!findEndpointRole(org.def, m.toRole) && predicate(m);
|
|
269
|
+
if (!peekInbox(daemon.root, orgName).some(isTarget))
|
|
270
|
+
return { delivered, failed };
|
|
271
|
+
const taken = takeQueued(daemon.root, orgName, isTarget);
|
|
272
|
+
for (const m of taken) {
|
|
273
|
+
const role = findEndpointRole(org.def, m.toRole);
|
|
274
|
+
const messageId = m.messageId ?? newMessageId();
|
|
275
|
+
const result = role
|
|
276
|
+
? await attempt(daemon, orgName, org, role, { from: m.fromQualified, subject: m.subject, body: m.body, messageId }, [org], toQualified(orgName, m.toRole))
|
|
277
|
+
: { ok: false, error: 'role is no longer an endpoint role' };
|
|
278
|
+
if (result.ok) {
|
|
279
|
+
delivered.push(messageId);
|
|
280
|
+
}
|
|
281
|
+
else {
|
|
282
|
+
failed.set(messageId, result.error);
|
|
283
|
+
queueMessage(daemon.root, orgName, { ...m, messageId, endpoint: true });
|
|
284
|
+
}
|
|
285
|
+
}
|
|
286
|
+
return { delivered, failed };
|
|
287
|
+
}
|
|
288
|
+
/** 1 s / 5 s / 15 s retries for one queued message; after the last failure
|
|
289
|
+
* emit `endpoint-unreachable` and leave it queued for the periodic sweep. */
|
|
290
|
+
export function scheduleEndpointRetries(daemon, orgName, messageId, roleId) {
|
|
291
|
+
const st = stateFor(daemon, orgName);
|
|
292
|
+
if (st.scheduled.has(messageId))
|
|
293
|
+
return;
|
|
294
|
+
st.scheduled.add(messageId);
|
|
295
|
+
const delays = daemon.opts.endpointRetryMs ?? ENDPOINT_RETRY_MS;
|
|
296
|
+
const step = (i) => {
|
|
297
|
+
if (i >= delays.length)
|
|
298
|
+
return;
|
|
299
|
+
const t = setTimeout(async () => {
|
|
300
|
+
st.timers.delete(t);
|
|
301
|
+
if (!daemon.orgs.has(orgName)) {
|
|
302
|
+
st.scheduled.delete(messageId);
|
|
303
|
+
return;
|
|
304
|
+
}
|
|
305
|
+
const { delivered, failed } = await retryQueuedEndpoints(daemon, orgName, (m) => m.messageId === messageId);
|
|
306
|
+
if (delivered.includes(messageId) || !failed.has(messageId)) {
|
|
307
|
+
// Delivered, or no longer queued (another path took it).
|
|
308
|
+
st.scheduled.delete(messageId);
|
|
309
|
+
return;
|
|
310
|
+
}
|
|
311
|
+
if (i === delays.length - 1) {
|
|
312
|
+
st.scheduled.delete(messageId);
|
|
313
|
+
const error = failed.get(messageId);
|
|
314
|
+
daemon.orgs.get(orgName)?.bus.emit({
|
|
315
|
+
type: 'audit',
|
|
316
|
+
from: roleId,
|
|
317
|
+
reason: 'endpoint-unreachable',
|
|
318
|
+
msg: `endpoint role "${roleId}" unreachable after ${delays.length} retries (${error}) — message stays queued`,
|
|
319
|
+
data: { role: roleId, messageId, error },
|
|
320
|
+
});
|
|
321
|
+
return;
|
|
322
|
+
}
|
|
323
|
+
step(i + 1);
|
|
324
|
+
}, delays[i]);
|
|
325
|
+
t.unref?.();
|
|
326
|
+
st.timers.add(t);
|
|
327
|
+
};
|
|
328
|
+
step(0);
|
|
329
|
+
}
|
|
330
|
+
/** Periodic (60 s) re-attempt of queued endpoint entries while `org` runs.
|
|
331
|
+
* Entries still on their 1/5/15 s schedule are skipped. */
|
|
332
|
+
export function startEndpointRetryLoop(daemon, orgName) {
|
|
333
|
+
const st = stateFor(daemon, orgName);
|
|
334
|
+
if (st.periodic)
|
|
335
|
+
clearInterval(st.periodic);
|
|
336
|
+
st.periodic = setInterval(async () => {
|
|
337
|
+
if (st.sweeping || !daemon.orgs.has(orgName))
|
|
338
|
+
return;
|
|
339
|
+
st.sweeping = true;
|
|
340
|
+
try {
|
|
341
|
+
await retryQueuedEndpoints(daemon, orgName, (m) => !m.messageId || !st.scheduled.has(m.messageId));
|
|
342
|
+
}
|
|
343
|
+
catch {
|
|
344
|
+
/* best-effort — next sweep retries */
|
|
345
|
+
}
|
|
346
|
+
finally {
|
|
347
|
+
st.sweeping = false;
|
|
348
|
+
}
|
|
349
|
+
}, daemon.opts.endpointPeriodicRetryMs ?? ENDPOINT_PERIODIC_RETRY_MS);
|
|
350
|
+
st.periodic.unref?.();
|
|
351
|
+
}
|
|
352
|
+
/** Stop every retry timer for `org` (stopOrg). Queued entries stay queued. */
|
|
353
|
+
export function stopEndpointRetries(daemon, orgName) {
|
|
354
|
+
const byOrg = retryStates.get(daemon);
|
|
355
|
+
const st = byOrg?.get(orgName);
|
|
356
|
+
if (!st)
|
|
357
|
+
return;
|
|
358
|
+
if (st.periodic)
|
|
359
|
+
clearInterval(st.periodic);
|
|
360
|
+
for (const t of st.timers)
|
|
361
|
+
clearTimeout(t);
|
|
362
|
+
byOrg?.delete(orgName);
|
|
363
|
+
}
|
|
364
|
+
//# sourceMappingURL=endpoint-roles.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"endpoint-roles.js","sourceRoot":"","sources":["../../../src/orgrt/endpoint-roles.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,9 +1,16 @@
|
|
|
1
|
+
/** M3: id of one logical message — `msg-<ms>-<8 hex>` — generated once at the
|
|
2
|
+
* message's origin and carried on every bus copy and queue entry. */
|
|
3
|
+
export declare function newMessageId(): string;
|
|
1
4
|
export interface QueuedMessage {
|
|
2
5
|
fromQualified: string;
|
|
3
6
|
toRole: string;
|
|
4
7
|
subject: string;
|
|
5
8
|
body: string;
|
|
6
9
|
ts: number;
|
|
10
|
+
/** M3: origin message id, re-used when the queue is drained. */
|
|
11
|
+
messageId?: string;
|
|
12
|
+
/** M2: queued for an endpoint role (retried by POST, never drained into a mailbox). */
|
|
13
|
+
endpoint?: boolean;
|
|
7
14
|
/** Structured handoff context (rich metadata for role transitions) */
|
|
8
15
|
context?: {
|
|
9
16
|
summary?: string;
|
|
@@ -15,5 +22,16 @@ export interface QueuedMessage {
|
|
|
15
22
|
}
|
|
16
23
|
export declare function queueMessage(root: string, orgName: string, msg: QueuedMessage): boolean;
|
|
17
24
|
export declare function drainInbox(root: string, orgName: string): QueuedMessage[];
|
|
25
|
+
/** Non-destructive read of the queue (pending file plus an interrupted drain). */
|
|
26
|
+
export declare function peekInbox(root: string, orgName: string): QueuedMessage[];
|
|
27
|
+
/** Remove and return the queued messages matching `predicate`; every other
|
|
28
|
+
* message is put back. M2 uses it to retry endpoint entries while leaving
|
|
29
|
+
* other queued messages in place.
|
|
30
|
+
*
|
|
31
|
+
* The snapshot is renamed to `.draining` (which drainInbox recovers after a
|
|
32
|
+
* crash) and only unlinked AFTER the untouched messages were appended back,
|
|
33
|
+
* so a crash can at worst duplicate a message, never lose one — and a
|
|
34
|
+
* concurrent peekInbox never sees the untouched messages disappear. */
|
|
35
|
+
export declare function takeQueued(root: string, orgName: string, predicate: (m: QueuedMessage) => boolean): QueuedMessage[];
|
|
18
36
|
export declare function inboxCount(root: string, orgName: string): number;
|
|
19
37
|
//# sourceMappingURL=inbox.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"inbox.d.ts","sourceRoot":"","sources":["../../../src/orgrt/inbox.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"inbox.d.ts","sourceRoot":"","sources":["../../../src/orgrt/inbox.ts"],"names":[],"mappings":"AAgBA;sEACsE;AACtE,wBAAgB,YAAY,IAAI,MAAM,CAErC;AAED,MAAM,WAAW,aAAa;IAC5B,aAAa,EAAE,MAAM,CAAC;IACtB,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,EAAE,EAAE,MAAM,CAAC;IACX,gEAAgE;IAChE,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,uFAAuF;IACvF,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,sEAAsE;IACtE,OAAO,CAAC,EAAE;QACR,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;QACxB,aAAa,CAAC,EAAE,MAAM,EAAE,CAAC;QACzB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;KACpC,CAAC;CACH;AAMD,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,aAAa,GAAG,OAAO,CAevF;AAeD,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,aAAa,EAAE,CAmDzE;AAED,kFAAkF;AAClF,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,aAAa,EAAE,CAWxE;AAED;;;;;;;wEAOwE;AACxE,wBAAgB,UAAU,CACxB,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,MAAM,EACf,SAAS,EAAE,CAAC,CAAC,EAAE,aAAa,KAAK,OAAO,GACvC,aAAa,EAAE,CAoCjB;AAED,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,CAMhE"}
|
package/dist/src/orgrt/inbox.js
CHANGED
|
@@ -1,9 +1,15 @@
|
|
|
1
1
|
// packages/@monomind/cli/src/orgrt/inbox.ts
|
|
2
2
|
// Persistent message queue for offline orgs. Messages that can't be delivered
|
|
3
3
|
// (target org not running) are spooled here and drained when the org starts.
|
|
4
|
+
import { randomBytes } from 'node:crypto';
|
|
4
5
|
import { appendFileSync, existsSync, mkdirSync, readFileSync, renameSync, unlinkSync, } from 'node:fs';
|
|
5
6
|
import { join } from 'node:path';
|
|
6
7
|
import { ORG_DIR } from './types.js';
|
|
8
|
+
/** M3: id of one logical message — `msg-<ms>-<8 hex>` — generated once at the
|
|
9
|
+
* message's origin and carried on every bus copy and queue entry. */
|
|
10
|
+
export function newMessageId() {
|
|
11
|
+
return `msg-${Date.now()}-${randomBytes(4).toString('hex')}`;
|
|
12
|
+
}
|
|
7
13
|
function inboxPath(root, orgName) {
|
|
8
14
|
return join(root, ORG_DIR, orgName, 'inbox.jsonl');
|
|
9
15
|
}
|
|
@@ -90,6 +96,73 @@ export function drainInbox(root, orgName) {
|
|
|
90
96
|
}
|
|
91
97
|
return msgs;
|
|
92
98
|
}
|
|
99
|
+
/** Non-destructive read of the queue (pending file plus an interrupted drain). */
|
|
100
|
+
export function peekInbox(root, orgName) {
|
|
101
|
+
const path = inboxPath(root, orgName);
|
|
102
|
+
const msgs = [];
|
|
103
|
+
for (const f of [`${path}.draining`, path]) {
|
|
104
|
+
try {
|
|
105
|
+
if (existsSync(f))
|
|
106
|
+
msgs.push(...parseLines(readFileSync(f, 'utf8')));
|
|
107
|
+
}
|
|
108
|
+
catch {
|
|
109
|
+
/* unreadable — treat as empty */
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
return msgs;
|
|
113
|
+
}
|
|
114
|
+
/** Remove and return the queued messages matching `predicate`; every other
|
|
115
|
+
* message is put back. M2 uses it to retry endpoint entries while leaving
|
|
116
|
+
* other queued messages in place.
|
|
117
|
+
*
|
|
118
|
+
* The snapshot is renamed to `.draining` (which drainInbox recovers after a
|
|
119
|
+
* crash) and only unlinked AFTER the untouched messages were appended back,
|
|
120
|
+
* so a crash can at worst duplicate a message, never lose one — and a
|
|
121
|
+
* concurrent peekInbox never sees the untouched messages disappear. */
|
|
122
|
+
export function takeQueued(root, orgName, predicate) {
|
|
123
|
+
const path = inboxPath(root, orgName);
|
|
124
|
+
const draining = `${path}.draining`;
|
|
125
|
+
if (existsSync(draining) || !existsSync(path)) {
|
|
126
|
+
// An interrupted drain is pending recovery (or nothing is queued) — use
|
|
127
|
+
// the recovering drain instead of renaming over it.
|
|
128
|
+
const all = drainInbox(root, orgName);
|
|
129
|
+
const taken = [];
|
|
130
|
+
for (const m of all) {
|
|
131
|
+
if (predicate(m))
|
|
132
|
+
taken.push(m);
|
|
133
|
+
else
|
|
134
|
+
queueMessage(root, orgName, m);
|
|
135
|
+
}
|
|
136
|
+
return taken;
|
|
137
|
+
}
|
|
138
|
+
try {
|
|
139
|
+
renameSync(path, draining);
|
|
140
|
+
}
|
|
141
|
+
catch {
|
|
142
|
+
return [];
|
|
143
|
+
}
|
|
144
|
+
let msgs;
|
|
145
|
+
try {
|
|
146
|
+
msgs = parseLines(readFileSync(draining, 'utf8'));
|
|
147
|
+
}
|
|
148
|
+
catch {
|
|
149
|
+
return []; // leave .draining for the next drain to recover
|
|
150
|
+
}
|
|
151
|
+
const taken = [];
|
|
152
|
+
for (const m of msgs) {
|
|
153
|
+
if (predicate(m))
|
|
154
|
+
taken.push(m);
|
|
155
|
+
else if (!queueMessage(root, orgName, m))
|
|
156
|
+
return []; // keep .draining; nothing lost
|
|
157
|
+
}
|
|
158
|
+
try {
|
|
159
|
+
unlinkSync(draining);
|
|
160
|
+
}
|
|
161
|
+
catch {
|
|
162
|
+
/* recovered (possibly duplicated) by the next drain */
|
|
163
|
+
}
|
|
164
|
+
return taken;
|
|
165
|
+
}
|
|
93
166
|
export function inboxCount(root, orgName) {
|
|
94
167
|
const path = inboxPath(root, orgName);
|
|
95
168
|
if (!existsSync(path))
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"inbox.js","sourceRoot":"","sources":["../../../src/orgrt/inbox.ts"],"names":[],"mappings":"AAAA,4CAA4C;AAC5C,8EAA8E;AAC9E,6EAA6E;
|
|
1
|
+
{"version":3,"file":"inbox.js","sourceRoot":"","sources":["../../../src/orgrt/inbox.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"migrate.d.ts","sourceRoot":"","sources":["../../../src/orgrt/migrate.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"migrate.d.ts","sourceRoot":"","sources":["../../../src/orgrt/migrate.ts"],"names":[],"mappings":"AASA,OAAO,EAAE,KAAK,MAAM,EAAgB,MAAM,YAAY,CAAC;AAsBvD;;;;;yBAKyB;AACzB,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,IAAI,CAAC,MAAM,EAAE,OAAO,GAAG,UAAU,CAAC,GAAG,MAAM,EAAE,CAqBnF;AAED,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG;IAC9D,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC7B,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,KAAK,EAAE,MAAM,EAAE,CAAC;CACjB,CAuDA;AAED;;;;;;+CAM+C;AAC/C,wBAAgB,cAAc,CAC5B,OAAO,EAAE,MAAM,EACf,UAAU,EAAE,MAAM,GACjB;IACD,MAAM,EAAE,UAAU,GAAG,YAAY,CAAC;IAClC,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,KAAK,EAAE,MAAM,EAAE,CAAC;CACjB,CAoBA"}
|
|
@@ -5,6 +5,7 @@
|
|
|
5
5
|
* that only does the name-validation / isOrgRunning guard and delegates here. */
|
|
6
6
|
import { existsSync, readFileSync } from 'node:fs';
|
|
7
7
|
import { writeJsonFileAtomic } from '../utils/json-file.js';
|
|
8
|
+
import { endpointStructureErrors } from './endpoint-roles.js';
|
|
8
9
|
import { parseSchedule } from './scheduler.js';
|
|
9
10
|
import { OrgDefSchema } from './types.js';
|
|
10
11
|
const V1_TOP_LEVEL_KEYS = [
|
|
@@ -51,6 +52,8 @@ export function checkOrgStructure(def) {
|
|
|
51
52
|
}
|
|
52
53
|
if (def.schedule != null && parseSchedule(def.schedule) === null)
|
|
53
54
|
errors.push(`schedule "${def.schedule}" is not parseable — use "<N>s", "<N>m", or "<N>h"`);
|
|
55
|
+
// M2: endpoint roles are automations, not agents.
|
|
56
|
+
errors.push(...endpointStructureErrors(def));
|
|
54
57
|
return errors;
|
|
55
58
|
}
|
|
56
59
|
export function migrateOrgConfig(raw) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"migrate.js","sourceRoot":"","sources":["../../../src/orgrt/migrate.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"migrate.js","sourceRoot":"","sources":["../../../src/orgrt/migrate.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"opencode-runner.d.ts","sourceRoot":"","sources":["../../../src/orgrt/opencode-runner.ts"],"names":[],"mappings":"AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAmEG;AAEH,OAAO,EACL,KAAK,YAAY,EACjB,KAAK,YAAY,EACjB,KAAK,WAAW,EAEjB,MAAM,mBAAmB,CAAC;AAoB3B,qBAAa,mBAAoB,YAAW,WAAW;IACzC,OAAO,CAAC,WAAW,CAAC;IAAhC,YAAoB,WAAW,CAAC,EAAE,MAAM,YAAA,EAAI;IAErC,GAAG,CAAC,IAAI,EAAE,YAAY,GAAG,aAAa,CAAC,YAAY,CAAC,
|
|
1
|
+
{"version":3,"file":"opencode-runner.d.ts","sourceRoot":"","sources":["../../../src/orgrt/opencode-runner.ts"],"names":[],"mappings":"AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAmEG;AAEH,OAAO,EACL,KAAK,YAAY,EACjB,KAAK,YAAY,EACjB,KAAK,WAAW,EAEjB,MAAM,mBAAmB,CAAC;AAoB3B,qBAAa,mBAAoB,YAAW,WAAW;IACzC,OAAO,CAAC,WAAW,CAAC;IAAhC,YAAoB,WAAW,CAAC,EAAE,MAAM,YAAA,EAAI;IAErC,GAAG,CAAC,IAAI,EAAE,YAAY,GAAG,aAAa,CAAC,YAAY,CAAC,CAqU1D;CACF"}
|
|
@@ -311,7 +311,8 @@ export class OpencodeAgentRunner {
|
|
|
311
311
|
// "only text parts matter" scope.
|
|
312
312
|
}
|
|
313
313
|
const tokens = finalTokens ?? {};
|
|
314
|
-
turnInputTokens +=
|
|
314
|
+
turnInputTokens +=
|
|
315
|
+
(tokens.input ?? 0) + (tokens.cache?.read ?? 0) + (tokens.cache?.write ?? 0);
|
|
315
316
|
turnOutputTokens += tokens.output ?? 0;
|
|
316
317
|
turnCost += finalCost ?? 0;
|
|
317
318
|
// Final reconciliation, one texts[] entry per text part — matching
|