@telora/daemon 0.14.23 → 0.14.25

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.
@@ -1,18 +1,23 @@
1
1
  /**
2
2
  * `telora-daemon connect <token>` subcommand.
3
3
  *
4
- * Redeems a Telora connect token, writes the daemon config + .mcp.json,
5
- * installs @telora/daemon as a dev dep, and starts the daemon in the
6
- * background. Designed to be invoked at the tail end of the bash bootstrap
7
- * (`scripts/connect.sh`) so the user lands in `claude` with everything wired.
4
+ * Redeems a Telora connect token, writes the daemon config + a committable
5
+ * `.mcp.json`, then starts the daemon in the background via `npx -p
6
+ * @telora/daemon@latest telora-daemon run`. Designed to be invoked at the
7
+ * tail end of the bash bootstrap (`scripts/connect.sh`) so the user lands
8
+ * in `claude` with everything wired -- and importantly leaves no node-side
9
+ * footprint (no package.json, no node_modules, no dev dependency) in the
10
+ * user's repo. Rust/Python/Go/empty repos stay untouched.
8
11
  */
9
12
  import { closeSync, existsSync, mkdirSync, openSync, readFileSync, writeFileSync, } from 'node:fs';
10
13
  import { spawn, spawnSync } from 'node:child_process';
11
- import { resolve } from 'node:path';
14
+ import { resolve, delimiter } from 'node:path';
12
15
  import { homedir } from 'node:os';
13
- import { resolveMcpServerPath, writeMcpConfigFile } from '../mcp-resolution.js';
16
+ import { isLegacyMcpConfigShape, writeMcpConfigFile, } from '../mcp-resolution.js';
14
17
  import { ensureGlobalStateDir, resolveDaemonLogPath } from '../daemon-process.js';
15
18
  import { STARTER_PROMPT } from '../prompts/starter-prompt.js';
19
+ import { TELORA_CLAUDE_MD_BEGIN, TELORA_CLAUDE_MD_END, renderClaudeMd, } from '../templates/claude-md.js';
20
+ import { buildClaudeSettings, mergeClaudeSettings, } from '../templates/claude-settings.js';
16
21
  /**
17
22
  * Production Telora API URL embedded in the published @telora/daemon package.
18
23
  * Override with TELORA_URL for local dev.
@@ -29,6 +34,14 @@ export function remediationFor(code) {
29
34
  return 'This token was already used. Mint a new one-liner from Telora.';
30
35
  case 'token_not_found':
31
36
  return "Token doesn't exist. Check that you copied the full one-liner from Telora.";
37
+ case 'product_name_collision':
38
+ return ("Telora couldn't find a free product name based on this repo's directory " +
39
+ '(too many existing products with similar names). Rename the directory, ' +
40
+ 'or pick an existing product on the Connect Workstation page, and re-run.');
41
+ case 'proposed_name_required':
42
+ return ('This is a bug in connect: the unbound token reached redeem without a ' +
43
+ 'proposed product name. Please report this. As a workaround, mint a ' +
44
+ 'bound token from a product page on the Connect Workstation page and re-run.');
32
45
  default:
33
46
  return 'Token redemption failed. Check your network and try again.';
34
47
  }
@@ -128,11 +141,20 @@ export function writeStarterPromptArtifacts(repoPath, io) {
128
141
  }
129
142
  }
130
143
  /**
131
- * Append .telora/ and .mcp.json to .gitignore in the repo root if missing.
144
+ * Append `.telora/` to .gitignore in the repo root if missing.
145
+ *
146
+ * Earlier connect runs added `.mcp.json` here too, because the file embedded
147
+ * a per-user secret (TELORA_TRACKER_ID). The new `.mcp.json` shape is
148
+ * credential-free and meant to be committed; new runs no longer add it.
149
+ *
150
+ * If a previous run added `.mcp.json` to .gitignore, leave that line in
151
+ * place -- removing it would surface as a noisy migration. The user can
152
+ * delete the line on their own when they realize they want to commit the
153
+ * file.
132
154
  */
