@tloncorp/openclaw 0.4.2 → 0.6.0

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 (110) hide show
  1. package/README.md +130 -141
  2. package/dist/index.js +157 -132
  3. package/dist/index.js.map +1 -1
  4. package/dist/setup-api.js +2 -2
  5. package/dist/setup-entry.js +2 -2
  6. package/dist/setup-entry.js.map +1 -1
  7. package/dist/src/account-fields.js +7 -3
  8. package/dist/src/account-fields.js.map +1 -1
  9. package/dist/src/actions.js +73 -52
  10. package/dist/src/actions.js.map +1 -1
  11. package/dist/src/channel.js +51 -39
  12. package/dist/src/channel.js.map +1 -1
  13. package/dist/src/channel.runtime.js +61 -32
  14. package/dist/src/channel.runtime.js.map +1 -1
  15. package/dist/src/config-schema.js +43 -4
  16. package/dist/src/config-schema.js.map +1 -1
  17. package/dist/src/effective-owner.js.map +1 -1
  18. package/dist/src/gateway-status.js +55 -7
  19. package/dist/src/gateway-status.js.map +1 -1
  20. package/dist/src/monitor/approval.js +71 -62
  21. package/dist/src/monitor/approval.js.map +1 -1
  22. package/dist/src/monitor/command-auth.js +7 -7
  23. package/dist/src/monitor/command-auth.js.map +1 -1
  24. package/dist/src/monitor/command-bridge.js +3 -2
  25. package/dist/src/monitor/command-bridge.js.map +1 -1
  26. package/dist/src/monitor/computing-presence.js +76 -12
  27. package/dist/src/monitor/computing-presence.js.map +1 -1
  28. package/dist/src/monitor/discovery.js +16 -9
  29. package/dist/src/monitor/discovery.js.map +1 -1
  30. package/dist/src/monitor/history.js +130 -21
  31. package/dist/src/monitor/history.js.map +1 -1
  32. package/dist/src/monitor/index.js +2766 -2310
  33. package/dist/src/monitor/index.js.map +1 -1
  34. package/dist/src/monitor/media.js +106 -78
  35. package/dist/src/monitor/media.js.map +1 -1
  36. package/dist/src/monitor/nudge-runner.js +36 -27
  37. package/dist/src/monitor/nudge-runner.js.map +1 -1
  38. package/dist/src/monitor/nudge-state.js +7 -11
  39. package/dist/src/monitor/nudge-state.js.map +1 -1
  40. package/dist/src/monitor/owner-reply-persistence.js +27 -26
  41. package/dist/src/monitor/owner-reply-persistence.js.map +1 -1
  42. package/dist/src/monitor/processed-messages.js.map +1 -1
  43. package/dist/src/monitor/settings-sync.js +1 -8
  44. package/dist/src/monitor/settings-sync.js.map +1 -1
  45. package/dist/src/monitor/utils.js +123 -67
  46. package/dist/src/monitor/utils.js.map +1 -1
  47. package/dist/src/nudge-decision.js +40 -43
  48. package/dist/src/nudge-decision.js.map +1 -1
  49. package/dist/src/nudge-messages.js +9 -9
  50. package/dist/src/nudge-scheduler.js.map +1 -1
  51. package/dist/src/owner-listen-command.js +84 -0
  52. package/dist/src/owner-listen-command.js.map +1 -0
  53. package/dist/src/pending-nudge.js.map +1 -1
  54. package/dist/src/runtime.js +10 -6
  55. package/dist/src/runtime.js.map +1 -1
  56. package/dist/src/session-roles.js +2 -1
  57. package/dist/src/session-roles.js.map +1 -1
  58. package/dist/src/settings.js +239 -96
  59. package/dist/src/settings.js.map +1 -1
  60. package/dist/src/setup-core.js +32 -32
  61. package/dist/src/setup-core.js.map +1 -1
  62. package/dist/src/setup-surface.js +19 -19
  63. package/dist/src/setup-surface.js.map +1 -1
  64. package/dist/src/shared-state.js +46 -0
  65. package/dist/src/shared-state.js.map +1 -0
  66. package/dist/src/targets.js +34 -10
  67. package/dist/src/targets.js.map +1 -1
  68. package/dist/src/telemetry.js +17 -14
  69. package/dist/src/telemetry.js.map +1 -1
  70. package/dist/src/tlon-binary.js +20 -12
  71. package/dist/src/tlon-binary.js.map +1 -1
  72. package/dist/src/tlon-tool-guard.js +5 -5
  73. package/dist/src/tool-trace.js +17 -13
  74. package/dist/src/tool-trace.js.map +1 -1
  75. package/dist/src/types.js +40 -11
  76. package/dist/src/types.js.map +1 -1
  77. package/dist/src/urbit/api-client.js +16 -12
  78. package/dist/src/urbit/api-client.js.map +1 -1
  79. package/dist/src/urbit/auth.js +9 -9
  80. package/dist/src/urbit/auth.js.map +1 -1
  81. package/dist/src/urbit/base-url.js +11 -11
  82. package/dist/src/urbit/base-url.js.map +1 -1
  83. package/dist/src/urbit/channel-ops.js +25 -19
  84. package/dist/src/urbit/channel-ops.js.map +1 -1
  85. package/dist/src/urbit/context.js +8 -8
  86. package/dist/src/urbit/context.js.map +1 -1
  87. package/dist/src/urbit/errors.js +33 -7
  88. package/dist/src/urbit/errors.js.map +1 -1
  89. package/dist/src/urbit/fetch.js +3 -3
  90. package/dist/src/urbit/fetch.js.map +1 -1
  91. package/dist/src/urbit/http-poke.js +10 -10
  92. package/dist/src/urbit/http-poke.js.map +1 -1
  93. package/dist/src/urbit/send.js +27 -23
  94. package/dist/src/urbit/send.js.map +1 -1
  95. package/dist/src/urbit/sse-client.js +45 -41
  96. package/dist/src/urbit/sse-client.js.map +1 -1
  97. package/dist/src/urbit/story.js +31 -30
  98. package/dist/src/urbit/story.js.map +1 -1
  99. package/dist/src/urbit/upload.js +8 -8
  100. package/dist/src/urbit/upload.js.map +1 -1
  101. package/dist/src/version.generated.js +2 -1
  102. package/dist/src/version.generated.js.map +1 -1
  103. package/openclaw.plugin.json +312 -2
  104. package/package.json +37 -7
  105. package/dist/src/heartbeat-telemetry.js +0 -155
  106. package/dist/src/heartbeat-telemetry.js.map +0 -1
  107. package/dist/src/nudge-candidate.js +0 -109
  108. package/dist/src/nudge-candidate.js.map +0 -1
  109. package/dist/src/onboarding.js +0 -178
  110. package/dist/src/onboarding.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"processed-messages.js","sourceRoot":"","sources":["../../../src/monitor/processed-messages.ts"],"names":[],"mappings":"AAMA,MAAM,UAAU,6BAA6B,CAAC,KAAK,GAAG,IAAI;IACxD,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAC;IAC/B,MAAM,KAAK,GAAa,EAAE,CAAC;IAE3B,MAAM,IAAI,GAAG,CAAC,EAAkB,EAAE,EAAE;QAClC,MAAM,OAAO,GAAG,EAAE,EAAE,IAAI,EAAE,CAAC;QAC3B,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,OAAO,IAAI,CAAC;QACd,CAAC;QACD,IAAI,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC;YACtB,OAAO,KAAK,CAAC;QACf,CAAC;QACD,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QAClB,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACpB,IAAI,KAAK,CAAC,MAAM,GAAG,KAAK,EAAE,CAAC;YACzB,MAAM,QAAQ,GAAG,KAAK,CAAC,MAAM,GAAG,KAAK,CAAC;YACtC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;gBACrC,MAAM,MAAM,GAAG,KAAK,CAAC,KAAK,EAAE,CAAC;gBAC7B,IAAI,MAAM,EAAE,CAAC;oBACX,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;gBACtB,CAAC;YACH,CAAC;QACH,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC,CAAC;IAEF,MAAM,GAAG,GAAG,CAAC,EAAkB,EAAE,EAAE;QACjC,MAAM,OAAO,GAAG,EAAE,EAAE,IAAI,EAAE,CAAC;QAC3B,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,OAAO,KAAK,CAAC;QACf,CAAC;QACD,OAAO,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;IAC3B,CAAC,CAAC;IAEF,OAAO;QACL,IAAI;QACJ,GAAG;QACH,IAAI,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,IAAI;KACtB,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"processed-messages.js","sourceRoot":"","sources":["../../../src/monitor/processed-messages.ts"],"names":[],"mappings":"AAMA,MAAM,UAAU,6BAA6B,CAC3C,KAAK,GAAG,IAAI;IAEZ,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAC;IAC/B,MAAM,KAAK,GAAa,EAAE,CAAC;IAE3B,MAAM,IAAI,GAAG,CAAC,EAAkB,EAAE,EAAE;QAClC,MAAM,OAAO,GAAG,EAAE,EAAE,IAAI,EAAE,CAAC;QAC3B,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,OAAO,IAAI,CAAC;QACd,CAAC;QACD,IAAI,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC;YACtB,OAAO,KAAK,CAAC;QACf,CAAC;QACD,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QAClB,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACpB,IAAI,KAAK,CAAC,MAAM,GAAG,KAAK,EAAE,CAAC;YACzB,MAAM,QAAQ,GAAG,KAAK,CAAC,MAAM,GAAG,KAAK,CAAC;YACtC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;gBACrC,MAAM,MAAM,GAAG,KAAK,CAAC,KAAK,EAAE,CAAC;gBAC7B,IAAI,MAAM,EAAE,CAAC;oBACX,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;gBACtB,CAAC;YACH,CAAC;QACH,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC,CAAC;IAEF,MAAM,GAAG,GAAG,CAAC,EAAkB,EAAE,EAAE;QACjC,MAAM,OAAO,GAAG,EAAE,EAAE,IAAI,EAAE,CAAC;QAC3B,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,OAAO,KAAK,CAAC;QACf,CAAC;QACD,OAAO,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;IAC3B,CAAC,CAAC;IAEF,OAAO;QACL,IAAI;QACJ,GAAG;QACH,IAAI,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,IAAI;KACtB,CAAC;AACJ,CAAC"}
