ai-dev-workflow-cli 0.0.0-stage → 0.5.0
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.
- package/.continue/prompts/analisar-projeto.md +7 -0
- package/.continue/prompts/documentar-task.md +7 -0
- package/.continue/prompts/planejar-task.md +9 -0
- package/.continue/prompts/revisar-codigo.md +7 -0
- package/.continue/rules/workflow.md +12 -0
- package/.github/pull_request_template.md +10 -0
- package/.gitignore +28 -0
- package/AGENTS.md +38 -0
- package/CLAUDE.md +7 -0
- package/GEMINI.md +7 -0
- package/LICENSE +21 -0
- package/README.md +82 -2
- package/agents/architect.md +5 -0
- package/agents/developer.md +5 -0
- package/agents/discovery.md +5 -0
- package/agents/documentation.md +5 -0
- package/agents/environment.md +3 -0
- package/agents/reviewer.md +5 -0
- package/bin/ai-dev-workflow.js +10 -0
- package/catalog/central-v0.2.json +197 -0
- package/catalog/legacy-v1.json +158 -0
- package/catalog/template.json +207 -0
- package/docs/CLI.md +216 -0
- package/docs/DISCOVERY_CLI.md +83 -0
- package/docs/LAYOUT.md +13 -0
- package/docs/MULTI_AI.md +36 -0
- package/docs/PERSISTENCE.md +80 -0
- package/docs/QUICKSTART.md +203 -0
- package/docs/WORKFLOW.md +58 -0
- package/integrations/codex/README.md +14 -0
- package/integrations/continue/README.md +19 -0
- package/package.json +45 -4
- package/payload/central/.ai-dev-workflow/agents/architect.md +5 -0
- package/payload/central/.ai-dev-workflow/agents/developer.md +5 -0
- package/payload/central/.ai-dev-workflow/agents/discovery.md +5 -0
- package/payload/central/.ai-dev-workflow/agents/documentation.md +5 -0
- package/payload/central/.ai-dev-workflow/agents/environment.md +3 -0
- package/payload/central/.ai-dev-workflow/agents/reviewer.md +5 -0
- package/payload/central/.ai-dev-workflow/docs/WORKFLOW.md +58 -0
- package/payload/central/.ai-dev-workflow/integrations/codex/README.md +14 -0
- package/payload/central/.ai-dev-workflow/integrations/continue/README.md +19 -0
- package/payload/central/.ai-dev-workflow/rules/cost-control.md +6 -0
- package/payload/central/.ai-dev-workflow/rules/database.md +46 -0
- package/payload/central/.ai-dev-workflow/rules/general.md +7 -0
- package/payload/central/.ai-dev-workflow/rules/git-workflow.md +16 -0
- package/payload/central/.ai-dev-workflow/rules/security.md +11 -0
- package/payload/central/.ai-dev-workflow/rules/testing.md +6 -0
- package/payload/central/.ai-dev-workflow/stacks/nodejs.md +3 -0
- package/payload/central/.ai-dev-workflow/stacks/php-laravel.md +6 -0
- package/payload/central/.ai-dev-workflow/stacks/php-native.md +3 -0
- package/payload/central/.ai-dev-workflow/stacks/wordpress.md +4 -0
- package/payload/central/.ai-dev-workflow/templates/ARCHITECTURE.md +8 -0
- package/payload/central/.ai-dev-workflow/templates/BASELINE.md +16 -0
- package/payload/central/.ai-dev-workflow/templates/CURRENT_STATE.md +15 -0
- package/payload/central/.ai-dev-workflow/templates/DATABASE_CHANGE.md +31 -0
- package/payload/central/.ai-dev-workflow/templates/DECISIONS.md +9 -0
- package/payload/central/.ai-dev-workflow/templates/DISCOVERY.md +13 -0
- package/payload/central/.ai-dev-workflow/templates/ENVIRONMENT.md +20 -0
- package/payload/central/.ai-dev-workflow/templates/PR_CHECKLIST.md +9 -0
- package/payload/central/.ai-dev-workflow/templates/REQUIREMENTS.md +9 -0
- package/payload/central/.ai-dev-workflow/templates/TASK.md +26 -0
- package/payload/central/.ai-dev-workflow/templates/TASK_REPORT.md +20 -0
- package/payload/central/.continue/prompts/analisar-projeto.md +7 -0
- package/payload/central/.continue/prompts/documentar-task.md +7 -0
- package/payload/central/.continue/prompts/planejar-task.md +9 -0
- package/payload/central/.continue/prompts/revisar-codigo.md +7 -0
- package/payload/central/.continue/rules/workflow.md +12 -0
- package/payload/central/.github/pull_request_template.md +10 -0
- package/payload/central/.gitignore.txt +28 -0
- package/payload/central/AGENTS.md +38 -0
- package/payload/central/CLAUDE.md +7 -0
- package/payload/central/GEMINI.md +7 -0
- package/payload/central-v0.2/.ai-dev-workflow/agents/architect.md +5 -0
- package/payload/central-v0.2/.ai-dev-workflow/agents/developer.md +5 -0
- package/payload/central-v0.2/.ai-dev-workflow/agents/discovery.md +5 -0
- package/payload/central-v0.2/.ai-dev-workflow/agents/documentation.md +5 -0
- package/payload/central-v0.2/.ai-dev-workflow/agents/environment.md +3 -0
- package/payload/central-v0.2/.ai-dev-workflow/agents/reviewer.md +5 -0
- package/payload/central-v0.2/.ai-dev-workflow/docs/WORKFLOW.md +58 -0
- package/payload/central-v0.2/.ai-dev-workflow/integrations/codex/README.md +14 -0
- package/payload/central-v0.2/.ai-dev-workflow/integrations/continue/README.md +19 -0
- package/payload/central-v0.2/.ai-dev-workflow/rules/cost-control.md +6 -0
- package/payload/central-v0.2/.ai-dev-workflow/rules/database.md +46 -0
- package/payload/central-v0.2/.ai-dev-workflow/rules/general.md +7 -0
- package/payload/central-v0.2/.ai-dev-workflow/rules/git-workflow.md +16 -0
- package/payload/central-v0.2/.ai-dev-workflow/rules/security.md +11 -0
- package/payload/central-v0.2/.ai-dev-workflow/rules/testing.md +6 -0
- package/payload/central-v0.2/.ai-dev-workflow/stacks/nodejs.md +3 -0
- package/payload/central-v0.2/.ai-dev-workflow/stacks/php-laravel.md +6 -0
- package/payload/central-v0.2/.ai-dev-workflow/stacks/php-native.md +3 -0
- package/payload/central-v0.2/.ai-dev-workflow/stacks/wordpress.md +4 -0
- package/payload/central-v0.2/.ai-dev-workflow/templates/ARCHITECTURE.md +8 -0
- package/payload/central-v0.2/.ai-dev-workflow/templates/BASELINE.md +16 -0
- package/payload/central-v0.2/.ai-dev-workflow/templates/CURRENT_STATE.md +15 -0
- package/payload/central-v0.2/.ai-dev-workflow/templates/DATABASE_CHANGE.md +31 -0
- package/payload/central-v0.2/.ai-dev-workflow/templates/DECISIONS.md +9 -0
- package/payload/central-v0.2/.ai-dev-workflow/templates/DISCOVERY.md +13 -0
- package/payload/central-v0.2/.ai-dev-workflow/templates/ENVIRONMENT.md +20 -0
- package/payload/central-v0.2/.ai-dev-workflow/templates/PR_CHECKLIST.md +9 -0
- package/payload/central-v0.2/.ai-dev-workflow/templates/REQUIREMENTS.md +9 -0
- package/payload/central-v0.2/.ai-dev-workflow/templates/TASK.md +26 -0
- package/payload/central-v0.2/.ai-dev-workflow/templates/TASK_REPORT.md +20 -0
- package/payload/central-v0.2/.continue/prompts/analisar-projeto.md +7 -0
- package/payload/central-v0.2/.continue/prompts/documentar-task.md +7 -0
- package/payload/central-v0.2/.continue/prompts/planejar-task.md +9 -0
- package/payload/central-v0.2/.continue/prompts/revisar-codigo.md +7 -0
- package/payload/central-v0.2/.continue/rules/workflow.md +12 -0
- package/payload/central-v0.2/.github/pull_request_template.md +10 -0
- package/payload/central-v0.2/.gitignore.txt +28 -0
- package/payload/central-v0.2/AGENTS.md +38 -0
- package/payload/legacy-v1/.continue/prompts/analisar-projeto.md +7 -0
- package/payload/legacy-v1/.continue/prompts/documentar-task.md +7 -0
- package/payload/legacy-v1/.continue/prompts/planejar-task.md +9 -0
- package/payload/legacy-v1/.continue/prompts/revisar-codigo.md +7 -0
- package/payload/legacy-v1/.continue/rules/workflow.md +12 -0
- package/payload/legacy-v1/.github/pull_request_template.md +10 -0
- package/payload/legacy-v1/.gitignore.txt +28 -0
- package/payload/legacy-v1/AGENTS.md +38 -0
- package/payload/legacy-v1/agents/architect.md +5 -0
- package/payload/legacy-v1/agents/developer.md +5 -0
- package/payload/legacy-v1/agents/discovery.md +5 -0
- package/payload/legacy-v1/agents/documentation.md +5 -0
- package/payload/legacy-v1/agents/environment.md +3 -0
- package/payload/legacy-v1/agents/reviewer.md +5 -0
- package/payload/legacy-v1/docs/WORKFLOW.md +58 -0
- package/payload/legacy-v1/integrations/codex/README.md +14 -0
- package/payload/legacy-v1/integrations/continue/README.md +19 -0
- package/payload/legacy-v1/rules/cost-control.md +6 -0
- package/payload/legacy-v1/rules/database.md +46 -0
- package/payload/legacy-v1/rules/general.md +7 -0
- package/payload/legacy-v1/rules/git-workflow.md +16 -0
- package/payload/legacy-v1/rules/security.md +11 -0
- package/payload/legacy-v1/rules/testing.md +6 -0
- package/payload/legacy-v1/stacks/nodejs.md +3 -0
- package/payload/legacy-v1/stacks/php-laravel.md +6 -0
- package/payload/legacy-v1/stacks/php-native.md +3 -0
- package/payload/legacy-v1/stacks/wordpress.md +4 -0
- package/payload/legacy-v1/templates/ARCHITECTURE.md +8 -0
- package/payload/legacy-v1/templates/BASELINE.md +16 -0
- package/payload/legacy-v1/templates/CURRENT_STATE.md +15 -0
- package/payload/legacy-v1/templates/DATABASE_CHANGE.md +31 -0
- package/payload/legacy-v1/templates/DECISIONS.md +9 -0
- package/payload/legacy-v1/templates/DISCOVERY.md +13 -0
- package/payload/legacy-v1/templates/ENVIRONMENT.md +20 -0
- package/payload/legacy-v1/templates/PR_CHECKLIST.md +9 -0
- package/payload/legacy-v1/templates/REQUIREMENTS.md +9 -0
- package/payload/legacy-v1/templates/TASK.md +26 -0
- package/payload/legacy-v1/templates/TASK_REPORT.md +20 -0
- package/rules/cost-control.md +6 -0
- package/rules/database.md +46 -0
- package/rules/general.md +7 -0
- package/rules/git-workflow.md +16 -0
- package/rules/security.md +11 -0
- package/rules/testing.md +6 -0
- package/scripts/check-catalog.js +11 -0
- package/src/cli.js +74 -0
- package/src/commands/discover.js +2 -0
- package/src/commands/doctor.js +1 -0
- package/src/commands/init.js +2 -0
- package/src/commands/status.js +1 -0
- package/src/commands/validate.js +1 -0
- package/src/core/adapters.js +9 -0
- package/src/core/catalog.js +52 -0
- package/src/core/diagnostics.js +82 -0
- package/src/core/errors.js +10 -0
- package/src/core/install-plan.js +49 -0
- package/src/core/installer.js +72 -0
- package/src/core/journal.js +28 -0
- package/src/core/manifest.js +55 -0
- package/src/discovery/detectors.js +156 -0
- package/src/discovery/evidence.js +12 -0
- package/src/discovery/reader.js +47 -0
- package/src/discovery/reconcile.js +18 -0
- package/src/discovery/report.js +24 -0
- package/src/discovery/scanner.js +60 -0
- package/src/output/json.js +1 -0
- package/src/output/text.js +18 -0
- package/src/persistence/history.js +23 -0
- package/src/persistence/markdown.js +25 -0
- package/src/persistence/record.js +90 -0
- package/src/persistence/storage.js +47 -0
- package/src/platform/filesystem.js +71 -0
- package/src/platform/git.js +123 -0
- package/stacks/nodejs.md +3 -0
- package/stacks/php-laravel.md +6 -0
- package/stacks/php-native.md +3 -0
- package/stacks/wordpress.md +4 -0
- package/templates/ARCHITECTURE.md +8 -0
- package/templates/BASELINE.md +16 -0
- package/templates/CURRENT_STATE.md +15 -0
- package/templates/DATABASE_CHANGE.md +31 -0
- package/templates/DECISIONS.md +9 -0
- package/templates/DISCOVERY.md +13 -0
- package/templates/ENVIRONMENT.md +20 -0
- package/templates/PR_CHECKLIST.md +9 -0
- package/templates/REQUIREMENTS.md +9 -0
- package/templates/TASK.md +26 -0
- package/templates/TASK_REPORT.md +20 -0
|
@@ -0,0 +1,158 @@
|
|
|
1
|
+
{
|
|
2
|
+
"catalogVersion": "1.0.0",
|
|
3
|
+
"templateVersion": "0.1.0",
|
|
4
|
+
"files": [
|
|
5
|
+
{
|
|
6
|
+
"path": ".continue/prompts/analisar-projeto.md",
|
|
7
|
+
"sha256": "b8756031043e998beef5f9edb939b90eae5a620eac9db90c04f1c3f2ddd0bbb6"
|
|
8
|
+
},
|
|
9
|
+
{
|
|
10
|
+
"path": ".continue/prompts/documentar-task.md",
|
|
11
|
+
"sha256": "40818426e4262acb32dff44e333afbb3711a87e5e997ad5ea946700ab65aa6bc"
|
|
12
|
+
},
|
|
13
|
+
{
|
|
14
|
+
"path": ".continue/prompts/planejar-task.md",
|
|
15
|
+
"sha256": "fc611267f60d6ca30101126cb8030ea81b306558186de9f7bde2967bf226f3ce"
|
|
16
|
+
},
|
|
17
|
+
{
|
|
18
|
+
"path": ".continue/prompts/revisar-codigo.md",
|
|
19
|
+
"sha256": "17df0cde542c2a606d080ac1c850414cdce853e214a109c29125300983d7bae3"
|
|
20
|
+
},
|
|
21
|
+
{
|
|
22
|
+
"path": ".continue/rules/workflow.md",
|
|
23
|
+
"sha256": "f5d0012bf8eab6c4d2d481e0b9faab381805cb8fac617281525e10d624c1b47d"
|
|
24
|
+
},
|
|
25
|
+
{
|
|
26
|
+
"path": ".github/pull_request_template.md",
|
|
27
|
+
"sha256": "3f12379a547e121bb9e00b5185ace6f7db42d937fdc8785c553f87aa167e365c"
|
|
28
|
+
},
|
|
29
|
+
{
|
|
30
|
+
"path": ".gitignore",
|
|
31
|
+
"sha256": "d462f509bc015b80ba269225524b9f6dc741d6619935551537adbd1cdb5b90be"
|
|
32
|
+
},
|
|
33
|
+
{
|
|
34
|
+
"path": "AGENTS.md",
|
|
35
|
+
"sha256": "d90c009937084df71688ff409600ffcf7ba7ea8409df371b4a51a8a39219e887"
|
|
36
|
+
},
|
|
37
|
+
{
|
|
38
|
+
"path": "agents/architect.md",
|
|
39
|
+
"sha256": "ca7b097341d6ccfac8e36120e3bfa49e0c247fb45bd6d30ad77016938f306a72"
|
|
40
|
+
},
|
|
41
|
+
{
|
|
42
|
+
"path": "agents/developer.md",
|
|
43
|
+
"sha256": "79a44ad80a52786b53cf7f29d355dc4575f50005f05b2913b098639a44cdb8a5"
|
|
44
|
+
},
|
|
45
|
+
{
|
|
46
|
+
"path": "agents/discovery.md",
|
|
47
|
+
"sha256": "809e92797b08f60fd813f5506af61fec20893d2b8a91513c841d9f25130d57be"
|
|
48
|
+
},
|
|
49
|
+
{
|
|
50
|
+
"path": "agents/documentation.md",
|
|
51
|
+
"sha256": "98356586228a6cde7eeb83b730975462d718f9c51a02c75718d3d37b739e6c2c"
|
|
52
|
+
},
|
|
53
|
+
{
|
|
54
|
+
"path": "agents/environment.md",
|
|
55
|
+
"sha256": "15e844186e9c532e2aad59f496f7410778c9eeef4dea95efaf341372bfb64497"
|
|
56
|
+
},
|
|
57
|
+
{
|
|
58
|
+
"path": "agents/reviewer.md",
|
|
59
|
+
"sha256": "70a63f85a2ed4e0a86cd539cf3f880f80316d4ca1e4cc4a71ddd555312447e75"
|
|
60
|
+
},
|
|
61
|
+
{
|
|
62
|
+
"path": "docs/WORKFLOW.md",
|
|
63
|
+
"sha256": "75f387e222f83eaa273ff5c8fddd3d2a16ff958f89aa249f9ca2a221d24180c5"
|
|
64
|
+
},
|
|
65
|
+
{
|
|
66
|
+
"path": "integrations/codex/README.md",
|
|
67
|
+
"sha256": "053f48691fa232436f58cc8acf3327f0be316015459d91491cebc6b9e7c68c1d"
|
|
68
|
+
},
|
|
69
|
+
{
|
|
70
|
+
"path": "integrations/continue/README.md",
|
|
71
|
+
"sha256": "bc2cbbc97bc7091699228daef0560fec0625e77d7d08233f81dda79ffb58dbe2"
|
|
72
|
+
},
|
|
73
|
+
{
|
|
74
|
+
"path": "rules/cost-control.md",
|
|
75
|
+
"sha256": "301b03a349c4adf755c10a27902dcf90ca0bfe77d0f04caa08b45550a657f5d2"
|
|
76
|
+
},
|
|
77
|
+
{
|
|
78
|
+
"path": "rules/database.md",
|
|
79
|
+
"sha256": "05cdeb661832b20261704064cc3c915606ddcfb5e5b3bde865e960b65bbde7e1"
|
|
80
|
+
},
|
|
81
|
+
{
|
|
82
|
+
"path": "rules/general.md",
|
|
83
|
+
"sha256": "b98868c2222cbe9abd2624b1ac7135aee26566616759bbdf1f43120b91763834"
|
|
84
|
+
},
|
|
85
|
+
{
|
|
86
|
+
"path": "rules/git-workflow.md",
|
|
87
|
+
"sha256": "bfd8a405bbf4aaeb7c1fbe37234fae1415d478a300f765355197159fcaf74f5f"
|
|
88
|
+
},
|
|
89
|
+
{
|
|
90
|
+
"path": "rules/security.md",
|
|
91
|
+
"sha256": "cedc38b783b949ad44814fc2fd2c8e334dbf03e87278f68e93dff95e9c395694"
|
|
92
|
+
},
|
|
93
|
+
{
|
|
94
|
+
"path": "rules/testing.md",
|
|
95
|
+
"sha256": "eb263bacb910a078cb95947330e138d9b1fa5d1e643f388515cc4108c35ba326"
|
|
96
|
+
},
|
|
97
|
+
{
|
|
98
|
+
"path": "stacks/nodejs.md",
|
|
99
|
+
"sha256": "380a04fe5784c59aa729021503a721bbc4a25005781ffe017c6687a5fe1a1e97"
|
|
100
|
+
},
|
|
101
|
+
{
|
|
102
|
+
"path": "stacks/php-laravel.md",
|
|
103
|
+
"sha256": "ed81dc1a79332c37e26a2d01725bbdf574a3b242e1702cac04845b60dc0776c5"
|
|
104
|
+
},
|
|
105
|
+
{
|
|
106
|
+
"path": "stacks/php-native.md",
|
|
107
|
+
"sha256": "020ec07643b91e35fa6a5d8236be32caa6ffd231b96ca0648a4f7b3ea204d7ff"
|
|
108
|
+
},
|
|
109
|
+
{
|
|
110
|
+
"path": "stacks/wordpress.md",
|
|
111
|
+
"sha256": "2e838f6027f5c49d7d2336af9b54b46bbdb41f642bca912029ed0f4c5605e7b7"
|
|
112
|
+
},
|
|
113
|
+
{
|
|
114
|
+
"path": "templates/ARCHITECTURE.md",
|
|
115
|
+
"sha256": "99558cef12c7b2c583d1ac30dc2d7070f8bfa0dbb877d2ea5ca87ad85a9328af"
|
|
116
|
+
},
|
|
117
|
+
{
|
|
118
|
+
"path": "templates/BASELINE.md",
|
|
119
|
+
"sha256": "b64ee3e2c1046103e27ba2fd7d1aa44b82376e3a93b5a5c4e453b40ef3a6a7a0"
|
|
120
|
+
},
|
|
121
|
+
{
|
|
122
|
+
"path": "templates/CURRENT_STATE.md",
|
|
123
|
+
"sha256": "f1af1b1360f4faac7c12edbe5b700a3c9ecbeea8c10b9bbcf09bed2973704b1d"
|
|
124
|
+
},
|
|
125
|
+
{
|
|
126
|
+
"path": "templates/DATABASE_CHANGE.md",
|
|
127
|
+
"sha256": "9cf5bb46812a733b4fdd7d224176a4b77767da22b11928a386776d0f75d8d7d0"
|
|
128
|
+
},
|
|
129
|
+
{
|
|
130
|
+
"path": "templates/DECISIONS.md",
|
|
131
|
+
"sha256": "3fbabffefe1f3088c6d4666921200dbfd80c9847ade6008543ee12fc2f2d3fc8"
|
|
132
|
+
},
|
|
133
|
+
{
|
|
134
|
+
"path": "templates/DISCOVERY.md",
|
|
135
|
+
"sha256": "9940e09137b885c1d381fbd7aba4099f5630d6a6445261e771607ef35948502a"
|
|
136
|
+
},
|
|
137
|
+
{
|
|
138
|
+
"path": "templates/ENVIRONMENT.md",
|
|
139
|
+
"sha256": "6d51bc7ab5b34fe30f131d5a80bc3e66efdb2c7c2e97543c8eaf5161780014c1"
|
|
140
|
+
},
|
|
141
|
+
{
|
|
142
|
+
"path": "templates/PR_CHECKLIST.md",
|
|
143
|
+
"sha256": "b26943fae19d117705d80f496eb5c8a4bc03ce3f96808cf6d947c023c1e20a60"
|
|
144
|
+
},
|
|
145
|
+
{
|
|
146
|
+
"path": "templates/REQUIREMENTS.md",
|
|
147
|
+
"sha256": "1e510ef391914ac252ca804da7c0c23b392e8f9dc76dca63a73d2ce315384e40"
|
|
148
|
+
},
|
|
149
|
+
{
|
|
150
|
+
"path": "templates/TASK.md",
|
|
151
|
+
"sha256": "587291763b6d30d0d98e2682294d7d11a0906bc8ead00eb246344859e5e298cb"
|
|
152
|
+
},
|
|
153
|
+
{
|
|
154
|
+
"path": "templates/TASK_REPORT.md",
|
|
155
|
+
"sha256": "7a1d743d8a53d49b05f7d3ef1dc21fd80dd6e266d36e96cef991c418f6d818b6"
|
|
156
|
+
}
|
|
157
|
+
]
|
|
158
|
+
}
|
|
@@ -0,0 +1,207 @@
|
|
|
1
|
+
{
|
|
2
|
+
"catalogVersion": "2.0.0",
|
|
3
|
+
"templateVersion": "0.3.0",
|
|
4
|
+
"layoutVersion": "central-v2",
|
|
5
|
+
"files": [
|
|
6
|
+
{
|
|
7
|
+
"source": "payload/central/.continue/prompts/analisar-projeto.md",
|
|
8
|
+
"target": ".continue/prompts/analisar-projeto.md",
|
|
9
|
+
"sha256": "e3359d21a47558c970492db10d9b2813dd6c215425f40bf95ca60a72692a4a2f"
|
|
10
|
+
},
|
|
11
|
+
{
|
|
12
|
+
"source": "payload/central/.continue/prompts/documentar-task.md",
|
|
13
|
+
"target": ".continue/prompts/documentar-task.md",
|
|
14
|
+
"sha256": "61fe90a1ba248a70a46f28ff2292a2588ccfafec24a7b02817eefe023ae0ee3d"
|
|
15
|
+
},
|
|
16
|
+
{
|
|
17
|
+
"source": "payload/central/.continue/prompts/planejar-task.md",
|
|
18
|
+
"target": ".continue/prompts/planejar-task.md",
|
|
19
|
+
"sha256": "7ab4d2d95ad72574ae4a6e57db0fc4fcefc95da6385299dfa37b9562aa3788e2"
|
|
20
|
+
},
|
|
21
|
+
{
|
|
22
|
+
"source": "payload/central/.continue/prompts/revisar-codigo.md",
|
|
23
|
+
"target": ".continue/prompts/revisar-codigo.md",
|
|
24
|
+
"sha256": "17df0cde542c2a606d080ac1c850414cdce853e214a109c29125300983d7bae3"
|
|
25
|
+
},
|
|
26
|
+
{
|
|
27
|
+
"source": "payload/central/.continue/rules/workflow.md",
|
|
28
|
+
"target": ".continue/rules/workflow.md",
|
|
29
|
+
"sha256": "d5c60cb1bfcfbdb1d04dac1798d085149edd8860abe1ac6abb113d1c0e544d3c"
|
|
30
|
+
},
|
|
31
|
+
{
|
|
32
|
+
"source": "payload/central/.github/pull_request_template.md",
|
|
33
|
+
"target": ".github/pull_request_template.md",
|
|
34
|
+
"sha256": "3f12379a547e121bb9e00b5185ace6f7db42d937fdc8785c553f87aa167e365c"
|
|
35
|
+
},
|
|
36
|
+
{
|
|
37
|
+
"source": "payload/central/.gitignore.txt",
|
|
38
|
+
"target": ".gitignore",
|
|
39
|
+
"sha256": "d462f509bc015b80ba269225524b9f6dc741d6619935551537adbd1cdb5b90be"
|
|
40
|
+
},
|
|
41
|
+
{
|
|
42
|
+
"source": "payload/central/AGENTS.md",
|
|
43
|
+
"target": "AGENTS.md",
|
|
44
|
+
"sha256": "35688107e188cd4b6b1bc8f6cad5d655d1a6c2cbaf7dc8ca3e03f233a14f739d"
|
|
45
|
+
},
|
|
46
|
+
{
|
|
47
|
+
"source": "payload/central/.ai-dev-workflow/agents/architect.md",
|
|
48
|
+
"target": ".ai-dev-workflow/agents/architect.md",
|
|
49
|
+
"sha256": "ca7b097341d6ccfac8e36120e3bfa49e0c247fb45bd6d30ad77016938f306a72"
|
|
50
|
+
},
|
|
51
|
+
{
|
|
52
|
+
"source": "payload/central/.ai-dev-workflow/agents/developer.md",
|
|
53
|
+
"target": ".ai-dev-workflow/agents/developer.md",
|
|
54
|
+
"sha256": "79a44ad80a52786b53cf7f29d355dc4575f50005f05b2913b098639a44cdb8a5"
|
|
55
|
+
},
|
|
56
|
+
{
|
|
57
|
+
"source": "payload/central/.ai-dev-workflow/agents/discovery.md",
|
|
58
|
+
"target": ".ai-dev-workflow/agents/discovery.md",
|
|
59
|
+
"sha256": "eaf624f04cf6671b31ea57fd9b7118447418063bee604e669c6b7481973572ad"
|
|
60
|
+
},
|
|
61
|
+
{
|
|
62
|
+
"source": "payload/central/.ai-dev-workflow/agents/documentation.md",
|
|
63
|
+
"target": ".ai-dev-workflow/agents/documentation.md",
|
|
64
|
+
"sha256": "98356586228a6cde7eeb83b730975462d718f9c51a02c75718d3d37b739e6c2c"
|
|
65
|
+
},
|
|
66
|
+
{
|
|
67
|
+
"source": "payload/central/.ai-dev-workflow/agents/environment.md",
|
|
68
|
+
"target": ".ai-dev-workflow/agents/environment.md",
|
|
69
|
+
"sha256": "30a51d71482737afcfc3d07b0cb271349652a12802316857e0845b06245d2450"
|
|
70
|
+
},
|
|
71
|
+
{
|
|
72
|
+
"source": "payload/central/.ai-dev-workflow/agents/reviewer.md",
|
|
73
|
+
"target": ".ai-dev-workflow/agents/reviewer.md",
|
|
74
|
+
"sha256": "a27a64e52bbfe6004a63d011bdf2a41eb89cb15641f91ed5efb8cd0399d9c876"
|
|
75
|
+
},
|
|
76
|
+
{
|
|
77
|
+
"source": "payload/central/.ai-dev-workflow/docs/WORKFLOW.md",
|
|
78
|
+
"target": ".ai-dev-workflow/docs/WORKFLOW.md",
|
|
79
|
+
"sha256": "c101b17aa8a68447a2172d9f78c0c19aee5c57bebb06b6451ed3c71131befc95"
|
|
80
|
+
},
|
|
81
|
+
{
|
|
82
|
+
"source": "payload/central/.ai-dev-workflow/integrations/codex/README.md",
|
|
83
|
+
"target": ".ai-dev-workflow/integrations/codex/README.md",
|
|
84
|
+
"sha256": "91dd2b926f7f217c06663e18716e7f8b076f113a9e730eadc03df026b9798a8c"
|
|
85
|
+
},
|
|
86
|
+
{
|
|
87
|
+
"source": "payload/central/.ai-dev-workflow/integrations/continue/README.md",
|
|
88
|
+
"target": ".ai-dev-workflow/integrations/continue/README.md",
|
|
89
|
+
"sha256": "f8747bdc64fbb5795c6afd24c558ab308a6da7cf0e9b0566d65fa5584df26a46"
|
|
90
|
+
},
|
|
91
|
+
{
|
|
92
|
+
"source": "payload/central/.ai-dev-workflow/rules/cost-control.md",
|
|
93
|
+
"target": ".ai-dev-workflow/rules/cost-control.md",
|
|
94
|
+
"sha256": "301b03a349c4adf755c10a27902dcf90ca0bfe77d0f04caa08b45550a657f5d2"
|
|
95
|
+
},
|
|
96
|
+
{
|
|
97
|
+
"source": "payload/central/.ai-dev-workflow/rules/database.md",
|
|
98
|
+
"target": ".ai-dev-workflow/rules/database.md",
|
|
99
|
+
"sha256": "9951e3ed62ad2ab7d9d4e132c48b6be117086c3d45b5ffa4a18da68da3c98202"
|
|
100
|
+
},
|
|
101
|
+
{
|
|
102
|
+
"source": "payload/central/.ai-dev-workflow/rules/general.md",
|
|
103
|
+
"target": ".ai-dev-workflow/rules/general.md",
|
|
104
|
+
"sha256": "b98868c2222cbe9abd2624b1ac7135aee26566616759bbdf1f43120b91763834"
|
|
105
|
+
},
|
|
106
|
+
{
|
|
107
|
+
"source": "payload/central/.ai-dev-workflow/rules/git-workflow.md",
|
|
108
|
+
"target": ".ai-dev-workflow/rules/git-workflow.md",
|
|
109
|
+
"sha256": "bfd8a405bbf4aaeb7c1fbe37234fae1415d478a300f765355197159fcaf74f5f"
|
|
110
|
+
},
|
|
111
|
+
{
|
|
112
|
+
"source": "payload/central/.ai-dev-workflow/rules/security.md",
|
|
113
|
+
"target": ".ai-dev-workflow/rules/security.md",
|
|
114
|
+
"sha256": "46cda7bec84a1d9845551701bc6ad0444c7e8ab608a10ed3e42866074bf57459"
|
|
115
|
+
},
|
|
116
|
+
{
|
|
117
|
+
"source": "payload/central/.ai-dev-workflow/rules/testing.md",
|
|
118
|
+
"target": ".ai-dev-workflow/rules/testing.md",
|
|
119
|
+
"sha256": "47fabdf69a2c7c97aa0ca35ab19efa53cfb3732f8b9aa53d07094f8690761e19"
|
|
120
|
+
},
|
|
121
|
+
{
|
|
122
|
+
"source": "payload/central/.ai-dev-workflow/stacks/nodejs.md",
|
|
123
|
+
"target": ".ai-dev-workflow/stacks/nodejs.md",
|
|
124
|
+
"sha256": "380a04fe5784c59aa729021503a721bbc4a25005781ffe017c6687a5fe1a1e97"
|
|
125
|
+
},
|
|
126
|
+
{
|
|
127
|
+
"source": "payload/central/.ai-dev-workflow/stacks/php-laravel.md",
|
|
128
|
+
"target": ".ai-dev-workflow/stacks/php-laravel.md",
|
|
129
|
+
"sha256": "1f656f6e67f89a3556e627665952ea52ad4826c8602bc73b5e5de01d86497af3"
|
|
130
|
+
},
|
|
131
|
+
{
|
|
132
|
+
"source": "payload/central/.ai-dev-workflow/stacks/php-native.md",
|
|
133
|
+
"target": ".ai-dev-workflow/stacks/php-native.md",
|
|
134
|
+
"sha256": "020ec07643b91e35fa6a5d8236be32caa6ffd231b96ca0648a4f7b3ea204d7ff"
|
|
135
|
+
},
|
|
136
|
+
{
|
|
137
|
+
"source": "payload/central/.ai-dev-workflow/stacks/wordpress.md",
|
|
138
|
+
"target": ".ai-dev-workflow/stacks/wordpress.md",
|
|
139
|
+
"sha256": "2e838f6027f5c49d7d2336af9b54b46bbdb41f642bca912029ed0f4c5605e7b7"
|
|
140
|
+
},
|
|
141
|
+
{
|
|
142
|
+
"source": "payload/central/.ai-dev-workflow/templates/ARCHITECTURE.md",
|
|
143
|
+
"target": ".ai-dev-workflow/templates/ARCHITECTURE.md",
|
|
144
|
+
"sha256": "99558cef12c7b2c583d1ac30dc2d7070f8bfa0dbb877d2ea5ca87ad85a9328af"
|
|
145
|
+
},
|
|
146
|
+
{
|
|
147
|
+
"source": "payload/central/.ai-dev-workflow/templates/BASELINE.md",
|
|
148
|
+
"target": ".ai-dev-workflow/templates/BASELINE.md",
|
|
149
|
+
"sha256": "b64ee3e2c1046103e27ba2fd7d1aa44b82376e3a93b5a5c4e453b40ef3a6a7a0"
|
|
150
|
+
},
|
|
151
|
+
{
|
|
152
|
+
"source": "payload/central/.ai-dev-workflow/templates/CURRENT_STATE.md",
|
|
153
|
+
"target": ".ai-dev-workflow/templates/CURRENT_STATE.md",
|
|
154
|
+
"sha256": "f1af1b1360f4faac7c12edbe5b700a3c9ecbeea8c10b9bbcf09bed2973704b1d"
|
|
155
|
+
},
|
|
156
|
+
{
|
|
157
|
+
"source": "payload/central/.ai-dev-workflow/templates/DATABASE_CHANGE.md",
|
|
158
|
+
"target": ".ai-dev-workflow/templates/DATABASE_CHANGE.md",
|
|
159
|
+
"sha256": "9cf5bb46812a733b4fdd7d224176a4b77767da22b11928a386776d0f75d8d7d0"
|
|
160
|
+
},
|
|
161
|
+
{
|
|
162
|
+
"source": "payload/central/.ai-dev-workflow/templates/DECISIONS.md",
|
|
163
|
+
"target": ".ai-dev-workflow/templates/DECISIONS.md",
|
|
164
|
+
"sha256": "3fbabffefe1f3088c6d4666921200dbfd80c9847ade6008543ee12fc2f2d3fc8"
|
|
165
|
+
},
|
|
166
|
+
{
|
|
167
|
+
"source": "payload/central/.ai-dev-workflow/templates/DISCOVERY.md",
|
|
168
|
+
"target": ".ai-dev-workflow/templates/DISCOVERY.md",
|
|
169
|
+
"sha256": "9940e09137b885c1d381fbd7aba4099f5630d6a6445261e771607ef35948502a"
|
|
170
|
+
},
|
|
171
|
+
{
|
|
172
|
+
"source": "payload/central/.ai-dev-workflow/templates/ENVIRONMENT.md",
|
|
173
|
+
"target": ".ai-dev-workflow/templates/ENVIRONMENT.md",
|
|
174
|
+
"sha256": "bf38a98a064127186b3ac95cd92c37105330a78952d9e0bc8c307b3c8348995b"
|
|
175
|
+
},
|
|
176
|
+
{
|
|
177
|
+
"source": "payload/central/.ai-dev-workflow/templates/PR_CHECKLIST.md",
|
|
178
|
+
"target": ".ai-dev-workflow/templates/PR_CHECKLIST.md",
|
|
179
|
+
"sha256": "b26943fae19d117705d80f496eb5c8a4bc03ce3f96808cf6d947c023c1e20a60"
|
|
180
|
+
},
|
|
181
|
+
{
|
|
182
|
+
"source": "payload/central/.ai-dev-workflow/templates/REQUIREMENTS.md",
|
|
183
|
+
"target": ".ai-dev-workflow/templates/REQUIREMENTS.md",
|
|
184
|
+
"sha256": "1e510ef391914ac252ca804da7c0c23b392e8f9dc76dca63a73d2ce315384e40"
|
|
185
|
+
},
|
|
186
|
+
{
|
|
187
|
+
"source": "payload/central/.ai-dev-workflow/templates/TASK.md",
|
|
188
|
+
"target": ".ai-dev-workflow/templates/TASK.md",
|
|
189
|
+
"sha256": "e76909bb4f56c29ad0ca7523d94287e088b3d905ab39418b5c992e316e73131a"
|
|
190
|
+
},
|
|
191
|
+
{
|
|
192
|
+
"source": "payload/central/.ai-dev-workflow/templates/TASK_REPORT.md",
|
|
193
|
+
"target": ".ai-dev-workflow/templates/TASK_REPORT.md",
|
|
194
|
+
"sha256": "7a1d743d8a53d49b05f7d3ef1dc21fd80dd6e266d36e96cef991c418f6d818b6"
|
|
195
|
+
},
|
|
196
|
+
{
|
|
197
|
+
"source": "payload/central/CLAUDE.md",
|
|
198
|
+
"target": "CLAUDE.md",
|
|
199
|
+
"sha256": "05eda36ae6978116a63485157db7cc331490878b3562c481eeb1538cccabc6cf"
|
|
200
|
+
},
|
|
201
|
+
{
|
|
202
|
+
"source": "payload/central/GEMINI.md",
|
|
203
|
+
"target": "GEMINI.md",
|
|
204
|
+
"sha256": "05eda36ae6978116a63485157db7cc331490878b3562c481eeb1538cccabc6cf"
|
|
205
|
+
}
|
|
206
|
+
]
|
|
207
|
+
}
|
package/docs/CLI.md
ADDED
|
@@ -0,0 +1,216 @@
|
|
|
1
|
+
# CLI do AI Dev Workflow
|
|
2
|
+
|
|
3
|
+
Para o primeiro uso, consulte o [Quickstart](QUICKSTART.md). Este guia detalha comportamento, isolamento e recuperação. Quickstart e guia de estrutura acompanham o checkout/pacote da ferramenta; não são documentos instalados no projeto pelo catálogo.
|
|
4
|
+
|
|
5
|
+
## Escopo e requisitos
|
|
6
|
+
CLI **0.5.0**, template central **0.3.0**, catálogo/manifesto **2.0.0**, layout **central-v2** (SemVer). Node.js **24.x** exclusivamente para a ferramenta. Git **2.28+** disponível para init, doctor e testes; status/validate sem --save inspecionam a instalação e o isolamento dos metadados por filesystem, sem executar Git. Os quatro comandos exigem metadados Git locais verificáveis. Não instalar a CLI como dependência da aplicação. Não alterar Node, PHP, Java, Ruby, Python, package.json, lockfiles, PATH ou gerenciadores de versões do destino.
|
|
7
|
+
|
|
8
|
+
Sem dependências npm. npm e tar são necessários para os testes de empacotamento, não para executar a CLI. O pacote não foi publicado. Não existem upgrade, downgrade, repair, --force ou --yes. Nenhum comando acessa banco, produção ou rede, nem executa scripts/hooks da aplicação. A CLI só chama comandos Git fixos de inspeção, sem shell. MANUAL_SQL é o padrão dos contextos novos; instalar não concede G0–G6, DB_CHANGE ou DB_EXEC.
|
|
9
|
+
|
|
10
|
+
## Preparar um projeto novo
|
|
11
|
+
O destino deve existir e ser a raiz de um Git real, sem repositório pai/aninhado e em branch de task. Depois de obter autorização para criar o diretório/Git, preparar manualmente (exemplo sintético):
|
|
12
|
+
|
|
13
|
+
```sh
|
|
14
|
+
mkdir "/caminho/projeto-novo"
|
|
15
|
+
git init --initial-branch=feature/TASK-001-bootstrap "/caminho/projeto-novo"
|
|
16
|
+
```
|
|
17
|
+
|
|
18
|
+
Não executar init Git sobre aplicação existente sem autorização. Confirmar `git -C "/caminho/projeto" rev-parse --show-toplevel` e a branch antes de prosseguir. Não é necessário criar commit: branches válidas ainda sem commit (unborn) são aceitas. A CLI nunca executa git init, cria branches, faz commit/push ou resolve conflitos automaticamente. Se houver Git no diretório pai, escolher outro destino isolado ou obter revisão manual; a CLI não oferece bypass.
|
|
19
|
+
|
|
20
|
+
## Execução com Node 24 separado da aplicação
|
|
21
|
+
Usar um executável Node 24 já disponível no ambiente da ferramenta. Não executar npm install/update no destino. Os caminhos abaixo são placeholders, sempre entre aspas:
|
|
22
|
+
|
|
23
|
+
```sh
|
|
24
|
+
node "/caminho/ai-dev-workflow/bin/ai-dev-workflow.js" --help
|
|
25
|
+
node "/caminho/ai-dev-workflow/bin/ai-dev-workflow.js" --version --json
|
|
26
|
+
node "/caminho/ai-dev-workflow/bin/ai-dev-workflow.js" init --target "/caminho/projeto-novo" --track new --dry-run --json
|
|
27
|
+
node "/caminho/ai-dev-workflow/bin/ai-dev-workflow.js" init --target "/caminho/projeto-legado" --track existing --dry-run --json
|
|
28
|
+
```
|
|
29
|
+
|
|
30
|
+
Após revisar o destino canonicalizado, o plano e obter autorização para criar os arquivos:
|
|
31
|
+
|
|
32
|
+
```sh
|
|
33
|
+
node "/caminho/ai-dev-workflow/bin/ai-dev-workflow.js" init --target "/caminho/projeto-legado" --track existing --json
|
|
34
|
+
node "/caminho/ai-dev-workflow/bin/ai-dev-workflow.js" doctor --target "/caminho/projeto-legado" --json
|
|
35
|
+
node "/caminho/ai-dev-workflow/bin/ai-dev-workflow.js" status --target "/caminho/projeto-legado" --json
|
|
36
|
+
node "/caminho/ai-dev-workflow/bin/ai-dev-workflow.js" validate --target "/caminho/projeto-legado" --dry-run --json
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
No Windows/PowerShell usar, por exemplo:
|
|
40
|
+
|
|
41
|
+
```powershell
|
|
42
|
+
node "C:\ferramentas\ai-dev-workflow\bin\ai-dev-workflow.js" init --target "C:\projetos\legado" --track existing --dry-run --json
|
|
43
|
+
node "C:\ferramentas\ai-dev-workflow\bin\ai-dev-workflow.js" doctor --target "C:\projetos\legado" --json
|
|
44
|
+
```
|
|
45
|
+
|
|
46
|
+
Esse terminal deve ter Node 24 e Git próprios da ferramenta disponíveis previamente. Não trocar o runtime da aplicação: preferir Docker se não for desejável manter essa instalação isolada no host.
|
|
47
|
+
|
|
48
|
+
## Comandos, flags e resultados
|
|
49
|
+
| Comando | Efeito |
|
|
50
|
+
| --- | --- |
|
|
51
|
+
| init --target DIR --track new | Contexto inicial P00 Requirements & Architecture, MANUAL_SQL, aprovações pendentes |
|
|
52
|
+
| init --target DIR --track existing | Contexto inicial P01 Discovery, MANUAL_SQL, aprovações pendentes |
|
|
53
|
+
| doctor --target DIR | Diagnóstico Git real e instalação; sem reparos |
|
|
54
|
+
| status --target DIR | Versões, trilha instalada e estados unchanged/modified/customized/missing |
|
|
55
|
+
| validate --target DIR | Estrutura, hashes, referências e frontmatter básico, modo declarado e ausência de instalação pendente |
|
|
56
|
+
|
|
57
|
+
Todos aceitam --dry-run e --json. Init (inclusive dry-run) é bloqueado em instalações legadas com LEGACY_READ_ONLY; não cria segunda instalação nem migra arquivos. Sem --save, inspeções são somente leitura. Init em dry-run não cria diretórios, lock, journal, manifesto ou logs persistentes. --track só é aceito em init e não pode mudar uma instalação existente. --target é opcional nos cinco comandos: omitido usa process.cwd(), sem procurar outra raiz ou promover para o pai. Alvo explícito prevalece e não pode ser vazio. --help/--version dispensam alvo. Esses flags também funcionam com --json.
|
|
58
|
+
|
|
59
|
+
Em --json, **stdout contém um único objeto JSON**. Antes de qualquer escrita de init, o **stderr informa o destino canonicalizado**; isso não é outro objeto JSON nem log persistente. O resultado normal também inclui canonicalTarget. Capturar stdout separadamente de stderr ao automatizar. Falhas de validação de argumento/caminho podem ocorrer antes de haver destino canonicalizado.
|
|
60
|
+
|
|
61
|
+
Exemplo real de `--version --json`:
|
|
62
|
+
|
|
63
|
+
```json
|
|
64
|
+
{"ok":true,"message":"0.5.0"}
|
|
65
|
+
```
|
|
66
|
+
|
|
67
|
+
Exemplo de erro por instalação interrompida (código de saída 2; sem execução de escrita):
|
|
68
|
+
|
|
69
|
+
```json
|
|
70
|
+
{"ok":false,"code":"INSTALL_INCOMPLETE","message":"Journal de instalação presente. Init/status/validate bloqueados até reconciliação humana segura; nenhum arquivo será adotado."}
|
|
71
|
+
```
|
|
72
|
+
|
|
73
|
+
Init retorna operations (path/kind/action), created quando executado e, em falha intermediária, journal. Status retorna versões, installedTrack e files. Doctor retorna checks; validate retorna findings e files. Os formatos variam por comando/erro; nenhum retorna conteúdo de arquivos, credenciais ou stack traces. Status informa a trilha original, não interpreta fase atual ou aprovação humana em Markdown livre.
|
|
74
|
+
|
|
75
|
+
| Exit code | Significado |
|
|
76
|
+
| --- | --- |
|
|
77
|
+
| 0 | Operação concluída; status pode informar drift sem ser um erro operacional |
|
|
78
|
+
| 1 | Erro operacional: EACCES, ENOSPC, I/O, Git ausente/inexecutável, falha de limpeza de lock/journal ou Node incompatível |
|
|
79
|
+
| 2 | Conflito/validação bloqueante: arquivo diferente, journal pendente, modo não declarado, manifesto inválido, Git/branch/caminho inseguros ou lock ocupado |
|
|
80
|
+
| 3 | Argumentos inválidos: comando/flag/trilha desconhecidos ou argumentos obrigatórios ausentes |
|
|
81
|
+
|
|
82
|
+
Os cinco comandos seguem esses códigos. Doctor prioriza 1 se houver falha operacional, mesmo que outros checks também indiquem bloqueios 2. Validate reprova drift gerenciado; status apenas o apresenta. Ausência de Git no projeto resulta em bloqueio 2; ausência do executável necessário resulta em erro 1. Sem inferência automática de aprovações.
|
|
83
|
+
|
|
84
|
+
## Verificação Git e política de caminhos
|
|
85
|
+
Init/doctor usam Git real para verificar show-toplevel, git-dir/common-dir, árvore não bare, symbolic-ref, sintaxe da referência e HEAD como commit ou branch unborn válida. Prefixo em .git/HEAD sozinho não basta. Bloqueados: repositório pai/aninhado, marcador falso, metadados incompletos, objetos HEAD ausentes, main/master, HEAD destacado, worktree/submódulo/metadados externos e overrides Git relevantes. Includes locais de configuração e alternates de objetos são recusados para evitar leituras externas implícitas. Configurações globais/sistema são desabilitadas nas consultas; não são executados hooks ou operações de rede. A verificação não é git fsck completo.
|
|
86
|
+
|
|
87
|
+
Links/junctions no destino final, em ancestrais fornecidos pelo usuário ou nos caminhos gerenciados são bloqueados. Não há flag de bypass: após revisão, fornecer diretamente o diretório real. Exceções conservadoras no macOS: aliases de sistema /tmp→/private/tmp, /var→/private/var e /etc→/private/etc, somente como ancestrais e após comprovar o destino exato com realpath. Não se aplica a aliases arbitrários. Caminhos diretos com espaços/acentos continuam aceitos. O diretório precisa existir: TARGET_MISSING exige preparação manual, não criação implícita.
|
|
88
|
+
|
|
89
|
+
O destino canonicalizado é apresentado antes das escritas, inclusive em init --json via stderr; em dry-run aparece no resultado. Permissões/ACLs devem garantir que outros processos não troquem diretórios/links durante a operação. Verificações e wx não eliminam todas as races de filesystem hostil. Compartilhamentos com exclusividade de criação não confiável não são suportados.
|
|
90
|
+
|
|
91
|
+
### Armazenamento Git suportado e bloqueado
|
|
92
|
+
Antes de qualquer consulta ao executável Git, a CLI percorre a árvore `.git` por filesystem, usando lstat sem seguir links. Init (inclusive --dry-run), doctor, status e validate aplicam essa política; status/validate não passam a depender do executável Git nem verificam branch/HEAD por comandos Git. Metadados ausentes ou inseguros bloqueiam também essas inspeções. Nenhuma consulta Git é usada para descobrir se um caminho redirecionado é seguro.
|
|
93
|
+
|
|
94
|
+
Suportado: `.git` local convencional, objetos loose e packs/índices regulares dentro dessa árvore, refs em arquivos/packed-refs, branch unborn e arquivos auxiliares locais regulares (commit-graph, multi-pack-index, bitmap e reverse index). A inspeção de caminhos não certifica o conteúdo binário desses formatos nem substitui git fsck; HEAD/branch são verificados pelo Git somente em init/doctor. Repositórios shallow locais sem outros mecanismos indiretos não são bloqueados só por conterem shallow; não há fetch ou preenchimento de objetos ausentes.
|
|
95
|
+
|
|
96
|
+
Bloqueado, mesmo quando o destino aparente é interno: symlinks/junctions em qualquer ponto de `.git`, hardlinks de arquivos (nlink diferente de 1), arquivos especiais, metadados compartilhados/gitfiles/worktrees/submódulos, commondir/gitdir/config.worktree, alternates/http-alternates, grafts, refs/replace em arquivos, reftable, marcadores .promisor, configuração promisor/partialClone/refStorage/worktreeConfig/core.worktree e includes/includeIf. A aplicação também desabilita replace objects nas consultas Git. Clones locais que compartilham objetos via hardlinks exigem uma cópia independente preparada pelo humano; a CLI não os converte. Nenhum bypass é oferecido. Links internos não são tratados como exceção segura.
|
|
97
|
+
|
|
98
|
+
A varredura cobre também caminhos auxiliares de objetos, packs, índices, commit-graphs e refs; não lê o conteúdo de destinos recusados. Limites conservadores: 100000 entradas e 64 níveis, incluindo `.git`; excedê-los resulta em GIT_METADATA_LIMIT (exit 2). Links/mecanismos indiretos resultam em GIT_EXTERNAL_METADATA (exit 2); I/O/permissões não verificáveis resultam em erro operacional (exit 1). Nenhum comando altera metadados Git para resolver o bloqueio. A varredura tem custo proporcional ao inventário de `.git`.
|
|
99
|
+
|
|
100
|
+
Arquivos regulares locais podem conter dados Git inválidos; esta política comprova caminhos dentro das premissas do filesystem, não a integridade completa de todos os objetos/refs. Não protege contra um processo hostil alterando metadados entre a checagem e o uso, mounts redirecionados pelo administrador, executável Git comprometido ou alterações do próprio SO. Exigir ACLs e destino estável durante a operação. Não executar a ferramenta em filesystem hostil ou compartilhamento sem garantias de isolamento.
|
|
101
|
+
|
|
102
|
+
## Catálogo, manifesto e personalizações
|
|
103
|
+
catalog/template.json mantém source/target explícitos e hashes de 40 payloads centrais; catalog/legacy-v1.json congela as 38 fontes antigas. Não copia docs/project, docs/tasks ou decisões deste repositório. .gitattributes fixa LF entre plataformas. Não atualizar hashes para esconder drift; fontes distribuídas permanecem canônicas.
|
|
104
|
+
|
|
105
|
+
.ai-dev-workflow/install.json central mantém manifestVersion, layoutVersion, cliVersion, templateVersion, track e files (path/kind/source/installedHash). managed são regras/templates; custom é contexto/configuração do projeto, incluindo .gitignore nesta revisão TASK-004.1. Não contém segredos ou aprovações. Hash compara bytes, não autenticidade: confiar na origem da ferramenta.
|
|
106
|
+
|
|
107
|
+
Ausente → create; idêntico → unchanged; gerenciado diferente → conflict, sem escrita; contexto preexistente válido → preserve-custom. Não sobrescrever ou fazer merge automático. Reexecução equivalente central não regrava arquivos ou manifesto; só adquire/libera lock efêmero. Versão/formato incompatíveis bloqueiam sem migração. CURRENT_STATE, ENVIRONMENT e DECISIONS novos recebem defaults; existentes não têm decisões revogadas ou substituídas. ENVIRONMENT deve conter uma linha explícita `Modo de banco: MANUAL_SQL` (ou `Modo:` com um dos três modos válidos). Outros modos só são legítimos mediante escolha/aprovações humanas conforme rules/database.md; a CLI não os autoriza nem executa banco. Arquivo sem modo exige revisão, nunca adoção silenciosa.
|
|
108
|
+
|
|
109
|
+
### .gitignore do projeto (TASK-004.1)
|
|
110
|
+
A CLI não necessita acrescentar regras próprias ao .gitignore para executar init/doctor/status/validate. A fonte do catálogo continua sendo verificada por hash, mas o arquivo instalado é configuração personalizada do projeto. Em ambas as trilhas, um .gitignore existente (inclusive vazio, CRLF, comentários e negações) é preservado byte a byte, sem append, merge ou troca de ordem. O plano usa preserve-custom quando diferente do modelo e unchanged quando idêntico. O manifesto registra o hash base e kind custom; alterações posteriores aparecem como customized, sem reprovar validate só por diferenças nesse arquivo. Isso não certifica que suas regras sejam seguras ou adequadas.
|
|
111
|
+
|
|
112
|
+
Quando ausente numa primeira instalação, o plano propõe create e a execução autorizada cria exclusivamente o modelo do catálogo pelo journal existente. Dry-run não cria nada. Se o arquivo sumir após uma instalação registrada, init bloqueia com CONFLICT em vez de recriar configurações personalizadas silenciosamente; validate informa missing. Reconciliação humana é necessária. Links/arquivos especiais/caminhos inseguros permanecem bloqueados, assim como conflitos em AGENTS.md ou outras fontes managed. Journal pendente bloqueia qualquer adoção, inclusive de .gitignore parcial.
|
|
113
|
+
|
|
114
|
+
No perfil de diagnóstico legado, manifestos anteriores que registravam .gitignore como managed são aceitos somente com source correto e hash base igual ao modelo canônico, além de todas as verificações normais do inventário. A classificação é normalizada apenas em memória para custom: o manifesto em disco e o arquivo local não são regravados automaticamente. Hash legado adulterado continua inválido. Manifestos centrais têm formato 2.0.0/layout central-v2 e exigem leitor compatível com templateVersion (0.3.0 requer a CLI 0.4.0 desta implementação); leitores antigos os recusam. No formato central não é aceita a exceção de kind managed para .gitignore. Não há downgrade/migração automática nem garantia de leitura por versões anteriores.
|
|
115
|
+
|
|
116
|
+
Revise manualmente as regras de versionamento do projeto: padrões abrangentes podem ocultar SQL ou artefatos do workflow, enquanto ausência de regras pode expor arquivos sensíveis. A preservação não copia as proteções genéricas do template para arquivos existentes. Git/.gitignore não garantem ausência de segredos. Revisar SQL antes de versionar; não usar git add -f, alterar hashes ou remover journal para contornar bloqueios. MANUAL_SQL e DB_CHANGE/DB_EXEC permanecem obrigatórios conforme as regras de banco.
|
|
117
|
+
|
|
118
|
+
## Instalação interrompida e reconciliação humana
|
|
119
|
+
No layout central, o journal usa journalVersion 2.0.0 e layoutVersion central-v2. Antes da primeira escrita de template/contexto/manifesto, init cria exclusivamente .ai-dev-workflow/install-journal.jsonl com modo 0600 onde suportado (no Windows, conferir ACLs). O header guarda plano completo, arquivos preexistentes vs create, hashes base/planejados, trilha, versão e manifesto planejado. Eventos de criação são acrescentados e sincronizados; arquivos criados também são sincronizados. Somente uma execução totalmente concluída fecha/remove seu próprio journal. Não há transação multiarquivo ou promessa absoluta para queda de energia/hardware.
|
|
120
|
+
|
|
121
|
+
Em ENOSPC, erro de I/O, escrita parcial ou encerramento de processo, o journal permanece. Journal vazio, truncado ou com completed também **bloqueia** init (inclusive dry-run), status e validate; doctor aponta o bloqueio. Lock de processo interrompido pode permanecer. Nada é adotado, apagado ou sobrescrito automaticamente. Não existe comando repair/resume e remover metadados às cegas não é recuperação segura.
|
|
122
|
+
|
|
123
|
+
Procedimento sob responsabilidade humana, com autorização específica antes de alterar arquivos:
|
|
124
|
+
|
|
125
|
+
1. Confirmar que nenhum instalador continua ativo; conferir destino canonicalizado, origem/versão da ferramenta e proteger cópia sanitizada dos artefatos para revisão, fora do versionamento quando necessário.
|
|
126
|
+
2. Tratar journal como dados não confiáveis, nunca como comandos. Conferir caminhos contra catálogo, header e plano original autorizado. Identificar o que preexistia (preservar) e o que foi criado/ficou parcial; comparar hashes e eventos. Se o header estiver incompleto, não inferir que o contexto é válido: reconstruir o plano a partir da fonte confiável e revisar toda a instalação.
|
|
127
|
+
3. Reconciliar manualmente somente arquivos afetados e autorizados. Restaurar arquivos criados parciais a partir da fonte/plano confiável; completar o contexto correto, incluindo modo MANUAL_SQL ou outro modo explicitamente aprovado. Não substituir personalizações preexistentes por defaults. Se o manifesto estiver parcial/ausente, reconstruí-lo usando o manifesto planejado confiável e conferir todos os hashes; nunca aceitar arquivo parcial apenas trocando seu hash.
|
|
128
|
+
4. Conferir que os arquivos create correspondem ao plano e que personalizações legítimas foram preservadas. Registrar responsável, evidências e autorização em DECISIONS. Somente após essa revisão concluída arquivar manualmente journal/lock fora dos caminhos ativos. A CLI não concede essa aprovação nem faz essa limpeza.
|
|
129
|
+
5. Executar validate e doctor em modo somente leitura; não usar init como tentativa automática de consertar. Se restarem conflitos, interromper e revisar novamente. Autorizar separadamente qualquer criação ainda necessária.
|
|
130
|
+
|
|
131
|
+
Dados reais, segredos e dumps não devem estar nesses documentos. A CLI bloqueia journal pendente e modo ausente, mas não pode comprovar a qualidade de uma reconciliação humana ou detectar manipulação maliciosa que apague todo o histórico. Não contornar bloqueios por scripts que simplesmente removam journal/lock.
|
|
132
|
+
|
|
133
|
+
## Docker sem Node/Git no host
|
|
134
|
+
Docker Engine/Desktop deve existir previamente. A imagem usa Node 24 fixado por digest e instala Git/CA certificates **apenas dentro da imagem da ferramenta**, sem npm install e sem alterar aplicações. A preparação inicial da imagem precisa acessar os repositórios Debian; após isso, os testes/CLI rodam sem rede. O antigo build com --network none não serve para uma camada Git ainda não cacheada.
|
|
135
|
+
|
|
136
|
+
Após autorização para preparar a imagem local, sem publicar:
|
|
137
|
+
|
|
138
|
+
```sh
|
|
139
|
+
docker build --pull=false -t ai-dev-workflow:local "/caminho/ai-dev-workflow"
|
|
140
|
+
docker run --rm --network none --read-only --tmpfs /tmp --cap-drop ALL --security-opt no-new-privileges --mount "type=bind,source=/caminho/projeto,target=/project" ai-dev-workflow:local init --target /project --track existing --dry-run --json
|
|
141
|
+
```
|
|
142
|
+
|
|
143
|
+
Após autorização da criação, retirar --dry-run. Para inspeções montar somente leitura:
|
|
144
|
+
|
|
145
|
+
```sh
|
|
146
|
+
docker run --rm --network none --read-only --tmpfs /tmp --mount "type=bind,source=/caminho/projeto,target=/project,readonly" ai-dev-workflow:local doctor --target /project --json
|
|
147
|
+
docker run --rm --network none --read-only --tmpfs /tmp --mount "type=bind,source=/caminho/projeto,target=/project,readonly" ai-dev-workflow:local status --target /project --json
|
|
148
|
+
docker run --rm --network none --read-only --tmpfs /tmp --mount "type=bind,source=/caminho/projeto,target=/project,readonly" ai-dev-workflow:local validate --target /project --json
|
|
149
|
+
```
|
|
150
|
+
|
|
151
|
+
USER node é padrão. No Linux, usar `--user UID:GID` do proprietário somente após conferência; não resolver permissões com chmod geral ou root automaticamente. Git pode rejeitar propriedade duvidosa: não configurar safe.directory=*; corrigir isolamento/propriedade do mount sob revisão. Não montar Docker socket, diretório pessoal ou produção. Git externo ao mount/worktrees é bloqueado; root e branch reais devem estar acessíveis dentro do mount. Somente o alvo aprovado deve ser montado para escrita.
|
|
152
|
+
|
|
153
|
+
No macOS/Windows Docker Desktop usa VM Linux. Compartilhar pastas e conferir permissões/conversão de caminhos; no PowerShell usar caminho absoluto Windows com aspas em --mount, sem substituições Unix. Symlinks de host cujo destino não exista no mount não são contornados automaticamente. Teste Docker não comprova execução nativa macOS/Windows. Imagem/arquitetura dependem do suporte oficial e build pode resolver metadados da base; nenhum serviço externo é consultado pela CLI em execução.
|
|
154
|
+
|
|
155
|
+
## Testes e versões futuras
|
|
156
|
+
Somente no repositório da ferramenta, com Node 24/Git/tar disponíveis:
|
|
157
|
+
|
|
158
|
+
```sh
|
|
159
|
+
python3 -B scripts/build-payloads.py --check
|
|
160
|
+
node scripts/check-catalog.js
|
|
161
|
+
npm test
|
|
162
|
+
python3 -B scripts/check-template.py
|
|
163
|
+
```
|
|
164
|
+
|
|
165
|
+
Sem npm install/ci. Fixtures são Git reais, sem commits/push e com dados sintéticos em temporários; regressões encerram apenas subprocessos próprios para simular interrupção. Teste de pacote usa npm pack --offline --ignore-scripts e tar, sem publicação. A CI prepara Node 24 em Linux/macOS/Windows e verifica Git; preparar CI não significa executá-la. Execução remota/nativa segue pendente até comprovada.
|
|
166
|
+
|
|
167
|
+
Upgrade/downgrade/migração/rollback automáticos continuam fora do escopo. Uma atualização futura exige plano de diferenças, riscos/conflitos, aprovação humana e comparação base/atual/novo preservando personalizações; nunca atualização automática da stack ou execução de banco. Os formatos de manifesto e journal são versionados separadamente; journal pendente nunca é migrado/adotado automaticamente. Rollback futuro dependerá de backup/snapshot sanitizado validado. Antes de release, rever SemVer, imagem e hashes sem alterar histórico para ocultar diferenças.
|
|
168
|
+
|
|
169
|
+
## Estrutura central e instalações legadas (TASK-005)
|
|
170
|
+
Em uma primeira instalação, agents, rules, stacks, templates, integrations e docs/WORKFLOW vão para .ai-dev-workflow/. Na raiz permanecem AGENTS.md, .continue/*, .github/pull_request_template.md e .gitignore. Documentos próprios continuam em docs/project e docs/tasks. As fontes do checkout da ferramenta continuam nos diretórios de desenvolvimento anteriores; não confundir source do catálogo com target na aplicação. Consulte o [guia de estrutura](LAYOUT.md).
|
|
171
|
+
|
|
172
|
+
Payloads são preparados explicitamente, antes de distribuir, em payload/central; não há substituição de referências em runtime. O asset .gitignore.txt evita omissão pelo npm, mas seu target continua .gitignore. python3 scripts/build-payloads.py gera os payloads novos; --check apenas confere. Nunca regenerar payload/legacy-v1 a partir de regras atuais: seus bytes correspondem ao perfil antigo. Catálogo/manifesto não são assinaturas.
|
|
173
|
+
|
|
174
|
+
Perfis suportados:
|
|
175
|
+
|
|
176
|
+
| Manifesto | Diagnóstico | init, inclusive --dry-run |
|
|
177
|
+
| --- | --- | --- |
|
|
178
|
+
| 2.0.0 + layoutVersion central-v2 + template 0.3.0 | Perfil atual, hashes e referências centrais | Instalação/reexecução equivalente, sem sobrescrita |
|
|
179
|
+
| 2.0.0 + layoutVersion central-v2 + template 0.2.0 | Snapshot central anterior, somente leitura | TEMPLATE_READ_ONLY (exit 2), sem reparo |
|
|
180
|
+
| 1.0.0 + template 0.1.0 + sem layoutVersion | Perfil legacy-v1 imutável; doctor/status/validate somente leitura | Bloqueado com LEGACY_READ_ONLY (exit 2), mesmo se instalação equivalente |
|
|
181
|
+
| Desconhecido, ambíguo ou inválido | Bloqueio explícito; sem fallback | Nenhuma migração/adoção |
|
|
182
|
+
|
|
183
|
+
JSON informa layoutVersion/readOnly no diagnóstico; readOnly:true identifica a limitação do perfil legado, não uma permissão de escrita no central. Sem --save, todos os comandos de diagnóstico continuam somente leitura; o opt-in grava apenas documentos de registro, sem migrar o núcleo. Journal presente, inclusive vazio/completed ou da versão antiga, bloqueia antes de interpretar o perfil. Manifesto parcial não permite adotar payloads novos. Legacy managed e custom para .gitignore são suportados estritamente; drift em regras antigas continua sendo reportado, sem reparo.
|
|
184
|
+
|
|
185
|
+
Namespace .ai-dev-workflow preexistente sem manifesto reconhecido e com outros arquivos é NAMESPACE_CONFLICT (exit 2). Lock ocupado e journal mantêm bloqueios próprios. Diretórios homônimos da aplicação fora desse namespace não são adotados/movidos/removidos. Adaptadores preexistentes diferentes continuam CONFLICT: não mesclar instruções ou aprovações automaticamente. Uma cópia central nova ao lado de instalação legada não é upgrade e não é criada por init.
|
|
186
|
+
|
|
187
|
+
Migração manual, conversão de manifesto, atualização de adaptadores legados, upgrade/downgrade e retirada de diretórios antigos dependem de tarefa/plano e aprovação humana separados. Não editar manifesto ou apagar journal para contornar bloqueio. Mudança da ferramenta não muda runtime/dependências da aplicação, modo de banco ou aprovações.
|
|
188
|
+
|
|
189
|
+
## Discover (introduzido na CLI 0.3.0)
|
|
190
|
+
|
|
191
|
+
O novo comando `discover --target DIR` produz análise estática somente leitura em texto/JSON por padrão, com persistência somente por --save. Aceita qualquer branch e HEAD destacado seguros; sem Git exige `--allow-no-git`. As restrições Git dos quatro comandos anteriores descritas acima permanecem intactas. `--dry-run` não escreve; `--track` não se aplica. Veja [cobertura, evidências e limitações](DISCOVERY_CLI.md). Discover não migra instalações nem altera o template, manifesto ou aprovações do alvo.
|
|
192
|
+
|
|
193
|
+
## Multi-IA (CLI 0.4.0/template 0.3.0)
|
|
194
|
+
|
|
195
|
+
CLAUDE.md/GEMINI.md são adaptadores custom preservados, com imports canônicos nas primeiras instalações. O catálogo tem 40 fontes, mais 3 contextos; formato do manifesto continua 2.0.0. Perfil congelado do template 0.2.0 permite inspeções readonly e bloqueia init, inclusive dry-run, sem acrescentar adaptadores. Veja [o guia multi-IA](MULTI_AI.md) para hashes, imports e limites de personalizações/carregamento real. As seções anteriores sobre versão 0.2.0 identificam o contrato histórico; 0.3.0 é o template padrão atual. Nenhuma pergunta interativa ou migração automática foi acrescentada.
|
|
196
|
+
|
|
197
|
+
## Alvo implícito (TASK-008)
|
|
198
|
+
Na raiz autorizada do projeto, os cinco comandos podem omitir --target:
|
|
199
|
+
```sh
|
|
200
|
+
node /caminho/ai-dev-workflow/bin/ai-dev-workflow.js init --track existing --dry-run --json
|
|
201
|
+
node /caminho/ai-dev-workflow/bin/ai-dev-workflow.js doctor --json
|
|
202
|
+
node /caminho/ai-dev-workflow/bin/ai-dev-workflow.js status --json
|
|
203
|
+
node /caminho/ai-dev-workflow/bin/ai-dev-workflow.js validate --json
|
|
204
|
+
node /caminho/ai-dev-workflow/bin/ai-dev-workflow.js discover --json
|
|
205
|
+
```
|
|
206
|
+
init real continua dependendo de autorização para criação: retirar --dry-run somente após revisar o plano/alvo. Para trilha nova, usar --track new. Fora do destino desejado, fornecer --target /caminho/absoluto/do/projeto; ele prevalece sobre cwd. Não há fallback de alvo explícito inválido/vazio para cwd. --target "" ou --target= são argumentos inválidos (exit 3); valor ausente após a flag também é inválido. Caminhos relativos explícitos mantêm a resolução normal a partir de cwd.
|
|
207
|
+
|
|
208
|
+
process.cwd() representa o diretório atual do processo, não a pasta do executável, PWD de ambiente ou raiz Git descoberta. Não há busca de projeto nem subida de diretórios para escolher outro alvo. As inspeções de marcadores Git ancestrais continuam necessárias para bloquear GIT_PARENT/GIT_NESTED; elas não promovem o destino. Subpastas continuam recusadas conforme contrato de cada comando. No Docker, o padrão é o diretório de trabalho do contêiner (/project na imagem atual), nunca o cwd do host; esses exemplos não representam teste Docker.
|
|
209
|
+
|
|
210
|
+
Sem Git, apenas discover --allow-no-git pode usar o modo limitado existente. Init mantém --track obrigatório; políticas de branch, journal, manifestos, MANUAL_SQL e aprovações não mudam. Alvo inválido não é criado automaticamente. Se process.cwd() não puder ser obtido, CWD_UNAVAILABLE retorna exit 1 com mensagem sanitizada; --target absoluto permite selecionar um destino sem obter cwd pela CLI. Help/version não consultam cwd. Não há alteração de formato ou migração.
|
|
211
|
+
|
|
212
|
+
|
|
213
|
+
## Registros opt-in (TASK-009)
|
|
214
|
+
Os cinco comandos aceitam `--save`, que grava eventos seguros em docs/project/COMMAND_HISTORY.jsonl. Discover concluído salva também docs/project/DISCOVERY.md e versões em docs/project/discovery-history/, preservando documentos personalizados. Sem save, mantém-se o comportamento anterior; discover bem-sucedido em texto apenas sugere salvar. `--save --dry-run` é erro 3 sem escrita.
|
|
215
|
+
|
|
216
|
+
Gravações exigem Git seguro e branch de task, ou discover sem Git explicitamente permitido. Status/validate com save passam a exigir Git executável para essa autorização de escrita. JSON separa operationExitCode e persistence; falha de registro pode ocorrer após a operação concluir. Journal/lock de persistência são separados da instalação e exigem reconciliação humana se restarem. Detalhes, exemplos, limites, recuperação e alcance parcial da auditoria no [guia de persistência](PERSISTENCE.md). Não há migração ou alteração de MANUAL_SQL.
|