github Python re-analysis due

phasespace-labs/palinode

v0.16.0
github

The memory substrate for AI agents and developer tools. Git-versioned, file-native, MCP-first.

maintainer
phasespace-labs
license
MIT
first seen
2026-06-25
last seen
2026-09-05
releases · 30d
11
short id

Drift inferred · capture-to-capture

  1. HIGH code analysis flagged dynamic code execution in phasespace-labs/palinode
  2. HIGH code analysis flagged dynamic code execution in phasespace-labs/palinode
  3. HIGH code analysis flagged dynamic code execution in phasespace-labs/palinode
  4. HIGH code analysis flagged dynamic code execution in phasespace-labs/palinode
  5. HIGH code analysis flagged dynamic code execution in phasespace-labs/palinode
  6. HIGH code analysis flagged dynamic code execution in phasespace-labs/palinode
  7. HIGH code analysis flagged dynamic code execution in phasespace-labs/palinode
  8. HIGH code analysis flagged dynamic code execution in phasespace-labs/palinode
  9. HIGH code analysis flagged dynamic code execution in phasespace-labs/palinode
  10. HIGH code analysis flagged dynamic code execution in phasespace-labs/palinode
  11. HIGH code analysis flagged dynamic code execution in phasespace-labs/palinode
  12. HIGH code analysis flagged dynamic code execution in phasespace-labs/palinode
  13. HIGH code analysis flagged dynamic code execution in phasespace-labs/palinode
  14. HIGH code analysis flagged dynamic code execution in phasespace-labs/palinode
  15. HIGH code analysis flagged dynamic code execution in phasespace-labs/palinode
  16. HIGH code analysis flagged dynamic code execution in phasespace-labs/palinode
  17. HIGH code analysis flagged dynamic code execution in phasespace-labs/palinode
  18. HIGH code analysis flagged dynamic code execution in phasespace-labs/palinode
  19. HIGH code analysis flagged dynamic code execution in phasespace-labs/palinode
  20. HIGH code analysis flagged dynamic code execution in phasespace-labs/palinode

tool count over time

06-25 01:34 now
25t
30t
capabilities 30 tools
transport stdio · streamable-http · http verified reported listed in the official MCP registry counts 30 tools · 0 res · 0 prompts permission surface via README inference

tools

  • archive

    Retire one memory that's wrong or obsolete — archive it, or supersede it with a named replacement

  • archive_expired

    Archive ephemeral memories whose TTL has expired

  • blame

    Trace a fact back to the commit that recorded it

  • cluster_neighbors

    Find top-K semantically related files NOT already wiki-linked — surface implicit relationships for cross-link proposals

  • consolidate

    Preview or run LLM-powered compaction

  • dedup_suggest

    Before saving, surface existing files that overlap the draft

  • depends

    Dependency tree (or unblocked-items list) from depends_on / blocks / parallel_with frontmatter on ProjectSnapshots

  • diff

    What changed in the last N days

  • doctor

    Fast diagnostic pass — 18+ checks across paths, services, config, index

  • doctor_deep

    Full diagnostic with canary write test (~10–15s)

  • entities

    Entity graph — cross-references between memories

  • history

    Git history for a file with diff stats and rename tracking

  • ingest

    Fetch a URL and save as research

  • lint

    Health scan — orphans, stale files, missing fields

  • list

    Browse memory files by type, filter by core status

  • orphan_repair

    Find semantic matches for broken [[wikilinks]]

  • prompt

    List, show, or activate versioned LLM prompts

  • push

    Sync memory to a remote git repo

  • read

    Read the full content of a memory file

  • review

    Advisory project-memory review that proposes corrective operations without writing them

  • rollback

    Revert a file to a previous commit (safe, creates new commit)

  • save

    Store a typed memory (person, decision, insight, project)

  • search

    Hybrid BM25 + vector search with category filter

  • session_end

    Capture summary, decisions, and blockers at end of session

  • session_init

    Session-start context digest for the resolved project scope

  • status

    Health check — file counts, index stats, service status

  • timeline

    _Deprecated — use history with detail='full'._ Commit-level evolution of a file with per-commit diffs

  • topic_coverage

    Given a short topic phrase, return whether any existing wiki page already covers it (binary covered / best_match / similarity)

  • trace

    Compose a fact's full provenance lineage — sources, saved/changed commits, supersession, typed links, recall

  • trigger

    Prospective recall — auto-inject when a topic comes up

skills & danger signals github-tarball
prompt-surface shipped agent-instruction files + hidden-content / dangerous-code findings — quoted from the analyzed source

analyzed commit 194ae70 · analyzer v33 · 14h ago

skills & prompt files 12

danger signals3

code evidence vv0.15.0 · github-tarball
evidence-backed findings quoted directly from the published source artifact — not inferred

code files: 423

