instar 1.3.1638 → 1.3.1640

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 (134) hide show
  1. package/dist/commands/server.d.ts.map +1 -1
  2. package/dist/commands/server.js +40 -8
  3. package/dist/commands/server.js.map +1 -1
  4. package/dist/core/AppConversationStore.d.ts +39 -0
  5. package/dist/core/AppConversationStore.d.ts.map +1 -1
  6. package/dist/core/AppConversationStore.js +9 -0
  7. package/dist/core/AppConversationStore.js.map +1 -1
  8. package/dist/core/AppConversationsReplicatedStore.js +1 -1
  9. package/dist/core/AppConversationsReplicatedStore.js.map +1 -1
  10. package/dist/core/AppReplyRelayInstaller.d.ts.map +1 -1
  11. package/dist/core/AppReplyRelayInstaller.js +2 -0
  12. package/dist/core/AppReplyRelayInstaller.js.map +1 -1
  13. package/dist/core/CodexLifecycleProductionComposition.d.ts +1 -1
  14. package/dist/core/CodexLifecycleProductionComposition.d.ts.map +1 -1
  15. package/dist/core/PostUpdateMigrator.d.ts.map +1 -1
  16. package/dist/core/PostUpdateMigrator.js +9 -1
  17. package/dist/core/PostUpdateMigrator.js.map +1 -1
  18. package/dist/core/SessionDrainRunner.d.ts +4 -2
  19. package/dist/core/SessionDrainRunner.d.ts.map +1 -1
  20. package/dist/core/SessionDrainRunner.js +2 -2
  21. package/dist/core/SessionDrainRunner.js.map +1 -1
  22. package/dist/core/SlackReplyRelayInstaller.d.ts.map +1 -1
  23. package/dist/core/SlackReplyRelayInstaller.js +2 -0
  24. package/dist/core/SlackReplyRelayInstaller.js.map +1 -1
  25. package/dist/core/TopicProfileOrchestrator.d.ts.map +1 -1
  26. package/dist/core/TopicProfileOrchestrator.js +2 -1
  27. package/dist/core/TopicProfileOrchestrator.js.map +1 -1
  28. package/dist/core/types.d.ts +16 -0
  29. package/dist/core/types.d.ts.map +1 -1
  30. package/dist/core/types.js.map +1 -1
  31. package/dist/data/standards-guard-index.json +1 -1
  32. package/dist/data/standards-guard-index.meta.json +2 -2
  33. package/dist/data/standards-registry.meta.json +1 -1
  34. package/dist/feedback-factory/execute/ConfinedRunner.d.ts +4 -1
  35. package/dist/feedback-factory/execute/ConfinedRunner.d.ts.map +1 -1
  36. package/dist/feedback-factory/execute/ConfinedRunner.js +40 -8
  37. package/dist/feedback-factory/execute/ConfinedRunner.js.map +1 -1
  38. package/dist/feedback-factory/execute/FeedbackExecutorService.js +4 -4
  39. package/dist/feedback-factory/execute/FeedbackExecutorService.js.map +1 -1
  40. package/dist/feedback-factory/execute/executePolicy.d.ts +3 -0
  41. package/dist/feedback-factory/execute/executePolicy.d.ts.map +1 -1
  42. package/dist/feedback-factory/execute/executePolicy.js +3 -0
  43. package/dist/feedback-factory/execute/executePolicy.js.map +1 -1
  44. package/dist/messaging/messageOrigin.d.ts +94 -0
  45. package/dist/messaging/messageOrigin.d.ts.map +1 -0
  46. package/dist/messaging/messageOrigin.js +246 -0
  47. package/dist/messaging/messageOrigin.js.map +1 -0
  48. package/dist/messaging/plainNoticeCheck.d.ts +9 -0
  49. package/dist/messaging/plainNoticeCheck.d.ts.map +1 -0
  50. package/dist/messaging/plainNoticeCheck.js +68 -0
  51. package/dist/messaging/plainNoticeCheck.js.map +1 -0
  52. package/dist/messaging/shared/isSystemOrProxyMessage.d.ts +0 -24
  53. package/dist/messaging/shared/isSystemOrProxyMessage.d.ts.map +1 -1
  54. package/dist/messaging/shared/isSystemOrProxyMessage.js +6 -3
  55. package/dist/messaging/shared/isSystemOrProxyMessage.js.map +1 -1
  56. package/dist/messaging/slack/FileHandler.d.ts +3 -1
  57. package/dist/messaging/slack/FileHandler.d.ts.map +1 -1
  58. package/dist/messaging/slack/FileHandler.js +9 -1
  59. package/dist/messaging/slack/FileHandler.js.map +1 -1
  60. package/dist/messaging/slack/SlackAdapter.d.ts +9 -0
  61. package/dist/messaging/slack/SlackAdapter.d.ts.map +1 -1
  62. package/dist/messaging/slack/SlackAdapter.js +60 -4
  63. package/dist/messaging/slack/SlackAdapter.js.map +1 -1
  64. package/dist/messaging/slack/SlackOriginLedger.d.ts +97 -0
  65. package/dist/messaging/slack/SlackOriginLedger.d.ts.map +1 -0
  66. package/dist/messaging/slack/SlackOriginLedger.js +298 -0
  67. package/dist/messaging/slack/SlackOriginLedger.js.map +1 -0
  68. package/dist/messaging/telegram-origin/OriginAwareness.d.ts +3 -0
  69. package/dist/messaging/telegram-origin/OriginAwareness.d.ts.map +1 -1
  70. package/dist/messaging/telegram-origin/OriginAwareness.js +14 -0
  71. package/dist/messaging/telegram-origin/OriginAwareness.js.map +1 -1
  72. package/dist/messaging/telegram-origin/OriginStore.d.ts +5 -0
  73. package/dist/messaging/telegram-origin/OriginStore.d.ts.map +1 -1
  74. package/dist/messaging/telegram-origin/OriginStore.js +2 -1
  75. package/dist/messaging/telegram-origin/OriginStore.js.map +1 -1
  76. package/dist/messaging/telegram-origin/OriginStore.worker.js +1 -1
  77. package/dist/messaging/telegram-origin/OriginStore.worker.js.map +1 -1
  78. package/dist/messaging/telegram-origin/OriginStoreBackend.d.ts +14 -0
  79. package/dist/messaging/telegram-origin/OriginStoreBackend.d.ts.map +1 -1
  80. package/dist/messaging/telegram-origin/OriginStoreBackend.js +45 -0
  81. package/dist/messaging/telegram-origin/OriginStoreBackend.js.map +1 -1
  82. package/dist/messaging/telegram-origin/TelegramOriginService.d.ts +4 -0
  83. package/dist/messaging/telegram-origin/TelegramOriginService.d.ts.map +1 -1
  84. package/dist/messaging/telegram-origin/TelegramOriginService.js +10 -2
  85. package/dist/messaging/telegram-origin/TelegramOriginService.js.map +1 -1
  86. package/dist/messaging/userNotices.d.ts +47 -0
  87. package/dist/messaging/userNotices.d.ts.map +1 -0
  88. package/dist/messaging/userNotices.js +79 -0
  89. package/dist/messaging/userNotices.js.map +1 -0
  90. package/dist/native/InstarWedgeCanary.app/Contents/MacOS/InstarWedgeCanary +0 -0
  91. package/dist/native/instar-desktop-host +0 -0
  92. package/dist/scaffold/templates.d.ts.map +1 -1
  93. package/dist/scaffold/templates.js +4 -1
  94. package/dist/scaffold/templates.js.map +1 -1
  95. package/dist/server/AgentServer.d.ts.map +1 -1
  96. package/dist/server/AgentServer.js +3 -0
  97. package/dist/server/AgentServer.js.map +1 -1
  98. package/dist/server/mobileConversationRoutes.d.ts +17 -1
  99. package/dist/server/mobileConversationRoutes.d.ts.map +1 -1
  100. package/dist/server/mobileConversationRoutes.js +31 -6
  101. package/dist/server/mobileConversationRoutes.js.map +1 -1
  102. package/dist/server/mobileSlackRoutes.d.ts +13 -0
  103. package/dist/server/mobileSlackRoutes.d.ts.map +1 -1
  104. package/dist/server/mobileSlackRoutes.js +14 -1
  105. package/dist/server/mobileSlackRoutes.js.map +1 -1
  106. package/dist/server/originDisplayPreferences.d.ts.map +1 -1
  107. package/dist/server/originDisplayPreferences.js +19 -8
  108. package/dist/server/originDisplayPreferences.js.map +1 -1
  109. package/dist/server/replyOrigin.d.ts +39 -0
  110. package/dist/server/replyOrigin.d.ts.map +1 -0
  111. package/dist/server/replyOrigin.js +89 -0
  112. package/dist/server/replyOrigin.js.map +1 -0
  113. package/dist/server/routes.d.ts.map +1 -1
  114. package/dist/server/routes.js +162 -4
  115. package/dist/server/routes.js.map +1 -1
  116. package/package.json +4 -3
  117. package/scripts/blocking-decision-surfaces-baseline.json +3 -3
  118. package/scripts/lint-plain-user-notices.mjs +191 -0
  119. package/scripts/plain-user-notices-baseline.json +6 -0
  120. package/src/data/builtin-manifest.json +66 -66
  121. package/src/data/plain-notice-terms.json +38 -0
  122. package/src/data/standards-guard-index.json +1 -1
  123. package/src/data/standards-guard-index.meta.json +2 -2
  124. package/src/data/standards-registry.meta.json +1 -1
  125. package/src/scaffold/templates.ts +5 -1
  126. package/src/templates/scripts/app-reply.sh +17 -0
  127. package/src/templates/scripts/slack-reply.sh +23 -0
  128. package/upgrades/1.3.1639.md +24 -0
  129. package/upgrades/1.3.1640.md +25 -0
  130. package/upgrades/feedback-confined-timeout.eli16.md +7 -0
  131. package/upgrades/side-effects/feedback-confined-timeout.md +80 -0
  132. package/upgrades/side-effects/message-origin-all-platforms.md +92 -0
  133. package/upgrades/side-effects/plain-user-notices.eli16.md +15 -0
  134. package/upgrades/side-effects/plain-user-notices.md +76 -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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"}
