nextcloud-agent 3.0.0__tar.gz → 3.1.0__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (76) hide show
  1. {nextcloud_agent-3.0.0 → nextcloud_agent-3.1.0}/PKG-INFO +13 -13
  2. {nextcloud_agent-3.0.0 → nextcloud_agent-3.1.0}/README.md +11 -11
  3. {nextcloud_agent-3.0.0 → nextcloud_agent-3.1.0}/nextcloud_agent/kg_ingest.py +1 -1
  4. {nextcloud_agent-3.0.0 → nextcloud_agent-3.1.0}/nextcloud_agent/ontology/__init__.py +1 -1
  5. {nextcloud_agent-3.0.0 → nextcloud_agent-3.1.0}/nextcloud_agent/ontology/certification.json +3 -3
  6. {nextcloud_agent-3.0.0 → nextcloud_agent-3.1.0}/nextcloud_agent/ontology/nextcloud.ttl +27 -26
  7. {nextcloud_agent-3.0.0 → nextcloud_agent-3.1.0}/nextcloud_agent/ontology/shapes/connector.shacl.ttl +2 -2
  8. {nextcloud_agent-3.0.0 → nextcloud_agent-3.1.0}/nextcloud_agent.egg-info/PKG-INFO +13 -13
  9. {nextcloud_agent-3.0.0 → nextcloud_agent-3.1.0}/nextcloud_agent.egg-info/SOURCES.txt +1 -0
  10. {nextcloud_agent-3.0.0 → nextcloud_agent-3.1.0}/nextcloud_agent.egg-info/requires.txt +1 -1
  11. {nextcloud_agent-3.0.0 → nextcloud_agent-3.1.0}/pyproject.toml +2 -2
  12. nextcloud_agent-3.1.0/tests/test_scion_sdk_0_10_imports.py +59 -0
  13. {nextcloud_agent-3.0.0 → nextcloud_agent-3.1.0}/LICENSE +0 -0
  14. {nextcloud_agent-3.0.0 → nextcloud_agent-3.1.0}/nextcloud_agent/__init__.py +0 -0
  15. {nextcloud_agent-3.0.0 → nextcloud_agent-3.1.0}/nextcloud_agent/__main__.py +0 -0
  16. {nextcloud_agent-3.0.0 → nextcloud_agent-3.1.0}/nextcloud_agent/api/__init__.py +0 -0
  17. {nextcloud_agent-3.0.0 → nextcloud_agent-3.1.0}/nextcloud_agent/api/api_client_activity.py +0 -0
  18. {nextcloud_agent-3.0.0 → nextcloud_agent-3.1.0}/nextcloud_agent/api/api_client_admin.py +0 -0
  19. {nextcloud_agent-3.0.0 → nextcloud_agent-3.1.0}/nextcloud_agent/api/api_client_base.py +0 -0
  20. {nextcloud_agent-3.0.0 → nextcloud_agent-3.1.0}/nextcloud_agent/api/api_client_calendar.py +0 -0
  21. {nextcloud_agent-3.0.0 → nextcloud_agent-3.1.0}/nextcloud_agent/api/api_client_contacts.py +0 -0
  22. {nextcloud_agent-3.0.0 → nextcloud_agent-3.1.0}/nextcloud_agent/api/api_client_deck.py +0 -0
  23. {nextcloud_agent-3.0.0 → nextcloud_agent-3.1.0}/nextcloud_agent/api/api_client_files.py +0 -0
  24. {nextcloud_agent-3.0.0 → nextcloud_agent-3.1.0}/nextcloud_agent/api/api_client_notes.py +0 -0
  25. {nextcloud_agent-3.0.0 → nextcloud_agent-3.1.0}/nextcloud_agent/api/api_client_office.py +0 -0
  26. {nextcloud_agent-3.0.0 → nextcloud_agent-3.1.0}/nextcloud_agent/api/api_client_shares.py +0 -0
  27. {nextcloud_agent-3.0.0 → nextcloud_agent-3.1.0}/nextcloud_agent/api/api_client_talk.py +0 -0
  28. {nextcloud_agent-3.0.0 → nextcloud_agent-3.1.0}/nextcloud_agent/api/xml_security.py +0 -0
  29. {nextcloud_agent-3.0.0 → nextcloud_agent-3.1.0}/nextcloud_agent/api_client.py +0 -0
  30. {nextcloud_agent-3.0.0 → nextcloud_agent-3.1.0}/nextcloud_agent/auth.py +0 -0
  31. {nextcloud_agent-3.0.0 → nextcloud_agent-3.1.0}/nextcloud_agent/connector_contracts.py +0 -0
  32. {nextcloud_agent-3.0.0 → nextcloud_agent-3.1.0}/nextcloud_agent/connector_sources.py +0 -0
  33. {nextcloud_agent-3.0.0 → nextcloud_agent-3.1.0}/nextcloud_agent/mcp_config.json +0 -0
  34. {nextcloud_agent-3.0.0 → nextcloud_agent-3.1.0}/nextcloud_agent/ontology/fixtures/records.json +0 -0
  35. {nextcloud_agent-3.0.0 → nextcloud_agent-3.1.0}/nextcloud_agent/ontology/mappings/source.yaml +0 -0
  36. {nextcloud_agent-3.0.0 → nextcloud_agent-3.1.0}/nextcloud_agent/ontology/migrations/manifest.json +0 -0
  37. {nextcloud_agent-3.0.0 → nextcloud_agent-3.1.0}/nextcloud_agent/prompts/asset_publisher.json +0 -0
  38. {nextcloud_agent-3.0.0 → nextcloud_agent-3.1.0}/nextcloud_agent/prompts/file_steward.json +0 -0
  39. {nextcloud_agent-3.0.0 → nextcloud_agent-3.1.0}/nextcloud_agent/prompts/office_coordinator.json +0 -0
  40. {nextcloud_agent-3.0.0 → nextcloud_agent-3.1.0}/nextcloud_agent/prompts/operator.json +0 -0
  41. {nextcloud_agent-3.0.0 → nextcloud_agent-3.1.0}/nextcloud_agent/prompts/project_coordinator.json +0 -0
  42. {nextcloud_agent-3.0.0 → nextcloud_agent-3.1.0}/nextcloud_agent/prompts/workspace_admin.json +0 -0
  43. {nextcloud_agent-3.0.0 → nextcloud_agent-3.1.0}/nextcloud_agent/skills/nextcloud-activity/SKILL.md +0 -0
  44. {nextcloud_agent-3.0.0 → nextcloud_agent-3.1.0}/nextcloud_agent/skills/nextcloud-admin/SKILL.md +0 -0
  45. {nextcloud_agent-3.0.0 → nextcloud_agent-3.1.0}/nextcloud_agent/skills/nextcloud-agent-development/SKILL.md +0 -0
  46. {nextcloud_agent-3.0.0 → nextcloud_agent-3.1.0}/nextcloud_agent/skills/nextcloud-agent-operations/SKILL.md +0 -0
  47. {nextcloud_agent-3.0.0 → nextcloud_agent-3.1.0}/nextcloud_agent/skills/nextcloud-agent-operations/agents/openai.yaml +0 -0
  48. {nextcloud_agent-3.0.0 → nextcloud_agent-3.1.0}/nextcloud_agent/skills/nextcloud-agent-operations/references/catalog.md +0 -0
  49. {nextcloud_agent-3.0.0 → nextcloud_agent-3.1.0}/nextcloud_agent/skills/nextcloud-calendar/SKILL.md +0 -0
  50. {nextcloud_agent-3.0.0 → nextcloud_agent-3.1.0}/nextcloud_agent/skills/nextcloud-contacts/SKILL.md +0 -0
  51. {nextcloud_agent-3.0.0 → nextcloud_agent-3.1.0}/nextcloud_agent/skills/nextcloud-deck/SKILL.md +0 -0
  52. {nextcloud_agent-3.0.0 → nextcloud_agent-3.1.0}/nextcloud_agent/skills/nextcloud-files/SKILL.md +0 -0
  53. {nextcloud_agent-3.0.0 → nextcloud_agent-3.1.0}/nextcloud_agent/skills/nextcloud-ingest/SKILL.md +0 -0
  54. {nextcloud_agent-3.0.0 → nextcloud_agent-3.1.0}/nextcloud_agent/skills/nextcloud-notes/SKILL.md +0 -0
  55. {nextcloud_agent-3.0.0 → nextcloud_agent-3.1.0}/nextcloud_agent/skills/nextcloud-office/SKILL.md +0 -0
  56. {nextcloud_agent-3.0.0 → nextcloud_agent-3.1.0}/nextcloud_agent/skills/nextcloud-publish-asset/SKILL.md +0 -0
  57. {nextcloud_agent-3.0.0 → nextcloud_agent-3.1.0}/nextcloud_agent/skills/nextcloud-shares/SKILL.md +0 -0
  58. {nextcloud_agent-3.0.0 → nextcloud_agent-3.1.0}/nextcloud_agent/skills/nextcloud-talk/SKILL.md +0 -0
  59. {nextcloud_agent-3.0.0 → nextcloud_agent-3.1.0}/nextcloud_agent/skills/nextcloud-tasks/SKILL.md +0 -0
  60. {nextcloud_agent-3.0.0 → nextcloud_agent-3.1.0}/nextcloud_agent.egg-info/dependency_links.txt +0 -0
  61. {nextcloud_agent-3.0.0 → nextcloud_agent-3.1.0}/nextcloud_agent.egg-info/entry_points.txt +0 -0
  62. {nextcloud_agent-3.0.0 → nextcloud_agent-3.1.0}/nextcloud_agent.egg-info/top_level.txt +0 -0
  63. {nextcloud_agent-3.0.0 → nextcloud_agent-3.1.0}/setup.cfg +0 -0
  64. {nextcloud_agent-3.0.0 → nextcloud_agent-3.1.0}/tests/conftest.py +0 -0
  65. {nextcloud_agent-3.0.0 → nextcloud_agent-3.1.0}/tests/test_api_client.py +0 -0
  66. {nextcloud_agent-3.0.0 → nextcloud_agent-3.1.0}/tests/test_auth.py +0 -0
  67. {nextcloud_agent-3.0.0 → nextcloud_agent-3.1.0}/tests/test_business_surface.py +0 -0
  68. {nextcloud_agent-3.0.0 → nextcloud_agent-3.1.0}/tests/test_content_surface.py +0 -0
  69. {nextcloud_agent-3.0.0 → nextcloud_agent-3.1.0}/tests/test_files_webdav.py +0 -0
  70. {nextcloud_agent-3.0.0 → nextcloud_agent-3.1.0}/tests/test_fleet_name.py +0 -0
  71. {nextcloud_agent-3.0.0 → nextcloud_agent-3.1.0}/tests/test_init.py +0 -0
  72. {nextcloud_agent-3.0.0 → nextcloud_agent-3.1.0}/tests/test_init_dynamics.py +0 -0
  73. {nextcloud_agent-3.0.0 → nextcloud_agent-3.1.0}/tests/test_kg_ingest.py +0 -0
  74. {nextcloud_agent-3.0.0 → nextcloud_agent-3.1.0}/tests/test_mcp_server.py +0 -0
  75. {nextcloud_agent-3.0.0 → nextcloud_agent-3.1.0}/tests/test_publication_workflow.py +0 -0
  76. {nextcloud_agent-3.0.0 → nextcloud_agent-3.1.0}/tests/test_xml_security.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: nextcloud-agent
