jfox-cli 1.6.0__tar.gz → 1.7.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {jfox_cli-1.6.0 → jfox_cli-1.7.0}/.claude-plugin/marketplace.json +2 -2
- {jfox_cli-1.6.0 → jfox_cli-1.7.0}/CHANGELOG.md +24 -0
- {jfox_cli-1.6.0 → jfox_cli-1.7.0}/CLAUDE.md +6 -2
- {jfox_cli-1.6.0 → jfox_cli-1.7.0}/PKG-INFO +1 -1
- jfox_cli-1.7.0/docs/nightly-test.md +160 -0
- jfox_cli-1.7.0/docs/superpowers/plans/2026-07-28-bookshelf-flat-bundle.md +832 -0
- jfox_cli-1.7.0/docs/superpowers/plans/2026-07-28-nightly-fulltest.md +715 -0
- jfox_cli-1.7.0/docs/superpowers/plans/2026-08-07-session-to-permanent-cc-kimi.md +198 -0
- jfox_cli-1.7.0/docs/superpowers/specs/2026-07-28-bookshelf-flat-bundle-design.md +103 -0
- jfox_cli-1.7.0/docs/superpowers/specs/2026-07-28-nightly-fulltest-design.md +136 -0
- jfox_cli-1.7.0/docs/superpowers/specs/2026-08-07-session-to-permanent-cc-kimi-design.md +102 -0
- {jfox_cli-1.6.0 → jfox_cli-1.7.0}/jfox/__init__.py +1 -1
- {jfox_cli-1.6.0 → jfox_cli-1.7.0}/jfox/bookshelf/cli.py +7 -0
- {jfox_cli-1.6.0 → jfox_cli-1.7.0}/jfox/bookshelf/store.py +120 -31
- {jfox_cli-1.6.0 → jfox_cli-1.7.0}/packages/cc-plugin/.claude-plugin/plugin.json +1 -1
- {jfox_cli-1.6.0 → jfox_cli-1.7.0}/packages/cc-plugin/skills/bookshelf/SKILL.md +1 -1
- jfox_cli-1.7.0/packages/cc-plugin/skills/session-to-permanent/SKILL.md +240 -0
- {jfox_cli-1.6.0 → jfox_cli-1.7.0}/packages/cc-plugin/skills/using-jfox/SKILL.md +5 -3
- {jfox_cli-1.6.0 → jfox_cli-1.7.0}/packages/kimi-plugin/README.md +5 -2
- {jfox_cli-1.6.0 → jfox_cli-1.7.0}/packages/kimi-plugin/kimi.plugin.json +1 -1
- jfox_cli-1.7.0/packages/kimi-plugin/skills/jfox-session-to-permanent/SKILL.md +240 -0
- {jfox_cli-1.6.0 → jfox_cli-1.7.0}/packages/kimi-plugin/skills/using-jfox/SKILL.md +2 -0
- {jfox_cli-1.6.0 → jfox_cli-1.7.0}/pyproject.toml +1 -1
- jfox_cli-1.7.0/scripts/nightly_test.sh +206 -0
- jfox_cli-1.7.0/scripts/nightly_test_helpers.py +98 -0
- {jfox_cli-1.6.0 → jfox_cli-1.7.0}/skills-recommend/README.md +15 -2
- jfox_cli-1.7.0/skills-recommend/pi/jfox-bookshelf/SKILL.md +49 -0
- {jfox_cli-1.6.0 → jfox_cli-1.7.0}/skills-recommend/pi/jfox-ci/SKILL.md +36 -8
- {jfox_cli-1.6.0 → jfox_cli-1.7.0}/skills-recommend/pi/jfox-common/SKILL.md +2 -0
- jfox_cli-1.7.0/skills-recommend/pi/jfox-overview/SKILL.md +86 -0
- jfox_cli-1.7.0/skills-recommend/pi/jfox-promote/SKILL.md +235 -0
- {jfox_cli-1.6.0 → jfox_cli-1.7.0}/skills-recommend/pi/jfox-release/SKILL.md +15 -4
- jfox_cli-1.7.0/skills-recommend/pi/jfox-release-all/SKILL.md +116 -0
- jfox_cli-1.7.0/skills-recommend/pi/jfox-release-cc-plugin/SKILL.md +108 -0
- jfox_cli-1.7.0/skills-recommend/pi/jfox-release-kimi-plugin/SKILL.md +108 -0
- {jfox_cli-1.6.0 → jfox_cli-1.7.0}/skills-recommend/pi/jfox-session-summary/SKILL.md +3 -1
- jfox_cli-1.7.0/skills-recommend/pi/jfox-session-to-permanent/SKILL.md +243 -0
- {jfox_cli-1.6.0 → jfox_cli-1.7.0}/tests/unit/bookshelf/conftest.py +18 -1
- {jfox_cli-1.6.0 → jfox_cli-1.7.0}/tests/unit/bookshelf/test_cli.py +32 -0
- {jfox_cli-1.6.0 → jfox_cli-1.7.0}/tests/unit/bookshelf/test_store.py +263 -6
- jfox_cli-1.7.0/tests/unit/test_nightly_test_helpers.py +139 -0
- {jfox_cli-1.6.0 → jfox_cli-1.7.0}/uv.lock +1 -1
- {jfox_cli-1.6.0 → jfox_cli-1.7.0}/.claude/skills/ci/SKILL.md +0 -0
- {jfox_cli-1.6.0 → jfox_cli-1.7.0}/.claude/skills/release/SKILL.md +0 -0
- {jfox_cli-1.6.0 → jfox_cli-1.7.0}/.claude/skills/release/release_helper.py +0 -0
- {jfox_cli-1.6.0 → jfox_cli-1.7.0}/.claude/skills/release-all/SKILL.md +0 -0
- {jfox_cli-1.6.0 → jfox_cli-1.7.0}/.claude/skills/release-all/release_all_helper.py +0 -0
- {jfox_cli-1.6.0 → jfox_cli-1.7.0}/.claude/skills/release-cc-plugin/SKILL.md +0 -0
- {jfox_cli-1.6.0 → jfox_cli-1.7.0}/.claude/skills/release-cc-plugin/release_cc_plugin_helper.py +0 -0
- {jfox_cli-1.6.0 → jfox_cli-1.7.0}/.claude/skills/release-kimi-plugin/SKILL.md +0 -0
- {jfox_cli-1.6.0 → jfox_cli-1.7.0}/.claude/skills/release-kimi-plugin/release_kimi_plugin_helper.py +0 -0
- {jfox_cli-1.6.0 → jfox_cli-1.7.0}/.githooks/pre-push +0 -0
- {jfox_cli-1.6.0 → jfox_cli-1.7.0}/.github/ISSUE_TEMPLATE/bug_report.yml +0 -0
- {jfox_cli-1.6.0 → jfox_cli-1.7.0}/.github/ISSUE_TEMPLATE/config.yml +0 -0
- {jfox_cli-1.6.0 → jfox_cli-1.7.0}/.github/ISSUE_TEMPLATE/docs_improvement.yml +0 -0
- {jfox_cli-1.6.0 → jfox_cli-1.7.0}/.github/ISSUE_TEMPLATE/feature_request.yml +0 -0
- {jfox_cli-1.6.0 → jfox_cli-1.7.0}/.github/PULL_REQUEST_TEMPLATE.md +0 -0
- {jfox_cli-1.6.0 → jfox_cli-1.7.0}/.github/workflows/integration-test.yml +0 -0
- {jfox_cli-1.6.0 → jfox_cli-1.7.0}/.github/workflows/publish.yml +0 -0
- {jfox_cli-1.6.0 → jfox_cli-1.7.0}/.gitignore +0 -0
- {jfox_cli-1.6.0 → jfox_cli-1.7.0}/.python-version +0 -0
- {jfox_cli-1.6.0 → jfox_cli-1.7.0}/AGENTS.md +0 -0
- {jfox_cli-1.6.0 → jfox_cli-1.7.0}/DEVELOPMENT_PLAN.md +0 -0
- {jfox_cli-1.6.0 → jfox_cli-1.7.0}/README.md +0 -0
- {jfox_cli-1.6.0 → jfox_cli-1.7.0}/SESSION.md +0 -0
- {jfox_cli-1.6.0 → jfox_cli-1.7.0}/SESSION_SUMMARY.md +0 -0
- {jfox_cli-1.6.0 → jfox_cli-1.7.0}/docs/claude-code-plugin-guide.md +0 -0
- {jfox_cli-1.6.0 → jfox_cli-1.7.0}/docs/installation.md +0 -0
- {jfox_cli-1.6.0 → jfox_cli-1.7.0}/docs/superpowers/plans/2026-04-11-bulk-import-bm25-fix.md +0 -0
- {jfox_cli-1.6.0 → jfox_cli-1.7.0}/docs/superpowers/plans/2026-04-11-edit-command.md +0 -0
- {jfox_cli-1.6.0 → jfox_cli-1.7.0}/docs/superpowers/plans/2026-04-11-unify-format-option.md +0 -0
- {jfox_cli-1.6.0 → jfox_cli-1.7.0}/docs/superpowers/plans/2026-04-12-ci-coverage-optimization.md +0 -0
- {jfox_cli-1.6.0 → jfox_cli-1.7.0}/docs/superpowers/plans/2026-04-12-edit-content-file.md +0 -0
- {jfox_cli-1.6.0 → jfox_cli-1.7.0}/docs/superpowers/plans/2026-04-12-fix-index-rebuild-clear.md +0 -0
- {jfox_cli-1.6.0 → jfox_cli-1.7.0}/docs/superpowers/plans/2026-04-12-fix-index-verify-id-mismatch.md +0 -0
- {jfox_cli-1.6.0 → jfox_cli-1.7.0}/docs/superpowers/plans/2026-04-12-fix-jfox-health-skill-kb-param.md +0 -0
- {jfox_cli-1.6.0 → jfox_cli-1.7.0}/docs/superpowers/plans/2026-04-12-index-kb-param.md +0 -0
- {jfox_cli-1.6.0 → jfox_cli-1.7.0}/docs/superpowers/plans/2026-04-12-lazy-import-perf.md +0 -0
- {jfox_cli-1.6.0 → jfox_cli-1.7.0}/docs/superpowers/plans/2026-04-12-skill-redesign.md +0 -0
- {jfox_cli-1.6.0 → jfox_cli-1.7.0}/docs/superpowers/plans/2026-04-13-add-content-file.md +0 -0
- {jfox_cli-1.6.0 → jfox_cli-1.7.0}/docs/superpowers/plans/2026-04-13-bulk-import-vectorstore-init.md +0 -0
- {jfox_cli-1.6.0 → jfox_cli-1.7.0}/docs/superpowers/plans/2026-04-13-ingest-log-command.md +0 -0
- {jfox_cli-1.6.0 → jfox_cli-1.7.0}/docs/superpowers/plans/2026-04-13-ingest-skill-sync.md +0 -0
- {jfox_cli-1.6.0 → jfox_cli-1.7.0}/docs/superpowers/plans/2026-04-13-suppress-third-party-logging.md +0 -0
- {jfox_cli-1.6.0 → jfox_cli-1.7.0}/docs/superpowers/plans/2026-04-13-sync-skills-with-cli.md +0 -0
- {jfox_cli-1.6.0 → jfox_cli-1.7.0}/docs/superpowers/plans/2026-04-14-sync-docs-daemon-show.md +0 -0
- {jfox_cli-1.6.0 → jfox_cli-1.7.0}/docs/superpowers/plans/2026-04-15-gpu-embedding.md +0 -0
- {jfox_cli-1.6.0 → jfox_cli-1.7.0}/docs/superpowers/plans/2026-04-15-make-daemon-deps-required.md +0 -0
- {jfox_cli-1.6.0 → jfox_cli-1.7.0}/docs/superpowers/plans/2026-04-15-session-summary-confirmation.md +0 -0
- {jfox_cli-1.6.0 → jfox_cli-1.7.0}/docs/superpowers/plans/2026-04-16-fix-windows-daemon-console-window.md +0 -0
- {jfox_cli-1.6.0 → jfox_cli-1.7.0}/docs/superpowers/plans/2026-04-18-daemon-timeout-and-index-rebuild.md +0 -0
- {jfox_cli-1.6.0 → jfox_cli-1.7.0}/docs/superpowers/plans/2026-04-22-release-skill.md +0 -0
- {jfox_cli-1.6.0 → jfox_cli-1.7.0}/docs/superpowers/plans/2026-04-26-fix-daemon-deprecation-warnings.md +0 -0
- {jfox_cli-1.6.0 → jfox_cli-1.7.0}/docs/superpowers/plans/2026-04-27-intranet-model-download.md +0 -0
- {jfox_cli-1.6.0 → jfox_cli-1.7.0}/docs/superpowers/plans/2026-04-28-tag-filtering.md +0 -0
- {jfox_cli-1.6.0 → jfox_cli-1.7.0}/docs/superpowers/plans/2026-04-29-daemon-stop-fix.md +0 -0
- {jfox_cli-1.6.0 → jfox_cli-1.7.0}/docs/superpowers/plans/2026-05-03-jfox-check.md +0 -0
- {jfox_cli-1.6.0 → jfox_cli-1.7.0}/docs/superpowers/plans/2026-05-03-list-notes-skip-summary.md +0 -0
- {jfox_cli-1.6.0 → jfox_cli-1.7.0}/docs/superpowers/plans/2026-05-03-log-level-fix.md +0 -0
- {jfox_cli-1.6.0 → jfox_cli-1.7.0}/docs/superpowers/plans/2026-05-04-list-notes-index.md +0 -0
- {jfox_cli-1.6.0 → jfox_cli-1.7.0}/docs/superpowers/plans/2026-05-06-atomic-write.md +0 -0
- {jfox_cli-1.6.0 → jfox_cli-1.7.0}/docs/superpowers/plans/2026-05-09-session-note-type.md +0 -0
- {jfox_cli-1.6.0 → jfox_cli-1.7.0}/docs/superpowers/plans/2026-05-10-jfox-plugin.md +0 -0
- {jfox_cli-1.6.0 → jfox_cli-1.7.0}/docs/superpowers/plans/2026-05-19-fix-last-used-never.md +0 -0
- {jfox_cli-1.6.0 → jfox_cli-1.7.0}/docs/superpowers/plans/2026-05-20-modelscope-migration.md +0 -0
- {jfox_cli-1.6.0 → jfox_cli-1.7.0}/docs/superpowers/plans/2026-06-02-todo-note-type.md +0 -0
- {jfox_cli-1.6.0 → jfox_cli-1.7.0}/docs/superpowers/plans/2026-06-16-kimi-code-auto-summary.md +0 -0
- {jfox_cli-1.6.0 → jfox_cli-1.7.0}/docs/superpowers/plans/2026-06-17-index-rebuild-backlinks.md +0 -0
- {jfox_cli-1.6.0 → jfox_cli-1.7.0}/docs/superpowers/plans/2026-06-17-using-jfox-skill.md +0 -0
- {jfox_cli-1.6.0 → jfox_cli-1.7.0}/docs/superpowers/plans/2026-06-18-self-update-command.md +0 -0
- {jfox_cli-1.6.0 → jfox_cli-1.7.0}/docs/superpowers/plans/2026-06-21-fragment-capture.md +0 -0
- {jfox_cli-1.6.0 → jfox_cli-1.7.0}/docs/superpowers/plans/2026-06-21-gem-synthesis.md +0 -0
- {jfox_cli-1.6.0 → jfox_cli-1.7.0}/docs/superpowers/plans/2026-06-25-gem-synth-throttle-ledger.md +0 -0
- {jfox_cli-1.6.0 → jfox_cli-1.7.0}/docs/superpowers/plans/2026-07-08-auto-summary-schedule-window.md +0 -0
- {jfox_cli-1.6.0 → jfox_cli-1.7.0}/docs/superpowers/plans/2026-07-08-candidate-promote.md +0 -0
- {jfox_cli-1.6.0 → jfox_cli-1.7.0}/docs/superpowers/plans/2026-07-12-gem-synth-dedup.md +0 -0
- {jfox_cli-1.6.0 → jfox_cli-1.7.0}/docs/superpowers/plans/2026-07-12-release-cc-plugin-skill.md +0 -0
- {jfox_cli-1.6.0 → jfox_cli-1.7.0}/docs/superpowers/plans/2026-07-12-session-summary-streamline.md +0 -0
- {jfox_cli-1.6.0 → jfox_cli-1.7.0}/docs/superpowers/plans/2026-07-12-show-json.md +0 -0
- {jfox_cli-1.6.0 → jfox_cli-1.7.0}/docs/superpowers/plans/2026-07-17-fix-candidate-dual-h1.md +0 -0
- {jfox_cli-1.6.0 → jfox_cli-1.7.0}/docs/superpowers/plans/2026-07-18-dedup-lifecycle-decouple.md +0 -0
- {jfox_cli-1.6.0 → jfox_cli-1.7.0}/docs/superpowers/plans/2026-07-19-promote-skill-three-modes.md +0 -0
- {jfox_cli-1.6.0 → jfox_cli-1.7.0}/docs/superpowers/plans/2026-07-25-bookshelf.md +0 -0
- {jfox_cli-1.6.0 → jfox_cli-1.7.0}/docs/superpowers/plans/2026-07-25-gem-synth-dedup-incremental-merge.md +0 -0
- {jfox_cli-1.6.0 → jfox_cli-1.7.0}/docs/superpowers/plans/2026-07-26-kb-backup-restore.md +0 -0
- {jfox_cli-1.6.0 → jfox_cli-1.7.0}/docs/superpowers/plans/2026-07-26-promote-skill-clear-reports-rewrite.md +0 -0
- {jfox_cli-1.6.0 → jfox_cli-1.7.0}/docs/superpowers/plans/2026-07-27-release-all.md +0 -0
- {jfox_cli-1.6.0 → jfox_cli-1.7.0}/docs/superpowers/specs/2026-04-03-bugfixes-design.md +0 -0
- {jfox_cli-1.6.0 → jfox_cli-1.7.0}/docs/superpowers/specs/2026-04-12-skill-redesign-design.md +0 -0
- {jfox_cli-1.6.0 → jfox_cli-1.7.0}/docs/superpowers/specs/2026-04-13-pr-auto-code-review-design.md +0 -0
- {jfox_cli-1.6.0 → jfox_cli-1.7.0}/docs/superpowers/specs/2026-04-14-show-command-design.md +0 -0
- {jfox_cli-1.6.0 → jfox_cli-1.7.0}/docs/superpowers/specs/2026-04-15-gpu-embedding-design.md +0 -0
- {jfox_cli-1.6.0 → jfox_cli-1.7.0}/docs/superpowers/specs/2026-04-15-session-summary-confirmation-design.md +0 -0
- {jfox_cli-1.6.0 → jfox_cli-1.7.0}/docs/superpowers/specs/2026-04-21-release-skill-design.md +0 -0
- {jfox_cli-1.6.0 → jfox_cli-1.7.0}/docs/superpowers/specs/2026-04-26-fix-daemon-deprecation-warnings-design.md +0 -0
- {jfox_cli-1.6.0 → jfox_cli-1.7.0}/docs/superpowers/specs/2026-04-27-intranet-model-download-design.md +0 -0
- {jfox_cli-1.6.0 → jfox_cli-1.7.0}/docs/superpowers/specs/2026-04-28-tag-filtering-design.md +0 -0
- {jfox_cli-1.6.0 → jfox_cli-1.7.0}/docs/superpowers/specs/2026-04-29-daemon-stop-fix-design.md +0 -0
- {jfox_cli-1.6.0 → jfox_cli-1.7.0}/docs/superpowers/specs/2026-04-30-jfox-kb-env-var-design.md +0 -0
- {jfox_cli-1.6.0 → jfox_cli-1.7.0}/docs/superpowers/specs/2026-05-03-jfox-check-design.md +0 -0
- {jfox_cli-1.6.0 → jfox_cli-1.7.0}/docs/superpowers/specs/2026-05-03-list-notes-skip-summary-design.md +0 -0
- {jfox_cli-1.6.0 → jfox_cli-1.7.0}/docs/superpowers/specs/2026-05-03-log-level-fix-design.md +0 -0
- {jfox_cli-1.6.0 → jfox_cli-1.7.0}/docs/superpowers/specs/2026-05-04-list-notes-index-design.md +0 -0
- {jfox_cli-1.6.0 → jfox_cli-1.7.0}/docs/superpowers/specs/2026-05-06-atomic-write-design.md +0 -0
- {jfox_cli-1.6.0 → jfox_cli-1.7.0}/docs/superpowers/specs/2026-05-09-jfox-plugin-design.md +0 -0
- {jfox_cli-1.6.0 → jfox_cli-1.7.0}/docs/superpowers/specs/2026-05-09-session-note-type-design.md +0 -0
- {jfox_cli-1.6.0 → jfox_cli-1.7.0}/docs/superpowers/specs/2026-05-20-modelscope-migration-design.md +0 -0
- {jfox_cli-1.6.0 → jfox_cli-1.7.0}/docs/superpowers/specs/2026-06-02-todo-note-type-design.md +0 -0
- {jfox_cli-1.6.0 → jfox_cli-1.7.0}/docs/superpowers/specs/2026-06-16-kimi-code-auto-summary-design.md +0 -0
- {jfox_cli-1.6.0 → jfox_cli-1.7.0}/docs/superpowers/specs/2026-06-17-index-rebuild-backlinks-design.md +0 -0
- {jfox_cli-1.6.0 → jfox_cli-1.7.0}/docs/superpowers/specs/2026-06-17-using-jfox-skill-design.md +0 -0
- {jfox_cli-1.6.0 → jfox_cli-1.7.0}/docs/superpowers/specs/2026-06-18-archive-soft-delete-design.md +0 -0
- {jfox_cli-1.6.0 → jfox_cli-1.7.0}/docs/superpowers/specs/2026-06-18-self-update-command-design.md +0 -0
- {jfox_cli-1.6.0 → jfox_cli-1.7.0}/docs/superpowers/specs/2026-06-21-fragment-capture-design.md +0 -0
- {jfox_cli-1.6.0 → jfox_cli-1.7.0}/docs/superpowers/specs/2026-06-21-gem-synthesis-design.md +0 -0
- {jfox_cli-1.6.0 → jfox_cli-1.7.0}/docs/superpowers/specs/2026-06-25-gem-synth-throttle-ledger-design.md +0 -0
- {jfox_cli-1.6.0 → jfox_cli-1.7.0}/docs/superpowers/specs/2026-07-08-candidate-promote-design.md +0 -0
- {jfox_cli-1.6.0 → jfox_cli-1.7.0}/docs/superpowers/specs/2026-07-12-gem-synth-dedup-design.md +0 -0
- {jfox_cli-1.6.0 → jfox_cli-1.7.0}/docs/superpowers/specs/2026-07-12-release-cc-plugin-skill-design.md +0 -0
- {jfox_cli-1.6.0 → jfox_cli-1.7.0}/docs/superpowers/specs/2026-07-12-session-summary-streamline-design.md +0 -0
- {jfox_cli-1.6.0 → jfox_cli-1.7.0}/docs/superpowers/specs/2026-07-12-show-json-design.md +0 -0
- {jfox_cli-1.6.0 → jfox_cli-1.7.0}/docs/superpowers/specs/2026-07-18-dedup-lifecycle-decouple-design.md +0 -0
- {jfox_cli-1.6.0 → jfox_cli-1.7.0}/docs/superpowers/specs/2026-07-19-promote-skill-three-modes-design.md +0 -0
- {jfox_cli-1.6.0 → jfox_cli-1.7.0}/docs/superpowers/specs/2026-07-25-bookshelf-design.md +0 -0
- {jfox_cli-1.6.0 → jfox_cli-1.7.0}/docs/superpowers/specs/2026-07-25-gem-synth-dedup-incremental-merge-design.md +0 -0
- {jfox_cli-1.6.0 → jfox_cli-1.7.0}/docs/superpowers/specs/2026-07-26-kb-backup-restore-design.md +0 -0
- {jfox_cli-1.6.0 → jfox_cli-1.7.0}/docs/superpowers/specs/2026-07-26-promote-skill-clear-reports-rewrite-design.md +0 -0
- {jfox_cli-1.6.0 → jfox_cli-1.7.0}/docs/superpowers/specs/2026-07-27-release-all-orchestration-design.md +0 -0
- {jfox_cli-1.6.0 → jfox_cli-1.7.0}/docs/troubleshooting.md +0 -0
- {jfox_cli-1.6.0 → jfox_cli-1.7.0}/jessica-jones-static-cable.md +0 -0
- {jfox_cli-1.6.0 → jfox_cli-1.7.0}/jfox/__main__.py +0 -0
- {jfox_cli-1.6.0 → jfox_cli-1.7.0}/jfox/auto_summary/__init__.py +0 -0
- {jfox_cli-1.6.0 → jfox_cli-1.7.0}/jfox/auto_summary/cli.py +0 -0
- {jfox_cli-1.6.0 → jfox_cli-1.7.0}/jfox/auto_summary/extractor.py +0 -0
- {jfox_cli-1.6.0 → jfox_cli-1.7.0}/jfox/auto_summary/kimi_source.py +0 -0
- {jfox_cli-1.6.0 → jfox_cli-1.7.0}/jfox/auto_summary/ledger.py +0 -0
- {jfox_cli-1.6.0 → jfox_cli-1.7.0}/jfox/auto_summary/loop.py +0 -0
- {jfox_cli-1.6.0 → jfox_cli-1.7.0}/jfox/auto_summary/runner.py +0 -0
- {jfox_cli-1.6.0 → jfox_cli-1.7.0}/jfox/auto_summary/scanner.py +0 -0
- {jfox_cli-1.6.0 → jfox_cli-1.7.0}/jfox/auto_summary/schedule.py +0 -0
- {jfox_cli-1.6.0 → jfox_cli-1.7.0}/jfox/auto_summary/sources.py +0 -0
- {jfox_cli-1.6.0 → jfox_cli-1.7.0}/jfox/backup/__init__.py +0 -0
- {jfox_cli-1.6.0 → jfox_cli-1.7.0}/jfox/backup/cli.py +0 -0
- {jfox_cli-1.6.0 → jfox_cli-1.7.0}/jfox/backup/loop.py +0 -0
- {jfox_cli-1.6.0 → jfox_cli-1.7.0}/jfox/backup/manager.py +0 -0
- {jfox_cli-1.6.0 → jfox_cli-1.7.0}/jfox/backup/schedule.py +0 -0
- {jfox_cli-1.6.0 → jfox_cli-1.7.0}/jfox/bm25_index.py +0 -0
- {jfox_cli-1.6.0 → jfox_cli-1.7.0}/jfox/bookshelf/__init__.py +0 -0
- {jfox_cli-1.6.0 → jfox_cli-1.7.0}/jfox/bookshelf/meta.py +0 -0
- {jfox_cli-1.6.0 → jfox_cli-1.7.0}/jfox/cli.py +0 -0
- {jfox_cli-1.6.0 → jfox_cli-1.7.0}/jfox/config.py +0 -0
- {jfox_cli-1.6.0 → jfox_cli-1.7.0}/jfox/daemon/__init__.py +0 -0
- {jfox_cli-1.6.0 → jfox_cli-1.7.0}/jfox/daemon/__main__.py +0 -0
- {jfox_cli-1.6.0 → jfox_cli-1.7.0}/jfox/daemon/client.py +0 -0
- {jfox_cli-1.6.0 → jfox_cli-1.7.0}/jfox/daemon/process.py +0 -0
- {jfox_cli-1.6.0 → jfox_cli-1.7.0}/jfox/daemon/server.py +0 -0
- {jfox_cli-1.6.0 → jfox_cli-1.7.0}/jfox/embedding_backend.py +0 -0
- {jfox_cli-1.6.0 → jfox_cli-1.7.0}/jfox/formatters.py +0 -0
- {jfox_cli-1.6.0 → jfox_cli-1.7.0}/jfox/fragment/__init__.py +0 -0
- {jfox_cli-1.6.0 → jfox_cli-1.7.0}/jfox/fragment/cli.py +0 -0
- {jfox_cli-1.6.0 → jfox_cli-1.7.0}/jfox/fragment/detector.py +0 -0
- {jfox_cli-1.6.0 → jfox_cli-1.7.0}/jfox/fragment/internal_sources.py +0 -0
- {jfox_cli-1.6.0 → jfox_cli-1.7.0}/jfox/fragment/service.py +0 -0
- {jfox_cli-1.6.0 → jfox_cli-1.7.0}/jfox/fragment/store.py +0 -0
- {jfox_cli-1.6.0 → jfox_cli-1.7.0}/jfox/gem_synth/__init__.py +0 -0
- {jfox_cli-1.6.0 → jfox_cli-1.7.0}/jfox/gem_synth/anchors.py +0 -0
- {jfox_cli-1.6.0 → jfox_cli-1.7.0}/jfox/gem_synth/cli.py +0 -0
- {jfox_cli-1.6.0 → jfox_cli-1.7.0}/jfox/gem_synth/dedup.py +0 -0
- {jfox_cli-1.6.0 → jfox_cli-1.7.0}/jfox/gem_synth/grounding.py +0 -0
- {jfox_cli-1.6.0 → jfox_cli-1.7.0}/jfox/gem_synth/lifecycle.py +0 -0
- {jfox_cli-1.6.0 → jfox_cli-1.7.0}/jfox/gem_synth/llm.py +0 -0
- {jfox_cli-1.6.0 → jfox_cli-1.7.0}/jfox/gem_synth/loop.py +0 -0
- {jfox_cli-1.6.0 → jfox_cli-1.7.0}/jfox/gem_synth/paths.py +0 -0
- {jfox_cli-1.6.0 → jfox_cli-1.7.0}/jfox/gem_synth/store.py +0 -0
- {jfox_cli-1.6.0 → jfox_cli-1.7.0}/jfox/gem_synth/synthesizer.py +0 -0
- {jfox_cli-1.6.0 → jfox_cli-1.7.0}/jfox/gem_synth/transcript.py +0 -0
- {jfox_cli-1.6.0 → jfox_cli-1.7.0}/jfox/git_extractor.py +0 -0
- {jfox_cli-1.6.0 → jfox_cli-1.7.0}/jfox/global_config.py +0 -0
- {jfox_cli-1.6.0 → jfox_cli-1.7.0}/jfox/graph.py +0 -0
- {jfox_cli-1.6.0 → jfox_cli-1.7.0}/jfox/indexer.py +0 -0
- {jfox_cli-1.6.0 → jfox_cli-1.7.0}/jfox/kb_manager.py +0 -0
- {jfox_cli-1.6.0 → jfox_cli-1.7.0}/jfox/model_downloader.py +0 -0
- {jfox_cli-1.6.0 → jfox_cli-1.7.0}/jfox/models.py +0 -0
- {jfox_cli-1.6.0 → jfox_cli-1.7.0}/jfox/note.py +0 -0
- {jfox_cli-1.6.0 → jfox_cli-1.7.0}/jfox/note_index.py +0 -0
- {jfox_cli-1.6.0 → jfox_cli-1.7.0}/jfox/performance.py +0 -0
- {jfox_cli-1.6.0 → jfox_cli-1.7.0}/jfox/search_engine.py +0 -0
- {jfox_cli-1.6.0 → jfox_cli-1.7.0}/jfox/template.py +0 -0
- {jfox_cli-1.6.0 → jfox_cli-1.7.0}/jfox/template_cli.py +0 -0
- {jfox_cli-1.6.0 → jfox_cli-1.7.0}/jfox/utils.py +0 -0
- {jfox_cli-1.6.0 → jfox_cli-1.7.0}/jfox/vector_store.py +0 -0
- {jfox_cli-1.6.0 → jfox_cli-1.7.0}/package.json +0 -0
- {jfox_cli-1.6.0 → jfox_cli-1.7.0}/packages/cc-plugin/hooks/fragment-capture.sh +0 -0
- {jfox_cli-1.6.0 → jfox_cli-1.7.0}/packages/cc-plugin/hooks/hooks.json +0 -0
- {jfox_cli-1.6.0 → jfox_cli-1.7.0}/packages/cc-plugin/skills/ingest/SKILL.md +0 -0
- {jfox_cli-1.6.0 → jfox_cli-1.7.0}/packages/cc-plugin/skills/manage/SKILL.md +0 -0
- {jfox_cli-1.6.0 → jfox_cli-1.7.0}/packages/cc-plugin/skills/organize/SKILL.md +0 -0
- {jfox_cli-1.6.0 → jfox_cli-1.7.0}/packages/cc-plugin/skills/promote/SKILL.md +0 -0
- {jfox_cli-1.6.0 → jfox_cli-1.7.0}/packages/cc-plugin/skills/search/SKILL.md +0 -0
- {jfox_cli-1.6.0 → jfox_cli-1.7.0}/packages/cc-plugin/skills/session-summary/SKILL.md +0 -0
- {jfox_cli-1.6.0 → jfox_cli-1.7.0}/packages/kimi-plugin/skills/jfox-admin/SKILL.md +0 -0
- {jfox_cli-1.6.0 → jfox_cli-1.7.0}/packages/kimi-plugin/skills/jfox-auto-summary/SKILL.md +0 -0
- {jfox_cli-1.6.0 → jfox_cli-1.7.0}/packages/kimi-plugin/skills/jfox-ingest/SKILL.md +0 -0
- {jfox_cli-1.6.0 → jfox_cli-1.7.0}/packages/kimi-plugin/skills/jfox-manage/SKILL.md +0 -0
- {jfox_cli-1.6.0 → jfox_cli-1.7.0}/packages/kimi-plugin/skills/jfox-organize/SKILL.md +0 -0
- {jfox_cli-1.6.0 → jfox_cli-1.7.0}/packages/kimi-plugin/skills/jfox-promote/SKILL.md +0 -0
- {jfox_cli-1.6.0 → jfox_cli-1.7.0}/packages/kimi-plugin/skills/jfox-search/SKILL.md +0 -0
- {jfox_cli-1.6.0 → jfox_cli-1.7.0}/packages/kimi-plugin/skills/jfox-session-summary/SKILL.md +0 -0
- {jfox_cli-1.6.0 → jfox_cli-1.7.0}/packages/kimi-plugin/skills/jfox-template/SKILL.md +0 -0
- {jfox_cli-1.6.0 → jfox_cli-1.7.0}/pytest.ini +0 -0
- {jfox_cli-1.6.0 → jfox_cli-1.7.0}/run_full_test.ps1 +0 -0
- {jfox_cli-1.6.0 → jfox_cli-1.7.0}/scripts/download-model-intranet.sh +0 -0
- {jfox_cli-1.6.0 → jfox_cli-1.7.0}/skills-recommend/kimi-cli/jfox-common/SKILL.md +0 -0
- {jfox_cli-1.6.0 → jfox_cli-1.7.0}/skills-recommend/kimi-cli/jfox-ingest/SKILL.md +0 -0
- {jfox_cli-1.6.0 → jfox_cli-1.7.0}/skills-recommend/kimi-cli/jfox-organize/SKILL.md +0 -0
- {jfox_cli-1.6.0 → jfox_cli-1.7.0}/skills-recommend/kimi-cli/jfox-search/SKILL.md +0 -0
- {jfox_cli-1.6.0 → jfox_cli-1.7.0}/skills-recommend/kimi-cli/jfox-session-summary/SKILL.md +0 -0
- {jfox_cli-1.6.0 → jfox_cli-1.7.0}/skills-recommend/pi/jfox-ingest/SKILL.md +0 -0
- {jfox_cli-1.6.0 → jfox_cli-1.7.0}/skills-recommend/pi/jfox-organize/SKILL.md +0 -0
- {jfox_cli-1.6.0 → jfox_cli-1.7.0}/skills-recommend/pi/jfox-search/SKILL.md +0 -0
- {jfox_cli-1.6.0 → jfox_cli-1.7.0}/tests/COVERAGE_PLAN.md +0 -0
- {jfox_cli-1.6.0 → jfox_cli-1.7.0}/tests/MIGRATION.md +0 -0
- {jfox_cli-1.6.0 → jfox_cli-1.7.0}/tests/TESTS.md +0 -0
- {jfox_cli-1.6.0 → jfox_cli-1.7.0}/tests/conftest.py +0 -0
- {jfox_cli-1.6.0 → jfox_cli-1.7.0}/tests/integration/__init__.py +0 -0
- {jfox_cli-1.6.0 → jfox_cli-1.7.0}/tests/integration/test_auto_summary_kimi.py +0 -0
- {jfox_cli-1.6.0 → jfox_cli-1.7.0}/tests/integration/test_backlinks.py +0 -0
- {jfox_cli-1.6.0 → jfox_cli-1.7.0}/tests/integration/test_candidate_promote_flow.py +0 -0
- {jfox_cli-1.6.0 → jfox_cli-1.7.0}/tests/integration/test_fragment_capture_flow.py +0 -0
- {jfox_cli-1.6.0 → jfox_cli-1.7.0}/tests/integration/test_gem_synth_flow.py +0 -0
- {jfox_cli-1.6.0 → jfox_cli-1.7.0}/tests/integration/test_index_rebuild_backlinks.py +0 -0
- {jfox_cli-1.6.0 → jfox_cli-1.7.0}/tests/integration/test_model_download.py +0 -0
- {jfox_cli-1.6.0 → jfox_cli-1.7.0}/tests/integration/test_tag_filter_cli.py +0 -0
- {jfox_cli-1.6.0 → jfox_cli-1.7.0}/tests/performance/__init__.py +0 -0
- {jfox_cli-1.6.0 → jfox_cli-1.7.0}/tests/performance/test_performance.py +0 -0
- {jfox_cli-1.6.0 → jfox_cli-1.7.0}/tests/test_advanced_features.py +0 -0
- {jfox_cli-1.6.0 → jfox_cli-1.7.0}/tests/test_cli_format.py +0 -0
- {jfox_cli-1.6.0 → jfox_cli-1.7.0}/tests/test_config_set_unit.py +0 -0
- {jfox_cli-1.6.0 → jfox_cli-1.7.0}/tests/test_config_unit.py +0 -0
- {jfox_cli-1.6.0 → jfox_cli-1.7.0}/tests/test_core_workflow.py +0 -0
- {jfox_cli-1.6.0 → jfox_cli-1.7.0}/tests/test_embedding_device.py +0 -0
- {jfox_cli-1.6.0 → jfox_cli-1.7.0}/tests/test_hybrid_search.py +0 -0
- {jfox_cli-1.6.0 → jfox_cli-1.7.0}/tests/test_integration.py +0 -0
- {jfox_cli-1.6.0 → jfox_cli-1.7.0}/tests/test_kb_current.py +0 -0
- {jfox_cli-1.6.0 → jfox_cli-1.7.0}/tests/test_suggest_links.py +0 -0
- {jfox_cli-1.6.0 → jfox_cli-1.7.0}/tests/unit/__init__.py +0 -0
- {jfox_cli-1.6.0 → jfox_cli-1.7.0}/tests/unit/bookshelf/__init__.py +0 -0
- {jfox_cli-1.6.0 → jfox_cli-1.7.0}/tests/unit/bookshelf/test_meta.py +0 -0
- {jfox_cli-1.6.0 → jfox_cli-1.7.0}/tests/unit/conftest.py +0 -0
- {jfox_cli-1.6.0 → jfox_cli-1.7.0}/tests/unit/test_add_backfill_links.py +0 -0
- {jfox_cli-1.6.0 → jfox_cli-1.7.0}/tests/unit/test_archive.py +0 -0
- {jfox_cli-1.6.0 → jfox_cli-1.7.0}/tests/unit/test_atomic_write.py +0 -0
- {jfox_cli-1.6.0 → jfox_cli-1.7.0}/tests/unit/test_auto_summary_cli.py +0 -0
- {jfox_cli-1.6.0 → jfox_cli-1.7.0}/tests/unit/test_auto_summary_config_sources.py +0 -0
- {jfox_cli-1.6.0 → jfox_cli-1.7.0}/tests/unit/test_auto_summary_defaults.py +0 -0
- {jfox_cli-1.6.0 → jfox_cli-1.7.0}/tests/unit/test_auto_summary_extractor.py +0 -0
- {jfox_cli-1.6.0 → jfox_cli-1.7.0}/tests/unit/test_auto_summary_ledger.py +0 -0
- {jfox_cli-1.6.0 → jfox_cli-1.7.0}/tests/unit/test_auto_summary_loop.py +0 -0
- {jfox_cli-1.6.0 → jfox_cli-1.7.0}/tests/unit/test_auto_summary_runner.py +0 -0
- {jfox_cli-1.6.0 → jfox_cli-1.7.0}/tests/unit/test_auto_summary_scanner.py +0 -0
- {jfox_cli-1.6.0 → jfox_cli-1.7.0}/tests/unit/test_auto_summary_schedule.py +0 -0
- {jfox_cli-1.6.0 → jfox_cli-1.7.0}/tests/unit/test_auto_summary_status.py +0 -0
- {jfox_cli-1.6.0 → jfox_cli-1.7.0}/tests/unit/test_backup.py +0 -0
- {jfox_cli-1.6.0 → jfox_cli-1.7.0}/tests/unit/test_bm25_batch.py +0 -0
- {jfox_cli-1.6.0 → jfox_cli-1.7.0}/tests/unit/test_check.py +0 -0
- {jfox_cli-1.6.0 → jfox_cli-1.7.0}/tests/unit/test_content_file.py +0 -0
- {jfox_cli-1.6.0 → jfox_cli-1.7.0}/tests/unit/test_daemon_cli.py +0 -0
- {jfox_cli-1.6.0 → jfox_cli-1.7.0}/tests/unit/test_daemon_process.py +0 -0
- {jfox_cli-1.6.0 → jfox_cli-1.7.0}/tests/unit/test_edit.py +0 -0
- {jfox_cli-1.6.0 → jfox_cli-1.7.0}/tests/unit/test_embedding_local_load.py +0 -0
- {jfox_cli-1.6.0 → jfox_cli-1.7.0}/tests/unit/test_format_unify.py +0 -0
- {jfox_cli-1.6.0 → jfox_cli-1.7.0}/tests/unit/test_formatters.py +0 -0
- {jfox_cli-1.6.0 → jfox_cli-1.7.0}/tests/unit/test_fragment_cli.py +0 -0
- {jfox_cli-1.6.0 → jfox_cli-1.7.0}/tests/unit/test_fragment_config.py +0 -0
- {jfox_cli-1.6.0 → jfox_cli-1.7.0}/tests/unit/test_fragment_detector.py +0 -0
- {jfox_cli-1.6.0 → jfox_cli-1.7.0}/tests/unit/test_fragment_hook.py +0 -0
- {jfox_cli-1.6.0 → jfox_cli-1.7.0}/tests/unit/test_fragment_internal_sources.py +0 -0
- {jfox_cli-1.6.0 → jfox_cli-1.7.0}/tests/unit/test_fragment_service.py +0 -0
- {jfox_cli-1.6.0 → jfox_cli-1.7.0}/tests/unit/test_fragment_store.py +0 -0
- {jfox_cli-1.6.0 → jfox_cli-1.7.0}/tests/unit/test_gem_synth_anchors.py +0 -0
- {jfox_cli-1.6.0 → jfox_cli-1.7.0}/tests/unit/test_gem_synth_backfill.py +0 -0
- {jfox_cli-1.6.0 → jfox_cli-1.7.0}/tests/unit/test_gem_synth_cli.py +0 -0
- {jfox_cli-1.6.0 → jfox_cli-1.7.0}/tests/unit/test_gem_synth_config.py +0 -0
- {jfox_cli-1.6.0 → jfox_cli-1.7.0}/tests/unit/test_gem_synth_config_dedup.py +0 -0
- {jfox_cli-1.6.0 → jfox_cli-1.7.0}/tests/unit/test_gem_synth_dedup.py +0 -0
- {jfox_cli-1.6.0 → jfox_cli-1.7.0}/tests/unit/test_gem_synth_grounding.py +0 -0
- {jfox_cli-1.6.0 → jfox_cli-1.7.0}/tests/unit/test_gem_synth_lifecycle.py +0 -0
- {jfox_cli-1.6.0 → jfox_cli-1.7.0}/tests/unit/test_gem_synth_llm.py +0 -0
- {jfox_cli-1.6.0 → jfox_cli-1.7.0}/tests/unit/test_gem_synth_loop.py +0 -0
- {jfox_cli-1.6.0 → jfox_cli-1.7.0}/tests/unit/test_gem_synth_store.py +0 -0
- {jfox_cli-1.6.0 → jfox_cli-1.7.0}/tests/unit/test_gem_synth_store_duplicate.py +0 -0
- {jfox_cli-1.6.0 → jfox_cli-1.7.0}/tests/unit/test_gem_synth_synthesizer.py +0 -0
- {jfox_cli-1.6.0 → jfox_cli-1.7.0}/tests/unit/test_gem_synth_transcript.py +0 -0
- {jfox_cli-1.6.0 → jfox_cli-1.7.0}/tests/unit/test_git_extractor.py +0 -0
- {jfox_cli-1.6.0 → jfox_cli-1.7.0}/tests/unit/test_global_config.py +0 -0
- {jfox_cli-1.6.0 → jfox_cli-1.7.0}/tests/unit/test_index_kb_param.py +0 -0
- {jfox_cli-1.6.0 → jfox_cli-1.7.0}/tests/unit/test_indexer_clear_before_rebuild.py +0 -0
- {jfox_cli-1.6.0 → jfox_cli-1.7.0}/tests/unit/test_indexer_verify.py +0 -0
- {jfox_cli-1.6.0 → jfox_cli-1.7.0}/tests/unit/test_kb_manager.py +0 -0
- {jfox_cli-1.6.0 → jfox_cli-1.7.0}/tests/unit/test_kimi_extractor.py +0 -0
- {jfox_cli-1.6.0 → jfox_cli-1.7.0}/tests/unit/test_kimi_plugin_skills.py +0 -0
- {jfox_cli-1.6.0 → jfox_cli-1.7.0}/tests/unit/test_kimi_scanner.py +0 -0
- {jfox_cli-1.6.0 → jfox_cli-1.7.0}/tests/unit/test_lazy_import.py +0 -0
- {jfox_cli-1.6.0 → jfox_cli-1.7.0}/tests/unit/test_ledger_migration.py +0 -0
- {jfox_cli-1.6.0 → jfox_cli-1.7.0}/tests/unit/test_list_notes_skip.py +0 -0
- {jfox_cli-1.6.0 → jfox_cli-1.7.0}/tests/unit/test_logging_config.py +0 -0
- {jfox_cli-1.6.0 → jfox_cli-1.7.0}/tests/unit/test_model_downloader.py +0 -0
- {jfox_cli-1.6.0 → jfox_cli-1.7.0}/tests/unit/test_note_candidate_fields.py +0 -0
- {jfox_cli-1.6.0 → jfox_cli-1.7.0}/tests/unit/test_note_candidate_filename.py +0 -0
- {jfox_cli-1.6.0 → jfox_cli-1.7.0}/tests/unit/test_note_dedup_sync.py +0 -0
- {jfox_cli-1.6.0 → jfox_cli-1.7.0}/tests/unit/test_note_index.py +0 -0
- {jfox_cli-1.6.0 → jfox_cli-1.7.0}/tests/unit/test_note_lifecycle_hooks.py +0 -0
- {jfox_cli-1.6.0 → jfox_cli-1.7.0}/tests/unit/test_note_promote.py +0 -0
- {jfox_cli-1.6.0 → jfox_cli-1.7.0}/tests/unit/test_note_type_candidate.py +0 -0
- {jfox_cli-1.6.0 → jfox_cli-1.7.0}/tests/unit/test_rebuild_backlinks_impl.py +0 -0
- {jfox_cli-1.6.0 → jfox_cli-1.7.0}/tests/unit/test_release_all_helper.py +0 -0
- {jfox_cli-1.6.0 → jfox_cli-1.7.0}/tests/unit/test_release_cc_plugin_helper.py +0 -0
- {jfox_cli-1.6.0 → jfox_cli-1.7.0}/tests/unit/test_release_helper.py +0 -0
- {jfox_cli-1.6.0 → jfox_cli-1.7.0}/tests/unit/test_release_helper_verify.py +0 -0
- {jfox_cli-1.6.0 → jfox_cli-1.7.0}/tests/unit/test_release_kimi_plugin_helper.py +0 -0
- {jfox_cli-1.6.0 → jfox_cli-1.7.0}/tests/unit/test_runner_multi_source.py +0 -0
- {jfox_cli-1.6.0 → jfox_cli-1.7.0}/tests/unit/test_scanner_list.py +0 -0
- {jfox_cli-1.6.0 → jfox_cli-1.7.0}/tests/unit/test_session_file_source.py +0 -0
- {jfox_cli-1.6.0 → jfox_cli-1.7.0}/tests/unit/test_session_note.py +0 -0
- {jfox_cli-1.6.0 → jfox_cli-1.7.0}/tests/unit/test_session_source.py +0 -0
- {jfox_cli-1.6.0 → jfox_cli-1.7.0}/tests/unit/test_show.py +0 -0
- {jfox_cli-1.6.0 → jfox_cli-1.7.0}/tests/unit/test_synthesizer_dedup.py +0 -0
- {jfox_cli-1.6.0 → jfox_cli-1.7.0}/tests/unit/test_system_prompt_sections.py +0 -0
- {jfox_cli-1.6.0 → jfox_cli-1.7.0}/tests/unit/test_tag_filter.py +0 -0
- {jfox_cli-1.6.0 → jfox_cli-1.7.0}/tests/unit/test_template.py +0 -0
- {jfox_cli-1.6.0 → jfox_cli-1.7.0}/tests/unit/test_template_cli.py +0 -0
- {jfox_cli-1.6.0 → jfox_cli-1.7.0}/tests/unit/test_update.py +0 -0
- {jfox_cli-1.6.0 → jfox_cli-1.7.0}/tests/unit/test_use_kb_env_var.py +0 -0
- {jfox_cli-1.6.0 → jfox_cli-1.7.0}/tests/unit/test_using_jfox_skill.py +0 -0
- {jfox_cli-1.6.0 → jfox_cli-1.7.0}/tests/unit/test_vector_store_clear.py +0 -0
- {jfox_cli-1.6.0 → jfox_cli-1.7.0}/tests/utils/__init__.py +0 -0
- {jfox_cli-1.6.0 → jfox_cli-1.7.0}/tests/utils/assertions.py +0 -0
- {jfox_cli-1.6.0 → jfox_cli-1.7.0}/tests/utils/jfox_cli.py +0 -0
- {jfox_cli-1.6.0 → jfox_cli-1.7.0}/tests/utils/note_generator.py +0 -0
- {jfox_cli-1.6.0 → jfox_cli-1.7.0}/tests/utils/temp_kb.py +0 -0
|
@@ -7,14 +7,14 @@
|
|
|
7
7
|
},
|
|
8
8
|
"metadata": {
|
|
9
9
|
"description": "JFox Zettelkasten 知识管理工具的 Claude Code 集成",
|
|
10
|
-
"version": "0.7.
|
|
10
|
+
"version": "0.7.2"
|
|
11
11
|
},
|
|
12
12
|
"plugins": [
|
|
13
13
|
{
|
|
14
14
|
"name": "jfox",
|
|
15
15
|
"source": "./packages/cc-plugin",
|
|
16
16
|
"description": "JFox 知识管理 CLI 的 Claude Code 集成——搜索、写入工作流(导入/整理/会话总结)与知识库管理",
|
|
17
|
-
"version": "0.7.
|
|
17
|
+
"version": "0.7.2",
|
|
18
18
|
"author": { "name": "zhuxixi" },
|
|
19
19
|
"keywords": ["zettelkasten", "knowledge-management"],
|
|
20
20
|
"category": "workflow"
|
|
@@ -2,6 +2,30 @@
|
|
|
2
2
|
|
|
3
3
|
All notable changes to jfox-cli will be documented in this file.
|
|
4
4
|
|
|
5
|
+
## [1.7.0] - 2026-08-07
|
|
6
|
+
|
|
7
|
+
### Features
|
|
8
|
+
- **skills**: add session-to-permanent skill for CC + Kimi (#317) (#368)
|
|
9
|
+
- **skill**: session-to-permanent 审阅确认改用 question 选择题 (#317) (#367)
|
|
10
|
+
- **pi**: add jfox-session-to-permanent skill (#366)
|
|
11
|
+
- **skills**: align pi skills with Claude Code version (#364)
|
|
12
|
+
- **nightly-test**: #263 本机定时全量测试 cronjob + 失败自动提 issue (#361)
|
|
13
|
+
|
|
14
|
+
### Changes
|
|
15
|
+
- **claude.md**: 记 rich Console JSON soft_wrap Windows gotcha(#336) (#345)
|
|
16
|
+
- **claude.md**: add daemon-scheduled loop convention (backup #339) (#343)
|
|
17
|
+
- **claude.md**: cc-plugin Current 版本指针 0.6.0 → 0.7.0 同步 (#351)
|
|
18
|
+
- **claude.md**: 补 Local nightly full-test(#263/#361)CI 文档段 (#362)
|
|
19
|
+
|
|
20
|
+
[1.7.0]: https://github.com/zhuxixi/jfox/compare/v1.6.1...v1.7.0
|
|
21
|
+
|
|
22
|
+
## [1.6.1] - 2026-07-29
|
|
23
|
+
|
|
24
|
+
### Fixes
|
|
25
|
+
- **bookshelf**: #349 add 对齐 scan2book 扁平 bundle 契约 (#350)
|
|
26
|
+
|
|
27
|
+
[1.6.1]: https://github.com/zhuxixi/jfox/compare/v1.6.0...v1.6.1
|
|
28
|
+
|
|
5
29
|
## [1.6.0] - 2026-07-28
|
|
6
30
|
|
|
7
31
|
### Features
|
|
@@ -105,6 +105,7 @@ Notes are Markdown files with YAML frontmatter stored under `~/.zettelkasten/<kb
|
|
|
105
105
|
- **Comments/docs**: Chinese (中文)
|
|
106
106
|
- **Adding a CLI command**: Add `@app.command()` in `cli.py`, implement `_xxx_impl()` helper, add `--kb` and `--format json` support
|
|
107
107
|
- **Adding a search mode**: Add to `SearchMode` enum in `search_engine.py`, implement in `HybridSearchEngine.search()`, update CLI `--mode` help text
|
|
108
|
+
- **Adding a daemon-scheduled loop**: 镜像 `auto_summary/`(与 gem_synth/backup 同构)——`loop.py`(`_tick_once` + async `X_loop(stop_event)`)+ `daemon/server.py` lifespan 内 `_maybe_start/stop_X` 接线 + `GlobalConfigManager` opt-in(每 tick `reload()` 即时生效);任何写类 loop 的 `_tick_once` 开头须 check `BackupCoordinator.is_running()` 跳过写,避免备份期间 ChromaDB 并发写
|
|
108
109
|
- **Modifying data models**: Update `Note` class in `models.py`, update `to_markdown()`/`from_markdown()`, consider backward compat
|
|
109
110
|
- **Viewing note content**: `jfox show <id_or_title>` 复用 `find_note_id_by_title_or_id` 定位笔记,默认输出完整 Markdown(`--json` / `--format json` 输出结构化字段)
|
|
110
111
|
- **笔记生命周期事件**: `note.py` 只广播 `post_delete`/`post_archive`/`post_promote`/`post_reject`(`register_lifecycle_hook` + `_dispatch`),绝不 import 特性层;特性层订阅做副作用(如 `gem_synth/lifecycle.py` 同步 dedup 表)。`register` 在 `jfox/__init__.py` 接线,任何 `import jfox.*` 即订阅就位,库式调用方零成本
|
|
@@ -133,6 +134,8 @@ Four jobs in `.github/workflows/integration-test.yml`:
|
|
|
133
134
|
|
|
134
135
|
**Release** workflow in `.github/workflows/publish.yml`: publishes to PyPI on GitHub release publication.
|
|
135
136
|
|
|
137
|
+
**Local nightly full-test**(#263/#361,非 GitHub Action):`scripts/nightly_test.sh` 是本机 crontab 定时任务(crontab 行装本机、不进仓库),每周二 09:00 跑 CI `test-fast` 跳过的全量 pytest(performance/bulk/slow/embedding)——成功静默,失败按签名去重复用带 `nightly-test-failure` label 的 issue。前置:今日 #338 备份须成功(读 `~/.jfox-backup/state.json` 的 `last_ok`,否则 `SKIP: 今日备份未确认` 退出)。纯逻辑在 `scripts/nightly_test_helpers.py`(单测 `tests/unit/test_nightly_test_helpers.py`);`--dry-run` 用人造失败走 issue 流程、不跑真实 pytest。
|
|
138
|
+
|
|
136
139
|
## Release Tooling
|
|
137
140
|
|
|
138
141
|
三条独立发版轨道,各有单组件 skill + 一个编排 skill(`.claude/skills/`):
|
|
@@ -159,9 +162,9 @@ Four jobs in `.github/workflows/integration-test.yml`:
|
|
|
159
162
|
JFox ships as a Claude Code plugin. Two-tier structure:
|
|
160
163
|
- `.claude-plugin/marketplace.json` — top-level marketplace registry (version, description)
|
|
161
164
|
- `packages/cc-plugin/.claude-plugin/plugin.json` — plugin source metadata
|
|
162
|
-
- `packages/cc-plugin/skills/` —
|
|
165
|
+
- `packages/cc-plugin/skills/` — 9 skills: `search`, `ingest`, `manage`, `organize`, `promote`, `session-summary`, `session-to-permanent`, `using-jfox`, `bookshelf`
|
|
163
166
|
|
|
164
|
-
**Plugin versioning**: bump version in **three** places together — `packages/cc-plugin/.claude-plugin/plugin.json` (`version`) and both version fields in `.claude-plugin/marketplace.json` (`metadata.version` + `plugins[0].version`). 漏改任一处都会导致 marketplace 与 plugin 版本不一致。Current: 0.
|
|
167
|
+
**Plugin versioning**: bump version in **three** places together — `packages/cc-plugin/.claude-plugin/plugin.json` (`version`) and both version fields in `.claude-plugin/marketplace.json` (`metadata.version` + `plugins[0].version`). 漏改任一处都会导致 marketplace 与 plugin 版本不一致。Current: 0.7.0.
|
|
165
168
|
**Skill rename history**: `kb` → `manage` (v0.2.0) — "manage" is the canonical KB lifecycle + CRUD skill.
|
|
166
169
|
|
|
167
170
|
## Branch Rules
|
|
@@ -173,3 +176,4 @@ JFox ships as a Claude Code plugin. Two-tier structure:
|
|
|
173
176
|
- `pytest.ini` `addopts` includes `-v`, so `pytest tests/` already runs verbose — adding `-v` manually is redundant
|
|
174
177
|
- Test directory migration mostly complete; root-level `test_config_unit.py` and `test_config_set_unit.py` remain but test different things from `tests/unit/`
|
|
175
178
|
- 生命周期订阅模块的重依赖(numpy 等)必须 lazy import 进回调体,不能顶层 import——`jfox/__init__.py` 每次启动都 import 订阅模块,顶层会令 `--version`/`search` 等不相关命令多付 ~70-100ms eager 加载。参考 `gem_synth/lifecycle.py`
|
|
179
|
+
- `rich` Console 输出机器解析的 JSON 时须 `soft_wrap=True`:默认按 80 列硬折行,会把长字符串(如 Windows 绝对路径)在 JSON 字符串内部断行,`json.loads` 报 Invalid control character(Ubuntu 路径短不触发,只在 Windows CI 挂,#336)。参考 `bookshelf/cli.py` `_emit_json`
|
|
@@ -0,0 +1,160 @@
|
|
|
1
|
+
# 夜间全量测试(nightly-test)
|
|
2
|
+
|
|
3
|
+
> GitHub issue: zhuxixi/jfox#263 | 前置依赖:#338 KB 备份恢复
|
|
4
|
+
> 设计文档:[`docs/superpowers/specs/2026-07-28-nightly-fulltest-design.md`](superpowers/specs/2026-07-28-nightly-fulltest-design.md)
|
|
5
|
+
|
|
6
|
+
## 职责
|
|
7
|
+
|
|
8
|
+
一句话:**每周二 09:00 由系统 crontab 触发 `scripts/nightly_test.sh`,跑全量 pytest;失败自动开/复用带 `nightly-test-failure` label 的 GitHub issue,成功静默。**
|
|
9
|
+
|
|
10
|
+
CI 只跑 `test-fast`(unit + 部分 integration),不覆盖 performance / bulk / slow / embedding 全量;本脚本在本机补这块回归保障。
|
|
11
|
+
|
|
12
|
+
## 前置依赖(#338 备份)
|
|
13
|
+
|
|
14
|
+
脚本开头会读 `~/.jfox-backup/state.json`,要求**今天**的备份已成功(`last_ok == true` 且 `last_run` 日期 == 今天)。否则脚本打 `SKIP: 今日备份未确认` 并 `exit 0`(不提 issue——issue 是测试失败专用)。
|
|
15
|
+
|
|
16
|
+
因此必须先启用 #338 备份守护并让它在 **每天 08:00** 跑(早于本脚本 09:00 一小时):
|
|
17
|
+
|
|
18
|
+
```bash
|
|
19
|
+
jfox backup enable # 启用备份 daemon
|
|
20
|
+
jfox backup status # 确认 last_ok=true、last_run 是今天
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
设计依据:[#338 backup `loop.py`](superpowers/specs/2026-07-26-kb-backup-restore-design.md) 的 `state.json` schema = `{last_run, last_ok, last_archive}`。
|
|
24
|
+
|
|
25
|
+
## 安装 crontab(本机操作,不进 PR)
|
|
26
|
+
|
|
27
|
+
crontab 行装在**运行机器的本机**,不进仓库。把下面这段在本机执行一次:
|
|
28
|
+
|
|
29
|
+
```bash
|
|
30
|
+
# 编辑 crontab,追加每周二 09:00 触发
|
|
31
|
+
crontab -l | { cat; echo "0 9 * * 2 /home/elling/git-repo/github/jfox/scripts/nightly_test.sh >> /home/elling/.jfox-nightly-test/cron.log 2>&1"; } | crontab -
|
|
32
|
+
|
|
33
|
+
# 确认
|
|
34
|
+
crontab -l | grep nightly_test
|
|
35
|
+
```
|
|
36
|
+
|
|
37
|
+
要点:
|
|
38
|
+
|
|
39
|
+
- `0 9 * * 2` = 每周二 09:00(系统本地时区)。09:00 选在每日 08:00 的 #338 备份之后。
|
|
40
|
+
- `>> cron.log 2>&1` 把脚本 stdout/stderr 拼到日志文件,失败 issue 里也会写完整日志路径,但 crontab 投递的 stdout 留在这以便排查脚本自身故障。
|
|
41
|
+
- 脚本内部已 `export PATH="$HOME/.local/bin:$HOME/.cargo/bin:/usr/local/bin:/usr/bin:/bin"`,crontab 的极简 PATH 不会影响 `gh`/`uv`/`git` 定位。
|
|
42
|
+
|
|
43
|
+
## label(无需手工建)
|
|
44
|
+
|
|
45
|
+
`nightly-test-failure` label 由脚本**首次运行时自动 `gh label create --force`**,无需手工预建。颜色 `D73B3B`(红色),描述「夜间全量测试(#263)自动失败」。
|
|
46
|
+
|
|
47
|
+
## dry-run(验证 issue 流程)
|
|
48
|
+
|
|
49
|
+
`--dry-run` 跳过真实 pytest,用人造失败输出(2 条 `FAILED ...`)走完 `report_failure` 全流程:算签名 → 查 open issue → 决定 create / comment → 调 `gh issue`。
|
|
50
|
+
|
|
51
|
+
```bash
|
|
52
|
+
./scripts/nightly_test.sh --dry-run
|
|
53
|
+
```
|
|
54
|
+
|
|
55
|
+
验收步骤(参见下方验收清单):
|
|
56
|
+
|
|
57
|
+
1. **首次**跑 `--dry-run` → 日志出现 `新开 issue(签名 ...)`, stdout 打印新 issue URL。
|
|
58
|
+
2. **二次**跑 `--dry-run`(签名未变) → 日志出现 `复用 issue #<num>(同签名 ...)追加评论`, stdout 打印评论 URL。
|
|
59
|
+
3. 验完**务必关掉/删除**测试 issue(避免污染仓库):
|
|
60
|
+
|
|
61
|
+
```bash
|
|
62
|
+
gh issue close <num> --repo zhuxixi/jfox
|
|
63
|
+
gh issue delete <num> --repo zhuxixi/jfox --yes # 可选,彻底清理
|
|
64
|
+
```
|
|
65
|
+
|
|
66
|
+
> 注意:`--dry-run` **不**验证「换假 HOME + 缓存指回真实路径」这一段(见下节),因为假 HOME 与 uv 缓存重指向只在真实 `uv sync` / pytest 子壳里生效。dry-run 在进入子壳前就 return 了。要验证缓存复用,需跑一次真实成功(见验收清单)。
|
|
67
|
+
|
|
68
|
+
## 隔离与缓存复用(how it isolates)
|
|
69
|
+
|
|
70
|
+
脚本核心隔离机制是**换假 HOME** + 在假 HOME 下把缓存/全局配置指回真实路径,确保:
|
|
71
|
+
|
|
72
|
+
1. 不污染真实配置:`~/.zk_config.json`、`~/.jfox_daemon.pid/log`、`~/.jfox-backup/` 全部重定向到一次性沙箱目录(`$LOG_DIR/home-XXXXXX`),跑完 `rm -rf`。
|
|
73
|
+
2. 不重下大文件:假 HOME 下空缓存会让 `uv` 重下 Python 工具链 + 包缓存、让 HF 重下 `bge-m3` ~2GB。脚本在 `run_tests` 子壳里显式把三类缓存指回真实路径:
|
|
74
|
+
|
|
75
|
+
| 环境变量 | 指向 | 作用 |
|
|
76
|
+
|---|---|---|
|
|
77
|
+
| `UV_CACHE_DIR` | `$REAL_HOME/.cache/uv` | uv 包缓存,避免每次 cron 重下依赖 |
|
|
78
|
+
| `UV_PYTHON_INSTALL_DIR` | `$REAL_HOME/.local/share/uv/python` | uv 管理的 Python 工具链 |
|
|
79
|
+
| `HF_HOME` | `$REAL_HOME/.cache/huggingface` | bge-m3 embedding 模型缓存(~2GB) |
|
|
80
|
+
| `GIT_CONFIG_GLOBAL` | `$REAL_HOME/.gitconfig` | 防御性:让沙箱内任何 git 调用仍读到真实 git 配置(文件不存在也无害) |
|
|
81
|
+
|
|
82
|
+
3. 真实 HF 缓存缺失时会打 `WARN: HF cache ... 不存在,测试可能重下 bge-m3`,不再静默跳过——运维能从 `cron.log` 看到这个信号。
|
|
83
|
+
|
|
84
|
+
## 故障排查
|
|
85
|
+
|
|
86
|
+
### 现象:脚本一直 `SKIP: 今日备份未确认`
|
|
87
|
+
|
|
88
|
+
- **原因**:#338 备份未在今天 08:00 成功跑过(`state.json` 的 `last_ok != true` 或 `last_run[:10] != 今天`)。
|
|
89
|
+
- **处置**:
|
|
90
|
+
```bash
|
|
91
|
+
jfox backup status # 看 last_run / last_ok
|
|
92
|
+
jfox backup run # 手工补跑一次今天的备份
|
|
93
|
+
cat ~/.jfox-backup/state.json # 确认 last_ok=true 且 last_run 是今天
|
|
94
|
+
```
|
|
95
|
+
- 若从未启用备份:`jfox backup enable`。
|
|
96
|
+
|
|
97
|
+
### 现象:`WARN: gh 缺失` / `WARN: gh 未认证`
|
|
98
|
+
|
|
99
|
+
- **原因**:`gh` CLI 未装或未 `gh auth login`。脚本仍会跑完测试,只是失败时**降级**写本地告警文件(`$LOG_DIR/issue-body-<ts>.md`),不提 GitHub issue。
|
|
100
|
+
- **处置**:
|
|
101
|
+
```bash
|
|
102
|
+
which gh || sudo apt install gh # 或见 https://cli.github.com/
|
|
103
|
+
gh auth status # 看认证状态
|
|
104
|
+
gh auth login # 重新登录
|
|
105
|
+
```
|
|
106
|
+
|
|
107
|
+
### 现象:crontab 触发了但 `command not found: gh`/`uv`/`git`
|
|
108
|
+
|
|
109
|
+
- **原因**:crontab 环境极简,没继承交互 shell 的 PATH。脚本内部已 `export PATH="$REAL_HOME/.local/bin:$REAL_HOME/.cargo/bin:/usr/local/bin:/usr/bin:/bin"` 兜底,但如果这些工具装在别处(如 `/opt/...`),需改脚本第 33 行的 PATH。
|
|
110
|
+
- **处置**:`which gh uv git` 确认路径,若不在脚本 PATH 里,编辑 `scripts/nightly_test.sh` 顶部 PATH 导出。
|
|
111
|
+
|
|
112
|
+
### 现象:`SKIP: 另一个 nightly_test 正在跑`
|
|
113
|
+
|
|
114
|
+
- **原因**:`flock -n /tmp/jfox-nightly-test.lock` 单飞保护触发,上一轮还在跑(全量 ~50min,偶发重叠)。
|
|
115
|
+
- **处置**:通常无需干预,等上一轮跑完即可。若确认是死锁残留(lock 文件在但无进程):`rm /tmp/jfox-nightly-test.lock`。
|
|
116
|
+
|
|
117
|
+
### 现象:每次 cron 都重下 bge-m3 / Python 工具链(很慢)
|
|
118
|
+
|
|
119
|
+
- **原因**:真实 HF 缓存或 uv 缓存路径被删/移动,或 `REAL_HOME` 判定错(脚本以启动时 `$HOME` 为 `REAL_HOME`)。脚本会在日志打 `WARN: HF cache ... 不存在`(HF 侧),但 uv 侧静默重下。
|
|
120
|
+
- **处置**:
|
|
121
|
+
```bash
|
|
122
|
+
ls -d ~/.cache/huggingface ~/.cache/uv ~/.local/share/uv/python # 确认缓存目录存在
|
|
123
|
+
df -h ~/.cache # 确认没满
|
|
124
|
+
```
|
|
125
|
+
若是首次启用、缓存还没建:手工跑一次 `jfox init` 或 `uv sync --extra dev` 把缓存预热好,再让 cron 接管。
|
|
126
|
+
|
|
127
|
+
### 现象:worktree 残留 / 沙箱 home 没删
|
|
128
|
+
|
|
129
|
+
- **原因**:脚本异常退出(如 kill -9)未触发 `trap cleanup EXIT`。
|
|
130
|
+
- **处置**:
|
|
131
|
+
```bash
|
|
132
|
+
ls ~/.jfox-nightly-test/ # 看残留的 worktree-* / home-XXXXXX
|
|
133
|
+
git -C /home/elling/git-repo/github/jfox worktree prune # 清理 worktree 元数据
|
|
134
|
+
rm -rf ~/.jfox-nightly-test/worktree-* ~/.jfox-nightly-test/home-*
|
|
135
|
+
```
|
|
136
|
+
调试时可加 `--keep-worktree` 保留 worktree 以便排查。
|
|
137
|
+
|
|
138
|
+
## 验收清单
|
|
139
|
+
|
|
140
|
+
在合并 / 正式启用前逐项勾选:
|
|
141
|
+
|
|
142
|
+
- [ ] `scripts/nightly_test_helpers.py` 单测全绿(`uv run pytest tests/unit/test_nightly_test_helpers.py -v`)
|
|
143
|
+
- [ ] `bash -n scripts/nightly_test.sh` 语法过
|
|
144
|
+
- [ ] `./scripts/nightly_test.sh --dry-run` 首次 = create 新 issue;二次 = 同签名 comment 复用
|
|
145
|
+
- [ ] dry-run 测试 issue 已 close/delete(不污染仓库)
|
|
146
|
+
- [ ] 降级路径:临时把 `gh` 改名再跑 dry-run → 本地告警文件 `$LOG_DIR/issue-body-*.md` 生成,脚本不崩
|
|
147
|
+
- [ ] 真实成功跑一次(手动,可 `--keep-worktree` 观察隔离):worktree 清理、假 HOME 删除、不碰真实 `~/.zk_config.json` / `~/.jfox-backup/`
|
|
148
|
+
- [ ] crontab 行已装(`crontab -l | grep nightly_test`)
|
|
149
|
+
- [ ] #338 备份已启用且每天 08:00 跑(`jfox backup status` 的 `last_ok=true`)
|
|
150
|
+
|
|
151
|
+
## 相关文件
|
|
152
|
+
|
|
153
|
+
| 文件 | 作用 |
|
|
154
|
+
|---|---|
|
|
155
|
+
| `scripts/nightly_test.sh` | 编排脚本(flock → 备份检查 → worktree → 假 HOME → uv sync → pytest → 失败 issue 去重) |
|
|
156
|
+
| `scripts/nightly_test_helpers.py` | 纯逻辑辅助(失败解析、签名、去重决策、备份检查)+ CLI dispatcher |
|
|
157
|
+
| `tests/unit/test_nightly_test_helpers.py` | helpers 单测 |
|
|
158
|
+
| `docs/superpowers/specs/2026-07-28-nightly-fulltest-design.md` | 设计文档(决策与契约) |
|
|
159
|
+
| `~/.jfox-nightly-test/` | 本机运行时目录(日志、worktree、沙箱 home、issue body) |
|
|
160
|
+
| `~/.jfox-backup/state.json` | #338 备份状态(脚本前置检查读它) |
|