clawborrator-mcp 0.0.5 → 0.0.6
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/dist/index.js +52 -21
- package/dist/index.js.map +1 -1
- package/dist/tools/index.d.ts +0 -13
- package/dist/tools/index.js +4 -21
- package/dist/tools/index.js.map +1 -1
- package/package.json +1 -1
package/dist/index.js
CHANGED
|
@@ -23,10 +23,10 @@ import { log } from './log.js';
|
|
|
23
23
|
import { runHook } from './hook.js';
|
|
24
24
|
import { writeSidecar, deleteSidecar } from './sidecar.js';
|
|
25
25
|
import { TOOL_DEFINITIONS, callTool } from './tools/index.js';
|
|
26
|
-
import { enqueueRoutedPrompt } from './inbox.js';
|
|
27
26
|
import { installHooks } from './install-hooks.js';
|
|
28
27
|
import { loadPersistedSessionId, savePersistedSession } from './persisted-session.js';
|
|
29
28
|
import { packageVersion } from './version.js';
|
|
29
|
+
const SOURCE_NAME = 'clawborrator';
|
|
30
30
|
const __dirname = dirname(fileURLToPath(import.meta.url));
|
|
31
31
|
// Dispatch on top-level flags BEFORE booting the long-lived MCP.
|
|
32
32
|
// --hook=<HookName> short-lived hook spawn (fast path)
|
|
@@ -112,6 +112,35 @@ async function main() {
|
|
|
112
112
|
else {
|
|
113
113
|
log.info('reusing session id from env override', { sessionId: config.reuseSessionId });
|
|
114
114
|
}
|
|
115
|
+
// MCP stdio transport. Built BEFORE the ChannelClient so the WS
|
|
116
|
+
// handlers below can call server.notification() to push channel
|
|
117
|
+
// messages to Claude. We declare experimental capabilities matching
|
|
118
|
+
// the CC channel feature gate (CC's `--dangerously-load-development-
|
|
119
|
+
// channels server:clawborrator` flag opts into these); without
|
|
120
|
+
// them CC drops `notifications/claude/channel` on the floor.
|
|
121
|
+
const server = new Server({
|
|
122
|
+
name: SOURCE_NAME,
|
|
123
|
+
version: packageVersion(),
|
|
124
|
+
}, {
|
|
125
|
+
capabilities: {
|
|
126
|
+
experimental: {
|
|
127
|
+
'claude/channel': {}, // listen for notifications/claude/channel
|
|
128
|
+
'claude/channel/permission': {}, // listen for permission verdicts
|
|
129
|
+
},
|
|
130
|
+
tools: { listChanged: true },
|
|
131
|
+
},
|
|
132
|
+
instructions: `Messages from a remote operator arrive as <channel source="${SOURCE_NAME}" chat_id="..."> tags. ` +
|
|
133
|
+
`Treat them as user input from someone working with you remotely. ` +
|
|
134
|
+
`When you reply, use the "reply" tool and pass back the chat_id from the inbound tag so the response routes correctly. ` +
|
|
135
|
+
`Permission prompts may also be relayed for remote approval; the local terminal dialog stays open in parallel. ` +
|
|
136
|
+
`\n\nCross-session routing tools (gated on the operator opting in):` +
|
|
137
|
+
`\n- list_peers: see the operator's other running Claude Code sessions by routingName.` +
|
|
138
|
+
`\n- route_to_peer: send one prompt to one peer; ask mode waits for their reply, tell mode is fire-and-forget.` +
|
|
139
|
+
`\n- probe_peers: fan out the same short question to many peers in parallel for discovery (e.g. "do you have a User model?").` +
|
|
140
|
+
`\nWhen any of these returns "cross-session routing is disabled", tell the operator to enable it in hub Settings; don't retry. ` +
|
|
141
|
+
`Use them when the operator asks something that genuinely lives in a different repo, when you need information another session has in its context, or when handing off a self-contained subtask makes more sense than doing it here.` +
|
|
142
|
+
`\n\nPeer reports: when you dispatched work to a peer with route_to_peer in tell mode, the peer's eventual reply arrives here as a normal channel notification tagged "[peer report from @<peer> via cross-session routing — informational, no reply required]". React by closing the matching task (TaskUpdate), surfacing a one-line status update to the operator, or routing a follow-up — but DO NOT call the reply tool on a peer-report chat_id; the operator already saw the report on their dashboard.`,
|
|
143
|
+
});
|
|
115
144
|
// Open the channel-side WS to hub.
|
|
116
145
|
const client = new ChannelClient(config, {
|
|
117
146
|
onWelcome: (m) => {
|
|
@@ -143,38 +172,40 @@ async function main() {
|
|
|
143
172
|
});
|
|
144
173
|
},
|
|
145
174
|
onPrompt: (m) => {
|
|
146
|
-
//
|
|
147
|
-
//
|
|
148
|
-
|
|
149
|
-
|
|
175
|
+
// Push the prompt to Claude as a channel notification — CC's
|
|
176
|
+
// claude/channel handler wraps it in a <channel source="..."
|
|
177
|
+
// chat_id="..." sender="..."> tag and surfaces it as user
|
|
178
|
+
// input. No tool poll required; Claude reacts on receipt.
|
|
179
|
+
log.info('prompt received', { chatId: m.chatId });
|
|
180
|
+
server.notification({
|
|
181
|
+
method: 'notifications/claude/channel',
|
|
182
|
+
params: {
|
|
183
|
+
content: m.text,
|
|
184
|
+
// meta values must be strings + identifier-safe (used as XML
|
|
185
|
+
// attributes on the <channel ...> tag CC builds).
|
|
186
|
+
meta: { chat_id: m.chatId, sender: 'remote' },
|
|
187
|
+
},
|
|
188
|
+
}).catch((e) => log.warn('channel notification failed', { error: String(e) }));
|
|
150
189
|
},
|
|
151
190
|
onPermissionResponse: (m) => {
|
|
152
|
-
//
|
|
153
|
-
//
|
|
154
|
-
//
|
|
155
|
-
// hook integration (where this decision routes back to a
|
|
156
|
-
// pending hook spawn) is a follow-on once we wire IPC between
|
|
157
|
-
// the long-lived MCP and the short-lived hook process.
|
|
191
|
+
// The operator (or auto-expire) resolved a permission. Push the
|
|
192
|
+
// verdict to Claude via the dedicated permission channel so the
|
|
193
|
+
// pending tool flow can resume without CC having to poll.
|
|
158
194
|
log.info('permission resolved', {
|
|
159
195
|
requestId: m.requestId,
|
|
160
196
|
decision: m.decision,
|
|
161
|
-
message: m.message ?? null,
|
|
162
197
|
});
|
|
198
|
+
const behavior = m.decision === 'allow' ? 'allow' : 'deny';
|
|
199
|
+
server.notification({
|
|
200
|
+
method: 'notifications/claude/channel/permission',
|
|
201
|
+
params: { request_id: m.requestId, behavior },
|
|
202
|
+
}).catch((e) => log.warn('permission notification failed', { error: String(e) }));
|
|
163
203
|
},
|
|
164
204
|
onError: (m) => {
|
|
165
205
|
log.error('hub rejected', { code: m.code, message: m.message });
|
|
166
206
|
},
|
|
167
207
|
});
|
|
168
208
|
client.connect();
|
|
169
|
-
// MCP stdio transport. Phase D ships the four routing tools.
|
|
170
|
-
const server = new Server({
|
|
171
|
-
name: 'clawborrator',
|
|
172
|
-
version: packageVersion(),
|
|
173
|
-
}, {
|
|
174
|
-
capabilities: {
|
|
175
|
-
tools: {},
|
|
176
|
-
},
|
|
177
|
-
});
|
|
178
209
|
// Track our session id so tools (and future use) can reference it.
|
|
179
210
|
// Set by the onWelcome handler above.
|
|
180
211
|
let toolCtxSessionId = null;
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,mEAAmE;AACnE,qDAAqD;AACrD,yEAAyE;AACzE,sCAAsC;AACtC,yEAAyE;AACzE,mCAAmC;AACnC,EAAE;AACF,mEAAmE;AACnE,iEAAiE;AACjE,kEAAkE;AAClE,oEAAoE;AACpE,cAAc;AAEd,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AACnC,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACnD,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAC7C,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,MAAM,EAAE,MAAM,2CAA2C,CAAC;AACnE,OAAO,EAAE,oBAAoB,EAAE,MAAM,2CAA2C,CAAC;AACjF,OAAO,EAAE,sBAAsB,EAAE,qBAAqB,EAAE,MAAM,oCAAoC,CAAC;AACnG,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAC/C,OAAO,EAAE,GAAG,EAAE,MAAM,UAAU,CAAC;AAC/B,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAC3D,OAAO,EAAE,gBAAgB,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC9D,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,mEAAmE;AACnE,qDAAqD;AACrD,yEAAyE;AACzE,sCAAsC;AACtC,yEAAyE;AACzE,mCAAmC;AACnC,EAAE;AACF,mEAAmE;AACnE,iEAAiE;AACjE,kEAAkE;AAClE,oEAAoE;AACpE,cAAc;AAEd,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AACnC,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACnD,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAC7C,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,MAAM,EAAE,MAAM,2CAA2C,CAAC;AACnE,OAAO,EAAE,oBAAoB,EAAE,MAAM,2CAA2C,CAAC;AACjF,OAAO,EAAE,sBAAsB,EAAE,qBAAqB,EAAE,MAAM,oCAAoC,CAAC;AACnG,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAC/C,OAAO,EAAE,GAAG,EAAE,MAAM,UAAU,CAAC;AAC/B,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAC3D,OAAO,EAAE,gBAAgB,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC9D,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,sBAAsB,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AACtF,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAE9C,MAAM,WAAW,GAAG,cAAc,CAAC;AAEnC,MAAM,SAAS,GAAG,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;AAE1D,iEAAiE;AACjE,6DAA6D;AAC7D,sEAAsE;AACtE,sDAAsD;AACtD,MAAM,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC,CAAC;AACnE,IAAI,QAAQ,EAAE,CAAC;IACb,MAAM,IAAI,GAAG,QAAQ,CAAC,KAAK,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;IAC9C,OAAO,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE;QAC1B,GAAG,CAAC,KAAK,CAAC,YAAY,EAAE,EAAE,KAAK,EAAE,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAChD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAG,+CAA+C;IACpE,CAAC,CAAC,CAAC;AACL,CAAC;KAAM,IAAI,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,mBAAmB,CAAC,EAAE,CAAC;IACtD,iEAAiE;IACjE,+DAA+D;IAC/D,iEAAiE;IACjE,wDAAwD;IACxD,iEAAiE;IACjE,MAAM,SAAS,GAAG,OAAO,CAAC,SAAS,EAAE,IAAI,EAAE,WAAW,EAAE,uBAAuB,CAAC,CAAC;IACjF,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;QAC3B,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,mDAAmD,SAAS,IAAI,CAAC,CAAC;QACvF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IACD,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,YAAY,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC,CAAC;IACtD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC;KAAM,CAAC;IACN,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE;QACnB,GAAG,CAAC,KAAK,CAAC,OAAO,EAAE,EAAE,KAAK,EAAE,MAAM,CAAC,GAAG,CAAC,EAAE,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,CAAC,CAAC;QAC9D,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC,CAAC,CAAC;AACL,CAAC;AAED,KAAK,UAAU,IAAI;IACjB,IAAI,MAAM,CAAC;IACX,IAAI,CAAC;QACH,MAAM,GAAG,UAAU,EAAE,CAAC;IACxB,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,GAAG,CAAC,KAAK,CAAC,gBAAgB,EAAE,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;QAClD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,GAAG,CAAC,IAAI,CAAC,2BAA2B,EAAE,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC;IAEjE,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;IAC1B,MAAM,IAAI,GAAG,QAAQ,EAAE,CAAC;IAExB,iEAAiE;IACjE,mEAAmE;IACnE,gEAAgE;IAChE,8DAA8D;IAC9D,8CAA8C;IAC9C,IAAI,CAAC;QACH,MAAM,CAAC,GAAG,YAAY,CAAC,GAAG,CAAC,CAAC;QAC5B,IAAI,CAAC,CAAC,eAAe,IAAI,CAAC,CAAC,eAAe,EAAE,CAAC;YAC3C,GAAG,CAAC,IAAI,CAAC,iBAAiB,EAAE;gBAC1B,QAAQ,EAAS,CAAC,CAAC,eAAe;gBAClC,QAAQ,EAAS,CAAC,CAAC,eAAe;gBAClC,KAAK,EAAY,CAAC,CAAC,KAAK;gBACxB,SAAS,EAAQ,CAAC,CAAC,SAAS;gBAC5B,SAAS,EAAQ,CAAC,CAAC,SAAS;gBAC5B,IAAI,EAAa,CAAC,CAAC,YAAY;aAChC,CAAC,CAAC;QACL,CAAC;aAAM,CAAC;YACN,GAAG,CAAC,KAAK,CAAC,0BAA0B,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC,KAAK,EAAE,SAAS,EAAE,CAAC,CAAC,SAAS,EAAE,SAAS,EAAE,CAAC,CAAC,SAAS,EAAE,CAAC,CAAC;QAC5G,CAAC;IACH,CAAC;IAAC,OAAO,CAAM,EAAE,CAAC;QAChB,iEAAiE;QACjE,mCAAmC;QACnC,GAAG,CAAC,IAAI,CAAC,sBAAsB,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,OAAO,IAAI,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;IACvE,CAAC;IAED,oEAAoE;IACpE,kEAAkE;IAClE,kEAAkE;IAClE,+DAA+D;IAC/D,IAAI,CAAC,MAAM,CAAC,cAAc,EAAE,CAAC;QAC3B,MAAM,SAAS,GAAG,sBAAsB,CAAC,GAAG,CAAC,CAAC;QAC9C,IAAI,SAAS,EAAE,CAAC;YACd,GAAG,CAAC,IAAI,CAAC,8BAA8B,EAAE,EAAE,SAAS,EAAE,SAAS,EAAE,CAAC,CAAC;YACnE,MAAM,GAAG,EAAE,GAAG,MAAM,EAAE,cAAc,EAAE,SAAS,EAAE,CAAC;QACpD,CAAC;IACH,CAAC;SAAM,CAAC;QACN,GAAG,CAAC,IAAI,CAAC,sCAAsC,EAAE,EAAE,SAAS,EAAE,MAAM,CAAC,cAAc,EAAE,CAAC,CAAC;IACzF,CAAC;IAED,gEAAgE;IAChE,gEAAgE;IAChE,oEAAoE;IACpE,qEAAqE;IACrE,+DAA+D;IAC/D,6DAA6D;IAC7D,MAAM,MAAM,GAAG,IAAI,MAAM,CACvB;QACE,IAAI,EAAK,WAAW;QACpB,OAAO,EAAE,cAAc,EAAE;KAC1B,EACD;QACE,YAAY,EAAE;YACZ,YAAY,EAAE;gBACZ,gBAAgB,EAAa,EAAE,EAAI,0CAA0C;gBAC7E,2BAA2B,EAAE,EAAE,EAAI,iCAAiC;aACrE;YACD,KAAK,EAAE,EAAE,WAAW,EAAE,IAAI,EAAE;SAC7B;QACD,YAAY,EACV,8DAA8D,WAAW,yBAAyB;YAClG,mEAAmE;YACnE,wHAAwH;YACxH,gHAAgH;YAChH,oEAAoE;YACpE,uFAAuF;YACvF,+GAA+G;YAC/G,8HAA8H;YAC9H,gIAAgI;YAChI,qOAAqO;YACrO,gfAAgf;KACnf,CACF,CAAC;IAEF,mCAAmC;IACnC,MAAM,MAAM,GAAG,IAAI,aAAa,CAAC,MAAM,EAAE;QACvC,SAAS,EAAE,CAAC,CAAC,EAAE,EAAE;YACf,GAAG,CAAC,IAAI,CAAC,eAAe,EAAE;gBACxB,SAAS,EAAK,CAAC,CAAC,SAAS;gBACzB,WAAW,EAAG,CAAC,CAAC,WAAW;gBAC3B,YAAY,EAAE,CAAC,CAAC,gBAAgB;aACjC,CAAC,CAAC;YACH,6DAA6D;YAC7D,6DAA6D;YAC7D,2DAA2D;YAC3D,6BAA6B;YAC7B,oBAAoB,CAAC,GAAG,EAAE;gBACxB,SAAS,EAAI,CAAC,CAAC,SAAS;gBACxB,WAAW,EAAE,CAAC,CAAC,WAAW;gBAC1B,MAAM,EAAO,MAAM,CAAC,MAAM;aAC3B,CAAC,CAAC;YACH,gEAAgE;YAChE,oDAAoD;YACpD,MAAM,UAAU,GAAG,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;YACzD,YAAY,CAAC;gBACX,SAAS,EAAK,CAAC,CAAC,SAAS;gBACzB,WAAW,EAAG,CAAC,CAAC,WAAW;gBAC3B,MAAM,EAAQ,UAAU;gBACxB,YAAY,EAAE,MAAM,CAAC,KAAK;gBAC1B,IAAI;gBACJ,GAAG;gBACH,SAAS,EAAK,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;aACvC,CAAC,CAAC;QACL,CAAC;QACD,QAAQ,EAAE,CAAC,CAAC,EAAE,EAAE;YACd,6DAA6D;YAC7D,6DAA6D;YAC7D,0DAA0D;YAC1D,0DAA0D;YAC1D,GAAG,CAAC,IAAI,CAAC,iBAAiB,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC;YAClD,MAAM,CAAC,YAAY,CAAC;gBAClB,MAAM,EAAE,8BAA8B;gBACtC,MAAM,EAAE;oBACN,OAAO,EAAE,CAAC,CAAC,IAAI;oBACf,6DAA6D;oBAC7D,kDAAkD;oBAClD,IAAI,EAAE,EAAE,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE;iBAC9C;aACF,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,6BAA6B,EAAE,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QACjF,CAAC;QACD,oBAAoB,EAAE,CAAC,CAAC,EAAE,EAAE;YAC1B,gEAAgE;YAChE,gEAAgE;YAChE,0DAA0D;YAC1D,GAAG,CAAC,IAAI,CAAC,qBAAqB,EAAE;gBAC9B,SAAS,EAAE,CAAC,CAAC,SAAS;gBACtB,QAAQ,EAAG,CAAC,CAAC,QAAQ;aACtB,CAAC,CAAC;YACH,MAAM,QAAQ,GAAG,CAAC,CAAC,QAAQ,KAAK,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC;YAC3D,MAAM,CAAC,YAAY,CAAC;gBAClB,MAAM,EAAE,yCAAyC;gBACjD,MAAM,EAAE,EAAE,UAAU,EAAE,CAAC,CAAC,SAAS,EAAE,QAAQ,EAAE;aAC9C,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,gCAAgC,EAAE,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QACpF,CAAC;QACD,OAAO,EAAE,CAAC,CAAC,EAAE,EAAE;YACb,GAAG,CAAC,KAAK,CAAC,cAAc,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC;QAClE,CAAC;KACF,CAAC,CAAC;IACH,MAAM,CAAC,OAAO,EAAE,CAAC;IAEjB,mEAAmE;IACnE,sCAAsC;IACtC,IAAI,gBAAgB,GAAkB,IAAI,CAAC;IAE3C,MAAM,CAAC,iBAAiB,CAAC,sBAAsB,EAAE,KAAK,IAAI,EAAE,CAAC,CAAC;QAC5D,KAAK,EAAE,gBAAgB,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YAClC,IAAI,EAAS,CAAC,CAAC,IAAI;YACnB,WAAW,EAAE,CAAC,CAAC,WAAW;YAC1B,WAAW,EAAE,CAAC,CAAC,WAAW;SAC3B,CAAC,CAAC;KACJ,CAAC,CAAC,CAAC;IAEJ,MAAM,CAAC,iBAAiB,CAAC,qBAAqB,EAAE,KAAK,EAAE,GAAG,EAAE,EAAE;QAC5D,MAAM,IAAI,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,SAAS,IAAI,EAAE,CAA4B,CAAC;QACrE,OAAO,MAAM,QAAQ,CAAC,EAAE,MAAM,EAAE,SAAS,EAAE,gBAAgB,EAAE,EAAE,GAAG,CAAC,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IACxF,CAAC,CAAC,CAAC;IACH,KAAK,gBAAgB,CAAC;IAEtB,MAAM,SAAS,GAAG,IAAI,oBAAoB,EAAE,CAAC;IAC7C,MAAM,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;IAChC,GAAG,CAAC,IAAI,CAAC,yBAAyB,CAAC,CAAC;IAEpC,iEAAiE;IACjE,qEAAqE;IACrE,KAAK,MAAM,GAAG,IAAI,CAAC,QAAQ,EAAE,SAAS,CAAU,EAAE,CAAC;QACjD,OAAO,CAAC,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE;YACnB,GAAG,CAAC,IAAI,CAAC,eAAe,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC;YAC3C,MAAM,CAAC,IAAI,EAAE,CAAC;YACd,aAAa,CAAC,GAAG,CAAC,CAAC;YACnB,SAAS,CAAC,KAAK,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;YAClC,UAAU,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;QACzC,CAAC,CAAC,CAAC;IACL,CAAC;IACD,gEAAgE;IAChE,uDAAuD;IACvD,OAAO,CAAC,EAAE,CAAC,MAAM,EAAE,GAAG,EAAE,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC;AAC/C,CAAC"}
|
package/dist/tools/index.d.ts
CHANGED
|
@@ -5,19 +5,6 @@ interface CallContext {
|
|
|
5
5
|
sessionId: string | null;
|
|
6
6
|
}
|
|
7
7
|
export declare const TOOL_DEFINITIONS: readonly [{
|
|
8
|
-
readonly name: "await_routed_prompt";
|
|
9
|
-
readonly description: "Check the inbox for a routed prompt from a peer session. Call this at the START of every turn before replying to the user. If the result has a non-null `chatId`, treat `text` as the user prompt for this turn and respond by calling `reply({chat_id, text: <your answer>})`. If `chatId` is null, no peer routed anything — proceed with the actual user message normally.";
|
|
10
|
-
readonly inputSchema: {
|
|
11
|
-
readonly type: "object";
|
|
12
|
-
readonly additionalProperties: false;
|
|
13
|
-
readonly properties: {
|
|
14
|
-
readonly maxWaitMs: {
|
|
15
|
-
readonly type: "number";
|
|
16
|
-
readonly description: "Optional: how long to block waiting for a prompt (default 0 = return immediately).";
|
|
17
|
-
};
|
|
18
|
-
};
|
|
19
|
-
};
|
|
20
|
-
}, {
|
|
21
8
|
readonly name: "reply";
|
|
22
9
|
readonly description: "Post a tagged final reply to a chat. Use this whenever you finish replying to a routed prompt — pass back the chat_id you received from `await_routed_prompt`.";
|
|
23
10
|
readonly inputSchema: {
|
package/dist/tools/index.js
CHANGED
|
@@ -8,23 +8,15 @@
|
|
|
8
8
|
// route_to_peer — send a prompt to one peer; ask blocks for reply,
|
|
9
9
|
// tell is fire-and-forget
|
|
10
10
|
// probe_peers — fan-out a short question across many peers
|
|
11
|
+
//
|
|
12
|
+
// Inbound prompts (operator-driven or peer-routed) arrive directly to
|
|
13
|
+
// Claude via `notifications/claude/channel` — see index.ts onPrompt.
|
|
14
|
+
// No queue, no polling tool.
|
|
11
15
|
import { randomUUID } from 'node:crypto';
|
|
12
|
-
import { awaitDequeue } from '../inbox.js';
|
|
13
16
|
const ASK_TIMEOUT_MS = 60_000;
|
|
14
17
|
const PROBE_TIMEOUT_MS = 30_000;
|
|
15
18
|
const LIST_TIMEOUT_MS = 5_000;
|
|
16
19
|
export const TOOL_DEFINITIONS = [
|
|
17
|
-
{
|
|
18
|
-
name: 'await_routed_prompt',
|
|
19
|
-
description: 'Check the inbox for a routed prompt from a peer session. Call this at the START of every turn before replying to the user. If the result has a non-null `chatId`, treat `text` as the user prompt for this turn and respond by calling `reply({chat_id, text: <your answer>})`. If `chatId` is null, no peer routed anything — proceed with the actual user message normally.',
|
|
20
|
-
inputSchema: {
|
|
21
|
-
type: 'object',
|
|
22
|
-
additionalProperties: false,
|
|
23
|
-
properties: {
|
|
24
|
-
maxWaitMs: { type: 'number', description: 'Optional: how long to block waiting for a prompt (default 0 = return immediately).' },
|
|
25
|
-
},
|
|
26
|
-
},
|
|
27
|
-
},
|
|
28
20
|
{
|
|
29
21
|
name: 'reply',
|
|
30
22
|
description: 'Post a tagged final reply to a chat. Use this whenever you finish replying to a routed prompt — pass back the chat_id you received from `await_routed_prompt`.',
|
|
@@ -75,15 +67,6 @@ export const TOOL_DEFINITIONS = [
|
|
|
75
67
|
];
|
|
76
68
|
export async function callTool(ctx, name, args) {
|
|
77
69
|
switch (name) {
|
|
78
|
-
case 'await_routed_prompt': {
|
|
79
|
-
const maxWaitMs = typeof args.maxWaitMs === 'number' && args.maxWaitMs > 0
|
|
80
|
-
? Math.min(args.maxWaitMs, 60_000) // cap at 60s
|
|
81
|
-
: 0;
|
|
82
|
-
const entry = await awaitDequeue(maxWaitMs);
|
|
83
|
-
if (!entry)
|
|
84
|
-
return textContent(JSON.stringify({ chatId: null, text: null }));
|
|
85
|
-
return textContent(JSON.stringify({ chatId: entry.chatId, text: entry.text }));
|
|
86
|
-
}
|
|
87
70
|
case 'reply': {
|
|
88
71
|
const chatId = String(args.chat_id ?? '').trim();
|
|
89
72
|
const text = String(args.text ?? '');
|
package/dist/tools/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/tools/index.ts"],"names":[],"mappings":"AAAA,mEAAmE;AACnE,sCAAsC;AACtC,EAAE;AACF,iBAAiB;AACjB,kEAAkE;AAClE,oEAAoE;AACpE,oEAAoE;AACpE,uEAAuE;AACvE,8CAA8C;AAC9C,iEAAiE;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/tools/index.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "clawborrator-mcp",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.6",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"description": "clawborrator channel for hub_v1 — MCP server that connects Claude Code to a hub over WebSocket, with hooks for activity capture and tools for cross-session routing.",
|
|
6
6
|
"license": "MIT",
|