Звіт у форматі JSON машиночитний
{
"data": {
"repo": {
"topics": [
"ai-coding-assistant",
"code-agent",
"code-agent-harness",
"deepseek-tui",
"deepseek-v4",
"golang",
"vibecoding",
"harness",
"deepseek-harness"
],
"is_fork": false,
"size_kb": 1038,
"has_wiki": true,
"homepage": null,
"languages": {
"Go": 1074016,
"Shell": 1646,
"Makefile": 1245,
"Batchfile": 2952,
"PowerShell": 2466
},
"pushed_at": "2026-07-19T14:39:25Z",
"created_at": "2026-05-31T05:36:08Z",
"owner_type": "User",
"updated_at": "2026-07-20T08:57:29Z",
"description": "CLI coding agent that guards every action: ambiguity check, design review, scope control.",
"is_archived": false,
"is_disabled": false,
"license_spdx": "MIT",
"default_branch": "main",
"license_spdx_raw": "MIT",
"primary_language": "Go",
"significant_languages": [
"Go"
]
},
"owner": {
"blog": null,
"name": "hxssss",
"type": "User",
"login": "hxs996-beep",
"company": "WB company",
"location": "HZ",
"followers": 0,
"avatar_url": "https://avatars.githubusercontent.com/u/229309945?v=4",
"created_at": "2025-08-29T10:27:13Z",
"is_verified": null,
"public_repos": 1,
"account_age_days": 330
},
"license": {
"state": "standard",
"spdx_id": "MIT",
"raw_spdx": "MIT",
"file_present": true,
"scorecard_found": true,
"profile_has_license": true
},
"activity": {
"releases": [
{
"tag": "v1.0.3",
"kind": "patch",
"published_at": "2026-07-19T00:13:39Z"
},
{
"tag": "v1.0.2",
"kind": "patch",
"published_at": "2026-07-02T03:40:45Z"
},
{
"tag": "v1.0.1",
"kind": "patch",
"published_at": "2026-06-29T11:46:29Z"
},
{
"tag": "v0.1.5",
"kind": "patch",
"published_at": "2026-06-14T15:39:38Z"
},
{
"tag": "v0.1.4",
"kind": "patch",
"published_at": "2026-06-09T15:13:53Z"
},
{
"tag": "v0.1.3",
"kind": "patch",
"published_at": "2026-06-06T14:59:09Z"
},
{
"tag": "v0.1.2",
"kind": "patch",
"published_at": "2026-05-31T14:29:19Z"
},
{
"tag": "v0.1.1",
"kind": "patch",
"published_at": "2026-05-31T06:37:56Z"
},
{
"tag": "v0.1.0",
"kind": "minor",
"published_at": "2026-05-31T06:01:05Z"
}
],
"recent_commits": [
{
"oid": "ed3e104d14fb2583526e97e2b2edab7a20f6ff3b",
"body": null,
"is_bot": false,
"headline": "\\\"chore: remove temp check file\\\"",
"author_name": "hxs",
"author_login": "imjok00",
"committed_at": "2026-07-19T14:39:15Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "9b487b0767bad27f8537b3b8a2de8f1874cf349c",
"body": null,
"is_bot": false,
"headline": "\\\"chore: add temp check file\\\"",
"author_name": "hxs",
"author_login": "imjok00",
"committed_at": "2026-07-19T14:39:05Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "702f5cb9e8845aa9b7f973dbdefea56cb2ae25e3",
"body": null,
"is_bot": false,
"headline": "\\\"update readme: Roundtable -> Team mode\\\"",
"author_name": "hxs",
"author_login": "imjok00",
"committed_at": "2026-07-19T14:35:43Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "90e5376801df3d309d022b0dc42ab9b7d3e04110",
"body": null,
"is_bot": false,
"headline": "\\\"remove release badge from README\\\"",
"author_name": "hxs",
"author_login": "imjok00",
"committed_at": "2026-07-19T13:05:16Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "c4f70e7d846c0116da43a046ca2c18f83ca28e56",
"body": null,
"is_bot": false,
"headline": "\\\"fix: use tag endpoint for release badge\\\"",
"author_name": "hxs",
"author_login": "imjok00",
"committed_at": "2026-07-19T13:01:38Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "29f354dc5b6dec1e55412bbad29e4b190282c05d",
"body": null,
"is_bot": false,
"headline": "\\\"fix release badge cache refresh\\\"",
"author_name": "hxs",
"author_login": "imjok00",
"committed_at": "2026-07-19T12:53:06Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "fce4f804f372460c36a1c7309b6169634e4bedcb",
"body": "# Conflicts:\n#\tREADME.md",
"is_bot": false,
"headline": "Merge branch 'feat/sub-agent-display' into dev",
"author_name": "hxs996-beep",
"author_login": "hxs996-beep",
"committed_at": "2026-07-19T00:06:16Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "886d81826b7b4c3f95794ac024f3aa6ff1637b02",
"body": "…gates/markdown, roundtable improvements, fix critic PASS dead-loop\n\n- Analysis report gate: add degradation handler (after 2 blocks, auto-waive and\n request batched edits), scope AnalysisReportConfirmed to single Run to prevent\n stale confirmation leaking across tasks\n- Intent classifier: refine \n[…]\nASS path dead-loop: remove 'don't trust -> re-run commands ->\n re-verify if inconsistent' loop logic, replace with simple pass-through\n- UI: narration overflow handling, streaming render test updates",
"is_bot": false,
"headline": "feat: analysis gate degradation, intent classifier refinement, skill …",
"author_name": "hxs996-beep",
"author_login": "hxs996-beep",
"committed_at": "2026-07-19T00:02:08Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "34e8c07486170ab43e6dd0f6a3b0cf869910f38e",
"body": "- engine/content_delta_test.go: verify content_delta ProgressEvents emitted per chunk\n- ui/narration_test.go: verify finalizeTurnBlocks snapshots narration+toolTree, skips empty/whitespace",
"is_bot": false,
"headline": "test: add content_delta emission and finalizeTurnBlocks tests",
"author_name": "hxs996-beep",
"author_login": "hxs996-beep",
"committed_at": "2026-07-17T01:56:12Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "ac64bc8a7b506b8d98797bc60fe274854819d3a6",
"body": "- Engine: emit content_delta ProgressEvent during streaming (turn.go)\n- UI: accumulate content_delta into m.narration field\n- UI: finalizeTurnBlocks() snapshots narration + toolTree per turn at tool_start boundary\n- UI: render narration blocks with NarrationStyle (dim, indented)\n- UI: per-turn tool snapshots replace global type-grouped tool tree\n- Preserves isIntermediateText stripping for LLM history cleanliness",
"is_bot": false,
"headline": "feat(ui): stream AI intermediate narration as per-turn chunked blocks",
"author_name": "hxs996-beep",
"author_login": "hxs996-beep",
"committed_at": "2026-07-16T10:19:41Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "90e2508c97077566006da661237384e09806186c",
"body": null,
"is_bot": false,
"headline": "docs: design spec for chunked streaming narration output",
"author_name": "hxs996-beep",
"author_login": "hxs996-beep",
"committed_at": "2026-07-16T10:10:06Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "a5c67ba39391f6ef56c46708242ab6e2abcf02ee",
"body": "…ary field",
"is_bot": false,
"headline": "feat: add task_complete tool definition and TurnResult.CompletionSumm…",
"author_name": "hxs996-beep",
"author_login": "hxs996-beep",
"committed_at": "2026-07-14T12:30:29Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "d359b455d006d5d26c68f6676ee14eb0029e91eb",
"body": "…uristics",
"is_bot": false,
"headline": "docs: implementation plan for task_complete tool replacing keyword he…",
"author_name": "hxs996-beep",
"author_login": "hxs996-beep",
"committed_at": "2026-07-14T11:32:00Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "92757c0dfa8eaa5e58b1458ac04f06e034559b3a",
"body": null,
"is_bot": false,
"headline": "docs: design spec for task_complete tool replacing keyword heuristics",
"author_name": "hxs996-beep",
"author_login": "hxs996-beep",
"committed_at": "2026-07-14T11:22:26Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "7f060ed51fa5bab13209c9139c89e5ed6d8a1923",
"body": "formatEditPlanSummary now lists each file to be modified with its\nrelative path and a brief old->new preview, so the user can see\nexactly what will change before confirming.",
"is_bot": false,
"headline": "feat: enhance edit plan summary with file paths and edit previews",
"author_name": "hxs996-beep",
"author_login": "hxs996-beep",
"committed_at": "2026-07-14T10:11:59Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "54ffe819810fd905ebc0e3482dcc75c143c99a00",
"body": "When the agent has done searches (runToolCallCount > 0) and attempts\nedit/write for the first time, the gate blocks and injects a nudge\nasking the agent to output a text-only analysis report. The agent\noutputs the report, stop hooks end the Run(), and the user confirms\nbefore implementation proceeds.\n\nAfter 2 blocks the gate degrades to the edit plan guard to avoid\ndeadlock. Confirmation handling is extracted into\nhandleAnalysisNudgeConfirmation for testability.",
"is_bot": false,
"headline": "feat: add analysis report gate before edit plan guard",
"author_name": "hxs996-beep",
"author_login": "hxs996-beep",
"committed_at": "2026-07-14T09:49:57Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "3f4cea2fe453814cf0a643dc9cdb74d18a175d8c",
"body": "Add AnalysisMode and AnalysisReportConfirmed to TaskState. The constraint\nis now injected by context/builder.go on every Build call instead of the\nephemeral pendingPinnedMessages approach that was cleared after one turn.\n\nAlso adds pendingAnalysisNudge and analysisNudgeCount to the Engine struct\nfor use by the analysis report gate (Task 2).",
"is_bot": false,
"headline": "feat: persist ANALYSIS MODE constraint across turns",
"author_name": "hxs996-beep",
"author_login": "hxs996-beep",
"committed_at": "2026-07-14T09:40:57Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "8a9914843b2e9091fb9edd9ec20162d6f77065d2",
"body": "Identifies 5 root causes for why the agent jumps from search to\nimplementation without presenting analysis findings:\n1. ANALYSIS MODE constraint is ephemeral (only 1 turn)\n2. No engine-level 'report before implement' gate\n3. Edit plan summary lacks structured detail\n4. Intent classifier can't handle mixed analyze+implement requests\n5. Search-phase intermediate text is stripped\n\nProposes 3 components: persistent ANALYSIS MODE, analysis report\ngate, and enhanced edit plan summary.",
"is_bot": false,
"headline": "docs: add analysis report gate design spec",
"author_name": "hxs996-beep",
"author_login": "hxs996-beep",
"committed_at": "2026-07-14T08:40:18Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "ba889febf1f9a6f30a0170afc9446426deb9eec8",
"body": "…on new files\n\nread_multi declared loopAction as zero-valued GuardAction (Type='')\nand only assigned it when a sub-target was blocked. When all\nsub-targets were Allow, loopAction stayed zero-valued and\nloopAction.Type != GuardAllow ('' != 'allow') was true, falsely\nblocking every read_multi on new files with an empty message.\n\nFix: default loopAction to GuardAction{Type: GuardAllow}. Add\nLoopGuard block log line. Regression test covers the all-new-files\ncase.",
"is_bot": false,
"headline": "fix(turn): default read_multi LoopGuard to Allow, fixing false-block …",
"author_name": "hxs996-beep",
"author_login": "hxs996-beep",
"committed_at": "2026-07-14T02:51:11Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "08c277405ca8eba4f0b5c2215d36d73b151701c2",
"body": "… exit paths\n\nLog classifier verdict, error, retry count, and completion marker at\neach branch. Split the combined 'hasCompletionMarker || retry > 0'\ncheck into separate branches with individual log lines so production\nlogs show exactly which condition allowed exit.",
"is_bot": false,
"headline": "fix(stop-hook): add decision-point logging for classifier verdict and…",
"author_name": "hxs996-beep",
"author_login": "hxs996-beep",
"committed_at": "2026-07-14T02:51:03Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "0f8ab68a53432488baed377251a8dbc12a6c8377",
"body": "glm-5.2 occasionally returns JSON in reasoning_content with empty\nContent (llm/deepseek.go:460). The classifier only read Content,\ngot empty string, failed with 'no valid JSON' and degraded to a\nclassifier_error fallback - causing unstable stop-hook decisions.\nNow falls back to reasoning_content when Content is blank.",
"is_bot": false,
"headline": "fix(classifier): fall back to reasoning_content when Content is empty",
"author_name": "hxs996-beep",
"author_login": "hxs996-beep",
"committed_at": "2026-07-14T02:50:54Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "c546c99c02a69aaa50e99638c25b8ded9bda5e72",
"body": null,
"is_bot": false,
"headline": "chore: remove accidentally downloaded .tgz and add to .gitignore",
"author_name": "hxs996-beep",
"author_login": "hxs996-beep",
"committed_at": "2026-07-13T13:20:34Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "fc47165c357104443d8a1f7b277332555b0c0ccf",
"body": "…+ add streaming render plan\n\nRevise stop-hooks design: clarify that while the stop hook mechanism\nitself is not wired into sub_agent.go, the conclusion classification\nlogic IS needed there — the 3-strike counter resets on tool calls,\ncausing critic verdicts to loop. Add detailed revision note (2026-07-08).\n\nAdd streaming render unification plan (glamour migration).",
"is_bot": false,
"headline": "docs: update stop-hooks spec for sub-agent conclusion classification …",
"author_name": "hxs996-beep",
"author_login": "hxs996-beep",
"committed_at": "2026-07-13T13:20:15Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "a50c2ff2036d4e82f15efe924452cb073f9edd99",
"body": "Update '分析' intent to include anti-anchoring investigation method.\nAdd symptom-driven search guideline and a new '反锚定' section with\n5 principles: generate multiple hypotheses before searching, use\nliteral details as primary search terms, read all first-round\nresults before deep-diving, prefer simple causes, trace the full\npath from data generation to user-visible output.",
"is_bot": false,
"headline": "docs: add anti-anchoring methodology to system prompt",
"author_name": "hxs996-beep",
"author_login": "hxs996-beep",
"committed_at": "2026-07-13T13:20:07Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "f3d1f59add32fc68901e1ecc3d99457ce6acd655",
"body": "…nes in streaming\n\nmember_start: reset existing member to 'running' instead of appending\na duplicate entry when a member reappears in a later debate round.\n\nrenderStreaming: add collapseBlankLines() to the glamour rendering\npath, collapsing 2+ consecutive blank lines to one. Glamour renders\nfenced code-block content literally, so blank lines inside blocks\n(e.g. critic Check blocks) produced large visual gaps. Mirrors the\nlegacy wrapText path behavior.",
"is_bot": false,
"headline": "fix(ui): dedup member status across debate rounds + collapse blank li…",
"author_name": "hxs996-beep",
"author_login": "hxs996-beep",
"committed_at": "2026-07-13T13:19:59Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "9d02f4b278bc8c250e60e5c636ff661d1eabace6",
"body": "Remove 500-rune truncation (truncateString) so the verdict judge\nsees complete proposals instead of potentially missing critical\ninformation at the cut point.",
"is_bot": false,
"headline": "fix(roundtable): pass full member content to verdict prompt",
"author_name": "hxs996-beep",
"author_login": "hxs996-beep",
"committed_at": "2026-07-13T13:19:50Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "cc43e41b4bebeaf882f9752a4cf2167a9a4a4e7c",
"body": "The edit-plan guard's confirmation prompt showed reasoning text\ntwice: Summary (buildRunSummary) and Questions (plan summary)\nboth contained the reasoning, and the UI concatenates them.\nImplementation (loop.go:694-696) was already committed; this adds\nthe regression test.",
"is_bot": false,
"headline": "test: add regression test for edit-plan duplicate summary",
"author_name": "hxs996-beep",
"author_login": "hxs996-beep",
"committed_at": "2026-07-13T13:19:41Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "7cbc59a30fbeaa86002d0d631f506adb1efd9789",
"body": "LoopGuard read counts accumulated across Runs (engine reused via\nonce.Do). Cross-Run accumulation reached maxRepeats and falsely\nblocked normal reads. Implementation (loop.go:238-242) was already\ncommitted; this adds the regression test.",
"is_bot": false,
"headline": "test: add regression test for LoopGuard/ReadLoopState reset on new Run",
"author_name": "hxs996-beep",
"author_login": "hxs996-beep",
"committed_at": "2026-07-13T13:19:34Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "8b33671d2f25930f959642bf877dca7813f86549",
"body": "…ations\n\nCritic verdicts (e.g. '结论:失败 / VERDICT: FAIL') are text-only\nresponses that were nudged by the 3-strike mechanism. The nudge\ngoaded the critic into another tool call, resetting the counter,\ncausing it to loop to maxIterations (observed as 'turn 90' in\nproduction).\n\nFix: add ConclusionClassi\n[…]\n\nnext-step intent, terminate immediately. Conservative nudge on\nclassifier error. Three regression tests cover terminate-on-conclusion,\nnudge-on-narration, and nudge-despite-classifier-false-positive.",
"is_bot": false,
"headline": "fix(sub-agent): terminate on conclusion instead of looping to maxIter…",
"author_name": "hxs996-beep",
"author_login": "hxs996-beep",
"committed_at": "2026-07-13T13:19:24Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "676bee50c7bcbf78cbc5d1436cc5a96df2479d9a",
"body": "…c pre-check\n\nStalledNarrationHook now uses a three-layer decision:\n1. Heuristic pre-check (hasFutureIntent, hasTrailingNextStepIntent)\n blocks obvious intermediate narration without calling the LLM.\n2. LLM ConclusionJudge (IsConclusion) classifies ambiguous text.\n3. Conservative guard: classifier\n[…]\nfier context.\nExhausted signal (Exhausted=true) replaces silent pass-through after\nMaxRetries. Nil-classifier safety and error fallback to completion\nmarker check. Tests rewritten with stubClassifier.",
"is_bot": false,
"headline": "fix(stop-hook): replace pure heuristic with LLM classifier + heuristi…",
"author_name": "hxs996-beep",
"author_login": "hxs996-beep",
"committed_at": "2026-07-13T13:19:12Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "c83dae00afe9b52ed2af8d80341509b4f7156b80",
"body": "detectUserIntent now uses IntentJudge (LLM) instead of isAnalysisOnly/\nhasContextReference/isSameTopic keyword matching. Keeps isDangerousConfirmation\nas a deterministic safety fast-path. nil/err fallback to IntentContinue.\nWired in cmd/exec.go and ui/runner.go via SetIntentJudge.",
"is_bot": false,
"headline": "refactor: replace keyword intent detection with LLM IntentJudge",
"author_name": "hxs996-beep",
"author_login": "hxs996-beep",
"committed_at": "2026-07-13T13:13:10Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "9d65817ee08224e05586be29eabcec616e2331d7",
"body": "Mirrors ConclusionClassifier: flash model + JsonMode {intent} output.\nReplaces keyword-based isAnalysisOnly/hasContextReference/isSameTopic.",
"is_bot": false,
"headline": "feat: add IntentClassifier LLM judge for user-intent classification",
"author_name": "hxs996-beep",
"author_login": "hxs996-beep",
"committed_at": "2026-07-13T10:40:58Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "3b9de5532df438eb0df700329725cfdb916f6120",
"body": null,
"is_bot": false,
"headline": "docs: add intent-judge-llm implementation plan",
"author_name": "hxs996-beep",
"author_login": "hxs996-beep",
"committed_at": "2026-07-13T10:32:14Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "d618111b688d5e873cb43df085593891f3f5897a",
"body": "Replace keyword-based user-intent classification (isAnalysisOnly/\nhasContextReference/isSameTopic) with an LLM IntentJudge, mirroring the\nConclusionClassifier pattern. Keeps isDangerousConfirmation as a\ndeterministic safety gate.",
"is_bot": false,
"headline": "docs: add intent-judge-llm design spec",
"author_name": "hxs996-beep",
"author_login": "hxs996-beep",
"committed_at": "2026-07-13T10:27:21Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "702a37f1d568cdb451fa7fb4e18cfc7cd285f3e6",
"body": "Mechanical signature change; no behavior change. Prepares for LLM\nconclusion judgment needing context (timeout) and user goal.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
"is_bot": false,
"headline": "refactor(engine): add ctx to StopHook.Check and Goal to StopHookContext",
"author_name": "hxs996-beep",
"author_login": "hxs996-beep",
"committed_at": "2026-07-12T12:39:14Z",
"body_truncated": false,
"is_coding_agent": true
},
{
"oid": "79cb248360574b7659923bc7763056aed6c572dd",
"body": "Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
"is_bot": false,
"headline": "feat(engine): add ConclusionClassifier for LLM-based conclusion judgment",
"author_name": "hxs996-beep",
"author_login": "hxs996-beep",
"committed_at": "2026-07-11T15:29:20Z",
"body_truncated": false,
"is_coding_agent": true
},
{
"oid": "21038dd99f393ef16bc94d3353741267353d6077",
"body": "Guard state (LoopGuard/ReadLoop/ErrorLoop) no longer reset per-Run,\npreventing re-reads after plan confirmation. Edit-plan Blocked response\nno longer duplicates reasoning in Summary and Questions.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
"is_bot": false,
"headline": "fix(engine): persist guard state across Run; dedup edit-plan summary",
"author_name": "hxs996-beep",
"author_login": "hxs996-beep",
"committed_at": "2026-07-11T15:23:39Z",
"body_truncated": false,
"is_coding_agent": true
},
{
"oid": "6c11c90d8604a90503562fcb98628ce9765d01ea",
"body": "Baseline before replacing with LLM conclusion judgment. Adds Exhausted\nfield, StalledNarrationHook with looksLikeNextStepNarration heuristic,\nZeroToolCallHook retry snippet, turn.go Exhausted->Blocked path, and\nrune-safe truncateStr. Includes stalled_narration_test.go.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
"is_bot": false,
"headline": "feat(engine): keyword-based StalledNarrationHook baseline",
"author_name": "hxs996-beep",
"author_login": "hxs996-beep",
"committed_at": "2026-07-11T15:23:39Z",
"body_truncated": false,
"is_coding_agent": true
},
{
"oid": "2765d04d086b34dad0a129824083ed69a9f84532",
"body": "TDD plan: ConclusionClassifier unit, StopHook ctx/Goal signature change,\nStalledNarrationHook LLM judgment, keyword heuristic removal, wiring.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
"is_bot": false,
"headline": "docs: add Stop Hook LLM conclusion judgment implementation plan",
"author_name": "hxs996-beep",
"author_login": "hxs996-beep",
"committed_at": "2026-07-11T15:18:16Z",
"body_truncated": false,
"is_coding_agent": true
},
{
"oid": "efb8323366130d375e5d13e6c83a1953f0714853",
"body": "Replace StalledNarrationHook keyword-prefix heuristic (looksLikeNextStepNarration)\nwith an LLM conclusion classifier. Cancel the nextStepPrefixes/conclusionMarkers\nkeyword matching that caused premature loop termination on non-prefix mid-task\nnarration.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
"is_bot": false,
"headline": "docs: add Stop Hook LLM conclusion judgment design spec",
"author_name": "hxs996-beep",
"author_login": "hxs996-beep",
"committed_at": "2026-07-11T15:08:23Z",
"body_truncated": false,
"is_coding_agent": true
},
{
"oid": "899e0a82ee847c080c9c142ff723e3291a224fab",
"body": null,
"is_bot": false,
"headline": "revert: remove unauthorized ModifiedFiles reset from loop.go and turn.go",
"author_name": "hxs996-beep",
"author_login": "hxs996-beep",
"committed_at": "2026-07-07T11:59:42Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "792a75394515b8bcce03e5aa1bc14ee2c34b75a3",
"body": null,
"is_bot": false,
"headline": "docs: add Stop Hooks design spec and implementation plan",
"author_name": "hxs996-beep",
"author_login": "hxs996-beep",
"committed_at": "2026-07-07T10:34:48Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "991e15c32278753dde598f4e2fa756dbd7e96e33",
"body": "Wire ZeroToolCallHook into both cmd/exec.go and ui/runner.go so the\nstop hook is active in both CLI and TUI execution paths.",
"is_bot": false,
"headline": "feat: register ZeroToolCallHook in engine creation points",
"author_name": "hxs996-beep",
"author_login": "hxs996-beep",
"committed_at": "2026-07-07T10:33:21Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "be0bdde71c7788822f26c3e51a065651d03c8566",
"body": "Replace text-pattern-matching isIntermediateText branch with structured\nstop hooks call. Stop hooks use behavioral signal (runToolCallCount)\ninstead of text content matching. Reset stopHookRetryCount on tool calls.",
"is_bot": false,
"headline": "feat: replace isIntermediateText with stop hooks in executeTurn",
"author_name": "hxs996-beep",
"author_login": "hxs996-beep",
"committed_at": "2026-07-07T10:32:58Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "e0450eeec10307ddb4979dfd86ea2a7123359b38",
"body": "…pHooks)\n\nAdd stopHooks/stopHookActive/stopHookRetryCount fields to Engine struct\nwith Run() resets. Implement SetStopHooks setter and runStopHooks method\nthat iterates registered hooks and returns first blocking result.",
"is_bot": false,
"headline": "feat: add Engine stop hooks integration (fields, SetStopHooks, runSto…",
"author_name": "hxs996-beep",
"author_login": "hxs996-beep",
"committed_at": "2026-07-07T10:32:03Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "e6dde9590368537b03583d753a9890d329eea851",
"body": "- Split flawed && short-circuit in TestZeroToolCallHook_EnglishMessage\n into three independent assertions (Block, non-empty, no Chinese chars)\n- Add TestZeroToolCallHook_NegativeMaxRetries covering MaxRetries=-1\n edge case (defaults to 3 via <= 0 guard)",
"is_bot": false,
"headline": "test: fix EnglishMessage assertion and add negative MaxRetries test",
"author_name": "hxs996-beep",
"author_login": "hxs996-beep",
"committed_at": "2026-07-07T10:29:51Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "13654f3a00586f1edfbb3114b7c9d73ccebfab2d",
"body": null,
"is_bot": false,
"headline": "feat: add StopHook interface and ZeroToolCallHook",
"author_name": "hxs996-beep",
"author_login": "hxs996-beep",
"committed_at": "2026-07-07T10:25:25Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "9de6a2b978f30f6c2e275ed9c6cf4aa603497851",
"body": "Replace wrapText with renderMarkdown in renderStreaming so streaming\ndisplay matches final display. Add package-level cache to avoid\nre-rendering on every 100ms tick. Fallback to legacy wrapText path\nwhen glamour is unavailable.",
"is_bot": false,
"headline": "feat: unify streaming rendering to glamour",
"author_name": "hxs996-beep",
"author_login": "hxs996-beep",
"committed_at": "2026-07-06T10:39:25Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "475206c50a0ac9c81679ee9848bc34434cb49e36",
"body": "Replace wrapText with renderMarkdown in renderStreaming to eliminate\nblank-line gap between streaming and final display. Add package-level\ncache to avoid re-rendering on every 100ms tick.",
"is_bot": false,
"headline": "spec: unify streaming rendering to glamour",
"author_name": "hxs996-beep",
"author_login": "hxs996-beep",
"committed_at": "2026-07-06T10:20:39Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "90009830febeec160dfb515d52c63c662120b9ce",
"body": "… update engine turn handling\n\n- Remove click-to-expand full-screen diff viewer interaction and '点击展开' hint text\n- Clean up all dead code: renderDiffViewer, computeDiffViewerLayout, buildHunkLineMap,\n hitTestHunk, renderDiffHunkBlock, diff styles, hunkHit/hunkLineEntry types\n- Simplify SkillMatcher\n[…]\nogic\n- Update context promptset: remove en templates, update zh system prompt\n- Add sub-agent stream, activate_skill, and editplan tests\n- Add design specs and implementation plans for recent features",
"is_bot": false,
"headline": "refactor(ui): remove full-screen diff viewer, simplify skill matcher,…",
"author_name": "hxs996-beep",
"author_login": "hxs996-beep",
"committed_at": "2026-07-05T23:44:06Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "4ca98a2048ff225fcb2a2997e0a013c4297ee210",
"body": null,
"is_bot": false,
"headline": "docs: add remove diff viewer implementation plan",
"author_name": "hxs996-beep",
"author_login": "hxs996-beep",
"committed_at": "2026-07-05T23:30:33Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "fb52283553c25b68aaa41c67ba3a051f2d560b10",
"body": null,
"is_bot": false,
"headline": "docs: add remove diff viewer design spec",
"author_name": "hxs996-beep",
"author_login": "hxs996-beep",
"committed_at": "2026-07-05T23:25:04Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "ad01486c42e299e413b4575d65f9d741c743ce48",
"body": "Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
"is_bot": false,
"headline": "docs: add sub-agent stream/stuck-loop fix design spec",
"author_name": "hxs996-beep",
"author_login": "hxs996-beep",
"committed_at": "2026-07-05T14:37:08Z",
"body_truncated": false,
"is_coding_agent": true
},
{
"oid": "0e8341bc976f21d04a816286dcaa09c37f0d6efa",
"body": "…allback matching\n\n- Add SkillMatcher interface + KeywordMatcher (existing keyword logic)\n- Add SemanticMatcher with MatchFunc callback for LLM-based matching\n- Add FallbackMatcher: keyword-first, semantic fallback on 0 matches\n- Extract activateSkill/showSkillSuggestions in engine loop\n- Refactor R\n[…]\nlMatcher interface\n- Wire FallbackMatcher into cmd/run.go EngineDeps\n- Fix AutoActivateThreshold doc comment (nil/0 → nil)\n\n11 new tests covering all matchers. No circular dependency (skill ⊥ engine).",
"is_bot": false,
"headline": "feat(skill): add SkillMatcher interface with keyword, semantic, and f…",
"author_name": "hxs996-beep",
"author_login": "hxs996-beep",
"committed_at": "2026-07-04T08:07:17Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "5e01150c61e0a9518ec8120d5e648b31f0f1f324",
"body": null,
"is_bot": false,
"headline": "feat(skill): add SkillMatcher interface and KeywordMatcher",
"author_name": "hxs996-beep",
"author_login": "hxs996-beep",
"committed_at": "2026-07-04T07:50:18Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "74b6931f8022c48a766209ad403feff70728d4ad",
"body": null,
"is_bot": false,
"headline": "docs: add skill semantic matching design spec",
"author_name": "hxs996-beep",
"author_login": "hxs996-beep",
"committed_at": "2026-07-04T07:35:34Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "57fb6d823a14481026bb6ac65f05e388448df383",
"body": null,
"is_bot": false,
"headline": "fix(ui): wrap overflow lines from lipgloss-rendered panels",
"author_name": "hxs996-beep",
"author_login": "hxs996-beep",
"committed_at": "2026-07-04T04:52:18Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "060bfa7d4b827862deb8628c7084b6fd1ba4446a",
"body": null,
"is_bot": false,
"headline": "fix(ui): remove ANSI skip in wrapLines, delegate to wrapLine",
"author_name": "hxs996-beep",
"author_login": "hxs996-beep",
"committed_at": "2026-07-04T04:50:27Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "e0bfcfc708d1086f19e90e13037d5776912c0c00",
"body": null,
"is_bot": false,
"headline": "feat(ui): delegate ANSI lines in wrapLine to wrapLineAnsi",
"author_name": "hxs996-beep",
"author_login": "hxs996-beep",
"committed_at": "2026-07-04T04:49:20Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "f522a41883bd66d9166ccfde9737779959108df9",
"body": null,
"is_bot": false,
"headline": "feat(ui): add wrapLineAnsi for ANSI-aware word wrapping",
"author_name": "hxs996-beep",
"author_login": "hxs996-beep",
"committed_at": "2026-07-04T04:47:59Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "12f44f5c87a168e4ec87c57043cc87db4ba6905a",
"body": null,
"is_bot": false,
"headline": "chore: update context builder for new RoundtableState fields",
"author_name": "hxs996-beep",
"author_login": "hxs996-beep",
"committed_at": "2026-07-03T10:26:18Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "e350281535cdb3fef686e15af3292763266654c9",
"body": null,
"is_bot": false,
"headline": "test: update roundtable tests for debate arena",
"author_name": "hxs996-beep",
"author_login": "hxs996-beep",
"committed_at": "2026-07-03T10:25:15Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "2592b66cfa87f633543c31a1e5325c7b2f8f215f",
"body": null,
"is_bot": false,
"headline": "feat: integrate debate arena into engine loop",
"author_name": "hxs996-beep",
"author_login": "hxs996-beep",
"committed_at": "2026-07-03T10:21:11Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "c4879ec280d7ae05a0a6ba1f9ae4857896562313",
"body": null,
"is_bot": false,
"headline": "feat: rewrite roundtable as debate arena with 4-round flow",
"author_name": "hxs996-beep",
"author_login": "hxs996-beep",
"committed_at": "2026-07-03T10:20:18Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "b506018aa622c1f468d98c2bd2aaff6541eb36fb",
"body": null,
"is_bot": false,
"headline": "feat: add team config section and TeamMembers engine config",
"author_name": "hxs996-beep",
"author_login": "hxs996-beep",
"committed_at": "2026-07-03T10:16:21Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "4ccf9b8a7d429e0a5b773f864a48264519613c0d",
"body": null,
"is_bot": false,
"headline": "feat: replace domain roles with personality-based debate members",
"author_name": "hxs996-beep",
"author_login": "hxs996-beep",
"committed_at": "2026-07-03T10:14:55Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "154205a9686710c94b8796074b86c1670f1cda4b",
"body": "…rena",
"is_bot": false,
"headline": "feat: add DebateRound types and refactor RoundtablePhase for debate a…",
"author_name": "hxs996-beep",
"author_login": "hxs996-beep",
"committed_at": "2026-07-03T10:13:14Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "4f3c4f91047b048d7485fd026a04eeeb1e474f96",
"body": "- Add computeDiffViewerLayout() for diff viewer coordinate mapping\n- Support mouse drag-to-select and copy in full-screen diff viewer\n- Pad body lines to terminal width to prevent Bubble Tea frame diff artifacts\n- Trigger full repaint on ESC exit from diff viewer",
"is_bot": false,
"headline": "fix(ui): enable text selection in diff viewer and fix scroll artifacts",
"author_name": "hxs996-beep",
"author_login": "hxs996-beep",
"committed_at": "2026-07-02T12:25:57Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "276e0280e9201521252d8d64dcf60f029b83bc96",
"body": "Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
"is_bot": false,
"headline": "chore: gitignore 忽略 .superpowers/ 工作流临时产物",
"author_name": "hxs996-beep",
"author_login": "hxs996-beep",
"committed_at": "2026-07-02T03:14:41Z",
"body_truncated": false,
"is_coding_agent": true
},
{
"oid": "3966af220d6e6c42ad6b80c3820fc7302e19de50",
"body": "UI diff 渲染:\n- diff hunk 默认折叠为摘要行([N] @@ 头 +N -M 点击展开),\n 点击 hunk 占满 body 全屏查看完整内容,ESC 退出\n- DisplayMessage 扩展 ToolTree 快照,完成后可点击展开\n- renderDiffBlock/renderToolSummary 改折叠摘要,删除 renderDiffHunkFlat\n- 全屏 viewer 复用 renderDiffHunkBlock,禁拖选、滚轮滚动\n- 顶部\"按 ESC 退出\"提示\n\nengine/context:\n- loop/turn/dsml/classifier/\n[…]\nisSubstantiveSummary 质量门\n- context builder/prompt、promptset system.md 调整\n\n其他:\n- README/cmd/go.mod 更新\n- diff 相关规格/计划归档至 docs/superpowers/archive/\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
"is_bot": false,
"headline": "feat(ui): diff 折叠展示 + 点击全屏展开,及 engine/context 调整",
"author_name": "hxs996-beep",
"author_login": "hxs996-beep",
"committed_at": "2026-07-02T03:12:23Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "1e2cb6e700a749201a48f7294b42b3353472575f",
"body": null,
"is_bot": false,
"headline": "fix: replace Done with neutral tool summary text; dim toolsummary style",
"author_name": "hxs996-beep",
"author_login": "hxs996-beep",
"committed_at": "2026-07-01T08:02:48Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "18135d07aa800a26d75569256d4b602ebd2c07af",
"body": null,
"is_bot": false,
"headline": "fix: lower CJK threshold from 10 to 6 runes for isSubstantiveSummary",
"author_name": "hxs996-beep",
"author_login": "hxs996-beep",
"committed_at": "2026-07-01T07:57:02Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "b2528c656488aef23aeaed2c3250a91ee92f3b64",
"body": null,
"is_bot": false,
"headline": "feat: add isSubstantiveSummary quality gate to buildRunSummary",
"author_name": "hxs996-beep",
"author_login": "hxs996-beep",
"committed_at": "2026-07-01T07:56:22Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "e01168ed46156a9d174c7f426dde1fd0b7248c6c",
"body": null,
"is_bot": false,
"headline": "docs: add fix-done-no-conclusion implementation plan",
"author_name": "hxs996-beep",
"author_login": "hxs996-beep",
"committed_at": "2026-07-01T07:51:12Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "5b31a037c6c8f80697a88e51528ff4a8930e860f",
"body": null,
"is_bot": false,
"headline": "docs: add fix-done-no-conclusion design spec",
"author_name": "hxs996-beep",
"author_login": "hxs996-beep",
"committed_at": "2026-07-01T07:48:52Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "fb2ce8aca92da55a26812a84c79a9bfcecbc5ffd",
"body": "6 个 TDD 任务:countHunkAddsDeletes、renderDiffBlock 折叠摘要、\n全屏 viewer 渲染 + View 分支、点击命中展开、ESC 退出 + 全屏\n禁拖选滚轮、全量验证。\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
"is_bot": false,
"headline": "docs(context): 新增 diff 折叠展示实现计划",
"author_name": "hxs996-beep",
"author_login": "hxs996-beep",
"committed_at": "2026-07-01T07:17:33Z",
"body_truncated": false,
"is_coding_agent": true
},
{
"oid": "fd6c8799ea0802a2e3465fda6af2a6602416ad87",
"body": "ghosting 只在 diff 混排滚动时出现,采用 hunk 级折叠 + 点击全屏\n展开方案从架构上绕开。默认显示 hunk 头 + 增删行数,点击 hunk\n占满 body 全屏查看,ESC 退出。全屏内禁拖选避免 ghosting 复现。\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
"is_bot": false,
"headline": "docs(context): 新增 diff 折叠展示设计规格",
"author_name": "hxs996-beep",
"author_login": "hxs996-beep",
"committed_at": "2026-07-01T07:11:41Z",
"body_truncated": false,
"is_coding_agent": true
},
{
"oid": "04943466ec9484a9a7b759ee0e8b10f5d2dbb702",
"body": "R3: 删除 padLine,diff 行宽度交由 View 统一 ansi.Truncate,消除\nm.width/contentWidth/scrollContentWidth 三宽度不一致导致的滚动残留。\n\n同时新增 R1/R2 回归测试:含空行数组的 screenToLine 1:1 映射、\n选区复制不含 \\r。\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
"is_bot": false,
"headline": "fix(ui): 移除 renderDiffBlock 全宽 pad 并补选区回归测试",
"author_name": "hxs996-beep",
"author_login": "hxs996-beep",
"committed_at": "2026-06-30T15:33:43Z",
"body_truncated": false,
"is_coding_agent": true
},
{
"oid": "ed2dccc9cae16640d7b96c1bc8fbab3a72658d71",
"body": "R3: 删除 padLine,diff 行宽度交由 View 统一 ansi.Truncate,消除\nm.width/contentWidth/scrollContentWidth 三宽度不一致导致的滚动残留。",
"is_bot": false,
"headline": "fix(ui): 移除 renderDiffBlock 全宽 pad 统一宽度",
"author_name": "hxs996-beep",
"author_login": "hxs996-beep",
"committed_at": "2026-06-30T15:28:46Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "53622e9d4a1e79ec1ce2b960ecc7a4596f807fff",
"body": "上一 commit 误删末尾 \\n 致多 hunk 粘连,恢复 buf.String() 并修正测试断言。",
"is_bot": false,
"headline": "fix(ui): 恢复 renderDiffHunkFlat 末尾换行",
"author_name": "hxs996-beep",
"author_login": "hxs996-beep",
"committed_at": "2026-06-30T15:24:06Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "a88302aaf89ce879153c135cf2fa2dc7544ac207",
"body": "flat 版同步修复 R1/R2,不加硬截断(消息文本流跟随终端软折行)。",
"is_bot": false,
"headline": "fix(ui): renderDiffHunkFlat 保留空行并剥离回车",
"author_name": "hxs996-beep",
"author_login": "hxs996-beep",
"committed_at": "2026-06-30T15:20:30Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "a01d0c5d3fa189a644104edcee4891c22a4626aa",
"body": "R4: 超长代码行按显示宽度截断到 maxWidth,末尾加 …,修复长行\n无提示且避免折行破坏行映射。",
"is_bot": false,
"headline": "fix(ui): diff 长行硬截断并加 … 提示",
"author_name": "hxs996-beep",
"author_login": "hxs996-beep",
"committed_at": "2026-06-30T11:52:27Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "bf1cf24d9cafbbc002e8f59ce52639e76a82efdf",
"body": "R4: 超长代码行按显示宽度截断到 maxWidth,末尾加 …,修复长行\n无提示且避免折行破坏行映射。",
"is_bot": false,
"headline": "fix(ui): diff 长行硬截断并加 … 提示",
"author_name": "hxs996-beep",
"author_login": "hxs996-beep",
"committed_at": "2026-06-30T11:36:32Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "d19b8b13b1c7eefeddd82f585bb7ddad9564743e",
"body": "R1: 空行改为占位渲染,保持屏幕行==数据行,修复选错行/滚动错位。\nR2: TrimRight 剥离 \\r,修复回车致下行渲染到上行。",
"is_bot": false,
"headline": "fix(ui): diff hunk 保留空行并剥离回车",
"author_name": "hxs996-beep",
"author_login": "hxs996-beep",
"committed_at": "2026-06-30T11:16:00Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "26117b8422e102be5e14f4d1f31af1e9488f91a6",
"body": "按 lipgloss.Width 逐 rune 截断,保留 ANSI 转义序列边界,为 diff\n长行硬截断做准备。",
"is_bot": false,
"headline": "feat(ui): 新增 truncateVisual 按显示宽度截断辅助函数",
"author_name": "hxs996-beep",
"author_login": "hxs996-beep",
"committed_at": "2026-06-30T02:33:47Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "9c9f4d0b04beface962b2e21d8e4c2b21ebcd953",
"body": "按 TDD 拆分为 7 个任务:truncateVisual 辅助函数、renderDiffHunkBlock\n修 R1/R2、R4 长行截断、renderDiffHunkFlat 修 R1/R2、renderDiffBlock\n移除 padLine 修 R3、选区回归测试、全量验证。\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
"is_bot": false,
"headline": "docs(context): 新增 diff 纯文本展示修复实现计划",
"author_name": "hxs996-beep",
"author_login": "hxs996-beep",
"committed_at": "2026-06-30T02:24:15Z",
"body_truncated": false,
"is_coding_agent": true
},
{
"oid": "5246a22c3a1fdf1b8d9da35a86ac6b65c4bfab53",
"body": "诊断 diff 区域选错行/滚动错位/花屏三个症状的根因:空行被\ncontinue 丢弃致屏幕行≠数据行、未剥离 \\r 致回车覆盖、pad\n宽度不一致致滚动残留、长行无截断提示。方案保留自研选区与\n单层前景色,移除 padLine 统一宽度,新增 truncateVisual。\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
"is_bot": false,
"headline": "docs(context): 新增 diff 纯文本展示修复设计规格",
"author_name": "hxs996-beep",
"author_login": "hxs996-beep",
"committed_at": "2026-06-30T01:57:33Z",
"body_truncated": false,
"is_coding_agent": true
},
{
"oid": "19c3ca3c490b6161b76d3fdd19c47696f746a978",
"body": null,
"is_bot": false,
"headline": "fix: 修正 go report card 和 LICENSE badge 的仓库链接",
"author_name": "hxs996-beep",
"author_login": "hxs996-beep",
"committed_at": "2026-06-29T11:54:32Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "a6f5765b7b6d789a2a5e7042f2fd56500bb5496d",
"body": null,
"is_bot": false,
"headline": "docs: 移除 README 中 30 秒验证章节和内置技能系统说明",
"author_name": "hxs996-beep",
"author_login": "hxs996-beep",
"committed_at": "2026-06-29T11:51:53Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "f3c0675645e73a75651cfe88332b4b500f579690",
"body": null,
"is_bot": false,
"headline": "chore(release): bump to v1.0.1",
"author_name": "hxs996-beep",
"author_login": "hxs996-beep",
"committed_at": "2026-06-29T11:44:30Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "c2cdf71ff51a2474645fa7793db1b890b67d621b",
"body": "Dev",
"is_bot": false,
"headline": "Merge pull request #3 from hxs996-beep/dev",
"author_name": "hxssss",
"author_login": "hxs996-beep",
"committed_at": "2026-06-29T11:36:53Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "bcffa3038a4a1f9c64eaa6d22565a8be746606a2",
"body": "Feat/agent teams",
"is_bot": false,
"headline": "Merge pull request #2 from hxs996-beep/feat/agent-teams",
"author_name": "hxssss",
"author_login": "hxs996-beep",
"committed_at": "2026-06-29T11:36:12Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "ef65eacfe9011bbbba4e609332609245f51086d3",
"body": "Add a system-prompt note (zh/en) asking the model to maximize per-turn\nparallelism during investigation: emit all independent files/symbols/\nkeywords the current step needs as parallel tool calls in one response\n(aim for 5+) rather than issuing 2-3 and stopping. Fewer round-trips\nper conclusion, which matters more on high-latency endpoints.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
"is_bot": false,
"headline": "docs(context): guide higher per-turn parallelism during investigation",
"author_name": "hxs996-beep",
"author_login": "hxs996-beep",
"committed_at": "2026-06-29T11:34:13Z",
"body_truncated": false,
"is_coding_agent": true
},
{
"oid": "ad7c870c1ed7582a9d6cf5731e1a4d3afa0567e8",
"body": "Reword grep and read tool descriptions to encourage grep-first cross-\nfile exploration (find all occurrences / call sites / flows) and reading\nonly the relevant range via offset/limit, rather than reading whole\nfiles one by one. Reduces redundant full-file reads and wasted turns.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
"is_bot": false,
"headline": "docs(tools): steer model to grep-first exploration in tool descriptions",
"author_name": "hxs996-beep",
"author_login": "hxs996-beep",
"committed_at": "2026-06-29T11:34:13Z",
"body_truncated": false,
"is_coding_agent": true
},
{
"oid": "44fa18235be69eecdda42b830b9a8d76ef0fdbc7",
"body": "summarizeArgs now annotates read calls so the UI can distinguish a full-\nfile read from a targeted one: \"path (全文)\" for full reads,\n\"path (symbol:Run)\" for symbol reads, \"path (L52-101)\" for offset/limit\nranges. Without this every read rendered as a bare path, making repeated\nfull-file reads (a loop symptom) indistinguishable from targeted reads.\nUpdate summarizeargs tests to cover the new annotations.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
"is_bot": false,
"headline": "feat(engine): annotate read scope in tool-call summaries",
"author_name": "hxs996-beep",
"author_login": "hxs996-beep",
"committed_at": "2026-06-29T11:34:00Z",
"body_truncated": false,
"is_coding_agent": true
},
{
"oid": "3db2a562170c7f6ebb91561c81b331f44958e2db",
"body": "When a handoff sub-agent is cancelled (BlockedBy=\"cancelled\"), don't\nappend its digest as a tool message to history — the result is empty/\nincomplete and would feed stale context to the next turn. Mark the\nToolResult status as \"cancelled\" in both the main engine and\nSubAgentRunner so the caller can distinguish it from a normal \"ok\"\ncompletion.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
"is_bot": false,
"headline": "fix(engine): skip tool messages for cancelled handoff results",
"author_name": "hxs996-beep",
"author_login": "hxs996-beep",
"committed_at": "2026-06-29T11:33:52Z",
"body_truncated": false,
"is_coding_agent": true
},
{
"oid": "7ae65ada66596109dfe988806bdee5a4a2d4b9af",
"body": "Add a RetryProgress field to the streaming Chunk so the retry layer can\nnotify the caller when a retry is about to start (e.g. \"Retrying 1/3\nafter 2s...\"). Propagate it through llm.Chunk -> engine.ModelChunk ->\nadapter, and emit a \"retry\" ProgressEvent in executeTurn so the UI can\nshow retry state in real time instead of silently waiting.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
"is_bot": false,
"headline": "feat(llm): surface retry progress to UI via RetryProgress chunk field",
"author_name": "hxs996-beep",
"author_login": "hxs996-beep",
"committed_at": "2026-06-29T11:32:25Z",
"body_truncated": false,
"is_coding_agent": true
},
{
"oid": "879e4e5c3c04b4c90752fb78068482ed1834e358",
"body": "The HTTP client used Timeout:0 with no per-phase bounds, so a stalled\nAPI connection (server accepts TCP but never responds, or stream goes\nsilent mid-response) hung the agent indefinitely — the process stayed\nalive with no log output and a frozen UI for hours.\n\nAdd layered timeouts that bound stall\n[…]\nhich is a hard deadline and not retried) with status=0,\nso the retry layer treats them as transient and re-attempts instead\nof surfacing a hang.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
"is_bot": false,
"headline": "fix(llm): add streaming idle/dial/header timeouts to prevent hangs",
"author_name": "hxs996-beep",
"author_login": "hxs996-beep",
"committed_at": "2026-06-29T11:31:42Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "11527305af39ed924d8d4ed714a0eff10f510414",
"body": "…text\n\nresolveSafePath previously confined all file operations to the launch\ndirectory, rejecting any path outside it with \"escapes workspace\". For an\nAI coding agent that must read/edit files across multiple projects, this\nsilently broke edit/write/glob/grep whenever the target was a sibling or\nabs\n[…]\nnd leave\nresidue while scrolling. Plain text + full-width padding behaves like\nordinary message rows, so scrolling and selection are now stable.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
"is_bot": false,
"headline": "fix(tools): allow agent to operate on any path; render diff as plain …",
"author_name": "hxs996-beep",
"author_login": "hxs996-beep",
"committed_at": "2026-06-29T11:30:00Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "6502d74d77a9ff670bcddf6ed4ab571682182c09",
"body": "Establish a \"locate then read\" protocol via prompt-only changes to curb\nthe agent re-reading whole files during exploration (observed: 8 full\nreads of llm/deepseek.go in one task despite LSP giving exact line\nnumbers). Adds explicit guidance to grep/lsp-locate before reading a\nrange, and repositions grep as the primary cross-file exploration tool.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
"is_bot": false,
"headline": "docs(engine): add design spec for locate-then-read prompt protocol",
"author_name": "hxs996-beep",
"author_login": "hxs996-beep",
"committed_at": "2026-06-28T14:55:07Z",
"body_truncated": false,
"is_coding_agent": true
}
],
"releases_count": 9,
"commits_last_year": 161,
"latest_release_at": "2026-07-19T00:13:39Z",
"latest_release_tag": "v1.0.3",
"releases_from_tags": false,
"days_since_last_push": 6,
"active_weeks_last_year": 8,
"days_since_latest_release": 7,
"mean_days_between_releases": 6.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": []
},
"popularity": {
"forks": 0,
"stars": 4,
"watchers": 0,
"fork_history": {
"days": [],
"complete": true,
"collected": 0,
"total_forks": 0
},
"star_history": null,
"open_issues_and_prs": 0
},
"ai_readiness": {
"has_nix": false,
"example_dirs": [],
"has_llms_txt": false,
"has_dockerfile": false,
"has_mcp_signal": false,
"bootstrap_files": [
"Makefile"
],
"api_schema_files": [],
"has_devcontainer": false,
"typecheck_configs": [],
"toolchain_manifests": [
"go.mod"
],
"largest_source_bytes": 91578,
"source_files_sampled": 147,
"oversized_source_files": 2,
"agent_instruction_files": [],
"agent_instruction_max_bytes": null
},
"dependencies": {
"manifests": [
"go.mod"
],
"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": [
"go"
],
"dependencies": [
{
"name": "github.com/BurntSushi/toml",
"manifest": "go.mod",
"ecosystem": "go",
"version_constraint": "v1.6.0"
},
{
"name": "github.com/charmbracelet/bubbletea",
"manifest": "go.mod",
"ecosystem": "go",
"version_constraint": "v1.3.4"
},
{
"name": "github.com/charmbracelet/glamour",
"manifest": "go.mod",
"ecosystem": "go",
"version_constraint": "v1.0.0"
},
{
"name": "github.com/charmbracelet/lipgloss",
"manifest": "go.mod",
"ecosystem": "go",
"version_constraint": "v1.1.1-0.20250404203927-76690c660834"
},
{
"name": "github.com/charmbracelet/x/ansi",
"manifest": "go.mod",
"ecosystem": "go",
"version_constraint": "v0.10.2"
},
{
"name": "github.com/ebitengine/purego",
"manifest": "go.mod",
"ecosystem": "go",
"version_constraint": "v0.10.1"
},
{
"name": "github.com/muesli/reflow",
"manifest": "go.mod",
"ecosystem": "go",
"version_constraint": "v0.3.0"
},
{
"name": "github.com/muesli/termenv",
"manifest": "go.mod",
"ecosystem": "go",
"version_constraint": "v0.16.0"
},
{
"name": "github.com/sergi/go-diff",
"manifest": "go.mod",
"ecosystem": "go",
"version_constraint": "v1.3.1"
},
{
"name": "github.com/spf13/cobra",
"manifest": "go.mod",
"ecosystem": "go",
"version_constraint": "v1.8.1"
},
{
"name": "golang.org/x/net",
"manifest": "go.mod",
"ecosystem": "go",
"version_constraint": "v0.38.0"
},
{
"name": "golang.org/x/sync",
"manifest": "go.mod",
"ecosystem": "go",
"version_constraint": "v0.17.0"
},
{
"name": "golang.org/x/text",
"manifest": "go.mod",
"ecosystem": "go",
"version_constraint": "v0.30.0"
},
{
"name": "golang.org/x/time",
"manifest": "go.mod",
"ecosystem": "go",
"version_constraint": "v0.9.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": 3,
"open_issues": 0,
"closed_ratio": null,
"closed_issues": 0,
"closed_unmerged_prs": 0
},
"bus_factor": 1,
"bot_contributors": 0,
"top_contributors": [
{
"type": "User",
"login": "hxs996-beep",
"commits": 141,
"avatar_url": "https://avatars.githubusercontent.com/u/229309945?v=4"
},
{
"type": "User",
"login": "imjok00",
"commits": 20,
"avatar_url": "https://avatars.githubusercontent.com/u/38679813?v=4"
}
],
"contributors_sampled": 2,
"top_contributor_share": 0.876
},
"quality_signals": {
"has_ci": false,
"has_tests": true,
"ci_workflows": [],
"has_docs_dir": true,
"linter_configs": [],
"has_editorconfig": false,
"has_linter_config": false,
"has_precommit_config": false
},
"security_signals": {
"lockfiles": [
"go.sum"
],
"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": 3,
"reason": "project has 1 contributing companies or organizations -- score normalized to 3",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#contributors"
},
{
"name": "Dangerous-Workflow",
"score": null,
"reason": "no workflows found",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#dangerous-workflow"
},
{
"name": "Dependency-Update-Tool",
"score": 0,
"reason": "no update tool detected",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#dependency-update-tool"
},
{
"name": "Fuzzing",
"score": 0,
"reason": "project is not fuzzed",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#fuzzing"
},
{
"name": "License",
"score": 10,
"reason": "license file detected",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#license"
},
{
"name": "Maintained",
"score": 0,
"reason": "project was created within the last 90 days. Please review its contents carefully",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#maintained"
},
{
"name": "Packaging",
"score": null,
"reason": "packaging workflow not detected",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#packaging"
},
{
"name": "Pinned-Dependencies",
"score": null,
"reason": "no dependencies found",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#pinned-dependencies"
},
{
"name": "SAST",
"score": 0,
"reason": "no SAST tool detected",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#sast"
},
{
"name": "Security-Policy",
"score": 0,
"reason": "security policy file not detected",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#security-policy"
},
{
"name": "Signed-Releases",
"score": 0,
"reason": "Project has not signed or included provenance with any releases.",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#signed-releases"
},
{
"name": "Token-Permissions",
"score": null,
"reason": "No tokens found",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#token-permissions"
},
{
"name": "Vulnerabilities",
"score": 0,
"reason": "13 existing vulnerabilities detected",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#vulnerabilities"
}
],
"commit": "ed3e104d14fb2583526e97e2b2edab7a20f6ff3b",
"ran_at": "2026-07-26T07:11:49Z",
"aggregate_score": 1.4,
"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": null,
"oldest_open_prs": [],
"last_merged_pr_at": "2026-06-29T11:36:53Z",
"ci_last_conclusion": null,
"oldest_open_issues": []
}
},
"config": {
"disabled_metrics": [],
"disabled_categories": [],
"disabled_components": {}
},
"source": {
"url": "https://github.com/hxs996-beep/deepAct",
"host": "github.com",
"name": "deepAct",
"owner": "hxs996-beep"
},
"metrics": {
"overall": {
"key": "overall",
"band": "at_risk",
"name": "Overall health",
"note": null,
"notes": [],
"value": 42,
"inputs": {
"security": 14,
"vitality": 72,
"community": 28,
"governance": 35,
"engineering": 52
},
"components": []
},
"categories": [
{
"key": "vitality",
"band": "good",
"name": "Vitality",
"value": 72,
"weight": 0.22,
"metrics": [
{
"key": "development_activity",
"band": "moderate",
"name": "Development activity",
"note": null,
"notes": [],
"value": 60,
"inputs": {
"commits_last_year": 161,
"human_commit_share": 1,
"days_since_last_push": 6,
"active_weeks_last_year": 8
},
"components": [
{
"key": "push_recency",
"name": "Push recency",
"detail": "last push 6 days ago",
"points": 36,
"status": "met",
"details": [
{
"code": "push_recency",
"params": {
"days": 6
}
}
],
"max_points": 36
},
{
"key": "commit_cadence",
"name": "Commit cadence",
"detail": "8/52 weeks with commits",
"points": 5.5,
"status": "partial",
"details": [
{
"code": "commit_cadence_weeks",
"params": {
"weeks": 8
}
}
],
"max_points": 36
},
{
"key": "commit_volume",
"name": "Commit volume",
"detail": "161 commits in the last year",
"points": 18,
"status": "met",
"details": [
{
"code": "commits_last_year",
"params": {
"count": 161
}
}
],
"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": null,
"notes": [],
"value": 90,
"inputs": {
"releases_count": 9,
"latest_release_tag": "v1.0.3",
"releases_from_tags": false,
"days_since_latest_release": 7,
"mean_days_between_releases": 6.1
},
"components": [
{
"key": "ships_releases",
"name": "Ships releases",
"detail": "9 releases published",
"points": 27,
"status": "met",
"details": [
{
"code": "releases_published",
"params": {
"count": 9
}
}
],
"max_points": 27
},
{
"key": "release_recency",
"name": "Release recency",
"detail": "latest release 7 days ago",
"points": 36,
"status": "met",
"details": [
{
"code": "release_recency",
"params": {
"days": 7
}
}
],
"max_points": 36
},
{
"key": "release_cadence",
"name": "Release cadence",
"detail": "a release every ~6.1 days",
"points": 27,
"status": "met",
"details": [
{
"code": "release_cadence",
"params": {
"gap": 6.1
}
}
],
"max_points": 27
},
{
"key": "openssf_scorecard_signed_releases",
"name": "OpenSSF Scorecard: Signed-Releases",
"detail": "Project has not signed or included provenance with any releases.",
"points": 0,
"status": "missed",
"details": [],
"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": 28,
"weight": 0.18,
"metrics": [
{
"key": "popularity",
"band": "critical",
"name": "Popularity & adoption",
"note": null,
"notes": [],
"value": 8,
"inputs": {
"forks": 0,
"stars": 4,
"watchers": 0,
"growth_state": "unverified",
"growth_factor_pct": 100,
"growth_unverified_reason": "no_history"
},
"components": [
{
"key": "stars",
"name": "Stars",
"detail": "4 stars",
"points": 7.7,
"status": "partial",
"details": [
{
"code": "stars",
"params": {
"count": 4
}
}
],
"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": "at_risk",
"name": "Sustainability & Governance",
"value": 35,
"weight": 0.24,
"metrics": [
{
"key": "maintainer_resilience",
"band": "critical",
"name": "Maintainer resilience (bus factor)",
"note": null,
"notes": [],
"value": 18,
"inputs": {
"bus_factor": 1,
"contributors_sampled": 2,
"top_contributor_share": 0.876
},
"components": [
{
"key": "bus_factor",
"name": "Bus factor",
"detail": "1 contributor(s) cover half of all commits",
"points": 9,
"status": "partial",
"details": [
{
"code": "bus_factor",
"params": {
"count": 1
}
}
],
"max_points": 54
},
{
"key": "commit_distribution",
"name": "Commit distribution",
"detail": "top contributor authored 88% of commits",
"points": 2.8,
"status": "partial",
"details": [
{
"code": "top_contributor_share",
"params": {
"share": 88
}
}
],
"max_points": 22.5
},
{
"key": "contributor_breadth",
"name": "Contributor breadth",
"detail": "2 contributors",
"points": 2.7,
"status": "partial",
"details": [
{
"code": "contributors_sampled",
"params": {
"count": 2
}
}
],
"max_points": 13.5
},
{
"key": "openssf_scorecard_contributors",
"name": "OpenSSF Scorecard: Contributors",
"detail": "project has 1 contributing companies or organizations -- score normalized to 3",
"points": 3,
"status": "partial",
"details": [],
"max_points": 10
}
]
},
{
"key": "responsiveness",
"band": "good",
"name": "Issue & PR responsiveness",
"note": "Excluded from scoring (no data or not applicable): Issue resolution. Remaining weights renormalized.",
"notes": [
{
"code": "excluded_no_data",
"params": {
"components": [
"issue_resolution"
]
}
},
{
"code": "weights_renormalized",
"params": {}
}
],
"value": 72,
"inputs": {
"merged_prs": 3,
"open_issues": 0,
"closed_issues": 0,
"issue_closed_ratio": null,
"closed_unmerged_prs": 0
},
"components": [
{
"key": "issue_resolution",
"name": "Issue resolution",
"detail": "no issues or no data",
"points": 0,
"status": "excluded",
"details": [
{
"code": "no_issues_or_data",
"params": {}
}
],
"max_points": 46.75
},
{
"key": "pr_acceptance",
"name": "PR acceptance",
"detail": "3/3 decided PRs merged",
"points": 38.2,
"status": "met",
"details": [
{
"code": "decided_prs_merged",
"params": {
"merged": 3,
"decided": 3
}
}
],
"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": 18,
"inputs": {
"followers": 0,
"owner_type": "User",
"is_verified": null,
"owner_login": "hxs996-beep",
"public_repos": 1,
"account_age_days": 330
},
"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 hxs996-beep",
"points": 0,
"status": "missed",
"details": [
{
"code": "owner_followers",
"params": {
"count": 0,
"login": "hxs996-beep"
}
}
],
"max_points": 25
},
{
"key": "track_record",
"name": "Track record",
"detail": "1 public repos, account ~0 yr old",
"points": 4,
"status": "partial",
"details": [
{
"code": "public_repos",
"params": {
"count": 1
}
},
{
"code": "account_age_years",
"params": {
"years": 0
}
}
],
"max_points": 25
}
]
}
],
"description": "Will the project survive its people — bus factor, responsiveness, who backs it, and package upkeep?"
},
{
"key": "engineering",
"band": "moderate",
"name": "Engineering Quality",
"value": 52,
"weight": 0.2,
"metrics": [
{
"key": "engineering_practices",
"band": "at_risk",
"name": "Engineering practices",
"note": "Excluded from scoring (no data or not applicable): OpenSSF Scorecard: CI-Tests. Remaining weights renormalized.",
"notes": [
{
"code": "excluded_no_data",
"params": {
"components": [
"openssf_scorecard_ci_tests"
]
}
},
{
"code": "weights_renormalized",
"params": {}
}
],
"value": 30,
"inputs": {
"has_ci": false,
"has_tests": true,
"has_editorconfig": false,
"has_linter_config": false,
"has_precommit_config": false
},
"components": [
{
"key": "ci_workflows",
"name": "CI workflows",
"detail": null,
"points": 0,
"status": "missed",
"details": [],
"max_points": 24
},
{
"key": "tests_present",
"name": "Tests present",
"detail": null,
"points": 24,
"status": "met",
"details": [],
"max_points": 24
},
{
"key": "linter_config",
"name": "Linter config",
"detail": null,
"points": 0,
"status": "missed",
"details": [],
"max_points": 16
},
{
"key": "pre_commit_hooks",
"name": "Pre-commit hooks",
"detail": null,
"points": 0,
"status": "missed",
"details": [],
"max_points": 9.6
},
{
"key": "editorconfig",
"name": ".editorconfig",
"detail": null,
"points": 0,
"status": "missed",
"details": [],
"max_points": 6.4
},
{
"key": "openssf_scorecard_ci_tests",
"name": "OpenSSF Scorecard: CI-Tests",
"detail": "no pull request found",
"points": 0,
"status": "excluded",
"details": [
{
"code": "no_data",
"params": {}
}
],
"max_points": 20
}
]
},
{
"key": "documentation",
"band": "excellent",
"name": "Documentation",
"note": null,
"notes": [],
"value": 85,
"inputs": {
"topics": [
"ai-coding-assistant",
"code-agent",
"code-agent-harness",
"deepseek-tui",
"deepseek-v4",
"golang",
"vibecoding",
"harness",
"deepseek-harness"
],
"has_wiki": true,
"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": "9 topics",
"points": 10,
"status": "met",
"details": [
{
"code": "topics_count",
"params": {
"count": 9
}
}
],
"max_points": 10
},
{
"key": "wiki",
"name": "Wiki",
"detail": null,
"points": 10,
"status": "met",
"details": [],
"max_points": 10
}
]
}
],
"description": "Are baseline engineering and documentation practices in place?"
},
{
"key": "security",
"band": "critical",
"name": "Security",
"value": 14,
"weight": 0.16,
"metrics": [
{
"key": "security_posture",
"band": "critical",
"name": "Security posture",
"note": "Excluded from scoring (no data or not applicable): CI-Tests, Dangerous-Workflow, Packaging, Pinned-Dependencies, Token-Permissions. Remaining weights renormalized.",
"notes": [
{
"code": "excluded_no_data",
"params": {
"components": [
"ci_tests",
"dangerous_workflow",
"packaging",
"pinned_dependencies",
"token_permissions"
]
}
},
{
"code": "weights_renormalized",
"params": {}
}
],
"value": 14,
"inputs": {
"source": "openssf_scorecard",
"checks_evaluated": 13,
"scorecard_version": "v5.5.0",
"checks_inconclusive": 5,
"scorecard_aggregate": 1.4
},
"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 1 contributing companies or organizations -- score normalized to 3",
"points": 0.8,
"status": "partial",
"details": [],
"max_points": 2.5
},
{
"key": "dangerous_workflow",
"name": "Dangerous-Workflow",
"detail": "no workflows found",
"points": 0,
"status": "excluded",
"details": [
{
"code": "no_data",
"params": {}
}
],
"max_points": 10
},
{
"key": "dependency_update_tool",
"name": "Dependency-Update-Tool",
"detail": "no update tool detected",
"points": 0,
"status": "missed",
"details": [],
"max_points": 7.5
},
{
"key": "fuzzing",
"name": "Fuzzing",
"detail": "project is not fuzzed",
"points": 0,
"status": "missed",
"details": [],
"max_points": 5
},
{
"key": "license",
"name": "License",
"detail": "license file detected",
"points": 2.5,
"status": "met",
"details": [],
"max_points": 2.5
},
{
"key": "maintained",
"name": "Maintained",
"detail": "project was created within the last 90 days. Please review its contents carefully",
"points": 0,
"status": "missed",
"details": [],
"max_points": 7.5
},
{
"key": "packaging",
"name": "Packaging",
"detail": "packaging workflow not detected",
"points": 0,
"status": "excluded",
"details": [
{
"code": "no_data",
"params": {}
}
],
"max_points": 5
},
{
"key": "pinned_dependencies",
"name": "Pinned-Dependencies",
"detail": "no dependencies found",
"points": 0,
"status": "excluded",
"details": [
{
"code": "no_data",
"params": {}
}
],
"max_points": 5
},
{
"key": "sast",
"name": "SAST",
"detail": "no SAST tool detected",
"points": 0,
"status": "missed",
"details": [],
"max_points": 5
},
{
"key": "security_policy",
"name": "Security-Policy",
"detail": "security policy file not detected",
"points": 0,
"status": "missed",
"details": [],
"max_points": 5
},
{
"key": "signed_releases",
"name": "Signed-Releases",
"detail": "Project has not signed or included provenance with any releases.",
"points": 0,
"status": "missed",
"details": [],
"max_points": 7.5
},
{
"key": "token_permissions",
"name": "Token-Permissions",
"detail": "No tokens found",
"points": 0,
"status": "excluded",
"details": [
{
"code": "no_data",
"params": {}
}
],
"max_points": 7.5
},
{
"key": "vulnerabilities",
"name": "Vulnerabilities",
"detail": "13 existing vulnerabilities detected",
"points": 0,
"status": "missed",
"details": [],
"max_points": 7.5
}
]
},
{
"key": "high_risk_jurisdiction_exposure",
"band": "excellent",
"name": "High-Risk Jurisdiction Exposure",
"note": "Only high-confidence self-published location evidence affects this multiplier. Ambiguous matches are review-only; country evidence is not proof of nationality, citizenship, legal registration, malicious intent, or sanctions status.",
"notes": [
{
"code": "jurisdiction_evidence_limits",
"params": {}
}
],
"value": 100,
"inputs": {
"meaning": "self-published location evidence; not nationality or citizenship",
"red_flag": false,
"exposures": [],
"policy_countries": [
"Russia",
"Iran",
"North Korea"
],
"review_only_matches": 0,
"assessed_self_published_locations": 2
},
"components": [
{
"key": "policy_exposure_multiplier",
"name": "Policy exposure multiplier",
"detail": "no confirmed policy-scope location match",
"points": 100,
"status": "met",
"details": [
{
"code": "jurisdiction_no_match",
"params": {}
}
],
"max_points": 100
}
]
}
],
"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": "at_risk",
"name": "Agent context & guidance",
"note": null,
"notes": [],
"value": 40,
"inputs": {
"has_llms_txt": false,
"legible_history_share": 0.93,
"agent_instruction_files": [],
"agent_instruction_max_bytes": null
},
"components": [
{
"key": "agent_instructions",
"name": "Agent instructions",
"detail": "no CLAUDE.md / AGENTS.md / editor rules",
"points": 0,
"status": "missed",
"details": [
{
"code": "no_agent_instructions",
"params": {}
}
],
"max_points": 45
},
{
"key": "machine_readable_docs_llms_txt",
"name": "Machine-readable docs (llms.txt)",
"detail": null,
"points": 0,
"status": "missed",
"details": [],
"max_points": 15
},
{
"key": "legible_commit_history",
"name": "Legible commit history",
"detail": "93 of 100 human commits state their intent (structured subject or explanatory body)",
"points": 40,
"status": "met",
"details": [
{
"code": "legible_history",
"params": {
"legible": 93,
"sampled": 100
}
}
],
"max_points": 40
}
]
},
{
"key": "ai_verify_loop",
"band": "good",
"name": "Verify loop (build / test / typecheck)",
"note": "Excluded from scoring (no data or not applicable): OpenSSF Scorecard: Pinned-Dependencies. Remaining weights renormalized.",
"notes": [
{
"code": "excluded_no_data",
"params": {
"components": [
"openssf_scorecard_pinned_dependencies"
]
}
},
{
"code": "weights_renormalized",
"params": {}
}
],
"value": 79,
"inputs": {
"has_nix": false,
"has_tests": true,
"lockfiles": [
"go.sum"
],
"has_dockerfile": false,
"typed_language": true,
"bootstrap_files": [
"Makefile"
],
"has_devcontainer": false,
"has_linter_config": false,
"typecheck_configs": [],
"agent_commit_share": 0.22,
"toolchain_manifests": [
"go.mod"
],
"dependency_bot_commit_share": 0
},
"components": [
{
"key": "one_command_bootstrap",
"name": "One-command bootstrap",
"detail": "Makefile",
"points": 18,
"status": "met",
"details": [
{
"code": "file_list",
"params": {
"files": "Makefile"
}
}
],
"max_points": 18
},
{
"key": "automated_tests",
"name": "Automated tests",
"detail": null,
"points": 22,
"status": "met",
"details": [],
"max_points": 22
},
{
"key": "lint_format_config",
"name": "Lint / format config",
"detail": null,
"points": 0,
"status": "missed",
"details": [],
"max_points": 11
},
{
"key": "static_type_checking",
"name": "Static type checking",
"detail": "Go (statically typed)",
"points": 11,
"status": "met",
"details": [
{
"code": "statically_typed_language",
"params": {
"language": "Go"
}
}
],
"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": "22 of the last 100 commits agent-authored or agent-credited",
"points": 10,
"status": "met",
"details": [
{
"code": "agent_authored_commits",
"params": {
"count": 22,
"sampled": 100
}
}
],
"max_points": 10
},
{
"key": "automated_maintenance",
"name": "Automated maintenance",
"detail": "no automated dependency updates observed",
"points": 0,
"status": "missed",
"details": [
{
"code": "no_dependency_automation",
"params": {}
}
],
"max_points": 8
},
{
"key": "openssf_scorecard_pinned_dependencies",
"name": "OpenSSF Scorecard: Pinned-Dependencies",
"detail": "no dependencies found",
"points": 0,
"status": "excluded",
"details": [
{
"code": "no_data",
"params": {}
}
],
"max_points": 10
}
]
},
{
"key": "ai_code_legibility",
"band": "excellent",
"name": "Code legibility for models",
"note": null,
"notes": [],
"value": 99,
"inputs": {
"primary_language": "Go",
"largest_source_bytes": 91578,
"source_files_sampled": 147,
"oversized_source_files": 2
},
"components": [
{
"key": "type_checkable_code",
"name": "Type-checkable code",
"detail": "Go (statically typed)",
"points": 45,
"status": "met",
"details": [
{
"code": "statically_typed_language",
"params": {
"language": "Go"
}
}
],
"max_points": 45
},
{
"key": "manageable_file_sizes",
"name": "Manageable file sizes",
"detail": "2/147 source files over 60KB",
"points": 54.3,
"status": "partial",
"details": [
{
"code": "oversized_source_files",
"params": {
"kb": 60,
"sampled": 147,
"oversized": 2
}
}
],
"max_points": 55
}
]
}
],
"description": "How well is the repo equipped to be developed and maintained with AI coding agents? An independent, experimental badge — weight 0.0, so it is surfaced on its own and does not affect the overall health score."
}
],
"metrics_version": "1.13.0"
},
"warnings": [
"Star history unavailable: GitHub GraphQL error: Resource not accessible by personal access token",
"Could not fetch go package 'github.com/deepact/deepact' from its registry",
"GitHub dependency-graph SBOM unavailable (404); the dependency graph may be disabled for this repository"
],
"report_type": "repository",
"generated_at": "2026-07-26T07:11:54.153559Z",
"schema_version": "0.27.0",
"badge_url": "https://raw.githubusercontent.com/inspect-software/badges/main/v1/h/hxs996-beep/deepAct.svg",
"full_name": "hxs996-beep/deepAct",
"license_state": "standard",
"license_spdx": "MIT"
}