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.
Files changed (380) hide show
  1. {jfox_cli-1.6.0 → jfox_cli-1.7.0}/.claude-plugin/marketplace.json +2 -2
  2. {jfox_cli-1.6.0 → jfox_cli-1.7.0}/CHANGELOG.md +24 -0
  3. {jfox_cli-1.6.0 → jfox_cli-1.7.0}/CLAUDE.md +6 -2
  4. {jfox_cli-1.6.0 → jfox_cli-1.7.0}/PKG-INFO +1 -1
  5. jfox_cli-1.7.0/docs/nightly-test.md +160 -0
  6. jfox_cli-1.7.0/docs/superpowers/plans/2026-07-28-bookshelf-flat-bundle.md +832 -0
  7. jfox_cli-1.7.0/docs/superpowers/plans/2026-07-28-nightly-fulltest.md +715 -0
  8. jfox_cli-1.7.0/docs/superpowers/plans/2026-08-07-session-to-permanent-cc-kimi.md +198 -0
  9. jfox_cli-1.7.0/docs/superpowers/specs/2026-07-28-bookshelf-flat-bundle-design.md +103 -0
  10. jfox_cli-1.7.0/docs/superpowers/specs/2026-07-28-nightly-fulltest-design.md +136 -0
  11. jfox_cli-1.7.0/docs/superpowers/specs/2026-08-07-session-to-permanent-cc-kimi-design.md +102 -0
  12. {jfox_cli-1.6.0 → jfox_cli-1.7.0}/jfox/__init__.py +1 -1
  13. {jfox_cli-1.6.0 → jfox_cli-1.7.0}/jfox/bookshelf/cli.py +7 -0
  14. {jfox_cli-1.6.0 → jfox_cli-1.7.0}/jfox/bookshelf/store.py +120 -31
  15. {jfox_cli-1.6.0 → jfox_cli-1.7.0}/packages/cc-plugin/.claude-plugin/plugin.json +1 -1
  16. {jfox_cli-1.6.0 → jfox_cli-1.7.0}/packages/cc-plugin/skills/bookshelf/SKILL.md +1 -1
  17. jfox_cli-1.7.0/packages/cc-plugin/skills/session-to-permanent/SKILL.md +240 -0
  18. {jfox_cli-1.6.0 → jfox_cli-1.7.0}/packages/cc-plugin/skills/using-jfox/SKILL.md +5 -3
  19. {jfox_cli-1.6.0 → jfox_cli-1.7.0}/packages/kimi-plugin/README.md +5 -2
  20. {jfox_cli-1.6.0 → jfox_cli-1.7.0}/packages/kimi-plugin/kimi.plugin.json +1 -1
  21. jfox_cli-1.7.0/packages/kimi-plugin/skills/jfox-session-to-permanent/SKILL.md +240 -0
  22. {jfox_cli-1.6.0 → jfox_cli-1.7.0}/packages/kimi-plugin/skills/using-jfox/SKILL.md +2 -0
  23. {jfox_cli-1.6.0 → jfox_cli-1.7.0}/pyproject.toml +1 -1
  24. jfox_cli-1.7.0/scripts/nightly_test.sh +206 -0
  25. jfox_cli-1.7.0/scripts/nightly_test_helpers.py +98 -0
  26. {jfox_cli-1.6.0 → jfox_cli-1.7.0}/skills-recommend/README.md +15 -2
  27. jfox_cli-1.7.0/skills-recommend/pi/jfox-bookshelf/SKILL.md +49 -0
  28. {jfox_cli-1.6.0 → jfox_cli-1.7.0}/skills-recommend/pi/jfox-ci/SKILL.md +36 -8
  29. {jfox_cli-1.6.0 → jfox_cli-1.7.0}/skills-recommend/pi/jfox-common/SKILL.md +2 -0
  30. jfox_cli-1.7.0/skills-recommend/pi/jfox-overview/SKILL.md +86 -0
  31. jfox_cli-1.7.0/skills-recommend/pi/jfox-promote/SKILL.md +235 -0
  32. {jfox_cli-1.6.0 → jfox_cli-1.7.0}/skills-recommend/pi/jfox-release/SKILL.md +15 -4
  33. jfox_cli-1.7.0/skills-recommend/pi/jfox-release-all/SKILL.md +116 -0
  34. jfox_cli-1.7.0/skills-recommend/pi/jfox-release-cc-plugin/SKILL.md +108 -0
  35. jfox_cli-1.7.0/skills-recommend/pi/jfox-release-kimi-plugin/SKILL.md +108 -0
  36. {jfox_cli-1.6.0 → jfox_cli-1.7.0}/skills-recommend/pi/jfox-session-summary/SKILL.md +3 -1
  37. jfox_cli-1.7.0/skills-recommend/pi/jfox-session-to-permanent/SKILL.md +243 -0
  38. {jfox_cli-1.6.0 → jfox_cli-1.7.0}/tests/unit/bookshelf/conftest.py +18 -1
  39. {jfox_cli-1.6.0 → jfox_cli-1.7.0}/tests/unit/bookshelf/test_cli.py +32 -0
  40. {jfox_cli-1.6.0 → jfox_cli-1.7.0}/tests/unit/bookshelf/test_store.py +263 -6
  41. jfox_cli-1.7.0/tests/unit/test_nightly_test_helpers.py +139 -0
  42. {jfox_cli-1.6.0 → jfox_cli-1.7.0}/uv.lock +1 -1
  43. {jfox_cli-1.6.0 → jfox_cli-1.7.0}/.claude/skills/ci/SKILL.md +0 -0
  44. {jfox_cli-1.6.0 → jfox_cli-1.7.0}/.claude/skills/release/SKILL.md +0 -0
  45. {jfox_cli-1.6.0 → jfox_cli-1.7.0}/.claude/skills/release/release_helper.py +0 -0
  46. {jfox_cli-1.6.0 → jfox_cli-1.7.0}/.claude/skills/release-all/SKILL.md +0 -0
  47. {jfox_cli-1.6.0 → jfox_cli-1.7.0}/.claude/skills/release-all/release_all_helper.py +0 -0
  48. {jfox_cli-1.6.0 → jfox_cli-1.7.0}/.claude/skills/release-cc-plugin/SKILL.md +0 -0
  49. {jfox_cli-1.6.0 → jfox_cli-1.7.0}/.claude/skills/release-cc-plugin/release_cc_plugin_helper.py +0 -0
  50. {jfox_cli-1.6.0 → jfox_cli-1.7.0}/.claude/skills/release-kimi-plugin/SKILL.md +0 -0
  51. {jfox_cli-1.6.0 → jfox_cli-1.7.0}/.claude/skills/release-kimi-plugin/release_kimi_plugin_helper.py +0 -0
  52. {jfox_cli-1.6.0 → jfox_cli-1.7.0}/.githooks/pre-push +0 -0
  53. {jfox_cli-1.6.0 → jfox_cli-1.7.0}/.github/ISSUE_TEMPLATE/bug_report.yml +0 -0
  54. {jfox_cli-1.6.0 → jfox_cli-1.7.0}/.github/ISSUE_TEMPLATE/config.yml +0 -0
  55. {jfox_cli-1.6.0 → jfox_cli-1.7.0}/.github/ISSUE_TEMPLATE/docs_improvement.yml +0 -0
  56. {jfox_cli-1.6.0 → jfox_cli-1.7.0}/.github/ISSUE_TEMPLATE/feature_request.yml +0 -0
  57. {jfox_cli-1.6.0 → jfox_cli-1.7.0}/.github/PULL_REQUEST_TEMPLATE.md +0 -0
  58. {jfox_cli-1.6.0 → jfox_cli-1.7.0}/.github/workflows/integration-test.yml +0 -0
  59. {jfox_cli-1.6.0 → jfox_cli-1.7.0}/.github/workflows/publish.yml +0 -0
  60. {jfox_cli-1.6.0 → jfox_cli-1.7.0}/.gitignore +0 -0
  61. {jfox_cli-1.6.0 → jfox_cli-1.7.0}/.python-version +0 -0
  62. {jfox_cli-1.6.0 → jfox_cli-1.7.0}/AGENTS.md +0 -0
  63. {jfox_cli-1.6.0 → jfox_cli-1.7.0}/DEVELOPMENT_PLAN.md +0 -0
  64. {jfox_cli-1.6.0 → jfox_cli-1.7.0}/README.md +0 -0
  65. {jfox_cli-1.6.0 → jfox_cli-1.7.0}/SESSION.md +0 -0
  66. {jfox_cli-1.6.0 → jfox_cli-1.7.0}/SESSION_SUMMARY.md +0 -0
  67. {jfox_cli-1.6.0 → jfox_cli-1.7.0}/docs/claude-code-plugin-guide.md +0 -0
  68. {jfox_cli-1.6.0 → jfox_cli-1.7.0}/docs/installation.md +0 -0
  69. {jfox_cli-1.6.0 → jfox_cli-1.7.0}/docs/superpowers/plans/2026-04-11-bulk-import-bm25-fix.md +0 -0
  70. {jfox_cli-1.6.0 → jfox_cli-1.7.0}/docs/superpowers/plans/2026-04-11-edit-command.md +0 -0
  71. {jfox_cli-1.6.0 → jfox_cli-1.7.0}/docs/superpowers/plans/2026-04-11-unify-format-option.md +0 -0
  72. {jfox_cli-1.6.0 → jfox_cli-1.7.0}/docs/superpowers/plans/2026-04-12-ci-coverage-optimization.md +0 -0
  73. {jfox_cli-1.6.0 → jfox_cli-1.7.0}/docs/superpowers/plans/2026-04-12-edit-content-file.md +0 -0
  74. {jfox_cli-1.6.0 → jfox_cli-1.7.0}/docs/superpowers/plans/2026-04-12-fix-index-rebuild-clear.md +0 -0
  75. {jfox_cli-1.6.0 → jfox_cli-1.7.0}/docs/superpowers/plans/2026-04-12-fix-index-verify-id-mismatch.md +0 -0
  76. {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
  77. {jfox_cli-1.6.0 → jfox_cli-1.7.0}/docs/superpowers/plans/2026-04-12-index-kb-param.md +0 -0
  78. {jfox_cli-1.6.0 → jfox_cli-1.7.0}/docs/superpowers/plans/2026-04-12-lazy-import-perf.md +0 -0
  79. {jfox_cli-1.6.0 → jfox_cli-1.7.0}/docs/superpowers/plans/2026-04-12-skill-redesign.md +0 -0
  80. {jfox_cli-1.6.0 → jfox_cli-1.7.0}/docs/superpowers/plans/2026-04-13-add-content-file.md +0 -0
  81. {jfox_cli-1.6.0 → jfox_cli-1.7.0}/docs/superpowers/plans/2026-04-13-bulk-import-vectorstore-init.md +0 -0
  82. {jfox_cli-1.6.0 → jfox_cli-1.7.0}/docs/superpowers/plans/2026-04-13-ingest-log-command.md +0 -0
  83. {jfox_cli-1.6.0 → jfox_cli-1.7.0}/docs/superpowers/plans/2026-04-13-ingest-skill-sync.md +0 -0
  84. {jfox_cli-1.6.0 → jfox_cli-1.7.0}/docs/superpowers/plans/2026-04-13-suppress-third-party-logging.md +0 -0
  85. {jfox_cli-1.6.0 → jfox_cli-1.7.0}/docs/superpowers/plans/2026-04-13-sync-skills-with-cli.md +0 -0
  86. {jfox_cli-1.6.0 → jfox_cli-1.7.0}/docs/superpowers/plans/2026-04-14-sync-docs-daemon-show.md +0 -0
  87. {jfox_cli-1.6.0 → jfox_cli-1.7.0}/docs/superpowers/plans/2026-04-15-gpu-embedding.md +0 -0
  88. {jfox_cli-1.6.0 → jfox_cli-1.7.0}/docs/superpowers/plans/2026-04-15-make-daemon-deps-required.md +0 -0
  89. {jfox_cli-1.6.0 → jfox_cli-1.7.0}/docs/superpowers/plans/2026-04-15-session-summary-confirmation.md +0 -0
  90. {jfox_cli-1.6.0 → jfox_cli-1.7.0}/docs/superpowers/plans/2026-04-16-fix-windows-daemon-console-window.md +0 -0
  91. {jfox_cli-1.6.0 → jfox_cli-1.7.0}/docs/superpowers/plans/2026-04-18-daemon-timeout-and-index-rebuild.md +0 -0
  92. {jfox_cli-1.6.0 → jfox_cli-1.7.0}/docs/superpowers/plans/2026-04-22-release-skill.md +0 -0
  93. {jfox_cli-1.6.0 → jfox_cli-1.7.0}/docs/superpowers/plans/2026-04-26-fix-daemon-deprecation-warnings.md +0 -0
  94. {jfox_cli-1.6.0 → jfox_cli-1.7.0}/docs/superpowers/plans/2026-04-27-intranet-model-download.md +0 -0
  95. {jfox_cli-1.6.0 → jfox_cli-1.7.0}/docs/superpowers/plans/2026-04-28-tag-filtering.md +0 -0
  96. {jfox_cli-1.6.0 → jfox_cli-1.7.0}/docs/superpowers/plans/2026-04-29-daemon-stop-fix.md +0 -0
  97. {jfox_cli-1.6.0 → jfox_cli-1.7.0}/docs/superpowers/plans/2026-05-03-jfox-check.md +0 -0
  98. {jfox_cli-1.6.0 → jfox_cli-1.7.0}/docs/superpowers/plans/2026-05-03-list-notes-skip-summary.md +0 -0
  99. {jfox_cli-1.6.0 → jfox_cli-1.7.0}/docs/superpowers/plans/2026-05-03-log-level-fix.md +0 -0
  100. {jfox_cli-1.6.0 → jfox_cli-1.7.0}/docs/superpowers/plans/2026-05-04-list-notes-index.md +0 -0
  101. {jfox_cli-1.6.0 → jfox_cli-1.7.0}/docs/superpowers/plans/2026-05-06-atomic-write.md +0 -0
  102. {jfox_cli-1.6.0 → jfox_cli-1.7.0}/docs/superpowers/plans/2026-05-09-session-note-type.md +0 -0
  103. {jfox_cli-1.6.0 → jfox_cli-1.7.0}/docs/superpowers/plans/2026-05-10-jfox-plugin.md +0 -0
  104. {jfox_cli-1.6.0 → jfox_cli-1.7.0}/docs/superpowers/plans/2026-05-19-fix-last-used-never.md +0 -0
  105. {jfox_cli-1.6.0 → jfox_cli-1.7.0}/docs/superpowers/plans/2026-05-20-modelscope-migration.md +0 -0
  106. {jfox_cli-1.6.0 → jfox_cli-1.7.0}/docs/superpowers/plans/2026-06-02-todo-note-type.md +0 -0
  107. {jfox_cli-1.6.0 → jfox_cli-1.7.0}/docs/superpowers/plans/2026-06-16-kimi-code-auto-summary.md +0 -0
  108. {jfox_cli-1.6.0 → jfox_cli-1.7.0}/docs/superpowers/plans/2026-06-17-index-rebuild-backlinks.md +0 -0
  109. {jfox_cli-1.6.0 → jfox_cli-1.7.0}/docs/superpowers/plans/2026-06-17-using-jfox-skill.md +0 -0
  110. {jfox_cli-1.6.0 → jfox_cli-1.7.0}/docs/superpowers/plans/2026-06-18-self-update-command.md +0 -0
  111. {jfox_cli-1.6.0 → jfox_cli-1.7.0}/docs/superpowers/plans/2026-06-21-fragment-capture.md +0 -0
  112. {jfox_cli-1.6.0 → jfox_cli-1.7.0}/docs/superpowers/plans/2026-06-21-gem-synthesis.md +0 -0
  113. {jfox_cli-1.6.0 → jfox_cli-1.7.0}/docs/superpowers/plans/2026-06-25-gem-synth-throttle-ledger.md +0 -0
  114. {jfox_cli-1.6.0 → jfox_cli-1.7.0}/docs/superpowers/plans/2026-07-08-auto-summary-schedule-window.md +0 -0
  115. {jfox_cli-1.6.0 → jfox_cli-1.7.0}/docs/superpowers/plans/2026-07-08-candidate-promote.md +0 -0
  116. {jfox_cli-1.6.0 → jfox_cli-1.7.0}/docs/superpowers/plans/2026-07-12-gem-synth-dedup.md +0 -0
  117. {jfox_cli-1.6.0 → jfox_cli-1.7.0}/docs/superpowers/plans/2026-07-12-release-cc-plugin-skill.md +0 -0
  118. {jfox_cli-1.6.0 → jfox_cli-1.7.0}/docs/superpowers/plans/2026-07-12-session-summary-streamline.md +0 -0
  119. {jfox_cli-1.6.0 → jfox_cli-1.7.0}/docs/superpowers/plans/2026-07-12-show-json.md +0 -0
  120. {jfox_cli-1.6.0 → jfox_cli-1.7.0}/docs/superpowers/plans/2026-07-17-fix-candidate-dual-h1.md +0 -0
  121. {jfox_cli-1.6.0 → jfox_cli-1.7.0}/docs/superpowers/plans/2026-07-18-dedup-lifecycle-decouple.md +0 -0
  122. {jfox_cli-1.6.0 → jfox_cli-1.7.0}/docs/superpowers/plans/2026-07-19-promote-skill-three-modes.md +0 -0
  123. {jfox_cli-1.6.0 → jfox_cli-1.7.0}/docs/superpowers/plans/2026-07-25-bookshelf.md +0 -0
  124. {jfox_cli-1.6.0 → jfox_cli-1.7.0}/docs/superpowers/plans/2026-07-25-gem-synth-dedup-incremental-merge.md +0 -0
  125. {jfox_cli-1.6.0 → jfox_cli-1.7.0}/docs/superpowers/plans/2026-07-26-kb-backup-restore.md +0 -0
  126. {jfox_cli-1.6.0 → jfox_cli-1.7.0}/docs/superpowers/plans/2026-07-26-promote-skill-clear-reports-rewrite.md +0 -0
  127. {jfox_cli-1.6.0 → jfox_cli-1.7.0}/docs/superpowers/plans/2026-07-27-release-all.md +0 -0
  128. {jfox_cli-1.6.0 → jfox_cli-1.7.0}/docs/superpowers/specs/2026-04-03-bugfixes-design.md +0 -0
  129. {jfox_cli-1.6.0 → jfox_cli-1.7.0}/docs/superpowers/specs/2026-04-12-skill-redesign-design.md +0 -0
  130. {jfox_cli-1.6.0 → jfox_cli-1.7.0}/docs/superpowers/specs/2026-04-13-pr-auto-code-review-design.md +0 -0
  131. {jfox_cli-1.6.0 → jfox_cli-1.7.0}/docs/superpowers/specs/2026-04-14-show-command-design.md +0 -0
  132. {jfox_cli-1.6.0 → jfox_cli-1.7.0}/docs/superpowers/specs/2026-04-15-gpu-embedding-design.md +0 -0
  133. {jfox_cli-1.6.0 → jfox_cli-1.7.0}/docs/superpowers/specs/2026-04-15-session-summary-confirmation-design.md +0 -0
  134. {jfox_cli-1.6.0 → jfox_cli-1.7.0}/docs/superpowers/specs/2026-04-21-release-skill-design.md +0 -0
  135. {jfox_cli-1.6.0 → jfox_cli-1.7.0}/docs/superpowers/specs/2026-04-26-fix-daemon-deprecation-warnings-design.md +0 -0
  136. {jfox_cli-1.6.0 → jfox_cli-1.7.0}/docs/superpowers/specs/2026-04-27-intranet-model-download-design.md +0 -0
  137. {jfox_cli-1.6.0 → jfox_cli-1.7.0}/docs/superpowers/specs/2026-04-28-tag-filtering-design.md +0 -0
  138. {jfox_cli-1.6.0 → jfox_cli-1.7.0}/docs/superpowers/specs/2026-04-29-daemon-stop-fix-design.md +0 -0
  139. {jfox_cli-1.6.0 → jfox_cli-1.7.0}/docs/superpowers/specs/2026-04-30-jfox-kb-env-var-design.md +0 -0
  140. {jfox_cli-1.6.0 → jfox_cli-1.7.0}/docs/superpowers/specs/2026-05-03-jfox-check-design.md +0 -0
  141. {jfox_cli-1.6.0 → jfox_cli-1.7.0}/docs/superpowers/specs/2026-05-03-list-notes-skip-summary-design.md +0 -0
  142. {jfox_cli-1.6.0 → jfox_cli-1.7.0}/docs/superpowers/specs/2026-05-03-log-level-fix-design.md +0 -0
  143. {jfox_cli-1.6.0 → jfox_cli-1.7.0}/docs/superpowers/specs/2026-05-04-list-notes-index-design.md +0 -0
  144. {jfox_cli-1.6.0 → jfox_cli-1.7.0}/docs/superpowers/specs/2026-05-06-atomic-write-design.md +0 -0
  145. {jfox_cli-1.6.0 → jfox_cli-1.7.0}/docs/superpowers/specs/2026-05-09-jfox-plugin-design.md +0 -0
  146. {jfox_cli-1.6.0 → jfox_cli-1.7.0}/docs/superpowers/specs/2026-05-09-session-note-type-design.md +0 -0
  147. {jfox_cli-1.6.0 → jfox_cli-1.7.0}/docs/superpowers/specs/2026-05-20-modelscope-migration-design.md +0 -0
  148. {jfox_cli-1.6.0 → jfox_cli-1.7.0}/docs/superpowers/specs/2026-06-02-todo-note-type-design.md +0 -0
  149. {jfox_cli-1.6.0 → jfox_cli-1.7.0}/docs/superpowers/specs/2026-06-16-kimi-code-auto-summary-design.md +0 -0
  150. {jfox_cli-1.6.0 → jfox_cli-1.7.0}/docs/superpowers/specs/2026-06-17-index-rebuild-backlinks-design.md +0 -0
  151. {jfox_cli-1.6.0 → jfox_cli-1.7.0}/docs/superpowers/specs/2026-06-17-using-jfox-skill-design.md +0 -0
  152. {jfox_cli-1.6.0 → jfox_cli-1.7.0}/docs/superpowers/specs/2026-06-18-archive-soft-delete-design.md +0 -0
  153. {jfox_cli-1.6.0 → jfox_cli-1.7.0}/docs/superpowers/specs/2026-06-18-self-update-command-design.md +0 -0
  154. {jfox_cli-1.6.0 → jfox_cli-1.7.0}/docs/superpowers/specs/2026-06-21-fragment-capture-design.md +0 -0
  155. {jfox_cli-1.6.0 → jfox_cli-1.7.0}/docs/superpowers/specs/2026-06-21-gem-synthesis-design.md +0 -0
  156. {jfox_cli-1.6.0 → jfox_cli-1.7.0}/docs/superpowers/specs/2026-06-25-gem-synth-throttle-ledger-design.md +0 -0
  157. {jfox_cli-1.6.0 → jfox_cli-1.7.0}/docs/superpowers/specs/2026-07-08-candidate-promote-design.md +0 -0
  158. {jfox_cli-1.6.0 → jfox_cli-1.7.0}/docs/superpowers/specs/2026-07-12-gem-synth-dedup-design.md +0 -0
  159. {jfox_cli-1.6.0 → jfox_cli-1.7.0}/docs/superpowers/specs/2026-07-12-release-cc-plugin-skill-design.md +0 -0
  160. {jfox_cli-1.6.0 → jfox_cli-1.7.0}/docs/superpowers/specs/2026-07-12-session-summary-streamline-design.md +0 -0
  161. {jfox_cli-1.6.0 → jfox_cli-1.7.0}/docs/superpowers/specs/2026-07-12-show-json-design.md +0 -0
  162. {jfox_cli-1.6.0 → jfox_cli-1.7.0}/docs/superpowers/specs/2026-07-18-dedup-lifecycle-decouple-design.md +0 -0
  163. {jfox_cli-1.6.0 → jfox_cli-1.7.0}/docs/superpowers/specs/2026-07-19-promote-skill-three-modes-design.md +0 -0
  164. {jfox_cli-1.6.0 → jfox_cli-1.7.0}/docs/superpowers/specs/2026-07-25-bookshelf-design.md +0 -0
  165. {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
  166. {jfox_cli-1.6.0 → jfox_cli-1.7.0}/docs/superpowers/specs/2026-07-26-kb-backup-restore-design.md +0 -0
  167. {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
  168. {jfox_cli-1.6.0 → jfox_cli-1.7.0}/docs/superpowers/specs/2026-07-27-release-all-orchestration-design.md +0 -0
  169. {jfox_cli-1.6.0 → jfox_cli-1.7.0}/docs/troubleshooting.md +0 -0
  170. {jfox_cli-1.6.0 → jfox_cli-1.7.0}/jessica-jones-static-cable.md +0 -0
  171. {jfox_cli-1.6.0 → jfox_cli-1.7.0}/jfox/__main__.py +0 -0
  172. {jfox_cli-1.6.0 → jfox_cli-1.7.0}/jfox/auto_summary/__init__.py +0 -0
  173. {jfox_cli-1.6.0 → jfox_cli-1.7.0}/jfox/auto_summary/cli.py +0 -0
  174. {jfox_cli-1.6.0 → jfox_cli-1.7.0}/jfox/auto_summary/extractor.py +0 -0
  175. {jfox_cli-1.6.0 → jfox_cli-1.7.0}/jfox/auto_summary/kimi_source.py +0 -0
  176. {jfox_cli-1.6.0 → jfox_cli-1.7.0}/jfox/auto_summary/ledger.py +0 -0
  177. {jfox_cli-1.6.0 → jfox_cli-1.7.0}/jfox/auto_summary/loop.py +0 -0
  178. {jfox_cli-1.6.0 → jfox_cli-1.7.0}/jfox/auto_summary/runner.py +0 -0
  179. {jfox_cli-1.6.0 → jfox_cli-1.7.0}/jfox/auto_summary/scanner.py +0 -0
  180. {jfox_cli-1.6.0 → jfox_cli-1.7.0}/jfox/auto_summary/schedule.py +0 -0
  181. {jfox_cli-1.6.0 → jfox_cli-1.7.0}/jfox/auto_summary/sources.py +0 -0
  182. {jfox_cli-1.6.0 → jfox_cli-1.7.0}/jfox/backup/__init__.py +0 -0
  183. {jfox_cli-1.6.0 → jfox_cli-1.7.0}/jfox/backup/cli.py +0 -0
  184. {jfox_cli-1.6.0 → jfox_cli-1.7.0}/jfox/backup/loop.py +0 -0
  185. {jfox_cli-1.6.0 → jfox_cli-1.7.0}/jfox/backup/manager.py +0 -0
  186. {jfox_cli-1.6.0 → jfox_cli-1.7.0}/jfox/backup/schedule.py +0 -0
  187. {jfox_cli-1.6.0 → jfox_cli-1.7.0}/jfox/bm25_index.py +0 -0
  188. {jfox_cli-1.6.0 → jfox_cli-1.7.0}/jfox/bookshelf/__init__.py +0 -0
  189. {jfox_cli-1.6.0 → jfox_cli-1.7.0}/jfox/bookshelf/meta.py +0 -0
  190. {jfox_cli-1.6.0 → jfox_cli-1.7.0}/jfox/cli.py +0 -0
  191. {jfox_cli-1.6.0 → jfox_cli-1.7.0}/jfox/config.py +0 -0
  192. {jfox_cli-1.6.0 → jfox_cli-1.7.0}/jfox/daemon/__init__.py +0 -0
  193. {jfox_cli-1.6.0 → jfox_cli-1.7.0}/jfox/daemon/__main__.py +0 -0
  194. {jfox_cli-1.6.0 → jfox_cli-1.7.0}/jfox/daemon/client.py +0 -0
  195. {jfox_cli-1.6.0 → jfox_cli-1.7.0}/jfox/daemon/process.py +0 -0
  196. {jfox_cli-1.6.0 → jfox_cli-1.7.0}/jfox/daemon/server.py +0 -0
  197. {jfox_cli-1.6.0 → jfox_cli-1.7.0}/jfox/embedding_backend.py +0 -0
  198. {jfox_cli-1.6.0 → jfox_cli-1.7.0}/jfox/formatters.py +0 -0
  199. {jfox_cli-1.6.0 → jfox_cli-1.7.0}/jfox/fragment/__init__.py +0 -0
  200. {jfox_cli-1.6.0 → jfox_cli-1.7.0}/jfox/fragment/cli.py +0 -0
  201. {jfox_cli-1.6.0 → jfox_cli-1.7.0}/jfox/fragment/detector.py +0 -0
  202. {jfox_cli-1.6.0 → jfox_cli-1.7.0}/jfox/fragment/internal_sources.py +0 -0
  203. {jfox_cli-1.6.0 → jfox_cli-1.7.0}/jfox/fragment/service.py +0 -0
  204. {jfox_cli-1.6.0 → jfox_cli-1.7.0}/jfox/fragment/store.py +0 -0
  205. {jfox_cli-1.6.0 → jfox_cli-1.7.0}/jfox/gem_synth/__init__.py +0 -0
  206. {jfox_cli-1.6.0 → jfox_cli-1.7.0}/jfox/gem_synth/anchors.py +0 -0
  207. {jfox_cli-1.6.0 → jfox_cli-1.7.0}/jfox/gem_synth/cli.py +0 -0
  208. {jfox_cli-1.6.0 → jfox_cli-1.7.0}/jfox/gem_synth/dedup.py +0 -0
  209. {jfox_cli-1.6.0 → jfox_cli-1.7.0}/jfox/gem_synth/grounding.py +0 -0
  210. {jfox_cli-1.6.0 → jfox_cli-1.7.0}/jfox/gem_synth/lifecycle.py +0 -0
  211. {jfox_cli-1.6.0 → jfox_cli-1.7.0}/jfox/gem_synth/llm.py +0 -0
  212. {jfox_cli-1.6.0 → jfox_cli-1.7.0}/jfox/gem_synth/loop.py +0 -0
  213. {jfox_cli-1.6.0 → jfox_cli-1.7.0}/jfox/gem_synth/paths.py +0 -0
  214. {jfox_cli-1.6.0 → jfox_cli-1.7.0}/jfox/gem_synth/store.py +0 -0
  215. {jfox_cli-1.6.0 → jfox_cli-1.7.0}/jfox/gem_synth/synthesizer.py +0 -0
  216. {jfox_cli-1.6.0 → jfox_cli-1.7.0}/jfox/gem_synth/transcript.py +0 -0
  217. {jfox_cli-1.6.0 → jfox_cli-1.7.0}/jfox/git_extractor.py +0 -0
  218. {jfox_cli-1.6.0 → jfox_cli-1.7.0}/jfox/global_config.py +0 -0
  219. {jfox_cli-1.6.0 → jfox_cli-1.7.0}/jfox/graph.py +0 -0
  220. {jfox_cli-1.6.0 → jfox_cli-1.7.0}/jfox/indexer.py +0 -0
  221. {jfox_cli-1.6.0 → jfox_cli-1.7.0}/jfox/kb_manager.py +0 -0
  222. {jfox_cli-1.6.0 → jfox_cli-1.7.0}/jfox/model_downloader.py +0 -0
  223. {jfox_cli-1.6.0 → jfox_cli-1.7.0}/jfox/models.py +0 -0
  224. {jfox_cli-1.6.0 → jfox_cli-1.7.0}/jfox/note.py +0 -0
  225. {jfox_cli-1.6.0 → jfox_cli-1.7.0}/jfox/note_index.py +0 -0
  226. {jfox_cli-1.6.0 → jfox_cli-1.7.0}/jfox/performance.py +0 -0
  227. {jfox_cli-1.6.0 → jfox_cli-1.7.0}/jfox/search_engine.py +0 -0
  228. {jfox_cli-1.6.0 → jfox_cli-1.7.0}/jfox/template.py +0 -0
  229. {jfox_cli-1.6.0 → jfox_cli-1.7.0}/jfox/template_cli.py +0 -0
  230. {jfox_cli-1.6.0 → jfox_cli-1.7.0}/jfox/utils.py +0 -0
  231. {jfox_cli-1.6.0 → jfox_cli-1.7.0}/jfox/vector_store.py +0 -0
  232. {jfox_cli-1.6.0 → jfox_cli-1.7.0}/package.json +0 -0
  233. {jfox_cli-1.6.0 → jfox_cli-1.7.0}/packages/cc-plugin/hooks/fragment-capture.sh +0 -0
  234. {jfox_cli-1.6.0 → jfox_cli-1.7.0}/packages/cc-plugin/hooks/hooks.json +0 -0
  235. {jfox_cli-1.6.0 → jfox_cli-1.7.0}/packages/cc-plugin/skills/ingest/SKILL.md +0 -0
  236. {jfox_cli-1.6.0 → jfox_cli-1.7.0}/packages/cc-plugin/skills/manage/SKILL.md +0 -0
  237. {jfox_cli-1.6.0 → jfox_cli-1.7.0}/packages/cc-plugin/skills/organize/SKILL.md +0 -0
  238. {jfox_cli-1.6.0 → jfox_cli-1.7.0}/packages/cc-plugin/skills/promote/SKILL.md +0 -0
  239. {jfox_cli-1.6.0 → jfox_cli-1.7.0}/packages/cc-plugin/skills/search/SKILL.md +0 -0
  240. {jfox_cli-1.6.0 → jfox_cli-1.7.0}/packages/cc-plugin/skills/session-summary/SKILL.md +0 -0
  241. {jfox_cli-1.6.0 → jfox_cli-1.7.0}/packages/kimi-plugin/skills/jfox-admin/SKILL.md +0 -0
  242. {jfox_cli-1.6.0 → jfox_cli-1.7.0}/packages/kimi-plugin/skills/jfox-auto-summary/SKILL.md +0 -0
  243. {jfox_cli-1.6.0 → jfox_cli-1.7.0}/packages/kimi-plugin/skills/jfox-ingest/SKILL.md +0 -0
  244. {jfox_cli-1.6.0 → jfox_cli-1.7.0}/packages/kimi-plugin/skills/jfox-manage/SKILL.md +0 -0
  245. {jfox_cli-1.6.0 → jfox_cli-1.7.0}/packages/kimi-plugin/skills/jfox-organize/SKILL.md +0 -0
  246. {jfox_cli-1.6.0 → jfox_cli-1.7.0}/packages/kimi-plugin/skills/jfox-promote/SKILL.md +0 -0
  247. {jfox_cli-1.6.0 → jfox_cli-1.7.0}/packages/kimi-plugin/skills/jfox-search/SKILL.md +0 -0
  248. {jfox_cli-1.6.0 → jfox_cli-1.7.0}/packages/kimi-plugin/skills/jfox-session-summary/SKILL.md +0 -0
  249. {jfox_cli-1.6.0 → jfox_cli-1.7.0}/packages/kimi-plugin/skills/jfox-template/SKILL.md +0 -0
  250. {jfox_cli-1.6.0 → jfox_cli-1.7.0}/pytest.ini +0 -0
  251. {jfox_cli-1.6.0 → jfox_cli-1.7.0}/run_full_test.ps1 +0 -0
  252. {jfox_cli-1.6.0 → jfox_cli-1.7.0}/scripts/download-model-intranet.sh +0 -0
  253. {jfox_cli-1.6.0 → jfox_cli-1.7.0}/skills-recommend/kimi-cli/jfox-common/SKILL.md +0 -0
  254. {jfox_cli-1.6.0 → jfox_cli-1.7.0}/skills-recommend/kimi-cli/jfox-ingest/SKILL.md +0 -0
  255. {jfox_cli-1.6.0 → jfox_cli-1.7.0}/skills-recommend/kimi-cli/jfox-organize/SKILL.md +0 -0
  256. {jfox_cli-1.6.0 → jfox_cli-1.7.0}/skills-recommend/kimi-cli/jfox-search/SKILL.md +0 -0
  257. {jfox_cli-1.6.0 → jfox_cli-1.7.0}/skills-recommend/kimi-cli/jfox-session-summary/SKILL.md +0 -0
  258. {jfox_cli-1.6.0 → jfox_cli-1.7.0}/skills-recommend/pi/jfox-ingest/SKILL.md +0 -0
  259. {jfox_cli-1.6.0 → jfox_cli-1.7.0}/skills-recommend/pi/jfox-organize/SKILL.md +0 -0
  260. {jfox_cli-1.6.0 → jfox_cli-1.7.0}/skills-recommend/pi/jfox-search/SKILL.md +0 -0
  261. {jfox_cli-1.6.0 → jfox_cli-1.7.0}/tests/COVERAGE_PLAN.md +0 -0
  262. {jfox_cli-1.6.0 → jfox_cli-1.7.0}/tests/MIGRATION.md +0 -0
  263. {jfox_cli-1.6.0 → jfox_cli-1.7.0}/tests/TESTS.md +0 -0
  264. {jfox_cli-1.6.0 → jfox_cli-1.7.0}/tests/conftest.py +0 -0
  265. {jfox_cli-1.6.0 → jfox_cli-1.7.0}/tests/integration/__init__.py +0 -0
  266. {jfox_cli-1.6.0 → jfox_cli-1.7.0}/tests/integration/test_auto_summary_kimi.py +0 -0
  267. {jfox_cli-1.6.0 → jfox_cli-1.7.0}/tests/integration/test_backlinks.py +0 -0
  268. {jfox_cli-1.6.0 → jfox_cli-1.7.0}/tests/integration/test_candidate_promote_flow.py +0 -0
  269. {jfox_cli-1.6.0 → jfox_cli-1.7.0}/tests/integration/test_fragment_capture_flow.py +0 -0
  270. {jfox_cli-1.6.0 → jfox_cli-1.7.0}/tests/integration/test_gem_synth_flow.py +0 -0
  271. {jfox_cli-1.6.0 → jfox_cli-1.7.0}/tests/integration/test_index_rebuild_backlinks.py +0 -0
  272. {jfox_cli-1.6.0 → jfox_cli-1.7.0}/tests/integration/test_model_download.py +0 -0
  273. {jfox_cli-1.6.0 → jfox_cli-1.7.0}/tests/integration/test_tag_filter_cli.py +0 -0
  274. {jfox_cli-1.6.0 → jfox_cli-1.7.0}/tests/performance/__init__.py +0 -0
  275. {jfox_cli-1.6.0 → jfox_cli-1.7.0}/tests/performance/test_performance.py +0 -0
  276. {jfox_cli-1.6.0 → jfox_cli-1.7.0}/tests/test_advanced_features.py +0 -0
  277. {jfox_cli-1.6.0 → jfox_cli-1.7.0}/tests/test_cli_format.py +0 -0
  278. {jfox_cli-1.6.0 → jfox_cli-1.7.0}/tests/test_config_set_unit.py +0 -0
  279. {jfox_cli-1.6.0 → jfox_cli-1.7.0}/tests/test_config_unit.py +0 -0
  280. {jfox_cli-1.6.0 → jfox_cli-1.7.0}/tests/test_core_workflow.py +0 -0
  281. {jfox_cli-1.6.0 → jfox_cli-1.7.0}/tests/test_embedding_device.py +0 -0
  282. {jfox_cli-1.6.0 → jfox_cli-1.7.0}/tests/test_hybrid_search.py +0 -0
  283. {jfox_cli-1.6.0 → jfox_cli-1.7.0}/tests/test_integration.py +0 -0
  284. {jfox_cli-1.6.0 → jfox_cli-1.7.0}/tests/test_kb_current.py +0 -0
  285. {jfox_cli-1.6.0 → jfox_cli-1.7.0}/tests/test_suggest_links.py +0 -0
  286. {jfox_cli-1.6.0 → jfox_cli-1.7.0}/tests/unit/__init__.py +0 -0
  287. {jfox_cli-1.6.0 → jfox_cli-1.7.0}/tests/unit/bookshelf/__init__.py +0 -0
  288. {jfox_cli-1.6.0 → jfox_cli-1.7.0}/tests/unit/bookshelf/test_meta.py +0 -0
  289. {jfox_cli-1.6.0 → jfox_cli-1.7.0}/tests/unit/conftest.py +0 -0
  290. {jfox_cli-1.6.0 → jfox_cli-1.7.0}/tests/unit/test_add_backfill_links.py +0 -0
  291. {jfox_cli-1.6.0 → jfox_cli-1.7.0}/tests/unit/test_archive.py +0 -0
  292. {jfox_cli-1.6.0 → jfox_cli-1.7.0}/tests/unit/test_atomic_write.py +0 -0
  293. {jfox_cli-1.6.0 → jfox_cli-1.7.0}/tests/unit/test_auto_summary_cli.py +0 -0
  294. {jfox_cli-1.6.0 → jfox_cli-1.7.0}/tests/unit/test_auto_summary_config_sources.py +0 -0
  295. {jfox_cli-1.6.0 → jfox_cli-1.7.0}/tests/unit/test_auto_summary_defaults.py +0 -0
  296. {jfox_cli-1.6.0 → jfox_cli-1.7.0}/tests/unit/test_auto_summary_extractor.py +0 -0
  297. {jfox_cli-1.6.0 → jfox_cli-1.7.0}/tests/unit/test_auto_summary_ledger.py +0 -0
  298. {jfox_cli-1.6.0 → jfox_cli-1.7.0}/tests/unit/test_auto_summary_loop.py +0 -0
  299. {jfox_cli-1.6.0 → jfox_cli-1.7.0}/tests/unit/test_auto_summary_runner.py +0 -0
  300. {jfox_cli-1.6.0 → jfox_cli-1.7.0}/tests/unit/test_auto_summary_scanner.py +0 -0
  301. {jfox_cli-1.6.0 → jfox_cli-1.7.0}/tests/unit/test_auto_summary_schedule.py +0 -0
  302. {jfox_cli-1.6.0 → jfox_cli-1.7.0}/tests/unit/test_auto_summary_status.py +0 -0
  303. {jfox_cli-1.6.0 → jfox_cli-1.7.0}/tests/unit/test_backup.py +0 -0
  304. {jfox_cli-1.6.0 → jfox_cli-1.7.0}/tests/unit/test_bm25_batch.py +0 -0
  305. {jfox_cli-1.6.0 → jfox_cli-1.7.0}/tests/unit/test_check.py +0 -0
  306. {jfox_cli-1.6.0 → jfox_cli-1.7.0}/tests/unit/test_content_file.py +0 -0
  307. {jfox_cli-1.6.0 → jfox_cli-1.7.0}/tests/unit/test_daemon_cli.py +0 -0
  308. {jfox_cli-1.6.0 → jfox_cli-1.7.0}/tests/unit/test_daemon_process.py +0 -0
  309. {jfox_cli-1.6.0 → jfox_cli-1.7.0}/tests/unit/test_edit.py +0 -0
  310. {jfox_cli-1.6.0 → jfox_cli-1.7.0}/tests/unit/test_embedding_local_load.py +0 -0
  311. {jfox_cli-1.6.0 → jfox_cli-1.7.0}/tests/unit/test_format_unify.py +0 -0
  312. {jfox_cli-1.6.0 → jfox_cli-1.7.0}/tests/unit/test_formatters.py +0 -0
  313. {jfox_cli-1.6.0 → jfox_cli-1.7.0}/tests/unit/test_fragment_cli.py +0 -0
  314. {jfox_cli-1.6.0 → jfox_cli-1.7.0}/tests/unit/test_fragment_config.py +0 -0
  315. {jfox_cli-1.6.0 → jfox_cli-1.7.0}/tests/unit/test_fragment_detector.py +0 -0
  316. {jfox_cli-1.6.0 → jfox_cli-1.7.0}/tests/unit/test_fragment_hook.py +0 -0
  317. {jfox_cli-1.6.0 → jfox_cli-1.7.0}/tests/unit/test_fragment_internal_sources.py +0 -0
  318. {jfox_cli-1.6.0 → jfox_cli-1.7.0}/tests/unit/test_fragment_service.py +0 -0
  319. {jfox_cli-1.6.0 → jfox_cli-1.7.0}/tests/unit/test_fragment_store.py +0 -0
  320. {jfox_cli-1.6.0 → jfox_cli-1.7.0}/tests/unit/test_gem_synth_anchors.py +0 -0
  321. {jfox_cli-1.6.0 → jfox_cli-1.7.0}/tests/unit/test_gem_synth_backfill.py +0 -0
  322. {jfox_cli-1.6.0 → jfox_cli-1.7.0}/tests/unit/test_gem_synth_cli.py +0 -0
  323. {jfox_cli-1.6.0 → jfox_cli-1.7.0}/tests/unit/test_gem_synth_config.py +0 -0
  324. {jfox_cli-1.6.0 → jfox_cli-1.7.0}/tests/unit/test_gem_synth_config_dedup.py +0 -0
  325. {jfox_cli-1.6.0 → jfox_cli-1.7.0}/tests/unit/test_gem_synth_dedup.py +0 -0
  326. {jfox_cli-1.6.0 → jfox_cli-1.7.0}/tests/unit/test_gem_synth_grounding.py +0 -0
  327. {jfox_cli-1.6.0 → jfox_cli-1.7.0}/tests/unit/test_gem_synth_lifecycle.py +0 -0
  328. {jfox_cli-1.6.0 → jfox_cli-1.7.0}/tests/unit/test_gem_synth_llm.py +0 -0
  329. {jfox_cli-1.6.0 → jfox_cli-1.7.0}/tests/unit/test_gem_synth_loop.py +0 -0
  330. {jfox_cli-1.6.0 → jfox_cli-1.7.0}/tests/unit/test_gem_synth_store.py +0 -0
  331. {jfox_cli-1.6.0 → jfox_cli-1.7.0}/tests/unit/test_gem_synth_store_duplicate.py +0 -0
  332. {jfox_cli-1.6.0 → jfox_cli-1.7.0}/tests/unit/test_gem_synth_synthesizer.py +0 -0
  333. {jfox_cli-1.6.0 → jfox_cli-1.7.0}/tests/unit/test_gem_synth_transcript.py +0 -0
  334. {jfox_cli-1.6.0 → jfox_cli-1.7.0}/tests/unit/test_git_extractor.py +0 -0
  335. {jfox_cli-1.6.0 → jfox_cli-1.7.0}/tests/unit/test_global_config.py +0 -0
  336. {jfox_cli-1.6.0 → jfox_cli-1.7.0}/tests/unit/test_index_kb_param.py +0 -0
  337. {jfox_cli-1.6.0 → jfox_cli-1.7.0}/tests/unit/test_indexer_clear_before_rebuild.py +0 -0
  338. {jfox_cli-1.6.0 → jfox_cli-1.7.0}/tests/unit/test_indexer_verify.py +0 -0
  339. {jfox_cli-1.6.0 → jfox_cli-1.7.0}/tests/unit/test_kb_manager.py +0 -0
  340. {jfox_cli-1.6.0 → jfox_cli-1.7.0}/tests/unit/test_kimi_extractor.py +0 -0
  341. {jfox_cli-1.6.0 → jfox_cli-1.7.0}/tests/unit/test_kimi_plugin_skills.py +0 -0
  342. {jfox_cli-1.6.0 → jfox_cli-1.7.0}/tests/unit/test_kimi_scanner.py +0 -0
  343. {jfox_cli-1.6.0 → jfox_cli-1.7.0}/tests/unit/test_lazy_import.py +0 -0
  344. {jfox_cli-1.6.0 → jfox_cli-1.7.0}/tests/unit/test_ledger_migration.py +0 -0
  345. {jfox_cli-1.6.0 → jfox_cli-1.7.0}/tests/unit/test_list_notes_skip.py +0 -0
  346. {jfox_cli-1.6.0 → jfox_cli-1.7.0}/tests/unit/test_logging_config.py +0 -0
  347. {jfox_cli-1.6.0 → jfox_cli-1.7.0}/tests/unit/test_model_downloader.py +0 -0
  348. {jfox_cli-1.6.0 → jfox_cli-1.7.0}/tests/unit/test_note_candidate_fields.py +0 -0
  349. {jfox_cli-1.6.0 → jfox_cli-1.7.0}/tests/unit/test_note_candidate_filename.py +0 -0
  350. {jfox_cli-1.6.0 → jfox_cli-1.7.0}/tests/unit/test_note_dedup_sync.py +0 -0
  351. {jfox_cli-1.6.0 → jfox_cli-1.7.0}/tests/unit/test_note_index.py +0 -0
  352. {jfox_cli-1.6.0 → jfox_cli-1.7.0}/tests/unit/test_note_lifecycle_hooks.py +0 -0
  353. {jfox_cli-1.6.0 → jfox_cli-1.7.0}/tests/unit/test_note_promote.py +0 -0
  354. {jfox_cli-1.6.0 → jfox_cli-1.7.0}/tests/unit/test_note_type_candidate.py +0 -0
  355. {jfox_cli-1.6.0 → jfox_cli-1.7.0}/tests/unit/test_rebuild_backlinks_impl.py +0 -0
  356. {jfox_cli-1.6.0 → jfox_cli-1.7.0}/tests/unit/test_release_all_helper.py +0 -0
  357. {jfox_cli-1.6.0 → jfox_cli-1.7.0}/tests/unit/test_release_cc_plugin_helper.py +0 -0
  358. {jfox_cli-1.6.0 → jfox_cli-1.7.0}/tests/unit/test_release_helper.py +0 -0
  359. {jfox_cli-1.6.0 → jfox_cli-1.7.0}/tests/unit/test_release_helper_verify.py +0 -0
  360. {jfox_cli-1.6.0 → jfox_cli-1.7.0}/tests/unit/test_release_kimi_plugin_helper.py +0 -0
  361. {jfox_cli-1.6.0 → jfox_cli-1.7.0}/tests/unit/test_runner_multi_source.py +0 -0
  362. {jfox_cli-1.6.0 → jfox_cli-1.7.0}/tests/unit/test_scanner_list.py +0 -0
  363. {jfox_cli-1.6.0 → jfox_cli-1.7.0}/tests/unit/test_session_file_source.py +0 -0
  364. {jfox_cli-1.6.0 → jfox_cli-1.7.0}/tests/unit/test_session_note.py +0 -0
  365. {jfox_cli-1.6.0 → jfox_cli-1.7.0}/tests/unit/test_session_source.py +0 -0
  366. {jfox_cli-1.6.0 → jfox_cli-1.7.0}/tests/unit/test_show.py +0 -0
  367. {jfox_cli-1.6.0 → jfox_cli-1.7.0}/tests/unit/test_synthesizer_dedup.py +0 -0
  368. {jfox_cli-1.6.0 → jfox_cli-1.7.0}/tests/unit/test_system_prompt_sections.py +0 -0
  369. {jfox_cli-1.6.0 → jfox_cli-1.7.0}/tests/unit/test_tag_filter.py +0 -0
  370. {jfox_cli-1.6.0 → jfox_cli-1.7.0}/tests/unit/test_template.py +0 -0
  371. {jfox_cli-1.6.0 → jfox_cli-1.7.0}/tests/unit/test_template_cli.py +0 -0
  372. {jfox_cli-1.6.0 → jfox_cli-1.7.0}/tests/unit/test_update.py +0 -0
  373. {jfox_cli-1.6.0 → jfox_cli-1.7.0}/tests/unit/test_use_kb_env_var.py +0 -0
  374. {jfox_cli-1.6.0 → jfox_cli-1.7.0}/tests/unit/test_using_jfox_skill.py +0 -0
  375. {jfox_cli-1.6.0 → jfox_cli-1.7.0}/tests/unit/test_vector_store_clear.py +0 -0
  376. {jfox_cli-1.6.0 → jfox_cli-1.7.0}/tests/utils/__init__.py +0 -0
  377. {jfox_cli-1.6.0 → jfox_cli-1.7.0}/tests/utils/assertions.py +0 -0
  378. {jfox_cli-1.6.0 → jfox_cli-1.7.0}/tests/utils/jfox_cli.py +0 -0
  379. {jfox_cli-1.6.0 → jfox_cli-1.7.0}/tests/utils/note_generator.py +0 -0
  380. {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.0"
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.0",
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/` — 8 skills: `search`, `ingest`, `manage`, `organize`, `promote`, `session-summary`, `using-jfox`, `bookshelf`
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.6.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`
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: jfox-cli
3
- Version: 1.6.0
3
+ Version: 1.7.0
4
4
  Summary: JFox - Zettelkasten 知识管理 CLI 工具
5
5
  Project-URL: Homepage, https://github.com/zhuxixi/jfox
6
6
  Project-URL: Repository, https://github.com/zhuxixi/jfox
@@ -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 备份状态(脚本前置检查读它) |