Skip to content

Releases

v0.1.3

Choose a tag to compare

@x0c x0c released this 15 Nov 08:29

0.1.3

Fix dequeue-time queue expiration and lock-contention fast-reject semantics in supervisor.

Changes

  • Dequeue-time queue_timeout enforcement: SupervisorRunner.admit() now evaluates _expired(spec, record) at the top of the admission loop before checking target_waiting or target_busy / idle fast-return, ensuring runs that exceeded their queue timeout while waiting behind an earlier lock or transition are always rejected (queue_expired) instead of being dispatched late.
  • Fast-fail on_busy="reject" behind target locks: _wait_for_target() now immediately settles with delivery="rejected", execution="failed", error.code="target_busy" when spec["on_busy"] == "reject", matching busy-session admission rather than blocking behind an earlier run's target lock.
  • Tests & Contract: Updated docs/CONTRACT.md and added regression tests test_expired_run_rejects_even_when_target_is_idle and test_on_busy_reject_fails_fast_behind_target_lock.

Install

uv venv
source .venv/bin/activate
VERSION=0.1.3
BASE=https://github.com/x0c/agent-session-control/releases/download/v${VERSION}
SESSKIT=https://github.com/x0c/sesskit/releases/download/v0.3.2/sesskit-0.3.2-py3-none-any.whl

python -m pip install "${BASE}/agent_session_control-${VERSION}-py3-none-any.whl"
# With native-history observation:
python -m pip install "${SESSKIT}" "${BASE}/agent_session_control-${VERSION}-py3-none-any.whl"

简体中文

修复 supervisor 出队时队列超时的检查顺序与锁竞争下的 on_busy="reject" 快速拒绝语义。

变更内容

  • 出队前优先校验 queue_timeout:SupervisorRunner.admit() 现在在准入循环最顶部即先检查 _expired(spec, record)(早于 target_waiting 与 target_busy/空闲快速放行),确保在排队等锁期间已超时的运行在目标变为空闲后不会被滞后派发,而是稳定落盘为 queue_expired。
  • 目标锁竞争下 on_busy="reject" 快速失败:当已有更早的运行持有 target:<session> 锁时,_wait_for_target() 若见 spec["on_busy"] == "reject",会立即结算为 delivery="rejected" / execution="failed" / error.code="target_busy",避免退化为长期排队等待。
  • 契约与测试:更新 docs/CONTRACT.md,补充 test_expired_run_rejects_even_when_target_is_idle 与 test_on_busy_reject_fails_fast_behind_target_lock 回归测试。

安装方式

uv venv
source .venv/bin/activate
VERSION=0.1.3
BASE=https://github.com/x0c/agent-session-control/releases/download/v${VERSION}
SESSKIT=https://github.com/x0c/sesskit/releases/download/v0.3.2/sesskit-0.3.2-py3-none-any.whl

python -m pip install "${BASE}/agent_session_control-${VERSION}-py3-none-any.whl"
# 如需原生历史观测:
python -m pip install "${SESSKIT}" "${BASE}/agent_session_control-${VERSION}-py3-none-any.whl"

v0.1.2

Choose a tag to compare

@x0c x0c released this 13 Nov 18:00

0.1.2

Built-in Google Antigravity (agy) runtime support, composer boundaries, and sesskit>=0.3.2 native-history alignment.

Changes

  • Built-in antigravity runtime (agy): Added "antigravity" to BUILTIN_RUNTIME_IDS, default_registry(), _resume_argv() (agy --dangerously-skip-permissions --conversation <id>), and between_rules composer parsing validated against live agy 1.5.8 TUI panes.
  • Untrusted workspace prompt detection: Expanded _BLOCKING_DIALOG_RE to recognize Antigravity's ↑/↓ Navigate · enter Confirm dialog footer without dropping focus into trust prompts.
  • MCP boundary: Live agy 1.5.8 rejects mcpServers in --settings (unknown setting "mcpServers"), so per-session MCP channel injection is explicitly declared unsupported (MCP_CHANNEL_UNSUPPORTED) and agent-session-control acp --runtime antigravity refuses at the stdio MCP baseline gate (while documenting native agy acp).
  • SessKit alignment: Upgraded the history extra pin to sesskit>=0.3.2 (sesskit-0.3.2-py3-none-any.whl) to use Antigravity's typed activity snapshots (typed_activity=True, incremental_reading=True, structured_questions=True).
  • End-to-end & live disposable verification: Added unit, end-to-end controller (plan, create, start_turn, native HistoryObserver correlation, load_history, resume), ACP refusal, and live disposable tmux + agy composer tests, and updated docs and the bundled agent-session-control skill.

Install

uv venv
source .venv/bin/activate
VERSION=0.1.2
BASE=https://github.com/x0c/agent-session-control/releases/download/v${VERSION}
SESSKIT=https://github.com/x0c/sesskit/releases/download/v0.3.2/sesskit-0.3.2-py3-none-any.whl

