@kenkaiiii/ggcoder-eyes 0.1.0

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 (41) hide show
  1. package/LICENSE +21 -0
  2. package/dist/cli.d.ts +3 -0
  3. package/dist/cli.d.ts.map +1 -0
  4. package/dist/cli.js +328 -0
  5. package/dist/cli.js.map +1 -0
  6. package/dist/index.d.ts +5 -0
  7. package/dist/index.d.ts.map +1 -0
  8. package/dist/index.js +3 -0
  9. package/dist/index.js.map +1 -0
  10. package/dist/journal.d.ts +40 -0
  11. package/dist/journal.d.ts.map +1 -0
  12. package/dist/journal.js +104 -0
  13. package/dist/journal.js.map +1 -0
  14. package/dist/manifest.d.ts +16 -0
  15. package/dist/manifest.d.ts.map +1 -0
  16. package/dist/manifest.js +17 -0
  17. package/dist/manifest.js.map +1 -0
  18. package/package.json +41 -0
  19. package/probes/capture_email/impl/mailpit.sh +77 -0
  20. package/probes/capture_email/install.sh +83 -0
  21. package/probes/capture_email/test.sh +43 -0
  22. package/probes/http/impl/curl.sh +64 -0
  23. package/probes/http/install.sh +19 -0
  24. package/probes/http/test.sh +39 -0
  25. package/probes/runtime_logs/detect.sh +38 -0
  26. package/probes/runtime_logs/impl/adb-logcat.sh +46 -0
  27. package/probes/runtime_logs/impl/docker.sh +51 -0
  28. package/probes/runtime_logs/impl/simctl.sh +42 -0
  29. package/probes/runtime_logs/impl/tail.sh +55 -0
  30. package/probes/runtime_logs/install.sh +36 -0
  31. package/probes/runtime_logs/test.sh +44 -0
  32. package/probes/visual/detect.sh +78 -0
  33. package/probes/visual/impl/adb.sh +28 -0
  34. package/probes/visual/impl/generic.sh +7 -0
  35. package/probes/visual/impl/playwright.sh +70 -0
  36. package/probes/visual/impl/simctl.sh +29 -0
  37. package/probes/visual/impl/window.sh +59 -0
  38. package/probes/visual/install.sh +87 -0
  39. package/probes/visual/test.sh +69 -0
  40. package/shared/_lib.sh +88 -0
  41. package/shared/_redact.sh +29 -0
