chore: auto-commit (129 archivos)
- .claude/agents/fn-analizador/SKILL.md - .claude/agents/fn-constructor/SKILL.md - .claude/agents/fn-executor/SKILL.md - .claude/agents/fn-mejorador/SKILL.md - .claude/agents/fn-orquestador/SKILL.md - .claude/agents/fn-recopilador/SKILL.md - .claude/commands/app.md - .claude/commands/compile.md - .claude/commands/cpp-app.md - .claude/commands/create_functions.md - ... Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -36,9 +36,9 @@ file_path: "functions/infra/agent_cleanup_worktree.go"
|
||||
|
||||
```go
|
||||
err := infra.AgentCleanupWorktree(
|
||||
"/home/lucas/fn_registry",
|
||||
"$HOME/fn_registry",
|
||||
"auto/0115-worktree-launcher-fn",
|
||||
"/home/lucas/fn_registry/worktrees/0115-worktree-launcher-fn",
|
||||
"$HOME/fn_registry/worktrees/0115-worktree-launcher-fn",
|
||||
12345, // PID devuelto por AgentLaunchWorktree
|
||||
)
|
||||
if err != nil {
|
||||
|
||||
@@ -31,9 +31,9 @@ file_path: "functions/infra/agent_launch_worktree.go"
|
||||
|
||||
```go
|
||||
res := infra.AgentLaunchWorktree(infra.WorktreeLaunchConfig{
|
||||
RepoRoot: "/home/lucas/fn_registry",
|
||||
RepoRoot: "$HOME/fn_registry",
|
||||
Branch: "auto/0115-worktree-launcher-fn",
|
||||
WorktreePath: "/home/lucas/fn_registry/worktrees/0115-worktree-launcher-fn",
|
||||
WorktreePath: "$HOME/fn_registry/worktrees/0115-worktree-launcher-fn",
|
||||
Prompt: "Implement issue 0115 — worktree launcher Go function",
|
||||
LogPath: "/tmp/claude-0115.log",
|
||||
SkipPerms: true,
|
||||
@@ -44,7 +44,7 @@ if res.Error != "" {
|
||||
}
|
||||
fmt.Printf("claude PID=%d branch=%s log=%s\n", res.PID, res.Branch, res.LogPath)
|
||||
// ... agente trabaja ...
|
||||
infra.AgentCleanupWorktree(res.WorktreePath, res.Branch, "/home/lucas/fn_registry", res.PID)
|
||||
infra.AgentCleanupWorktree(res.WorktreePath, res.Branch, "$HOME/fn_registry", res.PID)
|
||||
```
|
||||
|
||||
## Cuando usarla
|
||||
|
||||
@@ -29,7 +29,7 @@ file_path: "functions/infra/artefact_doctor.go"
|
||||
## Ejemplo
|
||||
|
||||
```go
|
||||
checks, err := ArtefactDoctor("/home/lucas/fn_registry")
|
||||
checks, err := ArtefactDoctor("$HOME/fn_registry")
|
||||
if err != nil {
|
||||
log.Fatal(err)
|
||||
}
|
||||
|
||||
@@ -26,7 +26,7 @@ test_file_path: ""
|
||||
file_path: "functions/infra/audit_app_drift.go"
|
||||
params:
|
||||
- name: registryRoot
|
||||
desc: "Ruta absoluta a la raiz del fn_registry (ej. /home/lucas/fn_registry). Se buscan modules/*/module.md, apps/*/app.md, projects/*/apps/*/app.md y cpp/build/{linux,windows}/apps/<name>/."
|
||||
desc: "Ruta absoluta a la raiz del fn_registry (ej. $HOME/fn_registry). Se buscan modules/*/module.md, apps/*/app.md, projects/*/apps/*/app.md y cpp/build/{linux,windows}/apps/<name>/."
|
||||
- name: windowsDeployRoot
|
||||
desc: "Ruta absoluta donde se despliegan los .exe de Windows (ej. /mnt/c/Users/lucas/Desktop/apps). Si vacio, se omite la inspeccion del binario desplegado y solo se usan los artefactos bajo cpp/build."
|
||||
output: "Slice de AppDriftEntry, uno por app C++ encontrada. Status: 'ok' (todas las versiones coinciden), 'drift' (al menos un modulo tiene version distinta), 'no-build' (no se encontro ningun artefacto compilado). Campo Stale lista los nombres de modulos con drift."
|
||||
@@ -45,7 +45,7 @@ Detecta apps C++ cuyos binarios/artefactos enlazan una version de modulo inferio
|
||||
## Ejemplo
|
||||
|
||||
```go
|
||||
entries, err := infra.AuditAppDrift("/home/lucas/fn_registry", "/mnt/c/Users/lucas/Desktop/apps")
|
||||
entries, err := infra.AuditAppDrift("$HOME/fn_registry", "/mnt/c/Users/lucas/Desktop/apps")
|
||||
if err != nil {
|
||||
log.Fatal(err)
|
||||
}
|
||||
|
||||
@@ -30,7 +30,7 @@ file_path: "functions/infra/audit_app_location.go"
|
||||
## Ejemplo
|
||||
|
||||
```go
|
||||
violations, err := AuditAppLocation("/home/lucas/fn_registry")
|
||||
violations, err := AuditAppLocation("$HOME/fn_registry")
|
||||
if err != nil {
|
||||
log.Fatal(err)
|
||||
}
|
||||
|
||||
@@ -59,7 +59,7 @@ type CapabilityGroupAudit struct {
|
||||
## Ejemplo
|
||||
|
||||
```go
|
||||
audits, err := AuditCapabilityGroups("/home/lucas/fn_registry")
|
||||
audits, err := AuditCapabilityGroups("$HOME/fn_registry")
|
||||
if err != nil {
|
||||
log.Fatal(err)
|
||||
}
|
||||
|
||||
@@ -28,7 +28,7 @@ imports:
|
||||
example: |
|
||||
import "fn-registry/functions/infra"
|
||||
|
||||
entries, err := infra.AuditCopiedCode("/home/lucas/fn_registry")
|
||||
entries, err := infra.AuditCopiedCode("$HOME/fn_registry")
|
||||
if err != nil { ... }
|
||||
for _, e := range entries {
|
||||
fmt.Printf("%s:%s ~ %s (%s, %.2f)\n",
|
||||
|
||||
@@ -27,7 +27,7 @@ file_path: "functions/infra/audit_cpp_apps.go"
|
||||
## Ejemplo
|
||||
|
||||
```go
|
||||
audits, err := infra.AuditCppApps("/home/lucas/fn_registry")
|
||||
audits, err := infra.AuditCppApps("$HOME/fn_registry")
|
||||
if err != nil { log.Fatal(err) }
|
||||
for _, a := range audits {
|
||||
if !a.OK {
|
||||
|
||||
@@ -29,7 +29,7 @@ output: "Slice de DataTableUsageEntry, uno por app C++ con uses_modules: [data_t
|
||||
```go
|
||||
import "fn-registry/functions/infra"
|
||||
|
||||
entries, err := infra.AuditDataTableUsage("/home/lucas/fn_registry")
|
||||
entries, err := infra.AuditDataTableUsage("$HOME/fn_registry")
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
|
||||
@@ -36,8 +36,8 @@ file_path: "functions/infra/audit_dod_schema.go"
|
||||
|
||||
```go
|
||||
report, err := infra.AuditDodSchema(
|
||||
"/home/lucas/fn_registry/dev/issues",
|
||||
"/home/lucas/fn_registry/dev/flows",
|
||||
"$HOME/fn_registry/dev/issues",
|
||||
"$HOME/fn_registry/dev/flows",
|
||||
)
|
||||
if err != nil {
|
||||
log.Fatal(err)
|
||||
|
||||
@@ -47,7 +47,7 @@ output: "MlEnvReport con Gpus (puede estar vacio si no hay NVIDIA), Checks con e
|
||||
## Ejemplo
|
||||
|
||||
```go
|
||||
root := "/home/lucas/fn_registry"
|
||||
root := "$HOME/fn_registry"
|
||||
report, err := AuditMlEnv(root)
|
||||
if err != nil {
|
||||
log.Fatal(err)
|
||||
|
||||
@@ -27,7 +27,7 @@ output: "Slice de ModuleDriftCheck (uno por app C++ con CMakeLists.txt). Apps si
|
||||
```go
|
||||
import "fn-registry/functions/infra"
|
||||
|
||||
checks, err := infra.AuditModulesDrift("/home/lucas/fn_registry")
|
||||
checks, err := infra.AuditModulesDrift("$HOME/fn_registry")
|
||||
if err != nil { panic(err) }
|
||||
for _, c := range checks {
|
||||
if !c.OK {
|
||||
|
||||
@@ -37,7 +37,7 @@ Reporta apps con tag `service` cuya `service:` block esta incompleta.
|
||||
## Ejemplo
|
||||
|
||||
```go
|
||||
audits, err := infra.AuditServicesSpec("/home/lucas/fn_registry")
|
||||
audits, err := infra.AuditServicesSpec("$HOME/fn_registry")
|
||||
for _, a := range audits {
|
||||
if !a.OK {
|
||||
fmt.Println(a.AppID, "issues:", a.Issues)
|
||||
|
||||
@@ -30,7 +30,7 @@ file_path: "functions/infra/audit_uses_functions.go"
|
||||
## Ejemplo
|
||||
|
||||
```go
|
||||
results, err := AuditUsesFunctions("/home/lucas/fn_registry")
|
||||
results, err := AuditUsesFunctions("$HOME/fn_registry")
|
||||
if err != nil {
|
||||
log.Fatal(err)
|
||||
}
|
||||
|
||||
@@ -36,7 +36,7 @@ file_path: "functions/infra/find_unused_functions.go"
|
||||
## Ejemplo
|
||||
|
||||
```go
|
||||
unused, err := FindUnusedFunctions("/home/lucas/fn_registry")
|
||||
unused, err := FindUnusedFunctions("$HOME/fn_registry")
|
||||
if err != nil {
|
||||
log.Fatal(err)
|
||||
}
|
||||
|
||||
@@ -28,9 +28,9 @@ imports:
|
||||
example: |
|
||||
import "fn-registry/functions/infra"
|
||||
|
||||
drafts, err := infra.GenerateProposalsFromTelemetry("/home/lucas/fn_registry")
|
||||
drafts, err := infra.GenerateProposalsFromTelemetry("$HOME/fn_registry")
|
||||
if err != nil { ... }
|
||||
inserted, total, err := infra.PersistProposalDrafts("/home/lucas/fn_registry", drafts)
|
||||
inserted, total, err := infra.PersistProposalDrafts("$HOME/fn_registry", drafts)
|
||||
fmt.Printf("%d/%d proposals nuevas\n", inserted, total)
|
||||
file_path: "functions/infra/generate_proposals_from_telemetry.go"
|
||||
tested: false
|
||||
|
||||
@@ -40,7 +40,7 @@ output: "Slice de LocationDrift con todos los discrepancias encontradas. Vacio s
|
||||
## Ejemplo
|
||||
|
||||
```go
|
||||
drifts, err := PcLocationsDrift("/home/lucas/fn_registry", "")
|
||||
drifts, err := PcLocationsDrift("$HOME/fn_registry", "")
|
||||
if err != nil {
|
||||
log.Fatal(err)
|
||||
}
|
||||
|
||||
@@ -40,7 +40,7 @@ output: "Lista de IDs de proposals creados (formato 'prop_<16hexchars>'). Error
|
||||
```go
|
||||
results, _ := infra.E2ERunChecks(checks, "/opt/apps/myapp")
|
||||
propIDs, err := infra.ProposalFromFailure(
|
||||
"/home/lucas/fn_registry/registry.db",
|
||||
"$HOME/fn_registry/registry.db",
|
||||
"my_app",
|
||||
results,
|
||||
"exec_20260509_001",
|
||||
|
||||
@@ -31,7 +31,7 @@ file_path: "functions/infra/scan_flows_dir.go"
|
||||
## Ejemplo
|
||||
|
||||
```go
|
||||
flows, err := infra.ScanFlowsDir("/home/lucas/fn_registry/dev/flows")
|
||||
flows, err := infra.ScanFlowsDir("$HOME/fn_registry/dev/flows")
|
||||
if err != nil {
|
||||
log.Fatal(err)
|
||||
}
|
||||
|
||||
@@ -32,7 +32,7 @@ file_path: "functions/infra/scan_issues_dir.go"
|
||||
## Ejemplo
|
||||
|
||||
```go
|
||||
issues, err := infra.ScanIssuesDir("/home/lucas/fn_registry/dev/issues")
|
||||
issues, err := infra.ScanIssuesDir("$HOME/fn_registry/dev/issues")
|
||||
if err != nil {
|
||||
log.Fatal(err)
|
||||
}
|
||||
|
||||
@@ -38,7 +38,7 @@ output: "Slice de ServiceStatus con estado systemd, puerto y pc_id por cada app
|
||||
## Ejemplo
|
||||
|
||||
```go
|
||||
statuses, err := ServicesStatus("/home/lucas/fn_registry")
|
||||
statuses, err := ServicesStatus("$HOME/fn_registry")
|
||||
if err != nil {
|
||||
log.Fatal(err)
|
||||
}
|
||||
|
||||
@@ -40,7 +40,7 @@ output: "AggregateReport con VaultsProcessed, VaultsSkipped (sin vault_index.db)
|
||||
## Ejemplo
|
||||
|
||||
```go
|
||||
report, err := infra.VaultAggregateIndex("/home/lucas/fn_registry")
|
||||
report, err := infra.VaultAggregateIndex("$HOME/fn_registry")
|
||||
if err != nil {
|
||||
log.Fatal(err)
|
||||
}
|
||||
|
||||
@@ -51,7 +51,7 @@ output: "Slice de VaultDoctorEntry con Status (ok/warning/error), Issues, DiskFi
|
||||
## Ejemplo
|
||||
|
||||
```go
|
||||
entries, err := infra.VaultDoctor("/home/lucas/fn_registry")
|
||||
entries, err := infra.VaultDoctor("$HOME/fn_registry")
|
||||
for _, e := range entries {
|
||||
fmt.Printf("%-30s %-8s files=%d issues=%v\n",
|
||||
e.VaultName, e.Status, e.DiskFiles, e.Issues)
|
||||
|
||||
@@ -35,7 +35,7 @@ file_path: "functions/infra/vault_manifest_read.go"
|
||||
## Ejemplo
|
||||
|
||||
```go
|
||||
entries, err := VaultManifestRead("/home/lucas/fn_registry")
|
||||
entries, err := VaultManifestRead("$HOME/fn_registry")
|
||||
if err != nil {
|
||||
log.Fatal(err)
|
||||
}
|
||||
|
||||
@@ -36,7 +36,7 @@ file_path: "functions/infra/watch_dir_fsnotify.go"
|
||||
ctx, cancel := context.WithCancel(context.Background())
|
||||
defer cancel()
|
||||
|
||||
ch, err := infra.WatchDirFsnotify(ctx, "/home/lucas/fn_registry/dev/issues")
|
||||
ch, err := infra.WatchDirFsnotify(ctx, "$HOME/fn_registry/dev/issues")
|
||||
if err != nil {
|
||||
log.Fatal(err)
|
||||
}
|
||||
|
||||
@@ -42,7 +42,7 @@ go run functions/pipelines/init_metabase/main.go \
|
||||
# Con volume para registry.db (detecta cambios en vivo)
|
||||
go run functions/pipelines/init_metabase/main.go \
|
||||
--project fn_registry \
|
||||
--mb-volumes "/home/lucas/fn_registry/registry.db:/data/registry.db"
|
||||
--mb-volumes "$HOME/fn_registry/registry.db:/data/registry.db"
|
||||
```
|
||||
|
||||
Salida JSON:
|
||||
|
||||
@@ -34,7 +34,7 @@ file_path: "apps/pipeline_launcher/main.go"
|
||||
## Ejemplo
|
||||
|
||||
```bash
|
||||
FN_REGISTRY_ROOT=/home/lucas/fn_registry go run apps/pipeline_launcher/main.go
|
||||
FN_REGISTRY_ROOT=$HOME/fn_registry go run apps/pipeline_launcher/main.go
|
||||
```
|
||||
|
||||
## Notas
|
||||
|
||||
Reference in New Issue
Block a user