instar 1.3.1670 → 1.3.1671

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 (67) hide show
  1. package/dist/commands/server.d.ts.map +1 -1
  2. package/dist/commands/server.js +24 -17
  3. package/dist/commands/server.js.map +1 -1
  4. package/dist/core/ClassReviewReplicatedStore.d.ts +13 -1
  5. package/dist/core/ClassReviewReplicatedStore.d.ts.map +1 -1
  6. package/dist/core/ClassReviewReplicatedStore.js +16 -0
  7. package/dist/core/ClassReviewReplicatedStore.js.map +1 -1
  8. package/dist/core/PostUpdateMigrator.d.ts +6 -0
  9. package/dist/core/PostUpdateMigrator.d.ts.map +1 -1
  10. package/dist/core/PostUpdateMigrator.js +26 -0
  11. package/dist/core/PostUpdateMigrator.js.map +1 -1
  12. package/dist/core/ReplicatedPeerStreamReader.d.ts +3 -0
  13. package/dist/core/ReplicatedPeerStreamReader.d.ts.map +1 -1
  14. package/dist/core/ReplicatedPeerStreamReader.js +35 -2
  15. package/dist/core/ReplicatedPeerStreamReader.js.map +1 -1
  16. package/dist/core/SlackReplyRelayInstaller.d.ts.map +1 -1
  17. package/dist/core/SlackReplyRelayInstaller.js +5 -0
  18. package/dist/core/SlackReplyRelayInstaller.js.map +1 -1
  19. package/dist/core/rebalanceProof.d.ts.map +1 -1
  20. package/dist/core/rebalanceProof.js +3 -1
  21. package/dist/core/rebalanceProof.js.map +1 -1
  22. package/dist/data/standards-guard-index.json +1 -1
  23. package/dist/data/standards-guard-index.meta.json +2 -2
  24. package/dist/data/standards-registry.meta.json +1 -1
  25. package/dist/messaging/slack/SlackAdapter.d.ts +1 -0
  26. package/dist/messaging/slack/SlackAdapter.d.ts.map +1 -1
  27. package/dist/messaging/slack/SlackAdapter.js +2 -0
  28. package/dist/messaging/slack/SlackAdapter.js.map +1 -1
  29. package/dist/messaging/slack/SlackMrkdwnFormatter.d.ts +1 -1
  30. package/dist/messaging/slack/SlackMrkdwnFormatter.d.ts.map +1 -1
  31. package/dist/messaging/slack/SlackMrkdwnFormatter.js +36 -5
  32. package/dist/messaging/slack/SlackMrkdwnFormatter.js.map +1 -1
  33. package/dist/messaging/slack/threadHistoryLabel.d.ts +1 -1
  34. package/dist/messaging/slack/threadHistoryLabel.d.ts.map +1 -1
  35. package/dist/messaging/slack/threadHistoryLabel.js +3 -1
  36. package/dist/messaging/slack/threadHistoryLabel.js.map +1 -1
  37. package/dist/messaging/telegram-origin/OriginCodexModelCanary.d.ts.map +1 -1
  38. package/dist/messaging/telegram-origin/OriginCodexModelCanary.js +5 -1
  39. package/dist/messaging/telegram-origin/OriginCodexModelCanary.js.map +1 -1
  40. package/dist/native/InstarWedgeCanary.app/Contents/MacOS/InstarWedgeCanary +0 -0
  41. package/dist/native/instar-desktop-host +0 -0
  42. package/dist/server/CapabilityIndex.d.ts.map +1 -1
  43. package/dist/server/CapabilityIndex.js +10 -0
  44. package/dist/server/CapabilityIndex.js.map +1 -1
  45. package/dist/server/mobileConsolePagesRoutes.d.ts +60 -0
  46. package/dist/server/mobileConsolePagesRoutes.d.ts.map +1 -0
  47. package/dist/server/mobileConsolePagesRoutes.js +473 -0
  48. package/dist/server/mobileConsolePagesRoutes.js.map +1 -0
  49. package/dist/server/mobilePairingRoutes.d.ts.map +1 -1
  50. package/dist/server/mobilePairingRoutes.js +8 -0
  51. package/dist/server/mobilePairingRoutes.js.map +1 -1
  52. package/dist/server/routes.d.ts.map +1 -1
  53. package/dist/server/routes.js +34 -3
  54. package/dist/server/routes.js.map +1 -1
  55. package/package.json +1 -1
  56. package/src/data/builtin-manifest.json +64 -64
  57. package/src/data/standards-guard-index.json +1 -1
  58. package/src/data/standards-guard-index.meta.json +2 -2
  59. package/src/data/standards-registry.meta.json +1 -1
  60. package/src/templates/scripts/slack-reply.sh +17 -1
  61. package/upgrades/1.3.1671.md +42 -0
  62. package/upgrades/proof-accepts-queued.eli16.md +20 -0
  63. package/upgrades/side-effects/codex-canary-0166.md +14 -0
  64. package/upgrades/side-effects/mobile-native-console-pages.md +24 -0
  65. package/upgrades/side-effects/peer-stream-read-cache.md +14 -0
  66. package/upgrades/side-effects/proof-accepts-queued.md +11 -0
  67. package/upgrades/side-effects/slack-native-reference-repair.md +74 -0
