moai-adk 0.7.0__py3-none-any.whl → 0.8.1__py3-none-any.whl

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.

Potentially problematic release.


This version of moai-adk might be problematic. Click here for more details.

Files changed (39) hide show
  1. moai_adk/core/issue_creator.py +309 -0
  2. moai_adk/core/project/phase_executor.py +1 -2
  3. moai_adk/core/template_engine.py +253 -0
  4. moai_adk/templates/.claude/agents/alfred/cc-manager.md +1 -1
  5. moai_adk/templates/.claude/agents/alfred/debug-helper.md +2 -2
  6. moai_adk/templates/.claude/agents/alfred/doc-syncer.md +2 -2
  7. moai_adk/templates/.claude/agents/alfred/git-manager.md +27 -4
  8. moai_adk/templates/.claude/agents/alfred/implementation-planner.md +2 -2
  9. moai_adk/templates/.claude/agents/alfred/project-manager.md +6 -6
  10. moai_adk/templates/.claude/agents/alfred/quality-gate.md +2 -2
  11. moai_adk/templates/.claude/agents/alfred/skill-factory.md +7 -7
  12. moai_adk/templates/.claude/agents/alfred/spec-builder.md +2 -2
  13. moai_adk/templates/.claude/agents/alfred/tag-agent.md +2 -2
  14. moai_adk/templates/.claude/agents/alfred/tdd-implementer.md +2 -2
  15. moai_adk/templates/.claude/agents/alfred/trust-checker.md +2 -2
  16. moai_adk/templates/.claude/commands/alfred/0-project.md +9 -9
  17. moai_adk/templates/.claude/commands/alfred/1-plan.md +3 -3
  18. moai_adk/templates/.claude/commands/alfred/2-run.md +4 -4
  19. moai_adk/templates/.claude/commands/alfred/3-sync.md +5 -5
  20. moai_adk/templates/.claude/commands/alfred/9-feedback.md +149 -0
  21. moai_adk/templates/.claude/hooks/alfred/core/project.py +145 -13
  22. moai_adk/templates/.claude/hooks/alfred/handlers/session.py +90 -20
  23. moai_adk/templates/.claude/output-styles/alfred/agentic-coding.md +1 -1
  24. moai_adk/templates/.claude/output-styles/alfred/moai-adk-learning.md +1 -1
  25. moai_adk/templates/.claude/output-styles/alfred/study-with-alfred.md +1 -1
  26. moai_adk/templates/.github/ISSUE_TEMPLATE/spec.yml +5 -3
  27. moai_adk/templates/.github/PULL_REQUEST_TEMPLATE.md +20 -8
  28. moai_adk/templates/.github/workflows/moai-gitflow.yml +22 -16
  29. moai_adk/templates/.github/workflows/spec-issue-sync.yml +10 -6
  30. moai_adk/templates/.moai/config.json +12 -0
  31. moai_adk/templates/.moai/docs/quick-issue-creation-guide.md +219 -0
  32. moai_adk/templates/.moai/memory/issue-label-mapping.md +150 -0
  33. moai_adk/templates/CLAUDE.md +67 -1
  34. {moai_adk-0.7.0.dist-info → moai_adk-0.8.1.dist-info}/METADATA +123 -1
  35. {moai_adk-0.7.0.dist-info → moai_adk-0.8.1.dist-info}/RECORD +38 -34
  36. moai_adk/templates/.claude/hooks/alfred/test_hook_output.py +0 -175
  37. {moai_adk-0.7.0.dist-info → moai_adk-0.8.1.dist-info}/WHEEL +0 -0
  38. {moai_adk-0.7.0.dist-info → moai_adk-0.8.1.dist-info}/entry_points.txt +0 -0
  39. {moai_adk-0.7.0.dist-info → moai_adk-0.8.1.dist-info}/licenses/LICENSE +0 -0
@@ -11,6 +11,8 @@ moai_adk/cli/commands/update.py,sha256=iwDDD_ozCfkGUk1ci2CPfybzRtNFPMi-680NxmKhD
11
11
  moai_adk/cli/prompts/__init__.py,sha256=a4_ctS4KEvGtmM9j7z8XIlMkpftohjVb9woUwZu38gE,136
12
12
  moai_adk/cli/prompts/init_prompts.py,sha256=OZ_T-b4XfkyXQsKXTwLcDYwmLbaf0k5oZfbi_asTH9M,5226
