Registro público
Informe de salud del softwareesquema 0.25.0 · métricas 1.13.0 · 2026-07-21 22:45 UTC

CHNAICORP / cortx

Cortx — AI Agent runtime | Harness Agent + Agentic Loop | 43 tools | Python + TypeScript

Python · TypeScriptMIT★ 0 estrellas⑂ 0 forksdesde jul 2026Ver en GitHub ↗

CHNAICORP/cortx tiene un índice de salud de 46 sobre 100, lo que lo sitúa en la banda En riesgo. Su puntuación más alta es Vitality (67/100) y la más baja, Security (26/100). Se actualizó por última vez hace 4 días.

46
global / 100
En riesgo

Índice de salud del software

Las métricas se agrupan en categorías ponderadas sobre una escala de 1 a 100. El resultado global parte de su media; cuando la evidencia pública activa la Política de Jurisdicciones de Alto Riesgo, la calificación se ajusta y recibe el límite 49 (En riesgo). Preparación para IA queda fuera.

46
Excelente85-100Ejemplar; cumple prácticamente todos los criterios evaluados
Bueno70-84Saludable; carencias menores
Moderado50-69Aceptable con carencias notables; se recomienda revisión
En riesgo30-49Debilidades significativas; su adopción exige cautela
Crítico1-29Problemas graves (proyecto abandonado, un solo mantenedor, sin higiene)
VitalidadComunidad yAdopciónSostenibilidady GobernanzaCalidad deIngenieríaSeguridadPreparaciónpara IA

Perfil de puntuación

Cada eje es una categoría. La forma importa más que la media: un proyecto sano llena toda la figura, mientras que un perfil de picos y cráteres indica que la fortaleza en una dimensión enmascara el riesgo en otra.

Titularidad

aicatmiCuenta personal
14 seguidores26 repositorios públicosdesde feb 2020Iristar.com

Este repositorio pertenece a una cuenta personal. Un proyecto con un único propietario conlleva más riesgo de continuidad que uno respaldado por una organización.

Ecosistemas de paquetes

RegistroPaqueteVersiónDescargas / mesVersionesÚltima publicaciónEtiquetas
npm@chnaicorp/cortx2.5.2872647hace 4 díasai-agentllmagent-frameworkharnessagentic-loopmcpcli
PyPIcortx2.5.2-55hace 4 díasai-agentllmagent-frameworkharnessagentic-loopmcpbrowser-automation

Métricas por categoría

Vitalidad

¿Está vivo el proyecto: se escribe código y se publican versiones?

67Moderado · 22% del índice global
Cómo se puntúa
36/36Recencia de push — último push hace 4 días
2.1/36Cadencia de commits — 3/52 semanas con commits
18/18Volumen de commits — 115 commits en el último año
0/10OpenSSF Scorecard: Maintained — project was created within the last 90 days. Please review its contents carefully
Datos de entrada utilizados
commits_last_year115
human_commit_share1
days_since_last_push4
active_weeks_last_year3
Cómo se puntúa
27/27Publica versiones — 1 versiones publicadas
36/36Recencia de las versiones — última versión hace 18 días
12.6/27Cadencia de publicación — cadencia desconocida (una sola versión)
0/10OpenSSF Scorecard: Signed-Releases — sin datos
Datos de entrada utilizados
releases_count1
latest_release_tagv1.0.31
releases_from_tagsno
days_since_latest_release18
mean_days_between_releases
Excluidos de la puntuación (sin datos o no aplicable): OpenSSF Scorecard: Signed-Releases. Los pesos restantes se han renormalizado.

Comunidad y Adopción

¿Tiene el proyecto usuarios, descargas, atención y unas condiciones acogedoras para quienes contribuyen?

41En riesgo · 18% del índice global
Cómo se puntúa
0/60Estrellas — 0 estrellas
0/25Forks — 0 forks
0/15Observadores — 0 observadores
Datos de entrada utilizados
forks0
stars0
watchers0
growth_stateunverified
growth_factor_pct100
growth_unverified_reasonno_history
Cómo se puntúa
22.5/22.5README
22.5/22.5Licencia — licencia reconocida (MIT)
18/18Guía CONTRIBUTING
0/13.5Código de conducta
0/7.2Plantilla de issues
0/6.3Plantilla de PR
Datos de entrada utilizados
has_readme
has_license
has_contributing
has_issue_templateno
has_code_of_conductno
has_pull_request_templateno
Cómo se puntúa
52.5/80Descargas mensuales — 8726 descargas/mes en npm, pypi
0/20Dependientes en el registro — no lo informa este ecosistema
Datos de entrada utilizados
packages@chnaicorp/cortx, cortx
dependents
ecosystemsnpm, pypi
total_downloads
monthly_downloads8726
Excluidos de la puntuación (sin datos o no aplicable): Dependientes en el registro. Los pesos restantes se han renormalizado.

Sostenibilidad y Gobernanza

¿Sobrevivirá el proyecto a sus personas: factor bus, capacidad de respuesta, quién lo respalda y mantenimiento del paquete?

47En riesgo · 24% del índice global
Cómo se puntúa
0/46.8Resolución de issues — sin issues o sin datos
0/38.3Aceptación de PR — sin PR decididos o sin datos
0/15OpenSSF Scorecard: Code-Review — Found 0/30 approved changesets -- score normalized to 0
Datos de entrada utilizados
merged_prs0
open_issues0
closed_issues0
issue_closed_ratio
closed_unmerged_prs0
Excluidos de la puntuación (sin datos o no aplicable): Resolución de issues, Aceptación de PR. Los pesos restantes se han renormalizado.
Cómo se puntúa
10/30Respaldo de la propiedad — cuenta personal (usuario)
0/20Dominio verificado — no aplicable a cuentas de usuario
8.5/25Alcance del propietario — 14 seguidores de CHNAICORP
22.4/25Trayectoria — 26 repos públicos, cuenta de ~6 años
Datos de entrada utilizados
followers14
owner_typeUser
is_verified
owner_loginCHNAICORP
public_repos26
account_age_days2336
Excluidos de la puntuación (sin datos o no aplicable): Dominio verificado. Los pesos restantes se han renormalizado.
Cómo se puntúa
25/25Publicado y resoluble — 2 paquete(s) en npm, pypi
35/35Recencia de publicación — última publicación hace 4 días
20/20Historial de versiones — 55 versiones en el registro
20/20No obsoleto — activo, ni obsoleto ni retirado
Datos de entrada utilizados
packages@chnaicorp/cortx, cortx
ecosystemsnpm, pypi
any_deprecatedno
min_days_since_publish4

Calidad de Ingeniería

¿Existen unas prácticas mínimas de ingeniería y documentación?

44En riesgo · 20% del índice global
Cómo se puntúa
0/24Flujos de trabajo de CI
24/24Pruebas presentes
0/16Configuración de linter
0/9.6Hooks de pre-commit
0/6.4.editorconfig
0/20OpenSSF Scorecard: CI-Tests — sin datos
Datos de entrada utilizados
has_cino
has_tests
has_editorconfigno
has_linter_configno
has_precommit_configno
Excluidos de la puntuación (sin datos o no aplicable): OpenSSF Scorecard: CI-Tests. Los pesos restantes se han renormalizado.

Documentación

65Moderado
Cómo se puntúa
30/30README
0/25Directorio de documentación
15/15Sitio de documentación / página del proyecto — https://github.com/CHNAICORP/cortx
10/10Descripción del repositorio
0/10Topics
10/10Wiki
Datos de entrada utilizados
topics
has_wiki
homepagehttps://github.com/CHNAICORP/cortx
has_readme
has_docs_dirno
has_description

Seguridad

¿Son sólidas las prácticas visibles de seguridad y de cadena de suministro, sin exposición jurisdiccional de alto riesgo sin resolver?

26Crítico · 16% del índice global
Cómo se puntúa
7.5/7.5Binary-Artifacts — no binaries found in the repo
0/7.5Branch-Protection — branch protection not enabled on development/release branches
0/2.5CI-Tests — sin datos
0/2.5CII-Best-Practices — no effort to earn an OpenSSF best practices badge detected
0/7.5Code-Review — Found 0/30 approved changesets -- score normalized to 0
0/2.5Contributors — project has 0 contributing companies or organizations -- score normalized to 0
0/10Dangerous-Workflow — sin datos
0/7.5Dependency-Update-Tool — no update tool detected
0/5Fuzzing — project is not fuzzed
2.5/2.5Licencia — license file detected
0/7.5Maintained — project was created within the last 90 days. Please review its contents carefully
0/5Packaging — sin datos
0/5Pinned-Dependencies — sin datos
0/5SAST — no SAST tool detected
0/5Security-Policy — security policy file not detected
0/7.5Signed-Releases — sin datos
0/7.5Token-Permissions — sin datos
7.5/7.5Vulnerabilities — 0 existing vulnerabilities detected
Datos de entrada utilizados
sourceopenssf_scorecard
checks_evaluated12
scorecard_versionv5.5.0
checks_inconclusive6
scorecard_aggregate2,6
Excluidos de la puntuación (sin datos o no aplicable): ci_tests, dangerous_workflow, packaging, pinned_dependencies, signed_releases, token_permissions. Los pesos restantes se han renormalizado.

Preparación para IA

¿Hasta qué punto está el repositorio preparado para desarrollarse y mantenerse con agentes de codificación de IA? Es una insignia independiente y experimental — peso 0,0, de modo que se presenta por separado y no afecta a la puntuación de salud global.

48En riesgo · 0% del índice global
Cómo se puntúa
0/45Instrucciones para agentes — sin CLAUDE.md / AGENTS.md / reglas de editor
0/15Documentación legible por máquinas (llms.txt)
17.1/40Historial de commits legible — 32 de 100 commits humanos declaran su intención (asunto estructurado o cuerpo explicativo)
Datos de entrada utilizados
has_llms_txtno
legible_history_share0,32
agent_instruction_files
agent_instruction_max_bytes
Cómo se puntúa
0/18Arranque con un solo comando
22/22Pruebas automatizadas
0/11Configuración de lint / formato
11/11Verificación estática de tipos — tsconfig.json
10/10Entorno reproducible — lockfile
10/10Práctica demostrada con agentes — 21 de los últimos 100 commits con autoría o crédito de agente
0/8Mantenimiento automatizado — no se observan actualizaciones automáticas de dependencias
0/10OpenSSF Scorecard: Pinned-Dependencies — sin datos
Datos de entrada utilizados
has_nixno
has_tests
lockfilespackage-lock.json
has_dockerfileno
typed_languageno
bootstrap_files
has_devcontainerno
has_linter_configno
typecheck_configstsconfig.json
agent_commit_share0,21
toolchain_manifests
dependency_bot_commit_share0
Excluidos de la puntuación (sin datos o no aplicable): OpenSSF Scorecard: Pinned-Dependencies. Los pesos restantes se han renormalizado.
Cómo se puntúa
27/45Código verificable por tipos — Python con configuración de verificación de tipos (tsconfig.json)
52.4/55Tamaños de archivo manejables — 2/43 archivos fuente de más de 60 KB
Datos de entrada utilizados
primary_languagePython
largest_source_bytes78.114
source_files_sampled43
oversized_source_files2

Datos clave

0estrellas de GitHub
-contribuidores
115commits en los últimos 12 meses
4días desde el último push
1versiones publicadas
-factor bus
0issues abiertas
npm, PyPIecosistemas de paquetes

Advertencias de recopilación de datos

  • Contributor list unavailable
  • GitHub dependency-graph SBOM unavailable (404); the dependency graph may be disabled for this repository
  • deps.dev does not index npm:@chnaicorp/cortx@2.5.2; advisories assessed against the repository dependency graph instead

Más detalle

OpenSSF Scorecard 2.6 / 10
2.6agregado

Evaluación de seguridad independiente y agnóstica en cuanto a herramientas, procedente del proyecto de código abierto OpenSSF Scorecard. Cada comprobación premia una práctica de seguridad, no la herramienta de un proveedor concreto. Las comprobaciones que Scorecard no pudo determinar se marcan como n/d y se excluyen de la puntuación de seguridad (nunca se cuentan como cero).Scorecard v5.5.0 · 2026-07-21 22:45 UTC

