agent-work-loop 0.6.47 → 0.6.48

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (44) hide show
  1. package/dist/{brief-SGMFXOY2.js → brief-ODMUS5B3.js} +4 -4
  2. package/dist/{changelog-VNJ4EQ74.js → changelog-P35RSRT3.js} +4 -4
  3. package/dist/{chunk-FK3Q7UY2.js → chunk-2NETKDCV.js} +2 -2
  4. package/dist/{chunk-SFTVZFTQ.js → chunk-AVIUMBJZ.js} +3 -3
  5. package/dist/{chunk-MLTY3EE6.js → chunk-FLVRMRHX.js} +1 -1
  6. package/dist/{chunk-PUINOFOR.js → chunk-FPNV5L3Y.js} +3 -3
  7. package/dist/{chunk-YW64OU6W.js → chunk-HW2OSIB3.js} +1 -1
  8. package/dist/{chunk-SJG22DAK.js → chunk-IPNBHVGX.js} +30 -1
  9. package/dist/{chunk-ZRKOZQKP.js → chunk-ITZ52UYF.js} +4 -4
  10. package/dist/{chunk-NCS2EPDP.js → chunk-IUXE7EG3.js} +4 -4
  11. package/dist/{chunk-5HXSUU6Y.js → chunk-JY3DXRXV.js} +8 -8
  12. package/dist/{chunk-R4UNIGE5.js → chunk-KKFXZ3NV.js} +6 -6
  13. package/dist/{chunk-EHJYX57P.js → chunk-OQJIRLKN.js} +1 -1
  14. package/dist/{chunk-VVZOIFL4.js → chunk-RTALSPLK.js} +1 -1
  15. package/dist/{chunk-VE2GVNNS.js → chunk-RTZLAXTZ.js} +16 -5
  16. package/dist/{chunk-IVEV5L7P.js → chunk-TCIRO4GU.js} +1 -1
  17. package/dist/{chunk-R5JAYYQ6.js → chunk-UFVGXPJB.js} +4 -4
  18. package/dist/cli.js +44 -42
  19. package/dist/{commit-GPQATPEA.js → commit-7ONX22OG.js} +25 -7
  20. package/dist/{config-QTEKLFZP.js → config-KNSNSKU7.js} +2 -2
  21. package/dist/{doctor-3XCI22NM.js → doctor-UYO4Z6VC.js} +7 -7
  22. package/dist/{evolve-N3S32P5I.js → evolve-KSA5W6F3.js} +6 -6
  23. package/dist/{feedback-log-UCNJ2GVT.js → feedback-log-BIIFYX6D.js} +4 -4
  24. package/dist/{gotchas-PDG2ZZFQ.js → gotchas-US2HUCK2.js} +6 -6
  25. package/dist/{hold-recheck-UNAILFN5.js → hold-recheck-NYW2AGYK.js} +5 -5
  26. package/dist/{init-3B4ZRGWY.js → init-PEKMQY7D.js} +1 -1
  27. package/dist/{lane-5CU25EAJ.js → lane-647Q33RO.js} +14 -14
  28. package/dist/{loop-summary-CODZMRUY.js → loop-summary-BRRJ6V2U.js} +5 -5
  29. package/dist/{metrics-ZR7BPATB.js → metrics-C3UUN5U5.js} +3 -3
  30. package/dist/{record-TSB22DIO.js → record-MBGID3SX.js} +4 -4
  31. package/dist/{remove-SGQHBPW3.js → remove-46IZDWJ7.js} +14 -14
  32. package/dist/{review-RT7EPECQ.js → review-XBOUKZTN.js} +12 -12
  33. package/dist/{rules-QLUXNSCN.js → rules-JKR4DO6F.js} +7 -7
  34. package/dist/{state-6IIH7SW2.js → state-QVDADIXS.js} +3 -3
  35. package/dist/{status-2LPWVCHT.js → status-BJ4B6NKL.js} +5 -5
  36. package/dist/{update-CKGPHO5B.js → update-UXULNKWR.js} +1 -1
  37. package/dist/{verify-34G2WAQ4.js → verify-7KWUZCN7.js} +9 -9
  38. package/dist/{version-check-ZVQZAJ5X.js → version-check-Y3KBDUQ2.js} +4 -4
  39. package/dist/{work-XO5RGFTG.js → work-T5S4FNFZ.js} +13 -13
  40. package/engine/skills/claude/awl-pipeline/SKILL.md +1 -0
  41. package/engine/skills/claude/awl-pipeline-exec/SKILL.md +7 -4
  42. package/engine/skills/claude/awl-pipeline-review/SKILL.md +6 -3
  43. package/engine/version.json +1 -1
  44. package/package.json +1 -1
