@pinta-ai/pinta-cc 1.4.1 → 1.5.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/.claude-plugin/plugin.json +1 -1
- package/CHANGELOG.md +23 -0
- package/dist/index.js +14 -71
- package/package.json +9 -2
- package/dist/core/config.d.ts +0 -13
- package/dist/core/config.js +0 -22
- package/dist/core/config.js.map +0 -1
- package/dist/core/env-bridge.d.ts +0 -25
- package/dist/core/env-bridge.js +0 -43
- package/dist/core/env-bridge.js.map +0 -1
- package/dist/core/guard.d.ts +0 -14
- package/dist/core/guard.js +0 -51
- package/dist/core/guard.js.map +0 -1
- package/dist/core/identity.d.ts +0 -1
- package/dist/core/identity.js +0 -3
- package/dist/core/identity.js.map +0 -1
- package/dist/core/otlp.d.ts +0 -59
- package/dist/core/otlp.js +0 -224
- package/dist/core/otlp.js.map +0 -1
- package/dist/core/redact.d.ts +0 -57
- package/dist/core/redact.js +0 -149
- package/dist/core/redact.js.map +0 -1
- package/dist/core/retry-queue.d.ts +0 -26
- package/dist/core/retry-queue.js +0 -127
- package/dist/core/retry-queue.js.map +0 -1
- package/dist/core/trace.d.ts +0 -10
- package/dist/core/trace.js +0 -61
- package/dist/core/trace.js.map +0 -1
- package/dist/core/transport.d.ts +0 -18
- package/dist/core/transport.js +0 -125
- package/dist/core/transport.js.map +0 -1
- package/dist/core/types.d.ts +0 -65
- package/dist/core/types.js +0 -39
- package/dist/core/types.js.map +0 -1
- package/dist/env-file.d.ts +0 -9
- package/dist/env-file.js +0 -85
- package/dist/env-file.js.map +0 -1
- package/dist/handlers/default.d.ts +0 -6
- package/dist/handlers/default.js +0 -11
- package/dist/handlers/default.js.map +0 -1
- package/dist/handlers/permission.d.ts +0 -3
- package/dist/handlers/permission.js +0 -15
- package/dist/handlers/permission.js.map +0 -1
- package/dist/handlers/post-tool-use.d.ts +0 -3
- package/dist/handlers/post-tool-use.js +0 -15
- package/dist/handlers/post-tool-use.js.map +0 -1
- package/dist/handlers/pre-tool-use.d.ts +0 -3
- package/dist/handlers/pre-tool-use.js +0 -40
- package/dist/handlers/pre-tool-use.js.map +0 -1
- package/dist/handlers/session.d.ts +0 -3
- package/dist/handlers/session.js +0 -15
- package/dist/handlers/session.js.map +0 -1
- package/dist/handlers/stop.d.ts +0 -3
- package/dist/handlers/stop.js +0 -15
- package/dist/handlers/stop.js.map +0 -1
- package/dist/handlers/subagent.d.ts +0 -3
- package/dist/handlers/subagent.js +0 -15
- package/dist/handlers/subagent.js.map +0 -1
- package/dist/handlers/user-prompt.d.ts +0 -3
- package/dist/handlers/user-prompt.js +0 -15
- package/dist/handlers/user-prompt.js.map +0 -1
- package/dist/index.d.ts +0 -1
- package/dist/index.js.map +0 -1
package/dist/core/trace.js
DELETED
|
@@ -1,61 +0,0 @@
|
|
|
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
|
-
exports.TraceManager = void 0;
|
|
7
|
-
const fs_1 = __importDefault(require("fs"));
|
|
8
|
-
const path_1 = __importDefault(require("path"));
|
|
9
|
-
const crypto_1 = __importDefault(require("crypto"));
|
|
10
|
-
const CROCKFORD = "0123456789ABCDEFGHJKMNPQRSTVWXYZ";
|
|
11
|
-
function generateUlid() {
|
|
12
|
-
const now = Date.now();
|
|
13
|
-
// 10 chars timestamp (48-bit ms)
|
|
14
|
-
let ts = "";
|
|
15
|
-
let t = now;
|
|
16
|
-
for (let i = 0; i < 10; i++) {
|
|
17
|
-
ts = CROCKFORD[t & 31] + ts;
|
|
18
|
-
t = Math.floor(t / 32);
|
|
19
|
-
}
|
|
20
|
-
// 16 chars randomness (80-bit)
|
|
21
|
-
const rand = crypto_1.default.randomBytes(10);
|
|
22
|
-
let r = "";
|
|
23
|
-
for (let i = 0; i < 10; i++) {
|
|
24
|
-
r += CROCKFORD[rand[i] & 31];
|
|
25
|
-
}
|
|
26
|
-
// pad to 16 chars
|
|
27
|
-
while (r.length < 16)
|
|
28
|
-
r += CROCKFORD[0];
|
|
29
|
-
return ts + r;
|
|
30
|
-
}
|
|
31
|
-
class TraceManager {
|
|
32
|
-
tracePath;
|
|
33
|
-
constructor(config) {
|
|
34
|
-
this.tracePath = config.tracePath;
|
|
35
|
-
}
|
|
36
|
-
/** UserPromptSubmit 시 새 traceId 생성 및 저장 */
|
|
37
|
-
newTrace() {
|
|
38
|
-
const traceId = generateUlid();
|
|
39
|
-
this.save(traceId);
|
|
40
|
-
return traceId;
|
|
41
|
-
}
|
|
42
|
-
/** 현재 traceId 반환. 없으면 새로 생성 */
|
|
43
|
-
currentTrace() {
|
|
44
|
-
try {
|
|
45
|
-
const data = fs_1.default.readFileSync(this.tracePath, "utf-8");
|
|
46
|
-
const { traceId } = JSON.parse(data);
|
|
47
|
-
if (traceId)
|
|
48
|
-
return traceId;
|
|
49
|
-
}
|
|
50
|
-
catch {
|
|
51
|
-
// no trace file yet
|
|
52
|
-
}
|
|
53
|
-
return this.newTrace();
|
|
54
|
-
}
|
|
55
|
-
save(traceId) {
|
|
56
|
-
fs_1.default.mkdirSync(path_1.default.dirname(this.tracePath), { recursive: true });
|
|
57
|
-
fs_1.default.writeFileSync(this.tracePath, JSON.stringify({ traceId }));
|
|
58
|
-
}
|
|
59
|
-
}
|
|
60
|
-
exports.TraceManager = TraceManager;
|
|
61
|
-
//# sourceMappingURL=trace.js.map
|
package/dist/core/trace.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"trace.js","sourceRoot":"","sources":["../../src/core/trace.ts"],"names":[],"mappings":";;;;;;AAAA,4CAAoB;AACpB,gDAAwB;AACxB,oDAA4B;AAG5B,MAAM,SAAS,GAAG,kCAAkC,CAAC;AAErD,SAAS,YAAY;IACnB,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IACvB,iCAAiC;IACjC,IAAI,EAAE,GAAG,EAAE,CAAC;IACZ,IAAI,CAAC,GAAG,GAAG,CAAC;IACZ,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC;QAC5B,EAAE,GAAG,SAAS,CAAC,CAAC,GAAG,EAAE,CAAC,GAAG,EAAE,CAAC;QAC5B,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC;IACzB,CAAC;IACD,+BAA+B;IAC/B,MAAM,IAAI,GAAG,gBAAM,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC;IACpC,IAAI,CAAC,GAAG,EAAE,CAAC;IACX,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC;QAC5B,CAAC,IAAI,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC;IAC/B,CAAC;IACD,kBAAkB;IAClB,OAAO,CAAC,CAAC,MAAM,GAAG,EAAE;QAAE,CAAC,IAAI,SAAS,CAAC,CAAC,CAAC,CAAC;IACxC,OAAO,EAAE,GAAG,CAAC,CAAC;AAChB,CAAC;AAED,MAAa,YAAY;IACf,SAAS,CAAS;IAE1B,YAAY,MAAmB;QAC7B,IAAI,CAAC,SAAS,GAAG,MAAM,CAAC,SAAS,CAAC;IACpC,CAAC;IAED,2CAA2C;IAC3C,QAAQ;QACN,MAAM,OAAO,GAAG,YAAY,EAAE,CAAC;QAC/B,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACnB,OAAO,OAAO,CAAC;IACjB,CAAC;IAED,+BAA+B;IAC/B,YAAY;QACV,IAAI,CAAC;YACH,MAAM,IAAI,GAAG,YAAE,CAAC,YAAY,CAAC,IAAI,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;YACtD,MAAM,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YACrC,IAAI,OAAO;gBAAE,OAAO,OAAO,CAAC;QAC9B,CAAC;QAAC,MAAM,CAAC;YACP,oBAAoB;QACtB,CAAC;QACD,OAAO,IAAI,CAAC,QAAQ,EAAE,CAAC;IACzB,CAAC;IAEO,IAAI,CAAC,OAAe;QAC1B,YAAE,CAAC,SAAS,CAAC,cAAI,CAAC,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAChE,YAAE,CAAC,aAAa,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC;IAChE,CAAC;CACF;AA9BD,oCA8BC"}
|
package/dist/core/transport.d.ts
DELETED
|
@@ -1,18 +0,0 @@
|
|
|
1
|
-
import type { OtlpPayload } from "./otlp.js";
|
|
2
|
-
import type { PintaConfig } from "./config.js";
|
|
3
|
-
export declare class Transport {
|
|
4
|
-
private queue;
|
|
5
|
-
constructor(config: PintaConfig);
|
|
6
|
-
/**
|
|
7
|
-
* POST a single payload. On any failure, enqueue it for the next hook to retry.
|
|
8
|
-
* Silent disable when no endpoint is configured.
|
|
9
|
-
*/
|
|
10
|
-
send(payload: OtlpPayload): Promise<void>;
|
|
11
|
-
/**
|
|
12
|
-
* Best-effort drain. Acquires the lock, reads the queue, attempts a single
|
|
13
|
-
* batched POST. On failure, leaves the queue untouched.
|
|
14
|
-
* Silent disable when no endpoint is configured.
|
|
15
|
-
*/
|
|
16
|
-
flush(): Promise<void>;
|
|
17
|
-
private post;
|
|
18
|
-
}
|
package/dist/core/transport.js
DELETED
|
@@ -1,125 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.Transport = void 0;
|
|
4
|
-
const retry_queue_js_1 = require("./retry-queue.js");
|
|
5
|
-
const otlp_js_1 = require("./otlp.js");
|
|
6
|
-
const TIMEOUT_MS = 5000;
|
|
7
|
-
function parseHeadersEnv(raw) {
|
|
8
|
-
if (!raw)
|
|
9
|
-
return {};
|
|
10
|
-
const out = {};
|
|
11
|
-
for (const pair of raw.split(",")) {
|
|
12
|
-
const [k, ...rest] = pair.split("=");
|
|
13
|
-
if (k && rest.length > 0)
|
|
14
|
-
out[k.trim()] = rest.join("=").trim();
|
|
15
|
-
}
|
|
16
|
-
return out;
|
|
17
|
-
}
|
|
18
|
-
function getOptions() {
|
|
19
|
-
// OTLP/HTTP spec: TRACES_ENDPOINT is the full URL (no append by exporter);
|
|
20
|
-
// ENDPOINT is a base URL the SDK appends /v1/traces to. We treat the
|
|
21
|
-
// value as a full URL — env-bridge maps CLAUDE_PLUGIN_OPTION_ENDPOINT to
|
|
22
|
-
// TRACES_ENDPOINT specifically. For OSS users who set ENDPOINT directly,
|
|
23
|
-
// assume base URL and append /v1/traces.
|
|
24
|
-
const tracesEndpoint = process.env.OTEL_EXPORTER_OTLP_TRACES_ENDPOINT;
|
|
25
|
-
const baseEndpoint = process.env.OTEL_EXPORTER_OTLP_ENDPOINT;
|
|
26
|
-
let endpoint;
|
|
27
|
-
if (tracesEndpoint) {
|
|
28
|
-
endpoint = tracesEndpoint.replace(/\/+$/, "");
|
|
29
|
-
}
|
|
30
|
-
else if (baseEndpoint) {
|
|
31
|
-
endpoint = baseEndpoint.replace(/\/+$/, "") + "/v1/traces";
|
|
32
|
-
}
|
|
33
|
-
if (!endpoint)
|
|
34
|
-
return null;
|
|
35
|
-
return {
|
|
36
|
-
endpoint,
|
|
37
|
-
headers: parseHeadersEnv(process.env.OTEL_EXPORTER_OTLP_HEADERS),
|
|
38
|
-
};
|
|
39
|
-
}
|
|
40
|
-
class Transport {
|
|
41
|
-
queue;
|
|
42
|
-
constructor(config) {
|
|
43
|
-
this.queue = new retry_queue_js_1.RetryQueue(config.pluginData);
|
|
44
|
-
}
|
|
45
|
-
/**
|
|
46
|
-
* POST a single payload. On any failure, enqueue it for the next hook to retry.
|
|
47
|
-
* Silent disable when no endpoint is configured.
|
|
48
|
-
*/
|
|
49
|
-
async send(payload) {
|
|
50
|
-
const opts = getOptions();
|
|
51
|
-
if (!opts)
|
|
52
|
-
return; // Silent disable when no endpoint configured
|
|
53
|
-
const ok = await this.post(payload, opts);
|
|
54
|
-
if (!ok)
|
|
55
|
-
this.queue.enqueue(payload);
|
|
56
|
-
}
|
|
57
|
-
/**
|
|
58
|
-
* Best-effort drain. Acquires the lock, reads the queue, attempts a single
|
|
59
|
-
* batched POST. On failure, leaves the queue untouched.
|
|
60
|
-
* Silent disable when no endpoint is configured.
|
|
61
|
-
*/
|
|
62
|
-
async flush() {
|
|
63
|
-
const opts = getOptions();
|
|
64
|
-
if (!opts)
|
|
65
|
-
return;
|
|
66
|
-
if (!this.queue.tryAcquireLock())
|
|
67
|
-
return;
|
|
68
|
-
try {
|
|
69
|
-
const entries = this.queue.readAll();
|
|
70
|
-
if (entries.length === 0)
|
|
71
|
-
return;
|
|
72
|
-
const merged = (0, otlp_js_1.mergeBatch)(entries.map((e) => e.payload));
|
|
73
|
-
const ok = await this.post(merged, opts);
|
|
74
|
-
if (ok)
|
|
75
|
-
this.queue.rewrite([]);
|
|
76
|
-
}
|
|
77
|
-
finally {
|
|
78
|
-
this.queue.release();
|
|
79
|
-
}
|
|
80
|
-
}
|
|
81
|
-
async post(payload, opts) {
|
|
82
|
-
const ctrl = new AbortController();
|
|
83
|
-
const timer = setTimeout(() => ctrl.abort(), TIMEOUT_MS);
|
|
84
|
-
try {
|
|
85
|
-
// opts.endpoint is the full traces URL — no path append.
|
|
86
|
-
const res = await fetch(opts.endpoint, {
|
|
87
|
-
method: "POST",
|
|
88
|
-
headers: {
|
|
89
|
-
"Content-Type": "application/json",
|
|
90
|
-
...opts.headers,
|
|
91
|
-
},
|
|
92
|
-
body: JSON.stringify(payload),
|
|
93
|
-
signal: ctrl.signal,
|
|
94
|
-
});
|
|
95
|
-
if (!res.ok) {
|
|
96
|
-
let body = "";
|
|
97
|
-
try {
|
|
98
|
-
body = (await res.text()).slice(0, 200);
|
|
99
|
-
}
|
|
100
|
-
catch {
|
|
101
|
-
/* ignore */
|
|
102
|
-
}
|
|
103
|
-
const hint = res.status === 401 || res.status === 403
|
|
104
|
-
? " — check OTEL_EXPORTER_OTLP_HEADERS (relay token)"
|
|
105
|
-
: res.status === 404
|
|
106
|
-
? " — check OTEL_EXPORTER_OTLP_TRACES_ENDPOINT path"
|
|
107
|
-
: res.status >= 500
|
|
108
|
-
? " — collector may be down"
|
|
109
|
-
: "";
|
|
110
|
-
process.stderr.write(`[pinta-cc] OTLP POST ${res.status} ${opts.endpoint}${hint}${body ? ` body=${body}` : ""}\n`);
|
|
111
|
-
return false;
|
|
112
|
-
}
|
|
113
|
-
return true;
|
|
114
|
-
}
|
|
115
|
-
catch (err) {
|
|
116
|
-
process.stderr.write(`[pinta-cc] OTLP POST failed: ${err.message ?? String(err)}\n`);
|
|
117
|
-
return false;
|
|
118
|
-
}
|
|
119
|
-
finally {
|
|
120
|
-
clearTimeout(timer);
|
|
121
|
-
}
|
|
122
|
-
}
|
|
123
|
-
}
|
|
124
|
-
exports.Transport = Transport;
|
|
125
|
-
//# sourceMappingURL=transport.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"transport.js","sourceRoot":"","sources":["../../src/core/transport.ts"],"names":[],"mappings":"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"}
|
package/dist/core/types.d.ts
DELETED
|
@@ -1,65 +0,0 @@
|
|
|
1
|
-
export interface BaseEvent {
|
|
2
|
-
session_id: string;
|
|
3
|
-
transcript_path: string;
|
|
4
|
-
cwd: string;
|
|
5
|
-
permission_mode?: string;
|
|
6
|
-
hook_event_name: string;
|
|
7
|
-
[key: string]: unknown;
|
|
8
|
-
}
|
|
9
|
-
export interface PreToolUseEvent extends BaseEvent {
|
|
10
|
-
hook_event_name: "PreToolUse";
|
|
11
|
-
tool_name: string;
|
|
12
|
-
tool_input: Record<string, unknown>;
|
|
13
|
-
tool_use_id: string;
|
|
14
|
-
}
|
|
15
|
-
export interface PostToolUseEvent extends BaseEvent {
|
|
16
|
-
hook_event_name: "PostToolUse";
|
|
17
|
-
tool_name: string;
|
|
18
|
-
tool_input: Record<string, unknown>;
|
|
19
|
-
tool_response: unknown;
|
|
20
|
-
tool_use_id: string;
|
|
21
|
-
}
|
|
22
|
-
export interface PostToolUseFailureEvent extends BaseEvent {
|
|
23
|
-
hook_event_name: "PostToolUseFailure";
|
|
24
|
-
tool_name: string;
|
|
25
|
-
tool_input: Record<string, unknown>;
|
|
26
|
-
tool_use_id: string;
|
|
27
|
-
error?: string;
|
|
28
|
-
is_interrupt?: boolean;
|
|
29
|
-
}
|
|
30
|
-
export interface UserPromptSubmitEvent extends BaseEvent {
|
|
31
|
-
hook_event_name: "UserPromptSubmit";
|
|
32
|
-
prompt: string;
|
|
33
|
-
}
|
|
34
|
-
export interface SessionEvent extends BaseEvent {
|
|
35
|
-
hook_event_name: "SessionStart" | "SessionEnd";
|
|
36
|
-
}
|
|
37
|
-
export interface SubagentEvent extends BaseEvent {
|
|
38
|
-
hook_event_name: "SubagentStart" | "SubagentStop";
|
|
39
|
-
agent_id?: string;
|
|
40
|
-
agent_type?: string;
|
|
41
|
-
}
|
|
42
|
-
export interface StopEvent extends BaseEvent {
|
|
43
|
-
hook_event_name: "Stop";
|
|
44
|
-
stop_hook_active?: boolean;
|
|
45
|
-
}
|
|
46
|
-
export interface PermissionEvent extends BaseEvent {
|
|
47
|
-
hook_event_name: "PermissionRequest" | "PermissionDenied";
|
|
48
|
-
tool_name?: string;
|
|
49
|
-
tool_input?: Record<string, unknown>;
|
|
50
|
-
}
|
|
51
|
-
export declare function isPreToolUseEvent(event: BaseEvent): event is PreToolUseEvent;
|
|
52
|
-
export declare function isPostToolUseEvent(event: BaseEvent): event is PostToolUseEvent | PostToolUseFailureEvent;
|
|
53
|
-
export declare function isUserPromptSubmitEvent(event: BaseEvent): event is UserPromptSubmitEvent;
|
|
54
|
-
export declare function isSessionEvent(event: BaseEvent): event is SessionEvent;
|
|
55
|
-
export declare function isSubagentEvent(event: BaseEvent): event is SubagentEvent;
|
|
56
|
-
export declare function isStopEvent(event: BaseEvent): event is StopEvent;
|
|
57
|
-
export declare function isPermissionEvent(event: BaseEvent): event is PermissionEvent;
|
|
58
|
-
export declare function isSkippedHook(event: BaseEvent): boolean;
|
|
59
|
-
export interface HookBlockOutput {
|
|
60
|
-
hookSpecificOutput: {
|
|
61
|
-
hookEventName: "PreToolUse";
|
|
62
|
-
permissionDecision: "deny";
|
|
63
|
-
permissionDecisionReason: string;
|
|
64
|
-
};
|
|
65
|
-
}
|
package/dist/core/types.js
DELETED
|
@@ -1,39 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
// --- Claude Code hook event types ---
|
|
3
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
|
-
exports.isPreToolUseEvent = isPreToolUseEvent;
|
|
5
|
-
exports.isPostToolUseEvent = isPostToolUseEvent;
|
|
6
|
-
exports.isUserPromptSubmitEvent = isUserPromptSubmitEvent;
|
|
7
|
-
exports.isSessionEvent = isSessionEvent;
|
|
8
|
-
exports.isSubagentEvent = isSubagentEvent;
|
|
9
|
-
exports.isStopEvent = isStopEvent;
|
|
10
|
-
exports.isPermissionEvent = isPermissionEvent;
|
|
11
|
-
exports.isSkippedHook = isSkippedHook;
|
|
12
|
-
// --- Type guards ---
|
|
13
|
-
function isPreToolUseEvent(event) {
|
|
14
|
-
return event.hook_event_name === "PreToolUse";
|
|
15
|
-
}
|
|
16
|
-
function isPostToolUseEvent(event) {
|
|
17
|
-
return (event.hook_event_name === "PostToolUse" || event.hook_event_name === "PostToolUseFailure");
|
|
18
|
-
}
|
|
19
|
-
function isUserPromptSubmitEvent(event) {
|
|
20
|
-
return event.hook_event_name === "UserPromptSubmit";
|
|
21
|
-
}
|
|
22
|
-
function isSessionEvent(event) {
|
|
23
|
-
return event.hook_event_name === "SessionStart" || event.hook_event_name === "SessionEnd";
|
|
24
|
-
}
|
|
25
|
-
function isSubagentEvent(event) {
|
|
26
|
-
return event.hook_event_name === "SubagentStart" || event.hook_event_name === "SubagentStop";
|
|
27
|
-
}
|
|
28
|
-
function isStopEvent(event) {
|
|
29
|
-
return event.hook_event_name === "Stop";
|
|
30
|
-
}
|
|
31
|
-
function isPermissionEvent(event) {
|
|
32
|
-
return (event.hook_event_name === "PermissionRequest" || event.hook_event_name === "PermissionDenied");
|
|
33
|
-
}
|
|
34
|
-
// --- Skip-list (route to default no-op handler) ---
|
|
35
|
-
const SKIP_HOOKS = new Set(["Notification", "TaskCreated", "TaskCompleted"]);
|
|
36
|
-
function isSkippedHook(event) {
|
|
37
|
-
return SKIP_HOOKS.has(event.hook_event_name);
|
|
38
|
-
}
|
|
39
|
-
//# sourceMappingURL=types.js.map
|
package/dist/core/types.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/core/types.ts"],"names":[],"mappings":";AAAA,uCAAuC;;AAgEvC,8CAEC;AAED,gDAMC;AAED,0DAEC;AAED,wCAEC;AAED,0CAEC;AAED,kCAEC;AAED,8CAIC;AAKD,sCAEC;AAzCD,sBAAsB;AAEtB,SAAgB,iBAAiB,CAAC,KAAgB;IAChD,OAAO,KAAK,CAAC,eAAe,KAAK,YAAY,CAAC;AAChD,CAAC;AAED,SAAgB,kBAAkB,CAChC,KAAgB;IAEhB,OAAO,CACL,KAAK,CAAC,eAAe,KAAK,aAAa,IAAI,KAAK,CAAC,eAAe,KAAK,oBAAoB,CAC1F,CAAC;AACJ,CAAC;AAED,SAAgB,uBAAuB,CAAC,KAAgB;IACtD,OAAO,KAAK,CAAC,eAAe,KAAK,kBAAkB,CAAC;AACtD,CAAC;AAED,SAAgB,cAAc,CAAC,KAAgB;IAC7C,OAAO,KAAK,CAAC,eAAe,KAAK,cAAc,IAAI,KAAK,CAAC,eAAe,KAAK,YAAY,CAAC;AAC5F,CAAC;AAED,SAAgB,eAAe,CAAC,KAAgB;IAC9C,OAAO,KAAK,CAAC,eAAe,KAAK,eAAe,IAAI,KAAK,CAAC,eAAe,KAAK,cAAc,CAAC;AAC/F,CAAC;AAED,SAAgB,WAAW,CAAC,KAAgB;IAC1C,OAAO,KAAK,CAAC,eAAe,KAAK,MAAM,CAAC;AAC1C,CAAC;AAED,SAAgB,iBAAiB,CAAC,KAAgB;IAChD,OAAO,CACL,KAAK,CAAC,eAAe,KAAK,mBAAmB,IAAI,KAAK,CAAC,eAAe,KAAK,kBAAkB,CAC9F,CAAC;AACJ,CAAC;AAED,qDAAqD;AAErD,MAAM,UAAU,GAAG,IAAI,GAAG,CAAC,CAAC,cAAc,EAAE,aAAa,EAAE,eAAe,CAAC,CAAC,CAAC;AAC7E,SAAgB,aAAa,CAAC,KAAgB;IAC5C,OAAO,UAAU,CAAC,GAAG,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC;AAC/C,CAAC"}
|
package/dist/env-file.d.ts
DELETED
|
@@ -1,9 +0,0 @@
|
|
|
1
|
-
export declare function envFilePath(): string;
|
|
2
|
-
export declare function parseEnvFile(content: string): Record<string, string>;
|
|
3
|
-
/**
|
|
4
|
-
* Load `~/.claude/pinta-cc.env` (if it exists) and merge any missing keys into
|
|
5
|
-
* `process.env`. Returns silently on missing file or any read/parse error —
|
|
6
|
-
* this is startup-time best-effort, and the adaptor must keep working against
|
|
7
|
-
* a v0.1.5 manager that still uses the shell-prefix path.
|
|
8
|
-
*/
|
|
9
|
-
export declare function loadEnvFile(filePath?: string): void;
|
package/dist/env-file.js
DELETED
|
@@ -1,85 +0,0 @@
|
|
|
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
|
-
exports.envFilePath = envFilePath;
|
|
7
|
-
exports.parseEnvFile = parseEnvFile;
|
|
8
|
-
exports.loadEnvFile = loadEnvFile;
|
|
9
|
-
/**
|
|
10
|
-
* Graceful env-file loader.
|
|
11
|
-
*
|
|
12
|
-
* Pinta Manager v0.1.6+ writes `~/.claude/pinta-cc.env` (KEY=VALUE per line)
|
|
13
|
-
* instead of prefixing the hook command with a POSIX shell env prefix
|
|
14
|
-
* (`KEY='val' node ...`). The shell-prefix form is broken on native
|
|
15
|
-
* Windows shells (cmd.exe / PowerShell). See
|
|
16
|
-
* `docs/features/v0.1.6/cc-env-file.md` in pinta-manager for the migration
|
|
17
|
-
* story.
|
|
18
|
-
*
|
|
19
|
-
* Behavior:
|
|
20
|
-
* - If `~/.claude/pinta-cc.env` exists, parse it and merge into `process.env`,
|
|
21
|
-
* but only for keys that are NOT already set. This preserves any value the
|
|
22
|
-
* user explicitly exported in their shell, and also keeps the v0.1.5
|
|
23
|
-
* manager's shell-prefix values intact (since those reach us as already-set
|
|
24
|
-
* `process.env` keys).
|
|
25
|
-
* - If the file is missing (old manager + new adaptor migration window), this
|
|
26
|
-
* is a silent no-op — `process.env` is left untouched and the rest of the
|
|
27
|
-
* adaptor continues to read what the shell prefix (if any) provided.
|
|
28
|
-
*
|
|
29
|
-
* Parser format (matches sidecar/src/enroll/codex-plugin.ts `parseEnvFile`):
|
|
30
|
-
* - `KEY=VALUE` per line
|
|
31
|
-
* - Blank lines and lines starting with `#` are ignored
|
|
32
|
-
* - Lines without `=` are skipped (no throw)
|
|
33
|
-
* - Surrounding single/double quotes on the value are stripped
|
|
34
|
-
* - No escape handling — manager guarantees tokens don't contain `=` or newline
|
|
35
|
-
*/
|
|
36
|
-
const node_fs_1 = __importDefault(require("node:fs"));
|
|
37
|
-
const node_os_1 = __importDefault(require("node:os"));
|
|
38
|
-
const node_path_1 = __importDefault(require("node:path"));
|
|
39
|
-
function envFilePath() {
|
|
40
|
-
return node_path_1.default.join(node_os_1.default.homedir(), ".claude", "pinta-cc.env");
|
|
41
|
-
}
|
|
42
|
-
function parseEnvFile(content) {
|
|
43
|
-
const out = {};
|
|
44
|
-
for (const raw of content.split("\n")) {
|
|
45
|
-
const line = raw.trim();
|
|
46
|
-
if (!line || line.startsWith("#"))
|
|
47
|
-
continue;
|
|
48
|
-
const idx = line.indexOf("=");
|
|
49
|
-
if (idx < 0)
|
|
50
|
-
continue;
|
|
51
|
-
const key = line.slice(0, idx).trim();
|
|
52
|
-
let value = line.slice(idx + 1).trim();
|
|
53
|
-
if ((value.startsWith('"') && value.endsWith('"')) ||
|
|
54
|
-
(value.startsWith("'") && value.endsWith("'"))) {
|
|
55
|
-
value = value.slice(1, -1);
|
|
56
|
-
}
|
|
57
|
-
if (key)
|
|
58
|
-
out[key] = value;
|
|
59
|
-
}
|
|
60
|
-
return out;
|
|
61
|
-
}
|
|
62
|
-
/**
|
|
63
|
-
* Load `~/.claude/pinta-cc.env` (if it exists) and merge any missing keys into
|
|
64
|
-
* `process.env`. Returns silently on missing file or any read/parse error —
|
|
65
|
-
* this is startup-time best-effort, and the adaptor must keep working against
|
|
66
|
-
* a v0.1.5 manager that still uses the shell-prefix path.
|
|
67
|
-
*/
|
|
68
|
-
function loadEnvFile(filePath = envFilePath()) {
|
|
69
|
-
let content;
|
|
70
|
-
try {
|
|
71
|
-
content = node_fs_1.default.readFileSync(filePath, "utf-8");
|
|
72
|
-
}
|
|
73
|
-
catch {
|
|
74
|
-
// File missing (ENOENT) or unreadable — silent no-op so the adaptor keeps
|
|
75
|
-
// working against an older manager that injected env via shell prefix.
|
|
76
|
-
return;
|
|
77
|
-
}
|
|
78
|
-
const parsed = parseEnvFile(content);
|
|
79
|
-
for (const [key, value] of Object.entries(parsed)) {
|
|
80
|
-
if (process.env[key] === undefined) {
|
|
81
|
-
process.env[key] = value;
|
|
82
|
-
}
|
|
83
|
-
}
|
|
84
|
-
}
|
|
85
|
-
//# sourceMappingURL=env-file.js.map
|
package/dist/env-file.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"env-file.js","sourceRoot":"","sources":["../src/env-file.ts"],"names":[],"mappings":";;;;;AA+BA,kCAEC;AAED,oCAkBC;AAQD,kCAeC;AA5ED;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AACH,sDAAyB;AACzB,sDAAyB;AACzB,0DAA6B;AAE7B,SAAgB,WAAW;IACzB,OAAO,mBAAI,CAAC,IAAI,CAAC,iBAAE,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,cAAc,CAAC,CAAC;AAC5D,CAAC;AAED,SAAgB,YAAY,CAAC,OAAe;IAC1C,MAAM,GAAG,GAA2B,EAAE,CAAC;IACvC,KAAK,MAAM,GAAG,IAAI,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;QACtC,MAAM,IAAI,GAAG,GAAG,CAAC,IAAI,EAAE,CAAC;QACxB,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC;YAAE,SAAS;QAC5C,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QAC9B,IAAI,GAAG,GAAG,CAAC;YAAE,SAAS;QACtB,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC;QACtC,IAAI,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;QACvC,IACE,CAAC,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;YAC9C,CAAC,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,EAC9C,CAAC;YACD,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;QAC7B,CAAC;QACD,IAAI,GAAG;YAAE,GAAG,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;IAC5B,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAED;;;;;GAKG;AACH,SAAgB,WAAW,CAAC,WAAmB,WAAW,EAAE;IAC1D,IAAI,OAAe,CAAC;IACpB,IAAI,CAAC;QACH,OAAO,GAAG,iBAAE,CAAC,YAAY,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;IAC/C,CAAC;IAAC,MAAM,CAAC;QACP,0EAA0E;QAC1E,uEAAuE;QACvE,OAAO;IACT,CAAC;IACD,MAAM,MAAM,GAAG,YAAY,CAAC,OAAO,CAAC,CAAC;IACrC,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;QAClD,IAAI,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,SAAS,EAAE,CAAC;YACnC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;QAC3B,CAAC;IACH,CAAC;AACH,CAAC"}
|
|
@@ -1,6 +0,0 @@
|
|
|
1
|
-
import type { BaseEvent } from "../core/types.js";
|
|
2
|
-
/**
|
|
3
|
-
* Catch-all for hooks we explicitly skip (Notification, TaskCreated, TaskCompleted)
|
|
4
|
-
* and any future hook event we have not yet routed. Exits 0 silently.
|
|
5
|
-
*/
|
|
6
|
-
export declare function handleDefault(_event: BaseEvent): Promise<number>;
|
package/dist/handlers/default.js
DELETED
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.handleDefault = handleDefault;
|
|
4
|
-
/**
|
|
5
|
-
* Catch-all for hooks we explicitly skip (Notification, TaskCreated, TaskCompleted)
|
|
6
|
-
* and any future hook event we have not yet routed. Exits 0 silently.
|
|
7
|
-
*/
|
|
8
|
-
async function handleDefault(_event) {
|
|
9
|
-
return 0;
|
|
10
|
-
}
|
|
11
|
-
//# sourceMappingURL=default.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"default.js","sourceRoot":"","sources":["../../src/handlers/default.ts"],"names":[],"mappings":";;AAMA,sCAEC;AAND;;;GAGG;AACI,KAAK,UAAU,aAAa,CAAC,MAAiB;IACnD,OAAO,CAAC,CAAC;AACX,CAAC"}
|
|
@@ -1,15 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.handlePermission = handlePermission;
|
|
4
|
-
const transport_js_1 = require("../core/transport.js");
|
|
5
|
-
const trace_js_1 = require("../core/trace.js");
|
|
6
|
-
const otlp_js_1 = require("../core/otlp.js");
|
|
7
|
-
async function handlePermission(event, config) {
|
|
8
|
-
const transport = new transport_js_1.Transport(config);
|
|
9
|
-
await transport.flush();
|
|
10
|
-
const traceId = new trace_js_1.TraceManager(config).currentTrace();
|
|
11
|
-
const payload = (0, otlp_js_1.buildOtlpPayload)({ event, traceId });
|
|
12
|
-
await transport.send(payload);
|
|
13
|
-
return 0;
|
|
14
|
-
}
|
|
15
|
-
//# sourceMappingURL=permission.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"permission.js","sourceRoot":"","sources":["../../src/handlers/permission.ts"],"names":[],"mappings":";;AAMA,4CAWC;AAfD,uDAAiD;AACjD,+CAAgD;AAChD,6CAAmD;AAE5C,KAAK,UAAU,gBAAgB,CACpC,KAAsB,EACtB,MAAmB;IAEnB,MAAM,SAAS,GAAG,IAAI,wBAAS,CAAC,MAAM,CAAC,CAAC;IACxC,MAAM,SAAS,CAAC,KAAK,EAAE,CAAC;IAExB,MAAM,OAAO,GAAG,IAAI,uBAAY,CAAC,MAAM,CAAC,CAAC,YAAY,EAAE,CAAC;IACxD,MAAM,OAAO,GAAG,IAAA,0BAAgB,EAAC,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC,CAAC;IACrD,MAAM,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IAC9B,OAAO,CAAC,CAAC;AACX,CAAC"}
|
|
@@ -1,15 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.handlePostToolUse = handlePostToolUse;
|
|
4
|
-
const transport_js_1 = require("../core/transport.js");
|
|
5
|
-
const trace_js_1 = require("../core/trace.js");
|
|
6
|
-
const otlp_js_1 = require("../core/otlp.js");
|
|
7
|
-
async function handlePostToolUse(event, config) {
|
|
8
|
-
const transport = new transport_js_1.Transport(config);
|
|
9
|
-
await transport.flush();
|
|
10
|
-
const traceId = new trace_js_1.TraceManager(config).currentTrace();
|
|
11
|
-
const payload = (0, otlp_js_1.buildOtlpPayload)({ event, traceId });
|
|
12
|
-
await transport.send(payload);
|
|
13
|
-
return 0;
|
|
14
|
-
}
|
|
15
|
-
//# sourceMappingURL=post-tool-use.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"post-tool-use.js","sourceRoot":"","sources":["../../src/handlers/post-tool-use.ts"],"names":[],"mappings":";;AAMA,8CAWC;AAfD,uDAAiD;AACjD,+CAAgD;AAChD,6CAAmD;AAE5C,KAAK,UAAU,iBAAiB,CACrC,KAAiD,EACjD,MAAmB;IAEnB,MAAM,SAAS,GAAG,IAAI,wBAAS,CAAC,MAAM,CAAC,CAAC;IACxC,MAAM,SAAS,CAAC,KAAK,EAAE,CAAC;IAExB,MAAM,OAAO,GAAG,IAAI,uBAAY,CAAC,MAAM,CAAC,CAAC,YAAY,EAAE,CAAC;IACxD,MAAM,OAAO,GAAG,IAAA,0BAAgB,EAAC,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC,CAAC;IACrD,MAAM,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IAC9B,OAAO,CAAC,CAAC;AACX,CAAC"}
|
|
@@ -1,40 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.handlePreToolUse = handlePreToolUse;
|
|
4
|
-
const transport_js_1 = require("../core/transport.js");
|
|
5
|
-
const trace_js_1 = require("../core/trace.js");
|
|
6
|
-
const otlp_js_1 = require("../core/otlp.js");
|
|
7
|
-
const guard_js_1 = require("../core/guard.js");
|
|
8
|
-
async function handlePreToolUse(event, config) {
|
|
9
|
-
const guardEndpoint = process.env.PINTA_GUARD_ENDPOINT;
|
|
10
|
-
const rawToolInput = typeof event.tool_input === 'string'
|
|
11
|
-
? event.tool_input
|
|
12
|
-
: JSON.stringify(event.tool_input);
|
|
13
|
-
const guard = await (0, guard_js_1.evaluateGuard)({
|
|
14
|
-
spanId: event.session_id ?? 'unknown',
|
|
15
|
-
toolName: event.tool_name,
|
|
16
|
-
toolInput: event.tool_input,
|
|
17
|
-
rawTextFields: { toolInput: rawToolInput },
|
|
18
|
-
}, guardEndpoint);
|
|
19
|
-
const transport = new transport_js_1.Transport(config);
|
|
20
|
-
await transport.flush();
|
|
21
|
-
const traceId = new trace_js_1.TraceManager(config).currentTrace();
|
|
22
|
-
const payload = (0, otlp_js_1.buildOtlpPayload)({ event, traceId, guard });
|
|
23
|
-
await transport.send(payload);
|
|
24
|
-
if (guard?.decision === 'DENY') {
|
|
25
|
-
// Prefer manager-supplied userMessage (carries the "Blocked by Pinta AI"
|
|
26
|
-
// brand text + rule). Fall back to raw rule name for older managers, and
|
|
27
|
-
// to 'guard_deny' literal if even reason is missing.
|
|
28
|
-
const reason = guard.userMessage ?? guard.reason ?? 'guard_deny';
|
|
29
|
-
const out = {
|
|
30
|
-
hookSpecificOutput: {
|
|
31
|
-
hookEventName: 'PreToolUse',
|
|
32
|
-
permissionDecision: 'deny',
|
|
33
|
-
permissionDecisionReason: reason,
|
|
34
|
-
},
|
|
35
|
-
};
|
|
36
|
-
process.stdout.write(JSON.stringify(out) + '\n');
|
|
37
|
-
}
|
|
38
|
-
return 0;
|
|
39
|
-
}
|
|
40
|
-
//# sourceMappingURL=pre-tool-use.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"pre-tool-use.js","sourceRoot":"","sources":["../../src/handlers/pre-tool-use.ts"],"names":[],"mappings":";;AAOA,4CAuCC;AA5CD,uDAAiD;AACjD,+CAAgD;AAChD,6CAAmD;AACnD,+CAAiD;AAE1C,KAAK,UAAU,gBAAgB,CACpC,KAAsB,EACtB,MAAmB;IAEnB,MAAM,aAAa,GAAG,OAAO,CAAC,GAAG,CAAC,oBAAoB,CAAC;IACvD,MAAM,YAAY,GAAG,OAAO,KAAK,CAAC,UAAU,KAAK,QAAQ;QACvD,CAAC,CAAC,KAAK,CAAC,UAAU;QAClB,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;IACrC,MAAM,KAAK,GAAG,MAAM,IAAA,wBAAa,EAC/B;QACE,MAAM,EAAE,KAAK,CAAC,UAAU,IAAI,SAAS;QACrC,QAAQ,EAAE,KAAK,CAAC,SAAS;QACzB,SAAS,EAAE,KAAK,CAAC,UAAU;QAC3B,aAAa,EAAE,EAAE,SAAS,EAAE,YAAY,EAAE;KAC3C,EACD,aAAa,CACd,CAAC;IAEF,MAAM,SAAS,GAAG,IAAI,wBAAS,CAAC,MAAM,CAAC,CAAC;IACxC,MAAM,SAAS,CAAC,KAAK,EAAE,CAAC;IACxB,MAAM,OAAO,GAAG,IAAI,uBAAY,CAAC,MAAM,CAAC,CAAC,YAAY,EAAE,CAAC;IACxD,MAAM,OAAO,GAAG,IAAA,0BAAgB,EAAC,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,CAAC;IAC5D,MAAM,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IAE9B,IAAI,KAAK,EAAE,QAAQ,KAAK,MAAM,EAAE,CAAC;QAC/B,yEAAyE;QACzE,yEAAyE;QACzE,qDAAqD;QACrD,MAAM,MAAM,GAAG,KAAK,CAAC,WAAW,IAAI,KAAK,CAAC,MAAM,IAAI,YAAY,CAAC;QACjE,MAAM,GAAG,GAAG;YACV,kBAAkB,EAAE;gBAClB,aAAa,EAAE,YAAY;gBAC3B,kBAAkB,EAAE,MAAe;gBACnC,wBAAwB,EAAE,MAAM;aACjC;SACF,CAAC;QACF,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,CAAC;IACnD,CAAC;IACD,OAAO,CAAC,CAAC;AACX,CAAC"}
|
package/dist/handlers/session.js
DELETED
|
@@ -1,15 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.handleSession = handleSession;
|
|
4
|
-
const transport_js_1 = require("../core/transport.js");
|
|
5
|
-
const trace_js_1 = require("../core/trace.js");
|
|
6
|
-
const otlp_js_1 = require("../core/otlp.js");
|
|
7
|
-
async function handleSession(event, config) {
|
|
8
|
-
const transport = new transport_js_1.Transport(config);
|
|
9
|
-
await transport.flush();
|
|
10
|
-
const traceId = new trace_js_1.TraceManager(config).currentTrace();
|
|
11
|
-
const payload = (0, otlp_js_1.buildOtlpPayload)({ event, traceId });
|
|
12
|
-
await transport.send(payload);
|
|
13
|
-
return 0;
|
|
14
|
-
}
|
|
15
|
-
//# sourceMappingURL=session.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"session.js","sourceRoot":"","sources":["../../src/handlers/session.ts"],"names":[],"mappings":";;AAMA,sCAWC;AAfD,uDAAiD;AACjD,+CAAgD;AAChD,6CAAmD;AAE5C,KAAK,UAAU,aAAa,CACjC,KAAmB,EACnB,MAAmB;IAEnB,MAAM,SAAS,GAAG,IAAI,wBAAS,CAAC,MAAM,CAAC,CAAC;IACxC,MAAM,SAAS,CAAC,KAAK,EAAE,CAAC;IAExB,MAAM,OAAO,GAAG,IAAI,uBAAY,CAAC,MAAM,CAAC,CAAC,YAAY,EAAE,CAAC;IACxD,MAAM,OAAO,GAAG,IAAA,0BAAgB,EAAC,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC,CAAC;IACrD,MAAM,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IAC9B,OAAO,CAAC,CAAC;AACX,CAAC"}
|
package/dist/handlers/stop.d.ts
DELETED
package/dist/handlers/stop.js
DELETED
|
@@ -1,15 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.handleStop = handleStop;
|
|
4
|
-
const transport_js_1 = require("../core/transport.js");
|
|
5
|
-
const trace_js_1 = require("../core/trace.js");
|
|
6
|
-
const otlp_js_1 = require("../core/otlp.js");
|
|
7
|
-
async function handleStop(event, config) {
|
|
8
|
-
const transport = new transport_js_1.Transport(config);
|
|
9
|
-
await transport.flush();
|
|
10
|
-
const traceId = new trace_js_1.TraceManager(config).currentTrace();
|
|
11
|
-
const payload = (0, otlp_js_1.buildOtlpPayload)({ event, traceId });
|
|
12
|
-
await transport.send(payload);
|
|
13
|
-
return 0;
|
|
14
|
-
}
|
|
15
|
-
//# sourceMappingURL=stop.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"stop.js","sourceRoot":"","sources":["../../src/handlers/stop.ts"],"names":[],"mappings":";;AAMA,gCAWC;AAfD,uDAAiD;AACjD,+CAAgD;AAChD,6CAAmD;AAE5C,KAAK,UAAU,UAAU,CAC9B,KAAgB,EAChB,MAAmB;IAEnB,MAAM,SAAS,GAAG,IAAI,wBAAS,CAAC,MAAM,CAAC,CAAC;IACxC,MAAM,SAAS,CAAC,KAAK,EAAE,CAAC;IAExB,MAAM,OAAO,GAAG,IAAI,uBAAY,CAAC,MAAM,CAAC,CAAC,YAAY,EAAE,CAAC;IACxD,MAAM,OAAO,GAAG,IAAA,0BAAgB,EAAC,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC,CAAC;IACrD,MAAM,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IAC9B,OAAO,CAAC,CAAC;AACX,CAAC"}
|
|
@@ -1,15 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.handleSubagent = handleSubagent;
|
|
4
|
-
const transport_js_1 = require("../core/transport.js");
|
|
5
|
-
const trace_js_1 = require("../core/trace.js");
|
|
6
|
-
const otlp_js_1 = require("../core/otlp.js");
|
|
7
|
-
async function handleSubagent(event, config) {
|
|
8
|
-
const transport = new transport_js_1.Transport(config);
|
|
9
|
-
await transport.flush();
|
|
10
|
-
const traceId = new trace_js_1.TraceManager(config).currentTrace();
|
|
11
|
-
const payload = (0, otlp_js_1.buildOtlpPayload)({ event, traceId });
|
|
12
|
-
await transport.send(payload);
|
|
13
|
-
return 0;
|
|
14
|
-
}
|
|
15
|
-
//# sourceMappingURL=subagent.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"subagent.js","sourceRoot":"","sources":["../../src/handlers/subagent.ts"],"names":[],"mappings":";;AAMA,wCAWC;AAfD,uDAAiD;AACjD,+CAAgD;AAChD,6CAAmD;AAE5C,KAAK,UAAU,cAAc,CAClC,KAAoB,EACpB,MAAmB;IAEnB,MAAM,SAAS,GAAG,IAAI,wBAAS,CAAC,MAAM,CAAC,CAAC;IACxC,MAAM,SAAS,CAAC,KAAK,EAAE,CAAC;IAExB,MAAM,OAAO,GAAG,IAAI,uBAAY,CAAC,MAAM,CAAC,CAAC,YAAY,EAAE,CAAC;IACxD,MAAM,OAAO,GAAG,IAAA,0BAAgB,EAAC,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC,CAAC;IACrD,MAAM,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IAC9B,OAAO,CAAC,CAAC;AACX,CAAC"}
|