Öffentliches Register
Software-GesundheitsberichtSchema 0.25.0 · Metriken 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 Sterne⑂ 0 Forksseit Juli 2026Auf GitHub ansehen ↗

CHNAICORP/cortx erreicht einen Gesundheitsindex von 46 von 100 und liegt damit im Bereich Gefährdet. Am stärksten schneidet es bei Vitality (67/100) ab, am schwächsten bei Security (26/100). Zuletzt vor 4 Tagen aktualisiert.

46
gesamt / 100
Gefährdet

Software-Gesundheitsindex

Metriken werden auf einer Skala von 1–100 in gewichtete Kategorien gruppiert. Der Gesamtwert beginnt als ihr Mittel; sobald öffentliche Evidenz die Richtlinie für Hochrisikojurisdiktionen auslöst, wird die Bewertung angepasst und erhält die Obergrenze 49 (Gefährdet). AI Readiness liegt außerhalb.

46
Exzellent85-100Vorbildlich; erfüllt im Wesentlichen alle geprüften Kriterien
Gut70-84Gesund; geringfügige Lücken
Mittel50-69Akzeptabel mit deutlichen Lücken; Überprüfung empfohlen
Gefährdet30-49Erhebliche Schwächen; eine Übernahme erfordert Vorsicht
Kritisch1-29Schwerwiegende Probleme (aufgegeben, nur ein Maintainer, keine Hygiene)
VitalitätCommunity &VerbreitungNachhaltigkeit &GovernanceEngineering-QualitätSicherheitAI Readiness

Bewertungsprofil

Jede Achse ist eine Kategorie. Die Form zählt mehr als der Durchschnitt — ein gesundes Projekt füllt die gesamte Fläche, während ein Profil aus Spitzen und Kratern bedeutet, dass Stärke in einer Dimension Risiken in einer anderen verdeckt.

Eigentümerschaft

aicatmiPersönliches Konto
14 Follower26 öffentliche Reposseit Feb. 2020Iristar.com

Dieses Repository gehört einem persönlichen Konto. Ein Projekt mit nur einem Eigentümer trägt ein höheres Kontinuitätsrisiko als ein organisationsgetragenes.

Paket-Ökosysteme

RegistryPaketVersionDownloads / MonatVersionenZuletzt veröffentlichtTags
npm@chnaicorp/cortx2.5.28.72647vor 4 Tagenai-agentllmagent-frameworkharnessagentic-loopmcpcli
PyPIcortx2.5.2-55vor 4 Tagenai-agentllmagent-frameworkharnessagentic-loopmcpbrowser-automation

Metriken nach Kategorie

Vitalität

Lebt das Projekt — wird Code geschrieben und werden Releases ausgeliefert?

67Mittel · 22 % des Gesamtindex
Wie die Bewertung erfolgt
36/36Push-Aktualität — letzter Push vor 4 Tagen
2.1/36Commit-Rhythmus — 3/52 Wochen mit Commits
18/18Commit-Volumen — 115 Commits im letzten Jahr
0/10OpenSSF Scorecard: Maintained — project was created within the last 90 days. Please review its contents carefully
Verwendete Eingangsdaten
commits_last_year115
human_commit_share1
days_since_last_push4
active_weeks_last_year3
Wie die Bewertung erfolgt
27/27Liefert Releases aus — 1 Releases veröffentlicht
36/36Release-Aktualität — letztes Release vor 18 Tagen
12.6/27Release-Rhythmus — Rhythmus unbekannt (nur ein Release)
0/10OpenSSF Scorecard: Signed-Releases — keine Daten
Verwendete Eingangsdaten
releases_count1
latest_release_tagv1.0.31
releases_from_tagsnein
days_since_latest_release18
mean_days_between_releases
Von der Bewertung ausgeschlossen (keine Daten oder nicht anwendbar): OpenSSF Scorecard: Signed-Releases. Die verbleibenden Gewichte wurden renormalisiert.

Community & Verbreitung

Hat das Projekt Nutzer, Downloads, Aufmerksamkeit und ein einladendes Umfeld für Beitragende?

41Gefährdet · 18 % des Gesamtindex
Wie die Bewertung erfolgt
0/60Stars — 0 Stars
0/25Forks — 0 Forks
0/15Watcher — 0 Watcher
Verwendete Eingangsdaten
forks0
stars0
watchers0
growth_stateunverified
growth_factor_pct100
growth_unverified_reasonno_history
Wie die Bewertung erfolgt
22.5/22.5README
22.5/22.5Lizenz — anerkannte Lizenz (MIT)
18/18CONTRIBUTING-Leitfaden
0/13.5Verhaltenskodex
0/7.2Issue-Vorlage
0/6.3PR-Vorlage
Verwendete Eingangsdaten
has_readmeja
has_licenseja
has_contributingja
has_issue_templatenein
has_code_of_conductnein
has_pull_request_templatenein
Wie die Bewertung erfolgt
52.5/80Downloads pro Monat — 8.726 Downloads/Monat über npm, pypi
0/20Abhängige in der Registry — von diesem Ökosystem nicht ausgewiesen
Verwendete Eingangsdaten
packages@chnaicorp/cortx, cortx
dependents
ecosystemsnpm, pypi
total_downloads
monthly_downloads8.726
Von der Bewertung ausgeschlossen (keine Daten oder nicht anwendbar): Abhängige in der Registry. Die verbleibenden Gewichte wurden renormalisiert.

