chati-dev 4.5.13 → 4.5.15
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/framework/agents/build/dev.md +4 -5
- package/framework/agents/deploy/devops.md +9 -10
- package/framework/agents/discover/brief.md +7 -13
- package/framework/agents/discover/brownfield-wu.md +5 -11
- package/framework/agents/discover/greenfield-wu.md +7 -12
- package/framework/agents/plan/architect.md +1 -1
- package/framework/agents/plan/detail.md +5 -5
- package/framework/agents/plan/phases.md +4 -5
- package/framework/agents/plan/tasks.md +4 -5
- package/framework/agents/plan/ux-brand-architect.md +1 -1
- package/framework/agents/plan/ux.md +1 -1
- package/framework/agents/quality/qa-implementation.md +4 -5
- package/framework/agents/quality/qa-planning.md +4 -5
- package/framework/agents/quality/qa-visual.md +4 -4
- package/framework/agents/shared/visualizer.md +1 -1
- package/framework/config.yaml +5 -5
- package/framework/constitution.md +24 -26
- package/framework/context/governance.md +6 -6
- package/framework/context/root.md +4 -3
- package/framework/data/entity-registry.yaml +3 -3
- package/framework/data/model-limits.json +5 -2
- package/framework/hooks/model-governance.js +3 -2
- package/framework/hooks/prism-engine.js +1 -1
- package/framework/i18n/en.yaml +6 -2
- package/framework/i18n/es.yaml +6 -2
- package/framework/i18n/fr.yaml +6 -2
- package/framework/i18n/pt.yaml +6 -2
- package/framework/intelligence/context-engine.md +12 -16
- package/framework/manifest.json +63 -63
- package/framework/manifest.sig +1 -1
- package/framework/orchestrator/chati-router.js +40 -6
- package/framework/orchestrator/chati.md +12 -13
- package/framework/schemas/session.schema.json +1 -1
- package/package.json +1 -1
- package/src/config/context-file-generator.js +54 -246
- package/src/config/framework-adapter.js +45 -208
- package/src/context/bracket-tracker.js +3 -3
- package/src/context/engine.js +1 -1
- package/src/installer/core.js +190 -66
- package/src/installer/provider-overlay.js +1 -1
- package/src/installer/templates.js +55 -65
- package/src/installer-v2/index.js +2 -0
- package/src/memory/magic-docs.js +45 -26
- package/src/orchestrator/cli.js +50 -45
- package/src/orchestrator/handoff-engine.js +7 -5
- package/src/orchestrator/session-manager.js +24 -3
- package/src/terminal/cli-registry.js +5 -5
- package/src/terminal/prompt-builder.js +14 -10
- package/src/terminal/run-agent.js +10 -6
- package/src/terminal/run-parallel.js +6 -2
- package/src/terminal/run-team.js +7 -2
- package/src/terminal/spawner.js +34 -42
- package/src/utils/config-parser.js +2 -2
- package/src/utils/provider-limits.js +3 -1
- package/src/wizard/feedback.js +11 -0
- package/src/wizard/i18n.js +6 -2
- package/src/wizard/index.js +17 -7
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
# and by the Health Check for system integrity validation.
|
|
4
4
|
|
|
5
5
|
metadata:
|
|
6
|
-
version: "4.5.
|
|
6
|
+
version: "4.5.14"
|
|
7
7
|
last_updated: "2026-08-27T00:00:00Z"
|
|
8
8
|
entity_count: 109
|
|
9
9
|
checksum_algorithm: sha256
|
|
@@ -394,8 +394,8 @@ entities:
|
|
|
394
394
|
magic-docs:
|
|
395
395
|
path: packages/chati-dev/src/memory/magic-docs.js
|
|
396
396
|
type: module
|
|
397
|
-
purpose: "Auto-updating
|
|
398
|
-
keywords: [documentation, auto-update,
|
|
397
|
+
purpose: "Auto-updating provider-neutral project context after handoffs"
|
|
398
|
+
keywords: [documentation, auto-update, project-context, handoff, state]
|
|
399
399
|
dependencies: [constitution]
|
|
400
400
|
adaptability: 0.4
|
|
401
401
|
|
|
@@ -4,7 +4,8 @@
|
|
|
4
4
|
"providers": {
|
|
5
5
|
"claude": 1000000,
|
|
6
6
|
"gemini": 1000000,
|
|
7
|
-
"codex": 128000
|
|
7
|
+
"codex": 128000,
|
|
8
|
+
"grok": 200000
|
|
8
9
|
},
|
|
9
10
|
"models": {
|
|
10
11
|
"opus": 1000000,
|
|
@@ -14,6 +15,8 @@
|
|
|
14
15
|
"haiku": 200000,
|
|
15
16
|
"pro": 1000000,
|
|
16
17
|
"flash": 1000000,
|
|
17
|
-
"codex": 128000
|
|
18
|
+
"codex": 128000,
|
|
19
|
+
"grok-4.5": 200000,
|
|
20
|
+
"grok-4.6": 200000
|
|
18
21
|
}
|
|
19
22
|
}
|
|
@@ -99,8 +99,9 @@ async function main() {
|
|
|
99
99
|
if (agent && AGENT_MODELS[agent]) {
|
|
100
100
|
const assignment = AGENT_MODELS[agent];
|
|
101
101
|
const expected = assignment.model || assignment;
|
|
102
|
-
const provider = assignment.provider
|
|
103
|
-
|
|
102
|
+
const provider = assignment.provider;
|
|
103
|
+
const providerLabel = provider ? ` (provider: ${provider})` : '';
|
|
104
|
+
lines.push(`[Article XVI] Agent "${agent}" assigned model: ${expected}${providerLabel}`);
|
|
104
105
|
}
|
|
105
106
|
|
|
106
107
|
// Article XXIV: Model-Harness Parity. When the active model family differs
|
|
@@ -172,7 +172,7 @@ function readSessionState(projectDir) {
|
|
|
172
172
|
currentAgent: extract('current_agent') || null,
|
|
173
173
|
workflow: extract('workflow') || null,
|
|
174
174
|
pipelinePosition: extract('pipeline_position') || null,
|
|
175
|
-
provider: extract('active_provider') || extract('provider') ||
|
|
175
|
+
provider: extract('active_provider') || extract('provider') || null,
|
|
176
176
|
// v1.2 context detection fields.
|
|
177
177
|
activeModel: extract('active_model'),
|
|
178
178
|
modelAtLastAudit: extract('model_at_last_audit'),
|
package/framework/i18n/en.yaml
CHANGED
|
@@ -69,7 +69,7 @@ installer:
|
|
|
69
69
|
created_commands: "Created .claude/commands/ (thin router)"
|
|
70
70
|
installed_constitution: "Installed Constitution (Articles I-XXV)"
|
|
71
71
|
created_session: "Created session.yaml schema"
|
|
72
|
-
created_claude_md: "Created
|
|
72
|
+
created_claude_md: "Created provider-native context files"
|
|
73
73
|
configured_mcps: "Configured MCPs:"
|
|
74
74
|
validating: "Validating installation..."
|
|
75
75
|
agents_valid: "All agents implement 8 protocols"
|
|
@@ -100,6 +100,9 @@ installer:
|
|
|
100
100
|
system_prerequisites_failed: "System prerequisites not met:"
|
|
101
101
|
fix_prerequisites: "Fix the issues above and try again."
|
|
102
102
|
system_check: "System check:"
|
|
103
|
+
system_checking: "Checking system requirements..."
|
|
104
|
+
catalog_resolving: "Loading the signed model catalog..."
|
|
105
|
+
internal_authorizing: "Verifying access to Internal mode..."
|
|
103
106
|
created_provider_claude: "Created .claude/commands/ (thin router)"
|
|
104
107
|
created_provider_gemini: "Created .gemini/commands/ (TOML command)"
|
|
105
108
|
created_provider_codex: "Created .agents/skills/chati/ (Codex skill)"
|
|
@@ -114,6 +117,7 @@ installer:
|
|
|
114
117
|
license_placeholder: "CHATI-XXXX-XXXX-XXXX"
|
|
115
118
|
license_skipped: "Skipped. Run: npx chati-dev activate --key=YOUR-KEY when ready."
|
|
116
119
|
license_activating: "Activating license..."
|
|
120
|
+
license_verifying: "Verifying saved license..."
|
|
117
121
|
license_activated: "License activated! Plan: {plan}, {days} day(s) remaining."
|
|
118
122
|
license_activation_failed: "Activation failed: {error}"
|
|
119
123
|
license_retry: "Run: npx chati-dev activate --key=YOUR-KEY to try again."
|
|
@@ -156,7 +160,7 @@ features:
|
|
|
156
160
|
|
|
157
161
|
errors:
|
|
158
162
|
session_corrupted: "Session file appears corrupted. Attempting recovery..."
|
|
159
|
-
handoff_missing: "Handoff not found. Using session.yaml +
|
|
163
|
+
handoff_missing: "Handoff not found. Using session.yaml + .chati/project-context.md as fallback."
|
|
160
164
|
agent_failed: "Agent failed after 3 attempts. Escalating to user."
|
|
161
165
|
mcp_required: "Required MCP '{mcp}' is not configured. Install instructions:"
|
|
162
166
|
mcp_optional: "Optional MCP '{mcp}' not configured. Skipping related functionality."
|
package/framework/i18n/es.yaml
CHANGED
|
@@ -69,7 +69,7 @@ installer:
|
|
|
69
69
|
created_commands: "Creado .claude/commands/ (enrutador)"
|
|
70
70
|
installed_constitution: "Instalada Constitucion (Artículos I-XXV)"
|
|
71
71
|
created_session: "Creado schema session.yaml"
|
|
72
|
-
created_claude_md: "
|
|
72
|
+
created_claude_md: "Creados archivos de contexto nativos de los providers"
|
|
73
73
|
configured_mcps: "MCPs configurados:"
|
|
74
74
|
validating: "Validando instalacion..."
|
|
75
75
|
agents_valid: "Todos los agentes implementan 8 protocolos"
|
|
@@ -100,6 +100,9 @@ installer:
|
|
|
100
100
|
system_prerequisites_failed: "No se cumplen los requisitos previos del sistema:"
|
|
101
101
|
fix_prerequisites: "Corrija los problemas anteriores e intentelo de nuevo."
|
|
102
102
|
system_check: "Verificacion del sistema:"
|
|
103
|
+
system_checking: "Verificando los requisitos del sistema..."
|
|
104
|
+
catalog_resolving: "Cargando el catalogo firmado de modelos..."
|
|
105
|
+
internal_authorizing: "Verificando el acceso al modo Internal..."
|
|
103
106
|
created_provider_claude: "Creado .claude/commands/ (enrutador ligero)"
|
|
104
107
|
created_provider_gemini: "Creado .gemini/commands/ (comando TOML)"
|
|
105
108
|
created_provider_codex: "Creado .agents/skills/chati/ (skill de Codex)"
|
|
@@ -114,6 +117,7 @@ installer:
|
|
|
114
117
|
license_placeholder: "CHATI-XXXX-XXXX-XXXX"
|
|
115
118
|
license_skipped: "Paso omitido. Cuando quiera, ejecute: npx chati-dev activate --key=SU-CLAVE."
|
|
116
119
|
license_activating: "Activando la licencia..."
|
|
120
|
+
license_verifying: "Verificando la licencia guardada..."
|
|
117
121
|
license_activated: "Licencia activada! Plan: {plan}, {days} dia(s) restante(s)."
|
|
118
122
|
license_activation_failed: "Fallo de activacion: {error}"
|
|
119
123
|
license_retry: "Ejecute: npx chati-dev activate --key=SU-CLAVE para intentarlo de nuevo."
|
|
@@ -156,7 +160,7 @@ features:
|
|
|
156
160
|
|
|
157
161
|
errors:
|
|
158
162
|
session_corrupted: "Archivo de sesion parece corrupto. Intentando recuperacion..."
|
|
159
|
-
handoff_missing: "Handoff no encontrado. Usando session.yaml +
|
|
163
|
+
handoff_missing: "Handoff no encontrado. Usando session.yaml + .chati/project-context.md como respaldo."
|
|
160
164
|
agent_failed: "Agente fallo despues de 3 intentos. Escalando al usuario."
|
|
161
165
|
mcp_required: "MCP requerido '{mcp}' no esta configurado. Instrucciones de instalacion:"
|
|
162
166
|
mcp_optional: "MCP opcional '{mcp}' no configurado. Omitiendo funcionalidad relacionada."
|
package/framework/i18n/fr.yaml
CHANGED
|
@@ -69,7 +69,7 @@ installer:
|
|
|
69
69
|
created_commands: "Cree .claude/commands/ (routeur)"
|
|
70
70
|
installed_constitution: "Installee la Constitution (Articles I-XXV)"
|
|
71
71
|
created_session: "Cree le schema session.yaml"
|
|
72
|
-
created_claude_md: "
|
|
72
|
+
created_claude_md: "Fichiers de contexte natifs des providers crees"
|
|
73
73
|
configured_mcps: "MCPs configures:"
|
|
74
74
|
validating: "Validation de l'installation..."
|
|
75
75
|
agents_valid: "Tous les agents implementent 8 protocoles"
|
|
@@ -100,6 +100,9 @@ installer:
|
|
|
100
100
|
system_prerequisites_failed: "Les prerequis systeme ne sont pas satisfaits:"
|
|
101
101
|
fix_prerequisites: "Corrigez les problemes ci-dessus et reessayez."
|
|
102
102
|
system_check: "Verification du systeme:"
|
|
103
|
+
system_checking: "Verification des prerequis du systeme..."
|
|
104
|
+
catalog_resolving: "Chargement du catalogue de modeles signe..."
|
|
105
|
+
internal_authorizing: "Verification de l'acces au mode Internal..."
|
|
103
106
|
created_provider_claude: "Cree .claude/commands/ (routeur leger)"
|
|
104
107
|
created_provider_gemini: "Cree .gemini/commands/ (commande TOML)"
|
|
105
108
|
created_provider_codex: "Cree .agents/skills/chati/ (skill Codex)"
|
|
@@ -114,6 +117,7 @@ installer:
|
|
|
114
117
|
license_placeholder: "CHATI-XXXX-XXXX-XXXX"
|
|
115
118
|
license_skipped: "Etape ignoree. Lorsque vous le souhaitez, executez: npx chati-dev activate --key=VOTRE-CLE."
|
|
116
119
|
license_activating: "Activation de la licence..."
|
|
120
|
+
license_verifying: "Verification de la licence enregistree..."
|
|
117
121
|
license_activated: "Licence activee! Offre: {plan}, {days} jour(s) restant(s)."
|
|
118
122
|
license_activation_failed: "Echec de l'activation: {error}"
|
|
119
123
|
license_retry: "Executez: npx chati-dev activate --key=VOTRE-CLE pour reessayer."
|
|
@@ -156,7 +160,7 @@ features:
|
|
|
156
160
|
|
|
157
161
|
errors:
|
|
158
162
|
session_corrupted: "Le fichier de session semble corrompu. Tentative de recuperation..."
|
|
159
|
-
handoff_missing: "Passation non trouvee. Utilisation de session.yaml +
|
|
163
|
+
handoff_missing: "Passation non trouvee. Utilisation de session.yaml + .chati/project-context.md comme repli."
|
|
160
164
|
agent_failed: "L'agent a echoue apres 3 tentatives. Escalade vers l'utilisateur."
|
|
161
165
|
mcp_required: "MCP requis '{mcp}' n'est pas configure. Instructions d'installation:"
|
|
162
166
|
mcp_optional: "MCP optionnel '{mcp}' non configure. Fonctionnalite associee ignoree."
|
package/framework/i18n/pt.yaml
CHANGED
|
@@ -69,7 +69,7 @@ installer:
|
|
|
69
69
|
created_commands: "Criado .claude/commands/ (roteador)"
|
|
70
70
|
installed_constitution: "Instalada Constituicao (Artigos I-XXV)"
|
|
71
71
|
created_session: "Criado schema session.yaml"
|
|
72
|
-
created_claude_md: "
|
|
72
|
+
created_claude_md: "Criados arquivos de contexto nativos dos providers"
|
|
73
73
|
configured_mcps: "MCPs configurados:"
|
|
74
74
|
validating: "Validando instalacao..."
|
|
75
75
|
agents_valid: "Todos os agentes implementam 8 protocolos"
|
|
@@ -100,6 +100,9 @@ installer:
|
|
|
100
100
|
system_prerequisites_failed: "Os pre-requisitos do sistema nao foram atendidos:"
|
|
101
101
|
fix_prerequisites: "Corrija os problemas acima e tente novamente."
|
|
102
102
|
system_check: "Verificacao do sistema:"
|
|
103
|
+
system_checking: "Verificando os requisitos do sistema..."
|
|
104
|
+
catalog_resolving: "Carregando o catalogo assinado de modelos..."
|
|
105
|
+
internal_authorizing: "Validando o acesso ao modo Internal..."
|
|
103
106
|
created_provider_claude: "Criado .claude/commands/ (roteador leve)"
|
|
104
107
|
created_provider_gemini: "Criado .gemini/commands/ (comando TOML)"
|
|
105
108
|
created_provider_codex: "Criado .agents/skills/chati/ (skill do Codex)"
|
|
@@ -114,6 +117,7 @@ installer:
|
|
|
114
117
|
license_placeholder: "CHATI-XXXX-XXXX-XXXX"
|
|
115
118
|
license_skipped: "Etapa ignorada. Quando quiser, execute: npx chati-dev activate --key=SUA-CHAVE."
|
|
116
119
|
license_activating: "Ativando a licenca..."
|
|
120
|
+
license_verifying: "Validando a licenca salva..."
|
|
117
121
|
license_activated: "Licenca ativada! Plano: {plan}, {days} dia(s) restante(s)."
|
|
118
122
|
license_activation_failed: "Falha na ativacao: {error}"
|
|
119
123
|
license_retry: "Execute: npx chati-dev activate --key=SUA-CHAVE para tentar novamente."
|
|
@@ -156,7 +160,7 @@ features:
|
|
|
156
160
|
|
|
157
161
|
errors:
|
|
158
162
|
session_corrupted: "Arquivo de sessao parece corrompido. Tentando recuperacao..."
|
|
159
|
-
handoff_missing: "Handoff nao encontrado. Usando session.yaml +
|
|
163
|
+
handoff_missing: "Handoff nao encontrado. Usando session.yaml + .chati/project-context.md como fallback."
|
|
160
164
|
agent_failed: "Agente falhou apos 3 tentativas. Escalando para o usuario."
|
|
161
165
|
mcp_required: "MCP obrigatorio '{mcp}' nao esta configurado. Instrucoes de instalacao:"
|
|
162
166
|
mcp_optional: "MCP opcional '{mcp}' nao configurado. Pulando funcionalidade relacionada."
|
|
@@ -116,7 +116,7 @@ estimatedTokens = promptText.length / 4
|
|
|
116
116
|
remainingPercent = (1 - estimatedTokens / providerLimit) * 100
|
|
117
117
|
```
|
|
118
118
|
|
|
119
|
-
This replaces the legacy heuristic (`turnCount / maxTurns`) which was inaccurate for sessions with large tool results or long agent outputs. The token-based approach scales
|
|
119
|
+
This replaces the legacy heuristic (`turnCount / maxTurns`) which was inaccurate for sessions with large tool results or long agent outputs. The token-based approach scales from the active routed model or provider limit and uses a conservative neutral limit when the binding is unknown.
|
|
120
120
|
|
|
121
121
|
Fallback: If prompt text is unavailable, the turn-count heuristic is used.
|
|
122
122
|
|
|
@@ -159,14 +159,11 @@ If Smart Continuation is insufficient, the orchestrator spawns a new session:
|
|
|
159
159
|
|
|
160
160
|
**BUILD-phase reset preference:** During the BUILD phase, when the active agent reaches DEPLETED or CRITICAL, the orchestrator defaults to Level 2 (Autonomous Session Spawn, a clean reset) rather than Level 1 (Smart Continuation, in-place compaction). Compaction preserves continuity but not a clean slate, so the model can keep wrapping up work prematurely while code is being written; a reset carrying a full handoff is safer there. Level 1 stays the default for the MODERATE bracket and for the DISCOVER and PLAN phases.
|
|
161
161
|
|
|
162
|
-
###
|
|
162
|
+
### Harness-Specific Behavior
|
|
163
163
|
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
| AntiGravity | Automatic via platform hooks | New agent session via platform API |
|
|
168
|
-
| Cursor / VS Code | Automatic via context detection | Continuation file for manual resume |
|
|
169
|
-
| Gemini CLI | Automatic via context detection | CLI spawn |
|
|
164
|
+
Each harness profile declares its native compaction and spawn capabilities.
|
|
165
|
+
When a native mechanism is unavailable, Chati uses its continuation artifact
|
|
166
|
+
and provider-neutral process runner without changing the routed model binding.
|
|
170
167
|
|
|
171
168
|
---
|
|
172
169
|
|
|
@@ -197,24 +194,23 @@ Memory injection follows the same progressive reinforcement principle: as contex
|
|
|
197
194
|
|
|
198
195
|
When agents execute on different CLI providers, context injection adapts to the provider's capabilities:
|
|
199
196
|
|
|
200
|
-
### Hook-
|
|
197
|
+
### Hook-capable harnesses
|
|
201
198
|
- PRISM context injected via `UserPromptSubmit` hook
|
|
202
199
|
- Mode governance enforced via `PreToolUse` hook
|
|
203
200
|
- Constitution guard enforced via `PreToolUse` hook
|
|
204
|
-
- Full governance parity with
|
|
201
|
+
- Full governance parity with the canonical Chati invariants
|
|
205
202
|
|
|
206
|
-
### Prompt-
|
|
203
|
+
### Prompt-enforced harnesses
|
|
207
204
|
- PRISM context embedded directly in the spawned prompt (via prompt-builder)
|
|
208
205
|
- Governance directives included as system instructions in the prompt
|
|
209
206
|
- Softer enforcement — relies on model compliance rather than hook interception
|
|
210
207
|
- Write scope restrictions communicated via prompt, not blocked at tool level
|
|
211
208
|
|
|
212
209
|
### Context File Mapping
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
| Codex CLI | AGENTS.md | Auto-generated from CLAUDE.md |
|
|
210
|
+
|
|
211
|
+
The canonical project context is `.chati/project-context.md`. Each enabled
|
|
212
|
+
harness consumes it through its own native context file or import mechanism.
|
|
213
|
+
No provider context file is generated from another provider's file.
|
|
218
214
|
|
|
219
215
|
### Cross-Provider Handoff
|
|
220
216
|
Handoff format is identical regardless of which provider executed the agent. The two-layer structure (Article VIII) ensures any provider can read any handoff. Session state in `.chati/session.yaml` is the single source of truth — all providers read from and write to the same session file.
|
package/framework/manifest.json
CHANGED
|
@@ -1,29 +1,29 @@
|
|
|
1
1
|
{
|
|
2
|
-
"createdAt": "2026-08-
|
|
2
|
+
"createdAt": "2026-08-28T08:43:33.218Z",
|
|
3
3
|
"files": {
|
|
4
4
|
"agents/build/dev.md": {
|
|
5
|
-
"hash": "
|
|
6
|
-
"size":
|
|
5
|
+
"hash": "f0dd9bcdf44c57fdf64beca65d3617f0f24467b2f6edc9c0577d721b4922977a",
|
|
6
|
+
"size": 64737,
|
|
7
7
|
"type": "md"
|
|
8
8
|
},
|
|
9
9
|
"agents/deploy/devops.md": {
|
|
10
|
-
"hash": "
|
|
11
|
-
"size":
|
|
10
|
+
"hash": "a9f64ea3b9b48ea74884a2d5853a7ca61013e3943f56ac8c7c3346706d53c1ec",
|
|
11
|
+
"size": 17801,
|
|
12
12
|
"type": "md"
|
|
13
13
|
},
|
|
14
14
|
"agents/discover/brief.md": {
|
|
15
|
-
"hash": "
|
|
16
|
-
"size":
|
|
15
|
+
"hash": "45fa58fe280e13a8f07784d63c6b31c593b7cca632634e9eef3d0231b750647d",
|
|
16
|
+
"size": 26190,
|
|
17
17
|
"type": "md"
|
|
18
18
|
},
|
|
19
19
|
"agents/discover/brownfield-wu.md": {
|
|
20
|
-
"hash": "
|
|
21
|
-
"size":
|
|
20
|
+
"hash": "3a30f4aae5658d808d5c8ce0c61afec9acd14cdff3c1ed10d13b0b0b7f5ca1b5",
|
|
21
|
+
"size": 18083,
|
|
22
22
|
"type": "md"
|
|
23
23
|
},
|
|
24
24
|
"agents/discover/greenfield-wu.md": {
|
|
25
|
-
"hash": "
|
|
26
|
-
"size":
|
|
25
|
+
"hash": "4776a8ab557e8179742224a2b0b3af8fe84684d9ebfe04575c702b1553aa988a",
|
|
26
|
+
"size": 17267,
|
|
27
27
|
"type": "md"
|
|
28
28
|
},
|
|
29
29
|
"agents/plan/architect-data-engineer.md": {
|
|
@@ -37,28 +37,28 @@
|
|
|
37
37
|
"type": "md"
|
|
38
38
|
},
|
|
39
39
|
"agents/plan/architect.md": {
|
|
40
|
-
"hash": "
|
|
41
|
-
"size":
|
|
40
|
+
"hash": "5a8727907d025f0825c27ef07044afe317b31b4fbb574ab293374b5948cefa80",
|
|
41
|
+
"size": 13344,
|
|
42
42
|
"type": "md"
|
|
43
43
|
},
|
|
44
44
|
"agents/plan/detail.md": {
|
|
45
|
-
"hash": "
|
|
46
|
-
"size":
|
|
45
|
+
"hash": "968ad01a70e11761cec983b8b560638307c866656c1f5fb7f7a6094405d77535",
|
|
46
|
+
"size": 19207,
|
|
47
47
|
"type": "md"
|
|
48
48
|
},
|
|
49
49
|
"agents/plan/phases.md": {
|
|
50
|
-
"hash": "
|
|
51
|
-
"size":
|
|
50
|
+
"hash": "898ac1cda4a4583d8fbc81d9232d6784035c72877b41a42823d17d9d763be015",
|
|
51
|
+
"size": 15642,
|
|
52
52
|
"type": "md"
|
|
53
53
|
},
|
|
54
54
|
"agents/plan/tasks.md": {
|
|
55
|
-
"hash": "
|
|
56
|
-
"size":
|
|
55
|
+
"hash": "e0b2263d58bf6ddaf480deb588e8612e9464d18f7ac0ef0edb2355f21bae2280",
|
|
56
|
+
"size": 27674,
|
|
57
57
|
"type": "md"
|
|
58
58
|
},
|
|
59
59
|
"agents/plan/ux-brand-architect.md": {
|
|
60
|
-
"hash": "
|
|
61
|
-
"size":
|
|
60
|
+
"hash": "a456acd57a4d1ec646dfe04a483fd4f2e2ac14486f58a95e2dc5f99651bc0f55",
|
|
61
|
+
"size": 28432,
|
|
62
62
|
"type": "md"
|
|
63
63
|
},
|
|
64
64
|
"agents/plan/ux-component-engineer.md": {
|
|
@@ -72,43 +72,43 @@
|
|
|
72
72
|
"type": "md"
|
|
73
73
|
},
|
|
74
74
|
"agents/plan/ux.md": {
|
|
75
|
-
"hash": "
|
|
76
|
-
"size":
|
|
75
|
+
"hash": "d52bf1780d24893a1c9154adf1ab563d60d2ba3424ada6113b6ad7f4b5fe87bd",
|
|
76
|
+
"size": 15307,
|
|
77
77
|
"type": "md"
|
|
78
78
|
},
|
|
79
79
|
"agents/quality/qa-implementation.md": {
|
|
80
|
-
"hash": "
|
|
81
|
-
"size":
|
|
80
|
+
"hash": "25d35a5e4cbb5ca9fdd0a9043b98383308e945a85949644f04e66c43448358e7",
|
|
81
|
+
"size": 40202,
|
|
82
82
|
"type": "md"
|
|
83
83
|
},
|
|
84
84
|
"agents/quality/qa-planning.md": {
|
|
85
|
-
"hash": "
|
|
86
|
-
"size":
|
|
85
|
+
"hash": "9984fd3b82efcc3eb8efc07be0d06c0ac8850c4c91464e78a3dcdcd1fb969a59",
|
|
86
|
+
"size": 25635,
|
|
87
87
|
"type": "md"
|
|
88
88
|
},
|
|
89
89
|
"agents/quality/qa-visual.md": {
|
|
90
|
-
"hash": "
|
|
91
|
-
"size":
|
|
90
|
+
"hash": "8a57716766dc1f9ebb2efdbbd211e607a26ab7374be50a59e224a577ef594b63",
|
|
91
|
+
"size": 21609,
|
|
92
92
|
"type": "md"
|
|
93
93
|
},
|
|
94
94
|
"agents/shared/visualizer.md": {
|
|
95
|
-
"hash": "
|
|
95
|
+
"hash": "4e00f0de139147ee94313fe428d94c57bb2d1ea92107a3d9b4a3d3c82d38b2fd",
|
|
96
96
|
"size": 4375,
|
|
97
97
|
"type": "md"
|
|
98
98
|
},
|
|
99
99
|
"config.yaml": {
|
|
100
|
-
"hash": "
|
|
101
|
-
"size":
|
|
100
|
+
"hash": "f003820b2a1584a62a033a19b3e64e18c25b2dd7b27990377e54ba4bc373d2e4",
|
|
101
|
+
"size": 2638,
|
|
102
102
|
"type": "yaml"
|
|
103
103
|
},
|
|
104
104
|
"constitution.md": {
|
|
105
|
-
"hash": "
|
|
106
|
-
"size":
|
|
105
|
+
"hash": "8e87dda77feca226d4cc418834e8db2d8f5b79d6d79b0554c962801ca02cc264",
|
|
106
|
+
"size": 65539,
|
|
107
107
|
"type": "md"
|
|
108
108
|
},
|
|
109
109
|
"context/governance.md": {
|
|
110
|
-
"hash": "
|
|
111
|
-
"size":
|
|
110
|
+
"hash": "4a0fcc136806543f04e815fd5825c9edc12804b9dba99b37e6c710b64de0c44a",
|
|
111
|
+
"size": 6477,
|
|
112
112
|
"type": "md"
|
|
113
113
|
},
|
|
114
114
|
"context/protocols.md": {
|
|
@@ -122,18 +122,18 @@
|
|
|
122
122
|
"type": "md"
|
|
123
123
|
},
|
|
124
124
|
"context/root.md": {
|
|
125
|
-
"hash": "
|
|
126
|
-
"size":
|
|
125
|
+
"hash": "771c6ffe5bb5cf2afa3e9346ee522e5287621747aef9b16791d4fcc4d1a24457",
|
|
126
|
+
"size": 1333,
|
|
127
127
|
"type": "md"
|
|
128
128
|
},
|
|
129
129
|
"data/entity-registry.yaml": {
|
|
130
|
-
"hash": "
|
|
131
|
-
"size":
|
|
130
|
+
"hash": "2b71806fdca289588fb2e3817c11b2674b17854da901a2536c6e967af51cc8d4",
|
|
131
|
+
"size": 34613,
|
|
132
132
|
"type": "yaml"
|
|
133
133
|
},
|
|
134
134
|
"data/model-limits.json": {
|
|
135
|
-
"hash": "
|
|
136
|
-
"size":
|
|
135
|
+
"hash": "b35378070e52679313bf8f2347d62919260cdbeb029b6403c859473fafe0f8d9",
|
|
136
|
+
"size": 1266,
|
|
137
137
|
"type": "json"
|
|
138
138
|
},
|
|
139
139
|
"data/qa-rubrics.yaml": {
|
|
@@ -317,8 +317,8 @@
|
|
|
317
317
|
"type": "js"
|
|
318
318
|
},
|
|
319
319
|
"hooks/model-governance.js": {
|
|
320
|
-
"hash": "
|
|
321
|
-
"size":
|
|
320
|
+
"hash": "656111144f24bba6b14fdad4a8a1c3a86f45d31cde90d4b80d19e6eac309b5ef",
|
|
321
|
+
"size": 5901,
|
|
322
322
|
"type": "js"
|
|
323
323
|
},
|
|
324
324
|
"hooks/package.json": {
|
|
@@ -332,8 +332,8 @@
|
|
|
332
332
|
"type": "js"
|
|
333
333
|
},
|
|
334
334
|
"hooks/prism-engine.js": {
|
|
335
|
-
"hash": "
|
|
336
|
-
"size":
|
|
335
|
+
"hash": "758ffbf60036aa6dced1ed90f2cc159de49225e67a4e97d1d8c98aa887f69908",
|
|
336
|
+
"size": 19163,
|
|
337
337
|
"type": "js"
|
|
338
338
|
},
|
|
339
339
|
"hooks/read-protection.js": {
|
|
@@ -377,23 +377,23 @@
|
|
|
377
377
|
"type": "js"
|
|
378
378
|
},
|
|
379
379
|
"i18n/en.yaml": {
|
|
380
|
-
"hash": "
|
|
381
|
-
"size":
|
|
380
|
+
"hash": "dbaf6e3da9820a933bd6b358e5dcce49057c7b34c7855d6f7f443833202f347a",
|
|
381
|
+
"size": 8307,
|
|
382
382
|
"type": "yaml"
|
|
383
383
|
},
|
|
384
384
|
"i18n/es.yaml": {
|
|
385
|
-
"hash": "
|
|
386
|
-
"size":
|
|
385
|
+
"hash": "047a14e7fa763179002c265f2df3bf0e9a407d5fc8b8fac0ff05ae92562f11eb",
|
|
386
|
+
"size": 8941,
|
|
387
387
|
"type": "yaml"
|
|
388
388
|
},
|
|
389
389
|
"i18n/fr.yaml": {
|
|
390
|
-
"hash": "
|
|
391
|
-
"size":
|
|
390
|
+
"hash": "8353e42d8124546109833a123143e905dbb976abe658259d3782aa5d1190d0b4",
|
|
391
|
+
"size": 9090,
|
|
392
392
|
"type": "yaml"
|
|
393
393
|
},
|
|
394
394
|
"i18n/pt.yaml": {
|
|
395
|
-
"hash": "
|
|
396
|
-
"size":
|
|
395
|
+
"hash": "9286764e634c88b1cf8f49f9239d48ff5a2bbef7fe207d61d69d70c501bdca8b",
|
|
396
|
+
"size": 8812,
|
|
397
397
|
"type": "yaml"
|
|
398
398
|
},
|
|
399
399
|
"intelligence/confidence.yaml": {
|
|
@@ -402,8 +402,8 @@
|
|
|
402
402
|
"type": "yaml"
|
|
403
403
|
},
|
|
404
404
|
"intelligence/context-engine.md": {
|
|
405
|
-
"hash": "
|
|
406
|
-
"size":
|
|
405
|
+
"hash": "1c2bfda6228a6352807d0a0fb2357a3771633e1d27e70465f0031784dfe83fde",
|
|
406
|
+
"size": 10065,
|
|
407
407
|
"type": "md"
|
|
408
408
|
},
|
|
409
409
|
"intelligence/decision-engine.md": {
|
|
@@ -462,8 +462,8 @@
|
|
|
462
462
|
"type": "yaml"
|
|
463
463
|
},
|
|
464
464
|
"orchestrator/chati-router.js": {
|
|
465
|
-
"hash": "
|
|
466
|
-
"size":
|
|
465
|
+
"hash": "a7d321ac7454ff762b251d81060da766668b8a1051b92cef6dea17fb092e606a",
|
|
466
|
+
"size": 22113,
|
|
467
467
|
"type": "js"
|
|
468
468
|
},
|
|
469
469
|
"orchestrator/chati-update.md": {
|
|
@@ -472,8 +472,8 @@
|
|
|
472
472
|
"type": "md"
|
|
473
473
|
},
|
|
474
474
|
"orchestrator/chati.md": {
|
|
475
|
-
"hash": "
|
|
476
|
-
"size":
|
|
475
|
+
"hash": "b64b1d2e1880f8de6cc80eca9fe42328f1f00a558e8bf03811b4433e883f1af8",
|
|
476
|
+
"size": 46098,
|
|
477
477
|
"type": "md"
|
|
478
478
|
},
|
|
479
479
|
"package.json": {
|
|
@@ -857,8 +857,8 @@
|
|
|
857
857
|
"type": "json"
|
|
858
858
|
},
|
|
859
859
|
"schemas/session.schema.json": {
|
|
860
|
-
"hash": "
|
|
861
|
-
"size":
|
|
860
|
+
"hash": "5d43e2cef2722f0bacd31326eab32040c9327469f1b520ecbe0e517940e0f754",
|
|
861
|
+
"size": 19183,
|
|
862
862
|
"type": "json"
|
|
863
863
|
},
|
|
864
864
|
"schemas/task.schema.json": {
|
|
@@ -1352,5 +1352,5 @@
|
|
|
1352
1352
|
"type": "yaml"
|
|
1353
1353
|
}
|
|
1354
1354
|
},
|
|
1355
|
-
"version": "4.5.
|
|
1355
|
+
"version": "4.5.15"
|
|
1356
1356
|
}
|
package/framework/manifest.sig
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
|
|
1
|
+
FzKXNObHfbT1CWViyyRa9aPZdEE7IldMN56uz1W0gaBxVA9wvd6bCOfBnYR+FxVlPpfT+XD/OqoCvKqBM6L5BQ==
|
|
@@ -2,16 +2,16 @@
|
|
|
2
2
|
/**
|
|
3
3
|
* chati-router.js — Deterministic Pipeline Router
|
|
4
4
|
*
|
|
5
|
-
* Runs
|
|
5
|
+
* Runs all deterministic logic before the active harness interprets output:
|
|
6
6
|
* 1. License validation + integrity check
|
|
7
7
|
* 2. Session state read
|
|
8
8
|
* 3. Pipeline routing (orchestrate next)
|
|
9
9
|
* 4. Team registration (orchestrate spawn-team) if needed
|
|
10
10
|
*
|
|
11
|
-
* Outputs a single JSON object
|
|
12
|
-
*
|
|
11
|
+
* Outputs a single JSON object consumed by the active harness. No harness can
|
|
12
|
+
* skip these steps because they already ran as code.
|
|
13
13
|
*
|
|
14
|
-
* Usage (from
|
|
14
|
+
* Usage (from any installed native profile):
|
|
15
15
|
* node chati.dev/orchestrator/chati-router.js
|
|
16
16
|
*/
|
|
17
17
|
|
|
@@ -193,7 +193,7 @@ async function findCliModule(projectDir) {
|
|
|
193
193
|
} catch { /* non-critical — proceed to candidates loop */ }
|
|
194
194
|
|
|
195
195
|
const candidates = [
|
|
196
|
-
//
|
|
196
|
+
// Preferred: bundled CLI inside framework dir (self-contained install, no npx needed)
|
|
197
197
|
join(projectDir, fwDir, '_cli', 'orchestrator', 'cli.js'),
|
|
198
198
|
// Fallback: node_modules inside .chati.dev/
|
|
199
199
|
join(projectDir, fwDir, 'node_modules', 'chati-dev', 'src', 'orchestrator', 'cli.js'),
|
|
@@ -314,6 +314,8 @@ const VALID_ORCHESTRATE_SUBS = new Set([
|
|
|
314
314
|
'wait-for-license', 'doctor', 'run-script-task',
|
|
315
315
|
]);
|
|
316
316
|
|
|
317
|
+
const VALID_RAIL_SUBS = new Set(['rail-next']);
|
|
318
|
+
|
|
317
319
|
/**
|
|
318
320
|
* Parse --flag value pairs and standalone --flag bools from argv.
|
|
319
321
|
*/
|
|
@@ -364,6 +366,32 @@ async function dispatchOrchestrate(subCommand, argv) {
|
|
|
364
366
|
}
|
|
365
367
|
}
|
|
366
368
|
|
|
369
|
+
/** Dispatch self-contained RAIL runtime commands from the installed bundle. */
|
|
370
|
+
async function dispatchRail(subCommand, argv) {
|
|
371
|
+
const fwDir = existsSync(join(PROJECT_DIR, '.chati.dev')) ? '.chati.dev' : 'chati.dev';
|
|
372
|
+
const runtimePath = join(PROJECT_DIR, fwDir, '_cli', 'orchestrator', 'rail-runtime.js');
|
|
373
|
+
if (!existsSync(runtimePath)) {
|
|
374
|
+
return {
|
|
375
|
+
ok: false,
|
|
376
|
+
action: 'error',
|
|
377
|
+
error: 'rail_runtime_not_found',
|
|
378
|
+
reason: 'Bundled RAIL runtime not found. Reinstall with: npx chati-dev upgrade',
|
|
379
|
+
};
|
|
380
|
+
}
|
|
381
|
+
|
|
382
|
+
const flags = parseFlagArgs(argv);
|
|
383
|
+
if (subCommand === 'rail-next') {
|
|
384
|
+
if (!flags['handoff-id']) return { ok: false, error: 'Missing --handoff-id' };
|
|
385
|
+
try {
|
|
386
|
+
const { selectReadyRailTasks } = await import(runtimePath);
|
|
387
|
+
return selectReadyRailTasks({ projectDir: PROJECT_DIR, handoff_id: flags['handoff-id'] });
|
|
388
|
+
} catch (error) {
|
|
389
|
+
return { ok: false, action: 'error', error: error.code || error.message };
|
|
390
|
+
}
|
|
391
|
+
}
|
|
392
|
+
return { ok: false, action: 'error', error: `Unsupported RAIL command: ${subCommand}` };
|
|
393
|
+
}
|
|
394
|
+
|
|
367
395
|
async function runSecurityPreflight(projectDir) {
|
|
368
396
|
const result = { ok: true, license: null, integrity: true, error: null };
|
|
369
397
|
try {
|
|
@@ -423,6 +451,12 @@ async function main() {
|
|
|
423
451
|
}
|
|
424
452
|
|
|
425
453
|
// Sub-command mode: `node chati-router.js <subcommand> [--flags...]`
|
|
454
|
+
if (subCommand && VALID_RAIL_SUBS.has(subCommand)) {
|
|
455
|
+
const result = await dispatchRail(subCommand, ROUTER_ARGS.slice(1));
|
|
456
|
+
console.log(JSON.stringify(result));
|
|
457
|
+
return;
|
|
458
|
+
}
|
|
459
|
+
|
|
426
460
|
// Routes to the local CLI for ANY orchestrate subcommand. No npx, no network.
|
|
427
461
|
if (subCommand && VALID_ORCHESTRATE_SUBS.has(subCommand)) {
|
|
428
462
|
if (subCommand === 'advance') {
|
|
@@ -500,7 +534,7 @@ async function main() {
|
|
|
500
534
|
}
|
|
501
535
|
|
|
502
536
|
// -----------------------------------------------------------------------
|
|
503
|
-
// 5. If spawn_team
|
|
537
|
+
// 5. If spawn_team, register it before the active harness consumes the result
|
|
504
538
|
// -----------------------------------------------------------------------
|
|
505
539
|
if (result.action === 'spawn_team' && result.pipeline) {
|
|
506
540
|
try {
|