Remove the dead `make docs-cli` target (scripts/regen_cli_docs.py
never existed); point desktop/portable/README.md at the real
octop-desktop.yml workflow and desktop/portable/.gitignore; drop the
non-existent api/jwt_tokens.py from AGENTS.md.
Closes#789
dashboard/tsconfig.json is a solution-style config (files: [] plus
references), so plain `tsc --noEmit` type-checks zero files and always
passes. Use `tsc -b` so tsconfig.app.json / tsconfig.node.json are
actually checked - the same invocation `npm run build` uses.
Update all documented mentions (Makefile help + target, AGENTS.md,
README, README_CN, docs/agent-backend-file-io.md).
Hide check-for-updates entry points unless the user has the update module
permission, show compact offloads under .octop/conversation_history, and
add pytest-xdist / test-fast with isolated HOME for parallel runs.
Co-authored-by: Cursor <cursoragent@cursor.com>
testmon decides which files changed via `git ls-files --stage -m` (worktree
vs index). At pre-commit time the changes are already staged, so that
comparison is empty and testmon silently deselects every test — a false
green that makes the fast gate worthless.
Patch testmon's file detection to use `git diff HEAD` (staged + unstaged)
via conftest.py and tests/support/testmon_staged_changes.py, so the gate
actually fires on a commit's changes. No-op when testmon is absent.
Co-Authored-By: Claude <noreply@anthropic.com>
Add install-method upgrade guide and dual-panel version upgrade UI; tidy
HTTPS preflight/status layout. Run format-all (Ruff + Prettier) first in
make all and pre-commit, re-staging formatted files before the build.
Fix CustomProviderModal TypeScript errors that failed the Release workflow,
bump harness-agent to >=0.9.16, and include provider modal / README / hooks updates.
Co-authored-by: Cursor <cursoragent@cursor.com>
* 优化
* 修复memory提取模型无法fallback导致提取失效的问题
* feat(memory): let each agent pin a model for memory extraction
Extraction always followed the agent's chat model, so a user running an
expensive model paid that rate for every distillation pass and had no way
to point extraction at something cheaper.
- memory.aux_model ('provider/model', empty/absent = AUTO) is settable per
agent via the extract-config API and a picker in memory settings
- the manager maps the one chosen ref onto both harness extraction tiers
(memory_aux_light_model / memory_aux_heavy_model)
- refs are validated on write; a ref that goes stale later (provider
deleted, model disabled) is dropped with a warning at build time so
extraction falls back to the default model instead of failing at
call time
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
* feat(memory): surface extract_run entries in the journal
harness-memory now journals every extraction pass, including empty and
failed ones. The journal filter offered 'capture'/'extract' actions that
the backend no longer emits, so a user whose extraction ran but found
nothing saw an empty list and no evidence it had run at all.
Replaces those two filter options with 'extract_run' and renders each row
as a plain-language summary built from the entry's structured stats —
including a specific message when extraction is skipped for want of a
configured model.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
* chore(deps): sync uv.lock with the editable harness-agent override
pyproject already pins orcakit-harness-agent to the local ../harness-agent
checkout; the lockfile still resolved it from PyPI at 0.9.10.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
* chore: drop the local sibling-checkout adaptation from pyproject/README
Realigns pyproject.toml, README.md, and uv.lock with origin/main. The
[tool.uv.sources] block pointing the four harness packages at sibling
directories is a local dev convenience and should not ship on the branch;
harness deps resolve from PyPI again.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
* chore: drop the unrelated pixel-art intro deck from the repo
octop-pixel-ppt/index.html landed in 8843d78 alongside the memory
dashboard work it has nothing to do with. It is a standalone
presentation page, referenced from nowhere in the codebase.
Recoverable from history if needed:
git show 8843d78:octop-pixel-ppt/index.html
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
* chore: add online-deps dev workflow and relax eslint unused-var rule
Add make targets (install-online / test-online / run-online / clean-online)
that build a dedicated .venv-online where Octop is installed editable while
the harness-* siblings resolve from PyPI (--no-sources), for testing local
source against published components. Ignore .venv-online in git.
Also honour the `_`-prefix convention in @typescript-eslint/no-unused-vars
(argsIgnorePattern / varsIgnorePattern / ignoreRestSiblings) so intentionally
discarded destructures and placeholder callback args stop erroring.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
* test: make provider preset assertions robust to upstream model-id drift
tencent-token-plan model ids gained a release-date suffix in published
harness-agent (deepseek-v4-flash-202605) and the Kimi minor version moved,
breaking exact-match assertions. Assert by model-family prefix instead so
the test tracks upstream provider data without churning on every release.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
* feat(memory-dashboard): 7-day growth, entity summary viewer, rename 对话素材→对话记忆
- Overview: switch the growth chart to the last 7 days and lay the growth
and memory-type charts out 50/50 (was 1.6fr : 1fr).
- MemoryTree: add a "查看摘要" action on each topic row that opens a drawer
rendering the entity's long-form summary page (summary_markdown via
LazyMarkdown), with headline, version/updated meta, a 待刷新 badge, and
loading / failed / not-yet-generated states. Type the getEntity page
payload (EntityPage / EntityDetail) instead of unknown.
- Rename the raw-events concept from 对话素材 to 对话记忆 across the overview
cards, pipeline stage, hints and settings copy (EN labels → "Conversation
memory") so users read it as the first stage of memory rather than loose
data. Tests and shared test copy updated accordingly.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
* build(deps): require harness-agent>=0.9.11, add harness-memory>=0.9.2
Bump orcakit-harness-agent to >=0.9.11 and declare harness-memory>=0.9.2 as
a direct dependency — Octop imports harness_memory directly (proactive
picker, memory_portable, memory_client) but only ever pulled it transitively.
Regenerate uv.lock against PyPI (no editable local sources): harness-memory
0.8.5 -> 0.9.2, orcakit-harness-agent 0.9.7 -> 0.9.11, harness-gateway 0.8.5,
harness-browser 0.7.4.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
---------
Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>
* fix: tolerate connector kind drift when resolving chat popup logos
getConnectorLogo now falls back to a normalized kind (lower-case,\nunderscore/hyphen unified) so connector instances created before the\ncatalog kind was finalized still resolve their logo in the chat picker\ninstead of showing a placeholder.
Co-authored-by: jubaoliang <jubaoliang@tencent.com>
* chore: release 0.9.8
* fix: align dashboard tool labels with backend; bump harness-agent to 0.9.8
---------
Co-authored-by: jubaoliang <jubaoliang@tencent.com>