filesystem 208

  • fs phasespace-labs-palinode-194ae70/bench/abstention.py :38 from pathlib import Path
  • fs phasespace-labs-palinode-194ae70/bench/corpus.py :22 from pathlib import Path
  • fs phasespace-labs-palinode-194ae70/bench/harness.py :22 from pathlib import Path
  • fs phasespace-labs-palinode-194ae70/bench/longmemeval/adapter.py :15 import shutil
  • fs phasespace-labs-palinode-194ae70/bench/longmemeval/data.py :7 from pathlib import Path
  • fs phasespace-labs-palinode-194ae70/bench/longmemeval/llm.py :92 text = open(out_path, encoding="utf-8").read().strip() if os.path.exists(out_path) else ""
  • fs phasespace-labs-palinode-194ae70/bench/longmemeval/pipeline.py :32 import shutil
  • fs phasespace-labs-palinode-194ae70/bench/longmemeval/rejudge.py :18 from pathlib import Path
  • fs phasespace-labs-palinode-194ae70/bench/longmemeval/run.py :28 from pathlib import Path
  • fs phasespace-labs-palinode-194ae70/bench/report.py :150 results = json.loads(open(argv[0], encoding="utf-8").read())
  • fs phasespace-labs-palinode-194ae70/bench/run.py :19 import shutil
  • fs phasespace-labs-palinode-194ae70/palinode/api/enrichment.py :384 with open(file_path, "r", encoding="utf-8") as f:
  • fs phasespace-labs-palinode-194ae70/palinode/api/path_safety.py :62 `os.path.exists()` and `open()` could redirect a memory read to a
  • fs phasespace-labs-palinode-194ae70/palinode/api/routers/health.py :231 with open(canary_path, "w", encoding="utf-8") as f:
  • fs phasespace-labs-palinode-194ae70/palinode/api/routers/memory.py :306 with open(filepath, "r", encoding="utf-8") as f:
  • fs phasespace-labs-palinode-194ae70/palinode/api/routers/session.py :301 # O_APPEND open(): the same trade every other choke-point write already
  • fs phasespace-labs-palinode-194ae70/palinode/api/server.py :15 from pathlib import Path
  • fs phasespace-labs-palinode-194ae70/palinode/api/ui/router.py :26 from pathlib import Path
  • fs phasespace-labs-palinode-194ae70/palinode/api/ui/views.py :19 from pathlib import Path
  • fs phasespace-labs-palinode-194ae70/palinode/cli/__init__.py :189 import shutil
  • fs phasespace-labs-palinode-194ae70/palinode/cli/doctor.py :211 from pathlib import Path
  • fs phasespace-labs-palinode-194ae70/palinode/cli/embedding_tools.py :84 with open(file_path, "r", encoding="utf-8") as f:
  • fs phasespace-labs-palinode-194ae70/palinode/cli/import_vault.py :24 from pathlib import Path
  • fs phasespace-labs-palinode-194ae70/palinode/cli/init.py :25 from pathlib import Path
  • fs phasespace-labs-palinode-194ae70/palinode/cli/mcp_config.py :15 from pathlib import Path
  • fs phasespace-labs-palinode-194ae70/palinode/cli/mcp_smoke.py :16 from pathlib import Path
  • fs phasespace-labs-palinode-194ae70/palinode/cli/obsidian_sync.py :167 with open(filepath, "r", encoding="utf-8") as fh:
  • fs phasespace-labs-palinode-194ae70/palinode/cli/repair_status.py :116 with open(history_path, encoding="utf-8") as f:
  • fs phasespace-labs-palinode-194ae70/palinode/cli/retrieval_stats.py :15 from pathlib import Path
  • fs phasespace-labs-palinode-194ae70/palinode/cli/save.py :190 with open(file_path, "r", encoding="utf-8") as f:
  • fs phasespace-labs-palinode-194ae70/palinode/cli/worktree.py :26 from pathlib import Path
  • fs phasespace-labs-palinode-194ae70/palinode/consolidation/archive.py :78 with open(path, encoding="utf-8") as f:
  • fs phasespace-labs-palinode-194ae70/palinode/consolidation/executor.py :149 with open(file_path, encoding="utf-8") as f:
  • fs phasespace-labs-palinode-194ae70/palinode/consolidation/fact_ids.py :40 with open(file_path, encoding="utf-8") as f:
  • fs phasespace-labs-palinode-194ae70/palinode/consolidation/forget.py :123 with open(path, encoding="utf-8", errors="replace") as f:
  • fs phasespace-labs-palinode-194ae70/palinode/consolidation/layer_split.py :50 with open(file_path, encoding="utf-8") as f:
  • fs phasespace-labs-palinode-194ae70/palinode/consolidation/retract.py :271 with open(abs_path, encoding="utf-8") as f:
  • fs phasespace-labs-palinode-194ae70/palinode/consolidation/run_lock.py :19 from pathlib import Path
  • fs phasespace-labs-palinode-194ae70/palinode/consolidation/runner.py :96 with open(filepath, "r", encoding="utf-8") as f:
  • fs phasespace-labs-palinode-194ae70/palinode/consolidation/ttl.py :163 with open(path, encoding="utf-8") as f:
  • fs phasespace-labs-palinode-194ae70/palinode/consolidation/write_time.py :148 with open(marker_path, encoding="utf-8") as f:
  • fs phasespace-labs-palinode-194ae70/palinode/core/aliases.py :141 with open(path, encoding="utf-8") as fh:
  • fs phasespace-labs-palinode-194ae70/palinode/core/audit.py :16 from pathlib import Path
  • fs phasespace-labs-palinode-194ae70/palinode/core/auth.py :25 from pathlib import Path
  • fs phasespace-labs-palinode-194ae70/palinode/core/claims.py :241 with open(full_path, encoding="utf-8") as f:
  • fs phasespace-labs-palinode-194ae70/palinode/core/config.py :19 from pathlib import Path
  • fs phasespace-labs-palinode-194ae70/palinode/core/context_prime.py :93 with open(filepath, encoding="utf-8") as f:
  • fs phasespace-labs-palinode-194ae70/palinode/core/cross_refs.py :111 with open(filepath, encoding="utf-8") as fh:
  • fs phasespace-labs-palinode-194ae70/palinode/core/depends.py :51 with open(path, encoding="utf-8") as f:
  • fs phasespace-labs-palinode-194ae70/palinode/core/git_tools.py :96 # formerly-scattered ``open(w)`` / ``git add`` sites (save, write-time dedup,
  • fs phasespace-labs-palinode-194ae70/palinode/core/lint.py :421 with open(filepath, "r", encoding="utf-8") as f:
  • fs phasespace-labs-palinode-194ae70/palinode/core/path_guard.py :7 tree — using ``pathlib.Path.resolve()`` + ``Path.is_relative_to()`` rather
  • fs phasespace-labs-palinode-194ae70/palinode/core/quote_verify.py :226 with open(full_path, encoding="utf-8") as f:
  • fs phasespace-labs-palinode-194ae70/palinode/core/retrieval_log.py :23 from pathlib import Path
  • fs phasespace-labs-palinode-194ae70/palinode/core/save.py :175 with open(path, "r", encoding="utf-8") as existing:
  • fs phasespace-labs-palinode-194ae70/palinode/core/store.py :1120 with open(full_path, "r", encoding="utf-8") as f:
  • fs phasespace-labs-palinode-194ae70/palinode/core/trace.py :156 with open(history_abs, encoding="utf-8") as fh:
  • fs phasespace-labs-palinode-194ae70/palinode/core/typed_links.py :181 with open(target_path, encoding="utf-8") as f:
  • fs phasespace-labs-palinode-194ae70/palinode/core/visibility.py :78 with open(file_path, encoding="utf-8") as fh:
  • fs phasespace-labs-palinode-194ae70/palinode/diagnostics/checks/audit_log.py :19 from pathlib import Path
  • fs phasespace-labs-palinode-194ae70/palinode/diagnostics/checks/claude_md.py :23 from pathlib import Path
  • fs phasespace-labs-palinode-194ae70/palinode/diagnostics/checks/config_drift.py :18 from pathlib import Path
  • fs phasespace-labs-palinode-194ae70/palinode/diagnostics/checks/db_path.py :21 from pathlib import Path
  • fs phasespace-labs-palinode-194ae70/palinode/diagnostics/checks/fts5_sync.py :29 from pathlib import Path
  • fs phasespace-labs-palinode-194ae70/palinode/diagnostics/checks/git_identity.py :19 from pathlib import Path
  • fs phasespace-labs-palinode-194ae70/palinode/diagnostics/checks/git_remote.py :20 from pathlib import Path
  • fs phasespace-labs-palinode-194ae70/palinode/diagnostics/checks/index_size.py :29 from pathlib import Path
  • fs phasespace-labs-palinode-194ae70/palinode/diagnostics/checks/memory_dir.py :9 from pathlib import Path
  • fs phasespace-labs-palinode-194ae70/palinode/diagnostics/checks/multiple_dirs.py :23 from pathlib import Path
  • fs phasespace-labs-palinode-194ae70/palinode/diagnostics/checks/phantom_db.py :31 from pathlib import Path
  • fs phasespace-labs-palinode-194ae70/palinode/diagnostics/checks/process_env.py :37 from pathlib import Path
  • fs phasespace-labs-palinode-194ae70/palinode/diagnostics/checks/recall_write_health.py :31 from pathlib import Path
  • fs phasespace-labs-palinode-194ae70/palinode/diagnostics/checks/service.py :23 from pathlib import Path
  • fs phasespace-labs-palinode-194ae70/palinode/diagnostics/checks/watcher.py :31 from pathlib import Path
  • fs phasespace-labs-palinode-194ae70/palinode/diagnostics/fixes.py :38 from pathlib import Path
  • fs phasespace-labs-palinode-194ae70/palinode/import_/vault.py :15 from pathlib import Path
  • fs phasespace-labs-palinode-194ae70/palinode/indexer/index_file.py :62 with open(filepath, "r", encoding="utf-8") as f:
  • fs phasespace-labs-palinode-194ae70/palinode/indexer/watcher.py :293 with open(filepath, 'r', encoding="utf-8") as f:
  • fs phasespace-labs-palinode-194ae70/palinode/ingest/pipeline.py :20 from pathlib import Path
  • fs phasespace-labs-palinode-194ae70/palinode/lint/contradictions.py :89 with open(filepath, "r", encoding="utf-8") as fh:
  • fs phasespace-labs-palinode-194ae70/palinode/migration/bullets.py :56 with open(validated, "r", encoding="utf-8") as source:
  • fs phasespace-labs-palinode-194ae70/palinode/migration/frontmatter_backfill.py :410 with open(os.path.join(base, rel_path), encoding="utf-8") as fh:
  • fs phasespace-labs-palinode-194ae70/palinode/migration/openclaw.py :109 with open(fpath, "r", encoding="utf-8") as f:
  • fs (weak) phasespace-labs-palinode-194ae70/scripts/dump-parity-registry.py :19 from pathlib import Path
  • fs (weak) phasespace-labs-palinode-194ae70/tests/conftest.py :15 import pathlib
  • fs (weak) phasespace-labs-palinode-194ae70/tests/integration/test_api_roundtrip.py :98 with open(fp) as f:
  • fs (weak) phasespace-labs-palinode-194ae70/tests/integration/test_mcp_e2e.py :221 with open(fp) as f:
  • fs (weak) phasespace-labs-palinode-194ae70/tests/integration/test_mcp_stdio.py :22 from pathlib import Path
  • fs (weak) phasespace-labs-palinode-194ae70/tests/integration/test_obsidian_demo.py :145 with open(file_path) as f:
  • fs (weak) phasespace-labs-palinode-194ae70/tests/integration/test_security.py :392 with open(fp) as f:
  • fs (weak) phasespace-labs-palinode-194ae70/tests/integration/test_session_end_e2e_l1_l3.py :248 with open(status_path, "w", encoding="utf-8") as f:
  • fs (weak) phasespace-labs-palinode-194ae70/tests/test_amr_conformance.py :35 from pathlib import Path
  • fs (weak) phasespace-labs-palinode-194ae70/tests/test_api_route_inventory.py :28 from pathlib import Path
  • fs (weak) phasespace-labs-palinode-194ae70/tests/test_archive_on_demand_664.py :89 with open(path, "w", encoding="utf-8") as f:
  • fs (weak) phasespace-labs-palinode-194ae70/tests/test_archive_recall_485.py :81 with open(path, "w", encoding="utf-8") as f:
  • fs (weak) phasespace-labs-palinode-194ae70/tests/test_audit.py :31 with open(path) as f:
  • fs (weak) phasespace-labs-palinode-194ae70/tests/test_bench_harness.py :20 import shutil
  • fs (weak) phasespace-labs-palinode-194ae70/tests/test_bench_longmemeval.py :241 open(out_path, "w").write("Border collie.\n")
  • fs (weak) phasespace-labs-palinode-194ae70/tests/test_changelog_structure.py :29 from pathlib import Path
  • fs (weak) phasespace-labs-palinode-194ae70/tests/test_check_freshness_hash_domains.py :49 whole_file_hash = hashlib.sha256(open(path).read().encode()).hexdigest()
  • fs (weak) phasespace-labs-palinode-194ae70/tests/test_claims_508.py :49 with open(file_path, "r") as f:
  • fs (weak) phasespace-labs-palinode-194ae70/tests/test_cli_init.py :11 from pathlib import Path
  • fs (weak) phasespace-labs-palinode-194ae70/tests/test_cli_json_output.py :21 import pathlib
  • fs (weak) phasespace-labs-palinode-194ae70/tests/test_collection_integrity.py :35 from pathlib import Path
  • fs (weak) phasespace-labs-palinode-194ae70/tests/test_config_validation.py :16 from pathlib import Path
  • fs (weak) phasespace-labs-palinode-194ae70/tests/test_consolidation_dry_run.py :5 from pathlib import Path
  • fs (weak) phasespace-labs-palinode-194ae70/tests/test_consolidation_run_lock.py :13 from pathlib import Path
  • fs (weak) phasespace-labs-palinode-194ae70/tests/test_consolidation_runner.py :17 from pathlib import Path
  • fs (weak) phasespace-labs-palinode-194ae70/tests/test_consolidation_status_write_path.py :20 from pathlib import Path
  • fs (weak) phasespace-labs-palinode-194ae70/tests/test_content_hash_and_confidence.py :38 with open(file_path, "r") as f:
  • fs (weak) phasespace-labs-palinode-194ae70/tests/test_context_prime.py :46 with open(os.path.join(tmp_path, "decisions", "legacy.md"), "w") as f:
  • fs (weak) phasespace-labs-palinode-194ae70/tests/test_db_disambiguation.py :91 with open(os.path.join(memory_dir, "projects", "alpha.md"), "w") as f:
  • fs (weak) phasespace-labs-palinode-194ae70/tests/test_default_db_guard_scope.py :24 import shutil
  • fs (weak) phasespace-labs-palinode-194ae70/tests/test_depends.py :14 from pathlib import Path
  • fs (weak) phasespace-labs-palinode-194ae70/tests/test_deploy_systemd.py :13 import shutil
  • fs (weak) phasespace-labs-palinode-194ae70/tests/test_diagnostics_skeleton.py :16 from pathlib import Path
  • fs (weak) phasespace-labs-palinode-194ae70/tests/test_docker_compose.py :21 from pathlib import Path
  • fs (weak) phasespace-labs-palinode-194ae70/tests/test_docs_schema_alignment.py :13 from pathlib import Path
  • fs (weak) phasespace-labs-palinode-194ae70/tests/test_doctor_api.py :16 from pathlib import Path
  • fs (weak) phasespace-labs-palinode-194ae70/tests/test_doctor_config_drift.py :19 from pathlib import Path
  • fs (weak) phasespace-labs-palinode-194ae70/tests/test_doctor_fix.py :22 from pathlib import Path
  • fs (weak) phasespace-labs-palinode-194ae70/tests/test_doctor_fts5_sync.py :12 from pathlib import Path
  • fs (weak) phasespace-labs-palinode-194ae70/tests/test_doctor_git_commit_ready.py :12 from pathlib import Path
  • fs (weak) phasespace-labs-palinode-194ae70/tests/test_doctor_path_checks.py :17 from pathlib import Path
  • fs (weak) phasespace-labs-palinode-194ae70/tests/test_doctor_phase5.py :21 from pathlib import Path
  • fs (weak) phasespace-labs-palinode-194ae70/tests/test_doctor_service_checks.py :23 from pathlib import Path
  • fs (weak) phasespace-labs-palinode-194ae70/tests/test_doctor_test_isolation.py :5 from pathlib import Path
  • fs (weak) phasespace-labs-palinode-194ae70/tests/test_embedding_tools.py :127 with open(full, "w") as f:
  • fs (weak) phasespace-labs-palinode-194ae70/tests/test_entity_aliases.py :17 from pathlib import Path
  • fs (weak) phasespace-labs-palinode-194ae70/tests/test_example_config_keys_have_readers.py :28 from pathlib import Path
  • fs (weak) phasespace-labs-palinode-194ae70/tests/test_executor.py :40 with open(temp_memory_file, encoding="utf-8") as f:
  • fs (weak) phasespace-labs-palinode-194ae70/tests/test_executor_ops_coverage.py :29 from pathlib import Path
  • fs (weak) phasespace-labs-palinode-194ae70/tests/test_executor_replace_guard.py :36 with open(path, "w", encoding="utf-8") as f:
  • fs (weak) phasespace-labs-palinode-194ae70/tests/test_external_refs.py :37 with open(file_path, "r") as f:
  • fs (weak) phasespace-labs-palinode-194ae70/tests/test_fact_ids.py :36 with open(path) as f:
  • fs (weak) phasespace-labs-palinode-194ae70/tests/test_forget_write_time.py :301 with open(history) as f:
  • fs (weak) phasespace-labs-palinode-194ae70/tests/test_fresh_session_context.py :33 from pathlib import Path
  • fs (weak) phasespace-labs-palinode-194ae70/tests/test_frontmatter_readers_cache.py :25 from pathlib import Path
  • fs (weak) phasespace-labs-palinode-194ae70/tests/test_fts5_lockstep_delete.py :21 from pathlib import Path
  • fs (weak) phasespace-labs-palinode-194ae70/tests/test_git_tools_diff.py :62 with open(path, "a", encoding="utf-8") as handle:
  • fs (weak) phasespace-labs-palinode-194ae70/tests/test_git_tools_history.py :45 with open(before, "w", encoding="utf-8") as handle:
  • fs (weak) phasespace-labs-palinode-194ae70/tests/test_import_vault.py :17 from pathlib import Path
  • fs (weak) phasespace-labs-palinode-194ae70/tests/test_init_obsidian.py :16 from pathlib import Path
  • fs (weak) phasespace-labs-palinode-194ae70/tests/test_init_skills.py :13 from pathlib import Path
  • fs (weak) phasespace-labs-palinode-194ae70/tests/test_init_wrap_heavy.py :13 from pathlib import Path
  • fs (weak) phasespace-labs-palinode-194ae70/tests/test_injection_scanner.py :6 from pathlib import Path
  • fs (weak) phasespace-labs-palinode-194ae70/tests/test_ku_compat.py :90 with open(file_path) as f:
  • fs (weak) phasespace-labs-palinode-194ae70/tests/test_launch_checklist_harness.py :9 from pathlib import Path
  • fs (weak) phasespace-labs-palinode-194ae70/tests/test_layer_split_hint_hardening.py :57 with open(path, "w") as f:
  • fs (weak) phasespace-labs-palinode-194ae70/tests/test_layer_split_history_hint.py :82 content = open(path).read()
  • fs (weak) phasespace-labs-palinode-194ae70/tests/test_lint_contradictions.py :31 with open(path, "w", encoding="utf-8") as fh:
  • fs (weak) phasespace-labs-palinode-194ae70/tests/test_list_read.py :19 with open(os.path.join(tmp_path, "people", "alice.md"), "w") as f:
  • fs (weak) phasespace-labs-palinode-194ae70/tests/test_loud_silent_misconfig.py :17 from pathlib import Path
  • fs (weak) phasespace-labs-palinode-194ae70/tests/test_mcp_config_diagnose.py :10 from pathlib import Path
  • fs (weak) phasespace-labs-palinode-194ae70/tests/test_mcp_schema_size.py :5 from pathlib import Path
  • fs (weak) phasespace-labs-palinode-194ae70/tests/test_mcp_server_metadata.py :17 from pathlib import Path
  • fs (weak) phasespace-labs-palinode-194ae70/tests/test_mcp_sse_alias_deprecation.py :20 from pathlib import Path
  • fs (weak) phasespace-labs-palinode-194ae70/tests/test_mcp_tool_count.py :13 from pathlib import Path
  • fs (weak) phasespace-labs-palinode-194ae70/tests/test_migrate_bullets.py :5 from pathlib import Path
  • fs (weak) phasespace-labs-palinode-194ae70/tests/test_migrate_openclaw.py :7 from pathlib import Path
  • fs (weak) phasespace-labs-palinode-194ae70/tests/test_no_build_artifacts_tracked.py :12 from pathlib import Path
  • fs (weak) phasespace-labs-palinode-194ae70/tests/test_no_issue_refs_user_surface.py :28 from pathlib import Path
  • fs (weak) phasespace-labs-palinode-194ae70/tests/test_obsidian_sync.py :21 from pathlib import Path
  • fs (weak) phasespace-labs-palinode-194ae70/tests/test_package_discovery.py :4 from pathlib import Path
  • fs (weak) phasespace-labs-palinode-194ae70/tests/test_parity_is_dependency_free.py :22 from pathlib import Path
  • fs (weak) phasespace-labs-palinode-194ae70/tests/test_pr_template_smoke_args.py :7 from pathlib import Path
  • fs (weak) phasespace-labs-palinode-194ae70/tests/test_prompts.py :49 with open(path, "w") as f:
  • fs (weak) phasespace-labs-palinode-194ae70/tests/test_proposer_seam.py :19 from pathlib import Path
  • fs (weak) phasespace-labs-palinode-194ae70/tests/test_readme_documents_real_commands.py :22 from pathlib import Path
  • fs (weak) phasespace-labs-palinode-194ae70/tests/test_reciprocal_contradicts_indexed.py :56 with open(target, "w") as f:
  • fs (weak) phasespace-labs-palinode-194ae70/tests/test_reindex_gc.py :4 from pathlib import Path
  • fs (weak) phasespace-labs-palinode-194ae70/tests/test_rel_path_api_parity.py :85 with open(full, "w") as f:
  • fs (weak) phasespace-labs-palinode-194ae70/tests/test_resolve_memory_path_hardening.py :47 from pathlib import Path
  • fs (weak) phasespace-labs-palinode-194ae70/tests/test_retrieval_instrumentation.py :13 from pathlib import Path
  • fs (weak) phasespace-labs-palinode-194ae70/tests/test_robustness_483.py :114 with open(doc_path, "w") as f:
  • fs (weak) phasespace-labs-palinode-194ae70/tests/test_save_derived_slug_collision.py :68 with open(result["file_path"], "r", encoding="utf-8") as fh:
  • fs (weak) phasespace-labs-palinode-194ae70/tests/test_save_git_committed.py :24 from pathlib import Path
  • fs (weak) phasespace-labs-palinode-194ae70/tests/test_save_project.py :32 with open(file_path, "r", encoding="utf-8") as f:
  • fs (weak) phasespace-labs-palinode-194ae70/tests/test_save_wiki_footer.py :174 with open(file_path, encoding="utf-8") as f:
  • fs (weak) phasespace-labs-palinode-194ae70/tests/test_scope_filtered_listing.py :73 with open(os.path.join(tmp_path, "decisions", "legacy.md"), "w") as f:
  • fs (weak) phasespace-labs-palinode-194ae70/tests/test_search_internal_guard.py :28 from pathlib import Path
  • fs (weak) phasespace-labs-palinode-194ae70/tests/test_security_toctou_read.py :3 The TOCTOU window between os.path.exists() and open() let a symlink swap
  • fs (weak) phasespace-labs-palinode-194ae70/tests/test_server_json_version_alignment.py :15 from pathlib import Path
  • fs (weak) phasespace-labs-palinode-194ae70/tests/test_session_end.py :51 daily_content = open(daily_path, encoding="utf-8").read()
  • fs (weak) phasespace-labs-palinode-194ae70/tests/test_session_end_dedup.py :66 with open(file_path, "w", encoding="utf-8") as f:
  • fs (weak) phasespace-labs-palinode-194ae70/tests/test_session_end_envelope_guard.py :22 import shutil
  • fs (weak) phasespace-labs-palinode-194ae70/tests/test_session_end_floor_hook.py :18 import shutil
  • fs (weak) phasespace-labs-palinode-194ae70/tests/test_session_end_status_line.py :55 with open(status_path, "w", encoding="utf-8") as f:
  • fs (weak) phasespace-labs-palinode-194ae70/tests/test_session_end_timeout.py :28 from pathlib import Path
  • fs (weak) phasespace-labs-palinode-194ae70/tests/test_session_start_hook.py :21 import shutil
  • fs (weak) phasespace-labs-palinode-194ae70/tests/test_setup_worktree.py :19 import shutil
  • fs (weak) phasespace-labs-palinode-194ae70/tests/test_source_capture_g1.py :40 with open(file_path, "r", encoding="utf-8") as f:
  • fs (weak) phasespace-labs-palinode-194ae70/tests/test_source_surface.py :34 with open(file_path, "r") as f:
  • fs (weak) phasespace-labs-palinode-194ae70/tests/test_status_doc_repair.py :24 from pathlib import Path
  • fs (weak) phasespace-labs-palinode-194ae70/tests/test_store_wal_indexes.py :19 from pathlib import Path
  • fs (weak) phasespace-labs-palinode-194ae70/tests/test_subprocess_argv_form.py :22 from pathlib import Path
  • fs (weak) phasespace-labs-palinode-194ae70/tests/test_surface_parity.py :31 from pathlib import Path
  • fs (weak) phasespace-labs-palinode-194ae70/tests/test_timestamp_consistency.py :46 with open(file_path, "r") as f:
  • fs (weak) phasespace-labs-palinode-194ae70/tests/test_trace_536.py :84 with open(abs_path, "w", encoding="utf-8") as f:
  • fs (weak) phasespace-labs-palinode-194ae70/tests/test_ttl_archive_482.py :136 with open(path, "w", encoding="utf-8") as f:
  • fs (weak) phasespace-labs-palinode-194ae70/tests/test_typed_links.py :229 os.remove(p)
  • fs (weak) phasespace-labs-palinode-194ae70/tests/test_ui_phase1.py :74 with open(abs_path, "w", encoding="utf-8") as f:
  • fs (weak) phasespace-labs-palinode-194ae70/tests/test_user_prompt_submit_hook.py :20 from pathlib import Path
  • fs (weak) phasespace-labs-palinode-194ae70/tests/test_utf8_encoding_guard.py :5 ``open()`` with no ``encoding=`` decodes with the *locale* default — cp1252 on
  • fs (weak) phasespace-labs-palinode-194ae70/tests/test_visibility_scopes.py :236 with open(abs_path, "w") as f:
  • fs (weak) phasespace-labs-palinode-194ae70/tests/test_watcher_debounce_coalesce.py :116 with open(path, "w") as fh:
  • fs (weak) phasespace-labs-palinode-194ae70/tests/test_watcher_thread_shutdown.py :31 from pathlib import Path
  • fs (weak) phasespace-labs-palinode-194ae70/tests/test_write_time.py :49 with open(path, "w") as f:

shell / exec 50

  • shell phasespace-labs-palinode-194ae70/bench/longmemeval/llm.py :24 import subprocess
  • shell phasespace-labs-palinode-194ae70/bench/run.py :20 import subprocess
  • shell phasespace-labs-palinode-194ae70/palinode/api/routers/health.py :14 import subprocess
  • shell phasespace-labs-palinode-194ae70/palinode/api/server.py :14 import subprocess # noqa: F401 — re-export: tests patch `server.subprocess.run`
  • shell phasespace-labs-palinode-194ae70/palinode/cli/__init__.py :188 import subprocess
  • shell phasespace-labs-palinode-194ae70/palinode/cli/mcp_smoke.py :13 import subprocess # nosec B404 - argv-form process probe, no shell
  • shell phasespace-labs-palinode-194ae70/palinode/cli/worktree.py :24 import subprocess # nosec B404 - argv-form git calls, no shell
  • shell phasespace-labs-palinode-194ae70/palinode/core/git_tools.py :13 import subprocess
  • shell phasespace-labs-palinode-194ae70/palinode/diagnostics/checks/git_identity.py :18 import subprocess
  • shell phasespace-labs-palinode-194ae70/palinode/diagnostics/checks/git_remote.py :19 import subprocess
  • shell phasespace-labs-palinode-194ae70/palinode/diagnostics/checks/watcher.py :29 import subprocess
  • shell phasespace-labs-palinode-194ae70/palinode/ingest/pipeline.py :18 import subprocess
  • shell (weak) phasespace-labs-palinode-194ae70/tests/integration/test_api_roundtrip.py :370 import subprocess as _subprocess
  • shell (weak) phasespace-labs-palinode-194ae70/tests/integration/test_mcp_stdio.py :18 import subprocess
  • shell (weak) phasespace-labs-palinode-194ae70/tests/test_api_bearer_auth.py :45 import subprocess
  • shell (weak) phasespace-labs-palinode-194ae70/tests/test_archive_on_demand_664.py :18 import subprocess
  • shell (weak) phasespace-labs-palinode-194ae70/tests/test_bench_longmemeval.py :234 import subprocess
  • shell (weak) phasespace-labs-palinode-194ae70/tests/test_cli_import_boundary.py :5 import subprocess
  • shell (weak) phasespace-labs-palinode-194ae70/tests/test_cli_init.py :15 import subprocess
  • shell (weak) phasespace-labs-palinode-194ae70/tests/test_cli_stop.py :1 import subprocess
  • shell (weak) phasespace-labs-palinode-194ae70/tests/test_collection_integrity.py :32 import subprocess
  • shell (weak) phasespace-labs-palinode-194ae70/tests/test_consolidation_dry_run.py :3 import subprocess
  • shell (weak) phasespace-labs-palinode-194ae70/tests/test_consolidation_status_write_path.py :18 import subprocess
  • shell (weak) phasespace-labs-palinode-194ae70/tests/test_default_db_guard_scope.py :26 import subprocess
  • shell (weak) phasespace-labs-palinode-194ae70/tests/test_deploy_systemd.py :15 import subprocess
  • shell (weak) phasespace-labs-palinode-194ae70/tests/test_doctor_git_commit_ready.py :11 import subprocess
  • shell (weak) phasespace-labs-palinode-194ae70/tests/test_doctor_phase5.py :20 import subprocess
  • shell (weak) phasespace-labs-palinode-194ae70/tests/test_forget_write_time.py :21 import subprocess
  • shell (weak) phasespace-labs-palinode-194ae70/tests/test_frontmatter_backfill_309.py :19 import subprocess
  • shell (weak) phasespace-labs-palinode-194ae70/tests/test_git_tools_diff.py :31 import subprocess
  • shell (weak) phasespace-labs-palinode-194ae70/tests/test_git_tools_history.py :20 import subprocess
  • shell (weak) phasespace-labs-palinode-194ae70/tests/test_mcp_http_bind_gate.py :22 import subprocess
  • shell (weak) phasespace-labs-palinode-194ae70/tests/test_migrate_openclaw.py :55 os.system(f"git init -q {mem} 2>/dev/null")
  • shell (weak) phasespace-labs-palinode-194ae70/tests/test_no_build_artifacts_tracked.py :11 import subprocess
  • shell (weak) phasespace-labs-palinode-194ae70/tests/test_parity_is_dependency_free.py :65 import subprocess
  • shell (weak) phasespace-labs-palinode-194ae70/tests/test_proposer_seam.py :17 import subprocess
  • shell (weak) phasespace-labs-palinode-194ae70/tests/test_save_git_committed.py :23 import subprocess
  • shell (weak) phasespace-labs-palinode-194ae70/tests/test_security_narrowed_exceptions.py :14 import subprocess
  • shell (weak) phasespace-labs-palinode-194ae70/tests/test_session_end.py :3 import subprocess
  • shell (weak) phasespace-labs-palinode-194ae70/tests/test_session_end_envelope_guard.py :23 import subprocess
  • shell (weak) phasespace-labs-palinode-194ae70/tests/test_session_end_floor_hook.py :19 import subprocess
  • shell (weak) phasespace-labs-palinode-194ae70/tests/test_session_start_hook.py :22 import subprocess
  • shell (weak) phasespace-labs-palinode-194ae70/tests/test_setup_worktree.py :20 import subprocess
  • shell (weak) phasespace-labs-palinode-194ae70/tests/test_subprocess_argv_form.py :42 # subprocess.run(...) or sp.run(...) -- any module attribute
  • shell (weak) phasespace-labs-palinode-194ae70/tests/test_trace_536.py :21 import subprocess
  • shell (weak) phasespace-labs-palinode-194ae70/tests/test_ui_phase1.py :21 import subprocess
  • shell (weak) phasespace-labs-palinode-194ae70/tests/test_user_prompt_submit_hook.py :19 import subprocess
  • shell (weak) phasespace-labs-palinode-194ae70/tests/test_utf8_encoding_guard.py :28 import subprocess
  • shell (weak) phasespace-labs-palinode-194ae70/tests/test_watcher_thread_shutdown.py :26 import subprocess
  • shell (weak) phasespace-labs-palinode-194ae70/tests/test_worktree_reconcile.py :9 import subprocess

