remnote-mcp-server 0.14.2 → 0.16.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/CHANGELOG.md +78 -0
- package/README.md +74 -30
- package/dist/cli.d.ts +2 -1
- package/dist/cli.js +9 -2
- package/dist/cli.js.map +1 -1
- package/dist/config.d.ts +14 -2
- package/dist/config.js +210 -10
- package/dist/config.js.map +1 -1
- package/dist/daemon.d.ts +61 -0
- package/dist/daemon.js +735 -0
- package/dist/daemon.js.map +1 -0
- package/dist/index.js +8 -10
- package/dist/index.js.map +1 -1
- package/dist/remnote-cli/cli.js +8 -1
- package/dist/remnote-cli/cli.js.map +1 -1
- package/dist/remnote-cli/client/mcp-server-client.d.ts +1 -0
- package/dist/remnote-cli/client/mcp-server-client.js +14 -5
- package/dist/remnote-cli/client/mcp-server-client.js.map +1 -1
- package/dist/remnote-cli/commands/content-input.d.ts +0 -12
- package/dist/remnote-cli/commands/content-input.js +0 -20
- package/dist/remnote-cli/commands/content-input.js.map +1 -1
- package/dist/remnote-cli/commands/create.js +6 -3
- package/dist/remnote-cli/commands/create.js.map +1 -1
- package/dist/remnote-cli/commands/journal.js +3 -0
- package/dist/remnote-cli/commands/journal.js.map +1 -1
- package/dist/remnote-cli/commands/read.js +37 -5
- package/dist/remnote-cli/commands/read.js.map +1 -1
- package/dist/remnote-cli/commands/search.d.ts +1 -0
- package/dist/remnote-cli/commands/search.js +111 -11
- package/dist/remnote-cli/commands/search.js.map +1 -1
- package/dist/remnote-cli/commands/update.js +5 -24
- package/dist/remnote-cli/commands/update.js.map +1 -1
- package/dist/remnote-cli/commands/write-actions.d.ts +6 -0
- package/dist/remnote-cli/commands/write-actions.js +229 -0
- package/dist/remnote-cli/commands/write-actions.js.map +1 -0
- package/dist/schemas/remnote-schemas.d.ts +105 -18
- package/dist/schemas/remnote-schemas.js +179 -60
- package/dist/schemas/remnote-schemas.js.map +1 -1
- package/dist/shutdown.d.ts +15 -0
- package/dist/shutdown.js +59 -0
- package/dist/shutdown.js.map +1 -0
- package/dist/tools/index.d.ts +3722 -173
- package/dist/tools/index.js +595 -66
- package/dist/tools/index.js.map +1 -1
- package/dist/websocket-server.d.ts +2 -1
- package/dist/websocket-server.js +6 -2
- package/dist/websocket-server.js.map +1 -1
- package/mcpb/remnote-local/manifest.json +40 -26
- package/mcpb/remnote-local/package.json +1 -1
- package/mcpb/remnote-local/remnote-local.mcpb +0 -0
- package/mcpb/remnote-local/server/fallback-tools.generated.js +477 -0
- package/mcpb/remnote-local/server/index.js +11 -124
- package/package.json +5 -3
|
@@ -11,9 +11,30 @@ const TYPE_TAG = {
|
|
|
11
11
|
descriptor: '[desc] ',
|
|
12
12
|
portal: '[portal] ',
|
|
13
13
|
};
|
|
14
|
+
function formatTags(tags) {
|
|
15
|
+
if (!Array.isArray(tags))
|
|
16
|
+
return '';
|
|
17
|
+
return tags
|
|
18
|
+
.map((tag) => {
|
|
19
|
+
if (tag &&
|
|
20
|
+
typeof tag === 'object' &&
|
|
21
|
+
typeof tag.name === 'string' &&
|
|
22
|
+
typeof tag.tagRemId === 'string') {
|
|
23
|
+
const { name, tagRemId } = tag;
|
|
24
|
+
return `${name} [${tagRemId}]`;
|
|
25
|
+
}
|
|
26
|
+
return typeof tag === 'string' ? tag : '';
|
|
27
|
+
})
|
|
28
|
+
.filter(Boolean)
|
|
29
|
+
.join(', ');
|
|
30
|
+
}
|
|
14
31
|
function applySearchOptions(payload, opts) {
|
|
15
|
-
if (opts.
|
|
16
|
-
payload.
|
|
32
|
+
if (opts.contentMode)
|
|
33
|
+
payload.contentMode = opts.contentMode;
|
|
34
|
+
if (opts.view)
|
|
35
|
+
payload.view = opts.view;
|
|
36
|
+
if (opts.ancestorDepth)
|
|
37
|
+
payload.ancestorDepth = parseInt(opts.ancestorDepth, 10);
|
|
17
38
|
if (opts.depth)
|
|
18
39
|
payload.depth = parseInt(opts.depth, 10);
|
|
19
40
|
if (opts.childLimit)
|
|
@@ -25,7 +46,7 @@ function formatSearchText(data) {
|
|
|
25
46
|
const r = data;
|
|
26
47
|
if (!r.results || r.results.length === 0)
|
|
27
48
|
return 'No results found.';
|
|
28
|
-
|
|
49
|
+
const lines = r.results
|
|
29
50
|
.map((note, i) => {
|
|
30
51
|
const typeTag = TYPE_TAG[note.remType] ?? '';
|
|
31
52
|
const headline = note.headline || note.title || '(untitled)';
|
|
@@ -34,28 +55,52 @@ function formatSearchText(data) {
|
|
|
34
55
|
aliasesSuffix = ` (aka: ${note.aliases.join(', ')})`;
|
|
35
56
|
}
|
|
36
57
|
let tagsSuffix = '';
|
|
37
|
-
|
|
38
|
-
|
|
58
|
+
const formattedTags = formatTags(note.tags);
|
|
59
|
+
if (formattedTags) {
|
|
60
|
+
tagsSuffix = ` [tags: ${formattedTags}]`;
|
|
39
61
|
}
|
|
40
62
|
let parentSuffix = '';
|
|
41
63
|
if (typeof note.parentTitle === 'string' && note.parentTitle.length > 0) {
|
|
42
64
|
const parentIdSuffix = typeof note.parentRemId === 'string' ? ` [${note.parentRemId}]` : '';
|
|
43
65
|
parentSuffix = ` <- ${note.parentTitle}${parentIdSuffix}`;
|
|
44
66
|
}
|
|
45
|
-
|
|
67
|
+
let ancestorSuffix = '';
|
|
68
|
+
if (Array.isArray(note.ancestors) && note.ancestors.length > 0) {
|
|
69
|
+
ancestorSuffix = ` | ancestors: ${note.ancestors
|
|
70
|
+
.map((ancestor) => ancestor && typeof ancestor === 'object'
|
|
71
|
+
? ancestor.title
|
|
72
|
+
: '')
|
|
73
|
+
.filter(Boolean)
|
|
74
|
+
.join(' <- ')}`;
|
|
75
|
+
}
|
|
76
|
+
return `${i + 1}. ${typeTag}${headline}${aliasesSuffix}${tagsSuffix}${parentSuffix}${ancestorSuffix} [${note.remId}]`;
|
|
46
77
|
})
|
|
47
78
|
.join('\n');
|
|
79
|
+
const pagingLines = [];
|
|
80
|
+
if (typeof r.nextCursor === 'string' &&
|
|
81
|
+
r.hasMore === true) {
|
|
82
|
+
pagingLines.push(`Next cursor: ${r.nextCursor}`);
|
|
83
|
+
}
|
|
84
|
+
if (r.truncated === true) {
|
|
85
|
+
const reason = r.truncationReason;
|
|
86
|
+
pagingLines.push(`Results truncated${typeof reason === 'string' ? `: ${reason}` : ''}`);
|
|
87
|
+
}
|
|
88
|
+
return pagingLines.length > 0 ? `${lines}\n${pagingLines.join('\n')}` : lines;
|
|
48
89
|
}
|
|
49
90
|
function registerCommonSearchOptions(command) {
|
|
50
91
|
return command
|
|
51
92
|
.option('-l, --limit <n>', `Maximum results (default: ${DEFAULT_SEARCH_LIMIT})`, String(DEFAULT_SEARCH_LIMIT))
|
|
52
|
-
.option('--
|
|
93
|
+
.option('--content-mode <mode>', 'Content rendering mode: "none" (default), "markdown", or "structured"')
|
|
94
|
+
.option('--view <view>', 'Output detail level: compact, standard, or full')
|
|
95
|
+
.option('--ancestor-depth <n>', 'Number of parent Rems to include, direct parent first')
|
|
53
96
|
.option('--depth <n>', 'Depth of child hierarchy to render (default: 1)')
|
|
54
97
|
.option('--child-limit <n>', 'Maximum children per level (default: 20)')
|
|
55
98
|
.option('--max-content-length <n>', 'Maximum content character length (default: 3000)');
|
|
56
99
|
}
|
|
57
100
|
export function registerSearchCommand(program) {
|
|
58
|
-
registerCommonSearchOptions(program.command('search <query>').description('Search for notes in RemNote'))
|
|
101
|
+
registerCommonSearchOptions(program.command('search <query>').description('Search for notes in RemNote'))
|
|
102
|
+
.option('--cursor <cursor>', 'Opaque cursor returned by a previous search page')
|
|
103
|
+
.action(async (query, opts) => {
|
|
59
104
|
const globalOpts = program.opts();
|
|
60
105
|
const format = globalOpts.text ? 'text' : 'json';
|
|
61
106
|
const client = createCommandClient(program);
|
|
@@ -64,6 +109,8 @@ export function registerSearchCommand(program) {
|
|
|
64
109
|
query,
|
|
65
110
|
limit: parseInt(opts.limit, 10),
|
|
66
111
|
};
|
|
112
|
+
if (opts.cursor)
|
|
113
|
+
payload.cursor = opts.cursor;
|
|
67
114
|
applySearchOptions(payload, opts);
|
|
68
115
|
const result = await client.execute('search', payload);
|
|
69
116
|
console.log(formatResult(result, format, (data) => formatSearchText(data)));
|
|
@@ -80,16 +127,26 @@ export function registerSearchCommand(program) {
|
|
|
80
127
|
}
|
|
81
128
|
export function registerSearchByTagCommand(program) {
|
|
82
129
|
registerCommonSearchOptions(program
|
|
83
|
-
.command('search-tag
|
|
84
|
-
.description('Search notes by tag with ancestor-context resolution')
|
|
130
|
+
.command('search-by-tag')
|
|
131
|
+
.description('Search notes by exact tag Rem ID with ancestor-context resolution')
|
|
132
|
+
.requiredOption('--tag-id <tagRemId>', 'Exact tag Rem ID to search')
|
|
133
|
+
.option('--result-mode <mode>', 'Result mode: "context" returns ancestor context targets, "tagged" returns direct tagged Rems')
|
|
134
|
+
.option('--cursor <cursor>', 'Opaque cursor returned by a previous search-by-tag page')
|
|
135
|
+
.option('--timeout-ms <ms>', 'Per-call bridge wait timeout in milliseconds (max: 60000)')).action(async (opts) => {
|
|
85
136
|
const globalOpts = program.opts();
|
|
86
137
|
const format = globalOpts.text ? 'text' : 'json';
|
|
87
138
|
const client = createCommandClient(program);
|
|
88
139
|
try {
|
|
89
140
|
const payload = {
|
|
90
|
-
|
|
141
|
+
tagRemId: opts.tagId,
|
|
91
142
|
limit: parseInt(opts.limit, 10),
|
|
92
143
|
};
|
|
144
|
+
if (opts.resultMode)
|
|
145
|
+
payload.resultMode = opts.resultMode;
|
|
146
|
+
if (opts.cursor)
|
|
147
|
+
payload.cursor = opts.cursor;
|
|
148
|
+
if (opts.timeoutMs)
|
|
149
|
+
payload.timeoutMs = parseInt(opts.timeoutMs, 10);
|
|
93
150
|
applySearchOptions(payload, opts);
|
|
94
151
|
const result = await client.execute('search_by_tag', payload);
|
|
95
152
|
console.log(formatResult(result, format, (data) => formatSearchText(data)));
|
|
@@ -104,4 +161,47 @@ export function registerSearchByTagCommand(program) {
|
|
|
104
161
|
}
|
|
105
162
|
});
|
|
106
163
|
}
|
|
164
|
+
export function registerListChildrenCommand(program) {
|
|
165
|
+
program
|
|
166
|
+
.command('list-children <parent-rem-id>')
|
|
167
|
+
.description('List direct child Rems under a parent')
|
|
168
|
+
.option('-l, --limit <n>', 'Maximum direct children (default: 50)', '50')
|
|
169
|
+
.option('--cursor <cursor>', 'Opaque cursor returned by a previous list-children page')
|
|
170
|
+
.option('--view <view>', 'Output detail level: compact, standard, or full')
|
|
171
|
+
.option('--ancestor-depth <n>', 'Number of parent Rems to include, direct parent first')
|
|
172
|
+
.action(async (parentRemId, opts) => {
|
|
173
|
+
const globalOpts = program.opts();
|
|
174
|
+
const format = globalOpts.text ? 'text' : 'json';
|
|
175
|
+
const client = createCommandClient(program);
|
|
176
|
+
try {
|
|
177
|
+
const payload = {
|
|
178
|
+
parentRemId,
|
|
179
|
+
limit: parseInt(opts.limit, 10),
|
|
180
|
+
};
|
|
181
|
+
if (opts.cursor)
|
|
182
|
+
payload.cursor = opts.cursor;
|
|
183
|
+
if (opts.view)
|
|
184
|
+
payload.view = opts.view;
|
|
185
|
+
if (opts.ancestorDepth)
|
|
186
|
+
payload.ancestorDepth = parseInt(opts.ancestorDepth, 10);
|
|
187
|
+
const result = await client.execute('list_children', payload);
|
|
188
|
+
console.log(formatResult(result, format, (data) => {
|
|
189
|
+
const r = data;
|
|
190
|
+
return formatSearchText({
|
|
191
|
+
results: r.children,
|
|
192
|
+
hasMore: r.hasMore,
|
|
193
|
+
nextCursor: r.nextCursor,
|
|
194
|
+
});
|
|
195
|
+
}));
|
|
196
|
+
}
|
|
197
|
+
catch (error) {
|
|
198
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
199
|
+
console.error(formatError(message, format));
|
|
200
|
+
process.exit(EXIT.ERROR);
|
|
201
|
+
}
|
|
202
|
+
finally {
|
|
203
|
+
await client.close();
|
|
204
|
+
}
|
|
205
|
+
});
|
|
206
|
+
}
|
|
107
207
|
//# sourceMappingURL=search.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"search.js","sourceRoot":"","sources":["../../../src/remnote-cli/commands/search.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,mBAAmB,EAAE,MAAM,6BAA6B,CAAC;AAClE,OAAO,EAAE,YAAY,EAAE,WAAW,EAAqB,MAAM,wBAAwB,CAAC;AACtF,OAAO,EAAE,IAAI,EAAE,MAAM,cAAc,CAAC;AAEpC,wCAAwC;AACxC,MAAM,oBAAoB,GAAG,EAAE,CAAC;AAEhC,yEAAyE;AACzE,MAAM,QAAQ,GAA2B;IACvC,QAAQ,EAAE,QAAQ;IAClB,aAAa,EAAE,UAAU;IACzB,OAAO,EAAE,YAAY;IACrB,UAAU,EAAE,SAAS;IACrB,MAAM,EAAE,WAAW;CACpB,CAAC;AAEF,SAAS,kBAAkB,CAAC,OAAgC,EAAE,IAA6B;IACzF,IAAI,IAAI,CAAC,
|
|
1
|
+
{"version":3,"file":"search.js","sourceRoot":"","sources":["../../../src/remnote-cli/commands/search.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,42 +1,23 @@
|
|
|
1
1
|
import { createCommandClient } from '../client/command-client.js';
|
|
2
2
|
import { formatResult, formatError } from '../output/formatter.js';
|
|
3
3
|
import { EXIT } from '../config.js';
|
|
4
|
-
import { resolveUpdateContent } from './content-input.js';
|
|
5
4
|
import { validateNotFlag } from './arg-utils.js';
|
|
6
5
|
export function registerUpdateCommand(program) {
|
|
7
6
|
const subprogram = program.command('update <rem-id>');
|
|
8
7
|
const validate = (val) => validateNotFlag(val, subprogram);
|
|
9
8
|
subprogram
|
|
10
|
-
.description('Update
|
|
9
|
+
.description('Update note metadata')
|
|
11
10
|
.option('--title <text>', 'New title', validate)
|
|
12
|
-
.option('--append <text>', 'Append content', validate)
|
|
13
|
-
.option('--append-file <path>', 'Read appended content from UTF-8 file ("-" for stdin)', validate)
|
|
14
|
-
.option('--replace <text>', 'Replace direct child content (empty string clears all children)', validate)
|
|
15
|
-
.option('--replace-file <path>', 'Read replacement content from UTF-8 file ("-" for stdin; empty file clears all children)', validate)
|
|
16
|
-
.option('--add-tags <tags...>', 'Tags to add')
|
|
17
|
-
.option('--remove-tags <tags...>', 'Tags to remove')
|
|
18
11
|
.action(async (remId, opts) => {
|
|
19
12
|
const globalOpts = program.opts();
|
|
20
13
|
const format = globalOpts.text ? 'text' : 'json';
|
|
21
14
|
const client = createCommandClient(program);
|
|
22
15
|
try {
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
replaceText: opts.replace,
|
|
27
|
-
replaceFile: opts.replaceFile,
|
|
28
|
-
});
|
|
16
|
+
if (!opts.title) {
|
|
17
|
+
throw new Error('Provide --title for update. Use insert-children, replace-children, or update-tags for other writes.');
|
|
18
|
+
}
|
|
29
19
|
const payload = { remId };
|
|
30
|
-
|
|
31
|
-
payload.title = opts.title;
|
|
32
|
-
if (appendContent !== undefined)
|
|
33
|
-
payload.appendContent = appendContent;
|
|
34
|
-
if (replaceContent !== undefined)
|
|
35
|
-
payload.replaceContent = replaceContent;
|
|
36
|
-
if (opts.addTags && opts.addTags.length > 0)
|
|
37
|
-
payload.addTags = opts.addTags;
|
|
38
|
-
if (opts.removeTags && opts.removeTags.length > 0)
|
|
39
|
-
payload.removeTags = opts.removeTags;
|
|
20
|
+
payload.title = opts.title;
|
|
40
21
|
const result = await client.execute('update_note', payload);
|
|
41
22
|
console.log(formatResult(result, format, (data) => {
|
|
42
23
|
const r = data;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"update.js","sourceRoot":"","sources":["../../../src/remnote-cli/commands/update.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,mBAAmB,EAAE,MAAM,6BAA6B,CAAC;AAClE,OAAO,EAAE,YAAY,EAAE,WAAW,EAAqB,MAAM,wBAAwB,CAAC;AACtF,OAAO,EAAE,IAAI,EAAE,MAAM,cAAc,CAAC;AACpC,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"update.js","sourceRoot":"","sources":["../../../src/remnote-cli/commands/update.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,mBAAmB,EAAE,MAAM,6BAA6B,CAAC;AAClE,OAAO,EAAE,YAAY,EAAE,WAAW,EAAqB,MAAM,wBAAwB,CAAC;AACtF,OAAO,EAAE,IAAI,EAAE,MAAM,cAAc,CAAC;AACpC,OAAO,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAEjD,MAAM,UAAU,qBAAqB,CAAC,OAAgB;IACpD,MAAM,UAAU,GAAG,OAAO,CAAC,OAAO,CAAC,iBAAiB,CAAC,CAAC;IACtD,MAAM,QAAQ,GAAG,CAAC,GAAW,EAAE,EAAE,CAAC,eAAe,CAAC,GAAG,EAAE,UAAU,CAAC,CAAC;IAEnE,UAAU;SACP,WAAW,CAAC,sBAAsB,CAAC;SACnC,MAAM,CAAC,gBAAgB,EAAE,WAAW,EAAE,QAAQ,CAAC;SAC/C,MAAM,CAAC,KAAK,EAAE,KAAa,EAAE,IAAI,EAAE,EAAE;QACpC,MAAM,UAAU,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC;QAClC,MAAM,MAAM,GAAiB,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC;QAC/D,MAAM,MAAM,GAAG,mBAAmB,CAAC,OAAO,CAAC,CAAC;QAE5C,IAAI,CAAC;YACH,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;gBAChB,MAAM,IAAI,KAAK,CACb,qGAAqG,CACtG,CAAC;YACJ,CAAC;YAED,MAAM,OAAO,GAA4B,EAAE,KAAK,EAAE,CAAC;YACnD,OAAO,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC;YAE3B,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,OAAO,CAAC,aAAa,EAAE,OAAO,CAAC,CAAC;YAC5D,OAAO,CAAC,GAAG,CACT,YAAY,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,IAAI,EAAE,EAAE;gBACpC,MAAM,CAAC,GAAG,IAAgD,CAAC;gBAC3D,MAAM,GAAG,GAAG,CAAC,CAAC,MAAM,IAAI,EAAE,CAAC;gBAC3B,MAAM,MAAM,GAAG,CAAC,CAAC,MAAM,IAAI,EAAE,CAAC;gBAC9B,IAAI,GAAG,CAAC,MAAM,KAAK,CAAC;oBAAE,OAAO,gBAAgB,KAAK,oBAAoB,CAAC;gBACvE,OAAO,MAAM;qBACV,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,oBAAoB,CAAC,IAAI,YAAY,SAAS,GAAG,CAAC,CAAC,CAAC,IAAI,SAAS,GAAG,CAAC;qBACnF,IAAI,CAAC,IAAI,CAAC,CAAC;YAChB,CAAC,CAAC,CACH,CAAC;QACJ,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,OAAO,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YACvE,OAAO,CAAC,KAAK,CAAC,WAAW,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC,CAAC;YAC5C,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAC3B,CAAC;gBAAS,CAAC;YACT,MAAM,MAAM,CAAC,KAAK,EAAE,CAAC;QACvB,CAAC;IACH,CAAC,CAAC,CAAC;AACP,CAAC"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { Command } from 'commander';
|
|
2
|
+
export declare function registerInsertChildrenCommand(program: Command): void;
|
|
3
|
+
export declare function registerReplaceChildrenCommand(program: Command): void;
|
|
4
|
+
export declare function registerUpdateTagsCommand(program: Command): void;
|
|
5
|
+
export declare function registerMoveNoteCommand(program: Command): void;
|
|
6
|
+
export declare function registerSetDocumentStatusCommand(program: Command): void;
|
|
@@ -0,0 +1,229 @@
|
|
|
1
|
+
import { InvalidArgumentError } from 'commander';
|
|
2
|
+
import { createCommandClient } from '../client/command-client.js';
|
|
3
|
+
import { formatResult, formatError } from '../output/formatter.js';
|
|
4
|
+
import { EXIT } from '../config.js';
|
|
5
|
+
import { resolveOptionalInlineOrFileContent } from './content-input.js';
|
|
6
|
+
import { validateNotFlag } from './arg-utils.js';
|
|
7
|
+
const REM_CLASSIFICATIONS = [
|
|
8
|
+
'document',
|
|
9
|
+
'dailyDocument',
|
|
10
|
+
'concept',
|
|
11
|
+
'descriptor',
|
|
12
|
+
'portal',
|
|
13
|
+
'text',
|
|
14
|
+
];
|
|
15
|
+
function validateExpectedOldRemType(value, command) {
|
|
16
|
+
validateNotFlag(value, command);
|
|
17
|
+
if (!REM_CLASSIFICATIONS.includes(value)) {
|
|
18
|
+
throw new InvalidArgumentError(`expectedOldRemType must be one of: ${REM_CLASSIFICATIONS.join(', ')}`);
|
|
19
|
+
}
|
|
20
|
+
return value;
|
|
21
|
+
}
|
|
22
|
+
function formatRemResult(data, emptyMessage) {
|
|
23
|
+
const r = data;
|
|
24
|
+
const ids = r.remIds || [];
|
|
25
|
+
const titles = r.titles || [];
|
|
26
|
+
if (ids.length === 0)
|
|
27
|
+
return emptyMessage;
|
|
28
|
+
return ids.map((id, i) => `Updated/Created: ${titles[i] || '(untitled)'} (ID: ${id})`).join('\n');
|
|
29
|
+
}
|
|
30
|
+
async function resolveRequiredContent(options) {
|
|
31
|
+
const content = await resolveOptionalInlineOrFileContent({
|
|
32
|
+
inlineText: options.content,
|
|
33
|
+
filePath: options.contentFile,
|
|
34
|
+
inlineFlag: '--content',
|
|
35
|
+
fileFlag: '--content-file',
|
|
36
|
+
});
|
|
37
|
+
if (content === undefined) {
|
|
38
|
+
throw new Error('Provide exactly one content source: --content <text> or --content-file <path|->');
|
|
39
|
+
}
|
|
40
|
+
return content;
|
|
41
|
+
}
|
|
42
|
+
export function registerInsertChildrenCommand(program) {
|
|
43
|
+
const subprogram = program.command('insert-children <parent-rem-id>');
|
|
44
|
+
const validate = (val) => validateNotFlag(val, subprogram);
|
|
45
|
+
subprogram
|
|
46
|
+
.description('Insert child Rems under a parent at a deterministic position')
|
|
47
|
+
.option('--content <text>', 'Content to insert', validate)
|
|
48
|
+
.option('--content-file <path>', 'Read inserted content from UTF-8 file ("-" for stdin)', validate)
|
|
49
|
+
.requiredOption('--position <position>', 'Insert position: first, last, before, or after', validate)
|
|
50
|
+
.option('--sibling-rem-id <id>', 'Sibling Rem ID for before/after positions', validate)
|
|
51
|
+
.action(async (parentRemId, opts) => {
|
|
52
|
+
const globalOpts = program.opts();
|
|
53
|
+
const format = globalOpts.text ? 'text' : 'json';
|
|
54
|
+
const client = createCommandClient(program);
|
|
55
|
+
try {
|
|
56
|
+
const content = await resolveRequiredContent({
|
|
57
|
+
content: opts.content,
|
|
58
|
+
contentFile: opts.contentFile,
|
|
59
|
+
});
|
|
60
|
+
const position = opts.position;
|
|
61
|
+
const payload = {
|
|
62
|
+
parentRemId,
|
|
63
|
+
content,
|
|
64
|
+
position,
|
|
65
|
+
};
|
|
66
|
+
if (opts.siblingRemId)
|
|
67
|
+
payload.siblingRemId = opts.siblingRemId;
|
|
68
|
+
const result = await client.execute('insert_children', payload);
|
|
69
|
+
console.log(formatResult(result, format, (data) => formatRemResult(data, `Inserted children under ${parentRemId}`)));
|
|
70
|
+
}
|
|
71
|
+
catch (error) {
|
|
72
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
73
|
+
console.error(formatError(message, format));
|
|
74
|
+
process.exit(EXIT.ERROR);
|
|
75
|
+
}
|
|
76
|
+
finally {
|
|
77
|
+
await client.close();
|
|
78
|
+
}
|
|
79
|
+
});
|
|
80
|
+
}
|
|
81
|
+
export function registerReplaceChildrenCommand(program) {
|
|
82
|
+
const subprogram = program.command('replace-children <parent-rem-id>');
|
|
83
|
+
const validate = (val) => validateNotFlag(val, subprogram);
|
|
84
|
+
subprogram
|
|
85
|
+
.description('Replace all direct child Rems under a parent')
|
|
86
|
+
.option('--content <text>', 'Replacement content', validate)
|
|
87
|
+
.option('--content-file <path>', 'Read replacement content from UTF-8 file ("-" for stdin; empty file clears children)', validate)
|
|
88
|
+
.action(async (parentRemId, opts) => {
|
|
89
|
+
const globalOpts = program.opts();
|
|
90
|
+
const format = globalOpts.text ? 'text' : 'json';
|
|
91
|
+
const client = createCommandClient(program);
|
|
92
|
+
try {
|
|
93
|
+
const content = await resolveRequiredContent({
|
|
94
|
+
content: opts.content,
|
|
95
|
+
contentFile: opts.contentFile,
|
|
96
|
+
});
|
|
97
|
+
const result = await client.execute('replace_children', { parentRemId, content });
|
|
98
|
+
console.log(formatResult(result, format, (data) => formatRemResult(data, `Replaced children under ${parentRemId}`)));
|
|
99
|
+
}
|
|
100
|
+
catch (error) {
|
|
101
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
102
|
+
console.error(formatError(message, format));
|
|
103
|
+
process.exit(EXIT.ERROR);
|
|
104
|
+
}
|
|
105
|
+
finally {
|
|
106
|
+
await client.close();
|
|
107
|
+
}
|
|
108
|
+
});
|
|
109
|
+
}
|
|
110
|
+
export function registerUpdateTagsCommand(program) {
|
|
111
|
+
const subprogram = program.command('update-tags <rem-id>');
|
|
112
|
+
subprogram
|
|
113
|
+
.description('Add or remove tags by exact tag Rem ID')
|
|
114
|
+
.option('--add-tag-ids <tag-rem-ids...>', 'Exact tag Rem IDs to add')
|
|
115
|
+
.option('--remove-tag-ids <tag-rem-ids...>', 'Exact tag Rem IDs to remove')
|
|
116
|
+
.action(async (remId, opts) => {
|
|
117
|
+
const globalOpts = program.opts();
|
|
118
|
+
const format = globalOpts.text ? 'text' : 'json';
|
|
119
|
+
const client = createCommandClient(program);
|
|
120
|
+
try {
|
|
121
|
+
const payload = { remId };
|
|
122
|
+
if (opts.addTagIds?.length)
|
|
123
|
+
payload.addTagRemIds = opts.addTagIds;
|
|
124
|
+
if (opts.removeTagIds?.length)
|
|
125
|
+
payload.removeTagRemIds = opts.removeTagIds;
|
|
126
|
+
const result = await client.execute('update_tags', payload);
|
|
127
|
+
console.log(formatResult(result, format, (data) => formatRemResult(data, `Updated tags on ${remId}`)));
|
|
128
|
+
}
|
|
129
|
+
catch (error) {
|
|
130
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
131
|
+
console.error(formatError(message, format));
|
|
132
|
+
process.exit(EXIT.ERROR);
|
|
133
|
+
}
|
|
134
|
+
finally {
|
|
135
|
+
await client.close();
|
|
136
|
+
}
|
|
137
|
+
});
|
|
138
|
+
}
|
|
139
|
+
export function registerMoveNoteCommand(program) {
|
|
140
|
+
const subprogram = program.command('move-note <rem-id>');
|
|
141
|
+
const validate = (val) => validateNotFlag(val, subprogram);
|
|
142
|
+
subprogram
|
|
143
|
+
.description('Move a Rem and its subtree under a new parent')
|
|
144
|
+
.requiredOption('--new-parent-rem-id <id>', 'New parent Rem ID', validate)
|
|
145
|
+
.option('--position <position>', 'Move position: first, last, before, or after', validate)
|
|
146
|
+
.option('--sibling-rem-id <id>', 'Sibling Rem ID for before/after positions', validate)
|
|
147
|
+
.option('--apply', 'Perform the move. Without this flag, the command runs as dry-run.')
|
|
148
|
+
.option('--expected-old-parent-rem-id <id>', 'Reject if current parent differs from this Rem ID', validate)
|
|
149
|
+
.option('--ancestor-depth <n>', 'Number of parent Rems to include before/after the move', validate)
|
|
150
|
+
.action(async (remId, opts) => {
|
|
151
|
+
const globalOpts = program.opts();
|
|
152
|
+
const format = globalOpts.text ? 'text' : 'json';
|
|
153
|
+
const client = createCommandClient(program);
|
|
154
|
+
try {
|
|
155
|
+
const payload = {
|
|
156
|
+
remId,
|
|
157
|
+
newParentRemId: opts.newParentRemId,
|
|
158
|
+
dryRun: !opts.apply,
|
|
159
|
+
};
|
|
160
|
+
if (opts.position)
|
|
161
|
+
payload.position = opts.position;
|
|
162
|
+
if (opts.siblingRemId)
|
|
163
|
+
payload.siblingRemId = opts.siblingRemId;
|
|
164
|
+
if (opts.expectedOldParentRemId)
|
|
165
|
+
payload.expectedOldParentRemId = opts.expectedOldParentRemId;
|
|
166
|
+
if (opts.ancestorDepth)
|
|
167
|
+
payload.ancestorDepth = parseInt(opts.ancestorDepth, 10);
|
|
168
|
+
const result = await client.execute('move_note', payload);
|
|
169
|
+
console.log(formatResult(result, format, (data) => {
|
|
170
|
+
const r = data;
|
|
171
|
+
return `${r.dryRun ? 'Dry-run move' : 'Moved'}: ${r.title ?? remId} (${r.remId ?? remId}) -> ${r.newParentTitle ?? r.newParentRemId}`;
|
|
172
|
+
}));
|
|
173
|
+
}
|
|
174
|
+
catch (error) {
|
|
175
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
176
|
+
console.error(formatError(message, format));
|
|
177
|
+
process.exit(EXIT.ERROR);
|
|
178
|
+
}
|
|
179
|
+
finally {
|
|
180
|
+
await client.close();
|
|
181
|
+
}
|
|
182
|
+
});
|
|
183
|
+
}
|
|
184
|
+
export function registerSetDocumentStatusCommand(program) {
|
|
185
|
+
const subprogram = program.command('set-document-status <rem-id>');
|
|
186
|
+
const validateExpectedType = (val) => validateExpectedOldRemType(val, subprogram);
|
|
187
|
+
subprogram
|
|
188
|
+
.description('Preview or set document status on an existing Rem')
|
|
189
|
+
.option('--document', 'Mark the Rem as a document')
|
|
190
|
+
.option('--no-document', 'Unmark the Rem as a document')
|
|
191
|
+
.option('--apply', 'Apply the change. Without this flag, the command runs as dry-run.')
|
|
192
|
+
.option('--expected-old-rem-type <type>', `Reject if current remType differs from this value (${REM_CLASSIFICATIONS.join(', ')})`, validateExpectedType)
|
|
193
|
+
.action(async (remId, opts) => {
|
|
194
|
+
const globalOpts = program.opts();
|
|
195
|
+
const format = globalOpts.text ? 'text' : 'json';
|
|
196
|
+
const client = createCommandClient(program);
|
|
197
|
+
try {
|
|
198
|
+
if (typeof opts.document !== 'boolean') {
|
|
199
|
+
throw new Error('Provide --document or --no-document.');
|
|
200
|
+
}
|
|
201
|
+
const payload = {
|
|
202
|
+
remId,
|
|
203
|
+
isDocument: opts.document,
|
|
204
|
+
dryRun: !opts.apply,
|
|
205
|
+
};
|
|
206
|
+
if (opts.expectedOldRemType)
|
|
207
|
+
payload.expectedOldRemType = opts.expectedOldRemType;
|
|
208
|
+
const result = await client.execute('set_document_status', payload);
|
|
209
|
+
console.log(formatResult(result, format, (data) => {
|
|
210
|
+
const r = data;
|
|
211
|
+
const label = r.dryRun
|
|
212
|
+
? 'Dry-run document status'
|
|
213
|
+
: r.changed
|
|
214
|
+
? 'Updated document status'
|
|
215
|
+
: 'Document status unchanged';
|
|
216
|
+
return `${label}: ${r.title ?? remId} (${r.remId ?? remId}) ${r.oldRemType ?? '?'} -> ${r.newRemType ?? '?'}; isDocument=${String(r.newIsDocument ?? r.requestedIsDocument)}`;
|
|
217
|
+
}));
|
|
218
|
+
}
|
|
219
|
+
catch (error) {
|
|
220
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
221
|
+
console.error(formatError(message, format));
|
|
222
|
+
process.exit(EXIT.ERROR);
|
|
223
|
+
}
|
|
224
|
+
finally {
|
|
225
|
+
await client.close();
|
|
226
|
+
}
|
|
227
|
+
});
|
|
228
|
+
}
|
|
229
|
+
//# sourceMappingURL=write-actions.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"write-actions.js","sourceRoot":"","sources":["../../../src/remnote-cli/commands/write-actions.ts"],"names":[],"mappings":"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"}
|