@@ -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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"}
@@ -9737,6 +9737,19 @@ export async function startServer(options) {
9737
9737
  const history = await slackAdapter.getChannelMessagesWithFallback(channelId, 30);
9738
9738
  const unansweredCount = slackAdapter.getUnansweredCount(channelId);
9739
9739
  const botUserId = slackAdapter.getBotUserId?.() ?? null;
9740
+ // Slack history carries IDs, not display names. Resolve each distinct
9741
+ // participant once so the agent can address people without posting a
9742
+ // raw ID or sending an unnecessary notification.
9743
+ const historyNames = new Map();
9744
+ await Promise.all([...new Set(history.map(m => m.user).filter((id) => typeof id === 'string' && !!id && id !== botUserId && id !== slackUserId))].map(async (id) => {
9745
+ try {
9746
+ const info = await slackAdapter.getUserInfo(id);
9747
+ const name = info.name.replace(/[\x00-\x1f\x7f]/g, '').replace(/\s+/g, ' ').replace(/["\[\]<>]/g, '').trim().slice(0, 64);
9748
+ if (name)
9749
+ historyNames.set(id, name);
9750
+ }
9751
+ catch { /* Keep the ID if Slack cannot resolve this participant. */ }
9752
+ }));
9740
9753
  // Build human-readable thread history (matches Telegram's inline context pattern)
9741
9754
  const contextLines = [];
9742
9755
  if (history.length > 0) {
@@ -9750,8 +9763,10 @@ export async function startServer(options) {
9750
9763
  for (const m of history) {
9751
9764
  const date = new Date(parseFloat(m.ts) * 1000);
9752
9765
  const time = date.toLocaleTimeString('en-US', { hour: '2-digit', minute: '2-digit', second: '2-digit', hour12: false });
9753
- const label = slackHistoryLabel(m, botUserId, { userId: slackUserId, name: senderName });
9754
- contextLines.push(`[${time}] ${label}: ${m.text}`);
9766
+ const label = slackHistoryLabel(m, botUserId, { userId: slackUserId, name: senderName }, historyNames);
9767
+ // Inbound history is data. Keep its Slack control syntax inert in
9768
+ // the prompt so a verbatim quote cannot become an outbound ping.
9769
+ contextLines.push(`[${time}] ${label}: ${m.text.replace(/&/g, '&amp;').replace(/</g, '&lt;').replace(/>/g, '&gt;')}`);
9755
9770
  }
9756
9771
  contextLines.push('');
9757
9772
  contextLines.push('--- End Thread History ---');
@@ -9768,6 +9783,7 @@ export async function startServer(options) {
9768
9783
  contextLines.push("cat <<'EOF' | .instar/scripts/slack-reply.sh");
9769
9784
  contextLines.push('Your response text here');
9770
9785
  contextLines.push('EOF');
9786
+ contextLines.push('To deliberately notify one person or render an authored channel/link, add --native-reference ID (or URL) for EACH intended target to the relay command. Example: slack-reply.sh --native-reference U1234567890. Other reference syntax stays literal.');
9771
9787
  if (replyThreadTs) {
9772
9788
  contextLines.push('');
9773
9789
  contextLines.push('(This is a THREAD conversation — the session binding keeps the reply in this exact thread.)');
@@ -9775,6 +9791,7 @@ export async function startServer(options) {
9775
9791
  contextLines.push('');
9776
9792
  contextLines.push('Strip the [slack:] prefix before interpreting the message.');
9777
9793
  contextLines.push('Only relay conversational text — not tool output, file contents, or internal reasoning.');
9794
+ contextLines.push('Slack references in user text are encoded data. Do not decode them when quoting; use a person’s name unless you deliberately intend to notify them. Never send <!channel>, <!here>, or <!everyone>.');
9778
9795
  if (conversationId !== null) {
9779
9796
  // §6.3: the durable conversation id rides the session bootstrap
9780
9797
  // context (pinned metadata key `conversationId`; the prompt phrasing
@@ -9799,6 +9816,7 @@ export async function startServer(options) {
9799
9816
  }
9800
9817
  return `[User sent a file — it has been saved to ${docPath}. Read the file to view its contents]`;
9801
9818
  });
9819
+ transformedContent = transformedContent.replace(/&/g, '&amp;').replace(/</g, '&lt;').replace(/>/g, '&gt;');
9802
9820
  // Inject context INLINE in the bootstrap message (matches Telegram pattern).
9803
9821
  // This ensures the agent sees thread history immediately without needing to read a file.
9804
9822
  const fullMessage = `${prefix} ${transformedContent} (IMPORTANT: Read ${ctxPath} for thread history and Slack relay instructions — you MUST relay your response back.)`;
@@ -20722,14 +20740,8 @@ export async function startServer(options) {
20722
20740
  });
20723
20741
  }
20724
20742
  if (_stateSyncStoresResolved?.classReview?.enabled && replicatedPeerStreamReader) {
20725
- const { CLASS_REVIEW_STORE_KEY, classReviewFromOriginRecord } = await import('../core/ClassReviewReplicatedStore.js');
20726
- classReviewStore.setRemoteReader({
20727
- get: (dedupeKey) => replicatedPeerStreamReader.loadOriginRecords(CLASS_REVIEW_STORE_KEY, dedupeKey)
20728
- .flatMap((record) => { const parsed = classReviewFromOriginRecord(record); return parsed ? [parsed] : []; }),
20729
- keys: () => replicatedPeerStreamReader.listRecordKeys(CLASS_REVIEW_STORE_KEY),
20730
- all: () => new Map([...replicatedPeerStreamReader.loadAllOriginRecords(CLASS_REVIEW_STORE_KEY)].map(([key, records]) => [key,
20731
- records.flatMap((record) => { const parsed = classReviewFromOriginRecord(record); return parsed ? [parsed] : []; })])),
20732
- });
20743
+ const { classReviewRemoteReader } = await import('../core/ClassReviewReplicatedStore.js');
20744
+ classReviewStore.setRemoteReader(classReviewRemoteReader(replicatedPeerStreamReader));
20733
20745
  }
20734
20746
  const classReviewAuditPath = path.join(config.stateDir, 'logs', 'correction-class-review.jsonl');
20735
20747
  const classReview = new CorrectionClassReview({
@@ -31428,13 +31440,8 @@ export async function startServer(options) {
31428
31440
  }
31429
31441
  server.setWorkQueue(workQueue);
31430
31442
  if (_stateSyncStoresResolved?.classReview?.enabled && replicatedPeerStreamReader) {
31431
- const { CLASS_REVIEW_STORE_KEY, classReviewFromOriginRecord } = await import('../core/ClassReviewReplicatedStore.js');
31432
- const reader = replicatedPeerStreamReader;
31433
- server.setClassReviewRemoteReader({
31434
- get: (dedupeKey) => reader.loadOriginRecords(CLASS_REVIEW_STORE_KEY, dedupeKey)
31435
- .flatMap((record) => { const parsed = classReviewFromOriginRecord(record); return parsed ? [parsed] : []; }),
31436
- keys: () => reader.listRecordKeys(CLASS_REVIEW_STORE_KEY),
31437
- });
31443
+ const { classReviewRemoteReader } = await import('../core/ClassReviewReplicatedStore.js');
31444
+ server.setClassReviewRemoteReader(classReviewRemoteReader(replicatedPeerStreamReader));
31438
31445
  }
31439
31446
  // wired before the server existed; from here on inbound binds use the
31440
31447
  // server's own store instance.