3
- Version: 3.0.0
3
+ Version: 3.1.0
4
4
  Summary: Nextcloud MCP Server for Agentic AI!
5
5
  Author-email: Repository Maintainers <maintainers@knuckles.team>
6
6
  License: MIT
@@ -12,7 +12,7 @@ Classifier: Programming Language :: Python :: 3
12
12
  Requires-Python: >=3.12
13
13
  Description-Content-Type: text/markdown
14
14
  License-File: LICENSE
15
- Requires-Dist: scion-sdk[mcp]<0.9,>=0.8.0
15
+ Requires-Dist: scion-sdk[mcp]<0.12,>=0.11.0
16
16
  Requires-Dist: requests>=2.34.2
17
17
  Requires-Dist: defusedxml>=0.7.1
18
18
  Requires-Dist: python-dateutil>=2.9.0.post0
@@ -257,8 +257,8 @@ When query strings or parameters are supplied, an LLM-free **Knowledge Graph res
257
257
  <!-- MCP-CONFIG-EXAMPLES:START -->
258
258
 
259
259
  > **Install the connector-focused `[mcp]` extra.** Examples use `nextcloud-agent[mcp]` to add
260
- > FastMCP / FastAPI through `scion-sdk[mcp]`; the required Agent Utilities core
261
- > still carries `epistemic-graph[full]`. The `[agent-runtime]` extra additionally
260
+ > FastMCP / FastAPI through `scion-sdk[mcp]`; the required Meristem core
261
+ > still carries `medulla[full]`. The `[agent-runtime]` extra additionally
262
262
  > enables model orchestration.