@@ -1,25 +1,25 @@
1
1
  import {
2
2
  filterRules,
3
3
  loadRules
4
- } from "./chunk-EHJYX57P.js";
5
- import "./chunk-ZRKOZQKP.js";
6
- import "./chunk-IVEV5L7P.js";
4
+ } from "./chunk-OQJIRLKN.js";
5
+ import "./chunk-ITZ52UYF.js";
6
+ import "./chunk-TCIRO4GU.js";
7
7
  import {
8
8
  runVerifyChecks
9
- } from "./chunk-NCS2EPDP.js";
10
- import "./chunk-VVZOIFL4.js";
11
- import "./chunk-R4UNIGE5.js";
12
- import "./chunk-FK3Q7UY2.js";
9
+ } from "./chunk-IUXE7EG3.js";
10
+ import "./chunk-RTALSPLK.js";
11
+ import "./chunk-KKFXZ3NV.js";
12
+ import "./chunk-2NETKDCV.js";
13
13
  import {
14
14
  loadState
15
- } from "./chunk-VE2GVNNS.js";
16
- import "./chunk-SFTVZFTQ.js";
17
- import "./chunk-YW64OU6W.js";
15
+ } from "./chunk-RTZLAXTZ.js";
16
+ import "./chunk-AVIUMBJZ.js";
17
+ import "./chunk-HW2OSIB3.js";
18
18
  import {
19
19
  requireConfig,
20
20
  run
21
- } from "./chunk-MLTY3EE6.js";
22
- import "./chunk-SJG22DAK.js";
21
+ } from "./chunk-FLVRMRHX.js";
22
+ import "./chunk-IPNBHVGX.js";
23
23
  import {
24
24
  caps,
25
25
  makeColors,
@@ -10,13 +10,13 @@ import {
10
10
  runRulesPromote,
11
11
  suggestLinter,
12
12
  validatePromoteOpts
13
- } from "./chunk-EHJYX57P.js";
14
- import "./chunk-ZRKOZQKP.js";
15
- import "./chunk-IVEV5L7P.js";
16
- import "./chunk-FK3Q7UY2.js";
17
- import "./chunk-VE2GVNNS.js";
18
- import "./chunk-MLTY3EE6.js";
19
- import "./chunk-SJG22DAK.js";
13
+ } from "./chunk-OQJIRLKN.js";
14
+ import "./chunk-ITZ52UYF.js";
15
+ import "./chunk-TCIRO4GU.js";
16
+ import "./chunk-2NETKDCV.js";
17
+ import "./chunk-RTZLAXTZ.js";
18
+ import "./chunk-FLVRMRHX.js";
19
+ import "./chunk-IPNBHVGX.js";
20
20
  import "./chunk-FGHILN3D.js";
21
21
  export {
22
22
  RULE_LOAD_LIMIT,
@@ -14,9 +14,9 @@ import {
14
14
  stateLockFile,
15
15
  statePath,
16
16
  writeState
17
- } from "./chunk-VE2GVNNS.js";
18
- import "./chunk-MLTY3EE6.js";
19
- import "./chunk-SJG22DAK.js";
17
+ } from "./chunk-RTZLAXTZ.js";
18
+ import "./chunk-FLVRMRHX.js";
19
+ import "./chunk-IPNBHVGX.js";
20
20
  import "./chunk-FGHILN3D.js";
