pawly 0.1.0__py3-none-any.whl

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 (206) hide show
  1. pawly/__init__.py +154 -0
  2. pawly/__pycache__/__init__.cpython-311.pyc +0 -0
  3. pawly/__pycache__/__init__.cpython-313.pyc +0 -0
  4. pawly/__pycache__/action_selection.cpython-311.pyc +0 -0
  5. pawly/__pycache__/action_selection.cpython-313.pyc +0 -0
  6. pawly/__pycache__/api.cpython-311.pyc +0 -0
  7. pawly/__pycache__/api.cpython-313.pyc +0 -0
  8. pawly/__pycache__/contracts.cpython-311.pyc +0 -0
  9. pawly/__pycache__/contracts.cpython-313.pyc +0 -0
  10. pawly/__pycache__/decision_engine.cpython-311.pyc +0 -0
  11. pawly/__pycache__/decision_engine.cpython-313.pyc +0 -0
  12. pawly/__pycache__/pawprint_loader.cpython-311.pyc +0 -0
  13. pawly/__pycache__/pawprint_loader.cpython-313.pyc +0 -0
  14. pawly/__pycache__/protected_oss.cpython-311.pyc +0 -0
  15. pawly/__pycache__/protected_oss.cpython-313.pyc +0 -0
  16. pawly/__pycache__/runtime.cpython-311.pyc +0 -0
  17. pawly/__pycache__/runtime.cpython-313.pyc +0 -0
  18. pawly/__pycache__/runtime_bootstrap.cpython-311.pyc +0 -0
  19. pawly/__pycache__/runtime_bootstrap.cpython-313.pyc +0 -0
  20. pawly/__pycache__/runtime_decision.cpython-311.pyc +0 -0
  21. pawly/__pycache__/runtime_decision.cpython-313.pyc +0 -0
  22. pawly/__pycache__/runtime_execute.cpython-311.pyc +0 -0
  23. pawly/__pycache__/runtime_execute.cpython-313.pyc +0 -0
  24. pawly/__pycache__/runtime_flow.cpython-311.pyc +0 -0
  25. pawly/__pycache__/runtime_flow.cpython-313.pyc +0 -0
  26. pawly/__pycache__/runtime_ids.cpython-311.pyc +0 -0
  27. pawly/__pycache__/runtime_ids.cpython-313.pyc +0 -0
  28. pawly/__pycache__/runtime_report.cpython-311.pyc +0 -0
  29. pawly/__pycache__/runtime_report.cpython-313.pyc +0 -0
  30. pawly/__pycache__/runtime_request.cpython-311.pyc +0 -0
  31. pawly/__pycache__/runtime_request.cpython-313.pyc +0 -0
  32. pawly/__pycache__/runtime_result.cpython-311.pyc +0 -0
  33. pawly/__pycache__/runtime_result.cpython-313.pyc +0 -0
  34. pawly/__pycache__/runtime_scoring.cpython-311.pyc +0 -0
  35. pawly/__pycache__/runtime_scoring.cpython-313.pyc +0 -0
  36. pawly/__pycache__/shield.cpython-311.pyc +0 -0
  37. pawly/__pycache__/shield.cpython-313.pyc +0 -0
  38. pawly/__pycache__/skill_registry.cpython-311.pyc +0 -0
  39. pawly/__pycache__/skill_registry.cpython-313.pyc +0 -0
  40. pawly/__pycache__/task_request.cpython-311.pyc +0 -0
  41. pawly/__pycache__/task_request.cpython-313.pyc +0 -0
  42. pawly/__pycache__/types.cpython-311.pyc +0 -0
  43. pawly/__pycache__/types.cpython-313.pyc +0 -0
  44. pawly/action_selection.py +64 -0
  45. pawly/adapters/__init__.py +25 -0
  46. pawly/adapters/__pycache__/__init__.cpython-311.pyc +0 -0
  47. pawly/adapters/__pycache__/__init__.cpython-313.pyc +0 -0
  48. pawly/adapters/__pycache__/claude_skills.cpython-311.pyc +0 -0
  49. pawly/adapters/__pycache__/claude_skills.cpython-313.pyc +0 -0
  50. pawly/adapters/__pycache__/openai_agents.cpython-311.pyc +0 -0
  51. pawly/adapters/__pycache__/openai_agents.cpython-313.pyc +0 -0
  52. pawly/adapters/claude_skills.py +210 -0
  53. pawly/adapters/openai_agents.py +208 -0
  54. pawly/api.py +57 -0
  55. pawly/approval/__init__.py +18 -0
  56. pawly/approval/__pycache__/__init__.cpython-311.pyc +0 -0
  57. pawly/approval/__pycache__/__init__.cpython-313.pyc +0 -0
  58. pawly/approval/__pycache__/callback.cpython-311.pyc +0 -0
  59. pawly/approval/__pycache__/callback.cpython-313.pyc +0 -0
  60. pawly/approval/__pycache__/handler.cpython-311.pyc +0 -0
  61. pawly/approval/__pycache__/handler.cpython-313.pyc +0 -0
  62. pawly/approval/__pycache__/models.cpython-311.pyc +0 -0
  63. pawly/approval/__pycache__/models.cpython-313.pyc +0 -0
  64. pawly/approval/__pycache__/queue.cpython-311.pyc +0 -0
  65. pawly/approval/__pycache__/queue.cpython-313.pyc +0 -0
  66. pawly/approval/__pycache__/router.cpython-311.pyc +0 -0
  67. pawly/approval/__pycache__/router.cpython-313.pyc +0 -0
  68. pawly/approval/__pycache__/timeout.cpython-311.pyc +0 -0
  69. pawly/approval/__pycache__/timeout.cpython-313.pyc +0 -0
  70. pawly/approval/callback.py +16 -0
  71. pawly/approval/handler.py +34 -0
  72. pawly/approval/models.py +119 -0
  73. pawly/approval/queue.py +109 -0
  74. pawly/approval/router.py +66 -0
  75. pawly/approval/timeout.py +18 -0
  76. pawly/audit/__pycache__/diff.cpython-311.pyc +0 -0
  77. pawly/audit/__pycache__/diff.cpython-313.pyc +0 -0
  78. pawly/audit/__pycache__/events.cpython-311.pyc +0 -0
  79. pawly/audit/__pycache__/events.cpython-313.pyc +0 -0
  80. pawly/audit/__pycache__/ledger.cpython-311.pyc +0 -0
  81. pawly/audit/__pycache__/ledger.cpython-313.pyc +0 -0
  82. pawly/audit/__pycache__/replay.cpython-311.pyc +0 -0
  83. pawly/audit/__pycache__/replay.cpython-313.pyc +0 -0
  84. pawly/audit/diff.py +24 -0
  85. pawly/audit/events.py +156 -0
  86. pawly/audit/ledger.py +39 -0
  87. pawly/audit/replay.py +45 -0
  88. pawly/backends/__init__.py +39 -0
  89. pawly/backends/__pycache__/__init__.cpython-311.pyc +0 -0
  90. pawly/backends/__pycache__/__init__.cpython-313.pyc +0 -0
  91. pawly/backends/__pycache__/approval.cpython-311.pyc +0 -0
  92. pawly/backends/__pycache__/approval.cpython-313.pyc +0 -0
  93. pawly/backends/__pycache__/audit.cpython-311.pyc +0 -0
  94. pawly/backends/__pycache__/audit.cpython-313.pyc +0 -0
  95. pawly/backends/__pycache__/reviewer.cpython-311.pyc +0 -0
  96. pawly/backends/__pycache__/reviewer.cpython-313.pyc +0 -0
  97. pawly/backends/__pycache__/risk.cpython-311.pyc +0 -0
  98. pawly/backends/__pycache__/risk.cpython-313.pyc +0 -0
  99. pawly/backends/approval.py +85 -0
  100. pawly/backends/audit.py +189 -0
  101. pawly/backends/reviewer.py +127 -0
  102. pawly/backends/risk.py +71 -0
  103. pawly/budget/__pycache__/checker.cpython-311.pyc +0 -0
  104. pawly/budget/__pycache__/checker.cpython-313.pyc +0 -0
  105. pawly/budget/__pycache__/state.cpython-311.pyc +0 -0
  106. pawly/budget/__pycache__/state.cpython-313.pyc +0 -0
  107. pawly/budget/checker.py +37 -0
  108. pawly/budget/state.py +15 -0
  109. pawly/cli.py +44 -0
  110. pawly/contracts.py +153 -0
  111. pawly/decision_engine.py +6 -0
  112. pawly/escalation/__pycache__/patterns.cpython-311.pyc +0 -0
  113. pawly/escalation/__pycache__/patterns.cpython-313.pyc +0 -0
  114. pawly/escalation/patterns.py +33 -0
  115. pawly/gateway/__init__.py +4 -0
  116. pawly/gateway/__pycache__/__init__.cpython-311.pyc +0 -0
  117. pawly/gateway/__pycache__/__init__.cpython-313.pyc +0 -0
  118. pawly/gateway/__pycache__/adapter_support.cpython-311.pyc +0 -0
  119. pawly/gateway/__pycache__/adapter_support.cpython-313.pyc +0 -0
  120. pawly/gateway/__pycache__/protocol.cpython-311.pyc +0 -0
  121. pawly/gateway/__pycache__/protocol.cpython-313.pyc +0 -0
  122. pawly/gateway/__pycache__/result.cpython-311.pyc +0 -0
  123. pawly/gateway/__pycache__/result.cpython-313.pyc +0 -0
  124. pawly/gateway/__pycache__/wrapper.cpython-311.pyc +0 -0
  125. pawly/gateway/__pycache__/wrapper.cpython-313.pyc +0 -0
  126. pawly/gateway/adapter_support.py +56 -0
  127. pawly/gateway/protocol.py +24 -0
  128. pawly/gateway/result.py +67 -0
  129. pawly/gateway/wrapper.py +273 -0
  130. pawly/loader/__pycache__/schema_loader.cpython-311.pyc +0 -0
  131. pawly/loader/__pycache__/schema_loader.cpython-313.pyc +0 -0
  132. pawly/loader/__pycache__/yaml_loader.cpython-311.pyc +0 -0
  133. pawly/loader/__pycache__/yaml_loader.cpython-313.pyc +0 -0
  134. pawly/loader/schema_loader.py +51 -0
  135. pawly/loader/yaml_loader.py +164 -0
  136. pawly/memory/__pycache__/store.cpython-311.pyc +0 -0
  137. pawly/memory/__pycache__/store.cpython-313.pyc +0 -0
  138. pawly/memory/__pycache__/tiers.cpython-311.pyc +0 -0
  139. pawly/memory/__pycache__/tiers.cpython-313.pyc +0 -0
  140. pawly/memory/store.py +23 -0
  141. pawly/memory/tiers.py +9 -0
  142. pawly/middleware/__init__.py +1 -0
  143. pawly/middleware/__pycache__/__init__.cpython-311.pyc +0 -0
  144. pawly/middleware/__pycache__/__init__.cpython-313.pyc +0 -0
  145. pawly/middleware/__pycache__/hooks.cpython-311.pyc +0 -0
  146. pawly/middleware/__pycache__/hooks.cpython-313.pyc +0 -0
  147. pawly/middleware/hooks.py +20 -0
  148. pawly/pawprint_loader.py +301 -0
  149. pawly/performance/__pycache__/metrics.cpython-311.pyc +0 -0
  150. pawly/performance/__pycache__/metrics.cpython-313.pyc +0 -0
  151. pawly/performance/__pycache__/report.cpython-311.pyc +0 -0
  152. pawly/performance/__pycache__/report.cpython-313.pyc +0 -0
  153. pawly/performance/metrics.py +48 -0
  154. pawly/performance/report.py +44 -0
  155. pawly/policy/__init__.py +15 -0
  156. pawly/policy/__pycache__/__init__.cpython-311.pyc +0 -0
  157. pawly/policy/__pycache__/__init__.cpython-313.pyc +0 -0
  158. pawly/policy/__pycache__/base.cpython-311.pyc +0 -0
  159. pawly/policy/__pycache__/base.cpython-313.pyc +0 -0
  160. pawly/policy/__pycache__/heuristic.cpython-311.pyc +0 -0
  161. pawly/policy/__pycache__/heuristic.cpython-313.pyc +0 -0
  162. pawly/policy/__pycache__/resolve.cpython-311.pyc +0 -0
  163. pawly/policy/__pycache__/resolve.cpython-313.pyc +0 -0
  164. pawly/policy/base.py +84 -0
  165. pawly/policy/cloud.py +18 -0
  166. pawly/policy/heuristic.py +141 -0
  167. pawly/policy/resolve.py +60 -0
  168. pawly/policy_engine/__pycache__/decision.cpython-311.pyc +0 -0
  169. pawly/policy_engine/__pycache__/decision.cpython-313.pyc +0 -0
  170. pawly/policy_engine/__pycache__/engine.cpython-311.pyc +0 -0
  171. pawly/policy_engine/__pycache__/engine.cpython-313.pyc +0 -0
  172. pawly/policy_engine/__pycache__/models.cpython-311.pyc +0 -0
  173. pawly/policy_engine/__pycache__/models.cpython-313.pyc +0 -0
  174. pawly/policy_engine/__pycache__/runtime_overlay.cpython-311.pyc +0 -0
  175. pawly/policy_engine/__pycache__/runtime_overlay.cpython-313.pyc +0 -0
  176. pawly/policy_engine/decision.py +40 -0
  177. pawly/policy_engine/engine.py +152 -0
  178. pawly/policy_engine/models.py +62 -0
  179. pawly/policy_engine/risk.py +24 -0
  180. pawly/policy_engine/runtime_overlay.py +37 -0
  181. pawly/protected_oss.py +168 -0
  182. pawly/runtime.py +1004 -0
  183. pawly/runtime_bootstrap.py +104 -0
  184. pawly/runtime_decision.py +52 -0
  185. pawly/runtime_execute.py +59 -0
  186. pawly/runtime_flow.py +50 -0
  187. pawly/runtime_ids.py +19 -0
  188. pawly/runtime_report.py +18 -0
  189. pawly/runtime_request.py +23 -0
  190. pawly/runtime_result.py +142 -0
  191. pawly/runtime_scoring.py +25 -0
  192. pawly/schemas/decision.schema.json +38 -0
  193. pawly/schemas/intent.schema.json +33 -0
  194. pawly/schemas/report.schema.json +36 -0
  195. pawly/shield.py +436 -0
  196. pawly/skill_registry.py +31 -0
  197. pawly/task_request.py +27 -0
  198. pawly/types.py +15 -0
  199. pawly/validator/__pycache__/validator.cpython-311.pyc +0 -0
  200. pawly/validator/__pycache__/validator.cpython-313.pyc +0 -0
  201. pawly/validator/validator.py +177 -0
  202. pawly-0.1.0.dist-info/METADATA +7 -0
  203. pawly-0.1.0.dist-info/RECORD +206 -0
  204. pawly-0.1.0.dist-info/WHEEL +4 -0
  205. pawly-0.1.0.dist-info/entry_points.txt +2 -0
  206. pawly-0.1.0.dist-info/top_level.txt +1 -0