python -m pip install "${BASE}/agent_session_control-${VERSION}-py3-none-any.whl"
# With native-history observation:
python -m pip install "${SESSKIT}" "${BASE}/agent_session_control-${VERSION}-py3-none-any.whl"

简体中文

新增 Google Antigravity(agy)内置运行时支持、输入框区域解析以及 sesskit>=0.3.2 原生历史观测对齐。

变更内容

  • 内置 antigravity 运行时(agy):将 "antigravity" 加入 BUILTIN_RUNTIME_IDS、default_registry() 与 _resume_argv()(agy --dangerously-skip-permissions --conversation <id>),并在真实 agy 1.5.8 终端界面验证了 between_rules 输入框解析与 Escape 中断键位。
  • 未信任工作区弹窗识别:扩展 _BLOCKING_DIALOG_RE 以识别 Antigravity 的 ↑/↓ Navigate · enter Confirm 底部确认栏,避免在未授权确认弹窗上盲目粘贴输入。
  • MCP 边界声明:实测 agy 1.5.8 在 --settings 中拒绝 mcpServers(返回 unknown setting "mcpServers"),因此明确声明不支持按会话注入 stdio MCP(MCP_CHANNEL_UNSUPPORTED),agent-session-control acp --runtime antigravity 在入口检查处明确拒绝执行,同时在文档中标注 agy acp 原生子命令。
  • SessKit 版本对齐:将 history 可选依赖升级至 sesskit>=0.3.2(固定 sesskit-0.3.2-py3-none-any.whl),以消费 Antigravity 的类型化活动快照与增量读取(typed_activity=True、incremental_reading=True、structured_questions=True)。
  • 端到端与实机一次性验证:补充单元测试、控制器端到端测试(plan / create / start_turn / HistoryObserver 增量关联 / load_history / resume)、ACP 入口拒绝测试及一次性 tmux + agy 实机输入框探测测试,并同步更新文档与内置 agent-session-control skill。

安装方式

uv venv
source .venv/bin/activate
VERSION=0.1.2
BASE=https://github.com/x0c/agent-session-control/releases/download/v${VERSION}
SESSKIT=https://github.com/x0c/sesskit/releases/download/v0.3.2/sesskit-0.3.2-py3-none-any.whl

python -m pip install "${BASE}/agent_session_control-${VERSION}-py3-none-any.whl"
# 如需原生历史观测:
python -m pip install "${SESSKIT}" "${BASE}/agent_session_control-${VERSION}-py3-none-any.whl"

0.1.1

Choose a tag to compare

@x0c x0c released this 01 Nov 16:36

0.1.1

English

Security and correctness

  • Keep MCP environment credentials off the JSON CLI, tmux launcher and runtime process arguments. Secret-bearing CLI input uses --mcp-servers-file PATH or - for stdin; launcher delivery uses a private, single-use socket. Launch ownership is checked against the atomic pane ID/PID before credentials are sent, and failed cleanup never targets a replacement session.
  • Preserve complete native text and nested tool input/output through history loading, durable live events, final results and ACP replay. Bounded query summaries remain explicitly separate. Unsupported JSON payloads fail safely instead of being silently truncated or altered.
  • Keep repeated requests idempotent after asynchronous native-history binding, including reopened controllers and existing stored requests. Changed caller payloads still conflict; uncertain delivery never authorizes replay.
  • Enforce the stable ACP v1 stdio MCP baseline before serving. Claude, Codex and OpenCode can serve ACP; Cursor and Pi remain available through the SDK/JSON CLI but are refused by the production ACP entry. Missing distribution metadata now reports the canonical package version.

Installation and tools

  • Correct clean history/ACP installs by explicitly supplying SessKit's fixed wheel; a local uv source setting does not become wheel metadata. Core remains standard-library only.
  • Ship the companion agent-session-control Skill, including its operational MCP reference, in the wheel and sdist. Assessment prompts and grading answers stay outside installed Skill resources. Guidance covers selected-venv bootstrap, exact identities, safe MCP input, timeout handling and owned-session cleanup.
  • Correct executable examples and make failed or unconfirmed smoke-test cleanup retain recovery state rather than report success.
  • Add macOS/Linux CI for Python 3.10, 3.12 and 3.14, strict diagnostics, isolated installation checks and an explicit no-credential mode. The default local gate still includes live tests. Trusted Publisher jobs transfer the exact validated artifacts into a separate publishing job without rebuilding there.

Upgrade

Run inside a compatible Python 3.10–3.14 virtual environment:

VERSION=0.1.1
BASE=https://github.com/x0c/agent-session-control/releases/download/v${VERSION}
WHEEL=${BASE}/agent_session_control-${VERSION}-py3-none-any.whl
SESSKIT=https://github.com/x0c/sesskit/releases/download/v0.2.21/sesskit-0.2.21-py3-none-any.whl
python -m pip install "sesskit @ ${SESSKIT}" "agent-session-control[history,acp] @ ${WHEEL}"
agent-session-control version --json