21
21
  export {
22
22
  acquireStateLock,
@@ -9,11 +9,11 @@ import {
9
9
  renderPipelineGroups,
10
10
  renderStatus,
11
11
  runStatus
12
- } from "./chunk-PUINOFOR.js";
13
- import "./chunk-FK3Q7UY2.js";
14
- import "./chunk-VE2GVNNS.js";
15
- import "./chunk-MLTY3EE6.js";
16
- import "./chunk-SJG22DAK.js";
12
+ } from "./chunk-FPNV5L3Y.js";
13
+ import "./chunk-2NETKDCV.js";
14
+ import "./chunk-RTZLAXTZ.js";
15
+ import "./chunk-FLVRMRHX.js";
16
+ import "./chunk-IPNBHVGX.js";
17
17
  import "./chunk-FGHILN3D.js";
18
18
  export {
19
19
  buildStatus,
@@ -2,7 +2,7 @@ import {
2
2
  listRegisteredProjects,
3
3
  packageEngineDir,
4
4
  syncExistingInstall
5
- } from "./chunk-SJG22DAK.js";
5
+ } from "./chunk-IPNBHVGX.js";
6
6
  import {
7
7
  caps,
8
8
  engineDir,
@@ -11,15 +11,15 @@ import {
11
11
  substituteRelatedCmd,
12
12
  verifyBaselinePath,
13
13
  writeVerifyBaseline
14
- } from "./chunk-NCS2EPDP.js";
15
- import "./chunk-VVZOIFL4.js";
16
- import "./chunk-R4UNIGE5.js";
17
- import "./chunk-FK3Q7UY2.js";
18
- import "./chunk-VE2GVNNS.js";
19
- import "./chunk-SFTVZFTQ.js";
20
- import "./chunk-YW64OU6W.js";
21
- import "./chunk-MLTY3EE6.js";
22
- import "./chunk-SJG22DAK.js";
14
+ } from "./chunk-IUXE7EG3.js";
15
+ import "./chunk-RTALSPLK.js";
16
+ import "./chunk-KKFXZ3NV.js";
17
+ import "./chunk-2NETKDCV.js";
18
+ import "./chunk-RTZLAXTZ.js";
19
+ import "./chunk-AVIUMBJZ.js";
20
+ import "./chunk-HW2OSIB3.js";
21
+ import "./chunk-FLVRMRHX.js";
22
+ import "./chunk-IPNBHVGX.js";
23
23
  import "./chunk-FGHILN3D.js";
24
24
  export {
25
25
  buildVerifyBaseline,
@@ -2,10 +2,10 @@ import {
2
2
  gatherVersionInputs,
3
3
  renderVersionCheck,
4
4
  runVersionCheck
5
- } from "./chunk-SFTVZFTQ.js";
6
- import "./chunk-YW64OU6W.js";
7
- import "./chunk-MLTY3EE6.js";
8
- import "./chunk-SJG22DAK.js";
5
+ } from "./chunk-AVIUMBJZ.js";
6
+ import "./chunk-HW2OSIB3.js";
7
+ import "./chunk-FLVRMRHX.js";
8
+ import "./chunk-IPNBHVGX.js";
9
9
  import "./chunk-FGHILN3D.js";
10
10
  export {
11
11
  gatherVersionInputs,
@@ -20,20 +20,20 @@ import {
20
20
  summarizeWorkitems,
21
21
  withCostAtStart,
22
22
  worktreeDirtyTracked
23
- } from "./chunk-5HXSUU6Y.js";
23
+ } from "./chunk-JY3DXRXV.js";
24
24
  import "./chunk-D5OINC3G.js";
