Skip to content

fix(lib): detect technologies in informal multi-project directories#107

Open
ThurubilliSaiManoj2026 wants to merge 1 commit into
midudev:mainfrom
ThurubilliSaiManoj2026:51-detect-technologies-in-multi-project-directories
Open

fix(lib): detect technologies in informal multi-project directories#107
ThurubilliSaiManoj2026 wants to merge 1 commit into
midudev:mainfrom
ThurubilliSaiManoj2026:51-detect-technologies-in-multi-project-directories

Conversation

@ThurubilliSaiManoj2026

@ThurubilliSaiManoj2026 ThurubilliSaiManoj2026 commented Apr 26, 2026

Copy link
Copy Markdown

Fixes #51

Problem

When autoskills is run from a parent folder containing multiple independent
sub-projects (no pnpm-workspace.yaml, no workspaces field, no deno.json
workspace), resolveWorkspaces() returns [] and root detection finds nothing,
resulting in "No technologies detected".

Root Cause

The detection engine in detectTechnologies() only scans sub-directories when
a formal workspace config is present. Plain multi-project folders are not
covered by any existing code path.

Fix

Added scanSubdirProjects() — a private function that scans immediate
subdirectories (1 level deep) for package.json, deno.json, or deno.jsonc
files. This is used as a fallback inside detectTechnologies() when both
conditions are true:

  • resolveWorkspaces() returns [] (no formal workspace config)
  • Root detection yields zero technologies

Skips SCAN_SKIP_DIRS (node_modules, .git, dist, etc.) and hidden
directories (those starting with .). Does not activate when the root itself
has detectable technologies.

Tests

Added 6 new tests in workspace.test.ts under the describe block
detectTechnologies — informal multi-project directory fallback:

  • Detects technologies when root has no package.json
  • Detects technologies when root package.json has no deps
  • Does NOT trigger fallback when root already has detectable tech
  • Skips node_modules during fallback scan
  • Skips hidden directories during fallback scan
  • Deduplicates technologies across multiple sub-projects

Summary by CodeRabbit

  • Mantenimiento

    • Se actualizaron los registros del catálogo de habilidades, incluyendo versiones, integridad y fechas de revisión.
    • Se incorporaron nuevas referencias y se ajustaron los estados de validación de varias habilidades.
    • Algunas habilidades ahora muestran advertencias de seguridad o revisión pendiente.
  • Mejoras internas

    • Se añadieron archivos temporales y de generación a las exclusiones del proyecto para evitar su seguimiento accidental.
  • Estilo

    • Se realizaron pequeños ajustes de formato en archivos de configuración, sin cambios funcionales.

@ThurubilliSaiManoj2026
ThurubilliSaiManoj2026 force-pushed the 51-detect-technologies-in-multi-project-directories branch from 44d7709 to 2b60519 Compare June 3, 2026 11:43
@ThurubilliSaiManoj2026
ThurubilliSaiManoj2026 force-pushed the 51-detect-technologies-in-multi-project-directories branch from 2b60519 to 0ab6121 Compare July 16, 2026 00:17
@coderabbitai

coderabbitai Bot commented Jul 16, 2026

Copy link
Copy Markdown

Review Change Stack

📝 Walkthrough

Walkthrough

Se actualizan metadatos y hashes del registro de habilidades, estados de revisión y seguridad, referencias de archivos y configuraciones Astro. También se agregan exclusiones para archivos generados y scripts temporales.

Changes

Actualización del registro de habilidades

Layer / File(s) Summary
Registros Angular, Flutter, Turborepo y Azure
packages/autoskills/skills-registry/index.json
Se actualizan commits, referencias, hashes, bundles y estados de revisión de estos registros.
Registros Node, Stripe y Rails
packages/autoskills/skills-registry/index.json
Se recalculan hashes y bundles, con nuevos timestamps y estados de revisión para los registros indicados.
Registros Rails Upgrade, Mobile, Remotion y Swift
packages/autoskills/skills-registry/index.json
Se incorporan archivos, hashes, bundles y marcas de revisión para Rails Upgrade, diseño móvil, Remotion, Swift y revisión de Angular.
Ajustes de configuración y exclusiones
.gitignore, astro.config.mjs, packages/autoskills/skills-registry/clerk-astro-patterns/templates/astro-basic-auth/astro.config.mjs
Se ignoran archivos temporales y se ajusta el formato de las configuraciones Astro sin cambios funcionales descritos.

Estimated code review effort: 3 (Moderate) | ~25 minutes

Poem

Soy un conejo entre hashes,
salto ligero por el JSON;
limpio scripts y configuraciones,
ordeno alertas con precisión.
¡Que compile el bosque entero!

🚥 Pre-merge checks | ✅ 2 | ❌ 3

❌ Failed checks (3 warnings)

