mdmaid-desk 0.1.0 → 0.1.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +43 -8
- package/dist/api-client.d.ts +5 -2
- package/dist/api-client.js +47 -6
- package/dist/api-client.js.map +1 -1
- package/dist/api-types.d.ts +16 -0
- package/dist/cli.d.ts +7 -0
- package/dist/cli.js +197 -35
- package/dist/cli.js.map +1 -1
- package/dist/daemon-lifecycle.d.ts +3 -0
- package/dist/daemon-lifecycle.js +225 -0
- package/dist/daemon-lifecycle.js.map +1 -0
- package/dist/daemon-state.d.ts +6 -0
- package/dist/daemon-state.js +8 -1
- package/dist/daemon-state.js.map +1 -1
- package/dist/server.js +47 -6
- package/dist/server.js.map +1 -1
- package/dist/tui.d.ts +1 -1
- package/dist/tui.js +24 -7
- package/dist/tui.js.map +1 -1
- package/dist/user-service.d.ts +15 -0
- package/dist/user-service.js +243 -0
- package/dist/user-service.js.map +1 -0
- package/dist/web-client.d.ts +1 -0
- package/dist/web-client.js +19 -2
- package/dist/web-client.js.map +1 -1
- package/package.json +4 -4
package/README.md
CHANGED
|
@@ -27,18 +27,22 @@ The repository contains the first usable shared-service vertical slice:
|
|
|
27
27
|
- Server-Sent Event refreshes for both clients;
|
|
28
28
|
- atomic, user-only daemon discovery state so the TUI reuses a running service;
|
|
29
29
|
- memorable `http://mdmaid.desk.localhost:43127/` browser origin;
|
|
30
|
-
-
|
|
30
|
+
- daemon-first CLI writes with daemonless SQLite fallback;
|
|
31
|
+
- explicit start, status, stop, login-service install, and uninstall lifecycle;
|
|
32
|
+
- selectable ports with automatic available-port fallback;
|
|
33
|
+
- `workspace`, `register`, `list`, `web`, `tui`, and `daemon` commands.
|
|
31
34
|
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
35
|
+
Directory watching, stdin-managed enqueue, comments, and editing remain planned
|
|
36
|
+
milestones. Document registration works without a daemon, but automatically
|
|
37
|
+
uses its authenticated API when one is running. `web` reuses a daemon or runs
|
|
38
|
+
the service in the foreground; `tui` attaches to it when present and uses a
|
|
39
|
+
session-scoped embedded loopback service otherwise.
|
|
36
40
|
|
|
37
41
|
## Responsibility
|
|
38
42
|
|
|
39
43
|
`mdmaid.desk` owns:
|
|
40
44
|
|
|
41
|
-
- the persistent local daemon;
|
|
45
|
+
- the persistent catalog and optional local daemon;
|
|
42
46
|
- workspace and document catalogs;
|
|
43
47
|
- artifact-directory discovery;
|
|
44
48
|
- stable document URLs;
|
|
@@ -117,8 +121,10 @@ Register a document:
|
|
|
117
121
|
node dist/cli.js register /path/to/repository/docs/plan.md \
|
|
118
122
|
--workspace example \
|
|
119
123
|
--task PROJECT-123 \
|
|
124
|
+
--producer codex \
|
|
120
125
|
--kind plan \
|
|
121
|
-
--attention approval
|
|
126
|
+
--attention approval \
|
|
127
|
+
--tag architecture
|
|
122
128
|
```
|
|
123
129
|
|
|
124
130
|
List documents:
|
|
@@ -154,6 +160,34 @@ same port as the service.
|
|
|
154
160
|
|
|
155
161
|
See [Local browser URL](docs/LOCAL_WEB.md) for details.
|
|
156
162
|
|
|
163
|
+
Run an optional background daemon once:
|
|
164
|
+
|
|
165
|
+
```bash
|
|
166
|
+
mdmaid-desk daemon start
|
|
167
|
+
mdmaid-desk daemon status
|
|
168
|
+
mdmaid-desk web
|
|
169
|
+
mdmaid-desk daemon stop
|
|
170
|
+
```
|
|
171
|
+
|
|
172
|
+
The default port is `43127`. If it is occupied, an unpinned daemon selects an
|
|
173
|
+
available loopback port; `daemon start` and `daemon status` print the actual
|
|
174
|
+
port and authenticated web URL. Pin one when desired:
|
|
175
|
+
|
|
176
|
+
```bash
|
|
177
|
+
mdmaid-desk daemon start --port 43210
|
|
178
|
+
```
|
|
179
|
+
|
|
180
|
+
To start mdmaid.desk automatically at login, explicitly install its user
|
|
181
|
+
service (LaunchAgent on macOS, systemd user service on Linux):
|
|
182
|
+
|
|
183
|
+
```bash
|
|
184
|
+
mdmaid-desk daemon install
|
|
185
|
+
# or: mdmaid-desk daemon install --port 43210
|
|
186
|
+
mdmaid-desk daemon uninstall
|
|
187
|
+
```
|
|
188
|
+
|
|
189
|
+
Registration never installs or permanently starts the daemon.
|
|
190
|
+
|
|
157
191
|
Run the terminal workspace:
|
|
158
192
|
|
|
159
193
|
```bash
|
|
@@ -170,7 +204,8 @@ The default state directory is:
|
|
|
170
204
|
${XDG_STATE_HOME:-~/.local/state}/mdmaid.desk/
|
|
171
205
|
auth-token
|
|
172
206
|
catalog.sqlite3
|
|
173
|
-
daemon.json # present while
|
|
207
|
+
daemon.json # present while a foreground or background service is running
|
|
208
|
+
daemon.log
|
|
174
209
|
```
|
|
175
210
|
|
|
176
211
|
## Target Interaction
|
package/dist/api-client.d.ts
CHANGED
|
@@ -1,7 +1,8 @@
|
|
|
1
|
-
import type { DocumentAction, HealthData, PublicDocument, PublicWorkspace, TerminalRenderPreferences, TerminalRender, WebRender } from "./api-types.js";
|
|
1
|
+
import type { DocumentAction, DocumentRegistration, HealthData, PublicDocument, PublicWorkspace, TerminalRenderPreferences, TerminalRender, WebRender, WorkspaceRegistration } from "./api-types.js";
|
|
2
2
|
export interface CatalogEvent {
|
|
3
3
|
action: string;
|
|
4
|
-
documentId
|
|
4
|
+
documentId?: string;
|
|
5
|
+
workspaceId?: string;
|
|
5
6
|
}
|
|
6
7
|
export interface CatalogSubscriptionOptions {
|
|
7
8
|
signal?: AbortSignal;
|
|
@@ -13,6 +14,8 @@ export declare class DeskApiClient {
|
|
|
13
14
|
health(signal?: AbortSignal): Promise<HealthData>;
|
|
14
15
|
listDocuments(): Promise<PublicDocument[]>;
|
|
15
16
|
listWorkspaces(): Promise<PublicWorkspace[]>;
|
|
17
|
+
addWorkspace(input: WorkspaceRegistration): Promise<PublicWorkspace>;
|
|
18
|
+
registerDocument(input: DocumentRegistration): Promise<PublicDocument>;
|
|
16
19
|
renderDocument(id: string, target: "terminal", width?: number, preferences?: TerminalRenderPreferences): Promise<TerminalRender>;
|
|
17
20
|
renderDocument(id: string, target: "web", width?: number): Promise<WebRender>;
|
|
18
21
|
act(id: string, action: DocumentAction): Promise<PublicDocument>;
|
package/dist/api-client.js
CHANGED
|
@@ -40,6 +40,26 @@ export class DeskApiClient {
|
|
|
40
40
|
}
|
|
41
41
|
return value;
|
|
42
42
|
}
|
|
43
|
+
async addWorkspace(input) {
|
|
44
|
+
const value = await this.#request("/api/v1/workspaces", {
|
|
45
|
+
method: "POST",
|
|
46
|
+
body: input,
|
|
47
|
+
});
|
|
48
|
+
if (!isPublicWorkspace(value)) {
|
|
49
|
+
throw new Error("Daemon returned an invalid workspace response");
|
|
50
|
+
}
|
|
51
|
+
return value;
|
|
52
|
+
}
|
|
53
|
+
async registerDocument(input) {
|
|
54
|
+
const value = await this.#request("/api/v1/documents", {
|
|
55
|
+
method: "POST",
|
|
56
|
+
body: input,
|
|
57
|
+
});
|
|
58
|
+
if (!isPublicDocument(value)) {
|
|
59
|
+
throw new Error("Daemon returned an invalid document response");
|
|
60
|
+
}
|
|
61
|
+
return value;
|
|
62
|
+
}
|
|
43
63
|
async renderDocument(id, target, width = 100, preferences = {}) {
|
|
44
64
|
assertDocumentId(id);
|
|
45
65
|
if (!Number.isSafeInteger(width) || width < 20 || width > 1_000) {
|
|
@@ -121,11 +141,19 @@ export class DeskApiClient {
|
|
|
121
141
|
}
|
|
122
142
|
async #request(path, options = {}) {
|
|
123
143
|
const authenticated = options.authenticated ?? true;
|
|
144
|
+
const headers = {};
|
|
145
|
+
if (authenticated) {
|
|
146
|
+
headers.authorization = `Bearer ${this.#token}`;
|
|
147
|
+
}
|
|
148
|
+
if (options.body !== undefined) {
|
|
149
|
+
headers["content-type"] = "application/json";
|
|
150
|
+
}
|
|
124
151
|
const response = await fetch(`${this.#baseUrl}${path}`, {
|
|
125
152
|
method: options.method ?? "GET",
|
|
126
|
-
...(
|
|
127
|
-
|
|
128
|
-
|
|
153
|
+
...(Object.keys(headers).length > 0 ? { headers } : {}),
|
|
154
|
+
...(options.body === undefined
|
|
155
|
+
? {}
|
|
156
|
+
: { body: JSON.stringify(options.body) }),
|
|
129
157
|
...(options.signal === undefined ? {} : { signal: options.signal }),
|
|
130
158
|
});
|
|
131
159
|
let body;
|
|
@@ -235,11 +263,24 @@ function dispatchEventBlock(block, listener, onReady) {
|
|
|
235
263
|
}
|
|
236
264
|
if (!isRecord(value) ||
|
|
237
265
|
typeof value.action !== "string" ||
|
|
238
|
-
|
|
239
|
-
|
|
266
|
+
(value.documentId !== undefined &&
|
|
267
|
+
(typeof value.documentId !== "string" ||
|
|
268
|
+
!/^doc-[a-f0-9]{20}$/.test(value.documentId))) ||
|
|
269
|
+
(value.workspaceId !== undefined &&
|
|
270
|
+
(typeof value.workspaceId !== "string" ||
|
|
271
|
+
!/^[a-z0-9][a-z0-9-]{0,63}$/.test(value.workspaceId))) ||
|
|
272
|
+
(value.documentId === undefined && value.workspaceId === undefined)) {
|
|
240
273
|
throw new Error("Daemon returned an invalid catalog event");
|
|
241
274
|
}
|
|
242
|
-
listener({
|
|
275
|
+
listener({
|
|
276
|
+
action: value.action,
|
|
277
|
+
...(value.documentId === undefined
|
|
278
|
+
? {}
|
|
279
|
+
: { documentId: value.documentId }),
|
|
280
|
+
...(value.workspaceId === undefined
|
|
281
|
+
? {}
|
|
282
|
+
: { workspaceId: value.workspaceId }),
|
|
283
|
+
});
|
|
243
284
|
}
|
|
244
285
|
function optionalString(value) {
|
|
245
286
|
return value === undefined || typeof value === "string";
|
package/dist/api-client.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"api-client.js","sourceRoot":"","sources":["../src/api-client.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"api-client.js","sourceRoot":"","sources":["../src/api-client.ts"],"names":[],"mappings":"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"}
|
package/dist/api-types.d.ts
CHANGED
|
@@ -25,6 +25,22 @@ export interface PublicWorkspace {
|
|
|
25
25
|
documentCount: number;
|
|
26
26
|
route: string;
|
|
27
27
|
}
|
|
28
|
+
export interface WorkspaceRegistration {
|
|
29
|
+
id: string;
|
|
30
|
+
name: string;
|
|
31
|
+
root: string;
|
|
32
|
+
artifactRoots: string[];
|
|
33
|
+
}
|
|
34
|
+
export interface DocumentRegistration {
|
|
35
|
+
workspaceId: string;
|
|
36
|
+
taskId?: string;
|
|
37
|
+
producer?: string;
|
|
38
|
+
kind: DocumentKind;
|
|
39
|
+
title: string;
|
|
40
|
+
path: string;
|
|
41
|
+
attention: Attention;
|
|
42
|
+
tags?: string[];
|
|
43
|
+
}
|
|
28
44
|
export interface HealthData {
|
|
29
45
|
service: "mdmaid.desk";
|
|
30
46
|
status: "ok";
|
package/dist/cli.d.ts
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import { DeskApiClient } from "./api-client.js";
|
|
3
|
+
import { type DaemonConnection } from "./daemon-state.js";
|
|
3
4
|
import { type DeskServerOptions, type RunningDeskServer } from "./server.js";
|
|
4
5
|
interface Writer {
|
|
5
6
|
write(value: string): unknown;
|
|
@@ -7,9 +8,15 @@ interface Writer {
|
|
|
7
8
|
export interface RunOptions {
|
|
8
9
|
statePath?: string;
|
|
9
10
|
connectDaemon?: (statePath: string) => Promise<DeskApiClient | undefined>;
|
|
11
|
+
connectDaemonInfo?: (statePath: string) => Promise<DaemonConnection | undefined>;
|
|
12
|
+
startDaemon?: (statePath: string, port?: number) => Promise<DaemonConnection>;
|
|
13
|
+
stopDaemon?: (statePath: string) => Promise<boolean>;
|
|
14
|
+
installUserService?: (statePath: string, port?: number) => Promise<unknown>;
|
|
15
|
+
uninstallUserService?: (statePath: string) => Promise<unknown>;
|
|
10
16
|
startServer?: (options: DeskServerOptions) => Promise<RunningDeskServer>;
|
|
11
17
|
runTui?: (client: DeskApiClient) => Promise<void>;
|
|
12
18
|
waitForShutdown?: (server: RunningDeskServer) => Promise<void>;
|
|
19
|
+
allowPortFallback?: boolean;
|
|
13
20
|
}
|
|
14
21
|
export declare function run(args: string[], stdout: Writer, stderr: Writer, options?: RunOptions): Promise<number>;
|
|
15
22
|
export declare function isEntrypoint(moduleUrl: string, entryPath: string): boolean;
|
package/dist/cli.js
CHANGED
|
@@ -5,11 +5,13 @@ import { basename, join, resolve } from "node:path";
|
|
|
5
5
|
import { fileURLToPath, pathToFileURL } from "node:url";
|
|
6
6
|
import { Catalog, } from "./catalog.js";
|
|
7
7
|
import { DeskApiClient } from "./api-client.js";
|
|
8
|
-
import { connectToDaemon, daemonDescriptorPath, descriptorForServer, removeDaemonDescriptor, writeDaemonDescriptor, } from "./daemon-state.js";
|
|
8
|
+
import { connectToDaemon, connectToDaemonInfo, daemonDescriptorPath, descriptorForServer, removeDaemonDescriptor, writeDaemonDescriptor, } from "./daemon-state.js";
|
|
9
|
+
import { startDaemon as startBackgroundDaemon, stopDaemon as stopBackgroundDaemon, } from "./daemon-lifecycle.js";
|
|
9
10
|
import { normalizePublicUrl, startDeskServer, } from "./server.js";
|
|
10
11
|
import { readOrCreateAuthToken } from "./auth-state.js";
|
|
11
12
|
import { readPackageVersion } from "./package-info.js";
|
|
12
13
|
import { runTui as runTerminalWorkspace } from "./tui.js";
|
|
14
|
+
import { installUserService as installLoginService, uninstallUserService as uninstallLoginService, } from "./user-service.js";
|
|
13
15
|
const DOCUMENT_KINDS = new Set([
|
|
14
16
|
"definition",
|
|
15
17
|
"brief",
|
|
@@ -40,15 +42,21 @@ Usage:
|
|
|
40
42
|
[--artifact-root <path> ...]
|
|
41
43
|
mdmaid-desk workspace list
|
|
42
44
|
mdmaid-desk register <file.md> --workspace <id>
|
|
43
|
-
[--task <id>] [--kind <kind>] [--title <title>]
|
|
44
|
-
[--attention <state>]
|
|
45
|
+
[--task <id>] [--producer <name>] [--kind <kind>] [--title <title>]
|
|
46
|
+
[--attention <state>] [--tag <tag> ...]
|
|
45
47
|
mdmaid-desk list [--workspace <id>] [--task <id>]
|
|
46
48
|
mdmaid-desk web [--port <port>]
|
|
47
49
|
[--public-url <http[s]://name.localhost[:port]>]
|
|
48
50
|
mdmaid-desk tui
|
|
51
|
+
mdmaid-desk daemon start [--port <port>]
|
|
52
|
+
mdmaid-desk daemon status
|
|
53
|
+
mdmaid-desk daemon stop
|
|
54
|
+
mdmaid-desk daemon install [--port <port>]
|
|
55
|
+
mdmaid-desk daemon uninstall
|
|
49
56
|
`;
|
|
50
57
|
class UsageError extends Error {
|
|
51
58
|
}
|
|
59
|
+
const silentWriter = { write: () => undefined };
|
|
52
60
|
export async function run(args, stdout, stderr, options = {}) {
|
|
53
61
|
try {
|
|
54
62
|
if (args.length === 0 ||
|
|
@@ -63,25 +71,64 @@ export async function run(args, stdout, stderr, options = {}) {
|
|
|
63
71
|
stdout.write(`${readPackageVersion()}\n`);
|
|
64
72
|
return 0;
|
|
65
73
|
}
|
|
66
|
-
|
|
74
|
+
let statePath = options.statePath ?? defaultStatePath();
|
|
75
|
+
if (args[0] === "__daemon-serve") {
|
|
76
|
+
const internal = parseArguments(args.slice(1));
|
|
77
|
+
rejectUnknownOptions(internal, new Set(["state-path", "port"]));
|
|
78
|
+
if (internal.positionals.length > 0) {
|
|
79
|
+
throw new UsageError("invalid internal daemon arguments");
|
|
80
|
+
}
|
|
81
|
+
statePath = firstOption(internal, "state-path") ?? statePath;
|
|
82
|
+
const port = firstOption(internal, "port");
|
|
83
|
+
const webArgs = port === undefined ? [] : ["--port", port];
|
|
84
|
+
const catalog = await Catalog.open(statePath);
|
|
85
|
+
try {
|
|
86
|
+
return await runWeb(catalog, statePath, webArgs, silentWriter, {
|
|
87
|
+
...options,
|
|
88
|
+
allowPortFallback: port === undefined,
|
|
89
|
+
});
|
|
90
|
+
}
|
|
91
|
+
finally {
|
|
92
|
+
catalog.close();
|
|
93
|
+
}
|
|
94
|
+
}
|
|
67
95
|
if (args[0] === "tui") {
|
|
68
96
|
return await runTerminal(statePath, args.slice(1), options);
|
|
69
97
|
}
|
|
98
|
+
if (args[0] === "daemon") {
|
|
99
|
+
return await runDaemon(statePath, args.slice(1), stdout, options);
|
|
100
|
+
}
|
|
101
|
+
if (args[0] === "web") {
|
|
102
|
+
if (args.length === 1) {
|
|
103
|
+
const running = await (options.connectDaemonInfo ?? connectToDaemonInfo)(statePath);
|
|
104
|
+
if (running) {
|
|
105
|
+
stdout.write(`mdmaid.desk web: ${daemonWebUrl(running)}\n`);
|
|
106
|
+
return 0;
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
const catalog = await Catalog.open(statePath);
|
|
110
|
+
try {
|
|
111
|
+
return await runWeb(catalog, statePath, args.slice(1), stdout, options);
|
|
112
|
+
}
|
|
113
|
+
finally {
|
|
114
|
+
catalog.close();
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
if (args[0] === "workspace" && args[1] === "add") {
|
|
118
|
+
return await runWorkspaceAdd(statePath, args.slice(2), stdout, options);
|
|
119
|
+
}
|
|
120
|
+
if (args[0] === "register") {
|
|
121
|
+
return await runRegister(statePath, args.slice(1), stdout, options);
|
|
122
|
+
}
|
|
70
123
|
const catalog = await Catalog.open(statePath);
|
|
71
124
|
try {
|
|
72
125
|
const command = args[0];
|
|
73
126
|
if (command === "workspace") {
|
|
74
|
-
return
|
|
75
|
-
}
|
|
76
|
-
if (command === "register") {
|
|
77
|
-
return await runRegister(catalog, args.slice(1), stdout);
|
|
127
|
+
return runWorkspaceList(catalog, args.slice(1), stdout);
|
|
78
128
|
}
|
|
79
129
|
if (command === "list") {
|
|
80
130
|
return runList(catalog, args.slice(1), stdout);
|
|
81
131
|
}
|
|
82
|
-
if (command === "web") {
|
|
83
|
-
return await runWeb(catalog, statePath, args.slice(1), stdout, options);
|
|
84
|
-
}
|
|
85
132
|
throw new UsageError(`unknown command ${command}`);
|
|
86
133
|
}
|
|
87
134
|
finally {
|
|
@@ -107,23 +154,40 @@ async function runWeb(catalog, statePath, args, stdout, options) {
|
|
|
107
154
|
const configuredPublicUrl = parsePublicUrl(firstOption(parsed, "public-url"));
|
|
108
155
|
const configuredPort = firstOption(parsed, "port");
|
|
109
156
|
const port = parsePort(configuredPort ?? inferDirectHttpPort(configuredPublicUrl) ?? "43127");
|
|
110
|
-
const publicUrl = configuredPublicUrl ??
|
|
111
|
-
|
|
157
|
+
const publicUrl = configuredPublicUrl ??
|
|
158
|
+
(port === 0 ? undefined : `http://mdmaid.desk.localhost:${port}`);
|
|
159
|
+
if (publicUrl !== undefined) {
|
|
160
|
+
validateDirectHttpPort(publicUrl, port);
|
|
161
|
+
}
|
|
112
162
|
const token = await readOrCreateAuthToken(statePath);
|
|
113
163
|
const startServer = options.startServer ?? startDeskServer;
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
164
|
+
let server;
|
|
165
|
+
try {
|
|
166
|
+
server = await startServer({
|
|
167
|
+
catalog,
|
|
168
|
+
host: "127.0.0.1",
|
|
169
|
+
port,
|
|
170
|
+
token,
|
|
171
|
+
...(publicUrl ? { publicUrl } : {}),
|
|
172
|
+
});
|
|
173
|
+
}
|
|
174
|
+
catch (error) {
|
|
175
|
+
if (!options.allowPortFallback || !isAddressInUse(error)) {
|
|
176
|
+
throw error;
|
|
177
|
+
}
|
|
178
|
+
server = await startServer({
|
|
179
|
+
catalog,
|
|
180
|
+
host: "127.0.0.1",
|
|
181
|
+
port: 0,
|
|
182
|
+
token,
|
|
183
|
+
});
|
|
184
|
+
}
|
|
121
185
|
const descriptor = descriptorForServer(server);
|
|
122
186
|
const descriptorPath = daemonDescriptorPath(statePath);
|
|
123
187
|
try {
|
|
124
188
|
await writeDaemonDescriptor(descriptorPath, descriptor);
|
|
125
189
|
stdout.write(`mdmaid.desk web: ${server.webUrl}\n`);
|
|
126
|
-
if (publicUrl
|
|
190
|
+
if (publicUrl?.startsWith("https://")) {
|
|
127
191
|
stdout.write(`proxy target: ${server.url}\n`);
|
|
128
192
|
}
|
|
129
193
|
stdout.write("Press Ctrl-C to stop the local service.\n");
|
|
@@ -165,6 +229,60 @@ async function runTerminal(statePath, args, options) {
|
|
|
165
229
|
}
|
|
166
230
|
return 0;
|
|
167
231
|
}
|
|
232
|
+
async function runDaemon(statePath, args, stdout, options) {
|
|
233
|
+
const action = args[0];
|
|
234
|
+
if (!action) {
|
|
235
|
+
throw new UsageError("daemon action must be start, status, stop, install, or uninstall");
|
|
236
|
+
}
|
|
237
|
+
const parsed = parseArguments(args.slice(1));
|
|
238
|
+
if (parsed.positionals.length > 0) {
|
|
239
|
+
throw new UsageError(`${action} accepts options only`);
|
|
240
|
+
}
|
|
241
|
+
if (action === "start") {
|
|
242
|
+
rejectUnknownOptions(parsed, new Set(["port"]));
|
|
243
|
+
const selected = firstOption(parsed, "port");
|
|
244
|
+
const port = selected === undefined ? undefined : parsePort(selected);
|
|
245
|
+
const connection = await (options.startDaemon ?? startBackgroundDaemon)(statePath, port);
|
|
246
|
+
stdout.write(`daemon started (pid ${connection.descriptor.pid}, port ${connection.descriptor.port})\n`);
|
|
247
|
+
stdout.write(`mdmaid.desk web: ${daemonWebUrl(connection)}\n`);
|
|
248
|
+
return 0;
|
|
249
|
+
}
|
|
250
|
+
if (action === "status") {
|
|
251
|
+
rejectUnknownOptions(parsed, new Set());
|
|
252
|
+
const connection = await (options.connectDaemonInfo ?? connectToDaemonInfo)(statePath);
|
|
253
|
+
if (!connection) {
|
|
254
|
+
stdout.write("daemon stopped\n");
|
|
255
|
+
return 1;
|
|
256
|
+
}
|
|
257
|
+
stdout.write(`daemon running (pid ${connection.descriptor.pid}, port ${connection.descriptor.port})\n`);
|
|
258
|
+
stdout.write(`mdmaid.desk web: ${daemonWebUrl(connection)}\n`);
|
|
259
|
+
return 0;
|
|
260
|
+
}
|
|
261
|
+
if (action === "stop") {
|
|
262
|
+
rejectUnknownOptions(parsed, new Set());
|
|
263
|
+
const stopped = await (options.stopDaemon ?? stopBackgroundDaemon)(statePath);
|
|
264
|
+
stdout.write(stopped ? "daemon stopped\n" : "daemon already stopped\n");
|
|
265
|
+
return 0;
|
|
266
|
+
}
|
|
267
|
+
if (action === "install") {
|
|
268
|
+
rejectUnknownOptions(parsed, new Set(["port"]));
|
|
269
|
+
const selected = firstOption(parsed, "port");
|
|
270
|
+
const port = selected === undefined ? undefined : parsePort(selected);
|
|
271
|
+
await (options.installUserService ?? installLoginService)(statePath, port);
|
|
272
|
+
stdout.write("user service installed and started\n");
|
|
273
|
+
return 0;
|
|
274
|
+
}
|
|
275
|
+
if (action === "uninstall") {
|
|
276
|
+
rejectUnknownOptions(parsed, new Set());
|
|
277
|
+
await (options.uninstallUserService ?? uninstallLoginService)(statePath);
|
|
278
|
+
stdout.write("user service uninstalled\n");
|
|
279
|
+
return 0;
|
|
280
|
+
}
|
|
281
|
+
throw new UsageError("daemon action must be start, status, stop, install, or uninstall");
|
|
282
|
+
}
|
|
283
|
+
function daemonWebUrl(connection) {
|
|
284
|
+
return `http://mdmaid.desk.localhost:${connection.descriptor.port}/?token=${encodeURIComponent(connection.descriptor.token)}`;
|
|
285
|
+
}
|
|
168
286
|
function parsePort(value) {
|
|
169
287
|
if (!/^\d+$/.test(value)) {
|
|
170
288
|
throw new UsageError("port must be an integer between 0 and 65535");
|
|
@@ -212,7 +330,7 @@ function waitForShutdown(_server) {
|
|
|
212
330
|
process.once("SIGTERM", finish);
|
|
213
331
|
});
|
|
214
332
|
}
|
|
215
|
-
|
|
333
|
+
function runWorkspaceList(catalog, args, stdout) {
|
|
216
334
|
const action = args[0];
|
|
217
335
|
if (action === "list") {
|
|
218
336
|
for (const workspace of catalog.listWorkspaces()) {
|
|
@@ -220,10 +338,10 @@ async function runWorkspace(catalog, args, stdout) {
|
|
|
220
338
|
}
|
|
221
339
|
return 0;
|
|
222
340
|
}
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
const parsed = parseArguments(args
|
|
341
|
+
throw new UsageError("workspace action must be add or list");
|
|
342
|
+
}
|
|
343
|
+
async function runWorkspaceAdd(statePath, args, stdout, options) {
|
|
344
|
+
const parsed = parseArguments(args);
|
|
227
345
|
const root = parsed.positionals[0];
|
|
228
346
|
if (!root) {
|
|
229
347
|
throw new UsageError("workspace root is required");
|
|
@@ -235,16 +353,29 @@ async function runWorkspace(catalog, args, stdout) {
|
|
|
235
353
|
const name = firstOption(parsed, "name") ?? id;
|
|
236
354
|
const artifactRoots = parsed.options.get("artifact-root") ?? [root];
|
|
237
355
|
rejectUnknownOptions(parsed, new Set(["id", "name", "artifact-root"]));
|
|
238
|
-
const
|
|
356
|
+
const input = {
|
|
239
357
|
id,
|
|
240
358
|
name,
|
|
241
359
|
root,
|
|
242
360
|
artifactRoots,
|
|
243
|
-
}
|
|
244
|
-
|
|
361
|
+
};
|
|
362
|
+
const client = await (options.connectDaemon ?? connectToDaemon)(statePath);
|
|
363
|
+
if (client) {
|
|
364
|
+
await client.addWorkspace(input);
|
|
365
|
+
}
|
|
366
|
+
else {
|
|
367
|
+
const catalog = await Catalog.open(statePath);
|
|
368
|
+
try {
|
|
369
|
+
await catalog.addWorkspace(input);
|
|
370
|
+
}
|
|
371
|
+
finally {
|
|
372
|
+
catalog.close();
|
|
373
|
+
}
|
|
374
|
+
}
|
|
375
|
+
stdout.write(`workspace ${id} added: ${root}\n`);
|
|
245
376
|
return 0;
|
|
246
377
|
}
|
|
247
|
-
async function runRegister(
|
|
378
|
+
async function runRegister(statePath, args, stdout, options) {
|
|
248
379
|
const parsed = parseArguments(args);
|
|
249
380
|
const path = parsed.positionals[0];
|
|
250
381
|
if (!path) {
|
|
@@ -253,7 +384,15 @@ async function runRegister(catalog, args, stdout) {
|
|
|
253
384
|
if (parsed.positionals.length > 1) {
|
|
254
385
|
throw new UsageError("register accepts one document path");
|
|
255
386
|
}
|
|
256
|
-
rejectUnknownOptions(parsed, new Set([
|
|
387
|
+
rejectUnknownOptions(parsed, new Set([
|
|
388
|
+
"workspace",
|
|
389
|
+
"task",
|
|
390
|
+
"producer",
|
|
391
|
+
"kind",
|
|
392
|
+
"title",
|
|
393
|
+
"attention",
|
|
394
|
+
"tag",
|
|
395
|
+
]));
|
|
257
396
|
const kind = (firstOption(parsed, "kind") ?? "other");
|
|
258
397
|
if (!DOCUMENT_KINDS.has(kind)) {
|
|
259
398
|
throw new UsageError(`unknown document kind ${kind}`);
|
|
@@ -264,15 +403,33 @@ async function runRegister(catalog, args, stdout) {
|
|
|
264
403
|
throw new UsageError(`unknown attention state ${attention}`);
|
|
265
404
|
}
|
|
266
405
|
const taskId = firstOption(parsed, "task");
|
|
267
|
-
const
|
|
406
|
+
const producer = firstOption(parsed, "producer");
|
|
407
|
+
const tags = parsed.options.get("tag");
|
|
408
|
+
const input = {
|
|
268
409
|
workspaceId: requiredOption(parsed, "workspace"),
|
|
269
410
|
...(taskId ? { taskId } : {}),
|
|
411
|
+
...(producer ? { producer } : {}),
|
|
270
412
|
kind,
|
|
271
413
|
title: firstOption(parsed, "title") ?? basename(path, ".md"),
|
|
272
414
|
path,
|
|
273
415
|
attention,
|
|
274
|
-
|
|
275
|
-
|
|
416
|
+
...(tags === undefined ? {} : { tags }),
|
|
417
|
+
};
|
|
418
|
+
const client = await (options.connectDaemon ?? connectToDaemon)(statePath);
|
|
419
|
+
let id;
|
|
420
|
+
if (client) {
|
|
421
|
+
id = (await client.registerDocument(input)).id;
|
|
422
|
+
}
|
|
423
|
+
else {
|
|
424
|
+
const catalog = await Catalog.open(statePath);
|
|
425
|
+
try {
|
|
426
|
+
id = (await catalog.registerDocument(input)).id;
|
|
427
|
+
}
|
|
428
|
+
finally {
|
|
429
|
+
catalog.close();
|
|
430
|
+
}
|
|
431
|
+
}
|
|
432
|
+
stdout.write(`registered ${id}: ${path}\n`);
|
|
276
433
|
return 0;
|
|
277
434
|
}
|
|
278
435
|
function runList(catalog, args, stdout) {
|
|
@@ -346,11 +503,16 @@ function rejectUnknownOptions(parsed, allowed) {
|
|
|
346
503
|
if (!allowed.has(name)) {
|
|
347
504
|
throw new UsageError(`unknown option --${name}`);
|
|
348
505
|
}
|
|
349
|
-
if (name !== "artifact-root" && values.length > 1) {
|
|
506
|
+
if (name !== "artifact-root" && name !== "tag" && values.length > 1) {
|
|
350
507
|
throw new UsageError(`option --${name} may be used only once`);
|
|
351
508
|
}
|
|
352
509
|
}
|
|
353
510
|
}
|
|
511
|
+
function isAddressInUse(error) {
|
|
512
|
+
return (error instanceof Error &&
|
|
513
|
+
"code" in error &&
|
|
514
|
+
error.code === "EADDRINUSE");
|
|
515
|
+
}
|
|
354
516
|
function defaultStatePath() {
|
|
355
517
|
const stateHome = process.env.XDG_STATE_HOME ?? join(homedir(), ".local", "state");
|
|
356
518
|
return resolve(stateHome, "mdmaid.desk", "catalog.sqlite3");
|