kodelet 0.4.24-alpha

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/dist/api.d.ts ADDED
@@ -0,0 +1,23 @@
1
+ import type { AnyZodSchema, CommandRegistration, CommandResult, EventHandler, EventName, EventResult, EventSubscriptionOptions, ExecuteCommandParams, ExecuteToolParams, ExtensionAPI, ExtensionEntrypoint, ExtensionMetadata, HandleEventParams, InitializeParams, InitializeResult, ToolExecutionResult, ToolRegistration } from "./types.js";
2
+ export declare class ExtensionHost implements ExtensionAPI {
3
+ private metadata;
4
+ private tools;
5
+ private commands;
6
+ private handlers;
7
+ private order;
8
+ private initParams?;
9
+ setMetadata(metadata: ExtensionMetadata): void;
10
+ registerTool<Schema extends AnyZodSchema>(registration: ToolRegistration<Schema>): void;
11
+ registerCommand<Schema extends AnyZodSchema | undefined = undefined>(registration: CommandRegistration<Schema>): void;
12
+ on<Name extends EventName>(event: Name, handler: EventHandler<Name>): void;
13
+ on<Name extends EventName>(event: Name, options: EventSubscriptionOptions, handler: EventHandler<Name>): void;
14
+ initialize(params: InitializeParams): InitializeResult;
15
+ executeTool(params: ExecuteToolParams): Promise<ToolExecutionResult>;
16
+ executeCommand(params: ExecuteCommandParams): Promise<CommandResult>;
17
+ handleEvent<Name extends EventName>(params: HandleEventParams<Name>): Promise<EventResult>;
18
+ private subscriptions;
19
+ }
20
+ export declare function defineExtension(entrypoint: ExtensionEntrypoint): ExtensionEntrypoint;
21
+ export declare function createExtensionHost(entrypoint: ExtensionEntrypoint): Promise<ExtensionHost>;
22
+ export declare function zodSchemaToJsonSchema(schema: AnyZodSchema): Record<string, unknown>;
23
+ //# sourceMappingURL=api.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"api.d.ts","sourceRoot":"","sources":["../src/api.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EACV,YAAY,EAEZ,mBAAmB,EACnB,aAAa,EACb,YAAY,EACZ,SAAS,EACT,WAAW,EACX,wBAAwB,EACxB,oBAAoB,EACpB,iBAAiB,EACjB,YAAY,EACZ,mBAAmB,EAEnB,iBAAiB,EACjB,iBAAiB,EACjB,gBAAgB,EAChB,gBAAgB,EAChB,mBAAmB,EACnB,gBAAgB,EACjB,MAAM,YAAY,CAAC;AAmBpB,qBAAa,aAAc,YAAW,YAAY;IAChD,OAAO,CAAC,QAAQ,CAAyB;IACzC,OAAO,CAAC,KAAK,CAAqC;IAClD,OAAO,CAAC,QAAQ,CAAwC;IACxD,OAAO,CAAC,QAAQ,CAAgC;IAChD,OAAO,CAAC,KAAK,CAAK;IAClB,OAAO,CAAC,UAAU,CAAC,CAAmB;IAEtC,WAAW,CAAC,QAAQ,EAAE,iBAAiB,GAAG,IAAI;IAI9C,YAAY,CAAC,MAAM,SAAS,YAAY,EAAE,YAAY,EAAE,gBAAgB,CAAC,MAAM,CAAC,GAAG,IAAI;IAUvF,eAAe,CAAC,MAAM,SAAS,YAAY,GAAG,SAAS,GAAG,SAAS,EAAE,YAAY,EAAE,mBAAmB,CAAC,MAAM,CAAC,GAAG,IAAI;IAiBrH,EAAE,CAAC,IAAI,SAAS,SAAS,EAAE,KAAK,EAAE,IAAI,EAAE,OAAO,EAAE,YAAY,CAAC,IAAI,CAAC,GAAG,IAAI;IAC1E,EAAE,CAAC,IAAI,SAAS,SAAS,EAAE,KAAK,EAAE,IAAI,EAAE,OAAO,EAAE,wBAAwB,EAAE,OAAO,EAAE,YAAY,CAAC,IAAI,CAAC,GAAG,IAAI;IAmB7G,UAAU,CAAC,MAAM,EAAE,gBAAgB,GAAG,gBAAgB;IAqBhD,WAAW,CAAC,MAAM,EAAE,iBAAiB,GAAG,OAAO,CAAC,mBAAmB,CAAC;IAapE,cAAc,CAAC,MAAM,EAAE,oBAAoB,GAAG,OAAO,CAAC,aAAa,CAAC;IAsBpE,WAAW,CAAC,IAAI,SAAS,SAAS,EAAE,MAAM,EAAE,iBAAiB,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,WAAW,CAAC;IAkDhG,OAAO,CAAC,aAAa;CAUtB;AAED,wBAAgB,eAAe,CAAC,UAAU,EAAE,mBAAmB,GAAG,mBAAmB,CAEpF;AAED,wBAAsB,mBAAmB,CAAC,UAAU,EAAE,mBAAmB,GAAG,OAAO,CAAC,aAAa,CAAC,CAIjG;AAED,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,YAAY,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAUnF"}
package/dist/api.js ADDED
@@ -0,0 +1,199 @@
1
+ import { z } from "zod";
2
+ import { createCommandContext, createEventContext, createToolContext } from "./context.js";
3
+ export class ExtensionHost {
4
+ metadata = {};
5
+ tools = new Map();
6
+ commands = new Map();
7
+ handlers = [];
8
+ order = 0;
9
+ initParams;
10
+ setMetadata(metadata) {
11
+ this.metadata = { ...this.metadata, ...metadata };
12
+ }
13
+ registerTool(registration) {
14
+ if (this.tools.has(registration.name)) {
15
+ throw new Error(`Duplicate extension tool registration: ${registration.name}`);
16
+ }
17
+ this.tools.set(registration.name, {
18
+ registration: registration,
19
+ inputSchema: zodSchemaToJsonSchema(registration.inputSchema),
20
+ });
21
+ }
22
+ registerCommand(registration) {
23
+ const primaryName = normalizeCommandName(registration.name);
24
+ const names = [primaryName, ...(registration.aliases ?? []).map(normalizeCommandName).filter((name) => name && name !== primaryName)];
25
+ if (new Set(names).size !== names.length) {
26
+ throw new Error(`Duplicate extension command registration: ${registration.name}`);
27
+ }
28
+ for (const name of names) {
29
+ if (this.commands.has(name)) {
30
+ throw new Error(`Duplicate extension command registration: ${name}`);
31
+ }
32
+ }
33
+ this.commands.set(normalizeCommandName(registration.name), {
34
+ registration: registration,
35
+ inputSchema: registration.inputSchema ? zodSchemaToJsonSchema(registration.inputSchema) : undefined,
36
+ });
37
+ }
38
+ on(event, optionsOrHandler, maybeHandler) {
39
+ const options = typeof optionsOrHandler === "function" ? {} : optionsOrHandler;
40
+ const handler = typeof optionsOrHandler === "function" ? optionsOrHandler : maybeHandler;
41
+ if (!handler) {
42
+ throw new Error(`Missing handler for extension event ${event}`);
43
+ }
44
+ this.handlers.push({
45
+ event,
46
+ priority: options.priority ?? 0,
47
+ order: this.order++,
48
+ handler: handler,
49
+ });
50
+ }
51
+ initialize(params) {
52
+ this.initParams = params;
53
+ return {
54
+ name: this.metadata.name ?? params.extension.id,
55
+ version: this.metadata.version,
56
+ tools: [...this.tools.values()].map(({ registration, inputSchema }) => ({
57
+ name: registration.name,
58
+ description: registration.description,
59
+ inputSchema,
60
+ })),
61
+ commands: [...this.commands.values()].map(({ registration, inputSchema }) => ({
62
+ name: registration.name,
63
+ aliases: registration.aliases,
64
+ description: registration.description,
65
+ inputSchema,
66
+ kind: registration.kind,
67
+ })),
68
+ subscriptions: this.subscriptions(),
69
+ };
70
+ }
71
+ async executeTool(params) {
72
+ const tool = this.tools.get(params.name);
73
+ if (!tool) {
74
+ throw new Error(`Unknown extension tool: ${params.name}`);
75
+ }
76
+ const input = await tool.registration.inputSchema.parseAsync(params.input);
77
+ const result = await tool.registration.execute(input, createToolContext(this.initParams, params.context));
78
+ if (typeof result === "string") {
79
+ return { content: result };
80
+ }
81
+ return result;
82
+ }
83
+ async executeCommand(params) {
84
+ const command = this.commands.get(normalizeCommandName(params.name));
85
+ if (!command) {
86
+ throw new Error(`Unknown extension command: ${params.name}`);
87
+ }
88
+ let input = params.input ?? {};
89
+ if (command.registration.inputSchema) {
90
+ const parsed = await command.registration.inputSchema.safeParseAsync(input);
91
+ if (!parsed.success) {
92
+ return { action: "pass" };
93
+ }
94
+ input = parsed.data;
95
+ }
96
+ const result = await command.registration.execute(input, createCommandContext(this.initParams, params.context, params.invocation));
97
+ return result ?? { action: "pass" };
98
+ }
99
+ async handleEvent(params) {
100
+ const handlers = this.handlers
101
+ .filter((handler) => handler.event === params.event)
102
+ .sort((a, b) => b.priority - a.priority || a.order - b.order);
103
+ const payload = clonePayload(params.payload ?? {});
104
+ const event = Object.assign(payload, {
105
+ id: params.id,
106
+ event: params.event,
107
+ });
108
+ const ctx = createEventContext(this.initParams, params.context);
109
+ const aggregate = {};
110
+ for (const entry of handlers) {
111
+ const result = await entry.handler(event, ctx);
112
+ if (!result) {
113
+ continue;
114
+ }
115
+ if (result.input !== undefined) {
116
+ aggregate.input = result.input;
117
+ setNestedToolField(event, "input", result.input);
118
+ }
119
+ if (result.output !== undefined) {
120
+ aggregate.output = result.output;
121
+ setNestedToolField(event, "output", result.output);
122
+ }
123
+ if (result.message !== undefined) {
124
+ aggregate.message = result.message;
125
+ }
126
+ if (result.systemPrompt !== undefined) {
127
+ aggregate.systemPrompt = result.systemPrompt;
128
+ }
129
+ if (result.tools !== undefined) {
130
+ aggregate.tools = mergeToolPatch(aggregate.tools, result.tools);
131
+ }
132
+ if (result.followUpMessages !== undefined) {
133
+ aggregate.followUpMessages = [...(aggregate.followUpMessages ?? []), ...result.followUpMessages];
134
+ }
135
+ if (result.resources !== undefined) {
136
+ aggregate.resources = result.resources;
137
+ }
138
+ if (result.block) {
139
+ aggregate.block = result.block;
140
+ return aggregate;
141
+ }
142
+ }
143
+ return aggregate;
144
+ }
145
+ subscriptions() {
146
+ const byEvent = new Map();
147
+ for (const handler of this.handlers) {
148
+ const previous = byEvent.get(handler.event);
149
+ if (previous === undefined || handler.priority > previous) {
150
+ byEvent.set(handler.event, handler.priority);
151
+ }
152
+ }
153
+ return [...byEvent.entries()].map(([event, priority]) => ({ event, priority }));
154
+ }
155
+ }
156
+ export function defineExtension(entrypoint) {
157
+ return entrypoint;
158
+ }
159
+ export async function createExtensionHost(entrypoint) {
160
+ const host = new ExtensionHost();
161
+ await entrypoint(host);
162
+ return host;
163
+ }
164
+ export function zodSchemaToJsonSchema(schema) {
165
+ const converter = z
166
+ .toJSONSchema;
167
+ if (typeof converter === "function") {
168
+ const converted = converter(schema, { target: "draft-7", unrepresentable: "any" });
169
+ if (isRecord(converted)) {
170
+ return converted;
171
+ }
172
+ }
173
+ return { type: "object", additionalProperties: true };
174
+ }
175
+ function clonePayload(payload) {
176
+ return JSON.parse(JSON.stringify(payload));
177
+ }
178
+ function setNestedToolField(event, field, value) {
179
+ const tool = event.tool;
180
+ if (isRecord(tool)) {
181
+ tool[field] = value;
182
+ }
183
+ }
184
+ function mergeToolPatch(current, next) {
185
+ if (!next) {
186
+ return current;
187
+ }
188
+ return {
189
+ disable: [...(current?.disable ?? []), ...(next.disable ?? [])],
190
+ enable: [...(current?.enable ?? []), ...(next.enable ?? [])],
191
+ };
192
+ }
193
+ function isRecord(value) {
194
+ return typeof value === "object" && value !== null && !Array.isArray(value);
195
+ }
196
+ function normalizeCommandName(name) {
197
+ return name.trim().replace(/^\/+/, "");
198
+ }
199
+ //# sourceMappingURL=api.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"api.js","sourceRoot":"","sources":["../src/api.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env node
2
+ export {};
3
+ //# sourceMappingURL=kodelet-extension-node.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"kodelet-extension-node.d.ts","sourceRoot":"","sources":["../../src/bin/kodelet-extension-node.ts"],"names":[],"mappings":""}
@@ -0,0 +1,18 @@
1
+ #!/usr/bin/env node
2
+ import path from "node:path";
3
+ import { pathToFileURL } from "node:url";
4
+ import nodeProcess from "node:process";
5
+ import { runExtension } from "../runtime.js";
6
+ const modulePath = nodeProcess.argv[2];
7
+ if (!modulePath) {
8
+ nodeProcess.stderr.write("usage: kodelet-extension-node <module>\n");
9
+ nodeProcess.exit(2);
10
+ }
11
+ const resolvedPath = path.isAbsolute(modulePath) ? modulePath : path.resolve(nodeProcess.cwd(), modulePath);
12
+ const mod = (await import(pathToFileURL(resolvedPath).href));
13
+ if (typeof mod.default !== "function") {
14
+ nodeProcess.stderr.write(`extension module ${modulePath} must export a default function\n`);
15
+ nodeProcess.exit(2);
16
+ }
17
+ await runExtension(mod.default);
18
+ //# sourceMappingURL=kodelet-extension-node.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"kodelet-extension-node.js","sourceRoot":"","sources":["../../src/bin/kodelet-extension-node.ts"],"names":[],"mappings":";AAEA,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,WAAW,MAAM,cAAc,CAAC;AAEvC,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAG7C,MAAM,UAAU,GAAG,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAEvC,IAAI,CAAC,UAAU,EAAE,CAAC;IAChB,WAAW,CAAC,MAAM,CAAC,KAAK,CAAC,0CAA0C,CAAC,CAAC;IACrE,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AACtB,CAAC;AAED,MAAM,YAAY,GAAG,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,GAAG,EAAE,EAAE,UAAU,CAAC,CAAC;AAC5G,MAAM,GAAG,GAAG,CAAC,MAAM,MAAM,CAAC,aAAa,CAAC,YAAY,CAAC,CAAC,IAAI,CAAC,CAAsC,CAAC;AAElG,IAAI,OAAO,GAAG,CAAC,OAAO,KAAK,UAAU,EAAE,CAAC;IACtC,WAAW,CAAC,MAAM,CAAC,KAAK,CAAC,oBAAoB,UAAU,mCAAmC,CAAC,CAAC;IAC5F,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AACtB,CAAC;AAED,MAAM,YAAY,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC"}
@@ -0,0 +1,5 @@
1
+ import type { BaseCallContext, CommandContext, CommandInvocation, EventContext, InitializeParams, ToolContext } from "./types.js";
2
+ export declare function createToolContext(init: InitializeParams | undefined, context?: BaseCallContext): ToolContext;
3
+ export declare function createCommandContext(init: InitializeParams | undefined, context: BaseCallContext | undefined, invocation: CommandInvocation): CommandContext;
4
+ export declare function createEventContext(init: InitializeParams | undefined, context?: BaseCallContext): EventContext;
5
+ //# sourceMappingURL=context.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../src/context.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EACV,eAAe,EACf,cAAc,EACd,iBAAiB,EACjB,YAAY,EAGZ,gBAAgB,EAGhB,WAAW,EACZ,MAAM,YAAY,CAAC;AAIpB,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,gBAAgB,GAAG,SAAS,EAAE,OAAO,GAAE,eAAoB,GAAG,WAAW,CAEhH;AAED,wBAAgB,oBAAoB,CAClC,IAAI,EAAE,gBAAgB,GAAG,SAAS,EAClC,OAAO,EAAE,eAAe,YAAK,EAC7B,UAAU,EAAE,iBAAiB,GAC5B,cAAc,CAKhB;AAED,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,gBAAgB,GAAG,SAAS,EAAE,OAAO,GAAE,eAAoB,GAAG,YAAY,CAElH"}
@@ -0,0 +1,188 @@
1
+ import { execFile, spawn as spawnProcess } from "node:child_process";
2
+ import { promises as fs } from "node:fs";
3
+ import os from "node:os";
4
+ import path from "node:path";
5
+ import nodeProcess from "node:process";
6
+ import { promisify } from "node:util";
7
+ const execFileAsync = promisify(execFile);
8
+ export function createToolContext(init, context = {}) {
9
+ return createSharedContext(init, context);
10
+ }
11
+ export function createCommandContext(init, context = {}, invocation) {
12
+ return {
13
+ ...createSharedContext(init, context),
14
+ input: invocation,
15
+ };
16
+ }
17
+ export function createEventContext(init, context = {}) {
18
+ return createSharedContext(init, context);
19
+ }
20
+ function createSharedContext(init, context) {
21
+ const cwd = path.resolve(context.cwd ?? init?.extension.cwd ?? nodeProcess.cwd());
22
+ const dataDir = path.resolve(init?.extension.dataDir || path.join(os.homedir(), ".kodelet", "extensions", "data", init?.extension.id ?? "extension"));
23
+ const log = createLogger(init?.extension.id);
24
+ const resolveWorkspacePath = (target) => {
25
+ const resolved = path.resolve(cwd, target || ".");
26
+ if (!isPathInside(resolved, cwd)) {
27
+ throw new Error(`Path escapes workspace: ${target}`);
28
+ }
29
+ return resolved;
30
+ };
31
+ const resolveStoragePath = (target) => {
32
+ const resolved = path.resolve(dataDir, target || ".");
33
+ if (!isPathInside(resolved, dataDir)) {
34
+ throw new Error(`Path escapes extension storage: ${target}`);
35
+ }
36
+ return resolved;
37
+ };
38
+ const resolveFsPath = (target) => (path.isAbsolute(target) ? target : resolveWorkspacePath(target));
39
+ return {
40
+ sessionId: context.sessionId,
41
+ conversationId: context.conversationId,
42
+ cwd,
43
+ provider: context.provider,
44
+ model: context.model,
45
+ profile: context.profile,
46
+ recipeName: context.recipeName,
47
+ invokedBy: context.invokedBy,
48
+ storage: {
49
+ dataDir,
50
+ async readText(target) {
51
+ try {
52
+ return await fs.readFile(resolveStoragePath(target), "utf8");
53
+ }
54
+ catch (error) {
55
+ if (isNotFound(error)) {
56
+ return undefined;
57
+ }
58
+ throw error;
59
+ }
60
+ },
61
+ async writeText(target, content) {
62
+ const resolved = resolveStoragePath(target);
63
+ await fs.mkdir(path.dirname(resolved), { recursive: true });
64
+ await fs.writeFile(resolved, content, "utf8");
65
+ },
66
+ async readJson(target) {
67
+ const content = await this.readText(target);
68
+ return content === undefined ? undefined : JSON.parse(content);
69
+ },
70
+ async writeJson(target, value) {
71
+ await this.writeText(target, `${JSON.stringify(value, null, 2)}\n`);
72
+ },
73
+ },
74
+ path: {
75
+ resolveWorkspacePath,
76
+ relativeToWorkspace(target) {
77
+ const resolved = path.isAbsolute(target) ? target : path.resolve(cwd, target);
78
+ return path.relative(cwd, resolved) || ".";
79
+ },
80
+ },
81
+ fs: {
82
+ async exists(target) {
83
+ try {
84
+ await fs.access(resolveFsPath(target));
85
+ return true;
86
+ }
87
+ catch (error) {
88
+ if (isNotFound(error)) {
89
+ return false;
90
+ }
91
+ throw error;
92
+ }
93
+ },
94
+ async readText(target) {
95
+ return await fs.readFile(resolveFsPath(target), "utf8");
96
+ },
97
+ async writeText(target, content) {
98
+ const resolved = resolveFsPath(target);
99
+ await fs.mkdir(path.dirname(resolved), { recursive: true });
100
+ await fs.writeFile(resolved, content, "utf8");
101
+ },
102
+ async list(target) {
103
+ const resolved = resolveFsPath(target);
104
+ const entries = await fs.readdir(resolved, { withFileTypes: true });
105
+ return entries.map((entry) => ({
106
+ name: entry.name,
107
+ path: path.join(resolved, entry.name),
108
+ type: entry.isFile() ? "file" : entry.isDirectory() ? "dir" : "other",
109
+ }));
110
+ },
111
+ },
112
+ process: {
113
+ async exec(command, args = [], opts = {}) {
114
+ try {
115
+ const result = await execFileAsync(command, args, {
116
+ cwd: opts.cwd ? resolveWorkspacePath(opts.cwd) : cwd,
117
+ timeout: opts.timeoutMs,
118
+ encoding: "utf8",
119
+ maxBuffer: 10 * 1024 * 1024,
120
+ });
121
+ return { stdout: result.stdout, stderr: result.stderr, exitCode: 0 };
122
+ }
123
+ catch (error) {
124
+ const execError = error;
125
+ return {
126
+ stdout: execError.stdout ?? "",
127
+ stderr: execError.stderr ?? "",
128
+ exitCode: typeof execError.code === "number" ? execError.code : 1,
129
+ };
130
+ }
131
+ },
132
+ async spawn(command, args = [], opts = {}) {
133
+ await new Promise((resolve, reject) => {
134
+ const child = spawnProcess(command, args, {
135
+ cwd: opts.cwd ? resolveWorkspacePath(opts.cwd) : cwd,
136
+ detached: opts.detach,
137
+ stdio: opts.detach ? "ignore" : "inherit",
138
+ });
139
+ child.once("error", reject);
140
+ if (opts.detach) {
141
+ child.unref();
142
+ child.once("spawn", resolve);
143
+ return;
144
+ }
145
+ child.once("close", (code) => {
146
+ if (code === 0) {
147
+ resolve();
148
+ }
149
+ else {
150
+ reject(new Error(`${command} exited with status ${code ?? "unknown"}`));
151
+ }
152
+ });
153
+ });
154
+ },
155
+ },
156
+ env: {
157
+ get(name) {
158
+ return nodeProcess.env[name];
159
+ },
160
+ },
161
+ log,
162
+ };
163
+ }
164
+ function createLogger(extensionId) {
165
+ const write = (level, message, fields) => {
166
+ const payload = {
167
+ level,
168
+ extension: extensionId,
169
+ message,
170
+ ...fields,
171
+ };
172
+ nodeProcess.stderr.write(`${JSON.stringify(payload)}\n`);
173
+ };
174
+ return {
175
+ debug: (message, fields) => write("debug", message, fields),
176
+ info: (message, fields) => write("info", message, fields),
177
+ warn: (message, fields) => write("warn", message, fields),
178
+ error: (message, fields) => write("error", message, fields),
179
+ };
180
+ }
181
+ function isPathInside(target, parent) {
182
+ const relative = path.relative(parent, target);
183
+ return relative === "" || (!relative.startsWith("..") && !path.isAbsolute(relative));
184
+ }
185
+ function isNotFound(error) {
186
+ return typeof error === "object" && error !== null && "code" in error && error.code === "ENOENT";
187
+ }
188
+ //# sourceMappingURL=context.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"context.js","sourceRoot":"","sources":["../src/context.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ export { z } from "zod";
2
+ export { defineExtension, ExtensionHost } from "./api.js";
3
+ export { runExtension } from "./runtime.js";
4
+ export { createTestHarness } from "./test-harness.js";
5
+ export { renderTemplate } from "./template.js";
6
+ export type { RenderTemplateOptions, TemplateView } from "./template.js";
7
+ export type { Awaitable, BaseCallContext, CommandContext, CommandInvocation, CommandKind, CommandRegistration, CommandResult, EnvContext, EmptyEvent, EventBlock, EventContext, EventHandler, EventName, EventPayload, EventPayloadMap, EventResult, EventSubscriptionOptions, ExecResult, ExtensionAPI, ExtensionEntrypoint, ExtensionEvent, ExtensionMetadata, FileInfo, FileSystemContext, InitializeParams, InitializeResult, LogContext, PathContext, ProcessContext, StorageContext, ToolContext, ToolExecutionResult, ToolRegistration, } from "./types.js";
8
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,eAAe,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAC1D,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAC5C,OAAO,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AACtD,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAC/C,YAAY,EAAE,qBAAqB,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AACzE,YAAY,EACV,SAAS,EACT,eAAe,EACf,cAAc,EACd,iBAAiB,EACjB,WAAW,EACX,mBAAmB,EACnB,aAAa,EACb,UAAU,EACV,UAAU,EACV,UAAU,EACV,YAAY,EACZ,YAAY,EACZ,SAAS,EACT,YAAY,EACZ,eAAe,EACf,WAAW,EACX,wBAAwB,EACxB,UAAU,EACV,YAAY,EACZ,mBAAmB,EACnB,cAAc,EACd,iBAAiB,EACjB,QAAQ,EACR,iBAAiB,EACjB,gBAAgB,EAChB,gBAAgB,EAChB,UAAU,EACV,WAAW,EACX,cAAc,EACd,cAAc,EACd,WAAW,EACX,mBAAmB,EACnB,gBAAgB,GACjB,MAAM,YAAY,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,6 @@
1
+ export { z } from "zod";
2
+ export { defineExtension, ExtensionHost } from "./api.js";
3
+ export { runExtension } from "./runtime.js";
4
+ export { createTestHarness } from "./test-harness.js";
5
+ export { renderTemplate } from "./template.js";
6
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,eAAe,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAC1D,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAC5C,OAAO,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AACtD,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC"}
@@ -0,0 +1,5 @@
1
+ import type { ExtensionEntrypoint } from "./types.js";
2
+ export declare function runExtension(entrypoint: ExtensionEntrypoint | {
3
+ default: ExtensionEntrypoint;
4
+ }): Promise<void>;
5
+ //# sourceMappingURL=runtime.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"runtime.d.ts","sourceRoot":"","sources":["../src/runtime.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AAmBtD,wBAAsB,YAAY,CAAC,UAAU,EAAE,mBAAmB,GAAG;IAAE,OAAO,EAAE,mBAAmB,CAAA;CAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAIpH"}
@@ -0,0 +1,98 @@
1
+ import nodeProcess from "node:process";
2
+ import { createExtensionHost } from "./api.js";
3
+ export async function runExtension(entrypoint) {
4
+ const resolvedEntrypoint = typeof entrypoint === "function" ? entrypoint : entrypoint.default;
5
+ const host = await createExtensionHost(resolvedEntrypoint);
6
+ runStdioServer(host);
7
+ }
8
+ function runStdioServer(host) {
9
+ let buffer = Buffer.alloc(0);
10
+ nodeProcess.stdin.on("data", (chunk) => {
11
+ buffer = Buffer.concat([buffer, chunk]);
12
+ while (true) {
13
+ const frame = tryReadFrame(buffer);
14
+ if (!frame) {
15
+ break;
16
+ }
17
+ buffer = frame.remaining;
18
+ void handleRequest(host, frame.payload);
19
+ }
20
+ });
21
+ nodeProcess.stdin.resume();
22
+ }
23
+ async function handleRequest(host, payload) {
24
+ let request;
25
+ try {
26
+ request = JSON.parse(payload.toString("utf8"));
27
+ }
28
+ catch (error) {
29
+ writeResponse({ jsonrpc: "2.0", id: null, error: { code: -32700, message: errorMessage(error) } });
30
+ return;
31
+ }
32
+ if (request.id === undefined || request.id === null) {
33
+ return;
34
+ }
35
+ try {
36
+ const result = await dispatch(host, request);
37
+ writeResponse({ jsonrpc: "2.0", id: request.id, result });
38
+ }
39
+ catch (error) {
40
+ writeResponse({ jsonrpc: "2.0", id: request.id, error: { code: -32000, message: errorMessage(error) } });
41
+ }
42
+ }
43
+ async function dispatch(host, request) {
44
+ switch (request.method) {
45
+ case "extension.initialize":
46
+ return host.initialize(request.params);
47
+ case "extension.tool.execute":
48
+ return await host.executeTool(request.params);
49
+ case "extension.command.execute":
50
+ return await host.executeCommand(request.params);
51
+ case "extension.event.handle":
52
+ return await host.handleEvent(request.params);
53
+ case "$/cancelRequest":
54
+ return undefined;
55
+ default:
56
+ throw new Error(`Unknown JSON-RPC method: ${request.method}`);
57
+ }
58
+ }
59
+ function tryReadFrame(buffer) {
60
+ const headerEnd = buffer.indexOf("\r\n\r\n");
61
+ const fallbackHeaderEnd = headerEnd === -1 ? buffer.indexOf("\n\n") : -1;
62
+ const separatorIndex = headerEnd === -1 ? fallbackHeaderEnd : headerEnd;
63
+ if (separatorIndex === -1) {
64
+ return undefined;
65
+ }
66
+ const separatorLength = headerEnd === -1 ? 2 : 4;
67
+ const header = buffer.subarray(0, separatorIndex).toString("ascii");
68
+ const contentLength = parseContentLength(header);
69
+ const payloadStart = separatorIndex + separatorLength;
70
+ const payloadEnd = payloadStart + contentLength;
71
+ if (buffer.length < payloadEnd) {
72
+ return undefined;
73
+ }
74
+ return {
75
+ payload: buffer.subarray(payloadStart, payloadEnd),
76
+ remaining: buffer.subarray(payloadEnd),
77
+ };
78
+ }
79
+ function parseContentLength(header) {
80
+ for (const line of header.split(/\r?\n/)) {
81
+ const [key, value] = line.split(":", 2);
82
+ if (key?.trim().toLowerCase() === "content-length") {
83
+ const parsed = Number.parseInt(value?.trim() ?? "", 10);
84
+ if (Number.isFinite(parsed) && parsed >= 0) {
85
+ return parsed;
86
+ }
87
+ }
88
+ }
89
+ throw new Error("Missing Content-Length header");
90
+ }
91
+ function writeResponse(response) {
92
+ const payload = JSON.stringify(response);
93
+ nodeProcess.stdout.write(`Content-Length: ${Buffer.byteLength(payload, "utf8")}\r\n\r\n${payload}`);
94
+ }
95
+ function errorMessage(error) {
96
+ return error instanceof Error ? error.message : String(error);
97
+ }
98
+ //# sourceMappingURL=runtime.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"runtime.js","sourceRoot":"","sources":["../src/runtime.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ export type TemplateView = Record<string, unknown>;
2
+ export interface RenderTemplateOptions {
3
+ partials?: Record<string, string>;
4
+ }
5
+ export declare function renderTemplate(template: string, view: TemplateView, options?: RenderTemplateOptions): string;
6
+ //# sourceMappingURL=template.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"template.d.ts","sourceRoot":"","sources":["../src/template.ts"],"names":[],"mappings":"AAEA,MAAM,MAAM,YAAY,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;AAEnD,MAAM,WAAW,qBAAqB;IACpC,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACnC;AAED,wBAAgB,cAAc,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,YAAY,EAAE,OAAO,GAAE,qBAA0B,GAAG,MAAM,CAEhH"}
@@ -0,0 +1,5 @@
1
+ import mustache from "mustache";
2
+ export function renderTemplate(template, view, options = {}) {
3
+ return mustache.render(template, view, options.partials);
4
+ }
5
+ //# sourceMappingURL=template.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"template.js","sourceRoot":"","sources":["../src/template.ts"],"names":[],"mappings":"AAAA,OAAO,QAAQ,MAAM,UAAU,CAAC;AAQhC,MAAM,UAAU,cAAc,CAAC,QAAgB,EAAE,IAAkB,EAAE,UAAiC,EAAE;IACtG,OAAO,QAAQ,CAAC,MAAM,CAAC,QAAQ,EAAE,IAAI,EAAE,OAAO,CAAC,QAAQ,CAAC,CAAC;AAC3D,CAAC"}
@@ -0,0 +1,9 @@
1
+ import type { CommandResult, EventName, EventResult, ExecuteCommandParams, ExecuteToolParams, ExtensionEntrypoint, HandleEventParams, InitializeParams, InitializeResult, ToolExecutionResult } from "./types.js";
2
+ export interface ExtensionTestHarness {
3
+ initialize(params?: Partial<InitializeParams>): InitializeResult;
4
+ executeTool(params: ExecuteToolParams): Promise<ToolExecutionResult>;
5
+ executeCommand(params: ExecuteCommandParams): Promise<CommandResult>;
6
+ handleEvent<Name extends EventName>(params: HandleEventParams<Name>): Promise<EventResult>;
7
+ }
8
+ export declare function createTestHarness(entrypoint: ExtensionEntrypoint): Promise<ExtensionTestHarness>;
9
+ //# sourceMappingURL=test-harness.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"test-harness.d.ts","sourceRoot":"","sources":["../src/test-harness.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,aAAa,EACb,SAAS,EACT,WAAW,EACX,oBAAoB,EACpB,iBAAiB,EACjB,mBAAmB,EACnB,iBAAiB,EACjB,gBAAgB,EAChB,gBAAgB,EAChB,mBAAmB,EACpB,MAAM,YAAY,CAAC;AAEpB,MAAM,WAAW,oBAAoB;IACnC,UAAU,CAAC,MAAM,CAAC,EAAE,OAAO,CAAC,gBAAgB,CAAC,GAAG,gBAAgB,CAAC;IACjE,WAAW,CAAC,MAAM,EAAE,iBAAiB,GAAG,OAAO,CAAC,mBAAmB,CAAC,CAAC;IACrE,cAAc,CAAC,MAAM,EAAE,oBAAoB,GAAG,OAAO,CAAC,aAAa,CAAC,CAAC;IACrE,WAAW,CAAC,IAAI,SAAS,SAAS,EAAE,MAAM,EAAE,iBAAiB,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC;CAC5F;AAED,wBAAsB,iBAAiB,CAAC,UAAU,EAAE,mBAAmB,GAAG,OAAO,CAAC,oBAAoB,CAAC,CA+CtG"}
@@ -0,0 +1,48 @@
1
+ import { createExtensionHost } from "./api.js";
2
+ export async function createTestHarness(entrypoint) {
3
+ const host = await createExtensionHost(entrypoint);
4
+ let initialized = false;
5
+ const defaultInit = {
6
+ protocolVersion: "2026-05-30",
7
+ kodelet: { version: "test" },
8
+ extension: {
9
+ id: "test-extension",
10
+ cwd: process.cwd(),
11
+ dataDir: "",
12
+ config: {},
13
+ },
14
+ capabilities: {},
15
+ };
16
+ const ensureInitialized = () => {
17
+ if (!initialized) {
18
+ host.initialize(defaultInit);
19
+ initialized = true;
20
+ }
21
+ };
22
+ return {
23
+ initialize(params) {
24
+ initialized = true;
25
+ return host.initialize({
26
+ ...defaultInit,
27
+ ...params,
28
+ extension: {
29
+ ...defaultInit.extension,
30
+ ...params?.extension,
31
+ },
32
+ });
33
+ },
34
+ async executeTool(params) {
35
+ ensureInitialized();
36
+ return await host.executeTool(params);
37
+ },
38
+ async executeCommand(params) {
39
+ ensureInitialized();
40
+ return await host.executeCommand(params);
41
+ },
42
+ async handleEvent(params) {
43
+ ensureInitialized();
44
+ return await host.handleEvent(params);
45
+ },
46
+ };
47
+ }
48
+ //# sourceMappingURL=test-harness.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"test-harness.js","sourceRoot":"","sources":["../src/test-harness.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,UAAU,CAAC;AAqB/C,MAAM,CAAC,KAAK,UAAU,iBAAiB,CAAC,UAA+B;IACrE,MAAM,IAAI,GAAG,MAAM,mBAAmB,CAAC,UAAU,CAAC,CAAC;IACnD,IAAI,WAAW,GAAG,KAAK,CAAC;IACxB,MAAM,WAAW,GAAqB;QACpC,eAAe,EAAE,YAAY;QAC7B,OAAO,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE;QAC5B,SAAS,EAAE;YACT,EAAE,EAAE,gBAAgB;YACpB,GAAG,EAAE,OAAO,CAAC,GAAG,EAAE;YAClB,OAAO,EAAE,EAAE;YACX,MAAM,EAAE,EAAE;SACX;QACD,YAAY,EAAE,EAAE;KACjB,CAAC;IAEF,MAAM,iBAAiB,GAAG,GAAG,EAAE;QAC7B,IAAI,CAAC,WAAW,EAAE,CAAC;YACjB,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC;YAC7B,WAAW,GAAG,IAAI,CAAC;QACrB,CAAC;IACH,CAAC,CAAC;IAEF,OAAO;QACL,UAAU,CAAC,MAAM;YACf,WAAW,GAAG,IAAI,CAAC;YACnB,OAAO,IAAI,CAAC,UAAU,CAAC;gBACrB,GAAG,WAAW;gBACd,GAAG,MAAM;gBACT,SAAS,EAAE;oBACT,GAAG,WAAW,CAAC,SAAS;oBACxB,GAAG,MAAM,EAAE,SAAS;iBACrB;aACF,CAAC,CAAC;QACL,CAAC;QACD,KAAK,CAAC,WAAW,CAAC,MAAM;YACtB,iBAAiB,EAAE,CAAC;YACpB,OAAO,MAAM,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;QACxC,CAAC;QACD,KAAK,CAAC,cAAc,CAAC,MAAM;YACzB,iBAAiB,EAAE,CAAC;YACpB,OAAO,MAAM,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC;QAC3C,CAAC;QACD,KAAK,CAAC,WAAW,CAAC,MAAM;YACtB,iBAAiB,EAAE,CAAC;YACpB,OAAO,MAAM,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;QACxC,CAAC;KACF,CAAC;AACJ,CAAC"}
@@ -0,0 +1,248 @@
1
+ import type { z } from "zod";
2
+ export type Awaitable<T> = T | Promise<T>;
3
+ export type AnyZodSchema = z.ZodTypeAny;
4
+ export type InferInput<Schema> = Schema extends z.ZodTypeAny ? z.infer<Schema> : Record<string, unknown>;
5
+ export interface ExtensionMetadata {
6
+ name?: string;
7
+ version?: string;
8
+ }
9
+ export interface ToolExecutionResult {
10
+ content: string;
11
+ data?: Record<string, unknown>;
12
+ error?: string;
13
+ }
14
+ export type CommandAction = "pass" | "respond" | "runAgent";
15
+ export type CommandResult = {
16
+ action: "pass";
17
+ } | {
18
+ action: "respond";
19
+ response: string;
20
+ } | {
21
+ action: "runAgent";
22
+ prompt: string;
23
+ recipeName?: string;
24
+ };
25
+ export type CommandKind = "command" | "recipe";
26
+ export interface CommandInvocation {
27
+ raw: string;
28
+ commandName: string;
29
+ args: string[];
30
+ flags: Record<string, string | boolean | string[]>;
31
+ }
32
+ export interface BaseCallContext {
33
+ sessionId?: string;
34
+ conversationId?: string;
35
+ cwd?: string;
36
+ provider?: string;
37
+ model?: string;
38
+ profile?: string;
39
+ recipeName?: string;
40
+ invokedBy?: string;
41
+ }
42
+ export interface StorageContext {
43
+ dataDir: string;
44
+ readText(path: string): Promise<string | undefined>;
45
+ writeText(path: string, content: string): Promise<void>;
46
+ readJson<T = unknown>(path: string): Promise<T | undefined>;
47
+ writeJson(path: string, value: unknown): Promise<void>;
48
+ }
49
+ export interface PathContext {
50
+ resolveWorkspacePath(path: string): string;
51
+ relativeToWorkspace(path: string): string;
52
+ }
53
+ export interface FileInfo {
54
+ name: string;
55
+ path: string;
56
+ type: "file" | "dir" | "other";
57
+ }
58
+ export interface FileSystemContext {
59
+ exists(path: string): Promise<boolean>;
60
+ readText(path: string): Promise<string>;
61
+ writeText(path: string, content: string): Promise<void>;
62
+ list(path: string): Promise<FileInfo[]>;
63
+ }
64
+ export interface ExecResult {
65
+ stdout: string;
66
+ stderr: string;
67
+ exitCode: number;
68
+ }
69
+ export interface ProcessContext {
70
+ exec(command: string, args?: string[], opts?: {
71
+ cwd?: string;
72
+ timeoutMs?: number;
73
+ }): Promise<ExecResult>;
74
+ spawn(command: string, args?: string[], opts?: {
75
+ cwd?: string;
76
+ detach?: boolean;
77
+ }): Promise<void>;
78
+ }
79
+ export interface EnvContext {
80
+ get(name: string): string | undefined;
81
+ }
82
+ export interface LogContext {
83
+ debug(message: string, fields?: Record<string, unknown>): void;
84
+ info(message: string, fields?: Record<string, unknown>): void;
85
+ warn(message: string, fields?: Record<string, unknown>): void;
86
+ error(message: string, fields?: Record<string, unknown>): void;
87
+ }
88
+ export interface SharedContext extends Required<Pick<BaseCallContext, "cwd">>, Omit<BaseCallContext, "cwd"> {
89
+ storage: StorageContext;
90
+ path: PathContext;
91
+ fs: FileSystemContext;
92
+ process: ProcessContext;
93
+ env: EnvContext;
94
+ log: LogContext;
95
+ }
96
+ export interface ToolContext extends SharedContext {
97
+ }
98
+ export interface CommandContext extends SharedContext {
99
+ input: CommandInvocation;
100
+ }
101
+ export interface EventContext extends SharedContext {
102
+ }
103
+ export interface ToolRegistration<Schema extends AnyZodSchema = AnyZodSchema> {
104
+ name: string;
105
+ description: string;
106
+ inputSchema: Schema;
107
+ execute(input: InferInput<Schema>, ctx: ToolContext): Awaitable<ToolExecutionResult | string>;
108
+ }
109
+ export interface CommandRegistration<Schema extends AnyZodSchema | undefined = undefined> {
110
+ name: string;
111
+ aliases?: string[];
112
+ description: string;
113
+ inputSchema?: Schema;
114
+ kind?: CommandKind;
115
+ execute(input: InferInput<Schema>, ctx: CommandContext): Awaitable<CommandResult | undefined>;
116
+ }
117
+ export type EventName = "session.start" | "resources.discover" | "user.message" | "agent.init" | "agent.start" | "turn.start" | "tool.call" | "tool.result" | "turn.end" | "agent.end" | "session.end" | (string & {});
118
+ export interface EmptyEvent {
119
+ }
120
+ export interface ToolCallEvent {
121
+ tool: {
122
+ name: string;
123
+ callId?: string;
124
+ input: unknown;
125
+ };
126
+ }
127
+ export interface ToolResultEvent {
128
+ tool: {
129
+ name: string;
130
+ callId?: string;
131
+ input: unknown;
132
+ output: unknown;
133
+ };
134
+ }
135
+ export interface UserMessageEvent {
136
+ message: string;
137
+ }
138
+ export interface AgentInitEvent {
139
+ systemPrompt?: string;
140
+ }
141
+ export interface TurnEndEvent {
142
+ response: string;
143
+ turnNumber?: number;
144
+ }
145
+ export interface AgentEndEvent {
146
+ messages?: unknown[];
147
+ }
148
+ export interface EventPayloadMap {
149
+ "session.start": EmptyEvent;
150
+ "resources.discover": EmptyEvent;
151
+ "tool.call": ToolCallEvent;
152
+ "tool.result": ToolResultEvent;
153
+ "user.message": UserMessageEvent;
154
+ "agent.init": AgentInitEvent;
155
+ "agent.start": EmptyEvent;
156
+ "turn.start": {
157
+ turnNumber?: number;
158
+ };
159
+ "turn.end": TurnEndEvent;
160
+ "agent.end": AgentEndEvent;
161
+ "session.end": EmptyEvent;
162
+ }
163
+ export type EventPayload<Name extends EventName> = Name extends keyof EventPayloadMap ? EventPayloadMap[Name] : Record<string, unknown>;
164
+ export type ExtensionEvent<Name extends EventName> = EventPayload<Name> & {
165
+ id: string;
166
+ event: Name;
167
+ };
168
+ export interface EventBlock {
169
+ reason: string;
170
+ }
171
+ export interface EventResult {
172
+ input?: unknown;
173
+ output?: unknown;
174
+ block?: EventBlock;
175
+ message?: string;
176
+ followUpMessages?: string[];
177
+ systemPrompt?: {
178
+ append?: string;
179
+ prepend?: string;
180
+ replace?: string;
181
+ };
182
+ tools?: {
183
+ disable?: string[];
184
+ enable?: string[];
185
+ };
186
+ resources?: unknown;
187
+ }
188
+ export interface EventSubscriptionOptions {
189
+ priority?: number;
190
+ }
191
+ export type EventHandler<Name extends EventName = EventName> = (event: ExtensionEvent<Name>, ctx: EventContext) => Awaitable<EventResult | void>;
192
+ export interface ExtensionAPI {
193
+ setMetadata(metadata: ExtensionMetadata): void;
194
+ registerTool<Schema extends AnyZodSchema>(registration: ToolRegistration<Schema>): void;
195
+ registerCommand<Schema extends AnyZodSchema | undefined = undefined>(registration: CommandRegistration<Schema>): void;
196
+ on<Name extends EventName>(event: Name, handler: EventHandler<Name>): void;
197
+ on<Name extends EventName>(event: Name, options: EventSubscriptionOptions, handler: EventHandler<Name>): void;
198
+ }
199
+ export type ExtensionEntrypoint = (ext: ExtensionAPI) => Awaitable<void>;
200
+ export interface InitializeParams {
201
+ protocolVersion: string;
202
+ kodelet?: Record<string, unknown>;
203
+ extension: {
204
+ id: string;
205
+ config?: Record<string, unknown>;
206
+ cwd?: string;
207
+ dataDir?: string;
208
+ };
209
+ capabilities?: Record<string, unknown>;
210
+ }
211
+ export interface InitializeResult {
212
+ name: string;
213
+ version?: string;
214
+ tools: Array<{
215
+ name: string;
216
+ description: string;
217
+ inputSchema: Record<string, unknown>;
218
+ }>;
219
+ commands: Array<{
220
+ name: string;
221
+ aliases?: string[];
222
+ description: string;
223
+ inputSchema?: Record<string, unknown>;
224
+ kind?: CommandKind;
225
+ }>;
226
+ subscriptions: Array<{
227
+ event: string;
228
+ priority?: number;
229
+ }>;
230
+ }
231
+ export interface ExecuteToolParams {
232
+ name: string;
233
+ input: unknown;
234
+ context?: BaseCallContext;
235
+ }
236
+ export interface ExecuteCommandParams {
237
+ name: string;
238
+ input?: Record<string, unknown>;
239
+ context?: BaseCallContext;
240
+ invocation: CommandInvocation;
241
+ }
242
+ export interface HandleEventParams<Name extends EventName = EventName> {
243
+ id: string;
244
+ event: Name;
245
+ payload?: EventPayload<Name>;
246
+ context?: BaseCallContext;
247
+ }
248
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
package/dist/types.js ADDED
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":""}
package/package.json ADDED
@@ -0,0 +1,55 @@
1
+ {
2
+ "name": "kodelet",
3
+ "version": "0.4.24-alpha",
4
+ "description": "TypeScript SDK for authoring Kodelet extensions",
5
+ "type": "module",
6
+ "main": "./dist/index.js",
7
+ "types": "./dist/index.d.ts",
8
+ "exports": {
9
+ ".": {
10
+ "types": "./dist/index.d.ts",
11
+ "import": "./dist/index.js"
12
+ },
13
+ "./runtime": {
14
+ "types": "./dist/runtime.d.ts",
15
+ "import": "./dist/runtime.js"
16
+ },
17
+ "./test-harness": {
18
+ "types": "./dist/test-harness.d.ts",
19
+ "import": "./dist/test-harness.js"
20
+ }
21
+ },
22
+ "bin": {
23
+ "kodelet-extension-node": "dist/bin/kodelet-extension-node.js"
24
+ },
25
+ "files": [
26
+ "dist"
27
+ ],
28
+ "scripts": {
29
+ "build": "tsc -p tsconfig.json",
30
+ "test": "tsx --test src/*.test.ts",
31
+ "typecheck": "tsc -p tsconfig.json --noEmit"
32
+ },
33
+ "dependencies": {
34
+ "mustache": "^4.2.0",
35
+ "zod": "^4.4.3"
36
+ },
37
+ "devDependencies": {
38
+ "@types/mustache": "^4.2.6",
39
+ "@types/node": "^24.0.10",
40
+ "tsx": "^4.20.6",
41
+ "typescript": "^5.9.2"
42
+ },
43
+ "engines": {
44
+ "node": ">=20"
45
+ },
46
+ "license": "MIT",
47
+ "repository": {
48
+ "type": "git",
49
+ "url": "git+https://github.com/jingkaihe/kodelet.git",
50
+ "directory": "sdk"
51
+ },
52
+ "publishConfig": {
53
+ "access": "public"
54
+ }
55
+ }