instar 1.3.268 → 1.3.270

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/commands/init.d.ts.map +1 -1
  2. package/dist/commands/init.js +3 -2
  3. package/dist/commands/init.js.map +1 -1
  4. package/dist/commands/server.d.ts.map +1 -1
  5. package/dist/commands/server.js +9 -1
  6. package/dist/commands/server.js.map +1 -1
  7. package/dist/coordination/MandateAudit.d.ts +48 -0
  8. package/dist/coordination/MandateAudit.d.ts.map +1 -0
  9. package/dist/coordination/MandateAudit.js +95 -0
  10. package/dist/coordination/MandateAudit.js.map +1 -0
  11. package/dist/coordination/MandateGate.d.ts +48 -0
  12. package/dist/coordination/MandateGate.d.ts.map +1 -0
  13. package/dist/coordination/MandateGate.js +104 -0
  14. package/dist/coordination/MandateGate.js.map +1 -0
  15. package/dist/coordination/MandateStore.d.ts +60 -0
  16. package/dist/coordination/MandateStore.d.ts.map +1 -0
  17. package/dist/coordination/MandateStore.js +106 -0
  18. package/dist/coordination/MandateStore.js.map +1 -0
  19. package/dist/coordination/conditions.d.ts +32 -0
  20. package/dist/coordination/conditions.d.ts.map +1 -0
  21. package/dist/coordination/conditions.js +54 -0
  22. package/dist/coordination/conditions.js.map +1 -0
  23. package/dist/coordination/types.d.ts +74 -0
  24. package/dist/coordination/types.d.ts.map +1 -0
  25. package/dist/coordination/types.js +17 -0
  26. package/dist/coordination/types.js.map +1 -0
  27. package/dist/core/ApprovalLedger.d.ts +132 -0
  28. package/dist/core/ApprovalLedger.d.ts.map +1 -0
  29. package/dist/core/ApprovalLedger.js +191 -0
  30. package/dist/core/ApprovalLedger.js.map +1 -0
  31. package/dist/core/SessionBuildContextStore.d.ts +33 -0
  32. package/dist/core/SessionBuildContextStore.d.ts.map +1 -0
  33. package/dist/core/SessionBuildContextStore.js +107 -0
  34. package/dist/core/SessionBuildContextStore.js.map +1 -0
  35. package/dist/core/SessionManager.d.ts +4 -0
  36. package/dist/core/SessionManager.d.ts.map +1 -1
  37. package/dist/core/SessionManager.js +44 -3
  38. package/dist/core/SessionManager.js.map +1 -1
  39. package/dist/core/types.d.ts +11 -0
  40. package/dist/core/types.d.ts.map +1 -1
  41. package/dist/core/types.js.map +1 -1
  42. package/dist/feedback-factory/migration/immutableGuard.d.ts +87 -0
  43. package/dist/feedback-factory/migration/immutableGuard.d.ts.map +1 -0
  44. package/dist/feedback-factory/migration/immutableGuard.js +163 -0
  45. package/dist/feedback-factory/migration/immutableGuard.js.map +1 -0
  46. package/dist/feedback-factory/migration/importIntegrity.d.ts +112 -0
  47. package/dist/feedback-factory/migration/importIntegrity.d.ts.map +1 -0
  48. package/dist/feedback-factory/migration/importIntegrity.js +202 -0
  49. package/dist/feedback-factory/migration/importIntegrity.js.map +1 -0
  50. package/dist/feedback-factory/monitor/parityMonitor.d.ts +75 -0
  51. package/dist/feedback-factory/monitor/parityMonitor.d.ts.map +1 -0
  52. package/dist/feedback-factory/monitor/parityMonitor.js +98 -0
  53. package/dist/feedback-factory/monitor/parityMonitor.js.map +1 -0
  54. package/dist/feedback-factory/monitor/parityMonitorStore.d.ts +44 -0
  55. package/dist/feedback-factory/monitor/parityMonitorStore.d.ts.map +1 -0
  56. package/dist/feedback-factory/monitor/parityMonitorStore.js +80 -0
  57. package/dist/feedback-factory/monitor/parityMonitorStore.js.map +1 -0
  58. package/dist/messaging/TelegramAdapter.d.ts +9 -1
  59. package/dist/messaging/TelegramAdapter.d.ts.map +1 -1
  60. package/dist/messaging/TelegramAdapter.js +13 -7
  61. package/dist/messaging/TelegramAdapter.js.map +1 -1
  62. package/dist/scaffold/templates.d.ts.map +1 -1
  63. package/dist/scaffold/templates.js +11 -0
  64. package/dist/scaffold/templates.js.map +1 -1
  65. package/dist/server/AgentServer.d.ts +6 -0
  66. package/dist/server/AgentServer.d.ts.map +1 -1
  67. package/dist/server/AgentServer.js +94 -1
  68. package/dist/server/AgentServer.js.map +1 -1
  69. package/dist/server/CapabilityIndex.d.ts.map +1 -1
  70. package/dist/server/CapabilityIndex.js +29 -0
  71. package/dist/server/CapabilityIndex.js.map +1 -1
  72. package/dist/server/DashboardRefreshDiagnostics.d.ts +12 -0
  73. package/dist/server/DashboardRefreshDiagnostics.d.ts.map +1 -0
  74. package/dist/server/DashboardRefreshDiagnostics.js +63 -0
  75. package/dist/server/DashboardRefreshDiagnostics.js.map +1 -0
  76. package/dist/server/routes.d.ts +11 -0
  77. package/dist/server/routes.d.ts.map +1 -1
  78. package/dist/server/routes.js +264 -4
  79. package/dist/server/routes.js.map +1 -1
  80. package/package.json +1 -1
  81. package/src/data/builtin-manifest.json +75 -75
  82. package/src/scaffold/templates.ts +11 -0
  83. package/upgrades/1.3.269.md +24 -0
  84. package/upgrades/1.3.270.md +106 -0
  85. package/upgrades/approval-ledger-phase2.eli16.md +56 -0
  86. package/upgrades/feedback-phase3-monitor.eli16.md +51 -0
  87. package/upgrades/feedback-phase4-integrity.eli16.md +54 -0
  88. package/upgrades/respawn-build-context-reestablishment.eli16.md +5 -0
  89. package/upgrades/side-effects/approval-ledger-phase2.md +82 -0
  90. package/upgrades/side-effects/coordination-mandate-enforcement.md +86 -0
  91. package/upgrades/side-effects/dashboard-refresh-diagnostics.md +76 -0
  92. package/upgrades/side-effects/feedback-phase3-monitor.md +37 -0
  93. package/upgrades/side-effects/feedback-phase4-integrity.md +35 -0
  94. package/upgrades/side-effects/respawn-build-context-reestablishment.md +81 -0
