@bassfish/cli 0.1.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/LICENSE +21 -0
- package/README.md +153 -0
- package/dist/api.d.ts +365 -0
- package/dist/api.js +113 -0
- package/dist/api.js.map +1 -0
- package/dist/cli.d.ts +2 -0
- package/dist/cli.js +217 -0
- package/dist/cli.js.map +1 -0
- package/dist/config.d.ts +20 -0
- package/dist/config.js +68 -0
- package/dist/config.js.map +1 -0
- package/dist/daemon.d.ts +4 -0
- package/dist/daemon.js +220 -0
- package/dist/daemon.js.map +1 -0
- package/dist/domain.d.ts +393 -0
- package/dist/domain.js +75 -0
- package/dist/domain.js.map +1 -0
- package/dist/export.d.ts +7 -0
- package/dist/export.js +37 -0
- package/dist/export.js.map +1 -0
- package/dist/ipc.d.ts +14 -0
- package/dist/ipc.js +125 -0
- package/dist/ipc.js.map +1 -0
- package/dist/lock.d.ts +2 -0
- package/dist/lock.js +18 -0
- package/dist/lock.js.map +1 -0
- package/dist/mcp.d.ts +16 -0
- package/dist/mcp.js +200 -0
- package/dist/mcp.js.map +1 -0
- package/dist/note-cli.d.ts +28 -0
- package/dist/note-cli.js +204 -0
- package/dist/note-cli.js.map +1 -0
- package/dist/note.d.ts +12 -0
- package/dist/note.js +181 -0
- package/dist/note.js.map +1 -0
- package/dist/repository.d.ts +1 -0
- package/dist/repository.js +21 -0
- package/dist/repository.js.map +1 -0
- package/dist/runtime.d.ts +12 -0
- package/dist/runtime.js +32 -0
- package/dist/runtime.js.map +1 -0
- package/dist/service.d.ts +106 -0
- package/dist/service.js +1185 -0
- package/dist/service.js.map +1 -0
- package/dist/setup.d.ts +21 -0
- package/dist/setup.js +108 -0
- package/dist/setup.js.map +1 -0
- package/dist/sql-worker.d.ts +6 -0
- package/dist/sql-worker.js +76 -0
- package/dist/sql-worker.js.map +1 -0
- package/dist/storage/control.d.ts +10 -0
- package/dist/storage/control.js +160 -0
- package/dist/storage/control.js.map +1 -0
- package/dist/storage/dolt.d.ts +32 -0
- package/dist/storage/dolt.js +494 -0
- package/dist/storage/dolt.js.map +1 -0
- package/dist/storage/search.d.ts +22 -0
- package/dist/storage/search.js +75 -0
- package/dist/storage/search.js.map +1 -0
- package/dist/supervisor.d.ts +11 -0
- package/dist/supervisor.js +97 -0
- package/dist/supervisor.js.map +1 -0
- package/dist/tasks.d.ts +52 -0
- package/dist/tasks.js +33 -0
- package/dist/tasks.js.map +1 -0
- package/dist/thread-cli.d.ts +2 -0
- package/dist/thread-cli.js +64 -0
- package/dist/thread-cli.js.map +1 -0
- package/package.json +64 -0
package/dist/ipc.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ipc.js","sourceRoot":"","sources":["../src/ipc.ts"],"names":[],"mappings":"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"}
|
package/dist/lock.d.ts
ADDED
package/dist/lock.js
ADDED
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { DatabaseSync } from 'node:sqlite';
|
|
2
|
+
import { mkdirSync } from 'node:fs';
|
|
3
|
+
import { dirname } from 'node:path';
|
|
4
|
+
import { BassfishError } from './domain.js';
|
|
5
|
+
/** SQLite's rollback-journal EXCLUSIVE transaction holds a kernel file lock until close/process death. */
|
|
6
|
+
export function exclusiveLock(path, waitMs = 0) {
|
|
7
|
+
mkdirSync(dirname(path), { recursive: true, mode: 0o700 });
|
|
8
|
+
const db = new DatabaseSync(path);
|
|
9
|
+
try {
|
|
10
|
+
db.exec(`PRAGMA busy_timeout=${Math.trunc(waitMs)}; BEGIN EXCLUSIVE;`);
|
|
11
|
+
}
|
|
12
|
+
catch {
|
|
13
|
+
db.close();
|
|
14
|
+
throw new BassfishError('ALREADY_RUNNING', 'Another process holds the service ownership lock.');
|
|
15
|
+
}
|
|
16
|
+
return () => { db.exec('ROLLBACK'); db.close(); };
|
|
17
|
+
}
|
|
18
|
+
//# sourceMappingURL=lock.js.map
|
package/dist/lock.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"lock.js","sourceRoot":"","sources":["../src/lock.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC3C,OAAO,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AACpC,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAE5C,0GAA0G;AAC1G,MAAM,UAAU,aAAa,CAAC,IAAY,EAAE,MAAM,GAAG,CAAC;IACpD,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;IAC3D,MAAM,EAAE,GAAG,IAAI,YAAY,CAAC,IAAI,CAAC,CAAC;IAClC,IAAI,CAAC;QACH,EAAE,CAAC,IAAI,CAAC,uBAAuB,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,oBAAoB,CAAC,CAAC;IACzE,CAAC;IAAC,MAAM,CAAC;QACP,EAAE,CAAC,KAAK,EAAE,CAAC;QAAC,MAAM,IAAI,aAAa,CAAC,iBAAiB,EAAE,mDAAmD,CAAC,CAAC;IAC9G,CAAC;IACD,OAAO,GAAG,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC;AACpD,CAAC"}
|
package/dist/mcp.d.ts
ADDED
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import type { JSONRPCMessage, Transport } from '@modelcontextprotocol/server';
|
|
2
|
+
export declare class TaskAwareStdioTransport implements Transport {
|
|
3
|
+
private readonly subscribe;
|
|
4
|
+
private readonly inner;
|
|
5
|
+
onclose?: () => void;
|
|
6
|
+
onerror?: (error: Error) => void;
|
|
7
|
+
onmessage?: (message: JSONRPCMessage) => void;
|
|
8
|
+
private taskIds;
|
|
9
|
+
private subscriptionMeta;
|
|
10
|
+
constructor(subscribe: (ids: string[]) => void, inner?: Transport);
|
|
11
|
+
start(): Promise<void>;
|
|
12
|
+
close(): Promise<void>;
|
|
13
|
+
send(message: JSONRPCMessage): Promise<void>;
|
|
14
|
+
}
|
|
15
|
+
/** Stdio adapter: MCP validation and transport around the shared Bassfish daemon. */
|
|
16
|
+
export declare function runMcp(workspace: string, dataDir: string, binary: string, name?: string): Promise<void>;
|
package/dist/mcp.js
ADDED
|
@@ -0,0 +1,200 @@
|
|
|
1
|
+
import { McpServer } from '@modelcontextprotocol/server';
|
|
2
|
+
import { serveStdio, StdioServerTransport } from '@modelcontextprotocol/server/stdio';
|
|
3
|
+
import { BassfishError } from './domain.js';
|
|
4
|
+
import { schemas, descriptions } from './api.js';
|
|
5
|
+
import { connectDaemon, ensureDaemon } from './daemon.js';
|
|
6
|
+
import { cancelTaskParams, getTaskParams, hasTasksCapability, taskAck, taskResult, tasksExtensionId, toolResult, updateTaskParams, wireTask, wireTaskNotification } from './tasks.js';
|
|
7
|
+
import { packageVersion } from './config.js';
|
|
8
|
+
export class TaskAwareStdioTransport {
|
|
9
|
+
subscribe;
|
|
10
|
+
inner;
|
|
11
|
+
onclose;
|
|
12
|
+
onerror;
|
|
13
|
+
onmessage;
|
|
14
|
+
taskIds = new Set();
|
|
15
|
+
subscriptionMeta;
|
|
16
|
+
constructor(subscribe, inner = new StdioServerTransport()) {
|
|
17
|
+
this.subscribe = subscribe;
|
|
18
|
+
this.inner = inner;
|
|
19
|
+
}
|
|
20
|
+
async start() {
|
|
21
|
+
this.inner.onclose = () => this.onclose?.();
|
|
22
|
+
this.inner.onerror = error => this.onerror?.(error);
|
|
23
|
+
this.inner.onmessage = message => {
|
|
24
|
+
const raw = message;
|
|
25
|
+
if (raw.method === 'subscriptions/listen') {
|
|
26
|
+
const clone = structuredClone(raw);
|
|
27
|
+
const params = clone.params;
|
|
28
|
+
const notifications = params?.notifications;
|
|
29
|
+
const ids = Array.isArray(notifications?.taskIds) ? notifications.taskIds.filter(value => typeof value === 'string') : [];
|
|
30
|
+
if (ids.length) {
|
|
31
|
+
const meta = params?._meta;
|
|
32
|
+
const envelope = meta?.['io.modelcontextprotocol/clientCapabilities'] ? { clientCapabilities: meta['io.modelcontextprotocol/clientCapabilities'] } : undefined;
|
|
33
|
+
if (!hasTasksCapability(envelope)) {
|
|
34
|
+
void this.inner.send({ jsonrpc: '2.0', id: raw.id, error: { code: -32021, message: 'Missing required client capability', data: { requiredCapabilities: { extensions: { [tasksExtensionId]: {} } } } } });
|
|
35
|
+
return;
|
|
36
|
+
}
|
|
37
|
+
this.taskIds = new Set(ids);
|
|
38
|
+
delete notifications.taskIds;
|
|
39
|
+
this.subscribe(ids);
|
|
40
|
+
}
|
|
41
|
+
this.onmessage?.(clone);
|
|
42
|
+
return;
|
|
43
|
+
}
|
|
44
|
+
this.onmessage?.(message);
|
|
45
|
+
};
|
|
46
|
+
await this.inner.start();
|
|
47
|
+
}
|
|
48
|
+
async close() { await this.inner.close(); }
|
|
49
|
+
async send(message) {
|
|
50
|
+
const raw = structuredClone(message);
|
|
51
|
+
if (raw.method === 'notifications/subscriptions/acknowledged' && this.taskIds.size) {
|
|
52
|
+
const params = raw.params;
|
|
53
|
+
const notifications = (params.notifications ??= {});
|
|
54
|
+
notifications.taskIds = [...this.taskIds];
|
|
55
|
+
this.subscriptionMeta = params._meta;
|
|
56
|
+
}
|
|
57
|
+
if (raw.method === 'notifications/tasks' && this.subscriptionMeta) {
|
|
58
|
+
const params = raw.params;
|
|
59
|
+
params._meta = { ...params._meta, ...this.subscriptionMeta };
|
|
60
|
+
}
|
|
61
|
+
const result = raw.result;
|
|
62
|
+
const structured = result?.structuredContent;
|
|
63
|
+
if (structured?.__bassfishTask)
|
|
64
|
+
raw.result = { ...wireTask(structured.__bassfishTask, 'task'), ...(result?._meta ? { _meta: result._meta } : {}) };
|
|
65
|
+
await this.inner.send(raw);
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
/** Stdio adapter: MCP validation and transport around the shared Bassfish daemon. */
|
|
69
|
+
export async function runMcp(workspace, dataDir, binary, name) {
|
|
70
|
+
let client;
|
|
71
|
+
let connecting;
|
|
72
|
+
let heartbeat;
|
|
73
|
+
let stopped = false;
|
|
74
|
+
let preferredName = name;
|
|
75
|
+
async function connection() {
|
|
76
|
+
if (client && !client.socket.destroyed)
|
|
77
|
+
return client;
|
|
78
|
+
return connecting ??= (async () => {
|
|
79
|
+
await ensureDaemon(dataDir, binary);
|
|
80
|
+
const opened = await connectDaemon(dataDir);
|
|
81
|
+
try {
|
|
82
|
+
const result = await opened.call('openSession', { workspace, name: preferredName });
|
|
83
|
+
if (stopped) {
|
|
84
|
+
await opened.call('closeSession');
|
|
85
|
+
throw new BassfishError('CANCELLED', 'Adapter stopped during startup.');
|
|
86
|
+
}
|
|
87
|
+
preferredName = result.session.name;
|
|
88
|
+
client = opened;
|
|
89
|
+
if (heartbeat)
|
|
90
|
+
clearInterval(heartbeat);
|
|
91
|
+
heartbeat = setInterval(() => {
|
|
92
|
+
void opened.call('heartbeatSession').catch(() => { if (heartbeat)
|
|
93
|
+
clearInterval(heartbeat); opened.socket.destroy(); });
|
|
94
|
+
}, 5000);
|
|
95
|
+
heartbeat.unref();
|
|
96
|
+
return opened;
|
|
97
|
+
}
|
|
98
|
+
catch (error) {
|
|
99
|
+
opened.close();
|
|
100
|
+
throw error;
|
|
101
|
+
}
|
|
102
|
+
})().finally(() => { connecting = undefined; });
|
|
103
|
+
}
|
|
104
|
+
let protocolServer;
|
|
105
|
+
const watchers = new Map();
|
|
106
|
+
const watchTasks = (ids) => {
|
|
107
|
+
for (const taskId of ids)
|
|
108
|
+
if (!watchers.has(taskId)) {
|
|
109
|
+
const controller = new AbortController();
|
|
110
|
+
watchers.set(taskId, controller);
|
|
111
|
+
void (async () => {
|
|
112
|
+
let after = 0;
|
|
113
|
+
while (!controller.signal.aborted) {
|
|
114
|
+
try {
|
|
115
|
+
const backend = await connection();
|
|
116
|
+
const task = await backend.call('waitTask', { taskId, updatedAfter: after, timeoutMs: 20_000 }, controller.signal);
|
|
117
|
+
const updated = Date.parse(String(task.lastUpdatedAt));
|
|
118
|
+
if (updated > after) {
|
|
119
|
+
after = updated;
|
|
120
|
+
await protocolServer?.server.notification({ method: 'notifications/tasks', params: wireTaskNotification(task) });
|
|
121
|
+
}
|
|
122
|
+
if (['completed', 'failed', 'cancelled'].includes(String(task.status)))
|
|
123
|
+
break;
|
|
124
|
+
}
|
|
125
|
+
catch (error) {
|
|
126
|
+
if (!controller.signal.aborted && error instanceof BassfishError && error.code !== 'TASK_NOT_FOUND')
|
|
127
|
+
continue;
|
|
128
|
+
break;
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
watchers.delete(taskId);
|
|
132
|
+
})();
|
|
133
|
+
}
|
|
134
|
+
};
|
|
135
|
+
const taskTransport = new TaskAwareStdioTransport(watchTasks);
|
|
136
|
+
const transport = await serveStdio(() => {
|
|
137
|
+
const server = new McpServer({ name: 'bassfish', version: packageVersion }, { capabilities: { tools: {}, extensions: { [tasksExtensionId]: {} } } });
|
|
138
|
+
protocolServer = server;
|
|
139
|
+
server.server.setRequestHandler('tasks/get', { params: getTaskParams, result: taskResult }, async (params) => {
|
|
140
|
+
const backend = await connection();
|
|
141
|
+
return wireTask(await backend.call('getTask', { taskId: params.taskId }), 'complete');
|
|
142
|
+
});
|
|
143
|
+
server.server.setRequestHandler('tasks/cancel', { params: cancelTaskParams, result: taskAck }, async (params) => {
|
|
144
|
+
const backend = await connection();
|
|
145
|
+
await backend.call('cancelTask', { taskId: params.taskId });
|
|
146
|
+
return { resultType: 'complete' };
|
|
147
|
+
});
|
|
148
|
+
server.server.setRequestHandler('tasks/update', { params: updateTaskParams, result: taskAck }, async (params) => {
|
|
149
|
+
const backend = await connection();
|
|
150
|
+
await backend.call('peekTask', { taskId: params.taskId });
|
|
151
|
+
throw new BassfishError('INVALID_TASK_STATE', 'Bassfish floor tasks never request client input.');
|
|
152
|
+
});
|
|
153
|
+
for (const name of Object.keys(schemas)) {
|
|
154
|
+
const inputSchema = schemas[name];
|
|
155
|
+
server.registerTool(name, { description: descriptions[name], inputSchema,
|
|
156
|
+
annotations: { readOnlyHint: ['getSession', 'listAgents', 'listThreads', 'getThread', 'searchThreads', 'listNotes', 'searchNotes', 'getFloorRequest', 'waitForFloor', 'readFloor', 'listHistory', 'readRevision', 'diffRevision', 'previewRestore', 'getNoteOutline', 'findInNote', 'inspectSnapshot', 'searchProjectNotes', 'searchProjectNoteHistory', 'listSnapshotHistory', 'previewSnapshotRestore'].includes(name),
|
|
157
|
+
destructiveHint: ['commitFloor', 'restoreRevision', 'restoreSnapshot'].includes(name), idempotentHint: false, openWorldHint: false } }, async (args, context) => {
|
|
158
|
+
try {
|
|
159
|
+
const backend = await connection();
|
|
160
|
+
const taskCapable = name === 'requestFloor' && hasTasksCapability(context.mcpReq.envelope);
|
|
161
|
+
const data = await backend.call('callTool', { name, args, taskCapable }, context.mcpReq.signal);
|
|
162
|
+
if (name === 'setAgentName')
|
|
163
|
+
preferredName = data.name;
|
|
164
|
+
if (data && typeof data === 'object' && 'task' in data)
|
|
165
|
+
return { content: [], structuredContent: { __bassfishTask: data.task } };
|
|
166
|
+
return toolResult(data);
|
|
167
|
+
}
|
|
168
|
+
catch (error) {
|
|
169
|
+
const failure = error instanceof BassfishError ? error : new BassfishError('BACKEND_UNAVAILABLE', 'Bassfish could not complete the request. No operation was retried.');
|
|
170
|
+
const output = { error: { code: failure.code, message: failure.message } };
|
|
171
|
+
return { isError: true, content: [{ type: 'text', text: JSON.stringify(output) }], structuredContent: output };
|
|
172
|
+
}
|
|
173
|
+
});
|
|
174
|
+
}
|
|
175
|
+
return server;
|
|
176
|
+
}, { transport: taskTransport });
|
|
177
|
+
const stop = async () => {
|
|
178
|
+
if (stopped)
|
|
179
|
+
return;
|
|
180
|
+
stopped = true;
|
|
181
|
+
if (heartbeat)
|
|
182
|
+
clearInterval(heartbeat);
|
|
183
|
+
for (const watcher of watchers.values())
|
|
184
|
+
watcher.abort();
|
|
185
|
+
watchers.clear();
|
|
186
|
+
try {
|
|
187
|
+
if (client && !client.socket.destroyed)
|
|
188
|
+
await client.call('closeSession');
|
|
189
|
+
}
|
|
190
|
+
finally {
|
|
191
|
+
client?.close();
|
|
192
|
+
await transport.close();
|
|
193
|
+
}
|
|
194
|
+
};
|
|
195
|
+
const shutdown = () => { void stop().catch(() => { client?.socket.destroy(); }); };
|
|
196
|
+
process.stdin.once('end', shutdown);
|
|
197
|
+
process.once('SIGTERM', shutdown);
|
|
198
|
+
process.once('SIGINT', shutdown);
|
|
199
|
+
}
|
|
200
|
+
//# sourceMappingURL=mcp.js.map
|
package/dist/mcp.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mcp.js","sourceRoot":"","sources":["../src/mcp.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
export type Call = <T = unknown>(name: string, args?: unknown) => Promise<T>;
|
|
2
|
+
export type Floor = {
|
|
3
|
+
floor: {
|
|
4
|
+
id: string;
|
|
5
|
+
fencingToken: string;
|
|
6
|
+
};
|
|
7
|
+
snapshot: {
|
|
8
|
+
revision: string;
|
|
9
|
+
};
|
|
10
|
+
page: {
|
|
11
|
+
text?: string;
|
|
12
|
+
note?: unknown;
|
|
13
|
+
};
|
|
14
|
+
nextCursor?: string | null;
|
|
15
|
+
};
|
|
16
|
+
export declare const credential: (floor: Floor) => {
|
|
17
|
+
id: string;
|
|
18
|
+
fencingToken: string;
|
|
19
|
+
};
|
|
20
|
+
export declare function take(args: string[], name: string): string | undefined;
|
|
21
|
+
export declare function booleanFlag(args: string[], name: string): boolean;
|
|
22
|
+
export declare function acquire(call: Call, type: 'note' | 'thread', id: string): Promise<Floor>;
|
|
23
|
+
export declare function release(call: Call, floor: Floor): Promise<void>;
|
|
24
|
+
export declare function mutation(call: Call, type: 'note' | 'thread', id: string, value: Record<string, unknown>): Promise<unknown>;
|
|
25
|
+
export declare function runNoteCli(action: string | undefined, args: string[], call: Call, dataDir: string): Promise<{
|
|
26
|
+
value?: unknown;
|
|
27
|
+
raw?: string;
|
|
28
|
+
}>;
|
package/dist/note-cli.js
ADDED
|
@@ -0,0 +1,204 @@
|
|
|
1
|
+
import { spawn } from 'node:child_process';
|
|
2
|
+
import { chmod, mkdir, mkdtemp, readFile, rm, writeFile } from 'node:fs/promises';
|
|
3
|
+
import { join } from 'node:path';
|
|
4
|
+
import { BassfishError, requireThat } from './domain.js';
|
|
5
|
+
export const credential = (floor) => ({ id: floor.floor.id, fencingToken: floor.floor.fencingToken });
|
|
6
|
+
export function take(args, name) {
|
|
7
|
+
const index = args.indexOf(name);
|
|
8
|
+
if (index < 0)
|
|
9
|
+
return undefined;
|
|
10
|
+
const value = args[index + 1];
|
|
11
|
+
requireThat(value !== undefined && !value.startsWith('--'), 'INVALID_ARGUMENT', `${name} requires a value.`);
|
|
12
|
+
args.splice(index, 2);
|
|
13
|
+
return value;
|
|
14
|
+
}
|
|
15
|
+
function takeAll(args, name) { const output = []; let value; while ((value = take(args, name)) !== undefined)
|
|
16
|
+
output.push(value); return output; }
|
|
17
|
+
export function booleanFlag(args, name) { const index = args.indexOf(name); if (index < 0)
|
|
18
|
+
return false; args.splice(index, 1); return true; }
|
|
19
|
+
async function stdin() { const chunks = []; for await (const chunk of process.stdin)
|
|
20
|
+
chunks.push(Buffer.from(chunk)); return Buffer.concat(chunks).toString('utf8'); }
|
|
21
|
+
async function edit(dataDir, initial) {
|
|
22
|
+
const editor = process.env.VISUAL ?? process.env.EDITOR;
|
|
23
|
+
requireThat(editor, 'EDITOR_UNAVAILABLE', 'Set VISUAL or EDITOR to an executable path.');
|
|
24
|
+
const directory = await mkdtemp(join(dataDir, 'editor-'));
|
|
25
|
+
const path = join(directory, 'note.md');
|
|
26
|
+
try {
|
|
27
|
+
await chmod(directory, 0o700);
|
|
28
|
+
await writeFile(path, initial, { mode: 0o600 });
|
|
29
|
+
const code = await new Promise((resolve, reject) => { const child = spawn(editor, [path], { stdio: 'inherit' }); child.once('error', reject); child.once('exit', resolve); });
|
|
30
|
+
requireThat(code === 0, 'EDITOR_FAILED', 'The editor exited without saving successfully.');
|
|
31
|
+
return await readFile(path, 'utf8');
|
|
32
|
+
}
|
|
33
|
+
finally {
|
|
34
|
+
await rm(directory, { recursive: true, force: true });
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
async function source(args, dataDir, initial = '') {
|
|
38
|
+
const file = take(args, '--file');
|
|
39
|
+
const useEditor = booleanFlag(args, '--editor');
|
|
40
|
+
requireThat((file === undefined ? 0 : 1) + (useEditor ? 1 : 0) === 1, 'INVALID_ARGUMENT', 'Choose exactly one of --file PATH, --file -, or --editor.');
|
|
41
|
+
if (useEditor)
|
|
42
|
+
return edit(dataDir, initial);
|
|
43
|
+
return file === '-' ? stdin() : readFile(file, 'utf8');
|
|
44
|
+
}
|
|
45
|
+
export async function acquire(call, type, id) {
|
|
46
|
+
const ticket = await call('requestFloor', { target: { type, id } });
|
|
47
|
+
if (ticket.state !== 'offered') {
|
|
48
|
+
await call('cancelFloorRequest', { requestId: ticket.requestId });
|
|
49
|
+
throw new BassfishError('FLOOR_BUSY', `${type === 'note' ? 'Note' : 'Thread'} is busy. This request was cancelled, not retried.`);
|
|
50
|
+
}
|
|
51
|
+
return call('claimFloor', { offerId: ticket.offerId });
|
|
52
|
+
}
|
|
53
|
+
export async function release(call, floor) { await call('releaseFloor', { floor: credential(floor) }); }
|
|
54
|
+
async function fullNote(call, floor) {
|
|
55
|
+
let text = floor.page.text ?? '';
|
|
56
|
+
let cursor = floor.nextCursor;
|
|
57
|
+
const note = floor.page.note;
|
|
58
|
+
while (cursor) {
|
|
59
|
+
const page = await call('readFloor', { floor: credential(floor), cursor });
|
|
60
|
+
text += page.page.text ?? '';
|
|
61
|
+
cursor = page.nextCursor;
|
|
62
|
+
}
|
|
63
|
+
return { text, note };
|
|
64
|
+
}
|
|
65
|
+
export async function mutation(call, type, id, value) {
|
|
66
|
+
const floor = await acquire(call, type, id);
|
|
67
|
+
let consumed = false;
|
|
68
|
+
try {
|
|
69
|
+
const result = await call('commitFloor', { floor: credential(floor), baseRevision: floor.snapshot.revision, mutation: value });
|
|
70
|
+
consumed = true;
|
|
71
|
+
return result;
|
|
72
|
+
}
|
|
73
|
+
finally {
|
|
74
|
+
if (!consumed)
|
|
75
|
+
await release(call, floor).catch(() => { });
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
export async function runNoteCli(action, args, call, dataDir) {
|
|
79
|
+
await mkdir(dataDir, { recursive: true, mode: 0o700 });
|
|
80
|
+
if (action === 'list') {
|
|
81
|
+
const state = booleanFlag(args, '--archived') ? 'archived' : booleanFlag(args, '--deleted') ? 'deleted' : 'active';
|
|
82
|
+
const input = { state, pathPrefix: take(args, '--path-prefix'), label: take(args, '--label'), noteKind: take(args, '--kind') };
|
|
83
|
+
requireThat(args.length === 0, 'INVALID_ARGUMENT', 'Unknown note list argument.');
|
|
84
|
+
return { value: await call('listNotes', input) };
|
|
85
|
+
}
|
|
86
|
+
if (action === 'create') {
|
|
87
|
+
const path = args.shift();
|
|
88
|
+
const title = take(args, '--title');
|
|
89
|
+
requireThat(path && title, 'INVALID_ARGUMENT', 'Use note create PATH --title TITLE with a body source.');
|
|
90
|
+
const body = await source(args, dataDir);
|
|
91
|
+
const labels = (take(args, '--labels') ?? '').split(',').filter(Boolean);
|
|
92
|
+
const noteKind = take(args, '--kind') ?? null;
|
|
93
|
+
requireThat(args.length === 0, 'INVALID_ARGUMENT', 'Unknown note create argument.');
|
|
94
|
+
return { value: await call('createNote', { path, title, body, labels, noteKind, links: [] }) };
|
|
95
|
+
}
|
|
96
|
+
const id = args.shift();
|
|
97
|
+
requireThat(id, 'INVALID_ARGUMENT', 'Pass a note ID.');
|
|
98
|
+
if (action === 'show') {
|
|
99
|
+
const json = booleanFlag(args, '--json');
|
|
100
|
+
requireThat(args.length === 0, 'INVALID_ARGUMENT', 'Unknown note show argument.');
|
|
101
|
+
const floor = await acquire(call, 'note', id);
|
|
102
|
+
try {
|
|
103
|
+
const note = await fullNote(call, floor);
|
|
104
|
+
return json ? { value: note } : { raw: note.text };
|
|
105
|
+
}
|
|
106
|
+
finally {
|
|
107
|
+
await release(call, floor);
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
if (action === 'edit' && args.includes('--editor')) {
|
|
111
|
+
const first = await acquire(call, 'note', id);
|
|
112
|
+
const original = await fullNote(call, first);
|
|
113
|
+
await release(call, first);
|
|
114
|
+
const body = await source(args, dataDir, original.text);
|
|
115
|
+
requireThat(args.length === 0, 'INVALID_ARGUMENT', 'Unknown note edit argument.');
|
|
116
|
+
const second = await acquire(call, 'note', id);
|
|
117
|
+
let consumed = false;
|
|
118
|
+
try {
|
|
119
|
+
const latest = await fullNote(call, second);
|
|
120
|
+
requireThat(latest.text === original.text, 'EDIT_CONFLICT', 'The note changed while the editor was open; no write was attempted.');
|
|
121
|
+
const value = await call('commitFloor', { floor: credential(second), baseRevision: second.snapshot.revision, mutation: { kind: 'replaceNoteBody', body } });
|
|
122
|
+
consumed = true;
|
|
123
|
+
return { value };
|
|
124
|
+
}
|
|
125
|
+
finally {
|
|
126
|
+
if (!consumed)
|
|
127
|
+
await release(call, second).catch(() => { });
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
if (['edit', 'append', 'prepend', 'patch'].includes(action ?? '')) {
|
|
131
|
+
const body = await source(args, dataDir);
|
|
132
|
+
requireThat(args.length === 0, 'INVALID_ARGUMENT', `Unknown note ${action} argument.`);
|
|
133
|
+
const kind = action === 'edit' ? 'replaceNoteBody' : action === 'append' ? 'appendNoteBody' : action === 'prepend' ? 'prependNoteBody' : 'patchNoteBody';
|
|
134
|
+
return { value: await mutation(call, 'note', id, { kind, [action === 'patch' ? 'patch' : 'body']: body }) };
|
|
135
|
+
}
|
|
136
|
+
if (action === 'move') {
|
|
137
|
+
const path = args.shift();
|
|
138
|
+
requireThat(path && args.length === 0, 'INVALID_ARGUMENT', 'Use note move NOTE_ID PATH.');
|
|
139
|
+
return { value: await mutation(call, 'note', id, { kind: 'moveNote', path }) };
|
|
140
|
+
}
|
|
141
|
+
if (action === 'metadata') {
|
|
142
|
+
const title = take(args, '--title');
|
|
143
|
+
const labelsValue = take(args, '--labels');
|
|
144
|
+
const kindValue = take(args, '--kind');
|
|
145
|
+
const clearKind = booleanFlag(args, '--clear-kind');
|
|
146
|
+
requireThat(!(kindValue && clearKind) && args.length === 0, 'INVALID_ARGUMENT', 'Invalid note metadata arguments.');
|
|
147
|
+
const value = { kind: 'setNoteMetadata', ...(title ? { title } : {}), ...(labelsValue !== undefined ? { labels: labelsValue.split(',').filter(Boolean) } : {}), ...(kindValue ? { noteKind: kindValue } : clearKind ? { noteKind: null } : {}) };
|
|
148
|
+
requireThat(Object.keys(value).length > 1, 'INVALID_ARGUMENT', 'Provide metadata to change.');
|
|
149
|
+
return { value: await mutation(call, 'note', id, value) };
|
|
150
|
+
}
|
|
151
|
+
if (action === 'links') {
|
|
152
|
+
const links = takeAll(args, '--link').map(value => { const at = value.indexOf(':'); requireThat(at > 0, 'INVALID_ARGUMENT', 'Links use TYPE:ID.'); return { targetType: value.slice(0, at), targetId: value.slice(at + 1) }; });
|
|
153
|
+
requireThat(args.length === 0, 'INVALID_ARGUMENT', 'Unknown note links argument.');
|
|
154
|
+
return { value: await mutation(call, 'note', id, { kind: 'setLinks', links }) };
|
|
155
|
+
}
|
|
156
|
+
if (action === 'replace-text') {
|
|
157
|
+
const find = take(args, '--find');
|
|
158
|
+
const replace = take(args, '--replace') ?? '';
|
|
159
|
+
const expectedOccurrences = Number(take(args, '--expect'));
|
|
160
|
+
requireThat(find && Number.isInteger(expectedOccurrences) && args.length === 0, 'INVALID_ARGUMENT', 'Use --find, --replace, and --expect N.');
|
|
161
|
+
return { value: await mutation(call, 'note', id, { kind: 'replaceNoteText', find, replace, expectedOccurrences }) };
|
|
162
|
+
}
|
|
163
|
+
if (action === 'section') {
|
|
164
|
+
const heading = take(args, '--heading');
|
|
165
|
+
const occurrenceRaw = take(args, '--occurrence');
|
|
166
|
+
const createIfMissing = booleanFlag(args, '--create');
|
|
167
|
+
requireThat(heading, 'INVALID_ARGUMENT', 'Use --heading A/B.');
|
|
168
|
+
const body = await source(args, dataDir);
|
|
169
|
+
requireThat(args.length === 0, 'INVALID_ARGUMENT', 'Unknown note section argument.');
|
|
170
|
+
return { value: await mutation(call, 'note', id, { kind: 'upsertNoteSection', headingPath: heading.split('/').filter(Boolean), body, ...(occurrenceRaw ? { occurrence: Number(occurrenceRaw) } : {}), createIfMissing }) };
|
|
171
|
+
}
|
|
172
|
+
if (['archive', 'delete', 'activate'].includes(action ?? '')) {
|
|
173
|
+
requireThat(args.length === 0, 'INVALID_ARGUMENT', `Unknown note ${action} argument.`);
|
|
174
|
+
return { value: await mutation(call, 'note', id, { kind: `${action}Note` }) };
|
|
175
|
+
}
|
|
176
|
+
if (action === 'history') {
|
|
177
|
+
requireThat(args.length === 0, 'INVALID_ARGUMENT', 'Unknown note history argument.');
|
|
178
|
+
const floor = await acquire(call, 'note', id);
|
|
179
|
+
try {
|
|
180
|
+
return { value: await call('listHistory', { floor: credential(floor), limit: 100, offset: 0 }) };
|
|
181
|
+
}
|
|
182
|
+
finally {
|
|
183
|
+
await release(call, floor);
|
|
184
|
+
}
|
|
185
|
+
}
|
|
186
|
+
if (action === 'restore') {
|
|
187
|
+
const revision = args.shift();
|
|
188
|
+
requireThat(revision && booleanFlag(args, '--yes') && args.length === 0, 'INVALID_ARGUMENT', 'Use note restore NOTE_ID REVISION --yes.');
|
|
189
|
+
const floor = await acquire(call, 'note', id);
|
|
190
|
+
let consumed = false;
|
|
191
|
+
try {
|
|
192
|
+
const preview = await call('previewRestore', { floor: credential(floor), revision });
|
|
193
|
+
const value = await call('restoreRevision', { floor: credential(floor), previewToken: preview.previewToken });
|
|
194
|
+
consumed = true;
|
|
195
|
+
return { value };
|
|
196
|
+
}
|
|
197
|
+
finally {
|
|
198
|
+
if (!consumed)
|
|
199
|
+
await release(call, floor).catch(() => { });
|
|
200
|
+
}
|
|
201
|
+
}
|
|
202
|
+
throw new BassfishError('INVALID_ARGUMENT', 'Unknown note command.');
|
|
203
|
+
}
|
|
204
|
+
//# sourceMappingURL=note-cli.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"note-cli.js","sourceRoot":"","sources":["../src/note-cli.ts"],"names":[],"mappings":"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"}
|
package/dist/note.d.ts
ADDED
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import type { Actor, Note, NoteMutation, ResourceLink } from './domain.js';
|
|
2
|
+
export declare const normalizeLabels: (labels: string[]) => string[];
|
|
3
|
+
export declare const normalizeLinks: (links: ResourceLink[]) => ResourceLink[];
|
|
4
|
+
export interface OutlineItem {
|
|
5
|
+
level: number;
|
|
6
|
+
heading: string;
|
|
7
|
+
path: string[];
|
|
8
|
+
startLine: number;
|
|
9
|
+
endLine: number;
|
|
10
|
+
}
|
|
11
|
+
export declare function outline(body: string): OutlineItem[];
|
|
12
|
+
export declare function prepareNote(note: Note, mutation: NoteMutation, actor: Actor, at: string): Note;
|