kryptheon 0.1.36 → 0.1.38

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/bin/kryptheon.js CHANGED
@@ -1,4 +1,4 @@
1
- #!/usr/bin/env node
1
+ #!/usr/bin/env node
2
2
  // The kryptheon CLI. A thin wrapper so nobody has to remember Playwright's
3
3
  // command line or edit a config file. Everything here shells out to the
4
4
  // Playwright binary that ships with this package.
@@ -2563,9 +2563,68 @@ function dashboardAlreadyRunning(port) {
2563
2563
  });
2564
2564
  }
2565
2565
 
2566
+ /**
2567
+ * The dashboard, started from the home folder: kept in a kryptheon-tests
2568
+ * folder there, the one record already uses - set up the first time, asked
2569
+ * once, and simply opened every time after.
2570
+ *
2571
+ * Found when the first person paid: the site's Kryptheon.cmd download was
2572
+ * flagged as dangerous by the browser and by Windows, and would not open
2573
+ * once saved. Its replacement is Win+R and one pasted line - and Win+R starts
2574
+ * in the home folder, where dashboard used to refuse to run at all.
2575
+ */
2576
+ async function dashboardFromHome(plan) {
2577
+ const ready = project.hasPackageJson(plan.into) && project.kryptheonInstalledIn(plan.into);
2578
+ if (!ready) {
2579
+ console.log('');
2580
+ console.log(' Kryptheon keeps your recordings and results in a folder of their own:');
2581
+ console.log('');
2582
+ console.log(' ' + plan.into);
2583
+ console.log('');
2584
+ console.log(' The first time, I make it and install kryptheon in it (about 20MB).');
2585
+ console.log(' Nothing else on this computer is touched.');
2586
+ console.log('');
2587
+ const question = project.setupQuestion(plan);
2588
+ const yes = process.stdin.isTTY
2589
+ ? project.answeredYes(await askLine(question.text), question.yesByDefault)
2590
+ : question.yesByDefault;
2591
+ if (!yes) {
2592
+ console.log('');
2593
+ console.log(' Nothing was changed. To keep them beside your app instead, open a');
2594
+ console.log(' terminal in its folder and run: npx kryptheon@latest dashboard');
2595
+ console.log('');
2596
+ return 1;
2597
+ }
2598
+ try {
2599
+ fs.mkdirSync(plan.into, { recursive: true });
2600
+ } catch (err) {
2601
+ console.error('');
2602
+ console.error(' Could not make the folder: ' + plan.into);
2603
+ console.error('');
2604
+ return 1;
2605
+ }
2606
+ if (!makeReady(plan.into)) return 1;
2607
+ }
2608
+ // Run again from inside that folder, as record does: every path in this
2609
+ // file is worked out once, from the folder the command started in.
2610
+ const child = spawn(process.execPath, [__filename, 'dashboard'], { cwd: plan.into, stdio: 'inherit' });
2611
+ const wait = () => {};
2612
+ process.on('SIGINT', wait);
2613
+ process.on('SIGTERM', wait);
2614
+ const code = await new Promise((resolve) => {
2615
+ child.on('error', () => resolve(1));
2616
+ child.on('close', (status) => resolve(status === null ? 1 : status));
2617
+ });
2618
+ process.removeListener('SIGINT', wait);
2619
+ process.removeListener('SIGTERM', wait);
2620
+ return code;
2621
+ }
2622
+
2566
2623
  async function dashboardCommand() {
2567
2624
  const here = project.inspectProject(USER_DIR);
2568
2625
  if (!here.ok) {
2626
+ const plan = project.setupPlan(USER_DIR);
2627
+ if (plan.action === 'home') return await dashboardFromHome(plan);
2569
2628
  for (const line of project.noProjectLines(here)) console.error(line);
2570
2629
  return 1;
2571
2630
  }
@@ -624,12 +624,10 @@
624
624
  { id: 'claude-code', name: 'Claude Code', tested: true,
625
625
  steps: ['Run this once, in any terminal. That is the whole set-up.'],
626
626
  code: 'claude mcp add kryptheon -- npx -y kryptheon-mcp', file: 'terminal' },
627
+ // No "Add to Cursor" button: it was never seen working end to end, and
628
+ // the person asked for it to go. By hand, as for every other tool.
627
629
  { id: 'cursor', name: 'Cursor', tested: false,
628
- // Cursor's own install page, as on kryptheon.tech: it opens Cursor, and
629
- // where Cursor does not open - not installed, or blocked - it shows the
630
- // config to paste, rather than a click that does nothing at all.
631
- oneClick: { href: 'https://cursor.com/en/install-mcp?name=kryptheon&config=eyJjb21tYW5kIjoibnB4IiwiYXJncyI6WyIteSIsImtyeXB0aGVvbi1tY3AiXX0=', label: 'Add to Cursor' },
632
- steps: ['Press Add to Cursor. Cursor\'s page opens and hands it to Cursor, which asks you to confirm - say yes. Cursor has to be installed on this computer.', 'Or by hand: paste the config into mcp.json in the .cursor folder of your home folder.'],
630
+ steps: ['Open Cursor Settings, then MCP, and press Add new MCP server - Cursor opens its mcp.json.', 'Paste the config and save. It lives in the .cursor folder of your home folder.'],
633
631
  code: MCP_JSON, file: '~/.cursor/mcp.json' },
634
632
  { id: 'vscode', name: 'VS Code', tested: false,
635
633
  oneClick: { href: 'vscode:mcp/install?' + encodeURIComponent(JSON.stringify({ name: 'kryptheon', command: 'npx', args: ['-y', 'kryptheon-mcp'] })), label: 'Install in VS Code' },
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "kryptheon",
3
- "version": "0.1.36",
3
+ "version": "0.1.38",
4
4
  "description": "Record what you do in your app and get plain-language reports when it breaks.",
5
5
  "license": "SEE LICENSE IN LICENSE",
6
6
  "type": "commonjs",
@@ -52,7 +52,7 @@
52
52
  "@playwright/test": "^1.62.1"
53
53
  },
54
54
  "scripts": {
55
- "check": "node kryptheon-store.check.js && node kryptheon-code.check.js && node kryptheon-constdata.check.js && node kryptheon-accept.check.js && node kryptheon-keys.check.js && node kryptheon-dashboard.check.js && node kryptheon-autostart.check.js && node kryptheon-changes.check.js && node kryptheon-look.check.js && node kryptheon-verify.check.js && node kryptheon-recheck.check.js && node kryptheon-reporter.check.js && node kryptheon-signature.check.js && node kryptheon-signature.stream.check.js && node kryptheon-signature.baseline.check.js && node kryptheon-signature.settle.check.js && node kryptheon-signature.number.check.js && node kryptheon-env.check.js && node kryptheon-watchdog.check.js && node kryptheon-phone.check.js && node kryptheon-record.check.js && node kryptheon-selectors.check.js && node kryptheon-recordings.check.js && node kryptheon-cleanup.check.js && node kryptheon-orphan.check.js && node kryptheon-project.check.js && node kryptheon-setup.check.js && node kryptheon-browser.check.js && node kryptheon-heal.check.js && node kryptheon-load.check.js && node kryptheon-package.check.js",
55
+ "check": "node kryptheon-store.check.js && node kryptheon-code.check.js && node kryptheon-constdata.check.js && node kryptheon-accept.check.js && node kryptheon-keys.check.js && node kryptheon-dashboard.check.js && node kryptheon-autostart.check.js && node kryptheon-changes.check.js && node kryptheon-look.check.js && node kryptheon-verify.check.js && node kryptheon-recheck.check.js && node kryptheon-reporter.check.js && node kryptheon-signature.check.js && node kryptheon-signature.stream.check.js && node kryptheon-signature.baseline.check.js && node kryptheon-signature.settle.check.js && node kryptheon-signature.number.check.js && node kryptheon-env.check.js && node kryptheon-watchdog.check.js && node kryptheon-phone.check.js && node kryptheon-homedash.check.js && node kryptheon-record.check.js && node kryptheon-selectors.check.js && node kryptheon-recordings.check.js && node kryptheon-cleanup.check.js && node kryptheon-orphan.check.js && node kryptheon-project.check.js && node kryptheon-setup.check.js && node kryptheon-browser.check.js && node kryptheon-heal.check.js && node kryptheon-load.check.js && node kryptheon-package.check.js",
56
56
  "check:store": "node kryptheon-store.check.js",
57
57
  "check:code": "node kryptheon-code.check.js",
58
58
  "check:constdata": "node kryptheon-constdata.check.js",