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,175 @@
|
|
|
1
|
+
import readline from 'node:readline';
|
|
2
|
+
import { OrbitMapClient } from '../api-client.js';
|
|
3
|
+
import { saveConfig } from '../config.js';
|
|
4
|
+
import { loadCredentials, validateProfile, profileToPath } from '../oauth.js';
|
|
5
|
+
async function prompt(question, defaultValue) {
|
|
6
|
+
const rl = readline.createInterface({ input: process.stdin, output: process.stdout });
|
|
7
|
+
return new Promise((resolve) => {
|
|
8
|
+
const suffix = defaultValue ? ` [${defaultValue}]` : '';
|
|
9
|
+
rl.question(`${question}${suffix}: `, (answer) => {
|
|
10
|
+
rl.close();
|
|
11
|
+
resolve(answer.trim() || defaultValue || '');
|
|
12
|
+
});
|
|
13
|
+
});
|
|
14
|
+
}
|
|
15
|
+
async function promptSecret(question) {
|
|
16
|
+
const rl = readline.createInterface({ input: process.stdin, output: process.stdout });
|
|
17
|
+
return new Promise((resolve) => {
|
|
18
|
+
rl.question(`${question}: `, (answer) => {
|
|
19
|
+
rl.close();
|
|
20
|
+
resolve(answer.trim());
|
|
21
|
+
});
|
|
22
|
+
// Hide input on supported terminals
|
|
23
|
+
if (process.stdin.isTTY) {
|
|
24
|
+
const origWrite = process.stdout.write.bind(process.stdout);
|
|
25
|
+
process.stdout.write = ((chunk, encodingOrCb, cb) => {
|
|
26
|
+
// Suppress echoed characters while typing the secret
|
|
27
|
+
if (typeof chunk === 'string' && chunk !== `${question}: ` && chunk !== '\n' && chunk !== '\r\n') {
|
|
28
|
+
return true;
|
|
29
|
+
}
|
|
30
|
+
if (typeof encodingOrCb === 'function') {
|
|
31
|
+
return origWrite(chunk, encodingOrCb);
|
|
32
|
+
}
|
|
33
|
+
return origWrite(chunk, encodingOrCb, cb);
|
|
34
|
+
});
|
|
35
|
+
rl.once('close', () => {
|
|
36
|
+
process.stdout.write = origWrite;
|
|
37
|
+
process.stdout.write('\n');
|
|
38
|
+
});
|
|
39
|
+
}
|
|
40
|
+
});
|
|
41
|
+
}
|
|
42
|
+
export async function initCommand(options = {}) {
|
|
43
|
+
const apiKeyInput = options.key || options.token;
|
|
44
|
+
const nonInteractive = !!apiKeyInput;
|
|
45
|
+
let profile = 'full';
|
|
46
|
+
if (options.profile) {
|
|
47
|
+
try {
|
|
48
|
+
profile = validateProfile(options.profile);
|
|
49
|
+
}
|
|
50
|
+
catch (error) {
|
|
51
|
+
console.error(error.message);
|
|
52
|
+
process.exitCode = 1;
|
|
53
|
+
return;
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
let fullApiUrl = 'https://orbitmap-main-x5n6qz.laravel.cloud/api/agent';
|
|
57
|
+
if (nonInteractive) {
|
|
58
|
+
// Non-interactive mode: --key or --token provided
|
|
59
|
+
const apiKey = apiKeyInput;
|
|
60
|
+
const projectId = options.project || '';
|
|
61
|
+
console.log('Validating credentials...');
|
|
62
|
+
const client = new OrbitMapClient(apiKey, projectId || undefined, fullApiUrl);
|
|
63
|
+
try {
|
|
64
|
+
const response = (await client.getContext(projectId || undefined));
|
|
65
|
+
await saveConfig({
|
|
66
|
+
api_url: fullApiUrl,
|
|
67
|
+
api_key: apiKey,
|
|
68
|
+
...(projectId ? { project_id: projectId } : {}),
|
|
69
|
+
});
|
|
70
|
+
const agentName = response.data.agent.name;
|
|
71
|
+
const projectName = response.data.project?.name;
|
|
72
|
+
if (projectName) {
|
|
73
|
+
console.log(`✓ Connected as ${agentName} on project ${projectName}`);
|
|
74
|
+
}
|
|
75
|
+
else {
|
|
76
|
+
console.log(`✓ Connected as ${agentName}`);
|
|
77
|
+
}
|
|
78
|
+
console.log('Configuration saved to ~/.orbitmap/config.json');
|
|
79
|
+
printMcpConfig(profile, apiKey, response.data.project?.id || projectId);
|
|
80
|
+
}
|
|
81
|
+
catch (error) {
|
|
82
|
+
if (error instanceof Error) {
|
|
83
|
+
console.error(`Validation failed: ${error.message}`);
|
|
84
|
+
}
|
|
85
|
+
else {
|
|
86
|
+
console.error('Validation failed: could not connect to API.');
|
|
87
|
+
}
|
|
88
|
+
process.exitCode = 1;
|
|
89
|
+
}
|
|
90
|
+
return;
|
|
91
|
+
}
|
|
92
|
+
// Interactive mode
|
|
93
|
+
console.log('OrbitMap CLI Setup\n');
|
|
94
|
+
if (options.advanced) {
|
|
95
|
+
const apiUrl = await prompt('API URL', 'https://orbitmap-main-x5n6qz.laravel.cloud');
|
|
96
|
+
fullApiUrl = apiUrl.replace(/\/+$/, '') + '/api/agent';
|
|
97
|
+
}
|
|
98
|
+
const apiKey = await promptSecret('Agent API Key');
|
|
99
|
+
if (!apiKey) {
|
|
100
|
+
console.error('Error: Agent API Key is required.');
|
|
101
|
+
process.exitCode = 1;
|
|
102
|
+
return;
|
|
103
|
+
}
|
|
104
|
+
const projectId = options.project || await prompt('Default Project ID (optional, press Enter to skip)');
|
|
105
|
+
console.log('\nValidating credentials...');
|
|
106
|
+
const client = new OrbitMapClient(apiKey, projectId || undefined, fullApiUrl);
|
|
107
|
+
try {
|
|
108
|
+
const response = (await client.getContext(projectId || undefined));
|
|
109
|
+
await saveConfig({
|
|
110
|
+
api_url: fullApiUrl,
|
|
111
|
+
api_key: apiKey,
|
|
112
|
+
...(projectId ? { project_id: projectId } : {}),
|
|
113
|
+
});
|
|
114
|
+
const agentName = response.data.agent.name;
|
|
115
|
+
const projectName = response.data.project?.name;
|
|
116
|
+
if (projectName) {
|
|
117
|
+
console.log(`\n✓ Connected as ${agentName} on project ${projectName}`);
|
|
118
|
+
}
|
|
119
|
+
else {
|
|
120
|
+
console.log(`\n✓ Connected as ${agentName}`);
|
|
121
|
+
}
|
|
122
|
+
console.log('Configuration saved to ~/.orbitmap/config.json');
|
|
123
|
+
printMcpConfig(profile, apiKey, response.data.project?.id || projectId);
|
|
124
|
+
}
|
|
125
|
+
catch (error) {
|
|
126
|
+
if (error instanceof Error) {
|
|
127
|
+
console.error(`\nValidation failed: ${error.message}`);
|
|
128
|
+
}
|
|
129
|
+
else {
|
|
130
|
+
console.error('\nValidation failed: could not connect to API.');
|
|
131
|
+
}
|
|
132
|
+
process.exitCode = 1;
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
// ── MCP config generation ──
|
|
136
|
+
const MCP_BASE_URL = 'https://mcp.orbitmap.ai';
|
|
137
|
+
async function printMcpConfig(profile, apiKey, projectId) {
|
|
138
|
+
const profilePath = profileToPath(profile);
|
|
139
|
+
const mcpUrl = profilePath === '/' ? MCP_BASE_URL + '/' : MCP_BASE_URL + profilePath;
|
|
140
|
+
const oauthCreds = await loadCredentials();
|
|
141
|
+
let config;
|
|
142
|
+
if (oauthCreds && !apiKey) {
|
|
143
|
+
// OAuth credentials exist and no explicit API key — clean config
|
|
144
|
+
config = {
|
|
145
|
+
type: 'http',
|
|
146
|
+
url: mcpUrl,
|
|
147
|
+
};
|
|
148
|
+
}
|
|
149
|
+
else if (apiKey) {
|
|
150
|
+
// Explicit API key — Bearer token config
|
|
151
|
+
config = {
|
|
152
|
+
type: 'http',
|
|
153
|
+
url: mcpUrl,
|
|
154
|
+
headers: {
|
|
155
|
+
Authorization: `Bearer ${apiKey}`,
|
|
156
|
+
...(projectId ? { 'X-OrbitMap-Project': projectId } : {}),
|
|
157
|
+
},
|
|
158
|
+
};
|
|
159
|
+
}
|
|
160
|
+
else if (oauthCreds) {
|
|
161
|
+
// OAuth credentials — clean config
|
|
162
|
+
config = {
|
|
163
|
+
type: 'http',
|
|
164
|
+
url: mcpUrl,
|
|
165
|
+
};
|
|
166
|
+
}
|
|
167
|
+
else {
|
|
168
|
+
return; // No credentials to generate config for
|
|
169
|
+
}
|
|
170
|
+
console.log('\n── MCP Server Config ──');
|
|
171
|
+
console.log(`Profile: ${profile} | URL: ${mcpUrl}`);
|
|
172
|
+
console.log('\nAdd this to your MCP client config (e.g. claude_desktop_config.json):\n');
|
|
173
|
+
console.log(`"orbitmap": ${JSON.stringify(config, null, 2)}`);
|
|
174
|
+
}
|
|
175
|
+
//# sourceMappingURL=init.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
export declare function issueRegisterCommand(options: {
|
|
2
|
+
json: boolean;
|
|
3
|
+
project?: string;
|
|
4
|
+
title: string;
|
|
5
|
+
description: string;
|
|
6
|
+
severity?: string;
|
|
7
|
+
relatedTask?: string;
|
|
8
|
+
}): Promise<void>;
|
|
9
|
+
export declare function issueListCommand(options: {
|
|
10
|
+
json: boolean;
|
|
11
|
+
project?: string;
|
|
12
|
+
status?: string;
|
|
13
|
+
severity?: string;
|
|
14
|
+
limit?: string;
|
|
15
|
+
}): Promise<void>;
|
|
16
|
+
export declare function issueShowCommand(idOrNumber: string, options: {
|
|
17
|
+
json: boolean;
|
|
18
|
+
project?: string;
|
|
19
|
+
}): Promise<void>;
|
|
20
|
+
export declare function issueResolveCommand(idOrNumber: string, options: {
|
|
21
|
+
json: boolean;
|
|
22
|
+
project?: string;
|
|
23
|
+
status: string;
|
|
24
|
+
resolution?: string;
|
|
25
|
+
resolvedTask?: string;
|
|
26
|
+
}): Promise<void>;
|
|
27
|
+
export declare function issueStatusCommand(idOrNumber: string, status: string, options: {
|
|
28
|
+
json: boolean;
|
|
29
|
+
project?: string;
|
|
30
|
+
resolution?: string;
|
|
31
|
+
resolvedTask?: string;
|
|
32
|
+
}): Promise<void>;
|
|
@@ -0,0 +1,206 @@
|
|
|
1
|
+
import { createClient } from '../api-client.js';
|
|
2
|
+
import { formatOutput, printError, printSuccess, formatTable } from '../output.js';
|
|
3
|
+
const VALID_SEVERITIES = ['critical', 'high', 'medium', 'low'];
|
|
4
|
+
const VALID_RESOLVE_STATUSES = ['resolved', 'wont_fix', 'duplicate'];
|
|
5
|
+
const VALID_ISSUE_STATUSES = ['open', 'investigating', 'backlog', 'resolved', 'wont_fix', 'duplicate'];
|
|
6
|
+
const RESOLVE_TYPE_STATUSES = ['resolved', 'wont_fix', 'duplicate'];
|
|
7
|
+
function isObjectNumber(id) {
|
|
8
|
+
return /^([A-Z]{2}-)?[a-z0-9]{6}$/.test(id);
|
|
9
|
+
}
|
|
10
|
+
function stripPrefix(id) {
|
|
11
|
+
return id.replace(/^[A-Z]{2}-/, '');
|
|
12
|
+
}
|
|
13
|
+
// ── Commands ──
|
|
14
|
+
export async function issueRegisterCommand(options) {
|
|
15
|
+
if (options.severity && !VALID_SEVERITIES.includes(options.severity)) {
|
|
16
|
+
const msg = `Invalid severity "${options.severity}". Valid: ${VALID_SEVERITIES.join(', ')}`;
|
|
17
|
+
if (options.json) {
|
|
18
|
+
console.error(JSON.stringify({ error: { message: msg } }));
|
|
19
|
+
}
|
|
20
|
+
else {
|
|
21
|
+
console.error(`Error: ${msg}`);
|
|
22
|
+
}
|
|
23
|
+
process.exitCode = 1;
|
|
24
|
+
return;
|
|
25
|
+
}
|
|
26
|
+
try {
|
|
27
|
+
const client = await createClient(options.project);
|
|
28
|
+
const response = (await client.registerIssue({
|
|
29
|
+
title: options.title,
|
|
30
|
+
description: options.description,
|
|
31
|
+
severity: options.severity,
|
|
32
|
+
related_task_id: options.relatedTask,
|
|
33
|
+
}));
|
|
34
|
+
if (options.json) {
|
|
35
|
+
console.log(formatOutput(response, true));
|
|
36
|
+
return;
|
|
37
|
+
}
|
|
38
|
+
printSuccess(`Created issue ${response.data.display_number ?? `IS-${response.data.issue_number}`} (${response.data.status}).`, false);
|
|
39
|
+
}
|
|
40
|
+
catch (error) {
|
|
41
|
+
printError(error, options.json);
|
|
42
|
+
process.exitCode = 1;
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
export async function issueListCommand(options) {
|
|
46
|
+
try {
|
|
47
|
+
const client = await createClient(options.project);
|
|
48
|
+
const response = (await client.listIssues({
|
|
49
|
+
status: options.status,
|
|
50
|
+
severity: options.severity,
|
|
51
|
+
limit: options.limit,
|
|
52
|
+
}));
|
|
53
|
+
if (options.json) {
|
|
54
|
+
console.log(formatOutput(response, true));
|
|
55
|
+
return;
|
|
56
|
+
}
|
|
57
|
+
const issues = response.data;
|
|
58
|
+
if (issues.length === 0) {
|
|
59
|
+
console.log('No issues found.');
|
|
60
|
+
return;
|
|
61
|
+
}
|
|
62
|
+
console.log(`Issues (${response.meta.count}):\n`);
|
|
63
|
+
console.log(formatTable(['Number', 'Title', 'Severity', 'Status', 'Created'], issues.map((i) => [
|
|
64
|
+
i.display_number ?? `IS-${i.issue_number}`,
|
|
65
|
+
i.title,
|
|
66
|
+
i.severity,
|
|
67
|
+
i.status,
|
|
68
|
+
i.created_at.replace('T', ' ').replace(/\+.*$/, ''),
|
|
69
|
+
])));
|
|
70
|
+
}
|
|
71
|
+
catch (error) {
|
|
72
|
+
printError(error, options.json);
|
|
73
|
+
process.exitCode = 1;
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
export async function issueShowCommand(idOrNumber, options) {
|
|
77
|
+
try {
|
|
78
|
+
const client = await createClient(options.project);
|
|
79
|
+
let response;
|
|
80
|
+
if (isObjectNumber(idOrNumber)) {
|
|
81
|
+
response = (await client.getIssueByNumber(stripPrefix(idOrNumber)));
|
|
82
|
+
}
|
|
83
|
+
else {
|
|
84
|
+
response = (await client.getIssue(idOrNumber));
|
|
85
|
+
}
|
|
86
|
+
if (options.json) {
|
|
87
|
+
console.log(formatOutput(response, true));
|
|
88
|
+
return;
|
|
89
|
+
}
|
|
90
|
+
const issue = response.data;
|
|
91
|
+
const displayNum = issue.display_number ?? `IS-${issue.issue_number}`;
|
|
92
|
+
console.log(`Issue: ${issue.title} [${displayNum}]`);
|
|
93
|
+
console.log(`Severity: ${issue.severity} Status: ${issue.status}`);
|
|
94
|
+
if (issue.related_task_id)
|
|
95
|
+
console.log(`Related Task: ${issue.related_task_id}`);
|
|
96
|
+
if (issue.resolved_by_task_id)
|
|
97
|
+
console.log(`Resolved By Task: ${issue.resolved_by_task_id}`);
|
|
98
|
+
console.log(`\nDescription:\n${issue.description}`);
|
|
99
|
+
if (issue.resolution) {
|
|
100
|
+
console.log(`\nResolution:\n${issue.resolution}`);
|
|
101
|
+
}
|
|
102
|
+
console.log(`\nCreated: ${issue.created_at.replace('T', ' ').replace(/\+.*$/, '')}`);
|
|
103
|
+
console.log(`Updated: ${issue.updated_at.replace('T', ' ').replace(/\+.*$/, '')}`);
|
|
104
|
+
}
|
|
105
|
+
catch (error) {
|
|
106
|
+
printError(error, options.json);
|
|
107
|
+
process.exitCode = 1;
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
export async function issueResolveCommand(idOrNumber, options) {
|
|
111
|
+
if (!VALID_RESOLVE_STATUSES.includes(options.status)) {
|
|
112
|
+
const msg = `Invalid resolve status "${options.status}". Valid: ${VALID_RESOLVE_STATUSES.join(', ')}`;
|
|
113
|
+
if (options.json) {
|
|
114
|
+
console.error(JSON.stringify({ error: { message: msg } }));
|
|
115
|
+
}
|
|
116
|
+
else {
|
|
117
|
+
console.error(`Error: ${msg}`);
|
|
118
|
+
}
|
|
119
|
+
process.exitCode = 1;
|
|
120
|
+
return;
|
|
121
|
+
}
|
|
122
|
+
if ((options.status === 'resolved' || options.status === 'wont_fix') && !options.resolution) {
|
|
123
|
+
const msg = `--resolution is required when status is "${options.status}"`;
|
|
124
|
+
if (options.json) {
|
|
125
|
+
console.error(JSON.stringify({ error: { message: msg } }));
|
|
126
|
+
}
|
|
127
|
+
else {
|
|
128
|
+
console.error(`Error: ${msg}`);
|
|
129
|
+
}
|
|
130
|
+
process.exitCode = 1;
|
|
131
|
+
return;
|
|
132
|
+
}
|
|
133
|
+
try {
|
|
134
|
+
const client = await createClient(options.project);
|
|
135
|
+
const resolveData = {
|
|
136
|
+
status: options.status,
|
|
137
|
+
resolution: options.resolution,
|
|
138
|
+
resolved_by_task_id: options.resolvedTask,
|
|
139
|
+
};
|
|
140
|
+
let response;
|
|
141
|
+
if (isObjectNumber(idOrNumber)) {
|
|
142
|
+
response = (await client.resolveIssueByNumber(stripPrefix(idOrNumber), resolveData));
|
|
143
|
+
}
|
|
144
|
+
else {
|
|
145
|
+
response = (await client.resolveIssue(idOrNumber, resolveData));
|
|
146
|
+
}
|
|
147
|
+
if (options.json) {
|
|
148
|
+
console.log(formatOutput(response, true));
|
|
149
|
+
return;
|
|
150
|
+
}
|
|
151
|
+
printSuccess(`Issue ${response.data.display_number ?? `IS-${response.data.issue_number}`} marked as ${response.data.status}.`, false);
|
|
152
|
+
}
|
|
153
|
+
catch (error) {
|
|
154
|
+
printError(error, options.json);
|
|
155
|
+
process.exitCode = 1;
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
export async function issueStatusCommand(idOrNumber, status, options) {
|
|
159
|
+
if (!VALID_ISSUE_STATUSES.includes(status)) {
|
|
160
|
+
const msg = `Invalid status "${status}". Valid: ${VALID_ISSUE_STATUSES.join(', ')}`;
|
|
161
|
+
if (options.json) {
|
|
162
|
+
console.error(JSON.stringify({ error: { message: msg } }));
|
|
163
|
+
}
|
|
164
|
+
else {
|
|
165
|
+
console.error(`Error: ${msg}`);
|
|
166
|
+
}
|
|
167
|
+
process.exitCode = 1;
|
|
168
|
+
return;
|
|
169
|
+
}
|
|
170
|
+
if (RESOLVE_TYPE_STATUSES.includes(status) && status !== 'duplicate' && !options.resolution) {
|
|
171
|
+
const msg = `--resolution is required when status is "${status}"`;
|
|
172
|
+
if (options.json) {
|
|
173
|
+
console.error(JSON.stringify({ error: { message: msg } }));
|
|
174
|
+
}
|
|
175
|
+
else {
|
|
176
|
+
console.error(`Error: ${msg}`);
|
|
177
|
+
}
|
|
178
|
+
process.exitCode = 1;
|
|
179
|
+
return;
|
|
180
|
+
}
|
|
181
|
+
try {
|
|
182
|
+
const client = await createClient(options.project);
|
|
183
|
+
const statusData = { status };
|
|
184
|
+
if (options.resolution)
|
|
185
|
+
statusData.resolution = options.resolution;
|
|
186
|
+
if (options.resolvedTask)
|
|
187
|
+
statusData.resolved_task_id = options.resolvedTask;
|
|
188
|
+
let response;
|
|
189
|
+
if (isObjectNumber(idOrNumber)) {
|
|
190
|
+
response = (await client.updateIssueStatusByNumber(stripPrefix(idOrNumber), statusData));
|
|
191
|
+
}
|
|
192
|
+
else {
|
|
193
|
+
response = (await client.updateIssueStatus(idOrNumber, statusData));
|
|
194
|
+
}
|
|
195
|
+
if (options.json) {
|
|
196
|
+
console.log(formatOutput(response, true));
|
|
197
|
+
return;
|
|
198
|
+
}
|
|
199
|
+
printSuccess(`Issue ${response.data.display_number ?? `IS-${response.data.issue_number}`} status updated to "${response.data.status}".`, false);
|
|
200
|
+
}
|
|
201
|
+
catch (error) {
|
|
202
|
+
printError(error, options.json);
|
|
203
|
+
process.exitCode = 1;
|
|
204
|
+
}
|
|
205
|
+
}
|
|
206
|
+
//# sourceMappingURL=issues.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"issues.js","sourceRoot":"","sources":["../../src/commands/issues.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
import { createClient } from '../api-client.js';
|
|
2
|
+
import { formatOutput, printError, printSuccess } from '../output.js';
|
|
3
|
+
const VALID_LOG_TYPES = ['note', 'code_change', 'decision', 'blocker', 'discovery', 'exploration', 'fix'];
|
|
4
|
+
export async function logCommand(taskId, message, options) {
|
|
5
|
+
if (!VALID_LOG_TYPES.includes(options.type)) {
|
|
6
|
+
const msg = `Invalid log type "${options.type}". Valid: ${VALID_LOG_TYPES.join(', ')}`;
|
|
7
|
+
if (options.json) {
|
|
8
|
+
console.error(JSON.stringify({ error: { message: msg } }));
|
|
9
|
+
}
|
|
10
|
+
else {
|
|
11
|
+
console.error(`Error: ${msg}`);
|
|
12
|
+
}
|
|
13
|
+
process.exitCode = 1;
|
|
14
|
+
return;
|
|
15
|
+
}
|
|
16
|
+
let metadata;
|
|
17
|
+
if (options.meta) {
|
|
18
|
+
try {
|
|
19
|
+
metadata = JSON.parse(options.meta);
|
|
20
|
+
}
|
|
21
|
+
catch {
|
|
22
|
+
const msg = 'Invalid JSON in --meta option';
|
|
23
|
+
if (options.json) {
|
|
24
|
+
console.error(JSON.stringify({ error: { message: msg } }));
|
|
25
|
+
}
|
|
26
|
+
else {
|
|
27
|
+
console.error(`Error: ${msg}`);
|
|
28
|
+
}
|
|
29
|
+
process.exitCode = 1;
|
|
30
|
+
return;
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
try {
|
|
34
|
+
const client = await createClient(options.project);
|
|
35
|
+
const response = (await client.logWork(taskId, options.type, message, metadata));
|
|
36
|
+
if (options.json) {
|
|
37
|
+
console.log(formatOutput(response, true));
|
|
38
|
+
return;
|
|
39
|
+
}
|
|
40
|
+
printSuccess(`Logged ${response.data.type} on task ${taskId}.`, false);
|
|
41
|
+
}
|
|
42
|
+
catch (error) {
|
|
43
|
+
printError(error, options.json);
|
|
44
|
+
process.exitCode = 1;
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
//# sourceMappingURL=log.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"log.js","sourceRoot":"","sources":["../../src/commands/log.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,eAAe,GAAG,CAAC,MAAM,EAAE,aAAa,EAAE,UAAU,EAAE,SAAS,EAAE,WAAW,EAAE,aAAa,EAAE,KAAK,CAAC,CAAC;AAW1G,MAAM,CAAC,KAAK,UAAU,UAAU,CAC9B,MAAc,EACd,OAAe,EACf,OAAyE;IAEzE,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;QAC5C,MAAM,GAAG,GAAG,qBAAqB,OAAO,CAAC,IAAI,aAAa,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;QACvF,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,QAA6C,CAAC;IAClD,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;QACjB,IAAI,CAAC;YACH,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QACtC,CAAC;QAAC,MAAM,CAAC;YACP,MAAM,GAAG,GAAG,+BAA+B,CAAC;YAC5C,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;gBACjB,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,EAAE,OAAO,EAAE,GAAG,EAAE,EAAE,CAAC,CAAC,CAAC;YAC7D,CAAC;iBAAM,CAAC;gBACN,OAAO,CAAC,KAAK,CAAC,UAAU,GAAG,EAAE,CAAC,CAAC;YACjC,CAAC;YACD,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;YACrB,OAAO;QACT,CAAC;IACH,CAAC;IAED,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,YAAY,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;QACnD,MAAM,QAAQ,GAAG,CAAC,MAAM,MAAM,CAAC,OAAO,CACpC,MAAM,EACN,OAAO,CAAC,IAAI,EACZ,OAAO,EACP,QAAQ,CACT,CAAgB,CAAC;QAElB,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;YACjB,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC,CAAC;YAC1C,OAAO;QACT,CAAC;QAED,YAAY,CAAC,UAAU,QAAQ,CAAC,IAAI,CAAC,IAAI,YAAY,MAAM,GAAG,EAAE,KAAK,CAAC,CAAC;IACzE,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,48 @@
|
|
|
1
|
+
import { validateProfile, generatePKCE, buildAuthorizeUrl, startCallbackServer, openBrowser, exchangeCodeForTokens, saveCredentials, } from '../oauth.js';
|
|
2
|
+
export async function loginCommand(options = {}) {
|
|
3
|
+
let profile;
|
|
4
|
+
try {
|
|
5
|
+
profile = validateProfile(options.profile || 'full');
|
|
6
|
+
}
|
|
7
|
+
catch (error) {
|
|
8
|
+
console.error(error.message);
|
|
9
|
+
process.exitCode = 1;
|
|
10
|
+
return;
|
|
11
|
+
}
|
|
12
|
+
const { codeVerifier, codeChallenge } = generatePKCE();
|
|
13
|
+
const authorizeUrl = buildAuthorizeUrl(profile, codeChallenge);
|
|
14
|
+
// Start the callback server before opening the browser
|
|
15
|
+
const codePromise = startCallbackServer();
|
|
16
|
+
console.log('Opening browser for login...');
|
|
17
|
+
openBrowser(authorizeUrl);
|
|
18
|
+
console.log('Waiting for authorization callback...\n');
|
|
19
|
+
console.log(`If the browser didn't open, visit:\n${authorizeUrl}\n`);
|
|
20
|
+
let code;
|
|
21
|
+
try {
|
|
22
|
+
code = await codePromise;
|
|
23
|
+
}
|
|
24
|
+
catch (error) {
|
|
25
|
+
console.error(`Login failed: ${error.message}`);
|
|
26
|
+
process.exitCode = 1;
|
|
27
|
+
return;
|
|
28
|
+
}
|
|
29
|
+
console.log('Authorization received. Exchanging code for tokens...');
|
|
30
|
+
try {
|
|
31
|
+
const tokens = await exchangeCodeForTokens(code, codeVerifier);
|
|
32
|
+
await saveCredentials({
|
|
33
|
+
access_token: tokens.access_token,
|
|
34
|
+
refresh_token: tokens.refresh_token,
|
|
35
|
+
expires_at: Date.now() + tokens.expires_in * 1000,
|
|
36
|
+
scope: tokens.scope || `mcp:${profile}`,
|
|
37
|
+
profile,
|
|
38
|
+
});
|
|
39
|
+
console.log(`\nLogged in successfully! Profile: ${profile}`);
|
|
40
|
+
console.log('Credentials saved to ~/.orbitmap/credentials.json');
|
|
41
|
+
console.log('\nRun `orbitmap init --profile ' + profile + '` to generate your MCP config.');
|
|
42
|
+
}
|
|
43
|
+
catch (error) {
|
|
44
|
+
console.error(`Token exchange failed: ${error.message}`);
|
|
45
|
+
process.exitCode = 1;
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
//# sourceMappingURL=login.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"login.js","sourceRoot":"","sources":["../../src/commands/login.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,eAAe,EACf,YAAY,EACZ,iBAAiB,EACjB,mBAAmB,EACnB,WAAW,EACX,qBAAqB,EACrB,eAAe,GAEhB,MAAM,aAAa,CAAC;AAErB,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,UAAgC,EAAE;IACnE,IAAI,OAAgB,CAAC;IACrB,IAAI,CAAC;QACH,OAAO,GAAG,eAAe,CAAC,OAAO,CAAC,OAAO,IAAI,MAAM,CAAC,CAAC;IACvD,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CAAE,KAAe,CAAC,OAAO,CAAC,CAAC;QACxC,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;QACrB,OAAO;IACT,CAAC;IAED,MAAM,EAAE,YAAY,EAAE,aAAa,EAAE,GAAG,YAAY,EAAE,CAAC;IACvD,MAAM,YAAY,GAAG,iBAAiB,CAAC,OAAO,EAAE,aAAa,CAAC,CAAC;IAE/D,uDAAuD;IACvD,MAAM,WAAW,GAAG,mBAAmB,EAAE,CAAC;IAE1C,OAAO,CAAC,GAAG,CAAC,8BAA8B,CAAC,CAAC;IAC5C,WAAW,CAAC,YAAY,CAAC,CAAC;IAC1B,OAAO,CAAC,GAAG,CAAC,yCAAyC,CAAC,CAAC;IACvD,OAAO,CAAC,GAAG,CAAC,uCAAuC,YAAY,IAAI,CAAC,CAAC;IAErE,IAAI,IAAY,CAAC;IACjB,IAAI,CAAC;QACH,IAAI,GAAG,MAAM,WAAW,CAAC;IAC3B,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CAAC,iBAAkB,KAAe,CAAC,OAAO,EAAE,CAAC,CAAC;QAC3D,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;QACrB,OAAO;IACT,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,uDAAuD,CAAC,CAAC;IAErE,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,qBAAqB,CAAC,IAAI,EAAE,YAAY,CAAC,CAAC;QAE/D,MAAM,eAAe,CAAC;YACpB,YAAY,EAAE,MAAM,CAAC,YAAY;YACjC,aAAa,EAAE,MAAM,CAAC,aAAa;YACnC,UAAU,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,MAAM,CAAC,UAAU,GAAG,IAAI;YACjD,KAAK,EAAE,MAAM,CAAC,KAAK,IAAI,OAAO,OAAO,EAAE;YACvC,OAAO;SACR,CAAC,CAAC;QAEH,OAAO,CAAC,GAAG,CAAC,sCAAsC,OAAO,EAAE,CAAC,CAAC;QAC7D,OAAO,CAAC,GAAG,CAAC,mDAAmD,CAAC,CAAC;QACjE,OAAO,CAAC,GAAG,CAAC,iCAAiC,GAAG,OAAO,GAAG,gCAAgC,CAAC,CAAC;IAC9F,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CAAC,0BAA2B,KAAe,CAAC,OAAO,EAAE,CAAC,CAAC;QACpE,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;IACvB,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare function logoutCommand(): Promise<void>;
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { loadCredentials, deleteCredentials, revokeToken } from '../oauth.js';
|
|
2
|
+
export async function logoutCommand() {
|
|
3
|
+
const creds = await loadCredentials();
|
|
4
|
+
if (!creds) {
|
|
5
|
+
console.log('No OAuth credentials found. Already logged out.');
|
|
6
|
+
return;
|
|
7
|
+
}
|
|
8
|
+
console.log('Revoking tokens...');
|
|
9
|
+
await revokeToken(creds.refresh_token);
|
|
10
|
+
await deleteCredentials();
|
|
11
|
+
console.log('Logged out successfully. Credentials removed.');
|
|
12
|
+
}
|
|
13
|
+
//# sourceMappingURL=logout.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"logout.js","sourceRoot":"","sources":["../../src/commands/logout.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,iBAAiB,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAE9E,MAAM,CAAC,KAAK,UAAU,aAAa;IACjC,MAAM,KAAK,GAAG,MAAM,eAAe,EAAE,CAAC;IAEtC,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,OAAO,CAAC,GAAG,CAAC,iDAAiD,CAAC,CAAC;QAC/D,OAAO;IACT,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,oBAAoB,CAAC,CAAC;IAClC,MAAM,WAAW,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC;IAEvC,MAAM,iBAAiB,EAAE,CAAC;IAC1B,OAAO,CAAC,GAAG,CAAC,+CAA+C,CAAC,CAAC;AAC/D,CAAC"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
export declare function orbitItemsCommand(orbitIdOrSlug: string, options: {
|
|
2
|
+
json: boolean;
|
|
3
|
+
project?: string;
|
|
4
|
+
type?: string;
|
|
5
|
+
}): Promise<void>;
|
|
6
|
+
export declare function orbitAttachCommand(orbitIdOrSlug: string, options: {
|
|
7
|
+
json: boolean;
|
|
8
|
+
project?: string;
|
|
9
|
+
type: string;
|
|
10
|
+
id: string;
|
|
11
|
+
note?: string;
|
|
12
|
+
}): Promise<void>;
|
|
13
|
+
export declare function orbitDetachCommand(orbitIdOrSlug: string, options: {
|
|
14
|
+
json: boolean;
|
|
15
|
+
project?: string;
|
|
16
|
+
type: string;
|
|
17
|
+
id: string;
|
|
18
|
+
}): Promise<void>;
|