Skip to content

Commit ffa4811

Browse files
committed
fix(core): apply security/robustness fix round and sync fork
- security: redact provider API keys in /provider responses; timing-safe instance auth - contract: converge v2.session.messages dual operationId; move message cursor + default limit into protocol/server; regenerate SDK - runner: read SessionToolPermissions for subagent read-only defaults; bound repeated tool calls; title generation; accumulate step usage; settleWith tolerates StorageError - cleanup: remove fake spawn_agent chain, subagent fork leftovers, dead code files; prune unused audio/sst-env; update merge-clean paths
1 parent a9d1eb0 commit ffa4811

144 files changed

Lines changed: 2972 additions & 4332 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

AGENTS.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
- To regenerate the legacy JavaScript SDK, run `./packages/sdk/js/script/build.ts`.
2-
- After changing the public Protocol or Server `HttpApi`, run `bun run generate` from `packages/client`. Do not edit `src/generated` or `src/generated-effect` directly.
2+
- After changing the public Protocol or Server `HttpApi`, regenerate the OpenAPI spec with `bun dev generate` from `packages/opencode` (the CLI `generate` command at `packages/opencode/src/cli/cmd/generate.ts`; the SDK build consumes it via `packages/sdk/js/script/build.ts`). Do not edit `src/generated` or `src/generated-effect` directly.
33
- Keep runtime dependencies directed from Schema to Core and Protocol, then from Core and Protocol to Server. Client runtime code may depend on Schema and Protocol but never Core or Server; `sdk-next` composes Client, Core, and Server.
44
- The default branch in this repo is `dev`.
55
- Local `main` ref may not exist; use `dev` or `origin/dev` for diffs.

MERGE.md

Lines changed: 72 additions & 0 deletions
Large diffs are not rendered by default.

bun.lock

Lines changed: 1086 additions & 1086 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

packages/codemode/sst-env.d.ts

Lines changed: 0 additions & 10 deletions
This file was deleted.

packages/core/src/data-migration.sql.ts

Lines changed: 0 additions & 6 deletions
This file was deleted.

packages/core/src/memory/dream.ts

