aiox-core 5.0.0 → 5.0.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (91) hide show
  1. package/.aiox-core/data/entity-registry.yaml +5297 -1814
  2. package/.aiox-core/data/registry-update-log.jsonl +2 -0
  3. package/.aiox-core/development/templates/service-template/README.md.hbs +158 -158
  4. package/.aiox-core/development/templates/service-template/__tests__/index.test.ts.hbs +237 -237
  5. package/.aiox-core/development/templates/service-template/client.ts.hbs +403 -403
  6. package/.aiox-core/development/templates/service-template/errors.ts.hbs +182 -182
  7. package/.aiox-core/development/templates/service-template/index.ts.hbs +120 -120
  8. package/.aiox-core/development/templates/service-template/package.json.hbs +87 -87
  9. package/.aiox-core/development/templates/service-template/types.ts.hbs +145 -145
  10. package/.aiox-core/development/templates/squad-template/LICENSE +21 -21
  11. package/.aiox-core/infrastructure/scripts/tool-resolver.js +4 -4
  12. package/.aiox-core/infrastructure/templates/aiox-sync.yaml.template +182 -182
  13. package/.aiox-core/infrastructure/templates/coderabbit.yaml.template +279 -279
  14. package/.aiox-core/infrastructure/templates/github-workflows/ci.yml.template +169 -169
  15. package/.aiox-core/infrastructure/templates/github-workflows/pr-automation.yml.template +330 -330
  16. package/.aiox-core/infrastructure/templates/github-workflows/release.yml.template +196 -196
  17. package/.aiox-core/infrastructure/templates/gitignore/gitignore-aiox-base.tmpl +63 -63
  18. package/.aiox-core/infrastructure/templates/gitignore/gitignore-brownfield-merge.tmpl +18 -18
  19. package/.aiox-core/infrastructure/templates/gitignore/gitignore-node.tmpl +85 -85
  20. package/.aiox-core/infrastructure/templates/gitignore/gitignore-python.tmpl +145 -145
  21. package/.aiox-core/install-manifest.yaml +58 -58
  22. package/.aiox-core/local-config.yaml.template +71 -71
  23. package/.aiox-core/monitor/hooks/lib/__init__.py +1 -1
  24. package/.aiox-core/monitor/hooks/lib/enrich.py +58 -58
  25. package/.aiox-core/monitor/hooks/lib/send_event.py +47 -47
  26. package/.aiox-core/monitor/hooks/notification.py +29 -29
  27. package/.aiox-core/monitor/hooks/post_tool_use.py +45 -45
  28. package/.aiox-core/monitor/hooks/pre_compact.py +29 -29
  29. package/.aiox-core/monitor/hooks/pre_tool_use.py +40 -40
  30. package/.aiox-core/monitor/hooks/stop.py +29 -29
  31. package/.aiox-core/monitor/hooks/subagent_stop.py +29 -29
  32. package/.aiox-core/monitor/hooks/user_prompt_submit.py +38 -38
  33. package/.aiox-core/product/templates/adr.hbs +125 -125
  34. package/.aiox-core/product/templates/dbdr.hbs +241 -241
  35. package/.aiox-core/product/templates/engine/elicitation.js +2 -3
  36. package/.aiox-core/product/templates/epic.hbs +212 -212
  37. package/.aiox-core/product/templates/pmdr.hbs +186 -186
  38. package/.aiox-core/product/templates/prd-v2.0.hbs +216 -216
  39. package/.aiox-core/product/templates/prd.hbs +201 -201
  40. package/.aiox-core/product/templates/story.hbs +263 -263
  41. package/.aiox-core/product/templates/task.hbs +170 -170
  42. package/.aiox-core/product/templates/tmpl-comment-on-examples.sql +158 -158
  43. package/.aiox-core/product/templates/tmpl-migration-script.sql +91 -91
  44. package/.aiox-core/product/templates/tmpl-rls-granular-policies.sql +104 -104
  45. package/.aiox-core/product/templates/tmpl-rls-kiss-policy.sql +10 -10
  46. package/.aiox-core/product/templates/tmpl-rls-roles.sql +135 -135
  47. package/.aiox-core/product/templates/tmpl-rls-simple.sql +77 -77
  48. package/.aiox-core/product/templates/tmpl-rls-tenant.sql +152 -152
  49. package/.aiox-core/product/templates/tmpl-rollback-script.sql +77 -77
  50. package/.aiox-core/product/templates/tmpl-seed-data.sql +140 -140
  51. package/.aiox-core/product/templates/tmpl-smoke-test.sql +16 -16
  52. package/.aiox-core/product/templates/tmpl-staging-copy-merge.sql +139 -139
  53. package/.aiox-core/product/templates/tmpl-stored-proc.sql +140 -140
  54. package/.aiox-core/product/templates/tmpl-trigger.sql +152 -152
  55. package/.aiox-core/product/templates/tmpl-view-materialized.sql +133 -133
  56. package/.aiox-core/product/templates/tmpl-view.sql +177 -177
  57. package/.aiox-core/scripts/pm.sh +0 -0
  58. package/.claude/hooks/code-intel-pretool.cjs +107 -0
  59. package/.claude/hooks/enforce-architecture-first.py +196 -196
  60. package/.claude/hooks/mind-clone-governance.py +192 -192
  61. package/.claude/hooks/read-protection.py +151 -151
  62. package/.claude/hooks/slug-validation.py +176 -176
  63. package/.claude/hooks/sql-governance.py +182 -182
  64. package/.claude/hooks/write-path-validation.py +194 -194
  65. package/LICENSE +33 -33
  66. package/bin/aiox-graph.js +0 -0
  67. package/bin/aiox-minimal.js +0 -0
  68. package/bin/aiox.js +0 -0
  69. package/docs/guides/aios-workflows/README.md +247 -0
  70. package/docs/guides/aios-workflows/bob-orchestrator-workflow.md +1536 -0
  71. package/package.json +1 -1
  72. package/packages/aiox-install/bin/aiox-install.js +0 -0
  73. package/packages/aiox-install/bin/edmcp.js +0 -0
  74. package/packages/aiox-pro-cli/bin/aiox-pro.js +0 -0
  75. package/packages/installer/src/wizard/pro-setup.js +210 -123
  76. package/pro/README.md +66 -0
  77. package/pro/license/degradation.js +220 -0
  78. package/pro/license/errors.js +450 -0
  79. package/pro/license/feature-gate.js +354 -0
  80. package/pro/license/index.js +181 -0
  81. package/pro/license/license-api.js +679 -0
  82. package/pro/license/license-cache.js +523 -0
  83. package/pro/license/license-crypto.js +303 -0
  84. package/scripts/check-markdown-links.py +352 -352
  85. package/scripts/dashboard-parallel-dev.sh +0 -0
  86. package/scripts/dashboard-parallel-phase3.sh +0 -0
  87. package/scripts/dashboard-parallel-phase4.sh +0 -0
  88. package/scripts/glue/README.md +355 -0
  89. package/scripts/glue/compose-agent-prompt.cjs +362 -0
  90. package/scripts/install-monitor-hooks.sh +0 -0
  91. package/.aiox-core/lib/build.json +0 -1