Nachhaltigkeit & Governance

Überdauert das Projekt die Menschen, die es tragen — Bus-Faktor, Reaktionsfähigkeit, Trägerschaft und Paketpflege?

47Gefährdet · 24 % des Gesamtindex
Wie die Bewertung erfolgt
0/46.8Issue-Lösungsquote — keine Issues oder keine Daten
0/38.3PR-Annahme — keine entschiedenen Pull Requests oder keine Daten
0/15OpenSSF Scorecard: Code-Review — Found 0/30 approved changesets -- score normalized to 0
Verwendete Eingangsdaten
merged_prs0
open_issues0
closed_issues0
issue_closed_ratio
closed_unmerged_prs0
Von der Bewertung ausgeschlossen (keine Daten oder nicht anwendbar): Issue-Lösungsquote, PR-Annahme. Die verbleibenden Gewichte wurden renormalisiert.
Wie die Bewertung erfolgt
10/30Organisatorische Trägerschaft — persönliches (Nutzer-)Konto
0/20Verifizierte Domain — für Nutzerkonten nicht anwendbar
8.5/25Reichweite des Inhabers — 14 Follower von CHNAICORP
22.4/25Kontohistorie — 26 öffentliche Repos, Kontoalter ca. 6 Jahre
Verwendete Eingangsdaten
followers14
owner_typeUser
is_verified
owner_loginCHNAICORP
public_repos26
account_age_days2.336
Von der Bewertung ausgeschlossen (keine Daten oder nicht anwendbar): Verifizierte Domain. Die verbleibenden Gewichte wurden renormalisiert.

Paketpflege

100Exzellent
Wie die Bewertung erfolgt
25/25Veröffentlicht & auflösbar — 2 Paket(e) auf npm, pypi
35/35Veröffentlichungsaktualität — letzte Veröffentlichung vor 4 Tagen
20/20Versionshistorie — 55 veröffentlichte Versionen
20/20Nicht veraltet — aktiv, nicht veraltet oder zurückgezogen
Verwendete Eingangsdaten
packages@chnaicorp/cortx, cortx
ecosystemsnpm, pypi
any_deprecatednein
min_days_since_publish4

Engineering-Qualität

Sind grundlegende Engineering- und Dokumentationspraktiken vorhanden?

44Gefährdet · 20 % des Gesamtindex
Wie die Bewertung erfolgt
0/24CI-Workflows
24/24Tests vorhanden
0/16Linter-Konfiguration
0/9.6Pre-Commit-Hooks
0/6.4.editorconfig
0/20OpenSSF Scorecard: CI-Tests — keine Daten
Verwendete Eingangsdaten
has_cinein
has_testsja
has_editorconfignein
has_linter_confignein
has_precommit_confignein
Von der Bewertung ausgeschlossen (keine Daten oder nicht anwendbar): OpenSSF Scorecard: CI-Tests. Die verbleibenden Gewichte wurden renormalisiert.
Wie die Bewertung erfolgt
30/30README
0/25Dokumentationsverzeichnis
15/15Dokumentations-/Homepage-Site — https://github.com/CHNAICORP/cortx
10/10Repository-Beschreibung
0/10Topics
10/10Wiki
Verwendete Eingangsdaten
topics
has_wikija
homepagehttps://github.com/CHNAICORP/cortx
has_readmeja
has_docs_dirnein
has_descriptionja

Sicherheit

Sind die sichtbaren Sicherheits- und Lieferkettenpraktiken belastbar, ohne ungeklärte Exposition gegenüber Hochrisikojurisdiktionen?

26Kritisch · 16 % des Gesamtindex

Sicherheitslage

26Kritisch
Wie die Bewertung erfolgt
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 — keine Daten
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 — keine Daten
0/7.5Dependency-Update-Tool — no update tool detected
0/5Fuzzing — project is not fuzzed
2.5/2.5Lizenz — license file detected
0/7.5Maintained — project was created within the last 90 days. Please review its contents carefully
0/5Packaging — keine Daten
0/5Pinned-Dependencies — keine Daten
0/5SAST — no SAST tool detected
0/5Security-Policy — security policy file not detected
0/7.5Signed-Releases — keine Daten
0/7.5Token-Permissions — keine Daten
7.5/7.5Vulnerabilities — 0 existing vulnerabilities detected
Verwendete Eingangsdaten
sourceopenssf_scorecard
checks_evaluated12
scorecard_versionv5.5.0
checks_inconclusive6
scorecard_aggregate2,6
Von der Bewertung ausgeschlossen (keine Daten oder nicht anwendbar): ci_tests, dangerous_workflow, packaging, pinned_dependencies, signed_releases, token_permissions. Die verbleibenden Gewichte wurden renormalisiert.

