implto-tos-axi 0.1.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +255 -0
- package/dist/bin/implto-tos-axi.d.ts +2 -0
- package/dist/bin/implto-tos-axi.js +16 -0
- package/dist/bin/implto-tos-axi.js.map +1 -0
- package/dist/src/auth/loopback.d.ts +29 -0
- package/dist/src/auth/loopback.js +110 -0
- package/dist/src/auth/loopback.js.map +1 -0
- package/dist/src/auth/open-browser.d.ts +9 -0
- package/dist/src/auth/open-browser.js +24 -0
- package/dist/src/auth/open-browser.js.map +1 -0
- package/dist/src/auth/provider.d.ts +39 -0
- package/dist/src/auth/provider.js +106 -0
- package/dist/src/auth/provider.js.map +1 -0
- package/dist/src/cli.d.ts +2 -0
- package/dist/src/cli.js +183 -0
- package/dist/src/cli.js.map +1 -0
- package/dist/src/commands/components.d.ts +40 -0
- package/dist/src/commands/components.js +417 -0
- package/dist/src/commands/components.js.map +1 -0
- package/dist/src/commands/context.d.ts +10 -0
- package/dist/src/commands/context.js +46 -0
- package/dist/src/commands/context.js.map +1 -0
- package/dist/src/commands/guide.d.ts +16 -0
- package/dist/src/commands/guide.js +203 -0
- package/dist/src/commands/guide.js.map +1 -0
- package/dist/src/commands/home.d.ts +9 -0
- package/dist/src/commands/home.js +33 -0
- package/dist/src/commands/home.js.map +1 -0
- package/dist/src/commands/init.d.ts +12 -0
- package/dist/src/commands/init.js +65 -0
- package/dist/src/commands/init.js.map +1 -0
- package/dist/src/commands/login.d.ts +13 -0
- package/dist/src/commands/login.js +137 -0
- package/dist/src/commands/login.js.map +1 -0
- package/dist/src/commands/tasks.d.ts +8 -0
- package/dist/src/commands/tasks.js +344 -0
- package/dist/src/commands/tasks.js.map +1 -0
- package/dist/src/commands/tools.d.ts +66 -0
- package/dist/src/commands/tools.js +401 -0
- package/dist/src/commands/tools.js.map +1 -0
- package/dist/src/commands/whoami.d.ts +5 -0
- package/dist/src/commands/whoami.js +66 -0
- package/dist/src/commands/whoami.js.map +1 -0
- package/dist/src/config/binding.d.ts +29 -0
- package/dist/src/config/binding.js +42 -0
- package/dist/src/config/binding.js.map +1 -0
- package/dist/src/config/credentials.d.ts +39 -0
- package/dist/src/config/credentials.js +62 -0
- package/dist/src/config/credentials.js.map +1 -0
- package/dist/src/config/profiles.d.ts +24 -0
- package/dist/src/config/profiles.js +64 -0
- package/dist/src/config/profiles.js.map +1 -0
- package/dist/src/errors.d.ts +21 -0
- package/dist/src/errors.js +40 -0
- package/dist/src/errors.js.map +1 -0
- package/dist/src/flags.d.ts +50 -0
- package/dist/src/flags.js +143 -0
- package/dist/src/flags.js.map +1 -0
- package/dist/src/index.d.ts +6 -0
- package/dist/src/index.js +7 -0
- package/dist/src/index.js.map +1 -0
- package/dist/src/mcp/client.d.ts +85 -0
- package/dist/src/mcp/client.js +130 -0
- package/dist/src/mcp/client.js.map +1 -0
- package/dist/src/output.d.ts +8 -0
- package/dist/src/output.js +2 -0
- package/dist/src/output.js.map +1 -0
- package/dist/src/resolve.d.ts +16 -0
- package/dist/src/resolve.js +48 -0
- package/dist/src/resolve.js.map +1 -0
- package/dist/src/scopes.d.ts +9 -0
- package/dist/src/scopes.js +16 -0
- package/dist/src/scopes.js.map +1 -0
- package/dist/src/session.d.ts +40 -0
- package/dist/src/session.js +75 -0
- package/dist/src/session.js.map +1 -0
- package/dist/src/skill.d.ts +32 -0
- package/dist/src/skill.js +149 -0
- package/dist/src/skill.js.map +1 -0
- package/dist/src/version.d.ts +5 -0
- package/dist/src/version.js +6 -0
- package/dist/src/version.js.map +1 -0
- package/package.json +70 -0
- package/skills/implto-tos-delivery/SKILL.md +45 -0
- package/skills/implto-tos-tasks/SKILL.md +48 -0
- package/skills/implto-tos-workspace/SKILL.md +45 -0
|
@@ -0,0 +1,344 @@
|
|
|
1
|
+
import { readFileSync } from "node:fs";
|
|
2
|
+
import { parseFlags } from "../flags.js";
|
|
3
|
+
import { openSession, requireBinding } from "../session.js";
|
|
4
|
+
import { readCredential } from "../config/credentials.js";
|
|
5
|
+
import { TosError, ambiguous } from "../errors.js";
|
|
6
|
+
import { looksLikeId } from "../resolve.js";
|
|
7
|
+
import { PROFILE_FLAGS } from "./whoami.js";
|
|
8
|
+
const COMMON = PROFILE_FLAGS;
|
|
9
|
+
export const SEARCH_FLAGS = {
|
|
10
|
+
...COMMON,
|
|
11
|
+
status: { kind: "string", description: "Only these statuses, by name", placeholder: "a,b" },
|
|
12
|
+
open: { kind: "boolean", description: "Only statuses that are not closed" },
|
|
13
|
+
mine: { kind: "boolean", description: "Only tasks assigned to you" },
|
|
14
|
+
limit: { kind: "number", description: "How many to return", example: 20, min: 1, max: 100 },
|
|
15
|
+
"all-projects": {
|
|
16
|
+
kind: "boolean",
|
|
17
|
+
description: "Search the whole workspace, not just this project",
|
|
18
|
+
},
|
|
19
|
+
};
|
|
20
|
+
export const SHOW_FLAGS = { ...COMMON };
|
|
21
|
+
export const CREATE_FLAGS = {
|
|
22
|
+
...COMMON,
|
|
23
|
+
description: { kind: "string", description: "Markdown body", placeholder: "text" },
|
|
24
|
+
"description-file": {
|
|
25
|
+
kind: "string",
|
|
26
|
+
description: "Read the body from a file, or - for stdin",
|
|
27
|
+
placeholder: "path",
|
|
28
|
+
},
|
|
29
|
+
status: {
|
|
30
|
+
kind: "string",
|
|
31
|
+
description: "Status name (default: the project's first)",
|
|
32
|
+
placeholder: "name",
|
|
33
|
+
},
|
|
34
|
+
priority: {
|
|
35
|
+
kind: "string",
|
|
36
|
+
description: "LOW, MEDIUM, HIGH or URGENT",
|
|
37
|
+
placeholder: "level",
|
|
38
|
+
example: "MEDIUM",
|
|
39
|
+
},
|
|
40
|
+
assign: {
|
|
41
|
+
kind: "string",
|
|
42
|
+
description: "me, a user id, or none",
|
|
43
|
+
placeholder: "who",
|
|
44
|
+
example: "me",
|
|
45
|
+
},
|
|
46
|
+
type: { kind: "string", description: "Issue type name", placeholder: "name" },
|
|
47
|
+
due: { kind: "string", description: "Due date, YYYY-MM-DD", placeholder: "date" },
|
|
48
|
+
};
|
|
49
|
+
export const UPDATE_FLAGS = {
|
|
50
|
+
...CREATE_FLAGS,
|
|
51
|
+
title: { kind: "string", description: "New title", placeholder: "text" },
|
|
52
|
+
};
|
|
53
|
+
export const COMMENT_FLAGS = { ...COMMON };
|
|
54
|
+
/** Statuses and types of the bound project, fetched once per command. */
|
|
55
|
+
async function projectConfig(session, projectId, workspaceId) {
|
|
56
|
+
const ctx = (await session.call("get_tasks_functionality_context", {
|
|
57
|
+
workspaceId,
|
|
58
|
+
projectId,
|
|
59
|
+
}));
|
|
60
|
+
const project = (ctx.projects ?? []).find((p) => p.id === projectId);
|
|
61
|
+
return {
|
|
62
|
+
statuses: project?.statuses ?? [],
|
|
63
|
+
types: project?.issueTypes ?? [],
|
|
64
|
+
};
|
|
65
|
+
}
|
|
66
|
+
/** A status by name, case-insensitively; several matches is the caller's to fix. */
|
|
67
|
+
function statusByName(statuses, wanted) {
|
|
68
|
+
const needle = wanted.trim().toLowerCase();
|
|
69
|
+
const exact = statuses.filter((s) => s.name.toLowerCase() === needle);
|
|
70
|
+
if (exact.length === 1)
|
|
71
|
+
return exact[0];
|
|
72
|
+
const partial = statuses.filter((s) => s.name.toLowerCase().includes(needle));
|
|
73
|
+
if (partial.length === 1)
|
|
74
|
+
return partial[0];
|
|
75
|
+
if (partial.length > 1)
|
|
76
|
+
throw ambiguous(wanted, partial.map((s) => s.name));
|
|
77
|
+
throw new TosError(`No status called "${wanted}".`, "NOT_FOUND", [
|
|
78
|
+
`This project has: ${statuses.map((s) => s.name).join(", ")}`,
|
|
79
|
+
]);
|
|
80
|
+
}
|
|
81
|
+
function bodyFrom(flags) {
|
|
82
|
+
const file = flags["description-file"];
|
|
83
|
+
if (file)
|
|
84
|
+
return file === "-" ? readFileSync(0, "utf8") : readFileSync(file, "utf8");
|
|
85
|
+
return flags["description"];
|
|
86
|
+
}
|
|
87
|
+
export async function tasksCommand(argv) {
|
|
88
|
+
// A leading flag is a missing subcommand, not a subcommand named `--profile`.
|
|
89
|
+
const leads = argv[0];
|
|
90
|
+
const named = leads !== undefined && !leads.startsWith("-");
|
|
91
|
+
const sub = named ? leads : undefined;
|
|
92
|
+
const rest = named ? argv.slice(1) : argv;
|
|
93
|
+
switch (sub) {
|
|
94
|
+
case "search":
|
|
95
|
+
return search(rest);
|
|
96
|
+
case "show":
|
|
97
|
+
return show(rest);
|
|
98
|
+
case "mine":
|
|
99
|
+
return mine(rest);
|
|
100
|
+
case "create":
|
|
101
|
+
return create(rest);
|
|
102
|
+
case "update":
|
|
103
|
+
return update(rest);
|
|
104
|
+
case "comment":
|
|
105
|
+
return comment(rest);
|
|
106
|
+
default:
|
|
107
|
+
throw new TosError(sub ? `Unknown subcommand "${sub}".` : "tasks needs a subcommand.", "VALIDATION_ERROR", ["tasks search|show|mine|create|update|comment", "implto-tos-axi tasks --help"]);
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
function openSessionFor(flags) {
|
|
111
|
+
return openSession({
|
|
112
|
+
profile: flags["profile"],
|
|
113
|
+
url: flags["url"],
|
|
114
|
+
mcpUrl: flags["mcp-url"],
|
|
115
|
+
});
|
|
116
|
+
}
|
|
117
|
+
/**
|
|
118
|
+
* Who has it, in the only terms a listing needs: yours, somebody else's, or
|
|
119
|
+
* nobody's. A search returns ids rather than people, and resolving each one to
|
|
120
|
+
* an email would be a call per row for a column nothing acts on.
|
|
121
|
+
*/
|
|
122
|
+
function assigneeOf(task, meId) {
|
|
123
|
+
const holder = task.iTodayAssigneeId ?? task.clientAssigneeId ?? null;
|
|
124
|
+
if (!holder)
|
|
125
|
+
return "";
|
|
126
|
+
return meId && holder === meId ? "you" : "someone else";
|
|
127
|
+
}
|
|
128
|
+
const row = (t, meId) => ({
|
|
129
|
+
key: t.key,
|
|
130
|
+
title: t.title,
|
|
131
|
+
status: t.statusName ?? "",
|
|
132
|
+
assignee: assigneeOf(t, meId),
|
|
133
|
+
updated: t.updatedAt?.slice(0, 10) ?? "",
|
|
134
|
+
});
|
|
135
|
+
async function search(argv) {
|
|
136
|
+
const { positionals, flags } = parseFlags(argv, SEARCH_FLAGS);
|
|
137
|
+
const session = openSessionFor(flags);
|
|
138
|
+
const binding = requireBinding(session);
|
|
139
|
+
const { statuses } = await projectConfig(session, binding.projectId, binding.workspaceId);
|
|
140
|
+
let statusIds;
|
|
141
|
+
const named = flags["status"];
|
|
142
|
+
if (named) {
|
|
143
|
+
statusIds = named.split(",").map((n) => statusByName(statuses, n).id);
|
|
144
|
+
}
|
|
145
|
+
else if (flags["open"]) {
|
|
146
|
+
statusIds = statuses.filter((s) => !s.isClosed).map((s) => s.id);
|
|
147
|
+
}
|
|
148
|
+
// The id is cached at sign-in, so "is this mine" costs nothing. It is only
|
|
149
|
+
// fetched when the cache is cold, which is a machine using TOS_TOKEN.
|
|
150
|
+
let meId = readCredential(session.profile.name)?.userId ?? null;
|
|
151
|
+
if (!meId && flags["mine"]) {
|
|
152
|
+
meId = (await session.call("get_current_user")).id;
|
|
153
|
+
}
|
|
154
|
+
const assigneeId = flags["mine"] ? (meId ?? undefined) : undefined;
|
|
155
|
+
// One call per status: the tool takes a single statusId, and asking for the
|
|
156
|
+
// open ones is the common case.
|
|
157
|
+
const byName = new Map(statuses.map((s) => [s.id, s.name]));
|
|
158
|
+
const calls = (statusIds ?? [undefined]).map((statusId) => session.call("search_tasks", {
|
|
159
|
+
workspaceId: binding.workspaceId,
|
|
160
|
+
...(flags["all-projects"] ? {} : { projectId: binding.projectId }),
|
|
161
|
+
...(positionals.length > 0 ? { keywords: positionals } : {}),
|
|
162
|
+
...(statusId ? { statusId } : {}),
|
|
163
|
+
...(assigneeId ? { assigneeId } : {}),
|
|
164
|
+
limit: flags["limit"] ?? 20,
|
|
165
|
+
fields: [
|
|
166
|
+
"id",
|
|
167
|
+
"key",
|
|
168
|
+
"title",
|
|
169
|
+
"statusId",
|
|
170
|
+
"updatedAt",
|
|
171
|
+
"priority",
|
|
172
|
+
"iTodayAssigneeId",
|
|
173
|
+
"clientAssigneeId",
|
|
174
|
+
],
|
|
175
|
+
}));
|
|
176
|
+
const found = (await Promise.all(calls)).flat();
|
|
177
|
+
const tasks = found
|
|
178
|
+
.map((t) => ({ ...t, statusName: byName.get(t.statusId ?? "") ?? "" }))
|
|
179
|
+
.sort((a, b) => (b.updatedAt ?? "").localeCompare(a.updatedAt ?? ""))
|
|
180
|
+
.slice(0, flags["limit"] ?? 20);
|
|
181
|
+
return {
|
|
182
|
+
project: binding.projectKey ?? binding.projectId,
|
|
183
|
+
matched: tasks.length,
|
|
184
|
+
tasks: tasks.map((t) => row(t, meId)),
|
|
185
|
+
help: tasks.length > 0
|
|
186
|
+
? [
|
|
187
|
+
"implto-tos-axi tasks show <key>",
|
|
188
|
+
'implto-tos-axi tasks update <key> --status "In Progress"',
|
|
189
|
+
]
|
|
190
|
+
: ['implto-tos-axi tasks create "<title>" --assign me'],
|
|
191
|
+
};
|
|
192
|
+
}
|
|
193
|
+
async function mine(argv) {
|
|
194
|
+
return search([...argv, "--mine"]);
|
|
195
|
+
}
|
|
196
|
+
async function show(argv) {
|
|
197
|
+
const { positionals, flags } = parseFlags(argv, SHOW_FLAGS);
|
|
198
|
+
const key = positionals[0];
|
|
199
|
+
if (!key)
|
|
200
|
+
throw new TosError("Name the task to show.", "VALIDATION_ERROR", [
|
|
201
|
+
"implto-tos-axi tasks show TO-112",
|
|
202
|
+
]);
|
|
203
|
+
const session = openSessionFor(flags);
|
|
204
|
+
const binding = session.binding;
|
|
205
|
+
const task = (await session.call("get_task", {
|
|
206
|
+
...(looksLikeId(key) ? { issueId: key } : { key }),
|
|
207
|
+
...(binding ? { workspaceId: binding.workspaceId, projectId: binding.projectId } : {}),
|
|
208
|
+
}));
|
|
209
|
+
return {
|
|
210
|
+
key: task.key,
|
|
211
|
+
title: task.title,
|
|
212
|
+
status: task.statusName ?? "",
|
|
213
|
+
priority: task.priority ?? "",
|
|
214
|
+
assignee: task.iTodayAssignee?.email ?? task.clientAssignee?.email ?? "",
|
|
215
|
+
project: task.project ? `${task.project.key} - ${task.project.name}` : "",
|
|
216
|
+
description: task.description ?? "",
|
|
217
|
+
id: task.id,
|
|
218
|
+
help: [`implto-tos-axi tasks update ${task.key} --status "In Progress"`],
|
|
219
|
+
};
|
|
220
|
+
}
|
|
221
|
+
async function create(argv) {
|
|
222
|
+
const { positionals, flags } = parseFlags(argv, CREATE_FLAGS);
|
|
223
|
+
const title = positionals.join(" ").trim();
|
|
224
|
+
if (!title) {
|
|
225
|
+
throw new TosError("A task needs a title.", "VALIDATION_ERROR", [
|
|
226
|
+
'implto-tos-axi tasks create "Fix the import guard" --assign me',
|
|
227
|
+
]);
|
|
228
|
+
}
|
|
229
|
+
const session = openSessionFor(flags);
|
|
230
|
+
const binding = requireBinding(session);
|
|
231
|
+
const { statuses, types } = await projectConfig(session, binding.projectId, binding.workspaceId);
|
|
232
|
+
const statusName = flags["status"];
|
|
233
|
+
const status = statusName ? statusByName(statuses, statusName) : statuses[0];
|
|
234
|
+
if (!status)
|
|
235
|
+
throw new TosError("This project has no statuses to file into.", "API_ERROR");
|
|
236
|
+
const assign = (flags["assign"] ?? "me").trim();
|
|
237
|
+
const assignee = await resolveAssignee(session, assign);
|
|
238
|
+
const typeName = flags["type"];
|
|
239
|
+
const type = typeName
|
|
240
|
+
? types.find((t) => t.name.toLowerCase() === typeName.toLowerCase())
|
|
241
|
+
: undefined;
|
|
242
|
+
if (typeName && !type) {
|
|
243
|
+
throw new TosError(`No issue type called "${typeName}".`, "NOT_FOUND", [
|
|
244
|
+
`This project has: ${types.map((t) => t.name).join(", ")}`,
|
|
245
|
+
]);
|
|
246
|
+
}
|
|
247
|
+
const created = (await session.call("create_task", {
|
|
248
|
+
projectId: binding.projectId,
|
|
249
|
+
title,
|
|
250
|
+
statusId: status.id,
|
|
251
|
+
priority: (flags["priority"] ?? "MEDIUM").toUpperCase(),
|
|
252
|
+
...(bodyFrom(flags) ? { description: bodyFrom(flags) } : {}),
|
|
253
|
+
...(type ? { typeId: type.id } : {}),
|
|
254
|
+
...(flags["due"] ? { dueDate: flags["due"] } : {}),
|
|
255
|
+
...assignee,
|
|
256
|
+
}));
|
|
257
|
+
return {
|
|
258
|
+
created: created.key,
|
|
259
|
+
title: created.title,
|
|
260
|
+
status: status.name,
|
|
261
|
+
id: created.id,
|
|
262
|
+
help: [`implto-tos-axi tasks update ${created.key} --status "In Progress"`],
|
|
263
|
+
};
|
|
264
|
+
}
|
|
265
|
+
async function update(argv) {
|
|
266
|
+
const { positionals, flags } = parseFlags(argv, UPDATE_FLAGS);
|
|
267
|
+
const key = positionals[0];
|
|
268
|
+
if (!key)
|
|
269
|
+
throw new TosError("Name the task to update.", "VALIDATION_ERROR", [
|
|
270
|
+
"implto-tos-axi tasks update TO-112 --status Done",
|
|
271
|
+
]);
|
|
272
|
+
const session = openSessionFor(flags);
|
|
273
|
+
const binding = requireBinding(session);
|
|
274
|
+
const { statuses } = await projectConfig(session, binding.projectId, binding.workspaceId);
|
|
275
|
+
const task = (await session.call("get_task", {
|
|
276
|
+
...(looksLikeId(key) ? { issueId: key } : { key }),
|
|
277
|
+
workspaceId: binding.workspaceId,
|
|
278
|
+
projectId: binding.projectId,
|
|
279
|
+
}));
|
|
280
|
+
const statusName = flags["status"];
|
|
281
|
+
const assign = flags["assign"];
|
|
282
|
+
const body = bodyFrom(flags);
|
|
283
|
+
const patch = {
|
|
284
|
+
issueId: task.id,
|
|
285
|
+
...(flags["title"] ? { title: flags["title"] } : {}),
|
|
286
|
+
...(statusName ? { statusId: statusByName(statuses, statusName).id } : {}),
|
|
287
|
+
...(flags["priority"] ? { priority: String(flags["priority"]).toUpperCase() } : {}),
|
|
288
|
+
...(body !== undefined ? { description: body } : {}),
|
|
289
|
+
...(flags["due"] ? { dueDate: flags["due"] } : {}),
|
|
290
|
+
...(assign ? await resolveAssignee(session, assign) : {}),
|
|
291
|
+
};
|
|
292
|
+
if (Object.keys(patch).length === 1) {
|
|
293
|
+
throw new TosError("Nothing to change.", "VALIDATION_ERROR", [
|
|
294
|
+
"implto-tos-axi tasks update --help",
|
|
295
|
+
]);
|
|
296
|
+
}
|
|
297
|
+
const updated = (await session.call("update_task", patch));
|
|
298
|
+
const byId = new Map(statuses.map((s) => [s.id, s.name]));
|
|
299
|
+
return {
|
|
300
|
+
updated: updated.key,
|
|
301
|
+
title: updated.title,
|
|
302
|
+
status: byId.get(updated.statusId ?? "") ?? "",
|
|
303
|
+
help: [`implto-tos-axi tasks comment ${updated.key} "<what changed>"`],
|
|
304
|
+
};
|
|
305
|
+
}
|
|
306
|
+
async function comment(argv) {
|
|
307
|
+
const { positionals, flags } = parseFlags(argv, COMMENT_FLAGS);
|
|
308
|
+
const [key, ...text] = positionals;
|
|
309
|
+
if (!key)
|
|
310
|
+
throw new TosError("Name the task to comment on.", "VALIDATION_ERROR", [
|
|
311
|
+
'implto-tos-axi tasks comment TO-112 "done"',
|
|
312
|
+
]);
|
|
313
|
+
const session = openSessionFor(flags);
|
|
314
|
+
const binding = requireBinding(session);
|
|
315
|
+
const content = text.join(" ") === "-" ? readFileSync(0, "utf8") : text.join(" ");
|
|
316
|
+
if (!content.trim())
|
|
317
|
+
throw new TosError("A comment needs something in it.", "VALIDATION_ERROR");
|
|
318
|
+
const task = (await session.call("get_task", {
|
|
319
|
+
...(looksLikeId(key) ? { issueId: key } : { key }),
|
|
320
|
+
workspaceId: binding.workspaceId,
|
|
321
|
+
projectId: binding.projectId,
|
|
322
|
+
}));
|
|
323
|
+
await session.call("post_message", {
|
|
324
|
+
workspaceId: binding.workspaceId,
|
|
325
|
+
entityType: "ISSUE",
|
|
326
|
+
entityId: task.id,
|
|
327
|
+
content,
|
|
328
|
+
});
|
|
329
|
+
return { commented_on: task.key, help: [`implto-tos-axi tasks show ${task.key}`] };
|
|
330
|
+
}
|
|
331
|
+
/** `me` needs the column the person belongs in, which only the server knows. */
|
|
332
|
+
async function resolveAssignee(session, assign) {
|
|
333
|
+
if (assign === "none")
|
|
334
|
+
return { iTodayAssigneeId: null, clientAssigneeId: null };
|
|
335
|
+
if (assign === "me") {
|
|
336
|
+
const me = (await session.call("get_current_user"));
|
|
337
|
+
return { [me.assigneeField]: me.id };
|
|
338
|
+
}
|
|
339
|
+
// A bare id cannot say which column it belongs in, so it goes in the one the
|
|
340
|
+
// caller is in - which is what "assign it to a teammate" almost always means.
|
|
341
|
+
const me = (await session.call("get_current_user"));
|
|
342
|
+
return { [me.assigneeField]: assign };
|
|
343
|
+
}
|
|
344
|
+
//# sourceMappingURL=tasks.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tasks.js","sourceRoot":"","sources":["../../../src/commands/tasks.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
import { type FlagSpecs } from "../flags.js";
|
|
2
|
+
import type { DomainCatalog, McpTool, SchemaProperty } from "../mcp/client.js";
|
|
3
|
+
import type { AxiRenderable } from "../output.js";
|
|
4
|
+
/**
|
|
5
|
+
* The whole MCP server, reachable without mounting it.
|
|
6
|
+
*
|
|
7
|
+
* The first-class commands cover the two things a coding agent does every day.
|
|
8
|
+
* This is everything else: the areas the server groups its tools into, the
|
|
9
|
+
* tools inside one area, one tool's arguments, and a way to call it. An agent
|
|
10
|
+
* pays for exactly the schema it asks for, one tool at a time, instead of
|
|
11
|
+
* carrying fifty of them into every request - which is the trade the whole
|
|
12
|
+
* package exists to make.
|
|
13
|
+
*
|
|
14
|
+
* It is a general escape hatch on purpose. A tool added to the server on a
|
|
15
|
+
* Tuesday is callable from here on the Tuesday, with no release of this CLI.
|
|
16
|
+
*/
|
|
17
|
+
/**
|
|
18
|
+
* Which area each tool belongs to, from the catalog.
|
|
19
|
+
*
|
|
20
|
+
* The server does put it on every tool as `annotations.domain`, but the MCP
|
|
21
|
+
* SDK parses annotations against its own schema and drops the keys it does not
|
|
22
|
+
* know, so by the time a tool reaches this process the domain is gone. The
|
|
23
|
+
* catalog lists the tool names of each domain and is the published contract
|
|
24
|
+
* for the grouping anyway, so it is read from there instead.
|
|
25
|
+
*/
|
|
26
|
+
export declare function grouping(catalog: DomainCatalog | null): Map<string, string>;
|
|
27
|
+
/** The area a tool belongs to, according to the catalog. */
|
|
28
|
+
export declare const domainOf: (tool: McpTool, byTool: Map<string, string>) => string | undefined;
|
|
29
|
+
export declare const DOMAINS_FLAGS: FlagSpecs;
|
|
30
|
+
export declare const LIST_FLAGS: FlagSpecs;
|
|
31
|
+
export declare const SHOW_TOOL_FLAGS: FlagSpecs;
|
|
32
|
+
export declare const CALL_FLAGS: FlagSpecs;
|
|
33
|
+
export declare function toolsCommand(argv: readonly string[]): Promise<AxiRenderable>;
|
|
34
|
+
/**
|
|
35
|
+
* The opening line of a description, for a listing.
|
|
36
|
+
*
|
|
37
|
+
* Tool descriptions are written for a model that is about to choose, so they
|
|
38
|
+
* run to a paragraph. A list of fifty of those is the payload this tool exists
|
|
39
|
+
* to avoid, so the list carries the first sentence and `show` carries the rest.
|
|
40
|
+
*/
|
|
41
|
+
export declare function summarize(description: string | undefined, limit?: number): string;
|
|
42
|
+
/** A schema type, flattened to the one word the help needs. */
|
|
43
|
+
export declare function typeOf(prop: SchemaProperty): string;
|
|
44
|
+
/** `name=value`, where the value may contain further `=` signs. */
|
|
45
|
+
export declare function parsePair(raw: string): {
|
|
46
|
+
name: string;
|
|
47
|
+
value: string;
|
|
48
|
+
};
|
|
49
|
+
/**
|
|
50
|
+
* One typed argument, from the string a shell can carry.
|
|
51
|
+
*
|
|
52
|
+
* The schema does the work, so `estimateSecs=3600` arrives as a number and
|
|
53
|
+
* `nullable` fields can be cleared with `null` - without which every write
|
|
54
|
+
* would have to go through `--json`, and the pairs would be a toy.
|
|
55
|
+
*/
|
|
56
|
+
export declare function coerceValue(name: string, raw: string, prop: SchemaProperty | undefined): unknown;
|
|
57
|
+
/**
|
|
58
|
+
* The argument object, checked against the schema before anything is sent.
|
|
59
|
+
*
|
|
60
|
+
* A misspelled argument is silently ignored by the server - the call succeeds
|
|
61
|
+
* and does not do what was asked - so it is refused here instead, with the
|
|
62
|
+
* nearest real name. That is the failure mode worth spending a round trip on.
|
|
63
|
+
*/
|
|
64
|
+
export declare function buildArgs(tool: McpTool, pairs: readonly string[], base?: Record<string, unknown>): Record<string, unknown>;
|
|
65
|
+
/** Required arguments still missing, once the workspace has been filled in. */
|
|
66
|
+
export declare function missingRequired(tool: McpTool, args: Record<string, unknown>): string[];
|