Commit Graph

727 Commits

Author SHA1 Message Date
Eyejoker
356cf2fa99 style: apply prettier formatting 2026-03-31 14:02:01 +09:00
Eyejoker
1c87616c44 fix: support same-service tribunal runtime 2026-03-31 14:01:31 +09:00
Eyejoker
236f7c2fea fix: gate paired runtime on dual registrations 2026-03-31 12:14:24 +09:00
Eyejoker
89335ab005 refactor: drive paired routing from room mode 2026-03-31 12:10:00 +09:00
Eyejoker
bfe164dece style: format role plan runtime imports 2026-03-31 09:41:40 +09:00
Eyejoker
7f8a361f24 refactor: wire role agent plan into runtime 2026-03-31 09:41:40 +09:00
Eyejoker
a39dad4c8c refactor: add role agent plan ssot 2026-03-31 09:41:40 +09:00
Eyejoker
dd28ac6223 fix: fallback to proceed on unrecognized arbiter verdict
Previously unknown verdicts caused arbiter_escalated (task terminated).
Now falls back to proceed so the loop continues — a parse failure
should not kill the task.
2026-03-31 09:03:20 +09:00
Eyejoker
94184c137d fix: parse arbiter verdict with optional VERDICT: prefix
Codex arbiter sometimes outputs "VERDICT: PROCEED" instead of
"PROCEED". The regex now handles optional "VERDICT:" prefix,
preventing unknown verdict → false arbiter_escalated.
2026-03-31 08:51:01 +09:00
Eyejoker
33dd8ea54a style: format room mode helpers 2026-03-31 08:15:47 +09:00
Eyejoker
99fe4243bf refactor: add explicit room mode ssot helpers 2026-03-31 08:15:47 +09:00
Eyejoker
4aef48f3ba fix: fallback to default arbiter_service_id in explicit channel leases
Explicit leases created by failover didn't include arbiter_service_id,
causing arbiter verdict to never be saved (pairedExecutionContext was
undefined). Now falls back to ARBITER_SERVICE_ID from config when the
stored lease has null arbiter_service_id.
2026-03-31 07:45:52 +09:00
Eyejoker
aad1e93df5 refactor: separate scheduler tick execution path 2026-03-31 07:26:21 +09:00
Eyejoker
ca48e94291 refactor: centralize group queue phase transitions 2026-03-31 07:19:27 +09:00
Eyejoker
b9541a7c5b refactor: extract verify state helpers 2026-03-31 06:54:49 +09:00
Eyejoker
30f19f994b refactor: split setup service rendering and verify probes 2026-03-31 06:54:49 +09:00
Eyejoker
4ac2b9066b fix: auto-retry Codex turn once on interrupted status
When the Codex SDK returns 'interrupted' (API-side timeout/disconnect),
retry the turn once before reporting failure. Prevents unnecessary
"요청을 완료하지 못했습니다" messages for transient issues.
2026-03-31 06:48:07 +09:00
Eyejoker
4003988ff4 refactor: make service defs the setup SSOT 2026-03-31 06:20:15 +09:00
Eyejoker
4bfd3f363f refactor: extract pure builders for SSOT tests 2026-03-31 06:12:20 +09:00
Eyejoker
650ed16a7b fix: strengthen arbiter ESCALATE guidance to prevent echo loops
Arbiter was repeating PROCEED when owner needed user input (e.g.,
"PR 만들까요?"), causing infinite owner↔arbiter loops. Added
specific ESCALATE triggers: user-directed questions, repeated
NEEDS_CONTEXT after prior PROCEED.
2026-03-31 06:03:11 +09:00
Eyejoker
4fcec1ef47 refactor: extract runtime PATH env builder for SSOT 2026-03-31 05:52:19 +09:00
Eyejoker
a81e5aea63 style: format pending paired turn helpers 2026-03-31 05:43:54 +09:00
Eyejoker
43f8341c17 refactor: extract pending paired turn helpers 2026-03-31 05:43:17 +09:00
Eyejoker
4fc7a88e86 chore: make deploy fast-forward only 2026-03-31 05:30:33 +09:00
Eyejoker
189c8795a1 fix: wire stack restart to TypeScript entrypoint 2026-03-31 05:25:50 +09:00
Eyejoker
648457d717 chore: remove nanoclaw legacy skills and scripts
Remove 9 inherited skills (Qodo, update-ejclaw, add-* addons,
update-skills) and restart-ejclaw-stack.sh that came from the
nanoclaw fork and are no longer used.
2026-03-31 05:16:48 +09:00
Eyejoker
060818c914 chore: simplify package scripts (remove duplicates, logical ordering) 2026-03-31 05:07:32 +09:00
Eyejoker
fc21804bf1 chore: add build:all and deploy scripts, remove hardcoded server details from docs 2026-03-31 05:05:33 +09:00
Eyejoker
8360812e1d fix: align ContentBlock media_type with SDK 0.2.87 literal union type 2026-03-31 05:01:21 +09:00
Eyejoker
196c453ccf fix: skip enqueueMessageCheck when task is already completed (ESCALATE/done) 2026-03-31 04:59:27 +09:00
Eyejoker
636c54702a fix: prevent ESCALATE → new task loop (only create tasks on human messages) 2026-03-31 04:58:26 +09:00
Eyejoker
2753849343 chore: update Claude Agent SDK 0.2.87, Codex SDK 0.117.0 2026-03-31 04:47:42 +09:00
Eyejoker
9311cb9ebc docs: update README — role-based description, version badge, architecture diagram with direct channel 2026-03-31 04:45:46 +09:00
Eyejoker
3283522be5 feat: enrich finalize prompts and raise round-trip default 2026-03-31 04:40:56 +09:00
Eyejoker
c2351a4bb9 docs: update README for v0.1.0 (owner arbiter, auto notify, loop protection, Discord-independent comm) 2026-03-31 04:32:49 +09:00
Eyejoker
d0416489c5 fix: escalate finalize blockers without reviewer bounce 2026-03-31 04:32:10 +09:00
Eyejoker
a604a63f87 chore: reset version to 0.1.0 (EJClaw independent versioning) 2026-03-31 04:31:20 +09:00
Eyejoker
7085711a7f feat: auto-notify user on paired task completion with @mention
- done →  작업 완료
- escalated → ⚠️ 자동 해결 불가
- arbiter_escalated → ⚠️ 중재자: 사람 개입 필요
- stopped → no notification (user initiated)
2026-03-31 04:29:24 +09:00
Eyejoker
60408cc1fa fix: arbiter session collision — separate session folder + always fresh session
- resolveSessionFolder now always returns unique folder for arbiter
  (prevents sharing session with owner when both use same agent type)
