havensdk-plugin-fs 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,4 @@
1
+ import type { HavenPlugin } from "havensdk";
2
+ export declare function pluginFs(): HavenPlugin;
3
+ export default pluginFs;
4
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAoB,MAAM,UAAU,CAAC;AAI9D,wBAAgB,QAAQ,IAAI,WAAW,CA0GtC;AAqBD,eAAe,QAAQ,CAAC"}
@@ -0,0 +1,162 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.pluginFs = pluginFs;
37
+ const path_1 = require("path");
38
+ const fs = __importStar(require("fs/promises"));
39
+ function pluginFs() {
40
+ return {
41
+ name: "havensdk-plugin-fs",
42
+ version: "0.0.1",
43
+ tools: [
44
+ {
45
+ name: "fs_read_file",
46
+ description: "Read the contents of a file",
47
+ parameters: {
48
+ type: "object",
49
+ properties: {
50
+ path: { type: "string", description: "Path to the file to read" },
51
+ encoding: { type: "string", description: "File encoding", default: "utf-8" },
52
+ },
53
+ required: ["path"],
54
+ },
55
+ execute: async (input, ctx) => {
56
+ const { path } = input;
57
+ const encoding = input.encoding ?? "utf-8";
58
+ const resolved = (0, path_1.resolve)(ctx.cwd, path);
59
+ assertWithinCwd(resolved, ctx.cwd);
60
+ const content = await fs.readFile(resolved, encoding);
61
+ return { path: resolved, content: String(content) };
62
+ },
63
+ },
64
+ {
65
+ name: "fs_write_file",
66
+ description: "Write content to a file",
67
+ parameters: {
68
+ type: "object",
69
+ properties: {
70
+ path: { type: "string", description: "Path to the file to write" },
71
+ content: { type: "string", description: "Content to write" },
72
+ encoding: { type: "string", description: "File encoding", default: "utf-8" },
73
+ },
74
+ required: ["path", "content"],
75
+ },
76
+ execute: async (input, ctx) => {
77
+ const { path, content } = input;
78
+ const resolved = (0, path_1.resolve)(ctx.cwd, path);
79
+ assertWithinCwd(resolved, ctx.cwd);
80
+ await fs.mkdir((0, path_1.dirname)(resolved), { recursive: true });
81
+ await fs.writeFile(resolved, content, "utf-8");
82
+ return { path: resolved, bytesWritten: content.length };
83
+ },
84
+ },
85
+ {
86
+ name: "fs_list_dir",
87
+ description: "List files and directories in a path",
88
+ parameters: {
89
+ type: "object",
90
+ properties: {
91
+ path: { type: "string", description: "Directory path to list", default: "." },
92
+ recursive: { type: "boolean", description: "List recursively", default: false },
93
+ },
94
+ },
95
+ execute: async (input, ctx) => {
96
+ const { path: dirPath, recursive } = input;
97
+ const resolved = (0, path_1.resolve)(ctx.cwd, dirPath ?? ".");
98
+ assertWithinCwd(resolved, ctx.cwd);
99
+ if (recursive) {
100
+ const entries = [];
101
+ await walkDir(resolved, entries);
102
+ return { path: resolved, entries };
103
+ }
104
+ const dirents = await fs.readdir(resolved, { withFileTypes: true });
105
+ const entries = dirents.map((d) => ({
106
+ name: d.name,
107
+ type: d.isDirectory() ? "directory" : "file",
108
+ }));
109
+ return { path: resolved, entries };
110
+ },
111
+ },
112
+ {
113
+ name: "fs_exists",
114
+ description: "Check if a file or directory exists",
115
+ parameters: {
116
+ type: "object",
117
+ properties: {
118
+ path: { type: "string", description: "Path to check" },
119
+ },
120
+ required: ["path"],
121
+ },
122
+ execute: async (input, ctx) => {
123
+ const { path } = input;
124
+ const resolved = (0, path_1.resolve)(ctx.cwd, path);
125
+ assertWithinCwd(resolved, ctx.cwd);
126
+ try {
127
+ const stat = await fs.stat(resolved);
128
+ return {
129
+ path: resolved,
130
+ exists: true,
131
+ isFile: stat.isFile(),
132
+ isDirectory: stat.isDirectory(),
133
+ size: stat.size,
134
+ };
135
+ }
136
+ catch {
137
+ return { path: resolved, exists: false };
138
+ }
139
+ },
140
+ },
141
+ ],
142
+ };
143
+ }
144
+ async function walkDir(dir, results) {
145
+ const entries = await fs.readdir(dir, { withFileTypes: true });
146
+ for (const entry of entries) {
147
+ const fullPath = (0, path_1.join)(dir, entry.name);
148
+ results.push(fullPath);
149
+ if (entry.isDirectory()) {
150
+ await walkDir(fullPath, results);
151
+ }
152
+ }
153
+ }
154
+ function assertWithinCwd(resolved, cwd) {
155
+ const normalized = (0, path_1.resolve)(resolved);
156
+ const normalizedCwd = (0, path_1.resolve)(cwd);
157
+ if (!normalized.startsWith(normalizedCwd + path_1.sep) && normalized !== normalizedCwd) {
158
+ throw new Error(`Path traversal blocked: "${resolved}" escapes "${cwd}"`);
159
+ }
160
+ }
161
+ exports.default = pluginFs;
162
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ import type { HavenPlugin } from "havensdk";
2
+ export declare function pluginFs(): HavenPlugin;
3
+ export default pluginFs;
4
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAoB,MAAM,UAAU,CAAC;AAI9D,wBAAgB,QAAQ,IAAI,WAAW,CA0GtC;AAqBD,eAAe,QAAQ,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,126 @@
1
+ import { resolve, dirname, join, sep } from "path";
2
+ import * as fs from "fs/promises";
3
+ export function pluginFs() {
4
+ return {
5
+ name: "havensdk-plugin-fs",
6
+ version: "0.0.1",
7
+ tools: [
8
+ {
9
+ name: "fs_read_file",
10
+ description: "Read the contents of a file",
11
+ parameters: {
12
+ type: "object",
13
+ properties: {
14
+ path: { type: "string", description: "Path to the file to read" },
15
+ encoding: { type: "string", description: "File encoding", default: "utf-8" },
16
+ },
17
+ required: ["path"],
18
+ },
19
+ execute: async (input, ctx) => {
20
+ const { path } = input;
21
+ const encoding = input.encoding ?? "utf-8";
22
+ const resolved = resolve(ctx.cwd, path);
23
+ assertWithinCwd(resolved, ctx.cwd);
24
+ const content = await fs.readFile(resolved, encoding);
25
+ return { path: resolved, content: String(content) };
26
+ },
27
+ },
28
+ {
29
+ name: "fs_write_file",
30
+ description: "Write content to a file",
31
+ parameters: {
32
+ type: "object",
33
+ properties: {
34
+ path: { type: "string", description: "Path to the file to write" },
35
+ content: { type: "string", description: "Content to write" },
36
+ encoding: { type: "string", description: "File encoding", default: "utf-8" },
37
+ },
38
+ required: ["path", "content"],
39
+ },
40
+ execute: async (input, ctx) => {
41
+ const { path, content } = input;
42
+ const resolved = resolve(ctx.cwd, path);
43
+ assertWithinCwd(resolved, ctx.cwd);
44
+ await fs.mkdir(dirname(resolved), { recursive: true });
45
+ await fs.writeFile(resolved, content, "utf-8");
46
+ return { path: resolved, bytesWritten: content.length };
47
+ },
48
+ },
49
+ {
50
+ name: "fs_list_dir",
51
+ description: "List files and directories in a path",
52
+ parameters: {
53
+ type: "object",
54
+ properties: {
55
+ path: { type: "string", description: "Directory path to list", default: "." },
56
+ recursive: { type: "boolean", description: "List recursively", default: false },
57
+ },
58
+ },
59
+ execute: async (input, ctx) => {
60
+ const { path: dirPath, recursive } = input;
61
+ const resolved = resolve(ctx.cwd, dirPath ?? ".");
62
+ assertWithinCwd(resolved, ctx.cwd);
63
+ if (recursive) {
64
+ const entries = [];
65
+ await walkDir(resolved, entries);
66
+ return { path: resolved, entries };
67
+ }
68
+ const dirents = await fs.readdir(resolved, { withFileTypes: true });
69
+ const entries = dirents.map((d) => ({
70
+ name: d.name,
71
+ type: d.isDirectory() ? "directory" : "file",
72
+ }));
73
+ return { path: resolved, entries };
74
+ },
75
+ },
76
+ {
77
+ name: "fs_exists",
78
+ description: "Check if a file or directory exists",
79
+ parameters: {
80
+ type: "object",
81
+ properties: {
82
+ path: { type: "string", description: "Path to check" },
83
+ },
84
+ required: ["path"],
85
+ },
86
+ execute: async (input, ctx) => {
87
+ const { path } = input;
88
+ const resolved = resolve(ctx.cwd, path);
89
+ assertWithinCwd(resolved, ctx.cwd);
90
+ try {
91
+ const stat = await fs.stat(resolved);
92
+ return {
93
+ path: resolved,
94
+ exists: true,
95
+ isFile: stat.isFile(),
96
+ isDirectory: stat.isDirectory(),
97
+ size: stat.size,
98
+ };
99
+ }
100
+ catch {
101
+ return { path: resolved, exists: false };
102
+ }
103
+ },
104
+ },
105
+ ],
106
+ };
107
+ }
108
+ async function walkDir(dir, results) {
109
+ const entries = await fs.readdir(dir, { withFileTypes: true });
110
+ for (const entry of entries) {
111
+ const fullPath = join(dir, entry.name);
112
+ results.push(fullPath);
113
+ if (entry.isDirectory()) {
114
+ await walkDir(fullPath, results);
115
+ }
116
+ }
117
+ }
118
+ function assertWithinCwd(resolved, cwd) {
119
+ const normalized = resolve(resolved);
120
+ const normalizedCwd = resolve(cwd);
121
+ if (!normalized.startsWith(normalizedCwd + sep) && normalized !== normalizedCwd) {
122
+ throw new Error(`Path traversal blocked: "${resolved}" escapes "${cwd}"`);
123
+ }
124
+ }
125
+ export default pluginFs;
126
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,GAAG,EAAE,MAAM,MAAM,CAAC;AACnD,OAAO,KAAK,EAAE,MAAM,aAAa,CAAC;AAElC,MAAM,UAAU,QAAQ;IACtB,OAAO;QACL,IAAI,EAAE,oBAAoB;QAC1B,OAAO,EAAE,OAAO;QAEhB,KAAK,EAAE;YACL;gBACE,IAAI,EAAE,cAAc;gBACpB,WAAW,EAAE,6BAA6B;gBAC1C,UAAU,EAAE;oBACV,IAAI,EAAE,QAAQ;oBACd,UAAU,EAAE;wBACV,IAAI,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,0BAA0B,EAAE;wBACjE,QAAQ,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,eAAe,EAAE,OAAO,EAAE,OAAO,EAAE;qBAC7E;oBACD,QAAQ,EAAE,CAAC,MAAM,CAAC;iBACnB;gBACD,OAAO,EAAE,KAAK,EAAE,KAAc,EAAE,GAAqB,EAAE,EAAE;oBACvD,MAAM,EAAE,IAAI,EAAE,GAAG,KAAyB,CAAC;oBAC3C,MAAM,QAAQ,GAAI,KAA+B,CAAC,QAAQ,IAAI,OAAO,CAAC;oBACtE,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;oBACxC,eAAe,CAAC,QAAQ,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC;oBACnC,MAAM,OAAO,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,QAAQ,EAAE,QAA0B,CAAC,CAAC;oBACxE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC;gBACtD,CAAC;aACF;YACD;gBACE,IAAI,EAAE,eAAe;gBACrB,WAAW,EAAE,yBAAyB;gBACtC,UAAU,EAAE;oBACV,IAAI,EAAE,QAAQ;oBACd,UAAU,EAAE;wBACV,IAAI,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,2BAA2B,EAAE;wBAClE,OAAO,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,kBAAkB,EAAE;wBAC5D,QAAQ,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,eAAe,EAAE,OAAO,EAAE,OAAO,EAAE;qBAC7E;oBACD,QAAQ,EAAE,CAAC,MAAM,EAAE,SAAS,CAAC;iBAC9B;gBACD,OAAO,EAAE,KAAK,EAAE,KAAc,EAAE,GAAqB,EAAE,EAAE;oBACvD,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,KAA0C,CAAC;oBACrE,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;oBACxC,eAAe,CAAC,QAAQ,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC;oBACnC,MAAM,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;oBACvD,MAAM,EAAE,CAAC,SAAS,CAAC,QAAQ,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;oBAC/C,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,YAAY,EAAE,OAAO,CAAC,MAAM,EAAE,CAAC;gBAC1D,CAAC;aACF;YACD;gBACE,IAAI,EAAE,aAAa;gBACnB,WAAW,EAAE,sCAAsC;gBACnD,UAAU,EAAE;oBACV,IAAI,EAAE,QAAQ;oBACd,UAAU,EAAE;wBACV,IAAI,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,wBAAwB,EAAE,OAAO,EAAE,GAAG,EAAE;wBAC7E,SAAS,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,WAAW,EAAE,kBAAkB,EAAE,OAAO,EAAE,KAAK,EAAE;qBAChF;iBACF;gBACD,OAAO,EAAE,KAAK,EAAE,KAAc,EAAE,GAAqB,EAAE,EAAE;oBACvD,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,SAAS,EAAE,GAAG,KAA+C,CAAC;oBACrF,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,GAAG,EAAE,OAAO,IAAI,GAAG,CAAC,CAAC;oBAClD,eAAe,CAAC,QAAQ,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC;oBAEnC,IAAI,SAAS,EAAE,CAAC;wBACd,MAAM,OAAO,GAAa,EAAE,CAAC;wBAC7B,MAAM,OAAO,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;wBACjC,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC;oBACrC,CAAC;oBAED,MAAM,OAAO,GAAG,MAAM,EAAE,CAAC,OAAO,CAAC,QAAQ,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC;oBACpE,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;wBAClC,IAAI,EAAE,CAAC,CAAC,IAAI;wBACZ,IAAI,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,MAAM;qBAC7C,CAAC,CAAC,CAAC;oBACJ,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC;gBACrC,CAAC;aACF;YACD;gBACE,IAAI,EAAE,WAAW;gBACjB,WAAW,EAAE,qCAAqC;gBAClD,UAAU,EAAE;oBACV,IAAI,EAAE,QAAQ;oBACd,UAAU,EAAE;wBACV,IAAI,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,eAAe,EAAE;qBACvD;oBACD,QAAQ,EAAE,CAAC,MAAM,CAAC;iBACnB;gBACD,OAAO,EAAE,KAAK,EAAE,KAAc,EAAE,GAAqB,EAAE,EAAE;oBACvD,MAAM,EAAE,IAAI,EAAE,GAAG,KAAyB,CAAC;oBAC3C,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;oBACxC,eAAe,CAAC,QAAQ,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC;oBACnC,IAAI,CAAC;wBACH,MAAM,IAAI,GAAG,MAAM,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;wBACrC,OAAO;4BACL,IAAI,EAAE,QAAQ;4BACd,MAAM,EAAE,IAAI;4BACZ,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE;4BACrB,WAAW,EAAE,IAAI,CAAC,WAAW,EAAE;4BAC/B,IAAI,EAAE,IAAI,CAAC,IAAI;yBAChB,CAAC;oBACJ,CAAC;oBAAC,MAAM,CAAC;wBACP,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC;oBAC3C,CAAC;gBACH,CAAC;aACF;SACF;KACF,CAAC;AACJ,CAAC;AAED,KAAK,UAAU,OAAO,CAAC,GAAW,EAAE,OAAiB;IACnD,MAAM,OAAO,GAAG,MAAM,EAAE,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC;IAC/D,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;QAC5B,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;QACvC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QACvB,IAAI,KAAK,CAAC,WAAW,EAAE,EAAE,CAAC;YACxB,MAAM,OAAO,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;QACnC,CAAC;IACH,CAAC;AACH,CAAC;AAED,SAAS,eAAe,CAAC,QAAgB,EAAE,GAAW;IACpD,MAAM,UAAU,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC;IACrC,MAAM,aAAa,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC;IACnC,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,aAAa,GAAG,GAAG,CAAC,IAAI,UAAU,KAAK,aAAa,EAAE,CAAC;QAChF,MAAM,IAAI,KAAK,CAAC,4BAA4B,QAAQ,cAAc,GAAG,GAAG,CAAC,CAAC;IAC5E,CAAC;AACH,CAAC;AAED,eAAe,QAAQ,CAAC"}
package/package.json ADDED
@@ -0,0 +1,57 @@
1
+ {
2
+ "name": "havensdk-plugin-fs",
3
+ "version": "0.1.0",
4
+ "description": "File system tools for Haven agents.",
5
+ "type": "module",
6
+ "main": "dist/cjs/index.js",
7
+ "module": "dist/index.js",
8
+ "types": "dist/index.d.ts",
9
+ "sideEffects": false,
10
+ "exports": {
11
+ ".": {
12
+ "types": "./dist/index.d.ts",
13
+ "import": "./dist/index.js",
14
+ "require": "./dist/cjs/index.js"
15
+ }
16
+ },
17
+ "repository": {
18
+ "type": "git",
19
+ "url": "https://github.com/doanbactam/haven.git"
20
+ },
21
+ "bugs": {
22
+ "url": "https://github.com/doanbactam/haven/issues"
23
+ },
24
+ "homepage": "https://github.com/doanbactam/haven#readme",
25
+ "files": [
26
+ "dist"
27
+ ],
28
+ "keywords": [
29
+ "plugin",
30
+ "filesystem",
31
+ "agents",
32
+ "typescript",
33
+ "bun"
34
+ ],
35
+ "license": "MIT",
36
+ "engines": {
37
+ "bun": ">=1.3.0"
38
+ },
39
+ "scripts": {
40
+ "build": "tsc",
41
+ "build:cjs": "tsc -p tsconfig.cjs.json",
42
+ "test": "bun test",
43
+ "types": "tsc --noEmit",
44
+ "lint": "eslint src/",
45
+ "clean": "rm -rf dist",
46
+ "prepublishOnly": "bun run build && bun run build:cjs && bun run types && bun test"
47
+ },
48
+ "publishConfig": {
49
+ "access": "public"
50
+ },
51
+ "dependencies": {
52
+ "havensdk": "workspace:*"
53
+ },
54
+ "devDependencies": {
55
+ "typescript": "^5.8.2"
56
+ }
57
+ }