@@ -306,6 +306,17 @@ export interface RouteContext {
306
306
  tokenLedger: import('../monitoring/TokenLedger.js').TokenLedger | null;
307
307
  featureMetricsLedger: import('../monitoring/FeatureMetricsLedger.js').FeatureMetricsLedger | null;
308
308
  resourceLedger: import('../monitoring/ResourceLedger.js').ResourceLedger | null;
309
+ /** Approval-as-Data ledger (spec Part B / Phase 2). Records operator approval
310
+ * decisions + per-class agreement ratios. Null when stateDir is unavailable. */
311
+ approvalLedger: import('../core/ApprovalLedger.js').ApprovalLedger | null;
312
+ /** Coordination Mandate enforcement (docs/specs/coordination-mandate.md §4).
313
+ * Deny-by-default gate + signed store + hash-chained audit. Null when stateDir
314
+ * is unavailable. Issuance/revocation are PIN-gated, never Bearer-only. */
315
+ coordination: {
316
+ store: import('../coordination/MandateStore.js').MandateStore;
317
+ gate: import('../coordination/MandateGate.js').MandateGate;
318
+ audit: import('../coordination/MandateAudit.js').MandateAudit;
319
+ } | null;
309
320
  /** Cross-topic activity index (Parallel-Work Awareness Phase A). Backs GET /parallel-work/activities. */
310
321
  parallelActivityIndex?: import('../core/ParallelActivityIndex.js').ParallelActivityIndex | null;
311
322
  /** The shared intelligence provider (an IntelligenceRouter when per-component routing is wired). Backs GET /intelligence/routing. */
@@ -1 +1 @@
1
- {"version":3,"file":"routes.d.ts","sourceRoot":"","sources":["../../src/server/routes.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"routes.d.ts","sourceRoot":"","sources":["../../src/server/routes.ts"],"names":[],"mappings":"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"}
@@ -43,6 +43,7 @@ import { SafeGitExecutor } from '../core/SafeGitExecutor.js';
43
43
  import { SafeFsExecutor } from '../core/SafeFsExecutor.js';
44
44
  import { validateStageTransition } from '../core/StageTransitionValidator.js';
45
45
  import { ATTENTION_PRIORITIES, ATTENTION_STATUSES, normalizeAttentionPriority, normalizeAttentionStatus, } from './attentionApi.js';
46
+ import { dashboardRefreshFailure } from './DashboardRefreshDiagnostics.js';
46
47
  const execFile = promisify(execFileCb);
47
48
  /**
48
49
  * Per-session continue-ceiling (spec § (b) Outcomes).
@@ -4122,6 +4123,261 @@ export function createRoutes(ctx) {
4122
4123
  samples: ctx.resourceLedger.recentSamples({ sinceMs, limit, source }),
4123
4124
  });
4124
4125
  });
4126
+ // ── Approval-as-Data (docs/specs/AUTONOMOUS-OPERATION-JUDGMENT-AND-APPROVAL-AS-DATA-SPEC.md, Part B / Phase 2) ──
4127
+ // Durable, signed record of every operator approval decision, and the per-class
4128
+ // agreement ratios computed from it. Tracks approvals WHEREVER they occur (a spec
4129
+ // sign-off, a decision approved in chat, …) — operator extension 2026-06-05.
4130
+ //
4131
+ // AUTHORITY INVARIANT: `mode` + `divergences` MUST reflect an EXPLICIT operator
4132
+ // statement (the approve control, or words like "go with your picks" = as-is vs
4133
+ // "change X because Y" = with-change). The agent must NOT infer/self-classify the
4134
+ // operator's intent; an ambiguous/silent decision is NOT recorded. Any row is
4135
+ // operator-correctable (append a row with `corrects` set). Read paths never gate.
4136
+ // Record an approval decision. The caller passes operator-sourced mode+divergences.
4137
+ router.post('/approvals', (req, res) => {
4138
+ if (!ctx.approvalLedger) {
4139
+ res.status(503).json({ error: 'approval ledger unavailable (no stateDir or init failed)' });
4140
+ return;
4141
+ }
4142
+ const b = req.body ?? {};
4143
+ if (typeof b.subject !== 'string' || !b.subject.trim()) {
4144
+ res.status(400).json({ error: 'subject is required' });
4145
+ return;
4146
+ }
4147
+ if (typeof b.decisionClass !== 'string' || !b.decisionClass.trim()) {
4148
+ res.status(400).json({ error: 'decisionClass is required' });
4149
+ return;
4150
+ }
4151
+ try {
4152
+ const row = ctx.approvalLedger.recordApproval({
4153
+ subject: b.subject,
4154
+ decisionClass: b.decisionClass,
4155
+ surface: b.surface ?? 'chat',
4156
+ approver: typeof b.approver === 'string' && b.approver ? b.approver : 'justin',
4157
+ mode: b.mode,
4158
+ divergences: Array.isArray(b.divergences) ? b.divergences : undefined,
4159
+ reviewIterations: typeof b.reviewIterations === 'number' ? b.reviewIterations : undefined,
4160
+ commitSha: typeof b.commitSha === 'string' ? b.commitSha : undefined,
4161
+ evidenceRef: typeof b.evidenceRef === 'string' ? b.evidenceRef : undefined,
4162
+ corrects: typeof b.corrects === 'string' ? b.corrects : undefined,
4163
+ decidedAt: typeof b.decidedAt === 'string' ? b.decidedAt : undefined,
4164
+ });
4165
+ res.status(201).json({ recorded: true, row });
4166
+ }
4167
+ catch (err) {
4168
+ // The store throws on an internally-inconsistent row (e.g. as-is WITH a
4169
+ // divergence, or a change WITHOUT one) — that's a 400, not a 500.
4170
+ res.status(400).json({ error: err instanceof Error ? err.message : String(err) });
4171
+ }
4172
+ });
4173
+ // Per-class agreement summary + an overall surface breakdown. Read-only; never gates.
4174
+ router.get('/approvals/summary', (_req, res) => {
4175
+ if (!ctx.approvalLedger) {
4176
+ res.status(503).json({ error: 'approval ledger unavailable (no stateDir or init failed)' });
4177
+ return;
4178
+ }
4179
+ const classes = ctx.approvalLedger.summarize();
4180
+ const rows = ctx.approvalLedger.all();
4181
+ const bySurface = {};
4182
+ for (const r of rows) {
4183
+ const s = (bySurface[r.surface] ??= { total: 0, approvedAsIs: 0 });
4184
+ s.total++;
4185
+ if (r.mode === 'approved-as-is')
4186
+ s.approvedAsIs++;
4187
+ }
4188
+ res.json({
4189
+ total: rows.length,
4190
+ classes,
4191
+ bySurface,
4192
+ note: 'Read-only. The ratio is a SIGNAL; auto-approval (Phase 3) routes through a full-context authority, not the arithmetic.',
4193
+ });
4194
+ });
4195
+ // List recorded rows, newest-first (paginated; ?limit= / ?decisionClass= / ?surface=).
4196
+ router.get('/approvals', (req, res) => {
4197
+ if (!ctx.approvalLedger) {
4198
+ res.status(503).json({ error: 'approval ledger unavailable (no stateDir or init failed)' });
4199
+ return;
4200
+ }
4201
+ let limit = 100;
4202
+ if (typeof req.query.limit === 'string' && /^\d+$/.test(req.query.limit)) {
4203
+ const n = Number(req.query.limit);
4204
+ if (n > 0 && n <= 1000)
4205
+ limit = n;
4206
+ }
4207
+ const decisionClass = typeof req.query.decisionClass === 'string' ? req.query.decisionClass : undefined;
4208
+ const surface = typeof req.query.surface === 'string' ? req.query.surface : undefined;
4209
+ let rows = ctx.approvalLedger.all();
4210
+ if (decisionClass)
4211
+ rows = rows.filter((r) => r.decisionClass === decisionClass);
4212
+ if (surface)
4213
+ rows = rows.filter((r) => r.surface === surface);
4214
+ const recent = rows.slice(-limit).reverse();
4215
+ res.json({ count: recent.length, total: rows.length, rows: recent });
4216
+ });
4217
+ // ── Coordination Mandate (docs/specs/coordination-mandate.md §4) ──
4218
+ // Deny-by-default enforcement for autonomous A2A authority. The mandate (a
4219
+ // human-authored, signed policy) is the AUTHORIZER — never the agent. Justin's
4220
+ // resolved decisions (A/A/B, 2026-06-05): issuance + revocation are PIN-gated
4221
+ // (the human-authenticated dashboard surface — an agent's Bearer token CANNOT
4222
+ // issue/revoke); the first mandate carries only exchange-read-credential +
4223
+ // sign-code-review; execute-cutover is not delegated (the flip stays human).
4224
+ //
4225
+ // PIN verification mirrors /dashboard/unlock: sha256 + timingSafeEqual + a
4226
+ // per-IP attempt limit. Read paths + /mandate/evaluate are Bearer-gated.
4227
+ const mandatePinAttempts = new Map();
4228
+ const MANDATE_PIN_MAX_ATTEMPTS = 5;
4229
+ const MANDATE_PIN_WINDOW_MS = 5 * 60 * 1000;
4230
+ /** Verify the operator PIN for mandate issuance/revocation. Returns an error
4231
+ * string (already sent) or null when the PIN is valid. */
4232
+ function checkMandatePin(req, res) {
4233
+ if (!ctx.config.dashboardPin) {
4234
+ res.status(503).json({ error: 'PIN authentication not available (no dashboardPin configured)' });
4235
+ return false;
4236
+ }
4237
+ const ip = req.ip || req.socket?.remoteAddress || 'unknown';
4238
+ const now = Date.now();
4239
+ let entry = mandatePinAttempts.get(ip);
4240
+ if (entry && now > entry.resetAt) {
4241
+ mandatePinAttempts.delete(ip);
4242
+ entry = undefined;
4243
+ }
4244
+ if (entry && entry.count >= MANDATE_PIN_MAX_ATTEMPTS) {
4245
+ res.status(429).json({ error: 'Too many attempts. Try again later.' });
4246
+ return false;
4247
+ }
4248
+ const pin = (req.body ?? {}).pin;
4249
+ if (!pin || typeof pin !== 'string') {
4250
+ res.status(403).json({ error: 'Operator PIN required — mandate issuance/revocation is a human action, not an agent action' });
4251
+ return false;
4252
+ }
4253
+ const ha = createHash('sha256').update(pin).digest();
4254
+ const hb = createHash('sha256').update(ctx.config.dashboardPin).digest();
4255
+ if (ha.length !== hb.length || !timingSafeEqual(ha, hb)) {
4256
+ if (!entry) {
4257
+ entry = { count: 0, resetAt: now + MANDATE_PIN_WINDOW_MS };
4258
+ mandatePinAttempts.set(ip, entry);
4259
+ }
4260
+ entry.count++;
4261
+ res.status(403).json({ error: 'Incorrect PIN', attemptsRemaining: MANDATE_PIN_MAX_ATTEMPTS - entry.count });
4262
+ return false;
4263
+ }
4264
+ return true;
4265
+ }
4266
+ // Evaluate an action against a mandate (the enforcement consumption point).
4267
+ // Every call — allow AND deny — lands in the hash-chained audit.
4268
+ router.post('/mandate/evaluate', (req, res) => {
4269
+ if (!ctx.coordination) {
4270
+ res.status(503).json({ error: 'coordination mandate engine unavailable (no stateDir or init failed)' });
4271
+ return;
4272
+ }
4273
+ const b = req.body ?? {};
4274
+ if (typeof b.action !== 'string' || !b.action || typeof b.agentFp !== 'string' || !b.agentFp || typeof b.mandateId !== 'string' || !b.mandateId) {
4275
+ res.status(400).json({ error: 'action, agentFp, and mandateId are required' });
4276
+ return;
4277
+ }
4278
+ const result = ctx.coordination.gate.evaluate({
4279
+ action: b.action,
4280
+ params: (b.params && typeof b.params === 'object') ? b.params : {},
4281
+ agentFp: b.agentFp,
4282
+ mandateId: b.mandateId,
4283
+ });
4284
+ res.json({ decision: result.decision, reason: result.reason, conditionResult: result.conditionResult });
4285
+ });
4286
+ // Read-only audit trail + chain integrity. MUST be registered before /mandate/:id.
4287
+ router.get('/mandate/audit', (req, res) => {
4288
+ if (!ctx.coordination) {
4289
+ res.status(503).json({ error: 'coordination mandate engine unavailable (no stateDir or init failed)' });
4290
+ return;
4291
+ }
4292
+ let limit = 100;
4293
+ if (typeof req.query.limit === 'string' && /^\d+$/.test(req.query.limit)) {
4294
+ const n = Number(req.query.limit);
4295
+ if (n > 0 && n <= 1000)
4296
+ limit = n;
4297
+ }
4298
+ const all = ctx.coordination.audit.all();
4299
+ res.json({
4300
+ total: all.length,
4301
+ chain: ctx.coordination.audit.verifyChain(),
4302
+ headHash: ctx.coordination.audit.headHash(),
4303
+ entries: all.slice(-limit).reverse(),
4304
+ });
4305
+ });
4306
+ // List mandates (each with its live authorship-verification status). Read-only.
4307
+ router.get('/mandate', (_req, res) => {
4308
+ if (!ctx.coordination) {
4309
+ res.status(503).json({ error: 'coordination mandate engine unavailable (no stateDir or init failed)' });
4310
+ return;
4311
+ }
4312
+ const { store } = ctx.coordination;
4313
+ res.json({
4314
+ mandates: store.list().map((m) => ({ ...m, authorshipValid: store.verifyAuthorship(m) })),
4315
+ });
4316
+ });
4317
+ // One mandate + its verification status. Read-only.
4318
+ router.get('/mandate/:id', (req, res) => {
4319
+ if (!ctx.coordination) {
4320
+ res.status(503).json({ error: 'coordination mandate engine unavailable (no stateDir or init failed)' });
4321
+ return;
4322
+ }
4323
+ const m = ctx.coordination.store.get(req.params.id);
4324
+ if (!m) {
4325
+ res.status(404).json({ error: `mandate "${req.params.id}" not found` });
4326
+ return;
4327
+ }
4328
+ res.json({ mandate: { ...m, authorshipValid: ctx.coordination.store.verifyAuthorship(m) } });
4329
+ });
4330
+ // Issue a mandate — PIN-GATED (decision 2A: the human-authenticated surface).
4331
+ router.post('/mandate/issue', (req, res) => {
4332
+ if (!ctx.coordination) {
4333
+ res.status(503).json({ error: 'coordination mandate engine unavailable (no stateDir or init failed)' });
4334
+ return;
4335
+ }
4336
+ if (!checkMandatePin(req, res))
4337
+ return;
4338
+ const b = req.body ?? {};
4339
+ if (typeof b.scope !== 'string' || !b.scope.trim()) {
4340
+ res.status(400).json({ error: 'scope is required' });
4341
+ return;
4342
+ }
4343
+ if (!Array.isArray(b.agents) || b.agents.length !== 2 || b.agents.some((a) => typeof a !== 'string' || !a)) {
4344
+ res.status(400).json({ error: 'agents must be a pair of two agent fingerprints' });
4345
+ return;
4346
+ }
4347
+ if (!Array.isArray(b.authorities) || b.authorities.length === 0
4348
+ || b.authorities.some((a) => typeof a?.action !== 'string' || !a.action || typeof a?.bounds !== 'object' || a.bounds === null)) {
4349
+ res.status(400).json({ error: 'authorities must be a non-empty array of { action, bounds, requiresCondition? }' });
4350
+ return;
4351
+ }
4352
+ if (typeof b.expiresAt !== 'string' || isNaN(Date.parse(b.expiresAt)) || Date.parse(b.expiresAt) <= Date.now()) {
4353
+ res.status(400).json({ error: 'expiresAt must be a future ISO timestamp (mandates always expire)' });
4354
+ return;
4355
+ }
4356
+ const mandate = ctx.coordination.store.issue({
4357
+ scope: b.scope,
4358
+ agents: [b.agents[0], b.agents[1]],
4359
+ authorities: b.authorities,
4360
+ author: typeof b.author === 'string' && b.author ? b.author : 'justin',
4361
+ expiresAt: b.expiresAt,
4362
+ });
4363
+ res.status(201).json({ issued: true, mandate });
4364
+ });
4365
+ // Revoke a mandate — PIN-GATED (the operator kill switch; checked on every action).
4366
+ router.post('/mandate/:id/revoke', (req, res) => {
4367
+ if (!ctx.coordination) {
4368
+ res.status(503).json({ error: 'coordination mandate engine unavailable (no stateDir or init failed)' });
4369
+ return;
4370
+ }
4371
+ if (!checkMandatePin(req, res))
4372
+ return;
4373
+ const reason = typeof (req.body ?? {}).reason === 'string' && req.body.reason ? req.body.reason : 'operator revocation';
4374
+ const m = ctx.coordination.store.revoke(req.params.id, reason);
4375
+ if (!m) {
4376
+ res.status(404).json({ error: `mandate "${req.params.id}" not found` });
4377
+ return;
4378
+ }
4379
+ res.json({ revoked: true, mandate: m });
4380
+ });
4125
4381
  // ── Parallel-Work Awareness (docs/specs/parallel-activity-coherence.md, Phase A) ──
4126
4382
  // Read-only cross-topic index: every topic with intent state + its current focus +
4127
4383
  // high-specificity tags + whether a session is live on it. Signal-only; never gates.
@@ -8996,16 +9252,18 @@ export function createRoutes(ctx) {
8996
9252
  // dashboard link never goes stale.
8997
9253
  router.post('/telegram/dashboard-refresh', async (_req, res) => {
8998
9254
  if (!ctx.telegram) {
8999
- res.status(503).json({ error: 'Telegram not configured' });
9255
+ res.status(503).json(dashboardRefreshFailure('precondition', 'Telegram messaging is not configured for this agent, so there is no Dashboard topic to update.', 'Run Telegram setup for this agent or disable the dashboard-link-refresh job when Telegram is intentionally unavailable.', 'skipped'));
9000
9256
  return;
9001
9257
  }
9002
9258
  if (!ctx.tunnel) {
9003
- res.status(503).json({ error: 'Tunnel not running', action: 'skipped' });
9259
+ res.status(503).json(dashboardRefreshFailure('precondition', 'The tunnel manager is not wired, so there is no remote dashboard URL to pin.', 'Enable the tunnel or disable dashboard-link-refresh for local-only agents.', 'skipped'));
9004
9260
  return;
9005
9261
  }
9006
9262
  const tunnelUrl = ctx.tunnel.url;
9007
9263
  if (!tunnelUrl) {
9008
- res.status(503).json({ error: 'Tunnel has no URL yet', action: 'skipped' });
9264
+ const lc = ctx.tunnel.lifecycleState;
9265
+ const reason = lc.episode?.lastFailureReason ? ` Last tunnel failure: ${lc.episode.lastFailureReason}.` : '';
9266
+ res.status(503).json(dashboardRefreshFailure('precondition', `The tunnel is not advertising a URL yet.${reason}`, 'Check /tunnel for lifecycle state, then restart or repair the configured tunnel provider.', 'skipped'));
9009
9267
  return;
9010
9268
  }
9011
9269
  const tunnelType = (ctx.config.tunnel?.type === 'named' ? 'named' : 'quick');
@@ -9020,7 +9278,9 @@ export function createRoutes(ctx) {
9020
9278
  res.json({ action: 'refreshed', url: tunnelUrl, tunnelType });
9021
9279
  }
9022
9280
  catch (err) {
9023
- res.status(500).json({ error: err instanceof Error ? err.message : String(err) });
9281
+ const detail = err instanceof Error ? err.message : String(err);
9282
+ console.error(`[dashboard-refresh] broadcast failed tunnelType=${tunnelType}: ${detail}`);
9283
+ res.status(502).json(dashboardRefreshFailure('broadcast', detail, 'Verify the Dashboard forum topic still exists, Telegram credentials are valid, and the bot can edit or send pinned messages.'));
9024
9284
  }
9025
9285
  });
9026
9286
  // ── Events ──────────────────────────────────────────────────────