13
13
  moai_adk/core/__init__.py,sha256=1sJO-PHEKF1NmYjeOPPPzn_HRgYln3CKlCpUH4E2Jrs,129
14
+ moai_adk/core/issue_creator.py,sha256=guE8LMi9JaiJkHgIz_gE9pJwjteWLsY4myrYTY6uius,9520
15
+ moai_adk/core/template_engine.py,sha256=08--7FE4VWQxIBOTooi9irfe2UOjBQPRWOfOtY0RhJE,9023
14
16
  moai_adk/core/config/__init__.py,sha256=30Qx-GSN1LLI_9ngNqQ6A6d40J92xK10AQxhKw1-MzU,328
15
17
  moai_adk/core/config/migration.py,sha256=KzFGx3kPNoOaZCmAQvNpvlrQq48N3Gj6o2COVV7jciA,3541
16
18
  moai_adk/core/diagnostics/__init__.py,sha256=aF-qC2CW0wxZDpxnlh-TILYs3kqwOIj2EjXYEXY-2j8,387
@@ -27,7 +29,7 @@ moai_adk/core/project/backup_utils.py,sha256=-zEXIhGsM-MdX1voUIpKxLlR57Y-lqLEZSi
27
29
  moai_adk/core/project/checker.py,sha256=B94mGLHDZkjQnFDgV8sknJDms5oIiHeyKcgxWI87-f8,9523
28
30
  moai_adk/core/project/detector.py,sha256=ADVg36yvyqJEPQVNc_x9iInF9dzi7YZqqXfDq2XL17Q,4230
29
31
  moai_adk/core/project/initializer.py,sha256=yqxePuCO2ednzCOpDZLczyCP079J6Io4pvtynTp4J6w,6724
30
- moai_adk/core/project/phase_executor.py,sha256=MZXqzYZA4OrZT0xViplyOUVRchiSaEWeTEmyzkSHEQY,10997
32
+ moai_adk/core/project/phase_executor.py,sha256=xd7wREmZPjNDO-sHv5CDLjPS8NsmhvQ-qv2m9AVQ9QY,10998
31
33
  moai_adk/core/project/validator.py,sha256=gH9ywTMQTwqtqBVrMWj5_bPYFrVzjHuFoU4QdeVa1O4,5756
32
34
  moai_adk/core/quality/__init__.py,sha256=_uNsbThBLmVLWZCPmEgfFyQqJx3tdef9jhkP9QoHuJY,222
33
35
  moai_adk/core/quality/trust_checker.py,sha256=CN067AiublAH46IBAKEV_I-8Wc0bNaR2dMnMf9n5oBg,15198
@@ -40,42 +42,42 @@ moai_adk/core/template/languages.py,sha256=V0wLcxCIOve9Q_0_NhrHGQevSIN_MB612GwrO
40
42
  moai_adk/core/template/merger.py,sha256=ZV8_U1HZJ3bfAtgyNmSxgj8KdTMt4eUnUG6kVVRT7bE,6909
41
43
  moai_adk/core/template/processor.py,sha256=_nYHiuN9PGzC3iE4X5SpRMFW-OTkI2u1dOAjD98axAk,19190
42
44
  moai_adk/templates/.gitignore,sha256=6VNKResdDpyaii3cmJA4pOLwK2PhYARIWkUODYtKyxg,310
43
- moai_adk/templates/CLAUDE.md,sha256=F1KjJb2HPT887aW9HBGezm2lh0wfNZcN5GLOF2aTo_k,11318
45
+ moai_adk/templates/CLAUDE.md,sha256=SIuw1GLq5w6Mh1ejhnKQ8IlnJKjUs5FmSG8EkL4-N6w,13839
44
46
  moai_adk/templates/__init__.py,sha256=6MV1gCB7PLZMiL4gaD_dZSKxtcQyo45MMTuN8fVdchA,104
45
47
  moai_adk/templates/.claude/settings.json,sha256=SwjID_m0XWmHT12lqkhJXL1Sh30zAr9_tk4drQ9x9K8,3149
