phewsh 0.15.60 → 0.15.62

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 (2) hide show
  1. package/commands/session.js +32 -17
  2. package/package.json +1 -1
@@ -426,27 +426,31 @@ async function main() {
426
426
  // ── The Exhale: animated brand reveal ──────────────────
427
427
  await ui.brandReveal();
428
428
 
429
- // Self-aware, plain-language summarythe value prop made real with THIS
430
- // machine's state. Non-technical readers get one warm sentence; the rows
431
- // below give engineers the exact facts. Fail-soft: a missing piece just
432
- // shortens the line, it never blocks the door.
433
- (function narrativeSummary() {
429
+ // The welcome beatwarm, plain-language, and continuity-first. This is the
430
+ // "you made it" moment that frames what phewsh is FOR: one thread across every
431
+ // AI tool, so you switch harnesses mid-work and nothing gets re-explained.
432
+ // Non-technical readers get one inviting sentence; the cockpit rows below give
433
+ // engineers the exact facts. Fail-soft: a missing piece shortens the line, it
434
+ // never blocks the door.
435
+ (function welcome() {
434
436
  try {
435
437
  const toolCount = harnesses.filter(h => h.installed).length;
436
438
  const hasProject = intentFiles.length > 0;
437
439
  const dot = teal('●');
438
440
  const tools = `${toolCount} AI tool${toolCount !== 1 ? 's' : ''}`;
439
- if (hasProject && toolCount > 0) {
440
- console.log(` ${dot} ${sage(`${tools} here, all sharing one memory of`)} ${cream(projectName)}${sage(' so you never start this project over.')}`);
441
+ if (hasProject && toolCount > 1) {
442
+ console.log(` ${dot} ${sage('phew you made it.')} ${slate('shh,')} ${cream(projectName)} ${sage(`and your ${tools} are aligned to one thread`)} ${slate('— switch mid-thought, nothing re-explained.')}`);
441
443
  } else if (hasProject) {
442
- console.log(` ${dot} ${sage('phewsh holds one verified memory of')} ${cream(projectName)} ${sage('— ready for whatever AI tool you bring.')}`);
443
- } else if (toolCount > 0) {
444
- console.log(` ${dot} ${sage(`${tools} here.`)} ${sage('Run')} ${cream('/init')} ${sage('and they all work from one shared project memory.')}`);
444
+ console.log(` ${dot} ${sage('phew you made it.')} ${slate('shh,')} ${sage('one verified memory of')} ${cream(projectName)} ${sage('— ready for whatever tool you reach for next.')}`);
445
+ } else if (toolCount > 1) {
446
+ console.log(` ${dot} ${sage(`phew — you made it.`)} ${slate('shh,')} ${sage(`time to align your ${tools} to you and get down to business.`)} ${cream('/init')} ${sage('to begin.')}`);
447
+ } else if (toolCount === 1) {
448
+ console.log(` ${dot} ${sage('phew — you made it.')} ${slate('shh,')} ${sage('add Codex or Gemini and phewsh keeps every tool aligned to you.')}`);
445
449
  } else {
446
- console.log(` ${dot} ${sage('Install Claude Code, Codex, or Gemini phewsh keeps them all on the same page.')}`);
450
+ console.log(` ${dot} ${sage('phew — you made it.')} ${slate('shh,')} ${sage('install Claude Code, Codex, or Gemini and phewsh keeps them aligned to you.')}`);
447
451
  }
448
452
  console.log('');
449
- } catch { /* the summary is a flourish, never a blocker */ }
453
+ } catch { /* the welcome is a flourish, never a blocker */ }
450
454
  })();
451
455
 
452
456
  if (config?.apiKey && !config.apiKey.startsWith('sk-')) {
@@ -583,6 +587,10 @@ async function main() {
583
587
  console.log(` ${b(cream('What are you trying to do?'))}`);
584
588
  console.log(` ${teal('1')} ${sage('Build')} ${slate('·')} ${teal('2')} ${sage('Research')} ${slate('·')} ${teal('3')} ${sage('Decide')} ${slate('·')} ${teal('4')} ${sage('Review')} ${slate('·')} ${teal('5')} ${sage('Ask another model')}`);
585
589
  console.log(` ${slate('pick a number, or just type — your context travels with every route')}`);
590
+ // One quiet line to the deeper power, without dumping the whole command list:
591
+ // the moves that make phewsh more than a chat box — true continuity across
592
+ // harnesses. /help opens everything when they're ready.
593
+ console.log(` ${slate('⌄ deeper:')} ${cream('/work')} ${slate('hand to a tool')} ${slate('·')} ${cream('/council')} ${slate('ask them all')} ${slate('·')} ${cream('/handoff')} ${slate('what carries over')} ${slate('·')} ${cream('/help')} ${slate('all')}`);
586
594
  }
587
595
 
588
596
  // Self-aware guidance: snapshot the session's state so phewsh can recommend
@@ -666,6 +674,7 @@ async function main() {
666
674
  const tools = continuity.toolsInThread(decisions, { project: projectName });
667
675
  const span = tools >= 2 ? slate(` · ${tools} tools, one thread`) : '';
668
676
  console.log(` ${teal('↻')} ${sage('Picking up — ' + line)}${span} ${slate('· /thread')}`);
677
+ console.log(''); // breathe before "What are you trying to do?"
669
678
  } catch { /* continuity is a nicety, never a blocker */ }
670
679
  }
671
680
 
@@ -733,10 +742,8 @@ async function main() {
733
742
  console.log('');
734
743
  if (!route) {
735
744
  // Nothing to route through: no key, no agent CLIs found on this machine.
736
- console.log(` ${b(cream('Welcome to phewsh.'))}`);
737
- console.log('');
738
- console.log(` ${sage('No agent CLI found (Claude Code, Codex, Gemini, Cursor, OpenCode)')}`);
739
- console.log(` ${sage('and no API key set. Either one gets you running:')}`);
745
+ console.log(` ${b(cream('Two ways to get running:'))}`);
746
+ console.log(` ${slate('No agent CLI found (Claude Code, Codex, Gemini, Cursor, OpenCode) and no API key yet.')}`);
740
747
  console.log('');
741
748
  console.log(` ${teal('/key')} ${sage('Set an API key (10 seconds)')}`);
742
749
  console.log(` ${teal('/tour')} ${sage('See what this does (nothing needed)')}`);
@@ -2462,7 +2469,15 @@ async function main() {
2462
2469
  rl.prompt();
2463
2470
  return;
2464
2471
  }
2465
- const target = cmdArg.trim().toLowerCase();
2472
+ // Forgiving aliases — people type the tool's everyday name, not its id.
2473
+ // `/use claude` should just work, not bounce off "Unknown route".
2474
+ const USE_ALIASES = {
2475
+ claude: 'claude-code', cc: 'claude-code', claudecode: 'claude-code',
2476
+ gpt: 'codex', chatgpt: 'codex', openai: 'codex',
2477
+ grokbuild: 'grok',
2478
+ };
2479
+ const raw = cmdArg.trim().toLowerCase();
2480
+ const target = USE_ALIASES[raw] || raw;
2466
2481
  if (target === 'api') {
2467
2482
  if (!config?.apiKey) {
2468
2483
  console.log(` ${ember('!')} ${sage('No API key set — run /key first.')}`);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "phewsh",
3
- "version": "0.15.60",
3
+ "version": "0.15.62",
4
4
  "description": "Turn intent into action. Structure your thinking, execute your next step.",
5
5
  "bin": {
6
6
  "phewsh": "bin/phewsh.js"