@pinta-ai/pinta-copilot 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 (46) hide show
  1. package/CHANGELOG.md +59 -0
  2. package/LICENSE +136 -0
  3. package/README.md +116 -0
  4. package/dist/core/config.d.ts +15 -0
  5. package/dist/core/config.js +19 -0
  6. package/dist/core/config.js.map +1 -0
  7. package/dist/core/env-bridge.d.ts +25 -0
  8. package/dist/core/env-bridge.js +43 -0
  9. package/dist/core/env-bridge.js.map +1 -0
  10. package/dist/core/guard.d.ts +14 -0
  11. package/dist/core/guard.js +48 -0
  12. package/dist/core/guard.js.map +1 -0
  13. package/dist/core/otlp.d.ts +55 -0
  14. package/dist/core/otlp.js +184 -0
  15. package/dist/core/otlp.js.map +1 -0
  16. package/dist/core/redact.d.ts +57 -0
  17. package/dist/core/redact.js +149 -0
  18. package/dist/core/redact.js.map +1 -0
  19. package/dist/core/retry-queue.d.ts +26 -0
  20. package/dist/core/retry-queue.js +127 -0
  21. package/dist/core/retry-queue.js.map +1 -0
  22. package/dist/core/surface.d.ts +21 -0
  23. package/dist/core/surface.js +13 -0
  24. package/dist/core/surface.js.map +1 -0
  25. package/dist/core/trace.d.ts +20 -0
  26. package/dist/core/trace.js +80 -0
  27. package/dist/core/trace.js.map +1 -0
  28. package/dist/core/transport.d.ts +18 -0
  29. package/dist/core/transport.js +127 -0
  30. package/dist/core/transport.js.map +1 -0
  31. package/dist/core/types.d.ts +49 -0
  32. package/dist/core/types.js +124 -0
  33. package/dist/core/types.js.map +1 -0
  34. package/dist/env-file.d.ts +4 -0
  35. package/dist/env-file.js +69 -0
  36. package/dist/env-file.js.map +1 -0
  37. package/dist/index.d.ts +1 -0
  38. package/dist/index.js +71 -0
  39. package/dist/index.js.map +1 -0
  40. package/dist/tools/doctor.d.ts +1 -0
  41. package/dist/tools/doctor.js +81 -0
  42. package/dist/tools/doctor.js.map +1 -0
  43. package/dist/tools/install-hooks.d.ts +1 -0
  44. package/dist/tools/install-hooks.js +101 -0
  45. package/dist/tools/install-hooks.js.map +1 -0
  46. package/package.json +38 -0
