instar 1.3.1607 → 1.3.1609

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 (40) hide show
  1. package/dashboard/console/console.js +10 -1
  2. package/dashboard/console/home-model.js +18 -1
  3. package/dist/commands/server.d.ts.map +1 -1
  4. package/dist/commands/server.js +4 -1
  5. package/dist/commands/server.js.map +1 -1
  6. package/dist/core/resolveMeshPeerUrl.d.ts +7 -0
  7. package/dist/core/resolveMeshPeerUrl.d.ts.map +1 -1
  8. package/dist/core/resolveMeshPeerUrl.js +23 -13
  9. package/dist/core/resolveMeshPeerUrl.js.map +1 -1
  10. package/dist/data/standards-guard-index.json +1 -1
  11. package/dist/data/standards-guard-index.meta.json +2 -2
  12. package/dist/data/standards-registry.meta.json +1 -1
  13. package/dist/native/instar-desktop-host +0 -0
  14. package/dist/server/AgentServer.d.ts +5 -0
  15. package/dist/server/AgentServer.d.ts.map +1 -1
  16. package/dist/server/AgentServer.js +20 -11
  17. package/dist/server/AgentServer.js.map +1 -1
  18. package/dist/server/DesktopMeshBroker.d.ts +8 -0
  19. package/dist/server/DesktopMeshBroker.d.ts.map +1 -1
  20. package/dist/server/DesktopMeshBroker.js +27 -17
  21. package/dist/server/DesktopMeshBroker.js.map +1 -1
  22. package/dist/server/desktopPeerRopeFetch.d.ts +56 -0
  23. package/dist/server/desktopPeerRopeFetch.d.ts.map +1 -0
  24. package/dist/server/desktopPeerRopeFetch.js +141 -0
  25. package/dist/server/desktopPeerRopeFetch.js.map +1 -0
  26. package/dist/server/poolPeerFetch.d.ts +1 -1
  27. package/dist/server/poolPeerFetch.d.ts.map +1 -1
  28. package/dist/server/poolPeerFetch.js +2 -2
  29. package/dist/server/poolPeerFetch.js.map +1 -1
  30. package/package.json +1 -1
  31. package/src/data/builtin-manifest.json +3 -3
  32. package/src/data/standards-guard-index.json +1 -1
  33. package/src/data/standards-guard-index.meta.json +2 -2
  34. package/src/data/standards-registry.meta.json +1 -1
  35. package/upgrades/1.3.1608.md +23 -0
  36. package/upgrades/1.3.1609.md +20 -0
  37. package/upgrades/side-effects/console-needs-you-links.eli16.md +7 -0
  38. package/upgrades/side-effects/console-needs-you-links.md +33 -0
  39. package/upgrades/side-effects/desktop-peer-rope-fallback.eli16.md +30 -0
  40. package/upgrades/side-effects/desktop-peer-rope-fallback.md +79 -0
@@ -47,6 +47,8 @@ const expanded = new Set(); // cards the operator expanded; kept acr
47
47
  const openRows = new Set(); // rows the operator opened; kept across refreshes
48
48
  let rowSeq = 0;
49
49
  let homeChatId = null;
50
+ // The agent-wide Attention topic, where every attention item is posted.
51
+ let attentionTopicId = null;
50
52
  let homeRun = null;
51
53
 
52
54
  // ── tiny DOM helpers ──────────────────────────────────────────────────────
@@ -257,6 +259,8 @@ function actionHref(action) {
257
259
  return `#/work/promises?${params}`;
258
260
  }
259
261
  if (action.kind === 'topic') return topicLink(homeChatId, action.topicId);
262
+ if (action.kind === 'href') return action.href || null;
263
+ if (action.kind === 'attention') return attentionTopicId ? topicLink(homeChatId, attentionTopicId) : null;
260
264
  return null;
261
265
  }
262
266
 