@@ -0,0 +1,177 @@
1
+ from __future__ import annotations
2
+
3
+ from dataclasses import dataclass
4
+ import re
5
+ from typing import Any
6
+
7
+ from pawly.loader.schema_loader import load_schema
8
+
9
+
10
+ @dataclass(slots=True)
11
+ class ValidationResult:
12
+ valid: bool
13
+ errors: list[str]
14
+
15
+
16
+ class SchemaValidationError(ValueError):
17
+ pass
18
+
19
+
20
+ class PawprintValidator:
21
+ def __init__(self) -> None:
22
+ self.schemas = {
23
+ "pawprint.schema.json": load_schema("pawprint.schema.json"),
24
+ "intent.schema.json": load_schema("intent.schema.json"),
25
+ "decision.schema.json": load_schema("decision.schema.json"),
26
+ "report.schema.json": load_schema("report.schema.json"),
27
+ }
28
+
29
+ def validate_agent_config(self, config: dict[str, Any]) -> ValidationResult:
30
+ errors = self._validate_with_schema(
31
+ config,
32
+ self.schemas["pawprint.schema.json"],
33
+ "$",
34
+ self.schemas["pawprint.schema.json"],
35
+ )
36
+ errors.extend(self._validate_pawprint_rules(config))
37
+ return ValidationResult(valid=not errors, errors=errors)
38
+
39
+ def validate_report(self, report: dict[str, Any]) -> ValidationResult:
40
+ errors = self._validate_with_schema(report, self.schemas["report.schema.json"], "$", self.schemas["report.schema.json"])
41
+ return ValidationResult(valid=not errors, errors=errors)
42
+
43
+ def validate_intent(self, intent: dict[str, Any]) -> ValidationResult:
44
+ errors = self._validate_with_schema(intent, self.schemas["intent.schema.json"], "$", self.schemas["intent.schema.json"])
45
+ return ValidationResult(valid=not errors, errors=errors)
46
+
47
+ def validate_decision(self, decision: dict[str, Any]) -> ValidationResult:
48
+ errors = self._validate_with_schema(
49
+ decision,
50
+ self.schemas["decision.schema.json"],
51
+ "$",
52
+ self.schemas["decision.schema.json"],
53
+ )
54
+ return ValidationResult(valid=not errors, errors=errors)
55
+
56
+ def _validate_with_schema(self, instance: Any, schema: dict[str, Any], path: str, root_schema: dict[str, Any]) -> list[str]:
57
+ errors: list[str] = []
58
+ if "$ref" in schema:
59
+ resolved, resolved_root = self._resolve_ref(schema["$ref"], root_schema)
60
+ return self._validate_with_schema(instance, resolved, path, resolved_root)
61
+ if "oneOf" in schema:
62
+ variants = []
63
+ for option in schema["oneOf"]:
64
+ option_errors = self._validate_with_schema(instance, option, path, root_schema)
65
+ if not option_errors:
66
+ variants.append(option)
67
+ if len(variants) != 1:
68
+ errors.append(f"{path} must match exactly one schema option")
69
+ return errors
70
+ if "const" in schema and instance != schema["const"]:
71
+ errors.append(f"{path} must equal {schema['const']!r}")
72
+ if "enum" in schema and instance not in schema["enum"]:
73
+ errors.append(f"{path} must be one of {schema['enum']!r}")
74
+ if instance is None:
75
+ return errors
76
+ schema_type = schema.get("type")
77
+ if schema_type == "object":
78
+ if not isinstance(instance, dict):
79
+ return errors + [f"{path} must be an object"]
80
+ required = schema.get("required", [])
81
+ for key in required:
82
+ if key not in instance:
83
+ errors.append(f"{path}.{key} is required")
84
+ properties = schema.get("properties", {})
85
+ pattern_properties = schema.get("patternProperties", {})
86
+ additional_allowed = schema.get("additionalProperties", True)
87
+ for key, value in instance.items():
88
+ if key in properties:
89
+ errors.extend(self._validate_with_schema(value, properties[key], f"{path}.{key}", root_schema))
90
+ continue
91
+ matched_pattern = False
92
+ for pattern, pattern_schema in pattern_properties.items():
93
+ if re.fullmatch(pattern, key):
94
+ errors.extend(self._validate_with_schema(value, pattern_schema, f"{path}.{key}", root_schema))
95
+ matched_pattern = True
96
+ break
97
+ if matched_pattern:
98
+ continue
99
+ if additional_allowed is False:
100
+ errors.append(f"{path}.{key} is not allowed by the Pawprint schema")
101
+ elif isinstance(additional_allowed, dict):
102
+ errors.extend(self._validate_with_schema(value, additional_allowed, f"{path}.{key}", root_schema))
103
+ return errors
104
+ if schema_type == "array":
105
+ if not isinstance(instance, list):
106
+ return errors + [f"{path} must be an array"]
107
+ if len(instance) < schema.get("minItems", 0):
108
+ errors.append(f"{path} must contain at least {schema['minItems']} items")
109
+ item_schema = schema.get("items")
110
+ if item_schema is not None:
111
+ for index, item in enumerate(instance):
112
+ errors.extend(self._validate_with_schema(item, item_schema, f"{path}[{index}]", root_schema))
113
+ return errors
114
+ if schema_type == "string":
115
+ if not isinstance(instance, str):
116
+ return errors + [f"{path} must be a string"]
117
+ if len(instance) < schema.get("minLength", 0):
118
+ errors.append(f"{path} must be at least {schema['minLength']} characters")
119
+ if "pattern" in schema and not re.fullmatch(schema["pattern"], instance):
120
+ errors.append(f"{path} does not match required pattern")
121
+ return errors
122
+ if schema_type == "integer":
123
+ if not isinstance(instance, int) or isinstance(instance, bool):
124
+ return errors + [f"{path} must be an integer"]
125
+ if "minimum" in schema and instance < schema["minimum"]:
126
+ errors.append(f"{path} must be >= {schema['minimum']}")
127
+ if "exclusiveMinimum" in schema and instance <= schema["exclusiveMinimum"]:
128
+ errors.append(f"{path} must be > {schema['exclusiveMinimum']}")
129
+ return errors
130
+ if schema_type == "number":
131
+ if not isinstance(instance, (int, float)) or isinstance(instance, bool):
132
+ return errors + [f"{path} must be a number"]
133
+ if "minimum" in schema and instance < schema["minimum"]:
134
+ errors.append(f"{path} must be >= {schema['minimum']}")
135
+ if "maximum" in schema and instance > schema["maximum"]:
136
+ errors.append(f"{path} must be <= {schema['maximum']}")
137
+ if "exclusiveMinimum" in schema and instance <= schema["exclusiveMinimum"]:
138
+ errors.append(f"{path} must be > {schema['exclusiveMinimum']}")
139
+ return errors
140
+ if schema_type == "boolean":
141
+ if not isinstance(instance, bool):
142
+ errors.append(f"{path} must be a boolean")
143
+ return errors
144
+ return errors
145
+
146
+ def _resolve_ref(self, ref: str, root_schema: dict[str, Any]) -> tuple[dict[str, Any], dict[str, Any]]:
147
+ if ref.startswith("#/"):
148
+ target = root_schema
149
+ for part in ref[2:].split("/"):
150
+ target = target[part]
151
+ return target, root_schema
152
+ if ref.endswith(".json"):
153
+ target_root = self.schemas[ref]
154
+ return target_root, target_root
155
+ raise SchemaValidationError(f"Unsupported schema reference: {ref}")
156
+
157
+ def _validate_pawprint_rules(self, config: dict[str, Any]) -> list[str]:
158
+ errors: list[str] = []
159
+ capabilities = config.get("capabilities")
160
+ metadata = config.get("metadata")
161
+ boundaries = config.get("boundaries")
162
+ if isinstance(metadata, dict):
163
+ if not isinstance(capabilities, list) or not isinstance(boundaries, dict):
164
+ return errors
165
+ capability_set = {
166
+ str(item.get("name", ""))
167
+ for item in capabilities
168
+ if isinstance(item, dict) and str(item.get("name", "")).strip()
169
+ }
170
+ else:
171
+ if not isinstance(capabilities, list) or not isinstance(boundaries, dict):
172
+ return errors
173
+ capability_set = {item for item in capabilities if isinstance(item, str)}
174
+
175
+ if not capability_set:
176
+ return errors
177
+ return errors
@@ -0,0 +1,7 @@
1
+ Metadata-Version: 2.1
2
+ Name: pawly
3
+ Version: 0.1.0
4
+ Summary: Lightweight reference implementation of the Aploy Pawly execution-boundary controller.
5
+ Requires-Python: >=3.10
6
+ License: Apache-2.0
7
+ Requires-Dist: pawly-pawprint>=0.1.0
@@ -0,0 +1,206 @@
1
+ pawly/__init__.py,sha256=LSqAGEQm0D0cYkHS3JTy_8KSn3-joU3vHhArE5mmarI,4182
2
+ pawly/action_selection.py,sha256=NZltY0c_U9cyqXZe0DEXJLISOcssJQxpWh9akbeO1gc,2387
3
+ pawly/api.py,sha256=gpRaWHi8DPpgkEpV_rLhkIkM1rRtDNxjnPPD1YxNoqo,1594
4
+ pawly/cli.py,sha256=N4csILBA4RJmhb9nQ8qxAeGtpmdmzpLpIiRR9CKkbgM,1867
5
+ pawly/contracts.py,sha256=XkGp5jfW_3LPrORQFbjV_a00f5Y54hwjDmpXEX1KAPY,5254
6
+ pawly/decision_engine.py,sha256=ziQGcJIFVVLpcz_dAJ5CP2iPGNuxwU6VVy97GpCQM3E,241
7
+ pawly/pawprint_loader.py,sha256=PgC3l1W1SJ8Q0cqFcCrtLuNQhGeUMiGOSz8-dGAlAaQ,10292
8
+ pawly/protected_oss.py,sha256=GOdJTvm4s6zFmYgxVK3pL7Lhy6PBH87FQ4TT-_OkAvk,6440
9
+ pawly/runtime.py,sha256=jlrUkTRYSZKBL2b9Bo_qJ9aE5FrOyu9szZoSIdXPeQc,38398
10
+ pawly/runtime_bootstrap.py,sha256=KFsBhJIaIi77f01OGou8uHRKU6fu3Sm3Ih2IVWvyyO0,3871
11
+ pawly/runtime_decision.py,sha256=ale5Q-xEt2W1_yuzp2VAqvGAjme5myUd3XaYok4LISA,1563
12
+ pawly/runtime_execute.py,sha256=5aj_RdlvXpnAOKy8RmZaO626G76p4jKI3emyNKOoII4,2196
13
+ pawly/runtime_flow.py,sha256=PNuhhQ0xoF55ALzi0rwOcgU0oOE9nR1-oUUyPLeXy-c,1695
14
+ pawly/runtime_ids.py,sha256=pfTC0_iuxslXosm5PlxcnySs3I_51mgydGFHam1SW4Y,575
15
+ pawly/runtime_report.py,sha256=uWV4Hl7PUTE4KMpXv4NNf7a5Kt2PQJSJ2-44GJhGpxA,584
16
+ pawly/runtime_request.py,sha256=ptvbWOszx7dYcdSg7geIq9wwHc00jqDlP0F4Cy0hk-I,528
17
+ pawly/runtime_result.py,sha256=2dHWUUCy0X9-sj7MaeRvp0hprG01jL32jnBWooSSjQI,4485
18
+ pawly/runtime_scoring.py,sha256=WkSq9vT9rLawNBCZivwAYFKvI3mhWYhbrrhnuu_kyks,570
19
+ pawly/shield.py,sha256=FdZ56JIStVIAgtUIdJP8rlBFNQB3dot1r-d2GDa9C7k,18343
20
+ pawly/skill_registry.py,sha256=XIlvl5i7qp2UFDav1r_EWTBDi21cqyBvsbuMtnmXYAM,999
21
+ pawly/task_request.py,sha256=RnjlD_SqSSG_EgGYss_TzYDt4AIuDvuEVfQBZaHOpkU,761
22
+ pawly/types.py,sha256=BQv20waOwSSWBki3Px6r2mADZGgcXS8-xZDHSRv8XSY,422
23
+ pawly/backends/__init__.py,sha256=NLtIek9LOBZbJFME4wBTd-KNZqc0ZvynyfawGF2VceQ,1101
24
+ pawly/backends/approval.py,sha256=dnE9m0QR8buA40A_gc7EKlEwnD3gjCiwSs7ry6VDABE,3056
25
+ pawly/backends/audit.py,sha256=jPhpo5fFqWbrh15VisqidGjopeFG7px8Rwq-C0SQgIw,6693
26
+ pawly/backends/reviewer.py,sha256=5wBSO8LcvLd1ZgbhJHGBCLNA5Dx96d8lYPdy-lnE5Vs,4000
27
+ pawly/backends/risk.py,sha256=4WyxRfovNfBl4nkYL5qLyZy9Gb4EuMT-UAIOfNtikTs,1808
28
+ pawly/backends/__pycache__/__init__.cpython-311.pyc,sha256=TYcYzIUAVXqcwRZr9BYyJ2OgFeOI0nZUnCy9gLBTQcM,1320
29
+ pawly/backends/__pycache__/__init__.cpython-313.pyc,sha256=BHk7bMXT9svIkkt7cB5w3JB9fJsjC75ctA5TRtC_Mo0,1071
30
+ pawly/backends/__pycache__/approval.cpython-311.pyc,sha256=LijCtMgsliZsVC57Z4ZCBu_gqbqMTq4_r2kJMX-tZeQ,5634
31
+ pawly/backends/__pycache__/approval.cpython-313.pyc,sha256=eP-2r7JcCxkhrXWFEgQ8bWp7AVkNRxWjailDt_faFiE,4935
32
+ pawly/backends/__pycache__/audit.cpython-311.pyc,sha256=tEvb4ghA6aJcoxD9wVRk8VrjK7NdIk2dhCcyZOFFRBQ,12295
33
+ pawly/backends/__pycache__/audit.cpython-313.pyc,sha256=FcxW9ov_cOpky45QulgU4pAKj7_oPbAMJc9EeYkzjhc,10746
34
+ pawly/backends/__pycache__/reviewer.cpython-311.pyc,sha256=6UC2711yZxyU_JG9Imuiuebjf9QoQxTAHnYMUm-0WZc,6553
35
+ pawly/backends/__pycache__/reviewer.cpython-313.pyc,sha256=KzOzKmeELNVg7d6jAI4ZrPPWrkP1ZMYJkJD32A4xlkU,5782
36
+ pawly/backends/__pycache__/risk.cpython-311.pyc,sha256=KnUN6mMP5EquR2NKYWMnaOa8Sui_4e0WJWZ0Ec9BSmA,4185
37
+ pawly/backends/__pycache__/risk.cpython-313.pyc,sha256=4OjQLdIzqgD0OIP7UjS-dSp30C4CSbjwfcfyZrGB0CI,3822
38
+ pawly/policy_engine/decision.py,sha256=01DmJUrwyPjs4bYhSRYfjngjP2-9LUJm8ZLYXNKFiEA,1386
39
+ pawly/policy_engine/engine.py,sha256=9HONu-EuIWQmzKAvMwVifL7n_oJlxoAeYzVq83oD20k,5694
40
+ pawly/policy_engine/models.py,sha256=Xjna5bNncVsotXh6PFEdl_Ig85mhD0lVyHd6v4u7ZH4,2548
41
+ pawly/policy_engine/risk.py,sha256=gpx77GdOe9sUuLrCg5pDcih4WuJHji3pgb6FvLuATgw,632
42
+ pawly/policy_engine/runtime_overlay.py,sha256=CHv_x369Ur9kLxGSsQmzQu5p3w7F6pr4NjMvDlpD6pM,1696
43
+ pawly/policy_engine/__pycache__/decision.cpython-311.pyc,sha256=jv6lcU5QlotgVv-uKqjgiYaesKRlgxxMMVVUaTpa-ek,2335
44
+ pawly/policy_engine/__pycache__/decision.cpython-313.pyc,sha256=nh4Lnv7CjkzNpXxN6tqYC-6hzTZuOEPN5LJJL48KJXs,2227
45
+ pawly/policy_engine/__pycache__/engine.cpython-311.pyc,sha256=AAfoRvVPAtcs-_5Y1toTtDZIU14RnJ-dFh1K6frOVVU,7338
46
+ pawly/policy_engine/__pycache__/engine.cpython-313.pyc,sha256=yue2e9qiL0KzBnW2HJTLOi1y4JM-TuzeF2w2uWQMimQ,6751
47
+ pawly/policy_engine/__pycache__/models.cpython-311.pyc,sha256=GMLWi-J10ud-r0cXBTyMgdjw6qNlLzoAMgllNKdMc1g,4589
48
+ pawly/policy_engine/__pycache__/models.cpython-313.pyc,sha256=YNZyAXDXNyUos1hoZAfZSaRx4sXD_X6xGpKCBk_kI_s,3988
49
+ pawly/policy_engine/__pycache__/runtime_overlay.cpython-311.pyc,sha256=BW5ON-jYFsIQuCx0gdZDDMA3kGxOC51poTUfUhTPYjc,2360
50
+ pawly/policy_engine/__pycache__/runtime_overlay.cpython-313.pyc,sha256=2E845W-YlgtBWb8O7H6TJl8riwIlfqKd30WZAtpbepo,2429
51
+ pawly/memory/store.py,sha256=8VKCiyxkx9s3ACfEzk07tlL6RmBjY5yXNRO27xNm_z0,686
52
+ pawly/memory/tiers.py,sha256=Mz2xCN3xjm5ODgZFwUGDgPiD1thzAih1-baYIG52XRY,187
53
+ pawly/memory/__pycache__/store.cpython-311.pyc,sha256=kgizQyw39BtcJ4S1H_YHCR17f92yE0MVtgbsvc89spM,2030
54
+ pawly/memory/__pycache__/store.cpython-313.pyc,sha256=1ZV7fIkBYvaBVd2RB7_Us0jCrYYCRJjgMS6WJV475rc,1842
55
+ pawly/memory/__pycache__/tiers.cpython-311.pyc,sha256=UKxy9shBCr7tHabqac3zNCJPKWOMkOsshiUmo9hyofQ,667
56
+ pawly/memory/__pycache__/tiers.cpython-313.pyc,sha256=p6O0HDMq_pUDzcFfqyyF8ShlRa08lcebLR5trOwhvUo,631
57
+ pawly/middleware/__init__.py,sha256=vyY-fjQ-lTckY1WrpFEPR4S4tIO91Z0e5vgxvwm-1Fk,70
58
+ pawly/middleware/hooks.py,sha256=DMVkLcI4Ji9XYfR8QZdsAdApqvIvO0h3JycjEGut0k4,475
59
+ pawly/middleware/__pycache__/__init__.cpython-311.pyc,sha256=aD8D7FXBl5iz-FEjBOY54IlMAZSSF6QPRVXhA3RJ0Zc,293
60
+ pawly/middleware/__pycache__/__init__.cpython-313.pyc,sha256=KXsRphub2QvQCmo6TnosrijZIVCktg6DJEObxK6kG7c,282
61
+ pawly/middleware/__pycache__/hooks.cpython-311.pyc,sha256=BYBu54VUgc3eV3ckIQGkvv4txa-ncTYFGIzaBVoraKs,1374
62
+ pawly/middleware/__pycache__/hooks.cpython-313.pyc,sha256=OyQHDv5AbxakswguKPOQp_py2MuAnMelFNjLcTtsX8s,1248
63
+ pawly/__pycache__/__init__.cpython-311.pyc,sha256=g2Y2F5nwGTLIwKvm4IKiazVVjktJc2V2wLJKOcOtoi0,4258
64
+ pawly/__pycache__/__init__.cpython-313.pyc,sha256=gA1e4ELcv0ZAR9gVOZ22VPkPWptYzZYVtR-opvcLtTQ,3462
65
+ pawly/__pycache__/action_selection.cpython-311.pyc,sha256=SmwbkOENkrFBa5LgdYkQLDglr_Pq8qbdBAem_dLR1C4,4194
66
+ pawly/__pycache__/action_selection.cpython-313.pyc,sha256=PZdCkKax6vLg7QARl2TDh-qOR8JrbtszX0dEo_CUeHs,3616
67
+ pawly/__pycache__/api.cpython-311.pyc,sha256=w879qfRpirr5Q6yalHOCZrd08XEbu9WIUv0JwsdutbA,2417
68
+ pawly/__pycache__/api.cpython-313.pyc,sha256=e5FQN24mOhGlmhhTysZveBK2iBQooD-bt0FQxc0LZX4,2280
69
+ pawly/__pycache__/contracts.cpython-311.pyc,sha256=akSMEJ17Ng-58LN2ITm1fnfC3cm7cSlHyUNHyCoe_Cs,9787
70
+ pawly/__pycache__/contracts.cpython-313.pyc,sha256=BYHy_1c_bQT-mIK5eARR7Hdn9JGjdDNwJbLmsDv5Vyg,8604
71
+ pawly/__pycache__/decision_engine.cpython-311.pyc,sha256=0nLlmEJ7zQMuOUNTHsydXtgraWmrKt9jLi8wn5_6-PM,526
72
+ pawly/__pycache__/decision_engine.cpython-313.pyc,sha256=S9MlvTo4uPlEppTnmpAVXVDaePJ22h5umsXkCzuAk7E,457
73
+ pawly/__pycache__/pawprint_loader.cpython-311.pyc,sha256=NSZepy16gFizV5iJF9DjU0ZKZRKeRDY7f9N9wyrWqPY,16469
74
+ pawly/__pycache__/pawprint_loader.cpython-313.pyc,sha256=Ghi3dm83FYZhf1IRNWFkBZeWv9aULUafdrwqhjDyWu0,14404
75
+ pawly/__pycache__/protected_oss.cpython-311.pyc,sha256=fvgJ_Xqs4HpKcmk-L9tTOXCnhR8jFKC9PlsPSWSOnrI,11695
76
+ pawly/__pycache__/protected_oss.cpython-313.pyc,sha256=lk6lUqJipnfXsg98nWCtWnxoJvEN2xPOU2bGGs5xims,10515
77
+ pawly/__pycache__/runtime.cpython-311.pyc,sha256=Ljh2bND6C421o8sE7yiR_zGaWiU4XG3b-awPFkAyEDc,43967
78
+ pawly/__pycache__/runtime.cpython-313.pyc,sha256=zNYPhMaAShHFu4QP5WWfUu-ZaJjg4u7njT1oOIO695Y,41884
79
+ pawly/__pycache__/runtime_bootstrap.cpython-311.pyc,sha256=5PmaLZt2CFReQVAWvXmCsH1rj59uRUKPAvaRm0hNk7Q,5293
80
+ pawly/__pycache__/runtime_bootstrap.cpython-313.pyc,sha256=_oNMx4j7Xb8V_W_xEHHByBcV1ZOYY_vGcS6zMs1WMTY,4560
81
+ pawly/__pycache__/runtime_decision.cpython-311.pyc,sha256=qf09UGQ3zkDlB2iDYye7E962lSTiEmK1Xi2LK7ZsZGI,2410
82
+ pawly/__pycache__/runtime_decision.cpython-313.pyc,sha256=h9db7egKMyMJLOshRrZ5_Ft-pkRd7zVXDP8cuAPK0GQ,2144
83
+ pawly/__pycache__/runtime_execute.cpython-311.pyc,sha256=KJun4vAQpgxmhIdlLd2_Sg1tbEuwAfJHPCfKFpk9Y9M,2805
84
+ pawly/__pycache__/runtime_execute.cpython-313.pyc,sha256=8ZLtMF4hmyMUyKzgJa-J1-OJxeDbd1IoN1WxshVFK2U,2726
85
+ pawly/__pycache__/runtime_flow.cpython-311.pyc,sha256=WORim4liVWxms1-aOjnn9-o1mWsYRX3foWTGhKuzWhs,3143
86
+ pawly/__pycache__/runtime_flow.cpython-313.pyc,sha256=Kzvjpd8MDbc0RvkZRPscj2M7ywDQCksbt12e-kARNSk,2882
87
+ pawly/__pycache__/runtime_ids.cpython-311.pyc,sha256=yBKNkqP_008t0VjeVotni1aDULp2LSzjajbLgeHI_Hg,1984
88
+ pawly/__pycache__/runtime_ids.cpython-313.pyc,sha256=EPqiIe3KRFZQ0WTbO2BjQSu0EWex_CGX_g3e0LDz07M,1747
89
+ pawly/__pycache__/runtime_report.cpython-311.pyc,sha256=BQLmIqBy5Zk9UcrtPnQbP_gBM1h6s91cj-U198wtqdE,1140
90
+ pawly/__pycache__/runtime_report.cpython-313.pyc,sha256=vbOgIhy1DZoy0zKZ1wPEiyHV-YIueJ6dq8sSDC4u7kM,1045
91
+ pawly/__pycache__/runtime_request.cpython-311.pyc,sha256=LV025l_bo8ipLI4Z2Cl1-lJI7dnFwhrYgri5aKK4wz0,1039
92
+ pawly/__pycache__/runtime_request.cpython-313.pyc,sha256=JlrWaCv8qSmni_3vkCbgoEE0Ks3BrqEtqGJapYQO_6w,949
93
+ pawly/__pycache__/runtime_result.cpython-311.pyc,sha256=UX5TET66f3paH5d0XNwRBXOYglTtmLW6Zai4pT1r9fE,5335
94
+ pawly/__pycache__/runtime_result.cpython-313.pyc,sha256=rDmwD-IxZ8lI19btbEfspViZgdRSHibyNgk7ep3dn2o,5253
95
+ pawly/__pycache__/runtime_scoring.cpython-311.pyc,sha256=7vCJOSLJbN5vIpcMdWhBy6NqIKDaiNLtz5rEuMF7k2s,1255
96
+ pawly/__pycache__/runtime_scoring.cpython-313.pyc,sha256=F4xM0PwpHoE0VRgTw80qmralgznMhe8gbmaUrSwealY,1103
97
+ pawly/__pycache__/shield.cpython-311.pyc,sha256=xZ-k-YowBNZCRo5aH8IZW0M9WUnOzwkh-7SJANPZfEg,27065
98
+ pawly/__pycache__/shield.cpython-313.pyc,sha256=3zukTqvJJ85-MzUFKJEl83lWJc59z9owbscr-OFpYLY,24092
99
+ pawly/__pycache__/skill_registry.cpython-311.pyc,sha256=MJKwMwZ8B2jsVLEVnj8022jBtQFU4U5DUz6I-R3J9jY,2443
100
+ pawly/__pycache__/skill_registry.cpython-313.pyc,sha256=AA3EkdJ9KH-7EkWI-xKOGSgzWtdRXYe9W9MfdI4N5JI,2192
101
+ pawly/__pycache__/task_request.cpython-311.pyc,sha256=B6hBGToH-MDIot27tcR4cJBpINlrB1D541O8LAH9vnA,1670
102
+ pawly/__pycache__/task_request.cpython-313.pyc,sha256=NiLmBWQsCFwbNPZm5pI39FmPwwIHjanLFc0bItlOTTI,1522
103
+ pawly/__pycache__/types.cpython-311.pyc,sha256=cMJ4LNfSM9awHn4uPkFbUtj1cQtOrsGECwpScFfzrGc,771
104
+ pawly/__pycache__/types.cpython-313.pyc,sha256=WzQv3pIrYXOFXaTE0Snyha2nRD9mDJkgq_jM_TuOdag,630
105
+ pawly/approval/__init__.py,sha256=wKFdMM5WT7sz1YePUPhoGGllELCpt7SlOyAsqgTRxm4,554
106
+ pawly/approval/callback.py,sha256=75VieqZZ-_tEHaPOrEpA-LQIfgQCgkGITu-6TOAqKuQ,372
107
+ pawly/approval/handler.py,sha256=tzSvTuGEuTGgG63Gjg7YS0dLOeM7XyCUgbSKFAbtpkg,1021
108
+ pawly/approval/models.py,sha256=Xrkjo5qci_9h4TJ9ujdXUWnQk3op41kc3-HeeyFm5ZE,3553
109
+ pawly/approval/queue.py,sha256=AFCMjlc3hVwffdpNlBKOJx2nSMhVv3R4UmwoFjT7edw,4028
110
+ pawly/approval/router.py,sha256=0v8vt0lCsUluWVZ8xzhLdqGkcD9vxvYEnYHGI1yzF-Q,2546
111
+ pawly/approval/timeout.py,sha256=96BPGRpA7rtxBkRF0kB1LVfWvECojWazVgXs1uujp4Q,584
112
+ pawly/approval/__pycache__/__init__.cpython-311.pyc,sha256=75JELszQi2ukzUjzHgNAsY0oGJ6jEKubrmgf1LoJ8dM,789
113
+ pawly/approval/__pycache__/__init__.cpython-313.pyc,sha256=0JhJgPnNpUeNdUllDShffMe787WJ-K1kJ6GMgbxrEDY,671
114
+ pawly/approval/__pycache__/callback.cpython-311.pyc,sha256=UBTYU4YOpLTiv18eSEaNVtnRv1Pcy4GaZPZyak5F4WM,1201
115
+ pawly/approval/__pycache__/callback.cpython-313.pyc,sha256=25kgWOkyptV0HGdaI1QLpIwpzqjzCSG5jERFzt7Z-AY,1052
116
+ pawly/approval/__pycache__/handler.cpython-311.pyc,sha256=hXhaZ74Z3XLfz_vgaki8NpjEdZhYP3FuXIc0sXeiqNc,2159
117
+ pawly/approval/__pycache__/handler.cpython-313.pyc,sha256=3pfB4Hv_wWw2ZaaFeh3isjhHeYYEByNU0LL_2CCQFVo,2039
118
+ pawly/approval/__pycache__/models.cpython-311.pyc,sha256=VquAAuHDptzEVM0oaD_nIvOW7kO_v0GLu24cy2WzoWo,6397
119
+ pawly/approval/__pycache__/models.cpython-313.pyc,sha256=hwzOW6nOrw2Hqu9-D031okllj3JgrI9ydHY6-lOjHbo,6183
120
+ pawly/approval/__pycache__/queue.cpython-311.pyc,sha256=FUJFjN4XPH6tngMSbH0Hi1mvxlgdvtUsR5i79VgumMI,9112
121
+ pawly/approval/__pycache__/queue.cpython-313.pyc,sha256=_nU2wrtjEtfnDjfDUV-rMtyOAzTPB8t8KCO-dgl0ftA,7781
122
+ pawly/approval/__pycache__/router.cpython-311.pyc,sha256=tqlVvvVJcN75-qC-moWD7csJ3CA9TkX7qFd3jASOdMY,4498
123
+ pawly/approval/__pycache__/router.cpython-313.pyc,sha256=EHa55a0tgmhHBuGP22TW6hdBVVmGKSoPFAs0MEoYWAE,4297
124
+ pawly/approval/__pycache__/timeout.cpython-311.pyc,sha256=w9jxAAg4Yxbk4Ev7xmNkmFBR56kwR17sHZ74Z0YCheA,1312
125
+ pawly/approval/__pycache__/timeout.cpython-313.pyc,sha256=SwHK8uYBbJY4cRnYzsFEmj_EguHg9VvFlCwotNlNmF0,1212
126
+ pawly/policy/__init__.py,sha256=pKHefvP1ZApvOPwQ4ocIRQqIZZhiiHJFj-9ogUtKakU,479
127
+ pawly/policy/base.py,sha256=AJAXZALwlZCL-56rD1wwLGHKJidS6ouQpdmI39Dfc7Y,2810
128
+ pawly/policy/cloud.py,sha256=2b_N3luMwZAQ7LiEFtXM-Vc280OcjGjj_ki3IFvsx8Q,596
129
+ pawly/policy/heuristic.py,sha256=BgY_UZYbJqagMP6Gmpt_Us1rsyF-sGXP7hXkTFmaYQs,4408
130
+ pawly/policy/resolve.py,sha256=r5jyzVM60UCVqxkcC0dDIzG5ZiNy8JmjX3MYDlMCZac,2132
131
+ pawly/policy/__pycache__/__init__.cpython-311.pyc,sha256=dtClcqEmTFee2nNL9h71AbfAg8wXl0ORqDNyz6lneyg,735
132
+ pawly/policy/__pycache__/__init__.cpython-313.pyc,sha256=qmRQ46YtpRiqbHX85uGc-GXf2Sb5v6BKGL4GTcSH8S0,620
133
+ pawly/policy/__pycache__/base.cpython-311.pyc,sha256=ja71KQSilDF2WoQ9rvkxPR33H1SbEq9LVOlr_teyJ-Y,5181
134
+ pawly/policy/__pycache__/base.cpython-313.pyc,sha256=NfwTcfxYtPSdAEdE3sBvzUGYECBjCl_wcGLUgbgE9ZA,4497
135
+ pawly/policy/__pycache__/heuristic.cpython-311.pyc,sha256=YgDplptM8Ec2214AcNkY9QM-9TOepkIdAVp5DPDwlWc,8216
136
+ pawly/policy/__pycache__/heuristic.cpython-313.pyc,sha256=E-UzM__D_NAjR4joVvf81N69fj97GVdADsM1qvuve0Q,6859
137
+ pawly/policy/__pycache__/resolve.cpython-311.pyc,sha256=yDCUSJuwPbHIQ82a8JaFNiHLFoUdBYyKU6MN5iDxL9s,3300
138
+ pawly/policy/__pycache__/resolve.cpython-313.pyc,sha256=k-naR2lPT8I-xaj7cWiWCkt9OLHBhegod4Ijm-8bKIs,3042
139
+ pawly/escalation/patterns.py,sha256=jiLa2rLlGvRaH5X6oYqmf3SnxurWAnIekkm5RtBApak,1084
140
+ pawly/escalation/__pycache__/patterns.cpython-311.pyc,sha256=Ef_9IXCMQn5BDLxR7_nTuXKbN7aQBP8vQELwqRQjdXs,2082
141
+ pawly/escalation/__pycache__/patterns.cpython-313.pyc,sha256=c7LkQTyHwTBD_gjQa9zc3kbeye0lToIlXP31AY4hSzY,1806
142
+ pawly/adapters/__init__.py,sha256=6lidC5n5pOMHD3R8G95MJDlMEsEbjCBjIdJsvw_-bZQ,588
143
+ pawly/adapters/claude_skills.py,sha256=KO_dFGeJaNcRj7wES00W-srDbfFsZ8CfljSEZqRCRxA,7123
144
+ pawly/adapters/openai_agents.py,sha256=Zo-xoqgLiSRsqkamkAKuCvlxravV522BKnzZKupIv9g,6892
145
+ pawly/adapters/__pycache__/__init__.cpython-311.pyc,sha256=O8xasWspKr440Z_0aPtbcQ3K3_PgkDjsxmuY9MuJak8,788
146
+ pawly/adapters/__pycache__/__init__.cpython-313.pyc,sha256=B-VDiowRAbGVF8uciOU2pD0mwG6wMi2zd6J04S3VIWU,669
147
+ pawly/adapters/__pycache__/claude_skills.cpython-311.pyc,sha256=rxmx75tX0RULHE8bvNFhZXCP_z9mCyfjewF4lcqQydA,8505
148
+ pawly/adapters/__pycache__/claude_skills.cpython-313.pyc,sha256=ziDcEiUWQMrJNNBjJ2lY3nJePsFr8Kf7puDrzpRgpgE,7992
149
+ pawly/adapters/__pycache__/openai_agents.cpython-311.pyc,sha256=W9Ouk3JAC7OLA-CPucQYyDsFuu9NXUoAAr1oYzy_3Ew,8372
150
+ pawly/adapters/__pycache__/openai_agents.cpython-313.pyc,sha256=_3rNBhh9eB28HSRIo9MseYAI40iBnYtwwWkmE1S2pxA,7838
151
+ pawly/budget/checker.py,sha256=73CHRdllVXwfiM4011NjKGK5u4mhTtrmhnuccMdfVBc,1586
152
+ pawly/budget/state.py,sha256=T7GUzrhVZM5KeBYtIwAEJtpMomDbERJLqDlpqX_jeyM,372
153
+ pawly/budget/__pycache__/checker.cpython-311.pyc,sha256=qRNKT-qOKvRS5IjVbLPahGVGN2VF1jqQvnr_3L3uNwc,3141
154
+ pawly/budget/__pycache__/checker.cpython-313.pyc,sha256=AyONSlEgTu3XkGRq0oEoakQAfeWj2pfCwFer75dzwU0,2680
155
+ pawly/budget/__pycache__/state.cpython-311.pyc,sha256=nR7KuusfuV9MIVt4MVHUT3k60RwGa63wGzMZe534OBg,1362
156
+ pawly/budget/__pycache__/state.cpython-313.pyc,sha256=nM8Lzb94XBN4lJrgGccS-GLllPQCXrGfNf6nMtRMm4k,1230
157
+ pawly/performance/metrics.py,sha256=joiITeG21hojRsG6u-qoYP7-cgWGRRpFCF47AYb9_DI,1640
158
+ pawly/performance/report.py,sha256=u-lCSLqGAmThuxsG1a1ppL7tWNQWTGPMv1g8Dlac-3w,2002
159
+ pawly/performance/__pycache__/metrics.cpython-311.pyc,sha256=U_tnISOOFCtjYU4GbgKilEW0IzcTuMWR-G24bOihLGg,3141
160
+ pawly/performance/__pycache__/metrics.cpython-313.pyc,sha256=ReFxLHK8QFZBGfHiExdIOAqCDmU_ocLT9pOOBvOrRuk,2771
161
+ pawly/performance/__pycache__/report.cpython-311.pyc,sha256=ZgG14KpbOjbzONod3fr0uyVIclr8xl8llP5M8MGxbj8,2430
162
+ pawly/performance/__pycache__/report.cpython-313.pyc,sha256=bsFRhS-bz6DbFPwjFliojdFpUmhIJIkSaOizWZdt-P0,2168
163
+ pawly/schemas/decision.schema.json,sha256=sVSqKvuV9cHenawM7LCrdeXfZ4ibtgPAGI4R2VDMLCU,1044
164
+ pawly/schemas/intent.schema.json,sha256=J5WWA1wu7GTLrK_q3SbeAqIL484tfAXi446Yixgr4s4,985
165
+ pawly/schemas/report.schema.json,sha256=NMeQf5Nxlu9PYmcokyV6iRyS1g_Rg5qQ3v7bIPtH2wU,1112
166
+ pawly/loader/schema_loader.py,sha256=wXCDZBccdshVAo4ZzPpdoRxSJ26ZOe2luwUJjNk7p_Y,1519
167
+ pawly/loader/yaml_loader.py,sha256=njeIjGFnbAYNDKUrlA4t0ExP15sW5ErbJ5Bj__XXq3E,5187
168
+ pawly/loader/__pycache__/schema_loader.cpython-311.pyc,sha256=pmvznzy2kzVbDY9vYCCVxH92SuIXSXUwgJzjz9b1F6E,3265
169
+ pawly/loader/__pycache__/schema_loader.cpython-313.pyc,sha256=NpukJQjFbyiIC1FlrxD_eYa8WqJV2mJTGfjIAy1cL2g,2876
170
+ pawly/loader/__pycache__/yaml_loader.cpython-311.pyc,sha256=ePbhdo93d526nClMxQ0pI7nPqu9pY_jyIECR3anFa_M,9087
171
+ pawly/loader/__pycache__/yaml_loader.cpython-313.pyc,sha256=86cq4S4uM0TiTMa8pKQ1LrJ4yDSAki7__dPopirrPdc,7707
172
+ pawly/audit/diff.py,sha256=Ru3vrn1u6l8MN5OiPJ6HhJSk7Bo_MJzx5Hf4n8x9loI,771
173
+ pawly/audit/events.py,sha256=8elaeXbLhIJ_wgKuX_nAjXxtGITWIqZccGeDv_Q_j7E,5517
174
+ pawly/audit/ledger.py,sha256=ti4xFrBZdpaqSO8FE5ngMOZS2SnyG8BcbnNZDZYN5bs,1490
175
+ pawly/audit/replay.py,sha256=yJk-O3a5U7TiiE5gW46jKWLFyIwFbgmn-PtbezUZMIY,1655
176
+ pawly/audit/__pycache__/diff.cpython-311.pyc,sha256=B9VayC7rvsyTsMKE1sUL6ZrfjiQ8yla4VLqpWoFPB_M,1240
177
+ pawly/audit/__pycache__/diff.cpython-313.pyc,sha256=iAqeE01eTpVqqdWeWHTbBjjUKaTCWyOAVaumLHwzpHQ,1077
178
+ pawly/audit/__pycache__/events.cpython-311.pyc,sha256=5hUxEIXgUTP_UYb-8zao04pruD1mutNHi_jtZNZ5-9o,5812
179
+ pawly/audit/__pycache__/events.cpython-313.pyc,sha256=Fy9-7aAVS2upmDxNU2OixXAbHwe8FIgZOGFIVu3kgEQ,5759
180
+ pawly/audit/__pycache__/ledger.cpython-311.pyc,sha256=jnaD2bCLHi1Ex2ldjh21-nGdLD4ANnmfKo3PO-EFvWA,3509
181
+ pawly/audit/__pycache__/ledger.cpython-313.pyc,sha256=ZKzSNyhy2WZEO8Ijm-LrGvVfPNMxkLoIygQmO29nDtQ,3068
182
+ pawly/audit/__pycache__/replay.cpython-311.pyc,sha256=F86WA7OlSCIK8l8NAdldQzU06dnp0c9lf_axRmCY2P4,2560
183
+ pawly/audit/__pycache__/replay.cpython-313.pyc,sha256=sLDJjF0WG3kukGngzz5EXMRjdlSflOlziYJjBOp0xVY,2266
184
+ pawly/validator/validator.py,sha256=gCM8BgaMhZw7Up3BGEgOHCPaq7BoT3wGoegLXEC4TaU,8430
185
+ pawly/validator/__pycache__/validator.cpython-311.pyc,sha256=676AmbyrlZtQl-EMed3eCcHKhyAjTREy7qnfdn1R9_w,12270
186
+ pawly/validator/__pycache__/validator.cpython-313.pyc,sha256=mSoEx_9TpOVmeGUhWVsUb4cTPmK8irMUOLzTSYfJJY0,10574
187
+ pawly/gateway/__init__.py,sha256=kYAlwzxrluCs3PI0HL3DVo9M2oMyb64oyfeeGVwmPlY,245
188
+ pawly/gateway/adapter_support.py,sha256=iFfWSiN89qp0-QhUEfUa00_CXDl2EsxywTugXwwdrF4,1527
189
+ pawly/gateway/protocol.py,sha256=Lcl2kl50o4VQH1OdzYdp5jSJBZdosk9rQ9w-VW574Q8,518
190
+ pawly/gateway/result.py,sha256=tKSXcoA0YFKTsOGVD3ezNaiCISoZiuGgocLj86wkVbY,2481
191
+ pawly/gateway/wrapper.py,sha256=rTzvRHRf_C9bAfNKYNkQpoZ0PyoUG7gMVFkliXM1jZc,9809
192
+ pawly/gateway/__pycache__/__init__.cpython-311.pyc,sha256=Si8XbFkKlFGTs8SA0Ut3uP4kSS7-WZ3WG7weyNoQX-s,493
193
+ pawly/gateway/__pycache__/__init__.cpython-313.pyc,sha256=l7RnvnNw49rFh_L-nFUbkSeyG4uGDNS55CfD-UiQ-ME,436
194
+ pawly/gateway/__pycache__/adapter_support.cpython-311.pyc,sha256=GAf12grs5716IUdtSMS2iuzt2cxjWxzAlFwXcKtqRf0,2735
195
+ pawly/gateway/__pycache__/adapter_support.cpython-313.pyc,sha256=cK0I2O_kLl7MF9hb6Ok2gvvAxZzFb1FMAwF084yPeJU,2535
196
+ pawly/gateway/__pycache__/protocol.cpython-311.pyc,sha256=iMCsaOwTFyjohcCg3oSF2oZy4Em0laeZvFdMX9B1IjQ,1328
197
+ pawly/gateway/__pycache__/protocol.cpython-313.pyc,sha256=XlIEOOzYhQL4pGv4rkPQeMcLwT-B9p3IGKnpyTvAFS4,1233
198
+ pawly/gateway/__pycache__/result.cpython-311.pyc,sha256=LLVluuSM8FTTPlWuxJTKkCNJnIsx15R314CBsJ25R-w,3882
199
+ pawly/gateway/__pycache__/result.cpython-313.pyc,sha256=ke1Ig3O4eWGttwBV6aiIjXqHB2szRYhC5JiyxE5V8PM,3780
200
+ pawly/gateway/__pycache__/wrapper.cpython-311.pyc,sha256=ND6aiLhb07PibMcZURelrqbXK8703Qbkxnb5v5_qmMY,10369
201
+ pawly/gateway/__pycache__/wrapper.cpython-313.pyc,sha256=0tJw9EclKuRp91bF7G6Aef18Hnf7h1lSngWX0JR8Jk4,9955
202
+ pawly-0.1.0.dist-info/METADATA,sha256=y-dn4o33LkSKerjQMgNi8rz3G50wHJK7VRw2AB-VKho,226
203
+ pawly-0.1.0.dist-info/WHEEL,sha256=CW4pY6VXU0LIwIb45v5y_RC0bXjtvRGCkCnDvQFx9Jk,90
204
+ pawly-0.1.0.dist-info/entry_points.txt,sha256=9LZdz78dO6a0051_q94AN_cpXqYHf3fHCKX5lV6TkBE,41
205
+ pawly-0.1.0.dist-info/top_level.txt,sha256=lO4fnq_n3GDztkVHQxsDlPJWyi4x6xpte244jrlyeso,6
206
+ pawly-0.1.0.dist-info/RECORD,,
@@ -0,0 +1,4 @@
1
+ Wheel-Version: 1.0
2
+ Generator: pawly-build-backend
3
+ Root-Is-Purelib: true
4
+ Tag: py3-none-any
@@ -0,0 +1,2 @@
1
+ [console_scripts]
2
+ pawly = pawly.cli:main
@@ -0,0 +1 @@
1
+ pawly