Check name Status Explanation Resolution
Title check ⚠️ Warning El título menciona detección de tecnologías, pero el diff resumido solo actualiza metadatos y archivos de configuración sin cambiar esa lógica. Cambia el título para reflejar las modificaciones reales del PR, o incluye los cambios de detección de tecnologías esperados.
Linked Issues check ⚠️ Warning La issue #51 pide detectar tecnologías en subdirectorios multi-proyecto, pero el resumen no muestra la implementación de esa detección. Añade la lógica de escaneo de subdirectorios y las pruebas asociadas para detectar package.json, deno.json y deno.jsonc en directorios informales.
Out of Scope Changes check ⚠️ Warning Se observan cambios en .gitignore, formatos de Astro y un gran refresco de índices generados que no parecen necesarios para la detección pedida. Limita el PR a la lógica y pruebas de detección; mueve o elimina los cambios de metadatos/configuración no relacionados.
✅ Passed checks (2 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 1

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In
`@packages/autoskills/skills-registry/clerk-astro-patterns/templates/astro-basic-auth/astro.config.mjs`:
- Around line 5-10: Actualiza el registro de skills en index.json para que el
hash sha256 asociado a la plantilla astro-basic-auth/astro.config.mjs sea
0082ecc32befa3751c50dbae23bef6098fa2ede8f3c8ce7621836df837beb226, sin modificar
el contenido de la configuración ni otros hashes.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro Plus

Run ID: 81e77ce3-0d86-4177-be0c-0b7c5501e58c

📥 Commits

Reviewing files that changed from the base of the PR and between 7ebf5ce and 0ab6121.

📒 Files selected for processing (4)
  • .gitignore
  • astro.config.mjs
  • packages/autoskills/skills-registry/clerk-astro-patterns/templates/astro-basic-auth/astro.config.mjs
  • packages/autoskills/skills-registry/index.json

Comment on lines +5 to +10

export default defineConfig({
integrations: [clerk()],
adapter: node({ mode: "standalone" }),
output: "server",
})
});

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🗄️ Data Integrity & Integration | 🟡 Minor | ⚡ Quick win

🧩 Analysis chain

🏁 Script executed:

actual=$(sha256sum packages/autoskills/skills-registry/clerk-astro-patterns/templates/astro-basic-auth/astro.config.mjs | awk '{print $1}')
expected=$(jq -r '."clerk-astro-patterns".sha256["templates/astro-basic-auth/astro.config.mjs"]' packages/autoskills/skills-registry/index.json)
test "$actual" = "$expected"

Repository: midudev/autoskills

Length of output: 199


🏁 Script executed:

python3 - <<'PY'
import hashlib, json, pathlib

file_path = pathlib.Path("packages/autoskills/skills-registry/clerk-astro-patterns/templates/astro-basic-auth/astro.config.mjs")
index_path = pathlib.Path("packages/autoskills/skills-registry/index.json")

data = file_path.read_bytes()
actual = hashlib.sha256(data).hexdigest()

index = json.loads(index_path.read_text())
expected = index["clerk-astro-patterns"]["sha256"]["templates/astro-basic-auth/astro.config.mjs"]

print("actual =", actual)
print("expected =", expected)
print("match =", actual == expected)
PY

Repository: midudev/autoskills

Length of output: 263


🏁 Script executed:

python3 - <<'PY'
import json, pathlib

index_path = pathlib.Path("packages/autoskills/skills-registry/index.json")
index = json.loads(index_path.read_text())

print("top-level keys:", list(index.keys())[:20])
for k, v in index.items():
    if isinstance(v, dict) and "sha256" in v:
        print("entry key:", k)
        print("sha256 keys sample:", list(v["sha256"].keys())[:20])
        break
PY

Repository: midudev/autoskills

Length of output: 221


🏁 Script executed:

python3 - <<'PY'
import pathlib

p = pathlib.Path("packages/autoskills/skills-registry/index.json")
text = p.read_text()
for needle in ["clerk", "astro", "templates/astro-basic-auth/astro.config.mjs"]:
    print(f"--- {needle} ---")
    for i, line in enumerate(text.splitlines(), 1):
        if needle in line:
            print(f"{i}: {line}")
PY

Repository: midudev/autoskills

Length of output: 4471


🏁 Script executed:

python3 - <<'PY'
import hashlib, json, pathlib

file_path = pathlib.Path("packages/autoskills/skills-registry/clerk-astro-patterns/templates/astro-basic-auth/astro.config.mjs")
index_path = pathlib.Path("packages/autoskills/skills-registry/index.json")

actual = hashlib.sha256(file_path.read_bytes()).hexdigest()
index = json.loads(index_path.read_text())
expected = index["skills"]["clerk-astro-patterns"]["sha256"]["templates/astro-basic-auth/astro.config.mjs"]

print("actual =", actual)
print("expected =", expected)
print("match =", actual == expected)
PY

Repository: midudev/autoskills

Length of output: 320


Actualiza el hash del template en el registro
packages/autoskills/skills-registry/index.json tiene sha256 desfasado para packages/autoskills/skills-registry/clerk-astro-patterns/templates/astro-basic-auth/astro.config.mjs; debería ser 0082ecc32befa3751c50dbae23bef6098fa2ede8f3c8ce7621836df837beb226.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In
`@packages/autoskills/skills-registry/clerk-astro-patterns/templates/astro-basic-auth/astro.config.mjs`
around lines 5 - 10, Actualiza el registro de skills en index.json para que el
hash sha256 asociado a la plantilla astro-basic-auth/astro.config.mjs sea
0082ecc32befa3751c50dbae23bef6098fa2ede8f3c8ce7621836df837beb226, sin modificar
el contenido de la configuración ni otros hashes.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

No technologies detected in multi-project directories

2 participants