46
- moai_adk/templates/.claude/agents/alfred/cc-manager.md,sha256=63HRf8C7JNRApeOqGJi9Iwhcn5is9ImucsfRHhZ5zFU,8348
47
- moai_adk/templates/.claude/agents/alfred/debug-helper.md,sha256=vI0RaXhmEqpIHBHc3KYhCQsbOhF1Xy2yCJOyxfOQ9wQ,7221
48
- moai_adk/templates/.claude/agents/alfred/doc-syncer.md,sha256=QUzfYwUnGm46ZgN067iS6yKayE3AAYM9QIcjAO8jv5A,8636
49
- moai_adk/templates/.claude/agents/alfred/git-manager.md,sha256=yen1XeZJXEAE7e8JkE5lxNoLAlbm-1iPTyQMbY8yH9c,14074
50
- moai_adk/templates/.claude/agents/alfred/implementation-planner.md,sha256=ZSR-OWii-5pH3qLjAid89OaC4JW2QnwZgN-s5vp32lA,11545
51
- moai_adk/templates/.claude/agents/alfred/project-manager.md,sha256=xEU4OnEKiysH08ZWvK9KqJheoFYZXlZ9UmDDs2B80O0,14908
52
- moai_adk/templates/.claude/agents/alfred/quality-gate.md,sha256=iAx3O2wOWP-mpYFEumJpdLDavyqQ5Yk0ILbcvZtw98k,10711
53
- moai_adk/templates/.claude/agents/alfred/skill-factory.md,sha256=PGnrkeT5630ELQ2vBwVGaJr3vzU6I-4LObiZrCCjGjw,26229
54
- moai_adk/templates/.claude/agents/alfred/spec-builder.md,sha256=xYzdnYbmozvSfHrkQKSfIgmlXYFGJ-tpPtubIyY0AM4,12507
55
- moai_adk/templates/.claude/agents/alfred/tag-agent.md,sha256=6n8n93kho3XTONZ4At7VwuZR4QjF1KmNoIN5u_CdNcE,9611
56
- moai_adk/templates/.claude/agents/alfred/tdd-implementer.md,sha256=p9e2PLSH5uUP3fXjaGGMzdm6-QZqDoMSUsCDzUtYQYk,10217
57
- moai_adk/templates/.claude/agents/alfred/trust-checker.md,sha256=TK3rVt0UqgoT8p6ubm3TesbhG6nokmV9FqR4DfC_VjU,13595
58
- moai_adk/templates/.claude/commands/alfred/0-project.md,sha256=sXEiAJX0L220K93drjttQGWLVDtYHS1pTzQDNToVIo0,46399
59
- moai_adk/templates/.claude/commands/alfred/1-plan.md,sha256=xjPSZFVZ5FeLcC5nGfkLDc1xEeTzx4RwL5zHS2H1DSo,25170
60
- moai_adk/templates/.claude/commands/alfred/2-run.md,sha256=xEteotB1u-j7HD0id1Sw4Uopdvv8XK51nnB4qjc3bM0,20820
61
- moai_adk/templates/.claude/commands/alfred/3-sync.md,sha256=EZtQpqPwzVaOvW21kx9VKi7RHMpe8PIA72iTU_sLfMQ,22992
48
+ moai_adk/templates/.claude/agents/alfred/cc-manager.md,sha256=ievRB2BMAXjQ6iepWTLTCIHR9Dc4_L-Ab-dqhKQDdxE,8382
49
+ moai_adk/templates/.claude/agents/alfred/debug-helper.md,sha256=C6jF54jsbI1y4xmb6s-MWVpuYISaFDQzY88M_HJhurw,7289
50
+ moai_adk/templates/.claude/agents/alfred/doc-syncer.md,sha256=iFP09SKUEMfb4OdMT3gMBakwHf0UvIaBfQHhb0YzdWo,8704
51
+ moai_adk/templates/.claude/agents/alfred/git-manager.md,sha256=3fRvc0-sNVT2k8GTGilFHXJ0UudAD8OG7d3nL69Is9M,14694
52
+ moai_adk/templates/.claude/agents/alfred/implementation-planner.md,sha256=Xysj1KinbZt-PTw0Sx1bGFlTCxBuQGFfTCNLdatjb8E,11613
53
+ moai_adk/templates/.claude/agents/alfred/project-manager.md,sha256=N-CaSiWnCdaJXWM3tZegMg4ispm-ioHKnuzmUdwQ2YE,15111
54
+ moai_adk/templates/.claude/agents/alfred/quality-gate.md,sha256=_OebbNOxpKmUAde1zmjjYL8UrniFnIp710xFd7EtuU0,10779
55
+ moai_adk/templates/.claude/agents/alfred/skill-factory.md,sha256=EUXtroq8qN22vAqyMxHgGLx7TVOe_in3quEB6K1HmS8,26467
56
+ moai_adk/templates/.claude/agents/alfred/spec-builder.md,sha256=xGUYsGXB40lBcvmlONIx3tK4iUOVNRFfPatCXNDJonE,12575
57
+ moai_adk/templates/.claude/agents/alfred/tag-agent.md,sha256=_ydlDocuxal89jGwpGIfQLfEbcCUDNoj8CDyDONRRYg,9679
58
+ moai_adk/templates/.claude/agents/alfred/tdd-implementer.md,sha256=qTDJotSnK1KSxe2j6Kpvx0qLYwmzu0e9lKHmD6PVwgc,10285
59
+ moai_adk/templates/.claude/agents/alfred/trust-checker.md,sha256=Vc5ReZjdl1FAifg_9qKt2MYWAdMHmq2psda-kyVhtVI,13663
60
+ moai_adk/templates/.claude/commands/alfred/0-project.md,sha256=Acx7045n1e6-GC1g6QDePVoI2tOGC_fZFvokgrvz_T8,46704
61
+ moai_adk/templates/.claude/commands/alfred/1-plan.md,sha256=wHROuePWaQwrbRm4SL4369vD7EpzKpVRvQBcWPcpUw0,25272
62
+ moai_adk/templates/.claude/commands/alfred/2-run.md,sha256=KTUuQQPheLr0YY79asbK0oH9ajlp8vDsQC_2c8BvzWY,20956
63
+ moai_adk/templates/.claude/commands/alfred/3-sync.md,sha256=WNlBzf5I_mDbdWhcITYE7oiHziHD1UQOG-HD12sqSwQ,23162
64
+ moai_adk/templates/.claude/commands/alfred/9-feedback.md,sha256=VMaKo-ZODHun87uUfiihtHGf8eT4vrEWwxXdQ9RAz3k,3764
62
65
  moai_adk/templates/.claude/hooks/alfred/HOOK_SCHEMA_VALIDATION.md,sha256=5dd6KRFQXzp0L8lAWKRN7Momgg_8XNV1QZ6VGs03_pc,9064
