Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 7 additions & 0 deletions .agents/skills/release/SKILL.md
Original file line number Diff line number Diff line change
Expand Up @@ -72,6 +72,13 @@ otherwise errors.
Dokploy deploy specifics: see memory `cdn-dokploy-deploy-pipeline`.
- **`pnpm install` fails in CI or locally.** `engine-strict=true` + Node `>=24.15.0` — check
`.nvmrc` before debugging anything else.
- **Identity freeze / version rewind.** Copying another product's `CHANGELOG.md`, `package.json`
`version`, or VS Code `publisher` onto `main` fails required CI (`lint` runs
`scripts/check-identity-freeze.mjs`) and Release (`--npm`). npm `latest` does not move backwards,
brew 404s the tarball, native `gh release view` misses the tag, vsce says the extension name
already exists, and `verify-release-consistency.mjs` compares local version to npm `latest`.
Do not merge `ci: release packages` while freeze fields disagree with npm or the Marketplace.
Restore identity from the last published tag; do not hand-bump a lower version.
- **Pre-push hook** (`scripts/pre-push.sh` via simple-git-hooks) gates local pushes; a hook failure
is a real gate failure — fix the cause, never `--no-verify`.

Expand Down
5 changes: 5 additions & 0 deletions .changeset/compaction-max-attempts.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
"@pymodel/pythinker-code": patch
---

Make the compaction attempt limit configurable with loop_control.compaction_max_attempts (default 5).
5 changes: 5 additions & 0 deletions .changeset/cwd-not-project-root.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
"@pymodel/pythinker-code": patch
---

Stop telling the model that the current working directory is always the project root.
5 changes: 5 additions & 0 deletions .changeset/delete-session-from-picker.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
"@pymodel/pythinker-code": minor
---

Delete sessions from the session picker: press Ctrl+X on a session, then y to confirm.
5 changes: 5 additions & 0 deletions .changeset/drop-flat-entity-protocol.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
"@pymodel/pythinker-code": minor
---

Drop the experimental flat entity message protocol and history API; session inspect returns to the transcript surface.
5 changes: 5 additions & 0 deletions .changeset/dynamic-tools-official-models.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
"@pymodel/pythinker-code": patch
---

Honor dynamically_loaded_tools from official model catalogs when building tool lists.
5 changes: 5 additions & 0 deletions .changeset/fix-infinite-retry-stream-invalidation.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
'@pymodel/agent-core-v2': patch
---

Discard streamed attempt state when the LLM requester retries below the turn so interrupted tool-call ids cannot leak into the next attempt.
5 changes: 5 additions & 0 deletions .changeset/llm-recovery-self-describing.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
'@pymodel/agent-core-v2': patch
---

Compose LLM recovery strategies outside the turn machine with self-describing proposals and opaque prepare effects.
5 changes: 5 additions & 0 deletions .changeset/mcp-attachment-originals.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
'@pymodel/pythinker-code': patch
---

Preserve original MCP attachments that are omitted from model output, and let Read open those session attachment references.
5 changes: 5 additions & 0 deletions .changeset/mcp-server-deferred-config.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
"@pymodel/pythinker-code": minor
---

Add per-server deferred MCP tool disclosure so large tool lists stay hidden until selected.
5 changes: 5 additions & 0 deletions .changeset/pause-goal-clock-on-close.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
"@pymodel/pythinker-code": patch
---

Exclude time spent with the session closed from goal time budgets.
5 changes: 5 additions & 0 deletions .changeset/permission-mode-reminder-env.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
'@pymodel/agent-core-v2': patch
---

Add `PYTHINKER_CODE_PERMISSION_MODE_REMINDER`: set it to `0` to stop injecting auto permission-mode reminders into the model context.
6 changes: 6 additions & 0 deletions .changeset/pi-tui-upstream-rebaseline.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
---
"@pymodel/pi-tui": minor
"@pymodel/pythinker-code": patch
---

Rebaseline the terminal UI library native platform modules and mouse/search behavior.
5 changes: 5 additions & 0 deletions .changeset/rc-local-ui-token.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
"@pymodel/pythinker-code": patch
---

Include the server token in the Remote Control Local UI link so it opens already signed in.
5 changes: 5 additions & 0 deletions .changeset/rc-tunnel-base64-linear-check.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
'@pymodel/remote-control': patch
---

Validate Remote Control tunnel request base64 with a linear scan so large payloads no longer crash the tunnel as a generic connection failure.
5 changes: 5 additions & 0 deletions .changeset/rc-tunnel-cache.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
'@pymodel/remote-control': patch
---