263
263
 
264
264
  #### stdio Transport (local IDEs — Cursor, Claude Desktop, VS Code)
@@ -589,8 +589,8 @@ Pick the extra that matches what the operator want to run:
589
589
 
590
590
  | Extra | Installs | Use when |
591
591
  |-------|----------|----------|
592
- | `nextcloud-agent[mcp]` | Connector-focused MCP server (`scion-sdk[mcp]` — FastMCP/FastAPI + `epistemic-graph[full]`) | The operator only run the **MCP server** (smallest install / image) |
593
- | `nextcloud-agent[agent]` | Agent runtime (`scion-sdk[agent-runtime,logfire]` — model orchestration + `epistemic-graph[full]`) | The operator run the **integrated agent** |
592
+ | `nextcloud-agent[mcp]` | Connector-focused MCP server (`scion-sdk[mcp]` — FastMCP/FastAPI + `medulla[full]`) | The operator only run the **MCP server** (smallest install / image) |
593
+ | `nextcloud-agent[agent]` | Agent runtime (`scion-sdk[agent-runtime,logfire]` — model orchestration + `medulla[full]`) | The operator run the **integrated agent** |
594
594
  | `nextcloud-agent[all]` | Everything (`mcp` + `agent` + `logfire`) | Development / both surfaces |
595
595
 
596
596
  ```bash
@@ -610,8 +610,8 @@ One multi-stage `docker/Dockerfile` builds two right-sized images, selected by `
610
610
 
611
611
  | Image tag | Build target | Contents | Entrypoint |
612
612
  |-----------|--------------|----------|------------|
613
- | `knucklessg1/nextcloud-agent:mcp` | `--target mcp` | `nextcloud-agent[mcp]` — **connector-focused**, includes `epistemic-graph[full]`; no model-orchestration stack | `nextcloud-mcp` |
614
- | `knucklessg1/nextcloud-agent:2.3.3` | `--target agent` (default) | `nextcloud-agent[agent]` — **agent runtime**, model orchestration + `epistemic-graph[full]` | `nextcloud-agent` |
613
+ | `knucklessg1/nextcloud-agent:mcp` | `--target mcp` | `nextcloud-agent[mcp]` — **connector-focused**, includes `medulla[full]`; no model-orchestration stack | `nextcloud-mcp` |
614
+ | `knucklessg1/nextcloud-agent:2.3.3` | `--target agent` (default) | `nextcloud-agent[agent]` — **agent runtime**, model orchestration + `medulla[full]` | `nextcloud-agent` |
615
615
 