@@ -1,11 +1,4 @@
1
- /**
2
- * Pure helper for settings mirror synchronization.
3
- *
4
- * Detects ownerShip and pendingNudge transitions from the settings mirror.
5
- * The scheduler no longer routes through this helper for lastNudgeStage —
6
- * the authoritative stage lives in a fresh scry plus a local shadow.
7
- */
8
- import { normalizeShip } from "../targets.js";
1
+ import { normalizeShip } from '../targets.js';
9
2
  export function resolveSettingsMirrorSync(params) {
10
3
  const { prevSettings, newSettings, fileConfigOwnerShip } = params;
11
4
  // ownerShip: compare string values (normalize for comparison)
@@ -1 +1 @@
1
- {"version":3,"file":"settings-sync.js","sourceRoot":"","sources":["../../../src/monitor/settings-sync.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAIH,OAAO,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAS9C,MAAM,UAAU,yBAAyB,CAAC,MAIzC;IACC,MAAM,EAAE,YAAY,EAAE,WAAW,EAAE,mBAAmB,EAAE,GAAG,MAAM,CAAC;IAElE,8DAA8D;IAC9D,MAAM,SAAS,GAAG,YAAY,CAAC,SAAS,CAAC;IACzC,MAAM,QAAQ,GAAG,WAAW,CAAC,SAAS,CAAC;IACvC,MAAM,mBAAmB,GAAG,SAAS,CAAC,CAAC,CAAC,aAAa,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IACxE,MAAM,kBAAkB,GAAG,QAAQ,CAAC,CAAC,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IACrE,MAAM,gBAAgB,GAAG,mBAAmB,KAAK,kBAAkB,CAAC;IACpE,MAAM,kBAAkB,GAAkB,kBAAkB,IAAI,mBAAmB,CAAC;IAEpF,iFAAiF;IACjF,MAAM,mBAAmB,GAAG,YAAY,CAAC,YAAY,KAAK,WAAW,CAAC,YAAY,CAAC;IACnF,MAAM,YAAY,GAAwB,WAAW,CAAC,YAAY,IAAI,IAAI,CAAC;IAE3E,OAAO;QACL,gBAAgB;QAChB,kBAAkB;QAClB,mBAAmB;QACnB,YAAY;KACb,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"settings-sync.js","sourceRoot":"","sources":["../../../src/monitor/settings-sync.ts"],"names":[],"mappings":"AASA,OAAO,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAS9C,MAAM,UAAU,yBAAyB,CAAC,MAIzC;IACC,MAAM,EAAE,YAAY,EAAE,WAAW,EAAE,mBAAmB,EAAE,GAAG,MAAM,CAAC;IAElE,8DAA8D;IAC9D,MAAM,SAAS,GAAG,YAAY,CAAC,SAAS,CAAC;IACzC,MAAM,QAAQ,GAAG,WAAW,CAAC,SAAS,CAAC;IACvC,MAAM,mBAAmB,GAAG,SAAS,CAAC,CAAC,CAAC,aAAa,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IACxE,MAAM,kBAAkB,GAAG,QAAQ,CAAC,CAAC,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IACrE,MAAM,gBAAgB,GAAG,mBAAmB,KAAK,kBAAkB,CAAC;IACpE,MAAM,kBAAkB,GACtB,kBAAkB,IAAI,mBAAmB,CAAC;IAE5C,iFAAiF;IACjF,MAAM,mBAAmB,GACvB,YAAY,CAAC,YAAY,KAAK,WAAW,CAAC,YAAY,CAAC;IACzD,MAAM,YAAY,GAAwB,WAAW,CAAC,YAAY,IAAI,IAAI,CAAC;IAE3E,OAAO;QACL,gBAAgB;QAChB,kBAAkB;QAClB,mBAAmB;QACnB,YAAY;KACb,CAAC;AACJ,CAAC"}
@@ -1,4 +1,4 @@
1
- import { normalizeShip } from "../targets.js";
1
+ import { normalizeShip } from '../targets.js';
2
2
  // Extract all cites from message content
3
3
  export function extractCites(content) {
4
4
  if (!content || !Array.isArray(content)) {
@@ -6,28 +6,32 @@ export function extractCites(content) {
6
6
  }
7
7
  const cites = [];
8
8
  for (const verse of content) {
9
- if (verse?.block?.cite && typeof verse.block.cite === "object") {
9
+ if (verse?.block?.cite && typeof verse.block.cite === 'object') {
10
10
  const cite = verse.block.cite;
11
- if (cite.chan && typeof cite.chan === "object") {
11
+ if (cite.chan && typeof cite.chan === 'object') {
12
12
  const { nest, where } = cite.chan;
13
13
  const whereMatch = where?.match(/\/msg\/(~[a-z-]+)\/(.+)/);
14
14
  cites.push({
15
- type: "chan",
15
+ type: 'chan',
16
16
  nest,
17
17
  where,
18
18
  author: whereMatch?.[1],
19
19
  postId: whereMatch?.[2],
20
20
  });
21
21
  }
22
- else if (cite.group && typeof cite.group === "string") {
23
- cites.push({ type: "group", group: cite.group });
22
+ else if (cite.group && typeof cite.group === 'string') {
23
+ cites.push({ type: 'group', group: cite.group });
24
24
  }
25
- else if (cite.desk && typeof cite.desk === "object") {
26
- cites.push({ type: "desk", flag: cite.desk.flag, where: cite.desk.where });
25
+ else if (cite.desk && typeof cite.desk === 'object') {
26
+ cites.push({
27
+ type: 'desk',
28
+ flag: cite.desk.flag,
29
+ where: cite.desk.where,
30
+ });
27
31
  }
28
- else if (cite.bait && typeof cite.bait === "object") {
32
+ else if (cite.bait && typeof cite.bait === 'object') {
29
33
  cites.push({
30
- type: "bait",
34
+ type: 'bait',
31
35
  group: cite.bait.group,
32
36
  nest: cite.bait.graph,
33
37
  where: cite.bait.where,
@@ -39,27 +43,29 @@ export function extractCites(content) {
39
43
  }
40
44
  export function formatModelName(modelString) {
41
45
  if (!modelString) {
42
- return "AI";
46
+ return 'AI';
43
47
  }
44
- const modelName = modelString.includes("/") ? modelString.split("/")[1] : modelString;
48
+ const modelName = modelString.includes('/')
49
+ ? modelString.split('/')[1]
50
+ : modelString;
45
51
  const modelMappings = {
46
- "claude-opus-4-5": "Claude Opus 4.5",
47
- "claude-sonnet-4-5": "Claude Sonnet 4.5",
48
- "claude-sonnet-3-5": "Claude Sonnet 3.5",
49
- "gpt-4o": "GPT-4o",
50
- "gpt-4-turbo": "GPT-4 Turbo",
51
- "gpt-4": "GPT-4",
52
- "gemini-2.0-flash": "Gemini 2.0 Flash",
53
- "gemini-pro": "Gemini Pro",
52
+ 'claude-opus-4-5': 'Claude Opus 4.5',
53
+ 'claude-sonnet-4-5': 'Claude Sonnet 4.5',
54
+ 'claude-sonnet-3-5': 'Claude Sonnet 3.5',
55
+ 'gpt-4o': 'GPT-4o',
56
+ 'gpt-4-turbo': 'GPT-4 Turbo',
57
+ 'gpt-4': 'GPT-4',
58
+ 'gemini-2.0-flash': 'Gemini 2.0 Flash',
59
+ 'gemini-pro': 'Gemini Pro',
54
60
  };
55
61
  if (modelMappings[modelName]) {
56
62
  return modelMappings[modelName];
57
63
  }
58
64
  return modelName
59
- .replace(/-/g, " ")
60
- .split(" ")
65
+ .replace(/-/g, ' ')
66
+ .split(' ')
61
67
  .map((word) => word.charAt(0).toUpperCase() + word.slice(1))
62
- .join(" ");
68
+ .join(' ');
63
69
  }
64
70
  export function isBotMentioned(messageText, botShipName, nickname) {
65
71
  if (!messageText || !botShipName) {
@@ -67,36 +73,83 @@ export function isBotMentioned(messageText, botShipName, nickname) {
67
73
  }
68
74
  // Check for ship mention
69
75
  const normalizedBotShip = normalizeShip(botShipName);
70
- const escapedShip = normalizedBotShip.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
71
- const mentionPattern = new RegExp(`(^|\\s)${escapedShip}(?=\\s|$)`, "i");
76
+ const escapedShip = normalizedBotShip.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
77
+ const mentionPattern = new RegExp(`(^|\\s)${escapedShip}(?=\\s|$)`, 'i');
72
78
  if (mentionPattern.test(messageText)) {
73
79
  return true;
74
80
  }
75
81
  // Check for nickname mention (case-insensitive, word boundary)
76
82
  if (nickname) {
77
- const escapedNickname = nickname.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
78
- const nicknamePattern = new RegExp(`(^|\\s)${escapedNickname}(?=\\s|$|[,!?.])`, "i");
83
+ const escapedNickname = nickname.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
84
+ const nicknamePattern = new RegExp(`(^|\\s)${escapedNickname}(?=\\s|$|[,!?.])`, 'i');
79
85
  if (nicknamePattern.test(messageText)) {
80
86
  return true;
81
87
  }
82
88
  }
83
89
  return false;
84
90
  }
91
+ /**
92
+ * Decide whether to engage on a group-channel message.
93
+ *
94
+ * - Mentions and participated threads always engage (legacy behavior).
95
+ * - Owner blob-only messages engage when the caller asserts `isOwnerBlob`
96
+ * (preserves existing behavior — caller still computes that flag).
97
+ * - Otherwise: engage when the sender is the owner AND the channel host is
98
+ * the owner or the bot itself AND the global owner-listen toggle is on AND
99
+ * the channel is not in the per-channel disabled list.
100
+ */
101
+ export function shouldEngageInGroup(opts) {
102
+ if (opts.mentioned) {
103
+ return { engage: true, reason: 'mention' };
104
+ }
105
+ if (opts.inParticipatedThread) {
106
+ return { engage: true, reason: 'thread' };
107
+ }
108
+ if (opts.isOwnerBlob) {
109
+ return { engage: true, reason: 'owner-blob' };
110
+ }
111
+ if (!opts.ownerListenEnabled) {
112
+ return { engage: false, reason: 'skip' };
113
+ }
114
+ const isOwner = opts.ownerShip !== null && opts.senderShip === opts.ownerShip;
115
+ const isOwned = opts.groupHost !== null &&
116
+ (opts.groupHost === opts.ownerShip || opts.groupHost === opts.botShipName);
117
+ const disabled = opts.ownerListenDisabledChannels.has(opts.channelNest);
118
+ if (isOwner && isOwned && !disabled) {
119
+ return { engage: true, reason: 'owner-owned' };
120
+ }
121
+ return { engage: false, reason: 'skip' };
122
+ }
123
+ /** Parse "tlon:group:<nest>" → "<nest>", else null. */
124
+ export function nestFromCtxFrom(from) {
125
+ if (!from) {
126
+ return null;
127
+ }
128
+ const m = /^tlon:group:(.+)$/.exec(from);
129
+ return m ? m[1] : null;
130
+ }
131
+ /** True for the exact /owner-listen slash command, with optional args. */
132
+ export function isOwnerListenSlashCommand(messageText) {
133
+ return /^\/owner-listen(?:\s|$)/i.test(messageText.trim());
134
+ }
85
135
  /**
86
136
  * Strip bot ship mention from message text for command detection.
87
137
  * "~bot-ship /status" → "/status"
88
138
  */
89
139
  export function stripBotMention(messageText, botShipName) {
90
- if (!messageText || !botShipName)
140
+ if (!messageText || !botShipName) {
91
141
  return messageText;
92
- return messageText.replace(normalizeShip(botShipName), "").trim();
142
+ }
143
+ return messageText.replace(normalizeShip(botShipName), '').trim();
93
144
  }
94
145
  export function isDmAllowed(senderShip, allowlist) {
95
146
  if (!allowlist || allowlist.length === 0) {
96
147
  return false;
97
148
  }
98
149
  const normalizedSender = normalizeShip(senderShip);
99
- return allowlist.map((ship) => normalizeShip(ship)).some((ship) => ship === normalizedSender);
150
+ return allowlist
151
+ .map((ship) => normalizeShip(ship))
152
+ .some((ship) => ship === normalizedSender);
100
153
  }
101
154
  /**
102
155
  * Check if a group invite from a ship should be auto-accepted.
@@ -111,24 +164,26 @@ export function isGroupInviteAllowed(inviterShip, allowlist) {
111
164
  return false;
112
165
  }
113
166
  const normalizedInviter = normalizeShip(inviterShip);
114
- return allowlist.map((ship) => normalizeShip(ship)).some((ship) => ship === normalizedInviter);
167
+ return allowlist
168
+ .map((ship) => normalizeShip(ship))
169
+ .some((ship) => ship === normalizedInviter);
115
170
  }
116
171
  // Helper to recursively extract text from inline content
117
172
  function extractInlineText(items) {
118
173
  return items
119
174
  .map((item) => {
120
- if (typeof item === "string") {
175
+ if (typeof item === 'string') {
121
176
  return item;
122
177
  }
123
- if (item && typeof item === "object") {
178
+ if (item && typeof item === 'object') {
124
179
  if (item.ship) {
125
180
  return item.ship;
126
181
  }
127
- if ("sect" in item) {
128
- return `@${item.sect || "all"}`;
182
+ if ('sect' in item) {
183
+ return `@${item.sect || 'all'}`;
129
184
  }
130
- if (item["inline-code"]) {
131
- return `\`${item["inline-code"]}\``;
185
+ if (item['inline-code']) {
186
+ return `\`${item['inline-code']}\``;
132
187
  }
133
188
  if (item.code) {
134
189
  return `\`${item.code}\``;
@@ -146,13 +201,13 @@ function extractInlineText(items) {
146
201
  return `~~${extractInlineText(item.strike)}~~`;
147
202
  }
148
203
  }
149
- return "";
204
+ return '';
150
205
  })
151
- .join("");
206
+ .join('');
152
207
  }
153
208
  export function extractMessageText(content) {
154
209
  if (!content || !Array.isArray(content)) {
155
- return "";
210
+ return '';
156
211
  }
157
212
  return content
158
213
  .map((verse) => {
@@ -160,26 +215,26 @@ export function extractMessageText(content) {
160
215
  if (verse.inline && Array.isArray(verse.inline)) {
161
216
  return verse.inline
162
217
  .map((item) => {
163
- if (typeof item === "string") {
218
+ if (typeof item === 'string') {
164
219
  return item;
165
220
  }
166
- if (item && typeof item === "object") {
221
+ if (item && typeof item === 'object') {
167
222
  if (item.ship) {
168
223
  return item.ship;
169
224
  }
170
225
  // Handle sect (role mentions like @all)
171
- if ("sect" in item) {
172
- return `@${item.sect || "all"}`;
226
+ if ('sect' in item) {
227
+ return `@${item.sect || 'all'}`;
173
228
  }
174
229
  if (item.break !== undefined) {
175
- return "\n";
230
+ return '\n';
176
231
  }
177
232
  if (item.link && item.link.href) {
178
233
  return item.link.href;
179
234
  }
180
235
  // Handle inline code (Tlon uses "inline-code" key)
181
- if (item["inline-code"]) {
182
- return `\`${item["inline-code"]}\``;
236
+ if (item['inline-code']) {
237
+ return `\`${item['inline-code']}\``;
183
238
  }
184
239
  if (item.code) {
185
240
  return `\`${item.code}\``;
@@ -199,36 +254,36 @@ export function extractMessageText(content) {
199
254
  return `> ${extractInlineText(item.blockquote)}`;
200
255
  }
201
256
  }
202
- return "";
257
+ return '';
203
258
  })
204
- .join("");
259
+ .join('');
205
260
  }
206
261
  // Handle block content (images, code blocks, etc.)
207
- if (verse.block && typeof verse.block === "object") {
262
+ if (verse.block && typeof verse.block === 'object') {
208
263
  const block = verse.block;
209
264
  // Image blocks
210
265
  if (block.image && block.image.src) {
211
- const alt = block.image.alt ? ` (${block.image.alt})` : "";
266
+ const alt = block.image.alt ? ` (${block.image.alt})` : '';
212
267
  return `\n${block.image.src}${alt}\n`;
213
268
  }
214
269
  // Code blocks
215
- if (block.code && typeof block.code === "object") {
216
- const lang = block.code.lang || "";
217
- const code = block.code.code || "";
270
+ if (block.code && typeof block.code === 'object') {
271
+ const lang = block.code.lang || '';
272
+ const code = block.code.code || '';
218
273
  return `\n\`\`\`${lang}\n${code}\n\`\`\`\n`;
219
274
  }
220
275
  // Header blocks
221
- if (block.header && typeof block.header === "object") {
276
+ if (block.header && typeof block.header === 'object') {
222
277
  const text = block.header.content
223
- ?.map((item) => (typeof item === "string" ? item : ""))
224
- .join("") || "";
278
+ ?.map((item) => (typeof item === 'string' ? item : ''))
279
+ .join('') || '';
225
280
  return `\n## ${text}\n`;
226
281
  }
227
282
  // Cite/quote blocks - parse the reference structure
228
- if (block.cite && typeof block.cite === "object") {
283
+ if (block.cite && typeof block.cite === 'object') {
229
284
  const cite = block.cite;
230
285
  // ChanCite - reference to a channel message
231
- if (cite.chan && typeof cite.chan === "object") {
286
+ if (cite.chan && typeof cite.chan === 'object') {
232
287
  const { nest, where } = cite.chan;
233
288
  // where is typically /msg/~author/timestamp
234
289
  const whereMatch = where?.match(/\/msg\/(~[a-z-]+)\/(.+)/);
@@ -239,23 +294,23 @@ export function extractMessageText(content) {
239
294
  return `\n> [quoted from ${nest}]\n`;
240
295
  }
241
296
  // GroupCite - reference to a group
242
- if (cite.group && typeof cite.group === "string") {
297
+ if (cite.group && typeof cite.group === 'string') {
243
298
  return `\n> [ref: group ${cite.group}]\n`;
244
299
  }
245
300
  // DeskCite - reference to an app/desk
246
- if (cite.desk && typeof cite.desk === "object") {
301
+ if (cite.desk && typeof cite.desk === 'object') {
247
302
  return `\n> [ref: ${cite.desk.flag}]\n`;
248
303
  }
249
304
  // BaitCite - reference with group+graph context
250
- if (cite.bait && typeof cite.bait === "object") {
305
+ if (cite.bait && typeof cite.bait === 'object') {
251
306
  return `\n> [ref: ${cite.bait.graph} in ${cite.bait.group}]\n`;
252
307
  }
253
308
  return `\n> [quoted message]\n`;
254
309
  }
255
310
  }
256
- return "";
311
+ return '';
257
312
  })
258
- .join("\n")
313
+ .join('\n')
259
314
  .trim();
260
315
  }
261
316
  export function isSummarizationRequest(messageText) {
@@ -289,12 +344,13 @@ export function formatChangesDate(daysAgo = 5) {
289
344
  * Strips block directives entirely as they have no legitimate user purpose.
290
345
  */
291
346
  export function sanitizeMessageText(text) {
292
- if (!text)
347
+ if (!text) {
293
348
  return text;
349
+ }
294
350
  // Strip [BLOCK_USER: ~ship | reason] directives entirely
295
- let sanitized = text.replace(/\[BLOCK_USER:\s*~[\w-]+\s*\|\s*.+?\]/gi, "");
351
+ let sanitized = text.replace(/\[BLOCK_USER:\s*~[\w-]+\s*\|\s*.+?\]/gi, '');
296
352
  // Convert role tags from [brackets] to (parentheses)
297
- sanitized = sanitized.replace(/\[(owner|user|admin|system)\]/gi, "($1)");
353
+ sanitized = sanitized.replace(/\[(owner|user|admin|system)\]/gi, '($1)');
298
354
  return sanitized;
299
355
  }
300
356
  //# sourceMappingURL=utils.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../src/monitor/utils.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../src/monitor/utils.ts"],"names":[],"mappings":"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"}
@@ -1,12 +1,6 @@
1
- /**
2
- * Pure decisioning helpers for the re-engagement nudge scheduler.
3
- *
4
- * All functions here are deterministic and do not perform I/O. The
5
- * scheduler uses them to compute whether a tick should send anything.
6
- */
7
- export const DEFAULT_ACTIVE_HOURS_START = "09:00";
8
- export const DEFAULT_ACTIVE_HOURS_END = "21:00";
9
- export const DEFAULT_ACTIVE_HOURS_TIMEZONE = "America/New_York";
1
+ export const DEFAULT_ACTIVE_HOURS_START = '09:00';
2
+ export const DEFAULT_ACTIVE_HOURS_END = '21:00';
3
+ export const DEFAULT_ACTIVE_HOURS_TIMEZONE = 'America/New_York';
10
4
  const ONE_DAY_MS = 24 * 60 * 60 * 1000;
11
5
  /** Whole 24-hour days between two absolute instants. */
12
6
  export function daysBetween(earlierMs, laterMs) {
@@ -39,11 +33,11 @@ export function computeTargetStage(daysIdle) {
39
33
  const ACTIVE_HOURS_TIME_PATTERN = /^(?:([01]\d|2[0-3]):([0-5]\d)|24:00)$/;
40
34
  function resolveUserTimezone(cfg) {
41
35
  const configured = cfg?.agents?.defaults?.userTimezone;
42
- if (typeof configured === "string") {
36
+ if (typeof configured === 'string') {
43
37
  const trimmed = configured.trim();
44
38
  if (trimmed) {
45
39
  try {
46
- new Intl.DateTimeFormat("en-US", { timeZone: trimmed }).format(new Date());
40
+ new Intl.DateTimeFormat('en-US', { timeZone: trimmed }).format(new Date());
47
41
  return trimmed;
48
42
  }
49
43
  catch {
@@ -51,18 +45,18 @@ function resolveUserTimezone(cfg) {
51
45
  }
52
46
  }
53
47
  }
54
- return Intl.DateTimeFormat().resolvedOptions().timeZone?.trim() || "UTC";
48
+ return Intl.DateTimeFormat().resolvedOptions().timeZone?.trim() || 'UTC';
55
49
  }
56
50
  function resolveActiveHoursTimezone(cfg, raw) {
57
- const trimmed = typeof raw === "string" ? raw.trim() : "";
58
- if (!trimmed || trimmed === "user") {
51
+ const trimmed = typeof raw === 'string' ? raw.trim() : '';
52
+ if (!trimmed || trimmed === 'user') {
59
53
  return resolveUserTimezone(cfg);
60
54
  }
61
- if (trimmed === "local") {
62
- return Intl.DateTimeFormat().resolvedOptions().timeZone?.trim() || "UTC";
55
+ if (trimmed === 'local') {
56
+ return Intl.DateTimeFormat().resolvedOptions().timeZone?.trim() || 'UTC';
63
57
  }
64
58
  try {
65
- new Intl.DateTimeFormat("en-US", { timeZone: trimmed }).format(new Date());
59
+ new Intl.DateTimeFormat('en-US', { timeZone: trimmed }).format(new Date());
66
60
  return trimmed;
67
61
  }
68
62
  catch {
@@ -70,14 +64,14 @@ function resolveActiveHoursTimezone(cfg, raw) {
70
64
  }
71
65
  }
72
66
  function parseActiveHoursTime(raw, opts) {
73
- if (typeof raw !== "string") {
67
+ if (typeof raw !== 'string') {
74
68
  return null;
75
69
  }
76
70
  const trimmed = raw.trim();
77
71
  if (!ACTIVE_HOURS_TIME_PATTERN.test(trimmed)) {
78
72
  return null;
79
73
  }
80
- const [hourStr, minuteStr] = trimmed.split(":");
74
+ const [hourStr, minuteStr] = trimmed.split(':');
81
75
  const hour = Number(hourStr);
82
76
  const minute = Number(minuteStr);
83
77
  if (!Number.isFinite(hour) || !Number.isFinite(minute)) {
@@ -98,7 +92,7 @@ function parseActiveHoursTime(raw, opts) {
98
92
  * precedence tier's value for that field.
99
93
  */
100
94
  function overlayActiveHoursTime(raw, opts) {
101
- if (typeof raw !== "string") {
95
+ if (typeof raw !== 'string') {
102
96
  return null;
103
97
  }
104
98
  const trimmed = raw.trim();
@@ -117,21 +111,21 @@ function overlayActiveHoursTime(raw, opts) {
117
111
  * caller falls through to the baseline timezone in that case.
118
112
  */
119
113
  function overlayActiveHoursTimezone(cfg, raw) {
120
- if (typeof raw !== "string") {
114
+ if (typeof raw !== 'string') {
121
115
  return null;
122
116
  }
123
117
  const trimmed = raw.trim();
124
118
  if (!trimmed) {
125
119
  return null;
126
120
  }
127
- if (trimmed === "user") {
121
+ if (trimmed === 'user') {
128
122
  return resolveUserTimezone(cfg);
129
123
  }
130
- if (trimmed === "local") {
124
+ if (trimmed === 'local') {
131
125
  return Intl.DateTimeFormat().resolvedOptions().timeZone?.trim() || null;
132
126
  }
133
127
  try {
134
- new Intl.DateTimeFormat("en-US", { timeZone: trimmed }).format(new Date());
128
+ new Intl.DateTimeFormat('en-US', { timeZone: trimmed }).format(new Date());
135
129
  return trimmed;
136
130
  }
137
131
  catch {
@@ -142,8 +136,8 @@ function activeHoursFromShape(cfg, raw) {
142
136
  if (!raw) {
143
137
  return null;
144
138
  }
145
- const start = typeof raw.start === "string" ? raw.start.trim() : undefined;
146
- const end = typeof raw.end === "string" ? raw.end.trim() : undefined;
139
+ const start = typeof raw.start === 'string' ? raw.start.trim() : undefined;
140
+ const end = typeof raw.end === 'string' ? raw.end.trim() : undefined;
147
141
  if (!start || !end) {
148
142
  return null;
149
143
  }
@@ -159,15 +153,16 @@ function activeHoursFromShape(cfg, raw) {
159
153
  }
160
154
  function activeHoursFromChannelsTlon(cfg) {
161
155
  const tlon = cfg?.channels?.tlon;
162
- const raw = tlon?.nudgeActiveHours;
163
- if (!raw || typeof raw !== "object") {
156
+ const raw = tlon
157
+ ?.nudgeActiveHours;
158
+ if (!raw || typeof raw !== 'object') {
164
159
  return null;
165
160
  }
166
161
  return activeHoursFromShape(cfg, raw);
167
162
  }
168
163
  function activeHoursFromFileConfig(cfg) {
169
164
  const agentsDefaults = cfg?.agents?.defaults?.heartbeat?.activeHours;
170
- if (!agentsDefaults || typeof agentsDefaults !== "object") {
165
+ if (!agentsDefaults || typeof agentsDefaults !== 'object') {
171
166
  return null;
172
167
  }
173
168
  return activeHoursFromShape(cfg, agentsDefaults);
@@ -200,7 +195,9 @@ export function resolveActiveHours(settings, cfg) {
200
195
  end: DEFAULT_ACTIVE_HOURS_END,
201
196
  timezone: DEFAULT_ACTIVE_HOURS_TIMEZONE,
202
197
  };
203
- const startOverride = overlayActiveHoursTime(settings.nudgeActiveHoursStart, { allow24: false });
198
+ const startOverride = overlayActiveHoursTime(settings.nudgeActiveHoursStart, {
199
+ allow24: false,
200
+ });
204
201
  const endOverride = overlayActiveHoursTime(settings.nudgeActiveHoursEnd, {
205
202
  allow24: true,
206
203
  });
@@ -215,33 +212,33 @@ export function resolveActiveHours(settings, cfg) {
215
212
  * Derive "HH:MM" for `date` in the given IANA timezone.
216
213
  */
217
214
  function formatLocalHhMm(date, timezone) {
218
- const fmt = new Intl.DateTimeFormat("en-GB", {
215
+ const fmt = new Intl.DateTimeFormat('en-GB', {
219
216
  timeZone: timezone,
220
- hour: "2-digit",
221
- minute: "2-digit",
217
+ hour: '2-digit',
218
+ minute: '2-digit',
222
219
  hour12: false,
223
220
  });
224
221
  const parts = fmt.formatToParts(date);
225
- let hh = "00";
226
- let mm = "00";
222
+ let hh = '00';
223
+ let mm = '00';
227
224
  for (const part of parts) {
228
- if (part.type === "hour") {
225
+ if (part.type === 'hour') {
229
226
  hh = part.value;
230
227
  }
231
- if (part.type === "minute") {
228
+ if (part.type === 'minute') {
232
229
  mm = part.value;
233
230
  }
234
231
  }
235
232
  // `Intl.DateTimeFormat` with `hour12: false` can yield "24:00" at midnight
236
233
  // on some engines; normalize to "00:00" for comparison consistency.
237
- if (hh === "24") {
238
- hh = "00";
234
+ if (hh === '24') {
235
+ hh = '00';
239
236
  }
240
237
  return `${hh}:${mm}`;
241
238
  }
242
239
  function resolveMinutesInTimeZone(date, timezone) {
243
240
  const local = formatLocalHhMm(date, timezone);
244
- const [hourStr, minuteStr] = local.split(":");
241
+ const [hourStr, minuteStr] = local.split(':');
245
242
  const hour = Number(hourStr);
246
243
  const minute = Number(minuteStr);
247
244
  if (!Number.isFinite(hour) || !Number.isFinite(minute)) {
@@ -282,13 +279,13 @@ export function inActiveHours(date, activeHours) {
282
279
  * message and cannot lag behind a subscription-delivered clear.
283
280
  */
284
281
  export function resolveLastOwnerInstant(shadow, settings) {
285
- if (shadow && typeof shadow.at === "number" && Number.isFinite(shadow.at)) {
282
+ if (shadow && typeof shadow.at === 'number' && Number.isFinite(shadow.at)) {
286
283
  return shadow.at;
287
284
  }
288
- if (typeof settings.lastOwnerMessageAt === "number") {
285
+ if (typeof settings.lastOwnerMessageAt === 'number') {
289
286
  return settings.lastOwnerMessageAt;
290
287
  }
291
- if (typeof settings.lastOwnerMessageDate === "string") {
288
+ if (typeof settings.lastOwnerMessageDate === 'string') {
292
289
  const parsed = Date.parse(settings.lastOwnerMessageDate);
293
290
  return Number.isFinite(parsed) ? parsed : null;
294
291
  }