summaryrefslogtreecommitdiffhomepage
path: root/packages/core/tests/agents
diff options
context:
space:
mode:
authorAdam Malczewski <[email protected]>2026-06-01 01:46:13 +0900
committerAdam Malczewski <[email protected]>2026-06-01 01:46:13 +0900
commit8b9533c22a47bbf6f916667e2c25d8e8e419da37 (patch)
tree715a6a3d6f43781395e7dc7c8cdb519cef46a870 /packages/core/tests/agents
parent1853dd1d40308deb829bc621beb79c5d39b9c57f (diff)
downloaddispatch-8b9533c22a47bbf6f916667e2c25d8e8e419da37.tar.gz
dispatch-8b9533c22a47bbf6f916667e2c25d8e8e419da37.zip
feat(tabs): tab-to-tab agent communication via short handles
Add send_to_tab / read_tab tools so an agent can message or read another tab by a git-style short handle (shortest unique prefix of the tab UUID, min 4 chars), shown in the tab bar. - core/db/tabs: resolveTabPrefix + shortestUniquePrefix (open tabs only, LIKE-sanitized prefix matching) - new tools read-tab.ts / send-to-tab.ts (+ tests) decoupled from the DB TabRow via a minimal ResolvedTabRef projection - agent-manager: unified deliverMessage routing (busy -> queue, idle -> new turn) shared by POST /chat and send_to_tab; agent->agent auto-wake budget (MAX_AGENT_AUTO_WAKES) to bound ping-pong loops - summon/loader: send_to_tab + read_tab as grantable tools - frontend: shortHandleFor + handle badge in TabBar; perm toggles - notes: tab-comm / user-agents / todo-redesign plans - chore: biome format fixes (debug-logger, summon.test) Refs notes/plan-tab-comm.md
Diffstat (limited to 'packages/core/tests/agents')
-rw-r--r--packages/core/tests/agents/loader.test.ts28
1 files changed, 26 insertions, 2 deletions
diff --git a/packages/core/tests/agents/loader.test.ts b/packages/core/tests/agents/loader.test.ts
index 88173ea..35ab0cf 100644
--- a/packages/core/tests/agents/loader.test.ts
+++ b/packages/core/tests/agents/loader.test.ts
@@ -22,10 +22,34 @@ describe("expandAgentToolNames", () => {
expect(out).toContain("run_shell");
});
+ it("passes through the tab tools as independent names (no tab_comm group)", () => {
+ const out = expandAgentToolNames(["send_to_tab", "read_tab"]);
+ expect(out).toContain("send_to_tab");
+ expect(out).toContain("read_tab");
+ // Granting only one must not pull in the other.
+ const onlySend = expandAgentToolNames(["send_to_tab"]);
+ expect(onlySend).toContain("send_to_tab");
+ expect(onlySend).not.toContain("read_tab");
+ });
+
it("passes through non-group tool names unchanged", () => {
- const out = expandAgentToolNames(["summon", "retrieve", "web_search", "youtube_transcribe"]);
+ const out = expandAgentToolNames([
+ "summon",
+ "retrieve",
+ "web_search",
+ "youtube_transcribe",
+ "send_to_tab",
+ "read_tab",
+ ]);
expect(out).toEqual(
- expect.arrayContaining(["summon", "retrieve", "web_search", "youtube_transcribe"]),
+ expect.arrayContaining([
+ "summon",
+ "retrieve",
+ "web_search",
+ "youtube_transcribe",
+ "send_to_tab",
+ "read_tab",
+ ]),
);
});