cinna-cli 0.5.0__tar.gz → 0.5.1__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.
- {cinna_cli-0.5.0 → cinna_cli-0.5.1}/PKG-INFO +1 -1
- {cinna_cli-0.5.0 → cinna_cli-0.5.1}/docs/features/delegation/delegation.md +5 -3
- {cinna_cli-0.5.0 → cinna_cli-0.5.1}/docs/features/delegation/delegation_tech.md +3 -2
- {cinna_cli-0.5.0 → cinna_cli-0.5.1}/pyproject.toml +1 -1
- {cinna_cli-0.5.0 → cinna_cli-0.5.1}/src/cinna/delegation.py +11 -5
- {cinna_cli-0.5.0 → cinna_cli-0.5.1}/src/cinna/kit_contract.py +1 -1
- {cinna_cli-0.5.0 → cinna_cli-0.5.1}/tests/test_delegation.py +10 -0
- {cinna_cli-0.5.0 → cinna_cli-0.5.1}/tests/test_local_import.py +1 -1
- {cinna_cli-0.5.0 → cinna_cli-0.5.1}/uv.lock +1 -1
- {cinna_cli-0.5.0 → cinna_cli-0.5.1}/.claude/commands/cinna-cli.feature.doc.md +0 -0
- {cinna_cli-0.5.0 → cinna_cli-0.5.1}/.github/workflows/publish.yml +0 -0
- {cinna_cli-0.5.0 → cinna_cli-0.5.1}/.gitignore +0 -0
- {cinna_cli-0.5.0 → cinna_cli-0.5.1}/LICENSE.md +0 -0
- {cinna_cli-0.5.0 → cinna_cli-0.5.1}/README.md +0 -0
- {cinna_cli-0.5.0 → cinna_cli-0.5.1}/docs/README.md +0 -0
- {cinna_cli-0.5.0 → cinna_cli-0.5.1}/docs/features/account_workspace/account_workspace.md +0 -0
- {cinna_cli-0.5.0 → cinna_cli-0.5.1}/docs/features/account_workspace/account_workspace_acceptance.md +0 -0
- {cinna_cli-0.5.0 → cinna_cli-0.5.1}/docs/features/account_workspace/account_workspace_tech.md +0 -0
- {cinna_cli-0.5.0 → cinna_cli-0.5.1}/docs/features/agent_addons/agent_addons.md +0 -0
- {cinna_cli-0.5.0 → cinna_cli-0.5.1}/docs/features/agent_addons/agent_addons_acceptance.md +0 -0
- {cinna_cli-0.5.0 → cinna_cli-0.5.1}/docs/features/agent_addons/agent_addons_tech.md +0 -0
- {cinna_cli-0.5.0 → cinna_cli-0.5.1}/docs/features/agent_api/agent_api.md +0 -0
- {cinna_cli-0.5.0 → cinna_cli-0.5.1}/docs/features/agent_api/agent_api_acceptance.md +0 -0
- {cinna_cli-0.5.0 → cinna_cli-0.5.1}/docs/features/agent_api/agent_api_tech.md +0 -0
- {cinna_cli-0.5.0 → cinna_cli-0.5.1}/docs/features/agent_management/agent_management.md +0 -0
- {cinna_cli-0.5.0 → cinna_cli-0.5.1}/docs/features/agent_management/agent_management_acceptance.md +0 -0
- {cinna_cli-0.5.0 → cinna_cli-0.5.1}/docs/features/agent_management/agent_management_tech.md +0 -0
- {cinna_cli-0.5.0 → cinna_cli-0.5.1}/docs/features/agent_schedules/agent_schedules.md +0 -0
- {cinna_cli-0.5.0 → cinna_cli-0.5.1}/docs/features/agent_schedules/agent_schedules_acceptance.md +0 -0
- {cinna_cli-0.5.0 → cinna_cli-0.5.1}/docs/features/agent_schedules/agent_schedules_tech.md +0 -0
- {cinna_cli-0.5.0 → cinna_cli-0.5.1}/docs/features/bootstrap_onboarding/bootstrap_onboarding.md +0 -0
- {cinna_cli-0.5.0 → cinna_cli-0.5.1}/docs/features/bootstrap_onboarding/bootstrap_onboarding_acceptance.md +0 -0
- {cinna_cli-0.5.0 → cinna_cli-0.5.1}/docs/features/bootstrap_onboarding/bootstrap_onboarding_tech.md +0 -0
- {cinna_cli-0.5.0 → cinna_cli-0.5.1}/docs/features/delegation/delegation_acceptance.md +0 -0
- {cinna_cli-0.5.0 → cinna_cli-0.5.1}/docs/features/doctor/doctor.md +0 -0
- {cinna_cli-0.5.0 → cinna_cli-0.5.1}/docs/features/doctor/doctor_acceptance.md +0 -0
- {cinna_cli-0.5.0 → cinna_cli-0.5.1}/docs/features/doctor/doctor_tech.md +0 -0
- {cinna_cli-0.5.0 → cinna_cli-0.5.1}/docs/features/git_versioning/git_versioning.md +0 -0
- {cinna_cli-0.5.0 → cinna_cli-0.5.1}/docs/features/git_versioning/git_versioning_acceptance.md +0 -0
- {cinna_cli-0.5.0 → cinna_cli-0.5.1}/docs/features/git_versioning/git_versioning_tech.md +0 -0
- {cinna_cli-0.5.0 → cinna_cli-0.5.1}/docs/features/improvement_requests/improvement_requests.md +0 -0
- {cinna_cli-0.5.0 → cinna_cli-0.5.1}/docs/features/improvement_requests/improvement_requests_acceptance.md +0 -0
- {cinna_cli-0.5.0 → cinna_cli-0.5.1}/docs/features/improvement_requests/improvement_requests_tech.md +0 -0
- {cinna_cli-0.5.0 → cinna_cli-0.5.1}/docs/features/live_sync/live_sync.md +0 -0
- {cinna_cli-0.5.0 → cinna_cli-0.5.1}/docs/features/live_sync/live_sync_acceptance.md +0 -0
- {cinna_cli-0.5.0 → cinna_cli-0.5.1}/docs/features/live_sync/live_sync_tech.md +0 -0
- {cinna_cli-0.5.0 → cinna_cli-0.5.1}/docs/features/local_agent_import/local_agent_import.md +0 -0
- {cinna_cli-0.5.0 → cinna_cli-0.5.1}/docs/features/local_agent_import/local_agent_import_acceptance.md +0 -0
- {cinna_cli-0.5.0 → cinna_cli-0.5.1}/docs/features/local_agent_import/local_agent_import_tech.md +0 -0
- {cinna_cli-0.5.0 → cinna_cli-0.5.1}/docs/features/mcp_integration/mcp_integration.md +0 -0
- {cinna_cli-0.5.0 → cinna_cli-0.5.1}/docs/features/mcp_integration/mcp_integration_acceptance.md +0 -0
- {cinna_cli-0.5.0 → cinna_cli-0.5.1}/docs/features/mcp_integration/mcp_integration_tech.md +0 -0
- {cinna_cli-0.5.0 → cinna_cli-0.5.1}/docs/features/remote_chat/remote_chat.md +0 -0
- {cinna_cli-0.5.0 → cinna_cli-0.5.1}/docs/features/remote_chat/remote_chat_acceptance.md +0 -0
- {cinna_cli-0.5.0 → cinna_cli-0.5.1}/docs/features/remote_chat/remote_chat_tech.md +0 -0
- {cinna_cli-0.5.0 → cinna_cli-0.5.1}/docs/features/remote_exec/remote_exec.md +0 -0
- {cinna_cli-0.5.0 → cinna_cli-0.5.1}/docs/features/remote_exec/remote_exec_acceptance.md +0 -0
- {cinna_cli-0.5.0 → cinna_cli-0.5.1}/docs/features/remote_exec/remote_exec_tech.md +0 -0
- {cinna_cli-0.5.0 → cinna_cli-0.5.1}/docs/interface.md +0 -0
- {cinna_cli-0.5.0 → cinna_cli-0.5.1}/docs/mutagen_capabilities.md +0 -0
- {cinna_cli-0.5.0 → cinna_cli-0.5.1}/scripts/check_docs_references.py +0 -0
- {cinna_cli-0.5.0 → cinna_cli-0.5.1}/src/cinna/__init__.py +0 -0
- {cinna_cli-0.5.0 → cinna_cli-0.5.1}/src/cinna/account.py +0 -0
- {cinna_cli-0.5.0 → cinna_cli-0.5.1}/src/cinna/auth.py +0 -0
- {cinna_cli-0.5.0 → cinna_cli-0.5.1}/src/cinna/bootstrap.py +0 -0
- {cinna_cli-0.5.0 → cinna_cli-0.5.1}/src/cinna/chat.py +0 -0
- {cinna_cli-0.5.0 → cinna_cli-0.5.1}/src/cinna/cli_version.py +0 -0
- {cinna_cli-0.5.0 → cinna_cli-0.5.1}/src/cinna/client.py +0 -0
- {cinna_cli-0.5.0 → cinna_cli-0.5.1}/src/cinna/config.py +0 -0
- {cinna_cli-0.5.0 → cinna_cli-0.5.1}/src/cinna/console.py +0 -0
- {cinna_cli-0.5.0 → cinna_cli-0.5.1}/src/cinna/context.py +0 -0
- {cinna_cli-0.5.0 → cinna_cli-0.5.1}/src/cinna/doctor.py +0 -0
- {cinna_cli-0.5.0 → cinna_cli-0.5.1}/src/cinna/errors.py +0 -0
- {cinna_cli-0.5.0 → cinna_cli-0.5.1}/src/cinna/git_versioning.py +0 -0
- {cinna_cli-0.5.0 → cinna_cli-0.5.1}/src/cinna/improve.py +0 -0
- {cinna_cli-0.5.0 → cinna_cli-0.5.1}/src/cinna/local_import.py +0 -0
- {cinna_cli-0.5.0 → cinna_cli-0.5.1}/src/cinna/logging.py +0 -0
- {cinna_cli-0.5.0 → cinna_cli-0.5.1}/src/cinna/main.py +0 -0
- {cinna_cli-0.5.0 → cinna_cli-0.5.1}/src/cinna/mcp_proxy.py +0 -0
- {cinna_cli-0.5.0 → cinna_cli-0.5.1}/src/cinna/mutagen_runtime.py +0 -0
- {cinna_cli-0.5.0 → cinna_cli-0.5.1}/src/cinna/scenarios.py +0 -0
- {cinna_cli-0.5.0 → cinna_cli-0.5.1}/src/cinna/sync.py +0 -0
- {cinna_cli-0.5.0 → cinna_cli-0.5.1}/src/cinna/sync_session.py +0 -0
- {cinna_cli-0.5.0 → cinna_cli-0.5.1}/src/cinna/sync_ssh_shim.py +0 -0
- {cinna_cli-0.5.0 → cinna_cli-0.5.1}/src/cinna/sync_tui.py +0 -0
- {cinna_cli-0.5.0 → cinna_cli-0.5.1}/src/cinna/templates/ACCOUNT_CLAUDE.md.template +0 -0
- {cinna_cli-0.5.0 → cinna_cli-0.5.1}/src/cinna/templates/CHAT_TESTING.md +0 -0
- {cinna_cli-0.5.0 → cinna_cli-0.5.1}/src/cinna/templates/CLAUDE.md.template +0 -0
- {cinna_cli-0.5.0 → cinna_cli-0.5.1}/src/cinna/templates/GIT_VERSIONING.md +0 -0
- {cinna_cli-0.5.0 → cinna_cli-0.5.1}/src/cinna/templates/__init__.py +0 -0
- {cinna_cli-0.5.0 → cinna_cli-0.5.1}/tests/__init__.py +0 -0
- {cinna_cli-0.5.0 → cinna_cli-0.5.1}/tests/conftest.py +0 -0
- {cinna_cli-0.5.0 → cinna_cli-0.5.1}/tests/test_account.py +0 -0
- {cinna_cli-0.5.0 → cinna_cli-0.5.1}/tests/test_auth.py +0 -0
- {cinna_cli-0.5.0 → cinna_cli-0.5.1}/tests/test_bootstrap.py +0 -0
- {cinna_cli-0.5.0 → cinna_cli-0.5.1}/tests/test_chat.py +0 -0
- {cinna_cli-0.5.0 → cinna_cli-0.5.1}/tests/test_cli_version.py +0 -0
- {cinna_cli-0.5.0 → cinna_cli-0.5.1}/tests/test_client.py +0 -0
- {cinna_cli-0.5.0 → cinna_cli-0.5.1}/tests/test_config.py +0 -0
- {cinna_cli-0.5.0 → cinna_cli-0.5.1}/tests/test_console.py +0 -0
- {cinna_cli-0.5.0 → cinna_cli-0.5.1}/tests/test_context.py +0 -0
- {cinna_cli-0.5.0 → cinna_cli-0.5.1}/tests/test_doctor.py +0 -0
- {cinna_cli-0.5.0 → cinna_cli-0.5.1}/tests/test_git_versioning.py +0 -0
- {cinna_cli-0.5.0 → cinna_cli-0.5.1}/tests/test_improve.py +0 -0
- {cinna_cli-0.5.0 → cinna_cli-0.5.1}/tests/test_kit_contract.py +0 -0
- {cinna_cli-0.5.0 → cinna_cli-0.5.1}/tests/test_main.py +0 -0
- {cinna_cli-0.5.0 → cinna_cli-0.5.1}/tests/test_mutagen_runtime.py +0 -0
- {cinna_cli-0.5.0 → cinna_cli-0.5.1}/tests/test_onboarding.py +0 -0
- {cinna_cli-0.5.0 → cinna_cli-0.5.1}/tests/test_scenarios.py +0 -0
- {cinna_cli-0.5.0 → cinna_cli-0.5.1}/tests/test_sync.py +0 -0
- {cinna_cli-0.5.0 → cinna_cli-0.5.1}/tests/test_sync_session.py +0 -0
- {cinna_cli-0.5.0 → cinna_cli-0.5.1}/tests/test_sync_ssh_shim.py +0 -0
|
@@ -152,9 +152,11 @@ result attached to the current task ──► delivered to the requester (Deskto
|
|
|
152
152
|
- **Remote chat** — a delegated task runs as a platform session like the ones
|
|
153
153
|
`cinna chat` drives. See [Remote Chat](../remote_chat/remote_chat.md).
|
|
154
154
|
- **cinna-core task MCP server (not in this repo)** — inside cloud tasks the
|
|
155
|
-
backend's MCP
|
|
156
|
-
|
|
157
|
-
|
|
155
|
+
backend's `cinna` MCP server exposes a `tasks_report` tool (the Cinna Task
|
|
156
|
+
Protocol, kit contract 1.6.0) that records the same kind of result; an
|
|
157
|
+
environment built before protocol version 1 still has it as `handover_report`
|
|
158
|
+
on the older `agent_task` server. It is implemented and documented in
|
|
159
|
+
cinna-core; this CLI only offers the equivalent command-line path.
|
|
158
160
|
|
|
159
161
|
Implementation: see [delegation_tech.md](delegation_tech.md).
|
|
160
162
|
Real-usage e2e scenarios: see [delegation_acceptance.md](delegation_acceptance.md).
|
|
@@ -122,8 +122,9 @@ Executor side — direct call, agent-token auth:
|
|
|
122
122
|
belongs to this environment's agent and owner, and resolves the task from the
|
|
123
123
|
session. Any 2xx is success.
|
|
124
124
|
|
|
125
|
-
Related, not in this repo: cinna-core's
|
|
126
|
-
`
|
|
125
|
+
Related, not in this repo: cinna-core's `cinna` MCP server exposes a
|
|
126
|
+
`tasks_report` tool for the same executor-side report (`handover_report` on
|
|
127
|
+
environments built before protocol version 1).
|
|
127
128
|
|
|
128
129
|
## Edge cases & guardrails (preserve these)
|
|
129
130
|
|
|
@@ -78,8 +78,13 @@ def _emit_json(result) -> bool:
|
|
|
78
78
|
|
|
79
79
|
|
|
80
80
|
def _parse_artifacts(values: tuple[str, ...]) -> list[dict]:
|
|
81
|
-
"""Each ``--artifact`` must be a JSON object with kind
|
|
82
|
-
|
|
81
|
+
"""Each ``--artifact`` must be a JSON object with ``kind`` and ``name``.
|
|
82
|
+
|
|
83
|
+
A ``link`` needs an HTTP(S) ``ref`` — the only kind of reference another
|
|
84
|
+
agent can open. A ``file`` may leave ``ref`` out (the Cinna Task Protocol's
|
|
85
|
+
name-only file artifact, kit contract 1.6.0); when it carries one it must be
|
|
86
|
+
HTTP(S) too, never a local path.
|
|
87
|
+
"""
|
|
83
88
|
artifacts = []
|
|
84
89
|
for value in values:
|
|
85
90
|
try:
|
|
@@ -90,9 +95,10 @@ def _parse_artifacts(values: tuple[str, ...]) -> list[dict]:
|
|
|
90
95
|
raise click.BadParameter(
|
|
91
96
|
f"Not a JSON object: {value}", param_hint="--artifact"
|
|
92
97
|
)
|
|
98
|
+
required = ("kind", "name") if artifact.get("kind") == "file" and "ref" not in artifact else ("kind", "name", "ref")
|
|
93
99
|
missing = [
|
|
94
100
|
key
|
|
95
|
-
for key in
|
|
101
|
+
for key in required
|
|
96
102
|
if not isinstance(artifact.get(key), str) or not artifact[key].strip()
|
|
97
103
|
]
|
|
98
104
|
if missing:
|
|
@@ -100,7 +106,7 @@ def _parse_artifacts(values: tuple[str, ...]) -> list[dict]:
|
|
|
100
106
|
f"Artifact needs non-empty string {', '.join(missing)}: {value}",
|
|
101
107
|
param_hint="--artifact",
|
|
102
108
|
)
|
|
103
|
-
if urlparse(artifact["ref"]).scheme.lower() not in ("http", "https"):
|
|
109
|
+
if "ref" in artifact and urlparse(artifact["ref"]).scheme.lower() not in ("http", "https"):
|
|
104
110
|
raise click.BadParameter(
|
|
105
111
|
"Artifact ref must be an http(s) URL (upload local files first): "
|
|
106
112
|
f"{artifact['ref']}",
|
|
@@ -311,7 +317,7 @@ def status(task_id):
|
|
|
311
317
|
@click.option(
|
|
312
318
|
"--artifact",
|
|
313
319
|
multiple=True,
|
|
314
|
-
help='JSON object {"kind", "name", "ref"} with an http(s) ref; repeatable.',
|
|
320
|
+
help='JSON object {"kind", "name", "ref"} with an http(s) ref; a "file" may omit ref; repeatable.',
|
|
315
321
|
)
|
|
316
322
|
@click.option("--body", default="", help="The full result text.")
|
|
317
323
|
def report(task_id, result_status, summary, question, audience, artifact, body):
|
|
@@ -59,7 +59,7 @@ CONTRACT_VERSION_FILENAME = "CONTRACT_VERSION"
|
|
|
59
59
|
|
|
60
60
|
#: The contract version this CLI implements. Only the MAJOR component is a
|
|
61
61
|
#: compatibility question — see ``check_contract_compatibility``.
|
|
62
|
-
SUPPORTED_CONTRACT_VERSION = "1.
|
|
62
|
+
SUPPORTED_CONTRACT_VERSION = "1.6.0"
|
|
63
63
|
|
|
64
64
|
|
|
65
65
|
# ── Offline fallbacks ───────────────────────────────────────────────────────
|
|
@@ -258,6 +258,16 @@ def test_valid_artifact_passes_through(runner, platform):
|
|
|
258
258
|
assert platform.calls_to("PUT", "tasks/task/delegation-result")[0]["json_body"]["artifacts"] == [artifact]
|
|
259
259
|
|
|
260
260
|
|
|
261
|
+
def test_file_artifact_without_ref_passes_through(runner, platform):
|
|
262
|
+
"""The protocol's name-only file artifact: a file the executor could not
|
|
263
|
+
upload is named, not refused — a link still needs its http(s) ref."""
|
|
264
|
+
platform.routes[("PUT", "tasks/task/delegation-result")] = (200, {"id": "result"})
|
|
265
|
+
artifact = {"kind": "file", "name": "out/report.pdf"}
|
|
266
|
+
result = runner.invoke(cli, ["delegation", "report", "task", "--status", "done", "--summary", "S", "--artifact", json.dumps(artifact)])
|
|
267
|
+
assert result.exit_code == 0, result.output
|
|
268
|
+
assert platform.calls_to("PUT", "tasks/task/delegation-result")[0]["json_body"]["artifacts"] == [artifact]
|
|
269
|
+
|
|
270
|
+
|
|
261
271
|
# ─── cloud report (no TASK_ID) ──────────────────────────────────────────────
|
|
262
272
|
|
|
263
273
|
|
|
@@ -1190,7 +1190,7 @@ def test_a_same_major_contract_passes_silently(
|
|
|
1190
1190
|
|
|
1191
1191
|
result = runner.invoke(cli, ["agent", "import", str(src), "--yes"])
|
|
1192
1192
|
assert result.exit_code == 0, result.output
|
|
1193
|
-
assert "contract 1.5.2 runs on contract 1.
|
|
1193
|
+
assert "contract 1.5.2 runs on contract 1.6.0" in result.output
|
|
1194
1194
|
(entry,) = json.loads((src / "publications.json").read_text())["publications"]
|
|
1195
1195
|
assert entry["contract_version"] == "1.5.2"
|
|
1196
1196
|
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{cinna_cli-0.5.0 → cinna_cli-0.5.1}/docs/features/account_workspace/account_workspace_acceptance.md
RENAMED
|
File without changes
|
{cinna_cli-0.5.0 → cinna_cli-0.5.1}/docs/features/account_workspace/account_workspace_tech.md
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{cinna_cli-0.5.0 → cinna_cli-0.5.1}/docs/features/agent_management/agent_management_acceptance.md
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{cinna_cli-0.5.0 → cinna_cli-0.5.1}/docs/features/agent_schedules/agent_schedules_acceptance.md
RENAMED
|
File without changes
|
|
File without changes
|
{cinna_cli-0.5.0 → cinna_cli-0.5.1}/docs/features/bootstrap_onboarding/bootstrap_onboarding.md
RENAMED
|
File without changes
|
|
File without changes
|
{cinna_cli-0.5.0 → cinna_cli-0.5.1}/docs/features/bootstrap_onboarding/bootstrap_onboarding_tech.md
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{cinna_cli-0.5.0 → cinna_cli-0.5.1}/docs/features/git_versioning/git_versioning_acceptance.md
RENAMED
|
File without changes
|
|
File without changes
|
{cinna_cli-0.5.0 → cinna_cli-0.5.1}/docs/features/improvement_requests/improvement_requests.md
RENAMED
|
File without changes
|
|
File without changes
|
{cinna_cli-0.5.0 → cinna_cli-0.5.1}/docs/features/improvement_requests/improvement_requests_tech.md
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{cinna_cli-0.5.0 → cinna_cli-0.5.1}/docs/features/local_agent_import/local_agent_import_tech.md
RENAMED
|
File without changes
|
|
File without changes
|
{cinna_cli-0.5.0 → cinna_cli-0.5.1}/docs/features/mcp_integration/mcp_integration_acceptance.md
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|