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
@@ -60,11 +60,20 @@ class Forge:
|
||||
self.closed_issues: list[int] = []
|
||||
self.issues = [Issue(14, "Add count_words", "count words", "don", ())]
|
||||
self.deps: dict[int, list[int]] = {} # issue -> the issues it depends on
|
||||
self.assigned: list[int] = [] # issues the agent assigned to itself
|
||||
|
||||
# intake
|
||||
def assigned_issues(self, repo: str, assignee: str) -> list[Issue]:
|
||||
return [i for i in self.issues if i.number not in self.closed_issues]
|
||||
|
||||
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:
|
||||
self.assigned.append(index)
|
||||
|
||||
def open_dependencies(self, repo: str, index: int) -> list[str]:
|
||||
return [
|
||||
f"{repo}#{n}"
|
||||
|
||||
Reference in new issue
Block a user