Conversations on the new loop (M2.5, PR A)
CI / checks (push) Skipped
CI / checks (pull_request) Successful in 5m14s
CI / checks (push) Skipped
CI / checks (pull_request) Successful in 5m14s
- A top-level message that isn't a command is a conversation: an item in the `general` scope (L1), threaded under the operator's message, with `reply`, `ask_human` and `propose_work` and no workspace or execution. `general` is reserved as a project name. - propose_work(project, title, summary) goes up as a revision for a go-ahead (or a plain yes). On go, under a file_issue intent (L8), the record issue is opened in that project, assigned to the agent and carrying the new item's ID; its item starts agreed, with the summary as its brief. Intake skips any issue carrying an ID (D1); boot adopts a filed issue or puts the proposal up again. - A conversation closes after tuning.loop.general_idle_s (default a day); a reply in its thread then starts a new conversation that continues it. Tests: conversation unit tests (threading, filing, the marker, an unknown project, changes, idle close and continuation, a plain yes, both crash cases, commands at top level); the walk with conversations, proposals and idle time, and records_have_one_item / conversations_do_no_work; an e2e conversation that becomes filed work. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01PPQ14L3LikyefCMFBqEbKE
This commit is contained in:
1 parent
d70d43a8cc
commit
3f54896f65
14 files changed
+811
-35
No files matched your search
@@ -50,6 +50,14 @@ class FakeGitea:
|
||||
self.closed: list[int] = []
|
||||
self.deps: dict[int, list[int]] = {}
|
||||
|
||||
def create_issue(self, repo: str, title: str, body: str) -> int:
|
||||
n = max([i.number for i in self.issues] + [0]) + 1
|
||||
self.issues.append(Issue(n, title, body, "nisse-dev", ()))
|
||||
return n
|
||||
|
||||
def assign_issue(self, repo: str, index: int, assignee: str) -> None:
|
||||
pass
|
||||
|
||||
def open_dependencies(self, repo: str, index: int) -> list[str]:
|
||||
return [f"{repo}#{n}" for n in self.deps.get(index, []) if n not in self.closed]
|
||||
|
||||
|
||||
Reference in new issue
Block a user