From 4272c1604dd17955f37b4cc5db6672dffe75709c Mon Sep 17 00:00:00 2001 From: Dotta <34892728+cryppadotta@users.noreply.github.com> Date: Thu, 30 Apr 2026 19:57:05 -0500 Subject: [PATCH] Add ACPX local adapter runtime (#4893) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ## Thinking Path > - Paperclip orchestrates AI-agent companies through a control plane that can start, supervise, and recover agent runs. > - Local adapters are the bridge between Paperclip issues and concrete agent runtimes such as Claude, Codex, and other ACP-compatible tools. > - The roadmap calls out broader “bring your own agent” and claw-style agent support, and ACPX gives Paperclip one path to normalize multiple ACP agents behind a single adapter. > - The branch needed to become one reviewable PR against current `paperclipai/paperclip:master`, without carrying stale base conflicts or generated lockfile churn. > - This pull request adds an experimental built-in `acpx_local` adapter, integrates it through the server/CLI/UI adapter surfaces, and adds regression coverage for runtime execution, skill sync, stream parsing, diagnostics, and log redaction. > - The benefit is that Paperclip can run Claude/Codex/custom ACP agents through ACPX while keeping operator configuration, skills, logging, and transcript rendering inside the existing adapter model. ## What Changed - Added `@paperclipai/adapter-acpx-local` with server execution, config schema, ACPX session handling, CLI formatting, UI config helpers, and stdout parsing. - Registered `acpx_local` across CLI, server, shared constants, UI adapter metadata, adapter capabilities, and agent creation/editing surfaces. - Added ACPX runtime execution support with persistent sessions, local-agent JWT environment handling, skill snapshots, runtime skill materialization, and isolation/security regressions. - Added ACPX adapter diagnostics and marked the adapter experimental in the UI. - Added command/env secret redaction for resolved command metadata in adapter-utils, server event storage, and the Agent Detail invocation UI. - Added Storybook coverage for ACPX config, transcript rendering, and skill states, plus PR screenshots under `docs/pr-screenshots/pap-2944/`. - Rebased the branch onto current `public-gh/master`; `pnpm-lock.yaml` is intentionally not included and there are no migration/schema changes. ## Verification - `pnpm exec vitest run packages/adapters/acpx-local/src/server/execute.test.ts packages/adapters/acpx-local/src/server/test.test.ts packages/adapters/acpx-local/src/cli/format-event.test.ts packages/adapters/acpx-local/src/ui/parse-stdout.test.ts packages/adapter-utils/src/server-utils.test.ts server/src/__tests__/redaction.test.ts server/src/__tests__/acpx-local-execute.test.ts server/src/__tests__/acpx-local-skill-sync.test.ts server/src/__tests__/acpx-local-adapter-environment.test.ts server/src/__tests__/adapter-routes.test.ts server/src/__tests__/agent-skills-routes.test.ts ui/src/adapters/metadata.test.ts` — 12 files, 87 tests passed. - `pnpm --filter @paperclipai/adapter-acpx-local typecheck` — passed. - `pnpm --filter @paperclipai/server typecheck` — passed. - `pnpm --filter @paperclipai/ui typecheck` — passed. - Confirmed PR diff does not include `pnpm-lock.yaml`, database schema files, or migrations. Screenshots: ![ACPX Claude skills light](https://github.com/cryppadotta/paperclip-1/blob/PAP-2944-acpx-make-a-claude_local-adapter-that-uses-acpx-instead/docs/pr-screenshots/pap-2944/skills-claude-light.png?raw=true) ![ACPX Claude skills dark](https://github.com/cryppadotta/paperclip-1/blob/PAP-2944-acpx-make-a-claude_local-adapter-that-uses-acpx-instead/docs/pr-screenshots/pap-2944/skills-claude-dark.png?raw=true) ![ACPX custom skills light](https://github.com/cryppadotta/paperclip-1/blob/PAP-2944-acpx-make-a-claude_local-adapter-that-uses-acpx-instead/docs/pr-screenshots/pap-2944/skills-custom-light.png?raw=true) ## Risks - Medium risk: this introduces a new built-in adapter package and touches runtime execution, adapter registration, agent config, skills, and transcript rendering. - ACPX and ACP agent behavior can vary by installed tool versions; the adapter is marked experimental to set operator expectations. - `pnpm-lock.yaml` is excluded per repository PR policy, so dependency lock refresh must be handled by the repo’s automation or maintainers. - No database migration risk: no schema or migration files changed. > For core feature work, check [`ROADMAP.md`](ROADMAP.md) first and discuss it in `#dev` before opening the PR. Feature PRs that overlap with planned core work may need to be redirected — check the roadmap first. See `CONTRIBUTING.md`. ## Model Used - OpenAI Codex coding agent based on GPT-5, with repository tool use, shell execution, git operations, and local verification. Exact hosted context window was not exposed in this environment. ## Checklist - [x] I have included a thinking path that traces from project context to this change - [x] I have specified the model used (with version and capability details) - [x] I have checked ROADMAP.md and confirmed this PR does not duplicate planned core work - [x] I have run tests locally and they pass - [x] I have added or updated tests where applicable - [x] If this change affects the UI, I have included before/after screenshots - [x] I have updated relevant documentation to reflect my changes - [x] I have considered and documented any risks above - [x] I will address all Greptile and reviewer comments before requesting merge --------- Co-authored-by: Paperclip --- Dockerfile | 1 + cli/package.json | 1 + cli/src/adapters/registry.ts | 7 + .../pap-2944/skills-claude-dark.png | Bin 0 -> 75911 bytes .../pap-2944/skills-claude-light.png | Bin 0 -> 75879 bytes .../pap-2944/skills-codex-dark.png | Bin 0 -> 75470 bytes .../pap-2944/skills-codex-light.png | Bin 0 -> 75432 bytes .../pap-2944/skills-custom-dark.png | Bin 0 -> 89572 bytes .../pap-2944/skills-custom-light.png | Bin 0 -> 89232 bytes .../pap-2944/skills-empty-library-dark.png | Bin 0 -> 41597 bytes .../pap-2944/skills-empty-library-light.png | Bin 0 -> 41503 bytes .../pap-2944/skills-loading-dark.png | Bin 0 -> 37171 bytes .../pap-2944/skills-loading-light.png | Bin 0 -> 37151 bytes .../adapter-utils/src/command-redaction.ts | 21 + packages/adapter-utils/src/index.ts | 4 + .../adapter-utils/src/server-utils.test.ts | 81 ++ packages/adapter-utils/src/server-utils.ts | 203 ++- .../adapter-utils/src/session-compaction.ts | 6 + packages/adapters/acpx-local/package.json | 64 + .../acpx-local/src/cli/format-event.test.ts | 121 ++ .../acpx-local/src/cli/format-event.ts | 121 ++ packages/adapters/acpx-local/src/cli/index.ts | 1 + packages/adapters/acpx-local/src/index.ts | 47 + .../acpx-local/src/server/config-schema.ts | 102 ++ .../acpx-local/src/server/execute.test.ts | 362 +++++ .../adapters/acpx-local/src/server/execute.ts | 1212 +++++++++++++++++ .../adapters/acpx-local/src/server/index.ts | 5 + .../acpx-local/src/server/session-codec.ts | 50 + .../adapters/acpx-local/src/server/skills.ts | 106 ++ .../acpx-local/src/server/test.test.ts | 49 + .../adapters/acpx-local/src/server/test.ts | 295 ++++ .../acpx-local/src/ui/build-config.ts | 139 ++ packages/adapters/acpx-local/src/ui/index.ts | 2 + .../acpx-local/src/ui/parse-stdout.test.ts | 160 +++ .../acpx-local/src/ui/parse-stdout.ts | 158 +++ packages/adapters/acpx-local/tsconfig.json | 8 + packages/adapters/acpx-local/vitest.config.ts | 7 + packages/shared/src/constants.ts | 1 + packages/shared/src/environment-support.ts | 1 + scripts/capture-acpx-skills-screenshots.mjs | 43 + scripts/run-vitest-stable.mjs | 1 + server/package.json | 1 + .../acpx-local-adapter-environment.test.ts | 129 ++ .../src/__tests__/acpx-local-execute.test.ts | 603 ++++++++ .../__tests__/acpx-local-skill-sync.test.ts | 78 ++ server/src/__tests__/adapter-routes.test.ts | 30 + .../__tests__/adapter-session-codecs.test.ts | 45 + .../src/__tests__/agent-skills-routes.test.ts | 93 ++ server/src/__tests__/redaction.test.ts | 47 + server/src/adapters/builtin-adapter-types.ts | 1 + server/src/adapters/registry.ts | 26 + server/src/adapters/utils.ts | 3 +- server/src/redaction.ts | 51 +- server/src/routes/agents.ts | 22 + .../services/environment-execution-target.ts | 2 + server/src/services/heartbeat.ts | 8 +- ui/package.json | 1 + ui/src/adapters/acpx-local/index.ts | 11 + ui/src/adapters/adapter-display-registry.ts | 9 + ui/src/adapters/metadata.test.ts | 33 +- ui/src/adapters/metadata.ts | 11 + ui/src/adapters/registry.ts | 2 + ui/src/adapters/use-adapter-capabilities.ts | 1 + ui/src/components/AgentConfigForm.tsx | 17 +- ui/src/components/NewAgentDialog.tsx | 7 +- ui/src/components/OnboardingWizard.tsx | 7 +- ui/src/pages/AgentDetail.tsx | 21 +- ui/storybook/.storybook/preview.tsx | 17 +- ui/storybook/stories/acpx-local.stories.tsx | 896 ++++++++++++ vitest.config.ts | 1 + 70 files changed, 5521 insertions(+), 31 deletions(-) create mode 100644 docs/pr-screenshots/pap-2944/skills-claude-dark.png create mode 100644 docs/pr-screenshots/pap-2944/skills-claude-light.png create mode 100644 docs/pr-screenshots/pap-2944/skills-codex-dark.png create mode 100644 docs/pr-screenshots/pap-2944/skills-codex-light.png create mode 100644 docs/pr-screenshots/pap-2944/skills-custom-dark.png create mode 100644 docs/pr-screenshots/pap-2944/skills-custom-light.png create mode 100644 docs/pr-screenshots/pap-2944/skills-empty-library-dark.png create mode 100644 docs/pr-screenshots/pap-2944/skills-empty-library-light.png create mode 100644 docs/pr-screenshots/pap-2944/skills-loading-dark.png create mode 100644 docs/pr-screenshots/pap-2944/skills-loading-light.png create mode 100644 packages/adapter-utils/src/command-redaction.ts create mode 100644 packages/adapters/acpx-local/package.json create mode 100644 packages/adapters/acpx-local/src/cli/format-event.test.ts create mode 100644 packages/adapters/acpx-local/src/cli/format-event.ts create mode 100644 packages/adapters/acpx-local/src/cli/index.ts create mode 100644 packages/adapters/acpx-local/src/index.ts create mode 100644 packages/adapters/acpx-local/src/server/config-schema.ts create mode 100644 packages/adapters/acpx-local/src/server/execute.test.ts create mode 100644 packages/adapters/acpx-local/src/server/execute.ts create mode 100644 packages/adapters/acpx-local/src/server/index.ts create mode 100644 packages/adapters/acpx-local/src/server/session-codec.ts create mode 100644 packages/adapters/acpx-local/src/server/skills.ts create mode 100644 packages/adapters/acpx-local/src/server/test.test.ts create mode 100644 packages/adapters/acpx-local/src/server/test.ts create mode 100644 packages/adapters/acpx-local/src/ui/build-config.ts create mode 100644 packages/adapters/acpx-local/src/ui/index.ts create mode 100644 packages/adapters/acpx-local/src/ui/parse-stdout.test.ts create mode 100644 packages/adapters/acpx-local/src/ui/parse-stdout.ts create mode 100644 packages/adapters/acpx-local/tsconfig.json create mode 100644 packages/adapters/acpx-local/vitest.config.ts create mode 100644 scripts/capture-acpx-skills-screenshots.mjs create mode 100644 server/src/__tests__/acpx-local-adapter-environment.test.ts create mode 100644 server/src/__tests__/acpx-local-execute.test.ts create mode 100644 server/src/__tests__/acpx-local-skill-sync.test.ts create mode 100644 ui/src/adapters/acpx-local/index.ts create mode 100644 ui/storybook/stories/acpx-local.stories.tsx diff --git a/Dockerfile b/Dockerfile index 35f11219..6fa685d9 100644 --- a/Dockerfile +++ b/Dockerfile @@ -22,6 +22,7 @@ COPY packages/shared/package.json packages/shared/ COPY packages/db/package.json packages/db/ COPY packages/adapter-utils/package.json packages/adapter-utils/ COPY packages/mcp-server/package.json packages/mcp-server/ +COPY packages/adapters/acpx-local/package.json packages/adapters/acpx-local/ COPY packages/adapters/claude-local/package.json packages/adapters/claude-local/ COPY packages/adapters/codex-local/package.json packages/adapters/codex-local/ COPY packages/adapters/cursor-local/package.json packages/adapters/cursor-local/ diff --git a/cli/package.json b/cli/package.json index a2d0b3bf..73ab7c24 100644 --- a/cli/package.json +++ b/cli/package.json @@ -37,6 +37,7 @@ }, "dependencies": { "@clack/prompts": "^0.10.0", + "@paperclipai/adapter-acpx-local": "workspace:*", "@paperclipai/adapter-claude-local": "workspace:*", "@paperclipai/adapter-codex-local": "workspace:*", "@paperclipai/adapter-cursor-local": "workspace:*", diff --git a/cli/src/adapters/registry.ts b/cli/src/adapters/registry.ts index e4443f55..59799cf4 100644 --- a/cli/src/adapters/registry.ts +++ b/cli/src/adapters/registry.ts @@ -1,4 +1,5 @@ import type { CLIAdapterModule } from "@paperclipai/adapter-utils"; +import { printAcpxStreamEvent } from "@paperclipai/adapter-acpx-local/cli"; import { printClaudeStreamEvent } from "@paperclipai/adapter-claude-local/cli"; import { printCodexStreamEvent } from "@paperclipai/adapter-codex-local/cli"; import { printCursorStreamEvent } from "@paperclipai/adapter-cursor-local/cli"; @@ -14,6 +15,11 @@ const claudeLocalCLIAdapter: CLIAdapterModule = { formatStdoutEvent: printClaudeStreamEvent, }; +const acpxLocalCLIAdapter: CLIAdapterModule = { + type: "acpx_local", + formatStdoutEvent: printAcpxStreamEvent, +}; + const codexLocalCLIAdapter: CLIAdapterModule = { type: "codex_local", formatStdoutEvent: printCodexStreamEvent, @@ -46,6 +52,7 @@ const openclawGatewayCLIAdapter: CLIAdapterModule = { const adaptersByType = new Map( [ + acpxLocalCLIAdapter, claudeLocalCLIAdapter, codexLocalCLIAdapter, openCodeLocalCLIAdapter, diff --git a/docs/pr-screenshots/pap-2944/skills-claude-dark.png b/docs/pr-screenshots/pap-2944/skills-claude-dark.png new file mode 100644 index 0000000000000000000000000000000000000000..35720124f43307b1c4fcd8bd001c5a458c700354 GIT binary patch literal 75911 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%0Aj93R>~rqRC_+@Mg;2eUQPsYwKd8 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 z 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 PKq2et>gTe~DWM4fe!TPe literal 0 HcmV?d00001 diff --git a/docs/pr-screenshots/pap-2944/skills-codex-dark.png b/docs/pr-screenshots/pap-2944/skills-codex-dark.png new file mode 100644 index 0000000000000000000000000000000000000000..dd396b306726bd3dfa59d595580166ed1502b53e GIT binary patch literal 75470 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ΠG-A3z|CwmD{+*`|chLyS2Og{gacE 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 P8Wa$ou6{1-oD!MEaktG3U+Q(mNtg z|Nr~DaJRJzYvz)Pd6_N(juYHimIO|i5D<8fiTmX{w_QtjTQA*h{r-CS`P)CwroWE* zz;w`dUVTje&6_u87AKXTPrkRgxV8SzkBzEIVDKqk{GN~?7;rLi9RQ0d35kd_xVnIV ziiQS5cLxY~1OzaMfz?f1uz*1aqR`QiF#@E_#iglzyTjy_nX~VkY!{s&+U> zwV=$J1ts?z`RCl&n9TlmnSh|6;KcgrOdC92>@ItIYp!+qqhr0&c6;q$@OdC8j zc9g%5n_-aXwCB08<^A$$k6r+olK>ee=Wpa<-e={~AZ@aQwI31oHJC zZIK37C&o(C3IB7e|NQuPWo7Vf{@-6-etx-p{;b4HX$zfN*?6T=+PKAZERv7$tT(o- z{PaY7{hmt;o!isS&f5F+TJ*V-pPrlyh6L6A&*!XjZ*SXL|M0xGkh!WS(oMXN|~-Xu;Ffr=oXN(ZRCHcFI8IDz#*;~r1Dz6LrnM9 zi;IiBr|Zo%PCxhXaQpM~^Z(y1zyH;=@X3jZ^}pYmvx(`)-Px3SS}Szb4gb_siSu_w%l= zn_JA|`u@?;ZsFR^>F4)lTwHXhm0Le@(~_#MuU3bx)e2nHA}S%}Ryp(Pc1Zjhg5uZV zL64m6uCM06u=G`k{Y2^de?OlucJG&{c)Rs_#X?EX3v-Rr z{kp|;E4GENk4rw*qsSoKIom8Zi?xmGL$9wyJNw1^xKc){qpg9tFH3gw*Rv9UDU=T z*G2Dtzu)iwWZ9=T^$XMZ&fS;Tyd&@KuDRCbeNK4?n^-jkK~Z;WYxb3vwFfrby-_s{ z6jdiSFK5sZ;?n44`(&KJq;B}>-QC@4_v3aJ9gQ?so4zgg_O|r%^X&h8IDD*Ey7>9I zx9MS_tHV+Yo!j|*XPK-l{`2T)_vPjO{uBIW7%VKd5eE5x-sgp{ejgQ&Khh()IpyS} z!be9o)@TPW>$$CZ!DE_E^u?<4`<1EpRIgwpz&yzsB&X;W8&_ahrnt6#O7s( zx;->FKKS{4e00=%uGLn}E%R)v%dV}7{Q2qW=J~QV6$MvT1m51Be}8B3^J{CPe|NS{ zDO(-BK5nU(==Lw!JG1t0Ogfr%ZOzQu)mr~g>^|1;buy2~`{6{K|k^hT4RyQS$seyY!}zu#`>cOHz~l(I5pWzf%0PtX4N z{QP|V&!^Mx*Z;TW+?IKH*%7Bt8@_ItWuCvU=;tQq2hrQ}43BX|G?-ri6;y&h zpC7vMU&Ga9-mSa4%h$*6&wHmM+7Z0mFOc_NyLsQge1)IEo5BRa705j1zibgIA`|Y* z*;ajdaFCg6Rin@Q%9lk2N!^j_)}}+s%<5e%Q7R%WoWg2;b1bIo#cq1yx#4Ki@xEM$ zv^c0pRd#COn5gW&ukP0dVD5*$2{k|Lg1PD+`YGN}C_3PGaq6 z=a-AwRif!NMPt?9u8xk56Q7qe=zQ|Iv%miTsj1r2UT;4rsO;ABAcPW2 zQw8g{tPWp4&!SK%Zcjz0u==(*mFMT?S{Fa_d39waC`4_U*Zcq#8y&LNWit#C*GxbA z@$qqan~Diqp<3sU-QQLE`rX~#JTBd0x=BYm;^O~(czBpoSS@B($;!ODy9|?$)%^MK zajJH>guGsi#rgJYpG)80+dJDl-$+0+XvvDe#ZjOT(%-*fT89nu`~Cmz7Ir+DtmMk| zsCWIzbMx*0Uk#7n`|Vb?=VZ0Bv(58wZON2;wso?)f7xs!|9LhS|4lp9+Ihd~_1gS> zKhqAk@qSB*ulu>Q(kytHPx|?JUt^NC=iNQSBB~XlQ2R6M#ys2VsI6J9QtH3iP)HQG(4_S)wzu)a#Kp;?`O~LkN3&m?6+c>Z& z`hXd+I|>rl$L;MB)i%qxpzt~5^|iGtuYY_KU;p>(%jNTT=@#DJmTUj-hw}MJCnNPr zUDxwU8z!+VEI%Pm@hwwTyAmsaIwKuWoJ4zJB0nB?l<;u&Bo}=?eW?<}>rrnRSnk_vhc) zvGKOa?{9CbKc6*!e`ja1T+k2Q=xsX8QzF9G#hg5_e*eE+_5bU%S`rWcJKwo#k!$xd z|M~M=svaI#z-9bg&N}kUX4kh2+RoZ#{S?ivbikx-kYKNYl zn0Pq*@$nu>=cU(qHovI(`Dv;~;G-`uFK1s{vrwnz`@7g{t*v#RPO66mJUVi)fst9~ z`mvRfo7HAdY+M_?y-(J9+FZY@CShwL{{H^XUy%2H&u6}eGc#^&$qasdbB1NH+V1|w z^Y;JmfZ~KR4^*(6zv7|n-Z#f6)vHPG;>Q~slQn~uY*1Hdt^070UG1-1w^;7KKR?e| zczvCb4)TA-#YL&7r%kk^X+Om4)6plSsT3k+>48gb;Awf z_SfzG$@pqR;^8w#FU>Sg|E9wyz1(l^s|yR8CDS%p7C$@EFMmJJ_~!YTm8Umxl@fzvbJLa;9p9&hWgxE>`#Y z)f0J)H#&cO`FcIxf4<${Gc%1-t}DCuE%BQ>>tj#Mj)I3bH>dN{&6{8QO>(Kl7B?3r_!F>+Ii;yQJ&DJQax-`(A9UivEJko{{{ zKK-C29*s<_XJU7(NdEufF#q+SsgGgsGWhpw7pTV3{A(xT*r z!0aiFESy3Xm-RnAJL{c0=Q1zP`#U=?hd2JcwA6dcPygkqjqfy@4M34&KJMGzu&$-`Th0v@|VSRqo%w(J7aJ4_e~RL@~b}T zku**_J*{`@r_$}4&(1b4_9*DNc*XpF&1BVmJ?6T?f`StjK&_Ee9Gqzn)^5M2bVIxpN2 zwl<3A``g>!@0Q>H`)c+2Gk;q$+t%ki%aLe(YLa=W!tcVynWNI!DZkt^%sYrlr>?vQ;2s$$tJ7CPk4pYXnBTFSfs zPv=-Xm~&!R>1&C99}e^1jGXhp;I)&i#RP_$cXuqk&U#PR+j_i5)_Pj8ux<6Xoa^i6 z-ahiiw@>M}qV%1jxhD)5XULqJIq~=R_p{TVpPhaDK98i4!0gM*d|#VsmocWN_~fO# ze|dHF_1o?DfDix>GgA2ebnQ2 zWL#Wi|Nl?%!6w$aOX~}Neo8f-pyDZ1o$~b5)J~0QtKZEs%??WvI_#1|nxPII+pP6S2rdF-i*T&HWu*ygF)q|C(~Z5urBBH*gwZE zA*Gc|^o+gLBDI)hK9ZZS=SyE2WXs`pe&H=M zCcSv~&3@6of4{OXZGFo1VRzYEDT{&!kB)Y?^T}rIeAk>?r{|rvct$4I{wYc;B{qww zZHt*&{OZiL%`UnoRbO841O)znv-y0-qm@BRtDes-*Ju}d`FGC--`Qq!L=qZWPFC3- z{d#zN-d&^F6N8y~Cj4Ca$ZxjUS)0?>%4YxT*58+~{KoZ-#VnsDoH?`Mrv8@1cXxL7 zJlQ&DojRLsQJ#i zQsw=Bx3}v%r!V!In$(bx_D<$lCv)-R*PoxCFMoOI=$-o(k(*Ln?9RK*vntJc z9&B0lWySM5Tw*#F)!%Z`Tj!Wf$N}|grf3G6WnVk<+TP^V-QC+eKh9YqVVvgEu>C}l z^VU0S?79uawlq(rnc(SGF~k@_Vx93&Aq=m@07hzoo~Ex z{cJ_cnbmd&_pP6F+qw9D=Ak8(5xYt| zCsX!=ztzt*gO}}?yPQKN-NfTx4rAAro14>@dz?FXppxbM{5NeUVyYaP z?rzVQXXh-O^=a$gv+wWieLcq_`B=}h?N8a%)x4(ZWcp+~tQ(cjLR-`_HCad>>~RDrymW#*Rur^naL zv?^WobXWHEO{u5n^lrSo{^>;B`6BHBKR-R~m$7u(S+}G6sn_POudXg;k^ND#LZ$xG zN%cAFKi1#e_OP<=*uDO5^F##&1uHc*7`j`ep2v2G=|nuRJox41<@z5F*|VB0i=G&` z2F8a^5SncF>xFW0ztZ;IR;F23PAu`AcWRO<_f?Pe-)od^&xoHRWW>35${W4-eV_pr z$7Z(L4+q)f#JyszLRW=6+Z8YM%#=a6;>^-*A+ozmU%Oo}-Tq)vMo!)L>z0^XcQ` ziQi2B zoU4aaN{@mW#5iTQ=iQxUS-ebAFJ{MvXxnQsQoc8oyC)rgQ?Gc~o5MIyoGtmuiHXnl zolQM8rSSB2md9USUXHGt=>Mjk)n(?C19x_p=bzed^XAr8?V~|V{ny1W83=<)%-5%; zYFpPk<Fa9~C!C*e?_W4W_mBU-z~CPr9-iJAvCjL2=h|m|cbwaJ zem?5fXWF@MmT&qc{nnUGyZ-twv^@Rcald_)-~Qy|eA^AbE&a-PPsi8A#pMa>!r2L( zEqymPr_Y}CTsnV`<0;vX``_%govCGLYF-@q^6~M0X_JhCCnp4-uUT>VmU;22@b&Y) zKCvo&<#KIP%)~WOTeEnstc~6tu`y|y_LD6c7Y|+MK3V$g|D6w?zTc}pf2ZiA+cl%_ zGHREvt&6=~#G3F~*etpT#nyWlKJk= z&T}7A_DJcq^UH6GS(^OGCc1x*`@-9IPG%nKkvvyl{aa^(#Pl5jf6bzAl>PlxDwWV? znftJ&YclJUQ!Dq*Zr@w=)yTfLE~r~vf8Eoh|4U{{nJzaw^RkDXU+%_#fzv1NG@mVc z8*H3#|H;g^Y0KlyUjF&{d9U90H#aw*t1sMB{M_$%QhR-!bTOzj1rOww-1z_W#Abtx zo&Q$$ODagm?<{Inx_6+F+1E&MOUn6qf6toVS4kH5?6F7W`x)2ePmV3$aace#HJGDU zP`PdMg7268?Pn$#{XF}*FVgMRm6g7k*Ng7%@2YXVqqMX3=hNv|dT(#dc7OIn(`mP6 z;bohwZPQ-oMfm(YE?;j@ylCahisN0P-6FZ$I#>DxS*lDHUZPnT%&C5H=U;`Lg^!Qr z$ef<~hn-)p=EH-7cXyY6e{r#Sh0l(qm$Kg-yRtn${`2c#ua#3){{HeZ`Pt=dxzXF} zb!2u~?4GCNoJ{_)rA^_LC4{azEfIm3Tn%}*c0IcM|kN8L2YU3@P8UCiGP4-fzP z`Z{>iws`_i!!G?hGt+owX|Y<9B`8B&TH^W4DWh*u%E?KU`%b-4`11b#{7Kf1clX7A z-%fvi596#RQazFUShQ!_F@BdwNmk<2=%p<|8IIZPzFnCrXPA}1?Jj~@E z=clY&TQW5d8t%!zzwgP($<=<&jMuLGt^4^@{8RtaU7HPCBjd{zm5e7doaK+#y>9Qb zNFaUZsq#9#Mzw!|E~cFwUv4k)6n?%r<;}X--9`e&X=i+An^nd=%n8`9`r*f~f(I-8 z?S3Aqt9Wr?VbD^qnY-&P13lIFZ`-S=S?~S-?|0s1fh8vo9Pg9e95c}<@leaO*F}Zf z`k!CQG>+COes;#?J`*cfz{Vw?PF^!uIj_Pj=Z3-Q(#87c|F0A2+Lm|sRGe{mNwre$ zB(35nClYu5`?!APFFpx_18b~vx4ob5V>+9yU&3%v<>zNMIk&dF{C>Z_{?QT6&&=;j zUS8U$u)TfS>Z(6y&F{}hohdIg+xzUzTT@!!e%A5xIluZ%`y8(qS5^jh3aQ>%b>ZS- z_vboirf3FByt}zsJzdPAH>q#_EYs{wb1gT_y?ne=IQ{9Vsn1FpK*L<8okSBR1~}|8 zerX=QE++1>{=KT#y2c6DyH56IUt6R2)8c<6zh|3K^80&xJLSuM@yeKbPOh8T`PuJ^ z+v>2jXZABKtGKZ#)jQsJ;Q5y<%Lz@@4qJ0#;({;QN=i!lvY`#G|7yR#yStdn zt3WkH$mxvf0sW@e*Vq65dObe<+#JQHR{w?9=&SqB+f)1d+v@fEUZu~{4qq2=W66@2 zfBbjGeSGP%ae9aMmb$`iox-=%&(E`667X$S=hpMQ$Itxx`}?Lv=A|W^Pv%{EBhI%W zdVAi)sJF)4Tjm6n-Put%cl)z%&9&+OicLMiGkcYsn(!&S3;P{GBN~E&Ltze2;F{1x z@!PkyX6wi7Ncj6aW^YyL;WplD+|Taqtxi8T=V5+FaNM4X!q3mnUi)11=Ela_-``k` zo;I`dhpmsR{r)a?`^P9Eh9pB}G~ zb9J_Pe$>L;_xJWL_nZ6a*Oc|;i}se!`(pb#J+kd@rO=7nAL7fuy}3D6JN(nRP5(C5 zKXvwZi8EQn(B0C<$jo*@l~-7e$99i|VbT)c+1rYqp5lq{fA{6(U&9Pjo{$1qloxRoOdkUO*k+t^VuD7XQoOK!)Rq+$A0KfFsce`h zWBk0qbB@Kv;w5_p|LpnT`JFGZbHP0O`hNuv4}C1Sy)Cz7J!rH*`-=gnaQ>WD`QyXF z=ZDol>Da|pTt73{`umfUlLHsIB;Nh}>}>SDn##27dA5a*j=Z_K`Twui`tzPnNIo61 zHp(>Z%#3HP`~Uq~JyR!YOUBBerC#&xY8#nYe<+wL+yDEKy#36brQYI~9vo<7o^6(U z>i8PTlhKcl%h#`o-@k9Z`H4fV+&?=&LlSe9_y2r0TS(PwhQFfNk*E#7-`&~i?DL30 zBVvQX?yEjO@0Q<>-CqY9lrOv8b8)fzX6t=_zeR8E`1$#{_59Rx@Av&)Cppiq_E&WN z-l-;;LFczs)~Z{5KR0<_`d^*X8|?j=Dy7*vuK2DFTJD$Is#R9LzwYm*)YIRt=$4qh ziT`<_xaju|fr<5?S=AMlpU;|mPt{7@x#;d3%i@kBU+%3@ch~Q|wBqH$HeTs(ll|>B zHq9%Z{o~_t`T8rXLSMgRGI(j8b!Elgs;`TVd#Yz1YT@k3ys~2ASDrtU%j~w!GR=;< zlAdD+8w=2%q~bZLJdQCj%# zqtnjn7Z(=Jd9OV2)4iQlUtdK`-&OiLYF&qQ%83a^si!9Rb;^AC$9WhujIufH?4u){ zhgqJS+*kWMYF&au$UMtpwW%jTjk6w!i)Z$`c8lfB>=GB#3`)7PqwwwR?dl=LVhNzR zl|3Kb6qdKwDCP>Ko^09kR9MaDg!8N3!|nX)U#98B&f@%0@ZiqDdA8Lj{JyQW2zHxM zc&@$T{j`m|d_qk!ocFnI1izoF9u=mskJqyJ$U4ri3}+ONE)lEoYcKuxkTduAS4{rMLYV~@LD<#FCsoH05_xsi2wNB9$+3J|(8i>r5gU_!W{tj*eBcEKFRj*X~_;t4~zCmYQ9p&x3B7z%=q;5bb6Y^3BMA%(-ns} zd6x+t4O=R?%>4b!e}8|6^se9*^vK9+DuAv zUOT<*Js`7!ZS&?EpL!O~ZRHaER3);pTudk8z`cc@OV-5fEV4}ZP+BCBy;G~jMfp@- zn$1_MU3YVob|1+2dGF%6t6yv;{5bNUm8U@A>gw?RyH9F7rk=l^Gn4-~KYQ7xl#^Pa ztB!2mXBQV?$_DP5o@D<0t6jcsMeJ@feV&bHPfycbY@Yu<kY+e5DOMNcu@9F$qn!(FH7<$~CW_V@J+WLmI zM>gKwnjK!Ov$680!($r`$r*2*!yc}9Jcr}GX*xriuEfdoqK?n$%$t^5$gNSYJbz36 zU)=MTuWet)Oq+cDyzutziu1p1>0SHrsCYcfzm3N#vOc-@%cUk)5n=+AFVmGp+w4Ob%fRG_dgv|)^CkI zY%wu$r(aONlxf#z**8qzHc3i8N}qn6pZD{W=eJu7=L98o)_58+c0XQuq*J*1?+$^9 z&wchYidCwu5WO(JTh4aZ(_Ky7d@Yjx@^jmtE!yWjUGHPAFaLwT-|s*FJ-g(f$1b%m z)jv)xsZ080Ym-{Hz*R1KV-oA!PJX)|4f*%)*Z-eub8|zYv(N(1=4q?q(FN za<3*<#WO$Q%u)gxip)Wj?*^o!j%?aYT9(YgB%HnU&mTwF2FvN)~n<&&Mc z!eU1%l7yBjR-F{7zp0bL5SJSzsd* ztCV@3&-tEpWewIB-IydzG6X)GF!r$i{F$n(+2q_YPh+apu7>)5KbPNTDS6K)W8siK zvGy$6^5?mKYi&M@Oq}$uT;cYqW8Xghk1J4mWiU_IC;j^Mc~3)g1kN4W;CO9athfC2 z;)UPb9(;KA_OR5(a?or=@LAD4dDZR4VKP@`IQP7aP&zo{$m=KPh!MhB)nd@@ne zQ!VjrhFooo)t6_FP<5$$0U?x26PFD7r`D?TE3{zL%64#P`<9P4izPg2{($&=Oa_~=! zmwBtxw77e_1ZP*`_RpsNU1gVYwil;tne*4f$B5t3&m!T?{n+9cMKc87GR?GSUu#+Z z!R3AA@5A@C*lrjxpSUkr#dY|B#OO}rhEEiCBjIffwHE(n2x*gGn&v=|;`MC9H zXXfw4Iup+8t(TXY*1z2>ewob4v}bdo6b57S2ENU55F1zx?uQ zNB(1PuP4p>A!K@8$!IBO^~Tr}+pomgEPvj8XHL;F9S8ePF45)delA-2`mniS`t+6C zFO)BzecI&x-tTeiEkw5;Y}Wl5FaoSo&j)#muVxUq5Z%T-2gEPnT!&S@X^IpcLv=yd1|u7Y5R5dIgj z6D418UaU>|K5<Otb&K;jysPwe+NwuunC7ZS zy}0JLIda81gEMIhC+3Jl5GCNB?|S*|72W+2E2dmWxx){f@Bvrc>+NB;eT~ zEZOsX$KOAn&;Qk*c-NQjVZic_C1su*Cu8PRx7RwV-xJBY!CmsYa{Wx^dkV(0d);ET z)Q5WTo)S^1%>NX4AT3cU-ul+Osq2|LznkV4Pg-dC@2=dYYjNq`*4#TI)}80&bGjt* z_T$%&hpOlICT!DUUZPOu(vkZtN2L1Z^?u{ZX}ZsT>Lj0WUmBiM37S}%?@_jMQtics z&g|7{OO)-JPS`O1vzn4}V`Z@VbBW(qRM=7@&zJcv%>44w(#I8#rOy^EE!pl>CnJ9D+>D!Y#SewsQa?^u&uORq=Ctjc&0BYx zo|zNyK*Ddn-QK5GM-ODCo(?_4`(*R!*X?cVw{yOId3ia1Y4W*up{v8rp1Jw?v6IU@ zd(c8I=lYI$dVkscv@ZYuP`Y;I@O~GWOh<>d~{sC{>-bSs3faXa~>`WPq#W)H|vzp zOP?D{+2S(J?r)wzGB@=BDkI^V@t@YqN;aa>1*Z@*r3x0B5_bDPiQ zWxi_<2>jsuU$XM$l1(4a9_98kOgge)?w8t3w$h^X<9FloI&PohkAKg)%4&_rbiLR& z{}x@hJze&!Vas>@wY(p%MLrSOea%IGT4j~rVYb45(CIP>z97t zx@Z>9J}KRx_>*b$woXqYw+?ytCtFy##V#=17CKV>uz^}Rl4q(6Vlvuy|d<(I!XQe$!csf=;f6%FG9jQOi7{dAiAC7xF|R_TkL zFiJhOA#P690*ja193xodrM@{A|J06d2(Es%_*3Nm^tq>txSo7IQnZKn|HI?6{+ss| zueJPeV-ib3n%|p}d9k0YqJ=ZwE}b1VlUe!0?i5S=+%xWx4fA8;>`iL+`u=EoR!<4!E!*!q+wAuC{N?-ySJpCFmfCOEeEDueYo`5Nn_~I7>bFGx zT}(as&S`Jc3EyO|egv7uvTiRH1$Q z`tMBns^64-K_kSrmx|AC+F7yi^P`gj?+t}d+%pWfy1_4*=BT)C;^)Zf8`t}`{j{2( zv;U8by?@Dc*?V3&Zuh=E(Kxq0@Wdvj3}ata?*gq;uVdF&PII23@bH_?<=;CU4HetZ zYyVa({-Ez8lVs*WaeI>Kxj+frdBmEj{=0)@!{wiO$=4aL89lESrDnC6r z=@P$9Yre!k{nYerdG8C;QuVbztPiXfo%dz)>DRk{SI$1tBRP5IiW}OW76pQq0ZplA z=aC55Q&AYa>*4A1`_!LbT^-Imli61B^~wpHmzVqJf1m&6eg69GfeY2ckF**bj?60N z);M>ZU&=(I_}Q5+i~dYs{PM>oX^X-~EuGg&m{y1u%$xmB>F)YPuHCm{*)R8~cuumY zzxDiedfgVq<=nSdmA}9D<@p)=wHvo{8uql^+#VIXDW&uC({CyJ%v!_0B;91%nss$k zzDKgvsWWG67`~dN!*}B(F=fA$b zez{4Ox^Q3b#^mE=FD@Kp@#~vY^Yhcq^3rFACoKK3tJSpK@GRfQXAVzP&-qWZzj=2~ z*&M4n@A8%9o|38}*kxnmx7d>eJKH zUux;bJ>6gN6E+sG$KuHJ%byp#KNtQxxW@gH?(TwzhZei{e~RJ~iQQGQaeYmhaq_Vq z(3EP-T#tpyWp8dgQ?Z)csS&v7LjBj$>1on;mBrkTcT35BUdVFry3O5~U3q63Kbpt7 z^~qS4ya+g5>i73RBlDNGmo}h9t7m7K&ikz5RQ~?n-IDAVQ5(gc*-x?B&Ux4U*M(&k zn=>vdJ#Vd7lixi5TGP0GZpJshy_c9+xh~A#SNnULsF0AFY1}P`=aY2bf9p?-bT?zF&7PO4 zUvW?AG)G~yEvwkspMA4TvxO?o$bH$B9$9#8y6a}~ygNG%rq#cC@b-?i%$7A@?wPG8UY{N&{3l9xgEGR`!nxARCQb%od2 z#cfJI@8_51`sRCGNA9+m?eWhz<`^U%y16-hruyvcKR-UQOp`ILnODGIeBhsy zVNy%&Wc9~Q-12;T3}OIQ*)+S=k)E%fA+d{3aLhjwYPuepHRf9b*Aj{ zGT%M%5gPM#=e$@MyL;R1DKZQ)`Fm97hR?WtoHJX&itW>}!fm~==bwH0&%aCedL`GlDL-2lCYtm+n;iK)-%|Qn_N@9(H=n-F zJ*0Rh;uUEAxp7#$l6c@8|({;OP@*z<#c3nKG!o0!a*@M-S9M(^))2fy7dlLL~Mey>z zzan=9FI9K^FS%ZHcmA}#_x$#M9F}+ax&8h1)l;_R*s)&e%M;&TT`g{F{0r0)pZC7D_QcQsP^mC@Gs()iTVHb zPjL)yuKW~oex7Y@E?1Lqt;qTM$luH)q<9f4|>HuUoxo@47zWw=(8= zcgpYAy65*>NpCiKI?=6H%5a|etl3XPR)w70Ja3R98+xx|> zUOy8*{Y_tmIn&tq`3t4%7jsTeeRRX+Tk7673fG!q4n9}R*WM=T&RTscGX3|j*Xwn| zW2Z2$&$_zmnOlt6y{YHg=e$?gBe>-4|4rwlr!D@z{eIo)na0bnzY$j`(>vL|xnhr? z&h^R(<@al^7q_+K+9`TY$}8V)#!;PC%2Q-_HRsj*Z#DB?R!>vf2B`seR9@;gHRJyM z^z(W97ypJXYO_F>97P=}*gZ z@6fM*@TlyiLhOO$<9()?myU4lSXr{lX1)Cq^R!PJZdd%@eqduvZPG92d6zA=cdnlq zz3z4C-2K9z?}*f`%T3-UBKGKL_w%2tb?v>k%yz$dVW08L-rmD?-*tj_Y@HlxX3kqQ zyY1fc|Jl}i-yK=*{QL0kirQ&!)4s)a91rcdtrb#Xdm_^0_6PZY!7`_l-v>9_vx zyWP1t|6l!uhb~4bsekL;So`KUbCleZx>c3-K5{*z0eRN`PXzbJ-sG^xl3xee(hua5^+qUSdK-kG?m;{-FtMj+d6;ESDQeIJyl<`&dxGjoBqC1PkT$w?QOYdXPLGfJK(>wtK*L|*8!zZ z|L53Nmpwk#D`}keM?GAqtD|FM^6@^Qv?X9h=!`DZhKepJt|J*#=-wzHlzdk8zU6ylyU+uN-=YM{F zetm82X0YK-%~}VP7QX!T^|fvFH=URr1yi*`=RCf?CUSGpQ!l218ygZ2w{nMX%elFy z^7E|aRwXYE#2@=?9=OP5XVFuws4Xwf&Nkow_uFl!R<5a9p{IPx{{QepKG|9O``f9h+P7!so}8rWJzX#N#)iaIAuA<3ca|RM5M;U4 z#LE3iCwZ26K4_KKF&WDu(BL}H6usDAcgyd~n&m|N`tmY(iO0c|&1q-5L^LnW&foWP zn~T?}{r`SxFWg@I{9NE-x2Ic+pPhMmeZ4&Y;r9BM_aFR>(E+Ulo_JvaXf>Nz?yWE9 ztl#_0xBL6z;^LI3V>WevDlRT^HO;H+N7gh%kJv}{BTAjP1tC(?T@pHYn zJr=?dpsfQ+a$lqqCI%FLdvnu!y52XqJ z6x51XBWG80qQdA~kEAh|h=#+ql+M@J*PE~3Tle?Zg@w+-DjpY>cnaV0;hbf<$kxZQ z_?gcn1I5WMv5QX*Oj*}>sh|yRM17$Ye9W!OuH-B zFuj~^;90kfYpzzPme!e`^OM#6A06rJ+;=45)g`r9Ys2STGA~~eO1rVEG`sljr%kD+ zR~$F;ajAd5_q)d`h?g$8#m>48n&T8rEWM$l9kxb6bauMuk3G{q^W~^++6!8Dr}U^- zuThLscFEbRtHZ zH>btz_f6aCZy&xNYUQ?(HcWCkKi#{ zuo}SZ;Y~SzpV)mhKilQ&EJ|Np*;)L2 z*WJil3I9NwRji`DE}Xe6xu>&xncms>=enETBp!3`5;?iAxn!nMss_jG#6#&U;_E%_ zK-(@Rt1pk)Q}#A$)sc|dD=!<_)&2Q#Zl|jEv@_R_?0c3_kab{ZOk1R>+pKA~!y8_w zT?A#6N9~~ftT(n~3Y+?zTJr4SOyl&rKOc|JHqQ?-Qe{~ewRKh0)~s(wy2bVFik@`r z+%7y*xAxbUJbR&SF;f#CmE7A?8DIPL>Z_}(|9`uk4_Y%=-cnZebZYpuwbAYiul{Q_ zu>AA;{r=^C-m%kDGTybN?$q13EL7Ed+LoA&Gm~^qo9bH@K4N*BqL6!Q3y+9)*qLHh z&ZR0r&)gn&Zki_?(5Cy`DEF30(e9n^X1R)Jg`9{}wq8)>_a=LZV-aXmLaax+>zSw- z@f_d{%q&j(8O1nRrzmaDzwhV3``bKg=M}&0xwnsPP6;%6b!n;h`uP2I@9*v9l{TB8 z2r5DA=V^zp167NyT%rH6pAT5k_q8|9O8EM!&4%h~z+6kVrl zg`TohHNE=%UNvapyK@_lVta7v(igWDxpD_*FIBS5yR+l{zTbTzo`PEg7rQ+ZyS$~V z#=7D|0#m^?ON%@8VoPpP&AytST_T!?OeU-QFEfz7+UjI}zV6FK z_j9j%R|fXW+waT1zHU#~sm+?@pNq7%D7*FSD17WTMI%rvd|gh~MNm0+Nz5?GMasVH z&5gLdRf2EgtKV*wGR^vNvmu9ll1+5~-UQGlq>dde3uk9^o+vJSd&^X7PT}KYTjw#Z zT9Xo$_O5ch&O9aQ+y7%vx@o2DnY(fBnfl~UrH}RE-`&|MeD7$k4WmWWmW(|63tz1^ zuD875@%UlPnh6%`cYrrBZiH`z_jn9W9-9X@)kYJ@#zr6jwZ@2U7|9o`U z4ypZo);xdz-)}!ZKbM?mQK-~yQTb_!=&E(``}fuU{^mVh&(eL9$TZW;ODgAI^2^yo ztPEPJ=-gJ}_w8=^{o4P3zhB$DG3~6>w5?@tqr5?_U#EVi4JW!^ALh63c~CUZYs0h zF7uJp{$g`62ebk%{rtQ=m7k*)_O2>AIZ5^WTYE!IRnoOhOmc61xwp4Ebafc7xZWIa!{Gc}tpiH>E0%gskK0+K8nz~a z$A7NXRW7ELK})s5*UkCL6L3`Z@3Zss>pwp`n|!Qi;kV!KcE7*3ueSQs6wQC}5@tCO zMh2zHU=PIAae<7=yu9oqs1vMQs~ffDM5U<7(TDo`ek^imWD3#WUHW=k(Niz4DQ|CY zH$Q)GZ}s=j=k4`lb{JG{@|$aQdYZ2BW66X~>tc7Gn`5~-V4;)eBo)P5vbI%ImjC+x z{{D(UWwx@nw~m_B{{Hqghrjg#m#Eef&&kX3?(RxIH>a?An%R}r;rgYouAKR~`Mllk z;^%$qZ-T1q>+$uen_N1Do}QYz+PR(2ONsp!mhzVrFn+3v>oDxc4d-kvuz_x8$Q_5Yvie|%7^Zqba?414>0etp^O z183Sl=^u9O5?L9!d6}et>zrG5zdue5kJF6b_h)|nzn9+*2`am7m}-=M?#{N{=<{dw zK)K1^g)!oZYs$L%J`v5JmzS2FbY)q7b94Ib^FmVlf4y2QYh8AvU%vi81LOR(W$UHt5f^Y(9lJ|36%on@lv272O1y{;K)*=H?>T?x06%4~^4}r0`Z zfT9yi@EP|rGYpfDbR0bJ^z?Mg?t|N&ZgD!+Bbgcf^wiYt`S;3H^ zF5)^7A1=Df@7(%)vcKKK{Pl5rzrDNbE#))MX6NU~Wy^WDOmJNvxw(xkI0e*1x_(oL z6|^ivZN5dJQoZMuEi>Js&I>)g<1^D}EtJxWOl+}=Im@v&a-E9zx^vew@&EOa)GouumR z_Q_|q+1i2*%rpMHMcl)tOP*XM!#9URCYR{1c1&7{?C(u|+swntoFzpr)_p0;Mc z^D@T?o7>CZ-b&rM?rZ7q<#z0RG6u{aA06H7eym@9K7-7o(5=thcP>d)S||DW)#~-P z&IipgVHOFWyWU9mql-)a?QL(j<=&RFtxB;~R9bYsKI}7wtS6ur8l*>x4P zW-V~Chkf!f9^=NnolHN?UGqAweSLLx_M=0bO+ib&0=d$e9@V9F2 zft_=G1M0=>CxBW-oN}Pzan4fj>9eBa0_T_Xsc#c(Fity@@i%|Z60HpWLJR{4v{_&B{+rFLWUuD35PE?#o>%F5t&e))OD?DDl=F1}vB-%oU|%)2=~TCd;l z|L><*{`S^Z&?;4?X|~m6ryk5U&yU+#^mK+{a)!#wTmS42@B8xda=VOQ)H2(ZK}(a$ z>wmpmevZ>-`_9`(pM#39Pc9-2u5lL6em!3oyBjnc)U&hVqY|q_v1rM;IhKoEIycq) z{8ab%*TiW3tNs$w>6f>!`~EIA`12AqAHFlQOtpVr%iWgp_4fAs=clLluQ+-5 z@^b&*T6I-NyM$+~Rd?S2TK<>%kd0SrhM`(%`pHR0=Pk>)xCnGs$J>Qnr?1VnsVr(R zUasd`)+?yYCf)w_{))iGDxQ;MtV%jASykS)RE>UoZ*O%DZ}GfCbBr>st_nRlNmcU4 z%jNU$JhMqZC!^*!MMH3XlD&~y@v}4FgHvpD@3MG5IhyqD{~3p?t3s9k=oUUY(#kEa z#yYX1V{wS)%mu~I cxy1MG>ionBll}o**uE_0^GVMBYdw>1^S65e0KHib8*70ki zZnW7mpT5+c^Zv_j_nmF_XKncUd)4pvx}RBm;$_XWHGVge|4fgs`}y7U%2n^NE2+M22I@wQ6h^JT`oX^R6> zQ@eR33=|H`bnln@yZO9ba@d*rLoJ;0^?wXi^NiL$UlsVqlsomV?)76EW9+;Bz1#g> z$~@1e>`lb>mzhBan^9|@uP$f5y}fPxH#&cB>fhSC`iVKOuB>D^{qytl;BTP4>vOG2+xTRq9u=Kj zdUsc;@|sVRLRW|Fw7tEnG@EPcnVMrglE?dGjjwt{pPgl@=^i}q?cLqqugBNRYKQ5l zotSIA{dtb&WTA79kN4XbJUAd<|7YU2{hv;0U)y|~Epc;!T;i`UFHMTRytrsmbYgx4GlKD!ij-q(}P7Q_ES z!7l$ggO~eRzW4g-b9YB!GmoTZ(2`$YU(a6jRDFKUr_=iT1KLXeHBC`cnb{TA8u7c- zne*0l?;krX>i^XoYT>NiJ1sqP(r3HqeQDLt&PXPG_^kQgYOZZHs1yZlgHG!*7(-{{+6p2@I_RRv*`Th&5EDomoexFan1W& z4qAe1mUH97G3op#r>Ey1?~^?}UB6$__}L^??|CocuXlBHobYyGj8F-AA(Sz3`uQ_6 zjc1!?m;L_DK&guOy&2x<&w)j{P^{H{cP?$dHcFMyUXA2sr`3Z{7$9g2^iihWi z92Yi#jRoA@wKZ&QlxFZUov1A@&fEXbag(zsXplTN&vv)hR4vcRYM{eNdZo>+N?uH` zsr)p@viRIg{2?v>s zH`V_B23oaYoaXcG&CUB2k9!@P*$h8jSm>;CdfnN3yUY8<|9!dapZ7L?SBa*s&m0Rw z{Vmt8tPEWpHpgp6!NWrr7rW1V`043s-TM)jV|Es8%t}2y?W=sD_cWcKcgyeJ6g z`RQr!5|5Afs^4#%I_I@%!U2Y|3;gzf9%O$#-Ye~Xc$!Y+B>Vb*udc54pJCA0UKVzL zPo**c^>wk?;C7b%G6tPbhgJqIX50DYy#0R@{*`RUd!@IBtPJ9b-&-}c=Ie`#%59$e z@7Mj-J-8$Jc;AwhzrMZ}?lew6=kxCFzS`YSx!Qel>Q;GeN(GHWo@1S;<#`k|$@OA! ze@E72HQ!$!4)aU;|El`^cDw&Po12T>`5&2l2CV^=1RaQ%2C8(YX#_5c+gr8d@}XAl z`PSv@($CMcIW03ok-42;{@wlk|96$Xw)^+v@sE#>h0pm)i|IzW+<2zCBgZs@f$!H?uq{^G(OzIAvovqgtIFg z%3fY-eQ@M($jYEVb2W=VmtI-xZ@<32KAG&2p*2&@BlzM|)uUaa#phajc2#}Na#EZ8 zae|Yo;)IhL%EA82Zp|@BbUHotLWJ1EvwKzrE_PcRy*(}A>Z;I?u$5Ut;+``^?7zRg zJ>4`rY+jd~t<~2X9ut*J^X|;J^(KG+->`KtmXox88boi)@p1UfQEJk_lD$*!^E`{f zq$wJK9RESnR<3E!oL&ArogQD&RjMwqsc+AzoBwieZ`)YQaZjfy6x5?U8u~j@>tskt z`nfrttXH`hwqBcIm~156_2J9}iSuU;xAVVn{?yEGx8TYdhdvq08_7k>PXHs%5de%a+!8?3}b_s#WPL5zQcr^g~}# zu7gfsXb-7%?~^%s$@8?Nahl1?>qW7beAZ4XT3vY}IIUsIJfl>vX9o-zZxmgf`F8q* zI!T4yL6<-?eTO|KtMQ8K$t>LB+|D;;qGa-YYpvK_B}?MjJl*}hVxh$(LFG)30d72S*j_Z=j=PNCo!YfoJE8guoRu{4&pz)h%Tg7-jGxKDZEfqIk;uH#Jio3Ky|~X5>R8z zMJ29D`)0pY!KRdxHom)5mENJ~F8)rOA)<4r&%XIU%B=nKo%z$B~}$ z*_?v2wzz2(OZ)RZ+4{}dIHx^&a)s{o{t2~P??-NY^7Pr(mLMtT4bN|Wd3o7-dAV5B z+iw%(JQup$|NHy<NR!OF3@tr;^*g{Ma66Fs{i{{ ze7)(?*hj*tDU0UDzTBF6e%{}Qhug0-o^|Hh|M&Oz`VS8nKQBC#qkiw~Z1dn5rZ24= zbk14M(F|5QUFuu3(5dy=`T6&Em**FyDSTG!I9IyRB}Y%LY|+Y#i`~_KZJL_#CSj^O6>?jom%1;{F0h=HF#W|0YHSFZH^*Io|SsPXyZsQG0uy~xnwk`ku zxtcS-c5&8x?R@vfbn~Mt+nM+9M1wr$w1h$DlakUMp@(fel1{QS7|(Mqa_f!Snsrsq zwrU1b=I?KBIrEp@@-($5d~{_0-*2;5%6yt$Q}ODG=6QxW_Vxd^WM1Buaj{A00LpS&2;Q2YAY+GW18CuzC&$yg>FXaMc?uM&FlyzK3*z@%GduXRQRmOAa7ODk@G(C-`0QoY$c*!K04YBYWDKqo}Mn;bCcsq#H|l! z&F`~pTEi!6CGZKfgWUG#fkx&xOxu=-&Ny%Xzvk1ElR36#QHNSMId{#wY;*C|=6#3T zc$1%3#TJ4F{wu9OjS7vT_lw>8jZ#iLi2P~dQO?ROwkCXiT%U|($BxBryBPHPgiOVt!oqw^#jJ z_xJ1dYm+mstPq^I+h?ZHndi>pr%U~xMQlu(suj8_>1dZ}_BEaqyEPMcew=#!{=t1; zuSHL(xBvNMvWRAoNzRQ4n;E{@F74TrdfMnm7PC_s`SQ(@*Buq}p~qIXPL_{bbAab+O6w^1?p^ zt?iYy-u9fofA1sat_kO5-qdqF?Yzu#cj+PdE|&*Hl%U;pRh?fm_3Z){Bd_2p%qn(};gzd1L!R3|FAR&{;J-nlM{Kc$#; z(=X83I4>?PzNz^vUK`XX@W{BRdO=C(lvU}gkXz0)gi|L^zv{oiH$lYf1Ey*>N7p0|t3k#_ffxwm(Ae*XCQ__U5c*EK<= z?}_{QN93}^Qm?69-?q=OEZ&xJG3o28tJi`R8T@CPy?u1F`&#k#ijPTRZ!P~lJ3D)> zb@{y=g^N{{lpOPqbO>sPuPf<$d3pKygU#$eH$`knIJm#)U4+X#W7Y)0jVJcLzP48R zd)b>CAK%>E{PfgRY2&n>uTP}Ra(-NouLsS-RJ~*4mD-YYlndm#?J|}{IrsP7t*dx; zW+rH@zVB=^w;qYNx3)fZ*`TWQzm)5MQj%-GoUQjXotvA}>%ZSEKi)4Nzo+8kG~H;> z(MrqZQ2HA^d+Pq~syw+d`S_~P)zfS$Kdp(}T=(&)IKRAI%9AH2C&$niFE6XVzAAlsO7y(i+4=VSYkq#x z3|f+LWyQrWFE3Y~Tp7GvC;WaYXg$j;P?1{q^V3tF@>f?@hOLcC`}6Q{`|B$!CmW@n z+LU@)&Z6LeZIa8!N7>B$Q*6dg{pb&cCs463?ntd}bKbbbm}ucYAkx z`}+F-|7@$jJ-K~6M&zvLLuL2Ah;;}4e7zn&d%ev$DbVS5LKCO=GHvMi)BoY&VPU@a z_xA2iKQAYDN%6gt7s&L{UyX|4Y9Vq@9cs9(H2>hFwri<9T6dQW=-nlmfSX1=(k?Cq_R zfL$dog)EDn^xOZNG5yZ|`uWShy}w@%I;u{xH)YSs+spmut4)qxC;#_S-Kv9UXPJVI zr(>6|NjN`k9@ks{>3Xtv#ih<`&9Se)CnPv=!NKyFXJ=-XzqyepH;W;s?d1BovapKBft8_bKQ2AoeX{1R!5kG&A#ayBvt8Uq7s3weQT&z;L& zdFz@-Z_7EydEzQ7mq&|O=+Cp+`F`_kc807BTEFj?mVV+HQ0}?*IRDj^ zm7NDov#)J&d6K%AK}YG`8Pk&=A01uH;WKrrMONO*)OC`#x8+9v`ttJhRPFCSpU+<( zvvblqhSWHvjm3P{oewL~W=``M462GD20P}{O z8+KNFeDqB5;hnmyo10SqY(4z#?d|Q`^X_JKc6b;()Xw?y3H#enr z{}kK(`VfQS&o3`8_siLWdNuoMe*TC$GgUkM&5e!9u3ageCr-ODM!4J&Ed1%c{Xoo9 z*QF+zmzF%!ytLRd(yy`n*O!+e0l&Y!^_~e@^>uYs=;r4M@06XsACgPf3)$An|Nnpe zj~3q7PunH-{5jGoyf5zc|N9|#b{4D0>?jbKaMpQud6M3lzP2)l?Xa-`DbrQOv7eru z%?7)`YFGFU%;-=3_i ztEP4AX(Yvlo{9 z|M&Op?d|?kwXU9=tbTru}_>k-HS~_x)76+qWii^RW)W!*yNl#m~+xtke!$^W)Fw^S1H7k4fhX+?{Qj z?KXS4&rGMsZGsP@& z>8$(v>!ax5>%Q;q>^xh+^x@{_blvN8EMXfAtqd4AWiFotb;cR?MoU8S!<$K)4@ws0Ok)56y^v*Gdwo2UPo zo}Heqf7xvP%GuLF$Fj_u-O+KP`@Q}Bn*x<~A&g=ZCkUF_Ue@2!XTmX4)~ZA!bXCZi z8HUq!A}86^{wlv$d7O)9^V|FT|1WTC<`UI%DXls^O}8aIJ#Oh1=|?^qtiP+YCQR?{ z=;%06-w#^E?4X{ycTv~ws;{r4&GQ2Otqoe*^?CUo#YGQn3LhPDZs$|=oV29i;i1Y; zPd2)^xHQeMl2%&i1Uhsdx*}&l8mLYY-Y!pEjZ#ib5LWjy*iiQN*2&50(dX~p-CYhk zL+sz5%GW3VM(5TY)Q#J-qyGOt(80R@qPOMTG)g|ku1m3KI2}k(x)pT4X#bGe}8>l{8u+{kxTyGuh+Ka-d-c|bgo6CCNnMO}9EOfr>_Uy#O#rgO5@yJ*dG?d=ioZkO`=AB)o-DWcOb$6xa*Ei)0^*3n-FXNH1xbSQH&&uw<-S6!LD{sCO$`IUm zsGZ-w>PrTjS?(>9q$3=UPMw;n&3X9R{#VcE*Y7KPJL_vu<;7bzWp8f0y}f<9M&O}e z-zOYc9k$l%>glS=FE1`G4qECJxjAiXT!?-h_x$~!+by!LWW2kxQ?afr^L1wji*aa! z>ycGo%zw3JUt0qj!oIRHcx`?3mlqc&tNCW_4T(EuW}gijubQqm7c|cFi79|VY~ufk z7KM+RSh@3VY-oJgEv{ep<6-;yeZR6kJvq5LWM$Ep7lFpSs!3c`OP+?T3`#vWXJ_*9 zzH`}9?R>IcCqWBBKqJ-W`S)_%KwZ|ev(5iMY?nXbG{5E(XR_ZMi;Fu7lhgj)%3i;5 z%Ifg-ySBD;u6%Cb;A`qVP3QD<{q@1i`Oa#GtO!^!T{!*RoXBN9l3ea{SS?CkO!&Og z{{NrJUwx|Nes3 zn26~{MXZxQ^6cc~^tZRRx^{^qGH=Vf`|H8M=6Sxm3LZM`t@=7c!FQHPj>b1uW$o~F ze@^S~zj67@Y;*nmdwa^?->d!bfN^*8+9@iYlRiB?4H~L1daK6u`;FJJ*{dbr-`#zE zXYunnmc^hm%D2s|jH-V>7c^Gv+{Tl6d08s|rgDwjn?RFHix18_oBZs|1Ss> zEp?u2Uq8?F{f&*yX2u(eo_e{-+1KsyoUEqPYFYpBsCd7;{kDJij$V0pgS+tYvArcP zCq4b{@Mz_mo123VzP`JAd+n1MTTjomHrKCwy>|PzcXzY5Uwge~UHpE();n(x<+xoE ziu?U~{eGhjsi(z^pZnYYowE1XyA`p!w_RVIezQ}CUq)0hFMWOQ{avNnw|fuY?n!Tt zva8tk;q!U>_3``nJ+&yB!MQrKZ%gj&ZKC>db1XlLrODr%yiwUAtkT}7@bom@x%m#~ z>Su0uKH4QZ)82byzsB~t=cL=eDetggM?NimuG_;+PyF|6q z%(@LLJ|rC5y!J-VH}@84yK6UA)f~8VE`Q(8V{-4etz^#WJbT{Vd~Me4ZMyTd-Y`Aq zcdOw4#CX)(Lgm-j*Xj3Wi2JNZ$JN9tGc$oyQ5+$gO1Yw=DPDIC#yd`+I`$0c7<*A zHy&v-P)p9H=J(s}XHAwUKa!by<>X}b@2{?Q?*}dQ^6!-}Y^vjzeJyF6cH#RYRq)Av zvPQ>pZf)tTOTWC#m$N;^vgq80hlgLz*d$W@%xvCLv9kvjyZ86WSRPv4;p1ZW%RKki zmYF7*lSI8Vs;;k%zJ6wpTd!1!)!XGAR`2(G_Un_e{P*KAzg0nwfRohY>uaOkyIx;e zDQv5|Onv5T`L8!~>wbJttTny%efj)4rB)-!*%PByJpI*c_&2|*`iQ-e`sJE$H`C{> z&APEcF*az|*WhJ7mNh>NEN4z^c{@?r{nq6T@h^nkyF@x4_}dF#xH449QpyX?fTl~{*!9&M>Up{=Wv-4FN8;2-Wa_ zu0NG}^JQJ^?oazTgw=W~AODVGT_1hm^|MDujxTU*u9#*y`+LXrXO(%ji^R2G*t8yZ zE{;0#`u3@{hI4v;|9IS=eRb7QMt_sk11;%Nho3Xg=V{qKN!5Fk=goO}>z^h!ZfAQR z(8qPJq{ghMXXf%dW~B^Uz@)E zsQEnW#@TtG#Z~zlQQ1H3uH2mZ{M_8l@h4u27T?#8Z?~G?V*me-@pH##=jWgAT#|Kl z)m*F6Q+uZQ+fO^OT=I3%=V!il=|6rIWY1XteMd(}_%GfK9e?aqOn&)%0bOTu-1*fs z(0(r=Rj$KJbgWi>$+U1j?_8DUV*P9V7i-YKr+MGIs53JRU&daPR5CK;O=YaI{9@#* z*$@IcD}Ua$)k~d#?9S z7u_}N<}Sx9KOVYkz$)^uM@V<@V?4XJ5==?tZX^sa2{i{rtRKu9A`$HxIG%$voIvqWUs= zvdY;bDv94(pT639`E#1}<(=y6o7Q^Fo3=Xo{E@QB9dU1te0_aA_``F>-+gL^2ad29 ze=9vZ%e2y?vb~s>#YUKQZba?w{pa+)?OHfPdUi)veRgyPn)3Z_fI=-8_+F$QQeLQySB?DYtQ;{LVz5v_2Cv{pzm7tc)`=%`KvvD-QQ5yqZy7zAfkGjs4G7vE1uC z!k@I{=F~Tu>ABZ-Uar)AomW?ITIPgYNLA(9`A=tw2c0p=XO}uz{e1oYf1fsU&D)cw z$CqH|R$-QVYl}%6W7DGR&vxe8+V9!7_Rg|}tIp4w_1f-645yHaL4N4Dg2JK;IaYR? zI_l3fzIk4wJF!3KOvhMr3bOdCqOI z`p`_)=Q)3CVmdl1K$qoo$63gVpT2rkLFhuI(RSZO#>a2|)s5bEq0;DjQxVg>J)jnI z8ULA*at)=6yo;)Q_%^N=yt^ThS@H}|u=kdDC-&C7jh_2GCMvP2|M+V@Y28lSGnZbr z1ZEjnzLH;5?5TR;b(2qHpVzWVkHoHGmM=H7LRNfuyZ!#9)ysbSiBDU%D%$%-Oo{p1 z`}^9s#rrn3#a>>}oNezq{oS{>x6fQliIrYCW1Yd(C6A7F2Y)cM_46`!Vf`dwo8UFQ zEAIzE+Y+2^ONJs!!xrm^}`&g44X z>$P`%a&MkrWAQkFYhlyedIsp7f{*`gygOra?O~N5Nm0w+Qr=Y`Y?drajkkDEZ(W_c zXXT?!k1f`nP(Q+4?akICdFku(6$-X-I|>?Sq~DjFzT6_=P2#PDcOU(fPjad$G)_6e zc))|NZq}`h$?nz9_FSKHy69bro%W4AAs<$}oAm3)8ilRD;@3G&GiFY!57d3a@L?<0 zJf=G_b+g152;2{od9r8a-1!o`QYHqE{pZ`|>Is?MkP6x3*?%tNJlpnq!^E9-9zT5^ z->$>#pmTQs?f9pXB=#uIMr6j?t$97)$ zzd$|lSIQFcOR}yWT$@Y!IxEjjpCQ%i_-%22_4jwNS(B!%Zl3xs-?sW&$+yn8(=Yfd zEsF3zl-tQ4duN$qV0GE86(u{Trr(`#aE@^~U-Y_jyY^b0on`v^_ICZf5uX%G`A_kM zh@{3NmZM)=I`ORsm8zJAdbv~v-!&gmX?^%>DqELVdj z32*H#*PrXOt6{14^kva6D_fUvZhR?o!+P1Wl)vxqaZb4Hy(dp&`}Bed7PlSj=b3F- zdnfJ1e}^JD%Wu~ncNFD?&i)_C+I0Bv+c#|P9g%{cb@C^xdQZDCJqTQ7`k&UU>yx*i z7iWFD_tMhatv3}HHEc^d$~8%4xtzz;vYqo>Ev9E|pL6)|TZ`@UH`O=iTJ%T1t}p-f z=jUh6|0xxhxV2ww%Zi(xy?*^|u@9S}(fWLTY#sl{+|;`LuPoDzXWm}UrF{3EVBUP2 zX9kO?^iMPAG-1pN}|lhKC9!Z-BP_H|EpISXx#Nq5z7(NUVr?fK*R{Q7@yHlJVd zYtxHWp{uuLU+Jk?^mNch*f~39a{F&oxYn^Y@$X&n?f=$o+xz$1ZJ*3z7y7?Q zNzHFs&->I&vU1+Do0B8g*_r&l_;!nHmxv~l&4e78Ko`@j+OmRKHkC%dTkn0CeD2h| zGdux(yDL6Eim(5hdg{uw*B>_jevuQJ)nnuOvj4mHtu2}J^Q6_=m9vuM-Ki0gGHHtgJYH@Va~ zuXFPM{=D@O8tgwWE_M%I>XjDO=U?@L@?_-x{5kU`whBbX#SypACJqY_zCOW4Nz1R2JMDCGdac8_=V8L(_ilYObZK9=`bwW zyrOZoJhSxI*VpAimm*A5j(pe1%zkRBc6!|s(2}(*@n`=Gd(`bM)`z=HQt|xt<>lo~ zsi(89uG;8(;+sp7cEa`b@#(+I-`|^Sd0BS3fz!Ip)zg;v?&|3=l#Q998$Hdp>f4)0 zFP|^{GcUzlnq!(BR&{vJ!h~!C!@p_QGQPjNduG~KuPGXV9or}KPFT#HHAmYX=lI~TX`|_jAoH9X6NDs-)7TB!i+lI3kKFh!$201+rTI2#bsau= zJ0Jg9!MaZ*pPhM^c5ce53Pp9hGgH!*m%P5#`{CQW-S0Og&QG!y4o^DPzWkYyO(EP|`W$NeriU#&L$zqGl^tKB+xjdx~*q)z_@gm-G6>_&B%O zTQ`|=XS@F~R?j%0IA?caY1EdCgKDK=&36kXOm?%_dDu_=n1RfrqQAw_tlQXDpJ$YL z@JvZL&|bxU_U^MkGv^h*o)}Vj^*|%@%t_@FKDRI4cQ4E@#q8U^MXufJVt2b$J?Aht zuYa`S^{uVi^6owJ?P{&&=bu|Wm-n8su$qs-e48UjudR&^-d?g>yy5>ef%iW{N@m~q z@4h{}rlydq^Ke7+w6({7AC-)({aCzW_WT|GGmTn5a*OM2`M-YN`datdmgOgJvh$rV z%e`f>e(pmSN#4h`r>3*UOWLI71wQ<;1awyI6OjhjBi6f&?EidVmc78jDRkkk`Ts-5 z-Qs)eB$nUvo~Gj|vgN5=1%k*h*9pZORhI6kX4`aMhZZ)Vd>PVYPmo*OYTu3IkTm~Tt(6jEIgRAdqOcDr^R z+vN?0Cwu3dTBz#3Yi_rQ=B3r)`g{`iviB%+e167$#(TP+s>RVR(bM(ZXC=aV7dPc3 z#0TZ=JjA^Dkq%FEn{!9ex}QHaqT3dDY>AAt}fotx+CWQov_9xmCQSvr##OtUKqUG&qe24~zgkNU&VBmSA>i-g@K@VfPhS0!ZCRVJ>fN^6 zdguNmo2#wq{yX93rt&rE2VS>*I#T!i!lKtXtttnYPaeBf7*VxXd(!hYZ?YTq7X9v2 zD_*wmiD}=jtdo=T(xW^!Y@F>fM|o+n))B4+tvcNg+;45kH?_&WwuX&Ys-UCj$H(j0 z-Vw_84xRhEwes_`2KfN-Th6f((L@RZS|GEi*HoaCH<(1-nnqz%Tiy>h3!A0!scA&Rh*|#oZY$8 zujS5(mn!Ew_turPcT{e&{ade4{i$??@GZ*&ckGt&tp9!Px}HJzf@yM(rqx{P@1B0H ze#d6TPc|>j4=6q2x8?l(J$BxoKPlI>IE}a~7e&UyV zHEY!tHcgUJ&F&If^Z3rr;+O2~MWQRDw=1~k&r34;`s!G(bhVjgSNGGkhI#z+1AlF; z$rCR?)L`I4_sdVHRSfqwXN)YGAlr<8(zK@J2%g^ z`osjqEAQ_7yV&Q*^69G3`IHl$jC@hS6Ygxy7H|EstMv7+%H_X*UQex?_WES8sKrs| zt9SkDK9}ZLeBLwv+0M7|@%i=f`P%0Du9+M;lUBLsY;9pSXFGd3+umjI+DrQL;{UwK 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 S=qv*R1B0ilpUXO@geCxhGlAy- literal 0 HcmV?d00001 diff --git a/docs/pr-screenshots/pap-2944/skills-custom-light.png b/docs/pr-screenshots/pap-2944/skills-custom-light.png new file mode 100644 index 0000000000000000000000000000000000000000..ab9873a1ed13d518acf90fa2add69648a9d9142b GIT binary patch literal 89232 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 Qz`(%Z>FVdQ&MBb@0GEaktG3U+Q@)=iB z{_p=A;Nq}EeCoQU22pLMMGE&8HFfanB)A{FSN;C)Ht{2UN@ba4fg&L++*)ND%UM_$ zGtd8={d#Bdnetob4mEXK#@D}@cs4C)oyz9x*7JRq6@7hmRoQcrisz(%Z?)V(w2Ep2 zV+4pXg@Y{tBom}0(Vz-qbS5xNQ}LXnqS`b>6h!r{TC!%+rizb`R)wy1<225{x2H=~ zTQ6e6gZKOY^Vx&^{Zc+?Vb#}H6PIjqd$cxow;8kI57t1X)<5!kEFmib5`TSp$t|we zqvAPfiRd{7ovC|gnPvyQ`TO_#eR16=5l!EvUQ=IPUvFRj?oQ<9G}lQgo|n2pJ7@W* ztbAjVb)_Tey?p(jjVUK5dHfg8HA+7xv+CfK=u}J${1B zymIXI)z#^2(?G_gFibn;b9R>L%D=Pfx;GX)JmfW1E0F8kMo`p5C2F}%I>mH-(yFkv zzn;&pchfqzCUWzt@bz&!H=SQJUB&YfR}#atQ*Li>ZLRONlf0F zpru|Pzv!6%efn{|&t$uLGlROyU)v>@>vvCYZ{!lyI&!$RRg8PBy5}Sn-F&u$l{_Lp zBd;y~a+k zW*8>lt9(9}k(q7J&u6py?S5tK>wJE0ZuJ?%;|3SDW?z53Zg<|14#AJ}IaW+o_g~iF zGfUPe<-~FMdYNOB&$IJNO)-@J^!Y#|bN+w=3w%gdXOm%qO^H*`^eOuwSg{DMQAi9h!Je#b2z zE@zr0@^j`cldli&mfh~PiAji@YhBJ~?h$L`|Ep!uLxL}c6L^x#XlZ{)aMr$y9?L0^U3b|dM#SM z>cv7~oc|m2()RzK&(bCt2e|s>?f

y)G)b*L234zu)iocRBCAST#|_ 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 Cf~gq* literal 0 HcmV?d00001 diff --git a/docs/pr-screenshots/pap-2944/skills-empty-library-light.png b/docs/pr-screenshots/pap-2944/skills-empty-library-light.png new file mode 100644 index 0000000000000000000000000000000000000000..80fa0636bcdde0212600d7fe8ab9e110cb863aa3 GIT binary patch literal 41503 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 literal 0 HcmV?d00001 diff --git a/docs/pr-screenshots/pap-2944/skills-loading-dark.png b/docs/pr-screenshots/pap-2944/skills-loading-dark.png new file mode 100644 index 0000000000000000000000000000000000000000..93c58be09856d172e43e1c77e16cf39d29ec9ecc GIT binary patch literal 37171 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 literal 0 HcmV?d00001 diff --git a/docs/pr-screenshots/pap-2944/skills-loading-light.png b/docs/pr-screenshots/pap-2944/skills-loading-light.png new file mode 100644 index 0000000000000000000000000000000000000000..61c0ceea59c816c49faf3ae7162143a0fb6548bf GIT binary patch literal 37151 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 literal 0 HcmV?d00001 diff --git a/packages/adapter-utils/src/command-redaction.ts b/packages/adapter-utils/src/command-redaction.ts new file mode 100644 index 00000000..9a5f3716 --- /dev/null +++ b/packages/adapter-utils/src/command-redaction.ts @@ -0,0 +1,21 @@ +export const REDACTED_COMMAND_TEXT_VALUE = "***REDACTED***"; + +const COMMAND_CLI_SECRET_OPTION_RE = + /(\B-{1,2}(?:api[-_]?key|(?:access[-_]?|auth[-_]?)?token|token|authorization|bearer|secret|passwd|password|credential|jwt|private[-_]?key|cookie|connectionstring)(?:\s+|=)(["']?))[^\s"'`]+(\2)/gi; +const COMMAND_ENV_SECRET_ASSIGNMENT_RE = + /(\b[A-Za-z0-9_]*(?:TOKEN|KEY|SECRET|PASSWORD|PASSWD|AUTHORIZATION|JWT)[A-Za-z0-9_]*\s*=\s*)[^\s"'`]+/gi; +const COMMAND_AUTHORIZATION_BEARER_RE = /(\bAuthorization\s*:\s*Bearer\s+)[^\s"'`]+/gi; +const COMMAND_OPENAI_KEY_RE = /\bsk-[A-Za-z0-9_-]{12,}\b/g; +const COMMAND_GITHUB_TOKEN_RE = /\bgh[pousr]_[A-Za-z0-9_]{20,}\b/g; +const COMMAND_JWT_RE = + /\b[A-Za-z0-9_-]{8,}\.[A-Za-z0-9_-]{8,}\.[A-Za-z0-9_-]{8,}(?:\.[A-Za-z0-9_-]{8,})?\b/g; + +export function redactCommandText(command: string, redactedValue = REDACTED_COMMAND_TEXT_VALUE): string { + return command + .replace(COMMAND_AUTHORIZATION_BEARER_RE, `$1${redactedValue}`) + .replace(COMMAND_CLI_SECRET_OPTION_RE, `$1${redactedValue}$3`) + .replace(COMMAND_ENV_SECRET_ASSIGNMENT_RE, `$1${redactedValue}`) + .replace(COMMAND_OPENAI_KEY_RE, redactedValue) + .replace(COMMAND_GITHUB_TOKEN_RE, redactedValue) + .replace(COMMAND_JWT_RE, redactedValue); +} diff --git a/packages/adapter-utils/src/index.ts b/packages/adapter-utils/src/index.ts index c563ab21..0c144b7a 100644 --- a/packages/adapter-utils/src/index.ts +++ b/packages/adapter-utils/src/index.ts @@ -55,6 +55,10 @@ export { redactHomePathUserSegmentsInValue, redactTranscriptEntryPaths, } from "./log-redaction.js"; +export { + REDACTED_COMMAND_TEXT_VALUE, + redactCommandText, +} from "./command-redaction.js"; export { inferOpenAiCompatibleBiller } from "./billing.js"; // Keep the root adapter-utils entry browser-safe because the UI imports it. // The sandbox callback bridge stays available via its dedicated subpath export. diff --git a/packages/adapter-utils/src/server-utils.test.ts b/packages/adapter-utils/src/server-utils.test.ts index f5e8f716..16ad5303 100644 --- a/packages/adapter-utils/src/server-utils.test.ts +++ b/packages/adapter-utils/src/server-utils.test.ts @@ -1,9 +1,14 @@ import { randomUUID } from "node:crypto"; +import fs from "node:fs/promises"; +import os from "node:os"; +import path from "node:path"; import { describe, expect, it } from "vitest"; import { applyPaperclipWorkspaceEnv, appendWithByteCap, + buildInvocationEnvForLogs, DEFAULT_PAPERCLIP_AGENT_PROMPT_TEMPLATE, + materializePaperclipSkillCopy, renderPaperclipWakePrompt, runningProcesses, runChildProcess, @@ -39,6 +44,82 @@ async function waitForTextMatch(read: () => string, pattern: RegExp, timeoutMs = return read().match(pattern); } +describe("buildInvocationEnvForLogs", () => { + it("redacts inline secrets from resolved command metadata", () => { + const loggedEnv = buildInvocationEnvForLogs( + { SAFE_VALUE: "visible" }, + { + resolvedCommand: "env OPENAI_API_KEY=sk-live-example custom-acp --token ghp_example_secret", + }, + ); + + expect(loggedEnv.SAFE_VALUE).toBe("visible"); + expect(loggedEnv.PAPERCLIP_RESOLVED_COMMAND).toBe( + "env OPENAI_API_KEY=***REDACTED*** custom-acp --token ***REDACTED***", + ); + }); +}); + +describe("materializePaperclipSkillCopy", () => { + it("refuses to materialize into an ancestor of the source", async () => { + const root = await fs.mkdtemp(path.join(os.tmpdir(), "paperclip-skill-copy-")); + try { + const source = path.join(root, "parent", "skill"); + await fs.mkdir(source, { recursive: true }); + await fs.writeFile(path.join(source, "SKILL.md"), "# skill\n", "utf8"); + + await expect(materializePaperclipSkillCopy(source, path.join(root, "parent"))).rejects.toThrow( + /ancestor/, + ); + await expect(fs.readFile(path.join(source, "SKILL.md"), "utf8")).resolves.toBe("# skill\n"); + } finally { + await fs.rm(root, { recursive: true, force: true }); + } + }); + + it("does not delete and recopy an unchanged materialized skill target", async () => { + const root = await fs.mkdtemp(path.join(os.tmpdir(), "paperclip-skill-copy-")); + try { + const source = path.join(root, "source"); + const target = path.join(root, "target"); + await fs.mkdir(source, { recursive: true }); + await fs.writeFile(path.join(source, "SKILL.md"), "# skill\n", "utf8"); + + const first = await materializePaperclipSkillCopy(source, target); + expect(first.copiedFiles).toBe(1); + await fs.writeFile(path.join(target, "local-marker.txt"), "keep\n", "utf8"); + + const second = await materializePaperclipSkillCopy(source, target); + expect(second.copiedFiles).toBe(0); + await expect(fs.readFile(path.join(target, "local-marker.txt"), "utf8")).resolves.toBe("keep\n"); + } finally { + await fs.rm(root, { recursive: true, force: true }); + } + }); + + it("breaks stale materialization locks left by dead processes", async () => { + const root = await fs.mkdtemp(path.join(os.tmpdir(), "paperclip-skill-copy-")); + try { + const source = path.join(root, "source"); + const target = path.join(root, "target"); + const lock = `${target}.lock`; + await fs.mkdir(source, { recursive: true }); + await fs.writeFile(path.join(source, "SKILL.md"), "# skill\n", "utf8"); + await fs.mkdir(lock, { recursive: true }); + await fs.writeFile( + path.join(lock, "owner.json"), + JSON.stringify({ pid: 999_999_999, createdAt: "2000-01-01T00:00:00.000Z" }), + "utf8", + ); + + await expect(materializePaperclipSkillCopy(source, target)).resolves.toMatchObject({ copiedFiles: 1 }); + await expect(fs.readFile(path.join(target, "SKILL.md"), "utf8")).resolves.toBe("# skill\n"); + } finally { + await fs.rm(root, { recursive: true, force: true }); + } + }); +}); + describe("runChildProcess", () => { it("does not arm a timeout when timeoutSec is 0", async () => { const result = await runChildProcess( diff --git a/packages/adapter-utils/src/server-utils.ts b/packages/adapter-utils/src/server-utils.ts index 425a1f3f..bb4eb40d 100644 --- a/packages/adapter-utils/src/server-utils.ts +++ b/packages/adapter-utils/src/server-utils.ts @@ -1,7 +1,9 @@ import { spawn, type ChildProcess } from "node:child_process"; +import { createHash, randomUUID } from "node:crypto"; import { constants as fsConstants, promises as fs, type Dirent } from "node:fs"; import path from "node:path"; import { buildSshSpawnTarget, type SshRemoteExecutionSpec } from "./ssh.js"; +import { redactCommandText } from "./command-redaction.js"; import type { AdapterSkillEntry, AdapterSkillSnapshot, @@ -76,10 +78,14 @@ export const MAX_CAPTURE_BYTES = 4 * 1024 * 1024; export const MAX_EXCERPT_BYTES = 32 * 1024; const TERMINAL_RESULT_SCAN_OVERLAP_CHARS = 64 * 1024; const SENSITIVE_ENV_KEY = /(key|token|secret|password|passwd|authorization|cookie)/i; +const REDACTED_LOG_VALUE = "***REDACTED***"; const PAPERCLIP_SKILL_ROOT_RELATIVE_CANDIDATES = [ "../../skills", "../../../../../skills", ]; +const MATERIALIZED_SKILL_SENTINEL = ".paperclip-materialized-skill.json"; +const MATERIALIZED_SKILL_LOCK_OWNER = "owner.json"; +const MATERIALIZED_SKILL_LOCK_STALE_MS = 30_000; export const DEFAULT_PAPERCLIP_AGENT_PROMPT_TEMPLATE = [ "You are agent {{agent.id}} ({{agent.name}}). Continue your Paperclip work.", @@ -111,6 +117,11 @@ export interface InstalledSkillTarget { kind: "symlink" | "directory" | "file"; } +export interface MaterializedPaperclipSkillCopyResult { + copiedFiles: number; + skippedSymlinks: string[]; +} + interface PersistentSkillSnapshotOptions { adapterType: string; availableEntries: PaperclipSkillEntry[]; @@ -780,11 +791,15 @@ export function renderPaperclipWakePrompt( export function redactEnvForLogs(env: Record): Record { const redacted: Record = {}; for (const [key, value] of Object.entries(env)) { - redacted[key] = SENSITIVE_ENV_KEY.test(key) ? "***REDACTED***" : value; + redacted[key] = SENSITIVE_ENV_KEY.test(key) ? REDACTED_LOG_VALUE : value; } return redacted; } +export function redactCommandTextForLogs(command: string): string { + return redactCommandText(command, REDACTED_LOG_VALUE); +} + export function buildInvocationEnvForLogs( env: Record, options: { @@ -806,7 +821,7 @@ export function buildInvocationEnvForLogs( const resolvedCommand = options.resolvedCommand?.trim(); if (resolvedCommand) { - merged[options.resolvedCommandEnvKey ?? "PAPERCLIP_RESOLVED_COMMAND"] = resolvedCommand; + merged[options.resolvedCommandEnvKey ?? "PAPERCLIP_RESOLVED_COMMAND"] = redactCommandTextForLogs(resolvedCommand); } return redactEnvForLogs(merged); @@ -1395,6 +1410,190 @@ export async function ensurePaperclipSkillSymlink( return "repaired"; } +async function hashSkillDirectory(root: string): Promise { + const hash = createHash("sha256"); + + async function visit(candidate: string, relativePath: string): Promise { + const stat = await fs.lstat(candidate); + if (stat.isSymbolicLink()) { + hash.update(`symlink:${relativePath}\n`); + return; + } + if (stat.isDirectory()) { + hash.update(`dir:${relativePath}\n`); + const entries = await fs.readdir(candidate, { withFileTypes: true }); + entries.sort((left, right) => left.name.localeCompare(right.name)); + for (const entry of entries) { + const childRelativePath = relativePath ? `${relativePath}/${entry.name}` : entry.name; + await visit(path.join(candidate, entry.name), childRelativePath); + } + return; + } + if (stat.isFile()) { + hash.update(`file:${relativePath}:${stat.mode}\n`); + hash.update(await fs.readFile(candidate)); + hash.update("\n"); + return; + } + hash.update(`other:${relativePath}:${stat.mode}\n`); + } + + await visit(root, ""); + return hash.digest("hex"); +} + +async function materializedSkillFingerprintMatches(targetRoot: string, sourceFingerprint: string): Promise { + try { + const raw = JSON.parse(await fs.readFile(path.join(targetRoot, MATERIALIZED_SKILL_SENTINEL), "utf8")) as unknown; + const parsed = parseObject(raw); + return parsed.version === 1 && parsed.sourceFingerprint === sourceFingerprint; + } catch { + return false; + } +} + +async function acquireMaterializeLock(lockDir: string): Promise<() => Promise> { + await fs.mkdir(path.dirname(lockDir), { recursive: true }); + const deadline = Date.now() + MATERIALIZED_SKILL_LOCK_STALE_MS; + while (true) { + try { + await fs.mkdir(lockDir); + await fs.writeFile( + path.join(lockDir, MATERIALIZED_SKILL_LOCK_OWNER), + `${JSON.stringify({ pid: process.pid, createdAt: new Date().toISOString() })}\n`, + "utf8", + ); + return async () => { + await fs.rm(lockDir, { recursive: true, force: true }); + }; + } catch (err) { + const code = err && typeof err === "object" ? (err as { code?: unknown }).code : null; + if (code !== "EEXIST") throw err; + if (await removeStaleMaterializeLock(lockDir, MATERIALIZED_SKILL_LOCK_STALE_MS)) continue; + if (Date.now() >= deadline) { + throw new Error(`Timed out waiting for Paperclip skill materialization lock at ${lockDir}`); + } + await new Promise((resolve) => setTimeout(resolve, 50)); + } + } +} + +function isPidAlive(pid: number): boolean { + if (!Number.isInteger(pid) || pid <= 0) return false; + try { + process.kill(pid, 0); + return true; + } catch (err) { + const code = err && typeof err === "object" ? (err as { code?: unknown }).code : null; + return code === "EPERM"; + } +} + +async function removeStaleMaterializeLock(lockDir: string, staleMs: number): Promise { + const ownerPath = path.join(lockDir, MATERIALIZED_SKILL_LOCK_OWNER); + let shouldRemove = false; + try { + const raw = JSON.parse(await fs.readFile(ownerPath, "utf8")) as unknown; + const owner = parseObject(raw); + const pid = typeof owner.pid === "number" ? owner.pid : 0; + const createdAt = typeof owner.createdAt === "string" ? Date.parse(owner.createdAt) : Number.NaN; + const ageMs = Number.isFinite(createdAt) ? Date.now() - createdAt : staleMs + 1; + shouldRemove = !isPidAlive(pid) || ageMs > staleMs; + } catch { + const stat = await fs.stat(lockDir).catch(() => null); + shouldRemove = !stat || Date.now() - stat.mtimeMs > staleMs; + } + if (!shouldRemove) return false; + await fs.rm(lockDir, { recursive: true, force: true }).catch(() => {}); + return true; +} + +export async function materializePaperclipSkillCopy( + source: string, + target: string, +): Promise { + const sourceRoot = path.resolve(source); + const targetRoot = path.resolve(target); + const relativeTarget = path.relative(sourceRoot, targetRoot); + const relativeSource = path.relative(targetRoot, sourceRoot); + if ( + !relativeTarget || + (!relativeTarget.startsWith("..") && !path.isAbsolute(relativeTarget)) || + !relativeSource || + (!relativeSource.startsWith("..") && !path.isAbsolute(relativeSource)) + ) { + throw new Error("Refusing to materialize a skill into itself, an ancestor, or one of its descendants."); + } + + const rootStat = await fs.lstat(sourceRoot); + if (rootStat.isSymbolicLink()) { + throw new Error("Refusing to materialize a skill root that is itself a symlink."); + } + if (!rootStat.isDirectory()) { + throw new Error("Paperclip skills must be directories."); + } + + const result: MaterializedPaperclipSkillCopyResult = { + copiedFiles: 0, + skippedSymlinks: [], + }; + + const lockDir = `${targetRoot}.lock`; + const releaseLock = await acquireMaterializeLock(lockDir); + const tempRoot = `${targetRoot}.tmp-${process.pid}-${randomUUID()}`; + + async function copyEntry(sourcePath: string, targetPath: string, relativePath: string): Promise { + const stat = await fs.lstat(sourcePath); + if (stat.isSymbolicLink()) { + result.skippedSymlinks.push(relativePath || "."); + return; + } + + if (stat.isDirectory()) { + await fs.mkdir(targetPath, { recursive: true }); + const entries = await fs.readdir(sourcePath, { withFileTypes: true }); + entries.sort((left, right) => left.name.localeCompare(right.name)); + for (const entry of entries) { + const childRelativePath = relativePath ? `${relativePath}/${entry.name}` : entry.name; + await copyEntry(path.join(sourcePath, entry.name), path.join(targetPath, entry.name), childRelativePath); + } + return; + } + + if (stat.isFile()) { + await fs.mkdir(path.dirname(targetPath), { recursive: true }); + await fs.copyFile(sourcePath, targetPath, fsConstants.COPYFILE_FICLONE).catch(async () => { + await fs.copyFile(sourcePath, targetPath); + }); + await fs.chmod(targetPath, stat.mode).catch(() => {}); + result.copiedFiles += 1; + } + } + + try { + const sourceFingerprint = await hashSkillDirectory(sourceRoot); + if (await materializedSkillFingerprintMatches(targetRoot, sourceFingerprint)) return result; + await copyEntry(sourceRoot, tempRoot, ""); + await fs.writeFile( + path.join(tempRoot, MATERIALIZED_SKILL_SENTINEL), + `${JSON.stringify({ + version: 1, + sourceFingerprint, + copiedFiles: result.copiedFiles, + skippedSymlinks: result.skippedSymlinks, + }, null, 2)}\n`, + "utf8", + ); + if (await materializedSkillFingerprintMatches(targetRoot, sourceFingerprint)) return result; + await fs.rm(targetRoot, { recursive: true, force: true }); + await fs.rename(tempRoot, targetRoot); + return result; + } finally { + await fs.rm(tempRoot, { recursive: true, force: true }).catch(() => {}); + await releaseLock(); + } +} + export async function removeMaintainerOnlySkillSymlinks( skillsHome: string, allowedSkillNames: Iterable, diff --git a/packages/adapter-utils/src/session-compaction.ts b/packages/adapter-utils/src/session-compaction.ts index 90fe544b..c42cbf8f 100644 --- a/packages/adapter-utils/src/session-compaction.ts +++ b/packages/adapter-utils/src/session-compaction.ts @@ -37,6 +37,7 @@ const ADAPTER_MANAGED_SESSION_POLICY: SessionCompactionPolicy = { }; export const LEGACY_SESSIONED_ADAPTER_TYPES = new Set([ + "acpx_local", "claude_local", "codex_local", "cursor", @@ -47,6 +48,11 @@ export const LEGACY_SESSIONED_ADAPTER_TYPES = new Set([ ]); export const ADAPTER_SESSION_MANAGEMENT: Record = { + acpx_local: { + supportsSessionResume: true, + nativeContextManagement: "confirmed", + defaultSessionCompaction: ADAPTER_MANAGED_SESSION_POLICY, + }, claude_local: { supportsSessionResume: true, nativeContextManagement: "confirmed", diff --git a/packages/adapters/acpx-local/package.json b/packages/adapters/acpx-local/package.json new file mode 100644 index 00000000..b061a113 --- /dev/null +++ b/packages/adapters/acpx-local/package.json @@ -0,0 +1,64 @@ +{ + "name": "@paperclipai/adapter-acpx-local", + "version": "0.3.1", + "license": "MIT", + "homepage": "https://github.com/paperclipai/paperclip", + "bugs": { + "url": "https://github.com/paperclipai/paperclip/issues" + }, + "repository": { + "type": "git", + "url": "https://github.com/paperclipai/paperclip", + "directory": "packages/adapters/acpx-local" + }, + "type": "module", + "exports": { + ".": "./src/index.ts", + "./server": "./src/server/index.ts", + "./ui": "./src/ui/index.ts", + "./cli": "./src/cli/index.ts" + }, + "publishConfig": { + "access": "public", + "exports": { + ".": { + "types": "./dist/index.d.ts", + "import": "./dist/index.js" + }, + "./server": { + "types": "./dist/server/index.d.ts", + "import": "./dist/server/index.js" + }, + "./ui": { + "types": "./dist/ui/index.d.ts", + "import": "./dist/ui/index.js" + }, + "./cli": { + "types": "./dist/cli/index.d.ts", + "import": "./dist/cli/index.js" + } + }, + "main": "./dist/index.js", + "types": "./dist/index.d.ts" + }, + "files": [ + "dist", + "skills" + ], + "scripts": { + "build": "tsc", + "clean": "rm -rf dist", + "typecheck": "tsc --noEmit" + }, + "dependencies": { + "@agentclientprotocol/claude-agent-acp": "^0.31.4", + "@paperclipai/adapter-utils": "workspace:*", + "@zed-industries/codex-acp": "^0.12.0", + "acpx": "^0.6.1", + "picocolors": "^1.1.1" + }, + "devDependencies": { + "@types/node": "^24.6.0", + "typescript": "^5.7.3" + } +} diff --git a/packages/adapters/acpx-local/src/cli/format-event.test.ts b/packages/adapters/acpx-local/src/cli/format-event.test.ts new file mode 100644 index 00000000..34e2b6b3 --- /dev/null +++ b/packages/adapters/acpx-local/src/cli/format-event.test.ts @@ -0,0 +1,121 @@ +import { afterEach, beforeEach, describe, expect, it, vi } from "vitest"; +import { printAcpxStreamEvent } from "./format-event.js"; + +function emit(payload: Record): string { + return JSON.stringify(payload); +} + +interface CapturedOutput { + log: string[]; + stdout: string[]; +} + +function captureOutput(): { capture: CapturedOutput; restore: () => void } { + const log: string[] = []; + const stdout: string[] = []; + const logSpy = vi.spyOn(console, "log").mockImplementation((value?: unknown) => { + log.push(String(value ?? "")); + }); + const stdoutSpy = vi.spyOn(process.stdout, "write").mockImplementation(((chunk: unknown) => { + stdout.push(String(chunk ?? "")); + return true; + }) as typeof process.stdout.write); + return { + capture: { log, stdout }, + restore: () => { + logSpy.mockRestore(); + stdoutSpy.mockRestore(); + }, + }; +} + +function strip(value: string): string { + return value.replace(/\x1b\[[0-9;]*m/g, ""); +} + +describe("printAcpxStreamEvent", () => { + let captured: CapturedOutput; + let restore: () => void; + + beforeEach(() => { + const result = captureOutput(); + captured = result.capture; + restore = result.restore; + }); + + afterEach(() => { + restore(); + }); + + it("renders acpx.session as a labeled session header", () => { + printAcpxStreamEvent( + emit({ + type: "acpx.session", + agent: "claude", + acpSessionId: "acp-1", + mode: "persistent", + permissionMode: "approve-all", + }), + false, + ); + expect(captured.log.map(strip)).toEqual(["claude session: acp-1 [persistent / approve-all]"]); + }); + + it("streams output text_delta to stdout for live progress", () => { + printAcpxStreamEvent( + emit({ type: "acpx.text_delta", text: "hello", channel: "output" }), + false, + ); + expect(captured.log).toEqual([]); + expect(captured.stdout.map(strip)).toEqual(["hello"]); + }); + + it("renders thought text_delta on its own line", () => { + printAcpxStreamEvent( + emit({ type: "acpx.text_delta", text: "thinking…", channel: "thought" }), + false, + ); + expect(captured.log.map(strip)).toEqual(["thinking…"]); + }); + + it("renders tool_call with status and id", () => { + printAcpxStreamEvent( + emit({ + type: "acpx.tool_call", + name: "read", + toolCallId: "tool-1", + status: "running", + text: "read README.md", + }), + false, + ); + expect(captured.log.map(strip)).toEqual([ + "tool_call: read [running] (tool-1)", + "read README.md", + ]); + }); + + it("renders status events with optional context window", () => { + printAcpxStreamEvent( + emit({ type: "acpx.status", tag: "context_window", used: 100, size: 200000 }), + false, + ); + expect(captured.log.map(strip)).toEqual(["status: context_window (100/200000 ctx)"]); + }); + + it("renders acpx.result and acpx.error", () => { + printAcpxStreamEvent(emit({ type: "acpx.result", summary: "completed", stopReason: "end_turn" }), false); + printAcpxStreamEvent(emit({ type: "acpx.error", message: "auth required" }), false); + expect(captured.log.map(strip)).toEqual(["result: completed", "error: auth required"]); + }); + + it("falls back to plain output for non-JSON lines", () => { + printAcpxStreamEvent("not json", false); + expect(captured.log).toEqual(["not json"]); + }); + + it("still emits unknown / non-JSON lines when debug is enabled", () => { + printAcpxStreamEvent("not json", true); + expect(strip(captured.log[0])).toBe("not json"); + }); +}); diff --git a/packages/adapters/acpx-local/src/cli/format-event.ts b/packages/adapters/acpx-local/src/cli/format-event.ts new file mode 100644 index 00000000..9794ba13 --- /dev/null +++ b/packages/adapters/acpx-local/src/cli/format-event.ts @@ -0,0 +1,121 @@ +import pc from "picocolors"; + +function parseJson(line: string): Record | null { + try { + const parsed = JSON.parse(line); + if (typeof parsed !== "object" || parsed === null || Array.isArray(parsed)) return null; + return parsed as Record; + } catch { + return null; + } +} + +function asString(value: unknown, fallback = ""): string { + return typeof value === "string" ? value : fallback; +} + +function asNumber(value: unknown, fallback = 0): number { + return typeof value === "number" && Number.isFinite(value) ? value : fallback; +} + +function stringify(value: unknown): string { + if (typeof value === "string") return value; + if (value === null || value === undefined) return ""; + try { + return JSON.stringify(value, null, 2); + } catch { + return String(value); + } +} + +function pickToolUseId(parsed: Record): string { + return ( + asString(parsed.toolCallId) || + asString(parsed.toolUseId) || + asString(parsed.id) + ); +} + +function statusLine(parsed: Record): string { + const text = asString(parsed.text).trim(); + const tag = asString(parsed.tag).trim(); + const used = asNumber(parsed.used, -1); + const size = asNumber(parsed.size, -1); + const parts: string[] = []; + if (text) parts.push(text); + if (tag && !text) parts.push(tag); + if (used >= 0 && size > 0) parts.push(`(${used}/${size} ctx)`); + return parts.join(" ") || tag || "status"; +} + +export function printAcpxStreamEvent(raw: string, debug: boolean): void { + const line = raw.trim(); + if (!line) return; + const parsed = parseJson(line); + if (!parsed) { + if (debug) console.log(pc.gray(line)); + else console.log(line); + return; + } + + const type = asString(parsed.type); + if (type === "acpx.session") { + const agent = asString(parsed.agent, "acpx"); + const session = + asString(parsed.acpSessionId) || + asString(parsed.sessionId) || + asString(parsed.runtimeSessionName); + const mode = asString(parsed.mode); + const permissionMode = asString(parsed.permissionMode); + const tail = [mode, permissionMode].filter(Boolean).join(" / "); + const suffix = tail ? ` [${tail}]` : ""; + console.log(pc.blue(`${agent} session${session ? `: ${session}` : ""}${suffix}`)); + return; + } + if (type === "acpx.text_delta") { + const text = asString(parsed.text); + if (!text) return; + const channel = asString(parsed.channel) || asString(parsed.stream); + const isThought = channel === "thought" || channel === "thinking"; + if (isThought) console.log(pc.gray(text)); + else process.stdout.write(pc.green(text)); + return; + } + if (type === "acpx.tool_call") { + const name = asString(parsed.name, "acp_tool"); + const status = asString(parsed.status); + const id = pickToolUseId(parsed); + const header = status ? `tool_call: ${name} [${status}]` : `tool_call: ${name}`; + const idSuffix = id ? ` (${id})` : ""; + const isError = status === "failed" || status === "cancelled"; + console.log((isError ? pc.red : pc.yellow)(`${header}${idSuffix}`)); + if (parsed.input !== undefined) { + console.log(pc.gray(stringify(parsed.input))); + } else { + const text = asString(parsed.text).trim(); + if (text) console.log(pc.gray(text)); + } + return; + } + if (type === "acpx.tool_result") { + const isError = parsed.isError === true || parsed.error !== undefined; + console.log((isError ? pc.red : pc.cyan)(`tool_result: ${asString(parsed.name, "acp_tool")}`)); + const content = stringify(parsed.content ?? parsed.output ?? parsed.error); + if (content) console.log((isError ? pc.red : pc.gray)(content)); + return; + } + if (type === "acpx.status") { + console.log(pc.gray(`status: ${statusLine(parsed)}`)); + return; + } + if (type === "acpx.result") { + const summary = asString(parsed.summary, asString(parsed.stopReason, asString(parsed.subtype, "complete"))); + console.log(pc.blue(`result: ${summary}`)); + return; + } + if (type === "acpx.error") { + console.log(pc.red(`error: ${asString(parsed.message, line)}`)); + return; + } + console.log(debug ? pc.gray(line) : line); +} diff --git a/packages/adapters/acpx-local/src/cli/index.ts b/packages/adapters/acpx-local/src/cli/index.ts new file mode 100644 index 00000000..51a60e2a --- /dev/null +++ b/packages/adapters/acpx-local/src/cli/index.ts @@ -0,0 +1 @@ +export { printAcpxStreamEvent } from "./format-event.js"; diff --git a/packages/adapters/acpx-local/src/index.ts b/packages/adapters/acpx-local/src/index.ts new file mode 100644 index 00000000..1e4933c0 --- /dev/null +++ b/packages/adapters/acpx-local/src/index.ts @@ -0,0 +1,47 @@ +export const type = "acpx_local"; +export const label = "ACPX (local)"; + +export const DEFAULT_ACPX_LOCAL_AGENT = "claude"; +export const DEFAULT_ACPX_LOCAL_MODE = "persistent"; +export const DEFAULT_ACPX_LOCAL_PERMISSION_MODE = "approve-all"; +export const DEFAULT_ACPX_LOCAL_NON_INTERACTIVE_PERMISSIONS = "deny"; +export const DEFAULT_ACPX_LOCAL_TIMEOUT_SEC = 0; + +export const acpxAgentOptions = [ + { id: "claude", label: "Claude via ACPX" }, + { id: "codex", label: "Codex via ACPX" }, + { id: "custom", label: "Custom ACP command" }, +] as const; + +export const agentConfigurationDoc = `# acpx_local agent configuration + +Adapter: acpx_local + +Use when: +- The agent should run through Agent Client Protocol via ACPX on the Paperclip host or a managed execution environment. +- You want one built-in adapter that can target Claude, Codex, or a custom ACP server command. +- You need Paperclip-managed session identity and live streamed ACP events in later ACPX runtime phases. + +Don't use when: +- You need today's stable Claude Code or Codex CLI wrapper behavior. Use claude_local or codex_local until acpx_local runtime execution is enabled. +- The host cannot satisfy ACPX's Node >=22.12.0 prerequisite. +- The agent runtime is not an ACP server and cannot be launched through ACPX. + +Core fields: +- agent (string, optional): claude, codex, or custom. Defaults to claude. +- agentCommand (string, optional): custom ACP command when agent=custom, or an override for a built-in ACP agent command. +- mode (string, optional): persistent or oneshot. Defaults to persistent. +- cwd (string, optional): default absolute working directory fallback for the agent process. +- permissionMode (string, optional): defaults to approve-all, meaning ACPX permission requests are auto-approved. +- nonInteractivePermissions (string, optional): fallback behavior when ACPX cannot ask interactively. Supported values are deny and fail. +- stateDir (string, optional): ACPX state directory. Defaults to a Paperclip-managed company/agent scoped location. +- instructionsFilePath (string, optional): absolute path to a markdown instructions file used by Paperclip prompt construction. +- promptTemplate (string, optional): run prompt template. +- bootstrapPromptTemplate (string, optional): first-run bootstrap prompt template. +- timeoutSec (number, optional): run timeout in seconds. Defaults to 0, meaning no adapter timeout. +- env (object, optional): KEY=VALUE environment variables or secret bindings. + +Dependency decision: +- acpx_local declares direct dependencies on acpx, @agentclientprotocol/claude-agent-acp, and @zed-industries/codex-acp so the built-in adapter has deterministic package resolution instead of relying on globally installed ACP commands. +- ACPX currently requires Node >=22.12.0. Paperclip keeps the repo-wide Node >=20 engine and surfaces the stricter runtime prerequisite through acpx_local diagnostics. +`; diff --git a/packages/adapters/acpx-local/src/server/config-schema.ts b/packages/adapters/acpx-local/src/server/config-schema.ts new file mode 100644 index 00000000..87100917 --- /dev/null +++ b/packages/adapters/acpx-local/src/server/config-schema.ts @@ -0,0 +1,102 @@ +import type { AdapterConfigSchema } from "@paperclipai/adapter-utils"; +import { + DEFAULT_ACPX_LOCAL_AGENT, + DEFAULT_ACPX_LOCAL_MODE, + DEFAULT_ACPX_LOCAL_NON_INTERACTIVE_PERMISSIONS, + DEFAULT_ACPX_LOCAL_PERMISSION_MODE, + DEFAULT_ACPX_LOCAL_TIMEOUT_SEC, + acpxAgentOptions, +} from "../index.js"; + +export function getConfigSchema(): AdapterConfigSchema { + return { + fields: [ + { + key: "agent", + label: "ACP agent", + type: "select", + default: DEFAULT_ACPX_LOCAL_AGENT, + required: true, + options: acpxAgentOptions.map((agent) => ({ value: agent.id, label: agent.label })), + hint: "Choose the ACP agent launched through ACPX.", + }, + { + key: "agentCommand", + label: "Agent command", + type: "text", + hint: "Required for custom agents; optional override for built-in Claude or Codex ACP commands.", + }, + { + key: "mode", + label: "Session mode", + type: "select", + default: DEFAULT_ACPX_LOCAL_MODE, + options: [ + { value: "persistent", label: "Persistent" }, + { value: "oneshot", label: "One shot" }, + ], + }, + { + key: "permissionMode", + label: "Permission mode", + type: "select", + default: DEFAULT_ACPX_LOCAL_PERMISSION_MODE, + options: [ + { value: "approve-all", label: "Approve all" }, + { value: "default", label: "Approve reads" }, + ], + hint: "Defaults to maximum permissions. Approve reads grants read-only requests and asks for approval on writes.", + }, + { + key: "nonInteractivePermissions", + label: "Non-interactive permissions", + type: "select", + default: DEFAULT_ACPX_LOCAL_NON_INTERACTIVE_PERMISSIONS, + options: [ + { value: "deny", label: "Deny" }, + { value: "fail", label: "Fail" }, + ], + }, + { + key: "cwd", + label: "Working directory", + type: "text", + hint: "Absolute fallback directory. Paperclip execution workspaces can override this at runtime.", + }, + { + key: "stateDir", + label: "State directory", + type: "text", + hint: "Optional ACPX session state directory. Defaults to Paperclip-managed company/agent scoped storage.", + }, + { + key: "instructionsFilePath", + label: "Instructions file", + type: "text", + hint: "Optional absolute path to markdown instructions injected into the run prompt.", + }, + { + key: "promptTemplate", + label: "Prompt template", + type: "textarea", + }, + { + key: "bootstrapPromptTemplate", + label: "Bootstrap prompt template", + type: "textarea", + }, + { + key: "timeoutSec", + label: "Timeout seconds", + type: "number", + default: DEFAULT_ACPX_LOCAL_TIMEOUT_SEC, + }, + { + key: "env", + label: "Environment JSON", + type: "textarea", + hint: "Optional JSON object of environment values or secret bindings.", + }, + ], + }; +} diff --git a/packages/adapters/acpx-local/src/server/execute.test.ts b/packages/adapters/acpx-local/src/server/execute.test.ts new file mode 100644 index 00000000..ccdea013 --- /dev/null +++ b/packages/adapters/acpx-local/src/server/execute.test.ts @@ -0,0 +1,362 @@ +import fs from "node:fs/promises"; +import os from "node:os"; +import path from "node:path"; +import { afterEach, describe, expect, it } from "vitest"; +import { createAcpxLocalExecutor } from "./execute.js"; + +const tempRoots: string[] = []; + +async function makeTempRoot() { + const root = await fs.mkdtemp(path.join(os.tmpdir(), "paperclip-acpx-skills-")); + tempRoots.push(root); + return root; +} + +afterEach(async () => { + await Promise.all(tempRoots.splice(0).map((root) => fs.rm(root, { recursive: true, force: true }))); +}); + +async function pathExists(candidate: string): Promise { + return fs.access(candidate).then(() => true).catch(() => false); +} + +async function onlyChildDir(parent: string): Promise { + const entries = await fs.readdir(parent); + expect(entries).toHaveLength(1); + return path.join(parent, entries[0]!); +} + +async function createSkill(root: string, name: string, body = `---\nrequired: false\n---\n# ${name}\n`) { + const skillDir = path.join(root, name); + await fs.mkdir(skillDir, { recursive: true }); + await fs.writeFile(path.join(skillDir, "SKILL.md"), body, "utf8"); + return { + key: `paperclipai/test/${name}`, + runtimeName: name, + source: skillDir, + required: false, + }; +} + +function buildRuntime() { + return { + ensureSession: async () => ({ + backendSessionId: "backend-session", + agentSessionId: "agent-session", + runtimeSessionName: "runtime-session", + }), + startTurn: () => ({ + events: (async function* () { + yield { type: "done", stopReason: "end_turn" }; + })(), + result: Promise.resolve({ status: "completed", stopReason: "end_turn" }), + cancel: async () => {}, + }), + close: async () => {}, + }; +} + +async function runExecutor(config: Record) { + const runtimeOptions: Record[] = []; + const meta: Record[] = []; + const logs: Array<{ stream: string; text: string }> = []; + const execute = createAcpxLocalExecutor({ + createRuntime: (options) => { + runtimeOptions.push(options as unknown as Record); + return buildRuntime() as never; + }, + }); + + const result = await execute({ + runId: "run-1", + agent: { + id: "agent-1", + companyId: "company-1", + }, + runtime: {}, + config, + context: {}, + onLog: async (stream: "stdout" | "stderr", text: string) => { + logs.push({ stream, text }); + }, + onMeta: async (payload: unknown) => { + meta.push(payload as Record); + }, + } as never); + + expect(result.exitCode).toBe(0); + return { logs, meta, runtimeOptions, result }; +} + +describe("acpx_local runtime skill isolation", () => { + it.skipIf(process.platform === "win32")("materializes ACPX Claude skills without symlinked descendants", async () => { + const root = await makeTempRoot(); + const skillRoot = path.join(root, "skills"); + const outsideRoot = path.join(root, "outside"); + await fs.mkdir(outsideRoot, { recursive: true }); + await fs.writeFile(path.join(outsideRoot, "secret.txt"), "do not expose", "utf8"); + const skill = await createSkill(skillRoot, "danger"); + await fs.symlink(path.join(outsideRoot, "secret.txt"), path.join(skill.source, "leak.txt")); + await fs.symlink(outsideRoot, path.join(skill.source, "leak-dir")); + + const stateDir = path.join(root, "state"); + const { meta } = await runExecutor({ + agent: "claude", + stateDir, + paperclipRuntimeSkills: [skill], + paperclipSkillSync: { desiredSkills: [skill.key] }, + }); + + const mountedRoot = await onlyChildDir(path.join(stateDir, "runtime-skills", "claude")); + const skillsHome = path.join(mountedRoot, ".claude", "skills"); + const materializedSkill = path.join(skillsHome, skill.runtimeName); + expect(await fs.readFile(path.join(materializedSkill, "SKILL.md"), "utf8")).toContain("# danger"); + expect(await pathExists(path.join(materializedSkill, "leak.txt"))).toBe(false); + expect(await pathExists(path.join(materializedSkill, "leak-dir"))).toBe(false); + expect(String(meta[0]?.prompt ?? "")).toContain(`Skill root: ${skillsHome}`); + }); + + it.skipIf(process.platform === "win32")("revokes removed ACPX Codex skills and skips symlinked descendants", async () => { + const root = await makeTempRoot(); + const skillRoot = path.join(root, "skills"); + const outsideRoot = path.join(root, "outside"); + const codexHome = path.join(root, "codex-home"); + await fs.mkdir(outsideRoot, { recursive: true }); + await fs.writeFile(path.join(outsideRoot, "secret.txt"), "do not expose", "utf8"); + const keep = await createSkill(skillRoot, "keep"); + const remove = await createSkill(skillRoot, "remove"); + await fs.symlink(path.join(outsideRoot, "secret.txt"), path.join(keep.source, "leak.txt")); + await fs.symlink(outsideRoot, path.join(keep.source, "leak-dir")); + + const baseConfig = { + agent: "codex", + stateDir: path.join(root, "state"), + env: { CODEX_HOME: codexHome }, + paperclipRuntimeSkills: [keep, remove], + }; + + await runExecutor({ + ...baseConfig, + paperclipSkillSync: { desiredSkills: [keep.key, remove.key] }, + }); + expect(await pathExists(path.join(codexHome, "skills", remove.runtimeName, "SKILL.md"))).toBe(true); + + await runExecutor({ + ...baseConfig, + paperclipSkillSync: { desiredSkills: [keep.key] }, + }); + + expect(await pathExists(path.join(codexHome, "skills", keep.runtimeName, "SKILL.md"))).toBe(true); + expect(await pathExists(path.join(codexHome, "skills", keep.runtimeName, "leak.txt"))).toBe(false); + expect(await pathExists(path.join(codexHome, "skills", keep.runtimeName, "leak-dir"))).toBe(false); + expect(await pathExists(path.join(codexHome, "skills", remove.runtimeName))).toBe(false); + }); + + it.skipIf(process.platform === "win32")("removes legacy ACPX Codex skill symlinks when a skill is no longer desired", async () => { + const root = await makeTempRoot(); + const skillRoot = path.join(root, "skills"); + const codexHome = path.join(root, "codex-home"); + const legacy = await createSkill(skillRoot, "legacy"); + const skillsHome = path.join(codexHome, "skills"); + await fs.mkdir(skillsHome, { recursive: true }); + await fs.symlink(legacy.source, path.join(skillsHome, legacy.runtimeName)); + + await runExecutor({ + agent: "codex", + stateDir: path.join(root, "state"), + env: { CODEX_HOME: codexHome }, + paperclipRuntimeSkills: [legacy], + paperclipSkillSync: { desiredSkills: [] }, + }); + + expect(await pathExists(path.join(skillsHome, legacy.runtimeName))).toBe(false); + }); + + it.skipIf(process.platform === "win32")("replaces stale managed Codex auth files with source symlinks", async () => { + const root = await makeTempRoot(); + const sourceCodexHome = path.join(root, "source-codex-home"); + const paperclipHome = path.join(root, "paperclip-home"); + const managedCodexHome = path.join( + paperclipHome, + "instances", + "default", + "companies", + "company-1", + "codex-home", + ); + await fs.mkdir(sourceCodexHome, { recursive: true }); + await fs.mkdir(managedCodexHome, { recursive: true }); + const sourceAuth = path.join(sourceCodexHome, "auth.json"); + const managedAuth = path.join(managedCodexHome, "auth.json"); + await fs.writeFile(sourceAuth, "{\"source\":true}", "utf8"); + await fs.writeFile(managedAuth, "{\"stale\":true}", "utf8"); + + const previousCodexHome = process.env.CODEX_HOME; + const previousPaperclipHome = process.env.PAPERCLIP_HOME; + try { + process.env.CODEX_HOME = sourceCodexHome; + process.env.PAPERCLIP_HOME = paperclipHome; + await runExecutor({ + agent: "codex", + stateDir: path.join(root, "state"), + paperclipRuntimeSkills: [], + paperclipSkillSync: { desiredSkills: [] }, + }); + } finally { + if (previousCodexHome === undefined) delete process.env.CODEX_HOME; + else process.env.CODEX_HOME = previousCodexHome; + if (previousPaperclipHome === undefined) delete process.env.PAPERCLIP_HOME; + else process.env.PAPERCLIP_HOME = previousPaperclipHome; + } + + const authStat = await fs.lstat(managedAuth); + expect(authStat.isSymbolicLink()).toBe(true); + expect(path.resolve(path.dirname(managedAuth), await fs.readlink(managedAuth))).toBe(sourceAuth); + }); + + it("keeps fresh credential wrapper scripts across ACPX agent changes", async () => { + const root = await makeTempRoot(); + const stateDir = path.join(root, "state"); + const baseConfig = { + agentCommand: "node ./fake-acp.js", + stateDir, + }; + + await runExecutor({ + ...baseConfig, + agent: "custom-a", + env: { PAPERCLIP_API_KEY: "old-key" }, + }); + await runExecutor({ + ...baseConfig, + agent: "custom-b", + env: { PAPERCLIP_API_KEY: "new-key" }, + }); + + const wrappers = await fs.readdir(path.join(stateDir, "wrappers")); + expect(wrappers.filter((name) => name.endsWith(".sh"))).toHaveLength(2); + expect(wrappers.filter((name) => name.endsWith(".env"))).toHaveLength(2); + expect(wrappers.some((name) => name.startsWith("custom-a-"))).toBe(true); + expect(wrappers.some((name) => name.startsWith("custom-b-"))).toBe(true); + const wrapperPath = path.join(stateDir, "wrappers", wrappers.find((name) => name.startsWith("custom-b-") && name.endsWith(".sh"))!); + const envPath = path.join(stateDir, "wrappers", wrappers.find((name) => name.startsWith("custom-b-") && name.endsWith(".env"))!); + const wrapper = await fs.readFile(wrapperPath, "utf8"); + const env = await fs.readFile(envPath, "utf8"); + expect((await fs.stat(envPath)).mode & 0o777).toBe(0o600); + expect((await fs.stat(wrapperPath)).mode & 0o777).toBe(0o700); + expect(wrapper).toContain("node ./fake-acp.js"); + expect(wrapper).not.toContain("PAPERCLIP_API_KEY"); + expect(wrapper).not.toContain("new-key"); + expect(wrapper).not.toContain("old-key"); + expect(env).toContain("PAPERCLIP_API_KEY='new-key'"); + expect(env).not.toContain("old-key"); + }); + + it("cleans aged credential wrapper scripts across ACPX agent changes", async () => { + const root = await makeTempRoot(); + const stateDir = path.join(root, "state"); + const wrappersDir = path.join(stateDir, "wrappers"); + const baseConfig = { + agentCommand: "node ./fake-acp.js", + stateDir, + }; + + await runExecutor({ + ...baseConfig, + agent: "custom-a", + env: { PAPERCLIP_API_KEY: "old-key" }, + }); + const oldDate = new Date(Date.now() - 16 * 60 * 1000); + await Promise.all( + (await fs.readdir(wrappersDir)) + .filter((name) => name.startsWith("custom-a-")) + .map((name) => fs.utimes(path.join(wrappersDir, name), oldDate, oldDate)), + ); + + await runExecutor({ + ...baseConfig, + agent: "custom-b", + env: { PAPERCLIP_API_KEY: "new-key" }, + }); + + const wrappers = await fs.readdir(wrappersDir); + expect(wrappers.filter((name) => name.endsWith(".sh"))).toHaveLength(1); + expect(wrappers.filter((name) => name.endsWith(".env"))).toHaveLength(1); + expect(wrappers.some((name) => name.startsWith("custom-a-"))).toBe(false); + expect(wrappers.some((name) => name.startsWith("custom-b-"))).toBe(true); + }); + + it("keeps distinct wrapper env files for concurrent runs with different credentials", async () => { + const root = await makeTempRoot(); + const stateDir = path.join(root, "state"); + const baseConfig = { + agent: "custom-a", + agentCommand: "node ./fake-acp.js", + stateDir, + }; + + await runExecutor({ + ...baseConfig, + env: { PAPERCLIP_API_KEY: "first-key" }, + }); + await runExecutor({ + ...baseConfig, + env: { PAPERCLIP_API_KEY: "second-key" }, + }); + + const envFileNames = (await fs.readdir(path.join(stateDir, "wrappers"))).filter((name) => name.endsWith(".env")); + expect(envFileNames).toHaveLength(2); + const envFiles = await Promise.all( + envFileNames.map(async (name) => fs.readFile(path.join(stateDir, "wrappers", name), "utf8")), + ); + expect(envFiles.filter((contents) => contents.includes("PAPERCLIP_API_KEY='first-key'"))).toHaveLength(1); + expect(envFiles.filter((contents) => contents.includes("PAPERCLIP_API_KEY='second-key'"))).toHaveLength(1); + }); + + it("passes Paperclip env through the ACP agent wrapper instead of process.env", async () => { + let observedApiKeyDuringStream: string | undefined; + const execute = createAcpxLocalExecutor({ + createRuntime: () => ({ + ensureSession: async () => ({ + backendSessionId: "backend-session", + agentSessionId: "agent-session", + runtimeSessionName: "runtime-session", + }), + startTurn: () => ({ + events: (async function* () { + await Promise.resolve(); + observedApiKeyDuringStream = process.env.PAPERCLIP_API_KEY; + yield { type: "done", stopReason: "end_turn" }; + })(), + result: Promise.resolve({ status: "completed", stopReason: "end_turn" }), + cancel: async () => {}, + }), + close: async () => {}, + }) as never, + }); + + const previousApiKey = process.env.PAPERCLIP_API_KEY; + try { + delete process.env.PAPERCLIP_API_KEY; + const result = await execute({ + runId: "run-1", + agent: { + id: "agent-1", + companyId: "company-1", + }, + runtime: {}, + config: { agent: "custom", agentCommand: "node ./fake-acp.js" }, + context: {}, + authToken: "runtime-key", + onLog: async () => {}, + onMeta: async () => {}, + } as never); + + expect(result.exitCode).toBe(0); + expect(observedApiKeyDuringStream).toBeUndefined(); + } finally { + if (previousApiKey === undefined) delete process.env.PAPERCLIP_API_KEY; + else process.env.PAPERCLIP_API_KEY = previousApiKey; + } + }); +}); diff --git a/packages/adapters/acpx-local/src/server/execute.ts b/packages/adapters/acpx-local/src/server/execute.ts new file mode 100644 index 00000000..6c2840e0 --- /dev/null +++ b/packages/adapters/acpx-local/src/server/execute.ts @@ -0,0 +1,1212 @@ +import fs from "node:fs/promises"; +import os from "node:os"; +import path from "node:path"; +import { createHash, randomUUID } from "node:crypto"; +import { fileURLToPath } from "node:url"; +import type { AdapterExecutionContext, AdapterExecutionResult } from "@paperclipai/adapter-utils"; +import { readAdapterExecutionTarget, adapterExecutionTargetSessionIdentity } from "@paperclipai/adapter-utils/execution-target"; +import { + DEFAULT_PAPERCLIP_AGENT_PROMPT_TEMPLATE, + applyPaperclipWorkspaceEnv, + asNumber, + asString, + buildInvocationEnvForLogs, + buildPaperclipEnv, + ensureAbsoluteDirectory, + ensurePathInEnv, + joinPromptSections, + materializePaperclipSkillCopy, + parseObject, + readPaperclipRuntimeSkillEntries, + renderPaperclipWakePrompt, + renderTemplate, + resolvePaperclipDesiredSkillNames, + stringifyPaperclipWakePayload, + type PaperclipSkillEntry, +} from "@paperclipai/adapter-utils/server-utils"; +import { shellQuote } from "@paperclipai/adapter-utils/ssh"; +import { + createAcpRuntime, + createAgentRegistry, + createRuntimeStore, + isAcpRuntimeError, + type AcpAgentRegistry, + type AcpRuntime, + type AcpRuntimeEvent, + type AcpRuntimeHandle, + type AcpRuntimeOptions, + type AcpRuntimeTurn, + type AcpRuntimeTurnResult, +} from "acpx/runtime"; +import { + DEFAULT_ACPX_LOCAL_AGENT, + DEFAULT_ACPX_LOCAL_MODE, + DEFAULT_ACPX_LOCAL_NON_INTERACTIVE_PERMISSIONS, + DEFAULT_ACPX_LOCAL_PERMISSION_MODE, + DEFAULT_ACPX_LOCAL_TIMEOUT_SEC, +} from "../index.js"; + +const __moduleDir = path.dirname(fileURLToPath(import.meta.url)); +const DEFAULT_WARM_HANDLE_IDLE_MS = 15 * 60 * 1000; +const WRAPPER_CLEANUP_RETENTION_MS = 15 * 60 * 1000; +const PAPERCLIP_MANAGED_CODEX_SKILLS_MANIFEST = ".paperclip-managed-skills.json"; + +type AcpxRuntimeFactory = (options: AcpRuntimeOptions) => AcpRuntime; + +interface RuntimeCacheEntry { + runtime: AcpRuntime; + handle: AcpRuntimeHandle; + fingerprint: string; + lastUsedAt: number; +} + +interface ExecuteDeps { + createRuntime?: AcpxRuntimeFactory; + now?: () => number; + warmHandles?: Map; +} + +interface AcpxPreparedRuntime { + acpxAgent: string; + mode: "persistent" | "oneshot"; + cwd: string; + workspaceId: string; + workspaceRepoUrl: string; + workspaceRepoRef: string; + env: Record; + loggedEnv: Record; + stateDir: string; + permissionMode: "approve-all" | "approve-reads" | "deny-all"; + nonInteractivePermissions: "deny" | "fail"; + timeoutSec: number; + sessionKey: string; + fingerprint: string; + agentCommand: string | null; + agentRegistry: AcpAgentRegistry; + remoteExecutionIdentity: Record | null; + skillPromptInstructions: string; + skillsIdentity: Record; +} + +const defaultWarmHandles = new Map(); + +function stableJson(value: unknown): string { + if (Array.isArray(value)) return `[${value.map(stableJson).join(",")}]`; + if (value && typeof value === "object") { + return `{${Object.entries(value as Record) + .sort(([a], [b]) => a.localeCompare(b)) + .map(([key, entry]) => `${JSON.stringify(key)}:${stableJson(entry)}`) + .join(",")}}`; + } + return JSON.stringify(value); +} + +function shortHash(value: unknown): string { + return createHash("sha256").update(stableJson(value)).digest("hex").slice(0, 16); +} + +function defaultPaperclipInstanceDir(): string { + const home = process.env.PAPERCLIP_HOME?.trim() || path.join(os.homedir(), ".paperclip"); + const instanceId = process.env.PAPERCLIP_INSTANCE_ID?.trim() || "default"; + return path.join(home, "instances", instanceId); +} + +function defaultStateDir(companyId: string, agentId: string): string { + return path.join(defaultPaperclipInstanceDir(), "companies", companyId, "acpx-local", "agents", agentId); +} + +function resolveManagedCodexHomeDir(companyId: string): string { + return path.join(defaultPaperclipInstanceDir(), "companies", companyId, "codex-home"); +} + +function packageRootDir(): string { + return path.resolve(__moduleDir, "../.."); +} + +function resolveBuiltInAgentCommand(agent: string): string | null { + const binName = + agent === "claude" + ? "claude-agent-acp" + : agent === "codex" + ? "codex-acp" + : null; + if (!binName) return null; + return path.join(packageRootDir(), "node_modules", ".bin", binName); +} + +function normalizeAgent(config: Record): string { + const agent = asString(config.agent, DEFAULT_ACPX_LOCAL_AGENT).trim(); + return agent || DEFAULT_ACPX_LOCAL_AGENT; +} + +async function pathExists(candidate: string): Promise { + return fs.access(candidate).then(() => true).catch(() => false); +} + +async function ensureParentDir(target: string): Promise { + await fs.mkdir(path.dirname(target), { recursive: true }); +} + +async function writeFileAtomically(input: { + target: string; + contents: string; + mode: number; +}): Promise { + await ensureParentDir(input.target); + const tempPath = `${input.target}.tmp-${process.pid}-${randomUUID()}`; + const handle = await fs.open(tempPath, "wx", input.mode); + try { + await handle.writeFile(input.contents, "utf8"); + await handle.close(); + await fs.rename(tempPath, input.target); + await fs.chmod(input.target, input.mode).catch(() => {}); + } catch (err) { + await handle.close().catch(() => {}); + await fs.rm(tempPath, { force: true }).catch(() => {}); + throw err; + } +} + +async function ensureSymlink(target: string, source: string): Promise { + const resolvedSource = path.resolve(source); + const existing = await fs.lstat(target).catch(() => null); + if (!existing) { + await ensureParentDir(target); + await fs.symlink(resolvedSource, target); + return; + } + + if (!existing.isSymbolicLink()) { + await fs.rm(target, { recursive: true, force: true }); + await fs.symlink(resolvedSource, target); + return; + } + + const linkedPath = await fs.readlink(target).catch(() => null); + if (!linkedPath) return; + + const resolvedLinkedPath = path.resolve(path.dirname(target), linkedPath); + if (resolvedLinkedPath === resolvedSource) return; + + await fs.unlink(target); + await fs.symlink(resolvedSource, target); +} + +async function ensureCopiedFile(target: string, source: string): Promise { + if (await pathExists(target)) return; + await ensureParentDir(target); + await fs.copyFile(source, target); +} + +async function prepareManagedCodexHome(input: { + companyId: string; + sourceHome: string; + targetHome: string; + onLog: AdapterExecutionContext["onLog"]; +}): Promise { + const { sourceHome, targetHome, onLog } = input; + if (path.resolve(sourceHome) === path.resolve(targetHome)) return targetHome; + + await fs.mkdir(targetHome, { recursive: true }); + + const authJson = path.join(sourceHome, "auth.json"); + if (await pathExists(authJson)) await ensureSymlink(path.join(targetHome, "auth.json"), authJson); + + for (const name of ["config.json", "config.toml", "instructions.md"]) { + const source = path.join(sourceHome, name); + if (await pathExists(source)) await ensureCopiedFile(path.join(targetHome, name), source); + } + + await onLog( + "stdout", + `[paperclip] Using Paperclip-managed ACPX Codex home "${targetHome}" (seeded from "${sourceHome}").\n`, + ); + return targetHome; +} + +async function hashPathContents( + candidate: string, + hash: ReturnType, + relativePath: string, + seenDirectories: Set, +): Promise { + const stat = await fs.lstat(candidate); + + if (stat.isSymbolicLink()) { + hash.update(`symlink-skipped:${relativePath}\n`); + return; + } + + if (stat.isDirectory()) { + const realDir = await fs.realpath(candidate).catch(() => candidate); + hash.update(`dir:${relativePath}\n`); + if (seenDirectories.has(realDir)) { + hash.update("loop\n"); + return; + } + seenDirectories.add(realDir); + const entries = await fs.readdir(candidate, { withFileTypes: true }); + entries.sort((left, right) => left.name.localeCompare(right.name)); + for (const entry of entries) { + const childRelativePath = relativePath.length > 0 ? `${relativePath}/${entry.name}` : entry.name; + await hashPathContents(path.join(candidate, entry.name), hash, childRelativePath, seenDirectories); + } + return; + } + + if (stat.isFile()) { + hash.update(`file:${relativePath}\n`); + hash.update(await fs.readFile(candidate)); + hash.update("\n"); + return; + } + + hash.update(`other:${relativePath}:${stat.mode}\n`); +} + +async function buildSkillSetKey(input: { + skills: PaperclipSkillEntry[]; + label: string; +}): Promise { + const hash = createHash("sha256"); + hash.update(`paperclip-acpx-${input.label}-skills:v1\n`); + const sorted = [...input.skills].sort((left, right) => left.runtimeName.localeCompare(right.runtimeName)); + for (const entry of sorted) { + hash.update(`skill:${entry.key}:${entry.runtimeName}\n`); + await hashPathContents(entry.source, hash, entry.runtimeName, new Set()); + } + return hash.digest("hex"); +} + +async function resolveSelectedRuntimeSkills( + config: Record, +): Promise<{ allSkills: PaperclipSkillEntry[]; selectedSkills: PaperclipSkillEntry[]; desiredSkillNames: string[] }> { + const allSkills = await readPaperclipRuntimeSkillEntries(config, __moduleDir); + const desiredSkillNames = resolvePaperclipDesiredSkillNames(config, allSkills); + const desiredSet = new Set(desiredSkillNames); + return { + allSkills, + selectedSkills: allSkills.filter((entry) => desiredSet.has(entry.key)), + desiredSkillNames, + }; +} + +async function prepareClaudeSkillRuntime(input: { + stateDir: string; + config: Record; + onLog: AdapterExecutionContext["onLog"]; +}): Promise<{ + identity: Record; + promptInstructions: string; + commandNotes: string[]; +}> { + const { selectedSkills, desiredSkillNames } = await resolveSelectedRuntimeSkills(input.config); + const skillSetKey = await buildSkillSetKey({ skills: selectedSkills, label: "claude" }); + const bundleRoot = path.join(input.stateDir, "runtime-skills", "claude", skillSetKey); + const skillsHome = path.join(bundleRoot, ".claude", "skills"); + await fs.mkdir(skillsHome, { recursive: true }); + + for (const entry of selectedSkills) { + const target = path.join(skillsHome, entry.runtimeName); + try { + const result = await materializePaperclipSkillCopy(entry.source, target); + if (result.skippedSymlinks.length > 0) { + await input.onLog( + "stdout", + `[paperclip] Materialized ACPX Claude skill "${entry.runtimeName}" into ${skillsHome} and skipped ${result.skippedSymlinks.length} symlink(s).\n`, + ); + } + } catch (err) { + await input.onLog( + "stderr", + `[paperclip] Failed to materialize ACPX Claude skill "${entry.key}" into ${skillsHome}: ${err instanceof Error ? err.message : String(err)}\n`, + ); + } + } + + const selectedNames = selectedSkills.map((entry) => entry.runtimeName).sort(); + const promptInstructions = selectedSkills.length > 0 + ? [ + "Paperclip has materialized selected runtime skills for this ACPX Claude session.", + `Skill root: ${skillsHome}`, + selectedNames.length > 0 ? `Selected skills: ${selectedNames.join(", ")}` : "", + "When a task calls for one of these skills, read its SKILL.md from that root and follow it.", + ].filter(Boolean).join("\n") + : ""; + + return { + identity: { + mode: "claude", + skillSetKey, + desiredSkillNames, + selectedSkills: selectedNames, + skillRoot: selectedSkills.length > 0 ? skillsHome : null, + }, + promptInstructions, + commandNotes: selectedSkills.length > 0 + ? [`Materialized ${selectedSkills.length} Paperclip skill(s) for ACPX Claude at ${skillsHome}.`] + : [], + }; +} + +async function readManagedCodexSkillsManifest(skillsHome: string): Promise> { + const manifestPath = path.join(skillsHome, PAPERCLIP_MANAGED_CODEX_SKILLS_MANIFEST); + try { + const raw = JSON.parse(await fs.readFile(manifestPath, "utf8")) as unknown; + const parsed = parseObject(raw); + const skills = Array.isArray(parsed.managedSkillNames) + ? parsed.managedSkillNames.filter((value): value is string => typeof value === "string" && value.trim().length > 0) + : []; + return new Set(skills); + } catch { + return new Set(); + } +} + +async function writeManagedCodexSkillsManifest(skillsHome: string, skillNames: Iterable): Promise { + const managedSkillNames = Array.from(new Set(skillNames)).sort(); + await fs.writeFile( + path.join(skillsHome, PAPERCLIP_MANAGED_CODEX_SKILLS_MANIFEST), + `${JSON.stringify({ version: 1, managedSkillNames }, null, 2)}\n`, + "utf8", + ); +} + +async function removeSkillTarget(target: string): Promise { + const existing = await fs.lstat(target).catch(() => null); + if (!existing) return false; + await fs.rm(target, { recursive: true, force: true }); + return true; +} + +async function reconcileManagedCodexSkills(input: { + skillsHome: string; + allSkills: PaperclipSkillEntry[]; + selectedSkills: PaperclipSkillEntry[]; + onLog: AdapterExecutionContext["onLog"]; +}): Promise { + const desired = new Set(input.selectedSkills.map((entry) => entry.runtimeName)); + const managed = await readManagedCodexSkillsManifest(input.skillsHome); + const availableByRuntimeName = new Map(input.allSkills.map((entry) => [entry.runtimeName, entry])); + + for (const name of managed) { + if (desired.has(name)) continue; + if (await removeSkillTarget(path.join(input.skillsHome, name))) { + await input.onLog("stdout", `[paperclip] Revoked ACPX Codex skill "${name}" from ${input.skillsHome}\n`); + } + } + + for (const entry of input.allSkills) { + if (desired.has(entry.runtimeName) || managed.has(entry.runtimeName)) continue; + const target = path.join(input.skillsHome, entry.runtimeName); + const existing = await fs.lstat(target).catch(() => null); + if (!existing?.isSymbolicLink()) continue; + const linkedPath = await fs.readlink(target).catch(() => null); + if (!linkedPath) continue; + const resolvedLinkedPath = path.resolve(path.dirname(target), linkedPath); + if (resolvedLinkedPath !== path.resolve(entry.source)) continue; + if (await removeSkillTarget(target)) { + await input.onLog("stdout", `[paperclip] Revoked legacy ACPX Codex skill "${entry.runtimeName}" from ${input.skillsHome}\n`); + } + } + + for (const name of managed) { + if (desired.has(name) || availableByRuntimeName.has(name)) continue; + if (await removeSkillTarget(path.join(input.skillsHome, name))) { + await input.onLog("stdout", `[paperclip] Revoked unavailable ACPX Codex skill "${name}" from ${input.skillsHome}\n`); + } + } +} + +async function prepareCodexSkillRuntime(input: { + companyId: string; + config: Record; + env: Record; + onLog: AdapterExecutionContext["onLog"]; +}): Promise<{ identity: Record; commandNotes: string[] }> { + const envConfig = parseObject(input.config.env); + const configuredCodexHome = + typeof envConfig.CODEX_HOME === "string" && envConfig.CODEX_HOME.trim().length > 0 + ? path.resolve(envConfig.CODEX_HOME.trim()) + : null; + const sourceCodexHome = + typeof process.env.CODEX_HOME === "string" && process.env.CODEX_HOME.trim().length > 0 + ? path.resolve(process.env.CODEX_HOME.trim()) + : path.join(os.homedir(), ".codex"); + const managedCodexHome = resolveManagedCodexHomeDir(input.companyId); + const effectiveCodexHome = configuredCodexHome ?? + await prepareManagedCodexHome({ + companyId: input.companyId, + sourceHome: sourceCodexHome, + targetHome: managedCodexHome, + onLog: input.onLog, + }); + const { allSkills, selectedSkills, desiredSkillNames } = await resolveSelectedRuntimeSkills(input.config); + const skillSetKey = await buildSkillSetKey({ skills: selectedSkills, label: "codex" }); + const skillsHome = path.join(effectiveCodexHome, "skills"); + await fs.mkdir(skillsHome, { recursive: true }); + await reconcileManagedCodexSkills({ + skillsHome, + allSkills, + selectedSkills, + onLog: input.onLog, + }); + + for (const entry of selectedSkills) { + const target = path.join(skillsHome, entry.runtimeName); + try { + const result = await materializePaperclipSkillCopy(entry.source, target); + if (result.skippedSymlinks.length > 0) { + await input.onLog( + "stdout", + `[paperclip] Materialized ACPX Codex skill "${entry.runtimeName}" into ${skillsHome} and skipped ${result.skippedSymlinks.length} symlink(s).\n`, + ); + } + } catch (err) { + await input.onLog( + "stderr", + `[paperclip] Failed to inject ACPX Codex skill "${entry.key}" into ${skillsHome}: ${err instanceof Error ? err.message : String(err)}\n`, + ); + } + } + await writeManagedCodexSkillsManifest(skillsHome, selectedSkills.map((entry) => entry.runtimeName)); + + input.env.CODEX_HOME = effectiveCodexHome; + + return { + identity: { + mode: "codex", + skillSetKey, + desiredSkillNames, + selectedSkills: selectedSkills.map((entry) => entry.runtimeName).sort(), + codexHome: effectiveCodexHome, + skillsHome, + }, + commandNotes: [`Prepared ACPX Codex skill home at ${skillsHome}.`], + }; +} + +function normalizeMode(config: Record): "persistent" | "oneshot" { + return asString(config.mode, DEFAULT_ACPX_LOCAL_MODE) === "oneshot" ? "oneshot" : "persistent"; +} + +function normalizePermissionMode(config: Record): "approve-all" | "approve-reads" | "deny-all" { + const value = asString(config.permissionMode, DEFAULT_ACPX_LOCAL_PERMISSION_MODE).trim(); + if (value === "approve-reads" || value === "deny-all") return value; + if (value === "default") return "approve-reads"; + return "approve-all"; +} + +function normalizeNonInteractivePermissions(config: Record): "deny" | "fail" { + return asString(config.nonInteractivePermissions, DEFAULT_ACPX_LOCAL_NON_INTERACTIVE_PERMISSIONS) === "fail" + ? "fail" + : "deny"; +} + +function isCompatibleSession( + params: Record, + runtime: Pick, +): boolean { + if (asString(params.configFingerprint, "") !== runtime.fingerprint) return false; + if (asString(params.sessionKey, "") !== runtime.sessionKey) return false; + if (asString(params.agent, "") !== runtime.acpxAgent) return false; + if (asString(params.mode, "") !== runtime.mode) return false; + const savedCwd = asString(params.cwd, ""); + if (!savedCwd || path.resolve(savedCwd) !== path.resolve(runtime.cwd)) return false; + const savedRemote = parseObject(params.remoteExecution); + return stableJson(savedRemote) === stableJson(runtime.remoteExecutionIdentity ?? {}); +} + +function buildSessionParams(input: { + prepared: AcpxPreparedRuntime; + handle: AcpRuntimeHandle; +}): Record { + const { prepared, handle } = input; + return { + sessionKey: prepared.sessionKey, + runtimeSessionName: handle.runtimeSessionName, + acpxRecordId: handle.acpxRecordId, + acpSessionId: handle.backendSessionId, + agentSessionId: handle.agentSessionId, + agent: prepared.acpxAgent, + cwd: prepared.cwd, + mode: prepared.mode, + stateDir: prepared.stateDir, + configFingerprint: prepared.fingerprint, + skills: prepared.skillsIdentity, + ...(prepared.workspaceId ? { workspaceId: prepared.workspaceId } : {}), + ...(prepared.workspaceRepoUrl ? { repoUrl: prepared.workspaceRepoUrl } : {}), + ...(prepared.workspaceRepoRef ? { repoRef: prepared.workspaceRepoRef } : {}), + ...(prepared.remoteExecutionIdentity ? { remoteExecution: prepared.remoteExecutionIdentity } : {}), + }; +} + +async function writeAgentWrapper(input: { + stateDir: string; + acpxAgent: string; + agentCommandShell: string; + env: Record; +}): Promise<{ wrapperPath: string; envFilePath: string }> { + const wrappersDir = path.join(input.stateDir, "wrappers"); + await fs.mkdir(wrappersDir, { recursive: true }); + const envLines = Object.entries(input.env) + .filter(([key]) => /^[A-Za-z_][A-Za-z0-9_]*$/.test(key)) + .sort(([left], [right]) => left.localeCompare(right)) + .map(([key, value]) => `${key}=${shellQuote(value)}`); + const wrapperHash = shortHash({ + agent: input.acpxAgent, + command: input.agentCommandShell, + env: envLines, + }); + const wrapperPath = path.join(wrappersDir, `${input.acpxAgent}-${wrapperHash}.sh`); + const envFilePath = path.join(wrappersDir, `${input.acpxAgent}-${wrapperHash}.env`); + const script = [ + "#!/usr/bin/env bash", + "set -euo pipefail", + `env_file=${shellQuote(envFilePath)}`, + "if [[ -f \"$env_file\" ]]; then", + " set -a", + " source \"$env_file\"", + " set +a", + "fi", + `exec ${input.agentCommandShell} "$@"`, + "", + ].join("\n"); + await writeFileAtomically({ + target: envFilePath, + contents: `${envLines.join("\n")}\n`, + mode: 0o600, + }); + await writeFileAtomically({ + target: wrapperPath, + contents: script, + mode: 0o700, + }); + await cleanupStaleAgentWrappers({ + wrappersDir, + currentFileNames: new Set([path.basename(wrapperPath), path.basename(envFilePath)]), + }); + return { wrapperPath, envFilePath }; +} + +async function cleanupStaleAgentWrappers(input: { wrappersDir: string; currentFileNames: Set }) { + const wrappers = await fs.readdir(input.wrappersDir).catch(() => []); + const now = Date.now(); + await Promise.all( + wrappers.map(async (name) => { + const isManagedWrapperFile = name.endsWith(".sh") || name.endsWith(".env"); + if (!isManagedWrapperFile || input.currentFileNames.has(name)) return; + const wrapperPath = path.join(input.wrappersDir, name); + const stats = await fs.stat(wrapperPath).catch(() => null); + if (!stats || now - stats.mtimeMs < WRAPPER_CLEANUP_RETENTION_MS) return; + await fs.rm(wrapperPath, { force: true }); + }), + ); +} + +async function buildRuntime(input: { + ctx: AdapterExecutionContext; +}): Promise { + const { runId, agent, config, context, authToken } = input.ctx; + const workspaceContext = parseObject(context.paperclipWorkspace); + const workspaceCwd = asString(workspaceContext.cwd, ""); + const workspaceSource = asString(workspaceContext.source, ""); + const workspaceStrategy = asString(workspaceContext.strategy, ""); + const workspaceId = asString(workspaceContext.workspaceId, ""); + const workspaceRepoUrl = asString(workspaceContext.repoUrl, ""); + const workspaceRepoRef = asString(workspaceContext.repoRef, ""); + const workspaceBranch = asString(workspaceContext.branchName, ""); + const workspaceWorktreePath = asString(workspaceContext.worktreePath, ""); + const agentHome = asString(workspaceContext.agentHome, ""); + const configuredCwd = asString(config.cwd, ""); + const useConfiguredInsteadOfAgentHome = workspaceSource === "agent_home" && configuredCwd.length > 0; + const effectiveWorkspaceCwd = useConfiguredInsteadOfAgentHome ? "" : workspaceCwd; + const cwd = effectiveWorkspaceCwd || configuredCwd || process.cwd(); + await ensureAbsoluteDirectory(cwd, { createIfMissing: true }); + + const acpxAgent = normalizeAgent(config); + const mode = normalizeMode(config); + const permissionMode = normalizePermissionMode(config); + const nonInteractivePermissions = normalizeNonInteractivePermissions(config); + const timeoutSec = asNumber(config.timeoutSec, DEFAULT_ACPX_LOCAL_TIMEOUT_SEC); + const stateDir = path.resolve(asString(config.stateDir, "") || defaultStateDir(agent.companyId, agent.id)); + await fs.mkdir(stateDir, { recursive: true }); + + const envConfig = parseObject(config.env); + const hasExplicitApiKey = + typeof envConfig.PAPERCLIP_API_KEY === "string" && envConfig.PAPERCLIP_API_KEY.trim().length > 0; + const env: Record = { ...buildPaperclipEnv(agent), PAPERCLIP_RUN_ID: runId }; + const wakeTaskId = + (typeof context.taskId === "string" && context.taskId.trim()) || + (typeof context.issueId === "string" && context.issueId.trim()) || + ""; + const wakeReason = typeof context.wakeReason === "string" ? context.wakeReason.trim() : ""; + const wakeCommentId = + (typeof context.wakeCommentId === "string" && context.wakeCommentId.trim()) || + (typeof context.commentId === "string" && context.commentId.trim()) || + ""; + const approvalId = typeof context.approvalId === "string" ? context.approvalId.trim() : ""; + const approvalStatus = typeof context.approvalStatus === "string" ? context.approvalStatus.trim() : ""; + const linkedIssueIds = Array.isArray(context.issueIds) + ? context.issueIds.filter((value): value is string => typeof value === "string" && value.trim().length > 0) + : []; + const wakePayloadJson = stringifyPaperclipWakePayload(context.paperclipWake); + if (wakeTaskId) env.PAPERCLIP_TASK_ID = wakeTaskId; + if (wakeReason) env.PAPERCLIP_WAKE_REASON = wakeReason; + if (wakeCommentId) env.PAPERCLIP_WAKE_COMMENT_ID = wakeCommentId; + if (approvalId) env.PAPERCLIP_APPROVAL_ID = approvalId; + if (approvalStatus) env.PAPERCLIP_APPROVAL_STATUS = approvalStatus; + if (linkedIssueIds.length > 0) env.PAPERCLIP_LINKED_ISSUE_IDS = linkedIssueIds.join(","); + if (wakePayloadJson) env.PAPERCLIP_WAKE_PAYLOAD_JSON = wakePayloadJson; + applyPaperclipWorkspaceEnv(env, { + workspaceCwd: effectiveWorkspaceCwd, + workspaceSource, + workspaceStrategy, + workspaceId, + workspaceRepoUrl, + workspaceRepoRef, + workspaceBranch, + workspaceWorktreePath, + agentHome, + }); + for (const [key, value] of Object.entries(envConfig)) { + if (typeof value === "string") env[key] = value; + } + if (!hasExplicitApiKey && authToken) env.PAPERCLIP_API_KEY = authToken; + + let skillPromptInstructions = ""; + let skillsIdentity: Record = { mode: "unsupported" }; + const skillCommandNotes: string[] = []; + if (acpxAgent === "claude") { + const preparedSkills = await prepareClaudeSkillRuntime({ + stateDir, + config, + onLog: input.ctx.onLog, + }); + skillPromptInstructions = preparedSkills.promptInstructions; + skillsIdentity = preparedSkills.identity; + skillCommandNotes.push(...preparedSkills.commandNotes); + } else if (acpxAgent === "codex") { + const preparedSkills = await prepareCodexSkillRuntime({ + companyId: agent.companyId, + config, + env, + onLog: input.ctx.onLog, + }); + skillsIdentity = preparedSkills.identity; + skillCommandNotes.push(...preparedSkills.commandNotes); + } else { + const desired = resolvePaperclipDesiredSkillNames(config, await readPaperclipRuntimeSkillEntries(config, __moduleDir)); + skillsIdentity = { mode: "custom_unsupported", desiredSkillNames: desired }; + if (desired.length > 0) { + skillCommandNotes.push("Selected Paperclip skills are tracked only; ACPX custom commands do not expose a runtime skill contract yet."); + } + } + + const configuredCommand = asString(config.agentCommand, "").trim(); + const builtInCommand = resolveBuiltInAgentCommand(acpxAgent); + const agentCommand = configuredCommand || builtInCommand || null; + const agentCommandShell = configuredCommand || (builtInCommand ? shellQuote(builtInCommand) : ""); + const wrapper = agentCommand + ? await writeAgentWrapper({ + stateDir, + acpxAgent, + agentCommandShell, + env, + }) + : null; + const wrapperPath = wrapper?.wrapperPath ?? null; + const overrides = wrapperPath ? { [acpxAgent]: wrapperPath } : undefined; + const agentRegistry = createAgentRegistry({ overrides }); + const executionTarget = readAdapterExecutionTarget({ + executionTarget: input.ctx.executionTarget, + legacyRemoteExecution: input.ctx.executionTransport?.remoteExecution, + }); + const remoteExecutionIdentity = adapterExecutionTargetSessionIdentity(executionTarget); + const fingerprint = shortHash({ + acpxAgent, + agentCommand: agentCommand ?? acpxAgent, + cwd: path.resolve(cwd), + mode, + permissionMode, + nonInteractivePermissions, + remoteExecutionIdentity, + skillsIdentity, + skillPromptInstructions, + }); + const taskKey = asString(input.ctx.runtime.taskKey, "") || wakeTaskId || workspaceId || "default"; + const sessionKey = `paperclip:${agent.companyId}:${agent.id}:${taskKey}:${fingerprint}`; + const runtimeEnv = ensurePathInEnv({ ...process.env, ...env }); + const loggedEnv = buildInvocationEnvForLogs(env, { + runtimeEnv, + includeRuntimeKeys: ["HOME"], + resolvedCommand: wrapperPath ?? agentCommand ?? acpxAgent, + }); + + return { + acpxAgent, + mode, + cwd, + workspaceId, + workspaceRepoUrl, + workspaceRepoRef, + env, + loggedEnv, + stateDir, + permissionMode, + nonInteractivePermissions, + timeoutSec, + sessionKey, + fingerprint, + agentCommand, + agentRegistry, + remoteExecutionIdentity, + skillPromptInstructions, + skillsIdentity: { + ...skillsIdentity, + commandNotes: skillCommandNotes, + }, + }; +} + +async function buildPrompt(ctx: AdapterExecutionContext, resumedSession: boolean): Promise<{ + prompt: string; + promptMetrics: Record; + commandNotes: string[]; +}> { + const { agent, runId, config, context, onLog } = ctx; + const promptTemplate = asString(config.promptTemplate, DEFAULT_PAPERCLIP_AGENT_PROMPT_TEMPLATE); + const instructionsFilePath = asString(config.instructionsFilePath, "").trim(); + const instructionsDir = instructionsFilePath ? `${path.dirname(instructionsFilePath)}/` : ""; + let instructionsPrefix = ""; + const commandNotes: string[] = []; + if (instructionsFilePath) { + try { + const instructionsContents = await fs.readFile(instructionsFilePath, "utf8"); + instructionsPrefix = + `${instructionsContents}\n\n` + + `The above agent instructions were loaded from ${instructionsFilePath}. ` + + `Resolve any relative file references from ${instructionsDir}.\n\n`; + commandNotes.push( + `Loaded agent instructions from ${instructionsFilePath}`, + `Prepended instructions + path directive to the ACPX prompt (relative references from ${instructionsDir}).`, + ); + } catch (err) { + const reason = err instanceof Error ? err.message : String(err); + await onLog( + "stderr", + `[paperclip] Warning: could not read agent instructions file "${instructionsFilePath}": ${reason}\n`, + ); + commandNotes.push(`Configured instructionsFilePath ${instructionsFilePath}, but file could not be read.`); + } + } + + const bootstrapPromptTemplate = asString(config.bootstrapPromptTemplate, ""); + const templateData = { + agentId: agent.id, + companyId: agent.companyId, + runId, + company: { id: agent.companyId }, + agent, + run: { id: runId, source: "on_demand" }, + context, + }; + const renderedBootstrapPrompt = + !resumedSession && bootstrapPromptTemplate.trim().length > 0 + ? renderTemplate(bootstrapPromptTemplate, templateData).trim() + : ""; + const wakePrompt = renderPaperclipWakePrompt(context.paperclipWake, { resumedSession }); + const shouldUseResumeDeltaPrompt = resumedSession && wakePrompt.length > 0; + const promptInstructionsPrefix = shouldUseResumeDeltaPrompt ? "" : instructionsPrefix; + const renderedPrompt = shouldUseResumeDeltaPrompt ? "" : renderTemplate(promptTemplate, templateData); + const sessionHandoffNote = asString(context.paperclipSessionHandoffMarkdown, "").trim(); + const taskContextNote = asString(context.paperclipTaskMarkdown, "").trim(); + const prompt = joinPromptSections([ + promptInstructionsPrefix, + renderedBootstrapPrompt, + wakePrompt, + sessionHandoffNote, + taskContextNote, + renderedPrompt, + ]); + + return { + prompt, + commandNotes, + promptMetrics: { + promptChars: prompt.length, + instructionsChars: promptInstructionsPrefix.length, + bootstrapPromptChars: renderedBootstrapPrompt.length, + wakePromptChars: wakePrompt.length, + sessionHandoffChars: sessionHandoffNote.length, + taskContextChars: taskContextNote.length, + heartbeatPromptChars: renderedPrompt.length, + }, + }; +} + +async function emitAcpxLog(ctx: AdapterExecutionContext, payload: Record) { + await ctx.onLog("stdout", `${JSON.stringify(payload)}\n`); +} + +async function emitRuntimeEvent(ctx: AdapterExecutionContext, event: AcpRuntimeEvent) { + if (event.type === "text_delta") { + await emitAcpxLog(ctx, { + type: "acpx.text_delta", + text: event.text, + channel: event.stream === "thought" ? "thought" : "output", + tag: event.tag, + }); + return; + } + if (event.type === "tool_call") { + await emitAcpxLog(ctx, { + type: "acpx.tool_call", + name: event.title ?? "acp_tool", + toolCallId: event.toolCallId, + status: event.status, + text: event.text, + tag: event.tag, + }); + return; + } + if (event.type === "status") { + await emitAcpxLog(ctx, { + type: "acpx.status", + text: event.text, + tag: event.tag, + used: event.used, + size: event.size, + }); + return; + } + if (event.type === "done") { + await emitAcpxLog(ctx, { + type: "acpx.result", + summary: event.stopReason ?? "completed", + stopReason: event.stopReason, + }); + return; + } + if (event.type === "error") { + await emitAcpxLog(ctx, { + type: "acpx.error", + message: event.message, + code: event.code, + retryable: event.retryable, + }); + } +} + +function resultErrorMessage(result: AcpRuntimeTurnResult): string | null { + if (result.status !== "failed") return null; + return result.error.message; +} + +function classifyError(err: unknown): Pick { + const message = err instanceof Error ? err.message : String(err); + const maybeCode = + err && typeof err === "object" && typeof (err as { code?: unknown }).code === "string" + ? (err as { code: string }).code + : null; + const acpCode = isAcpRuntimeError(err) || (maybeCode?.startsWith("ACP_") ?? false) ? maybeCode : null; + const lower = message.toLowerCase(); + const authLike = lower.includes("auth") || lower.includes("login") || lower.includes("credential"); + if (authLike) { + return { + errorCode: "acpx_auth_required", + errorMeta: { category: "auth", ...(acpCode ? { acpCode } : {}) }, + }; + } + if (acpCode) { + return { + errorCode: "acpx_protocol_error", + errorMeta: { category: "protocol", acpCode }, + }; + } + return { + errorCode: "acpx_runtime_error", + errorMeta: { category: "runtime" }, + }; +} + +function isResumeFailure(err: unknown): boolean { + const message = err instanceof Error ? err.message : String(err); + return /resume|load|not found|no session|unknown session|conversation/i.test(message); +} + +async function cleanupIdleHandles(input: { + handles: Map; + now: number; + idleMs: number; +}) { + const stale: Array<[string, RuntimeCacheEntry]> = []; + for (const entry of input.handles.entries()) { + if (input.now - entry[1].lastUsedAt >= input.idleMs) stale.push(entry); + } + for (const [key, entry] of stale) { + input.handles.delete(key); + await entry.runtime.close({ + handle: entry.handle, + reason: "paperclip idle cleanup", + discardPersistentState: false, + }).catch(() => {}); + } +} + +function warmHandleMatches( + entry: RuntimeCacheEntry | undefined, + runtime: AcpRuntime, + handle: AcpRuntimeHandle, +): boolean { + return entry?.runtime === runtime && entry.handle === handle; +} + +export function createAcpxLocalExecutor(deps: ExecuteDeps = {}) { + const createRuntime = deps.createRuntime ?? createAcpRuntime; + const now = deps.now ?? (() => Date.now()); + const warmHandles = deps.warmHandles ?? defaultWarmHandles; + + return async function executeAcpxLocal(ctx: AdapterExecutionContext): Promise { + const prepared = await buildRuntime({ ctx }); + const warmIdleMs = asNumber(ctx.config.warmHandleIdleMs, DEFAULT_WARM_HANDLE_IDLE_MS); + await cleanupIdleHandles({ handles: warmHandles, now: now(), idleMs: warmIdleMs }); + + const previousParams = parseObject(ctx.runtime.sessionParams); + const canResume = isCompatibleSession(previousParams, prepared); + const resumeSessionId = canResume ? asString(previousParams.acpSessionId, "") || undefined : undefined; + const cached = canResume ? warmHandles.get(prepared.sessionKey) : undefined; + const runtimeOptions: AcpRuntimeOptions = { + cwd: prepared.cwd, + sessionStore: createRuntimeStore({ stateDir: prepared.stateDir }), + agentRegistry: prepared.agentRegistry, + permissionMode: prepared.permissionMode, + nonInteractivePermissions: prepared.nonInteractivePermissions, + timeoutMs: prepared.timeoutSec > 0 ? prepared.timeoutSec * 1000 : undefined, + }; + const runtime = cached?.runtime ?? createRuntime(runtimeOptions); + if (!canResume && asString(previousParams.runtimeSessionName, "")) { + await ctx.onLog( + "stdout", + `[paperclip] ACPX session "${asString(previousParams.runtimeSessionName, "")}" does not match the current agent/cwd/mode/runtime identity; starting fresh in "${prepared.cwd}".\n`, + ); + } + + let handle = cached?.handle ?? null; + let resumedSession = Boolean(handle ?? resumeSessionId); + let clearSession = false; + + try { + if (!handle) { + try { + handle = await runtime.ensureSession({ + sessionKey: prepared.sessionKey, + agent: prepared.acpxAgent, + mode: prepared.mode, + cwd: prepared.cwd, + resumeSessionId, + }); + } catch (err) { + if (!resumeSessionId || !isResumeFailure(err)) throw err; + clearSession = true; + resumedSession = false; + await ctx.onLog( + "stdout", + `[paperclip] ACPX resume session "${resumeSessionId}" is unavailable; retrying with a fresh session.\n`, + ); + handle = await runtime.ensureSession({ + sessionKey: prepared.sessionKey, + agent: prepared.acpxAgent, + mode: prepared.mode, + cwd: prepared.cwd, + }); + } + } + } catch (err) { + const classified = classifyError(err); + const message = err instanceof Error ? err.message : String(err); + await emitAcpxLog(ctx, { type: "acpx.error", message, ...classified.errorMeta }); + return { + exitCode: 1, + signal: null, + timedOut: false, + errorMessage: message, + ...classified, + provider: "acpx", + model: null, + clearSession, + resultJson: { phase: "ensure_session" }, + summary: message, + }; + } + + if (!handle) { + return { + exitCode: 1, + signal: null, + timedOut: false, + errorMessage: "ACPX did not return a runtime session handle.", + errorCode: "acpx_runtime_error", + provider: "acpx", + model: null, + resultJson: { phase: "ensure_session" }, + summary: "ACPX did not return a runtime session handle.", + }; + } + const sessionHandle = handle; + const { prompt, promptMetrics, commandNotes } = await buildPrompt(ctx, resumedSession); + const runPrompt = joinPromptSections([prepared.skillPromptInstructions, prompt]); + await emitAcpxLog(ctx, { + type: "acpx.session", + agent: prepared.acpxAgent, + sessionId: sessionHandle.backendSessionId, + acpSessionId: sessionHandle.backendSessionId, + agentSessionId: sessionHandle.agentSessionId, + runtimeSessionName: sessionHandle.runtimeSessionName, + mode: prepared.mode, + permissionMode: prepared.permissionMode, + }); + if (ctx.onMeta) { + await ctx.onMeta({ + adapterType: "acpx_local", + command: prepared.agentCommand ?? prepared.acpxAgent, + cwd: prepared.cwd, + commandNotes: [ + `ACPX runtime embedded in Paperclip with ${prepared.mode} session mode.`, + `Effective ACPX permission mode: ${prepared.permissionMode}.`, + ...(Array.isArray(prepared.skillsIdentity.commandNotes) + ? prepared.skillsIdentity.commandNotes.filter((note): note is string => typeof note === "string") + : []), + ...commandNotes, + ], + env: prepared.loggedEnv, + prompt: runPrompt, + promptMetrics, + context: ctx.context, + }); + } + + let cancelActiveTurn: ((reason: string) => Promise) | null = null; + let controller: AbortController | null = null; + let timeout: NodeJS.Timeout | null = null; + let timedOut = false; + const textParts: string[] = []; + try { + const timeoutMs = prepared.timeoutSec > 0 ? prepared.timeoutSec * 1000 : undefined; + controller = new AbortController(); + if (timeoutMs) { + timeout = setTimeout(() => { + timedOut = true; + controller?.abort(); + void cancelActiveTurn?.(`Timed out after ${prepared.timeoutSec}s`).catch(() => {}); + }, timeoutMs); + } + const turn = runtime.startTurn({ + handle: sessionHandle, + text: runPrompt, + mode: "prompt", + requestId: ctx.runId, + timeoutMs, + signal: controller?.signal, + }); + cancelActiveTurn = async (reason: string) => { + await turn.cancel({ reason }); + }; + for await (const event of turn.events) { + if (event.type === "text_delta") textParts.push(event.text); + await emitRuntimeEvent(ctx, event); + } + const terminal = await turn.result; + if (timeout) clearTimeout(timeout); + if (terminal.status === "failed" || terminal.status === "cancelled" || timedOut) { + if (warmHandleMatches(warmHandles.get(prepared.sessionKey), runtime, sessionHandle)) { + warmHandles.delete(prepared.sessionKey); + } + await runtime.close({ + handle: sessionHandle, + reason: timedOut ? "paperclip timeout cleanup" : `paperclip turn ${terminal.status}`, + discardPersistentState: terminal.status === "cancelled" || timedOut, + }).catch(() => {}); + } else if (prepared.mode === "persistent") { + const existing = warmHandles.get(prepared.sessionKey); + if (existing && !warmHandleMatches(existing, runtime, sessionHandle)) { + await runtime.close({ + handle: sessionHandle, + reason: "paperclip duplicate warm handle cleanup", + discardPersistentState: false, + }).catch(() => {}); + } else { + warmHandles.set(prepared.sessionKey, { + runtime, + handle: sessionHandle, + fingerprint: prepared.fingerprint, + lastUsedAt: now(), + }); + } + } + + const errorMessage = timedOut + ? `Timed out after ${prepared.timeoutSec}s` + : resultErrorMessage(terminal); + const terminalStopReason = terminal.status === "failed" ? terminal.error.message : terminal.stopReason; + await emitAcpxLog(ctx, { + type: terminal.status === "completed" ? "acpx.result" : "acpx.error", + summary: terminal.status, + stopReason: terminalStopReason, + message: errorMessage, + }); + return { + exitCode: terminal.status === "completed" ? 0 : 1, + signal: timedOut ? "SIGTERM" : null, + timedOut, + errorMessage, + errorCode: terminal.status === "failed" ? "acpx_turn_failed" : timedOut ? "acpx_timeout" : null, + sessionId: sessionHandle.backendSessionId ?? sessionHandle.runtimeSessionName, + sessionParams: buildSessionParams({ prepared, handle: sessionHandle }), + sessionDisplayId: sessionHandle.agentSessionId ?? sessionHandle.backendSessionId ?? sessionHandle.runtimeSessionName, + provider: "acpx", + model: null, + billingType: "unknown", + costUsd: null, + resultJson: { + status: terminal.status, + stopReason: terminalStopReason, + permissionMode: prepared.permissionMode, + mode: prepared.mode, + }, + summary: textParts.join("").trim() || terminalStopReason || terminal.status, + clearSession, + }; + } catch (err) { + if (timeout) clearTimeout(timeout); + const classified = classifyError(err); + const message = timedOut ? `Timed out after ${prepared.timeoutSec}s` : err instanceof Error ? err.message : String(err); + const cancel = cancelActiveTurn as ((reason: string) => Promise) | null; + if (cancel) await cancel(message).catch(() => {}); + await runtime.close({ + handle: sessionHandle, + reason: timedOut ? "paperclip timeout cleanup" : "paperclip error cleanup", + discardPersistentState: timedOut, + }).catch(() => {}); + if (warmHandleMatches(warmHandles.get(prepared.sessionKey), runtime, sessionHandle)) { + warmHandles.delete(prepared.sessionKey); + } + await emitAcpxLog(ctx, { type: "acpx.error", message, ...classified.errorMeta }); + return { + exitCode: 1, + signal: timedOut ? "SIGTERM" : null, + timedOut, + errorMessage: message, + errorCode: timedOut ? "acpx_timeout" : classified.errorCode, + errorMeta: classified.errorMeta, + provider: "acpx", + model: null, + clearSession: clearSession || timedOut, + resultJson: { phase: "turn" }, + summary: message, + }; + } + }; +} + +export const execute = createAcpxLocalExecutor(); diff --git a/packages/adapters/acpx-local/src/server/index.ts b/packages/adapters/acpx-local/src/server/index.ts new file mode 100644 index 00000000..7463c952 --- /dev/null +++ b/packages/adapters/acpx-local/src/server/index.ts @@ -0,0 +1,5 @@ +export { execute, createAcpxLocalExecutor } from "./execute.js"; +export { testEnvironment } from "./test.js"; +export { getConfigSchema } from "./config-schema.js"; +export { sessionCodec } from "./session-codec.js"; +export { listAcpxSkills, syncAcpxSkills } from "./skills.js"; diff --git a/packages/adapters/acpx-local/src/server/session-codec.ts b/packages/adapters/acpx-local/src/server/session-codec.ts new file mode 100644 index 00000000..2045adcd --- /dev/null +++ b/packages/adapters/acpx-local/src/server/session-codec.ts @@ -0,0 +1,50 @@ +import type { AdapterSessionCodec } from "@paperclipai/adapter-utils"; + +function readString(value: unknown): string | null { + return typeof value === "string" && value.trim().length > 0 ? value.trim() : null; +} + +function readRecord(value: unknown): Record | null { + return typeof value === "object" && value !== null && !Array.isArray(value) ? { ...(value as Record) } : null; +} + +export const sessionCodec: AdapterSessionCodec = { + deserialize(raw: unknown) { + if (typeof raw !== "object" || raw === null || Array.isArray(raw)) return null; + const record = raw as Record; + const runtimeSessionName = readString(record.runtimeSessionName); + const acpSessionId = readString(record.acpSessionId); + const agentSessionId = readString(record.agentSessionId); + const remoteExecution = readRecord(record.remoteExecution); + if (!runtimeSessionName && !acpSessionId && !agentSessionId) return null; + + return { + ...(runtimeSessionName ? { runtimeSessionName } : {}), + ...(readString(record.sessionKey) ? { sessionKey: readString(record.sessionKey) } : {}), + ...(readString(record.acpxRecordId) ? { acpxRecordId: readString(record.acpxRecordId) } : {}), + ...(acpSessionId ? { acpSessionId } : {}), + ...(agentSessionId ? { agentSessionId } : {}), + ...(readString(record.agent) ? { agent: readString(record.agent) } : {}), + ...(readString(record.cwd) ? { cwd: readString(record.cwd) } : {}), + ...(readString(record.mode) ? { mode: readString(record.mode) } : {}), + ...(readString(record.stateDir) ? { stateDir: readString(record.stateDir) } : {}), + ...(readString(record.configFingerprint) ? { configFingerprint: readString(record.configFingerprint) } : {}), + ...(readString(record.workspaceId) ? { workspaceId: readString(record.workspaceId) } : {}), + ...(readString(record.repoUrl) ? { repoUrl: readString(record.repoUrl) } : {}), + ...(readString(record.repoRef) ? { repoRef: readString(record.repoRef) } : {}), + ...(remoteExecution ? { remoteExecution } : {}), + }; + }, + serialize(params: Record | null) { + if (!params) return null; + return this.deserialize(params); + }, + getDisplayId(params: Record | null) { + if (!params) return null; + return ( + readString(params.runtimeSessionName) ?? + readString(params.acpSessionId) ?? + readString(params.agentSessionId) + ); + }, +}; diff --git a/packages/adapters/acpx-local/src/server/skills.ts b/packages/adapters/acpx-local/src/server/skills.ts new file mode 100644 index 00000000..16065b36 --- /dev/null +++ b/packages/adapters/acpx-local/src/server/skills.ts @@ -0,0 +1,106 @@ +import path from "node:path"; +import { fileURLToPath } from "node:url"; +import type { + AdapterSkillContext, + AdapterSkillEntry, + AdapterSkillSnapshot, +} from "@paperclipai/adapter-utils"; +import { + readPaperclipRuntimeSkillEntries, + resolvePaperclipDesiredSkillNames, +} from "@paperclipai/adapter-utils/server-utils"; + +const __moduleDir = path.dirname(fileURLToPath(import.meta.url)); + +type AcpxSkillAgent = "claude" | "codex" | "custom"; + +function normalizeAcpxSkillAgent(config: Record): AcpxSkillAgent { + const configured = typeof config.agent === "string" ? config.agent.trim() : ""; + if (configured === "codex" || configured === "custom") return configured; + if (configured === "claude" || configured === "") return "claude"; + return "claude"; +} + +function configuredDetail(agent: AcpxSkillAgent): string { + if (agent === "codex") { + return "Will be linked into the effective CODEX_HOME/skills/ directory for the next ACPX Codex session."; + } + return "Will be mounted into the next ACPX Claude session."; +} + +function unsupportedDetail(): string { + return "Desired state is stored in Paperclip only; custom ACP commands need an explicit skill integration contract before runtime sync is available."; +} + +async function buildAcpxSkillSnapshot(config: Record): Promise { + const acpxAgent = normalizeAcpxSkillAgent(config); + const availableEntries = await readPaperclipRuntimeSkillEntries(config, __moduleDir); + const availableByKey = new Map(availableEntries.map((entry) => [entry.key, entry])); + const desiredSkills = resolvePaperclipDesiredSkillNames(config, availableEntries); + const desiredSet = new Set(desiredSkills); + const supported = acpxAgent !== "custom"; + const warnings: string[] = supported + ? [] + : [ + "Custom ACP commands do not expose a Paperclip skill integration contract yet; selected skills are tracked only.", + ]; + + const entries: AdapterSkillEntry[] = availableEntries.map((entry) => { + const desired = desiredSet.has(entry.key); + return { + key: entry.key, + runtimeName: entry.runtimeName, + desired, + managed: true, + state: desired ? "configured" : "available", + origin: entry.required ? "paperclip_required" : "company_managed", + originLabel: entry.required ? "Required by Paperclip" : "Managed by Paperclip", + readOnly: false, + sourcePath: entry.source, + targetPath: null, + detail: desired ? (supported ? configuredDetail(acpxAgent) : unsupportedDetail()) : null, + required: Boolean(entry.required), + requiredReason: entry.requiredReason ?? null, + }; + }); + + for (const desiredSkill of desiredSkills) { + if (availableByKey.has(desiredSkill)) continue; + warnings.push(`Desired skill "${desiredSkill}" is not available from the Paperclip skills directory.`); + entries.push({ + key: desiredSkill, + runtimeName: null, + desired: true, + managed: true, + state: "missing", + origin: "external_unknown", + originLabel: "External or unavailable", + readOnly: false, + sourcePath: null, + targetPath: null, + detail: "Paperclip cannot find this skill in the local runtime skills directory.", + }); + } + + entries.sort((left, right) => left.key.localeCompare(right.key)); + + return { + adapterType: "acpx_local", + supported, + mode: supported ? "ephemeral" : "unsupported", + desiredSkills, + entries, + warnings, + }; +} + +export async function listAcpxSkills(ctx: AdapterSkillContext): Promise { + return buildAcpxSkillSnapshot(ctx.config); +} + +export async function syncAcpxSkills( + ctx: AdapterSkillContext, + _desiredSkills: string[], +): Promise { + return buildAcpxSkillSnapshot(ctx.config); +} diff --git a/packages/adapters/acpx-local/src/server/test.test.ts b/packages/adapters/acpx-local/src/server/test.test.ts new file mode 100644 index 00000000..f5744f54 --- /dev/null +++ b/packages/adapters/acpx-local/src/server/test.test.ts @@ -0,0 +1,49 @@ +import { afterEach, describe, expect, it } from "vitest"; +import { testEnvironment } from "./test.js"; + +const originalNodeVersion = process.version; + +function setNodeVersion(version: string): void { + Object.defineProperty(process, "version", { + configurable: true, + enumerable: true, + value: version, + }); +} + +afterEach(() => { + setNodeVersion(originalNodeVersion); +}); + +describe("acpx_local environment diagnostics", () => { + it("does not force healthy default Claude diagnostics to warn", async () => { + setNodeVersion("v22.12.0"); + + const result = await testEnvironment({ + adapterType: "acpx_local", + companyId: "test-company", + config: { agent: "claude" }, + }); + + expect(result.status).toBe("pass"); + expect(result.checks).toContainEqual( + expect.objectContaining({ + code: "acpx_agent_selected", + level: "info", + message: "ACP agent selected: claude", + }), + ); + expect(result.checks).toContainEqual( + expect.objectContaining({ + code: "acpx_runtime_scaffold", + level: "info", + }), + ); + expect(result.checks).not.toContainEqual( + expect.objectContaining({ + code: "acpx_runtime_scaffold", + level: "warn", + }), + ); + }); +}); diff --git a/packages/adapters/acpx-local/src/server/test.ts b/packages/adapters/acpx-local/src/server/test.ts new file mode 100644 index 00000000..f19304e8 --- /dev/null +++ b/packages/adapters/acpx-local/src/server/test.ts @@ -0,0 +1,295 @@ +import { createRequire } from "node:module"; +import fs from "node:fs/promises"; +import os from "node:os"; +import path from "node:path"; +import type { + AdapterEnvironmentCheck, + AdapterEnvironmentTestContext, + AdapterEnvironmentTestResult, +} from "@paperclipai/adapter-utils"; +import { + asString, + parseObject, +} from "@paperclipai/adapter-utils/server-utils"; + +const require = createRequire(import.meta.url); +const MIN_NODE_MAJOR = 22; +const MIN_NODE_MINOR = 12; +const MIN_NODE_PATCH = 0; + +function summarizeStatus(checks: AdapterEnvironmentCheck[]): AdapterEnvironmentTestResult["status"] { + if (checks.some((check) => check.level === "error")) return "fail"; + if (checks.some((check) => check.level === "warn")) return "warn"; + return "pass"; +} + +function nodeVersionMeetsMinimum(version: string): boolean { + const [major = 0, minor = 0, patch = 0] = version + .replace(/^v/, "") + .split(".") + .map((part) => Number.parseInt(part, 10)); + if (major > MIN_NODE_MAJOR) return true; + if (major < MIN_NODE_MAJOR) return false; + if (minor > MIN_NODE_MINOR) return true; + if (minor < MIN_NODE_MINOR) return false; + return patch >= MIN_NODE_PATCH; +} + +function isNonEmpty(value: unknown): value is string { + return typeof value === "string" && value.trim().length > 0; +} + +function getStringEnv(configEnv: Record, key: string): string | undefined { + const configured = configEnv[key]; + if (typeof configured === "string") return configured; + return process.env[key]; +} + +function credentialSource(configEnv: Record, key: string): string { + return typeof configEnv[key] === "string" ? "adapter config env" : "server environment"; +} + +async function readJsonObject(filePath: string): Promise | null> { + try { + const parsed = JSON.parse(await fs.readFile(filePath, "utf8")) as unknown; + return typeof parsed === "object" && parsed !== null && !Array.isArray(parsed) + ? parsed as Record + : null; + } catch { + return null; + } +} + +function readNestedString(record: Record, pathSegments: string[]): string | null { + let current: unknown = record; + for (const segment of pathSegments) { + if (typeof current !== "object" || current === null || Array.isArray(current)) return null; + current = (current as Record)[segment]; + } + return isNonEmpty(current) ? current.trim() : null; +} + +async function hasClaudeSubscriptionCredentials(configDir: string): Promise { + for (const filename of [".credentials.json", "credentials.json"]) { + const credentials = await readJsonObject(path.join(configDir, filename)); + if (!credentials) continue; + if (readNestedString(credentials, ["claudeAiOauth", "accessToken"])) return true; + } + return false; +} + +async function hasCodexNativeCredentials(codexHome: string): Promise { + const auth = await readJsonObject(path.join(codexHome, "auth.json")); + if (!auth) return false; + return Boolean( + readNestedString(auth, ["accessToken"]) || + readNestedString(auth, ["tokens", "access_token"]) || + readNestedString(auth, ["OPENAI_API_KEY"]), + ); +} + +async function buildCredentialHintChecks( + agent: string, + configEnv: Record, +): Promise { + if (agent === "claude") { + const bedrockFlag = getStringEnv(configEnv, "CLAUDE_CODE_USE_BEDROCK"); + const bedrockBaseUrl = getStringEnv(configEnv, "ANTHROPIC_BEDROCK_BASE_URL"); + const hasBedrock = + bedrockFlag === "1" || + /^true$/i.test(bedrockFlag ?? "") || + isNonEmpty(bedrockBaseUrl); + const bedrockSourceKey = isNonEmpty(bedrockFlag) + ? "CLAUDE_CODE_USE_BEDROCK" + : "ANTHROPIC_BEDROCK_BASE_URL"; + const anthropicApiKey = getStringEnv(configEnv, "ANTHROPIC_API_KEY"); + const claudeConfigDir = isNonEmpty(getStringEnv(configEnv, "CLAUDE_CONFIG_DIR")) + ? path.resolve(getStringEnv(configEnv, "CLAUDE_CONFIG_DIR") as string) + : path.join(os.homedir(), ".claude"); + + if (hasBedrock) { + return [{ + code: "acpx_claude_bedrock_auth_detected", + level: "info", + message: "Claude credential hint: Bedrock auth indicators are configured.", + detail: `Detected in ${credentialSource(configEnv, bedrockSourceKey)}.`, + hint: "Ensure AWS credentials and AWS_REGION are available to the ACPX-launched Claude agent.", + }]; + } + + if (isNonEmpty(anthropicApiKey)) { + return [{ + code: "acpx_claude_anthropic_api_key_detected", + level: "info", + message: "Claude credential hint: ANTHROPIC_API_KEY is set.", + detail: `Detected in ${credentialSource(configEnv, "ANTHROPIC_API_KEY")}.`, + }]; + } + + if (await hasClaudeSubscriptionCredentials(claudeConfigDir)) { + return [{ + code: "acpx_claude_subscription_auth_detected", + level: "info", + message: "Claude credential hint: local Claude subscription credentials were found.", + detail: `Credentials found in ${claudeConfigDir}.`, + }]; + } + + return [{ + code: "acpx_claude_credentials_missing", + level: "info", + message: "Claude credential hint: no Claude API, Bedrock, or local subscription credentials were detected.", + hint: "Set ANTHROPIC_API_KEY, configure Bedrock, or run `claude login` before starting an ACPX Claude agent.", + }]; + } + + if (agent === "codex") { + const openAiApiKey = getStringEnv(configEnv, "OPENAI_API_KEY"); + const codexHome = isNonEmpty(getStringEnv(configEnv, "CODEX_HOME")) + ? path.resolve(getStringEnv(configEnv, "CODEX_HOME") as string) + : path.join(os.homedir(), ".codex"); + + if (isNonEmpty(openAiApiKey)) { + return [{ + code: "acpx_codex_openai_api_key_detected", + level: "info", + message: "Codex credential hint: OPENAI_API_KEY is set.", + detail: `Detected in ${credentialSource(configEnv, "OPENAI_API_KEY")}.`, + }]; + } + + if (await hasCodexNativeCredentials(codexHome)) { + return [{ + code: "acpx_codex_native_auth_detected", + level: "info", + message: "Codex credential hint: local Codex auth configuration was found.", + detail: `Credentials found in ${path.join(codexHome, "auth.json")}.`, + }]; + } + + return [{ + code: "acpx_codex_credentials_missing", + level: "info", + message: "Codex credential hint: no OpenAI API key or local Codex auth configuration was detected.", + hint: "Set OPENAI_API_KEY or run `codex login` before starting an ACPX Codex agent.", + }]; + } + + return []; +} + +function resolvePackage(name: string): AdapterEnvironmentCheck { + try { + const resolved = require.resolve(`${name}/package.json`); + return { + code: `acpx_package_${name.replace(/[^a-z0-9]+/gi, "_").toLowerCase()}_present`, + level: "info", + message: `${name} is resolvable.`, + detail: resolved, + }; + } catch { + return { + code: `acpx_package_${name.replace(/[^a-z0-9]+/gi, "_").toLowerCase()}_missing`, + level: "error", + message: `${name} is not resolvable from the acpx_local adapter package.`, + hint: "Run pnpm install so the ACPX adapter dependencies are installed.", + }; + } +} + +async function checkDirectory(pathValue: string, code: string, label: string): Promise { + const dir = pathValue.trim(); + if (!dir) return null; + try { + await fs.mkdir(dir, { recursive: true }); + await fs.access(dir); + return { + code, + level: "info", + message: `${label} is writable: ${dir}`, + }; + } catch (err) { + return { + code: `${code}_invalid`, + level: "error", + message: err instanceof Error ? err.message : `${label} is not writable.`, + detail: dir, + }; + } +} + +export async function testEnvironment( + ctx: AdapterEnvironmentTestContext, +): Promise { + const config = parseObject(ctx.config); + const envConfig = parseObject(config.env); + const configEnv: Record = {}; + for (const [key, value] of Object.entries(envConfig)) { + if (typeof value === "string") configEnv[key] = value; + } + const checks: AdapterEnvironmentCheck[] = []; + const nodeVersion = process.version; + + checks.push({ + code: nodeVersionMeetsMinimum(nodeVersion) ? "acpx_node_supported" : "acpx_node_unsupported", + level: nodeVersionMeetsMinimum(nodeVersion) ? "info" : "error", + message: nodeVersionMeetsMinimum(nodeVersion) + ? `Node ${nodeVersion} satisfies ACPX's >=22.12.0 requirement.` + : `Node ${nodeVersion} does not satisfy ACPX's >=22.12.0 requirement.`, + hint: nodeVersionMeetsMinimum(nodeVersion) + ? undefined + : "Run acpx_local agents with Node >=22.12.0 or use claude_local/codex_local on Node 20.", + }); + + checks.push(resolvePackage("acpx")); + checks.push(resolvePackage("@agentclientprotocol/claude-agent-acp")); + checks.push(resolvePackage("@zed-industries/codex-acp")); + + const agent = asString(config.agent, "claude"); + if (!["claude", "codex", "custom"].includes(agent)) { + checks.push({ + code: "acpx_agent_invalid", + level: "error", + message: `Unsupported ACP agent: ${agent}`, + hint: "Use agent=claude, agent=codex, or agent=custom.", + }); + } else { + checks.push({ + code: "acpx_agent_selected", + level: "info", + message: `ACP agent selected: ${agent}`, + }); + checks.push(...await buildCredentialHintChecks(agent, configEnv)); + } + + if (agent === "custom" && !asString(config.agentCommand, "")) { + checks.push({ + code: "acpx_custom_command_missing", + level: "error", + message: "agentCommand is required when agent=custom.", + }); + } + + const stateDirCheck = await checkDirectory(asString(config.stateDir, ""), "acpx_state_dir_writable", "ACPX state directory"); + if (stateDirCheck) checks.push(stateDirCheck); + + const permissionMode = asString(config.permissionMode, "approve-all"); + checks.push({ + code: "acpx_permission_mode", + level: "info", + message: `Effective permission mode: ${permissionMode || "approve-all"}`, + }); + + checks.push({ + code: "acpx_runtime_scaffold", + level: "info", + message: "acpx_local runtime execution is available through the bundled ACPX runtime.", + }); + + return { + adapterType: ctx.adapterType, + status: summarizeStatus(checks), + checks, + testedAt: new Date().toISOString(), + }; +} diff --git a/packages/adapters/acpx-local/src/ui/build-config.ts b/packages/adapters/acpx-local/src/ui/build-config.ts new file mode 100644 index 00000000..445686dc --- /dev/null +++ b/packages/adapters/acpx-local/src/ui/build-config.ts @@ -0,0 +1,139 @@ +import type { CreateConfigValues } from "@paperclipai/adapter-utils"; +import { + DEFAULT_ACPX_LOCAL_AGENT, + DEFAULT_ACPX_LOCAL_MODE, + DEFAULT_ACPX_LOCAL_NON_INTERACTIVE_PERMISSIONS, + DEFAULT_ACPX_LOCAL_PERMISSION_MODE, + DEFAULT_ACPX_LOCAL_TIMEOUT_SEC, +} from "../index.js"; + +function parseCommaArgs(value: string): string[] { + return value + .split(",") + .map((item) => item.trim()) + .filter(Boolean); +} + +function parseEnvVars(text: string): Record { + const env: Record = {}; + for (const line of text.split(/\r?\n/)) { + const trimmed = line.trim(); + if (!trimmed || trimmed.startsWith("#")) continue; + const eq = trimmed.indexOf("="); + if (eq <= 0) continue; + const key = trimmed.slice(0, eq).trim(); + const value = trimmed.slice(eq + 1); + if (!/^[A-Za-z_][A-Za-z0-9_]*$/.test(key)) continue; + env[key] = value; + } + return env; +} + +function parseEnvBindings(bindings: unknown): Record { + if (typeof bindings !== "object" || bindings === null || Array.isArray(bindings)) return {}; + const env: Record = {}; + for (const [key, raw] of Object.entries(bindings)) { + if (!/^[A-Za-z_][A-Za-z0-9_]*$/.test(key)) continue; + if (typeof raw === "string") { + env[key] = { type: "plain", value: raw }; + continue; + } + if (typeof raw !== "object" || raw === null || Array.isArray(raw)) continue; + const rec = raw as Record; + if (rec.type === "plain" && typeof rec.value === "string") { + env[key] = { type: "plain", value: rec.value }; + continue; + } + if (rec.type === "secret_ref" && typeof rec.secretId === "string") { + env[key] = { + type: "secret_ref", + secretId: rec.secretId, + ...(typeof rec.version === "number" || rec.version === "latest" + ? { version: rec.version } + : {}), + }; + } + } + return env; +} + +function parseJsonObject(text: string): Record | null { + const trimmed = text.trim(); + if (!trimmed) return null; + try { + const parsed = JSON.parse(trimmed); + if (typeof parsed !== "object" || parsed === null || Array.isArray(parsed)) return null; + return parsed as Record; + } catch { + return null; + } +} + +function readNumber(value: unknown, fallback: number): number { + if (typeof value === "number" && Number.isFinite(value)) return value; + if (typeof value === "string" && value.trim()) { + const parsed = Number(value); + if (Number.isFinite(parsed)) return parsed; + } + return fallback; +} + +export function buildAcpxLocalConfig(v: CreateConfigValues): Record { + const schemaValues = v.adapterSchemaValues ?? {}; + const ac: Record = { + agent: schemaValues.agent || DEFAULT_ACPX_LOCAL_AGENT, + mode: schemaValues.mode || DEFAULT_ACPX_LOCAL_MODE, + permissionMode: schemaValues.permissionMode || DEFAULT_ACPX_LOCAL_PERMISSION_MODE, + nonInteractivePermissions: + schemaValues.nonInteractivePermissions || DEFAULT_ACPX_LOCAL_NON_INTERACTIVE_PERMISSIONS, + timeoutSec: readNumber(schemaValues.timeoutSec, DEFAULT_ACPX_LOCAL_TIMEOUT_SEC), + }; + + for (const key of [ + "agentCommand", + "cwd", + "stateDir", + "instructionsFilePath", + "promptTemplate", + "bootstrapPromptTemplate", + ]) { + const value = schemaValues[key]; + if (typeof value === "string" && value.trim()) ac[key] = value.trim(); + } + + if (!ac.cwd && v.cwd) ac.cwd = v.cwd; + if (!ac.instructionsFilePath && v.instructionsFilePath) ac.instructionsFilePath = v.instructionsFilePath; + if (!ac.promptTemplate && v.promptTemplate) ac.promptTemplate = v.promptTemplate; + if (!ac.bootstrapPromptTemplate && v.bootstrapPrompt) ac.bootstrapPromptTemplate = v.bootstrapPrompt; + + const env = parseEnvBindings(v.envBindings); + const legacy = parseEnvVars(v.envVars); + for (const [key, value] of Object.entries(legacy)) { + if (!Object.prototype.hasOwnProperty.call(env, key)) { + env[key] = { type: "plain", value }; + } + } + if (typeof schemaValues.env === "string") { + const schemaEnv = parseJsonObject(schemaValues.env); + if (schemaEnv) Object.assign(env, schemaEnv); + } else if (typeof schemaValues.env === "object" && schemaValues.env !== null && !Array.isArray(schemaValues.env)) { + Object.assign(env, schemaValues.env as Record); + } + if (Object.keys(env).length > 0) ac.env = env; + + if (v.workspaceStrategyType === "git_worktree") { + ac.workspaceStrategy = { + type: "git_worktree", + ...(v.workspaceBaseRef ? { baseRef: v.workspaceBaseRef } : {}), + ...(v.workspaceBranchTemplate ? { branchTemplate: v.workspaceBranchTemplate } : {}), + ...(v.worktreeParentDir ? { worktreeParentDir: v.worktreeParentDir } : {}), + }; + } + const runtimeServices = parseJsonObject(v.runtimeServicesJson ?? ""); + if (runtimeServices && Array.isArray(runtimeServices.services)) { + ac.workspaceRuntime = runtimeServices; + } + if (v.command) ac.command = v.command; + if (v.extraArgs) ac.extraArgs = parseCommaArgs(v.extraArgs); + return ac; +} diff --git a/packages/adapters/acpx-local/src/ui/index.ts b/packages/adapters/acpx-local/src/ui/index.ts new file mode 100644 index 00000000..629baaad --- /dev/null +++ b/packages/adapters/acpx-local/src/ui/index.ts @@ -0,0 +1,2 @@ +export { parseAcpxStdoutLine } from "./parse-stdout.js"; +export { buildAcpxLocalConfig } from "./build-config.js"; diff --git a/packages/adapters/acpx-local/src/ui/parse-stdout.test.ts b/packages/adapters/acpx-local/src/ui/parse-stdout.test.ts new file mode 100644 index 00000000..80fb2671 --- /dev/null +++ b/packages/adapters/acpx-local/src/ui/parse-stdout.test.ts @@ -0,0 +1,160 @@ +import { describe, expect, it } from "vitest"; +import { parseAcpxStdoutLine } from "./parse-stdout.js"; + +const TS = "2026-04-30T00:00:00.000Z"; + +function emit(payload: Record): string { + return JSON.stringify(payload); +} + +describe("parseAcpxStdoutLine", () => { + it("renders an init entry from acpx.session", () => { + const entries = parseAcpxStdoutLine( + emit({ + type: "acpx.session", + agent: "claude", + acpSessionId: "acp-1", + runtimeSessionName: "runtime-1", + mode: "persistent", + permissionMode: "approve-all", + }), + TS, + ); + expect(entries).toEqual([ + { + kind: "init", + ts: TS, + model: "claude (persistent / approve-all)", + sessionId: "acp-1", + }, + ]); + }); + + it("routes output text_delta to the assistant transcript", () => { + const entries = parseAcpxStdoutLine( + emit({ type: "acpx.text_delta", text: "hello", channel: "output", tag: "agent_message_chunk" }), + TS, + ); + expect(entries).toEqual([ + { kind: "assistant", ts: TS, text: "hello", delta: true }, + ]); + }); + + it("routes thought text_delta to the thinking transcript", () => { + const entries = parseAcpxStdoutLine( + emit({ type: "acpx.text_delta", text: "thinking…", channel: "thought" }), + TS, + ); + expect(entries).toEqual([ + { kind: "thinking", ts: TS, text: "thinking…", delta: true }, + ]); + }); + + it("falls back to stream when channel is missing", () => { + const entries = parseAcpxStdoutLine( + emit({ type: "acpx.text_delta", text: "thinking…", stream: "thought" }), + TS, + ); + expect(entries[0]).toMatchObject({ kind: "thinking" }); + }); + + it("renders status events as system text with optional ctx usage", () => { + expect( + parseAcpxStdoutLine( + emit({ type: "acpx.status", text: "thinking", tag: "agent_thought_chunk" }), + TS, + ), + ).toEqual([{ kind: "system", ts: TS, text: "thinking" }]); + + expect( + parseAcpxStdoutLine( + emit({ type: "acpx.status", tag: "context_window", used: 12000, size: 200000 }), + TS, + ), + ).toEqual([{ kind: "system", ts: TS, text: "context_window (12000/200000 ctx)" }]); + }); + + it("emits a tool_call entry that preserves toolCallId, status, and input", () => { + const entries = parseAcpxStdoutLine( + emit({ + type: "acpx.tool_call", + name: "read", + toolCallId: "tool-1", + status: "running", + text: "read README.md", + }), + TS, + ); + expect(entries).toEqual([ + { + kind: "tool_call", + ts: TS, + name: "read", + toolUseId: "tool-1", + input: { text: "read README.md", status: "running" }, + }, + ]); + }); + + it("emits a paired tool_result entry when a tool_call reports terminal status", () => { + const completed = parseAcpxStdoutLine( + emit({ + type: "acpx.tool_call", + name: "read", + toolCallId: "tool-1", + status: "completed", + text: "ok", + }), + TS, + ); + expect(completed[1]).toEqual({ + kind: "tool_result", + ts: TS, + toolUseId: "tool-1", + toolName: "read", + content: "ok", + isError: false, + }); + + const failed = parseAcpxStdoutLine( + emit({ + type: "acpx.tool_call", + name: "edit", + toolCallId: "tool-2", + status: "failed", + text: "permission denied", + }), + TS, + ); + expect(failed[1]).toMatchObject({ kind: "tool_result", isError: true, content: "permission denied" }); + }); + + it("renders acpx.result with summary fallback to stopReason", () => { + const entries = parseAcpxStdoutLine( + emit({ type: "acpx.result", summary: "completed", stopReason: "end_turn" }), + TS, + ); + expect(entries[0]).toMatchObject({ kind: "result", text: "completed", subtype: "end_turn", isError: false }); + }); + + it("treats acpx.error as a stderr entry", () => { + const entries = parseAcpxStdoutLine( + emit({ type: "acpx.error", message: "auth required", code: "ACP_AUTH" }), + TS, + ); + expect(entries).toEqual([{ kind: "stderr", ts: TS, text: "auth required" }]); + }); + + it("renders unknown acpx.* events as system entries", () => { + const entries = parseAcpxStdoutLine( + emit({ type: "acpx.misc", message: "unhandled" }), + TS, + ); + expect(entries).toEqual([{ kind: "system", ts: TS, text: "unhandled" }]); + }); + + it("falls back to a stdout entry for non-JSON lines", () => { + const entries = parseAcpxStdoutLine("not json", TS); + expect(entries).toEqual([{ kind: "stdout", ts: TS, text: "not json" }]); + }); +}); diff --git a/packages/adapters/acpx-local/src/ui/parse-stdout.ts b/packages/adapters/acpx-local/src/ui/parse-stdout.ts new file mode 100644 index 00000000..019e8f33 --- /dev/null +++ b/packages/adapters/acpx-local/src/ui/parse-stdout.ts @@ -0,0 +1,158 @@ +import type { TranscriptEntry } from "@paperclipai/adapter-utils"; + +function parseJson(line: string): Record | null { + try { + const parsed = JSON.parse(line); + if (typeof parsed !== "object" || parsed === null || Array.isArray(parsed)) return null; + return parsed as Record; + } catch { + return null; + } +} + +function asString(value: unknown, fallback = ""): string { + return typeof value === "string" ? value : fallback; +} + +function asNumber(value: unknown, fallback = 0): number { + return typeof value === "number" && Number.isFinite(value) ? value : fallback; +} + +function stringify(value: unknown): string { + if (typeof value === "string") return value; + if (value === null || value === undefined) return ""; + try { + return JSON.stringify(value, null, 2); + } catch { + return String(value); + } +} + +function pickToolUseId(parsed: Record): string { + return ( + asString(parsed.toolCallId) || + asString(parsed.toolUseId) || + asString(parsed.id) + ); +} + +function statusText(parsed: Record): string { + const text = asString(parsed.text).trim(); + const tag = asString(parsed.tag).trim(); + const used = asNumber(parsed.used, -1); + const size = asNumber(parsed.size, -1); + const parts: string[] = []; + if (text) parts.push(text); + if (tag && !text) parts.push(tag); + if (used >= 0 && size > 0) parts.push(`(${used}/${size} ctx)`); + return parts.join(" ") || tag || "status"; +} + +export function parseAcpxStdoutLine(line: string, ts: string): TranscriptEntry[] { + const parsed = parseJson(line); + if (!parsed) return [{ kind: "stdout", ts, text: line }]; + + const type = asString(parsed.type); + if (type === "acpx.session") { + const agent = asString(parsed.agent, "acpx"); + const mode = asString(parsed.mode); + const permissionMode = asString(parsed.permissionMode); + const tail = [mode, permissionMode].filter(Boolean).join(" / "); + return [{ + kind: "init", + ts, + model: tail ? `${agent} (${tail})` : agent, + sessionId: + asString(parsed.acpSessionId) || + asString(parsed.sessionId) || + asString(parsed.runtimeSessionName), + }]; + } + + if (type === "acpx.text_delta") { + const text = asString(parsed.text); + if (!text) return []; + const channel = asString(parsed.channel) || asString(parsed.stream); + return [{ + kind: channel === "thought" || channel === "thinking" ? "thinking" : "assistant", + ts, + text, + delta: true, + }]; + } + + if (type === "acpx.tool_call") { + const status = asString(parsed.status); + const text = asString(parsed.text); + const name = asString(parsed.name, "acp_tool"); + const toolUseId = pickToolUseId(parsed); + const input = + parsed.input !== undefined + ? parsed.input + : text || status + ? { ...(text ? { text } : {}), ...(status ? { status } : {}) } + : {}; + const entries: TranscriptEntry[] = [ + { + kind: "tool_call", + ts, + name, + toolUseId: toolUseId || undefined, + input, + }, + ]; + if (status === "completed" || status === "failed" || status === "cancelled") { + entries.push({ + kind: "tool_result", + ts, + toolUseId: toolUseId || name, + toolName: name, + content: text || status, + isError: status !== "completed", + }); + } + return entries; + } + + if (type === "acpx.tool_result") { + return [{ + kind: "tool_result", + ts, + toolUseId: pickToolUseId(parsed) || asString(parsed.name, "acp_tool"), + toolName: asString(parsed.name) || undefined, + content: stringify(parsed.content ?? parsed.output ?? parsed.error), + isError: parsed.isError === true || parsed.error !== undefined, + }]; + } + + if (type === "acpx.status") { + return [{ kind: "system", ts, text: statusText(parsed) }]; + } + + if (type === "acpx.result") { + return [{ + kind: "result", + ts, + text: asString(parsed.summary, asString(parsed.stopReason, asString(parsed.text))), + inputTokens: asNumber(parsed.inputTokens), + outputTokens: asNumber(parsed.outputTokens), + cachedTokens: asNumber(parsed.cachedTokens), + costUsd: asNumber(parsed.costUsd), + subtype: asString(parsed.subtype, asString(parsed.stopReason, "acpx.result")), + isError: parsed.isError === true, + errors: Array.isArray(parsed.errors) + ? parsed.errors.map((error) => stringify(error)).filter(Boolean) + : [], + }]; + } + + if (type === "acpx.error") { + return [{ kind: "stderr", ts, text: asString(parsed.message, line) }]; + } + + if (type.startsWith("acpx.")) { + return [{ kind: "system", ts, text: asString(parsed.message, type) }]; + } + + return [{ kind: "stdout", ts, text: line }]; +} diff --git a/packages/adapters/acpx-local/tsconfig.json b/packages/adapters/acpx-local/tsconfig.json new file mode 100644 index 00000000..e1b71318 --- /dev/null +++ b/packages/adapters/acpx-local/tsconfig.json @@ -0,0 +1,8 @@ +{ + "extends": "../../../tsconfig.base.json", + "compilerOptions": { + "outDir": "dist", + "rootDir": "src" + }, + "include": ["src"] +} diff --git a/packages/adapters/acpx-local/vitest.config.ts b/packages/adapters/acpx-local/vitest.config.ts new file mode 100644 index 00000000..f624398e --- /dev/null +++ b/packages/adapters/acpx-local/vitest.config.ts @@ -0,0 +1,7 @@ +import { defineConfig } from "vitest/config"; + +export default defineConfig({ + test: { + environment: "node", + }, +}); diff --git a/packages/shared/src/constants.ts b/packages/shared/src/constants.ts index 16211b38..8b196e93 100644 --- a/packages/shared/src/constants.ts +++ b/packages/shared/src/constants.ts @@ -30,6 +30,7 @@ export type AgentStatus = (typeof AGENT_STATUSES)[number]; export const AGENT_ADAPTER_TYPES = [ "process", "http", + "acpx_local", "claude_local", "codex_local", "gemini_local", diff --git a/packages/shared/src/environment-support.ts b/packages/shared/src/environment-support.ts index 0ebb3ff9..f63ad707 100644 --- a/packages/shared/src/environment-support.ts +++ b/packages/shared/src/environment-support.ts @@ -31,6 +31,7 @@ export interface EnvironmentCapabilities { } const REMOTE_MANAGED_ADAPTERS = new Set([ + "acpx_local", "claude_local", "codex_local", "cursor", diff --git a/scripts/capture-acpx-skills-screenshots.mjs b/scripts/capture-acpx-skills-screenshots.mjs new file mode 100644 index 00000000..ee184c66 --- /dev/null +++ b/scripts/capture-acpx-skills-screenshots.mjs @@ -0,0 +1,43 @@ +#!/usr/bin/env node +import path from "node:path"; +import fs from "node:fs/promises"; +import { fileURLToPath } from "node:url"; + +const repoRoot = path.dirname(path.dirname(fileURLToPath(import.meta.url))); +const playwrightPkgRoot = path.join(repoRoot, "node_modules/.pnpm/playwright@1.58.2/node_modules/playwright"); +const { chromium } = await import(path.join(playwrightPkgRoot, "index.mjs")); + +const baseUrl = process.env.STORYBOOK_BASE_URL ?? "http://127.0.0.1:6007"; +const outDir = process.env.OUT_DIR ?? path.join(repoRoot, "screenshots/pap-2999"); +await fs.mkdir(outDir, { recursive: true }); + +const stories = [ + { id: "adapters-acpx-local--skills-tab-claude", slug: "skills-claude" }, + { id: "adapters-acpx-local--skills-tab-codex", slug: "skills-codex" }, + { id: "adapters-acpx-local--skills-tab-custom", slug: "skills-custom" }, + { id: "adapters-acpx-local--skills-tab-loading", slug: "skills-loading" }, + { id: "adapters-acpx-local--skills-tab-empty-library", slug: "skills-empty-library" }, +]; + +const themes = [ + { name: "light", apply: false }, + { name: "dark", apply: true }, +]; + +const browser = await chromium.launch(); +try { + const context = await browser.newContext({ viewport: { width: 1280, height: 1100 } }); + const page = await context.newPage(); + for (const story of stories) { + for (const theme of themes) { + const url = `${baseUrl}/iframe.html?args=&id=${story.id}&viewMode=story&globals=theme:${theme.name}`; + await page.goto(url, { waitUntil: "load" }); + await page.waitForTimeout(1500); + const target = path.join(outDir, `${story.slug}-${theme.name}.png`); + await page.screenshot({ path: target, fullPage: true }); + console.log(`captured ${target}`); + } + } +} finally { + await browser.close(); +} diff --git a/scripts/run-vitest-stable.mjs b/scripts/run-vitest-stable.mjs index b9473434..e016719f 100644 --- a/scripts/run-vitest-stable.mjs +++ b/scripts/run-vitest-stable.mjs @@ -11,6 +11,7 @@ const nonServerProjects = [ "@paperclipai/shared", "@paperclipai/db", "@paperclipai/adapter-utils", + "@paperclipai/adapter-acpx-local", "@paperclipai/adapter-codex-local", "@paperclipai/adapter-opencode-local", "@paperclipai/ui", diff --git a/server/package.json b/server/package.json index ab81280e..bd19e53f 100644 --- a/server/package.json +++ b/server/package.json @@ -44,6 +44,7 @@ }, "dependencies": { "@aws-sdk/client-s3": "^3.888.0", + "@paperclipai/adapter-acpx-local": "workspace:*", "@paperclipai/adapter-claude-local": "workspace:*", "@paperclipai/adapter-codex-local": "workspace:*", "@paperclipai/adapter-cursor-local": "workspace:*", diff --git a/server/src/__tests__/acpx-local-adapter-environment.test.ts b/server/src/__tests__/acpx-local-adapter-environment.test.ts new file mode 100644 index 00000000..0883fae0 --- /dev/null +++ b/server/src/__tests__/acpx-local-adapter-environment.test.ts @@ -0,0 +1,129 @@ +import { afterEach, beforeEach, describe, expect, it, vi } from "vitest"; +import fs from "node:fs/promises"; +import os from "node:os"; +import path from "node:path"; +import { testEnvironment } from "@paperclipai/adapter-acpx-local/server"; +import type { AdapterEnvironmentCheck } from "@paperclipai/adapter-utils"; + +function credentialChecks(checks: AdapterEnvironmentCheck[]): AdapterEnvironmentCheck[] { + return checks.filter((check) => check.code.startsWith("acpx_claude_") || check.code.startsWith("acpx_codex_")); +} + +describe("acpx_local environment credential diagnostics", () => { + beforeEach(() => { + vi.stubEnv("ANTHROPIC_API_KEY", ""); + vi.stubEnv("ANTHROPIC_BEDROCK_BASE_URL", ""); + vi.stubEnv("CLAUDE_CODE_USE_BEDROCK", ""); + vi.stubEnv("CLAUDE_CONFIG_DIR", ""); + vi.stubEnv("OPENAI_API_KEY", ""); + vi.stubEnv("CODEX_HOME", ""); + }); + + afterEach(() => { + vi.unstubAllEnvs(); + }); + + it("emits an info-level Claude credential hint when ANTHROPIC_API_KEY is present", async () => { + const result = await testEnvironment({ + companyId: "company-1", + adapterType: "acpx_local", + config: { + agent: "claude", + env: { + ANTHROPIC_API_KEY: "sk-ant-test", + }, + }, + }); + + expect(result.checks).toContainEqual(expect.objectContaining({ + code: "acpx_claude_anthropic_api_key_detected", + level: "info", + })); + expect(result.checks.some((check) => check.code.startsWith("acpx_codex_"))).toBe(false); + }); + + it("emits an info-level Claude missing credential hint without changing diagnostic health", async () => { + const root = path.join(os.tmpdir(), `paperclip-acpx-claude-noauth-${Date.now()}-${Math.random().toString(16).slice(2)}`); + const claudeConfigDir = path.join(root, ".claude"); + + try { + await fs.mkdir(claudeConfigDir, { recursive: true }); + + const result = await testEnvironment({ + companyId: "company-1", + adapterType: "acpx_local", + config: { + agent: "claude", + env: { + CLAUDE_CONFIG_DIR: claudeConfigDir, + }, + }, + }); + + expect(result.checks).toContainEqual(expect.objectContaining({ + code: "acpx_claude_credentials_missing", + level: "info", + })); + expect(credentialChecks(result.checks).every((check) => check.level === "info")).toBe(true); + } finally { + await fs.rm(root, { recursive: true, force: true }); + } + }); + + it("emits an info-level Codex credential hint when native auth is present", async () => { + const root = path.join(os.tmpdir(), `paperclip-acpx-codex-auth-${Date.now()}-${Math.random().toString(16).slice(2)}`); + const codexHome = path.join(root, ".codex"); + + try { + await fs.mkdir(codexHome, { recursive: true }); + await fs.writeFile(path.join(codexHome, "auth.json"), JSON.stringify({ accessToken: "token" }), "utf8"); + + const result = await testEnvironment({ + companyId: "company-1", + adapterType: "acpx_local", + config: { + agent: "codex", + env: { + CODEX_HOME: codexHome, + }, + }, + }); + + expect(result.checks).toContainEqual(expect.objectContaining({ + code: "acpx_codex_native_auth_detected", + level: "info", + })); + expect(result.checks.some((check) => check.code.startsWith("acpx_claude_"))).toBe(false); + } finally { + await fs.rm(root, { recursive: true, force: true }); + } + }); + + it("emits an info-level Codex missing credential hint without changing diagnostic health", async () => { + const root = path.join(os.tmpdir(), `paperclip-acpx-codex-noauth-${Date.now()}-${Math.random().toString(16).slice(2)}`); + const codexHome = path.join(root, ".codex"); + + try { + await fs.mkdir(codexHome, { recursive: true }); + + const result = await testEnvironment({ + companyId: "company-1", + adapterType: "acpx_local", + config: { + agent: "codex", + env: { + CODEX_HOME: codexHome, + }, + }, + }); + + expect(result.checks).toContainEqual(expect.objectContaining({ + code: "acpx_codex_credentials_missing", + level: "info", + })); + expect(credentialChecks(result.checks).every((check) => check.level === "info")).toBe(true); + } finally { + await fs.rm(root, { recursive: true, force: true }); + } + }); +}); diff --git a/server/src/__tests__/acpx-local-execute.test.ts b/server/src/__tests__/acpx-local-execute.test.ts new file mode 100644 index 00000000..ff9c46cb --- /dev/null +++ b/server/src/__tests__/acpx-local-execute.test.ts @@ -0,0 +1,603 @@ +import { describe, expect, it } from "vitest"; +import fs from "node:fs/promises"; +import os from "node:os"; +import path from "node:path"; +import type { AdapterExecutionContext } from "@paperclipai/adapter-utils"; +import { createAcpxLocalExecutor } from "@paperclipai/adapter-acpx-local/server"; +import type { + AcpRuntime, + AcpRuntimeEvent, + AcpRuntimeHandle, + AcpRuntimeOptions, + AcpRuntimeTurn, + AcpRuntimeTurnResult, +} from "acpx/runtime"; + +type LogEntry = { stream: "stdout" | "stderr"; chunk: string }; +type TestAcpRuntimeOptions = AcpRuntimeOptions & { + sessionOptions?: { + systemPrompt?: string | { append: string }; + additionalRoots?: string[]; + }; +}; + +class FakeRuntime implements AcpRuntime { + ensureInputs: Array<{ sessionKey: string; agent: string; mode: "persistent" | "oneshot"; cwd?: string; resumeSessionId?: string }> = []; + startInputs: Array<{ handle: AcpRuntimeHandle; text: string; requestId: string; timeoutMs?: number }> = []; + closeInputs: Array<{ handle: AcpRuntimeHandle; reason: string; discardPersistentState?: boolean }> = []; + cancelInputs: Array<{ handle: AcpRuntimeHandle; reason?: string }> = []; + setModeInputs: Array<{ handle: AcpRuntimeHandle; mode: string }> = []; + setConfigInputs: Array<{ handle: AcpRuntimeHandle; key: string; value: string }> = []; + ensureCount = 0; + turnCount = 0; + nextEnsureError: Error | null = null; + + constructor( + readonly options: TestAcpRuntimeOptions, + readonly events: AcpRuntimeEvent[] = [ + { type: "status", text: "thinking", tag: "agent_thought_chunk" }, + { type: "text_delta", text: "hello ", stream: "output", tag: "agent_message_chunk" }, + { type: "tool_call", text: "read README.md", title: "read", status: "running", toolCallId: "tool-1" }, + { type: "text_delta", text: "world", stream: "output", tag: "agent_message_chunk" }, + ], + readonly terminal: AcpRuntimeTurnResult = { status: "completed", stopReason: "end_turn" }, + ) {} + + async ensureSession(input: { sessionKey: string; agent: string; mode: "persistent" | "oneshot"; cwd?: string; resumeSessionId?: string }): Promise { + this.ensureInputs.push(input); + this.ensureCount += 1; + if (this.nextEnsureError) { + const err = this.nextEnsureError; + this.nextEnsureError = null; + throw err; + } + return { + sessionKey: input.sessionKey, + backend: "acpx", + runtimeSessionName: `runtime-${this.ensureCount}`, + cwd: input.cwd, + acpxRecordId: `record-${this.ensureCount}`, + backendSessionId: `acp-${this.ensureCount}`, + agentSessionId: `agent-${this.ensureCount}`, + }; + } + + startTurn(input: { handle: AcpRuntimeHandle; text: string; requestId: string; timeoutMs?: number }): AcpRuntimeTurn { + this.startInputs.push(input); + this.turnCount += 1; + let closed = false; + const events = this.events; + const terminal = this.terminal; + const cancelInputs = this.cancelInputs; + return { + requestId: input.requestId, + events: { + [Symbol.asyncIterator]: async function* () { + for (const event of events) { + if (closed) return; + yield event; + } + }, + }, + result: Promise.resolve(terminal), + cancel: async (args?: { reason?: string }) => { + cancelInputs.push({ handle: input.handle, reason: args?.reason }); + closed = true; + }, + closeStream: async () => { + closed = true; + }, + }; + } + + runTurn(): AsyncIterable { + throw new Error("not used"); + } + + getCapabilities() { + return { controls: [] }; + } + + getStatus() { + return Promise.resolve({}); + } + + async setMode(input: { handle: AcpRuntimeHandle; mode: string }) { + this.setModeInputs.push(input); + } + + async setConfigOption(input: { handle: AcpRuntimeHandle; key: string; value: string }) { + this.setConfigInputs.push(input); + } + + async cancel(input: { handle: AcpRuntimeHandle; reason?: string }) { + this.cancelInputs.push(input); + } + + async close(input: { handle: AcpRuntimeHandle; reason: string; discardPersistentState?: boolean }) { + this.closeInputs.push(input); + } +} + +async function createRuntimeSkill(root: string, input: { + key?: string; + runtimeName?: string; + body?: string; +}) { + const runtimeName = input.runtimeName ?? "paperclip-test-skill"; + const key = input.key ?? `company/${runtimeName}`; + const source = path.join(root, "skills", runtimeName); + await fs.mkdir(source, { recursive: true }); + await fs.writeFile(path.join(source, "SKILL.md"), input.body ?? "---\nrequired: false\n---\nUse the test skill.\n", "utf8"); + return { + key, + runtimeName, + source, + required: false, + }; +} + +function parseStdoutLogs(logs: LogEntry[]) { + return logs + .filter((entry) => entry.stream === "stdout") + .flatMap((entry) => entry.chunk.trim().split(/\n+/).filter(Boolean)) + .map((line) => JSON.parse(line) as Record); +} + +function buildContext(root: string, overrides: Partial = {}): AdapterExecutionContext { + return { + runId: "run-1", + agent: { + id: "agent-1", + companyId: "company-1", + name: "ACPX Coder", + adapterType: "acpx_local", + adapterConfig: {}, + }, + runtime: { + sessionId: null, + sessionParams: null, + sessionDisplayId: null, + taskKey: "PAP-1", + }, + config: { + agent: "claude", + cwd: root, + stateDir: path.join(root, "state"), + promptTemplate: "Do the assigned work.", + }, + context: { + issueId: "issue-1", + paperclipTaskMarkdown: "Task context", + }, + onLog: async () => {}, + ...overrides, + }; +} + +describe("acpx_local execute", () => { + it("streams ACPX session, status, text, and tool events before returning success", async () => { + const root = await fs.mkdtemp(path.join(os.tmpdir(), "paperclip-acpx-success-")); + try { + const runtime = new FakeRuntime({} as AcpRuntimeOptions); + const logs: LogEntry[] = []; + let metaPermissionNote = ""; + const execute = createAcpxLocalExecutor({ + createRuntime: () => runtime, + }); + const result = await execute(buildContext(root, { + onLog: async (stream, chunk) => logs.push({ stream, chunk }), + onMeta: async (meta) => { + metaPermissionNote = meta.commandNotes?.join("\n") ?? ""; + }, + })); + + expect(result.exitCode).toBe(0); + expect(result.summary).toBe("hello world"); + expect(result.sessionParams).toMatchObject({ + agent: "claude", + cwd: root, + mode: "persistent", + acpSessionId: "acp-1", + }); + expect(metaPermissionNote).toContain("Effective ACPX permission mode: approve-all"); + const parsed = parseStdoutLogs(logs); + expect(parsed.map((event) => event.type)).toEqual([ + "acpx.session", + "acpx.status", + "acpx.text_delta", + "acpx.tool_call", + "acpx.text_delta", + "acpx.result", + ]); + } finally { + await fs.rm(root, { recursive: true, force: true }); + } + }); + + it("reuses a compatible warm session and starts fresh when cwd changes", async () => { + const root = await fs.mkdtemp(path.join(os.tmpdir(), "paperclip-acpx-reuse-")); + const other = path.join(root, "other"); + await fs.mkdir(other); + try { + const runtimes: FakeRuntime[] = []; + const execute = createAcpxLocalExecutor({ + createRuntime: (options) => { + const runtime = new FakeRuntime(options); + runtimes.push(runtime); + return runtime; + }, + }); + + const first = await execute(buildContext(root)); + const second = await execute(buildContext(root, { + runtime: { + sessionId: first.sessionId ?? null, + sessionParams: first.sessionParams ?? null, + sessionDisplayId: first.sessionDisplayId ?? null, + taskKey: "PAP-1", + }, + })); + const third = await execute(buildContext(root, { + runtime: { + sessionId: first.sessionId ?? null, + sessionParams: first.sessionParams ?? null, + sessionDisplayId: first.sessionDisplayId ?? null, + taskKey: "PAP-1", + }, + config: { + agent: "claude", + cwd: other, + stateDir: path.join(root, "state"), + promptTemplate: "Do the assigned work.", + }, + })); + + expect(runtimes).toHaveLength(2); + expect(runtimes[0].ensureCount).toBe(1); + expect(runtimes[0].turnCount).toBe(2); + expect(runtimes[1].ensureCount).toBe(1); + expect(second.sessionParams?.acpSessionId).toBe("acp-1"); + expect(third.sessionParams?.cwd).toBe(other); + } finally { + await fs.rm(root, { recursive: true, force: true }); + } + }); + + it("closes duplicate warm handles from concurrent runs for the same session key", async () => { + const root = await fs.mkdtemp(path.join(os.tmpdir(), "paperclip-acpx-concurrent-")); + try { + const runtimes: FakeRuntime[] = []; + const warmHandles = new Map(); + const execute = createAcpxLocalExecutor({ + warmHandles, + createRuntime: (options) => { + const runtime = new FakeRuntime(options); + runtimes.push(runtime); + return runtime; + }, + }); + + const [first, second] = await Promise.all([ + execute(buildContext(root, { runId: "run-1" })), + execute(buildContext(root, { runId: "run-2" })), + ]); + + expect(first.exitCode).toBe(0); + expect(second.exitCode).toBe(0); + expect(runtimes).toHaveLength(2); + expect(warmHandles.size).toBe(1); + expect(runtimes.flatMap((runtime) => runtime.closeInputs).filter((input) => + input.reason === "paperclip duplicate warm handle cleanup" + )).toHaveLength(1); + } finally { + await fs.rm(root, { recursive: true, force: true }); + } + }); + + it("retries with a fresh session when ACPX cannot resume the saved backend session", async () => { + const root = await fs.mkdtemp(path.join(os.tmpdir(), "paperclip-acpx-resume-")); + try { + const runtime = new FakeRuntime({} as AcpRuntimeOptions); + const firstExecute = createAcpxLocalExecutor({ + createRuntime: () => runtime, + warmHandles: new Map(), + }); + const initial = await firstExecute(buildContext(root)); + const compatibleParams = { + ...initial.sessionParams, + runtimeSessionName: "runtime-old", + acpSessionId: "acp-old", + }; + runtime.nextEnsureError = new Error("session/load failed: no session acp-old"); + const logs: LogEntry[] = []; + const execute = createAcpxLocalExecutor({ + createRuntime: () => runtime, + warmHandles: new Map(), + }); + const result = await execute(buildContext(root, { + runtime: { + sessionId: "acp-old", + sessionParams: compatibleParams, + sessionDisplayId: "acp-old", + taskKey: "PAP-1", + }, + onLog: async (stream, chunk) => logs.push({ stream, chunk }), + })); + + expect(result.exitCode).toBe(0); + expect(result.clearSession).toBe(true); + expect(runtime.ensureInputs.at(-2)?.resumeSessionId).toBe("acp-old"); + expect(runtime.ensureInputs.at(-1)?.resumeSessionId).toBeUndefined(); + expect(logs.some((entry) => entry.chunk.includes("retrying with a fresh session"))).toBe(true); + } finally { + await fs.rm(root, { recursive: true, force: true }); + } + }); + + it("cancels and closes stale handles on timeout", async () => { + const root = await fs.mkdtemp(path.join(os.tmpdir(), "paperclip-acpx-timeout-")); + try { + const neverFinishes = new FakeRuntime( + {} as AcpRuntimeOptions, + [], + { status: "cancelled", stopReason: "cancelled" }, + ); + neverFinishes.startTurn = function (input): AcpRuntimeTurn { + this.startInputs.push(input); + let resolveResult!: (value: AcpRuntimeTurnResult) => void; + const result = new Promise((resolve) => { + resolveResult = resolve; + }); + return { + requestId: input.requestId, + events: { + [Symbol.asyncIterator]: async function* () { + await new Promise((resolve) => setTimeout(resolve, 50)); + }, + }, + result, + cancel: async (args?: { reason?: string }) => { + this.cancelInputs.push({ handle: input.handle, reason: args?.reason }); + resolveResult({ status: "cancelled", stopReason: args?.reason }); + }, + closeStream: async () => {}, + }; + }; + const execute = createAcpxLocalExecutor({ createRuntime: () => neverFinishes }); + const result = await execute(buildContext(root, { + config: { + agent: "claude", + cwd: root, + stateDir: path.join(root, "state"), + promptTemplate: "Do the assigned work.", + timeoutSec: 0.01, + }, + })); + + expect(result.timedOut).toBe(true); + expect(result.errorCode).toBe("acpx_timeout"); + expect(neverFinishes.cancelInputs.length).toBeGreaterThan(0); + expect(neverFinishes.closeInputs.at(-1)?.discardPersistentState).toBe(true); + } finally { + await fs.rm(root, { recursive: true, force: true }); + } + }); + + it("returns structured auth errors", async () => { + const root = await fs.mkdtemp(path.join(os.tmpdir(), "paperclip-acpx-error-")); + try { + const runtime = new FakeRuntime({} as AcpRuntimeOptions); + runtime.nextEnsureError = new Error("authentication required: login first"); + const execute = createAcpxLocalExecutor({ createRuntime: () => runtime }); + const result = await execute(buildContext(root)); + expect(result.exitCode).toBe(1); + expect(result.errorCode).toBe("acpx_auth_required"); + expect(result.errorMeta).toMatchObject({ category: "auth" }); + } finally { + await fs.rm(root, { recursive: true, force: true }); + } + }); + + it("returns structured ACP protocol errors", async () => { + const root = await fs.mkdtemp(path.join(os.tmpdir(), "paperclip-acpx-protocol-")); + try { + const runtime = new FakeRuntime({} as AcpRuntimeOptions); + runtime.nextEnsureError = Object.assign(new Error("protocol init failed"), { + code: "ACP_SESSION_INIT_FAILED", + }); + const execute = createAcpxLocalExecutor({ createRuntime: () => runtime }); + const result = await execute(buildContext(root)); + expect(result.exitCode).toBe(1); + expect(result.errorCode).toBe("acpx_protocol_error"); + expect(result.errorMeta).toMatchObject({ + category: "protocol", + acpCode: "ACP_SESSION_INIT_FAILED", + }); + } finally { + await fs.rm(root, { recursive: true, force: true }); + } + }); + + it("materializes selected skills for ACPX Claude and passes public session metadata", async () => { + const root = await fs.mkdtemp(path.join(os.tmpdir(), "paperclip-acpx-claude-skills-")); + try { + const skill = await createRuntimeSkill(root, {}); + let runtime: FakeRuntime | null = null; + let meta: Record | null = null; + const execute = createAcpxLocalExecutor({ + createRuntime: (options) => { + runtime = new FakeRuntime(options); + return runtime; + }, + }); + + const result = await execute(buildContext(root, { + config: { + agent: "claude", + cwd: root, + stateDir: path.join(root, "state"), + promptTemplate: "Do the assigned work.", + paperclipRuntimeSkills: [skill], + paperclipSkillSync: { + desiredSkills: [skill.key], + }, + }, + onMeta: async (payload) => { + meta = payload as Record; + }, + })); + + expect(result.exitCode).toBe(0); + expect(runtime?.options).not.toHaveProperty("sessionOptions"); + const skillRoot = result.sessionParams?.skills && typeof result.sessionParams.skills === "object" + ? (result.sessionParams.skills as { skillRoot?: string | null }).skillRoot + : null; + expect(skillRoot).toContain(path.join("state", "runtime-skills", "claude")); + await expect(fs.lstat(path.join(skillRoot!, skill.runtimeName))).resolves.toMatchObject({}); + expect(result.sessionParams?.skills).toMatchObject({ + mode: "claude", + selectedSkills: [skill.runtimeName], + }); + expect(String(meta?.prompt ?? "")).toContain(`Skill root: ${skillRoot}`); + expect((meta?.commandNotes as string[]).join("\n")).toContain("Materialized 1 Paperclip skill"); + } finally { + await fs.rm(root, { recursive: true, force: true }); + } + }); + + it("includes skill content in the ACPX Claude session fingerprint", async () => { + const root = await fs.mkdtemp(path.join(os.tmpdir(), "paperclip-acpx-claude-fingerprint-")); + try { + const skill = await createRuntimeSkill(root, { body: "---\nrequired: false\n---\nFirst version.\n" }); + const runtimes: FakeRuntime[] = []; + const execute = createAcpxLocalExecutor({ + createRuntime: (options) => { + const runtime = new FakeRuntime(options); + runtimes.push(runtime); + return runtime; + }, + }); + const context = buildContext(root, { + config: { + agent: "claude", + cwd: root, + stateDir: path.join(root, "state"), + promptTemplate: "Do the assigned work.", + paperclipRuntimeSkills: [skill], + paperclipSkillSync: { + desiredSkills: [skill.key], + }, + }, + }); + + const first = await execute(context); + await fs.writeFile(path.join(skill.source, "SKILL.md"), "---\nrequired: false\n---\nSecond version.\n", "utf8"); + const second = await execute({ + ...context, + runtime: { + sessionId: first.sessionId ?? null, + sessionParams: first.sessionParams ?? null, + sessionDisplayId: first.sessionDisplayId ?? null, + taskKey: "PAP-1", + }, + }); + + expect(second.sessionParams?.configFingerprint).not.toBe(first.sessionParams?.configFingerprint); + expect(runtimes.at(-1)?.ensureInputs.at(-1)?.resumeSessionId).toBeUndefined(); + } finally { + await fs.rm(root, { recursive: true, force: true }); + } + }); + + it("materializes selected skills into the effective ACPX Codex CODEX_HOME", async () => { + const root = await fs.mkdtemp(path.join(os.tmpdir(), "paperclip-acpx-codex-skills-")); + try { + const skill = await createRuntimeSkill(root, {}); + const codexHome = path.join(root, "codex-home"); + let runtime: FakeRuntime | null = null; + let meta: Record | null = null; + const execute = createAcpxLocalExecutor({ + createRuntime: (options) => { + runtime = new FakeRuntime(options); + return runtime; + }, + }); + + const result = await execute(buildContext(root, { + config: { + agent: "codex", + cwd: root, + stateDir: path.join(root, "state"), + promptTemplate: "Do the assigned work.", + env: { CODEX_HOME: codexHome }, + paperclipRuntimeSkills: [skill], + paperclipSkillSync: { + desiredSkills: [skill.key], + }, + }, + onMeta: async (payload) => { + meta = payload as Record; + }, + })); + + expect(result.exitCode).toBe(0); + await expect(fs.lstat(path.join(codexHome, "skills", skill.runtimeName))).resolves.toMatchObject({}); + const wrapperPath = runtime?.options.agentRegistry.resolve("codex"); + const wrapper = await fs.readFile(wrapperPath!, "utf8"); + expect(wrapper).not.toContain("CODEX_HOME"); + expect(wrapper).not.toContain(codexHome); + expect((meta?.env as Record).CODEX_HOME).toBe(codexHome); + expect(result.sessionParams?.skills).toMatchObject({ + mode: "codex", + codexHome, + selectedSkills: [skill.runtimeName], + }); + } finally { + await fs.rm(root, { recursive: true, force: true }); + } + }); + + it("keeps ACPX custom skill selection tracked without runtime materialization", async () => { + const root = await fs.mkdtemp(path.join(os.tmpdir(), "paperclip-acpx-custom-skills-")); + try { + const skill = await createRuntimeSkill(root, {}); + let runtime: FakeRuntime | null = null; + let meta: Record | null = null; + const execute = createAcpxLocalExecutor({ + createRuntime: (options) => { + runtime = new FakeRuntime(options); + return runtime; + }, + }); + + const result = await execute(buildContext(root, { + config: { + agent: "custom", + agentCommand: "custom-acp", + cwd: root, + stateDir: path.join(root, "state"), + promptTemplate: "Do the assigned work.", + paperclipRuntimeSkills: [skill], + paperclipSkillSync: { + desiredSkills: [skill.key], + }, + }, + onMeta: async (payload) => { + meta = payload as Record; + }, + })); + + expect(result.exitCode).toBe(0); + expect(runtime?.options.sessionOptions).toBeUndefined(); + await expect(fs.lstat(path.join(root, "state", "runtime-skills"))).rejects.toMatchObject({ code: "ENOENT" }); + expect(result.sessionParams?.skills).toMatchObject({ + mode: "custom_unsupported", + desiredSkillNames: [skill.key], + }); + expect((meta?.commandNotes as string[]).join("\n")).toContain("tracked only"); + } finally { + await fs.rm(root, { recursive: true, force: true }); + } + }); +}); diff --git a/server/src/__tests__/acpx-local-skill-sync.test.ts b/server/src/__tests__/acpx-local-skill-sync.test.ts new file mode 100644 index 00000000..5da02709 --- /dev/null +++ b/server/src/__tests__/acpx-local-skill-sync.test.ts @@ -0,0 +1,78 @@ +import { describe, expect, it } from "vitest"; +import { + listAcpxSkills, + syncAcpxSkills, +} from "@paperclipai/adapter-acpx-local/server"; + +describe("acpx local skill sync", () => { + const paperclipKey = "paperclipai/paperclip/paperclip"; + const createAgentKey = "paperclipai/paperclip/paperclip-create-agent"; + + it("reports ACPX Claude skills as supported runtime-mounted state", async () => { + const snapshot = await listAcpxSkills({ + agentId: "agent-1", + companyId: "company-1", + adapterType: "acpx_local", + config: { + agent: "claude", + paperclipSkillSync: { + desiredSkills: [paperclipKey], + }, + }, + }); + + expect(snapshot.adapterType).toBe("acpx_local"); + expect(snapshot.supported).toBe(true); + expect(snapshot.mode).toBe("ephemeral"); + expect(snapshot.desiredSkills).toContain(paperclipKey); + expect(snapshot.desiredSkills).toContain(createAgentKey); + expect(snapshot.entries.find((entry) => entry.key === paperclipKey)?.state).toBe("configured"); + expect(snapshot.entries.find((entry) => entry.key === paperclipKey)?.detail).toContain("ACPX Claude session"); + expect(snapshot.warnings).toEqual([]); + }); + + it("reports ACPX Codex skills with Codex home runtime detail", async () => { + const snapshot = await syncAcpxSkills({ + agentId: "agent-2", + companyId: "company-1", + adapterType: "acpx_local", + config: { + agent: "codex", + paperclipSkillSync: { + desiredSkills: ["paperclip"], + }, + }, + }, ["paperclip"]); + + expect(snapshot.supported).toBe(true); + expect(snapshot.mode).toBe("ephemeral"); + expect(snapshot.desiredSkills).toContain(paperclipKey); + expect(snapshot.desiredSkills).not.toContain("paperclip"); + expect(snapshot.entries.find((entry) => entry.key === paperclipKey)?.state).toBe("configured"); + expect(snapshot.entries.find((entry) => entry.key === paperclipKey)?.detail).toContain("CODEX_HOME/skills/"); + expect(snapshot.warnings).toEqual([]); + }); + + it("keeps ACPX custom skill selection tracked but unsupported", async () => { + const snapshot = await listAcpxSkills({ + agentId: "agent-3", + companyId: "company-1", + adapterType: "acpx_local", + config: { + agent: "custom", + paperclipSkillSync: { + desiredSkills: [paperclipKey], + }, + }, + }); + + expect(snapshot.supported).toBe(false); + expect(snapshot.mode).toBe("unsupported"); + expect(snapshot.desiredSkills).toContain(paperclipKey); + expect(snapshot.entries.find((entry) => entry.key === paperclipKey)?.desired).toBe(true); + expect(snapshot.entries.find((entry) => entry.key === paperclipKey)?.detail).toContain("stored in Paperclip only"); + expect(snapshot.warnings).toContain( + "Custom ACP commands do not expose a Paperclip skill integration contract yet; selected skills are tracked only.", + ); + }); +}); diff --git a/server/src/__tests__/adapter-routes.test.ts b/server/src/__tests__/adapter-routes.test.ts index eede2af2..6fa67915 100644 --- a/server/src/__tests__/adapter-routes.test.ts +++ b/server/src/__tests__/adapter-routes.test.ts @@ -202,6 +202,11 @@ describe("adapter routes", () => { const codexLocal = res.body.find((a: any) => a.type === "codex_local"); expect(codexLocal).toBeDefined(); expect(codexLocal.capabilities.supportsSkills).toBe(true); + + // acpx_local exposes runtime-aware skill snapshots for Claude/Codex/custom ACP agents + const acpxLocal = res.body.find((a: any) => a.type === "acpx_local"); + expect(acpxLocal).toBeDefined(); + expect(acpxLocal.capabilities.supportsSkills).toBe(true); }); it("uses the active adapter when resolving config schema for a paused builtin override", async () => { @@ -225,6 +230,31 @@ describe("adapter routes", () => { }); }); + it("serves the built-in acpx_local config schema", async () => { + const app = createApp(); + + const res = await request(app).get("/api/adapters/acpx_local/config-schema"); + + expect(res.status, JSON.stringify(res.body)).toBe(200); + expect(res.body.fields).toEqual( + expect.arrayContaining([ + expect.objectContaining({ + key: "agent", + default: "claude", + options: expect.arrayContaining([ + expect.objectContaining({ value: "claude" }), + expect.objectContaining({ value: "codex" }), + expect.objectContaining({ value: "custom" }), + ]), + }), + expect.objectContaining({ + key: "permissionMode", + default: "approve-all", + }), + ]), + ); + }); + it("rejects signed-in users without org access", async () => { const app = createApp({ userId: "outsider-1", diff --git a/server/src/__tests__/adapter-session-codecs.test.ts b/server/src/__tests__/adapter-session-codecs.test.ts index 27efe287..10905e51 100644 --- a/server/src/__tests__/adapter-session-codecs.test.ts +++ b/server/src/__tests__/adapter-session-codecs.test.ts @@ -13,6 +13,7 @@ import { sessionCodec as opencodeSessionCodec, isOpenCodeUnknownSessionError, } from "@paperclipai/adapter-opencode-local/server"; +import { sessionCodec as acpxSessionCodec } from "@paperclipai/adapter-acpx-local/server"; describe("adapter session codecs", () => { it("normalizes claude session params with cwd", () => { @@ -107,6 +108,50 @@ describe("adapter session codecs", () => { }); expect(geminiSessionCodec.getDisplayId?.(serialized ?? null)).toBe("gemini-session-1"); }); + + it("preserves acpx session params required for compatibility checks", () => { + const parsed = acpxSessionCodec.deserialize({ + sessionKey: "paperclip:company:agent:task:fingerprint", + runtimeSessionName: "runtime-session-1", + acpxRecordId: "record-1", + acpSessionId: "acp-session-1", + agentSessionId: "agent-session-1", + agent: "claude", + cwd: "/tmp/acpx", + mode: "persistent", + stateDir: "/tmp/acpx-state", + configFingerprint: "fingerprint", + workspaceId: "workspace-1", + repoUrl: "https://example.com/repo.git", + repoRef: "main", + remoteExecution: { + environmentId: "environment-1", + leaseId: "lease-1", + }, + }); + + expect(parsed).toMatchObject({ + sessionKey: "paperclip:company:agent:task:fingerprint", + runtimeSessionName: "runtime-session-1", + acpxRecordId: "record-1", + acpSessionId: "acp-session-1", + agentSessionId: "agent-session-1", + agent: "claude", + cwd: "/tmp/acpx", + mode: "persistent", + stateDir: "/tmp/acpx-state", + configFingerprint: "fingerprint", + workspaceId: "workspace-1", + repoUrl: "https://example.com/repo.git", + repoRef: "main", + remoteExecution: { + environmentId: "environment-1", + leaseId: "lease-1", + }, + }); + expect(acpxSessionCodec.serialize(parsed)).toEqual(parsed); + expect(acpxSessionCodec.getDisplayId?.(parsed)).toBe("runtime-session-1"); + }); }); describe("codex resume recovery detection", () => { diff --git a/server/src/__tests__/agent-skills-routes.test.ts b/server/src/__tests__/agent-skills-routes.test.ts index 4dd60ce8..84537a9b 100644 --- a/server/src/__tests__/agent-skills-routes.test.ts +++ b/server/src/__tests__/agent-skills-routes.test.ts @@ -362,6 +362,99 @@ describe.sequential("agent skill routes", () => { expect(res.status, JSON.stringify(res.body)).toBe(200); }); + it("passes ACPX Claude config through the agent skill listing route", async () => { + mockAgentService.getById.mockResolvedValue({ + ...makeAgent("acpx_local"), + adapterConfig: { agent: "claude" }, + }); + mockSecretService.resolveAdapterConfigForRuntime.mockResolvedValueOnce({ + config: { agent: "claude" }, + }); + mockAdapter.listSkills.mockResolvedValue({ + adapterType: "acpx_local", + supported: true, + mode: "ephemeral", + desiredSkills: ["paperclipai/paperclip/paperclip"], + entries: [], + warnings: [], + }); + + const res = await requestApp( + await createApp(), + (baseUrl) => request(baseUrl) + .get("/api/agents/11111111-1111-4111-8111-111111111111/skills?companyId=company-1"), + ); + + expect(res.status, JSON.stringify(res.body)).toBe(200); + expect(mockCompanySkillService.listRuntimeSkillEntries).toHaveBeenCalledWith("company-1", { + materializeMissing: false, + }); + expect(mockAdapter.listSkills).toHaveBeenCalledWith( + expect.objectContaining({ + adapterType: "acpx_local", + config: expect.objectContaining({ + agent: "claude", + paperclipRuntimeSkills: expect.any(Array), + }), + }), + ); + }); + + it("persists ACPX Codex desired skills through the agent skill sync route", async () => { + mockAgentService.getById.mockResolvedValue({ + ...makeAgent("acpx_local"), + adapterConfig: { agent: "codex" }, + }); + mockAgentService.update.mockImplementationOnce(async (_id: string, patch: Record) => ({ + ...makeAgent("acpx_local"), + adapterConfig: patch.adapterConfig ?? {}, + })); + mockSecretService.resolveAdapterConfigForRuntime.mockResolvedValueOnce({ + config: { + agent: "codex", + paperclipSkillSync: { + desiredSkills: ["paperclipai/paperclip/paperclip"], + }, + }, + }); + mockAdapter.syncSkills.mockResolvedValue({ + adapterType: "acpx_local", + supported: true, + mode: "ephemeral", + desiredSkills: ["paperclipai/paperclip/paperclip"], + entries: [], + warnings: [], + }); + + const res = await requestApp(await createApp(), (baseUrl) => request(baseUrl) + .post("/api/agents/11111111-1111-4111-8111-111111111111/skills/sync?companyId=company-1") + .send({ desiredSkills: ["paperclip"] })); + + expect(res.status, JSON.stringify(res.body)).toBe(200); + expect(mockAgentService.update).toHaveBeenCalledWith( + expect.any(String), + expect.objectContaining({ + adapterConfig: expect.objectContaining({ + agent: "codex", + paperclipSkillSync: expect.objectContaining({ + desiredSkills: ["paperclipai/paperclip/paperclip"], + }), + }), + }), + expect.any(Object), + ); + expect(mockAdapter.syncSkills).toHaveBeenCalledWith( + expect.objectContaining({ + adapterType: "acpx_local", + config: expect.objectContaining({ + agent: "codex", + paperclipRuntimeSkills: expect.any(Array), + }), + }), + ["paperclipai/paperclip/paperclip"], + ); + }); + it("keeps runtime materialization for persistent skill adapters", async () => { mockAgentService.getById.mockResolvedValue(makeAgent("cursor")); mockAdapter.listSkills.mockResolvedValue({ diff --git a/server/src/__tests__/redaction.test.ts b/server/src/__tests__/redaction.test.ts index e22eb597..e5b00cff 100644 --- a/server/src/__tests__/redaction.test.ts +++ b/server/src/__tests__/redaction.test.ts @@ -84,4 +84,51 @@ describe("redaction", () => { expect(result).not.toContain(githubToken); expect(result).not.toContain(jwt); }); + + it("redacts inline secrets from command metadata without hiding safe command text", () => { + const input = { + command: "custom-acp --token ghp_example_secret env OPENAI_API_KEY=sk-live-example custom-acp", + commandArgs: ["--safe", "ok", "--token", "ghp_arg_secret", "--api-key=sk-inline-example"], + env: { + PAPERCLIP_RESOLVED_COMMAND: "env OPENAI_API_KEY=sk-live-example custom-acp --token ghp_example_secret", + SAFE_VALUE: "visible", + }, + }; + + const result = redactEventPayload(input); + + expect(result?.command).toBe( + `custom-acp --token ${REDACTED_EVENT_VALUE} env OPENAI_API_KEY=${REDACTED_EVENT_VALUE} custom-acp`, + ); + expect(result?.commandArgs).toEqual([ + "--safe", + "ok", + "--token", + REDACTED_EVENT_VALUE, + `--api-key=${REDACTED_EVENT_VALUE}`, + ]); + expect(result?.env).toEqual({ + PAPERCLIP_RESOLVED_COMMAND: + `env OPENAI_API_KEY=${REDACTED_EVENT_VALUE} custom-acp --token ${REDACTED_EVENT_VALUE}`, + SAFE_VALUE: "visible", + }); + }); + + it("redacts non-string command args after secret flags", () => { + const result = redactEventPayload({ + commandArgs: ["--api-key", { nested: "secret-value" }, "safe-next"], + }); + + expect(result?.commandArgs).toEqual(["--api-key", REDACTED_EVENT_VALUE, "safe-next"]); + }); + + it("does not treat bare args payloads as command args", () => { + const result = redactEventPayload({ + args: ["--api-key", "not-a-command-secret"], + argv: ["--api-key", "command-secret"], + }); + + expect(result?.args).toEqual(["--api-key", "not-a-command-secret"]); + expect(result?.argv).toEqual(["--api-key", REDACTED_EVENT_VALUE]); + }); }); diff --git a/server/src/adapters/builtin-adapter-types.ts b/server/src/adapters/builtin-adapter-types.ts index 463a5694..3028ae0c 100644 --- a/server/src/adapters/builtin-adapter-types.ts +++ b/server/src/adapters/builtin-adapter-types.ts @@ -2,6 +2,7 @@ * Adapter types shipped with Paperclip. External plugins must not replace these. */ export const BUILTIN_ADAPTER_TYPES = new Set([ + "acpx_local", "claude_local", "codex_local", "cursor", diff --git a/server/src/adapters/registry.ts b/server/src/adapters/registry.ts index 94c38e29..359aecd4 100644 --- a/server/src/adapters/registry.ts +++ b/server/src/adapters/registry.ts @@ -1,5 +1,14 @@ import type { AdapterModelProfileDefinition, ServerAdapterModule } from "./types.js"; import { getAdapterSessionManagement } from "@paperclipai/adapter-utils"; +import { + execute as acpxExecute, + testEnvironment as acpxTestEnvironment, + sessionCodec as acpxSessionCodec, + getConfigSchema as getAcpxConfigSchema, + listAcpxSkills, + syncAcpxSkills, +} from "@paperclipai/adapter-acpx-local/server"; +import { agentConfigurationDoc as acpxAgentConfigurationDoc } from "@paperclipai/adapter-acpx-local"; import { execute as claudeExecute, listClaudeSkills, @@ -154,6 +163,22 @@ const claudeLocalAdapter: ServerAdapterModule = { getQuotaWindows: claudeGetQuotaWindows, }; +const acpxLocalAdapter: ServerAdapterModule = { + type: "acpx_local", + execute: acpxExecute, + testEnvironment: acpxTestEnvironment, + listSkills: listAcpxSkills, + syncSkills: syncAcpxSkills, + sessionCodec: acpxSessionCodec, + sessionManagement: getAdapterSessionManagement("acpx_local") ?? undefined, + supportsLocalAgentJwt: true, + supportsInstructionsBundle: true, + instructionsPathKey: "instructionsFilePath", + requiresMaterializedRuntimeSkills: false, + agentConfigurationDoc: acpxAgentConfigurationDoc, + getConfigSchema: getAcpxConfigSchema, +}; + const codexLocalAdapter: ServerAdapterModule = { type: "codex_local", execute: codexExecute, @@ -335,6 +360,7 @@ const pausedOverrides = new Set(); function registerBuiltInAdapters() { for (const adapter of [ + acpxLocalAdapter, claudeLocalAdapter, codexLocalAdapter, openCodeLocalAdapter, diff --git a/server/src/adapters/utils.ts b/server/src/adapters/utils.ts index da3767dd..a2682f23 100644 --- a/server/src/adapters/utils.ts +++ b/server/src/adapters/utils.ts @@ -64,7 +64,8 @@ export function buildInvocationEnvForLogs( const resolvedCommand = options.resolvedCommand?.trim(); if (resolvedCommand) { - merged[options.resolvedCommandEnvKey ?? "PAPERCLIP_RESOLVED_COMMAND"] = resolvedCommand; + merged[options.resolvedCommandEnvKey ?? "PAPERCLIP_RESOLVED_COMMAND"] = + serverUtils.redactCommandTextForLogs(resolvedCommand); } return redactEnvForLogs(merged); diff --git a/server/src/redaction.ts b/server/src/redaction.ts index 75ebd56e..f3877a8b 100644 --- a/server/src/redaction.ts +++ b/server/src/redaction.ts @@ -1,12 +1,13 @@ +import { redactCommandText } from "@paperclipai/adapter-utils"; + const SECRET_PAYLOAD_KEY_RE = /(api[-_]?key|access[-_]?token|auth(?:_?token)?|authorization|bearer|secret|passwd|password|credential|jwt|private[-_]?key|cookie|connectionstring)/i; +const COMMAND_PAYLOAD_KEY_RE = + /(^command$|^cmd$|command[-_]?line|resolved[-_]?command|PAPERCLIP_RESOLVED_COMMAND)/i; +const COMMAND_ARGS_PAYLOAD_KEY_RE = /^(commandArgs|command_?args|argv)$/i; const JWT_VALUE_RE = /^[A-Za-z0-9_-]+\.[A-Za-z0-9_-]+\.[A-Za-z0-9_-]+(?:\.[A-Za-z0-9_-]+)?$/; -const JWT_TEXT_RE = /\b[A-Za-z0-9_-]{8,}\.[A-Za-z0-9_-]{8,}\.[A-Za-z0-9_-]{8,}(?:\.[A-Za-z0-9_-]{8,})?\b/g; -const OPENAI_KEY_TEXT_RE = /\bsk-[A-Za-z0-9_-]{12,}\b/g; -const GITHUB_TOKEN_TEXT_RE = /\bgh[pousr]_[A-Za-z0-9_]{20,}\b/g; -const AUTHORIZATION_BEARER_TEXT_RE = /(\bAuthorization\s*:\s*Bearer\s+)[^\s"'`]+/gi; -const ENV_SECRET_ASSIGNMENT_TEXT_RE = - /(\b[A-Za-z0-9_]*(?:TOKEN|KEY|SECRET|PASSWORD|PASSWD|AUTHORIZATION|JWT)[A-Za-z0-9_]*\s*=\s*)[^\s"'`]+/gi; +const CLI_SECRET_FLAG_RE = + /^-{1,2}(?:api[-_]?key|(?:access[-_]?|auth[-_]?)?token|token|authorization|bearer|secret|passwd|password|credential|jwt|private[-_]?key|cookie|connectionstring)$/i; const JSON_SECRET_FIELD_TEXT_RE = /((?:"|')?(?:api[-_]?key|access[-_]?token|auth(?:_?token)?|authorization|bearer|secret|passwd|password|credential|jwt|private[-_]?key|cookie|connectionstring)(?:"|')?\s*:\s*(?:"|'))[^"'`\r\n]+((?:"|'))/gi; const ESCAPED_JSON_SECRET_FIELD_TEXT_RE = @@ -38,9 +39,33 @@ function isPlainBinding(value: unknown): value is { type: "plain"; value: unknow return value.type === "plain" && "value" in value; } +function sanitizeCommandArgs(args: unknown[]): unknown[] { + let redactNext = false; + return args.map((arg) => { + if (redactNext) { + redactNext = false; + return REDACTED_EVENT_VALUE; + } + if (typeof arg !== "string") return sanitizeValue(arg); + if (CLI_SECRET_FLAG_RE.test(arg.trim())) { + redactNext = true; + return arg; + } + return redactSensitiveText(arg); + }); +} + export function sanitizeRecord(record: Record): Record { const redacted: Record = {}; for (const [key, value] of Object.entries(record)) { + if (COMMAND_ARGS_PAYLOAD_KEY_RE.test(key) && Array.isArray(value)) { + redacted[key] = sanitizeCommandArgs(value); + continue; + } + if (COMMAND_PAYLOAD_KEY_RE.test(key) && typeof value === "string") { + redacted[key] = redactSensitiveText(value); + continue; + } if (SECRET_PAYLOAD_KEY_RE.test(key)) { if (isSecretRefBinding(value)) { redacted[key] = sanitizeValue(value); @@ -69,12 +94,10 @@ export function redactEventPayload(payload: Record | null): Rec } export function redactSensitiveText(input: string): string { - return input - .replace(AUTHORIZATION_BEARER_TEXT_RE, `$1${REDACTED_EVENT_VALUE}`) - .replace(JSON_SECRET_FIELD_TEXT_RE, `$1${REDACTED_EVENT_VALUE}$2`) - .replace(ESCAPED_JSON_SECRET_FIELD_TEXT_RE, `$1${REDACTED_EVENT_VALUE}$2`) - .replace(ENV_SECRET_ASSIGNMENT_TEXT_RE, `$1${REDACTED_EVENT_VALUE}`) - .replace(OPENAI_KEY_TEXT_RE, REDACTED_EVENT_VALUE) - .replace(GITHUB_TOKEN_TEXT_RE, REDACTED_EVENT_VALUE) - .replace(JWT_TEXT_RE, REDACTED_EVENT_VALUE); + return redactCommandText( + input + .replace(JSON_SECRET_FIELD_TEXT_RE, `$1${REDACTED_EVENT_VALUE}$2`) + .replace(ESCAPED_JSON_SECRET_FIELD_TEXT_RE, `$1${REDACTED_EVENT_VALUE}$2`), + REDACTED_EVENT_VALUE, + ); } diff --git a/server/src/routes/agents.ts b/server/src/routes/agents.ts index 2dbe8ad8..6b663a85 100644 --- a/server/src/routes/agents.ts +++ b/server/src/routes/agents.ts @@ -72,6 +72,12 @@ import { redactCurrentUserValue } from "../log-redaction.js"; import { renderOrgChartSvg, renderOrgChartPng, type OrgNode, type OrgChartStyle, ORG_CHART_STYLES } from "./org-chart-svg.js"; import { instanceSettingsService } from "../services/instance-settings.js"; import { runClaudeLogin } from "@paperclipai/adapter-claude-local/server"; +import { + DEFAULT_ACPX_LOCAL_AGENT, + DEFAULT_ACPX_LOCAL_MODE, + DEFAULT_ACPX_LOCAL_NON_INTERACTIVE_PERMISSIONS, + DEFAULT_ACPX_LOCAL_PERMISSION_MODE, +} from "@paperclipai/adapter-acpx-local"; import { DEFAULT_CODEX_LOCAL_BYPASS_APPROVALS_AND_SANDBOX, DEFAULT_CODEX_LOCAL_MODEL, @@ -110,6 +116,7 @@ export function agentRoutes( // Legacy hardcoded maps — used as fallback when adapter module does not // declare capability flags explicitly. const DEFAULT_INSTRUCTIONS_PATH_KEYS: Record = { + acpx_local: "instructionsFilePath", claude_local: "instructionsFilePath", codex_local: "instructionsFilePath", droid_local: "instructionsFilePath", @@ -826,6 +833,21 @@ export function agentRoutes( adapterConfig: Record, ): Record { const next = { ...adapterConfig }; + if (adapterType === "acpx_local") { + if (!asNonEmptyString(next.agent)) { + next.agent = DEFAULT_ACPX_LOCAL_AGENT; + } + if (!asNonEmptyString(next.mode)) { + next.mode = DEFAULT_ACPX_LOCAL_MODE; + } + if (!asNonEmptyString(next.permissionMode)) { + next.permissionMode = DEFAULT_ACPX_LOCAL_PERMISSION_MODE; + } + if (!asNonEmptyString(next.nonInteractivePermissions)) { + next.nonInteractivePermissions = DEFAULT_ACPX_LOCAL_NON_INTERACTIVE_PERMISSIONS; + } + return ensureGatewayDeviceKey(adapterType, next); + } if (adapterType === "codex_local") { if (!asNonEmptyString(next.model)) { next.model = DEFAULT_CODEX_LOCAL_MODEL; diff --git a/server/src/services/environment-execution-target.ts b/server/src/services/environment-execution-target.ts index 49ceac60..0f2f70db 100644 --- a/server/src/services/environment-execution-target.ts +++ b/server/src/services/environment-execution-target.ts @@ -34,6 +34,7 @@ export async function resolveEnvironmentExecutionTarget(input: { if (input.environment.driver === "sandbox") { if ( + input.adapterType !== "acpx_local" && input.adapterType !== "codex_local" && input.adapterType !== "claude_local" && input.adapterType !== "gemini_local" && @@ -106,6 +107,7 @@ export async function resolveEnvironmentExecutionTarget(input: { if ( ( input.adapterType !== "codex_local" && + input.adapterType !== "acpx_local" && input.adapterType !== "claude_local" && input.adapterType !== "gemini_local" && input.adapterType !== "opencode_local" && diff --git a/server/src/services/heartbeat.ts b/server/src/services/heartbeat.ts index a76b15a8..f7c0a220 100644 --- a/server/src/services/heartbeat.ts +++ b/server/src/services/heartbeat.ts @@ -121,6 +121,7 @@ import { recoveryService } from "./recovery/service.js"; import { productivityReviewService } from "./productivity-review.js"; import { withAgentStartLock } from "./agent-start-lock.js"; import { redactCurrentUserText, redactCurrentUserValue } from "../log-redaction.js"; +import { redactEventPayload } from "../redaction.js"; import { hasSessionCompactionThresholds, resolveSessionCompactionPolicy, @@ -3118,9 +3119,10 @@ export function heartbeatService(db: Db, options: HeartbeatServiceOptions = {}) const boundedPayload = event.payload ? boundHeartbeatRunEventPayloadForStorage(event.payload) : event.payload; - const sanitizedPayload = boundedPayload - ? redactCurrentUserValue(boundedPayload, currentUserRedactionOptions) - : boundedPayload; + const secretSanitizedPayload = boundedPayload ? redactEventPayload(boundedPayload) : boundedPayload; + const sanitizedPayload = secretSanitizedPayload + ? redactCurrentUserValue(secretSanitizedPayload, currentUserRedactionOptions) + : secretSanitizedPayload; await db.insert(heartbeatRunEvents).values({ companyId: run.companyId, diff --git a/ui/package.json b/ui/package.json index dda6e715..6160df07 100644 --- a/ui/package.json +++ b/ui/package.json @@ -34,6 +34,7 @@ "@dnd-kit/utilities": "^3.2.2", "@lexical/link": "0.35.0", "@mdxeditor/editor": "^3.52.4", + "@paperclipai/adapter-acpx-local": "workspace:*", "@paperclipai/adapter-claude-local": "workspace:*", "@paperclipai/adapter-codex-local": "workspace:*", "@paperclipai/adapter-cursor-local": "workspace:*", diff --git a/ui/src/adapters/acpx-local/index.ts b/ui/src/adapters/acpx-local/index.ts new file mode 100644 index 00000000..d8ae9675 --- /dev/null +++ b/ui/src/adapters/acpx-local/index.ts @@ -0,0 +1,11 @@ +import type { UIAdapterModule } from "../types"; +import { parseAcpxStdoutLine, buildAcpxLocalConfig } from "@paperclipai/adapter-acpx-local/ui"; +import { SchemaConfigFields } from "../schema-config-fields"; + +export const acpxLocalUIAdapter: UIAdapterModule = { + type: "acpx_local", + label: "ACPX (local)", + parseStdoutLine: parseAcpxStdoutLine, + ConfigFields: SchemaConfigFields, + buildAdapterConfig: buildAcpxLocalConfig, +}; diff --git a/ui/src/adapters/adapter-display-registry.ts b/ui/src/adapters/adapter-display-registry.ts index fe809273..d75da557 100644 --- a/ui/src/adapters/adapter-display-registry.ts +++ b/ui/src/adapters/adapter-display-registry.ts @@ -49,9 +49,18 @@ export interface AdapterDisplayInfo { recommended?: boolean; comingSoon?: boolean; disabledLabel?: string; + experimental?: boolean; + hideFromVisualSelection?: boolean; } const adapterDisplayMap: Record = { + acpx_local: { + label: "ACPX", + description: "Experimental local ACPX multi-agent adapter", + icon: Bot, + experimental: true, + hideFromVisualSelection: true, + }, claude_local: { label: "Claude Code", description: "Local Claude agent", diff --git a/ui/src/adapters/metadata.test.ts b/ui/src/adapters/metadata.test.ts index 70b7ef3c..c08c2f21 100644 --- a/ui/src/adapters/metadata.test.ts +++ b/ui/src/adapters/metadata.test.ts @@ -1,5 +1,10 @@ import { describe, expect, it } from "vitest"; -import { isEnabledAdapterType, listAdapterOptions } from "./metadata"; +import { + isEnabledAdapterType, + isValidAdapterType, + isVisualAdapterChoice, + listAdapterOptions, +} from "./metadata"; import type { UIAdapterModule } from "./types"; const externalAdapter: UIAdapterModule = { @@ -22,6 +27,7 @@ describe("adapter metadata", () => { label: "external_test", comingSoon: false, hidden: false, + experimental: false, }, ]); }); @@ -30,4 +36,27 @@ describe("adapter metadata", () => { expect(isEnabledAdapterType("process")).toBe(false); expect(isEnabledAdapterType("http")).toBe(false); }); -}); \ No newline at end of file + + it("keeps ACPX selectable from explicit configuration but out of visual pickers", () => { + expect(isEnabledAdapterType("acpx_local")).toBe(true); + expect(isValidAdapterType("acpx_local")).toBe(true); + expect(isVisualAdapterChoice("acpx_local")).toBe(false); + + expect( + listAdapterOptions((type) => type, [ + { + ...externalAdapter, + type: "acpx_local", + }, + ]), + ).toEqual([ + { + value: "acpx_local", + label: "acpx_local", + comingSoon: false, + hidden: false, + experimental: true, + }, + ]); + }); +}); diff --git a/ui/src/adapters/metadata.ts b/ui/src/adapters/metadata.ts index 297a7237..d19d0093 100644 --- a/ui/src/adapters/metadata.ts +++ b/ui/src/adapters/metadata.ts @@ -15,6 +15,7 @@ export interface AdapterOptionMetadata { label: string; comingSoon: boolean; hidden: boolean; + experimental: boolean; } export function listKnownAdapterTypes(): string[] { @@ -43,6 +44,15 @@ export function isValidAdapterType(type: string): boolean { return true; } +/** + * Check whether an adapter should appear in card-style visual pickers. + * Experimental adapters can remain selectable from explicit configuration + * dropdowns without being recommended during onboarding or setup flows. + */ +export function isVisualAdapterChoice(type: string): boolean { + return !getAdapterDisplay(type).hideFromVisualSelection; +} + /** * Build option metadata for a list of adapters (for dropdowns). * `labelFor` callback allows callers to override labels; defaults to display registry. @@ -57,6 +67,7 @@ export function listAdapterOptions( label: getLabel(adapter.type), comingSoon: !!getAdapterDisplay(adapter.type).comingSoon, hidden: isAdapterTypeHidden(adapter.type), + experimental: !!getAdapterDisplay(adapter.type).experimental, })); } diff --git a/ui/src/adapters/registry.ts b/ui/src/adapters/registry.ts index e8e24eaf..d53eaaae 100644 --- a/ui/src/adapters/registry.ts +++ b/ui/src/adapters/registry.ts @@ -1,4 +1,5 @@ import type { UIAdapterModule } from "./types"; +import { acpxLocalUIAdapter } from "./acpx-local"; import { claudeLocalUIAdapter } from "./claude-local"; import { codexLocalUIAdapter } from "./codex-local"; import { cursorLocalUIAdapter } from "./cursor"; @@ -49,6 +50,7 @@ setDynamicParserResultNotifier(notifyAdapterChange); function registerBuiltInUIAdapters() { for (const adapter of [ + acpxLocalUIAdapter, claudeLocalUIAdapter, codexLocalUIAdapter, geminiLocalUIAdapter, diff --git a/ui/src/adapters/use-adapter-capabilities.ts b/ui/src/adapters/use-adapter-capabilities.ts index 631c01f3..786776fe 100644 --- a/ui/src/adapters/use-adapter-capabilities.ts +++ b/ui/src/adapters/use-adapter-capabilities.ts @@ -16,6 +16,7 @@ const ALL_FALSE: AdapterCapabilities = { * return correct values on first render before the /api/adapters call resolves. */ const KNOWN_DEFAULTS: Record = { + acpx_local: { supportsInstructionsBundle: true, supportsSkills: true, supportsLocalAgentJwt: true, requiresMaterializedRuntimeSkills: false, supportsModelProfiles: false }, claude_local: { supportsInstructionsBundle: true, supportsSkills: true, supportsLocalAgentJwt: true, requiresMaterializedRuntimeSkills: false, supportsModelProfiles: true }, codex_local: { supportsInstructionsBundle: true, supportsSkills: true, supportsLocalAgentJwt: true, requiresMaterializedRuntimeSkills: false, supportsModelProfiles: true }, cursor: { supportsInstructionsBundle: true, supportsSkills: true, supportsLocalAgentJwt: true, requiresMaterializedRuntimeSkills: true, supportsModelProfiles: true }, diff --git a/ui/src/components/AgentConfigForm.tsx b/ui/src/components/AgentConfigForm.tsx index f1af84a6..c36463ab 100644 --- a/ui/src/components/AgentConfigForm.tsx +++ b/ui/src/components/AgentConfigForm.tsx @@ -52,7 +52,7 @@ import { ReportsToPicker } from "./ReportsToPicker"; import { EnvVarEditor } from "./EnvVarEditor"; import { shouldShowLegacyWorkingDirectoryField } from "../lib/legacy-agent-config"; import { listAdapterOptions, listVisibleAdapterTypes } from "../adapters/metadata"; -import { getAdapterLabel } from "../adapters/adapter-display-registry"; +import { getAdapterDisplay, getAdapterLabel } from "../adapters/adapter-display-registry"; import { useDisabledAdaptersSync } from "../adapters/use-disabled-adapters"; import { buildAgentUpdatePatch, type AgentConfigOverlay } from "../lib/agent-config-patch"; import { useAdapterCapabilities } from "../adapters/use-adapter-capabilities"; @@ -1239,6 +1239,7 @@ function AdapterTypeDropdown({ disabledTypes: Set; }) { const [open, setOpen] = useState(false); + const selectedDisplay = getAdapterDisplay(value); const adapterList = useMemo( () => listAdapterOptions((type) => adapterLabels[type] ?? getAdapterLabel(type)).filter( @@ -1251,9 +1252,10 @@ function AdapterTypeDropdown({ @@ -1280,6 +1282,7 @@ function AdapterTypeDropdown({ {item.value === "opencode_local" ? : null} {item.label} + {item.experimental && } {item.comingSoon && ( Coming soon @@ -1291,6 +1294,14 @@ function AdapterTypeDropdown({ ); } +function ExperimentalBadge() { + return ( + + Experimental + + ); +} + function ModelDropdown({ models, value, diff --git a/ui/src/components/NewAgentDialog.tsx b/ui/src/components/NewAgentDialog.tsx index 4ff672c6..6400038d 100644 --- a/ui/src/components/NewAgentDialog.tsx +++ b/ui/src/components/NewAgentDialog.tsx @@ -17,6 +17,7 @@ import { } from "lucide-react"; import { cn } from "@/lib/utils"; import { listUIAdapters } from "../adapters"; +import { isVisualAdapterChoice } from "../adapters/metadata"; import { getAdapterDisplay } from "../adapters/adapter-display-registry"; import { useDisabledAdaptersSync } from "../adapters/use-disabled-adapters"; @@ -57,7 +58,11 @@ export function NewAgentDialog() { // This automatically includes external/plugin adapters. const adapterGrid = useMemo(() => { const registered = listUIAdapters() - .filter((a) => isAgentAdapterType(a.type) && !disabledTypes.has(a.type)); + .filter((a) => + isAgentAdapterType(a.type) && + !disabledTypes.has(a.type) && + isVisualAdapterChoice(a.type) + ); // Sort: recommended first, then alphabetical return registered diff --git a/ui/src/components/OnboardingWizard.tsx b/ui/src/components/OnboardingWizard.tsx index 9ec608f3..5000d759 100644 --- a/ui/src/components/OnboardingWizard.tsx +++ b/ui/src/components/OnboardingWizard.tsx @@ -25,6 +25,7 @@ import { } from "../lib/model-utils"; import { getUIAdapter } from "../adapters"; import { listUIAdapters } from "../adapters"; +import { isVisualAdapterChoice } from "../adapters/metadata"; import { useDisabledAdaptersSync } from "../adapters/use-disabled-adapters"; import { useAdapterCapabilities } from "../adapters/use-adapter-capabilities"; import { getAdapterDisplay } from "../adapters/adapter-display-registry"; @@ -209,7 +210,11 @@ export function OnboardingWizard() { const { recommendedAdapters, moreAdapters } = useMemo(() => { const SYSTEM_ADAPTER_TYPES = new Set(["process", "http"]); const all = listUIAdapters() - .filter((a) => !SYSTEM_ADAPTER_TYPES.has(a.type) && !disabledTypes.has(a.type)) + .filter((a) => + !SYSTEM_ADAPTER_TYPES.has(a.type) && + !disabledTypes.has(a.type) && + isVisualAdapterChoice(a.type) + ) .map((a) => ({ ...getAdapterDisplay(a.type), type: a.type })); return { diff --git a/ui/src/pages/AgentDetail.tsx b/ui/src/pages/AgentDetail.tsx index 0eca9441..d1dddfed 100644 --- a/ui/src/pages/AgentDetail.tsx +++ b/ui/src/pages/AgentDetail.tsx @@ -27,6 +27,7 @@ import { PageTabBar } from "../components/PageTabBar"; import { adapterLabels, roleLabels, help } from "../components/agent-config-primitives"; import { ToggleSwitch } from "@/components/ui/toggle-switch"; import { useAdapterCapabilities } from "@/adapters/use-adapter-capabilities"; +import { redactCommandText as redactCommandSecretText } from "@paperclipai/adapter-utils"; import { MarkdownEditor } from "../components/MarkdownEditor"; import { assetsApi } from "../api/assets"; import { getUIAdapter, buildTranscript, onAdapterChange } from "../adapters"; @@ -115,6 +116,7 @@ const RUN_LOG_PAGE_BYTES = 256_000; const REDACTED_ENV_VALUE = "***REDACTED***"; const SECRET_ENV_KEY_RE = /(api[-_]?key|access[-_]?token|auth(?:_?token)?|authorization|bearer|secret|passwd|password|credential|jwt|private[-_]?key|cookie|connectionstring)/i; +const COMMAND_ENV_KEY_RE = /(^command$|^cmd$|command[-_]?line|resolved[-_]?command|PAPERCLIP_RESOLVED_COMMAND)/i; const JWT_VALUE_RE = /^[A-Za-z0-9_-]+\.[A-Za-z0-9_-]+\.[A-Za-z0-9_-]+(?:\.[A-Za-z0-9_-]+)?$/; function redactPathText(value: string, censorUsernameInLogs: boolean) { @@ -125,6 +127,10 @@ function redactPathValue(value: T, censorUsernameInLogs: boolean): T { return redactHomePathUserSegmentsInValue(value, { enabled: censorUsernameInLogs }); } +function redactCommandText(value: string, censorUsernameInLogs: boolean): string { + return redactPathText(redactCommandSecretText(value, REDACTED_ENV_VALUE), censorUsernameInLogs); +} + function shouldRedactSecretValue(key: string, value: unknown): boolean { if (SECRET_ENV_KEY_RE.test(key)) return true; if (typeof value !== "string") return false; @@ -142,6 +148,7 @@ function redactEnvValue(key: string, value: unknown, censorUsernameInLogs: boole } if (shouldRedactSecretValue(key, value)) return REDACTED_ENV_VALUE; if (value === null || value === undefined) return ""; + if (typeof value === "string" && COMMAND_ENV_KEY_RE.test(key)) return redactCommandText(value, censorUsernameInLogs); if (typeof value === "string") return redactPathText(value, censorUsernameInLogs); try { return JSON.stringify(redactPathValue(value, censorUsernameInLogs)); @@ -302,7 +309,7 @@ export function RunInvocationCard({ payload: Record; censorUsernameInLogs: boolean; }) { - const commandLine = [ + const rawCommandLine = [ typeof payload.command === "string" ? payload.command : null, ...(Array.isArray(payload.commandArgs) ? payload.commandArgs.filter((value): value is string => typeof value === "string") @@ -310,6 +317,7 @@ export function RunInvocationCard({ ] .filter((value): value is string => Boolean(value)) .join(" "); + const commandLine = rawCommandLine ? redactCommandText(rawCommandLine, censorUsernameInLogs) : ""; const hasAdvancedDetails = commandLine.length > 0 @@ -2466,7 +2474,7 @@ function PromptEditorSkeleton() { ); } -function AgentSkillsTab({ +export function AgentSkillsTab({ agent, companyId, }: { @@ -2649,11 +2657,18 @@ function AgentSkillsTab({ }, [skillSnapshot?.mode]); const unsupportedSkillMessage = useMemo(() => { if (skillSnapshot?.mode !== "unsupported") return null; + if ( + agent.adapterType === "acpx_local" && + typeof agent.adapterConfig.agent === "string" && + agent.adapterConfig.agent === "custom" + ) { + return "Paperclip cannot manage skills for custom ACP commands yet."; + } if (agent.adapterType === "openclaw_gateway") { return "Paperclip cannot manage OpenClaw skills here. Visit your OpenClaw instance to manage this agent's skills."; } return "Paperclip cannot manage skills for this adapter yet. Manage them in the adapter directly."; - }, [agent.adapterType, skillSnapshot?.mode]); + }, [agent.adapterConfig.agent, agent.adapterType, skillSnapshot?.mode]); const hasUnsavedChanges = !arraysEqual(skillDraft, lastSavedSkills); const saveStatusLabel = syncSkills.isPending ? "Saving changes..." diff --git a/ui/storybook/.storybook/preview.tsx b/ui/storybook/.storybook/preview.tsx index 3d0397d2..8871f536 100644 --- a/ui/storybook/.storybook/preview.tsx +++ b/ui/storybook/.storybook/preview.tsx @@ -26,6 +26,12 @@ import "@mdxeditor/editor/style.css"; import "./tailwind-entry.css"; import "./styles.css"; +// Install fetch monkeypatch eagerly so any module-load-time fetches (e.g. schema +// caches in adapter config renderers) hit our fixtures before they reach the +// network. Some renderers issue a fetch from useEffect on first paint, which +// can otherwise race the StorybookProviders mount. +installStorybookApiFixtures(); + function installStorybookApiFixtures() { if (typeof window === "undefined") return; const currentWindow = window as typeof window & { @@ -148,6 +154,16 @@ function installStorybookApiFixtures() { return Response.json([]); } + const adapterSchemaMatch = url.pathname.match(/^\/api\/adapters\/([^/]+)\/config-schema$/); + if (adapterSchemaMatch) { + const [, adapterType] = adapterSchemaMatch; + const schemas = (window as typeof window & { + __paperclipStorybookAdapterSchemas?: Record; + }).__paperclipStorybookAdapterSchemas; + const schema = schemas?.[adapterType]; + if (schema) return Response.json(schema); + } + const companyResourceMatch = url.pathname.match(/^\/api\/companies\/([^/]+)\/([^/]+)$/); if (companyResourceMatch) { const [, companyId, resource] = companyResourceMatch; @@ -233,7 +249,6 @@ function StorybookProviders({ useEffect(() => { applyStorybookTheme(theme); - installStorybookApiFixtures(); }, [theme]); return ( diff --git a/ui/storybook/stories/acpx-local.stories.tsx b/ui/storybook/stories/acpx-local.stories.tsx new file mode 100644 index 00000000..93d30ed2 --- /dev/null +++ b/ui/storybook/stories/acpx-local.stories.tsx @@ -0,0 +1,896 @@ +import { useMemo, useState, type ReactNode } from "react"; +import type { Meta, StoryObj } from "@storybook/react-vite"; +import { useQueryClient } from "@tanstack/react-query"; +import type { AdapterConfigSchema, CreateConfigValues } from "@paperclipai/adapter-utils"; +import { parseAcpxStdoutLine } from "@paperclipai/adapter-acpx-local/ui"; +import type { + Agent, + AgentSkillSnapshot, + CompanySkillListItem, +} from "@paperclipai/shared"; +import { SchemaConfigFields } from "@/adapters/schema-config-fields"; +import type { TranscriptEntry } from "@/adapters"; +import { RunTranscriptView } from "@/components/transcript/RunTranscriptView"; +import { AgentSkillsTab } from "@/pages/AgentDetail"; +import { Card, CardContent, CardHeader, CardTitle } from "@/components/ui/card"; +import { Badge } from "@/components/ui/badge"; +import { queryKeys } from "@/lib/queryKeys"; + +type SchemaWindow = typeof window & { + __paperclipStorybookAdapterSchemas?: Record; +}; + +// Mirrors packages/adapters/acpx-local/src/server/config-schema.ts. Inlined so the +// storybook bundle does not pull node-only imports from the adapter server entry. +const acpxLocalConfigSchema: AdapterConfigSchema = { + fields: [ + { + key: "agent", + label: "ACP agent", + type: "select", + default: "claude", + required: true, + options: [ + { value: "claude", label: "Claude via ACPX" }, + { value: "codex", label: "Codex via ACPX" }, + { value: "custom", label: "Custom ACP command" }, + ], + hint: "Choose the ACP agent launched through ACPX.", + }, + { + key: "agentCommand", + label: "Agent command", + type: "text", + hint: "Required for custom agents; optional override for built-in Claude or Codex ACP commands.", + }, + { + key: "mode", + label: "Session mode", + type: "select", + default: "persistent", + options: [ + { value: "persistent", label: "Persistent" }, + { value: "oneshot", label: "One shot" }, + ], + }, + { + key: "permissionMode", + label: "Permission mode", + type: "select", + default: "approve-all", + options: [ + { value: "approve-all", label: "Approve all" }, + { value: "default", label: "ACP default" }, + ], + hint: "Defaults to maximum permissions: ACPX permission requests are auto-approved.", + }, + { + key: "nonInteractivePermissions", + label: "Non-interactive permissions", + type: "select", + default: "deny", + options: [ + { value: "deny", label: "Deny" }, + { value: "fail", label: "Fail" }, + ], + }, + { + key: "cwd", + label: "Working directory", + type: "text", + hint: "Absolute fallback directory. Paperclip execution workspaces can override this at runtime.", + }, + { + key: "stateDir", + label: "State directory", + type: "text", + hint: "Optional ACPX session state directory. Defaults to Paperclip-managed company/agent scoped storage.", + }, + { + key: "instructionsFilePath", + label: "Instructions file", + type: "text", + hint: "Optional absolute path to markdown instructions injected into the run prompt.", + }, + { key: "promptTemplate", label: "Prompt template", type: "textarea" }, + { key: "bootstrapPromptTemplate", label: "Bootstrap prompt template", type: "textarea" }, + { key: "timeoutSec", label: "Timeout seconds", type: "number", default: 0 }, + { + key: "env", + label: "Environment JSON", + type: "textarea", + hint: "Optional JSON object of environment values or secret bindings.", + }, + ], +}; + +function installAcpxSchemaMock(): void { + if (typeof window === "undefined") return; + const win = window as SchemaWindow; + win.__paperclipStorybookAdapterSchemas = { + ...(win.__paperclipStorybookAdapterSchemas ?? {}), + acpx_local: acpxLocalConfigSchema, + }; +} + +function ConfigSection({ title, description, children }: { title: string; description?: string; children: ReactNode }) { + return ( + + + {title} + {description && ( +

