mirror of
https://github.com/fabro-sh/fabro.git
synced 2026-09-10 22:43:37 +00:00
parent
3703ff6004
commit
2599049c2e
5 changed files with 146 additions and 9 deletions
135
run.json
135
run.json
|
|
@ -517,7 +517,7 @@
|
|||
"kind": "running"
|
||||
},
|
||||
"status_updated_at": "2026-05-22T19:28:19.832547Z",
|
||||
"last_event_at": "2026-05-22T19:28:21.844455Z",
|
||||
"last_event_at": "2026-05-22T19:28:27.567156Z",
|
||||
"pending_control": null,
|
||||
"checkpoints": [
|
||||
{
|
||||
|
|
@ -558,9 +558,9 @@
|
|||
"diff": {}
|
||||
},
|
||||
{
|
||||
"seq": 0,
|
||||
"seq": 27,
|
||||
"checkpoint": {
|
||||
"timestamp": "2026-05-22T19:28:23.378123Z",
|
||||
"timestamp": "2026-05-22T19:28:27.565557Z",
|
||||
"current_node": "toolchain",
|
||||
"completed_nodes": [
|
||||
"start",
|
||||
|
|
@ -568,7 +568,65 @@
|
|||
],
|
||||
"node_retries": {},
|
||||
"context_values": {
|
||||
"internal.fidelity": "compact",
|
||||
"command.output": "blob://sha256/fc14b2ba2d770e5cd3169df7a29525c962adfc4cfa3097b9098c63ebd61a748c",
|
||||
"failure_signature": "",
|
||||
"graph.model_stylesheet": "\n * { model: claude-opus-4-7; }\n ",
|
||||
"current_node": "toolchain",
|
||||
"failure_class": "",
|
||||
"internal.work_dir": "/home/daytona/workspace/fabro",
|
||||
"internal.run_id": "01KS8JHBKEC0JBH6J6MYN37TR5",
|
||||
"internal.node_visit_count": 1,
|
||||
"internal.retry_count.start": 0,
|
||||
"thread.start.current_node": "toolchain",
|
||||
"internal.thread_id": "start",
|
||||
"graph.rankdir": "LR",
|
||||
"outcome": "succeeded",
|
||||
"graph.goal": "Implement this inline plan:\n\n# Add `fabro_run_get` for Read-Only Run Inspection\n\n## Summary\nAdd a new MCP/Fabro agent tool, `fabro_run_get`, that is safe to expose in read-only contexts. It will return the current run summary, projection, and pending questions without any mutation capability. Keep `fabro_run_interact` as the operational/human-loop tool, including `get_questions` for agents that are allowed to answer gates, but stop exposing it to Ask Fabro.\n\n## Key Changes\n- Add `fabro_run_get` to `fabro-tool` with input `{ \"run_id\": \"<selector>\" }`.\n- Return a rich read-only payload: resolved `run_id`, run `summary`, run `projection`, and `questions`.\n- Register `fabro_run_get` in the shared Fabro run tool definitions, MCP stdio server, and LLM tool dispatch.\n- Update Ask Fabro to register and allow only `fabro_run_get` plus `fabro_run_events` for run inspection.\n- Keep `fabro_run_interact` backward compatible, including existing `get`, `get_questions`, and mutating actions, but do not expose it in read-only Ask Fabro sessions.\n- Update public MCP docs to list `fabro_run_get` and describe `fabro_run_interact` as control/interaction oriented rather than read-only inspection.\n\n## Implementation Notes\n- Implement the read-only tool in `lib/crates/fabro-tool/src/get.rs`, following the same validation/result style as existing run tools.\n- Wire constants, exports, and tool schema registration through `lib/crates/fabro-tool/src/common.rs` and `lib/crates/fabro-tool/src/lib.rs`.\n- Add MCP and agent dispatch branches in `lib/crates/fabro-mcp-server/src/server.rs` and `lib/crates/fabro-workflow/src/handler/llm/api.rs`.\n- Change `lib/crates/fabro-server/src/server/handler/sessions.rs` so Ask Fabro’s tool registry and access policy use `FABRO_RUN_GET_TOOL_NAME` instead of `FABRO_RUN_INTERACT_TOOL_NAME`.\n\n## Test Plan\n- Add `fabro_run_get` schema/tool-list coverage in `lib/crates/fabro-cli/tests/it/cmd/mcp.rs`; update expected tool counts.\n- Add an MCP integration test showing `fabro_run_get` resolves a selector and returns summary, projection, and questions.\n- Add Ask Fabro tests showing exposed tool names include `fabro_run_get` and exclude `fabro_run_interact`.\n- Add policy coverage showing Ask Fabro denies `fabro_run_interact`.\n- Run focused tests for `fabro-tool`, MCP CLI tests, and Ask Fabro session tests; then run formatting/clippy if implementation touches Rust style broadly.\n\n## Assumptions\n- `fabro_run_interact.get` stays for compatibility in this change.\n- `get_questions` stays in `fabro_run_interact` because answering gates is still part of operational interaction.\n- Read-only safety is enforced primarily by tool exposure: Ask Fabro should not receive mixed read/write tools.",
|
||||
"internal.retry_count.toolchain": 0
|
||||
},
|
||||
"node_outcomes": {
|
||||
"toolchain": {
|
||||
"status": "succeeded",
|
||||
"context_updates": {
|
||||
"command.output": "blob://sha256/fc14b2ba2d770e5cd3169df7a29525c962adfc4cfa3097b9098c63ebd61a748c"
|
||||
},
|
||||
"notes": "Script completed: command -v cargo >/dev/null || { curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y && sudo ln -sf $HOME/.cargo/bin/* /usr/local/bin/; }; cargo --version 2>&1",
|
||||
"usage": null
|
||||
},
|
||||
"start": {
|
||||
"status": "succeeded",
|
||||
"usage": null
|
||||
}
|
||||
},
|
||||
"next_node_id": "preflight_compile",
|
||||
"git_commit_sha": "8213a4574f08ba1fd58a8c5d44ffd74a36960801",
|
||||
"node_visits": {
|
||||
"toolchain": 1,
|
||||
"start": 1
|
||||
}
|
||||
},
|
||||
"diff": {
|
||||
"summary": {
|
||||
"files_changed": 0,
|
||||
"additions": 0,
|
||||
"deletions": 0
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"seq": 0,
|
||||
"checkpoint": {
|
||||
"timestamp": "2026-05-22T19:30:29.572378Z",
|
||||
"current_node": "preflight_compile",
|
||||
"completed_nodes": [
|
||||
"start",
|
||||
"toolchain",
|
||||
"preflight_compile"
|
||||
],
|
||||
"node_retries": {},
|
||||
"context_values": {
|
||||
"current_node": "preflight_compile",
|
||||
"graph.rankdir": "LR",
|
||||
"failure_class": "",
|
||||
"internal.fidelity": "compact",
|
||||
|
|
@ -581,15 +639,25 @@
|
|||
"failure_signature": "",
|
||||
"graph.goal": "Implement this inline plan:\n\n# Add `fabro_run_get` for Read-Only Run Inspection\n\n## Summary\nAdd a new MCP/Fabro agent tool, `fabro_run_get`, that is safe to expose in read-only contexts. It will return the current run summary, projection, and pending questions without any mutation capability. Keep `fabro_run_interact` as the operational/human-loop tool, including `get_questions` for agents that are allowed to answer gates, but stop exposing it to Ask Fabro.\n\n## Key Changes\n- Add `fabro_run_get` to `fabro-tool` with input `{ \"run_id\": \"<selector>\" }`.\n- Return a rich read-only payload: resolved `run_id`, run `summary`, run `projection`, and `questions`.\n- Register `fabro_run_get` in the shared Fabro run tool definitions, MCP stdio server, and LLM tool dispatch.\n- Update Ask Fabro to register and allow only `fabro_run_get` plus `fabro_run_events` for run inspection.\n- Keep `fabro_run_interact` backward compatible, including existing `get`, `get_questions`, and mutating actions, but do not expose it in read-only Ask Fabro sessions.\n- Update public MCP docs to list `fabro_run_get` and describe `fabro_run_interact` as control/interaction oriented rather than read-only inspection.\n\n## Implementation Notes\n- Implement the read-only tool in `lib/crates/fabro-tool/src/get.rs`, following the same validation/result style as existing run tools.\n- Wire constants, exports, and tool schema registration through `lib/crates/fabro-tool/src/common.rs` and `lib/crates/fabro-tool/src/lib.rs`.\n- Add MCP and agent dispatch branches in `lib/crates/fabro-mcp-server/src/server.rs` and `lib/crates/fabro-workflow/src/handler/llm/api.rs`.\n- Change `lib/crates/fabro-server/src/server/handler/sessions.rs` so Ask Fabro’s tool registry and access policy use `FABRO_RUN_GET_TOOL_NAME` instead of `FABRO_RUN_INTERACT_TOOL_NAME`.\n\n## Test Plan\n- Add `fabro_run_get` schema/tool-list coverage in `lib/crates/fabro-cli/tests/it/cmd/mcp.rs`; update expected tool counts.\n- Add an MCP integration test showing `fabro_run_get` resolves a selector and returns summary, projection, and questions.\n- Add Ask Fabro tests showing exposed tool names include `fabro_run_get` and exclude `fabro_run_interact`.\n- Add policy coverage showing Ask Fabro denies `fabro_run_interact`.\n- Run focused tests for `fabro-tool`, MCP CLI tests, and Ask Fabro session tests; then run formatting/clippy if implementation touches Rust style broadly.\n\n## Assumptions\n- `fabro_run_interact.get` stays for compatibility in this change.\n- `get_questions` stays in `fabro_run_interact` because answering gates is still part of operational interaction.\n- Read-only safety is enforced primarily by tool exposure: Ask Fabro should not receive mixed read/write tools.",
|
||||
"graph.model_stylesheet": "\n * { model: claude-opus-4-7; }\n ",
|
||||
"internal.thread_id": "start",
|
||||
"internal.thread_id": "toolchain",
|
||||
"outcome": "succeeded",
|
||||
"command.output": "blob://sha256/fc14b2ba2d770e5cd3169df7a29525c962adfc4cfa3097b9098c63ebd61a748c"
|
||||
"thread.toolchain.current_node": "preflight_compile",
|
||||
"internal.retry_count.preflight_compile": 0,
|
||||
"command.output": "blob://sha256/12ae32cb1ec02d01eda3581b127c1fee3b0dc53572ed6baf239721a03d82e126"
|
||||
},
|
||||
"node_outcomes": {
|
||||
"start": {
|
||||
"status": "succeeded",
|
||||
"usage": null
|
||||
},
|
||||
"preflight_compile": {
|
||||
"status": "succeeded",
|
||||
"context_updates": {
|
||||
"command.output": "blob://sha256/12ae32cb1ec02d01eda3581b127c1fee3b0dc53572ed6baf239721a03d82e126"
|
||||
},
|
||||
"notes": "Script completed: cargo check -q --workspace 2>&1",
|
||||
"usage": null
|
||||
},
|
||||
"toolchain": {
|
||||
"status": "succeeded",
|
||||
"context_updates": {
|
||||
|
|
@ -599,9 +667,10 @@
|
|||
"usage": null
|
||||
}
|
||||
},
|
||||
"next_node_id": "preflight_compile",
|
||||
"next_node_id": "preflight_lint",
|
||||
"node_visits": {
|
||||
"start": 1,
|
||||
"preflight_compile": 1,
|
||||
"toolchain": 1
|
||||
}
|
||||
},
|
||||
|
|
@ -633,7 +702,12 @@
|
|||
"first_event_seq": 20,
|
||||
"prompt": null,
|
||||
"response": null,
|
||||
"completion": null,
|
||||
"completion": {
|
||||
"outcome": "succeeded",
|
||||
"notes": "Script completed: command -v cargo >/dev/null || { curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y && sudo ln -sf $HOME/.cargo/bin/* /usr/local/bin/; }; cargo --version 2>&1",
|
||||
"failure_reason": null,
|
||||
"timestamp": "2026-05-22T19:28:23.376630Z"
|
||||
},
|
||||
"provider_used": null,
|
||||
"diff": null,
|
||||
"script_invocation": {
|
||||
|
|
@ -641,11 +715,27 @@
|
|||
"command": "exec 2>&1\ncommand -v cargo >/dev/null || { curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y && sudo ln -sf $HOME/.cargo/bin/* /usr/local/bin/; }; cargo --version 2>&1",
|
||||
"language": "shell"
|
||||
},
|
||||
"script_timing": null,
|
||||
"script_timing": {
|
||||
"output": "blob://sha256/fc14b2ba2d770e5cd3169df7a29525c962adfc4cfa3097b9098c63ebd61a748c",
|
||||
"exit_code": 0,
|
||||
"duration_ms": 1523,
|
||||
"termination": "exited",
|
||||
"output_bytes": 36,
|
||||
"live_streaming": true
|
||||
},
|
||||
"parallel_results": null,
|
||||
"output": null,
|
||||
"output_bytes": 36,
|
||||
"live_streaming": true,
|
||||
"termination": "exited",
|
||||
"started_at": "2026-05-22T19:28:21.844371Z",
|
||||
"handler": "command",
|
||||
"timing": {
|
||||
"wall_time_ms": 1531,
|
||||
"inference_time_ms": 0,
|
||||
"tool_time_ms": 0,
|
||||
"active_time_ms": 0
|
||||
},
|
||||
"usage": {
|
||||
"input_tokens": 0,
|
||||
"output_tokens": 0,
|
||||
|
|
@ -654,7 +744,7 @@
|
|||
"cache_read_tokens": 0,
|
||||
"cache_write_tokens": 0
|
||||
},
|
||||
"state": "running"
|
||||
"state": "succeeded"
|
||||
},
|
||||
"start@1": {
|
||||
"first_event_seq": 16,
|
||||
|
|
@ -689,6 +779,33 @@
|
|||
"cache_write_tokens": 0
|
||||
},
|
||||
"state": "succeeded"
|
||||
},
|
||||
"preflight_compile@1": {
|
||||
"first_event_seq": 30,
|
||||
"prompt": null,
|
||||
"response": null,
|
||||
"completion": null,
|
||||
"provider_used": null,
|
||||
"diff": null,
|
||||
"script_invocation": {
|
||||
"script": "cargo check -q --workspace 2>&1",
|
||||
"command": "exec 2>&1\ncargo check -q --workspace 2>&1",
|
||||
"language": "shell"
|
||||
},
|
||||
"script_timing": null,
|
||||
"parallel_results": null,
|
||||
"output": null,
|
||||
"started_at": "2026-05-22T19:28:27.566756Z",
|
||||
"handler": "command",
|
||||
"usage": {
|
||||
"input_tokens": 0,
|
||||
"output_tokens": 0,
|
||||
"total_tokens": 0,
|
||||
"reasoning_tokens": 0,
|
||||
"cache_read_tokens": 0,
|
||||
"cache_write_tokens": 0
|
||||
},
|
||||
"state": "running"
|
||||
}
|
||||
}
|
||||
}
|
||||
1
stages/002-toolchain@1/output.log
Normal file
1
stages/002-toolchain@1/output.log
Normal file
|
|
@ -0,0 +1 @@
|
|||
blob://sha256/fc14b2ba2d770e5cd3169df7a29525c962adfc4cfa3097b9098c63ebd61a748c
|
||||
8
stages/002-toolchain@1/script_timing.json
Normal file
8
stages/002-toolchain@1/script_timing.json
Normal file
|
|
@ -0,0 +1,8 @@
|
|||
{
|
||||
"output": "blob://sha256/fc14b2ba2d770e5cd3169df7a29525c962adfc4cfa3097b9098c63ebd61a748c",
|
||||
"exit_code": 0,
|
||||
"duration_ms": 1523,
|
||||
"termination": "exited",
|
||||
"output_bytes": 36,
|
||||
"live_streaming": true
|
||||
}
|
||||
6
stages/002-toolchain@1/status.json
Normal file
6
stages/002-toolchain@1/status.json
Normal file
|
|
@ -0,0 +1,6 @@
|
|||
{
|
||||
"outcome": "succeeded",
|
||||
"notes": "Script completed: command -v cargo >/dev/null || { curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y && sudo ln -sf $HOME/.cargo/bin/* /usr/local/bin/; }; cargo --version 2>&1",
|
||||
"failure_reason": null,
|
||||
"timestamp": "2026-05-22T19:28:23.376630Z"
|
||||
}
|
||||
5
stages/003-preflight_compile@1/script_invocation.json
Normal file
5
stages/003-preflight_compile@1/script_invocation.json
Normal file
|
|
@ -0,0 +1,5 @@
|
|||
{
|
||||
"script": "cargo check -q --workspace 2>&1",
|
||||
"command": "exec 2>&1\ncargo check -q --workspace 2>&1",
|
||||
"language": "shell"
|
||||
}
|
||||
Loading…
Add table
Reference in a new issue