network 40

  • net phasespace-labs-palinode-194ae70/bench/longmemeval/data.py :6 import urllib.request
  • net phasespace-labs-palinode-194ae70/bench/longmemeval/llm.py :27 import urllib.error
  • net phasespace-labs-palinode-194ae70/palinode/api/server.py :16 from urllib.parse import urlparse
  • net phasespace-labs-palinode-194ae70/palinode/api/ui/router.py :25 import socket
  • net phasespace-labs-palinode-194ae70/palinode/cli/_api.py :2 import httpx
  • net phasespace-labs-palinode-194ae70/palinode/consolidation/run_lock.py :14 import socket
  • net phasespace-labs-palinode-194ae70/palinode/core/ollama_client.py :44 import httpx
  • net phasespace-labs-palinode-194ae70/palinode/diagnostics/checks/reindex_state.py :19 import httpx
  • net phasespace-labs-palinode-194ae70/palinode/diagnostics/checks/service.py :25 import httpx
  • net phasespace-labs-palinode-194ae70/palinode/indexer/watcher.py :19 import urllib.request
  • net phasespace-labs-palinode-194ae70/palinode/ingest/pipeline.py :22 import httpx
  • net phasespace-labs-palinode-194ae70/palinode/mcp.py :41 import httpx
  • net (weak) phasespace-labs-palinode-194ae70/tests/integration/test_mcp_e2e.py :5 to the Palinode API, which we redirect in-process via an ``httpx.MockTransport``
  • net (weak) phasespace-labs-palinode-194ae70/tests/integration/test_mcp_e2e_rel_path.py :5 ``test_mcp_e2e.py`` (``httpx.MockTransport`` shim over FastAPI's
  • net (weak) phasespace-labs-palinode-194ae70/tests/integration/test_mcp_stdio.py :17 import socket
  • net (weak) phasespace-labs-palinode-194ae70/tests/integration/test_session_end_e2e_l1_l3.py :21 (``palinode.cli._api.api_client``) has its underlying ``httpx.Client`` swapped for one
  • net (weak) phasespace-labs-palinode-194ae70/tests/live/test_live_instance.py :22 import httpx
  • net (weak) phasespace-labs-palinode-194ae70/tests/test_api_bearer_auth.py :509 # middleware armed: MCP over ``httpx.ASGITransport``, the CLI over a transport
  • net (weak) phasespace-labs-palinode-194ae70/tests/test_auto_summary_async.py :280 # Phase 5: liveness now goes through OllamaClient.ping, not httpx.get.
  • net (weak) phasespace-labs-palinode-194ae70/tests/test_bench_longmemeval.py :156 monkeypatch.setattr(llm.urllib.request, "urlopen", fake_urlopen)
  • net (weak) phasespace-labs-palinode-194ae70/tests/test_bench_rowe_pipeline.py :123 monkeypatch.setattr(llm.urllib.request, "urlopen", lambda req, timeout=None: Resp())
  • net (weak) phasespace-labs-palinode-194ae70/tests/test_body_size_limit.py :17 import socket
  • net (weak) phasespace-labs-palinode-194ae70/tests/test_cli_error_exit_codes.py :6 import httpx
  • net (weak) phasespace-labs-palinode-194ae70/tests/test_cold_save_fast_return.py :13 httpx.MockTransport where a client is needed.
  • net (weak) phasespace-labs-palinode-194ae70/tests/test_consolidation_run_lock.py :10 import socket
  • net (weak) phasespace-labs-palinode-194ae70/tests/test_description_graceful_degrade.py :18 than calling httpx.post directly, so these tests patch the client seam
  • net (weak) phasespace-labs-palinode-194ae70/tests/test_doctor_mcp.py :20 import httpx
  • net (weak) phasespace-labs-palinode-194ae70/tests/test_doctor_phase5.py :379 "palinode.diagnostics.checks.reindex_state.httpx.get",
  • net (weak) phasespace-labs-palinode-194ae70/tests/test_doctor_service_checks.py :72 """Return a mock that looks like an httpx.Response."""
  • net (weak) phasespace-labs-palinode-194ae70/tests/test_embed_nan_input.py :19 faked at the HTTP layer (``httpx.MockTransport``) with the exact 500 body.
  • net (weak) phasespace-labs-palinode-194ae70/tests/test_fallback.py :5 `httpx.post`. The fallback chain (primary → fallbacks) stays in the runner; each attempt
  • net (weak) phasespace-labs-palinode-194ae70/tests/test_first_run_ux.py :9 Network is driven through httpx.MockTransport (real httpx exception types); no
  • net (weak) phasespace-labs-palinode-194ae70/tests/test_health_endpoint_accuracy.py :116 with mock.patch("httpx.get"): # skip Ollama reachability check
  • net (weak) phasespace-labs-palinode-194ae70/tests/test_mcp.py :13 import httpx
  • net (weak) phasespace-labs-palinode-194ae70/tests/test_mcp_is_error.py :16 import httpx
  • net (weak) phasespace-labs-palinode-194ae70/tests/test_mcp_parity.py :30 """Minimal stand-in for an httpx.Response — only what the dispatch reads."""
  • net (weak) phasespace-labs-palinode-194ae70/tests/test_ollama_client.py :13 httpx.MockTransport drives real httpx exception types through the retry path.
  • net (weak) phasespace-labs-palinode-194ae70/tests/test_reindex_concurrency.py :183 mock.patch("httpx.get"),
  • net (weak) phasespace-labs-palinode-194ae70/tests/test_review_cli.py :19 import httpx
  • net (weak) phasespace-labs-palinode-194ae70/tests/test_search_embedder_outage.py :9 import httpx

secrets 2

  • secrets phasespace-labs-palinode-194ae70/bench/longmemeval/llm.py :48 key = os.environ.get(p + "API_KEY") or os.environ.get("OPENAI_API_KEY", "")
  • secrets phasespace-labs-palinode-194ae70/palinode/core/auth.py :54 env_tok = os.environ.get("PALINODE_API_TOKEN", "").strip()

database 19

  • db phasespace-labs-palinode-194ae70/palinode/core/store.py :14 import sqlite3
  • db phasespace-labs-palinode-194ae70/palinode/diagnostics/checks/db_path.py :20 import sqlite3
  • db phasespace-labs-palinode-194ae70/palinode/diagnostics/checks/fts5_sync.py :28 import sqlite3
  • db phasespace-labs-palinode-194ae70/palinode/diagnostics/checks/index_size.py :27 import sqlite3
  • db phasespace-labs-palinode-194ae70/palinode/diagnostics/checks/phantom_db.py :29 import sqlite3
  • db phasespace-labs-palinode-194ae70/palinode/diagnostics/checks/recall_write_health.py :30 import sqlite3
  • db phasespace-labs-palinode-194ae70/palinode/diagnostics/checks/service.py :22 import sqlite3
  • db (weak) phasespace-labs-palinode-194ae70/tests/test_default_db_guard_scope.py :25 import sqlite3
  • db (weak) phasespace-labs-palinode-194ae70/tests/test_doctor_fix.py :21 import sqlite3
  • db (weak) phasespace-labs-palinode-194ae70/tests/test_doctor_fts5_sync.py :11 import sqlite3
  • db (weak) phasespace-labs-palinode-194ae70/tests/test_doctor_path_checks.py :16 import sqlite3
  • db (weak) phasespace-labs-palinode-194ae70/tests/test_doctor_phase5.py :19 import sqlite3
  • db (weak) phasespace-labs-palinode-194ae70/tests/test_doctor_service_checks.py :21 import sqlite3
  • db (weak) phasespace-labs-palinode-194ae70/tests/test_read_recall_e2e.py :25 import sqlite3
  • db (weak) phasespace-labs-palinode-194ae70/tests/test_recent_save_embeddings_db_error.py :11 import sqlite3
  • db (weak) phasespace-labs-palinode-194ae70/tests/test_store.py :3 import sqlite3
  • db (weak) phasespace-labs-palinode-194ae70/tests/test_store_wal_indexes.py :18 import sqlite3
  • db (weak) phasespace-labs-palinode-194ae70/tests/test_triggers_vec_upsert.py :24 import sqlite3
  • db (weak) phasespace-labs-palinode-194ae70/tests/test_write_chunk_row_vec_failure.py :21 import sqlite3

declared dependencies 19

  • mcp@>=2,<3
  • sqlite-vec@>=0.1.6
  • watchdog@>=4.0
  • pyyaml@>=6.0,<7.0
  • httpx@>=0.27
  • python-frontmatter@>=1.1
  • fastapi@>=0.115,<0.137
  • uvicorn@>=0.32
  • pydantic@>=2.7,<3.0
  • rich@>=13.7
  • click@>=8.1
  • jinja2@>=3.1.5
  • markdown-it-py@>=3.0
  • nh3@>=0.2.18
  • pytest@*
  • pytest-asyncio@*
  • pytest-timeout@*
  • ruff@*
  • bandit@*