Lines changed: 0 additions & 131 deletions
This file was deleted.
Lines changed: 155 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,155 @@
1+
export * as BashArity from "./arity"
2+
3+
const ARITY: Record<string, number> = {
4+
cat: 1, // cat file.txt
5+
cd: 1, // cd /path/to/dir
6+
chmod: 1, // chmod 755 script.sh
7+
chown: 1, // chown user:group file.txt
8+
cp: 1, // cp source.txt dest.txt
9+
echo: 1, // echo "hello world"
10+
env: 1, // env
11+
export: 1, // export PATH=/usr/bin
12+
grep: 1, // grep pattern file.txt
13+
kill: 1, // kill 1234
14+
killall: 1, // killall process
15+
ln: 1, // ln -s source target
16+
ls: 1, // ls -la
17+
mkdir: 1, // mkdir new-dir
18+
mv: 1, // mv old.txt new.txt
19+
ps: 1, // ps aux
20+
pwd: 1, // pwd
21+
rm: 1, // rm file.txt
22+
rmdir: 1, // rmdir empty-dir
23+
sleep: 1, // sleep 5
24+
source: 1, // source ~/.bashrc
25+
tail: 1, // tail -f log.txt
26+
touch: 1, // touch file.txt
27+
unset: 1, // unset VAR
28+
which: 1, // which node
29+
aws: 3, // aws s3 ls
30+
az: 3, // az storage blob list
31+
bazel: 2, // bazel build
32+
brew: 2, // brew install node
33+
bun: 2, // bun install
34+
"bun run": 3, // bun run dev
35+
"bun x": 3, // bun x vite
36+
cargo: 2, // cargo build
37+
"cargo add": 3, // cargo add tokio
38+
"cargo run": 3, // cargo run main
39+
cdk: 2, // cdk deploy
40+
cf: 2, // cf push app
41+
cmake: 2, // cmake build
42+
composer: 2, // composer require laravel
43+
consul: 2, // consul members
44+
"consul kv": 3, // consul kv get config/app
45+
crictl: 2, // crictl ps
46+
deno: 2, // deno run server.ts
47+
"deno task": 3, // deno task dev
48+
doctl: 3, // doctl kubernetes cluster list
49+
docker: 2, // docker run nginx
50+
"docker builder": 3, // docker builder prune
51+
"docker compose": 3, // docker compose up
52+
"docker container": 3, // docker container ls
53+
"docker image": 3, // docker image prune
54+
"docker network": 3, // docker network inspect
55+
"docker volume": 3, // docker volume ls
56+
eksctl: 2, // eksctl get clusters
57+
"eksctl create": 3, // eksctl create cluster
58+
firebase: 2, // firebase deploy
59+
flyctl: 2, // flyctl deploy
60+
gcloud: 3, // gcloud compute instances list
61+
gh: 3, // gh pr list
62+
git: 2, // git checkout main
63+
"git config": 3, // git config user.name
64+
"git remote": 3, // git remote add origin
65+
"git stash": 3, // git stash pop
66+
go: 2, // go build
67+
gradle: 2, // gradle build
68+
helm: 2, // helm install mychart
69+
heroku: 2, // heroku logs
70+
hugo: 2, // hugo new site blog
71+
ip: 2, // ip link show
72+
"ip addr": 3, // ip addr show
73+
"ip link": 3, // ip link set eth0 up
74+
"ip netns": 3, // ip netns exec foo bash
75+
"ip route": 3, // ip route add default via 1.1.1.1
76+
kind: 2, // kind delete cluster
77+
"kind create": 3, // kind create cluster
78+
kubectl: 2, // kubectl get pods
79+
"kubectl kustomize": 3, // kubectl kustomize overlays/dev
80+
"kubectl rollout": 3, // kubectl rollout restart deploy/api
81+
kustomize: 2, // kustomize build .
82+
make: 2, // make build
83+
mc: 2, // mc ls myminio
84+
"mc admin": 3, // mc admin info myminio
85+
minikube: 2, // minikube start
86+
mongosh: 2, // mongosh test
87+
mysql: 2, // mysql -u root
88+
mvn: 2, // mvn compile
89+
ng: 2, // ng generate component home
90+
npm: 2, // npm install
91+
"npm exec": 3, // npm exec vite
92+
"npm init": 3, // npm init vue
93+
"npm run": 3, // npm run dev
94+
"npm view": 3, // npm view react version
95+
nvm: 2, // nvm use 18
96+
nx: 2, // nx build
97+
openssl: 2, // openssl genrsa 2048
98+
"openssl req": 3, // openssl req -new -key key.pem
99+
"openssl x509": 3, // openssl x509 -in cert.pem
100+
pip: 2, // pip install numpy
101+
pipenv: 2, // pipenv install flask
102+
pnpm: 2, // pnpm install
103+
"pnpm dlx": 3, // pnpm dlx create-next-app
104+
"pnpm exec": 3, // pnpm exec vite
105+
"pnpm run": 3, // pnpm run dev
106+
poetry: 2, // poetry add requests
107+
podman: 2, // podman run alpine
108+
"podman container": 3, // podman container ls
109+
"podman image": 3, // podman image prune
110+
psql: 2, // psql -d mydb
111+
pulumi: 2, // pulumi up
112+
"pulumi stack": 3, // pulumi stack output
113+
pyenv: 2, // pyenv install 3.11
114+
python: 2, // python -m venv env
115+
rake: 2, // rake db:migrate
116+
rbenv: 2, // rbenv install 3.2.0
117+
"redis-cli": 2, // redis-cli ping
118+
rustup: 2, // rustup update
119+
serverless: 2, // serverless invoke
120+
sfdx: 3, // sfdx force:org:list
121+
skaffold: 2, // skaffold dev
122+
sls: 2, // sls deploy
123+
sst: 2, // sst deploy
124+
swift: 2, // swift build
125+
systemctl: 2, // systemctl restart nginx
126+
terraform: 2, // terraform apply
127+
"terraform workspace": 3, // terraform workspace select prod
128+
tmux: 2, // tmux new -s dev
129+
turbo: 2, // turbo run build
130+
ufw: 2, // ufw allow 22
131+
vault: 2, // vault login
132+
"vault auth": 3, // vault auth list
133+
"vault kv": 3, // vault kv get secret/api
134+
vercel: 2, // vercel deploy
135+
volta: 2, // volta install node
136+
wp: 2, // wp plugin install
137+
yarn: 2, // yarn add react
138+
"yarn dlx": 3, // yarn dlx create-react-app
139+
"yarn run": 3, // yarn run dev
140+
}
141+
142+
/**
143+
* Longest-matching-prefix command arity: how many tokens make up the
144+
* human-understandable command. `git commit -m "x"` -> `git commit`,
145+
* `npm run dev` -> `npm run dev`.
146+
*/
147+
export function prefix(tokens: readonly string[]): readonly string[] {
148+
for (let len = tokens.length; len > 0; len--) {
149+
const prefix = tokens.slice(0, len).join(" ")
150+
const arity = ARITY[prefix]
151+
if (arity !== undefined) return tokens.slice(0, arity)
152+
}
153+
if (tokens.length === 0) return []
154+
return tokens.slice(0, 1)
155+
}

0 commit comments

Comments
 (0)