10Binary-Artifactsno binaries found in the repo
0Branch-Protectionbranch protection not enabled on development/release branches
n/dCI-Testsno pull request found
0CII-Best-Practicesno effort to earn an OpenSSF best practices badge detected
0Code-ReviewFound 0/30 approved changesets -- score normalized to 0
0Contributorsproject has 0 contributing companies or organizations -- score normalized to 0
n/dDangerous-Workflowno workflows found
0Dependency-Update-Toolno update tool detected
0Fuzzingproject is not fuzzed
10Licenselicense file detected
0Maintainedproject was created within the last 90 days. Please review its contents carefully
n/dPackagingpackaging workflow not detected
n/dPinned-Dependenciesno dependencies found
0SASTno SAST tool detected
0Security-Policysecurity policy file not detected
n/dSigned-Releasesno releases found
n/dToken-PermissionsNo tokens found
10Vulnerabilities0 existing vulnerabilities detected
Dependencias directas 4
RegistroPaqueteRestricción de versiónManifiesto
npmhttps-proxy-agent^9.1.0package.json
npmundici^8.5.0package.json
PyPIopenai>=1.0pyproject.toml
PyPIhttpx>=0.27pyproject.toml
Todas las dependencias no recopilado

No fue posible recopilar el conjunto de dependencias resuelto para este informe: GitHub dependency-graph SBOM unavailable (404); the dependency graph may be disabled for this repository

