mirror of
https://github.com/KeygraphHQ/shannon.git
synced 2026-10-03 06:46:49 +02:00
* feat(worker): record token, cache, and turn usage per agent * feat: replace model tiers with a single SHANNON_AI_MODEL across five providers * feat(cli): rebuild the setup wizard for provider and model selection * docs: document single-model selection and supported providers * feat(worker): use chat completions for OpenAI behind a custom base URL * feat: add SHANNON_AI_OPENAI_FORMAT to pick the wire API for OpenAI gateways * refactor(cli): drop endpoint path hints from the gateway format picker * feat(worker): enable pi in-session provider retry with retry-after backoff * refactor(worker): hand provider error classification to pi and drop the Anthropic ladders * refactor: remove the subscription retry preset and pipeline config section * fix(worker): validate Bedrock credentials with the same live probe as other providers * feat(worker): render the report from structured findings instead of agent-written markdown * fix(worker): dispose the credential probe session on every path * fix(worker): refuse to replace the assembled report with an empty one * refactor(worker): catch post-processing throws across the whole finalization block * revert(worker): drop the report zero-findings guard * docs(worker): correct the retry split and Bedrock credential claims * docs: regenerate llms-full.txt from current sources * feat(cli): build and run the npx flow from a clone * refactor(cli): flatten the setup summary output * feat(cli): reject runs with more than one provider configured * fix(worker): say a rejected bash call never ran * chore(cli): drop grok-4.3 and gpt-5.6-luna from the setup suggestions * feat(worker): capture structured finding locations for SARIF output * fix(worker): enumerate queue confidence so the report inherits it verbatim * feat(worker): give the reporting phase a mode-specific output schema * feat(worker): emit a SARIF 2.1.0 log for exploitative runs * fix(worker): correct SARIF locations and defer fingerprinting to the upload action * fix(worker): drop the confidence suffix from the analysis-mode summary list * feat(worker): give exploit findings a dedicated code location field * feat(worker): carry structured code locations from the vuln queue to the report * fix(worker): join code locations from the vuln queue instead of re-asking agents * fix(worker): spell out the finding_id to category mapping in the tool schema * feat: drop Google/Gemini as a supported AI provider * fix(worker): stop asking the report agent for code locations * docs: correct the provider list and drop the removed rate-limit settings * docs: add provider cyber safeguards and suggested models per provider * docs: document the SARIF output and the report rating thresholds
40 lines
1.6 KiB
TypeScript
40 lines
1.6 KiB
TypeScript
// Copyright (C) 2025 Keygraph, Inc.
|
|
//
|
|
// This program is free software: you can redistribute it and/or modify
|
|
// it under the terms of the GNU Affero General Public License version 3
|
|
// as published by the Free Software Foundation.
|
|
|
|
/**
|
|
* Per-agent git path scoping.
|
|
*
|
|
* Under parallel agent execution the deliverables git is shared, so each agent's
|
|
* checkpoint/commit/rollback must be limited to the files that agent actually
|
|
* writes. This resolves those paths from the agent's deliverable filename plus
|
|
* its structured exploitation queue (vuln agents only).
|
|
*/
|
|
|
|
import { getQueueFilename } from '../ai/queue-schemas.js';
|
|
import { REPORT_JSON_FILENAME, SARIF_FILENAME } from '../paths.js';
|
|
import { AGENTS } from '../session-manager.js';
|
|
import type { AgentName } from '../types/agents.js';
|
|
|
|
/**
|
|
* Deliverable files an agent writes into the deliverables directory. Used to
|
|
* scope git operations so one agent never touches a sibling agent's output.
|
|
*/
|
|
export function getAgentGitPaths(agentName: AgentName): string[] {
|
|
const paths = [AGENTS[agentName].deliverableFilename];
|
|
const queueFilename = getQueueFilename(agentName);
|
|
if (queueFilename) {
|
|
paths.push(queueFilename);
|
|
}
|
|
// The report agent also emits the structured findings the markdown is rendered from, and the
|
|
// SARIF log when enabled. Listing the log unconditionally is harmless when it was not written,
|
|
// and keeps a stale one from surviving the rollback of a failed attempt.
|
|
if (agentName === 'report') {
|
|
paths.push(REPORT_JSON_FILENAME);
|
|
paths.push(SARIF_FILENAME);
|
|
}
|
|
return [...new Set(paths)];
|
|
}
|