plane-agent 2.3.7__tar.gz → 2.3.9__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 (77) hide show
  1. {plane_agent-2.3.7/plane_agent.egg-info → plane_agent-2.3.9}/PKG-INFO +5 -5
  2. {plane_agent-2.3.7 → plane_agent-2.3.9}/README.md +1 -1
  3. {plane_agent-2.3.7 → plane_agent-2.3.9}/plane_agent/connector_sources.py +33 -0
  4. {plane_agent-2.3.7 → plane_agent-2.3.9/plane_agent.egg-info}/PKG-INFO +5 -5
  5. plane_agent-2.3.9/plane_agent.egg-info/requires.txt +14 -0
  6. {plane_agent-2.3.7 → plane_agent-2.3.9}/pyproject.toml +4 -4
  7. plane_agent-2.3.9/requirements.txt +1 -0
  8. plane_agent-2.3.9/tests/test_ingest_sources.py +65 -0
  9. plane_agent-2.3.7/plane_agent.egg-info/requires.txt +0 -14
  10. plane_agent-2.3.7/requirements.txt +0 -1
  11. plane_agent-2.3.7/tests/test_ingest_sources.py +0 -27
  12. {plane_agent-2.3.7 → plane_agent-2.3.9}/LICENSE +0 -0
  13. {plane_agent-2.3.7 → plane_agent-2.3.9}/MANIFEST.in +0 -0
  14. {plane_agent-2.3.7 → plane_agent-2.3.9}/plane_agent/__init__.py +0 -0
  15. {plane_agent-2.3.7 → plane_agent-2.3.9}/plane_agent/__main__.py +0 -0
  16. {plane_agent-2.3.7 → plane_agent-2.3.9}/plane_agent/api/__init__.py +0 -0
  17. {plane_agent-2.3.7 → plane_agent-2.3.9}/plane_agent/api/api_client_base.py +0 -0
  18. {plane_agent-2.3.7 → plane_agent-2.3.9}/plane_agent/api/api_client_cycles.py +0 -0
  19. {plane_agent-2.3.7 → plane_agent-2.3.9}/plane_agent/api/api_client_epics.py +0 -0
  20. {plane_agent-2.3.7 → plane_agent-2.3.9}/plane_agent/api/api_client_initiatives.py +0 -0
  21. {plane_agent-2.3.7 → plane_agent-2.3.9}/plane_agent/api/api_client_intake.py +0 -0
  22. {plane_agent-2.3.7 → plane_agent-2.3.9}/plane_agent/api/api_client_milestones.py +0 -0
  23. {plane_agent-2.3.7 → plane_agent-2.3.9}/plane_agent/api/api_client_modules_states.py +0 -0
  24. {plane_agent-2.3.7 → plane_agent-2.3.9}/plane_agent/api/api_client_projects.py +0 -0
  25. {plane_agent-2.3.7 → plane_agent-2.3.9}/plane_agent/api/api_client_work_items.py +0 -0
  26. {plane_agent-2.3.7 → plane_agent-2.3.9}/plane_agent/api/api_client_workspace.py +0 -0
  27. {plane_agent-2.3.7 → plane_agent-2.3.9}/plane_agent/api_client.py +0 -0
  28. {plane_agent-2.3.7 → plane_agent-2.3.9}/plane_agent/auth.py +0 -0
  29. {plane_agent-2.3.7 → plane_agent-2.3.9}/plane_agent/connectors/__init__.py +0 -0
  30. {plane_agent-2.3.7 → plane_agent-2.3.9}/plane_agent/kg_ingest.py +0 -0
  31. {plane_agent-2.3.7 → plane_agent-2.3.9}/plane_agent/mcp_config.json +0 -0
  32. {plane_agent-2.3.7 → plane_agent-2.3.9}/plane_agent/mcp_server.py +0 -0
  33. {plane_agent-2.3.7 → plane_agent-2.3.9}/plane_agent/ontology/__init__.py +0 -0
  34. {plane_agent-2.3.7 → plane_agent-2.3.9}/plane_agent/ontology/certification.json +0 -0
  35. {plane_agent-2.3.7 → plane_agent-2.3.9}/plane_agent/ontology/fixtures/records.json +0 -0
  36. {plane_agent-2.3.7 → plane_agent-2.3.9}/plane_agent/ontology/mappings/source.yaml +0 -0
  37. {plane_agent-2.3.7 → plane_agent-2.3.9}/plane_agent/ontology/migrations/manifest.json +0 -0
  38. {plane_agent-2.3.7 → plane_agent-2.3.9}/plane_agent/ontology/plane.ttl +0 -0
  39. {plane_agent-2.3.7 → plane_agent-2.3.9}/plane_agent/ontology/shapes/connector.shacl.ttl +0 -0
  40. {plane_agent-2.3.7 → plane_agent-2.3.9}/plane_agent/plane_models.py +0 -0
  41. {plane_agent-2.3.7 → plane_agent-2.3.9}/plane_agent/prompts/__init__.py +0 -0
  42. {plane_agent-2.3.7 → plane_agent-2.3.9}/plane_agent/prompts/project_tracking_specialist.json +0 -0
  43. {plane_agent-2.3.7 → plane_agent-2.3.9}/plane_agent/skills/__init__.py +0 -0
  44. {plane_agent-2.3.7 → plane_agent-2.3.9}/plane_agent/skills/plane-agent-operations/SKILL.md +0 -0
  45. {plane_agent-2.3.7 → plane_agent-2.3.9}/plane_agent/skills/plane-agent-operations/agents/openai.yaml +0 -0
  46. {plane_agent-2.3.7 → plane_agent-2.3.9}/plane_agent/skills/plane-agent-operations/references/catalog.md +0 -0
  47. {plane_agent-2.3.7 → plane_agent-2.3.9}/plane_agent/skills/plane-create-work-item-guided/SKILL.md +0 -0
  48. {plane_agent-2.3.7 → plane_agent-2.3.9}/plane_agent/skills/plane-create-work-item-guided/WORKFLOW.md +0 -0
  49. {plane_agent-2.3.7 → plane_agent-2.3.9}/plane_agent/skills/plane-create-work-item-guided/references/property-discovery.md +0 -0
  50. {plane_agent-2.3.7 → plane_agent-2.3.9}/plane_agent/skills/plane-cycle-planning/SKILL.md +0 -0
  51. {plane_agent-2.3.7 → plane_agent-2.3.9}/plane_agent/skills/plane-cycle-planning/WORKFLOW.md +0 -0
  52. {plane_agent-2.3.7 → plane_agent-2.3.9}/plane_agent/skills/plane-kg-ingestion/SKILL.md +0 -0
  53. {plane_agent-2.3.7 → plane_agent-2.3.9}/plane_agent/skills/plane-kg-ingestion/WORKFLOW.md +0 -0
  54. {plane_agent-2.3.7 → plane_agent-2.3.9}/plane_agent/skills/plane-my-priority-queue/SKILL.md +0 -0
  55. {plane_agent-2.3.7 → plane_agent-2.3.9}/plane_agent/skills/plane-my-priority-queue/WORKFLOW.md +0 -0
  56. {plane_agent-2.3.7 → plane_agent-2.3.9}/plane_agent/skills/plane-my-priority-queue/references/filter-recipes.md +0 -0
  57. {plane_agent-2.3.7 → plane_agent-2.3.9}/plane_agent/skills/plane-my-priority-queue/scripts/rank_items.py +0 -0
  58. {plane_agent-2.3.7 → plane_agent-2.3.9}/plane_agent/skills/plane-work-item-tracking/SKILL.md +0 -0
  59. {plane_agent-2.3.7 → plane_agent-2.3.9}/plane_agent/skills/plane-work-item-tracking/WORKFLOW.md +0 -0
  60. {plane_agent-2.3.7 → plane_agent-2.3.9}/plane_agent.egg-info/SOURCES.txt +0 -0
  61. {plane_agent-2.3.7 → plane_agent-2.3.9}/plane_agent.egg-info/dependency_links.txt +0 -0
  62. {plane_agent-2.3.7 → plane_agent-2.3.9}/plane_agent.egg-info/entry_points.txt +0 -0
  63. {plane_agent-2.3.7 → plane_agent-2.3.9}/plane_agent.egg-info/top_level.txt +0 -0
  64. {plane_agent-2.3.7 → plane_agent-2.3.9}/scripts/security_sanitizer.py +0 -0
  65. {plane_agent-2.3.7 → plane_agent-2.3.9}/scripts/verify_api_integration.py +0 -0
  66. {plane_agent-2.3.7 → plane_agent-2.3.9}/setup.cfg +0 -0
  67. {plane_agent-2.3.7 → plane_agent-2.3.9}/tests/conftest.py +0 -0
  68. {plane_agent-2.3.7 → plane_agent-2.3.9}/tests/test_action_discovery.py +0 -0
  69. {plane_agent-2.3.7 → plane_agent-2.3.9}/tests/test_coverage_gap_fillers.py +0 -0
  70. {plane_agent-2.3.7 → plane_agent-2.3.9}/tests/test_cq_paths.py +0 -0
  71. {plane_agent-2.3.7 → plane_agent-2.3.9}/tests/test_default_content_surfaces.py +0 -0
  72. {plane_agent-2.3.7 → plane_agent-2.3.9}/tests/test_init.py +0 -0
  73. {plane_agent-2.3.7 → plane_agent-2.3.9}/tests/test_init_dynamics.py +0 -0
  74. {plane_agent-2.3.7 → plane_agent-2.3.9}/tests/test_kg_ingest.py +0 -0
  75. {plane_agent-2.3.7 → plane_agent-2.3.9}/tests/test_ontology_parent_link.py +0 -0
  76. {plane_agent-2.3.7 → plane_agent-2.3.9}/tests/test_rank_items.py +0 -0
  77. {plane_agent-2.3.7 → plane_agent-2.3.9}/tests/test_startup.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: plane-agent
