aiox-core 5.0.7 → 5.0.8
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/.aiox-core/cli/commands/pro/buyer.js +379 -0
- package/.aiox-core/cli/commands/pro/index.js +191 -52
- package/.aiox-core/cli/commands/validate/index.js +2 -0
- package/.aiox-core/core/code-intel/helpers/dev-helper.js +1 -1
- package/.aiox-core/core/code-intel/helpers/devops-helper.js +0 -1
- package/.aiox-core/core/code-intel/helpers/planning-helper.js +1 -1
- package/.aiox-core/core/code-intel/helpers/qa-helper.js +2 -2
- package/.aiox-core/core/config/schemas/framework-config.schema.json +1 -0
- package/.aiox-core/core/config/template-overrides.js +1 -1
- package/.aiox-core/core/doctor/checks/ide-sync.js +81 -25
- package/.aiox-core/core/doctor/checks/rules-files.js +0 -1
- package/.aiox-core/core/doctor/checks/skills-count.js +83 -15
- package/.aiox-core/core/graph-dashboard/cli.js +1 -2
- package/.aiox-core/core/graph-dashboard/data-sources/code-intel-source.js +1 -1
- package/.aiox-core/core/ids/layer-classifier.js +1 -1
- package/.aiox-core/core/pro/pro-updater.js +578 -0
- package/.aiox-core/core/synapse/context/context-tracker.js +107 -9
- package/.aiox-core/core/synapse/layers/layer-processor.js +1 -1
- package/.aiox-core/core-config.yaml +15 -1
- package/.aiox-core/data/capability-detection.js +15 -15
- package/.aiox-core/data/entity-registry.yaml +18 -2
- package/.aiox-core/data/registry-update-log.jsonl +5 -0
- package/.aiox-core/data/tok3-token-comparison.js +0 -4
- package/.aiox-core/data/tool-search-validation.js +1 -1
- package/.aiox-core/development/agents/aiox-master.md +44 -6
- package/.aiox-core/development/agents/data-engineer.md +4 -4
- package/.aiox-core/development/agents/devops.md +52 -2
- package/.aiox-core/development/agents/po.md +1 -1
- package/.aiox-core/development/agents/qa.md +5 -11
- package/.aiox-core/development/agents/sm.md +3 -3
- package/.aiox-core/development/agents/ux-design-expert.md +1 -1
- package/.aiox-core/development/scripts/unified-activation-pipeline.js +29 -3
- package/.aiox-core/development/tasks/dev-develop-story.md +46 -7
- package/.aiox-core/development/tasks/devops-pro-access-grant.md +93 -0
- package/.aiox-core/development/tasks/devops-pro-activate.md +42 -0
- package/.aiox-core/development/tasks/devops-pro-check-access.md +34 -0
- package/.aiox-core/development/tasks/devops-pro-request-reset.md +34 -0
- package/.aiox-core/development/tasks/devops-pro-resend-verification.md +32 -0
- package/.aiox-core/development/tasks/devops-pro-reset-password.md +36 -0
- package/.aiox-core/development/tasks/devops-pro-validate-login.md +36 -0
- package/.aiox-core/development/tasks/devops-pro-verify-status.md +33 -0
- package/.aiox-core/development/tasks/qa-gate.md +54 -4
- package/.aiox-core/development/tasks/validate-next-story.md +39 -2
- package/.aiox-core/framework-config.yaml +1 -0
- package/.aiox-core/infrastructure/scripts/codex-skills-sync/README.md +69 -0
- package/.aiox-core/infrastructure/scripts/codex-skills-sync/bootstrap.js +727 -0
- package/.aiox-core/infrastructure/scripts/codex-skills-sync/index.js +10 -0
- package/.aiox-core/infrastructure/scripts/codex-skills-sync/validate.js +65 -4
- package/.aiox-core/infrastructure/scripts/generate-settings-json.js +29 -4
- package/.aiox-core/infrastructure/scripts/ide-sync/agent-parser.js +4 -0
- package/.aiox-core/infrastructure/scripts/ide-sync/index.js +67 -7
- package/.aiox-core/infrastructure/scripts/ide-sync/transformers/claude-code.js +145 -3
- package/.aiox-core/infrastructure/scripts/repair-agent-references.js +263 -0
- package/.aiox-core/infrastructure/scripts/validate-claude-integration.js +60 -8
- package/.aiox-core/infrastructure/scripts/validate-paths.js +13 -0
- package/.aiox-core/install-manifest.yaml +134 -82
- package/.aiox-core/utils/filters/index.js +2 -1
- package/.claude/commands/AIOX/agents/aiox-master.md +21 -0
- package/.claude/commands/AIOX/agents/analyst.md +21 -0
- package/.claude/commands/AIOX/agents/architect.md +21 -0
- package/.claude/commands/AIOX/agents/data-engineer.md +21 -0
- package/.claude/commands/AIOX/agents/dev.md +21 -0
- package/.claude/commands/AIOX/agents/devops.md +21 -0
- package/.claude/commands/AIOX/agents/pm.md +21 -0
- package/.claude/commands/AIOX/agents/po.md +21 -0
- package/.claude/commands/AIOX/agents/qa.md +21 -0
- package/.claude/commands/AIOX/agents/sm.md +21 -0
- package/.claude/commands/AIOX/agents/squad-creator.md +21 -0
- package/.claude/commands/AIOX/agents/ux-design-expert.md +21 -0
- package/.claude/commands/AIOX/scripts/agent-config-loader.js +624 -0
- package/.claude/commands/AIOX/scripts/generate-greeting.js +160 -0
- package/.claude/commands/AIOX/scripts/greeting-builder.js +866 -0
- package/.claude/commands/AIOX/scripts/session-context-loader.js +286 -0
- package/.claude/commands/AIOX/stories/story-6.1.4.md +1404 -0
- package/.claude/commands/cohort-squad/agents/cohort-manager.md +156 -0
- package/.claude/commands/design-system/agents/brad-frost.md +1097 -0
- package/.claude/commands/design-system/agents/dan-mall.md +857 -0
- package/.claude/commands/design-system/agents/dave-malouf.md +2272 -0
- package/.claude/commands/design-system/agents/design-chief.md +102 -0
- package/.claude/commands/design-system/agents/nano-banana-generator.md +162 -0
- package/.claude/commands/greet.md +101 -0
- package/.claude/commands/synapse/manager.md +75 -0
- package/.claude/commands/synapse/tasks/add-rule.md +94 -0
- package/.claude/commands/synapse/tasks/create-command.md +109 -0
- package/.claude/commands/synapse/tasks/create-domain.md +127 -0
- package/.claude/commands/synapse/tasks/diagnose-synapse.md +245 -0
- package/.claude/commands/synapse/tasks/edit-rule.md +109 -0
- package/.claude/commands/synapse/tasks/suggest-domain.md +116 -0
- package/.claude/commands/synapse/tasks/toggle-domain.md +83 -0
- package/.claude/commands/synapse/templates/domain-template +8 -0
- package/.claude/commands/synapse/templates/manifest-entry-template +4 -0
- package/.claude/commands/synapse/utils/manifest-parser-reference.md +134 -0
- package/.claude/hooks/precompact-session-digest.cjs +2 -2
- package/.claude/skills/AIOX/agents/aiox-master/SKILL.md +511 -0
- package/.claude/skills/AIOX/agents/analyst/SKILL.md +281 -0
- package/.claude/skills/AIOX/agents/architect/SKILL.md +482 -0
- package/.claude/skills/AIOX/agents/data-engineer/SKILL.md +503 -0
- package/.claude/skills/AIOX/agents/dev/SKILL.md +568 -0
- package/.claude/skills/AIOX/agents/devops/SKILL.md +597 -0
- package/.claude/skills/AIOX/agents/pm/SKILL.md +385 -0
- package/.claude/skills/AIOX/agents/po/SKILL.md +343 -0
- package/.claude/skills/AIOX/agents/qa/SKILL.md +451 -0
- package/.claude/skills/AIOX/agents/sm/SKILL.md +295 -0
- package/.claude/skills/AIOX/agents/squad-creator/SKILL.md +352 -0
- package/.claude/skills/AIOX/agents/ux-design-expert/SKILL.md +503 -0
- package/.claude/skills/architect-first/SKILL.md +275 -0
- package/.claude/skills/architect-first/assets/architecture-template.md +505 -0
- package/.claude/skills/architect-first/assets/config-template.yaml +351 -0
- package/.claude/skills/architect-first/references/architecture-checklist.md +216 -0
- package/.claude/skills/architect-first/references/pre-implementation-checklist.md +119 -0
- package/.claude/skills/architect-first/references/stop-rules-guide.md +291 -0
- package/.claude/skills/architect-first/references/testing-strategy-guide.md +477 -0
- package/.claude/skills/architect-first/scripts/architecture_validator.py +490 -0
- package/.claude/skills/architect-first/scripts/check_coupling.py +306 -0
- package/.claude/skills/architect-first/scripts/validate_risk_mitigation.py +382 -0
- package/.claude/skills/checklist-runner/SKILL.md +113 -0
- package/.claude/skills/clone-mind.md +329 -0
- package/.claude/skills/coderabbit-review/SKILL.md +106 -0
- package/.claude/skills/course-generation-workflow.md +76 -0
- package/.claude/skills/enhance-workflow.md +466 -0
- package/.claude/skills/mcp-builder/LICENSE.txt +202 -0
- package/.claude/skills/mcp-builder/SKILL.md +328 -0
- package/.claude/skills/mcp-builder/reference/evaluation.md +602 -0
- package/.claude/skills/mcp-builder/reference/mcp_best_practices.md +915 -0
- package/.claude/skills/mcp-builder/reference/node_mcp_server.md +916 -0
- package/.claude/skills/mcp-builder/reference/python_mcp_server.md +752 -0
- package/.claude/skills/mcp-builder/scripts/connections.py +151 -0
- package/.claude/skills/mcp-builder/scripts/evaluation.py +373 -0
- package/.claude/skills/mcp-builder/scripts/example_evaluation.xml +22 -0
- package/.claude/skills/mcp-builder/scripts/requirements.txt +2 -0
- package/.claude/skills/ralph.md +181 -0
- package/.claude/skills/skill-creator/LICENSE.txt +202 -0
- package/.claude/skills/skill-creator/SKILL.md +209 -0
- package/.claude/skills/skill-creator/scripts/init_skill.py +303 -0
- package/.claude/skills/skill-creator/scripts/package_skill.py +110 -0
- package/.claude/skills/skill-creator/scripts/quick_validate.py +65 -0
- package/.claude/skills/squad.md +301 -0
- package/.claude/skills/synapse/SKILL.md +132 -0
- package/.claude/skills/synapse/assets/README.md +50 -0
- package/.claude/skills/synapse/references/brackets.md +100 -0
- package/.claude/skills/synapse/references/commands.md +118 -0
- package/.claude/skills/synapse/references/domains.md +126 -0
- package/.claude/skills/synapse/references/layers.md +186 -0
- package/.claude/skills/synapse/references/manifest.md +142 -0
- package/.claude/skills/tech-search/SKILL.md +431 -0
- package/.claude/skills/tech-search/prompts/page-extract.md +133 -0
- package/README.en.md +2 -2
- package/README.md +8 -2
- package/bin/aiox.js +55 -4
- package/bin/utils/framework-guard.js +4 -2
- package/bin/utils/pro-detector.js +119 -28
- package/bin/utils/validate-publish.js +6 -6
- package/docs/aiox-agent-flows/devops-system.md +18 -0
- package/docs/aiox-workflows/README.md +1 -0
- package/docs/aiox-workflows/pro-access-grant-workflow.md +218 -0
- package/docs/guides/pro/access-grant-ops-playbook.md +370 -0
- package/docs/guides/pro/install-gate-setup.md +12 -6
- package/docs/guides/pro/squad-creator-handoff-pro-access-ops.md +134 -0
- package/docs/guides/supabase-ops-handoff.md +768 -0
- package/package.json +12 -1
- package/packages/aiox-pro-cli/bin/aiox-pro.js +33 -12
- package/packages/installer/src/config/configure-environment.js +118 -50
- package/packages/installer/src/installer/aiox-core-installer.js +124 -27
- package/packages/installer/src/installer/brownfield-upgrader.js +66 -9
- package/packages/installer/src/installer/dependency-installer.js +4 -0
- package/packages/installer/src/pro/pro-scaffolder.js +5 -5
- package/packages/installer/src/updater/index.js +151 -10
- package/packages/installer/src/wizard/ide-config-generator.js +73 -7
- package/packages/installer/src/wizard/index.js +119 -31
- package/packages/installer/src/wizard/pro-setup.js +118 -47
- package/packages/installer/src/wizard/validation/validators/dependency-validator.js +32 -25
- package/packages/installer/src/wizard/validation/validators/file-structure-validator.js +26 -0
- package/packages/installer/tests/unit/artifact-copy-pipeline/artifact-copy-pipeline.test.js +84 -1
- package/packages/installer/tests/unit/claude-md-template-v5/claude-md-template-v5.test.js +1 -1
- package/packages/installer/tests/unit/doctor/doctor-checks.test.js +85 -19
- package/packages/installer/tests/unit/entity-registry-bootstrap.test.js +4 -4
- package/packages/installer/tests/unit/generate-settings-json/generate-settings-json.test.js +5 -5
- package/packages/installer/tests/unit/ide-sync-integration/ide-sync-integration.test.js +4 -4
- package/packages/installer/tests/unit/merger/yaml-merger.test.js +11 -11
- package/pro/README.md +12 -1
- package/pro/license/index.js +3 -11
- package/pro/license/license-api.js +25 -0
- package/pro/license/license-cache.js +135 -31
- package/pro/license/license-crypto.js +59 -3
- package/pro/package.json +5 -4
- package/pro/squads/README.md +16 -16
- package/pro/squads/index.js +1 -1
- package/scripts/e2e/installed-skills-smoke.js +264 -0
- package/scripts/package-synapse.js +3 -3
- package/scripts/validate-package-completeness.js +8 -11
- package/.aiox-core/lib/build.json +0 -1
|
@@ -5,13 +5,16 @@
|
|
|
5
5
|
* based on estimated token usage. Provides token budgets and layer filtering
|
|
6
6
|
* per bracket for the SynapseEngine orchestrator.
|
|
7
7
|
*
|
|
8
|
-
*
|
|
8
|
+
* Reads model context window from core-config.yaml → models.registry.
|
|
9
9
|
*
|
|
10
10
|
* @module core/synapse/context/context-tracker
|
|
11
|
-
* @version 1.
|
|
11
|
+
* @version 1.1.0
|
|
12
12
|
* @created Story SYN-3 - Context Bracket Tracker
|
|
13
13
|
*/
|
|
14
14
|
|
|
15
|
+
const fs = require('fs');
|
|
16
|
+
const path = require('path');
|
|
17
|
+
|
|
15
18
|
/**
|
|
16
19
|
* Bracket definitions with thresholds and token budgets.
|
|
17
20
|
*
|
|
@@ -51,11 +54,87 @@ const XML_SAFETY_MULTIPLIER = 1.2;
|
|
|
51
54
|
|
|
52
55
|
/**
|
|
53
56
|
* Default configuration values.
|
|
57
|
+
* maxContext is the fallback when core-config.yaml is unavailable.
|
|
54
58
|
*/
|
|
55
|
-
const DEFAULTS = {
|
|
59
|
+
const DEFAULTS = Object.freeze({
|
|
56
60
|
avgTokensPerPrompt: 1500,
|
|
57
61
|
maxContext: 200000,
|
|
58
|
-
};
|
|
62
|
+
});
|
|
63
|
+
|
|
64
|
+
/** Cache for model config by project root (read once per root per process). */
|
|
65
|
+
const _modelConfigCache = new Map();
|
|
66
|
+
|
|
67
|
+
function cloneModelConfig(config) {
|
|
68
|
+
return { ...config };
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
function cacheModelConfig(root, config) {
|
|
72
|
+
const cachedConfig = Object.freeze(cloneModelConfig(config));
|
|
73
|
+
_modelConfigCache.set(root, cachedConfig);
|
|
74
|
+
return cloneModelConfig(cachedConfig);
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
function isPositiveFiniteNumber(value) {
|
|
78
|
+
return Number.isFinite(value) && value > 0;
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
/**
|
|
82
|
+
* Resolve the project root used for model config lookup.
|
|
83
|
+
*
|
|
84
|
+
* @param {string|null} basePath - Optional project root override
|
|
85
|
+
* @returns {string}
|
|
86
|
+
*/
|
|
87
|
+
function resolveConfigRoot(basePath) {
|
|
88
|
+
return path.resolve(basePath || path.resolve(__dirname, '..', '..', '..', '..'));
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
/**
|
|
92
|
+
* Read model configuration from core-config.yaml → models section.
|
|
93
|
+
* Returns { contextWindow, avgTokensPerPrompt } for the active model.
|
|
94
|
+
* Falls back to DEFAULTS if config is missing or malformed.
|
|
95
|
+
*
|
|
96
|
+
* @param {string|null} [basePath=null] - Project root override (defaults to __dirname-based resolution)
|
|
97
|
+
* @returns {{ maxContext: number, avgTokensPerPrompt: number }}
|
|
98
|
+
*/
|
|
99
|
+
function getModelConfig(basePath = null) {
|
|
100
|
+
const root = resolveConfigRoot(basePath);
|
|
101
|
+
if (_modelConfigCache.has(root)) return cloneModelConfig(_modelConfigCache.get(root));
|
|
102
|
+
|
|
103
|
+
try {
|
|
104
|
+
const yaml = require('js-yaml');
|
|
105
|
+
let configPath = path.join(root, '.aios-core', 'core-config.yaml');
|
|
106
|
+
if (!fs.existsSync(configPath)) {
|
|
107
|
+
configPath = path.join(root, '.aiox-core', 'core-config.yaml');
|
|
108
|
+
}
|
|
109
|
+
if (!fs.existsSync(configPath)) {
|
|
110
|
+
return cacheModelConfig(root, DEFAULTS);
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
const config = yaml.load(fs.readFileSync(configPath, 'utf8'));
|
|
114
|
+
const models = config && config.models;
|
|
115
|
+
if (!models || !models.registry || !models.active) {
|
|
116
|
+
return cacheModelConfig(root, DEFAULTS);
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
const activeModel = models.registry[models.active];
|
|
120
|
+
if (!activeModel || !isPositiveFiniteNumber(activeModel.contextWindow)) {
|
|
121
|
+
return cacheModelConfig(root, DEFAULTS);
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
const modelConfig = {
|
|
125
|
+
maxContext: activeModel.contextWindow,
|
|
126
|
+
avgTokensPerPrompt: isPositiveFiniteNumber(activeModel.avgTokensPerPrompt)
|
|
127
|
+
? activeModel.avgTokensPerPrompt
|
|
128
|
+
: DEFAULTS.avgTokensPerPrompt,
|
|
129
|
+
};
|
|
130
|
+
return cacheModelConfig(root, modelConfig);
|
|
131
|
+
} catch (err) {
|
|
132
|
+
if (process.env.DEBUG || process.env.AIOX_DEBUG) {
|
|
133
|
+
console.warn('[context-tracker] Failed to load model config, using defaults:', err.message);
|
|
134
|
+
}
|
|
135
|
+
return cacheModelConfig(root, DEFAULTS);
|
|
136
|
+
}
|
|
137
|
+
}
|
|
59
138
|
|
|
60
139
|
/**
|
|
61
140
|
* Layer configurations per bracket.
|
|
@@ -101,16 +180,20 @@ function calculateBracket(contextPercent) {
|
|
|
101
180
|
* Formula: 100 - ((promptCount * avgTokensPerPrompt) / maxContext * 100)
|
|
102
181
|
* Result is clamped to 0-100 range.
|
|
103
182
|
*
|
|
183
|
+
* Reads maxContext and avgTokensPerPrompt from core-config.yaml → models.registry
|
|
184
|
+
* for the active model. Options parameter can override for testing.
|
|
185
|
+
*
|
|
104
186
|
* @param {number} promptCount - Number of prompts in current session
|
|
105
|
-
* @param {Object} [options={}] - Configuration options
|
|
106
|
-
* @param {number} [options.avgTokensPerPrompt
|
|
107
|
-
* @param {number} [options.maxContext
|
|
187
|
+
* @param {Object} [options={}] - Configuration options (override config values)
|
|
188
|
+
* @param {number} [options.avgTokensPerPrompt] - Average tokens per prompt
|
|
189
|
+
* @param {number} [options.maxContext] - Maximum context window size in tokens
|
|
108
190
|
* @returns {number} Percentage of context remaining (0.0 to 100.0)
|
|
109
191
|
*/
|
|
110
192
|
function estimateContextPercent(promptCount, options = {}) {
|
|
193
|
+
const modelConfig = getModelConfig();
|
|
111
194
|
const {
|
|
112
|
-
avgTokensPerPrompt =
|
|
113
|
-
maxContext =
|
|
195
|
+
avgTokensPerPrompt = modelConfig.avgTokensPerPrompt,
|
|
196
|
+
maxContext = modelConfig.maxContext,
|
|
114
197
|
} = options;
|
|
115
198
|
|
|
116
199
|
if (typeof promptCount !== 'number' || isNaN(promptCount) || promptCount < 0) {
|
|
@@ -184,6 +267,19 @@ function needsMemoryHints(bracket) {
|
|
|
184
267
|
return bracket === 'DEPLETED' || bracket === 'CRITICAL';
|
|
185
268
|
}
|
|
186
269
|
|
|
270
|
+
/**
|
|
271
|
+
* Reset the model config cache. Useful for tests or after config changes.
|
|
272
|
+
*
|
|
273
|
+
* @param {string|null} [basePath=null] - Optional project root override
|
|
274
|
+
*/
|
|
275
|
+
function resetModelConfigCache(basePath = null) {
|
|
276
|
+
if (basePath === null) {
|
|
277
|
+
_modelConfigCache.clear();
|
|
278
|
+
return;
|
|
279
|
+
}
|
|
280
|
+
_modelConfigCache.delete(resolveConfigRoot(basePath));
|
|
281
|
+
}
|
|
282
|
+
|
|
187
283
|
module.exports = {
|
|
188
284
|
calculateBracket,
|
|
189
285
|
estimateContextPercent,
|
|
@@ -191,6 +287,8 @@ module.exports = {
|
|
|
191
287
|
getActiveLayers,
|
|
192
288
|
needsHandoffWarning,
|
|
193
289
|
needsMemoryHints,
|
|
290
|
+
getModelConfig,
|
|
291
|
+
resetModelConfigCache,
|
|
194
292
|
BRACKETS,
|
|
195
293
|
TOKEN_BUDGETS,
|
|
196
294
|
DEFAULTS,
|
|
@@ -50,7 +50,7 @@ class LayerProcessor {
|
|
|
50
50
|
* @param {object[]} context.previousLayers - Results from previous layers
|
|
51
51
|
* @returns {{ rules: string[], metadata: object } | null} Rules and metadata, or null to skip
|
|
52
52
|
*/
|
|
53
|
-
process(
|
|
53
|
+
process(_context) {
|
|
54
54
|
throw new Error(`${this.name}: process() must be implemented by subclass`);
|
|
55
55
|
}
|
|
56
56
|
|
|
@@ -312,6 +312,7 @@ ideSync:
|
|
|
312
312
|
claude-code:
|
|
313
313
|
enabled: true
|
|
314
314
|
path: .claude/commands/AIOX/agents
|
|
315
|
+
skillsPath: .claude/skills
|
|
315
316
|
format: full-markdown-yaml
|
|
316
317
|
codex:
|
|
317
318
|
enabled: true
|
|
@@ -385,4 +386,17 @@ boundary:
|
|
|
385
386
|
- .aiox-core/core/config/schemas/**
|
|
386
387
|
- .aiox-core/core/config/template-overrides.js
|
|
387
388
|
|
|
388
|
-
#
|
|
389
|
+
# Context-tracker dynamic model registry (Issue #605).
|
|
390
|
+
# Consumed by .aiox-core/core/synapse/context/context-tracker.js.
|
|
391
|
+
models:
|
|
392
|
+
active: claude-sonnet-4-6
|
|
393
|
+
registry:
|
|
394
|
+
claude-opus-4-6:
|
|
395
|
+
contextWindow: 1000000
|
|
396
|
+
avgTokensPerPrompt: 1500
|
|
397
|
+
claude-sonnet-4-6:
|
|
398
|
+
contextWindow: 200000
|
|
399
|
+
avgTokensPerPrompt: 1500
|
|
400
|
+
claude-haiku-4-5:
|
|
401
|
+
contextWindow: 200000
|
|
402
|
+
avgTokensPerPrompt: 1200
|
|
@@ -31,13 +31,13 @@ function detectToolSearch() {
|
|
|
31
31
|
return {
|
|
32
32
|
available: features.tengu_mcp_tool_search === true,
|
|
33
33
|
source: 'cachedGrowthBookFeatures.tengu_mcp_tool_search',
|
|
34
|
-
detectionMethod: 'claude-json-feature-flag'
|
|
34
|
+
detectionMethod: 'claude-json-feature-flag',
|
|
35
35
|
};
|
|
36
36
|
} catch {
|
|
37
37
|
return {
|
|
38
38
|
available: false,
|
|
39
39
|
source: 'detection-failed',
|
|
40
|
-
detectionMethod: 'claude-json-feature-flag'
|
|
40
|
+
detectionMethod: 'claude-json-feature-flag',
|
|
41
41
|
};
|
|
42
42
|
}
|
|
43
43
|
}
|
|
@@ -47,7 +47,7 @@ function detectDeferLoading() {
|
|
|
47
47
|
return {
|
|
48
48
|
available: false,
|
|
49
49
|
reason: 'defer_loading is API-only (Python SDK). Not exposed in Claude Code CLI.',
|
|
50
|
-
source: 'ADR-7 / Codex CRITICO-1'
|
|
50
|
+
source: 'ADR-7 / Codex CRITICO-1',
|
|
51
51
|
};
|
|
52
52
|
}
|
|
53
53
|
|
|
@@ -60,7 +60,7 @@ function detectProjectMcps() {
|
|
|
60
60
|
name,
|
|
61
61
|
type: cfg.type || 'command',
|
|
62
62
|
scope: 'project',
|
|
63
|
-
source: '.mcp.json'
|
|
63
|
+
source: '.mcp.json',
|
|
64
64
|
}));
|
|
65
65
|
} catch {
|
|
66
66
|
return [];
|
|
@@ -83,7 +83,7 @@ function detectGlobalMcps() {
|
|
|
83
83
|
name: match[1],
|
|
84
84
|
type: 'docker-gateway',
|
|
85
85
|
scope: 'global',
|
|
86
|
-
source: '~/.docker/mcp/config.yaml'
|
|
86
|
+
source: '~/.docker/mcp/config.yaml',
|
|
87
87
|
});
|
|
88
88
|
}
|
|
89
89
|
}
|
|
@@ -103,7 +103,7 @@ function detectGlobalMcps() {
|
|
|
103
103
|
name,
|
|
104
104
|
type: cfg.type || 'command',
|
|
105
105
|
scope: 'global-settings',
|
|
106
|
-
source: '~/.claude/settings.json'
|
|
106
|
+
source: '~/.claude/settings.json',
|
|
107
107
|
});
|
|
108
108
|
}
|
|
109
109
|
}
|
|
@@ -121,7 +121,7 @@ function detectDockerGateway() {
|
|
|
121
121
|
return {
|
|
122
122
|
available: exists,
|
|
123
123
|
configPath: exists ? dockerMcpDir : null,
|
|
124
|
-
detectionMethod: 'filesystem-check'
|
|
124
|
+
detectionMethod: 'filesystem-check',
|
|
125
125
|
};
|
|
126
126
|
}
|
|
127
127
|
|
|
@@ -180,7 +180,7 @@ function loadToolRegistry() {
|
|
|
180
180
|
tier2Count: tier2,
|
|
181
181
|
tier3Count: tier3,
|
|
182
182
|
essential,
|
|
183
|
-
nonEssential
|
|
183
|
+
nonEssential,
|
|
184
184
|
};
|
|
185
185
|
} catch {
|
|
186
186
|
return { available: false, totalTools: 0, tier1Count: 0, tier2Count: 0, tier3Count: 0, essential: [], nonEssential: [] };
|
|
@@ -197,7 +197,7 @@ function determineStrategy(toolSearch, deferLoading, dockerGateway) {
|
|
|
197
197
|
return {
|
|
198
198
|
primary: 'tool-search-auto',
|
|
199
199
|
description: 'Claude Code Tool Search is active. Tier 3 MCP tools are automatically deferred via tool_search.',
|
|
200
|
-
fallbacks: ['mcp-discipline', 'claudemd-guidance']
|
|
200
|
+
fallbacks: ['mcp-discipline', 'claudemd-guidance'],
|
|
201
201
|
};
|
|
202
202
|
}
|
|
203
203
|
|
|
@@ -205,14 +205,14 @@ function determineStrategy(toolSearch, deferLoading, dockerGateway) {
|
|
|
205
205
|
return {
|
|
206
206
|
primary: 'mcp-discipline',
|
|
207
207
|
description: 'Tool Search not available. Using MCP discipline: disable non-essential servers in .mcp.json.',
|
|
208
|
-
fallbacks: ['claudemd-guidance']
|
|
208
|
+
fallbacks: ['claudemd-guidance'],
|
|
209
209
|
};
|
|
210
210
|
}
|
|
211
211
|
|
|
212
212
|
return {
|
|
213
213
|
primary: 'claudemd-guidance',
|
|
214
214
|
description: 'Neither Tool Search nor Docker Gateway available. Using CLAUDE.md guidance for tool selection priority.',
|
|
215
|
-
fallbacks: []
|
|
215
|
+
fallbacks: [],
|
|
216
216
|
};
|
|
217
217
|
}
|
|
218
218
|
|
|
@@ -236,20 +236,20 @@ function run() {
|
|
|
236
236
|
|
|
237
237
|
methodology: {
|
|
238
238
|
toolSearchLatency: 'Managed internally by Claude Code — not programmatically measurable. Guidance-level enforcement via CLAUDE.md.',
|
|
239
|
-
mcpCountUnit: 'servers (not individual tools). TOK-1.5 baseline uses tool count (e.g., Apify = 7 tools = 1 server).'
|
|
239
|
+
mcpCountUnit: 'servers (not individual tools). TOK-1.5 baseline uses tool count (e.g., Apify = 7 tools = 1 server).',
|
|
240
240
|
},
|
|
241
241
|
|
|
242
242
|
runtime: {
|
|
243
243
|
toolSearch,
|
|
244
244
|
deferLoading,
|
|
245
|
-
dockerGateway
|
|
245
|
+
dockerGateway,
|
|
246
246
|
},
|
|
247
247
|
|
|
248
248
|
mcpServers: {
|
|
249
249
|
project: projectMcps,
|
|
250
250
|
global: globalMcps,
|
|
251
251
|
totalCount: projectMcps.length + globalMcps.length,
|
|
252
|
-
countUnit: 'servers'
|
|
252
|
+
countUnit: 'servers',
|
|
253
253
|
},
|
|
254
254
|
|
|
255
255
|
toolRegistry,
|
|
@@ -263,7 +263,7 @@ function run() {
|
|
|
263
263
|
|
|
264
264
|
nonEssentialServers: toolRegistry.nonEssential.length > 0
|
|
265
265
|
? toolRegistry.nonEssential
|
|
266
|
-
: []
|
|
266
|
+
: [],
|
|
267
267
|
};
|
|
268
268
|
|
|
269
269
|
// Ensure output directory exists
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
metadata:
|
|
2
2
|
version: 1.0.0
|
|
3
|
-
lastUpdated: '2026-
|
|
4
|
-
entityCount:
|
|
3
|
+
lastUpdated: '2026-05-07T00:08:59.095Z'
|
|
4
|
+
entityCount: 746
|
|
5
5
|
checksumAlgorithm: sha256
|
|
6
6
|
resolutionRate: 100
|
|
7
7
|
entities:
|
|
@@ -12778,6 +12778,22 @@ entities:
|
|
|
12778
12778
|
extensionPoints: []
|
|
12779
12779
|
checksum: sha256:dd025894f8f0d3bd22a147dbc0debef8b83e96f3c59483653404b3cd5a01d5aa
|
|
12780
12780
|
lastVerified: '2026-03-11T00:48:55.903Z'
|
|
12781
|
+
pro-updater:
|
|
12782
|
+
path: .aiox-core/core/pro/pro-updater.js
|
|
12783
|
+
layer: L1
|
|
12784
|
+
type: module
|
|
12785
|
+
purpose: Entity at .aiox-core/core/pro/pro-updater.js
|
|
12786
|
+
keywords:
|
|
12787
|
+
- pro
|
|
12788
|
+
- updater
|
|
12789
|
+
usedBy: []
|
|
12790
|
+
dependencies: []
|
|
12791
|
+
adaptability:
|
|
12792
|
+
score: 0.4
|
|
12793
|
+
constraints: []
|
|
12794
|
+
extensionPoints: []
|
|
12795
|
+
checksum: sha256:4fbdf590f1685d835fa5bef8e2307708ab1eeb49f5ea177d4f79c1629e35670a
|
|
12796
|
+
lastVerified: '2026-05-07T00:08:58.904Z'
|
|
12781
12797
|
agents:
|
|
12782
12798
|
aiox-master:
|
|
12783
12799
|
path: .aiox-core/development/agents/aiox-master.md
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
{"timestamp":"2026-05-06T18:32:31.287Z","action":"change","path":".aiox-core/development/scripts/unified-activation-pipeline.js","trigger":"watcher"}
|
|
2
|
+
{"timestamp":"2026-05-07T00:04:12.320Z","action":"change","path":".aiox-core/core/pro/pro-updater.js","trigger":"watcher"}
|
|
3
|
+
{"timestamp":"2026-05-07T00:05:09.664Z","action":"change","path":".aiox-core/core/pro/pro-updater.js","trigger":"watcher"}
|
|
4
|
+
{"timestamp":"2026-05-07T00:05:54.694Z","action":"change","path":".aiox-core/core/pro/pro-updater.js","trigger":"watcher"}
|
|
5
|
+
{"timestamp":"2026-05-07T00:08:58.920Z","action":"change","path":".aiox-core/core/pro/pro-updater.js","trigger":"watcher"}
|
|
@@ -13,10 +13,6 @@
|
|
|
13
13
|
* Reference: TOK-1.5 Baseline (docs/stories/epics/epic-token-optimization/story-TOK-1.5-baseline-metrics.md)
|
|
14
14
|
*/
|
|
15
15
|
|
|
16
|
-
const fs = require('fs');
|
|
17
|
-
const path = require('path');
|
|
18
|
-
const yaml = require ? null : null; // yaml not required — we parse manually
|
|
19
|
-
|
|
20
16
|
// --- Token estimation model ---
|
|
21
17
|
// Based on tool-registry.yaml tokenCost and observed output patterns
|
|
22
18
|
|
|
@@ -22,7 +22,7 @@ const TEST_QUERIES = [
|
|
|
22
22
|
{ query: 'analyze code dependencies', expectedTool: 'code-graph', category: 'code-intelligence' },
|
|
23
23
|
{ query: 'code analysis intelligence', expectedTool: 'nogic', category: 'code-intelligence' },
|
|
24
24
|
{ query: 'look up library documentation', expectedTool: 'context7', category: 'documentation' },
|
|
25
|
-
{ query: 'database query optimization', expectedTool: 'supabase', category: 'database' }
|
|
25
|
+
{ query: 'database query optimization', expectedTool: 'supabase', category: 'database' },
|
|
26
26
|
];
|
|
27
27
|
|
|
28
28
|
function parseKeywords(content) {
|
|
@@ -116,100 +116,132 @@ persona:
|
|
|
116
116
|
# All commands require * prefix when used (e.g., *help)
|
|
117
117
|
commands:
|
|
118
118
|
- name: help
|
|
119
|
+
visibility: [full, quick, key]
|
|
119
120
|
description: 'Show all available commands with descriptions'
|
|
120
121
|
- name: kb
|
|
122
|
+
visibility: [full, quick, key]
|
|
121
123
|
description: 'Toggle KB mode (loads AIOX Method knowledge)'
|
|
122
124
|
- name: status
|
|
125
|
+
visibility: [full, quick, key]
|
|
123
126
|
description: 'Show current context and progress'
|
|
124
127
|
- name: guide
|
|
128
|
+
visibility: [full, quick, key]
|
|
125
129
|
description: 'Show comprehensive usage guide for this agent'
|
|
126
130
|
- name: yolo
|
|
127
131
|
visibility: [full]
|
|
128
132
|
description: 'Toggle permission mode (cycle: ask > auto > explore)'
|
|
129
133
|
- name: exit
|
|
134
|
+
visibility: [full]
|
|
130
135
|
description: 'Exit agent mode'
|
|
131
136
|
- name: create
|
|
137
|
+
visibility: [full, quick, key]
|
|
132
138
|
description: 'Create new AIOX component (agent, task, workflow, template, checklist)'
|
|
133
139
|
- name: modify
|
|
140
|
+
visibility: [full, quick, key]
|
|
134
141
|
description: 'Modify existing AIOX component'
|
|
135
142
|
- name: update-manifest
|
|
143
|
+
visibility: [full]
|
|
136
144
|
description: 'Update team manifest'
|
|
137
145
|
- name: validate-component
|
|
146
|
+
visibility: [full]
|
|
138
147
|
description: 'Validate component security and standards'
|
|
139
148
|
- name: deprecate-component
|
|
149
|
+
visibility: [full]
|
|
140
150
|
description: 'Deprecate component with migration path'
|
|
141
151
|
- name: propose-modification
|
|
152
|
+
visibility: [full]
|
|
142
153
|
description: 'Propose framework modifications'
|
|
143
154
|
- name: undo-last
|
|
155
|
+
visibility: [full]
|
|
144
156
|
description: 'Undo last framework modification'
|
|
145
157
|
- name: validate-workflow
|
|
146
158
|
args: '{name|path} [--strict] [--all]'
|
|
147
159
|
description: 'Validate workflow YAML structure, agents, artifacts, and logic'
|
|
148
|
-
visibility: full
|
|
160
|
+
visibility: [full]
|
|
149
161
|
- name: run-workflow
|
|
150
162
|
args: '{name} [start|continue|status|skip|abort] [--mode=guided|engine]'
|
|
151
163
|
description: 'Workflow execution: guided (persona-switch) or engine (real subagent spawning)'
|
|
152
|
-
visibility: full
|
|
164
|
+
visibility: [full]
|
|
153
165
|
- name: analyze-framework
|
|
166
|
+
visibility: [full]
|
|
154
167
|
description: 'Analyze framework structure and patterns'
|
|
155
168
|
- name: list-components
|
|
169
|
+
visibility: [full]
|
|
156
170
|
description: 'List all framework components'
|
|
157
171
|
- name: test-memory
|
|
172
|
+
visibility: [full]
|
|
158
173
|
description: 'Test memory layer connection'
|
|
159
174
|
- name: task
|
|
175
|
+
visibility: [full, quick, key]
|
|
160
176
|
description: 'Execute specific task (or list available)'
|
|
161
177
|
- name: execute-checklist
|
|
162
178
|
args: '{checklist}'
|
|
179
|
+
visibility: [full]
|
|
163
180
|
description: 'Run checklist (or list available)'
|
|
164
181
|
|
|
165
182
|
# Workflow & Planning (Consolidated - Story 6.1.2.3)
|
|
166
183
|
- name: workflow
|
|
167
184
|
args: '{name} [--mode=guided|engine]'
|
|
185
|
+
visibility: [full, quick, key]
|
|
168
186
|
description: 'Start workflow (guided=manual, engine=real subagent spawning)'
|
|
169
187
|
- name: plan
|
|
170
188
|
args: '[create|status|update] [id]'
|
|
189
|
+
visibility: [full, quick, key]
|
|
171
190
|
description: 'Workflow planning (default: create)'
|
|
172
191
|
|
|
173
192
|
# Document Operations
|
|
174
193
|
- name: create-doc
|
|
175
194
|
args: '{template}'
|
|
195
|
+
visibility: [full]
|
|
176
196
|
description: 'Create document (or list templates)'
|
|
177
197
|
- name: doc-out
|
|
198
|
+
visibility: [full]
|
|
178
199
|
description: 'Output complete document'
|
|
179
200
|
- name: shard-doc
|
|
180
201
|
args: '{document} {destination}'
|
|
202
|
+
visibility: [full]
|
|
181
203
|
description: 'Break document into parts'
|
|
182
204
|
- name: document-project
|
|
205
|
+
visibility: [full]
|
|
183
206
|
description: 'Generate project documentation'
|
|
184
207
|
- name: add-tech-doc
|
|
185
208
|
args: '{file-path} [preset-name]'
|
|
209
|
+
visibility: [full]
|
|
186
210
|
description: 'Create tech-preset from documentation file'
|
|
187
211
|
|
|
188
212
|
# Story Creation
|
|
189
213
|
- name: create-next-story
|
|
214
|
+
visibility: [full]
|
|
190
215
|
description: 'Create next user story'
|
|
191
216
|
# NOTE: Epic/story creation delegated to @pm (brownfield-create-epic/story)
|
|
192
217
|
|
|
193
218
|
# Facilitation
|
|
194
219
|
- name: advanced-elicitation
|
|
220
|
+
visibility: [full]
|
|
195
221
|
description: 'Execute advanced elicitation'
|
|
196
222
|
- name: chat-mode
|
|
223
|
+
visibility: [full]
|
|
197
224
|
description: 'Start conversational assistance'
|
|
198
225
|
# NOTE: Brainstorming delegated to @analyst (*brainstorm)
|
|
199
226
|
|
|
200
227
|
# Utilities
|
|
201
228
|
- name: agent
|
|
202
229
|
args: '{name}'
|
|
230
|
+
visibility: [full]
|
|
203
231
|
description: 'Get info about specialized agent (use @ to transform)'
|
|
204
232
|
|
|
205
233
|
# Tools
|
|
206
234
|
- name: validate-agents
|
|
235
|
+
visibility: [full]
|
|
207
236
|
description: 'Validate all agent definitions (YAML parse, required fields, dependencies, pipeline reference)'
|
|
208
237
|
- name: correct-course
|
|
238
|
+
visibility: [full]
|
|
209
239
|
description: 'Analyze and correct process/quality deviations'
|
|
210
240
|
- name: index-docs
|
|
241
|
+
visibility: [full]
|
|
211
242
|
description: 'Index documentation for search'
|
|
212
243
|
- name: update-source-tree
|
|
244
|
+
visibility: [full]
|
|
213
245
|
description: 'Validate data file governance (owners, fill rules, existence)'
|
|
214
246
|
# NOTE: Test suite creation delegated to @qa (*create-suite)
|
|
215
247
|
# NOTE: AI prompt generation delegated to @architect (*generate-ai-prompt)
|
|
@@ -217,21 +249,27 @@ commands:
|
|
|
217
249
|
# IDS — Incremental Development System (Story IDS-7)
|
|
218
250
|
- name: ids check
|
|
219
251
|
args: '{intent} [--type {type}]'
|
|
252
|
+
visibility: [full]
|
|
220
253
|
description: 'Pre-check registry for REUSE/ADAPT/CREATE recommendations (advisory)'
|
|
221
254
|
- name: ids impact
|
|
222
255
|
args: '{entity-id}'
|
|
256
|
+
visibility: [full]
|
|
223
257
|
description: 'Impact analysis — direct/indirect consumers via usedBy BFS traversal'
|
|
224
258
|
- name: ids register
|
|
225
259
|
args: '{file-path} [--type {type}] [--agent {agent}]'
|
|
260
|
+
visibility: [full]
|
|
226
261
|
description: 'Register new entity in registry after creation'
|
|
227
262
|
- name: ids health
|
|
263
|
+
visibility: [full]
|
|
228
264
|
description: 'Registry health check (graceful fallback if RegistryHealer unavailable)'
|
|
229
265
|
- name: ids stats
|
|
266
|
+
visibility: [full]
|
|
230
267
|
description: 'Registry statistics (entity count by type, categories, health score)'
|
|
231
268
|
|
|
232
269
|
# Code Intelligence — Registry Enrichment (Story NOG-2)
|
|
233
270
|
- name: sync-registry-intel
|
|
234
271
|
args: '[--full]'
|
|
272
|
+
visibility: [full]
|
|
235
273
|
description: 'Enrich entity registry with code intelligence data (usedBy, dependencies, codeIntelMetadata). Use --full to force full resync.'
|
|
236
274
|
|
|
237
275
|
# IDS Pre-Action Hooks (Story IDS-7)
|
|
@@ -403,9 +441,9 @@ Type `*help` to see all commands, or `*kb` to enable KB mode.
|
|
|
403
441
|
**Delegated responsibilities (Story 6.1.2.3):**
|
|
404
442
|
|
|
405
443
|
- **Epic/Story creation** → @pm (*create-epic, *create-story)
|
|
406
|
-
- **Brainstorming** → @analyst (
|
|
407
|
-
- **Test suite creation** → @qa (
|
|
408
|
-
- **AI prompt generation** → @architect (
|
|
444
|
+
- **Brainstorming** → @analyst (`*brainstorm`)
|
|
445
|
+
- **Test suite creation** → @qa (`*create-suite`)
|
|
446
|
+
- **AI prompt generation** → @architect (`*generate-ai-prompt`)
|
|
409
447
|
|
|
410
448
|
**When to use specialized agents:**
|
|
411
449
|
|
|
@@ -440,7 +478,7 @@ Type `*help` to see all commands, or `*kb` to enable KB mode.
|
|
|
440
478
|
|
|
441
479
|
### Typical Workflow
|
|
442
480
|
|
|
443
|
-
1. **Framework dev** → `*create
|
|
481
|
+
1. **Framework dev** → `*create agent`, `*create task`, `*create workflow`
|
|
444
482
|
2. **IDS check** → Before creating, `*ids check {intent}` checks for existing artifacts
|
|
445
483
|
3. **Task execution** → `*task {task}` to run any task directly
|
|
446
484
|
4. **Workflow** → `*workflow {name}` for multi-step processes
|
|
@@ -13,7 +13,7 @@ IDE-FILE-RESOLUTION:
|
|
|
13
13
|
- type=folder (tasks|templates|checklists|data|utils|etc...), name=file-name
|
|
14
14
|
- Example: create-doc.md → .aiox-core/development/tasks/create-doc.md
|
|
15
15
|
- IMPORTANT: Only load these files when user requests specific command execution
|
|
16
|
-
REQUEST-RESOLUTION: Match user requests to your commands/dependencies flexibly (e.g., "design schema"→create-schema, "run migration"→apply-migration, "check security"→
|
|
16
|
+
REQUEST-RESOLUTION: Match user requests to your commands/dependencies flexibly (e.g., "design schema"→create-schema, "run migration"→apply-migration, "check security"→security-audit), ALWAYS ask for clarification if no clear match.
|
|
17
17
|
activation-instructions:
|
|
18
18
|
- STEP 1: Read THIS ENTIRE FILE - it contains your complete persona definition
|
|
19
19
|
- STEP 2: Adopt the persona defined in the 'agent' and 'persona' sections below
|
|
@@ -30,7 +30,7 @@ activation-instructions:
|
|
|
30
30
|
- Append: "Story: {active story from docs/stories/}" if detected + "Branch: `{branch from gitStatus}`" if not main/master
|
|
31
31
|
3. Show: "📊 **Project Status:**" as natural language narrative from gitStatus in system prompt:
|
|
32
32
|
- Branch name, modified file count, current story reference, last commit message
|
|
33
|
-
4. Show: "**Available Commands:**" — list
|
|
33
|
+
4. Show: "**Available Commands:**" — list Core Commands first; if commands use visibility metadata, prioritize entries with `key`
|
|
34
34
|
5. Show: "Type `*guide` for comprehensive usage instructions."
|
|
35
35
|
5.5. Check `.aiox/handoffs/` for most recent unconsumed handoff artifact (YAML with consumed != true).
|
|
36
36
|
If found: read `from_agent` and `last_command` from artifact, look up position in `.aiox-core/data/workflow-chains.yaml` matching from_agent + last_command, and show: "💡 **Suggested:** `*{next_command} {args}`"
|
|
@@ -259,8 +259,8 @@ usage_tips:
|
|
|
259
259
|
- 'Before any migration: `*snapshot baseline` to create rollback point'
|
|
260
260
|
- 'Test migrations: `*dry-run path/to/migration.sql` before applying'
|
|
261
261
|
- 'Apply migration: `*apply-migration path/to/migration.sql`'
|
|
262
|
-
- 'Security audit: `*
|
|
263
|
-
- 'Performance analysis: `*
|
|
262
|
+
- 'Security audit: `*security-audit rls` to check RLS coverage'
|
|
263
|
+
- 'Performance analysis: `*analyze-performance query SELECT * FROM...` or `*analyze-performance hotpaths`'
|
|
264
264
|
- 'Bootstrap new project: `*bootstrap` to create supabase/ structure'
|
|
265
265
|
|
|
266
266
|
coderabbit_integration:
|