instar 1.3.34 → 1.3.35

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.
@@ -153,4 +153,81 @@ export declare class CycleDetector {
153
153
  mark(key: string, now: number): void;
154
154
  private evict;
155
155
  }
156
+ export interface SendAgentMessageInput {
157
+ fromAgent: string;
158
+ toAgent: string;
159
+ /** A role the caller is allowed to send (see allowedRoles). */
160
+ role: string;
161
+ /** Recipient bot's topic to write into. */
162
+ toTopicId: number;
163
+ /** Prompt content. Markdown is fine — the body is sent verbatim under the marker. */
164
+ message: string;
165
+ /** Optional: an existing stable id for this send (else a UUID is minted as a2aId). */
166
+ id?: string;
167
+ /** Optional: correlation id (for a reply, set to the prompt's id). Defaults to id. */
168
+ correlationId?: string;
169
+ }
170
+ export interface SendAgentMessageDeps {
171
+ /** Adapter-specific send. Must return a `messageId` on success. */
172
+ send: (toTopicId: number, text: string) => Promise<{
173
+ ok: true;
174
+ messageId: string;
175
+ } | {
176
+ ok: false;
177
+ error: unknown;
178
+ }>;
179
+ /** Append one JSONL row to the sent-audit ledger (caller chooses path/storage). */
180
+ appendAudit: (row: SendAuditRow) => void;
181
+ /** Wall-clock now (ms) — injected. */
182
+ now: () => number;
183
+ /** UUID minter — injected so tests are deterministic. */
184
+ mintId: () => string;
185
+ /** Allowed-outbound-roles for THIS caller (constructor-time list). The role-handler
186
+ * cannot send any role not in this list — refused at runtime, no marker formed. */
187
+ allowedRoles: ReadonlySet<string>;
188
+ /** The bot token to scrub from any error message before it leaves this module
189
+ * (round-2 adversarial F5: Telegram 401s sometimes echo the token). */
190
+ botToken?: string;
191
+ /** Telegram identifiers for the audit row + future cycle-detection wiring. */
192
+ fromBotId: string;
193
+ toBotId: string;
194
+ }
195
+ export interface SendAuditRow {
196
+ localTs: string;
197
+ direction: 'sent';
198
+ fromAgent: string;
199
+ toAgent: string;
200
+ role: string;
201
+ id: string;
202
+ corr: string;
203
+ ts: number;
204
+ telegramFromBotId: string;
205
+ telegramToBotId: string;
206
+ topicId: number;
207
+ result: 'ok' | 'failed' | 'role-refused';
208
+ sentMessageId?: string;
209
+ reason?: string;
210
+ }
211
+ export interface SendAgentMessageResult {
212
+ ok: boolean;
213
+ a2aId?: string;
214
+ sentMessageId?: string;
215
+ reason?: string;
216
+ }
217
+ /**
218
+ * Send an agent-to-agent Telegram message. Formats the marker, calls the injected
219
+ * adapter, writes the sent-audit row (always — even on refusal/failure), and scrubs the
220
+ * bot token from any error surface before returning.
221
+ *
222
+ * Anti-loop invariant (spec §Fix 2a anti-loop #1): refuses any `role` not in the caller's
223
+ * `allowedRoles` set at runtime — no marker is formed, no send is attempted, an audit row
224
+ * is written with `result: 'role-refused'`. A role-handler that consumes role X cannot
225
+ * therefore send role X (the import-surface lint is a backup; this is the runtime guard).
226
+ */
227
+ export declare function sendAgentMessage(input: SendAgentMessageInput, deps: SendAgentMessageDeps): Promise<SendAgentMessageResult>;
228
+ /** Scrub the bot token from a string so it can't leak through logs / audit / DegradationReporter
229
+ * (round-2 adversarial F5: Telegram 401 response bodies sometimes echo the token). The
230
+ * token is fixed-length and high-entropy enough that a literal-string replace is enough;
231
+ * we strip the trailing path segment defensively in case only part is echoed. */
232
+ export declare function scrubToken(s: string, token?: string): string;
156
233
  //# sourceMappingURL=AgentTelegramComms.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"AgentTelegramComms.d.ts","sourceRoot":"","sources":["../../src/messaging/AgentTelegramComms.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"AgentTelegramComms.d.ts","sourceRoot":"","sources":["../../src/messaging/AgentTelegramComms.ts"],"names":[],"mappings":"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"}