3
- Version: 2.3.7
3
+ Version: 2.3.9
4
4
  Summary: Plane MCP Agent
5
5
  Author-email: Project Maintainers <maintainers@users.noreply.github.com>
6
6
  License: MIT
@@ -12,12 +12,12 @@ Classifier: Programming Language :: Python :: 3
12
12
  Requires-Python: <3.15,>=3.12
13
13
  Description-Content-Type: text/markdown
14
14
  License-File: LICENSE
15
- Requires-Dist: agent-connector-sdk[mcp]<1.0.0,>=0.4.0
15
+ Requires-Dist: agent-connector-sdk[mcp]<1.0.0,>=0.4.3
16
16
  Requires-Dist: requests>=2.34.2
17
17
  Provides-Extra: mcp
18
- Requires-Dist: agent-connector-sdk[mcp]<1.0.0,>=0.4.0; extra == "mcp"
18
+ Requires-Dist: agent-connector-sdk[mcp]<1.0.0,>=0.4.3; extra == "mcp"
19
19
  Provides-Extra: all
20
- Requires-Dist: agent-connector-sdk[mcp]<1.0.0,>=0.4.0; extra == "all"
20
+ Requires-Dist: agent-connector-sdk[mcp]<1.0.0,>=0.4.3; extra == "all"
21
21
  Provides-Extra: test