@@ -1,194 +1,194 @@
1
- #!/usr/bin/env python3
2
- """
3
- Hook: Write Path Validation
4
-
5
- REGRA: Documentos devem ir para os paths corretos conforme convenções.
6
-
7
- Este hook intercepta Write/Edit e AVISA (não bloqueia) quando o path
8
- parece violar as convenções de organização de documentos.
9
-
10
- Exit Codes:
11
- - 0: Sempre (apenas avisa, nunca bloqueia)
12
- """
13
-
14
- import json
15
- import sys
16
- import os
17
- import re
18
- from datetime import datetime
19
-
20
- # =============================================================================
21
- # CONFIGURAÇÃO: Regras de organização de documentos
22
- # =============================================================================
23
-
24
- PATH_RULES = [
25
- # (pattern no nome/conteúdo, path esperado, descrição)
26
- {
27
- "name_patterns": [r"session", r"handoff", r"^2\d{3}-\d{2}-\d{2}"],
28
- "expected_path": "docs/sessions/",
29
- "description": "Session logs e handoffs → docs/sessions/YYYY-MM/",
30
- },
31
- {
32
- "name_patterns": [r"architecture", r"system-design", r"infra"],
33
- "expected_path": "docs/architecture/",
34
- "description": "Docs de arquitetura → docs/architecture/",
35
- "exclude_patterns": [r"ARCHITECTURE_RULES"], # Exceção para MMOS
36
- },
37
- {
38
- "name_patterns": [r"guide", r"tutorial", r"how-to"],
39
- "expected_path": "docs/guides/",
40
- "description": "Guias e tutoriais → docs/guides/",
41
- },
42
- {
43
- "name_patterns": [r"prd\.md$", r"epic.*\.md$", r"story.*\.md$"],
44
- "expected_path": "docs/projects/",
45
- "description": "PRDs, Epics, Stories → docs/projects/{project}/",
46
- },
47
- {
48
- "name_patterns": [r"mind.*specific", r"mind.*validation"],
49
- "expected_path": "outputs/minds/",
50
- "description": "Docs específicos de mind → outputs/minds/{slug}/docs/",
51
- },
52
- ]
53
-
54
- # Paths que são sempre válidos (não avisar)
55
- ALWAYS_VALID_PATHS = [
56
- ".claude/",
57
- ".aiox-core/",
58
- ".aiox-upstream/",
59
- "squads/",
60
- "node_modules/",
61
- ".git/",
62
- "app/",
63
- "supabase/",
64
- "outputs/",
65
- ]
66
-
67
- # =============================================================================
68
- # LÓGICA DO HOOK
69
- # =============================================================================
70
-
71
- def get_project_root():
72
- """Obtém o root do projeto."""
73
- return os.environ.get("CLAUDE_PROJECT_DIR", os.getcwd())
74
-
75
- def normalize_path(file_path: str, project_root: str) -> str:
76
- """Normaliza path para relativo."""
77
- if file_path.startswith(project_root):
78
- return file_path[len(project_root):].lstrip("/")
79
- return file_path
80
-
81
- def is_always_valid(relative_path: str) -> bool:
82
- """Verifica se o path está em área sempre válida."""
83
- for valid in ALWAYS_VALID_PATHS:
84
- if relative_path.startswith(valid):
85
- return True
86
- return False
87
-
88
- def is_documentation_file(relative_path: str) -> bool:
89
- """Verifica se é um arquivo de documentação."""
90
- doc_extensions = [".md", ".mdx", ".txt", ".rst"]
91
- return any(relative_path.endswith(ext) for ext in doc_extensions)
92
-
93
- def check_path_rules(relative_path: str) -> list[dict]:
94
- """
95
- Verifica se o path viola alguma regra.
96
-
97
- Returns:
98
- Lista de violações com sugestões
99
- """
100
- violations = []
101
- filename = os.path.basename(relative_path)
102
-
103
- for rule in PATH_RULES:
104
- # Verificar se o nome do arquivo corresponde ao pattern
105
- matches_name = False
106
- for pattern in rule["name_patterns"]:
107
- if re.search(pattern, filename, re.IGNORECASE):
108
- matches_name = True
109
- break
110
-
111
- if not matches_name:
112
- continue
113
-
114
- # Verificar exceções
115
- if "exclude_patterns" in rule:
116
- is_excluded = False
117
- for exc_pattern in rule["exclude_patterns"]:
118
- if re.search(exc_pattern, filename, re.IGNORECASE):
119
- is_excluded = True
120
- break
121
- if is_excluded:
122
- continue
123
-
124
- # Verificar se está no path esperado
125
- expected = rule["expected_path"]
126
- if not relative_path.startswith(expected):
127
- violations.append({
128
- "current_path": relative_path,
129
- "expected_path": expected,
130
- "description": rule["description"],
131
- })
132
-
133
- return violations
134
-
135
- def main():
136
- # Ler input do stdin
137
- try:
138
- input_data = json.load(sys.stdin)
139
- except json.JSONDecodeError:
140
- sys.exit(0)
141
-
142
- tool_name = input_data.get("tool_name", "")
143
- tool_input = input_data.get("tool_input", {})
144
-
145
- # Só processar Write e Edit
146
- if tool_name not in ["Write", "Edit"]:
147
- sys.exit(0)
148
-
149
- file_path = tool_input.get("file_path", "")
150
- if not file_path:
151
- sys.exit(0)
152
-
153
- # Normalizar path
154
- project_root = get_project_root()
155
- relative_path = normalize_path(file_path, project_root)
156
-
157
- # Verificar se é área sempre válida
158
- if is_always_valid(relative_path):
159
- sys.exit(0)
160
-
161
- # Só verificar arquivos de documentação
162
- if not is_documentation_file(relative_path):
163
- sys.exit(0)
164
-
165
- # Verificar regras
166
- violations = check_path_rules(relative_path)
167
-
168
- if not violations:
169
- sys.exit(0)
170
-
171
- # AVISAR (não bloquear)
172
- violation = violations[0] # Mostrar primeira violação
173
-
174
- warning_message = f"""
175
- ┌──────────────────────────────────────────────────────────────────────────────┐
176
- │ ⚠️ PATH WARNING: Documento pode estar no local errado │
177
- ├──────────────────────────────────────────────────────────────────────────────┤
178
- │ │
179
- │ Arquivo: {relative_path[:60]:<60} │
180
- │ │
181
- │ Convenção: {violation['description'][:56]:<56} │
182
- │ Esperado: {violation['expected_path']:<57} │
183
- │ │
184
- │ NOTA: Este é apenas um AVISO, a operação será executada. │
185
- │ Verifique se o path está correto antes de continuar. │
186
- │ │
187
- └──────────────────────────────────────────────────────────────────────────────┘
188
- """
189
- # Imprimir warning mas NÃO bloquear (exit 0)
190
- print(warning_message, file=sys.stderr)
191
- sys.exit(0)
192
-
193
- if __name__ == "__main__":
194
- main()
1
+ #!/usr/bin/env python3
2
+ """
3
+ Hook: Write Path Validation
4
+
5
+ REGRA: Documentos devem ir para os paths corretos conforme convenções.
6
+
7
+ Este hook intercepta Write/Edit e AVISA (não bloqueia) quando o path
8
+ parece violar as convenções de organização de documentos.
9
+
10
+ Exit Codes:
11
+ - 0: Sempre (apenas avisa, nunca bloqueia)
12
+ """
13
+
14
+ import json
15
+ import sys
16
+ import os
17
+ import re
18
+ from datetime import datetime
19
+
20
+ # =============================================================================
21
+ # CONFIGURAÇÃO: Regras de organização de documentos
22
+ # =============================================================================
23
+
24
+ PATH_RULES = [
25
+ # (pattern no nome/conteúdo, path esperado, descrição)
26
+ {
27
+ "name_patterns": [r"session", r"handoff", r"^2\d{3}-\d{2}-\d{2}"],
28
+ "expected_path": "docs/sessions/",
29
+ "description": "Session logs e handoffs → docs/sessions/YYYY-MM/",
30
+ },
31
+ {
32
+ "name_patterns": [r"architecture", r"system-design", r"infra"],
33
+ "expected_path": "docs/architecture/",
34
+ "description": "Docs de arquitetura → docs/architecture/",
35
+ "exclude_patterns": [r"ARCHITECTURE_RULES"], # Exceção para MMOS
36
+ },
37
+ {
38
+ "name_patterns": [r"guide", r"tutorial", r"how-to"],
39
+ "expected_path": "docs/guides/",
40
+ "description": "Guias e tutoriais → docs/guides/",
41
+ },
42
+ {
43
+ "name_patterns": [r"prd\.md$", r"epic.*\.md$", r"story.*\.md$"],
44
+ "expected_path": "docs/projects/",
45
+ "description": "PRDs, Epics, Stories → docs/projects/{project}/",
46
+ },
47
+ {
48
+ "name_patterns": [r"mind.*specific", r"mind.*validation"],
49
+ "expected_path": "outputs/minds/",
50
+ "description": "Docs específicos de mind → outputs/minds/{slug}/docs/",
51
+ },
52
+ ]
53
+
54
+ # Paths que são sempre válidos (não avisar)
55
+ ALWAYS_VALID_PATHS = [
56
+ ".claude/",
57
+ ".aiox-core/",
58
+ ".aiox-upstream/",
59
+ "squads/",
60
+ "node_modules/",
61
+ ".git/",
62
+ "app/",
63
+ "supabase/",
64
+ "outputs/",
65
+ ]
66
+
67
+ # =============================================================================
68
+ # LÓGICA DO HOOK
69
+ # =============================================================================
70
+
71
+ def get_project_root():
72
+ """Obtém o root do projeto."""
73
+ return os.environ.get("CLAUDE_PROJECT_DIR", os.getcwd())
74
+
75
+ def normalize_path(file_path: str, project_root: str) -> str:
76
+ """Normaliza path para relativo."""
77
+ if file_path.startswith(project_root):
78
+ return file_path[len(project_root):].lstrip("/")
79
+ return file_path
80
+
81
+ def is_always_valid(relative_path: str) -> bool:
82
+ """Verifica se o path está em área sempre válida."""
83
+ for valid in ALWAYS_VALID_PATHS:
84
+ if relative_path.startswith(valid):
85
+ return True
86
+ return False
87
+
88
+ def is_documentation_file(relative_path: str) -> bool:
89
+ """Verifica se é um arquivo de documentação."""
90
+ doc_extensions = [".md", ".mdx", ".txt", ".rst"]
91
+ return any(relative_path.endswith(ext) for ext in doc_extensions)
92
+
93
+ def check_path_rules(relative_path: str) -> list[dict]:
94
+ """
95
+ Verifica se o path viola alguma regra.
96
+
97
+ Returns:
98
+ Lista de violações com sugestões
99
+ """
100
+ violations = []
101
+ filename = os.path.basename(relative_path)
102
+
103
+ for rule in PATH_RULES:
104
+ # Verificar se o nome do arquivo corresponde ao pattern
105
+ matches_name = False
106
+ for pattern in rule["name_patterns"]:
107
+ if re.search(pattern, filename, re.IGNORECASE):
108
+ matches_name = True
109
+ break
110
+
111
+ if not matches_name:
112
+ continue
113
+
114
+ # Verificar exceções
115
+ if "exclude_patterns" in rule:
116
+ is_excluded = False
117
+ for exc_pattern in rule["exclude_patterns"]:
118
+ if re.search(exc_pattern, filename, re.IGNORECASE):
119
+ is_excluded = True
120
+ break
121
+ if is_excluded:
122
+ continue
123
+
124
+ # Verificar se está no path esperado
125
+ expected = rule["expected_path"]
126
+ if not relative_path.startswith(expected):
127
+ violations.append({
128
+ "current_path": relative_path,
129
+ "expected_path": expected,
130
+ "description": rule["description"],
131
+ })
132
+
133
+ return violations
134
+
135
+ def main():
136
+ # Ler input do stdin
137
+ try:
138
+ input_data = json.load(sys.stdin)
139
+ except json.JSONDecodeError:
140
+ sys.exit(0)
141
+
142
+ tool_name = input_data.get("tool_name", "")
143
+ tool_input = input_data.get("tool_input", {})
144
+
145
+ # Só processar Write e Edit
146
+ if tool_name not in ["Write", "Edit"]:
147
+ sys.exit(0)
148
+
149
+ file_path = tool_input.get("file_path", "")
150
+ if not file_path:
151
+ sys.exit(0)
152
+
153
+ # Normalizar path
154
+ project_root = get_project_root()
155
+ relative_path = normalize_path(file_path, project_root)
156
+
157
+ # Verificar se é área sempre válida
158
+ if is_always_valid(relative_path):
159
+ sys.exit(0)
160
+
161
+ # Só verificar arquivos de documentação
162
+ if not is_documentation_file(relative_path):
163
+ sys.exit(0)
164
+
165
+ # Verificar regras
166
+ violations = check_path_rules(relative_path)
167
+
168
+ if not violations:
169
+ sys.exit(0)
170
+
171
+ # AVISAR (não bloquear)
172
+ violation = violations[0] # Mostrar primeira violação
173
+
174
+ warning_message = f"""
175
+ ┌──────────────────────────────────────────────────────────────────────────────┐
176
+ │ ⚠️ PATH WARNING: Documento pode estar no local errado │
177
+ ├──────────────────────────────────────────────────────────────────────────────┤
178
+ │ │
179
+ │ Arquivo: {relative_path[:60]:<60} │
180
+ │ │
181
+ │ Convenção: {violation['description'][:56]:<56} │
182
+ │ Esperado: {violation['expected_path']:<57} │
183
+ │ │
184
+ │ NOTA: Este é apenas um AVISO, a operação será executada. │
185
+ │ Verifique se o path está correto antes de continuar. │
186
+ │ │
187
+ └──────────────────────────────────────────────────────────────────────────────┘
188
+ """
189
+ # Imprimir warning mas NÃO bloquear (exit 0)
190
+ print(warning_message, file=sys.stderr)
191
+ sys.exit(0)
192
+
193
+ if __name__ == "__main__":
194
+ main()
package/LICENSE CHANGED
@@ -1,33 +1,33 @@
1
- MIT License
2
-
3
- Copyright (c) 2025 BMad Code, LLC (BMad Method - original work)
4
- Copyright (c) 2025 SynkraAI Inc. (AIOX Framework - derivative work)
5
-
6
- This project was originally derived from the BMad Method
7
- (https://github.com/bmad-code-org/BMAD-METHOD), created by Brian Madison.
8
- Synkra AIOX is NOT affiliated with, endorsed by, or sanctioned by the
9
- BMad Method or BMad Code, LLC.
10
-
11
- Permission is hereby granted, free of charge, to any person obtaining a copy
12
- of this software and associated documentation files (the "Software"), to deal
13
- in the Software without restriction, including without limitation the rights
14
- to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
15
- copies of the Software, and to permit persons to whom the Software is
16
- furnished to do so, subject to the following conditions:
17
-
18
- The above copyright notice and this permission notice shall be included in all
19
- copies or substantial portions of the Software.
20
-
21
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
22
- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
23
- FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
24
- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
25
- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
26
- OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
27
- SOFTWARE.
28
-
29
- TRADEMARK NOTICE:
30
- BMad, BMad Method, and BMad Core are trademarks of BMad Code, LLC.
31
- These trademarks are NOT licensed under the MIT License. See the BMad Method
32
- TRADEMARK.md (https://github.com/bmad-code-org/BMAD-METHOD/blob/main/TRADEMARK.md)
33
- for detailed guidelines on trademark usage.
1
+ MIT License
2
+
3
+ Copyright (c) 2025 BMad Code, LLC (BMad Method - original work)
4
+ Copyright (c) 2025 SynkraAI Inc. (AIOX Framework - derivative work)
5
+
6
+ This project was originally derived from the BMad Method
7
+ (https://github.com/bmad-code-org/BMAD-METHOD), created by Brian Madison.
8
+ Synkra AIOX is NOT affiliated with, endorsed by, or sanctioned by the
9
+ BMad Method or BMad Code, LLC.
10
+
11
+ Permission is hereby granted, free of charge, to any person obtaining a copy
12
+ of this software and associated documentation files (the "Software"), to deal
13
+ in the Software without restriction, including without limitation the rights
14
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
15
+ copies of the Software, and to permit persons to whom the Software is
16
+ furnished to do so, subject to the following conditions:
17
+
18
+ The above copyright notice and this permission notice shall be included in all
19
+ copies or substantial portions of the Software.
20
+
21
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
22
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
23
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
24
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
25
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
26
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
27
+ SOFTWARE.
28
+
29
+ TRADEMARK NOTICE:
30
+ BMad, BMad Method, and BMad Core are trademarks of BMad Code, LLC.
31
+ These trademarks are NOT licensed under the MIT License. See the BMad Method
32
+ TRADEMARK.md (https://github.com/bmad-code-org/BMAD-METHOD/blob/main/TRADEMARK.md)
33
+ for detailed guidelines on trademark usage.
package/bin/aiox-graph.js CHANGED
File without changes
File without changes
package/bin/aiox.js CHANGED
File without changes