aipeek 0.1.0 → 0.1.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
CHANGED
|
@@ -6,11 +6,15 @@ Gives AI a peek into your running browser app. Captures UI tree (React fiber), c
|
|
|
6
6
|
|
|
7
7
|
```bash
|
|
8
8
|
npm i aipeek
|
|
9
|
+
# or
|
|
10
|
+
pnpm add aipeek
|
|
11
|
+
# or
|
|
12
|
+
bun add aipeek
|
|
9
13
|
```
|
|
10
14
|
|
|
11
15
|
## Setup
|
|
12
16
|
|
|
13
|
-
```
|
|
17
|
+
```tsf
|
|
14
18
|
// vite.config.ts
|
|
15
19
|
import { aipeekPlugin } from 'aipeek'
|
|
16
20
|
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
// src/plugin.ts
|
|
2
|
+
import { readFileSync, writeFileSync, existsSync } from "fs";
|
|
2
3
|
import { dirname, resolve } from "path";
|
|
3
4
|
import { fileURLToPath } from "url";
|
|
4
5
|
|
|
@@ -451,6 +452,29 @@ function byteSize(s) {
|
|
|
451
452
|
// src/plugin.ts
|
|
452
453
|
var __dirname = dirname(fileURLToPath(import.meta.url));
|
|
453
454
|
var clientPath = resolve(__dirname, "client.ts");
|
|
455
|
+
var AIPEEK_SNIPPET = `
|
|
456
|
+
# aipeek \u2014 Runtime Browser Inspector
|
|
457
|
+
|
|
458
|
+
When debugging UI issues, checking errors, or inspecting app state, fetch runtime info from the dev server:
|
|
459
|
+
|
|
460
|
+
- \`curl http://localhost:5195/__aipeek\` \u2014 summary (UI tree, console, network, errors, state)
|
|
461
|
+
- \`curl http://localhost:5195/__aipeek/{section}\` \u2014 detail for one section
|
|
462
|
+
- \`curl http://localhost:5195/__aipeek/{section}/{index}\` \u2014 specific item
|
|
463
|
+
- Append \`?full\` for untruncated output
|
|
464
|
+
`;
|
|
465
|
+
function injectClaudeMd(root) {
|
|
466
|
+
const path = resolve(root, "CLAUDE.md");
|
|
467
|
+
try {
|
|
468
|
+
if (existsSync(path)) {
|
|
469
|
+
const content = readFileSync(path, "utf-8");
|
|
470
|
+
if (content.includes("__aipeek")) return;
|
|
471
|
+
writeFileSync(path, content.trimEnd() + "\n" + AIPEEK_SNIPPET);
|
|
472
|
+
} else {
|
|
473
|
+
writeFileSync(path, AIPEEK_SNIPPET.trimStart());
|
|
474
|
+
}
|
|
475
|
+
} catch {
|
|
476
|
+
}
|
|
477
|
+
}
|
|
454
478
|
function aipeekPlugin() {
|
|
455
479
|
let pendingResolve = null;
|
|
456
480
|
let server;
|
|
@@ -478,6 +502,7 @@ function aipeekPlugin() {
|
|
|
478
502
|
},
|
|
479
503
|
configureServer(_server) {
|
|
480
504
|
server = _server;
|
|
505
|
+
injectClaudeMd(server.config.root);
|
|
481
506
|
server.hot.on("aipeek:state", (data) => {
|
|
482
507
|
if (pendingResolve) {
|
|
483
508
|
pendingResolve(data);
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
"use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { newObj[key] = obj[key]; } } } newObj.default = obj; return newObj; } } function _nullishCoalesce(lhs, rhsFn) { if (lhs != null) { return lhs; } else { return rhsFn(); } } function _optionalChain(ops) { let lastAccessLHS = undefined; let value = ops[0]; let i = 1; while (i < ops.length) { const op = ops[i]; const fn = ops[i + 1]; i += 2; if ((op === 'optionalAccess' || op === 'optionalCall') && value == null) { return undefined; } if (op === 'access' || op === 'optionalAccess') { lastAccessLHS = value; value = fn(value); } else if (op === 'call' || op === 'optionalCall') { value = fn((...args) => value.call(lastAccessLHS, ...args)); lastAccessLHS = undefined; } } return value; }// src/plugin.ts
|
|
2
|
+
var _fs = require('fs');
|
|
2
3
|
var _path = require('path');
|
|
3
4
|
var _url = require('url');
|
|
4
5
|
|
|
@@ -451,6 +452,29 @@ function byteSize(s) {
|
|
|
451
452
|
// src/plugin.ts
|
|
452
453
|
var __dirname = _path.dirname.call(void 0, _url.fileURLToPath.call(void 0, import.meta.url));
|
|
453
454
|
var clientPath = _path.resolve.call(void 0, __dirname, "client.ts");
|
|
455
|
+
var AIPEEK_SNIPPET = `
|
|
456
|
+
# aipeek \u2014 Runtime Browser Inspector
|
|
457
|
+
|
|
458
|
+
When debugging UI issues, checking errors, or inspecting app state, fetch runtime info from the dev server:
|
|
459
|
+
|
|
460
|
+
- \`curl http://localhost:5195/__aipeek\` \u2014 summary (UI tree, console, network, errors, state)
|
|
461
|
+
- \`curl http://localhost:5195/__aipeek/{section}\` \u2014 detail for one section
|
|
462
|
+
- \`curl http://localhost:5195/__aipeek/{section}/{index}\` \u2014 specific item
|
|
463
|
+
- Append \`?full\` for untruncated output
|
|
464
|
+
`;
|
|
465
|
+
function injectClaudeMd(root) {
|
|
466
|
+
const path = _path.resolve.call(void 0, root, "CLAUDE.md");
|
|
467
|
+
try {
|
|
468
|
+
if (_fs.existsSync.call(void 0, path)) {
|
|
469
|
+
const content = _fs.readFileSync.call(void 0, path, "utf-8");
|
|
470
|
+
if (content.includes("__aipeek")) return;
|
|
471
|
+
_fs.writeFileSync.call(void 0, path, content.trimEnd() + "\n" + AIPEEK_SNIPPET);
|
|
472
|
+
} else {
|
|
473
|
+
_fs.writeFileSync.call(void 0, path, AIPEEK_SNIPPET.trimStart());
|
|
474
|
+
}
|
|
475
|
+
} catch (e6) {
|
|
476
|
+
}
|
|
477
|
+
}
|
|
454
478
|
function aipeekPlugin() {
|
|
455
479
|
let pendingResolve = null;
|
|
456
480
|
let server;
|
|
@@ -478,6 +502,7 @@ function aipeekPlugin() {
|
|
|
478
502
|
},
|
|
479
503
|
configureServer(_server) {
|
|
480
504
|
server = _server;
|
|
505
|
+
injectClaudeMd(server.config.root);
|
|
481
506
|
server.hot.on("aipeek:state", (data) => {
|
|
482
507
|
if (pendingResolve) {
|
|
483
508
|
pendingResolve(data);
|
package/dist/index.cjs
CHANGED
|
@@ -8,7 +8,7 @@
|
|
|
8
8
|
|
|
9
9
|
|
|
10
10
|
|
|
11
|
-
var
|
|
11
|
+
var _chunkQXCVA2LUcjs = require('./chunk-QXCVA2LU.cjs');
|
|
12
12
|
|
|
13
13
|
|
|
14
14
|
|
|
@@ -19,4 +19,4 @@ var _chunk4W6WRO3Scjs = require('./chunk-4W6WRO3S.cjs');
|
|
|
19
19
|
|
|
20
20
|
|
|
21
21
|
|
|
22
|
-
exports.aipeekPlugin =
|
|
22
|
+
exports.aipeekPlugin = _chunkQXCVA2LUcjs.aipeekPlugin; exports.compact = _chunkQXCVA2LUcjs.compact; exports.compactConsole = _chunkQXCVA2LUcjs.compactConsole; exports.compactErrors = _chunkQXCVA2LUcjs.compactErrors; exports.compactNetwork = _chunkQXCVA2LUcjs.compactNetwork; exports.compactState = _chunkQXCVA2LUcjs.compactState; exports.compactUI = _chunkQXCVA2LUcjs.compactUI; exports.detail = _chunkQXCVA2LUcjs.detail; exports.emit = _chunkQXCVA2LUcjs.emit;
|
package/dist/index.js
CHANGED
package/dist/plugin.cjs
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";Object.defineProperty(exports, "__esModule", {value: true});
|
|
2
2
|
|
|
3
|
-
var
|
|
3
|
+
var _chunkQXCVA2LUcjs = require('./chunk-QXCVA2LU.cjs');
|
|
4
4
|
|
|
5
5
|
|
|
6
|
-
exports.aipeekPlugin =
|
|
6
|
+
exports.aipeekPlugin = _chunkQXCVA2LUcjs.aipeekPlugin;
|
package/dist/plugin.js
CHANGED