@ornexus/neocortex 4.60.44 → 4.60.46

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (36) hide show
  1. package/dist/sbom.cdx.json +23 -23
  2. package/install.js +16 -1
  3. package/install.ps1 +57 -401
  4. package/install.sh +30 -37
  5. package/package.json +2 -2
  6. package/packages/client/dist/commands/invoke.d.ts +9 -0
  7. package/packages/client/dist/commands/invoke.js +50 -47
  8. package/packages/client/dist/runner/headless/run-yolo.js +1 -1
  9. package/packages/client/dist/runner/headless/run-yoloop.d.ts +9 -0
  10. package/packages/client/dist/runner/headless/run-yoloop.js +2 -2
  11. package/packages/client/dist/state/project-state-snapshot.js +1 -1
  12. package/packages/client/dist/yoloop/index.d.ts +1 -1
  13. package/packages/client/dist/yoloop/invoke-hooks.d.ts +23 -6
  14. package/packages/client/dist/yoloop/invoke-hooks.js +11 -8
  15. package/packages/client/dist/yoloop/shared-yoloop-types.d.ts +61 -0
  16. package/packages/client/dist/yoloop/yoloop-client-state-store.d.ts +23 -0
  17. package/packages/client/dist/yoloop/yoloop-client-state-store.js +1 -1
  18. package/packages/shared/dist/invocation/index.js +9 -2
  19. package/targets-stubs/antigravity/gemini.md +1 -1
  20. package/targets-stubs/antigravity/install-antigravity.sh +10 -101
  21. package/targets-stubs/antigravity/skill/SKILL.md +1 -1
  22. package/targets-stubs/claude-code/neocortex-root.agent.yaml +1 -1
  23. package/targets-stubs/claude-code/neocortex-root.md +2 -2
  24. package/targets-stubs/claude-code/neocortex.agent.yaml +1 -1
  25. package/targets-stubs/claude-code/neocortex.md +2 -2
  26. package/targets-stubs/codex/AGENTS.md +1 -1
  27. package/targets-stubs/codex/install-codex.sh +4 -1
  28. package/targets-stubs/cursor/agent.md +2 -2
  29. package/targets-stubs/cursor/install-cursor.sh +4 -1
  30. package/targets-stubs/gemini-cli/agent.md +2 -2
  31. package/targets-stubs/gemini-cli/install-gemini.sh +4 -1
  32. package/targets-stubs/grok/install-grok.sh +4 -1
  33. package/targets-stubs/lib/mcp-merge.js +220 -20
  34. package/targets-stubs/opencode/neocortex-root.md +1 -1
  35. package/targets-stubs/vscode/install-vscode.sh +4 -1
  36. package/targets-stubs/vscode/neocortex.agent.md +2 -2
package/install.sh CHANGED
@@ -4,7 +4,7 @@
4
4
  # Development Orchestrator
5
5
 
6
6
  # Versao do instalador
7
- VERSION="4.60.44"
7
+ VERSION="4.60.46"
8
8
 
9
9
  # Flags
10
10
  MIGRATION_DETECTED=false
