Commit Graph
1712 Commits
Author SHA1 Message Date
Dotta 0ae1fce46d Merge commit 'd0f7f6f57c' into codex/boat-environment
* commit 'd0f7f6f57c':
  Format ACPX rejection diagnostic regressions
2026-10-11 00:38:44 -05:00
Dotta d0f7f6f57c Format ACPX rejection diagnostic regressions 2026-10-11 00:38:09 -05:00
Dotta 2d4ac02303 Merge commit '03051ec2a7' into codex/boat-environment
* commit '03051ec2a7':
  Preserve safe ACPX admission diagnostics on rejection
2026-10-11 00:31:27 -05:00
Dotta 03051ec2a7 Preserve safe ACPX admission diagnostics on rejection 2026-10-11 00:31:01 -05:00
Dotta 0421a3b8c0 Merge reviewed Boat core with compatible canonical migration numbering
* commit 'd7d7808302f3bd8045ee3d7afff55a066635f463': (27 commits)
  Bind Copilot profile v18 to admission diagnostics
  Synchronize admission diagnostic tests with runtime entry
  fix(server): permit verified question-delivery history to sleep (#15851)
  Preserve safe ACPX admission stages on startup timeout
  fix: preserve admitted user turns across legacy recovery sweeps
  perf(ci): prefetch the consumer image and Grok binary during package staging (#15849)
  fix: classify pinned sidecar admission failures safely
  fix: preserve pre-provider recovery after verification outages
  fix: preserve Stop through computer admission retry races
  fix: allow bounded cold verification of persistent computer packs
  fix: resume new input after paused computer admission retries
  fix: align workspace CI partition with upstream contract
  fix: support upstream workspace CI partition
  fix: distinguish provider cache mismatches from unavailable verification
  fix: preserve Boat wait ownership and honor Stop across retries
  perf(ci): run the db project as its own workspaces-c lane (#15831)
  fix: defer Boat admission while provider stop is pending
  Preserve controller-owned provider pack authority across cold resume
  Keep Boat reconnect unavailable until attachment succeeds
  Validate retained packages against the active provider contract
  ...
2026-10-10 23:58:56 -05:00
Dotta d7d7808302 Merge upstream and regenerate Boat migration as 0333 2026-10-10 23:57:20 -05:00
Dotta efb6939411 Bind Copilot profile v18 to admission diagnostics 2026-10-10 23:54:50 -05:00
Dotta 470b19f967 Bind Copilot profile v18 to admission diagnostics 2026-10-10 23:54:06 -05:00
Dotta 7c7c35b1ca Synchronize admission diagnostic tests with runtime entry 2026-10-10 23:50:24 -05:00
Dotta c10be0bb71 Synchronize admission diagnostic tests with runtime entry 2026-10-10 23:50:03 -05:00
Devin FoleyandPaperclip b36960b758 fix(server): permit verified question-delivery history to sleep (#15851)
Treat completed question-response deliveries as history only after their exact same-company handoff finishes. Preserve missing evidence, retries, accounting debt, and idle-sleep fences.

Add a concurrent all-state question history index with interrupted-build repair. Keep migrations serialized without waiting snapshots that deadlock concurrent index builds.

Validated by 118 focused sleep tests, six migration/snapshot tests, full repository typecheck, all CI gates, and Apex 5/5.

Co-Authored-By: Paperclip <noreply@paperclip.ing>
2026-10-10 21:47:55 -07:00
Dotta b698f54966 Preserve safe ACPX admission stages on startup timeout 2026-10-10 23:38:48 -05:00
Dotta 28d3fc1b65 Preserve safe ACPX admission stages on startup timeout 2026-10-10 23:38:30 -05:00
Dotta 8ccfdd3dd2 fix: classify pinned sidecar admission failures safely 2026-10-10 23:07:34 -05:00
Dotta bb4536fb9a fix: classify pinned sidecar admission failures safely 2026-10-10 23:07:09 -05:00
Dotta 44b1b52362 Preserve controller-owned provider pack authority across cold resume 2026-10-10 21:19:44 -05:00
Dotta 29e2aa95d1 Preserve controller-owned provider pack authority across cold resume 2026-10-10 21:19:34 -05:00
Devin FoleyandPaperclip 07f3536e37 fix(connections): discover Sentry OAuth through its MCP resource (#15837)
Correct Sentry OAuth discovery and cover new and saved client registration.

Co-Authored-By: Paperclip <noreply@paperclip.ing>
2026-10-10 17:10:23 -07:00
DottaandPaperclip 5c3cd777df fix(computers): expose persistent instructions and managed CLI skills
Integrate the scoped production correction and existing config test from 2700054c6a. Full Claude and Codex execute regressions remain in the stacked acceptance PR.

Co-Authored-By: Paperclip <noreply@paperclip.ing>
2026-10-10 15:32:22 -05:00
DottaandPaperclip 8b2a71c1e4 fix(adapters): expose Boat instructions and managed Claude skills
Keep controller instruction reads while advertising the registered persistent execution path. Mount approved remote Claude skills into the isolated user configuration so user-only settings can discover them without enabling project settings.

Co-Authored-By: Paperclip <noreply@paperclip.ing>
2026-10-10 15:31:55 -05:00
Dotta 3081b7480f Merge current upstream schema into Boat feature branch
* commit '2c09c8c16da3d605fc043c745535a7e65f961bb9':
  perf(chat): wake action queues from commits and deadlines (#15808)
  chore(lockfile): refresh pnpm-lock.yaml (#15820)
  feat: add company fast-response acknowledgements (#15748)
  ci: move the Grok public-install verification off Canary Dry Run (#15213)
2026-10-10 13:43:20 -05:00
DottaandPaperclip 2c09c8c16d Merge master into Boat core and regenerate migration after fast responses
Preserve the exact deployed Boat SQL hash under generated migration 0332 so existing staging databases recognize its history. Keep additive schema and shared exports from both branches.

Co-Authored-By: Paperclip <noreply@paperclip.ing>
2026-10-10 13:43:07 -05:00
DottaandPaperclip a7dd5284b5 feat: add company fast-response acknowledgements (#15748)
## Thinking Path

> - Paperclip is the open source app people use to manage AI agents for
work.
> - Human messages start agent work through task, chat, and
external-channel intake.
> - Agent startup can delay the first visible response.
> - A small direct model call can acknowledge the request while normal
work starts.
> - This response must remain separate from evidence that the agent
answered or completed work.
> - This pull request adds optional company-wide fast responses with
durable receipts, access checks, and cost accounting.
> - Users receive prompt acknowledgement without changing the agent
execution path.

## Linked Issues or Issue Description

**Subsystem affected**

Cross-cutting: database, shared contracts, server orchestration,
connections, and UI.

**Problem or motivation**

Users can wait for an agent to start before they receive a contextual
response. Generic progress messages do not confirm what the user asked.
An acknowledgement must not falsely complete work or satisfy an
unanswered turn.

**Proposed solution**

Add a disabled-by-default experimental fast-response model using an
existing shared API connection. Generate one short acknowledgement for
each accepted human turn. Use the existing agent identity and external
publication outboxes. Retain platform provenance and account for the
inference independently.

**Alternatives considered**

Running the acknowledgement through the agent runtime adds startup
latency. Restricting implementation to OpenRouter leaves other existing
API connections unsupported. This change supports all existing API
connections and uses OpenRouter for live verification.

**Roadmap alignment**

This extends existing agent communication and connection settings.
ROADMAP.md and open pull requests were checked. No duplicate
fast-response implementation was found. The maintainer supplied the
feature plan directly.

## What Changed

- Add Experimental fast responses to instance settings. Keep the feature
off by default. Enforce the flag at intake, dispatch, and publication.
- Move Decision model and Fast response setup to company Settings →
Connections when the experiment is enabled. Place Connections below
Environments. Separate the model sections with clear headings and a
divider. Keep Decision model in General when the experiment is off.
Route Costs setup links to the available settings page.
- Make the acknowledgement prompt a multiline template string. Ask for a
brief, positive response in the user’s language.

- Add settings, connection/model selection, sponsorship, fixed-sample
testing, and Costs history.
- Add a Vercel AI SDK text service for existing native, routed, Bedrock,
and local API connections.
- Add durable per-turn requests, a bounded worker, a three-second
admission deadline, and one inference attempt.
- Integrate task creation, task and agent chat, steering, queued
follow-ups, experimental board chat, shared chat intake, and email.
- Preserve receipt provenance and exclude receipts from completion,
recovery, interaction resolution, and agent wakeups.
- Recheck authorization, source validity, real replies, budgets, and
destination binding before publication. Preserve accounting for
suppressed or uncertain outcomes.
- Add provider contracts, database race tests, channel outbox tests, UI
tests, Stories, and documentation. Keep decision-model execution
unchanged.

## Verification

- Local `pnpm -r typecheck`, `pnpm build`, and UI token gates pass after
rebase. The UI typecheck and build also pass after the final navigation
fixes. All 37 focused navigation tests pass. The first full local `pnpm
test:run` invocation reported seven chat failures. All seven passed in
isolated reruns after fixture updates and host cleanup. This invocation
was stopped after the full final-head CI suite passed.
- Initial local database tests hit macOS shared-memory exhaustion. A
diagnostic confirmed `shmget: No space left on device` with the system
limit of 32 IDs. Three abandoned, unattached PostgreSQL IPC headers were
reclaimed. The isolated rerun passed all 31 fast-response and channel
tests. The two additional Slack regression cases also passed in a
separate rerun. No active database was stopped.
- UI token gates pass. Provider contract tests cover all supported API
connection types. Fast-response tests cover uniqueness, authorization,
budgets, expiry, cancellation, restart, real-reply races, and the
experimental flag.
- The test drive verified that disabling the experiment hides
Connections and redirects its direct URL. Enabling it restores the saved
OpenRouter setup. After restart on the final commit, the OpenRouter
settings sample returned “Sure, I’ll take care of fixing the border
around the settings panel.” in 428 ms. It used 260 input and 31 output
tokens and recorded $0.0000576 in reported cost.
- Earlier live OpenRouter verification produced a receipt in 1.013
seconds for a new task. The real agent then supplied its substantive
answer. A separate settings test took 1.34 seconds, used 246 input and
23 output tokens, and recorded $0.0000361.
- Live Slack verification on final commit
`24016fa525961ebc7a4acffdc5019ce123970549` passed for a fresh initial
task and a follow-up in a disposable bot DM. The initial acknowledgement
appeared 2.405 seconds after the Slack message and 1.413 seconds after
durable acceptance; the follow-up appeared in 2.322 seconds and 1.160
seconds respectively. The recorded generation/settlement durations were
898 ms and 697 ms. The initial call used 291 input / 39 output tokens
and cost $0.00006705; the follow-up used 281 / 47 and cost $0.00007035.
- The Slack acknowledgements retained the assigned agent identity and
`origin: fast_response`, source-turn references, and no fabricated run
ID. A status snapshot after the initial receipt showed the task still
`in_progress` with its real execution run. The agent then read the CSV
fixture and correctly reported two ready items, two blockers, and their
owners. Both replies stayed in the originating DM, and no duplicate
generic working message followed the delivered contextual
acknowledgements. The `new` command started a fresh conversation session
without generating a fast response.
- An earlier eligible Slack turn generated a response but suppressed
publication. Its reported cost was retained, generic progress remained,
and the real agent completed the requested result. This is recorded
separately from the two delivered acknowledgements; the history did not
expose a precise suppression reason.
- Slack verification used real signed provider events, the existing
intake/publication paths, and a user-approved temporary webhook-only
HTTPS tunnel. Subscriptions were limited to direct-message events. The
test bot was paused and the tunnel stopped afterward. Live
channel/group-thread and GitHub journeys remain unverified; their mocked
tests cover intake, destination binding, publication, and continued
underlying work.
- Greptile reviewed final commit
`24016fa525961ebc7a4acffdc5019ce123970549` at 5/5. Both new review
findings are fixed and all threads are resolved. [Final-head CI
run](https://github.com/paperclipai/paperclip/actions/runs/38060015730)
passed. This includes grouped server/chat/workspace tests, serialized
suites, runner checks, browser journeys, typecheck, build, release
registry, policy, and the canary dry run.
- Manual check: enable Experimental fast responses. Open company
Settings → Connections. Select a shared API connection and model. Save
and use Test response. Submit a task message and confirm that its
receipt does not complete the task.

## Risks

- The migration adds receipt and configuration tables plus accounting
references. It uses idempotent statements and follows the current
migration sequence.
- A slow provider, authorization change, or real-agent reply can
suppress an acknowledgement. Existing progress feedback remains
available.
- Unknown provider billing retains a reservation until reconciliation.
External deliveries with uncertain outcomes must not be blindly
repeated.
- Live Slack initial-task and follow-up DM journeys pass. Live Slack
channel/group-thread and GitHub journeys remain unverified. The PR
remains a draft and records these gaps. Final-head repository CI and
automated review pass.

## Model Used

OpenAI Codex, based on GPT-6, with reasoning, repository tools, code
execution, and browser interaction. The runtime does not expose an exact
model snapshot ID or context-window size; these are not asserted.

## 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 searched GitHub for duplicate or related PRs and linked
them above
- [x] I have either (a) linked existing issues with `Fixes: #` / `Closes
#` / `Refs #` OR (b) described the issue in-PR following the relevant
issue template
- [x] I have not referenced internal/instance-local Paperclip issues or
links (only public GitHub `#NNN` / `github.com/paperclipai/paperclip`
URLs)
- [x] My branch name describes the change (e.g. `docs/...`, `fix/...`)
and contains no internal Paperclip ticket id or instance-derived details
- [x] I have run tests locally and they pass
- [x] I have added or updated tests where applicable
- [x] I have updated relevant documentation to reflect my changes
- [x] I have considered and documented any risks above
- [x] All Paperclip CI gates are green
- [x] Greptile is 5/5 with no open P2s, recommendations, or follow-ups
- [x] I will address all Greptile and reviewer comments before
requesting merge

---------

Co-authored-by: Paperclip <noreply@paperclip.ing>
2026-10-10 13:09:17 -05:00
DottaandPaperclip 8f11a70b33 Retain cold and recovered instruction framing coverage
Co-Authored-By: Paperclip <noreply@paperclip.ing>
2026-10-10 12:46:14 -05:00
Dotta cf175229e9 Merge branch 'codex/boat-environment-core' into codex/boat-environment
* codex/boat-environment-core:
  test: retain instruction framing acceptance in stacked PR
  fix: retarget only managed asset framing during cold startup
  fix: preserve ACPX instruction framing across remote recovery
2026-10-10 12:46:08 -05:00
DottaandPaperclip 471ff0e550 test: retain instruction framing acceptance in stacked PR
Co-Authored-By: Paperclip <noreply@paperclip.ing>
2026-10-10 12:45:49 -05:00
DottaandPaperclip daa711a097 fix: retarget only managed asset framing during cold startup
Co-Authored-By: Paperclip <noreply@paperclip.ing>
2026-10-10 12:45:14 -05:00
DottaandPaperclip 44ee24fa19 fix: preserve ACPX instruction framing across remote recovery
Co-Authored-By: Paperclip <noreply@paperclip.ing>
2026-10-10 12:45:14 -05:00
DottaandPaperclip d238bb8b46 Retain persistent-computer process guidance coverage
Co-Authored-By: Paperclip <noreply@paperclip.ing>
2026-10-10 12:28:34 -05:00
Dotta e398e3543d Merge branch 'codex/boat-environment-core' into codex/boat-environment
* codex/boat-environment-core:
  test: keep dev-server guidance acceptance in stacked PR
  fix: validate persisted warm origin run identity
  fix(computers): allocate listeners outside guest ephemeral ports
  fix: explain detached dev servers on persistent computers
2026-10-10 12:28:24 -05:00
DottaandPaperclip 571fde776c test: keep dev-server guidance acceptance in stacked PR
Co-Authored-By: Paperclip <noreply@paperclip.ing>
2026-10-10 12:27:56 -05:00
DottaandPaperclip 66028796f3 fix: explain detached dev servers on persistent computers
Co-Authored-By: Paperclip <noreply@paperclip.ing>
2026-10-10 12:24:57 -05:00
DottaandPaperclip 1e5cf7cb42 Integrate graceful Boat idle retirement and recovery
Co-Authored-By: Paperclip <noreply@paperclip.ing>
2026-10-10 11:46:53 -05:00
DottaandPaperclip 8096727117 test(boat): keep remote acceptance extensions in stacked PR
Preserve the two existing additive runtime acceptance suites in the stacked feature PR while keeping browser synchronization fixes in the independently checked core branch.

Co-Authored-By: Paperclip <noreply@paperclip.ing>
2026-10-10 11:44:36 -05:00
DottaandPaperclip 0a440b9333 Merge remote-tracking branch 'origin/master' into codex/boat-environment-core
* origin/master:
  fix(pi-local): avoid embedding model catalogue in errors (#13628)
  fix(opencode-local): run in the realized workspace (#11438)
  fix(ui): align chat connection and recovery cards (#15771)

Co-Authored-By: Paperclip <noreply@paperclip.ing>
2026-10-10 11:44:36 -05:00
DottaandPaperclip 00f92a6d05 fix(computers): reserve bounded graceful runner retirement
Fence admission and ordinary commands at warm expiry, reserve exact-generation process control for at most thirty seconds of shutdown, and always retire the owned slice after graceful close or timeout.

Co-Authored-By: Paperclip <noreply@paperclip.ing>
2026-10-10 11:44:06 -05:00
DottaandPaperclip 025a0b8ae5 Integrate bounded cold provider bootstrap
Co-Authored-By: Paperclip <noreply@paperclip.ing>
2026-10-10 11:09:21 -05:00
DottaandPaperclip 26d404cbfe Move bootstrap and instruction acceptance coverage to stacked PR
Co-Authored-By: Paperclip <noreply@paperclip.ing>
2026-10-10 11:08:49 -05:00
DottaandPaperclip ab5bb8552a fix(boat): bound provider-pack cold bootstrap separately
Allow thirty minutes for computer ACPX pack staging without extending turn, recovery, finalization or warm-idle deadlines.

Co-Authored-By: Paperclip <noreply@paperclip.ing>
2026-10-10 11:06:31 -05:00
DottaandPaperclip 18a1e89a08 Integrate scoped legacy runtime files and retirement recovery
Keep the adapter ownership acceptance tests in the stacked PR.

Co-Authored-By: Paperclip <noreply@paperclip.ing>
2026-10-10 10:56:32 -05:00
DottaandPaperclip 82880b10ac Keep legacy runtime acceptance coverage in stacked PR
The combined feature branch retains the complete execution-target tests; this runtime branch preserves the production fix with its existing baseline suite.

Co-Authored-By: Paperclip <noreply@paperclip.ing>
2026-10-10 10:54:42 -05:00
DottaandPaperclip e90fbf20a1 fix(adapters): isolate computer legacy runtime assets by owner
Co-Authored-By: Paperclip <noreply@paperclip.ing>
2026-10-10 10:54:14 -05:00
lorenzozane 0e37a385e6 fix(pi-local): avoid embedding model catalogue in errors (#13628)
<!-- Write all pull request text in Simplified Technical English
(ASD-STE100): short sentences, one instruction per sentence, simple
approved vocabulary, and the active voice. -->

## Thinking Path

> - Paperclip is the open source app people use to manage AI agents for
work
> - The pi-local adapter discovers and validates models before it starts
a local Pi process
> - An unavailable-model error included model IDs from the discovered
catalogue
> - Repeating those IDs made persisted and rendered failures noisy and
exposed substitute choices
> - This pull request keeps the requested model, reports the available
count, and points to the existing lookup command
> - The benefit is a concise error without changing model discovery or
matching

## Linked Issues or Issue Description

Fixes #13612

## What Changed

- Replace model catalogue interpolation in unavailable-model errors with
the requested model, normalized model count, and `pi --list-models`.
- Add a regression test with 13 discovered models and exact
error-message matching.

## Verification

- `pnpm exec vitest run
packages/adapters/pi-local/src/server/models.test.ts`
- `pnpm exec vitest run packages/adapters/pi-local/src/server/*.test.ts`
- `pnpm --filter @paperclipai/adapter-pi-local typecheck`
- `git diff --check`

All listed checks pass locally. The test suite uses a temporary Pi
executable and verifies that model IDs are not appended to the error.

## Risks

Low risk. Only unavailable-model error wording changes. Model discovery,
matching, valid model execution, and failure handling remain unchanged.
Full repository CI was not run locally because the host uses Node
22.22.1 and the repository declares Node >=24.11.0.

> 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 GPT-5.6 Luna (`gpt-5.6-luna`); tool-assisted code execution. The
context window size is not exposed in this session.

## 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)
- [ ] I have checked ROADMAP.md and confirmed this PR does not duplicate
planned core work
- [x] I have searched GitHub for duplicate or related PRs and linked
them above
- [x] I have either (a) linked existing issues with `Fixes: #` / `Closes
#` / `Refs #` OR (b) described the issue in-PR following the relevant
issue template
- [x] I have not referenced internal/instance-local Paperclip issues or
links (only public GitHub #13612)
- [x] My branch name describes the change (e.g. `docs/...`, `fix/...`)
and contains no internal Paperclip ticket id or instance-derived details
- [x] I have run tests locally and they pass
- [x] I have added or updated tests where applicable
- [ ] I have updated relevant documentation to reflect my changes
- [x] I have considered and documented any risks above
- [ ] All Paperclip CI gates are green
- [ ] Greptile is 5/5 with no open P2s, recommendations, or follow-ups
- [x] I will address all Greptile and reviewer comments before
requesting merge
2026-10-10 10:48:00 -05:00
Kilianandcommitperclip-bot 28e134873e fix(opencode-local): run in the realized workspace (#11438)
## Thinking Path

> - Paperclip is the open source app people use to manage AI agents for
work
> - Paperclip adapters start each agent in its selected workspace
> - Paperclip can realize a different workspace path for local and
remote runs
> - The OpenCode CLI prefers its inherited `PWD` when no `--dir` option
is present
> - The process `cwd` option does not update the inherited `PWD` value
> - This pull request passes the realized workspace to OpenCode with
`--dir`
> - The benefit is that OpenCode sessions and tools use the workspace
that Paperclip selected

## Linked Issues or Issue Description

No matching issue exists.

Refs #8287. That earlier pull request describes the realized remote
workspace path. It does not make the OpenCode CLI use that path.

I searched open and closed issues and pull requests for `opencode
--dir`, `opencode cwd PWD`, and `opencode workspace directory`. I found
no duplicate.

**What happened?**

Paperclip gives the OpenCode process the correct operating system `cwd`.
However, the adapter does not pass OpenCode's `--dir` option. OpenCode
uses `process.env.PWD` before `process.cwd()` when `--dir` is absent. A
server `PWD` that differs from the realized workspace can therefore
place the OpenCode session and its tools in the wrong directory.

**Expected behavior**

OpenCode must use the workspace that Paperclip realized for the run. An
explicit `--dir` in `extraArgs` must remain valid and must not be
duplicated.

**Steps to reproduce**

1. Start the Paperclip server from directory A.
2. Configure an OpenCode agent with directory B, or realize directory B
on a remote execution target.
3. Start a run without a manual `--dir` value in `extraArgs`.
4. Inspect the OpenCode session directory or run a directory-sensitive
tool.
5. Before this change, OpenCode can use directory A from the inherited
`PWD`.
6. After this change, OpenCode receives `--dir B`.

**Paperclip version or commit**

`b38d6ddb811b3ff3145ff5df60174eb9e7313fe6`

**Deployment mode**

Self-hosted server. The same adapter path is used in local development
and remote execution.

**Installation method**

Built from source.

**Agent adapter(s) involved**

OpenCode.

**Database mode**

Not database-related.

**Additional context**

OpenCode v1.17.13 defines `--dir` and uses the inherited `PWD` as its
fallback root. See the [OpenCode run command
source](https://github.com/anomalyco/opencode/blob/10c894bdeef3618f5666fb506ef7f9491bb964d8/packages/opencode/src/cli/cmd/run.ts#L333-L339).

## What Changed

- Add the realized execution workspace as `--dir` for OpenCode runs.
- Preserve an explicit `--dir` or `--dir=...` value from `extraArgs`.
- Stop option detection at the first `--` terminator.
- Extend the remote execution tests for realized, explicit, and
post-terminator directory arguments.

## Verification

- `pnpm exec vitest run packages/adapters/opencode-local/src` passed: 7
files and 40 tests.
- `pnpm --filter @paperclipai/adapter-opencode-local typecheck` passed.
- `pnpm --filter @paperclipai/adapter-opencode-local build` passed.
- `pnpm -r typecheck` passed for all 31 selected workspace projects.
- `pnpm build` passed for all selected workspace projects.
- `git diff --check` passed.

I also ran `pnpm test:run`. It completed with 334 test files passing and
2 test files failing. It reported 3,790 passing tests and 4 skipped
tests. The two failures are in `issue-monitor-scheduler.test.ts` and
`workspace-runtime.test.ts`. Each failure reproduces on the unchanged
base commit after this pull request is removed. Neither test imports or
covers the OpenCode adapter.

## Risks

- The behavior change is limited to OpenCode run arguments.
- A custom old OpenCode binary that does not support `--dir` will reject
the option. The current official OpenCode v1.17.13 CLI supports it.
- An explicit operator `--dir` remains authoritative. The adapter does
not add a duplicate option because OpenCode's parser converts repeated
string options to an array.
- This change does not modify schemas, migrations, APIs, telemetry, or
user data.

> 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 based on GPT-5. The runtime did not expose a more specific
model ID or context-window size. The agent used high-depth reasoning,
repository access, shell execution, and GitHub tools.

## 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 searched GitHub for duplicate or related PRs and linked
them above
- [x] I have either (a) linked existing issues with `Fixes: #` / `Closes
#` / `Refs #` OR (b) described the issue in-PR following the relevant
issue template
- [x] I have not referenced internal/instance-local Paperclip issues or
links (only public GitHub `#NNN` / `github.com/paperclipai/paperclip`
URLs)
- [x] My branch name describes the change (e.g. `docs/...`, `fix/...`)
and contains no internal Paperclip ticket id or instance-derived details
- [ ] I have run tests locally and they pass
- [x] I have added or updated tests where applicable
- [x] I have updated relevant documentation to reflect my changes
- [x] I have considered and documented any risks above
- [x] All Paperclip CI gates are green
- [x] Greptile is 5/5 with no open P2s, recommendations, or follow-ups
- [x] I will address all Greptile and reviewer comments before
requesting merge

Co-authored-by: commitperclip-bot <305974387+commitperclip-bot@users.noreply.github.com>
2026-10-10 10:46:21 -05:00
DottaandPaperclip 180bfdcb0a Keep extended runner acceptance cases in the stacked feature PR
Preserve the original baseline suites on the backend branch while the full Boat feature branch retains all added runtime-context, transport, and SSH acceptance coverage.

Co-Authored-By: Paperclip <noreply@paperclip.ing>
2026-10-10 10:17:23 -05:00
DottaandPaperclip 00d1d4ea61 fix(runtime): bind persistent computer homes into Claude runtime context
Co-Authored-By: Paperclip <noreply@paperclip.ing>
2026-10-10 10:17:23 -05:00
DottaandPaperclip 51e52d5849 fix(runtime): bind persistent computer homes into Claude runtime context
Co-Authored-By: Paperclip <noreply@paperclip.ing>
2026-10-10 10:16:34 -05:00
DottaandPaperclip f6aade3bae Add persistent Boat computer environments and runner ownership
Introduce company-scoped computer attachments, bounded runner and viewer ownership, persistent files and worktrees, Boat ingress, and native and legacy runtime integration behind the experimental Boat flag. Keep desktop UI and extended acceptance cases in the stacked feature branch.

Co-Authored-By: Paperclip <noreply@paperclip.ing>
2026-10-10 10:07:51 -05:00
Dotta f9e1172494 Handle SSH input pipe failures without crashing the controller 2026-10-10 09:16:04 -05:00
Dotta 63a9e1a168 Expose trusted persistent agent homes to native Codex shells 2026-10-10 09:11:24 -05:00