mirror of
https://github.com/coder/coder.git
synced 2026-06-02 20:48:20 +00:00
e00e85765b
This PR merges code from `coder/aibridge` repository into `coder/coder`. It was split into 4 PRs for easier review but stacked PRs will need to be merged into this PR so all checks pass. * https://github.com/coder/coder/pull/24190 -> raw code copy (this PR, before merging PRs on top of it, it was just 1 commit: https://github.com/coder/coder/commit/70d33f33200c7e77df910957595715f81f9bec24) * https://github.com/coder/coder/pull/24570 -> update imports in `coder/coder` to use copied code * https://github.com/coder/coder/pull/24586 -> linter fixes and CI integration (also added README.md) * https://github.com/coder/coder/pull/24571 -> added exclude to scripts/check_emdash.sh check Original PR message (before PR squash): Moves coder/aibridge code into coder/coder repository. Omitted files: - `go.mod`, `go.sum`, `.gitignore`, `.github/workflows/ci.yml,` `Makefile`, `LICENSE`, `README.md` (modified README.md is added later) - `.github`, `example`, `buildinfo,` `scripts` directories Simple verification script (will list omitted files) ``` tmp=$(mktemp -d) echo "$tmp" git clone --depth=1 https://github.com/coder/aibridge "$tmp/aibridge" git clone --depth=1 --branch pb/aibridge-code-move https://github.com/coder/coder "$tmp/coder" diff -rq --exclude=.git "$tmp/aibridge" "$tmp/coder/aibridge" # rm -rf "$tmp" ```
182 lines
6.0 KiB
Plaintext
182 lines
6.0 KiB
Plaintext
Claude Code has builtin tools to (e.g.) explore the filesystem.
|
|
|
|
-- request --
|
|
{
|
|
"model": "claude-sonnet-4-20250514",
|
|
"max_tokens": 1024,
|
|
"tools": [
|
|
{
|
|
"name": "Read",
|
|
"description": "Read the contents of a file at the given path.",
|
|
"input_schema": {
|
|
"type": "object",
|
|
"properties": {
|
|
"file_path": {
|
|
"type": "string",
|
|
"description": "The absolute path to the file to read"
|
|
}
|
|
},
|
|
"required": ["file_path"]
|
|
}
|
|
}
|
|
],
|
|
"messages": [
|
|
{
|
|
"role": "user",
|
|
"content": "read the foo file"
|
|
}
|
|
]
|
|
}
|
|
|
|
-- streaming --
|
|
event: message_start
|
|
data: {"type":"message_start","message":{"id":"msg_015SQewixvT9s4cABCVvUE6g","type":"message","role":"assistant","model":"claude-sonnet-4-20250514","content":[],"stop_reason":null,"stop_sequence":null,"usage":{"input_tokens":2,"cache_creation_input_tokens":22,"cache_read_input_tokens":13993,"output_tokens":5,"service_tier":"standard"}} }
|
|
|
|
event: content_block_start
|
|
data: {"type":"content_block_start","index":0,"content_block":{"type":"thinking","thinking":""}}
|
|
|
|
event: content_block_delta
|
|
data: {"type":"content_block_delta","index":0,"delta":{"type":"thinking_delta","thinking":"The user wants me to read"} }
|
|
|
|
event: content_block_delta
|
|
data: {"type":"content_block_delta","index":0,"delta":{"type":"thinking_delta","thinking":" a"} }
|
|
|
|
event: content_block_delta
|
|
data: {"type":"content_block_delta","index":0,"delta":{"type":"thinking_delta","thinking":" file called \""} }
|
|
|
|
event: content_block_delta
|
|
data: {"type":"content_block_delta","index":0,"delta":{"type":"thinking_delta","thinking":"foo\"."} }
|
|
|
|
event: content_block_delta
|
|
data: {"type":"content_block_delta","index":0,"delta":{"type":"thinking_delta","thinking":" Let me find"} }
|
|
|
|
event: content_block_delta
|
|
data: {"type":"content_block_delta","index":0,"delta":{"type":"thinking_delta","thinking":" and"} }
|
|
|
|
event: content_block_delta
|
|
data: {"type":"content_block_delta","index":0,"delta":{"type":"thinking_delta","thinking":" read it."} }
|
|
|
|
event: content_block_delta
|
|
data: {"type":"content_block_delta","index":0,"delta":{"type":"thinking_delta","thinking":""} }
|
|
|
|
event: content_block_delta
|
|
data: {"type":"content_block_delta","index":0,"delta":{"type":"signature_delta","signature":"Eu8BCkYICxgCKkBR++kFr7Za2JhF/9OCpjEc46/EcipL75RK+MEbxJ/VBJPWQTWrNGfwb5khWYJtKEpjjkH07cR/MQvThfb7t7CkEgwU4pKwL7NuZXd1/wgaDILyd0bYMqQovWo3dyIw95Ny7yZPljNBDLsvMBdBr7w+RtbU+AlSftjBuBZHp0VzI54/W+9u6f7qfx0JXsVBKldqqOjFvewT8Xm6Qp/77g6/j0zBiuAQABj/6vS1qATjd8KSIFDg9G/tCtzwmV/T/egmzswWd5CBiAhW6lgJgEDRr+gRUrFSOB7o3hypW8FUnUrr1JtzzwMYAQ=="}}
|
|
|
|
event: content_block_stop
|
|
data: {"type":"content_block_stop","index":0}
|
|
|
|
event: content_block_start
|
|
data: {"type":"content_block_start","index":1,"content_block":{"type":"tool_use","id":"toolu_01RX68weRSquLx6HUTj65iBo","name":"Read","input":{}}}
|
|
|
|
event: ping
|
|
data: {"type": "ping"}
|
|
|
|
event: content_block_delta
|
|
data: {"type":"content_block_delta","index":1,"delta":{"type":"input_json_delta","partial_json":""} }
|
|
|
|
event: content_block_delta
|
|
data: {"type":"content_block_delta","index":1,"delta":{"type":"input_json_delta","partial_json":"{\"file_path\": \"/tmp/blah/foo"} }
|
|
|
|
event: content_block_delta
|
|
data: {"type":"content_block_delta","index":1,"delta":{"type":"input_json_delta","partial_json":"\"}"} }
|
|
|
|
event: content_block_stop
|
|
data: {"type":"content_block_stop","index":1 }
|
|
|
|
event: message_delta
|
|
data: {"type":"message_delta","delta":{"stop_reason":"tool_use","stop_sequence":null},"usage":{"output_tokens":61} }
|
|
|
|
event: message_stop
|
|
data: {"type":"message_stop" }
|
|
|
|
|
|
-- non-streaming --
|
|
{
|
|
"id": "msg_01JHKqEmh7wYuPXqUWUvusfL",
|
|
"container": {
|
|
"id": "",
|
|
"expires_at": "0001-01-01T00:00:00Z"
|
|
},
|
|
"content": [
|
|
{
|
|
"type": "thinking",
|
|
"thinking": "The user wants me to read a file called \"foo\". Let me find and read it.",
|
|
"signature": "Eu8BCkYICxgCKkBR++kFr7Za2JhF/9OCpjEc46/EcipL75RK+MEbxJ/VBJPWQTWrNGfwb5khWYJtKEpjjkH07cR/MQvThfb7t7CkEgwU4pKwL7NuZXd1/wgaDILyd0bYMqQovWo3dyIw95Ny7yZPljNBDLsvMBdBr7w+RtbU+AlSftjBuBZHp0VzI54/W+9u6f7qfx0JXsVBKldqqOjFvewT8Xm6Qp/77g6/j0zBiuAQABj/6vS1qATjd8KSIFDg9G/tCtzwmV/T/egmzswWd5CBiAhW6lgJgEDRr+gRUrFSOB7o3hypW8FUnUrr1JtzzwMYAQ=="
|
|
},
|
|
{
|
|
"citations": null,
|
|
"text": "I can see there's a file named `foo` in the `/tmp/blah` directory. Let me read it.",
|
|
"type": "text",
|
|
"id": "",
|
|
"input": null,
|
|
"name": "",
|
|
"content": {
|
|
"OfWebSearchResultBlockArray": null,
|
|
"OfString": "",
|
|
"OfMCPToolResultBlockContent": null,
|
|
"error_code": "",
|
|
"type": "",
|
|
"content": null,
|
|
"return_code": 0,
|
|
"stderr": "",
|
|
"stdout": ""
|
|
},
|
|
"tool_use_id": "",
|
|
"server_name": "",
|
|
"is_error": false,
|
|
"file_id": "",
|
|
"signature": "",
|
|
"thinking": "",
|
|
"data": ""
|
|
},
|
|
{
|
|
"citations": null,
|
|
"text": "",
|
|
"type": "tool_use",
|
|
"id": "toolu_01AusGgY5aKFhzWrFBv9JfHq",
|
|
"input": {
|
|
"file_path": "/tmp/blah/foo"
|
|
},
|
|
"name": "Read",
|
|
"content": {
|
|
"OfWebSearchResultBlockArray": null,
|
|
"OfString": "",
|
|
"OfMCPToolResultBlockContent": null,
|
|
"error_code": "",
|
|
"type": "",
|
|
"content": null,
|
|
"return_code": 0,
|
|
"stderr": "",
|
|
"stdout": ""
|
|
},
|
|
"tool_use_id": "",
|
|
"server_name": "",
|
|
"is_error": false,
|
|
"file_id": "",
|
|
"signature": "",
|
|
"thinking": "",
|
|
"data": ""
|
|
}
|
|
],
|
|
"model": "claude-sonnet-4-20250514",
|
|
"role": "assistant",
|
|
"stop_reason": "tool_use",
|
|
"stop_sequence": "",
|
|
"type": "message",
|
|
"usage": {
|
|
"cache_creation": {
|
|
"ephemeral_1h_input_tokens": 0,
|
|
"ephemeral_5m_input_tokens": 0
|
|
},
|
|
"cache_creation_input_tokens": 0,
|
|
"cache_read_input_tokens": 23490,
|
|
"input_tokens": 5,
|
|
"output_tokens": 84,
|
|
"server_tool_use": {
|
|
"web_search_requests": 0
|
|
},
|
|
"service_tier": "standard"
|
|
}
|
|
}
|
|
|