Skip to content
Merged

pr #16

Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
468 commits
Select commit Hold shift + click to select a range
fcf79ec
feat(release): signing secrets runbook + real Authenticode signing st…
EVEDensity Sep 1, 2026
a28d53f
feat(tools): web_fetch browser tool — URL to readable text, same SSRF…
EVEDensity Sep 1, 2026
0c4b903
feat(tools): Codex-style permission tiers suggest/edit/auto for runne…
EVEDensity Sep 1, 2026
c650c7e
feat(cli): interactive /compact and /replay session context commands …
EVEDensity Sep 1, 2026
61ea386
docs(adr): ADR-0106 — L3 knowledge graph evaluated, stays on R5 timel…
EVEDensity Sep 1, 2026
46543ec
feat(api): v1 migration slice — authenticated /api/v1/skills dual-mou…
EVEDensity Sep 1, 2026
e9a75f3
refactor(frontend): extract useAuthPanel hook and mention pure functi…
EVEDensity Sep 1, 2026
0f09744
test(benchmarks): R4 closure check — TTFT gate aligned to docs claim,…
EVEDensity Sep 1, 2026
6aa948e
docs: reconcile A2A prototype->production and stale I-6 status entrie…
EVEDensity Sep 1, 2026
0673c8e
feat(memory): remove heavy L2/L3/semantic/procedural memory layers an…
EVEDensity Sep 1, 2026
573a945
docs(memory): record ADR-0107 slimming decision and reconcile all mem…
EVEDensity Sep 1, 2026
f8f40e5
fix(memory): drop dead shutdown reference to removed memory_summary_c…
EVEDensity Sep 1, 2026
9e2e371
feat(memory): L1 session summaries become change-only folds (ADR-0107)
EVEDensity Sep 1, 2026
08c4060
docs(architecture): add multi-agent collaboration blueprint and ADR-0108
EVEDensity Sep 1, 2026
b40f190
feat(cli): receipts search and replay slice (ADR-0108 P0)
EVEDensity Sep 1, 2026
42fe2e8
feat(cli): project facts slice with gated injection (ADR-0107)
EVEDensity Sep 1, 2026
1ddee09
feat(collaboration): P0 chat adapter + P1 unified member roster
EVEDensity Sep 1, 2026
f9c5b7b
feat: P0 web chat full Mission/SSE migration + P1 mention routing + M…
EVEDensity Sep 1, 2026
d520813
refactor(T0-1): split mission_service.py (3165->46 lines facade) into…
EVEDensity Sep 1, 2026
b14c10e
fix(T0-1): import underscore-prefixed helpers in _service.py
EVEDensity Sep 1, 2026
18ef662
refactor(T0-4): hardcode feature-flags — remove USE_MISSION branch + …
EVEDensity Sep 1, 2026
3d10aa5
refactor(T0-2): split v1 missions.py into package + facade
EVEDensity Sep 1, 2026
b4429e2
refactor(api/v1): split 1421-line missions.py into missions/ package
EVEDensity Sep 1, 2026
1cfae51
refactor(frontend): route stream interrupt through Mission/SSE instea…
EVEDensity Sep 1, 2026
6dbd1fd
chore: delete legacy WebSocket API endpoint layer (-3185 lines)
EVEDensity Sep 1, 2026
bf6bab1
chore: delete websocket test fixtures tied to removed modules
EVEDensity Sep 1, 2026
0b9b105
refactor(T0-1g): split 2979-line _service.py into 4 mixins + 50-line …
EVEDensity Sep 1, 2026
dc3c823
refactor(T0-1g): split execution/verification mixins into 6 focused m…
EVEDensity Sep 1, 2026
1f0681d
refactor(T0-3e): strip WebSocket imports and refs from page.tsx — all…
EVEDensity Sep 1, 2026
ea2db56
chore(T0-3f): delete dead WebSocket frontend module tree (-17 files, …
EVEDensity Sep 1, 2026
a2ec659
chore: purge LangGraph dead code + WebSocket manager null-op stub
EVEDensity Sep 1, 2026
84cb946
chore: delete dag_executor, compat package, legacy_langgraph config
EVEDensity Sep 2, 2026
49fc9aa
refactor: strip run_dag + persist_progress from TaskStateMachine
EVEDensity Sep 2, 2026
871bb20
feat(t1-2): add @archivist special mention with receipts context inje…
Sep 2, 2026
5d1e3c1
feat(t1-4): add cross-domain search --scope {mission,session,both} (A…
Sep 2, 2026
d10394b
feat(t1-3): add Session/SessionEvent/PendingConfirmation domain model…
EVEDensity Sep 2, 2026
8923a1f
feat(t1-1,t2): add rule engine (YAML + hot-reload) + Mission terminal…
EVEDensity Sep 2, 2026
60a2ede
feat(t3,t5): chat_mission session auto-create + session events write …
EVEDensity Sep 2, 2026
d5bdc83
feat(t6): add session_events search to CLI --scope events + --scope all
EVEDensity Sep 2, 2026
f18e9c0
覆写: hello.py
EVEDensity Sep 3, 2026
fa67db2
覆写: hello.py
EVEDensity Sep 3, 2026
8eb15f6
覆写: hello.py
EVEDensity Sep 3, 2026
52861f4
覆写: hello.py
EVEDensity Sep 3, 2026
9bda8bd
docs: replace CLI north star with developer tool plan
EVEDensity Sep 3, 2026
37d49d7
feat(cli): add versioned event normalization and cursor
EVEDensity Sep 3, 2026
a3445c3
feat(cli): consume normalized mission SSE events
EVEDensity Sep 3, 2026
ac9e9b9
feat(harness): add request-scoped model text streaming
EVEDensity Sep 3, 2026
2490807
feat(runner): pass text streaming callback into harness
EVEDensity Sep 3, 2026
3af0872
feat(mission): add lease-fenced streaming event contract
EVEDensity Sep 3, 2026
8ce9c69
feat(harness): publish assistant stream events through checkpoint port
EVEDensity Sep 3, 2026
746fd6c
feat(stream): publish tool execution events
EVEDensity Sep 3, 2026
eadfccd
feat(cli): resolve decisions from streaming events
EVEDensity Sep 3, 2026
955f982
feat(cli): add repository diff commands
EVEDensity Sep 3, 2026
6b3f7de
feat(cli): add confirmed undo for tracked changes
EVEDensity Sep 3, 2026
1958c04
docs(cli): record phase 3 repository workflow
EVEDensity Sep 3, 2026
b02bb82
Update README.md
EVEDensity Sep 3, 2026
47d5681
feat(cli): add context and token budget notices
EVEDensity Sep 3, 2026
d4cf810
feat(cli): bound compacted session context
EVEDensity Sep 3, 2026
f613884
docs(cli): record phase 4 context delivery
EVEDensity Sep 3, 2026
8d4bcb3
Update README.md
EVEDensity Sep 3, 2026
c6be52e
Update README.md
EVEDensity Sep 3, 2026
ad4414d
Update README.md
EVEDensity Sep 3, 2026
6f8425c
feat(cli): add jsonl execution output
EVEDensity Sep 3, 2026
9929e80
fix(cli): correct jsonl parser indentation
EVEDensity Sep 3, 2026
4030c4c
docs(cli): record phase 5 jsonl delivery
EVEDensity Sep 3, 2026
6fac04e
feat(cli): add non-mutating doctor diagnostics
EVEDensity Sep 3, 2026
8077bdc
feat(cli): add shell completion command
EVEDensity Sep 3, 2026
c81ef17
docs(cli): record phase 6 release foundations
EVEDensity Sep 3, 2026
292f44c
Merge branch 'main' of https://github.com/EVEDensity/AgentHub
EVEDensity Sep 3, 2026
cf3a38e
docs(cli): replace stale roadmap with executable plan
EVEDensity Sep 3, 2026
ca23af0
test(cli): add provider streaming contract smoke
EVEDensity Sep 3, 2026
4b2eade
docs(cli): document provider smoke acceptance
EVEDensity Sep 3, 2026
0bfb4c5
docs(cli): record deepseek streaming smoke pass
EVEDensity Sep 3, 2026
7ce89ce
feat(cli): add shared streaming event reducer
EVEDensity Sep 3, 2026
11d3a9f
feat(cli): expose reduced state to jsonl consumers
EVEDensity Sep 3, 2026
6ca4f3e
docs(cli): record event reducer progress
EVEDensity Sep 3, 2026
18275c9
feat(cli): track mission-scoped git changes
EVEDensity Sep 3, 2026
496be25
feat(cli): scope undo to mission changes
EVEDensity Sep 3, 2026
a9a32c8
docs(cli): record mission-scoped undo progress
EVEDensity Sep 3, 2026
3fc5359
feat(cli): scope always-allow to individual tools
EVEDensity Sep 3, 2026
8d068ee
docs(cli): record permission productization progress
EVEDensity Sep 3, 2026
f48b267
feat(cli): version jsonl records
EVEDensity Sep 3, 2026
a20aa9c
ci(cli): add jsonl smoke workflow
EVEDensity Sep 3, 2026
ace719a
feat(cli): add responsiveness benchmark
EVEDensity Sep 3, 2026
28afb30
fix(cli): keep benchmark credentials env-only
EVEDensity Sep 3, 2026
b89920e
docs(cli): define experience benchmark process
EVEDensity Sep 3, 2026
befa382
feat(cli): render reducer state in rich and tui
EVEDensity Sep 3, 2026
8d8a807
docs(cli): mark reducer renderers integrated
EVEDensity Sep 3, 2026
0265195
feat(cli): reorder mission events within sse batches
EVEDensity Sep 3, 2026
a5f7f26
docs(cli): record sse ordering strategy
EVEDensity Sep 3, 2026
9f39467
feat(cli): capture mission git baseline metadata
EVEDensity Sep 4, 2026
ad40541
fix(cli): capture baseline only during execution
EVEDensity Sep 4, 2026
c4a4184
docs(cli): record git baseline metadata
EVEDensity Sep 4, 2026
17c830b
ci(cli): add provider matrix and release preflight
EVEDensity Sep 4, 2026
5cae5be
ci(cli): add deepseek provider nightly matrix
EVEDensity Sep 4, 2026
dc9d39f
feat(cli): add attempt snapshot and conflict-safe restore
EVEDensity Sep 4, 2026
80999cd
docs(cli): record attempt snapshot semantics
EVEDensity Sep 4, 2026
e6c0c9c
feat(cli): add path-scoped session permissions
EVEDensity Sep 4, 2026
6ea6984
docs(cli): record path permission controls
EVEDensity Sep 4, 2026
af9ab31
test(cli): cover provider tool call shapes
EVEDensity Sep 4, 2026
da5892e
test(cli): guard release preflight contract
EVEDensity Sep 4, 2026
6990e32
docs(cli): record provider and release verification boundaries
EVEDensity Sep 4, 2026
28d67dc
ci(cli): validate staged npm package contents
EVEDensity Sep 4, 2026
53a0350
test(cli): guard npm tarball validation gate
EVEDensity Sep 4, 2026
f29d60a
feat(cli): restore attempt git index precisely
EVEDensity Sep 4, 2026
dac321d
feat(cli): persist session permission policies
EVEDensity Sep 4, 2026
dc8f906
docs(cli): record persistent permission policy
EVEDensity Sep 4, 2026
43fb461
test(cli): cover shared work unit snapshot restore
EVEDensity Sep 4, 2026
7b181cb
feat(cli): export and import permission policies
EVEDensity Sep 4, 2026
f67462b
ci(cli): verify provider tool call nightly
EVEDensity Sep 4, 2026
d8a04ef
ci(cli): add cross platform package rollback checks
EVEDensity Sep 4, 2026
ddd4aa6
docs(cli): replace roadmap with core product delivery plan
EVEDensity Sep 4, 2026
00400b0
feat(cli): add attempt manifests and permission editing
EVEDensity Sep 4, 2026
79d0ba0
feat(api): add authenticated permission policy sync
EVEDensity Sep 4, 2026
08bbcfe
test(api): cover authenticated permission sync
EVEDensity Sep 4, 2026
c1b895a
feat(cli): enrich attempt artifact provenance manifest
EVEDensity Sep 4, 2026
a7f93ce
feat(cli): unify renderer state snapshots
EVEDensity Sep 4, 2026
36e7dce
docs(cli): record core capability implementation baseline
EVEDensity Sep 4, 2026
5692161
fix(cli): skip preflight confirmation for normal chat
EVEDensity Sep 4, 2026
94f48f2
test(cli): cover chinese side effect intent
EVEDensity Sep 4, 2026
24ea113
feat(cli): isolate normal chat from side effects
EVEDensity Sep 4, 2026
07c5563
feat(cli): complete phase a event normalization
EVEDensity Sep 4, 2026
fed7fb0
docs(cli): mark phase a local streaming work complete
EVEDensity Sep 4, 2026
f5667f0
feat(cli): add phase b state diagnostics
EVEDensity Sep 4, 2026
e0f8dba
docs(cli): advance phase b state experience baseline
EVEDensity Sep 4, 2026
c85ccc5
feat(cli): project stream and terminal error states
EVEDensity Sep 4, 2026
48f8556
docs(cli): record phase b error state projection
EVEDensity Sep 4, 2026
c2aa535
feat(cli): add recordable terminal state projection
EVEDensity Sep 4, 2026
4c24cfc
docs(cli): record terminal state projection baseline
EVEDensity Sep 4, 2026
dcf937f
fix(cli): restore mock assistant streaming path
EVEDensity Sep 4, 2026
63c1552
fix(cli): report mission files instead of workspace inventory
EVEDensity Sep 4, 2026
ad4963b
docs(cli): record mock streaming incident and fix
EVEDensity Sep 4, 2026
f25ae35
fix(runner): degrade when stream event endpoint is unavailable
EVEDensity Sep 4, 2026
bd61cd3
feat(cli): align tui session commands with repl
EVEDensity Sep 4, 2026
fb3e3d8
test(cli): cover tui cost and context commands
EVEDensity Sep 4, 2026
97602b6
refactor(cli): isolate standards-compliant sse parser
EVEDensity Sep 4, 2026
6e7845d
docs(cli): define robustness refactor boundaries and status
EVEDensity Sep 4, 2026
8a0ec12
refactor(cli): extract authenticated http transport
EVEDensity Sep 4, 2026
e9e69e5
refactor(cli): add mission decision artifact api facades
EVEDensity Sep 4, 2026
8c58a87
refactor(cli): extract mission sse client
EVEDensity Sep 4, 2026
6fa9850
docs(cli): mark sse client extraction complete
EVEDensity Sep 4, 2026
ae87373
test(cli): expand reliability matrix for tools transport and tty
EVEDensity Sep 4, 2026
adc9997
test(cli): harden startup failure and SSE reconnect coverage
EVEDensity Sep 4, 2026
25f72eb
fix(cli): classify provider HTTP failures consistently
EVEDensity Sep 4, 2026
6e696bd
docs(cli): record reliability phase evidence and limits
EVEDensity Sep 4, 2026
cb85cd0
test(cli): assert renderer snapshot parity across reconnect decisions
EVEDensity Sep 4, 2026
d2158a5
feat(benchmark): capture tool feedback recovery and decision metrics
EVEDensity Sep 4, 2026
625aacf
test(cli): fix reconnect snapshot fixture
EVEDensity Sep 4, 2026
a8fc98b
docs(cli): track phase A B and benchmark acceptance state
EVEDensity Sep 4, 2026
6829179
ci(cli): publish redacted provider smoke evidence
EVEDensity Sep 5, 2026
1607376
test(cli): cover tty spinner and non-tty rendering
EVEDensity Sep 5, 2026
98c0d9e
docs(cli): record phase A and B acceptance boundaries
EVEDensity Sep 5, 2026
edd5b50
feat(cli): add fail-closed attempt restore preview
EVEDensity Sep 5, 2026
4ac7d1d
feat(cli): explain permission rule sources and precedence
EVEDensity Sep 5, 2026
74c813b
docs(cli): track restore preview and permission explain UX
EVEDensity Sep 5, 2026
c1ae969
feat(cli): show attempt file hashes and provenance before undo
EVEDensity Sep 5, 2026
805520a
fix(cli): make permission imports atomic and schema-validated
EVEDensity Sep 5, 2026
3d6a928
feat(cli): add provider capability matrix and degraded state
EVEDensity Sep 5, 2026
c18e237
test(cli): validate phase A event chain and fragmented tool calls
EVEDensity Sep 5, 2026
362ba72
docs(cli): mark phase A automation scope complete
EVEDensity Sep 5, 2026
a00ca46
test(cli): complete phase B state and JSONL projection coverage
EVEDensity Sep 5, 2026
3a58c62
docs(cli): mark phase B automation scope complete
EVEDensity Sep 5, 2026
b36d8bf
feat(cli): add non-interactive attempt undo preview
EVEDensity Sep 5, 2026
2ad067f
docs(cli): consolidate phase C progress after phase A B audit
EVEDensity Sep 5, 2026
5466af5
feat(permissions): add policy version conflict and precedence metadata
EVEDensity Sep 5, 2026
e9d87f1
feat(cli): version exported permission policy schema
EVEDensity Sep 5, 2026
20c3abd
docs(permissions): record phase D policy sync safeguards
EVEDensity Sep 5, 2026
4fec033
feat(cli): add provider matrix registry and idempotent tool gate
EVEDensity Sep 5, 2026
2633992
docs(cli): record phase E provider matrix baseline
EVEDensity Sep 5, 2026
b17afad
ci(cli): harden npm install rollback and release diagnostics
EVEDensity Sep 5, 2026
43fb6d6
docs(cli): record phase F release workflow safeguards
EVEDensity Sep 5, 2026
e93c869
feat(cli): harden provider diagnostics and benchmark gates
EVEDensity Sep 5, 2026
01a6c2d
fix(cli): preserve provider HTTP error diagnostics
EVEDensity Sep 5, 2026
0c88a50
fix(cli): buffer streaming provider errors before status raise
EVEDensity Sep 5, 2026
c23b344
test(cli): keep provider smoke mocks compatible
EVEDensity Sep 5, 2026
49b88ae
fix(cli): keep SSE iteration inside stream context
EVEDensity Sep 5, 2026
d746f84
fix(cli): use auto tool choice for thinking providers
EVEDensity Sep 5, 2026
de904cb
feat(cli): audit attempt restore provenance
EVEDensity Sep 5, 2026
7a3eada
feat(cli): expose permission decision chain and replay
EVEDensity Sep 5, 2026
d761bb4
test(cli): preserve permission explanation compatibility
EVEDensity Sep 5, 2026
a579324
feat(cli): persist provider health and show degraded state
EVEDensity Sep 5, 2026
a755419
test(cli): cover provider degraded alert lifecycle
EVEDensity Sep 5, 2026
4cea663
fix(cli): default chat token budget for real conversations
EVEDensity Sep 5, 2026
35e7d93
feat(cli): verify real provider tool loop with probe
EVEDensity Sep 5, 2026
ebe854e
fix(provider): preserve native tool call ids and invalid args
EVEDensity Sep 5, 2026
4abf998
test(provider): fix tool call matrix fixture syntax
EVEDensity Sep 5, 2026
70b42d3
fix(ci): make provider smoke registry importable from entrypoint
EVEDensity Sep 5, 2026
8cf8a41
fix(cli): use supported suggest mode for normal chat
EVEDensity Sep 5, 2026
040c034
fix(cli): parse snake case mission SSE envelopes
EVEDensity Sep 5, 2026
c83a5aa
feat(cli): collapse thinking and speed plain chat
EVEDensity Sep 5, 2026
4d0c46a
perf(cli): reduce local runner startup delay
EVEDensity Sep 5, 2026
4d9108c
fix(cli): serialize rich live transcript output
EVEDensity Sep 5, 2026
0265b35
feat(cli): add expandable thinking transcript
EVEDensity Sep 5, 2026
a02ff5a
fix(cli): hide provider DSML markup from transcript
EVEDensity Sep 5, 2026
1e0a072
fix(cli): accept think alias
EVEDensity Sep 5, 2026
b74088c
fix(cli): guarantee visible plain chat replies
EVEDensity Sep 5, 2026
61748ec
test(cli): preserve injected chat execution seam
EVEDensity Sep 5, 2026
3b14477
fix(cli): route conversational turns to real text stream
EVEDensity Sep 5, 2026
f624b4f
fix(cli): route date and weather questions by capability
EVEDensity Sep 5, 2026
88453ed
feat(cli): persist shared conversation context
EVEDensity Sep 5, 2026
9cc04c8
fix(cli): persist resume state with conversation
EVEDensity Sep 5, 2026
0774e40
docs(cli): document shared conversation storage
EVEDensity Sep 5, 2026
9ff7a8d
fix(stream): remove fixed reasoning character cutoff
EVEDensity Sep 5, 2026
74699d9
fix(sqlite): retry concurrent event sequence allocation
EVEDensity Sep 5, 2026
00dc70d
feat(cli): add real time date and weather tools
EVEDensity Sep 5, 2026
f65f04b
fix(cli): avoid guessing weather locations
EVEDensity Sep 5, 2026
0bb1a72
feat(tools): enforce safe changes and explicit git workflow
EVEDensity Sep 6, 2026
8a9194c
feat(tools): add developer workflow and diagnostics
EVEDensity Sep 6, 2026
9172297
fix(tools): preserve append writes under hash guard
EVEDensity Sep 6, 2026
b7477fe
fix(tools): avoid duplicate newline on append
EVEDensity Sep 6, 2026
28c7194
feat(tools): verify change sets after writes
EVEDensity Sep 6, 2026
4990208
feat(tools): add unified attempt audit report
EVEDensity Sep 6, 2026
5a99e68
feat(stream): wake SSE subscribers from durable event writes
EVEDensity Sep 6, 2026
0c54c71
refactor(tools): unify execution policy and change contracts
EVEDensity Sep 6, 2026
6bb0bbb
feat(cli): explain effective tool availability
EVEDensity Sep 6, 2026
6dfb4a5
feat(protocol): unify model and SSE contracts
EVEDensity Sep 6, 2026
24f7682
fix(sse): accept after event id cursor
EVEDensity Sep 6, 2026
2f00ad5
refactor: unify errors context and explicit git commits
EVEDensity Sep 6, 2026
eeadfe7
refactor(cli): persist conversation through ContextStore
EVEDensity Sep 6, 2026
9b21ade
refactor: canonicalize model ids and renderer snapshots
EVEDensity Sep 6, 2026
d24bd0c
docs: align status vocabulary with implementation evidence
EVEDensity Sep 6, 2026
cb8f67b
test: verify unified context errors and model aliases
EVEDensity Sep 6, 2026
bf4d54c
refactor: converge context and renderer runtime paths
EVEDensity Sep 6, 2026
0d84efe
feat(context): unify session resume and compilation metadata
EVEDensity Sep 6, 2026
f239968
refactor: normalize legacy tool calls and expose context manifest
EVEDensity Sep 6, 2026
b1fbf8f
ci: add honest real environment evidence gate
EVEDensity Sep 6, 2026
eb8ac92
feat(api): unify HTTP errors and start mission listener
EVEDensity Sep 6, 2026
952dc63
feat(context): retain structured compact manifest
EVEDensity Sep 6, 2026
54a9d02
fix(cli): route rain questions to weather tool
EVEDensity Sep 6, 2026
46f7554
fix(cli): route project file queries to tools
EVEDensity Sep 6, 2026
27dbbb4
fix(cli): expose tools for read-only project queries
EVEDensity Sep 6, 2026
6db65f4
fix(weather): resolve local location automatically
EVEDensity Sep 6, 2026
4d02bda
fix(cli): handle workspace queries locally
EVEDensity Sep 6, 2026
d00e9e1
fix(weather): prefer public location over timezone guess
EVEDensity Sep 6, 2026
382ee85
docs: add production CLI technical specification
EVEDensity Sep 6, 2026
fd44532
feat(tools): expose project inspection and git push boundary
EVEDensity Sep 6, 2026
b325fe9
feat(cli): inject project identity across model routes
EVEDensity Sep 6, 2026
72258aa
test(cli): cover local project identity routing
EVEDensity Sep 6, 2026
0c77a50
test(project): discover root instruction files
EVEDensity Sep 6, 2026
934ee82
docs: define project identity and tool routing contract
EVEDensity Sep 6, 2026
bffda0e
feat(cli): Claude-Code-style UX + four engine hooks (token cost, tool…
EVEDensity Sep 7, 2026
1e1f6ec
chore: sync post-push edits (workflows, scripts, db init, tests)
EVEDensity Sep 7, 2026
da6ebe3
chore: improve release evidence pipeline and smoke tests
EVEDensity Sep 8, 2026
e8608ef
feat(release): distribute CLI through GitHub Releases
EVEDensity Sep 8, 2026
0c698fa
fix(release): validate frozen CLI mission result
EVEDensity Sep 8, 2026
27bd34c
fix(release): cache downloads and classify timeouts
EVEDensity Sep 8, 2026
aea6dc0
fix(release): support offline evidence and latest benchmark gating
EVEDensity Sep 8, 2026
284a730
docs(cli): add one-line Windows installation
EVEDensity Sep 8, 2026
bef717a
feat: add code index, tool receipts, workspace fingerprint and enhanc…
EVEDensity Sep 9, 2026
c909108
feat: add pyproject build, entrypoint, version module and enhance CLI…
EVEDensity Sep 9, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
28 changes: 28 additions & 0 deletions .dockerignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
.git
.github
.env
.env.*
!.env.example
.venv
**/__pycache__
*.py[cod]
.pytest_cache
.ruff_cache
.mypy_cache
node_modules
frontend/node_modules
frontend/.next
frontend/out
data
.codegraph
.understand-anything
.playwright-cli
.claude
.idea
.vscode
docs/internal
docs/generated
deploy/secrets
*.log
*.tmp
.tmp-go-cache
40 changes: 40 additions & 0 deletions .env.example
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,24 @@
# AGENTHUB_MEMORY_EVENTS_ENABLED=true
# DATABASE_DSN=postgres://agenthub:agenthub@localhost:5432/agenthub?sslmode=disable

# 本地 Decision 到期监督(默认不启动)
# 启用:docker compose -f deploy/docker-compose.platform.yml --profile mission-supervision up -d --build
# DSN 写入此文件,文件内容示例:postgresql://agenthub:agenthub@postgres:5432/agenthub
# AGENTHUB_DECISION_EXPIRY_DATABASE_URL_FILE=./secrets/decision-expiry-database-url
# AGENTHUB_DECISION_EXPIRY_IDLE_DELAY_SECONDS=0.5
# AGENTHUB_DECISION_EXPIRY_MAX_DELAY_SECONDS=10.0

# Artifact byte verification (Mission Control reads; Runner/Artifact Store writes)
# AGENTHUB_ARTIFACT_STORE_BACKEND=local
# AGENTHUB_ARTIFACT_LOCAL_ROOT=data/artifacts
# AGENTHUB_ARTIFACT_PUBLISH_MAX_BYTES=1073741824
# AGENTHUB_ARTIFACT_VERIFY_MAX_BYTES=1073741824
# MINIO_ENDPOINT=127.0.0.1:9000
# MINIO_ACCESS_KEY=minio
# MINIO_SECRET_KEY=minio123
# MINIO_BUCKET=agenthub
# MINIO_SECURE=false

# ── 安全 (Security) ──────────────────────────────────────────────────
# JWT 密钥 — 留空则开发模式(不验签),生产环境必须设置 64 字符 hex
# JWT_SECRET=
Expand All @@ -29,6 +47,14 @@

# Anthropic Claude
# ANTHROPIC_API_KEY=sk-ant-...
#
# ── 统一 LLM 网关(可选,new-api 风格)───────────────────────────────
# 默认留空:走自研按供应商适配器。设为 "newapi" 后,远程供应商的模型
# 统一经 new-api 的 OpenAI 兼容入口转发(渠道选择、重试、计费由网关负责)。
# 部署参考:deploy/docker-compose.newapi.yml;迁移:python deploy/newapi/migrate_models.py --apply
# AGENTHUB_LLM_GATEWAY=newapi
# AGENTHUB_NEWAPI_BASE_URL=http://127.0.0.1:3000/v1
# AGENTHUB_NEWAPI_API_KEY=sk-agenthub-xxxx

# BGE Embedding (TEI-compatible server)
# BGE_API_URL=http://127.0.0.1:8080
Expand All @@ -51,9 +77,23 @@
# VLLM_BASE_URL=http://vllm:8000/v1
# VLLM_API_KEY=not-needed
# VLLM_EMBED_MODEL=text-embedding-3-small

# Go Gateway -> Python Mission control plane (A2A task persistence)
# MISSION_CONTROL_PLANE_URL=http://127.0.0.1:8000
# VLLM_MODEL=Qwen/Qwen2.5-7B-Instruct # docker-compose 启动 vLLM 时加载的模型
# HF_TOKEN= # 拉取 gated 模型时的 HuggingFace token

# ── A2A 分发模式 (ADR-0053 cutover) ───────────────────────────────────
# gateway(默认):Gateway 在请求路径同步转发远程任务(兼容)。
# runner:Gateway 仅提交到 Mission Control,远端分发交给 Runner outbound worker,
# 两条路径不会同时派发同一 attempt。
# A2A_DISPATCH_MODE=gateway

# ── Legacy LangGraph 编排 (R2 下线) ───────────────────────────────────
# 默认 false:聊天路由直接走 agent_service 工具循环,不再经 LangGraph 编排。
# 仅在受控迁移窗口显式开启。
# AGENTHUB_ENABLE_LEGACY_LANGGRAPH=false

# ── 沙盒执行 (Sandbox Execution) ─────────────────────────────────────
# SANDBOX_MODE=auto # auto / subprocess / remote
# SANDBOX_SERVICE_URL=http://sandbox-service:8097
Expand Down
153 changes: 150 additions & 3 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,61 @@ concurrency:
cancel-in-progress: true

jobs:
# ═══════════════════════════════════════════════════════════════════
# Docs & benchmark gates (R1/R4) — doc-link integrity + claim discipline
# + measured perf gates
# ═══════════════════════════════════════════════════════════════════
docs-gates:
name: 'Docs & Benchmark Gates'
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-python@v5
with:
python-version: '3.11'
- run: pip install -r requirements.txt
continue-on-error: true
- name: Check doc links resolve
run: python benchmarks/gates.py check-links
- name: Check claim discipline (no oversold performance claims)
run: python benchmarks/gates.py check-docs
- name: Real token-compaction gate (measured against production helpers)
run: python benchmarks/gates.py run --name token_compaction_ratio
- name: Code file-size gate (<=800 lines, legacy ratchet may only shrink)
run: python benchmarks/gates.py run --name code_file_size
- name: Code complexity gate (McCabe <=20, class-qualified exemptions)
run: python benchmarks/gates.py run --name code_complexity
- name: Streaming first-token (TTFT) gate (pooled local mock, < 2s per docs claim)
run: python benchmarks/gates.py run --name streaming_ttft
- name: Restore native tokenizer assets
id: tokcache
uses: actions/cache@v4
with:
path: assets/tokenizers
# Key pins the Qwen tokenizer.json sha256[:16]; bump when
# benchmarks/fetch_tokenizers.py REPOS changes.
key: cn-tokenizers-qwen-c0382117ea329cdf
- name: Provision CN tokenizer assets (HF primary + mirror fallback)
if: steps.tokcache.outputs.cache-hit != 'true'
run: |
pip install "tokenizers>=0.20,<1"
python benchmarks/fetch_tokenizers.py --provider qwen
# Network flake must not hard-block CI: the gate degrades to an
# honest SKIP when no asset exists (never a synthetic pass).
continue-on-error: true
- name: CN tokenizer billing-parity gate
env:
AGENTHUB_TOKENIZER_QWEN_PATH: ${{ github.workspace }}/assets/tokenizers/qwen
AGENTHUB_CN_TOKENIZER_PROVIDER: qwen
run: python benchmarks/gates.py run --name cn_tokenizer_precision
# MM-5 opt-in vision probe: honest SKIP unless a real channel is wired
# via repo secrets (NEWAPI_BASE_URL / AGENTHUB_TEST_CHANNEL_KEY).
- name: Multimodal vision e2e probe (skips without channel secrets)
env:
NEWAPI_BASE_URL: ${{ secrets.NEWAPI_BASE_URL }}
AGENTHUB_TEST_CHANNEL_KEY: ${{ secrets.AGENTHUB_TEST_CHANNEL_KEY }}
run: python benchmarks/gates.py run --name multimodal_e2e_probe

# ═══════════════════════════════════════════════════════════════════
# Frontend
# ═══════════════════════════════════════════════════════════════════
Expand Down Expand Up @@ -60,7 +115,14 @@ jobs:
echo "::endgroup::"
done
# test all modules (skip integration tests that need infra)
- run: go test -short -race -count=1 ./...
- name: go test (all modules)
run: |
set -e
for mod in $(find . -name go.mod -not -path '*/testdata/*' | sed 's|/go.mod||'); do
echo "::group::go test $mod"
(cd "$mod" && go test -short -race -count=1 ./...)
echo "::endgroup::"
done

# ═══════════════════════════════════════════════════════════════════
# Rust — all crates
Expand Down Expand Up @@ -100,12 +162,97 @@ jobs:
with:
python-version: '3.11'
cache: pip
- run: pip install ruff mypy pytest
- run: pip install ruff mypy pytest pytest-cov
- run: ruff check .
continue-on-error: true
- run: mypy --ignore-missing-imports --check-untyped-defs .
continue-on-error: true
- run: pytest --tb=short -q
# services/python currently ships no test files; bare pytest would exit 5
# (no tests collected) and fail the job. Skip honestly until tests land —
# the coverage gate already SKIPs without a coverage.xml artifact.
- name: Run pytest (honest SKIP while services/python has no tests)
run: |
if find . -name 'test_*.py' -not -path '*/node_modules/*' | grep -q .; then
pytest --cov=services --cov-report=xml --tb=short -q
else
echo "[SKIP] services/python has no test files yet; add tests to enforce coverage."
fi
- name: Coverage gate (line-rate >= 60%)
run: python ../../benchmarks/gates.py run --name test_coverage

workspace-runner-integration:
name: 'Python - Workspace Runner integration'
runs-on: ubuntu-latest
services:
postgres:
image: postgres:16
env:
POSTGRES_USER: agenthub_test
POSTGRES_PASSWORD: agenthub_test
POSTGRES_DB: agenthub_test
ports:
- 5432:5432
options: >-
--health-cmd "pg_isready -U agenthub_test -d agenthub_test"
--health-interval 5s
--health-timeout 5s
--health-retries 10
env:
AGENTHUB_TEST_POSTGRES_DSN: >-
postgresql://agenthub_test:agenthub_test@127.0.0.1:5432/agenthub_test
# tests/integration imports the `app` package by its repo-root path;
# without this pytest cannot resolve it on the runner.
PYTHONPATH: ${{ github.workspace }}
steps:
- uses: actions/checkout@v4
- uses: actions/setup-python@v5
with:
python-version: '3.11'
cache: pip
cache-dependency-path: requirements.txt
- run: pip install -r requirements-dev.txt
- run: ruff check tests/integration
- run: pytest tests/integration --tb=short -q

# ═══════════════════════════════════════════════════════════════════
# Developer CLI — unit tests + headless exec --json smoke (north-star M1)
# The exec smoke proves the exit-code contract on CI: the mock provider
# cannot create files, so the VERIFY: gate must veto the mission and
# `agenthub exec --json` must exit 1 (never a fake success).
# ═══════════════════════════════════════════════════════════════════
cli:
name: 'Developer CLI'
runs-on: ubuntu-latest
env:
PYTHONPATH: ${{ github.workspace }}
steps:
- uses: actions/checkout@v4
- uses: actions/setup-python@v5
with:
python-version: '3.11'
cache: pip
cache-dependency-path: requirements.txt
- run: pip install -r requirements.txt pytest
- name: CLI unit tests
run: pytest tests/cli/test_cli_main.py tests/cli/test_cli_chat.py tests/cli/test_cli_chat_compact.py tests/cli/test_cli_tui.py tests/cli/test_cli_frozen.py tests/cli/test_cli_review.py tests/cli/test_stack_installer.py tests/scripts/test_make_stack_manifest.py tests/core/test_project_root.py tests/services/test_web_search_tool.py tests/services/test_web_fetch_tool.py tests/services/test_tool_permissions.py tests/services/test_desktop_skill_tools.py tests/desktop/test_bootstrap_wizard_ui.py tests/desktop/test_release_signing.py tests/npm/test_npm_cli_package.py --tb=short -q
- name: CLI e2e (mock provider, honest-failure contract)
env:
AGENTHUB_CLI_E2E: '1'
run: pytest tests/cli/test_cli_e2e.py --tb=short -q
- name: Headless exec smoke (exit code must be 1, verifier veto)
working-directory: ${{ runner.temp }}
run: |
mkdir -p agenthub-cli-smoke && cd agenthub-cli-smoke
OBJ="创建 hello.py 并打印 hello world。"$'\n'"VERIFY: python hello.py"
set +e
python -m app.cli exec "$OBJ" --json --mission-timeout 240 > result.json
code=$?
set -e
echo "exit code: $code"
cat result.json
test "$code" -eq 1
grep -q '"status": "FAILED"' result.json


# ═══════════════════════════════════════════════════════════════════
# Docker — build verification (key images only, parallel)
Expand Down
21 changes: 21 additions & 0 deletions .github/workflows/cli-jsonl-smoke.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
name: CLI JSONL smoke

on:
workflow_dispatch:
pull_request:
paths:
- "app/cli/**"
- "app/services/model_port.py"
- "tests/cli/**"

jobs:
cli-jsonl:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-python@v5
with:
python-version: "3.12"
- run: python -m pip install -r requirements-dev.txt
- run: python -m pytest tests/cli -q
- run: python scripts/cli_provider_smoke.py
42 changes: 42 additions & 0 deletions .github/workflows/cli-package-install.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
name: CLI GitHub Release install and rollback

on:
workflow_dispatch:
inputs:
version:
description: Target cli-v* GitHub Release version
required: true
type: string
previous_version:
description: Previous cli-v* version used for rollback
required: true
type: string

jobs:
windows-install-upgrade-rollback:
runs-on: windows-latest
permissions:
contents: read
steps:
- uses: actions/checkout@v4
- uses: actions/setup-python@v5
with:
python-version: '3.12'
- name: Verify checksummed GitHub Release lifecycle
shell: pwsh
env:
AGENTHUB_RELEASE_ID: github-${{ github.run_id }}
AGENTHUB_PRODUCTION_EVIDENCE_DIR: ${{ github.workspace }}\artifacts\production\github-${{ github.run_id }}
run: >-
python scripts/verify_github_release.py
--target "${{ inputs.version }}"
--previous "${{ inputs.previous_version }}"
--output "${{ runner.temp }}\github-release.json"
- uses: actions/upload-artifact@v4
if: always()
with:
name: cli-github-release-${{ inputs.version }}
path: |
artifacts/production/**/*.json
${{ runner.temp }}/github-release.json
if-no-files-found: ignore
57 changes: 57 additions & 0 deletions .github/workflows/cli-production-evidence.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,57 @@
name: CLI production evidence gates

on:
workflow_dispatch:
schedule:
- cron: "41 3 * * 1"

jobs:
benchmark:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-python@v5
with:
python-version: "3.12"
- run: python -m pip install -r requirements.txt
- name: Benchmark evidence
env:
AGENTHUB_RELEASE_ID: evidence-${{ github.run_id }}
AGENTHUB_PRODUCTION_EVIDENCE_DIR: ${{ github.workspace }}/artifacts/production/evidence-${{ github.run_id }}
AGENTHUB_BENCHMARK_EVIDENCE_OUTPUT: ${{ runner.temp }}/benchmark.json
run: python scripts/cli_benchmark.py --task-file benchmarks/cli_tasks.json --task-id conversation-basic --check-thresholds
- uses: actions/upload-artifact@v4
if: always()
with:
name: cli-benchmark-evidence
path: |
artifacts/production/**/*.json
${{ runner.temp }}/benchmark.json
if-no-files-found: ignore

sse-recovery:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-python@v5
with:
python-version: "3.12"
- run: python -m pip install -r requirements.txt
- name: SSE disconnect and cursor recovery evidence
env:
AGENTHUB_CLI_BASE_URL: ${{ vars.AGENTHUB_SSE_BASE_URL }}
AGENTHUB_CLI_AUTH_TOKEN: ${{ secrets.AGENTHUB_CLI_AUTH_TOKEN }}
AGENTHUB_CLI_SSE_MISSION_ID: ${{ vars.AGENTHUB_SSE_MISSION_ID }}
AGENTHUB_CLI_SSE_FAULT_INJECTED: "1"
AGENTHUB_RELEASE_ID: evidence-${{ github.run_id }}
AGENTHUB_PRODUCTION_EVIDENCE_DIR: ${{ github.workspace }}/artifacts/production/evidence-${{ github.run_id }}
AGENTHUB_SSE_EVIDENCE_OUTPUT: ${{ runner.temp }}/sse-recovery.json
run: python scripts/cli_sse_recovery_evidence.py
- uses: actions/upload-artifact@v4
if: always()
with:
name: cli-sse-recovery-evidence
path: |
artifacts/production/**/*.json
${{ runner.temp }}/sse-recovery.json
if-no-files-found: ignore
Loading
Loading