/** * Reading Jira without the MCP channel. * * JAM's reads have lived only behind MCP tools. That is the right home when the * agent's session already has them - but a session that registers JAM cannot be * shown the new tools: Claude Code has no reload surface (`claude mcp` offers * add / get / list / login / remove / reset-project-choices / serve, and nothing * that re-reads registrations for a running session). So the agent that just * installed JAM has to wait for its next session before it can read anything. * * What it did instead was worse: it answered Jira questions from whatever was at * hand - git log, the code host, project documents - which is the exact * substitution JAM exists to prevent. * * This is the same read, addressed differently. `search` / `context` / `full` * call the same application functions the tools call, with the same deps, the * same policies and the same `meta`. Nothing here re-implements a read, and * nothing here is a second source of truth. * * Contract, enforced by tests: * stdout - one JSON document and nothing else, no ANSI, no prompts * stderr - diagnostics only */ import { type BuildDepsOptions, type JamDeps } from "../deps.js"; export declare const JIRA_READ_USAGE = "Usage:\n jam jira search [--scope preview|complete]\n jam jira context [KEY...]\n jam jira full [KEY...]\n\nReads only. Output is one JSON document on stdout - the same result the MCP\ntools return, for a session that cannot see them yet.\n"; export type JiraReadOptions = BuildDepsOptions & { /** Injected by tests so no test reaches a real Jira. */ deps?: JamDeps; /** Where the JSON document goes. Defaults to stdout. */ write?: (text: string) => void; /** Where diagnostics go. Defaults to stderr. */ warn?: (text: string) => void; }; export declare function runJiraRead(argv: readonly string[], options?: JiraReadOptions): Promise;