Reuse unchanged Remote Control assets across page loads with ETag validation instead of retransferring them.
5 changes: 5 additions & 0 deletions .changeset/remove-goal-time-cap.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
"@pymodel/pythinker-code": patch
---

Remove the 24-hour limit on goal time budgets.
5 changes: 5 additions & 0 deletions .changeset/rm-rf-temp-paths.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
"@pymodel/pythinker-code": patch
---

Skip the confirmation prompt for rm -rf commands that target only /tmp or /temp paths.
5 changes: 5 additions & 0 deletions .changeset/session-delete-serialized-cleanup.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
'@pymodel/pythinker-code': minor
---

Delete sessions with serialized cleanup so journal and live listeners finish before the session is removed, and broadcast a workspace-scoped deletion event.
5 changes: 5 additions & 0 deletions .changeset/session-index-dirty-journal.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
'@pymodel/pythinker-code': patch
---

Track session-index freshness with a dirty journal so restarts reconcile only changed sessions instead of rescanning every mtime.
5 changes: 5 additions & 0 deletions .changeset/session-interaction-agent-filter.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
"@pymodel/pythinker-code": patch
---

Deliver session approval and question events past agent filters, and stamp the requesting agent on the wire shape.
5 changes: 5 additions & 0 deletions .changeset/session-title-surface.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
"@pymodel/pythinker-code": patch
---

Session title generation no longer requires the experimental auto_session_title flag.
5 changes: 5 additions & 0 deletions .changeset/steer-background-waits.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
"@pymodel/pythinker-code": patch
---

Allow steering messages to interrupt waits for background tasks.
5 changes: 5 additions & 0 deletions .changeset/steer-seeded-turn-duplicate.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
"@pymodel/pythinker-code": patch
---

Do not record a steer event when an unconsumed steer seeds the next turn after cancel.
5 changes: 5 additions & 0 deletions .changeset/suppress-task-notifications-on-remove.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
'@pymodel/pythinker-code': patch
---

Suppress background-task terminal notifications as soon as an agent starts closing, so teardown no longer wakes the model with late task settlements.
6 changes: 6 additions & 0 deletions .changeset/telemetry-layered-registry.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
---
'@pymodel/pythinker-code': minor
'@pymodel/pythinker-code-sdk': patch
---

Rebuild telemetry as a scope-bound layered context registry so session, agent, and turn fields flow into every event without a separate agent telemetry context service.
5 changes: 5 additions & 0 deletions .changeset/tower-mode-fixes.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
'@pymodel/pythinker-code': patch
---

Tower mode (experimental, `PYTHINKER_CODE_EXPERIMENTAL_TOWER=1`): fix tower mode never starting when enabled through `[experimental] tower = true` in `config.toml` instead of the environment variable. When tower mode cannot be enabled, the error now names the actual blocker — the disabled experiment, a required restart, or the owning session. When another live session owns the workspace tower, the message also names the owning session's title alongside its id. /tower now also works in a directory that is not a git repository — it runs git init and commits what is there (an empty initial commit for empty directories).
5 changes: 5 additions & 0 deletions .changeset/tower-resume-wake-teardown.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
"@pymodel/pythinker-code": patch
---

Tower mode reliability fixes across messaging, worktrees, and the review-to-merge gate.
5 changes: 5 additions & 0 deletions .changeset/tunnel-response-gzip.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
"@pymodel/pythinker-code": patch
---

Compress Remote Control tunnel responses with gzip.
5 changes: 5 additions & 0 deletions .changeset/turn-id-cold-fold.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
"@pymodel/pythinker-code": patch
---

Keep live turn ids above the wire-wide maximum and fold cold transcript rebuilds over the active branch chain.
5 changes: 5 additions & 0 deletions .changeset/update-yes-flag.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
"@pymodel/pythinker-code": minor
---

Add `-y, --yes` to `pythinker upgrade` (alias `pythinker update`) to skip the confirmation prompt and install the update directly.
6 changes: 6 additions & 0 deletions .changeset/vscode-engine-file-suggest.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
---
'@pymodel/pythinker-code-sdk': minor
'@pymodel/pythinker-code': minor
---

Serve workspace @ file suggestions through the engine fs suggest API so the editor extension matches gateway search scoring.
5 changes: 5 additions & 0 deletions .changeset/warn-malformed-models-entry.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
"@pymodel/pythinker-code": patch
---

