@penclipai/adapter-codex-local 2026.401.0-canary.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.
Files changed (70) hide show
  1. package/LICENSE +21 -0
  2. package/dist/cli/format-event.d.ts +2 -0
  3. package/dist/cli/format-event.d.ts.map +1 -0
  4. package/dist/cli/format-event.js +213 -0
  5. package/dist/cli/format-event.js.map +1 -0
  6. package/dist/cli/index.d.ts +2 -0
  7. package/dist/cli/index.d.ts.map +1 -0
  8. package/dist/cli/index.js +2 -0
  9. package/dist/cli/index.js.map +1 -0
  10. package/dist/cli/quota-probe.d.ts +3 -0
  11. package/dist/cli/quota-probe.d.ts.map +1 -0
  12. package/dist/cli/quota-probe.js +97 -0
  13. package/dist/cli/quota-probe.js.map +1 -0
  14. package/dist/index.d.ts +10 -0
  15. package/dist/index.d.ts.map +1 -0
  16. package/dist/index.js +48 -0
  17. package/dist/index.js.map +1 -0
  18. package/dist/server/codex-home.d.ts +6 -0
  19. package/dist/server/codex-home.d.ts.map +1 -0
  20. package/dist/server/codex-home.js +78 -0
  21. package/dist/server/codex-home.js.map +1 -0
  22. package/dist/server/execute.d.ts +15 -0
  23. package/dist/server/execute.d.ts.map +1 -0
  24. package/dist/server/execute.js +499 -0
  25. package/dist/server/execute.js.map +1 -0
  26. package/dist/server/index.d.ts +8 -0
  27. package/dist/server/index.d.ts.map +1 -0
  28. package/dist/server/index.js +57 -0
  29. package/dist/server/index.js.map +1 -0
  30. package/dist/server/parse.d.ts +12 -0
  31. package/dist/server/parse.d.ts.map +1 -0
  32. package/dist/server/parse.js +67 -0
  33. package/dist/server/parse.js.map +1 -0
  34. package/dist/server/quota-spawn-error.test.d.ts +2 -0
  35. package/dist/server/quota-spawn-error.test.d.ts.map +1 -0
  36. package/dist/server/quota-spawn-error.test.js +124 -0
  37. package/dist/server/quota-spawn-error.test.js.map +1 -0
  38. package/dist/server/quota.d.ts +64 -0
  39. package/dist/server/quota.d.ts.map +1 -0
  40. package/dist/server/quota.js +442 -0
  41. package/dist/server/quota.js.map +1 -0
  42. package/dist/server/skills.d.ts +8 -0
  43. package/dist/server/skills.d.ts.map +1 -0
  44. package/dist/server/skills.js +65 -0
  45. package/dist/server/skills.js.map +1 -0
  46. package/dist/server/test.d.ts +3 -0
  47. package/dist/server/test.d.ts.map +1 -0
  48. package/dist/server/test.js +207 -0
  49. package/dist/server/test.js.map +1 -0
  50. package/dist/ui/build-config.d.ts +3 -0
  51. package/dist/ui/build-config.d.ts.map +1 -0
  52. package/dist/ui/build-config.js +116 -0
  53. package/dist/ui/build-config.js.map +1 -0
  54. package/dist/ui/index.d.ts +3 -0
  55. package/dist/ui/index.d.ts.map +1 -0
  56. package/dist/ui/index.js +3 -0
  57. package/dist/ui/index.js.map +1 -0
  58. package/dist/ui/parse-stdout.d.ts +3 -0
  59. package/dist/ui/parse-stdout.d.ts.map +1 -0
  60. package/dist/ui/parse-stdout.js +232 -0
  61. package/dist/ui/parse-stdout.js.map +1 -0
  62. package/package.json +56 -0
  63. package/skills/paperclip/SKILL.md +369 -0
  64. package/skills/paperclip/references/api-reference.md +676 -0
  65. package/skills/paperclip/references/company-skills.md +193 -0
  66. package/skills/paperclip-create-agent/SKILL.md +142 -0
  67. package/skills/paperclip-create-agent/references/api-reference.md +105 -0
  68. package/skills/paperclip-create-plugin/SKILL.md +101 -0
  69. package/skills/para-memory-files/SKILL.md +104 -0
  70. package/skills/para-memory-files/references/schemas.md +35 -0
