@wirecat/cli-memo 0.30.0 → 0.32.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -1
- package/dist/actions/command.d.ts.map +1 -1
- package/dist/actions/command.js +7 -7
- package/dist/actions/command.js.map +1 -1
- package/dist/agents/command.js +3 -3
- package/dist/agents/command.js.map +1 -1
- package/dist/answer.d.ts +23 -0
- package/dist/answer.d.ts.map +1 -0
- package/dist/answer.js +56 -0
- package/dist/answer.js.map +1 -0
- package/dist/answers/command.d.ts.map +1 -1
- package/dist/answers/command.js +6 -13
- package/dist/answers/command.js.map +1 -1
- package/dist/bin/memo.js +16 -2
- package/dist/bin/memo.js.map +1 -1
- package/dist/config.d.ts +8 -4
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +15 -7
- package/dist/config.js.map +1 -1
- package/dist/context/command.d.ts +1 -1
- package/dist/context/command.d.ts.map +1 -1
- package/dist/context/command.js +6 -14
- package/dist/context/command.js.map +1 -1
- package/dist/discovery/command.d.ts +1 -1
- package/dist/discovery/command.js +1 -1
- package/dist/doctor/command.d.ts +82 -0
- package/dist/doctor/command.d.ts.map +1 -0
- package/dist/doctor/command.js +148 -0
- package/dist/doctor/command.js.map +1 -0
- package/dist/effects.d.ts +6 -1
- package/dist/effects.d.ts.map +1 -1
- package/dist/effects.js +26 -9
- package/dist/effects.js.map +1 -1
- package/dist/examples.d.ts.map +1 -1
- package/dist/examples.js +7 -3
- package/dist/examples.js.map +1 -1
- package/dist/facts/command.d.ts.map +1 -1
- package/dist/facts/command.js +14 -22
- package/dist/facts/command.js.map +1 -1
- package/dist/facts/fact.d.ts +36 -0
- package/dist/facts/fact.d.ts.map +1 -0
- package/dist/facts/fact.js +47 -0
- package/dist/facts/fact.js.map +1 -0
- package/dist/failure.d.ts +5 -7
- package/dist/failure.d.ts.map +1 -1
- package/dist/failure.js +8 -27
- package/dist/failure.js.map +1 -1
- package/dist/knowledge/command.d.ts.map +1 -1
- package/dist/knowledge/command.js +33 -34
- package/dist/knowledge/command.js.map +1 -1
- package/dist/knowledge/meeting-projects-command.d.ts.map +1 -1
- package/dist/knowledge/meeting-projects-command.js +22 -12
- package/dist/knowledge/meeting-projects-command.js.map +1 -1
- package/dist/list-query.d.ts +18 -0
- package/dist/list-query.d.ts.map +1 -0
- package/dist/list-query.js +68 -0
- package/dist/list-query.js.map +1 -0
- package/dist/mail/apply.d.ts.map +1 -1
- package/dist/mail/apply.js +1 -0
- package/dist/mail/apply.js.map +1 -1
- package/dist/mail/command.d.ts.map +1 -1
- package/dist/mail/command.js +133 -108
- package/dist/mail/command.js.map +1 -1
- package/dist/mail/domain-age.d.ts +21 -0
- package/dist/mail/domain-age.d.ts.map +1 -0
- package/dist/mail/domain-age.js +99 -0
- package/dist/mail/domain-age.js.map +1 -0
- package/dist/mail/gmail.d.ts +1 -1
- package/dist/mail/gmail.d.ts.map +1 -1
- package/dist/mail/gmail.js +6 -1
- package/dist/mail/gmail.js.map +1 -1
- package/dist/mail/headers.d.ts +17 -3
- package/dist/mail/headers.d.ts.map +1 -1
- package/dist/mail/headers.js +32 -3
- package/dist/mail/headers.js.map +1 -1
- package/dist/mail/himalaya.d.ts +5 -0
- package/dist/mail/himalaya.d.ts.map +1 -1
- package/dist/mail/himalaya.js +34 -5
- package/dist/mail/himalaya.js.map +1 -1
- package/dist/mail/import.d.ts.map +1 -1
- package/dist/mail/import.js +4 -0
- package/dist/mail/import.js.map +1 -1
- package/dist/mail/messages-command.d.ts.map +1 -1
- package/dist/mail/messages-command.js +7 -13
- package/dist/mail/messages-command.js.map +1 -1
- package/dist/mail/probe.d.ts +7 -1
- package/dist/mail/probe.d.ts.map +1 -1
- package/dist/mail/probe.js +12 -1
- package/dist/mail/probe.js.map +1 -1
- package/dist/mail/resume.js +1 -1
- package/dist/mail/resume.js.map +1 -1
- package/dist/mail/rule-store.d.ts +33 -0
- package/dist/mail/rule-store.d.ts.map +1 -0
- package/dist/mail/rule-store.js +129 -0
- package/dist/mail/rule-store.js.map +1 -0
- package/dist/mail/rules.d.ts +6 -2
- package/dist/mail/rules.d.ts.map +1 -1
- package/dist/mail/rules.js +3 -3
- package/dist/mail/rules.js.map +1 -1
- package/dist/mail/score.d.ts +50 -0
- package/dist/mail/score.d.ts.map +1 -0
- package/dist/mail/score.js +118 -0
- package/dist/mail/score.js.map +1 -0
- package/dist/mcp/knowledge.d.ts.map +1 -1
- package/dist/mcp/knowledge.js +15 -9
- package/dist/mcp/knowledge.js.map +1 -1
- package/dist/mcp/server.d.ts.map +1 -1
- package/dist/mcp/server.js +30 -36
- package/dist/mcp/server.js.map +1 -1
- package/dist/mcp/task-relations.d.ts.map +1 -1
- package/dist/mcp/task-relations.js +9 -7
- package/dist/mcp/task-relations.js.map +1 -1
- package/dist/mcp/tool.d.ts +3 -2
- package/dist/mcp/tool.d.ts.map +1 -1
- package/dist/mcp/tool.js.map +1 -1
- package/dist/mcp/vocabulary.d.ts.map +1 -1
- package/dist/mcp/vocabulary.js +7 -6
- package/dist/mcp/vocabulary.js.map +1 -1
- package/dist/memories/command.d.ts.map +1 -1
- package/dist/memories/command.js +15 -19
- package/dist/memories/command.js.map +1 -1
- package/dist/memories/memory.d.ts +31 -0
- package/dist/memories/memory.d.ts.map +1 -0
- package/dist/memories/memory.js +43 -0
- package/dist/memories/memory.js.map +1 -0
- package/dist/notes/command.d.ts.map +1 -1
- package/dist/notes/command.js +39 -30
- package/dist/notes/command.js.map +1 -1
- package/dist/notes/embed.d.ts +2 -0
- package/dist/notes/embed.d.ts.map +1 -1
- package/dist/notes/embed.js +8 -0
- package/dist/notes/embed.js.map +1 -1
- package/dist/notes/folders-command.d.ts.map +1 -1
- package/dist/notes/folders-command.js +19 -26
- package/dist/notes/folders-command.js.map +1 -1
- package/dist/notes/search.d.ts.map +1 -1
- package/dist/notes/search.js +2 -8
- package/dist/notes/search.js.map +1 -1
- package/dist/output.d.ts +9 -7
- package/dist/output.d.ts.map +1 -1
- package/dist/output.js +11 -14
- package/dist/output.js.map +1 -1
- package/dist/page.d.ts +2 -5
- package/dist/page.d.ts.map +1 -1
- package/dist/page.js +7 -2
- package/dist/page.js.map +1 -1
- package/dist/people/command.d.ts.map +1 -1
- package/dist/people/command.js +3 -7
- package/dist/people/command.js.map +1 -1
- package/dist/program.d.ts.map +1 -1
- package/dist/program.js +6 -0
- package/dist/program.js.map +1 -1
- package/dist/reasons.d.ts.map +1 -1
- package/dist/reasons.js +12 -0
- package/dist/reasons.js.map +1 -1
- package/dist/run/auto.d.ts +11 -1
- package/dist/run/auto.d.ts.map +1 -1
- package/dist/run/auto.js +46 -18
- package/dist/run/auto.js.map +1 -1
- package/dist/run/import.d.ts.map +1 -1
- package/dist/run/import.js +15 -17
- package/dist/run/import.js.map +1 -1
- package/dist/search/answers.d.ts +16 -0
- package/dist/search/answers.d.ts.map +1 -0
- package/dist/search/answers.js +48 -0
- package/dist/search/answers.js.map +1 -0
- package/dist/search/command.d.ts.map +1 -1
- package/dist/search/command.js +29 -35
- package/dist/search/command.js.map +1 -1
- package/dist/search/hits.d.ts +8 -0
- package/dist/search/hits.d.ts.map +1 -0
- package/dist/search/hits.js +68 -0
- package/dist/search/hits.js.map +1 -0
- package/dist/tags/command.d.ts.map +1 -1
- package/dist/tags/command.js +23 -31
- package/dist/tags/command.js.map +1 -1
- package/dist/tasks/command.d.ts.map +1 -1
- package/dist/tasks/command.js +29 -44
- package/dist/tasks/command.js.map +1 -1
- package/dist/tasks/relations-command.js +4 -4
- package/dist/tasks/relations-command.js.map +1 -1
- package/dist/terminal.d.ts +4 -0
- package/dist/terminal.d.ts.map +1 -0
- package/dist/terminal.js +8 -0
- package/dist/terminal.js.map +1 -0
- package/dist/update.d.ts +26 -0
- package/dist/update.d.ts.map +1 -0
- package/dist/update.js +67 -0
- package/dist/update.js.map +1 -0
- package/dist/version.d.ts +1 -1
- package/dist/version.js +1 -1
- package/dist/vocabulary/command.d.ts.map +1 -1
- package/dist/vocabulary/command.js +3 -3
- package/dist/vocabulary/command.js.map +1 -1
- package/package.json +4 -2
- package/skills/cli-memo/SKILL.md +14 -5
- package/dist/records/run.d.ts +0 -7
- package/dist/records/run.d.ts.map +0 -1
- package/dist/records/run.js +0 -24
- package/dist/records/run.js.map +0 -1
package/dist/tasks/command.js
CHANGED
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
import { CliError } from "@wirecat/cli-base";
|
|
2
2
|
import { parseLocator } from "@wirecat/cli-core";
|
|
3
3
|
import { closedStateOf, storeOnlyDeps, taskStateOf, tasksService } from "@wirecat/cli-core/services";
|
|
4
|
-
import {
|
|
4
|
+
import { TASK_ROLES, TASK_TYPES, WORK_TASK_TYPES, } from "@wirecat/cli-core/store";
|
|
5
5
|
import { InvalidArgumentError } from "commander";
|
|
6
|
+
import { answers, itemAnswer, listAnswer, withStore } from "../answer.js";
|
|
6
7
|
import { APP } from "../app.js";
|
|
7
8
|
import { isNoteReference } from "../notes/about.js";
|
|
8
9
|
import { accountOptions, oneOf, positive } from "../options.js";
|
|
9
|
-
import { printing } from "../records/run.js";
|
|
10
10
|
import { heldMessage } from "../store/held.js";
|
|
11
11
|
import { selectAccount } from "../store/scope.js";
|
|
12
12
|
import { canonicalProject } from "../vocabulary/project.js";
|
|
@@ -34,10 +34,15 @@ const assignAll = async (store, id, people) => {
|
|
|
34
34
|
for (const person of people ?? [])
|
|
35
35
|
await store.tasks.assign(id, { to: personRef(person), role: "assignee" }, "owner");
|
|
36
36
|
};
|
|
37
|
+
const tasksPage = (page, limit) => listAnswer("tasks list", {
|
|
38
|
+
items: page.items.map((task) => ({ ref: `task:${task.id}`, ...task })),
|
|
39
|
+
limit,
|
|
40
|
+
has_more: page.hasMore,
|
|
41
|
+
});
|
|
37
42
|
export const tasksCommand = (program, streams, env) => {
|
|
38
43
|
const group = program.command("tasks").description("open work linked to stored messages, documents and emails");
|
|
39
44
|
taskRelationsCommand(group, streams, env);
|
|
40
|
-
const print =
|
|
45
|
+
const { print } = answers(program, streams, env);
|
|
41
46
|
fieldOptions(accountOptions(group.command("add")))
|
|
42
47
|
.description("add a task from a message, note or document, or one of your own in a project")
|
|
43
48
|
.argument("[source]", "msg: source locator, note:<id> or document:<id>; leave out for a task in a project")
|
|
@@ -45,8 +50,7 @@ export const tasksCommand = (program, streams, env) => {
|
|
|
45
50
|
.option("--project <project>", "a task without a source: the project's key or project:<id>")
|
|
46
51
|
.option("--assignee <person...>", "who does it: a person's UID")
|
|
47
52
|
.action(async (source, options) => {
|
|
48
|
-
|
|
49
|
-
try {
|
|
53
|
+
await withStore(env, async (store) => {
|
|
50
54
|
if (source === undefined) {
|
|
51
55
|
if (options.project === undefined || options.title === undefined)
|
|
52
56
|
throw new CliError("validation_error", "a task without a source needs --project and --title");
|
|
@@ -60,7 +64,7 @@ export const tasksCommand = (program, streams, env) => {
|
|
|
60
64
|
...fieldsOf(options),
|
|
61
65
|
}, "owner");
|
|
62
66
|
await assignAll(store, task.id, options.assignee);
|
|
63
|
-
print(options.json, await store.tasks.details(task.id));
|
|
67
|
+
print(options.json, itemAnswer(await store.tasks.details(task.id)));
|
|
64
68
|
return;
|
|
65
69
|
}
|
|
66
70
|
if (options.project !== undefined)
|
|
@@ -84,16 +88,13 @@ export const tasksCommand = (program, streams, env) => {
|
|
|
84
88
|
const answer = await tasksService(storeOnlyDeps(store, key, { app: APP, env })).add(source, type, "owner");
|
|
85
89
|
const fields = fieldsOf(options);
|
|
86
90
|
if (Object.keys(fields).length === 0 && !options.assignee?.length) {
|
|
87
|
-
print(options.json, answer);
|
|
91
|
+
print(options.json, itemAnswer(answer));
|
|
88
92
|
return;
|
|
89
93
|
}
|
|
90
94
|
await store.tasks.edit(answer.task.id, fields, "owner");
|
|
91
95
|
await assignAll(store, answer.task.id, options.assignee);
|
|
92
|
-
print(options.json, { ...answer, details: await store.tasks.details(answer.task.id) });
|
|
93
|
-
}
|
|
94
|
-
finally {
|
|
95
|
-
await store.close();
|
|
96
|
-
}
|
|
96
|
+
print(options.json, itemAnswer({ ...answer, details: await store.tasks.details(answer.task.id) }));
|
|
97
|
+
});
|
|
97
98
|
});
|
|
98
99
|
accountOptions(group.command("list").description("tasks of one account or one project, open by default"))
|
|
99
100
|
.option("--state <state>", "open, done or dismissed", taskStateOf, "open")
|
|
@@ -103,13 +104,12 @@ export const tasksCommand = (program, streams, env) => {
|
|
|
103
104
|
.action(async (options) => {
|
|
104
105
|
if (options.ready && (options.project === undefined || options.state !== "open"))
|
|
105
106
|
throw new CliError("validation_error", "--ready lists a project's open tasks: give --project, not --state");
|
|
106
|
-
|
|
107
|
-
try {
|
|
107
|
+
await withStore(env, async (store) => {
|
|
108
108
|
if (options.ready && options.project !== undefined) {
|
|
109
109
|
const page = await store.tasks.readyTasks(await canonicalProject(store, options.project), {
|
|
110
110
|
limit: options.limit,
|
|
111
111
|
});
|
|
112
|
-
print(options.json,
|
|
112
|
+
print(options.json, tasksPage(page, options.limit));
|
|
113
113
|
return;
|
|
114
114
|
}
|
|
115
115
|
if (options.project !== undefined) {
|
|
@@ -118,38 +118,31 @@ export const tasksCommand = (program, streams, env) => {
|
|
|
118
118
|
status: options.state,
|
|
119
119
|
limit: options.limit + 1,
|
|
120
120
|
});
|
|
121
|
-
print(options.json, { items: items.slice(0, options.limit), hasMore: items.length > options.limit });
|
|
121
|
+
print(options.json, tasksPage({ items: items.slice(0, options.limit), hasMore: items.length > options.limit }, options.limit));
|
|
122
122
|
return;
|
|
123
123
|
}
|
|
124
124
|
const key = await selectAccount(store, options);
|
|
125
125
|
const page = await taskPage(store, key, { state: options.state, limit: options.limit });
|
|
126
|
-
print(options.json,
|
|
127
|
-
}
|
|
128
|
-
finally {
|
|
129
|
-
await store.close();
|
|
130
|
-
}
|
|
126
|
+
print(options.json, tasksPage(page, options.limit));
|
|
127
|
+
});
|
|
131
128
|
});
|
|
132
129
|
accountOptions(group.command("close").description("close a task as done or dismissed").argument("<id>", "the task's id"))
|
|
133
130
|
.option("--as <state>", "done or dismissed", closedStateOf, "done")
|
|
134
131
|
.option("--reason <text>", "why it is closed")
|
|
135
132
|
.action(async (id, options) => {
|
|
136
|
-
|
|
137
|
-
try {
|
|
133
|
+
await withStore(env, async (store) => {
|
|
138
134
|
if ((await store.tasks.get(id)) === undefined) {
|
|
139
135
|
const reason = options.reason === undefined ? {} : { reason: options.reason };
|
|
140
|
-
print(options.json, await store.tasks.edit(id, { status: options.as, ...reason }, "owner"));
|
|
136
|
+
print(options.json, itemAnswer(await store.tasks.edit(id, { status: options.as, ...reason }, "owner")));
|
|
141
137
|
return;
|
|
142
138
|
}
|
|
143
139
|
const key = await selectAccount(store, options);
|
|
144
|
-
print(options.json, await tasksService(storeOnlyDeps(store, key, { app: APP, env })).close(id, {
|
|
140
|
+
print(options.json, itemAnswer(await tasksService(storeOnlyDeps(store, key, { app: APP, env })).close(id, {
|
|
145
141
|
as: options.as,
|
|
146
142
|
by: "owner",
|
|
147
143
|
...(options.reason === undefined ? {} : { reason: options.reason }),
|
|
148
|
-
}));
|
|
149
|
-
}
|
|
150
|
-
finally {
|
|
151
|
-
await store.close();
|
|
152
|
-
}
|
|
144
|
+
})));
|
|
145
|
+
});
|
|
153
146
|
});
|
|
154
147
|
fieldOptions(group.command("update").description("change a task's title, priority, parent or description"))
|
|
155
148
|
.argument("<id>", "the task's id or key")
|
|
@@ -158,13 +151,9 @@ export const tasksCommand = (program, streams, env) => {
|
|
|
158
151
|
const fields = fieldsOf(options);
|
|
159
152
|
if (Object.keys(fields).length === 0)
|
|
160
153
|
throw new CliError("validation_error", "give --title, --priority, --parent or --description");
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
}
|
|
165
|
-
finally {
|
|
166
|
-
await store.close();
|
|
167
|
-
}
|
|
154
|
+
await withStore(env, async (store) => {
|
|
155
|
+
print(options.json, itemAnswer(await store.tasks.edit(id, fields, "owner")));
|
|
156
|
+
});
|
|
168
157
|
});
|
|
169
158
|
group
|
|
170
159
|
.command("assign")
|
|
@@ -174,13 +163,9 @@ export const tasksCommand = (program, streams, env) => {
|
|
|
174
163
|
.option("--role <role>", TASK_ROLES.join(", "), oneOf(TASK_ROLES), "assignee")
|
|
175
164
|
.option("--json", "print JSON; --json=id,title keeps only those fields")
|
|
176
165
|
.action(async (id, person, options) => {
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
}
|
|
181
|
-
finally {
|
|
182
|
-
await store.close();
|
|
183
|
-
}
|
|
166
|
+
await withStore(env, async (store) => {
|
|
167
|
+
print(options.json, itemAnswer(await store.tasks.assign(id, { to: personRef(person), role: options.role }, "owner")));
|
|
168
|
+
});
|
|
184
169
|
});
|
|
185
170
|
};
|
|
186
171
|
//# sourceMappingURL=command.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"command.js","sourceRoot":"","sources":["../../src/tasks/command.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAgB,MAAM,mBAAmB,CAAA;AAC1D,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAA;AAChD,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAA;AACpG,OAAO,EAEL,
|
|
1
|
+
{"version":3,"file":"command.js","sourceRoot":"","sources":["../../src/tasks/command.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import { TASK_RELATION_KINDS } from "@wirecat/cli-core/store";
|
|
2
|
+
import { answers, itemAnswer, wholeList } from "../answer.js";
|
|
2
3
|
import { oneOf } from "../options.js";
|
|
3
|
-
import { answering } from "../records/run.js";
|
|
4
4
|
export const taskRelationsCommand = (tasks, streams, env) => {
|
|
5
|
-
const run =
|
|
6
|
-
const execute = (options, work) => run(options.json, work);
|
|
5
|
+
const { run } = answers(tasks, streams, env);
|
|
6
|
+
const execute = (options, work) => run(options.json, async (store) => itemAnswer(await work(store)));
|
|
7
7
|
for (const operation of ["link", "unlink"]) {
|
|
8
8
|
tasks
|
|
9
9
|
.command(operation)
|
|
@@ -21,7 +21,7 @@ export const taskRelationsCommand = (tasks, streams, env) => {
|
|
|
21
21
|
.description("a task's links to other tasks")
|
|
22
22
|
.argument("<task>", "the task: task:<id> or its id")
|
|
23
23
|
.option("--json", "print JSON; --json=id,title keeps only those fields")
|
|
24
|
-
.action((task, options) =>
|
|
24
|
+
.action((task, options) => run(options.json, async (store) => wholeList("tasks relations", await store.tasks.taskRelations(task))));
|
|
25
25
|
tasks
|
|
26
26
|
.command("status")
|
|
27
27
|
.description("whether a task can start, and what it still waits for")
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"relations-command.js","sourceRoot":"","sources":["../../src/tasks/relations-command.ts"],"names":[],"mappings":"AACA,OAAO,EAAqB,mBAAmB,EAAyB,MAAM,yBAAyB,CAAA;AAEvG,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"relations-command.js","sourceRoot":"","sources":["../../src/tasks/relations-command.ts"],"names":[],"mappings":"AACA,OAAO,EAAqB,mBAAmB,EAAyB,MAAM,yBAAyB,CAAA;AAEvG,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,cAAc,CAAA;AAC7D,OAAO,EAAE,KAAK,EAAE,MAAM,eAAe,CAAA;AAErC,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAAC,KAAc,EAAE,OAAgB,EAAE,GAAsB,EAAE,EAAE;IAC/F,MAAM,EAAE,GAAG,EAAE,GAAG,OAAO,CAAC,KAAK,EAAE,OAAO,EAAE,GAAG,CAAC,CAAA;IAC5C,MAAM,OAAO,GAAG,CAAC,OAA2B,EAAE,IAA+C,EAAE,EAAE,CAC/F,GAAG,CAAC,OAAO,CAAC,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,CAAC,UAAU,CAAC,MAAM,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAA;IACnE,KAAK,MAAM,SAAS,IAAI,CAAC,MAAM,EAAE,QAAQ,CAAU,EAAE,CAAC;QACpD,KAAK;aACF,OAAO,CAAC,SAAS,CAAC;aAClB,WAAW,CAAC,GAAG,SAAS,sCAAsC,CAAC;aAC/D,QAAQ,CAAC,QAAQ,EAAE,+BAA+B,CAAC;aACnD,QAAQ,CAAC,cAAc,EAAE,6CAA6C,CAAC;aACvE,cAAc,CAAC,eAAe,EAAE,mBAAmB,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,KAAK,CAAC,mBAAmB,CAAC,CAAC;aAC3F,MAAM,CAAC,QAAQ,EAAE,qDAAqD,CAAC;aACvE,MAAM,CAAC,CAAC,IAAY,EAAE,KAAa,EAAE,OAAmD,EAAE,EAAE,CAC3F,OAAO,CAAC,OAAO,EAAE,CAAC,KAAK,EAAE,EAAE,CACzB,SAAS,KAAK,MAAM;YAClB,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,EAAE,KAAK,EAAE,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC;YAC1D,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,UAAU,CAAC,IAAI,EAAE,KAAK,EAAE,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,CAC/D,CACF,CAAA;IACL,CAAC;IACD,KAAK;SACF,OAAO,CAAC,WAAW,CAAC;SACpB,WAAW,CAAC,+BAA+B,CAAC;SAC5C,QAAQ,CAAC,QAAQ,EAAE,+BAA+B,CAAC;SACnD,MAAM,CAAC,QAAQ,EAAE,qDAAqD,CAAC;SACvE,MAAM,CAAC,CAAC,IAAY,EAAE,OAA2B,EAAE,EAAE,CACpD,GAAG,CAAC,OAAO,CAAC,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,CAAC,SAAS,CAAC,iBAAiB,EAAE,MAAM,KAAK,CAAC,KAAK,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC,CACxG,CAAA;IACH,KAAK;SACF,OAAO,CAAC,QAAQ,CAAC;SACjB,WAAW,CAAC,uDAAuD,CAAC;SACpE,QAAQ,CAAC,QAAQ,EAAE,+BAA+B,CAAC;SACnD,MAAM,CAAC,QAAQ,EAAE,qDAAqD,CAAC;SACvE,MAAM,CAAC,CAAC,IAAY,EAAE,OAA2B,EAAE,EAAE,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;AACxH,CAAC,CAAA"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
export declare const optionsOf: (args: readonly string[]) => readonly string[];
|
|
2
|
+
/** A person at a terminal who did not ask for machine output. */
|
|
3
|
+
export declare const interactiveOf: (args: readonly string[], tty: boolean) => boolean;
|
|
4
|
+
//# sourceMappingURL=terminal.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"terminal.d.ts","sourceRoot":"","sources":["../src/terminal.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,SAAS,SAAU,SAAS,MAAM,EAAE,sBAGhD,CAAA;AAED,iEAAiE;AACjE,eAAO,MAAM,aAAa,SAAU,SAAS,MAAM,EAAE,OAAO,OAAO,YACF,CAAA"}
|
package/dist/terminal.js
ADDED
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
const MACHINE_FLAGS = new Set(["--json", "--jsonl"]);
|
|
2
|
+
export const optionsOf = (args) => {
|
|
3
|
+
const end = args.indexOf("--");
|
|
4
|
+
return end < 0 ? args : args.slice(0, end);
|
|
5
|
+
};
|
|
6
|
+
/** A person at a terminal who did not ask for machine output. */
|
|
7
|
+
export const interactiveOf = (args, tty) => tty && !optionsOf(args).some((flag) => MACHINE_FLAGS.has(flag));
|
|
8
|
+
//# sourceMappingURL=terminal.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"terminal.js","sourceRoot":"","sources":["../src/terminal.ts"],"names":[],"mappings":"AAAA,MAAM,aAAa,GAAG,IAAI,GAAG,CAAC,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC,CAAA;AAEpD,MAAM,CAAC,MAAM,SAAS,GAAG,CAAC,IAAuB,EAAE,EAAE;IACnD,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAA;IAC9B,OAAO,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAA;AAC5C,CAAC,CAAA;AAED,iEAAiE;AACjE,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,IAAuB,EAAE,GAAY,EAAE,EAAE,CACrE,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,aAAa,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAA"}
|
package/dist/update.d.ts
ADDED
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { type Streams } from "@wirecat/cli-base";
|
|
2
|
+
import type { FetchLike } from "@wirecat/cli-base/http";
|
|
3
|
+
import { type Installer } from "@wirecat/cli-base/update";
|
|
4
|
+
import type { Command } from "commander";
|
|
5
|
+
export declare const PACKAGE = "@wirecat/cli-memo";
|
|
6
|
+
/** npm, the clock, the terminal and the package manager as `memo upgrade` sees them — faked in a test. */
|
|
7
|
+
export interface UpdateEnvironment {
|
|
8
|
+
fetch?: FetchLike;
|
|
9
|
+
now?: () => number;
|
|
10
|
+
stderrIsTTY?: boolean;
|
|
11
|
+
scriptPath?: string;
|
|
12
|
+
/** Runs the update and answers its exit code; its output goes to stderr. */
|
|
13
|
+
spawn?: (argv: string[]) => number;
|
|
14
|
+
}
|
|
15
|
+
export declare const installer: ({ scriptPath }?: UpdateEnvironment) => Installer;
|
|
16
|
+
/**
|
|
17
|
+
* The daily "a newer memo exists" line, or `undefined`. Started beside the command and awaited after it, so
|
|
18
|
+
* asking npm costs the command nothing; any failure is silence. Never inside the timer's own run.
|
|
19
|
+
*/
|
|
20
|
+
export declare const updateNotice: (argv: readonly string[], { env, environment }?: {
|
|
21
|
+
env?: NodeJS.ProcessEnv;
|
|
22
|
+
environment?: UpdateEnvironment;
|
|
23
|
+
}) => Promise<string | undefined>;
|
|
24
|
+
/** cli-core's `upgrade`: the package manager that installed memo, or only a look with `--check`. */
|
|
25
|
+
export declare const upgradeCommand: (streams: Streams, environment?: UpdateEnvironment) => Command;
|
|
26
|
+
//# sourceMappingURL=update.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"update.d.ts","sourceRoot":"","sources":["../src/update.ts"],"names":[],"mappings":"AAGA,OAAO,EAAgC,KAAK,OAAO,EAAE,MAAM,mBAAmB,CAAA;AAC9E,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAA;AACvD,OAAO,EACL,KAAK,SAAS,EAKf,MAAM,0BAA0B,CAAA;AAEjC,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAKxC,eAAO,MAAM,OAAO,sBAAsB,CAAA;AAE1C,0GAA0G;AAC1G,MAAM,WAAW,iBAAiB;IAChC,KAAK,CAAC,EAAE,SAAS,CAAA;IACjB,GAAG,CAAC,EAAE,MAAM,MAAM,CAAA;IAClB,WAAW,CAAC,EAAE,OAAO,CAAA;IACrB,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,4EAA4E;IAC5E,KAAK,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,MAAM,CAAA;CACnC;AAED,eAAO,MAAM,SAAS,oBAAoB,iBAAiB,KAAQ,SACM,CAAA;AAmBzE;;;GAGG;AACH,eAAO,MAAM,YAAY,SACjB,SAAS,MAAM,EAAE,yBACkB;IAAE,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,CAAC;IAAC,WAAW,CAAC,EAAE,iBAAiB,CAAA;CAAE,KACpG,OAAO,CAAC,MAAM,GAAG,SAAS,CAyB5B,CAAA;AAED,oGAAoG;AACpG,eAAO,MAAM,cAAc,YAAa,OAAO,gBAAe,iBAAiB,KAAQ,OAWpD,CAAA"}
|
package/dist/update.js
ADDED
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
import { realpathSync } from "node:fs";
|
|
2
|
+
import { join } from "node:path";
|
|
3
|
+
import { fileURLToPath } from "node:url";
|
|
4
|
+
import { createRenderer, resolvePaths } from "@wirecat/cli-base";
|
|
5
|
+
import { installerOf, latestVersion, runUpdate as runPackageManager, updateNotice as sharedNotice, } from "@wirecat/cli-base/update";
|
|
6
|
+
import { upgradeCommand as sharedUpgradeCommand } from "@wirecat/cli-core/cli";
|
|
7
|
+
import { APP } from "./app.js";
|
|
8
|
+
import { loadConfig } from "./config.js";
|
|
9
|
+
import { VERSION } from "./version.js";
|
|
10
|
+
export const PACKAGE = "@wirecat/cli-memo";
|
|
11
|
+
export const installer = ({ scriptPath } = {}) => installerOf(scriptPath ?? realpathSync(fileURLToPath(import.meta.url)));
|
|
12
|
+
const latest = (environment) => latestVersion(PACKAGE, environment.fetch ?? fetch, { timeoutMs: 3000 });
|
|
13
|
+
const statePath = (env) => join(resolvePaths({ appName: APP.appName, prefix: APP.envPrefix, env }).state, "update-check.json");
|
|
14
|
+
const enabled = (env) => {
|
|
15
|
+
try {
|
|
16
|
+
return loadConfig(env).update_check !== false;
|
|
17
|
+
}
|
|
18
|
+
catch {
|
|
19
|
+
return false;
|
|
20
|
+
}
|
|
21
|
+
};
|
|
22
|
+
// Words after which a line on stderr would land in a machine's answer, or would only repeat the command.
|
|
23
|
+
const QUIET_WORDS = ["--help", "-h", "--version", "-V", "--json", "--quiet", "commands", "upgrade", "mcp", "complete"];
|
|
24
|
+
/**
|
|
25
|
+
* The daily "a newer memo exists" line, or `undefined`. Started beside the command and awaited after it, so
|
|
26
|
+
* asking npm costs the command nothing; any failure is silence. Never inside the timer's own run.
|
|
27
|
+
*/
|
|
28
|
+
export const updateNotice = (argv, { env = process.env, environment = {} } = {}) => {
|
|
29
|
+
try {
|
|
30
|
+
const delimiter = argv.indexOf("--");
|
|
31
|
+
const words = argv.slice(0, delimiter < 0 ? undefined : delimiter);
|
|
32
|
+
if (env.MEMO_AUTO === "1" || words.some((word) => QUIET_WORDS.includes(word) || word.startsWith("--json=")))
|
|
33
|
+
return Promise.resolve(undefined);
|
|
34
|
+
return sharedNotice({
|
|
35
|
+
argv,
|
|
36
|
+
packageName: PACKAGE,
|
|
37
|
+
command: APP.command,
|
|
38
|
+
version: VERSION,
|
|
39
|
+
statePath: statePath(env),
|
|
40
|
+
fetch: environment.fetch ?? fetch,
|
|
41
|
+
...(environment.now ? { now: environment.now } : {}),
|
|
42
|
+
format: "pretty",
|
|
43
|
+
stderrIsTTY: environment.stderrIsTTY ?? process.stderr.isTTY === true,
|
|
44
|
+
quiet: false,
|
|
45
|
+
enabled: enabled(env),
|
|
46
|
+
installer: installer(environment),
|
|
47
|
+
env,
|
|
48
|
+
offVariables: ["MEMO_NO_UPDATE_CHECK"],
|
|
49
|
+
}).then((line) => line?.replace("`memo update`", "`memo upgrade`"));
|
|
50
|
+
}
|
|
51
|
+
catch {
|
|
52
|
+
return Promise.resolve(undefined);
|
|
53
|
+
}
|
|
54
|
+
};
|
|
55
|
+
/** cli-core's `upgrade`: the package manager that installed memo, or only a look with `--check`. */
|
|
56
|
+
export const upgradeCommand = (streams, environment = {}) => sharedUpgradeCommand(APP, PACKAGE, (command) => {
|
|
57
|
+
const format = command.opts().json ? "json" : "pretty";
|
|
58
|
+
return {
|
|
59
|
+
renderer: createRenderer({ format, color: false, streams }),
|
|
60
|
+
format,
|
|
61
|
+
streams,
|
|
62
|
+
installer: () => installer(environment),
|
|
63
|
+
latest: () => latest(environment),
|
|
64
|
+
install: (argv) => (environment.spawn ? environment.spawn(argv) : runPackageManager(argv)),
|
|
65
|
+
};
|
|
66
|
+
}).option("--json", "print JSON");
|
|
67
|
+
//# sourceMappingURL=update.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"update.js","sourceRoot":"","sources":["../src/update.ts"],"names":[],"mappings":"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"}
|
package/dist/version.d.ts
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export declare const VERSION = "0.
|
|
1
|
+
export declare const VERSION = "0.32.0";
|
|
2
2
|
//# sourceMappingURL=version.d.ts.map
|
package/dist/version.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export const VERSION = "0.
|
|
1
|
+
export const VERSION = "0.32.0";
|
|
2
2
|
//# sourceMappingURL=version.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"command.d.ts","sourceRoot":"","sources":["../../src/vocabulary/command.ts"],"names":[],"mappings":"AAAA,OAAO,EAAY,KAAK,OAAO,EAAE,MAAM,mBAAmB,CAAA;AAE1D,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAYxC,eAAO,MAAM,iBAAiB,YAAa,OAAO,WAAW,OAAO,OAAO,MAAM,CAAC,UAAU,KAAG,
|
|
1
|
+
{"version":3,"file":"command.d.ts","sourceRoot":"","sources":["../../src/vocabulary/command.ts"],"names":[],"mappings":"AAAA,OAAO,EAAY,KAAK,OAAO,EAAE,MAAM,mBAAmB,CAAA;AAE1D,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAYxC,eAAO,MAAM,iBAAiB,YAAa,OAAO,WAAW,OAAO,OAAO,MAAM,CAAC,UAAU,KAAG,IAyH9F,CAAA"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { CliError } from "@wirecat/cli-base";
|
|
2
|
+
import { answers, itemAnswer } from "../answer.js";
|
|
2
3
|
import { oneOf, positive } from "../options.js";
|
|
3
|
-
import { answering } from "../records/run.js";
|
|
4
4
|
const kinds = ["project", "tag", "topic"];
|
|
5
5
|
const targetOf = (reference) => {
|
|
6
6
|
const match = reference.match(/^(project|tag|topic):([1-9]\d*)$/);
|
|
@@ -12,8 +12,8 @@ export const vocabularyCommand = (program, streams, env) => {
|
|
|
12
12
|
const vocabulary = program
|
|
13
13
|
.command("vocabulary")
|
|
14
14
|
.description("canonical projects, tags and topics with explicit aliases");
|
|
15
|
-
const run =
|
|
16
|
-
const execute = (options, work) => run(options.json, work);
|
|
15
|
+
const { run } = answers(program, streams, env);
|
|
16
|
+
const execute = (options, work) => run(options.json, async (store) => itemAnswer(await work(store)));
|
|
17
17
|
const readOptions = (command) => command
|
|
18
18
|
.option("--kind <kind>", "project, tag or topic", oneOf(kinds))
|
|
19
19
|
.option("--scope <scope>", "personal or work projects", oneOf(["personal", "work"]))
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"command.js","sourceRoot":"","sources":["../../src/vocabulary/command.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAgB,MAAM,mBAAmB,CAAA;AAG1D,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"command.js","sourceRoot":"","sources":["../../src/vocabulary/command.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@wirecat/cli-memo",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.32.0",
|
|
4
4
|
"description": "Context about people across messengers, notes and mail, from a local store",
|
|
5
5
|
"license": "Apache-2.0",
|
|
6
6
|
"author": "Viacheslav Ptsarev",
|
|
@@ -48,9 +48,11 @@
|
|
|
48
48
|
"@modelcontextprotocol/server": "2.1.0",
|
|
49
49
|
"@valibot/to-json-schema": "1.8.0",
|
|
50
50
|
"@wirecat/cli-base": "0.28.2",
|
|
51
|
-
"@wirecat/cli-core": "0.
|
|
51
|
+
"@wirecat/cli-core": "0.279.0",
|
|
52
52
|
"commander": "15.0.0",
|
|
53
|
+
"disposable-email-domains-js": "1.26.0",
|
|
53
54
|
"postal-mime": "4.0.0",
|
|
55
|
+
"tldts": "7.4.16",
|
|
54
56
|
"valibot": "1.5.0",
|
|
55
57
|
"yaml": "2.9.1"
|
|
56
58
|
},
|
package/skills/cli-memo/SKILL.md
CHANGED
|
@@ -18,9 +18,12 @@ anything. Add `--json` and read the answer, not the text meant for people.
|
|
|
18
18
|
also reads file text and voice transcripts depends on the version. Compare like with like:
|
|
19
19
|
`memo search messages 'content:invoice'` with `tg search messages 'content:invoice'`, a plain word
|
|
20
20
|
with a plain word.
|
|
21
|
-
3. **
|
|
22
|
-
|
|
23
|
-
`
|
|
21
|
+
3. **Every answer is `item` (one thing) or `items` with `page` (a list), plus `meta`.** References:
|
|
22
|
+
every search's `items[].ref`. Pass a reference back unchanged. A search names its fields, so
|
|
23
|
+
`--json=ref,excerpt` keeps those and refuses one it does not have. `missing` says what was not searched and why.
|
|
24
|
+
A list narrows by field:value terms after its arguments, not by flags: `memo facts list kind:decision
|
|
25
|
+
status:proposed`; its `--help` names the fields.
|
|
26
|
+
Who a note links to: `memo context <person>`.
|
|
24
27
|
4. **Start work on a project with `memo projects context <key>`.** Its key documents come first:
|
|
25
28
|
read them before anything else. Mark one with
|
|
26
29
|
`memo projects key-documents add <key> <reference> --reason '<why>'`.
|
|
@@ -42,17 +45,23 @@ anything. Add `--json` and read the answer, not the text meant for people.
|
|
|
42
45
|
mail not done. `memo mail status <account> --json` says how far it is; `--rescan` lists everything
|
|
43
46
|
again (needed only to mark deletions sooner than the daily whole listing).
|
|
44
47
|
11. **Probe before a first large mail import.** `memo mail probe <account> --json` groups mail by
|
|
45
|
-
sender and list from headers only; its `suggest` is a hint, not a decision.
|
|
48
|
+
sender and list from headers only; its `suggest` is a hint, not a decision. Its `score` and `signals`
|
|
49
|
+
flag likely spam, scams and robots; a high score is a reason to show the owner, not to add a rule.
|
|
50
|
+
Pass `--domain-age` only when the owner agrees: it tells domain registries the sender domains.
|
|
46
51
|
12. **Mail rules are the owner's decision.** Suggest groups to skip or record; never run
|
|
47
52
|
`memo mail rules add … --skip` or `--envelope` unasked. A skipped email is never imported. An envelope
|
|
48
53
|
email is stored without its text and is never a search hit; `memo mail rules list` counts it. Mail
|
|
49
54
|
already stored stays until `memo mail rules apply <account> --yes` cuts it; run it without `--yes`
|
|
50
|
-
first and show the owner what it would cut.
|
|
55
|
+
first and show the owner what it would cut. Rules live in the store, not in `config.json`: never edit
|
|
56
|
+
them there; `memo mail rules export|import` moves them as a file. A protected rule is never cut.
|
|
51
57
|
13. **Old years come from a Google Takeout mbox**, an account with `"mode": "mbox"` and the Gmail
|
|
52
58
|
address; it syncs only when named, and reads the whole file each run, so give a large `--limit`:
|
|
53
59
|
`memo sync --account <name> --since-time 2000-01-01 --limit 5000`.
|
|
54
60
|
14. **A stderr line `memo: scheduled sync failing since …` means the owner's timer is broken** and their
|
|
55
61
|
notes or mail are going stale. Tell the owner, quote its reason; `memo auto status` has the rest.
|
|
62
|
+
15. **When something seems missing or broken, run `memo doctor --json` first.** It reads this computer only and
|
|
63
|
+
lists each problem with the command that fixes it. A sync failure with reason `mail.throttled` means Gmail is
|
|
64
|
+
limiting the account: wait an hour or more, do not retry in a loop.
|
|
56
65
|
|
|
57
66
|
## The usual path
|
|
58
67
|
|
package/dist/records/run.d.ts
DELETED
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
import { type Streams } from "@wirecat/cli-base";
|
|
2
|
-
import { type MessageStore } from "@wirecat/cli-core/store";
|
|
3
|
-
/** Prints an answer as JSON, or for a person as `text`, or as indented JSON where a command has no text view. */
|
|
4
|
-
export declare const printing: (streams: Streams) => (json: boolean | undefined, answer: unknown, text?: string) => void;
|
|
5
|
-
/** Opens the store for one command, prints its answer as JSON or as indented text, and closes the store. */
|
|
6
|
-
export declare const answering: (streams: Streams, env: NodeJS.ProcessEnv) => (json: boolean | undefined, work: (store: MessageStore) => Promise<unknown>) => Promise<void>;
|
|
7
|
-
//# sourceMappingURL=run.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"run.d.ts","sourceRoot":"","sources":["../../src/records/run.ts"],"names":[],"mappings":"AAAA,OAAO,EAAkB,KAAK,OAAO,EAAE,MAAM,mBAAmB,CAAA;AAChE,OAAO,EAAE,KAAK,YAAY,EAAa,MAAM,yBAAyB,CAAA;AAGtE,iHAAiH;AACjH,eAAO,MAAM,QAAQ,YACT,OAAO,YACV,OAAO,GAAG,SAAS,UAAU,OAAO,SAAS,MAAM,KAAG,IAG5D,CAAA;AAEH,4GAA4G;AAC5G,eAAO,MAAM,SAAS,YAAa,OAAO,OAAO,MAAM,CAAC,UAAU,YAE5C,OAAO,GAAG,SAAS,QAAQ,CAAC,KAAK,EAAE,YAAY,KAAK,OAAO,CAAC,OAAO,CAAC,KAAG,OAAO,CAAC,IAAI,CAQxG,CAAA"}
|
package/dist/records/run.js
DELETED
|
@@ -1,24 +0,0 @@
|
|
|
1
|
-
import { createRenderer } from "@wirecat/cli-base";
|
|
2
|
-
import { openStore } from "@wirecat/cli-core/store";
|
|
3
|
-
import { snakeKeys } from "../output.js";
|
|
4
|
-
/** Prints an answer as JSON, or for a person as `text`, or as indented JSON where a command has no text view. */
|
|
5
|
-
export const printing = (streams) => (json, answer, text) => {
|
|
6
|
-
if (json)
|
|
7
|
-
createRenderer({ format: "json", color: false, streams }).result(snakeKeys(answer));
|
|
8
|
-
else
|
|
9
|
-
streams.data(`${text ?? JSON.stringify(snakeKeys(answer), null, 2)}\n`);
|
|
10
|
-
};
|
|
11
|
-
/** Opens the store for one command, prints its answer as JSON or as indented text, and closes the store. */
|
|
12
|
-
export const answering = (streams, env) => {
|
|
13
|
-
const print = printing(streams);
|
|
14
|
-
return async (json, work) => {
|
|
15
|
-
const store = await openStore({ env });
|
|
16
|
-
try {
|
|
17
|
-
print(json, await work(store));
|
|
18
|
-
}
|
|
19
|
-
finally {
|
|
20
|
-
await store.close();
|
|
21
|
-
}
|
|
22
|
-
};
|
|
23
|
-
};
|
|
24
|
-
//# sourceMappingURL=run.js.map
|
package/dist/records/run.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"run.js","sourceRoot":"","sources":["../../src/records/run.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAgB,MAAM,mBAAmB,CAAA;AAChE,OAAO,EAAqB,SAAS,EAAE,MAAM,yBAAyB,CAAA;AACtE,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAA;AAExC,iHAAiH;AACjH,MAAM,CAAC,MAAM,QAAQ,GACnB,CAAC,OAAgB,EAAE,EAAE,CACrB,CAAC,IAAyB,EAAE,MAAe,EAAE,IAAa,EAAQ,EAAE;IAClE,IAAI,IAAI;QAAE,cAAc,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC,CAAC,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAA;;QACxF,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,IAAI,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAA;AAC9E,CAAC,CAAA;AAEH,4GAA4G;AAC5G,MAAM,CAAC,MAAM,SAAS,GAAG,CAAC,OAAgB,EAAE,GAAsB,EAAE,EAAE;IACpE,MAAM,KAAK,GAAG,QAAQ,CAAC,OAAO,CAAC,CAAA;IAC/B,OAAO,KAAK,EAAE,IAAyB,EAAE,IAA+C,EAAiB,EAAE;QACzG,MAAM,KAAK,GAAG,MAAM,SAAS,CAAC,EAAE,GAAG,EAAE,CAAC,CAAA;QACtC,IAAI,CAAC;YACH,KAAK,CAAC,IAAI,EAAE,MAAM,IAAI,CAAC,KAAK,CAAC,CAAC,CAAA;QAChC,CAAC;gBAAS,CAAC;YACT,MAAM,KAAK,CAAC,KAAK,EAAE,CAAA;QACrB,CAAC;IACH,CAAC,CAAA;AACH,CAAC,CAAA"}
|