jfox-cli 1.2.2__tar.gz → 1.2.3__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 (283) hide show
  1. {jfox_cli-1.2.2 → jfox_cli-1.2.3}/CHANGELOG.md +7 -0
  2. {jfox_cli-1.2.2 → jfox_cli-1.2.3}/PKG-INFO +1 -1
  3. {jfox_cli-1.2.2 → jfox_cli-1.2.3}/jfox/__init__.py +1 -1
  4. {jfox_cli-1.2.2 → jfox_cli-1.2.3}/jfox/daemon/server.py +12 -0
  5. {jfox_cli-1.2.2 → jfox_cli-1.2.3}/jfox/gem_synth/anchors.py +21 -15
  6. {jfox_cli-1.2.2 → jfox_cli-1.2.3}/pyproject.toml +1 -1
  7. {jfox_cli-1.2.2 → jfox_cli-1.2.3}/tests/unit/test_gem_synth_anchors.py +30 -0
  8. {jfox_cli-1.2.2 → jfox_cli-1.2.3}/uv.lock +1 -1
  9. {jfox_cli-1.2.2 → jfox_cli-1.2.3}/.claude/skills/ci/SKILL.md +0 -0
  10. {jfox_cli-1.2.2 → jfox_cli-1.2.3}/.claude/skills/release/SKILL.md +0 -0
  11. {jfox_cli-1.2.2 → jfox_cli-1.2.3}/.claude/skills/release/release_helper.py +0 -0
  12. {jfox_cli-1.2.2 → jfox_cli-1.2.3}/.claude-plugin/marketplace.json +0 -0
  13. {jfox_cli-1.2.2 → jfox_cli-1.2.3}/.githooks/pre-push +0 -0
  14. {jfox_cli-1.2.2 → jfox_cli-1.2.3}/.github/ISSUE_TEMPLATE/bug_report.yml +0 -0
  15. {jfox_cli-1.2.2 → jfox_cli-1.2.3}/.github/ISSUE_TEMPLATE/config.yml +0 -0
  16. {jfox_cli-1.2.2 → jfox_cli-1.2.3}/.github/ISSUE_TEMPLATE/docs_improvement.yml +0 -0
  17. {jfox_cli-1.2.2 → jfox_cli-1.2.3}/.github/ISSUE_TEMPLATE/feature_request.yml +0 -0
  18. {jfox_cli-1.2.2 → jfox_cli-1.2.3}/.github/PULL_REQUEST_TEMPLATE.md +0 -0
  19. {jfox_cli-1.2.2 → jfox_cli-1.2.3}/.github/workflows/integration-test.yml +0 -0
  20. {jfox_cli-1.2.2 → jfox_cli-1.2.3}/.github/workflows/publish.yml +0 -0
  21. {jfox_cli-1.2.2 → jfox_cli-1.2.3}/.gitignore +0 -0
  22. {jfox_cli-1.2.2 → jfox_cli-1.2.3}/.python-version +0 -0
  23. {jfox_cli-1.2.2 → jfox_cli-1.2.3}/AGENTS.md +0 -0
  24. {jfox_cli-1.2.2 → jfox_cli-1.2.3}/CLAUDE.md +0 -0
  25. {jfox_cli-1.2.2 → jfox_cli-1.2.3}/DEVELOPMENT_PLAN.md +0 -0
  26. {jfox_cli-1.2.2 → jfox_cli-1.2.3}/README.md +0 -0
  27. {jfox_cli-1.2.2 → jfox_cli-1.2.3}/SESSION.md +0 -0
  28. {jfox_cli-1.2.2 → jfox_cli-1.2.3}/SESSION_SUMMARY.md +0 -0
  29. {jfox_cli-1.2.2 → jfox_cli-1.2.3}/docs/claude-code-plugin-guide.md +0 -0
  30. {jfox_cli-1.2.2 → jfox_cli-1.2.3}/docs/installation.md +0 -0
  31. {jfox_cli-1.2.2 → jfox_cli-1.2.3}/docs/superpowers/plans/2026-04-11-bulk-import-bm25-fix.md +0 -0
  32. {jfox_cli-1.2.2 → jfox_cli-1.2.3}/docs/superpowers/plans/2026-04-11-edit-command.md +0 -0
  33. {jfox_cli-1.2.2 → jfox_cli-1.2.3}/docs/superpowers/plans/2026-04-11-unify-format-option.md +0 -0
  34. {jfox_cli-1.2.2 → jfox_cli-1.2.3}/docs/superpowers/plans/2026-04-12-ci-coverage-optimization.md +0 -0
  35. {jfox_cli-1.2.2 → jfox_cli-1.2.3}/docs/superpowers/plans/2026-04-12-edit-content-file.md +0 -0
  36. {jfox_cli-1.2.2 → jfox_cli-1.2.3}/docs/superpowers/plans/2026-04-12-fix-index-rebuild-clear.md +0 -0
  37. {jfox_cli-1.2.2 → jfox_cli-1.2.3}/docs/superpowers/plans/2026-04-12-fix-index-verify-id-mismatch.md +0 -0
  38. {jfox_cli-1.2.2 → jfox_cli-1.2.3}/docs/superpowers/plans/2026-04-12-fix-jfox-health-skill-kb-param.md +0 -0
  39. {jfox_cli-1.2.2 → jfox_cli-1.2.3}/docs/superpowers/plans/2026-04-12-index-kb-param.md +0 -0
  40. {jfox_cli-1.2.2 → jfox_cli-1.2.3}/docs/superpowers/plans/2026-04-12-lazy-import-perf.md +0 -0
  41. {jfox_cli-1.2.2 → jfox_cli-1.2.3}/docs/superpowers/plans/2026-04-12-skill-redesign.md +0 -0
  42. {jfox_cli-1.2.2 → jfox_cli-1.2.3}/docs/superpowers/plans/2026-04-13-add-content-file.md +0 -0
  43. {jfox_cli-1.2.2 → jfox_cli-1.2.3}/docs/superpowers/plans/2026-04-13-bulk-import-vectorstore-init.md +0 -0
  44. {jfox_cli-1.2.2 → jfox_cli-1.2.3}/docs/superpowers/plans/2026-04-13-ingest-log-command.md +0 -0
  45. {jfox_cli-1.2.2 → jfox_cli-1.2.3}/docs/superpowers/plans/2026-04-13-ingest-skill-sync.md +0 -0
  46. {jfox_cli-1.2.2 → jfox_cli-1.2.3}/docs/superpowers/plans/2026-04-13-suppress-third-party-logging.md +0 -0
  47. {jfox_cli-1.2.2 → jfox_cli-1.2.3}/docs/superpowers/plans/2026-04-13-sync-skills-with-cli.md +0 -0
  48. {jfox_cli-1.2.2 → jfox_cli-1.2.3}/docs/superpowers/plans/2026-04-14-sync-docs-daemon-show.md +0 -0
  49. {jfox_cli-1.2.2 → jfox_cli-1.2.3}/docs/superpowers/plans/2026-04-15-gpu-embedding.md +0 -0
  50. {jfox_cli-1.2.2 → jfox_cli-1.2.3}/docs/superpowers/plans/2026-04-15-make-daemon-deps-required.md +0 -0
  51. {jfox_cli-1.2.2 → jfox_cli-1.2.3}/docs/superpowers/plans/2026-04-15-session-summary-confirmation.md +0 -0
  52. {jfox_cli-1.2.2 → jfox_cli-1.2.3}/docs/superpowers/plans/2026-04-16-fix-windows-daemon-console-window.md +0 -0
  53. {jfox_cli-1.2.2 → jfox_cli-1.2.3}/docs/superpowers/plans/2026-04-18-daemon-timeout-and-index-rebuild.md +0 -0
  54. {jfox_cli-1.2.2 → jfox_cli-1.2.3}/docs/superpowers/plans/2026-04-22-release-skill.md +0 -0
  55. {jfox_cli-1.2.2 → jfox_cli-1.2.3}/docs/superpowers/plans/2026-04-26-fix-daemon-deprecation-warnings.md +0 -0
  56. {jfox_cli-1.2.2 → jfox_cli-1.2.3}/docs/superpowers/plans/2026-04-27-intranet-model-download.md +0 -0
  57. {jfox_cli-1.2.2 → jfox_cli-1.2.3}/docs/superpowers/plans/2026-04-28-tag-filtering.md +0 -0
  58. {jfox_cli-1.2.2 → jfox_cli-1.2.3}/docs/superpowers/plans/2026-04-29-daemon-stop-fix.md +0 -0
  59. {jfox_cli-1.2.2 → jfox_cli-1.2.3}/docs/superpowers/plans/2026-05-03-jfox-check.md +0 -0
  60. {jfox_cli-1.2.2 → jfox_cli-1.2.3}/docs/superpowers/plans/2026-05-03-list-notes-skip-summary.md +0 -0
  61. {jfox_cli-1.2.2 → jfox_cli-1.2.3}/docs/superpowers/plans/2026-05-03-log-level-fix.md +0 -0
  62. {jfox_cli-1.2.2 → jfox_cli-1.2.3}/docs/superpowers/plans/2026-05-04-list-notes-index.md +0 -0
  63. {jfox_cli-1.2.2 → jfox_cli-1.2.3}/docs/superpowers/plans/2026-05-06-atomic-write.md +0 -0
  64. {jfox_cli-1.2.2 → jfox_cli-1.2.3}/docs/superpowers/plans/2026-05-09-session-note-type.md +0 -0
  65. {jfox_cli-1.2.2 → jfox_cli-1.2.3}/docs/superpowers/plans/2026-05-10-jfox-plugin.md +0 -0
  66. {jfox_cli-1.2.2 → jfox_cli-1.2.3}/docs/superpowers/plans/2026-05-19-fix-last-used-never.md +0 -0
  67. {jfox_cli-1.2.2 → jfox_cli-1.2.3}/docs/superpowers/plans/2026-05-20-modelscope-migration.md +0 -0
  68. {jfox_cli-1.2.2 → jfox_cli-1.2.3}/docs/superpowers/plans/2026-06-02-todo-note-type.md +0 -0
  69. {jfox_cli-1.2.2 → jfox_cli-1.2.3}/docs/superpowers/plans/2026-06-16-kimi-code-auto-summary.md +0 -0
  70. {jfox_cli-1.2.2 → jfox_cli-1.2.3}/docs/superpowers/plans/2026-06-17-index-rebuild-backlinks.md +0 -0
  71. {jfox_cli-1.2.2 → jfox_cli-1.2.3}/docs/superpowers/plans/2026-06-17-using-jfox-skill.md +0 -0
  72. {jfox_cli-1.2.2 → jfox_cli-1.2.3}/docs/superpowers/plans/2026-06-18-self-update-command.md +0 -0
  73. {jfox_cli-1.2.2 → jfox_cli-1.2.3}/docs/superpowers/plans/2026-06-21-fragment-capture.md +0 -0
  74. {jfox_cli-1.2.2 → jfox_cli-1.2.3}/docs/superpowers/plans/2026-06-21-gem-synthesis.md +0 -0
  75. {jfox_cli-1.2.2 → jfox_cli-1.2.3}/docs/superpowers/plans/2026-06-25-gem-synth-throttle-ledger.md +0 -0
  76. {jfox_cli-1.2.2 → jfox_cli-1.2.3}/docs/superpowers/specs/2026-04-03-bugfixes-design.md +0 -0
  77. {jfox_cli-1.2.2 → jfox_cli-1.2.3}/docs/superpowers/specs/2026-04-12-skill-redesign-design.md +0 -0
  78. {jfox_cli-1.2.2 → jfox_cli-1.2.3}/docs/superpowers/specs/2026-04-13-pr-auto-code-review-design.md +0 -0
  79. {jfox_cli-1.2.2 → jfox_cli-1.2.3}/docs/superpowers/specs/2026-04-14-show-command-design.md +0 -0
  80. {jfox_cli-1.2.2 → jfox_cli-1.2.3}/docs/superpowers/specs/2026-04-15-gpu-embedding-design.md +0 -0
  81. {jfox_cli-1.2.2 → jfox_cli-1.2.3}/docs/superpowers/specs/2026-04-15-session-summary-confirmation-design.md +0 -0
  82. {jfox_cli-1.2.2 → jfox_cli-1.2.3}/docs/superpowers/specs/2026-04-21-release-skill-design.md +0 -0
  83. {jfox_cli-1.2.2 → jfox_cli-1.2.3}/docs/superpowers/specs/2026-04-26-fix-daemon-deprecation-warnings-design.md +0 -0
  84. {jfox_cli-1.2.2 → jfox_cli-1.2.3}/docs/superpowers/specs/2026-04-27-intranet-model-download-design.md +0 -0
  85. {jfox_cli-1.2.2 → jfox_cli-1.2.3}/docs/superpowers/specs/2026-04-28-tag-filtering-design.md +0 -0
  86. {jfox_cli-1.2.2 → jfox_cli-1.2.3}/docs/superpowers/specs/2026-04-29-daemon-stop-fix-design.md +0 -0
  87. {jfox_cli-1.2.2 → jfox_cli-1.2.3}/docs/superpowers/specs/2026-04-30-jfox-kb-env-var-design.md +0 -0
  88. {jfox_cli-1.2.2 → jfox_cli-1.2.3}/docs/superpowers/specs/2026-05-03-jfox-check-design.md +0 -0
  89. {jfox_cli-1.2.2 → jfox_cli-1.2.3}/docs/superpowers/specs/2026-05-03-list-notes-skip-summary-design.md +0 -0
  90. {jfox_cli-1.2.2 → jfox_cli-1.2.3}/docs/superpowers/specs/2026-05-03-log-level-fix-design.md +0 -0
  91. {jfox_cli-1.2.2 → jfox_cli-1.2.3}/docs/superpowers/specs/2026-05-04-list-notes-index-design.md +0 -0
  92. {jfox_cli-1.2.2 → jfox_cli-1.2.3}/docs/superpowers/specs/2026-05-06-atomic-write-design.md +0 -0
  93. {jfox_cli-1.2.2 → jfox_cli-1.2.3}/docs/superpowers/specs/2026-05-09-jfox-plugin-design.md +0 -0
  94. {jfox_cli-1.2.2 → jfox_cli-1.2.3}/docs/superpowers/specs/2026-05-09-session-note-type-design.md +0 -0
  95. {jfox_cli-1.2.2 → jfox_cli-1.2.3}/docs/superpowers/specs/2026-05-20-modelscope-migration-design.md +0 -0
  96. {jfox_cli-1.2.2 → jfox_cli-1.2.3}/docs/superpowers/specs/2026-06-02-todo-note-type-design.md +0 -0
  97. {jfox_cli-1.2.2 → jfox_cli-1.2.3}/docs/superpowers/specs/2026-06-16-kimi-code-auto-summary-design.md +0 -0
  98. {jfox_cli-1.2.2 → jfox_cli-1.2.3}/docs/superpowers/specs/2026-06-17-index-rebuild-backlinks-design.md +0 -0
  99. {jfox_cli-1.2.2 → jfox_cli-1.2.3}/docs/superpowers/specs/2026-06-17-using-jfox-skill-design.md +0 -0
  100. {jfox_cli-1.2.2 → jfox_cli-1.2.3}/docs/superpowers/specs/2026-06-18-archive-soft-delete-design.md +0 -0
  101. {jfox_cli-1.2.2 → jfox_cli-1.2.3}/docs/superpowers/specs/2026-06-18-self-update-command-design.md +0 -0
  102. {jfox_cli-1.2.2 → jfox_cli-1.2.3}/docs/superpowers/specs/2026-06-21-fragment-capture-design.md +0 -0
  103. {jfox_cli-1.2.2 → jfox_cli-1.2.3}/docs/superpowers/specs/2026-06-21-gem-synthesis-design.md +0 -0
  104. {jfox_cli-1.2.2 → jfox_cli-1.2.3}/docs/superpowers/specs/2026-06-25-gem-synth-throttle-ledger-design.md +0 -0
  105. {jfox_cli-1.2.2 → jfox_cli-1.2.3}/docs/troubleshooting.md +0 -0
  106. {jfox_cli-1.2.2 → jfox_cli-1.2.3}/jessica-jones-static-cable.md +0 -0
  107. {jfox_cli-1.2.2 → jfox_cli-1.2.3}/jfox/__main__.py +0 -0
  108. {jfox_cli-1.2.2 → jfox_cli-1.2.3}/jfox/auto_summary/__init__.py +0 -0
  109. {jfox_cli-1.2.2 → jfox_cli-1.2.3}/jfox/auto_summary/cli.py +0 -0
  110. {jfox_cli-1.2.2 → jfox_cli-1.2.3}/jfox/auto_summary/extractor.py +0 -0
  111. {jfox_cli-1.2.2 → jfox_cli-1.2.3}/jfox/auto_summary/kimi_source.py +0 -0
  112. {jfox_cli-1.2.2 → jfox_cli-1.2.3}/jfox/auto_summary/ledger.py +0 -0
  113. {jfox_cli-1.2.2 → jfox_cli-1.2.3}/jfox/auto_summary/loop.py +0 -0
  114. {jfox_cli-1.2.2 → jfox_cli-1.2.3}/jfox/auto_summary/runner.py +0 -0
  115. {jfox_cli-1.2.2 → jfox_cli-1.2.3}/jfox/auto_summary/scanner.py +0 -0
  116. {jfox_cli-1.2.2 → jfox_cli-1.2.3}/jfox/auto_summary/sources.py +0 -0
  117. {jfox_cli-1.2.2 → jfox_cli-1.2.3}/jfox/bm25_index.py +0 -0
  118. {jfox_cli-1.2.2 → jfox_cli-1.2.3}/jfox/cli.py +0 -0
  119. {jfox_cli-1.2.2 → jfox_cli-1.2.3}/jfox/config.py +0 -0
  120. {jfox_cli-1.2.2 → jfox_cli-1.2.3}/jfox/daemon/__init__.py +0 -0
  121. {jfox_cli-1.2.2 → jfox_cli-1.2.3}/jfox/daemon/__main__.py +0 -0
  122. {jfox_cli-1.2.2 → jfox_cli-1.2.3}/jfox/daemon/client.py +0 -0
  123. {jfox_cli-1.2.2 → jfox_cli-1.2.3}/jfox/daemon/process.py +0 -0
  124. {jfox_cli-1.2.2 → jfox_cli-1.2.3}/jfox/embedding_backend.py +0 -0
  125. {jfox_cli-1.2.2 → jfox_cli-1.2.3}/jfox/formatters.py +0 -0
  126. {jfox_cli-1.2.2 → jfox_cli-1.2.3}/jfox/fragment/__init__.py +0 -0
  127. {jfox_cli-1.2.2 → jfox_cli-1.2.3}/jfox/fragment/cli.py +0 -0
  128. {jfox_cli-1.2.2 → jfox_cli-1.2.3}/jfox/fragment/detector.py +0 -0
  129. {jfox_cli-1.2.2 → jfox_cli-1.2.3}/jfox/fragment/service.py +0 -0
  130. {jfox_cli-1.2.2 → jfox_cli-1.2.3}/jfox/fragment/store.py +0 -0
  131. {jfox_cli-1.2.2 → jfox_cli-1.2.3}/jfox/gem_synth/__init__.py +0 -0
  132. {jfox_cli-1.2.2 → jfox_cli-1.2.3}/jfox/gem_synth/cli.py +0 -0
  133. {jfox_cli-1.2.2 → jfox_cli-1.2.3}/jfox/gem_synth/grounding.py +0 -0
  134. {jfox_cli-1.2.2 → jfox_cli-1.2.3}/jfox/gem_synth/llm.py +0 -0
  135. {jfox_cli-1.2.2 → jfox_cli-1.2.3}/jfox/gem_synth/loop.py +0 -0
  136. {jfox_cli-1.2.2 → jfox_cli-1.2.3}/jfox/gem_synth/paths.py +0 -0
  137. {jfox_cli-1.2.2 → jfox_cli-1.2.3}/jfox/gem_synth/store.py +0 -0
  138. {jfox_cli-1.2.2 → jfox_cli-1.2.3}/jfox/gem_synth/synthesizer.py +0 -0
  139. {jfox_cli-1.2.2 → jfox_cli-1.2.3}/jfox/gem_synth/transcript.py +0 -0
  140. {jfox_cli-1.2.2 → jfox_cli-1.2.3}/jfox/git_extractor.py +0 -0
  141. {jfox_cli-1.2.2 → jfox_cli-1.2.3}/jfox/global_config.py +0 -0
  142. {jfox_cli-1.2.2 → jfox_cli-1.2.3}/jfox/graph.py +0 -0
  143. {jfox_cli-1.2.2 → jfox_cli-1.2.3}/jfox/indexer.py +0 -0
  144. {jfox_cli-1.2.2 → jfox_cli-1.2.3}/jfox/kb_manager.py +0 -0
  145. {jfox_cli-1.2.2 → jfox_cli-1.2.3}/jfox/model_downloader.py +0 -0
  146. {jfox_cli-1.2.2 → jfox_cli-1.2.3}/jfox/models.py +0 -0
  147. {jfox_cli-1.2.2 → jfox_cli-1.2.3}/jfox/note.py +0 -0
  148. {jfox_cli-1.2.2 → jfox_cli-1.2.3}/jfox/note_index.py +0 -0
  149. {jfox_cli-1.2.2 → jfox_cli-1.2.3}/jfox/performance.py +0 -0
  150. {jfox_cli-1.2.2 → jfox_cli-1.2.3}/jfox/search_engine.py +0 -0
  151. {jfox_cli-1.2.2 → jfox_cli-1.2.3}/jfox/template.py +0 -0
  152. {jfox_cli-1.2.2 → jfox_cli-1.2.3}/jfox/template_cli.py +0 -0
  153. {jfox_cli-1.2.2 → jfox_cli-1.2.3}/jfox/utils.py +0 -0
  154. {jfox_cli-1.2.2 → jfox_cli-1.2.3}/jfox/vector_store.py +0 -0
  155. {jfox_cli-1.2.2 → jfox_cli-1.2.3}/package.json +0 -0
  156. {jfox_cli-1.2.2 → jfox_cli-1.2.3}/packages/cc-plugin/.claude-plugin/plugin.json +0 -0
  157. {jfox_cli-1.2.2 → jfox_cli-1.2.3}/packages/cc-plugin/hooks/fragment-capture.sh +0 -0
  158. {jfox_cli-1.2.2 → jfox_cli-1.2.3}/packages/cc-plugin/hooks/hooks.json +0 -0
  159. {jfox_cli-1.2.2 → jfox_cli-1.2.3}/packages/cc-plugin/skills/ingest/SKILL.md +0 -0
  160. {jfox_cli-1.2.2 → jfox_cli-1.2.3}/packages/cc-plugin/skills/manage/SKILL.md +0 -0
  161. {jfox_cli-1.2.2 → jfox_cli-1.2.3}/packages/cc-plugin/skills/organize/SKILL.md +0 -0
  162. {jfox_cli-1.2.2 → jfox_cli-1.2.3}/packages/cc-plugin/skills/search/SKILL.md +0 -0
  163. {jfox_cli-1.2.2 → jfox_cli-1.2.3}/packages/cc-plugin/skills/session-summary/SKILL.md +0 -0
  164. {jfox_cli-1.2.2 → jfox_cli-1.2.3}/packages/cc-plugin/skills/using-jfox/SKILL.md +0 -0
  165. {jfox_cli-1.2.2 → jfox_cli-1.2.3}/packages/kimi-plugin/README.md +0 -0
  166. {jfox_cli-1.2.2 → jfox_cli-1.2.3}/packages/kimi-plugin/kimi.plugin.json +0 -0
  167. {jfox_cli-1.2.2 → jfox_cli-1.2.3}/packages/kimi-plugin/skills/jfox-ingest/SKILL.md +0 -0
  168. {jfox_cli-1.2.2 → jfox_cli-1.2.3}/packages/kimi-plugin/skills/jfox-manage/SKILL.md +0 -0
  169. {jfox_cli-1.2.2 → jfox_cli-1.2.3}/packages/kimi-plugin/skills/jfox-organize/SKILL.md +0 -0
  170. {jfox_cli-1.2.2 → jfox_cli-1.2.3}/packages/kimi-plugin/skills/jfox-search/SKILL.md +0 -0
  171. {jfox_cli-1.2.2 → jfox_cli-1.2.3}/packages/kimi-plugin/skills/jfox-session-summary/SKILL.md +0 -0
  172. {jfox_cli-1.2.2 → jfox_cli-1.2.3}/packages/kimi-plugin/skills/using-jfox/SKILL.md +0 -0
  173. {jfox_cli-1.2.2 → jfox_cli-1.2.3}/pytest.ini +0 -0
  174. {jfox_cli-1.2.2 → jfox_cli-1.2.3}/run_full_test.ps1 +0 -0
  175. {jfox_cli-1.2.2 → jfox_cli-1.2.3}/scripts/download-model-intranet.sh +0 -0
  176. {jfox_cli-1.2.2 → jfox_cli-1.2.3}/skills-recommend/README.md +0 -0
  177. {jfox_cli-1.2.2 → jfox_cli-1.2.3}/skills-recommend/kimi-cli/jfox-common/SKILL.md +0 -0
  178. {jfox_cli-1.2.2 → jfox_cli-1.2.3}/skills-recommend/kimi-cli/jfox-ingest/SKILL.md +0 -0
  179. {jfox_cli-1.2.2 → jfox_cli-1.2.3}/skills-recommend/kimi-cli/jfox-organize/SKILL.md +0 -0
  180. {jfox_cli-1.2.2 → jfox_cli-1.2.3}/skills-recommend/kimi-cli/jfox-search/SKILL.md +0 -0
  181. {jfox_cli-1.2.2 → jfox_cli-1.2.3}/skills-recommend/kimi-cli/jfox-session-summary/SKILL.md +0 -0
  182. {jfox_cli-1.2.2 → jfox_cli-1.2.3}/skills-recommend/pi/jfox-ci/SKILL.md +0 -0
  183. {jfox_cli-1.2.2 → jfox_cli-1.2.3}/skills-recommend/pi/jfox-common/SKILL.md +0 -0
  184. {jfox_cli-1.2.2 → jfox_cli-1.2.3}/skills-recommend/pi/jfox-ingest/SKILL.md +0 -0
  185. {jfox_cli-1.2.2 → jfox_cli-1.2.3}/skills-recommend/pi/jfox-organize/SKILL.md +0 -0
  186. {jfox_cli-1.2.2 → jfox_cli-1.2.3}/skills-recommend/pi/jfox-release/SKILL.md +0 -0
  187. {jfox_cli-1.2.2 → jfox_cli-1.2.3}/skills-recommend/pi/jfox-search/SKILL.md +0 -0
  188. {jfox_cli-1.2.2 → jfox_cli-1.2.3}/skills-recommend/pi/jfox-session-summary/SKILL.md +0 -0
  189. {jfox_cli-1.2.2 → jfox_cli-1.2.3}/tests/COVERAGE_PLAN.md +0 -0
  190. {jfox_cli-1.2.2 → jfox_cli-1.2.3}/tests/MIGRATION.md +0 -0
  191. {jfox_cli-1.2.2 → jfox_cli-1.2.3}/tests/TESTS.md +0 -0
  192. {jfox_cli-1.2.2 → jfox_cli-1.2.3}/tests/conftest.py +0 -0
  193. {jfox_cli-1.2.2 → jfox_cli-1.2.3}/tests/integration/__init__.py +0 -0
  194. {jfox_cli-1.2.2 → jfox_cli-1.2.3}/tests/integration/test_auto_summary_kimi.py +0 -0
  195. {jfox_cli-1.2.2 → jfox_cli-1.2.3}/tests/integration/test_backlinks.py +0 -0
  196. {jfox_cli-1.2.2 → jfox_cli-1.2.3}/tests/integration/test_fragment_capture_flow.py +0 -0
  197. {jfox_cli-1.2.2 → jfox_cli-1.2.3}/tests/integration/test_gem_synth_flow.py +0 -0
  198. {jfox_cli-1.2.2 → jfox_cli-1.2.3}/tests/integration/test_index_rebuild_backlinks.py +0 -0
  199. {jfox_cli-1.2.2 → jfox_cli-1.2.3}/tests/integration/test_model_download.py +0 -0
  200. {jfox_cli-1.2.2 → jfox_cli-1.2.3}/tests/integration/test_tag_filter_cli.py +0 -0
  201. {jfox_cli-1.2.2 → jfox_cli-1.2.3}/tests/performance/__init__.py +0 -0
  202. {jfox_cli-1.2.2 → jfox_cli-1.2.3}/tests/performance/test_performance.py +0 -0
  203. {jfox_cli-1.2.2 → jfox_cli-1.2.3}/tests/test_advanced_features.py +0 -0
  204. {jfox_cli-1.2.2 → jfox_cli-1.2.3}/tests/test_cli_format.py +0 -0
  205. {jfox_cli-1.2.2 → jfox_cli-1.2.3}/tests/test_config_set_unit.py +0 -0
  206. {jfox_cli-1.2.2 → jfox_cli-1.2.3}/tests/test_config_unit.py +0 -0
  207. {jfox_cli-1.2.2 → jfox_cli-1.2.3}/tests/test_core_workflow.py +0 -0
  208. {jfox_cli-1.2.2 → jfox_cli-1.2.3}/tests/test_embedding_device.py +0 -0
  209. {jfox_cli-1.2.2 → jfox_cli-1.2.3}/tests/test_hybrid_search.py +0 -0
  210. {jfox_cli-1.2.2 → jfox_cli-1.2.3}/tests/test_integration.py +0 -0
  211. {jfox_cli-1.2.2 → jfox_cli-1.2.3}/tests/test_kb_current.py +0 -0
  212. {jfox_cli-1.2.2 → jfox_cli-1.2.3}/tests/test_suggest_links.py +0 -0
  213. {jfox_cli-1.2.2 → jfox_cli-1.2.3}/tests/unit/__init__.py +0 -0
  214. {jfox_cli-1.2.2 → jfox_cli-1.2.3}/tests/unit/test_add_backfill_links.py +0 -0
  215. {jfox_cli-1.2.2 → jfox_cli-1.2.3}/tests/unit/test_archive.py +0 -0
  216. {jfox_cli-1.2.2 → jfox_cli-1.2.3}/tests/unit/test_atomic_write.py +0 -0
  217. {jfox_cli-1.2.2 → jfox_cli-1.2.3}/tests/unit/test_auto_summary_config_sources.py +0 -0
  218. {jfox_cli-1.2.2 → jfox_cli-1.2.3}/tests/unit/test_auto_summary_defaults.py +0 -0
  219. {jfox_cli-1.2.2 → jfox_cli-1.2.3}/tests/unit/test_auto_summary_extractor.py +0 -0
  220. {jfox_cli-1.2.2 → jfox_cli-1.2.3}/tests/unit/test_auto_summary_ledger.py +0 -0
  221. {jfox_cli-1.2.2 → jfox_cli-1.2.3}/tests/unit/test_auto_summary_runner.py +0 -0
  222. {jfox_cli-1.2.2 → jfox_cli-1.2.3}/tests/unit/test_auto_summary_scanner.py +0 -0
  223. {jfox_cli-1.2.2 → jfox_cli-1.2.3}/tests/unit/test_auto_summary_status.py +0 -0
  224. {jfox_cli-1.2.2 → jfox_cli-1.2.3}/tests/unit/test_bm25_batch.py +0 -0
  225. {jfox_cli-1.2.2 → jfox_cli-1.2.3}/tests/unit/test_check.py +0 -0
  226. {jfox_cli-1.2.2 → jfox_cli-1.2.3}/tests/unit/test_content_file.py +0 -0
  227. {jfox_cli-1.2.2 → jfox_cli-1.2.3}/tests/unit/test_daemon_cli.py +0 -0
  228. {jfox_cli-1.2.2 → jfox_cli-1.2.3}/tests/unit/test_daemon_process.py +0 -0
  229. {jfox_cli-1.2.2 → jfox_cli-1.2.3}/tests/unit/test_edit.py +0 -0
  230. {jfox_cli-1.2.2 → jfox_cli-1.2.3}/tests/unit/test_embedding_local_load.py +0 -0
  231. {jfox_cli-1.2.2 → jfox_cli-1.2.3}/tests/unit/test_format_unify.py +0 -0
  232. {jfox_cli-1.2.2 → jfox_cli-1.2.3}/tests/unit/test_formatters.py +0 -0
  233. {jfox_cli-1.2.2 → jfox_cli-1.2.3}/tests/unit/test_fragment_cli.py +0 -0
  234. {jfox_cli-1.2.2 → jfox_cli-1.2.3}/tests/unit/test_fragment_config.py +0 -0
  235. {jfox_cli-1.2.2 → jfox_cli-1.2.3}/tests/unit/test_fragment_detector.py +0 -0
  236. {jfox_cli-1.2.2 → jfox_cli-1.2.3}/tests/unit/test_fragment_service.py +0 -0
  237. {jfox_cli-1.2.2 → jfox_cli-1.2.3}/tests/unit/test_fragment_store.py +0 -0
  238. {jfox_cli-1.2.2 → jfox_cli-1.2.3}/tests/unit/test_gem_synth_cli.py +0 -0
  239. {jfox_cli-1.2.2 → jfox_cli-1.2.3}/tests/unit/test_gem_synth_config.py +0 -0
  240. {jfox_cli-1.2.2 → jfox_cli-1.2.3}/tests/unit/test_gem_synth_grounding.py +0 -0
  241. {jfox_cli-1.2.2 → jfox_cli-1.2.3}/tests/unit/test_gem_synth_llm.py +0 -0
  242. {jfox_cli-1.2.2 → jfox_cli-1.2.3}/tests/unit/test_gem_synth_loop.py +0 -0
  243. {jfox_cli-1.2.2 → jfox_cli-1.2.3}/tests/unit/test_gem_synth_store.py +0 -0
  244. {jfox_cli-1.2.2 → jfox_cli-1.2.3}/tests/unit/test_gem_synth_synthesizer.py +0 -0
  245. {jfox_cli-1.2.2 → jfox_cli-1.2.3}/tests/unit/test_gem_synth_transcript.py +0 -0
  246. {jfox_cli-1.2.2 → jfox_cli-1.2.3}/tests/unit/test_git_extractor.py +0 -0
  247. {jfox_cli-1.2.2 → jfox_cli-1.2.3}/tests/unit/test_global_config.py +0 -0
  248. {jfox_cli-1.2.2 → jfox_cli-1.2.3}/tests/unit/test_index_kb_param.py +0 -0
  249. {jfox_cli-1.2.2 → jfox_cli-1.2.3}/tests/unit/test_indexer_clear_before_rebuild.py +0 -0
  250. {jfox_cli-1.2.2 → jfox_cli-1.2.3}/tests/unit/test_indexer_verify.py +0 -0
  251. {jfox_cli-1.2.2 → jfox_cli-1.2.3}/tests/unit/test_kb_manager.py +0 -0
  252. {jfox_cli-1.2.2 → jfox_cli-1.2.3}/tests/unit/test_kimi_extractor.py +0 -0
  253. {jfox_cli-1.2.2 → jfox_cli-1.2.3}/tests/unit/test_kimi_scanner.py +0 -0
  254. {jfox_cli-1.2.2 → jfox_cli-1.2.3}/tests/unit/test_lazy_import.py +0 -0
  255. {jfox_cli-1.2.2 → jfox_cli-1.2.3}/tests/unit/test_ledger_migration.py +0 -0
  256. {jfox_cli-1.2.2 → jfox_cli-1.2.3}/tests/unit/test_list_notes_skip.py +0 -0
  257. {jfox_cli-1.2.2 → jfox_cli-1.2.3}/tests/unit/test_logging_config.py +0 -0
  258. {jfox_cli-1.2.2 → jfox_cli-1.2.3}/tests/unit/test_model_downloader.py +0 -0
  259. {jfox_cli-1.2.2 → jfox_cli-1.2.3}/tests/unit/test_note_candidate_fields.py +0 -0
  260. {jfox_cli-1.2.2 → jfox_cli-1.2.3}/tests/unit/test_note_candidate_filename.py +0 -0
  261. {jfox_cli-1.2.2 → jfox_cli-1.2.3}/tests/unit/test_note_index.py +0 -0
  262. {jfox_cli-1.2.2 → jfox_cli-1.2.3}/tests/unit/test_note_type_candidate.py +0 -0
  263. {jfox_cli-1.2.2 → jfox_cli-1.2.3}/tests/unit/test_rebuild_backlinks_impl.py +0 -0
  264. {jfox_cli-1.2.2 → jfox_cli-1.2.3}/tests/unit/test_release_helper.py +0 -0
  265. {jfox_cli-1.2.2 → jfox_cli-1.2.3}/tests/unit/test_runner_multi_source.py +0 -0
  266. {jfox_cli-1.2.2 → jfox_cli-1.2.3}/tests/unit/test_scanner_list.py +0 -0
  267. {jfox_cli-1.2.2 → jfox_cli-1.2.3}/tests/unit/test_session_file_source.py +0 -0
  268. {jfox_cli-1.2.2 → jfox_cli-1.2.3}/tests/unit/test_session_note.py +0 -0
  269. {jfox_cli-1.2.2 → jfox_cli-1.2.3}/tests/unit/test_session_source.py +0 -0
  270. {jfox_cli-1.2.2 → jfox_cli-1.2.3}/tests/unit/test_show.py +0 -0
  271. {jfox_cli-1.2.2 → jfox_cli-1.2.3}/tests/unit/test_system_prompt_sections.py +0 -0
  272. {jfox_cli-1.2.2 → jfox_cli-1.2.3}/tests/unit/test_tag_filter.py +0 -0
  273. {jfox_cli-1.2.2 → jfox_cli-1.2.3}/tests/unit/test_template.py +0 -0
  274. {jfox_cli-1.2.2 → jfox_cli-1.2.3}/tests/unit/test_template_cli.py +0 -0
  275. {jfox_cli-1.2.2 → jfox_cli-1.2.3}/tests/unit/test_update.py +0 -0
  276. {jfox_cli-1.2.2 → jfox_cli-1.2.3}/tests/unit/test_use_kb_env_var.py +0 -0
  277. {jfox_cli-1.2.2 → jfox_cli-1.2.3}/tests/unit/test_using_jfox_skill.py +0 -0
  278. {jfox_cli-1.2.2 → jfox_cli-1.2.3}/tests/unit/test_vector_store_clear.py +0 -0
  279. {jfox_cli-1.2.2 → jfox_cli-1.2.3}/tests/utils/__init__.py +0 -0
  280. {jfox_cli-1.2.2 → jfox_cli-1.2.3}/tests/utils/assertions.py +0 -0
  281. {jfox_cli-1.2.2 → jfox_cli-1.2.3}/tests/utils/jfox_cli.py +0 -0
  282. {jfox_cli-1.2.2 → jfox_cli-1.2.3}/tests/utils/note_generator.py +0 -0
  283. {jfox_cli-1.2.2 → jfox_cli-1.2.3}/tests/utils/temp_kb.py +0 -0