63
66
  moai_adk/templates/.claude/hooks/alfred/README.md,sha256=8JirNg3Jn2OUFmHySYBd8QxQgPkG7kcev86Zkf80asY,6852
64
67
  moai_adk/templates/.claude/hooks/alfred/alfred_hooks.py,sha256=PjdyJluyoQgaIpq3n9K9r-a3VeLMH1eWcXaAA6ohvrw,7723
65
- moai_adk/templates/.claude/hooks/alfred/test_hook_output.py,sha256=3pk-JBUPdSQZBjx27qKu-db7D1WFYBmlIZmeAFBil6M,5646
66
68
  moai_adk/templates/.claude/hooks/alfred/core/__init__.py,sha256=nx_02kZDVFlKOgxBfFz3nqVrxMkmrkE0x7crJhdjl5E,6377
67
69
  moai_adk/templates/.claude/hooks/alfred/core/checkpoint.py,sha256=dsvFDSXQNSQlaQLpvhqFbytGOrOivyovi43Y18EmNeI,8483
68
70
  moai_adk/templates/.claude/hooks/alfred/core/context.py,sha256=RQd6yk8OGT-twgYtUiNmJIL-UEt_h4oktxqiRP_wXAI,2103
69
- moai_adk/templates/.claude/hooks/alfred/core/project.py,sha256=XVm-Y5TVjBBznW8AkFhk_uVg-EF1lZ2wx59Rxt_LOBA,9125
71
+ moai_adk/templates/.claude/hooks/alfred/core/project.py,sha256=7S5GUyN_GkfKy_g-SZfzFjqLQbFYKpC2sNpbSpN2b6w,14141
70
72
  moai_adk/templates/.claude/hooks/alfred/core/tags.py,sha256=XcYYCS1VmCejp7Ga9xZ3hDfrWWsKM-WyPD_N5gY1q1w,6359
