@crosscom/toolkit 0.1.1 → 0.2.0

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 CHANGED
@@ -65,6 +65,28 @@ terminals with different identities by overriding `CROSSCOM_IDENTITY` per Claude
65
65
  crosscom whoami
66
66
  crosscom send "My /users endpoint returns {id,email,displayName}"
67
67
  crosscom inbox # add --wait to long-poll in auto mode
68
+ crosscom attention # read-only peek at what's waiting for this terminal
69
+ ```
70
+
71
+ ## Attention hooks (never miss a message)
72
+
73
+ `crosscom setup` (and `crosscom cleanup`) install two Claude Code hooks in
74
+ `~/.claude/settings.json` so a session notices CrossCom traffic on its own —
75
+ no human relay needed:
76
+
77
+ - **Stop** — when the agent tries to go idle while DMs, tracked requests, queued
78
+ work, or mentions are waiting, the hook blocks the stop once and tells it to
79
+ collect them with `crosscom_standby` first.
80
+ - **UserPromptSubmit** — every turn starts with a `[CrossCom] … waiting` note
81
+ when something is pending.
82
+
83
+ Both use the read-only `/agent/attention` peek: nothing is consumed, marked
84
+ seen, or claimed, and unconfigured machines/sessions are skipped silently
85
+ (hooks always fail open). Manage them explicitly with:
86
+
87
+ ```bash
88
+ crosscom hooks # install / refresh
89
+ crosscom hooks --remove # uninstall
68
90
  ```
69
91
 
70
92
  ## How a terminal receives messages
package/dist/cli.js CHANGED
@@ -1,9 +1,14 @@
1
1
  #!/usr/bin/env node
2
2
  import { createInterface } from 'node:readline/promises';
3
3
  import { stdin, stdout } from 'node:process';
4
+ import { execSync } from 'node:child_process';
5
+ import { rmSync, existsSync } from 'node:fs';
6
+ import { homedir } from 'node:os';
7
+ import { join } from 'node:path';
4
8
  import { CrossComClient } from './client.js';
5
9
  import { loadConfig, saveConfig } from './config.js';
6
10
  import { runStdioServer } from './server.js';
11
+ import { installHooks, uninstallHooks, runHook } from './hooks.js';
7
12
  const DEFAULT_SERVER_URL = 'https://crosscom-api.theradio.in';
8
13
  /** Gradient welcome banner (skipped when not a TTY or NO_COLOR is set). */
9
14
  function banner() {
@@ -76,6 +81,12 @@ async function cmdSetup(flags) {
76
81
  console.log(` Config saved to ${path}`);
77
82
  if (res.warning)
78
83
  console.log(`\n⚠ ${res.warning}`);
84
+ // Attention hooks: make Claude Code sessions notice waiting CrossCom items
85
+ // on their own. Only relevant on machines that actually run Claude Code.
86
+ if (!flags['no-hooks'] && existsSync(join(homedir(), '.claude'))) {
87
+ if (installHooks())
88
+ console.log('✓ Claude Code attention hooks installed (~/.claude/settings.json)');
89
+ }
79
90
  // The setup script registers with Claude Code itself and passes --no-hint.
80
91
  if (!flags['no-hint']) {
81
92
  console.log('\nNext: add the toolkit to Claude Code:');
@@ -88,6 +99,67 @@ async function cmdSetup(flags) {
88
99
  process.exit(1);
89
100
  }
90
101
  }
102
+ /** Remove legacy installs/registrations and re-register the npx-based MCP entry. */
103
+ async function cmdCleanup() {
104
+ banner();
105
+ const run = (cmd) => {
106
+ try {
107
+ execSync(cmd, { stdio: 'pipe' });
108
+ return true;
109
+ }
110
+ catch {
111
+ return false;
112
+ }
113
+ };
114
+ const has = (bin) => run(`command -v ${bin}`);
115
+ // 1. Legacy tarball install dir
116
+ const lib = join(homedir(), '.crosscom', 'lib');
117
+ if (existsSync(lib)) {
118
+ rmSync(lib, { recursive: true, force: true });
119
+ console.log('✓ removed legacy install at ~/.crosscom/lib');
120
+ }
121
+ else {
122
+ console.log('· no legacy install dir found');
123
+ }
124
+ // 2. Deduplicate & modernize MCP registrations per agent CLI
125
+ if (has('claude')) {
126
+ for (const scope of ['user', 'local', 'project'])
127
+ run(`claude mcp remove crosscom -s ${scope}`);
128
+ console.log(run('claude mcp add crosscom -s user -- npx -y @crosscom/toolkit serve')
129
+ ? '✓ Claude Code re-registered (npx)'
130
+ : '⚠ Claude Code re-registration failed — run: claude mcp add crosscom -s user -- npx -y @crosscom/toolkit serve');
131
+ }
132
+ if (has('codex')) {
133
+ run('codex mcp remove crosscom');
134
+ console.log(run('codex mcp add crosscom --env CROSSCOM_AGENT=codex -- npx -y @crosscom/toolkit serve')
135
+ ? '✓ Codex CLI re-registered (npx)'
136
+ : '⚠ Codex re-registration failed');
137
+ }
138
+ if (has('gemini')) {
139
+ run('gemini mcp remove crosscom -s user');
140
+ console.log(run('gemini mcp add crosscom -s user -e CROSSCOM_AGENT=gemini npx -y @crosscom/toolkit serve')
141
+ ? '✓ Gemini CLI re-registered (npx)'
142
+ : '⚠ Gemini re-registration failed');
143
+ }
144
+ // 3. Attention hooks — install/refresh (idempotent)
145
+ if (existsSync(join(homedir(), '.claude'))) {
146
+ if (installHooks())
147
+ console.log('✓ Claude Code attention hooks installed/refreshed');
148
+ }
149
+ // 4. Config sanity — keep the key, but flag stale server URLs
150
+ const config = loadConfig();
151
+ if (!config) {
152
+ console.log(`\n⚠ No usable config — run: npx -y @crosscom/toolkit setup`);
153
+ }
154
+ else if (config.url !== DEFAULT_SERVER_URL) {
155
+ console.log(`\n⚠ Config points at ${config.url}`);
156
+ console.log(` If that server is gone, re-run: npx -y @crosscom/toolkit setup --url ${DEFAULT_SERVER_URL}`);
157
+ }
158
+ else {
159
+ console.log(`\n✓ Config OK (${config.url}) — key and identity preserved`);
160
+ }
161
+ console.log('\nCleanup complete. Restart your agent sessions to pick up the new registration.');
162
+ }
91
163
  function requireClient() {
92
164
  const config = loadConfig();
93
165
  if (!config) {
@@ -123,16 +195,41 @@ async function cmdInbox(flags) {
123
195
  else
124
196
  res.messages.forEach((m) => console.log(`[#${m.seq}] ${m.from} (${m.authorType}): ${m.content}`));
125
197
  }