616
616
  ```bash
617
617
  docker build --target mcp -t knucklessg1/nextcloud-agent:mcp docker/ # connector-focused MCP server
@@ -621,16 +621,16 @@ docker build --target agent -t knucklessg1/nextcloud-agent:2.3.3 docker/ # age
621
621
  `docker/mcp.compose.yml` runs the connector-focused `:mcp` server; `docker/agent.compose.yml` runs the
622
622
  agent (`:2.3.3`) with a co-located `:mcp` sidecar.
623
623
 
624
- ### Knowledge-graph database (`epistemic-graph`)
624
+ ### Knowledge-graph database (`medulla`)
625
625
 
626
- Both `[mcp]` and `[agent]` carry the **epistemic-graph** engine through the required
627
- Agent Utilities core dependency (`epistemic-graph[full]`). The `[mcp]` extra keeps
626
+ Both `[mcp]` and `[agent]` carry the **medulla** engine through the required
627
+ Meristem core dependency (`medulla[full]`). The `[mcp]` extra keeps
628
628
  the server connector-focused; `[agent]` also enables model orchestration. Local
629
629
  deployments can use the bundled engine. For production — or to share one knowledge graph
630
- across multiple agents — run **epistemic-graph as its own database container** and point the
630
+ across multiple agents — run **medulla as its own database container** and point the
631
631
  agent at it instead of embedding it. Deployment recipes (single-node + Raft HA), connection
632
632
  config, and the full database architecture (with diagrams) are documented in the
633
- [epistemic-graph deployment guide](https://knuckles-team.github.io/epistemic-graph/deployment/).
633
+ [medulla deployment guide](https://knuckles-team.github.io/medulla/deployment/).
634
634
 
635
635
  ---
636
636
 
@@ -230,8 +230,8 @@ When query strings or parameters are supplied, an LLM-free **Knowledge Graph res
230
230
  <!-- MCP-CONFIG-EXAMPLES:START -->
231
231
 
232
232
  > **Install the connector-focused `[mcp]` extra.** Examples use `nextcloud-agent[mcp]` to add
233
- > FastMCP / FastAPI through `scion-sdk[mcp]`; the required Agent Utilities core
234
- > still carries `epistemic-graph[full]`. The `[agent-runtime]` extra additionally
233
+ > FastMCP / FastAPI through `scion-sdk[mcp]`; the required Meristem core
234
+ > still carries `medulla[full]`. The `[agent-runtime]` extra additionally
235
235
  > enables model orchestration.
236
236
 
237
237
  #### stdio Transport (local IDEs — Cursor, Claude Desktop, VS Code)
@@ -562,8 +562,8 @@ Pick the extra that matches what the operator want to run:
562
562
 
563
563
  | Extra | Installs | Use when |
564
564
  |-------|----------|----------|
565
- | `nextcloud-agent[mcp]` | Connector-focused MCP server (`scion-sdk[mcp]` — FastMCP/FastAPI + `epistemic-graph[full]`) | The operator only run the **MCP server** (smallest install / image) |
566
- | `nextcloud-agent[agent]` | Agent runtime (`scion-sdk[agent-runtime,logfire]` — model orchestration + `epistemic-graph[full]`) | The operator run the **integrated agent** |
565
+ | `nextcloud-agent[mcp]` | Connector-focused MCP server (`scion-sdk[mcp]` — FastMCP/FastAPI + `medulla[full]`) | The operator only run the **MCP server** (smallest install / image) |
566
+ | `nextcloud-agent[agent]` | Agent runtime (`scion-sdk[agent-runtime,logfire]` — model orchestration + `medulla[full]`) | The operator run the **integrated agent** |
567
567
  | `nextcloud-agent[all]` | Everything (`mcp` + `agent` + `logfire`) | Development / both surfaces |
568
568
 
569
569
  ```bash
@@ -583,8 +583,8 @@ One multi-stage `docker/Dockerfile` builds two right-sized images, selected by `
583
583
 
584
584
  | Image tag | Build target | Contents | Entrypoint |
585
585
  |-----------|--------------|----------|------------|
586
- | `knucklessg1/nextcloud-agent:mcp` | `--target mcp` | `nextcloud-agent[mcp]` — **connector-focused**, includes `epistemic-graph[full]`; no model-orchestration stack | `nextcloud-mcp` |
587
- | `knucklessg1/nextcloud-agent:2.3.3` | `--target agent` (default) | `nextcloud-agent[agent]` — **agent runtime**, model orchestration + `epistemic-graph[full]` | `nextcloud-agent` |
586
+ | `knucklessg1/nextcloud-agent:mcp` | `--target mcp` | `nextcloud-agent[mcp]` — **connector-focused**, includes `medulla[full]`; no model-orchestration stack | `nextcloud-mcp` |
587
+ | `knucklessg1/nextcloud-agent:2.3.3` | `--target agent` (default) | `nextcloud-agent[agent]` — **agent runtime**, model orchestration + `medulla[full]` | `nextcloud-agent` |
588
588
 
589
589
  ```bash
590
590
  docker build --target mcp -t knucklessg1/nextcloud-agent:mcp docker/ # connector-focused MCP server
@@ -594,16 +594,16 @@ docker build --target agent -t knucklessg1/nextcloud-agent:2.3.3 docker/ # age
594
594
  `docker/mcp.compose.yml` runs the connector-focused `:mcp` server; `docker/agent.compose.yml` runs the
595
595
  agent (`:2.3.3`) with a co-located `:mcp` sidecar.
596
596
 
597
- ### Knowledge-graph database (`epistemic-graph`)
597
+ ### Knowledge-graph database (`medulla`)
598
598
 
599
- Both `[mcp]` and `[agent]` carry the **epistemic-graph** engine through the required
600
- Agent Utilities core dependency (`epistemic-graph[full]`). The `[mcp]` extra keeps
599
+ Both `[mcp]` and `[agent]` carry the **medulla** engine through the required
600
+ Meristem core dependency (`medulla[full]`). The `[mcp]` extra keeps
601
601
  the server connector-focused; `[agent]` also enables model orchestration. Local
602
602
  deployments can use the bundled engine. For production — or to share one knowledge graph
603
- across multiple agents — run **epistemic-graph as its own database container** and point the
603
+ across multiple agents — run **medulla as its own database container** and point the
604
604
  agent at it instead of embedding it. Deployment recipes (single-node + Raft HA), connection
605
605
  config, and the full database architecture (with diagrams) are documented in the