AI Readiness

Wie gut ist das Repository dafür ausgestattet, mit KI-Coding-Agenten entwickelt und gepflegt zu werden? Ein unabhängiges, experimentelles Badge — Gewicht 0,0, es wird eigenständig ausgewiesen und verändert den Gesamt-Gesundheitswert nicht.

48Gefährdet · 0 % des Gesamtindex
Wie die Bewertung erfolgt
0/45Agentenanweisungen — keine CLAUDE.md / AGENTS.md / Editor-Regeln
0/15Maschinenlesbare Doku (llms.txt)
17.1/40Lesbare Commit-Historie — 32 von 100 menschlichen Commits benennen ihre Absicht (strukturierter Betreff oder erläuternder Text)
Verwendete Eingangsdaten
has_llms_txtnein
legible_history_share0,32
agent_instruction_files
agent_instruction_max_bytes
Wie die Bewertung erfolgt
0/18Bootstrap mit einem Befehl
22/22Automatisierte Tests
0/11Lint-/Format-Konfiguration
11/11Statische Typprüfung — tsconfig.json
10/10Reproduzierbare Umgebung — lockfile
10/10Belegte Agentenpraxis — 21 der letzten 100 Commits von Agenten verfasst oder ihnen zugeschrieben
0/8Automatisierte Wartung — keine automatisierten Abhängigkeits-Updates beobachtet
0/10OpenSSF Scorecard: Pinned-Dependencies — keine Daten
Verwendete Eingangsdaten
has_nixnein
has_testsja
lockfilespackage-lock.json
has_dockerfilenein
typed_languagenein
bootstrap_files
has_devcontainernein
has_linter_confignein
typecheck_configstsconfig.json
agent_commit_share0,21
toolchain_manifests
dependency_bot_commit_share0
Von der Bewertung ausgeschlossen (keine Daten oder nicht anwendbar): OpenSSF Scorecard: Pinned-Dependencies. Die verbleibenden Gewichte wurden renormalisiert.
Wie die Bewertung erfolgt
27/45Typprüfbarer Code — Python mit Typprüfungs-Konfiguration (tsconfig.json)
52.4/55Handhabbare Dateigrößen — 2/43 Quelldateien über 60 KB
Verwendete Eingangsdaten
primary_languagePython
largest_source_bytes78.114
source_files_sampled43
oversized_source_files2

Eckdaten

0GitHub-Sterne
-Mitwirkende
115Commits, letzte 12 Monate
4Tage seit letztem Push
1Releases
-Bus-Faktor
0offene Issues
npm, PyPIPaket-Ökosysteme

Warnungen zur Datenerhebung

  • 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

Weitere Details

OpenSSF Scorecard 2.6 / 10
2.6Gesamtwert

Unabhängige, werkzeugneutrale Sicherheitsbewertung durch das quelloffene OpenSSF Scorecard. Jede Prüfung honoriert eine Sicherheits-Praxis, nicht das Werkzeug eines bestimmten Anbieters. Prüfungen, die Scorecard nicht ermitteln konnte, sind mit k. A. markiert und vom Sicherheitswert ausgeschlossen (nie als null gezählt).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
k. A.CI-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
k. A.Dangerous-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
k. A.Packagingpackaging workflow not detected
k. A.Pinned-Dependenciesno dependencies found
0SASTno SAST tool detected
0Security-Policysecurity policy file not detected
k. A.Signed-Releasesno releases found
k. A.Token-PermissionsNo tokens found
10Vulnerabilities0 existing vulnerabilities detected
Direkte Abhängigkeiten 4
RegistryPaketVersionsvorgabeManifest
npmhttps-proxy-agent^9.1.0package.json
npmundici^8.5.0package.json
PyPIopenai>=1.0pyproject.toml
PyPIhttpx>=0.27pyproject.toml
Alle Abhängigkeiten nicht erhoben

Der aufgelöste Abhängigkeitssatz konnte für diesen Bericht nicht erhoben werden: GitHub dependency-graph SBOM unavailable (404); the dependency graph may be disabled for this repository

JSON-Rohbericht maschinenlesbar
{
  "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"
}

Bewertungen sind Signale, keine Garantien. Sie spiegeln öffentlich sichtbare Praxis auf GitHub wider — kein Code-Audit und keine Sicherheitsgarantie.

Fehlende Daten werden ausgeschlossen und die Gewichte neu normiert, nie als null bewertet. Die Methodik ist versioniert und offen: Metriken v1.13.0, Schema v0.25.0 — vollständige Methodik · Metriken-Wiki.

Wie ein einzelnes Ergebnis im Gesamtregister steht: aggregierte Statistikennpm, PyPI.