eve-hub 0.13.7 → 0.13.9

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.
package/CHANGELOG.md CHANGED
@@ -1,5 +1,17 @@
1
1
  # eve-hub
2
2
 
3
+ ## 0.13.9
4
+
5
+ ### Patch Changes
6
+
7
+ - Bots are told their closing text is not posted once their turn has posted into its thread, so a result always goes in a `post_message`. The `post_message` and `react` tool descriptions say the same.
8
+
9
+ ## 0.13.8
10
+
11
+ ### Patch Changes
12
+
13
+ - 4360aeb: The always-loaded writing prompt now says to show structure with a form and never draw with characters, instead of leaving that rule only in the opt-in forms skill.
14
+
3
15
  ## 0.13.7
4
16
 
5
17
  ### Patch Changes
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "eve-hub",
3
- "version": "0.13.7",
3
+ "version": "0.13.9",
4
4
  "license": "Apache-2.0",
5
5
  "description": "Bot-side code shared by every hub agent: registry tools, the roster hook, the eve channel, the host sandbox and browser, and model helpers.",
6
6
  "type": "module",
@@ -1,6 +1,7 @@
1
1
  - **One channel**
2
2
  - Everything to the human or a bot is a `post_message`: into this thread, another thread, or a bot's DM.
3
3
  - Posting doesn't end your turn. Post when you start something long, when you find something that matters, and when you're done, each as its own post.
4
+ - Once a turn has posted into this thread, the hub drops its closing text, so your result always goes in a post, never only in the text you end the turn with.
4
5
  - **Mentions wake**
5
6
  - `@<name>` wakes one bot or person; `@all` wakes every participant in the thread.
6
7
  - Each wake costs that bot a turn, so mention at most one name per message: whoever acts next, in the message that hands off.
@@ -4,7 +4,8 @@
4
4
  - **Show, don't tell** (core principle)
5
5
  - When what you explain has structure (parts that connect, events in order, numbers to compare, a before and after, a choice for the human), answer in one sentence, then draw it without being asked. A single fact stays a sentence.
6
6
  - Why: prose arrives one item at a time, so the reader has to rebuild the structure in their head; a figure shows it at once.
7
- - How: load the `forms` skill for the shapes, tables and syntax.
7
+ - How: a `flow`, `sequence`, `chart` or `ask` form sent with `post_message`; load the `forms` skill for the shapes, tables and syntax.
8
+ - Never draw with characters: no arrows, boxes, numbered timelines or tables in a code fence.
8
9
  - **Disclose one step at a time**
9
10
  - First bubble: the point or the question, in at most two sentences. The inbox and notifications show only its first line.
10
11
  - After a `---` line (blank lines around it): what the reader needs to act, and nothing more.
