Route semantic extraction through generic ACP#1999
Conversation
tests were breaking if the target had a `.` somewhere in global path higher than project directory
.git is not available in a nix sandbox
Rewrite the --no-cluster path in both extract and watch to use build_from_json and node_link_data instead of raw dedup, so the unclustered graph passes the diagnostic integrity gate. Also update documentation (AGENTS.md, README, --help text) to describe the normalized output and add the endpoint-safe graph regression test.
JSON data files are intentionally skipped by the structural extractor. They should not trigger the zero-node aggregate warning, which was designed for failed code extractions (Graphify-Labs#1666).
Use the official ACP client as Graphify's provider-neutral transport and preserve codex-cli as a compatibility alias. Keep subscription authentication and adapter configuration outside Graphify.
|
Hi — we reviewed this ACP / First, thank you for adding this. The ACP/Codex subscription route is exactly the kind of backend needed by users who have a ChatGPT/Codex subscription but not an Security concern: inherited child environmentOne concern we noticed: the ACP child-agent path appears to inherit the parent process environment:
Because this backend runs an autonomous agent CLI over untrusted repository/corpus text, read-only filesystem mode is not a complete boundary if the child process receives unrelated env secrets. A prompt-injection payload in markdown/source could potentially cause the agent to inspect env vars or use available shell/network tooling, depending on the CLI sandbox behavior. We locally tested a small mitigation against the earlier superseded PR: construct an allowlisted child env for ACP/Codex subprocesses, keeping only process plumbing/auth-location vars such as Focused tests still passed after that local patch: There may be a better upstream design, but I wanted to flag the inherited-env issue before this backend becomes a recommended no-API-key/subscription path. Evaluation noteWe also ran a stricter baseline-vs-Graphify check on a documentation corpus using 5 isolated sequential workers per phase. Graphify extraction/mapping was treated as setup and excluded from worker performance. Result: Graphify/Codex-full was usable and non-misleading as a navigation layer, but it did not improve worker-time or token efficiency on this docs-heavy corpus. Normal source search was already strong. This may be different on a code-heavy project where call/file relationships matter more. Smaller correctness noteCommunity-labeling serialization appears to guard ACP in some places; it may be worth confirming the deprecated Happy to share the local patch/diff if useful. — |
Forward only the minimal ACP child environment by default and require explicit names for provider-specific variables. Normalize the deprecated codex-cli alias before community-labeling concurrency guards so every ACP path shares the serial session policy.
|
Good call on the framing. This PR is about using the standardized ACP path for the deprecated I incorporated the concrete pointers in Focused tests and the full flake check pass: 3386 passed, 51 skipped. |
This is slice 5/5 of the work previously gathered in #1787, stacked on #1995, #1996, #1997, and #1998.
The branch includes the preceding slices so it is testable as a complete tree; review the final incremental commits
9b5c7a8and01ee9fbafter those predecessors.Routes semantic extraction through the official ACP Python SDK and a provider-neutral adapter command, keeps
codex-clias a compatibility alias, removes directcodex exectransport, and moves model/read-only/session settings to ACP configuration.Hardening included:
GRAPHIFY_CHILD_ENV_ALLOWLISTentries.codex-clialias is normalized before community-labeling concurrency guards, so all ACP paths share the default serial session policy.Validation:
nix flake check path:. --accept-flake-config --print-build-logs— 3386 passed, 51 skipped; all checks passedMerge order: slices #1995 and #1996, plus independent slices #1997 and #1998, then this slice.