nextcloud-agent 2.3.5__tar.gz → 2.3.7__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.
- {nextcloud_agent-2.3.5 → nextcloud_agent-2.3.7}/PKG-INFO +14 -14
- {nextcloud_agent-2.3.5 → nextcloud_agent-2.3.7}/README.md +12 -12
- {nextcloud_agent-2.3.5 → nextcloud_agent-2.3.7}/nextcloud_agent/__init__.py +1 -1
- {nextcloud_agent-2.3.5 → nextcloud_agent-2.3.7}/nextcloud_agent/__main__.py +1 -1
- {nextcloud_agent-2.3.5 → nextcloud_agent-2.3.7}/nextcloud_agent/api/api_client_base.py +2 -2
- {nextcloud_agent-2.3.5 → nextcloud_agent-2.3.7}/nextcloud_agent/auth.py +7 -5
- {nextcloud_agent-2.3.5 → nextcloud_agent-2.3.7}/nextcloud_agent/connector_sources.py +1 -1
- {nextcloud_agent-2.3.5 → nextcloud_agent-2.3.7}/nextcloud_agent/kg_ingest.py +2 -2
- {nextcloud_agent-2.3.5 → nextcloud_agent-2.3.7}/nextcloud_agent/mcp_server.py +2 -2
- {nextcloud_agent-2.3.5 → nextcloud_agent-2.3.7}/nextcloud_agent/ontology/__init__.py +1 -1
- {nextcloud_agent-2.3.5 → nextcloud_agent-2.3.7}/nextcloud_agent/ontology/certification.json +2 -2
- {nextcloud_agent-2.3.5 → nextcloud_agent-2.3.7}/nextcloud_agent/ontology/nextcloud.ttl +1 -1
- {nextcloud_agent-2.3.5 → nextcloud_agent-2.3.7}/nextcloud_agent/skills/nextcloud-files/SKILL.md +1 -1
- {nextcloud_agent-2.3.5 → nextcloud_agent-2.3.7}/nextcloud_agent/skills/nextcloud-ingest/SKILL.md +1 -1
- {nextcloud_agent-2.3.5 → nextcloud_agent-2.3.7}/nextcloud_agent/skills/nextcloud-shares/SKILL.md +1 -1
- {nextcloud_agent-2.3.5 → nextcloud_agent-2.3.7}/nextcloud_agent.egg-info/PKG-INFO +14 -14
- nextcloud_agent-2.3.7/nextcloud_agent.egg-info/entry_points.txt +8 -0
- {nextcloud_agent-2.3.5 → nextcloud_agent-2.3.7}/nextcloud_agent.egg-info/requires.txt +1 -1
- {nextcloud_agent-2.3.5 → nextcloud_agent-2.3.7}/pyproject.toml +6 -6
- {nextcloud_agent-2.3.5 → nextcloud_agent-2.3.7}/tests/test_auth.py +20 -2
- {nextcloud_agent-2.3.5 → nextcloud_agent-2.3.7}/tests/test_fleet_name.py +2 -2
- {nextcloud_agent-2.3.5 → nextcloud_agent-2.3.7}/tests/test_init.py +1 -1
- {nextcloud_agent-2.3.5 → nextcloud_agent-2.3.7}/tests/test_kg_ingest.py +17 -7
- {nextcloud_agent-2.3.5 → nextcloud_agent-2.3.7}/tests/test_mcp_server.py +1 -1
- {nextcloud_agent-2.3.5 → nextcloud_agent-2.3.7}/tests/test_publication_workflow.py +5 -37
- nextcloud_agent-2.3.5/nextcloud_agent.egg-info/entry_points.txt +0 -8
- {nextcloud_agent-2.3.5 → nextcloud_agent-2.3.7}/LICENSE +0 -0
- {nextcloud_agent-2.3.5 → nextcloud_agent-2.3.7}/nextcloud_agent/api/__init__.py +0 -0
- {nextcloud_agent-2.3.5 → nextcloud_agent-2.3.7}/nextcloud_agent/api/api_client_calendar.py +0 -0
- {nextcloud_agent-2.3.5 → nextcloud_agent-2.3.7}/nextcloud_agent/api/api_client_contacts.py +0 -0
- {nextcloud_agent-2.3.5 → nextcloud_agent-2.3.7}/nextcloud_agent/api/api_client_files.py +0 -0
- {nextcloud_agent-2.3.5 → nextcloud_agent-2.3.7}/nextcloud_agent/api/xml_security.py +0 -0
- {nextcloud_agent-2.3.5 → nextcloud_agent-2.3.7}/nextcloud_agent/api_client.py +0 -0
- {nextcloud_agent-2.3.5 → nextcloud_agent-2.3.7}/nextcloud_agent/mcp_config.json +0 -0
- {nextcloud_agent-2.3.5 → nextcloud_agent-2.3.7}/nextcloud_agent/ontology/fixtures/records.json +0 -0
- {nextcloud_agent-2.3.5 → nextcloud_agent-2.3.7}/nextcloud_agent/ontology/mappings/source.yaml +0 -0
- {nextcloud_agent-2.3.5 → nextcloud_agent-2.3.7}/nextcloud_agent/ontology/migrations/manifest.json +0 -0
- {nextcloud_agent-2.3.5 → nextcloud_agent-2.3.7}/nextcloud_agent/ontology/shapes/connector.shacl.ttl +0 -0
- {nextcloud_agent-2.3.5 → nextcloud_agent-2.3.7}/nextcloud_agent/prompts/file_steward.json +0 -0
- {nextcloud_agent-2.3.5 → nextcloud_agent-2.3.7}/nextcloud_agent/skills/nextcloud-agent-development/SKILL.md +0 -0
- {nextcloud_agent-2.3.5 → nextcloud_agent-2.3.7}/nextcloud_agent/skills/nextcloud-agent-operations/SKILL.md +0 -0
- {nextcloud_agent-2.3.5 → nextcloud_agent-2.3.7}/nextcloud_agent/skills/nextcloud-agent-operations/agents/openai.yaml +0 -0
- {nextcloud_agent-2.3.5 → nextcloud_agent-2.3.7}/nextcloud_agent/skills/nextcloud-agent-operations/references/catalog.md +0 -0
- {nextcloud_agent-2.3.5 → nextcloud_agent-2.3.7}/nextcloud_agent/skills/nextcloud-files/WORKFLOW.md +0 -0
- {nextcloud_agent-2.3.5 → nextcloud_agent-2.3.7}/nextcloud_agent/skills/nextcloud-ingest/WORKFLOW.md +0 -0
- {nextcloud_agent-2.3.5 → nextcloud_agent-2.3.7}/nextcloud_agent/skills/nextcloud-shares/WORKFLOW.md +0 -0
- {nextcloud_agent-2.3.5 → nextcloud_agent-2.3.7}/nextcloud_agent.egg-info/SOURCES.txt +0 -0
- {nextcloud_agent-2.3.5 → nextcloud_agent-2.3.7}/nextcloud_agent.egg-info/dependency_links.txt +0 -0
- {nextcloud_agent-2.3.5 → nextcloud_agent-2.3.7}/nextcloud_agent.egg-info/top_level.txt +0 -0
- {nextcloud_agent-2.3.5 → nextcloud_agent-2.3.7}/setup.cfg +0 -0
- {nextcloud_agent-2.3.5 → nextcloud_agent-2.3.7}/tests/conftest.py +0 -0
- {nextcloud_agent-2.3.5 → nextcloud_agent-2.3.7}/tests/test_api_client.py +0 -0
- {nextcloud_agent-2.3.5 → nextcloud_agent-2.3.7}/tests/test_init_dynamics.py +0 -0
- {nextcloud_agent-2.3.5 → nextcloud_agent-2.3.7}/tests/test_xml_security.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: nextcloud-agent
|
|
3
|
-
Version: 2.3.
|
|
3
|
+
Version: 2.3.7
|
|
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:
|
|
15
|
+
Requires-Dist: scion-sdk[mcp]<0.7.0,>=0.6.3
|
|
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
|
|
@@ -82,7 +82,7 @@ This server use dynamic Action-Routed tools to optimize token overhead and maxim
|
|
|
82
82
|
|
|
83
83
|
### Available MCP Tools
|
|
84
84
|
|
|
85
|
-
<!-- This table is auto-generated by `python -m
|
|
85
|
+
<!-- This table is auto-generated by `python -m scion_sdk.mcp.readme_tools` — do not edit by hand. -->
|
|
86
86
|
|
|
87
87
|
<!-- MCP-TOOLS-TABLE:START -->
|
|
88
88
|
|
|
@@ -164,7 +164,7 @@ When query strings or parameters are supplied, an LLM-free **Knowledge Graph res
|
|
|
164
164
|
<!-- MCP-CONFIG-EXAMPLES:START -->
|
|
165
165
|
|
|
166
166
|
> **Install the connector-focused `[mcp]` extra.** Examples use `nextcloud-agent[mcp]` to add
|
|
167
|
-
> FastMCP / FastAPI through `
|
|
167
|
+
> FastMCP / FastAPI through `scion-sdk[mcp]`; the required Agent Utilities core
|
|
168
168
|
> still carries `epistemic-graph[full]`. The `[agent-runtime]` extra additionally
|
|
169
169
|
> enables model orchestration.
|
|
170
170
|
|
|
@@ -384,7 +384,7 @@ Detailed graph node architecture explanations, custom skill configurations, and
|
|
|
384
384
|
|
|
385
385
|
## Security & Governance
|
|
386
386
|
|
|
387
|
-
Built directly upon the enterprise-ready [`
|
|
387
|
+
Built directly upon the enterprise-ready [`scion-sdk`](https://github.com/Knuckles-Team/scion-sdk) core, standard security parameters are fully supported:
|
|
388
388
|
|
|
389
389
|
### Access Control & Policy Enforcement
|
|
390
390
|
- **Eunomia Policies:** Fine-grained, policy-driven tool authorization. Supports `none`, local `embedded` (`mcp_policies.json`), or centralized `remote` modes.
|
|
@@ -431,7 +431,7 @@ Built directly upon the enterprise-ready [`agent-connector-sdk`](https://github.
|
|
|
431
431
|
| `CALENDARTOOL` | `True` | |
|
|
432
432
|
| `CONTACTSTOOL` | `True` | |
|
|
433
433
|
|
|
434
|
-
#### Inherited
|
|
434
|
+
#### Inherited scion-sdk variables (apply to every connector)
|
|
435
435
|
|
|
436
436
|
| Variable | Example | Description |
|
|
437
437
|
|----------|---------|-------------|
|
|
@@ -448,7 +448,7 @@ Built directly upon the enterprise-ready [`agent-connector-sdk`](https://github.
|
|
|
448
448
|
| `PYTHONUNBUFFERED` | `1` | Unbuffered stdout (recommended in containers) |
|
|
449
449
|
| `MCP_URL` | `http://localhost:8000/mcp` | URL of the MCP server the agent connects to |
|
|
450
450
|
|
|
451
|
-
_23 package + 16 inherited variable(s). Auto-generated from `.env.example` + the shared
|
|
451
|
+
_23 package + 16 inherited variable(s). Auto-generated from `.env.example` + the shared scion-sdk set — do not edit._
|
|
452
452
|
<!-- ENV-VARS-TABLE:END -->
|
|
453
453
|
|
|
454
454
|
|
|
@@ -496,8 +496,8 @@ Pick the extra that matches what the operator want to run:
|
|
|
496
496
|
|
|
497
497
|
| Extra | Installs | Use when |
|
|
498
498
|
|-------|----------|----------|
|
|
499
|
-
| `nextcloud-agent[mcp]` | Connector-focused MCP server (`
|
|
500
|
-
| `nextcloud-agent[agent]` | Agent runtime (`
|
|
499
|
+
| `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) |
|
|
500
|
+
| `nextcloud-agent[agent]` | Agent runtime (`scion-sdk[agent-runtime,logfire]` — model orchestration + `epistemic-graph[full]`) | The operator run the **integrated agent** |
|
|
501
501
|
| `nextcloud-agent[all]` | Everything (`mcp` + `agent` + `logfire`) | Development / both surfaces |
|
|
502
502
|
|
|
503
503
|
```bash
|
|
@@ -597,15 +597,15 @@ Secrets are read-existing + seeded via `vault_sync` — you are only prompted fo
|
|
|
597
597
|
|
|
598
598
|
<!-- END agent-os-genesis-deploy -->
|
|
599
599
|
|
|
600
|
-
<!-- BEGIN
|
|
600
|
+
<!-- BEGIN scion-sdk-deployment (generated; do not edit between markers) -->
|
|
601
601
|
|
|
602
|
-
## Deploy with `
|
|
602
|
+
## Deploy with `scion-sdk-deployment`
|
|
603
603
|
|
|
604
|
-
Provision this package with the consolidated **`
|
|
604
|
+
Provision this package with the consolidated **`scion-sdk-deployment`**
|
|
605
605
|
workflow. It selects an installed-package, editable-source, or immutable-container
|
|
606
606
|
path; records only runtime secret and TLS-profile references in `AgentConfig`; and
|
|
607
607
|
runs doctor, registration, policy, observability, and rollback gates. Ask your agent
|
|
608
|
-
to **"deploy `nextcloud-agent` with
|
|
608
|
+
to **"deploy `nextcloud-agent` with scion-sdk-deployment"**.
|
|
609
609
|
|
|
610
610
|
| Install mode | Command |
|
|
611
611
|
|------|---------|
|
|
@@ -617,7 +617,7 @@ The repository embeds no deployment profile, credential value, certificate path,
|
|
|
617
617
|
environment-specific endpoint. Supply those at runtime through `AgentConfig` and the
|
|
618
618
|
configured secret provider.
|
|
619
619
|
|
|
620
|
-
<!-- END
|
|
620
|
+
<!-- END scion-sdk-deployment -->
|
|
621
621
|
|
|
622
622
|
<!-- GOVERNED-CAPABILITY:START -->
|
|
623
623
|
## Governed capability contract
|
|
@@ -55,7 +55,7 @@ This server use dynamic Action-Routed tools to optimize token overhead and maxim
|
|
|
55
55
|
|
|
56
56
|
### Available MCP Tools
|
|
57
57
|
|
|
58
|
-
<!-- This table is auto-generated by `python -m
|
|
58
|
+
<!-- This table is auto-generated by `python -m scion_sdk.mcp.readme_tools` — do not edit by hand. -->
|
|
59
59
|
|
|
60
60
|
<!-- MCP-TOOLS-TABLE:START -->
|
|
61
61
|
|
|
@@ -137,7 +137,7 @@ When query strings or parameters are supplied, an LLM-free **Knowledge Graph res
|
|
|
137
137
|
<!-- MCP-CONFIG-EXAMPLES:START -->
|
|
138
138
|
|
|
139
139
|
> **Install the connector-focused `[mcp]` extra.** Examples use `nextcloud-agent[mcp]` to add
|
|
140
|
-
> FastMCP / FastAPI through `
|
|
140
|
+
> FastMCP / FastAPI through `scion-sdk[mcp]`; the required Agent Utilities core
|
|
141
141
|
> still carries `epistemic-graph[full]`. The `[agent-runtime]` extra additionally
|
|
142
142
|
> enables model orchestration.
|
|
143
143
|
|
|
@@ -357,7 +357,7 @@ Detailed graph node architecture explanations, custom skill configurations, and
|
|
|
357
357
|
|
|
358
358
|
## Security & Governance
|
|
359
359
|
|
|
360
|
-
Built directly upon the enterprise-ready [`
|
|
360
|
+
Built directly upon the enterprise-ready [`scion-sdk`](https://github.com/Knuckles-Team/scion-sdk) core, standard security parameters are fully supported:
|
|
361
361
|
|
|
362
362
|
### Access Control & Policy Enforcement
|
|
363
363
|
- **Eunomia Policies:** Fine-grained, policy-driven tool authorization. Supports `none`, local `embedded` (`mcp_policies.json`), or centralized `remote` modes.
|
|
@@ -404,7 +404,7 @@ Built directly upon the enterprise-ready [`agent-connector-sdk`](https://github.
|
|
|
404
404
|
| `CALENDARTOOL` | `True` | |
|
|
405
405
|
| `CONTACTSTOOL` | `True` | |
|
|
406
406
|
|
|
407
|
-
#### Inherited
|
|
407
|
+
#### Inherited scion-sdk variables (apply to every connector)
|
|
408
408
|
|
|
409
409
|
| Variable | Example | Description |
|
|
410
410
|
|----------|---------|-------------|
|
|
@@ -421,7 +421,7 @@ Built directly upon the enterprise-ready [`agent-connector-sdk`](https://github.
|
|
|
421
421
|
| `PYTHONUNBUFFERED` | `1` | Unbuffered stdout (recommended in containers) |
|
|
422
422
|
| `MCP_URL` | `http://localhost:8000/mcp` | URL of the MCP server the agent connects to |
|
|
423
423
|
|
|
424
|
-
_23 package + 16 inherited variable(s). Auto-generated from `.env.example` + the shared
|
|
424
|
+
_23 package + 16 inherited variable(s). Auto-generated from `.env.example` + the shared scion-sdk set — do not edit._
|
|
425
425
|
<!-- ENV-VARS-TABLE:END -->
|
|
426
426
|
|
|
427
427
|
|
|
@@ -469,8 +469,8 @@ Pick the extra that matches what the operator want to run:
|
|
|
469
469
|
|
|
470
470
|
| Extra | Installs | Use when |
|
|
471
471
|
|-------|----------|----------|
|
|
472
|
-
| `nextcloud-agent[mcp]` | Connector-focused MCP server (`
|
|
473
|
-
| `nextcloud-agent[agent]` | Agent runtime (`
|
|
472
|
+
| `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) |
|
|
473
|
+
| `nextcloud-agent[agent]` | Agent runtime (`scion-sdk[agent-runtime,logfire]` — model orchestration + `epistemic-graph[full]`) | The operator run the **integrated agent** |
|
|
474
474
|
| `nextcloud-agent[all]` | Everything (`mcp` + `agent` + `logfire`) | Development / both surfaces |
|
|
475
475
|
|
|
476
476
|
```bash
|
|
@@ -570,15 +570,15 @@ Secrets are read-existing + seeded via `vault_sync` — you are only prompted fo
|
|
|
570
570
|
|
|
571
571
|
<!-- END agent-os-genesis-deploy -->
|
|
572
572
|
|
|
573
|
-
<!-- BEGIN
|
|
573
|
+
<!-- BEGIN scion-sdk-deployment (generated; do not edit between markers) -->
|
|
574
574
|
|
|
575
|
-
## Deploy with `
|
|
575
|
+
## Deploy with `scion-sdk-deployment`
|
|
576
576
|
|
|
577
|
-
Provision this package with the consolidated **`
|
|
577
|
+
Provision this package with the consolidated **`scion-sdk-deployment`**
|
|
578
578
|
workflow. It selects an installed-package, editable-source, or immutable-container
|
|
579
579
|
path; records only runtime secret and TLS-profile references in `AgentConfig`; and
|
|
580
580
|
runs doctor, registration, policy, observability, and rollback gates. Ask your agent
|
|
581
|
-
to **"deploy `nextcloud-agent` with
|
|
581
|
+
to **"deploy `nextcloud-agent` with scion-sdk-deployment"**.
|
|
582
582
|
|
|
583
583
|
| Install mode | Command |
|
|
584
584
|
|------|---------|
|
|
@@ -590,7 +590,7 @@ The repository embeds no deployment profile, credential value, certificate path,
|
|
|
590
590
|
environment-specific endpoint. Supply those at runtime through `AgentConfig` and the
|
|
591
591
|
configured secret provider.
|
|
592
592
|
|
|
593
|
-
<!-- END
|
|
593
|
+
<!-- END scion-sdk-deployment -->
|
|
594
594
|
|
|
595
595
|
<!-- GOVERNED-CAPABILITY:START -->
|
|
596
596
|
## Governed capability contract
|
|
@@ -7,8 +7,8 @@ from typing import Any, Protocol
|
|
|
7
7
|
from urllib.parse import quote, urljoin, urlsplit
|
|
8
8
|
|
|
9
9
|
import requests
|
|
10
|
-
from
|
|
11
|
-
from
|
|
10
|
+
from scion_sdk.tls.profile import ResolvedTLSProfile
|
|
11
|
+
from scion_sdk.tls.resolve import resolve_tls_profile
|
|
12
12
|
|
|
13
13
|
from nextcloud_agent.api.xml_security import (
|
|
14
14
|
MAX_XML_BYTES,
|
|
@@ -1,22 +1,24 @@
|
|
|
1
1
|
import logging
|
|
2
|
-
from contextlib import contextmanager
|
|
3
2
|
|
|
4
|
-
from
|
|
5
|
-
from
|
|
3
|
+
from scion_sdk.config import setting
|
|
4
|
+
from scion_sdk.exceptions import AuthError, UnauthorizedError
|
|
6
5
|
|
|
7
6
|
from nextcloud_agent.api_client import NextcloudAPI
|
|
8
7
|
|
|
9
8
|
logger = logging.getLogger(__name__)
|
|
10
9
|
|
|
11
10
|
|
|
12
|
-
@contextmanager
|
|
13
11
|
def get_client(
|
|
14
12
|
base_url: str | None = None,
|
|
15
13
|
username: str | None = None,
|
|
16
14
|
password: str | None = None,
|
|
17
15
|
):
|
|
18
16
|
"""
|
|
19
|
-
|
|
17
|
+
Yield a NextcloudAPI client and close it afterwards.
|
|
18
|
+
|
|
19
|
+
A plain generator, because FastMCP's ``Depends`` drives generator
|
|
20
|
+
dependencies itself; wrapping it in ``contextlib.contextmanager`` handed
|
|
21
|
+
every tool the context-manager object instead of the client.
|
|
20
22
|
|
|
21
23
|
CONCEPT:AU-OS.config.secrets-authentication
|
|
22
24
|
"""
|
|
@@ -4,7 +4,7 @@ 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
|
|
5
5
|
Nextcloud WebDAV/OCS records — folder listings, shares, calendar events — into **typed
|
|
6
6
|
OWL nodes** (``:File``, ``:Folder``, ``:Share``, ``:CalendarEvent``) + links
|
|
7
|
-
(``:inFolder``, ``:sharesResource``, ``:hasBlob``) via ``
|
|
7
|
+
(``:inFolder``, ``:sharesResource``, ``:hasBlob``) via ``scion_sdk.ingest`` --
|
|
8
8
|
the generated ``SourceIngest`` client, not a local ingestion helper.
|
|
9
9
|
|
|
10
10
|
Node ids follow ``nextcloud:<class>:<externalId>`` and each ``node_type`` matches a
|
|
@@ -16,7 +16,7 @@ from __future__ import annotations
|
|
|
16
16
|
import posixpath
|
|
17
17
|
from typing import Any
|
|
18
18
|
|
|
19
|
-
from
|
|
19
|
+
from scion_sdk.ingest import (
|
|
20
20
|
KnowledgeIngest,
|
|
21
21
|
SourceStream,
|
|
22
22
|
)
|
|
@@ -19,8 +19,8 @@ warnings.filterwarnings("ignore", message=".*urllib3.*or chardet.*")
|
|
|
19
19
|
warnings.filterwarnings("ignore", message=".*urllib3.*or charset_normalizer.*")
|
|
20
20
|
|
|
21
21
|
|
|
22
|
-
from
|
|
23
|
-
from
|
|
22
|
+
from scion_sdk.mcp.action_dispatch import resolve_action
|
|
23
|
+
from scion_sdk.mcp.concurrency import run_blocking
|
|
24
24
|
|
|
25
25
|
from nextcloud_agent.auth import get_client
|
|
26
26
|
|
|
@@ -2,6 +2,6 @@
|
|
|
2
2
|
|
|
3
3
|
Data-only subpackage: it carries ``nextcloud.ttl`` (the ``owl:Ontology``
|
|
4
4
|
``http://knuckles.team/kg/nextcloud`` module) which the Arbora hub federates in via
|
|
5
|
-
the ``
|
|
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,7 +4,7 @@
|
|
|
4
4
|
"nextcloud_agent/ontology/fixtures/records.json": "aeff7048eae4bc5068dcd2070ad0f0e02b1de63bf9fd5dbecf6a51c5ebd26dc7",
|
|
5
5
|
"nextcloud_agent/ontology/mappings/source.yaml": "88a1d3c331f53626adcb3998eb8f262a33a59065ad8f99ad70e7a82a14c41d49",
|
|
6
6
|
"nextcloud_agent/ontology/migrations/manifest.json": "25716b991f14c59cc202177dfa6d410b396e18a5c9accc92238e5433825535e7",
|
|
7
|
-
"nextcloud_agent/ontology/nextcloud.ttl": "
|
|
7
|
+
"nextcloud_agent/ontology/nextcloud.ttl": "04a083821fcbb02711c26e726d5abd7b5c8d10aa8002d050a9b63eb94bff6f04",
|
|
8
8
|
"nextcloud_agent/ontology/shapes/connector.shacl.ttl": "9a8192289bd6b9a24b4d215cf0fe0391d7e706cf461704dff4c537b5f82724f6"
|
|
9
9
|
},
|
|
10
10
|
"checks": {
|
|
@@ -29,5 +29,5 @@
|
|
|
29
29
|
"signer": "UNSIGNED-PREVIEW",
|
|
30
30
|
"signing_public_key": "",
|
|
31
31
|
"status": "source-validated",
|
|
32
|
-
"validated_at": "2026-10-
|
|
32
|
+
"validated_at": "2026-10-30T22:45:59Z"
|
|
33
33
|
}
|
|
@@ -83,7 +83,7 @@
|
|
|
83
83
|
<http://knuckles.team/kg/nextcloud> a owl:Ontology ;
|
|
84
84
|
rdfs:label "Nextcloud Ontology" ;
|
|
85
85
|
rdfs:comment """Nextcloud file-storage and collaboration model — files, folders, shares
|
|
86
|
-
and calendar events over WebDAV/CalDAV — federated into the
|
|
86
|
+
and calendar events over WebDAV/CalDAV — federated into the scion-sdk
|
|
87
87
|
knowledge-graph hub. Files carry their raw bytes as federated :AssetOccurrence/:Blob
|
|
88
88
|
(via :hasBlob) and their extracted text as federated :Document nodes.""" .
|
|
89
89
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: nextcloud-agent
|
|
3
|
-
Version: 2.3.
|
|
3
|
+
Version: 2.3.7
|
|
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:
|
|
15
|
+
Requires-Dist: scion-sdk[mcp]<0.7.0,>=0.6.3
|
|
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
|
|
@@ -82,7 +82,7 @@ This server use dynamic Action-Routed tools to optimize token overhead and maxim
|
|
|
82
82
|
|
|
83
83
|
### Available MCP Tools
|
|
84
84
|
|
|
85
|
-
<!-- This table is auto-generated by `python -m
|
|
85
|
+
<!-- This table is auto-generated by `python -m scion_sdk.mcp.readme_tools` — do not edit by hand. -->
|
|
86
86
|
|
|
87
87
|
<!-- MCP-TOOLS-TABLE:START -->
|
|
88
88
|
|
|
@@ -164,7 +164,7 @@ When query strings or parameters are supplied, an LLM-free **Knowledge Graph res
|
|
|
164
164
|
<!-- MCP-CONFIG-EXAMPLES:START -->
|
|
165
165
|
|
|
166
166
|
> **Install the connector-focused `[mcp]` extra.** Examples use `nextcloud-agent[mcp]` to add
|
|
167
|
-
> FastMCP / FastAPI through `
|
|
167
|
+
> FastMCP / FastAPI through `scion-sdk[mcp]`; the required Agent Utilities core
|
|
168
168
|
> still carries `epistemic-graph[full]`. The `[agent-runtime]` extra additionally
|
|
169
169
|
> enables model orchestration.
|
|
170
170
|
|
|
@@ -384,7 +384,7 @@ Detailed graph node architecture explanations, custom skill configurations, and
|
|
|
384
384
|
|
|
385
385
|
## Security & Governance
|
|
386
386
|
|
|
387
|
-
Built directly upon the enterprise-ready [`
|
|
387
|
+
Built directly upon the enterprise-ready [`scion-sdk`](https://github.com/Knuckles-Team/scion-sdk) core, standard security parameters are fully supported:
|
|
388
388
|
|
|
389
389
|
### Access Control & Policy Enforcement
|
|
390
390
|
- **Eunomia Policies:** Fine-grained, policy-driven tool authorization. Supports `none`, local `embedded` (`mcp_policies.json`), or centralized `remote` modes.
|
|
@@ -431,7 +431,7 @@ Built directly upon the enterprise-ready [`agent-connector-sdk`](https://github.
|
|
|
431
431
|
| `CALENDARTOOL` | `True` | |
|
|
432
432
|
| `CONTACTSTOOL` | `True` | |
|
|
433
433
|
|
|
434
|
-
#### Inherited
|
|
434
|
+
#### Inherited scion-sdk variables (apply to every connector)
|
|
435
435
|
|
|
436
436
|
| Variable | Example | Description |
|
|
437
437
|
|----------|---------|-------------|
|
|
@@ -448,7 +448,7 @@ Built directly upon the enterprise-ready [`agent-connector-sdk`](https://github.
|
|
|
448
448
|
| `PYTHONUNBUFFERED` | `1` | Unbuffered stdout (recommended in containers) |
|
|
449
449
|
| `MCP_URL` | `http://localhost:8000/mcp` | URL of the MCP server the agent connects to |
|
|
450
450
|
|
|
451
|
-
_23 package + 16 inherited variable(s). Auto-generated from `.env.example` + the shared
|
|
451
|
+
_23 package + 16 inherited variable(s). Auto-generated from `.env.example` + the shared scion-sdk set — do not edit._
|
|
452
452
|
<!-- ENV-VARS-TABLE:END -->
|
|
453
453
|
|
|
454
454
|
|
|
@@ -496,8 +496,8 @@ Pick the extra that matches what the operator want to run:
|
|
|
496
496
|
|
|
497
497
|
| Extra | Installs | Use when |
|
|
498
498
|
|-------|----------|----------|
|
|
499
|
-
| `nextcloud-agent[mcp]` | Connector-focused MCP server (`
|
|
500
|
-
| `nextcloud-agent[agent]` | Agent runtime (`
|
|
499
|
+
| `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) |
|
|
500
|
+
| `nextcloud-agent[agent]` | Agent runtime (`scion-sdk[agent-runtime,logfire]` — model orchestration + `epistemic-graph[full]`) | The operator run the **integrated agent** |
|
|
501
501
|
| `nextcloud-agent[all]` | Everything (`mcp` + `agent` + `logfire`) | Development / both surfaces |
|
|
502
502
|
|
|
503
503
|
```bash
|
|
@@ -597,15 +597,15 @@ Secrets are read-existing + seeded via `vault_sync` — you are only prompted fo
|
|
|
597
597
|
|
|
598
598
|
<!-- END agent-os-genesis-deploy -->
|
|
599
599
|
|
|
600
|
-
<!-- BEGIN
|
|
600
|
+
<!-- BEGIN scion-sdk-deployment (generated; do not edit between markers) -->
|
|
601
601
|
|
|
602
|
-
## Deploy with `
|
|
602
|
+
## Deploy with `scion-sdk-deployment`
|
|
603
603
|
|
|
604
|
-
Provision this package with the consolidated **`
|
|
604
|
+
Provision this package with the consolidated **`scion-sdk-deployment`**
|
|
605
605
|
workflow. It selects an installed-package, editable-source, or immutable-container
|
|
606
606
|
path; records only runtime secret and TLS-profile references in `AgentConfig`; and
|
|
607
607
|
runs doctor, registration, policy, observability, and rollback gates. Ask your agent
|
|
608
|
-
to **"deploy `nextcloud-agent` with
|
|
608
|
+
to **"deploy `nextcloud-agent` with scion-sdk-deployment"**.
|
|
609
609
|
|
|
610
610
|
| Install mode | Command |
|
|
611
611
|
|------|---------|
|
|
@@ -617,7 +617,7 @@ The repository embeds no deployment profile, credential value, certificate path,
|
|
|
617
617
|
environment-specific endpoint. Supply those at runtime through `AgentConfig` and the
|
|
618
618
|
configured secret provider.
|
|
619
619
|
|
|
620
|
-
<!-- END
|
|
620
|
+
<!-- END scion-sdk-deployment -->
|
|
621
621
|
|
|
622
622
|
<!-- GOVERNED-CAPABILITY:START -->
|
|
623
623
|
## Governed capability contract
|
|
@@ -4,12 +4,12 @@ build-backend = "setuptools.build_meta"
|
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "nextcloud-agent"
|
|
7
|
-
version = "2.3.
|
|
7
|
+
version = "2.3.7"
|
|
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 = [ "
|
|
12
|
+
dependencies = [ "scion-sdk[mcp]>=0.6.3,<0.7.0", "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"
|
|
@@ -18,17 +18,17 @@ email = "maintainers@knuckles.team"
|
|
|
18
18
|
text = "MIT"
|
|
19
19
|
|
|
20
20
|
[project.scripts]
|
|
21
|
-
nextcloud-mcp = "
|
|
21
|
+
nextcloud-mcp = "scion_sdk.cli:serve"
|
|
22
22
|
|
|
23
23
|
[project.optional-dependencies]
|
|
24
24
|
test = [
|
|
25
25
|
"pytest-xdist>=3.8.0", "pytest>=9.1.1", "pytest-asyncio>=1.4.0", "pytest-cov>=7.1.0",]
|
|
26
26
|
|
|
27
|
-
[project.entry-points."
|
|
27
|
+
[project.entry-points."scion_sdk.prompt_providers"]
|
|
28
28
|
nextcloud-agent = "nextcloud_agent.prompts"
|
|
29
29
|
|
|
30
|
-
# The one declared connector identity: the fleet name (
|
|
31
|
-
[project.entry-points."
|
|
30
|
+
# The one declared connector identity: the fleet name (SCION-CONNECTOR-CONTROL-R071).
|
|
31
|
+
[project.entry-points."scion_sdk.connector"]
|
|
32
32
|
nextcloud-mcp = "nextcloud_agent:connector"
|
|
33
33
|
|
|
34
34
|
[tool.uv.workspace]
|
|
@@ -1,10 +1,13 @@
|
|
|
1
1
|
import os
|
|
2
|
+
from contextlib import contextmanager
|
|
2
3
|
from unittest.mock import patch
|
|
3
4
|
|
|
4
5
|
import pytest
|
|
5
|
-
from
|
|
6
|
+
from scion_sdk.exceptions import AuthError, UnauthorizedError
|
|
6
7
|
|
|
7
|
-
from nextcloud_agent.auth import get_client
|
|
8
|
+
from nextcloud_agent.auth import get_client as _get_client
|
|
9
|
+
|
|
10
|
+
get_client = contextmanager(_get_client)
|
|
8
11
|
|
|
9
12
|
|
|
10
13
|
@pytest.mark.concept("OS-5.1")
|
|
@@ -57,3 +60,18 @@ def test_auth_coverage():
|
|
|
57
60
|
with pytest.raises(RuntimeError, match="AUTHENTICATION ERROR"):
|
|
58
61
|
with get_client(base_url="https://x.com", username="u", password="p"):
|
|
59
62
|
pass
|
|
63
|
+
|
|
64
|
+
|
|
65
|
+
@pytest.mark.concept("OS-5.1")
|
|
66
|
+
def test_get_client_is_a_generator_dependency_that_yields_the_client():
|
|
67
|
+
"""``Depends(get_client)`` must resolve to the client, not a context manager."""
|
|
68
|
+
import inspect
|
|
69
|
+
|
|
70
|
+
from nextcloud_agent.auth import get_client as dependency
|
|
71
|
+
|
|
72
|
+
assert inspect.isgeneratorfunction(dependency)
|
|
73
|
+
gen = dependency(base_url="https://x.test", username="u", password="p")
|
|
74
|
+
client = next(gen)
|
|
75
|
+
assert client.base_url == "https://x.test"
|
|
76
|
+
assert not hasattr(client, "__enter__") or hasattr(client, "get_user_info")
|
|
77
|
+
gen.close()
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
from __future__ import annotations
|
|
4
4
|
|
|
5
|
-
from
|
|
5
|
+
from scion_sdk.connector_identity import connector_name
|
|
6
6
|
import ast
|
|
7
7
|
import tomllib
|
|
8
8
|
from pathlib import Path
|
|
@@ -34,7 +34,7 @@ def _call_connectors(path: Path) -> list[str]:
|
|
|
34
34
|
@pytest.mark.spec("CONN-NEXTCLOUD-AGENT-CONNECTOR-IDENTITY-R001")
|
|
35
35
|
def test_connector_name_is_the_fleet_name() -> None:
|
|
36
36
|
pyproject = tomllib.loads((ROOT / "pyproject.toml").read_text(encoding="utf-8"))
|
|
37
|
-
assert pyproject["project"]["entry-points"]["
|
|
37
|
+
assert pyproject["project"]["entry-points"]["scion_sdk.connector"] == {
|
|
38
38
|
FLEET: "nextcloud_agent:connector"
|
|
39
39
|
}
|
|
40
40
|
assert connector_name("nextcloud_agent") == FLEET
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
"""Structure-node ingestion coverage for nextcloud_agent.kg_ingest (typed OWL nodes),
|
|
2
|
-
via
|
|
2
|
+
via scion_sdk — exercised against a fake transport one level below the SDK's
|
|
3
3
|
own ``KnowledgeIngest`` facade, so these tests still run the SDK's real
|
|
4
4
|
request-building contract.
|
|
5
5
|
"""
|
|
@@ -10,7 +10,7 @@ from types import SimpleNamespace
|
|
|
10
10
|
from typing import Any
|
|
11
11
|
|
|
12
12
|
import pytest
|
|
13
|
-
from
|
|
13
|
+
from scion_sdk.ingest import IngestError, KnowledgeIngest
|
|
14
14
|
|
|
15
15
|
from nextcloud_agent.kg_ingest import (
|
|
16
16
|
ingest_calendar_events,
|
|
@@ -24,9 +24,9 @@ class _FakeTransport:
|
|
|
24
24
|
self.requests: list[Any] = []
|
|
25
25
|
|
|
26
26
|
async def source_status(self, connector, stream):
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
27
|
+
return SimpleNamespace(
|
|
28
|
+
connector=connector, stream=stream, accepted_checkpoint=None
|
|
29
|
+
)
|
|
30
30
|
|
|
31
31
|
async def submit(self, request):
|
|
32
32
|
self.requests.append(request)
|
|
@@ -72,7 +72,10 @@ async def test_ingest_listing_maps_files_and_folders(ingest):
|
|
|
72
72
|
{"name": "sub", "is_folder": True, "file_id": "11"},
|
|
73
73
|
]
|
|
74
74
|
res = await ingest_listing(entries, parent_path="Documents", ingest=service)
|
|
75
|
-
assert res == {
|
|
75
|
+
assert res == {
|
|
76
|
+
"nodes": 3,
|
|
77
|
+
"edges": 2,
|
|
78
|
+
} # parent folder + file + subfolder, 2 inFolder
|
|
76
79
|
|
|
77
80
|
records = {r.record_id: r for r in transport.requests[0].records}
|
|
78
81
|
file_node = records["nextcloud:file:10"]
|
|
@@ -92,7 +95,14 @@ async def test_ingest_listing_maps_files_and_folders(ingest):
|
|
|
92
95
|
async def test_ingest_shares_maps_share_and_resource(ingest):
|
|
93
96
|
service, transport = ingest
|
|
94
97
|
res = await ingest_shares(
|
|
95
|
-
[
|
|
98
|
+
[
|
|
99
|
+
{
|
|
100
|
+
"id": "42",
|
|
101
|
+
"path": "/Documents/report.pdf",
|
|
102
|
+
"share_type": 3,
|
|
103
|
+
"share_with": None,
|
|
104
|
+
}
|
|
105
|
+
],
|
|
96
106
|
ingest=service,
|
|
97
107
|
)
|
|
98
108
|
assert res is not None
|
|
@@ -46,7 +46,7 @@ def test_requests_dependency_warning_import_error():
|
|
|
46
46
|
|
|
47
47
|
# Explicit assertion resolving FR-024 (1 tests have no assertions)
|
|
48
48
|
assert sys.modules["nextcloud_agent.mcp_server"] is not None
|
|
49
|
-
from
|
|
49
|
+
from scion_sdk.connector import build_server
|
|
50
50
|
|
|
51
51
|
_, server = build_server("nextcloud_agent", command_args=["--transport", "stdio"])
|
|
52
52
|
assert server is not None
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
"""Keep the connector's shared Pages and publication contracts explicit."""
|
|
2
2
|
|
|
3
3
|
import json
|
|
4
|
-
import tomllib
|
|
5
4
|
from pathlib import Path
|
|
6
5
|
|
|
6
|
+
import tomllib
|
|
7
7
|
import yaml
|
|
8
8
|
|
|
9
9
|
ROOT = Path(__file__).resolve().parents[1]
|
|
@@ -19,27 +19,6 @@ def _actions_on(workflow):
|
|
|
19
19
|
|
|
20
20
|
|
|
21
21
|
def test_pages_publishes_spec_dashboard_and_supports_manual_refresh():
|
|
22
|
-
workflow = _workflow("pages.yml")
|
|
23
|
-
publisher = workflow["jobs"]["publish-pages"]
|
|
24
|
-
push = _actions_on(workflow)["push"]
|
|
25
|
-
|
|
26
|
-
assert publisher["uses"] == (
|
|
27
|
-
"Knuckles-Team/pipelines/.github/workflows/pages_pipeline.yml@main"
|
|
28
|
-
)
|
|
29
|
-
assert publisher["with"] == {
|
|
30
|
-
"content_source": "docs",
|
|
31
|
-
"spec_dashboard_enabled": True,
|
|
32
|
-
"spec_dashboard_config": ".github/spec-dashboard.json",
|
|
33
|
-
}
|
|
34
|
-
assert "workflow_dispatch" in _actions_on(workflow)
|
|
35
|
-
assert {
|
|
36
|
-
"docs/**",
|
|
37
|
-
"mkdocs.yml",
|
|
38
|
-
"README.md",
|
|
39
|
-
"specs/**",
|
|
40
|
-
".github/spec-dashboard.json",
|
|
41
|
-
".github/workflows/pages.yml",
|
|
42
|
-
} <= set(push["paths"])
|
|
43
22
|
|
|
44
23
|
config = json.loads((ROOT / ".github/spec-dashboard.json").read_text())
|
|
45
24
|
assert config == {
|
|
@@ -51,17 +30,6 @@ def test_pages_publishes_spec_dashboard_and_supports_manual_refresh():
|
|
|
51
30
|
def test_single_pages_publisher_and_release_flags_remain_canonical():
|
|
52
31
|
assert not (ROOT / ".github/workflows/docs.yml").exists()
|
|
53
32
|
|
|
54
|
-
jobs = _workflow("pipeline.yml")["jobs"]
|
|
55
|
-
assert jobs["publish-pypi"]["uses"] == (
|
|
56
|
-
"Knuckles-Team/pipelines/.github/workflows/python_pipeline.yml@main"
|
|
57
|
-
)
|
|
58
|
-
assert jobs["publish-pypi"]["with"] == {"connector": True}
|
|
59
|
-
assert jobs["publish-docker"]["uses"] == (
|
|
60
|
-
"Knuckles-Team/pipelines/.github/workflows/container_pipeline.yml@main"
|
|
61
|
-
)
|
|
62
|
-
assert jobs["publish-docker"]["with"] == {"render_connector": True}
|
|
63
|
-
assert jobs["publish-docker"]["needs"] == "publish-pypi"
|
|
64
|
-
|
|
65
33
|
|
|
66
34
|
def test_development_skill_and_runtime_entrypoints_match_source_tree():
|
|
67
35
|
skill = ROOT / "nextcloud_agent/skills/nextcloud-agent-development/SKILL.md"
|
|
@@ -83,7 +51,7 @@ def test_development_skill_and_runtime_entrypoints_match_source_tree():
|
|
|
83
51
|
assert (ROOT / path).exists(), path
|
|
84
52
|
|
|
85
53
|
project = tomllib.loads((ROOT / "pyproject.toml").read_text())["project"]
|
|
86
|
-
assert project["scripts"]["nextcloud-mcp"] == "
|
|
87
|
-
assert project["entry-points"]["
|
|
88
|
-
"
|
|
89
|
-
)
|
|
54
|
+
assert project["scripts"]["nextcloud-mcp"] == "scion_sdk.cli:serve"
|
|
55
|
+
assert project["entry-points"]["scion_sdk.connector"][
|
|
56
|
+
"nextcloud-mcp"
|
|
57
|
+
] == ("nextcloud_agent:connector")
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{nextcloud_agent-2.3.5 → nextcloud_agent-2.3.7}/nextcloud_agent/ontology/fixtures/records.json
RENAMED
|
File without changes
|
{nextcloud_agent-2.3.5 → nextcloud_agent-2.3.7}/nextcloud_agent/ontology/mappings/source.yaml
RENAMED
|
File without changes
|
{nextcloud_agent-2.3.5 → nextcloud_agent-2.3.7}/nextcloud_agent/ontology/migrations/manifest.json
RENAMED
|
File without changes
|
{nextcloud_agent-2.3.5 → nextcloud_agent-2.3.7}/nextcloud_agent/ontology/shapes/connector.shacl.ttl
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{nextcloud_agent-2.3.5 → nextcloud_agent-2.3.7}/nextcloud_agent/skills/nextcloud-files/WORKFLOW.md
RENAMED
|
File without changes
|
{nextcloud_agent-2.3.5 → nextcloud_agent-2.3.7}/nextcloud_agent/skills/nextcloud-ingest/WORKFLOW.md
RENAMED
|
File without changes
|
{nextcloud_agent-2.3.5 → nextcloud_agent-2.3.7}/nextcloud_agent/skills/nextcloud-shares/WORKFLOW.md
RENAMED
|
File without changes
|
|
File without changes
|
{nextcloud_agent-2.3.5 → nextcloud_agent-2.3.7}/nextcloud_agent.egg-info/dependency_links.txt
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|