25
- import "./chunk-EHJYX57P.js";
26
- import "./chunk-ZRKOZQKP.js";
27
- import "./chunk-IVEV5L7P.js";
28
- import "./chunk-NCS2EPDP.js";
29
- import "./chunk-VVZOIFL4.js";
30
- import "./chunk-R4UNIGE5.js";
31
- import "./chunk-FK3Q7UY2.js";
32
- import "./chunk-VE2GVNNS.js";
33
- import "./chunk-SFTVZFTQ.js";
34
- import "./chunk-YW64OU6W.js";
35
- import "./chunk-MLTY3EE6.js";
36
- import "./chunk-SJG22DAK.js";
25
+ import "./chunk-OQJIRLKN.js";
26
+ import "./chunk-ITZ52UYF.js";
27
+ import "./chunk-TCIRO4GU.js";
28
+ import "./chunk-IUXE7EG3.js";
29
+ import "./chunk-RTALSPLK.js";
30
+ import "./chunk-KKFXZ3NV.js";
31
+ import "./chunk-2NETKDCV.js";
32
+ import "./chunk-RTZLAXTZ.js";
33
+ import "./chunk-AVIUMBJZ.js";
34
+ import "./chunk-HW2OSIB3.js";
35
+ import "./chunk-FLVRMRHX.js";
36
+ import "./chunk-IPNBHVGX.js";
37
37
  import "./chunk-FGHILN3D.js";