package/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2025 KenKai
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/dist/cli.d.ts ADDED
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env node
2
+ export {};
3
+ //# sourceMappingURL=cli.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":""}
package/dist/cli.js ADDED
@@ -0,0 +1,328 @@
1
+ #!/usr/bin/env node
2
+ import { spawnSync } from "node:child_process";
3
+ import { existsSync, mkdirSync, readdirSync, readFileSync, writeFileSync } from "node:fs";
4
+ import { dirname, join, resolve } from "node:path";
5
+ import { fileURLToPath } from "node:url";
6
+ import { appendEntry, isEyesActive, journalCount, readJournal, updateEntry, } from "./journal.js";
7
+ import { readManifest as readManifestShared } from "./manifest.js";
8
+ // In dev: __dirname = packages/ggcoder-eyes/src. After build: dist/.
9
+ // Probes + shared live at ../probes and ../shared relative to the built file.
10
+ const __dirname = dirname(fileURLToPath(import.meta.url));
11
+ const PKG_ROOT = resolve(__dirname, "..");
12
+ const PROBES_DIR = join(PKG_ROOT, "probes");
13
+ const SHARED_DIR = join(PKG_ROOT, "shared");
14
+ const EYES_DIR = resolve(process.cwd(), ".gg/eyes");
15
+ const MANIFEST = join(EYES_DIR, "manifest.json");
16
+ const GITIGNORE_ENTRIES = [
17
+ ".gg/eyes/out/",
18
+ ".gg/eyes/state/",
19
+ ".gg/eyes/bin/",
20
+ ".gg/eyes/recordings/",
21
+ ".gg/eyes/auth/",
22
+ ".gg/eyes/remote.json",
23
+ ".gg/eyes/_lib.sh",
24
+ ".gg/eyes/_redact.sh",
25
+ ];
26
+ function readManifest() {
27
+ return readManifestShared(process.cwd());
28
+ }
29
+ function writeManifest(m) {
30
+ mkdirSync(EYES_DIR, { recursive: true });
31
+ writeFileSync(MANIFEST, JSON.stringify(m, null, 2));
32
+ }
33
+ function ensureGitignore() {
34
+ const gi = resolve(process.cwd(), ".gitignore");
35
+ const existing = existsSync(gi) ? readFileSync(gi, "utf8") : "";
36
+ const missing = GITIGNORE_ENTRIES.filter((e) => !existing.includes(e));
37
+ if (missing.length) {
38
+ const suffix = (existing.endsWith("\n") || !existing ? "" : "\n") +
39
+ "\n# ggcoder-eyes\n" +
40
+ missing.join("\n") +
41
+ "\n";
42
+ writeFileSync(gi, existing + suffix);
43
+ }
44
+ }
45
+ function sh(cmd, args, opts = {}) {
46
+ const r = spawnSync(cmd, args, {
47
+ cwd: opts.cwd ?? process.cwd(),
48
+ env: { ...process.env, EYES_PROJECT_ROOT: process.cwd(), ...(opts.env ?? {}) },
49
+ stdio: ["ignore", "pipe", "inherit"],
50
+ encoding: "utf8",
51
+ });
52
+ return { stdout: r.stdout?.trim() ?? "", code: r.status ?? 1 };
53
+ }
54
+ function capabilityDirs() {
55
+ return readdirSync(PROBES_DIR).filter((d) => {
56
+ const p = join(PROBES_DIR, d);
57
+ return existsSync(join(p, "install.sh"));
58
+ });
59
+ }
60
+ function doInit() {
61
+ mkdirSync(EYES_DIR, { recursive: true });
62
+ mkdirSync(join(EYES_DIR, "out"), { recursive: true });
63
+ mkdirSync(join(EYES_DIR, "state"), { recursive: true });
64
+ mkdirSync(join(EYES_DIR, "bin"), { recursive: true });
65
+ // Copy shared infra
66
+ for (const f of ["_lib.sh", "_redact.sh"]) {
67
+ const src = join(SHARED_DIR, f);
68
+ const dst = join(EYES_DIR, f);
69
+ writeFileSync(dst, readFileSync(src));
70
+ sh("chmod", ["+x", dst]);
71
+ }
72
+ ensureGitignore();
73
+ if (!existsSync(MANIFEST))
74
+ writeManifest({ version: 1, probes: [] });
75
+ console.log(`initialized: ${EYES_DIR}`);
76
+ }
77
+ function doDetect() {
78
+ const out = {};
79
+ for (const cap of capabilityDirs()) {
80
+ const detect = join(PROBES_DIR, cap, "detect.sh");
81
+ if (!existsSync(detect)) {
82
+ // Universal capabilities without detect.sh (e.g. http) — single universal impl.
83
+ out[cap] = { candidates: ["*"], primary: "*" };
84
+ continue;
85
+ }
86
+ const r = sh("bash", [detect]);
87
+ if (r.code === 0 && r.stdout) {
88
+ try {
89
+ out[cap] = JSON.parse(r.stdout);
90
+ }
91
+ catch {
92
+ out[cap] = { candidates: [], primary: "" };
93
+ }
94
+ }
95
+ else {
96
+ out[cap] = { candidates: [], primary: "" };
97
+ }
98
+ }
99
+ console.log(JSON.stringify(out, null, 2));
100
+ }
101
+ function doInstall(args) {
102
+ const cap = args[0];
103
+ if (!cap) {
104
+ console.error("usage: ggcoder-eyes install <capability> [--impl <name>] [--as <script-name>]");
105
+ process.exit(1);
106
+ }
107
+ let impl;
108
+ let asName;
109
+ for (let i = 1; i < args.length; i++) {
110
+ if (args[i] === "--impl")
111
+ impl = args[++i];
112
+ else if (args[i] === "--as")
113
+ asName = args[++i];
114
+ }
115
+ const capDir = join(PROBES_DIR, cap);
116
+ if (!existsSync(capDir)) {
117
+ console.error(`unknown capability: ${cap}. known: ${capabilityDirs().join(", ")}`);
118
+ process.exit(1);
119
+ }
120
+ // If no impl given, consult detect.sh
121
+ if (!impl) {
122
+ const detectPath = join(capDir, "detect.sh");
123
+ if (existsSync(detectPath)) {
124
+ const r = sh("bash", [detectPath]);
125
+ try {
126
+ impl = JSON.parse(r.stdout).primary;
127
+ }
128
+ catch {
129
+ /* fall through */
130
+ }
131
+ }
132
+ else {
133
+ // Universal probe — pick the only impl
134
+ const impls = readdirSync(join(capDir, "impl")).filter((f) => f.endsWith(".sh"));
135
+ if (impls.length === 1)
136
+ impl = impls[0].replace(/\.sh$/, "");
137
+ }
138
+ }
139
+ if (!impl) {
140
+ console.error(`could not auto-detect impl for ${cap}; pass --impl <name>`);
141
+ process.exit(1);
142
+ }
143
+ // Ensure .gg/eyes exists + shared is present
144
+ doInit();
145
+ const installArgs = [join(capDir, "install.sh"), impl];
146
+ if (asName)
147
+ installArgs.push("--as", asName);
148
+ const r = spawnSync("bash", installArgs, {
149
+ stdio: "inherit",
150
+ env: { ...process.env, EYES_PROJECT_ROOT: process.cwd() },
151
+ });
152
+ if (r.status !== 0) {
153
+ console.error(`install failed for ${cap}/${impl}`);
154
+ process.exit(r.status ?? 1);
155
+ }
156
+ // Record in manifest
157
+ const m = readManifest();
158
+ const name = asName ?? cap;
159
+ const script = `.gg/eyes/${name}.sh`;
160
+ const existing = m.probes.findIndex((p) => p.name === name);
161
+ const entry = { capability: cap, name, impl, script, status: "built" };
162
+ if (existing >= 0)
163
+ m.probes[existing] = entry;
164
+ else
165
+ m.probes.push(entry);
166
+ writeManifest(m);
167
+ console.log(`installed ${cap}/${impl} as ${script}`);
168
+ }
169
+ function doVerify(args) {
170
+ const target = args[0];
171
+ const m = readManifest();
172
+ const targets = target
173
+ ? m.probes.filter((p) => p.name === target)
174
+ : m.probes.filter((p) => p.status === "built");
175
+ if (!targets.length) {
176
+ console.log("no built probes to verify");
177
+ return;
178
+ }
179
+ for (const p of targets) {
180
+ const testPath = join(PROBES_DIR, p.capability, "test.sh");
181
+ if (!existsSync(testPath)) {
182
+ console.log(`- ${p.name}: no test.sh, skipping`);
183
+ continue;
184
+ }
185
+ const r = spawnSync("bash", [testPath, p.name], {
186
+ stdio: "inherit",
187
+ env: { ...process.env, EYES_PROJECT_ROOT: process.cwd() },
188
+ });
189
+ if (r.status === 0) {
190
+ p.status = "verified";
191
+ delete p.error;
192
+ console.log(`✓ ${p.name}`);
193
+ }
194
+ else {
195
+ p.status = "failed";
196
+ p.error = `test.sh exit ${r.status}`;
197
+ console.log(`✗ ${p.name} (exit ${r.status})`);
198
+ }
199
+ }
200
+ writeManifest(m);
201
+ }
202
+ function doList() {
203
+ const m = readManifest();
204
+ if (!m.probes.length) {
205
+ console.log("no probes installed. run: ggcoder-eyes detect | install <capability>");
206
+ return;
207
+ }
208
+ for (const p of m.probes) {
209
+ const flag = p.status === "verified" ? "✓" : p.status === "failed" ? "✗" : "·";
210
+ console.log(`${flag} ${p.name.padEnd(20)} ${p.capability.padEnd(18)} ${p.impl.padEnd(12)} ${p.status}${p.error ? ` (${p.error})` : ""}`);
211
+ }
212
+ }
213
+ const LOG_KINDS = new Set(["rough", "wish", "blocked"]);
214
+ const LOG_STATUSES = new Set(["open", "deferred", "acked"]);
215
+ function doLog(args) {
216
+ const sub = args[0];
217
+ if (!sub) {
218
+ console.error("usage: ggcoder-eyes log <rough|wish|blocked|ack|defer|list|count> ...");
219
+ process.exit(1);
220
+ }
221
+ // Gate: non-eyes projects get silent no-ops for all log subcommands.
222
+ // Reads return empty / zero; writes do nothing. Exit code is always 0 so
223
+ // callers (probes, hooks) can invoke freely without branching on setup state.
224
+ if (!isEyesActive(process.cwd())) {
225
+ if (sub === "list")
226
+ console.log("[]");
227
+ else if (sub === "count")
228
+ console.log("0");
229
+ return;
230
+ }
231
+ if (LOG_KINDS.has(sub)) {
232
+ const reason = args[1];
233
+ if (!reason) {
234
+ console.error(`usage: ggcoder-eyes log ${sub} "<reason>" [--probe <name>]`);
235
+ process.exit(1);
236
+ }
237
+ let probe;
238
+ for (let i = 2; i < args.length; i++) {
239
+ if (args[i] === "--probe")
240
+ probe = args[++i];
241
+ }
242
+ const entry = appendEntry({ kind: sub, reason, probe });
243
+ if (entry)
244
+ console.log(entry.id);
245
+ return;
246
+ }
247
+ if (sub === "ack" || sub === "defer") {
248
+ const id = args[1];
249
+ if (!id) {
250
+ console.error(`usage: ggcoder-eyes log ${sub} <id>`);
251
+ process.exit(1);
252
+ }
253
+ const ok = updateEntry(id, { status: sub === "ack" ? "acked" : "deferred" });
254
+ if (!ok) {
255
+ console.error(`no entry with id: ${id}`);
256
+ process.exit(1);
257
+ }
258
+ console.log(`${sub}: ${id}`);
259
+ return;
260
+ }
261
+ if (sub === "list" || sub === "count") {
262
+ let status;
263
+ let kind;
264
+ let limit;
265
+ for (let i = 1; i < args.length; i++) {
266
+ const flag = args[i];
267
+ const val = args[++i];
268
+ if (flag === "--status" && LOG_STATUSES.has(val))
269
+ status = val;
270
+ else if (flag === "--kind" && LOG_KINDS.has(val))
271
+ kind = val;
272
+ else if (flag === "--limit")
273
+ limit = Number(val);
274
+ }
275
+ if (sub === "count") {
276
+ console.log(String(journalCount({ status, kind })));
277
+ }
278
+ else {
279
+ const entries = readJournal({ status, kind, limit, order: "desc" });
280
+ console.log(JSON.stringify(entries, null, 2));
281
+ }
282
+ return;
283
+ }
284
+ console.error(`unknown log subcommand: ${sub}`);
285
+ process.exit(1);
286
+ }
287
+ const cmd = process.argv[2];
288
+ const args = process.argv.slice(3);
289
+ switch (cmd) {
290
+ case "init":
291
+ doInit();
292
+ break;
293
+ case "detect":
294
+ doDetect();
295
+ break;
296
+ case "install":
297
+ doInstall(args);
298
+ break;
299
+ case "verify":
300
+ doVerify(args);
301
+ break;
302
+ case "list":
303
+ doList();
304
+ break;
305
+ case "log":
306
+ doLog(args);
307
+ break;
308
+ default:
309
+ console.error(`usage: ggcoder-eyes <command>
310
+
311
+ commands:
312
+ init create .gg/eyes/, copy shared infra, update .gitignore
313
+ detect emit JSON of capability → {candidates, primary}
314
+ install <cap> [--impl <name>] [--as <name>]
315
+ install deps + copy probe into .gg/eyes/
316
+ verify [<name>] run probe self-tests, update manifest
317
+ list show installed probes and their status
318
+ log <rough|wish|blocked> "<reason>" [--probe <name>]
319
+ append a journal entry (silent no-op if eyes not set up)
320
+ log <ack|defer> <id> change an entry's status
321
+ log list [--status S] [--kind K] [--limit N]
322
+ emit JSON array of journal entries
323
+ log count [--status S] [--kind K]
324
+ print count to stdout
325
+ `.trim());
326
+ process.exit(cmd ? 1 : 0);
327
+ }
328
+ //# sourceMappingURL=cli.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ export { isEyesActive, eyesRoot, manifestPath, journalPath, appendEntry, readJournal, journalCount, updateEntry, genId, } from "./journal.js";
2
+ export type { JournalEntry, JournalKind, JournalStatus } from "./journal.js";
3
+ export { readManifest } from "./manifest.js";
4
+ export type { Manifest, ProbeEntry, ProbeStatus } from "./manifest.js";
5
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,YAAY,EACZ,QAAQ,EACR,YAAY,EACZ,WAAW,EACX,WAAW,EACX,WAAW,EACX,YAAY,EACZ,WAAW,EACX,KAAK,GACN,MAAM,cAAc,CAAC;AAEtB,YAAY,EAAE,YAAY,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAE7E,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAC7C,YAAY,EAAE,QAAQ,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,3 @@
1
+ export { isEyesActive, eyesRoot, manifestPath, journalPath, appendEntry, readJournal, journalCount, updateEntry, genId, } from "./journal.js";
2
+ export { readManifest } from "./manifest.js";
3
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,YAAY,EACZ,QAAQ,EACR,YAAY,EACZ,WAAW,EACX,WAAW,EACX,WAAW,EACX,YAAY,EACZ,WAAW,EACX,KAAK,GACN,MAAM,cAAc,CAAC;AAItB,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC"}
@@ -0,0 +1,40 @@
1
+ export type JournalKind = "rough" | "wish" | "blocked";
2
+ export type JournalStatus = "open" | "deferred" | "acked";
3
+ export type JournalEntry = {
4
+ id: string;
5
+ ts: string;
6
+ kind: JournalKind;
7
+ reason: string;
8
+ probe?: string;
9
+ status: JournalStatus;
10
+ };
11
+ export declare function eyesRoot(cwd?: string): string;
12
+ export declare function manifestPath(cwd?: string): string;
13
+ export declare function journalPath(cwd?: string): string;
14
+ /** Single gate for every eyes-related runtime behavior. If this returns false,
15
+ * the project has not been set up with `/eyes` and all integrations no-op. */
16
+ export declare function isEyesActive(cwd?: string): boolean;
17
+ export declare function genId(): string;
18
+ type AppendInput = {
19
+ kind: JournalKind;
20
+ reason: string;
21
+ probe?: string;
22
+ status?: JournalStatus;
23
+ };
24
+ export declare function appendEntry(input: AppendInput, cwd?: string): JournalEntry | null;
25
+ type ReadOptions = {
26
+ status?: JournalStatus;
27
+ kind?: JournalKind;
28
+ limit?: number;
29
+ order?: "asc" | "desc";
30
+ };
31
+ export declare function readJournal(options?: ReadOptions, cwd?: string): JournalEntry[];
32
+ export declare function journalCount(options?: {
33
+ status?: JournalStatus;
34
+ kind?: JournalKind;
35
+ }, cwd?: string): number;
36
+ /** Rewrite-based update. Journal is expected to stay small (tens to low
37
+ * hundreds of entries); a full rewrite is fine. */
38
+ export declare function updateEntry(id: string, patch: Partial<Pick<JournalEntry, "status" | "reason">>, cwd?: string): boolean;
39
+ export {};
40
+ //# sourceMappingURL=journal.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"journal.d.ts","sourceRoot":"","sources":["../src/journal.ts"],"names":[],"mappings":"AAIA,MAAM,MAAM,WAAW,GAAG,OAAO,GAAG,MAAM,GAAG,SAAS,CAAC;AACvD,MAAM,MAAM,aAAa,GAAG,MAAM,GAAG,UAAU,GAAG,OAAO,CAAC;AAE1D,MAAM,MAAM,YAAY,GAAG;IACzB,EAAE,EAAE,MAAM,CAAC;IACX,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,WAAW,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,aAAa,CAAC;CACvB,CAAC;AAEF,wBAAgB,QAAQ,CAAC,GAAG,GAAE,MAAsB,GAAG,MAAM,CAE5D;AAED,wBAAgB,YAAY,CAAC,GAAG,GAAE,MAAsB,GAAG,MAAM,CAEhE;AAED,wBAAgB,WAAW,CAAC,GAAG,GAAE,MAAsB,GAAG,MAAM,CAE/D;AAED;8EAC8E;AAC9E,wBAAgB,YAAY,CAAC,GAAG,GAAE,MAAsB,GAAG,OAAO,CAEjE;AAED,wBAAgB,KAAK,IAAI,MAAM,CAM9B;AAED,KAAK,WAAW,GAAG;IACjB,IAAI,EAAE,WAAW,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,aAAa,CAAC;CACxB,CAAC;AAEF,wBAAgB,WAAW,CAAC,KAAK,EAAE,WAAW,EAAE,GAAG,GAAE,MAAsB,GAAG,YAAY,GAAG,IAAI,CAchG;AAED,KAAK,WAAW,GAAG;IACjB,MAAM,CAAC,EAAE,aAAa,CAAC;IACvB,IAAI,CAAC,EAAE,WAAW,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,KAAK,GAAG,MAAM,CAAC;CACxB,CAAC;AAEF,wBAAgB,WAAW,CACzB,OAAO,GAAE,WAAgB,EACzB,GAAG,GAAE,MAAsB,GAC1B,YAAY,EAAE,CAoBhB;AAED,wBAAgB,YAAY,CAC1B,OAAO,GAAE;IAAE,MAAM,CAAC,EAAE,aAAa,CAAC;IAAC,IAAI,CAAC,EAAE,WAAW,CAAA;CAAO,EAC5D,GAAG,GAAE,MAAsB,GAC1B,MAAM,CAER;AAED;mDACmD;AACnD,wBAAgB,WAAW,CACzB,EAAE,EAAE,MAAM,EACV,KAAK,EAAE,OAAO,CAAC,IAAI,CAAC,YAAY,EAAE,QAAQ,GAAG,QAAQ,CAAC,CAAC,EACvD,GAAG,GAAE,MAAsB,GAC1B,OAAO,CAuBT"}
@@ -0,0 +1,104 @@
1
+ import { appendFileSync, existsSync, mkdirSync, readFileSync, writeFileSync } from "node:fs";
2
+ import { dirname, resolve } from "node:path";
3
+ import { randomBytes } from "node:crypto";
4
+ export function eyesRoot(cwd = process.cwd()) {
5
+ return resolve(cwd, ".gg/eyes");
6
+ }
7
+ export function manifestPath(cwd = process.cwd()) {
8
+ return resolve(eyesRoot(cwd), "manifest.json");
9
+ }
10
+ export function journalPath(cwd = process.cwd()) {
11
+ return resolve(eyesRoot(cwd), "journal.jsonl");
12
+ }
13
+ /** Single gate for every eyes-related runtime behavior. If this returns false,
14
+ * the project has not been set up with `/eyes` and all integrations no-op. */
15
+ export function isEyesActive(cwd = process.cwd()) {
16
+ return existsSync(manifestPath(cwd));
17
+ }
18
+ export function genId() {
19
+ const ts = new Date()
20
+ .toISOString()
21
+ .replace(/[-:.TZ]/g, "")
22
+ .slice(0, 15);
23
+ return `${ts}-${randomBytes(2).toString("hex")}`;
24
+ }
25
+ export function appendEntry(input, cwd = process.cwd()) {
26
+ if (!isEyesActive(cwd))
27
+ return null;
28
+ const entry = {
29
+ id: genId(),
30
+ ts: new Date().toISOString(),
31
+ kind: input.kind,
32
+ reason: input.reason,
33
+ status: input.status ?? "open",
34
+ ...(input.probe ? { probe: input.probe } : {}),
35
+ };
36
+ const p = journalPath(cwd);
37
+ mkdirSync(dirname(p), { recursive: true });
38
+ appendFileSync(p, JSON.stringify(entry) + "\n");
39
+ return entry;
40
+ }
41
+ export function readJournal(options = {}, cwd = process.cwd()) {
42
+ if (!isEyesActive(cwd))
43
+ return [];
44
+ const p = journalPath(cwd);
45
+ if (!existsSync(p))
46
+ return [];
47
+ const text = readFileSync(p, "utf8");
48
+ let entries = [];
49
+ for (const line of text.split("\n")) {
50
+ const trimmed = line.trim();
51
+ if (!trimmed)
52
+ continue;
53
+ try {
54
+ entries.push(JSON.parse(trimmed));
55
+ }
56
+ catch {
57
+ // skip malformed — logs are append-only, don't die on one bad line
58
+ }
59
+ }
60
+ if (options.status)
61
+ entries = entries.filter((e) => e.status === options.status);
62
+ if (options.kind)
63
+ entries = entries.filter((e) => e.kind === options.kind);
64
+ if (options.order === "desc")
65
+ entries.reverse();
66
+ if (typeof options.limit === "number")
67
+ entries = entries.slice(0, options.limit);
68
+ return entries;
69
+ }
70
+ export function journalCount(options = {}, cwd = process.cwd()) {
71
+ return readJournal(options, cwd).length;
72
+ }
73
+ /** Rewrite-based update. Journal is expected to stay small (tens to low
74
+ * hundreds of entries); a full rewrite is fine. */
75
+ export function updateEntry(id, patch, cwd = process.cwd()) {
76
+ if (!isEyesActive(cwd))
77
+ return false;
78
+ const p = journalPath(cwd);
79
+ if (!existsSync(p))
80
+ return false;
81
+ const lines = readFileSync(p, "utf8").split("\n");
82
+ let found = false;
83
+ const next = lines.map((line) => {
84
+ const trimmed = line.trim();
85
+ if (!trimmed)
86
+ return line;
87
+ try {
88
+ const entry = JSON.parse(trimmed);
89
+ if (entry.id === id) {
90
+ found = true;
91
+ return JSON.stringify({ ...entry, ...patch });
92
+ }
93
+ return line;
94
+ }
95
+ catch {
96
+ return line;
97
+ }
98
+ });
99
+ if (!found)
100
+ return false;
101
+ writeFileSync(p, next.join("\n"));
102
+ return true;
103
+ }
104
+ //# sourceMappingURL=journal.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"journal.js","sourceRoot":"","sources":["../src/journal.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,16 @@
1
+ export type ProbeStatus = "pending" | "built" | "verified" | "failed";
2
+ export type ProbeEntry = {
3
+ capability: string;
4
+ name: string;
5
+ impl: string;
6
+ script: string;
7
+ status: ProbeStatus;
8
+ error?: string;
9
+ };
10
+ export type Manifest = {
11
+ version: 1;
12
+ phase_completed?: "research" | "design" | "build" | "verify" | "document";
13
+ probes: ProbeEntry[];
14
+ };
15
+ export declare function readManifest(cwd?: string): Manifest;
16
+ //# sourceMappingURL=manifest.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"manifest.d.ts","sourceRoot":"","sources":["../src/manifest.ts"],"names":[],"mappings":"AAGA,MAAM,MAAM,WAAW,GAAG,SAAS,GAAG,OAAO,GAAG,UAAU,GAAG,QAAQ,CAAC;AAEtE,MAAM,MAAM,UAAU,GAAG;IACvB,UAAU,EAAE,MAAM,CAAC;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,WAAW,CAAC;IACpB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,CAAC;AAEF,MAAM,MAAM,QAAQ,GAAG;IACrB,OAAO,EAAE,CAAC,CAAC;IACX,eAAe,CAAC,EAAE,UAAU,GAAG,QAAQ,GAAG,OAAO,GAAG,QAAQ,GAAG,UAAU,CAAC;IAC1E,MAAM,EAAE,UAAU,EAAE,CAAC;CACtB,CAAC;AAIF,wBAAgB,YAAY,CAAC,GAAG,GAAE,MAAsB,GAAG,QAAQ,CASlE"}
@@ -0,0 +1,17 @@
1
+ import { existsSync, readFileSync } from "node:fs";
2
+ import { isEyesActive, manifestPath } from "./journal.js";
3
+ const EMPTY = { version: 1, probes: [] };
4
+ export function readManifest(cwd = process.cwd()) {
5
+ if (!isEyesActive(cwd))
6
+ return EMPTY;
7
+ const p = manifestPath(cwd);
8
+ if (!existsSync(p))
9
+ return EMPTY;
10
+ try {
11
+ return JSON.parse(readFileSync(p, "utf8"));
12
+ }
13
+ catch {
14
+ return EMPTY;
15
+ }
16
+ }
17
+ //# sourceMappingURL=manifest.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"manifest.js","sourceRoot":"","sources":["../src/manifest.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACnD,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAmB1D,MAAM,KAAK,GAAa,EAAE,OAAO,EAAE,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC;AAEnD,MAAM,UAAU,YAAY,CAAC,MAAc,OAAO,CAAC,GAAG,EAAE;IACtD,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC;QAAE,OAAO,KAAK,CAAC;IACrC,MAAM,CAAC,GAAG,YAAY,CAAC,GAAG,CAAC,CAAC;IAC5B,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC;QAAE,OAAO,KAAK,CAAC;IACjC,IAAI,CAAC;QACH,OAAO,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC,EAAE,MAAM,CAAC,CAAa,CAAC;IACzD,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC"}
package/package.json ADDED
@@ -0,0 +1,41 @@
1
+ {
2
+ "name": "@kenkaiiii/ggcoder-eyes",
3
+ "version": "0.1.0",
4
+ "type": "module",
5
+ "description": "Project-agnostic perception probes for coding agents — screenshots, logs, APIs, capture sinks",
6
+ "license": "MIT",
7
+ "repository": {
8
+ "type": "git",
9
+ "url": "git+https://github.com/kenkaiiii/gg-framework.git",
10
+ "directory": "packages/ggcoder-eyes"
11
+ },
12
+ "bin": {
13
+ "ggcoder-eyes": "./dist/cli.js"
14
+ },
15
+ "exports": {
16
+ ".": {
17
+ "types": "./dist/index.d.ts",
18
+ "import": "./dist/index.js"
19
+ },
20
+ "./cli": "./dist/cli.js",
21
+ "./package.json": "./package.json"
22
+ },
23
+ "main": "./dist/index.js",
24
+ "types": "./dist/index.d.ts",
25
+ "files": [
26
+ "dist",
27
+ "probes",
28
+ "shared"
29
+ ],
30
+ "devDependencies": {
31
+ "typescript": "^5.9.3",
32
+ "@types/node": "^22.0.0"
33
+ },
34
+ "publishConfig": {
35
+ "access": "public"
36
+ },
37
+ "scripts": {
38
+ "build": "tsc && chmod +x dist/cli.js || true",
39
+ "check": "tsc --noEmit"
40
+ }
41
+ }