22
22
  Requires-Dist: pytest-xdist>=3.8.0; extra == "test"
23
23
  Requires-Dist: pytest>=9.1.1; extra == "test"
@@ -47,7 +47,7 @@ Dynamic: license-file
47
47
  ![PyPI - Wheel](https://img.shields.io/pypi/wheel/plane-agent)
48
48
  ![PyPI - Implementation](https://img.shields.io/pypi/implementation/plane-agent)
49
49
 
50
- *Version: 2.3.7*
50
+ *Version: 2.3.9*
51
51
 
52
52
  > **Documentation** — Installation, deployment, usage across the API, CLI, and MCP
53
53
  > interfaces, and guidance for provisioning a self-hosted Plane instance are
@@ -20,7 +20,7 @@
20
20
  ![PyPI - Wheel](https://img.shields.io/pypi/wheel/plane-agent)
21
21
  ![PyPI - Implementation](https://img.shields.io/pypi/implementation/plane-agent)
22
22
 
23
- *Version: 2.3.7*
23
+ *Version: 2.3.9*
24
24
 
25
25
  > **Documentation** — Installation, deployment, usage across the API, CLI, and MCP
26
26
  > interfaces, and guidance for provisioning a self-hosted Plane instance are
@@ -28,6 +28,39 @@ SOURCES = (
28
28
  text_field="description",
29
29
  title_field="name",
30
30
  ),
31
+ source_meta(
32
+ tool="plane_list_work_items",
33
+ source_id="work-items",
34
+ record_type="Issue",
35
+ id_field="id",
36
+ cursor_field="updated_at",
37
+ description="Plane work items of every project in the workspace.",
38
+ for_each={"source": "projects", "argument": "project_id", "field": "id"},
39
+ preset={
40
+ "doc_type": "work_item",
41
+ "params_style": "args",
42
+ },
43
+ records_path="data.results",
44
+ server="plane-mcp",
45
+ text_field="description_html",
46
+ title_field="name",
47
+ ),
48
+ source_meta(
49
+ tool="plane_list_states",
50
+ source_id="project-states",
51
+ record_type="ProjectState",
52
+ id_field="id",
53
+ cursor_field="updated_at",
54
+ description="Workflow states of every project; resolves the state id of a work item to its name.",
55
+ for_each={"source": "projects", "argument": "project_id", "field": "id"},
56
+ preset={
57
+ "doc_type": "project_state",
58
+ "params_style": "args",
59
+ },
60
+ records_path="data",
61
+ server="plane-mcp",
62
+ title_field="name",
63
+ ),
31
64
  )
32
65
 
33
66
  SCHEMA_MAPPINGS = {
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: plane-agent
3
- Version: 2.3.7
3
+ Version: 2.3.9
4
4
  Summary: Plane MCP Agent
5
5
  Author-email: Project Maintainers <maintainers@users.noreply.github.com>
6
6
  License: MIT
@@ -12,12 +12,12 @@ Classifier: Programming Language :: Python :: 3
12
12
  Requires-Python: <3.15,>=3.12
13
13
  Description-Content-Type: text/markdown
14
14
  License-File: LICENSE
15
- Requires-Dist: agent-connector-sdk[mcp]<1.0.0,>=0.4.0
15
+ Requires-Dist: agent-connector-sdk[mcp]<1.0.0,>=0.4.3
16
16
  Requires-Dist: requests>=2.34.2
17
17
  Provides-Extra: mcp
18
- Requires-Dist: agent-connector-sdk[mcp]<1.0.0,>=0.4.0; extra == "mcp"
18
+ Requires-Dist: agent-connector-sdk[mcp]<1.0.0,>=0.4.3; extra == "mcp"
19
19
  Provides-Extra: all
20
- Requires-Dist: agent-connector-sdk[mcp]<1.0.0,>=0.4.0; extra == "all"
20
+ Requires-Dist: agent-connector-sdk[mcp]<1.0.0,>=0.4.3; extra == "all"
21
21
  Provides-Extra: test
22
22
  Requires-Dist: pytest-xdist>=3.8.0; extra == "test"
23
23
  Requires-Dist: pytest>=9.1.1; extra == "test"
@@ -47,7 +47,7 @@ Dynamic: license-file
47
47
  ![PyPI - Wheel](https://img.shields.io/pypi/wheel/plane-agent)
48
48
  ![PyPI - Implementation](https://img.shields.io/pypi/implementation/plane-agent)
49
49
 
50
- *Version: 2.3.7*
50
+ *Version: 2.3.9*
51
51
 
52
52
  > **Documentation** — Installation, deployment, usage across the API, CLI, and MCP
53
53
  > interfaces, and guidance for provisioning a self-hosted Plane instance are
@@ -0,0 +1,14 @@
1
+ agent-connector-sdk[mcp]<1.0.0,>=0.4.3
2
+ requests>=2.34.2
3
+
4
+ [all]
5
+ agent-connector-sdk[mcp]<1.0.0,>=0.4.3
6
+
7
+ [mcp]
8
+ agent-connector-sdk[mcp]<1.0.0,>=0.4.3
9
+
10
+ [test]
11
+ pytest-xdist>=3.8.0
12
+ pytest>=9.1.1
13
+ pytest-asyncio>=1.4.0
14
+ pytest-cov>=7.1.0
@@ -4,12 +4,12 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "plane-agent"
7
- version = "2.3.7"
7
+ version = "2.3.9"
8
8
  description = "Plane MCP Agent"
9
9
  readme = "README.md"
10
10
  classifiers = [ "Development Status :: 4 - Beta", "License :: OSI Approved :: MIT License", "Environment :: Console", "Operating System :: POSIX :: Linux", "Programming Language :: Python :: 3",]
11
11
  requires-python = ">=3.12, <3.15"
12
- dependencies = [ "agent-connector-sdk[mcp]>=0.4.0,<1.0.0", "requests>=2.34.2",]
12
+ dependencies = [ "agent-connector-sdk[mcp]>=0.4.3,<1.0.0", "requests>=2.34.2",]
13
13
  [[project.authors]]
14
14
  name = "Project Maintainers"
15
15
  email = "maintainers@users.noreply.github.com"
@@ -21,8 +21,8 @@ text = "MIT"
21
21
  plane-mcp = "plane_agent.mcp_server:mcp_server"
22
22
 
23
23
  [project.optional-dependencies]
24
- mcp = [ "agent-connector-sdk[mcp]>=0.4.0,<1.0.0",]
25
- all = [ "agent-connector-sdk[mcp]>=0.4.0,<1.0.0",]
24
+ mcp = [ "agent-connector-sdk[mcp]>=0.4.3,<1.0.0",]
25
+ all = [ "agent-connector-sdk[mcp]>=0.4.3,<1.0.0",]
26
26
  test = [
27
27
  "pytest-xdist>=3.8.0", "pytest>=9.1.1", "pytest-asyncio>=1.4.0", "pytest-cov>=7.1.0",]
28
28
 
@@ -0,0 +1 @@
1
+ agent-connector-sdk[mcp]>=0.4.3,<1.0.0
@@ -0,0 +1,65 @@
1
+ """The packaged ingestible-source declaration (CONN-PLANE-AGENT-CONNECTOR-CONTENT-R003)."""
2
+
3
+ from __future__ import annotations
4
+
5
+ from pathlib import Path
6
+
7
+ import pytest
8
+ from plane_agent.connector_sources import declaration as declared_sources
9
+ from agent_connector_sdk.mcp.tool_surface import operation_prefix
10
+
11
+
12
+ REPO_ROOT = Path(__file__).resolve().parent.parent
13
+
14
+
15
+ @pytest.mark.spec("CONN-PLANE-AGENT-CONNECTOR-CONTENT-R003")
16
+ def test_declares_ingestible_sources() -> None:
17
+ declaration = declared_sources()
18
+ assert declaration is not None
19
+ assert declaration.connector == "plane-mcp"
20
+ prefix = operation_prefix("plane-agent")
21
+ expected = {
22
+ "projects": ("SoftwareProject", f"{prefix}_list_projects"),
23
+ "work-items": ("Issue", f"{prefix}_list_work_items"),
24
+ "project-states": ("ProjectState", f"{prefix}_list_states"),
25
+ }
26
+ assert [s.source_id for s in declaration.sources] == list(expected)
27
+ for source in declaration.sources:
28
+ record_type, tool = expected[source.source_id]
29
+ assert source.record_type == record_type
30
+ assert source.tools == (tool,)
31
+ # The engine admits a record only under the pack mapping of its type.
32
+ assert record_type in declaration.schema_mappings
33
+
34
+
35
+ @pytest.mark.spec("CONN-PLANE-AGENT-CONNECTOR-CONTENT-R003")
36
+ def test_work_items_fan_out_per_project_and_map_to_issue_state() -> None:
37
+ declaration = declared_sources()
38
+ for source_id in ("work-items", "project-states"):
39
+ source = declaration.source(source_id)
40
+ assert source is not None and source.for_each is not None
41
+ assert source.for_each.source == "projects"
42
+ assert (source.for_each.argument, source.for_each.field) == (
43
+ "project_id",
44
+ "id",
45
+ )
46
+ work_items = declaration.source("work-items")
47
+ assert work_items is not None
48
+ assert (work_items.id_field, work_items.title_field) == ("id", "name")
49
+ assert work_items.records_path == "data.results"
50
+ mapping = declaration.schema_mappings["Issue"]
51
+ assert mapping.ontology_class == "WorkItem"
52
+ assert "state" in mapping.fields
53
+ ontology = (REPO_ROOT / "plane_agent" / "ontology" / "plane.ttl").read_text()
54
+ assert "Issue" in ontology and "state" in ontology
55
+
56
+
57
+ @pytest.mark.spec("CONN-PLANE-AGENT-CONNECTOR-CONTENT-R003")
58
+ def test_sources_name_read_only_tools() -> None:
59
+ source_text = (REPO_ROOT / "plane_agent" / "mcp_server.py").read_text()
60
+ declaration = declared_sources()
61
+ for source in declaration.sources:
62
+ assert not any(
63
+ verb in tool for tool in source.tools for verb in ("create", "update", "delete")
64
+ )
65
+ assert "list_work_items" in source_text and "list_states" in source_text
@@ -1,14 +0,0 @@
1
- agent-connector-sdk[mcp]<1.0.0,>=0.4.0
2
- requests>=2.34.2
3
-
4
- [all]
5
- agent-connector-sdk[mcp]<1.0.0,>=0.4.0
6
-
7
- [mcp]
8
- agent-connector-sdk[mcp]<1.0.0,>=0.4.0
9
-
10
- [test]
11
- pytest-xdist>=3.8.0
12
- pytest>=9.1.1
13
- pytest-asyncio>=1.4.0
14
- pytest-cov>=7.1.0
@@ -1 +0,0 @@
1
- agent-connector-sdk[mcp]>=0.4.0,<1.0.0
@@ -1,27 +0,0 @@
1
- """The packaged ingestible-source declaration (CONN-PLANE-AGENT-CONNECTOR-CONTENT-R003)."""
2
-
3
- from __future__ import annotations
4
-
5
- from pathlib import Path
6
-
7
- import pytest
8
- from plane_agent.connector_sources import declaration as declared_sources
9
- from agent_connector_sdk.mcp.tool_surface import operation_prefix
10
-
11
-
12
- REPO_ROOT = Path(__file__).resolve().parent.parent
13
-
14
-
15
- @pytest.mark.spec("CONN-PLANE-AGENT-CONNECTOR-CONTENT-R003")
16
- def test_declares_ingestible_sources() -> None:
17
- declaration = declared_sources()
18
- assert declaration is not None
19
- assert declaration.connector == "plane-mcp"
20
- source = declaration.source("projects")
21
- assert source is not None and source.record_type == "SoftwareProject"
22
- prefix = operation_prefix("plane-agent")
23
- assert source.tools == (f"{prefix}_list_projects",)
24
- # The engine admits a record only under the pack mapping of its type.
25
- assert source.record_type in declared_sources().schema_mappings
26
- # Work items are project-scoped, so only the projects source is declared.
27
- assert [s.source_id for s in declaration.sources] == ["projects"]
File without changes
File without changes
File without changes