@@ -22,7 +22,6 @@ declare const _default: import("eve/tools").ToolDefinition<{
22
22
  threadId: string;
23
23
  title: string;
24
24
  deliveries: Record<string, string>;
25
- comms?: boolean;
26
25
  }> & {
27
26
  execute(input: {
28
27
  threadId?: string | undefined;
@@ -48,7 +47,6 @@ declare const _default: import("eve/tools").ToolDefinition<{
48
47
  threadId: string;
49
48
  title: string;
50
49
  deliveries: Record<string, string>;
51
- comms?: boolean;
52
50
  }>;
53
51
  };
54
52
  export default _default;
@@ -18,7 +18,7 @@ import { registryFetch } from "../registry-fetch.mjs";
18
18
  // move), the text is its summary, `metadata` its PR and sha. The hub keeps the
19
19
  // latest one per bot and thread for the workspace state and the Dash.
20
20
  export default defineTool({
21
- description: "Post a message as you. Leave out threadId and agent to post into the thread you're in, while you work: posting doesn't end your turn, and when your turn's last step is only comms (a plain post into this thread, a reaction), your end-of-turn text isn't posted. Or post into another workspace thread or a bot's DM. @-mentions wake bots the same way your replies do (at most one, never yourself); `@all` wakes every participant; each bot's gate decides whether it replies. Posting into a bot's DM wakes that bot. Archived threads are refused. `policy` says how a post reaches the one bot it @-mentions: queue (default) runs as its next turn, or starts one now if it is idle; steer lands in its RUNNING turn at the next step boundary and the bot folds it in without a restart, to correct course mid-turn; abort stops its turn in that thread (running commands are killed, the process keeps running) and the text starts its fresh turn, \"stop, do this instead\". Steer and abort need exactly one @-mention, not `@all`, and cut into work already under way: use them only to change what a running turn is doing. A status post sets the thread's phase: planning, working, reviewing or done; allowed moves are start → planning or working, planning → working, working → reviewing, reviewing → working (fix first), planning (rethink) or done. Any other move is refused with the allowed next phases. The text is a phase marker, not a report: at most 8 plain words on what is happening now (\"Building the input-count fix\"), with no bot or role names, no restating the phase, no parentheticals. Test results, branch names and caveats go in a separate message. The PR URL and sha go in metadata, never in the text.",
21
+ description: "Post a message as you. Leave out threadId and agent to post into the thread you're in, while you work: posting doesn't end your turn, and once your turn has posted into this thread, its end-of-turn text isn't posted, so put your result in a post. Or post into another workspace thread or a bot's DM. @-mentions wake bots the same way your replies do (at most one, never yourself); `@all` wakes every participant; each bot's gate decides whether it replies. Posting into a bot's DM wakes that bot. Archived threads are refused. `policy` says how a post reaches the one bot it @-mentions: queue (default) runs as its next turn, or starts one now if it is idle; steer lands in its RUNNING turn at the next step boundary and the bot folds it in without a restart, to correct course mid-turn; abort stops its turn in that thread (running commands are killed, the process keeps running) and the text starts its fresh turn, \"stop, do this instead\". Steer and abort need exactly one @-mention, not `@all`, and cut into work already under way: use them only to change what a running turn is doing. A status post sets the thread's phase: planning, working, reviewing or done; allowed moves are start → planning or working, planning → working, working → reviewing, reviewing → working (fix first), planning (rethink) or done. Any other move is refused with the allowed next phases. The text is a phase marker, not a report: at most 8 plain words on what is happening now (\"Building the input-count fix\"), with no bot or role names, no restating the phase, no parentheticals. Test results, branch names and caveats go in a separate message. The PR URL and sha go in metadata, never in the text.",
22
22
  inputSchema: z.object({
23
23
  threadId: z.string().optional().describe("Another thread's id, e.g. thr_0002, or a DM id, dm-<bot>. Omit it to post into the thread you're in."),
24
24
  agent: z.string().optional().describe("Post into this bot's DM instead of a thread."),
package/tools/react.js CHANGED
@@ -1,9 +1,9 @@
1
1
  import { defineTool } from "eve/tools";
2
2
  import { z } from "zod";
3
3
  import { registryFetch } from "../registry-fetch.mjs";
4
- // Reactions are the bot's own choice, not delivery bookkeeping. `comms: true` declares it talks in the thread: a turn whose last step is only comms posts no end-of-turn text.
4
+ // Reactions are the bot's own choice, not delivery bookkeeping. A turn whose last step is only reactions posts no end-of-turn text: the hub reads the tool name; `comms: true` is for hubs that predate that.
5
5
  export default defineTool({
6
- description: "React to a message in this thread with an emoji (toggles). Use the [msg_…] id shown before each message. Good for light acknowledgement (👍 got it, 👀 looking, ✅ done, 🎉 nice) when a full reply isn't needed. A turn that ends on only reactions and posts posts no closing text, so never write one.",
6
+ description: "React to a message in this thread with an emoji (toggles). Use the [msg_…] id shown before each message. Good for light acknowledgement (👍 got it, 👀 looking, ✅ done, 🎉 nice) when a full reply isn't needed. A turn that ends on a reaction, or that posted into this thread, posts no closing text, so never write one.",
7
7
  inputSchema: z.object({
8
8
  messageId: z.string().describe("The id in brackets before the message, e.g. msg_0012."),
9
9
  emoji: z.string().describe("A single emoji."),