71
73
  moai_adk/templates/.claude/hooks/alfred/handlers/__init__.py,sha256=j5L7nayKt7tnFQOZuO5sWiie815vmbmYJOn2VRiidLY,569
72
74
  moai_adk/templates/.claude/hooks/alfred/handlers/notification.py,sha256=8TcEqGlz4EpLf2lpouaIuhVbpKOVeY31KPmIq2snt9U,662
73
- moai_adk/templates/.claude/hooks/alfred/handlers/session.py,sha256=jGmiDPY-unTlQlTWQVisr82Rxhbt1Rkhrun4bggTxQ4,3374
75
+ moai_adk/templates/.claude/hooks/alfred/handlers/session.py,sha256=gFrkTcBRQrDR0p5o79KvhN1LuGdmIVQyWg0fk1YD8l8,6397
74
76
  moai_adk/templates/.claude/hooks/alfred/handlers/tool.py,sha256=0bNtAf2M7nupTAkcrEiZMBCmD2f-dLjjZa5p1CWiNyM,3383
75
77
  moai_adk/templates/.claude/hooks/alfred/handlers/user.py,sha256=PyQI201oezWBzLrKo8ntWoRa9GDyVwLYktdu9vLT84s,1389
76
- moai_adk/templates/.claude/output-styles/alfred/agentic-coding.md,sha256=JyhPcBT3jrdGtYpOE_qQ_B4dgzizMN53ZEqoKHw6GPU,19668
77
- moai_adk/templates/.claude/output-styles/alfred/moai-adk-learning.md,sha256=eBuM8tGVdKVXGecXA7WlmxWatTXWPF-dmpm-rZ4IEEw,17549
78
- moai_adk/templates/.claude/output-styles/alfred/study-with-alfred.md,sha256=GItPQ1wndOh5kGf8g-tdhmxGcqj6wCCRDxI7urO0AAU,12598
78
+ moai_adk/templates/.claude/output-styles/alfred/agentic-coding.md,sha256=xxqVTxNwBEQahaerqeFYDEAErPNLw_-W1orWXYLuwtU,19702
79
+ moai_adk/templates/.claude/output-styles/alfred/moai-adk-learning.md,sha256=Et9BlQkja_jOIVp7NLBVxCGU7H0H-qoEe_9LNaVis3k,17583
80
+ moai_adk/templates/.claude/output-styles/alfred/study-with-alfred.md,sha256=XpIj9c4jqOOlZxn57Ujj8o7VIpAx_ftddwwd0fxIsio,12632
79
81
  moai_adk/templates/.claude/skills/moai-alfred-ears-authoring/SKILL.md,sha256=7g_jQgyK-E_ogg4Hk1ueNdn9bRappOSYSNnjd4JMIK8,2406
80
82
  moai_adk/templates/.claude/skills/moai-alfred-ears-authoring/examples.md,sha256=r5_lripZ45AeKpOcUSzmUl_DuioI18Xe84U05f1vDMI,403
81
83
  moai_adk/templates/.claude/skills/moai-alfred-ears-authoring/reference.md,sha256=Xw_hzLdsfN3zo7BUk2A-rQGohSM5btw6mh12yz1MbPE,339
@@ -253,11 +255,12 @@ moai_adk/templates/.claude/skills/moai-spec-authoring/SKILL.md,sha256=oJCo2cKOXq
253
255
  moai_adk/templates/.claude/skills/moai-spec-authoring/examples.md,sha256=k-3QWf6d4HI_kvss_QyzYrOH0kemgAqGMEeqGtxokAM,15522
254
256
  moai_adk/templates/.claude/skills/moai-spec-authoring/reference.md,sha256=Wbz1GM8nN64D7X49I0TffQPKxtUPWWmhOcaf_Ci0ZSA,16624
255
257
  moai_adk/templates/.claude/skills/moai-spec-authoring/examples/validate-spec.sh,sha256=QzwhuMnNK2itb6DLI_htqA4l_EHSgO0FG2pikV7I-ME,4241
