fcp-python 0.1.0__tar.gz → 0.1.2__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 (44) hide show
  1. fcp_python-0.1.2/.claude-plugin/plugin.json +11 -0
  2. fcp_python-0.1.2/.mcp.json +8 -0
  3. {fcp_python-0.1.0 → fcp_python-0.1.2}/PKG-INFO +1 -1
  4. {fcp_python-0.1.0 → fcp_python-0.1.2}/pyproject.toml +1 -1
  5. {fcp_python-0.1.0 → fcp_python-0.1.2}/src/fcp_python/bridge.py +13 -12
  6. {fcp_python-0.1.0 → fcp_python-0.1.2}/tests/test_bridge.py +16 -3
  7. {fcp_python-0.1.0 → fcp_python-0.1.2}/uv.lock +1 -1
  8. {fcp_python-0.1.0 → fcp_python-0.1.2}/.github/workflows/ci.yml +0 -0
  9. {fcp_python-0.1.0 → fcp_python-0.1.2}/.github/workflows/release.yml +0 -0
  10. {fcp_python-0.1.0 → fcp_python-0.1.2}/CLAUDE.md +0 -0
  11. {fcp_python-0.1.0 → fcp_python-0.1.2}/Makefile +0 -0
  12. {fcp_python-0.1.0 → fcp_python-0.1.2}/README.md +0 -0
  13. {fcp_python-0.1.0 → fcp_python-0.1.2}/src/fcp_python/__init__.py +0 -0
  14. {fcp_python-0.1.0 → fcp_python-0.1.2}/src/fcp_python/domain/__init__.py +0 -0
  15. {fcp_python-0.1.0 → fcp_python-0.1.2}/src/fcp_python/domain/format.py +0 -0
  16. {fcp_python-0.1.0 → fcp_python-0.1.2}/src/fcp_python/domain/model.py +0 -0
  17. {fcp_python-0.1.0 → fcp_python-0.1.2}/src/fcp_python/domain/mutation.py +0 -0
  18. {fcp_python-0.1.0 → fcp_python-0.1.2}/src/fcp_python/domain/query.py +0 -0
  19. {fcp_python-0.1.0 → fcp_python-0.1.2}/src/fcp_python/domain/verbs.py +0 -0
  20. {fcp_python-0.1.0 → fcp_python-0.1.2}/src/fcp_python/lsp/__init__.py +0 -0
  21. {fcp_python-0.1.0 → fcp_python-0.1.2}/src/fcp_python/lsp/client.py +0 -0
  22. {fcp_python-0.1.0 → fcp_python-0.1.2}/src/fcp_python/lsp/lifecycle.py +0 -0
  23. {fcp_python-0.1.0 → fcp_python-0.1.2}/src/fcp_python/lsp/transport.py +0 -0
  24. {fcp_python-0.1.0 → fcp_python-0.1.2}/src/fcp_python/lsp/types.py +0 -0
  25. {fcp_python-0.1.0 → fcp_python-0.1.2}/src/fcp_python/lsp/workspace_edit.py +0 -0
  26. {fcp_python-0.1.0 → fcp_python-0.1.2}/src/fcp_python/main.py +0 -0
  27. {fcp_python-0.1.0 → fcp_python-0.1.2}/src/fcp_python/resolver/__init__.py +0 -0
  28. {fcp_python-0.1.0 → fcp_python-0.1.2}/src/fcp_python/resolver/index.py +0 -0
  29. {fcp_python-0.1.0 → fcp_python-0.1.2}/src/fcp_python/resolver/pipeline.py +0 -0
  30. {fcp_python-0.1.0 → fcp_python-0.1.2}/src/fcp_python/resolver/selectors.py +0 -0
  31. {fcp_python-0.1.0 → fcp_python-0.1.2}/tests/__init__.py +0 -0
  32. {fcp_python-0.1.0 → fcp_python-0.1.2}/tests/test_client.py +0 -0
  33. {fcp_python-0.1.0 → fcp_python-0.1.2}/tests/test_format.py +0 -0
  34. {fcp_python-0.1.0 → fcp_python-0.1.2}/tests/test_index.py +0 -0
  35. {fcp_python-0.1.0 → fcp_python-0.1.2}/tests/test_lifecycle.py +0 -0
  36. {fcp_python-0.1.0 → fcp_python-0.1.2}/tests/test_model.py +0 -0
  37. {fcp_python-0.1.0 → fcp_python-0.1.2}/tests/test_mutation.py +0 -0
  38. {fcp_python-0.1.0 → fcp_python-0.1.2}/tests/test_pipeline.py +0 -0
  39. {fcp_python-0.1.0 → fcp_python-0.1.2}/tests/test_query.py +0 -0
  40. {fcp_python-0.1.0 → fcp_python-0.1.2}/tests/test_selectors.py +0 -0
  41. {fcp_python-0.1.0 → fcp_python-0.1.2}/tests/test_transport.py +0 -0
  42. {fcp_python-0.1.0 → fcp_python-0.1.2}/tests/test_types.py +0 -0
  43. {fcp_python-0.1.0 → fcp_python-0.1.2}/tests/test_verbs.py +0 -0
  44. {fcp_python-0.1.0 → fcp_python-0.1.2}/tests/test_workspace_edit.py +0 -0
