getcodexy 1.7.2__tar.gz → 1.8.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.
- {getcodexy-1.7.2 → getcodexy-1.8.0}/PKG-INFO +1 -1
- {getcodexy-1.7.2 → getcodexy-1.8.0}/pyproject.toml +1 -1
- {getcodexy-1.7.2 → getcodexy-1.8.0}/src/codexy_runtime_tools/_version_data/uv.lock +1 -1
- {getcodexy-1.7.2 → getcodexy-1.8.0}/src/codexy_runtime_tools/component-manifest.json +8 -8
- {getcodexy-1.7.2 → getcodexy-1.8.0}/src/codexy_runtime_tools/component_core_hooks.py +6 -1
- {getcodexy-1.7.2 → getcodexy-1.8.0}/src/codexy_runtime_tools/component_hook_activation_expected.py +2 -0
- getcodexy-1.8.0/src/codexy_runtime_tools/component_registration_files.py +47 -0
- {getcodexy-1.7.2 → getcodexy-1.8.0}/src/codexy_runtime_tools/component_registration_health.py +32 -43
- {getcodexy-1.7.2 → getcodexy-1.8.0}/uv.lock +1 -1
- {getcodexy-1.7.2 → getcodexy-1.8.0}/README.md +0 -0
- {getcodexy-1.7.2 → getcodexy-1.8.0}/build_backend.py +0 -0
- {getcodexy-1.7.2 → getcodexy-1.8.0}/src/codexy_runtime_tools/__init__.py +0 -0
- {getcodexy-1.7.2 → getcodexy-1.8.0}/src/codexy_runtime_tools/activation_transaction.py +0 -0
- {getcodexy-1.7.2 → getcodexy-1.8.0}/src/codexy_runtime_tools/cache.py +0 -0
- {getcodexy-1.7.2 → getcodexy-1.8.0}/src/codexy_runtime_tools/component_capability_observation.py +0 -0
- {getcodexy-1.7.2 → getcodexy-1.8.0}/src/codexy_runtime_tools/component_capability_probe.py +0 -0
- {getcodexy-1.7.2 → getcodexy-1.8.0}/src/codexy_runtime_tools/component_capability_probe_process.py +0 -0
- {getcodexy-1.7.2 → getcodexy-1.8.0}/src/codexy_runtime_tools/component_cli.py +0 -0
- {getcodexy-1.7.2 → getcodexy-1.8.0}/src/codexy_runtime_tools/component_health.py +0 -0
- {getcodexy-1.7.2 → getcodexy-1.8.0}/src/codexy_runtime_tools/component_health_support.py +0 -0
- {getcodexy-1.7.2 → getcodexy-1.8.0}/src/codexy_runtime_tools/component_hook_activation.py +0 -0
- {getcodexy-1.7.2 → getcodexy-1.8.0}/src/codexy_runtime_tools/component_hook_activation_host.py +0 -0
- {getcodexy-1.7.2 → getcodexy-1.8.0}/src/codexy_runtime_tools/component_hook_activation_validation.py +0 -0
- {getcodexy-1.7.2 → getcodexy-1.8.0}/src/codexy_runtime_tools/component_inspection.py +0 -0
- {getcodexy-1.7.2 → getcodexy-1.8.0}/src/codexy_runtime_tools/component_inspection_host.py +0 -0
- {getcodexy-1.7.2 → getcodexy-1.8.0}/src/codexy_runtime_tools/component_inspection_types.py +0 -0
- {getcodexy-1.7.2 → getcodexy-1.8.0}/src/codexy_runtime_tools/component_integrity.py +0 -0
- {getcodexy-1.7.2 → getcodexy-1.8.0}/src/codexy_runtime_tools/component_interactive_probe.py +0 -0
- {getcodexy-1.7.2 → getcodexy-1.8.0}/src/codexy_runtime_tools/component_inventory_classification.py +0 -0
- {getcodexy-1.7.2 → getcodexy-1.8.0}/src/codexy_runtime_tools/component_inventory_records.py +0 -0
- {getcodexy-1.7.2 → getcodexy-1.8.0}/src/codexy_runtime_tools/component_lifecycle.py +0 -0
- {getcodexy-1.7.2 → getcodexy-1.8.0}/src/codexy_runtime_tools/component_lifecycle_admission.py +0 -0
- {getcodexy-1.7.2 → getcodexy-1.8.0}/src/codexy_runtime_tools/component_lifecycle_finish.py +0 -0
- {getcodexy-1.7.2 → getcodexy-1.8.0}/src/codexy_runtime_tools/component_lifecycle_interlock.py +0 -0
- {getcodexy-1.7.2 → getcodexy-1.8.0}/src/codexy_runtime_tools/component_lifecycle_mcp.py +0 -0
- {getcodexy-1.7.2 → getcodexy-1.8.0}/src/codexy_runtime_tools/component_lifecycle_operation.py +0 -0
- {getcodexy-1.7.2 → getcodexy-1.8.0}/src/codexy_runtime_tools/component_lifecycle_preflight.py +0 -0
- {getcodexy-1.7.2 → getcodexy-1.8.0}/src/codexy_runtime_tools/component_lifecycle_recovery.py +0 -0
- {getcodexy-1.7.2 → getcodexy-1.8.0}/src/codexy_runtime_tools/component_lifecycle_support.py +0 -0
- {getcodexy-1.7.2 → getcodexy-1.8.0}/src/codexy_runtime_tools/component_lifecycle_terminal.py +0 -0
- {getcodexy-1.7.2 → getcodexy-1.8.0}/src/codexy_runtime_tools/component_manifest.py +0 -0
- {getcodexy-1.7.2 → getcodexy-1.8.0}/src/codexy_runtime_tools/component_manifest_dependencies.py +0 -0
- {getcodexy-1.7.2 → getcodexy-1.8.0}/src/codexy_runtime_tools/component_manifest_values.py +0 -0
- {getcodexy-1.7.2 → getcodexy-1.8.0}/src/codexy_runtime_tools/component_mcp_cache.py +0 -0
- {getcodexy-1.7.2 → getcodexy-1.8.0}/src/codexy_runtime_tools/component_mcp_materialization.py +0 -0
- {getcodexy-1.7.2 → getcodexy-1.8.0}/src/codexy_runtime_tools/component_mcp_probe.py +0 -0
- {getcodexy-1.7.2 → getcodexy-1.8.0}/src/codexy_runtime_tools/component_observed_inventory.py +0 -0
- {getcodexy-1.7.2 → getcodexy-1.8.0}/src/codexy_runtime_tools/component_resolver.py +0 -0
- {getcodexy-1.7.2 → getcodexy-1.8.0}/src/codexy_runtime_tools/component_transaction_durability.py +0 -0
- {getcodexy-1.7.2 → getcodexy-1.8.0}/src/codexy_runtime_tools/component_transaction_identity.py +0 -0
- {getcodexy-1.7.2 → getcodexy-1.8.0}/src/codexy_runtime_tools/component_transaction_receipts.py +0 -0
- {getcodexy-1.7.2 → getcodexy-1.8.0}/src/codexy_runtime_tools/component_transaction_snapshot.py +0 -0
- {getcodexy-1.7.2 → getcodexy-1.8.0}/src/codexy_runtime_tools/component_transaction_state.py +0 -0
- {getcodexy-1.7.2 → getcodexy-1.8.0}/src/codexy_runtime_tools/component_transition_journal.py +0 -0
- {getcodexy-1.7.2 → getcodexy-1.8.0}/src/codexy_runtime_tools/component_transition_model.py +0 -0
- {getcodexy-1.7.2 → getcodexy-1.8.0}/src/codexy_runtime_tools/component_transition_receipt.py +0 -0
- {getcodexy-1.7.2 → getcodexy-1.8.0}/src/codexy_runtime_tools/component_transition_rejections.py +0 -0
- {getcodexy-1.7.2 → getcodexy-1.8.0}/src/codexy_runtime_tools/component_watcher_probe.py +0 -0
- {getcodexy-1.7.2 → getcodexy-1.8.0}/src/codexy_runtime_tools/contract.py +0 -0
- {getcodexy-1.7.2 → getcodexy-1.8.0}/src/codexy_runtime_tools/github_checks.py +0 -0
- {getcodexy-1.7.2 → getcodexy-1.8.0}/src/codexy_runtime_tools/github_pre_session.py +0 -0
- {getcodexy-1.7.2 → getcodexy-1.8.0}/src/codexy_runtime_tools/identity.py +0 -0
- {getcodexy-1.7.2 → getcodexy-1.8.0}/src/codexy_runtime_tools/installer.py +0 -0
- {getcodexy-1.7.2 → getcodexy-1.8.0}/src/codexy_runtime_tools/local_marketplace.py +0 -0
- {getcodexy-1.7.2 → getcodexy-1.8.0}/src/codexy_runtime_tools/marketplace_identity.py +0 -0
- {getcodexy-1.7.2 → getcodexy-1.8.0}/src/codexy_runtime_tools/marketplace_repin.py +0 -0
- {getcodexy-1.7.2 → getcodexy-1.8.0}/src/codexy_runtime_tools/mcp_bootstrap.py +0 -0
- {getcodexy-1.7.2 → getcodexy-1.8.0}/src/codexy_runtime_tools/monolith_baseline.py +0 -0
- {getcodexy-1.7.2 → getcodexy-1.8.0}/src/codexy_runtime_tools/monolith_classifier.py +0 -0
- {getcodexy-1.7.2 → getcodexy-1.8.0}/src/codexy_runtime_tools/monolith_migration.py +0 -0
- {getcodexy-1.7.2 → getcodexy-1.8.0}/src/codexy_runtime_tools/monolith_migration_host.py +0 -0
- {getcodexy-1.7.2 → getcodexy-1.8.0}/src/codexy_runtime_tools/monolith_migration_plan.py +0 -0
- {getcodexy-1.7.2 → getcodexy-1.8.0}/src/codexy_runtime_tools/monolith_migration_state.py +0 -0
- {getcodexy-1.7.2 → getcodexy-1.8.0}/src/codexy_runtime_tools/package.py +0 -0
- {getcodexy-1.7.2 → getcodexy-1.8.0}/src/codexy_runtime_tools/package_archive.py +0 -0
- {getcodexy-1.7.2 → getcodexy-1.8.0}/src/codexy_runtime_tools/plugin_resolution.py +0 -0
- {getcodexy-1.7.2 → getcodexy-1.8.0}/src/codexy_runtime_tools/pre_session.py +0 -0
- {getcodexy-1.7.2 → getcodexy-1.8.0}/src/codexy_runtime_tools/release_contract_validation.py +0 -0
- {getcodexy-1.7.2 → getcodexy-1.8.0}/src/codexy_runtime_tools/release_provenance.py +0 -0
- {getcodexy-1.7.2 → getcodexy-1.8.0}/src/codexy_runtime_tools/release_watcher_contract.py +0 -0
- {getcodexy-1.7.2 → getcodexy-1.8.0}/src/codexy_runtime_tools/runtime.py +0 -0
- {getcodexy-1.7.2 → getcodexy-1.8.0}/src/codexy_runtime_tools/runtime_configuration.py +0 -0
- {getcodexy-1.7.2 → getcodexy-1.8.0}/src/codexy_runtime_tools/source.py +0 -0
- {getcodexy-1.7.2 → getcodexy-1.8.0}/src/codexy_runtime_tools/title_policy.py +0 -0
- {getcodexy-1.7.2 → getcodexy-1.8.0}/src/codexy_runtime_tools/updater.py +0 -0
- {getcodexy-1.7.2 → getcodexy-1.8.0}/src/codexy_runtime_tools/version_lock.py +0 -0
|
@@ -5,7 +5,7 @@ backend-path = ["."]
|
|
|
5
5
|
|
|
6
6
|
[project]
|
|
7
7
|
name = "getcodexy"
|
|
8
|
-
version = "1.
|
|
8
|
+
version = "1.8.0"
|
|
9
9
|
description = "A Codex harness for coordinating agents through planning, implementation, verification, and review."
|
|
10
10
|
readme = { file = "README.md", content-type = "text/markdown" }
|
|
11
11
|
requires-python = ">=3.10"
|
|
@@ -29,7 +29,7 @@
|
|
|
29
29
|
{
|
|
30
30
|
"id": "core",
|
|
31
31
|
"plugin": "codexy",
|
|
32
|
-
"version": "1.
|
|
32
|
+
"version": "1.8.0",
|
|
33
33
|
"dependencies": [],
|
|
34
34
|
"asset": {
|
|
35
35
|
"pluginId": "codexy@codexy",
|
|
@@ -50,7 +50,7 @@
|
|
|
50
50
|
{
|
|
51
51
|
"id": "github",
|
|
52
52
|
"plugin": "codexy-github",
|
|
53
|
-
"version": "1.
|
|
53
|
+
"version": "1.8.0",
|
|
54
54
|
"dependencies": [
|
|
55
55
|
"core"
|
|
56
56
|
],
|
|
@@ -66,7 +66,7 @@
|
|
|
66
66
|
{
|
|
67
67
|
"id": "devtools",
|
|
68
68
|
"plugin": "codexy-devtools",
|
|
69
|
-
"version": "1.
|
|
69
|
+
"version": "1.8.0",
|
|
70
70
|
"dependencies": [
|
|
71
71
|
"core"
|
|
72
72
|
],
|
|
@@ -84,27 +84,27 @@
|
|
|
84
84
|
"compatibleCombinations": [
|
|
85
85
|
{
|
|
86
86
|
"components": [],
|
|
87
|
-
"version": "1.
|
|
87
|
+
"version": "1.8.0"
|
|
88
88
|
},
|
|
89
89
|
{
|
|
90
90
|
"components": [
|
|
91
91
|
"core"
|
|
92
92
|
],
|
|
93
|
-
"version": "1.
|
|
93
|
+
"version": "1.8.0"
|
|
94
94
|
},
|
|
95
95
|
{
|
|
96
96
|
"components": [
|
|
97
97
|
"core",
|
|
98
98
|
"github"
|
|
99
99
|
],
|
|
100
|
-
"version": "1.
|
|
100
|
+
"version": "1.8.0"
|
|
101
101
|
},
|
|
102
102
|
{
|
|
103
103
|
"components": [
|
|
104
104
|
"core",
|
|
105
105
|
"devtools"
|
|
106
106
|
],
|
|
107
|
-
"version": "1.
|
|
107
|
+
"version": "1.8.0"
|
|
108
108
|
},
|
|
109
109
|
{
|
|
110
110
|
"components": [
|
|
@@ -112,7 +112,7 @@
|
|
|
112
112
|
"github",
|
|
113
113
|
"devtools"
|
|
114
114
|
],
|
|
115
|
-
"version": "1.
|
|
115
|
+
"version": "1.8.0"
|
|
116
116
|
}
|
|
117
117
|
]
|
|
118
118
|
}
|
|
@@ -7,9 +7,11 @@ COMMAND_HOOKS = (
|
|
|
7
7
|
(_TOOL_PREFIX + "create_thread$", "codexy-child-thread-creation"),
|
|
8
8
|
(r"^(?:(?:agents|multi_agent_v1)__)?spawn_agent$", "codexy-subagent-ownership"),
|
|
9
9
|
)
|
|
10
|
+
WATCHER_WAIT_HOOK = (r"^(?:mcp__[^ ]+__)?watcher_wait$", "codexy-watcher-interrupt")
|
|
11
|
+
LIFECYCLE_HOOKS = (WATCHER_WAIT_HOOK,)
|
|
10
12
|
LAUNCHERS = tuple(
|
|
11
13
|
f"hooks/{stem}.{extension}"
|
|
12
|
-
for _, stem in COMMAND_HOOKS
|
|
14
|
+
for _, stem in (*COMMAND_HOOKS, *LIFECYCLE_HOOKS)
|
|
13
15
|
for extension in ("sh", "cmd")
|
|
14
16
|
)
|
|
15
17
|
DEPENDENCIES = (
|
|
@@ -24,4 +26,7 @@ DEPENDENCIES = (
|
|
|
24
26
|
"hooks/codexy_policy/envelope.py",
|
|
25
27
|
"hooks/codexy_policy/timing.py",
|
|
26
28
|
"hooks/codexy_policy/windows_timing.py",
|
|
29
|
+
"hooks/codexy-watcher-interrupt.sh",
|
|
30
|
+
"hooks/codexy-watcher-interrupt.cmd",
|
|
31
|
+
"hooks/codexy_watcher_interrupt.py",
|
|
27
32
|
)
|
{getcodexy-1.7.2 → getcodexy-1.8.0}/src/codexy_runtime_tools/component_hook_activation_expected.py
RENAMED
|
@@ -18,6 +18,7 @@ _EVENT_LABELS = {
|
|
|
18
18
|
"UserPromptSubmit": "userPromptSubmit",
|
|
19
19
|
"SessionStart": "sessionStart",
|
|
20
20
|
"Stop": "stop",
|
|
21
|
+
"Interrupt": "interrupt",
|
|
21
22
|
}
|
|
22
23
|
_EVENT_KEYS = {
|
|
23
24
|
"PreToolUse": "pre_tool_use",
|
|
@@ -25,6 +26,7 @@ _EVENT_KEYS = {
|
|
|
25
26
|
"UserPromptSubmit": "user_prompt_submit",
|
|
26
27
|
"SessionStart": "session_start",
|
|
27
28
|
"Stop": "stop",
|
|
29
|
+
"Interrupt": "interrupt",
|
|
28
30
|
}
|
|
29
31
|
|
|
30
32
|
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
"""Bounded file checks used by component registration health."""
|
|
2
|
+
|
|
3
|
+
from __future__ import annotations
|
|
4
|
+
|
|
5
|
+
import os
|
|
6
|
+
import shutil
|
|
7
|
+
from pathlib import Path
|
|
8
|
+
|
|
9
|
+
from .component_core_hooks import DEPENDENCIES as CORE_HOOK_DEPENDENCIES
|
|
10
|
+
from .component_integrity import MAX_COMPONENT_BYTES, _read_regular, valid_agent_toml
|
|
11
|
+
from .component_manifest import load_component_manifest
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
def _text(path: Path, root: Path) -> str:
|
|
15
|
+
return _read_regular(root, path.relative_to(root), MAX_COMPONENT_BYTES).decode()
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
def _regular(path: Path, root: Path, needle: str = "") -> bool:
|
|
19
|
+
contents = _read_regular(root, path.relative_to(root), MAX_COMPONENT_BYTES)
|
|
20
|
+
return bool(contents) and (not needle or valid_agent_toml(contents.decode(), path))
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
def _launcher(path: Path, root: Path) -> bool:
|
|
24
|
+
contents = _text(path, root) if _regular(path, root) else ""
|
|
25
|
+
if path.suffix == ".cmd":
|
|
26
|
+
return contents.lower().startswith("@echo off")
|
|
27
|
+
command = contents.splitlines()[0][2:].split() if contents.startswith("#!") else []
|
|
28
|
+
return (
|
|
29
|
+
bool(command)
|
|
30
|
+
and _executable(path, root)
|
|
31
|
+
and (os.name == "nt" or shutil.which(command[-1]) is not None)
|
|
32
|
+
)
|
|
33
|
+
|
|
34
|
+
|
|
35
|
+
def _skill(plugin: Path, component: str) -> bool:
|
|
36
|
+
required = load_component_manifest().component(component).asset.required_paths
|
|
37
|
+
if component == "core":
|
|
38
|
+
required += CORE_HOOK_DEPENDENCIES
|
|
39
|
+
name = "wiki" if component == "core" else "git-workflow"
|
|
40
|
+
contents = _text(plugin / f"skills/{name}/SKILL.md", plugin)
|
|
41
|
+
return all(_regular(plugin / path, plugin) for path in required) and (
|
|
42
|
+
contents.startswith(f"---\nname: {name}\n") and "\n---\n" in contents
|
|
43
|
+
)
|
|
44
|
+
|
|
45
|
+
|
|
46
|
+
def _executable(path: Path, root: Path) -> bool:
|
|
47
|
+
return _regular(path, root) and (os.name == "nt" or os.access(path, os.X_OK))
|
{getcodexy-1.7.2 → getcodexy-1.8.0}/src/codexy_runtime_tools/component_registration_health.py
RENAMED
|
@@ -3,21 +3,20 @@
|
|
|
3
3
|
from __future__ import annotations
|
|
4
4
|
|
|
5
5
|
import json
|
|
6
|
-
import os
|
|
7
|
-
import shutil
|
|
8
6
|
from pathlib import Path
|
|
9
7
|
|
|
10
8
|
from .component_core_hooks import (
|
|
11
9
|
COMMAND_HOOKS as _CORE_COMMAND_HOOKS,
|
|
12
10
|
DEPENDENCIES as CORE_HOOK_DEPENDENCIES,
|
|
11
|
+
LIFECYCLE_HOOKS as _CORE_LIFECYCLE_HOOKS,
|
|
13
12
|
LAUNCHERS as CORE_HOOK_LAUNCHERS,
|
|
14
13
|
)
|
|
15
|
-
from .component_integrity import MAX_COMPONENT_BYTES, _read_regular, valid_agent_toml
|
|
16
14
|
from .component_mcp_materialization import (
|
|
17
15
|
mcp_configuration,
|
|
18
16
|
valid_component_mcp,
|
|
19
17
|
)
|
|
20
18
|
from .component_manifest import load_component_manifest
|
|
19
|
+
from .component_registration_files import _launcher, _regular, _skill, _text
|
|
21
20
|
|
|
22
21
|
CATALOGS = {
|
|
23
22
|
"core": """# Codexy packaged-agent discovery/registration contract. Validators and the
|
|
@@ -72,6 +71,19 @@ def _command_hook(matcher: str, launcher_stem: str, event: str) -> dict[str, obj
|
|
|
72
71
|
}
|
|
73
72
|
|
|
74
73
|
|
|
74
|
+
def _lifecycle_hook(launcher_stem: str, event: str) -> dict[str, object]:
|
|
75
|
+
return {
|
|
76
|
+
"hooks": [
|
|
77
|
+
{
|
|
78
|
+
"type": "command",
|
|
79
|
+
"command": f'"${{PLUGIN_ROOT}}/hooks/{launcher_stem}.sh" {event}',
|
|
80
|
+
"commandWindows": f'"${{PLUGIN_ROOT}}/hooks/{launcher_stem}.cmd" {event}',
|
|
81
|
+
"timeout": 3,
|
|
82
|
+
}
|
|
83
|
+
]
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
|
|
75
87
|
def _bash_hooks(event: str) -> list[dict[str, object]]:
|
|
76
88
|
return [_command_hook("^Bash$", "codexy-destructive-command", event)]
|
|
77
89
|
|
|
@@ -115,11 +127,24 @@ def _title_hook(matcher: str, kind: str, event: str) -> dict[str, object]:
|
|
|
115
127
|
HOOKS = {
|
|
116
128
|
"core": {
|
|
117
129
|
"hooks": {
|
|
118
|
-
|
|
119
|
-
_command_hook(matcher, launcher_stem,
|
|
130
|
+
"PermissionRequest": [
|
|
131
|
+
_command_hook(matcher, launcher_stem, "PermissionRequest")
|
|
120
132
|
for matcher, launcher_stem in _CORE_COMMAND_HOOKS
|
|
121
|
-
]
|
|
122
|
-
|
|
133
|
+
],
|
|
134
|
+
"PreToolUse": [
|
|
135
|
+
*[
|
|
136
|
+
_command_hook(matcher, launcher_stem, "PreToolUse")
|
|
137
|
+
for matcher, launcher_stem in _CORE_COMMAND_HOOKS
|
|
138
|
+
],
|
|
139
|
+
*[
|
|
140
|
+
_command_hook(matcher, launcher_stem, "PreToolUse")
|
|
141
|
+
for matcher, launcher_stem in _CORE_LIFECYCLE_HOOKS
|
|
142
|
+
],
|
|
143
|
+
],
|
|
144
|
+
"Interrupt": [
|
|
145
|
+
_lifecycle_hook(launcher_stem, "Interrupt")
|
|
146
|
+
for _, launcher_stem in _CORE_LIFECYCLE_HOOKS
|
|
147
|
+
],
|
|
123
148
|
}
|
|
124
149
|
},
|
|
125
150
|
"github": {
|
|
@@ -187,39 +212,3 @@ def valid_registration(plugin: Path, component: str) -> bool:
|
|
|
187
212
|
)
|
|
188
213
|
except (KeyError, OSError, UnicodeDecodeError, SyntaxError, ValueError):
|
|
189
214
|
return False
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
def _text(path: Path, root: Path) -> str:
|
|
193
|
-
return _read_regular(root, path.relative_to(root), MAX_COMPONENT_BYTES).decode()
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
def _regular(path: Path, root: Path, needle: str = "") -> bool:
|
|
197
|
-
contents = _read_regular(root, path.relative_to(root), MAX_COMPONENT_BYTES)
|
|
198
|
-
return bool(contents) and (not needle or valid_agent_toml(contents.decode(), path))
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
def _launcher(path: Path, root: Path) -> bool:
|
|
202
|
-
contents = _text(path, root) if _regular(path, root) else ""
|
|
203
|
-
if path.suffix == ".cmd":
|
|
204
|
-
return contents.lower().startswith("@echo off")
|
|
205
|
-
command = contents.splitlines()[0][2:].split() if contents.startswith("#!") else []
|
|
206
|
-
return (
|
|
207
|
-
bool(command)
|
|
208
|
-
and _executable(path, root)
|
|
209
|
-
and (os.name == "nt" or shutil.which(command[-1]) is not None)
|
|
210
|
-
)
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
def _skill(plugin: Path, component: str) -> bool:
|
|
214
|
-
required = load_component_manifest().component(component).asset.required_paths
|
|
215
|
-
if component == "core":
|
|
216
|
-
required += CORE_HOOK_DEPENDENCIES
|
|
217
|
-
name = "wiki" if component == "core" else "git-workflow"
|
|
218
|
-
contents = _text(plugin / f"skills/{name}/SKILL.md", plugin)
|
|
219
|
-
return all(_regular(plugin / path, plugin) for path in required) and (
|
|
220
|
-
contents.startswith(f"---\nname: {name}\n") and "\n---\n" in contents
|
|
221
|
-
)
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
def _executable(path: Path, root: Path) -> bool:
|
|
225
|
-
return _regular(path, root) and (os.name == "nt" or os.access(path, os.X_OK))
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{getcodexy-1.7.2 → getcodexy-1.8.0}/src/codexy_runtime_tools/component_capability_observation.py
RENAMED
|
File without changes
|
|
File without changes
|
{getcodexy-1.7.2 → getcodexy-1.8.0}/src/codexy_runtime_tools/component_capability_probe_process.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{getcodexy-1.7.2 → getcodexy-1.8.0}/src/codexy_runtime_tools/component_hook_activation_host.py
RENAMED
|
File without changes
|
{getcodexy-1.7.2 → getcodexy-1.8.0}/src/codexy_runtime_tools/component_hook_activation_validation.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{getcodexy-1.7.2 → getcodexy-1.8.0}/src/codexy_runtime_tools/component_inventory_classification.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{getcodexy-1.7.2 → getcodexy-1.8.0}/src/codexy_runtime_tools/component_lifecycle_admission.py
RENAMED
|
File without changes
|
|
File without changes
|
{getcodexy-1.7.2 → getcodexy-1.8.0}/src/codexy_runtime_tools/component_lifecycle_interlock.py
RENAMED
|
File without changes
|
|
File without changes
|
{getcodexy-1.7.2 → getcodexy-1.8.0}/src/codexy_runtime_tools/component_lifecycle_operation.py
RENAMED
|
File without changes
|
{getcodexy-1.7.2 → getcodexy-1.8.0}/src/codexy_runtime_tools/component_lifecycle_preflight.py
RENAMED
|
File without changes
|
{getcodexy-1.7.2 → getcodexy-1.8.0}/src/codexy_runtime_tools/component_lifecycle_recovery.py
RENAMED
|
File without changes
|
|
File without changes
|
{getcodexy-1.7.2 → getcodexy-1.8.0}/src/codexy_runtime_tools/component_lifecycle_terminal.py
RENAMED
|
File without changes
|
|
File without changes
|
{getcodexy-1.7.2 → getcodexy-1.8.0}/src/codexy_runtime_tools/component_manifest_dependencies.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{getcodexy-1.7.2 → getcodexy-1.8.0}/src/codexy_runtime_tools/component_mcp_materialization.py
RENAMED
|
File without changes
|
|
File without changes
|
{getcodexy-1.7.2 → getcodexy-1.8.0}/src/codexy_runtime_tools/component_observed_inventory.py
RENAMED
|
File without changes
|
|
File without changes
|
{getcodexy-1.7.2 → getcodexy-1.8.0}/src/codexy_runtime_tools/component_transaction_durability.py
RENAMED
|
File without changes
|
{getcodexy-1.7.2 → getcodexy-1.8.0}/src/codexy_runtime_tools/component_transaction_identity.py
RENAMED
|
File without changes
|
{getcodexy-1.7.2 → getcodexy-1.8.0}/src/codexy_runtime_tools/component_transaction_receipts.py
RENAMED
|
File without changes
|
{getcodexy-1.7.2 → getcodexy-1.8.0}/src/codexy_runtime_tools/component_transaction_snapshot.py
RENAMED
|
File without changes
|
|
File without changes
|
{getcodexy-1.7.2 → getcodexy-1.8.0}/src/codexy_runtime_tools/component_transition_journal.py
RENAMED
|
File without changes
|
|
File without changes
|
{getcodexy-1.7.2 → getcodexy-1.8.0}/src/codexy_runtime_tools/component_transition_receipt.py
RENAMED
|
File without changes
|
{getcodexy-1.7.2 → getcodexy-1.8.0}/src/codexy_runtime_tools/component_transition_rejections.py
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
|