kitty-hive 0.6.0 → 0.6.2
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/README.md +24 -3
- package/README.zh.md +23 -2
- package/channel.ts +26 -4
- package/dist/db.d.ts +26 -1
- package/dist/db.js +82 -7
- package/dist/db.js.map +1 -1
- package/dist/index.js +118 -18
- package/dist/index.js.map +1 -1
- package/dist/mcp/agent-tools.js +6 -3
- package/dist/mcp/agent-tools.js.map +1 -1
- package/dist/models.d.ts +1 -0
- package/dist/models.js.map +1 -1
- package/dist/server.js +44 -2
- package/dist/server.js.map +1 -1
- package/dist/sessions.d.ts +7 -0
- package/dist/sessions.js +65 -8
- package/dist/sessions.js.map +1 -1
- package/dist/tools/start.d.ts +11 -0
- package/dist/tools/start.js +41 -12
- package/dist/tools/start.js.map +1 -1
- package/package.json +1 -1
package/dist/tools/start.d.ts
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import type { Team } from '../models.js';
|
|
2
2
|
interface StartInput {
|
|
3
3
|
id?: string;
|
|
4
|
+
key?: string;
|
|
4
5
|
name?: string;
|
|
5
6
|
roles?: string;
|
|
6
7
|
tool?: string;
|
|
@@ -12,5 +13,15 @@ interface StartOutput {
|
|
|
12
13
|
display_name: string;
|
|
13
14
|
teams: Team[];
|
|
14
15
|
}
|
|
16
|
+
/**
|
|
17
|
+
* Resolve or create an agent. Priority for picking the row to act on:
|
|
18
|
+
* 1. `id` — explicit hive agent_id (exact ULID)
|
|
19
|
+
* 2. `key` — opaque external_key (orchestrator-assigned)
|
|
20
|
+
* 3. `name` — display_name (latest match by last_seen)
|
|
21
|
+
*
|
|
22
|
+
* Caller never has to handle "not found" — every path either reuses or
|
|
23
|
+
* creates. external_key is upserted onto the chosen agent silently
|
|
24
|
+
* (UNIQUE conflict → logged warn, agent unchanged).
|
|
25
|
+
*/
|
|
15
26
|
export declare function handleStart(input: StartInput): StartOutput;
|
|
16
27
|
export {};
|
package/dist/tools/start.js
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
import { createAgent, getAgentById, getAgentsByName, touchAgent, getDB, getAgentTeams } from '../db.js';
|
|
1
|
+
import { createAgent, getAgentById, getAgentsByName, touchAgent, getDB, getAgentTeams, getAgentByExternalKey, trySetAgentExternalKey, } from '../db.js';
|
|
2
|
+
import { log } from '../log.js';
|
|
2
3
|
const ADJECTIVES = ['Swift', 'Calm', 'Bold', 'Keen', 'Warm', 'Wise', 'Fair', 'True', 'Deft', 'Glad'];
|
|
3
4
|
const NOUNS = ['Paw', 'Claw', 'Tail', 'Fang', 'Mane', 'Wing', 'Reef', 'Peak', 'Glen', 'Vale'];
|
|
4
5
|
function randomDisplayName() {
|
|
@@ -7,23 +8,40 @@ function randomDisplayName() {
|
|
|
7
8
|
const num = Math.floor(Math.random() * 100);
|
|
8
9
|
return `${adj}${noun}${num}`;
|
|
9
10
|
}
|
|
11
|
+
/**
|
|
12
|
+
* Resolve or create an agent. Priority for picking the row to act on:
|
|
13
|
+
* 1. `id` — explicit hive agent_id (exact ULID)
|
|
14
|
+
* 2. `key` — opaque external_key (orchestrator-assigned)
|
|
15
|
+
* 3. `name` — display_name (latest match by last_seen)
|
|
16
|
+
*
|
|
17
|
+
* Caller never has to handle "not found" — every path either reuses or
|
|
18
|
+
* creates. external_key is upserted onto the chosen agent silently
|
|
19
|
+
* (UNIQUE conflict → logged warn, agent unchanged).
|
|
20
|
+
*/
|
|
10
21
|
export function handleStart(input) {
|
|
11
22
|
let agent;
|
|
12
|
-
//
|
|
23
|
+
// 1. id wins (exact identity)
|
|
13
24
|
if (input.id) {
|
|
14
25
|
agent = getAgentById(input.id);
|
|
15
|
-
if (!agent)
|
|
16
|
-
throw new Error(`Agent id "${input.id}" not found`);
|
|
17
|
-
touchAgent(agent.id);
|
|
18
26
|
}
|
|
19
|
-
|
|
27
|
+
// 2. key (external orchestrator handle)
|
|
28
|
+
if (!agent && input.key) {
|
|
29
|
+
agent = getAgentByExternalKey(input.key);
|
|
30
|
+
}
|
|
31
|
+
// 3. name (fuzzy, reuse latest match)
|
|
32
|
+
if (!agent && input.name) {
|
|
20
33
|
const matches = getAgentsByName(input.name);
|
|
21
34
|
if (matches.length > 0) {
|
|
22
35
|
agent = matches.sort((a, b) => b.last_seen.localeCompare(a.last_seen))[0];
|
|
23
|
-
touchAgent(agent.id);
|
|
24
36
|
}
|
|
25
37
|
}
|
|
26
|
-
if (agent) {
|
|
38
|
+
if (!agent) {
|
|
39
|
+
// Create — honor caller-supplied id and key when given
|
|
40
|
+
const displayName = input.name || randomDisplayName();
|
|
41
|
+
agent = createAgent(displayName, input.tool ?? '', input.roles ?? '', input.expertise ?? '', { id: input.id, externalKey: input.key });
|
|
42
|
+
}
|
|
43
|
+
else {
|
|
44
|
+
touchAgent(agent.id);
|
|
27
45
|
const updates = [];
|
|
28
46
|
const params = [];
|
|
29
47
|
if (input.tool) {
|
|
@@ -38,14 +56,25 @@ export function handleStart(input) {
|
|
|
38
56
|
updates.push('expertise = ?');
|
|
39
57
|
params.push(input.expertise);
|
|
40
58
|
}
|
|
59
|
+
// Silent display_name refresh when caller supplied a different name
|
|
60
|
+
// (orchestrator updates the pane title → hive picks it up automatically).
|
|
61
|
+
if (input.name && input.name !== agent.display_name) {
|
|
62
|
+
updates.push('display_name = ?');
|
|
63
|
+
params.push(input.name);
|
|
64
|
+
}
|
|
41
65
|
if (updates.length > 0) {
|
|
42
66
|
params.push(agent.id);
|
|
43
67
|
getDB().prepare(`UPDATE agents SET ${updates.join(', ')} WHERE id = ?`).run(...params);
|
|
68
|
+
agent = getAgentById(agent.id); // refresh
|
|
69
|
+
}
|
|
70
|
+
// Attach external_key when given and not already set on this agent.
|
|
71
|
+
// UNIQUE conflict means another agent owns that key → leave as-is, warn.
|
|
72
|
+
if (input.key && agent.external_key !== input.key) {
|
|
73
|
+
const ok = trySetAgentExternalKey(agent.id, input.key);
|
|
74
|
+
if (!ok) {
|
|
75
|
+
log('warn', `[start] external_key="${input.key}" already owned by another agent; agent=${agent.id} keeps key="${agent.external_key || '(none)'}"`);
|
|
76
|
+
}
|
|
44
77
|
}
|
|
45
|
-
}
|
|
46
|
-
else {
|
|
47
|
-
const displayName = input.name || randomDisplayName();
|
|
48
|
-
agent = createAgent(displayName, input.tool ?? '', input.roles ?? '', input.expertise ?? '');
|
|
49
78
|
}
|
|
50
79
|
return {
|
|
51
80
|
agent_id: agent.id,
|
package/dist/tools/start.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"start.js","sourceRoot":"","sources":["../../src/tools/start.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"start.js","sourceRoot":"","sources":["../../src/tools/start.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,WAAW,EAAE,YAAY,EAAE,eAAe,EAAE,UAAU,EAAE,KAAK,EAAE,aAAa,EAC5E,qBAAqB,EAAE,sBAAsB,GAC9C,MAAM,UAAU,CAAC;AAClB,OAAO,EAAE,GAAG,EAAE,MAAM,WAAW,CAAC;AAmBhC,MAAM,UAAU,GAAG,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;AACrG,MAAM,KAAK,GAAG,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;AAE9F,SAAS,iBAAiB;IACxB,MAAM,GAAG,GAAG,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC;IACtE,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC;IAC7D,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,GAAG,CAAC,CAAC;IAC5C,OAAO,GAAG,GAAG,GAAG,IAAI,GAAG,GAAG,EAAE,CAAC;AAC/B,CAAC;AAED;;;;;;;;;GASG;AACH,MAAM,UAAU,WAAW,CAAC,KAAiB;IAC3C,IAAI,KAAwB,CAAC;IAE7B,8BAA8B;IAC9B,IAAI,KAAK,CAAC,EAAE,EAAE,CAAC;QACb,KAAK,GAAG,YAAY,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;IACjC,CAAC;IACD,wCAAwC;IACxC,IAAI,CAAC,KAAK,IAAI,KAAK,CAAC,GAAG,EAAE,CAAC;QACxB,KAAK,GAAG,qBAAqB,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAC3C,CAAC;IACD,sCAAsC;IACtC,IAAI,CAAC,KAAK,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC;QACzB,MAAM,OAAO,GAAG,eAAe,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAC5C,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACvB,KAAK,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,aAAa,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAC5E,CAAC;IACH,CAAC;IAED,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,uDAAuD;QACvD,MAAM,WAAW,GAAG,KAAK,CAAC,IAAI,IAAI,iBAAiB,EAAE,CAAC;QACtD,KAAK,GAAG,WAAW,CACjB,WAAW,EACX,KAAK,CAAC,IAAI,IAAI,EAAE,EAChB,KAAK,CAAC,KAAK,IAAI,EAAE,EACjB,KAAK,CAAC,SAAS,IAAI,EAAE,EACrB,EAAE,EAAE,EAAE,KAAK,CAAC,EAAE,EAAE,WAAW,EAAE,KAAK,CAAC,GAAG,EAAE,CACzC,CAAC;IACJ,CAAC;SAAM,CAAC;QACN,UAAU,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QACrB,MAAM,OAAO,GAAa,EAAE,CAAC;QAC7B,MAAM,MAAM,GAAU,EAAE,CAAC;QACzB,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC;YAAC,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;YAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAAC,CAAC;QACtE,IAAI,KAAK,CAAC,KAAK,EAAE,CAAC;YAAC,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;YAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QAAC,CAAC;QACzE,IAAI,KAAK,CAAC,SAAS,EAAE,CAAC;YAAC,OAAO,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;YAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;QAAC,CAAC;QACrF,oEAAoE;QACpE,0EAA0E;QAC1E,IAAI,KAAK,CAAC,IAAI,IAAI,KAAK,CAAC,IAAI,KAAK,KAAK,CAAC,YAAY,EAAE,CAAC;YACpD,OAAO,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC;YAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAC5D,CAAC;QACD,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACvB,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;YACtB,KAAK,EAAE,CAAC,OAAO,CAAC,qBAAqB,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,CAAC;YACvF,KAAK,GAAG,YAAY,CAAC,KAAK,CAAC,EAAE,CAAE,CAAC,CAAC,UAAU;QAC7C,CAAC;QACD,oEAAoE;QACpE,yEAAyE;QACzE,IAAI,KAAK,CAAC,GAAG,IAAI,KAAK,CAAC,YAAY,KAAK,KAAK,CAAC,GAAG,EAAE,CAAC;YAClD,MAAM,EAAE,GAAG,sBAAsB,CAAC,KAAK,CAAC,EAAE,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC;YACvD,IAAI,CAAC,EAAE,EAAE,CAAC;gBACR,GAAG,CAAC,MAAM,EAAE,yBAAyB,KAAK,CAAC,GAAG,2CAA2C,KAAK,CAAC,EAAE,eAAe,KAAK,CAAC,YAAY,IAAI,QAAQ,GAAG,CAAC,CAAC;YACrJ,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO;QACL,QAAQ,EAAE,KAAK,CAAC,EAAE;QAClB,KAAK,EAAE,KAAK,CAAC,KAAK;QAClB,YAAY,EAAE,KAAK,CAAC,YAAY;QAChC,KAAK,EAAE,aAAa,CAAC,KAAK,CAAC,EAAE,EAAE,IAAI,CAAC;KACrC,CAAC;AACJ,CAAC"}
|