Звіт у форматі JSON машиночитний
{
"data": {
"repo": {
"topics": [
"agent",
"agent-orchestration",
"ai",
"ai-agent",
"ai-application",
"autogen-alternative",
"bilingual",
"chatbot",
"chinese-programming",
"claude",
"crewai-alternative",
"domain-specific-language",
"dsl",
"gpt",
"langchain-alternative",
"llm",
"multi-agent",
"natural-language-programming",
"programming-language",
"prompt-engineering"
],
"is_fork": false,
"size_kb": 43584,
"has_wiki": false,
"homepage": null,
"languages": {
"CSS": 2291,
"HTML": 363,
"Shell": 36892,
"Python": 3356401,
"JavaScript": 1402,
"TypeScript": 86387
},
"pushed_at": "2026-07-27T16:07:10Z",
"created_at": "2026-06-08T03:23:05Z",
"owner_type": "User",
"updated_at": "2026-07-27T09:48:12Z",
"description": "Helen Agent Develop Language ",
"is_archived": false,
"is_disabled": false,
"license_spdx": "MIT",
"default_branch": "master",
"license_spdx_raw": "MIT",
"primary_language": "Python",
"significant_languages": [
"Python"
]
},
"owner": {
"blog": null,
"name": null,
"type": "User",
"login": "hahalee000000",
"company": null,
"location": null,
"followers": 0,
"avatar_url": "https://avatars.githubusercontent.com/u/188537877?v=4",
"created_at": "2024-11-15T04:02:53Z",
"is_verified": null,
"public_repos": 5,
"account_age_days": 619
},
"license": {
"state": "standard",
"spdx_id": "MIT",
"raw_spdx": "MIT",
"file_present": true,
"scorecard_found": true,
"profile_has_license": true
},
"activity": {
"releases": [
{
"tag": "v1.25.2",
"kind": "patch",
"published_at": "2026-07-24T09:39:56Z"
},
{
"tag": "v1.25.1",
"kind": "patch",
"published_at": "2026-07-24T08:49:32Z"
},
{
"tag": "v1.25.0",
"kind": "minor",
"published_at": "2026-07-24T04:20:27Z"
}
],
"recent_commits": [
{
"oid": "741417fc0ca0ae76b3486132a9779ea9cabc673a",
"body": "Major improvements:\n- Compress CLAUDE.md from 280 lines to 161 lines (-43%, ~50% size reduction)\n- Sync 16 Helen skills to .claude/skills/ for on-demand loading\n- Clean up 6 duplicate keyword entries in helen/core/tokens.py\n- Remove obsolete test_helen_assistant.py (helen_assistant.helen removed in \n[…]\ntokens)\n- Better cache hit rate (more stable CLAUDE.md)\n- On-demand skill loading for focused context\n- Easier maintenance (skills update independently)\n\nCo-Authored-By: Claude <noreply@anthropic.com>",
"is_bot": false,
"headline": "v1.29.4: CLAUDE.md optimization + skills sync + tokens cleanup",
"author_name": "rxx",
"author_login": null,
"committed_at": "2026-07-27T16:07:00Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "4f8bcdb635bf21c63277e4d103ade55e395901f5",
"body": null,
"is_bot": false,
"headline": "bump: v1.29.3 - sync helenagent logo and Web UI design",
"author_name": "hahalee000000",
"author_login": null,
"committed_at": "2026-07-27T09:47:07Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "35a037f2583c632dd68be68c07da682e2c77e6dd",
"body": "- Add Helen logo (RGBA version) - helen.png\n- Add Web UI logo files: favicon.png, helen-logo-64.png, helen-logo-128.png\n- Integrate Helen logo into Web UI:\n * Browser favicon\n * Sidebar header with logo\n * Assistant message avatar\n * 'Helen 思考中...' indicator with breathing animation\n * Empty co\n[…]\n extra='ignore' to tolerate stale .env fields\n\nSynced from helenagent commits:\n- 9aa2266 chore: 更新 Helen logo(RGBA 版本)\n- 0be48be feat: 集成 Helen logo 到 Web UI\n- ac53a80 fix: Web UI 后端启动失败(ECONNREFUSED)",
"is_bot": false,
"headline": "sync: helenagent logo and Web UI design updates",
"author_name": "hahalee000000",
"author_login": null,
"committed_at": "2026-07-27T09:46:44Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "ec42794ae0e1823a057515dc7691f0f1c78e2891",
"body": null,
"is_bot": false,
"headline": "bump: v1.29.2 - runtime transcript control",
"author_name": "hahalee000000",
"author_login": null,
"committed_at": "2026-07-27T08:19:18Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "35f66dbb7f92a78456d3a648eb8abc709c9ba315",
"body": "- Add runtime support for agent transcript declarations (none/memory/persistent)\n- Modify _enter_invocation to accept transcript_level parameter\n- Update _call_agent to read agent.transcript and pass to invocation\n- Implement three-level transcript behavior in _add_to_history:\n * none: Don't write \n[…]\ns were creating\nsession files even when not needed. Now developers can explicitly control\ntranscript behavior per agent, with 'none' as the default to avoid\nunnecessary disk I/O and directory clutter.",
"is_bot": false,
"headline": "feat: implement runtime transcript control for agents (v1.29.2)",
"author_name": "hahalee000000",
"author_login": null,
"committed_at": "2026-07-27T08:18:52Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "4d8be306db0df1f16960a37f724db072432d3fd8",
"body": "- Total keywords: 89 → 91 (added transcript/记录)\n- Chinese keywords: 45 → 46 (added 记录)\n- Fixes CI failures in test_keyword_count and related tests",
"is_bot": false,
"headline": "fix: update keyword count tests for v1.29 transcript keyword",
"author_name": "hahalee000000",
"author_login": null,
"committed_at": "2026-07-27T07:40:46Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "45e5baeb76c290b4b486b5c97faf8c59bcd5b1f7",
"body": null,
"is_bot": false,
"headline": "bump: v1.29.1 - sync ChatSessionActor from helenagent",
"author_name": "hahalee000000",
"author_login": null,
"committed_at": "2026-07-27T07:33:33Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "a6639a120e691c2117c3728b895fecb0dc40cb45",
"body": "- Add transcript \"persistent\" declaration (v1.29+ feature)\n Required for Web UI to read transcript, search, session resume, etc.\n- Forward LLM error messages to Web UI via _emit_actor_stream_event\n- Improves error visibility in chat interface\n\nSynced from helenagent commit 65d3311",
"is_bot": false,
"headline": "sync: Update ChatSessionActor from helenagent",
"author_name": "hahalee000000",
"author_login": null,
"committed_at": "2026-07-27T07:33:12Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "0aa2ea62b73f61016bced938b7d4e70527388375",
"body": "- Add TRANSCRIPT token and Chinese keyword 记录\n- Support transcript 'none'|'memory'|'persistent' in agent declarations\n- Default is 'none' to avoid directory pollution\n- Update wiki tutorial and built-in skills with documentation\n- Fully backward compatible\n\nThis feature allows developers to explicitly control agent transcript\nbehavior, solving the issue of session directory accumulation in\nworking directories.",
"is_bot": false,
"headline": "v1.29.0: Add agent-level transcript control",
"author_name": "hahalee000000",
"author_login": null,
"committed_at": "2026-07-27T07:21:34Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "85332a78536851f2329685ab4bfb1273aec3d6f0",
"body": "Bug Fix:\n- Add \\uNNNN Unicode escape support in string literals\n- Previously, \"\\u4e00\" was incorrectly parsed as literal \"4e00\" (length 4)\n- Now correctly produces Unicode character 一 (length 1)\n\nImplementation:\n- Added \\uNNNN parsing in lexer._parse_escape() method\n- Follows same pattern as existin\n[…]\ncapes\n- All 181 lexer tests passing\n- Fully backward compatible\n\nExamples:\n \"一\" → 一 (U+4E00)\n \"一二中\" → 一二中\n \"ABC\" → ABC\n\nTriggered by: User question about \\u4e00 not being interpreted as Unicode",
"is_bot": false,
"headline": "v1.28.6: fix Unicode escape sequence support",
"author_name": "hahalee000000",
"author_login": null,
"committed_at": "2026-07-27T06:52:55Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "ff74bf117a240d7d5cab1efcd4311cc802746823",
"body": "New Features:\n- Add find_from(s, sub, start) for position-based string search\n- Add json_parse_lenient(text) to auto-strip markdown fences from LLM output\n- Chinese aliases: 从位置查找, json宽松解析\n\nParser Improvements:\n- Detect if/while boolean expression trap: if (a || b) && c { }\n- Provide clear error me\n[…]\n for common parsing pitfalls\n\nBackward Compatibility:\n- All changes fully backward compatible\n- No breaking changes to existing code\n\nTriggered by: Helen agent feedback from docx-converter development",
"is_bot": false,
"headline": "v1.28.5: stdlib improvements and parser enhancements",
"author_name": "hahalee000000",
"author_login": null,
"committed_at": "2026-07-27T03:57:40Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "e3bef262df079bdcad41fb00868974232af62085",
"body": "Sync from helenagent commit 5fe9f2d. compress_context() returns\nincorrect compressed_tokens value (tracked as helen#23). The /compress\ncommand now uses context_stats() before and after compression to get\nthe actual token counts instead of trusting the compress_context\nreturn value.\n\nWorkaround note added to the command docstring referencing helen#23.\n\nCo-Authored-By: Claude <noreply@anthropic.com>",
"is_bot": false,
"headline": "fix(agent): v1.28.4 /compress token count workaround (helen#23)",
"author_name": "rxx",
"author_login": null,
"committed_at": "2026-07-26T10:09:53Z",
"body_truncated": false,
"is_coding_agent": true
},
{
"oid": "b87cd7e897c58f4daa4a72ea299bc0ce75bab3dc",
"body": "Two bugs in the v1.28 :ask feature causing empty assistant responses:\n\n1. Session ID was empty: new_assistant_session called\n interp.get_session_id() which doesn't exist on Interpreter. The\n actual session_id lives at interp._agent_context.session_id (set by\n AgentContextManager on init). Now \n[…]\n are visible instead of silent empty responses\n\nTest results: 27/27 passed (updated 2 tests for new tool schema shape\nand session_id access pattern).\n\nCo-Authored-By: Claude <noreply@anthropic.com>",
"is_bot": false,
"headline": "fix(repl): v1.28.3 :ask two more bugs — session_id + tool schema format",
"author_name": "rxx",
"author_login": null,
"committed_at": "2026-07-26T10:05:47Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "d0d21c17663c70192161d99240b381b3f6eb0884",
"body": "… tools\n\nSync from helenagent commit 7301a19. The tools declaration in\nchat_session_actor.helen was missing the '=' sign:\n\n tools CHAT_TOOLS # broken: parsed as unknown statement\n tools = CHAT_TOOLS # fixed: proper tools allowlist assignment\n\nWithout the '=' the parser didn't recognize i\n[…]\n>60% (resume loads all\n history including duplicated prompt boilerplate)\n\nBoth wrapped in try/catch so compression failures don't break the\nactor loop.\n\nCo-Authored-By: Claude <noreply@anthropic.com>",
"is_bot": false,
"headline": "fix(agent): v1.28.2 tools declaration missing '=' — LLM couldn't call…",
"author_name": "rxx",
"author_login": null,
"committed_at": "2026-07-26T09:40:30Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "141aaad2691db8a36b877433b00b94586f0898e3",
"body": "… events\n\nHttpLLMRuntime.act_stream yields typed dicts\n({\"type\": \"content\", \"content\": \"...\"} for text, plus tool_call /\ntool_result / usage / compaction / error events), not plain strings.\nThe v1.28 _run_streaming wrote every chunk directly to stdout, so the\nfirst event (a dict) triggered 'write() \n[…]\nt (tool_call/tool_result/usage filtered out), another\nverifies the plain-string fallback path.\n\nTest count: 27 in tests/cli/test_repl_ask.py (25 -> 27).\n\nCo-Authored-By: Claude <noreply@anthropic.com>",
"is_bot": false,
"headline": "fix(repl): v1.28.1 :ask streaming — extract 'content' from typed dict…",
"author_name": "rxx",
"author_login": null,
"committed_at": "2026-07-26T09:37:25Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "09e8d488eae547b65f2efe6437cbed1460bfff29",
"body": "Rewrite the REPL :ask command. The old implementation depended on\nhelen_assistant.helen (removed in helenagent v1.0 refactor) and did\nfragile string-replacement to inject parameters. The new :ask calls\nthe LLM directly with a system prompt that includes fresh REPL state.\n\nL1 - REPL context injection\n[…]\new user-facing feature).\n\nTest results: 3235 passed, 1 pre-existing unrelated failure\n(test_helen_assistant_program_exists, existed before this change).\n\nCo-Authored-By: Claude <noreply@anthropic.com>",
"is_bot": false,
"headline": "feat(repl): v1.28 :ask three-tier enhancement (L1/L2/L3)",
"author_name": "rxx",
"author_login": null,
"committed_at": "2026-07-26T09:31:48Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "b0bef2f19dbb6d605c9c9387acdedb30890c7a05",
"body": "Helenagent added media_ref support for restoring images in transcript\nconversations, plus a new /media endpoint in the webui backend to serve\nreferenced media files.\n\nChanges:\n- webui/backend/app/routers/chat.py: add /media endpoint\n- webui/backend/app/services/session_index.py: media_ref parsing + restoration\n- webui/backend/tests/test_session_index.py: tests for media_ref handling\n\nCo-Authored-By: Claude <noreply@anthropic.com>",
"is_bot": false,
"headline": "fix(agent): sync media_ref transcript image restoration from helenagent",
"author_name": "rxx",
"author_login": null,
"committed_at": "2026-07-26T09:16:34Z",
"body_truncated": false,
"is_coding_agent": true
},
{
"oid": "312f41634c51356b08acf90c7c5ecd083625ee32",
"body": "… as SSOT)\n\nSync the bundled agent from the standalone helenagent repo, which was\nrefactored to a simpler v1.0: removed the Web SQLite DB (transcript is now\nthe single data source), added memento-file-based session recovery, and\ncleaned up outdated files.\n\nSource changes (helenagent -> helen/agent):\n[…]\n docs.\n\nVerified: backend Python syntax clean, all 4 modified .helen files pass\n`helen check`, wheel 745KB with 0 node_modules files and no database.py.\n\nCo-Authored-By: Claude <noreply@anthropic.com>",
"is_bot": false,
"headline": "feat(agent): sync helen/agent to helenagent v1.0 (simpler, transcript…",
"author_name": "rxx",
"author_login": null,
"committed_at": "2026-07-26T08:21:32Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "541c44fc25e4a4ad58be4cfa414eeca471d79e2d",
"body": "_get_agent_setting()'s field_map only contained model/temperature/max-turns,\nomitting \"description\", so the agent's `description \"...\"` clause never\nreached the system prompt assembled for `llm act` (nor the system_prompt\npassed by the streaming path in interpreter.py). The role-definition section\nw\n[…]\nand the no-description\nregression guard. Verified the tests fail without the fix (git stash) and\npass with it. Full suite 3214 passed, zero regressions.\n\nCo-Authored-By: Claude <noreply@anthropic.com>",
"is_bot": false,
"headline": "fix(agent): v1.27.2 inject agent description into LLM system prompt",
"author_name": "rxx",
"author_login": null,
"committed_at": "2026-07-26T07:58:46Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "e3d6f30dbc301ed906b6ca7f003eb0aad7d55c64",
"body": "…main\n\nv1.27's spawn resume / Interpreter(session_id=) continued the transcript\nfile but the LLM did NOT actually see the prior conversation inside agent\nmain {} - llm act's history (self._history) filters by _current_invocation_id\n(v1.22 per-invocation isolation), and load_from_backend preserved th\n[…]\nisolation regression test. Full suite: 2654\npassed (1 pre-existing unrelated failure).\n\nDocs: wiki/tutorial/07-spawn.md, wiki/log.md, CLAUDE.md updated.\n\nCo-Authored-By: Claude <noreply@anthropic.com>",
"is_bot": false,
"headline": "fix(spawn-resume): v1.27.1 make llm act see resumed history in agent …",
"author_name": "rxx",
"author_login": null,
"committed_at": "2026-07-26T01:14:09Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "5fa39f72cf6408b1eb0dbcd6a2e7f9edf6660e11",
"body": "…s session lock\n\nAdd optional `spawn Agent(...) resume(\"<session_id>\")` clause (Chinese\nalias 恢复会话(...)) so a spawned agent continues a previously saved\nchild-session transcript instead of starting fresh. The spawned\nInterpreter is constructed with the given session_id, loading that\nsession's histor\n[…]\nSpawned Session\"\nsection), wiki/log.md (v1.27 changelog), CLAUDE.md, and helen-syntax /\nhelen-agent-patterns / helen-agent-collaboration skills updated.\n\nCo-Authored-By: Claude <noreply@anthropic.com>",
"is_bot": false,
"headline": "feat(spawn): v1.27 spawn resume(\"<session_id>\") clause + cross-proces…",
"author_name": "rxx",
"author_login": null,
"committed_at": "2026-07-26T00:17:54Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "ae4ae5ec679c16d900bf3807c1a7bfa07a886589",
"body": "Backend imports chat_tui_web module for actor management.\nThis file provides Python interface to Helen actor system.\n\nFixes: /session command error 'No module named chat_tui_web'\n\nCo-Authored-By: Claude <noreply@anthropic.com>",
"is_bot": false,
"headline": "fix(agent): add chat_tui_web.py for Web UI backend",
"author_name": "rxx",
"author_login": null,
"committed_at": "2026-07-25T16:09:55Z",
"body_truncated": false,
"is_coding_agent": true
},
{
"oid": "58a4c256403295770386717237c3fc3bc10a83b2",
"body": "Problem: helen agent was using agent directory as working directory,\nnot the user's current directory. This prevented reading session data\nfrom .helen/sessions/ in the user's project.\n\nFix: Pass Path.cwd() as HELEN_WEBUI_CWD environment variable to\nstart-web.sh, which then uses it for the backend process.\n\nBackend now correctly identifies user's working directory and can\naccess project-specific session data.\n\nCo-Authored-By: Claude <noreply@anthropic.com>",
"is_bot": false,
"headline": "fix(agent): pass user's cwd to Web UI backend",
"author_name": "rxx",
"author_login": null,
"committed_at": "2026-07-25T16:06:18Z",
"body_truncated": false,
"is_coding_agent": true
},
{
"oid": "5d3b161dfe97a615a938a0528271692fbb4484a1",
"body": "Catch KeyboardInterrupt to prevent traceback when user presses Ctrl+C.\nThe start-web.sh script handles cleanup, we just exit cleanly.\n\nCo-Authored-By: Claude <noreply@anthropic.com>",
"is_bot": false,
"headline": "fix(agent): handle Ctrl+C gracefully in agent launcher",
"author_name": "rxx",
"author_login": null,
"committed_at": "2026-07-25T15:58:45Z",
"body_truncated": false,
"is_coding_agent": true
},
{
"oid": "29bd6fbdad26e33573c97dee08a5f950221b8d94",
"body": "Backend failed to start with ModuleNotFoundError: No module named 'ui'.\n\nRoot cause:\n- Backend code imports from ui.hint_queue\n- ui module was not included in Helen package\n- PYTHONPATH only included backend/, not agent/\n\nFix:\n- Copy ui/ directory from helenagent (14 files)\n- Update start-backend.sh to add agent/ to PYTHONPATH\n- Backend can now import ui module successfully\n\nTested: Backend starts successfully on port 8000.\n\nCo-Authored-By: Claude <noreply@anthropic.com>",
"is_bot": false,
"headline": "fix(agent): add ui module and fix PYTHONPATH for backend",
"author_name": "rxx",
"author_login": null,
"committed_at": "2026-07-25T15:55:49Z",
"body_truncated": false,
"is_coding_agent": true
},
{
"oid": "a81f9dcc9ea67a3f5031fc60ca02ed5732712e1c",
"body": "Reduce package size from 15.4 MB to 2.29 MB (85% reduction).\n\nChanges:\n- MANIFEST.in: Add prune rules for node_modules and dist\n- pyproject.toml: Add exclude patterns for setuptools\n\nUsers install frontend dependencies via npm, not pip.\n\nCo-Authored-By: Claude <noreply@anthropic.com>",
"is_bot": false,
"headline": "fix(build): exclude node_modules from package",
"author_name": "rxx",
"author_login": null,
"committed_at": "2026-07-25T15:49:29Z",
"body_truncated": false,
"is_coding_agent": true
},
{
"oid": "ee18c668310e80b2a3aa08554a3741aad3d577f7",
"body": "Major release: Integrated helenagent v8.0 as built-in programming assistant.\n\nNew features:\n- helen agent command launches Web UI\n- Single long-lived actor architecture (v8.0)\n- 14 core Helen files + 6 project skills\n- FastAPI backend + React frontend\n- Optional dependencies: pip install helen-lang[agent]\n\nCo-Authored-By: Claude <noreply@anthropic.com>",
"is_bot": false,
"headline": "chore: bump version to 1.26.0 for helenagent integration",
"author_name": "rxx",
"author_login": null,
"committed_at": "2026-07-25T15:46:33Z",
"body_truncated": false,
"is_coding_agent": true
},
{
"oid": "6943faee92efd585c431b960fe5f666d4a5cc640",
"body": "Replace simple helen_assistant.helen with full-featured helenagent (v8.0).\n\nKey changes:\n- Remove helen/agent/helen_assistant.helen (simple reference implementation)\n- Add helenagent v8.0: single long-lived actor architecture\n- 14 core Helen files (chat_session_actor, context_manager, etc.)\n- 6 proj\n[…]\nUpdated CLI help text with agent command\n\nThis makes Helen a complete agent programming language with a\nproduction-ready programming assistant built-in.\n\nCo-Authored-By: Claude <noreply@anthropic.com>",
"is_bot": false,
"headline": "feat(agent): integrate helenagent as built-in programming assistant",
"author_name": "rxx",
"author_login": null,
"committed_at": "2026-07-25T15:17:56Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "b9db4625632398462fe9d8a2a02e7dc295b0d1e6",
"body": "Changed Channel.is_closed and ChannelEndpoint.is_closed from @property\nto regular methods to match documentation (ch.is_closed()) and be\nconsistent with other Channel methods (send(), receive(), close(), cancel()).\n\nThis fixes the error where calling ch.is_closed() would fail with\n'bool is not calla\n[…]\nst_channel.py: Update tests to use method call syntax\n- tests/runtime/test_channel_is_closed_property.py: Update test docstring\n- Version bump to 1.25.5\n\nCo-Authored-By: Claude <noreply@anthropic.com>",
"is_bot": false,
"headline": "fix(channel): change is_closed from @property to method for consistency",
"author_name": "rxx",
"author_login": null,
"committed_at": "2026-07-25T11:24:43Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "c2c54fcdc9655d3a268dabc9cf828ea5f10649e9",
"body": "Co-Authored-By: Claude <noreply@anthropic.com>",
"is_bot": false,
"headline": "chore: bump version to 1.25.4 for PyPI release",
"author_name": "rxx",
"author_login": null,
"committed_at": "2026-07-25T11:08:33Z",
"body_truncated": false,
"is_coding_agent": true
},
{
"oid": "fba5f3fa3a23d08b8e1a2d74931ef8973995c068",
"body": "Fix AttributeError when accessing ChannelEndpoint.is_closed directly.\n\nProblem:\n- Documentation states Channel has is_closed() method\n- ChannelEndpoint only had is_channel_closed() method\n- call_method mapping had is_closed but direct property access failed\n- HelenAgent called reply.is_closed() → At\n[…]\ne is_closed property in Channel (was defined twice)\n- tests/runtime/test_channel_is_closed_property.py: 7 new tests\n\nAll 68 channel/spawn tests passing.\n\nCo-Authored-By: Claude <noreply@anthropic.com>",
"is_bot": false,
"headline": "fix(channel): add is_closed property to ChannelEndpoint",
"author_name": "rxx",
"author_login": null,
"committed_at": "2026-07-25T11:06:21Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "7fa363d3441df4ec815bdb165bf188961c94983a",
"body": "Replace non-existent save_new_skill/update_existing_skill functions with\nactual file operations using shell_exec and write_file.\n\nChanges:\n- helen-programming-methodology/SKILL.md:\n * Replace fake function calls with real file operations\n * Add clear guidance on skill directory locations (project \n[…]\n creation checklist\n\nThis fixes the issue where HelenAgent was creating skills in the wrong\nlocation (built-in skill directory) due to missing guidance.\n\nCo-Authored-By: Claude <noreply@anthropic.com>",
"is_bot": false,
"headline": "docs(skills): add comprehensive skill creation guidance",
"author_name": "rxx",
"author_login": null,
"committed_at": "2026-07-25T06:21:08Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "ff5d22c4a34e1c197dcd7b857f0799650513570d",
"body": "…issues\n\nv1.25.3: Fix two critical issues with working memory implementation:\n\n1. Streaming visibility fix:\n - Add _WorkingMemoryStreamFilter class for real-time filtering\n - Buffer and detect <working_memory> blocks during streaming\n - Only send non-working-memory content to users\n - Handle\n[…]\nosing tag filtered\n * Partial tag prefix buffering\n * Empty chunks handled\n * Real-world scenario\n\nAll 265 interpreter tests passing, no regressions.\n\nCo-Authored-By: Claude <noreply@anthropic.com>",
"is_bot": false,
"headline": "fix(working-memory): resolve streaming visibility and prompt clarity …",
"author_name": "rxx",
"author_login": null,
"committed_at": "2026-07-25T04:27:10Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "2fdca7bf438f6f6227b94435d228e301cf1ac5e8",
"body": null,
"is_bot": false,
"headline": "chore: bump version to 1.25.2",
"author_name": "hahalee000000",
"author_login": null,
"committed_at": "2026-07-24T09:34:51Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "b3c5fc3368ff43200592b0513254a5a90cbd93dd",
"body": "The working memory extraction was working correctly, but the <working_memory>\nXML block was not being removed from the response text, causing users to see\ninternal working memory updates.\n\nChanges:\n- Modified _apply_working_memory_update() to return cleaned response text\n- Updated both sync and streaming paths to use the cleaned response\n- Added comprehensive tests for block removal\n\nFixes helenagent feedback issue where users could see <working_memory> blocks.",
"is_bot": false,
"headline": "fix: remove <working_memory> block from LLM responses",
"author_name": "hahalee000000",
"author_login": null,
"committed_at": "2026-07-24T09:34:38Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "767b249a5d8eda8ee6c087b851fe3657e3356ebf",
"body": null,
"is_bot": false,
"headline": "chore: bump version to 1.25.1 for bug fix release",
"author_name": "hahalee000000",
"author_login": null,
"committed_at": "2026-07-24T08:48:31Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "af468b5aa07ec86b5425d57424c485d0cafcf058",
"body": "Issue #20: SharedStore methods lost after spawn\n- Fix SharedStore.__deepcopy__ to copy methods and rebind to new store\n- Methods now work correctly in spawned agents\n\nIssue #21: shared let not visible after spawn\n- Transfer _shared_vars registry to spawned interpreter\n- shared let variables are now \n[…]\ndPythonObject\n- Return self since Python modules are process-level singletons\n- spawn now works with Python FFI imports\n\nAll fixes include comprehensive tests (11 new test cases).\nCloses #20, #21, #22",
"is_bot": false,
"headline": "fix: resolve 3 P1 spawn bugs (issues #20, #21, #22)",
"author_name": "hahalee000000",
"author_login": null,
"committed_at": "2026-07-24T08:47:53Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "80f811639a9ba730ed698ac280a99f267f852104",
"body": null,
"is_bot": false,
"headline": "chore: bump version to 1.25.0 for PyPI release",
"author_name": "hahalee000000",
"author_login": null,
"committed_at": "2026-07-24T04:19:23Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "f70abdb25267d1e043d48054adead639d06d1076",
"body": "Convert all Chinese prose, section headings, and table content to English.\n\nChanges:\n- Title and description translated\n- Directory structure comments translated\n- Skill search priority section translated\n- Project-level skills section translated\n- Two-tier skill disclosure mechanism explained in En\n[…]\n All skill names and directory names (identifiers)\n- Code block structure and formatting\n- Table structure\n- URLs and links\n\nThis completes the English-ification of the skills directory documentation.",
"is_bot": false,
"headline": "docs: English-ify helen/skills/README.md",
"author_name": "hahalee000000",
"author_login": null,
"committed_at": "2026-07-24T04:17:45Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "0e044e889e23dc91ca71f61631eca4e96fe0ebd6",
"body": "Convert all Chinese prose, section headings, and code comments to English\nwhile preserving Chinese programming keywords, stdlib aliases, and keyword\nmapping examples as required.\n\nREADME.md changes:\n- Main title and all section headings translated\n- Comparison tables translated\n- Code block comments\n[…]\namming keywords (通道, 仓库, 发送, 接收, etc.)\n- Chinese stdlib alias examples\n- Keyword mapping examples\n- All code logic unchanged\n\nThis completes the comprehensive English-ification of Helen documentation.",
"is_bot": false,
"headline": "docs: Convert README.md and CLAUDE.md to English",
"author_name": "hahalee000000",
"author_login": null,
"committed_at": "2026-07-24T04:12:39Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "1184e5ca7d7cfce5bda9cc793b32c09afbf1283e",
"body": "…, and Python code\n\nComprehensive English-ification of Helen documentation and code while\npreserving Chinese programming examples and keyword mappings.\n\n## Changes\n\n### Skills (11 files)\n- helen-stdlib: Converted prose to English, kept keyword mapping table and Chinese stdlib aliases\n- helen-syntax:\n[…]\n: Chinese programming examples preserved\n\nAll changes maintain backward compatibility and preserve Helen's bilingual\nprogramming capabilities while making documentation accessible to English speakers.",
"is_bot": false,
"headline": "docs: Convert Chinese prose to English across skills, wiki, tutorials…",
"author_name": "hahalee000000",
"author_login": null,
"committed_at": "2026-07-24T04:05:04Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "e0ba4fe7900e15af2327b514ea7f05eb7f2c30a7",
"body": "Implement a simpler, smarter working memory approach that leverages the LLM\nitself to maintain context, replacing the need for the complex semantic\nworking memory proposal.\n\n## Changes\n\n### Implementation\n- helen/interpreter/llm_mixin.py:\n - Add _build_working_memory_instructions(): injects <workin\n[…]\n code changes (~100 lines vs ~2000 in the original proposal)\n- Full backward compatibility with existing working_memory stdlib API\n\nAll 908 existing interpreter/runtime tests pass with no regressions.",
"is_bot": false,
"headline": "feat(working-memory): v1.25 system prompt-based working memory",
"author_name": "hahalee000000",
"author_login": null,
"committed_at": "2026-07-24T03:01:25Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "477e76681e6807b99629836c6749b892730197ca",
"body": "移动文件:\n- docs/COMPARISON.md → reports/COMPARISON.md\n- docs/LLM_DISCOVERY.md → reports/LLM_DISCOVERY.md\n- docs/PYTHON_3.12_UPGRADE.md → reports/PYTHON_3.12_UPGRADE.md\n- docs/REORGANIZATION_REPORT.md → reports/REORGANIZATION_REPORT.md\n\n更新引用:\n- README.md: 更新文档链接\n- tests/integration/test_helen_assistant.py: 更新测试文件路径\n- wiki/schema.md: 更新文档架构说明\n- helen/skills/*/references/*.md: 更新技能参考文档中的链接\n\n删除:\n- docs/ 目录(所有文件已移至 reports/)\n\n理由:\n- docs/ 目录中的文件本质上都是报告和分析文档\n- reports/ 目录更适合存放这类内容\n- 统一文档组织结构,减少目录层级",
"is_bot": false,
"headline": "docs: 将 docs/ 目录移入 reports/ 并删除",
"author_name": "hahalee000000",
"author_login": null,
"committed_at": "2026-07-24T02:19:46Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "9224bbfec47be0126f5db5381bbd16bcf86c1e50",
"body": "Phase 1: 文档清理\n- 删除 4 个重复文档 (-8,099 行): tutorial.md, python_bridge.md,\n transcript_store_user_guide.md, keyword_stdlib_reference.md\n- 归档 4 个过时 wiki 页面到 wiki/_archive/: agent_context.md,\n working_memory.md, graduated_compression.md, cache_aware_compression.md\n- 更新 wiki/index.md 反映归档状态\n\nPhase 2-3: 技能\n[…]\n更新\n- 更新 CLAUDE.md 技能列表(行数、描述)\n- 更新 wiki/tutorial/13-skills.md 技能清单\n- 创建 docs/REORGANIZATION_REPORT.md 详细重组报告\n\n总体成果:\n- docs/ 文件: 7 → 3 (-57%)\n- docs/ 行数: 8,755 → 656 (-92%)\n- 技能系统上下文占用: -45%\n- 所有验证测试通过",
"is_bot": false,
"headline": "docs: 文档与技能系统大规模重组",
"author_name": "hahalee000000",
"author_login": null,
"committed_at": "2026-07-24T02:17:42Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "47802a03259d67ef0e133d6365b922577062f23e",
"body": "针对\"持续对话 + agent 隔离\"的核心张力,提出三层上下文模型:\n- Layer 1: 现有结构追踪(工具调用精确追踪)\n- Layer 2: 语义摘要(LLM 增量生成,本方案新增)\n- Layer 3: Transcript SSOT(完整历史,用于审计/恢复)\n\n核心机制:\n- SemanticSnapshot 作为 Transcript 项持久化,继承 SSOT 所有好处\n- SessionMeta.working_memory_uuid 指向最新 snapshot\n- 增量算法:old_summary + new_messages → new_summary\n- 自动触发:invocation 边界 + 阈值 + 显式 stdlib\n- 用小模型(主模型降一级)做摘要,增加约 5% 成本\n\n分 5 个 Phase 实施,预计 4-5 周。\n\nCo-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>",
"is_bot": false,
"headline": "docs: 语义 Working Memory 设计方案 (v1.25 proposal)",
"author_name": "hahalee000000",
"author_login": null,
"committed_at": "2026-07-23T08:12:55Z",
"body_truncated": false,
"is_coding_agent": true
},
{
"oid": "923d84a77077d2bc2ff12168722e5b94b522b97f",
"body": "Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>",
"is_bot": false,
"headline": "chore: bump version to 1.24.9 for PyPI release",
"author_name": "hahalee000000",
"author_login": null,
"committed_at": "2026-07-23T01:35:28Z",
"body_truncated": false,
"is_coding_agent": true
},
{
"oid": "69933a5e4509efd8e415ca034506b03eae640576",
"body": "重建多模态 Message 时遗漏 pinned、agent_name、invocation_id、\nparent_invocation_id、visible_to_invocation_ids,导致 agent 内\nllm act media(...) 因 invocation 过滤失效而丢失图片内容。\n\n补全字段复制(list 字段防御性拷贝)并新增回归测试。\n\nCo-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>",
"is_bot": false,
"headline": "fix(transcript): _restore_media_in_messages 复制全部 Message 字段 (Issue #19)",
"author_name": "hahalee000000",
"author_login": null,
"committed_at": "2026-07-23T01:35:10Z",
"body_truncated": false,
"is_coding_agent": true
},
{
"oid": "d621f76c8b097029d7075b90477b57236f8d2b50",
"body": "Issue #17 延伸修复 (media(list) 动态列表) 在 agent 内失效: agent 参数\n被包装为 ReadOnlyView (v1.12 不可变保护), 而 _media() 只认 list, 导致\nmedia(media_list) 在 agent 内报 TypeError --动态媒体列表传给 agent 内\nllm act media(...) 这一核心场景不可用。\n\n修复 (helen/stdlib/media.py):\n- 新增 _is_list_like() helper: 判断 list 或 list-backed ReadOnlyView\n- _medi\n[…]\nstr)\n- 多参数混入 ReadOnlyView\n- 空 ReadOnlyView\n- dict-backed ReadOnlyView 不展平 (报 TypeError)\n- llm act 动态列表集成\n\n全部 29 个 media 测试通过, 1193 个相关测试无回归。\n\n版本: 1.24.8\n\nCo-Authored-By: Claude <noreply@anthropic.com>",
"is_bot": false,
"headline": "fix(media): 支持 ReadOnlyView 参数展平 (Issue #18)",
"author_name": "rxx",
"author_login": null,
"committed_at": "2026-07-22T18:16:00Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "c349c8d5d58662d9822e40fb1ed68f5a862f445a",
"body": "修复教程\"批量处理\"章节展示的 media(images...) 写法 --Helen 无 spread\n语法,media(list) 也报 TypeError,动态长度图片列表无法传给 llm act。\n\n方案 Y 修复 (stdlib 级,不引入新语法):\n- _media() 单参为 list 时自动展平为 list[MediaPart]\n- media([img1, img2]) -> [img1, img2]\n- media([\"a.png\", \"b.png\"]) -> [MediaPart, MediaPart]\n- media([img, \"path.png\"]) -> 混合展平\n[…]\n 单 list 展平 (MediaPart/str/混合)\n- 空 list / 单元素 list\n- 多参数混入 list\n- 错误处理 (list 内非法类型)\n- llm act 动态列表集成\n\n向后兼容: 全部 23 个 media 测试通过,1035 个相关测试无回归。\n\n版本: 1.24.7\n\nCo-Authored-By: Claude <noreply@anthropic.com>",
"is_bot": false,
"headline": "feat(media): 支持 media(list) 动态列表展平 (Issue #17 延伸)",
"author_name": "rxx",
"author_login": null,
"committed_at": "2026-07-22T18:04:45Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "68e7b61ff4c87ed99b606385a613fa4a1156d4fa",
"body": "修复 media() 不接受 MediaPart 对象的 bug --教程 5 个 block 展示的\nmedia(img1, img2) 写法运行即崩 (AttributeError: startswith)。\n\n根因: _media() 第一步 source.startswith() 假设入参为字符串,无 passthrough 分支。\n\n方案 A 修复 (helen/stdlib/media.py):\n- _media(*args, media_type=None) 支持 MediaPart passthrough (单参原样返回)\n- 多参数形式返回 list[MediaPart] (\n[…]\nrough (单参返回同一对象)\n- 多参数 (返回 list)\n- 向后兼容 (字符串/关键字/legacy 位置)\n- 错误处理 (无参/类型错误)\n- llm act 集成 (list 展平)\n\n全部 3117 测试通过 (1 个 LLM API 配额失败与本次修复无关)。\n\n版本: 1.24.6\n\nCo-Authored-By: Claude <noreply@anthropic.com>",
"is_bot": false,
"headline": "fix(media): 支持 MediaPart passthrough + 多参数形式 (Issue #17)",
"author_name": "rxx",
"author_login": null,
"committed_at": "2026-07-22T17:51:26Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "e95ae316edb936990a8613ae3ff0ff60dba0664d",
"body": "HelenFunctionWrapper.__call__() 现在支持 **kwargs 关键字参数传递:\n- 位置参数和关键字参数可混合使用\n- 完整的错误处理(参数过多、未知参数、重复参数)\n- 与 Python 函数调用语义一致\n\n版本:1.24.5\n\nCo-Authored-By: Claude <noreply@anthropic.com>",
"is_bot": false,
"headline": "feat(python-bridge): HelenFunctionWrapper 支持关键字参数",
"author_name": "rxx",
"author_login": null,
"committed_at": "2026-07-22T17:10:41Z",
"body_truncated": false,
"is_coding_agent": true
},
{
"oid": "e9c1bf4e1542dcd588702e2dc003f2a46f4b1b7a",
"body": "修复 Python bridge type_converter 将 MediaPart 转为字符串的问题,\n现在 MediaPart 可以在 Python 和 Helen 之间原生传递。\n\n修改内容:\n- python_to_helen() 添加 MediaPart 类型检查\n- helen_to_python() 添加 MediaPart 类型检查\n- 保持对象身份和所有字段不变\n\n版本:1.24.4\n\nCo-Authored-By: Claude <noreply@anthropic.com>",
"is_bot": false,
"headline": "feat(python-bridge): MediaPart 原生传递支持",
"author_name": "rxx",
"author_login": null,
"committed_at": "2026-07-22T15:30:59Z",
"body_truncated": false,
"is_coding_agent": true
},
{
"oid": "25e79d1c64a634e9777827a1fb67784d836374b6",
"body": "Co-Authored-By: Claude <noreply@anthropic.com>",
"is_bot": false,
"headline": "chore: bump version to 1.24.3 for PyPI release",
"author_name": "rxx",
"author_login": null,
"committed_at": "2026-07-22T15:20:26Z",
"body_truncated": false,
"is_coding_agent": true
},
{
"oid": "c62a0852472ee85b3b2d9fdb6779dd5b87b21bf2",
"body": "问题:type_converter.py 将 MediaPart 包装为 WrappedPythonObject,\n导致 Helen 代码无法直接访问其字段(source, content, mime 等)\n\n修复:\n- type_converter.py 新增 MediaPart case,直接传递不包装\n- 保持 MediaPart 作为一等公民类型(与 v1.17 多模态设计一致)\n- Python → Helen:MediaPart 直接传递\n- Helen → Python:MediaPart 直接传递\n\n测试:\n- 新增 5 个 MediaPart 转换测试(helen_to_py\n[…]\npy 适配 session_meta(v1.23.3 特性)\n\n影响:\n- 性能提升:消除包装/解包开销\n- 类型安全:Helen 类型系统可识别 MediaPart\n- API 一致性:与其他一等公民类型(int, str, list 等)行为一致\n\n测试:3103 passed, 1 skipped\n\nCo-Authored-By: Claude <noreply@anthropic.com>",
"is_bot": false,
"headline": "feat(ffi): MediaPart 原生传递支持(Python ↔ Helen)",
"author_name": "rxx",
"author_login": null,
"committed_at": "2026-07-22T15:17:21Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "d96c84fcbab7227f771073c51686667759995073",
"body": null,
"is_bot": false,
"headline": "chore: bump version to 1.24.2 for PyPI release",
"author_name": "rxx",
"author_login": null,
"committed_at": "2026-07-22T12:40:23Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "63d7fce468cda8a5fdcd6a505d8eeb8185ab94fd",
"body": "核心改进:\n- Message 新增 visible_to_invocation_ids 字段,支持跨调用者可见性\n- resume_session 保留原始 invocation_id(调用树完整性)\n- resume_session 使用 UUID 去重(幂等性,多次调用不重复)\n- resume_session 返回 dict(包含 imported_messages, skipped_duplicates)\n- restore_context 保留调用树 + 添加可见性标记\n- _history 过滤逻辑同时检查 invocation_id 和 visible_to_invocatio\n[…]\n- helen/stdlib/context.py: restore_context 和 _import_context 改进\n- helen/cli/repl.py: 适配新返回类型\n- tests/stdlib/test_resume_session_v124.py: 新增 4 个测试\n- reports/v1.24-release-report.md: 发布报告\n\n测试:4 个新测试全部通过",
"is_bot": false,
"headline": "feat(v1.24): resume_session 改进 — 可见性标记 + 调用树完整性 + 幂等恢复",
"author_name": "rxx",
"author_login": null,
"committed_at": "2026-07-22T12:38:54Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "8f0ce1155044fbcf7882d9bed34a207faa8ac1dc",
"body": "Python Bridge import hook now resolves session_id via a priority chain,\nenabling transcript continuity across process restarts:\n\n 1. set_session_id() explicit (highest, in-process dynamic control)\n 2. HELEN_SESSION_ID env var (cross-restart recovery)\n 3. .helen/current_session_id memento fi\n[…]\nl/15-python-bridge.md, helen-python-bridge SKILL.md,\nwiki/log.md\nTests: tests/execution/test_python_bridge_session_id.py (15 cases)\n\nCloses #16\n\nCo-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>",
"is_bot": false,
"headline": "fix(python-bridge): support session_id in import hook (Issue #16)",
"author_name": "hahalee000000",
"author_login": null,
"committed_at": "2026-07-22T08:59:37Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "3ee241cae464b57e416228124f52465cfe5b92f0",
"body": "- Add CLI flags: --session=ID and --resume-latest for Interpreter recovery\n- Support Python API: Interpreter(session_id='session_xxx')\n- Update CLI parsing: _extract_session_flags() at top level\n- Update run_command/watch_command/repl_command to accept session_id\n\nDocumentation updates:\n- wiki/log.m\n[…]\nn recovery section\n- helen-programming-methodology SKILL: Pattern C update\n- helen-python-bridge SKILL: session management section\n- CLAUDE.md: toolchain and transcript updates\n\nBump version to 1.24.0",
"is_bot": false,
"headline": "feat(v1.24): add session resume at startup",
"author_name": "hahalee000000",
"author_login": null,
"committed_at": "2026-07-22T07:58:30Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "00739e5654bed5946096bf125e695e4dd8ecb5e4",
"body": "…ming-methodology\n\nAdded Pattern D (v1.23.7+): Automatic spawn tracking\n- Query spawn tree with get_spawn_tree()\n- Aggregate view with replay_full_session()\n- Cascade deletion to avoid orphan transcripts\n\nUpdated decision table:\n- Added 2 new scenarios for Pattern D (debugging + cleanup)\n\nEnhanced c\n[…]\nreference\n\nUpdated cross-references:\n- Added helen-stdlib skill reference\n\nThis completes the documentation coverage for v1.23.7 spawn transcript\nfeatures across all relevant skills and documentation.",
"is_bot": false,
"headline": "docs(skill): add spawn transcript management pattern to helen-program…",
"author_name": "hahalee000000",
"author_login": null,
"committed_at": "2026-07-21T08:25:37Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "103fd203dc84bea804881881a7015335d52c42e5",
"body": "New section covers v1.23.7 features:\n- Querying spawn relationships (get_spawned_sessions, get_spawn_tree)\n- Aggregated view (replay_full_session)\n- Cross-spawn search (search_transcript with include_spawned)\n- Cascade deletion (delete_session, cleanup_sessions with cascade)\n- Design rationale for cascade behavior\n\nUpdated version to v1.23.7 and date to 2026-07-21.",
"is_bot": false,
"headline": "docs(tutorial): add spawn transcript management section to 07-spawn.md",
"author_name": "hahalee000000",
"author_login": null,
"committed_at": "2026-07-21T08:22:30Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "80db1c9d17890fb27655ee5a3da25434a6e8df2b",
"body": "…tures\n\nAdded comprehensive sections:\n- replay_full_session() - aggregate view across spawn tree\n- search_transcript(include_spawned=true) - cross-spawn search\n- export_transcript(include_spawned=true) - export full spawn tree\n- get_spawned_sessions() and get_spawn_tree() - spawn relationship queries\n- Cascade deletion (delete_session, delete_current_session, cleanup_sessions)\n- Updated Chinese alias table with v1.23.7 functions\n\nAll examples include both English and Chinese usage patterns.",
"is_bot": false,
"headline": "docs(tutorial): update 10-stdlib.md with v1.23.7 spawn transcript fea…",
"author_name": "hahalee000000",
"author_login": null,
"committed_at": "2026-07-21T08:21:51Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "271a4fac017d8aaf5a67a1354c217815c58c4a35",
"body": "New Chinese aliases:\n- 回放完整会话 → replay_full_session\n- 获取子会话 → get_spawned_sessions\n- 获取会话树 → get_spawn_tree\n\nThese aliases follow the existing naming convention in zh.py and\nprovide natural Chinese names for the new spawn tracking functions.",
"is_bot": false,
"headline": "feat(stdlib): add Chinese aliases for v1.23.7 spawn-aware functions",
"author_name": "hahalee000000",
"author_login": null,
"committed_at": "2026-07-21T08:16:39Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "4dda33b33c1b81be7171606ead3dfbce06a4d97d",
"body": "wiki/log.md:\n- Add v1.23.7 feature entry documenting P1 and P2 functions\n- Include usage examples and implementation details\n\nhelen-stdlib SKILL.md:\n- Update Transcript category count: 17 → 22 functions\n- Add spawn tracking section with examples:\n * get_spawned_sessions() - query spawn relationship\n[…]\ncript(include_spawned=true) - export full tree\n * cleanup_sessions(cascade=true) - cascade cleanup\n\nAll documentation now reflects the complete v1.23.7 spawn-aware\ntranscript management capabilities.",
"is_bot": false,
"headline": "docs: update wiki and skill for v1.23.7 spawn-aware functions",
"author_name": "hahalee000000",
"author_login": null,
"committed_at": "2026-07-21T08:13:58Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "04a74a957602929642332075a8025808958c550d",
"body": "P1 Functions (High Priority):\n- replay_full_session(): Aggregate messages from session and all spawns\n- search_transcript(include_spawned=true): Search across spawn tree\n\nP2 Functions (Medium Priority):\n- cleanup_sessions(cascade=true): Cascade deletion using delete_session\n- export_transcript(inclu\n[…]\nmessages = replay_full_session()\n let matches = search_transcript('error', include_spawned=true)\n cleanup_sessions(keep_count=10, cascade=true)\n export_transcript('full.json', include_spawned=true)",
"is_bot": false,
"headline": "feat(transcript): implement P1 and P2 spawn-aware functions",
"author_name": "hahalee000000",
"author_login": null,
"committed_at": "2026-07-21T08:12:13Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "9db1016df3cd7ebb27eade71eabeec4135a00b8a",
"body": "- Add cascade parameter to delete_current_session(confirm, cascade=true)\n- Recursively collect and delete all spawned sessions\n- Return deleted_sessions list in response\n- Prevents orphaned transcripts from accumulating\n\nNote: cleanup_sessions cascade support deferred to next iteration due to\ncomple\n[…]\nspawn_tree() - query full spawn hierarchy\n✅ delete_session(id, cascade=true) - cascade deletion\n✅ delete_current_session(confirm, cascade=true) - cascade deletion\n⏳ cleanup_sessions cascade - deferred",
"is_bot": false,
"headline": "feat(transcript): enhance delete_current_session with cascade support",
"author_name": "hahalee000000",
"author_login": null,
"committed_at": "2026-07-21T08:01:22Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "8176a66a1987ca566eca86d8e5461b9e3a222745",
"body": "Major feature: Track spawn relationships across sessions and enable\ncascade deletion to prevent orphaned transcripts.\n\n## Core Changes\n\n### 1. SessionMeta adds parent_session_id\n- helen/runtime/transcript_store.py\n- New field tracks which session spawned this one\n- Backward compatible (old transcrip\n[…]\nand project scopes\n- Cascade deletion is recursive (handles nested spawns)\n- Current session cannot be deleted (use delete_current_session)\n- Spawn tree is different from invocation tree (agent calls)",
"is_bot": false,
"headline": "feat(transcript): spawn session tracking and cascade deletion (v1.23.7)",
"author_name": "hahalee000000",
"author_login": null,
"committed_at": "2026-07-21T07:55:43Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "b752578edc5ca3c7d7828b02e7e9cf7920183445",
"body": "- wiki/log.md: add v1.23.6+ import hook update entry\n- helen-python-bridge SKILL.md: document function import via import hook\n - Show how to import fn alongside agent\n - Complete example with Helen file + Python usage\n - Note about install_import_hook() requirement",
"is_bot": false,
"headline": "docs: update for import hook function support",
"author_name": "hahalee000000",
"author_login": null,
"committed_at": "2026-07-21T06:50:58Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "d56ea831307879ee88adb0fe7ef4469560d88764",
"body": "- Updated HelenLoader.exec_module() to load both agents AND functions\n- All functions (fn) are wrapped with HelenFunctionWrapper\n- Agents and functions share the same Interpreter instance\n- Module metadata includes __interpreter__ for advanced usage\n\nUsage:\n from helen.python_bridge.import_hook imp\n[…]\ny_function, MY_CONST\n result = my_function(10, 20) # Call Helen fn directly\n agent_result = my_agent() # Call Helen agent\n\nNote: Function names cannot shadow stdlib builtins (e.g., 'calculate')",
"is_bot": false,
"headline": "feat(python-bridge): import hook now exposes Helen functions (fn)",
"author_name": "hahalee000000",
"author_login": null,
"committed_at": "2026-07-21T06:50:20Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "cbcc4343383cdd214977f6f707732dad504322c9",
"body": "- wiki/log.md: add v1.23.6 changelog (LSP references, Python Bridge functions)\n- helen-python-bridge SKILL.md: document HelenFunctionWrapper usage\n - How to call Helen fn from Python\n - load_helen_functions() for batch loading\n - When to use fn vs agent\n - Mixed usage examples\n\nVersion: 1.0.0 → 1.1.0",
"is_bot": false,
"headline": "docs: update wiki and skill for v1.23.6 features",
"author_name": "hahalee000000",
"author_login": null,
"committed_at": "2026-07-21T04:43:07Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "25e8aa6cfbe5816af1d0c2410823c70928b1c5df",
"body": "…om Python\n\n- HelenFunctionWrapper: call individual Helen functions from Python\n- load_helen_functions(): load all functions from a Helen file\n- Complements existing HelenAgentWrapper (agent-only)\n- Enables hybrid Python+Helen codebases\n\nUsage:\n from helen.python_bridge.function_wrapper import HelenFunctionWrapper\n add = HelenFunctionWrapper('add', 'utils.helen')\n result = add(10, 32) # 42",
"is_bot": false,
"headline": "feat(python-bridge): add HelenFunctionWrapper for calling Helen fn fr…",
"author_name": "hahalee000000",
"author_login": null,
"committed_at": "2026-07-21T04:40:44Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "98f71e4cf915c5694f5d9479762e23c8e2f7c45f",
"body": "- Add referencesProvider to LSP server (Shift+F12 in VS Code)\n - Find all call sites of functions/agents/variables\n - Support Chinese identifiers\n - Skip comments and string literals\n - Cross-file search (all open documents)\n - Optional includeDeclaration flag\n\n- VS Code extension: auto-detect \n[…]\ness of VS Code launch method (desktop/terminal)\n - User can still override via helen.lsp.path setting\n\n- LSP server: use helen.__version__ instead of hardcoded 1.10.0\n\n- Version bump: 1.23.5 → 1.23.6",
"is_bot": false,
"headline": "v1.23.6: LSP add Find All References + auto-detect helen binary",
"author_name": "hahalee000000",
"author_login": null,
"committed_at": "2026-07-21T04:24:28Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "85dcd0597c564de64cc577a04f7665f353682145",
"body": "…, not LSP process CWD\n\nLSP was reporting spurious 'import file not found' diagnostics for any\nrelative import (e.g. 'import \"./helper.helen\"'), even when the imported\nfile existed next to the main file.\n\n== Root Cause ==\n\nhelen/lsp/server.py _analyze() hard-coded '<lsp>' as the Scanner's file\nname:\n[…]\nt_analyze_with_uri_resolves_imports: end-to-end sibling import\n- test_analyze_without_uri_reports_missing_import: baseline negative case\n\nAll 35 LSP tests pass. 230 semantic + import tests still pass.",
"is_bot": false,
"headline": "fix(lsp): v1.23.5 resolve relative imports against document directory…",
"author_name": "hahalee000000",
"author_login": null,
"committed_at": "2026-07-21T03:59:00Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "0a789fe2924162d41c1c7751af0d77eac4360d85",
"body": "…1.23\n\nUpdates the TextMate grammar to cover all keywords introduced since\nv1.10. The extension was stuck at v1.10.0 while Helen advanced to\nv1.23.4, leaving spawn/Channel/shared store/on_tool_end/etc. without\nsyntax highlighting.\n\nAdded keyword groups:\n- keyword.concurrency: spawn, Channel, mailbox\n[…]\nar size: 8.32 KB -> 9.14 KB.\n\nLSP integration unchanged (already current via 'helen lsp' on the\nPython side). Rebuild locally with:\n cd extensions/vscode && npm install && npx tsc && npx vsce package",
"is_bot": false,
"headline": "feat(vscode): v1.23.4 extension - add 22 missing keywords for v1.12-v…",
"author_name": "hahalee000000",
"author_login": null,
"committed_at": "2026-07-21T03:27:49Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "a46af243aea12c5f479a309a5e66366559987937",
"body": "…vscode/\n\nRemoved the duplicate vscode-extension/ directory (contained only stale\nv1.8.0 build artifacts - compiled out/, node_modules, and an old .vsix,\nwith no source code). extensions/vscode/ is now the single canonical\nlocation for the VS Code extension, containing complete source:\n\n extensions\n[…]\ntensions/vscode/ source was already up to date\nand tracked in git. Build artifacts (out/, node_modules/, .vsix) are\ngitignored and regenerated locally via 'npm install && npx tsc && npx\nvsce package'.",
"is_bot": false,
"headline": "docs: consolidate VS Code extension into single directory extensions/…",
"author_name": "hahalee000000",
"author_login": null,
"committed_at": "2026-07-21T03:21:30Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "f7ea22af113f596beb6cedc21fb4a482ede6a674",
"body": "…ting main thread\n\nCritical concurrency bug fix: spawn was silently corrupting the main\nthread's session_id and agent context, causing all subsequent stdlib\ncalls (llm act, working_memory, compress_context, etc.) in the main\nthread to operate on the spawned interpreter's context.\n\n== Root Cause ==\n\n\n[…]\nme + stdlib + interpreter), no regressions.\n\nDocumentation:\n- CLAUDE.md: added thread isolation note to Runtime Isolation section\n- wiki/log.md: v1.23.4 changelog entry\n\nVersion bump: 1.23.3 -> 1.23.4",
"is_bot": false,
"headline": "fix(stdlib): v1.23.4 thread-local agent context - prevent spawn pollu…",
"author_name": "hahalee000000",
"author_login": null,
"committed_at": "2026-07-21T02:07:11Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "f419944b36de53a4355fa47cc83325cedd3fe58c",
"body": "…amp, version tracking\n\nAdds SessionMeta record as the first line of every new transcript,\ncapturing the execution context (program name, arguments, start time,\nversions, working directory) for session identification, audit trail,\nand debugging.\n\nNew in v1.23.3:\n\n1. SessionMeta dataclass (helen/runt\n[…]\nanscript-store.md: new §4.7 with format, fields, design goals\n- wiki/index.md: updated TranscriptStore entry with v1.23.3 note\n- wiki/log.md: changelog entry for v1.23.3\n\nVersion bump: 1.23.2 → 1.23.3",
"is_bot": false,
"headline": "feat(stdlib): v1.23.3 TranscriptStore session metadata — argv, timest…",
"author_name": "hahalee000000",
"author_login": null,
"committed_at": "2026-07-21T01:25:27Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "e1a812e263cedd781a2bccb27980d1fd845a69eb",
"body": "…duction P0)\n\nPart of the 'isolation vs complexity' reduction plan — implementing\nonly the two non-over-engineered P0 items. Other proposals deferred.\n\n== Plan 1: Smart Error Messages ==\n\nWhen a user accesses a module-level variable from inside an agent main\nblock, the compiler now emits a detailed,\n[…]\n/README.md - template index with usage guide\n- helen/templates/*.helen - 6 template files\n- helen/cli/__main__.py - template_command() implementation\n- wiki/toolchain/templates.md - wiki documentation",
"is_bot": false,
"headline": "feat: smart error messages + built-in template library (complexity re…",
"author_name": "hahalee000000",
"author_login": null,
"committed_at": "2026-07-20T09:36:50Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "5ed5d045ba6bd821eb8064f2d0d5091c366d46b0",
"body": "…n principle + bump to v1.23.2\n\nCore design principle:\n- '调用 agent 前先问:它需要知道什么?' (Before calling an agent,\n ask: what context does it need?)\n- Agent is strictly isolated — each call creates an independent\n execution environment that does NOT auto-inherit caller's variables,\n history, or LLM conte\n[…]\nnciple\n with 5 design reasons + context passing reference table\n- helen-agent-patterns SKILL: new first-principle preface tying all\n patterns back to context isolation\n\nVersion bump: 1.23.1 → 1.23.2",
"is_bot": false,
"headline": "docs: establish 'Caller Decides Context' as Helen's first agent desig…",
"author_name": "hahalee000000",
"author_login": null,
"committed_at": "2026-07-20T08:36:25Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "588fe5c111e6c2699ac64ef009c092f0b41e17e1",
"body": "…ngual error detection, exit_code extraction, task_description auto-set\n\nFixes from working-memory-audit-2026-07-20.md:\n\n1. Chinese tool name canonicalization (agent_context.py)\n - update_from_tool_call now translates Chinese aliases (读文件 → read_file)\n before matching, so user-defined Chinese \n[…]\n\n- Chinese tool name canonicalization (4 tests)\n- Multilingual error detection (6 tests)\n- task_description auto-set (3 tests)\n\nAll 40 working memory tests + 644 runtime tests + 807 stdlib tests pass.",
"is_bot": false,
"headline": "fix(working-memory): 4 fixes from audit — Chinese tool names, multili…",
"author_name": "hahalee000000",
"author_login": null,
"committed_at": "2026-07-20T08:11:06Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "e16ff17e5c1549efcc360b2881c332c140affcd6",
"body": "…pattern\n\n- CLAUDE.md: document Runtime Isolation design principle for TranscriptStore\n- helen-agent-patterns: add anti-pattern, handoff template, and decision table to spawn pattern\n- helen-programming-methodology: add Context Handoff Pattern as core principle §5 (3 modes + decision table)\n- helen-\n[…]\n\n\nKey takeaway: 'spawn means isolation, handoff must be explicit' — transcript is\nscoped to Interpreter instance; cross-runtime inheritance requires explicit\nresume_session() or Channel-based passing.",
"is_bot": false,
"headline": "docs: add transcript runtime isolation principle and context handoff …",
"author_name": "hahalee000000",
"author_login": null,
"committed_at": "2026-07-20T07:44:37Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "481e72beb23fe7ea47771fa44970e77363d43b3a",
"body": "AgentContextManager now defers TranscriptStore initialization until first\naccess of transcript_store or session_id property. This prevents creating\nempty session directories for agents that never use transcript features.\n\nKey changes:\n- __init__() no longer calls _init_transcript_store() immediately\n[…]\ncess\n- Use getattr() safety for objects created via __new__() (bypassing __init__)\n\nCleanup: ~5800 empty session directories removed from:\n- ~/.helen/sessions/ (33 → 1)\n- .helen/sessions/ (6325 → 563)",
"is_bot": false,
"headline": "bugfix: lazy-init session directory to prevent empty dir accumulation",
"author_name": "rxx",
"author_login": null,
"committed_at": "2026-07-19T09:40:27Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "4c7ccd3d19dd8d6a80295e69764b123a725594f1",
"body": "…skill\n\nllm_mixin.py _build_tools_list() now includes list_skill_references\nin all three default tool injection points:\n1. @sandbox agents (L3 isolation)\n2. Agents with no declared tools\n3. All agents as a catch-all at the end\n\nCo-Authored-By: Claude <noreply@anthropic.com>",
"is_bot": false,
"headline": "fix: add list_skill_references to agent default tools alongside load_…",
"author_name": "rxx",
"author_login": null,
"committed_at": "2026-07-19T03:53:53Z",
"body_truncated": false,
"is_coding_agent": true
},
{
"oid": "74d07671b36f3f0a8a2fcfbc0432f6f4aedd9001",
"body": "- Enhanced load_skill with include_references parameter to list\n reference files alongside SKILL.md content\n- Added new list_skill_references tool that returns reference file\n names, paths, sizes, and 3-line previews for LLM to decide which\n to load via read_file\n- Chinese alias: 列出技能引用 → list_sk\n[…]\nutorial/13-skills.md: added third-tier docs\n- helen-stdlib SKILL.md: Tools category 6 → 7\n- CLAUDE.md: tool/builtin counts updated\n\nAll 3048 tests pass.\n\nCo-Authored-By: Claude <noreply@anthropic.com>",
"is_bot": false,
"headline": "feat: enhance skill reference system with list_skill_references tool",
"author_name": "rxx",
"author_login": null,
"committed_at": "2026-07-19T03:46:49Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "57d8c5d1df3681a1a12742891679a5d7701bf170",
"body": "…stration\n\ninterpreter.py: 3258 → 1990 lines (-39%)\n\nPhase 1: Extract auxiliary classes\n- closure.py: Closure class + free variable analysis functions\n- readonly_view.py: ReadOnlyView (agent parameter isolation)\n- shared_store.py: SharedStore + SharedStoreMethod (thread-safe shared state)\n\nPhase 2: \n[…]\nin architecture diagram\n- wiki/interpreter/execution.md: added mixin architecture table\n- wiki/log.md: added refactoring log entry\n\nAll 3048 tests pass.\n\nCo-Authored-By: Claude <noreply@anthropic.com>",
"is_bot": false,
"headline": "refactor: split interpreter.py into mixins and reorganize stdlib regi…",
"author_name": "rxx",
"author_login": null,
"committed_at": "2026-07-19T01:50:13Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "7ffaf54b942551cf593f27693798b7999200d0ea",
"body": "- wiki/runtime/context-management.md: 更新 restore_context vs resume_session 对比表\n- wiki/tutorial/10-stdlib.md: 更新 resume_session 描述和使用场景\n- helen-stdlib/SKILL.md: 更新 restore_context vs resume_session 注释\n\nv1.23 变更:\n- 之前:resume_session 替换 transcript store 引用,LLM 看不到\n- 现在:resume_session 导入消息到当前 store,LLM 能看到(标记 invocation_id)",
"is_bot": false,
"headline": "docs: 更新 resume_session 语义说明(v1.23 修复后 LLM 可见)",
"author_name": "rxx",
"author_login": null,
"committed_at": "2026-07-18T09:05:57Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "2e97f24af8ea639b317ae085a1432d91cf42b953",
"body": "- helen-agent-patterns/SKILL.md: 新增 'Agent 上下文隔离' 章节,说明 invocation 级别隔离机制\n- helen-stdlib/SKILL.md: 添加 v1.23 上下文隔离修复说明和验证示例\n- wiki/runtime/context-management.md: 更新版本至 v1.23,新增 §0.6 修复说明\n- wiki/appendix/changelog.md: 补充 v1.22 和 v1.23 变更日志\n- wiki/log.md: 添加 v1.23 wiki 更新记录",
"is_bot": false,
"headline": "docs: 更新 wiki 和 skills 文档,补充 v1.22/v1.23 invocation 隔离说明",
"author_name": "rxx",
"author_login": null,
"committed_at": "2026-07-18T09:01:34Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "c2321a3b57e94be036580f9c0b851048ec558d92",
"body": null,
"is_bot": false,
"headline": "chore: bump version to 1.23.1 for PyPI upload",
"author_name": "rxx",
"author_login": null,
"committed_at": "2026-07-18T08:47:52Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "0455ed9fed986c803f82717422d96b561b704908",
"body": "核心修复(v1.22 提案 vs 实现不一致):\n- Bug 1: _prepare_history_for_llm 统一走 self._history(包含 invocation_id 过滤)\n- Bug 2: _import_context 单写语义 + invocation_id 标记\n- Bug 3: resume_session 导入消息到当前 store 而非替换引用\n\n修改文件:\n- helen/interpreter/llm_mixin.py: 统一使用 _history property\n- helen/stdlib/context.py: _import_context 单\n[…]\nlation.py(2 个测试)\n- 更新 tests/stdlib/test_context_v119_p1p3.py(适配单写语义)\n- 修复 tests/runtime/test_session_scope.py(3 个测试,mock Path.exists 隔离 /tmp/.helen)\n\n结果: 3048 passed, 0 failed(从 3042 passed, 4 failed)",
"is_bot": false,
"headline": "feat(v1.23): 修复调用隔离 + 版本 bump 至 1.23.0",
"author_name": "rxx",
"author_login": null,
"committed_at": "2026-07-18T08:43:26Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "2938f7b35084f3f66a2014374e014244214a77ce",
"body": "User-defined symbols (variables, functions, agents, parameters, loop\niterators, match bindings, catch error names, import aliases, alias\nstatements, shared store/channel names) can no longer shadow stdlib\nbuiltins. Since Helen is AI-native (LLM reads and writes the code),\nshadowing builtins creates \n[…]\nhape\n- Updated 12 existing tests that relied on builtin names (log, count,\n sum, input, describe, add, calculate, 列表, 测试) to use non-builtin\n alternatives\n\n3050 tests pass (+18 new), no regressions.",
"is_bot": false,
"headline": "feat(v1.23): forbid builtin shadowing",
"author_name": "hahalee000000",
"author_login": null,
"committed_at": "2026-07-17T08:54:55Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "27cf7ddba6bd9a3cce6f77a7b261aa797bf57f90",
"body": "…ript + builtin shadowing 修复\n\n== v1.22 主体:Invocation Tree + Per-Main Fresh Context ==\n\n实现 reports/v1.22-invocation-tree-proposal.md 提案。核心设计原则:\n每次 agent main {} 执行都是 fresh context,main {} 退出后丢弃;\n记忆管理是程序的事,不是语言的事。\n\nMessage 字段扩展 (helen/runtime/history.py):\n- 新增 agent_name / invocation_id / parent_invoc\n[…]\nter 看不到 Inner 的消息)\n- 顶层 agent_name: null\n- 元数据持久化: 不持久化,从 transcript 重建 (SSOT)\n- list_invocations 分页: limit=100, offset=0\n- call_stack 关系: 独立实现\n\nCo-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>",
"is_bot": false,
"headline": "feat(v1.22): Invocation Tree + Per-Main Fresh Context + search_transc…",
"author_name": "hahalee000000",
"author_login": null,
"committed_at": "2026-07-17T08:16:18Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "31837ce51cc56772e8c131ac0db5753cf9efcb70",
"body": "填补 TranscriptStore (审计层) 与 Active Context (活跃层) 之间的 API 缺口。\n之前从旧 transcript session 恢复 active context 需要手写格式适配,\n现在一步到位。\n\n核心实现:\n- helen/stdlib/context.py: _restore_context() 直接读 TranscriptStore\n 拿完整 Message 对象,保留 role/content/tool_calls/tool_call_id/\n uuid/compressed/pinned 全部字段,内部委托 import_context\n[…]\n: 替换 transcript store 引用 (LLM 看不到)\n\n限制 (已显式记录):\n- 只恢复 messages, 不恢复 working_memory 和 context config\n (transcript 不持久化这些)\n- 返回值 note 字段提示用户手动恢复\n\nCo-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>",
"is_bot": false,
"headline": "feat(v1.21): 新增 restore_context(session_id) 跨会话恢复函数",
"author_name": "hahalee000000",
"author_login": null,
"committed_at": "2026-07-17T03:20:42Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "3fea90c7eb28a7d3e4520fba74be9be84a57b371",
"body": "避免将会话 transcript 文件提交到仓库",
"is_bot": false,
"headline": "chore: 添加 .helen/sessions/ 到 .gitignore",
"author_name": "rxx",
"author_login": null,
"committed_at": "2026-07-16T15:37:04Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "417a694c5a5d016441c598ae90a2779cbe99a8e5",
"body": "重要:同步修改到内置 skill 目录 (helen/skills/) 和 Claude skill 目录 (.claude/skills/)\n\n## 新增内容\n\n### 1. ImportResolver 缓存机制文档\n- wiki/runtime/import.md: 完整技术说明\n * 内存缓存行为(_cached_results)\n * 缓存命中/未命中场景对比\n * 三种解决方案(新建实例/手动清除/mtime 检查)\n * Helen vs Python 缓存对比\n\n- wiki/tutorial/08-modules.md: 开发者教程\n * 问题场景演示\n * 快速\n[…]\n务:缓存不自动失效,需手动清除\n✅ 解决方案:新建 Interpreter 实例或手动清除缓存\n✅ Helen 无磁盘缓存:内存缓存,进程重启自动清空\n\n## 解决的问题\n\n- Issue #15: Helen 解释器 bytecode 缓存问题\n- 开发者在 REPL/Web 服务中修改代码后不生效的困惑\n- 统一文档位置,避免 .claude/skills vs helen/skills 混淆",
"is_bot": false,
"headline": "docs: 补充 Helen 缓存机制知识到多个 skill 和 wiki",
"author_name": "rxx",
"author_login": null,
"committed_at": "2026-07-16T15:36:40Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "425983c51f00b84dab7e30841455674bd5c45a2b",
"body": "修复 GitHub Issue #14: resume_session 无视 set_session_dir() 和项目级会话作用域\n\n问题:\n- resume_session() 和 replay_transcript() 使用 get_transcript_config()['session_dir']\n- 这会返回默认值 ~/.helen/sessions,忽略了环境变量和项目级作用域\n- 导致 helenagent Web UI 刷新后无法恢复 LLM 上下文\n\n修复:\n- 将 get_transcript_config()['session_dir'] 替换为 resolve_ses\n[…]\nR 环境变量\n- 现在正确使用项目级会话作用域 (v1.20+ 默认)\n- 现在正确使用 set_session_dir() 动态设置的路径\n\n影响:\n- helenagent Web UI 可以正确恢复会话\n- 所有使用项目级会话的应用现在工作正常\n- delete_session/cleanup_sessions/list_sessions 已经正确使用 resolve_session_dir",
"is_bot": false,
"headline": "fix: resume_session 和 replay_transcript 现在正确使用 resolve_session_dir",
"author_name": "rxx",
"author_login": null,
"committed_at": "2026-07-16T15:09:05Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "00ea620eb7f193002bdb1b030933e97bde9a79ed",
"body": "P0: 修复文档中的关键字和函数引用\n- helen-syntax SKILL.md: 删除不存在的 让/async/await/call 关键字\n- helen-stdlib SKILL.md: 修正 25 个幽灵函数名\n- 统一 prompt 中文为 提示词\n\nP1: 添加中文配置键支持\n- parser.py: 添加 上下文 和 记忆 中文关键字支持\n- 修复 agent 声明中的中文配置块解析\n\nP2: 补充 stdlib 函数文档\n- Context 高级函数 (27个): 检查/变更/工作记忆/配置/查询/转移/钩子\n- Transcript 会话记录 (11个): 会话管理/回放\n[…]\n/stopwatch_lap\n\n中文别名 (+27个): 余弦/正弦/幂/对数/操作系统/主机名/生成UUID 等\n\n统计:\n- stdlib 函数: 290 → 317 (+27)\n- 中文别名: 290 → 317 (+27)\n- 关键字文档准确性: 100%\n\n修复 get_session_dir() 文档错误:\n- 返回值从暗示的字符串改为实际的 dict\n- 添加完整的返回结构说明和示例",
"is_bot": false,
"headline": "feat: 完善中文关键字和 stdlib 别名完整性",
"author_name": "rxx",
"author_login": null,
"committed_at": "2026-07-16T14:27:55Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "5551087dc19f09dae79ad3d3bf6bcc14f1dcf1e9",
"body": "新增测试文件:\n- test_clear_context_behavior.py: 12 个行为驱动测试\n * 验证 clear_context() 实际清除 read_view()\n * 验证 BoundaryMarker 覆盖所有消息\n * 验证压缩状态重置\n * 验证 working memory 清除\n * 边界条件测试\n\n- test_compress_context_integration.py: 14 个集成测试\n * 验证所有策略在 TranscriptStore 启用时的行为\n * 验证 BoundaryMarker 创建\n * 验证 read_view() \n[…]\n_description = \"\" 到清除列表\n\n2. compress_context(\"none\") 在 TranscriptStore 路径未处理\n - 添加 \"none\" 策略的显式处理\n\n测试结果:\n- 26 个新测试全部通过\n- 所有 145 个相关测试通过\n- 无回归\n\nCo-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>",
"is_bot": false,
"headline": "test: 新增 26 个行为驱动测试和集成测试,修复 2 个 bug",
"author_name": "hahalee000000",
"author_login": null,
"committed_at": "2026-07-16T10:03:41Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "bfd37463303ecf02dd7a2cb0bc46f0679051f9b9",
"body": "Bug: clear_context() 创建的 BoundaryMarker 使用空 UUID(head_uuid=\"\"、\ntail_uuid=\"\"),导致 read_view() 查找 _uuid_index 时返回 None,\n条件 if head_idx is not None and tail_idx is not None 为 False,\nmarker 被完全跳过,上下文实际未被清除。\n\n修复:\n- 查找当前 transcript 中第一条和最后一条 Message 的 UUID\n- 设置 BoundaryMarker 的 head_uuid/tail_uuid 为真实消息 UU\n[…]\nTrue 使缓存失效\n- 返回 cleared_message_count 字段\n\n验证:\n- 3 条消息 → clear_context → read_view() 返回 0 条 ✓\n- 清除后添加新消息 → read_view() 返回 1 条 ✓\n- 所有 146 个相关测试通过\n\nCo-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>",
"is_bot": false,
"headline": "fix: clear_context() BoundaryMarker 现在覆盖所有消息,真正清除上下文",
"author_name": "hahalee000000",
"author_login": null,
"committed_at": "2026-07-16T09:09:56Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "8ac8aa0029af43357498a0f32f8654201e62beb0",
"body": "CI 失败原因:issue #12 的测试使用 Mock 对象并断言压缩后消息数为 1,\n但 compress_context 实现已改为使用 _force_compact(保留摘要+最后1条=2条)\n和 _context_collapse(需 >20 条消息才触发)。\n\n修复:\n- summarize 测试:使用真实 Message 对象,断言压缩后消息数 < 原始数\n- truncate 测试:使用 25 条消息(满足 CONTEXT_COLLAPSE_THRESHOLD=20)\n- none 测试:保持不变(已通过)\n\n所有 3 个测试通过,CI 应恢复绿色。\n\nCo-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>",
"is_bot": false,
"headline": "fix(test): 修复 test_issue_12 与 _force_compact 新实现不兼容",
"author_name": "hahalee000000",
"author_login": null,
"committed_at": "2026-07-16T08:56:37Z",
"body_truncated": false,
"is_coding_agent": true
},
{
"oid": "a5a5eb59f153fa4ff43e406d7aafb0f99d73c094",
"body": "新增 3 个 stdlib 函数用于永久删除 TranscriptStore 会话数据:\n\n- delete_session(session_id): 永久删除指定会话\n- delete_current_session(confirm?): 永久删除当前会话(需确认)\n- cleanup_sessions(keep_count?, older_than_days?): 批量清理旧会话\n\n中文别名:删除会话、删除当前会话、清理会话\n\n设计原则:\n- 审计追踪优先:delete_message/clear_context 只进行逻辑删除\n- 显式永久删除:delete_session 系列函数才真\n[…]\noolchain/stdlib.md: 函数数量更新\n- helen-stdlib/SKILL.md: Transcript 章节 + 函数列表更新\n- helen-agent-patterns/SKILL.md: 会话删除最佳实践\n- CLAUDE.md: stdlib 函数列表更新\n\nCo-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>",
"is_bot": false,
"headline": "feat(stdlib): v1.21 新增 TranscriptStore 会话删除功能",
"author_name": "hahalee000000",
"author_login": null,
"committed_at": "2026-07-16T08:46:35Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "d998b9a506d839006dc7fd17c6b797fe72c939ec",
"body": "问题:\n- 之前使用 _auto_compact,要求消息数 > 6 才压缩\n- 用户显式调用 compress_context(\"summarize\") 时,如果消息数少(如 3 条大消息),不会压缩\n- 用户报告: 10285 tokens → 10285 tokens(无压缩)\n\n修复:\n- 新增 _force_compact 函数,专门为显式调用设计\n- 无阈值检查,即使只有 2-3 条消息也会压缩\n- 保留最后 1 条消息用于连续性,其他消息压缩为摘要\n- 支持 LLM 语义摘要(如果有 llm_client)\n- 符合 TranscriptStore SSOT 和 context \n[…]\n 场景 1: 3 条消息 (3662 tokens) → 2 条消息 (1220 tokens),减少 66.7%\n- 场景 2: 20 条消息 (2700 tokens) → 2 条消息 (1639 tokens),减少 39.3%\n- 所有 100 个 context 相关测试通过\n\nCo-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>",
"is_bot": false,
"headline": "fix: compress_context(summarize) 现在无条件压缩,即使消息数很少",
"author_name": "hahalee000000",
"author_login": null,
"committed_at": "2026-07-16T07:44:31Z",
"body_truncated": true,
"is_coding_agent": true
}
],
"releases_count": 3,
"commits_last_year": 472,
"latest_release_at": "2026-07-24T09:39:56Z",
"latest_release_tag": "v1.25.2",
"releases_from_tags": false,
"days_since_last_push": 0,
"active_weeks_last_year": 7,
"days_since_latest_release": 3,
"mean_days_between_releases": 0.1
},
"community": {
"has_readme": true,
"has_license": true,
"has_description": true,
"has_contributing": false,
"health_percentage": 42,
"has_issue_template": false,
"has_code_of_conduct": false,
"has_pull_request_template": false
},
"ecosystem": {
"packages": [
{
"name": "helen-lang",
"exists": true,
"license": "MIT",
"keywords": [
"helen",
"helen-lang",
"ai",
"artificial-intelligence",
"machine-learning",
"deep-learning",
"llm",
"gpt",
"claude",
"large-language-model",
"chatgpt",
"agent",
"ai-agent",
"multi-agent",
"agent-orchestration",
"autonomous-agent",
"prompt",
"prompt-engineering",
"prompt-first",
"dsl",
"domain-specific-language",
"programming-language",
"langchain",
"crewai",
"autogen",
"langchain-alternative",
"chatbot",
"conversational-ai",
"natural-language",
"bilingual",
"chinese-programming",
"中文编程",
"context-management",
"transcript",
"session-management",
"tool-calling",
"function-calling",
"agent-framework",
"Development Status :: 4 - Beta",
"Intended Audience :: Developers",
"License :: OSI Approved :: MIT License",
"Natural Language :: Chinese (Simplified)",
"Natural Language :: English",
"Operating System :: OS Independent",
"Programming Language :: Python :: 3",
"Programming Language :: Python :: 3.12",
"Topic :: Internet :: WWW/HTTP :: Dynamic Content",
"Topic :: Scientific/Engineering :: Artificial Intelligence",
"Topic :: Software Development :: Compilers",
"Topic :: Software Development :: Libraries :: Python Modules",
"Typing :: Typed"
],
"ecosystem": "pypi",
"matches_repo": true,
"registry_url": "https://pypi.org/project/helen-lang/",
"is_deprecated": false,
"latest_version": "1.29.4",
"repository_url": "https://github.com/hahalee000000/helen",
"versions_count": 37,
"total_downloads": null,
"dependents_count": null,
"deprecation_note": null,
"maintainers_count": null,
"monthly_downloads": null,
"first_published_at": "2026-07-15T08:14:43.615939Z",
"latest_published_at": "2026-07-27T16:07:56.315749Z",
"latest_version_yanked": null,
"days_since_latest_publish": 0
}
]
},
"popularity": {
"forks": 0,
"stars": 2,
"watchers": 0,
"fork_history": {
"days": [],
"complete": true,
"collected": 0,
"total_forks": 0
},
"star_history": null,
"open_issues_and_prs": 1
},
"ai_readiness": {
"has_nix": false,
"example_dirs": [
"examples"
],
"has_llms_txt": false,
"has_dockerfile": false,
"has_mcp_signal": false,
"bootstrap_files": [],
"api_schema_files": [],
"has_devcontainer": false,
"typecheck_configs": [
"extensions/vscode/tsconfig.json",
"helen/agent/webui/frontend/tsconfig.json",
"helen/py.typed"
],
"toolchain_manifests": [],
"largest_source_bytes": 90308,
"source_files_sampled": 346,
"oversized_source_files": 7,
"agent_instruction_files": [
"CLAUDE.md"
],
"agent_instruction_max_bytes": 9259
},
"dependencies": {
"manifests": [
"pyproject.toml"
],
"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": [
"pypi"
],
"dependencies": [
{
"name": "pyyaml",
"manifest": "pyproject.toml",
"ecosystem": "pypi",
"version_constraint": ">=6.0"
},
{
"name": "toml",
"manifest": "pyproject.toml",
"ecosystem": "pypi",
"version_constraint": ">=0.10"
},
{
"name": "httpx",
"manifest": "pyproject.toml",
"ecosystem": "pypi",
"version_constraint": ">=0.24.0"
}
],
"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": 1,
"closed_ratio": 0.957,
"closed_issues": 22,
"closed_unmerged_prs": 0
},
"bus_factor": null,
"bot_contributors": 0,
"top_contributors": [],
"contributors_sampled": null,
"top_contributor_share": null
},
"quality_signals": {
"has_ci": true,
"has_tests": true,
"ci_workflows": [
"ci.yml"
],
"has_docs_dir": true,
"linter_configs": [
".flake8"
],
"has_editorconfig": false,
"has_linter_config": true,
"has_precommit_config": false
},
"security_signals": {
"lockfiles": [
"package-lock.json",
"uv.lock"
],
"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": 10,
"reason": "no dangerous workflow patterns detected",
"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": 0,
"reason": "dependency not pinned by hash detected -- score normalized to 0",
"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": 0,
"reason": "detected GitHub workflow tokens with excessive permissions",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#token-permissions"
},
{
"name": "Vulnerabilities",
"score": 0,
"reason": "22 existing vulnerabilities detected",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#vulnerabilities"
}
],
"commit": "741417fc0ca0ae76b3486132a9779ea9cabc673a",
"ran_at": "2026-07-27T16:08:52Z",
"aggregate_score": 2.2,
"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-27T16:07:16Z",
"oldest_open_prs": [],
"last_merged_pr_at": null,
"ci_last_conclusion": null,
"oldest_open_issues": [
{
"number": 23,
"created_at": "2026-07-26T09:44:17Z",
"last_comment_at": null,
"last_comment_author": null
}
]
}
},
"config": {
"disabled_metrics": [],
"disabled_categories": [],
"disabled_components": {}
},
"source": {
"url": "https://github.com/hahalee000000/helen",
"host": "github.com",
"name": "helen",
"owner": "hahalee000000"
},
"metrics": {
"overall": {
"key": "overall",
"band": "moderate",
"name": "Overall health",
"note": null,
"notes": [],
"value": 55,
"inputs": {
"security": 22,
"vitality": 75,
"community": 24,
"governance": 63,
"engineering": 78
},
"components": []
},
"categories": [
{
"key": "vitality",
"band": "good",
"name": "Vitality",
"value": 75,
"weight": 0.22,
"metrics": [
{
"key": "development_activity",
"band": "moderate",
"name": "Development activity",
"note": null,
"notes": [],
"value": 59,
"inputs": {
"commits_last_year": 472,
"human_commit_share": 1,
"days_since_last_push": 0,
"active_weeks_last_year": 7
},
"components": [
{
"key": "push_recency",
"name": "Push recency",
"detail": "last push 0 days ago",
"points": 36,
"status": "met",
"details": [
{
"code": "push_recency",
"params": {
"days": 0
}
}
],
"max_points": 36
},
{
"key": "commit_cadence",
"name": "Commit cadence",
"detail": "7/52 weeks with commits",
"points": 4.8,
"status": "partial",
"details": [
{
"code": "commit_cadence_weeks",
"params": {
"weeks": 7
}
}
],
"max_points": 36
},
{
"key": "commit_volume",
"name": "Commit volume",
"detail": "472 commits in the last year",
"points": 18,
"status": "met",
"details": [
{
"code": "commits_last_year",
"params": {
"count": 472
}
}
],
"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": "excellent",
"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": 100,
"inputs": {
"releases_count": 3,
"latest_release_tag": "v1.25.2",
"releases_from_tags": false,
"days_since_latest_release": 3,
"mean_days_between_releases": 0.1
},
"components": [
{
"key": "ships_releases",
"name": "Ships releases",
"detail": "3 releases published",
"points": 27,
"status": "met",
"details": [
{
"code": "releases_published",
"params": {
"count": 3
}
}
],
"max_points": 27
},
{
"key": "release_recency",
"name": "Release recency",
"detail": "latest release 3 days ago",
"points": 36,
"status": "met",
"details": [
{
"code": "release_recency",
"params": {
"days": 3
}
}
],
"max_points": 36
},
{
"key": "release_cadence",
"name": "Release cadence",
"detail": "a release every ~0.1 days",
"points": 27,
"status": "met",
"details": [
{
"code": "release_cadence",
"params": {
"gap": 0.1
}
}
],
"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": "critical",
"name": "Community & Adoption",
"value": 24,
"weight": 0.18,
"metrics": [
{
"key": "popularity",
"band": "critical",
"name": "Popularity & adoption",
"note": null,
"notes": [],
"value": 1,
"inputs": {
"forks": 0,
"stars": 2,
"watchers": 0,
"growth_state": "unverified",
"growth_factor_pct": 100,
"growth_unverified_reason": "no_history"
},
"components": [
{
"key": "stars",
"name": "Stars",
"detail": "2 stars",
"points": 0,
"status": "missed",
"details": [
{
"code": "stars",
"params": {
"count": 2
}
}
],
"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": "moderate",
"name": "Community health",
"note": null,
"notes": [],
"value": 50,
"inputs": {
"has_readme": true,
"has_license": true,
"has_contributing": false,
"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": 0,
"status": "missed",
"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
}
]
}
],
"description": "Does the project have users, downloads, attention, and a welcoming setup for contributors?"
},
{
"key": "governance",
"band": "moderate",
"name": "Sustainability & Governance",
"value": 63,
"weight": 0.24,
"metrics": [
{
"key": "responsiveness",
"band": "good",
"name": "Issue & PR responsiveness",
"note": "Excluded from scoring (no data or not applicable): PR acceptance. Remaining weights renormalized.",
"notes": [
{
"code": "excluded_no_data",
"params": {
"components": [
"pr_acceptance"
]
}
},
{
"code": "weights_renormalized",
"params": {}
}
],
"value": 72,
"inputs": {
"merged_prs": 0,
"open_issues": 1,
"closed_issues": 22,
"issue_closed_ratio": 0.957,
"closed_unmerged_prs": 0
},
"components": [
{
"key": "issue_resolution",
"name": "Issue resolution",
"detail": "96% of issues closed",
"points": 44.7,
"status": "partial",
"details": [
{
"code": "issues_closed_share",
"params": {
"share": 96
}
}
],
"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": "critical",
"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": 24,
"inputs": {
"followers": 0,
"owner_type": "User",
"is_verified": null,
"owner_login": "hahalee000000",
"public_repos": 5,
"account_age_days": 619
},
"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": "0 followers of hahalee000000",
"points": 0,
"status": "missed",
"details": [
{
"code": "owner_followers",
"params": {
"count": 0,
"login": "hahalee000000"
}
}
],
"max_points": 25
},
{
"key": "track_record",
"name": "Track record",
"detail": "5 public repos, account ~1 yr old",
"points": 9.1,
"status": "partial",
"details": [
{
"code": "public_repos",
"params": {
"count": 5
}
},
{
"code": "account_age_years",
"params": {
"years": 1
}
}
],
"max_points": 25
}
]
},
{
"key": "package_maintenance",
"band": "excellent",
"name": "Package maintenance",
"note": null,
"notes": [],
"value": 100,
"inputs": {
"packages": [
"helen-lang"
],
"ecosystems": "pypi",
"any_deprecated": false,
"min_days_since_publish": 0
},
"components": [
{
"key": "published_resolvable",
"name": "Published & resolvable",
"detail": "1 package(s) on pypi",
"points": 25,
"status": "met",
"details": [
{
"code": "packages_published",
"params": {
"count": 1,
"ecosystems": "pypi"
}
}
],
"max_points": 25
},
{
"key": "publish_recency",
"name": "Publish recency",
"detail": "latest publish 0 days ago",
"points": 35,
"status": "met",
"details": [
{
"code": "publish_recency",
"params": {
"days": 0
}
}
],
"max_points": 35
},
{
"key": "version_history",
"name": "Version history",
"detail": "37 published versions",
"points": 20,
"status": "met",
"details": [
{
"code": "published_versions",
"params": {
"count": 37
}
}
],
"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": "good",
"name": "Engineering Quality",
"value": 78,
"weight": 0.2,
"metrics": [
{
"key": "engineering_practices",
"band": "good",
"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": 80,
"inputs": {
"has_ci": true,
"has_tests": true,
"has_editorconfig": false,
"has_linter_config": true,
"has_precommit_config": false
},
"components": [
{
"key": "ci_workflows",
"name": "CI workflows",
"detail": "1 workflow(s)",
"points": 24,
"status": "met",
"details": [
{
"code": "ci_workflows",
"params": {
"count": 1
}
}
],
"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": ".flake8",
"points": 16,
"status": "met",
"details": [
{
"code": "file_list",
"params": {
"files": ".flake8"
}
}
],
"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": "good",
"name": "Documentation",
"note": null,
"notes": [],
"value": 75,
"inputs": {
"topics": [
"agent",
"agent-orchestration",
"ai",
"ai-agent",
"ai-application",
"autogen-alternative",
"bilingual",
"chatbot",
"chinese-programming",
"claude",
"crewai-alternative",
"domain-specific-language",
"dsl",
"gpt",
"langchain-alternative",
"llm",
"multi-agent",
"natural-language-programming",
"programming-language",
"prompt-engineering"
],
"has_wiki": false,
"homepage": null,
"has_readme": true,
"has_docs_dir": true,
"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": 25,
"status": "met",
"details": [],
"max_points": 25
},
{
"key": "documentation_homepage_site",
"name": "Documentation / homepage site",
"detail": null,
"points": 0,
"status": "missed",
"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": "20 topics",
"points": 10,
"status": "met",
"details": [
{
"code": "topics_count",
"params": {
"count": 20
}
}
],
"max_points": 10
},
{
"key": "wiki",
"name": "Wiki",
"detail": null,
"points": 0,
"status": "missed",
"details": [],
"max_points": 10
}
]
}
],
"description": "Are baseline engineering and documentation practices in place?"
},
{
"key": "security",
"band": "critical",
"name": "Security",
"value": 22,
"weight": 0.16,
"metrics": [
{
"key": "security_posture",
"band": "critical",
"name": "Security posture",
"note": "Excluded from scoring (no data or not applicable): CI-Tests, Packaging, Signed-Releases. Remaining weights renormalized.",
"notes": [
{
"code": "excluded_no_data",
"params": {
"components": [
"ci_tests",
"packaging",
"signed_releases"
]
}
},
{
"code": "weights_renormalized",
"params": {}
}
],
"value": 22,
"inputs": {
"source": "openssf_scorecard",
"checks_evaluated": 15,
"scorecard_version": "v5.5.0",
"checks_inconclusive": 3,
"scorecard_aggregate": 2.2
},
"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 dangerous workflow patterns detected",
"points": 10,
"status": "met",
"details": [],
"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": "dependency not pinned by hash detected -- score normalized to 0",
"points": 0,
"status": "missed",
"details": [],
"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": "detected GitHub workflow tokens with excessive permissions",
"points": 0,
"status": "missed",
"details": [],
"max_points": 7.5
},
{
"key": "vulnerabilities",
"name": "Vulnerabilities",
"detail": "22 existing vulnerabilities detected",
"points": 0,
"status": "missed",
"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": "moderate",
"name": "AI Readiness",
"value": 69,
"weight": 0,
"metrics": [
{
"key": "ai_agent_context",
"band": "excellent",
"name": "Agent context & guidance",
"note": null,
"notes": [],
"value": 85,
"inputs": {
"has_llms_txt": false,
"legible_history_share": 1,
"agent_instruction_files": [
"CLAUDE.md"
],
"agent_instruction_max_bytes": 9259
},
"components": [
{
"key": "agent_instructions",
"name": "Agent instructions",
"detail": "CLAUDE.md",
"points": 45,
"status": "met",
"details": [
{
"code": "file_list",
"params": {
"files": "CLAUDE.md"
}
}
],
"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": "100 of 100 human commits state their intent (structured subject or explanatory body)",
"points": 40,
"status": "met",
"details": [
{
"code": "legible_history",
"params": {
"legible": 100,
"sampled": 100
}
}
],
"max_points": 40
}
]
},
{
"key": "ai_verify_loop",
"band": "moderate",
"name": "Verify loop (build / test / typecheck)",
"note": null,
"notes": [],
"value": 64,
"inputs": {
"has_nix": false,
"has_tests": true,
"lockfiles": [
"package-lock.json",
"uv.lock"
],
"has_dockerfile": false,
"typed_language": false,
"bootstrap_files": [],
"has_devcontainer": false,
"has_linter_config": true,
"typecheck_configs": [
"extensions/vscode/tsconfig.json",
"helen/agent/webui/frontend/tsconfig.json",
"helen/py.typed"
],
"agent_commit_share": 0.44,
"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": ".flake8",
"points": 11,
"status": "met",
"details": [
{
"code": "file_list",
"params": {
"files": ".flake8"
}
}
],
"max_points": 11
},
{
"key": "static_type_checking",
"name": "Static type checking",
"detail": "extensions/vscode/tsconfig.json, helen/agent/webui/frontend/tsconfig.json, helen/py.typed",
"points": 11,
"status": "met",
"details": [
{
"code": "file_list",
"params": {
"files": "extensions/vscode/tsconfig.json, helen/agent/webui/frontend/tsconfig.json, helen/py.typed"
}
}
],
"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": "44 of the last 100 commits agent-authored or agent-credited",
"points": 10,
"status": "met",
"details": [
{
"code": "agent_authored_commits",
"params": {
"count": 44,
"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": "dependency not pinned by hash detected -- score normalized to 0",
"points": 0,
"status": "missed",
"details": [],
"max_points": 10
}
]
},
{
"key": "ai_code_legibility",
"band": "good",
"name": "Code legibility for models",
"note": null,
"notes": [],
"value": 81,
"inputs": {
"primary_language": "Python",
"largest_source_bytes": 90308,
"source_files_sampled": 346,
"oversized_source_files": 7
},
"components": [
{
"key": "type_checkable_code",
"name": "Type-checkable code",
"detail": "Python with type-check config (extensions/vscode/tsconfig.json, helen/agent/webui/frontend/tsconfig.json, helen/py.typed)",
"points": 27,
"status": "partial",
"details": [
{
"code": "typecheck_config_language",
"params": {
"files": "extensions/vscode/tsconfig.json, helen/agent/webui/frontend/tsconfig.json, helen/py.typed",
"language": "Python"
}
}
],
"max_points": 45
},
{
"key": "manageable_file_sizes",
"name": "Manageable file sizes",
"detail": "7/346 source files over 60KB",
"points": 53.9,
"status": "partial",
"details": [
{
"code": "oversized_source_files",
"params": {
"kb": 60,
"sampled": 346,
"oversized": 7
}
}
],
"max_points": 55
}
]
},
{
"key": "ai_interfaces",
"band": "at_risk",
"name": "Machine-readable interfaces",
"note": null,
"notes": [],
"value": 40,
"inputs": {
"example_dirs": [
"examples"
],
"has_mcp_signal": false,
"api_schema_files": []
},
"components": [
{
"key": "api_schema_openapi_graphql_proto",
"name": "API schema (OpenAPI/GraphQL/proto)",
"detail": null,
"points": 0,
"status": "missed",
"details": [],
"max_points": 40
},
{
"key": "mcp_server",
"name": "MCP server",
"detail": null,
"points": 0,
"status": "missed",
"details": [],
"max_points": 20
},
{
"key": "runnable_examples",
"name": "Runnable examples",
"detail": "examples",
"points": 40,
"status": "met",
"details": [
{
"code": "file_list",
"params": {
"files": "examples"
}
}
],
"max_points": 40
}
]
}
],
"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": [
"Star history unavailable: GitHub GraphQL error: Resource not accessible by personal access token",
"Contributor list unavailable",
"GitHub dependency-graph SBOM unavailable (404); the dependency graph may be disabled for this repository",
"deps.dev does not index pypi:helen-lang@1.29.4; advisories assessed against the repository dependency graph instead"
],
"report_type": "repository",
"generated_at": "2026-07-27T16:08:59.191423Z",
"schema_version": "0.27.0",
"badge_url": "https://raw.githubusercontent.com/inspect-software/badges/main/v1/h/hahalee000000/helen.svg",
"full_name": "hahalee000000/helen",
"license_state": "standard",
"license_spdx": "MIT"
}