{description}

+ )} + + +
{children}
+
+ + ); +} + +function AcpxLocalConfigStory() { + installAcpxSchemaMock(); + + const [values, setValues] = useState(() => ({ + name: "", + role: "", + title: "", + capabilities: "", + icon: "code", + adapterType: "acpx_local", + command: "", + promptTemplate: "", + bootstrapPromptTemplate: "", + instructionsFilePath: "", + extraArgs: "", + envVars: "", + envBindings: {}, + runtimeServicesJson: "", + runtimeDesiredState: "manual", + runtimeServiceStates: {}, + heartbeatEnabled: false, + intervalSec: 900, + wakeOnDemand: true, + cooldownSec: 60, + maxConcurrentRuns: 1, + pauseOnIdle: false, + idleTimeoutSec: 0, + runtimeMaxStuckHeartbeats: 0, + adapterSchemaValues: {}, + } as unknown as CreateConfigValues)); + + return ( +
+
+ + UX preview + +

Agent config — acpx_local

+

+ Renders the schema-driven adapter config block exactly as the operator sees it inside the agent edit form. + Defaults reflect Phase 3 of PAP-2944: maximum-permission auto-approve, persistent session mode, Claude as the + default ACP agent. +

+
+ + + setValues((current) => ({ ...current, ...patch }))} + config={{}} + eff={(_group, _field, original) => original} + mark={() => {}} + models={[]} + /> + + + +
+          {JSON.stringify(values.adapterSchemaValues ?? {}, null, 2)}
+        
+
+
+ ); +} + +const ACPX_TS_BASE = new Date("2026-04-30T15:30:00.000Z").getTime(); + +function ts(offsetMs: number): string { + return new Date(ACPX_TS_BASE + offsetMs).toISOString(); +} + +function flattenLines(lines: Array<{ payload: Record; offsetMs: number }>): TranscriptEntry[] { + const entries: TranscriptEntry[] = []; + for (const { payload, offsetMs } of lines) { + const parsed = parseAcpxStdoutLine(JSON.stringify(payload), ts(offsetMs)); + entries.push(...parsed); + } + return entries; +} + +function useAcpxTranscript(): TranscriptEntry[] { + return useMemo( + () => + flattenLines([ + { + offsetMs: 0, + payload: { + type: "acpx.session", + agent: "claude", + mode: "persistent", + permissionMode: "approve-all", + acpSessionId: "acp_session_42a8c1", + runtimeSessionName: "acpx-claude-PAP-1812", + }, + }, + { + offsetMs: 800, + payload: { + type: "acpx.status", + tag: "context_window", + used: 12000, + size: 200000, + }, + }, + { + offsetMs: 1200, + payload: { + type: "acpx.text_delta", + text: "Looking at the failing test in `runtime-state.test.ts` — ", + channel: "thought", + }, + }, + { + offsetMs: 1500, + payload: { + type: "acpx.text_delta", + text: "the assertion expects `pendingRestart` but the new state machine uses `restartScheduled`.\n", + channel: "thought", + }, + }, + { + offsetMs: 1900, + payload: { + type: "acpx.text_delta", + text: "I'll inspect the test file to confirm the change.\n\n", + channel: "output", + tag: "agent_message_chunk", + }, + }, + { + offsetMs: 2200, + payload: { + type: "acpx.tool_call", + name: "read", + toolCallId: "tool_read_01", + status: "running", + text: "server/src/runtime-state.test.ts", + input: { path: "server/src/runtime-state.test.ts" }, + }, + }, + { + offsetMs: 3500, + payload: { + type: "acpx.tool_call", + name: "read", + toolCallId: "tool_read_01", + status: "completed", + text: "Read 142 lines", + }, + }, + { + offsetMs: 3700, + payload: { + type: "acpx.text_delta", + text: + "The test still references the old `pendingRestart` field. I'll update the assertion to use the renamed `restartScheduled` flag.\n\n", + channel: "output", + }, + }, + { + offsetMs: 4200, + payload: { + type: "acpx.tool_call", + name: "edit", + toolCallId: "tool_edit_02", + status: "running", + input: { + path: "server/src/runtime-state.test.ts", + find: "expect(state.pendingRestart).toBe(true)", + replace: "expect(state.restartScheduled).toBe(true)", + }, + }, + }, + { + offsetMs: 5400, + payload: { + type: "acpx.tool_call", + name: "edit", + toolCallId: "tool_edit_02", + status: "completed", + text: "1 replacement", + }, + }, + { + offsetMs: 5800, + payload: { + type: "acpx.status", + text: "Running vitest for runtime-state.test.ts", + }, + }, + { + offsetMs: 6100, + payload: { + type: "acpx.tool_call", + name: "command", + toolCallId: "tool_run_03", + status: "running", + input: { command: "pnpm exec vitest run server/src/runtime-state.test.ts" }, + }, + }, + { + offsetMs: 9100, + payload: { + type: "acpx.tool_call", + name: "command", + toolCallId: "tool_run_03", + status: "completed", + text: + "Test Files 1 passed (1)\nTests 6 passed (6)\nDuration 2.31s", + }, + }, + { + offsetMs: 9400, + payload: { + type: "acpx.text_delta", + text: + "**Test passes.** Updated `runtime-state.test.ts` to assert against `restartScheduled` instead of the renamed `pendingRestart` field.\n\n", + channel: "output", + }, + }, + { + offsetMs: 9600, + payload: { + type: "acpx.text_delta", + text: + "Next I'll update the issue with a summary and hand it back to QA for verification.", + channel: "output", + }, + }, + { + offsetMs: 9800, + payload: { + type: "acpx.status", + tag: "context_window", + used: 18450, + size: 200000, + }, + }, + { + offsetMs: 10000, + payload: { + type: "acpx.result", + summary: "completed", + stopReason: "end_turn", + inputTokens: 18450, + outputTokens: 412, + cachedTokens: 12000, + costUsd: 0.024, + subtype: "end_turn", + }, + }, + ]), + [], + ); +} + +function AcpxLocalTranscriptStory() { + const entries = useAcpxTranscript(); + + return ( +
+
+ + UX preview + +

Run transcript — acpx_local streamed events

+

+ Demonstrates how a streamed acpx_local run renders through the existing transcript pipeline. Events flow + through parseAcpxStdoutLine (session init, thought delta, assistant delta, tool call/result + pairs, context window status, final result) and into RunTranscriptView in nice mode. +

+
+ + + + Run Transcript (nice mode) +

+ Streaming, comfortable density. Mirrors the agent detail page transcript surface. +

+
+ + + +
+ + + + Run Transcript (compact density) +

+ Same parsed events, compact density — matches the live-run widget on the issue thread. +

+
+ + + +
+
+ ); +} + +const SKILLS_COMPANY_ID = "company-storybook"; + +const acpxSkillsCompanyLibrary: CompanySkillListItem[] = [ + { + id: "skill-paperclip", + companyId: SKILLS_COMPANY_ID, + key: "paperclip", + slug: "paperclip", + name: "Paperclip", + description: + "Coordination skill: heartbeats, checkout, comments, and routine API patterns for Paperclip agents.", + sourceType: "local_path", + sourceLocator: "skills/paperclip", + sourceRef: null, + trustLevel: "scripts_executables", + compatibility: "compatible", + fileInventory: [{ path: "SKILL.md", kind: "skill" }], + createdAt: new Date("2026-04-12T09:00:00.000Z"), + updatedAt: new Date("2026-04-22T15:30:00.000Z"), + attachedAgentCount: 4, + editable: false, + editableReason: "Required by Paperclip", + sourceLabel: "Paperclip", + sourceBadge: "paperclip", + sourcePath: "skills/paperclip", + }, + { + id: "skill-design-guide", + companyId: SKILLS_COMPANY_ID, + key: "design-guide", + slug: "design-guide", + name: "Design guide", + description: + "Paperclip UI design system reference: tokens, typography, status colors, and reusable component patterns.", + sourceType: "local_path", + sourceLocator: "skills/design-guide", + sourceRef: null, + trustLevel: "markdown_only", + compatibility: "compatible", + fileInventory: [{ path: "SKILL.md", kind: "skill" }], + createdAt: new Date("2026-04-15T10:00:00.000Z"), + updatedAt: new Date("2026-04-25T12:00:00.000Z"), + attachedAgentCount: 2, + editable: true, + editableReason: null, + sourceLabel: "Local", + sourceBadge: "local", + sourcePath: "skills/design-guide", + }, + { + id: "skill-mobile-qa", + companyId: SKILLS_COMPANY_ID, + key: "mobile-app-qa", + slug: "mobile-app-qa", + name: "Mobile app QA", + description: + "Exploratory QA flows for mobile/web apps using Chrome automation. Captures bugs and writes a final report.", + sourceType: "local_path", + sourceLocator: "skills/mobile-app-qa", + sourceRef: null, + trustLevel: "assets", + compatibility: "compatible", + fileInventory: [{ path: "SKILL.md", kind: "skill" }], + createdAt: new Date("2026-04-18T11:00:00.000Z"), + updatedAt: new Date("2026-04-26T09:30:00.000Z"), + attachedAgentCount: 1, + editable: true, + editableReason: null, + sourceLabel: "Local", + sourceBadge: "local", + sourcePath: "skills/mobile-app-qa", + }, +]; + +function buildAcpxAgent({ + agentId, + acpAgent, + desiredSkills, +}: { + agentId: string; + acpAgent: "claude" | "codex" | "custom"; + desiredSkills: string[]; +}): Agent { + return { + id: agentId, + companyId: SKILLS_COMPANY_ID, + name: `ACPX ${acpAgent === "custom" ? "Custom" : acpAgent === "codex" ? "Codex" : "Claude"}`, + urlKey: `acpx-${acpAgent}`, + role: "engineer", + title: `ACPX ${acpAgent} agent`, + icon: "code", + status: "idle", + reportsTo: null, + capabilities: "Routes work through the ACPX adapter for skill-tagged agent flows.", + adapterType: "acpx_local", + adapterConfig: { + agent: acpAgent, + mode: "persistent", + permissionMode: "approve-all", + paperclipSkillSync: { + desiredSkills, + }, + }, + runtimeConfig: {}, + budgetMonthlyCents: 100_000, + spentMonthlyCents: 0, + pauseReason: null, + pausedAt: null, + permissions: { canCreateAgents: false }, + lastHeartbeatAt: null, + metadata: null, + createdAt: new Date("2026-04-30T12:00:00.000Z"), + updatedAt: new Date("2026-04-30T12:00:00.000Z"), + } as Agent; +} + +function buildAcpxClaudeSnapshot(): AgentSkillSnapshot { + return { + adapterType: "acpx_local", + supported: true, + mode: "ephemeral", + desiredSkills: ["paperclip", "design-guide"], + warnings: [], + entries: [ + { + key: "paperclip", + runtimeName: "paperclip", + desired: true, + managed: true, + required: true, + requiredReason: "Paperclip coordination skill is mandatory for control-plane agents.", + state: "configured", + origin: "paperclip_required", + originLabel: "Required by Paperclip", + readOnly: false, + sourcePath: "skills/paperclip", + targetPath: null, + detail: "Will be mounted into the next ACPX Claude session.", + }, + { + key: "design-guide", + runtimeName: "design-guide", + desired: true, + managed: true, + required: false, + state: "configured", + origin: "company_managed", + originLabel: "Managed by Paperclip", + readOnly: false, + sourcePath: "skills/design-guide", + targetPath: null, + detail: "Will be mounted into the next ACPX Claude session.", + }, + { + key: "mobile-app-qa", + runtimeName: "mobile-app-qa", + desired: false, + managed: true, + required: false, + state: "available", + origin: "company_managed", + originLabel: "Managed by Paperclip", + readOnly: false, + sourcePath: "skills/mobile-app-qa", + targetPath: null, + detail: null, + }, + ], + }; +} + +function buildAcpxCodexSnapshot(): AgentSkillSnapshot { + return { + adapterType: "acpx_local", + supported: true, + mode: "ephemeral", + desiredSkills: ["paperclip"], + warnings: [], + entries: [ + { + key: "paperclip", + runtimeName: "paperclip", + desired: true, + managed: true, + required: true, + requiredReason: "Paperclip coordination skill is mandatory for control-plane agents.", + state: "configured", + origin: "paperclip_required", + originLabel: "Required by Paperclip", + readOnly: false, + sourcePath: "skills/paperclip", + targetPath: null, + detail: "Will be linked into the effective CODEX_HOME/skills/ directory for the next ACPX Codex session.", + }, + { + key: "design-guide", + runtimeName: "design-guide", + desired: false, + managed: true, + required: false, + state: "available", + origin: "company_managed", + originLabel: "Managed by Paperclip", + readOnly: false, + sourcePath: "skills/design-guide", + targetPath: null, + detail: null, + }, + { + key: "mobile-app-qa", + runtimeName: "mobile-app-qa", + desired: false, + managed: true, + required: false, + state: "available", + origin: "company_managed", + originLabel: "Managed by Paperclip", + readOnly: false, + sourcePath: "skills/mobile-app-qa", + targetPath: null, + detail: null, + }, + ], + }; +} + +function buildAcpxCustomSnapshot(): AgentSkillSnapshot { + return { + adapterType: "acpx_local", + supported: false, + mode: "unsupported", + desiredSkills: ["design-guide"], + warnings: [ + "Custom ACP commands do not expose a Paperclip skill integration contract yet; selected skills are tracked only.", + ], + entries: [ + { + key: "paperclip", + runtimeName: "paperclip", + desired: false, + managed: true, + required: true, + requiredReason: "Paperclip coordination skill is mandatory for control-plane agents.", + state: "available", + origin: "paperclip_required", + originLabel: "Required by Paperclip", + readOnly: false, + sourcePath: "skills/paperclip", + targetPath: null, + detail: null, + }, + { + key: "design-guide", + runtimeName: "design-guide", + desired: true, + managed: true, + required: false, + state: "configured", + origin: "company_managed", + originLabel: "Managed by Paperclip", + readOnly: false, + sourcePath: "skills/design-guide", + targetPath: null, + detail: + "Desired state is stored in Paperclip only; custom ACP commands need an explicit skill integration contract before runtime sync is available.", + }, + { + key: "mobile-app-qa", + runtimeName: "mobile-app-qa", + desired: false, + managed: true, + required: false, + state: "available", + origin: "company_managed", + originLabel: "Managed by Paperclip", + readOnly: false, + sourcePath: "skills/mobile-app-qa", + targetPath: null, + detail: null, + }, + ], + }; +} + +function StoryFrame({ + title, + subtitle, + children, +}: { + title: string; + subtitle: string; + children: ReactNode; +}) { + return ( +
+
+ + UX preview + +

{title}

+

{subtitle}

+
+ + + + Agent detail — Skills tab + + {children} + +
+ ); +} + +function AcpxSkillsState({ + agent, + snapshot, + library, +}: { + agent: Agent; + snapshot: AgentSkillSnapshot; + library: CompanySkillListItem[]; +}) { + const queryClient = useQueryClient(); + queryClient.setQueryData(queryKeys.companySkills.list(SKILLS_COMPANY_ID), library); + queryClient.setQueryData(queryKeys.agents.skills(agent.id), snapshot); + return ; +} + +function AcpxClaudeSkillsStory() { + const agent = buildAcpxAgent({ + agentId: "agent-acpx-claude", + acpAgent: "claude", + desiredSkills: ["paperclip", "design-guide"], + }); + return ( + + + + ); +} + +function AcpxCodexSkillsStory() { + const agent = buildAcpxAgent({ + agentId: "agent-acpx-codex", + acpAgent: "codex", + desiredSkills: ["paperclip"], + }); + return ( + + + + ); +} + +function AcpxCustomSkillsStory() { + const agent = buildAcpxAgent({ + agentId: "agent-acpx-custom", + acpAgent: "custom", + desiredSkills: ["design-guide"], + }); + return ( + + + + ); +} + +function AcpxClaudeSkillsLoadingStory() { + const agent = buildAcpxAgent({ + agentId: "agent-acpx-claude-loading", + acpAgent: "claude", + desiredSkills: [], + }); + return ( + + + + ); +} + +function AcpxClaudeSkillsEmptyLibraryStory() { + const agent = buildAcpxAgent({ + agentId: "agent-acpx-claude-empty", + acpAgent: "claude", + desiredSkills: [], + }); + const emptySnapshot: AgentSkillSnapshot = { + adapterType: "acpx_local", + supported: true, + mode: "ephemeral", + desiredSkills: [], + warnings: [], + entries: [], + }; + return ( + + + + ); +} + +const meta: Meta = { + title: "Adapters / acpx_local", + parameters: { + layout: "fullscreen", + }, +}; + +export default meta; + +export const ConfigForm: StoryObj = { + name: "Agent config form", + render: () => , +}; + +export const Transcript: StoryObj = { + name: "Streamed run transcript", + render: () => , +}; + +export const SkillsTabClaude: StoryObj = { + name: "Skills tab — ACPX Claude", + render: () => , +}; + +export const SkillsTabCodex: StoryObj = { + name: "Skills tab — ACPX Codex", + render: () => , +}; + +export const SkillsTabCustom: StoryObj = { + name: "Skills tab — ACPX custom (unsupported)", + render: () => , +}; + +export const SkillsTabLoading: StoryObj = { + name: "Skills tab — loading", + render: () => , +}; + +export const SkillsTabEmptyLibrary: StoryObj = { + name: "Skills tab — empty company library", + render: () => , +}; diff --git a/vitest.config.ts b/vitest.config.ts index c886095d..85fd42d4 100644 --- a/vitest.config.ts +++ b/vitest.config.ts @@ -6,6 +6,7 @@ export default defineConfig({ "packages/shared", "packages/db", "packages/adapter-utils", + "packages/adapters/acpx-local", "packages/adapters/claude-local", "packages/adapters/codex-local", "packages/adapters/cursor-local",