@@ -449,7 +453,7 @@ function loadHome() {
449
453
  ? { ...model, retrying: true, line: [model.line, 'Checking again automatically.'].filter(Boolean).join(' ') } : model;
450
454
  const refresh = (key) => {
451
455
  const names = results.pool ? machineNames(results.pool) : {};
452
- if ((key === 'attention' || key === 'pool') && results.attention) set('needs', annotate(buildNeeds(results.attention, Date.now(), names), results.attention));
456
+ if ((key === 'attention' || key === 'pool' || key === 'systemTopics') && results.attention) set('needs', annotate(buildNeeds(results.attention, Date.now(), names), results.attention));
453
457
  if ((key === 'sessions' || key === 'pool' || key === 'topics') && results.sessions) set('doing', annotate(buildDoing(results.sessions, Date.now(), names, topicNameMap(results.topics)), results.sessions));
454
458
  if (key === 'pool' && results.pool) set('running', annotate(buildRunning(results.pool), results.pool));
455
459
  if ((key === 'commitments' || key === 'pool') && results.commitments) {
@@ -472,6 +476,10 @@ function loadHome() {
472
476
  || key === 'topics' && ((result.data?.pool?.failed?.length || 0) > 0 || (result.data?.pool?.unresolved?.length || 0) > 0));
473
477
  const retryable = partial || (!result.ok && !['not signed in', 'switched off on this agent'].includes(result.reason));
474
478
  results[key] = partial ? { ...result, retrying: true } : result;
479
+ if (key === 'systemTopics' && result.ok) {
480
+ const t = Number(result.data?.topics?.attention);
481
+ attentionTopicId = Number.isFinite(t) && t > 1 ? t : null;
482
+ }
475
483
  if (key === 'pool' && result.ok) {
476
484
  const self = (result.data?.machines || []).find((m) => m.isSelf || m.machineId === result.data.selfMachineId);
477
485
  homeChatId = self?.servesChannels?.telegram?.chatIds?.[0] || null;
@@ -489,6 +497,7 @@ function loadHome() {
489
497
  // A slow source cannot block another card or start overlapping refreshes.
490
498
  read('pool', '/pool', POOL_TIMEOUT_MS);
491
499
  read('attention', '/attention?scope=pool', POOL_TIMEOUT_MS);
500
+ read('systemTopics', '/telegram/system-topics');
492
501
  read('sessions', '/sessions?scope=pool', POOL_TIMEOUT_MS);
493
502
  read('topics', '/telegram/topics?scope=pool', POOL_TIMEOUT_MS);
494
503
  read('commitments', '/commitments?scope=mesh', COMMITMENTS_TIMEOUT_MS);
@@ -115,6 +115,23 @@ export function needsOperator(item) {
115
115
  return /decision|approval|review|sign-?in|relogin/i.test(cat);
116
116
  }
117
117
 
118
+ /**
119
+ * Where the operator acts on an item. Every row in "needs you" gets one: its
120
+ * own conversation; the Desktop page for that machine; the Accounts page for a
121
+ * sign-in; otherwise the Attention topic, where the item was posted and can be
122
+ * answered.
123
+ */
124
+ export function needAction(item) {
125
+ if (item && item.topicId != null && Number.isFinite(Number(item.topicId))) return { kind: 'topic', topicId: Number(item.topicId) };
126
+ const cat = String((item && item.category) || '');
127
+ if (/^desktop$/i.test(cat)) {
128
+ const q = item.machineId ? `?machineId=${encodeURIComponent(item.machineId)}` : '';
129
+ return { kind: 'href', href: `/dashboard/desktop.html${q}` };
130
+ }
131
+ if (/sign-?in|relogin/i.test(cat)) return { kind: 'href', href: '#/capacity/accounts' };
132
+ return { kind: 'attention' };
133
+ }
134
+
118
135
  export const STALE_DAYS = 14;
119
136
  const DAY = 86400000;
120
137
 
@@ -154,7 +171,7 @@ export function buildNeeds(res, now = Date.now(), names = {}) {
154
171
  tone: stale ? 'unknown' : (top.priority === 'URGENT' ? 'bad' : 'attn'),
155
172
  detail: top.description || top.body || '',
156
173
  expandable: true,
157
- action: Number.isFinite(Number(top.topicId)) ? { kind: 'topic', topicId: Number(top.topicId) } : null,
174
+ action: needAction(top),
158
175
  };
159
176
  }).sort((a, b) => Number(a.stale) - Number(b.stale) || a.prio - b.prio || b.last - a.last);
160
177
  const current = all.filter((g) => !g.stale);
@@ -1 +1 @@
1
- {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../src/commands/server.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../src/commands/server.ts"],"names":[],"mappings":"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"}
@@ -178,7 +178,7 @@ import { isSlackSessionKey, reconstructSlackMessage } from '../core/SlackForward
178
178
  import { formatForwardedTopicContext } from '../core/ForwardedTopicContext.js';
179
179
  import { resolveAdvertisedMeshUrl, advertiseSelfMeshUrl, detectTailscaleIp, pickPrimaryLanIp, computeSelfMeshEndpoints, advertiseSelfMeshEndpoints, resolveMeshBindHost } from '../core/MeshUrlAdvertiser.js';
180
180
  import { PeerEndpointResolver } from '../core/PeerEndpointResolver.js';
181
- import { resolveMeshPeerUrl, resolveMeshPeerPreferredSelection, } from '../core/resolveMeshPeerUrl.js';
181
+ import { resolveMeshPeerUrl, resolveMeshPeerPreferredSelection, resolveMeshPeerCandidates, } from '../core/resolveMeshPeerUrl.js';
182
182
  import { RelayRefusedError, isRelayRefusal, relayOutbound } from '../core/TelegramRelay.js';
183
183
  import { GitSyncManager } from '../core/GitSync.js';
184
184
  import { RegistrySyncDebouncer } from '../core/RegistrySyncDebouncer.js';
@@ -25790,6 +25790,9 @@ export async function startServer(options) {
25790
25790
  // Which ropes the guard skipped on the way to this one — so a
25791
25791
  // caller can report them instead of them vanishing.
25792
25792
  ropeRefusals: selection?.refusals ?? [],
25793
+ // Every rope, in order: remote-desktop calls apply their own
25794
+ // gate and fall back to the next rope that carries traffic.
25795
+ ropes: resolveMeshPeerCandidates(meshResolver, m.machineId, entry?.endpoints, entry?.lastKnownUrl),
25793
25796
  };
25794
25797
  })
25795
25798
  .filter((m) => m.url != null && m.kind != null);