@@ -0,0 +1,11 @@
1
+ {
2
+ "name": "fcp-python",
3
+ "description": "Query and refactor Python codebases through intent-level commands",
4
+ "version": "0.1.2",
5
+ "license": "MIT",
6
+ "author": {
7
+ "name": "Scott Meyer"
8
+ },
9
+ "repository": "https://github.com/aetherwing-io/fcp-python",
10
+ "keywords": ["python", "pylsp", "refactoring", "code-intelligence", "mcp"]
11
+ }
@@ -0,0 +1,8 @@
1
+ {
2
+ "mcpServers": {
3
+ "python": {
4
+ "command": "uvx",
5
+ "args": ["--refresh-package", "fcp-python", "--python", "3.13", "fcp-python"]
6
+ }
7
+ }
8
+ }
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: fcp-python
3
- Version: 0.1.0
3
+ Version: 0.1.2
4
4
  Summary: Python Code Intelligence FCP — semantic Python code operations for LLMs via pylsp
5
5
  Requires-Python: <3.14,>=3.11
6
6
  Requires-Dist: fastmcp>=3.0
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "fcp-python"
3
- version = "0.1.0"
3
+ version = "0.1.2"
4
4
  description = "Python Code Intelligence FCP — semantic Python code operations for LLMs via pylsp"
5
5
  requires-python = ">=3.11,<3.14"
6
6
  dependencies = [
@@ -100,22 +100,23 @@ def _bridge_thread(
100
100
 
101
101
 
102
102
  def _discover_socket() -> str | None:
103
- """Find daemon socket path."""
104
- # 1. SLIPSTREAM_SOCKET env var
103
+ """Find daemon socket path.
104
+
105
+ Matches slipstream-core's default_socket_path():
106
+ SLIPSTREAM_SOCKET || {XDG_RUNTIME_DIR || TMPDIR || /tmp}/slipstream.sock
107
+ """
108
+ # 1. SLIPSTREAM_SOCKET env var (set by daemon when it spawns plugins)
105
109
  path = os.environ.get("SLIPSTREAM_SOCKET")
106
110
  if path and os.path.exists(path):
107
111
  return path
108
112
 
109
- # 2. XDG_RUNTIME_DIR/slipstream/daemon.sock
110
- xdg = os.environ.get("XDG_RUNTIME_DIR")
111
- if xdg:
112
- path = os.path.join(xdg, "slipstream", "daemon.sock")
113
- if os.path.exists(path):
114
- return path
115
-
116
- # 3. /tmp/slipstream-{uid}/daemon.sock
117
- uid = os.getuid()
118
- path = f"/tmp/slipstream-{uid}/daemon.sock"
113
+ # 2. Default path: {runtime_dir}/slipstream.sock
114
+ runtime_dir = (
115
+ os.environ.get("XDG_RUNTIME_DIR")
116
+ or os.environ.get("TMPDIR")
117
+ or "/tmp"
118
+ )
119
+ path = os.path.join(runtime_dir, "slipstream.sock")
119
120
  if os.path.exists(path):
120
121
  return path
121
122
 
@@ -36,13 +36,26 @@ class TestDiscoverSocket:
36
36
  os.environ.update(orig)
37
37
 
38
38
  def test_xdg_runtime_dir(self, tmp_path):
39
- ss_dir = tmp_path / "slipstream"
40
- ss_dir.mkdir()
41
- sock = ss_dir / "daemon.sock"
39
+ sock = tmp_path / "slipstream.sock"
42
40
  sock.touch()
43
41
  orig = os.environ.copy()
44
42
  os.environ.pop("SLIPSTREAM_SOCKET", None)
45
43
  os.environ["XDG_RUNTIME_DIR"] = str(tmp_path)
44
+ os.environ.pop("TMPDIR", None)
45
+ try:
46
+ result = _discover_socket()
47
+ assert result == str(sock)
48
+ finally:
49
+ os.environ.clear()
50
+ os.environ.update(orig)
51
+
52
+ def test_tmpdir_fallback(self, tmp_path):
53
+ sock = tmp_path / "slipstream.sock"
54
+ sock.touch()
55
+ orig = os.environ.copy()
56
+ os.environ.pop("SLIPSTREAM_SOCKET", None)
57
+ os.environ.pop("XDG_RUNTIME_DIR", None)
58
+ os.environ["TMPDIR"] = str(tmp_path)
46
59
  try:
47
60
  result = _discover_socket()
48
61
  assert result == str(sock)
@@ -386,7 +386,7 @@ wheels = [
386
386
 
387
387
  [[package]]
388
388
  name = "fcp-python"
389
- version = "0.1.0"
389
+ version = "0.1.2"
390
390
  source = { editable = "." }
391
391
  dependencies = [
392
392
  { name = "fastmcp" },
File without changes
File without changes
File without changes
File without changes