@@ -85,6 +85,7 @@ import { slackReplyRelayReadiness } from '../core/SlackReplyRelayInstaller.js';
85
85
  import { claimSuspensionExcludesPin } from '../core/TopicClaimAnnotationStore.js';
86
86
  import { parseProfileTrigger, platformMessageIdFrom } from '../core/topicProfileIngress.js';
87
87
  import { NewTopicDefaultStore, evaluateSessionPoolLocalClaim, createSpawnForTopic, createDashboardPoolClaimOps, seedTopicProfileAtCreation } from '../core/dashboardTopicProfile.js';
88
+ import { movedMachinesMidStepNotice, SESSION_RESTARTING_NOTICE, SESSION_BACK_NOTICE } from '../messaging/userNotices.js';
88
89
  import { parseDashboardCreatePayload, safeMachineLabel, createDashboardCreateStartRunner } from '../core/dashboardMachineChoice.js';
89
90
  import { slugifyChannelName } from '../messaging/slack/sanitize.js';
90
91
  import { TopicProfileOrchestrator, resolvedToApplied, } from '../core/TopicProfileOrchestrator.js';
@@ -1563,14 +1564,18 @@ async function respawnSessionForTopic(sessionManager, telegram, targetSession, t
1563
1564
  : latestMessage;
1564
1565
  const newSessionName = await spawnSessionForTopic(sessionManager, telegram, topicName, topicId, effectiveMessage, topicMemory, userProfile, undefined, (options?.configHome || options?.accountId) ? { configHome: options?.configHome, accountId: options?.accountId } : undefined, options?.awaitInitialInjection ? { awaitInitialInjection: true } : undefined);
1565
1566
  telegram.registerTopicSession(topicId, newSessionName, topicName);
1566
- if (!options?.silent) {
1567
+ // `quietAfterRespawn`: the caller already told the person a restart is under way
1568
+ // for their message (the dead-session and too-long paths), and the reply itself
1569
+ // confirms it — a second "back" note is lifecycle narration (Near-Silent
1570
+ // Notifications; UX standard Rule 8). Every other caller confirms once.
1571
+ if (!options?.silent && !options?.quietAfterRespawn) {
1567
1572
  // The respawn already succeeded. A held or failed notice must not turn it
1568
1573
  // into a reported failure (the caller would respawn again: a duplicate session).
1569
1574
  try {
1570
- await telegram.sendToTopic(topicId, `Session respawned.`);
1575
+ await telegram.sendToTopic(topicId, SESSION_BACK_NOTICE);
1571
1576
  }
1572
1577
  catch (err) {
1573
- console.warn(`[telegram→session] Respawned for topic ${topicId}, but the "Session respawned." notice was not sent: ${err instanceof Error ? err.message : String(err)}`);
1578
+ console.warn(`[telegram→session] Respawned for topic ${topicId}, but the back-up notice was not sent: ${err instanceof Error ? err.message : String(err)}`);
1574
1579
  }
1575
1580
  }
1576
1581
  console.log(`[telegram→session] Respawned "${newSessionName}" for topic ${topicId}`);
@@ -2834,7 +2839,7 @@ getHubClassifierDeps) {
2834
2839
  if (_topicResumeMap) {
2835
2840
  _topicResumeMap.remove(topicId);
2836
2841
  }
2837
- respawnSessionForTopic(sessionManager, telegram, targetSession, topicId, text, topicMemory, resolvedUser ?? undefined)
2842
+ respawnSessionForTopic(sessionManager, telegram, targetSession, topicId, text, topicMemory, resolvedUser ?? undefined, undefined, { quietAfterRespawn: true })
2838
2843
  .then(() => confirmLocalSessionPoolClaim())
2839
2844
  .catch(err => {
2840
2845
  console.error(`[telegram→session] Context exhaustion respawn failed:`, err);
@@ -2858,7 +2863,7 @@ getHubClassifierDeps) {
2858
2863
  return;
2859
2864
  }
2860
2865
  const _spawnTokB = spawningTopics.add(topicId);
2861
- sendDeterministicTelegramNotice(telegram, 'session-lifecycle', topicId, `🔄 Session restarting — message queued.`).catch(() => {
2866
+ sendDeterministicTelegramNotice(telegram, 'session-lifecycle', topicId, SESSION_RESTARTING_NOTICE).catch(() => {
2862
2867
  DegradationReporter.getInstance().report({
2863
2868
  feature: 'telegram-session-lifecycle-notice',
2864
2869
  primary: 'Confirm delivery of the recorded session lifecycle notice',
@@ -2867,7 +2872,7 @@ getHubClassifierDeps) {
2867
2872
  impact: 'The notice may be held or uncertain; no replacement send is authorized',
2868
2873
  });
2869
2874
  });
2870
- respawnSessionForTopic(sessionManager, telegram, targetSession, topicId, text, topicMemory, resolvedUser ?? undefined)
2875
+ respawnSessionForTopic(sessionManager, telegram, targetSession, topicId, text, topicMemory, resolvedUser ?? undefined, undefined, { quietAfterRespawn: true })
2871
2876
  .then(() => confirmLocalSessionPoolClaim())
2872
2877
  .catch(err => {
2873
2878
  console.error(`[telegram→session] Respawn failed:`, err);
@@ -8954,6 +8959,24 @@ export async function startServer(options) {
8954
8959
  try {
8955
8960
  const { SlackAdapter } = await import('../messaging/slack/index.js');
8956
8961
  slackAdapter = new SlackAdapter(slackConfig.config, config.stateDir);
8962
+ // message-origin-all-platforms §3: the Slack origin ledger's machine identity, the live
8963
+ // fail-closed switch (operator exception) and the degradation reporter.
8964
+ {
8965
+ const { localMachineIdentity } = await import('../server/replyOrigin.js');
8966
+ const originMachine = localMachineIdentity(config.stateDir);
8967
+ slackAdapter.setOriginContext({
8968
+ machine: () => {
8969
+ const local = originMachine();
8970
+ return { id: local.id, name: telegramOriginBoot?.runtime.options.identity.originMachineName ?? local.name };
8971
+ },
8972
+ failClosed: () => liveConfig.get('messageOrigin.recording.slackFailClosed', true) !== false,
8973
+ report: (feature, detail) => DegradationReporter.getInstance().report({
8974
+ feature, primary: 'Every Slack message records which machine, harness and model wrote it before it is sent',
8975
+ fallback: 'The send is refused (or, with messageOrigin.recording.slackFailClosed false, sent unrecorded)',
8976
+ reason: detail, impact: 'Slack messages may not be delivered until the origin ledger can be written.',
8977
+ }),
8978
+ });
8979
+ }
8957
8980
  // ── Slack org permission gate (Slice 0) — DARK by default ──────────
8958
8981
  // Attached only when `permissionGate.observeOnly` (or `.enforce`) is set in
8959
8982
  // the Slack config. Observe-only logs what the gate WOULD decide for every
@@ -24987,12 +25010,21 @@ export async function startServer(options) {
24987
25010
  });
24988
25011
  },
24989
25012
  markInterrupted: (topic) => { autoMod.markAutonomousInterruptedMidTask(config.stateDir, topic); },
24990
- notifyInterrupted: (topic, target, detail) => {
25013
+ notifyInterrupted: (topic, target) => {
24991
25014
  const topicNum = Number(topic);
24992
25015
  if (!telegram || !Number.isFinite(topicNum))
24993
25016
  return;
25017
+ // Sent even when the session announced the move itself: that note is
25018
+ // optional and written BEFORE the cut, so this is the only record that
25019
+ // the last step was cut off. The person sees the machine's nickname
25020
+ // (never its id — Rule 7); the bound and timings stay in the audit row.
25021
+ let targetName = null;
25022
+ try {
25023
+ targetName = meshIdMgr.getActiveMachines().find((m) => m.machineId === target)?.entry.nickname ?? null;
25024
+ }
25025
+ catch { /* @silent-fallback-ok — unresolved name is stated plainly ("another machine"), per Rule 7 */ }
24994
25026
  void telegram
24995
- .sendToTopic(topicNum, `This conversation moved machines mid-task (${detail}). Work resumes on the new machine — the final turn before the move may be partial.`)
25027
+ .sendToTopic(topicNum, movedMachinesMidStepNotice(targetName))
24996
25028
  .catch(() => { });
24997
25029
  },
24998
25030
  transferDeliveryLedger: createInboundDeliveryTransferStep({