Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
26 commits
Select commit Hold shift + click to select a range
067f8e7
refactor(attachment, cli): Retire MCP resource attachment resolution
JeanMertz Sep 12, 2026
fbc297a
refactor(tool, llm): Move tool descriptions and errors to `jp_tool`
JeanMertz Sep 12, 2026
23d3eff
feat(tool): Add the shared tool result and input-request types
JeanMertz Sep 12, 2026
d1a1e53
refactor(mcp): Extract tool execution service
JeanMertz Sep 12, 2026
a2de98f
feat(mcp): Route tools through the HTTP server
JeanMertz Sep 12, 2026
42d7412
feat(mcp): Add Host tool-description metadata
JeanMertz Sep 12, 2026
651fb13
fix(mcp, rfd): Preserve typed tool results
JeanMertz Sep 12, 2026
a55efc3
fmt
JeanMertz Sep 14, 2026
776e6d5
review feedback
JeanMertz Sep 14, 2026
4dff8e1
cargo vet
JeanMertz Sep 14, 2026
43388b0
review feedback
JeanMertz Sep 14, 2026
01e53a5
review feedback
JeanMertz Sep 14, 2026
642f0f9
cargo deny
JeanMertz Sep 14, 2026
48735b6
feat(llm, anthropic): Run ACP subscription queries (RFD 110)
JeanMertz Sep 15, 2026
4dac8d1
refactor(llm, anthropic): Replace the ACP SDK with an in-tree client
JeanMertz Sep 15, 2026
e7782da
chore(tools): Drop the container-dependent bash tests
JeanMertz Sep 15, 2026
17e02d3
docs(llm, cli): Fix links CI resolves nothing for
JeanMertz Sep 15, 2026
d473fbe
build(attachment): Ask serde_json for the `std` it needs
JeanMertz Sep 15, 2026
9af93a9
test(cli): Delete the superseded shutdown test file
JeanMertz Sep 15, 2026
21cc785
fix(llm, anthropic): Construct the job-object wrapper as a unit struct
JeanMertz Sep 16, 2026
53026a9
fix(llm, anthropic): Let a tool call wait as long as the user does
JeanMertz Sep 16, 2026
fb33673
test(cli): Gate two imports with the test that uses them
JeanMertz Sep 16, 2026
da28ffe
feat(mcp): Report tool progress to MCP callers
JeanMertz Sep 18, 2026
22b40d0
fix(mcp, cli): Deliver a "Stop & respond" reply to the agent
JeanMertz Sep 23, 2026
0c5e512
fix(cli): Call tool_definitions from jp_mcp after rebase
JeanMertz Sep 23, 2026
5c3f744
fixes
JeanMertz Sep 24, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
75 changes: 0 additions & 75 deletions .config/jp/tools/src/bash_tests.rs
Original file line number Diff line number Diff line change
Expand Up @@ -563,78 +563,3 @@ fn a_successful_run_still_reports_its_exit_code() {
<status>0</status>\n</CommandOutput>\n```"
);
}

/// The install script's whole point: a base image without python gets it, and
/// the built image is what the commands then run in.
///
/// Also covers the `USER` round-trip — the script installs as root, and
/// `python3 -c` runs as `nonroot` afterwards, which only works if the restore
/// resolved to a user the base image actually defines.
///
/// Needs a container runtime and network access for the package install.
/// The first run builds; later runs hit the cached tag and take about as long
/// as any other call.
#[test]
#[ignore = "builds a real image"]
fn an_install_script_adds_a_tool_the_base_image_lacks() {
let dir = workspace();
let plan = Plan {
image: DEFAULT_IMAGE.to_owned(),
install: Some(Install {
script: "apk add --no-cache python3".to_owned(),
run_as: DEFAULT_RUN_AS.to_owned(),
}),
mounts: vec![],
envs: vec![],
script: "set -euo pipefail\npython3 -c 'print(1 + 1)'\nid -un\n".to_owned(),
};
let runtime = detect().expect("a container runtime must be installed");

let content = execute(dir.path(), runtime, &plan, &DuctProcessRunner)
.unwrap()
.unwrap_content();

assert_eq!(
content,
"```xml\n<CommandOutput>\n <stdout>2\nnonroot</stdout>\n \
<status>0</status>\n</CommandOutput>\n```"
);
}

/// Read-only mounts are what keep this tool from being able to replace the
/// workspace-editing tools, so it is worth proving against a real runtime: a
/// runtime that ignored `:ro` would drop the guarantee silently.
///
/// Runs against [`DEFAULT_IMAGE`], so it also covers the two things about an
/// image that this tool depends on: that `bash` is present, and that no
/// `ENTRYPOINT` swallows the `bash -c` invocation.
///
/// Needs a container runtime that is allowed to share the temp directory
/// (Docker Desktop restricts which host paths it will bind-mount).
#[test]
#[ignore = "starts a real container"]
fn a_mounted_path_is_read_only_in_the_container() {
let dir = workspace();
let plan = Plan {
image: DEFAULT_IMAGE.to_owned(),
install: None,
mounts: vec![(
dir.path().join("crates").canonicalize_utf8().unwrap(),
"/workspace/crates".to_owned(),
)],
envs: vec![],
script: "set -euo pipefail\necho written > /workspace/crates/lib.rs\n".to_owned(),
};
let runtime = detect().expect("a container runtime must be installed");

let content = execute(dir.path(), runtime, &plan, &DuctProcessRunner)
.unwrap()
.unwrap_content();

// Under `set -e` bash exits 1 when the redirect cannot open the file.
assert!(content.contains("<status>1</status>"), "got: {content}");
assert_eq!(
std::fs::read_to_string(dir.path().join("crates/lib.rs")).unwrap(),
""
);
}
69 changes: 69 additions & 0 deletions .config/supply-chain/audits.toml
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,11 @@ who = "Jean Mertz <git@jeanmertz.com>"
criteria = "safe-to-deploy"
version = "0.7.3"

[[audits.chacha20]]
who = "Jean Mertz <git@jeanmertz.com>"
criteria = "safe-to-deploy"
delta = "0.10.0 -> 0.10.2"

[[audits.comfy-table]]
who = "Jean Mertz <git@jeanmertz.com>"
criteria = "safe-to-deploy"
Expand All @@ -46,6 +51,11 @@ who = "Jean Mertz <git@jeanmertz.com>"
criteria = "safe-to-deploy"
delta = "0.2.14 -> 0.3.5"

[[audits.cpufeatures]]
who = "Jean Mertz <git@jeanmertz.com>"
criteria = "safe-to-deploy"
delta = "0.3.0 -> 0.3.1"

[[audits.datetime_literal]]
who = "Jean Mertz <git@jeanmertz.com>"
criteria = "safe-to-deploy"
Expand Down Expand Up @@ -81,6 +91,11 @@ who = "Jean Mertz <git@jeanmertz.com>"
criteria = "safe-to-deploy"
version = "0.1.5"

[[audits.getrandom]]
who = "Jean Mertz <git@jeanmertz.com>"
criteria = "safe-to-deploy"
delta = "0.4.2 -> 0.4.3"

[[audits.hashlink]]
who = "Jean Mertz <git@jeanmertz.com>"
criteria = "safe-to-deploy"
Expand Down Expand Up @@ -196,6 +211,11 @@ who = "Jean Mertz <git@jeanmertz.com>"
criteria = "safe-to-deploy"
delta = "0.39.2 -> 0.41.0"

[[audits.r-efi]]
who = "Jean Mertz <git@jeanmertz.com>"
criteria = "safe-to-deploy"
delta = "5.3.0 -> 6.0.0"

[[audits.ra-ap-rustc_lexer]]
who = "Jean Mertz <git@jeanmertz.com>"
criteria = "safe-to-deploy"
Expand All @@ -206,6 +226,16 @@ who = "Jean Mertz <git@jeanmertz.com>"
criteria = "safe-to-deploy"
delta = "0.9.4 -> 0.9.5"

[[audits.rand]]
who = "Jean Mertz <git@jeanmertz.com>"
criteria = "safe-to-deploy"
delta = "0.10.1 -> 0.10.2"

[[audits.rand_core]]
who = "Jean Mertz <git@jeanmertz.com>"
criteria = "safe-to-deploy"
delta = "0.10.0 -> 0.10.1"

[[audits.rand_xorshift]]
who = "Jean Mertz <git@jeanmertz.com>"
criteria = "safe-to-deploy"
Expand Down Expand Up @@ -261,6 +291,11 @@ who = "Jean Mertz <git@jeanmertz.com>"
criteria = "safe-to-deploy"
delta = "0.23.35 -> 0.23.37"

[[audits.rustls]]
who = "Jean Mertz <git@jeanmertz.com>"
criteria = "safe-to-deploy"
delta = "0.23.35 -> 0.23.45"

[[audits.rustls-webpki]]
who = "Jean Mertz <git@jeanmertz.com>"
criteria = "safe-to-deploy"
Expand All @@ -271,6 +306,11 @@ who = "Jean Mertz <git@jeanmertz.com>"
criteria = "safe-to-deploy"
delta = "0.103.10 -> 0.103.12"

[[audits.rustls-webpki]]
who = "Jean Mertz <git@jeanmertz.com>"
criteria = "safe-to-deploy"
delta = "0.103.13 -> 0.103.15"

[[audits.ruzstd]]
who = "Jean Mertz <git@jeanmertz.com>"
criteria = "safe-to-deploy"
Expand Down Expand Up @@ -321,6 +361,11 @@ who = "Jean Mertz <git@jeanmertz.com>"
criteria = "safe-to-deploy"
version = "0.5.2"

[[audits.sse-stream]]
who = "Jean Mertz <git@jeanmertz.com>"
criteria = "safe-to-deploy"
version = "0.2.6"

[[audits.string_cache]]
who = "Jean Mertz <git@jeanmertz.com>"
criteria = "safe-to-deploy"
Expand Down Expand Up @@ -533,6 +578,12 @@ trusted-publisher = "github:rust-lang/cc-rs"
start = "2025-09-01"
end = "2027-03-04"

[[trusted.chacha20]]
criteria = "safe-to-deploy"
trusted-publisher = "github:RustCrypto/stream-ciphers"
start = "2026-02-06"
end = "2027-09-23"

[[trusted.clap]]
criteria = "safe-to-deploy"
user-id = 6743 # Ed Page (epage)
Expand Down Expand Up @@ -575,6 +626,12 @@ user-id = 696 # Nick Fitzgerald (fitzgen)
start = "2019-07-30"
end = "2027-08-19"

[[trusted.cpufeatures]]
criteria = "safe-to-deploy"
user-id = 267 # Tony Arcieri (tarcieri)
start = "2021-04-26"
end = "2027-09-23"

[[trusted.dtoa]]
criteria = "safe-to-deploy"
user-id = 3618 # David Tolnay (dtolnay)
Expand Down Expand Up @@ -923,6 +980,18 @@ user-id = 3618 # David Tolnay (dtolnay)
start = "2019-04-09"
end = "2027-02-13"

[[trusted.rand]]
criteria = "safe-to-deploy"
trusted-publisher = "github:rust-random/rand"
start = "2026-01-26"
end = "2027-09-23"

[[trusted.rand_core]]
criteria = "safe-to-deploy"
trusted-publisher = "github:rust-random/rand_core"
start = "2026-01-20"
end = "2027-09-23"

[[trusted.ref-cast]]
criteria = "safe-to-deploy"
user-id = 3618 # David Tolnay (dtolnay)
Expand Down
4 changes: 0 additions & 4 deletions .config/supply-chain/config.toml
Original file line number Diff line number Diff line change
Expand Up @@ -153,10 +153,6 @@ criteria = "safe-to-deploy"
version = "0.10.1"
criteria = "safe-to-deploy"

[[exemptions.cpufeatures]]
version = "0.2.17"
criteria = "safe-to-deploy"

[[exemptions.crc32fast]]
version = "1.5.0"
criteria = "safe-to-deploy"
Expand Down
65 changes: 47 additions & 18 deletions .config/supply-chain/imports.lock
Original file line number Diff line number Diff line change
Expand Up @@ -130,6 +130,11 @@ version = "1.2.56"
when = "2026-02-13"
trusted-publisher = "github:rust-lang/cc-rs"

[[publisher.chacha20]]
version = "0.10.2"
when = "2026-08-27"
trusted-publisher = "github:RustCrypto/stream-ciphers"

[[publisher.clap]]
version = "4.5.48"
when = "2025-09-19"
Expand Down Expand Up @@ -179,6 +184,20 @@ user-id = 696
user-login = "fitzgen"
user-name = "Nick Fitzgerald"

[[publisher.cpufeatures]]
version = "0.2.17"
when = "2025-01-25"
user-id = 267
user-login = "tarcieri"
user-name = "Tony Arcieri"

[[publisher.cpufeatures]]
version = "0.3.1"
when = "2026-08-26"
user-id = 267
user-login = "tarcieri"
user-name = "Tony Arcieri"

[[publisher.dtoa]]
version = "1.0.11"
when = "2025-12-27"
Expand Down Expand Up @@ -552,6 +571,16 @@ user-id = 3618
user-login = "dtolnay"
user-name = "David Tolnay"

[[publisher.rand]]
version = "0.10.2"
when = "2026-07-02"
trusted-publisher = "github:rust-random/rand"

[[publisher.rand_core]]
version = "0.10.1"
when = "2026-04-13"
trusted-publisher = "github:rust-random/rand_core"

[[publisher.ref-cast]]
version = "1.0.24"
when = "2025-03-03"
Expand Down Expand Up @@ -651,8 +680,8 @@ user-login = "dtolnay"
user-name = "David Tolnay"

[[publisher.serde_json]]
version = "1.0.149"
when = "2026-01-06"
version = "1.0.151"
when = "2026-07-20"
user-id = 3618
user-login = "dtolnay"
user-name = "David Tolnay"
Expand Down Expand Up @@ -1425,6 +1454,12 @@ who = "Pat Hickey <pat@moreproductive.org>"
criteria = "safe-to-deploy"
delta = "0.3.28 -> 0.3.31"

[[audits.bytecode-alliance.audits.getrandom]]
who = "Alex Crichton <alex@alexcrichton.com>"
criteria = "safe-to-deploy"
delta = "0.4.1 -> 0.4.2"
notes = "Nothing awry in this update, standard updates for some platforms and other misc things."

[[audits.bytecode-alliance.audits.gimli]]
who = "Alex Crichton <alex@alexcrichton.com>"
criteria = "safe-to-deploy"
Expand Down Expand Up @@ -1599,28 +1634,12 @@ who = "Alex Crichton <alex@alexcrichton.com>"
criteria = "safe-to-deploy"
delta = "0.1.21 -> 0.1.24"

[[audits.bytecode-alliance.audits.rustls]]
who = "Alex Crichton <alex@alexcrichton.com>"
criteria = "safe-to-deploy"
delta = "0.23.37 -> 0.23.45"
notes = """
A relatively large update, but no new `unsafe` and nothing awry here. Lots of
protocol/etc updates which I'm not personally an expert within but the rustls
maintainers are relatively well trusted as well.
"""

[[audits.bytecode-alliance.audits.rustls-webpki]]
who = "Alex Crichton <alex@alexcrichton.com>"
criteria = "safe-to-deploy"
delta = "0.103.12 -> 0.103.13"
notes = "Minor fixes for the bug being fixed in this release, nothing awry."

[[audits.bytecode-alliance.audits.rustls-webpki]]
who = "Alex Crichton <alex@alexcrichton.com>"
criteria = "safe-to-deploy"
delta = "0.103.13 -> 0.103.15"
notes = "Minor updates and feature shufflings."

[[audits.bytecode-alliance.audits.sha1]]
who = "Andrew Brown <andrew.brown@intel.com>"
criteria = "safe-to-deploy"
Expand Down Expand Up @@ -2732,6 +2751,16 @@ who = "J.C. Jones <jc@divviup.org>"
criteria = "safe-to-deploy"
delta = "1.0.1 -> 1.0.3"

[[audits.isrg.audits.getrandom]]
who = "David Cook <dcook@divviup.org>"
criteria = "safe-to-deploy"
delta = "0.3.4 -> 0.4.0"

[[audits.isrg.audits.getrandom]]
who = "David Cook <dcook@divviup.org>"
criteria = "safe-to-deploy"
delta = "0.4.0 -> 0.4.1"

[[audits.isrg.audits.libbz2-rs-sys]]
who = "Ameer Ghani <inahga@divviup.org>"
criteria = "safe-to-deploy"
Expand Down
Loading
Loading