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.
Files changed (174) hide show
  1. package/README.md +546 -212
  2. package/dist/adapters/cloud.d.ts +367 -0
  3. package/dist/adapters/cloud.js +582 -0
  4. package/dist/adapters/cloud.js.map +1 -0
  5. package/dist/adapters/factory.d.ts +15 -0
  6. package/dist/adapters/factory.js +31 -0
  7. package/dist/adapters/factory.js.map +1 -0
  8. package/dist/adapters/local/adapter.d.ts +351 -0
  9. package/dist/adapters/local/adapter.js +346 -0
  10. package/dist/adapters/local/adapter.js.map +1 -0
  11. package/dist/adapters/local/context.d.ts +112 -0
  12. package/dist/adapters/local/context.js +137 -0
  13. package/dist/adapters/local/context.js.map +1 -0
  14. package/dist/adapters/local/entities/documents.d.ts +85 -0
  15. package/dist/adapters/local/entities/documents.js +251 -0
  16. package/dist/adapters/local/entities/documents.js.map +1 -0
  17. package/dist/adapters/local/entities/planning.d.ts +108 -0
  18. package/dist/adapters/local/entities/planning.js +540 -0
  19. package/dist/adapters/local/entities/planning.js.map +1 -0
  20. package/dist/adapters/local/entities/tasks.d.ts +95 -0
  21. package/dist/adapters/local/entities/tasks.js +442 -0
  22. package/dist/adapters/local/entities/tasks.js.map +1 -0
  23. package/dist/adapters/local/entities/work-items.d.ts +110 -0
  24. package/dist/adapters/local/entities/work-items.js +623 -0
  25. package/dist/adapters/local/entities/work-items.js.map +1 -0
  26. package/dist/adapters/local/rules.d.ts +172 -0
  27. package/dist/adapters/local/rules.js +319 -0
  28. package/dist/adapters/local/rules.js.map +1 -0
  29. package/dist/adapters/local/shapes.d.ts +209 -0
  30. package/dist/adapters/local/shapes.js +558 -0
  31. package/dist/adapters/local/shapes.js.map +1 -0
  32. package/dist/adapters/local/store.d.ts +200 -0
  33. package/dist/adapters/local/store.js +665 -0
  34. package/dist/adapters/local/store.js.map +1 -0
  35. package/dist/adapters/local/types.d.ts +226 -0
  36. package/dist/adapters/local/types.js +41 -0
  37. package/dist/adapters/local/types.js.map +1 -0
  38. package/dist/adapters/types.d.ts +332 -0
  39. package/dist/adapters/types.js +2 -0
  40. package/dist/adapters/types.js.map +1 -0
  41. package/dist/agent-instructions.d.ts +25 -9
  42. package/dist/agent-instructions.js +285 -237
  43. package/dist/agent-instructions.js.map +1 -1
  44. package/dist/api-client.d.ts +8 -239
  45. package/dist/api-client.js +8 -403
  46. package/dist/api-client.js.map +1 -1
  47. package/dist/commands/agents.d.ts +1 -1
  48. package/dist/commands/agents.js +10 -10
  49. package/dist/commands/agents.js.map +1 -1
  50. package/dist/commands/areas.d.ts +3 -0
  51. package/dist/commands/areas.js +29 -0
  52. package/dist/commands/areas.js.map +1 -0
  53. package/dist/commands/assign.d.ts +3 -2
  54. package/dist/commands/assign.js +52 -15
  55. package/dist/commands/assign.js.map +1 -1
  56. package/dist/commands/context.d.ts +1 -1
  57. package/dist/commands/context.js +18 -12
  58. package/dist/commands/context.js.map +1 -1
  59. package/dist/commands/create-area.d.ts +7 -0
  60. package/dist/commands/create-area.js +29 -0
  61. package/dist/commands/create-area.js.map +1 -0
  62. package/dist/commands/create.d.ts +3 -1
  63. package/dist/commands/create.js +5 -8
  64. package/dist/commands/create.js.map +1 -1
  65. package/dist/commands/dep.d.ts +2 -2
  66. package/dist/commands/dep.js +3 -3
  67. package/dist/commands/dep.js.map +1 -1
  68. package/dist/commands/doc-import.d.ts +1 -1
  69. package/dist/commands/doc-import.js +2 -2
  70. package/dist/commands/doc-import.js.map +1 -1
  71. package/dist/commands/doc-patch.d.ts +1 -1
  72. package/dist/commands/doc-patch.js +2 -2
  73. package/dist/commands/doc-patch.js.map +1 -1
  74. package/dist/commands/doc-share.d.ts +6 -6
  75. package/dist/commands/doc-share.js +13 -13
  76. package/dist/commands/doc-share.js.map +1 -1
  77. package/dist/commands/doc-update.d.ts +1 -1
  78. package/dist/commands/doc-update.js +2 -2
  79. package/dist/commands/doc-update.js.map +1 -1
  80. package/dist/commands/doc.d.ts +1 -1
  81. package/dist/commands/doc.js +5 -4
  82. package/dist/commands/doc.js.map +1 -1
  83. package/dist/commands/docs-cache.d.ts +2 -2
  84. package/dist/commands/docs-cache.js +3 -3
  85. package/dist/commands/docs-cache.js.map +1 -1
  86. package/dist/commands/docs.d.ts +1 -1
  87. package/dist/commands/docs.js +2 -2
  88. package/dist/commands/docs.js.map +1 -1
  89. package/dist/commands/get.d.ts +1 -1
  90. package/dist/commands/get.js +43 -3
  91. package/dist/commands/get.js.map +1 -1
  92. package/dist/commands/ideas.d.ts +4 -4
  93. package/dist/commands/ideas.js +6 -11
  94. package/dist/commands/ideas.js.map +1 -1
  95. package/dist/commands/init.d.ts +45 -3
  96. package/dist/commands/init.js +452 -104
  97. package/dist/commands/init.js.map +1 -1
  98. package/dist/commands/intent.d.ts +41 -0
  99. package/dist/commands/intent.js +237 -0
  100. package/dist/commands/intent.js.map +1 -0
  101. package/dist/commands/issues.d.ts +6 -5
  102. package/dist/commands/issues.js +8 -12
  103. package/dist/commands/issues.js.map +1 -1
  104. package/dist/commands/log.d.ts +1 -1
  105. package/dist/commands/log.js +2 -2
  106. package/dist/commands/log.js.map +1 -1
  107. package/dist/commands/mission.d.ts +42 -0
  108. package/dist/commands/mission.js +219 -0
  109. package/dist/commands/mission.js.map +1 -0
  110. package/dist/commands/orbit.d.ts +40 -3
  111. package/dist/commands/orbit.js +231 -58
  112. package/dist/commands/orbit.js.map +1 -1
  113. package/dist/commands/overview.d.ts +2 -2
  114. package/dist/commands/overview.js +25 -28
  115. package/dist/commands/overview.js.map +1 -1
  116. package/dist/commands/setup-agent.d.ts +27 -0
  117. package/dist/commands/setup-agent.js +85 -30
  118. package/dist/commands/setup-agent.js.map +1 -1
  119. package/dist/commands/setup-mcp.d.ts +1 -1
  120. package/dist/commands/setup-mcp.js +20 -49
  121. package/dist/commands/setup-mcp.js.map +1 -1
  122. package/dist/commands/start.d.ts +1 -1
  123. package/dist/commands/start.js +2 -2
  124. package/dist/commands/start.js.map +1 -1
  125. package/dist/commands/status.d.ts +2 -1
  126. package/dist/commands/status.js +3 -3
  127. package/dist/commands/status.js.map +1 -1
  128. package/dist/commands/subtask.d.ts +1 -1
  129. package/dist/commands/subtask.js +2 -2
  130. package/dist/commands/subtask.js.map +1 -1
  131. package/dist/commands/task-edit-content.d.ts +1 -1
  132. package/dist/commands/task-edit-content.js +2 -2
  133. package/dist/commands/task-edit-content.js.map +1 -1
  134. package/dist/commands/task.d.ts +10 -3
  135. package/dist/commands/task.js +19 -21
  136. package/dist/commands/task.js.map +1 -1
  137. package/dist/commands/tasks.d.ts +1 -1
  138. package/dist/commands/tasks.js +2 -2
  139. package/dist/commands/tasks.js.map +1 -1
  140. package/dist/commands/vibes.d.ts +4 -4
  141. package/dist/commands/vibes.js +5 -5
  142. package/dist/commands/vibes.js.map +1 -1
  143. package/dist/config.d.ts +69 -9
  144. package/dist/config.js +206 -23
  145. package/dist/config.js.map +1 -1
  146. package/dist/doc-cache.d.ts +23 -3
  147. package/dist/doc-cache.js +72 -12
  148. package/dist/doc-cache.js.map +1 -1
  149. package/dist/errors.d.ts +19 -2
  150. package/dist/errors.js +35 -0
  151. package/dist/errors.js.map +1 -1
  152. package/dist/id-resolve.d.ts +61 -0
  153. package/dist/id-resolve.js +87 -0
  154. package/dist/id-resolve.js.map +1 -0
  155. package/dist/index.js +477 -104
  156. package/dist/index.js.map +1 -1
  157. package/dist/mcp-config.d.ts +36 -0
  158. package/dist/mcp-config.js +51 -0
  159. package/dist/mcp-config.js.map +1 -0
  160. package/dist/oauth.d.ts +8 -0
  161. package/dist/oauth.js +54 -15
  162. package/dist/oauth.js.map +1 -1
  163. package/dist/output.js +7 -2
  164. package/dist/output.js.map +1 -1
  165. package/dist/paths.d.ts +97 -0
  166. package/dist/paths.js +178 -0
  167. package/dist/paths.js.map +1 -0
  168. package/dist/project-config.d.ts +75 -0
  169. package/dist/project-config.js +55 -0
  170. package/dist/project-config.js.map +1 -0
  171. package/dist/workspace-resolve.d.ts +158 -0
  172. package/dist/workspace-resolve.js +284 -0
  173. package/dist/workspace-resolve.js.map +1 -0
  174. package/package.json +53 -50
@@ -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 { 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 || '');
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 = 'https://orbitmap-main-x5n6qz.laravel.cloud/api/agent';
202
+ let fullApiUrl = DEFAULT_API_URL;
203
+ let apiKey;
204
+ let area;
57
205
  if (nonInteractive) {
58
- // Non-interactive mode: --key or --token provided
59
- const apiKey = apiKeyInput;
60
- const projectId = options.project || '';
206
+ apiKey = apiKeyInput;
207
+ area = options.area || '';
61
208
  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}`);
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
- 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
- }
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
- 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';
228
+ area = options.area || (await prompt('Default Area ID (optional, press Enter to skip)'));
229
+ console.log('\nValidating credentials...');
97
230
  }
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);
231
+ const client = new OrbitMapClient(apiKey, area || undefined, fullApiUrl);
232
+ let response;
107
233
  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);
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(`\nValidation failed: ${error.message}`);
239
+ console.error(`${nl}Validation failed: ${error.message}`);
128
240
  }
129
241
  else {
130
- console.error('\nValidation failed: could not connect to API.');
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
- // ── 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
- };
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
- return; // No credentials to generate config for
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(config, null, 2)}`);
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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"}