orbitmap 0.3.0 → 0.4.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/README.md +546 -212
- package/dist/adapters/cloud.d.ts +367 -0
- package/dist/adapters/cloud.js +582 -0
- package/dist/adapters/cloud.js.map +1 -0
- package/dist/adapters/factory.d.ts +15 -0
- package/dist/adapters/factory.js +31 -0
- package/dist/adapters/factory.js.map +1 -0
- package/dist/adapters/local/adapter.d.ts +351 -0
- package/dist/adapters/local/adapter.js +346 -0
- package/dist/adapters/local/adapter.js.map +1 -0
- package/dist/adapters/local/context.d.ts +112 -0
- package/dist/adapters/local/context.js +137 -0
- package/dist/adapters/local/context.js.map +1 -0
- package/dist/adapters/local/entities/documents.d.ts +85 -0
- package/dist/adapters/local/entities/documents.js +251 -0
- package/dist/adapters/local/entities/documents.js.map +1 -0
- package/dist/adapters/local/entities/planning.d.ts +108 -0
- package/dist/adapters/local/entities/planning.js +540 -0
- package/dist/adapters/local/entities/planning.js.map +1 -0
- package/dist/adapters/local/entities/tasks.d.ts +95 -0
- package/dist/adapters/local/entities/tasks.js +442 -0
- package/dist/adapters/local/entities/tasks.js.map +1 -0
- package/dist/adapters/local/entities/work-items.d.ts +110 -0
- package/dist/adapters/local/entities/work-items.js +623 -0
- package/dist/adapters/local/entities/work-items.js.map +1 -0
- package/dist/adapters/local/rules.d.ts +172 -0
- package/dist/adapters/local/rules.js +319 -0
- package/dist/adapters/local/rules.js.map +1 -0
- package/dist/adapters/local/shapes.d.ts +209 -0
- package/dist/adapters/local/shapes.js +558 -0
- package/dist/adapters/local/shapes.js.map +1 -0
- package/dist/adapters/local/store.d.ts +200 -0
- package/dist/adapters/local/store.js +665 -0
- package/dist/adapters/local/store.js.map +1 -0
- package/dist/adapters/local/types.d.ts +226 -0
- package/dist/adapters/local/types.js +41 -0
- package/dist/adapters/local/types.js.map +1 -0
- package/dist/adapters/types.d.ts +332 -0
- package/dist/adapters/types.js +2 -0
- package/dist/adapters/types.js.map +1 -0
- package/dist/agent-instructions.d.ts +25 -9
- package/dist/agent-instructions.js +285 -237
- package/dist/agent-instructions.js.map +1 -1
- package/dist/api-client.d.ts +8 -239
- package/dist/api-client.js +8 -403
- package/dist/api-client.js.map +1 -1
- package/dist/commands/agents.d.ts +1 -1
- package/dist/commands/agents.js +10 -10
- package/dist/commands/agents.js.map +1 -1
- package/dist/commands/areas.d.ts +3 -0
- package/dist/commands/areas.js +29 -0
- package/dist/commands/areas.js.map +1 -0
- package/dist/commands/assign.d.ts +3 -2
- package/dist/commands/assign.js +52 -15
- package/dist/commands/assign.js.map +1 -1
- package/dist/commands/context.d.ts +1 -1
- package/dist/commands/context.js +18 -12
- package/dist/commands/context.js.map +1 -1
- package/dist/commands/create-area.d.ts +7 -0
- package/dist/commands/create-area.js +29 -0
- package/dist/commands/create-area.js.map +1 -0
- package/dist/commands/create.d.ts +3 -1
- package/dist/commands/create.js +5 -8
- package/dist/commands/create.js.map +1 -1
- package/dist/commands/dep.d.ts +2 -2
- package/dist/commands/dep.js +3 -3
- package/dist/commands/dep.js.map +1 -1
- package/dist/commands/doc-import.d.ts +1 -1
- package/dist/commands/doc-import.js +2 -2
- package/dist/commands/doc-import.js.map +1 -1
- package/dist/commands/doc-patch.d.ts +1 -1
- package/dist/commands/doc-patch.js +2 -2
- package/dist/commands/doc-patch.js.map +1 -1
- package/dist/commands/doc-share.d.ts +6 -6
- package/dist/commands/doc-share.js +13 -13
- package/dist/commands/doc-share.js.map +1 -1
- package/dist/commands/doc-update.d.ts +1 -1
- package/dist/commands/doc-update.js +2 -2
- package/dist/commands/doc-update.js.map +1 -1
- package/dist/commands/doc.d.ts +1 -1
- package/dist/commands/doc.js +5 -4
- package/dist/commands/doc.js.map +1 -1
- package/dist/commands/docs-cache.d.ts +2 -2
- package/dist/commands/docs-cache.js +3 -3
- package/dist/commands/docs-cache.js.map +1 -1
- package/dist/commands/docs.d.ts +1 -1
- package/dist/commands/docs.js +2 -2
- package/dist/commands/docs.js.map +1 -1
- package/dist/commands/get.d.ts +1 -1
- package/dist/commands/get.js +43 -3
- package/dist/commands/get.js.map +1 -1
- package/dist/commands/ideas.d.ts +4 -4
- package/dist/commands/ideas.js +6 -11
- package/dist/commands/ideas.js.map +1 -1
- package/dist/commands/init.d.ts +45 -3
- package/dist/commands/init.js +452 -104
- package/dist/commands/init.js.map +1 -1
- package/dist/commands/intent.d.ts +41 -0
- package/dist/commands/intent.js +237 -0
- package/dist/commands/intent.js.map +1 -0
- package/dist/commands/issues.d.ts +6 -5
- package/dist/commands/issues.js +8 -12
- package/dist/commands/issues.js.map +1 -1
- package/dist/commands/log.d.ts +1 -1
- package/dist/commands/log.js +2 -2
- package/dist/commands/log.js.map +1 -1
- package/dist/commands/mission.d.ts +42 -0
- package/dist/commands/mission.js +219 -0
- package/dist/commands/mission.js.map +1 -0
- package/dist/commands/orbit.d.ts +40 -3
- package/dist/commands/orbit.js +231 -58
- package/dist/commands/orbit.js.map +1 -1
- package/dist/commands/overview.d.ts +2 -2
- package/dist/commands/overview.js +25 -28
- package/dist/commands/overview.js.map +1 -1
- package/dist/commands/setup-agent.d.ts +27 -0
- package/dist/commands/setup-agent.js +85 -30
- package/dist/commands/setup-agent.js.map +1 -1
- package/dist/commands/setup-mcp.d.ts +1 -1
- package/dist/commands/setup-mcp.js +20 -49
- package/dist/commands/setup-mcp.js.map +1 -1
- package/dist/commands/start.d.ts +1 -1
- package/dist/commands/start.js +2 -2
- package/dist/commands/start.js.map +1 -1
- package/dist/commands/status.d.ts +2 -1
- package/dist/commands/status.js +3 -3
- package/dist/commands/status.js.map +1 -1
- package/dist/commands/subtask.d.ts +1 -1
- package/dist/commands/subtask.js +2 -2
- package/dist/commands/subtask.js.map +1 -1
- package/dist/commands/task-edit-content.d.ts +1 -1
- package/dist/commands/task-edit-content.js +2 -2
- package/dist/commands/task-edit-content.js.map +1 -1
- package/dist/commands/task.d.ts +10 -3
- package/dist/commands/task.js +19 -21
- package/dist/commands/task.js.map +1 -1
- package/dist/commands/tasks.d.ts +1 -1
- package/dist/commands/tasks.js +2 -2
- package/dist/commands/tasks.js.map +1 -1
- package/dist/commands/vibes.d.ts +4 -4
- package/dist/commands/vibes.js +5 -5
- package/dist/commands/vibes.js.map +1 -1
- package/dist/config.d.ts +69 -9
- package/dist/config.js +206 -23
- package/dist/config.js.map +1 -1
- package/dist/doc-cache.d.ts +23 -3
- package/dist/doc-cache.js +72 -12
- package/dist/doc-cache.js.map +1 -1
- package/dist/errors.d.ts +19 -2
- package/dist/errors.js +35 -0
- package/dist/errors.js.map +1 -1
- package/dist/id-resolve.d.ts +61 -0
- package/dist/id-resolve.js +87 -0
- package/dist/id-resolve.js.map +1 -0
- package/dist/index.js +477 -104
- package/dist/index.js.map +1 -1
- package/dist/mcp-config.d.ts +36 -0
- package/dist/mcp-config.js +51 -0
- package/dist/mcp-config.js.map +1 -0
- package/dist/oauth.d.ts +8 -0
- package/dist/oauth.js +54 -15
- package/dist/oauth.js.map +1 -1
- package/dist/output.js +7 -2
- package/dist/output.js.map +1 -1
- package/dist/paths.d.ts +97 -0
- package/dist/paths.js +178 -0
- package/dist/paths.js.map +1 -0
- package/dist/project-config.d.ts +75 -0
- package/dist/project-config.js +55 -0
- package/dist/project-config.js.map +1 -0
- package/dist/workspace-resolve.d.ts +158 -0
- package/dist/workspace-resolve.js +284 -0
- package/dist/workspace-resolve.js.map +1 -0
- package/package.json +53 -50
package/dist/commands/init.js
CHANGED
|
@@ -1,18 +1,88 @@
|
|
|
1
1
|
import readline from 'node:readline';
|
|
2
|
+
import { mkdir, writeFile } from 'node:fs/promises';
|
|
3
|
+
import { basename, join, relative, resolve } from 'node:path';
|
|
2
4
|
import { OrbitMapClient } from '../api-client.js';
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
5
|
+
import { saveGlobalConfig, saveProjectConfig, DEFAULT_API_HOST, DEFAULT_API_URL, } from '../config.js';
|
|
6
|
+
import { ensureGitignore, gitignoreShadowsProjectConfig } from '../doc-cache.js';
|
|
7
|
+
import { loadCredentials, saveAgentProfile, validateProfile } from '../oauth.js';
|
|
8
|
+
import { buildMcpUrl, buildOrbitmapBlock, maskBlockForPrint } from '../mcp-config.js';
|
|
9
|
+
import { CREDENTIALS_FILENAME, resolveOrbitMapHome } from '../paths.js';
|
|
10
|
+
import { LocalStore, slugify } from '../adapters/local/store.js';
|
|
11
|
+
import { LINK_FILE, ORBITMAP_DIR } from '../workspace-resolve.js';
|
|
12
|
+
import { printError } from '../output.js';
|
|
13
|
+
import { AGENT_MENU_ORDER, agentConfigFile, agentLabel, agentTypeNames, detectAgent, installAgentSkills, parseAgentType, } from './setup-agent.js';
|
|
14
|
+
/**
|
|
15
|
+
* One readline interface for the whole `init` run.
|
|
16
|
+
*
|
|
17
|
+
* A fresh interface per question would swallow buffered input when stdin is piped
|
|
18
|
+
* (scripted answers), so the interface is created lazily and reused until
|
|
19
|
+
* {@link closePrompts} tears it down.
|
|
20
|
+
*/
|
|
21
|
+
let sharedRl;
|
|
22
|
+
/** Lines already delivered by the input stream but not consumed by a question yet. */
|
|
23
|
+
let bufferedLines = [];
|
|
24
|
+
/** Questions waiting for a line. */
|
|
25
|
+
let lineWaiters = [];
|
|
26
|
+
/** True once the input stream ended — every further question takes its default. */
|
|
27
|
+
let inputEnded = false;
|
|
28
|
+
function promptInterface() {
|
|
29
|
+
if (!sharedRl) {
|
|
30
|
+
inputEnded = false;
|
|
31
|
+
bufferedLines = [];
|
|
32
|
+
lineWaiters = [];
|
|
33
|
+
sharedRl = readline.createInterface({ input: process.stdin, output: process.stdout });
|
|
34
|
+
sharedRl.on('line', (line) => {
|
|
35
|
+
const waiter = lineWaiters.shift();
|
|
36
|
+
if (waiter)
|
|
37
|
+
waiter(line);
|
|
38
|
+
else
|
|
39
|
+
bufferedLines.push(line);
|
|
40
|
+
});
|
|
41
|
+
sharedRl.once('close', () => {
|
|
42
|
+
inputEnded = true;
|
|
43
|
+
sharedRl = undefined;
|
|
44
|
+
while (lineWaiters.length > 0)
|
|
45
|
+
lineWaiters.shift()?.(undefined);
|
|
12
46
|
});
|
|
47
|
+
}
|
|
48
|
+
return sharedRl;
|
|
49
|
+
}
|
|
50
|
+
function closePrompts() {
|
|
51
|
+
const rl = sharedRl;
|
|
52
|
+
sharedRl = undefined;
|
|
53
|
+
rl?.close();
|
|
54
|
+
inputEnded = false;
|
|
55
|
+
bufferedLines = [];
|
|
56
|
+
lineWaiters = [];
|
|
57
|
+
}
|
|
58
|
+
/**
|
|
59
|
+
* Ask one question and read one line.
|
|
60
|
+
*
|
|
61
|
+
* Piped stdin delivers every line in a single burst and then ends, so lines are buffered
|
|
62
|
+
* and handed out one question at a time; once the stream is exhausted the caller gets the
|
|
63
|
+
* default instead of hanging forever.
|
|
64
|
+
*/
|
|
65
|
+
async function prompt(question, defaultValue) {
|
|
66
|
+
const suffix = defaultValue ? ` [${defaultValue}]` : '';
|
|
67
|
+
const text = `${question}${suffix}: `;
|
|
68
|
+
const answer = await new Promise((resolve) => {
|
|
69
|
+
if (bufferedLines.length > 0) {
|
|
70
|
+
process.stdout.write(text);
|
|
71
|
+
resolve(bufferedLines.shift());
|
|
72
|
+
return;
|
|
73
|
+
}
|
|
74
|
+
if (inputEnded) {
|
|
75
|
+
resolve(undefined);
|
|
76
|
+
return;
|
|
77
|
+
}
|
|
78
|
+
promptInterface();
|
|
79
|
+
process.stdout.write(text);
|
|
80
|
+
lineWaiters.push(resolve);
|
|
13
81
|
});
|
|
82
|
+
return (answer ?? '').trim() || defaultValue || '';
|
|
14
83
|
}
|
|
15
84
|
async function promptSecret(question) {
|
|
85
|
+
closePrompts();
|
|
16
86
|
const rl = readline.createInterface({ input: process.stdin, output: process.stdout });
|
|
17
87
|
return new Promise((resolve) => {
|
|
18
88
|
rl.question(`${question}: `, (answer) => {
|
|
@@ -39,8 +109,84 @@ async function promptSecret(question) {
|
|
|
39
109
|
}
|
|
40
110
|
});
|
|
41
111
|
}
|
|
112
|
+
/**
|
|
113
|
+
* `orbitmap init` — the documented command pattern (try/catch → `printError`).
|
|
114
|
+
*
|
|
115
|
+
* The catch is not decorative: this command writes three files (`credentials.json`, a
|
|
116
|
+
* config file, `.gitignore`), and any of those writes can fail for ordinary reasons — a
|
|
117
|
+
* read-only `$HOME`, a `credentials.json` owned by another user, a full disk. Without it
|
|
118
|
+
* the rejection escapes to Commander as an unhandled promise rejection and the user sees a
|
|
119
|
+
* stack trace instead of an error message.
|
|
120
|
+
*/
|
|
42
121
|
export async function initCommand(options = {}) {
|
|
122
|
+
try {
|
|
123
|
+
await runInit(options);
|
|
124
|
+
}
|
|
125
|
+
catch (error) {
|
|
126
|
+
printError(error, false);
|
|
127
|
+
process.exitCode = 1;
|
|
128
|
+
}
|
|
129
|
+
finally {
|
|
130
|
+
closePrompts();
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
async function runInit(options) {
|
|
43
134
|
const apiKeyInput = options.key || options.token;
|
|
135
|
+
// Scripted cloud setup — unchanged behaviour.
|
|
136
|
+
if (apiKeyInput) {
|
|
137
|
+
await cloudInit(options, apiKeyInput);
|
|
138
|
+
return;
|
|
139
|
+
}
|
|
140
|
+
// Scripted local setup.
|
|
141
|
+
if (options.local) {
|
|
142
|
+
await localInit(options, { interactive: false });
|
|
143
|
+
return;
|
|
144
|
+
}
|
|
145
|
+
const choice = await askMode();
|
|
146
|
+
if (choice === undefined) {
|
|
147
|
+
console.error('Error: please answer 1 (cloud) or 2 (local files).');
|
|
148
|
+
process.exitCode = 1;
|
|
149
|
+
return;
|
|
150
|
+
}
|
|
151
|
+
if (choice === 'local') {
|
|
152
|
+
await localInit(options, { interactive: true });
|
|
153
|
+
return;
|
|
154
|
+
}
|
|
155
|
+
await cloudInit(options);
|
|
156
|
+
}
|
|
157
|
+
// ── Mode question (spec §5) ──────────────────────────────────────────────────
|
|
158
|
+
async function askMode() {
|
|
159
|
+
console.log('');
|
|
160
|
+
console.log(' OrbitMap — agentic project management.');
|
|
161
|
+
console.log('');
|
|
162
|
+
console.log(' How do you want to store your OrbitMap data?');
|
|
163
|
+
console.log('');
|
|
164
|
+
console.log(' [1] Orbitmap.ai account (cloud)');
|
|
165
|
+
console.log(' Data lives in your Orbitmap workspace: web UI, team collaboration,');
|
|
166
|
+
console.log(' multiple agents and people working together. Requires an account');
|
|
167
|
+
console.log(' (https://orbitmap.ai).');
|
|
168
|
+
console.log(' [2] Local files (open source, no account)');
|
|
169
|
+
console.log(' Data lives in a directory you choose, as plain Markdown files —');
|
|
170
|
+
console.log(' commit them to git if you want. Solo developer mode. You can move');
|
|
171
|
+
console.log(' to a cloud workspace later.');
|
|
172
|
+
console.log('');
|
|
173
|
+
for (let attempt = 0; attempt < 3; attempt += 1) {
|
|
174
|
+
const answer = (await prompt(' Choice [1/2]')).trim();
|
|
175
|
+
if (answer === '1')
|
|
176
|
+
return 'cloud';
|
|
177
|
+
if (answer === '2')
|
|
178
|
+
return 'local';
|
|
179
|
+
console.log(' Please enter 1 or 2.');
|
|
180
|
+
}
|
|
181
|
+
return undefined;
|
|
182
|
+
}
|
|
183
|
+
// ── Path 1: cloud ─────────────────────────────────────────────────────────────
|
|
184
|
+
//
|
|
185
|
+
// ADR 0002: the config written here now goes to `<cwd>/.orbitmap/config.json` by default
|
|
186
|
+
// (`--global` opts into the old `~/.orbitmap/config.json` target), holds no secret, and
|
|
187
|
+
// names an `agent` profile instead of embedding the key. The key itself always goes to
|
|
188
|
+
// `~/.orbitmap/credentials.json`, regardless of `--global`.
|
|
189
|
+
async function cloudInit(options, apiKeyInput) {
|
|
44
190
|
const nonInteractive = !!apiKeyInput;
|
|
45
191
|
let profile = 'full';
|
|
46
192
|
if (options.profile) {
|
|
@@ -53,123 +199,325 @@ export async function initCommand(options = {}) {
|
|
|
53
199
|
return;
|
|
54
200
|
}
|
|
55
201
|
}
|
|
56
|
-
let fullApiUrl =
|
|
202
|
+
let fullApiUrl = DEFAULT_API_URL;
|
|
203
|
+
let apiKey;
|
|
204
|
+
let area;
|
|
57
205
|
if (nonInteractive) {
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
const projectId = options.project || '';
|
|
206
|
+
apiKey = apiKeyInput;
|
|
207
|
+
area = options.area || '';
|
|
61
208
|
console.log('Validating credentials...');
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
console.log(`✓ Connected as ${agentName} on project ${projectName}`);
|
|
74
|
-
}
|
|
75
|
-
else {
|
|
76
|
-
console.log(`✓ Connected as ${agentName}`);
|
|
209
|
+
}
|
|
210
|
+
else {
|
|
211
|
+
console.log('OrbitMap CLI Setup\n');
|
|
212
|
+
if (options.advanced) {
|
|
213
|
+
const apiUrl = await prompt('API URL', DEFAULT_API_HOST);
|
|
214
|
+
fullApiUrl = apiUrl.replace(/\/+$/, '') + '/api/agent';
|
|
215
|
+
if (fullApiUrl !== DEFAULT_API_URL) {
|
|
216
|
+
console.log(`Note: ${fullApiUrl} is used to validate the key right now and is then ` +
|
|
217
|
+
'discarded — config files no longer store a custom api_url (ADR 0002). Every ' +
|
|
218
|
+
'later command will talk to ' +
|
|
219
|
+
`${DEFAULT_API_URL} unless you set ORBITMAP_API_URL in your environment.`);
|
|
77
220
|
}
|
|
78
|
-
console.log('Configuration saved to ~/.orbitmap/config.json');
|
|
79
|
-
printMcpConfig(profile, apiKey, response.data.project?.id || projectId);
|
|
80
221
|
}
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
}
|
|
85
|
-
else {
|
|
86
|
-
console.error('Validation failed: could not connect to API.');
|
|
87
|
-
}
|
|
222
|
+
apiKey = await promptSecret('Agent API Key');
|
|
223
|
+
if (!apiKey) {
|
|
224
|
+
console.error('Error: Agent API Key is required.');
|
|
88
225
|
process.exitCode = 1;
|
|
226
|
+
return;
|
|
89
227
|
}
|
|
90
|
-
|
|
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';
|
|
228
|
+
area = options.area || (await prompt('Default Area ID (optional, press Enter to skip)'));
|
|
229
|
+
console.log('\nValidating credentials...');
|
|
97
230
|
}
|
|
98
|
-
const
|
|
99
|
-
|
|
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);
|
|
231
|
+
const client = new OrbitMapClient(apiKey, area || undefined, fullApiUrl);
|
|
232
|
+
let response;
|
|
107
233
|
try {
|
|
108
|
-
|
|
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);
|
|
234
|
+
response = (await client.getContext(area || undefined));
|
|
124
235
|
}
|
|
125
236
|
catch (error) {
|
|
237
|
+
const nl = nonInteractive ? '' : '\n';
|
|
126
238
|
if (error instanceof Error) {
|
|
127
|
-
console.error(
|
|
239
|
+
console.error(`${nl}Validation failed: ${error.message}`);
|
|
128
240
|
}
|
|
129
241
|
else {
|
|
130
|
-
console.error(
|
|
242
|
+
console.error(`${nl}Validation failed: could not connect to API.`);
|
|
131
243
|
}
|
|
132
244
|
process.exitCode = 1;
|
|
245
|
+
return;
|
|
246
|
+
}
|
|
247
|
+
const agentName = response.data.agent.name;
|
|
248
|
+
const agentSlug = slugify(agentName);
|
|
249
|
+
const resolvedArea = response.data.area?.id || area;
|
|
250
|
+
// Secret goes to credentials.json under the agent's own profile — never into a config
|
|
251
|
+
// file that might get committed.
|
|
252
|
+
await saveAgentProfile(agentSlug, { api_key: apiKey });
|
|
253
|
+
// Both save functions merge into whatever the file already holds — see `mergeIntoFile`
|
|
254
|
+
// in `config.ts`. That matters in both directions: a `--global` init must not drop
|
|
255
|
+
// another project's `workspace_path`, and a project init must not drop a `mode: "local"`
|
|
256
|
+
// (or any future field) the repository committed, which would then reach the whole team
|
|
257
|
+
// through git.
|
|
258
|
+
const configPatch = {
|
|
259
|
+
mode: 'cloud',
|
|
260
|
+
agent: agentSlug,
|
|
261
|
+
...(resolvedArea ? { area: resolvedArea } : {}),
|
|
262
|
+
};
|
|
263
|
+
let configLabel;
|
|
264
|
+
if (options.global) {
|
|
265
|
+
configLabel = await saveGlobalConfig(configPatch);
|
|
133
266
|
}
|
|
267
|
+
else {
|
|
268
|
+
const cwd = process.cwd();
|
|
269
|
+
const file = await saveProjectConfig(configPatch, cwd);
|
|
270
|
+
configLabel = relative(cwd, file) || file;
|
|
271
|
+
if (gitignoreShadowsProjectConfig(cwd)) {
|
|
272
|
+
console.log(`\nNote: .gitignore already ignores the whole ${ORBITMAP_DIR}/ directory, which also ` +
|
|
273
|
+
`hides ${configLabel}. Replace that blanket entry with the scoped ones ` +
|
|
274
|
+
`("${ORBITMAP_DIR}/docs/", "${ORBITMAP_DIR}/link.json") so this file can be committed.`);
|
|
275
|
+
}
|
|
276
|
+
}
|
|
277
|
+
const areaName = response.data.area?.name;
|
|
278
|
+
const nl = nonInteractive ? '' : '\n';
|
|
279
|
+
if (areaName) {
|
|
280
|
+
console.log(`${nl}✓ Connected as ${agentName} on area ${areaName}`);
|
|
281
|
+
}
|
|
282
|
+
else {
|
|
283
|
+
console.log(`${nl}✓ Connected as ${agentName}`);
|
|
284
|
+
}
|
|
285
|
+
console.log(`Configuration saved to ${configLabel}${options.global ? ' (--global)' : ''}`);
|
|
286
|
+
console.log(`API key saved to ${credentialsPath()} (profile "${agentSlug}")`);
|
|
287
|
+
await printMcpConfig(profile, apiKey, resolvedArea);
|
|
288
|
+
await installSkillsStep(options);
|
|
134
289
|
}
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
}
|
|
290
|
+
/** Where the API key was actually written — the real path, which
|
|
291
|
+
* `ORBITMAP_CONFIG_HOME`/`XDG_CONFIG_HOME` may have relocated. */
|
|
292
|
+
function credentialsPath() {
|
|
293
|
+
return join(resolveOrbitMapHome().dir, CREDENTIALS_FILENAME);
|
|
294
|
+
}
|
|
295
|
+
// ── Path 2: local files (spec §5) ────────────────────────────────────────────
|
|
296
|
+
const DEFAULT_WORKSPACE_DIR = `./${ORBITMAP_DIR}`;
|
|
297
|
+
async function localInit(options, { interactive }) {
|
|
298
|
+
const cwd = process.cwd();
|
|
299
|
+
const cwdName = basename(cwd) || 'orbitmap';
|
|
300
|
+
// `--global` only names a *target file* for the cloud path's `mode`/`agent`/`area`.
|
|
301
|
+
// Local mode writes no config file at all (see step 2 below), so there is nothing for the
|
|
302
|
+
// flag to redirect — say so rather than accepting it and doing nothing.
|
|
303
|
+
if (options.global) {
|
|
304
|
+
console.log('Note: --global has no effect in local mode — local setup deliberately writes no ' +
|
|
305
|
+
'config file, machine-wide or otherwise. This project is local because of its own ' +
|
|
306
|
+
`${join('.', ORBITMAP_DIR)} marker, and nothing here may change another project's mode.`);
|
|
307
|
+
}
|
|
308
|
+
let workspaceInput = options.workspace ?? '';
|
|
309
|
+
let workspaceName = options.workspaceName ?? '';
|
|
310
|
+
let areaName = options.area ?? '';
|
|
311
|
+
if (interactive) {
|
|
312
|
+
if (!workspaceInput) {
|
|
313
|
+
workspaceInput = await prompt(' Where should the workspace live?', `./${ORBITMAP_DIR}`);
|
|
314
|
+
}
|
|
315
|
+
if (!workspaceName) {
|
|
316
|
+
workspaceName = await prompt(' Workspace name', cwdName);
|
|
317
|
+
}
|
|
318
|
+
if (!areaName) {
|
|
319
|
+
areaName = await prompt(' First area (usually = this repository)', cwdName);
|
|
320
|
+
}
|
|
321
|
+
}
|
|
322
|
+
const workspaceDir = resolve(cwd, workspaceInput || DEFAULT_WORKSPACE_DIR);
|
|
323
|
+
const name = workspaceName || cwdName;
|
|
324
|
+
const area = areaName || cwdName;
|
|
325
|
+
const areaSlug = slugify(area);
|
|
326
|
+
// The in-project workspace is exactly `<cwd>/.orbitmap` — the marker the mode
|
|
327
|
+
// auto-detect and the path ladder find on their own (§3.3). Anything else counts as
|
|
328
|
+
// "outside the project" and gets a `link.json` pointer, which is the marker in that case.
|
|
329
|
+
const inProject = workspaceDir === join(cwd, ORBITMAP_DIR);
|
|
330
|
+
// 1. Scaffold (§4.1) — idempotent.
|
|
331
|
+
const store = new LocalStore(workspaceDir);
|
|
332
|
+
const workspace = await store.scaffold({ name, area: { name: area, slug: areaSlug } });
|
|
333
|
+
console.log('');
|
|
334
|
+
console.log(`Workspace "${workspace.name}" ready at ${workspaceDir}`);
|
|
335
|
+
console.log(`First area: ${area} (${areaSlug})`);
|
|
336
|
+
// 2. Global config: untouched, on purpose (ADR 0002, supersedes spec §5 step 2's
|
|
337
|
+
// "first-run convenience"). Nothing here may change another project's mode or area —
|
|
338
|
+
// this project is local because of its own `.orbitmap/` marker (step 1 below, or the
|
|
339
|
+
// `link.json` of step 3), never because of a global field. A previous version of this
|
|
340
|
+
// command filled the global `area` on a first run when it was still empty; that is
|
|
341
|
+
// exactly the bug ADR 0002 fixes (a local `init` in one repo silently became the
|
|
342
|
+
// fallback area for every *other*, unrelated cloud project on the machine) — removed.
|
|
343
|
+
// 3. Project pointer / gitignore.
|
|
344
|
+
if (inProject) {
|
|
345
|
+
console.log('');
|
|
346
|
+
console.log(`Note: ${join('.', ORBITMAP_DIR)} was NOT added to .gitignore — the workspace lives`);
|
|
347
|
+
console.log('inside this project and its Markdown files are meant to be committed,');
|
|
348
|
+
console.log('so your task history travels with the repository.');
|
|
166
349
|
}
|
|
167
350
|
else {
|
|
168
|
-
|
|
351
|
+
const linkDir = join(cwd, ORBITMAP_DIR);
|
|
352
|
+
const linkFile = join(linkDir, LINK_FILE);
|
|
353
|
+
await mkdir(linkDir, { recursive: true });
|
|
354
|
+
await writeFile(linkFile, JSON.stringify({ workspace: workspaceDir, area: areaSlug }, null, 2) + '\n', 'utf-8');
|
|
355
|
+
const ignored = ensureGitignore(undefined, cwd);
|
|
356
|
+
console.log(`Wrote ${relative(cwd, linkFile) || linkFile} pointing at the workspace.`);
|
|
357
|
+
if (ignored.length > 0) {
|
|
358
|
+
console.log(`Added ${ignored.join(' and ')} to .gitignore.`);
|
|
359
|
+
}
|
|
169
360
|
}
|
|
361
|
+
// 4. Skills, then the summary.
|
|
362
|
+
await installSkillsStep(options);
|
|
363
|
+
console.log('');
|
|
364
|
+
console.log('Done. OrbitMap is running in local mode.');
|
|
365
|
+
console.log(` Data lives in ${workspaceDir} (plain Markdown files)`);
|
|
366
|
+
console.log(` Active area ${areaSlug}`);
|
|
367
|
+
console.log(' Switch areas orbitmap areas → orbitmap <cmd> --area <slug>');
|
|
368
|
+
console.log(' (or set ORBITMAP_AREA, or `default_area` in workspace.yml)');
|
|
369
|
+
console.log(' See your tasks orbitmap tasks');
|
|
370
|
+
console.log(' Start working orbitmap start');
|
|
371
|
+
console.log('');
|
|
372
|
+
console.log('This choice applies to THIS project directory only — it is detected from');
|
|
373
|
+
console.log(`${join('.', ORBITMAP_DIR)} here. Other projects keep working in whatever mode they`);
|
|
374
|
+
console.log('already use (cloud projects stay on their cloud configuration).');
|
|
375
|
+
}
|
|
376
|
+
// ── Step 3 (both modes): install the agent skills ────────────────────────────
|
|
377
|
+
/**
|
|
378
|
+
* Install the OrbitMap agent skills as part of `init` — not as an optional extra.
|
|
379
|
+
*
|
|
380
|
+
* The CLI on its own does not explain itself: the workflow (context resolution, the
|
|
381
|
+
* command set, the golden rules) lives in the skills, exactly as it lives in the MCP
|
|
382
|
+
* server's instructions. An `init` that finishes without them leaves the agent knowing
|
|
383
|
+
* that OrbitMap exists and nothing about how to use it.
|
|
384
|
+
*
|
|
385
|
+
* This step therefore does **not** require a pre-existing agent config. It used to call
|
|
386
|
+
* {@link detectAgent} and give up when nothing was found, which skipped the skills
|
|
387
|
+
* precisely where they were most needed — an empty directory, a fresh project, an
|
|
388
|
+
* umbrella root, CI — and made `orbitmap setup-agent` an undocumented second mandatory
|
|
389
|
+
* step. Detection is now only a way to *guess the default*; creating `CLAUDE.md` /
|
|
390
|
+
* `AGENTS.md` from nothing is a legitimate outcome (`writeBlock` has always had a
|
|
391
|
+
* "created" path).
|
|
392
|
+
*
|
|
393
|
+
* The agent type is resolved in this order:
|
|
394
|
+
* 1. `--agent <type>` — explicit, never overridden, works with no TTY and no files.
|
|
395
|
+
* 2. {@link detectAgent} — an existing `CLAUDE.md`/`.claude`/… in the current directory.
|
|
396
|
+
* 3. Interactive: ask, with "skip" as an offered answer.
|
|
397
|
+
* 4. Non-interactive with nothing to go on: skip, and say how to fix it.
|
|
398
|
+
*
|
|
399
|
+
* Rule 4 is deliberately a skip rather than a default. A scripted run has given the CLI
|
|
400
|
+
* no signal at all about which agent (if any) works in this directory, and the failure
|
|
401
|
+
* modes are asymmetric: a wrong guess writes an unwanted `CLAUDE.md` into a repository
|
|
402
|
+
* that a CI job may well commit, while a skip costs one documented flag. `--agent` makes
|
|
403
|
+
* the complete install available to scripts in the same single command, which is the
|
|
404
|
+
* point of the change; guessing is not needed for that.
|
|
405
|
+
*
|
|
406
|
+
* Nothing here prompts unless stdin is a TTY, so a scripted run can never block.
|
|
407
|
+
*/
|
|
408
|
+
async function installSkillsStep(options) {
|
|
409
|
+
if (options.skills === false)
|
|
410
|
+
return;
|
|
411
|
+
const agentType = await resolveSkillAgent(options);
|
|
412
|
+
if (!agentType)
|
|
413
|
+
return;
|
|
414
|
+
console.log('');
|
|
415
|
+
installAgentSkills(process.cwd(), agentType);
|
|
416
|
+
}
|
|
417
|
+
/** Decide which agent to install for, or `null` to install nothing. See {@link installSkillsStep}. */
|
|
418
|
+
async function resolveSkillAgent(options) {
|
|
419
|
+
// 1. Explicit flag wins outright — no detection, no question.
|
|
420
|
+
if (options.agent) {
|
|
421
|
+
const parsed = parseAgentType(options.agent);
|
|
422
|
+
if (!parsed) {
|
|
423
|
+
console.log('');
|
|
424
|
+
console.log(`Skills not installed: unknown agent type "${options.agent}". ` +
|
|
425
|
+
`Valid types: ${agentTypeNames()}.`);
|
|
426
|
+
// Setup itself succeeded — a bad value on an add-on flag must not undo the config
|
|
427
|
+
// and credentials already written, but it must not pass unnoticed either.
|
|
428
|
+
process.exitCode = 1;
|
|
429
|
+
return null;
|
|
430
|
+
}
|
|
431
|
+
return parsed;
|
|
432
|
+
}
|
|
433
|
+
const interactive = !!process.stdin.isTTY;
|
|
434
|
+
const detected = detectAgent();
|
|
435
|
+
// 2 + 3a. Something is already here — confirm it (or take it as given when scripted).
|
|
436
|
+
if (detected) {
|
|
437
|
+
if (!interactive)
|
|
438
|
+
return detected;
|
|
439
|
+
console.log('');
|
|
440
|
+
const answer = (await prompt(`Install OrbitMap skills for ${agentLabel(detected)}? [Y/n]`))
|
|
441
|
+
.trim()
|
|
442
|
+
.toLowerCase();
|
|
443
|
+
if (answer === 'n' || answer === 'no') {
|
|
444
|
+
console.log('Skipped. Install them later with `orbitmap setup-agent`.');
|
|
445
|
+
return null;
|
|
446
|
+
}
|
|
447
|
+
return detected;
|
|
448
|
+
}
|
|
449
|
+
// 3b. Empty directory, but a human is watching: ask instead of guessing or skipping.
|
|
450
|
+
if (interactive)
|
|
451
|
+
return askSkillAgent();
|
|
452
|
+
// 4. Scripted, nothing detected, no `--agent` — say so out loud, never silently.
|
|
453
|
+
console.log('');
|
|
454
|
+
console.log('Skills not installed: no coding agent config found here and no --agent given.');
|
|
455
|
+
console.log(`Re-run with \`--agent <${agentTypeNames()}>\`, or run \`orbitmap setup-agent\`.`);
|
|
456
|
+
return null;
|
|
457
|
+
}
|
|
458
|
+
/**
|
|
459
|
+
* Ask which coding agent the skills are for when the directory carries no marker.
|
|
460
|
+
*
|
|
461
|
+
* Uses `init`'s own shared readline interface rather than `setup-agent`'s `pickAgent`:
|
|
462
|
+
* a second interface opened mid-run swallows buffered lines when stdin is piped (the
|
|
463
|
+
* whole reason {@link promptInterface} exists), and this question sits in the middle of
|
|
464
|
+
* a sequence of others.
|
|
465
|
+
*/
|
|
466
|
+
async function askSkillAgent() {
|
|
467
|
+
console.log('');
|
|
468
|
+
console.log('No coding agent config found in this directory.');
|
|
469
|
+
console.log('OrbitMap can create one — the skills are what teach your agent the workflow.');
|
|
470
|
+
console.log('');
|
|
471
|
+
console.log('Install the OrbitMap skills for:');
|
|
472
|
+
AGENT_MENU_ORDER.forEach((agent, index) => {
|
|
473
|
+
console.log(` [${index + 1}] ${agentLabel(agent)} (${agentConfigFile(agent)})`);
|
|
474
|
+
});
|
|
475
|
+
console.log(' [0] Skip — install later with `orbitmap setup-agent`');
|
|
476
|
+
console.log('');
|
|
477
|
+
for (let attempt = 0; attempt < 3; attempt += 1) {
|
|
478
|
+
// No default passed to `prompt` — it would render as a second "[1]" next to the range.
|
|
479
|
+
// Enter means "the first entry", which the header line above states explicitly.
|
|
480
|
+
const answer = (await prompt(` Choice [0-${AGENT_MENU_ORDER.length}, Enter = 1]`)).trim();
|
|
481
|
+
if (answer === '')
|
|
482
|
+
return AGENT_MENU_ORDER[0];
|
|
483
|
+
if (answer === '0' || answer.toLowerCase() === 'n') {
|
|
484
|
+
console.log(' Skipped. Install them later with `orbitmap setup-agent`.');
|
|
485
|
+
return null;
|
|
486
|
+
}
|
|
487
|
+
const num = Number.parseInt(answer, 10);
|
|
488
|
+
if (num >= 1 && num <= AGENT_MENU_ORDER.length)
|
|
489
|
+
return AGENT_MENU_ORDER[num - 1];
|
|
490
|
+
console.log(` Please enter a number between 0 and ${AGENT_MENU_ORDER.length}.`);
|
|
491
|
+
}
|
|
492
|
+
// Three unusable answers: treat it as "not now" rather than writing files on a guess.
|
|
493
|
+
console.log(' Skipped. Install them later with `orbitmap setup-agent`.');
|
|
494
|
+
return null;
|
|
495
|
+
}
|
|
496
|
+
// ── MCP config generation ──
|
|
497
|
+
/**
|
|
498
|
+
* Print the MCP server block for the user to paste into their client config.
|
|
499
|
+
*
|
|
500
|
+
* The block is **masked** ({@link maskBlockForPrint}) exactly as `setup-mcp` masks the
|
|
501
|
+
* identical value. This used to print `Authorization: Bearer <the real key>` verbatim, so
|
|
502
|
+
* `orbitmap init --key … | tee build.log`, a CI job log, or a scrollback buffer captured
|
|
503
|
+
* the secret in plain text (CLAUDE.md "Secrets": never print or log it). The user does not
|
|
504
|
+
* need it echoed back — they just supplied it, and it is on disk in `credentials.json`.
|
|
505
|
+
*/
|
|
506
|
+
async function printMcpConfig(profile, apiKey, area) {
|
|
507
|
+
const mcpUrl = buildMcpUrl(profile);
|
|
508
|
+
const oauthCreds = await loadCredentials();
|
|
509
|
+
// Without an API key and without an OAuth session there is nothing to authenticate with,
|
|
510
|
+
// so there is no config worth printing.
|
|
511
|
+
if (!apiKey && !oauthCreds)
|
|
512
|
+
return;
|
|
513
|
+
const block = buildOrbitmapBlock({ profile, token: apiKey, areaSlug: area });
|
|
170
514
|
console.log('\n── MCP Server Config ──');
|
|
171
515
|
console.log(`Profile: ${profile} | URL: ${mcpUrl}`);
|
|
172
516
|
console.log('\nAdd this to your MCP client config (e.g. claude_desktop_config.json):\n');
|
|
173
|
-
console.log(`"orbitmap": ${JSON.stringify(
|
|
517
|
+
console.log(`"orbitmap": ${JSON.stringify(maskBlockForPrint(block), null, 2)}`);
|
|
518
|
+
if (block.headers?.['Authorization']) {
|
|
519
|
+
console.log('\nThe Authorization header is masked above — substitute your agent API key ' +
|
|
520
|
+
`(also stored in ${credentialsPath()}).`);
|
|
521
|
+
}
|
|
174
522
|
}
|
|
175
523
|
//# sourceMappingURL=init.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"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"}
|