@newrelic/preflight 1.10.0 → 1.12.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.
@@ -13,6 +13,8 @@ export { DroidAdapter } from './droid-adapter.js';
13
13
  export { GeminiCliAdapter } from './gemini-cli-adapter.js';
14
14
  export { ClineAdapter } from './cline-adapter.js';
15
15
  export { CodexAdapter } from './codex-adapter.js';
16
+ export { OpencodeAdapter } from './opencode-adapter.js';
17
+ export { KiloCodeAdapter } from './kilo-code-adapter.js';
16
18
  export { GenericMcpAdapter, validateReportToolCallInput } from './generic-mcp-adapter.js';
17
19
  export type { ReportToolCallInput, ReportSessionStartInput, ReportSessionEndInput, } from './generic-mcp-adapter.js';
18
20
  export { REPORT_TOOL_CALL_TOOL, REPORT_SESSION_START_TOOL, REPORT_SESSION_END_TOOL, } from './generic-mcp-adapter.js';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/platforms/index.ts"],"names":[],"mappings":"AAAA,YAAY,EACV,kBAAkB,EAClB,cAAc,EACd,uBAAuB,EACvB,eAAe,GAChB,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAC7D,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AACxD,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,YAAY,EAAE,oBAAoB,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AACrF,OAAO,EAAE,yBAAyB,EAAE,MAAM,sBAAsB,CAAC;AACjE,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AACxD,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAC3D,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,iBAAiB,EAAE,2BAA2B,EAAE,MAAM,0BAA0B,CAAC;AAC1F,YAAY,EACV,mBAAmB,EACnB,uBAAuB,EACvB,qBAAqB,GACtB,MAAM,0BAA0B,CAAC;AAClC,OAAO,EACL,qBAAqB,EACrB,yBAAyB,EACzB,uBAAuB,GACxB,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAAE,gBAAgB,EAAE,qBAAqB,EAAE,MAAM,wBAAwB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/platforms/index.ts"],"names":[],"mappings":"AAAA,YAAY,EACV,kBAAkB,EAClB,cAAc,EACd,uBAAuB,EACvB,eAAe,GAChB,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAC7D,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AACxD,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,YAAY,EAAE,oBAAoB,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AACrF,OAAO,EAAE,yBAAyB,EAAE,MAAM,sBAAsB,CAAC;AACjE,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AACxD,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAC3D,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AACxD,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AACzD,OAAO,EAAE,iBAAiB,EAAE,2BAA2B,EAAE,MAAM,0BAA0B,CAAC;AAC1F,YAAY,EACV,mBAAmB,EACnB,uBAAuB,EACvB,qBAAqB,GACtB,MAAM,0BAA0B,CAAC;AAClC,OAAO,EACL,qBAAqB,EACrB,yBAAyB,EACzB,uBAAuB,GACxB,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAAE,gBAAgB,EAAE,qBAAqB,EAAE,MAAM,wBAAwB,CAAC"}
@@ -11,6 +11,8 @@ export { DroidAdapter } from './droid-adapter.js';
11
11
  export { GeminiCliAdapter } from './gemini-cli-adapter.js';
12
12
  export { ClineAdapter } from './cline-adapter.js';
13
13
  export { CodexAdapter } from './codex-adapter.js';
14
+ export { OpencodeAdapter } from './opencode-adapter.js';
15
+ export { KiloCodeAdapter } from './kilo-code-adapter.js';
14
16
  export { GenericMcpAdapter, validateReportToolCallInput } from './generic-mcp-adapter.js';
15
17
  export { REPORT_TOOL_CALL_TOOL, REPORT_SESSION_START_TOOL, REPORT_SESSION_END_TOOL, } from './generic-mcp-adapter.js';