133
155
  export function ensureGitignoreEntries(repoPath, io) {
134
156
  const gitignorePath = resolve(repoPath, '.gitignore');
135
- const entries = ['.telora/', '.mcp.json'];
157
+ const entries = ['.telora/'];
136
158
  if (existsSync(gitignorePath)) {
137
159
  const content = readFileSync(gitignorePath, 'utf-8');
138
160
  const lines = content.split('\n').map((l) => l.trim());
@@ -147,69 +169,25 @@ export function ensureGitignoreEntries(repoPath, io) {
147
169
  io.out(`Created ${gitignorePath}.\n`);
148
170
  }
149
171
  /**
150
- * Ensure a package.json exists. If missing, write a minimal stub so we can
151
- * `npm install --save-dev` without npm complaining.
152
- */
153
- export function ensurePackageJson(repoPath, io) {
154
- const pkgPath = resolve(repoPath, 'package.json');
155
- if (existsSync(pkgPath))
156
- return;
157
- const dirName = repoPath.split(/[\\/]/).filter(Boolean).pop() ?? 'project';
158
- const stub = {
159
- name: dirName.toLowerCase().replace(/[^a-z0-9._-]/g, '-'),
160
- version: '0.0.0',
161
- private: true,
162
- };
163
- writeFileSync(pkgPath, JSON.stringify(stub, null, 2) + '\n');
164
- io.out(`Created ${pkgPath} (stub).\n`);
165
- }
166
- /**
167
- * Install @telora/daemon as a dev dependency in the project.
168
- * Skipped if the package is already declared in devDependencies/dependencies.
169
- */
170
- export function installDaemonIfNeeded(repoPath, io) {
171
- const pkgPath = resolve(repoPath, 'package.json');
172
- if (existsSync(pkgPath)) {
173
- try {
174
- const pkg = JSON.parse(readFileSync(pkgPath, 'utf-8'));
175
- if (pkg.dependencies?.['@telora/daemon'] || pkg.devDependencies?.['@telora/daemon']) {
176
- io.out('@telora/daemon already installed in this project.\n');
177
- return;
178
- }
179
- }
180
- catch {
181
- // Fall through to install.
182
- }
183
- }
184
- io.out('Installing @telora/daemon as a dev dependency...\n');
185
- const result = spawnSync('npm', ['install', '--save-dev', '@telora/daemon'], {
186
- cwd: repoPath,
187
- stdio: 'inherit',
188
- });
189
- if (result.status !== 0) {
190
- throw new Error(`npm install failed with exit code ${result.status ?? 'unknown'}`);
191
- }
192
- }
193
- /**
194
- * Spawn the locally-installed daemon as a detached background process.
172
+ * Spawn the daemon as a detached background process via `npx`.
195
173
  *
196
- * We deliberately do not reuse `startDaemonBackground` from daemon-process.ts
197
- * because that resolves the entry point relative to *this* file -- which,
198
- * during a fresh `npx --yes -p @telora/daemon telora-daemon connect ...` invocation, lives in
199
- * a transient npx cache. Spawning from the local install gives the daemon
200
- * a stable home for its lifetime.
174
+ * Deliberately uses `npx -p @telora/daemon@latest telora-daemon run` (and
175
+ * NOT a node_modules path) so the connect flow does not require a
176
+ * `package.json` or `node_modules/` in the user's repo. This keeps the
177
+ * connect flow language-agnostic: a Rust/Python/Go/empty repo never gets
178
+ * a Node footprint.
179
+ *
180
+ * Bin name is explicit (`telora-daemon`) because the package's bins are
181
+ * `telora-daemon` and `telora-daemon-wrapper`; neither matches the unscoped
182
+ * package name `daemon`, so `npx @telora/daemon` cannot resolve a bin and
183
+ * aborts with a misleading error (lesson from commit 0368f4b6).
201
184
  */
202
- export function startInstalledDaemonBackground(repoPath) {
185
+ export function startDaemonViaNpx(repoPath) {
203
186
  ensureGlobalStateDir();
204
187
  const logPath = resolveDaemonLogPath();
205
- const localEntry = resolve(repoPath, 'node_modules/@telora/daemon/dist/index.js');
206
- if (!existsSync(localEntry)) {
207
- throw new Error(`Could not find local @telora/daemon install at ${localEntry}. ` +
208
- 'Did `npm install --save-dev @telora/daemon` complete?');
209
- }
210
188
  const logFd = openSync(logPath, 'a', 0o600);
211
189
  try {
212
- const child = spawn(process.execPath, [localEntry, 'run'], {
190
+ const child = spawn('npx', ['--yes', '-p', '@telora/daemon@latest', 'telora-daemon', 'run'], {
213
191
  detached: true,
214
192
  stdio: ['ignore', logFd, logFd],
215
193
  cwd: repoPath,
@@ -222,13 +200,16 @@ export function startInstalledDaemonBackground(repoPath) {
222
200
  closeSync(logFd);
223
201
  }
224
202
  }
225
- async function redeemToken(token, teloraUrl, io) {
203
+ async function redeemToken(token, teloraUrl, proposedProductName, io) {
226
204
  let response;
205
+ const requestBody = { token };
206
+ if (proposedProductName)
207
+ requestBody.proposed_product_name = proposedProductName;
227
208
  try {
228
209
  response = await io.fetch(redeemEndpoint(teloraUrl), {
229
210
  method: 'POST',
230
211
  headers: { 'Content-Type': 'application/json' },
231
- body: JSON.stringify({ token }),
212
+ body: JSON.stringify(requestBody),
232
213
  });
233
214
  }
234
215
  catch (err) {
@@ -243,6 +224,256 @@ async function redeemToken(token, teloraUrl, io) {
243
224
  }
244
225
  return body;
245
226
  }
227
+ /**
228
+ * Look up an existing product entry in `~/.telora/daemon.json` whose
229
+ * repoPath matches the given path. Returns the product id when found,
230
+ * else null. Used by runConnect for re-run idempotency: a second run on
231
+ * the same dir reuses the existing binding instead of creating a duplicate
232
+ * product on the unbound path.
233
+ */
234
+ export function findExistingProductForRepo(repoPath) {
235
+ const configPath = resolve(homedir(), '.telora', 'daemon.json');
236
+ if (!existsSync(configPath))
237
+ return null;
238
+ try {
239
+ const config = JSON.parse(readFileSync(configPath, 'utf-8'));
240
+ const target = resolve(repoPath);
241
+ for (const entry of config.products ?? []) {
242
+ if (entry.repoPath && resolve(entry.repoPath) === target && entry.id) {
243
+ return entry.id;
244
+ }
245
+ }
246
+ }
247
+ catch {
248
+ // Malformed config -- treat as no match; runConnect overwrites it anyway.
249
+ }
250
+ return null;
251
+ }
252
+ /**
253
+ * Write or merge a seeded `CLAUDE.md` at the repo root.
254
+ *
255
+ * - Fresh repo: writes the seeded block straight in.
256
+ * - Existing CLAUDE.md without the Telora delimiters: appends a delimited
257
+ * Telora block at the end. The user's content is untouched.
258
+ * - Existing CLAUDE.md WITH the delimiters: replaces only the delimited
259
+ * block. Re-runs are byte-identical (no churn, no duplication).
260
+ */
261
+ export function writeOrMergeClaudeMd(repoPath, productName, io) {
262
+ const path = resolve(repoPath, 'CLAUDE.md');
263
+ const seedBlock = renderClaudeMd(productName);
264
+ if (!existsSync(path)) {
265
+ writeFileSync(path, seedBlock);
266
+ io.out(`Wrote ${path}.\n`);
267
+ return;
268
+ }
269
+ const existing = readFileSync(path, 'utf-8');
270
+ const beginIdx = existing.indexOf(TELORA_CLAUDE_MD_BEGIN);
271
+ if (beginIdx === -1) {
272
+ // No prior Telora block -- append, preserving user content.
273
+ const sep = existing.endsWith('\n') ? '\n' : '\n\n';
274
+ writeFileSync(path, existing + sep + seedBlock);
275
+ io.out(`Appended Telora seed block to ${path}.\n`);
276
+ return;
277
+ }
278
+ // Replace the existing Telora block in place.
279
+ const endIdx = existing.indexOf(TELORA_CLAUDE_MD_END, beginIdx);
280
+ if (endIdx === -1) {
281
+ // Begin marker without end -- treat as malformed. Append a fresh block
282
+ // rather than risk corrupting whatever's there.
283
+ const sep = existing.endsWith('\n') ? '\n' : '\n\n';
284
+ writeFileSync(path, existing + sep + seedBlock);
285
+ io.out(`Appended Telora seed block to ${path} (prior block was malformed).\n`);
286
+ return;
287
+ }
288
+ const after = endIdx + TELORA_CLAUDE_MD_END.length;
289
+ // Trim a trailing newline after the end marker so we don't accumulate
290
+ // blank lines on each re-run.
291
+ const trailingNewline = existing[after] === '\n' ? 1 : 0;
292
+ const newContent = existing.slice(0, beginIdx) + seedBlock.trimEnd() + '\n' + existing.slice(after + trailingNewline);
293
+ writeFileSync(path, newContent);
294
+ io.out(`Refreshed Telora seed block in ${path}.\n`);
295
+ }
296
+ /**
297
+ * Write or deep-merge `<repo>/.claude/settings.json`.
298
+ *
299
+ * Fresh: writes the template directly.
300
+ * Existing: deep-merges our `permissions.allow` entries into the user's
301
+ * settings, deduplicating. All other top-level keys are untouched.
302
+ * Re-runs produce no diff.
303
+ */
304
+ export function writeOrMergeClaudeSettings(repoPath, io) {
305
+ const dir = resolve(repoPath, '.claude');
306
+ const path = resolve(dir, 'settings.json');
307
+ const seed = buildClaudeSettings();
308
+ if (!existsSync(dir))
309
+ mkdirSync(dir, { recursive: true });
310
+ let existing = null;
311
+ if (existsSync(path)) {
312
+ try {
313
+ const parsed = JSON.parse(readFileSync(path, 'utf-8'));
314
+ if (parsed && typeof parsed === 'object' && !Array.isArray(parsed)) {
315
+ existing = parsed;
316
+ }
317
+ }
318
+ catch (err) {
319
+ io.err(`Warning: existing ${path} is not valid JSON; leaving it alone: ` +
320
+ `${err instanceof Error ? err.message : String(err)}\n`);
321
+ return;
322
+ }
323
+ }
324
+ const merged = mergeClaudeSettings(existing, seed);
325
+ writeFileSync(path, JSON.stringify(merged, null, 2) + '\n');
326
+ io.out(existing ? `Merged Telora entries into ${path}.\n` : `Wrote ${path}.\n`);
327
+ }
328
+ // ── Workstation tracking (D4): telora-ai detection + hook merge ─────────
329
+ /**
330
+ * Locate the `telora-ai` Python CLI on PATH. Returns the absolute path if
331
+ * found, else null. Detection is the entire install model -- if the user
332
+ * doesn't have it, connect prints a remediation hint and continues
333
+ * (tracking is opt-in).
334
+ */
335
+ export function locateTeloraAi() {
336
+ const path = process.env.PATH ?? '';
337
+ const entries = path.split(delimiter).filter(Boolean);
338
+ for (const entry of entries) {
339
+ const candidate = resolve(entry, 'telora-ai');
340
+ if (existsSync(candidate))
341
+ return candidate;
342
+ }
343
+ return null;
344
+ }
345
+ /**
346
+ * Pre-populate the user's `~/.syntelyos/ai_tracking.db` config table with
347
+ * the redeem-derived credentials. Skips the
348
+ * `telora-ai register <code>` round-trip that Settings > AI Trackers
349
+ * normally requires -- the tracker row already exists in Telora (the
350
+ * redeem RPC inserted it), so all we need is to point the local DB at
351
+ * it.
352
+ *
353
+ * Each `telora-ai config <key> <value>` call is a single sqlite UPSERT;
354
+ * idempotent on re-runs.
355
+ *
356
+ * Returns true on success, false if any sub-call failed (the failure is
357
+ * surfaced via io.err but never aborts the connect flow).
358
+ */
359
+ export function registerWorkstationLocally(params) {
360
+ const entries = [
361
+ ['telora_url', params.teloraUrl],
362
+ ['tracker_id', params.trackerId],
363
+ // The python tool's data model treats access_token and tracker_id as
364
+ // separate fields, but in our model the tracker_id IS the bearer
365
+ // token. Setting both keeps cmd_status / cmd_sync happy.
366
+ ['access_token', params.trackerId],
367
+ ['org_id', params.organizationId],
368
+ ];
369
+ for (const [key, value] of entries) {
370
+ const result = spawnSync(params.teloraAiPath, ['config', key, value], {
371
+ stdio: 'pipe',
372
+ encoding: 'utf-8',
373
+ });
374
+ if (result.status !== 0) {
375
+ params.io.err(`Warning: workstation registration step '${key}' failed (${result.status ?? 'no exit'}): ${result.stderr ?? result.stdout ?? ''}\n`);
376
+ return false;
377
+ }
378
+ }
379
+ return true;
380
+ }
381
+ /**
382
+ * Idempotent merge of `PostToolUse` and `UserPromptSubmit` hook entries
383
+ * into `~/.claude/settings.json`. Mirrors the shape of `telora-ai
384
+ * setup-hooks` in scripts/telora-ai but runs from the daemon connect flow
385
+ * so the user doesn't have to invoke it manually.
386
+ *
387
+ * Existing hook entries are preserved. Re-runs do not duplicate.
388
+ */
389
+ export function mergeUserClaudeSettingsHooks(io, homeOverride) {
390
+ const home = homeOverride ?? homedir();
391
+ const settingsDir = resolve(home, '.claude');
392
+ const settingsPath = resolve(settingsDir, 'settings.json');
393
+ const hookBin = locateBinaryOnPath('telora-ai-hook');
394
+ const humanHookBin = locateBinaryOnPath('telora-ai-human-hook');
395
+ if (!hookBin || !humanHookBin) {
396
+ io.err(`Warning: telora-ai-hook / telora-ai-human-hook not on PATH. Skipping ~/.claude/settings.json merge.\n`);
397
+ return false;
398
+ }
399
+ if (!existsSync(settingsDir))
400
+ mkdirSync(settingsDir, { recursive: true });
401
+ let parsed = {};
402
+ if (existsSync(settingsPath)) {
403
+ try {
404
+ const raw = readFileSync(settingsPath, 'utf-8');
405
+ const candidate = JSON.parse(raw);
406
+ if (candidate && typeof candidate === 'object' && !Array.isArray(candidate)) {
407
+ parsed = candidate;
408
+ }
409
+ }
410
+ catch (err) {
411
+ io.err(`Warning: ${settingsPath} is not valid JSON; leaving it alone: ${err instanceof Error ? err.message : String(err)}\n`);
412
+ return false;
413
+ }
414
+ }
415
+ const hooks = typeof parsed.hooks === 'object' && parsed.hooks !== null
416
+ ? parsed.hooks
417
+ : {};
418
+ const desired = {
419
+ PostToolUse: {
420
+ matcher: '',
421
+ hooks: [{ type: 'command', command: hookBin }],
422
+ },
423
+ UserPromptSubmit: {
424
+ matcher: '',
425
+ hooks: [{ type: 'command', command: humanHookBin }],
426
+ },
427
+ };
428
+ for (const [eventName, entry] of Object.entries(desired)) {
429
+ const existing = hooks[eventName] ?? [];
430
+ let alreadyPresent = false;
431
+ for (const rule of existing) {
432
+ for (const h of rule.hooks ?? []) {
433
+ const cmd = h.command ?? '';
434
+ if (cmd.includes('telora-ai-hook') || cmd.includes('telora-ai-human-hook')) {
435
+ alreadyPresent = true;
436
+ // Refresh path in case the binary moved between runs.
437
+ const desiredCmd = entry.hooks[0].command;
438
+ if (cmd !== desiredCmd)
439
+ h.command = desiredCmd;
440
+ }
441
+ }
442
+ }
443
+ if (!alreadyPresent)
444
+ existing.push(entry);
445
+ hooks[eventName] = existing;
446
+ }
447
+ parsed.hooks = hooks;
448
+ writeFileSync(settingsPath, JSON.stringify(parsed, null, 2) + '\n');
449
+ io.out(`Merged Telora tracking hooks into ${settingsPath}.\n`);
450
+ return true;
451
+ }
452
+ function locateBinaryOnPath(name) {
453
+ const path = process.env.PATH ?? '';
454
+ for (const entry of path.split(delimiter).filter(Boolean)) {
455
+ const candidate = resolve(entry, name);
456
+ if (existsSync(candidate))
457
+ return candidate;
458
+ }
459
+ return null;
460
+ }
461
+ /**
462
+ * Write `.telora/.product-bootstrapped` -- a marker the starter prompt
463
+ * detects on first turn to offer a rename of the basename-derived product
464
+ * name. The starter prompt removes the marker after acting on it.
465
+ */
466
+ export function writeBootstrapMarker(repoPath, io) {
467
+ const teloraDir = resolve(repoPath, '.telora');
468
+ try {
469
+ if (!existsSync(teloraDir))
470
+ mkdirSync(teloraDir, { recursive: true });
471
+ writeFileSync(resolve(teloraDir, '.product-bootstrapped'), '');
472
+ }
473
+ catch (err) {
474
+ io.err(`Warning: could not write bootstrap marker: ${err instanceof Error ? err.message : String(err)}\n`);
475
+ }
476
+ }
246
477
  /**
247
478
  * Run the connect flow.
248
479
  *
@@ -257,8 +488,18 @@ export async function runConnect(opts) {
257
488
  if (!validateTokenShape(opts.token)) {
258
489
  throw new Error('Invalid token. Expected a TOK_-prefixed token from a Telora connect link.');
259
490
  }
491
+ // Re-run idempotency: if daemon.json already has an entry for this repo,
492
+ // the user is reconnecting -- never send a proposed name for that path
493
+ // (which would risk creating a duplicate product on the unbound flow).
494
+ const reusedExistingBinding = findExistingProductForRepo(repoPath) !== null;
495
+ const proposedProductName = reusedExistingBinding
496
+ ? null
497
+ : repoPath.split(/[\\/]/).filter(Boolean).pop() ?? null;
498
+ if (reusedExistingBinding) {
499
+ io.out(`Reusing existing product binding for ${repoPath}.\n`);
500
+ }
260
501
  io.out(`Redeeming connect token at ${teloraUrl}...\n`);
261
- const body = await redeemToken(opts.token, teloraUrl, io);
502
+ const body = await redeemToken(opts.token, teloraUrl, proposedProductName, io);
262
503
  if (!body.success || !body.tracker_id || !body.organization_id || !body.product_id) {
263
504
  const hint = remediationFor(body.code);
264
505
  const detail = body.error ? ` (${body.error})` : '';
@@ -285,39 +526,87 @@ export async function runConnect(opts) {
285
526
  io,
286
527
  });
287
528
  io.out(`Wrote ${configPath}.\n`);
288
- // -- Write .mcp.json ------------------------------------------------------
529
+ // -- Write .mcp.json (committable shape; secrets stay in daemon.json) ----
530
+ const mcpAtPath = resolve(repoPath, '.mcp.json');
531
+ let priorShape = 'none';
532
+ if (existsSync(mcpAtPath)) {
533
+ try {
534
+ const parsed = JSON.parse(readFileSync(mcpAtPath, 'utf-8'));
535
+ priorShape = isLegacyMcpConfigShape(parsed) ? 'legacy' : 'current';
536
+ }
537
+ catch {
538
+ priorShape = 'legacy';
539
+ }
540
+ }
289
541
  let mcpConfigPath = null;
290
542
  try {
291
- const mcpServerPath = resolveMcpServerPath();
292
- writeMcpConfigFile(repoPath, {
293
- mcpServerPath,
294
- trackerId,
295
- teloraUrl: resolvedTeloraUrl,
296
- });
297
- mcpConfigPath = resolve(repoPath, '.mcp.json');
298
- io.out(`Wrote ${mcpConfigPath}.\n`);
543
+ writeMcpConfigFile(repoPath, { teloraUrl: resolvedTeloraUrl });
544
+ mcpConfigPath = mcpAtPath;
545
+ if (priorShape === 'legacy') {
546
+ io.out(`${mcpConfigPath} upgraded -- credentials moved out of the file.\n`);
547
+ }
548
+ else {
549
+ io.out(`Wrote ${mcpConfigPath}.\n`);
550
+ }
299
551
  }
300
552
  catch (err) {
301
553
  io.err(`Warning: could not generate .mcp.json: ${err instanceof Error ? err.message : String(err)}\n`);
302
554
  }
303
555
  ensureGitignoreEntries(repoPath, io);
556
+ // -- Seed agent scaffolding (CLAUDE.md + .claude/settings.json) -----------
557
+ // Both files are committable and merge-aware on re-runs. The CLAUDE.md
558
+ // omits the product name -- the starter prompt fetches and surfaces it
559
+ // on phase 1, and skipping it here means the bootstrapped (renamed
560
+ // first-turn) and bound flows produce identical CLAUDE.md content.
561
+ writeOrMergeClaudeMd(repoPath, null, io);
562
+ writeOrMergeClaudeSettings(repoPath, io);
304
563
  // -- Write starter prompt + first-session marker --------------------------
305
564
  const starterPromptPath = writeStarterPromptArtifacts(repoPath, io);
306
- // -- Install daemon dep ---------------------------------------------------
307
- if (!opts.skipInstall) {
308
- ensurePackageJson(repoPath, io);
309
- installDaemonIfNeeded(repoPath, io);
565
+ // -- Bootstrap marker (unbound flow) ------------------------------------
566
+ // The redeem step creates a product on the fly when the token is unbound;
567
+ // when it does, it sets product_was_created=true. The starter prompt
568
+ // detects the marker we drop here and offers a rename on first turn.
569
+ if (body.product_was_created) {
570
+ writeBootstrapMarker(repoPath, io);
571
+ io.out(`Bootstrapped a new Telora product from your repo's directory name. ` +
572
+ `You can rename it on first turn.\n`);
573
+ }
574
+ // -- Workstation tracking (D4): wire telora-ai if available -------------
575
+ // Detect-only install model: if `telora-ai` is on PATH, use the redeem-
576
+ // derived credentials to populate its local DB and merge tracking hooks
577
+ // into ~/.claude/settings.json. If absent, print a remediation hint and
578
+ // continue -- tracking is opt-in.
579
+ const teloraAiPath = locateTeloraAi();
580
+ if (teloraAiPath) {
581
+ const registered = registerWorkstationLocally({
582
+ teloraAiPath,
583
+ trackerId,
584
+ organizationId,
585
+ teloraUrl: resolvedTeloraUrl,
586
+ io,
587
+ });
588
+ if (registered) {
589
+ io.out(`Workstation registered with tracker ${trackerId.slice(0, 8)}...\n`);
590
+ }
591
+ mergeUserClaudeSettingsHooks(io);
592
+ }
593
+ else {
594
+ io.out(`Workstation tracking not auto-installed: \`telora-ai\` not on PATH.\n` +
595
+ ` To enable end-to-end tracking, install telora-ai (see docs/AI_WORK_TRACKING.md), then run:\n` +
596
+ ` telora-ai config telora_url ${resolvedTeloraUrl}\n` +
597
+ ` telora-ai config tracker_id ${trackerId}\n` +
598
+ ` telora-ai setup-hooks\n`);
310
599
  }
311
- // -- Start daemon in background ------------------------------------------
600
+ // -- Start daemon in background via npx ----------------------------------
312
601
  let daemonPid = null;
313
602
  if (!opts.skipDaemonStart) {
314
603
  try {
315
- daemonPid = startInstalledDaemonBackground(repoPath);
604
+ daemonPid = startDaemonViaNpx(repoPath);
316
605
  io.out(`Daemon started (PID ${daemonPid}). Logs: telora-daemon logs --follow\n`);
317
606
  }
318
607
  catch (err) {
319
608
  io.err(`Warning: could not start daemon in background: ${err instanceof Error ? err.message : String(err)}\n`);
320
- io.err('Run `npx telora-daemon start` manually.\n');
609
+ io.err('Run `npx -p @telora/daemon@latest telora-daemon run` manually.\n');
321
610
  }
322
611
  }
323
612
  // Hand-off line for the bash script to surface to the user.
@@ -331,6 +620,8 @@ export async function runConnect(opts) {
331
620
  mcpConfigPath,
332
621
  starterPromptPath,
333
622
  daemonPid,
623
+ productWasCreated: body.product_was_created === true,
624
+ reusedExistingBinding,
334
625
  };
335
626
  }
336
627
  //# sourceMappingURL=connect.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"connect.js","sourceRoot":"","sources":["../../src/cli/connect.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"connect.js","sourceRoot":"","sources":["../../src/cli/connect.ts"],"names":[],"mappings":"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"}
@@ -5,7 +5,7 @@
5
5
  * so that createRequire resolves @telora/mcp-products from daemon's
6
6
  * node_modules (where it is a declared dependency).
7
7
  */
8
- export { buildMcpConfig, writeMcpConfigFile, type McpConfigOptions, } from '@telora/daemon-core';
8
+ export { buildMcpConfig, isLegacyMcpConfigShape, writeMcpConfigFile, MCP_PRODUCTS_PACKAGE, MCP_PRODUCTS_BIN, type McpConfigOptions, } from '@telora/daemon-core';
9
9
  /**
10
10
  * Resolve the MCP server path from daemon's package context.
11
11
  */
@@ -1 +1 @@
1
- {"version":3,"file":"mcp-resolution.d.ts","sourceRoot":"","sources":["../src/mcp-resolution.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAIH,OAAO,EACL,cAAc,EACd,kBAAkB,EAClB,KAAK,gBAAgB,GACtB,MAAM,qBAAqB,CAAC;AAE7B;;GAEG;AACH,wBAAgB,oBAAoB,IAAI,MAAM,CAE7C"}
1
+ {"version":3,"file":"mcp-resolution.d.ts","sourceRoot":"","sources":["../src/mcp-resolution.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAIH,OAAO,EACL,cAAc,EACd,sBAAsB,EACtB,kBAAkB,EAClB,oBAAoB,EACpB,gBAAgB,EAChB,KAAK,gBAAgB,GACtB,MAAM,qBAAqB,CAAC;AAE7B;;GAEG;AACH,wBAAgB,oBAAoB,IAAI,MAAM,CAE7C"}
@@ -6,7 +6,7 @@
6
6
  * node_modules (where it is a declared dependency).
7
7
  */
8
8
  import { resolveMcpServerPath as _resolveMcpServerPath } from '@telora/daemon-core';
9
- export { buildMcpConfig, writeMcpConfigFile, } from '@telora/daemon-core';
9
+ export { buildMcpConfig, isLegacyMcpConfigShape, writeMcpConfigFile, MCP_PRODUCTS_PACKAGE, MCP_PRODUCTS_BIN, } from '@telora/daemon-core';
10
10
  /**
11
11
  * Resolve the MCP server path from daemon's package context.
12
12
  */
@@ -1 +1 @@
1
- {"version":3,"file":"mcp-resolution.js","sourceRoot":"","sources":["../src/mcp-resolution.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,oBAAoB,IAAI,qBAAqB,EAAE,MAAM,qBAAqB,CAAC;AAEpF,OAAO,EACL,cAAc,EACd,kBAAkB,GAEnB,MAAM,qBAAqB,CAAC;AAE7B;;GAEG;AACH,MAAM,UAAU,oBAAoB;IAClC,OAAO,qBAAqB,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAChD,CAAC"}
1
+ {"version":3,"file":"mcp-resolution.js","sourceRoot":"","sources":["../src/mcp-resolution.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,oBAAoB,IAAI,qBAAqB,EAAE,MAAM,qBAAqB,CAAC;AAEpF,OAAO,EACL,cAAc,EACd,sBAAsB,EACtB,kBAAkB,EAClB,oBAAoB,EACpB,gBAAgB,GAEjB,MAAM,qBAAqB,CAAC;AAE7B;;GAEG;AACH,MAAM,UAAU,oBAAoB;IAClC,OAAO,qBAAqB,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAChD,CAAC"}