orbitmap 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +200 -0
- package/dist/api-client.d.ts +234 -0
- package/dist/api-client.js +401 -0
- package/dist/api-client.js.map +1 -0
- package/dist/commands/agents.d.ts +3 -0
- package/dist/commands/agents.js +44 -0
- package/dist/commands/agents.js.map +1 -0
- package/dist/commands/assign.d.ts +5 -0
- package/dist/commands/assign.js +44 -0
- package/dist/commands/assign.js.map +1 -0
- package/dist/commands/context.d.ts +4 -0
- package/dist/commands/context.js +37 -0
- package/dist/commands/context.js.map +1 -0
- package/dist/commands/create.d.ts +12 -0
- package/dist/commands/create.js +54 -0
- package/dist/commands/create.js.map +1 -0
- package/dist/commands/dep.d.ts +11 -0
- package/dist/commands/dep.js +56 -0
- package/dist/commands/dep.js.map +1 -0
- package/dist/commands/doc-import.d.ts +9 -0
- package/dist/commands/doc-import.js +97 -0
- package/dist/commands/doc-import.js.map +1 -0
- package/dist/commands/doc-patch.d.ts +16 -0
- package/dist/commands/doc-patch.js +142 -0
- package/dist/commands/doc-patch.js.map +1 -0
- package/dist/commands/doc-share.d.ts +14 -0
- package/dist/commands/doc-share.js +60 -0
- package/dist/commands/doc-share.js.map +1 -0
- package/dist/commands/doc-update.d.ts +6 -0
- package/dist/commands/doc-update.js +64 -0
- package/dist/commands/doc-update.js.map +1 -0
- package/dist/commands/doc.d.ts +6 -0
- package/dist/commands/doc.js +108 -0
- package/dist/commands/doc.js.map +1 -0
- package/dist/commands/docs-cache.d.ts +11 -0
- package/dist/commands/docs-cache.js +119 -0
- package/dist/commands/docs-cache.js.map +1 -0
- package/dist/commands/docs.d.ts +6 -0
- package/dist/commands/docs.js +35 -0
- package/dist/commands/docs.js.map +1 -0
- package/dist/commands/get.d.ts +8 -0
- package/dist/commands/get.js +102 -0
- package/dist/commands/get.js.map +1 -0
- package/dist/commands/ideas.d.ts +23 -0
- package/dist/commands/ideas.js +155 -0
- package/dist/commands/ideas.js.map +1 -0
- package/dist/commands/init.d.ts +7 -0
- package/dist/commands/init.js +175 -0
- package/dist/commands/init.js.map +1 -0
- package/dist/commands/issues.d.ts +32 -0
- package/dist/commands/issues.js +206 -0
- package/dist/commands/issues.js.map +1 -0
- package/dist/commands/log.d.ts +6 -0
- package/dist/commands/log.js +47 -0
- package/dist/commands/log.js.map +1 -0
- package/dist/commands/login.d.ts +3 -0
- package/dist/commands/login.js +48 -0
- package/dist/commands/login.js.map +1 -0
- package/dist/commands/logout.d.ts +1 -0
- package/dist/commands/logout.js +13 -0
- package/dist/commands/logout.js.map +1 -0
- package/dist/commands/orbit.d.ts +18 -0
- package/dist/commands/orbit.js +159 -0
- package/dist/commands/orbit.js.map +1 -0
- package/dist/commands/overview.d.ts +4 -0
- package/dist/commands/overview.js +56 -0
- package/dist/commands/overview.js.map +1 -0
- package/dist/commands/projects.d.ts +3 -0
- package/dist/commands/projects.js +28 -0
- package/dist/commands/projects.js.map +1 -0
- package/dist/commands/setup-agent.d.ts +3 -0
- package/dist/commands/setup-agent.js +178 -0
- package/dist/commands/setup-agent.js.map +1 -0
- package/dist/commands/start.d.ts +4 -0
- package/dist/commands/start.js +38 -0
- package/dist/commands/start.js.map +1 -0
- package/dist/commands/status.d.ts +5 -0
- package/dist/commands/status.js +54 -0
- package/dist/commands/status.js.map +1 -0
- package/dist/commands/subtask.d.ts +7 -0
- package/dist/commands/subtask.js +26 -0
- package/dist/commands/subtask.js.map +1 -0
- package/dist/commands/task-edit-content.d.ts +7 -0
- package/dist/commands/task-edit-content.js +45 -0
- package/dist/commands/task-edit-content.js.map +1 -0
- package/dist/commands/task.d.ts +66 -0
- package/dist/commands/task.js +92 -0
- package/dist/commands/task.js.map +1 -0
- package/dist/commands/tasks.d.ts +7 -0
- package/dist/commands/tasks.js +35 -0
- package/dist/commands/tasks.js.map +1 -0
- package/dist/commands/vibes.d.ts +27 -0
- package/dist/commands/vibes.js +142 -0
- package/dist/commands/vibes.js.map +1 -0
- package/dist/config.d.ts +14 -0
- package/dist/config.js +34 -0
- package/dist/config.js.map +1 -0
- package/dist/doc-cache.d.ts +24 -0
- package/dist/doc-cache.js +116 -0
- package/dist/doc-cache.js.map +1 -0
- package/dist/errors.d.ts +16 -0
- package/dist/errors.js +26 -0
- package/dist/errors.js.map +1 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.js +705 -0
- package/dist/index.js.map +1 -0
- package/dist/oauth.d.ts +42 -0
- package/dist/oauth.js +207 -0
- package/dist/oauth.js.map +1 -0
- package/dist/output.d.ts +4 -0
- package/dist/output.js +66 -0
- package/dist/output.js.map +1 -0
- package/package.json +50 -0
|
@@ -0,0 +1,159 @@
|
|
|
1
|
+
import { createClient } from '../api-client.js';
|
|
2
|
+
import { formatOutput, printError, printSuccess, formatTable } from '../output.js';
|
|
3
|
+
// ── Types ──
|
|
4
|
+
const VALID_ITEM_TYPES = ['task', 'issue', 'vibe', 'document'];
|
|
5
|
+
// ── Commands ──
|
|
6
|
+
export async function orbitItemsCommand(orbitIdOrSlug, options) {
|
|
7
|
+
if (options.type && !VALID_ITEM_TYPES.includes(options.type)) {
|
|
8
|
+
const msg = `Invalid type "${options.type}". Valid: ${VALID_ITEM_TYPES.join(', ')}`;
|
|
9
|
+
if (options.json) {
|
|
10
|
+
console.error(JSON.stringify({ error: { message: msg } }));
|
|
11
|
+
}
|
|
12
|
+
else {
|
|
13
|
+
console.error(`Error: ${msg}`);
|
|
14
|
+
}
|
|
15
|
+
process.exitCode = 1;
|
|
16
|
+
return;
|
|
17
|
+
}
|
|
18
|
+
try {
|
|
19
|
+
const client = await createClient(options.project);
|
|
20
|
+
const response = (await client.getOrbitItems(orbitIdOrSlug, {
|
|
21
|
+
type: options.type,
|
|
22
|
+
}));
|
|
23
|
+
if (options.json) {
|
|
24
|
+
console.log(formatOutput(response, true));
|
|
25
|
+
return;
|
|
26
|
+
}
|
|
27
|
+
const { orbit, items, summary } = response.data;
|
|
28
|
+
// Orbit header
|
|
29
|
+
const counts = Object.entries(summary)
|
|
30
|
+
.filter(([, count]) => count > 0)
|
|
31
|
+
.map(([type, count]) => `${count} ${type}${count !== 1 ? 's' : ''}`)
|
|
32
|
+
.join(', ');
|
|
33
|
+
console.log(`Orbit: ${orbit.name} (${orbit.status})${counts ? ` — ${counts}` : ''}\n`);
|
|
34
|
+
if (items.length === 0) {
|
|
35
|
+
console.log('No items in this orbit.');
|
|
36
|
+
return;
|
|
37
|
+
}
|
|
38
|
+
// Group items by type
|
|
39
|
+
const grouped = new Map();
|
|
40
|
+
for (const item of items) {
|
|
41
|
+
const existing = grouped.get(item.item_type) ?? [];
|
|
42
|
+
existing.push(item.item);
|
|
43
|
+
grouped.set(item.item_type, existing);
|
|
44
|
+
}
|
|
45
|
+
// Display each group
|
|
46
|
+
if (grouped.has('task')) {
|
|
47
|
+
const tasks = grouped.get('task');
|
|
48
|
+
console.log(`Tasks (${tasks.length}):`);
|
|
49
|
+
console.log(formatTable(['ID', 'Number', 'Title', 'Status', 'Priority'], tasks.map((t) => [
|
|
50
|
+
String(t.id ?? ''),
|
|
51
|
+
String(t.display_number ?? t.task_number ?? ''),
|
|
52
|
+
String(t.title ?? ''),
|
|
53
|
+
String(t.status ?? ''),
|
|
54
|
+
String(t.priority ?? ''),
|
|
55
|
+
])));
|
|
56
|
+
console.log();
|
|
57
|
+
}
|
|
58
|
+
if (grouped.has('issue')) {
|
|
59
|
+
const issues = grouped.get('issue');
|
|
60
|
+
console.log(`Issues (${issues.length}):`);
|
|
61
|
+
console.log(formatTable(['ID', 'Number', 'Title', 'Severity', 'Status'], issues.map((i) => [
|
|
62
|
+
String(i.id ?? ''),
|
|
63
|
+
String(i.display_number ?? i.issue_number ?? ''),
|
|
64
|
+
String(i.title ?? ''),
|
|
65
|
+
String(i.severity ?? ''),
|
|
66
|
+
String(i.status ?? ''),
|
|
67
|
+
])));
|
|
68
|
+
console.log();
|
|
69
|
+
}
|
|
70
|
+
if (grouped.has('document')) {
|
|
71
|
+
const docs = grouped.get('document');
|
|
72
|
+
console.log(`Documents (${docs.length}):`);
|
|
73
|
+
console.log(formatTable(['ID', 'Slug', 'Title', 'Type'], docs.map((d) => [
|
|
74
|
+
String(d.id ?? ''),
|
|
75
|
+
String(d.slug ?? ''),
|
|
76
|
+
String(d.title ?? ''),
|
|
77
|
+
String(d.type ?? ''),
|
|
78
|
+
])));
|
|
79
|
+
console.log();
|
|
80
|
+
}
|
|
81
|
+
if (grouped.has('vibe')) {
|
|
82
|
+
const vibes = grouped.get('vibe');
|
|
83
|
+
console.log(`Vibes (${vibes.length}):`);
|
|
84
|
+
console.log(formatTable(['ID', 'Type', 'Title', 'Created'], vibes.map((v) => [
|
|
85
|
+
String(v.id ?? ''),
|
|
86
|
+
String(v.type ?? ''),
|
|
87
|
+
String(v.title ?? ''),
|
|
88
|
+
String(v.created_at ?? '').replace('T', ' ').replace(/\+.*$/, ''),
|
|
89
|
+
])));
|
|
90
|
+
console.log();
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
catch (error) {
|
|
94
|
+
printError(error, options.json);
|
|
95
|
+
process.exitCode = 1;
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
export async function orbitAttachCommand(orbitIdOrSlug, options) {
|
|
99
|
+
if (!VALID_ITEM_TYPES.includes(options.type)) {
|
|
100
|
+
const msg = `Invalid type "${options.type}". Valid: ${VALID_ITEM_TYPES.join(', ')}`;
|
|
101
|
+
if (options.json) {
|
|
102
|
+
console.error(JSON.stringify({ error: { message: msg } }));
|
|
103
|
+
}
|
|
104
|
+
else {
|
|
105
|
+
console.error(`Error: ${msg}`);
|
|
106
|
+
}
|
|
107
|
+
process.exitCode = 1;
|
|
108
|
+
return;
|
|
109
|
+
}
|
|
110
|
+
try {
|
|
111
|
+
const client = await createClient(options.project);
|
|
112
|
+
const response = (await client.orbitAttach(orbitIdOrSlug, {
|
|
113
|
+
item_type: options.type,
|
|
114
|
+
item_id: options.id,
|
|
115
|
+
note: options.note,
|
|
116
|
+
}));
|
|
117
|
+
if (options.json) {
|
|
118
|
+
console.log(formatOutput(response, true));
|
|
119
|
+
return;
|
|
120
|
+
}
|
|
121
|
+
const { orbit } = response.data;
|
|
122
|
+
printSuccess(`Attached ${options.type} ${options.id} to orbit '${orbit.name}'.`, false);
|
|
123
|
+
}
|
|
124
|
+
catch (error) {
|
|
125
|
+
printError(error, options.json);
|
|
126
|
+
process.exitCode = 1;
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
export async function orbitDetachCommand(orbitIdOrSlug, options) {
|
|
130
|
+
if (!VALID_ITEM_TYPES.includes(options.type)) {
|
|
131
|
+
const msg = `Invalid type "${options.type}". Valid: ${VALID_ITEM_TYPES.join(', ')}`;
|
|
132
|
+
if (options.json) {
|
|
133
|
+
console.error(JSON.stringify({ error: { message: msg } }));
|
|
134
|
+
}
|
|
135
|
+
else {
|
|
136
|
+
console.error(`Error: ${msg}`);
|
|
137
|
+
}
|
|
138
|
+
process.exitCode = 1;
|
|
139
|
+
return;
|
|
140
|
+
}
|
|
141
|
+
try {
|
|
142
|
+
const client = await createClient(options.project);
|
|
143
|
+
const response = (await client.orbitDetach(orbitIdOrSlug, {
|
|
144
|
+
item_type: options.type,
|
|
145
|
+
item_id: options.id,
|
|
146
|
+
}));
|
|
147
|
+
if (options.json) {
|
|
148
|
+
console.log(formatOutput(response, true));
|
|
149
|
+
return;
|
|
150
|
+
}
|
|
151
|
+
const { orbit } = response.data;
|
|
152
|
+
printSuccess(`Detached ${options.type} ${options.id} from orbit '${orbit.name}'.`, false);
|
|
153
|
+
}
|
|
154
|
+
catch (error) {
|
|
155
|
+
printError(error, options.json);
|
|
156
|
+
process.exitCode = 1;
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
//# sourceMappingURL=orbit.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"orbit.js","sourceRoot":"","sources":["../../src/commands/orbit.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
import { createClient } from '../api-client.js';
|
|
2
|
+
import { resolveAuth } from '../config.js';
|
|
3
|
+
import { formatOutput, printError } from '../output.js';
|
|
4
|
+
const UUID_RE = /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i;
|
|
5
|
+
export async function overviewCommand(projectId, options) {
|
|
6
|
+
let resolvedProjectId = projectId || options.project;
|
|
7
|
+
if (!resolvedProjectId) {
|
|
8
|
+
const auth = await resolveAuth();
|
|
9
|
+
resolvedProjectId = auth.projectId;
|
|
10
|
+
}
|
|
11
|
+
if (!resolvedProjectId) {
|
|
12
|
+
console.error('Error: Project ID is required. Use: orbitmap overview <project-id> or configure a default project.');
|
|
13
|
+
process.exitCode = 1;
|
|
14
|
+
return;
|
|
15
|
+
}
|
|
16
|
+
try {
|
|
17
|
+
const client = await createClient(options.project);
|
|
18
|
+
// Resolve slug to UUID if needed
|
|
19
|
+
let projectUuid = resolvedProjectId;
|
|
20
|
+
if (!UUID_RE.test(resolvedProjectId)) {
|
|
21
|
+
const projects = (await client.getProjects());
|
|
22
|
+
const found = projects.data.find((p) => p.slug === resolvedProjectId);
|
|
23
|
+
if (!found) {
|
|
24
|
+
console.error(`Error: Project with slug "${resolvedProjectId}" not found.`);
|
|
25
|
+
process.exitCode = 1;
|
|
26
|
+
return;
|
|
27
|
+
}
|
|
28
|
+
projectUuid = found.id;
|
|
29
|
+
}
|
|
30
|
+
const response = (await client.getProjectOverview(projectUuid));
|
|
31
|
+
if (options.json) {
|
|
32
|
+
console.log(formatOutput(response, true));
|
|
33
|
+
return;
|
|
34
|
+
}
|
|
35
|
+
const { project, task_stats: stats } = response.data;
|
|
36
|
+
console.log(`Project: ${project.name}`);
|
|
37
|
+
if (project.description)
|
|
38
|
+
console.log(`Desc: ${project.description}`);
|
|
39
|
+
if (project.git_url)
|
|
40
|
+
console.log(`Git: ${project.git_url}`);
|
|
41
|
+
console.log(`Branch: ${project.default_branch}`);
|
|
42
|
+
console.log(`\nTask Statistics (${stats.total} total):`);
|
|
43
|
+
console.log(` Backlog: ${stats.backlog}`);
|
|
44
|
+
console.log(` Todo: ${stats.todo}`);
|
|
45
|
+
console.log(` In Progress: ${stats.in_progress}`);
|
|
46
|
+
console.log(` In Review: ${stats.in_review}`);
|
|
47
|
+
console.log(` Review Changes: ${stats.review_changes}`);
|
|
48
|
+
console.log(` Done: ${stats.done}`);
|
|
49
|
+
console.log(` Blocked: ${stats.blocked}`);
|
|
50
|
+
}
|
|
51
|
+
catch (error) {
|
|
52
|
+
printError(error, options.json);
|
|
53
|
+
process.exitCode = 1;
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
//# sourceMappingURL=overview.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"overview.js","sourceRoot":"","sources":["../../src/commands/overview.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { createClient } from '../api-client.js';
|
|
2
|
+
import { formatOutput, printError, formatTable } from '../output.js';
|
|
3
|
+
export async function projectsCommand(options) {
|
|
4
|
+
try {
|
|
5
|
+
const client = await createClient();
|
|
6
|
+
const response = (await client.getProjects());
|
|
7
|
+
if (options.json) {
|
|
8
|
+
console.log(formatOutput(response, true));
|
|
9
|
+
return;
|
|
10
|
+
}
|
|
11
|
+
const projects = response.data;
|
|
12
|
+
if (projects.length === 0) {
|
|
13
|
+
console.log('No projects found.');
|
|
14
|
+
return;
|
|
15
|
+
}
|
|
16
|
+
console.log(formatTable(['Name', 'Slug', 'Role', 'Current'], projects.map((p) => [
|
|
17
|
+
p.name,
|
|
18
|
+
p.slug,
|
|
19
|
+
p.role,
|
|
20
|
+
p._current ? '*' : '',
|
|
21
|
+
])));
|
|
22
|
+
}
|
|
23
|
+
catch (error) {
|
|
24
|
+
printError(error, options.json);
|
|
25
|
+
process.exitCode = 1;
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
//# sourceMappingURL=projects.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"projects.js","sourceRoot":"","sources":["../../src/commands/projects.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAChD,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAcrE,MAAM,CAAC,KAAK,UAAU,eAAe,CAAC,OAErC;IACC,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,YAAY,EAAE,CAAC;QACpC,MAAM,QAAQ,GAAG,CAAC,MAAM,MAAM,CAAC,WAAW,EAAE,CAAqB,CAAC;QAElE,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;YACjB,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC,CAAC;YAC1C,OAAO;QACT,CAAC;QAED,MAAM,QAAQ,GAAG,QAAQ,CAAC,IAAI,CAAC;QAE/B,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC1B,OAAO,CAAC,GAAG,CAAC,oBAAoB,CAAC,CAAC;YAClC,OAAO;QACT,CAAC;QAED,OAAO,CAAC,GAAG,CACT,WAAW,CACT,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,CAAC,EACnC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;YAClB,CAAC,CAAC,IAAI;YACN,CAAC,CAAC,IAAI;YACN,CAAC,CAAC,IAAI;YACN,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE;SACtB,CAAC,CACH,CACF,CAAC;IACJ,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,UAAU,CAAC,KAAK,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC;QAChC,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;IACvB,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,178 @@
|
|
|
1
|
+
import fs from 'node:fs';
|
|
2
|
+
import path from 'node:path';
|
|
3
|
+
import readline from 'node:readline';
|
|
4
|
+
const MARKER_START = '<!-- ORBITMAP_START -->';
|
|
5
|
+
const MARKER_END = '<!-- ORBITMAP_END -->';
|
|
6
|
+
const AGENTS = {
|
|
7
|
+
claude: { label: 'Claude Code', file: 'CLAUDE.md' },
|
|
8
|
+
gemini: { label: 'Gemini CLI', file: 'GEMINI.md' },
|
|
9
|
+
codex: { label: 'GPT Codex CLI', file: 'AGENTS.md' },
|
|
10
|
+
cursor: { label: 'Cursor', file: '.cursorrules' },
|
|
11
|
+
windsurf: { label: 'Windsurf', file: '.windsurfrules' },
|
|
12
|
+
generic: { label: 'Other / Generic', file: 'AGENTS.md' },
|
|
13
|
+
};
|
|
14
|
+
const MENU_ORDER = ['claude', 'gemini', 'codex', 'cursor', 'windsurf', 'generic'];
|
|
15
|
+
// --- Instruction template (same for all agent types) ---
|
|
16
|
+
const INSTRUCTIONS_TEMPLATE = `## OrbitMap Integration
|
|
17
|
+
|
|
18
|
+
This project uses OrbitMap for task management via CLI.
|
|
19
|
+
Run \`npx orbitmap --help\` to see all available commands and options.
|
|
20
|
+
|
|
21
|
+
### Key Commands
|
|
22
|
+
- \`npx orbitmap tasks\` — list your assigned tasks
|
|
23
|
+
- \`npx orbitmap task <id>\` — view full task context
|
|
24
|
+
- \`npx orbitmap start\` — start next todo task
|
|
25
|
+
- \`npx orbitmap status <task-id> <status>\` — update task status
|
|
26
|
+
- \`npx orbitmap status <task-id> done --delivery on_branch\` — mark done with delivery status
|
|
27
|
+
- \`npx orbitmap assign <task-id> <agent-id>\` — assign task to agent
|
|
28
|
+
- \`npx orbitmap assign <task-id> --user-id <id>\` — assign task to user
|
|
29
|
+
- \`npx orbitmap log <task-id> "message" --type <type>\` — log work
|
|
30
|
+
- \`npx orbitmap docs\` — list project documents
|
|
31
|
+
- \`npx orbitmap doc <slug>\` — read a document
|
|
32
|
+
- \`npx orbitmap members <project-id>\` — list agents and users in project
|
|
33
|
+
|
|
34
|
+
### Workflow
|
|
35
|
+
1. Check for in-progress work: \`npx orbitmap tasks --status in_progress\`
|
|
36
|
+
2. Resume or start next: \`npx orbitmap start\`
|
|
37
|
+
3. Read agent_instructions from the task before implementing
|
|
38
|
+
4. If the task has a branch_name, switch to it
|
|
39
|
+
5. Log work as you go: \`npx orbitmap log <id> "what you did" --type code_change\`
|
|
40
|
+
6. When done: log summary, then \`npx orbitmap status <id> done\`
|
|
41
|
+
7. If session ends early: \`npx orbitmap log <id> "Resume point: ..." --type note\`
|
|
42
|
+
|
|
43
|
+
### Delivery Flow
|
|
44
|
+
- Default to \`in_review\` when finishing a task — let a human verify before closing.
|
|
45
|
+
- When marking a task \`done\` or \`in_review\` after committing code, set delivery status:
|
|
46
|
+
\`npx orbitmap status <id> done --delivery on_branch\`
|
|
47
|
+
- Commit messages MUST include the task number: \`[OM-{task_number}] description\`
|
|
48
|
+
Example: \`[OM-r5d8zf] Add delivery status field\`
|
|
49
|
+
- When asked what's in a branch/PR, scan commits: \`git log target..source --oneline\`,
|
|
50
|
+
parse \`[OM-xxxxx]\` tags, and report matched tasks.
|
|
51
|
+
- When the user informs you about a merge or release, update delivery status:
|
|
52
|
+
\`npx orbitmap status <id> done --delivery merged\`
|
|
53
|
+
\`npx orbitmap status <id> done --delivery released\`
|
|
54
|
+
|
|
55
|
+
### Rules
|
|
56
|
+
- One task at a time. Read agent_instructions first.
|
|
57
|
+
- Only work on subtasks assigned to you.
|
|
58
|
+
- Always log before marking done or ending session.
|
|
59
|
+
- Don't retry failed OrbitMap commands in a loop.`;
|
|
60
|
+
// --- Helpers ---
|
|
61
|
+
function prompt(question) {
|
|
62
|
+
const rl = readline.createInterface({ input: process.stdin, output: process.stdout });
|
|
63
|
+
return new Promise((resolve) => {
|
|
64
|
+
rl.question(question, (answer) => {
|
|
65
|
+
rl.close();
|
|
66
|
+
resolve(answer.trim());
|
|
67
|
+
});
|
|
68
|
+
});
|
|
69
|
+
}
|
|
70
|
+
function detectAgent() {
|
|
71
|
+
const cwd = process.cwd();
|
|
72
|
+
// Check for config files
|
|
73
|
+
if (fs.existsSync(path.join(cwd, 'CLAUDE.md')))
|
|
74
|
+
return 'claude';
|
|
75
|
+
if (fs.existsSync(path.join(cwd, 'GEMINI.md')))
|
|
76
|
+
return 'gemini';
|
|
77
|
+
if (fs.existsSync(path.join(cwd, '.cursorrules')))
|
|
78
|
+
return 'cursor';
|
|
79
|
+
if (fs.existsSync(path.join(cwd, '.windsurfrules')))
|
|
80
|
+
return 'windsurf';
|
|
81
|
+
// Check for directories
|
|
82
|
+
if (fs.existsSync(path.join(cwd, '.claude')))
|
|
83
|
+
return 'claude';
|
|
84
|
+
if (fs.existsSync(path.join(cwd, '.gemini')))
|
|
85
|
+
return 'gemini';
|
|
86
|
+
if (fs.existsSync(path.join(cwd, '.cursor')))
|
|
87
|
+
return 'cursor';
|
|
88
|
+
if (fs.existsSync(path.join(cwd, '.windsurf')))
|
|
89
|
+
return 'windsurf';
|
|
90
|
+
return null;
|
|
91
|
+
}
|
|
92
|
+
async function pickAgent() {
|
|
93
|
+
console.log('\nWhich agent are you using?');
|
|
94
|
+
for (let i = 0; i < MENU_ORDER.length; i++) {
|
|
95
|
+
const agent = MENU_ORDER[i];
|
|
96
|
+
console.log(` ${i + 1}) ${AGENTS[agent].label}`);
|
|
97
|
+
}
|
|
98
|
+
while (true) {
|
|
99
|
+
const answer = await prompt(`Select (1-${MENU_ORDER.length}): `);
|
|
100
|
+
const num = parseInt(answer, 10);
|
|
101
|
+
if (num >= 1 && num <= MENU_ORDER.length) {
|
|
102
|
+
return MENU_ORDER[num - 1];
|
|
103
|
+
}
|
|
104
|
+
console.log(`Please enter a number between 1 and ${MENU_ORDER.length}.`);
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
function buildBlock() {
|
|
108
|
+
return `${MARKER_START}\n${INSTRUCTIONS_TEMPLATE}\n${MARKER_END}`;
|
|
109
|
+
}
|
|
110
|
+
function writeInstructions(filePath) {
|
|
111
|
+
const block = buildBlock();
|
|
112
|
+
if (fs.existsSync(filePath)) {
|
|
113
|
+
const content = fs.readFileSync(filePath, 'utf-8');
|
|
114
|
+
const startIdx = content.indexOf(MARKER_START);
|
|
115
|
+
const endIdx = content.indexOf(MARKER_END);
|
|
116
|
+
if (startIdx !== -1 && endIdx !== -1) {
|
|
117
|
+
// Replace between markers
|
|
118
|
+
const before = content.slice(0, startIdx);
|
|
119
|
+
const after = content.slice(endIdx + MARKER_END.length);
|
|
120
|
+
fs.writeFileSync(filePath, before + block + after, 'utf-8');
|
|
121
|
+
return { action: 'updated' };
|
|
122
|
+
}
|
|
123
|
+
else {
|
|
124
|
+
// Append to file
|
|
125
|
+
const separator = content.endsWith('\n') ? '\n' : '\n\n';
|
|
126
|
+
fs.writeFileSync(filePath, content + separator + block + '\n', 'utf-8');
|
|
127
|
+
return { action: 'appended' };
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
else {
|
|
131
|
+
// Create new file
|
|
132
|
+
fs.writeFileSync(filePath, block + '\n', 'utf-8');
|
|
133
|
+
return { action: 'created' };
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
// --- Main command ---
|
|
137
|
+
export async function setupAgentCommand(options) {
|
|
138
|
+
let agentType;
|
|
139
|
+
if (options.agent) {
|
|
140
|
+
const key = options.agent.toLowerCase();
|
|
141
|
+
if (!(key in AGENTS)) {
|
|
142
|
+
console.error(`Error: Unknown agent type "${options.agent}". Valid types: ${Object.keys(AGENTS).join(', ')}`);
|
|
143
|
+
process.exitCode = 1;
|
|
144
|
+
return;
|
|
145
|
+
}
|
|
146
|
+
agentType = key;
|
|
147
|
+
}
|
|
148
|
+
else {
|
|
149
|
+
const detected = detectAgent();
|
|
150
|
+
if (detected) {
|
|
151
|
+
const answer = await prompt(`Detected ${AGENTS[detected].label}. Use this? (Y/n): `);
|
|
152
|
+
if (answer.toLowerCase() === 'n') {
|
|
153
|
+
agentType = await pickAgent();
|
|
154
|
+
}
|
|
155
|
+
else {
|
|
156
|
+
agentType = detected;
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
else {
|
|
160
|
+
agentType = await pickAgent();
|
|
161
|
+
}
|
|
162
|
+
}
|
|
163
|
+
const def = AGENTS[agentType];
|
|
164
|
+
const filePath = path.join(process.cwd(), def.file);
|
|
165
|
+
const { action } = writeInstructions(filePath);
|
|
166
|
+
switch (action) {
|
|
167
|
+
case 'created':
|
|
168
|
+
console.log(`Created ${def.file} with OrbitMap instructions.`);
|
|
169
|
+
break;
|
|
170
|
+
case 'updated':
|
|
171
|
+
console.log(`Updated OrbitMap instructions in ${def.file}.`);
|
|
172
|
+
break;
|
|
173
|
+
case 'appended':
|
|
174
|
+
console.log(`Appended OrbitMap instructions to ${def.file}.`);
|
|
175
|
+
break;
|
|
176
|
+
}
|
|
177
|
+
}
|
|
178
|
+
//# sourceMappingURL=setup-agent.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"setup-agent.js","sourceRoot":"","sources":["../../src/commands/setup-agent.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import { createClient } from '../api-client.js';
|
|
2
|
+
import { formatOutput, printError } from '../output.js';
|
|
3
|
+
import { printTaskDetail } from './task.js';
|
|
4
|
+
import { cleanupCache } from '../doc-cache.js';
|
|
5
|
+
export async function startCommand(taskId, options) {
|
|
6
|
+
try {
|
|
7
|
+
const client = await createClient(options.project);
|
|
8
|
+
const response = (await client.startTask(taskId));
|
|
9
|
+
if (options.json) {
|
|
10
|
+
console.log(formatOutput(response, true));
|
|
11
|
+
return;
|
|
12
|
+
}
|
|
13
|
+
if (response.data === null) {
|
|
14
|
+
console.log(response.meta?.message ?? 'No todo tasks available.');
|
|
15
|
+
return;
|
|
16
|
+
}
|
|
17
|
+
console.log('Task started!\n');
|
|
18
|
+
printTaskDetail({ data: response.data });
|
|
19
|
+
// Auto-cleanup cached docs silently
|
|
20
|
+
try {
|
|
21
|
+
const slugs = [
|
|
22
|
+
...(response.data.available_docs ?? []).map((d) => d.slug),
|
|
23
|
+
...(response.data.workspace_knowledge ?? []).map((d) => d.slug),
|
|
24
|
+
];
|
|
25
|
+
if (slugs.length > 0) {
|
|
26
|
+
cleanupCache(slugs);
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
catch {
|
|
30
|
+
// Don't block task start on cache errors
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
catch (error) {
|
|
34
|
+
printError(error, options.json);
|
|
35
|
+
process.exitCode = 1;
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
//# sourceMappingURL=start.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"start.js","sourceRoot":"","sources":["../../src/commands/start.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAChD,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AACxD,OAAO,EAAE,eAAe,EAAE,MAAM,WAAW,CAAC;AAC5C,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAY/C,MAAM,CAAC,KAAK,UAAU,YAAY,CAChC,MAA0B,EAC1B,OAA4C;IAE5C,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,YAAY,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;QACnD,MAAM,QAAQ,GAAG,CAAC,MAAM,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,CAAkB,CAAC;QAEnE,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;YACjB,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC,CAAC;YAC1C,OAAO;QACT,CAAC;QAED,IAAI,QAAQ,CAAC,IAAI,KAAK,IAAI,EAAE,CAAC;YAC3B,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,EAAE,OAAO,IAAI,0BAA0B,CAAC,CAAC;YAClE,OAAO;QACT,CAAC;QAED,OAAO,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAC;QAC/B,eAAe,CAAC,EAAE,IAAI,EAAE,QAAQ,CAAC,IAAI,EAAsD,CAAC,CAAC;QAE7F,oCAAoC;QACpC,IAAI,CAAC;YACH,MAAM,KAAK,GAAG;gBACZ,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,cAAc,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;gBAC1D,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,mBAAmB,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;aAChE,CAAC;YACF,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACrB,YAAY,CAAC,KAAK,CAAC,CAAC;YACtB,CAAC;QACH,CAAC;QAAC,MAAM,CAAC;YACP,yCAAyC;QAC3C,CAAC;IACH,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,UAAU,CAAC,KAAK,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC;QAChC,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;IACvB,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
import { createClient } from '../api-client.js';
|
|
2
|
+
import { formatOutput, printError, printSuccess } from '../output.js';
|
|
3
|
+
const VALID_STATUSES = [
|
|
4
|
+
'backlog',
|
|
5
|
+
'todo',
|
|
6
|
+
'in_progress',
|
|
7
|
+
'in_review',
|
|
8
|
+
'review_changes',
|
|
9
|
+
'done',
|
|
10
|
+
'blocked',
|
|
11
|
+
];
|
|
12
|
+
const VALID_DELIVERY_STATUSES = ['on_branch', 'merged', 'released'];
|
|
13
|
+
export async function statusCommand(taskId, status, options) {
|
|
14
|
+
if (!VALID_STATUSES.includes(status)) {
|
|
15
|
+
const msg = `Invalid status "${status}". Valid: ${VALID_STATUSES.join(', ')}`;
|
|
16
|
+
if (options.json) {
|
|
17
|
+
console.error(JSON.stringify({ error: { message: msg } }));
|
|
18
|
+
}
|
|
19
|
+
else {
|
|
20
|
+
console.error(`Error: ${msg}`);
|
|
21
|
+
}
|
|
22
|
+
process.exitCode = 1;
|
|
23
|
+
return;
|
|
24
|
+
}
|
|
25
|
+
if (options.delivery && !VALID_DELIVERY_STATUSES.includes(options.delivery)) {
|
|
26
|
+
const msg = `Invalid delivery status "${options.delivery}". Valid: ${VALID_DELIVERY_STATUSES.join(', ')}`;
|
|
27
|
+
if (options.json) {
|
|
28
|
+
console.error(JSON.stringify({ error: { message: msg } }));
|
|
29
|
+
}
|
|
30
|
+
else {
|
|
31
|
+
console.error(`Error: ${msg}`);
|
|
32
|
+
}
|
|
33
|
+
process.exitCode = 1;
|
|
34
|
+
return;
|
|
35
|
+
}
|
|
36
|
+
try {
|
|
37
|
+
const client = await createClient(options.project);
|
|
38
|
+
const response = (await client.updateTaskStatus(taskId, status, options.delivery));
|
|
39
|
+
if (options.json) {
|
|
40
|
+
console.log(formatOutput(response, true));
|
|
41
|
+
return;
|
|
42
|
+
}
|
|
43
|
+
let msg = `Status updated to "${response.data.status}".`;
|
|
44
|
+
if (response.data.delivery_status) {
|
|
45
|
+
msg += ` Delivery: ${response.data.delivery_status}.`;
|
|
46
|
+
}
|
|
47
|
+
printSuccess(msg, false);
|
|
48
|
+
}
|
|
49
|
+
catch (error) {
|
|
50
|
+
printError(error, options.json);
|
|
51
|
+
process.exitCode = 1;
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
//# sourceMappingURL=status.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"status.js","sourceRoot":"","sources":["../../src/commands/status.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAChD,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAEtE,MAAM,cAAc,GAAG;IACrB,SAAS;IACT,MAAM;IACN,aAAa;IACb,WAAW;IACX,gBAAgB;IAChB,MAAM;IACN,SAAS;CACV,CAAC;AAEF,MAAM,uBAAuB,GAAG,CAAC,WAAW,EAAE,QAAQ,EAAE,UAAU,CAAC,CAAC;AAWpE,MAAM,CAAC,KAAK,UAAU,aAAa,CACjC,MAAc,EACd,MAAc,EACd,OAA+D;IAE/D,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;QACrC,MAAM,GAAG,GAAG,mBAAmB,MAAM,aAAa,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;QAC9E,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;YACjB,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,EAAE,OAAO,EAAE,GAAG,EAAE,EAAE,CAAC,CAAC,CAAC;QAC7D,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,KAAK,CAAC,UAAU,GAAG,EAAE,CAAC,CAAC;QACjC,CAAC;QACD,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;QACrB,OAAO;IACT,CAAC;IAED,IAAI,OAAO,CAAC,QAAQ,IAAI,CAAC,uBAAuB,CAAC,QAAQ,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC5E,MAAM,GAAG,GAAG,4BAA4B,OAAO,CAAC,QAAQ,aAAa,uBAAuB,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;QAC1G,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;YACjB,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,EAAE,OAAO,EAAE,GAAG,EAAE,EAAE,CAAC,CAAC,CAAC;QAC7D,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,KAAK,CAAC,UAAU,GAAG,EAAE,CAAC,CAAC;QACjC,CAAC;QACD,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;QACrB,OAAO;IACT,CAAC;IAED,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,YAAY,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;QACnD,MAAM,QAAQ,GAAG,CAAC,MAAM,MAAM,CAAC,gBAAgB,CAC7C,MAAM,EACN,MAAM,EACN,OAAO,CAAC,QAAQ,CACjB,CAAmB,CAAC;QAErB,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;YACjB,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC,CAAC;YAC1C,OAAO;QACT,CAAC;QAED,IAAI,GAAG,GAAG,sBAAsB,QAAQ,CAAC,IAAI,CAAC,MAAM,IAAI,CAAC;QACzD,IAAI,QAAQ,CAAC,IAAI,CAAC,eAAe,EAAE,CAAC;YAClC,GAAG,IAAI,cAAc,QAAQ,CAAC,IAAI,CAAC,eAAe,GAAG,CAAC;QACxD,CAAC;QACD,YAAY,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;IAC3B,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,UAAU,CAAC,KAAK,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC;QAChC,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;IACvB,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { createClient } from '../api-client.js';
|
|
2
|
+
import { formatOutput, printError, printSuccess } from '../output.js';
|
|
3
|
+
export async function subtaskCommand(parentId, title, options) {
|
|
4
|
+
try {
|
|
5
|
+
const client = await createClient(options.project);
|
|
6
|
+
const response = (await client.createSubtasks(parentId, [
|
|
7
|
+
{
|
|
8
|
+
title,
|
|
9
|
+
description: options.desc,
|
|
10
|
+
priority: options.priority,
|
|
11
|
+
estimated_effort: options.effort,
|
|
12
|
+
},
|
|
13
|
+
]));
|
|
14
|
+
if (options.json) {
|
|
15
|
+
console.log(formatOutput(response, true));
|
|
16
|
+
return;
|
|
17
|
+
}
|
|
18
|
+
const created = response.data.created_subtasks;
|
|
19
|
+
printSuccess(`Subtask created: ${created[0].title} (${created[0].status})`, false);
|
|
20
|
+
}
|
|
21
|
+
catch (error) {
|
|
22
|
+
printError(error, options.json);
|
|
23
|
+
process.exitCode = 1;
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
//# sourceMappingURL=subtask.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"subtask.js","sourceRoot":"","sources":["../../src/commands/subtask.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAChD,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAetE,MAAM,CAAC,KAAK,UAAU,cAAc,CAClC,QAAgB,EAChB,KAAa,EACb,OAMC;IAED,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,YAAY,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;QACnD,MAAM,QAAQ,GAAG,CAAC,MAAM,MAAM,CAAC,cAAc,CAAC,QAAQ,EAAE;YACtD;gBACE,KAAK;gBACL,WAAW,EAAE,OAAO,CAAC,IAAI;gBACzB,QAAQ,EAAE,OAAO,CAAC,QAAQ;gBAC1B,gBAAgB,EAAE,OAAO,CAAC,MAAM;aACjC;SACF,CAAC,CAAoB,CAAC;QAEvB,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;YACjB,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC,CAAC;YAC1C,OAAO;QACT,CAAC;QAED,MAAM,OAAO,GAAG,QAAQ,CAAC,IAAI,CAAC,gBAAgB,CAAC;QAC/C,YAAY,CAAC,oBAAoB,OAAO,CAAC,CAAC,CAAE,CAAC,KAAK,KAAK,OAAO,CAAC,CAAC,CAAE,CAAC,MAAM,GAAG,EAAE,KAAK,CAAC,CAAC;IACvF,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,UAAU,CAAC,KAAK,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC;QAChC,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;IACvB,CAAC;AACH,CAAC"}
|