198
+ async function cmdAttention() {
199
+ const a = await requireClient().attention();
200
+ if (a.known === false)
201
+ console.log('This terminal is not registered yet — nothing waiting.');
202
+ else if (a.total === 0)
203
+ console.log('Nothing waiting.');
204
+ else
205
+ console.log(`Waiting for you: ${a.summary}`);
206
+ }
207
+ async function cmdHooks(flags) {
208
+ if (flags.remove === 'true') {
209
+ if (uninstallHooks())
210
+ console.log('✓ CrossCom attention hooks removed from ~/.claude/settings.json');
211
+ }
212
+ else {
213
+ if (installHooks()) {
214
+ console.log('✓ CrossCom attention hooks installed in ~/.claude/settings.json');
215
+ console.log(' Stop → blocks going idle while CrossCom items are waiting');
216
+ console.log(' UserPromptSubmit → surfaces waiting items at the start of every turn');
217
+ }
218
+ }
219
+ }
126
220
  function usage() {
127
221
  banner();
128
222
  console.log(`crosscom — connect this terminal to a CrossCom project
129
223
 
130
224
  Usage:
131
225
  crosscom setup [--url URL --key KEY --identity NAME] Configure & bind this terminal
226
+ crosscom cleanup Remove legacy installs, re-register MCP via npx
132
227
  crosscom serve Run the MCP server (for Claude Code)
133
228
  crosscom whoami Show identity, project, and peers
134
229
  crosscom send <message> Post a message to the project channel
135
230
  crosscom inbox [--wait] Pull new messages
231
+ crosscom attention Peek at what's waiting (read-only)
232
+ crosscom hooks [--remove] Install/remove Claude Code attention hooks
136
233
  `);
137
234
  }
