eve-hub 0.16.29 → 0.16.30
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/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "eve-hub",
|
|
3
|
-
"version": "0.16.
|
|
3
|
+
"version": "0.16.30",
|
|
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,6 @@
|
|
|
1
1
|
You are the **coordinator**, the human's chief of staff. The human talks to you first, and you make sure what they ask for gets done. You scope it, put the right bot on it, and stay on it across turns and threads until it lands. A quick question you can settle from what you already know ("where is X?") you answer directly, without opening a thread. You are relentless. You work long stretches without being prodded. When something blocks a bot (a missing grant, an answer only the human has, a bot going in circles), you clear it yourself, put the right bot on it, or get it from the one person who can. Every turn, you look for the next step that moves something forward. You work between the bots that do the work, never as one of them: you don't build or review, because a chief of staff inside one task stops watching the others.
|
|
2
2
|
|
|
3
|
-
**Take the ask.** First look for a thread on the same work, open or archived (`list_threads` with `archived: "include"`), and continue there. Otherwise, `create_thread` with a `path` and an `issueType` already in use. A path is `project/track
|
|
3
|
+
**Take the ask.** First look for a thread on the same work, open or archived (`list_threads` with `archived: "include"`), and continue there. Otherwise, `create_thread` with a `path` and an `issueType` already in use. A path is `project/track`, two segments at most: reuse a project, track and issue type in use whenever one fits, and file under the project alone until at least 3 threads share a track. The thread's first message mentions only the bot who starts. It gives the goal, the constraints, what done looks like, and "validate with the human" when the scope needs their yes. Building waits for that yes. Route by fit: unclear scope, many parts or real risk go to a planner, and a clear, small change goes straight to a builder. A thread the human starts reaches you untitled: file it with one `update_thread`, then route it inside that thread. Tell the human in one or two lines what you opened and who's on it.
|
|
4
4
|
|
|
5
5
|
**Branch side work.** When an ask lands in a thread but is a different deliverable from that thread's goal (a separate bug, a new feature, a measurement the thread's PR doesn't need), give it its own thread. Search first (`list_threads` with `archived: "include"`), then `create_thread` with a first post a bot can start cold: the goal, why it came up, a link to the source thread, and one @-mention for whoever starts. Post the new thread's link in the source thread and leave the side work to it. An ask that serves the thread's own goal stays where it is. The test is the deliverable, not the topic or the bot: a new scorecard, gate, doc or tool that this thread's PR won't ship gets its own thread even when it's about the same subject and the same bot will build it, and you never hand it to a bot inside this thread.
|
|
6
6
|
|
package/tools/create_thread.d.ts
CHANGED
|
@@ -11,6 +11,7 @@ declare const _default: import("eve/tools").ToolDefinition<{
|
|
|
11
11
|
}, {
|
|
12
12
|
threadId: string;
|
|
13
13
|
title: string;
|
|
14
|
+
inUse?: string;
|
|
14
15
|
}> & {
|
|
15
16
|
execute(input: {
|
|
16
17
|
title: string;
|
|
@@ -25,6 +26,7 @@ declare const _default: import("eve/tools").ToolDefinition<{
|
|
|
25
26
|
}, ctx: import("eve/tools").ToolContext): Promise<{
|
|
26
27
|
threadId: string;
|
|
27
28
|
title: string;
|
|
29
|
+
inUse?: string;
|
|
28
30
|
}>;
|
|
29
31
|
};
|
|
30
32
|
export default _default;
|
package/tools/create_thread.js
CHANGED
|
@@ -2,7 +2,7 @@ import { defineTool } from "eve/tools";
|
|
|
2
2
|
import { z } from "zod";
|
|
3
3
|
import { registryFetch } from "../registry-fetch.mjs";
|
|
4
4
|
export default defineTool({
|
|
5
|
-
description: "Open a new workspace thread for one piece of work. The first message is posted as you; @-mention the bot who should start. File it under a path (project/track) and tag an issue type when you can
|
|
5
|
+
description: "Open a new workspace thread for one piece of work. The first message is posted as you; @-mention the bot who should start. File it under a path (project/track, two segments at most) and tag an issue type when you can. Reuse a project, track and issue type in use whenever one fits (list_threads shows each thread's tags), and file under the project alone until at least 3 threads share a track. The reply's `inUse` lists the tags in use with their thread counts; when one fits better than yours, refile with update_thread. A thread left untagged asks its first bot to tag it.",
|
|
6
6
|
inputSchema: z.object({
|
|
7
7
|
title: z.string().describe("Short thread title, e.g. 'Checkout: retry failed payments'."),
|
|
8
8
|
message: z.string().describe("First message. Must @-mention who should act first."),
|
|
@@ -10,7 +10,7 @@ export default defineTool({
|
|
|
10
10
|
issueType: z.string().optional().describe("Issue type tag: the kind of work, e.g. 'feature', 'bugfix', 'docs'."),
|
|
11
11
|
projectLabel: z.string().optional().describe("Display name for a new project tag, e.g. 'Payments API'. Only names a tag that has none yet."),
|
|
12
12
|
issueTypeLabel: z.string().optional().describe("Display name for a new issue type tag, e.g. 'Bug fixes'. Only names a tag that has none yet."),
|
|
13
|
-
path: z.string().optional().describe("Path: project, then
|
|
13
|
+
path: z.string().optional().describe("Path: project, then at most one track, e.g. 'web/checkout' or 'api/billing'. Reuse a path in use (list_threads shows each thread's); start a track only once at least 3 threads share it."),
|
|
14
14
|
pathLabel: z.string().optional().describe("Display name for a new path's last segment, e.g. 'Cart'. Only names a path that has none yet."),
|
|
15
15
|
focus: z.boolean().optional().describe("Move the human's screen to the new thread (default true)."),
|
|
16
16
|
}),
|
package/tools/update_thread.js
CHANGED
|
@@ -7,11 +7,11 @@ import { defineTool } from "eve/tools";
|
|
|
7
7
|
import { z } from "zod";
|
|
8
8
|
import { registryFetch } from "../registry-fetch.mjs";
|
|
9
9
|
export default defineTool({
|
|
10
|
-
description: "Update a workspace thread you're in: its title, track, issue type and summary, in one call. Retitle when the work's scope has changed and the old title no longer fits: everyone sees a short 'renamed this thread: old → new' line; the history is kept. Keep titles short (at most 80 characters). File it on a path (project/track, e.g. 'web/checkout
|
|
10
|
+
description: "Update a workspace thread you're in: its title, track, issue type and summary, in one call. Retitle when the work's scope has changed and the old title no longer fits: everyone sees a short 'renamed this thread: old → new' line; the history is kept. Keep titles short (at most 80 characters). File it on a path (project/track, e.g. 'web/checkout': the first segment is the project, the second the track) and tag an issue type (the kind of work, e.g. 'feature', 'bugfix', 'infra'). Reuse a project, track and issue type in use whenever one fits. File under the project alone until at least 3 threads share a track. For a new tag, also give its display name (projectLabel, pathLabel or issueTypeLabel, e.g. 'Payments API'). The summary is a short note on what the thread is about and where it stands; it replaces the previous one, and empty text clears it. The reply's `inUse` lists the tags in use with their thread counts and flags a tag no other thread uses; when one in use fits better than yours, call update_thread again with it. Tags a human set by hand stay. DMs and archived threads can't be updated.",
|
|
11
11
|
inputSchema: z.object({
|
|
12
12
|
threadId: z.string().describe("Thread id, e.g. thr_0002 (shown in the [thread: …] header)."),
|
|
13
13
|
title: z.string().optional().describe("New short title, e.g. 'Checkout: retry failed payments'. Omit to leave it."),
|
|
14
|
-
path: z.string().nullable().optional().describe("Path: project, then
|
|
14
|
+
path: z.string().nullable().optional().describe("Path: project, then at most one track, e.g. 'web/checkout' or 'api/billing'. Reuse a path in use (the reply's inUse and list_threads show them); start a track only once at least 3 threads share it. null: back to the project alone. A path a human set by hand stays."),
|
|
15
15
|
issueType: z.string().optional().describe("Issue type tag: the kind of work, e.g. 'feature', 'bugfix', 'infra', 'docs', 'review', 'research'. Lowercase slug."),
|
|
16
16
|
summary: z.string().optional().describe("The thread's whole new summary, markdown: what it's about and where it stands. Empty clears it. Omit to leave it."),
|
|
17
17
|
pathLabel: z.string().optional().describe("Display name for a new path's last segment, e.g. 'Cart'. Only names a path that has none yet."),
|