Warn at startup when a [models] entry in config.toml is missing the model field and cannot be used.
5 changes: 5 additions & 0 deletions .changeset/watch-default-off.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
"@pymodel/pythinker-code": minor
---

Turn filesystem watch off by default. Set `[watch] enabled = true` or `PYTHINKER_CODE_WATCH=1` to attach watchers.
7 changes: 7 additions & 0 deletions .changeset/wire-human-mirror-session-actors.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
---
'@pymodel/agent-core-v2': minor
'@pymodel/agent-gateway': patch
'@pymodel/pythinker-code-sdk': patch
---

Persist the human runtime mirror in the agent wire journal and spawn agent DI scopes from the session layer.
5 changes: 5 additions & 0 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -121,6 +121,9 @@ jobs:

steps:
- uses: actions/checkout@v4
with:
fetch-depth: 0
Comment thread
coderabbitai[bot] marked this conversation as resolved.
persist-credentials: false

- uses: pnpm/action-setup@v6

Expand All @@ -131,6 +134,8 @@ jobs:

- run: pnpm install --frozen-lockfile
- run: pnpm run lint
env:
BASE_SHA: ${{ github.event.pull_request.base.sha || github.event.before }}
- run: pnpm run sherif
- run: pnpm run test:release

Expand Down
9 changes: 8 additions & 1 deletion .github/workflows/release.yml
Original file line number Diff line number Diff line change
Expand Up @@ -110,6 +110,9 @@ jobs:
- name: Upgrade npm for Trusted Publishing
run: npm install -g npm@11

- name: Identity freeze
run: node scripts/check-identity-freeze.mjs --npm

# `github.event.before` is the exact start of this push. HEAD^ only sees
# the final commit and misses version bumps in a multi-commit push.
- name: Detect release lane version bumps
Expand Down Expand Up @@ -621,7 +624,11 @@ jobs:
RELEASE_TAG: ${{ needs.release.outputs.pythinker_release_tag }}
run: |
set -euo pipefail
existing="$(gh release view "$RELEASE_TAG" --json assets --jq '.assets[].name')"
if ! existing="$(gh release view "$RELEASE_TAG" --json assets --jq '.assets[].name')"; then
echo "::error::GitHub release ${RELEASE_TAG} does not exist. npm never published this version, or changesets did not create the tag."
echo "::error::Identity freeze: do not upload native zips onto a missing or orphan version."
exit 1
fi
present=()
absent=()
for path in dist-native-release/*; do
Expand Down
6 changes: 6 additions & 0 deletions .github/workflows/vscode-release.yml
Original file line number Diff line number Diff line change
Expand Up @@ -45,10 +45,16 @@ jobs:
run: |
set -euo pipefail
actual="$(node -p 'require("./apps/vscode/package.json").version')"
publisher="$(node -p 'require("./apps/vscode/package.json").publisher')"
name="$(node -p 'require("./apps/vscode/package.json").name')"
if [ "$actual" != "$EXPECTED_VERSION" ]; then
echo "::error::Requested VS Code version ${EXPECTED_VERSION}, but this ref contains ${actual}."
exit 1
fi
if [ "$publisher" != "pymodel" ] || [ "$name" != "pythinker" ]; then
echo "::error::VS Code identity must be pymodel.pythinker, got ${publisher}.${name}."
exit 1
fi
if [ -z "$VSCE_PAT" ] || [ -z "$OVSX_PAT" ]; then
echo "::error::VSCE_PAT and OVSX_PAT are required. Configure both secrets or set RELEASE_LANE_VSCODE=disabled."
exit 1
Expand Down
1 change: 1 addition & 0 deletions AGENTS.md
Original file line number Diff line number Diff line change
Expand Up @@ -94,6 +94,7 @@ The web bundle: `apps/pythinker-code/dist-web` is the committed, prebuilt bundle
- Prefer adding tests to existing files. Fix failing tests first (unless there's a real impl bug); when a test fails because of a user modification, default to fixing the test first, not the implementation.
- Do not sacrifice code quality for external compatibility unless the user explicitly asks for it.
- Breaking changes require changesets with `major` bump (user confirmation required).
- Identity freeze: never rewind published `package.json` versions, never change the VS Code publisher or extension id (`pymodel.pythinker`), never replace `CHANGELOG.md` with another history. `scripts/check-identity-freeze.mjs` (via `pnpm lint`) and Release `--npm` enforce this.

## Experimental Features

Expand Down
Loading
Loading