@@ -0,0 +1,81 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ /**
7
+ * doctor — read-only health check for a pinta-copilot install.
8
+ *
9
+ * node dist/tools/doctor.js (or: npm run doctor)
10
+ *
11
+ * Verifies the hook file, env file / OTel endpoint, and the built adapter.
12
+ * Exits 1 if anything required is missing; 0 if healthy.
13
+ */
14
+ const node_fs_1 = __importDefault(require("node:fs"));
15
+ const node_os_1 = __importDefault(require("node:os"));
16
+ const node_path_1 = __importDefault(require("node:path"));
17
+ const surface_js_1 = require("../core/surface.js");
18
+ function copilotHome() {
19
+ return process.env.COPILOT_HOME || node_path_1.default.join(node_os_1.default.homedir(), ".copilot");
20
+ }
21
+ const checks = [];
22
+ function check(required, ok, label, detail) {
23
+ checks.push({ ok, label, detail, required });
24
+ }
25
+ const home = copilotHome();
26
+ const hookFile = node_path_1.default.join(home, "hooks", "pinta-copilot.json");
27
+ const envFile = node_path_1.default.join(home, "pinta-copilot.env");
28
+ const adapter = node_path_1.default.join(node_path_1.default.dirname(node_path_1.default.resolve(process.argv[1])), "..", "index.js");
29
+ // 1. adapter built
30
+ check(true, node_fs_1.default.existsSync(adapter), "adapter built (dist/index.js)", adapter);
31
+ // 2. hook file installed + points at this adapter
32
+ let hookOk = false;
33
+ let hookDetail = `${hookFile} (missing — run \`npm run install-hooks\`)`;
34
+ try {
35
+ const j = JSON.parse(node_fs_1.default.readFileSync(hookFile, "utf-8"));
36
+ const cmd = j?.hooks?.PreToolUse?.[0]?.command ?? "";
37
+ const events = Object.keys(j?.hooks ?? {}).length;
38
+ hookOk = cmd.includes("index.js");
39
+ hookDetail = `${hookFile} (${events} events)`;
40
+ }
41
+ catch {
42
+ /* missing */
43
+ }
44
+ check(true, hookOk, "hook file installed", hookDetail);
45
+ // 3. env file (optional) + OTel endpoint configured (required for telemetry)
46
+ const hasEnvFile = node_fs_1.default.existsSync(envFile);
47
+ check(false, hasEnvFile, "env file present", hasEnvFile ? envFile : `${envFile} (none — config may come from process.env)`);
48
+ let endpoint = process.env.COPILOT_PLUGIN_OPTION_ENDPOINT ||
49
+ process.env.OTEL_EXPORTER_OTLP_TRACES_ENDPOINT ||
50
+ process.env.OTEL_EXPORTER_OTLP_ENDPOINT;
51
+ if (!endpoint && hasEnvFile) {
52
+ const m = node_fs_1.default
53
+ .readFileSync(envFile, "utf-8")
54
+ .match(/(?:COPILOT_PLUGIN_OPTION_ENDPOINT|OTEL_EXPORTER_OTLP_(?:TRACES_)?ENDPOINT)=(.+)/);
55
+ if (m)
56
+ endpoint = m[1].trim();
57
+ }
58
+ check(true, Boolean(endpoint), "traces endpoint configured", endpoint || "(unset — spans will be dropped)");
59
+ // 4. guard endpoint (optional)
60
+ let guardEp = process.env.PINTA_GUARD_ENDPOINT;
61
+ if (!guardEp && hasEnvFile) {
62
+ const m = node_fs_1.default.readFileSync(envFile, "utf-8").match(/PINTA_GUARD_ENDPOINT=(.+)/);
63
+ if (m)
64
+ guardEp = m[1].trim();
65
+ }
66
+ check(false, Boolean(guardEp), "guard endpoint (optional)", guardEp || "(none — telemetry only, no allow/deny)");
67
+ // --- report ---
68
+ let failed = 0;
69
+ for (const c of checks) {
70
+ const mark = c.ok ? "✅" : c.required ? "❌" : "⚠️ ";
71
+ if (!c.ok && c.required)
72
+ failed++;
73
+ // eslint-disable-next-line no-console
74
+ console.log(`${mark} ${c.label}${c.detail ? ` — ${c.detail}` : ""}`);
75
+ }
76
+ // eslint-disable-next-line no-console
77
+ console.log(`\nsurface (this shell): ${(0, surface_js_1.detectSurface)()}`);
78
+ // eslint-disable-next-line no-console
79
+ console.log(failed === 0 ? "\nhealthy ✅" : `\n${failed} required check(s) failed ❌`);
80
+ process.exit(failed === 0 ? 0 : 1);
81
+ //# sourceMappingURL=doctor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"doctor.js","sourceRoot":"","sources":["../../src/tools/doctor.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,101 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ /**
7
+ * install-hooks — write the user-level Copilot hook file that points every
8
+ * event at this adapter's `dist/index.js` (D4: direct hook-file install,
9
+ * plugin auto-discovery channel unused).
10
+ *
11
+ * Target: `$COPILOT_HOME/hooks/pinta-copilot.json` (default `~/.copilot/hooks/`).
12
+ * One file fires on BOTH the Copilot CLI and the VS Code extension — no VS Code
13
+ * setting required (`chat.useClaudeHooks` default works, §9.7). Add the same
14
+ * file under a repo's `.github/hooks/` for cloud/repo-scoped runs (out of scope
15
+ * for now).
16
+ *
17
+ * Idempotent: re-running rewrites our file in place. `--uninstall` removes it.
18
+ * Absolute paths are baked in at install time because user-level hooks don't
19
+ * receive `${COPILOT_PLUGIN_ROOT}` substitution.
20
+ *
21
+ * Usage:
22
+ * node dist/tools/install-hooks.js [--dry-run] [--uninstall]
23
+ */
24
+ const node_fs_1 = __importDefault(require("node:fs"));
25
+ const node_os_1 = __importDefault(require("node:os"));
26
+ const node_path_1 = __importDefault(require("node:path"));
27
+ const HOOK_FILE = "pinta-copilot.json";
28
+ // Every event routes to the single adapter binary; it branches internally
29
+ // (telemetry for all; guard deny on PreToolUse + permissionRequest).
30
+ const EVENTS = [
31
+ "SessionStart",
32
+ "SessionEnd",
33
+ "UserPromptSubmit",
34
+ "PreToolUse",
35
+ "PostToolUse",
36
+ "PostToolUseFailure",
37
+ "Stop",
38
+ "SubagentStart",
39
+ "SubagentStop",
40
+ "PreCompact",
41
+ "Notification",
42
+ "permissionRequest",
43
+ ];
44
+ function copilotHome() {
45
+ return process.env.COPILOT_HOME || node_path_1.default.join(node_os_1.default.homedir(), ".copilot");
46
+ }
47
+ function hooksDir() {
48
+ return node_path_1.default.join(copilotHome(), "hooks");
49
+ }
50
+ /** Absolute path to dist/index.js. This script runs as dist/tools/install-hooks.js,
51
+ * so resolve relative to the invoked script path (CJS/ESM agnostic). */
52
+ function adapterEntry() {
53
+ const here = node_path_1.default.dirname(node_path_1.default.resolve(process.argv[1])); // .../dist/tools
54
+ return node_path_1.default.join(here, "..", "index.js"); // .../dist/index.js
55
+ }
56
+ function buildHooksFile() {
57
+ const cmd = `${process.execPath} ${adapterEntry()}`;
58
+ const hooks = {};
59
+ for (const ev of EVENTS) {
60
+ // Stamp the registered event name into env as a fail-safe discriminator —
61
+ // some payloads (CLI subagentStart) omit any hook-name field entirely.
62
+ hooks[ev] = [{ type: "command", command: cmd, env: { PINTA_COPILOT_EVENT: ev } }];
63
+ }
64
+ return JSON.stringify({
65
+ version: 1,
66
+ _note: "Managed by @pinta-ai/pinta-copilot install-hooks. Do not edit by hand.",
67
+ hooks,
68
+ }, null, 2) + "\n";
69
+ }
70
+ function main() {
71
+ const args = process.argv.slice(2);
72
+ const dryRun = args.includes("--dry-run");
73
+ const uninstall = args.includes("--uninstall");
74
+ const target = node_path_1.default.join(hooksDir(), HOOK_FILE);
75
+ if (uninstall) {
76
+ if (node_fs_1.default.existsSync(target)) {
77
+ if (!dryRun)
78
+ node_fs_1.default.rmSync(target);
79
+ console.log(`${dryRun ? "[dry-run] would remove" : "removed"}: ${target}`);
80
+ }
81
+ else {
82
+ console.log(`nothing to remove: ${target}`);
83
+ }
84
+ return;
85
+ }
86
+ const content = buildHooksFile();
87
+ if (node_fs_1.default.existsSync(target) && node_fs_1.default.readFileSync(target, "utf-8") === content) {
88
+ console.log(`already up to date: ${target}`);
89
+ return;
90
+ }
91
+ if (dryRun) {
92
+ console.log(`[dry-run] would write: ${target}\n${content}`);
93
+ return;
94
+ }
95
+ node_fs_1.default.mkdirSync(hooksDir(), { recursive: true });
96
+ node_fs_1.default.writeFileSync(target, content);
97
+ console.log(`installed: ${target}`);
98
+ console.log("→ restart the Copilot CLI / reload the VS Code window to load hooks.");
99
+ }
100
+ main();
101
+ //# sourceMappingURL=install-hooks.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"install-hooks.js","sourceRoot":"","sources":["../../src/tools/install-hooks.ts"],"names":[],"mappings":"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"}
package/package.json ADDED
@@ -0,0 +1,38 @@
1
+ {
2
+ "name": "@pinta-ai/pinta-copilot",
3
+ "version": "0.1.0",
4
+ "description": "Generic OTLP forwarder + guard for GitHub Copilot hook events (CLI + VS Code extension)",
5
+ "main": "dist/index.js",
6
+ "license": "PolyForm-Noncommercial-1.0.0",
7
+ "files": [
8
+ "dist",
9
+ "LICENSE",
10
+ "README.md",
11
+ "CHANGELOG.md"
12
+ ],
13
+ "repository": {
14
+ "type": "git",
15
+ "url": "git+https://github.com/pinta-ai/pinta-copilot.git"
16
+ },
17
+ "homepage": "https://github.com/pinta-ai/pinta-copilot#readme",
18
+ "bugs": {
19
+ "url": "https://github.com/pinta-ai/pinta-copilot/issues"
20
+ },
21
+ "scripts": {
22
+ "build": "tsc",
23
+ "dev": "tsc --watch",
24
+ "test": "vitest run",
25
+ "test:watch": "vitest",
26
+ "mock-server": "npx tsx tools/mock-server.ts",
27
+ "install-hooks": "node dist/tools/install-hooks.js",
28
+ "uninstall-hooks": "node dist/tools/install-hooks.js --uninstall",
29
+ "doctor": "node dist/tools/doctor.js",
30
+ "prepublishOnly": "npm run build"
31
+ },
32
+ "devDependencies": {
33
+ "@types/node": "^22.0.0",
34
+ "tsx": "^4.0.0",
35
+ "typescript": "^5.7.0",
36
+ "vitest": "^2.1.0"
37
+ }
38
+ }