256
- moai_adk/templates/.github/PULL_REQUEST_TEMPLATE.md,sha256=q753rSPFZfylgwh6HkEP2ggEqB9qK-VnoLuXTxueTzw,2146
257
- moai_adk/templates/.github/ISSUE_TEMPLATE/spec.yml,sha256=c6WaTy7Vh6IsNsIJzSTGuGpaGhZAZ1prQXGIUM7P8PA,5212
258
- moai_adk/templates/.github/workflows/moai-gitflow.yml,sha256=D9ob1O7tzsUvk3WQPPaHFx1Oo6_RxnbCb5WHJ6DWyrI,8589
259
- moai_adk/templates/.github/workflows/spec-issue-sync.yml,sha256=VJ0IQcIEnlnZ-3jdvQNruhBxpygYRZAP2bkn35CCO-Q,6307
260
- moai_adk/templates/.moai/config.json,sha256=oAL0Gb4jy-dEvhnPvitkc95dckzAU5w95mekV514YX0,2348
258
+ moai_adk/templates/.github/PULL_REQUEST_TEMPLATE.md,sha256=Y1WTubsATr7C54-zO5H3dg4MFB_M6MBefFRAG27rftM,2384
259
+ moai_adk/templates/.github/ISSUE_TEMPLATE/spec.yml,sha256=6Zqfo_kLOZs1ElAXMshukQDVyz3rAktgZQCbnM_OoLY,5277
260
+ moai_adk/templates/.github/workflows/moai-gitflow.yml,sha256=9QDqqscY7npu_1Sfsn0g9piX0QRDRZFhbEEwkZGXIG0,8684
261
+ moai_adk/templates/.github/workflows/spec-issue-sync.yml,sha256=GIYeQQvwcoi0r-o85nEbSSLwT5EsrSEzJKLhLMX7GPk,6483
262
+ moai_adk/templates/.moai/config.json,sha256=b9AHxl-m71y3bewFiSG0URptvEWW8aUB19QpVOfYE4M,2830
263
+ moai_adk/templates/.moai/docs/quick-issue-creation-guide.md,sha256=tFJqsNr9SpXlGao6HXXm6I8FmC7yCkUo9cu6lE1GaVA,5460
261
264
  moai_adk/templates/.moai/memory/CLAUDE-AGENTS-GUIDE.md,sha256=37Qj5DYcyUniLM1g8IU7UWFI_16tutZrcAkJc4E5i20,15876
262
265
  moai_adk/templates/.moai/memory/CLAUDE-PRACTICES.md,sha256=Tf3q68X1DiA3MkIBYu7AMXoeparYrDRpyqVI5Nw92OY,12653
263
266
  moai_adk/templates/.moai/memory/CLAUDE-RULES.md,sha256=S9GODGRzwwleOmROVtBDa471Ok5NyQLWIkaO_4peHhU,19783
@@ -268,6 +271,7 @@ moai_adk/templates/.moai/memory/SKILLS-DESCRIPTION-POLICY.md,sha256=uMEFi6uojnpO
268
271
  moai_adk/templates/.moai/memory/SPEC-METADATA.md,sha256=Ha4ATMxyH2PgQdVbS1fYwVH0PnIkfqk4hfuB5ksMFFk,9702
269
272
  moai_adk/templates/.moai/memory/config-schema.md,sha256=XmvogEnGedRItVc9OABKr4lDNEZhcKZQ3Qa6KlfxE3E,12477
270
273
  moai_adk/templates/.moai/memory/gitflow-protection-policy.md,sha256=tm2ZOmNMvomAhh4_AGTUNjmSsc-eKzo1SGshojx2QL0,6228
274
+ moai_adk/templates/.moai/memory/issue-label-mapping.md,sha256=bKzC2v1ZZWyng0eHSj9oFQ9w9xCbadPe9T9IYWub7wM,3824
271
275
  moai_adk/templates/.moai/memory/spec-metadata.md,sha256=Ha4ATMxyH2PgQdVbS1fYwVH0PnIkfqk4hfuB5ksMFFk,9702
272
276
  moai_adk/templates/.moai/project/product.md,sha256=IrRSqhu0o5KNfn453DUWoUKzdoO3m6013iYCwaHYCxM,5166
273
277
  moai_adk/templates/.moai/project/structure.md,sha256=YWZ4ggmfzveKx8SQGFQWXdDUh5mxOLkEyy5yVdR3Rn0,4791
@@ -275,8 +279,8 @@ moai_adk/templates/.moai/project/tech.md,sha256=REecMv8wOvutt-pQZ5nlGk5YdReTan7A
275
279
  moai_adk/utils/__init__.py,sha256=VnVfQzzKHvKw4bNdEw5xdscnRQYFrnr-v_TOBr3naPs,225