@@ -0,0 +1,67 @@
1
+ import { asString, asNumber, parseObject, parseJson } from "@penclipai/adapter-utils/server-utils";
2
+ export function parseCodexJsonl(stdout) {
3
+ let sessionId = null;
4
+ const messages = [];
5
+ let errorMessage = null;
6
+ const usage = {
7
+ inputTokens: 0,
8
+ cachedInputTokens: 0,
9
+ outputTokens: 0,
10
+ };
11
+ for (const rawLine of stdout.split(/\r?\n/)) {
12
+ const line = rawLine.trim();
13
+ if (!line)
14
+ continue;
15
+ const event = parseJson(line);
16
+ if (!event)
17
+ continue;
18
+ const type = asString(event.type, "");
19
+ if (type === "thread.started") {
20
+ sessionId = asString(event.thread_id, sessionId ?? "") || sessionId;
21
+ continue;
22
+ }
23
+ if (type === "error") {
24
+ const msg = asString(event.message, "").trim();
25
+ if (msg)
26
+ errorMessage = msg;
27
+ continue;
28
+ }
29
+ if (type === "item.completed") {
30
+ const item = parseObject(event.item);
31
+ if (asString(item.type, "") === "agent_message") {
32
+ const text = asString(item.text, "");
33
+ if (text)
34
+ messages.push(text);
35
+ }
36
+ continue;
37
+ }
38
+ if (type === "turn.completed") {
39
+ const usageObj = parseObject(event.usage);
40
+ usage.inputTokens = asNumber(usageObj.input_tokens, usage.inputTokens);
41
+ usage.cachedInputTokens = asNumber(usageObj.cached_input_tokens, usage.cachedInputTokens);
42
+ usage.outputTokens = asNumber(usageObj.output_tokens, usage.outputTokens);
43
+ continue;
44
+ }
45
+ if (type === "turn.failed") {
46
+ const err = parseObject(event.error);
47
+ const msg = asString(err.message, "").trim();
48
+ if (msg)
49
+ errorMessage = msg;
50
+ }
51
+ }
52
+ return {
53
+ sessionId,
54
+ summary: messages.join("\n\n").trim(),
55
+ usage,
56
+ errorMessage,
57
+ };
58
+ }
59
+ export function isCodexUnknownSessionError(stdout, stderr) {
60
+ const haystack = `${stdout}\n${stderr}`
61
+ .split(/\r?\n/)
62
+ .map((line) => line.trim())
63
+ .filter(Boolean)
64
+ .join("\n");
65
+ return /unknown (session|thread)|session .* not found|thread .* not found|conversation .* not found|missing rollout path for thread|state db missing rollout path/i.test(haystack);
66
+ }
67
+ //# sourceMappingURL=parse.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parse.js","sourceRoot":"","sources":["../../src/server/parse.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,uCAAuC,CAAC;AAEnG,MAAM,UAAU,eAAe,CAAC,MAAc;IAC5C,IAAI,SAAS,GAAkB,IAAI,CAAC;IACpC,MAAM,QAAQ,GAAa,EAAE,CAAC;IAC9B,IAAI,YAAY,GAAkB,IAAI,CAAC;IACvC,MAAM,KAAK,GAAG;QACZ,WAAW,EAAE,CAAC;QACd,iBAAiB,EAAE,CAAC;QACpB,YAAY,EAAE,CAAC;KAChB,CAAC;IAEF,KAAK,MAAM,OAAO,IAAI,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC;QAC5C,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC;QAC5B,IAAI,CAAC,IAAI;YAAE,SAAS;QAEpB,MAAM,KAAK,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC;QAC9B,IAAI,CAAC,KAAK;YAAE,SAAS;QAErB,MAAM,IAAI,GAAG,QAAQ,CAAC,KAAK,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;QACtC,IAAI,IAAI,KAAK,gBAAgB,EAAE,CAAC;YAC9B,SAAS,GAAG,QAAQ,CAAC,KAAK,CAAC,SAAS,EAAE,SAAS,IAAI,EAAE,CAAC,IAAI,SAAS,CAAC;YACpE,SAAS;QACX,CAAC;QAED,IAAI,IAAI,KAAK,OAAO,EAAE,CAAC;YACrB,MAAM,GAAG,GAAG,QAAQ,CAAC,KAAK,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;YAC/C,IAAI,GAAG;gBAAE,YAAY,GAAG,GAAG,CAAC;YAC5B,SAAS;QACX,CAAC;QAED,IAAI,IAAI,KAAK,gBAAgB,EAAE,CAAC;YAC9B,MAAM,IAAI,GAAG,WAAW,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YACrC,IAAI,QAAQ,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,CAAC,KAAK,eAAe,EAAE,CAAC;gBAChD,MAAM,IAAI,GAAG,QAAQ,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;gBACrC,IAAI,IAAI;oBAAE,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAChC,CAAC;YACD,SAAS;QACX,CAAC;QAED,IAAI,IAAI,KAAK,gBAAgB,EAAE,CAAC;YAC9B,MAAM,QAAQ,GAAG,WAAW,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;YAC1C,KAAK,CAAC,WAAW,GAAG,QAAQ,CAAC,QAAQ,CAAC,YAAY,EAAE,KAAK,CAAC,WAAW,CAAC,CAAC;YACvE,KAAK,CAAC,iBAAiB,GAAG,QAAQ,CAAC,QAAQ,CAAC,mBAAmB,EAAE,KAAK,CAAC,iBAAiB,CAAC,CAAC;YAC1F,KAAK,CAAC,YAAY,GAAG,QAAQ,CAAC,QAAQ,CAAC,aAAa,EAAE,KAAK,CAAC,YAAY,CAAC,CAAC;YAC1E,SAAS;QACX,CAAC;QAED,IAAI,IAAI,KAAK,aAAa,EAAE,CAAC;YAC3B,MAAM,GAAG,GAAG,WAAW,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;YACrC,MAAM,GAAG,GAAG,QAAQ,CAAC,GAAG,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;YAC7C,IAAI,GAAG;gBAAE,YAAY,GAAG,GAAG,CAAC;QAC9B,CAAC;IACH,CAAC;IAED,OAAO;QACL,SAAS;QACT,OAAO,EAAE,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE;QACrC,KAAK;QACL,YAAY;KACb,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,0BAA0B,CAAC,MAAc,EAAE,MAAc;IACvE,MAAM,QAAQ,GAAG,GAAG,MAAM,KAAK,MAAM,EAAE;SACpC,KAAK,CAAC,OAAO,CAAC;SACd,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;SAC1B,MAAM,CAAC,OAAO,CAAC;SACf,IAAI,CAAC,IAAI,CAAC,CAAC;IACd,OAAO,4JAA4J,CAAC,IAAI,CACtK,QAAQ,CACT,CAAC;AACJ,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=quota-spawn-error.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"quota-spawn-error.test.d.ts","sourceRoot":"","sources":["../../src/server/quota-spawn-error.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,124 @@
1
+ import { EventEmitter } from "node:events";
2
+ import fs from "node:fs";
3
+ import os from "node:os";
4
+ import path from "node:path";
5
+ import { describe, expect, it, vi, beforeEach, afterEach } from "vitest";
6
+ const { mockSpawn } = vi.hoisted(() => ({
7
+ mockSpawn: vi.fn(),
8
+ }));
9
+ const itWindows = process.platform === "win32" ? it : it.skip;
10
+ vi.mock("node:child_process", async (importOriginal) => {
11
+ const cp = await importOriginal();
12
+ return {
13
+ ...cp,
14
+ spawn: (...args) => mockSpawn(...args),
15
+ };
16
+ });
17
+ import { getQuotaWindows } from "./quota.js";
18
+ function createChildThatErrorsOnMicrotask(err) {
19
+ const child = new EventEmitter();
20
+ const stream = Object.assign(new EventEmitter(), {
21
+ setEncoding: () => { },
22
+ });
23
+ Object.assign(child, {
24
+ stdout: stream,
25
+ stderr: Object.assign(new EventEmitter(), { setEncoding: () => { } }),
26
+ stdin: { write: vi.fn(), end: vi.fn() },
27
+ kill: vi.fn(),
28
+ });
29
+ setTimeout(() => {
30
+ child.emit("error", err);
31
+ }, 0);
32
+ return child;
33
+ }
34
+ describe("CodexRpcClient spawn failures", () => {
35
+ let previousCodexHome;
36
+ let previousPath;
37
+ let previousPathExt;
38
+ let isolatedCodexHome;
39
+ let fakeBinDir;
40
+ beforeEach(() => {
41
+ mockSpawn.mockReset();
42
+ // After the RPC path fails, getQuotaWindows() calls readCodexToken() which
43
+ // reads $CODEX_HOME/auth.json (default ~/.codex). Point CODEX_HOME at an
44
+ // empty temp directory so we never hit real host auth or the WHAM network.
45
+ previousCodexHome = process.env.CODEX_HOME;
46
+ previousPath = process.env.PATH;
47
+ previousPathExt = process.env.PATHEXT;
48
+ isolatedCodexHome = fs.mkdtempSync(path.join(os.tmpdir(), "paperclip-codex-spawn-test-"));
49
+ process.env.CODEX_HOME = isolatedCodexHome;
50
+ });
51
+ afterEach(() => {
52
+ if (isolatedCodexHome) {
53
+ try {
54
+ fs.rmSync(isolatedCodexHome, { recursive: true, force: true });
55
+ }
56
+ catch {
57
+ /* ignore */
58
+ }
59
+ isolatedCodexHome = undefined;
60
+ }
61
+ if (fakeBinDir) {
62
+ try {
63
+ fs.rmSync(fakeBinDir, { recursive: true, force: true });
64
+ }
65
+ catch {
66
+ /* ignore */
67
+ }
68
+ fakeBinDir = undefined;
69
+ }
70
+ if (previousCodexHome === undefined) {
71
+ delete process.env.CODEX_HOME;
72
+ }
73
+ else {
74
+ process.env.CODEX_HOME = previousCodexHome;
75
+ }
76
+ if (previousPath === undefined) {
77
+ delete process.env.PATH;
78
+ }
79
+ else {
80
+ process.env.PATH = previousPath;
81
+ }
82
+ if (previousPathExt === undefined) {
83
+ delete process.env.PATHEXT;
84
+ }
85
+ else {
86
+ process.env.PATHEXT = previousPathExt;
87
+ }
88
+ });
89
+ it("does not crash the process when codex is missing; getQuotaWindows returns ok: false", async () => {
90
+ const enoent = Object.assign(new Error("spawn codex ENOENT"), {
91
+ code: "ENOENT",
92
+ errno: -2,
93
+ syscall: "spawn codex",
94
+ path: "codex",
95
+ });
96
+ mockSpawn.mockImplementation(() => createChildThatErrorsOnMicrotask(enoent));
97
+ const result = await getQuotaWindows();
98
+ expect(result.ok).toBe(false);
99
+ expect(result.windows).toEqual([]);
100
+ expect(result.error).toContain("Codex app-server");
101
+ expect(result.error).toContain("spawn codex ENOENT");
102
+ });
103
+ itWindows("resolves codex.cmd before bare npm shell shims on Windows", async () => {
104
+ const fakeBin = fs.mkdtempSync(path.join(os.tmpdir(), "paperclip-codex-bin-"));
105
+ fakeBinDir = fakeBin;
106
+ const bareShimPath = path.join(fakeBin, "codex");
107
+ const cmdShimPath = path.join(fakeBin, "codex.cmd");
108
+ fs.writeFileSync(bareShimPath, "#!/bin/sh\nexit 1\n", "utf8");
109
+ fs.writeFileSync(cmdShimPath, "@ECHO off\r\nEXIT /b 0\r\n", "utf8");
110
+ process.env.PATH = fakeBin;
111
+ process.env.PATHEXT = ".EXE;.CMD;.BAT;.COM";
112
+ const spawnError = Object.assign(new Error("spawn codex EPERM"), {
113
+ code: "EPERM",
114
+ errno: -4048,
115
+ syscall: "spawn",
116
+ path: cmdShimPath,
117
+ });
118
+ mockSpawn.mockImplementation(() => createChildThatErrorsOnMicrotask(spawnError));
119
+ const result = await getQuotaWindows();
120
+ expect(result.ok).toBe(false);
121
+ expect(path.normalize(String(mockSpawn.mock.calls[0]?.[0])).toLowerCase()).toBe(path.normalize(cmdShimPath).toLowerCase());
122
+ });
123
+ });
124
+ //# sourceMappingURL=quota-spawn-error.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"quota-spawn-error.test.js","sourceRoot":"","sources":["../../src/server/quota-spawn-error.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,64 @@
1
+ import type { ProviderQuotaResult, QuotaWindow } from "@penclipai/adapter-utils";
2
+ export declare function codexHomeDir(): string;
3
+ export interface CodexAuthInfo {
4
+ accessToken: string;
5
+ accountId: string | null;
6
+ refreshToken: string | null;
7
+ idToken: string | null;
8
+ email: string | null;
9
+ planType: string | null;
10
+ lastRefresh: string | null;
11
+ }
12
+ export declare function readCodexAuthInfo(codexHome?: string): Promise<CodexAuthInfo | null>;
13
+ export declare function readCodexToken(): Promise<{
14
+ token: string;
15
+ accountId: string | null;
16
+ } | null>;
17
+ /**
18
+ * Map a window duration in seconds to a human-readable label.
19
+ * Falls back to the provided fallback string when seconds is null/undefined.
20
+ */
21
+ export declare function secondsToWindowLabel(seconds: number | null | undefined, fallback: string): string;
22
+ /** fetch with an abort-based timeout so a hanging provider api doesn't block the response indefinitely */
23
+ export declare function fetchWithTimeout(url: string, init: RequestInit, ms?: number): Promise<Response>;
24
+ export declare function fetchCodexQuota(token: string, accountId: string | null): Promise<QuotaWindow[]>;
25
+ interface CodexRpcWindow {
26
+ usedPercent?: number | null;
27
+ windowDurationMins?: number | null;
28
+ resetsAt?: number | null;
29
+ }
30
+ interface CodexRpcCredits {
31
+ hasCredits?: boolean | null;
32
+ unlimited?: boolean | null;
33
+ balance?: string | number | null;
34
+ }
35
+ interface CodexRpcLimit {
36
+ limitId?: string | null;
37
+ limitName?: string | null;
38
+ primary?: CodexRpcWindow | null;
39
+ secondary?: CodexRpcWindow | null;
40
+ credits?: CodexRpcCredits | null;
41
+ planType?: string | null;
42
+ }
43
+ interface CodexRpcRateLimitsResult {
44
+ rateLimits?: CodexRpcLimit | null;
45
+ rateLimitsByLimitId?: Record<string, CodexRpcLimit> | null;
46
+ }
47
+ interface CodexRpcAccountResult {
48
+ account?: {
49
+ type?: string | null;
50
+ email?: string | null;
51
+ planType?: string | null;
52
+ } | null;
53
+ requiresOpenaiAuth?: boolean | null;
54
+ }
55
+ export interface CodexRpcQuotaSnapshot {
56
+ windows: QuotaWindow[];
57
+ email: string | null;
58
+ planType: string | null;
59
+ }
60
+ export declare function mapCodexRpcQuota(result: CodexRpcRateLimitsResult, account?: CodexRpcAccountResult | null): CodexRpcQuotaSnapshot;
61
+ export declare function fetchCodexRpcQuota(): Promise<CodexRpcQuotaSnapshot>;
62
+ export declare function getQuotaWindows(): Promise<ProviderQuotaResult>;
63
+ export {};
64
+ //# sourceMappingURL=quota.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"quota.d.ts","sourceRoot":"","sources":["../../src/server/quota.ts"],"names":[],"mappings":"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"}