@@ -167,4 +167,112 @@ export class CycleDetector {
167
167
  }
168
168
  }
169
169
  }
170
+ /**
171
+ * Send an agent-to-agent Telegram message. Formats the marker, calls the injected
172
+ * adapter, writes the sent-audit row (always — even on refusal/failure), and scrubs the
173
+ * bot token from any error surface before returning.
174
+ *
175
+ * Anti-loop invariant (spec §Fix 2a anti-loop #1): refuses any `role` not in the caller's
176
+ * `allowedRoles` set at runtime — no marker is formed, no send is attempted, an audit row
177
+ * is written with `result: 'role-refused'`. A role-handler that consumes role X cannot
178
+ * therefore send role X (the import-surface lint is a backup; this is the runtime guard).
179
+ */
180
+ export async function sendAgentMessage(input, deps) {
181
+ const now = deps.now();
182
+ const a2aId = input.id ?? deps.mintId();
183
+ const corr = input.correlationId ?? a2aId;
184
+ // Runtime anti-loop guard (spec §Fix 2a anti-loop #1).
185
+ if (!deps.allowedRoles.has(input.role)) {
186
+ deps.appendAudit({
187
+ localTs: new Date(now).toISOString(),
188
+ direction: 'sent',
189
+ fromAgent: input.fromAgent,
190
+ toAgent: input.toAgent,
191
+ role: input.role,
192
+ id: a2aId,
193
+ corr,
194
+ ts: now,
195
+ telegramFromBotId: deps.fromBotId,
196
+ telegramToBotId: deps.toBotId,
197
+ topicId: input.toTopicId,
198
+ result: 'role-refused',
199
+ reason: `role "${input.role}" not in caller's allowedRoles`,
200
+ });
201
+ return { ok: false, a2aId, reason: `role "${input.role}" not in caller's allowedRoles` };
202
+ }
203
+ let text;
204
+ try {
205
+ text = formatMarker({ from: input.fromAgent, to: input.toAgent, role: input.role, id: a2aId, corr, ts: now }, input.message);
206
+ }
207
+ catch (err) {
208
+ const reason = scrubToken(err instanceof Error ? err.message : String(err), deps.botToken);
209
+ deps.appendAudit({
210
+ localTs: new Date(now).toISOString(),
211
+ direction: 'sent',
212
+ fromAgent: input.fromAgent,
213
+ toAgent: input.toAgent,
214
+ role: input.role,
215
+ id: a2aId,
216
+ corr,
217
+ ts: now,
218
+ telegramFromBotId: deps.fromBotId,
219
+ telegramToBotId: deps.toBotId,
220
+ topicId: input.toTopicId,
221
+ result: 'failed',
222
+ reason: `format: ${reason}`,
223
+ });
224
+ return { ok: false, a2aId, reason: `format: ${reason}` };
225
+ }
226
+ const result = await deps.send(input.toTopicId, text);
227
+ const row = {
228
+ localTs: new Date(now).toISOString(),
229
+ direction: 'sent',
230
+ fromAgent: input.fromAgent,
231
+ toAgent: input.toAgent,
232
+ role: input.role,
233
+ id: a2aId,
234
+ corr,
235
+ ts: now,
236
+ telegramFromBotId: deps.fromBotId,
237
+ telegramToBotId: deps.toBotId,
238
+ topicId: input.toTopicId,
239
+ result: result.ok ? 'ok' : 'failed',
240
+ sentMessageId: result.ok ? result.messageId : undefined,
241
+ reason: result.ok ? undefined : scrubToken(stringifyError(result.error), deps.botToken),
242
+ };
243
+ deps.appendAudit(row);
244
+ return result.ok
245
+ ? { ok: true, a2aId, sentMessageId: result.messageId }
246
+ : { ok: false, a2aId, reason: row.reason };
247
+ }
248
+ /** Stringify an unknown error without crashing on weird shapes. */
249
+ function stringifyError(err) {
250
+ if (err instanceof Error)
251
+ return err.message;
252
+ if (typeof err === 'string')
253
+ return err;
254
+ try {
255
+ return JSON.stringify(err);
256
+ }
257
+ catch {
258
+ return '[unstringifiable error]';
259
+ }
260
+ }
261
+ /** Scrub the bot token from a string so it can't leak through logs / audit / DegradationReporter
262
+ * (round-2 adversarial F5: Telegram 401 response bodies sometimes echo the token). The
263
+ * token is fixed-length and high-entropy enough that a literal-string replace is enough;
264
+ * we strip the trailing path segment defensively in case only part is echoed. */
265
+ export function scrubToken(s, token) {
266
+ if (!token)
267
+ return s;
268
+ let out = s.split(token).join('[REDACTED-BOT-TOKEN]');
269
+ // Telegram tokens are <bot-id>:<secret>. If only the secret appears, scrub it too.
270
+ const colonIdx = token.indexOf(':');
271
+ if (colonIdx > 0) {
272
+ const secret = token.slice(colonIdx + 1);
273
+ if (secret.length >= 16)
274
+ out = out.split(secret).join('[REDACTED-BOT-TOKEN]');
275
+ }
276
+ return out;
277
+ }
170
278
  //# sourceMappingURL=AgentTelegramComms.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"AgentTelegramComms.js","sourceRoot":"","sources":["../../src/messaging/AgentTelegramComms.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"AgentTelegramComms.js","sourceRoot":"","sources":["../../src/messaging/AgentTelegramComms.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AAEH,wFAAwF;AACxF,MAAM,CAAC,MAAM,WAAW,GAAG,CAAC,CAAC;AAE7B;6EAC6E;AAC7E,MAAM,KAAK,GAAG,kBAAkB,CAAC;AAEjC;;;;;;;GAOG;AACH,MAAM,SAAS,GAAG,IAAI,MAAM,CAC1B,iBAAiB,KAAK,SAAS,KAAK,WAAW,KAAK,SAAS,KAAK,WAAW,KAAK,+CAA+C,CAClI,CAAC;AAEF;;oEAEoE;AACpE,MAAM,gBAAgB,GAAG,SAAS,CAAC;AAsCnC,8EAA8E;AAC9E,MAAM,UAAU,YAAY,CAAC,MAAqB,EAAE,IAAY;IAC9D,KAAK,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC;QAClC,IAAI,EAAE,MAAM,CAAC,IAAI;QACjB,EAAE,EAAE,MAAM,CAAC,EAAE;QACb,IAAI,EAAE,MAAM,CAAC,IAAI;QACjB,EAAE,EAAE,MAAM,CAAC,EAAE;QACb,IAAI,EAAE,MAAM,CAAC,IAAI;KAClB,CAAC,EAAE,CAAC;QACH,IAAI,CAAC,IAAI,MAAM,CAAC,IAAI,KAAK,GAAG,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;YAC9C,MAAM,IAAI,KAAK,CAAC,2CAA2C,CAAC,YAAY,CAAC,8BAA8B,KAAK,EAAE,CAAC,CAAC;QAClH,CAAC;IACH,CAAC;IACD,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,EAAE,CAAC,IAAI,MAAM,CAAC,EAAE,IAAI,CAAC,EAAE,CAAC;QACnD,MAAM,IAAI,KAAK,CAAC,uEAAuE,MAAM,CAAC,EAAE,EAAE,CAAC,CAAC;IACtG,CAAC;IACD,OAAO,CACL,aAAa,MAAM,CAAC,IAAI,OAAO,MAAM,CAAC,EAAE,SAAS,MAAM,CAAC,IAAI,OAAO,MAAM,CAAC,EAAE,GAAG;QAC/E,QAAQ,MAAM,CAAC,IAAI,OAAO,MAAM,CAAC,EAAE,MAAM,WAAW,QAAQ,IAAI,EAAE,CACnE,CAAC;AACJ,CAAC;AAED,uEAAuE;AACvE,MAAM,UAAU,WAAW,CAAC,GAAW;IACrC,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;QAC3D,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,WAAW,EAAE,CAAC;IAC1C,CAAC;IACD,MAAM,CAAC,GAAG,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAC9B,IAAI,CAAC,CAAC,EAAE,CAAC;QACP,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,WAAW,EAAE,MAAM,EAAE,+CAA+C,EAAE,CAAC;IACnG,CAAC;IACD,MAAM,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC;IAC1D,MAAM,EAAE,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;IACzB,MAAM,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC;IACvB,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC;QACrC,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,WAAW,EAAE,MAAM,EAAE,eAAe,KAAK,GAAG,EAAE,CAAC;IAC3E,CAAC;IACD,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;QACnC,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,WAAW,EAAE,MAAM,EAAE,cAAc,IAAI,GAAG,EAAE,CAAC;IACzE,CAAC;IACD,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,GAAG,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,EAAE,IAAI,EAAE,EAAE,CAAC;AACtE,CAAC;AAyDD;;;;;GAKG;AACH,MAAM,UAAU,WAAW,CACzB,GAAoB,EACpB,GAAoB,EACpB,IAAoF;IAEpF,MAAM,MAAM,GAAG,WAAW,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IACpC,IAAI,CAAC,MAAM,CAAC,EAAE,IAAI,MAAM,CAAC,IAAI,KAAK,WAAW;QAAE,OAAO,EAAE,MAAM,EAAE,cAAc,EAAE,CAAC;IACjF,IAAI,CAAC,MAAM,CAAC,EAAE;QAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,wBAAwB,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC;IAEnG,MAAM,GAAG,GAAG,MAAM,CAAC,GAAG,CAAC;IAEvB,uDAAuD;IACvD,IAAI,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,GAAG,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,YAAY,EAAE,CAAC;QAClD,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,8BAA8B,EAAE,GAAG,EAAE,CAAC;IACzE,CAAC;IAED,sEAAsE;IACtE,IAAI,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC,UAAU,EAAE,CAAC;QAC3B,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,kCAAkC,EAAE,GAAG,EAAE,CAAC;IAC7E,CAAC;IAED,uFAAuF;IACvF,yFAAyF;IACzF,2EAA2E;IAC3E,IAAI,CAAC,GAAG,CAAC,WAAW,IAAI,GAAG,CAAC,YAAY,KAAK,SAAS,EAAE,CAAC;QACvD,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,8BAA8B,EAAE,GAAG,EAAE,CAAC;IACzE,CAAC;IAED,uBAAuB;IACvB,IAAI,GAAG,CAAC,EAAE,KAAK,GAAG,CAAC,UAAU,EAAE,CAAC;QAC9B,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,8BAA8B,EAAE,GAAG,EAAE,CAAC;IACzE,CAAC;IAED,yCAAyC;IACzC,MAAM,KAAK,GAAG,GAAG,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IACxC,IAAI,CAAC,KAAK,IAAI,CAAC,GAAG,CAAC,WAAW,KAAK,SAAS,IAAI,KAAK,CAAC,KAAK,KAAK,GAAG,CAAC,WAAW,CAAC,EAAE,CAAC;QACjF,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,sBAAsB,EAAE,GAAG,EAAE,CAAC;IACjE,CAAC;IAED,uEAAuE;IACvE,IAAI,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC;QAC7B,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,wBAAwB,EAAE,GAAG,EAAE,CAAC;IACnE,CAAC;IAED,yEAAyE;IACzE,MAAM,iBAAiB,GAAG,GAAG,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;IAC1D,IAAI,CAAC,iBAAiB,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;QAC1C,iFAAiF;QACjF,iFAAiF;QACjF,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;YAC9B,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,2BAA2B,EAAE,GAAG,EAAE,CAAC;QACtE,CAAC;QACD,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,2CAA2C,EAAE,GAAG,EAAE,CAAC;IACtF,CAAC;IAED,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,EAAE,CAAC;AAClC,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,QAAQ,CAAC,MAMxB;IACC,OAAO,GAAG,MAAM,CAAC,SAAS,IAAI,MAAM,CAAC,OAAO,IAAI,MAAM,CAAC,OAAO,IAAI,MAAM,CAAC,IAAI,IAAI,MAAM,CAAC,IAAI,EAAE,CAAC;AACjG,CAAC;AAED;;;GAGG;AACH,MAAM,OAAO,aAAa;IAEK;IADZ,MAAM,GAAG,IAAI,GAAG,EAAkB,CAAC;IACpD,YAA6B,QAAgB;QAAhB,aAAQ,GAAR,QAAQ,CAAQ;IAAG,CAAC;IAEjD,uEAAuE;IACvE,SAAS,CAAC,GAAW,EAAE,GAAW;QAChC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QAChB,MAAM,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAClC,OAAO,IAAI,KAAK,SAAS,IAAI,GAAG,GAAG,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC;IAC1D,CAAC;IAED,kDAAkD;IAClD,IAAI,CAAC,GAAW,EAAE,GAAW;QAC3B,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;QAC1B,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAClB,CAAC;IAEO,KAAK,CAAC,GAAW;QACvB,KAAK,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;YACjC,IAAI,GAAG,GAAG,CAAC,IAAI,IAAI,CAAC,QAAQ;gBAAE,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;QACtD,CAAC;IACH,CAAC;CACF;AAiED;;;;;;;;;GASG;AACH,MAAM,CAAC,KAAK,UAAU,gBAAgB,CACpC,KAA4B,EAC5B,IAA0B;IAE1B,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IACvB,MAAM,KAAK,GAAG,KAAK,CAAC,EAAE,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;IACxC,MAAM,IAAI,GAAG,KAAK,CAAC,aAAa,IAAI,KAAK,CAAC;IAE1C,uDAAuD;IACvD,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;QACvC,IAAI,CAAC,WAAW,CAAC;YACf,OAAO,EAAE,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC,WAAW,EAAE;YACpC,SAAS,EAAE,MAAM;YACjB,SAAS,EAAE,KAAK,CAAC,SAAS;YAC1B,OAAO,EAAE,KAAK,CAAC,OAAO;YACtB,IAAI,EAAE,KAAK,CAAC,IAAI;YAChB,EAAE,EAAE,KAAK;YACT,IAAI;YACJ,EAAE,EAAE,GAAG;YACP,iBAAiB,EAAE,IAAI,CAAC,SAAS;YACjC,eAAe,EAAE,IAAI,CAAC,OAAO;YAC7B,OAAO,EAAE,KAAK,CAAC,SAAS;YACxB,MAAM,EAAE,cAAc;YACtB,MAAM,EAAE,SAAS,KAAK,CAAC,IAAI,gCAAgC;SAC5D,CAAC,CAAC;QACH,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,SAAS,KAAK,CAAC,IAAI,gCAAgC,EAAE,CAAC;IAC3F,CAAC;IAED,IAAI,IAAY,CAAC;IACjB,IAAI,CAAC;QACH,IAAI,GAAG,YAAY,CACjB,EAAE,IAAI,EAAE,KAAK,CAAC,SAAS,EAAE,EAAE,EAAE,KAAK,CAAC,OAAO,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE,EAAE,GAAG,EAAE,EACxF,KAAK,CAAC,OAAO,CACd,CAAC;IACJ,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,MAAM,GAAG,UAAU,CAAC,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;QAC3F,IAAI,CAAC,WAAW,CAAC;YACf,OAAO,EAAE,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC,WAAW,EAAE;YACpC,SAAS,EAAE,MAAM;YACjB,SAAS,EAAE,KAAK,CAAC,SAAS;YAC1B,OAAO,EAAE,KAAK,CAAC,OAAO;YACtB,IAAI,EAAE,KAAK,CAAC,IAAI;YAChB,EAAE,EAAE,KAAK;YACT,IAAI;YACJ,EAAE,EAAE,GAAG;YACP,iBAAiB,EAAE,IAAI,CAAC,SAAS;YACjC,eAAe,EAAE,IAAI,CAAC,OAAO;YAC7B,OAAO,EAAE,KAAK,CAAC,SAAS;YACxB,MAAM,EAAE,QAAQ;YAChB,MAAM,EAAE,WAAW,MAAM,EAAE;SAC5B,CAAC,CAAC;QACH,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,WAAW,MAAM,EAAE,EAAE,CAAC;IAC3D,CAAC;IAED,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;IACtD,MAAM,GAAG,GAAiB;QACxB,OAAO,EAAE,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC,WAAW,EAAE;QACpC,SAAS,EAAE,MAAM;QACjB,SAAS,EAAE,KAAK,CAAC,SAAS;QAC1B,OAAO,EAAE,KAAK,CAAC,OAAO;QACtB,IAAI,EAAE,KAAK,CAAC,IAAI;QAChB,EAAE,EAAE,KAAK;QACT,IAAI;QACJ,EAAE,EAAE,GAAG;QACP,iBAAiB,EAAE,IAAI,CAAC,SAAS;QACjC,eAAe,EAAE,IAAI,CAAC,OAAO;QAC7B,OAAO,EAAE,KAAK,CAAC,SAAS;QACxB,MAAM,EAAE,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,QAAQ;QACnC,aAAa,EAAE,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS;QACvD,MAAM,EAAE,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,UAAU,CAAC,cAAc,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,IAAI,CAAC,QAAQ,CAAC;KACxF,CAAC;IACF,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;IAEtB,OAAO,MAAM,CAAC,EAAE;QACd,CAAC,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,aAAa,EAAE,MAAM,CAAC,SAAS,EAAE;QACtD,CAAC,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,CAAC;AAC/C,CAAC;AAED,mEAAmE;AACnE,SAAS,cAAc,CAAC,GAAY;IAClC,IAAI,GAAG,YAAY,KAAK;QAAE,OAAO,GAAG,CAAC,OAAO,CAAC;IAC7C,IAAI,OAAO,GAAG,KAAK,QAAQ;QAAE,OAAO,GAAG,CAAC;IACxC,IAAI,CAAC;QAAC,OAAO,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;IAAC,CAAC;IAAC,MAAM,CAAC;QAAC,OAAO,yBAAyB,CAAC;IAAC,CAAC;AACjF,CAAC;AAED;;;kFAGkF;AAClF,MAAM,UAAU,UAAU,CAAC,CAAS,EAAE,KAAc;IAClD,IAAI,CAAC,KAAK;QAAE,OAAO,CAAC,CAAC;IACrB,IAAI,GAAG,GAAG,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,sBAAsB,CAAC,CAAC;IACtD,mFAAmF;IACnF,MAAM,QAAQ,GAAG,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IACpC,IAAI,QAAQ,GAAG,CAAC,EAAE,CAAC;QACjB,MAAM,MAAM,GAAG,KAAK,CAAC,KAAK,CAAC,QAAQ,GAAG,CAAC,CAAC,CAAC;QACzC,IAAI,MAAM,CAAC,MAAM,IAAI,EAAE;YAAE,GAAG,GAAG,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,sBAAsB,CAAC,CAAC;IAChF,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "instar",
