toolroll 0.9.16 → 0.9.18

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 (70) hide show
  1. package/CHANGELOG.md +28 -0
  2. package/dist/assignment-brief.js +11 -4
  3. package/dist/browser/workspace.js +14 -14
  4. package/dist/browser-workspace.d.ts +2 -0
  5. package/dist/chat-actions.d.ts +7 -0
  6. package/dist/chat-actions.js +40 -4
  7. package/dist/chat-ask.js +29 -15
  8. package/dist/chat-channel.js +3 -1
  9. package/dist/chat-decide.d.ts +203 -0
  10. package/dist/chat-decide.js +554 -0
  11. package/dist/chat-delivery-state.d.ts +7 -0
  12. package/dist/chat-delivery.d.ts +3 -0
  13. package/dist/chat-delivery.js +63 -17
  14. package/dist/chat-quiet.d.ts +4 -1
  15. package/dist/chat-quiet.js +6 -2
  16. package/dist/chat-warmth.d.ts +21 -0
  17. package/dist/chat-warmth.js +36 -0
  18. package/dist/desktop-update.d.ts +1 -1
  19. package/dist/discord-api.d.ts +3 -1
  20. package/dist/discord-api.js +4 -2
  21. package/dist/discord-chat.d.ts +3 -2
  22. package/dist/discord-chat.js +35 -6
  23. package/dist/lead-about.d.ts +35 -0
  24. package/dist/lead-about.js +62 -0
  25. package/dist/lead-capabilities.d.ts +64 -0
  26. package/dist/lead-capabilities.js +199 -0
  27. package/dist/lead-commitments.js +13 -7
  28. package/dist/lead-context.d.ts +5 -3
  29. package/dist/lead-context.js +29 -7
  30. package/dist/lead-follow.d.ts +1 -1
  31. package/dist/lead-follow.js +3 -2
  32. package/dist/lead-identity.js +1 -1
  33. package/dist/lead-people.d.ts +55 -0
  34. package/dist/lead-people.js +128 -0
  35. package/dist/lead-voice.d.ts +3 -2
  36. package/dist/lead-voice.js +4 -3
  37. package/dist/mate-cli.d.ts +3 -0
  38. package/dist/mate-cli.js +15 -14
  39. package/dist/mate-contract.d.ts +1 -1
  40. package/dist/mate-contract.js +6 -4
  41. package/dist/mate-progress.js +2 -0
  42. package/dist/mate-tools.d.ts +8 -0
  43. package/dist/mate-tools.js +112 -6
  44. package/dist/mate.d.ts +26 -1
  45. package/dist/mate.js +89 -25
  46. package/dist/modes.d.ts +6 -0
  47. package/dist/modes.js +6 -0
  48. package/dist/operate.js +20 -8
  49. package/dist/phase-routing.d.ts +1 -1
  50. package/dist/project-delete.js +3 -0
  51. package/dist/provider-auth.d.ts +4 -0
  52. package/dist/provider-auth.js +1 -1
  53. package/dist/reply-shape.d.ts +96 -0
  54. package/dist/reply-shape.js +452 -0
  55. package/dist/result-shots.d.ts +51 -0
  56. package/dist/result-shots.js +119 -0
  57. package/dist/serve.js +76 -49
  58. package/dist/slack-chat.d.ts +2 -0
  59. package/dist/slack-chat.js +38 -7
  60. package/dist/store.d.ts +36 -3
  61. package/dist/store.js +163 -16
  62. package/dist/team-runtime.js +1 -1
  63. package/dist/teams-chat.js +17 -1
  64. package/dist/telegram-mate.d.ts +12 -0
  65. package/dist/telegram-mate.js +27 -11
  66. package/dist/telegram-team.js +6 -3
  67. package/dist/telegram.d.ts +5 -3
  68. package/dist/telegram.js +227 -21
  69. package/dist/test-temp.js +1 -1
  70. package/package.json +1 -1
