Compare commits
7
Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
cdb6ba0d9d | ||
|
|
e85cf1498b | ||
|
|
e37690be0c | ||
|
|
75b34699d8 | ||
|
|
78d521165d | ||
|
|
d5c6da29ba | ||
|
|
067138bd41 |
+13
-665
@@ -8,672 +8,20 @@ on:
|
||||
jobs:
|
||||
test:
|
||||
runs-on: ubuntu-latest
|
||||
env:
|
||||
GOPROXY: https://goproxy.cn,direct
|
||||
steps:
|
||||
- name: Checkout
|
||||
env:
|
||||
TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
SUBMODULE_TOKEN: ${{ secrets.SUBMODULE_TOKEN }}
|
||||
run: |
|
||||
set -euo pipefail
|
||||
# Credential handling stays inline: no file from the candidate is executed.
|
||||
# Workflow provenance and runner isolation still require platform controls.
|
||||
python3 - <<'PY_CHECKOUT'
|
||||
import os
|
||||
from pathlib import Path
|
||||
import re
|
||||
import subprocess
|
||||
import sys
|
||||
from urllib.parse import urlsplit
|
||||
|
||||
# 服务端基址取运行器注入的 GITHUB_SERVER_URL(平台控制、候选 PR 不可影响)。
|
||||
# 2026-10-05 修复(run 948/949 实测):注入值为内网直连形态
|
||||
# 'http://172.17.0.1:3000'(docker 网关 → 宿主 Gitea),与公网拼写不同且为
|
||||
# http——此前硬编码常量严格比对会拒绝合法检出。校验收宽为「http(s) + 非空
|
||||
# netloc」;凭据仍只附着于「该基址 + 下方仓库白名单」构造的 URL。
|
||||
SERVER = os.environ.get("GITHUB_SERVER_URL", "").rstrip("/")
|
||||
parsed_server = urlsplit(SERVER)
|
||||
if parsed_server.scheme not in {"http", "https"} or not parsed_server.netloc:
|
||||
sys.exit("Checkout server must be the platform-injected http(s) URL")
|
||||
SSH = "ssh://git@git-ssh.u1680832.nyat.app:31411/weichen/"
|
||||
# Reviewed allowlist, independent of candidate .gitmodules. Add repositories
|
||||
# here only with an explicit review of the checkout credential's scope.
|
||||
REPOSITORIES = {
|
||||
"modules/core": "Agent-System-Core",
|
||||
"modules/backend": "Agent-System-Backend",
|
||||
"modules/frontend": "Agent-System-Frontend",
|
||||
"modules/ui": "Agent-System-UI",
|
||||
"modules/documents": "Agent-System-Documents",
|
||||
"deps/agent-system-core": "Agent-System-Core",
|
||||
"deps/development-guidelines": "Development-Guidelines",
|
||||
"deps/agent-native": "Agent-Native",
|
||||
"deps/agent-squad": "Agent-Squad",
|
||||
"deps/agent-intent": "Agent-Intent",
|
||||
"deps/agent-command": "Agent-Command",
|
||||
"deps/error-code-system": "Error-Code-System",
|
||||
"deps/logging-system": "Logging-System",
|
||||
}
|
||||
root_token = os.environ.pop("TOKEN", "")
|
||||
component_token = os.environ.pop("SUBMODULE_TOKEN", "")
|
||||
if not root_token or not component_token:
|
||||
sys.exit("Checkout requires TOKEN and SUBMODULE_TOKEN")
|
||||
if os.environ.get("GITHUB_REPOSITORY") != "weichen/Agent-System-Dev":
|
||||
sys.exit("Checkout repository is outside the reviewed allowlist")
|
||||
sha = os.environ.get("GITHUB_SHA", "")
|
||||
if not re.fullmatch(r"[0-9a-fA-F]{40}", sha):
|
||||
sys.exit("Checkout requires a fixed commit SHA")
|
||||
|
||||
# Discard inherited Git tracing/config/SSH hooks. Auth lives only in one
|
||||
# Git process tree, in an exact URL-scoped header, never in a URL or file.
|
||||
clean_env = {k: v for k, v in os.environ.items() if not k.startswith("GIT_")}
|
||||
clean_env.update(GIT_CONFIG_NOSYSTEM="1", GIT_CONFIG_SYSTEM="/dev/null",
|
||||
GIT_CONFIG_GLOBAL="/dev/null", GIT_TERMINAL_PROMPT="0")
|
||||
config = {
|
||||
"core.hooksPath": "/dev/null", "core.fsmonitor": "false",
|
||||
"init.templateDir": "", "credential.helper": "",
|
||||
"fetch.recurseSubmodules": "false", "submodule.recurse": "false",
|
||||
"http.followRedirects": "false", "protocol.allow": "never",
|
||||
"protocol." + urlsplit(SERVER).scheme + ".allow": "always",
|
||||
}
|
||||
|
||||
|
||||
def git(repo, *args, extra=None):
|
||||
values = config | (extra or {})
|
||||
env = clean_env | {"GIT_CONFIG_COUNT": str(len(values))}
|
||||
for index, (key, value) in enumerate(values.items()):
|
||||
env[f"GIT_CONFIG_KEY_{index}"] = key
|
||||
env[f"GIT_CONFIG_VALUE_{index}"] = value
|
||||
return subprocess.run(["git", "-C", str(repo), *args], env=env,
|
||||
check=True, stdout=subprocess.PIPE).stdout
|
||||
|
||||
|
||||
def materialize(repo, depth=0):
|
||||
if depth > 16:
|
||||
raise ValueError("Submodule depth exceeds the reviewed checkout limit")
|
||||
links = {}
|
||||
for entry in git(repo, "ls-tree", "-rz", "HEAD").split(b"\0"):
|
||||
if not entry:
|
||||
continue
|
||||
metadata, path = entry.split(b"\t", 1)
|
||||
mode, kind, commit = metadata.decode().split()
|
||||
if mode == "160000":
|
||||
links[path.decode()] = commit
|
||||
if not links:
|
||||
return
|
||||
raw = git(repo, "config", "--no-includes", "--blob", "HEAD:.gitmodules", "--null", "--list")
|
||||
entries = {}
|
||||
for item in raw.split(b"\0"):
|
||||
if not item:
|
||||
continue
|
||||
key, value = item.decode().split("\n", 1)
|
||||
match = re.fullmatch(r"submodule\.(.+)\.(path|url)", key)
|
||||
if not match:
|
||||
raise ValueError("Unsupported candidate .gitmodules setting")
|
||||
name, field = match.groups()
|
||||
if field in entries.setdefault(name, {}):
|
||||
raise ValueError("Duplicate candidate .gitmodules setting")
|
||||
entries[name][field] = value
|
||||
if set(entries) != set(links):
|
||||
raise ValueError("Submodule names must match the fixed gitlink paths")
|
||||
# Validate the entire level before any authenticated component fetch.
|
||||
for name, fields in entries.items():
|
||||
repository = REPOSITORIES.get(name)
|
||||
if not repository or fields.get("path") != name:
|
||||
raise ValueError("Submodule path is outside the reviewed allowlist")
|
||||
trusted_url = f"{SERVER}/weichen/{repository}.git"
|
||||
if fields.get("url") not in {SSH + repository + ".git", trusted_url}:
|
||||
raise ValueError("Submodule URL is outside the reviewed allowlist")
|
||||
for name in entries:
|
||||
url = f"{SERVER}/weichen/{REPOSITORIES[name]}.git"
|
||||
# Persist only the reviewed public URL so Git recognizes the
|
||||
# initialized submodule after process-scoped config is gone.
|
||||
git(repo, "config", f"submodule.{name}.url", url)
|
||||
git(repo, "submodule", "update", "--init", "--checkout", "--", name,
|
||||
extra={f"submodule.{name}.url": url,
|
||||
f"submodule.{name}.update": "checkout",
|
||||
f"http.{url}.extraheader": "AUTHORIZATION: token " + component_token})
|
||||
child = repo / name
|
||||
if git(child, "rev-parse", "HEAD").decode().strip() != links[name]:
|
||||
raise ValueError("Materialized submodule does not match the fixed SHA")
|
||||
materialize(child, depth + 1)
|
||||
|
||||
|
||||
try:
|
||||
root = Path.cwd()
|
||||
# An ephemeral clean checkout is required; do not reuse prior Git state.
|
||||
if (root / ".git").exists():
|
||||
raise ValueError("Checkout requires a fresh workspace")
|
||||
git(root, "init", "-q")
|
||||
url = SERVER + "/weichen/Agent-System-Dev.git"
|
||||
git(root, "remote", "add", "origin", url)
|
||||
git(root, "fetch", "--depth=1", "origin", sha,
|
||||
extra={f"http.{url}.extraheader": "AUTHORIZATION: token " + root_token})
|
||||
git(root, "checkout", "-q", "--detach", "FETCH_HEAD")
|
||||
materialize(root)
|
||||
except (ValueError, OSError, subprocess.CalledProcessError) as error:
|
||||
sys.exit(f"Checkout refused: {error}")
|
||||
print("Checkout complete; credentials were not persisted in Git configuration")
|
||||
PY_CHECKOUT
|
||||
unset TOKEN SUBMODULE_TOKEN
|
||||
- name: Install Go 1.27.1
|
||||
run: |
|
||||
set -euo pipefail
|
||||
curl -fsSL -o "$RUNNER_TEMP/go.tgz" https://mirrors.aliyun.com/golang/go1.27.1.linux-amd64.tar.gz
|
||||
tar -C /usr/local -xzf "$RUNNER_TEMP/go.tgz"
|
||||
ln -sfn /usr/local/go/bin/go /usr/local/bin/go
|
||||
ln -sfn /usr/local/go/bin/gofmt /usr/local/bin/gofmt
|
||||
- name: Install Node 22
|
||||
run: |
|
||||
set -euo pipefail
|
||||
curl -fsSL -o "$RUNNER_TEMP/node.tar.xz" https://npmmirror.com/mirrors/node/v22.23.3/node-v22.23.3-linux-x64.tar.xz
|
||||
tar -C /usr/local --strip-components=1 -xJf "$RUNNER_TEMP/node.tar.xz"
|
||||
- name: Install house-style Python packages
|
||||
run: python3 -m pip install --break-system-packages -i https://pypi.tuna.tsinghua.edu.cn/simple python-docx python-pptx openpyxl
|
||||
- name: make test (boundaries, pins, libs, core, backend, frontend, ui, agent-command)
|
||||
- name: Configure submodule auth over HTTPS
|
||||
run: git config --global url."https://weichen:${{ secrets.SUBMODULE_TOKEN }}@git-home.u1680832.nyat.app:30319/".insteadOf "ssh://git@git-ssh.u1680832.nyat.app:31411/"
|
||||
- uses: actions/checkout@v4
|
||||
with:
|
||||
submodules: recursive
|
||||
fetch-depth: 0
|
||||
- uses: actions/setup-go@v5
|
||||
with:
|
||||
go-version: "1.27"
|
||||
- uses: actions/setup-node@v4
|
||||
with:
|
||||
node-version: "22"
|
||||
- name: Combination test (core + backend + frontend)
|
||||
run: make test
|
||||
- name: Build the single binary
|
||||
run: make build
|
||||
|
||||
# 协作存储方案 U2:真实 PostgreSQL + pgvector + Redis 门禁。
|
||||
# 缺服务时失败而非跳过(make test-backend-pg 硬校验环境变量);
|
||||
# 组件版本随 job 输出固定,供验收记录对齐(方案 KTD12/U2)。
|
||||
test-pg:
|
||||
runs-on: ubuntu-latest
|
||||
env:
|
||||
GOPROXY: https://goproxy.cn,direct
|
||||
steps:
|
||||
- name: Checkout
|
||||
env:
|
||||
TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
SUBMODULE_TOKEN: ${{ secrets.SUBMODULE_TOKEN }}
|
||||
run: |
|
||||
set -euo pipefail
|
||||
# Credential handling stays inline: no file from the candidate is executed.
|
||||
# Workflow provenance and runner isolation still require platform controls.
|
||||
python3 - <<'PY_CHECKOUT'
|
||||
import os
|
||||
from pathlib import Path
|
||||
import re
|
||||
import subprocess
|
||||
import sys
|
||||
from urllib.parse import urlsplit
|
||||
|
||||
# 服务端基址取运行器注入的 GITHUB_SERVER_URL(平台控制、候选 PR 不可影响)。
|
||||
# 2026-10-05 修复(run 948/949 实测):注入值为内网直连形态
|
||||
# 'http://172.17.0.1:3000'(docker 网关 → 宿主 Gitea),与公网拼写不同且为
|
||||
# http——此前硬编码常量严格比对会拒绝合法检出。校验收宽为「http(s) + 非空
|
||||
# netloc」;凭据仍只附着于「该基址 + 下方仓库白名单」构造的 URL。
|
||||
SERVER = os.environ.get("GITHUB_SERVER_URL", "").rstrip("/")
|
||||
parsed_server = urlsplit(SERVER)
|
||||
if parsed_server.scheme not in {"http", "https"} or not parsed_server.netloc:
|
||||
sys.exit("Checkout server must be the platform-injected http(s) URL")
|
||||
SSH = "ssh://git@git-ssh.u1680832.nyat.app:31411/weichen/"
|
||||
# Reviewed allowlist, independent of candidate .gitmodules. Add repositories
|
||||
# here only with an explicit review of the checkout credential's scope.
|
||||
REPOSITORIES = {
|
||||
"modules/core": "Agent-System-Core",
|
||||
"modules/backend": "Agent-System-Backend",
|
||||
"modules/frontend": "Agent-System-Frontend",
|
||||
"modules/ui": "Agent-System-UI",
|
||||
"modules/documents": "Agent-System-Documents",
|
||||
"deps/agent-system-core": "Agent-System-Core",
|
||||
"deps/development-guidelines": "Development-Guidelines",
|
||||
"deps/agent-native": "Agent-Native",
|
||||
"deps/agent-squad": "Agent-Squad",
|
||||
"deps/agent-intent": "Agent-Intent",
|
||||
"deps/agent-command": "Agent-Command",
|
||||
"deps/error-code-system": "Error-Code-System",
|
||||
"deps/logging-system": "Logging-System",
|
||||
}
|
||||
root_token = os.environ.pop("TOKEN", "")
|
||||
component_token = os.environ.pop("SUBMODULE_TOKEN", "")
|
||||
if not root_token or not component_token:
|
||||
sys.exit("Checkout requires TOKEN and SUBMODULE_TOKEN")
|
||||
if os.environ.get("GITHUB_REPOSITORY") != "weichen/Agent-System-Dev":
|
||||
sys.exit("Checkout repository is outside the reviewed allowlist")
|
||||
sha = os.environ.get("GITHUB_SHA", "")
|
||||
if not re.fullmatch(r"[0-9a-fA-F]{40}", sha):
|
||||
sys.exit("Checkout requires a fixed commit SHA")
|
||||
|
||||
# Discard inherited Git tracing/config/SSH hooks. Auth lives only in one
|
||||
# Git process tree, in an exact URL-scoped header, never in a URL or file.
|
||||
clean_env = {k: v for k, v in os.environ.items() if not k.startswith("GIT_")}
|
||||
clean_env.update(GIT_CONFIG_NOSYSTEM="1", GIT_CONFIG_SYSTEM="/dev/null",
|
||||
GIT_CONFIG_GLOBAL="/dev/null", GIT_TERMINAL_PROMPT="0")
|
||||
config = {
|
||||
"core.hooksPath": "/dev/null", "core.fsmonitor": "false",
|
||||
"init.templateDir": "", "credential.helper": "",
|
||||
"fetch.recurseSubmodules": "false", "submodule.recurse": "false",
|
||||
"http.followRedirects": "false", "protocol.allow": "never",
|
||||
"protocol." + urlsplit(SERVER).scheme + ".allow": "always",
|
||||
}
|
||||
|
||||
|
||||
def git(repo, *args, extra=None):
|
||||
values = config | (extra or {})
|
||||
env = clean_env | {"GIT_CONFIG_COUNT": str(len(values))}
|
||||
for index, (key, value) in enumerate(values.items()):
|
||||
env[f"GIT_CONFIG_KEY_{index}"] = key
|
||||
env[f"GIT_CONFIG_VALUE_{index}"] = value
|
||||
return subprocess.run(["git", "-C", str(repo), *args], env=env,
|
||||
check=True, stdout=subprocess.PIPE).stdout
|
||||
|
||||
|
||||
def materialize(repo, depth=0):
|
||||
if depth > 16:
|
||||
raise ValueError("Submodule depth exceeds the reviewed checkout limit")
|
||||
links = {}
|
||||
for entry in git(repo, "ls-tree", "-rz", "HEAD").split(b"\0"):
|
||||
if not entry:
|
||||
continue
|
||||
metadata, path = entry.split(b"\t", 1)
|
||||
mode, kind, commit = metadata.decode().split()
|
||||
if mode == "160000":
|
||||
links[path.decode()] = commit
|
||||
if not links:
|
||||
return
|
||||
raw = git(repo, "config", "--no-includes", "--blob", "HEAD:.gitmodules", "--null", "--list")
|
||||
entries = {}
|
||||
for item in raw.split(b"\0"):
|
||||
if not item:
|
||||
continue
|
||||
key, value = item.decode().split("\n", 1)
|
||||
match = re.fullmatch(r"submodule\.(.+)\.(path|url)", key)
|
||||
if not match:
|
||||
raise ValueError("Unsupported candidate .gitmodules setting")
|
||||
name, field = match.groups()
|
||||
if field in entries.setdefault(name, {}):
|
||||
raise ValueError("Duplicate candidate .gitmodules setting")
|
||||
entries[name][field] = value
|
||||
if set(entries) != set(links):
|
||||
raise ValueError("Submodule names must match the fixed gitlink paths")
|
||||
# Validate the entire level before any authenticated component fetch.
|
||||
for name, fields in entries.items():
|
||||
repository = REPOSITORIES.get(name)
|
||||
if not repository or fields.get("path") != name:
|
||||
raise ValueError("Submodule path is outside the reviewed allowlist")
|
||||
trusted_url = f"{SERVER}/weichen/{repository}.git"
|
||||
if fields.get("url") not in {SSH + repository + ".git", trusted_url}:
|
||||
raise ValueError("Submodule URL is outside the reviewed allowlist")
|
||||
for name in entries:
|
||||
url = f"{SERVER}/weichen/{REPOSITORIES[name]}.git"
|
||||
# Persist only the reviewed public URL so Git recognizes the
|
||||
# initialized submodule after process-scoped config is gone.
|
||||
git(repo, "config", f"submodule.{name}.url", url)
|
||||
git(repo, "submodule", "update", "--init", "--checkout", "--", name,
|
||||
extra={f"submodule.{name}.url": url,
|
||||
f"submodule.{name}.update": "checkout",
|
||||
f"http.{url}.extraheader": "AUTHORIZATION: token " + component_token})
|
||||
child = repo / name
|
||||
if git(child, "rev-parse", "HEAD").decode().strip() != links[name]:
|
||||
raise ValueError("Materialized submodule does not match the fixed SHA")
|
||||
materialize(child, depth + 1)
|
||||
|
||||
|
||||
try:
|
||||
root = Path.cwd()
|
||||
# An ephemeral clean checkout is required; do not reuse prior Git state.
|
||||
if (root / ".git").exists():
|
||||
raise ValueError("Checkout requires a fresh workspace")
|
||||
git(root, "init", "-q")
|
||||
url = SERVER + "/weichen/Agent-System-Dev.git"
|
||||
git(root, "remote", "add", "origin", url)
|
||||
git(root, "fetch", "--depth=1", "origin", sha,
|
||||
extra={f"http.{url}.extraheader": "AUTHORIZATION: token " + root_token})
|
||||
git(root, "checkout", "-q", "--detach", "FETCH_HEAD")
|
||||
materialize(root)
|
||||
except (ValueError, OSError, subprocess.CalledProcessError) as error:
|
||||
sys.exit(f"Checkout refused: {error}")
|
||||
print("Checkout complete; credentials were not persisted in Git configuration")
|
||||
PY_CHECKOUT
|
||||
unset TOKEN SUBMODULE_TOKEN
|
||||
- name: Install Go 1.27.1
|
||||
run: |
|
||||
set -euo pipefail
|
||||
curl -fsSL -o "$RUNNER_TEMP/go.tgz" https://mirrors.aliyun.com/golang/go1.27.1.linux-amd64.tar.gz
|
||||
tar -C /usr/local -xzf "$RUNNER_TEMP/go.tgz"
|
||||
ln -sfn /usr/local/go/bin/go /usr/local/bin/go
|
||||
ln -sfn /usr/local/go/bin/gofmt /usr/local/bin/gofmt
|
||||
- name: Install house-style Python packages
|
||||
run: python3 -m pip install --break-system-packages -i https://pypi.tuna.tsinghua.edu.cn/simple python-docx python-pptx openpyxl
|
||||
- name: Install PostgreSQL, pgvector and Redis
|
||||
run: |
|
||||
set -euo pipefail
|
||||
SUDO=""
|
||||
if command -v sudo >/dev/null 2>&1 && [ "$(id -u)" != 0 ]; then SUDO=sudo; fi
|
||||
$SUDO apt-get update -y
|
||||
$SUDO apt-get install -y postgresql postgresql-contrib postgresql-16-pgvector redis-server
|
||||
# 固定组件/扩展版本输出(随日志归档,作为验收对齐依据)。
|
||||
psql --version
|
||||
redis-server --version
|
||||
- name: Start PostgreSQL and Redis
|
||||
run: |
|
||||
set -euo pipefail
|
||||
SUDO=""
|
||||
if command -v sudo >/dev/null 2>&1 && [ "$(id -u)" != 0 ]; then SUDO=sudo; fi
|
||||
# 运行器容器以 root 运行且无 sudo:以 postgres 身份执行用 runuser/su
|
||||
# (实测 $SUDO -u 在 root 容器展开成裸 "-u" → exit 127)。
|
||||
pg_as_postgres() {
|
||||
if command -v runuser >/dev/null 2>&1; then runuser -u postgres -- "$@";
|
||||
else su postgres -s /bin/bash -c "$*"; fi
|
||||
}
|
||||
$SUDO service postgresql start || $SUDO pg_ctlcluster 16 main start
|
||||
# 预装 pg_trgm 到 public:与测试辅助的幂等预装一致,锁定的组件契约;
|
||||
# pgvector 版本一并输出(随日志归档,作为验收对齐依据)。
|
||||
pg_as_postgres psql -tAc "CREATE EXTENSION IF NOT EXISTS vector"
|
||||
pg_as_postgres psql -tAc "SELECT extname || '=' || extversion FROM pg_extension WHERE extname IN ('vector','pg_trgm')"
|
||||
pg_as_postgres psql -c "CREATE USER ci_agent PASSWORD 'ci_job_local_only' CREATEDB"
|
||||
pg_as_postgres psql -c "CREATE DATABASE agent_test OWNER ci_agent"
|
||||
pg_as_postgres psql -d agent_test -c "CREATE EXTENSION IF NOT EXISTS pg_trgm"
|
||||
redis-server --daemonize yes --port 6399 --save '' --appendonly no
|
||||
redis-cli -p 6399 ping
|
||||
- name: Backend tests against real PostgreSQL and Redis (required, no silent skip)
|
||||
env:
|
||||
AGENT_PG_TEST_DSN: postgres://ci_agent:ci_job_local_only@127.0.0.1:5432/agent_test?sslmode=disable
|
||||
AGENT_REDIS_TEST_ADDR: 127.0.0.1:6399
|
||||
run: make test-backend-pg
|
||||
- name: Two-process HTTP acceptance over shared PostgreSQL (U7, required)
|
||||
env:
|
||||
AGENT_PG_TEST_DSN: postgres://ci_agent:ci_job_local_only@127.0.0.1:5432/agent_test?sslmode=disable
|
||||
run: make test-multi-instance
|
||||
- name: RDM lifecycle pin is three fixed SHAs
|
||||
run: python3 -m unittest tests.test_lifecycle_pin -q && bash scripts/fetch-rdm-pin.sh tests/integration/lifecycle/rdm.pin >/dev/null
|
||||
- name: Clone Agent-System-RDM with nested pins (reviewed allowlist addition)
|
||||
env:
|
||||
SUBMODULE_TOKEN: ${{ secrets.SUBMODULE_TOKEN }}
|
||||
run: |
|
||||
set -euo pipefail
|
||||
# 凭据纪律与 Checkout 块同源:经 GIT_CONFIG_* 环境注入 URL 级 token 头,
|
||||
# 不落文件/命令行;allowlist 扩项 = Agent-System-RDM 及其 pins(同一
|
||||
# 组件集合),由本 PR 评审背书。SSH pins URL 以 insteadOf 改写到受信
|
||||
# https 基址后再取。只追加 pin 的三个 40 位 hex,不 source pin 文件。
|
||||
SERVER="$(printf '%s' "$GITHUB_SERVER_URL" | sed 's:/*$::')"
|
||||
scheme="${GITHUB_SERVER_URL%%://*}"
|
||||
export GIT_CONFIG_COUNT=4
|
||||
export GIT_CONFIG_KEY_0="protocol.$scheme.allow"
|
||||
export GIT_CONFIG_VALUE_0="always"
|
||||
export GIT_CONFIG_KEY_1="http.$SERVER/.extraheader"
|
||||
export GIT_CONFIG_VALUE_1="AUTHORIZATION: token $SUBMODULE_TOKEN"
|
||||
export GIT_CONFIG_KEY_2="url.$SERVER/weichen/.insteadOf"
|
||||
export GIT_CONFIG_VALUE_2="ssh://git@git-ssh.u1680832.nyat.app:31411/weichen/"
|
||||
export GIT_CONFIG_KEY_3="core.hooksPath"
|
||||
export GIT_CONFIG_VALUE_3="/dev/null"
|
||||
git clone --depth=1 "$SERVER/weichen/Agent-System-RDM.git" rdm
|
||||
mapfile -t pins < <(python3 - <<'PY'
|
||||
import pathlib
|
||||
got = {}
|
||||
for line in pathlib.Path("tests/integration/lifecycle/rdm.pin").read_text().splitlines():
|
||||
line = line.strip()
|
||||
if not line or line.startswith("#") or "=" not in line:
|
||||
continue
|
||||
key, value = line.split("=", 1)
|
||||
if key not in ("sha", "prev_sha", "legacy_sha") or len(value) != 40:
|
||||
raise SystemExit("rdm.pin rejected")
|
||||
if any(c not in "0123456789abcdef" for c in value):
|
||||
raise SystemExit("rdm.pin rejected")
|
||||
got[key] = value
|
||||
if set(got) != {"sha", "prev_sha", "legacy_sha"}:
|
||||
raise SystemExit("rdm.pin rejected")
|
||||
print(got["prev_sha"])
|
||||
print(got["legacy_sha"])
|
||||
print(got["sha"])
|
||||
PY
|
||||
)
|
||||
[ "${#pins[@]}" -eq 3 ]
|
||||
# depth=1 会把三个 pin 变成互不相关的浅根,update 会把 prev→sha 误判成分叉。
|
||||
# 当前 first-parent 距离是 39,200 留余量,仍不拉全史。
|
||||
git -C rdm fetch --depth=200 origin "${pins[@]}"
|
||||
for rev in "${pins[@]}"; do
|
||||
git -C rdm checkout --detach "$rev"
|
||||
git -C rdm submodule update --init --recursive
|
||||
done
|
||||
echo "RDM commit: $(git -C rdm rev-parse HEAD)"
|
||||
unset GIT_CONFIG_COUNT GIT_CONFIG_KEY_0 GIT_CONFIG_VALUE_0 \
|
||||
GIT_CONFIG_KEY_1 GIT_CONFIG_VALUE_1 GIT_CONFIG_KEY_2 \
|
||||
GIT_CONFIG_VALUE_2 GIT_CONFIG_KEY_3 GIT_CONFIG_VALUE_3
|
||||
unset SUBMODULE_TOKEN
|
||||
: > rdm/pin-build-digests.txt
|
||||
for rev in "${pins[@]}"; do
|
||||
git -C rdm checkout --detach "$rev"
|
||||
make -C rdm build
|
||||
sha256sum rdm/bin/agent-system-rdm | awk -v rev="$rev" '{print rev, $1}' >> rdm/pin-build-digests.txt
|
||||
done
|
||||
- name: Install Node 22
|
||||
run: |
|
||||
set -euo pipefail
|
||||
curl -fsSL -o "$RUNNER_TEMP/node.tar.xz" https://npmmirror.com/mirrors/node/v22.23.3/node-v22.23.3-linux-x64.tar.xz
|
||||
tar -C /usr/local --strip-components=1 -xJf "$RUNNER_TEMP/node.tar.xz"
|
||||
- name: Build the real agent-system binary
|
||||
run: make build
|
||||
- name: Real-combination lifecycle gate (make test-lifecycle, required)
|
||||
env:
|
||||
AGENT_PG_TEST_DSN: postgres://ci_agent:ci_job_local_only@127.0.0.1:5432/agent_test?sslmode=disable
|
||||
SUBMODULE_TOKEN: ${{ secrets.SUBMODULE_TOKEN }}
|
||||
run: |
|
||||
set -euo pipefail
|
||||
# 路径变量在脚本内解析(YAML env: 不做 shell 展开)。
|
||||
# 不设 SVC_RDM_ORIGIN:全轨 git 部署由 svc-realcombo 作业覆盖。
|
||||
# pins 物化没有 SSH known_hosts。token 只经 SVC_CI_GIT_TOKEN 进
|
||||
# ci_git_env 的 URL 级头,不写文件。
|
||||
export SVC_TEST_REAL=1 SVC_TEST_PG=1
|
||||
export SVC_REAL_BIN="$PWD/bin/agent-system"
|
||||
export SVC_REAL_RDM_BIN="$PWD/rdm/bin/agent-system-rdm"
|
||||
export SVC_RDM_SRC_DIR="$PWD/rdm"
|
||||
export SVC_CI_GIT_SERVER="$(printf '%s' "$GITHUB_SERVER_URL" | sed 's:/*$::')"
|
||||
export SVC_CI_GIT_TOKEN="$SUBMODULE_TOKEN"
|
||||
unset SUBMODULE_TOKEN
|
||||
make test-lifecycle
|
||||
|
||||
# U3(统一部署方案):真实 Dev/RDM 制品的 svc.sh 生命周期门禁——桩套件
|
||||
# (test_svc*.py)只证明脚本逻辑;本作业证明「声明≠能力」的最后一道:真实
|
||||
# identity 领养/verify、release 切换、伴生工作台、RDM 全轨部署。缺件即失败,
|
||||
# 不静默跳过(SVC_TEST_REAL=1 硬开关)。
|
||||
svc-realcombo:
|
||||
runs-on: ubuntu-latest
|
||||
env:
|
||||
GOPROXY: https://goproxy.cn,direct
|
||||
steps:
|
||||
- name: Checkout
|
||||
env:
|
||||
TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
SUBMODULE_TOKEN: ${{ secrets.SUBMODULE_TOKEN }}
|
||||
run: |
|
||||
set -euo pipefail
|
||||
# Credential handling stays inline: no file from the candidate is executed.
|
||||
# Workflow provenance and runner isolation still require platform controls.
|
||||
python3 - <<'PY_CHECKOUT'
|
||||
import os
|
||||
from pathlib import Path
|
||||
import re
|
||||
import subprocess
|
||||
import sys
|
||||
from urllib.parse import urlsplit
|
||||
|
||||
# 服务端基址取运行器注入的 GITHUB_SERVER_URL(平台控制、候选 PR 不可影响)。
|
||||
# 2026-10-05 修复(run 948/949 实测):注入值为内网直连形态
|
||||
# 'http://172.17.0.1:3000'(docker 网关 → 宿主 Gitea),与公网拼写不同且为
|
||||
# http——此前硬编码常量严格比对会拒绝合法检出。校验收宽为「http(s) + 非空
|
||||
# netloc」;凭据仍只附着于「该基址 + 下方仓库白名单」构造的 URL。
|
||||
SERVER = os.environ.get("GITHUB_SERVER_URL", "").rstrip("/")
|
||||
parsed_server = urlsplit(SERVER)
|
||||
if parsed_server.scheme not in {"http", "https"} or not parsed_server.netloc:
|
||||
sys.exit("Checkout server must be the platform-injected http(s) URL")
|
||||
SSH = "ssh://git@git-ssh.u1680832.nyat.app:31411/weichen/"
|
||||
# Reviewed allowlist, independent of candidate .gitmodules. Add repositories
|
||||
# here only with an explicit review of the checkout credential's scope.
|
||||
REPOSITORIES = {
|
||||
"modules/core": "Agent-System-Core",
|
||||
"modules/backend": "Agent-System-Backend",
|
||||
"modules/frontend": "Agent-System-Frontend",
|
||||
"modules/ui": "Agent-System-UI",
|
||||
"modules/documents": "Agent-System-Documents",
|
||||
"deps/agent-system-core": "Agent-System-Core",
|
||||
"deps/development-guidelines": "Development-Guidelines",
|
||||
"deps/agent-native": "Agent-Native",
|
||||
"deps/agent-squad": "Agent-Squad",
|
||||
"deps/agent-intent": "Agent-Intent",
|
||||
"deps/agent-command": "Agent-Command",
|
||||
"deps/error-code-system": "Error-Code-System",
|
||||
"deps/logging-system": "Logging-System",
|
||||
}
|
||||
root_token = os.environ.pop("TOKEN", "")
|
||||
component_token = os.environ.pop("SUBMODULE_TOKEN", "")
|
||||
if not root_token or not component_token:
|
||||
sys.exit("Checkout requires TOKEN and SUBMODULE_TOKEN")
|
||||
if os.environ.get("GITHUB_REPOSITORY") != "weichen/Agent-System-Dev":
|
||||
sys.exit("Checkout repository is outside the reviewed allowlist")
|
||||
sha = os.environ.get("GITHUB_SHA", "")
|
||||
if not re.fullmatch(r"[0-9a-fA-F]{40}", sha):
|
||||
sys.exit("Checkout requires a fixed commit SHA")
|
||||
|
||||
# Discard inherited Git tracing/config/SSH hooks. Auth lives only in one
|
||||
# Git process tree, in an exact URL-scoped header, never in a URL or file.
|
||||
clean_env = {k: v for k, v in os.environ.items() if not k.startswith("GIT_")}
|
||||
clean_env.update(GIT_CONFIG_NOSYSTEM="1", GIT_CONFIG_SYSTEM="/dev/null",
|
||||
GIT_CONFIG_GLOBAL="/dev/null", GIT_TERMINAL_PROMPT="0")
|
||||
config = {
|
||||
"core.hooksPath": "/dev/null", "core.fsmonitor": "false",
|
||||
"init.templateDir": "", "credential.helper": "",
|
||||
"fetch.recurseSubmodules": "false", "submodule.recurse": "false",
|
||||
"http.followRedirects": "false", "protocol.allow": "never",
|
||||
"protocol." + urlsplit(SERVER).scheme + ".allow": "always",
|
||||
}
|
||||
|
||||
|
||||
def git(repo, *args, extra=None):
|
||||
values = config | (extra or {})
|
||||
env = clean_env | {"GIT_CONFIG_COUNT": str(len(values))}
|
||||
for index, (key, value) in enumerate(values.items()):
|
||||
env[f"GIT_CONFIG_KEY_{index}"] = key
|
||||
env[f"GIT_CONFIG_VALUE_{index}"] = value
|
||||
return subprocess.run(["git", "-C", str(repo), *args], env=env,
|
||||
check=True, stdout=subprocess.PIPE).stdout
|
||||
|
||||
|
||||
def materialize(repo, depth=0):
|
||||
if depth > 16:
|
||||
raise ValueError("Submodule depth exceeds the reviewed checkout limit")
|
||||
links = {}
|
||||
for entry in git(repo, "ls-tree", "-rz", "HEAD").split(b"\0"):
|
||||
if not entry:
|
||||
continue
|
||||
metadata, path = entry.split(b"\t", 1)
|
||||
mode, kind, commit = metadata.decode().split()
|
||||
if mode == "160000":
|
||||
links[path.decode()] = commit
|
||||
if not links:
|
||||
return
|
||||
raw = git(repo, "config", "--no-includes", "--blob", "HEAD:.gitmodules", "--null", "--list")
|
||||
entries = {}
|
||||
for item in raw.split(b"\0"):
|
||||
if not item:
|
||||
continue
|
||||
key, value = item.decode().split("\n", 1)
|
||||
match = re.fullmatch(r"submodule\.(.+)\.(path|url)", key)
|
||||
if not match:
|
||||
raise ValueError("Unsupported candidate .gitmodules setting")
|
||||
name, field = match.groups()
|
||||
if field in entries.setdefault(name, {}):
|
||||
raise ValueError("Duplicate candidate .gitmodules setting")
|
||||
entries[name][field] = value
|
||||
if set(entries) != set(links):
|
||||
raise ValueError("Submodule names must match the fixed gitlink paths")
|
||||
# Validate the entire level before any authenticated component fetch.
|
||||
for name, fields in entries.items():
|
||||
repository = REPOSITORIES.get(name)
|
||||
if not repository or fields.get("path") != name:
|
||||
raise ValueError("Submodule path is outside the reviewed allowlist")
|
||||
trusted_url = f"{SERVER}/weichen/{repository}.git"
|
||||
if fields.get("url") not in {SSH + repository + ".git", trusted_url}:
|
||||
raise ValueError("Submodule URL is outside the reviewed allowlist")
|
||||
for name in entries:
|
||||
url = f"{SERVER}/weichen/{REPOSITORIES[name]}.git"
|
||||
# Persist only the reviewed public URL so Git recognizes the
|
||||
# initialized submodule after process-scoped config is gone.
|
||||
git(repo, "config", f"submodule.{name}.url", url)
|
||||
git(repo, "submodule", "update", "--init", "--checkout", "--", name,
|
||||
extra={f"submodule.{name}.url": url,
|
||||
f"submodule.{name}.update": "checkout",
|
||||
f"http.{url}.extraheader": "AUTHORIZATION: token " + component_token})
|
||||
child = repo / name
|
||||
if git(child, "rev-parse", "HEAD").decode().strip() != links[name]:
|
||||
raise ValueError("Materialized submodule does not match the fixed SHA")
|
||||
materialize(child, depth + 1)
|
||||
|
||||
|
||||
try:
|
||||
root = Path.cwd()
|
||||
# An ephemeral clean checkout is required; do not reuse prior Git state.
|
||||
if (root / ".git").exists():
|
||||
raise ValueError("Checkout requires a fresh workspace")
|
||||
git(root, "init", "-q")
|
||||
url = SERVER + "/weichen/Agent-System-Dev.git"
|
||||
git(root, "remote", "add", "origin", url)
|
||||
git(root, "fetch", "--depth=1", "origin", sha,
|
||||
extra={f"http.{url}.extraheader": "AUTHORIZATION: token " + root_token})
|
||||
git(root, "checkout", "-q", "--detach", "FETCH_HEAD")
|
||||
materialize(root)
|
||||
except (ValueError, OSError, subprocess.CalledProcessError) as error:
|
||||
sys.exit(f"Checkout refused: {error}")
|
||||
print("Checkout complete; credentials were not persisted in Git configuration")
|
||||
PY_CHECKOUT
|
||||
unset TOKEN SUBMODULE_TOKEN
|
||||
- name: Install Go 1.27.1
|
||||
run: |
|
||||
set -euo pipefail
|
||||
curl -fsSL -o "$RUNNER_TEMP/go.tgz" https://mirrors.aliyun.com/golang/go1.27.1.linux-amd64.tar.gz
|
||||
tar -C /usr/local -xzf "$RUNNER_TEMP/go.tgz"
|
||||
ln -sfn /usr/local/go/bin/go /usr/local/bin/go
|
||||
ln -sfn /usr/local/go/bin/gofmt /usr/local/bin/gofmt
|
||||
- name: Install Node 22
|
||||
run: |
|
||||
set -euo pipefail
|
||||
curl -fsSL -o "$RUNNER_TEMP/node.tar.xz" https://npmmirror.com/mirrors/node/v22.23.3/node-v22.23.3-linux-x64.tar.xz
|
||||
tar -C /usr/local --strip-components=1 -xJf "$RUNNER_TEMP/node.tar.xz"
|
||||
- name: Build the real agent-system binary
|
||||
run: make build
|
||||
- name: Clone Agent-System-RDM with nested pins (reviewed allowlist addition)
|
||||
env:
|
||||
SUBMODULE_TOKEN: ${{ secrets.SUBMODULE_TOKEN }}
|
||||
run: |
|
||||
set -euo pipefail
|
||||
# 凭据纪律与 Checkout 块同源:经 GIT_CONFIG_* 环境注入 URL 级 token 头,
|
||||
# 不落文件/命令行;allowlist 扩项 = Agent-System-RDM 及其 pins(同一
|
||||
# 组件集合),由本 PR 评审背书。SSH pins URL 以 insteadOf 改写到受信
|
||||
# https 基址后再取。
|
||||
SERVER="$(printf '%s' "$GITHUB_SERVER_URL" | sed 's:/*$::')"
|
||||
scheme="${GITHUB_SERVER_URL%%://*}"
|
||||
export GIT_CONFIG_COUNT=4
|
||||
export GIT_CONFIG_KEY_0="protocol.$scheme.allow"
|
||||
export GIT_CONFIG_VALUE_0="always"
|
||||
export GIT_CONFIG_KEY_1="http.$SERVER/.extraheader"
|
||||
export GIT_CONFIG_VALUE_1="AUTHORIZATION: token $SUBMODULE_TOKEN"
|
||||
export GIT_CONFIG_KEY_2="url.$SERVER/weichen/.insteadOf"
|
||||
export GIT_CONFIG_VALUE_2="ssh://git@git-ssh.u1680832.nyat.app:31411/weichen/"
|
||||
export GIT_CONFIG_KEY_3="core.hooksPath"
|
||||
export GIT_CONFIG_VALUE_3="/dev/null"
|
||||
git clone --depth=1 "$SERVER/weichen/Agent-System-RDM.git" rdm
|
||||
# 凭据环境须保持到 pins 子模块取完(insteadOf + token 头覆盖嵌套 SSH URL),
|
||||
# 之后再 unset。
|
||||
git -C rdm submodule update --init --recursive
|
||||
echo "RDM commit: $(git -C rdm rev-parse HEAD)"
|
||||
unset GIT_CONFIG_COUNT GIT_CONFIG_KEY_0 GIT_CONFIG_VALUE_0 \
|
||||
GIT_CONFIG_KEY_1 GIT_CONFIG_VALUE_1 GIT_CONFIG_KEY_2 \
|
||||
GIT_CONFIG_VALUE_2 GIT_CONFIG_KEY_3 GIT_CONFIG_VALUE_3
|
||||
unset SUBMODULE_TOKEN
|
||||
make -C rdm build
|
||||
- name: Run real-combination lifecycle gates (SQLite, U3, required)
|
||||
env:
|
||||
SUBMODULE_TOKEN: ${{ secrets.SUBMODULE_TOKEN }}
|
||||
run: |
|
||||
set -euo pipefail
|
||||
# 路径变量在脚本内解析(YAML env: 不做 shell 展开)。
|
||||
export SVC_TEST_REAL=1
|
||||
export SVC_REAL_BIN="$PWD/bin/agent-system"
|
||||
export SVC_REAL_RDM_BIN="$PWD/rdm/bin/agent-system-rdm"
|
||||
export SVC_RDM_ORIGIN="$PWD/rdm"
|
||||
# CI 无 SSH key:把受信基址与 URL 级 token 头经环境交给套件(仅环境传递)。
|
||||
export SVC_CI_GIT_SERVER="${GITHUB_SERVER_URL%/}"
|
||||
export SVC_CI_GIT_TOKEN="${SUBMODULE_TOKEN}"
|
||||
python3 -m unittest tests.test_svc_realcombo -v
|
||||
|
||||
-10
@@ -1,13 +1,9 @@
|
||||
/bin/
|
||||
node_modules/
|
||||
__pycache__/
|
||||
.DS_Store
|
||||
*.py[cod]
|
||||
/data/
|
||||
/data-test/
|
||||
.zcode/plans/
|
||||
runtime/
|
||||
runtime-backups/
|
||||
.svc.env
|
||||
|
||||
# 运行时环境文件(含密钥,不入库;svc-envfile 任务约定)
|
||||
@@ -15,9 +11,3 @@ runtime-backups/
|
||||
|
||||
# ZCode CLI 会话生成的工具忽略文件(内容镜像 .gitignore,工具自动维护,不入库)
|
||||
.zcodeignore
|
||||
|
||||
# Mimosa 安全扫描插件的逐会话状态(hook-status/reports/ledger,机器自动重建)
|
||||
.mimosa/
|
||||
|
||||
# e2e.sh 运行工件(构建/种子/日志;scripts/e2e.sh 输出)
|
||||
.tmp/
|
||||
|
||||
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@@ -1,34 +0,0 @@
|
||||
# feature/agent-harness-p0 任务卡
|
||||
|
||||
任务主记录:https://git-home.u1680832.nyat.app:30319/weichen/Agent-System-Dev/pulls/134 ;状态:已完成(回填);owner:weichen
|
||||
|
||||
## 基线与授权
|
||||
|
||||
- 权威仓:ssh://git@git-ssh.u1680832.nyat.app:31411/weichen/Agent-System-Dev.git;目标分支:main;R0(initial_base_sha)= 342efd8e08950329d620c9b49a06d2cb1bafaefa
|
||||
- 工作区:/home/weichen/projects/Agent-System-Dev-wt-feature-agent-harness-p0(worktree);分支:feature/agent-harness-p0
|
||||
- 授权与交付终点:用户批准 harness 提案 + P0 落地。允许:本 worktree 编辑、子仓 feature/agent-harness-p0 提交与推送、建 PR、推进 gitlink。未授权:合入 PR、改写历史、动分支保护、发版、实施 P1–P4。
|
||||
- 子仓分支均从各自 origin/main 切出(documents 当时比 Dev 指针多 1 个已合入提交,backend 同)。
|
||||
|
||||
## 目标与非目标
|
||||
|
||||
- 目标:写出 harness 设计提案(对标 ZCode 与 Claude Code,P0–P4),并落地 P0:助手历史按原生工具消息回放;虚假交付守卫改为最多纠正 2 次,用尽后附系统提示。
|
||||
- 非目标:不改 agent-native 内核(P1);不改纪要内容质量;不把小队入口的一次性失败改成纠正轮次。
|
||||
|
||||
## 同步记录
|
||||
|
||||
| 节点 | sync_base_sha | tested_head_sha | checked_at |
|
||||
|---|---|---|---|
|
||||
| 启动 | 342efd8e08950329d620c9b49a06d2cb1bafaefa | 342efd8e08950329d620c9b49a06d2cb1bafaefa | 2026-10-01T12:23:35Z |
|
||||
|
||||
## 结果与验证
|
||||
|
||||
- 结果:Documents 提案 `docs/proposals/2026-10-01-agent-harness.md`,并在基座路线图第 3 阶段加上链接。Backend 回放与守卫见提交 `188c633`。子仓 PR:Documents https://git-home.u1680832.nyat.app:30319/weichen/Agent-System-Documents/pulls/32 ;Backend https://git-home.u1680832.nyat.app:30319/weichen/Agent-System-Backend/pulls/42 。
|
||||
- 验证:启动 precheck verdict READY(head=342efd8e08)。Backend `go test ./...` 通过。Dev worktree `make test` 通过(boundaries、core、backend、frontend vitest 51、ui vitest 71、agent-command)。
|
||||
- 影响与剩余项:gitlink 指向上述两个子仓分支头。P1–P4 未实施。Dev PR https://git-home.u1680832.nyat.app:30319/weichen/Agent-System-Dev/pulls/134 ,合入权在所有者。
|
||||
| 同步前验收 | 342efd8e08950329d620c9b49a06d2cb1bafaefa | 897d12d6b5f158f8140164ac2195f8862f583456 | 2026-10-01T12:31:33Z |
|
||||
|
||||
## 闭合记录(card-autoclose 回填)
|
||||
|
||||
- 依据:merge 46b9e53f75f5383ea1ac961b8e6fa587f88ce64a(PR #134)已包含于 origin/main,分支成果已落盘;本段为合入后回填。
|
||||
- 合并主题:Merge pull request 'Pin the harness proposal and native tool-call replay' (#134) from feature/agent-harness-p0 into main
|
||||
- 归档:随闭合移入 .task/archive/;任务执行期的过程证据见原任务记录与 PR。
|
||||
@@ -1,44 +0,0 @@
|
||||
# feature/agent-harness-p1 任务卡
|
||||
|
||||
任务主记录:PR #136 https://git-home.u1680832.nyat.app:30319/weichen/Agent-System-Dev/pulls/136;状态:已完成(回填);owner:weichen
|
||||
|
||||
## 基线与授权
|
||||
|
||||
- 权威仓:ssh://git@git-ssh.u1680832.nyat.app:31411/weichen/Agent-System-Dev.git;目标分支:main;R0(initial_base_sha)= 701d4ab1e351b83bbc05c1b3f306467941064805
|
||||
- 工作区:/home/weichen/projects/Agent-System-Dev-wt-feature-agent-harness-p1(worktree);分支:feature/agent-harness-p1
|
||||
- 授权与交付终点:实现 P1(直连改走 runtime.Run,内核新能力默认关闭)。允许改 agent-native、backend、agent-squad 与 Dev 的 gitlink,并在各仓 feature/agent-harness-p1 上提 PR。未授权:合入 main、改小队行为、做 P2 计划回灌或 P3 子代理。
|
||||
- precheck(2026-10-01):verdict READY;R0=701d4ab1e351b83bbc05c1b3f306467941064805;branch=main head=701d4ab1e3;ahead=0 behind=0;tree clean。
|
||||
|
||||
## 目标与非目标
|
||||
|
||||
- 目标:直连 LLMRunner 改为 runtime.Run 适配;内核补 Stop、工具钩子、提醒、重复调用提醒、length 续写与 FinishReason。新字段零值保持今天的行为,P1 只给直连打开 RepeatGuard 与 ContinueOnLength。
|
||||
- 非目标:不改小队路径;不实现 Reminders 的计划回灌(P2);不改 SubLLMRunner / delegate_task(P3)。
|
||||
- 裁定:Stop 在 follow-up 排空之后才看;两者同时设置时,本轮有 follow-up 就不调用 Stop。length 续写优先于 follow-up 与 Stop。History 只在会话转录为空时作为初始转录,且不回写进 Session。
|
||||
|
||||
## 同步记录
|
||||
|
||||
| 节点 | sync_base_sha | tested_head_sha | checked_at |
|
||||
|---|---|---|---|
|
||||
| 启动 | 701d4ab1e351b83bbc05c1b3f306467941064805 | 701d4ab1e351b83bbc05c1b3f306467941064805 | 2026-10-01T12:51:56Z |
|
||||
| 同步前验收 | 701d4ab1e351b83bbc05c1b3f306467941064805 | b7631c71a81592b01ffe9b2d35bbb651b97eed56 | 2026-10-01T13:30:00Z |
|
||||
|
||||
## 结果与验证
|
||||
|
||||
- 结果:直连 `LLMRunner` 改为 `runtime.Run` 适配。内核新增可选的 Stop、BeforeTool/AfterTool、Reminders、RepeatGuard、ContinueOnLength、History、UnknownTool 与 `llm.Event.FinishReason`。直连打开 RepeatGuard 与 ContinueOnLength;小队不设置这些字段。三处 agent-native gitlink 同为 `a34689c`(Dev `deps/agent-native`、backend `deps/agent-native`、agent-squad `deps/agent-native`)。
|
||||
- 指针:agent-native `a34689c`,backend `cfcf95d`,agent-squad `590fd86`。
|
||||
- 裁定:未在画像里声明、但模型仍然发出的工具调用走 `UnknownTool`,零值保持 unknown tool 错误。注册表 schema 用宽松 object,真实 schema 仍经流式请求声明,避免空参数被内核校验提前拒绝。
|
||||
- 验证:
|
||||
- precheck(启动):verdict READY;R0=701d4ab1e351b83bbc05c1b3f306467941064805;head=701d4ab1e3;ahead=0 behind=0;tree clean。
|
||||
- agent-native `go test ./...` 通过。
|
||||
- backend `go test ./...` 通过。现有 `internal/runtime` 断言未改;新增工具整批超限落库与 length 续写。
|
||||
- agent-squad `scripts/submodule-consistency.sh` 全部 ok;`go test ./...` 通过。
|
||||
- Dev `make test` 通过(boundaries ok,core/backend go test,frontend vitest 51,ui vitest 71,agent-command ok)。
|
||||
- task-sync:`Already up to date.` `[synced] sync_base=701d4ab1e3 tested_head=b7631c71a8 checked_at=2026-10-01T13:30:00Z`
|
||||
- 影响与剩余项:合入顺序为 Agent-Native #6,然后 Backend #43 与 Agent-Squad #6,最后 Dev #136。均未合入。P2 的 Reminders 仍为 nil。小队行为留到 P3。
|
||||
| 同步前验收 | 701d4ab1e351b83bbc05c1b3f306467941064805 | 1417fbef9d5d745f42d9c6b919213d7a52a53a8c | 2026-10-01T13:41:48Z |
|
||||
|
||||
## 闭合记录(card-autoclose 回填)
|
||||
|
||||
- 依据:merge def110d784dfeb0139062cb511a0b7de6e59ae81(PR #136)已包含于 origin/main,分支成果已落盘;本段为合入后回填。
|
||||
- 合并主题:Merge pull request 'Pin the harness turn loop across the three native checkouts' (#136) from feature/agent-harness-p1 into main
|
||||
- 归档:随闭合移入 .task/archive/;任务执行期的过程证据见原任务记录与 PR。
|
||||
@@ -1,76 +0,0 @@
|
||||
# feature/agent-harness-p2 任务卡
|
||||
|
||||
任务主记录:https://git-home.u1680832.nyat.app:30319/weichen/Agent-System-Dev/pulls/138 ;状态:已完成(回填);owner:weichen
|
||||
|
||||
## 基线与授权
|
||||
|
||||
- 权威仓:ssh://git@git-ssh.u1680832.nyat.app:31411/weichen/Agent-System-Dev.git;目标分支:main;R0(initial_base_sha)= d02fa9c20a594da287983d8edd47156ddbd49e01
|
||||
- 工作区:/home/weichen/projects/Agent-System-Dev-wt-feature-agent-harness-p2(worktree);分支:feature/agent-harness-p2
|
||||
- 授权与交付终点:实现 P2 结果把控。允许改 Agent-System-Backend,并在 `feature/agent-harness-p2` 上提 PR;Dev 仓只推进 `modules/backend` 并提 PR。未授权:合入 main、改 agent-native 内核、改小队路径、改 SubLLMRunner、做工作流执行器。
|
||||
- 启动自检(2026-10-01T13:44Z):`make precheck` verdict READY。head=d02fa9c20a,origin/main 同步,树干净,linked worktrees=0。必读 core/baseline.md、workflows/delivery.md §1 已读。
|
||||
|
||||
## 目标与非目标
|
||||
|
||||
- 目标:直连终轮在 `deliverableGate` 之后做确定性检查(工件存在且非空;md/txt/docx 走 quality,lint error 或评分不过即不通过),再由不带工具的验证器输出 `{passed, reason, nextAction}`。出错或无法解析判不通过并给 Notice。计划和待办连续 3 个工具轮未更新时提醒一次,每 run 最多 3 次,不落库。
|
||||
- 非目标:不改 agent-native;不改小队路径和 SubLLMRunner;不做工作流执行器。`runtime.verify` 缺省读取为 false,生产默认 true。
|
||||
|
||||
## 同步记录
|
||||
|
||||
| 节点 | sync_base_sha | tested_head_sha | checked_at |
|
||||
|---|---|---|---|
|
||||
| 启动 | d02fa9c20a594da287983d8edd47156ddbd49e01 | d02fa9c20a594da287983d8edd47156ddbd49e01 | 2026-10-01T13:45:07Z |
|
||||
| 同步前验收 | d02fa9c20a594da287983d8edd47156ddbd49e01 | f9d7bbe9f2cb4ccc3966faf3d3d7c2949dffcbc6 | 2026-10-01T13:54:53Z |
|
||||
|
||||
## 结果与验证
|
||||
|
||||
- 结果:直连终轮在 `deliverableGate` 之后检查本轮工件(存在、非空;md/txt/docx 走 `quality.ScoreBytes`),再由不带工具的验证器给出 `{passed, reason, nextAction}`。验证器出错或无法解析时不再续跑主模型,并附 Notice「本轮回复未通过独立验证(验证器不可用)」。计划和待办连续 3 个工具轮未更新提醒一次,每 run 最多 3 次,不落库。Backend `a3ae1b9`。Dev 只推进 `modules/backend` 到该提交。三处 agent-native 仍为 `a34689c`(Dev `deps/agent-native`、backend `deps/agent-native`、agent-squad `deps/agent-native`)。
|
||||
- 验证:见下方三段输出。`make test` 退出码 0(boundaries、core、backend、frontend vitest 51、ui vitest 71、agent-command)。
|
||||
- 影响与剩余项:`runtime.verify` 默认开启,每个终轮多一次轻量模型调用,可用该设置关闭。普通问答也会被「拿不准判不通过」,最多续跑 3 次。Backend PR https://git-home.u1680832.nyat.app:30319/weichen/Agent-System-Backend/pulls/44 与 Dev PR https://git-home.u1680832.nyat.app:30319/weichen/Agent-System-Dev/pulls/138 均未合入。小队路径与 SubLLMRunner 未改。
|
||||
|
||||
### precheck
|
||||
|
||||
```
|
||||
[repo] branch=main head=d02fa9c20a
|
||||
[remote] origin/main=d02fa9c20a ahead=0 behind=0
|
||||
[tree] clean submodules_drift=0 uninit=0
|
||||
[worktrees] linked=0
|
||||
[recycle] merged un-recycled branches: feature/card-close-20261001-124542Z feature/card-close-20261001-134217Z feature/card-close-base-extension-roadmap
|
||||
[required-reading] core/baseline.md, workflows/delivery.md §1
|
||||
[R0] d02fa9c20a(完整:d02fa9c20a594da287983d8edd47156ddbd49e01)
|
||||
[verdict] READY — 可建任务工作区:make task-start NAME=feature/your-branch
|
||||
```
|
||||
|
||||
### task-sync
|
||||
|
||||
```
|
||||
Already up to date.
|
||||
[synced] sync_base=d02fa9c20a tested_head=f9d7bbe9f2 checked_at=2026-10-01T13:54:53Z
|
||||
[next] 跑正式验收(make test 等),证据写入任务卡
|
||||
```
|
||||
|
||||
### make test
|
||||
|
||||
```
|
||||
bash scripts/lint-boundaries.sh
|
||||
boundaries ok
|
||||
cd modules/core && go test ./...
|
||||
ok agent-system-core 0.002s
|
||||
cd modules/backend && go test ./...
|
||||
(各包 ok,含 internal/runtime、internal/quality、internal/server)
|
||||
cd modules/frontend && npm ci && npx vitest run
|
||||
Test Files 9 passed (9)
|
||||
Tests 51 passed (51)
|
||||
cd modules/ui && npm ci && npx tsc --noEmit && npx vitest run
|
||||
Test Files 11 passed (11)
|
||||
Tests 71 passed (71)
|
||||
cd deps/agent-command && go vet ./... && go test -count=1 ./...
|
||||
ok agent-command 0.002s
|
||||
ok agent-command/conformance 0.002s
|
||||
```
|
||||
| 同步前验收 | d02fa9c20a594da287983d8edd47156ddbd49e01 | 9df951323ab83e6d3338b67c64e69156d3734989 | 2026-10-01T14:00:37Z |
|
||||
|
||||
## 闭合记录(card-autoclose 回填)
|
||||
|
||||
- 依据:merge 1939d50a7fcb61bdb4bc98cba84173e7e5fc9a11(PR #138)已包含于 origin/main,分支成果已落盘;本段为合入后回填。
|
||||
- 合并主题:Merge pull request 'Pin backend to the final-turn result checks' (#138) from feature/agent-harness-p2 into main
|
||||
- 归档:随闭合移入 .task/archive/;任务执行期的过程证据见原任务记录与 PR。
|
||||
@@ -1,84 +0,0 @@
|
||||
# feature/agent-harness-p3 任务卡
|
||||
|
||||
任务主记录:https://git-home.u1680832.nyat.app:30319/weichen/Agent-System-Dev/pulls/140 ;状态:已完成(回填);owner:weichen
|
||||
|
||||
## 基线与授权
|
||||
|
||||
- 权威仓:ssh://git@git-ssh.u1680832.nyat.app:31411/weichen/Agent-System-Dev.git;目标分支:main;R0(initial_base_sha)= bc8fef76bb8cec7b6ea1acf6c061232d20a78102
|
||||
- 工作区:/home/weichen/projects/Agent-System-Dev-wt-feature-agent-harness-p3(worktree);分支:feature/agent-harness-p3
|
||||
- 授权与交付终点:实现 P3a(子代理 profile、带工具的子循环、深度 1、历史隔离)。允许改 Agent-System-Backend,并在 `feature/agent-harness-p3` 上提 PR;Dev 仓只推进 `modules/backend` 并提 PR。未授权:合入 main、改 agent-native、改 agent-squad、改 core 契约、做后台通知或评审流水线。
|
||||
- 启动自检(2026-10-01T14:01Z):`make precheck` verdict READY。head=bc8fef76bb,origin/main 同步,树干净。必读 core/baseline.md、workflows/delivery.md §1 已读。
|
||||
- 裁定:profile 的 tools、model、maxTurns 只从内置库文件读取,用户覆盖正文不能改这三项,因此不改 `core.PromptModule`。子代理不挂终轮 Stop 检查,父回复的终轮检查覆盖子代理产出的工件。小队步骤一律用 `agent.sub.general`。
|
||||
|
||||
## 目标与非目标
|
||||
|
||||
- 目标:`delegate_task` 按 profile 拉起带工具的内核子循环,深度为 1,父会话只收到摘要和工件;子 run 消息不进入主对话历史。小队步骤经 `SpawnSubagent` 走同一运行时。
|
||||
- 非目标:后台运行与完成通知、评审流水线、小队角色到 profile 的映射。不改内核、小队仓和 core 契约。
|
||||
|
||||
## 同步记录
|
||||
|
||||
| 节点 | sync_base_sha | tested_head_sha | checked_at |
|
||||
|---|---|---|---|
|
||||
| 启动 | bc8fef76bb8cec7b6ea1acf6c061232d20a78102 | bc8fef76bb8cec7b6ea1acf6c061232d20a78102 | 2026-10-01T14:02:12Z |
|
||||
| 同步前验收 | bc8fef76bb8cec7b6ea1acf6c061232d20a78102 | 5ed3649b42679d1a75cbbb8c14d615bd141ac4eb | 2026-10-01T14:13:39Z |
|
||||
| 合入前同步 | bc8fef76bb8cec7b6ea1acf6c061232d20a78102 | 53f8a059bdba71a515e9c978c43c8b97a27f15bb | 2026-10-01T14:50:18Z |
|
||||
|
||||
## 结果与验证
|
||||
|
||||
- 结果:六个 `agent-sub-*.md` 写入 tools、model、maxTurns,只从内置库读取。`SubLLMRunner` 改为带工具的内核子循环,深度为 1,父会话收到摘要和已确认工件。子 run 消息不进入 `History()`,`ListMessages` 仍保留。Backend `5051a06`。Dev 只推进 `modules/backend` 到该提交(`5ed3649`)。三处编译用 agent-native 仍为 `a34689c`(Dev `deps/agent-native`、`deps/agent-squad/deps/agent-native`、backend `deps/agent-native`)。
|
||||
- 验证:见下方三段输出。`make test` 退出码 0(boundaries、core、backend、frontend vitest 51、ui vitest 71、agent-command)。
|
||||
- 影响与剩余项:小队步骤改为最多 12 轮的轻量子循环,不含执行类工具。子代理不挂终轮 Stop 检查。用户不能改工具白名单。Backend PR https://git-home.u1680832.nyat.app:30319/weichen/Agent-System-Backend/pulls/45 与 Dev PR https://git-home.u1680832.nyat.app:30319/weichen/Agent-System-Dev/pulls/140 均未合入。
|
||||
|
||||
## 真实对话核对
|
||||
|
||||
服务 `p3a`(`scripts/svc.sh p3a deploy --from dev@f823118`,http://127.0.0.1:8934,数据从 dev 复制)。未改代码。
|
||||
|
||||
- explore(`cnv_feb01f134edd`):子 run `run_afe7397a04c6` 调用了 `knowledge_search`、`tavily_search`、`web_search`。父回复只有 `delegate_task` 的摘要。下一轮追问工具名,模型回答记录里没有这些工具名;`ListMessages` 仍保留子 run 消息。
|
||||
- writer(`cnv_73fdad281472`):子 run 调用了 `run_python` 并写了 `p3a-check.md`。父回复钉上了 `art_e7734e155382` 等工件。终轮检查给出「本轮回复未通过终轮检查」,父模型在登记后又反复改文件。
|
||||
- 确认卡(`cnv_443b8b5bcae7`,画像 `Confirm: ["knowledge_search"]`):卡片 `hitl_85bc6a141b8e` 挂在子 run `run_a2a874a6ab4c`。收件箱显示「执行工具 knowledge_search?」和「执行 / 取消」。批准后子代理继续检索并完成。
|
||||
- 小队(`cnv_bac0acb41e71`):四个步骤都是子代理工具循环,工具属于 general(`write_artifact`、`quality_review`,没有 `run_python`)。leader 写出 `output.md`(`art_0af18d24d11a`)。父 run 随后因轮次上限 16 失败,发生在质检打回后的重排,不是子代理运行时错误。
|
||||
|
||||
Tavily 返回 HTTP 402,是账户额度,不是这次的代码问题。
|
||||
|
||||
### precheck
|
||||
|
||||
```
|
||||
[verdict] READY
|
||||
head=bc8fef76bb,origin/main 同步,树干净
|
||||
必读 core/baseline.md、workflows/delivery.md §1
|
||||
checked_at=2026-10-01T14:01Z
|
||||
```
|
||||
|
||||
### task-sync
|
||||
|
||||
```
|
||||
Already up to date.
|
||||
[synced] sync_base=bc8fef76bb tested_head=5ed3649b42 checked_at=2026-10-01T14:13:39Z
|
||||
[next] 跑正式验收(make test 等),证据写入任务卡
|
||||
```
|
||||
|
||||
### make test
|
||||
|
||||
```
|
||||
bash scripts/lint-boundaries.sh
|
||||
boundaries ok
|
||||
cd modules/core && go test ./...
|
||||
ok agent-system-core 0.002s
|
||||
cd modules/backend && go test ./...
|
||||
(各包 ok,含 internal/prompts、internal/runtime、internal/runmgr、internal/server)
|
||||
cd modules/frontend && npm ci && npx vitest run
|
||||
Test Files 9 passed (9)
|
||||
Tests 51 passed (51)
|
||||
cd modules/ui && npm ci && npx tsc --noEmit && npx vitest run
|
||||
Test Files 11 passed (11)
|
||||
Tests 71 passed (71)
|
||||
cd deps/agent-command && go vet ./... && go test -count=1 ./...
|
||||
ok agent-command 0.002s
|
||||
ok agent-command/conformance 0.001s
|
||||
```
|
||||
|
||||
## 闭合记录(card-autoclose 回填)
|
||||
|
||||
- 依据:merge 5096a052dcaef7ee08a3251ec50a47bf7f066618(PR #140)已包含于 origin/main,分支成果已落盘;本段为合入后回填。
|
||||
- 合并主题:Merge pull request 'Pin backend to the depth-one subagent loop' (#140) from feature/agent-harness-p3 into main
|
||||
- 归档:随闭合移入 .task/archive/;任务执行期的过程证据见原任务记录与 PR。
|
||||
@@ -1,39 +0,0 @@
|
||||
# feature/agent-harness-p3b 任务卡
|
||||
|
||||
任务主记录:https://git-home.u1680832.nyat.app:30319/weichen/Agent-System-Dev/pulls/142 ;状态:已完成(回填);owner:weichen
|
||||
|
||||
## 基线与授权
|
||||
|
||||
- 权威仓:ssh://git@git-ssh.u1680832.nyat.app:31411/weichen/Agent-System-Dev.git;目标分支:main;R0(initial_base_sha)= fdd311c8c029f3e8a7b47437d9695691bc125e9e
|
||||
- 工作区:/home/weichen/projects/Agent-System-Dev-wt-feature-agent-harness-p3b(worktree);分支:feature/agent-harness-p3b
|
||||
- 授权与交付终点:实现 P3b(跨 run 后台子代理与合并通知、评审流水线、小队角色映射、用户可覆盖 tools/model/maxTurns)。允许改 Core、Backend、Frontend、UI,并在各自 `feature/agent-harness-p3b` 上提 PR;Dev 仓推进 `modules/core`、`modules/backend`、`modules/frontend`、`modules/ui` 并提 PR。未授权:合入 main、改 agent-native、改 agent-squad 契约。
|
||||
- 启动自检(2026-10-01T14:51Z):`make precheck` verdict READY。head=fdd311c8c0,origin/main 同步,树干净。必读 core/baseline.md、workflows/delivery.md §1 已读。
|
||||
- 裁定:后台通知只存在内存里,服务重启后在途子代理标为 interrupted,未投递的通知丢失。每个会话最多同时 3 个后台子代理,超出时工具报错。用户覆盖只走现有 `POST /api/prompts`,不新增前端编辑器;覆盖不能加入 `delegate_task`、`squad_orchestrate`、`review_findings`,以保持深度为 1。
|
||||
|
||||
## 目标与非目标
|
||||
|
||||
- 目标:`delegate_task` 可后台运行,完成后自动发起一次父回合,多条通知合并成一条 system 消息。`review_findings` 并行找问题、逐条验证、丢掉未验证的再汇总。小队步骤按角色映射到子代理 profile。`PromptModule` 增加 tools、model、maxTurns,用户行可以覆盖内置 spec。
|
||||
- 非目标:不改内核与小队仓契约。不新增提示词编辑界面。通知不落库。
|
||||
|
||||
## 同步记录
|
||||
|
||||
| 节点 | sync_base_sha | tested_head_sha | checked_at |
|
||||
|---|---|---|---|
|
||||
| 启动 | fdd311c8c029f3e8a7b47437d9695691bc125e9e | fdd311c8c029f3e8a7b47437d9695691bc125e9e | 2026-10-01T14:52:39Z |
|
||||
| 同步前验收 | fdd311c8c029f3e8a7b47437d9695691bc125e9e | 1bc9954e40453f3476ef3856d50c085b83b6408d | 2026-10-01T15:39:25Z |
|
||||
| 合入前同步 | fdd311c8c029f3e8a7b47437d9695691bc125e9e | d05a73872c938aaa3d46d50309d0994276d0e0e8 | 2026-10-01T15:51:28Z |
|
||||
|
||||
## 结果与验证
|
||||
|
||||
- 结果:四个模块都在 `feature/agent-harness-p3b`。Core `9b8cf79` 给 PromptModule 增加 tools、model、maxTurns。Backend `46ce1b2` 做覆盖链、小队角色映射、后台子代理和评审。Frontend `f718095` 让后台子代理不再挡住发送,并把 system 消息画成通知行。UI `bd3baff` 同步契约。Dev `6430738` 推进这四个指针。agent-native 仍是 `a34689c`。
|
||||
- 验证:`make test` 通过(boundaries ok;core ok;backend 各包 ok;frontend vitest 53;ui vitest 71;agent-command ok)。
|
||||
- 真实对话:服务 `p3b`(`scripts/svc.sh p3b deploy --from local`,http://127.0.0.1:8841,数据从 dev 复制)。
|
||||
- 后台(`cnv_0aab84f51c8c`、`cnv_2a3ce768bb00`):子 run 在父 run 结束前完成,通知先排队。父 run 释放槽位后出现一条 `<system-reminder>` system 消息,并自动开始新的父回合。没有用户再发消息。
|
||||
- 评审(`cnv_a2e5962befdc`):两个审查子代理加三个核实子代理。父回复保留化学式和奥运会年份问题,并写明「已丢弃 0 条未验证」。
|
||||
- 影响与剩余项:通知不持久。小队 writer 步骤会用到 writer profile。用户覆盖没有界面。合入不在本次授权内。五个 PR 都未合入:Core #15、Backend #46、Frontend #32、UI #26、Dev #142。
|
||||
|
||||
## 闭合记录(card-autoclose 回填)
|
||||
|
||||
- 依据:merge ec4614322eaded96ee13f576992f016b47648200(PR #142)已包含于 origin/main,分支成果已落盘;本段为合入后回填。
|
||||
- 合并主题:Merge pull request 'Pin P3b background subagents, review, and profile overrides' (#142) from feature/agent-harness-p3b into main
|
||||
- 归档:随闭合移入 .task/archive/;任务执行期的过程证据见原任务记录与 PR。
|
||||
@@ -1,35 +0,0 @@
|
||||
# feature/agent-harness-p4 任务卡
|
||||
|
||||
任务主记录:PR #144 https://git-home.u1680832.nyat.app:30319/weichen/Agent-System-Dev/pulls/144(merge 3ba104c721);状态:已完成(回填);owner:weichen
|
||||
|
||||
## 基线与授权
|
||||
|
||||
- 权威仓:ssh://git@git-ssh.u1680832.nyat.app:31411/weichen/Agent-System-Dev.git;目标分支:main;R0(initial_base_sha)= 959179f88fafa06daeab121929112069d34e8419
|
||||
- 工作区:/home/weichen/projects/Agent-System-Dev-wt-feature-agent-harness-p4(worktree);分支:feature/agent-harness-p4
|
||||
- 授权与交付终点:实现 P4 意图到工作流。允许改 Core、Backend、Frontend、UI、Documents,并在各自 `feature/agent-harness-p4` 上提 PR;Dev 仓推进 `modules/core`、`modules/backend`、`modules/frontend`、`modules/ui`、`modules/documents` 与 `plugins/example` 并提 PR。终点是六个 PR 已开、不合入。未授权:合入 main、改 agent-native、改 agent-squad 契约、动 `dev` 服务。
|
||||
- 启动自检(2026-10-01T15:52Z):`make precheck` verdict READY。head=959179f88f,origin/main 同步,树干净。必读 core/baseline.md、workflows/delivery.md §1 已读。
|
||||
- 裁定:路由先命令总线,再绑定工作流,最后才是普通回合。工作流启动时拷贝一份定义,插件卸载不影响已经在跑的工作流。声明式工作流最多 20 步;模型生成的最多 8 步,不能含 `script`,执行前必须用户确认。critic 每步最多重试 3 次、缺省 1 次,整个工作流最多重试 6 次。脚本最多回调 50 次,单行不超过 1MB,超时缺省 600s、最长 1800s(墙钟,含等待 HITL 和子代理)。脚本与 `run_python` 相同,以当前用户身份运行,工作目录为会话沙箱,没有网络或文件系统隔离。回调一律经过 `runCtx.ExecuteTool`,不能调用 `run_python`、`run_shell`、`run_workflow` 和派发类工具。模型写的脚本运行前必须确认;插件自带的脚本不需要。开关 `runtime.workflowScripts` 缺省关闭。critic 无法解析按不通过处理。小队入口不提供 `run_workflow`。
|
||||
|
||||
## 目标与非目标
|
||||
|
||||
- 目标:`WorkflowDef` 有执行器。意图命中后接到绑定的工作流。critic 按步骤打回,每步和整条工作流都有上限。同时支持模型生成步骤和沙箱脚本两种动态工作流。
|
||||
- 非目标:不新增工作流界面和事件。Frontend 与 UI 只同步契约。不改内核与小队仓契约。不合入 main。
|
||||
|
||||
## 同步记录
|
||||
|
||||
| 节点 | sync_base_sha | tested_head_sha | checked_at |
|
||||
|---|---|---|---|
|
||||
| 启动 | 959179f88fafa06daeab121929112069d34e8419 | 959179f88fafa06daeab121929112069d34e8419 | 2026-10-01T15:53:54Z |
|
||||
| 同步前验收 | 959179f88fafa06daeab121929112069d34e8419 | 5f872f3b7f165c2a6cbef09bbcaa711f5bdf723c | 2026-10-01T16:38:23Z |
|
||||
|
||||
## 结果与验证
|
||||
|
||||
- 结果:Core `f93f473` 给步骤加上 Agent、Script、Critic,kind 增加 script。Backend `4b4be2b` 注册工作流、按意图启动、执行六类步骤、确认后跑模型规划、以及 fd 3/fd 4 脚本宿主。Frontend `7d796ee` 与 UI `22666a0` 只同步了契约。Documents `974db6a` 写入 P4 裁定。Dev `5f872f3` 推进这五个模块,并给示例插件加上 `demo.brief` 与 `demo.script`。
|
||||
- 验证:启动时 `make precheck` 为 READY,head `959179f88f`(2026-10-01T15:52Z)。`make task-sync` 记录 sync_base `959179f88f`、tested_head `5f872f3`、checked_at 2026-10-01T16:38:23Z。随后在该 head 上 `make test` 通过:边界检查、core、backend、frontend vitest 53、UI tsc 与 vitest 71、agent-command。三处 agent-native 仍是 `a34689c`。p4 服务(127.0.0.1:8929,数据从 dev 备份,未改 dev)核对了三项:会话 `cnv_e3f0cf85f48d` 中「写一份简报」先问「主题是什么?」,critic 打回一次并留下丢弃理由,重跑后完成,工件 `art_76f9b51b4e27`,收件箱有「简报好了」。会话 `cnv_ccba204decb3` 中 `run_workflow` 的 goal 先请用户确认计划,确认后执行完成。打开 `runtime.workflowScripts` 后,会话 `cnv_adadae794ae2` 跑插件脚本 `demo.script`,脚本问「要记下来吗?」,确认后产出 `demo-script.md`(`art_13fe6947ef6e`)。
|
||||
- 影响与剩余项:六个 PR 不合入。核对用的 p4 服务在收尾时删除。脚本没有沙箱隔离,靠开关、确认和回调白名单。墙钟超时包含等待人工的时间。
|
||||
|
||||
## 闭合记录(card-autoclose 回填)
|
||||
|
||||
- 依据:merge 3ba104c721013f63be249e2f810376d3d8b26ee3(PR #144)已包含于 origin/main,分支成果已落盘;本段为合入后回填。
|
||||
- 合并主题:Merge pull request 'Add intent-to-workflow execution' (#144) from feature/agent-harness-p4 into main
|
||||
- 归档:随闭合移入 .task/archive/;任务执行期的过程证据见原任务记录与 PR。
|
||||
File diff suppressed because one or more lines are too long
@@ -1,40 +0,0 @@
|
||||
# feature/agent-native-deliverables-r1 任务卡
|
||||
|
||||
任务主记录:<PR 链接,task-finish 时填写>;状态:已完成(主批次);owner:weichen
|
||||
|
||||
## 基线与授权
|
||||
|
||||
- 权威仓:ssh://git@git-ssh.u1680832.nyat.app:31411/weichen/Agent-System-Dev.git;目标分支:main;R0(initial_base_sha)= 1a66b5dcb185c4730fe87de6704cb7aa27dd2e54
|
||||
- 工作区:/home/weichen/projects/Agent-System-Dev-wt-feature-agent-native-deliverables-r1(worktree);分支:feature/agent-native-deliverables-r1
|
||||
- 授权与交付终点:用户实测反馈三项问题(对话仍只有文字文件名、正文全进过程输出、工件面板点击无反应)并定调重构方向——(1) 文档/表格/演示稿生成能力归还 Agent(命令行/Python/Shell + 技能),系统不提供领域生成工具;(2) 对话契约 = 唯一最终输出作为回复、其余进过程折叠。交付终点:根因修复 + agent-native 主批次合入 + dev 环境重部署验证。
|
||||
|
||||
## 目标与非目标
|
||||
|
||||
- 根因修复:runmgr.ExecuteTool 回填工具产生的 Artifact(此前仅超长截断路径设置——真实工具产物永不产生对话卡片;fake 单测掩盖)。
|
||||
- agent-native:register_artifact 登记桥 + base.deliverables 交付工作流提示词(run_python 配方:python-docx/openpyxl/python-pptx)+ 移除 write_docx 系统工具;run_shell/run_python 解释器执行器(脚本落盘+白名单解释器+沙箱 cwd+时限/输出上限)因 mimosa 写入门禁判定(用户已选「放开钩子」但尚未生效)分批落盘。
|
||||
- 对话契约:内联 <think> 折离为思考件;前端废除 CF0 长回复折叠(最终输出必完整可见);工件面板点击先收弹层再开预览。
|
||||
- 非目标:run_shell/run_python 落盘(待门禁)、生成 docx 的全文索引、xlsx/pptx 领域工具回潮。
|
||||
|
||||
## 同步记录
|
||||
|
||||
| 节点 | sync_base_sha | tested_head_sha | checked_at |
|
||||
|---|---|---|---|
|
||||
| 启动 | 1a66b5dcb185c4730fe87de6704cb7aa27dd2e54 | 1a66b5dcb185c4730fe87de6704cb7aa27dd2e54 | 2026-10-01T03:06:XXZ |
|
||||
| 合入前 | 1a66b5dcb1(Dev 无前进) | backend 3c08f90 + frontend c17ac24(make test 全绿于合入前 heads) | 2026-10-01T03:38:XXZ |
|
||||
|
||||
## 结果与验证
|
||||
|
||||
- 结果:
|
||||
- Backend PR #32(merge 3c08f90):ExecuteTool 工件回填(toolCtx.arts 追踪,指针接收者);tools/register_artifact(≤10MB、沙箱内路径、kind/mime 归类);base.deliverables 常驻提示词(生成→登记→简短收尾 + 三套 Python 配方);write_artifact 提示词改文本专用;task.doc-minutes 改工作流交付;write_docx 工具与提示词移除(docgen 保留为 mock 演示的确定性生成器);llm.go splitThinkBlock 折离内联推理。
|
||||
- Frontend PR #27(merge c17ac24):废除长回复折叠(最终输出契约);ArtifactsPanel 点击/全屏预览先收工作区弹层再开预览。
|
||||
- 未落盘:run_shell/run_python(解释器执行器设计定稿——脚本落盘 .agent/、bash/python3 白名单、60/300s 时限、64KB 输出截断;mimosa 对任何实现形态(-c 内联/参数传递/stdio/落盘文件)一律判「命令注入·高危」拦截,/tmp 暂存亦拦)。解锁路径:用户停用 mimosa 插件后新会话续作,或用户亲手放置文件(app.go 同时加 tools.RegisterInterpreterTools(reg) 一行)。
|
||||
- 验证:
|
||||
- runmgr 新测试:write_artifact 经真实 registry/store 链路回填 res.Artifact;time_now 负例不携带。
|
||||
- backend go test 19 包 ok、vet 干净;frontend vitest 40/40、tsc 干净;组合 make test 全绿(含 ui 68 + design-guard 8)。
|
||||
- 线上(部署后补记):见 PR 与部署验证记录。
|
||||
- 影响与剩余项:
|
||||
- run_shell/run_python 待门禁决策后补齐(提示词已就位,模型在工具缺失时回落 write_artifact,不阻塞主链路);
|
||||
- 生成的二进制工件不进全文索引(维持上批决策);
|
||||
- python-docx/openpyxl/python-pptx 已装于本机用户 site(PEP668 下 --break-system-packages --user);
|
||||
- mimosa commit/push 仍 scanner_no_output 兼容放行,不据此宣称安全。
|
||||
| 同步前验收 | 1a66b5dcb185c4730fe87de6704cb7aa27dd2e54 | a70242da753e618988e09cfb1eafd80f733f7ea9 | 2026-10-01T03:36:19Z |
|
||||
File diff suppressed because one or more lines are too long
@@ -1,40 +0,0 @@
|
||||
# feature/agent-professional-deliverables 任务卡
|
||||
|
||||
任务主记录:https://git-home.u1680832.nyat.app:30319/weichen/Agent-System-Dev/pulls/126 ;状态:已完成(回填);owner:weichen
|
||||
|
||||
## 基线与授权
|
||||
|
||||
- 权威仓:ssh://git@git-ssh.u1680832.nyat.app:31411/weichen/Agent-System-Dev.git;目标分支:main;R0(initial_base_sha)= 6f7f4a0e7858c70261d7bbeb179f5eb59303f956
|
||||
- 工作区:/home/weichen/projects/Agent-System-Dev-wt-feature-agent-professional-deliverables(worktree);分支:feature/agent-professional-deliverables
|
||||
- 实现在子仓 Agent-System-Backend,已合入 main(PR #38,merge 2079b2dfa851bd4cbe8f399a015126c842c441ec)。本仓 PR #126 推进 gitlink。合入权在所有者。
|
||||
- 未授权:不合入受保护分支,不把 .tmp 样例文档入库。
|
||||
|
||||
## 目标与非目标
|
||||
|
||||
- 目标:给智能体的全部工作加上专业标准(结构、语言、数据、版式、交付前自检),而不只提高某一份文档的质量。交付物支持 modern / formal / minimal,并可按用户指令、上传模板或参考文档切换。
|
||||
- 受影响:提示词库 base/task/agent、技能 house-style 与三份 author 配方、技能种子升级、run_python 环境、上传原件 inputs/、设置 deliverables.*。
|
||||
- 非目标:工件卡片上的“设为默认模板”按钮(前端交互,本次只用设置项)。
|
||||
|
||||
## 同步记录
|
||||
|
||||
| 节点 | sync_base_sha | tested_head_sha | checked_at |
|
||||
|---|---|---|---|
|
||||
| 启动 | 6f7f4a0e7858c70261d7bbeb179f5eb59303f956 | 6f7f4a0e7858c70261d7bbeb179f5eb59303f956 | 2026-10-01T07:59:21Z |
|
||||
|
||||
## 结果与验证
|
||||
|
||||
- 结果:Backend PR #38。常驻 base.quality;house-style 负责主题、模板、仿制和 lint;种子可升级未改内置文件并保留用户修订;附件原件落到 inputs/。
|
||||
- 验证:子仓 `go test ./...` 通过。house-style 三主题 × docx/pptx/xlsx lint 无 error。样例纪要 `housestyle.lint` 退出码 1,报出纸张、正文字体、默认主题色、空段落、手打列表、空节、标点、Table Grid、缺页码。
|
||||
- 影响与剩余项:Backend PR #38 已合入(merge 2079b2dfa851bd4cbe8f399a015126c842c441ec)。本分支推进 gitlink 到该提交。样例文档仍留在主检出 .tmp,不入库。工件卡片上的“设为默认模板”按钮仍不在本次范围。
|
||||
| 同步前验收 | 6f7f4a0e7858c70261d7bbeb179f5eb59303f956 | 2e8b9face3542844319f4a545768b6cf04c126a5 | 2026-10-01T08:19:31Z |
|
||||
| 同步前验收 | 6f7f4a0e7858c70261d7bbeb179f5eb59303f956 | f41ad95b1c5c9d2c415a12a64ac1f1551cd7b6af | 2026-10-01T08:20:22Z |
|
||||
| 同步前验收 | 959179f88fafa06daeab121929112069d34e8419 | 6705d521f441b7bb558f6cd9c082f445cac192c3 | 2026-10-01T23:33:48Z |
|
||||
| 同步前验收 | 959179f88fafa06daeab121929112069d34e8419 | 0f3ea6c8b545923a7dfaf46d938f682f0c879246 | 2026-10-01T23:48:16Z |
|
||||
| 同步前验收 | 08ef71661d4d65d13471978185a7afb4636b3f34 | 83881c13206d97a8b5ee69cd465c621a337a70fb | 2026-10-02T02:36:24Z |
|
||||
| 同步前验收 | 08ef71661d4d65d13471978185a7afb4636b3f34 | f43aec709d5e72dffd421fe157545507bd7d425e | 2026-10-02T05:03:41Z |
|
||||
|
||||
## 闭合记录(card-autoclose 回填)
|
||||
|
||||
- 依据:merge 28174a67524849084823e16791d498c1dcdcb77a(PR #126)已包含于 origin/main,分支成果已落盘;本段为合入后回填。
|
||||
- 合并主题:Merge pull request 'Pin backend professional deliverable standards' (#126) from feature/agent-professional-deliverables into main
|
||||
- 归档:随闭合移入 .task/archive/;任务执行期的过程证据见原任务记录与 PR。
|
||||
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@@ -1,34 +0,0 @@
|
||||
# feature/agent-stack-blueprint 任务卡
|
||||
|
||||
任务主记录:https://git-home.u1680832.nyat.app:30319/weichen/Agent-System-Dev/pulls/151 ;状态:已完成(回填);owner:weichen
|
||||
|
||||
## 基线与授权
|
||||
|
||||
- 权威仓:ssh://git@git-ssh.u1680832.nyat.app:31411/weichen/Agent-System-Dev.git;目标分支:main;R0(initial_base_sha)= f4aa0348d7f60e4dd5b6b222205a2c561465db8e
|
||||
- 工作区:/home/weichen/projects/Agent-System-Dev-wt-feature-agent-stack-blueprint(worktree);分支:feature/agent-stack-blueprint
|
||||
- 授权与交付终点:只写设计文档。允许在本 worktree 编辑任务卡、在 Agent-System-Documents 的 `feature/agent-stack-blueprint` 上提交并推送、建 PR,并在 Dev 仓推进 `modules/documents` gitlink、建 PR。终点是两个 PR 已开、不合入。未授权:合入 main、改三个库的代码、改写历史、动分支保护、发版。
|
||||
- 启动自检(2026-10-02T16:20Z):`make precheck` verdict READY。head=f4aa0348d7,origin/main 同步,树干净,linked worktrees=0。必读 core/baseline.md、workflows/delivery.md §1 已读。
|
||||
|
||||
## 目标与非目标
|
||||
|
||||
- 目标:把 Agent-Native、Agent-Squad、Agent-Intent 的缺陷、对外借鉴和解耦方案写成可审提案。编排收敛到 Agent-Squad。三库核心互不依赖,互通只用 JSON Schema,跨库适配器放在使用方仓库的独立子模块。
|
||||
- 受影响:`modules/documents` 两份新文档,以及 harness 提案、基座路线图各加一行链接。
|
||||
- 非目标:不实施 R0–Q3 的任何代码;不改三个库的指针;不合入。
|
||||
|
||||
## 同步记录
|
||||
|
||||
| 节点 | sync_base_sha | tested_head_sha | checked_at |
|
||||
|---|---|---|---|
|
||||
| 启动 | f4aa0348d7f60e4dd5b6b222205a2c561465db8e | f4aa0348d7f60e4dd5b6b222205a2c561465db8e | 2026-10-02T16:21:34Z |
|
||||
|
||||
## 结果与验证
|
||||
|
||||
- 结果:Documents 提案提交 `233dfb54ea1cd8e8085769832eef18fb3eaa04b7`,合入后主分支 `76044b5895e8abe5bd1e3bf45ccfe3ea7edcdc42`(同一棵树)。提案 `docs/proposals/2026-10-02-agent-stack-completion.md`,审计 `docs/records/2026-10-02-agent-stack-audit.md`。Documents PR https://git-home.u1680832.nyat.app:30319/weichen/Agent-System-Documents/pulls/34 已合入。Dev PR https://git-home.u1680832.nyat.app:30319/weichen/Agent-System-Dev/pulls/151 。2026-10-03 所有者明确要求合入。
|
||||
- 验证:启动 `make precheck` verdict READY,head `f4aa0348d7`(2026-10-02T16:20Z)。`make task-sync`:Already up to date。`[synced] sync_base=f4aa0348d7 tested_head=2237c79b3a checked_at=2026-10-02T16:30:55Z`。随后 `make test` 退出码 0:boundaries ok;core ok;backend 各包 ok(server 5.261s);frontend vitest 13 文件 68 项;ui tsc 与 vitest 11 文件 79 项;agent-command 与 conformance ok。
|
||||
- 影响与剩余项:阶段 R0 起的实现已在后续批次合入。本卡只交付提案文档。
|
||||
|
||||
## 闭合记录(card-autoclose 回填)
|
||||
|
||||
- 依据:merge 2a24d8418a7c0da0428481fd03c315a346eb597c(PR #151)已包含于 origin/main,分支成果已落盘;本段为合入后回填。
|
||||
- 合并主题:Merge pull request 'Pin documents to the agent stack completion proposal' (#151) from feature/agent-stack-blueprint into main
|
||||
- 归档:随闭合移入 .task/archive/;任务执行期的过程证据见原任务记录与 PR。
|
||||
@@ -1,34 +0,0 @@
|
||||
# feature/agent-stack-d1 任务卡
|
||||
|
||||
任务主记录:PR #156 https://git-home.u1680832.nyat.app:30319/weichen/Agent-System-Dev/pulls/156(merge 19b93ed09c);状态:已完成(回填);owner:weichen
|
||||
|
||||
## 基线与授权
|
||||
|
||||
- 权威仓:ssh://git@git-ssh.u1680832.nyat.app:31411/weichen/Agent-System-Dev.git;目标分支:main;R0(initial_base_sha)= 954ea44478ceac73d205c3a68b5de522847fb6cf
|
||||
- 工作区:/home/weichen/projects/Agent-System-Dev-wt-feature-agent-stack-d1(worktree);分支:feature/agent-stack-d1
|
||||
- 授权与交付终点:合入 Intent、Native、Squad、Backend、Dev 的 feature/agent-stack-d1,然后在本 worktree 运行 make task-finish。不改分支保护、不发版、不改写历史。不改模块路径,不删除嵌套 gitlink。
|
||||
|
||||
## 目标与非目标
|
||||
|
||||
- 目标:按提案第 3 节把三库解耦。Native 删掉 intentgate,契约并进 exec,Options 拆成嵌入子结构。Squad 核心只留端口;native、intent、sqlite、命令各自成模块。三库各自给出 schema 样例和往返测试。Backend 改走 adapters/native。Dev 的 test-libs 覆盖新模块,核心 go list -deps 不得看见兄弟库,agent-intent 只许 adapters/intent 和 Backend internal/intentgate 导入。
|
||||
- 非目标:不改模块路径,不删除嵌套 gitlink,不做 go.work、AgentSpec 迁移、workflow 退役,也不做意图校验器的 Registry 作用域改动。N10、N20、N22、Q20、Q21、I3、I5 以及后续 N1/Q1/I1 不在本批。
|
||||
|
||||
## 同步记录
|
||||
|
||||
| 节点 | sync_base_sha | tested_head_sha | checked_at |
|
||||
|---|---|---|---|
|
||||
| 启动 | 954ea44478ceac73d205c3a68b5de522847fb6cf | 954ea44478ceac73d205c3a68b5de522847fb6cf | 2026-10-03T13:26:20Z |
|
||||
| 同步前验收 | 954ea44478ceac73d205c3a68b5de522847fb6cf | 10bff94a6aa928b27cded352eb21f5e4d985ebc9 | 2026-10-03T13:47:07Z |
|
||||
| 同步前验收 | 954ea44478ceac73d205c3a68b5de522847fb6cf | af649e19b7a7ea0c0a6f92dceafb384c1a8a747f | 2026-10-03T13:52:17Z |
|
||||
|
||||
## 结果与验证
|
||||
|
||||
- 结果:Intent 65aaebc,Native d84a67c,Squad 02c0d6a,Backend 0a9a977。Dev 钉住这四个头。Native 删除 intentgate 并把契约并进 exec,取消中的 SSE 以 aborted 结束。Squad 核心不再导入兄弟库;adapters/intent、adapters/native、adapters/sqlite 与 cmd/agent-squad 各自有 go.mod。
|
||||
- 验证:2026-10-03,worktree bbffa42。Native `GOWORK=off go test -count=50 -race ./runtime/llm/` 通过。`make test` 退出码 0(boundaries、pins、libs 含四个新模块、core、backend、frontend 13 文件 68 测试、ui 11 文件 79 测试、agent-command)。`make build` 产出 `bin/agent-system`,版本串含 native=d84a67c squad=02c0d6a intent=65aaebc backend=0a9a977。
|
||||
- 影响与剩余项:模块路径与嵌套 gitlink 保持不变。N10、N20、N22、Q20、Q21、I3、I5 以及后续 N1/Q1/I1 仍未做。development-guidelines 嵌套指针与 Dev 顶层不一致,check-pins 只告警。
|
||||
|
||||
## 闭合记录(card-autoclose 回填)
|
||||
|
||||
- 依据:merge 19b93ed09c0b80de78eed45763b482616b54ed06(PR #156)已包含于 origin/main,分支成果已落盘;本段为合入后回填。
|
||||
- 合并主题:Merge pull request 'Pin the D1 library and backend heads' (#156) from feature/agent-stack-d1 into main
|
||||
- 归档:随闭合移入 .task/archive/;任务执行期的过程证据见原任务记录与 PR。
|
||||
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@@ -1,72 +0,0 @@
|
||||
# feature/agent-stack-r0-r1 任务卡
|
||||
|
||||
任务主记录:PR #152 https://git-home.u1680832.nyat.app:30319/weichen/Agent-System-Dev/pulls/152 ;状态:已完成(回填);owner:weichen
|
||||
|
||||
## 基线与授权
|
||||
|
||||
- 权威仓:ssh://git@git-ssh.u1680832.nyat.app:31411/weichen/Agent-System-Dev.git;目标分支:main;R0(initial_base_sha)= f4aa0348d7f60e4dd5b6b222205a2c561465db8e
|
||||
- 工作区:/home/weichen/projects/Agent-System-Dev-wt-feature-agent-stack-r0-r1(worktree);分支:feature/agent-stack-r0-r1
|
||||
- 授权与交付终点:按提案第 5 节实施 R0(组合一致性)与 R1(三库 P0 与安全向 P1)。允许在 Agent-Intent、Agent-Native、Agent-Squad、Agent-System-Backend、Agent-System-Dev 五个仓各从 origin/main 切 feature/agent-stack-r0-r1,提交、推送并建 PR,推进 Dev 与 Backend 的 gitlink。终点 = 五个 PR 已开且均未合入。未授权:合入、发版、改写历史、变更分支保护、改 development-guidelines 嵌套指针。
|
||||
- 追加授权(2026-10-03,主检出 `make precheck` verdict READY,head=`f4aa0348d7`,linked worktrees=2):在同一批 `feature/agent-stack-r0-r1` 上补收尾加固与 CI。允许改 Squad 的并行审批与挂起、Dev 的指针检查、`make pin`、导入棘轮和 `task.sh`,五个仓的 CI workflow,以及任务卡欠账。R2 与 D1 等五个 PR 由所有者合入后再从各仓 main 开独立任务。未授权:合入、发版、改分支保护、配置 `SUBMODULE_TOKEN`。
|
||||
|
||||
## 目标与非目标
|
||||
|
||||
- 目标:Dev 测的就是发布的组合(go.work、指针一致性检查、库间依赖棘轮、库测试纳入 make test);修 I1/I2/I6、N1–N4/N13/N14、Q1–Q5/Q8/Q9/Q14–Q16,每条带回归测试。
|
||||
- 非目标:实现原生 Anthropic/Google 协议、合入 PR、发版、编排收敛到 Squad(后续批次)。
|
||||
|
||||
## 同步记录
|
||||
|
||||
| 节点 | sync_base_sha | tested_head_sha | checked_at |
|
||||
|---|---|---|---|
|
||||
| 启动 | f4aa0348d7f60e4dd5b6b222205a2c561465db8e | f4aa0348d7f60e4dd5b6b222205a2c561465db8e | 2026-10-03T00:27:10Z |
|
||||
| 同步前验收 | f4aa0348d7f60e4dd5b6b222205a2c561465db8e | 978bf8bdaec0890e241849f0fb9e6999b0a1de86 | 2026-10-03T02:10:29Z |
|
||||
|
||||
## 结果与验证
|
||||
|
||||
- 结果:五个 PR 已开,均未合入。合入顺序:Intent #3 https://git-home.u1680832.nyat.app:30319/weichen/Agent-Intent/pulls/3 、Native #8 https://git-home.u1680832.nyat.app:30319/weichen/Agent-Native/pulls/8 、Squad #7 https://git-home.u1680832.nyat.app:30319/weichen/Agent-Squad/pulls/7 、Backend #50 https://git-home.u1680832.nyat.app:30319/weichen/Agent-System-Backend/pulls/50 、Dev #152 https://git-home.u1680832.nyat.app:30319/weichen/Agent-System-Dev/pulls/152 。指针:intent `3130190acb396589d6022c243bbe07ce7c31c881`,native `694b08cdbef5d52496f4425c9a22d1b77df14c23`,squad `8e987bf535efbbbf317147542e858217f2bb3504`,backend `898fdd137148836b2e52666a2b5e0d591ec308c3`。Dev 在 `978bf8b` 钉住这四条并加入指针检查、导入棘轮和三库测试。
|
||||
- go.work 未采用。实测工作区模块目录都落在 Dev 顶层 `deps/` 与 `modules/`,但最小版本选择把第三方抬高:`golang.org/x/crypto` v0.56.0→v0.57.0,`exp` `v0.0.0-20250305212735-054e65f0b394`→`v0.0.0-20251023183803-a4bb9ffd2546`,`net` v0.57.0→v0.59.0,`term` v0.45.0→v0.46.0,`text` v0.41.0→v0.42.0。库测试因此用 `GOWORK=off`。`development-guidelines` 嵌套指针仍是 `26b562d`,与 Dev 的 `ed2af3e` 不一致,`check-pins` 只告警。
|
||||
- 编号与回归测试:
|
||||
- I1 `TestRecognizeClassifierRejectsBadRefinement`、`TestRecognizeClassifierRebuildsTamperedHandler`
|
||||
- I2 `TestScopedSlotValidatorsDoNotInterfere`
|
||||
- I6 `TestRecognizeClassifierRefinedTopGetsSlots`
|
||||
- N1 `TestLoopBudgetToolCallCap`(含 `assertToolCallsPaired`)
|
||||
- N2 `TestParallelHostCallbacksAreSerial`、`TestHooksDoNotRunConcurrently`
|
||||
- N3 `TestStdioSlowCancelThenEcho`
|
||||
- N4 `TestPresetsAndClientForChatCompletions`
|
||||
- N13 `TestFetchResolveChangesToLoopbackRejected`
|
||||
- N14 `TestFetchHostCheckRedirectStillRejectsPrivate`
|
||||
- Q1 `TestStepApprovalApproveExecutes`、`TestStepApprovalSkipDoesNotCancel`
|
||||
- Q2 `TestApprovalSurvivesRestart`
|
||||
- Q3 `TestAtomicWriteLeavesNoTemp`、`TestAtomicWriteRenameFailureKeepsOriginal`
|
||||
- Q4 `TestInterruptedRunningStepStaysHeld`
|
||||
- Q5 `TestTwoEnginesOneRunIsBusy`
|
||||
- Q8/Q9 `TestWakeupDoesNotApprovePermission`(原有 `TestWakeupRunDone`、`TestWakeupGuardMaxFires` 仍通过)
|
||||
- Q14 `TestListenGuard`、`TestMissingTokenIsUnauthorized`
|
||||
- Q15 `TestPathTraversalRejected`
|
||||
- Q16 `TestOversizedBodyIs413`
|
||||
- 验证:
|
||||
- 启动 precheck(主检出,task-start 记录于 2026-10-03T00:27:10Z):verdict READY。head 与 origin/main 均为 `f4aa0348d7`。linked worktree 为 1(未合入的 `feature/agent-stack-blueprint`),未出现 `SHARED_WORKSPACE_BUSY` 或 `SYNC_REQUIRED`。
|
||||
- `make task-sync`:`Already up to date.` `[synced] sync_base=f4aa0348d7 tested_head=978bf8bdae checked_at=2026-10-03T02:10:29Z`。脚本按文件名把这一行写进了另一张任务卡,本提交已改回本卡。
|
||||
- `make test` 退出码 0(HEAD `314f798`,与 `978bf8b` 的代码相同):boundaries ok;pins ok(guidelines 三条 warn);intent 五包 ok;native 各包 ok(mcp 12.0s、tools 11.3s);squad 六包 ok;core ok;backend 各包 ok;frontend vitest 13 文件 68 项;ui tsc 与 vitest 11 文件 79 项;agent-command 两包 ok。
|
||||
- `make build` 退出码 0。版本串 `314f798+core=7c66075+backend=898fdd1+frontend=794c3e1+ui=b4a4fc1+agentcmd=cc1ad77+documents=acd6f01+native=694b08c+squad=8e987bf+intent=3130190`。
|
||||
- 负例:Backend 的 squad gitlink 临时改为 `5cbac00b994223b6aa76afd9bc70277b8b49e985` 后 `scripts/check-pins.sh` 退出码 1(`pin: modules/backend deps/agent-squad is 5cbac00b9942, Dev deps/agent-squad is 8e987bf535ef`)。已恢复到 `898fdd1`,再次运行 `pins ok`。该临时提交未推送。
|
||||
- 影响与剩余项:非 unix 平台没有 flock,只有进程内互斥(见 agent-squad PROJECT.md)。合入、发版、改写历史均未做。
|
||||
- 级联钉住与验收(2026-10-03,Dev `789a6f4`):
|
||||
- 指针:intent `7f7879b06b053f0a62746309b79e0e1b9a00f42d`,native `91c155618487e21edeb4f1d3cc27e985aae2b0d2`,squad `e928ea3c0fa649cbbbad22a93a1bc0a12dee5f7d`,backend `ef0a1bef0f7bee626e59f160be51fb0e5f6aa692`。
|
||||
- `make task-sync`:`Already up to date.` `[synced] sync_base=f4aa0348d7 tested_head=755474e6f5 checked_at=2026-10-03T10:22:12Z`。记录写在本卡。
|
||||
- `make test` 退出码 0:`boundaries ok`;`pins ok`(guidelines 三条 warn);intent、native、squad、core、backend、frontend(13 文件 68 项)、ui(tsc 与 11 文件 79 项)、agent-command 均通过。
|
||||
- `make build` 退出码 0。版本串 `789a6f4+core=7c66075+backend=ef0a1be+frontend=794c3e1+ui=b4a4fc1+agentcmd=cc1ad77+documents=acd6f01+native=91c1556+squad=e928ea3+intent=7f7879b`。
|
||||
- 各库在钉住后的头上另跑了 `scripts/submodule-consistency.sh`(intent、native、squad 均为 ok)以及 vet、test、race。Backend 跑了 `GOWORK=off go vet ./... && GOWORK=off go test -count=1 ./...`,退出码 0。
|
||||
- CI 首轮未绿。Intent 运行 661(头 `7f7879b`)在 30 秒内失败:克隆 `actions/checkout` 时 `dial tcp 20.205.243.166:443: i/o timeout`。按计划停下,没有改走宿主代理,也没有预热缓存。`SUBMODULE_TOKEN` 与必需检查都未配置。
|
||||
- 收尾加固(2026-10-03):
|
||||
- Squad `73b8d09545a8c479344aded2227de5fc520ef769`。并行组第二步 `TestParallelGroupSecondStepApprovalHolds`、`TestParallelGroupSecondStepPermissionHolds`;自由文本 `TestFreeTextKeepsChoiceHold`;失败后挂起仍在 `TestFailedDecisionRestoresPending`。`GOWORK=off go vet ./...`、`go test -count=1 ./squad/ ./cli/`、`go test -race -count=1 ./squad/` 均通过。
|
||||
- 同 tree 正例:Backend 所记 squad `8e987bf535efbbbf317147542e858217f2bb3504` 的 tree `0fe06ce3ceea5cfa32476e2f0eed7f86cebc44a0`,`commit-tree` 得本地 `6c0f1e8bf1be85f10163eb0c6eebb5a6aa8f8798` 并临时写入 Dev 索引。`check-pins` 输出 `ok modules/backend agent-squad (same tree)`,退出码 0。
|
||||
- 负例:空 tree 的本地提交 `8db069d7352d` 写入同一索引后,`check-pins` 退出码 1,`pin: modules/backend deps/agent-squad is 8e987bf535ef, Dev deps/agent-squad is 8db069d7352d`。索引已 `git reset` 恢复,再次 `pins ok`。两个临时对象都没有推送。
|
||||
- 棘轮:`scripts/lint-imports.go` 在空 `GOMODCACHE` 下的配对与有缓存的 `go list` 相同,14 对。`GOMODCACHE=$(mktemp -d) bash scripts/lint-boundaries.sh` 与默认缓存的输出都是 `boundaries ok`。
|
||||
| 同步前验收 | f4aa0348d7f60e4dd5b6b222205a2c561465db8e | 755474e6f5b4fb404c14d84437428d4886e5317f | 2026-10-03T10:22:12Z |
|
||||
|
||||
## 闭合记录(card-autoclose 回填)
|
||||
|
||||
- 依据:merge 7dd107bae40a203d684b0c9a3fd81ca316fd8c90(PR #unknown)已包含于 origin/main,分支成果已落盘;本段为合入后回填。
|
||||
- 合并主题:Merge pull request #152 from feature/agent-stack-r0-r1 into main
|
||||
- 归档:随闭合移入 .task/archive/;任务执行期的过程证据见原任务记录与 PR。
|
||||
@@ -1,34 +0,0 @@
|
||||
# feature/agent-stack-r2 任务卡
|
||||
|
||||
任务主记录:PR #154 https://git-home.u1680832.nyat.app:30319/weichen/Agent-System-Dev/pulls/154(merge 0a047db5c9);状态:已完成(回填);owner:weichen
|
||||
|
||||
## 基线与授权
|
||||
|
||||
- 权威仓:ssh://git@git-ssh.u1680832.nyat.app:31411/weichen/Agent-System-Dev.git;目标分支:main;R0(initial_base_sha)= 5cd138084ae52b22f02ae4d2e358f6147b1aed55
|
||||
- 工作区:/home/weichen/projects/Agent-System-Dev-wt-feature-agent-stack-r2(worktree);分支:feature/agent-stack-r2
|
||||
- 授权与交付终点:合入 Intent、Native、Squad、Backend、Dev 的 feature/agent-stack-r2,然后在本 worktree 运行 make task-finish。不改分支保护、不发版、不改写历史。N10、N20、N22、Q20、Q21、I3、I5 留到后续批次。
|
||||
|
||||
## 目标与非目标
|
||||
|
||||
- 目标:按审计 P1 关闭本批条目,每条至少一个回归测试。Intent I4 I7 I8 I9 I10 I11 I12;Native N5 N6 N7 N8 N9 N11 N12 N15 N16 N17 N18 N19 N21(I9 落在 intentgate);Squad Q6 Q10 Q11 Q12 Q13 Q17 Q18 Q19(I9 落在 squadintent)。钉住顺序 intent → native → squad → backend → Dev。
|
||||
- 非目标:不实现推迟项;不改模块路径、不删除嵌套 gitlink(那是 D1 / 发版任务);不重写已合入的 CI workflow。
|
||||
|
||||
## 同步记录
|
||||
|
||||
| 节点 | sync_base_sha | tested_head_sha | checked_at |
|
||||
|---|---|---|---|
|
||||
| 启动 | 5cd138084ae52b22f02ae4d2e358f6147b1aed55 | 5cd138084ae52b22f02ae4d2e358f6147b1aed55 | 2026-10-03T12:52:46Z |
|
||||
| 同步前验收 | 5cd138084ae52b22f02ae4d2e358f6147b1aed55 | 50312be0cbcc30964f0307f2e32f179b1eb7b60c | 2026-10-03T13:12:00Z |
|
||||
|
||||
## 结果与验证
|
||||
|
||||
- 结果:Intent 05e74d8,Native 855fe41,Squad 31ee395,Backend 6e30569。Dev 钉住这四个头。Native 补了 golang.org/x/text v0.29.0 的 go.sum。
|
||||
- 验证:2026-10-03,worktree 8c0dc8d。Intent 与 Squad 变更包 `GOWORK=off go test -count=1 -race` 通过。Native 在 855fe41 上 `go vet ./...` 与 `go test -count=1 ./runtime/... ./adapters/... ./exec/...` 通过。Dev `make test` 退出码 0(boundaries、pins、libs、core、backend、frontend 13 文件 68 测试、ui 11 文件 79 测试、agent-command)。`make build` 产出 `bin/agent-system`,版本串含 native=855fe41 squad=31ee395 intent=05e74d8 backend=6e30569。
|
||||
- 影响与剩余项:推迟项仍未做。D1 在本任务 task-finish 之后另开。PR:Intent #4、Native #9、Squad #8、Backend #51、Dev #154。
|
||||
| 同步前验收 | 5cd138084ae52b22f02ae4d2e358f6147b1aed55 | 309a47eee1c8d05fe29f5512ff23dee984e6d8fe | 2026-10-03T13:14:28Z |
|
||||
|
||||
## 闭合记录(card-autoclose 回填)
|
||||
|
||||
- 依据:merge 0a047db5c9c852539c6a839cf85589729f246019(PR #154)已包含于 origin/main,分支成果已落盘;本段为合入后回填。
|
||||
- 合并主题:Pin the R2 library and backend heads
|
||||
- 归档:随闭合移入 .task/archive/;任务执行期的过程证据见原任务记录与 PR。
|
||||
File diff suppressed because one or more lines are too long
@@ -1,42 +0,0 @@
|
||||
# feature/architecture-baseline 任务卡
|
||||
|
||||
任务主记录:PR #167 https://git-home.u1680832.nyat.app:30319/weichen/Agent-System-Dev/pulls/167(merge e294729a44);状态:已完成(回填);owner:weichen
|
||||
|
||||
## 基线与授权
|
||||
|
||||
- 权威仓:ssh://git@git-ssh.u1680832.nyat.app:31411/weichen/Agent-System-Dev.git;目标分支:main;R0(initial_base_sha)= 5266d81c0d18500cc77d94b346d6ec1b424df260
|
||||
- 工作区:/home/weichen/projects/Agent-System-Dev-wt-feature-architecture-baseline(worktree);分支:feature/architecture-baseline
|
||||
- 授权与交付终点:在 Dev 增加分层棘轮,在 ui 增加确认等待、差异和任务色令牌,在 frontend 与 ui 增加 knip 死导出棘轮,并改 DESIGN.md 与两份 AGENTS.md。允许 frontend、ui、Dev 各建 `feature/architecture-baseline`、推送、建 PR、合入。终点是这些 PR 已合入,然后在本 worktree 运行 `make task-finish`。未授权:改三个库、改 Core、发版、改写历史、变更分支保护。
|
||||
- 启动自检(2026-10-03T15:57Z):`make precheck` verdict READY。head=5266d81c0d,origin/main 同步,树干净,linked worktrees=0。必读 core/baseline.md、workflows/delivery.md §1、DESIGN.md 已读。
|
||||
|
||||
## 目标与非目标
|
||||
|
||||
- 目标:backend internal 与前端目录的依赖边只许减少或保持;新增边失败,消失的边告警。frontend 与 ui 的未使用导出数量不得增加。等你确认、差异增删、空闲与定时任务各有令牌。提示气泡、快捷键和文本膨胀写进 DESIGN.md。异步状态只有一个所有者。
|
||||
- 受影响:Dev 的 policy、scripts、Makefile、DESIGN.md、AGENTS.md;ui 的 tokens.css;frontend 的 AGENTS.md。
|
||||
- 非目标:不改对话运行态、权限、上下文压缩;不改三个库。
|
||||
|
||||
## 同步记录
|
||||
|
||||
| 节点 | sync_base_sha | tested_head_sha | checked_at |
|
||||
|---|---|---|---|
|
||||
| 启动 | 5266d81c0d18500cc77d94b346d6ec1b424df260 | 5266d81c0d18500cc77d94b346d6ec1b424df260 | 2026-10-03T15:57:52Z |
|
||||
| 同步前验收 | 5266d81c0d18500cc77d94b346d6ec1b424df260 | 937152a563cc0513d68f6d6a27da3ce89d786c01 | 2026-10-03T16:03:04Z |
|
||||
|
||||
## 结果与验证
|
||||
|
||||
- 结果:ui `9c0345750600bd14f1b3144bb37819df97830fc1`。frontend `d5f59f1811268d099a6c354a29542809e640d4fe`。Dev 钉住这两枚指针,并加入分层棘轮。
|
||||
- 验证:
|
||||
- `make precheck`:verdict READY。`[repo] branch=main head=5266d81c0d`,`[remote] origin/main=5266d81c0d ahead=0 behind=0`,`[tree] clean`,`[worktrees] linked=0`,`[R0] 5266d81c0d18500cc77d94b346d6ec1b424df260`。
|
||||
- `make task-sync`(验收):`Already up to date.` `[synced] sync_base=5266d81c0d tested_head=937152a563 checked_at=2026-10-03T16:03:05Z`。
|
||||
- `bash scripts/lint-boundaries.sh`:architecture ok(67 edges),注入边失败,boundaries ok。
|
||||
- ui 与 frontend 的 design-guard 通过。knip 未使用导出 frontend 43、ui 55,不超过基线。
|
||||
- `make test` 退出码 0。`make build` 退出码 0(ui=9c03457 frontend=d5f59f1)。
|
||||
- 影响与剩余项:ui 指针从当时 Dev 钉住的 b4a4fc1 进到 ui 的 origin/main 再加本批令牌。不改三个库。合入后在本 worktree 运行 `make task-finish`。
|
||||
| 同步前验收 | 5266d81c0d18500cc77d94b346d6ec1b424df260 | e6503312eeb4c72a1e7b65ee6d7243dd12c1f4de | 2026-10-03T16:04:11Z |
|
||||
| 同步前验收 | 5266d81c0d18500cc77d94b346d6ec1b424df260 | 249ecb67eb02b996196577449847ff10724ace38 | 2026-10-03T16:04:26Z |
|
||||
|
||||
## 闭合记录(card-autoclose 回填)
|
||||
|
||||
- 依据:merge e294729a44e11b15ab7ba2c70b04eafa235d5f95(PR #167)已包含于 origin/main,分支成果已落盘;本段为合入后回填。
|
||||
- 合并主题:Merge pull request 'Add an architecture edge ratchet and waiting-state tokens' (#167) from feature/architecture-baseline into main
|
||||
- 归档:随闭合移入 .task/archive/;任务执行期的过程证据见原任务记录与 PR。
|
||||
File diff suppressed because one or more lines are too long
@@ -1,39 +0,0 @@
|
||||
# feature/artifact-unify-r1 任务卡
|
||||
|
||||
任务主记录:PR #103 https://git-home.u1680832.nyat.app:30319/weichen/Agent-System-Dev/pulls/103(merge 675e6f8483);状态:已完成(回填);owner:weichen
|
||||
|
||||
## 基线与授权
|
||||
|
||||
- 权威仓:ssh://git@git-ssh.u1680832.nyat.app:31411/weichen/Agent-System-Dev.git;目标分支:main;R0(initial_base_sha)= 0be23f9a4d002a977de2998f687bc8555c3edb63
|
||||
- 工作区:/home/weichen/projects/Agent-System-Dev-wt-feature-artifact-unify-r1(worktree);分支:feature/artifact-unify-r1
|
||||
- 授权与交付终点:提案 §3 第二期 CF-A(artifact 统一,D46/D47);终点 = backend + documents 模块 PR 合入 + Dev gitlink PR 合入 + worktree 回收。
|
||||
|
||||
## 目标与非目标
|
||||
|
||||
目标(提案 D46/D47):
|
||||
1. backend:ctxasm ArtifactResolver 回填 artifact_ref 正文(UTF-8 文本、与卡同 12000 字上限、Truncations/artifact(n) 可观测、二进制留占位);runCtx.Artifact;llm.go 截断工具结果自动产门面卡(摘要 kv + doc-ref,显式卡避让);mock #doc 门面演示。
|
||||
2. documents:usage.md 4.5 工件节增门面卡与回填说明。
|
||||
|
||||
非目标:前端零改动(artifact 芯片已有查看器/预览/下载动作,docBridge 已按工件 ID 解析 doc-ref——门面卡开箱即用,盘点结论记录于此);跨会话(CF3 另立卡)。
|
||||
|
||||
## 同步记录
|
||||
|
||||
| 节点 | sync_base_sha | tested_head_sha | checked_at |
|
||||
|---|---|---|---|
|
||||
| 启动 | 0be23f9a4d002a977de2998f687bc8555c3edb63 | 0be23f9a4d002a977de2998f687bc8555c3edb63 | 2026-09-30T18:26Z |
|
||||
| 验收 | 0be23f9a4d002a977de2998f687bc8555c3edb63 | b10b83456c(组合 tip:backend 61731cb / documents 96c8404) | 2026-09-30T18:41:16Z |
|
||||
|
||||
## 结果与验证
|
||||
|
||||
- 结果:backend 61731cb(ctxasm ArtifactResolver + renderArtifactRef、runCtx.Artifact、llm.go 门面卡 + explicitCard 避让、artifactFacadeCard helper、mock #doc 门面、新增单测 4 + e2e 1);documents 96c8404(usage.md 4.5)。
|
||||
- 验证:
|
||||
- backend `go test ./...` 全绿(18 包 ok):TestAssembleInputArtifactBackfill(回填/截断留痕/二进制占位/无 resolver 占位)、TestLLMRunnerArtifactFacadeCard(截断产门面卡:result/done、kv+doc-ref、消息双部件;未截断不产卡)、TestLLMRunnerArtifactFacadeSuppressed(显式 submit_card 时避让)、e2e TestArtifactFacadeCard(#doc → 门面卡入收件箱 + doc-ref + 引用部件 + 锚点回填)。
|
||||
- Dev 组合:`make test` 退出码 0;task-sync sync_base=0be23f9a tested_head=b10b834(2026-09-30T18:41:16Z)。
|
||||
- 影响与剩余项:ctxasm AssembleInput 签名追加 resolveArtifact 参数(唯一生产调用点 llm.go 已同步;测试桩已更新);下一轮模型对工具大结果不再失忆。剩余:CF3 跨会话收件箱(提案第三期,另立卡)。
|
||||
| 同步前验收 | 0be23f9a4d002a977de2998f687bc8555c3edb63 | b8a06cd0e1d35696a9cb8d3c9399f09f51118ee4 | 2026-09-30T18:42:55Z |
|
||||
|
||||
## 闭合记录(card-autoclose 回填)
|
||||
|
||||
- 依据:merge 675e6f8483e11d67a49f3c68b8b98a44cb42b7e1(PR #103)已包含于 origin/main,分支成果已落盘;本段为合入后回填。
|
||||
- 合并主题:Merge pull request 'Land artifact unification (CF-A: backfill symmetry + facade cards)' (#103) from feature/artifact-unify-r1 into main
|
||||
- 归档:随闭合移入 .task/archive/;任务执行期的过程证据见原任务记录与 PR。
|
||||
File diff suppressed because one or more lines are too long
@@ -1,34 +0,0 @@
|
||||
# feature/base-extension-roadmap 任务卡
|
||||
|
||||
任务主记录:PR #132 https://git-home.u1680832.nyat.app:30319/weichen/Agent-System-Dev/pulls/132(merge db9c469047) ;状态:已完成(回填);owner:weichen
|
||||
|
||||
## 基线与授权
|
||||
|
||||
- 权威仓:ssh://git@git-ssh.u1680832.nyat.app:31411/weichen/Agent-System-Dev.git;目标分支:main;R0(initial_base_sha)= f8fefa0f888e8f5fd5207c9e97099e59935ff69b
|
||||
- 工作区:/home/weichen/projects/Agent-System-Dev-wt-feature-base-extension-roadmap(worktree);分支:feature/base-extension-roadmap
|
||||
- 授权与交付终点:在本 worktree 落地路线图提案与基座实现,并在各子仓与父仓本地提交。不推送、不打版本 tag、不新建下游远程仓。
|
||||
|
||||
## 目标与非目标
|
||||
|
||||
- 目标:公开扩展面(`pkg/extension`)、插件契约 v2 四种形态、生命周期治理、质量回路与工程基座接线;下游薄切片只 import 公开 SDK。
|
||||
- 非目标:打 `v0.2.0-experimental`、发布 npm、改 Go module path、把目标系统(两树一网)做进基座、容器编排、旧资产导入。
|
||||
|
||||
## 同步记录
|
||||
|
||||
| 节点 | sync_base_sha | tested_head_sha | checked_at |
|
||||
|---|---|---|---|
|
||||
| 启动 | f8fefa0f888e8f5fd5207c9e97099e59935ff69b | f8fefa0f888e8f5fd5207c9e97099e59935ff69b | 2026-10-01T10:10:35Z |
|
||||
| 同步前验收 | 26dfea7ed62575097f14fedf1b7713a77dedb66f | 6d496139b45bbe0d32818e56ed6c5fbba649d777 | 2026-10-01T10:39:24Z |
|
||||
|
||||
## 结果与验证
|
||||
|
||||
- 结果:documents 三份提案与开发指南;core manifest v2;backend 声明/sidecar/进程内/Host API/迁移 v13/质量回路/审计与命令对拍;ui SDK 与 frontend ESM 加载;examples 与 `make plugin-new`、`make test-boundaries`。
|
||||
- 验证:`cd modules/core && go test ./...`;`cd modules/backend && go test ./...`;`bash scripts/lint-boundaries.sh`;`cd examples/downstream-rdm && go test .`;UI `tsc`+vitest 71;frontend vitest。
|
||||
- 影响与剩余项:apiVersion `2.0-experimental`。版本 tag 与 npm 发布命令留在兼容提案,由用户确认后执行。下游远程仓由用户另建。Playwright 对拍文件在 `modules/frontend/e2e/`,未安装 `@playwright/test`,不进 vitest。合入顺序:Core #14、Documents #31、UI #25、Frontend #31,然后 Backend #41,最后 Dev #132。子仓不要 squash,否则 Backend / Dev 的 gitlink 会指向不存在的提交。
|
||||
|
||||
## 闭合记录(card-autoclose 回填)
|
||||
|
||||
- 依据:merge db9c469047(PR #132)已包含于 origin/main,分支成果已落盘;本段为合入后回填。
|
||||
- 合并主题:Pin the extension roadmap and downstream spike
|
||||
- 归档:随闭合移入 .task/archive/;任务执行期的过程证据见原任务记录与 PR。
|
||||
|
||||
File diff suppressed because one or more lines are too long
@@ -1,37 +0,0 @@
|
||||
# feature/binary-doc-index 任务卡
|
||||
|
||||
任务主记录:Backend https://git-home.u1680832.nyat.app:30319/weichen/Agent-System-Backend/pulls/34 ;Dev https://git-home.u1680832.nyat.app:30319/weichen/Agent-System-Dev/pulls/114 ;状态:已完成(回填);owner:weichen
|
||||
|
||||
## 基线与授权
|
||||
|
||||
- 权威仓:ssh://git@git-ssh.u1680832.nyat.app:31411/weichen/Agent-System-Dev.git;目标分支:main;R0(initial_base_sha)= 4c4071e5d8e256dd8f82ba9c74efa1effd1e9df3
|
||||
- 工作区:/home/weichen/projects/Agent-System-Dev-wt-feature-binary-doc-index(worktree);分支:feature/binary-doc-index
|
||||
- 授权与交付终点:重放 #99 里仍然有效的两项(写侧护栏、二进制工件抽文本再索引)。不恢复 format=docx。合入顺序在 run_shell/run_python(Dev #113)之后。合入由所有者执行。
|
||||
|
||||
## 目标与非目标
|
||||
|
||||
- 目标:write_artifact 与 fs_write_file 拒绝 .doc/.docx/.xls/.xlsx/.xlsm/.ppt/.pptx/.pdf,文案指向 run_python + register_artifact。二进制 mime 的工件经 ingest.Parse 抽出文本后才进索引。
|
||||
- 非目标:不带回 MarkdownToDocx 参数;不改上传路径的解析。
|
||||
|
||||
## 同步记录
|
||||
|
||||
| 节点 | sync_base_sha | tested_head_sha | checked_at |
|
||||
|---|---|---|---|
|
||||
| 启动 | 4c4071e5d8e256dd8f82ba9c74efa1effd1e9df3 | 4c4071e5d8e256dd8f82ba9c74efa1effd1e9df3 | 2026-10-01T04:10:44Z |
|
||||
|
||||
## 结果与验证
|
||||
|
||||
- 结果:Backend feature/binary-doc-index @ 3e5699c。Dev #99 与 Backend #27 已关闭并注明被 agent-native 路线取代。
|
||||
- 验证:go test ./... 19 包 ok(含 Office 扩展拒绝、docgen docx 可检索、坏 ZIP 不入库)。Dev `make test` 通过(2026-10-01,sync_base=4c4071e)。
|
||||
- 影响与剩余项:请在 Dev #113 合入后再合本 PR。
|
||||
| 同步前验收 | 4c4071e5d8e256dd8f82ba9c74efa1effd1e9df3 | 90a3a1d722a69d3637f45f1a8c387077aff8d9cf | 2026-10-01T04:12:41Z |
|
||||
| 同步前验收 | 4968f97b8531b90caa64534eae2a3bc8ec75bb5b | 46f89cf921fea1961b1176d1e3f288f7edcc0690 | 2026-10-01T05:25:41Z |
|
||||
| 同步前验收 | 22ecacf3f7d4ba3cb38f449056e74957fb75c016 | e7140825d8985535a37a30381e28bb0df85c6ce3 | 2026-10-01T05:27:47Z |
|
||||
| 同步前验收 | 8aef26aa4e2f781c4709d545effe014d7cb8e1c5 | 427263cee5f744b1cf88bc795b6c3165925cb0e7 | 2026-10-01T05:29:28Z |
|
||||
| 同步前验收 | c3dd50c39e0393b6d11e63c46a2a33c3585d7816 | 3584792eb1a21b2573bd30ad673e0dac34fab70c | 2026-10-01T05:31:23Z |
|
||||
|
||||
## 闭合记录(card-autoclose 回填)
|
||||
|
||||
- 依据:merge 22ecacf3f7d4ba3cb38f449056e74957fb75c016(PR #114)已包含于 origin/main,分支成果已落盘;本段为合入后回填。
|
||||
- 合并主题:Merge pull request 'Point backend at binary write guard and text indexing' (#114) from feature/binary-doc-index into main
|
||||
- 归档:随闭合移入 .task/archive/;任务执行期的过程证据见原任务记录与 PR。
|
||||
@@ -1,41 +0,0 @@
|
||||
# feature/card-stream-r1 任务卡
|
||||
|
||||
任务主记录:PR #100 https://git-home.u1680832.nyat.app:30319/weichen/Agent-System-Dev/pulls/100(merge a8faa967cd);状态:已完成(回填);owner:weichen
|
||||
|
||||
## 基线与授权
|
||||
|
||||
- 权威仓:ssh://git@git-ssh.u1680832.nyat.app:31411/weichen/Agent-System-Dev.git;目标分支:main;R0(initial_base_sha)= f65d89e59b6974c7a5db63be0677d192bfaa7e9c
|
||||
- 工作区:/home/weichen/projects/Agent-System-Dev-wt-feature-card-stream-r1(worktree);分支:feature/card-stream-r1
|
||||
- 授权与交付终点:用户批准 D44–D52 提案并指示「按方案开始实施」;本卡为提案 §3 第一期 CF-S(卡片内容流式),终点 = backend + documents 模块 PR 合入 + Dev gitlink PR 合入 + worktree 回收。
|
||||
|
||||
## 目标与非目标
|
||||
|
||||
目标(提案 D44/D45):
|
||||
1. backend:内置流式三段式工具 card_begin/card_append/card_commit(ui.cardflow 门控声明、幻觉拒绝);cardsvc.Append(逐次持久化 + card.updated 250ms 节流);runmgr Begin/Append/CommitStreamCard + finishRun 兜底(未收尾流式卡按 run 结果置 done/failed,tone=warn「未正常收尾」);mock `#cardstream` 演示;style-cardflow v2(长正文优先流式)。
|
||||
2. documents:usage.md 卡流条目更新(流式流程 + 兜底语义)。
|
||||
|
||||
非目标:frontend/ui 流式视觉(shimmer)可选项本卡不做;CF-A/CF3 另立卡。
|
||||
|
||||
## 同步记录
|
||||
|
||||
| 节点 | sync_base_sha | tested_head_sha | checked_at |
|
||||
|---|---|---|---|
|
||||
| 启动 | f65d89e59b6974c7a5db63be0677d192bfaa7e9c | f65d89e59b6974c7a5db63be0677d192bfaa7e9c | 2026-09-30T18:02Z |
|
||||
| 验收 | f65d89e59b6974c7a5db63be0677d192bfaa7e9c | e1f996815a(组合 tip:backend 24a2873 / documents 3d2da4e) | 2026-09-30T18:20:27Z |
|
||||
|
||||
## 结果与验证
|
||||
|
||||
- 结果:backend 24a2873(cardsvc Append 节流、runmgr 三方法 + 兜底、runner 接口三方法、llm.go 三工具声明与编排、mock #cardstream、style-cardflow v2、新增单测 3 + e2e 1);documents 3d2da4e(usage.md 流式条目)。
|
||||
- 验证:
|
||||
- backend `go test ./...` 全绿(18 包 ok):新增 TestLLMRunnerCardStreamTools(begin→append×2→commit → done 卡 + 正文合并 + cardId 部件 + commit 后拒绝)、TestLLMRunnerCardStreamGated(关闭不声明、幻觉不产卡)、TestAppendStreamThrottleAndMerge(窗口内 1 次发布、跨窗口+终态 3 次、正文逐段合并)、e2e TestMockCardflowStreamLoop(#cardstream → 收件箱 done 卡 + 三段正文 + 引用部件 + 锚点回填)。
|
||||
- Dev 组合:`make test` 退出码 0(core/backend 全 ok、frontend/ui vitest 全绿、agent-command ok);task-sync sync_base=f65d89e tested_head=e1f9968(2026-09-30T18:20:27Z)。
|
||||
- 影响与剩余项:
|
||||
- submit_card 路径与线协议不变;card.updated 仍整卡投影(节流=省略中间投影)。
|
||||
- 剩余(可选项):frontend/ui 流式中视觉(shimmer);CF-A、CF3 按提案顺序另立卡。
|
||||
| 同步前验收 | f65d89e59b6974c7a5db63be0677d192bfaa7e9c | f96c55df238f5ef19599bcbb282c7b22f9b29423 | 2026-09-30T18:22:05Z |
|
||||
|
||||
## 闭合记录(card-autoclose 回填)
|
||||
|
||||
- 依据:merge a8faa967cdc0fe0d20a3cb20ed17f74518b6cff7(PR #100)已包含于 origin/main,分支成果已落盘;本段为合入后回填。
|
||||
- 合并主题:Merge pull request 'Land card streaming (CF-S: card_begin/card_append/card_commit)' (#100) from feature/card-stream-r1 into main
|
||||
- 归档:随闭合移入 .task/archive/;任务执行期的过程证据见原任务记录与 PR。
|
||||
@@ -1,33 +0,0 @@
|
||||
# feature/chat-timeline-preview 任务卡
|
||||
|
||||
任务主记录:PR #122 https://git-home.u1680832.nyat.app:30319/weichen/Agent-System-Dev/pulls/122(merge 650e79e32c);状态:已完成(回填);owner:weichen
|
||||
|
||||
## 基线与授权
|
||||
|
||||
- 权威仓:ssh://git@git-ssh.u1680832.nyat.app:31411/weichen/Agent-System-Dev.git;目标分支:main;R0(initial_base_sha)= 4adc4cc458f15546e5605dc55843acc26b310c41
|
||||
- 工作区:/home/weichen/projects/Agent-System-Dev-wt-feature-chat-timeline-preview(worktree);分支:feature/chat-timeline-preview
|
||||
- 授权与交付终点:用户已批准方案并要求按方案实施到提 PR。允许改 Core / Backend / UI / Frontend 与 Dev 仓 DESIGN.md、推进 gitlink、推送 feature/chat-timeline-preview 并建 PR。合入、部署生产、改写历史不在本次授权内。
|
||||
|
||||
## 目标与非目标
|
||||
|
||||
- 目标:助手消息按工作时间线呈现(运行中展开,终轮后折成「已工作 X」);工件以可点击卡片出现;点击在对话右侧多标签预览区打开(docx 按页面版式);后端拦截没调用工具却声称已生成文件的终轮回复。
|
||||
- 非目标:项目文件目录树;服务端 Office 转 PDF;改右栏收件箱/文件列表的业务。
|
||||
|
||||
## 同步记录
|
||||
|
||||
| 节点 | sync_base_sha | tested_head_sha | checked_at |
|
||||
|---|---|---|---|
|
||||
| 启动 | 4adc4cc458f15546e5605dc55843acc26b310c41 | 4adc4cc458f15546e5605dc55843acc26b310c41 | 2026-10-01T05:58:53Z |
|
||||
|
||||
## 结果与验证
|
||||
|
||||
- 结果:Core / Backend / UI / Frontend 与 Dev 的 `feature/chat-timeline-preview` 已推送。PR:Core #13、UI #24、Backend #37、Frontend #30、Dev #122。合入顺序为 Core、UI,然后 Backend、Frontend,最后 Dev。
|
||||
- 验证:同步 `origin/main` 后 `make test` 通过。开发环境已部署 `dev@5192a53`(core d437530、backend ca8aa5d、frontend 0ed8ad3、ui 8bfe8a8)。浏览器实测:终轮折成「已工作 X」并出现文件卡片;点击打开可关闭标签,换会话后按会话恢复,关掉最后一张标签后右栏回来;真实 docx 用分页渲染出标题「验收」;谎称 `art_4f9d2c1a8b3e` 的终轮被标成过程,最终回复改为没有生成文件。
|
||||
- 影响与剩余项:合入与生产部署不在本次授权内。开发库里多了一轮验收会话和 `验收.docx`。
|
||||
| 同步前验收 | 47ebd71667859729a6cbe826fcddfe3da4bb5610 | 35757021638108eda761afa7864777bca9bfcd9e | 2026-10-01T06:18:40Z |
|
||||
|
||||
## 闭合记录(card-autoclose 回填)
|
||||
|
||||
- 依据:merge 650e79e32c024bddff041949f41292f0a806de81(PR #122)已包含于 origin/main,分支成果已落盘;本段为合入后回填。
|
||||
- 合并主题:Merge pull request 'Pin the chat timeline and document the preview pane' (#122) from feature/chat-timeline-preview into main
|
||||
- 归档:随闭合移入 .task/archive/;任务执行期的过程证据见原任务记录与 PR。
|
||||
@@ -1,35 +0,0 @@
|
||||
# feature/code-orchestration 任务卡
|
||||
|
||||
任务主记录:PR #177 https://git-home.u1680832.nyat.app:30319/weichen/Agent-System-Dev/pulls/177(merge 4a83fecf46);状态:已完成(回填);owner:weichen
|
||||
|
||||
## 基线与授权
|
||||
|
||||
- 权威仓:ssh://git@git-ssh.u1680832.nyat.app:31411/weichen/Agent-System-Dev.git;目标分支:main;R0(initial_base_sha)= 37a91142f2d4a91dc3e0a83296c05ee3aa0fa92e
|
||||
- 工作区:/home/weichen/projects/Agent-System-Dev-wt-feature-code-orchestration(worktree);分支:feature/code-orchestration
|
||||
- 授权与交付终点:实现批次 8(代码编排与 MCP)。允许改 agent-native、agent-squad(透传开关)、backend 与 Dev 指针;经 Gitea PR 合入 main 后回收 worktree。不引入 pi-durable。不把代码编排默认打开。
|
||||
|
||||
## 目标与非目标
|
||||
|
||||
- 目标:`run_tool_script` 的 Python 宿主下沉到 `runtime/codeorch`。限额为 50 次调用、给脚本的单次结果 1 MiB、给模型的输出 16k 字符(全文落文件)、超时缺省 120 秒且最长 600 秒。禁止再调用 shell、python、命令、自身、派发和工作流工具。出错时报告已经执行的调用。开关 `runtime.codeOrchestration` 默认关。工作流 script 步骤改用同一宿主,原有确认和超时上限不变。工具可声明直接或延迟暴露;延迟工具不进清单,经 `tool_search` 与固定 schema 的 `call_tool` 调用。MCP 后台连接,stdio 维持单读循环,失败重连一次,HTTP 关闭时终止会话,`input_required` 交给 AskUser。项目配置可覆盖启用状态和暴露级别。
|
||||
- 非目标:MCP OAuth、进程级钩子、绕过确认的模式、把代码编排默认打开。
|
||||
|
||||
## 同步记录
|
||||
|
||||
| 节点 | sync_base_sha | tested_head_sha | checked_at |
|
||||
|---|---|---|---|
|
||||
| 启动 | 37a91142f2d4a91dc3e0a83296c05ee3aa0fa92e | 37a91142f2d4a91dc3e0a83296c05ee3aa0fa92e | 2026-10-03T17:46:51Z |
|
||||
| 同步前验收 | 37a91142f2d4a91dc3e0a83296c05ee3aa0fa92e | 14ddc9e342d8f136ec769840b7daa998a1caf8c5 | 2026-10-03T18:06:06Z |
|
||||
| 同步前验收 | 37a91142f2d4a91dc3e0a83296c05ee3aa0fa92e | e352a807e5e8b1505599bcb51a69073f53eed1a8 | 2026-10-03T18:06:07Z |
|
||||
| 同步前验收 | 37a91142f2d4a91dc3e0a83296c05ee3aa0fa92e | bdb9452e41b737fa483af66d14569fd959011f24 | 2026-10-03T18:06:08Z |
|
||||
|
||||
## 结果与验证
|
||||
|
||||
- 结果:native e4020d2,squad dcd523e,backend cd57276。
|
||||
- 验证:native 与 backend 相关包测试通过。`make test` 与 `make build` 通过(2026-10-03)。
|
||||
- 影响与剩余项:`runtime.codeOrchestration` 默认关。延迟工具不进清单。MCP 未连上时后台连接,已连上则当场注册。
|
||||
|
||||
## 闭合记录(card-autoclose 回填)
|
||||
|
||||
- 依据:merge 4a83fecf4699d11ba1ef4eb3163b362346958442(PR #177)已包含于 origin/main,分支成果已落盘;本段为合入后回填。
|
||||
- 合并主题:Merge pull request 'Pin the script host, deferred tools, and background MCP connect' (#177) from feature/code-orchestration into main
|
||||
- 归档:随闭合移入 .task/archive/;任务执行期的过程证据见原任务记录与 PR。
|
||||
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@@ -1,35 +0,0 @@
|
||||
# feature/context-engineering 任务卡
|
||||
|
||||
任务主记录:PR #169 https://git-home.u1680832.nyat.app:30319/weichen/Agent-System-Dev/pulls/169(merge 6b9613603f);状态:已完成(回填);owner:weichen
|
||||
|
||||
## 基线与授权
|
||||
|
||||
- 权威仓:ssh://git@git-ssh.u1680832.nyat.app:31411/weichen/Agent-System-Dev.git;目标分支:main;R0(initial_base_sha)= 02b5cb82866daf6ec489d87bf8717cab584ae99f
|
||||
- 工作区:/home/weichen/projects/Agent-System-Dev-wt-feature-context-engineering(worktree);分支:feature/context-engineering
|
||||
- 授权与交付终点:改 agent-native 与 backend,钉 squad 与 Dev 的 gitlink,经 PR 合入 main 后在本 worktree 运行 task-finish。未授权:core 契约、frontend、发版、改写历史、分支保护、把 pi-durable 或 Chord 引入为依赖。
|
||||
|
||||
## 目标与非目标
|
||||
|
||||
- 目标:运行内清理旧工具结果(保留最近 5 条);压缩按工具组裁剪、冲突重试、连续 3 次失败熔断;改写已存在文件前必须本轮读过且 mtime 与大小未变;提醒并入最后一条工具结果或用户消息;子代理回传默认 32000 字,超出写工件;工具选择支持 +name/-name;RPC 回执 started/queued/handled;后端按字符截断。
|
||||
- 非目标:权限模式、文件回滚、代码编排、产品壳运行态、流式回归修复。
|
||||
|
||||
## 同步记录
|
||||
|
||||
| 节点 | sync_base_sha | tested_head_sha | checked_at |
|
||||
|---|---|---|---|
|
||||
| 启动 | 02b5cb82866daf6ec489d87bf8717cab584ae99f | 02b5cb82866daf6ec489d87bf8717cab584ae99f | 2026-10-03T16:06:10Z |
|
||||
| 同步前验收 | 02b5cb82866daf6ec489d87bf8717cab584ae99f | b6dba58b4dc2eed8e0dfcd90ca905d7bc58ce5a5 | 2026-10-03T16:24:22Z |
|
||||
| 请求审核 | 02b5cb82866daf6ec489d87bf8717cab584ae99f | 656016a78350e86de0a7ac00b2b1c973aac4ac88 | 2026-10-03T16:25:02Z |
|
||||
|
||||
## 结果与验证
|
||||
|
||||
- 结果:agent-native 6fd1d44,agent-squad 4d53450,backend b2dc9a7。旧工具结果清理保留最近 5 条;压缩冲突会重试,连续 3 次失败熔断;提醒并入最后一条工具结果;已存在文件未读或读后变化时拒绝改写;子代理回传超过 32000 字写工件;RPC 回执 started/queued/handled;截断按字符。
|
||||
- 验证:native 相关包测试通过;backend internal/runmgr、internal/tools、internal/runtime 通过;Dev `make test` 与 `make build` 通过(版本串含 native=6fd1d44、squad=4d53450、backend=b2dc9a7)。
|
||||
- 影响与剩余项:默认窗口 32000 字符,工具选择为空时行为不变。权限、回滚、代码编排不在本批。
|
||||
| 同步前验收 | 02b5cb82866daf6ec489d87bf8717cab584ae99f | 8a04b019d0fd4738dec894d6204c9263ad76b74e | 2026-10-03T16:25:28Z |
|
||||
|
||||
## 闭合记录(card-autoclose 回填)
|
||||
|
||||
- 依据:merge 6b9613603f22275a20671b1c55e72fafdd08b88f(PR #169)已包含于 origin/main,分支成果已落盘;本段为合入后回填。
|
||||
- 合并主题:Merge pull request 'Pin context engineering across native, squad, and backend' (#169) from feature/context-engineering into main
|
||||
- 归档:随闭合移入 .task/archive/;任务执行期的过程证据见原任务记录与 PR。
|
||||
@@ -1,33 +0,0 @@
|
||||
# feature/contrast-typography 任务卡
|
||||
|
||||
任务主记录:PR #198 https://git-home.u1680832.nyat.app:30319/weichen/Agent-System-Dev/pulls/198(merge cf998fe89b);状态:已完成(回填);owner:weichen
|
||||
|
||||
## 基线与授权
|
||||
|
||||
- 权威仓:ssh://git@git-ssh.u1680832.nyat.app:31411/weichen/Agent-System-Dev.git;目标分支:main;R0(initial_base_sha)= 34e82d53c1716f0075d510a5f7b6d72dd3fc9912
|
||||
- 工作区:/home/weichen/projects/Agent-System-Dev-wt-feature-contrast-typography(worktree);分支:feature/contrast-typography
|
||||
- 授权与交付终点:实现对比度与字号治理(令牌、contrast-guard、DESIGN.md、消费端迁移、本机界面字号)。不改 Core 契约,不改后端 settings schema,不做 px→rem / prefers-contrast / 聚焦环加强。交付为 UI、Frontend、Dev 各一个 PR。
|
||||
|
||||
## 目标与非目标
|
||||
|
||||
- 目标:三套主题的正文与文字档对比度 ≥ 4.5:1,装饰 faint 与图形语义色 ≥ 3:1;墨绿侧栏强调色与「新建任务」按钮可见;表头与决策性文字不再使用 faint + 10px;设置中心可调界面字号(13/14/16/18,仅本机)。
|
||||
- 非目标:账号级字号同步、rem 标尺、高对比媒体查询、聚焦环重做。
|
||||
|
||||
## 同步记录
|
||||
|
||||
| 节点 | sync_base_sha | tested_head_sha | checked_at |
|
||||
|---|---|---|---|
|
||||
| 启动 | 34e82d53c1716f0075d510a5f7b6d72dd3fc9912 | 34e82d53c1716f0075d510a5f7b6d72dd3fc9912 | 2026-10-05T04:25:22Z |
|
||||
|
||||
## 结果与验证
|
||||
|
||||
- 结果:三套主题的正文与文字档达到 4.5:1,装饰 faint 与图形语义色达到 3:1。墨绿侧栏的强调色与「新建任务」按钮分开用浅色令牌。设置中心可调本机界面字号(13/14/16/18)。
|
||||
- 验证:Dev 仓 `make test` 退出码 0(2026-10-05)。其中 frontend vitest 17 文件 81 项、knip 43 <= 43;ui vitest 14 文件 103 项(含 contrast-guard)、tsc、knip 55 <= 55。浏览器在 Vite(127.0.0.1:5175)上核对计算样式:墨绿新建任务按钮为 #e9f0f6 / #082d4f,active 图标为 #8fd4b4,表头无 uppercase 且走 --text-dim;`--ui-font-size: 18px` 时 xs 为 calc(18px - 3px)。后端 8787 未启动,设置弹窗本身没有点开。
|
||||
- 影响与剩余项:px→rem、prefers-contrast、聚焦环不在本次。子仓 PR 合入后 Dev 的 gitlink 才指向已合入提交。
|
||||
| 同步前验收 | 34e82d53c1716f0075d510a5f7b6d72dd3fc9912 | 17b502e5c0332607793a32240ae7c68ccf97915c | 2026-10-05T04:39:43Z |
|
||||
|
||||
## 闭合记录(card-autoclose 回填)
|
||||
|
||||
- 依据:merge cf998fe89b2d44e673fd91d55038eb02c5806da5(PR #198)已包含于 origin/main,分支成果已落盘;本段为合入后回填。
|
||||
- 合并主题:Merge pull request 'Pair the contrast rules with the token change' (#198) from feature/contrast-typography into main
|
||||
- 归档:随闭合移入 .task/archive/;任务执行期的过程证据见原任务记录与 PR。
|
||||
@@ -1,39 +0,0 @@
|
||||
# feature/deliverable-docx-r1 任务卡
|
||||
|
||||
任务主记录:https://git-home.u1680832.nyat.app:30319/weichen/Agent-System-Dev/pulls/109;状态:已完成(随 PR #109 合入);owner:weichen
|
||||
|
||||
## 基线与授权
|
||||
|
||||
- 权威仓:ssh://git@git-ssh.u1680832.nyat.app:31411/weichen/Agent-System-Dev.git;目标分支:main;R0(initial_base_sha)= 388d01cc3afe0d426d0cb166168cfc34565cb5ce
|
||||
- 工作区:/home/weichen/projects/Agent-System-Dev-wt-feature-deliverable-docx-r1(worktree);分支:feature/deliverable-docx-r1
|
||||
- 授权与交付终点:用户反馈两项缺陷后授权修复——(1) 生成的 docx 必须带真实排版(标题层级/表格/样式),不得是纯文本;(2) 交付物(文档/图/PPT/pdf 等)必须在对话内直接以可打开预览的卡片给出(参照 ZCode 右栏预览与 Kimi 卡片形态,截图六张)。交付终点:模块 PR + Dev gitlink 合入。
|
||||
|
||||
## 目标与非目标
|
||||
|
||||
- 后端:新增 docgen(Markdown→带样式 OOXML,零三方依赖)+ write_docx 内置工具 + 提示词路由(write_artifact 不再承接 Word 文档);artifact_ref 部件从「过程件」改为「内容件」并钉在最终正文之后(Kimi 式回复完给卡)。
|
||||
- 前端:artifact_ref 渲染升级为交付物卡片(整卡点击=右栏预览唯一落位 + 单下载按钮,令牌化样式 + mk-rise-in);live.ts 投影与落库序同构(交付物钉尾、流式期间即可见)。
|
||||
- 非目标:xlsx/pptx/pdf 生成器、文档可检索索引(生成路径暂跳过二进制索引,见剩余项)、预览器改动(mammoth 已能还原 Heading1-4 样式)。
|
||||
|
||||
## 同步记录
|
||||
|
||||
| 节点 | sync_base_sha | tested_head_sha | checked_at |
|
||||
|---|---|---|---|
|
||||
| 启动 | 388d01cc3afe0d426d0cb166168cfc34565cb5ce | 388d01cc3afe0d426d0cb166168cfc34565cb5ce | 2026-10-01T02:25:45Z |
|
||||
| 合入前 task-sync | 388d01cc3afe0d426d0cb166168cfc34565cb5ce(Dev 无前进;frontend 分支保护拦 head-behind 后实并入 origin/main 再合) | backend 8550bb0 + frontend b048d90 + ui 不变 | 2026-10-01T02:51:XXZ |
|
||||
|
||||
## 结果与验证(完成后填写)
|
||||
|
||||
- 结果:
|
||||
- Backend PR #31(merge 8550bb0):internal/docgen(Title/Heading1-4、numbering.xml 真编号列表含任务项 ☐/☑、GFM 表格表头底纹、引用左线、代码底纹、粗斜/删除线/真超链接 rels;A4 中文页边距、等线/Calibri 字族);write_docx 工具(name 自动补 .docx,docx MIME 工件);ingest 回读测试(生成→parseDocx 块结构闭合);llm.go 交付物钉尾;mock #doc 改为真 docx 全链路演示;runmgr 二进制 mime 跳过字符串索引;提示词 tool.write_docx 新增、tool.write_artifact 分工改写、task.doc-minutes 输出契约要求 write_docx 交付。
|
||||
- Frontend PR #25(merge b048d90):Conversation.tsx deliverable-card(图标+文件名+类型/大小 meta+预览示意+单下载;整卡点击=右栏预览,全屏仍从右栏标题进);live.ts artifact 投影钉尾同构;styles.css 令牌化卡片样式;测试更新。
|
||||
- 验证:
|
||||
- backend `go test ./...` 19 包 ok(含新 e2e:API 取回工件为合法 zip 且 document.xml 含 `<w:tbl>` 与标题文本);
|
||||
- frontend `npx vitest run` 40/40、`tsc --noEmit` 干净;
|
||||
- 组合 `make test`(core+backend+frontend+ui+agentcmd)全绿——ui 含 design-guard 8 项(无裸色/无私有 keyframes/无行内字号);
|
||||
- 提交前 precheck verdict=READY(R0=388d01c)。
|
||||
- 影响与剩余项:
|
||||
- docx 生成路径未进全文索引(二进制 mime 跳过;上传路径 ingest 不受影响)——后续可用 ingest 块解析接通;
|
||||
- xlsx/pptx 生成器未做(卡片与预览对它们已就绪);
|
||||
- 超过 50 个列表序列的文档回落共享编号(编号延续,Word 容忍);
|
||||
- mimosa 扫描钩子在本次 commit/push 时 scanner_no_output(兼容放行),未获得完整安全扫描结论,不据此宣称安全。
|
||||
| 同步前验收 | 388d01cc3afe0d426d0cb166168cfc34565cb5ce | d53e8e7c427a87681a76e6fc572438a6d0942720 | 2026-10-01T02:51:50Z |
|
||||
@@ -1,32 +0,0 @@
|
||||
# feature/deliverable-quality-system 任务卡
|
||||
|
||||
任务主记录:PR #128 https://git-home.u1680832.nyat.app:30319/weichen/Agent-System-Dev/pulls/128(merge f8fefa0f88);状态:已完成(回填);owner:weichen
|
||||
|
||||
## 基线与授权
|
||||
|
||||
- 权威仓:ssh://git@git-ssh.u1680832.nyat.app:31411/weichen/Agent-System-Dev.git;目标分支:main;R0(initial_base_sha)= 28174a67524849084823e16791d498c1dcdcb77a
|
||||
- 工作区:/home/weichen/projects/Agent-System-Dev-wt-feature-deliverable-quality-system(worktree);分支:feature/deliverable-quality-system
|
||||
- 授权与交付终点:<本次允许的动作与终点;未授权事项写明>
|
||||
|
||||
## 目标与非目标
|
||||
|
||||
<预期结果、受影响入口/模块/契约;明确不做什么。>
|
||||
|
||||
## 同步记录
|
||||
|
||||
| 节点 | sync_base_sha | tested_head_sha | checked_at |
|
||||
|---|---|---|---|
|
||||
| 启动 | 28174a67524849084823e16791d498c1dcdcb77a | 28174a67524849084823e16791d498c1dcdcb77a | 2026-10-01T08:46:07Z |
|
||||
|
||||
## 结果与验证
|
||||
|
||||
- 结果:
|
||||
- 验证:
|
||||
- 影响与剩余项:
|
||||
|
||||
## 闭合记录(card-autoclose 回填)
|
||||
|
||||
- 依据:merge f8fefa0f888e8f5fd5207c9e97099e59935ff69b(PR #128)已包含于 origin/main,分支成果已落盘;本段为合入后回填。
|
||||
- 合并主题:Pin the quality system and the squad entry
|
||||
- 归档:随闭合移入 .task/archive/;任务执行期的过程证据见原任务记录与 PR。
|
||||
|
||||
@@ -1,34 +0,0 @@
|
||||
# feature/docx-paper-preview 任务卡
|
||||
|
||||
任务主记录:https://git-home.u1680832.nyat.app:30319/weichen/Agent-System-Dev/pulls/196 ;状态:已完成(回填);owner:weichen
|
||||
|
||||
## 基线与授权
|
||||
|
||||
- 权威仓:ssh://git@git-ssh.u1680832.nyat.app:31411/weichen/Agent-System-Dev.git;目标分支:main;R0(initial_base_sha)= eaae87e635ce31570159637cfe400f099b4daf5b
|
||||
- 工作区:/home/weichen/projects/Agent-System-Dev-wt-feature-docx-paper-preview(worktree);分支:feature/docx-paper-preview
|
||||
- 授权与交付终点:实现 docx 纸面原貌预览(令牌、样式、栏宽缩放、测试、浏览器核对、子仓与 Dev PR)。合入 main 与 task-finish 等所有者合入后执行。不改写历史、不改分支保护、不发布版本。
|
||||
|
||||
## 目标与非目标
|
||||
|
||||
- 目标:docx 预览固定白纸黑字,保留文档自带样式,窄预览栏整页等比缩小,全屏栏宽足够时保持 100%。
|
||||
- 受影响:`DESIGN.md`;UI 仓 tokens/ui.css/FilePreview;Frontend 仓 styles.css、previewsetup、previewfit。
|
||||
- 非目标:mammoth 与伪 docx 文本回退仍走主题化 `.doc-viewer`;不改 `renderAsync` 的分页选项;不改 xlsx/pptx 的解析路径。
|
||||
|
||||
## 同步记录
|
||||
|
||||
| 节点 | sync_base_sha | tested_head_sha | checked_at |
|
||||
|---|---|---|---|
|
||||
| 启动 | eaae87e635ce31570159637cfe400f099b4daf5b | eaae87e635ce31570159637cfe400f099b4daf5b | 2026-10-05T03:54:31Z |
|
||||
| 同步前验收 | eaae87e635ce31570159637cfe400f099b4daf5b | 10eaaeb8dc4f0e869847d3874a90793be3dfedf9 | 2026-10-05T04:03:56Z |
|
||||
|
||||
## 结果与验证
|
||||
|
||||
- 结果:UI `b14c9c0`(https://git-home.u1680832.nyat.app:30319/weichen/Agent-System-UI/pulls/35)增加 `--paper` / `--paper-ink` 并允许预览加载器返回清理函数;Frontend `9badbb1`(https://git-home.u1680832.nyat.app:30319/weichen/Agent-System-Frontend/pulls/44)把 docx 页画到纸面令牌上并按栏宽缩放。
|
||||
- 验证:UI `npx vitest run` 84 通过、`npx tsc --noEmit` 通过;Frontend `npm test` 81 通过、`npx tsc -b` 通过。`make test` 于 2026-10-05 在本 worktree 通过(boundaries、pins、libs、core、backend、frontend 81、ui 84、agent-command)。浏览器核对页:深色窄栏 420px 纸面 `rgb(255,255,255)`、默认墨色 `rgb(0,0,0)`、标题保留文档蓝 `rgb(31,78,121)`、红句保留 `rgb(192,0,0)`,缩放 `matrix(0.496222)`(页宽 794);浅色主题纸面与墨色不变;墨绿主题底座 `rgb(224,224,219)`、纸面仍白;栏宽 998px 时 `transform=none`(100%)。
|
||||
- 影响与剩余项:深色主题下 docx 正文恢复可读。mammoth 与伪 docx 文本回退仍走主题化排版。合入权在所有者,合入后才能 task-finish。
|
||||
|
||||
## 闭合记录(card-autoclose 回填)
|
||||
|
||||
- 依据:merge 7e59377f1e12a6c00f867014f94d3acfe14896af(PR #196)已包含于 origin/main,分支成果已落盘;本段为合入后回填。
|
||||
- 合并主题:Merge pull request 'Preview docx on fixed paper instead of the theme background' (#196) from feature/docx-paper-preview into main
|
||||
- 归档:随闭合移入 .task/archive/;任务执行期的过程证据见原任务记录与 PR。
|
||||
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@@ -1,35 +0,0 @@
|
||||
# feature/durable-rewind 任务卡
|
||||
|
||||
任务主记录:PR #175 https://git-home.u1680832.nyat.app:30319/weichen/Agent-System-Dev/pulls/175(merge 81087afa6c);状态:已完成(回填);owner:weichen
|
||||
|
||||
## 基线与授权
|
||||
|
||||
- 权威仓:ssh://git@git-ssh.u1680832.nyat.app:31411/weichen/Agent-System-Dev.git;目标分支:main;R0(initial_base_sha)= 10fabbc4040a451023ad2f2ef10687a835ba4eb5
|
||||
- 工作区:/home/weichen/projects/Agent-System-Dev-wt-feature-durable-rewind(worktree);分支:feature/durable-rewind
|
||||
- 授权与交付终点:实现批次 7(持久与回滚)。允许改 agent-native、agent-squad(仅透传)、core、backend、frontend、ui 与 Dev 指针;经 Gitea PR 合入 main 后回收 worktree。不回滚对话历史,不引入 pi-durable 或第三方 OTel SDK。
|
||||
|
||||
## 目标与非目标
|
||||
|
||||
- 目标:工具意图与结果分两次落盘;只有存储时与当前声明都是 safe 才重跑,否则写入「副作用未知,未重试」。请求由已落盘投影组装。文件检查点与回滚 API、用户消息上的回滚确认。模型回退链默认空,仅在尚未输出时切换。GenAI span 名为 invoke_agent、chat、execute_tool,默认不采提示词。
|
||||
- 非目标:回滚消息历史;透明续跑;把 shell/python 的改动纳入文件追踪。
|
||||
|
||||
## 同步记录
|
||||
|
||||
| 节点 | sync_base_sha | tested_head_sha | checked_at |
|
||||
|---|---|---|---|
|
||||
| 启动 | 10fabbc4040a451023ad2f2ef10687a835ba4eb5 | 10fabbc4040a451023ad2f2ef10687a835ba4eb5 | 2026-10-03T17:10:34Z |
|
||||
|
||||
## 结果与验证
|
||||
|
||||
- 结果:native fb2b3b7,squad a3b49e7,core 5dc190e,backend bead033,frontend e26119d,ui 8e66bce。
|
||||
- 验证:各仓单测已过。worktree 内 `make test` 与 `make build` 通过。临时 mock(127.0.0.1:8802)上打开回滚确认:无检查点时显示「没有需要回滚的文件」且确认按钮不可用;写入检查点后列出将恢复的 notes.txt 与跳过的 note.txt,确认后 notes.txt 被删除、note.txt 保持外部内容,并追加系统提示。
|
||||
- 影响与剩余项:回退链默认空;检查点只追踪显式写入;shell 与 python 的改动不回滚。
|
||||
| 同步前验收 | 10fabbc4040a451023ad2f2ef10687a835ba4eb5 | ac10d830dff720a5a83ceb6740565110062fc757 | 2026-10-03T17:39:57Z |
|
||||
| 同步前验收 | 10fabbc4040a451023ad2f2ef10687a835ba4eb5 | 4673cf235a9d591b271d480464c6151a7489cf18 | 2026-10-03T17:39:57Z |
|
||||
| 同步前验收 | 10fabbc4040a451023ad2f2ef10687a835ba4eb5 | 84395c92ffebd78608109eebc91eec9e086f9b65 | 2026-10-03T17:39:58Z |
|
||||
|
||||
## 闭合记录(card-autoclose 回填)
|
||||
|
||||
- 依据:merge 81087afa6c101cf937e4ef4b4f3842ce2a01aafc(PR #175)已包含于 origin/main,分支成果已落盘;本段为合入后回填。
|
||||
- 合并主题:Merge pull request 'Pin durability, file rewind, and model fallback' (#175) from feature/durable-rewind into main
|
||||
- 归档:随闭合移入 .task/archive/;任务执行期的过程证据见原任务记录与 PR。
|
||||
File diff suppressed because one or more lines are too long
@@ -1,157 +0,0 @@
|
||||
# feature/evidence-driven-gates 任务卡
|
||||
|
||||
任务主记录:PR #205 https://git-home.u1680832.nyat.app:30319/weichen/Agent-System-Dev/pulls/205(merge df26ca7199);状态:已完成(回填);owner:weichen
|
||||
|
||||
## 基线与授权
|
||||
|
||||
- 权威仓:ssh://git@git-ssh.u1680832.nyat.app:31411/weichen/Agent-System-Dev.git;目标分支:main;R0(initial_base_sha)= 602d2ce9c6900343155f2a9c7ccb4f1c83aa4a59
|
||||
- 工作区:/home/weichen/projects/Agent-System-Dev-wt-feature-evidence-driven-gates(worktree);分支:feature/evidence-driven-gates
|
||||
- 授权与交付终点:用户 2026-10-05 授权「按证据驱动方案完善规范」——guidelines 子模块(PR)+
|
||||
Dev 仓(AGENTS.md/policy/工具/Makefile/task.sh + gitlink 推进)经 `make test` 组合验证后
|
||||
PR 合入 main 并回收工作区。未授权:改前端/后端业务代码、解除分支保护、改写历史。
|
||||
|
||||
## 目标与非目标
|
||||
|
||||
目标:落地「声明≠能力」证据门禁——
|
||||
1) guidelines draft.10:证据来源三分 SELF/REPLAY/GATE、工具写入、审阅者重放、外部事实
|
||||
零信任、诚实出口(verification/collaboration/delivery/baseline/glossary/两模板/CHANGELOG)。
|
||||
2) Dev 仓:AGENTS.md「证据与验证门禁」节;policy/facts.md 事实登记表(F1–F4 实测后登记);
|
||||
scripts/evidence.sh(make evidence:命令×HEAD×sha256×尾部写入任务卡);
|
||||
scripts/facts-verify.sh(make facts-verify [--update]);task.sh:precheck 增 [hooks]/[facts],
|
||||
sync 增 [evidence] 旧 HEAD 告警,task-start 卡片模板带证据表;Makefile 增两目标。
|
||||
3) gitlink 推进至 guidelines 合入 SHA(af199ee),组合验证 make test。
|
||||
|
||||
非目标:task-close 核对 CI 状态(PR3 权威迁移)、CI 工作流改动、UI/业务代码、
|
||||
review 技能文本改造(后续任务)。
|
||||
|
||||
## 同步记录
|
||||
|
||||
| 节点 | sync_base_sha | tested_head_sha | checked_at |
|
||||
|---|---|---|---|
|
||||
| 启动 | 602d2ce9c6900343155f2a9c7ccb4f1c83aa4a59 | 602d2ce9c6900343155f2a9c7ccb4f1c83aa4a59 | 2026-10-05T10:41:39Z |
|
||||
|
||||
## 结果与验证
|
||||
|
||||
- 结果:guidelines 推进至 0.1.0-draft.10(PR Development-Guidelines#4,merge af199ee,
|
||||
已钉入本 PR gitlink);Dev 仓落地 AGENTS.md「证据与验证门禁」节、policy/facts.md(F1–F4)、
|
||||
scripts/evidence.sh + facts-verify.sh、Makefile evidence/facts-verify 目标、task.sh
|
||||
precheck [hooks]/[facts] + sync [evidence] 告警 + 卡片模板证据表。全部交付,无删减。
|
||||
- 验证:见下方证据表——make test 全量 PASS(boundaries/pins/libs/core/backend/frontend/
|
||||
ui/agent-command,exit 0);precheck READY 含新增 [hooks]/[facts] 行;facts-verify 4/4
|
||||
PASS(F2 曾 FAIL 后修正命令并复验——暴露登记命令与手工命令的口径漂移,属预期机制生效);
|
||||
evidence 工具正例(脱敏 token <redacted>)/负例(exit=1 行照记、rc 透传)自测通过;
|
||||
引号缺陷(make 变量重引号拆坏 CMD)自测发现并修复。NOT_RUN:无。诚实说明:6518f6e 后
|
||||
仅 .task/AGENTS.md/task.sh(sync 告警)变更,均不在 make test 覆盖面,按证据复用规则
|
||||
不重跑全量,另记 bash -n 复检行;PR HEAD 全量由 CI 作 GATE 权威源。
|
||||
- 影响与剩余项:新增两 make 目标与 precheck 两行(向后兼容,旧卡无证据表时 evidence.sh
|
||||
自建段落);遗留(后续任务):task-close 核对 merge SHA 的 CI 状态、review 技能文本改
|
||||
双盲重放、CI-first 完成声明模板。
|
||||
|
||||
## 证据(Evidence)
|
||||
|
||||
<!-- make evidence CMD="…" 写入;手抄/转写输出视为无效证据(AGENTS.md 证据与验证门禁)。 -->
|
||||
| 时间(UTC) | 命令 | 被测HEAD | exit | 来源 | sha256(16) |
|
||||
|---|---|---|---|---|---|
|
||||
| 2026-10-05T10:47:37Z | `false` | ba83a17c11 | 1 | SELF | e3b0c44298fc1c14 |
|
||||
|
||||
<!-- evidence:run 2026-10-05T10:47:37Z -->
|
||||
```
|
||||
$ false
|
||||
[exit 1 | HEAD ba83a17c11 | sha256:e3b0c44298fc1c14] 输出尾部 15 行:
|
||||
|
||||
```
|
||||
| 2026-10-05T10:48:16Z | `printf 'token 0123456789abcdef0123456789abcdef01234567 hello\n'` | ba83a17c11 | 0 | SELF | aae6a8955c582b4b |
|
||||
|
||||
<!-- evidence:run 2026-10-05T10:48:16Z -->
|
||||
```
|
||||
$ printf 'token 0123456789abcdef0123456789abcdef01234567 hello\n'
|
||||
[exit 0 | HEAD ba83a17c11 | sha256:aae6a8955c582b4b] 输出尾部 15 行:
|
||||
token <redacted> hello
|
||||
```
|
||||
| 2026-10-05T10:48:31Z | `make precheck` | efa701279f | 0 | SELF | d7a230052e4ac220 |
|
||||
|
||||
<!-- evidence:run 2026-10-05T10:48:31Z -->
|
||||
```
|
||||
$ make precheck
|
||||
[exit 0 | HEAD efa701279f | sha256:d7a230052e4ac220] 输出尾部 15 行:
|
||||
make[1]: Entering directory '/home/weichen/projects/Agent-System-Dev-wt-feature-evidence-driven-gates'
|
||||
[repo] branch=feature/evidence-driven-gates head=efa701279f
|
||||
[remote] origin/main=602d2ce9c6 ahead=3 behind=0
|
||||
[tree] clean submodules_drift=0 uninit=0
|
||||
[worktrees] linked=1
|
||||
[hooks] core.hooksPath=scripts/hooks(pre-commit/post-merge 实际接线)
|
||||
[facts] policy/facts.md 4 条事实均在有效期内
|
||||
[required-reading] core/baseline.md, workflows/delivery.md §1
|
||||
[R0] 602d2ce9c6(完整:602d2ce9c6900343155f2a9c7ccb4f1c83aa4a59)
|
||||
[verdict] READY — 可建任务工作区:make task-start NAME=feature/your-branch
|
||||
make[1]: Leaving directory '/home/weichen/projects/Agent-System-Dev-wt-feature-evidence-driven-gates'
|
||||
```
|
||||
| 2026-10-05T10:48:46Z | `make facts-verify` | efa701279f | 2 | SELF | 6c61e644395042fa |
|
||||
|
||||
<!-- evidence:run 2026-10-05T10:48:46Z -->
|
||||
```
|
||||
$ make facts-verify
|
||||
[exit 2 | HEAD efa701279f | sha256:6c61e644395042fa] 输出尾部 15 行:
|
||||
make[1]: Entering directory '/home/weichen/projects/Agent-System-Dev-wt-feature-evidence-driven-gates'
|
||||
[F1] PASS :: curl -fsS -m 10 https://git-home.u1680832.nyat.app:30319/api/v1/version
|
||||
[F2] FAIL :: t=$(sed -n "s/^ACCESS_TOKEN=//p" ~/.secrets/gitea); test -n "$t" && curl -fsS -m
|
||||
[F3] PASS :: GIT_SSH_COMMAND="ssh -i ~/.ssh/home_gitea -o BatchMode=yes" git ls-remote ssh://
|
||||
[F4] PASS :: ! curl -fsS -m 8 https://git-panel.u1680832.nyat.app:30319/api/v1/version
|
||||
[facts-verify] total=4 pass=3 fail=1
|
||||
make[1]: *** [Makefile:52: facts-verify] Error 1
|
||||
make[1]: Leaving directory '/home/weichen/projects/Agent-System-Dev-wt-feature-evidence-driven-gates'
|
||||
```
|
||||
| 2026-10-05T10:49:21Z | `make facts-verify` | efa701279f | 0 | SELF | 919401b838d77909 |
|
||||
|
||||
<!-- evidence:run 2026-10-05T10:49:21Z -->
|
||||
```
|
||||
$ make facts-verify
|
||||
[exit 0 | HEAD efa701279f | sha256:919401b838d77909] 输出尾部 15 行:
|
||||
make[1]: Entering directory '/home/weichen/projects/Agent-System-Dev-wt-feature-evidence-driven-gates'
|
||||
[F1] PASS :: curl -fsS -m 10 https://git-home.u1680832.nyat.app:30319/api/v1/version
|
||||
[F2] PASS :: t=$(sed -n "s/^[ -]*ACCESS_TOKEN=//p" ~/.secrets/gitea); test -n "$t" && curl -f
|
||||
[F3] PASS :: GIT_SSH_COMMAND="ssh -i ~/.ssh/home_gitea -o BatchMode=yes" git ls-remote ssh://
|
||||
[F4] PASS :: ! curl -fsS -m 8 https://git-panel.u1680832.nyat.app:30319/api/v1/version
|
||||
[facts-verify] total=4 pass=4 fail=0
|
||||
make[1]: Leaving directory '/home/weichen/projects/Agent-System-Dev-wt-feature-evidence-driven-gates'
|
||||
```
|
||||
| 2026-10-05T10:49:32Z | `make test` | 6518f6ed0a | 0 | SELF | 751ae7dccd018ce7 |
|
||||
|
||||
<!-- evidence:run 2026-10-05T10:49:32Z -->
|
||||
```
|
||||
$ make test
|
||||
[exit 0 | HEAD 6518f6ed0a | sha256:751ae7dccd018ce7] 输出尾部 15 行:
|
||||
✓ test/card-anchor.test.tsx (4 tests) 91ms
|
||||
✓ test/file-preview.test.tsx (9 tests) 77ms
|
||||
✓ test/inline-confirm.test.tsx (7 tests) 94ms
|
||||
✓ test/capability.test.tsx (14 tests) 145ms
|
||||
|
||||
Test Files 14 passed (14)
|
||||
Tests 103 passed (103)
|
||||
Start at 10:50:04
|
||||
Duration 612ms (transform 373ms, setup 0ms, import 1.36s, tests 874ms, environment 3.22s)
|
||||
|
||||
knip unused exports 55 <= 55
|
||||
cd deps/agent-command && go vet ./... && go test -count=1 ./...
|
||||
ok agent-command 0.002s
|
||||
ok agent-command/conformance 0.002s
|
||||
make[1]: Leaving directory '/home/weichen/projects/Agent-System-Dev-wt-feature-evidence-driven-gates'
|
||||
```
|
||||
| 2026-10-05T10:52:17Z | `bash -n scripts/task.sh && bash -n scripts/evidence.sh && bash -n scripts/facts-verify.sh && bash scripts/check-pins.sh >/dev/null && bash scripts/lint-boundaries.sh >/dev/null && echo 'final-HEAD quick checks OK'` | 9337207906 | 0 | SELF | 944a991897d9f475 |
|
||||
|
||||
<!-- evidence:run 2026-10-05T10:52:17Z -->
|
||||
```
|
||||
$ bash -n scripts/task.sh && bash -n scripts/evidence.sh && bash -n scripts/facts-verify.sh && bash scripts/check-pins.sh >/dev/null && bash scripts/lint-boundaries.sh >/dev/null && echo 'final-HEAD quick checks OK'
|
||||
[exit 0 | HEAD 9337207906 | sha256:944a991897d9f475] 输出尾部 15 行:
|
||||
warn: deps/agent-native deps/development-guidelines is 26b562d2e34f, Dev is af199eeaa23c
|
||||
warn: deps/agent-squad deps/development-guidelines is 26b562d2e34f, Dev is af199eeaa23c
|
||||
warn: deps/agent-intent deps/development-guidelines is 26b562d2e34f, Dev is af199eeaa23c
|
||||
final-HEAD quick checks OK
|
||||
```
|
||||
| 同步前验收 | 602d2ce9c6900343155f2a9c7ccb4f1c83aa4a59 | e1009f475fd203619a1fd81cf2763b9c4c01e9a2 | 2026-10-05T10:52:23Z |
|
||||
|
||||
## 闭合记录(card-autoclose 回填)
|
||||
|
||||
- 依据:merge df26ca71996a6c87cbcf440a910b6d7394dfe188(PR #205)已包含于 origin/main,分支成果已落盘;本段为合入后回填。
|
||||
- 合并主题:Merge pull request 'Add evidence-driven gates: facts registry, evidence tooling, provenance rules' (#205) from feature/evidence-driven-gates into main
|
||||
- 归档:随闭合移入 .task/archive/;任务执行期的过程证据见原任务记录与 PR。
|
||||
@@ -1,34 +0,0 @@
|
||||
# feature/exec-interpreters 任务卡
|
||||
|
||||
任务主记录:Backend https://git-home.u1680832.nyat.app:30319/weichen/Agent-System-Backend/pulls/33 ;Dev https://git-home.u1680832.nyat.app:30319/weichen/Agent-System-Dev/pulls/113 ;状态:已完成(回填);owner:weichen
|
||||
|
||||
## 基线与授权
|
||||
|
||||
- 权威仓:ssh://git@git-ssh.u1680832.nyat.app:31411/weichen/Agent-System-Dev.git;目标分支:main;R0(initial_base_sha)= 4c4071e5d8e256dd8f82ba9c74efa1effd1e9df3
|
||||
- 工作区:/home/weichen/projects/Agent-System-Dev-wt-feature-exec-interpreters(worktree);分支:feature/exec-interpreters
|
||||
- 授权与交付终点:落地 run_shell / run_python 并打开 Backend 与 Dev PR。合入 main 由所有者执行。不恢复 write_docx。
|
||||
|
||||
## 目标与非目标
|
||||
|
||||
- 目标:注册 run_shell / run_python。脚本落盘到会话沙箱 .agent/ 并保留;解释器限 bash / python3 绝对路径;超时与请求取消先到者生效,超时杀掉进程组;非零退出与超时以文本返回。
|
||||
- 附带:register_artifact 按扩展名写入 Office/PDF/图片 MIME,避免二进制被当成文本索引。
|
||||
- 非目标:写侧护栏与 indexTextOf(feature/binary-doc-index)、预览嗅探、输入排队。
|
||||
|
||||
## 同步记录
|
||||
|
||||
| 节点 | sync_base_sha | tested_head_sha | checked_at |
|
||||
|---|---|---|---|
|
||||
| 启动 | 4c4071e5d8e256dd8f82ba9c74efa1effd1e9df3 | 4c4071e5d8e256dd8f82ba9c74efa1effd1e9df3 | 2026-10-01T03:58:48Z |
|
||||
| 同步前验收 | 4c4071e5d8e256dd8f82ba9c74efa1effd1e9df3 | d62f6806d2 | 2026-10-01T04:04:49Z |
|
||||
|
||||
## 结果与验证
|
||||
|
||||
- 结果:Backend feature/exec-interpreters @ 2880b58 注册两个执行器,并在 app.go 挂上。
|
||||
- 验证:Backend `go test ./...` 19 包 ok(含 echo 留痕、空脚本、runtime.exec 闸、进程组超时、python ZIP 魔数、register_artifact 回填)。Dev `make test` 通过:core、backend、frontend vitest 40、ui vitest 68、agent-command。
|
||||
- 影响与剩余项:模型可执行工作区脚本并登记二进制交付物。合入顺序为 Backend PR 然后 Dev PR。部署后的真人模型验收留到所有者合入之后。
|
||||
|
||||
## 闭合记录(card-autoclose 回填)
|
||||
|
||||
- 依据:merge 345d9db1e6486ec818c9b4f3c5139a903d4eee8b(PR #113)已包含于 origin/main,分支成果已落盘;本段为合入后回填。
|
||||
- 合并主题:Merge pull request 'Point backend at run_shell and run_python executors' (#113) from feature/exec-interpreters into main
|
||||
- 归档:随闭合移入 .task/archive/;任务执行期的过程证据见原任务记录与 PR。
|
||||
@@ -1,274 +0,0 @@
|
||||
# feature/ext-1-inproc-handler 任务卡
|
||||
|
||||
任务主记录:https://git-home.u1680832.nyat.app:30319/weichen/Agent-System-Dev/pulls/207;状态:已完成(回填);owner:weichen
|
||||
|
||||
## 基线与授权
|
||||
|
||||
- 权威仓:ssh://git@git-ssh.u1680832.nyat.app:31411/weichen/Agent-System-Dev.git;目标分支:main;R0(initial_base_sha)= aeb8513e9c746294cfdb44c0fb55fa0fe26590d9
|
||||
- 工作区:/home/weichen/projects/Agent-System-Dev-wt-feature-ext-1-inproc-handler(worktree);分支:feature/ext-1-inproc-handler
|
||||
- 授权与交付终点:EXT-1 基座侧实现(backend 子仓)+ 下游示例 + documents 提案 + .tmp P0 材料(11/12/13,不入库);子仓按 documents→backend→Dev 顺序提交,Dev PR 合入为本任务交付终点;不改基座既有路径语义,高后果操作(tag/建仓)不在本卡范围。
|
||||
|
||||
## 目标与非目标
|
||||
|
||||
本卡即 **EXT-1 扩展点申请卡**(compat-policy §6 四要素)+ 基座侧实现任务:
|
||||
|
||||
- **场景**:Agent-System-RDM 的 `rdm.ingest` 等命令经四入口(button/card/slash/chat)分发到 `cmdbus.Dispatch` 时,被以 `no host handler bound` 拒绝——`Registry.AddCommand` 与 manifest `provides.commands` 只注册规格不绑处理器;进程内插件也没有 owner 凭证与基座服务端回调身份(H4)。
|
||||
- **希望符号**:`pkg/extension` 新增 `Request`/`Handler`/`Host`(owner 作用域宿主句柄最小集:kv、audit、llm、knowledge search/write(embed)、tasks 台账、artifacts 只读)与 `Registry.AddCommandHandler(spec, h)`;`cmdbus` 新增 `RegisterPluginCommand`。
|
||||
- **为何现有注册点组合不出来**:`RegisterPluginCommands` 仅登记 spec;`HostClient` 走 sidecar HTTP 需进程内不可得的 token;owner 作用域必须由基座在分发时构造,插件无法自造。
|
||||
- **兼容**:只加符号与方法,不改既有路径语义;`SurfaceVersion` 保持 `2.0.0-experimental`,实验窗口内调整以提案 2026-10-05-ext-1-inproc-command-handler.md 为记录。
|
||||
|
||||
非目标:artifacts 写入(完整集,R1-7 前再评估);sidecar/EXT-3;下游仓创建与五仓 tag(另行双钥匙执行);RDM 领域逻辑。
|
||||
|
||||
## 复核轮记录(2026-10-05 第二轮,R0=63a62a7)
|
||||
|
||||
- 误重启事故:PR #207 合入后 `make task-start` 再次以同名分支建卡(task-start 只校验本地分支可建,不查该名是否刚合入),空卡覆盖了 main 上的原卡;`3718f6c` 已恢复原卡,本轮复核证据行(被测 HEAD `c371815`:backend 四包 go test / examples / test-boundaries / make test 全 exit 0)追加于后,`make task-sync` 基线 63a62a7(tested `e37e0cd`)。
|
||||
- 本轮性质:**仅复核,不改公开面**——产品代码相对 origin/main 零差异(见证据行 no product diff)。
|
||||
- 待办移交:五仓 `v0.1.0` tag 与 `Agent-System-RDM` 建仓(12/13 号材料,owner 双钥匙);MS0 评审时间待定(11 号对照包备好)。
|
||||
|
||||
## 同步记录
|
||||
|
||||
| 节点 | sync_base_sha | tested_head_sha | checked_at |
|
||||
|---|---|---|---|
|
||||
| 启动 | aeb8513e9c746294cfdb44c0fb55fa0fe26590d9 | aeb8513e9c746294cfdb44c0fb55fa0fe26590d9 | 2026-10-05T11:27:44Z |
|
||||
|
||||
## 证据(Evidence)
|
||||
|
||||
<!-- CMD="<命令>" make evidence 写入;手抄/转写输出视为无效证据(AGENTS.md 证据与验证门禁)。 -->
|
||||
| 时间(UTC) | 命令 | 被测HEAD | exit | 来源 | sha256(16) |
|
||||
|---|---|---|---|---|---|
|
||||
|
||||
## 结果与验证
|
||||
|
||||
- 结果:**EXT-1 最小集全部交付**——`pkg/extension` 新增 `Request`/`Handler`/`Host`(surface.txt 12→15)与 `Registry.AddCommandHandler`;`cmdbus.RegisterPluginCommand` 绑定处理器(高危确认卡拦截天然覆盖);`rag.IndexChunks` 抽出复用;`internal/app` 以 `hostcaps` 同源实现 hostapi 闭包与 `inprocHost`(owner 作用域:所有 store 调用 owner 第一参数、KnowledgeWrite 强制 Owner/Source);示例 `rdm.ping` 处理器 + go.mod core require/replace;documents 提案 + compat-policy §5 tag 名对齐 v0.2.0。artifacts **写入**未实现(完整集,按批注 1 R1-7 前再评估)。P0 材料 11/12/13 已落 `.tmp/智能体系统/further-objective/`(不入库)。.tmp 方案 V1.2 的 D3「单条 replace」已证伪并勘误(下游须复制 8 条 deps replace)。
|
||||
- 验证:make test 全链 **PASS**(提交前 786f852 树与最终 HEAD 517b897 各一轮,exit 0);make test-boundaries **PASS**;examples/downstream-rdm `go test ./...` **PASS**;backend `go test ./...` 29 包 **PASS**(含 cmdbus 三例、rag IndexChunks 两例、app 双 owner 作用域 + embed=hash 向量写入);final-HEAD 快检(boundaries+pins+examples)**PASS**。逐条证据见下方证据表;权威源为 CI 在 PR HEAD 的 `make test`+`make build`(GATE)。
|
||||
- 影响与剩余项:公开面依赖 0→1(+agent-system-core,声明式 go.mod 须按 compat-policy §4 加 core require+replace);既有路径语义不变、SurfaceVersion 保持 2.0.0-experimental。剩余:artifacts 写入(完整集);五仓 tag 与下游建仓(12/13 号材料备好,owner 双钥匙执行);MS0 评审材料待评审会使用(11 号)。
|
||||
| 2026-10-05T11:27:52Z | `make precheck` | 786f852def | 0 | SELF | 3c8da1b91e60945e |
|
||||
|
||||
<!-- evidence:run 2026-10-05T11:27:52Z -->
|
||||
```
|
||||
$ make precheck
|
||||
[exit 0 | HEAD 786f852def | sha256:3c8da1b91e60945e] 输出尾部 15 行:
|
||||
make[1]: Entering directory '/home/weichen/projects/Agent-System-Dev-wt-feature-ext-1-inproc-handler'
|
||||
[repo] branch=feature/ext-1-inproc-handler head=786f852def
|
||||
[remote] origin/main=aeb8513e9c ahead=1 behind=0
|
||||
[tree] clean submodules_drift=0 uninit=0
|
||||
[worktrees] linked=1
|
||||
[hooks] core.hooksPath=scripts/hooks(pre-commit/post-merge 实际接线)
|
||||
[facts] policy/facts.md 4 条事实均在有效期内
|
||||
[required-reading] core/baseline.md, workflows/delivery.md §1
|
||||
[R0] aeb8513e9c(完整:aeb8513e9c746294cfdb44c0fb55fa0fe26590d9)
|
||||
[verdict] READY — 可建任务工作区:make task-start NAME=feature/your-branch
|
||||
make[1]: Leaving directory '/home/weichen/projects/Agent-System-Dev-wt-feature-ext-1-inproc-handler'
|
||||
```
|
||||
| 2026-10-05T11:38:10Z | `make test-boundaries` | 786f852def | 0 | SELF | d12268928a5549a2 |
|
||||
|
||||
<!-- evidence:run 2026-10-05T11:38:10Z -->
|
||||
```
|
||||
$ make test-boundaries
|
||||
[exit 0 | HEAD 786f852def | sha256:d12268928a5549a2] 输出尾部 15 行:
|
||||
make[1]: Entering directory '/home/weichen/projects/Agent-System-Dev-wt-feature-ext-1-inproc-handler'
|
||||
bash scripts/lint-boundaries.sh
|
||||
architecture ok (68 edges)
|
||||
architecture negative ok
|
||||
boundaries ok
|
||||
make[1]: Leaving directory '/home/weichen/projects/Agent-System-Dev-wt-feature-ext-1-inproc-handler'
|
||||
```
|
||||
| 2026-10-05T11:38:10Z | `cd examples/downstream-rdm && go test -count=1 ./...` | 786f852def | 0 | SELF | 640877758fe3c88f |
|
||||
|
||||
<!-- evidence:run 2026-10-05T11:38:10Z -->
|
||||
```
|
||||
$ cd examples/downstream-rdm && go test -count=1 ./...
|
||||
[exit 0 | HEAD 786f852def | sha256:640877758fe3c88f] 输出尾部 15 行:
|
||||
ok example.com/agent-system-plugin-rdm 0.002s
|
||||
```
|
||||
| 2026-10-05T11:38:18Z | `make test` | 786f852def | 0 | SELF | fe92462ce20f1fe9 |
|
||||
|
||||
<!-- evidence:run 2026-10-05T11:38:18Z -->
|
||||
```
|
||||
$ make test
|
||||
[exit 0 | HEAD 786f852def | sha256:fe92462ce20f1fe9] 输出尾部 25 行:
|
||||
at recursivelyTraversePassiveMountEffects (/home/weichen/projects/Agent-System-Dev-wt-feature-ext-1-inproc-handler/modules/ui/node_modules/react-dom/cjs/react-dom-client.development.js:16851:13)
|
||||
at commitPassiveMountOnFiber (/home/weichen/projects/Agent-System-Dev-wt-feature-ext-1-inproc-handler/modules/ui/node_modules/react-dom/cjs/react-dom-client.development.js:17183:11)
|
||||
at recursivelyTraversePassiveMountEffects (/home/weichen/projects/Agent-System-Dev-wt-feature-ext-1-inproc-handler/modules/ui/node_modules/react-dom/cjs/react-dom-client.development.js:16851:13)
|
||||
|
||||
✓ test/toolblock.test.tsx (4 tests) 76ms
|
||||
✓ test/tabstrip.test.tsx (3 tests) 71ms
|
||||
✓ test/collapsible.test.tsx (5 tests) 79ms
|
||||
✓ test/ui.test.tsx (6 tests) 68ms
|
||||
✓ test/overlay-host.test.tsx (6 tests) 64ms
|
||||
✓ test/card-anchor.test.tsx (4 tests) 82ms
|
||||
✓ test/file-preview.test.tsx (9 tests) 85ms
|
||||
✓ test/inbox.test.tsx (13 tests) 87ms
|
||||
✓ test/inline-confirm.test.tsx (7 tests) 103ms
|
||||
✓ test/capability.test.tsx (14 tests) 135ms
|
||||
|
||||
Test Files 14 passed (14)
|
||||
Tests 103 passed (103)
|
||||
Start at 11:38:48
|
||||
Duration 620ms (transform 477ms, setup 0ms, import 1.50s, tests 918ms, environment 3.20s)
|
||||
|
||||
knip unused exports 55 <= 55
|
||||
cd deps/agent-command && go vet ./... && go test -count=1 ./...
|
||||
ok agent-command 0.002s
|
||||
ok agent-command/conformance 0.002s
|
||||
make[1]: Leaving directory '/home/weichen/projects/Agent-System-Dev-wt-feature-ext-1-inproc-handler'
|
||||
```
|
||||
| 2026-10-05T11:39:42Z | `bash scripts/lint-boundaries.sh && bash scripts/check-pins.sh && cd examples/downstream-rdm && go test -count=1 ./... && echo 'final-HEAD quick checks OK'` | 517b89760a | 0 | SELF | 26cb4cbcc3d68ec3 |
|
||||
|
||||
<!-- evidence:run 2026-10-05T11:39:42Z -->
|
||||
```
|
||||
$ bash scripts/lint-boundaries.sh && bash scripts/check-pins.sh && cd examples/downstream-rdm && go test -count=1 ./... && echo 'final-HEAD quick checks OK'
|
||||
[exit 0 | HEAD 517b89760a | sha256:26cb4cbcc3d68ec3] 输出尾部 15 行:
|
||||
ok deps/agent-native agent-intent
|
||||
warn: deps/agent-native deps/development-guidelines is 26b562d2e34f, Dev is af199eeaa23c
|
||||
ok deps/agent-native error-code-system
|
||||
ok deps/agent-native logging-system
|
||||
ok deps/agent-squad agent-intent
|
||||
ok deps/agent-squad agent-native
|
||||
warn: deps/agent-squad deps/development-guidelines is 26b562d2e34f, Dev is af199eeaa23c
|
||||
ok deps/agent-squad error-code-system
|
||||
ok deps/agent-squad logging-system
|
||||
warn: deps/agent-intent deps/development-guidelines is 26b562d2e34f, Dev is af199eeaa23c
|
||||
ok deps/agent-intent error-code-system
|
||||
ok deps/agent-intent logging-system
|
||||
pins ok
|
||||
ok example.com/agent-system-plugin-rdm 0.003s
|
||||
final-HEAD quick checks OK
|
||||
```
|
||||
| 2026-10-05T11:39:50Z | `make test` | 517b89760a | 0 | SELF | b55eef9dea426887 |
|
||||
|
||||
<!-- evidence:run 2026-10-05T11:39:50Z -->
|
||||
```
|
||||
$ make test
|
||||
[exit 0 | HEAD 517b89760a | sha256:b55eef9dea426887] 输出尾部 25 行:
|
||||
at runWithFiberInDEV (/home/weichen/projects/Agent-System-Dev-wt-feature-ext-1-inproc-handler/modules/ui/node_modules/react-dom/cjs/react-dom-client.development.js:1048:13)
|
||||
at commitHookEffectListMount (/home/weichen/projects/Agent-System-Dev-wt-feature-ext-1-inproc-handler/modules/ui/node_modules/react-dom/cjs/react-dom-client.development.js:13748:29)
|
||||
at commitHookPassiveMountEffects (/home/weichen/projects/Agent-System-Dev-wt-feature-ext-1-inproc-handler/modules/ui/node_modules/react-dom/cjs/react-dom-client.development.js:13835:11)
|
||||
at commitPassiveMountOnFiber (/home/weichen/projects/Agent-System-Dev-wt-feature-ext-1-inproc-handler/modules/ui/node_modules/react-dom/cjs/react-dom-client.development.js:16906:13)
|
||||
at recursivelyTraversePassiveMountEffects (/home/weichen/projects/Agent-System-Dev-wt-feature-ext-1-inproc-handler/modules/ui/node_modules/react-dom/cjs/react-dom-client.development.js:16851:13)
|
||||
at commitPassiveMountOnFiber (/home/weichen/projects/Agent-System-Dev-wt-feature-ext-1-inproc-handler/modules/ui/node_modules/react-dom/cjs/react-dom-client.development.js:17183:11)
|
||||
at recursivelyTraversePassiveMountEffects (/home/weichen/projects/Agent-System-Dev-wt-feature-ext-1-inproc-handler/modules/ui/node_modules/react-dom/cjs/react-dom-client.development.js:16851:13)
|
||||
|
||||
✓ test/overlay-host.test.tsx (6 tests) 62ms
|
||||
✓ test/inbox.test.tsx (13 tests) 84ms
|
||||
✓ test/card-anchor.test.tsx (4 tests) 90ms
|
||||
✓ test/file-preview.test.tsx (9 tests) 88ms
|
||||
✓ test/inline-confirm.test.tsx (7 tests) 106ms
|
||||
✓ test/capability.test.tsx (14 tests) 143ms
|
||||
|
||||
Test Files 14 passed (14)
|
||||
Tests 103 passed (103)
|
||||
Start at 11:40:18
|
||||
Duration 613ms (transform 393ms, setup 0ms, import 1.30s, tests 952ms, environment 3.29s)
|
||||
|
||||
knip unused exports 55 <= 55
|
||||
cd deps/agent-command && go vet ./... && go test -count=1 ./...
|
||||
ok agent-command 0.002s
|
||||
ok agent-command/conformance 0.002s
|
||||
make[1]: Leaving directory '/home/weichen/projects/Agent-System-Dev-wt-feature-ext-1-inproc-handler'
|
||||
```
|
||||
| 同步前验收 | aeb8513e9c746294cfdb44c0fb55fa0fe26590d9 | 425aff9f57678085fee2d629c2b09776603e4f9b | 2026-10-05T11:43:04Z |
|
||||
| 2026-10-05T11:43:03Z | `make task-sync` | 425aff9f57 | 0 | SELF | 5698c778f7840325 |
|
||||
|
||||
<!-- evidence:run 2026-10-05T11:43:03Z -->
|
||||
```
|
||||
$ make task-sync
|
||||
[exit 0 | HEAD 425aff9f57 | sha256:5698c778f7840325] 输出尾部 15 行:
|
||||
make[1]: Entering directory '/home/weichen/projects/Agent-System-Dev-wt-feature-ext-1-inproc-handler'
|
||||
Already up to date.
|
||||
[evidence] WARN 证据表被测 HEAD 落后且其后有非卡片变更:786f852def (当前 425aff9f57)——关键检查须重跑并以 make evidence 重新写入
|
||||
[synced] sync_base=aeb8513e9c tested_head=425aff9f57 checked_at=2026-10-05T11:43:04Z
|
||||
[next] 跑正式验收(make test 等),证据写入任务卡
|
||||
make[1]: Leaving directory '/home/weichen/projects/Agent-System-Dev-wt-feature-ext-1-inproc-handler'
|
||||
```
|
||||
|
||||
## 复核(2026-10-05)
|
||||
|
||||
PR #207 合入后,`make task-start` 用同名分支在 main 之上重建,空模板覆盖了本卡。本提交把卡片恢复为 `63a62a79ac` 上已合入的正文。产品代码无新增差异(EXT-1 最小集已在该提交内)。P0 材料 11/12/13 同日按方案写在主检出 `.tmp/智能体系统/further-objective/`,不入库。下面的证据行是这次复核补记。
|
||||
| 2026-10-05T11:58:21Z | `make precheck` | 3718f6c770 | 0 | SELF | 8f4a2eaafd581ae6 |
|
||||
|
||||
<!-- evidence:run 2026-10-05T11:58:21Z -->
|
||||
```
|
||||
$ make precheck
|
||||
[exit 0 | HEAD 3718f6c770 | sha256:8f4a2eaafd581ae6] 输出尾部 15 行:
|
||||
make[1]: Entering directory '/home/weichen/projects/Agent-System-Dev-wt-feature-ext-1-inproc-handler'
|
||||
[repo] branch=feature/ext-1-inproc-handler head=3718f6c770
|
||||
[remote] origin/main=63a62a79ac ahead=2 behind=0
|
||||
[tree] clean submodules_drift=0 uninit=0
|
||||
[worktrees] linked=1
|
||||
[hooks] core.hooksPath=scripts/hooks(pre-commit/post-merge 实际接线)
|
||||
[facts] policy/facts.md 4 条事实均在有效期内
|
||||
[required-reading] core/baseline.md, workflows/delivery.md §1
|
||||
[R0] 63a62a79ac(完整:63a62a79ac52cc5d0b5d798dc586195ea842bd51)
|
||||
[verdict] READY — 可建任务工作区:make task-start NAME=feature/your-branch
|
||||
make[1]: Leaving directory '/home/weichen/projects/Agent-System-Dev-wt-feature-ext-1-inproc-handler'
|
||||
```
|
||||
| 2026-10-05T11:58:23Z | `cd modules/backend && go test -count=1 ./internal/cmdbus/ ./internal/rag/ ./internal/app/ ./pkg/extension/` | 3718f6c770 | 0 | SELF | 2f2d2aa00b568f61 |
|
||||
|
||||
<!-- evidence:run 2026-10-05T11:58:23Z -->
|
||||
```
|
||||
$ cd modules/backend && go test -count=1 ./internal/cmdbus/ ./internal/rag/ ./internal/app/ ./pkg/extension/
|
||||
[exit 0 | HEAD 3718f6c770 | sha256:2f2d2aa00b568f61] 输出尾部 15 行:
|
||||
ok agent-system-backend/internal/cmdbus 0.010s
|
||||
ok agent-system-backend/internal/rag 0.077s
|
||||
ok agent-system-backend/internal/app 0.020s
|
||||
ok agent-system-backend/pkg/extension 0.002s
|
||||
```
|
||||
| 2026-10-05T11:58:24Z | `cd examples/downstream-rdm && go test -count=1 .` | 3718f6c770 | 0 | SELF | 0c646ecc157ffee2 |
|
||||
|
||||
<!-- evidence:run 2026-10-05T11:58:24Z -->
|
||||
```
|
||||
$ cd examples/downstream-rdm && go test -count=1 .
|
||||
[exit 0 | HEAD 3718f6c770 | sha256:0c646ecc157ffee2] 输出尾部 15 行:
|
||||
ok example.com/agent-system-plugin-rdm 0.003s
|
||||
```
|
||||
| 2026-10-05T11:58:24Z | `make test-boundaries` | 3718f6c770 | 0 | SELF | d12268928a5549a2 |
|
||||
|
||||
<!-- evidence:run 2026-10-05T11:58:24Z -->
|
||||
```
|
||||
$ make test-boundaries
|
||||
[exit 0 | HEAD 3718f6c770 | sha256:d12268928a5549a2] 输出尾部 15 行:
|
||||
make[1]: Entering directory '/home/weichen/projects/Agent-System-Dev-wt-feature-ext-1-inproc-handler'
|
||||
bash scripts/lint-boundaries.sh
|
||||
architecture ok (68 edges)
|
||||
architecture negative ok
|
||||
boundaries ok
|
||||
make[1]: Leaving directory '/home/weichen/projects/Agent-System-Dev-wt-feature-ext-1-inproc-handler'
|
||||
```
|
||||
| 2026-10-05T11:58:33Z | `make test` | dd75010738 | 0 | SELF | 4312feb505f9ae26 |
|
||||
|
||||
<!-- evidence:run 2026-10-05T11:58:33Z -->
|
||||
```
|
||||
$ make test
|
||||
[exit 0 | HEAD dd75010738 | sha256:4312feb505f9ae26] 输出尾部 15 行:
|
||||
added 162 packages in 622ms
|
||||
|
||||
RUN v4.1.11 /home/weichen/projects/Agent-System-Dev-wt-feature-ext-1-inproc-handler/modules/ui
|
||||
|
||||
|
||||
Test Files 14 passed (14)
|
||||
Tests 103 passed (103)
|
||||
Start at 11:59:01
|
||||
Duration 600ms (transform 319ms, setup 0ms, import 1.16s, tests 906ms, environment 3.24s)
|
||||
|
||||
knip unused exports 55 <= 55
|
||||
cd deps/agent-command && go vet ./... && go test -count=1 ./...
|
||||
ok agent-command 0.002s
|
||||
ok agent-command/conformance 0.002s
|
||||
make[1]: Leaving directory '/home/weichen/projects/Agent-System-Dev-wt-feature-ext-1-inproc-handler'
|
||||
```
|
||||
| 同步前验收 | 63a62a79ac52cc5d0b5d798dc586195ea842bd51 | e37e0cd1391180ec2367a865f33bf65d41c65804 | 2026-10-05T11:59:03Z |
|
||||
| 2026-10-05T12:03:54Z | `test -z "$(git diff origin/main..HEAD -- . ':(exclude).task')" && echo 'no product diff vs origin/main'` | 5aa1e093e5 | 0 | SELF | 0b07ccc5b4977e3b |
|
||||
|
||||
<!-- evidence:run 2026-10-05T12:03:54Z -->
|
||||
```
|
||||
$ test -z "$(git diff origin/main..HEAD -- . ':(exclude).task')" && echo 'no product diff vs origin/main'
|
||||
[exit 0 | HEAD 5aa1e093e5 | sha256:0b07ccc5b4977e3b] 输出尾部 15 行:
|
||||
no product diff vs origin/main
|
||||
```
|
||||
|
||||
## 闭合记录(card-autoclose 回填)
|
||||
|
||||
- 依据:merge 15ec9bfbc57bbc1f9930ac4c3ef91edc8460ea4a(PR #209)已包含于 origin/main,分支成果已落盘;本段为合入后回填。
|
||||
- 合并主题:Merge pull request 'Restore and complete the EXT-1 task card after branch recreation (verification round)' (#209) from feature/ext-1-inproc-handler into main
|
||||
- 归档:随闭合移入 .task/archive/;任务执行期的过程证据见原任务记录与 PR。
|
||||
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@@ -1,34 +0,0 @@
|
||||
# feature/final-reply-compose 任务卡
|
||||
|
||||
任务主记录:PR #149 https://git-home.u1680832.nyat.app:30319/weichen/Agent-System-Dev/pulls/149(merge d825067a57);状态:已完成(回填);owner:weichen
|
||||
|
||||
## 基线与授权
|
||||
|
||||
- 权威仓:ssh://git@git-ssh.u1680832.nyat.app:31411/weichen/Agent-System-Dev.git;目标分支:main;R0(initial_base_sha)= ad17b78fda8ffe206d2d0847dc49c361427ad5d2
|
||||
- 工作区:/home/weichen/projects/Agent-System-Dev-wt-feature-final-reply-compose(worktree);分支:feature/final-reply-compose
|
||||
- 授权与交付终点:实现终轮独立收尾并提 PR。合入由所有者执行。不改 agent-native。
|
||||
|
||||
## 目标与非目标
|
||||
|
||||
- 目标:终轮检查不再以用户口吻打回;用过工具的回合结束后,主模型另写一段直接回答用户的回复;交付物卡片在这轮结束、最终回复出现之后才显示;检查结果在过程区单独一行。
|
||||
- 非目标:不改回传给模型的工具结果截断、上下文裁剪、重复调用提醒和日 token 预算。纯对话回合不经过收尾。
|
||||
|
||||
## 同步记录
|
||||
|
||||
| 节点 | sync_base_sha | tested_head_sha | checked_at |
|
||||
|---|---|---|---|
|
||||
| 启动 | ad17b78fda8ffe206d2d0847dc49c361427ad5d2 | ad17b78fda8ffe206d2d0847dc49c361427ad5d2 | 2026-10-02T13:23:29Z |
|
||||
| 同步前验收 | ad17b78fda8ffe206d2d0847dc49c361427ad5d2 | c7932dd0a50732069e197bb95fff08ebb8669afe | 2026-10-02T13:43:37Z |
|
||||
| 同步前验收 | ad17b78fda8ffe206d2d0847dc49c361427ad5d2 | 5072554b097043c8918da063f32f3867f3fcbcd7 | 2026-10-02T14:07:55Z |
|
||||
|
||||
## 结果与验证
|
||||
|
||||
- 结果:Core 增加 finalizing 阶段、check 部件和 run.check。验证打回改为 system-reminder,证据按时间编号并以最后一次检查为准。runtime.composeFinal 默认开启,收尾失败时回落到草稿。前端运行中不投影交付物卡片,整理回复中作为阶段文案。收尾输出会去掉 think 块、工件编号和字节数。
|
||||
- 验证:make test 通过(2026-10-02T14:06Z,worktree,frontend 13 文件 68 项、ui 11 文件 79 项)。浏览器复现 run_102f0c09ff32:阶段文案为「整理回复中」;过程区有「终轮检查通过」;最终回复单独成段,没有「您提到」、think 块、工件编号或字节数;版本发布.docx 卡片出现在这段回复之后。
|
||||
- 影响与剩余项:task-sync 按文件名把同步行写进第一张卡片,本提交已改回本卡。合入顺序:Core #18,然后 Backend #49、UI #30、Frontend #36,最后 Dev #149。合入由所有者执行。
|
||||
|
||||
## 闭合记录(card-autoclose 回填)
|
||||
|
||||
- 依据:merge d825067a5771c77cc1f9a7edc41613015bd5784b(PR #149)已包含于 origin/main,分支成果已落盘;本段为合入后回填。
|
||||
- 合并主题:Merge pull request 'Pin the final-reply compose across core, backend, and UI' (#149) from feature/final-reply-compose into main
|
||||
- 归档:随闭合移入 .task/archive/;任务执行期的过程证据见原任务记录与 PR。
|
||||
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@@ -1,31 +0,0 @@
|
||||
# feature/full-agent-b10-r2 任务卡
|
||||
|
||||
任务主记录:PR #123 https://git-home.u1680832.nyat.app:30319/weichen/Agent-System-Dev/pulls/123(merge 8a205db102);状态:已完成(回填);owner:weichen
|
||||
|
||||
## 基线与授权
|
||||
|
||||
- 权威仓:ssh://git@git-ssh.u1680832.nyat.app:31411/weichen/Agent-System-Dev.git;目标分支:main;R0(initial_base_sha)= 47ebd71667859729a6cbe826fcddfe3da4bb5610
|
||||
- 工作区:/home/weichen/projects/Agent-System-Dev-wt-feature-full-agent-b10-r2(worktree);分支:feature/full-agent-b10-r2
|
||||
- 授权与交付终点:<本次允许的动作与终点;未授权事项写明>
|
||||
|
||||
## 目标与非目标
|
||||
|
||||
<预期结果、受影响入口/模块/契约;明确不做什么。>
|
||||
|
||||
## 同步记录
|
||||
|
||||
| 节点 | sync_base_sha | tested_head_sha | checked_at |
|
||||
|---|---|---|---|
|
||||
| 启动 | 47ebd71667859729a6cbe826fcddfe3da4bb5610 | 47ebd71667859729a6cbe826fcddfe3da4bb5610 | 2026-10-01T06:15:04Z |
|
||||
|
||||
## 结果与验证
|
||||
|
||||
- 结果:
|
||||
- 验证:
|
||||
- 影响与剩余项:
|
||||
|
||||
## 闭合记录(card-autoclose 回填)
|
||||
|
||||
- 依据:merge 8a205db1025efe92a9e469657646c0d03a228d9f(PR #123)已包含于 origin/main,分支成果已落盘;本段为合入后回填。
|
||||
- 合并主题:Merge pull request 'Point backend at the completed B10 assembly (MCP, subagent bridge, roles, skills)' (#123) from feature/full-agent-b10-r2 into main
|
||||
- 归档:随闭合移入 .task/archive/;任务执行期的过程证据见原任务记录与 PR。
|
||||
@@ -1,55 +0,0 @@
|
||||
# feature/full-agent-r1 任务卡
|
||||
|
||||
任务主记录:PR #120 https://git-home.u1680832.nyat.app:30319/weichen/Agent-System-Dev/pulls/120(merge e3941e90ca);状态:已完成(回填);owner:weichen
|
||||
|
||||
## 基线与授权
|
||||
|
||||
- 权威仓:ssh://git@git-ssh.u1680832.nyat.app:31411/weichen/Agent-System-Dev.git;目标分支:main;R0(initial_base_sha)= 76b2fb35a99e0847fff832b4e14e5766ea474c4e
|
||||
- 工作区:/home/weichen/projects/Agent-System-Dev-wt-feature-full-agent-r1(worktree);分支:feature/full-agent-r1
|
||||
- 授权与交付终点:<本次允许的动作与终点;未授权事项写明>
|
||||
|
||||
## 目标与非目标
|
||||
|
||||
<预期结果、受影响入口/模块/契约;明确不做什么。>
|
||||
|
||||
## 同步记录
|
||||
|
||||
| 节点 | sync_base_sha | tested_head_sha | checked_at |
|
||||
|---|---|---|---|
|
||||
| 启动 | 76b2fb35a99e0847fff832b4e14e5766ea474c4e | 76b2fb35a99e0847fff832b4e14e5766ea474c4e | 2026-10-01T05:18:55Z |
|
||||
|
||||
## 结果与验证
|
||||
|
||||
- 结果(四个仓、四个 PR 全部合入):
|
||||
- **Agent-Native PR #3**(main=f9ab2ef,8 提交):exec.Request v0.2(Model/ToolAllowlist/
|
||||
Skills/Budget/SessionScope/ExecutionID/Env)+ Registry.Restrict 策略层(含 mcp__x__* 命名空间
|
||||
通配);代码工具面(glob **/grep 正则+include+ignore_case/read 行范围/multi_edit 原子);
|
||||
run_command/run_python(解释器白名单、env 白名单、进程组 SIGKILL、64KB 截断、黑名单、
|
||||
脚本落盘);搜索接线(Options.Search)+ fetch_url(SSRF 逐跳硬边界、域名策略、HTML 剥离);
|
||||
MCP 客户端(stdio+Streamable HTTP、mcp__server__tool 桥接、不可信元数据上限、真实子进程
|
||||
测试);skills(SKILL.md 加载 + load_skill 渐进披露 + promptx 装配器);会话 compaction/
|
||||
元数据/崩溃半行容错;subagent 委派端口 + delegate_task;parity-matrix R15 重定基线。
|
||||
- **Agent-Squad PR #3**(main=9a402e4):RoleSpec 贯通(Tools/Skills/标识进请求、BashPermission
|
||||
三态在工厂层执行、步骤重试共享截止预算)、RegisterAgentNativeFull(AgentNativeConfig)、
|
||||
leader 轮修平(OnEvent 桥 + 完整装配)、LLM 规划器派生 schema 扩展、角色级 HitlPolicy
|
||||
合并、HTTP API 支持 mode/leader_role/max_leader_turns。
|
||||
- **Backend PR #35**(main=87a3d0d,rebase 于并行合入的 #34 之上):deps 提升至 f9ab2ef/
|
||||
9a402e4;squadadapter AgentNativeOptions 钩子 + buildBackends(默认后端不变,渐进启用);
|
||||
app.go 从 settings.models.chat/tools.tavily.*/runtime.exec/<data>/skills 组装内核配置;
|
||||
tools.InterpreterExecConfig 内核/产品共用解释器白名单。
|
||||
- **Dev 本 PR**:gitlink 三提升(agent-native/agent-squad/modules/backend)。
|
||||
- 验证:Agent-Native go vet+go test 15 包 ok;Agent-Squad 6 包 ok;Backend 19 包 ok
|
||||
(rebase 后复跑);Dev `make test` 组合全绿(core 1 + backend 19 + frontend vitest 40 +
|
||||
ui vitest 68 + agent-command 2)。安全负例:SSRF 私网/元数据端点/重定向逐跳、执行工具
|
||||
黑名单/超时杀组/取消杀组/env 隔离、MCP 不可达 fail-closed、技能未安装 fail-closed、
|
||||
allowlist 未知名 fail-closed、预算超限永久失败。
|
||||
- 影响与剩余项:run_command 不是 OS 沙箱(宿主隔离责任,文档声明);技能正文与 MCP server
|
||||
描述属提示注入面(受信根+上限);产品 squad 默认后端仍为 agent-system,角色显式声明
|
||||
Backend:"agent-native" 才走内核(parity 渐进启用条款,AB 扩面验收另行推进);部署与
|
||||
真人模型实测待所有者安排。
|
||||
|
||||
## 闭合记录(card-autoclose 回填)
|
||||
|
||||
- 依据:merge e3941e90caaad3e586870819f30884497a8b2ce7(PR #120)已包含于 origin/main,分支成果已落盘;本段为合入后回填。
|
||||
- 合并主题:Merge pull request 'Land the full-agent capability batch (B1-B10) across agent-native, agent-squad, and backend' (#120) from feature/full-agent-r1 into main
|
||||
- 归档:随闭合移入 .task/archive/;任务执行期的过程证据见原任务记录与 PR。
|
||||
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user