@paperclipai/server 2026.830.0-canary.8 → 2026.830.0-nightly.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/dist/build-info.json +1 -1
- package/dist/vendor/paperclip-runner/drivers/native-mcp.d.ts +7 -0
- package/dist/vendor/paperclip-runner/drivers/native-mcp.d.ts.map +1 -0
- package/dist/vendor/paperclip-runner/drivers/native-mcp.js +29 -0
- package/dist/vendor/paperclip-runner/drivers/native-mcp.js.map +1 -0
- package/dist/vendor/paperclip-runner/drivers/runtime-context-materializer.d.ts +16 -0
- package/dist/vendor/paperclip-runner/drivers/runtime-context-materializer.d.ts.map +1 -0
- package/dist/vendor/paperclip-runner/drivers/runtime-context-materializer.js +229 -0
- package/dist/vendor/paperclip-runner/drivers/runtime-context-materializer.js.map +1 -0
- package/package.json +18 -18
package/dist/build-info.json
CHANGED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"native-mcp.d.ts","sourceRoot":"","sources":["../../src/drivers/native-mcp.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,sBAAsB;IACrC,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;CACf;AAED,wBAAgB,sBAAsB,CACpC,WAAW,GAAE,MAAM,CAAC,UAAwB,GAC3C,sBAAsB,GAAG,IAAI,CAgC/B"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
export function nativeMcpLaunchBinding(environment = process.env) {
|
|
2
|
+
const name = environment.PAPERCLIP_NATIVE_MCP_NAME?.trim();
|
|
3
|
+
const url = environment.PAPERCLIP_NATIVE_MCP_URL?.trim();
|
|
4
|
+
const token = environment.PAPERCLIP_NATIVE_MCP_TOKEN?.trim();
|
|
5
|
+
if (!name && !url && !token)
|
|
6
|
+
return null;
|
|
7
|
+
if (!name
|
|
8
|
+
|| !url
|
|
9
|
+
|| !token
|
|
10
|
+
|| token.length < 32
|
|
11
|
+
|| token.length > 4096
|
|
12
|
+
|| url.length > 2048) {
|
|
13
|
+
throw new Error("assigned native MCP launch binding is incomplete");
|
|
14
|
+
}
|
|
15
|
+
if (!/^[a-zA-Z0-9_.-]{1,128}$/.test(name)) {
|
|
16
|
+
throw new Error("assigned native MCP name is invalid");
|
|
17
|
+
}
|
|
18
|
+
const endpoint = new URL(url);
|
|
19
|
+
if (endpoint.username || endpoint.password || endpoint.hash) {
|
|
20
|
+
throw new Error("assigned native MCP endpoint contains forbidden URL data");
|
|
21
|
+
}
|
|
22
|
+
if (endpoint.protocol !== "https:"
|
|
23
|
+
&& !(endpoint.protocol === "http:"
|
|
24
|
+
&& ["127.0.0.1", "localhost"].includes(endpoint.hostname))) {
|
|
25
|
+
throw new Error("assigned native MCP endpoint requires HTTPS or loopback HTTP");
|
|
26
|
+
}
|
|
27
|
+
return { name, url: endpoint.toString(), token };
|
|
28
|
+
}
|
|
29
|
+
//# sourceMappingURL=native-mcp.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"native-mcp.js","sourceRoot":"","sources":["../../src/drivers/native-mcp.ts"],"names":[],"mappings":"AAMA,MAAM,UAAU,sBAAsB,CACpC,WAAW,GAAsB,OAAO,CAAC,GAAG;IAE5C,MAAM,IAAI,GAAG,WAAW,CAAC,yBAAyB,EAAE,IAAI,EAAE,CAAC;IAC3D,MAAM,GAAG,GAAG,WAAW,CAAC,wBAAwB,EAAE,IAAI,EAAE,CAAC;IACzD,MAAM,KAAK,GAAG,WAAW,CAAC,0BAA0B,EAAE,IAAI,EAAE,CAAC;IAC7D,IAAI,CAAC,IAAI,IAAI,CAAC,GAAG,IAAI,CAAC,KAAK;QAAE,OAAO,IAAI,CAAC;IACzC,IACE,CAAC,IAAI;WACF,CAAC,GAAG;WACJ,CAAC,KAAK;WACN,KAAK,CAAC,MAAM,GAAG,EAAE;WACjB,KAAK,CAAC,MAAM,GAAG,IAAI;WACnB,GAAG,CAAC,MAAM,GAAG,IAAI,EACpB,CAAC;QACD,MAAM,IAAI,KAAK,CAAC,kDAAkD,CAAC,CAAC;IACtE,CAAC;IACD,IAAI,CAAC,yBAAyB,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;QAC1C,MAAM,IAAI,KAAK,CAAC,qCAAqC,CAAC,CAAC;IACzD,CAAC;IACD,MAAM,QAAQ,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC;IAC9B,IAAI,QAAQ,CAAC,QAAQ,IAAI,QAAQ,CAAC,QAAQ,IAAI,QAAQ,CAAC,IAAI,EAAE,CAAC;QAC5D,MAAM,IAAI,KAAK,CAAC,0DAA0D,CAAC,CAAC;IAC9E,CAAC;IACD,IACE,QAAQ,CAAC,QAAQ,KAAK,QAAQ;WAC3B,CAAC,CAAC,QAAQ,CAAC,QAAQ,KAAK,OAAO;eAC7B,CAAC,WAAW,EAAE,WAAW,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,EAC5D,CAAC;QACD,MAAM,IAAI,KAAK,CACb,8DAA8D,CAC/D,CAAC;IACJ,CAAC;IACD,OAAO,EAAE,IAAI,EAAE,GAAG,EAAE,QAAQ,CAAC,QAAQ,EAAE,EAAE,KAAK,EAAE,CAAC;AACnD,CAAC"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import type { NativeRuntimeContextSnapshot } from "../contracts/runtime-context.js";
|
|
2
|
+
import type { NativeMcpLaunchBinding } from "./native-mcp.js";
|
|
3
|
+
export declare function materializeNativeRuntimeSkills(context: NativeRuntimeContextSnapshot | null, skillsHome: string, dependencies?: {
|
|
4
|
+
/** Internal test seam for failed staging cleanup coverage. */
|
|
5
|
+
removeTree?: (path: string) => Promise<void>;
|
|
6
|
+
/** Internal test seam for publication failure coverage. */
|
|
7
|
+
renameTree?: (source: string, destination: string) => Promise<void>;
|
|
8
|
+
}): Promise<void>;
|
|
9
|
+
export declare function prepareIsolatedCodexHome(input: {
|
|
10
|
+
context: NativeRuntimeContextSnapshot | null;
|
|
11
|
+
codexHome: string;
|
|
12
|
+
sourceCodexHome?: string | null;
|
|
13
|
+
nativeMcp?: NativeMcpLaunchBinding | null;
|
|
14
|
+
apiKey?: string | null;
|
|
15
|
+
}): Promise<void>;
|
|
16
|
+
//# sourceMappingURL=runtime-context-materializer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"runtime-context-materializer.d.ts","sourceRoot":"","sources":["../../src/drivers/runtime-context-materializer.ts"],"names":[],"mappings":"AAeA,OAAO,KAAK,EAAE,4BAA4B,EAAE,MAAM,iCAAiC,CAAC;AACpF,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,iBAAiB,CAAC;AAyH9D,wBAAsB,8BAA8B,CAClD,OAAO,EAAE,4BAA4B,GAAG,IAAI,EAC5C,UAAU,EAAE,MAAM,EAClB,YAAY,GAAE;IACZ,8DAA8D;IAC9D,UAAU,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAC7C,2DAA2D;IAC3D,UAAU,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;CAChE,GACL,OAAO,CAAC,IAAI,CAAC,CAsEf;AAuBD,wBAAsB,wBAAwB,CAAC,KAAK,EAAE;IACpD,OAAO,EAAE,4BAA4B,GAAG,IAAI,CAAC;IAC7C,SAAS,EAAE,MAAM,CAAC;IAClB,eAAe,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAChC,SAAS,CAAC,EAAE,sBAAsB,GAAG,IAAI,CAAC;IAC1C,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CACxB,GAAG,OAAO,CAAC,IAAI,CAAC,CA+ChB"}
|
|
@@ -0,0 +1,229 @@
|
|
|
1
|
+
import { randomUUID } from "node:crypto";
|
|
2
|
+
import { constants } from "node:fs";
|
|
3
|
+
import { chmod, cp, lstat, mkdir, open, readdir, rename, rm, writeFile, } from "node:fs/promises";
|
|
4
|
+
import { dirname, isAbsolute, join, relative, resolve, sep } from "node:path";
|
|
5
|
+
async function assertSafeTree(root, child = "") {
|
|
6
|
+
const directory = child ? join(root, child) : root;
|
|
7
|
+
const directoryStat = await lstat(directory);
|
|
8
|
+
if (directoryStat.isSymbolicLink()) {
|
|
9
|
+
throw new Error(`runtime context asset contains a symlink: ${child || "."}`);
|
|
10
|
+
}
|
|
11
|
+
if (!directoryStat.isDirectory()) {
|
|
12
|
+
throw new Error("runtime context asset root must be a directory");
|
|
13
|
+
}
|
|
14
|
+
for (const entry of await readdir(directory, { withFileTypes: true })) {
|
|
15
|
+
const childRelative = child ? `${child}/${entry.name}` : entry.name;
|
|
16
|
+
const stat = await lstat(join(root, childRelative));
|
|
17
|
+
if (stat.isSymbolicLink()) {
|
|
18
|
+
throw new Error(`runtime context asset contains a symlink: ${childRelative}`);
|
|
19
|
+
}
|
|
20
|
+
if (stat.isDirectory())
|
|
21
|
+
await assertSafeTree(root, childRelative);
|
|
22
|
+
else if (!stat.isFile()) {
|
|
23
|
+
throw new Error(`runtime context asset contains an unsupported file: ${childRelative}`);
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
function safeMaterializationTarget(root, runtimeName) {
|
|
28
|
+
const segments = runtimeName.split("/");
|
|
29
|
+
if (runtimeName.startsWith("/")
|
|
30
|
+
|| runtimeName.includes("\\")
|
|
31
|
+
|| runtimeName.includes("\0")
|
|
32
|
+
|| segments.some((segment) => /[<>:"|?*\u0000-\u001f\u007f]/u.test(segment))
|
|
33
|
+
|| segments.some((segment) => !segment || segment === "." || segment === "..")
|
|
34
|
+
|| segments.some((segment) => !segment.replace(/[ .]+$/u, ""))
|
|
35
|
+
|| segments.some(isWin32ReservedPathSegment)) {
|
|
36
|
+
throw new Error("runtime context skill name must be a safe relative path");
|
|
37
|
+
}
|
|
38
|
+
const target = resolve(root, runtimeName);
|
|
39
|
+
const relation = relative(resolve(root), target);
|
|
40
|
+
if (relation === ""
|
|
41
|
+
|| relation === ".."
|
|
42
|
+
|| relation.startsWith(`..${sep}`)
|
|
43
|
+
|| isAbsolute(relation)) {
|
|
44
|
+
throw new Error("runtime context skill name must stay inside the skills home");
|
|
45
|
+
}
|
|
46
|
+
return target;
|
|
47
|
+
}
|
|
48
|
+
function isWin32ReservedPathSegment(segment) {
|
|
49
|
+
const basename = segment
|
|
50
|
+
.normalize("NFC")
|
|
51
|
+
.split(".", 1)[0]
|
|
52
|
+
.replace(/[ .]+$/u, "")
|
|
53
|
+
.toUpperCase();
|
|
54
|
+
return /^(?:CON|PRN|AUX|NUL|CONIN\$|CONOUT\$|COM[1-9¹²³]|LPT[1-9¹²³])$/u.test(basename);
|
|
55
|
+
}
|
|
56
|
+
function portableRuntimeNameKey(runtimeName) {
|
|
57
|
+
// Skill assignments must remain unambiguous when the same context is moved
|
|
58
|
+
// between the case-sensitive Linux runner and the case-insensitive default
|
|
59
|
+
// filesystems on macOS or Windows. NFC also catches composed/decomposed
|
|
60
|
+
// aliases, while per-segment trimming matches Win32's treatment of trailing
|
|
61
|
+
// dots and spaces before either spelling reaches the staging tree.
|
|
62
|
+
return runtimeName
|
|
63
|
+
.normalize("NFC")
|
|
64
|
+
.split("/")
|
|
65
|
+
.map((segment) => segment.replace(/[ .]+$/u, ""))
|
|
66
|
+
.join("/")
|
|
67
|
+
.toLowerCase();
|
|
68
|
+
}
|
|
69
|
+
async function protectStagedTree(root) {
|
|
70
|
+
const rootHandle = await open(root, constants.O_RDONLY
|
|
71
|
+
| (constants.O_NOFOLLOW ?? 0)
|
|
72
|
+
| (constants.O_DIRECTORY ?? 0));
|
|
73
|
+
try {
|
|
74
|
+
const opened = await rootHandle.stat();
|
|
75
|
+
if (!opened.isDirectory()) {
|
|
76
|
+
throw new Error("staged runtime context root must be a directory");
|
|
77
|
+
}
|
|
78
|
+
// Keep directories owner-writable so the private staging tree can be
|
|
79
|
+
// removed without a second path-based chmod traversal.
|
|
80
|
+
await rootHandle.chmod(0o700);
|
|
81
|
+
for (const entry of await readdir(root, { withFileTypes: true })) {
|
|
82
|
+
const child = join(root, entry.name);
|
|
83
|
+
if (entry.isDirectory()) {
|
|
84
|
+
await protectStagedTree(child);
|
|
85
|
+
continue;
|
|
86
|
+
}
|
|
87
|
+
const childHandle = await open(child, constants.O_RDONLY | (constants.O_NOFOLLOW ?? 0));
|
|
88
|
+
try {
|
|
89
|
+
const openedChild = await childHandle.stat();
|
|
90
|
+
if (!openedChild.isFile()) {
|
|
91
|
+
throw new Error("staged runtime context asset must be a regular file");
|
|
92
|
+
}
|
|
93
|
+
await childHandle.chmod(openedChild.mode & 0o555);
|
|
94
|
+
}
|
|
95
|
+
finally {
|
|
96
|
+
await childHandle.close();
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
finally {
|
|
101
|
+
await rootHandle.close();
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
export async function materializeNativeRuntimeSkills(context, skillsHome, dependencies = {}) {
|
|
105
|
+
const removeTree = dependencies.removeTree ??
|
|
106
|
+
((path) => rm(path, { recursive: true, force: true }));
|
|
107
|
+
const renameTree = dependencies.renameTree ?? rename;
|
|
108
|
+
if (context) {
|
|
109
|
+
const runtimeNames = new Set();
|
|
110
|
+
for (const skill of context.skills) {
|
|
111
|
+
safeMaterializationTarget(skillsHome, skill.runtimeName);
|
|
112
|
+
const runtimeName = portableRuntimeNameKey(skill.runtimeName);
|
|
113
|
+
if (runtimeNames.has(runtimeName)) {
|
|
114
|
+
throw new Error("runtime context skill names must not overlap");
|
|
115
|
+
}
|
|
116
|
+
runtimeNames.add(runtimeName);
|
|
117
|
+
}
|
|
118
|
+
for (const runtimeName of runtimeNames) {
|
|
119
|
+
const segments = runtimeName.split("/");
|
|
120
|
+
for (let length = 1; length < segments.length; length += 1) {
|
|
121
|
+
if (runtimeNames.has(segments.slice(0, length).join("/"))) {
|
|
122
|
+
throw new Error("runtime context skill names must not overlap");
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
for (const skill of context.skills) {
|
|
127
|
+
await assertSafeTree(skill.bundle.rootPath);
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
const skillsHomeExists = await lstat(skillsHome).then(() => true, (error) => {
|
|
131
|
+
if (error.code === "ENOENT")
|
|
132
|
+
return false;
|
|
133
|
+
throw error;
|
|
134
|
+
});
|
|
135
|
+
if (skillsHomeExists) {
|
|
136
|
+
throw new Error("runtime context skills home must be a fresh destination");
|
|
137
|
+
}
|
|
138
|
+
const parent = dirname(skillsHome);
|
|
139
|
+
const nonce = randomUUID();
|
|
140
|
+
const stagingHome = join(parent, `.paperclip-skills-staging-${nonce}`);
|
|
141
|
+
await mkdir(parent, { recursive: true, mode: 0o700 });
|
|
142
|
+
await chmod(parent, 0o700);
|
|
143
|
+
await mkdir(stagingHome, { mode: 0o700 });
|
|
144
|
+
try {
|
|
145
|
+
for (const skill of context?.skills ?? []) {
|
|
146
|
+
const target = safeMaterializationTarget(stagingHome, skill.runtimeName);
|
|
147
|
+
await cp(skill.bundle.rootPath, target, {
|
|
148
|
+
recursive: true,
|
|
149
|
+
force: false,
|
|
150
|
+
errorOnExist: true,
|
|
151
|
+
dereference: false,
|
|
152
|
+
verbatimSymlinks: true,
|
|
153
|
+
});
|
|
154
|
+
await assertSafeTree(target);
|
|
155
|
+
await protectStagedTree(target);
|
|
156
|
+
}
|
|
157
|
+
// The caller supplies a new isolated home for each provider launch. Never
|
|
158
|
+
// move an existing assignment out of its canonical path: a failed bounded
|
|
159
|
+
// rollback cannot portably guarantee that name is restored on every
|
|
160
|
+
// filesystem. Publication therefore targets only a fresh destination.
|
|
161
|
+
await renameTree(stagingHome, skillsHome);
|
|
162
|
+
}
|
|
163
|
+
catch (error) {
|
|
164
|
+
await removeTree(stagingHome).catch(() => undefined);
|
|
165
|
+
throw error;
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
async function readSourceCodexAuth(sourceAuth) {
|
|
169
|
+
const handle = await open(sourceAuth, constants.O_RDONLY | (constants.O_NOFOLLOW ?? 0)).catch((error) => {
|
|
170
|
+
if (error.code === "ENOENT" || error.code === "ELOOP")
|
|
171
|
+
return null;
|
|
172
|
+
throw error;
|
|
173
|
+
});
|
|
174
|
+
if (!handle)
|
|
175
|
+
return null;
|
|
176
|
+
try {
|
|
177
|
+
const stat = await handle.stat();
|
|
178
|
+
if (!stat.isFile())
|
|
179
|
+
return null;
|
|
180
|
+
if (stat.size > 1024 * 1024) {
|
|
181
|
+
throw new Error("source Codex auth file exceeds the 1 MiB limit");
|
|
182
|
+
}
|
|
183
|
+
return await handle.readFile();
|
|
184
|
+
}
|
|
185
|
+
finally {
|
|
186
|
+
await handle.close();
|
|
187
|
+
}
|
|
188
|
+
}
|
|
189
|
+
export async function prepareIsolatedCodexHome(input) {
|
|
190
|
+
await materializeNativeRuntimeSkills(input.context, join(input.codexHome, "skills"));
|
|
191
|
+
const configPath = join(input.codexHome, "config.toml");
|
|
192
|
+
await rm(configPath, { force: true });
|
|
193
|
+
await writeFile(configPath, [
|
|
194
|
+
// Codex shell snapshots serialize the provider process environment. The
|
|
195
|
+
// native runner injects short-lived provider and MCP bindings, so a
|
|
196
|
+
// snapshot would turn ephemeral credentials into durable session state.
|
|
197
|
+
"[features]",
|
|
198
|
+
"shell_snapshot = false",
|
|
199
|
+
"",
|
|
200
|
+
...(input.nativeMcp
|
|
201
|
+
? [
|
|
202
|
+
`[mcp_servers.${JSON.stringify(input.nativeMcp.name)}]`,
|
|
203
|
+
`url = ${JSON.stringify(input.nativeMcp.url)}`,
|
|
204
|
+
`http_headers = { Authorization = ${JSON.stringify(`Bearer ${input.nativeMcp.token}`)} }`,
|
|
205
|
+
"",
|
|
206
|
+
]
|
|
207
|
+
: []),
|
|
208
|
+
].join("\n"), { mode: 0o600 });
|
|
209
|
+
const targetAuth = join(input.codexHome, "auth.json");
|
|
210
|
+
await rm(targetAuth, { force: true });
|
|
211
|
+
const apiKey = input.apiKey?.trim();
|
|
212
|
+
if (apiKey) {
|
|
213
|
+
// The pinned Codex app-server authenticates API-key automation through its
|
|
214
|
+
// login cache rather than the CLI-only CODEX_API_KEY path. Keep this file
|
|
215
|
+
// owner-only in the disposable session home.
|
|
216
|
+
await writeFile(targetAuth, JSON.stringify({ OPENAI_API_KEY: apiKey }), { mode: 0o600 });
|
|
217
|
+
await chmod(targetAuth, 0o600);
|
|
218
|
+
return;
|
|
219
|
+
}
|
|
220
|
+
const sourceHome = input.sourceCodexHome?.trim();
|
|
221
|
+
if (!sourceHome)
|
|
222
|
+
return;
|
|
223
|
+
const sourceAuth = await readSourceCodexAuth(join(sourceHome, "auth.json"));
|
|
224
|
+
if (!sourceAuth)
|
|
225
|
+
return;
|
|
226
|
+
await writeFile(targetAuth, sourceAuth, { mode: 0o600 });
|
|
227
|
+
await chmod(targetAuth, 0o600);
|
|
228
|
+
}
|
|
229
|
+
//# sourceMappingURL=runtime-context-materializer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"runtime-context-materializer.js","sourceRoot":"","sources":["../../src/drivers/runtime-context-materializer.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@paperclipai/server",
|
|
3
|
-
"version": "2026.830.0-
|
|
3
|
+
"version": "2026.830.0-nightly.0",
|
|
4
4
|
"license": "MIT",
|
|
5
5
|
"homepage": "https://github.com/paperclipai/paperclip",
|
|
6
6
|
"bugs": {
|
|
@@ -29,22 +29,22 @@
|
|
|
29
29
|
"dependencies": {
|
|
30
30
|
"@aws-sdk/client-s3": "^3.1115.0",
|
|
31
31
|
"@opentelemetry/api": "^1.9.0",
|
|
32
|
-
"@paperclipai/adapter-claude-local": "2026.830.0-
|
|
33
|
-
"@paperclipai/adapter-codex-local": "2026.830.0-
|
|
34
|
-
"@paperclipai/adapter-cursor-cloud": "2026.830.0-
|
|
35
|
-
"@paperclipai/adapter-cursor-local": "2026.830.0-
|
|
36
|
-
"@paperclipai/adapter-gemini-local": "2026.830.0-
|
|
37
|
-
"@paperclipai/adapter-grok-local": "2026.830.0-
|
|
38
|
-
"@paperclipai/adapter-kimi-local": "2026.830.0-
|
|
39
|
-
"@paperclipai/adapter-openclaw-gateway": "2026.830.0-
|
|
40
|
-
"@paperclipai/adapter-opencode-local": "2026.830.0-
|
|
41
|
-
"@paperclipai/adapter-pi-local": "2026.830.0-
|
|
42
|
-
"@paperclipai/adapter-utils": "2026.830.0-
|
|
43
|
-
"@paperclipai/db": "2026.830.0-
|
|
44
|
-
"@paperclipai/hermes-paperclip-adapter": "2026.830.0-
|
|
45
|
-
"@paperclipai/plugin-sdk": "2026.830.0-
|
|
46
|
-
"@paperclipai/shared": "2026.830.0-
|
|
47
|
-
"@paperclipai/skills-catalog": "2026.830.0-
|
|
32
|
+
"@paperclipai/adapter-claude-local": "2026.830.0-nightly.0",
|
|
33
|
+
"@paperclipai/adapter-codex-local": "2026.830.0-nightly.0",
|
|
34
|
+
"@paperclipai/adapter-cursor-cloud": "2026.830.0-nightly.0",
|
|
35
|
+
"@paperclipai/adapter-cursor-local": "2026.830.0-nightly.0",
|
|
36
|
+
"@paperclipai/adapter-gemini-local": "2026.830.0-nightly.0",
|
|
37
|
+
"@paperclipai/adapter-grok-local": "2026.830.0-nightly.0",
|
|
38
|
+
"@paperclipai/adapter-kimi-local": "2026.830.0-nightly.0",
|
|
39
|
+
"@paperclipai/adapter-openclaw-gateway": "2026.830.0-nightly.0",
|
|
40
|
+
"@paperclipai/adapter-opencode-local": "2026.830.0-nightly.0",
|
|
41
|
+
"@paperclipai/adapter-pi-local": "2026.830.0-nightly.0",
|
|
42
|
+
"@paperclipai/adapter-utils": "2026.830.0-nightly.0",
|
|
43
|
+
"@paperclipai/db": "2026.830.0-nightly.0",
|
|
44
|
+
"@paperclipai/hermes-paperclip-adapter": "2026.830.0-nightly.0",
|
|
45
|
+
"@paperclipai/plugin-sdk": "2026.830.0-nightly.0",
|
|
46
|
+
"@paperclipai/shared": "2026.830.0-nightly.0",
|
|
47
|
+
"@paperclipai/skills-catalog": "2026.830.0-nightly.0",
|
|
48
48
|
"@vercel/connect": "0.6.1",
|
|
49
49
|
"ajv": "^8.20.0",
|
|
50
50
|
"ajv-formats": "^3.0.1",
|
|
@@ -68,7 +68,7 @@
|
|
|
68
68
|
"zod": "^4.4.3"
|
|
69
69
|
},
|
|
70
70
|
"devDependencies": {
|
|
71
|
-
"@paperclipai/paperclip-runner": "2026.830.0-
|
|
71
|
+
"@paperclipai/paperclip-runner": "2026.830.0-nightly.0",
|
|
72
72
|
"@types/express": "^5.0.0",
|
|
73
73
|
"@types/express-serve-static-core": "^5.1.3",
|
|
74
74
|
"@types/jsdom": "^30.0.0",
|