- Arbiter sessionId forced to undefined to prevent resume attempts
2026-03-31 04:26:48 +09:00
Eyejoker
56c85c357a fix: prevent agents from tagging user during paired review loop 2026-03-31 04:21:22 +09:00
Eyejoker
af550a2aab fix: prevent infinite loops in paired review (merge_ready oscillation, arbiter re-invocation)
- Owner finalize with concerns now checks deadlock threshold before
  looping back — prevents merge_ready ↔ active infinite oscillation
- Arbiter verdict resets round_trip to threshold-1 instead of 0,
  giving agents one round before re-triggering arbiter
2026-03-31 04:13:26 +09:00
Eyejoker
e1b9501e87 feat: add completion_reason to paired_tasks (done/escalated/stopped/arbiter_escalated)
- owner can summon arbiter via BLOCKED/NEEDS_CONTEXT verdict
- completion_reason tracks why task ended: done (success), escalated
  (reviewer gave up), stopped (/stop), arbiter_escalated
2026-03-31 04:10:33 +09:00
Eyejoker
b02c509eb8 feat: owner can also summon arbiter via BLOCKED/NEEDS_CONTEXT verdict 2026-03-31 04:05:26 +09:00
Eyejoker
33cb7c6580 test: add logger debug mock for provider retry 2026-03-31 04:00:39 +09:00
Eyejoker
61c9b8c2e9 fix: reviewer auto-trigger now receives owner turn outputs instead of static prompt 2026-03-31 03:55:45 +09:00
Eyejoker
efb5710aad feat: Discord-independent inter-agent communication via paired_turn_outputs
- New paired_turn_outputs table stores agent output directly in DB
- Owner/reviewer prompts assembled from DB instead of Discord messages
- Arbiter context includes human messages + turn outputs
- Falls back to Discord messages for pre-migration tasks
- 50k char storage limit with truncation warning
2026-03-31 03:38:53 +09:00
Eyejoker
dddf18428e fix: /stop leaves stale paired task, sawOutput guard, progress text overwrite
- /stop now resets the active paired task to completed so the next
  user message routes to the owner instead of the stuck reviewer
- Owner completion with sawOutput=false (e.g. interrupted by /stop)
  no longer auto-triggers the reviewer — treated as interrupted
- Clear pendingProgressText when intermediate updates arrive on an
  existing progress message, preventing flushPendingProgress from
  overwriting latestProgressText with stale buffered content
2026-03-31 02:54:04 +09:00
Eyejoker
33575c84f1 fix: remove hardcoded server IP from README, simplify deploy command 2026-03-31 02:20:45 +09:00
Eyejoker
862881ac91 fix: show actual memory usage (exclude cache) + add build:container script
- Dashboard memory: use /proc/meminfo MemAvailable instead of os.freemem()
  to exclude Linux buffer/cache from reported usage
- Add build:container npm script for reviewer Docker image rebuild
- Update deploy commands in CLAUDE.md and README.md to include build:container
2026-03-31 02:17:44 +09:00
Eyejoker
0fb7ba6b57 chore: rename MAGI to Tribunal, add gstack prompt attribution 2026-03-31 01:54:22 +09:00