16
18
  export { PlatformRegistry, createDefaultRegistry } from './platform-registry.js';
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/platforms/index.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAC7D,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AACxD,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAEtD,OAAO,EAAE,yBAAyB,EAAE,MAAM,sBAAsB,CAAC;AACjE,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AACxD,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAC3D,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,iBAAiB,EAAE,2BAA2B,EAAE,MAAM,0BAA0B,CAAC;AAM1F,OAAO,EACL,qBAAqB,EACrB,yBAAyB,EACzB,uBAAuB,GACxB,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAAE,gBAAgB,EAAE,qBAAqB,EAAE,MAAM,wBAAwB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/platforms/index.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAC7D,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AACxD,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAEtD,OAAO,EAAE,yBAAyB,EAAE,MAAM,sBAAsB,CAAC;AACjE,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AACxD,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAC3D,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AACxD,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AACzD,OAAO,EAAE,iBAAiB,EAAE,2BAA2B,EAAE,MAAM,0BAA0B,CAAC;AAM1F,OAAO,EACL,qBAAqB,EACrB,yBAAyB,EACzB,uBAAuB,GACxB,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAAE,gBAAgB,EAAE,qBAAqB,EAAE,MAAM,wBAAwB,CAAC"}
@@ -0,0 +1,15 @@
1
+ import type { NormalizedToolCall, PlatformAdapter, PlatformConfig, PlatformSessionMetadata } from './types.js';
2
+ export declare class KiloCodeAdapter implements PlatformAdapter {
3
+ readonly platformName = "kilocode";
4
+ readonly visibilityLevel: "full-hooks";
5
+ readonly capabilities: {
6
+ instructionFilePaths: readonly ["AGENTS.md"];
7
+ };
8
+ initialize(_config: PlatformConfig): Promise<void>;
9
+ normalizeToolCall(raw: unknown): NormalizedToolCall;
10
+ mapToolName(platformToolName: string): string;
11
+ getSessionMetadata(): PlatformSessionMetadata;
12
+ getHookInstallInstructions(): string;
13
+ isSupported(): boolean;
14
+ }
15
+ //# sourceMappingURL=kilo-code-adapter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"kilo-code-adapter.d.ts","sourceRoot":"","sources":["../../src/platforms/kilo-code-adapter.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,kBAAkB,EAClB,eAAe,EACf,cAAc,EACd,uBAAuB,EACxB,MAAM,YAAY,CAAC;AAmEpB,qBAAa,eAAgB,YAAW,eAAe;IACrD,QAAQ,CAAC,YAAY,cAAc;IACnC,QAAQ,CAAC,eAAe,EAAG,YAAY,CAAU;IAIjD,QAAQ,CAAC,YAAY;;MAAoD;IAEnE,UAAU,CAAC,OAAO,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC;IAMxD,iBAAiB,CAAC,GAAG,EAAE,OAAO,GAAG,kBAAkB;IAsBnD,WAAW,CAAC,gBAAgB,EAAE,MAAM,GAAG,MAAM;IAI7C,kBAAkB,IAAI,uBAAuB;IAM7C,0BAA0B,IAAI,MAAM;IAiFpC,WAAW,IAAI,OAAO;CAKvB"}
@@ -0,0 +1,173 @@
1
+ /**
2
+ * Maps Kilo Code's built-in tool names (kilocode.ai/docs/automate/tools,
3
+ * /docs/automate/how-tools-work) to the normalized Claude Code tool
4
+ * vocabulary. Kilo CLI is a confirmed literal fork of opencode ("The Kilo
5
+ * CLI is a fork of OpenCode" — kilocode.ai/docs/code-with-ai/platforms/cli),
6
+ * so its base tool set and mapping precedents mirror OpencodeAdapter's:
7
+ * `read`/`glob`/`grep`/`edit`/`write`/`bash`/`webfetch`/`websearch` map
8
+ * directly. `apply_patch` collapses to 'Edit' (same precedent as
9
+ * CodexAdapter and OpencodeAdapter — a single patch can touch multiple
10
+ * files with mixed add/update/delete actions, no clean 1:1 mapping).
11
+ * `skill` maps to 'Skill' (same precedent as OpencodeAdapter/
12
+ * ContinueAdapter). `question` maps to 'AskUserQuestion' (same precedent as
13
+ * OpencodeAdapter). `todowrite` maps to 'TaskCreate' (same precedent as
14
+ * AmazonQAdapter/OpencodeAdapter). `task` (spawns a sub-agent/child session)
15
+ * maps to 'Agent' — same precedent as Zed/Codex's spawn_agent and
16
+ * Cursor/Droid's Task. `todoread` maps to 'TaskList' and `plan` maps to
17
+ * 'EnterPlanMode' — both are real, pre-existing entries in Preflight's
18
+ * canonical tool vocabulary (see TERMINAL_OUTPUT_TOOLS in
19
+ * src/metrics/tool-selection-scorer.ts) with no adapter-map precedent
20
+ * before this one; chosen by user decision during brainstorming, not
21
+ * invented. `agent_manager` (starts VS-Code-specific Agent Manager
22
+ * local/worktree sessions) has no clean canonical equivalent and is left
23
+ * unmapped -> falls through to 'Unknown', same treatment as opencode's
24
+ * `lsp` and Codex's `update_plan`. Kilo's built-in Playwright MCP server
25
+ * tools (namespaced `kilo-playwright_*`) are not fixed map keys and are not
26
+ * special-cased -> they also fall through to 'Unknown' with the original
27
+ * name preserved, same as any other platform's MCP-server tool calls.
28
+ */
29
+ const KILO_CODE_TOOL_MAP = {
30
+ read: 'Read',
31
+ glob: 'Glob',
32
+ grep: 'Grep',
33
+ edit: 'Edit',
34
+ write: 'Write',
35
+ apply_patch: 'Edit',
36
+ bash: 'Bash',
37
+ webfetch: 'WebFetch',
38
+ websearch: 'WebSearch',
39
+ question: 'AskUserQuestion',
40
+ todowrite: 'TaskCreate',
41
+ todoread: 'TaskList',
42
+ plan: 'EnterPlanMode',
43
+ task: 'Agent',
44
+ skill: 'Skill',
45
+ };
46
+ function isKiloCodeToolCallEvent(x) {
47
+ return typeof x === 'object' && x !== null;
48
+ }
49
+ export class KiloCodeAdapter {
50
+ platformName = 'kilocode';
51
+ visibilityLevel = 'full-hooks';
52
+ // kilocode.ai/docs/code-with-ai/platforms/cli's Built-in Commands table:
53
+ // `/init` — "Create/update AGENTS.md file for the project." Same
54
+ // convention opencode, Codex, Droid, Cursor, and Gemini CLI already read.
55
+ capabilities = { instructionFilePaths: ['AGENTS.md'] };
56
+ async initialize(_config) {
57
+ // Kilo Code's tool-call capture is delivered via a user-installed
58
+ // plugin file (see getHookInstallInstructions()), not configured by
59
+ // this process — same no-op shape as every other full-hooks adapter.
60
+ }
61
+ normalizeToolCall(raw) {
62
+ const event = isKiloCodeToolCallEvent(raw) ? raw : {};
63
+ const platformToolName = event.tool ?? event.toolName ?? 'unknown';
64
+ const toolName = KILO_CODE_TOOL_MAP[platformToolName] ?? 'Unknown';
65
+ const filePath = event.filePath ?? event.path;
66
+ return {
67
+ toolName,
68
+ platformToolName,
69
+ platform: this.platformName,
70
+ timestamp: event.timestamp ?? Date.now(),
71
+ durationMs: event.durationMs ?? null,
72
+ success: event.success ?? true,
73
+ ...(event.error !== undefined && { error: event.error }),
74
+ ...(event.inputSizeBytes !== undefined && { inputSizeBytes: event.inputSizeBytes }),
75
+ ...(event.outputSizeBytes !== undefined && { outputSizeBytes: event.outputSizeBytes }),
76
+ ...(filePath !== undefined && { filePath }),
77
+ ...(event.command !== undefined && { command: event.command }),
78
+ ...(event.sessionId !== undefined && { sessionId: event.sessionId }),
79
+ };
80
+ }
81
+ mapToolName(platformToolName) {
82
+ return KILO_CODE_TOOL_MAP[platformToolName] ?? 'Unknown';
83
+ }
84
+ getSessionMetadata() {
85
+ return {
86
+ platform: this.platformName,
87
+ };
88
+ }
89
+ getHookInstallInstructions() {
90
+ return [
91
+ 'Kilo Code Setup:',
92
+ '',
93
+ '1. Register the Preflight MCP server in kilo.json:',
94
+ ' {',
95
+ ' "mcp": {',
96
+ ' "preflight": {',
97
+ ' "type": "local",',
98
+ ' "command": ["npx", "preflight", "--stdio"],',
99
+ ' "environment": {',
100
+ ' "MCP_CLIENT": "kilocode",',
101
+ ' "NEW_RELIC_LICENSE_KEY": "<your-key>",',
102
+ ' "NEW_RELIC_ACCOUNT_ID": "<your-account-id>"',
103
+ ' }',
104
+ ' }',
105
+ ' }',
106
+ ' }',
107
+ '2. Ensure preflight-collector is on your PATH (npm link, or npm install -g @newrelic/preflight)',
108
+ '3. Built-in tool calls (read, edit, write, bash, etc.) require a plugin file, since',
109
+ ' Kilo Code has no external hooks.json — it only supports in-process JS/TS plugins',
110
+ ' (Kilo CLI is a fork of opencode and shares this mechanism exactly). Create',
111
+ ' .kilo/plugin/preflight.ts (project) or ~/.config/kilo/plugin/preflight.ts (global) with:',
112
+ '',
113
+ ' import { spawn } from "node:child_process"',
114
+ ' import type { Plugin } from "@kilocode/plugin"',
115
+ '',
116
+ ' const TOOL_MAP: Record<string, string> = {',
117
+ ' read: "Read", glob: "Glob", grep: "Grep", edit: "Edit", write: "Write",',
118
+ ' apply_patch: "Edit", bash: "Bash", webfetch: "WebFetch", websearch: "WebSearch",',
119
+ ' question: "AskUserQuestion", todowrite: "TaskCreate", todoread: "TaskList",',
120
+ ' plan: "EnterPlanMode", task: "Agent", skill: "Skill",',
121
+ ' }',
122
+ '',
123
+ ' function report(payload: unknown) {',
124
+ ' const child = spawn("preflight-collector", [], { stdio: ["pipe", "ignore", "ignore"] })',
125
+ ' child.stdin.write(JSON.stringify(payload))',
126
+ ' child.stdin.end()',
127
+ ' }',
128
+ '',
129
+ ' function toClaudeShape(tool: string, args: any) {',
130
+ ' if (tool === "bash") return { command: args.command }',
131
+ ' if (tool === "read" || tool === "edit" || tool === "write") return { file_path: args.filePath }',
132
+ ' return args',
133
+ ' }',
134
+ '',
135
+ ' const PreflightPlugin: Plugin = async () => ({',
136
+ ' "tool.execute.before": async (input, output) => {',
137
+ ' report({',
138
+ ' hook_event_name: "PreToolUse",',
139
+ ' tool_name: TOOL_MAP[input.tool] ?? "Unknown",',
140
+ ' tool_input: toClaudeShape(input.tool, output.args),',
141
+ ' tool_use_id: input.callID,',
142
+ ' session_id: input.sessionID,',
143
+ ' })',
144
+ ' },',
145
+ ' "tool.execute.after": async (input, output) => {',
146
+ ' report({',
147
+ ' hook_event_name: "PostToolUse",',
148
+ ' tool_name: TOOL_MAP[input.tool] ?? "Unknown",',
149
+ ' tool_use_id: input.callID,',
150
+ ' session_id: input.sessionID,',
151
+ ' })',
152
+ ' },',
153
+ ' })',
154
+ '',
155
+ ' export default { id: "preflight", server: PreflightPlugin }',
156
+ '',
157
+ '4. Restart Kilo Code.',
158
+ '',
159
+ "Known gaps: Kilo's hook payload has no success/error field, so every",
160
+ 'tool call reports success unconditionally. Only bash/read/edit/write',
161
+ "get structured input metadata; other tools' arg shapes (including",
162
+ 'apply_patch) are undocumented and forwarded as-is. No output-side',
163
+ 'metadata (exit codes, match counts, etc.) is captured. kilo-playwright_*',
164
+ "(Kilo's built-in Playwright MCP) tool calls are observable through this",
165
+ 'same plugin mechanism but report as Unknown, same as any unrecognized',
166
+ 'MCP tool call — see docs/ADAPTERS.md for details.',
167
+ ].join('\n');
168
+ }
169
+ isSupported() {
170
+ return (process.env.MCP_CLIENT === 'kilocode' || process.env.NEW_RELIC_AI_PLATFORM === 'kilocode');
171
+ }
172
+ }
173
+ //# sourceMappingURL=kilo-code-adapter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"kilo-code-adapter.js","sourceRoot":"","sources":["../../src/platforms/kilo-code-adapter.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,15 @@
1
+ import type { NormalizedToolCall, PlatformAdapter, PlatformConfig, PlatformSessionMetadata } from './types.js';
2
+ export declare class OpencodeAdapter implements PlatformAdapter {
3
+ readonly platformName = "opencode";
4
+ readonly visibilityLevel: "full-hooks";
5
+ readonly capabilities: {
6
+ instructionFilePaths: readonly ["AGENTS.md"];
7
+ };
8
+ initialize(_config: PlatformConfig): Promise<void>;
9
+ normalizeToolCall(raw: unknown): NormalizedToolCall;
10
+ mapToolName(platformToolName: string): string;
11
+ getSessionMetadata(): PlatformSessionMetadata;
12
+ getHookInstallInstructions(): string;
13
+ isSupported(): boolean;
14
+ }
15
+ //# sourceMappingURL=opencode-adapter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"opencode-adapter.d.ts","sourceRoot":"","sources":["../../src/platforms/opencode-adapter.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,kBAAkB,EAClB,eAAe,EACf,cAAc,EACd,uBAAuB,EACxB,MAAM,YAAY,CAAC;AAoDpB,qBAAa,eAAgB,YAAW,eAAe;IACrD,QAAQ,CAAC,YAAY,cAAc;IACnC,QAAQ,CAAC,eAAe,EAAG,YAAY,CAAU;IAGjD,QAAQ,CAAC,YAAY;;MAAoD;IAEnE,UAAU,CAAC,OAAO,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC;IAMxD,iBAAiB,CAAC,GAAG,EAAE,OAAO,GAAG,kBAAkB;IAsBnD,WAAW,CAAC,gBAAgB,EAAE,MAAM,GAAG,MAAM;IAI7C,kBAAkB,IAAI,uBAAuB;IAM7C,0BAA0B,IAAI,MAAM;IA2EpC,WAAW,IAAI,OAAO;CAKvB"}
@@ -0,0 +1,151 @@
1
+ /**
2
+ * Maps opencode's built-in tool names (opencode.ai/docs/tools/) to the
3
+ * normalized Claude Code tool vocabulary. `bash`/`read`/`write`/`edit`/
4
+ * `grep`/`glob`/`webfetch`/`websearch` map directly. `apply_patch` collapses
5
+ * to 'Edit' — a single patch can touch multiple files with mixed
6
+ * add/update/delete actions, so there's no clean 1:1 mapping, same
7
+ * precedent as CodexAdapter's apply_patch -> 'Edit'. `skill` maps to 'Skill'
8
+ * (same precedent as ContinueAdapter's read_skill -> 'Skill'). `todowrite`
9
+ * maps to 'TaskCreate' (same precedent as AmazonQAdapter's todo_list ->
10
+ * 'TaskCreate'). `question` maps to 'AskUserQuestion' — opencode's own docs
11
+ * describe it as "Each question includes a header, the question text, and a
12
+ * list of options," matching AskUserQuestion's shape. `lsp` is experimental
13
+ * (gated behind OPENCODE_EXPERIMENTAL_LSP_TOOL) with no confirmed Preflight
14
+ * canonical equivalent and is left unmapped -> falls through to 'Unknown',
15
+ * same treatment as Codex's update_plan.
16
+ */
17
+ const OPENCODE_TOOL_MAP = {
18
+ bash: 'Bash',
19
+ read: 'Read',
20
+ write: 'Write',
21
+ edit: 'Edit',
22
+ apply_patch: 'Edit',
23
+ grep: 'Grep',
24
+ glob: 'Glob',
25
+ webfetch: 'WebFetch',
26
+ websearch: 'WebSearch',
27
+ skill: 'Skill',
28
+ todowrite: 'TaskCreate',
29
+ question: 'AskUserQuestion',
30
+ };
31
+ function isOpencodeToolCallEvent(x) {
32
+ return typeof x === 'object' && x !== null;
33
+ }
34
+ export class OpencodeAdapter {
35
+ platformName = 'opencode';
36
+ visibilityLevel = 'full-hooks';
37
+ // opencode.ai/docs/rules/: project-level AGENTS.md, with CLAUDE.md as a
38
+ // documented fallback (opencode's own "Claude Code Compatibility" mode).
39
+ capabilities = { instructionFilePaths: ['AGENTS.md'] };
40
+ async initialize(_config) {
41
+ // opencode's tool-call capture is delivered via a user-installed plugin
42
+ // file (see getHookInstallInstructions()), not configured by this
43
+ // process — same no-op shape as every other full-hooks adapter.
44
+ }
45
+ normalizeToolCall(raw) {
46
+ const event = isOpencodeToolCallEvent(raw) ? raw : {};
47
+ const platformToolName = event.tool ?? event.toolName ?? 'unknown';
48
+ const toolName = OPENCODE_TOOL_MAP[platformToolName] ?? 'Unknown';
49
+ const filePath = event.filePath ?? event.path;
50
+ return {
51
+ toolName,
52
+ platformToolName,
53
+ platform: this.platformName,
54
+ timestamp: event.timestamp ?? Date.now(),
55
+ durationMs: event.durationMs ?? null,
56
+ success: event.success ?? true,
57
+ ...(event.error !== undefined && { error: event.error }),
58
+ ...(event.inputSizeBytes !== undefined && { inputSizeBytes: event.inputSizeBytes }),
59
+ ...(event.outputSizeBytes !== undefined && { outputSizeBytes: event.outputSizeBytes }),
60
+ ...(filePath !== undefined && { filePath }),
61
+ ...(event.command !== undefined && { command: event.command }),
62
+ ...(event.sessionId !== undefined && { sessionId: event.sessionId }),
63
+ };
64
+ }
65
+ mapToolName(platformToolName) {
66
+ return OPENCODE_TOOL_MAP[platformToolName] ?? 'Unknown';
67
+ }
68
+ getSessionMetadata() {
69
+ return {
70
+ platform: this.platformName,
71
+ };
72
+ }
73
+ getHookInstallInstructions() {
74
+ return [
75
+ 'opencode Setup:',
76
+ '',
77
+ '1. Register the Preflight MCP server in opencode.json:',
78
+ ' {',
79
+ ' "mcp": {',
80
+ ' "preflight": {',
81
+ ' "type": "local",',
82
+ ' "command": ["npx", "preflight", "--stdio"],',
83
+ ' "environment": {',
84
+ ' "MCP_CLIENT": "opencode",',
85
+ ' "NEW_RELIC_LICENSE_KEY": "<your-key>",',
86
+ ' "NEW_RELIC_ACCOUNT_ID": "<your-account-id>"',
87
+ ' }',
88
+ ' }',
89
+ ' }',
90
+ ' }',
91
+ '2. Ensure preflight-collector is on your PATH (npm link, or npm install -g @newrelic/preflight)',
92
+ '3. Built-in tool calls (bash, read, write, edit, etc.) require a plugin file, since',
93
+ ' opencode has no external hooks.json — it only supports in-process JS/TS plugins.',
94
+ ' Create .opencode/plugins/preflight.js (project) or',
95
+ ' ~/.config/opencode/plugins/preflight.js (global) with:',
96
+ '',
97
+ ' import { spawn } from "node:child_process"',
98
+ '',
99
+ ' const TOOL_MAP = {',
100
+ ' bash: "Bash", read: "Read", write: "Write", edit: "Edit",',
101
+ ' apply_patch: "Edit", grep: "Grep", glob: "Glob",',
102
+ ' webfetch: "WebFetch", websearch: "WebSearch", skill: "Skill",',
103
+ ' todowrite: "TaskCreate", question: "AskUserQuestion",',
104
+ ' }',
105
+ '',
106
+ ' function report(payload) {',
107
+ ' const child = spawn("preflight-collector", [], { stdio: ["pipe", "ignore", "ignore"] })',
108
+ ' child.stdin.write(JSON.stringify(payload))',
109
+ ' child.stdin.end()',
110
+ ' }',
111
+ '',
112
+ ' function toClaudeShape(tool, args) {',
113
+ ' if (tool === "bash") return { command: args.command }',
114
+ ' if (tool === "read" || tool === "edit" || tool === "write") return { file_path: args.filePath }',
115
+ ' return args',
116
+ ' }',
117
+ '',
118
+ ' export const PreflightPlugin = async () => ({',
119
+ ' "tool.execute.before": async (input, output) => {',
120
+ ' report({',
121
+ ' hook_event_name: "PreToolUse",',
122
+ ' tool_name: TOOL_MAP[input.tool] ?? "Unknown",',
123
+ ' tool_input: toClaudeShape(input.tool, output.args),',
124
+ ' tool_use_id: input.callID,',
125
+ ' session_id: input.sessionID,',
126
+ ' })',
127
+ ' },',
128
+ ' "tool.execute.after": async (input, output) => {',
129
+ ' report({',
130
+ ' hook_event_name: "PostToolUse",',
131
+ ' tool_name: TOOL_MAP[input.tool] ?? "Unknown",',
132
+ ' tool_use_id: input.callID,',
133
+ ' session_id: input.sessionID,',
134
+ ' })',
135
+ ' },',
136
+ ' })',
137
+ '',
138
+ '4. Restart opencode.',
139
+ '',
140
+ "Known gaps: opencode's hook payload has no success/error field, so every",
141
+ 'tool call reports success unconditionally. Only bash/read/edit/write',
142
+ "get structured input metadata; other tools' arg shapes (including apply_patch)",
143
+ 'are undocumented and forwarded as-is. No output-side metadata (exit codes,',
144
+ 'match counts, etc.) is captured — see docs/ADAPTERS.md for details.',
145
+ ].join('\n');
146
+ }
147
+ isSupported() {
148
+ return (process.env.MCP_CLIENT === 'opencode' || process.env.NEW_RELIC_AI_PLATFORM === 'opencode');
149
+ }
150
+ }
151
+ //# sourceMappingURL=opencode-adapter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"opencode-adapter.js","sourceRoot":"","sources":["../../src/platforms/opencode-adapter.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"platform-registry.d.ts","sourceRoot":"","sources":["../../src/platforms/platform-registry.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,eAAe,EAAE,uBAAuB,EAAE,MAAM,YAAY,CAAC;AAiB3E,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAyB;IAClD,OAAO,CAAC,MAAM,CAAgC;IAE9C,QAAQ,CAAC,OAAO,EAAE,eAAe,GAAG,IAAI;IAKxC,MAAM,IAAI,eAAe,GAAG,IAAI;IAahC,SAAS,IAAI,eAAe;IAY5B,aAAa,IAAI,SAAS,eAAe,EAAE;CAG5C;AAED,wBAAgB,qBAAqB,IAAI,gBAAgB,CAgBxD;AAED;;;;;GAKG;AACH,wBAAgB,wBAAwB,IAAI,WAAW,CAAC,MAAM,EAAE,uBAAuB,CAAC,CAKvF"}
1
+ {"version":3,"file":"platform-registry.d.ts","sourceRoot":"","sources":["../../src/platforms/platform-registry.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,eAAe,EAAE,uBAAuB,EAAE,MAAM,YAAY,CAAC;AAmB3E,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAyB;IAClD,OAAO,CAAC,MAAM,CAAgC;IAE9C,QAAQ,CAAC,OAAO,EAAE,eAAe,GAAG,IAAI;IAKxC,MAAM,IAAI,eAAe,GAAG,IAAI;IAahC,SAAS,IAAI,eAAe;IAY5B,aAAa,IAAI,SAAS,eAAe,EAAE;CAG5C;AAED,wBAAgB,qBAAqB,IAAI,gBAAgB,CAkBxD;AAED;;;;;GAKG;AACH,wBAAgB,wBAAwB,IAAI,WAAW,CAAC,MAAM,EAAE,uBAAuB,CAAC,CAKvF"}
@@ -11,6 +11,8 @@ import { DroidAdapter } from './droid-adapter.js';
11
11
  import { GeminiCliAdapter } from './gemini-cli-adapter.js';
12
12
  import { ClineAdapter } from './cline-adapter.js';
13
13
  import { CodexAdapter } from './codex-adapter.js';
14
+ import { OpencodeAdapter } from './opencode-adapter.js';
15
+ import { KiloCodeAdapter } from './kilo-code-adapter.js';
14
16
  import { GenericMcpAdapter } from './generic-mcp-adapter.js';
15
17
  const logger = createLogger('platform-registry');
16
18
  export class PlatformRegistry {
@@ -58,6 +60,8 @@ export function createDefaultRegistry() {
58
60
  registry.register(new GeminiCliAdapter());
59
61
  registry.register(new ClineAdapter());
60
62
  registry.register(new CodexAdapter());
63
+ registry.register(new OpencodeAdapter());
64
+ registry.register(new KiloCodeAdapter());
61
65
  registry.register(new GenericMcpAdapter()); // always last
62
66
  return registry;
63
67
  }
@@ -1 +1 @@
1
- {"version":3,"file":"platform-registry.js","sourceRoot":"","sources":["../../src/platforms/platform-registry.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"platform-registry.js","sourceRoot":"","sources":["../../src/platforms/platform-registry.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@newrelic/preflight",
3
- "version": "1.10.0",
3
+ "version": "1.12.0",
4
4
  "type": "module",
5
5
  "license": "Apache-2.0",
6
6
  "private": false,