Files
nisse/nisse-core
dongarandClaude Opus 5.5 f59d974a95
CI / checks (push) Skipped
CI / checks (pull_request) Successful in 1m49s
CI / e2e (pull_request) Successful in 3m18s
M7.3: nisse-review's first slice
A new package over nisse-core: it reviews every ready PR in the
repositories its account can read, and posts one COMMENT review.

- scheduler: each round, open PRs per readable repository (or the
  configured repositories); an item per PR, ready unless draft or WIP;
  closed with the PR. One review at a time, oldest first.
- reader: the repository at head and base from Gitea archives, unpacked
  and read in Python (read_file, list_files, search_code), and its issues;
  bound to the item's repository; no git, no shell.
- review: starts from the PR, commits, diff, comments, closed issues, CI;
  comment drafts a point on any existing line; post_review posts one
  COMMENT review at the head, inline where Gitea takes it, else as links in
  the summary. ask_expert; vault and memory (memory/nisse-review).
- L8: posting is an intent; recovery asks Gitea for the marked review and
  never posts twice; with Gitea down, the item waits.
- Failures retried, then said on the PR until the next push.
- Startup refuses an account that can push to or administer any repo.
- nisse-core gitea: readable_repositories, open_pull_requests, diff,
  commits, archive, issue, search_issues, reviews, post_review; PR fields.
- Bring-up: scripts/review-bringup.sh; nisse-review.example.yaml.
- Tests: unit over a fake Gitea and scripted model; a live test
  (NISSE_REVIEW_GITEA_TOKEN) reviews a PR in a fresh test repository.
- Docs: Development Plan M7.3, Tuning Guide (tuning.review.*).

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01J5Utyfzw7gF7UhjRDEtjTk
2026-10-13 22:34:02 +00:00
..
2026-10-13 22:34:02 +00:00
2026-10-13 18:37:01 +00:00
2026-10-13 21:31:29 +00:00

nisse-core

The shared library the Nisse agents sit on (Part L of the architecture). It never imports an agent. Packages follow the architecture's sections:

  • models (L9, L7): llm (the one client), catalog and probe (what the models are), render and render_anthropic (request bodies from the log), context (fitting a request to its window, L6).
  • log (L7, L6): canonical (the log's events), views (what each role is shown of the others).
  • state (L8): store (an agent subclasses StateStore for its own tables, roles and views), reconcile, worker, cancel, dump.
  • knowledge (L10, L6.4): vault, memory.
  • conversation (L5): transport, matrix.
  • execution (L13): ssh (SSH to a tool VM); testing (a throwaway sshd for tests).
  • authority (P3, P4, L4): actions (Action, Verdict, and static reading of shell commands, which each agent's fast-path rules build on; nisse-dev's are in nisse_dev.loop.actions).
  • loop (L2): driver (a driver run, with the agent's waiting tools and executor), tools (the control tools any agent offers), expert (ask_expert, L9). Each agent keeps its own scheduler.
  • knowledge also has handlers: the vault and memory as control tools.
  • config: the shared parts of an agent's configuration.
  • At the top, until each gains a second module: gitea (the tracker and forge, L1), oplog and envfile (L12).