Repository navigation
Releases
v0.1.3
0.1.3
Fix dequeue-time queue expiration and lock-contention fast-reject semantics in supervisor.
Changes
- Dequeue-time
queue_timeoutenforcement:SupervisorRunner.admit()now evaluates_expired(spec, record)at the top of the admission loop before checkingtarget_waitingortarget_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 withdelivery="rejected",execution="failed",error.code="target_busy"whenspec["on_busy"] == "reject", matching busy-session admission rather than blocking behind an earlier run's target lock. - Tests & Contract: Updated
docs/CONTRACT.mdand added regression teststest_expired_run_rejects_even_when_target_is_idleandtest_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
0.1.2
Built-in Google Antigravity (agy) runtime support, composer boundaries, and sesskit>=0.3.2 native-history alignment.
Changes
- Built-in
antigravityruntime (agy): Added"antigravity"toBUILTIN_RUNTIME_IDS,default_registry(),_resume_argv()(agy --dangerously-skip-permissions --conversation <id>), andbetween_rulescomposer parsing validated against liveagy 1.5.8TUI panes. - Untrusted workspace prompt detection: Expanded
_BLOCKING_DIALOG_REto recognize Antigravity's↑/↓ Navigate · enter Confirmdialog footer without dropping focus into trust prompts. - MCP boundary: Live
agy 1.5.8rejectsmcpServersin--settings(unknown setting "mcpServers"), so per-session MCP channel injection is explicitly declared unsupported (MCP_CHANNEL_UNSUPPORTED) andagent-session-control acp --runtime antigravityrefuses at the stdio MCP baseline gate (while documenting nativeagy acp). - SessKit alignment: Upgraded the
historyextra pin tosesskit>=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, nativeHistoryObservercorrelation,load_history,resume), ACP refusal, and live disposabletmux+agycomposer tests, and updated docs and the bundledagent-session-controlskill.
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-controlskill。
安装方式
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
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 PATHor-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-controlSkill, 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 --jsonLimits
- 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-controlSkill 及 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
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 适配。