@@ -1115,36 +1115,8 @@ install_core() {
1115
1115
  # =============================================================================
1116
1116
 
1117
1117
  install_skills() {
1118
- local errors=0
1119
-
1120
- SKILLS_DIR="${CLAUDE_DIR}/skills"
1121
- SKILLS_DEST="${SKILLS_DIR}/neocortex"
1122
- SKILLS_SOURCE="${SOURCE_DIR}/core/skills"
1123
-
1124
- # Thin-client: skills delivered by remote server, never copied
1125
1118
  ok "Skills: delivered by remote server"
1126
1119
  return 0
1127
-
1128
- mkdir -p "$SKILLS_DIR" 2>/dev/null || { fail "Falha ao criar $SKILLS_DIR"; return 1; }
1129
-
1130
- # Clean previous
1131
- [ -d "$SKILLS_DEST" ] && rm -rf "$SKILLS_DEST" 2>/dev/null
1132
-
1133
- if cp -r "$SKILLS_SOURCE" "$SKILLS_DEST" 2>/dev/null; then
1134
- # Count skills
1135
- local skill_count=0
1136
- for skill_file in "$SKILLS_DEST"/step-skills/*/*.md "$SKILLS_DEST"/domain-skills/*/*.md; do
1137
- if [ -f "$skill_file" ] && [[ "$(basename "$skill_file")" != "_template.md" ]]; then
1138
- ((skill_count++))
1139
- fi
1140
- done
1141
- ok "Skills instaladas ${DIM}($skill_count skills) [modo local]${NC}"
1142
- else
1143
- fail "Falha ao copiar skills"
1144
- ((errors++))
1145
- fi
1146
-
1147
- return $errors
1148
1120
  }
1149
1121
 
1150
1122
  # =============================================================================
@@ -1224,7 +1196,12 @@ install_targets() {
1224
1196
  if managed_copy_file "$opencode_target/neocortex.md" "$opencode_home/agents/neocortex.md" "profile-opencode-neocortex" "$HOME" && \
1225
1197
  managed_copy_file "$opencode_target/neocortex-root.md" "$opencode_home/agents/neocortex-root.md" "profile-opencode-neocortex-root" "$HOME"; then
1226
1198
  if [ -f "$opencode_target/opencode-mcp.json" ] && command -v node >/dev/null 2>&1; then
1227
- node "$SOURCE_DIR/targets-stubs/lib/mcp-merge.js" json "$opencode_target/opencode-mcp.json" "$opencode_home/opencode.json" mcp OPENCODE || true
1199
+ if ! node "$SOURCE_DIR/targets-stubs/lib/mcp-merge.js" json "$opencode_target/opencode-mcp.json" "$opencode_home/opencode.json" mcp OPENCODE; then
1200
+ target_results+=("$target:FAIL")
1201
+ ((target_errors++))
1202
+ warn "opencode ${DIM}(MCP semantic merge bloqueado; config preservada)${NC}"
1203
+ continue
1204
+ fi
1228
1205
  fi
1229
1206
  target_results+=("$target:OK")
1230
1207
  ((target_count++))
@@ -1254,7 +1231,10 @@ install_targets() {
1254
1231
  managed_copy_file "$kimi_target/neocortex.md" "$kimi_code_home/agents/neocortex.md" "profile-kimi-neocortex" "$kimi_code_home" || kimi_ok=1
1255
1232
  managed_copy_file "$kimi_target/neocortex.md" "$HOME/.agents/agents/neocortex.md" "profile-kimi-shared-agent" "$HOME" || kimi_ok=1
1256
1233
  if [ -f "$kimi_target/mcp.json" ] && command -v node >/dev/null 2>&1; then
1257
- node "$SOURCE_DIR/targets-stubs/lib/mcp-merge.js" json "$kimi_target/mcp.json" "$kimi_home/mcp.json" mcpServers KIMI || true
1234
+ if ! node "$SOURCE_DIR/targets-stubs/lib/mcp-merge.js" json "$kimi_target/mcp.json" "$kimi_home/mcp.json" mcpServers KIMI; then
1235
+ kimi_ok=1
1236
+ warn "kimi ${DIM}(MCP semantic merge bloqueado; config preservada)${NC}"
1237
+ fi
1258
1238
  fi
1259
1239
  if [ $kimi_ok -eq 0 ]; then
1260
1240
  target_results+=("$target:OK")
@@ -1763,12 +1743,6 @@ create_project_dirs() {
1763
1743
  "$project_dir/docs/epics" \
1764
1744
  "$project_dir/docs/proposals" 2>/dev/null
1765
1745
 
1766
- # Copy state template if needed
1767
- if [ ! -f "$project_dir/.neocortex/state.json" ]; then
1768
- [ -f "$SOURCE_DIR/core/data/state-template.json" ] && \
1769
- cp "$SOURCE_DIR/core/data/state-template.json" "$project_dir/.neocortex/state.json"
1770
- fi
1771
-
1772
1746
  # Thin-client: never copy core/ to project
1773
1747
 
1774
1748
  # Install target-specific files
@@ -1980,6 +1954,25 @@ main() {
1980
1954
  SELECTED_TARGETS="claude-code"
1981
1955
  fi
1982
1956
 
1957
+ # Stable semantic canonicalization: aliases and duplicates must never
1958
+ # install the same global MCP surface twice.
1959
+ local canonical_targets=""
1960
+ local seen_targets=" "
1961
+ local -a requested_targets
1962
+ local requested_target canonical_target
1963
+ IFS=',' read -r -a requested_targets <<< "$SELECTED_TARGETS"
1964
+ for requested_target in "${requested_targets[@]}"; do
1965
+ requested_target="$(printf '%s' "$requested_target" | xargs)"
1966
+ [ "$requested_target" = "gemini-cli" ] && canonical_target="gemini" || canonical_target="$requested_target"
1967
+ [ -z "$canonical_target" ] && continue
1968
+ case "$seen_targets" in
1969
+ *" $canonical_target "*) continue ;;
1970
+ esac
1971
+ seen_targets="$seen_targets$canonical_target "
1972
+ [ -z "$canonical_targets" ] && canonical_targets="$canonical_target" || canonical_targets="$canonical_targets,$canonical_target"
1973
+ done
1974
+ SELECTED_TARGETS="$canonical_targets"
1975
+
1983
1976
  debug "Targets: $SELECTED_TARGETS"
1984
1977
 
1985
1978
  # Read user tier for platform gating
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@ornexus/neocortex",
3
- "version": "4.60.44",
4
- "description": "Neocortex v4.60.44 - Orquestrador de Desenvolvimento de Epics & Stories para Claude Code",
3
+ "version": "4.60.46",
4
+ "description": "Neocortex v4.60.46 - Orquestrador de Desenvolvimento de Epics & Stories para Claude Code",
5
5
  "keywords": [
6
6
  "claude",
7
7
  "claude-code",
@@ -276,6 +276,14 @@ export type StateSnapshotScopeKind = 'full' | 'projected';
276
276
  export type StateSnapshotCommandPolicy = 'full' | 'story-targeted' | 'epic-targeted' | 'yoloop-targeted' | 'epic-summary' | 'continuity-scoped' | 'adaptive-targeted' | (string & {});
277
277
  export type StateSnapshotProjectionMode = 'full-compatible' | 'summary-only' | 'targeted-story' | 'targeted-epic' | 'structural-required' | (string & {});
278
278
  export type StateSnapshotProjectionReason = 'full-state' | 'targeted-invocation' | 'summary-only' | 'epic-summary' | 'body-size' | 'context-cost' | 'unknown' | (string & {});
279
+ export interface TargetEpicCoverageV1 {
280
+ readonly schemaVersion: 'TargetEpicCoverage/1.0';
281
+ readonly targetEpicId: string;
282
+ readonly declaredStoryIds: readonly string[];
283
+ readonly includedStoryIds: readonly string[];
284
+ readonly membershipSha256: string;
285
+ readonly publicSafe: true;
286
+ }
279
287
  interface StateSnapshotScopeBase {
280
288
  readonly kind: StateSnapshotScopeKind;
281
289
  readonly commandId?: string | null;
@@ -284,6 +292,7 @@ interface StateSnapshotScopeBase {
284
292
  readonly trigger?: string;
285
293
  readonly targetEpicId?: string | null;
286
294
  readonly targetStoryId?: string | null;
295
+ readonly targetEpicCoverage?: TargetEpicCoverageV1;
287
296
  readonly includedStoryCount: number;
288
297
  readonly includedEpicCount?: number;
289
298
  readonly omittedStoryCount: number;