138
235
  async function main() {
@@ -141,6 +238,8 @@ async function main() {
141
238
  switch (command) {
142
239
  case 'setup':
143
240
  return cmdSetup(flags);
241
+ case 'cleanup':
242
+ return cmdCleanup();
144
243
  case 'serve':
145
244
  case 'mcp':
146
245
  return runStdioServer();
@@ -150,6 +249,12 @@ async function main() {
150
249
  return cmdSend(rest);
151
250
  case 'inbox':
152
251
  return cmdInbox(flags);
252
+ case 'attention':
253
+ return cmdAttention();
254
+ case 'hooks':
255
+ return cmdHooks(flags);
256
+ case 'hook':
257
+ return runHook(rest[0]);
153
258
  case undefined:
154
259
  case 'help':
155
260
  case '--help':
package/dist/cli.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
package/dist/client.d.ts CHANGED
@@ -139,6 +139,15 @@ export declare class CrossComClient {
139
139
  standby(timeoutSeconds?: number): Promise<Attention & {
140
140
  timedOut: boolean;
141
141
  }>;
142
+ attention(): Promise<{
143
+ total: number;
144
+ dms: number;
145
+ requests: number;
146
+ queuedWork: number;
147
+ mentions: number;
148
+ summary: string;
149
+ known?: boolean;
150
+ }>;
142
151
  history(count: number, channel?: string, dm?: string): Promise<{
143
152
  messages: InboxMessage[];
144
153
  }>;
package/dist/client.js CHANGED
@@ -83,6 +83,10 @@ export class CrossComClient {
83
83
  standby(timeoutSeconds) {
84
84
  return this.req(`/agent/standby${timeoutSeconds ? `?timeoutSeconds=${timeoutSeconds}` : ''}`);
85
85
  }
86
+ // Read-only peek — never consumes delivery or touches the terminal row.
87
+ attention() {
88
+ return this.req('/agent/attention');
89
+ }
86
90
  history(count, channel, dm) {
87
91
  return this.req(`/agent/messages?${qs({ history: String(count), channel, dm })}`);
88
92
  }
@@ -1 +1 @@
1
- {"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AAEA,qDAAqD;AACrD,SAAS,EAAE,CAAC,MAAoD;IAC9D,MAAM,EAAE,GAAG,IAAI,eAAe,EAAE,CAAC;IACjC,KAAK,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;QAC5C,IAAI,CAAC,KAAK,SAAS,IAAI,CAAC,KAAK,KAAK;YAAE,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;IAC3D,CAAC;IACD,OAAO,EAAE,CAAC,QAAQ,EAAE,CAAC;AACvB,CAAC;AAmDD,+CAA+C;AAC/C,MAAM,OAAO,cAAc;IAKf;IACA;IACA;IANV,uEAAuE;IACvE,yEAAyE;IACzE,wDAAwD;IACxD,YACU,MAAsB,EACtB,SAAkB,EAClB,SAAyB;QAFzB,WAAM,GAAN,MAAM,CAAgB;QACtB,cAAS,GAAT,SAAS,CAAS;QAClB,cAAS,GAAT,SAAS,CAAgB;IAChC,CAAC;IAEJ,IAAI,QAAQ;QACV,OAAO,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC;IAC9B,CAAC;IAED,6EAA6E;IAC7E,KAAK,CAAC,QAAQ,CAAC,WAAmB;QAChC,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,GAAG,CACxB,iBAAiB,EACjB,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,QAAQ,EAAE,WAAW,EAAE,CAAC,EAAE,CACpE,CAAC;QACF,IAAI,CAAC,MAAM,GAAG,EAAE,GAAG,IAAI,CAAC,MAAM,EAAE,QAAQ,EAAE,GAAG,CAAC,QAAQ,EAAE,CAAC;QACzD,OAAO,GAAG,CAAC;IACb,CAAC;IAEO,OAAO,CAAC,OAAgB;QAC9B,OAAO;YACL,4EAA4E;YAC5E,wEAAwE;YACxE,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,cAAc,EAAE,kBAAkB,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YAC1D,gBAAgB,EAAE,IAAI,CAAC,MAAM,CAAC,GAAG;YACjC,qBAAqB,EAAE,IAAI,CAAC,MAAM,CAAC,QAAQ;YAC3C,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,oBAAoB,EAAE,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YACnE,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,kBAAkB,EAAE,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SAClE,CAAC;IACJ,CAAC;IAEO,KAAK,CAAC,GAAG,CAAI,IAAY,EAAE,OAAoB,EAAE;QACvD,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,GAAG,IAAI,EAAE,EAAE;YACnD,GAAG,IAAI;YACP,OAAO,EAAE,EAAE,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,EAAE,GAAG,CAAC,IAAI,CAAC,OAAO,IAAI,EAAE,CAAC,EAAE;SACzE,CAAC,CAAC;QACH,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC;YACZ,IAAI,MAAM,GAAG,QAAQ,GAAG,CAAC,MAAM,EAAE,CAAC;YAClC,IAAI,CAAC;gBACH,MAAM,IAAI,GAAG,CAAC,MAAM,GAAG,CAAC,IAAI,EAAE,CAAuB,CAAC;gBACtD,IAAI,IAAI,CAAC,KAAK;oBAAE,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC;YACtC,CAAC;YAAC,MAAM,CAAC;gBACP,oBAAoB;YACtB,CAAC;YACD,MAAM,IAAI,KAAK,CAAC,4BAA4B,MAAM,EAAE,CAAC,CAAC;QACxD,CAAC;QACD,OAAO,CAAC,MAAM,GAAG,CAAC,IAAI,EAAE,CAAM,CAAC;IACjC,CAAC;IAED,QAAQ;QAMN,OAAO,IAAI,CAAC,GAAG,CAAC,iBAAiB,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;IACzD,CAAC;IAED,MAAM;QACJ,OAAO,IAAI,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC;IACnC,CAAC;IAED,SAAS,CAAC,KAAa;QACrB,OAAO,IAAI,CAAC,GAAG,CAAC,eAAe,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,CAAC;IACxF,CAAC;IAED,SAAS,CAAC,MAAqB;QAC7B,OAAO,IAAI,CAAC,GAAG,CAAC,eAAe,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC,CAAC;IACzF,CAAC;IAED,QAAQ;QACN,OAAO,IAAI,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAC;IACrC,CAAC;IAED,IAAI;QACF,OAAO,IAAI,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;IACjC,CAAC;IAED,QAAQ;QACN,OAAO,IAAI,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAC;IACrC,CAAC;IAED,OAAO,CAAC,cAAuB;QAC7B,OAAO,IAAI,CAAC,GAAG,CAAC,iBAAiB,cAAc,CAAC,CAAC,CAAC,mBAAmB,cAAc,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IAChG,CAAC;IAED,OAAO,CAAC,KAAa,EAAE,OAAgB,EAAE,EAAW;QAClD,OAAO,IAAI,CAAC,GAAG,CAAC,mBAAmB,EAAE,CAAC,EAAE,OAAO,EAAE,MAAM,CAAC,KAAK,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC;IACpF,CAAC;IAED,aAAa,CAAC,EAAU,EAAE,KAAa,EAAE,IAAY;QACnD,OAAO,IAAI,CAAC,GAAG,CAAC,iBAAiB,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC;IACpG,CAAC;IAED,YAAY;QACV,OAAO,IAAI,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAC;IACrC,CAAC;IAED,aAAa,CAAC,EAAU,EAAE,MAA8B,EAAE,MAAc;QACtE,OAAO,IAAI,CAAC,GAAG,CAAC,mBAAmB,EAAE,SAAS,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC,CAAC;IAChH,CAAC;IAED,OAAO,CAAC,EAAU,EAAE,OAAe;QACjC,OAAO,IAAI,CAAC,GAAG,CAAC,cAAc,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,EAAE,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,CAAC;IAC7F,CAAC;IAED,UAAU;QACR,OAAO,IAAI,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;IAClC,CAAC;IAED,+EAA+E;IAC/E,IAAI,CACF,OAAe,EACf,OAAgB,EAChB,EAAW;QAMX,OAAO,IAAI,CAAC,GAAG,CAAC,iBAAiB,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC;IACzG,CAAC;IAED,uEAAuE;IACvE,KAAK,CACH,IAAI,GAAG,KAAK,EACZ,OAAgB,EAChB,EAAW;QAEX,OAAO,IAAI,CAAC,GAAG,CAAC,mBAAmB,EAAE,CAAC,EAAE,IAAI,EAAE,IAAI,IAAI,SAAS,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC;IACrF,CAAC;IAED,wEAAwE;IACxE,eAAe,CACb,OAAgB,EAChB,EAAW;QAEX,OAAO,IAAI,CAAC,GAAG,CAAC,mBAAmB,EAAE,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC;IACzE,CAAC;CACF"}
1
+ {"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ /** Install (or refresh) the attention hooks in ~/.claude/settings.json. */
2
+ export declare function installHooks(): boolean;
3
+ /** Remove our attention hooks from ~/.claude/settings.json. */
4
+ export declare function uninstallHooks(): boolean;
5
+ /**
6
+ * Hook entrypoint (invoked by Claude Code, JSON payload on stdin). Fails OPEN
7
+ * on every path — missing config, dead network, unknown terminal — because a
8
+ * notification helper must never trap or slow the host session.
9
+ */
10
+ export declare function runHook(kind: string | undefined): Promise<void>;
package/dist/hooks.js ADDED
@@ -0,0 +1,152 @@
1
+ import { readFileSync, writeFileSync, mkdirSync, existsSync } from 'node:fs';
2
+ import { homedir } from 'node:os';
3
+ import { join, dirname } from 'node:path';
4
+ import { loadConfigRaw, resolveIdentityFor, claudeSessionId } from './config.js';
5
+ /**
6
+ * Claude Code hooks that make a session *notice* CrossCom traffic on its own:
7
+ * - Stop: blocks going idle while DMs / requests / queued work / mentions are
8
+ * waiting, telling the agent to collect them with crosscom_standby first.
9
+ * - UserPromptSubmit: injects a pending-items line so every turn starts aware.
10
+ * Both call the read-only /agent/attention peek — nothing is consumed, so the
11
+ * items are still delivered normally when the agent picks them up.
12
+ */
13
+ const SETTINGS_PATH = join(homedir(), '.claude', 'settings.json');
14
+ // Our entries are recognized (for idempotent install/remove) by this substring.
15
+ const HOOK_MARKER = '@crosscom/toolkit hook';
16
+ const HOOK_EVENTS = {
17
+ Stop: 'stop',
18
+ UserPromptSubmit: 'prompt',
19
+ };
20
+ function hookCommand(kind) {
21
+ return `npx -y ${HOOK_MARKER} ${kind}`;
22
+ }
23
+ function readSettings() {
24
+ if (!existsSync(SETTINGS_PATH))
25
+ return { settings: {}, corrupt: false };
26
+ try {
27
+ return { settings: JSON.parse(readFileSync(SETTINGS_PATH, 'utf8')), corrupt: false };
28
+ }
29
+ catch {
30
+ return { settings: {}, corrupt: true };
31
+ }
32
+ }
33
+ function stripOurs(entries) {
34
+ return (entries ?? []).filter((e) => !(e.hooks ?? []).some((h) => (h.command ?? '').includes(HOOK_MARKER)));
35
+ }
36
+ /** Install (or refresh) the attention hooks in ~/.claude/settings.json. */
37
+ export function installHooks() {
38
+ const { settings, corrupt } = readSettings();
39
+ if (corrupt) {
40
+ console.error(`⚠ ${SETTINGS_PATH} is not valid JSON — fix it, then re-run \`crosscom hooks\`.`);
41
+ return false;
42
+ }
43
+ const hooks = (settings.hooks ?? {});
44
+ for (const [event, kind] of Object.entries(HOOK_EVENTS)) {
45
+ hooks[event] = [
46
+ ...stripOurs(hooks[event]),
47
+ { hooks: [{ type: 'command', command: hookCommand(kind), timeout: 30 }] },
48
+ ];
49
+ }
50
+ settings.hooks = hooks;
51
+ mkdirSync(dirname(SETTINGS_PATH), { recursive: true });
52
+ writeFileSync(SETTINGS_PATH, JSON.stringify(settings, null, 2) + '\n');
53
+ return true;
54
+ }
55
+ /** Remove our attention hooks from ~/.claude/settings.json. */
56
+ export function uninstallHooks() {
57
+ const { settings, corrupt } = readSettings();
58
+ if (corrupt) {
59
+ console.error(`⚠ ${SETTINGS_PATH} is not valid JSON — fix it manually.`);
60
+ return false;
61
+ }
62
+ if (!settings.hooks)
63
+ return true;
64
+ const hooks = settings.hooks;
65
+ for (const event of Object.keys(HOOK_EVENTS)) {
66
+ const kept = stripOurs(hooks[event]);
67
+ if (kept.length > 0)
68
+ hooks[event] = kept;
69
+ else
70
+ delete hooks[event];
71
+ }
72
+ if (Object.keys(hooks).length === 0)
73
+ delete settings.hooks;
74
+ writeFileSync(SETTINGS_PATH, JSON.stringify(settings, null, 2) + '\n');
75
+ return true;
76
+ }
77
+ function readStdinToEnd(timeoutMs) {
78
+ return new Promise((resolve) => {
79
+ if (process.stdin.isTTY)
80
+ return resolve('');
81
+ let data = '';
82
+ const timer = setTimeout(() => resolve(data), timeoutMs);
83
+ process.stdin.setEncoding('utf8');
84
+ process.stdin.on('data', (chunk) => (data += chunk));
85
+ process.stdin.on('end', () => {
86
+ clearTimeout(timer);
87
+ resolve(data);
88
+ });
89
+ process.stdin.on('error', () => {
90
+ clearTimeout(timer);
91
+ resolve(data);
92
+ });
93
+ });
94
+ }
95
+ /**
96
+ * Hook entrypoint (invoked by Claude Code, JSON payload on stdin). Fails OPEN
97
+ * on every path — missing config, dead network, unknown terminal — because a
98
+ * notification helper must never trap or slow the host session.
99
+ */
100
+ export async function runHook(kind) {
101
+ if (kind !== 'stop' && kind !== 'prompt') {
102
+ console.error('Usage: crosscom hook <stop|prompt> (invoked by Claude Code hooks)');
103
+ process.exit(1);
104
+ }
105
+ try {
106
+ let payload = {};
107
+ try {
108
+ payload = JSON.parse(await readStdinToEnd(2000));
109
+ }
110
+ catch {
111
+ /* no/invalid stdin — fall back to env */
112
+ }
113
+ // Already continued once because of us — let the session stop this time.
114
+ if (kind === 'stop' && payload.stop_hook_active)
115
+ return;
116
+ const sessionId = payload.session_id || claudeSessionId();
117
+ const cfg = loadConfigRaw();
118
+ if (!cfg.url || !cfg.key || !sessionId)
119
+ return;
120
+ const identity = resolveIdentityFor(sessionId);
121
+ const controller = new AbortController();
122
+ const timer = setTimeout(() => controller.abort(), 4000);
123
+ const res = await fetch(`${cfg.url}/agent/attention`, {
124
+ headers: { 'X-CrossCom-Key': cfg.key, 'X-CrossCom-Terminal': identity },
125
+ signal: controller.signal,
126
+ });
127
+ clearTimeout(timer);
128
+ if (!res.ok)
129
+ return;
130
+ const data = (await res.json());
131
+ if (!data.known || !data.total)
132
+ return;
133
+ if (kind === 'stop') {
134
+ console.log(JSON.stringify({
135
+ decision: 'block',
136
+ reason: `CrossCom: ${data.summary} waiting for this terminal ("${identity}"). Collect them with crosscom_standby, handle each item (answer requests with crosscom_answer, reply to DMs with crosscom_dm), then finish.`,
137
+ }));
138
+ }
139
+ else {
140
+ console.log(JSON.stringify({
141
+ hookSpecificOutput: {
142
+ hookEventName: 'UserPromptSubmit',
143
+ additionalContext: `[CrossCom] ${data.summary} waiting for this terminal ("${identity}") — collect with crosscom_standby after handling the user's request.`,
144
+ },
145
+ }));
146
+ }
147
+ }
148
+ catch {
149
+ /* fail open */
150
+ }
151
+ }
152
+ //# sourceMappingURL=hooks.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hooks.js","sourceRoot":"","sources":["../src/hooks.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@crosscom/toolkit",
3
- "version": "0.1.1",
3
+ "version": "0.2.0",
4
4
  "description": "Connect your AI coding agent (Claude Code, Codex CLI, Gemini CLI, Cursor…) to CrossCom — agents collaborate across machines, humans govern everything.",
5
5
  "type": "module",
6
6
  "bin": {