@themoltnet/pi-extension 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.
- package/LICENSE +235 -0
- package/README.md +122 -0
- package/dist/commands/index.d.ts +5 -0
- package/dist/commands/index.d.ts.map +1 -0
- package/dist/commands/index.js +4 -0
- package/dist/commands/index.js.map +1 -0
- package/dist/commands/moltnet-reflect.d.ts +3 -0
- package/dist/commands/moltnet-reflect.d.ts.map +1 -0
- package/dist/commands/moltnet-reflect.js +36 -0
- package/dist/commands/moltnet-reflect.js.map +1 -0
- package/dist/commands/resolve-issue.d.ts +3 -0
- package/dist/commands/resolve-issue.d.ts.map +1 -0
- package/dist/commands/resolve-issue.js +82 -0
- package/dist/commands/resolve-issue.js.map +1 -0
- package/dist/commands/sandbox.d.ts +3 -0
- package/dist/commands/sandbox.d.ts.map +1 -0
- package/dist/commands/sandbox.js +20 -0
- package/dist/commands/sandbox.js.map +1 -0
- package/dist/commands/types.d.ts +33 -0
- package/dist/commands/types.d.ts.map +1 -0
- package/dist/commands/types.js +2 -0
- package/dist/commands/types.js.map +1 -0
- package/dist/index.d.ts +9 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +392 -0
- package/dist/index.js.map +1 -0
- package/dist/moltnet-tools.d.ts +13 -0
- package/dist/moltnet-tools.d.ts.map +1 -0
- package/dist/moltnet-tools.js +126 -0
- package/dist/moltnet-tools.js.map +1 -0
- package/dist/snapshot.d.ts +41 -0
- package/dist/snapshot.d.ts.map +1 -0
- package/dist/snapshot.js +251 -0
- package/dist/snapshot.js.map +1 -0
- package/dist/tool-operations.d.ts +13 -0
- package/dist/tool-operations.d.ts.map +1 -0
- package/dist/tool-operations.js +142 -0
- package/dist/tool-operations.js.map +1 -0
- package/dist/tsconfig.tsbuildinfo +1 -0
- package/dist/vm-manager.d.ts +48 -0
- package/dist/vm-manager.d.ts.map +1 -0
- package/dist/vm-manager.js +222 -0
- package/dist/vm-manager.js.map +1 -0
- package/package.json +62 -0
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import type { VM } from '@earendil-works/gondolin';
|
|
2
|
+
import type { SandboxConfig } from './snapshot.js';
|
|
3
|
+
export interface VmConfig {
|
|
4
|
+
/** Absolute path to the qcow2 checkpoint. */
|
|
5
|
+
checkpointPath: string;
|
|
6
|
+
/** MoltNet agent name (used to resolve credentials). */
|
|
7
|
+
agentName: string;
|
|
8
|
+
/** Host directory to mount at /workspace in the VM. */
|
|
9
|
+
mountPath: string;
|
|
10
|
+
/** Additional hosts to allow in egress policy. */
|
|
11
|
+
extraAllowedHosts?: string[];
|
|
12
|
+
/** Full sandbox config (vfs shadows, env overrides). */
|
|
13
|
+
sandboxConfig?: SandboxConfig;
|
|
14
|
+
}
|
|
15
|
+
export interface VmCredentials {
|
|
16
|
+
moltnetJson: string;
|
|
17
|
+
agentEnvRaw: string;
|
|
18
|
+
piAuthJson: string;
|
|
19
|
+
agentEnv: Record<string, string | undefined>;
|
|
20
|
+
gitconfig: string | null;
|
|
21
|
+
sshPrivateKey: string | null;
|
|
22
|
+
sshPublicKey: string | null;
|
|
23
|
+
allowedSigners: string | null;
|
|
24
|
+
}
|
|
25
|
+
export interface ManagedVm {
|
|
26
|
+
vm: VM;
|
|
27
|
+
credentials: VmCredentials;
|
|
28
|
+
mountPath: string;
|
|
29
|
+
guestWorkspace: string;
|
|
30
|
+
agentDir: string;
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Resolve the main worktree root (where .moltnet/ lives — it's untracked,
|
|
34
|
+
* only exists in the main worktree, not in git worktrees).
|
|
35
|
+
*/
|
|
36
|
+
export declare function findMainWorktree(): string;
|
|
37
|
+
export declare function loadCredentials(agentDir: string): VmCredentials;
|
|
38
|
+
/**
|
|
39
|
+
* Apply agent env vars to the host process, mirroring `moltnet start`.
|
|
40
|
+
* Resolves relative paths (e.g. GIT_CONFIG_GLOBAL) against the repo root.
|
|
41
|
+
*/
|
|
42
|
+
export declare function activateAgentEnv(agentEnv: Record<string, string | undefined>, repoRoot: string): void;
|
|
43
|
+
/**
|
|
44
|
+
* Resume a VM from a checkpoint, inject credentials, configure egress +
|
|
45
|
+
* TLS. Returns the managed VM handle.
|
|
46
|
+
*/
|
|
47
|
+
export declare function resumeVm(config: VmConfig): Promise<ManagedVm>;
|
|
48
|
+
//# sourceMappingURL=vm-manager.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"vm-manager.d.ts","sourceRoot":"","sources":["../src/vm-manager.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,0BAA0B,CAAC;AAWnD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAEnD,MAAM,WAAW,QAAQ;IACvB,6CAA6C;IAC7C,cAAc,EAAE,MAAM,CAAC;IACvB,wDAAwD;IACxD,SAAS,EAAE,MAAM,CAAC;IAClB,uDAAuD;IACvD,SAAS,EAAE,MAAM,CAAC;IAClB,kDAAkD;IAClD,iBAAiB,CAAC,EAAE,MAAM,EAAE,CAAC;IAC7B,wDAAwD;IACxD,aAAa,CAAC,EAAE,aAAa,CAAC;CAC/B;AAED,MAAM,WAAW,aAAa;IAC5B,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,CAAC;IAC7C,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;CAC/B;AAED,MAAM,WAAW,SAAS;IACxB,EAAE,EAAE,EAAE,CAAC;IACP,WAAW,EAAE,aAAa,CAAC;IAC3B,SAAS,EAAE,MAAM,CAAC;IAClB,cAAc,EAAE,MAAM,CAAC;IACvB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,IAAI,MAAM,CAWzC;AAED,wBAAgB,eAAe,CAAC,QAAQ,EAAE,MAAM,GAAG,aAAa,CA4C/D;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,CAC9B,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,EAC5C,QAAQ,EAAE,MAAM,GACf,IAAI,CAYN;AAoBD;;;GAGG;AACH,wBAAsB,QAAQ,CAAC,MAAM,EAAE,QAAQ,GAAG,OAAO,CAAC,SAAS,CAAC,CA8InE"}
|
|
@@ -0,0 +1,222 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* VM lifecycle manager: resume checkpoint, inject credentials, configure
|
|
3
|
+
* egress, fix TLS, and provide clean shutdown.
|
|
4
|
+
*/
|
|
5
|
+
import { execFileSync } from 'node:child_process';
|
|
6
|
+
import { existsSync, readFileSync } from 'node:fs';
|
|
7
|
+
import path from 'node:path';
|
|
8
|
+
import { parseEnv } from 'node:util';
|
|
9
|
+
import { createHttpHooks, createShadowPathPredicate, RealFSProvider, ShadowProvider, VmCheckpoint, } from '@earendil-works/gondolin';
|
|
10
|
+
const GUEST_WORKSPACE = '/workspace';
|
|
11
|
+
/**
|
|
12
|
+
* Resolve the main worktree root (where .moltnet/ lives — it's untracked,
|
|
13
|
+
* only exists in the main worktree, not in git worktrees).
|
|
14
|
+
*/
|
|
15
|
+
export function findMainWorktree() {
|
|
16
|
+
const output = execFileSync('git', ['worktree', 'list', '--porcelain'], {
|
|
17
|
+
encoding: 'utf8',
|
|
18
|
+
});
|
|
19
|
+
for (const block of output.split('\n\n')) {
|
|
20
|
+
const lines = block.split('\n');
|
|
21
|
+
const wt = lines.find((l) => l.startsWith('worktree '));
|
|
22
|
+
if (wt && !lines.some((l) => l === 'bare'))
|
|
23
|
+
return wt.replace('worktree ', '');
|
|
24
|
+
}
|
|
25
|
+
throw new Error('Could not find main git worktree');
|
|
26
|
+
}
|
|
27
|
+
export function loadCredentials(agentDir) {
|
|
28
|
+
const moltnetJson = readFileSync(path.join(agentDir, 'moltnet.json'), 'utf8');
|
|
29
|
+
const agentEnvRaw = readFileSync(path.join(agentDir, 'env'), 'utf8');
|
|
30
|
+
const piAuthPath = path.join(process.env.HOME ?? '', '.pi', 'agent', 'auth.json');
|
|
31
|
+
if (!existsSync(piAuthPath)) {
|
|
32
|
+
throw new Error(`Pi OAuth credentials not found at ${piAuthPath}. Run: pi login`);
|
|
33
|
+
}
|
|
34
|
+
const piAuthJson = readFileSync(piAuthPath, 'utf8');
|
|
35
|
+
// Read gitconfig + SSH keys for VM-side git signing
|
|
36
|
+
const gitconfigPath = path.join(agentDir, 'gitconfig');
|
|
37
|
+
const gitconfig = existsSync(gitconfigPath)
|
|
38
|
+
? readFileSync(gitconfigPath, 'utf8')
|
|
39
|
+
: null;
|
|
40
|
+
const sshDir = path.join(agentDir, 'ssh');
|
|
41
|
+
const sshPrivateKey = existsSync(path.join(sshDir, 'id_ed25519'))
|
|
42
|
+
? readFileSync(path.join(sshDir, 'id_ed25519'), 'utf8')
|
|
43
|
+
: null;
|
|
44
|
+
const sshPublicKey = existsSync(path.join(sshDir, 'id_ed25519.pub'))
|
|
45
|
+
? readFileSync(path.join(sshDir, 'id_ed25519.pub'), 'utf8')
|
|
46
|
+
: null;
|
|
47
|
+
const allowedSigners = existsSync(path.join(sshDir, 'allowed_signers'))
|
|
48
|
+
? readFileSync(path.join(sshDir, 'allowed_signers'), 'utf8')
|
|
49
|
+
: null;
|
|
50
|
+
return {
|
|
51
|
+
moltnetJson,
|
|
52
|
+
agentEnvRaw,
|
|
53
|
+
piAuthJson,
|
|
54
|
+
agentEnv: parseEnv(agentEnvRaw),
|
|
55
|
+
gitconfig,
|
|
56
|
+
sshPrivateKey,
|
|
57
|
+
sshPublicKey,
|
|
58
|
+
allowedSigners,
|
|
59
|
+
};
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* Apply agent env vars to the host process, mirroring `moltnet start`.
|
|
63
|
+
* Resolves relative paths (e.g. GIT_CONFIG_GLOBAL) against the repo root.
|
|
64
|
+
*/
|
|
65
|
+
export function activateAgentEnv(agentEnv, repoRoot) {
|
|
66
|
+
for (const [k, v] of Object.entries(agentEnv)) {
|
|
67
|
+
if (v === undefined || v === null || v === '')
|
|
68
|
+
continue;
|
|
69
|
+
let resolved = v;
|
|
70
|
+
// Resolve relative GIT_CONFIG_GLOBAL against repo root (same as Go CLI)
|
|
71
|
+
if (k === 'GIT_CONFIG_GLOBAL' && !path.isAbsolute(v)) {
|
|
72
|
+
resolved = path.join(repoRoot, v);
|
|
73
|
+
}
|
|
74
|
+
process.env[k] = resolved;
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
const BASE_ALLOWED_HOSTS = [
|
|
78
|
+
'api.openai.com',
|
|
79
|
+
'*.openai.com',
|
|
80
|
+
'chat.openai.com',
|
|
81
|
+
'chatgpt.com',
|
|
82
|
+
'*.chatgpt.com',
|
|
83
|
+
'registry.npmjs.org',
|
|
84
|
+
'github.com',
|
|
85
|
+
'*.github.com',
|
|
86
|
+
'*.githubusercontent.com',
|
|
87
|
+
// Go module proxy + storage backend
|
|
88
|
+
'proxy.golang.org',
|
|
89
|
+
'sum.golang.org',
|
|
90
|
+
'golang.org',
|
|
91
|
+
'storage.googleapis.com',
|
|
92
|
+
'*.googlesource.com',
|
|
93
|
+
];
|
|
94
|
+
/**
|
|
95
|
+
* Resume a VM from a checkpoint, inject credentials, configure egress +
|
|
96
|
+
* TLS. Returns the managed VM handle.
|
|
97
|
+
*/
|
|
98
|
+
export async function resumeVm(config) {
|
|
99
|
+
const mainRepo = findMainWorktree();
|
|
100
|
+
const agentDir = path.join(mainRepo, '.moltnet', config.agentName);
|
|
101
|
+
if (!existsSync(agentDir)) {
|
|
102
|
+
throw new Error(`Agent directory not found: ${agentDir}. Run: moltnet register --name ${config.agentName}`);
|
|
103
|
+
}
|
|
104
|
+
const creds = loadCredentials(agentDir);
|
|
105
|
+
const moltnetConfig = JSON.parse(creds.moltnetJson);
|
|
106
|
+
const apiHost = new URL(moltnetConfig.endpoints.api).hostname;
|
|
107
|
+
const allowedHosts = [
|
|
108
|
+
...BASE_ALLOWED_HOSTS,
|
|
109
|
+
apiHost,
|
|
110
|
+
...(config.extraAllowedHosts ?? []),
|
|
111
|
+
];
|
|
112
|
+
const { httpHooks, env: secretEnv } = createHttpHooks({ allowedHosts });
|
|
113
|
+
// Build VM-side agent env vars from credentials.
|
|
114
|
+
// GIT_CONFIG_GLOBAL must point to the VM-side path, not host-side.
|
|
115
|
+
const vmAgentEnv = {};
|
|
116
|
+
for (const [k, v] of Object.entries(creds.agentEnv)) {
|
|
117
|
+
if (v === undefined || v === '')
|
|
118
|
+
continue;
|
|
119
|
+
if (k === 'GIT_CONFIG_GLOBAL') {
|
|
120
|
+
// Remap to VM-side credentials path
|
|
121
|
+
vmAgentEnv[k] = `/home/agent/.moltnet/${config.agentName}/gitconfig`;
|
|
122
|
+
}
|
|
123
|
+
else if (k.endsWith('_PRIVATE_KEY_PATH')) {
|
|
124
|
+
// Remap key paths to VM-side
|
|
125
|
+
vmAgentEnv[k] =
|
|
126
|
+
`/home/agent/.moltnet/${config.agentName}/${path.basename(v)}`;
|
|
127
|
+
}
|
|
128
|
+
else {
|
|
129
|
+
vmAgentEnv[k] = v;
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
// Build workspace VFS provider (with optional shadows)
|
|
133
|
+
const vfsConfig = config.sandboxConfig?.vfs;
|
|
134
|
+
let workspaceProvider = new RealFSProvider(config.mountPath);
|
|
135
|
+
if (vfsConfig?.shadow?.length) {
|
|
136
|
+
const predicate = createShadowPathPredicate(vfsConfig.shadow);
|
|
137
|
+
workspaceProvider = new ShadowProvider(workspaceProvider, {
|
|
138
|
+
shouldShadow: predicate,
|
|
139
|
+
writeMode: vfsConfig.shadowMode ?? 'tmpfs',
|
|
140
|
+
});
|
|
141
|
+
}
|
|
142
|
+
// Merge env: defaults < sandbox config overrides
|
|
143
|
+
const envOverrides = config.sandboxConfig?.env ?? {};
|
|
144
|
+
const vmEnv = {
|
|
145
|
+
...secretEnv,
|
|
146
|
+
...vmAgentEnv,
|
|
147
|
+
PATH: '/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/lib/go/bin',
|
|
148
|
+
HOME: '/home/agent',
|
|
149
|
+
NODE_NO_WARNINGS: '1',
|
|
150
|
+
NODE_EXTRA_CA_CERTS: '/etc/ssl/certs/ca-certificates.crt',
|
|
151
|
+
...envOverrides,
|
|
152
|
+
};
|
|
153
|
+
const resources = config.sandboxConfig?.resources;
|
|
154
|
+
const cp = VmCheckpoint.load(config.checkpointPath);
|
|
155
|
+
const vm = await cp.resume({
|
|
156
|
+
httpHooks,
|
|
157
|
+
env: vmEnv,
|
|
158
|
+
...(resources?.memory && { memory: resources.memory }),
|
|
159
|
+
...(resources?.cpus && { cpus: resources.cpus }),
|
|
160
|
+
vfs: {
|
|
161
|
+
mounts: {
|
|
162
|
+
[GUEST_WORKSPACE]: workspaceProvider,
|
|
163
|
+
},
|
|
164
|
+
},
|
|
165
|
+
});
|
|
166
|
+
// Fix TLS: append Gondolin MITM CA to system trust store.
|
|
167
|
+
// Unofficial-builds Node ships its own OpenSSL which can't load
|
|
168
|
+
// NODE_EXTRA_CA_CERTS from /etc/gondolin/mitm/ca.crt (error 8000000D).
|
|
169
|
+
await vm.exec(`sh -c '
|
|
170
|
+
cp /etc/gondolin/mitm/ca.crt /usr/local/share/ca-certificates/gondolin-mitm.crt
|
|
171
|
+
update-ca-certificates 2>/dev/null
|
|
172
|
+
cat /etc/gondolin/mitm/ca.crt >> /etc/ssl/certs/ca-certificates.crt
|
|
173
|
+
'`);
|
|
174
|
+
// Inject credentials into VM-side agent directory structure:
|
|
175
|
+
// /home/agent/.moltnet/<agentName>/{moltnet.json,env,gitconfig,ssh/}
|
|
176
|
+
// Mirrors host layout so legreffier skill and CLI work identically.
|
|
177
|
+
const vmAgentDir = `/home/agent/.moltnet/${config.agentName}`;
|
|
178
|
+
const vmSshDir = `${vmAgentDir}/ssh`;
|
|
179
|
+
await vm.exec(`mkdir -p ${vmAgentDir}/ssh /home/agent/.pi/agent`);
|
|
180
|
+
await vm.fs.writeFile('/home/agent/.pi/agent/auth.json', creds.piAuthJson, {
|
|
181
|
+
mode: 0o600,
|
|
182
|
+
});
|
|
183
|
+
await vm.fs.writeFile(`${vmAgentDir}/moltnet.json`, creds.moltnetJson, {
|
|
184
|
+
mode: 0o600,
|
|
185
|
+
});
|
|
186
|
+
await vm.fs.writeFile(`${vmAgentDir}/env`, creds.agentEnvRaw, {
|
|
187
|
+
mode: 0o600,
|
|
188
|
+
});
|
|
189
|
+
// Inject gitconfig with VM-side signing key path
|
|
190
|
+
if (creds.gitconfig) {
|
|
191
|
+
const vmSigningKey = `${vmSshDir}/id_ed25519`;
|
|
192
|
+
const vmGitconfig = creds.gitconfig.replace(/signingKey\s*=\s*.+/g, `signingKey = ${vmSigningKey}`);
|
|
193
|
+
await vm.fs.writeFile(`${vmAgentDir}/gitconfig`, vmGitconfig, {
|
|
194
|
+
mode: 0o644,
|
|
195
|
+
});
|
|
196
|
+
}
|
|
197
|
+
// Inject SSH keys for commit signing
|
|
198
|
+
if (creds.sshPrivateKey) {
|
|
199
|
+
await vm.fs.writeFile(`${vmSshDir}/id_ed25519`, creds.sshPrivateKey, {
|
|
200
|
+
mode: 0o600,
|
|
201
|
+
});
|
|
202
|
+
}
|
|
203
|
+
if (creds.sshPublicKey) {
|
|
204
|
+
await vm.fs.writeFile(`${vmSshDir}/id_ed25519.pub`, creds.sshPublicKey, {
|
|
205
|
+
mode: 0o644,
|
|
206
|
+
});
|
|
207
|
+
}
|
|
208
|
+
if (creds.allowedSigners) {
|
|
209
|
+
await vm.fs.writeFile(`${vmSshDir}/allowed_signers`, creds.allowedSigners, {
|
|
210
|
+
mode: 0o644,
|
|
211
|
+
});
|
|
212
|
+
}
|
|
213
|
+
await vm.exec('chown -R agent:agent /home/agent/.pi /home/agent/.moltnet');
|
|
214
|
+
return {
|
|
215
|
+
vm,
|
|
216
|
+
credentials: creds,
|
|
217
|
+
mountPath: config.mountPath,
|
|
218
|
+
guestWorkspace: GUEST_WORKSPACE,
|
|
219
|
+
agentDir,
|
|
220
|
+
};
|
|
221
|
+
}
|
|
222
|
+
//# sourceMappingURL=vm-manager.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"vm-manager.js","sourceRoot":"","sources":["../src/vm-manager.ts"],"names":[],"mappings":"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"}
|
package/package.json
ADDED
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@themoltnet/pi-extension",
|
|
3
|
+
"version": "0.1.0",
|
|
4
|
+
"type": "module",
|
|
5
|
+
"description": "MoltNet pi extension — sandboxed tool execution in Gondolin VMs with MoltNet identity and persistent memory",
|
|
6
|
+
"license": "MIT",
|
|
7
|
+
"repository": {
|
|
8
|
+
"type": "git",
|
|
9
|
+
"url": "git+https://github.com/getlarge/themoltnet.git",
|
|
10
|
+
"directory": "libs/pi-extension"
|
|
11
|
+
},
|
|
12
|
+
"homepage": "https://themolt.net",
|
|
13
|
+
"main": "./dist/index.js",
|
|
14
|
+
"types": "./dist/index.d.ts",
|
|
15
|
+
"exports": {
|
|
16
|
+
".": {
|
|
17
|
+
"types": "./dist/index.d.ts",
|
|
18
|
+
"import": "./dist/index.js"
|
|
19
|
+
}
|
|
20
|
+
},
|
|
21
|
+
"files": [
|
|
22
|
+
"dist"
|
|
23
|
+
],
|
|
24
|
+
"pi": {
|
|
25
|
+
"extensions": [
|
|
26
|
+
"./dist/index.js"
|
|
27
|
+
]
|
|
28
|
+
},
|
|
29
|
+
"dependencies": {
|
|
30
|
+
"@earendil-works/gondolin": "^0.7.0",
|
|
31
|
+
"@themoltnet/sdk": "0.91.0"
|
|
32
|
+
},
|
|
33
|
+
"peerDependencies": {
|
|
34
|
+
"@mariozechner/pi-coding-agent": ">=0.67.0",
|
|
35
|
+
"@mariozechner/pi-ai": ">=0.67.0"
|
|
36
|
+
},
|
|
37
|
+
"peerDependenciesMeta": {
|
|
38
|
+
"@mariozechner/pi-coding-agent": {
|
|
39
|
+
"optional": false
|
|
40
|
+
},
|
|
41
|
+
"@mariozechner/pi-ai": {
|
|
42
|
+
"optional": false
|
|
43
|
+
}
|
|
44
|
+
},
|
|
45
|
+
"devDependencies": {
|
|
46
|
+
"@mariozechner/pi-coding-agent": "^0.67.68",
|
|
47
|
+
"@mariozechner/pi-ai": "^0.67.68",
|
|
48
|
+
"@types/node": "^20.11.0",
|
|
49
|
+
"typescript": "^5.3.3",
|
|
50
|
+
"vitest": "^3.0.0"
|
|
51
|
+
},
|
|
52
|
+
"engines": {
|
|
53
|
+
"node": ">=22"
|
|
54
|
+
},
|
|
55
|
+
"scripts": {
|
|
56
|
+
"build": "tsc -b",
|
|
57
|
+
"typecheck": "tsc -b --emitDeclarationOnly",
|
|
58
|
+
"test": "vitest run --passWithNoTests",
|
|
59
|
+
"lint": "eslint src/",
|
|
60
|
+
"check:pack": "tsx ../../tools/src/check-pack.ts --package ."
|
|
61
|
+
}
|
|
62
|
+
}
|