package/CHANGELOG.md CHANGED
@@ -1,5 +1,33 @@
1
1
  # Changelog
2
2
 
3
+ ## 0.9.18 — 2026-10-03
4
+
5
+ - **Decide in Telegram.** A ready result's Accept and finish, Request changes
6
+ and Retry now work right in the chat, each confirmed with a second tap. With
7
+ `toolroll mode set … --chat-approve` signed once, you can also approve plans
8
+ and merge pull requests from Telegram. Anything outside the mode's terms
9
+ still links to the console.
10
+ - **Screenshots with results, if you want them.** Settings → Notifications →
11
+ Screenshots with results: Off, First one, or Up to 4. On Telegram they
12
+ arrive as photos with a plain caption.
13
+
14
+ ## 0.9.17 — 2026-10-03
15
+
16
+ - **The lead checks before it promises.** One check covers agents (signed in
17
+ or not), workers, tools and skills, integrations and checks. It won't
18
+ propose work that needs one until it has looked. If something isn't ready,
19
+ it says so with the next step and a link.
20
+ - **Replies read like a person wrote them.** On every channel: no headers,
21
+ links with plain labels, no internal ids, and little bold. A reply that
22
+ says it's attaching something has to attach it. Errors are in plain words,
23
+ and you see a 👍 and typing while it works.
24
+ - **It knows you and your people.** "What your lead knows about you" is a
25
+ short list you confirm line by line, editable in Settings → Lead. The lead
26
+ also keeps an index of the people, teammates and team chats you work with,
27
+ and looks a person up before answering about them.
28
+ - Promises made on Slack, Discord and Teams are delivered there. Long
29
+ Telegram replies split safely.
30
+
3
31
  ## 0.9.16 — 2026-10-03
4
32
 
5
33
  - **Name your lead.** Settings → Lead takes a name and a short persona. The
@@ -7,13 +7,20 @@ import { publicChatText } from "./chat-display.js";
7
7
  const sha = (value) => createHash("sha256").update(value).digest("hex");
8
8
  const MAX_BYTES = 16_000;
9
9
  const RECENT_MS = 7 * 24 * 60 * 60_000;
10
- /** A sentence's end: not an abbreviation's full stop ("e.g.", "i.e.", "etc."), and followed by a new sentence. */
11
- const SENTENCE_END = /(?<!\b(?:e\.g|i\.e|etc|vs|cf|approx|incl|Mr|Mrs|Ms|Dr|St|No))[.!?](?=\s+["'“(]?[\p{Lu}\p{N}])/u;
10
+ /** A full stop, question or exclamation mark followed by a new sentence. */
11
+ const SENTENCE_END = /[.!?](?=\s+["'“(]?([\p{Lu}\p{N}]))/gu;
12
+ /** An abbreviation's full stop ("e.g.", "E.g.", "etc."), in any case; "No." only before a number ("No. 5"). */
13
+ const ABBREVIATION = /\b(?:e\.g|i\.e|etc|vs|cf|approx|incl|mr|mrs|ms|dr|st)$/i;
12
14
  /** A reason's first sentence, or its first line. */
13
15
  export function firstSentenceOf(text) {
14
16
  const line = text.split("\n")[0].trim();
15
- const end = SENTENCE_END.exec(line);
16
- return end === null ? line : line.slice(0, end.index + 1);
17
+ for (const end of line.matchAll(SENTENCE_END)) {
18
+ const before = line.slice(0, end.index);
19
+ if (end[0] === "." && (ABBREVIATION.test(before) || /\bno$/i.test(before) && /\p{N}/u.test(end[1])))
20
+ continue;
21
+ return line.slice(0, end.index + 1);
22
+ }
23
+ return line;
17
24
  }
18
25
  /** A project's active decisions, newest first: each one's title and its reason in one line (first sentence or
19
26
  * line). Memory absent on an older database reads as no decisions. */