feat: scaffold CLI and minimal issue list (task 0001)

Tracer bullet for gitea-axi: runnable npm package on axi-sdk-js with
gitea-js as the sole HTTP layer, ESM on Node 20+.

- issue list with --state/--limit, default fields, count line from
  X-Total-Count, type=issues guard, explicit empty state, and next-step
  suggestions
- repo context detection from the git origin remote (SSH/scp/HTTPS),
  tea credential discovery with the three-way login-matching split, and
  -R/--repo and --login overrides (flag > env > auto)
- token retrieval via tea login helper get: tea's login list JSON
  carries no token (ADR 0001 amended)
- full AxiError classification table with path-based 404 split, TOON
  errors on stdout, exit codes 0/1/2
- test mode (GITEA_AXI_API_URL/TOKEN/REPO) suppressing subprocesses,
  fixture server, and vitest suites driving the CLI seam (50 tests)
This commit is contained in:
2026-07-11 07:11:07 -04:00
parent 21a075f8cd
commit 38026f963d
34 changed files with 3892 additions and 0 deletions

21
src/suggestions.ts Normal file
View File

@@ -0,0 +1,21 @@
import type { RepoContext } from "./context.js";
/**
* Build a next-step suggestion line, appending `-R`/`--login` overrides when
* the context did not come from the git remote (an agent's next call in the
* same working directory would auto-detect the same context otherwise).
*/
export function suggestCommand(
context: RepoContext,
commandLine: string,
note: string,
): string {
let command = `gitea-axi ${commandLine}`;
if (context.repoSource !== "auto") {
command += ` -R ${context.owner}/${context.name}`;
}
if (context.loginSource !== "auto" && context.loginName) {
command += ` --login ${context.loginName}`;
}
return `Run \`${command}\` ${note}`;
}