@@ -2,6 +2,13 @@
2
2
 
3
3
  All notable changes to jfox-cli will be documented in this file.
4
4
 
5
+ ## [1.2.3] - 2026-07-07
6
+
7
+ ### Fixes
8
+ - **gem-synth**: find_anchors 在 SQL 层排除已处理,修循环空转(#290) (#291)
9
+
10
+ [1.2.3]: https://github.com/zhuxixi/jfox/compare/v1.2.2...v1.2.3
11
+
5
12
  ## [1.2.2] - 2026-06-28
6
13
 
7
14
  ### Fixes
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: jfox-cli
3
- Version: 1.2.2
3
+ Version: 1.2.3
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
@@ -1,5 +1,5 @@
1
1
  """JFox - Zettelkasten 知识管理工具"""
2
2
 
3
- __version__ = "1.2.2"
3
+ __version__ = "1.2.3"
4
4
  __author__ = "User"
5
5
  __email__ = "user@example.com"
@@ -352,6 +352,18 @@ def list_fragments(
352
352
  def main():
353
353
  from . import DEFAULT_HOST, DEFAULT_PORT
354
354
 
355
+ # 配置 jfox 日志:daemon 由 `python -m jfox.daemon.server` 启动,不走 cli.py 的
356
+ # basicConfig;不配则用默认 lastResort handler(WARNING 级),gem_synth 等模块的
357
+ # INFO 日志(tick / 后台循环已启动)全被吞 → 循环活动看不见(#290 日志盲点)。
358
+ # process.py 已把本进程 stderr 重定向到 ~/.jfox_daemon.log,故 StreamHandler 即落盘。
359
+ _jfox = logging.getLogger("jfox")
360
+ if not _jfox.handlers: # 幂等:同进程多次调 main()(测试/手动)不重复挂 handler(#291 CR)
361
+ _h = logging.StreamHandler()
362
+ _h.setFormatter(logging.Formatter("%(asctime)s %(name)s %(levelname)s %(message)s"))
363
+ _jfox.addHandler(_h)
364
+ if _jfox.level == logging.NOTSET: # 不覆盖调用方/测试自定义级别(kimi#6)
365
+ _jfox.setLevel(logging.INFO)
366
+
355
367
  parser = argparse.ArgumentParser(description="JFox Embedding Daemon")
356
368
  parser.add_argument("--host", default=DEFAULT_HOST, help="监听地址")
357
369
  parser.add_argument("--port", type=int, default=DEFAULT_PORT, help="监听端口")
@@ -47,30 +47,36 @@ def find_anchors(
47
47
  where = _anchor_where(anchor_types)
48
48
  if not where:
49
49
  return []
50
- sql = (
51
- f"SELECT fragment_id, session_id, fragment_type, timestamp, content, metadata_json "
52
- f"FROM session_fragments WHERE {where}"
53
- )
54
- params: List = []
55
- if session_id:
56
- sql += " AND session_id = ?"
57
- params.append(session_id)
58
- sql += " ORDER BY fragment_id LIMIT ?"
59
- params.append(limit * 3) # 多取再在 Python 侧按精确条件过滤
60
50
 
61
51
  conn = sqlite3.connect(str(fragments_db))
62
52
  conn.row_factory = sqlite3.Row
63
53
  try:
54
+ # ATTACH synthesis_log + NOT EXISTS 子查询:SQL 层排除已处理锚点(修 #290),
55
+ # 让 LIMIT 直接作用在未处理锚点上,无 NOT IN 参数上限(#291 CR kimi#3)。
56
+ # ATTACH 正常不失败(db_path 由 SynthesisLog 必建);失败即真异常上抛,由 loop
57
+ # find_error 接管+记日志——不静默降级(静默会重复合成、产重复 candidate)。
58
+ conn.execute("ATTACH DATABASE ? AS syn", (str(log.db_path),))
59
+ exclude_processed = (
60
+ " AND NOT EXISTS (SELECT 1 FROM syn.synthesis_log sl "
61
+ "WHERE sl.anchor_fragment_id = session_fragments.fragment_id)"
62
+ )
63
+ sql = (
64
+ f"SELECT fragment_id, session_id, fragment_type, timestamp, content, "
65
+ f"metadata_json FROM session_fragments WHERE {where}{exclude_processed}"
66
+ )
67
+ params: List = []
68
+ if session_id:
69
+ sql += " AND session_id = ?"
70
+ params.append(session_id)
71
+ sql += " ORDER BY fragment_id LIMIT ?"
72
+ # 多取以容 Python 侧 ask_user_question 精确复核的少量剔除
73
+ params.append(limit * 3)
64
74
  rows = conn.execute(sql, params).fetchall()
65
75
  finally:
66
- conn.close()
67
-
68
- unprocessed = set(log.filter_unprocessed([r["fragment_id"] for r in rows]))
76
+ conn.close() # 兜底覆盖 ATTACH + SELECT,避免 ATTACH 抛异常时连接泄漏(#291 CR R3)
69
77
 
70
78
  result: List[Dict] = []
71
79
  for r in rows:
72
- if r["fragment_id"] not in unprocessed:
73
- continue
74
80
  try:
75
81
  md = json.loads(r["metadata_json"] or "{}")
76
82
  except (json.JSONDecodeError, TypeError, ValueError):
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
4
4
 
5
5
  [project]
6
6
  name = "jfox-cli"
7
- version = "1.2.2"
7
+ version = "1.2.3"
8
8
  description = "JFox - Zettelkasten 知识管理 CLI 工具"
9
9
  readme = "README.md"
10
10
  license = {text = "MIT"}
@@ -106,6 +106,36 @@ def test_count_anchors_empty_anchor_types(tmp_path):
106
106
  assert count_anchors(fragments_db=tmp_path / "f.db", anchor_types=[]) == 0
107
107
 
108
108
 
109
+ def test_find_anchors_skips_clustered_processed_and_returns_unprocessed(tmp_path):
110
+ """已处理锚点集中在低 fragment_id 时,find_anchors(limit=1) 仍须返回未处理的(#290)。
111
+
112
+ 回归根因:旧实现 `LIMIT limit*3` 只取前几条,若前 3 条全是已处理的 → Python 侧
113
+ filter_unprocessed 全滤掉 → 返回 0,哪怕后面还有未处理锚点。daemon 循环用 limit=1,
114
+ 每 tick 都取到这 3 条已处理的 → 永远返回 0 → 空转、不合成。
115
+ 修法:把"已处理"过滤下推到 SQL(NOT IN),让 LIMIT 直接作用在未处理锚点上。
116
+ """
117
+ store = FragmentStore(db_path=tmp_path / "f.db")
118
+ # 前 3 条锚点(低 fragment_id)会被标记已处理;第 4 条未处理
119
+ a1 = store.insert("s", "correction", "UserPromptSubmit", "纠1", {})
120
+ a2 = store.insert("s", "correction", "UserPromptSubmit", "纠2", {})
121
+ a3 = store.insert("s", "correction", "UserPromptSubmit", "纠3", {})
122
+ a4 = store.insert("s", "correction", "UserPromptSubmit", "纠4", {})
123
+ store.close()
124
+
125
+ log = SynthesisLog(db_path=tmp_path / "syn.db")
126
+ log.mark_processed(a1, "c1")
127
+ log.mark_processed(a2, "c2")
128
+ log.mark_processed(a3, "c3")
129
+
130
+ # limit=1:旧实现 LIMIT 3 取 a1/a2/a3 全已处理 → 0;修后须跳过它们返回 a4
131
+ anchors = find_anchors(
132
+ fragments_db=tmp_path / "f.db", log=log, anchor_types=["correction"], limit=1
133
+ )
134
+ assert len(anchors) == 1
135
+ assert anchors[0]["fragment_id"] == a4
136
+ log.close()
137
+
138
+
109
139
  def test_find_anchors_tolerates_malformed_metadata_json(tmp_path):
110
140
  """session_fragments 含非法 JSON 的 metadata_json 行时,find_anchors/count_anchors
111
141
  都不应崩——坏行跳过、合法 ask_user_question 照常返回/计数。
@@ -867,7 +867,7 @@ wheels = [
867
867
 
868
868
  [[package]]
869
869
  name = "jfox-cli"
870
- version = "1.2.2"
870
+ version = "1.2.3"
871
871
  source = { editable = "." }
872
872
  dependencies = [
873
873
  { name = "chromadb" },
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes