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.
- moai_adk/core/issue_creator.py +309 -0
- moai_adk/core/project/phase_executor.py +1 -2
- moai_adk/core/template_engine.py +253 -0
- moai_adk/templates/.claude/agents/alfred/cc-manager.md +1 -1
- moai_adk/templates/.claude/agents/alfred/debug-helper.md +2 -2
- moai_adk/templates/.claude/agents/alfred/doc-syncer.md +2 -2
- moai_adk/templates/.claude/agents/alfred/git-manager.md +27 -4
- moai_adk/templates/.claude/agents/alfred/implementation-planner.md +2 -2
- moai_adk/templates/.claude/agents/alfred/project-manager.md +6 -6
- moai_adk/templates/.claude/agents/alfred/quality-gate.md +2 -2
- moai_adk/templates/.claude/agents/alfred/skill-factory.md +7 -7
- moai_adk/templates/.claude/agents/alfred/spec-builder.md +2 -2
- moai_adk/templates/.claude/agents/alfred/tag-agent.md +2 -2
- moai_adk/templates/.claude/agents/alfred/tdd-implementer.md +2 -2
- moai_adk/templates/.claude/agents/alfred/trust-checker.md +2 -2
- moai_adk/templates/.claude/commands/alfred/0-project.md +9 -9
- moai_adk/templates/.claude/commands/alfred/1-plan.md +3 -3
- moai_adk/templates/.claude/commands/alfred/2-run.md +4 -4
- moai_adk/templates/.claude/commands/alfred/3-sync.md +5 -5
- moai_adk/templates/.claude/commands/alfred/9-feedback.md +149 -0
- moai_adk/templates/.claude/hooks/alfred/core/project.py +145 -13
- moai_adk/templates/.claude/hooks/alfred/handlers/session.py +90 -20
- moai_adk/templates/.claude/output-styles/alfred/agentic-coding.md +1 -1
- moai_adk/templates/.claude/output-styles/alfred/moai-adk-learning.md +1 -1
- moai_adk/templates/.claude/output-styles/alfred/study-with-alfred.md +1 -1
- moai_adk/templates/.github/ISSUE_TEMPLATE/spec.yml +5 -3
- moai_adk/templates/.github/PULL_REQUEST_TEMPLATE.md +20 -8
- moai_adk/templates/.github/workflows/moai-gitflow.yml +22 -16
- moai_adk/templates/.github/workflows/spec-issue-sync.yml +10 -6
- moai_adk/templates/.moai/config.json +12 -0
- moai_adk/templates/.moai/docs/quick-issue-creation-guide.md +219 -0
- moai_adk/templates/.moai/memory/issue-label-mapping.md +150 -0
- moai_adk/templates/CLAUDE.md +67 -1
- {moai_adk-0.7.0.dist-info → moai_adk-0.8.1.dist-info}/METADATA +123 -1
- {moai_adk-0.7.0.dist-info → moai_adk-0.8.1.dist-info}/RECORD +38 -34
- moai_adk/templates/.claude/hooks/alfred/test_hook_output.py +0 -175
- {moai_adk-0.7.0.dist-info → moai_adk-0.8.1.dist-info}/WHEEL +0 -0
- {moai_adk-0.7.0.dist-info → moai_adk-0.8.1.dist-info}/entry_points.txt +0 -0
- {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=
|
|
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=
|
|
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=
|
|
47
|
-
moai_adk/templates/.claude/agents/alfred/debug-helper.md,sha256=
|
|
48
|
-
moai_adk/templates/.claude/agents/alfred/doc-syncer.md,sha256=
|
|
49
|
-
moai_adk/templates/.claude/agents/alfred/git-manager.md,sha256=
|
|
50
|
-
moai_adk/templates/.claude/agents/alfred/implementation-planner.md,sha256=
|
|
51
|
-
moai_adk/templates/.claude/agents/alfred/project-manager.md,sha256=
|
|
52
|
-
moai_adk/templates/.claude/agents/alfred/quality-gate.md,sha256=
|
|
53
|
-
moai_adk/templates/.claude/agents/alfred/skill-factory.md,sha256=
|
|
54
|
-
moai_adk/templates/.claude/agents/alfred/spec-builder.md,sha256=
|
|
55
|
-
moai_adk/templates/.claude/agents/alfred/tag-agent.md,sha256=
|
|
56
|
-
moai_adk/templates/.claude/agents/alfred/tdd-implementer.md,sha256=
|
|
57
|
-
moai_adk/templates/.claude/agents/alfred/trust-checker.md,sha256=
|
|
58
|
-
moai_adk/templates/.claude/commands/alfred/0-project.md,sha256=
|
|
59
|
-
moai_adk/templates/.claude/commands/alfred/1-plan.md,sha256=
|
|
60
|
-
moai_adk/templates/.claude/commands/alfred/2-run.md,sha256=
|
|
61
|
-
moai_adk/templates/.claude/commands/alfred/3-sync.md,sha256=
|
|
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=
|
|
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=
|
|
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=
|
|
77
|
-
moai_adk/templates/.claude/output-styles/alfred/moai-adk-learning.md,sha256=
|
|
78
|
-
moai_adk/templates/.claude/output-styles/alfred/study-with-alfred.md,sha256=
|
|
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=
|
|
257
|
-
moai_adk/templates/.github/ISSUE_TEMPLATE/spec.yml,sha256=
|
|
258
|
-
moai_adk/templates/.github/workflows/moai-gitflow.yml,sha256=
|
|
259
|
-
moai_adk/templates/.github/workflows/spec-issue-sync.yml,sha256=
|
|
260
|
-
moai_adk/templates/.moai/config.json,sha256=
|
|
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.
|
|
279
|
-
moai_adk-0.
|
|
280
|
-
moai_adk-0.
|
|
281
|
-
moai_adk-0.
|
|
282
|
-
moai_adk-0.
|
|
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()
|
|
File without changes
|
|
File without changes
|
|
File without changes
|