276
280
  moai_adk/utils/banner.py,sha256=znppKd5yo-tTqgyhgPVJjstrTrfcy_v3X1_RFQxP4Fk,1878
277
281
  moai_adk/utils/logger.py,sha256=g-m07PGKjK2bKRIInfSn6m-024Bedai-pV_WjZKDeu8,5064
278
- moai_adk-0.7.0.dist-info/METADATA,sha256=lhC1D05uXdGGdJ8PLMERCaBkxt7mfW8IyzInxMD0KCE,71251
279
- moai_adk-0.7.0.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
280
- moai_adk-0.7.0.dist-info/entry_points.txt,sha256=P9no1794UipqH72LP-ltdyfVd_MeB1WKJY_6-JQgV3U,52
281
- moai_adk-0.7.0.dist-info/licenses/LICENSE,sha256=M1M2b07fWcSWRM6_P3wbZKndZvyfHyYk_Wu9bS8F7o8,1069
282
- moai_adk-0.7.0.dist-info/RECORD,,
282
+ moai_adk-0.8.1.dist-info/METADATA,sha256=zEPvdQBK_mM5S1y9M6mptWfBF8VBYXikaAMF9H7SwVc,75540
283
+ moai_adk-0.8.1.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
284
+ moai_adk-0.8.1.dist-info/entry_points.txt,sha256=P9no1794UipqH72LP-ltdyfVd_MeB1WKJY_6-JQgV3U,52
285
+ moai_adk-0.8.1.dist-info/licenses/LICENSE,sha256=M1M2b07fWcSWRM6_P3wbZKndZvyfHyYk_Wu9bS8F7o8,1069
286
+ moai_adk-0.8.1.dist-info/RECORD,,
@@ -1,175 +0,0 @@
1
- #!/usr/bin/env -S uv run --script
2
- # /// script
3
- # requires-python = ">=3.11"
4
- # ///
5
- """Test Hook Output Validation
6
-
7
- 자동 테스트: Claude Code Hook JSON 스키마 검증
8
-
9
- - SessionStart Hook JSON 출력 검증
10
- - UserPromptSubmit Hook 특수 스키마 검증
11
- - 모든 Hook 이벤트 스키마 일관성 검증
12
-
13
- 실행:
14
- uv run test_hook_output.py
15
- """
16
-
17
- import json
18
- import sys
19
- from pathlib import Path
20
-
21
- # Add hooks directory to sys.path
22
- HOOKS_DIR = Path(__file__).parent
23
- if str(HOOKS_DIR) not in sys.path:
24
- sys.path.insert(0, str(HOOKS_DIR))
25
-
26
- from core import HookResult # noqa: E402
27
-
28
-
29
- def test_basic_output():
30
- """Test 1: Basic output with only continue flag"""
31
- result = HookResult(continue_execution=True)
32
- output = result.to_dict()
33
-
34
- assert output == {"continue": True}, f"Expected {{'continue': True}}, got {output}"
35
- print("✅ Test 1: Basic output - PASSED")
36
-
37
-
38
- def test_system_message_top_level():
39
- """Test 2: systemMessage at TOP-LEVEL (not in hookSpecificOutput)"""
40
- result = HookResult(system_message="Test message")
41
- output = result.to_dict()
42
-
43
- assert "systemMessage" in output, "systemMessage not found in output"
44
- assert output["systemMessage"] == "Test message"
45
- assert "hookSpecificOutput" not in output, "hookSpecificOutput should not be in to_dict() output"
46
- print("✅ Test 2: systemMessage (top-level) - PASSED")
47
-
48
-
49
- def test_decision_with_reason():
50
- """Test 3: decision + reason (block pattern)"""
51
- result = HookResult(decision="block", reason="Dangerous operation")
52
- output = result.to_dict()
53
-
54
- assert output.get("decision") == "block"
55
- assert output.get("reason") == "Dangerous operation"
56
- assert "continue" not in output, "continue should not appear when decision is set"
57
- print("✅ Test 3: decision + reason - PASSED")
58
-
59
-
60
- def test_user_prompt_submit_schema():
61
- """Test 4: UserPromptSubmit special schema"""
62
- result = HookResult(context_files=["tests/", "docs/"])
63
- output = result.to_user_prompt_submit_dict()
64
-
65
- assert "hookSpecificOutput" in output
66
- assert output["hookSpecificOutput"]["hookEventName"] == "UserPromptSubmit"
67
- assert "additionalContext" in output["hookSpecificOutput"]
68
- assert "📎 Context: tests/" in output["hookSpecificOutput"]["additionalContext"]
69
- print("✅ Test 4: UserPromptSubmit schema - PASSED")
70
-
71
-
72
- def test_permission_decision():
73
- """Test 5: permissionDecision field"""
74
- result = HookResult(permission_decision="deny")
75
- output = result.to_dict()
76
-
77
- assert output.get("permissionDecision") == "deny"
78
- assert "continue" in output # continue should still be present
79
- print("✅ Test 5: permissionDecision - PASSED")
80
-
81
-
82
- def test_session_start_typical_output():
83
- """Test 6: Typical SessionStart output"""
84
- result = HookResult(
85
- continue_execution=True,
86
- system_message="🚀 MoAI-ADK Session Started\n Language: python\n Branch: develop"
87
- )
88
- output = result.to_dict()
89
-
90
- # Validate schema
91
- assert "continue" in output or "decision" in output, "Missing continue or decision"
92
- assert output.get("systemMessage", "").startswith("🚀 MoAI-ADK")
93
-
94
- # Ensure internal fields are NOT in output
95
- assert "context_files" not in output, "Internal field context_files leaked to output"
96
- assert "suggestions" not in output, "Internal field suggestions leaked to output"
97
- assert "exit_code" not in output, "Internal field exit_code leaked to output"
98
-
99
- print("✅ Test 6: SessionStart typical output - PASSED")
100
-
101
-
102
- def test_json_serializable():
103
- """Test 7: Output is JSON serializable"""
104
- result = HookResult(
105
- system_message="Test",
106
- decision="approve",
107
- reason="Valid operation"
108
- )
109
- output = result.to_dict()
110
-
111
- try:
112
- json_str = json.dumps(output)
113
- parsed = json.loads(json_str)
114
- assert parsed == output
115
- print("✅ Test 7: JSON serializable - PASSED")
116
- except Exception as e:
117
- print(f"❌ Test 7: JSON serialization FAILED: {e}")
118
- sys.exit(1)
119
-
120
-
121
- def test_user_prompt_submit_with_system_message():
122
- """Test 8: UserPromptSubmit with both context and system message"""
123
- result = HookResult(
124
- context_files=["src/"],
125
- system_message="Loading context..."
126
- )
127
- output = result.to_user_prompt_submit_dict()
128
-
129
- assert "hookSpecificOutput" in output
130
- assert "Loading context..." in output["hookSpecificOutput"]["additionalContext"]
131
- assert "📎 Context: src/" in output["hookSpecificOutput"]["additionalContext"]
132
- print("✅ Test 8: UserPromptSubmit with system_message - PASSED")
133
-
134
-
135
- def main():
136
- """Run all tests"""
137
- print("\n" + "="*60)
138
- print("🧪 Claude Code Hook Output Validation Tests")
139
- print("="*60 + "\n")
140
-
141
- tests = [
142
- test_basic_output,
143
- test_system_message_top_level,
144
- test_decision_with_reason,
145
- test_user_prompt_submit_schema,
146
- test_permission_decision,
147
- test_session_start_typical_output,
148
- test_json_serializable,
149
- test_user_prompt_submit_with_system_message,
150
- ]
151
-
152
- failed = 0
153
- for test in tests:
154
- try:
155
- test()
156
- except AssertionError as e:
157
- print(f"❌ {test.__name__}: FAILED - {e}")
158
- failed += 1
159
- except Exception as e:
160
- print(f"❌ {test.__name__}: ERROR - {e}")
161
- failed += 1
162
-
163
- print("\n" + "="*60)
164
- if failed == 0:
165
- print(f"✅ ALL {len(tests)} TESTS PASSED")
166
- print("="*60 + "\n")
167
- sys.exit(0)
168
- else:
169
- print(f"❌ {failed}/{len(tests)} TESTS FAILED")
170
- print("="*60 + "\n")
171
- sys.exit(1)
172
-
173
-
174
- if __name__ == "__main__":
175
- main()