3
- "version": "1.3.34",
3
+ "version": "1.3.35",
4
4
  "description": "Coherence infrastructure for self-evolving AI agents — on the Claude Code or Codex subscription you already have.",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
@@ -1,8 +1,8 @@
1
1
  {
2
2
  "$schema": "./builtin-manifest.schema.json",
3
3
  "schemaVersion": 1,
4
- "generatedAt": "2026-05-27T22:51:12.342Z",
5
- "instarVersion": "1.3.34",
4
+ "generatedAt": "2026-05-27T23:05:08.677Z",
5
+ "instarVersion": "1.3.35",
6
6
  "entryCount": 192,
7
7
  "entries": {
8
8
  "hook:session-start": {
@@ -0,0 +1,44 @@
1
+ # Instar Upgrade Guide — NEXT
2
+
3
+ <!-- bump: patch -->
4
+
5
+ ## What Changed
6
+
7
+ **Agent-to-agent Telegram comms primitive — send side now wired in.** Builds on the
8
+ TelegramAdapter groundwork that landed in v1.3.34 (where the adapter learned to run a
9
+ second bot cleanly + expose `is_bot`/`sender_chat` on inbound messages). This release adds
10
+ the actual send function plus its safety machinery, still **dark** (no caller uses it
11
+ yet — the mentor wires it in the follow-up):
12
+
13
+ - **`sendAgentMessage`** — formats the visible `[a2a:from=… to=… role=… id=… corr=… ts=… v=1]`
14
+ marker, sends via an injected adapter, and writes one audit row for every outcome
15
+ (`ok` / `failed` / `role-refused`) — never silent.
16
+ - **Runtime anti-loop guard** — refuses to send any role the caller wasn't constructed with
17
+ permission for. No marker formed, no send attempted, audit row written. This makes the
18
+ import-surface lint a backup rather than the only defense; the runtime guard always
19
+ applies. A role-handler that *consumes* role X structurally cannot *send* role X.
20
+ - **Bot-token scrubbing on every error/audit surface** — Telegram 401 response bodies
21
+ sometimes echo the token; redaction makes leaks structurally impossible from this module.
22
+
23
+ ## What to Tell Your User
24
+
25
+ - Nothing changes in how your agent behaves today — still plumbing. Your agent's own
26
+ Telegram keeps working exactly as before. A follow-up update wires this into the mentor
27
+ feature.
28
+
29
+ ## Summary of New Capabilities
30
+
31
+ | Capability | How to Use |
32
+ |-----------|-----------|
33
+ | `sendAgentMessage` + audit ledger | Internal — see `src/messaging/AgentTelegramComms.ts`; formats the marker, sends via injected adapter, writes a `SendAuditRow` for every outcome, scrubs the bot token |
34
+
35
+ ## Evidence
36
+
37
+ **Net-new groundwork, not a bug fix.** Proven by 5 new unit tests (25 total in the suite,
38
+ all green): happy-path send + audit (marker round-trips through `parseMarker` — sender output
39
+ IS receiver input); correlation threading (explicit `correlationId` lands in the marker's
40
+ `corr=` field for prompt↔reply linkage via Telegram chat history alone); the anti-loop
41
+ role-refusal (a role not in the caller's allowed-set → no send, no marker, `role-refused`
42
+ audit row); adapter failure with the bot token in the error body → token scrubbed from both
43
+ the result reason and the audit row; `scrubToken` unit coverage across full-token,
44
+ secret-portion, no-token-present, and undefined-token cases. `tsc --noEmit` clean.
@@ -0,0 +1,71 @@
1
+ # Side-Effects Review — agent-to-agent Telegram comms: send side + audit (PR 2b)
2
+
3
+ **Spec:** `docs/specs/MENTOR-LIVE-READINESS-SPEC.md` §Fix 2a "Sender side" + anti-loop #1 +
4
+ round-2 adversarial F5 (token-leak scrub). PR 2 of the staged build, part b.
5
+ **Change:** Extend `src/messaging/AgentTelegramComms.ts` with `sendAgentMessage` (the
6
+ adapter-agnostic send function), a `SendAuditRow` schema + appender hook, and `scrubToken`
7
+ (redacts the bot token from any error surface before it leaves the module). I/O still
8
+ **injected** — fully unit-testable; no caller invokes it yet (dark). PR 3 wires it.
9
+ **Files:** `src/messaging/AgentTelegramComms.ts` (additive), `tests/unit/messaging/AgentTelegramComms.test.ts` (+5).
10
+
11
+ ## What changed
12
+
13
+ - `sendAgentMessage(input, deps)` — mints/uses `a2aId` (UUID-or-supplied), defaults
14
+ `correlationId` to `id` (prompts self-correlate; replies thread on the prompt's id),
15
+ formats the marker via `formatMarker`, calls the injected `deps.send(topicId, text)`,
16
+ and writes ONE audit row (always — on `ok`, `failed`, or `role-refused`). Returns
17
+ `{ok, a2aId, sentMessageId?, reason?}`.
18
+ - **Runtime anti-loop guard** (spec §Fix 2a anti-loop #1): refuses any `role` not in
19
+ `deps.allowedRoles` — NO send attempted, NO marker formed, audit row with
20
+ `result: 'role-refused'`. This makes the import-surface lint (deferred to PR 3) a
21
+ backup rather than the only defense; the runtime guard always applies.
22
+ - `scrubToken(s, token)` — redacts the bot token (full + secret-portion) from any
23
+ string before it leaves the module. Wired into every error/audit path in
24
+ `sendAgentMessage` (round-2 adversarial F5: Telegram 401 response bodies sometimes
25
+ echo the token).
26
+
27
+ ## The seven questions
28
+
29
+ 1. **Over-block.** The runtime role-refusal is exact — a caller that legitimately needs
30
+ role X passes it in `allowedRoles`. No false-positive refusal.
31
+ 2. **Under-block.** Every send path writes an audit row (ok / failed / role-refused) — no
32
+ silent drop. Token scrub runs on every reason-string surface (format errors, send
33
+ errors). The audit row schema explicitly forbids secrets (verified in the artifact).
34
+ 3. **Level-of-abstraction fit.** I/O injected (`send`, `appendAudit`, `now`, `mintId`,
35
+ `botToken`, `fromBotId`, `toBotId`). The function is the wire-level send/marker/audit
36
+ logic; storage choice (JSONL vs SQLite) is the caller's (PR 3 picks).
37
+ 4. **Signal vs authority.** Send is the authority on "did the message leave my process";
38
+ the result is exact (`ok` only when the adapter returns a messageId). Audit row is the
39
+ signal trail. No silent best-effort.
40
+ 5. **Interactions — dark, but the module surface is shared with PR 1 + the existing
41
+ `decideRoute`.** The send side adds NEW exports (sendAgentMessage, scrubToken,
42
+ SendAuditRow, etc.) — existing imports unaffected. Dark today.
43
+ 6. **External surfaces.** None new in this PR. The audit row schema is the wire format
44
+ for future log readers (Stage-B forensics will read it in PR 3).
45
+ 7. **Rollback cost.** Trivial — revert removes additive exports + tests. No data, no
46
+ migration. PR 1 / PR 2a are not touched.
47
+
48
+ ## Testing
49
+
50
+ - 5 new unit tests (25 total in the file, all green):
51
+ - **send + audit happy path**: marker round-trips through `parseMarker` (the sender's
52
+ output is the receiver's input — closes the wire-format integration informally);
53
+ `result: 'ok'` audit row with `sentMessageId` + correct fields.
54
+ - **correlation threading**: explicit `correlationId` lands in the marker's `corr=`
55
+ and in the audit row (prompt↔reply linkage via Telegram chat history alone, per
56
+ Codey's round-2 design point).
57
+ - **ANTI-LOOP runtime refusal**: a role not in `allowedRoles` → no send, role-refused
58
+ audit row with explanatory reason. Proves the import-lint isn't the only defense.
59
+ - **send-error with token in body**: adapter throws an error containing the bot token
60
+ → result + audit reason both scrubbed (no token leak through any surface).
61
+ - **scrubToken unit**: full-token + secret-portion + no-token-present + undefined-token
62
+ coverage.
63
+ - `tsc --noEmit` clean.
64
+
65
+ ## Migration parity
66
+
67
+ None — additive exports to a dark module. No config, no routes, no agent-installed file
68
+ changes. PR 3 wires the receiver-handler at `server.ts`, the role handlers, the audit
69
+ ledger persistence (JSONL append via SafeFsExecutor), and the processed-id store (SQLite
70
+ per the convention note flagged in PR 1's artifact); migration (file-outbox retirement,
71
+ dead-config removal) lands there per the spec's §Migration parity.