Give the interactive session the `delegate` tool it was missing Both entry points in `interactive.rs` built their registry with `HarnessToolRegistry::new(None)`, which carries no delegation gate. So `oa coder --headless` could start children and the session a person actually sits in could not. The symptom is the kind that hides: a missing tool looks exactly like a model choosing not to call one. Nothing errors, nothing is logged, and the reply just never delegates. Both paths now share one `session_tools`, so the two cannot drift apart again, and the gate carries this session's lane and credential rather than the defaults. Children still get no `delegate` themselves, so recursive fan-out stays impossible. Two tests: one that the interactive registry lists `delegate`, one that the gate carries the session's own lane and token rather than a default. The second matters because a gate naming the wrong lane would start children somewhere other than where the session runs, which is worse than having no gate. Refs openagents#71, openagents#84.
Give the interactive session the `delegate` tool it was missing
Deploy story
What this commit did to the running system — joined from the forge receipt chain, the part a commit page elsewhere cannot show.
Not deployed through the forge lane
No push, promotion, build, or deploy receipt references this commit (receipts are scanned over a bounded recent window). Changes shipped by full node replacement carry their proof in the release gate receipt instead.
Changed files
-
modified
crates/openagents-cli/src/interactive.rs
Diff
1 file changed, +61 -4
crates/openagents-cli/src/interactive.rs modified +61 -4
@@ -21,7 +21,7 @@
| 21 | 21 |
|
| 22 | 22 |
|
| 23 | 23 |
|
| 24 |
|
|
| 24 |
|
|
| 25 | 25 |
|
| 26 | 26 |
|
| 27 | 27 |
|
@@ -395,17 +395,37 @@ fn install_panic_hook() {
| 395 | 395 |
|
| 396 | 396 |
|
| 397 | 397 |
|
| 398 |
|
|
| 399 |
|
|
| 400 |
|
|
| 401 |
|
|
| 402 |
|
|
| 403 |
|
|
| 404 |
|
|
| 405 |
|
|
| 406 |
|
|
| 407 |
|
|
| 408 |
|
|
| 409 |
|
|
| 410 |
|
|
| 411 |
|
|
| 412 |
|
|
| 413 |
|
|
| 414 |
|
|
| 415 |
|
|
| 416 |
|
|
| 398 | 417 |
|
| 399 | 418 |
|
| 400 | 419 |
|
| 401 | 420 |
|
| 402 |
|
|
| 421 |
|
|
| 422 |
|
|
| 403 | 423 |
|
| 404 | 424 |
|
| 405 | 425 |
|
| 406 | 426 |
|
| 407 | 427 |
|
| 408 |
|
|
| 428 |
|
|
| 409 | 429 |
|
| 410 | 430 |
|
| 411 | 431 |
|
@@ -454,6 +474,7 @@ async fn run_without_a_terminal(
| 454 | 474 |
|
| 455 | 475 |
|
| 456 | 476 |
|
| 477 |
|
|
| 457 | 478 |
|
| 458 | 479 |
|
| 459 | 480 |
|
@@ -462,7 +483,7 @@ async fn run_without_a_terminal(
| 462 | 483 |
|
| 463 | 484 |
|
| 464 | 485 |
|
| 465 |
|
|
| 486 |
|
|
| 466 | 487 |
|
| 467 | 488 |
|
| 468 | 489 |
|
@@ -488,3 +509,39 @@ async fn run_without_a_terminal(
| 488 | 509 |
|
| 489 | 510 |
|
| 490 | 511 |
|
| 512 |
|
|
| 513 |
|
|
| 514 |
|
|
| 515 |
|
|
| 516 |
|
|
| 517 |
|
|
| 518 |
|
|
| 519 |
|
|
| 520 |
|
|
| 521 |
|
|
| 522 |
|
|
| 523 |
|
|
| 524 |
|
|
| 525 |
|
|
| 526 |
|
|
| 527 |
|
|
| 528 |
|
|
| 529 |
|
|
| 530 |
|
|
| 531 |
|
|
| 532 |
|
|
| 533 |
|
|
| 534 |
|
|
| 535 |
|
|
| 536 |
|
|
| 537 |
|
|
| 538 |
|
|
| 539 |
|
|
| 540 |
|
|
| 541 |
|
|
| 542 |
|
|
| 543 |
|
|
| 544 |
|
|
| 545 |
|
|
| 546 |
|
|
| 547 |
|