Informe JSON sin procesar legible por máquina
{
  "data": {
    "repo": {
      "topics": [],
      "is_fork": false,
      "size_kb": 4944,
      "has_wiki": true,
      "homepage": "https://github.com/CHNAICORP/cortx",
      "languages": {
        "Python": 367434,
        "JavaScript": 53037,
        "TypeScript": 267974
      },
      "pushed_at": "2026-07-17T04:25:58Z",
      "created_at": "2026-07-02T07:30:40Z",
      "owner_type": "User",
      "updated_at": "2026-07-17T04:25:59Z",
      "description": "Cortx — AI Agent runtime | Harness Agent + Agentic Loop | 43 tools | Python + TypeScript",
      "is_archived": false,
      "is_disabled": false,
      "license_spdx": "MIT",
      "default_branch": "main",
      "license_spdx_raw": "MIT",
      "primary_language": "Python",
      "significant_languages": [
        "Python",
        "TypeScript"
      ]
    },
    "owner": {
      "blog": "www.chnaicorp.com",
      "name": "aicatmi",
      "type": "User",
      "login": "CHNAICORP",
      "company": "Iristar.com",
      "location": null,
      "followers": 14,
      "avatar_url": "https://avatars.githubusercontent.com/u/61525966?v=4",
      "created_at": "2020-02-27T00:44:08Z",
      "is_verified": null,
      "public_repos": 26,
      "account_age_days": 2336
    },
    "license": {
      "state": "standard",
      "spdx_id": "MIT",
      "raw_spdx": "MIT",
      "file_present": true,
      "scorecard_found": true,
      "profile_has_license": true
    },
    "activity": {
      "releases": [
        {
          "tag": "v1.0.31",
          "kind": "patch",
          "published_at": "2026-07-03T02:31:44Z"
        }
      ],
      "recent_commits": [
        {
          "oid": "06ce16c64dc6aff0ede4472a41c6cf736738bdf2",
          "body": null,
          "is_bot": false,
          "headline": "🔖 v2.5.2: fix missing sys import in tools.py",
          "author_name": "Cortex Agent",
          "author_login": null,
          "committed_at": "2026-07-17T04:25:55Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "46a3e53641b8c547b1c435f615876e31cb15d514",
          "body": "…reakpoints + usage extraction fix",
          "is_bot": false,
          "headline": "🔖 v2.5.1: append-only context governance + Anthropic explicit cache b…",
          "author_name": "Cortex Agent",
          "author_login": null,
          "committed_at": "2026-07-17T04:20:31Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "d81b29efff4e354d29b7859224faa78dde4f3918",
          "body": "…ld 3->5 + README gamespark demo",
          "is_bot": false,
          "headline": "v2.5.0: YOLO policy relaxation + shell regex fix + suspension thresho…",
          "author_name": "Cortex Agent",
          "author_login": null,
          "committed_at": "2026-07-09T08:50:54Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "0c1cf2bcd25cd39fe339ee394dfd7d6d6ffaf668",
          "body": null,
          "is_bot": false,
          "headline": "🔖 v2.4.5: 双端同步 — Python browser_navigate CDP导航修复 + TS版本号对齐",
          "author_name": "Cortex Agent",
          "author_login": null,
          "committed_at": "2026-07-09T04:36:35Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "a239902dfe9cb3956e340e0882338db2bb57cc2a",
          "body": null,
          "is_bot": false,
          "headline": "🔖 v2.4.5: 浏览器CDP导航修复 + 版本号更新",
          "author_name": "Cortex Agent",
          "author_login": null,
          "committed_at": "2026-07-09T04:26:40Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "609bd2ca88beb521acb65751e7e3c5385d0bef2d",
          "body": "根因:执行 cmd /c \"start \"\" <app>\" 这类分离 GUI 应用的命令时:\n1. start 分离子进程,但包裹的 powershell/cmd 进程不退出(等待句柄)\n2. 30s 空闲超时触发 proc.kill(),但仅杀直接父进程\n3. 孤儿子进程仍持有继承的 stdio 管道 → 'close' 事件永不触发\n4. Promise 永不 resolve → agent 循环永久阻塞(实测卡死 42 分钟)\n\n修复(双端同步):\n- TS exec.ts: killTree() 用 taskkill /T /F /PID 杀整个进程树(Windows),\n  进程组 \n[…]\n发则强制 resolve\n- Python tools.py: kill_tree() 同样用 taskkill /T /F;proc.wait()\n  改为 wait(timeout=3) 防永久阻塞\n\n验证:cmd /c \"start \"\" notepad\" 之前无限挂起,现在 TS 5.7s / Python 3.1s\n正常返回 exit=0。\n\n版本号双端统一 2.4.3 → 2.4.4。",
          "is_bot": false,
          "headline": "🔖 v2.4.4: 修复 run_shell_command 进程树未杀导致 agent 永久卡死的严重 bug",
          "author_name": "Cortex Agent",
          "author_login": null,
          "committed_at": "2026-07-06T10:25:11Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "f40617bf704097ecd0f12b20a6ff271fc99361a4",
          "body": "代码审计后修复 9 个问题(双端同步):\n\nP0 严重 bug:\n- TS git.ts: 修复全文件 \\\\n 字面量 bug(.join(\"\\\\n\")→.join(\"\\n\")),\n  输出现在是真实换行而非可见的 \\n 文本\n- TS browser_screenshot: 移植 Python 的 CDP WebSocket 实现,真实截图\n  (原为 stub \"暂未实现\")\n- TS llm.ts: 4 个 fetch 调用添加 _checkHttp() 状态检查,401/429/500\n  不再静默吞掉,抛出含状态码与错误详情的异常\n- TS policy.ts: 重写 IPv6 CI\n[…]\noolExecutor 接受 snake_case 别名,Python\n  ToolExecutor 接受 camelCase 别名(filePath/dirPath/old_string 等)\n- TS diff_files: 添加 4000 行大小限制,超限退化为截断对比防 OOM\n- TS subagent.ts: 修复描述中的 \\\\n 字面量\n\n版本号双端统一 2.4.2 → 2.4.3。",
          "is_bot": false,
          "headline": "🔖 v2.4.3: 双端审计修复 — git输出/浏览器截图/HTTP状态/IPv6 CIDR/参数别名",
          "author_name": "Cortex Agent",
          "author_login": null,
          "committed_at": "2026-07-06T08:51:45Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "33972212e2ae190021038eac6c68d7c72708dec2",
          "body": "将 `ctx -r` / `/resume` 选择器从\"打印表格 + 文本输入\"升级为\n交互式高亮选择(参考 Claude Code --resume 体验):\n\n- ↑↓ 方向键移动选中项,实时重绘高亮行(▸ 绿底反色标记)\n- 回车确认当前高亮项\n- 保留快捷方式:数字键直接选序号、0/new=新建、Ctrl+C/ESC=放弃\n- 重绘用 ANSI 光标上移 + 行首重写,不清屏避免闪烁\n\n双端实现:\n- TS (src/cli/main.ts): process.stdin.setRawMode + keypress 解析\n  ESC 序列;raw 模式不可用时回退文本输入\n- Python (python/cortex_agent/main.py): 新增 _read_key() 跨平台\n  单键读取器(win32=msvcrt.getwch,unix=termios+tty.setcbreak);\n  msvcrt/termios 不可用时回退文本输入\n\n非 TTY 环境保持现有回退(恢复最近会话,不卡死)。\n版本号双端统一 2.4.1 → 2.4.2。",
          "is_bot": false,
          "headline": "🔖 v2.4.2: 会话选择器支持 ↑↓ 方向键导航(双端同步)",
          "author_name": "Cortex Agent",
          "author_login": null,
          "committed_at": "2026-07-06T07:34:16Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "7029cd38d8072f0f964844c3a2fa99ae43b8eb2b",
          "body": "修正上一提交仅升 Python 端版本导致的 TS/Python 版本漂移:\n- package.json 2.4.0 → 2.4.1\n- 重新编译 dist/cli/main.js\n现双端版本统一为 2.4.1。",
          "is_bot": false,
          "headline": "🔖 v2.4.1: TS 端版本对齐 2.4.1 (package.json + dist 重编译)",
          "author_name": "Cortex Agent",
          "author_login": null,
          "committed_at": "2026-07-06T07:21:57Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "c6d8109b8dae122c2b9ccb59e8b0a8dbb7e98d06",
          "body": "新增 python/cortex_agent/__main__.py,使 `python -m cortex_agent`\n可直接运行(等价于 `ctx` 命令),修复此前 \"No module named\ncortex_agent.__main__\" 报错。",
          "is_bot": false,
          "headline": "🔖 v2.4.1: 添加 __main__.py 支持 python -m cortex_agent",
          "author_name": "Cortex Agent",
          "author_login": null,
          "committed_at": "2026-07-06T07:21:02Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "15a6c7989c58318a5cf950b0cf2396763173302a",
          "body": "新增 `ctx -r` 交互式会话选择器(参考 Claude Code 的 --resume 体验):\n- `ctx -r`        弹出选择器,列出最近 15 条历史会话供选择\n- `ctx -r <id>`   直接恢复指定会话\n- REPL `/resume`  不带 id 同样弹出选择器\n\n选择器特性:\n- 表格展示:序号 / SESSION_ID / 时间 / 提问轮数 / 首条提问预览\n- 回车=最近(★) · 0/new=新建 · 数字=选序号 · 支持粘贴 session_id 模糊匹配\n- 非 TTY 环境自动退回最近会话(打印 warning,不卡死)\n\n双端实现完全对齐:\n- src/cli/main.ts (TypeScript/Node)\n- python/cortex_agent/main.py (Python)\n版本号 2.3.1 → 2.4.0 (pyproject.toml / package.json / __init__.py)",
          "is_bot": false,
          "headline": "🔖 v2.4.0: 会话选择器 (ctx -r) — 双端同步 TS/Python",
          "author_name": "Cortex Agent",
          "author_login": null,
          "committed_at": "2026-07-06T07:17:19Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "6ba830b82137d0aa16a54afd9e3b3f0185800171",
          "body": null,
          "is_bot": false,
          "headline": "🔖 v2.3.1: fix TS compile error - proc.pid undefined guard",
          "author_name": "Cortex Agent",
          "author_login": null,
          "committed_at": "2026-07-05T16:03:30Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "37cb7ac42bdabfd7d2d4efb4531482a1cb51b170",
          "body": null,
          "is_bot": false,
          "headline": "v2.3.0: Add background process management + server health check tools",
          "author_name": "Cortex Agent",
          "author_login": null,
          "committed_at": "2026-07-05T15:56:32Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "85b8a448134b9f0d0ac28f104646ada3dbbfae69",
          "body": "…killed",
          "is_bot": false,
          "headline": "v2.2.1: Inactivity timeout - commands with continuous output wont be …",
          "author_name": "Cortex Agent",
          "author_login": null,
          "committed_at": "2026-07-05T15:30:56Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "3f4e1c9bcd7ef9e89eb235458782ec7db0282997",
          "body": null,
          "is_bot": false,
          "headline": "v2.2.0: Fix tool execution timeout and add blocking command detection",
          "author_name": "Cortex Agent",
          "author_login": null,
          "committed_at": "2026-07-05T15:20:34Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "53d6c21e8877e4d921ba8fc6ed769782deda2491",
          "body": "Root cause: streaming answerToken() writes text without trailing newline. When agent.run() returns, rl.prompt() calls _refreshLine() which clears the current line, overwriting single-line answers like 'hello'. Fix: always write newline after answer text in _loop() no-tool-call branch.",
          "is_bot": false,
          "headline": "v2.1.2: fix REPL answer text overwritten by readline prompt",
          "author_name": "Cortex Agent",
          "author_login": null,
          "committed_at": "2026-07-05T14:18:15Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "4115747c51ad6083317ddfd7b5a45b22fb538b75",
          "body": "Bump version for PyPI release: fix reasoning-only response where thinking content shows but answer text is missing.",
          "is_bot": false,
          "headline": "v2.1.1: fix simple conversation answer not displayed",
          "author_name": "Cortex Agent",
          "author_login": null,
          "committed_at": "2026-07-05T14:11:28Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "c36378248ef2f48b1b1753ee3898bc47cabaf265",
          "body": "Root cause: When LLM returns only reasoning_content without content (e.g., DeepSeek thinking mode), answerToken() is never called, so the answer text is not streamed to terminal. If all retry levels return empty text, _think() returns null which triggers error path. Fix: 1) Add isAnswerShown()/write\n[…]\nn _loop(), when text exists but terminal hasn't shown it, manually write it. 3) In _think(), when all retry levels return empty text but reasoning was collected, use reasoning as fallback answer text.",
          "is_bot": false,
          "headline": "fix: 简单对话场景思考内容显示但正文不输出的 bug",
          "author_name": "Cortex Agent",
          "author_login": null,
          "committed_at": "2026-07-05T14:08:57Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "7653d2780ffea400bd280c44ac7d83e15dc9bac5",
          "body": "…wser/Policy enhancements\n\nNew features: Hooks system (py+ts), ToolContext (py+ts), git tool (7 ops), spawn_subagent, huashu-design Skill, skills-lock.json. Enhanced: Browser CDP, Policy simplification, Loop subagent+hooks, grep glob fix, Memory, Terminal, Net proxy.",
          "is_bot": false,
          "headline": "v2.1.0: Hooks lifecycle, Git/Subagent tools, huashu-design Skill, Bro…",
          "author_name": "Cortex Agent",
          "author_login": null,
          "committed_at": "2026-07-05T13:44:50Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "d44eb442a5b3d16c50ef86c66413c8dea8215f74",
          "body": "…tem prompt to allow direct reply without tools",
          "is_bot": false,
          "headline": "v2.0.3: fix Agent not responding to simple conversation - rewrite sys…",
          "author_name": "Cortex Agent",
          "author_login": null,
          "committed_at": "2026-07-05T09:51:32Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "c459e6c9e2c478cca8bcdc2abe1113b16d90ec8a",
          "body": null,
          "is_bot": false,
          "headline": "📖 README: 添加打砖块游戏 Demo 展示 (cortx-demo-breakout)",
          "author_name": "Cortex Agent",
          "author_login": null,
          "committed_at": "2026-07-04T16:58:56Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "1ce1c9b72c50a1f7b7c495934e2bb4f9c5f4f524",
          "body": "移除'第一步先调用 list_tools'指令(导致跳过思考直接调工具)\n\n新增四步循环:1.思考(必须) 2.调用工具(按需) 3.反思(必须) 4.完成判断\n\n双端同步: src/core/loop.ts + python/cortex_agent/cortex_agent.py",
          "is_bot": false,
          "headline": "🐛 v2.0.2: 重写系统提示,强制 Think→Act→Reflect→Complete 工作循环",
          "author_name": "Cortex Agent",
          "author_login": null,
          "committed_at": "2026-07-04T16:19:37Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "a580628c25dda172e9d5fee48f666a07e797dc3a",
          "body": "Bug1: CORTEX.md 从 workDir 加载而非 process.cwd(),避免从 agent 开发目录注入项目上下文\n\nBug2: 优化 remember_fact/recall_fact 工具描述,使用中文参数名,让 LLM 更容易正确调用",
          "is_bot": false,
          "headline": "🐛 v2.0.1: 修复答非所问和记忆查询两个bug",
          "author_name": "Cortex Agent",
          "author_login": null,
          "committed_at": "2026-07-04T16:05:33Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "a9c6bd1f88e8c6c3458d6f40b83f0e471b82630c",
          "body": "嵌入 cortx-demo-shop-app 仓库链接,方便用户查看 Agent 开发能力",
          "is_bot": false,
          "headline": "📖 README: 添加 Agent 自主开发 Demo 展示区 + PyPI/npm 版本徽章",
          "author_name": "Cortex Agent",
          "author_login": null,
          "committed_at": "2026-07-04T09:38:44Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "a8e901e74ce8686098b9a916ea3a8f57333922da",
          "body": "核心变更: 1)双端功能对齐(Python↔TypeScript) REPL/技能/审计/缓存统计 2)--long模式每轮无限步数(由maxRounds控制续行) 3)CLI实时显示上下文占用率和缓存命中率 4)多Provider支持(DeepSeek/OpenAI/Anthropic/GLM) 5)工具系统增强(浏览器/MCP/文件/网络) 6)27 files changed, 2095 insertions, 594 deletions",
          "is_bot": false,
          "headline": "🔖 v2.0.0: 大版本更新 — 双端功能对齐 + 长时运行修复 + 企业级项目支持",
          "author_name": "Cortex Agent",
          "author_login": null,
          "committed_at": "2026-07-04T09:14:27Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "dc1d8894ca380725cb5eaf74734271529ab1786a",
          "body": "**SSRF 防护放宽**\n- 移除 127.0.0.0/8 和 ::1/128 拦截,允许 localhost 开发访问\n- TS 端移除 localhost/.local/.internal hostname 拦截\n- 内网 IP(10.x/172.16.x/192.168.x)仍被拦截\n\n**MCP 通信修复(Python + TS)**\n- _mcp_exchange 改为逐条请求-响应模式,用 queue 实现真正超时控制\n- 修复原实现关闭 stdin 过早导致浏览器导航响应丢失\n- Popen 添加 encoding='utf-8' 解决中文 Windows GBK 编码错误\n- TS 端添加 resolveCommand() + shell:true 解决 npx ENOENT\n\n**双语言同步**\n- Python: cortex_agent.py (SSRF), tools_mcp.py (_mcp_exchange)\n- TypeScript: policy.ts (SSRF), mcp.ts (mcpExchange + resolveCommand)",
          "is_bot": false,
          "headline": "🔖 v1.3.1 — SSRF 允许 localhost + MCP 修复",
          "author_name": "Cortex Agent",
          "author_login": null,
          "committed_at": "2026-07-03T15:14:47Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "9b5eab0bf1882d837793d5762e937f22f236427b",
          "body": "**权限模型放宽(v1.3.0)**\n- standard 模式:工作区内 SYSTEM 风险命令自动放行(npm/tsc/git/python 等)\n- 内容审计仅拦截真正危险操作(rm -rf /, format, privilege escalation, registry, PowerShell obfuscation)\n- 移除过度拦截:sudo/ssh/taskkill/stop-process/out-file/set-content | iex\n- Python subprocess/socket 模块解禁\n\n**配置文件注释**\n- Python 端创建 settings.e\n[…]\ny\n- TypeScript: policy.ts, config.ts, loop.ts, types.ts, main.ts\n\n**文档**\n- CLAUDE.md: 更新权限矩阵说明\n\n**开发验证**\n- 成功开发 ERP 企业管理系统(5个模块:Dashboard/CRM/Orders/Inventory/Employees)\n- TypeScript 编译零错误\n- Vite 构建成功",
          "is_bot": false,
          "headline": "🔖 v1.3.0 — 权限模型放宽 + 配置注释完善",
          "author_name": "Cortex Agent",
          "author_login": null,
          "committed_at": "2026-07-03T13:49:56Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "cbb5a8a96b43d40d95e1c8ffdbdbe8be7cde79de",
          "body": "…rification",
          "is_bot": false,
          "headline": "v1.0.35 — fix context/streaming/security/config bugs + full module ve…",
          "author_name": "Cortex Agent",
          "author_login": null,
          "committed_at": "2026-07-03T09:45:57Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "ded8a40c739bd9e3971bc4402e671e1e865608d2",
          "body": null,
          "is_bot": false,
          "headline": "🔖 v1.0.34 — _think() 渐进降级修复 Thinking 模式空响应 Bug",
          "author_name": "Cortex Agent",
          "author_login": null,
          "committed_at": "2026-07-03T05:00:00Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "955e55dbb6203108cd89d87174f2815651eda330",
          "body": null,
          "is_bot": false,
          "headline": "fix: __init__.py 自动注册工具模块",
          "author_name": "Cortex Agent",
          "author_login": null,
          "committed_at": "2026-07-03T04:37:32Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "fdb29b6990d5a39d06e59717fe697c1da8130ecb",
          "body": null,
          "is_bot": false,
          "headline": "🔖 v1.0.33 — max_tokens 可配置化 + 空响应自适应恢复",
          "author_name": "Cortex Agent",
          "author_login": null,
          "committed_at": "2026-07-03T03:59:23Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "e8753a558795fbb8e0a5cb6c6b611e9ed919e613",
          "body": null,
          "is_bot": false,
          "headline": "🔖 v1.0.32 — 网络工具多引擎重构 + tsconfig node16 迁移 + Terminal 类型修复",
          "author_name": "Cortex Agent",
          "author_login": null,
          "committed_at": "2026-07-03T03:28:43Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "89bf408f5a227f5d64aea0ae0ab17b3f51bba529",
          "body": "Co-Authored-By: Claude <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "🔖 v1.0.31 — 记忆搜索关键词 auto-extract + PyPI 发布",
          "author_name": "Cortex Agent",
          "author_login": null,
          "committed_at": "2026-07-03T02:31:26Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "04825b66ecd525abd2dbd260f29fb30b970def2f",
          "body": "问题:Agent 联网搜索到的结果(标题、URL)只在会话文件中保留,\n新会话启动时只能看到查询文本摘要,看不到搜索到的具体内容。\n\n修复 (双语言):\n- _autoExtractFacts() 增加 web_search 结果提取:\n  从 resultPreview 中解析 '[1] title' 格式,写入 '搜索到: title'\n- _autoExtractFacts() 增加 web_fetch 结果提取:\n  从 resultPreview 中解析 '--- URL' 格式,写入 '抓取: URL'\n- web_search 搜索结果为空时不写入(避免噪音)\n- remember_fact 被显式调用时不重复写入 query 摘要\n\nPython 端同步实现同样逻辑。\n\n验证:\n- 搜索 Rust 2026 后,memory.md 自动含查询文本\n- 恢复会话时 agent 能通过 memory.md 回顾之前的搜索主题\n\nCo-Authored-By: Claude <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "🧠 记忆 auto-extract 增强:联网搜索结果自动提取到 memory.md",
          "author_name": "Cortex Agent",
          "author_login": null,
          "committed_at": "2026-07-03T02:22:14Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "3aee9dc0f1ddeee8b80eb765f1ae0ea0f3f97e19",
          "body": "Python 端 _auto_extract_facts() 原本是空实现 (pass),导致每次查询后\n查询摘要不会自动写入 memory.md,开启新会话后无法回忆之前的对话主题。\n\n修复:从 pass 改为实际调用 self.memory.append(),与 TypeScript 版本一致。\n\n现在双端都自动将每次查询摘要写入 memory.md。\n\nCo-Authored-By: Claude <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "🧠 Python _auto_extract_facts 从 pass 改为实际实现",
          "author_name": "Cortex Agent",
          "author_login": null,
          "committed_at": "2026-07-03T02:15:22Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "9e12c65d6f7b0956fef9108a11bf39b7078b9c79",
          "body": "Co-Authored-By: Claude <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "🔖 v1.0.30 — 记忆 auto-extract + 版本号同步",
          "author_name": "Cortex Agent",
          "author_login": null,
          "committed_at": "2026-07-03T01:52:04Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "3596e9dec8507f264e3f7c2d681f33543f50cf29",
          "body": "问题:生产环境 ctx 在每次查询后,memory.md 不会被自动更新,\n导致下次恢复会话时 agent 没有任何上下文回顾。\n\n根因:\n- Python 的 _auto_extract_facts() 是空实现 (pass)\n- TypeScript 完全没有实现 autoExtractMemory\n- 用户通过 remember_fact 手动记忆是唯一写入路径\n\n修复 (TypeScript):\n- 在 run() 结束前调用 _autoExtractFacts(query)\n- 将用户查询第一行截断 80 字符写入 memory.md\n- 如果 agent 已在本次使用了 remem\n[…]\n() 从 pass 改为实际写入查询摘要\n\n双端现在都会自动将每次查询的摘要写入 memory.md。\n\n验证:\n- 查询后 memory.md 自动新增 '查询: 帮我搜索2026年...'\n- 下次恢复会话时 agent 能回顾之前讨论的主题\n- 明确调用 remember_fact 的不会重复写入\n\nCo-Authored-By: Claude <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "🧠 修复 TS 记忆功能:auto-extract 查询摘要到 memory.md",
          "author_name": "Cortex Agent",
          "author_login": null,
          "committed_at": "2026-07-03T01:50:46Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "b5f4a4315c3950924f5c1b389d48f611db74c0a6",
          "body": "Co-Authored-By: Claude <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "🔖 v1.0.29 — 版本号同步更新",
          "author_name": "Cortex Agent",
          "author_login": null,
          "committed_at": "2026-07-03T01:37:14Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "a7a9e933a6a32b6b88dca9be31d5947e3a25eb9c",
          "body": "所有 3 种权限模式:\n  standard — 默认安全模式(SAFE 自动 / WRITE 区内 / SYSTEM 确认)\n  auto     — 自动模式(全部自动批准,安全性高于 yolo)\n  yolo     — CI/CD 全放行模式\n\n影响范围(11 个文件):\n  TypeScript: types.ts/loop.ts/policy.ts/main.ts/terminal.ts\n  Python: cortex_agent.py/policy.py/main.py/terminal.py\n  文档: CLAUDE.md/README.md\n\n向后兼容:接受 'auto'/'auto-edit'/'a'/'edit' 作为索引名。\n\nCo-Authored-By: Claude <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "🏷️ auto-edit → auto:权限模式重命名(双语言+文档全量更新)",
          "author_name": "Cortex Agent",
          "author_login": null,
          "committed_at": "2026-07-03T01:32:23Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "3e6eac17fdf06648046b11261f0ecb946477350f",
          "body": "问题背景:\n普通 ctx 命令运行时,web_search 始终返回'未找到结果',agent\n无限重试 web_fetch 最终上下文爆炸,静默退出。\n\n根因分析:\n1. DDG API 在国内网络超时(connect ETIMEDOUT)\n2. DDG Lite HTML 页面完全不返回(同样超时)\n3. web_fetch 结果太大(TS 3KB/Python 8KB→4KB),多次调用塞满context\n\n核心修复 1 — Bing Web Search 作为最终 fallback:\n- DDG API/Lite 均失败后,TS和Python双端均新增 Bing 搜索 HTML 抓取\n\n[…]\n示用户配置 API key 或检查网络\n\n验证:\n- web_search('harness agent architecture') → Bing 返回 5 条有效结果\n- E2E 测试: 12 步/84s,正常回答完整 Harness 技术报告\n- Agent 不再静默退出,成功产出 9 段完整分析\n\nCo-Authored-By: Claude <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "🔧 修复 web_search 空结果 + web_fetch 上下文爆炸(三大修复)",
          "author_name": "Cortex Agent",
          "author_login": null,
          "committed_at": "2026-07-03T01:29:35Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "5511fcdb925c0d553f266e8c5b0d1726745373a0",
          "body": "Co-Authored-By: Claude <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "🔖 v1.0.28 — 版本号同步 + 搜索上下文修复",
          "author_name": "Cortex Agent",
          "author_login": null,
          "committed_at": "2026-07-02T16:07:47Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "8e580af504f372397b58112ab58fcfe8845793f7",
          "body": "问题分析:\nAgent 联网搜索7+次后,context window 被大量web_fetch 8KB结果填满,\nLLM无力产出最终答案,_reflect() 只有 '[超步数] 未能完成' 对用户无用。\n\n修复1 — web_fetch 截断从 8KB → 3KB:\n  上下文管理 ceiling 约 24条 = 72KB,8KB/条 x 5+次 fetch = 40KB+\n  占一半以上,LLM无空间思考答案。3KB 大幅减轻压力。\n\n修复2 — _reflect() 兜底回答:\n  LLM 返回空时不再只丢 [达到最大步数],而是提取最后3个工具调用结果\n  拼接成可读摘要。用户至少能看到收集到什么信息。\n\nCo-Authored-By: Claude <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "🔧 修复 Agent 多步搜索后静默退出的两个根因",
          "author_name": "Cortex Agent",
          "author_login": null,
          "committed_at": "2026-07-02T16:03:50Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "c834a4644664522d1052c36c8118c13f62f7a5f9",
          "body": "问题:Agent 调用了 get_current_time 获取当前时间,但 web_search\n查询中仍使用旧的 2024/2025 年份而不是 2026。原因是提示词只说\n'先获取时间',没有要求将获取的时间写入搜索关键词。\n\n修复:提示词新增明确要求——搜索时务必将具体年份月份直接写入搜索关键词,\n例如搜 '2026年7月 TypeScript 最新版本' 而非 'TypeScript 最新版本'。\n\n双语言同步:Python + TypeScript 均已更新。\n\nCo-Authored-By: Claude <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "🔧 修复系统提示词:强制 web_search 使用 get_current_time 获取的具体年份",
          "author_name": "Cortex Agent",
          "author_login": null,
          "committed_at": "2026-07-02T15:59:29Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "3307e60e6be182f1de103cf931ad8e5ac30dbeaf",
          "body": "Co-Authored-By: Claude <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "🔖 v1.0.27 — 版本号同步更新",
          "author_name": "Cortex Agent",
          "author_login": null,
          "committed_at": "2026-07-02T15:47:33Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "2ef66b56cc96f514d4dabf0c33f41c1e069ccc12",
          "body": "CRITICAL 修复 (4):\n- TS http_request 添加 SSRF checkSsrf()\n- TS SSRF DNS 解析添加 (async checkSsrf)\n- TS 统一 PATH_PARAMS 包含 filePath/dirPath/fileA/fileB/outPath\n- TS SSRF DNS 失败时 WARN+放行(避免内网环境误杀)\n\nHIGH 修复 (6):\n- TS _reflect() 实现最终答案逻辑\n- TS edit_file 仅替换第一处(与 Python 一致)\n- TS apiGet 传递 extraHeaders(Brave Sear\n[…]\nearch/mcpServers\n\n验证:\n- npx tsc --outDir dist: 0 errors\n- Python all imports: OK (43 tools)\n- 43 工具 e2e 测试: 全部通过\n- 26 轮 CLI 交互测试: 全部通过\n- 5 项安全拦截测试: 全部通过\n\nCo-Authored-By: Claude <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "🔒 v1.0.27 — 安全修复 + 双语言同步",
          "author_name": "Cortex Agent",
          "author_login": null,
          "committed_at": "2026-07-02T15:47:20Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "7a5e478ec57ae8ae418eb853ff8c90e127651a70",
          "body": "- 默认 work_dir 从 ./cortex_workspace 迁移到 ~/.cortx/workspace/\n- Python: AgentConfig default_factory → ~/.cortx/workspace, 移除 .gitkeep\n- TS: DEFAULT_CONFIG workDir → defaultWorkDir() 动态计算\n- TS: main.ts default workDir fallback 同步\n- 设计原则: ~/.cortx/ = 用户配置, ~/.cortx/workspace/ = 运行时产物\n  参考 Claude Code (~/.claude/) 和 Codex (~/.codex/) 的目录分离设计\n\nCo-Authored-By: Claude <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "🏗️ 配置与工作区分离 — 对齐 Claude Code/Codex/Hermes 设计",
          "author_name": "Cortex Agent",
          "author_login": null,
          "committed_at": "2026-07-02T15:17:30Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "ff198216e518edd1b2cd267fa0806181754c8558",
          "body": "- TS: 新建 MemoryStore/SessionStore (与 Python memory.py 对应)\n- TS: loop.ts 集成 memory/sessions/auto-save/initSession\n- TS: main.ts --no-stream 也 setTerm + session ID 打印\n- TS: /exit 保存会话并打印 Bye. Session: xxx\n- Python: -q 模式下打印 [会话] ID\n- Python&TS: _requestConfirmation 交互式权限确认\n- CLI: 记忆/会话 通过 settings.json 的 memory_enabled/sessions_enabled 开关\n\nCo-Authored-By: Claude <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "🔖 v1.0.26 — 记忆/会话持久化 + 双语言权限同步",
          "author_name": "Cortex Agent",
          "author_login": null,
          "committed_at": "2026-07-02T15:05:38Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "fa95ccb718d71835fbfd3f51949988cf65574908",
          "body": "Python:\n  - main.py: -q 模式退出前打印 [会话] session_id\n  - cortex_agent.py: run() 内已有 auto-save (无改动)\n\nTypeScript:\n  - 新建 src/core/memory_store.ts: MemoryStore + SessionStore\n    (与 Python memory.py 完全对应)\n  - src/core/loop.ts: 集成 memory + sessions + initSession +\n    autoSave + saveSession\n  - src/cli/main\n[…]\nssion 恢复上次会话; -q 退出打印 session;\n    /exit 时 saveSession + 打印 Bye. Session: xxx\n  - src/core/types.ts: 修复重复字段\n\n验证: 记忆持久化 OK, 会话自动保存 OK, 退出打印 session ID OK\n\nCo-Authored-By: Claude <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "🐛 记忆/会话持久化修复 + 退出打印 Session ID",
          "author_name": "Cortex Agent",
          "author_login": null,
          "committed_at": "2026-07-02T15:04:16Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "90bf30f97afce67d414e177f9731af57e9bede0f",
          "body": "- src/core/loop.ts: 新增 _requestConfirmation() 方法\n  - 弹出 [Y/n/always/deny] 确认界面\n  - permissionRemember 缓存决策\n  - readline 交互式输入\n- CONFIRM 流程修正:\n  - yolo/auto-edit: 自动放行 (不弹提示)\n  - standard + 有 term: 弹出确认界面等待用户输入\n  - standard + 无 term (非交互): 自动拒绝\n- src/cli/main.ts: --no-stream 模式下也 setTerm\n  (保证 _requestConfirmation 的 term 非空检查通过)\n\nCo-Authored-By: Claude <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "🐛 TS: 添加交互式权限确认 — 与 Python 完全对应",
          "author_name": "Cortex Agent",
          "author_login": null,
          "committed_at": "2026-07-02T14:49:18Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "9fabd1bd147984d223218afd0f3b1d1907d37558",
          "body": "- Critical Rule: Python and TypeScript must stay in sync\n- Development workflow: Python → TS → Build → Test → Commit → Publish\n- Version bump checklist + publish commands in one place\n- Consolidated file mapping table at top\n\nCo-Authored-By: Claude <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Update CLAUDE.md — add dual-language sync rule + dev workflow",
          "author_name": "Cortex Agent",
          "author_login": null,
          "committed_at": "2026-07-02T14:38:04Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "07961e73c97564233e793bb89423c513f76e88a6",
          "body": null,
          "is_bot": false,
          "headline": "Add CLAUDE.md — architecture guide for Claude Code",
          "author_name": "Cortex Agent",
          "author_login": null,
          "committed_at": "2026-07-02T14:36:53Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "447c82c47afb46ad4563c31dcd6a25f38ebc45d8",
          "body": "- auto-edit: WRITE/SYSTEM 工具自动放行,无需交互确认\n- yolo: 全部自动放行\n- Python: CONFIRM 判决在 auto-edit/yolo 模式自动转 ALLOW\n- TS: loop.ts 和 policy.ts 同步修正权限逻辑\n\nCo-Authored-By: Claude <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "🔖 v1.0.25 — 修复 auto-edit/yolo 模式权限判断",
          "author_name": "Cortex Agent",
          "author_login": null,
          "committed_at": "2026-07-02T14:33:22Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "180b7f4da58ea1b57539c3a5bec29d29d6097104",
          "body": "- --update 改用 npm view 获取最新版本再安装,避免 @latest 缓存 404\n- 失败时回退到 npm update -g\n\nCo-Authored-By: Claude <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "🔖 v1.0.24 — 修复 --update 版本解析 + npm 缓存",
          "author_name": "Cortex Agent",
          "author_login": null,
          "committed_at": "2026-07-02T13:47:54Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "6806e8eb9abc02b45effceb2bec8e2e2b5c806a9",
          "body": "- web_search: 支持 Brave/SerpAPI/Tavily 付费搜索引擎 + DuckDuckGo 免费默认\n- settings.json 新增 web_search 配置段 (provider/API keys/max_results)\n- Python: 所有 urlopen 改为 ProxyHandler (修复代理不生效)\n- TS: 代理路由修正 (HTTPS 通过 http 模块发代理)\n- SSRF 防护统一 (Python+TS 均含10个内网CIDR规则)\n- tsconfig: ignoreDeprecations 6.0 兼容\n- HTML→text 增强 (header/footer 标签处理)\n\nCo-Authored-By: Claude <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Release v1.0.23 — 多引擎联网搜索 + 代理适配 + SSRF加固",
          "author_name": "Cortex Agent",
          "author_login": null,
          "committed_at": "2026-07-02T13:43:48Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "399eb687006ef47607716eed9ff497d9ccfa367d",
          "body": null,
          "is_bot": false,
          "headline": "🔖 v1.0.22 — --update 移除危险 uninstall",
          "author_name": "Cortex Agent",
          "author_login": null,
          "committed_at": "2026-07-02T11:14:42Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "931c876afaed87266cbfc0a74ba42ddfff7c2d87",
          "body": null,
          "is_bot": false,
          "headline": "🔖 v1.0.21 — 联网搜索前提示获取当前时间",
          "author_name": "Cortex Agent",
          "author_login": null,
          "committed_at": "2026-07-02T11:11:38Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "bd4a12ea4b1ecb9ffcbb38957d9675d481336817",
          "body": null,
          "is_bot": false,
          "headline": "🔖 v1.0.20",
          "author_name": "Cortex Agent",
          "author_login": null,
          "committed_at": "2026-07-02T11:07:52Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "1e2031fca6a8d38232700c7726fb5f3aac764375",
          "body": null,
          "is_bot": false,
          "headline": "🐛 Python --update 加 --no-cache-dir",
          "author_name": "Cortex Agent",
          "author_login": null,
          "committed_at": "2026-07-02T11:07:24Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "8e952900c64a001c3238785e2536571807db7cf3",
          "body": null,
          "is_bot": false,
          "headline": "🔖 v1.0.19 — --update 跳过缓存",
          "author_name": "Cortex Agent",
          "author_login": null,
          "committed_at": "2026-07-02T11:05:41Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "dd1bccacdc8df0d4693e6413a4362c06d5708d2b",
          "body": null,
          "is_bot": false,
          "headline": "🔖 v1.0.18 — TS fetch 代理支持",
          "author_name": "Cortex Agent",
          "author_login": null,
          "committed_at": "2026-07-02T11:03:11Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "63711cd1f61fc83335cbee37c969b4e7efff118d",
          "body": null,
          "is_bot": false,
          "headline": "🔖 v1.0.17 — Shift+Tab 静默切换 + banner 提示",
          "author_name": "Cortex Agent",
          "author_login": null,
          "committed_at": "2026-07-02T10:59:25Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "8bbfc8fb6da69829bb97ef676059d6c6eb7559c3",
          "body": null,
          "is_bot": false,
          "headline": "🐛 修复 rl.prompt 误改",
          "author_name": "Cortex Agent",
          "author_login": null,
          "committed_at": "2026-07-02T10:55:13Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "2278508cb9c7ec53d161229cebdbc8318bacde82",
          "body": null,
          "is_bot": false,
          "headline": "🔖 v1.0.16 — TS 流式输出 + 思考显示 + Shift+Tab 切换",
          "author_name": "Cortex Agent",
          "author_login": null,
          "committed_at": "2026-07-02T10:54:55Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "80dd916815255356390d8ce69660ebae037af661",
          "body": null,
          "is_bot": false,
          "headline": "🔖 v1.0.15 — 清理 .cortex 残留引用",
          "author_name": "Cortex Agent",
          "author_login": null,
          "committed_at": "2026-07-02T10:47:51Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "2e72a6f986339eea67d38618cb65dade32c86dd4",
          "body": null,
          "is_bot": false,
          "headline": "🔖 v1.0.14 — 统一配置目录 ~/.cortx/ (不再使用 .cortex/)",
          "author_name": "Cortex Agent",
          "author_login": null,
          "committed_at": "2026-07-02T10:45:54Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "59e3a6728fa019a956ef10b7f88d8ab5e92a5be1",
          "body": null,
          "is_bot": false,
          "headline": "🔖 v1.0.13 — 修复 TS REPL 输出 + /mode 切换",
          "author_name": "Cortex Agent",
          "author_login": null,
          "committed_at": "2026-07-02T10:42:46Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "23eaf05d5eec447aaeb75df369d9585bada0ce9e",
          "body": null,
          "is_bot": false,
          "headline": "🔖 v1.0.12 — 智能合并配置 (空值不覆盖)",
          "author_name": "Cortex Agent",
          "author_login": null,
          "committed_at": "2026-07-02T10:39:21Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "8e492d2b28034ce6e9bc1396d7752e58c2313b5b",
          "body": null,
          "is_bot": false,
          "headline": "🐛 TS 类型错误修复",
          "author_name": "Cortex Agent",
          "author_login": null,
          "committed_at": "2026-07-02T10:36:04Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "f25b5eacb0a0e80213ed8dd5e7ff885f0253620b",
          "body": null,
          "is_bot": false,
          "headline": "🔖 v1.0.11 — TS 配置向导同步",
          "author_name": "Cortex Agent",
          "author_login": null,
          "committed_at": "2026-07-02T10:35:00Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "1c7e5682a960efd9ee673f9c3cefa53a885ab091",
          "body": null,
          "is_bot": false,
          "headline": "🔖 v1.0.10 — 首次运行配置向导",
          "author_name": "Cortex Agent",
          "author_login": null,
          "committed_at": "2026-07-02T10:32:56Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "8a6187c2aaf22b600757504a59a8be7a4535bb33",
          "body": null,
          "is_bot": false,
          "headline": "🔖 v1.0.9 — TS 首次运行自动创建配置",
          "author_name": "Cortex Agent",
          "author_login": null,
          "committed_at": "2026-07-02T10:26:42Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "ba6ae702a80c0215e7931bb90b6dc08d19cc5c62",
          "body": null,
          "is_bot": false,
          "headline": "🔖 v1.0.8 — 首次运行自动创建 ~/.cortex/settings.json",
          "author_name": "Cortex Agent",
          "author_login": null,
          "committed_at": "2026-07-02T10:24:25Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "ece8a96eb63aca0534144f5087c5860ffd9200ca",
          "body": null,
          "is_bot": false,
          "headline": "🔖 v1.0.7 — ctx --update 命令",
          "author_name": "Cortex Agent",
          "author_login": null,
          "committed_at": "2026-07-02T10:13:52Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "9b7a77571d9b0d1998edf2179338a375be55cbb7",
          "body": null,
          "is_bot": false,
          "headline": "🔖 同步版本号 1.0.6",
          "author_name": "Cortex Agent",
          "author_login": null,
          "committed_at": "2026-07-02T10:10:28Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "0ac7653a67586c6693129d8d6d2f2bfe3ebfa0d5",
          "body": null,
          "is_bot": false,
          "headline": "🔖 v1.0.6 — 添加 prepublishOnly 自动编译",
          "author_name": "Cortex Agent",
          "author_login": null,
          "committed_at": "2026-07-02T10:10:20Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "f7520bde28a5a363b75e42ced751db38c2837d69",
          "body": null,
          "is_bot": false,
          "headline": "🔖 v1.0.5 — Python引擎标识 🐍",
          "author_name": "Cortex Agent",
          "author_login": null,
          "committed_at": "2026-07-02T10:07:20Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "6d20fac9771a68c4e11e820a70da8aa6dbe838f1",
          "body": null,
          "is_bot": false,
          "headline": "🐍 banner 显示 Python 引擎标识",
          "author_name": "Cortex Agent",
          "author_login": null,
          "committed_at": "2026-07-02T10:06:13Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "e2e97d82ae9c08978b0b38e950f3c820ce09dbd9",
          "body": null,
          "is_bot": false,
          "headline": "🔖 v1.0.4 — --version 命令 + PermissionError 修复",
          "author_name": "Cortex Agent",
          "author_login": null,
          "committed_at": "2026-07-02T10:03:27Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "63ad772852d1b6fbb9e38b60d2235a5afbf40bed",
          "body": null,
          "is_bot": false,
          "headline": "🔖 --version/-V 命令支持 (Python + TypeScript)",
          "author_name": "Cortex Agent",
          "author_login": null,
          "committed_at": "2026-07-02T09:59:52Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "e3ca21b5fc049782d15a8256eec13d700bae831f",
          "body": null,
          "is_bot": false,
          "headline": "🔖 v1.0.3 — PermissionError 回退到 ~/.cortx/workspace",
          "author_name": "Cortex Agent",
          "author_login": null,
          "committed_at": "2026-07-02T09:49:29Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "36f0a275087308d1423a8ba84a3d2c44e9eb68dd",
          "body": null,
          "is_bot": false,
          "headline": "🔖 v1.0.3 — 彻底移除 postinstall + dependencies",
          "author_name": "Cortex Agent",
          "author_login": null,
          "committed_at": "2026-07-02T09:43:16Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "b5842baaf5512060f60eedff279aac05d41a8a80",
          "body": null,
          "is_bot": false,
          "headline": "🔖 v1.0.2 — 修复 postinstall + 仓库URL",
          "author_name": "Cortex Agent",
          "author_login": null,
          "committed_at": "2026-07-02T09:41:30Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "8c180a3ddd9d671cbfdff0956e3bd13d0617dc14",
          "body": null,
          "is_bot": false,
          "headline": "🔖 v1.0.1 — 精简 npm 包 (17 files, 85KB)",
          "author_name": "Cortex Agent",
          "author_login": null,
          "committed_at": "2026-07-02T09:33:25Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "d9fe0b9bc17b706a647b5bcab0d30e1960f7e1dd",
          "body": null,
          "is_bot": false,
          "headline": "📦 添加 .npmignore 精简 npm 包",
          "author_name": "Cortex Agent",
          "author_login": null,
          "committed_at": "2026-07-02T09:24:29Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "f119d97d0b2734285b55ff22f471248aec08fe6f",
          "body": null,
          "is_bot": false,
          "headline": "📝 PUBLISH.md: npm scoped 包必须加 --access public",
          "author_name": "Cortex Agent",
          "author_login": null,
          "committed_at": "2026-07-02T09:21:13Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "0ffdf1e9a62a19242b042a8eb2d9a01e6f34c4f5",
          "body": null,
          "is_bot": false,
          "headline": "📝 npm install 统一为 @chnaicorp/cortx",
          "author_name": "Cortex Agent",
          "author_login": null,
          "committed_at": "2026-07-02T09:16:48Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "efd7a9add17a242b3013b0444008071356e0c46c",
          "body": null,
          "is_bot": false,
          "headline": "🎨 品牌名: Cortex Agent → Cortx (大写C)",
          "author_name": "Cortex Agent",
          "author_login": null,
          "committed_at": "2026-07-02T09:13:07Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "02bb5de33f0923805e46c5be914cc4adaf6017ed",
          "body": null,
          "is_bot": false,
          "headline": "🔄 仓库改名 cortex-agent → cortx",
          "author_name": "Cortex Agent",
          "author_login": null,
          "committed_at": "2026-07-02T09:12:02Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "6444573f22d8b589691e2c9ad92fb6a01e6b54d9",
          "body": null,
          "is_bot": false,
          "headline": "🎉 发布 cortx v1.0.0 — PyPI: pip install cortx",
          "author_name": "Cortex Agent",
          "author_login": null,
          "committed_at": "2026-07-02T08:28:28Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "a53c76de2a8df318a156b926dc471c82bef52333",
          "body": null,
          "is_bot": false,
          "headline": "📝 PUBLISH.md: 明确当前版本 1.0.0 + 版本更新示例加注释",
          "author_name": "Cortex Agent",
          "author_login": null,
          "committed_at": "2026-07-02T07:50:52Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "6cf2fce3a8dd3ad3ba3bd9617ef9051faf28d746",
          "body": null,
          "is_bot": false,
          "headline": "📝 版本号全局同步 1.0.0 — 所有文件一致",
          "author_name": "Cortex Agent",
          "author_login": null,
          "committed_at": "2026-07-02T07:48:47Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "be48cce08f02d674c654a89a6d147dcb9d06b145",
          "body": null,
          "is_bot": false,
          "headline": "🔖 版本号统一 1.0.0 (pyproject.toml + package.json + __init__.py)",
          "author_name": "Cortex Agent",
          "author_login": null,
          "committed_at": "2026-07-02T07:46:46Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "adcdcc35eec4c8c4bd7eb0a9c08f23523a418604",
          "body": null,
          "is_bot": false,
          "headline": "📝 文档全面同步: 包名 ctx + npm @chnaicorp/ctx + 安装命令",
          "author_name": "Cortex Agent",
          "author_login": null,
          "committed_at": "2026-07-02T07:45:08Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "02746b3ca76224b7e92de371411186d4ae2e7da9",
          "body": null,
          "is_bot": false,
          "headline": "⚡ npm: cortex-agent → @chnaicorp/ctx (npm install -g @chnaicorp/ctx)",
          "author_name": "Cortex Agent",
          "author_login": null,
          "committed_at": "2026-07-02T07:42:22Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "8f32076703d1c08812dda4865935476cd1854dcc",
          "body": null,
          "is_bot": false,
          "headline": "⚡ PyPI 包名: cortex-agent → ctx (3字母, pip install ctx)",
          "author_name": "Cortex Agent",
          "author_login": null,
          "committed_at": "2026-07-02T07:40:58Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "753a085c3780085074b8405526b965cda8ca40a7",
          "body": null,
          "is_bot": false,
          "headline": "📝 添加 PUBLISH.md + README 强调 ctx 短命令",
          "author_name": "Cortex Agent",
          "author_login": null,
          "committed_at": "2026-07-02T07:38:06Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "491b66c1c18ce380bdfb7f17e6a6a3b52e56e986",
          "body": null,
          "is_bot": false,
          "headline": "🚀 发布准备: GitHub/PyPI/npm 配置就绪",
          "author_name": "Cortex Agent",
          "author_login": null,
          "committed_at": "2026-07-02T07:32:57Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "9646b9c9c5aeb31232b7655aa1654cf1ee2792ea",
          "body": null,
          "is_bot": false,
          "headline": "📝 文档全面更新: 双语言/43工具/新项目结构/全部命令",
          "author_name": "Cortex Agent",
          "author_login": null,
          "committed_at": "2026-07-02T07:29:23Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "c37c6b632c91717b2d99c9e9ab664f4a4a335b92",
          "body": null,
          "is_bot": false,
          "headline": "🔧 tsconfig: module node16 + 所有导入 .js 扩展 (0 errors, 0 warnings)",
          "author_name": "Cortex Agent",
          "author_login": null,
          "committed_at": "2026-07-02T07:21:33Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "60984c27347a8a3da2b767a08942c0318a37f7a0",
          "body": null,
          "is_bot": false,
          "headline": "🧹 清理根目录残留 (agent.db/__pycache__/bin)",
          "author_name": "Cortex Agent",
          "author_login": null,
          "committed_at": "2026-07-02T07:18:23Z",
          "body_truncated": false,
          "is_coding_agent": false
        }
      ],
      "releases_count": 1,
      "commits_last_year": 115,
      "latest_release_at": "2026-07-03T02:31:44Z",
      "latest_release_tag": "v1.0.31",
      "releases_from_tags": false,
      "days_since_last_push": 4,
      "active_weeks_last_year": 3,
      "days_since_latest_release": 18,
      "mean_days_between_releases": null
    },
    "community": {
      "has_readme": true,
      "has_license": true,
      "has_description": true,
      "has_contributing": true,
      "health_percentage": 57,
      "has_issue_template": false,
      "has_code_of_conduct": false,
      "has_pull_request_template": false
    },
    "ecosystem": {
      "packages": [
        {
          "name": "@chnaicorp/cortx",
          "exists": true,
          "license": "MIT",
          "keywords": [
            "ai-agent",
            "llm",
            "agent-framework",
            "harness",
            "agentic-loop",
            "mcp",
            "cli"
          ],
          "ecosystem": "npm",
          "matches_repo": true,
          "registry_url": "https://www.npmjs.com/package/@chnaicorp/cortx",
          "is_deprecated": false,
          "latest_version": "2.5.2",
          "repository_url": "https://github.com/CHNAICORP/cortx",
          "versions_count": 47,
          "total_downloads": null,
          "dependents_count": null,
          "deprecation_note": null,
          "maintainers_count": 1,
          "monthly_downloads": 8726,
          "first_published_at": "2026-07-02T09:34:40.702000Z",
          "latest_published_at": "2026-07-17T04:29:58.817000Z",
          "latest_version_yanked": null,
          "days_since_latest_publish": 4
        },
        {
          "name": "cortx",
          "exists": true,
          "license": "MIT",
          "keywords": [
            "ai-agent",
            "llm",
            "agent-framework",
            "harness",
            "agentic-loop",
            "mcp",
            "browser-automation",
            "Development Status :: 4 - Beta",
            "Intended Audience :: Developers",
            "License :: OSI Approved :: MIT License",
            "Programming Language :: Python :: 3",
            "Programming Language :: Python :: 3.10",
            "Programming Language :: Python :: 3.11",
            "Programming Language :: Python :: 3.12",
            "Topic :: Scientific/Engineering :: Artificial Intelligence",
            "Topic :: Software Development :: Libraries :: Application Frameworks"
          ],
          "ecosystem": "pypi",
          "matches_repo": null,
          "registry_url": "https://pypi.org/project/cortx/",
          "is_deprecated": false,
          "latest_version": "2.5.2",
          "repository_url": null,
          "versions_count": 55,
          "total_downloads": null,
          "dependents_count": null,
          "deprecation_note": null,
          "maintainers_count": null,
          "monthly_downloads": null,
          "first_published_at": "2026-07-02T08:27:48.855896Z",
          "latest_published_at": "2026-07-17T04:26:47.476101Z",
          "latest_version_yanked": null,
          "days_since_latest_publish": 4
        }
      ]
    },
    "popularity": {
      "forks": 0,
      "stars": 0,
      "watchers": 0,
      "fork_history": {
        "days": [],
        "complete": true,
        "collected": 0,
        "total_forks": 0
      },
      "star_history": {
        "days": [],
        "complete": true,
        "collected": 0,
        "total_stars": 0
      },
      "open_issues_and_prs": 0
    },
    "ai_readiness": {
      "has_nix": false,
      "example_dirs": [],
      "has_llms_txt": false,
      "has_dockerfile": false,
      "has_mcp_signal": false,
      "bootstrap_files": [],
      "api_schema_files": [],
      "has_devcontainer": false,
      "typecheck_configs": [
        "tsconfig.json"
      ],
      "toolchain_manifests": [],
      "largest_source_bytes": 78114,
      "source_files_sampled": 43,
      "oversized_source_files": 2,
      "agent_instruction_files": [],
      "agent_instruction_max_bytes": null
    },
    "dependencies": {
      "manifests": [
        "package.json",
        "pyproject.toml",
        "requirements.txt"
      ],
      "advisories": {
        "error": null,
        "scope": null,
        "source": null,
        "findings": [],
        "collected": false,
        "malicious": [],
        "truncated": false,
        "by_severity": {},
        "advisory_count": 0,
        "affected_count": 0,
        "assessed_count": 0,
        "malicious_count": 0,
        "assessed_package": null,
        "unassessed_count": 0,
        "direct_affected_count": 0
      },
      "ecosystems": [
        "npm",
        "pypi"
      ],
      "dependencies": [
        {
          "name": "https-proxy-agent",
          "manifest": "package.json",
          "ecosystem": "npm",
          "version_constraint": "^9.1.0"
        },
        {
          "name": "undici",
          "manifest": "package.json",
          "ecosystem": "npm",
          "version_constraint": "^8.5.0"
        },
        {
          "name": "openai",
          "manifest": "pyproject.toml",
          "ecosystem": "pypi",
          "version_constraint": ">=1.0"
        },
        {
          "name": "httpx",
          "manifest": "pyproject.toml",
          "ecosystem": "pypi",
          "version_constraint": ">=0.27"
        }
      ],
      "all_dependencies": {
        "error": "GitHub dependency-graph SBOM unavailable (404); the dependency graph may be disabled for this repository",
        "source": null,
        "packages": [],
        "collected": false,
        "truncated": false,
        "total_count": null,
        "direct_count": null,
        "indirect_count": null
      }
    },
    "maintainership": {
      "issues": {
        "open_prs": 0,
        "merged_prs": 0,
        "open_issues": 0,
        "closed_ratio": null,
        "closed_issues": 0,
        "closed_unmerged_prs": 0
      },
      "bus_factor": null,
      "bot_contributors": 0,
      "top_contributors": [],
      "contributors_sampled": null,
      "top_contributor_share": null
    },
    "quality_signals": {
      "has_ci": false,
      "has_tests": true,
      "ci_workflows": [],
      "has_docs_dir": false,
      "linter_configs": [],
      "has_editorconfig": false,
      "has_linter_config": false,
      "has_precommit_config": false
    },
    "security_signals": {
      "lockfiles": [
        "package-lock.json"
      ],
      "scorecard": {
        "checks": [
          {
            "name": "Binary-Artifacts",
            "score": 10,
            "reason": "no binaries found in the repo",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#binary-artifacts"
          },
          {
            "name": "Branch-Protection",
            "score": 0,
            "reason": "branch protection not enabled on development/release branches",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#branch-protection"
          },
          {
            "name": "CI-Tests",
            "score": null,
            "reason": "no pull request found",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#ci-tests"
          },
          {
            "name": "CII-Best-Practices",
            "score": 0,
            "reason": "no effort to earn an OpenSSF best practices badge detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#cii-best-practices"
          },
          {
            "name": "Code-Review",
            "score": 0,
            "reason": "Found 0/30 approved changesets -- score normalized to 0",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#code-review"
          },
          {
            "name": "Contributors",
            "score": 0,
            "reason": "project has 0 contributing companies or organizations -- score normalized to 0",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#contributors"
          },
          {
            "name": "Dangerous-Workflow",
            "score": null,
            "reason": "no workflows found",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#dangerous-workflow"
          },
          {
            "name": "Dependency-Update-Tool",
            "score": 0,
            "reason": "no update tool detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#dependency-update-tool"
          },
          {
            "name": "Fuzzing",
            "score": 0,
            "reason": "project is not fuzzed",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#fuzzing"
          },
          {
            "name": "License",
            "score": 10,
            "reason": "license file detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#license"
          },
          {
            "name": "Maintained",
            "score": 0,
            "reason": "project was created within the last 90 days. Please review its contents carefully",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#maintained"
          },
          {
            "name": "Packaging",
            "score": null,
            "reason": "packaging workflow not detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#packaging"
          },
          {
            "name": "Pinned-Dependencies",
            "score": null,
            "reason": "no dependencies found",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#pinned-dependencies"
          },
          {
            "name": "SAST",
            "score": 0,
            "reason": "no SAST tool detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#sast"
          },
          {
            "name": "Security-Policy",
            "score": 0,
            "reason": "security policy file not detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#security-policy"
          },
          {
            "name": "Signed-Releases",
            "score": null,
            "reason": "no releases found",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#signed-releases"
          },
          {
            "name": "Token-Permissions",
            "score": null,
            "reason": "No tokens found",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#token-permissions"
          },
          {
            "name": "Vulnerabilities",
            "score": 10,
            "reason": "0 existing vulnerabilities detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#vulnerabilities"
          }
        ],
        "commit": "06ce16c64dc6aff0ede4472a41c6cf736738bdf2",
        "ran_at": "2026-07-21T22:45:47Z",
        "aggregate_score": 2.6,
        "scorecard_version": "v5.5.0"
      },
      "has_codeql_workflow": false,
      "has_security_policy": false,
      "has_dependabot_config": false
    },
    "contribution_flow": {
      "collected": true,
      "ci_last_run_at": "2026-07-17T04:25:57Z",
      "oldest_open_prs": [],
      "last_merged_pr_at": null,
      "ci_last_conclusion": null,
      "oldest_open_issues": []
    }
  },
  "config": {
    "disabled_metrics": [],
    "disabled_categories": [],
    "disabled_components": {}
  },
  "source": {
    "url": "https://github.com/CHNAICORP/cortx",
    "host": "github.com",
    "name": "cortx",
    "owner": "CHNAICORP"
  },
  "metrics": {
    "overall": {
      "key": "overall",
      "band": "at_risk",
      "name": "Overall health",
      "note": null,
      "notes": [],
      "value": 46,
      "inputs": {
        "security": 26,
        "vitality": 67,
        "community": 41,
        "governance": 47,
        "engineering": 44
      },
      "components": []
    },
    "categories": [
      {
        "key": "vitality",
        "band": "moderate",
        "name": "Vitality",
        "value": 67,
        "weight": 0.22,
        "metrics": [
          {
            "key": "development_activity",
            "band": "moderate",
            "name": "Development activity",
            "note": null,
            "notes": [],
            "value": 56,
            "inputs": {
              "commits_last_year": 115,
              "human_commit_share": 1,
              "days_since_last_push": 4,
              "active_weeks_last_year": 3
            },
            "components": [
              {
                "key": "push_recency",
                "name": "Push recency",
                "detail": "last push 4 days ago",
                "points": 36,
                "status": "met",
                "details": [
                  {
                    "code": "push_recency",
                    "params": {
                      "days": 4
                    }
                  }
                ],
                "max_points": 36
              },
              {
                "key": "commit_cadence",
                "name": "Commit cadence",
                "detail": "3/52 weeks with commits",
                "points": 2.1,
                "status": "partial",
                "details": [
                  {
                    "code": "commit_cadence_weeks",
                    "params": {
                      "weeks": 3
                    }
                  }
                ],
                "max_points": 36
              },
              {
                "key": "commit_volume",
                "name": "Commit volume",
                "detail": "115 commits in the last year",
                "points": 18,
                "status": "met",
                "details": [
                  {
                    "code": "commits_last_year",
                    "params": {
                      "count": 115
                    }
                  }
                ],
                "max_points": 18
              },
              {
                "key": "openssf_scorecard_maintained",
                "name": "OpenSSF Scorecard: Maintained",
                "detail": "project was created within the last 90 days. Please review its contents carefully",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 10
              }
            ]
          },
          {
            "key": "release_discipline",
            "band": "good",
            "name": "Release discipline",
            "note": "Excluded from scoring (no data or not applicable): OpenSSF Scorecard: Signed-Releases. Remaining weights renormalized.",
            "notes": [
              {
                "code": "excluded_no_data",
                "params": {
                  "components": [
                    "openssf_scorecard_signed_releases"
                  ]
                }
              },
              {
                "code": "weights_renormalized",
                "params": {}
              }
            ],
            "value": 84,
            "inputs": {
              "releases_count": 1,
              "latest_release_tag": "v1.0.31",
              "releases_from_tags": false,
              "days_since_latest_release": 18,
              "mean_days_between_releases": null
            },
            "components": [
              {
                "key": "ships_releases",
                "name": "Ships releases",
                "detail": "1 releases published",
                "points": 27,
                "status": "met",
                "details": [
                  {
                    "code": "releases_published",
                    "params": {
                      "count": 1
                    }
                  }
                ],
                "max_points": 27
              },
              {
                "key": "release_recency",
                "name": "Release recency",
                "detail": "latest release 18 days ago",
                "points": 36,
                "status": "met",
                "details": [
                  {
                    "code": "release_recency",
                    "params": {
                      "days": 18
                    }
                  }
                ],
                "max_points": 36
              },
              {
                "key": "release_cadence",
                "name": "Release cadence",
                "detail": "cadence unknown (single release)",
                "points": 12.6,
                "status": "partial",
                "details": [
                  {
                    "code": "release_cadence_unknown",
                    "params": {}
                  }
                ],
                "max_points": 27
              },
              {
                "key": "openssf_scorecard_signed_releases",
                "name": "OpenSSF Scorecard: Signed-Releases",
                "detail": "no releases found",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "no_data",
                    "params": {}
                  }
                ],
                "max_points": 10
              }
            ]
          },
          {
            "key": "abandonment",
            "band": "excellent",
            "name": "Abandonment",
            "note": null,
            "notes": [],
            "value": 100,
            "inputs": {
              "cap": null,
              "state": "unverified",
              "guards": [],
              "signals": [],
              "red_flag": false,
              "multiplier_pct": 100,
              "declared_reason": null,
              "unverified_reason": "repository_too_young",
              "unanswered_open_prs": null,
              "unanswered_open_issues": null,
              "days_since_last_merged_pr": null,
              "days_since_last_human_commit": null,
              "days_since_last_human_commit_is_floor": false
            },
            "components": [
              {
                "key": "project_is_still_maintained",
                "name": "Project is still maintained",
                "detail": "maintenance record not established from the collected data",
                "points": 100,
                "status": "met",
                "details": [
                  {
                    "code": "abandonment_unverified",
                    "params": {}
                  }
                ],
                "max_points": 100
              }
            ]
          }
        ],
        "description": "Is the project alive — is code being written and are releases shipping?"
      },
      {
        "key": "community",
        "band": "at_risk",
        "name": "Community & Adoption",
        "value": 41,
        "weight": 0.18,
        "metrics": [
          {
            "key": "popularity",
            "band": "critical",
            "name": "Popularity & adoption",
            "note": null,
            "notes": [],
            "value": 1,
            "inputs": {
              "forks": 0,
              "stars": 0,
              "watchers": 0,
              "growth_state": "unverified",
              "growth_factor_pct": 100,
              "growth_unverified_reason": "no_history"
            },
            "components": [
              {
                "key": "stars",
                "name": "Stars",
                "detail": "0 stars",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "stars",
                    "params": {
                      "count": 0
                    }
                  }
                ],
                "max_points": 60
              },
              {
                "key": "forks",
                "name": "Forks",
                "detail": "0 forks",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "forks",
                    "params": {
                      "count": 0
                    }
                  }
                ],
                "max_points": 25
              },
              {
                "key": "watchers",
                "name": "Watchers",
                "detail": "0 watchers",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "watchers",
                    "params": {
                      "count": 0
                    }
                  }
                ],
                "max_points": 15
              }
            ]
          },
          {
            "key": "community_health",
            "band": "good",
            "name": "Community health",
            "note": null,
            "notes": [],
            "value": 70,
            "inputs": {
              "has_readme": true,
              "has_license": true,
              "has_contributing": true,
              "has_issue_template": false,
              "has_code_of_conduct": false,
              "has_pull_request_template": false
            },
            "components": [
              {
                "key": "readme",
                "name": "README",
                "detail": null,
                "points": 22.5,
                "status": "met",
                "details": [],
                "max_points": 22.5
              },
              {
                "key": "license",
                "name": "License",
                "detail": "recognized license (MIT)",
                "points": 22.5,
                "status": "met",
                "details": [
                  {
                    "code": "license_standard",
                    "params": {}
                  },
                  {
                    "code": "license_spdx",
                    "params": {
                      "spdx": "MIT"
                    }
                  }
                ],
                "max_points": 22.5
              },
              {
                "key": "contributing_guide",
                "name": "CONTRIBUTING guide",
                "detail": null,
                "points": 18,
                "status": "met",
                "details": [],
                "max_points": 18
              },
              {
                "key": "code_of_conduct",
                "name": "Code of conduct",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 13.5
              },
              {
                "key": "issue_template",
                "name": "Issue template",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.2
              },
              {
                "key": "pr_template",
                "name": "PR template",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 6.3
              }
            ]
          },
          {
            "key": "ecosystem_adoption",
            "band": "moderate",
            "name": "Ecosystem adoption (downloads)",
            "note": "Excluded from scoring (no data or not applicable): Registry dependents. Remaining weights renormalized.",
            "notes": [
              {
                "code": "excluded_no_data",
                "params": {
                  "components": [
                    "registry_dependents"
                  ]
                }
              },
              {
                "code": "weights_renormalized",
                "params": {}
              }
            ],
            "value": 66,
            "inputs": {
              "packages": [
                "@chnaicorp/cortx",
                "cortx"
              ],
              "dependents": null,
              "ecosystems": "npm, pypi",
              "total_downloads": null,
              "monthly_downloads": 8726
            },
            "components": [
              {
                "key": "monthly_downloads",
                "name": "Monthly downloads",
                "detail": "8,726 downloads/month across npm, pypi",
                "points": 52.5,
                "status": "partial",
                "details": [
                  {
                    "code": "downloads_monthly",
                    "params": {
                      "count": 8726,
                      "ecosystems": "npm, pypi"
                    }
                  }
                ],
                "max_points": 80
              },
              {
                "key": "registry_dependents",
                "name": "Registry dependents",
                "detail": "not reported by this ecosystem",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "not_reported_by_this_ecosystem",
                    "params": {}
                  }
                ],
                "max_points": 20
              }
            ]
          }
        ],
        "description": "Does the project have users, downloads, attention, and a welcoming setup for contributors?"
      },
      {
        "key": "governance",
        "band": "at_risk",
        "name": "Sustainability & Governance",
        "value": 47,
        "weight": 0.24,
        "metrics": [
          {
            "key": "responsiveness",
            "band": "critical",
            "name": "Issue & PR responsiveness",
            "note": "Excluded from scoring (no data or not applicable): Issue resolution, PR acceptance. Remaining weights renormalized.",
            "notes": [
              {
                "code": "excluded_no_data",
                "params": {
                  "components": [
                    "issue_resolution",
                    "pr_acceptance"
                  ]
                }
              },
              {
                "code": "weights_renormalized",
                "params": {}
              }
            ],
            "value": 1,
            "inputs": {
              "merged_prs": 0,
              "open_issues": 0,
              "closed_issues": 0,
              "issue_closed_ratio": null,
              "closed_unmerged_prs": 0
            },
            "components": [
              {
                "key": "issue_resolution",
                "name": "Issue resolution",
                "detail": "no issues or no data",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "no_issues_or_data",
                    "params": {}
                  }
                ],
                "max_points": 46.75
              },
              {
                "key": "pr_acceptance",
                "name": "PR acceptance",
                "detail": "no decided pull requests or no data",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "no_decided_prs_or_data",
                    "params": {}
                  }
                ],
                "max_points": 38.25
              },
              {
                "key": "openssf_scorecard_code_review",
                "name": "OpenSSF Scorecard: Code-Review",
                "detail": "Found 0/30 approved changesets -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 15
              }
            ]
          },
          {
            "key": "stewardship",
            "band": "moderate",
            "name": "Ownership & stewardship",
            "note": "Excluded from scoring (no data or not applicable): Verified domain. Remaining weights renormalized.",
            "notes": [
              {
                "code": "excluded_no_data",
                "params": {
                  "components": [
                    "verified_domain"
                  ]
                }
              },
              {
                "code": "weights_renormalized",
                "params": {}
              }
            ],
            "value": 51,
            "inputs": {
              "followers": 14,
              "owner_type": "User",
              "is_verified": null,
              "owner_login": "CHNAICORP",
              "public_repos": 26,
              "account_age_days": 2336
            },
            "components": [
              {
                "key": "ownership_backing",
                "name": "Ownership backing",
                "detail": "personal (user) account",
                "points": 10,
                "status": "partial",
                "details": [
                  {
                    "code": "owner_personal",
                    "params": {}
                  }
                ],
                "max_points": 30
              },
              {
                "key": "verified_domain",
                "name": "Verified domain",
                "detail": "not applicable to user accounts",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "not_applicable_to_user_accounts",
                    "params": {}
                  }
                ],
                "max_points": 20
              },
              {
                "key": "owner_reach",
                "name": "Owner reach",
                "detail": "14 followers of CHNAICORP",
                "points": 8.5,
                "status": "partial",
                "details": [
                  {
                    "code": "owner_followers",
                    "params": {
                      "count": 14,
                      "login": "CHNAICORP"
                    }
                  }
                ],
                "max_points": 25
              },
              {
                "key": "track_record",
                "name": "Track record",
                "detail": "26 public repos, account ~6 yr old",
                "points": 22.4,
                "status": "partial",
                "details": [
                  {
                    "code": "public_repos",
                    "params": {
                      "count": 26
                    }
                  },
                  {
                    "code": "account_age_years",
                    "params": {
                      "years": 6
                    }
                  }
                ],
                "max_points": 25
              }
            ]
          },
          {
            "key": "package_maintenance",
            "band": "excellent",
            "name": "Package maintenance",
            "note": null,
            "notes": [],
            "value": 100,
            "inputs": {
              "packages": [
                "@chnaicorp/cortx",
                "cortx"
              ],
              "ecosystems": "npm, pypi",
              "any_deprecated": false,
              "min_days_since_publish": 4
            },
            "components": [
              {
                "key": "published_resolvable",
                "name": "Published & resolvable",
                "detail": "2 package(s) on npm, pypi",
                "points": 25,
                "status": "met",
                "details": [
                  {
                    "code": "packages_published",
                    "params": {
                      "count": 2,
                      "ecosystems": "npm, pypi"
                    }
                  }
                ],
                "max_points": 25
              },
              {
                "key": "publish_recency",
                "name": "Publish recency",
                "detail": "latest publish 4 days ago",
                "points": 35,
                "status": "met",
                "details": [
                  {
                    "code": "publish_recency",
                    "params": {
                      "days": 4
                    }
                  }
                ],
                "max_points": 35
              },
              {
                "key": "version_history",
                "name": "Version history",
                "detail": "55 published versions",
                "points": 20,
                "status": "met",
                "details": [
                  {
                    "code": "published_versions",
                    "params": {
                      "count": 55
                    }
                  }
                ],
                "max_points": 20
              },
              {
                "key": "not_deprecated",
                "name": "Not deprecated",
                "detail": "active, not deprecated or yanked",
                "points": 20,
                "status": "met",
                "details": [
                  {
                    "code": "package_not_deprecated",
                    "params": {}
                  }
                ],
                "max_points": 20
              }
            ]
          }
        ],
        "description": "Will the project survive its people — bus factor, responsiveness, who backs it, and package upkeep?"
      },
      {
        "key": "engineering",
        "band": "at_risk",
        "name": "Engineering Quality",
        "value": 44,
        "weight": 0.2,
        "metrics": [
          {
            "key": "engineering_practices",
            "band": "at_risk",
            "name": "Engineering practices",
            "note": "Excluded from scoring (no data or not applicable): OpenSSF Scorecard: CI-Tests. Remaining weights renormalized.",
            "notes": [
              {
                "code": "excluded_no_data",
                "params": {
                  "components": [
                    "openssf_scorecard_ci_tests"
                  ]
                }
              },
              {
                "code": "weights_renormalized",
                "params": {}
              }
            ],
            "value": 30,
            "inputs": {
              "has_ci": false,
              "has_tests": true,
              "has_editorconfig": false,
              "has_linter_config": false,
              "has_precommit_config": false
            },
            "components": [
              {
                "key": "ci_workflows",
                "name": "CI workflows",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 24
              },
              {
                "key": "tests_present",
                "name": "Tests present",
                "detail": null,
                "points": 24,
                "status": "met",
                "details": [],
                "max_points": 24
              },
              {
                "key": "linter_config",
                "name": "Linter config",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 16
              },
              {
                "key": "pre_commit_hooks",
                "name": "Pre-commit hooks",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 9.6
              },
              {
                "key": "editorconfig",
                "name": ".editorconfig",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 6.4
              },
              {
                "key": "openssf_scorecard_ci_tests",
                "name": "OpenSSF Scorecard: CI-Tests",
                "detail": "no pull request found",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "no_data",
                    "params": {}
                  }
                ],
                "max_points": 20
              }
            ]
          },
          {
            "key": "documentation",
            "band": "moderate",
            "name": "Documentation",
            "note": null,
            "notes": [],
            "value": 65,
            "inputs": {
              "topics": [],
              "has_wiki": true,
              "homepage": "https://github.com/CHNAICORP/cortx",
              "has_readme": true,
              "has_docs_dir": false,
              "has_description": true
            },
            "components": [
              {
                "key": "readme",
                "name": "README",
                "detail": null,
                "points": 30,
                "status": "met",
                "details": [],
                "max_points": 30
              },
              {
                "key": "documentation_directory",
                "name": "Documentation directory",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 25
              },
              {
                "key": "documentation_homepage_site",
                "name": "Documentation / homepage site",
                "detail": "https://github.com/CHNAICORP/cortx",
                "points": 15,
                "status": "met",
                "details": [],
                "max_points": 15
              },
              {
                "key": "repository_description",
                "name": "Repository description",
                "detail": null,
                "points": 10,
                "status": "met",
                "details": [],
                "max_points": 10
              },
              {
                "key": "topics",
                "name": "Topics",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 10
              },
              {
                "key": "wiki",
                "name": "Wiki",
                "detail": null,
                "points": 10,
                "status": "met",
                "details": [],
                "max_points": 10
              }
            ]
          }
        ],
        "description": "Are baseline engineering and documentation practices in place?"
      },
      {
        "key": "security",
        "band": "critical",
        "name": "Security",
        "value": 26,
        "weight": 0.16,
        "metrics": [
          {
            "key": "security_posture",
            "band": "critical",
            "name": "Security posture",
            "note": "Excluded from scoring (no data or not applicable): CI-Tests, Dangerous-Workflow, Packaging, Pinned-Dependencies, Signed-Releases, Token-Permissions. Remaining weights renormalized.",
            "notes": [
              {
                "code": "excluded_no_data",
                "params": {
                  "components": [
                    "ci_tests",
                    "dangerous_workflow",
                    "packaging",
                    "pinned_dependencies",
                    "signed_releases",
                    "token_permissions"
                  ]
                }
              },
              {
                "code": "weights_renormalized",
                "params": {}
              }
            ],
            "value": 26,
            "inputs": {
              "source": "openssf_scorecard",
              "checks_evaluated": 12,
              "scorecard_version": "v5.5.0",
              "checks_inconclusive": 6,
              "scorecard_aggregate": 2.6
            },
            "components": [
              {
                "key": "binary_artifacts",
                "name": "Binary-Artifacts",
                "detail": "no binaries found in the repo",
                "points": 7.5,
                "status": "met",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "branch_protection",
                "name": "Branch-Protection",
                "detail": "branch protection not enabled on development/release branches",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "ci_tests",
                "name": "CI-Tests",
                "detail": "no pull request found",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "no_data",
                    "params": {}
                  }
                ],
                "max_points": 2.5
              },
              {
                "key": "cii_best_practices",
                "name": "CII-Best-Practices",
                "detail": "no effort to earn an OpenSSF best practices badge detected",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 2.5
              },
              {
                "key": "code_review",
                "name": "Code-Review",
                "detail": "Found 0/30 approved changesets -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "contributors",
                "name": "Contributors",
                "detail": "project has 0 contributing companies or organizations -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 2.5
              },
              {
                "key": "dangerous_workflow",
                "name": "Dangerous-Workflow",
                "detail": "no workflows found",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "no_data",
                    "params": {}
                  }
                ],
                "max_points": 10
              },
              {
                "key": "dependency_update_tool",
                "name": "Dependency-Update-Tool",
                "detail": "no update tool detected",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "fuzzing",
                "name": "Fuzzing",
                "detail": "project is not fuzzed",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 5
              },
              {
                "key": "license",
                "name": "License",
                "detail": "license file detected",
                "points": 2.5,
                "status": "met",
                "details": [],
                "max_points": 2.5
              },
              {
                "key": "maintained",
                "name": "Maintained",
                "detail": "project was created within the last 90 days. Please review its contents carefully",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "packaging",
                "name": "Packaging",
                "detail": "packaging workflow not detected",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "no_data",
                    "params": {}
                  }
                ],
                "max_points": 5
              },
              {
                "key": "pinned_dependencies",
                "name": "Pinned-Dependencies",
                "detail": "no dependencies found",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "no_data",
                    "params": {}
                  }
                ],
                "max_points": 5
              },
              {
                "key": "sast",
                "name": "SAST",
                "detail": "no SAST tool detected",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 5
              },
              {
                "key": "security_policy",
                "name": "Security-Policy",
                "detail": "security policy file not detected",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 5
              },
              {
                "key": "signed_releases",
                "name": "Signed-Releases",
                "detail": "no releases found",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "no_data",
                    "params": {}
                  }
                ],
                "max_points": 7.5
              },
              {
                "key": "token_permissions",
                "name": "Token-Permissions",
                "detail": "No tokens found",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "no_data",
                    "params": {}
                  }
                ],
                "max_points": 7.5
              },
              {
                "key": "vulnerabilities",
                "name": "Vulnerabilities",
                "detail": "0 existing vulnerabilities detected",
                "points": 7.5,
                "status": "met",
                "details": [],
                "max_points": 7.5
              }
            ]
          }
        ],
        "description": "Are visible security and supply-chain practices strong, with no malicious dependency and no unresolved high-risk jurisdiction exposure?"
      },
      {
        "key": "ai_readiness",
        "band": "at_risk",
        "name": "AI Readiness",
        "value": 48,
        "weight": 0,
        "metrics": [
          {
            "key": "ai_agent_context",
            "band": "critical",
            "name": "Agent context & guidance",
            "note": null,
            "notes": [],
            "value": 17,
            "inputs": {
              "has_llms_txt": false,
              "legible_history_share": 0.32,
              "agent_instruction_files": [],
              "agent_instruction_max_bytes": null
            },
            "components": [
              {
                "key": "agent_instructions",
                "name": "Agent instructions",
                "detail": "no CLAUDE.md / AGENTS.md / editor rules",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "no_agent_instructions",
                    "params": {}
                  }
                ],
                "max_points": 45
              },
              {
                "key": "machine_readable_docs_llms_txt",
                "name": "Machine-readable docs (llms.txt)",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 15
              },
              {
                "key": "legible_commit_history",
                "name": "Legible commit history",
                "detail": "32 of 100 human commits state their intent (structured subject or explanatory body)",
                "points": 17.1,
                "status": "partial",
                "details": [
                  {
                    "code": "legible_history",
                    "params": {
                      "legible": 32,
                      "sampled": 100
                    }
                  }
                ],
                "max_points": 40
              }
            ]
          },
          {
            "key": "ai_verify_loop",
            "band": "moderate",
            "name": "Verify loop (build / test / typecheck)",
            "note": "Excluded from scoring (no data or not applicable): OpenSSF Scorecard: Pinned-Dependencies. Remaining weights renormalized.",
            "notes": [
              {
                "code": "excluded_no_data",
                "params": {
                  "components": [
                    "openssf_scorecard_pinned_dependencies"
                  ]
                }
              },
              {
                "code": "weights_renormalized",
                "params": {}
              }
            ],
            "value": 59,
            "inputs": {
              "has_nix": false,
              "has_tests": true,
              "lockfiles": [
                "package-lock.json"
              ],
              "has_dockerfile": false,
              "typed_language": false,
              "bootstrap_files": [],
              "has_devcontainer": false,
              "has_linter_config": false,
              "typecheck_configs": [
                "tsconfig.json"
              ],
              "agent_commit_share": 0.21,
              "toolchain_manifests": [],
              "dependency_bot_commit_share": 0
            },
            "components": [
              {
                "key": "one_command_bootstrap",
                "name": "One-command bootstrap",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 18
              },
              {
                "key": "automated_tests",
                "name": "Automated tests",
                "detail": null,
                "points": 22,
                "status": "met",
                "details": [],
                "max_points": 22
              },
              {
                "key": "lint_format_config",
                "name": "Lint / format config",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 11
              },
              {
                "key": "static_type_checking",
                "name": "Static type checking",
                "detail": "tsconfig.json",
                "points": 11,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": "tsconfig.json"
                    }
                  }
                ],
                "max_points": 11
              },
              {
                "key": "reproducible_environment",
                "name": "Reproducible environment",
                "detail": "lockfile",
                "points": 10,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": "lockfile"
                    }
                  }
                ],
                "max_points": 10
              },
              {
                "key": "demonstrated_agent_practice",
                "name": "Demonstrated agent practice",
                "detail": "21 of the last 100 commits agent-authored or agent-credited",
                "points": 10,
                "status": "met",
                "details": [
                  {
                    "code": "agent_authored_commits",
                    "params": {
                      "count": 21,
                      "sampled": 100
                    }
                  }
                ],
                "max_points": 10
              },
              {
                "key": "automated_maintenance",
                "name": "Automated maintenance",
                "detail": "no automated dependency updates observed",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "no_dependency_automation",
                    "params": {}
                  }
                ],
                "max_points": 8
              },
              {
                "key": "openssf_scorecard_pinned_dependencies",
                "name": "OpenSSF Scorecard: Pinned-Dependencies",
                "detail": "no dependencies found",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "no_data",
                    "params": {}
                  }
                ],
                "max_points": 10
              }
            ]
          },
          {
            "key": "ai_code_legibility",
            "band": "good",
            "name": "Code legibility for models",
            "note": null,
            "notes": [],
            "value": 79,
            "inputs": {
              "primary_language": "Python",
              "largest_source_bytes": 78114,
              "source_files_sampled": 43,
              "oversized_source_files": 2
            },
            "components": [
              {
                "key": "type_checkable_code",
                "name": "Type-checkable code",
                "detail": "Python with type-check config (tsconfig.json)",
                "points": 27,
                "status": "partial",
                "details": [
                  {
                    "code": "typecheck_config_language",
                    "params": {
                      "files": "tsconfig.json",
                      "language": "Python"
                    }
                  }
                ],
                "max_points": 45
              },
              {
                "key": "manageable_file_sizes",
                "name": "Manageable file sizes",
                "detail": "2/43 source files over 60KB",
                "points": 52.4,
                "status": "partial",
                "details": [
                  {
                    "code": "oversized_source_files",
                    "params": {
                      "kb": 60,
                      "sampled": 43,
                      "oversized": 2
                    }
                  }
                ],
                "max_points": 55
              }
            ]
          }
        ],
        "description": "How well is the repo equipped to be developed and maintained with AI coding agents? An independent, experimental badge — weight 0.0, so it is surfaced on its own and does not affect the overall health score."
      }
    ],
    "metrics_version": "1.13.0"
  },
  "warnings": [
    "Contributor list unavailable",
    "GitHub dependency-graph SBOM unavailable (404); the dependency graph may be disabled for this repository",
    "deps.dev does not index npm:@chnaicorp/cortx@2.5.2; advisories assessed against the repository dependency graph instead"
  ],
  "report_type": "repository",
  "generated_at": "2026-07-21T22:45:51.349584Z",
  "schema_version": "0.25.0",
  "badge_url": "https://raw.githubusercontent.com/inspect-software/badges/main/v1/c/CHNAICORP/cortx.svg",
  "full_name": "CHNAICORP/cortx",
  "license_state": "standard",
  "license_spdx": "MIT"
}

Las puntuaciones son señales, no garantías. Reflejan prácticas públicamente visibles en GitHub; no son una auditoría de código ni una garantía de seguridad.

Los datos ausentes se excluyen y los pesos se renormalizan; nunca se puntúan como cero. La metodología es versionada y abierta: métricas v1.13.0, esquema v0.25.0 — metodología completa · wiki de métricas.

Cómo se sitúa un resultado dentro del registro general: estadísticas agregadasnpm, PyPI.