38
38
  export {
39
39
  DEFAULT_GIT_WORKTREE_TIMEOUT_MS,
@@ -124,6 +124,7 @@ exec가 이 문서를 집어갈지는 기존 **실행형 판별**(완료조건
124
124
  - **피드백 모드 신호 전달.** 위 "피드백 모드"가 켜져 있으면(플래그든 config든) exec·review 스폰 프롬프트에 그 사실을 포함시킨다 — exec·review는 오케스트레이터 없이 단독 기동될 수도 있어 스스로도 `awl config`를 확인하지만, 오케스트레이터가 이미 켜둔 상태라면 재확인 없이 그대로 이어받는다.
125
125
  - **원자료는 메인에 안 싣는다.** 스폰 결과의 파일 덤프·원자료는 오케스트레이터 컨텍스트에 올리지 않고 요약·표식만 회수한다.
126
126
  - **스폰된 세션은 자가 재개 불가 — 오케스트레이터가 주기적으로 재개시킨다.** `Agent` 툴로 스폰된 exec·review 세션은 툴셋에 `ScheduleWakeup`/`CronCreate`가 없다(실전 확인됨 — 스폰된 세션이 `ToolSearch`로 직접 조회해도 안 잡힌다). 그래서 awl-pipeline-exec·awl-pipeline-review의 self-pace 절이 지시하는 "유휴 시 다음 확인을 스스로 예약"이 스폰된 세션에서는 원천적으로 불가능하다 — 한 틱을 처리한 뒤 그냥 유휴 상태로 턴을 끝낸다. **재개 책임은 오케스트레이터에 있다**: 스폰된 exec·review가 유휴로 돌아왔다는 신호(idle 알림)를 받으면, `SendMessage`로 "우편함(워처)을 확인하고 처리하라"고 주기적으로 재개시킨다. 이 재개-확인-보고 왕복이 반복되는 게 정상이며, 스폰 계약 위반이 아니다(pipeline-spawned-subagent-lifecycle). **실측 보강(pipeline-followup-handoff-cause-and-isolated-home-decision)**: depth-2(서브에이전트가 또 서브에이전트를 스폰) 재현 테스트에서 완료 알림에 결과 본문이 정상적으로 실려 왔다 — 메일박스 전달 자체는 문제가 아니다. 재개가 필요한 진짜 이유는 스폰된 세션이 자기 자식의 완료 알림으로 **스스로 재개되는지가 확인되지 않았다**는 쪽이다(짧은 단발 작업 기준 실측이며, 실전 규모의 동시·장시간 부하까지는 검증 못함 — 열린 채로 둔다).
127
+ - **필수 부트스트랩 절차 — 선제적 상태체크를 즉시 예약한다.** exec·review를 스폰한 **직후**, 오케스트레이터는 `ScheduleWakeup`으로 20~30분의 고정 주기 상태체크를 즉시 예약한다. 이 예약은 idle 알림을 기다려 시작하는 사후 대응이 아니다. 알림이 활발히 오거나 `SendMessage`로 재개를 시킨 동안에도 다음 상태체크를 계속 재예약한다. 각 틱에서 exec·review의 우편함·워처·진행 상태를 확인하고 필요하면 재개시킨다. 이 주기 예약은 레인 전체 파이프라인이 완료된 경우에만 멈춘다 — 알림이 끊긴 순간 exec·review가 함께 유휴에 빠져도 다음 틱이 반드시 둘을 깨운다.
127
128
  - **세션 완전소실 복구절차(pipeline-session-loss-recovery-and-nested-stall-timeout)**: "유휴라 재개가 필요한 것"보다 심한 경우로, 재개를 위해 `SendMessage`를 시도했는데 `"No transcript found for agent ID: ..."`류 에러가 나면 그 세션은 **완전히 소실**된 것이다(재시도해도 안 살아난다). 사전에 이 상태를 구분할 방법은 없다(`SendMessage`엔 별도 생존확인 모드가 없고, `TaskList`/`TaskGet`/`TaskOutput`은 다른 체계라 세션 나이·활동시각을 조회 못한다 — 실측 확인됨) — 재개를 시도해보고 이 에러를 받아야만 안다. 이 에러가 나면 그 세션을 되살리려 하지 말고, **같은 스킬 트리거로 새 세션을 처음부터 스폰**한다(`Skill(awl-pipeline-exec)`/`Skill(awl-pipeline-review)` 재부트스트랩). 파이프라인의 모든 실질 상태(`.tasks/plan|exec|review/*`, git 커밋, `awl records`)는 파일 기반이라 세션 메모리에 의존하지 않는다 — 새 세션이 부트스트랩 절차대로 파일 상태를 그대로 이어받아 문제없이 계속한다.
128
129
  - **하위 세션이 자기 teammate를 정리할 필요 없다.** exec·review가 자신이 스폰한 구현/검증 서브에이전트에 `TaskStop`을 시도하면 "owned by main session"으로 실패한다 — 하위 세션에는 그 소유권이 없다. idle teammate는 별도 자원을 점유하지 않으므로 정리 자체가 불필요하다. exec·review 스킬에 `TaskStop` 정리 지침을 넣지 않는다(넣어도 실패만 한다).
129
130
 
@@ -52,10 +52,13 @@ description: |
52
52
  3. `unheld`가 비어있으면(재점검할 hold가 없거나 전부 유지) 아래 "4. 유휴"로 진행한다.
53
53
 
54
54
  ### 4. 유휴 — 1·2·3 모두 처리할 게 없으면
55
- **피드백 모드가 켜져 있고 이번 사이클에서 누적한 관찰이 있으면**, 다음 확인을 예약하기 전에
56
- awl-pipeline "피드백 모드" 절의 경로·형식대로 번에 정리해 기록한다(관찰이 없으면 아무것도
57
- 쓴다 유휴마다 파일을 만들지 않는다). 그다음 워처를 1회 체크하고, 없으면 다음 확인을
58
- 예약한 턴을 끝낸다(아래 "self-pace").
55
+ **피드백 플러시는 조건부 여지가 아니라 필수 게이트다.** 일감(1 또는 2)을 끝낸 시점에 더
56
+ 처리할 대상이 없다면 — "일감을 끝냈으니 여기서 마친다"고 턴을 바로 끝내지 않는다. 반드시 이
57
+ 4번까지 도달해 순서대로 밟는다: 피드백 모드가 켜져 있고 이번 사이클에서 누적한 관찰이 있으면
58
+ **그 즉시**(다음 턴으로 미루지 않는다 — 다음 턴이 언제 올지 보장 없다) awl-pipeline "피드백
59
+ 모드" 절의 경로·형식대로 한 번에 정리해 기록한다(관찰이 없으면 아무것도 안 쓴다 — 매 유휴마다
60
+ 빈 파일을 만들지 않는다). 그다음 워처를 1회 체크하고, 없으면 다음 확인을 예약한 뒤 턴을 끝낸다
61
+ (아래 "self-pace").
59
62
 
60
63
  처리할 게 남아있는 동안 1→2→3을 계속 반복한다. **한 일감의 `/awl-loop` 구현은 중간에 멈추지 말고 이 턴에서 끝까지 순차 진행한다**(구현 도중 ScheduleWakeup 하지 않는다).
61
64
 
@@ -30,9 +30,12 @@ description: |
30
30
  - `exec/<name>.md` → `exec/<name>.taken.md` (**검증함 표식** — 합격/불합격 무관, "리뷰함" 뜻).
31
31
  - `verdict:"pass"`(fixes·cheating 비어있음) → review에 아무것도 만들지 않는다. 상태표상 이게 "합격·완료"다.
32
32
  - `verdict:"fail"` → 서브의 fixes/checked/notChecked/cheating을 아래 형식에 채워 `review/<name>.md`를 생성한다. exec가 이벤트 워처로 반영한다.
33
- 4. 처리할 대상이 남아있는 동안 반복한다. 없으면(**피드백 모드가 켜져 있고 누적한 관찰이 있으면
34
- 먼저 awl-pipeline "피드백 모드" 절대로 번에 정리해 기록한다** 관찰이 없으면 아무것도 안
35
- 쓴다) 워처를 1회 체크하고, 없으면 다음 확인을 예약한 턴을 끝낸다(아래 self-pace).
33
+ 4. **피드백 플러시는 조건부 여지가 아니라 필수 게이트다.** 검증 대상(1)을 처리한 시점에
34
+ 남은 대상이 없다면 "검증을 끝냈으니 여기서 마친다"고 턴을 바로 끝내지 않는다. 처리할
35
+ 대상이 남아있는 동안 반복하고, 없으면 피드백 모드가 켜져 있고 누적한 관찰이 있는지부터
36
+ 확인한다 — 있으면 **그 즉시**(다음 턴으로 미루지 않는다) awl-pipeline "피드백 모드" 절대로
37
+ 한 번에 정리해 기록한다(관찰이 없으면 아무것도 안 쓴다). 그다음 워처를 1회 체크하고, 없으면
38
+ 다음 확인을 예약한 뒤 턴을 끝낸다(아래 self-pace).
36
39
 
37
40
  **핸드오프 지연 폴백**: 위임한 검증 서브에이전트가 실제로 검증을 끝냈는데도 판정 JSON이 합리적
38
41
  시간 내 우편함으로 안 돌아오는 지연이 실전에서 반복 관측됐다. **원인 실측 보강**: depth-2 재현
@@ -1,4 +1,4 @@
1
1
  {
2
- "engineVersion": "0.6.47",
2
+ "engineVersion": "0.6.48",
3
3
  "note": "~/.awl/engine 으로 복사되는 스킬·검사기·템플릿·마이그레이션. skills/ 에 awl-loop 스킬이 들어있습니다."
4
4
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "agent-work-loop",
3
- "version": "0.6.47",
3
+ "version": "0.6.48",
4
4
  "description": "같은 실패를 두 번 하지 않는 도구. AI 에이전트가 한 일과 확인한 내용을 파일로 남깁니다.",
5
5
  "type": "module",
6
6
  "bin": {