@jaguilar87/gaia 5.0.2 → 5.0.5
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/.claude-plugin/marketplace.json +2 -2
- package/.claude-plugin/plugin.json +1 -1
- package/ARCHITECTURE.md +0 -1
- package/CHANGELOG.md +110 -0
- package/INSTALL.md +0 -2
- package/README.md +1 -6
- package/bin/README.md +0 -1
- package/bin/cli/_install_helpers.py +1 -1
- package/bin/cli/approvals.py +23 -21
- package/bin/cli/cleanup.py +0 -1
- package/bin/cli/doctor.py +1 -1
- package/bin/cli/memory.py +2 -0
- package/bin/cli/update.py +1 -1
- package/bin/pre-publish-validate.js +48 -5
- package/config/README.md +22 -44
- package/config/surface-routing.json +0 -2
- package/dist/gaia-ops/.claude-plugin/plugin.json +1 -1
- package/dist/gaia-ops/config/README.md +22 -44
- package/dist/gaia-ops/config/surface-routing.json +0 -2
- package/dist/gaia-ops/hooks/modules/agents/contract_validator.py +18 -0
- package/dist/gaia-ops/hooks/modules/agents/handoff_persister.py +214 -2
- package/dist/gaia-ops/hooks/modules/agents/response_contract.py +26 -0
- package/dist/gaia-ops/hooks/modules/agents/transcript_reader.py +15 -0
- package/dist/gaia-ops/hooks/modules/security/__init__.py +0 -5
- package/dist/gaia-ops/hooks/modules/security/approval_grants.py +124 -19
- package/dist/gaia-ops/hooks/modules/security/mutative_verbs.py +99 -7
- package/dist/gaia-ops/hooks/modules/tools/bash_validator.py +127 -24
- package/dist/gaia-ops/hooks/modules/validation/commit_validator.py +90 -55
- package/dist/gaia-ops/skills/README.md +1 -1
- package/dist/gaia-ops/skills/agent-contract-handoff/SKILL.md +3 -0
- package/dist/gaia-ops/skills/agent-response/SKILL.md +4 -2
- package/dist/gaia-ops/skills/gaia-patterns/SKILL.md +1 -1
- package/dist/gaia-ops/skills/gaia-patterns/reference.md +2 -3
- package/dist/gaia-ops/skills/gaia-release/SKILL.md +60 -24
- package/dist/gaia-ops/skills/gaia-release/reference.md +35 -11
- package/dist/gaia-ops/skills/git-conventions/SKILL.md +6 -2
- package/dist/gaia-ops/skills/orchestrator-present-approval/SKILL.md +30 -7
- package/dist/gaia-ops/skills/orchestrator-present-approval/reference.md +32 -15
- package/dist/gaia-ops/skills/readme-writing/SKILL.md +1 -1
- package/dist/gaia-ops/skills/readme-writing/reference.md +0 -1
- package/dist/gaia-ops/skills/security-tiers/SKILL.md +5 -1
- package/dist/gaia-ops/skills/security-tiers/reference.md +3 -1
- package/dist/gaia-ops/skills/subagent-request-approval/SKILL.md +43 -6
- package/dist/gaia-ops/skills/subagent-request-approval/reference.md +66 -16
- package/dist/gaia-ops/tools/context/README.md +1 -1
- package/dist/gaia-ops/tools/gaia_simulator/extractor.py +0 -1
- package/dist/gaia-ops/tools/scan/ui.py +20 -4
- package/dist/gaia-ops/tools/scan/verify.py +3 -3
- package/dist/gaia-ops/tools/validation/README.md +15 -24
- package/dist/gaia-security/.claude-plugin/plugin.json +1 -1
- package/dist/gaia-security/hooks/modules/agents/contract_validator.py +18 -0
- package/dist/gaia-security/hooks/modules/agents/handoff_persister.py +214 -2
- package/dist/gaia-security/hooks/modules/agents/response_contract.py +26 -0
- package/dist/gaia-security/hooks/modules/agents/transcript_reader.py +15 -0
- package/dist/gaia-security/hooks/modules/security/__init__.py +0 -5
- package/dist/gaia-security/hooks/modules/security/approval_grants.py +124 -19
- package/dist/gaia-security/hooks/modules/security/mutative_verbs.py +99 -7
- package/dist/gaia-security/hooks/modules/tools/bash_validator.py +127 -24
- package/dist/gaia-security/hooks/modules/validation/commit_validator.py +90 -55
- package/gaia/state/transitions.py +4 -4
- package/gaia/store/writer.py +56 -0
- package/hooks/modules/README.md +2 -4
- package/hooks/modules/agents/contract_validator.py +18 -0
- package/hooks/modules/agents/handoff_persister.py +214 -2
- package/hooks/modules/agents/response_contract.py +26 -0
- package/hooks/modules/agents/transcript_reader.py +15 -0
- package/hooks/modules/security/__init__.py +0 -5
- package/hooks/modules/security/approval_grants.py +124 -19
- package/hooks/modules/security/mutative_verbs.py +99 -7
- package/hooks/modules/tools/bash_validator.py +127 -24
- package/hooks/modules/validation/commit_validator.py +90 -55
- package/index.js +2 -12
- package/package.json +4 -6
- package/pyproject.toml +3 -3
- package/scripts/bootstrap_database.sh +88 -439
- package/scripts/check_schema_drift.py +208 -0
- package/scripts/migrations/README.md +78 -28
- package/scripts/migrations/schema.checksum +8 -0
- package/scripts/release-prepare.mjs +199 -0
- package/skills/README.md +1 -1
- package/skills/agent-contract-handoff/SKILL.md +3 -0
- package/skills/agent-response/SKILL.md +4 -2
- package/skills/gaia-patterns/SKILL.md +1 -1
- package/skills/gaia-patterns/reference.md +2 -3
- package/skills/gaia-release/SKILL.md +60 -24
- package/skills/gaia-release/reference.md +35 -11
- package/skills/git-conventions/SKILL.md +6 -2
- package/skills/orchestrator-present-approval/SKILL.md +30 -7
- package/skills/orchestrator-present-approval/reference.md +32 -15
- package/skills/readme-writing/SKILL.md +1 -1
- package/skills/readme-writing/reference.md +0 -1
- package/skills/security-tiers/SKILL.md +5 -1
- package/skills/security-tiers/reference.md +3 -1
- package/skills/subagent-request-approval/SKILL.md +43 -6
- package/skills/subagent-request-approval/reference.md +66 -16
- package/tools/context/README.md +1 -1
- package/tools/gaia_simulator/extractor.py +0 -1
- package/tools/scan/ui.py +20 -4
- package/tools/scan/verify.py +3 -3
- package/tools/validation/README.md +15 -24
- package/commands/README.md +0 -64
- package/commands/gaia.md +0 -37
- package/commands/scan-project.md +0 -74
- package/config/crons-schema.md +0 -81
- package/config/git_standards.json +0 -72
- package/dist/gaia-ops/commands/gaia.md +0 -37
- package/dist/gaia-ops/config/crons-schema.md +0 -81
- package/dist/gaia-ops/config/git_standards.json +0 -72
- package/dist/gaia-ops/hooks/modules/security/gitops_validator.py +0 -179
- package/dist/gaia-ops/tools/agentic-loop/decide-status.py +0 -210
- package/dist/gaia-ops/tools/agentic-loop/parse-metric.py +0 -106
- package/dist/gaia-ops/tools/agentic-loop/record-iteration.py +0 -223
- package/dist/gaia-security/hooks/modules/security/gitops_validator.py +0 -179
- package/git-hooks/commit-msg +0 -41
- package/hooks/modules/security/gitops_validator.py +0 -179
- package/scripts/migrations/v10_to_v11.sql +0 -170
- package/scripts/migrations/v10_to_v11_fresh.sql +0 -18
- package/scripts/migrations/v11_to_v12.sql +0 -195
- package/scripts/migrations/v11_to_v12_fresh.sql +0 -19
- package/scripts/migrations/v12_to_v13.sql +0 -48
- package/scripts/migrations/v12_to_v13_fresh.sql +0 -17
- package/scripts/migrations/v13_to_v14.sql +0 -44
- package/scripts/migrations/v13_to_v14_fresh.sql +0 -17
- package/scripts/migrations/v14_to_v15.sql +0 -71
- package/scripts/migrations/v14_to_v15_fresh.sql +0 -19
- package/scripts/migrations/v15_to_v16.sql +0 -57
- package/scripts/migrations/v15_to_v16_fresh.sql +0 -18
- package/scripts/migrations/v16_to_v17.sql +0 -51
- package/scripts/migrations/v16_to_v17_fresh.sql +0 -18
- package/scripts/migrations/v17_to_v18.sql +0 -66
- package/scripts/migrations/v17_to_v18_fresh.sql +0 -24
- package/scripts/migrations/v1_to_v2.sql +0 -97
- package/scripts/migrations/v2_to_v3.sql +0 -68
- package/scripts/migrations/v2_to_v3_merge.sql +0 -69
- package/scripts/migrations/v3_to_v4.sql +0 -67
- package/scripts/migrations/v3_to_v4_fresh.sql +0 -20
- package/scripts/migrations/v4_to_v5.sql +0 -55
- package/scripts/migrations/v4_to_v5_fresh.sql +0 -20
- package/scripts/migrations/v5_to_v6.sql +0 -48
- package/scripts/migrations/v5_to_v6_fresh.sql +0 -17
- package/scripts/migrations/v6_to_v7.sql +0 -26
- package/scripts/migrations/v6_to_v7_fresh.sql +0 -13
- package/scripts/migrations/v7_to_v8.sql +0 -44
- package/scripts/migrations/v7_to_v8_fresh.sql +0 -14
- package/scripts/migrations/v8_to_v9.sql +0 -87
- package/scripts/migrations/v8_to_v9_fresh.sql +0 -15
- package/scripts/migrations/v9_to_v10.sql +0 -109
- package/scripts/migrations/v9_to_v10_episodes_workspace.sql +0 -109
- package/scripts/migrations/v9_to_v10_fresh.sql +0 -18
- package/templates/README.md +0 -70
- package/templates/managed-settings.template.json +0 -43
- package/tools/agentic-loop/decide-status.py +0 -210
- package/tools/agentic-loop/parse-metric.py +0 -106
- package/tools/agentic-loop/record-iteration.py +0 -223
|
@@ -23,11 +23,75 @@ Usage:
|
|
|
23
23
|
import json
|
|
24
24
|
import os
|
|
25
25
|
import re
|
|
26
|
-
from typing import Dict, List,
|
|
26
|
+
from typing import Dict, List, Optional
|
|
27
27
|
from datetime import datetime
|
|
28
28
|
from dataclasses import dataclass
|
|
29
29
|
|
|
30
30
|
|
|
31
|
+
# ---------------------------------------------------------------------------
|
|
32
|
+
# Git commit standards -- inlined constants.
|
|
33
|
+
#
|
|
34
|
+
# These were previously loaded from config/git_standards.json. They are now
|
|
35
|
+
# module-level constants: commit_validator.py is the single runtime consumer
|
|
36
|
+
# of these format/subject/body rules, so the JSON indirection added drift risk
|
|
37
|
+
# without any benefit. Footer detection/stripping is NOT here -- it lives,
|
|
38
|
+
# hardcoded, in bash_validator (footers are bash_validator's responsibility).
|
|
39
|
+
# ---------------------------------------------------------------------------
|
|
40
|
+
|
|
41
|
+
FORMAT = "conventional_commits"
|
|
42
|
+
|
|
43
|
+
TYPE_ALLOWED = (
|
|
44
|
+
"feat",
|
|
45
|
+
"fix",
|
|
46
|
+
"refactor",
|
|
47
|
+
"docs",
|
|
48
|
+
"test",
|
|
49
|
+
"chore",
|
|
50
|
+
"ci",
|
|
51
|
+
"perf",
|
|
52
|
+
"style",
|
|
53
|
+
"build",
|
|
54
|
+
)
|
|
55
|
+
|
|
56
|
+
SCOPE_REQUIRED = False
|
|
57
|
+
SCOPE_EXAMPLES = ("helmrelease", "terraform", "pg-non-prod", "infrastructure")
|
|
58
|
+
|
|
59
|
+
SUBJECT_MAX_LENGTH = 72
|
|
60
|
+
SUBJECT_RULES = {
|
|
61
|
+
"capitalize_first_letter": False,
|
|
62
|
+
"no_period_at_end": True,
|
|
63
|
+
"imperative_mood": True,
|
|
64
|
+
"no_emoji": True,
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
BODY_MAX_LINE_LENGTH = 72
|
|
68
|
+
BODY_REQUIRED = False
|
|
69
|
+
|
|
70
|
+
EXAMPLES_VALID = (
|
|
71
|
+
"feat(helmrelease): add Phase 3.3 services",
|
|
72
|
+
"fix(pg-non-prod): correct API key environment variable mappings",
|
|
73
|
+
"refactor: simplify context provider logic",
|
|
74
|
+
"docs: update README with new workflow",
|
|
75
|
+
"chore(deps): update terraform to v1.6.0",
|
|
76
|
+
)
|
|
77
|
+
|
|
78
|
+
EXAMPLES_INVALID = (
|
|
79
|
+
"Added new feature",
|
|
80
|
+
"Fixed bugs",
|
|
81
|
+
"Updates",
|
|
82
|
+
"feat: add feature\n\n🤖 Generated with Claude Code",
|
|
83
|
+
"feat: add new feature 🚀",
|
|
84
|
+
"fix: 🐛 correct bug",
|
|
85
|
+
)
|
|
86
|
+
|
|
87
|
+
ENFORCEMENT = {
|
|
88
|
+
"enabled": True,
|
|
89
|
+
"block_on_failure": True,
|
|
90
|
+
"log_violations": True,
|
|
91
|
+
"log_path": ".claude/logs/commit-violations.jsonl",
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
|
|
31
95
|
@dataclass
|
|
32
96
|
class ValidationResult:
|
|
33
97
|
"""Result of commit message validation."""
|
|
@@ -44,43 +108,30 @@ class CommitMessageValidator:
|
|
|
44
108
|
"""
|
|
45
109
|
Validates git commit messages against project standards.
|
|
46
110
|
|
|
47
|
-
Standards are
|
|
111
|
+
Standards are inlined as module-level constants (TYPE_ALLOWED,
|
|
112
|
+
SUBJECT_MAX_LENGTH, SUBJECT_RULES, etc.). Footer detection is not handled
|
|
113
|
+
here -- that is bash_validator's responsibility.
|
|
48
114
|
"""
|
|
49
115
|
|
|
50
116
|
def __init__(self, config_path: Optional[str] = None):
|
|
51
117
|
"""
|
|
52
|
-
Initialize validator
|
|
118
|
+
Initialize validator.
|
|
53
119
|
|
|
54
120
|
Args:
|
|
55
|
-
config_path:
|
|
56
|
-
|
|
121
|
+
config_path: Accepted for backward compatibility only. When given,
|
|
122
|
+
it anchors base_path (used to resolve the relative
|
|
123
|
+
violation log path); the rules themselves come from
|
|
124
|
+
the module-level constants, not from any file.
|
|
57
125
|
"""
|
|
58
126
|
if config_path is None:
|
|
59
|
-
#
|
|
60
|
-
# From hooks/modules/validation/ go up to gaia-ops root
|
|
127
|
+
# base_path -> gaia-ops root, used to resolve the violation log.
|
|
61
128
|
# __file__ -> hooks/modules/validation/commit_validator.py
|
|
62
|
-
# dirname(dirname(dirname(dirname(__file__)))) -> gaia-ops root
|
|
63
129
|
base_path = os.path.dirname(os.path.dirname(os.path.dirname(os.path.dirname(os.path.abspath(__file__)))))
|
|
64
|
-
config_path = os.path.join(base_path, 'config', 'git_standards.json')
|
|
65
130
|
else:
|
|
66
|
-
# If config_path provided, derive base_path from it
|
|
67
131
|
base_path = os.path.dirname(os.path.dirname(config_path))
|
|
68
132
|
|
|
69
133
|
self.base_path = base_path
|
|
70
|
-
self.
|
|
71
|
-
self.config = self._load_config()
|
|
72
|
-
self.standards = self.config.get('commit_message', {})
|
|
73
|
-
self.enforcement = self.config.get('enforcement', {})
|
|
74
|
-
|
|
75
|
-
def _load_config(self) -> Dict[str, Any]:
|
|
76
|
-
"""Load git standards configuration from JSON file."""
|
|
77
|
-
if not os.path.exists(self.config_path):
|
|
78
|
-
raise FileNotFoundError(
|
|
79
|
-
f"Git standards configuration not found at: {self.config_path}"
|
|
80
|
-
)
|
|
81
|
-
|
|
82
|
-
with open(self.config_path, 'r') as f:
|
|
83
|
-
return json.load(f)
|
|
134
|
+
self.enforcement = ENFORCEMENT
|
|
84
135
|
|
|
85
136
|
def validate(self, message: str) -> ValidationResult:
|
|
86
137
|
"""
|
|
@@ -95,19 +146,19 @@ class CommitMessageValidator:
|
|
|
95
146
|
errors = []
|
|
96
147
|
warnings = []
|
|
97
148
|
|
|
98
|
-
#
|
|
99
|
-
|
|
100
|
-
|
|
149
|
+
# Note: forbidden-footer detection is intentionally NOT done here.
|
|
150
|
+
# Footers are bash_validator's responsibility (stripping/detection
|
|
151
|
+
# is hardcoded there).
|
|
101
152
|
|
|
102
|
-
#
|
|
153
|
+
# 1. Check conventional commits format
|
|
103
154
|
format_errors = self._check_conventional_format(message)
|
|
104
155
|
errors.extend(format_errors)
|
|
105
156
|
|
|
106
|
-
#
|
|
157
|
+
# 2. Check subject line rules
|
|
107
158
|
subject_errors = self._check_subject_rules(message)
|
|
108
159
|
errors.extend(subject_errors)
|
|
109
160
|
|
|
110
|
-
#
|
|
161
|
+
# 3. Check body rules (warnings only)
|
|
111
162
|
body_warnings = self._check_body_rules(message)
|
|
112
163
|
warnings.extend(body_warnings)
|
|
113
164
|
|
|
@@ -121,22 +172,6 @@ class CommitMessageValidator:
|
|
|
121
172
|
warnings=warnings
|
|
122
173
|
)
|
|
123
174
|
|
|
124
|
-
def _check_forbidden_footers(self, message: str) -> List[Dict[str, str]]:
|
|
125
|
-
"""Check for forbidden footers in commit message."""
|
|
126
|
-
errors = []
|
|
127
|
-
forbidden = self.standards.get('footer_forbidden', [])
|
|
128
|
-
|
|
129
|
-
for forbidden_text in forbidden:
|
|
130
|
-
if forbidden_text.lower() in message.lower():
|
|
131
|
-
errors.append({
|
|
132
|
-
'type': 'FORBIDDEN_FOOTER',
|
|
133
|
-
'message': f"Commit message contains forbidden footer: '{forbidden_text}'",
|
|
134
|
-
'fix': f"Remove all occurrences of '{forbidden_text}'",
|
|
135
|
-
'severity': 'error'
|
|
136
|
-
})
|
|
137
|
-
|
|
138
|
-
return errors
|
|
139
|
-
|
|
140
175
|
def _check_conventional_format(self, message: str) -> List[Dict[str, str]]:
|
|
141
176
|
"""Check if message follows Conventional Commits format."""
|
|
142
177
|
errors = []
|
|
@@ -147,16 +182,16 @@ class CommitMessageValidator:
|
|
|
147
182
|
|
|
148
183
|
# Pattern: type(scope)?: description
|
|
149
184
|
# Examples: feat: add feature, fix(api): correct bug
|
|
150
|
-
allowed_types = '|'.join(
|
|
185
|
+
allowed_types = '|'.join(TYPE_ALLOWED)
|
|
151
186
|
pattern = rf'^({allowed_types})(\(.+?\))?: .+$'
|
|
152
187
|
|
|
153
188
|
if not re.match(pattern, subject):
|
|
154
189
|
errors.append({
|
|
155
190
|
'type': 'INVALID_FORMAT',
|
|
156
191
|
'message': 'Commit message does not follow Conventional Commits format',
|
|
157
|
-
'fix': f"Use format: type(scope): description\nAllowed types: {', '.join(
|
|
192
|
+
'fix': f"Use format: type(scope): description\nAllowed types: {', '.join(TYPE_ALLOWED)}",
|
|
158
193
|
'severity': 'error',
|
|
159
|
-
'examples':
|
|
194
|
+
'examples': list(EXAMPLES_VALID)
|
|
160
195
|
})
|
|
161
196
|
|
|
162
197
|
return errors
|
|
@@ -175,7 +210,7 @@ class CommitMessageValidator:
|
|
|
175
210
|
description = match.group(2)
|
|
176
211
|
|
|
177
212
|
# Check max length
|
|
178
|
-
max_length =
|
|
213
|
+
max_length = SUBJECT_MAX_LENGTH
|
|
179
214
|
if len(subject) > max_length:
|
|
180
215
|
errors.append({
|
|
181
216
|
'type': 'SUBJECT_TOO_LONG',
|
|
@@ -185,7 +220,7 @@ class CommitMessageValidator:
|
|
|
185
220
|
})
|
|
186
221
|
|
|
187
222
|
# Check for period at end
|
|
188
|
-
rules =
|
|
223
|
+
rules = SUBJECT_RULES
|
|
189
224
|
if rules.get('no_period_at_end', True) and description.endswith('.'):
|
|
190
225
|
errors.append({
|
|
191
226
|
'type': 'SUBJECT_ENDS_WITH_PERIOD',
|
|
@@ -242,7 +277,7 @@ class CommitMessageValidator:
|
|
|
242
277
|
})
|
|
243
278
|
|
|
244
279
|
# Check body line length
|
|
245
|
-
max_length =
|
|
280
|
+
max_length = BODY_MAX_LINE_LENGTH
|
|
246
281
|
for i, line in enumerate(lines[2:], start=3): # Skip subject and blank line
|
|
247
282
|
if len(line) > max_length and not line.startswith('http'):
|
|
248
283
|
warnings.append({
|
|
@@ -285,13 +320,13 @@ class CommitMessageValidator:
|
|
|
285
320
|
def get_examples(self) -> Dict[str, List[str]]:
|
|
286
321
|
"""Get example commit messages (valid and invalid)."""
|
|
287
322
|
return {
|
|
288
|
-
'valid':
|
|
289
|
-
'invalid':
|
|
323
|
+
'valid': list(EXAMPLES_VALID),
|
|
324
|
+
'invalid': list(EXAMPLES_INVALID)
|
|
290
325
|
}
|
|
291
326
|
|
|
292
327
|
def get_allowed_types(self) -> List[str]:
|
|
293
328
|
"""Get list of allowed commit types."""
|
|
294
|
-
return
|
|
329
|
+
return list(TYPE_ALLOWED)
|
|
295
330
|
|
|
296
331
|
def format_error_message(self, validation: ValidationResult) -> str:
|
|
297
332
|
"""
|
package/index.js
CHANGED
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
* import { getAgentPath, getToolPath, getConfigPath } from '@jaguilar87/gaia';
|
|
8
8
|
* const agentPath = getAgentPath('gitops-operator');
|
|
9
9
|
* const toolPath = getToolPath('context_provider.py');
|
|
10
|
-
* const configPath = getConfigPath('
|
|
10
|
+
* const configPath = getConfigPath('surface-routing.json');
|
|
11
11
|
*/
|
|
12
12
|
|
|
13
13
|
import { fileURLToPath } from 'url';
|
|
@@ -54,18 +54,9 @@ export function getCommandPath(commandName) {
|
|
|
54
54
|
return join(PACKAGE_ROOT, 'commands', commandName);
|
|
55
55
|
}
|
|
56
56
|
|
|
57
|
-
/**
|
|
58
|
-
* Get absolute path to a template
|
|
59
|
-
* @param {string} templateName - Name of the template (e.g., 'governance.template.md')
|
|
60
|
-
* @returns {string} Absolute path to template file
|
|
61
|
-
*/
|
|
62
|
-
export function getTemplatePath(templateName) {
|
|
63
|
-
return join(PACKAGE_ROOT, 'templates', templateName);
|
|
64
|
-
}
|
|
65
|
-
|
|
66
57
|
/**
|
|
67
58
|
* Get absolute path to config file
|
|
68
|
-
* @param {string} configName - Name of the config (e.g., '
|
|
59
|
+
* @param {string} configName - Name of the config (e.g., 'surface-routing.json')
|
|
69
60
|
* @returns {string} Absolute path to config file
|
|
70
61
|
*/
|
|
71
62
|
export function getConfigPath(configName) {
|
|
@@ -78,6 +69,5 @@ export default {
|
|
|
78
69
|
getToolPath,
|
|
79
70
|
getHookPath,
|
|
80
71
|
getCommandPath,
|
|
81
|
-
getTemplatePath,
|
|
82
72
|
getConfigPath
|
|
83
73
|
};
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@jaguilar87/gaia",
|
|
3
|
-
"version": "5.0.
|
|
3
|
+
"version": "5.0.5",
|
|
4
4
|
"description": "Multi-agent orchestration system for Claude Code - DevOps automation toolkit",
|
|
5
5
|
"main": "index.js",
|
|
6
6
|
"type": "module",
|
|
@@ -37,13 +37,10 @@
|
|
|
37
37
|
"tools/",
|
|
38
38
|
"gaia/",
|
|
39
39
|
"hooks/",
|
|
40
|
-
"commands/",
|
|
41
|
-
"templates/",
|
|
42
40
|
"config/",
|
|
43
41
|
"scripts/",
|
|
44
42
|
"skills/",
|
|
45
43
|
"dist/",
|
|
46
|
-
"git-hooks/",
|
|
47
44
|
"README.md",
|
|
48
45
|
"INSTALL.md",
|
|
49
46
|
"CHANGELOG.md",
|
|
@@ -62,6 +59,7 @@
|
|
|
62
59
|
"test:all": "python3 -m pytest tests/ -v -m ''",
|
|
63
60
|
"test:promptfoo": "npx promptfoo eval --config tests/promptfoo.yaml",
|
|
64
61
|
"lint": "eslint .",
|
|
62
|
+
"release:prepare": "node scripts/release-prepare.mjs",
|
|
65
63
|
"clean:dist": "rm -rf dist/",
|
|
66
64
|
"build:plugins": "npm run clean:dist && python3 scripts/build-plugin.py gaia-security && python3 scripts/build-plugin.py gaia-ops",
|
|
67
65
|
"clean": "find . -type d -name '__pycache__' -exec rm -rf {} + 2>/dev/null || true",
|
|
@@ -71,7 +69,7 @@
|
|
|
71
69
|
"gaia:verify-install:local": "npm pack && bash bin/validate-sandbox.sh --tarball ./jaguilar87-gaia-*.tgz --target sandbox",
|
|
72
70
|
"gaia:verify-install:rc": "bash bin/validate-sandbox.sh --version @rc --target sandbox",
|
|
73
71
|
"gaia:verify-install:latest": "bash bin/validate-sandbox.sh --version @latest --target sandbox",
|
|
74
|
-
"gaia:install-local": "npm pack && bash bin/validate-sandbox.sh --tarball ./jaguilar87-gaia-*.tgz --target local",
|
|
72
|
+
"gaia:install-local": "npm run build:plugins && npm pack && bash bin/validate-sandbox.sh --tarball ./jaguilar87-gaia-*.tgz --target local",
|
|
75
73
|
"prepack": "npm run clean",
|
|
76
74
|
"prepublishOnly": "npm run build:plugins && node bin/pre-publish-validate.js",
|
|
77
75
|
"postinstall": "python3 bin/gaia install --postinstall",
|
|
@@ -85,6 +83,6 @@
|
|
|
85
83
|
},
|
|
86
84
|
"engines": {
|
|
87
85
|
"node": ">=18.0.0",
|
|
88
|
-
"python": ">=3.
|
|
86
|
+
"python": ">=3.11"
|
|
89
87
|
}
|
|
90
88
|
}
|
package/pyproject.toml
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
[project]
|
|
2
2
|
name = "gaia"
|
|
3
|
-
version = "5.0.
|
|
3
|
+
version = "5.0.5"
|
|
4
4
|
description = "Multi-agent orchestration system for Claude Code - DevOps automation toolkit"
|
|
5
|
-
requires-python = ">=3.
|
|
5
|
+
requires-python = ">=3.11"
|
|
6
6
|
license = {text = "MIT"}
|
|
7
7
|
authors = [
|
|
8
8
|
{name = "Jorge Aguilar", email = "jorge.aguilar87@gmail.com"},
|
|
@@ -16,7 +16,7 @@ dev = [
|
|
|
16
16
|
]
|
|
17
17
|
|
|
18
18
|
[tool.ruff]
|
|
19
|
-
target-version = "
|
|
19
|
+
target-version = "py311"
|
|
20
20
|
line-length = 120
|
|
21
21
|
|
|
22
22
|
[tool.ruff.lint]
|