@masstensor/anotify 0.0.0-stage → 0.5.9
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/LICENSE +21 -0
- package/README.md +14 -2
- package/dist/src/adapters.js +97 -0
- package/dist/src/adapters.js.map +1 -0
- package/dist/src/claude-question-wait.js +67 -0
- package/dist/src/claude-question-wait.js.map +1 -0
- package/dist/src/claude-question.js +22 -0
- package/dist/src/claude-question.js.map +1 -0
- package/dist/src/claude.js +23 -0
- package/dist/src/claude.js.map +1 -0
- package/dist/src/cli.js +294 -0
- package/dist/src/cli.js.map +1 -0
- package/dist/src/codex-readiness.js +37 -0
- package/dist/src/codex-readiness.js.map +1 -0
- package/dist/src/config.js +21 -0
- package/dist/src/config.js.map +1 -0
- package/dist/src/crypto.js +26 -0
- package/dist/src/crypto.js.map +1 -0
- package/dist/src/daemon.js +356 -0
- package/dist/src/daemon.js.map +1 -0
- package/dist/src/demand.js +89 -0
- package/dist/src/demand.js.map +1 -0
- package/dist/src/device-name.js +12 -0
- package/dist/src/device-name.js.map +1 -0
- package/dist/src/http.js +38 -0
- package/dist/src/http.js.map +1 -0
- package/dist/src/install.js +254 -0
- package/dist/src/install.js.map +1 -0
- package/dist/src/integration.js +184 -0
- package/dist/src/integration.js.map +1 -0
- package/dist/src/mcp.js +48 -0
- package/dist/src/mcp.js.map +1 -0
- package/dist/src/native-owner.js +44 -0
- package/dist/src/native-owner.js.map +1 -0
- package/dist/src/npm-cli.js +24 -0
- package/dist/src/npm-cli.js.map +1 -0
- package/dist/src/owners.js +57 -0
- package/dist/src/owners.js.map +1 -0
- package/dist/src/pairing-cli.js +125 -0
- package/dist/src/pairing-cli.js.map +1 -0
- package/dist/src/pairing.js +57 -0
- package/dist/src/pairing.js.map +1 -0
- package/dist/src/preferences.js +18 -0
- package/dist/src/preferences.js.map +1 -0
- package/dist/src/protocol.js +40 -0
- package/dist/src/protocol.js.map +1 -0
- package/dist/src/question-crypto.js +29 -0
- package/dist/src/question-crypto.js.map +1 -0
- package/dist/src/readiness.js +58 -0
- package/dist/src/readiness.js.map +1 -0
- package/dist/src/service.js +57 -0
- package/dist/src/service.js.map +1 -0
- package/dist/src/sessions.js +217 -0
- package/dist/src/sessions.js.map +1 -0
- package/dist/src/setup-cli.js +59 -0
- package/dist/src/setup-cli.js.map +1 -0
- package/dist/src/terminal.js +68 -0
- package/dist/src/terminal.js.map +1 -0
- package/dist/src/vault.js +49 -0
- package/dist/src/vault.js.map +1 -0
- package/dist/src/wizard.js +43 -0
- package/dist/src/wizard.js.map +1 -0
- package/npm-shrinkwrap.json +1919 -0
- package/package.json +26 -4
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../../src/cli.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import { spawn } from 'node:child_process';
|
|
2
|
+
import { createInterface } from 'node:readline';
|
|
3
|
+
export async function codexHooks(cwd) {
|
|
4
|
+
const child = spawn('codex', ['app-server', '--stdio', '-c', 'features.hooks=true'], { stdio: ['pipe', 'pipe', 'ignore'] });
|
|
5
|
+
let serial = 0;
|
|
6
|
+
const pending = new Map();
|
|
7
|
+
const fail = () => { for (const request of pending.values())
|
|
8
|
+
request.reject(Error('Codex hook inspection unavailable')); pending.clear(); };
|
|
9
|
+
child.on('error', fail);
|
|
10
|
+
child.on('exit', fail);
|
|
11
|
+
child.stdin.on('error', fail);
|
|
12
|
+
const reader = createInterface({ input: child.stdout });
|
|
13
|
+
reader.on('line', line => { try {
|
|
14
|
+
const message = JSON.parse(line);
|
|
15
|
+
const request = pending.get(message.id);
|
|
16
|
+
if (request) {
|
|
17
|
+
pending.delete(message.id);
|
|
18
|
+
message.error ? request.reject(Error('Codex rejected hook inspection')) : request.resolve(message.result);
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
catch { } });
|
|
22
|
+
const request = (method, params) => new Promise((resolve, reject) => { const id = ++serial; pending.set(id, { resolve, reject }); child.stdin.write(JSON.stringify({ id, method, params }) + '\n'); });
|
|
23
|
+
const timer = setTimeout(() => { fail(); child.kill(); }, 10000);
|
|
24
|
+
try {
|
|
25
|
+
await request('initialize', { clientInfo: { name: 'anotify_doctor', title: 'Agent Notify diagnostics', version: '0.3.0' }, capabilities: { experimentalApi: true, requestAttestation: false } });
|
|
26
|
+
child.stdin.write('{"method":"initialized"}\n');
|
|
27
|
+
const response = await request('hooks/list', { cwds: [cwd] });
|
|
28
|
+
return response.data.flatMap(entry => entry.hooks);
|
|
29
|
+
}
|
|
30
|
+
finally {
|
|
31
|
+
clearTimeout(timer);
|
|
32
|
+
reader.close();
|
|
33
|
+
child.stdin.end();
|
|
34
|
+
child.kill();
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
//# sourceMappingURL=codex-readiness.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"codex-readiness.js","sourceRoot":"","sources":["../../src/codex-readiness.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { resolve } from 'node:path';
|
|
2
|
+
const quote = (s) => "'" + s.replaceAll("'", "'\\''") + "'";
|
|
3
|
+
export function hostConfig(host, cli = resolve('dist/src/cli.js')) {
|
|
4
|
+
const alias = host === 'claude-code' ? 'claude' : host === 'gemini-cli' ? 'gemini' : 'codex';
|
|
5
|
+
const command = [process.execPath, cli, 'hook', alias].map(quote).join(' ');
|
|
6
|
+
const events = ['SessionStart', 'SessionEnd', ...(host === 'gemini-cli' ? ['BeforeAgent', 'BeforeTool', 'AfterAgent', 'Notification'] : ['PreToolUse', 'Stop', host === 'codex' ? 'PermissionRequest' : 'Notification'])];
|
|
7
|
+
const hooks = Object.fromEntries(events.map(event => [event, [{
|
|
8
|
+
...(event === 'PreToolUse' ? { matcher: host === 'claude-code' ? 'mcp__agent_notify__.*|AskUserQuestion' : 'mcp__agent_notify__.*' } : {}),
|
|
9
|
+
...(event === 'BeforeTool' ? { matcher: 'mcp_agent_notify_.*' } : {}),
|
|
10
|
+
...(event === 'Notification' ? { matcher: host === 'claude-code' ? 'permission_prompt' : 'ToolPermission' } : {}),
|
|
11
|
+
hooks: [{ type: 'command', name: 'agent-notify-' + event, command, timeout: host === 'gemini-cli' ? 10000 : 10 }],
|
|
12
|
+
}]]));
|
|
13
|
+
const server = { command: process.execPath, args: [cli, 'mcp', alias], ...(host === 'gemini-cli' ? { env: { AGENT_NOTIFY_INSTANCE: '${AGENT_NOTIFY_INSTANCE}', AGENT_NOTIFY_HOME: '${AGENT_NOTIFY_HOME}', AGENT_NOTIFY_DEV_FILE_KEY: '${AGENT_NOTIFY_DEV_FILE_KEY}' } } : {}) };
|
|
14
|
+
const launch = [process.execPath, cli, 'run', alias].map(quote).join(' ');
|
|
15
|
+
if (host !== 'codex')
|
|
16
|
+
return { launch, settings: { hooks }, mcp: { mcpServers: { agent_notify: server } } };
|
|
17
|
+
const handler = `{ type = "command", command = ${JSON.stringify(command)}, timeout = 10 }`;
|
|
18
|
+
const toml = ['[features]', 'hooks = true', '', '[mcp_servers.agent_notify]', `command = ${JSON.stringify(server.command)}`, `args = ${JSON.stringify(server.args)}`, 'env_vars = ["AGENT_NOTIFY_INSTANCE", "AGENT_NOTIFY_HOME", "AGENT_NOTIFY_DEV_FILE_KEY"]', '', '[hooks]', ...events.map(event => `${event} = [{ ${event === 'PreToolUse' ? 'matcher = "mcp__agent_notify__.*", ' : ''}hooks = [${handler}] }]`)].join('\n') + '\n';
|
|
19
|
+
return { launch, toml, hooks: { hooks } };
|
|
20
|
+
}
|
|
21
|
+
//# sourceMappingURL=config.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/config.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { CipherSuite, DhkemP256HkdfSha256, HkdfSha256, Aes256Gcm } from '@hpke/core';
|
|
2
|
+
import { aad, info, contentSchema } from './protocol.js';
|
|
3
|
+
const suite = new CipherSuite({ kem: new DhkemP256HkdfSha256(), kdf: new HkdfSha256(), aead: new Aes256Gcm() });
|
|
4
|
+
const bytes = (s) => new Uint8Array(Buffer.from(s, 'base64url'));
|
|
5
|
+
const encode = (data) => Buffer.from(data).toString('base64url');
|
|
6
|
+
export async function generateKeys() { const pair = await suite.kem.generateKeyPair(); return { privateKey: encode(await suite.kem.serializePrivateKey(pair.privateKey)), publicKey: encode(await suite.kem.serializePublicKey(pair.publicKey)) }; }
|
|
7
|
+
export async function seal(header, content, sender, recipientPublicKey) {
|
|
8
|
+
content = contentSchema.parse(content);
|
|
9
|
+
const recipient = await suite.kem.deserializePublicKey(bytes(recipientPublicKey));
|
|
10
|
+
const senderKey = await suite.kem.deserializePrivateKey(bytes(sender.privateKey));
|
|
11
|
+
async function box(purpose, value) { const context = await suite.createSenderContext({ recipientPublicKey: recipient, senderKey, info: info(purpose) }); return { enc: encode(context.enc), ct: encode(await context.seal(new TextEncoder().encode(JSON.stringify(value)), aad(header, purpose))) }; }
|
|
12
|
+
const label = content.host ? { 'claude-code': 'Claude Code', codex: 'Codex', 'gemini-cli': 'Gemini CLI' }[content.host] : undefined;
|
|
13
|
+
const clean = (value) => value.replace(/[\u0000-\u001f\u007f]/g, ' ').replace(/\s+/g, ' ').trim();
|
|
14
|
+
const title = label ? [label, content.project ? Array.from(clean(content.project)).slice(0, 80).join('') : undefined].filter(Boolean).join(' · ') : content.title;
|
|
15
|
+
const subtitle = label ? [content.title, content.sessionId ? 'Session ' + content.sessionId.slice(-8) : undefined].filter(Boolean).join(' · ') : undefined;
|
|
16
|
+
const preview = { title, ...(subtitle ? { subtitle: Array.from(clean(subtitle)).slice(0, 160).join('') } : {}), body: Array.from(content.markdown.replace(/\s+/g, ' ')).slice(0, 160).join('') };
|
|
17
|
+
return { header, body: await box('body', content), preview: await box('preview', preview) };
|
|
18
|
+
}
|
|
19
|
+
export async function open(envelope, recipient, senderPublicKey, purpose = 'body') {
|
|
20
|
+
if (envelope.header.expiresAt <= Date.now())
|
|
21
|
+
throw new Error('Message expired');
|
|
22
|
+
const context = await suite.createRecipientContext({ recipientKey: await suite.kem.deserializePrivateKey(bytes(recipient.privateKey)), senderPublicKey: await suite.kem.deserializePublicKey(bytes(senderPublicKey)), enc: bytes(envelope[purpose].enc), info: info(purpose) });
|
|
23
|
+
const plaintext = await context.open(bytes(envelope[purpose].ct), aad(envelope.header, purpose));
|
|
24
|
+
return JSON.parse(new TextDecoder().decode(plaintext));
|
|
25
|
+
}
|
|
26
|
+
//# sourceMappingURL=crypto.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"crypto.js","sourceRoot":"","sources":["../../src/crypto.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,356 @@
|
|
|
1
|
+
import { basename } from 'node:path';
|
|
2
|
+
import { DatabaseSync } from 'node:sqlite';
|
|
3
|
+
import { randomUUID } from 'node:crypto';
|
|
4
|
+
import { join } from 'node:path';
|
|
5
|
+
import { z } from 'zod';
|
|
6
|
+
import { computerName } from './device-name.js';
|
|
7
|
+
import { seal } from './crypto.js';
|
|
8
|
+
import { contentSchema, hash, hostSchema } from './protocol.js';
|
|
9
|
+
import { request, listen, bearer, jsonBody, send, HttpError } from './http.js';
|
|
10
|
+
import { Sessions } from './sessions.js';
|
|
11
|
+
import { bindingKey, hostHook } from './adapters.js';
|
|
12
|
+
import { ownerSchema } from './owners.js';
|
|
13
|
+
import { readPreferences, writePreferences, preferencesSchema } from './preferences.js';
|
|
14
|
+
const contextSchema = z.object({ host: hostSchema, sessionId: z.string().min(1).max(200), turnId: z.string().min(1).max(200) }).strict();
|
|
15
|
+
const eventSchema = z.object({ context: contextSchema, source: z.enum(['hook', 'mcp']), callId: z.string().min(1).max(200).optional(), content: contentSchema }).strict();
|
|
16
|
+
export class Daemon {
|
|
17
|
+
vault;
|
|
18
|
+
startedAt = new Date().toISOString();
|
|
19
|
+
db;
|
|
20
|
+
sessions;
|
|
21
|
+
busy = false;
|
|
22
|
+
pending = Promise.resolve();
|
|
23
|
+
constructor(vault) {
|
|
24
|
+
this.vault = vault;
|
|
25
|
+
this.db = new DatabaseSync(join(vault.dir, 'local.sqlite'));
|
|
26
|
+
this.db.exec(`PRAGMA journal_mode=WAL;
|
|
27
|
+
CREATE TABLE IF NOT EXISTS policies(host TEXT,session TEXT,mode TEXT,PRIMARY KEY(host,session));
|
|
28
|
+
CREATE TABLE IF NOT EXISTS armed(host TEXT,session TEXT,turn TEXT,PRIMARY KEY(host,session));
|
|
29
|
+
CREATE TABLE IF NOT EXISTS events(key TEXT PRIMARY KEY,id TEXT,revision INTEGER,digest TEXT,envelope TEXT,status TEXT);
|
|
30
|
+
CREATE TABLE IF NOT EXISTS contexts(token TEXT PRIMARY KEY,value TEXT,expires INTEGER);`);
|
|
31
|
+
this.db.exec('CREATE TABLE IF NOT EXISTS session_projects(host TEXT NOT NULL,session TEXT NOT NULL,value TEXT NOT NULL,PRIMARY KEY(host,session))');
|
|
32
|
+
this.db.exec('CREATE TABLE IF NOT EXISTS context_clients(token TEXT PRIMARY KEY,client TEXT NOT NULL)');
|
|
33
|
+
this.db.exec('CREATE TABLE IF NOT EXISTS attention_events(key TEXT PRIMARY KEY,host TEXT NOT NULL,session TEXT NOT NULL,turn TEXT NOT NULL)');
|
|
34
|
+
this.db.exec('CREATE TABLE IF NOT EXISTS event_types(key TEXT PRIMARY KEY,source TEXT NOT NULL,kind TEXT NOT NULL)');
|
|
35
|
+
this.sessions = new Sessions(this.db);
|
|
36
|
+
}
|
|
37
|
+
policy(host, session, mode, armedTurn) { this.sessions.policy(host, session, mode, armedTurn); if (mode === 'off')
|
|
38
|
+
this.db.prepare("UPDATE events SET status='superseded' WHERE status='queued' AND key IN (SELECT key FROM attention_events WHERE host=? AND session=?)").run(host, session); }
|
|
39
|
+
settings(input) { const settings = preferencesSchema.parse(input); this.db.exec('BEGIN IMMEDIATE'); try {
|
|
40
|
+
writePreferences(this.db, settings);
|
|
41
|
+
if (!settings.permissionAlerts)
|
|
42
|
+
this.db.exec("UPDATE events SET status='superseded' WHERE status='queued' AND key IN (SELECT key FROM event_types WHERE kind='attention')");
|
|
43
|
+
if (settings.paused)
|
|
44
|
+
this.db.exec("UPDATE events SET status='superseded' WHERE status='queued' AND key IN (SELECT key FROM event_types WHERE source='hook')");
|
|
45
|
+
this.db.exec('COMMIT');
|
|
46
|
+
return settings;
|
|
47
|
+
}
|
|
48
|
+
catch (error) {
|
|
49
|
+
this.db.exec('ROLLBACK');
|
|
50
|
+
throw error;
|
|
51
|
+
} }
|
|
52
|
+
testNotification() {
|
|
53
|
+
return this.serialize(async () => {
|
|
54
|
+
const config = this.vault.load('sender');
|
|
55
|
+
if (!config)
|
|
56
|
+
throw new HttpError(409, 'Pair this Mac before sending a test');
|
|
57
|
+
const id = randomUUID(), key = hash('management-test:' + id), name = computerName(), content = { kind: 'content', title: 'Agent Notify test', markdown: 'Your Mac can send encrypted messages. This is a manual setup test, not an Agent task result.', project: 'Agent Notify', ...(name ? { deviceName: name } : {}) };
|
|
58
|
+
const envelope = await seal({ v: 1, deviceId: config.deviceId, senderId: config.senderId, messageId: id, revision: 1, expiresAt: Date.now() + 300000 }, content, config.keys, config.recipientPublicKey);
|
|
59
|
+
this.db.exec('BEGIN IMMEDIATE');
|
|
60
|
+
try {
|
|
61
|
+
this.db.prepare('INSERT INTO events VALUES(?,?,?,?,?,?)').run(key, id, 1, hash(JSON.stringify(content)), this.vault.encrypt(envelope), 'queued');
|
|
62
|
+
this.db.prepare('INSERT INTO event_types VALUES(?,?,?)').run(key, 'management', 'content');
|
|
63
|
+
this.db.exec('COMMIT');
|
|
64
|
+
}
|
|
65
|
+
catch (error) {
|
|
66
|
+
this.db.exec('ROLLBACK');
|
|
67
|
+
throw error;
|
|
68
|
+
}
|
|
69
|
+
return { messageId: id, status: 'queued', phoneDisplay: 'not_confirmed' };
|
|
70
|
+
});
|
|
71
|
+
}
|
|
72
|
+
bind(context, call, instance) { const c = contextSchema.parse(context); if (instance)
|
|
73
|
+
this.sessions.assertSession(instance, c.host, c.sessionId); const capability = call ? bindingKey(c.host, call) : randomUUID(); this.db.prepare('DELETE FROM contexts WHERE expires<?').run(Date.now()); this.db.exec('DELETE FROM context_clients WHERE token NOT IN (SELECT token FROM contexts)'); const old = this.db.prepare('SELECT value FROM contexts WHERE token=?').get(capability); if (old && old.value !== JSON.stringify(c))
|
|
74
|
+
throw new HttpError(409, 'Conflicting tool context'); const owner = this.db.prepare('SELECT client FROM context_clients WHERE token=?').get(capability); if (owner && owner.client !== instance)
|
|
75
|
+
throw new HttpError(409, 'Tool context belongs to another client'); this.db.prepare('INSERT OR REPLACE INTO contexts VALUES(?,?,?)').run(capability, JSON.stringify(c), Date.now() + 86400000); if (instance)
|
|
76
|
+
this.db.prepare('INSERT OR REPLACE INTO context_clients VALUES(?,?)').run(capability, instance); return capability; }
|
|
77
|
+
resolve(capability, instance) { const row = this.db.prepare('SELECT value FROM contexts WHERE token=? AND expires>?').get(capability, Date.now()); if (!row)
|
|
78
|
+
throw new HttpError(409, 'Missing verified session context'); const c = contextSchema.parse(JSON.parse(row.value)); const owner = this.db.prepare('SELECT client FROM context_clients WHERE token=?').get(capability); if (owner) {
|
|
79
|
+
if (owner.client !== instance)
|
|
80
|
+
throw new HttpError(409, 'Tool context belongs to another client');
|
|
81
|
+
this.sessions.assertSession(instance, c.host, c.sessionId);
|
|
82
|
+
}
|
|
83
|
+
else if (instance)
|
|
84
|
+
throw new HttpError(409, 'Tool context was not registered by this client'); return c; }
|
|
85
|
+
serialize(work) { const next = this.pending.then(work); this.pending = next.catch(() => { }); return next; }
|
|
86
|
+
enqueue(input) { return this.serialize(() => this.enqueueSerial(input)); }
|
|
87
|
+
hook(host, instance, input, nativeOwner) {
|
|
88
|
+
return this.serialize(async () => {
|
|
89
|
+
const direct = !instance;
|
|
90
|
+
const raw = z.object({ session_id: z.string().min(1).max(200), hook_event_name: z.string().min(1).max(200), source: z.string().optional(), agent_id: z.string().optional() }).passthrough().parse(input);
|
|
91
|
+
if (raw.agent_id)
|
|
92
|
+
return {};
|
|
93
|
+
if (typeof raw.cwd === 'string' && raw.cwd) {
|
|
94
|
+
const project = basename(raw.cwd).replace(/[\u0000-\u001f\u007f]/g, '').slice(0, 200);
|
|
95
|
+
if (project)
|
|
96
|
+
this.db.prepare('INSERT OR REPLACE INTO session_projects VALUES(?,?,?)').run(host, raw.session_id, this.vault.encrypt(project));
|
|
97
|
+
}
|
|
98
|
+
const client = instance ?? this.sessions.direct(host, raw.session_id, raw.hook_event_name, raw.source, nativeOwner);
|
|
99
|
+
if (!client)
|
|
100
|
+
return {};
|
|
101
|
+
// Desktop and automatic approval reviewers can emit many permission checks in one turn.
|
|
102
|
+
// The first alert is sufficient; do not send one push for each subsequent check.
|
|
103
|
+
if (direct && host === 'codex' && raw.hook_event_name === 'PermissionRequest') {
|
|
104
|
+
const turn = z.string().min(1).max(200).safeParse(raw.turn_id);
|
|
105
|
+
if (turn.success && this.db.prepare('SELECT 1 FROM attention_events WHERE host=? AND session=? AND turn=? LIMIT 1').get(host, raw.session_id, turn.data))
|
|
106
|
+
return {};
|
|
107
|
+
}
|
|
108
|
+
const result = await hostHook(host, client, input, this.sessions, async (path, body) => {
|
|
109
|
+
if (path === '/event')
|
|
110
|
+
return this.enqueueSerial(body);
|
|
111
|
+
const { call, ...context } = z.object({ host: hostSchema, sessionId: z.string(), turnId: z.string(), call: z.string().optional() }).parse(body);
|
|
112
|
+
return { capability: this.bind(context, call, direct ? undefined : client) };
|
|
113
|
+
});
|
|
114
|
+
if (direct && raw.hook_event_name === 'SessionEnd')
|
|
115
|
+
this.sessions.close(client);
|
|
116
|
+
return result;
|
|
117
|
+
});
|
|
118
|
+
}
|
|
119
|
+
async enqueueSerial(input) {
|
|
120
|
+
const event = eventSchema.parse(input);
|
|
121
|
+
const { source, content } = event;
|
|
122
|
+
const c = { ...event.context, turnId: source === 'hook' ? this.sessions.canonical(event.context.host, event.context.sessionId, event.context.turnId) : event.context.turnId };
|
|
123
|
+
if (source === 'mcp' && !['progress', 'content', 'action_required'].includes(content.kind))
|
|
124
|
+
throw new HttpError(400, 'MCP can only send progress or explicit content');
|
|
125
|
+
if (source === 'hook' && !['turn_end', 'attention', 'action_required', 'question'].includes(content.kind))
|
|
126
|
+
throw new HttpError(400, 'Hook requires turn_end, attention or question');
|
|
127
|
+
if (source === 'hook' && ['attention', 'action_required', 'question'].includes(content.kind) && !event.callId)
|
|
128
|
+
throw new HttpError(400, 'Request identity required');
|
|
129
|
+
if (source === 'mcp' && !event.callId)
|
|
130
|
+
throw new HttpError(400, 'MCP call identity required');
|
|
131
|
+
const settings = readPreferences(this.db);
|
|
132
|
+
const mode = this.sessions.mode(c.host, c.sessionId);
|
|
133
|
+
const armed = this.db.prepare('SELECT turn FROM armed WHERE host=? AND session=?').get(c.host, c.sessionId)?.turn;
|
|
134
|
+
const armedTurn = armed ? this.sessions.canonical(c.host, c.sessionId, armed) : undefined;
|
|
135
|
+
if (source === 'hook' && content.kind === 'turn_end') {
|
|
136
|
+
for (const pending of this.db.prepare('SELECT key,turn FROM attention_events WHERE host=? AND session=?').all(c.host, c.sessionId))
|
|
137
|
+
if (this.sessions.canonical(c.host, c.sessionId, pending.turn) === c.turnId)
|
|
138
|
+
this.db.prepare("UPDATE events SET status='superseded' WHERE key=? AND status='queued'").run(pending.key);
|
|
139
|
+
}
|
|
140
|
+
const key = hash(JSON.stringify([c.host, c.sessionId, c.turnId, source, source === 'hook' ? (['attention', 'action_required', 'question'].includes(content.kind) ? content.kind + ':' + event.callId : 'end') : event.callId]));
|
|
141
|
+
const old = this.db.prepare('SELECT * FROM events WHERE key=?').get(key);
|
|
142
|
+
// A once policy closes new turns, while later attempts of its admitted turn update the same message.
|
|
143
|
+
if (source === 'hook' && (settings.paused || mode === 'off' || (mode === 'spent' && !old) || (mode === 'once' && armedTurn === c.turnId)))
|
|
144
|
+
return { status: 'disabled' };
|
|
145
|
+
if (source === 'hook' && content.kind === 'attention' && !settings.permissionAlerts)
|
|
146
|
+
return { status: 'disabled' };
|
|
147
|
+
const storedProject = this.db.prepare('SELECT value FROM session_projects WHERE host=? AND session=?').get(c.host, c.sessionId);
|
|
148
|
+
const project = storedProject ? this.vault.decrypt(String(storedProject.value)) : content.project;
|
|
149
|
+
const name = computerName();
|
|
150
|
+
const full = { ...content, ...c, ...(project ? { project } : {}), deviceName: name || undefined };
|
|
151
|
+
const digest = hash(JSON.stringify(full));
|
|
152
|
+
if (old?.digest === digest)
|
|
153
|
+
return { messageId: old.id, revision: old.revision, status: old.status };
|
|
154
|
+
const config = this.vault.load('sender');
|
|
155
|
+
if (!config)
|
|
156
|
+
throw new HttpError(409, 'Pair this Mac before sending');
|
|
157
|
+
const messageId = old?.id ?? randomUUID();
|
|
158
|
+
const revision = (old?.revision ?? 0) + 1;
|
|
159
|
+
const envelope = await seal({ v: 1, deviceId: config.deviceId, senderId: config.senderId, messageId, revision, expiresAt: Date.now() + (['attention', 'action_required', 'question'].includes(content.kind) ? 5 * 60000 : 7 * 86400000) }, full, config.keys, config.recipientPublicKey);
|
|
160
|
+
this.db.exec('BEGIN IMMEDIATE');
|
|
161
|
+
try {
|
|
162
|
+
this.db.prepare('INSERT OR REPLACE INTO events VALUES(?,?,?,?,?,?)').run(key, messageId, revision, digest, this.vault.encrypt(envelope), 'queued');
|
|
163
|
+
this.db.prepare('INSERT OR REPLACE INTO event_types VALUES(?,?,?)').run(key, source, content.kind);
|
|
164
|
+
if (source === 'hook' && content.kind === 'attention')
|
|
165
|
+
this.db.prepare('INSERT OR REPLACE INTO attention_events VALUES(?,?,?,?)').run(key, c.host, c.sessionId, c.turnId);
|
|
166
|
+
if (mode === 'once' && source === 'hook' && content.kind === 'turn_end')
|
|
167
|
+
this.sessions.spent(c.host, c.sessionId);
|
|
168
|
+
this.db.exec('COMMIT');
|
|
169
|
+
}
|
|
170
|
+
catch (e) {
|
|
171
|
+
this.db.exec('ROLLBACK');
|
|
172
|
+
throw e;
|
|
173
|
+
}
|
|
174
|
+
return { messageId, revision, status: 'queued' };
|
|
175
|
+
}
|
|
176
|
+
async flush() {
|
|
177
|
+
if (this.busy)
|
|
178
|
+
return;
|
|
179
|
+
this.busy = true;
|
|
180
|
+
try {
|
|
181
|
+
const config = this.vault.load('sender');
|
|
182
|
+
if (!config)
|
|
183
|
+
return;
|
|
184
|
+
const paused = readPreferences(this.db).paused;
|
|
185
|
+
const rows = this.db.prepare("SELECT e.key,e.revision,e.envelope FROM events e LEFT JOIN event_types t ON t.key=e.key WHERE e.status='queued' AND (?=0 OR t.source IN ('mcp','management')) LIMIT 20").all(Number(paused));
|
|
186
|
+
for (const row of rows) {
|
|
187
|
+
const envelope = this.vault.decrypt(row.envelope);
|
|
188
|
+
if (envelope.header.expiresAt <= Date.now()) {
|
|
189
|
+
this.db.prepare("UPDATE events SET status='expired' WHERE key=? AND revision=?").run(row.key, row.revision);
|
|
190
|
+
continue;
|
|
191
|
+
}
|
|
192
|
+
try {
|
|
193
|
+
await request(config.relay + '/v1/messages', config.senderToken, 'POST', envelope);
|
|
194
|
+
this.db.prepare("UPDATE events SET status='relay_accepted' WHERE key=? AND revision=?").run(row.key, row.revision);
|
|
195
|
+
}
|
|
196
|
+
catch { /* Keep the identical ciphertext for a later retry. */ }
|
|
197
|
+
}
|
|
198
|
+
}
|
|
199
|
+
finally {
|
|
200
|
+
this.busy = false;
|
|
201
|
+
}
|
|
202
|
+
}
|
|
203
|
+
async idle() { await this.pending; while (this.busy)
|
|
204
|
+
await new Promise(done => setTimeout(done, 10)); }
|
|
205
|
+
async deliveries() {
|
|
206
|
+
void this.flush().catch(() => { });
|
|
207
|
+
const config = this.vault.load('sender');
|
|
208
|
+
const rows = this.db.prepare('SELECT e.id,e.revision,e.envelope,e.status,t.source,t.kind FROM events e LEFT JOIN event_types t ON t.key=e.key ORDER BY e.rowid DESC LIMIT 10').all();
|
|
209
|
+
const deliveries = await Promise.all(rows.map(async (row) => {
|
|
210
|
+
const envelope = this.vault.decrypt(String(row.envelope));
|
|
211
|
+
let relayStatus = null;
|
|
212
|
+
if (config && envelope.header.senderId !== config.senderId)
|
|
213
|
+
relayStatus = 'previous_pairing';
|
|
214
|
+
else if (config && row.status === 'relay_accepted')
|
|
215
|
+
try {
|
|
216
|
+
const response = await fetch(config.relay + '/v1/deliveries/' + row.id, { headers: { authorization: 'Bearer ' + config.senderToken }, signal: AbortSignal.timeout(2500) });
|
|
217
|
+
if (!response.ok)
|
|
218
|
+
throw Error('Unavailable');
|
|
219
|
+
const result = z.object({ status: z.string().max(80), revision: z.number().int() }).parse(await response.json());
|
|
220
|
+
relayStatus = result.revision === row.revision ? result.status : 'revision_mismatch';
|
|
221
|
+
}
|
|
222
|
+
catch {
|
|
223
|
+
relayStatus = 'unavailable';
|
|
224
|
+
}
|
|
225
|
+
return { id: row.id, revision: row.revision, source: row.source, kind: row.kind, localStatus: row.status, relayStatus, expiresAt: envelope.header.expiresAt };
|
|
226
|
+
}));
|
|
227
|
+
return { deliveries, phoneDisplay: 'not_verified' };
|
|
228
|
+
}
|
|
229
|
+
async start(auth, port = 0, lifecycle) {
|
|
230
|
+
let lastActivity = Date.now();
|
|
231
|
+
const server = await listen(async (req, res) => {
|
|
232
|
+
if (req.headers.origin || req.headers.host !== `127.0.0.1:${req.socket.address().port}`)
|
|
233
|
+
throw new HttpError(403, 'Local clients only');
|
|
234
|
+
if (hash(bearer(req)) !== hash(auth))
|
|
235
|
+
throw new HttpError(401, 'Local authorization required');
|
|
236
|
+
if (req.method !== 'POST')
|
|
237
|
+
throw new HttpError(404, 'Not found');
|
|
238
|
+
if (req.url !== '/status')
|
|
239
|
+
lastActivity = Date.now();
|
|
240
|
+
if (req.url === '/shutdown') {
|
|
241
|
+
if (!lifecycle)
|
|
242
|
+
throw new HttpError(409, 'This development service has no shutdown handler');
|
|
243
|
+
send(res, 200, { stopping: true });
|
|
244
|
+
setImmediate(lifecycle.stop);
|
|
245
|
+
return;
|
|
246
|
+
}
|
|
247
|
+
if (req.url === '/status') {
|
|
248
|
+
this.sessions.reconcile();
|
|
249
|
+
send(res, 200, { pid: process.pid, startedAt: this.startedAt, paired: !!this.vault.load('sender'), queued: this.db.prepare("SELECT COUNT(*) AS n FROM events WHERE status='queued'").get().n, expired: this.db.prepare("SELECT COUNT(*) AS n FROM events WHERE status='expired'").get().n, activeClients: this.db.prepare('SELECT COUNT(*) AS n FROM clients WHERE closed=0').get().n, managedActiveClients: this.db.prepare('SELECT COUNT(*) AS n FROM clients WHERE closed=0 AND id NOT IN (SELECT client FROM direct_clients)').get().n, preferences: readPreferences(this.db) });
|
|
250
|
+
return;
|
|
251
|
+
}
|
|
252
|
+
if (req.url === '/preferences') {
|
|
253
|
+
const b = preferencesSchema.parse(await jsonBody(req, 4096));
|
|
254
|
+
await this.serialize(() => this.settings(b));
|
|
255
|
+
send(res, 200, b);
|
|
256
|
+
return;
|
|
257
|
+
}
|
|
258
|
+
if (req.url === '/preferences/change') {
|
|
259
|
+
const b = z.object({ defaultMode: z.enum(['all', 'off']).optional(), paused: z.boolean().optional(), permissionAlerts: z.boolean().optional() }).strict().parse(await jsonBody(req, 4096));
|
|
260
|
+
const value = await this.serialize(() => this.settings({ ...readPreferences(this.db), ...b }));
|
|
261
|
+
send(res, 200, value);
|
|
262
|
+
return;
|
|
263
|
+
}
|
|
264
|
+
if (req.url === '/test') {
|
|
265
|
+
z.object({}).strict().parse(await jsonBody(req, 4096));
|
|
266
|
+
send(res, 202, await this.testNotification());
|
|
267
|
+
return;
|
|
268
|
+
}
|
|
269
|
+
if (req.url === '/deliveries') {
|
|
270
|
+
z.object({}).strict().parse(await jsonBody(req, 4096));
|
|
271
|
+
send(res, 200, await this.deliveries());
|
|
272
|
+
return;
|
|
273
|
+
}
|
|
274
|
+
if (req.url === '/question/status') {
|
|
275
|
+
const b = z.object({ messageId: z.string().uuid() }).strict().parse(await jsonBody(req, 4096));
|
|
276
|
+
const row = this.db.prepare('SELECT envelope,status FROM events WHERE id=?').get(b.messageId);
|
|
277
|
+
if (!row)
|
|
278
|
+
throw new HttpError(404, 'Question not found');
|
|
279
|
+
const envelope = this.vault.decrypt(String(row.envelope));
|
|
280
|
+
send(res, 200, { status: row.status, header: envelope.header });
|
|
281
|
+
return;
|
|
282
|
+
}
|
|
283
|
+
if (req.url === '/clients/list') {
|
|
284
|
+
this.sessions.reconcile();
|
|
285
|
+
send(res, 200, { clients: this.db.prepare('SELECT id,host,current AS sessionId FROM clients WHERE closed=0').all().map(row => ({ ...row, mode: row.sessionId ? this.sessions.mode(row.host, row.sessionId) : undefined })) });
|
|
286
|
+
return;
|
|
287
|
+
}
|
|
288
|
+
if (req.url === '/clients/policy') {
|
|
289
|
+
const b = z.object({ instanceId: z.string().uuid(), expectedSessionId: z.string().min(1).max(200), mode: z.enum(['all', 'off', 'once']) }).strict().parse(await jsonBody(req, 4096));
|
|
290
|
+
const result = await this.serialize(() => { const client = this.db.prepare('SELECT host,current FROM clients WHERE id=? AND closed=0').get(b.instanceId); if (!client || client.current !== b.expectedSessionId)
|
|
291
|
+
throw new HttpError(409, 'Session changed. Refresh the session list before changing it.'); this.policy(client.host, b.expectedSessionId, b.mode); return { saved: true, host: client.host, sessionId: b.expectedSessionId, mode: b.mode }; });
|
|
292
|
+
send(res, 200, result);
|
|
293
|
+
return;
|
|
294
|
+
}
|
|
295
|
+
if (req.url === '/clients/open') {
|
|
296
|
+
const b = z.object({ host: hostSchema, owner: ownerSchema.optional() }).strict().parse(await jsonBody(req, 4096));
|
|
297
|
+
send(res, 201, { instanceId: this.sessions.open(b.host, b.owner) });
|
|
298
|
+
return;
|
|
299
|
+
}
|
|
300
|
+
if (req.url === '/clients/owner') {
|
|
301
|
+
const b = z.object({ instanceId: z.string().uuid(), owner: ownerSchema }).strict().parse(await jsonBody(req, 4096));
|
|
302
|
+
await this.serialize(() => this.sessions.attachOwner(b.instanceId, b.owner));
|
|
303
|
+
send(res, 200, { ok: true });
|
|
304
|
+
return;
|
|
305
|
+
}
|
|
306
|
+
if (req.url === '/clients/close') {
|
|
307
|
+
const b = z.object({ instanceId: z.string().uuid() }).strict().parse(await jsonBody(req, 4096));
|
|
308
|
+
await this.serialize(() => this.sessions.close(b.instanceId));
|
|
309
|
+
send(res, 200, { ok: true });
|
|
310
|
+
return;
|
|
311
|
+
}
|
|
312
|
+
if (req.url === '/hook') {
|
|
313
|
+
const b = z.object({ host: hostSchema, instanceId: z.string().uuid().optional(), nativeOwner: ownerSchema.optional(), input: z.unknown() }).strict().parse(await jsonBody(req));
|
|
314
|
+
send(res, 200, await this.hook(b.host, b.instanceId, b.input, b.nativeOwner));
|
|
315
|
+
return;
|
|
316
|
+
}
|
|
317
|
+
if (req.url === '/bind') {
|
|
318
|
+
send(res, 200, { capability: this.bind(await jsonBody(req, 4096)) });
|
|
319
|
+
return;
|
|
320
|
+
}
|
|
321
|
+
if (req.url === '/claude-bind') {
|
|
322
|
+
const b = z.object({ context: contextSchema, toolUseId: z.string().min(1).max(200) }).strict().parse(await jsonBody(req, 4096));
|
|
323
|
+
send(res, 200, { capability: this.bind(b.context, b.toolUseId) });
|
|
324
|
+
return;
|
|
325
|
+
}
|
|
326
|
+
if (req.url === '/lookup') {
|
|
327
|
+
const b = z.object({ capability: z.string(), instanceId: z.string().uuid().optional() }).strict().parse(await jsonBody(req, 4096));
|
|
328
|
+
send(res, 200, this.resolve(b.capability, b.instanceId));
|
|
329
|
+
return;
|
|
330
|
+
}
|
|
331
|
+
if (req.url === '/event') {
|
|
332
|
+
send(res, 202, await this.enqueue(await jsonBody(req)));
|
|
333
|
+
return;
|
|
334
|
+
}
|
|
335
|
+
if (req.url === '/mcp') {
|
|
336
|
+
const b = z.object({ capability: z.string(), callId: z.string(), instanceId: z.string().uuid().optional(), content: contentSchema }).strict().parse(await jsonBody(req));
|
|
337
|
+
send(res, 202, await this.serialize(() => this.enqueueSerial({ context: this.resolve(b.capability, b.instanceId), source: 'mcp', callId: b.callId, content: b.content })));
|
|
338
|
+
return;
|
|
339
|
+
}
|
|
340
|
+
if (req.url === '/policy') {
|
|
341
|
+
const b = contextSchema.pick({ host: true, sessionId: true }).extend({ mode: z.enum(['all', 'once', 'off']), armedTurn: z.string().optional() }).strict().parse(await jsonBody(req, 4096));
|
|
342
|
+
await this.serialize(() => this.policy(b.host, b.sessionId, b.mode, b.armedTurn));
|
|
343
|
+
send(res, 200, { mode: b.mode });
|
|
344
|
+
return;
|
|
345
|
+
}
|
|
346
|
+
throw new HttpError(404, 'Not found');
|
|
347
|
+
}, port);
|
|
348
|
+
const timer = setInterval(() => { if (lifecycle && Date.now() - lastActivity >= lifecycle.idleMs && !this.busy) {
|
|
349
|
+
lifecycle.stop();
|
|
350
|
+
return;
|
|
351
|
+
} void this.flush(); }, Math.min(1000, lifecycle?.idleMs ?? 1000));
|
|
352
|
+
timer.unref();
|
|
353
|
+
return { ...server, stop: () => clearInterval(timer) };
|
|
354
|
+
}
|
|
355
|
+
}
|
|
356
|
+
//# sourceMappingURL=daemon.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"daemon.js","sourceRoot":"","sources":["../../src/daemon.ts"],"names":[],"mappings":"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"}
|