606
- [epistemic-graph deployment guide](https://knuckles-team.github.io/epistemic-graph/deployment/).
606
+ [medulla deployment guide](https://knuckles-team.github.io/medulla/deployment/).
607
607
 
608
608
  ---
609
609
 
@@ -1,4 +1,4 @@
1
- """Native epistemic-graph ingestion for Nextcloud structure (typed graph nodes).
1
+ """Native medulla ingestion for Nextcloud structure (typed graph nodes).
2
2
 
3
3
  CONCEPT:AU-KG.ingest.enterprise-source-extractor. The structure-node twin of
4
4
  ``kg_media`` (which stores the raw file blobs + extracted documents): this module maps
@@ -1,7 +1,7 @@
1
1
  """Nextcloud ontology contribution (CONCEPT:AU-KG.ontology.federation-provider-leg).
2
2
 
3
3
  Data-only subpackage: it carries ``nextcloud.ttl`` (the ``owl:Ontology``
4
- ``http://knuckles.team/kg/nextcloud`` module) which the Arbora hub federates in via
4
+ ``https://knuckles-team.github.io/ontology/connector/nextcloud`` module) which the Arbora hub federates in via
5
5
  the ``scion_sdk.ontology_providers`` entry-point. It holds no business logic
6
6
  and no heavy imports so the hub can resolve it cheaply.
7
7
  """
@@ -4,8 +4,8 @@
4
4
  "nextcloud_agent/ontology/fixtures/records.json": "aeff7048eae4bc5068dcd2070ad0f0e02b1de63bf9fd5dbecf6a51c5ebd26dc7",
5
5
  "nextcloud_agent/ontology/mappings/source.yaml": "eeeed948b2ff1edccd43b208d7e2989cb6b957c3169d6e6bbd9f32b6861f28ed",
6
6
  "nextcloud_agent/ontology/migrations/manifest.json": "25716b991f14c59cc202177dfa6d410b396e18a5c9accc92238e5433825535e7",
7
- "nextcloud_agent/ontology/nextcloud.ttl": "82cde8ca4715291239dff84001201834586d59f60f05d6baf9b79d2a0bc4b4d6",
8
- "nextcloud_agent/ontology/shapes/connector.shacl.ttl": "251875e76be6b28c61992bd80aa744d920af1b658c2af57d49531cf63abb0cc4"
7
+ "nextcloud_agent/ontology/nextcloud.ttl": "b627988ebe9193c605de6e7589f5dae66fcbb7e351ee0b67dd2b4fa01505d363",
8
+ "nextcloud_agent/ontology/shapes/connector.shacl.ttl": "1162e60aee95e52a34faedd702423d4ba62fe4df9a3c65906c0bd366d74e1b7c"
9
9
  },
10
10
  "checks": {
11
11
  "declared_tool_schema": "passed",
@@ -29,5 +29,5 @@
29
29
  "signer": "UNSIGNED-PREVIEW",
30
30
  "signing_public_key": "",
31
31
  "status": "source-validated",
32
- "validated_at": "2026-11-06T15:49:02Z"
32
+ "validated_at": "2026-11-13T00:17:54Z"
33
33
  }
@@ -1,4 +1,5 @@
1
- @prefix : <http://knuckles.team/kg#> .
1
+ @prefix : <https://knuckles-team.github.io/ontology/connector/nextcloud#> .
2
+ @prefix core: <https://knuckles-team.github.io/ontology/core#> .
2
3
  @prefix owl: <http://www.w3.org/2002/07/owl#> .
3
4
  @prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .
4
5
  @prefix xsd: <http://www.w3.org/2001/XMLSchema#> .
@@ -12,7 +13,7 @@
12
13
  # roles are declared once in connector_contracts.py; the SDK serves them as the
13
14
  # connector's surface ontology, typed by classes that extend core.
14
15
 
15
- <http://knuckles.team/kg/nextcloud> a owl:Ontology ;
16
+ <https://knuckles-team.github.io/ontology/connector/nextcloud> a owl:Ontology ;
16
17
  rdfs:label "Nextcloud Ontology" ;
17
18
  rdfs:comment """Nextcloud collaboration model: files, versions, shares, calendars,
18
19
  events, tasks, contacts, Talk, Deck, notes, office documents, activity and
@@ -24,89 +25,89 @@
24
25
  :Share a owl:Class ;
25
26
  rdfs:label "Nextcloud Share" ;
26
27
  rdfs:comment "A sharing grant on a file or folder: user, group, Talk, email or public link." ;
27
- rdfs:subClassOf :FileShare .
28
+ rdfs:subClassOf core:FileShare .
28
29
 
29
30
  :FileVersion a owl:Class ;
30
31
  rdfs:label "File Version" ;
31
32
  rdfs:comment "A stored earlier content of a Nextcloud file, restorable." ;
32
- rdfs:subClassOf :File .
33
+ rdfs:subClassOf core:File .
33
34
 
34
35
  :TrashItem a owl:Class ;
35
36
  rdfs:label "Trash Item" ;
36
37
  rdfs:comment "A deleted file or folder held in the trash bin, restorable." ;
37
- rdfs:subClassOf :File .
38
+ rdfs:subClassOf core:File .
38
39
 
39
40
  :OfficeDocument a owl:Class ;
40
41
  rdfs:label "Office Document" ;
41
42
  rdfs:comment "A document, spreadsheet, presentation, diagram or markdown file edited collaboratively." ;
42
- rdfs:subClassOf :Document .
43
+ rdfs:subClassOf core:Document .
43
44
 
44
45
  :NextcloudCalendar a owl:Class ;
45
46
  rdfs:label "Nextcloud Calendar" ;
46
47
  rdfs:comment "A CalDAV calendar holding events and, when task-capable, tasks." ;
47
- rdfs:subClassOf :Collection .
48
+ rdfs:subClassOf core:Collection .
48
49
 
49
50
  :AddressBook a owl:Class ;
50
51
  rdfs:label "Address Book" ;
51
52
  rdfs:comment "A CardDAV address book of contact cards." ;
52
- rdfs:subClassOf :Collection .
53
+ rdfs:subClassOf core:Collection .
53
54
 
54
55
  :ContactCard a owl:Class ;
55
56
  rdfs:label "Contact Card" ;
56
57
  rdfs:comment "One vCard: a person's or organization's name, emails, phones and organization." ;
57
- rdfs:subClassOf :Document .
58
+ rdfs:subClassOf core:Document .
58
59
 
59
60
  :TalkConversation a owl:Class ;
60
61
  rdfs:label "Talk Conversation" ;
61
62
  rdfs:comment "A Nextcloud Talk conversation: private group, public or one-to-one." ;
62
- rdfs:subClassOf :MessageChannel .
63
+ rdfs:subClassOf core:MessageChannel .
63
64
 
64
65
  :TalkMessage a owl:Class ;
65
66
  rdfs:label "Talk Message" ;
66
67
  rdfs:comment "One chat message in a Talk conversation." ;
67
- rdfs:subClassOf :ChatMessage .
68
+ rdfs:subClassOf core:ChatMessage .
68
69
 
69
70
  :DeckBoard a owl:Class ;
70
71
  rdfs:label "Deck Board" ;
71
72
  rdfs:comment "A Deck kanban board." ;
72
- rdfs:subClassOf :Collection .
73
+ rdfs:subClassOf core:Collection .
73
74
 
74
75
  :DeckStack a owl:Class ;
75
76
  rdfs:label "Deck Stack" ;
76
77
  rdfs:comment "One column of a Deck board." ;
77
- rdfs:subClassOf :Collection .
78
+ rdfs:subClassOf core:Collection .
78
79
 
79
80
  :DeckCard a owl:Class ;
80
81
  rdfs:label "Deck Card" ;
81
82
  rdfs:comment "One card of work on a Deck board." ;
82
- rdfs:subClassOf :Task .
83
+ rdfs:subClassOf core:Task .
83
84
 
84
85
  :NextcloudNote a owl:Class ;
85
86
  rdfs:label "Nextcloud Note" ;
86
87
  rdfs:comment "A markdown note of the Notes app." ;
87
- rdfs:subClassOf :Document .
88
+ rdfs:subClassOf core:Document .
88
89
 
89
90
  :ActivityEvent a owl:Class ;
90
91
  rdfs:label "Activity Event" ;
91
92
  rdfs:comment "One entry of the activity stream: who changed what and when." ;
92
- rdfs:subClassOf :Event .
93
+ rdfs:subClassOf core:Event .
93
94
 
94
95
  :NextcloudNotification a owl:Class ;
95
96
  rdfs:label "Nextcloud Notification" ;
96
97
  rdfs:comment "One notification addressed to the account." ;
97
- rdfs:subClassOf :Event .
98
+ rdfs:subClassOf core:Event .
98
99
 
99
100
  :NextcloudApp a owl:Class ;
100
101
  rdfs:label "Nextcloud App" ;
101
102
  rdfs:comment "An installed Nextcloud app (Talk, Deck, Office and others)." ;
102
- rdfs:subClassOf :Application .
103
+ rdfs:subClassOf core:Application .
103
104
 
104
105
  # --- links and fields ---
105
106
 
106
107
  :inFolder a owl:ObjectProperty ;
107
108
  rdfs:label "in folder" ;
108
109
  rdfs:comment "Links a File or subfolder to the Folder that contains it." ;
109
- rdfs:range :Folder .
110
+ rdfs:range core:Folder .
110
111
 
111
112
  :sharedWith a owl:ObjectProperty ;
112
113
  rdfs:label "shared with" ;
@@ -121,20 +122,20 @@
121
122
  :hasBlob a owl:ObjectProperty ;
122
123
  rdfs:label "has blob" ;
123
124
  rdfs:comment "Links a File to the federated :AssetOccurrence holding its raw content-addressed bytes." ;
124
- rdfs:domain :File ;
125
- rdfs:range :AssetOccurrence .
125
+ rdfs:domain core:File ;
126
+ rdfs:range core:AssetOccurrence .
126
127
 
127
128
  :hasDocument a owl:ObjectProperty ;
128
129
  rdfs:label "has document" ;
129
130
  rdfs:comment "Links a File to the federated :Document carrying its extracted, searchable text." ;
130
- rdfs:domain :File ;
131
- rdfs:range :Document .
131
+ rdfs:domain core:File ;
132
+ rdfs:range core:Document .
132
133
 
133
134
  :versionOf a owl:ObjectProperty ;
134
135
  rdfs:label "version of" ;
135
136
  rdfs:comment "Links a FileVersion to the File it is an earlier content of." ;
136
137
  rdfs:domain :FileVersion ;
137
- rdfs:range :File .
138
+ rdfs:range core:File .
138
139
 
139
140
  :inCalendar a owl:ObjectProperty ;
140
141
  rdfs:label "in calendar" ;
@@ -160,13 +161,13 @@
160
161
  :mimeType a owl:DatatypeProperty ;
161
162
  rdfs:label "mime type" ;
162
163
  rdfs:comment "MIME content type of a File." ;
163
- rdfs:domain :File ;
164
+ rdfs:domain core:File ;
164
165
  rdfs:range xsd:string .
165
166
 
166
167
  :sizeBytes a owl:DatatypeProperty ;
167
168
  rdfs:label "size bytes" ;
168
169
  rdfs:comment "Size of a File in bytes." ;
169
- rdfs:domain :File ;
170
+ rdfs:domain core:File ;
170
171
  rdfs:range xsd:integer .
171
172
 
172
173
  :modifiedAt a owl:DatatypeProperty ;
@@ -1,5 +1,5 @@
1
- @prefix : <http://knuckles.team/kg#> .
2
- @prefix shape: <http://knuckles.team/kg/nextcloud/shape#> .
1
+ @prefix : <https://knuckles-team.github.io/ontology/core#> .
2
+ @prefix shape: <https://knuckles-team.github.io/ontology/connector/nextcloud-shapes#> .
3
3
  @prefix sh: <http://www.w3.org/ns/shacl#> .
4
4
  @prefix xsd: <http://www.w3.org/2001/XMLSchema#> .
5
5
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: nextcloud-agent
3
- Version: 3.0.0
3
+ Version: 3.1.0
4
4
  Summary: Nextcloud MCP Server for Agentic AI!
5
5
  Author-email: Repository Maintainers <maintainers@knuckles.team>
6
6
  License: MIT
@@ -12,7 +12,7 @@ Classifier: Programming Language :: Python :: 3
12
12
  Requires-Python: >=3.12
13
13
  Description-Content-Type: text/markdown
14
14
  License-File: LICENSE
15
- Requires-Dist: scion-sdk[mcp]<0.9,>=0.8.0
15
+ Requires-Dist: scion-sdk[mcp]<0.12,>=0.11.0
16
16
  Requires-Dist: requests>=2.34.2
17
17
  Requires-Dist: defusedxml>=0.7.1
18
18
  Requires-Dist: python-dateutil>=2.9.0.post0
@@ -257,8 +257,8 @@ When query strings or parameters are supplied, an LLM-free **Knowledge Graph res
257
257
  <!-- MCP-CONFIG-EXAMPLES:START -->
258
258
 
259
259
  > **Install the connector-focused `[mcp]` extra.** Examples use `nextcloud-agent[mcp]` to add
260
- > FastMCP / FastAPI through `scion-sdk[mcp]`; the required Agent Utilities core
261
- > still carries `epistemic-graph[full]`. The `[agent-runtime]` extra additionally
260
+ > FastMCP / FastAPI through `scion-sdk[mcp]`; the required Meristem core
261
+ > still carries `medulla[full]`. The `[agent-runtime]` extra additionally
262
262
  > enables model orchestration.
263
263
 
264
264
  #### stdio Transport (local IDEs — Cursor, Claude Desktop, VS Code)
@@ -589,8 +589,8 @@ Pick the extra that matches what the operator want to run:
589
589
 
590
590
  | Extra | Installs | Use when |
591
591
  |-------|----------|----------|
592
- | `nextcloud-agent[mcp]` | Connector-focused MCP server (`scion-sdk[mcp]` — FastMCP/FastAPI + `epistemic-graph[full]`) | The operator only run the **MCP server** (smallest install / image) |
593
- | `nextcloud-agent[agent]` | Agent runtime (`scion-sdk[agent-runtime,logfire]` — model orchestration + `epistemic-graph[full]`) | The operator run the **integrated agent** |
592
+ | `nextcloud-agent[mcp]` | Connector-focused MCP server (`scion-sdk[mcp]` — FastMCP/FastAPI + `medulla[full]`) | The operator only run the **MCP server** (smallest install / image) |
593
+ | `nextcloud-agent[agent]` | Agent runtime (`scion-sdk[agent-runtime,logfire]` — model orchestration + `medulla[full]`) | The operator run the **integrated agent** |
594
594
  | `nextcloud-agent[all]` | Everything (`mcp` + `agent` + `logfire`) | Development / both surfaces |
595
595
 
596
596
  ```bash
@@ -610,8 +610,8 @@ One multi-stage `docker/Dockerfile` builds two right-sized images, selected by `
610
610
 
611
611
  | Image tag | Build target | Contents | Entrypoint |
612
612
  |-----------|--------------|----------|------------|
613
- | `knucklessg1/nextcloud-agent:mcp` | `--target mcp` | `nextcloud-agent[mcp]` — **connector-focused**, includes `epistemic-graph[full]`; no model-orchestration stack | `nextcloud-mcp` |
614
- | `knucklessg1/nextcloud-agent:2.3.3` | `--target agent` (default) | `nextcloud-agent[agent]` — **agent runtime**, model orchestration + `epistemic-graph[full]` | `nextcloud-agent` |
613
+ | `knucklessg1/nextcloud-agent:mcp` | `--target mcp` | `nextcloud-agent[mcp]` — **connector-focused**, includes `medulla[full]`; no model-orchestration stack | `nextcloud-mcp` |
614
+ | `knucklessg1/nextcloud-agent:2.3.3` | `--target agent` (default) | `nextcloud-agent[agent]` — **agent runtime**, model orchestration + `medulla[full]` | `nextcloud-agent` |
615
615
 
616
616
  ```bash
617
617
  docker build --target mcp -t knucklessg1/nextcloud-agent:mcp docker/ # connector-focused MCP server
@@ -621,16 +621,16 @@ docker build --target agent -t knucklessg1/nextcloud-agent:2.3.3 docker/ # age
621
621
  `docker/mcp.compose.yml` runs the connector-focused `:mcp` server; `docker/agent.compose.yml` runs the
622
622
  agent (`:2.3.3`) with a co-located `:mcp` sidecar.
623
623
 
624
- ### Knowledge-graph database (`epistemic-graph`)
624
+ ### Knowledge-graph database (`medulla`)
625
625
 
626
- Both `[mcp]` and `[agent]` carry the **epistemic-graph** engine through the required
627
- Agent Utilities core dependency (`epistemic-graph[full]`). The `[mcp]` extra keeps
626
+ Both `[mcp]` and `[agent]` carry the **medulla** engine through the required
627
+ Meristem core dependency (`medulla[full]`). The `[mcp]` extra keeps
628
628
  the server connector-focused; `[agent]` also enables model orchestration. Local
629
629
  deployments can use the bundled engine. For production — or to share one knowledge graph
630
- across multiple agents — run **epistemic-graph as its own database container** and point the
630
+ across multiple agents — run **medulla as its own database container** and point the
631
631
  agent at it instead of embedding it. Deployment recipes (single-node + Raft HA), connection
632
632
  config, and the full database architecture (with diagrams) are documented in the
633
- [epistemic-graph deployment guide](https://knuckles-team.github.io/epistemic-graph/deployment/).
633
+ [medulla deployment guide](https://knuckles-team.github.io/medulla/deployment/).
634
634
 
635
635
  ---
636
636
 
@@ -70,4 +70,5 @@ tests/test_init_dynamics.py
70
70
  tests/test_kg_ingest.py
71
71
  tests/test_mcp_server.py
72
72
  tests/test_publication_workflow.py
73
+ tests/test_scion_sdk_0_10_imports.py
73
74
  tests/test_xml_security.py
@@ -1,4 +1,4 @@
1
- scion-sdk[mcp]<0.9,>=0.8.0
1
+ scion-sdk[mcp]<0.12,>=0.11.0
2
2
  requests>=2.34.2
3
3
  defusedxml>=0.7.1
4
4
  python-dateutil>=2.9.0.post0
@@ -4,12 +4,12 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "nextcloud-agent"
7
- version = "3.0.0"
7
+ version = "3.1.0"
8
8
  description = "Nextcloud MCP Server for Agentic AI!"
9
9
  readme = "README.md"
10
10
  classifiers = [ "Development Status :: 3 - Alpha", "License :: OSI Approved :: MIT License", "Environment :: Console", "Operating System :: POSIX :: Linux", "Programming Language :: Python :: 3",]
11
11
  requires-python = ">=3.12"
12
- dependencies = [ "scion-sdk[mcp]>=0.8.0,<0.9", "requests>=2.34.2", "defusedxml>=0.7.1", "python-dateutil>=2.9.0.post0", "icalendar>=7.3.0", "vobject>=0.9.9",]
12
+ dependencies = [ "scion-sdk[mcp]>=0.11.0,<0.12", "requests>=2.34.2", "defusedxml>=0.7.1", "python-dateutil>=2.9.0.post0", "icalendar>=7.3.0", "vobject>=0.9.9",]
13
13
  [[project.authors]]
14
14
  name = "Repository Maintainers"
15
15
  email = "maintainers@knuckles.team"
@@ -0,0 +1,59 @@
1
+ """Every scion_sdk import in this repository resolves on the pinned SDK release."""
2
+
3
+ from __future__ import annotations
4
+
5
+ import ast
6
+ import importlib
7
+ import importlib.util
8
+ from pathlib import Path
9
+
10
+ ROOT = Path(__file__).resolve().parent.parent
11
+ SKIP = {".git", ".venv", "venv", "node_modules", "build", "dist", ".tox", "__pycache__"}
12
+
13
+
14
+ def _python_files() -> list[Path]:
15
+ return [
16
+ p
17
+ for p in ROOT.rglob("*.py")
18
+ if not (set(p.relative_to(ROOT).parts) & SKIP)
19
+ and not any(part.startswith(".") for part in p.relative_to(ROOT).parts)
20
+ ]
21
+
22
+
23
+ def _is_sdk(name: str | None) -> bool:
24
+ return bool(name) and (name == "scion_sdk" or name.startswith("scion_sdk."))
25
+
26
+
27
+ def test_every_scion_sdk_import_resolves_on_the_pinned_release() -> None:
28
+ missing: list[str] = []
29
+ for path in _python_files():
30
+ tree = ast.parse(path.read_text(encoding="utf-8"))
31
+ rel = path.relative_to(ROOT)
32
+ for node in ast.walk(tree):
33
+ if isinstance(node, ast.Import):
34
+ for alias in node.names:
35
+ if (
36
+ _is_sdk(alias.name)
37
+ and importlib.util.find_spec(alias.name) is None
38
+ ):
39
+ missing.append(f"{rel}:{node.lineno} {alias.name}")
40
+ elif (
41
+ isinstance(node, ast.ImportFrom)
42
+ and node.level == 0
43
+ and _is_sdk(node.module)
44
+ ):
45
+ if importlib.util.find_spec(node.module) is None:
46
+ missing.append(f"{rel}:{node.lineno} {node.module}")
47
+ continue
48
+ module = importlib.import_module(node.module)
49
+ for alias in node.names:
50
+ if alias.name == "*" or hasattr(module, alias.name):
51
+ continue
52
+ if importlib.util.find_spec(f"{node.module}.{alias.name}") is None:
53
+ missing.append(
54
+ f"{rel}:{node.lineno} {node.module}.{alias.name}"
55
+ )
56
+ assert not missing, (
57
+ "scion_sdk names that do not exist on the pinned release:\n"
58
+ + "\n".join(missing)
59
+ )
File without changes