Limits

  • The default terminal backend supports macOS/Linux with tmux. Windows/WSL are not supported.
  • Native turns require runtime login/quota and can spend model quota. Completion of a turn is not semantic task acceptance.
  • MCP fixture execution is headless evidence, not hosted-TUI delivery. Cursor/Pi refuse per-session MCP; OpenCode needs a launcher-owned server.
  • Fresh Skill sessions verified explicit loading, selected-venv bootstrap, safe previews and the offline-history boundary. Implicit selection was inconsistent; no improved trigger-rate claim is made.
  • GitHub Release and PyPI are published with identical wheel/sdist hashes. Clean public-download and PyPI-index installs passed. Core-only PyPI install: python -m pip install agent-session-control==0.1.1; history/ACP still need the fixed SessKit wheel shown above.

简体中文

安全与正确性

  • MCP 环境凭据不再进入 JSON CLI、tmux 启动器及运行时的进程参数。含密钥配置通过 --mcp-servers-file PATH 或标准输入 - 传入;启动器使用私有、一次性的 socket 交付。发送凭据前,对照创建时原子返回的 pane ID/PID 核对归属;失败清理不会操作替换后的会话。
  • 历史加载、持久化实时事件、最终结果和 ACP 重放保留完整原生文本及嵌套工具输入/输出。受限摘要与完整交付明确分开;无法表示为 JSON 的内容会安全报错,不再静默截断或改写。
  • 原生历史异步绑定后,重复请求仍保持幂等,包括重新打开控制器及已有持久化请求。调用方改变请求内容仍会冲突;投递不确定不构成重放许可。
  • ACP 服务启动前强制检查稳定 v1 的 stdio MCP 基线。Claude、Codex、OpenCode 可以提供 ACP;Cursor、Pi 仍可通过 SDK/JSON CLI 控制,但生产 ACP 入口会明确拒绝。缺少发行包元数据时,也会报告当前包版本。

安装与工具

  • 修复干净环境中的 history/ACP 安装:显式提供固定版本的 SessKit wheel;本地 uv 源设置不会成为 wheel 元数据。核心仍只依赖标准库。
  • wheel 和 sdist 随附 agent-session-control Skill 及 MCP 操作参考;验收题目和评分答案不进入安装后的 Skill 资源。指南覆盖指定虚拟环境安装、精确标识、安全 MCP 输入、超时处理和自有会话清理。
  • 修正可执行示例;冒烟测试在清理失败或无法确认时保留恢复状态,不再误报成功。
  • 新增 macOS/Linux 上 Python 3.10、3.12、3.14 的 CI、严格诊断、隔离安装验证及明确的无凭据模式。默认本地闸门仍包含真实运行测试。Trusted Publisher 将已验证的原始产物交给独立发布任务,不在发布任务内重建。

升级

在兼容 Python 3.10–3.14 的虚拟环境中执行:

VERSION=0.1.1
BASE=https://github.com/x0c/agent-session-control/releases/download/v${VERSION}
WHEEL=${BASE}/agent_session_control-${VERSION}-py3-none-any.whl
SESSKIT=https://github.com/x0c/sesskit/releases/download/v0.2.21/sesskit-0.2.21-py3-none-any.whl
python -m pip install "sesskit @ ${SESSKIT}" "agent-session-control[history,acp] @ ${WHEEL}"
agent-session-control version --json

限制

  • 默认终端后端支持 macOS/Linux,需要 tmux;不支持 Windows/WSL。
  • 原生回合需要运行时登录及可用配额,可能消耗模型额度。回合结束不等于任务语义验收通过。
  • MCP 夹具执行属于无界面运行证据,不代表托管 TUI 已交付。Cursor/Pi 拒绝按会话配置 MCP;OpenCode 需要启动方自有 server。
  • 全新 Skill 会话已验证显式加载、指定虚拟环境安装、安全预演及离线历史解析边界。隐式选择并不稳定,不宣称触发率提高。
  • GitHub Release 与 PyPI 均已发布,wheel/sdist 的哈希完全一致。公开下载及 PyPI 索引的干净安装均已验证。仅核心安装可用 python -m pip install agent-session-control==0.1.1;history/ACP 仍需同时安装上文的固定 SessKit wheel。

v0.1.0

Choose a tag to compare

@x0c x0c released this 30 Oct 10:09

Reusable coding-agent session control: pure launch plans, durable audited runs, terminal execution, evidence correlation, optional ACP v1 adapter (schema v1.27.0).

Install:
WHEEL=https://github.com/x0c/agent-session-control/releases/download/v0.1.0/agent_session_control-0.1.0-py3-none-any.whl
pip install "agent-session-control @ $WHEEL"

可复用的编码 Agent 会话控制:纯启动计划、持久化审计运行、终端执行、证据关联、可选 ACP v1 适配。